From c2f0a6b3e45bf76fdf844170964746fcc19406b0 Mon Sep 17 00:00:00 2001 From: BlackVortexAI Date: Sat, 15 Aug 2026 21:11:11 +0200 Subject: [PATCH] Release v0.1.0 workflow toolkit overhaul --- .github/workflows/validate.yml | 54 + .gitignore | 12 + CONTEXT.md | 65 + README.md | 225 +++- __init__.py | 60 - docs/adr/0001-separate-smart-pipe-contract.md | 16 + .../0002-renderer-independent-subgraph-ui.md | 16 + docs/adr/0003-wireless-smart-pipe-spine.md | 352 ++++++ examples/images/control-center-config.png | Bin 0 -> 110745 bytes .../images/control-center-workflow-states.png | Bin 0 -> 179122 bytes examples/images/empty-latent-random-ratio.png | Bin 0 -> 165680 bytes examples/images/prompt-ast-categories.png | Bin 0 -> 132731 bytes examples/images/smart-pipe-merge-config.png | Bin 0 -> 76146 bytes examples/images/smart-pipe-slot-config.png | Bin 0 -> 68459 bytes examples/images/smart-pipe-wireless-merge.png | Bin 0 -> 145431 bytes examples/images/subgraph-ui-layout.png | Bin 0 -> 96054 bytes .../control-center-workflow-states.json | 264 ++++ .../workflows/empty-latent-random-ratio.json | 251 ++++ examples/workflows/prompt-ast-categories.json | 397 ++++++ .../workflows/smart-pipe-wireless-merge.json | 933 ++++++++++++++ examples/workflows/subgraph-ui-layout.json | 294 +++++ js/bv_dynamic_combo_model.js | 8 + js/bv_latent_randome_ratio.js | 11 +- js/bv_nodepack.core.js | 21 +- js/bv_pipe_watch.js | 46 - js/bv_prompt_debug.js | 113 +- js/bv_smart_pipe.js | 1113 +++++++++++++++++ js/bv_smart_pipe_merge.js | 333 +++++ js/bv_smart_pipe_merge_model.js | 84 ++ js/bv_smart_pipe_routing.js | 443 +++++++ js/bv_smart_pipe_slots.js | 95 ++ js/bv_subgraph_divider.js | 4 +- js/bv_subgraph_dynamic_combo.js | 217 +--- js/bv_subgraph_heading.js | 9 +- js/bv_subgraph_layout.js | 128 ++ js/bv_subgraph_spacer.js | 4 +- js/bv_subgraph_ui_projection.js | 298 +++++ py/nodes/bv_control_center.py | 21 +- py/nodes/bv_latent_empty_random_ratio.py | 61 + py/nodes/bv_latent_random_ratio.py | 4 +- py/nodes/bv_latent_random_rotate_90.py | 25 +- py/nodes/bv_pipe.py | 6 +- py/nodes/bv_pipe_config.py | 4 +- py/nodes/bv_prompt_debug.py | 8 +- py/nodes/bv_smart_pipe.py | 111 ++ py/nodes/bv_smart_pipe_merge.py | 157 +++ py/nodes/bv_subgraph_dynamic_combo.py | 14 +- py/nodes/bv_subgraph_heading.py | 2 +- py/nodes/bv_subgraph_spacer.py | 2 +- py/nodes/bv_util_hex_color_int.py | 11 +- py/util/latent_dimensions.py | 54 + py/util/prompt/category.py | 38 +- pyproject.toml | 4 +- scripts/embed_example_workflows.py | 45 + scripts/generate_example_workflows.mjs | 165 +++ tests/control_center_model.test.mjs | 55 + tests/dynamic_combo_model.test.mjs | 16 + tests/smart_pipe_merge_model.test.mjs | 73 ++ tests/smart_pipe_routing.test.mjs | 481 +++++++ tests/smart_pipe_slots.test.mjs | 109 ++ tests/subgraph_ui_projection.test.mjs | 378 ++++++ tests/test_control_center.py | 25 + tests/test_dynamic_combo.py | 22 + tests/test_hex_color.py | 32 + tests/test_latent_dimensions.py | 35 + tests/test_prompt_category.py | 50 + tests/test_smart_pipe.py | 28 + tests/test_smart_pipe_merge.py | 96 ++ ui/package-lock.json | 4 +- ui/package.json | 2 +- ui/src/components/BVPortal.tsx | 35 +- .../components/control/BVControlComponent.tsx | 144 +-- .../control/BVControlRowComponent.tsx | 135 +- .../components/control/bv_control_center.ts | 727 +++-------- ui/src/index.css | 35 +- ui/src/index.tsx | 32 +- ui/src/types/assets.d.ts | 4 + ui/src/util/control/collector.ts | 25 +- ui/src/util/control/configHandler.ts | 75 +- ui/src/util/control/controlCenterModel.d.ts | 22 + ui/src/util/control/controlCenterModel.js | 63 + ui/src/util/control/controlHelper.ts | 62 - ui/src/util/control/groupWatcher.ts | 0 ui/src/util/control/singletonHandler.ts | 95 -- ui/src/util/control/stateHandler.ts | 351 ------ ui/src/util/control/subgraphHandler.ts | 185 --- 86 files changed, 7997 insertions(+), 1997 deletions(-) create mode 100644 .github/workflows/validate.yml create mode 100644 .gitignore create mode 100644 CONTEXT.md create mode 100644 docs/adr/0001-separate-smart-pipe-contract.md create mode 100644 docs/adr/0002-renderer-independent-subgraph-ui.md create mode 100644 docs/adr/0003-wireless-smart-pipe-spine.md create mode 100644 examples/images/control-center-config.png create mode 100644 examples/images/control-center-workflow-states.png create mode 100644 examples/images/empty-latent-random-ratio.png create mode 100644 examples/images/prompt-ast-categories.png create mode 100644 examples/images/smart-pipe-merge-config.png create mode 100644 examples/images/smart-pipe-slot-config.png create mode 100644 examples/images/smart-pipe-wireless-merge.png create mode 100644 examples/images/subgraph-ui-layout.png create mode 100644 examples/workflows/control-center-workflow-states.json create mode 100644 examples/workflows/empty-latent-random-ratio.json create mode 100644 examples/workflows/prompt-ast-categories.json create mode 100644 examples/workflows/smart-pipe-wireless-merge.json create mode 100644 examples/workflows/subgraph-ui-layout.json create mode 100644 js/bv_dynamic_combo_model.js delete mode 100644 js/bv_pipe_watch.js create mode 100644 js/bv_smart_pipe.js create mode 100644 js/bv_smart_pipe_merge.js create mode 100644 js/bv_smart_pipe_merge_model.js create mode 100644 js/bv_smart_pipe_routing.js create mode 100644 js/bv_smart_pipe_slots.js create mode 100644 js/bv_subgraph_layout.js create mode 100644 js/bv_subgraph_ui_projection.js create mode 100644 py/nodes/bv_latent_empty_random_ratio.py create mode 100644 py/nodes/bv_smart_pipe.py create mode 100644 py/nodes/bv_smart_pipe_merge.py create mode 100644 py/util/latent_dimensions.py create mode 100644 scripts/embed_example_workflows.py create mode 100644 scripts/generate_example_workflows.mjs create mode 100644 tests/control_center_model.test.mjs create mode 100644 tests/dynamic_combo_model.test.mjs create mode 100644 tests/smart_pipe_merge_model.test.mjs create mode 100644 tests/smart_pipe_routing.test.mjs create mode 100644 tests/smart_pipe_slots.test.mjs create mode 100644 tests/subgraph_ui_projection.test.mjs create mode 100644 tests/test_control_center.py create mode 100644 tests/test_dynamic_combo.py create mode 100644 tests/test_hex_color.py create mode 100644 tests/test_latent_dimensions.py create mode 100644 tests/test_prompt_category.py create mode 100644 tests/test_smart_pipe.py create mode 100644 tests/test_smart_pipe_merge.py create mode 100644 ui/src/types/assets.d.ts create mode 100644 ui/src/util/control/controlCenterModel.d.ts create mode 100644 ui/src/util/control/controlCenterModel.js delete mode 100644 ui/src/util/control/controlHelper.ts delete mode 100644 ui/src/util/control/groupWatcher.ts delete mode 100644 ui/src/util/control/singletonHandler.ts delete mode 100644 ui/src/util/control/stateHandler.ts delete mode 100644 ui/src/util/control/subgraphHandler.ts diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..89ccb83 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,54 @@ +name: Validate + +on: + pull_request: + push: + branches: + - main + +permissions: + contents: read + +jobs: + validate: + runs-on: ubuntu-latest + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Validate Python syntax + run: python -m compileall -q __init__.py py + + - name: Run Python tests + run: python -m unittest discover -s tests -v + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + cache-dependency-path: ui/package-lock.json + + - name: Run frontend behavior tests + run: node --test tests/*.test.mjs + + - name: Install UI dependencies + working-directory: ui + run: npm ci + + - name: Type-check UI + working-directory: ui + run: npm run typecheck + + - name: Build UI + working-directory: ui + run: npm run build + + - name: Verify committed UI bundle + run: git diff --exit-code -- js/bv_nodepack.core.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7e2443b --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +__pycache__/ +*.py[cod] +.pytest_cache/ +.coverage +htmlcov/ + +ui/node_modules/ +ui/dist/ + +.idea/ +.vscode/ +*.log diff --git a/CONTEXT.md b/CONTEXT.md new file mode 100644 index 0000000..a6a816b --- /dev/null +++ b/CONTEXT.md @@ -0,0 +1,65 @@ +# BV Node Pack + +BV Node Pack provides composable workflow data carriers and user-interface building blocks for ComfyUI workflows and subgraphs. + +## Pipe language + +**Smart Pipe**: +A typed, incrementally extensible data carrier whose schema grows along a connected workflow path. +_Avoid_: Bus, global pipe + +**Pipe Schema**: +The ordered set of stable slots currently carried by a Smart Pipe. +_Avoid_: Config text, slot list + +**Pipe Slot**: +A stable, named and optionally typed position in a Pipe Schema. +_Avoid_: Port index, array position + +**Local Slot**: +A Pipe Slot introduced by the current Smart Pipe and added to its downstream schema. +_Avoid_: New input + +**Inherited Slot**: +A Pipe Slot received from an upstream Smart Pipe whose identity and name remain unchanged downstream. +_Avoid_: Copied slot + +**Missing Slot**: +An expected Inherited Slot whose stable identity is absent from the connected upstream Pipe Schema. +_Avoid_: Empty slot, null slot + +## Subgraph UI language + +**Subgraph UI Element**: +A persistent presentation element used to arrange exposed controls on a Subgraph, such as a Heading, Spacer, or Divider. +_Avoid_: Layout hack, dummy node + +**Subgraph Parameter Selector**: +A user-defined selection control whose visible options are also its emitted values. +_Avoid_: Dynamic text field + +**Layout Order**: +The user-defined, persistent ordering of exposed Subgraph inputs and Subgraph UI Elements. +_Avoid_: Widget index, creation order + +## Control Center language + +**Control**: +A user-defined toggle whose assignments participate in group-state resolution while the Control is active. +_Avoid_: Preset, workflow mode + +**Control Assignment**: +The association between a Control, a stably identified group, and its Activate, Mute, or Bypass action. +_Avoid_: Group title mapping + +**Control Conflict**: +Two or more active Controls assigning different actions to the same group. Resolution is deterministic: Activate wins over Mute, and Mute wins over Bypass. +_Avoid_: Last toggle wins + +**Rack**: +The workflow-level editor for defining Controls, Control Assignments, and Control Center behavior. +_Avoid_: Settings popup + +**Base Node State**: +The individual node mode that exists independently of restrictions applied by the Control Center. +_Avoid_: Previous index, default mode diff --git a/README.md b/README.md index 1e5135d..42b7460 100644 --- a/README.md +++ b/README.md @@ -18,14 +18,16 @@ A curated collection of **quality-of-life**, **UI**, and **prompting** nodes for - [Installation](#installation) - [Update & Uninstall](#update--uninstall) - [Node Overview](#node-overview) + - [Example Workflows](#example-workflows) - [Pipe Nodes](#pipe-nodes) - [UI / Layout Nodes](#ui--layout-nodes) - [Prompt / AST Nodes](#prompt--ast-nodes) + - [Latent Nodes](#latent-nodes) - [Util Nodes](#util-nodes) - - [Beta Nodes](#beta-nodes) + - [Control Nodes](#control-nodes) - [Prompt AST Syntax & Markup Guide](#prompt-ast-syntax--markup-guide) - [Example application for AST](#example-application-for-ast) -- [Quick Start (BV Pipe)](#quick-start-bv-pipe) +- [Quick Start (BV Smart Pipe)](#quick-start-bv-smart-pipe) - [Notes & Design Principles](#notes--design-principles) - [Changelog](#changelog) @@ -72,10 +74,115 @@ Each section below can be read independently. --- +## Example Workflows + +Each preview is also an importable ComfyUI workflow: download the PNG and drag it onto the canvas. The matching JSON is provided as a metadata-independent fallback. + +
+Smart Pipe: wireless branches and ordered merge + +[![Smart Pipe wireless merge example](examples/images/smart-pipe-wireless-merge.png)](examples/images/smart-pipe-wireless-merge.png) + +Two independently populated pipes are merged wirelessly and then inherited by the next processing stage. [Workflow JSON](examples/workflows/smart-pipe-wireless-merge.json) + +
+ +
+Control Center: reusable workflow states + +[![Control Center workflow-state example](examples/images/control-center-workflow-states.png)](examples/images/control-center-workflow-states.png) + +Multiple synchronized Control Center nodes manage grouped generation stages while showing their active state and conflict status directly on the graph. [Workflow JSON](examples/workflows/control-center-workflow-states.json) + +
+ +
+Subgraph UI: heading, combo, divider and spacer + +[![Subgraph UI layout example](examples/images/subgraph-ui-layout.png)](examples/images/subgraph-ui-layout.png) + +The presentation nodes are arranged in the logical order in which they should be exposed on a purpose-built Subgraph interface. [Workflow JSON](examples/workflows/subgraph-ui-layout.json) + +
+ +
+Random-ratio latent for composition exploration + +[![Random-ratio latent example](examples/images/empty-latent-random-ratio.png)](examples/images/empty-latent-random-ratio.png) + +A deterministic mix of common and project-specific aspect ratios feeds a sampler while width, height and ratio remain available for metadata and post-processing. [Workflow JSON](examples/workflows/empty-latent-random-ratio.json) + +
+ +
+Prompt AST: category-based prompt variants + +[![Prompt AST category example](examples/images/prompt-ast-categories.png)](examples/images/prompt-ast-categories.png) + +One structured prompt is filtered into a generation variant while the complete AST remains inspectable during workflow construction. [Workflow JSON](examples/workflows/prompt-ast-categories.json) + +
+ +--- + ## Pipe Nodes
-BV Pipe Config +BV Smart Pipe + +A chain-growing pipe with stable slot identities and per-node projections. + +**What it does** +- Opens its schema editor through the Configure button or context menu +- Adds up to 100 local slots and inherits upstream slots +- Allows each node to expose only the inputs and outputs needed at that point +- Keeps branches independent and transports all values through the pipe connection +- Passes inherited values across bypassed Smart Pipe nodes without applying their local writes +- Treats a muted Smart Pipe as a temporary execution-branch stop without changing the saved workflow +- Omits muted Merge sources for the current run; a Merge with no active sources stops only its dependent branch +- Marks slots from a removed upstream producer as missing instead of shifting links +- Blocks execution when a missing slot is still connected + +Slot types start as `*` and are persisted after inference from the first connection. + +**Configure local slots** + +![Smart Pipe slot configuration](examples/images/smart-pipe-slot-config.png) + +1. Add one or several local slot names. +2. Connect each local input so its type can be inferred and persisted. +3. Enable outputs only where a downstream node actually consumes the value. + +> **Experimental:** Wireless routing, especially across Subgraph boundaries, depends on a prompt-materialization adapter because ComfyUI does not yet expose an official pre-prompt extension hook. Keep physical Pipe links for compatibility-critical workflows until the Nodes 2.0, partial-execution and third-party wrapper matrix has been completed. + +
+ +
+BV Smart Pipe Merge + +Combines several Smart Pipe branches in an explicit, user-defined order. + +**What it does** +- Mixes wired and wireless Smart Pipe sources +- Adds wired sources through the temporary `Add Pipe Source` connector +- Adds wireless sources through the configuration dialog +- Prevents the same source from being selected more than once +- Keeps different stable slot IDs separate even when their visible names match +- Preserves a genuine branch write when a later source only inherited the shared base value +- Lets the later source win when several branches genuinely changed the same stable slot ID +- Exposes the merged Pipe Schema to subsequent Smart Pipe nodes +- Rejects missing sources and cycles instead of silently producing incomplete data + +**Configure source order** + +![Smart Pipe Merge configuration](examples/images/smart-pipe-merge-config.png) + +Wireless and wired sources share the same ordered list. For colliding stable Slot IDs, the later genuine branch write wins. + +
+ +
+BV Pipe Config [Deprecated] Defines the slot layout (names) for a BV Pipe. @@ -96,7 +203,7 @@ Defines the slot layout (names) for a BV Pipe.
-BV Pipe +BV Pipe [Deprecated] A config-driven carrier node that forwards one pipe connection while exposing named slots. @@ -139,7 +246,7 @@ When exposed, the heading is also rendered on the Subgraph node itself. > Heading inside Subgraph > -> ![BV Subgraph Heading Subgraph](docs/screenshots/bv_subgraph_heading_subgraph.png) +> ![BV Subgraph Heading Subgraph](docs/screenshots/bv_subgraph_heading_in_subgraph.png) > Heading rendered on Subgraph node > @@ -243,6 +350,8 @@ A UI-only divider node that draws a horizontal separator line. - `ast` (`BV_AST`) - `cleaned_prompt` (plain text, no markup, no comments) +Comment text is removed while its line break is preserved. + **Screenshot** > Example output > @@ -362,9 +471,10 @@ Inline categories are only recognized if the category name matches this pattern: ### Closing inline categories (@@) ```text @@ closes one currently open inline category - -Extra @@ without an open category are treated as literal text and will appear in the output ``` + +Every inline category must be closed. An unmatched `@@` or an unclosed inline +category raises an error with its line and column. ### ❌ Invalid (too many closings) ```text @ long dress,@@@@ @@ -397,43 +507,37 @@ Extra @@ without an open category are treated as literal text and will appear in **Output** - `latent` (`LATENT`) - `latent_width` (`INT`) -- `latent_hieght` (`INT`) +- `latent_height` (`INT`)
-BV Latent Random Aspect Ratio +BV Empty Latent Random Ratio **Purpose** -- Generates or resizes a latent to a randomly selected aspect ratio based on a seed -- Selection is deterministic via seed and configurable via enabled aspect-ratio toggles -- Uses a 1:1 base resolution reference (e.g. 1024×1024) commonly assumed for model training +- Creates a native empty latent at a deterministic aspect ratio +- Preserves the approximate pixel area of a square resolution reference +- Supports 512, 768, 1024, 1536, 2048, and a custom resolution **Input** -- `latent` (LATENT, optional) - - If connected, the current latent resolution is used as the 1:1 base reference - `seed` (INT) -- `enabled` (BOOLEAN) -- `base_resolution_px` (INT) - - Edge length of a square 1:1 reference in pixels (e.g. 1024 = 1024×1024), used when no latent is connected -- `use_1_1` (BOOLEAN) – Resolution 1×1 -- `use_3_2` (BOOLEAN) – Resolution 3×2 -- `use_2_3` (BOOLEAN) – Resolution 2×3 -- `use_4_3` (BOOLEAN) – Resolution 4×3 -- `use_3_4` (BOOLEAN) – Resolution 3×4 -- `use_16_9` (BOOLEAN) – Resolution 16×9 -- `use_9_16` (BOOLEAN) – Resolution 9×16 -- `use_21_9` (BOOLEAN) – Resolution 21×9 -- `use_9_21` (BOOLEAN) – Resolution 9×21 +- `resolution` (512, 768, 1024, 1536, 2048, or Custom) +- `custom_resolution` (INT, used for Custom) +- `alignment` (8, 16, 32, or 64; default 8) +- Individual toggles for 1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, and 9:21 +- `ratios` (optional multiline STRING for additional normalized `W:H` ratios) +- `batch_size` (INT) **Output** - `latent` (LATENT) -- `latent_width` (INT) -- `latent_height` (INT) +- `width` (INT, pixels) +- `height` (INT, pixels) - `picked_ratio` (STRING) -
+ +`BV Latent Random Aspect Ratio` remains available for existing workflows but is deprecated. ## Util Nodes @@ -443,10 +547,10 @@ Extra @@ without an open category are treated as literal text and will appear in BV Hex Color To Int **Purpose** -- Converts a HEX color code to an INT value +- Converts a three- or six-digit HEX color code to an INT value **Input** -- `prompt` (STRING) +- `hex` (STRING, `#RGB`, `RGB`, `#RRGGBB`, or `RRGGBB`) **Output** - `color` (`INT`) @@ -454,49 +558,44 @@ Extra @@ without an open category are treated as literal text and will appear in -## Beta Nodes +## Control Nodes
-BV Control Center ⚠️ BETA +BV Control Center -Centralized runtime control for **mute / bypass** states of node groups. +Centralized runtime control for explicit **activate / mute / bypass** states of node groups. **Key Features** -- Group-based control -- Subgraph-compatible -- Dynamic UI reconfiguration +- User-defined, case-sensitive Controls with stable IDs +- Stable group assignments displayed with their full graph/subgraph path +- Multiple synchronized Control Center nodes and subgraph exposure +- Controls participate only while their toggle is `ACTIVE`; `INACTIVE` Controls do not apply assignments +- Deterministic overlap resolution with `Activate > Mute > Bypass` +- Conflicting active assignments are explained in the Rack and in a persistent Node status row +- Optional Force Active behavior; otherwise each node's base mode is restored +- Unresolved groups remain visible and block execution while their Control is active +- Event-driven updates without polling or retry loops -**Screenshot** -> Configuration -> -> ![BV Divider](docs/screenshots/bv_controllconfig_button.png) +**Configure workflow states** -> Selected group -> -> ![BV Divider](docs/screenshots/bv_controllconfig_dialog1.png) +![Control Center Rack configuration](examples/images/control-center-config.png) -> Define status -> -> ![BV Divider](docs/screenshots/bv_controllconfig_dialog2.png) +1. Create a named Control such as `Generate only` or `Full pipeline`. +2. Assign one or more graph or Subgraph groups. +3. Choose `Activate`, `Mute`, or `Bypass` for each assignment. +4. Save once; every synchronized Control Center node updates immediately. ->Columns are automatically expanded -> ->![BV Divider](docs/screenshots/bv_controllconfig_dialog3.png) - ->After saving the configuration, the `BV Control Center` Node updates itself. -> ->![BV Divider](docs/screenshots/bv_controllconfig_dialog4.png) ->![BV Divider](docs/screenshots/bv_controllconfig_graph1.png) - ->Here is an example if, for example, Only Preview is active -> -> ![BV Divider](docs/screenshots/bv_controllconfig_graph2.png) +![Control Center graph state](examples/images/control-center-workflow-states.png)
--- -## Quick Start (BV Pipe) +## Quick Start (BV Smart Pipe) + +For new workflows, add **BV Smart Pipe**, open **Configure Smart Pipe**, and add +only the slots needed at that point in the chain. The following legacy setup is +kept for existing workflows only. 1. Add **BV Pipe Config** and enter slot names: @@ -518,7 +617,8 @@ prompt ## Notes & Design Principles -- Slot IDs are stable internally (`v_001…v_100`) +- Smart Pipe slots use stable logical IDs; `v_001…` are only their persisted physical connector ordinals. +- Legacy `BV Pipe` retains its fixed 100-slot contract solely for existing workflows. - Labels are user-defined and dynamic - UI nodes are rendered via JavaScript - All UI nodes support Subgraphs / Subflows @@ -528,6 +628,9 @@ prompt ## Changelog +### 2026-08-14 +- v0.1.0 — Add BV Smart Pipe and native random-ratio empty latents; harden AST, Dynamic Combo, Subgraph UI, Control Rack, debug, rotation, and HEX nodes. + ### 2026-01-29 - v0.0.24 — Make subgraph UI widgets more rebuild-safe. diff --git a/__init__.py b/__init__.py index d0e9c6c..e308824 100644 --- a/__init__.py +++ b/__init__.py @@ -1,16 +1,6 @@ import importlib -import os from pathlib import Path -try: - import server - from aiohttp import web - import nodes -except ImportError: - server = None - web = None - nodes = None - NODE_CLASS_MAPPINGS = {} NODE_DISPLAY_NAME_MAPPINGS = {} @@ -43,53 +33,3 @@ if nodes_dir.exists(): print(f"Failed to load module {module_name}: {e}") __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS", "WEB_DIRECTORY"] - -print("Hello from node", flush=True) - -# Define the path to our extension -workspace_path = os.path.dirname(__file__) -dist_path = os.path.join(workspace_path, "dist/example_ext") -dist_locales_path = os.path.join(workspace_path, "dist/locales") - -# Print the current paths for debugging -print(f"BV-NodePack workspace path: {workspace_path}") -print(f"Dist path: {dist_path}") -print(f"Dist locales path: {dist_locales_path}") -print(f"Locales exist: {os.path.exists(dist_locales_path)}") - -# Register the static route for serving our React app assets -if os.path.exists(dist_path) and server is not None and web is not None: - # Add the routes for the extension - server.PromptServer.instance.app.add_routes([ - web.static("/example_ext/", dist_path), - ]) - - # Register the locale files route - if os.path.exists(dist_locales_path): - server.PromptServer.instance.app.add_routes([ - web.static("/locales/", dist_locales_path), - ]) - print(f"Registered locale files route at /locales/") - else: - print("WARNING: Locale directory not found!") - - # Also register the standard ComfyUI extension web directory - - project_name = os.path.basename(workspace_path) - - try: - # Method added in https://github.com/comfyanonymous/ComfyUI/pull/8357 - try: - from comfy_config import config_parser - project_config = config_parser.extract_node_configuration(workspace_path) - project_name = project_config.project.name - print(f"project name read from pyproject.toml: {project_name}") - except ImportError: - pass - except Exception as e: - print(f"Could not load project config, using default name '{project_name}': {e}") - - if nodes is not None: - nodes.EXTENSION_WEB_DIRS[project_name] = os.path.join(workspace_path, "dist") -else: - print("ComfyUI Example React Extension: Web directory not found") diff --git a/docs/adr/0001-separate-smart-pipe-contract.md b/docs/adr/0001-separate-smart-pipe-contract.md new file mode 100644 index 0000000..fc229d5 --- /dev/null +++ b/docs/adr/0001-separate-smart-pipe-contract.md @@ -0,0 +1,16 @@ +# ADR 0001: Introduce Smart Pipe as a separate contract + +- Status: Accepted +- Date: 2026-08-14 + +## Context + +The legacy `BV_PIPE` contract exposes 100 positional inputs and outputs and depends on a separate configuration node. Incremental schemas, branches, and deleted producers cannot be represented safely by array position. + +## Decision + +`BV Smart Pipe` uses a new `BV_SMART_PIPE` contract. Slots have stable IDs and physical ordinals, schemas grow locally along a chain, and missing inherited slots remain explicit tombstones. The legacy Pipe nodes remain registered only for existing workflows and are marked deprecated; no converter or interoperability layer is provided. + +## Consequences + +New workflows gain compact, independently configurable pipes without positional substitution. Existing legacy workflows still load, but the old Pipe implementation receives no new features. diff --git a/docs/adr/0002-renderer-independent-subgraph-ui.md b/docs/adr/0002-renderer-independent-subgraph-ui.md new file mode 100644 index 0000000..c83b8ca --- /dev/null +++ b/docs/adr/0002-renderer-independent-subgraph-ui.md @@ -0,0 +1,16 @@ +# ADR 0002: Keep Subgraph UI state independent of the renderer + +- Status: Accepted +- Date: 2026-08-14 + +## Context + +Subgraph presentation previously depended on rebuilt widget arrays and their current indices. Removing and re-adding an exposed input could therefore move headings, spacers, dividers, or selectors after a reload. + +## Decision + +Subgraph UI identity and layout order are serialized as stable node properties and never derived from widget indices or labels. Frontend hooks are scoped to the owning node classes and use public node/widget operations. Legacy Canvas rendering remains specialized; Nodes 2.0 may fall back to standard widgets where it does not expose the same presentation hook. + +## Consequences + +Identity and saved order survive label changes, duplication, and workflow reload independently of the renderer. Exact Nodes 2.0 presentation and authoritative outer Subgraph ordering still require live verification against its evolving public API. diff --git a/docs/adr/0003-wireless-smart-pipe-spine.md b/docs/adr/0003-wireless-smart-pipe-spine.md new file mode 100644 index 0000000..17aea95 --- /dev/null +++ b/docs/adr/0003-wireless-smart-pipe-spine.md @@ -0,0 +1,352 @@ +# ADR 0003: Optional wireless Smart Pipe spine + +- Status: Proposed +- Date: 2026-08-15 + +## Question + +Can the `BV_SMART_PIPE` connection between Smart Pipe nodes be made optional without +turning Smart Pipe into a global, type-based auto-wiring system? + +The proposal is deliberately narrow: only the `pipe` connection between two +`BV Smart Pipe` nodes may be virtual. Value-slot links from Smart Pipe outputs to +consumer nodes remain ordinary, visible ComfyUI links. + +## Findings + +### ComfyUI still needs a real execution dependency + +The frontend converts every active graph node, including flattened inner Subgraph +nodes, into API-prompt entries. Ordinary input links become `[origin_id, +origin_slot]` references. Links whose origin is absent from the prompt are removed. +Therefore a wireless pipe cannot merely share frontend state: before submission it +must become an equivalent prompt-level input reference so the backend can build the +correct dependency graph. + +Sources: + +- [ComfyUI frontend `graphToPrompt`: flattening, widget and link serialization](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/utils/executionUtil.ts#L24-L148) +- [ComfyUI queue path calls `graphToPrompt` before submitting the API prompt](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/scripts/app.ts#L1494-L1617) +- [ComfyUI backend creates its `DynamicPrompt` and `ExecutionList` from the submitted prompt](https://github.com/Comfy-Org/ComfyUI/blob/master/execution.py) + +The current Smart Pipe backend already has the correct runtime contract. Its +optional `pipe` input supplies the upstream stable-ID value map; local values +override inherited values. Wireless mode only needs to synthesize that one input +reference. No value-slot or consumer behavior needs to change. + +Source: + +- [`BVSmartPipe.run` and the `BV_SMART_PIPE` input contract](../../py/nodes/bv_smart_pipe.py) + +### Use Everywhere proves the technique, but its matching model is too broad + +Use Everywhere analyses unconnected inputs, finds compatible broadcasters, creates +temporary real graph links, invokes the original `graphToPrompt`, and restores the +graph afterwards. It wraps `app.graphToPrompt` and `app.queuePrompt` to enter this +process. Its conflict strategy sorts matching broadcasters by priority and refuses +equal-priority ties. + +Sources: + +- [Use Everywhere graph analysis and temporary modification lifecycle](https://github.com/chrisgoringe/cg-use-everywhere/blob/main/js/use_everywhere_graph_analysis.js#L16-L135) +- [Use Everywhere temporary link creation and restoration](https://github.com/chrisgoringe/cg-use-everywhere/blob/main/js/use_everywhere_apply.js#L99-L221) +- [Use Everywhere `graphToPrompt` interception](https://github.com/chrisgoringe/cg-use-everywhere/blob/main/js/use_everywhere.js#L261-L305) +- [Use Everywhere deterministic priority handling and tie rejection](https://github.com/chrisgoringe/cg-use-everywhere/blob/main/js/use_everywhere_classes.js#L348-L406) +- [Use Everywhere documented matching, priority, conflicts and Nodes 2.0 limitations](https://github.com/chrisgoringe/cg-use-everywhere/blob/main/README.md#where-will-the-data-be-sent) + +Smart Pipe should not copy the global type/name matching model. `BV_SMART_PIPE` is +an ordered carrier with stable slot ownership, not an ambient value provider. A +wrong automatic match can silently inherit an entirely different schema and value +set. + +### There is no documented pre-prompt extension hook + +The public `ComfyExtension` interface exposes lifecycle hooks such as setup, +node-definition registration, node creation and graph configuration, but no +awaitable hook that can rewrite the API prompt immediately before submission. +Use Everywhere consequently wraps `app.graphToPrompt`, which is effective but is a +compatibility seam rather than a declared extension hook. + +Sources: + +- [Official `ComfyExtension` interface](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/types/comfy.ts#L100-L258) +- [Official extension development guide](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/docs/extensions/development.md) +- [Current `ComfyApp.graphToPrompt` implementation](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/scripts/app.ts#L1494-L1498) + +This means the feature is feasible today, including Nodes 2.0, but it must be +isolated behind a small adapter and covered by integration tests because the hook +can change and multiple extensions may wrap the same method. + +### Subgraph identities and execution addresses + +ComfyUI distinguishes three relevant identities: + +1. A Subgraph **definition** has a UUID and contains the reusable inner nodes. +2. A Subgraph **instance** is an ordinary host node whose `type` references the + definition UUID. Instance properties are serialized separately from the shared + definition. +3. An expanded node has a `NodeExecutionId`: the colon-separated numeric host-node + path followed by the inner node ID, for example `12:45:7`. + +`ExecutableNodeDTO` constructs this execution ID from every containing Subgraph +instance node ID plus the definition-local inner node ID. Nested Subgraphs recurse +with the extended path. Consequently, two instances of the same definition produce +different API-prompt node IDs even though both wrap the same definition-local node. + +Sources: + +- [Official locator and execution-ID formats](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/types/nodeIdentification.ts#L3-L28) +- [`ExecutableNodeDTO` builds IDs from the Subgraph instance path](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/subgraph/ExecutableNodeDTO.ts#L51-L105) +- [`SubgraphNode.getInnerNodes` recursively expands each instance](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/subgraph/SubgraphNode.ts#L739-L786) +- [Serialized Subgraph definitions versus instance properties](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/types/serialisation.ts#L31-L43) +- [`ExportedSubgraphInstance.type` references the reusable definition](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/types/serialisation.ts#L103-L117) +- [Official workflow flattening maps every definition to its instance execution paths](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/platform/workflow/core/utils/workflowFlattening.ts#L57-L99) + +The API-prompt address is therefore sufficient to materialize a direct dependency +between any two expanded Smart Pipe nodes, including root to Subgraph, Subgraph to +root, nested Subgraphs, and two different instances. The backend receives a flat +prompt graph and follows the referenced execution IDs. + +It is not suitable as the persisted wireless identity. Copy/paste or import may +assign a Subgraph host a new numeric node ID, changing every descendant execution +ID. A durable address must be resolved at prompt-build time from a persisted logical +address. + +### Durable composite address + +A stable logical address can be represented as: + +```text +[subgraph-instance-routing-uuid, ...] + pipe-routing-uuid +``` + +Every Subgraph host instance on the path needs its own serialized routing UUID. +Every Smart Pipe definition node needs its own routing UUID. The full parent path +distinguishes the same internal Pipe in multiple instances and nested instances. +At prompt build, this logical address maps to the current numeric `NodeExecutionId`. + +Copy rules must be explicit: + +- Copying a Subgraph **instance** keeps its definition reference and definition-local + Pipe UUIDs, but the copied host instance receives a new routing UUID. Its complete + descendant logical-address prefix is therefore new. +- Copying a whole parent instance recursively changes only the copied outer host + prefix; shared nested definition-local IDs remain valid beneath that new prefix. +- Creating an independent copied Subgraph **definition** must regenerate the copied + definition's internal routing UUIDs and repair routes inside that copied + definition. Otherwise the two definitions would share logical Pipe identities. +- Copying a root follower retains its old source address unless both endpoints are + part of a coordinated multi-node copy operation that can remap the copied route. + +The frontend already serializes arbitrary custom properties per Subgraph instance, +so storing a host routing UUID is structurally possible. Its current `clone()` does +not deep-clone the definition, reinforcing the distinction between duplicating an +instance and duplicating a definition. + +Sources: + +- [`SubgraphNode` is constructed from a shared definition plus instance data](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/subgraph/SubgraphNode.ts#L55-L99) +- [`SubgraphNode.serialize` persists instance properties and `clone` does not deep-clone definitions](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/subgraph/SubgraphNode.ts#L864-L908) +- [New Subgraph definitions receive their own UUID](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/src/lib/litegraph/src/LGraph.ts#L1643-L1669) + +### Why the address alone does not make cross-boundary routing safe + +Runtime addressing is solvable, but Smart Pipe currently stores its schema and +inherited projection on the inner definition node. That state is shared by every +instance. Instance A and instance B can receive different runtime values through +their different API-prompt IDs, but the same internal Smart Pipe cannot safely show +two different inherited schemas or two different predecessor configurations without +an additional host-scoped override model. + +Root to Subgraph and instance-to-instance routing therefore require more than an +address: + +- route edges must live in root-workflow or Subgraph-instance state, keyed by the + full logical destination address, rather than solely on the shared inner node; +- inherited schema projections must either remain identical across all instances or + become instance-scoped; +- the editor must know which concrete Subgraph instance path is being configured; +- copy/paste, definition duplication and instance deletion must remap or invalidate + the host-scoped route registry atomically. + +ComfyUI's official architecture explicitly treats Subgraph inputs and outputs as a +typed boundary contract and notes that per-instance values are naturally expressed +through those interface inputs. Use Everywhere likewise keeps broadcasting within +one graph and crosses boundaries through explicit Subgraph interfaces. + +Sources: + +- [Official typed Subgraph boundary model](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/docs/architecture/subgraph-boundaries-and-promotion.md#2-graph-boundary-model) +- [Official analysis of shared-definition versus per-instance state](https://github.com/Comfy-Org/ComfyUI_frontend/blob/main/docs/architecture/subgraph-boundaries-and-promotion.md#tradeoff-matrix) +- [Use Everywhere Subgraph boundary policy](https://github.com/chrisgoringe/cg-use-everywhere/blob/main/README.md#subgraphs) + +For the first wireless implementation, links should therefore resolve only within +the same graph scope. To cross a Subgraph boundary, expose and connect +`BV_SMART_PIPE` normally. Cross-boundary wireless routing remains technically +possible as a later feature, but only after introducing the host-scoped route and +schema-projection model; directly persisting numeric execution paths is rejected. + +## Considered ordering strategies + +### Canvas position + +Rejected. X/Y position is presentation state, changes during layout, and cannot +express branches reliably. + +### Node ID or creation order + +Rejected. Copy/paste, import, Subgraph instantiation and workflow migration can +change execution identities. Node IDs are identifiers, not domain ordering. + +### Channel plus priority/stage number + +Feasible, but not preferred. It imposes manual sequencing and makes insertion or +branching awkward. Equal values still require a conflict rule. + +### Stable predecessor identity + +Recommended. Each wireless Smart Pipe stores the stable routing identity of exactly +one predecessor in the same graph scope. The first node is a root. Several nodes may +follow the same predecessor, so branching is natural. The relationship is an +explicit edge even though it is not drawn as an ordinary cable. + +This removes the need for priority numbers. If the editor finds exactly one valid +candidate it may offer it as the default, but it must never silently choose among +multiple candidates. + +## Proposed model + +Each Smart Pipe receives serialized routing metadata independent of its slot schema: + +```json +{ + "version": 1, + "nodeId": "stable-node-uuid", + "mode": "wired | wireless-root | wireless-follow", + "predecessorId": "stable-node-uuid-or-null" +} +``` + +`nodeId` is a routing identity, not the ComfyUI numeric node ID. Duplicate routing +identities are repaired on copy/load by assigning the copy a new UUID. A follower's +`predecessorId` is retained when copying a single follower, making the copy another +branch from the same upstream node. + +For the proposed same-scope first version, `predecessorId` is definition-local to +that graph. A future cross-boundary version must replace it with the composite +instance-routing-UUID path described above and store instance-specific edges outside +the shared inner node. + +Rules: + +1. A physical `pipe` link is authoritative. Wireless metadata is ignored while the + physical link exists. +2. `wireless-root` has no predecessor. +3. `wireless-follow` requires exactly one live predecessor in the same graph scope. +4. The stored predecessor graph must be acyclic. Cycles block queueing with a clear + node-level error. +5. A deleted/missing predecessor is treated like a missing inherited producer and + blocks queueing while the follower or its outputs are used. +6. A bypassed Smart Pipe is transparently replaced by its nearest active predecessor, + matching ComfyUI's pass-through semantics while skipping the bypassed node's local + Slot writes. A muted Smart Pipe temporarily prunes its dependent branch from the API + prompt without changing the saved workflow. A Merge omits muted sources for that run + and remains active while at least one source is available; with no active sources, + the Merge and its exclusively dependent branch are pruned as well. Deleted or unknown + predecessors are never skipped. +7. Wireless routing changes only `pipe`. Local `v_NNN` inputs and all consumer links + remain untouched. + +## Prompt materialization + +Preferred implementation: + +1. Call the original `app.graphToPrompt` first. +2. Index the returned active `BV Smart Pipe` prompt entries by graph scope and stable + routing identity. +3. Validate uniqueness, same-scope predecessor references and acyclicity. +4. For each eligible follower without a physical `pipe` input, set only + `inputs.pipe = [predecessorExecutionId, 0]` in the returned API prompt. +5. Leave the serialized workflow and live LiteGraph graph unchanged. + +This is narrower than Use Everywhere's temporary graph mutation: it does not add or +remove canvas links, disturb autogrow inputs, or require graph restoration. Because +`graphToPrompt` includes all active nodes before dependency pruning, the predecessor +entry is available even though no visible pipe link led to it. + +The adapter must chain cooperatively by capturing the current `app.graphToPrompt`, +calling it with the original receiver and arguments, and modifying only its returned +prompt. It must be idempotent so extension load order does not create duplicate +effects. + +## UX + +Add an optional `Pipe Connection` section to the existing Smart Pipe editor: + +- `Wired` (default) +- `Wireless root` +- `Follow wirelessly` with a predecessor picker +- compact status on the node: channel/root or predecessor name, plus an error badge +- optional dashed preview line on selection/hover; no permanent canvas cable + +The picker should show title plus stable short ID and only Smart Pipes in the same +graph scope. A later convenience action may offer `Continue from selected Smart +Pipe`, which creates a correctly paired follower without exposing IDs or numbers. + +## Risks and required tests + +- Extension interoperability: test with other known `graphToPrompt` wrappers, + especially Use Everywhere and VHS-style extensions. +- Nodes 2.0 drift: test every supported frontend release because `graphToPrompt` is + not an extension hook. +- Save/load, copy/paste and undo/redo of root, follower and whole chains. +- Deleted, muted and bypassed predecessors. +- Cycle and duplicate-UUID rejection. +- Branches and multiple independent wireless chains in one graph. +- Same Subgraph definition instantiated more than once. +- Nested Subgraphs and explicit boundary connections. +- Subgraph instance copy versus independent definition duplication. +- Stable logical-address to current `NodeExecutionId` resolution after numeric ID + remapping. +- Partial execution: the synthesized prompt dependency must pull in all wireless + predecessors needed by the selected consumer. +- API export must contain materialized `pipe` links even though the saved editable + workflow retains wireless routing metadata. + +## Recommendation + +Proceed with a small prototype of **same-graph wireless Smart Pipe predecessors**. +Do not use global type matching, spatial order, node numbers or implicit priority. +The stable predecessor relationship gives deterministic order and branches, while +prompt-level materialization preserves ComfyUI's real execution tree. + +Keep the feature opt-in and marked experimental until the wrapper has passed the +Nodes 2.0, Subgraph, partial-execution and extension-interoperability matrix. If +ComfyUI later adds an official pre-prompt transformation hook, move the isolated +materializer to that hook without changing the routing model. + +The follow-up identity analysis confirms that a future composite address of +Subgraph-instance UUID path plus internal Pipe UUID can target root, nested and +cross-instance execution nodes deterministically. It does **not** remove the shared +definition-state problem. Cross-boundary wireless routing should remain deferred +until Smart Pipe gains host-scoped route edges and inherited-schema projections. + +## Follow-up decisions + +The product decision is to support cross-scope routing after the same-scope compiler +has been proven. Every root workflow and Subgraph host instance receives a stable +routing UUID. A durable node address is the root routing UUID, followed by every +containing host-instance routing UUID, followed by the Smart Pipe routing UUID. +Cross-scope routes live in a host-scoped route registry so shared Subgraph +definitions can have instance-specific predecessors and inherited-schema +projections. + +Smart Pipe branches are derived exclusively from predecessor edges; successor +lists, branch numbers and virtual links are never persisted. A future +`BV Smart Pipe Merge` is a separate node. Its ordered source list may mix physical +and wireless sources. Slot provenance is introduced before Merge so inherited base +values cannot overwrite genuine changes from another branch. + +New local value slots start with their output hidden. They are setters by default; +an output becomes visible only through explicit configuration or typed-output +wiring. diff --git a/examples/images/control-center-config.png b/examples/images/control-center-config.png new file mode 100644 index 0000000000000000000000000000000000000000..bda8a12e5d2e74664f5737c052e58bab563b08c8 GIT binary patch literal 110745 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

    b(}9#!>g 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 literal 0 HcmV?d00001 diff --git a/examples/images/empty-latent-random-ratio.png b/examples/images/empty-latent-random-ratio.png new file mode 100644 index 0000000000000000000000000000000000000000..1758259cab70d4a03ca2859adedd5c7a970f8ff9 GIT binary patch literal 165680 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�Jk^@+m!T9Zzn4U3htqTu-nUWHdtQC~AH6+6* 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 literal 0 HcmV?d00001 diff --git a/examples/images/prompt-ast-categories.png b/examples/images/prompt-ast-categories.png new file mode 100644 index 0000000000000000000000000000000000000000..d456fd7d99f7c7f91404fcaf65be339b8b2f5001 GIT binary patch literal 132731 zcmbq)2{@E(+y4+XNf}F`$k15QWZ#n*l(A*svNRYBV=#8vlATmz-$Mu?ge*zc>`6?L zEip-=knI0U&+|Ud^KRe&{ob$R$YE~xbzawXuD^4cC>`x9N9j(|K_HN$Xf+i*2!!S_ z1VR-Kr3Ozvnk?OcKp5`e3`{({U5HM0co%Q*7y`M$gR|w4;}NkD$4ZEZi=M}dirAc& zuoII$Z!HdfNZMM9N{Gvf+KAeU@F01JSTCGA&V|4uCxYa`W86Kg2rjl*t9=quzdyj^ z2u{BqNFaIk|LD#mckQ=LM3FomzOGoXn-+%XWb5Kh(01{_0;;Yq`!9)!AjL#1kUZ`< zKk&{q332dQbpL@J9%Bz)xDkNlaUt4bi9B+Ek~1Lv>l8SGtEb2Qdhn);r^lZkJa8WP z{mpcUF3zqVa3y^M_=n(lxDCbwYwtqDVcp?4g1ZM6V+(h&gS&eWaRhs~yC=~eOZ448 z6Vb&LOY{J*{kF3=&ek65;cn%H!F&F?6VI75a2+DX#sg=A!NWb>vE~FV436Ld{=;1e z*nNtgHXfcttSubS0w+Miu>_1Y9t(FN!fkQxzy0d!0k{d)TjO19oZOLc4+ks(Zi}@6 zw*yr0zWWdUdSoKj%@emz)7lq~f$#GW?1RNP1KRs*h(d4!us{WC?P(9+=RVvCi*`_kJ#g0}+>{IvGO;cfS?y}!xdv_gmnFw({a?*jPDb4E-|95BP${*MQuqGCJ& z$lnAi_J=@GMt~Q;*sS{N9DfK^QbYtP@fWFzO983=dhpLu1?2u&syBED80UR4{>DT= z_;(%BH_$_CUjd)@6^=)a;EBg0d47`;kk~)03JCZ+?fB!*K!g9Jh%&MQJo=sDzD9{6 z#Vq#k`uhoN@K_81YispCo&>DhKg#}o;JrUph(~*08vB&sc0d92`Sie@{sr4?2*h93 z!(;9B%eGuGHcsG3Ui)g#BO)X!Bm&s~`#t}vjY@DE90BW$0qO{Mbs>5XF*uKX#l{fe z;F3h3WS$=81Vu$W&fdWT$lRRZ?qcTwC*qvpzaAmsUM_e~XDqM-8@L0;52&-EqAeDv zGv1uw02TpV{Ou!9J_jrwya^{_?eJJ&04@ag{kI8Nd$7G1Sm}ZF0qX7zERE<4Or7T! z7x$fn_#fi?^XkgK8Kf^<-y7#);{Y!En?H~R4&d)pM?wTCD*LY;0-*apsLsEaGH@k- z5%6#JY4xXv_)|CjGj0240s(&^|GUxuAL#!J3V+=IM{vLraevk5t5-Eum9&3X>3?e^ ze_QugTEE!&r?mbvLcbRMceW<}OGkdUG$M9ih5rrr|4R$|XEpn8P3=z;`pqD~Isc~m zJV@a6vA=%&y3fAOgE;uR%lcF2RepJRu<$ok7ZnG({g1jX_A46xvzr9;{!3jK|BEvI zuH?Q}b~rpR(|^P3f2%V8xcslG1I*aL%Eran8A||x`On+`XFBxvtN%*(Z)*C#rTDjX zf2H+*QSUz^f-4d0;eoT;#|wWG@qc#7KNkL1#_}t`{CSGsB={c$rfU)w|J%6qhob(s z#$t=L!+7FBH29mgDm!i^LqyJH*DzO;%xvh zh`+0^`~JT_^hHz}I9i#%=!+P@qyGj|fQ05>sS5z=7(7T(Y^{C|R{LNFZ1DG={&tYR z2dNVO2t)sg*dP4;o!lRv-5oIdsS`NVzasr_CGiJ;fj_qM^~9aG@pSiaaX#;EL&UlM z^3J~@OHm;)AxUtHe}z)@|B;*j2LSs21)cwYs0q*{0N4AdAKd!dK1fFbCjkBfIQlt4!skxbt`n5SaZ5`MI3Ht@%gf}BO6_VBxsk)KTuoH643kDJV zbhcZI^6)9#ePBDkpMRK=ZL}5JEoL0^iDNOpu+bD2Sf=@j{l|%&s6q{UvO%_fK$GJ3 zO?Q5YVTwVv6>q6JZz3?3+1m(}-tE;dfsQ-+zU^6zVU`jCFM9_z$d8h>?=PPyEqXvw z7c6Rg@^YS6ZGVC9;(;3DJc94EU8BBlfaCc?5N-hoEcP``>fyKj>8Kd-&d`U`xPmi@ z^zh1~t7oaL4AJWyzqeP-t>Z{ibF z3OLS#@AbD2THTghWYL-(UKi>wSJ-QF5b1M!K#WV+7=AJ=tiPv^rhQF^5uEqbcIPd6 zKuluu#q}W)S0V~DEc3bf1JgFjWcQTq2X4l{$tv8x;R8z-@PnlOxqwIfTKM8EQF4_$d}Ppty|w*9UB z2wmvKL{{oK*qK6aWMcBni5$8<=@+6wTgW-@3?TfQNA9Cuvdv_;_qRW4G&^u$KCO)6 zbUXyg9SR4}lpaVX7+AV7-a4>gDDLRcZdw>e(X^+UNZQ%QXi^oos5a*3!LreSt)09xNUzJ|EAnjAZ1Y>Ro=# zgu3xOdq<8^ZrNCn(<6IrXhHr4Cjt_}cppX+%*2!b>Qqr9@rr5hlL0qsYGoy*rx3A~ z%_GKCq0HJ;{Y2gszrC}jim!Xb3ImCPD-L!374^%bB)HuPnOTUUY&&@%S%F!|jwmFo zj@K6qg;1lQ3Jck=yRR>#bf0?^k$q)LQ-=HFmpkz_iiN}+n$QHje%bs4y>~GO52qgG zr=g_=yeQ8z3~o*grU`}Jh304Q7kR4DS}IJ?GOGkbl-k~3*-ho3rDxfAlzxMCL4IOS zKH~W0V&N}M8ZJhH6q@_=c}m-~R2Kd53P)OKq1st@4s0N!V^eUj;~#0mP{(kZ;2cp0 zZ)RWGLPAf3X6(2@f~mD^S`36D=`iKOLH&4oZbcdhxAmMSvd$H5do1mR>7%Nz-9-!j zcjC+DJr&Xuk0`8^-lTglz@xI9u*jci{8qU8CZsF`N@dMwb5MLXM&AgAnsRtET52+& z(6hd-o}>cd4m~n>uDF+;wLi0k2^V7_SePxO)FV@J%H5R)O0ngugGYYS-OJ<;V676r zdGUOvt{GJbX>^jdw~6%0EBwUSs?hr%Es zVuyCwOCsH^Hlj*o78h17Y1bE!Hy)K8;C^=642E*;ZOiYFI_{(TY?Y0M2^9>Xm0Nj# zX*?*TS7G6B#+~EAI@-{j=Jq45cEAU5e3FIA6>?mGtzr4DUl88Zg#6^798kQQ>VKL$ zbYL~`!O5)dx;O5qejsRgNPp|@kc35YH!TzF$6U?Xd=jGXa&SVhX5?xmMpYj@D|sli z&GrfjfqKl+aSoh76~+B91!KqSp1#mF?>jaZV=EyHy&{_a>E6pPc$;pyv~Jmo4C+>q zHyf1nyObV!QQ?4tf}e^wORS~x4^zvW_>fTV?N_4b%ljjv-<@!$cdSBTYX*8xZnVf; z@q8XrekHP`5~*RJWPD36H8|n&t)fPS_#hSN3$~aU6W11*2Rpe%jo;~VR3d#aw|3YY zMBBH`BU76Ks6w_s9)~iLn&$%L#HG$by-J#ztF(C&eOXz1Y?#5Mc%&24uob+*GowuU_(&)6c1=e;su zXerHeTKJk2>Nc28M20fC0zbLE4Y)QozW z-G^P46;OeF-Lg9d0j89u-$Ec^evP zlLVmht*=M|NkuFXIXqn<6|WdHE!N+csi-lv=PWrz(`6huQBcOOi%&6Q@u@@}z8=df z8Y8i2Sdh-auyzKrt%@F6bouFxn>8!QNWIF$rC6t*t{qlnX8gy*b$oR5PMi1+fzA{B6;#WTCd*XQhZm987FsS@#lKN z$#C8tK}aH^UF4B=r)NePEL4;m9gQ6gRl9xJ$-yDT-9c(B3G3ak+t!xgOtIs#DBPX0 z($dm$KbC|Q=Y!t+yjD<_j$yk3LcM&p@P~~XmahmGYBJ*yyy<-uA}x1h0Xv3`|1jB8 zJerAH4W?3R#2??qO2=y<-C%JE{S;@nd{tgJ(k7|rI7A@J-vyiiakhyIoQh`9Gah#M z4tsb-uESytbEhU*%R<_{E@UYp%?_f|pEKlUXvolNLSjMdEq5Q#F*W+u#-e(pRVMk| zRQsUkP$k}Q_}h+df{O0z#m%4jA5wfRucxKLBW+EOhuDgZBBpO&J{OmYEOF~)V~&k7 zFT0Nmr_dG`p9)XxIUdI$%c^>K0uFIxV?7$AI%-j{Ay zFywaci;}KH>tmS+cw|B0LfL|@p!>0XTlpLTn{O{yBau#y8dyesil#FU#k}==k3b(h zbm-FdG(*swcs3)-CyVSL!76O=+OhgQA=&M81tPugvaW=J!dKtZ+_rc;(Z}bl=QsjQ z-|8T7a>IZ3>fY+ry)Og1^v_&V^ss`%HSHgjviY*J zbYqfoY0uX*sTJ{{xXt8?UmTXbKBvA+Ux4NHg~aY2W^F}?Yd>da*YV0eyOr9&1)HGF z!XQWN`QcY%+J_+Z7wPD*gtb>7dsyxdI~EncbCfvW1eB>7!&%Ui62IyhHI_wgUMDIBjihR=O}aR3N{;>{^oNhqlA2y4|zi z-@Gx%(Sf1VNG#zPz_(cXe$h(+}t0{zoZ zDB0cO1Xn1AO)9<5T<8SNO$=M6c7&cI+hrD2hm*v*_ix|6Z3#OP28%exd6JE7Dr2ju z9GB)ih9*trNkr#bSG-;HlBI;g`epmQx+^u$9t}|(k}!`)yePlJKj&*nLZlU-Ni3bB zHuU9!l*XZX7CKsaXVat^nGuQG?h|+^UNmYZvCFogu&`W(T8*&h^Pk z?z7|UoX(g@KH927_B2hxn*NX%j{S(J(6?7WBFXsrEl zc+f^qY1~HMv9{o$ggY-~ZhCHvWyiYgWAgQ@+O(EbOOs*lnY7bx9F7HXRU@2au!`Z* zPDHY$A1=qh|6|3K)>oIr{2p1BPX=x+a&0W_jn8|~8#2f4ty%4@eI713m)LE!J8LD@ z5x7GR8uuIz+DHz{NeKL;%=KN~gdx*Dm%ShL3uR+Z-E0)H_rBO) zaxxv^zqHZy?b|nD|LG%V&YW5D9k}6G{qE~{L$Z*?=Fbs+Rw0Ykz3pi(uQ5W7&ZnA8 zuPWzsc0;|$`yXj>O_b-T;(;QC0e0npn*{jzbjY&5x2w;?Q35c;$<4*R3T#i3$YHLa z?QiN8tE)p-$&S?w0iTqY0@oY9vD>H3?QLi8t>nfC2_~vf?*6Fl?Cjk4H)AzBbpyNk znu%BaKQL!e0`|5h%gGCuR>UvO)PGHGTFviEm$vc-Hzll>?|v>HDZN$;_GxNr8VK55 z!Egku=5ei2?-dnhiFr6}{a8$wcG-P-MIl!(8Wti3L+S9@HRn;au@~6r1?D%aDi8*RoEiF->#G z50n~gau#Y8A!(|R4a1HieE2cP+RU7sn*{QqDRc|f)8fwwC>CDKCkip_avp1V1@3b= zhLHy%KtVs7;NbY;Qp>4&&%n^7Ha!VzL+}31C2X3NyUo)={j8n9#Q|~pGiV-&dZb97 zW~os%@){Y$?Imw5@mrGsxs;9wun;k9C+O;misogGX^H0vkP6tV&4xvg5TTx8+~+2) zgEu>6ZN=>P;xGDs_u-4@RiRNzK-?<>dm#?5%S*?lI$uM#u*ZCJL>y*N2Jv6}>Q$`R zD2iKJ&W|TvR7?B}jgy4g&)U@3(fOxgs5p0r+VoqujyP5eLL})+jht+&*dfKm#M*^q z^)T&D+Nn@Aln6xqtd5}c$!ha57>%V=I=EP8TF|i%7m&ISM_h z>?G@qj8%*7mEHTew6}Ng;O6dH$=;8OI{|niQO}5XV1*}XyMJjr4wr_Erk&Z_EZ?hl znN%=MlGGY|jA^~Jw{l6?qJH(YhOnXG+Je>I=K0$9dZk9>N2V)n%vTN61Hw?;Xwt1i z4B;4`VMF7KTVJa7UBQisl`KMS!}S*-Oa7D#(Yg4EM&J3@`Ib|Am$G-?C^L*_SFNZ7 z=giB`5jrIeoDXK6ISSPe$g)?2Hp|`&?Y!La*~@~Dv~QZ{j7qmZ8}F?FZ&j3eA*%ve zGU)KLX)kDZVDCk*TFLMxFqsDDF{vR5Lqm%?;%sfx+WA%y!m~9a3(4ILjXjT1Z1OCz zE?*;AVP|zHW5sh}gjVTsz}62qRLc3?6PwOBLT&m01(;x340*RRX!{UlJ3O6WUgHr4 z`#=s{B=hm}x56Pp&_h!p%a)32?d)kedI8#;pR(CtbnK|F_TN*l27ZqRSY&cOdXT-BKFSuu+LrIO@FEO=?@e|Qmh*>v}UoAsOSl+eh~_C+s!qX*WaT%k?4&zyyeTNbqo2sDk# z&%oM+y4d#UeZ^L{@||v>Ex@{F$q+hM-urVK3m$)ZJ*|Kxdc(Z`G}{+p)|J?Hd%3Hs zy5BeaIXdgi`z8A9s-g@P@#MJ&YwO%{m+Q0L!(%lB zecs_Wy?CjCn+Wp^wo~5q6V0!v`R<#Qa4GoVZRaaPW6bh=r(R8`d<%^+JW+Z!p*wzf zJ~XBxs*BlX#;&8uwzcEVZcxyz1K(Pq4_Ut`wb+F} zE1)jP@p5a<_J-nxdl~aaIXF02Lf+P#@A;m0MQ6*j-6z1 zz96ljAS-K1d%xW}6;@>AB*GUSaRN;evv7f-z3NXVCN|xCp?XFmD}Z49Y_wSVnl^ce ze&vJ4h*i*x7O;Kor`O#+cx8NxXYP!Py^Q&EW1^aDJ|owUJlFm{s?!4w3Qg_j^DbA7 zW@VM#uzVb}r^Kz+utZRzJ{t&m#eQ@4$7I68j**cG3O{|fv-Ao&Kt%5(6fF!TaJI=+un z!LOI$OrOY2^#y6mcWxkGGkJU+<99{x<`Ej~s)vH)^UuZSj7!Y`@&q9GUm1?D?L~Gq&waGDVg4KaaFjX0!gP49d${q8=s2`1@dE9&v)C30S`BdSNJ(~ zi$5+~elfne@=>YM9wivFxtAV%3d{!XQE5hybQ(I zi|evb1t*FcKQa-Olr(gCvw3K9S*8FBqwBMahlNyKEHNs5SLe=8Q6UvAZFyy1l$6XD zP=9mOjlNYvYjXWaSj(F?Z^kBmNO8AaTz_xF7Cs|`CLv88-yfRStS#wDI^Xc6vL{!d zn7j~rSKwHyk%){$Gn0y7Ryan zAkbwCUIFC>g0o^j(j=XBr@3}>be(o*F8O~0h*L~`Gt+ybOEx^QEle>&a86uGM?sm@2djt3U|d2i_wR zi~F&7@_SOP#L3$wJ3q^~IOT{xv-dW#0f@gKA+gG} z_l>InS2N}e5z!J)?ori!<5*1>)>2{988~YksH&T=kE;V_cQ1iU@`b*4AGkO(Gt=7I zy0fzbKoJOEKz14=+kvc$PUNz+fFJ-r!!cjR8}^jBHt%9b7rnM#=CmGS;MxRe`TKG! z!<|gFblGRJp=(7Cs43KT1?A;SbLlQZtTAyj{$Jg*uRXs0;`?k5m;dq$uZG+4N;S^c zK#T4>fUI5d`~cHNT-wHTyakyA2;h4^x%OH`VkucS2-emum5)?oSbejkWn`WP?)aJN zp7#H=d+**oRE`dkbw=hiC+9xocVX-JHq!}&vA#Iw-E+QHe)W|yxP~>p@;-Jbozxxn zPE0U9Mz~HUxhmUtF4bS*Il$A-V>QmBmAq)uc!M`Hs;vHVF_4qXWRqE`*SIISt}MN0 z_VSf0()hQ)9qo34#6-)*Z|LXGpR>tUaXZ{jBahhG*nH+v?SCweo#?Ds+5)Cx_B`+z z0?nZC^ZGN($wuEQ1bT9#-#ZCu8uCoQjl<>LlPJB-<^v3D;q6R;?}A0*X29Jn0@j8> zr2^=IbM06dYC8N>&69V1i(|E=77eVe@0J3VZU9V?SzK&mV{^glivVlP0=c|X01E<# zQHh1uD7M77ylJUv>v2zoUeP0qh9C2V*$0E|vwY{i_XrEK#*E^BD_p}r?Rs0 z*7{P=k5T(0Vbm0VAD^d#4)jNl&evNCB?Bp}Ki}KY2RgwZPdfirjHL*nC;umH2|JG8Myp=&kB^uDj}>xM+=xoNb;wKX+G zI?9?hKND&-pc{jC0$EfCuT5?majZQWcD(W9OHM*}Wh1aAu)AA-t;=K_`-j27K@Fig zm84nVEXyq#jL2(1v_}~j%FU`jH{U$)kO}DWwMHMee7(A@uMNCtvl_fAx78zZ`Z&RR zVWbrB59sNYJEyfs2xy3LsoL8GCaRWV{m!B`tSRU}HpNbfIHNWE zs_go19yk;Vt1nJ3*hn4lpNqTj_2)Zs)5zrH9rri!@$s`nSu_)OXxT#Cj7bvjInqph zCGr+b7j~54nCxQQ(q{1^Xg>vDL3UG7kdES9*e@DN(@bY5wy-5Ozcj(HsgvH|r2)(H zpBRZ4s~V>*(( z-Ie|2eccL34&-))x!cwQhFir zEYEu$`jq}{)?7Wo)A92u0GG4bq1VPWCX*1HHCFd%;IjOKAMQBftRDG;aX35)%jX1$Pt0SLYs zUADkzkZ7@q%o9N+=0e_mlH~V6dpo1}8WUvA*kTEAF=Y*bDFYP2#P7gqT)BL?>3d@N zdt%RdkjF>yXFdH~Tmq8+qtfqP0d4?VefyMjhg&0lRBUoR2ox$Tf_B#8W^AiQLGlx@ z=wx;6sVjzr$XEd-h}CbMT!jfjR!xmM0-&B^(cp#o5Ft9ZwHto)R46Rr_3?8?^4rU; zK!|9PxyPU?Gcz+NiJ3ih4*H%r@_2o$K%uEWlujugM_Tw ztQ3?W2M2X6$Xq^CH-W*<*YCbkW>{NW!-@ePT#h>#Zcjp#n%BJ+iS0an1MlPGGnlIi zXeD7sMPe7qpYL|@XR9ct=@mU#*aVflchycM!-C=d>ytry(Z|n;7&c;iSm}$)8@|>@ za0SXl=Ym^4EUw3oe&_PvJ5>1yh}qiD&krQ5DQqk93^y(N7dkHI?X@KPlAZPG3b%)P zCKiQvTi+;VKX2X*dD^c62_~?)aU4<-(0H>FFeEV}qy3>xObc~3fAxIr#HKsf_SA*R zwX$o3y4j>_E}jKo4@OgG9;X*AqJbu9YH1Y}JB~^5dVsxOgwPHR4S~># zVKYktXp$A6214zix=05oeOH@>>KN+E&J^eBQ4u=7aY$$P+2}VHO>HCgCp-q4?`T=x zpQdRR(dy@pL%|Vf(#_qQ?>ug+8zdo2bp^PM&3$K=0=~!BPWUY}OlHwYfvXk(Nz5i&{FqpOUM?posUTJ0O@TY7@^_l;01tO0B!?-1Gok6FK8}{dA^=6FkkyLKAZh8yYKNpxmGCo#_Hgeivz%bQ%(+uUkRc?EF3WAz*x2d=0JvqinZt&2*ahH%V!uAkk`XC8fux~^3(Oj1Bfhkkq);z zu=~*u{K{NDkDPeE%nN}l`tl%n4k&W)(Iq0d>9v?+&ywWbooSY3rlam+O?79rtFYHh z2UZMBWeXh++Yj4?j82@+v~Z+YS(UAvy@kkdyRX8-PE)QR5FP3}5_cQ@|D|nKK5~mX{B#G{T{* zLgt`lA}ZMGf4K6Itr&Z&NQ+3Db;8nC0gmS^t(hLu3v{^p?2fjkWMs(ue*XwcSsoTv z02LSD0Or8s>6Q6Fm>s*EM9UotGbcTW=f4^VB3Wxuqh1j(RPj_z;NcV1H~aw#7czMa z5@1lOck!P&6?294ylLfA6XXZ9)XCe9)tjI4?(n3ygG^j>G7on$X^KVF^oavw{*!Tn z%~5?_mRNZ}t6_Y%HfT%Q&=8b10`>qD1m(SsQ!cSHPmO>&OXA%*+1M1{9Yl(smT{fZ zu-bh6>eVX{eU|}5hjJr(S_)P`5+W3xi^^H9seR@=*%Yu2GNnH0NqKqsM*?(~`;LQ| zUt6T(u?E%5vOu(mCMOrydH|QG_$~OuVaNTZ<`aOS&y_v328k32;VH*yXoxkni^Vih zzvJ}(ct*fnD0$(<&AF8guZD5Q>ZZM&rLCstpf-^1(!>sl z5&Cn9>TKa^THji^b{~%u80hI&*Vj8mha`>$E3EX28=Je)Y9n$hZai}lK|J|1J#ybZ zc>ETdvCaB*VW`$oxke>3^|_ysp%9F)${a+=?qG#$d&)9P;fAKu(t(E%?S98hH$B?N zh``UI;!fP_L-vU zbQ5~EO6+Khzp8+Sjz0ZX$)D~2dL;x7<>M=WJS@{W*2$l0(WSFb$ZjV^7j4KnH~N(oos(#CQ2wLKL(8iDT&iz5_hkQ`ra-!^?R93kezfEL@w6 zR@wqZlhJvP3DB&w@|_*Vu$`9okxB1!Ow%owu5}*U?e}h4dFLeU-7pTkz-d_`zKevd z9shA`tj7E6`&0xv=laE3_hgI-2%Mlc4lM6#?N~KZLpOoEb<6#$K#Mtx{#cD@RB#h& zX{YMEe^Fyo*tgMOSE(%xXzB&h#ZK<2j9`f0k7G2=nq4*owT;*3q)PPRSrjUYJSKz6 z-adsT=y(}}&0F`f;?M6xx;ExGwPrc|x?B&=%9c89F&ilj=*34t;O0#J1bBB>Z``uH za5T?pcL4U(ll9UNhpD~`zDcl*HOhRqAst?PW?|0vwf!Sl*2udRnHQ6^yatMGOswr_ z5=^Q!W%z(<=Myu(D!n?m4>S*fWLeQ=yW;jT^*)oXtt51ZSi}?>m^UGznJLbFPOr#B zA<+7Xd9mw@T#+Q(?$o!$9nYVYNi9CPFCAMxG&5-RMCKu) zTg{~gd|H^YDoV>180j)=@*LHfsz6n{{pA@GeyrkmWdKcyD@RlT8 z;UY`4FL|DtvGRdWpfo*?YN8TsNKEmr2p#>n#QE0wr@9<^JdAY6=}=Vud*hO;M~<0` z7!EFH78m$fSV5LbR>`NTWz=b0EyP(2f7Azd)bQ~afSy9XEoZHAR4CaT;v!`hW<4?g zv_9u1++v`*SCb_I4oy^>iU`uBwG31ri z6W0ogclzy-cQNF*sb9ngzPe@#<>&|*#@#;Mhh4$2xbk%;>XnSf#XmGJ7RmCkxby9S z-dBL*;`uv9EF0|{TwmM?^iM8h=Pb;u_!2jCP|4PGMB+@`46$zCg7(Ww1-Q7lII#{( z&bg=)&PR+g<%GIWNwan5^MvyT!&WGxi-Z0)yfr!k_p69>0~kS<2f>dIwQRRsF4B(` z^gG~@bsQBfm6km&*h6e#XPl}dFts-=U04KtyJp{k?rg1|Pjx2?3KMwz;|g%kHf8H& zioQ3-QMaVlf1MBRq!_*^2>D($Vh_=7UrGEi`uHx9I%5S6{Q&C%ncT`V_ysix?u_>0f*(m-=Up^$zy%6pt_AX#}? z#6bSbF%2cGo(}s{m|$pzGI`C`lvmNyf;l7%^T??K%t+xrCt-WUZr^n4;NveTz|@sd ze9N3E)R!ds=&8D8gW<6;+J)FOb}fDU1u|%e3eY@Uicq8C3e)9_uWoj%M0xf+Cbx3oeL=skzW?IuB?FD;0wp~md z!`4&zs927hC+;bE4a{*->c-2g1XwN#zqIYGs5oq4Ts7LbF=)@dqO`md8asBPV4TV%e!Bc0&ebTIP=k9`}!P>6~GkvCHsdDZ=y#;B0rIq@!fxhNeP06f+y6&bcQ9rs9VQ!>zKf3 zpqLPjTTtIakWB4EIa(F*S+EdWZ<&iJh{GXO5g36UF(z)028;bUn^esLvr-}$ojek9 z{rYu?(uE30qzzG~CnAyEpC1A@VMZP7bbAl-a$(CaTM7z-%gXTx_LC>m($ZS))rruD z!LlgRCgUJklFK}1gQQpP-PXE#l^G?L8apGC@EXh^(NG1#j%fk_hd|@U2ofiCSque_ z53Gm?-bECR6Rsr<&wFfcZ84$_J{N{OExU$fWn_FZ?8t3(l=6N(KogqSgGJnaXdtK- zd9r@QcuhpR#|b#2NhV2Q-wsa{AkZEb$yoM7dobgJB}FOZwh|TS;Sk6Y zUz|Em@u?5bF$^gbUpI~uF{+^%FWe76RJc?XE>Er>ZGA~uiEIahSwhLm&8JM07S_PT z)WVAj029cbVUMNdB2T;*i3J$6%hs>-@v}2Srs&ewr&=ln#R+XkoTyi6@3CHLZ&ese zs@ur3RT0&oAs!fgdX~*bJDw zV>2=j(h$~=DWo+CzI>U4c)vp3kuu|9Xedc zr((GQFY?^<^L+7vHd)@};u-zPWiY1il>beE9SASOhv6 z1}5|lD@kZ2?~kD(&}n^A)*nML4{>IE@rEp=V{5YB(0jx>FkPdY@UXZTcNsz-Q*>cQlpsm+@-BB)cnV;Z|eCUe2+nfB@#tP@HJRdNqT5&3QVxa zv1C}!Fwwo=7a0m|H8C_C>(^DkkQs+SM`jh{(kQ;q9vYHZP#;j-&(6|__Qe)|&TxNZ=pn}$+aXJ-Ge4I1jodK($+N95^Zbj2J?q#Z z^47W*cI4K5_blc{N*vv$wc;K-U$gJQP;1MkhT`I8rZ*QQtRsDHZixAu7o`#&-rbQh z33oj9vGMatDpN@DBN)%&DeT-6dSG{(ysbM_tc#T)&!B z1T!FkfnhWgnshR}sW>gR-HqeO3;cx`mR=0oF?xDXf8jXZ+6_YMCm#4E8bP_F{>o8& z-eB{iQ+hh^0U8J;qti_d`rJ% zrEb$#y5Fx|C=NQQxHO=ZOE&1E>)aHMdFHgff_-+Y=z`*p|D>_u@t6#?bVeE_sdO!p zEhr{};wUI4W@;CXEyl&hYHDguP4WaCcP3{5nMs68|+H+`90q$*E2&~A50~Lu&^LbH0_io{`;<1d0 zrMCk`xU{l`;$myXxMYDi8{|4jT)(_)FE3y4gVFdrCn1!AO|^!W{g+#;oku15ii*yT z)o^zDvP&?W5PR5bzFJrJDbHu&#!j!jTC_eD9di<-<*}2F8jVbtNyuGTHsnwawT=>x zkEiR1{s#JSEUNdtm&ai%zYvFTsYRrbk7?Ku*7guFYPfE+f?7-64>Nf8{jBvz%wMT# zPF}3q9Y74yKFqME5y)6(FOP8*6u245bmwj)RBlW;rMu+S$(?ulR*f=)uWqeANDza? zilTEUr?5|w$tg}B2W%hUn69v}7NyX7WjGcDZu6@1AnyKLG~+j6e=PPBoZ z>{ilX*|kEZD<<2p-4EA25S)?I&y4&6LZcF~b_a=junX7msuO}}W+%l2GQ z*Sj7mPPVZNx|yH7+H|aV9d4sMuUuz|@p)BV1D=-_N zo1h$VZ2A&#r#Q2Q@s2X$M!;5-RK#K0 zmb|w$rSnF8Pfp-A^EHgjO`S93{Xe)WWPg+6ES#Tv^zzl!$frqz-jaI06We=vMA>Pi1P4Ysk#gLTbICxDbR*U!eZ?1irSg7zV`RsAH=<<4vq&V0Q?oe zoJ8d)lE9v!()?^>OeI$I{e=X*FMC%qrRnoV@gK5Uq;8qashs&lwv3394@S#HYB zZ{>o?VS(hH6vq>&DMk;AC9ejDqqe5UT47bKZ@XwAK7L(JD)H`3Ya3VuoJDoC+9|oX zI6Aj+`WpMdUS__1SGMd8!_mfxJ?6nEtJxXo_Yl#Cr%xtri;4B2ApNmaP?P|b(pfE; zbR`YBF&D9cL-bjn*$<$6ly=SUO29Q|6KO)rk3p4KREvv~)bsUH zPpRa`vFAta?UHZU{V@1uKdZy0U5XW!E`{Ec9Cz@4L0gns+!{5&qU^RBp5a?kXq3w{=E95%__K$+{z4+evt z>)@G#2cEite!yGDYJvRysh!QwC8D`w&u;7wG2RxZynXeO?OL_taE@}svitsA6ruKB z{D`MTt4OW@DAzt6)ExSlVdD+jF>l#ImU?Z)-cE<;uS$=53^g|c91p&40eW_q<`VrU zJC!^j0F~albqh4yIZvMk12Mo1*8DgRy_3``F%SgPCeJ`G=5c=hpu=j*U~-g-AL~Mo zoEYu*O}Oo)_WmBGF8e;CAt$mgix@m7`0ls6ZW9FF)+162pSz!JHP*yG_gfiz_VlZ7 zyvKdF)n(-w{VUzrsBT!@i{|E6*ahiBY-`PN(<8n$Cz>LUn0hy704= zxTTCs7Y1ZI?=FE+59WiOp?4dWnohZUwOcdhUBDMIp|0n`;#oHQ1M&DrIs(__4#q1O zTLrA`?rbrfmVYQfm+#@~`q->=#8DDK-+D3f@=W!Wk&6tQ8Qo4h8LWjzf6k{mph9Jw zd4lOu7{;NEcAc`f<`b-p+Gl(v&Zk^t|0d5PCwnLEWXCsg3`Tfs!f8w!v_HxjUSx<~ z1_Qb|V9V1I*#i+6ASM_OH0;1fjnR3#nQ#qhh0WEE_0`6gzD;o--&8{#qzg;zA;|Q0 z`kH%&nDp2pOi!n0{6CJ)JCF*t4dch`SUFZy$|0Mq#34I`>`g{?%3iO%30c`&2-zz$ zBb1S>PC^nHSy>^Q@Akd_zJ-ow-1mL`uIuq!ZhtWF@k}LCXnmrlySAL{x{%o3S1pk7 zV4dbRIn(>({0Ha;lCiS&?$%39D3N>#2VighyWXk{75?VD8a>Y*7DHr$oEU=r0UlZ4JKF z0)7u}0T{7E0R!Xf3pigU0&o>*)S#*<2Q^r55C-lrmel4<1_d1V0uchWuZCjnBYs>- zYo*jR>z=YL2RM-yrK8KMW2c`8I&Ed*uE^iisdwm`=4(EkmOSrf*fg#A*HaNEVe=?N zvVBJ?VAQ197n^tgIDKK^;nm^oF1}sA^Ug~QKR|DWLFrw7{ycW28vU%SEU2J91QU96 zysNwbZ`|Ka!!Z7WdQM;l1p*%dRa!nftY47Ofd)`WupBGZIp|1Mf-?a2%S}Vi!h3i5_h2TlbjJTp z*ZUs+1sVH-<2jx=Kl_x-m3sS;$HCSwII?Ur8XTruf`Wo>-1C@dSobn9HJt$%X#+D< zY5Xn}bzR5~9Xk78^ZrktMCRtdpSZ{wB%*OR5f^Y5KoampBl1CwkX!!7Yf!rYYDmQ9 zHGCXaBUJChgxBC7_}<_L+r8I0I=U874FnCdqWAK%lB`?zhU?^};$*&&-oH6OiKm3G zL$DOqB~>x%w-a+c*SFMvyQS==k8km7xvWM)*XpN>-u_RLwk=E=pRE!Ye1YNk&6dqk zO_6}X6!)oIKj68@uJd}WMut49d^h2qz4LS_*K>~OGsT-yZ&-a7q7gvqZD&Vo7sLaF z3^e9qe0+RDLJcrp25!q1%PP|cl9XB&#u+AZV91f_10EYC;I#95kWDS;&*o+aeC|;n z=TwBJ1;xby7FYZ4ow2MqG8o}{Rs3rkR9y`0wY;(G1o7D36U%V%zjiYLMadC|ejCl0 z%Ls(RQogeA9oc6|6pfIZ zj?a8mlIFN;B)+jE@%@js93+>jmboe))%{(?^u2j%3XV@}3LPtSDD!pQ-*Yc`4FH+| zk(w?X77sf$F|3=~^3&se3kyz`^&B8_nQbdRl)ihS2--M{{RD%GD%KcVT5EGEc%{)>0D>E0heS9$MPr(yKITa>^^R zh5Z{le*nL7KR-WMCQWd>!;b0z+~WejO6)fRvgF=>8@@oZHP}slnVISE+W8I3TMRzF z_D#^4%1zq5-Q0G8r+t{pBYyje)itWFwfNY=2f1P2WBXQ`NW3#~%Ob$jh#cg*#fzyuda?YwEiV_YeyI68TM| z`lreEQ*ishy(8@1hUC*_r*@inhh5p-+oK^414>W$S`4gyU_F|Qc*rkbHt|1PTy*gQ zgezHT@nCx%%0d9S;GYOCo}VDkfS5kBTO@n~wxqfF+~@-aclu(Oz3A`4=U=1$Rd5}G zJ1%hEt*tHCBLBf=pZ47ugb&lL&E))BV>?7Ks+VZr^gsC3+1Ux360NcUOAQtuz=%Nc zz%1@NkZ^Da4)DBF#=iBHkmTnNGR_W@F$3)5qj?Q>Wp=5w)Eh7$BcJtpknW*%1D6_c zm=RB-^|R$#@(n(=FJ)H^jZ&fIjj} z){GHP^^n+&V4_o$`TgK?oF{1#suZc{+CqUUSgS)*-(b_nw3ZtgH2uzxapoo+e9ZVJ z>h{C%Spk+7TT8W?okHJAO%DC5r@m7#umXOTHF3q`T~t0PIXQ!vCrWw`ge<5RFBnN^ zLwMnCfC>tLg9VE?@r$!3jD+^`<;wu;L2>19K{I+^z?T0eEGpNI+8qtP#R&gw0x_tj zrlzrV@ivtE`bHnsQ7?zJVw4Dm)Yem}Byy97cTQSi%g_aSYS7 zYl+q6E)ba@i_w)JPUhbAJnw)CfFI5?iN}(a@+JwVIS(epx{gCj4*M1;BrvUwmFYn{M2}0< zJyOeU7xeCT#xu-Ph3*=ZAMk@Nv%o3`zEzmC`)PetoqYS|=2WBO`uBPu%9gd5B8}=M zqvsFcwC>r@EHbFj9o@qTgl_5%V?-N}wXCeHmIfPcqGojFuA{I(;4B9iA|7i65Fnhm z0HZ;*b615*+WGnO=PK9_FA`UOUuR~x_ksnBCm}Z|tU?uX|BqDXwjTYktMBj%;m5g8 z=6PRN6#PkXBbM+hiXLS;d@U+eozk;3|4x`N4U(B^u~yZ1-DElVljCk0xBE61+3NpY z&2xguHn(?lY%I_vyhcr1uwmObVUK-;y%9T4_q@umLN|^cwCS+_`+Qbf{1^IOuB<>W zB@Ao#zCn_vjt)m5CYC)^ikM|)-#O0IrJp4tBOGN8U@*{Q%|;ubY%XP088z3AJ=G~2 z1DHrLLAP9=QSr;yuhb30upxk>VOI3m{CPWcd2`bg>IhKPfubW~#KXgb6S@@`Od7e# zCg=I}#u@(^zx}bbz0OW)gB0=`qS`#Ew+Bjf%O>rvP<*wU%7HQLQ%m~ZII+J9^u4ee zJ01OCzD>fYnj>awpj-NO>C@0aDKX`xNGgH|W~n(MB%?xCiP`Tt{k;=*aDqQl#cqob z>GBxdx%ttV`wpuoX>>n6oyGg+CqkJCpJ@_bWt-NwsI&jRJ>Zn}&#Qh1X)Mtg#IVop zAx$L%qA@hLFJ!fl^Z&uM2<|CB3+8o8wK?Gg1b3=_mQjs)SZOI7K&MB0(x}I&9G5Ns zRWDY*yPK>%HodS>FjpF`%na98iLhY zeh(kHa(8eND|qs7(Or+RbIFLl7Ybq=Jxhbiv8R=5|EgC;o+Fg#s1juHiRRe#+kNX> z^Yt^8JS5(!VYB&4N=09!4NJ>yiO!J!`!iYR6y$?d5r&mZBEl!KL`TNtWlb&Dz6nDji>OM#(qfaOBWFm`ZpUw z&J<{0Wx8v}TB_9?|47~^Z3XiL{M;3~b@tcIQl{30Vo4z$C%GG=U+p9zC#3|A4d)*!?P8B>nyU zGI@c_Ww5j_U8a}HiZ-l(+piXscVb3|j?;gzmVdi6<6XM!CYt@MvRPh7XP_3EzI=AL zy1`8SOd=P^FsN3N!TnqghYTNS2zq&KjqA#bTJFXvdmSD7DY%3urkc$^63c0TeiVQ8 z$*-<3SU*7F*)Vu7=fPJkGUC~s=?H+D5w-_3tG$nY{=GuqyS}+8>3hIuQGVfk-fZDP zps5_|CdE9rUX_+250VD0Da`IAyIL)=$Ys~>5Gfd`cZtyABNezQYGtKmovEvuo~#p( z(k#$Se1oT1hBkH+2cV*=(P*#PqjMnf~#Qkkk$ zcu_3?lv8A@30C#e$~8LhcP(Hp7Np!L)OC_C=f&7UG+hP_C=K1)tEX*AncN)zmDi znIZ52(>J`08^IUvE2+NgWNtTH3Z})KAB`eUf_T4GJ(8E(nHYUOwSMbk!c+Zp@48!* zLYV5=RR5LkA_t%|;CwN6ehhUx^d7XVMj(qw?~5S@HY&zs`_L{A9{V z5%}E+#Qt!@s_3V9fx)MzxA(%d%%*Ro6_g?)8ivzq|ZJDqKmJ5d~MocykVVL5m2j=yq`iZ(>1G9A8PAHd-|^SuQ~co zHQ2N>u$oc(loxEbyqMERRVtF8=IcJAYpB^?VF6dgSB3_4D2`k zzq+3rkEX)rQ35#}$_GE}1){H8 zmgPFtU_4G1{1{H#i_C?0(+*&vguA4h4~zlGov9T!_>hShq0<3+tfQl&s;a7^V`l#p z%s8Z%FJG7#;HEFsB+8RODcAPS#eZt9*&%lOA&-)EMr*{sL0rZ~DoC}o7d+cIIB2Kg zs+!pQEFR5nvTWC6$zioxb8E_Q@M(#%n>g0t+tnABE?x59P7UbfOE>5X!v$|J$q9 zd@=l;zh@(}qKpEJ-qh68<{z7(@P&VR-jZ24+j=f3doTy>H%z&}_Tjhv!nAcE;h~V@ z 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�TTPsh0n(mPc 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 VUwNh&T8n%DZB5+^h3Zxz{{?J|{OAAx literal 0 HcmV?d00001 diff --git a/examples/images/smart-pipe-merge-config.png b/examples/images/smart-pipe-merge-config.png new file mode 100644 index 0000000000000000000000000000000000000000..b21a4c94cf622b1c172e34bc16dc1e6e0351ee95 GIT binary patch literal 76146 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 Chw9@1 literal 0 HcmV?d00001 diff --git a/examples/images/smart-pipe-slot-config.png b/examples/images/smart-pipe-slot-config.png new file mode 100644 index 0000000000000000000000000000000000000000..50dc945cf6c93de64c9a075e133d834467650345 GIT binary patch literal 68459 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 literal 0 HcmV?d00001 diff --git a/examples/images/smart-pipe-wireless-merge.png b/examples/images/smart-pipe-wireless-merge.png new file mode 100644 index 0000000000000000000000000000000000000000..393902e8e2bfc93293a662121ca826bc3260d93c GIT binary patch literal 145431 zcmeFZc_5T;+c(}qjVMD?rc#YDY1Cjg3@Oc6NA|LnrI|5A_MI#dk|rS`Ntr?^Yo(AS zvL#DNiV7iwRFa+d9PNFVyXU^|_kNz=^Lzavb6wY*%W)j%v3!ot)iGUdwdKp!E?cl* z!E&m)vi^bvT-gg2EZhTG1g;cj>R(;3Kqky)kFlGlqsu`nJ4a7&dBK81NE=I}Jd()7 z5%5eLO@ctbVX<7VT*-0kLK z<6sSjcXH%BiN|6HSThXL)y4-rwhu3h#YmIDXDd6JHMoDs4})}cv1Gc;FTx%SKmUh~ zgOj`4=ZWkb88kcaWlIYOnmuPG51O4j6O8}M$1m&Hy+@y_tp;v;+E`jM-M|b#KM3aI zYzZmv;BIH<2NvS!?)KMneH-n|WZypjIvZz9&U$eqX*15KPA-m4OcysBjQ?XA2e7>+KS4R~;Njl@b42$DGPQ5$R?!I=kP<>-RgEvEk`QU$C3yf0Uac`YrstjA)v7FmCf zg)UWB1+3=>C4tr3(dbM&AP*o`dnY%}?O(0p+nujwVS&YRr22=6zNzr@3_xKV@qC@Y z)y>Sa-N7)0*`g%g#Y}|lMe zIlfxZR~rC+!^VLI%mNJi>v?oN;OI%^I1!}0n~OV>V+W3&I`c;zDQ`uyb7g)#6i8_X ziG-u$2og*JjV?iC(5xinXjnN3IlPRtoE4oWL&V8_pZ%*He48BqPfZR^l#Rmyri+am z)AFk{z%>V^mz&PlZ4rQr2HuI|O@9$0#|=|Co}Mm;w<0o_GzmP8#*`q+T7qR;l1LIb zD-zy{Nw<=r%h0~B{qGd``6z=4=MB@zg=xuTFkM|8T{!d1TLLFwxH{T-d|&W?r}}{N zv2k^sm(9F7F-S|`@MsP|;s5>W{fCPKF8O;<0LPo7P$wGWAkfw4s9+@{D@y~a#L8OI zNV0gm44rN%D~-ol$ui`uh&Uo0n5d;RkpRB%XK~}FQ;GzW{V{6nJ7fy71yiKFDe`yD zpD7Y!I)4J^zwz1I&R_d-5Wr;|c!F~d=b!lOX6K*yb{4^n`NL@X!)XN9KI_l)t3rRc z@W~|Gc%oJnQq1aZdaEz?}0wf90nW4{psLc_fDO&-||+k_Zs^zXguJN+Jl@-^?O# zAou)_rx6ZJYZ@n4wfL4b{2|`|@sS@Q|L-Lhvj6KNKPLnFmm)u&NN14nScZfQR$4}a zC?kiJpcCXQCFn#ZU6w(_Ny{;%!5m*i|3{sCi^Bh03h+Bo7{vE~6om-{I>VB{BuX%? z@Hh#goHVGnhzw~7SsWcp#LF@11Sb9aF8=Cda)kLWMB)ElQT~4{;{A@We)gxo*xvlj z|K`y5kAlYUnB~u#{7ciEf9zif8hGsY1Nw7r^0o5B;blOnDgA5Iz~R9e{bTJ3M*EKk zjbCcBKSYdQ?*9*{-8gmaKdO_zMZjMxsPBk|+?Hc%8luQ&|a^;Un-m*YuL|K?f--t z=wDsj@A%@sGm78L0sh%#0;T^{l>^uFkMaRIoSdwcEYV7W!LS5)290hhLBoSz1Q{zF zmPVAZWDsP(@90mQ?$5^hFC+!OQ`voA$v0o{e_5no;K={G$jd*g@2`vdpKg|Z|35_# zKI`=t2;mE?@Wma1^7ZRe|5Fi!uj~8n(!rwtO}qFV%l$d;`z6x;6UptreLw#wx&0j< z`|~FM-p~H)87=@a{tOoRo^#Ci!$7r*!O8xT=92!rBPR2kSuOw&T{*oR3l7L{Vb95N zENoptWA9t#{5Mbhnp6FuZ}ykp1s>>!2E-3dl&$kU4i5T{*zM@R#>8(6@w-%VTGehOAxWrI0+ioN(O)sbOsJ5BaH>^0IA<>5PWTa{qc+d@c0n& zr*-{+Q~dMm`kmSo?DntMWr0I-`m8^tW^(_@nE35n|0~tQuRHjSPhU@~h$f*Vdq`2i8-Gb;%v zOT=P`KOP@|J_3O1&#*>3_ID2u$6mf?AzwcInqPgToyh(3Tm)iPWUebR>TXNX{#oGGQL-d^~_V;@EsnPqldI2N;Rv7v(=>_+{ST7tw{2YFO zfBFi`bC`yJsz=0tauU$`Km_^X1k5ntmMpj>J%5Yz>n#$vCG+K5ptt$sx8%Sr9C)7N z@jx~E!!0=uEfCxQze&H|;yjPT5WsJ_A8&!RS_7ceiBs8tzX5T>%7#N^0uBT0%Z0|_ zH2sh|>jNUfJf-P(azx;qe)_7r+h?BT?|fJ4w<@<^%D#g(4jj7Gd}$3P|9>^x-?X{^ zLCpsA|66MM9f0RoUfd5P7QnLnuhhxEWfb#d2U|ctnkP;F%xnAuoA3WMhCXA0KXARi zaxs6iYxO%gCOC}$DmmnzT_$j9|1E^be|EiJ8ymkvllv~#uWj9LEup{XyZ)<-`=73J z4kYqh?u$l~W=hM^IZS4N3KC^$SP2qA+6r)-NLVIK4v)2xmi}MozFfb)`|-_MKwk1| z0p$9fn*Ar%^5xP$a1sBmv-h7{uph^AI8Zv%jl<{$SrK?G#L>ac#nDdbYijhB{|Vl| z0aoS+fO9g4H6DO_|GC@$<#|p<^(DGkGKc_Y2Jo*Hp7W-U9D#!a0#I58%K$%EIT@1N z5BxbbrUTOjpcx292Rmx*ZcFHlK&50Y0_0gFVyX3pam0eVfn8uykn}cy$Ob zVaZ@(C5QwDp7TNxUP4BeKp0_`GB^TBhC}`Qai3ph`t|bH zjs9@`+fF%ucmVnT>0W_*{tpS<9;C~ExF`@kW^W)aKQqqGI@_z>)?#{VN)aT-V^6t-xfE&Y(8|b-OeNr zQ!5ku-hs7VGh2xgCNj8?qAo@_b;m?Z^L1P)e{_w^9n1LmotlS9*!>7QnGQ2^l<38q zH?KD9dm0(En0s2(d(U}Y+O_X^M(n1nUZu20k_PPs?r-&b4<+?Z?6_T0vaxO{3zzaS z{c5I9ca+*AYi#A_xqA2!>(@8^#;@)!9==N7mUd`ngw;D>>pM;waem$Ppz6#?!ba;I z^}dM{^B1P?udxmy39mR>-s!~oXQUvQm-6jXd1p}Mmm8daOrb76Jo?jfPUPy(1I#}z z36c9@NL#hU;f=Z)xXNJY0ZTIEE}T&L&KXMSCs-HlbDi@jK1Z$3JXw|BTA%OJ9%nW6 zb!oq>)qnd*!pR>O@JjsR_euUOD=p_1`6>snjoXOsd69e;fKc$id9o2(fnXM{5?-#3 zg)f_b2l+uLhz%k@D2XH7R@OP6h*^jYN|4Updy94aLqALD=n=2rzqFX2L`c39%6ZV- z;q|~GpWL**k$l#No7gXww`1!oCsN<0K?Ud6C*6{=&bNzx)eFbyT>XRFg&W_0x@6uV zcuYM!Ohvc}tx3^aEf|9+L#OgJacwf*DRAOWDU)lZUYJQ@Hk=2-3-PZ)#=>x6i3(Me4PZrlQ^#b}zMdIBmYkXHx|idR;cYPcA0ZU?udD2p8&w#bc|5|g^EhF|#e z^z&xjd*|Mg6D*ZAXYFOm&~&bWPysQV6683gAx}j`6)qZRnfokWFZ9aLvuNb;@WIKX zu0!t%yYkJdo@j|`zDi;orCvL$nirWRyUrYrPS|oKyemJi_kKF^O1RMYg#JU`Y1P72 z%E?hVVd!A0@V$jxB42G|US5fwrVX`YJvf>}hfr>Q#EX&jo=%pe6%^_zv<5mkbNC)f zkGSS|(CNC{fokwvmo;UPU5A222nTaWQPP{j%kCJI#?;9Sm^5t}9m^r*Y&Y8Z^ugZv z+@t{r#F{tX9^En<{ywvBHwS&*m9yn_+SMOBW;FIMY9Rbp5dN&7=n ztw-`3`S)IzR%+s=-s6)?I*t})@5DO$orIvm$`BB@CUtf^?eSZ8LTJUhC$3-o4ad8f zBk8d*p_5Rud51<2=Bob1W?kZ$O=#8;6r23&Iv0=NvFNZc(Q zy{OBzN?%VQ&|_gbm}^sX7~gXdwj^D zmcKk+3?>q83{{~CZ(`wCY}A!z>m%r8Y$$KgwJpZb?457wte_!03|I~};vy=veFjS; ztS*Q1-t#ak$FHp9qFxHq+wjftaJ=swB22@ZDlpgGFx$QR{47e;Zn%E?8Q)6&qP;~4 zb=G@d7(yrfyEmTO!R`w`Exo1^hHG^17e$UY1&kV%%vsF3=445+E@C4X2_Hwtwhc*6 zZ!IVJaczJ0#?60peaWYmfDzdg7mLESjK}FA`ZdmG{>oou4%J!HlUNn9L={Sb><*>} z_e&K7mya}<9J}Ca|4LftR-2akwf@Qbr?+lAH2vPbEx`QDm7A?6?rYl5^bG76t{e};1WDGu3+h|}gx_J1| zTrRWLf6OyrtU5|G#Wc!?M-lzSRreZ0Q`Z-D2)*nWkWP6Ap|SLQ9$ecPfoHHHck{@p zLUs#KAWI=?kfV^zRUz!)_)@597&h$HVZ%!wV-nuE_3|g0S=akElsDPW4d%Iicw+u? zMlPU>FYP{$EEgqA9fgE8yg#X}Ju?tjGN~3YeKblZPSWJj&{JCXn7l`_aePubEIhwi z$n;~=`RN<+Tg?lshH_JC=Nfut{+(X;I&X>DYSCG>-oEz6-G3)Un-cjNdQlt zDBvudc0Ulh=#+n@@#M6tj_iHoU?>GcA<2DO9LFmfCJ+jz@F+oOp-`nTy4VK(RqPhy zxKFN|ZkS7)ALBZ$BF=2I@dlVnuNdajoXTbH!Qz|qApsfM2*&V4XNmhf4LI+2$~uu z5R9cD%aBtQJT=f%$ioTM%k>79cEth}Eo~mJx7Ek!vz*uNRD}povJacK3=9vCnGH`4 zWX;`=o4a{%Y_`{8W^``4t;FPx)5DhGA|oSdYSc;LBn|z}c)-Zn_B%s)ZL1~rUQT~=t7Il)Yu24y zQ^~QhF`?rXW`!OzZ--|c;Gu1|9J5*mbheK^KIi#z;_+^snq1%Ucb#|6^a@GOdudZa zeAv6XuBiHv(X5y%hCto!`mxEWsRrbtY+8Bf(v80Fp4#zu5itu~@2(WAtd|`A=$+Jg z!8NY^P-qvQ_(j()#Tb2!{wupx1ynHPu=R>V7cNC2lsjS)UCog!csT;ne^3XSw2wUd zW>s*|mdD#p1iAz?J<;CKzPcrakbt_Mpv6%@=cR<$AL>|N;~gAdC+1i9mSJp&tQ#A_@*_9pVqj!H$xYF zAVG#eV8BBW5NF|*ffL-K4D%L7&9Pnu;G4#NOk;hHL-jRzM6IX8UQbMVZ%39vEBX}d zH;O20i$c7EBVAKh&g8#>GBA*`=jmm=_aWf|Dq(n(s2D;_6m|FIjen zGJHkauzs!mtu|-q)#z4-8xk*E3bYF!J|Wii%U95G$u+uj`_r1ExX)NTo_A(qVTo}xGEn#2)a1f zhq6o`DpCfoS$1DWUSL8n*I9<5J~&mR7d%=WDh^ zvmi+sPu|YmZ)d>dMB;F`|!J=v83LZ+% zd_#rbY+J9?j4h|a)rd84tHKtoX*4x@RjpxteZ7bLdNS0_EGg!b83GNh)*g)7SNB6t3^^lM0YN9p?c`lnY~ zzC+92tGdpBP=Duqi_$#@Ze2) z@?jnxUyGPas0eWe7b8?xuqxC>KB8BRc4bd^7l|5;UR=)31fmLAn#8cSlvZ$aB zC0M@R4Ozs(Veg>LNxeNI-c3ZNiJ^fspHgsSdV1zS*`P23Q;XLu#wi&i0?+rQMxm%d zNIl9q2d!rAV8K}B@XIO-@i&6nc(H$;>0;DZQ#-C5 zJp4dCT3HW9hWfVaM5E$rn+Mzt3}{ZudTwS$KvA%Z=xC-1Or^@1s5Rne0p-$z9YI`( zDO0@JHl!)G7{A1PH5b{(3`LEuu`I*FR347pY2vl}xVQTLPRK^twLW*%JdzyOWe!Q7 ztpk~@nWtF`mW6;IwvVndI5;V&=4KIzqH24$d)-Vd_)*w$^=Z#{ls{%9ogu8R(lb~k z^7sHzRZZ>S&4l!HY~2y*w^%;j5K4-EjnzoZBXs!wG7ME8rV@>MmY0#frKp1CST;HcwmEx97sf4i zf(9?+Q#e)Qm81p<^cGXFFWgzCw47Zu8MD3#MYC!&PgsX6s#(FSP z39XA-h85(A;wEbzcojkhC7761{W7+3lcp+<3LBGNlytUsm4JwU-(BugPqtFDFQlg@ z_1=9Om=NSzpo{iOS}GoLMpNwE{i8HU;6-$}o7quCEP_*nA@4T&oC)BS_Y`md$yc5ZCM_)fNn~S z4r8OKf@o{_&W4eldbPRJEJ1K3Tz-H|URi#*FZLXEIwRlPeJ*U~0o2)Atx9yzv7B#{d&1h64KlkRHVyB#i zH=nJev$i)7_{#I_LG3f(lN49?+E{%J^NQuJ&2uBGgAr&oHMPxRV%kri52Q_fy81SV z+HiW0aJ_8Qf`o_G*G*LPIux63UcR9-lekQYjB`{lQxLgicy&!^RGrlt1~~g_M{ewF z9}}PyWNxND8uD1f=y6$N-r>C=F;fp_laOk&HyVX-Xi^3zR0MMj8ideKumvugY4R=t zp?nH;jEz29SLtkuhOyD<&9>Rj<69fq+4Wo^%E7vvqgvs7EqzOv()cClBEJ(>;)ky` zu9*|wx@EhCVs=nRfn;J$zi0^~@kQ_vspU?yvB zv_~r78L`grYKqNXm`ZxON9%e6T^(^qul<%&p+Zd~{PeXpUPsedY$M}Bh|E&mBa!NI zV+)EdxGnAE3LMU_Fml3sCsn~0i>QfjQZ9u&BniTfiS3E*jud2BA}!l8Zkw7LW<61@ zGIZa2T01MFFSRTGg+t5Z6TUn6eXg_((OFteZo*4rRy{tl>bOdumMoF@xZlmRB}Bgx z%f~bctu=1CL5jGDwk58enVE5-9!lCAjx=?27FI$CuoD`!1lX=Lcu*s7OIVg$-ICcv z=%QCEU!?%o6v1c=4`&O@xhTUbl9NR=#Gh+%k*lq)7Z2ZR8%j=2MnIJH>~8K2XQRVk z6-f3`E924Ojp*UWV%rl(oXkoe>Rb=uCaZV7{9Fo}k3d8D%ERV8j#aWFt8@wOnV#v@ZSr&6SC;jZ` z^j8tv-aak#9KPPLqmW*)tjf6zdjoUT@T!FQopEr>tF7&2D70Yg<)PZ14;IrE7Sknj z!*f$l87KX^MK|KKM*7pv7r(DuXKih5U{EyrWZ(9NsSj}_cf8)evY72@8yjj{YOpt8 z>Q=y1*Ty+7506g?2Qw$$9aU5yk#2jByyhhFCujRkD(g*ux>Zs{D__ET-`(9^;6C6` z(4TsGtI-ApuWa)yP&&-bw9m~XNFT)1PQLXlnX1w8$3ucT?~0^>jQ`P5EH&C~#d0Jx zbvI&P{`8@gs8q2sJqC-M`kcq)wG_HTL}9z^BgoNp(ebo1hoOtsJj!K7qhOm-*X6dK z@X>~iziRAIIkI?bp_#(==IVsw5!!|}?A~3f7xPPuZ(QCSN>hhCbT^AeU4G9Sw15Bp z3+7o$wid~{hpWA!QAOrD1_s6!{ciFX_8clQx3I8C(T_s$Jd#$?yJ6opHe)JT1t0NK zln@KXkPm1t(Bi!?3l-stMMb_jV<>2wV3=Vjo-*OP<7}OW{5jQ&dRtB-6!+=DF1rkl z`sgxvE-u&5ZyEI{Tz*&ese$gDd{b>$g+|Jv{;q8Qa-G&VO=zkO+qXZQ16L-th(vUW zCn(^FlXCATPz^Lmt2v1yBoVj;Yak_J^ zmw&eJmj8fg`*@`+iv04HW4pcMYznCE1X0huX0&t^X1gnd%<$W{pR4VTlQcJc5O=@l zgH-!$o=(6ULY%oz|NWk;;L83vU5lLQde7<5;U#mkjusn*g@xPm4^>61ziN~<8z=R0 zH)i$lc+V|v^1F<=L+#bo>dXQS@gn-nY3KMbHki9OXHVbMler=tXz<*}!jd^hiy|Xv zFz^g9oBBL=%x(*q8w&{d*!QsWZq!Nt@mq7Rq-NPBj?^H9V%M>hxNB3dgo;7tf~ro( z2+QFO8eMx;p{XIpp|rzeOKwBTls{DzvRvv%kG;K=d=lhjh-~|Hiw@E--4W22+X`T3>H z3W#yFn?S|d2F_B__CpAIKS^8cRA60@l9h$U#+Xk&Nonb}`KIRiEu8)O)Y zRM&_G_oZlL1jb{%R@6y^sbq!j4Kvy+GkY~f{_yusOUaI^3AeU}9+%PAcJRMyn}n4sS2_!C4S(%@_uf6_9OI7)S$i|g{U>@hj+ZV4Uj*^0xWB)@@NL0CAD^|a zmM!JqfQhRu$OJ{YMhX%_x%d$HJIA!9{^8;C=gz&jVRH&a-8fOLmfrkEac)GhygSyr zCSM>p60@{uDdNE*BzC#{`%R@9-4#CWm48Ur0#6FmT%P%IAxZ0Py;E- z!g&C5-hSv)e5#zhygZ3?*`~Fzu`xIE7ZMo{@=~nwm|!Vn2?J9Z{^SJhAQ+Dj%S50IP8WYXRVlT*OM1hxO;S@o!ML z?K5gyo4digTR=rGv+%8a<aQ(GY@s+b9Z9AAb2#C#wQJyuQ5dbH1ez$$=4W8^Vcu{z$ z-Mz&$V7O&=dtB{{fVmmj7j8|8ezR|_13rxamnb=^v+*1i*=j!qL25Vj-;lqlG1M`8 z1Z>Fv&9StXBX7s1>mBFnJ32aU6^}|Rua3%c~kT7pR?Z%*(n=JiB!KbAkVn=%&xvJW>@)8okqXZK(6m&6W)$r=2aMAZO`*ebzCvWuVTA5YE<4JAyL@i6(rFBn}tww^w|r|#;zoB*wjozkf`9)p=E>evg<_Oarz?R{Hg zQ8m_zQzlJBnhRuTWAS)}6aX`~mbh5&IA1bcJSACZXC`*ayDxd^)#f(=6;Y$)y zmj+5vU83)S?6rQ|FqUs+(ybx$9Tx8tghZxW0%nX@A}Uea8>-+mO|+J>9w=Kef&tTA z81sh#5TdI@CEP? zr!_X6Z%`UtkpiO_G-e&qsjgRpY;f@*mymJhGG_s>WwWZ!RC-+DM1PZ#SS?=o?c+~` z<@~9uOq_*l6JQmvm5E|XK1oIos*8um0Q%6dOEz9(H&&~)gyZE(-!xy{mGY>w{AgCu zr&fR*Vdp|#9PjcPd0m&(n_-;uD$c(@4yf-viVCW?&JXeN@r~|9Ed%8Ij?+fwaxyY` z%-Ype&Ixs?!&4o;r&_!BTy3W3jHk*LQDb{V)gpv<_>#`nX+(EV`4^ervM=155y4_r z=YneJ<;PUnyOml^9~BzL{ND8sc@zRa7}0g3ZAkTE&i=cLnuv}C{bG|M<$l9 zlK}-MklM3nCUA6%d-6p_TGK=K8R?+|l-@OZ3MFkvD@C#&EWCBW$S8cOw(z{GP-xOz z@m>46&kO=kGc`-sUvb_qzbhEh*slPw&`VhzFA^l6g04i1Kg+uSg(?BGFsw@P5Yd$uCaYIDNrL;cL zU}b^a^YB3)5p;x-N>tE-L|$A~=(tlenrs2VZm|Et6Xh@yxg*g)J-QgEV&BwRH zm9ml&T@Kvip)a||&(MTzDvL(b!vx4s6g7-d()&19POo`-wm6V(qmq$l6dB}@cCHqF z>Zs=^6SHggg=dQ|Y4P*%9Y}cMaBF)*;fMQMt*xv|SEcHrp_EuDi(>bIC&!K*3k+OX zn+rhmix1!VwY!^DTS~4zKH>Wk%K~0TTT^rA@KFRrxC)?>`KBx0@QF~2uk1%Oxd>)M%}D~M*pdEmGpY?8&zF#ERsNS}u7V>=Zm={Zk_LKDOg z!2)!tNoW7@VjYMLaV@{%bT&G?!@ybo6y<@_TAy9pM>-Kn1Tv)GBbIq3y|ukPprdqQ z*v6nGTG5vP|0T7gczB>-McsnZw~F@6g~fUyf#a>S=fmwHg47x8l_a z*_W3GCL01~M~2#Nr4_9PBWw4M-~Y_S8NsW*)b1n1*_P$+6)2O-5+*4o)bEDIYR z4~DAj;lQAZAInynn!y=iNCW+**uaJ>+@LRZJ}Vrm@;$V5P?0d>+T0*S->45F-J3_!=ZfvYP1M#L#!~q7yM6<+9H&3`~MVciXvo5ZZ3p zJ;USi?DX_h8-S!-5H9UquPudE=!*MT8;|!{?P*PhUSL{mNr8y4XbFhG%aCN$F`f_1 z6Yhmek3H5(c-5^Z?Bkzb0u64yyh@qodHH$ETjD0Y$HWu*Z>IcjwT0|oub$;olvLY; z=sbl>wMk&3V;*@FW~8TMYH9G+yyaw9Ru0nyK=;pV)4e(e@Ar;?qRuCc2G2&(fc|_a z`&7tKOOw!S&<**Z;OOCD2&({T{NsU9;##q z8^O4rY}=b*C|m`F2Oro0Ym`~L9J0#g_^!{yB&n%sCkI=!2-me?H?#Agfaw}D+JjhX z%Z*dw%9X-V`iw^rewi=@D}$W^We3a`X$q_&3t5uiK3%WrEO~ZUS+HKH;Ky7@S>kEe z#YU?w^`HWjTr?wGdN=R$!!$ABT_-EBYh(0w-!ko9LXNDTKDlQ6{8a{4UcS}#X6eC8 zSy_$~A9^CXraz`Ba*(6*exFR*@{BU}rli05`0-=0-xN`6z)e1>HxN|3T$8JJCPrGE zkSY>WI4Hho;r2>nTcu@r>Sz)6HQi-PW5k!8S|t^c$~0MpUd7#d-FlM%;{nWIg@RgC zHv-bZRcCb_#F0lA$jN~k!6cN|R)8yGR&S!d8TEyfOKRiaqS7W_m~%Arn}x91>ikMye?7> z7%rxjA|S6wvCK7taTm5Bx!OAGc?+V_Sf7c8WT}J8X>Ul2w74$txWYrdR@kh5wN;{a z2|*buh!$L4u%aX1x z#)2U7=`>}>5NVaH#oGx71@GRyJE?bcbW}Xt zrMp@{4|dmPiQxMqh{Iyxp!l%B-Z5%jckVNVulMwR!a`S-zU@0?j}3RLfgvuj`uBNcys^hE;BhP{cwq*_-%SG>h*qOHWQ&x6K9XTuA-$B;^Qow5(WVt3M7%9Ao$|teg zS2ku9lAf5oKxAzwx&A?@zh?Geq2yg8o0N)!4U31f2YjMY38{CfDd=z-Jab@gZ1a$Z zYrg5tz0!Q;xtJz`{~B^F_Bv)E$)4{A@a~g$8=R8z4^V~xd1rn(N60k)t80vb~+|^uib;T z)F_Xo-F~DEpPufW&znXxB7?G5thm~|`QtVJO~j`pvxamo5mw}3C>gDaE<=ljz3R#k z140gmAo)a=Wx*n3H>0dSJRR~dFi1h3QaOWDjYL3#ddGt!=VctTs>c0=F^fkqY^QNh zG)fO9O%)7=DDjCdq$y{IVatrwMP;ecmpaM8kqgWoH!57L0ni924W%!OfX1)xmeZvN zoUN?H_{z6t-lo??Z>o)x%G$F9WG4UzvA((2?7CGQh?M{lxDe%;*0k{GNn+zYsfsvI z*RELlmQRbx0SAq3ck`aKIi(cVwJ_-LniV)Q8|`I|hOm)WxS~ibt{|TBMXOJRiHNbe zjvJRNTgHp9N*6D&qufng{aEPvS%m!NaC!oFg5;*s?Yuj*TT2$^5|e9}4Q@%Cal-9X zU#aQP#2@`SDD_quF=@pVp~XW^VtQAbTv;t5g920O!$$2mKPxw=Z=1&Ty1;ZfoACDP znM!|)>>B;Gp4&U6o$?;rN<$o64;>MDHgoLc1`hvOct?HK8E5S@bL{Yz(;6LO%XBE7 z&S>%A6NQ;qZPwl~H!!GjzEDU?xv^(U;Fvj-tA9}u0)lnUwcpo7#LgX2@zxM0@{cG0 z==Jdg5LQZM?7OX#!MR9Z$gQXciYU3l?naBvW0k0x0y?q;{_rvUsHB#@Yxs2L6V7aQ~p zZoY6((?f;R({(3abgtsH+!J&fT@7y}xbC|Ugy9Q9BnKiY*=YJDv7DV(;A#*NjWdUz z<~&uP#AB7$lo4rRx`KoUu3~b1+@g;*f7}uDU_{7tmwYlkw%v9fHXx6@XB|%Ygn(R_ zBXp~V&>$n;b@lb1Mn`F^qoJXD zGh$KHbK0O63te* zyv9bCi;AuYx8B-(TL=;q35D&KSCGH$;&tG5qo<{hZExpdRdL5;63n^kri5s~bGO%{ z_0M?AR(@R9-J+t$b>dF)CNp@bZcnrAO+ZDVTy7g$y)4Ax)`0hhr|Oh$uI?RD7kw%g z2~bq@_UkPTa?F;*x15Hj4)UCak1A6U$|=Wou3U(Vf=1;8i!ChUp}<6xq2zc31`&)+ zW;HyNvv%5$+Pf~S^v0c)=d3mjcNZ79?(WUU&vVI_o^u|=QKJFcxN`usgx6OsT+BUg z1bJ5B?E6qf$o~0lXTS+-OfhXDnzc9X8RyVJqWZ$Y69}_{uBR6R z^6QfKCma)#lFWVXYNS*5oqzU7j@UEhk2zMpODLnT^Tb54e&ZWSjB(r8@I?QSv+W;u z-HNSa*_b46+|rxr^LBI-q%&B3vwr`jWeOt6SB#=jjT;p>lrA;#y513}2}r~`czAGH zB=`L;GP3t-yi*p|oUvK4`N8$wN7=;nYb=uy_nl#)m9I!vF?3}tXyD7Gu^L@16=}ir z@MB(OBf=}>wE`}!WQR0Z`1_VA-qi{BL7_QyxNHUd-z)Gh#wTd&~t4qQAueRJ{B73!f+ zjvpysxpKm|(USY@n@7Bcg1ZZQ_s#7n8g5kcA1IHryZvhO*$uAIeFrj-;cR6=WpSmx z6wjr8`5PKi5Sm+WYFF!oj4ZI5?DTBQ<0ckM1Q)t{9XBJd4Ad^iFn#Rq|A_AOfl|K;{Z9uYIjqA+7;uhamy|%i3%1 z%sP1Ra9aMAOPev4m;6pW%DO=;6!B9qN-g}%AIqy9Z^AAhWu8staUK7-4VHR5!*F05 zAZezj^8zvDTGsfDy^!6u?Kl+lYU9j2o+T?CT_H>=g)bKGoAQULfVZmv=CtsxoSYm_ zdrPX#WHJAzK&TF$uj@mt)JgV%=5&K~vJS%Q*ZXlG4*0Uj?S^@OHahpZriBkDS;kbN-VJi@l?I(h+>6iHqfp z%6Lmh1>AyY@J7K>qE@x|xwa_^fb$xbqzS#ggL*J_Td79MbR?U*`q{3NLaAwrc;orNpo)6-*_fq1SgA@wC(dfB$kTWWLd+IBc~?7Z5%W%cnO z#Emw4mNN$`^K){_e&H}skkrr%h!;2a76Alj^XAPwA|Q~S2fn!EEt!j=gExsiRP++~ z>WO#d`~mNeTLeRUfb#~RaAa){sC2f}gd^^U9bi9zpUr%5Bk?8sbZs{B#K!06_q(+X zIm&tUH8%Kvx<08X%|nR~DAp!+=Ch!w%_N)maCry$Ma!RGV4A)`aGiS|gjlc`8Md*k zVD`BtNUL@({{ZRSy0T&9LOeVHeYh@$jed6?Ives#j=>T`9Zp&nj)YJXN&X$W8Y+6R z%Ik4UHiMTs)*Bs(e=qD%&$}{I-1?FG+ zslW4j4)H0yc?$&iOwf<}xL$qg@lhI@s-L2tKT^MKp7L^9gX!Zl2>=3u*2=X~4fXYs zdvEj=3}mibx2~<&uW+CMxZ{$Nb`D_)2xEBaiqbZC!{zj4FUmj{tHgh%udgpv>+Jm= zmuOV`%v(=@U;;c|t?PD{t|lP|(joEUWd*f~kM4q>|pL~5@$@dvEZU_K6gNEeC)Myyj!bMil%?7Y2os@LC4Mj#;32z`y{ zNZb~i1S>0)UbtCS^YykEeU*o7s0d&LB9&iPF2RXf3uL{%&~p9?AJLtQ7w?qnVK(O0 zQ^iJy(gvq?ps5ECAiYKLM5FB6i`P@a`fsf_I%Z9O;^VT5zQcjTDRUhsm8e#p!H35q z?$ZRzV1DnPqATHqAa23X98~T0!rf??a*&Fin{Y#(eL42R0SMA7AvI;Ddnckgmyh>0 z8~vsL{~J0*@Td z-ubFI$HT$eta9<_x$Gw^q*Fs_iP>*gI9i#ke$f3$d_ASl+wkMVfon2Sd`f05fI1)< z2gs%!y}VHdeYcUdA09l=6g&0MeS1WgN1?sRYLQD#{X669N4H}oim z&G96MAp${w&{scWnV{XV3|+=2B1V3^)ONHS8~i-+ao@UNWOsilN)fWC`blyOg7^J$x$c3t0K$-W_dqHB*SCvVvyY6XmAqU2!IYmj z3b`p1z3gt5gIaCxxt-@DMenQICOA=gAxUXtAF}$C^|+dEM0AC*4J-;mRJ3=u0gFOqXYXhH7v!y3yS%5b=U&!UCsW9jUS>QQPsdY2J%G zRG8i?@n}tmK;%w{Kz1osiDy}PBsX8TPmo|RREf1e2pbKdf|q%7)6?a(b)qkEi(Z68 zS>GDG6l3mDkpPe$;WKhi``whOz){Gau3gNhMmQ}BxKsOXIrtU6C;~0>ojshqV4aLz zHs)%}fIVmh)9DnwJ-4$bYD&Gy4*5N?ckhzh@($kIo1(u44u7ZMSQD*6jn>?7=IO_e z1W^4e?Ktmg215Dzrl!-_urAbwb^CNNu|C_=bkUf7dGxWjX8Ct2mY$lYnw+}0W05G& zT^3CfOJ@lLispwWVmsxj=n?T3xBmOq>~%au2XE zce>;uAbIvmCDPe8)M(`vcXWb2jN9j)Qt5g_`g0Fi2M^+T+Z;qCL{xwQy7iTK6imqd zijENb3C4A>^le}IY84ykBSL3F!WpEk{yd?+Q9WE{k7Q@x;1sIVD*TRek z-3L(`u@dGk@82B9mV@^zUfbJerl(jVwy`_chI|4fn6j>GL}!oXI-d>rfWG?b8(-u z@KiCsze0Mtz6OuT{wMe0*D<_=OT5vE2w_|l6?sZQ_D#Na;yBKATaiYFx3Y9jdKWiu zB}I`Xs-e7)7sAj?KBb_+MUFH86hv-ihzJt+Pt7$9p5xp+&obAmMP;tVkkwXf%rH7w zUS6J%dUIW!dDZG;sN;Zy4aq?rLww+|x~D6wDIUUqwzdbnP07Cz6xN&XQ6_9k$<~SZ zwOoNV3E-Q$E|}Wf;i=34N=XwXxzYBf$J^)L;QbEGO4z0#=o>frh8sIlS0= zwb|U!yMI2jyFegZQU|XA&_cOXRWww>;pGs4P##Jc7Nw8US4NjRM$ zx3`ZJVV)ADohC{Zgy($nDe~Ph?7d-6Q;^B-gfl~=2pSxa?;wk^U4n`uNZQc5$W<%v zV-0gtH{>AL=KjQeXXK(c))I?MD3^+ke%g=X=Zn|?f}grFlt+b{c+XkzSn#r7Y&ew0 z#Ty3teM&Jn)it8(kBBM;&81_`4=l-`I914=bAqX`gOxR5DksaZ$H4#NiNVEUj7hJi z03k`2FW<5z8oUKF6ph;c=_w=5!hZsgHaL`Q!2I(le9xqEk3J1xT& zzmYocN3{`TmY$dx>mH7_h|Q-LNKZtCVM9$8&4zF#bMeA1b}b1M{-|+HM0xYl!yz{| z{~wypJRa)xed8s|kYzA2WSP-~N*Y3xZ6<_}5kh25_Uv1hjIkuizVAg*A!`Vss3auW zw-7>y)9>3Ky*lUAIdkUod7kHfuKT*)_v(lwQ5@0JG4>G~V{M##v4CUEUfz8= z5`zGDE+y9R31~|f)YOy>4UQ)@H#dt$>4VuFv_K368a7VP@>7fLXQYqz+IbhAkQO`A zBb4>xjGUKImuB2ZHUDA17S}zRuNvO{KjlwZa_Gfj5Jt*0TUlaGGF_1u@m;Rih1mUTK|e?jpTLEbsoQpRVQgl z*is}i;XD;4y$7SPgbJENlrZO4KkRnRk{tWc-p_*$d-kp(CDY?>z9@Q%Dm?l6z8G|} zl}vN5eJc7M0&W509mcpk-ukZf|Q_*yj)v6XSi$Suyp$Wu1xR z!JkWJe6K=bKOf16KB$60A5F#4SVPH4OTnoiTOub@*@ipX-?hn3Ge5ijZMTJPvLkSm z{i|Pg3HUx%cgFXEo*Q}cT|m-m_kvR^hW{K>7nYaHL*TvaY86lRggGW-qg?)N(POv;2`rA!=?2Nql1k?$IDg*K4uug26B0 zU#n1TpPoIdt*uSc41IN)`8+AnrRL(XL#jRHVsk?rs&VJBCEv)(^RYaNAeNwpM1sOK7Cgw#^8uaTO_BdJ0mchGhEE7{s}hYn%o3oy9$ zopVY?5Yysd(wN27gaaPq+;aS37siu0At7k%otUY)x*wElLYV%aC3R~o z3*vQ^G6reReN`{N-zA((4eUKNP9)_+dA#@cmgNyVM;86N>sQRYr%s+3`}OVWmuq!~ zy;XRoJIZ65yPFN`DdYY-S8tjJZ~K!te3l1KMw0W7XV0=5qwvSByGIHUBfGvD5%lx& z#eGBWC8)5g7$?_zpSdbt8`71p64xgi!($zft1WRv(@(cUe=|@l6r+AC8r&@6DS08X zTXQQOcS3b~Qw4r=AJrgBgvG$o|4=T1&?ex?hrh)87G-rs!d%MSuQP4$Jp9!&yf-KLatkkVLC=${7 zy`7edMtPQtVh-K1vMLF(MDLvW+GAM@?RlpcZy(}Q`r&c^;Pls!yAMki2uS5CY6b>V zvaGF;EgRqDu`aZS79B)543<34TAb#g-EXbmD<%3;QX7&EE;Wzrd996l*Ia5uI+zNW zC0ax|j)r_viGOJFjNWL1wUZ7b3`Z9_4S^^b$JevnJd_v@W|a2hpt zWsiJLcR@Whonxr7t>WIGnO=Xn(Wp?bZ5+6z6ePL(d1Jqah5z_kKHc4#~0%`hvX{isV6T`lKky7!R`>4R!A zWq~BfJ$&DiX-y4dv{LW)Dr+Sf^sUOvZs#i5qg2bq&TFR>7pE8YEv&oLK*!t0xY{{G z?|6sgX2xXZq+TBnj`XTyg29dOR>V6XQ|@0RDd-2cNFn3h2gu0*HZ!v`hYYyO)OZf2 z-aJ%gXnOvvHZ8B3hT`z@P{~t7N;TxrRRe?iQSgp|rt9waYCFGw0ZZ|H^gI#I zEYVhI4C2$js+cAD)zurL-JOR{Q*a;=M(rH$iH_BzxIo$ftdT&$)M&Efs-*WK?` zb)2<>lcv%xxy)Qz*gTTcjwq4BR9rmx{82_>(RUJ>o#-?S8NH8hiFx~eK$cHeQ(F6O zJ|gJ3^Kki7y&}k_mG*boNG4wovwYiy{5Z%&^!_dQfexE908y5e|41*}(=6&n@i^no z$m;%tL(&>$!dGiexsG`jdr(kT7Zz1L7_o^sjXYgME9447qoDx|?uEK+oCZ2Py^!$pAQACU`ZYb4869pZp3;hr zu_AIr-ZR=eCyLEC}j zT>{z=L^@tR3jv(UYAF^x6_i-8T+xL<-_1x&SmV>eI=otj>#pC8l9O?^*({wR zeId#~XLVbw3awbtwM<{BIIlbLFRafnU)Dd={KHd4=$qu5BMFcaHkiX&)<>R|G`<-I&ovGX>M@k9?zS0}Sgef&xBPbDw5HQNS$ zXir55jGhzSj99{Ge$_n^FMgNZ-5GKW1C0xHZhTLQ!BUWUx?D^|10v4keaVThZqmoA z@>q|$Trn^Zm7aF(ma8(eWxg0+8Mxz3f~PlK^Ypa&tFxB=Zof`LFY3S5W?nEA&2z`> zxE)P(eD-j>YEtbMx#wae&YN`N!@2Vd7r9NJo92Gqy1Y|(Mq1;N78!4CqT9;m{K;vU z{sJ=zWqDmmo9k|VBtz^z5(?Z5&y5msjDI#@eN_xrIv=itT58FAc=aW?m_kb#Pz%j} z_+GA|FCvL`d2Q_AW&%4jRL+Pvu-Uu#9Mv$Xv#E6+27mq_n7@S+2AhHf*<*2xB3;4X z__4G<@$&K`c2c?i4EYLfe7#e+%+ujWtMo#gMz{Z%lr{nR>3ETo%w1#@D0HQ4#HCnY zMxo<5UHuCX%~0sRV#uzOFWaKkF;_0`lXWdq<$S?z?$m--=X<$3$Hj=W7n!Zqj4B2t zy)JWIk1kvOEtN+?KWngYE*(C6nEyzmmO%EO?@d8{UZ$7NfOcKE0kY!NdY9D)8OXvo zq>Ak?^S$3}MQ_wnVoFSE-ItR`Kiu(p_Yh^j9lcb0M=)jQH>5r9((ml-KtS}maW3Pr z0@$kfE|~R8Yjf&g+Xlk8uf1>@EZ2FIATH%9yLunl_^L+WK2oUh6Xg3^|BLv|$|1Bc zjD*O+fjBYgJauK8?YUn%PYR}0lOGBGSzbQF{Y~>hfmce&-eBuh-0`dFV@qo#jlaM5 z^z=X@0h(5Z^#qGnd^9o7m1^5n@JG3iY+2HnQIjv`s5g+|@PtMzB;7b+j`&Y z#M_MesYzIteO9-lpZhn6Ys6ck!9#%bKEr&#x>q==KGV*QL7h6^DI2+=#%7Qe)9=?O-=f!nc&@bHw>?pTebfk zR!3sgWSj=dEaqEYv)UFG);JGud^^)L=$85O=TA6|&9{@x2kX2}ST9n0H&rKwtJ#Uv z%d_^GQAnqusf`RC0fCP*?hLGascC7Gwcq{~i?XL!3ZF{S4ZilWN7b0AO3;j-@$8E^ z$6aDpuwid-lk0R|D$fgxrKlyPv19D#dn>{BP7MU31q5WYFDK84WcyOPZC9(EjO#q@ zk+g5De!?a6FC?#8o`l?1d(bmJzP!^o>o*bE=r+{`xi#7B^mI_e`W*OWUH3gzpx*c2 z9ZgX#7kw+)#^q8IuV!%l6dODNi`K!g zmfgR%e%crIeKn@YQUlfo{a#f2sb&^YM~7#|ZSph(G(;Fhz|9tq^8?SPC|vWwgHwr5 zcn4gJ!t=WEA{~-zKNsYxZS1s!czaL|;UPCRO%pA&tDMeMe+b|p5mUM4D*F7ZEzsd{ z9X5wFy!hJL6ynsyeo7os8ZY0s#yOx6f=++xByM8#f1e&DPG7Tr)Oq< zu#vR5@@Dd-sLotk$JX%!|M4+I9!2NBy^j=bMD^f>0^5GY8C1P9k;u6_wKBIhY4|yh zO9)l<@{7uKNgXn!2z04yrQnx;Y&!(bDsVp_upl4S&lhI=XxiI_PzdB@78sPa_M6XK z;^F0m;ErppsW8Q9?BzBPLV`iI?V0zaWS{e@tb+d8%o9bOIkn><9?PhM^{+*u3TX&pY2m-a}5J3ilMe1PMpg%UHg8y7f4~vz5iO7j~P_Q7& zf>Lcp_d8U@#j$s-LP7DuHP3k%Z9TV-^vrN)=eNJ5(f3pD%e9Uik81hyDCnAzLEZ0@ zR~}GYf-HJ_0x!6$$*_LK#CY|&27qoK=?7PQ%>paqFOZ*H@XIc=*EJY%l4);i%l7|% z%vUnuoovj3CDFRk60wdl(fs1$N*c1K8lQ8tta0D}w@4=rb6ozQ{`;*8pBh*S)7wu0>_He zT{+|c#nZ~B6fm3RvpX%KRJ;8x17220=O4b;_Tau^9e`G3Ss%rGH1+IJP5jiEai(3O z%K0$8+?~O>Id$M?)OpTBBmmByjpZv}aq?%#$m1jUHqfO|s=9#_?D4 z?NksN@o*#{c_qjhlmOoW{AOWFVs&M8K92^YyQ54gJ7h{jkmZ$D#hG2yA8Z{2ZW@T9I z{G^zPKCgRCi~LUOQ@AXa&&3ORC``GEIftJ@Uh_~s$i`E~zT4S>c( zOSHRLRG_D9D|o^!AN1T-+W?5bQP@jp*W~*({*<}f>Gf9TpSC=H z^n{4=r?phoV^=MIN-kpbZ49z9?MFET0(;Hw7y-U3dM+>`pHoK0R=R7)^TN-s{El!g?i| z3dNgz`Rx#f_;&MefMO0#qid-sUQ>mGK_aezQg*G&xc=+cao;Yp;$ne;=U2Ml*giVK zNm@2O_hYbX-SHfID^bgHyoJ3Pb;Dz@sHg~FKJFj}z*|%YFG~VW4qC{0x&trVrocuk z7_NaiU6x8h6z0iK(>L{1*%1BTDa9V{w|!N<-|NiHu@6Q>1pCo)=bbKgV$ydh;@sOFMlIxB z&bGJ5zA3GG@r1Q`-h`|dgtv-n$>4QQD=b>@uQFL$SU504KlH9#EH*3`b`uf`5^;7t z`4A$I$snQb-Ma@)l|F+jOCz-&4i3keTWu>Kh?m|q3&Jd4JKP}L4M7blvmk&a9-Y3t zgMrHx{T`$_Pj&nPpCqq8NaAqlaI%59YW0C7x?HS(!K+t_`_#2Rt2uiR{tgRB)HCa! zk`0$;qxRNAek+vu0gxre+6=5aYk`8%N%1%d<|(+BgV>6H58g$7i24KG;k$aRDgE;+ zrTvgJgYPRo@6vd_e0AC^?Url5brpf%K$mRH;Jy#z~f&zF@|BrOy2+{z;#M zV$S{i$Z<*8Ir)bUp&g=6?FuzmfU8-f{68jVkn{c12x8<3S~u_onD%S`hb3{4=Aw$E zUmKPKOK}=(@++^vtx*H;SZM7HZ|oS z-6vj!fcbL8r_%;5+-%W*d+dkIGTnDi-%KHGRe(ytr{FK8O(#r2LGVA_BHflMq!23h z$DW9px=r&%isci{m8V8Om3G_r&}g*pTF(W`9BPW*v1!8*Dpqjcz@mUMw&B`+iH)(% z#+s(4y>}uxm0}B@E}r_^Fuv13J=TE*_vm=i`x3KyW$t(7BMwzsy_D%8lV@M%J?ZJ` z(bh-(86&Airqt=YvU+$TJjy^L*2b7fM&7lnJIfD! z5GEud>@u<63(p^ByM|;5M;s@LGPgpBu%b&BcL@>FJn6&oaeM14#dm$=_YFnDq)W*E z5Hf#;1aEw>_%0Bh_fS2y@0bRMmQVjR_j$qHNx|QZ!OIPsyAUYUGw`yoc;&{Y{yNln zW(0NEINqXh$fX9Gm~YRkH3lckmK6k&?4V~sbbZO}&aNOijLjc-E4CGi(jm)cF2Yl9@`d-4k>iz5M3;k4L2KciqEcVeD*P4nmw=R^_yX@`$4c@pBEF&+^ zoYOSCB!0De5mJN!b9oU!H3Q8~@y{gN>9(=mjhej~fG2D=?frEgu5MV(TGlu4nrgcT zrC{Cf?@yF|-nsN=-F$D|`o4nq_Dl*J8=Fu4XjkA555eEv5xM=_Ie*^eRGK_{bC)}K z{fT*2YO1cm`tHuMIYiQf0p1X3V>1oglRS1>VcGA#Xw)U8zn&=7aLYffN`G1f|1=9i z6mJV|8gLH?g3q@5?dGl;DUrHdAq30|K~_kV=j?6goQRSH792zH3Pa;^t6Rg?*Sl2C zL%oq0D>HLy;dWYAz&9%M0W#9m0;8FZdwSJR^rs5qFV*k==U2zx()g}3d`S=u&H1}{ zBLU~vb!*H61TO#V&8+2s2#Jj+O~0QY@&IlTY~0|#4l%+z$ls8i|2euG4_-!=>Ve+M}qO_&LuMDc&3 z^T-3Nc`r9dsljph$V#_XCI}?d#R4cSbJz5wWv@7sw*{@mn9n03XbJnW`rx_d2_HOL zKyYIEjdK0;NoG!IzX@0-L_047;OL=kMUiM!p*<91;rkCD`dpzKQ_dVDj<)Vv{q%8N z_d30z)SOh@bb{Os_7+odaO`9CfWWu^5#qxxsMxQYM58d{@enuSF!&KKx!^fP!ENb1;+Glc`%i~P} z+rN}{DwINZv6kqdB}a2`Hl&!kzl%^@%X2KL{Wf-M8B!nk)No6x{tTP*aFt`qbz|@X z8l%HEM?AW~5xBb=yxV2I{r-xuh)D3vm7tmB-5<-KodVbh)+3bgMNld5F&5yOASj8cU72#61^tRCeGaN)vGMiId44#L)_Flg2$Zt1mwu=9HCiGd1OS=rAEJr897OS#D=pwg8S&~jJ96X*Tmi#d z9h~hLf1R3V+L*AU4{j5@-19fls2B< z2Swn=>6~q?=SGzLs^x&$b9WRXbUg@o1qJ8yZ*Z$=f^IN$<$W3!%%~O(sNhhlP(nL6IDl6;=g+hVb%Wik z?P6hJfx9DwOzTPxtCFfrR1p9}y4|5uphrLy6*CRy#pCYXzi$rLol%#~pY4JXLUpA< z>rd_jyaRfWyMUe{@nZk#q*kZUbv)4eH%0rI&QgC68*P#N8I_K&ndIvHrjjxgK&(=lhofc@D8*6GjIL zqUWE{{))g>r3YXA7fPMXT}1*gRt{fm^ul#=XKYh3`seuW(zuScHqhsY>TpJ(m|`FJ zl3!{Chxm(%+CyXtIj?7M=nn?Fv9H!*0@-{)fWLGmRO6i1L|#r#p?$Q(+uB34SSmp4 zKhs(0yaKJez5(5pi)Q_hBiF}n_$zeNA(O5@nyjQblvRId6MDm>4v??Ui9~$`F%i-H zm6*2z#R$mF;5EM}UTZ`Bj$uPoCH?tuL$LxH+2HYpfOptI?v|)GRKt9~nNNrwd9K2F zn3`9a+1Z6zA3#F`+WCE)hO3tVh5Pr?-nzH2uL8xW z%y|bmMFM=F5P!P3TsxZ$qH)vuvzrBp(93*e@(jLA@N2?5^+WrnKPT!X+@B$(+yIo` zWzVzs)U4gzIjpIl4swu9JM~SyQcD0C+3hp`Yw#lK*S5TkY70Yjz8x?)s1e%l>t{c+ zu(Gl?!XFpp;bB*Ou2%&4WY{$KcHw#h-$tJO5RgztA@E>uAoEOaIg*GBt`O^R%k=Q{ zWjuH+27D6bqBy;;lJ`v{Uxp>fN?qX`xz2zRgc0-V+*FJTL3$a!82bp(O4uv4jt`OISfx zO3kUYyXhMoQe`KS?YBg<>w%xr@3r#n_VLaNyRU&CP1O#mhA=B{(NV-QT?d_@#|V_8 zCw=q`49z6YM2XZQ<;x7R_X5Ui#1;VS0EHLCxv3CZfFoEVyh9F)5D_ocFnGj|tZwm} z5ZoSh2^F=94tXHH_Bi(XHc*kFCmAjA_#;J?-RRYAj9BGv=m0O@0oOPU7WoIF5Pt#n zo7Wn^7C4Pp-tfs>X~UZ6%rWXo;cqyIh_x%X5$LD&)9!L*a!bq0H)S&5U$?j3wA+7c zxxoh{v9dWmIA|N0J{{ZuG12oZzi22W@~G*p*i%tRcfLoa;`i^}BWQ6n*rkvtNb6LI z>VThQbUUl}0Xczs&zbjCPo%YPeS7{$xMuO=U7oL2=Vj_#ER2&EhDfNiLPj@L&yk@X zJTn4yo|X@#$S3($e4igPzrJsY9D`d5>Gdeh|0o1$9x-NWbObxdjy4i&hJm@@I8I&t zU?GCT>pmr>cDz+<%q{cosYc(DnOol_(|1KYO+)P{%R3Ma%U7~dWg>UO8%AW&`nKIn z&bu8cC`zY3K{3ZT>i_5Vu#eY>w@arNB9am@2n*f=ec`&5z#S<-Nnus2K9+Wf%6fC% zg?nI<&Klt;c`d>qL`oICcIcs_LpuF&)?EscMw5+lH1q1eM(5D8nlT{QY~9@3xCxH1 zaBOHVVohq15%rPq{aL;!h$sp6d#^lg@>FRb>qcH~=KA!QcaiM_YO;$FTUHhqfFL$8wPl{~6$G5iA9$FC3rlCkO{{5_7|m-cCO{g`$MCdua)`#}2PNRL6z9 zPt9`@4}B<`c)(g}HGA)uq9g8f+2i29Nsc*w-;2s-lRuD0H}o~`ABe(NNPYvh3H8_#kHQa>m4aUi`Ie}+1a}-+>OZaJltD+zxJcXG%fmX+xVN5K{48W z&HXCL*L~aE_#Pjk;0Wrwnw!V7ELxQ$+A!I1TpO)x0%M}^*ERw&G#m%8v?qD==#pd* zw_RyI#}K&P9tY7rkNvoDnKQ-n8(Ur>REdW4Cor^9boz?!r znUzZ`IYq>9`uTa8OWgyQ$cYC9Q>U-o==|$}lyo(nNG<$6<>#()Np6q5OX#)y6+&}H zK|5OclsKh$0gyjike}||(~4M>mOG&xPg|0+v)rTv4t)EMHG2XBHL%DG3|LxkkBmxr zXJ%X4A9&yE%wUz_%HOhtiJ21B^z4a^)SSY-%DeW7`>9dn=V^evr)Z#pzj5Z&1+-qj zAGnZrr1!FF!Ocr(keWWRA^+=kqUxWUb zeQwdKD8ah0kXNBhXWEQVs@;zJ$b9LAA*uT_*mN)C_I@(7iB&@E7XWr+9LFE~T*-sB zWfN!i6Y!Cjh@)A>#jzs{J*O$it(n{RRCxu-CzVaxHv?5kubOFv-&vxG7?D0RD54gb zz8aMsgJmcYGWHXnv@Xx~5VLslrNA!NnE0WnQ_bYJj3s4VIZsbyhgl@x-r=JI6qU~W zpe zwQ%EdZfgSV`b&XAC)cMcxU<8l(iuG3NmQQ=trqfPjE;6V0dI;Hzj{9Yp;ShvNVcC; zA)!d0S5WXqwDUljrGrCp{{sJ6PrJ#MFm5x?9#FUshr_QALdg#4h|<&F{#7V)f)cG# zKaWQVsi1M>V^IOEEN7TmS%Y?l$H$=6DwC1*Ouxc#|LMeC%od$+EK=e;niS5ihvPZI zoS=rdLFjL;3}<=Y3<_5fG?^xt7)g?L%&Z|yt@uwgC7+KAKIDG=Lyv`?&V0o!*HW!m ziI5tya#4_Qn;;I{+jtz5u*Xu$*zMv@MhUHX-IhI0t8Z}xgXoP?#Jgx2oCwgvH>sat zjb~Hjr|tUmQaANSp@RH18f{jg7O70Zl_(NW9eJlT#2DCP!wv3Fik>u%C*N8`l z|1>#C)V}P{>vE40TQS#^^1Dj;po$R-xhk2HnQX2b+bSqTnNSvu5<&_cGvSLMAQ3`$ zUzRBv-&%~gU(y($4fvq1?e~}dZo6ERRu~>VS8*nawjsF|IxejIV_oPINt$3@(}L?U zbU@+m0#)!uL`x_r+k;Lf$zELRrT^c>%bd-*K}IpRBG(wXVvJ42O<%Y|iLUz;)$RtS z3EPTDMe~XM`dqY)%C&SPXa}TM4la2Uj6+UGIS(VB>^r~?^|`SG%j)gR;R|&|mJ!aw z6A#H?O?hY`XM53nu(l=^rDT&+1Egc)w+>4 zFT{MM?r-fg=y9RW{K2yWCzXAcYpC?X5P>d^|h{6(%8o^&Z^u1gD$i1gTPS(dxl+Hr- z@3W--ST7dKKvA=!lr4?VWj6pGSEC~^5XvL|mTt&)b8q2(wNfn*zGN#Dj_7sR%0*f| zz=_vdyqj3Tvm?dQ#LOFC>J=#mZES75utaC+Ku7B8&4wzyBA^D{xx@IvZKYo3|0jW* zeRS-BeG-4=nOxER=iARMzpMb|4meFp5UzWr-lkh6YxC%?6gi!ok6Q_W*6e#*J<@F? z*_R&sdR6{$dnlv8OX=5Nl~W206YU!<(@!xaUACv=f1QaL=LitD2s-$e?eIN%`C}cD zTPX5Ttd^{oS;QF{5|fFzwm2Qbd#MU3gWDww-`wT4bny?u$MaN>wu|`l;cp)SwjhD# z$Ufp7B#rnv`xa*aeIWY06!;}P6%UW+_&xt&%+ylZ!VzPYKJH7#$lom!co^Lxp>x1I zSFhW#l8yPHxrhcdoL;mj+n!DjR!XRRdFW$LZCd_(UYg_19UW_4S_w70*mv)G0*Cnv z@1=}!?_qAGTajhz*2TjcEE=UQ&m`J@M|0eXf8U&D)!21EKO)CpzpwJG8%|5vQjPRa zN4FpLerC8TzYH=Z#N|+`5;#=2<|ZT!S+5}jw4mCaw-HtP#_O44G6 zdK`qK0A)FkSJaRqzPjS}(T9SsN=wT)^;^EqY3$ZiUCFFp?3)Z314@mS>cl~Br2v84 z&0OcbvKoJm))_9lB1C|>F6lcT&*Nr$O08p!Jd@`gY>KPc!3b4P(CU|6fhbg0a z3o%F`wpLd=o0TI?n^#?|YU-a2-0w50ieF4^%;ihs);zeXf$jLE`49{y@5!8-nJ-ex z&@KvtPTp`+uXa`f)*ogOjL!Dyu@MRq62RYm(TD!`et(n`Ii!zF4;3|*$q3x6AE(-< z0ZixU#s`chzyrEQ5*~F;Tr|U}l0MA1p8%z%-rG5Sgdxfi92>a-(6(pDCL;@U4ZNJ3 zoFHr(EzwcVC1z9xZIl8?onCu6Ak|qJB2#(w_BWf@W9dT?$(l#!{Lt+Z6xwDrU}@fj zKLhBE_nn`{epEX)oDvmYeBbs-hAoa@@J3kfY)ja66|q& zUY_zojI%svi*%R7q_9s}9)7DRy86R$ohZ$Gq-q8%mAQ=A#xtc$$~fpx8ZE7W9Fxjv z=rcj|7a$;by2uzz3j#~x075v(Q#iM^dp85j^lY>xMv_lN=?!SVR*71CF|K|PpX4|ykdQnB zv^C@8nxz5O{Zfzr!fmTps-ryj@W$J>Zw;=Pg-O5_3YayWwjN;0#T&!@F4qzb?Ky}p zmn_&;7#kRX59%CP859*89r}v>8^-$k!MH@mytR?6D-o1)w}Fc*v@MYCpwULh#4wRv zq3r-|cB<7|yz-i(Oh%zSp!h7B$#hjF&hRq{Ma?FI^*KXZBc7@Vfsq4vD4^;Aa9+EY z`g#QY^^g7uvQ{0_21W1$cP?5CYSrJ7s!OyoPYrqMA zSG*2EwG{O9_n(oJ)GN{lc$6E2$*)uSQ}DxW<7y4{e9nPfZ`bK|5~&IO64{OSV|jxXx;4YY@oKKPuAJmS*S%Bb`5LcE!M3!>BCj{IjNn;SR6lDkv0SC4M=~gu)J^2xn*)%$;7HmmF z9|{>uT#d<$hiqt+l?8218qMGSJUxE%-}#<>Gn>&POHOHSpiASlxQfKZ8yz>cLeYh* ze+cu67W7Jp(<os=j}mFRJpItkNQj;VAm@#HV3L{M1?_D1|@=KjA+S zW_)D4#7A4U&=@>gaP0RK4)`%Kcv0Pji0P9`ro!bHGc3 zOU&A|v>#%?m5IaU*Dsd#4?nlQP}+YByi5vR&|im#4)d&dNJG!k=dL9>y%1D2(J1KPLgyoJ{8W-A^|p%BaHuljHgyeIsH-cvA<3fwm@qQ4 zG-5%OBn6Qvq#mjOOqgNJFOnBWY5`US+GC&BDCmOeg;2w=6P0#<-Uo&|oWvW8gHtJi27=UA9w1s1gBnlEH2j}yrks8W@=)&y@dQB@XKq4Ex5kRegwM5qFf?Bv4!`sW@;gn zHfH?_U7@vhR94^W*Sn{{DjV_cG?rFxjISN$G8jGj=3WbWp=cB!K%(9VMKez?Y&VWC zd4mmtO2;a^hQ(V4)3xDWSE$cZemYl~*oRsD9{l7Ya)bNJROZeBu_#wrJ#9og9n&A3 zB6={>f8AH|L`&GCQ@S5C$aaBS%yqnNZcjx`khElsNiv;`wk2A#9HXI!{*Aywb3y6$ zWjZIFUe=>fTDWkz@r8zhpbMe8%rI;;V?Ot=mBP@VY$$S8;55Z|;?Cat7^OQrM-&`u(Ud!XEDR zzC}W@$4y5Kg5vnGdMQG{ABHq&#CO`a9sE*2qvj)s$ zK%so$A4_x6wkqCDih z%FrkN4_Bb;C3tHQ9wn~B9m-W3$(SkS<3~RH#)LBGYXTliN*ggkP_>nB#L;> z(u&9UptLlxN)-?R|I3S|<&cGtwbKZmS=SEG5SNH{*hnNfoYQ{xH2z$ekHW+axF3B*WC2Zg^Q?D+-QCqS=PuO>kUIJ}*YQOX0yw=GP_h(lEDfnm0nyrfS z#=qX*L1ybjeysVk+}Fq-+3~1O!7E$A%y-483TudY;RA~b?oiMarvV1oe`L6lm%rXWg4P>wIQ9m+g1qOtv1N}PYKCw6wjM@X18?HttY7zX zc5u%>nMdxy3MQLVfbfcsj6u5}UGcXlZEW2_te;s^d+pMbHIJz$!GZxF zP~z1GJ?ds!mhPfaR!G`Hdo>bm38(H2T!-XzF2RUxjJ2+t@Rxl{TN$qDr&~Y z_>0uDYo)Cvw>00jBws?rwI(DnUg8TJ-09k97jslhEF|+O zwoyWk>9*-< z&;bEr>Oo1S+?qVG4#)%n>9SwS+1Hmkq+#i1@VVDGHvY3~hXGCO#&R*h@Ch{0z=|?z@xKA89}kAkAM=nt zrbgkvWs@pI0Us+->wdv)fr~PMlNX}qjT4pfw_kLJeocSYH@-er53O^+FuSNfBe%$C z#Ht$S>Qi`7=d{aEUxWS&M5l2I(dyP7Ae{qJRDYN~?)5kvXTNJeM16gj!l%4NXyJW* zGGM%4isfMub)-`3OIA-|C)zrdS07umZ;Mex?NF+P_H`u(uU`O_?>G7V1DF94$5vLb zua99lCT0^&;UjIOBH!)HLBs7Qi?+zQ&q3OGBblqa8A*7;9IM{_3hzA0dQ%1AS5Ujq zbrng@H!wI9POo@aKPCGU@7jzekAj)YkATftSVll5OOSLfWn4Jn@gU4Y8Y`BJp@`Q` zbF>Wr;^-)XrWt28hEY+cdZ!89f+d!3_eV}4u@CKsU~QGweJ{o!U~V9jNa#Xcx!5TH zjR3AM@e_EKjFPLM;SXo$2#{T2i_FrQ1q*L8P`c>{CgEvl7Py0-qH&6USs6iHZQw74 zB&?IuqDRioNavaHXo<0=;5}%BgF!|r0)lT0jQ=K?W!_9WsZWzPXEtq)nY5H2L;>sgfw-!TTPoq|Om5JO>PX+ojYP)^!nBkho5v z#t^$)h3|DcX{~80Tq4grY&euF&t!sXkvf-kAT*oe&5YN?_tNJf*sChDe;5d2DKd;@ zkM{{m9;$y7jchdKT6Z-B@~cov}l}qc`wUiWO5q9SMCbsvP*|7{tc%INQa2 zm>ouJ{zGusfNL5~U?Lq1x(T}mma5w-BY>~!?nZ8{5`A=3Nlalx0Dv_H_~q%QW@f^i zg3{7cN#)%+_>*Fw-olzY=e_9r=V$xP`lV`Usw+BceRR)Q`yh~WI8CK#?zEeWaBHgVuQb?GqklTrjMDd>7NuN1 znxt2}z+^-GUdPImnEj3OQ8L8W4+J7&j#(T}`1T;AD@UxOn+-`M0~P2ztxA{jZGuMJ zLLEMiQx*1d0uS~zGngGGX$h*TB+MMcopfYls09Z7`TT*?-M4gS5DF(T0Ssi$57L-Q z#OkaRi}boF?GYYzS5WzMMWJgpz)2m&_Ei7)3N9d^SBfA=P(3=QwRP1sZhv6n?k1?-7zd5HEFim%Jy|oSL0$@JW&4r1*-*RdRLoS34Rmwu}oOT+BMRLf{LMf2Q5E8J_hk);iIRKe442h%CJf=dZfjy^WN!$O426x`4dk^mh&x@oVmdm-S zcJSx~b$@y5N6h@A`sH`F%jMZ&)9OX&dUZ*^1$y-ilON>+~oT&6Xn zs{R=%0*Z`5(h_m|+4a>exG^Xce2C>Rg1H8k?2*X@gUqoSD;_wce#ii}OVfA}S~#v=v8b;eQ2O zLcQ9>sii)j%3&4UQKFdJMX^5Fi^U{&quCS7RN|5VtKT3>F#r8E1tBbENy|thmn`i6 z;W&pxc#y;`%BlC2B0D3y-(qJOZ|*m5_Bgnry!tADqcMzN+9@rRwj=*X?hlN$^B6zz z*Zq{R>fs^X5@t zAd)tkWXx`0a9zw&tQid~bVzUt)ay!R)-l(Zob30aI&dJ50UN2OHl4Wdi<*rrW+y{>5q^9m`2D(MA7xo2xsI{cnitER(CG6o?oYTYFU#AEx_z}IygN*4h z%GxdSTwTh)3j99Kv+)0T3s|B%Jh9uEK^HrvFMW;30JGV(npgd%6SY)a&TWK_+4%^f?$0e(=0rSZcb_63dZ^Nw%=LRr0W??z&_MQe&|$Chd7~l}V9NX4=`abugOa z!l=tteU0`XksMefKE5R%{@^VqaWte9rT|Vm>B{uP}2^aR;{8L z?+`|rSy@%zc*^$Y9O_oJ_qWM>9m0}U{~gd!aYi5Xj(uzLzEaj&@ zF6TKaUsLfym2@O*!lTpkCn;vtXWsHZb`YeluBv^?P_MuNDg9Z_I_F%n_YWM;h`?qudpYjjdi{A0P;vkFVrCO zsm9?V=W1u-+JkPS=HS3NeQg;$fCYhId+BN8S_bKtG_U5s>&~^?2&Q zQqm9&d;A-THY78};DjAvKbIaD35T6mPO*|PRriR9`8t92=f%a{HK^nC>_nuDRxg`! zOyTxIW`z+#z5eY()h>MX><)A&wGOZIop9!UQ`>L?@Sh%>a-X#9MdfZ^c670Q%SetD zw1aQbPoWi`gu|Znbf-c~)>zhBQ{I05&|`{S@O2SR2@7`isUHjo3B#@>cBI-q>IGh1 zPAAzp-xb$#%oP@S<^3`W*6Ab8iHyD3rVG9#7RY)!}3;CiVq>%-=wCH0RQOdD} zn66c=^OqnIMCSH)LoO7np;<$fGjA|5nUV;Jo(fy2bYZ4hc;&BIx5f|~mo__81cczji$poB#d7*F;BX-i z@K1XXe?glCR3jv9NBOI;B7i5lSONn4*wl*uV>XBYl#7Xe4>KXWb-d&lwz@5UCG-YM zs`UA2R-uyE7YBt+X4&w&5NB{7k=71na@w*w-*r`7vIfDW7e@HfV%zM+`>}vCy43fJ zC`j?S{Xc0QFW>4GYyN!C>iLS}@}G4$advAi{V}c?hU{6{8fJxW{4_{w?~ee=OpPRU z%kH?6DN`UDcDkNb?Qv=sSRi1C@`d2F3)!=QzY=l)#NwEmrE?Ma5T~Ug_K~k>E<6Nz z9(}A_$Vjh2<}Q90CZ;vOK$pO^2ZAmPd82OO;Suf*CD)#;`z!2c?Pv~)T_o8-0skj@ zWF@h*U+QGc6a?W3;g+d|0_}NIvd;`fmb?)ShM!(`SGoXr(7=EZ``?|mYZYUT`p!6c zDc7`Yc!`4uLIDwQWkGh(}WxO9r8l6~KgWl$AWzrPmgg;Vt;)OO=C zT_Xk&o(Gc;z!5ke;J+%|<-w{gQ0=?}g~QI=%{^~)xK97O8y-2^PnxdPd!NKojnM(( zDfLq^=a57Y9BRZmsH34;@FUj(41Om4f^wAp?9qYsqc?zUpAXoN1@l?STbZ`{H4Ks`#W?s zvTptb2i~88`X*|d34A|}KD+Oy*c1$pCzklN_Jt8AcbEUhN_bC6_b(6EEO+g#aZ)2u zW1fGtA*8yR^Y?;rGW0a+9pv90a1k|%-Cw!(Y72kSdP_R1kzAtdSz9n;3-Cu%ST}bi>9Q z1Cb|b4_bSUeB$OE^34{}(2K`)>$L#*<@AAy;8r{sd8@eqSWtJQi&x>Cdu=AwF$t6) zxF4Xy-2iqjdvjn4p*`LR9l=3`=P47m{ZWvwc5B#{v%i^cgbw=xchKEJs zZ;uaIT-MQOf|kx<$`QUJ0V6HxcRV)us^2Xnm}|d|CI*^magx-T`c$oD|Y99j9JG_(L^(UjgMjbi<{T^rsg<^c+Ik`iB36f;cKWt%I zr{gY(4t>~P0a#7vVG;_481+g~@4SP9gD@6I%((ou*Qi6)S;*%vdBY6KqmJTWEAgS? zKkjx%$wf&SUl&=&$&dQc_w&o?XeD5N@mTYmNO*SxCcy>&A4%r{PIdqOaoe$v5r>Fl z6WN9AO?LL)A$x`Fju9s-gzQ4dE`^NjB9tVltU`~yGBW=6`Td{kdamcXdg?fx^Z9%~ z_vgOf@7Mcp^DXKP#joaTps(P}823-vq_3wRxOk^SG`B;%a$BU81Cz&SvZOSn{%lEB zCN(G|%u>WW`f=dP!d-70vDx)r71|f^v0=N7qui9F$|V;C88IQR)QO(5w5`f!HC+}7 zC(OhY%eVKBSZR-_35AzdYV8!mw0SPjDPr>sC22Fj`4{2C{G?C1I`1tO3*$esM~|k$f;p z0_`FWFUac~v&hTux`CD-Z;OcomsFv+3tmGh?MKLrH>AFv1C>l+H*ZYo_7rqQXAk}# zND1M4-5{BYhsZwoVdJGQZLZu?M`DG)PQtPV;+BFEZkP?`=YgSEnjQY=FQGfsUKrrXI*GEcJJiW%+X| z6MRX3J!9GK8&(X1NYJ9FK-^5A$ME-XI-wln#vAVp23ld9HISLehscL06@(@t5&q>t zkR{zuA{!jQ8$_sH_wN~7HXjawaBg?R#X$Kx4({+R!QeOoXtqB6Qa0*5W0UC6xY2gqlL=~ zV**_}!nX2}HDL$->!$r6(n-}2jc16qM{A^PQ&s3jQjMPp_|uZ*~LP4 zEEI~PA?p_sF`57YqL*SsJ9QZXX=u^>1(%yR)b#n#-3Qk@hL(1&5v-ljyqY@j1~&uB+ux+kEF)eTV&d06<6Gp>+NUBvF6^!TmBPK`F8lV z@jw*5Y>d#7?W2@xPaA4Hm((%)A@63NTU*Vfj`jisfgnh9R8%yDk~y1h7PP$Z{~(B^&E z(a`~Cux&?paA4r>uV24F4SBQbGYCde&af?If>t17q#cC2kA$twgct#80B0K?{w;^FU&-fUi%_87Gi`=|xFL%ivVl^F6_Q#(d{RBe~&Sbf=zK$~roiBr& zzG(RrSIlT?CRTWWunDYnXsK-kkwclDi?Krdf<%h0*@Q+N@U189?aI# z%z=o}A(tZ1`Ga#J;fC9|ato>~DN&Q>W;Gu^d?;}sIx&7m!GW=>s{4X^;NN<1x*{V% zcXhKLi;fe}Na_(e+o{ijT%fS^`m`oxr6=l{7f{a0$iy;HCfbBv3Qrmh-l<(e>A7@> zl;g#4sC~8Bp}50I_l3`WG&zrxp+G;tk%&l)9RC_`<;5Zf$8gyl&Lr9)QKQ}u>j4)# zH%WyYun<6qa{+%oKPf)nO*ucfQM9Z)w8sP=jA1FG!9yn%mIx@kYrouvCp(H0CE?Oe zT}DZ(i%ckXNOee1(I8HxVU9fPiav%vTU<2rSEzRd%rGy?s^sSXt5CjYI4PCE#5%Tb z3!oMR-D}UIPT%~BqNL$CNeQV!EYHWwo>YN)p(_E-I{fUvF>uso5$kw-c;@z0w@hGi zYHDKoSe=8LpNYpYyHnkslIoDVLlghK1=o9;ba*epEAr9K#dtMkVZzpj4BL z$Q6svFQ9dp+k#lC7((`&(F%xO^pjk4GRj%#+nXix4@(CCzeZyt-jyB5YVtL_oorV<7BnhxZqy|lneSY1bP<0z4#6(a(GeLMiX!rYg5et2!T?Kg1Bn5I1kPX> zQ>*B|K(vw~cYd-f0&&)`K9C9XfE|b4PJP$eG1z*<2f&1ORZRrFH#`4r5LSJH zJTVcA1~39EJ{rau_wGe~gxVdTKO-nW2g;3shZ43p{L}eI&zA*-f_5zo7;oeV0e7WF zXc(Mtpap<2T2RmnT#OxFPk4C?DXmJ~DlZ)wv`4~zWxz!26c$1>unEn(j{oOF!UYz0 zK>-WAZZIdgf;xwFF!Ik0ds+X5zUV`m^Z8->Gx3rz*srXtxcdcewdcHg6EF4`=Q73> zN(*5>0qS5g1>v0_yshxS6Dyp{X_^?AblW5`LwxsxC~^`>~< z2_$Y`Q#aZGugfNEa+nfY(;&&m1F*6k$z_L~iV_lmu=5lT=kD2`!W#zrok}r%+n~cO zf=qRzyyiv;$pPOFCAkiLh=C+@0wU?^M|(bvWTl)wj@K$M1{J$!ktzNjP0cleEU&Z= z>rDK1Lhr5cgX8!}j#i-0B1TkQNG(YWL%WEiM=pq-%Iw6ew{rfa6;oy4T;ftgaUtT9 z#QN|w-+yqO#G;ApRr|EKgx`3P^CywT@dt`K3n5ff7wOwriDE5ZN$S-+*5G{z$wAmg z(%G}W)~~!Ag|fJ-4Eg1D9{B3(8x+dQB+F##SBP?<&_zs$9=kb-_tL4V*pD2Nx;N7X z6G+k?rCgY$LTMB&rf}{P+Rv%k&AAT=4N@~_Lu_+)ct@Q_KKD?123&L;^nouoLID{v z0g;0Tr#Pb@b2vQ#xLvzr;mNixJ}zlDo^4)iw7ZG^$sWbN3D1?@uet zog0QqSACUyxF7;2G5uX2>)3WgxmDXz{yxrQiJLYGChy=}wu7Vw4CKUPf9dWMg$K`G z9H)&>l_&u*2IzOPpqxi+?3VFE;=3a34F?%0&bhVQ>IN6Lp+EQWBYws)oLiL@6)0z* zPI92RhQ*ca)Qzy%HTX5q=)hLZ%>`;*i2=L~M-XQ3%7j1#o1*d$U}D@+Vnaeybrax={QuA#Zm_sVH#;}D#e)M zkstEkX92y5&eL_@M>^#>IXU3%bc5CyE+ZJEMzNRE#8Ug6ik1bERRr|7=@J~lYPB5D zDoS~?iouTnFf+|?=hEf9S!E(L{N6=;oCZ@xk#2;`K7gN+^~tIhUcU-PC+SRaT4IQ} zp)7)^PeUXZ7sto*|Hf>MY}7Z(7I$A%XcIvb}8slkBhZO{h2;Pz^!C zF!J4+14Gs$r-E>d<4+R}LWpsO)>(&=?NhQWKEisomJLW6Ww|4d>qNBTxV8NCUU_TY z{G3;n=OV6*I4Jau{I^|v^4wSe2x(#uiKl}`a#<*hR;;c(G089)ZbWcp3OXiJ4Rc_V zlKE*f;`i9kmKC`_k@aXb+IV?*l35^);}D!!%;#mKrnE|=m9Y83_G`yH(;C6y0P(y% zufeOrMp++4gq2kv=hIruNj*uG>9hFy@yqo0?*&*szjli_3#5yzq)j+n6`e*gAU4#M?_l2L#zwCsDdr+Ix&3t*fA;H1r6COp& zj+-&#|LZNoh=x+K3(5`{i&j^+!DSvUp+F^b1JD%=b8rDY##N9hVQXvKYU2|U0WdKfRW^RQ`6T}9{7J^G2(mlb81pOo!$QCXC0MlX7GT2E$2Xec<<7%F6 zk!)}^^z04}cICQYVub7cc67)i;y^%y8HXt12Vx3gJHP==m+7q~%+nd7{CJ_d4d{Td zSJ}f?O7C>;7S^qX7r|gZ0!-fD!k++X{gRMsssBRBxS|uU@^1UXmy_GTmoC z-)4shu`7>O;l?+lsQ~!{xO|Q;U%r4Meiz)1V4ghjJzwvNwRf$Bm^<{KKj*7*HBJzT zuHwSK4*?c*e7YIUK2!rY_{Sfr!H2-RrcXPG=A5{y;cO#zuR#7m%8oKd>@lI7MVpuYo_xi{A+NH*1FEkfP0jAZV_OH?piqrCVT-G9Vqa#0*_ z)MJpnS)5l%TU=3ySOupmPM1^=Mx>2Mu_%2blBkDbeKFrIa4>Mvjr>^BPzgQ4>Q)Q5 z;8Wxdk*Uq0-|kk4Am|)l3rw3-h(yz_-O|fD~YQFE`)(=lSL_r38y1V-p7@$}N+_pMdGObUEzi zO$pFhnG+5AKVzp;3AN+KjHh=db22DY~3<`!*6Ch@oASG zmMBwrnhs^{pDmvh8LO$a5qK4_j#Xe5{5BMImd+lZpPrnTRtH^{YQa4ke0juwyjh=|8c}J3Zv$yIutLMIUF#^WFx9R0@PYO8S6JQWCAvZX z<_PD&Ke!1WC>Q ztfU4m5MB)y_A>xdtcTfYY7X}G^}$T|Y(eB~0T(^i%8el4xB)OPD=Vw&Nl)3r5LQ0& z9pH&R(K5<<)v@jkn0p-c*3aA^*EXW`rJt+&9SPmt-_v+E)o9fjn(fbK%X7{a%#9w9=yUrap44OJy_&SmouN7g zcl(Z?8+MziA-#l&h}Ka}l-TeKvtAF03xh2I$@ATRJ;`MSBnO%4#+dZ#>L?_}5y#D_ zscR!Q7Sg44er_Sesq>+GTvC|wG*BrC-Jd+T7{>vr;zKM_h&Zqh#bD`FN*W272%k4_ zAoL4mi5q%#%IQ-29co|;0Gdb?3m9c+Z~|yDnNur`pc=H0tcp=`**fo<3Wk3R4Fi<` zpnhH+9;X*j+-jsQ>;*33@sBxKtvm zJ(3qgSr;Uw2K>JUM~(#|-Nd94kp8w8(N8bSW+TTQT757yH8pw>(3*?oiJXn!qe1sr zpc1eo_)B7Z$#RZ4uKr0cUbVE>+4D0zZ<{}g+&=q6{~#-6I?ggw6H`YgD6nu*8pTN` z@N4|S)-R`&o(DUte*N=ei*kTV#VeI1hL&pia}o2B+!#gq7M4^;Kz43(}RN zBkwW!j(q`3Ls!cyqd7R6)WLH$6{XqfmckEiu9nojeqLTe0g0rSB=$UUL_fBx8Ar&Q zAO>2+>surh*qRhMx-w4-le1W9mfE zM48@7kGqBSDkst}8-wKMg%Cwa3x|{2Ovs*J>@c;Po@kjuAZG@&Cr90y`<=uxv_uD> z2Yx^#!)}=)JY1G_RZ0q8bE|w@@&S_InaPSOfmpWKm!CiDs{cDYl(r$U!3zqHob?St zTx9FHT(2svNP3T4tQ?;+mljLrNK{OX;8(@(&nl4mdX(KYy6K^|eR=3XK+?VF_)9|t zqZBHv3!^t$c*Wb}RDk~mUAqjen1sK~%7V_=tqgObo+QpSr!`JiP7G=RnT_IQAWf3S z)^MpA=Bk;*F^&CG8#m&nq}9q~-lio-x^3+ayy>tZF<3HL=vIhb4(kcr?IlaEp^C%X zQ{mBm#ta(Aw}fO)m!ua*yZh8fWc?-yB7;}5l%(+)!lkq4xIu|eZN!pPmV~S_t4VNl zc#m=}Vk-EEmgB2@WZWk=Mt|XdJ-_oGE$exCf8M@z)}&^WiSmM?f%xg%ldo&6Wb>BS zF}n|#m!bnLr{1fo3|0)Puy%_7={Q-J{2H;HE0Zg~;8c*0txRQCq{bJOn---!qIgn{ ze@wlk!_Y_gh2jfpWmz_r&`?r|#!N69Vh=zy18T#63fvFJt*|C(EdBrN6W{Z%`D9#= zkh@fzpC3E$$oug--ERl-7(?DXW3@ku(SHL|e|LviUU~HJ-BVY~ddAJSfp7^m5mdeb z4=%ll7sge4@0o6i=h^?h_tdybqVvdffLTX|!y(YD>xug?;WDA0)SNUmox{o%jhPPb znG#>--*QYXSYl;AR!!4MmC|%wUVCq6f?&h+SlCbN)!1$oqITXhcCL!{eARN&G|^2VOsxcMJ%lux4_;#IP{U4N#0gX)$Y}@ z)28mR_FYM%F@(AOG=NBS4M@w zY~k+g!B5LOFZN? zMh&3;b@BzsK0|P-#f{VRq@u6v$(U-V6%-7;{LLS*n($bQTgSDlT)Pn}); zZ5_ESRQbs6nv1xt#QS8Ep9}qf*cZgg zm!YLpPN`F{RnLJ(EzQzBi~ctGW|PO2 z7*_$hqTL6|KF)OWgvym*mA>wNHS)`!pCHh&i?ph8^A=jPDy+QxPf=V``#j2je<;nV zjcwDaaEg@51dbtENCVOW@f1>*Bd?7!$bY&@jHVNfr-=ldQW6)&IoD|b$yLfEt`V%B zR@K;>NK;e&-f>5efhN}Yy~PkpmB>fHmC_%hn)I#Z2zX=}gTL}>4FDq9Y{=iYPh|4R z;9}!RoNKpCxFYRrr-cw8V)=E_Bt1CO=faq&3N{1JgS*m}W#TwFFz=&qBQTWIhQz9WD^&Fz72>!cZ z=%4U`-0X7tn$od;&ToUr|87?57lK*3Q%XUhj-MP++4~=%q4kT8%70kN7aB~^he2}Y zMp?MK9dvN|K(r@6RJrkbF%?(NLX#=luzrdbu)FU0P?QO{s&RnN#Bem`2yb?a>2@qW z6NS~a`)WP@tVykU6PPuBU<9a@_32yv=4t@$ba1`+>ckkYX7K2&McIfwAIR`nF%Vgt{F&X%NR0U5By@@E} z%lM(31i@9#d?7H@k>hJ?&xMBn1cgI*e4cK81=)T6Ux`RPuv`g&(2PUQl%d?J_I(rO z5H)flVHV&Q91<}*aCN+trrJV-$2!vzR+QMuJhmINtBH8|;)MeiP{e?3iP>tZ*{A<& z6(14p`t+L2kMD!^w4o7g7w^-?JJl2aB|D7x=o&&D1qP6v?sAHR{PJR(d~Ed_#j#L_@b|*r_{`g zP)y}O#kZNj^D~;WxmrMwt$h8O1_SOh^%RAFTfNao=FunavNJR{w-8Tp zx24j)rykxY+(s#ol0S{mxIzp=DFsG>>nJFf34v*!$?z8gV-Cfc^AvuwC|g z*ZDnm%1bgkiR?#+#BDBUh%X7hau+*=Aug^Z+CF>gqc;J^FEIIVcv4*J6~s>TMDsY? z4GwDnY4KU3;dP|hg%aO2uUM(TRZZ?vTEA11(5n|OC~0U^&ygX^qLeT##7icLr1@G^ zs&wIHd$t1mbUxIt`LIlFPh5%TPo62m-vk=$v4oHP(1hql1ax zt$QBd)G_Gj@imRT8(Wh~zYwd~TN2(G7>JwHe;D_2?-TyQ>ruZ-7j^@GL zsAYMLerZ|1z5ZKv5fk#h;eV@couB!hpZ%Tjg>Fa(usLB8L^~A>Ci>~AsX_nme2Ray zLBgRg7q;V~n-Z90G7Qzs@9Ss%fGCM;z)Uf0ZD>PAe~H)PHKxCyWi6$ zWgZ+HTz6g(dY0`Q!!-fhwtlB@g{;klbDZuU zQcc;4_|^C!>G%6Kr~zya=zhp+G0@-7%V=I=YA@HpdR zCU@Vsh(nD1LVpT$v#KYn7p09ZlO$;`C%lj%X$!5+G~72bwaj)A*)kKdzC`pEVi|ix zvs~_rGK5CGV0)8~D5zVN8>^h~P&!wsqSJQ@Qn!#Eow6kH6GE=XJR{j}JQt;z`~ z>vY~UT7dFzcRg!Ijs|7qAS0Lzod}o%*;B0`h~$hIVmYp8(=~92=TRob$Jt$GNPGD1 z*KPcGyHvs;wXt;8U((bo@iDoD_4z-v5EmC;mC8emnp`4sw>PFNo&JSRE#SG+sHxvK zMeJ>LFMwMe#=e_T=XbX*!$}pXT)8L>!>b!i!qjmkhWsO=qX9`{Pn%1Z+1XhvTZ4X& z?0Mb2@o&fV@&nKHtx~QZg%rGe6}4^X`|lx#VMFJ;l#EP-{WrYC4Bn zK}lt1hup?qhuIXPS?wF1UwXDQBma$88Fd)5ElBrmbE>=mJ>YhatJ#kn*Q36wjO}+H z)l>cze{XwP`|_UH8`oVu#nWvA*1?aG>wxVGwq??qf|8A>`&P^g$}pxFQT!+}I?D!2 ze6h}&n%j`gCrUXX37;j{x+wP`Sv3j*y+kaVT*AY{0X*#O?G5zx3Nkho+bLVH%$XxG zOG|EJyLgE3{Yi5^y8FP9FSV9VF>1O z{B}0l3mNEA%EnN+qIWJzryI~*fp=iv-~d#CL~1rCEX)r&9%$F-Y5GyG#W~&Jz1{d;BDp zz4-UrJ=LKW@AQ;6;(bX^Bt__+6V`MI_fH^Or;MMVX^-IR zJ=jA{LQoX~^mD$a#&oD8h)KJFApJsUkOT32*iUc_a)`v=ic}xHb!d~ZZV{v)Y|-GL zaGN;fF$ray4j@s=wKO0PA`x&u%ul?@^O_FsD^((jUIcq(}{z6ZorK zPWpXr<#nyR^pFERF15T7SG%NE669uvlaQerdrI-uXHFqHz@@1kIPjUks9Byl3)s2Sl;AiX&T$ ztDajnSJc!{JZ1LjJaU8SdrcVRo`M1s_BEl?Z+J;Ry4WJ_7drv1Hb|mYn^93rNfML#UnpCroE< zbeVi~%8x*Fmw9DM>mgK^u6Mfq`1a@kxCZDGP4*)iE4iy7o@FLgk(>V% z51%L=r6u#9)}No!6rW5e4olwZIw;%>+24zV3a_)$cYeHa{=qdHd;T24JP_kDchI*L<N zie^nL@ljAjzd>fhg}5G~w;+SWUGnW?VE6~L!e4y}t}B55cK^r;aq)o60p2cXp6WX~ z*wmz9TfjQ62ZSg<4?JJ8;8Sw)j3oT(^>t&F^^?xfIxHRB?c27|rc(gH(%qe3?{Hm& z{POg)H<4HOV;UWQ=JDKyvoZQ$= zXy!+)+y(Hi8YjLWFQOFW8X&O1zn|!83DZI_yiR+8Hr~)Vj_dE_H^B7ZC9(M}5Tuf- zal=^eqg}08Y(2Kl(7x&!9W8#OKsj!7F&&#nC69ULFl)%{{S0d-aFF+=?4L5TMkY7I zZP#mlj{}9P>r7XJN6@{Z(i$AM@N8!-ga%NA&3W4&8_)VF{$HwDZtQ^goaJ$aF{MG^ z0y#0ij6kxuloW)*T#7oJXS*H}aWriIMe>6vrG`MF_LUj0uQ{9l01ch4W^2x@(e#W+ zc}}L&sFrV0V7MuCB&7^>%+%wbtk0?AVQ$XEDxbk>4n_$?0WwwGWy*7DuAAWr=fLOv z+u?M~IhtCjjh(J3KV`1+k_S{i}5cje!cH}3;piH%*(N`NUg?G;cjZLVAcecRQmpecoO5GFZQ zH!FccEg>uGiPG@(-Gpr1I{32T?}a0uXY2GIoPtdmH|6BPJO_Fyco4e#wRj(z!=)J{ zG%5WHz+?{tQ#pKHfLMaDkA5ZGY_}g=yhc#n442|x?;e5>7Fu{vVp-J^DEx*TFvxmZ zfu;^T%F6%#{R>K|lfywpyUvK#GJZIet=dD@K`+!{H~atg+$nf_SFb`to>;CMeyF*Qm(E#bB>GsqWQ&Sk@0(w>5$Od@z?;i5GT7p`F z`&WnJ@y9g0k?4fA`PIv3K#vdocg+>ccxZYMfs-K@At(#8>#8gXrPCPLmp=>A5m~A6=ig&TFN;sYF_{Jy9g<+D^JHS zMjU|TZ^EGxcn72(zKgLkF1Hz#l)?`(%a%&|kRxIbXrkzo>03DLwc=x4US;lqrsuHi zyDk`k2p=Bd4poKFAJvA<@ac~vn#hGqDc>l^6`atxh?nt9JmzYIAsJ6DeCAG#&-lrm zb&=}YnIN?2yy)|K9+DYoN+v^#>a%p3s@=eRl%{BE)|3J2Fp#|52?^=Rh+gQs zkJE0l9MJ6D?f!?~z0hbu=^Ozte|)BXQ7oW{oUz4`e=R2@=kv-g8<~)NaE|J!AbWU{ z9UJUi?16=N1I+^!2#AXRBqVabx?)>y%sxORgO~AxfEE`E0`x8AxoQg`s~joF zd?=LH@#wJY+W%rLkvB3d()E1xxVsy#!A;GGNcb?IRZd1GPm3F-fmoz$_@28$aUwa> zK&ZPrq>;cEQ&dz0U&5cZD~KMr0m`Ia2XXjeTD@(1&Z2bDa$qam?f@VMTYT<9fqrGM z?dHaYkB3L2_r>tXE#80$RO2j1lm@i2ru55#zkO!Lpg{WLr%wdzyU>~Dig8s+jsQYb zL}aN2n8+X%9)LL1y8SmEHtR(<)}$`m%#7+%jODA^MHuC^QoKcojfh53*{Wb;y`=Aa z@T;qZtq&0(B0hJcLPITX2E{JRXxPp!tItOqiPQS|MlFzL)g6W4b@fp%i)$mqG;L<+ z)jx);aUfhQ(Mb~wg<{|eD?R9R+qa6be)QgTjD}w|tMp6D-}UPuXIq+Sjy+^$48~^H zMoa`sI&b$TbQBg`uBVuJyVe3q8!v-1^76Wd+0X{|%TUjwN+KD~Tz?hn*v0ophSEw80 zQO*~0lhhmj{msQPLC_dPEvBB5lo|XTO`k)>WH8&ItS-+ZW=WMND~qGrY_6!{UrHK= zr^WxYSiNJww>V`nPL=R`_rO1j>=I94xsdL1V1;A7j4k2yjwgnmC*L&s$P*!^ac3SLdIy6^2+ZFX^uOm6*{cJw%kfj;&FD)L|e$=%3?gq;^3M zve0P=|BKHoY2wiBe^|6U`F;`_L z?UyWla~++LG#e6mpsdDSAq#g9NXP^7OTQ1 z$6fT0L}S~!6FxfS!SYx9-mJDUQJ{$S50B`cWEmGd?CmaRAXVT5o?#BV+Z}|60;R)Y6f-)97Su>X=NzOwZX|bdk~vM zT}z__0?iairrF13HE8(dg4B`VH;sjE9EVn>q^vACqMn{l|G7=;4j|QYTyg9@{{mfJ z!aqK|525D|59%bk7;$076et;93PJAs=p(+o^9DQny|dPS=cSOI**;?91Q`s!%5K+L zW*9Y_EEZf?Mgu5UEJzz8%Z>l^Gud-v_)v-XyEf(-FJp+8C%Hj6vqCg_%^a&`w=2W4 zJT4t-ORv(i6sRnw&cLNh2E?=;M1PiJkLd3(8>#=~=3R{j=%D)iD8r`_r=^<`R&-~j z8&{{Obe62PEw;5T6nRNzf&XBRdBbrx$`3!k1b-mp9$PQop%p>bpC)1p&|M_ z%G4BYu2QnHvJmDKdKLOI6O$zeHWu;sX=E^lS{7PJo-EEj(YKVeYNEXub!|@9Tw^u8 z=Aw63Wm0ce=cuXMwFJZ))jmiqFkzsI*P?S_EW;zlAk~oS^Q{NG(pwxu34Ecgs?o}2 z5WqHc0BZ+sdgs3k&Ys#_@%{GVzA-c}I#$8#)s0ewgaOnd&Yc7CaUe8>l?n*glC4(g zgFqqr2F8(+lut|q*<=E^9}P!>eDnyH`2hkdTpUM0KmhRMATt&OOR!jRla;W6uRz6t zkpwK~b2u^XA$RT@L^y$lJarL*n7pn6n{?-JF%3uCfaWEn2Y|A63ziTS%T<^Irlu+Y zdaAInP;N|dXNU_^2Z6I>Eyb1-5ulRY8~f6xU~wk_sl~ z*82EGEP6xP2BBn$pnuz=pu@5}u^^%xaKbt@wX1ZQPFKXSwlMaMEZ5I`gRO4VzbJlf zV=aO5q{Uz3H11$EA&X?sAJCs875c>;yF)+~S;R^G!F80jnDMzD=Zd+BN@_%bee2z> zZ&B1{H^$8q8}2Q>hDimU$4m?U72@Qhi~u3o$4N=vGkAmv7L0qMW$XOLk1-32zoo|P z|DCGcnl2MV6*^+1`{FAMwhKh$0wXc$o6;zBwpOVO-!EP+d@%;p6_t|hxG>IX*L$j{ zqb$y+PLl%H3Fr)CM0;W{&dCHy>Cm3GZpx_?t;R`Q)Ibpr(L`X=lR}HOi~bNRBX2sp z{cyr+=kq6@9H~r~Hb^O!+&9C2<{7&Ty^eP-nZ{Yg0@=wIQZWp~l>SXZ*BR+spWoij zf1aJ(+gjo3_Iv!ZNg>mVQEJPZ`VT&I_VxIuK1mW&anaG{orxHS)Gs;R^b7L?hr^pOJ^ieo|7I0 zmmL(MZ{9(*cJ(pw7B$|dtyr6&{Ap(m$A`y@E3^c8asxhFCc_H}`96;PMILESP3jlVKjc!2Rn7_URm89k`^QS#4!oAh|ow%C^ZIKg4Neh)nf-{1?}oZICP&$jxp-w% zL7Ve)()L{co+*;mZYDhzrFN z`>tm>rcx9tEnjdW-4Y{GGaN#y4AH3f$y}gEXQc;KI=$CIP(E@nDHOh;rG#ba&+pM5 zDo5PxL-w1XjUB@9DMa1G8EcbcQS+i2Z@=Fr5Se54_hfupg?3JFYAX^($I9Y6F*pyz zjtKQCub>$bx%8rqHN0=E-H#AAw}j?VjXJ>?EnUONUge|#o)1;I2wG+e={|)2&=WM3 zbn-|w+D{HOrnGk{e&d9=>SAH}W@+_*AVGAWwa$^ce!U%@E-IxZ)zywD$fJXRSCCa+ zNSFs#l#3`2Y=1NXgBQRNdII(s7ZmpMaNyd2QzI^5jK26#?bfYj zRT_B{07JF4Aypb~KqAsv<@sLm*>U}O`0AHh=%eBmJ9uklASCQ-UV6z($W&NbqM3& z+WP;b`e-*dUWg#&+}p2@J_T0#`R}fiN07qN1@@@pl_xkXg4uHmBf)GX;tlfW*#%c_ zsXV`0tQZ*Lv>7}@}71kf-7fP5%f90YRFp)T;JyJS z2$6ED%|I^2oAH-6I)u6wT7(*8y{tVJbYT>cz+j8Xh}H^1$zELy6i z#n8_&$2!O?d$pigAhdI_t!1+v07|I)tEmNXP`Q)Yq@5ucm-wMH<>pdS1wX zh)ECc81?@Sw1%y%2JacDsE8ROOASHg3vc9S^DP>cp!eu1J+;Be^$4AeQFX>xsDN6UfsbMR++eadw*bZ3oUxYU1}mYU9k(LBgzw5 zw|be}lmX%^MfOn6Y8>^$t%RN-9G-XrcrO0S*13cNwvuBt%r+&C^CRZ%>WIelfTUdk z3KZ4$_gl0?%5>_nei|V*{}yHJ%- zjWfn~zWm7qAvN(T_|My%8!aHRHt?}kZH|7WG8Mbmm!%qI$=C8sq3_F(j#yDDvGOEi zU4aD63!EA#PBbTx5r)5?0sS6HARIM*!J;GlrO@#8I~#9ecEb9;#PllU+abqnI|=#2 zI9N$_$R<65!K46v=YJ4VsVY4WgJro(q-|PqmlT8lV_3U`lqD=@+$w0eL7>QY+{H0Q z)p!FukjGP9QFGn+%1D5VcKd(FZ6I7e+_j&fTywtojr3`QJlf%l7iYiD%=}w-^vx`cvqqoyPP% zM?3>Z>+!?onhb0sTST$;MC6-Bj+>NggC`v<4){&n(mC{W32zHlg$>SMP-i%Zwe zaWzU7y&yUeSK`2Gyp|}WmK#98`MTm+-17D2@_ptziNk7IQH45D?C|zf}qH4sj^+vmL0tm0Uh&d{XYUj#}hf!GY=-wd`ER|alDUppf8f6ppOQ?Fruk%8}9xslP zpqjrJpKE0$H|8>i0z_jBbQ+QwngmS7|8XVr)1#Jbi)AZD{Y_|pz25jZE~%H{$I2TO z>dHu7N-Et|MR5%oLSs0X+jY9b#OR{!JVUsGw}89%GHBE2PPe! zoXSYN!&^Z?pM!ruVrmyb?g!uqLBi3$N8q@G$uBs*Zu|JunF!)M(@>Tf)lY%#6Ss8R zen5YA^YrH?;93=-%m#EsoSzGXO5lR__{(vD4S#VNp>?Y&4j>B$@c_UOZDV`nTk~nd)!c6W{oZ12!l64L*2i)o9dZQP1 z=-xc|Po$eR&hv6#Mn;REZi2+q?za+db*U*&yEXA!(z`=BNzi3kPK*oV2ZeafRE{bQ z1|A$Kbc1A_n}i&sem*g`2oXNqvcz{#EeA)_bFKX(C4JYs%GTPh6cB7R;5iWqrv{o_ z=J-qO!Lx!tI@sNPQDt-Clh@4?#t;Ph4dGYf&(&Ppl@uweOCreb7WGCiqJmNe+MZoj zm0Z!>U1^6bD<3_h#cF;lvmZfjGWK+#mc~^WT1|{-!ELpnrleon`sQHl6!{-<;^{3dFGQc+4CZFpcMI4U)fGIP9^Rdqvr5>ZAf zol~(yW-QVo?C+5XxnKbwzzI&NQf5RVgBO?IG|~@5G#4rM?8=x32?@|Z-sQ|dd<|2= zF!~WWqKc&b3G9IMRN;|dpkVu)k}fsnDrV}Q;_;Y$RD9zf^T}hZ9`&AZqZt~ zjn5XcdVHCP-d3IwzmSRE59B-MxUWXALvSdpH!(Wp%c{?w`^w0Fp3>$0*mYZ!OzdSR zLBpbW1r=1_5KYEr8|QEC*!t;Iwzi_7nb<<4RFQ3?X^+I{Z+Bz$eh&Aa-L2XJ9ey+S zVa}==Kt>N@fpMnTO9;aUrNtDfpHGJH>VWq#`TJ`8f0p(*6 zCgmjtS3hp9xBAWHP%H~-XD)}~C?>$tTEwxSYwXWF#q$a%7VR7d$lE6`d-FL+N=fBa z$jHbr7xo#pwnilKCj-vvCyR+LNC+x`N$ZFLWTy%OaTfQ*PoWq(nhADt{I4OG7%sZE z{rn*5@MrjHEiR86zM9*&SNrsC%odYU4M4%;E>LP|>c zIpvAQ+$z98|7$DKDF+=gT5aM5IDJ4e3EFaK_Ae$Pk6{XO)pa;!vorrMLk`S;t77V9In zBTsXP8b2VUC1gTj$F5vBEY4NhBSes6gTedmmNPNciMa2YZBv_GOt>6YN~gbskQ4x= zbU?J@Vp*|{?81tI9?=I)AIoaXrWoaPd<+LA$6|AC%X9DRj<1$8j?EfA!+j3pH4#VS zpA>y5UG~WLVbnphhlqdVsV*8naG`3j{~3r4VKVnF!ZM|X6*oCJUJ6uk0c4BL4R@6aA~yoP}IqC-w;she63 zVXD#d7mj$i*8Oebo{pUbP+S6`em;Ho5yZTJh$qkRVnY3WP^X415mj%61BL=xar+j+ z5^H<@C>tsbszL|81V?2~E_U`xGZE-oAr3vyP@NdWDwK=Ojj*o>Z-4ocUEeyQ1$6&Q z+jrdE!4X|MAyjf4*4feV2k21RNgR)Ja-xg~Py(n+*Ub<0Jo85{3yz6&`dVs`zn#|V zW*PDcPf96b@GTOO$N?~<L}$X3eX%Zr zB=Va{9KCETQvWX6AR#P;+c&RoBri#rZ}i`78K8D*6-yQJ@T*2V;$_iKoBUCgLoLl*G9aZ#7&gy!s` z^l%88jK&m6>|vL(@lyGHILYzqlg{K+A<9>1XB-N%M6lO8!EpmjO?Xy)5iC-`VyT2X zyV6DdKssT&sDZ3qc!@QNM_S(_J|00xc8S2)yHKBq|HkmgZaQjIlW{!G?|r?fngLPb zxdq~D^tmL)KS_AGPOo*?g0(Kw<(5a(FY11qJwjt&_*^CejQHt{FX01;#t*<~m5g}Z zkdmqXlCxMYYX28xL`h42)gMdmJ3c|(Xu^{UikUEuoFy+ns z;?%zWt9mOTA=t~N+it3rXoTQ(7+M{1>mC6$(eqo~@!2FM1d<}|qpak<#ED3g*OCGW zX=08_Kd8S*4Ju14h4c=%O!;%T@3*U|C_T{&Ha|(&cIc`vL>Y*9hr}n{2^MD_9*nxZXq+{T8bo4?!W1$vFcU@h z;1X6g3uP+A023mPApnWMzNOKM+UX+*WKY5ytzhWbJ#YaRVTQo!%mkP)5J(W4bJ@&5 zKp(6<;ZKQa$oE%*!X>aE1I`YEW{ZbC9w-xiA@^6Q;|JGnU$e25mKJFl)gHTP52dvH97+2>4{El3Gc2Vsjz4A#)JVMAGFb;6IDtl4mW z))CO!gRUZ;4OZZ@wu!~h-Pl;N)P0dHjk;@B$ zKo9GT5)76_Is%FTa%HR-c%C&jPNS)AMQa~@S??Tw7-?%XZJo`TirF}w`$sau3TDjF zl4DgFBo8)a_azS1TZDd=?u+xz_R0RPHO;3%PZFuk|KlFV_X-Vu6QA4&)F?~Lw{-7~ zhJ{Fp5nohrHv)&4sTb8XaV|0%YBDLNTwgIi1yHugv>uViZ~M&>JG)Sv0CbWo`T;%X?P;%$;QbU z4ppg)<%;Auy@Pnk7u0fhiuCE50wshXOnHd+UTn3+I)Gu!w>7LYe7Nu?eTD+~1aA{5 z>-4KeU*Hq2-w(e#8noyW>!=$$nOF=LoHXF)z zqc7xgfL4!SifNQEU%Gt)YGcTriB6B!iG?q=$2P;^*((TDvi&!Bh%EZ_GN><;n*0?B z$KJ#z!VSJ9{c1cloBd--$j`>?Qpf7d*iffKqh+mNh zgSB@Eq6IE=J$^b64Huz_S;fS}iiN~)H2nt~%79W39c~O~ zI^Li%m~yPk{$F}TZOzzvu>ELQa_N&$)AE?<(8-?`_ZMT$ip$JKo#a$h|NduE5J+fO zXp!FVx3k*(cGi>XJ4&`CrV0UH&5VqaJt0R2#%f@}{t8BhrNLH@4^n9PedS$9U{C&g z%WO08_27m_u>pK@p_a5wF)Rb304k;kwhjg*rjWdK5TcvrF(2NDBfxuJ@|=Tosb3Hv zB0ZS%o^%We#Q5ULUv4_mMWRa~ zG){z*B9Y@LUKtIJRC2z^5#=XRvFJ6zWUBxodZ{eJ5I^4M6DPeaj+{&`j_4scN!>CD zH+jENb5n!VStO${f{^-B_B3rKMR8bROkdCEHt`5O22BF>c%&a?A)|Z^k7u;IQo5PF zpSR7Wv|NI(O4#9g(LzCD3_>mA`F-ShK|~x;3Ma+Ol%ZY%0%diS0SQOBP{P~0&_lO3 zA}L9m3H4GQzWR5C9G4n(<(;0wMdx$}wh6TRKTrvG;Op*$t+2lhi|}6cH^3nK_QHg5 z%$py3pbLcS5E9fMXgEUt1H8#_T$Fv5HOkEtYql(F?J?J{U%!3(qJ2(mTpS>k7%xyB z9QF}ojLj`)%qvZM0)`InCE{cRE*<)df8E?Nl1b*ctmsPsfJm)`cZ5FxMcu1?lnd%T{GpFdJjy$S+AtN3Xq0xpMuB6A%p# z{@tmw&?x&Py!LMq_@aL8x*ucATeBO?_^lyse-q~`Od*Dm*1}+XJWA zn|J5NixjngnQ3i(wetHl96rd(TXT(qQSesIE9Qc`4oZT1Gj{i3258ah>vHufeFFvL z3V6;>i0PJ?!UWvE)p}=RBZXhrd>W|fY6f75bDQh#R)Z`yPtR{#Tb0);VRAUO>I>h9 zaerJ=mg&_wQj7Ba#vNIffag-Z|g^ zg}vJMFW~Eh7(Wn%0M`%%DO9A(XR%nnjfXs_{P*R>Qk7UW8Y0+K>}WopKBeHiRQPBq zjyopGFflBFmkXDU64kAb4#Sfq#V4%_t~}sIMn{MgJ6mdr7AYkS9Q4;x>!zYg@shU2 zYmA*SAv^vzBkG40#o5-WQzz z){G{1t{p7^^ob!l??xzFIOPJXKILb1O=c>I2revfa0%zd1BJ@B9>no{?~wL%gi=U4 z*Wm&OE_zMcXR+KwaaD}yW?JIVaK~5_FGrjtjpc^?7{v6}bbkHHY!~M9YZk`W*{Ks{ z3@51yD5vziuAspI#UN1F)>)i_E-d$rE3~1%v{1yi-~R{9AcgSLU|1Er&bVkZ^Qq(R zrIy=CkTU_B_jlz0Oceu_zP){S6C~3<2veO?KIyy38x^LjVXYTl{-%CHVj!IUM#JOn($dnxdO_%c(t^OR zqUc^6FW=G3mUPGi`43})V;boc5%C2DpRAoue{)*!eKeXT2W+_cAnv!7oronk#pEm5Z1KsZ*Ik&56 zi9bWcnAw@X4{Ox5ufg_Ia$>cRlT=9J`CF~;bcodi=N_X<6g_xk=4;+Zd0f5kz!VhV zH8I^OTUm2pZJBOb%u-|a23yWQY|5KK%kTL%Z2+j4eIT1)i9HVEY;gB$J)53`!O(L) z)`1uU0h7PM2@UyfaJ&~5AomYoV(@eW$-Q0p@v3>{H4NW!46`lJ31E9Y!E&~9Pd=|C zr=kKA`yCkbVoVkDNDtk9-QYHC^529-|p$ia{uB43>v8 zc@cCP+_A);d{d-1LEQ88s}-o#Vdn7L z?K$ZfgMwk<{re`cNP_oa0T{v{7XaD14LnLjnUwrDCO|L^7YNvqSu-u`@QAv6m&5_H z?GvNRe~td_Uc~5IwK?SVg!MHA=Nt7eCw-Q2_2uJfH>1PCxZ0AmOyYS))OUU-stRof z7D5L4l*dUc_V^x=^Zhme8#bxo(+kl;tsdA826B%~9KKlHf-@6XU`Wy){mA?p*ZwRu@Yki8VK0pMhWz zV3VD(uFnRlnJ(~y&N*+vs2fDfT@yNd*fqkn z8>uEME87@${C#0z0gz-~`^y9HEZFcLIWO`NblNM$<>e37k3qvL4q4dnL(9v_?R`@` zjdbeVT(sIuoU*YALke{qYRo4W&c@$I%H!i% zJGdjf4DU&*)Qj{X+F1ICe8+Gtu^=-%WS-ukg_R1n6Nv zFv0Q`JqV;t5R&-&%Vg;7gNv*ZHp6anpmwsJ0UF5C-4BzKQt;e4QHYn)(4+27YW@3r z3yvcVOB*;nz%ci1v8w=;_RdLhB}DI;f5J0*jJ~ex6Bkh?8XDe$hlcv3^|ST0*YyRc zrVJ@^maa}(Od)NMakY{Y1J_G>t0j zrHux-RPPK7-m?-SdFF*F1S>{7nzx@OM_YVG=2hU$+W|^5oG-mL)ATa(*ig;W6v3Fb(mz9MKcdwMW?^6zD+8A8G0D^zl}2qm{GG|_za z5#GG9F+(-2GZL>o!TO16iv4FN8Y(J~43?CYt%I7Y9m4BDln&<;*4fro*9t)LV^!7U z&_{~Oe;Z(9J`E?@_^2cuc=gc9TuCGT`LVE>W}3Q5`G`j5D&$2tDhrZ_ z2|ZB$rKYBHzBnQ)esn+Jg}@c%wUlo9ktXz2pQqLfEHw_D1es~36sJZTy9AANJj7vt z6%6j@L%GNuLs)~`q#zuFDNh6bzg94)Jfm!jN>ys-;+=mX8MpYO^b*1SdAJvqS3?$9 zCyZl-9c$KGUqCAHOaP=SK>SBXC~Wj$F#>)z=vEy)as-Baphc4C{Iv``Sx}>Z4Cy17 zDyFB;Tr&7N(UGMtl27k6cxe*{;Ejhku#yT94%WR`P$m_Ikowf$yvti->5zR{_U+u_ z-H}YC{1Er~G3MsxfFLj)U79QT9r@|x)YN>9jd%v&bZ&UKvR&w43vgIzTT^CQ9`AnH zPIvS`xmF#P!fJhc%HwD%T{;#@T5?H2?$;?1j0Sz#(z+_s>8yDw85{bURrMP0dfq;* zuL=Az2X<0QiFPy^jaa6Jo-rDO;c~plOo(_;H=+#Z;Y-0W&s`Cz59fqOD-q8*%3o-`UQO+Um%YVx{K|JMNy3K=A+XAfW%;9;#!gPD(b?=8LMvbw9?GzsK zL>_jBBs2F_4ShizcLGn7*YKnqsiL5ULYjHjS?YE~Xq3vicSi(r=Uo1SnyIa(d!LAp zZ1D(!(pEq@`E*M$I6zGf*@5x5DkVu%p9#9N;D0c=dZp{=(=IjK{f+F@EcR?@KIXcM zzbbQ;fF2k0(Ps!`Nl2dV{a86t9gaNUdNns6feiq%Jb2dR*h`W_hojfa6QD2w|U6zj_zS1b9(5<6obemhTU$ z-Fy^79i_&gS=a)^U^%%=9sY<2;JE@ZM_Zfh)+o%tAk*0*AfoL1y)MwSx&~Ukk10i&lEH99>)TGz5;#(aldp1ThBdvYO5K8c7#+Ju2szNPzV z*qgy04+UpgHooKBqa{^1Mzgl78BMO*518n^Y-wnjf=2E>Vhy+xO69WbMr`ZERH_t2YPHb^Pn&Fo+)@F~mM0s5L-@5oW7AGAfYbg%} zEmoP{HrX$ZV1T?mm52OUI*{=9t{s9$&_8fN>T`PmoW0 zhT41d3emg=-4&EX&`CeOnU6sNQ{QW-n%S%MV9lzef}DK*$4@SK8JjUD>O>22s-MmO zwj2z*$yNRq1%;=OH^^LdpPagTwA<*ZlxNtNv=)-DCf-j~A$iu>Y!R3zd{pfbWQ+2c zHCm&L>HGJvTR_x zEfB4^c;hQFeXNCvnFTw!qc;+1o~g(#%N zJ}R`WnQ@mjwu`qA!l1z04)F2CBltF|7Qnh-&k`7f-53(g2FyJByylxAiU8Ur2NoCs zdRxN#fQn~{rG@h#C=dkrpiC_?8Iy;mHh*Ne4@Fg5 zdwD{x0Vr*|y`h*S4?Bj5J9H7ZZ_@`qkc>q)dR$L+I?R!H<@VG|FHK6;Wr+S;{R@FGVVljbw<8<77~+W?LuvJ<&Ex(uz)+bB@5?y~6kBCL<`DVLRK250E&`f=*hoK)j#Yrc($) zcoLify_$kR@GRLI9Bt5oz%v{iZ$2C*3^p@j8G4{0necw)OqaKl6CqetQDIC$tjmcG zDxcYc|1t+^!-}?RRqy#t-b(vmS;-%>|5_#Dd#NpOn`2d`b;qJ;Wk8JF%TS*f9DO<&zI@Lw z;HYBKtlX-4bZ@aunGW8p9Su{ zMfk}|NfpC_!t_nh6(YP!c0NHST&^vKGXapk4b}3`C1{_cxe-;aIIQAWfJg~O3m zl2a2d({*m1o{XA4K=4MUQnOdTJq#`~rqh(1&xOwE%2m1Zr2iR@aw&%KXWhQhFx=@d z^`?mV+SXd4L}yFjH${{5N3Uj^Igh2(2^?{Cz*9pHK4h|YYIl5IVI{ z%Tpx#6cisDWGRk4nI&#kO(mP9?04AY3j^_cLb%G7Ji-<(vwR_iA zR7Cm8e!QeM8I`KS!=I`H4?}JCXXzU8Ifnl1#a+hNOX-zYZ$WdAe|N{t%Pai%W*L|;fypNI_#^ynAhXBC#YJiTBZlt{p(*G6?)$mD8mIq0A zYfWSH(eZr-RVn+2OA>^i6@E`mEJj~G--F~akEM*r6XE?Fv3UIlEnfz`5pT5rJ|tVkj)S`PMhO_ef3T25U113 zbK?iyYy>=zTno4&BJ419!Aa-Oe?g~eZmxEm1a8kA11z@{;)7Fll);~I@p|?4&QA5r zR`u3NXP-~hO7LS3*IUlFDspe~R*(fG`B-RWuXv0L;Q1YOhw9ZY17qvS8(92v)l#3> zb?w(wugcxbv6RocXQH<*_h;BHi?*Mo&(Ce)w#~D6oQ6HsRRQkURutb?hXmGM)e;;% z?W%gRFO?I6)S3^=17-5{lBn9}eEqEa9<>kqD01w2%or}rr4&73%bQD0CP92C_T%V` zT)8nNBhLo}=j{bz2Q4Ce%B})#D4U*R%|suK8TNUUUDi~?jpaBe`SnG_`m5Eh@hQKk z*;lvmGQTLf-(oGi?^*7SCU|3;qm-2EZJwfzBGdOOTWqaC;^| zY$Oy8@ufQpR6V!NECAmHPeAKh`yNWApieC!Bhrt?6em&LoOp1{KA(>6>Cy>NYordvJJQWvdt*XuFeUop`}fW)f17iJ z@v5ytO>WN7u)oC|6R7d&Zw4#xgn&UFo|X{?@uIw-is#8JDk_42cX>mp$4tZyzK*}O zFQ4wGl_XXiCfGES8zG)8#Su8kmk64~Lm{g_MS{_JwtQ*P_o_$+2+TXB6jTT3BV&+1 zNNBNYeM%$6_8ZFgHfgmOB=Jbi>{t#*ys5rqFUJs{2I@0<1x10vviPt_>dWuYmAvg; z=%tmHTmM7sfI}aRBn^zX-c+f`5yS;pPm%aNKeb zU|AgV>Ep-$g!EdiByR}m)L zQ}24%6^4fByFb^t9Y2iY%qf!i5k{2;W_hocV-leXQ~bxz$hEiEniqxPaXeD3vg5`@IN(C89?id11o@MzgN){vRvh;#FmE>1x4Iv73JPV|n;R$3lx%81)@dRe*w8J93-j_HX;e%k8Qd|^aro%3A;vYVIP>jUz zYdp-FTOg^FGQEm_w-ENPovt^Q!qLfEgxrC@G#RxV@)wG%G=7_imA4nowC;ZPyrAoQ zp6j(rz37#+FQG8C{@`&IKnPOtvrH=WDVYnpR&|b=%AAX^aY=V%7PYXq1gPbevMDv^ zsAbX9s$;rDn3AA-L`Mj*Z(t)P0}~WU$({pcSIBV_y8(mg=EKc0fa3&9M@UJ}((%fa z4eFxS&5112SzV(Ll9)|suF1X2g)kSRi z69M<--Y?^q2f}xVB57SW8pBpuR@Kja=0+(zA<YXUw4USdM;=!>ltLqa+VX>^G zEGDnkTL)jagmFLRh{L#;p>TG(E(~lMCI;tU)73i3)noiIj0R|HNKS^an>nVE!h?Ke zzvV0|5@-QuP<|7DsGg<+K>@IvyC>hi<>hnzZeotbSWhXGX1WhVOpImze5IG_EmK)S zDDg}y#f&cS4O6Wei-Mgxkfe$(Q@!3^it}SF+GZpAbB)gbvpli0)w{(eQA&Lp?)dif zpsE+KMK`ye%h2@>ws_F>4hJqTo1R;;C*0@3q2k}sV`U7$LE-4==kKmdQp|=$ zAd0x6f>7bZzV!qRBXOjO`+T^y?w-bX<+wHm9(|!965?ZsL2$kDqQunUkL*_X5sa-` zt$_U0={l=rjgM}V5(?`bRX$S8p^wFMonF*RcS@JkV*!3WZxo6`k_Z1NIH?RNjg{P& z^d>`tBDYVm2jdRcuCW#x@xky-SYT=({ zAGenw`riSwiU&UqW_z?WJj7hI1fO|*57f$g1MbDEt2tv)3PV1y!Bon)1c;cRA$J!2~slC-uIJF~g(PXJE2*-;(l*x}aLT{Ut|jJd z_BOrEb7dU>HFXZh=9t z5HZMTq;&u7!Yd;1bp;X*`s;6BZ(bBy`ypG8glRyyG)J${+bGQ-+G(YpH=>WEqGq>H3XzC1oypBr-kW+2+(c4$x_6*j=5#qL2)q->Usd@DHHXe zj2H&=1)SyuJ|jySEJUL$Z(otSUc<&QuABBHE`Rr~?FPv^$p3BIX{A{<=??47v*pB@ zuyN~Ovc3OlP3#gGX7AhX=@xilK|@B#Iz&EUPyFNrO$9km9)e?;wE5a6;u`$@bXsX@ zkJawsiF=XEB1m$)sg^MLy(E(;R&rJvT{Yw&LEl5ZwL?5|qGpf>_id-0zE`N4P!^I* zi^amj3Jjj~^TGPn9|dI_YBgN>}2Gy$LdGx4_- z7zh*M9yP&*sjBt!&1&O~`F->?s7yXSmoHw_;_4Nm7Gj_%lxB4+RA-|%UsLlZma{fq ziQ%Y+v7&{jUYhfK(|QOf_TMuy98^cBT&f@Q=O7!s1cRJXH-IHy29W@)6jpU_ktP&d z)BxlUWR1X0*b3O_f~PCv8+g=HMnNDYt5f$qXt)c;Vd=n)6loM$BOW@^8gj2FZfIU} zHg}3zdPjecP#ZyjK!P(tS}B~&UL zxy&hTL}itdw#{mh>z?!17)VMDzAUiH3U%w_CD+a>XyPBTqttrk4lIQ^OvlNZ2bL!3 zi5vgOyIB`0ivwr_3=5w|p9@*J$wbZ}a7T&qffrLcR7$e`4H%b0>9R7Q-Q6Ph2c*GHzh zgn-NgVjAVWmk`_@A^FXskO7VOg5crTo$T)iKS;3<_8e3EaIC`@Uxo1lXG>c!jKSvR z`*FKlPO9t+?gZrchcpW1T~cwuy`1V9sz<0ObWi*eQYV(R?^aXF&==<158^EriR>%W zL#%7LH&1INZHG?q;upo1ha*)0kvS?Ei{t?eQ`X1@I`Xr841()Hx@jCkvD_@nL?#T3 zny=Om>MTSdfJlw#ZX>@gB_u}@wQ>^jnUwR8ONy!8X{RzQG_wl z=H`-v#%dlK=W15a23O6^7mqGxP`vZz0b3)?MKMUiP49Z~VS8!G9;C=38Kw*uvPM9^*;ZXFwCUdlvY?oEG6wM@_ZH(!b)K~`lTXVC zOuNXKmYX$NkyJ3e+i`dih0~r17`~5qh?l&WHB#lNuy_vT7la*`x2c9jx0w$HUL zH}FnrB8m0JFXXQ`ckO+dGU8APG&5;zVUw<) z3F!4`dqv6NFBdQ1@e7rrT?tHpJ{i$@nrO8%<`$YqhDu$J1Y?gh(GyNTUzD2=ucl$U zd^>#F!B8X*y>*!Xo+Q@t;KI1>FE6r=qjOvqO>T!vubgtPl&|xR^1F>GvOl{}I86|0 zh?l&T0HN2U8|dRAr_rGkRMcNm`izZh zm*{%0d{MODw+5XTH$jPehKICjK^pIF0nk_wTPoGgS)g^DsnHUafp!5C zhBIL^VE?MFJ$l8TyWPAPt`v+^zs2zF%0rsZtMcHk`w=cS0!N_S3>@!roXIb%Db+}k z6Ap4#nUD3$N^h3Z_5sQNs8_F!Az6_8vz4#d?U^dE>#v(``_Ww&dLuCTU_AWui%SbZ zD{tvb}S|aKkPa7rKlg-^5Zzmm0%O3WL^1qzxhc-%l zn~xi8S1O-BIz74nYo*Z6l&Swt+n>^V<2!}1HLoSd4{Jbf3j7zC^m%h+>F{&!RGEoP zyq%Q!2Eg^Wolqz8?&oGAAYX^xzo`T0xg?ZKAUA?f1ine|&e{3Bk%cXfZ3w`0xp6S< z2T0+be#hQe)Q@9v1fT=+9XgX;|1PBwb%*N`%aBTFtispDsaUheXGZ zv})Kf1pO+u1tvr1|^kqpZ-)BR3~R2K-G8DI1mo_=_zt_B)AZQTFW}uNPbn+_u2oCUKY@3=O$Q))3?1 z?zzye@Z^mn9>jEUv1f7jAK>UrPnVqOs=I+b2|j_ek=3xpML162RYnhM;+ zbplowER(xcT3d{MGS86Y++dEiC^zF6B5Wo%HwR5t;NB8uN=9Ye&*oC9j#;I-arC=@ z^RJoCEJ+djlAxDfymtgV!FTWcfz1oo&o^z{1njgnPQnEqMaujF@RCKn^8>dWARu_$ zf#lmmAcN7;N;=+@d8a4wl0XIj_wQd|cv3_`+%@!fK!_yG{xb0sjz4_%vkh+aP7cF_ zGXeBC-kV)JcnO6;8a}C}e7Ny|5B{)L`A#0C8f({q; zv#Cu;P5lijPR~&x7GS5@*1&F0U*LkSNY=>7(e7oC28xw)_5%*X;UCb;sO6JD|}_^}tOJ z$~IQw1@4%N51d#1O@X%KM z57v2S(kYT^y(n&+E%$fq(g_Do6!))u!M!kn$MsZ15VZ|CWO!6517ECLkui6+bvliM zQ+uZ9DwUek%9zZK^lwH*oP!PthPapigY zn5EA_=Q!jMDi7hkQU!$|D73&)@)$CwSCs$$TA4^x3jOh1C;`5Wjm1Jxim;tO56}$g z?r+t*ExpU{}-eSGz;?cqJDTo=pUVf9CZ-Te{>*4RNKl5F% zp(c--0P)@JnQCY+q@^F}@Sm|};fjwh{&jXszy|r=y?bz118P7%MIV@owM;@aKb{#fgv z4plxJAegqnlP2H~M6_su>oIm6a!7$7<1M<*E_>`v`+}U~jZNFL z9ez#Lx7=T`WID9{^t{vlruW)#Z=TUNkphtmteHS&gi19neWZvwAJFYf;Jym@cb zUNvEh9E0LsGAc0zGcf_S#l`XrWjmIq1UL5YlapqzPZY?ngU_%?0%~*fY4BS>y7+$vuoeIv8066yA^}_ z=r^wNzY&B2l5kHt$YvakhlI~58K4q#aWNDBotfw1U}KvD+<8UCS+D?n()Kw5P99-l zV28d7C}lW8ox9OC9wnxAo-eJ%f%glBAPxBqA3K5;?v(M!$)|v6;C@~~5pRqGKacUP z+}vCUxj=M+u!Rybe?VdbWgZ6ca6P2(JY>~yDf@32L#+0IqXP?5q9)E5f~arbj_y6q zeVpdvlt9v}z~hqsI;}q{B~;ZB7>1|;DoMQ1Q{-gtpjwy0gW>C({~l8Ktf<vKZ2^m9MDEJW8%{(=abhC{wkNKce$D&Wj*#K*@6ZH=*ZoQOk* zZCuBdnSjEiI0uW$X#^idmW>bt3p}^aLqCT>ZM4yRQ9lb@?f&bIpYgdDDL~9(0AbNd zD@>vm##PsP*vW|};dA?u$?62(QRAOyRsxpT|IgUH0eom6rNC9YcYSlyhnD{Di)zZn zBVlUmnMTifG#*6IAYX=t>z78-3XJmBeHD;cfbRRly^l+A%K==C69gXE=N10pO<0D; zKQ=bjHu!Ul(oW0MnwoQKB75W*AwmzaF;s?|KT=|<$c+t==5Uo{o^GU`TWoaw07R~w z$;^oZFwh9KY78|;;h=s2s-p&PBr28P?fCmD7!%vKAr42-yK^^u$FJb!w{JJXfA_ES zz0{63K##Ac8AyL^;7?QyGyo5W+FRt%KGjr&Nvgeuo%yK%oj-A^AQrinvU1l-Kf^pG zICn+fwo!2?zl!CX&9^6Vo>omBmN#y&Z;+&+wk*m|8b6&J?VJx*xSU#ppUEuAx-ePQ zeha^Ixo-XC_j0XaY54eG?hmpDeVdzJTr3!0 z7aM7j7kOGE_rLfMZo0k$Wf}01;-b#-Wk+r-&=L0llRUtt3pD-YJit$jbwD`5IkU{f z(C<`gj=0 zwS~T)zn;3+1n?v*bvv)< zf6LjK7y`1HoEV~f)glS`@3^{>@*gs4LfgXi_cNDJ32d0HTf9HRX+Cq|3F!d_%uEDo z>F~WCG6-C|54kN*N`;Yx>Fk&_F!qsQYQf|I$Wt)!F(nQ_#2G-2euCGt(ev(EK>ZuA zi2<`0)W0B?h64$I!E3Hz6W*TT^#iC{&eB>S&a8)JWc?uGGF(3GCp#}e0eCkwwDaWC zZnbr*FT~u{i(Uq!3A~52{DV!N6Yt$ey??a*e2y7J{WlK*@P^|DNt`Ma4{}{Bq1XpH z1ejdlLpfO@yW9fmf88{=6c8oQLBWf$6lE$1`>v~-2ICD4OMq6#3*gFTVvZBHqTJdD zU9PF!!6wo-}ha zW+szmCcI==$3x2iH3OVYK#I=I&)!P_z*yF3u+gTyOi%ac(0P}c!U5*Lky>V~6UWb-2q*On71F(N*2+e>p zrZAl-BR#U`DRfdo`dOsss7*%QG5HSZNrFT~l;=NusHgRH5O_RyGHyg2_Rme9q-OMH zN8n3N6b7by3eLycg8p5;yL;Yi#@r^crtz-QpWGV(iEYj! z=HgP~7WN+9lB99pb;40mPRlsr?`hgPNL^dHuUD{0)OW&2Wh>-Bk3d8AEYnVt^@Yly z&G%E|A3CZRxzrb|of9qUJ+3&88x?eIRX)8p_Q9n}VU5EN5A1R|xi)CtDaBis?(N=% zphh~)ebA;|d0Yb5o|J)KUo18Et?bfQ2jltwCcwSoi+}f@e9{@pii|7FyXYHEbOgL% zv9gWFQU>&5QlmH3=YV!aLjgFE&O?n~u=Y8-78Glt~p zu!X=<465zZ4wPHZX1UkJbWLk!)D^fC@07X$4h~}Qs@}sh2PJEypqaA5&96L!lstbI zoCWasm%L;|j^N2I<}cF4Dqx3yRw)&>C%=(@^CVf;WGv#1-?p__gZi*Yzr=BfYRuSW zCn^uZ=gkI&hNiFYdfBs(3Xxg_f{$^#Q?$HYO}GR_`0X(C%-PuO6E{vu+yleik3z&~ z^iQe;o32GJR#uE9MI}?iA$6ZTd>gNC;$o)C`nqC_fp$ zIDf!k@bQAKBK#W8mf>fS;uoUtf`H;$Wek7S;_muE$hhBWH=uz`vNarj{oY#q)!lJ4 zy=7oa$Lf@;#-8U|OJ__~VYkTr{6 z_$Z5!bN(>LRh?XZ>*4$usT@?&Il^Q~2%-pF&A4uRT7Sh%H@|B9{`&hH29?*VsI2|> zNiJUhPe8`!e8I}A1(lO?2Ips+0)`guy?mJ$-piX$uVA>OAg0T!qD^kF-FahzEVg3A z-`pr$J*Jc0;0nc4a<0~jv4;ct@gbK4RP#5EkB`C9tMxQ>WVNt)SDq%E=}aHQ|LTK* zCX!Z@R=}@VNXvxyCV?o%{+~lRPS2%ghNzru>M&{L*~!y&1-OlYH-aK&@D8yhrnjAv z8SyP#eW0R}z&q$@!T@?V(F9(m%D&jjAqu2qK;W3dIyCOoVVt7%te5{@NcvKHPM1Nm zL@y*bINNk?%RhNGfm=jf81Au)fk%ARGv!j1e*evXy%KPvG?Yafk#V&Io13?u^;7w2 zFs`4u1tP`LOmq0-NFLVRR2H-Jpp4Sc@g*F&@f<;iHFfi7;CTB($L@gFV^97Zs+u@a z;81&@Dej+uE@6?B{8Gst5gp|oV|V5QTIT;ELF{^Ie$(IHCz9@_dq<)e>rM9RR`d3iT0h8t*JOL3Oe+L|I0?GF8n3Uk3;pWsyQ1s_l+a#DO%s+2 zox8E*^u$TtXO8Iqs+W@x2M9kx-tw2bhLiHuNmBVjNhk7@DXUSJCIrq?_-a-l%fAmVUVSC1{@>3i^q<)!3Qk+Y(sWIlWDhPa_fUdYVAP zpa!zf4#_BV2p=kn^=jrVy+rJA6*PQb8K^S+Iw_Q(pQhKkmMhR>)=CwSq^EgmiZvM< z@K^QPU`wiCTF&O*MkO|#=^gCZBvz;{=D5UlR&vE!pVfat2Yp8Wuk=aTk*lL*hYzu zuWnwN_wWdo3(v&=jyj=RweydN7GUDi%S!twC0Cft|4vm5?!_;KaFU1ZoiOk)JkW@ot47wQQrvFP})D$(;< zc;JCr&y7BQhog9<63y^kMXF%gve_GZo}$hk)gqv*q6>1bN%@TP?VP4g4qTH#LB7w9-+0i#S7V5_>T^k(;?7p6LdSTd|=HBqp&JyOb=* ze0ncB=5=FGlhqxEEJxymLJdaUUy2F2vT~)B&b>#+eQLgh9ND5U%1wAs7l4e)?T#)k z(BtY5MI^!_iSg;y7eL6(V(nnXX{;0AMt_gm^A6>(MUCi^^h79Q+U`l63mJaKF-J40ocm`X@ccmLz0*`h(lyMSqL(CX zSnWlLmU~;2n`d1LM0;Gh@n64A*&7)_9OL#m36N%i;q>WQZ{Io(^DTegkVMW-l_vvh zA8(aVrAFPhI<70+r&C3)GJ0^sQ+a@q{}{h-p@<`*O!@RlT%|Dac8@?b(KzS^hf-3P zp2#&HgxE_Ita(ua5_R%0@I3Gzb3tD#&wB5N-Zo54E!HS6(Kz-OpHt{I5>8p zxwc!ZpUMC6`32|naJB0gJX1)sr}=LULu#EMVLBHvGwGT_kz#sD%iRhN zOD`!6oLwdDHkgE{cOXjXOLJXe@j3k3xHHGEY521F7>5*znywS8Dt4}xm6KygK%T@rRsIdpu5)rJRblo8y__=Ih+AMkRE#-^C zJinSb4cJv{%@`GfY@cRb)_&4I^1S2W0`Aut`oJa^dyPl>ulcz3Uw#pwchmgJ91`rQ za*FZ1Qt?CV6~O7$ESN%+jNUh|eUf;;Yp(j^+>TY#*c7D#;$u+geTzYc5B8fE{)C!- zX1h3;E~f6oDrsVP4NtI1AgC%vnhj~>Mx?wlb-D*hJlS$CEi%LtfMn_1HhNB|feKDA zaxd0<>FDxa^DgugH8_7V{)dVY56`p@S13k8uy^?Z#Sqm|dkd@Bt3Nehyd*{M^8SFK)}dW2Xo zQrEmW7ql;xjXt4q{1?dR~(hvwC8ek*@E7ZNz&(Nm0 z#%+=e$vp(LY?ZTY%_Bvd>Rt1j`cm8Xb2YLZ(=0g)95Z#CwM;$^2QkZX8$KS08^Ca< zzWpn%0Xh_<%WFerJde9Ly*;8|4L#D0H?c`*ThZR)>CcnZ?|F1C)a|q6GZeDP;RF|MXsXTWuvmaU0sUs>hr#>HwdBA=nS7gVCzvB^2`=5xIzE=yGRQ z4NmZ=yVCm99?$}bn8A|U6VNaNIwr940XYeH5DfCl%-Q|nc7l{YAhl$D{XHK70Q@>I z`_B=HN9(#r>)q$eNZ$W5J~Ih;|9|d5^Wf&Tj9_{?;lfSh?`4uaP=0OLDBLoFTv29+ z`}s*{q3oD5t{VfsEv;$fr7Ug$5LARq)4S1)M&>8Jr{{527735!dhZ3Jysc5~LgsPs zy2g%N?IQqQpXt3`el47FC*dwnX{gqQ@jP|uY2WDE7kr3I6G)v-`TC>KXGes?@k^oT zl%D6mmUr(eEM&N=o$X+aJWC#VZRq}ErhmWs<h?sjgirYUz|1g zUo-WR+65H3PI1LePxj@Ew6tixy|s4G=gJKS%Xo&J5i0vXAN+nAvYgs688xbtx3?FK7S(Z7N}Zd=+uV<5Q&tYNn-Hg>py!{D zra*X_-vwFI*Ld*hGn2FPcYL<^XKOSq?NV(fzDy^a)^JzZpw1uLaoZMhWEkXEk?X4Th zvq51v0bQ~5pD(p8m^N(ZZlw6zcSv`fi{@I3eSYJXOkAbU+T7EP-{wyqf7Rk$t}kF# zu}b|MBP7$Hhw2kJ9umYV5GA0^C_8jH{i|k?nOJh&xES8m=Nb_)vG4+Ar#!(KatCCm z(Q@vgcmWFRjEuo`J>t_B4^8jLb2ZH57fW+5`s*f@jdpo)Gpw^=j&15iXcsMt5W79c z1Dcq|KMJbR=`Ky-Q#MO3JS>!RUp^~~AMrWdnQ+KSx{>BCc)4S=Ucy91pI!T7TdRAG zi`1lQ<3B#snX4Y)_5J<(H>rYh{u=KtAXfme$0_cAQp7gxkn*$f0h^V&K(_(h1r%8o zaBrhk{*Yx92m!A5KbSTh?KLqOQm_E7F}k=(1F7B84Zoo*%5STF!XN4@eBfIr+T*QpE&&5O8(%c;6m;1}sU;Bd z(>^lOl74e*Cpsi;63ZEt%IFbn?Zu@F(De5GJD<<-7FcW~gR~LB>F2=$x2HYN%#lg+>z0VC!MO@U>1s!I)unym^a zmV`AxRA*?^hR^Q)q}W%r2=XHM7zG6g{&z|98@`TnImP#@$6|Bm0b}#oU+FmhDK#rg zoShEfUp%C=Pprxvf#&NpS{sM_Bmw^p+TxKK2LVU0db9&F&(BZTJA^?91TNpy@}|%_ zP}eaDdNOE<>zG)HdyEL_dw2x~l;@hDLQ}_y_Kbp@qU9;g*kY9>Cp6y}T^)(}{Y+3- zU7k}_|8uGk(y}sKDtf@N0pKrq&}|9_NO@_*4A3OfF!BKL0y|ZTgpL0R*5cOjSBE!kH~rbc*V;1qz>dt9r=@@1X6ycxpR;**t8k)= z7^O9X%K9uvaMWUD6-Mfy1lMa{J)pmY=|!_Gl(*0mqb|Rv_69>Z&gR5|L_%eyIy!2Fpu8(x#G5ri}_F@r2^VX>v=%Nv+(x zS=v@txnuh5BUR(SJq(`7#-uiNB6CGE3FGfvk_Def1U;HzageZ%w@;vwc|H~?oSq{i z5q z0oM#OvFjq{@B;xrqaE)@YWOz%f~6#oARUlrCWgo3k6@44j-A+!1vVYBm^yd^{p{@8 zp+PZu?;xP~@Vd@OoaQ+XO4Wdgt(-3j@`WZDI+9XS@7-p*FZH5^?Zs_ovXT{lxfR4qt7DIp2s+?}G&Tbyojy0{1^R0hZxGOS~ zdLn{W5~( zTz@VsvpCOO*XD;Ng)T|AqE8ZL@H#?x-$}aYsa^S-*xh`C8+)pGF=rOhucZr-#$Q~%@%_j<6JE$nBCtsj83k2W z(+XOotQ;H=f&-J1rpcjA6{01kZ%GmINA$S;p1X%`CdsE`+eznyK;Ruqh87AOTldJc zG0Q3Js*YFEVYbjuQp*F}b8asnum2dP(rM3{cW)T_YYDvjlQeR8;5CsNa(D_!$lYJ3 zF*t4z?=F!GsoHT&9_uAgDFGo-XSlh|prvSU;wS+15_A4Cg8ZWa4%t(o^Lv3R{rEc# z8ft17VhRVyo=RQN3n4YWokXx@#1jS1U$b8kD7(Sk!Ji%y^p1c|`sODIe0+`XETEM5 zvHJ0U+qtT5?S!-Nx_E6}(aeXQX&(icGfm@Oh@brP(r0Yx)(xTO1K1#@z4EiC2X0o% zcT5{e&LqaupZc>ALqOz6p2(!ea_^1A-D^egbLU{0<9L!OZ_MLA{@aneYs>(G;}Pn4 z&iHeKQnADx*sM)O^4WPX&28_WU=7(6m9o#rS*y$EX&`##cCpE}EojO5flS@iV`i~V zEX9?>WPtp{m|xURj4QmB%19K=xJJ=7JM)|Q%<+gb4??_)c>yfo;YVb~-L_q95v@QE zN-ndoW*0u7IolR6$v0Bfp!bjI5`D6*NR)wC3YhFGM_{YQy`nkeJvkJx2;!s7QM}*W zC2)? zlgA(@KN$`8<_ZJF&(p7;i$UOg6G~wAQ!n0lk_9Xvsx0@P(5z-<7ZBvUf9|zE{0Zn-678bDR{F%gbkI|CeZ4~ ze*9DOJBk_RTolmX?I?N)&f-FsR}NBKA$-kdhp_m8G;;ek1dLa@MCBfv6Vk96+XShp z(-^Q#?5Z(eg46ncdqD10Fa^zj?gQTKW}0a_o8t?fo1fXgn`-zj zpM#GPb&D2;nN0MJhb#O)+x3Z{FsnuZFQ2a@u z>%$dS{$ZP24etzBErK}n>{*Z#3P(-D7S6{6qdEld^sIffHHlTT2Ebi!3?g+=S#7Rw z9Mhb}V#-0F=yjDxbR2eRFR#t#Wq!8RV{n9gk(Jf);9J}+uS%Zk0;M{(gK8rjY~&HbEU7&M?;QPhZCXJ2XckGu6>Nu&evr*zU~?-N-R#=GwGf*$;eHOmosOC zyC5Q?EsN#UhJsS#0g0E;&AYt~Dj}fH|9M;mwSYc5811b?s6y}CoaXKT;mfnQxL!OS zwiE8LWT&xtIym*z>fzN&1vNmQ`_+z3_T|zZL_-a{_o{bFJBu}t2m!7X5|0=tC?Wk# zAHOEi$h1h=cb!TZSo%;*&bYI#mKNAFV4IqsPAvcN+9fT-3Mwk3VE!X!Sj=vD@N5 zn2*J(W*VG}bgQ{z}R%f!qm)yv%j{O*#C@fk!5e!p+f? z6|{M6eIqb{?eFiy(OR?zd{-7_OA}3jzP?;R0&&(R$r@5-mMcEm$nYKgLBOygQCt5_VmwJfNL_! z{hj02rSY~K^C~h7=_I4xho&|zE;xabh@WSSnFRFU{pSYv(+c2M`&`hu}-2 ziIG-R#IMQyqUUXvfW~Qf7EGtHR zwNhNLP>2Fn0l?8kPm1I>E_Jwm(YG7*ccH|=TDIkXmsKU$O_^E!L z!vBWodHI2vmnxIC+LuxMIj0?Rbu=)itVQLt4z*Y_HE4yj_^^kMMK#kz(HmW~@3EoQ zD%E4)y@6$(6x?hFo*#)np5`5tCUsnUjl5y})>=cJ%)fa$g4s!_ORGEkpi=^qrM5d1 zV?!uvGQ{Q$Xten@FfP6jjeEosP~f^k%l4csw+6U=U{ia)M|)X{ufDi-;RTwqO9frA z27KOMxh%B)i#G$fHWBmMP8C}nN2$&P?8R183bR;_83q;4@54pohIJL4QpcFIqBIa& zAyyde0pN3O%qLB{T{Ch~Fq+Xa#VM5yK`}_SjopD5}BzyzZ@6jvnqZlni4(#|SI`rK{i+ z3Si!G)Bh)wycBw^-Qj!Ops~;y*>{h51p`DWKXy~Tkig&~5>%kU!9c;Lt1=UBKSm?M z-{t!EDSp?F1(SV>qK)GVZQhSWc@AOsRj~QZ{c=?%pu=7>IFEXGiKc)5A`mTF(fQw( z>C~&(t|>*Svse~ZHdeM)L~P*hZEPRMnOD{loNIQ!&BWHvk!_0h{Mqnrj&+b;k>d@U z0$nD8pOoOt$r+?bXBY@J1JU!Leqol)7P|ULAa#M`#O~Emai~hk!sp2&dNC#ArHqEE z`dXaP`}ZIXv94H~2dyqb@cHBGrNwGd;AT-SU|)Rc(`~9dRhwUyx`*7b$h0@=NhvCA z5)AG7msVeXW^!O{S7ul3Fy2tF7`sfrnjx%R`M=-bf4@c(lUmll?fwXZtULu>r|uU? zmwfKKe=qzlEJbde(9a=<|1#^Q z$oN2*mvR^Ug9gf51^o_5J+t_OHKO8S{pktV@y$c9~ZG z;j=>wo_V+N?%P`v%VE;Y7_EW*XGh!5V4rFHYb#Db{{s|)mxsr^((br%_T9bFA&aBk zp--N60Rf~6CM}$egM$OK5r$Ij#jXgMiPr}81dS95nI>h^Xc zp7Y7y@{S*+<~?isy3iyHuo&n$AJ>m-r(ZF5Z95UuCK>HFAwCmD3T;%qZT=9FnTVNw zt6hKYd9Hlx@-1Xpe8%S=S=Khdcv#->Rw9_$pAKZx9Z`@CniNw(P+uQZ`h?sk;KrM zi$i`eeJc!D9u&4qX%AFDtphX^b+5tV-wdsJ;A0wD*nkTGJk?hbk5}MddGvRr(%#BS zAdUbPa)B)mr&5~sZHGMJL;yDdVgaG1gV%4l1;lpl+_&G}3f%t08?ZZ&1&IxZWkeuYUozVI9e$d$J}o!bJow#UevaUqs7wxrTT&6 zr~j^Sb6^dVb1%)VX+jw5arGrA700EtNz#{6D0aO7afgz2CMQS3a#2^fj`vjb!o3e@ z3Ixx_kf-d+UO+V-|NBX6GHF$gFiGP>kSaC1Dnzvhq_km{>U*1$w7KW6JusaL)3-i5 zVAf1Jx+mzU=It}VrU0BpM1iB`M|P_IiG#1gRgZoJEWLaj2z%-2a2Ec^0+Aaj;{F}7 zfd|k|y*4w$+O(ABe+P&B+UXjSYC|q&@=>DYbeM9SxezFd{XkAkZ>ySBbg@p);O{oJ zGxNx`qLW0{RIX|1_^-?(HRAh}CgkdWm}F2NqLKiB363oLTZ_)`_ z=%4LZDbTV};lo-dv1)S0(%K65(k{Jz+`7E%QfsCFRm4aQWoD?}26Y|WdLN|+kZDh{ z?m*!Am2{v5z!)1-zO&<#8Zx)G11K>ZGgBJ=+LDr}tH&DVbEBi$tnv*ab2}^Ee3zP? zjuyB000nP0_wN_qDslQ*qtA?mBGh$w1v6g01Xu?|h^M6$K5p)>Eo}H?vcYhhQhX!% z0?!$)pG|=i1YJ4TmAYsf)wIl)jGxq#ZCi&+bXGCOt$R_f$8^ z%P6>h9W3MG{dTyY8FwFK4D31AReF5>UWs!28&lVqc}w|F{$b_C6IZx+OHVXx2IrkHyX zUq1e^;AztZiWf$@6;5=*{WNMpJtHGkeM2KpNLQ`tfWQO-`d5vs;CuV!#xTqGrf=P9 z!B^8XfhVp(i$>#}x6kt=Xg_TqA8I;m+&kmYJLIFGg&_Eh{*hYC7s%5n87n=0>*esj z&~dYt<@y}XXrcUXk6yf0d*U4M&lc`d>?0q-=jj#RgZb-6E4)XR8%{>w{D%^4rcCS+ zx|0g2BRc!!qdFO#j8lPQ7rvZ3Fu5*7!m4|FFLhnzH?iSq<;cF4dWKsu?_R8Qh(!}B z>e#WqTqG8288IT^$FP6qx5Br(@GhW}ZAZ5JKbr3buc&c%C=VDgQ@(!AjIlA%!F^tn zOMTGc8j~`W7?BG!5e``)N)JXeeH=0u)k+^MNgZXq>&~vK*Q9b0yq1P@k>t&e3&-ps zXjY#+;h(U^bX_SbN+d=&i7sTm=FIiT(g&`rstLk9R-E;gGZA$7NDVE)?n`RZXv!Z zOFQIZ1QwX>OA2`e5pQ!ENTkeu;I9YH^ob(JnCbOf0d)fe*|wp}05~iOx)a zhb72NtQnb{VAENax!nKCSU^Fa%66{rea^y@&BYN26)ZBny7jSAyl%TySX%zq-|y~J zpWMxZi6Z$?xsYx!hsOs8nuN#0y`kd443}nKtZ+&2BO|j+9=4_RI7zy9?$ihn%(T6V zIg=3HY<=u_79Zl_)K6{M?Zgg}mAGIC5(C{kB_o;o>qt@!Ln@TvAp+pQbVbC+m7^1VYd zKJAlWz^_fC#ZE>ySTOMwk30n5msh>HlCsBepDQ^+TKgt5rIh5c9M=<^)-^WEak_VD zGr|T2K|97jU-$3l&z}HPo{pt<;ZqWE#tcZUoc8nYaAo)eZx|eQw6=!|dDO?MPN5Jq?DO=4+7X#B}V8&j!lfO$qjh|0d2_{!uQ_vfFzr77Tz!ehSZ?MOnZhUn#A})htIZ9@(`fr>YN-N9b8>c288^)G9zmO6w8~ zWQU(5AU(Ob81C!-c`2kkOmUBFY*cWsKn@9L^m^2MUED$lYqS1$E|J}mOd@1PIHtWh z$K5fD{#50p$iQjcNVpkXT#>w;1M}Jnwht?WbuIdt_nCgxZ; z6#wnKzzuue{mK^c-T-Aa}v%)mLh2S|< z)Y4w88inK4QQ5wD6%n4A+@Xb>q|9llnnVh+T+7fv&JIaF?l=Z!5Yx0uAVF?+JXeq; zMXBz0V2@TE@&uEdcA{wNnubg%9vdQ(#pa={r`4}WSs~9~cq7?%_zk|dH#d=X86=r} z2))VgQePz)Cbmcvlm|z9@S7qH*00igZNXDdFYy=w@+@55vlen`2#H;wVtSGpeg^^?KA2wc@FnB8 zd9<77S>@wfb0P6!;!{)%fm7PDG+tV}a^&IkCGRtNw0IVU99odHVfA2-L}{=>%~dX6 zsUh9n-ETu$9UoUu+&=8e+V7eO{5x=y#@^QCEcO^1S6IUFK0DI8@_(;Lh>ZZ92o39w zWM>vP_5GMrCb1s^ zQ*I7`J_raYID9l%bo4-1JU=COD`Y=8f>AQ{24&!hMIJxoz3=Px?cmKNXC_b5#!==u z3(tIn?YhWt*#g#M|HqTf!EUt>WKcae=-DvvJE*OA;eN@;Eq2vgt9PoMcuw6tSCYsi zhc+*|aOG`tg~_~Z=71Q{C{oz+-dDU#v7JlCB$~1DHe}omyPKylLkRBht9UG#a3V7~ zJ&lqA92o~F$2k&XVZxeY24e}_v|P9iV^xl6a(HR3<3UQ0nL_k5e?}N~&46+xa959) zA~hi88GM_K;!(LItCD0K0pKMMtKc&&wrw)kw^&n`9fIT-1%HOi;e}@;%5a35TP69Z zZa@`te(NhRhVU)7A~iULShQKYt-4v$T)3mRQ}e9Ysq1pCCSOoDxP15U@U3F10{S3x z>m%`T08##kXdMWi10eY+H!J>&pJJAb7VW&@ESvC^+3wP96C2X$2${|g6LgA0n9I~a zu%u$d2W~lU7eI)dgx=#k%*y}`P(Dc)>ZgF`1ndNY9wCY0snbD#VoDELXTGllC;wBF zQ2Sz^sTLJy|2azeim^qA3h(0}psC5R4s`7^Xwp9UGU7&k;B^o3U^Px_J~cIcL(!9D z)R}?DL@W(-n6WyAY#l3LhlEiF;v?eI`wS!#OnoL_UrSFR(zEMzq1!!7jr2TBYPzIX;YA9+~3f1R_&ELc2C*1 z(K-wlI6}*psO0c$YJ20qf)Bz=>sFs9CPp*yT!kPEBDxn&_mv|mCj4;IrfcjGmy}W$ zzy5bP@XCZgtDY=m;?uf}RCbngnG7QOgjw?SJR^96Nt!emt8$o=>KFJBkotyKJlgkD zXo7eg=jwDk5lp}LIMr}SSO`gGBt6JkhPApSn+vJcjQs8?k077en!5LEX-nA((&k{2 zC|}x(BQ(qKtgFW>k}Wp7eYOz{QsM5nr#MYC?8Y%$aZ=~AXOVfRxCz9JC;TY<*-vtQ zR0r-=i{uYkJh{-}3I$CKtKH{GWu}drAIc8qqz|7XEn3w-)OmNr%_%u88kPAH{kOET z9{<}2zFYJ>rAV_&FV>=PO2)|?qH#q7mX;34@X;LR9st2agN_ukK;Y;SHEunKhC0z8oL|9RAp zS2rCjmOU9?AjM30)yFoe4sl2e7ihT#E9IR~W%-82`zi?OQyK%IaK(+9vrVrCBD+#= z=^J9yxh0iZF(=h9tShdcRax+?nLpBx>rCF*(e!W3DFIW8I>ry;<*knzpF%#aTbI!P z8OeZZYMRi+spzwN#E|a(*>j07O2;RT)I~A>t3B8nex{4yr_J&6>f>ekq4zCfQwO~0z zY5=feZ*sE36{bo1a^sJHMx ze1NcH9)|ETkTijm7KBIg^8SZA#4_XZ)`~YIho@N~ARhRAr0 zD*+H71V20hPoU$KGwgrl8)O7Dh~AKk^~W!5)hDu@|MNCmfrE+3{Jr%PiHmMJ{2iN1 z^^d!7?o9ulK$qxdJ&mCe7+(*-g1EKNbht3<<^xVgk~)$^s{)m64GdM1!Rws$y#tbD zZesUGbuXF_LxNKrrMTd7LKG?P73o=m58VYOqx^L+ugO4F4`^^lA6|j4zVm%KpsTTh z?w-2RN8sTGu6I>fVI|V4+#7J8$Xqb6a=?hLQ@93dEC>%IiGLcGNVxzXK_UjyK0~8H zsm0uAG3bspZSeIZ>0STLr9T3ghVj$#rL3JVO9#J}STLl=66BiMFLvNc!m13S15Moe zQy_=OCJwL2M2QQ`oq_a%T2ly#0FhX#AOx9bznxpN98Jw<Oo2zFu$VW#jgpFs&;JF>(_V>dDHBNu! z!zZnc9Q-i~J-j%5waWiM58YvDD=aQ+C-EO9MpBKILOn0ZElKascHA4yk0^;WEMPGS zuR8U)4dSekmPttDoVP*@g(8AdW71nJDi4dyXl991(MXENa`-5-n@!A8W$Lxk`z5I) zJIzM#NHBgv-NSZ9srdA+ji(BQd=7U_dS^T+)hapWN*Srk31btpCa1&@jh%!DbKrgT_K-*+zg&cHv!Ac7_8mL{D0+044&y!FkCb?y$ zrU{6@3uok+Mms}}>QJdUDc+0_b4lXKCTR%*Nv0npSpafXYxk84%#jVhKzgvc^D!3% z;l(7Lo|Go03CU@SJ6*aYK2U#*XXJ(#y`KHZx%wmMm1gmC3<3<#_wG%SuvpkX{UC}7U<_boU^RfE zlYLnB?)U5M7UUDV3wZ9tz2A*FPwDepo#RRlAiKD}j`Wn6ZTo@RLKF97LSq zkh5+kMuT8N_+WSrnte`(tvou~d{iL{{$oJf41^2BZTl37HPFXJ z0U8nPns$}H_Y^+T85#ZFdV-b6B>1R_5Nfb=w89rlFAw2lED~%qS=9(w z)r@9Ujn59P^dSP#j{)!X-RPzltK+j=A*5&axz`b7XfrIZ@^wOWlsvuk(fst^EMCdF7RHoCZHpIf*+fO>z`G}w6a>v z$OOB~r?8>M&)LAhCb*tl@w`y zw#p{GVueCbpEbCJB`waDR4mj+6?_&w>D}V_)2=cSN7mxN;nk8}FiZXNcSS#oT1l1jTu(yk zUWvl@F-lYg%kXAYbQ~_t;FPrsmHRHR=l>oVkJ+ve zjSBe_-UWvBSm|Hepk{V*bNjY+0B5F#-N7>0Vz=P@1mYjgFhD>@;8lGD3H=fbq@#5h zghD)$;sSYhOgZdQIZXZzZf-CKVAjq?2{W~2dWc_$%S{lX#&IiF1 zL#h$cT?40HETF+EOcx_5y)64Oj)NKyldp|P4d+Q%%BWqD8U_}QUCPXwIo7_ z#G4=YLr|k}Prn4g%7PF_BoVxom;HFzAM5?F>>&U31cy9jD+L^>cgrWwaf1(E(9=E^ z<;F0?x@N%e!iP{%jncsB**($GV%2zF)O<>n!u_b$fbl4U*@`_D9Veu{YTc9sIXYY~ z)x=Ut7#Tmi{zYHO|BjmBw61cxsYyQziqx+s)}nGjPZHW#;CRu<0i&*>qpGBikQtrS z`;(kJ{?H`;rX}CW$;HpNB;zYtF)qdq0RMtoiby09(2Y>*236mry4QuWrbCd?H`6HH zW#MHA;jIuQuI<351fYDwlJgg&PQYFV!_4KhC~!2a`Ger`S!`@h6Xk?Y`!Gbv+}*55 zAyw^yBL%>%I}lOR*{Lp;0^gfnTul0RKj|Sr)#KA~X+($%S>ep6WB4^Dtr}$%Roz8+;=w}U3+l?} zcp@p%P}l#@O*m){H~K#*954YToza5$-ps_&!Ma(Yo}t}bbzBS_g?oqVW}l?lskj=K zqMvv$qRK$je8+{si~v5Li8Zv)84(~36Hvka9 z-2vxPJxZz&fX_&pB)ZVn!2OOu(YuZNqYuhveFES>n{~8Lgp@OGd$@ujd>{8`#hc&; zmDNnsxky^+D>IZ8l^QeZd9gqn`&3lv28>Nue=SYf8Z%OeZGrzN~7a1 zRI5jckG|q${oyH3EBNzFaVgf)d$KP;i=GVwmeQ0Staa6cu8M~<>#(K)yui1bhpOOC zWd3%EDdm#azh60yX`($JJ8Mf9!ZS-3;DuJsCc5jhhPrlYWbkeS#KQw3FYM)daAx)U zIZKbq;nPb^%7#46m$bLchIme$dhwuF1BZpI-8jd!Wuf!)RA=91INv*aa+Vb(JOHOA zLcC|=|7keh$H(87FHGtu6jbrLj>#`PszCGK{14<`Tg!<#6C29ZJ&#Gk^{L#-2Wgcm zn{^yPX{y1X2rMAilo@dh?-t?ESLM{zmZ^V*fbn2WesK%(9Xv z72e#iob#V|3F^vwU*^=gxBWf-oZUYdFItHMSBVSgLGFPRNW z2F->-yM?$vDSyUf^;J1V-07}}S?3DFg7QMJW$mM8{xnH%0v+5HqUJ+WDa~si320~^ z#}w@N{qi&)s{%YH@}j`?OJBGA=hJo@nKF^TF`K;_Q0bXHG;!H;vK%9(-`08MEozx(Lc}O4{)=VIhp|Ps+KehABa%m& z6g<__a-LlLsXgCW31G#28vsXwPUR>Fs4Fan7cAU}&%-Jax#FJ%-usPSg}sMHMu7{} z0Sn-!(%n0NNarxibzgahu69?3>&Ml5oBiBC;hW4)sup|>^f~-2q(+h9F7FW`&=2;r zMzCL@SeJncDmCYKS@;t4}?S zLf&_Fc7~eHXKLlf??vgaUlYKtLZHW@mn?0bY57&-)8K((!^Xv*U2*B{vO{QG8A~Q< zns^7KcXyh0O_VxOg5>?HX?&~xm3Ty=O;?4sJ}a#dZS>Q=EegdLOdJuNX^oAN{NDRu{#l`TK}5#gk=2Wc{C|~tW|ry^Jx`ZP~vSZj?vI7f8Q3#Cry9S&KY2~NP*{;A~O=mQT}}fz%-wNrq>9E zWcZiM4!ebAp@O2~GloYHd3)0Rp69gQSG!AXrfCI{xe*2pAh7zR)En-ma1U2p{8Fc5 z%RjZ2kU;b~(n8Y~;zG&OqZzGX^b1{xs*)i*K@f2ZwMHbY((C zh1enVr07C_e?c-@afT7lb)~X#c_>YInAoXKa*!NMO@R236gQz5GT%ZxQnw&Dy>Csf zr^58@t?DtV3nQN9eyOH!&mzdwwhtkNVw2Z#goo*<X$lkak_EA+%?dt)o-28Mn+Ip`JEDJ1tZLoNyXAhj_7$ywZ4&*#t08G4RWGv= zV^Q+SV1|&bkl%8@cxpu&15C+3`6MH0Z<8_e;DqOGK)`FftPf)IO*tk#5TU~1sbOhh zM4oL`&8q4O^0RyQf(X!0@ol%We6+k1$4N=%$KrXd=_qp#FMsqAvIkQLHP_FKzIFtY zRor6s@f#xfNwSR?r0EuShvmH!#*g_g2rW8gw&q?;lE`$EqZvi=Q#NKh5L>lag{Y5p zLcb(Lw@(5+87l_v_>X*((xA`-HmSJSN-2yPnjoXv1b*;}Uc@pdDJtE?JT}#5w_x9I zriqr-VEy^%x904gg2I`Kml6!F=`D0dL!R${NTz|cUam4w(-33;p5`=60?QPt@$4oo z`Q+eg`aC&x|4iaMutSBWH}5- zNrGdJ>`G=5=IONqlBo!QD#fEU#cIXwh+pQAwx3@U0 zLy)7%9G4P^NhJ2~y9p~QY8uU0VS!)cv|gS$hSwf=59AA^o&r^lj?0+~`G@*4JJ2p( zKw#jD?W zn~aK5!le~l@H^#0ZOgvJz$YZSr-W?(Vq8D2vsCKwYP0sHS{^E7DWB+r6Nt_o{{8-N zx9n(CBIZBisnZy|&S!7TCurhYSq{;32}LL1=efA(v8&$OwznJtTHpv)bs+n~EOYcANdOMvV~a3MG;K93!GM*u_mep344^m&9bR=7I8rM^fEIOR z|7SHx@=(?w1ATV>=Dn3?fqo!^1ohz&Y#gBLyF6sJ29Da5z=N_Q+qAQ1Uc=E074@Lb zDDO@8CFwmh=x&gqTFlRH?Zuo;D|l=A;Sa>?jlXvs0H;OazzZ;3L(H_| zYQnR7vMI>lg1kGOz!RFFk`%UT@olaoWSbS!xEw0JEO!KBO3BzF*zE#=Gih3rZ31n_ zb%oUg2n3q56@OxaQvuE#s;{3AWhc5g_gXm`n>qJ3?jCuz505{dc#G;Lp*fJg(L|JA zl7S%5T4R1j*--Amc&~d8kNKUO5$lZq#&Yy9NCMVpv0y)_sKc+FyrQAg2@;pfPE5HI zRDZFQuk}zK_2vxE@@b`+xehOcbsrPXzW%(5CZW+fjG0o^j|!t6wI1Z8*F%G%nqs>i zR)1~ujFw2W;|TpCf=@SyO{*TbR#epJA`pU{dNH|(MlNB>*Ax}x+#$vZy>qpt(Iz78 z!=N4g^4G7{fG#hBK&4>-N^SH-sX@<|zSHlTlfJMW%gs6pgUn#{ZB3T5oDzOPuuo|<5_h;*VmbAdJV;33&mjf|x3ESJ5LB#X#>5z}9ml{Zg;qIz!nrTb4E zqp2H|-eZs5o;<5uoyff>TIw_wl^c;eyaXZY+l7I$X#J_u$W?!?{P0 z+h^tf)VB|!AUz;)(U?aQAXV7a*M4zA$jAysw#*8hIA*eCk215eMJa?rl1-8j zLe~90zw2?|_wSGEaXqd_*Ducbem~>=dcB^n;}7AUX_^fWjdMF&%H16^T?=k0uMG8;Cta zeU31ueDmVYNB+{Khq8J-wdOA7rthDUoiNtw{SZ_f22+*J2!ac;%ACj|vS}Wfhg5^2 z_SDN9MS?QVIDZsg779v;S{8m2f%W~ z#gZi@zvh!VKe42(X)VU9>djs`WZ;*{zRp3z6=7RTgaY(kHA zK*0hJ`>N&lKPli?foak&P=YLFH^S(0Bo9IG`705+B>^V*ljEiPM@uIMp(k+t0SYPs zI{*Vc*!AIV(o}i9?6X}JR$4j;)MV%haR!=341eWbf7@X{&^EyI+|#)W%0{C>wVN z)ZoJZL2ZOUKjf%j%m}^gAhfaqF5cAj)~y#)9_!;(`IBou13aKm2{#WZ6+Ph>=B?{m z_$2f@fUUFGKT(C6Qs@#I^MN(sIw+A)Tl02&bd)Jt2>|Rc>tu-rurs9a2O!(MT(qi{ zB2b_H<@VL&e{OJzfLKpYMXJF?2z15sZlbKcwj81 z2zDNYw1ErnKE%!SgSVu?F!W!uwTSE4UJ(mhIH+!IZNYz53n;0QCEh`vhk6e}Qud0J z6sSU&d)JkxX;_$}cJg6wZrR#u9GzprnKVE_OifdBx^*F#V|zk$sG5CNyg$P^m3 z2Cfm*A-L7}Wl3DSM#b|&w}^zV5EBE_<5pp6*ov-00$eC`zn}1hEQSqjpAE1mECQyK zIqInp4MG?*_9lm|CDCPek4$>tlTE0Yyr0=n)WNwg%(IV|{gg^3x zef;rcpMZ)<%tNsK+C(gl_T5DYF)Q|c zI-Jvucrd>YSGn3hlw2$kOe$U=ic1fs_5*3jvV!^i;~$+|cgYf&uWmcD{0(>mirx!6 z-^rKVBaoPCr70IlU8Ig6%W{EE&PHD=mxG4xi(}zZ_)wjItJ|lApf~*LBPsUhc#==s zviOlChXn`zz48_!i*3_S=UJ-rZnx1&n`k@ECGNF8{mnSUr@B6D!!POJFP4Yy}8C4?as1POWoiUXE{%7Q)YywS2lDWNYv``#MOKlW zfb#WN-4(^yPR6wBE$9zIs)?9eJ>FFlZr?-KNeG<^N12u$i~h&Ga>twCfx7>DVtJyF z@u3Do)ryj+>tM6|OgE%;n7TE(|Ni>g9K4EyXD{^V=h*b&+t)28!J)wHvu{k#3teTM z4w>dSgoFAXfemoKb^a}&*C8ZTQvLUS=)pTMl4!GKv;x0dXXIN;FkD5INV;|!-`+V| zy0h%vcxUR*8lYtA&ac%BNH2Vy$wy~qB)u5@fDS(OQ%TKr!s)@r!Y{-d;|KBA_k3TAW3kTW zkPrq9Y3L%+Acf&N@Z19^y-=d6AOPmHU5o)Ar+yY9JjYC+snYW07&xpNt&S7nr1cOa znHwiNH&haOIqgb}Awl?`R}LN}6BDRV6?w*}Vo)}5-cs!Mt`#$f|6n%xrA(piqkZk$ zBO~)InUQ0gVzPsf<&_KFo-tE#VE$JWHc6Sin;K(x#7z_jQLSs&ECrbPlix#Pd`6pO z(Bx*L@wYQgB{zTmYt06m4tn3Rv~44=dba{M~T9@HhtPQH{Ybx*iF0#`d)$_A`md+u!%#= zPSFj{joP>Ei0J-2o-t8uDVlH#R}1+0Rpg+!v z8N`!1cR{JwO#3Mf{4Mk7!$Gio4!BR=?NMyBioW7BvmeiunU=O!BX>{(2*#7oH;&Hm z>N=Q%mk!8AIQzb3_>s{X|Bhtei>2KstNdNpq;*|zOPY?(vDER~nlG6~q^F3ZtI^m2 zq#G6}DAXD+@?^KIx!(axp3N?Q+aG=w%cwj^|Pi6j^0j$@MQuLy_ zKu$b!bZ#jig*qq9nN-HSZ|O>1K4tsg=sS_)hoCmkQ%km8^HW^3$;66TAcD3)k>AKj z(PA+1##^s%WM{275uG6G0Vl>Q0OWw61-j=IUVv_gFOt{ffQ-g^|w@6e{^7iCaV>7rMd(K1c7%#7y{nANqXpkK3XHBp1Uz4^APcN7H zH0dZZXbcCuk!QMPlE}S;{T@`6L?`nzP-JEm{!ckG|3HR+GfQ*F4@`jYH`xd<+fLyu zAPdB@q-;cmzq&HYA(_mV?@Z~9f&RJ#l25fu`T+O@HF`NHiA+T)waE|5mVm zKa3uGbL?Xa=pJV5X5jSkZzVeE42$3w1!4BqdWOr7mk|iPGw+MpuoeT4vS^FXouc7R zw&HB4MyPF#&bBpA?u^?mkXG5FK&GKkH7$J zsno}(4&RI<(yC7?+cROy`0)_z~rArfR?~r3ko1Acn7x#8A4bfudTO0oDy7% zaAt9-Graf?69dBsk<^P^fu{0l;AF!_M{)XC>14mvHeT9`PJ1eTN@_ycAq2NZ$`$!4 z8?UiJ^4CW@8{)O{1w^a!bP%KjM;4nElX(i)zu{HzAj98|ROwsvjz8ZUS66r&X%49~ z7`W}`D9Iz9Wo0e-+nAU%{JxnC@O*vDO!jWT8<37<1^{vKN0?2Q^Sw1D@X@*F_ZGQ| zN&>dPiwDy>8x;efg%S1uxNJ_r5VCSr(7LI1%7a27esJ00KeiM^&tYVd4(1Mz=~lM9 z1eW&bX3p_*fLH*o6U;xZmpURL)>klP-F$J5Dtc3K~q;_%kos5C3)+RnIh4@aMK1y_Zh3Tw{9 zRo<4?^H10f&Q4S@F%6X2T7)Cb@f!;8ucZYrojT!IJz!5bE|}RcduDg>oI?^zz<0V} zG#%CrcI7;{8^nuzS-ID4vVWfN%nsym~iFwb_SlY)*NvKr}yT(86QO57(a0+a@qfim|Y5%T=EBMEI7zb2dS zdpbW_CPXUjgGmlxgL}vkvR6`+6|SdRXCVW@%shy{)Z|gCElV}}p-m3I1xxgs5IqwU z+$Zd#IqX&H{ONVIkTm7Z7>Ba+PgGxyML2`)LnGcS1+*rTi$AIbf6k@9n2@o&ZZcVY zMkT?o%Crm~c2V*C<$Jh!7$563c$7tGKEK2##wEQN@=0pAX!QUe=jD0YgNMptRnKkk zE*E36w36!Hc5IL=ya$?mM_@pOOc4;G_z;~?q;LWrVw}j|d5#k-br;w;*z3n2`~luy zL8j9Lm&D%eL+~;E1TQbhRUWSoz=W!;s~ZBD;^TG-*;nw=!MS=wIF5jjd+GntHE0@Y zOaATk$_;E0dLSSo}kOEkS- zE_X@g{GS#inOB=DgQC7|E^4_s%r#I_M(B^>%aH|t+3gD$>P0Ft?!+OghowrOtqgQk z?59+&=CaoRN~vV2T=^p{XT=JszCU>`RnW3Q)%NjU&>L`&dh_&GUy9O1lD;toe2t2} z-`nN7L%pgQQ30hZ@@ZuLxJ&sBJ~ux`YLH~fl}_?qAm*XuqUVW3)i-M+bO83_d9$67 zfj)f*coc0(Jtf-bcp_gUed^*SMJ-2VNeMD``ZTY7N_HAuy$i?0Z!DWF@=W^}O_o@` zMg9VBCZ1^9@p@~%)a#XIVF^&y$r+`FILCIb<2^0Cw5KvfX@nO_6Ax+BTTE}qo=D=< z`0k=!HZ^p5g|9c`Um)@0^{(lT3uj2pk$ zEjB}#146yv;U|uxPes5m1RoYqlL+uKxX%4&LfI+N`)?QbZMh8nX|!?Iwx^%#GZJGo{9zKSs%>sm~DpOIsHB=xd9H@ zkFb=(9{)h_Qu6z=Ft`BsAWUIwhgZN-G);J$;24g=dbW${va4k~ilRjhZD;xiq zZBI--FrYa37^<3r4N%LW>17*Kx}Md-_PMZ83`+TPtl({G`D5T(p^N0sU>|jSI zGu;&s-9EIcnwg-Tl~np%8bNY*L==wY3_{xiqBwiMJ4*y&8-N>_FDoW~6Z;5titdKi zWBmmTA$NXAdB1Qe;MN$1yvN)-XwbEtgRB~=H%#BCW}>?;u#hi(Lwf96luE;e9T%LI zyuirI3qnLrY^b?WLGm`~!g)maO>@&KGg5z8K&N--v0ub!j-S7J_ZHEx{4lOhIyJKO z`N%d}A7dZR;`^b#{E|qnS9feRGP*vuL|5*G@(bx%l~eq@h2M>)xvaz&X&CMmvh2naQ@$y3Q=jA=poFR`yY8DIhC2(l8 zB(dX{{W{fuL^b8f1;=`$bDQ!QJIOpa^~2)PMT_eASCJYm%65u~PiL&J-y8IT+p*vI zA^BZtx@hL2f`31#wgvf|-NNff%?l{i3TKb zFxxor{rzoX&6h9_hOr66W6e`K4%G}D@3C}Pvcq*9{VN{C>#@RB{}U@{5zAn1 z%)%qUOMIr7^HClEFdM?qeQ`*I8FNKa-CJ?`s@@g@butNzJSK4wW(>DfDU+3JT+dtJ zc+fHSEeY#;r7zeA+;4IHxq$N&u#0wyv{6U!u|$bAhJP5E)f-S>Q2T6{tfEbShFL`C zOHl7J<)dR7FU#Nh;b-?n_kwdKD63{HZu7al3=Te| zQmB)-N*$KYS+2}S6W+cX3})Ii22H-+{%R&wgI=h zyPQh4wPNv)SoTkGu-)knC#6tOcX zkW6r?7tMvF4v#Z`+0z|UYc>;rNMIm@I0&LnF0KK>b|AqVF5NjU%)<~$9g(CPhG$7T z#B?}sjfg=iwD30J&hlSX_vGt4gf=v}f1jSZq?-ybgTnM@v7dlkX@x0y=6{4WC~Z@# znTX5#@dpwZ5NrtNY=Gl9l-#}pCvjd&!fJhBfuheC?u{02YMb{FKVZV3&`nfa+~J4H z;FC%yN(7`J;im#2-w|@ZSLxWLffUW80=IX_T12yYa7Ic)>nD^>9}sHHK%2dWo5vE2 z=RjC&0$o|M$Hdks3CG4ki|jpkgTK&Z8r_!4^GP-}iXs`!ke-DN=*}^ta-g`7lild7=<1`cvoWk_-p8;2bJ8 zyV3R^Faz%J$7pRe@Ua$+gmI92qdy!eYLoFXem6#vJ}O5l!m0bpFr@56T8i4J7BOmF zX-Hl#X$Rncb#Cq(iqLlU(ZQmIrrnEw+)`c=z_sr4FNsag3pw=ZBbr||Nzy0V?reSaQ6-Fq>|!}*dnJ;Mp7fLn@=@}sX2mvA3OTFu^rS&#L3}N6VP+r& zbj`0q7Dq%E_#;97Zb=dJZ!d;ZbyFo2D3#v;4J113FK570Kcg<;oD-PU09*g?tl!Cm z&cU3qi_VDK)#veHV1X%!{Pp41rThthSrgq)q9&>xU**H-LX-O!-6ku?R*P1Tap5Jl zEb)uVvNVR&Trb8}VT?9{UCmjU6pTHPn)Gug*0 z*&!zf)1fnA6tCp$CZopr{+f^ZP;%)j@f0;&0_sw+5qttLbzk%SL~%`Z^05;g>NHJl ztyj@f-SmETn`L>D?4Ro#FdHJy7l@&`yxdqRA8K(?hxr~NabZKQmtqO)0anYy@>;GW zU*blkijtlxO)sf1^duCr8g%;SqWef>j7q+k)=7Q( zF^5MO%Vw*o0V^6DLvN7&MDeWg>|Z(nU0q@7 z#lE4bh!_XlZJrcEG*_$o*9GM*#>XnM*}cS(PUHs;7DuPMkWn%lNl^ZfHjPJzQJqeh z<3!Bdi6DONV2(%I5=yUMl5*rvd1U`&Wta3h%!$8TaI0m0q;(Koc*QQ%H|vJQnyYj@ zB-|@P=2BU15k*nsH;Zn_2e3cJzQ9sN5x-Buh=-eA&|qMqvL4f!S_Y%Un(K{byPg=r zY6!rF9;5b^d%D!~bmJATByzt?K{2rRU13S$?|knwp@x-)Ma6*706w%EEXJd30QsR5 zE4N-e8Wy&XyGH~w+G)*VJi4)x>NNk~`#JeW{{l{ZxcQfq1dE+4p|iEv?a29B<)N_x zP6|eByJOqf4>6(U!|KPIk9#@%la?EFUtiNN*;kOqI9|hWMILRdb(-OSKQ4X>L%7lM z@Ia~It4dOa4X-Xn9u`fmosYIn=QS3~J@ar997s7wh<8SZ?AOm>?%6(Jmtc_hM)elI zD&nhLZAueX?2>VUD$5+&!+Z`z2D1CNIxq^9Frbeq%nVB>z)h|phq{>)8 zU)eJ41m*aS?IE2lsu!BBSKv|*TXa5^L)2oz*Qc7yb3id~{nK!4_KmQ&dBV{0C;Zrn zB?lou%=xyfhxHk6x1+$-ZM&DNl;N}fU)zTyBb1zcbZi5fH1^xYip-_2S42u4g>*|Z(eJ=xu3z+l$o5O)`+=?7LtM(<5p1UeO-qbVhtJ$wL*|*x zVRfY@qHg~crlyJ_j5>i`Ci08uJQWku$sso>cS zlA9!?dA_b){eGTJWkl?gn&M{d*y`+7`x3hwTMOSGzj%k45D^&Vt?tZZ0>GQPOTCU# z|20k51~zW=ordZ;l|p4cAUFzBX|yeEts@JKr2FJ=eqa5kn?G^*`F`sf3_QE6Pkegi z4v*yGbmH#+)aeptDDD>h{cO(jW>^>ywuXW9@->3*rq+SH-w)3x8=r@nxuvrK2MfPN ze6lTuKGW8K@Jq<&IF?!{MKPaUJL<1^pUA;V_&iH(*k8t+Ocm ztcfQz3irIK#zD8%0FF4-e1n%`n{6Pxn@jy^g#s|#JluaFqpClXgr+PM1KXp-+C2bf zg8~BzBSc={7>85_^4&Y=Sdc$+T2Krt@V*w{ye4L2K2>U2;4^{Sxd#3hgn~AEIpoqG zszLDpck=n90>hb!+wXwulT(y#I5te<3JID8v5M^rE9*M}8u<3=!QCU5Iw=W>`_Ob? zXUuLN)&#FI?t|rs*oy-e{A&TKHx01yF`rv%eZcQF$s73t8soXkf6{cpFc*YdS)dQV z$r6_S>lGGcHzRn_0XK>#!|&I)e7J3T(-hi`LNY_GZQ#A{bN4(}$+>&w@MyJtW5$8>@APg0Y)g!|qy@~mkNuccwL zX6}d^y3u|}q0U}cQ=7z#qR=1_Ci<9>M4xVmtU1@2cuDwas_f_Dd^m`h3CTS2rCM8o zH(Fk>xARFlhi!}eX$5uEjU}u}Jk9x)7}-Cg%&T~xJ3%h}Svr>Yf4bAMjBdq?`^*edAuJzFgh z%oKjBSuhN)L&)_@VX=>LJD`RaOe-}5Qm&hGJ@8|Iq}|in0FNxp+$+s%cvJh2AnlRh zun$S^TXAbZ6fyY>Uxu>5_K*ChSD$|bvr{pw!p}d#<`#BNPErzXx*QM=ga1uL1X5R5 z-v5Z5uu<=2H{6+Wdjl575fbLYxmzqwX<1paPh4AzEmRG}u3dx6FpRX|91q~sq99Z+ zXy-(Wbf!Dw@(OMWXCRgUv|@Xh`C|iFXi49a6vJy-oKLR^v4vT>Fx%6(dH8Q&0PkL= z?(#(S`b^zxA%0`!={uA`iXzhn0SuC2iD(TI6V9+&k*L^5-Sf2u*KO8*>D4MwLoljH};E1-SH;J@j5}H?iXx!gG3Mve_UN*s8PLlb?*c&ebr(BDQFA;RI#jF3oBhC`-**Pla4wo+YhRvFNFGt$K zaq~eyH+VI!S6Wdzu0UBe+{z>gC2tU}$0TbSFdY%#mM_Py0qih=QTFe+ef%9DvxDnw z7Cxe}8=Ky0XpQOIgYz2s90z~*o-Jqjd_GfK{IF2eMhuc-JAEW{<;71<$MF*PE-#GJ zg?##x&GcG`bmN;>pVS3U%XV&RqaGG6OP0Yy9cCf#2lKN{g4i!@#K6t_ftkp#p}p2N$B*eC9m6(77@NZN5o~-9dP~^I$fu!|*jO<2wfm$h z;?&YNz~m5k79c-eAE_n$>*Xt|1;B>_(lcC*l?}wMTK{c=b5`BJ z?$u$CfRkq-4O{jv64{P=6#8;(OIptW6f+>hagoYM;pXAmzU|04O~Zatdf7^3Y1gnV3xt(`hk58Np$?VG1mWzLH`e|Ye&ntC6ZqmM?9 z4=G5I1XE6P@35ow5-;nqlGCUsmy~x=mJ`o^BYq3*+60mm84Zk_fC180`PqfwOf+mb zo=%Tq=OPPVraD9V;cHGEm3jV!!bA|Fup%Ox>0>RbDT|O95Q_(*GY60v;LeV+ssLph z`U2s1k27on51GygT;Cds~%zP0@Z7-U&<34ChB2Pc_N}H&?|or>`KX+i$BX=hV)y02NpaSBwoq+XF;0u za({YuHjwOq!~kwv_!H!LN~b<=Nyon;h%u%$?yNv9_55sd9oB7H?Py^6fEx=0aNN_U z5sXjW|A4nQTo#*DSDo}*#gc|gICh(C*W@aJ(Oc9z^5i3#xu(TGNoyyagk;dek>2Ap z<6HWF!*AL*eYyOL@@5?IJNcj85hGF7tlzy>erM3S7gosiId@eF%d8=Jqn31}+@cLs z)xWmijD)cjxI;gj%TvNiNbCZ8 zp>7g(TrQ`UJJYh-6Q!l;5ZTLu4YCGYO;ENp=EK&jKt^lH7UVNBjfoj{ySfgmDq7=z zVE%b*2&kPB9^VkOdU$kGW&Q~E+O^n#(_+Ro&qe<)teo?rvtyj$>8~44L$|Ymo;zl> zQwpY3La7&7&seoU!ddV-B|XF}hU!wVTXXC=W64nL0lS!`(aKh&QEX8QT zIX9ehXZq(osisP$!d&A^Q2bqCUbB>-#!gRa>*?tUr)>anp4PzltK$KgG>82TF>ydl zkZtg3FdSY6qI4*n&_y*Lp}VDb^3qay6x1zt-j3&mU9Sx7DSXJ@xEyxyaKK`dzwK{5 z@X)R4WCT>akfa%xoFpi@7Sh}=5(%oQs>)NUSMcUs1uQFC0}KT5M4Cqu^H>mnSNufO zqe~k7UG9aHYN=-`e)4#I_KRO%&4fDMX#xl#WYYn=>M4;V_S`L^aMoD7$+3ZwJb zw^T_C4AII9TQP3qDQ_HByKtfv#Z!vkzc#I@8MFkt32^L%FeHK+Eg~WUK_tj1JF%CK z8J0k#gIC{<=o*~33E=Dsvnp;xI6U$Brf{l@ z$)l#FB{U~hmxEn|fX6AX86a+DgF2lmyPk7S8M6n++uLH))d0z|EHVDGFHMekYX3?! zcKL#V*~>A5{tvo{cfXL;0Dz{Ld`xJV*@?$Z`p!9*k!mr7oy`+o@@pMim010l`)QWn z=J?NkK=5ixMY1NC$p`O-4+$-Jw{qy?ZtMXVc_ZjDQ}QVmrS-~@mF<8xNpnfSxDAK> z-paEBde1AxbhbbQ7iI^H8+1VD{{eur6?7ItO$4}?AjGh@w+AOD9*s-Pv9M;4zVr9+ zsI(HiUIvli?0}yoSRCNOT4DDGy~i6xVbZ3??tjb84O$Kt9=aqaCr-8V1gAzOtTvj? z0GD}jx%?BqN-A%KO_B8-+5PsewId@Jb@EHeqoc=XrB5W;Cn*(>fL{oQD@AVZ!^t`L zX#gt-4usW@|&DsE^;upfnGs?7PSYcl_BlB)hB8SW>p>$j25Ro zX0L4DWuTS*4&Q1{kq|mXT1JAUvq}bMf8nC&Prt0LyH{+l6qK&7W(ZqcddZXwi{Lv< zm6K!reT&I0|7#n6ebS9CbZIrQQRQ`ca%!__1y8G$L7kp=qcq6m!&kKFRSew3&V#&H z$KNFkJzdrKvc0c?D?7OcJ~x|}Q1Mo0k(r%+ zor#C>JdaSyp+r5iU*xTe=o+QIfvpwWYYCap1az(C_oUq~;_5weoFW7U`j)}`;q&Sr z!Hgz7NDvP^K70g1hkyQr8}n8ahy-aOzT;d-6+&fw6p6wQn!H8|R{7E11le4fJ})bm z)hN{)jaJ|`2v>p+GM;run$B8w!N9Lr!JFJ&Sc73t7m~o51$Kl)DuFkD`5v+G9t=`6 z3-GH=*3${DD$Pzmk2qgChjrd>=rfaS{WrHoQC0_+BDbrOismeAU+Y~DqA4Owr-y29 zV7~l-lQZKNu5bV88n8bB(`^*6H%z^o;I4zG?ED8WYj|v-ITHGS;9>^23yT&%k$ZB4qCYOyVulAT?rgovE?w{hti*peQ6Y#^Y|3w`U@8ARfX?rNuVW50HH z+0p~t)?3wXO?YQU~41~*l-eTOy?9rLM{*Uq1~lY|XbNljJLu(pzL z^!U;QfW)w~MTq;?(4EkN*G*PvC10mkbglZi=ql1NvrGW0JA44?EERe2*3?YNOkit5 zzrlO5Tp>jGYU9D*bwaaf57aU4y|czS&?~~PUVCRf*SnELRfKE%8C$1u6`u)Fn7!z> z3izE2dE(#KxLcZ-ywV28-pjmF}+5D{h_*OP813yrgImTf$4Q4O+pVOxXuBE1bZcz?NkiN$;nSg zDFR=+#!0Wy3OGHQ;;{zQ>WRPHZgUDTJ8UCzb5DGe{dwWN8#l5xS5#+tg=O$lKx_0d zzNJ@4F2G);tU`K*of&(BISF$s977uRR4UPy1&K&TQ=V93`)OONmi;kQ zw&n&*5Ez4)l{E!RgwfAgjfo<$1u*E&tuRmy{m!_kmZUXVCzUp6C+Bkmw^j@l=&hW3q)v^oTH+>ZDLZ>Z& zu!9Xc#>75)WmIP^|B|00ySDvtD8Dpm@T_L3&BDUzqDM9vXKyY2LqB4WD`(P@?&WE_ z`Jp_2QSKr&a~Dw&^hCiP2dgVsRtYVjFj0x=nfu>Z6}p`P6+<9iRDN>C;z%<2hZb-@ zOdU44_3>Gua?DR%-!l?n{IOw}=;}T* zCOkTNkndI$VOUUZRAN{hk(bR(sP>dE8i8OO%j{k2vt2_V5_x5CB7{GkmaxPMDY&0; zrTMA-3e|0ux9tDGDJHMo6{_ci?Rhj5Cy{H)ewMR4GYxs`*D*|_3NY93cs*GSR1ml| z!sUpqSL0%Zi1*`?ADoB>aw2XtWc9xW{$C}G?#6+!|W#PlO|%tw;8keJZ$-rRrb@8T$X)lj+$=osVqrxaq+2A3T_AD zvnmFxEl#I_9o=#M=%Pv)5%j=QOso|UuY-m!Tihn8~#2# zx=MiR?gL1yU0_{3|6ddPxPZw=a-K7e7fVZ_=^#gK`*$AZPq3T@gLz6ANtntem$;5r z#RsGI$L8kW+BZG}eCR>v$Aty-+Z=`B2d^1gFPxue2`2rbvv&Xg*V^bB3$Ymr+Ojm& z8}%&)O<#BD8QOUX(31*NC%0SMh0njkVl*fQ80^TQuGV{2=}Ld%)WiGe&+~X8qij(s z2Fml1S}d_JWs2{#-6LCvV^kjI3N<940ZjrCGwd3KtjpUduR@X1a)&uo))#P*@%DZh5Qzb^uO` z0qT`&t}T!nsetvV1jTch8Rp&U-Q^1 z*K6J2*=j9sl)|}-Z>4*&ikN(;UE)ILqPUXSL-3NC7&U|%O93U1M%h%}w;Ch^F8ZCM zZcY+EQ%t0O)>%X@syAY)o$z(y7&RpiXZ>;Uk@?z4zp<_2_RTBVo}*6{-*3iwqV(o5 z=s0woXNI!m`yaNiO>6($9F0gOOFwn{K5fK6$qARH5k{>*R+96PssZWn?Na~bri%sL z*X3KIY~Et8q?C@bi;8=3Q~ju0nc?@_!t%bi#?qpAho_59f^5&Y&wi@Dw%-_UJ1m-F zW2(sq1hrpICx`b`vynJM95Ve_1Nfg_dvkWA(pYh$?$-j9&QqSURLm%^?fbQ2JF&a@moJwULNzl)g&*lv*5taOxSd!IA|DmHc@Nunh zFb}&YHt#O#teVK+W|CnFns{&vm8$H82Pz>IiX&p|tydfaZXS;bDPeMux74~Uv8j`= zC_AEXZ0^*YB}*yNYXA?auqLSLB6!-nQMTo`o7O4t=!drG7(}d@E3LN~j@4z^ z>fGC4s&0>OKKZbeW!)jrclWnChi&D*+CZA4#_fmM=G9qU?QX!xSJ3rlwz_mCWeL4v zAJQ%K)T9EK;5Hu~Y?B*9046;1cND+yDdJ635uZ!j+ws`*=|efVita_M z_k;;);7j=n-CdhJiob%Ql5#oo9!e{I4})_r(qnN_Cm+;+{Z|0jSia=_;gqJeMU|#P z{A$w*k8C1?u7)^S-YUC#(4Wur*q*TP&KO!7bNl85E9#IJ)?l=!NNOM}51 zJ?4`umF3|pgqkN3vAS;73mp z1Lc8ueI7a`=3|07Pnr_`(qIb)r>5S0ODG$#yfmbG>zM$FJ*~re=f4C&=*MG z+N!b%r%APtL|s0i$33mavtwkO+omaE&koBIHRvBasPbcpP8tR5QxtPA{j%tk zQd&c1r|>|(Fj0?ns@IZGbPi0ZEXe{l+iDx}ooyGE z%(GUmQnJO|Tf)I|!8L?rAm!4qE4FSIK3q2Y$`0&vzD_mm9r={5-C*++BmZDvwV@-+ z^`W-TQbu+}G3<$P;gx1B+&SbhIydrDQ3tzDJH-r(nzJ^7Cr(%sp|dg8yUCnZu62jV zs(e(A>GhTI7q?G@9aM?}w`%ZD;8!;r%O-o$(G_yh3w4}fegVfgoT6xP$I|S(ltErI zG<)^L8nJNe#iFtNv%fyc27A5k(<|T^wdk_!sGTWu>`x$ ziyDf~DNP*9hAEl`FMKMEUy39b%Xi+bjXr%3Ny!CQv#!Y2uAl#^1uRoY^u(>l6bzrt zFPLv}%=**T6)lBC&>Uu zpS4L8x$;6lDI#9LE!neI;WJ4`u&oQN_9OM3(2*;rJT{A-k7@)gJ3u3(O{v+Xt(qaj zKg-`XvTb?W1wh+vda@H?BV(|>~jQ8p{=%m{CBRMbk-dI9?9NI6*}6ApmVn~kY`Xu zR9UMHd@_r>+@|#?r;Ph7Z>7UK!!MlDSwv45Ci@Ast(3HCmWO%xHg)P66Q#Un-)^vp$!u5jU(R+V3$hNR zdm*`RM)QT#ZjDY1BZDHNCT*Y=iv7$jF9z9+*iG3#==mtdg)?NlZGqnOe}bly2Mx|i<~ z$+agZZEqy#s>`I;52tI^@2^h=meq09b#wbtQVJ9I-?ZO&J9GIjTJ9pwOENjB|4fl1 zZ@*uN?ytCh4asAj38Q)u`)j^)QISMf(|QDm(daPW5=+DN-M>@o6T4dn^I@Xyr>fDU zh?RY&0++|XC#TjWgZ~}14sHdt%_L@AP3WY(xE2{Mt2zEwAf%y#HN3qejlGY5%x8W) zf>S;w@0K~}tY!k_3NXE@T$LWodY1C(`e{W!>tc1qa&$4VK5aZdcMNy!o>J2zsO`BB znl45h(wz1&SSnojaXzV)zw;&CA8Cblip6R1*j)T0oIM`Rw7|eCboTFx(Gl5)EnsHl zke`d@V>QV2H)N1U>Fk}Rc#Xc}>0jt%(v7Z$%)Y|~^dzjJN)9lzy<{Z3d?|MN98RR(53AB(YRu2$mm zK8$|e-MVE?+x2Q>#W`JdEo9`W2HAo`pihNpNiz^vZSsZf^`+g_b$BB zvXq;`qw_8|*8dW^z;!~^PZq7e3tl?U;O&J_SSg=tq|^yw(#50|&3 zsZ`xz5X0s?DR>y;z*0D}@(r}np=d8iSqO&o30&opju7uM3NDdovhsJl5xQBHX+yRI zw1qAoS&1)_AGx$cpJeSBwSB?7=RZ25JJawWerz`H@#^8VJ1ePc@^iJ48{4YIy2p(P z$4Cu4X%CBuN$_Al=KO4;Mf2v#@swPv(^ehF*FPP3Xo|vtJ}+O)?(AUbFjG^Ia%ID> zKO8}`fycG$F-pzv(h?4^+0wu0gx^TtQQ!Nia*yu(P)u1I+%Ov z27gjHd**Z$`~x#mxPjCh9UXxR2KvsJ&m+(K*4I-&Brm*8NSZ+6L!ckhOhPb(`?qs_ z3Sv&+@4c4BP;sN}c(XSJy*_o4vp8>gl0zNd?lZ-S z5a_ovhm`Q(){GZXvrSt23rs20>KK(R``5ce@f9Y9x~p%YIs~l> zV&$E^pqX>c^mWneY4M;GhYNDimjqSbi1}xSa1U&d0z6;X9a#09**p*8c>{sEc4D zfbn9F9lSV-xv$^_iJ+ic@;+y!O{#z-m86}ly`?)V`HAM&L-wHR>QLDdgM#m^!rm0B zDSV4={cDB>d8N<7W``5(=L@oA-;@!UBc-KMxSD$_!@0ST5rO)a+MxYEnb+=zEL`B2 zfT0T%F;a3tB?hKac!prtypQVLk~Rl*cd9M)Bugf+Q#j-KbEskk>5h<)0P~Hq!QrQ; zA@=}b(S^veW$|?J{3t&5Yq~AlVFKQi7ZYv(M~Jwc`3l-hrP$I70|NrwCfUKh>iY}q zlF_#6!)0f`>le1|gag;hfJyWjwOBhCV$ylj8aAZqOrQ)px4;ZZ>Y0`d;;Z}gZtlf# zF=~chH^s!XTuNx%?z!S^N@?D?tSrJ`SDvysS?I2bXWCczy8B$UiA}8hWayy+66ao6x)b#Xv6HIW}*w}RN3(eC<9tDPt;9im* z41~Ngu&|j<>kIbIb1y7}+JpcS_4t>Q++7qzsXae_g^z|VWFz93@J~og9^p&$x8Y4( zxhLiMZ_)pIXJFcr?P_oP5^Dg?P}o3(Qb347UEfE<`l?f&|XjmN4B!h zP%SPghUbixBDID5SOCysSf9M@mHk^qm?)(e`bcGZyk;f%QzMQ(5He;}RU*y}{f;%! zw%Xd-OsAvZUoK4TT9;nAI^pIEux6l$00%Uox4T@9sYq@Faa#2Qj;ENIcyl=BP}?f1RknK@E81M4&*K~MX~M0b zTXiJG%f!b@s?XsJp5+!qRIcwOWH-?%_#+FC<$o2JhnHL-m1F6zZbyT?4t@eK6k)L# z4fqX*ec1ANXC}kW!lLSkpy?tqI=9ybqCnvam^Q#9qHvk%4oPIjz5e25|Dj^)C%w{x z&6QMlOZS6X^)a=RYw$-p?lNB*gsDBaa@24r|IMDWke%EAl8S@Pob%%2_D{Im<4uWs z#*Ia4pRX9|ilQd(PwnT6&JVINePx<-r1iKaEF7HI?KIowmF%90ofl6p#6(i zjIjU?mbv_kgkBNRUk$4s#NxA--M_c&k5}1G1Bp(0&=Pz={ngb1&{Ey}+p%UJusq+q zG5~x~`GUHOC0ayW+y}VD5zXI0B(@rR1J)QoICKf4paOcc(ypoj_{Cs$p`)g54{Ti; zi%4ClfF89ffyp&r7%N>c1+)Dl>IBW!^&)YYo?q@aWP)aA=k>@}Y6>%WH1|Da5!7SG zP6K?NK9l_?)mGz-Qaz`Kcio#W5B%4F@#qeDfIz#^~I_+c0u6tG+evbFz*cgB46}JD1K2wY!k0XXEqP1ZcC7 z6Xw)RBbAW?L#^R0t*aA@I)OfU&q!glEpK` zjO)8+D!R8vg3XDkT)S@NsiEY3&y!_KZtrN%n0d!%HamQSAaiPwkov_%epa=(<@8uk zt?nEiFg4*IePCfyjuFTI=I$;$pzuWFFRg)Zh!)s#a;>ucn(GL@l9!s@oaDGRdh=$^ zOCRmwG5iWxSe^#se0DaJF5DUWrwtdkvEm>ShnvWsKkx8eIRA60isP1`m7IteqsKzM z;@%lp*rsg4nfxv0-*0jM{{7rf?7ET>h?0Z)8y9`;%uzla$R1oqz4lb)E#Za50I?-Y-;DlK0lWkzCPw*P%=3`xbF$(_>q+9wk0XSJ<}ENk|5s zLngUDopKfh+gt|40NNitqUymeq}DxZSSZA#>geoMSc17Z9OOVm5b{*nXo3+wmr2K^pQ3Y89mtKCEx*4U!T$ zLt(SCPxMuQMsVVisCFqKS-(fU@9$T}G&8%^hw6Iv$7d(1dAfUxE$r;0 z4v28KTa=jTWb?~NG3OldugRZ)(vpa+)wNzUA5bwBEs=3t(Fkg1JPX^drxeii?T## z8D*&P%5L@8!#EgGhdq95G`=($rPSRchk#i}L~w6N9o76x58c$-`Ze*ELMPr` z@CLc<4}z!KqZdlTabeQ=GztYqZL!98a45 zv8sW&4yg~7(l#5B9y(Q7WvZ>oiI#KCrTJp}@F+=p@q#yIY?I30SJ~`ho>fA~Vwmy5Ys|wp$ zUdVfoD8EfYA3ecUjlkPk=9Kbg$Y0ioInHN6+GrAS+y9<1izt4Fcinu$KPR&ZwgM_i z#xS)L-$F8I42Yf&bEOWivJNju_TUqQePhF=p!7YvcY|V1<=w)$ot@_-{>T>{?bzIW z8Vb3-3VN(V!0h2)Ogv6kCp&yCiHfRfi!aI4QLzZ&LI!@yS8EKvwSsBvY!EqYxk=Ye zAHGH|b%2karmAWgyt+fQyAPJ%>KFmv;?bi=3Qh5@9Y5|R_9`^p{lqR*yx-sZX2z?~ zddFeERMra4z3*?!EtGPL--OQkWpHj9)NT$BYik=m^u~{qfOylpAuDdM5B4ugfR$!T zSk?E?vHRbD>`{F1OE`Jo0x5Of!?(#_%MMH^)S3HlNZIaOYw0g4tLYS!{DHFOTSz=H zDoZVW)BO9ppQc2aswhZ`>BiGXo@X7N^W#g=Ffg6b92Sv&KhtB`SE2Vug+7l_MGP!t z6ihqH)qQEStAE_UQ{PJc2!iCO@dK8U4$%FS3-pS<}cKi9;CGZvWR1SgMzxW_)ejMXe>iL(!@bOkg=EqUsQYm9a$KeP}zcIQ$9ZMXZnh%DJW z31*~>LuP%uKv|VXnWuWWK&iC*tBCA%BVoPtAEDAa7h4JUb)3pP{#=yJxU!N0Q$LjY#Z1`(>+Q33H_}d`Dd>R{1 z4g{eR`~Im7YQ2L8O|9ENeSsrM1xP*e7jf+GEWFt4rqxoovk(*%SO5lj4&OTP%3-GK zR%ddXt@dSs^tWCwy&8mjTW?>}kB&8D{u<|7INI@pVYBX;RFa))iT~K2P$xGm9Kwo@u}AvKhVC-)wGciWqhM<#^8t;LW-q}ZDKzNSrn+8P#w$|!tXcLliLc8ZS?d&W&UB7bX z=m~fJO;)gXUNHAi?ZgiSK>?YABR*-1?DpepV3&xfCCQ}0cQc1{Q8v;mVGUyCm1Gv_ z8;C4cVo^!@J46gt`^GexK6|p@q5rYNcIjP(pTkUpqFQ|=6I`=|h`|m{+s|w{mwRTo z61FD}DTxFBLn9`%0Rbnl6|>ALdp=QTuE& zW(FIk+4V{L#5C5#K5}}wL*Ab^W#EFAhQl>$&v_SZ!*VE=47FXJo8Fw?8Y`8OS~aU9 zWpyhF`8AG??&I(yG-MJh^ii%EJ>7#l~=l6(X1|XYM;7n$pzmTL(9bmJ)zwJ_T`)*?6Cyq*!1^cn1i%=ZcK26 zY)?FaF$benCK<<_PY2I)f;_rzTz@IPI%gj(Y^NhfWNhb*z*GtX1IT+M6KE!VK~-&@ z1{N1u2J|R!t!i(ds~?l&(YxX#w-F%tDSL`l9&(i1La2!d@Jo18|LDf;rRw3kHC!)Q zm?xly`+&qm0}F*F#(-3avw~>4Jn^e3$6qxiKr*_o0(=&QC6_6@>ty1vea3BRl@}^X zM^u58{Bzpd&x5Rw^r%H1Yks8BeFTgMNyP_`yuS9-kkLS;C$G)_`R3-G(#uQz_l(-l zom?$qVnM4@qBWZ)>Y9B!8gg9a{bvs5 zm_4`IBl*}ql#?TywP5V^;i>$$u4O$(R*HUEbi+sU(DL<0F4or9+dPwuANfkUKW8mD zOc4)GN7-9*2&JbyJGZ5Y?``gQd*I!)$1dXzs|N~~FRzTr-a{@@`OnuxVHK&4O07(geGI)$ zuPCQiM~~Fgd;XSkz2nUov)P!wsize&Ig7Up8bmHqqzq*))0}@4VImW)>xY66r;ubU zC^{o+#Jl!Gkd(MALsQH6L%pw^{6%oei2M-|b;pSUvC;-kTP%_`9~^3qi;X@ucR<4= z`P8usA%k0QN_@O>?Xres{ppy-wTyUkJ;~Q)+i$%*-SVK=>348T+t%ofufHH9@1i zBQY^~>c@N3r54MHtXuk3EBrG(c3*Pf&YnKHlX#Au!h~p;&ums$)xg%_4R@|NCh<@#*`=KU&AM2DaMfQ0bMwdgm!xZA@~`kIXCy`R=(^Zf10ESmeOZ8?zs}i|)91 zP0madjS*KKdR^h`?y@=ax7OVwT-Y#dDmo0TSi5!*zlUKq8+`1TL{vxlp}lL)Kc`*q z9EFKAxbx3SuKoNOl$^tD@`{ULgjxja8BoU^0Kt`cV-Kr>b$YYg`RqKX_drY5h~4oo z#+hvk!X_*T`siGzrIra$t|g_UHY_=fsECwiVW!Ww!ROnq`XP;r$WUnFvdyv9|MJxl z^m7Q|BWRl9&R^5*9r@ikT)Se|ODz>9F$PFHYqK9Bk%(2EU-=g-Nsl30A>~qE{29sM zTpzu`H(76w zOI&R=^00L0n{S>ONbj&M zG(H$KFdrMfnc3Kz(&0zT582&vo8L0Qbu}J4aN~ZN?R6=-5BXA)J*ilC^ z>Hv*-}_wO99KuR}zG=^a0=&T;1dM;da2VTctz&-P}GRVK!*y zOT+r6O4uo*;=>J)nKN)oF1?~JR->1WihT^rycA**fE?wWqrd-3Qk=##{;qn0+8v(S z+wvz>So>#1-uwQ}mWy*6@gSIpbC_;A;{sX7mw&yxX6d>5VWCs8#5nWoJ7qE#-m_$q zGbx^bsrc@Y&ixE|H=#+n7U@J7jV&5}QZiCewKAWr;78M+VCH!ijj5&Iknf0$3|8G$ zY%G`ifgV|AcWEG~$sdzWya!$bi|>(wQ=ErRv`UvGk7Sa;&niX2i`rVootOK9^tAW( z3aFlBBs=Xr8fX^uVeor-7m>dvc56mbTAs_xRB6GY8%-+n6ZArYmds``j(eD^JahhwSaYhwRdvqZnzb4qy| z!_Nq?R`%?iRcIgg5a0Z!>8I_q!w;IItL|0WviV39+j+uoNu&6bF_C{@TKh_M&24e_ zM$7z{UaFWo-9CXJ1VZ?8I^m*rC;uK2;GyvP(_})Kw|=)9kzca~@rbuV&~BF~nEM*V zpNLq!+jUu#Op{-EXS3TaVtKW1D$v22xTX(1b$=VfIC=|Jgm7giXP=+OQ!P}OWWysi_EaQv1LApY-dH0rFJ9Azgm!o>@e7WN@ zDRReu$ktJdoC+^Iym@>7meBi=J8wNw+AJDWM+K^PsB&nH2?rDpF*8j)ipiwh8WOdr4e98dsM#8_yElEf`Oe!R-z#&i{CYcKNgw#cttrO7JbMpXT7WsR!`@zAtm6)QaE}LIR9Y5#$ zF3|kSgU6OFw2|s=74rlPV%3CldIw^$fu&lxigq^cm31MXh_hGW;ZAhikM=QcE!H zNzU1EDRWo%Y-&Lh=g*_#p+x!#-o||_>TY`PD*+Xi>hS?7FR7{I+x%I z0wc^H+9SuejV}w=IF)LmCPm(X>7Rs%>xL+&knT&eYenkd4~m`R)`JHyUo^1jc@#M| z&mZbH2V^25U?(vruK*^N@SZ6eCK-gUc2iA>oYJ1E*+E*(&h}E>bA6{r^5@af>+QqP z6?%Gp0tVxWB(g1h!Uv1S@{=S(E;N3*R}I_&B&R~_C?`>Nj%cze;i9<}L)T|aqawp8 zk9JbgNL2mjgY`ULzUY|TTskG9zkZK)GO_l{HR&jk?W;*f@ehw^MSaYZ^<80h&eaC~ zUT5~LZ1TJNHbHjn`hX&6Wg!jS)a4UVGz`oSg0c^O5-wDdkVKS6scj@fFa8RyjNcuR zH_$M;fSU*D7=p{nUj{MqtXIAZlWAIe* zKY?~mn zEjP0;IR`^219uym2;V0^pJ41;Ke!J2NVJE=$%(+tiGnndh@7Di?S&>~fKj1zauSE_ z4cCOX4F;RrElBST`DnQcO^9W7bOeM)$xq68T%u4hWf+eQ3tAa$&o_6^Jl(GiBji$B zh!iL8*=bAHV-hUcU?KAMv%gJj%TjjH@M@tfvfBmbCPT(K*2?d0XR8-#8?z>u6SQ3OEk*FJ-PpDkbIUztrAc3PszSk;d2Jtdfj7Pj~d0hC;SL)2v}i3 ztfMl;R>k)D+bfcUvndDP-3#*b^TXJIi)^d4OjKL8QAOxPOC+S5*th?k_i46hpuGAB zX%FCOxYkw`7tdKKu{jgF%)9-nrDQ|VuqeYZks!ihWNr}R1^_;nr)VF+k zN8*$OXDI|;(sGctU%yUtwJBcTu;CTfih)ID;d^G)t3LxV7yF9teSHGBm`vcBJ>frK zV3^b4_4)NpIAXO-yn~}Gj9%@n+wf65OM^RHFWpqYlb(T@R_iX}()4Dx_e<1{RUm~h zDk=(rHfJw1eL&E!8i83Cz3^DNoRR3u%$}{ihY{7&4F^K~Z4V)?=DMtL2}~`2M!0!G z8Q;Hu2Zjq|0U~=`wQW~R;OsK{qx(}<#ZtP{-dI!cW|DNbYX~m-Ygi}Vf^OyrctX3y+H)V;&HWr^mi0Z)*=2ylzbr_zXZvr0#X;flFi4#H}!Nx?-XmO-l^{lm3WWzXQwZ z^}%vjG?NaUmwiq<<0RhTJ02ANuLE|5kJZ#hiX!;L%aU^-(+0wiP#zT5u*c8M$*G>h zbnQ4&HIZhf{qqW$fEk-*{)yCeOHKn};D$0I(UR9Y4|8r5HIPl==;sVw+kMj+yCGN) zU2$X6=0@zk*S?ak?|jjOeLxWIIc8X)Cx_c_WF#da^p@<9&*_V?CLB9<%o>l$bW)g0Y_2>~}Vq(5cPIAj) z08{Cysdiv~VM0|mF$2$=V@>PJxlRjEEu^S=E1OI_-zv?O@3&)eI`eVU0}OvVynbv) z;8N85<$r!-Spvm8*>|)#d1I8*?gRur{BGyQcHj-k$;pkuFL29cJqs(zN19EMdeyD8 z2H)_p!wT?^_U2q6WQj4(C7QF$eT~nt*ePe!4aAaj)~d^}WJ&&~9+3URjMEFNSmT2th-MtM?#yezV^JR?;MK@PTH;|gPWj|F$aTmvv_}B&c zU(D(WO~P^nU^15g;Jv;xV$B|RnJ6j$V%rb&1qB!tHiQThuMwRiiDtii)BgMQ_`puWdy>=-q>mw*3Uj~5j~^Sa zQGqW|a|TAR+$>_W0a+SfhH^7hO)%SND#?6AP|?N{h#Cs2v$qEoZAz|ihIETwgX!*` z{1FPQ1wR9+M&F*QwCGwBpK4%YWWBi35^8qr7k2;;W2{lw2A3JWRfmr*Pu&tZ9&`N- zqMq`tY)f1o!iuIfA-VY@H;wA4h;h}gsxaKsdfzT23h!?( z8}(A{bfmEyk9$N+pUC7tpK&&2j& z&@sPee;aReOUvo(qn+O6(Ejbnn0hFO{A{OARhjFm{9%(jPGqljaHK?C_~Ym%=d3{CseS}!h;TRljL z_|l@5(|q1o*~>9WL!h~uU{ z8RK7k1T>=j;y6 zK^^aBiA|J#rRr9>-A(2sfr2#wOR^~2NCrObtY0EW&ofu7e;HfDnz-gC5n#WxD(&Tm zo$Ud|wvg)VR(L_vQdbY2Xx=pYw)^*ru1ufy+GGNA&Z%YQP0VDOkTH@$jk)AZj9Tof zCgpp4iOP!@nb(zK_Yq(Bqze5`U=hbBTs@+4?=&tX=*zLh%d9tC!T|kKn*jR+nPqAr zy2ID_xst(xQJpzyNg@XN^HzjB5DCf;q6Kw?M-fFWZkyebG&uYH%)_GXw~Q5(YIRSw ztmAF4mfOEsMRe68W#er`!=10ZcVxRK$c_ipevcem@NqI;7W%GMnWqz)cK&qQw$;)N zzN3N1TwM62R)c0lR&1 z&7A|Jwuz!wuKRb=@ORqK9w-s{62tPpI5C;$#rh?*X1##9Gb9*8i$-6ln=N%R#=Li`fK3QQ@plaY)q-EBP2b?;v<-t%9$|3-h%ks#vIiyUhYgI5&AsL{cR}4D+Ldf9$h{`q##ot@$Y;)fW zkMk5-?&{^aecj~{9B}rPO5ErkODWF{v;*HO^R@|zO{bgGTac!H+DXOt)|{BzVURx|YQsg^TFa^Rewv`#V1myMk{;YO%$rM38y>U?=u5R+T0Mqkj*$r?O%^N9Uwe?E(1 z)4N#hE<&T={0hG{DZz7DCikr5Bb{D%ch3&Ph5yElu~&NzMV7UIFN6HT-{}MJ6~h*= z#>jHRr9OI@!U32y;h%`|8cu0>`K6p8?r(z2xxc?ZVyrCls~3?T8UEc>fW-y%xe=U1 zjV&&OXlJO`T-msn#Ol9(AUxvDs=;+2k3HRVotD$EKKD{93Tx8b)@R#9mlf2+O~HaP zUX~@RM`ZF`KpJOz(dg*tisj2WG;e2T)Ym2)z>*+favcR=BXsbueHLKIF+^%|a!fw> zbxhpjs%UoE`3gwRB<9>fn+B32|BH<AyCofEBTxz)&Pri;slw%#U|&&-APuchjtg~BgMyUcke!N!v(f8tqTB4ft>B2 zN0bWv_M9rRq5)_R5ZvwY{F3f4M$OL%we93jPz96haglZfdr;-Ac|j#3<=#=5S??k^#pbReJowQb zCK8UNmlqfJOoQ@+Q8(X_Y%tZYk_RHP^WMLAO0@bGx|d`C3C>BzhDcW%SY$3U0g3UQ z(0^|`*61JCOe;eAYL9EYHdd!UsOQL>qAy_aJn|I@ybRBZZOzd6 zSncyPzwp?_u6=%8ap$PA$oa=Ebgn6yX3JbXB$+={ds2cFrSr1k6^wgg|G99id%o*0 zQ?(i=G+ja-D2Tq^6}2zNB&vVJ&{^&NhF9fH!&jWr$Ulyz%PB@n*5*3efU4Bs>u-Ok zywkjD`^9%-w^PGkNE;98@t?_VbP{hY;jdR`)cdAVMd~I(!onVq4Sn{VI35wF%l(UR zB8DZkNF6>%f~!_b1eIgA0enCwaYrNJ;IpnaCtJZ>PC)j1)(}mkEsOcpI z*wP9SOu=A&2deWjO~PJL|EG)``Q6W}=Y5>`iK!qzPs@bIh2~zn_QUiF$>0Z0qKkXA z6u{dQh+Sx94U>z{Nfb6BsRF>?s&`&wDnXCEr2zId0&HQS+%izuCja_f?XeAbsFB?F zOu(-Fs>d=xyZ2R*SDxUMrwH#}X_IiZpkQpe$84REsBDO!9_T2NM%5dyQiPudy!YW@ zKX!!olLoM1L-~FtC?MR#37M5uNWRl;R$>6&KC9{jN zqlECDAAtA?pl+9WSKRft2Zwet^yu6~JItlaya)W$8dK*Kwi&NEk5fEZkLaR|(Fkfm z6AsnE-DYRJY&Ipz$(=h#n+%0cJ}C!`%5&)Y+S}pU4>Ljtd&e%Cw_wzAxOr7L0C&#LgO!>I2WZJ|iRr3^l`9r# z>pp=-C(@T|1Q(x8p+0zXupGUnK*dykbJmsFb!%kTSQ#5;dn%J0DDpg~Tw!w6!T((#gY=nL zVT3JMM;vSH+uW3?;QJelEPvHkZ$-8zN{iKKB-avnN2cqjtjt=w4Gj|^C|8!il)IOX zdz490X!;a*m%C@<{Z|y%YKhq1Hm6t>T2F0mC3xGs0yS60MCqdB&}gV#Ov9bcswv*I zWfmm8F(pG+`nEY8ZZ=5xW@qbOe@#Pdv8J~6!OlR{l(h8pK=6K{&LD5(XKq0_E#i!txN)dAZ+kn`MW)i)Z;MqzJCr8;)1 zQgpi~J(8F3^GHTvTPOvy)RGi1H4dX%AVUzszqh2UXZ#*tuX&a6cXLpi=VWEQI+w0* zNRW__P=n0i=@p*S!>Zq!uEh5>&()q@r`C33VDyhVbl&HP4{>NR$%gU#zXMKx=yp~z zbGTecz0_25TpeKS@wM)o+XL9!GB*ID2jN^mpiDm-@TW*GP=I&u94K#rJy1yg_6zHX z4`p`OPgN}plV?K=l*>8QmpFhYd>-!{5ifYdxhVTe4p+h}=&!YEYiXmeWP@)ug)!^- z<{RPd6@?}YECz!F*Yi~6ka@ER`5wqo0vaF1DzbIg)!J3c8VI7^G_rWfjm;XmdI=F7 ziM;d7 zatpe#v2LV~V(B_5&o2n0775ntT9BMBWAdJ5Zn&TK{Q=CxEJzexWcPJX>eYgupOoW~ zw^8r9vQ{nT1kBjYQ(s+d1SeNmTdy`!HW3r-&wL@UUpmL5vS{9S{iA7zzvlC-O4B3G zw9o$98y$t)#0~0owRt6{{pA!i2G;V6+XJvPO*l_oltt0|SAyR~A7Y6Xhgpq%5+Ey%HnI`#;{m_){jOIVZ4!dQdo* zkGf6R`zlpz-ug^)N`mXpABbujDQSW>M4^c(HrHKL(1b8|<@n2p*u9j^m&p&$tSC}p zav7n+F-)R>jM|w5)GRx0ZHtpAzRNWG@kC?c@~z#rFYMy#Rjg2FT>TKRfLJ?>?bq5G zp<$j1A-9nvv&`9C6SWXp)!UbUXn(LDc%Heb1LuYl|X{!g^5BUC_R`ys=qtxt2w9%_g zRbS2klIlYK7Kny6mHvoOJAzTbR*V{OvJCmdK2M}>3IVyCA^$%=4$YSBRwyW_#4B)P zULMR&&N@&?@b|+>BOb*K8ed=D^%b(4F+|~Vv0$6)JGr^$i0iv$nQs{Xt@K8yH-yB# zl3XXn9FG^Y-DICZ+n8gcD z!<+@=9;`m}#GLS#M($tCc(nghRhsS~GM!e5{J7$<#!(~4?$p}(RmTclzN}3uNiDp= zr^3qYd@nnPO{H23glTa~Z*Nr1TzQ{@*C@v~)<@K53h(H(! z8u*liV;jJw4nncG-cPtI#{fLv0fNtsV-FqB=tf*4JSBg%Mr+?b_*Om2sR{{fSd@r@ z_%pQctQKPPI6dwrN(+ujfUj$Sy_zye!DC3ps-ftUqC zMAusSx=Z}g&MdRd2q<{afo^ZP0e$!0< zlg(_w;@UpZwT&sSm4Dgt4&4i0LCMm+D*h(8#cP`^?HpWJo^Yrl39bef{L$h*L8r0_ z%6xY1D7|19b8T!Iac@9p%A~8t_9Q@gR!fDsT-6wwtpmw|_RKh=IiE9eZt@MlzjJIF z>~D1SKL;{yw0XvDf6tZA;ZRD>=_s4Oib?cyO#TSl;;hPzAZ}x1(;#)s3)L1E4Xv%^ zZSXDgUdQH@nOijm#t6q3+KdxjYBLIk@!W|ycWXgT`UChubx%FnRfSY;Pw__>^l;P0 z;N0$pdmM5CK^}Pv?c2elM@Zcbw;&4!ZI$w!NG2BIpyU?uqDJTm2OaS zXEdNZSOg0RWX@SxHzQyj!q}z~fFmi%$(7jjU2L>Nrp9MxG{tQlxPD%{ZXj@^vIwz0 zgjyISqDt6AqirTYki&KF)&85^Q-+DJmnyfR29H)!EBJPYR~6=$xgNoP+t!)*?HkU? zq6d#9D%0tMbo6UaH@4exrJ~%9E-f`R1i2_?7B6wKa#;Fx)LJUPP2vwu#xZ*A`IZ5k zb^{aKICl`i+J^yaa{;eo??EN_G82b&j$u8R;2T?sO5fs+V!BoS8(wRpH zIFkIalYD5Fhe3I(By#@M_zU?(6~7~F>b9#F0=ck?oNHi#X+j9>k>5|Oe`k2V#Pyq( z7^`vUx{6)z^XC?g%Z*o!)od4JeiW(8YaeD2k+Ui-`Qro0VB@m+onS3CWnBW9z`qq+r=0?-8Do3KLxK&H*p9vWQ`P>5Vvez&icH0%K!B0hiZZq zLr7F*WML90{)4vc432u+>w&ETA#NJZV6aYX>q^S^@8c$lQR5pL~ihf@oMKB<`B81 zdh)l`UcG&Cq;B0Tblzk__1>2tn*6E8*ajOX=Gk#6PU6Vnx^z6<%_USPnu5nLym4$ObYFLrcN77h)xcr^H2)kL!6vRIXy3 zxVVlUBFtykcxvvx$pzvGI!*o_{W<8lfcp4ViB zsM7^cwGQQ+3@sF#i90OVRH7TzQFh(K_Rt|kuUA=`gt@S)s-6%aC3_^N4r$Ye@ML~&>QBYg%I#_=Hk!P1+W#Gju8@M`6oveC*7L2CPJ%e>9~GneaS z=w_-Jo|ZN0k$yiVyZ*8mgWSNYy@ceJ{KB`$lW{T~8VoM*Ah_nUgZd`tL<$>16PYc% z%Z@nN^t^~TG50N~P-FrZZw@lI!_TqLSdfO0htUf?dwSTPpLQFz5};cH@fw!~-v4J& zy=U>y4=nW&3hAEfO1M9tycWe+ZVH8sSa!x{-Mh8VbwT5G%J^k}_1*R<4G0Ty1Y`>7 z&97bVB+fL^Eug%JT|RP6ZQ5+^k|Q&<38+F}I>@Hw=;@ujw;}UHAKer=DtaYoA(M0T z_?d1eX7s1lvFgPbwNz}Qt&j7$%q`sZ??QI^)n=mEqhM*cbR0-dc~*c9?cS$K@ErNV#N5(lc5xW;E$h3gM8j_D4a9S8#3|CX*% zyrp6SfYHWsP)S=+~D%cdrh~p|D|6am}6VFGbR@S_T!^*F)%= z;;&fAhnEu-v<)mg3i<4o(G{`D*69KdTOxm&>D+^|t+ze?2urbKP?j_b z@xOO&;D?`rN?XLv)!OcWPyTgQ{8gBY>nFD za0^m+mQt6FIWcOU@Y!OtRGlxVBJaZtEMB?;{ySmQTEALPvkAtSdSKg@h|Wlv?aA&r zDQ$X);~+ov;Pmdo&%vka_?cl%^1RdD{-%J7w}>);~^zPE^f zC75+J?w+J8=BCEyl5*BI`Ke0~oE3iS4r-h1F>>l&c=;fiFH;qBQ1N%V0ZQ|A_$}t{ zUH(!Ipa^quXxMzNlf>SVqWyq%V+lCi15b0LWjJ z3AHZKQL=%Z4JY1V^_Gb^UWjLPvxh6wxzTNNd>5qEfs1Km%ncMRgz)sVL0%VggkK|r zOmOU9=s?^c*~LeV5WXokuAQl($4uC^I_})~8C`)X5!-1HZ^?~n9$RWlynRw zKAst>)>oP1cB854o63+w^nzE&>Y!ua!;))oj%nT}4*3(qA*?-*!Zx1(WT@FvXD;DC z8P42xsDezOneYt>a9oLwa|H6>fV)L8eIUO;_-+VA`fBj1P{*21YNa4!0l$=Heb2u4 z?*-CW=udn@6}`zMejeGCBq^DPGZiJ4!6Jc0+EaMEYaU@hgp{-zXQpGs0?WK-dMnOm z=K;lSg;TNq^~DLHs99lH8*xB8BihD%x4NNZ__lp}_evjKfM>9dijj|uG>|9I-4auG zy6@O3Ew14rF1Rh(CnwH!pMI$XOS(%fzgfZfW=_NWseNEdL%`vaYkb7cXG$BcAdg0T zq82>Je1B=YuoU)J5*5A})~^a-5nEMRL@*SKw~`DD?W0w< zAB}LuBLQ6qg`J#ZUDyU3e6S7J262Q(`a|Ugt54OL0<`fvTX9V!b*tlR`^NY?z8z|N zd#p%%)A-N700cmYnIE)$B6Y>)6o2&<<5@}~mv7uS>k4|lfK9?;1NfmwkDS?AxRFZD z99DNX9NgDW|J-;EZYis1CScLPDWj)496RiwZzLfg?sVKBLFK3g$yZX2TUBGDNA?43 zA#B%MTcf^txvOSaAZE|}I^+f2v3nL^&n0DsTz(EIYmNug68Kn8o6s!b%R;Kosec4H z=8ms4|4&DRYuiP6bASEWzwKzor}l|0^J-P5zo*U&-`lB9p5Aiwjl!SaXBU(;cP;+d z@gp=Ver~34~k{c2-1FT~Z?A^VP`T8UGC^&eTv3aJ9 z*e})DezQL=cn>&$wydjh-Wm@tLu=~*$y|pU>)0~S;q&i-nD zfKTe(UG+OcddBhc^P~OewsP~qp_6%w58wUs*^wnnmh8N43$b(t*p7&H0o zTwHO)GZ~RgH&K$eg#DR7?jzmDaqQiFZa&WPGh6bl;AIC!6F|M_;%IKpA^ahJBlsSl zUOXynd~Vnri!)|AzrS%CG{xgzPE)r{E}R`-2p!Z7`rlcR-0Okd!>8mfZ+Z4!`29N9 zXC9>LcW>}tPUOH5s}?~_q(K*5a%Ay?g3C{b7u`L?dC{9x8F%Q-rQol7sRkBcC4Y?J z42o7rJ3=@w;#U;2bh;{|(ml$l0<9*as5Il+Yjo}jFw1ILi1 zaFF846A&sPAtm+a{lc)W>qE%g8WtFBZ_$qicDMq85SNxlTjyTh2`w|i zom#lJV$Y%b;5oEU+>4e9cE_E@tUh%Z!u%NZIfS!+}+~ z?@oaK@%5d2oqGpoW?q$7ZB$V~@-8^7vPQp<5cc!fgUMs%Zv&S}>ARC-!`S?`#9tO4Zfo&(D^y<3PT# z+tB>%6I=}gX1Qa4PF0uRXy&^oxsRokR`56QTBE-G`0~ZKvkW#bpT1X;2}rxR;_(Z? zYM9}24bc8z-|Gj?*Aw)Ii$=qRiym8d`mZNZqY&$%uatbQ4C~#Sjyo!C%E4XCR6Uca zocqsw4HyLg9cW9O`yQR)I(7xAU0?pk*LQ5tqp+qtplYt#k;7I!qGw}cF>N;ziu*l( zXf<|L#&!$?%Ujy)?(X=2*93-&M2$`Fj`o3zEYQXP8GmqEB6w9DwI9A1n&|_0h;Gbg z%ua-XCF1LFeYU5EZ1@WWZU|~s&sdTc8$7?WY@bg7*y}gofp+&T^x=hVj@6b#mT9j3 zyD8Np6_Q26+u}EKZhIt~Q&tV^Xrh>K^oY8{UduGXkF5DOkQZjKQfm@48HD~jHJz}9 z05@Gc%Bi!A!p3{cf#z*u4JlvuM=PzF3s{=h!>1hu7KFynQgS@ZBZfu+I&gneCV6w? zaE8nkk7Ww#AjG~^-A(W9B{Gtm*KoJuXTGU{ch?gbd-rC*t33Vjay!YspmzcGa1Om` zPO6_6uRO8hpkxDjfd-MX7;a_%?>9<}Y-gFMZZ@wzsIf6Xv*kVAlw{!kMud4H2mW1a z2(`=YuP|%LO(m5@m`Q?KCcXt#iFaqe<^c)Jd_?r=xn!1Z8_9mlzx(m*9@#j8-ZTHH zj#`82EAl?aWAlZC$9Lu32d#4@F=y_V%3R$~nPbzexJ}IiDzW=~CLg=q8qZfris_>d zbOwaq1xfweDgO5qkve`out{U?ebrpJU*Zts!;*ie`ZeAoI*n`dep`*_YX2d8RlT3_ zUdmL%@VzZ6EXPeWGY{>&lgRZgt`CTo!&|E4d2W6?(H(2=@yEK=D~f~|@1CtOYE?{@*T>8L=aR;WEsAm?^5^f>5e!+?Kbo2`H2tU7V)y_3 z0MU1Y)Z*pg77X2Hz1Jp=;^JrO!Yi4^av4s9|xn5((iu9y(_v+Aj zb0sMA{`ZXKk_i$~;lFAA?Cf@mUjmK5+wj{p0KMsL=h4SCG zPsWpYJ~C&>N-XD&w^4kt!aGJ|$Gke~(EZ@lnx}=Iwv3Sf@x%mVnD;8ltRX$bZLM7Q zeW1EtuhFJUd7H!fWpn@cQgNI_8M`iR_OapfBfISGnOFE98dZPrYLTGBe^#tnD>5Md zZd3R-e&xTX?cZhm@3--m|MzV?hyVLFwx54*8ULmb{{2Gy&$tN(V$K);p^QY^zh}YU opIQ7*eE#?E{(oL3sBmhQ=ZW)>v!YJW-Z}VVWMI0vh~dcmf0DUnHvj+t literal 0 HcmV?d00001 diff --git a/examples/images/subgraph-ui-layout.png b/examples/images/subgraph-ui-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..35f390b5f8db7cdca161bef7309f5cee6046c400 GIT binary patch literal 96054 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ȼqRJ)9AVK6#>&YuA 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 oz4LiQQH6|zNXlQtnJx~H7S$k(1HvqRnRPk?o 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 z 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 value.trim()).filter(Boolean); +} + +export function normalizeDynamicComboSelection(value, options) { + const current = String(value ?? ""); + return options.includes(current) || options.length === 0 ? current : options[0]; +} diff --git a/js/bv_latent_randome_ratio.js b/js/bv_latent_randome_ratio.js index 57233c8..c5c9485 100644 --- a/js/bv_latent_randome_ratio.js +++ b/js/bv_latent_randome_ratio.js @@ -1,10 +1,7 @@ import { app } from "../../scripts/app.js"; /** - * BV - Relabel aspect ratio toggle widgets for: - * "BV Latent Random Aspect Ratio" - * - * Keeps widget.name intact (use_1_1, use_3_2, ...) but changes widget.label to user-friendly text. + * Keeps aspect ratio widget names stable while presenting compact labels. */ const LABEL_MAP = { @@ -22,10 +19,7 @@ const LABEL_MAP = { function relabelAspectRatioWidgets(node) { if (!node || !node.widgets) return; - // Only for your node (internal name) - // NOTE: node.type is usually the internal type string. - // If this doesn't match in your build, log node.type once and adjust. - if (node.type !== "BV Latent Random Aspect Ratio") return; + if (node.type !== "BV Latent Random Aspect Ratio" && node.type !== "BV Empty Latent Random Ratio") return; for (const w of node.widgets) { if (!w || !w.name) continue; @@ -51,6 +45,7 @@ app.registerExtension({ }, async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== "BV Latent Random Aspect Ratio" && nodeData.name !== "BV Empty Latent Random Ratio") return; // Hook creation const origCreated = nodeType.prototype.onNodeCreated; nodeType.prototype.onNodeCreated = function () { diff --git a/js/bv_nodepack.core.js b/js/bv_nodepack.core.js index aaebfa9..58815f0 100644 --- a/js/bv_nodepack.core.js +++ b/js/bv_nodepack.core.js @@ -1,4 +1,4 @@ -import{app as Rc}from"../../scripts/app.js";function Oc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ss={exports:{}},il={},as={exports:{}},R={};/** +import{app as Nc}from"../../scripts/app.js";function Pc(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var rs={exports:{}},ol={},ls={exports:{}},T={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ import{app as Rc}from"../../scripts/app.js";function Oc(e){return e&&e.__esModul * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var er=Symbol.for("react.element"),Mc=Symbol.for("react.portal"),Dc=Symbol.for("react.fragment"),Ic=Symbol.for("react.strict_mode"),jc=Symbol.for("react.profiler"),Fc=Symbol.for("react.provider"),Uc=Symbol.for("react.context"),Ac=Symbol.for("react.forward_ref"),Vc=Symbol.for("react.suspense"),Bc=Symbol.for("react.memo"),$c=Symbol.for("react.lazy"),Yu=Symbol.iterator;function Wc(e){return e===null||typeof e!="object"?null:(e=Yu&&e[Yu]||e["@@iterator"],typeof e=="function"?e:null)}var cs={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},fs=Object.assign,ds={};function cn(e,t,n){this.props=e,this.context=t,this.refs=ds,this.updater=n||cs}cn.prototype.isReactComponent={};cn.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};cn.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function ps(){}ps.prototype=cn.prototype;function Zo(e,t,n){this.props=e,this.context=t,this.refs=ds,this.updater=n||cs}var Jo=Zo.prototype=new ps;Jo.constructor=Zo;fs(Jo,cn.prototype);Jo.isPureReactComponent=!0;var Xu=Array.isArray,hs=Object.prototype.hasOwnProperty,qo={current:null},ms={key:!0,ref:!0,__self:!0,__source:!0};function vs(e,t,n){var r,l={},o=null,u=null;if(t!=null)for(r in t.ref!==void 0&&(u=t.ref),t.key!==void 0&&(o=""+t.key),t)hs.call(t,r)&&!ms.hasOwnProperty(r)&&(l[r]=t[r]);var i=arguments.length-2;if(i===1)l.children=n;else if(1>>1,X=_[H];if(0>>1;Hl(Nl,L))ktl(ur,Nl)?(_[H]=ur,_[kt]=L,H=kt):(_[H]=Nl,_[St]=L,H=St);else if(ktl(ur,L))_[H]=ur,_[kt]=L,H=kt;else break e}}return T}function l(_,T){var L=_.sortIndex-T.sortIndex;return L!==0?L:_.id-T.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var u=Date,i=u.now();e.unstable_now=function(){return u.now()-i}}var s=[],a=[],m=1,p=null,d=3,v=!1,S=!1,y=!1,P=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(_){for(var T=n(a);T!==null;){if(T.callback===null)r(a);else if(T.startTime<=_)r(a),T.sortIndex=T.expirationTime,t(s,T);else break;T=n(a)}}function g(_){if(y=!1,h(_),!S)if(n(s)!==null)S=!0,_l(C);else{var T=n(a);T!==null&&xl(g,T.startTime-_)}}function C(_,T){S=!1,y&&(y=!1,f(N),N=-1),v=!0;var L=d;try{for(h(T),p=n(s);p!==null&&(!(p.expirationTime>T)||_&&!me());){var H=p.callback;if(typeof H=="function"){p.callback=null,d=p.priorityLevel;var X=H(p.expirationTime<=T);T=e.unstable_now(),typeof X=="function"?p.callback=X:p===n(s)&&r(s),h(T)}else r(s);p=n(s)}if(p!==null)var or=!0;else{var St=n(a);St!==null&&xl(g,St.startTime-T),or=!1}return or}finally{p=null,d=L,v=!1}}var x=!1,E=null,N=-1,U=5,z=-1;function me(){return!(e.unstable_now()-z_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<_?Math.floor(1e3/_):5},e.unstable_getCurrentPriorityLevel=function(){return d},e.unstable_getFirstCallbackNode=function(){return n(s)},e.unstable_next=function(_){switch(d){case 1:case 2:case 3:var T=3;break;default:T=d}var L=d;d=T;try{return _()}finally{d=L}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function(_,T){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var L=d;d=_;try{return T()}finally{d=L}},e.unstable_scheduleCallback=function(_,T,L){var H=e.unstable_now();switch(typeof L=="object"&&L!==null?(L=L.delay,L=typeof L=="number"&&0H?(_.sortIndex=L,t(a,_),n(s)===null&&_===n(a)&&(y?(f(N),N=-1):y=!0,xl(g,L-H))):(_.sortIndex=X,t(s,_),S||v||(S=!0,_l(C))),_},e.unstable_shouldYield=me,e.unstable_wrapCallback=function(_){var T=d;return function(){var L=d;d=T;try{return _.apply(this,arguments)}finally{d=L}}}})(ks);Ss.exports=ks;var tf=Ss.exports;/** + */(function(e){function t(C,P){var z=C.length;C.push(P);e:for(;0>>1,X=C[W];if(0>>1;Wl(Cl,z))ytl(rr,Cl)?(C[W]=rr,C[yt]=z,W=yt):(C[W]=Cl,C[gt]=z,W=gt);else if(ytl(rr,z))C[W]=rr,C[yt]=z,W=yt;else break e}}return P}function l(C,P){var z=C.sortIndex-P.sortIndex;return z!==0?z:C.id-P.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var u=Date,s=u.now();e.unstable_now=function(){return u.now()-s}}var i=[],a=[],v=1,p=null,m=3,y=!1,w=!1,k=!1,j=typeof setTimeout=="function"?setTimeout:null,f=typeof clearTimeout=="function"?clearTimeout:null,c=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function d(C){for(var P=n(a);P!==null;){if(P.callback===null)r(a);else if(P.startTime<=C)r(a),P.sortIndex=P.expirationTime,t(i,P);else break;P=n(a)}}function h(C){if(k=!1,d(C),!w)if(n(i)!==null)w=!0,Sl(E);else{var P=n(a);P!==null&&El(h,P.startTime-C)}}function E(C,P){w=!1,k&&(k=!1,f(N),N=-1),y=!0;var z=m;try{for(d(P),p=n(i);p!==null&&(!(p.expirationTime>P)||C&&!Ne());){var W=p.callback;if(typeof W=="function"){p.callback=null,m=p.priorityLevel;var X=W(p.expirationTime<=P);P=e.unstable_now(),typeof X=="function"?p.callback=X:p===n(i)&&r(i),d(P)}else r(i);p=n(i)}if(p!==null)var nr=!0;else{var gt=n(a);gt!==null&&El(h,gt.startTime-P),nr=!1}return nr}finally{p=null,m=z,y=!1}}var x=!1,_=null,N=-1,H=5,R=-1;function Ne(){return!(e.unstable_now()-RC||125W?(C.sortIndex=z,t(a,C),n(i)===null&&C===n(a)&&(k?(f(N),N=-1):k=!0,El(h,z-W))):(C.sortIndex=X,t(i,C),w||y||(w=!0,Sl(E))),C},e.unstable_shouldYield=Ne,e.unstable_wrapCallback=function(C){var P=m;return function(){var z=m;m=P;try{return C.apply(this,arguments)}finally{m=z}}}})(hs);vs.exports=hs;var Zc=vs.exports;/** * @license React * react-dom.production.min.js * @@ -30,11 +30,12 @@ import{app as Rc}from"../../scripts/app.js";function Oc(e){return e&&e.__esModul * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var nf=Oe,we=tf;function w(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),to=Object.prototype.hasOwnProperty,rf=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Ju={},qu={};function lf(e){return to.call(qu,e)?!0:to.call(Ju,e)?!1:rf.test(e)?qu[e]=!0:(Ju[e]=!0,!1)}function of(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function uf(e,t,n,r){if(t===null||typeof t>"u"||of(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function se(e,t,n,r,l,o,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=u}var ee={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ee[e]=new se(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ee[t]=new se(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ee[e]=new se(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ee[e]=new se(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ee[e]=new se(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ee[e]=new se(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ee[e]=new se(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ee[e]=new se(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ee[e]=new se(e,5,!1,e.toLowerCase(),null,!1,!1)});var eu=/[\-:]([a-z])/g;function tu(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(eu,tu);ee[t]=new se(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(eu,tu);ee[t]=new se(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(eu,tu);ee[t]=new se(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ee[e]=new se(e,1,!1,e.toLowerCase(),null,!1,!1)});ee.xlinkHref=new se("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ee[e]=new se(e,1,!1,e.toLowerCase(),null,!0,!0)});function nu(e,t,n,r){var l=ee.hasOwnProperty(t)?ee[t]:null;(l!==null?l.type!==0:r||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),ql=Object.prototype.hasOwnProperty,qc=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Wu={},Qu={};function bc(e){return ql.call(Qu,e)?!0:ql.call(Wu,e)?!1:qc.test(e)?Qu[e]=!0:(Wu[e]=!0,!1)}function ef(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function tf(e,t,n,r){if(t===null||typeof t>"u"||ef(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function se(e,t,n,r,l,o,u){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=u}var ee={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){ee[e]=new se(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];ee[t]=new se(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){ee[e]=new se(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){ee[e]=new se(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){ee[e]=new se(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){ee[e]=new se(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){ee[e]=new se(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){ee[e]=new se(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){ee[e]=new se(e,5,!1,e.toLowerCase(),null,!1,!1)});var Xo=/[\-:]([a-z])/g;function Zo(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Xo,Zo);ee[t]=new se(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Xo,Zo);ee[t]=new se(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Xo,Zo);ee[t]=new se(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){ee[e]=new se(e,1,!1,e.toLowerCase(),null,!1,!1)});ee.xlinkHref=new se("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){ee[e]=new se(e,1,!1,e.toLowerCase(),null,!0,!0)});function Jo(e,t,n,r){var l=ee.hasOwnProperty(t)?ee[t]:null;(l!==null?l.type!==0:r||!(2i||l[u]!==o[i]){var s=` -`+l[u].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=u&&0<=i);break}}}finally{Tl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?En(e):""}function sf(e){switch(e.tag){case 5:return En(e.type);case 16:return En("Lazy");case 13:return En("Suspense");case 19:return En("SuspenseList");case 0:case 2:case 15:return e=Ll(e.type,!1),e;case 11:return e=Ll(e.type.render,!1),e;case 1:return e=Ll(e.type,!0),e;default:return""}}function oo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case At:return"Fragment";case Ut:return"Portal";case no:return"Profiler";case ru:return"StrictMode";case ro:return"Suspense";case lo:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case _s:return(e.displayName||"Context")+".Consumer";case Es:return(e._context.displayName||"Context")+".Provider";case lu:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ou:return t=e.displayName||null,t!==null?t:oo(e.type)||"Memo";case qe:t=e._payload,e=e._init;try{return oo(e(t))}catch{}}return null}function af(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return oo(t);case 8:return t===ru?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ht(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ns(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function cf(e){var t=Ns(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(u){r=""+u,o.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ar(e){e._valueTracker||(e._valueTracker=cf(e))}function Ps(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Ns(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function jr(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function uo(e,t){var n=t.checked;return $({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function ei(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ht(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function zs(e,t){t=t.checked,t!=null&&nu(e,"checked",t,!1)}function io(e,t){zs(e,t);var n=ht(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?so(e,t.type,n):t.hasOwnProperty("defaultValue")&&so(e,t.type,ht(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function ti(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function so(e,t,n){(t!=="number"||jr(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var _n=Array.isArray;function Zt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=cr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function Un(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Pn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ff=["Webkit","ms","Moz","O"];Object.keys(Pn).forEach(function(e){ff.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Pn[t]=Pn[e]})});function Os(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Pn.hasOwnProperty(e)&&Pn[e]?(""+t).trim():t+"px"}function Ms(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Os(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var df=$({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function fo(e,t){if(t){if(df[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(w(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(w(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(w(61))}if(t.style!=null&&typeof t.style!="object")throw Error(w(62))}}function po(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ho=null;function uu(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var mo=null,Jt=null,qt=null;function li(e){if(e=rr(e)){if(typeof mo!="function")throw Error(w(280));var t=e.stateNode;t&&(t=dl(t),mo(e.stateNode,e.type,t))}}function Ds(e){Jt?qt?qt.push(e):qt=[e]:Jt=e}function Is(){if(Jt){var e=Jt,t=qt;if(qt=Jt=null,li(e),t)for(e=0;e>>=0,e===0?32:31-(Ef(e)/_f|0)|0}var fr=64,dr=4194304;function xn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Vr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,u=n&268435455;if(u!==0){var i=u&~l;i!==0?r=xn(i):(o&=u,o!==0&&(r=xn(o)))}else u=n&~l,u!==0?r=xn(u):o!==0&&(r=xn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function tr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Me(t),e[t]=n}function zf(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Tn),pi=" ",hi=!1;function ta(e,t){switch(e){case"keyup":return nd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function na(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Vt=!1;function ld(e,t){switch(e){case"compositionend":return na(t);case"keypress":return t.which!==32?null:(hi=!0,pi);case"textInput":return e=t.data,e===pi&&hi?null:e;default:return null}}function od(e,t){if(Vt)return e==="compositionend"||!hu&&ta(e,t)?(e=bs(),Pr=fu=nt=null,Vt=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=yi(n)}}function ua(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?ua(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function ia(){for(var e=window,t=jr();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=jr(e.document)}return t}function mu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function hd(e){var t=ia(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&ua(n.ownerDocument.documentElement,n)){if(r!==null&&mu(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=wi(n,o);var u=wi(n,r);l&&u&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(u.node,u.offset)):(t.setEnd(u.node,u.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Bt=null,ko=null,Rn=null,Co=!1;function Si(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Co||Bt==null||Bt!==jr(r)||(r=Bt,"selectionStart"in r&&mu(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Rn&&Hn(Rn,r)||(Rn=r,r=Wr(ko,"onSelect"),0Ht||(e.current=zo[Ht],zo[Ht]=null,Ht--)}function I(e,t){Ht++,zo[Ht]=e.current,e.current=t}var mt={},le=yt(mt),fe=yt(!1),Tt=mt;function rn(e,t){var n=e.type.contextTypes;if(!n)return mt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function de(e){return e=e.childContextTypes,e!=null}function Qr(){F(fe),F(le)}function Pi(e,t,n){if(le.current!==mt)throw Error(w(168));I(le,t),I(fe,n)}function va(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(w(108,af(e)||"Unknown",l));return $({},n,r)}function Gr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||mt,Tt=le.current,I(le,e),I(fe,fe.current),!0}function zi(e,t,n){var r=e.stateNode;if(!r)throw Error(w(169));n?(e=va(e,t,Tt),r.__reactInternalMemoizedMergedChildContext=e,F(fe),F(le),I(le,e)):F(fe),I(fe,n)}var $e=null,pl=!1,Hl=!1;function ga(e){$e===null?$e=[e]:$e.push(e)}function Nd(e){pl=!0,ga(e)}function wt(){if(!Hl&&$e!==null){Hl=!0;var e=0,t=D;try{var n=$e;for(D=1;e>=u,l-=u,We=1<<32-Me(t)+l|n<N?(U=E,E=null):U=E.sibling;var z=d(f,E,h[N],g);if(z===null){E===null&&(E=U);break}e&&E&&z.alternate===null&&t(f,E),c=o(z,c,N),x===null?C=z:x.sibling=z,x=z,E=U}if(N===h.length)return n(f,E),A&&Ct(f,N),C;if(E===null){for(;NN?(U=E,E=null):U=E.sibling;var me=d(f,E,z.value,g);if(me===null){E===null&&(E=U);break}e&&E&&me.alternate===null&&t(f,E),c=o(me,c,N),x===null?C=me:x.sibling=me,x=me,E=U}if(z.done)return n(f,E),A&&Ct(f,N),C;if(E===null){for(;!z.done;N++,z=h.next())z=p(f,z.value,g),z!==null&&(c=o(z,c,N),x===null?C=z:x.sibling=z,x=z);return A&&Ct(f,N),C}for(E=r(f,E);!z.done;N++,z=h.next())z=v(E,f,N,z.value,g),z!==null&&(e&&z.alternate!==null&&E.delete(z.key===null?N:z.key),c=o(z,c,N),x===null?C=z:x.sibling=z,x=z);return e&&E.forEach(function(pn){return t(f,pn)}),A&&Ct(f,N),C}function P(f,c,h,g){if(typeof h=="object"&&h!==null&&h.type===At&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case sr:e:{for(var C=h.key,x=c;x!==null;){if(x.key===C){if(C=h.type,C===At){if(x.tag===7){n(f,x.sibling),c=l(x,h.props.children),c.return=f,f=c;break e}}else if(x.elementType===C||typeof C=="object"&&C!==null&&C.$$typeof===qe&&Ri(C)===x.type){n(f,x.sibling),c=l(x,h.props),c.ref=Sn(f,x,h),c.return=f,f=c;break e}n(f,x);break}else t(f,x);x=x.sibling}h.type===At?(c=zt(h.props.children,f.mode,g,h.key),c.return=f,f=c):(g=Ir(h.type,h.key,h.props,null,f.mode,g),g.ref=Sn(f,c,h),g.return=f,f=g)}return u(f);case Ut:e:{for(x=h.key;c!==null;){if(c.key===x)if(c.tag===4&&c.stateNode.containerInfo===h.containerInfo&&c.stateNode.implementation===h.implementation){n(f,c.sibling),c=l(c,h.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=ql(h,f.mode,g),c.return=f,f=c}return u(f);case qe:return x=h._init,P(f,c,x(h._payload),g)}if(_n(h))return S(f,c,h,g);if(mn(h))return y(f,c,h,g);wr(f,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,c!==null&&c.tag===6?(n(f,c.sibling),c=l(c,h),c.return=f,f=c):(n(f,c),c=Jl(h,f.mode,g),c.return=f,f=c),u(f)):n(f,c)}return P}var on=ka(!0),Ca=ka(!1),Xr=yt(null),Zr=null,Kt=null,wu=null;function Su(){wu=Kt=Zr=null}function ku(e){var t=Xr.current;F(Xr),e._currentValue=t}function Ro(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function en(e,t){Zr=e,wu=Kt=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(ce=!0),e.firstContext=null)}function Ne(e){var t=e._currentValue;if(wu!==e)if(e={context:e,memoizedValue:t,next:null},Kt===null){if(Zr===null)throw Error(w(308));Kt=e,Zr.dependencies={lanes:0,firstContext:e}}else Kt=Kt.next=e;return t}var xt=null;function Cu(e){xt===null?xt=[e]:xt.push(e)}function Ea(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Cu(t)):(n.next=l.next,l.next=n),t.interleaved=n,Ye(e,r)}function Ye(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var be=!1;function Eu(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function _a(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Qe(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ct(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,M&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,Ye(e,n)}return l=r.interleaved,l===null?(t.next=t,Cu(r)):(t.next=l.next,l.next=t),r.interleaved=t,Ye(e,n)}function Tr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,su(e,n)}}function Oi(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var u={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=u:o=o.next=u,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Jr(e,t,n,r){var l=e.updateQueue;be=!1;var o=l.firstBaseUpdate,u=l.lastBaseUpdate,i=l.shared.pending;if(i!==null){l.shared.pending=null;var s=i,a=s.next;s.next=null,u===null?o=a:u.next=a,u=s;var m=e.alternate;m!==null&&(m=m.updateQueue,i=m.lastBaseUpdate,i!==u&&(i===null?m.firstBaseUpdate=a:i.next=a,m.lastBaseUpdate=s))}if(o!==null){var p=l.baseState;u=0,m=a=s=null,i=o;do{var d=i.lane,v=i.eventTime;if((r&d)===d){m!==null&&(m=m.next={eventTime:v,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var S=e,y=i;switch(d=t,v=n,y.tag){case 1:if(S=y.payload,typeof S=="function"){p=S.call(v,p,d);break e}p=S;break e;case 3:S.flags=S.flags&-65537|128;case 0:if(S=y.payload,d=typeof S=="function"?S.call(v,p,d):S,d==null)break e;p=$({},p,d);break e;case 2:be=!0}}i.callback!==null&&i.lane!==0&&(e.flags|=64,d=l.effects,d===null?l.effects=[i]:d.push(i))}else v={eventTime:v,lane:d,tag:i.tag,payload:i.payload,callback:i.callback,next:null},m===null?(a=m=v,s=p):m=m.next=v,u|=d;if(i=i.next,i===null){if(i=l.shared.pending,i===null)break;d=i,i=d.next,d.next=null,l.lastBaseUpdate=d,l.shared.pending=null}}while(!0);if(m===null&&(s=p),l.baseState=s,l.firstBaseUpdate=a,l.lastBaseUpdate=m,t=l.shared.interleaved,t!==null){l=t;do u|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Ot|=u,e.lanes=u,e.memoizedState=p}}function Mi(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Gl.transition;Gl.transition={};try{e(!1),t()}finally{D=n,Gl.transition=r}}function Ba(){return Pe().memoizedState}function Ld(e,t,n){var r=dt(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},$a(e))Wa(t,n);else if(n=Ea(e,t,n,r),n!==null){var l=ue();De(n,e,r,l),Ha(n,t,r)}}function Rd(e,t,n){var r=dt(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if($a(e))Wa(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var u=t.lastRenderedState,i=o(u,n);if(l.hasEagerState=!0,l.eagerState=i,Ie(i,u)){var s=t.interleaved;s===null?(l.next=l,Cu(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=Ea(e,t,l,r),n!==null&&(l=ue(),De(n,e,r,l),Ha(n,t,r))}}function $a(e){var t=e.alternate;return e===B||t!==null&&t===B}function Wa(e,t){On=br=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ha(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,su(e,n)}}var el={readContext:Ne,useCallback:te,useContext:te,useEffect:te,useImperativeHandle:te,useInsertionEffect:te,useLayoutEffect:te,useMemo:te,useReducer:te,useRef:te,useState:te,useDebugValue:te,useDeferredValue:te,useTransition:te,useMutableSource:te,useSyncExternalStore:te,useId:te,unstable_isNewReconciler:!1},Od={readContext:Ne,useCallback:function(e,t){return Fe().memoizedState=[e,t===void 0?null:t],e},useContext:Ne,useEffect:Ii,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Rr(4194308,4,ja.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Rr(4194308,4,e,t)},useInsertionEffect:function(e,t){return Rr(4,2,e,t)},useMemo:function(e,t){var n=Fe();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Fe();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Ld.bind(null,B,e),[r.memoizedState,e]},useRef:function(e){var t=Fe();return e={current:e},t.memoizedState=e},useState:Di,useDebugValue:Ru,useDeferredValue:function(e){return Fe().memoizedState=e},useTransition:function(){var e=Di(!1),t=e[0];return e=Td.bind(null,e[1]),Fe().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=B,l=Fe();if(A){if(n===void 0)throw Error(w(407));n=n()}else{if(n=t(),J===null)throw Error(w(349));Rt&30||za(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,Ii(La.bind(null,r,o,e),[e]),r.flags|=2048,qn(9,Ta.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Fe(),t=J.identifierPrefix;if(A){var n=He,r=We;n=(r&~(1<<32-Me(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Zn++,0s||l[u]!==o[s]){var i=` +`+l[u].replace(" at new "," at ");return e.displayName&&i.includes("")&&(i=i.replace("",e.displayName)),i}while(1<=u&&0<=s);break}}}finally{Nl=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?wn(e):""}function nf(e){switch(e.tag){case 5:return wn(e.type);case 16:return wn("Lazy");case 13:return wn("Suspense");case 19:return wn("SuspenseList");case 0:case 2:case 15:return e=Pl(e.type,!1),e;case 11:return e=Pl(e.type.render,!1),e;case 1:return e=Pl(e.type,!0),e;default:return""}}function no(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Mt:return"Fragment";case jt:return"Portal";case bl:return"Profiler";case qo:return"StrictMode";case eo:return"Suspense";case to:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ws:return(e.displayName||"Context")+".Consumer";case ys:return(e._context.displayName||"Context")+".Provider";case bo:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case eu:return t=e.displayName||null,t!==null?t:no(e.type)||"Memo";case qe:t=e._payload,e=e._init;try{return no(e(t))}catch{}}return null}function rf(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return no(t);case 8:return t===qo?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function dt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function Ss(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function lf(e){var t=Ss(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(u){r=""+u,o.call(this,u)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(u){r=""+u},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function ur(e){e._valueTracker||(e._valueTracker=lf(e))}function Es(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Ss(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Or(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ro(e,t){var n=t.checked;return B({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Ku(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=dt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function Cs(e,t){t=t.checked,t!=null&&Jo(e,"checked",t,!1)}function lo(e,t){Cs(e,t);var n=dt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?oo(e,t.type,n):t.hasOwnProperty("defaultValue")&&oo(e,t.type,dt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Yu(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function oo(e,t,n){(t!=="number"||Or(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var kn=Array.isArray;function Gt(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=ir.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function jn(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var xn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},of=["Webkit","ms","Moz","O"];Object.keys(xn).forEach(function(e){of.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),xn[t]=xn[e]})});function Ps(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||xn.hasOwnProperty(e)&&xn[e]?(""+t).trim():t+"px"}function zs(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=Ps(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var uf=B({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function so(e,t){if(t){if(uf[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(g(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(g(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(g(61))}if(t.style!=null&&typeof t.style!="object")throw Error(g(62))}}function ao(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var co=null;function tu(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var fo=null,Kt=null,Yt=null;function Ju(e){if(e=er(e)){if(typeof fo!="function")throw Error(g(280));var t=e.stateNode;t&&(t=cl(t),fo(e.stateNode,e.type,t))}}function Ts(e){Kt?Yt?Yt.push(e):Yt=[e]:Kt=e}function Ls(){if(Kt){var e=Kt,t=Yt;if(Yt=Kt=null,Ju(e),t)for(e=0;e>>=0,e===0?32:31-(yf(e)/wf|0)|0}var sr=64,ar=4194304;function Sn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Fr(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,u=n&268435455;if(u!==0){var s=u&~l;s!==0?r=Sn(s):(o&=u,o!==0&&(r=Sn(o)))}else u=n&~l,u!==0?r=Sn(u):o!==0&&(r=Sn(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&l)&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function qn(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Ie(t),e[t]=n}function Cf(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Nn),ui=" ",ii=!1;function Zs(e,t){switch(e){case"keyup":return Jf.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Js(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Dt=!1;function bf(e,t){switch(e){case"compositionend":return Js(t);case"keypress":return t.which!==32?null:(ii=!0,ui);case"textInput":return e=t.data,e===ui&&ii?null:e;default:return null}}function ed(e,t){if(Dt)return e==="compositionend"||!au&&Zs(e,t)?(e=Ys(),xr=uu=nt=null,Dt=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=fi(n)}}function ta(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?ta(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function na(){for(var e=window,t=Or();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Or(e.document)}return t}function cu(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function ad(e){var t=na(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&ta(n.ownerDocument.documentElement,n)){if(r!==null&&cu(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=di(n,o);var u=di(n,r);l&&u&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==u.node||e.focusOffset!==u.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(u.node,u.offset)):(t.setEnd(u.node,u.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Ft=null,yo=null,zn=null,wo=!1;function pi(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;wo||Ft==null||Ft!==Or(r)||(r=Ft,"selectionStart"in r&&cu(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),zn&&Vn(zn,r)||(zn=r,r=Vr(yo,"onSelect"),0Vt||(e.current=_o[Vt],_o[Vt]=null,Vt--)}function M(e,t){Vt++,_o[Vt]=e.current,e.current=t}var pt={},le=vt(pt),fe=vt(!1),Nt=pt;function bt(e,t){var n=e.type.contextTypes;if(!n)return pt;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function de(e){return e=e.childContextTypes,e!=null}function $r(){F(fe),F(le)}function ki(e,t,n){if(le.current!==pt)throw Error(g(168));M(le,t),M(fe,n)}function fa(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(g(108,rf(e)||"Unknown",l));return B({},n,r)}function Hr(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||pt,Nt=le.current,M(le,e),M(fe,fe.current),!0}function Si(e,t,n){var r=e.stateNode;if(!r)throw Error(g(169));n?(e=fa(e,t,Nt),r.__reactInternalMemoizedMergedChildContext=e,F(fe),F(le),M(le,e)):F(fe),M(fe,n)}var Be=null,fl=!1,Bl=!1;function da(e){Be===null?Be=[e]:Be.push(e)}function Sd(e){fl=!0,da(e)}function ht(){if(!Bl&&Be!==null){Bl=!0;var e=0,t=O;try{var n=Be;for(O=1;e>=u,l-=u,$e=1<<32-Ie(t)+l|n<N?(H=_,_=null):H=_.sibling;var R=m(f,_,d[N],h);if(R===null){_===null&&(_=H);break}e&&_&&R.alternate===null&&t(f,_),c=o(R,c,N),x===null?E=R:x.sibling=R,x=R,_=H}if(N===d.length)return n(f,_),U&&wt(f,N),E;if(_===null){for(;NN?(H=_,_=null):H=_.sibling;var Ne=m(f,_,R.value,h);if(Ne===null){_===null&&(_=H);break}e&&_&&Ne.alternate===null&&t(f,_),c=o(Ne,c,N),x===null?E=Ne:x.sibling=Ne,x=Ne,_=H}if(R.done)return n(f,_),U&&wt(f,N),E;if(_===null){for(;!R.done;N++,R=d.next())R=p(f,R.value,h),R!==null&&(c=o(R,c,N),x===null?E=R:x.sibling=R,x=R);return U&&wt(f,N),E}for(_=r(f,_);!R.done;N++,R=d.next())R=y(_,f,N,R.value,h),R!==null&&(e&&R.alternate!==null&&_.delete(R.key===null?N:R.key),c=o(R,c,N),x===null?E=R:x.sibling=R,x=R);return e&&_.forEach(function(an){return t(f,an)}),U&&wt(f,N),E}function j(f,c,d,h){if(typeof d=="object"&&d!==null&&d.type===Mt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case or:e:{for(var E=d.key,x=c;x!==null;){if(x.key===E){if(E=d.type,E===Mt){if(x.tag===7){n(f,x.sibling),c=l(x,d.props.children),c.return=f,f=c;break e}}else if(x.elementType===E||typeof E=="object"&&E!==null&&E.$$typeof===qe&&xi(E)===x.type){n(f,x.sibling),c=l(x,d.props),c.ref=hn(f,x,d),c.return=f,f=c;break e}n(f,x);break}else t(f,x);x=x.sibling}d.type===Mt?(c=_t(d.props.children,f.mode,h,d.key),c.return=f,f=c):(h=Ir(d.type,d.key,d.props,null,f.mode,h),h.ref=hn(f,c,d),h.return=f,f=h)}return u(f);case jt:e:{for(x=d.key;c!==null;){if(c.key===x)if(c.tag===4&&c.stateNode.containerInfo===d.containerInfo&&c.stateNode.implementation===d.implementation){n(f,c.sibling),c=l(c,d.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=Xl(d,f.mode,h),c.return=f,f=c}return u(f);case qe:return x=d._init,j(f,c,x(d._payload),h)}if(kn(d))return w(f,c,d,h);if(fn(d))return k(f,c,d,h);hr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,c!==null&&c.tag===6?(n(f,c.sibling),c=l(c,d),c.return=f,f=c):(n(f,c),c=Yl(d,f.mode,h),c.return=f,f=c),u(f)):n(f,c)}return j}var tn=ha(!0),ga=ha(!1),Gr=vt(null),Kr=null,Ht=null,mu=null;function vu(){mu=Ht=Kr=null}function hu(e){var t=Gr.current;F(Gr),e._currentValue=t}function zo(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Zt(e,t){Kr=e,mu=Ht=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(ce=!0),e.firstContext=null)}function xe(e){var t=e._currentValue;if(mu!==e)if(e={context:e,memoizedValue:t,next:null},Ht===null){if(Kr===null)throw Error(g(308));Ht=e,Kr.dependencies={lanes:0,firstContext:e}}else Ht=Ht.next=e;return t}var Et=null;function gu(e){Et===null?Et=[e]:Et.push(e)}function ya(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,gu(t)):(n.next=l.next,l.next=n),t.interleaved=n,Ke(e,r)}function Ke(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var be=!1;function yu(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function wa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function We(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function st(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,I&2){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,Ke(e,n)}return l=r.interleaved,l===null?(t.next=t,gu(r)):(t.next=l.next,l.next=t),r.interleaved=t,Ke(e,n)}function Nr(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ru(e,n)}}function _i(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var u={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=u:o=o.next=u,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Yr(e,t,n,r){var l=e.updateQueue;be=!1;var o=l.firstBaseUpdate,u=l.lastBaseUpdate,s=l.shared.pending;if(s!==null){l.shared.pending=null;var i=s,a=i.next;i.next=null,u===null?o=a:u.next=a,u=i;var v=e.alternate;v!==null&&(v=v.updateQueue,s=v.lastBaseUpdate,s!==u&&(s===null?v.firstBaseUpdate=a:s.next=a,v.lastBaseUpdate=i))}if(o!==null){var p=l.baseState;u=0,v=a=i=null,s=o;do{var m=s.lane,y=s.eventTime;if((r&m)===m){v!==null&&(v=v.next={eventTime:y,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var w=e,k=s;switch(m=t,y=n,k.tag){case 1:if(w=k.payload,typeof w=="function"){p=w.call(y,p,m);break e}p=w;break e;case 3:w.flags=w.flags&-65537|128;case 0:if(w=k.payload,m=typeof w=="function"?w.call(y,p,m):w,m==null)break e;p=B({},p,m);break e;case 2:be=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,m=l.effects,m===null?l.effects=[s]:m.push(s))}else y={eventTime:y,lane:m,tag:s.tag,payload:s.payload,callback:s.callback,next:null},v===null?(a=v=y,i=p):v=v.next=y,u|=m;if(s=s.next,s===null){if(s=l.shared.pending,s===null)break;m=s,s=m.next,m.next=null,l.lastBaseUpdate=m,l.shared.pending=null}}while(!0);if(v===null&&(i=p),l.baseState=i,l.firstBaseUpdate=a,l.lastBaseUpdate=v,t=l.shared.interleaved,t!==null){l=t;do u|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);Tt|=u,e.lanes=u,e.memoizedState=p}}function Ni(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Hl.transition;Hl.transition={};try{e(!1),t()}finally{O=n,Hl.transition=r}}function Da(){return _e().memoizedState}function _d(e,t,n){var r=ct(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Fa(e))Ua(t,n);else if(n=ya(e,t,n,r),n!==null){var l=ue();Oe(n,e,r,l),Aa(n,t,r)}}function Nd(e,t,n){var r=ct(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fa(e))Ua(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var u=t.lastRenderedState,s=o(u,n);if(l.hasEagerState=!0,l.eagerState=s,je(s,u)){var i=t.interleaved;i===null?(l.next=l,gu(t)):(l.next=i.next,i.next=l),t.interleaved=l;return}}catch{}finally{}n=ya(e,t,l,r),n!==null&&(l=ue(),Oe(n,e,r,l),Aa(n,t,r))}}function Fa(e){var t=e.alternate;return e===V||t!==null&&t===V}function Ua(e,t){Tn=Zr=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Aa(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ru(e,n)}}var Jr={readContext:xe,useCallback:te,useContext:te,useEffect:te,useImperativeHandle:te,useInsertionEffect:te,useLayoutEffect:te,useMemo:te,useReducer:te,useRef:te,useState:te,useDebugValue:te,useDeferredValue:te,useTransition:te,useMutableSource:te,useSyncExternalStore:te,useId:te,unstable_isNewReconciler:!1},Pd={readContext:xe,useCallback:function(e,t){return De().memoizedState=[e,t===void 0?null:t],e},useContext:xe,useEffect:zi,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,zr(4194308,4,Ra.bind(null,t,e),n)},useLayoutEffect:function(e,t){return zr(4194308,4,e,t)},useInsertionEffect:function(e,t){return zr(4,2,e,t)},useMemo:function(e,t){var n=De();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=De();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=_d.bind(null,V,e),[r.memoizedState,e]},useRef:function(e){var t=De();return e={current:e},t.memoizedState=e},useState:Pi,useDebugValue:Nu,useDeferredValue:function(e){return De().memoizedState=e},useTransition:function(){var e=Pi(!1),t=e[0];return e=xd.bind(null,e[1]),De().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=V,l=De();if(U){if(n===void 0)throw Error(g(407));n=n()}else{if(n=t(),J===null)throw Error(g(349));zt&30||Ca(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,zi(_a.bind(null,r,o,e),[e]),r.flags|=2048,Yn(9,xa.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=De(),t=J.identifierPrefix;if(U){var n=He,r=$e;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Gn++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Ue]=t,e[Kn]=r,ec(e,t,!1,!1),t.stateNode=e;e:{switch(u=po(n,r),n){case"dialog":j("cancel",e),j("close",e),l=r;break;case"iframe":case"object":case"embed":j("load",e),l=r;break;case"video":case"audio":for(l=0;lan&&(t.flags|=128,r=!0,kn(o,!1),t.lanes=4194304)}else{if(!r)if(e=qr(u),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),kn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!u.alternate&&!A)return ne(t),null}else 2*Q()-o.renderingStartTime>an&&n!==1073741824&&(t.flags|=128,r=!0,kn(o,!1),t.lanes=4194304);o.isBackwards?(u.sibling=t.child,t.child=u):(n=o.last,n!==null?n.sibling=u:t.child=u,o.last=u)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Q(),t.sibling=null,n=V.current,I(V,r?n&1|2:n&1),t):(ne(t),null);case 22:case 23:return Fu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?ve&1073741824&&(ne(t),t.subtreeFlags&6&&(t.flags|=8192)):ne(t),null;case 24:return null;case 25:return null}throw Error(w(156,t.tag))}function Vd(e,t){switch(gu(t),t.tag){case 1:return de(t.type)&&Qr(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return un(),F(fe),F(le),Nu(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return xu(t),null;case 13:if(F(V),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(w(340));ln()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return F(V),null;case 4:return un(),null;case 10:return ku(t.type._context),null;case 22:case 23:return Fu(),null;case 24:return null;default:return null}}var kr=!1,re=!1,Bd=typeof WeakSet=="function"?WeakSet:Set,k=null;function Yt(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){W(e,t,r)}else n.current=null}function Vo(e,t,n){try{n()}catch(r){W(e,t,r)}}var Gi=!1;function $d(e,t){if(Eo=Br,e=ia(),mu(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var u=0,i=-1,s=-1,a=0,m=0,p=e,d=null;t:for(;;){for(var v;p!==n||l!==0&&p.nodeType!==3||(i=u+l),p!==o||r!==0&&p.nodeType!==3||(s=u+r),p.nodeType===3&&(u+=p.nodeValue.length),(v=p.firstChild)!==null;)d=p,p=v;for(;;){if(p===e)break t;if(d===n&&++a===l&&(i=u),d===o&&++m===r&&(s=u),(v=p.nextSibling)!==null)break;p=d,d=p.parentNode}p=v}n=i===-1||s===-1?null:{start:i,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(_o={focusedElem:e,selectionRange:n},Br=!1,k=t;k!==null;)if(t=k,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,k=e;else for(;k!==null;){t=k;try{var S=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(S!==null){var y=S.memoizedProps,P=S.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?y:Te(t.type,y),P);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var h=t.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(w(163))}}catch(g){W(t,t.return,g)}if(e=t.sibling,e!==null){e.return=t.return,k=e;break}k=t.return}return S=Gi,Gi=!1,S}function Mn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Vo(t,n,o)}l=l.next}while(l!==r)}}function vl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Bo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function rc(e){var t=e.alternate;t!==null&&(e.alternate=null,rc(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ue],delete t[Kn],delete t[Po],delete t[_d],delete t[xd])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function lc(e){return e.tag===5||e.tag===3||e.tag===4}function Ki(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||lc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function $o(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Hr));else if(r!==4&&(e=e.child,e!==null))for($o(e,t,n),e=e.sibling;e!==null;)$o(e,t,n),e=e.sibling}function Wo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Wo(e,t,n),e=e.sibling;e!==null;)Wo(e,t,n),e=e.sibling}var q=null,Le=!1;function Je(e,t,n){for(n=n.child;n!==null;)oc(e,t,n),n=n.sibling}function oc(e,t,n){if(Ae&&typeof Ae.onCommitFiberUnmount=="function")try{Ae.onCommitFiberUnmount(sl,n)}catch{}switch(n.tag){case 5:re||Yt(n,t);case 6:var r=q,l=Le;q=null,Je(e,t,n),q=r,Le=l,q!==null&&(Le?(e=q,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):q.removeChild(n.stateNode));break;case 18:q!==null&&(Le?(e=q,n=n.stateNode,e.nodeType===8?Wl(e.parentNode,n):e.nodeType===1&&Wl(e,n),$n(e)):Wl(q,n.stateNode));break;case 4:r=q,l=Le,q=n.stateNode.containerInfo,Le=!0,Je(e,t,n),q=r,Le=l;break;case 0:case 11:case 14:case 15:if(!re&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,u=o.destroy;o=o.tag,u!==void 0&&(o&2||o&4)&&Vo(n,t,u),l=l.next}while(l!==r)}Je(e,t,n);break;case 1:if(!re&&(Yt(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(i){W(n,t,i)}Je(e,t,n);break;case 21:Je(e,t,n);break;case 22:n.mode&1?(re=(r=re)||n.memoizedState!==null,Je(e,t,n),re=r):Je(e,t,n);break;default:Je(e,t,n)}}function Yi(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Bd),t.forEach(function(r){var l=Jd.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function ze(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=u),r&=~o}if(r=l,r=Q()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Hd(r/1960))-r,10e?16:e,rt===null)var r=!1;else{if(e=rt,rt=null,rl=0,M&6)throw Error(w(331));var l=M;for(M|=4,k=e.current;k!==null;){var o=k,u=o.child;if(k.flags&16){var i=o.deletions;if(i!==null){for(var s=0;sQ()-Iu?Pt(e,0):Du|=n),pe(e,t)}function pc(e,t){t===0&&(e.mode&1?(t=dr,dr<<=1,!(dr&130023424)&&(dr=4194304)):t=1);var n=ue();e=Ye(e,t),e!==null&&(tr(e,t,n),pe(e,n))}function Zd(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),pc(e,n)}function Jd(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(w(314))}r!==null&&r.delete(t),pc(e,n)}var hc;hc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||fe.current)ce=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ce=!1,Ud(e,t,n);ce=!!(e.flags&131072)}else ce=!1,A&&t.flags&1048576&&ya(t,Yr,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Or(e,t),e=t.pendingProps;var l=rn(t,le.current);en(t,n),l=zu(null,t,r,e,l,n);var o=Tu();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,de(r)?(o=!0,Gr(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Eu(t),l.updater=ml,t.stateNode=l,l._reactInternals=t,Mo(t,r,e,n),t=jo(null,t,r,!0,o,n)):(t.tag=0,A&&o&&vu(t),oe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Or(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=bd(r),e=Te(r,e),l){case 0:t=Io(null,t,r,e,n);break e;case 1:t=Wi(null,t,r,e,n);break e;case 11:t=Bi(null,t,r,e,n);break e;case 14:t=$i(null,t,r,Te(r.type,e),n);break e}throw Error(w(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Te(r,l),Io(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Te(r,l),Wi(e,t,r,l,n);case 3:e:{if(Ja(t),e===null)throw Error(w(387));r=t.pendingProps,o=t.memoizedState,l=o.element,_a(e,t),Jr(t,r,null,n);var u=t.memoizedState;if(r=u.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=sn(Error(w(423)),t),t=Hi(e,t,r,n,l);break e}else if(r!==l){l=sn(Error(w(424)),t),t=Hi(e,t,r,n,l);break e}else for(ge=at(t.stateNode.containerInfo.firstChild),ye=t,A=!0,Re=null,n=Ca(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ln(),r===l){t=Xe(e,t,n);break e}oe(e,t,r,n)}t=t.child}return t;case 5:return xa(t),e===null&&Lo(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,u=l.children,xo(r,l)?u=null:o!==null&&xo(r,o)&&(t.flags|=32),Za(e,t),oe(e,t,u,n),t.child;case 6:return e===null&&Lo(t),null;case 13:return qa(e,t,n);case 4:return _u(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=on(t,null,r,n):oe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Te(r,l),Bi(e,t,r,l,n);case 7:return oe(e,t,t.pendingProps,n),t.child;case 8:return oe(e,t,t.pendingProps.children,n),t.child;case 12:return oe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,u=l.value,I(Xr,r._currentValue),r._currentValue=u,o!==null)if(Ie(o.value,u)){if(o.children===l.children&&!fe.current){t=Xe(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var i=o.dependencies;if(i!==null){u=o.child;for(var s=i.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=Qe(-1,n&-n),s.tag=2;var a=o.updateQueue;if(a!==null){a=a.shared;var m=a.pending;m===null?s.next=s:(s.next=m.next,m.next=s),a.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),Ro(o.return,n,t),i.lanes|=n;break}s=s.next}}else if(o.tag===10)u=o.type===t.type?null:o.child;else if(o.tag===18){if(u=o.return,u===null)throw Error(w(341));u.lanes|=n,i=u.alternate,i!==null&&(i.lanes|=n),Ro(u,n,t),u=o.sibling}else u=o.child;if(u!==null)u.return=o;else for(u=o;u!==null;){if(u===t){u=null;break}if(o=u.sibling,o!==null){o.return=u.return,u=o;break}u=u.return}o=u}oe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,en(t,n),l=Ne(l),r=r(l),t.flags|=1,oe(e,t,r,n),t.child;case 14:return r=t.type,l=Te(r,t.pendingProps),l=Te(r.type,l),$i(e,t,r,l,n);case 15:return Ya(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Te(r,l),Or(e,t),t.tag=1,de(r)?(e=!0,Gr(t)):e=!1,en(t,n),Qa(t,r,l),Mo(t,r,l,n),jo(null,t,r,!0,e,n);case 19:return ba(e,t,n);case 22:return Xa(e,t,n)}throw Error(w(156,t.tag))};function mc(e,t){return $s(e,t)}function qd(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function _e(e,t,n,r){return new qd(e,t,n,r)}function Au(e){return e=e.prototype,!(!e||!e.isReactComponent)}function bd(e){if(typeof e=="function")return Au(e)?1:0;if(e!=null){if(e=e.$$typeof,e===lu)return 11;if(e===ou)return 14}return 2}function pt(e,t){var n=e.alternate;return n===null?(n=_e(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ir(e,t,n,r,l,o){var u=2;if(r=e,typeof e=="function")Au(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case At:return zt(n.children,l,o,t);case ru:u=8,l|=8;break;case no:return e=_e(12,n,t,l|2),e.elementType=no,e.lanes=o,e;case ro:return e=_e(13,n,t,l),e.elementType=ro,e.lanes=o,e;case lo:return e=_e(19,n,t,l),e.elementType=lo,e.lanes=o,e;case xs:return yl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case Es:u=10;break e;case _s:u=9;break e;case lu:u=11;break e;case ou:u=14;break e;case qe:u=16,r=null;break e}throw Error(w(130,e==null?e:typeof e,""))}return t=_e(u,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function zt(e,t,n,r){return e=_e(7,e,r,t),e.lanes=n,e}function yl(e,t,n,r){return e=_e(22,e,r,t),e.elementType=xs,e.lanes=n,e.stateNode={isHidden:!1},e}function Jl(e,t,n){return e=_e(6,e,null,t),e.lanes=n,e}function ql(e,t,n){return t=_e(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function ep(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Ol(0),this.expirationTimes=Ol(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ol(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Vu(e,t,n,r,l,o,u,i,s){return e=new ep(e,t,n,i,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=_e(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Eu(o),e}function tp(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(wc)}catch(e){console.error(e)}}wc(),ws.exports=Se;var up=ws.exports,ns=up;eo.createRoot=ns.createRoot,eo.hydrateRoot=ns.hydrateRoot;function he(){return Rc}const ip=he();ip.rootGraph;function Sc(){return he()?.rootGraph??null}function rs(e){var n;const t=Sc();if(!t){console.warn("[BV] rootGraph not ready yet, cannot write config");return}t.extra??(t.extra={}),(n=t.extra).bv_settings??(n.bv_settings={}),t.extra.bv_settings.controlConfig=e,t.setDirtyCanvas?.(!0,!0)}function vt(){return Sc()?.extra?.bv_settings?.controlConfig??null}const sp=({index:e,row:t,maxCols:n,onChange:r,groups:l})=>{Oe.useEffect(()=>{const i=l.map(a=>a.group.title),s=t.entries.filter(a=>a.kind==="group"?i.includes(a.ref.title):!0);s.length!==t.entries.length&&r(e,{...t,entries:s},!1)},[l,t.entries,e,r,t.title]);const o=(i,s)=>{if(i===null){const p={kind:"group",ref:{title:s},action:"bypass"};r(e,{...t,entries:[...t.entries,p]},!1);return}if(s=="Nothing Selected"){r(e,{...t,entries:t.entries.filter((p,d)=>d!==i)},!1);return}const m={...t.entries[i],kind:"group",ref:{title:s}};r(e,{...t,entries:[...t.entries.slice(0,i),m,...t.entries.slice(i+1)]},!1)},u=(i,s)=>{const m={...t.entries[i],action:s};r(e,{...t,entries:[...t.entries.slice(0,i),m,...t.entries.slice(i+1)]},!1)};return O.jsxs(O.Fragment,{children:[O.jsx("div",{children:O.jsx("input",{type:"text",value:t.title,onChange:i=>r(e,{...t,title:i.target.value},!1)})}),t.entries.map((i,s)=>O.jsxs("div",{style:{display:"flex",gap:"4px"},children:[O.jsxs("select",{value:i.ref.title,onChange:a=>o(s,a.target.value),children:[O.jsx("option",{children:"Nothing Selected"}),l.map(a=>O.jsx("option",{children:a.group.title},a.group.title))]}),O.jsxs("select",{value:i.action,onChange:a=>u(s,a.target.value),children:[O.jsx("option",{value:"mute",children:"Mute"}),O.jsx("option",{value:"bypass",children:"Bypass"})]})]},s)),O.jsx("div",{children:O.jsxs("select",{value:"Nothing Selected",onChange:i=>o(null,i.target.value),children:[O.jsx("option",{children:"Nothing Selected"}),l.map(i=>O.jsx("option",{children:i.group.title},i.group.title))]})}),Array.from({length:n-t.entries.length-3}).map((i,s)=>O.jsx("div",{},`empty_${s}`)),O.jsx("div",{children:O.jsx("button",{onClick:()=>r(e,t,!0),children:"Delete"})})]})};function ap(e){if(!e||typeof e!="object")return null;const t=e,n=t.rootGraph;if(n&&typeof n=="object")return n;const r=t.graph;return r&&typeof r=="object"?r:e}function cp(e){return e._nodes??e.nodes??[]}function fp(e){return e._groups??e.groups??[]}function dp(e){if(e.subgraph&&typeof e.subgraph=="object")return e.subgraph;if(typeof e.getSubgraph=="function")try{return e.getSubgraph()??null}catch{return null}return null}function pp(e,t){const n=new Set,r=[{graph:e,path:[]}];for(;r.length;){const{graph:l,path:o}=r.pop(),u=l;if(!n.has(u)){n.add(u),t(l,o);for(const i of cp(l)){const s=dp(i);s&&r.push({graph:s,path:o.concat([{node:i,graph:l,depth:o.length+1}])})}}}}function hp(e){const t=ap(e);if(!t)return[];const n=[];return pp(t,(r,l)=>{for(const o of fp(r))n.push({group:o,graph:r,path:l})}),n}const mp=({onClose:e})=>{const[t,n]=Oe.useState(vt()),r=he(),l=Oe.useMemo(()=>hp(r),[r,t]),o=()=>{if(t){const m="New Row";let p=m,d=1;for(;t.rows.some(v=>v.title===p);)p=`${m} ${d}`,d++;n({rows:[...t.rows,{title:p,entries:[]}]})}else n({rows:[{title:"New Row",entries:[]}]})},u=()=>{rs(t)},i=()=>{rs(null),n(null)},s=(m,p,d)=>{if(t)if(d)n({...t,rows:t.rows.filter((v,S)=>S!==m)});else{if(t.rows.some((S,y)=>y!==m&&S.title===p.title)&&t.rows[m].title!==p.title){let y=p.title,P=1;for(;t.rows.some((f,c)=>c!==m&&f.title===y);)y=`${p.title} ${P}`,P++;p={...p,title:y}}n({...t,rows:t.rows.map((S,y)=>y===m?p:S)})}},a=(t?.rows.reduce((m,p)=>Math.max(m,p.entries.length),0)??0)+3;return O.jsxs("div",{className:"grid grid-cols-1 gap-4 p-4",children:[t&&O.jsxs("div",{className:"grid gap-4 p-4 items-center",style:{gridTemplateColumns:`max-content repeat(${a-2}, auto) max-content`},children:[Array.from({length:a},(m,p)=>p===0?O.jsx("div",{children:"Title"},`header_${p}`):p===a-1?O.jsx("div",{},`header_${p}`):O.jsxs("div",{children:["Selection ",p]},`header_${p}`)),t.rows.map((m,p)=>O.jsx(sp,{index:p,row:m,onChange:s,maxCols:a,groups:l},p))]}),O.jsxs("div",{className:"grid grid-cols-1 gap-4 p-4",children:[O.jsx("button",{onClick:o,children:"Add Row"}),O.jsx("button",{onClick:u,children:"Save Config"}),O.jsx("button",{onClick:i,children:"Clear Config"}),O.jsx("button",{onClick:e,children:"Close"})]})]})},vp=({open:e,onClose:t,children:n})=>{const r=Oe.useMemo(()=>document.createElement("div"),[]);return Oe.useEffect(()=>(r.setAttribute("data-addon-modal-root","true"),document.body.appendChild(r),()=>{document.body.removeChild(r)}),[r]),Oe.useEffect(()=>{if(!e)return;const l=o=>{o.key==="Escape"&&t()};return window.addEventListener("keydown",l,{capture:!0}),()=>window.removeEventListener("keydown",l,{capture:!0})},[e,t]),e?O.jsx("div",{role:"dialog","aria-modal":"true",onMouseDown:l=>{l.target===l.currentTarget&&t()},style:{position:"fixed",inset:0,display:"grid",placeItems:"center",background:"rgba(0,0,0,0.45)",zIndex:2147483647},children:O.jsx("div",{className:"p-dialog",onMouseDown:l=>l.stopPropagation(),children:O.jsx(mp,{onClose:()=>t()})})}):null},kc=0,gp=4,yp=2;function wp(e){if(!e||typeof e!="object")return null;const t=e;return t.rootGraph&&typeof t.rootGraph=="object"?t.rootGraph:t.graph&&typeof t.graph=="object"?t.graph:e}function Cc(e){return e._nodes??e.nodes??[]}function Sp(e){return e._groups??e.groups??[]}function kp(e){return e.isSubgraphNode()?e.subgraph:null}function Cp(e,t){const n=new Set,r=[e];for(;r.length;){const l=r.pop(),o=l;if(!n.has(o)){n.add(o),t(l);for(const u of Cc(l)){const i=kp(u);i&&r.push(i)}}}}const jn="__bv_prev_mode",Ec="__bv_bypass",ul="__bv_prev_mode_for_bypass";function Ep(e){const t=e.size;return Array.isArray(t)&&t.length>=2?[Number(t[0])||0,Number(t[1])||0]:[0,0]}function _p(e,t,n="overlap"){const r=t.pos??[0,0],l=t.size??[0,0],o=e.pos??[0,0],u=Ep(e),i=r[0],s=r[1],a=r[0]+l[0],m=r[1]+l[1],p=o[0],d=o[1],v=o[0]+u[0],S=o[1]+u[1];if(n==="topleft")return p>=i&&p<=a&&d>=s&&d<=m;if(n==="fully")return p>=i&&d>=s&&v<=a&&S<=m;const y=p<=a&&v>=i,P=d<=m&&S>=s;return y&&P}function xp(e,t){const n=wp(e);if(!n)return[];const r=[],l=t.trim();return Cp(n,o=>{for(const u of Sp(o))(u.title??"").trim()===l&&r.push({graph:o,group:u})}),r}function Np(e,t,n="overlap"){return Cc(e).filter(l=>_p(l,t,n))}function El(e,t,n){const l=xp(e,t).map(({graph:u,group:i})=>({graph:u,group:i,nodes:Np(u,i,n)})),o=l.reduce((u,i)=>u+i.nodes.length,0);return{groupTitle:t,affectedGroups:l.length,affectedNodes:o,perGroup:l}}function Pp(e,t,n="overlap"){const r=El(e,t,n);for(const l of r.perGroup)for(const o of l.nodes){const u=o;u.properties??(u.properties={}),typeof u.properties[jn]!="number"&&(u.properties[jn]=typeof u.mode=="number"?u.mode:0),u.mode=yp}return r}function zp(e,t,n="overlap"){const r=El(e,t,n);for(const l of r.perGroup)for(const o of l.nodes){const u=o,i=u.properties?.[jn];u.mode=typeof i=="number"?i:kc,u.properties&&jn in u.properties&&delete u.properties[jn]}return r}function Tp(e,t,n="overlap"){const r=El(e,t,n);for(const l of r.perGroup)for(const o of l.nodes){const u=o;u.properties??(u.properties={}),typeof u.properties[ul]!="number"&&(u.properties[ul]=typeof u.mode=="number"?u.mode:0),u.properties[Ec]=!0,u.mode=gp}return r}function Lp(e,t,n="overlap"){const r=El(e,t,n);for(const l of r.perGroup)for(const o of l.nodes){const u=o,i=u.properties?.[ul];u.mode=typeof i=="number"?i:kc,u.properties&&(delete u.properties[Ec],delete u.properties[ul])}return r}function _c(e){he().extensionManager.toast.add({severity:"error",summary:"Error",detail:e,life:5e3})}function Dt(e,t,n=!1){if(!t?.nodes)return;let r;return t.nodes.forEach(l=>{r||(l.id==e&&(n?(r=l,l.subgraph&&!l.type&&(r=l)):l.subgraph||(r=l)),!r&&l.isSubgraphNode&&(r=Dt(e,l.subgraph)))}),r}function xc(e){const t=[];return e.forEach(n=>{if(n.isSubgraphNode&&n.isSubgraphNode()){const r=n;t.push(...xc(r.subgraph.nodes))}else n.type==="BV Control Center"&&t.push(n)}),t}function Hu(e,t,n){let r=n;if(n||(r=e.inputs[t].label,r||(r=e.inputs[t].name)),!r)return!1;try{if(e.getInputLink(t)){if(e.graph?._subgraphs){const l=e.graph,o=e.getInputLink(t),u=o?.origin_id,i=o?.origin_slot;if(l.inputNode.id==u&&typeof i=="number"){const s=l.inputNode.allSlots[i];return l.renameInput(s,r),!0}return!1}return!0}}catch(l){return console.error("Error renaming subgraph input slot (LINK)",l),!1}return!1}function Rp(e){const t=[],n=r=>{for(const l of r??[])l?.isSubgraphNode?.()&&(t.push(l),l.subgraph?.nodes&&n(l.subgraph.nodes))};return n(e?.nodes),t}function Op(e,t){if(!e?.isSubgraphNode?.())return;const n=e.subgraph;if(!n)return;const r=n._nodes??n.nodes??[],l=o=>o?.type===t||o?.comfyClass===t||o?.title===t;return r.find(l)}function Qu(e){if(e.graph?.subgraphs){let t=function(r,l){let o;for(const u of r.nodes){if(o)return o;if(u.isSubgraphNode()){if(l==u.type)return u;if(o=t(u.subgraph,l),o)return o}}return o};const n=e.graph;return t(he().rootGraph,n.id)}}function Nc(e,t,n){const r=e?.constructor?.prototype;if(!r||r.__bv_patched)return!1;r.__bv_patched=!0;const l=r.onWidgetChanged;return r.onWidgetChanged=function(o,u,i,s){let a;try{a=l?.apply(this,arguments)}catch{}const m=he()?.rootGraph,p=Dt(this.id,m,!0),d=s,v=Op(p,"BV Control Center");return p&&v&&(console.debug("Subgraph container widget changed",o,u,i,s,p,s.label),v.widgets?.forEach(S=>{S.name==d.name&&(S.label=s.label)})),s?.label&&n(s.label,u),a},!0}function Mp(e,t,n){if(!e?.graph)return!1;const l=Qu(e);return l?Nc(l,t,n):!1}function Dp(e,t,n,r=20){let l=0;const o=()=>{console.debug("Retrying patching subgraph container from inner node",e.id,l),l++,!Mp(e,t,n)&&(l>=r||requestAnimationFrame(o))};o()}const Pc="BV Control Center";let bl=!1;function Ip(){bl||(bl=!0,setTimeout(()=>{bl=!1;const e=he()?.rootGraph;if(!e)return;const t=[],n=o=>{for(const u of o?.nodes??[])u&&(u.type===Pc&&t.push({node:u,graph:o}),u.isSubgraphNode?.()&&u.subgraph&&n(u.subgraph))};if(n(e),t.length<=1)return;t.sort((o,u)=>(o.node?.id??0)-(u.node?.id??0));const r=t[0].node;let l=!1;for(const o of t.slice(1)){const u=o.node,i=o.graph;if(u!==r){try{i.remove(u)}catch{const s=i.nodes?.indexOf(u);s>=0&&i.nodes.splice(s,1)}l=!0}}l&&(_c("BV Control Center is already in the workflow."),e.setDirtyCanvas?.(!0,!0))},0))}function jp(){const e=window.LGraph;if(!e?.prototype)return!1;const t=e.prototype;if(t.__bv_singleton_add_patched)return!0;t.__bv_singleton_add_patched=!0;const n=t.add?"add":t.addNode?"addNode":null;if(!n)return!1;const r=t[n];return t[n]=function(l){const o=r.apply(this,arguments);return l?.type===Pc&&Ip(),o},!0}const lt="ACTIVE",ot="MUTE/BYPASS",Fp=he();let ls=!1;function Up(){if(ls)return;ls=!0;let e=vt();e&&os(e),setInterval(()=>{const t=vt();t&&JSON.stringify(t)!==JSON.stringify(e)&&(e=t,os(e))},500)}function zc(e,t){let n=!1,r;if(e.subgraph.inputs.forEach(s=>{s.getLinks().forEach(a=>{n||(r=Dt(a.target_id,e.graph),!n&&r?.type=="BV Control Center"&&(n=!0))})}),!r)return;const l=vt();if(!l)return;let o=0;const u=200,i=()=>{Yo(r,l,void 0,!0)||o>=u||(o++,setTimeout(i,10))};i()}function Yo(e,t,n,r=!0,l){if(!e||!t)return!1;let o=!1;e.widgets||(e.widgets=[]);const u=n??e.widgets_values,i=t.rows.length;for(;e.inputs.lengthe.setDirtyCanvas(!0),{on:lt,off:ot});v.label=p,v.serialize=!0,e.inputs[a]._widget=v,o=!0}for(;e.inputs.length>i;){const a=e.inputs.length-1,m=`bvcc_${String(a).padStart(3,"0")}`,p=e.widgets?.findIndex(d=>d.name===m)??-1;p!==-1&&e.widgets.splice(p,1),e.isInputConnected(a)&&e.disconnectInput(a),e.removeInput(a),o=!0}let s=!0;for(let a=0;ay.name===p);if(d)d.options&&(d.options.on!==lt||d.options.off!==ot)&&(d.options.on=lt,d.options.off=ot,o=!0),r&&u&&u[a]!==void 0&&d.value!==u[a]&&(d.value=u[a],d.label=m,o=!0);else{const y=u&&u[a]!==void 0?u[a]:!0;d=e.addWidget("toggle",p,y,()=>e.setDirtyCanvas(!0),{on:lt,off:ot}),d.serialize=!0,d.label=m,o=!0}e.inputs[a]&&(e.inputs[a].widget={name:p},e.inputs[a]._widget=d);const v=Dt(e.id,e.graph);if(v){v.inputs[a];const y=v.getInputLink(a);y&&v.graph&&setTimeout(()=>{const P=Qu(v);if(P){const f=P.widgets;if(f){const c=f[y.origin_slot];c&&(c.label=m)}}},50)}if(Dt(e.id,e.graph)){let y=!1;y=Hu(e,a,m),y||(s=!1)}else s=!1}return o&&(e.serialize_widgets=!0,e.setDirtyCanvas(!0,!0),e.size=e.computeSize?.()??e.size),s}function os(e,t){const r=he().rootGraph;if(!r?.nodes||!e)return;xc(r.nodes).forEach(o=>{let u=!1;o.widgets||(o.widgets=[]);const i=o.widgets_values,s=Math.min(o.inputs.length,e.rows.length);for(let a=0;av.name===p);if(d)i&&i[a]!==void 0&&d.value!==i[a]&&(d.value=i[a],u=!0),d.options&&(d.options.on!==lt||d.options.off!==ot)&&(d.options.on=lt,d.options.off=ot,u=!0);else{const v=i&&i[a]!==void 0?i[a]:!0;d=o.addWidget("toggle",p,v,()=>o.setDirtyCanvas(!0),{on:lt,off:ot}),d.serialize=!0,u=!0}o.inputs[a].widget={name:p},o.inputs[a]._widget=d,Hu(o,a,m)}if(o.inputs.length>e.rows.length)for(let a=o.inputs.length-1;a>=e.rows.length;a--){const m=`bvcc_${String(a).padStart(3,"0")}`,p=o.widgets?.findIndex(d=>d.name===m)??-1;p!==-1&&o.widgets.splice(p,1),o.isInputConnected(a)&&o.disconnectInput(a),o.removeInput(a),u=!0}else if(o.inputs.lengtho.setDirtyCanvas(!0),{on:lt,off:ot});v.serialize=!0,o.inputs[a]._widget=v,u=!0}u&&(o.serialize_widgets=!0,o.setDirtyCanvas(!0,!0),o.size=o.computeSize())})}function Ap(e){if(e.__bv_onWidgetChanged_patched)return;e.__bv_onWidgetChanged_patched=!0;const t=e.onWidgetChanged;e.onWidgetChanged=function(n,r,l,o){let u;try{u=t?.apply(this,arguments)}catch{}if(vt()){const s=e.widgets.indexOf(o),a=s!==-1&&e.inputs[s]?e.inputs[s].label:o.label;if(!a)return;Gu(a,r)}return u}}function Vp(e){return e.ref.title}function Tc(e){return(e??"").toString().toLowerCase().trim()==="bypass"?"bypass":"mute"}function Bp(e,t,n){if(!e)return;const r=he();if(Tc(t)==="bypass"){n?Tp(r,e,"overlap"):Lp(r,e,"overlap");return}n?Pp(r,e,"overlap"):zp(r,e,"overlap")}function Gu(e,t){const n=vt();if(!n)return;const r=!t,l=n.rows.find(o=>o.title===e);if(l)for(const o of l.entries){const u=Vp(o),i=Tc(o.action);u&&Bp(u,i,r)}}Fp.registerExtension({name:"bv_control_center",async beforeRegisterNodeDef(e,t){const n=e.type,r=t.name;if(!(n==="BVControlCenterNode"||r==="BV Control Center"||r?.includes("BV Control Center")||r?.includes("🌀 BV Control Center")))return;const o=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const a=o?o.apply(this,arguments):void 0;this.serialize_widgets=!0;const m=vt();return m&&setTimeout(()=>{Yo(this,m)},50),Ap(this),Up(),a};const u=e.prototype.onConfigure;e.prototype.onConfigure=function(a){const m=u?u.apply(this,arguments):void 0;this.serialize_widgets=!0;const p=vt();return p&&Yo(this,p,a?.widgets_values),m};const i=e.prototype.onConnectInput;e.prototype.onConnectInput=function(a,m,p,d,v){const S=i?i.apply(this,arguments):void 0;if(this.serialize_widgets=!0,d.type&&!d.subgraph)return _c("BV Control Center can only be connected to a Subgraph."),!1;if(this.type=="BV Control Center"){let y=function(c=0){if(c>=f)return;const h=Dt(P,he().rootGraph);h&&Hu(h,a)||setTimeout(()=>{y(c+1)},50)};if(Dp(this,zc,Gu),typeof this.id!="number")return S;const P=this.id,f=20;return y(),S}};const s=e.prototype.onConnectionsChange;e.prototype.onConnectionsChange=function(a,m,p,d){const v=s?s.apply(this,arguments):void 0;if(!p&&a===1&&this.type=="BV Control Center"){console.debug("onConnectionsChange",a,d,p,m);const S=this.id,y=Dt(S,he().rootGraph,!0);if(y){const P=Qu(y);if(d&&P&&P.widgets){const f=P.widgets[d.origin_slot],c=f.value;P.removeWidget(f);const h=P.computeSize?.()??P.size;P.setSize?.(h),P.size=h,P.setDirtyCanvas?.(!0,!0),P.graph?.setDirtyCanvas?.(!0,!0);const g=y.getInputInfo(m);g!=null&&y.getWidgetFromSlot(g)&&function(E,N,U){const z=E?.widgets?.find(me=>me?.name===N);return z?(z.value=U,(z.callback||z.onChange)?.call(z,U,E,z),E.setSize?.(E.computeSize?.()??E.size),E.setDirtyCanvas?.(!0,!0),E.graph?.setDirtyCanvas?.(!0,!0),!0):!1}(P,f.name,c)}}}return v}}});function $p(){const e=he()?.rootGraph;if(!e)return 0;const t=Rp(e);let n=0;for(const r of t)Nc(r,zc,Gu)&&n++;return n}function Wp(e){const t=e?.intervalMs,n=e?.maxAttempts,r=e?.stopWhenPatched??!0;let l=0;const o=()=>{l++;const u=$p();r&&u>0||l>=n||setTimeout(o,t)};o()}Wp({intervalMs:150,maxAttempts:80});(function e(t=0){jp()||t>80||setTimeout(()=>e(t+1),50)})();const Hp=he();let Xo=null;function Qp(){const[e,t]=Oe.useState(!1);return Oe.useEffect(()=>(Xo=n=>t(n),()=>{Xo=null}),[]),O.jsx(vp,{open:e,onClose:()=>t(!1),children:"Hi"})}const us="bv-root";function is(){let e=document.getElementById(us);e||(e=document.createElement("div"),e.id=us,document.body.appendChild(e),eo.createRoot(e).render(O.jsx(Yc.StrictMode,{children:O.jsx(Qp,{})})))}Hp.registerExtension({name:"bv_nodepack.action_button",setup(){is()},actionBarButtons:[{icon:"pi pi-wrench",tooltip:"BV Tools Configuration (Beta)",onClick:()=>{is(),Xo?.(!0)}}]}); +`+o.stack}return{value:e,source:t,stack:l,digest:null}}function Gl(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Ro(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var Ld=typeof WeakMap=="function"?WeakMap:Map;function Ba(e,t,n){n=We(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){br||(br=!0,Bo=r),Ro(e,t)},n}function $a(e,t,n){n=We(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){Ro(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Ro(e,t),typeof r!="function"&&(at===null?at=new Set([this]):at.add(this));var u=t.stack;this.componentDidCatch(t.value,{componentStack:u!==null?u:""})}),n}function Ri(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Ld;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=Wd.bind(null,e,t,n),t.then(e,e))}function Ii(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function Oi(e,t,n,r,l){return e.mode&1?(e.flags|=65536,e.lanes=l,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=We(-1,1),t.tag=2,st(n,t,1))),n.lanes|=1),e)}var Rd=Ze.ReactCurrentOwner,ce=!1;function oe(e,t,n,r){t.child=e===null?ga(t,null,n,r):tn(t,e.child,n,r)}function ji(e,t,n,r,l){n=n.render;var o=t.ref;return Zt(t,l),r=Cu(e,t,n,r,o,l),n=xu(),e!==null&&!ce?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Ye(e,t,l)):(U&&n&&fu(t),t.flags|=1,oe(e,t,r,l),t.child)}function Mi(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!ju(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Ha(e,t,o,r,l)):(e=Ir(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&l)){var u=o.memoizedProps;if(n=n.compare,n=n!==null?n:Vn,n(u,r)&&e.ref===t.ref)return Ye(e,t,l)}return t.flags|=1,e=ft(o,r),e.ref=t.ref,e.return=t,t.child=e}function Ha(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(Vn(o,r)&&e.ref===t.ref)if(ce=!1,t.pendingProps=r=o,(e.lanes&l)!==0)e.flags&131072&&(ce=!0);else return t.lanes=e.lanes,Ye(e,t,l)}return Io(e,t,n,r,l)}function Wa(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},M(Qt,me),me|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,M(Qt,me),me|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,M(Qt,me),me|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,M(Qt,me),me|=r;return oe(e,t,l,n),t.child}function Qa(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Io(e,t,n,r,l){var o=de(n)?Nt:le.current;return o=bt(t,o),Zt(t,l),n=Cu(e,t,n,r,o,l),r=xu(),e!==null&&!ce?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,Ye(e,t,l)):(U&&r&&fu(t),t.flags|=1,oe(e,t,n,l),t.child)}function Di(e,t,n,r,l){if(de(n)){var o=!0;Hr(t)}else o=!1;if(Zt(t,l),t.stateNode===null)Tr(e,t),Va(t,n,r),Lo(t,n,r,l),r=!0;else if(e===null){var u=t.stateNode,s=t.memoizedProps;u.props=s;var i=u.context,a=n.contextType;typeof a=="object"&&a!==null?a=xe(a):(a=de(n)?Nt:le.current,a=bt(t,a));var v=n.getDerivedStateFromProps,p=typeof v=="function"||typeof u.getSnapshotBeforeUpdate=="function";p||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(s!==r||i!==a)&&Li(t,u,r,a),be=!1;var m=t.memoizedState;u.state=m,Yr(t,r,u,l),i=t.memoizedState,s!==r||m!==i||fe.current||be?(typeof v=="function"&&(To(t,n,v,r),i=t.memoizedState),(s=be||Ti(t,n,s,r,m,i,a))?(p||typeof u.UNSAFE_componentWillMount!="function"&&typeof u.componentWillMount!="function"||(typeof u.componentWillMount=="function"&&u.componentWillMount(),typeof u.UNSAFE_componentWillMount=="function"&&u.UNSAFE_componentWillMount()),typeof u.componentDidMount=="function"&&(t.flags|=4194308)):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=i),u.props=r,u.state=i,u.context=a,r=s):(typeof u.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{u=t.stateNode,wa(e,t),s=t.memoizedProps,a=t.type===t.elementType?s:ze(t.type,s),u.props=a,p=t.pendingProps,m=u.context,i=n.contextType,typeof i=="object"&&i!==null?i=xe(i):(i=de(n)?Nt:le.current,i=bt(t,i));var y=n.getDerivedStateFromProps;(v=typeof y=="function"||typeof u.getSnapshotBeforeUpdate=="function")||typeof u.UNSAFE_componentWillReceiveProps!="function"&&typeof u.componentWillReceiveProps!="function"||(s!==p||m!==i)&&Li(t,u,r,i),be=!1,m=t.memoizedState,u.state=m,Yr(t,r,u,l);var w=t.memoizedState;s!==p||m!==w||fe.current||be?(typeof y=="function"&&(To(t,n,y,r),w=t.memoizedState),(a=be||Ti(t,n,a,r,m,w,i)||!1)?(v||typeof u.UNSAFE_componentWillUpdate!="function"&&typeof u.componentWillUpdate!="function"||(typeof u.componentWillUpdate=="function"&&u.componentWillUpdate(r,w,i),typeof u.UNSAFE_componentWillUpdate=="function"&&u.UNSAFE_componentWillUpdate(r,w,i)),typeof u.componentDidUpdate=="function"&&(t.flags|=4),typeof u.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof u.componentDidUpdate!="function"||s===e.memoizedProps&&m===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&m===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=w),u.props=r,u.state=w,u.context=i,r=a):(typeof u.componentDidUpdate!="function"||s===e.memoizedProps&&m===e.memoizedState||(t.flags|=4),typeof u.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&m===e.memoizedState||(t.flags|=1024),r=!1)}return Oo(e,t,n,r,o,l)}function Oo(e,t,n,r,l,o){Qa(e,t);var u=(t.flags&128)!==0;if(!r&&!u)return l&&Si(t,n,!1),Ye(e,t,o);r=t.stateNode,Rd.current=t;var s=u&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&u?(t.child=tn(t,e.child,null,o),t.child=tn(t,null,s,o)):oe(e,t,s,o),t.memoizedState=r.state,l&&Si(t,n,!0),t.child}function Ga(e){var t=e.stateNode;t.pendingContext?ki(e,t.pendingContext,t.pendingContext!==t.context):t.context&&ki(e,t.context,!1),wu(e,t.containerInfo)}function Fi(e,t,n,r,l){return en(),pu(l),t.flags|=256,oe(e,t,n,r),t.child}var jo={dehydrated:null,treeContext:null,retryLane:0};function Mo(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ka(e,t,n){var r=t.pendingProps,l=A.current,o=!1,u=(t.flags&128)!==0,s;if((s=u)||(s=e!==null&&e.memoizedState===null?!1:(l&2)!==0),s?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(l|=1),M(A,l&1),e===null)return Po(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(u=r.children,e=r.fallback,o?(r=t.mode,o=t.child,u={mode:"hidden",children:u},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=u):o=hl(u,r,0,null),e=_t(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Mo(n),t.memoizedState=jo,e):Pu(t,u));if(l=e.memoizedState,l!==null&&(s=l.dehydrated,s!==null))return Id(e,t,u,r,s,l,n);if(o){o=r.fallback,u=t.mode,l=e.child,s=l.sibling;var i={mode:"hidden",children:r.children};return!(u&1)&&t.child!==l?(r=t.child,r.childLanes=0,r.pendingProps=i,t.deletions=null):(r=ft(l,i),r.subtreeFlags=l.subtreeFlags&14680064),s!==null?o=ft(s,o):(o=_t(o,u,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,u=e.child.memoizedState,u=u===null?Mo(n):{baseLanes:u.baseLanes|n,cachePool:null,transitions:u.transitions},o.memoizedState=u,o.childLanes=e.childLanes&~n,t.memoizedState=jo,r}return o=e.child,e=o.sibling,r=ft(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function Pu(e,t){return t=hl({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function gr(e,t,n,r){return r!==null&&pu(r),tn(t,e.child,null,n),e=Pu(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Id(e,t,n,r,l,o,u){if(n)return t.flags&256?(t.flags&=-257,r=Gl(Error(g(422))),gr(e,t,u,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,l=t.mode,r=hl({mode:"visible",children:r.children},l,0,null),o=_t(o,l,u,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&tn(t,e.child,null,u),t.child.memoizedState=Mo(u),t.memoizedState=jo,o);if(!(t.mode&1))return gr(e,t,u,null);if(l.data==="$!"){if(r=l.nextSibling&&l.nextSibling.dataset,r)var s=r.dgst;return r=s,o=Error(g(419)),r=Gl(o,r,void 0),gr(e,t,u,r)}if(s=(u&e.childLanes)!==0,ce||s){if(r=J,r!==null){switch(u&-u){case 4:l=2;break;case 16:l=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:l=32;break;case 536870912:l=268435456;break;default:l=0}l=l&(r.suspendedLanes|u)?0:l,l!==0&&l!==o.retryLane&&(o.retryLane=l,Ke(e,l),Oe(r,e,l,-1))}return Ou(),r=Gl(Error(g(421))),gr(e,t,u,r)}return l.data==="$?"?(t.flags|=128,t.child=e.child,t=Qd.bind(null,e),l._reactRetry=t,null):(e=o.treeContext,ve=it(l.nextSibling),he=t,U=!0,Le=null,e!==null&&(ke[Se++]=$e,ke[Se++]=He,ke[Se++]=Pt,$e=e.id,He=e.overflow,Pt=t),t=Pu(t,r.children),t.flags|=4096,t)}function Ui(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),zo(e.return,t,n)}function Kl(e,t,n,r,l){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:l}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=l)}function Ya(e,t,n){var r=t.pendingProps,l=r.revealOrder,o=r.tail;if(oe(e,t,r.children,n),r=A.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Ui(e,n,t);else if(e.tag===19)Ui(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(M(A,r),!(t.mode&1))t.memoizedState=null;else switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&Xr(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),Kl(t,!1,l,n,o);break;case"backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&Xr(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}Kl(t,!0,n,null,o);break;case"together":Kl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Tr(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Ye(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Tt|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(g(153));if(t.child!==null){for(e=t.child,n=ft(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=ft(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Od(e,t,n){switch(t.tag){case 3:Ga(t),en();break;case 5:ka(t);break;case 1:de(t.type)&&Hr(t);break;case 4:wu(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,l=t.memoizedProps.value;M(Gr,r._currentValue),r._currentValue=l;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(M(A,A.current&1),t.flags|=128,null):n&t.child.childLanes?Ka(e,t,n):(M(A,A.current&1),e=Ye(e,t,n),e!==null?e.sibling:null);M(A,A.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return Ya(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),M(A,A.current),r)break;return null;case 22:case 23:return t.lanes=0,Wa(e,t,n)}return Ye(e,t,n)}var Xa,Do,Za,Ja;Xa=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Do=function(){};Za=function(e,t,n,r){var l=e.memoizedProps;if(l!==r){e=t.stateNode,Ct(Ae.current);var o=null;switch(n){case"input":l=ro(e,l),r=ro(e,r),o=[];break;case"select":l=B({},l,{value:void 0}),r=B({},r,{value:void 0}),o=[];break;case"textarea":l=uo(e,l),r=uo(e,r),o=[];break;default:typeof l.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Br)}so(n,r);var u;n=null;for(a in l)if(!r.hasOwnProperty(a)&&l.hasOwnProperty(a)&&l[a]!=null)if(a==="style"){var s=l[a];for(u in s)s.hasOwnProperty(u)&&(n||(n={}),n[u]="")}else a!=="dangerouslySetInnerHTML"&&a!=="children"&&a!=="suppressContentEditableWarning"&&a!=="suppressHydrationWarning"&&a!=="autoFocus"&&(On.hasOwnProperty(a)?o||(o=[]):(o=o||[]).push(a,null));for(a in r){var i=r[a];if(s=l?.[a],r.hasOwnProperty(a)&&i!==s&&(i!=null||s!=null))if(a==="style")if(s){for(u in s)!s.hasOwnProperty(u)||i&&i.hasOwnProperty(u)||(n||(n={}),n[u]="");for(u in i)i.hasOwnProperty(u)&&s[u]!==i[u]&&(n||(n={}),n[u]=i[u])}else n||(o||(o=[]),o.push(a,n)),n=i;else a==="dangerouslySetInnerHTML"?(i=i?i.__html:void 0,s=s?s.__html:void 0,i!=null&&s!==i&&(o=o||[]).push(a,i)):a==="children"?typeof i!="string"&&typeof i!="number"||(o=o||[]).push(a,""+i):a!=="suppressContentEditableWarning"&&a!=="suppressHydrationWarning"&&(On.hasOwnProperty(a)?(i!=null&&a==="onScroll"&&D("scroll",e),o||s===i||(o=[])):(o=o||[]).push(a,i))}n&&(o=o||[]).push("style",n);var a=o;(t.updateQueue=a)&&(t.flags|=4)}};Ja=function(e,t,n,r){n!==r&&(t.flags|=4)};function gn(e,t){if(!U)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ne(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags&14680064,r|=l.flags&14680064,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function jd(e,t,n){var r=t.pendingProps;switch(du(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ne(t),null;case 1:return de(t.type)&&$r(),ne(t),null;case 3:return r=t.stateNode,nn(),F(fe),F(le),Su(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(vr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Le!==null&&(Wo(Le),Le=null))),Do(e,t),ne(t),null;case 5:ku(t);var l=Ct(Qn.current);if(n=t.type,e!==null&&t.stateNode!=null)Za(e,t,n,r,l),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(g(166));return ne(t),null}if(e=Ct(Ae.current),vr(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[Fe]=t,r[Hn]=o,e=(t.mode&1)!==0,n){case"dialog":D("cancel",r),D("close",r);break;case"iframe":case"object":case"embed":D("load",r);break;case"video":case"audio":for(l=0;l<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),n==="select"&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Fe]=t,e[Hn]=r,Xa(e,t,!1,!1),t.stateNode=e;e:{switch(u=ao(n,r),n){case"dialog":D("cancel",e),D("close",e),l=r;break;case"iframe":case"object":case"embed":D("load",e),l=r;break;case"video":case"audio":for(l=0;lln&&(t.flags|=128,r=!0,gn(o,!1),t.lanes=4194304)}else{if(!r)if(e=Xr(u),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),gn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!u.alternate&&!U)return ne(t),null}else 2*Q()-o.renderingStartTime>ln&&n!==1073741824&&(t.flags|=128,r=!0,gn(o,!1),t.lanes=4194304);o.isBackwards?(u.sibling=t.child,t.child=u):(n=o.last,n!==null?n.sibling=u:t.child=u,o.last=u)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Q(),t.sibling=null,n=A.current,M(A,r?n&1|2:n&1),t):(ne(t),null);case 22:case 23:return Iu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?me&1073741824&&(ne(t),t.subtreeFlags&6&&(t.flags|=8192)):ne(t),null;case 24:return null;case 25:return null}throw Error(g(156,t.tag))}function Md(e,t){switch(du(t),t.tag){case 1:return de(t.type)&&$r(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return nn(),F(fe),F(le),Su(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return ku(t),null;case 13:if(F(A),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(g(340));en()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return F(A),null;case 4:return nn(),null;case 10:return hu(t.type._context),null;case 22:case 23:return Iu(),null;case 24:return null;default:return null}}var yr=!1,re=!1,Dd=typeof WeakSet=="function"?WeakSet:Set,S=null;function Wt(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){$(e,t,r)}else n.current=null}function Fo(e,t,n){try{n()}catch(r){$(e,t,r)}}var Ai=!1;function Fd(e,t){if(ko=Ur,e=na(),cu(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var u=0,s=-1,i=-1,a=0,v=0,p=e,m=null;t:for(;;){for(var y;p!==n||l!==0&&p.nodeType!==3||(s=u+l),p!==o||r!==0&&p.nodeType!==3||(i=u+r),p.nodeType===3&&(u+=p.nodeValue.length),(y=p.firstChild)!==null;)m=p,p=y;for(;;){if(p===e)break t;if(m===n&&++a===l&&(s=u),m===o&&++v===r&&(i=u),(y=p.nextSibling)!==null)break;p=m,m=p.parentNode}p=y}n=s===-1||i===-1?null:{start:s,end:i}}else n=null}n=n||{start:0,end:0}}else n=null;for(So={focusedElem:e,selectionRange:n},Ur=!1,S=t;S!==null;)if(t=S,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,S=e;else for(;S!==null;){t=S;try{var w=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var k=w.memoizedProps,j=w.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?k:ze(t.type,k),j);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(g(163))}}catch(h){$(t,t.return,h)}if(e=t.sibling,e!==null){e.return=t.return,S=e;break}S=t.return}return w=Ai,Ai=!1,w}function Ln(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&Fo(t,n,o)}l=l.next}while(l!==r)}}function ml(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Uo(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function qa(e){var t=e.alternate;t!==null&&(e.alternate=null,qa(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Fe],delete t[Hn],delete t[xo],delete t[wd],delete t[kd])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function ba(e){return e.tag===5||e.tag===3||e.tag===4}function Vi(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||ba(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Ao(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Br));else if(r!==4&&(e=e.child,e!==null))for(Ao(e,t,n),e=e.sibling;e!==null;)Ao(e,t,n),e=e.sibling}function Vo(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Vo(e,t,n),e=e.sibling;e!==null;)Vo(e,t,n),e=e.sibling}var q=null,Te=!1;function Je(e,t,n){for(n=n.child;n!==null;)ec(e,t,n),n=n.sibling}function ec(e,t,n){if(Ue&&typeof Ue.onCommitFiberUnmount=="function")try{Ue.onCommitFiberUnmount(ul,n)}catch{}switch(n.tag){case 5:re||Wt(n,t);case 6:var r=q,l=Te;q=null,Je(e,t,n),q=r,Te=l,q!==null&&(Te?(e=q,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):q.removeChild(n.stateNode));break;case 18:q!==null&&(Te?(e=q,n=n.stateNode,e.nodeType===8?Vl(e.parentNode,n):e.nodeType===1&&Vl(e,n),Un(e)):Vl(q,n.stateNode));break;case 4:r=q,l=Te,q=n.stateNode.containerInfo,Te=!0,Je(e,t,n),q=r,Te=l;break;case 0:case 11:case 14:case 15:if(!re&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,u=o.destroy;o=o.tag,u!==void 0&&(o&2||o&4)&&Fo(n,t,u),l=l.next}while(l!==r)}Je(e,t,n);break;case 1:if(!re&&(Wt(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){$(n,t,s)}Je(e,t,n);break;case 21:Je(e,t,n);break;case 22:n.mode&1?(re=(r=re)||n.memoizedState!==null,Je(e,t,n),re=r):Je(e,t,n);break;default:Je(e,t,n)}}function Bi(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Dd),t.forEach(function(r){var l=Gd.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Pe(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=u),r&=~o}if(r=l,r=Q()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Ad(r/1960))-r,10e?16:e,rt===null)var r=!1;else{if(e=rt,rt=null,el=0,I&6)throw Error(g(331));var l=I;for(I|=4,S=e.current;S!==null;){var o=S,u=o.child;if(S.flags&16){var s=o.deletions;if(s!==null){for(var i=0;iQ()-Lu?xt(e,0):Tu|=n),pe(e,t)}function sc(e,t){t===0&&(e.mode&1?(t=ar,ar<<=1,!(ar&130023424)&&(ar=4194304)):t=1);var n=ue();e=Ke(e,t),e!==null&&(qn(e,t,n),pe(e,n))}function Qd(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),sc(e,n)}function Gd(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(g(314))}r!==null&&r.delete(t),sc(e,n)}var ac;ac=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||fe.current)ce=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return ce=!1,Od(e,t,n);ce=!!(e.flags&131072)}else ce=!1,U&&t.flags&1048576&&pa(t,Qr,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Tr(e,t),e=t.pendingProps;var l=bt(t,le.current);Zt(t,n),l=Cu(null,t,r,e,l,n);var o=xu();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,de(r)?(o=!0,Hr(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,yu(t),l.updater=pl,t.stateNode=l,l._reactInternals=t,Lo(t,r,e,n),t=Oo(null,t,r,!0,o,n)):(t.tag=0,U&&o&&fu(t),oe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Tr(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Yd(r),e=ze(r,e),l){case 0:t=Io(null,t,r,e,n);break e;case 1:t=Di(null,t,r,e,n);break e;case 11:t=ji(null,t,r,e,n);break e;case 14:t=Mi(null,t,r,ze(r.type,e),n);break e}throw Error(g(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),Io(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),Di(e,t,r,l,n);case 3:e:{if(Ga(t),e===null)throw Error(g(387));r=t.pendingProps,o=t.memoizedState,l=o.element,wa(e,t),Yr(t,r,null,n);var u=t.memoizedState;if(r=u.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:u.cache,pendingSuspenseBoundaries:u.pendingSuspenseBoundaries,transitions:u.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=rn(Error(g(423)),t),t=Fi(e,t,r,n,l);break e}else if(r!==l){l=rn(Error(g(424)),t),t=Fi(e,t,r,n,l);break e}else for(ve=it(t.stateNode.containerInfo.firstChild),he=t,U=!0,Le=null,n=ga(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(en(),r===l){t=Ye(e,t,n);break e}oe(e,t,r,n)}t=t.child}return t;case 5:return ka(t),e===null&&Po(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,u=l.children,Eo(r,l)?u=null:o!==null&&Eo(r,o)&&(t.flags|=32),Qa(e,t),oe(e,t,u,n),t.child;case 6:return e===null&&Po(t),null;case 13:return Ka(e,t,n);case 4:return wu(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=tn(t,null,r,n):oe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),ji(e,t,r,l,n);case 7:return oe(e,t,t.pendingProps,n),t.child;case 8:return oe(e,t,t.pendingProps.children,n),t.child;case 12:return oe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,u=l.value,M(Gr,r._currentValue),r._currentValue=u,o!==null)if(je(o.value,u)){if(o.children===l.children&&!fe.current){t=Ye(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){u=o.child;for(var i=s.firstContext;i!==null;){if(i.context===r){if(o.tag===1){i=We(-1,n&-n),i.tag=2;var a=o.updateQueue;if(a!==null){a=a.shared;var v=a.pending;v===null?i.next=i:(i.next=v.next,v.next=i),a.pending=i}}o.lanes|=n,i=o.alternate,i!==null&&(i.lanes|=n),zo(o.return,n,t),s.lanes|=n;break}i=i.next}}else if(o.tag===10)u=o.type===t.type?null:o.child;else if(o.tag===18){if(u=o.return,u===null)throw Error(g(341));u.lanes|=n,s=u.alternate,s!==null&&(s.lanes|=n),zo(u,n,t),u=o.sibling}else u=o.child;if(u!==null)u.return=o;else for(u=o;u!==null;){if(u===t){u=null;break}if(o=u.sibling,o!==null){o.return=u.return,u=o;break}u=u.return}o=u}oe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,Zt(t,n),l=xe(l),r=r(l),t.flags|=1,oe(e,t,r,n),t.child;case 14:return r=t.type,l=ze(r,t.pendingProps),l=ze(r.type,l),Mi(e,t,r,l,n);case 15:return Ha(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:ze(r,l),Tr(e,t),t.tag=1,de(r)?(e=!0,Hr(t)):e=!1,Zt(t,n),Va(t,r,l),Lo(t,r,l,n),Oo(null,t,r,!0,e,n);case 19:return Ya(e,t,n);case 22:return Wa(e,t,n)}throw Error(g(156,t.tag))};function cc(e,t){return Fs(e,t)}function Kd(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ee(e,t,n,r){return new Kd(e,t,n,r)}function ju(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Yd(e){if(typeof e=="function")return ju(e)?1:0;if(e!=null){if(e=e.$$typeof,e===bo)return 11;if(e===eu)return 14}return 2}function ft(e,t){var n=e.alternate;return n===null?(n=Ee(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ir(e,t,n,r,l,o){var u=2;if(r=e,typeof e=="function")ju(e)&&(u=1);else if(typeof e=="string")u=5;else e:switch(e){case Mt:return _t(n.children,l,o,t);case qo:u=8,l|=8;break;case bl:return e=Ee(12,n,t,l|2),e.elementType=bl,e.lanes=o,e;case eo:return e=Ee(13,n,t,l),e.elementType=eo,e.lanes=o,e;case to:return e=Ee(19,n,t,l),e.elementType=to,e.lanes=o,e;case ks:return hl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ys:u=10;break e;case ws:u=9;break e;case bo:u=11;break e;case eu:u=14;break e;case qe:u=16,r=null;break e}throw Error(g(130,e==null?e:typeof e,""))}return t=Ee(u,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function _t(e,t,n,r){return e=Ee(7,e,r,t),e.lanes=n,e}function hl(e,t,n,r){return e=Ee(22,e,r,t),e.elementType=ks,e.lanes=n,e.stateNode={isHidden:!1},e}function Yl(e,t,n){return e=Ee(6,e,null,t),e.lanes=n,e}function Xl(e,t,n){return t=Ee(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xd(e,t,n,r,l){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Tl(0),this.expirationTimes=Tl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Tl(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function Mu(e,t,n,r,l,o,u,s,i){return e=new Xd(e,t,n,s,i),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Ee(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},yu(o),e}function Zd(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(mc)}catch(e){console.error(e)}}mc(),ms.exports=ye;var tp=ms.exports,Xi=tp;Jl.createRoot=Xi.createRoot,Jl.hydrateRoot=Xi.hydrateRoot;function Xe(){return Nc}function vc(e){if(!e||typeof e!="object")return null;const t=e,n=t.rootGraph;if(n&&typeof n=="object")return n;const r=t.graph;return r&&typeof r=="object"?r:e}function hc(e){return e._nodes??e.nodes??[]}function np(e){return e._groups??e.groups??[]}function rp(e){if(e.subgraph&&typeof e.subgraph=="object")return e.subgraph;if(typeof e.getSubgraph=="function")try{return e.getSubgraph()??null}catch{return null}return null}function gc(e,t){const n=new Set,r=[{graph:e,path:[]}];for(;r.length;){const{graph:l,path:o}=r.pop(),u=l;if(!n.has(u)){n.add(u),t(l,o);for(const s of hc(l)){const i=rp(s);i&&r.push({graph:i,path:o.concat([{node:s,graph:l,depth:o.length+1}])})}}}}function lp(){return globalThis.crypto?.randomUUID?.()??`bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`}function op(e,t){const n=e;n.flags??(n.flags={});let r=typeof n.flags.bvGroupId=="string"?n.flags.bvGroupId:"";if(!r||t.has(r)){do r=lp();while(t.has(r));n.flags.bvGroupId=r}return t.add(r),r}function rl(e){const t=vc(e);if(!t)return[];const n=[],r=new Set;return gc(t,(l,o)=>{for(const u of np(l)){const i=[...o.map(a=>String(a.node.title||a.node.type||a.node.id)),String(u.title||"Untitled Group")].join(" / ");n.push({group:u,graph:l,path:o,id:op(u,r),pathLabel:i})}}),n}function up(e,t){const n=vc(e);if(!n)return[];const r=[];return gc(n,(l,o)=>{for(const u of hc(l))yc(u,t)&&r.push({node:u,graph:l,path:o})}),r}function yc(e,t){const n=String(t);return[e.type,e.comfyClass,e.title,e.constructor?.name].filter(l=>typeof l=="string"&&l.length>0).map(String).includes(n)}const wc="bv-control-config-changed";function ip(){return{version:2,forceActive:!1,controls:[]}}function kc(e){var n;const t=Xe()?.rootGraph;t&&(t.extra??(t.extra={}),(n=t.extra).bv_settings??(n.bv_settings={}),t.extra.bv_settings.controlConfig=e,t.setDirtyCanvas?.(!0,!0),window.dispatchEvent(new CustomEvent(wc,{detail:e})))}function Zn(){const e=Xe()?.rootGraph?.extra?.bv_settings?.controlConfig;return e?.version===2?e:ip()}function sp(e,t=()=>!1){const n=e.group.nodes??e.group._nodes;if(Array.isArray(n)){const s=n.filter(i=>i&&typeof i=="object"&&!t(i));if(s.length>0)return s}const[r,l]=e.group.pos||[0,0],[o,u]=e.group.size||[0,0];return(e.graph._nodes??e.graph.nodes??[]).filter(s=>{if(t(s))return!1;const[i,a]=s.pos||[0,0],[v,p]=s.size||[0,0];return i+v/2>=r&&i+v/2<=r+o&&a+p/2>=l&&a+p/2<=l+u})}const Zi={activate:3,mute:2,bypass:1},Ji=e=>e.charAt(0).toUpperCase()+e.slice(1);function Sc(e){const t=new Map;for(const r of e.controls??[])if(r.enabled)for(const l of r.assignments??[]){if(l.unresolved)continue;const o=t.get(l.groupId)??[];o.push({controlId:r.id,controlName:r.name,action:l.action,groupId:l.groupId,groupPath:l.groupPath||l.groupTitle||l.groupId}),t.set(l.groupId,o)}const n=[];for(const r of t.values()){if(new Set(r.map(o=>o.action)).size<2)continue;const l=r.reduce((o,u)=>Zi[u.action]>Zi[o]?u.action:o,r[0].action);n.push({groupId:r[0].groupId,groupPath:r[0].groupPath,winnerAction:l,entries:r})}return n}function ap(e){if(!e.length)return"✓ No active conflicts";if(e.length>1)return`⚠ ${e.length} active control conflicts`;const t=e[0],n=[...new Set(t.entries.filter(r=>r.action!==t.winnerAction).map(r=>r.action))].join(", ");return`⚠ ${t.groupPath}: ${Ji(t.winnerAction)} overrides ${n.split(", ").map(Ji).join(", ")}`}const cp=({control:e,groups:t,conflicts:n,onChange:r})=>{const l=u=>u.charAt(0).toUpperCase()+u.slice(1),o=u=>{const s=t.find(i=>i.id===u);!s||e.assignments.some(i=>i.groupId===u)||r({...e,assignments:[...e.assignments,{groupId:u,groupPath:s.pathLabel,groupTitle:String(s.group.title||""),action:"bypass"}]})};return L.jsxs("section",{className:"bv-control-card",children:[L.jsxs("div",{className:"bv-control-title",children:[L.jsx("input",{value:e.name,onChange:u=>r({...e,name:u.target.value})}),L.jsxs("span",{children:[e.assignments.length," groups"]}),L.jsx("button",{onClick:()=>r(null),children:"Delete"})]}),L.jsx("div",{className:"bv-assignments",children:e.assignments.map((u,s)=>{const i=n.find(p=>p.groupId===u.groupId),a=i?.entries.filter(p=>p.action===i.winnerAction).map(p=>p.controlName).join(", "),v=i?u.action===i.winnerAction?`Overrides ${[...new Set(i.entries.filter(p=>p.action!==i.winnerAction).map(p=>l(p.action)))].join(", ")}`:`Overridden by ${l(i.winnerAction)} from ${a}`:"";return L.jsxs("div",{className:u.unresolved?"unresolved":i?"conflict":"",children:[L.jsxs("span",{children:[u.unresolved?"⚠ ":"",u.groupPath,v&&L.jsxs("small",{children:["⚠ ",v]})]}),L.jsxs("select",{value:u.action,onChange:p=>r({...e,assignments:e.assignments.map((m,y)=>y===s?{...m,action:p.target.value}:m)}),children:[L.jsx("option",{value:"activate",children:"Activate"}),L.jsx("option",{value:"mute",children:"Mute"}),L.jsx("option",{value:"bypass",children:"Bypass"})]}),L.jsx("button",{onClick:()=>r({...e,assignments:e.assignments.filter((p,m)=>m!==s)}),children:"×"})]},u.groupId)})}),L.jsxs("select",{value:"",onChange:u=>o(u.target.value),children:[L.jsx("option",{value:"",children:"Add group…"}),t.map(u=>L.jsx("option",{value:u.id,children:u.pathLabel},u.id))]})]})};function fp(){return globalThis.crypto?.randomUUID?.()??`bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`}const dp=({onClose:e})=>{const[t,n]=Re.useState(()=>{const i=Zn(),a=new Set(rl(Xe()).map(v=>v.id));return{...i,controls:i.controls.map(v=>({...v,assignments:v.assignments.map(p=>({...p,unresolved:!a.has(p.groupId)}))}))}}),r=Re.useMemo(()=>rl(Xe()),[t]),l=Re.useMemo(()=>Sc(t),[t]),o=(i,a)=>{n({...t,controls:a?t.controls.map((v,p)=>p===i?a:v):t.controls.filter((v,p)=>p!==i)})},u=()=>{let i="New Control",a=2;for(;t.controls.some(v=>v.name===i);)i=`New Control ${a++}`;n({...t,controls:[...t.controls,{id:fp(),name:i,enabled:!0,assignments:[]}]})},s=()=>{const i=t.controls.map(p=>p.name.trim());if(i.some(p=>!p)||new Set(i).size!==i.length)return;const a=new Set(r.map(p=>p.id)),v={...t,controls:t.controls.map(p=>({...p,name:p.name.trim(),assignments:p.assignments.map(m=>({...m,unresolved:!a.has(m.groupId)}))}))};kc(v),n(v)};return L.jsxs("div",{className:"bv-rack",children:[L.jsxs("header",{children:[L.jsxs("div",{children:[L.jsx("h2",{children:"BV Control Rack"}),L.jsx("p",{children:"User-defined workflow states"})]}),L.jsx("button",{onClick:e,children:"×"})]}),L.jsxs("label",{className:"bv-force",children:[L.jsx("input",{type:"checkbox",checked:t.forceActive,onChange:i=>n({...t,forceActive:i.target.checked})})," Force active after releasing restrictions"]}),L.jsx("div",{className:"bv-controls",children:t.controls.map((i,a)=>L.jsx(cp,{control:i,groups:r,conflicts:l,onChange:v=>o(a,v)},i.id))}),L.jsxs("footer",{children:[L.jsx("button",{onClick:u,children:"Add Control"}),L.jsx("button",{className:"primary",onClick:s,children:"Save Configuration"})]})]})},pp=({open:e,onClose:t})=>{const n=Re.useMemo(()=>document.createElement("div"),[]);return Re.useEffect(()=>(n.setAttribute("data-addon-modal-root","true"),document.body.appendChild(n),()=>{document.body.removeChild(n)}),[n]),Re.useEffect(()=>{if(!e)return;const r=l=>{l.key==="Escape"&&t()};return window.addEventListener("keydown",r,{capture:!0}),()=>window.removeEventListener("keydown",r,{capture:!0})},[e,t]),e?L.jsx("div",{className:"bv-modal",role:"dialog","aria-modal":"true",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:L.jsx("div",{className:"bv-dialog",onMouseDown:r=>r.stopPropagation(),children:L.jsx(dp,{onClose:()=>t()})})}):null},mp=":root{--bv-primary-color: #3498db;--bv-secondary-color: #2c3e50;--bv-text-color: #ecf0f1;--bv-accent-color: #e74c3c;--bv-bg-color: #34495e;--bv-border-color: #7f8c8d;--bv-muted-text-color: #95a5a6}:root.comfy-theme-light #bv-root{--bv-primary-color: #2980b9;--bv-secondary-color: #34495e;--bv-text-color: #2c3e50;--bv-accent-color: #c0392b;--bv-bg-color: #ecf0f1;--bv-border-color: #bdc3c7;--bv-muted-text-color: #7f8c8d}.bv-modal{position:fixed;inset:0;z-index:2147483647;display:grid;place-items:center;padding:24px;background:#0009;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;color:var(--bv-text-color)}.bv-modal *{box-sizing:border-box}.bv-dialog{width:min(900px,92vw);max-height:84vh}.bv-rack{width:100%;max-height:84vh;overflow:auto;padding:20px;border:1px solid var(--bv-border-color);border-radius:14px;background:var(--comfy-menu-bg, #20242a);box-shadow:0 18px 60px #0009}.bv-rack header,.bv-rack footer,.bv-control-title,.bv-assignments>div{display:flex;align-items:center;gap:10px}.bv-rack header{justify-content:space-between;border-bottom:1px solid #ffffff20;margin-bottom:16px}.bv-rack h2{margin:0}.bv-rack p{margin-top:4px;color:var(--bv-muted-text-color)}.bv-force{display:flex;gap:8px;padding:10px 12px;background:#ffffff08;border-radius:8px}.bv-controls{display:grid;gap:12px;margin:16px 0}.bv-control-card{border:1px solid #ffffff20;border-radius:10px;padding:12px;background:#ffffff08}.bv-control-title input{flex:1;font-weight:650}.bv-control-title span{color:var(--bv-muted-text-color)}.bv-assignments{display:grid;gap:6px;margin:10px 0}.bv-assignments>div span{flex:1}.bv-assignments>div span small{display:block;margin-top:3px;color:#ffbd66}.bv-assignments .conflict{border-left:2px solid #ffbd66;padding-left:8px}.bv-assignments .unresolved{color:#ff9f7a}.bv-rack input,.bv-rack select,.bv-rack button{color:inherit;background:#15181c;border:1px solid #ffffff25;border-radius:6px;padding:7px 9px}.bv-rack button{cursor:pointer}.bv-rack button.primary{background:var(--bv-primary-color);border-color:transparent}.bv-rack footer{justify-content:flex-end}",Au="BV Control Center",ll=0,vp=2,hp=4,Cn="bvControlBaseMode",gp="bv-open-control-rack",Ec=320,yp=48,qi="bv_control_conflict_status",Zl=new Set;function wp(e){return e==="activate"?{mode:ll,priority:3}:e==="mute"?{mode:vp,priority:2}:{mode:hp,priority:1}}function bi(e){const t=new Set(rl(Xe()).map(n=>n.id));return{...e,controls:e.controls.map(n=>({...n,assignments:n.assignments.map(r=>({...r,unresolved:!t.has(r.groupId)}))}))}}function kp(e){return sp(e,t=>yc(t,Au))}function Sp(e){for(const r of Zl){const l=r.properties?.[Cn];r.mode=e.forceActive?ll:typeof l=="number"?l:r.mode,r.properties&&delete r.properties[Cn],r.setDirtyCanvas?.(!0,!0)}Zl.clear();const t=new Map(rl(Xe()).map(r=>[r.id,r])),n=new Map;for(const r of e.controls)if(r.enabled)for(const l of r.assignments){const o=t.get(l.groupId);if(o)for(const u of kp(o)){const s=wp(l.action),i=n.get(u);(!i||s.priority>i.priority)&&n.set(u,s)}}for(const[r,l]of n)r.properties??(r.properties={}),typeof r.properties[Cn]!="number"&&(r.properties[Cn]=typeof r.mode=="number"?r.mode:ll),r.mode=l.mode,Zl.add(r),r.setDirtyCanvas?.(!0,!0)}function Ep(e,t){const n=e.inputs[t],r=e.widgets?.find(l=>l.name===n.name);r&&e.removeWidget?.(r),n.link!=null&&e.disconnectInput(t),e.removeInput(t)}function Cp(e,t){const n=Sc(t),r=ap(n);let l=e.widgets?.find(o=>o.name===qi);l||(l=e.addCustomWidget({name:qi,type:"custom",value:r,y:0,options:{},serialize:!1,computeSize:()=>[0,24],computeLayoutSize:()=>({minHeight:24,maxHeight:24,minWidth:Ec}),mouse:()=>!1,draw(o,u,s,i,a){o.save(),o.beginPath(),o.rect(10,i,Math.max(0,s-20),a),o.clip(),o.fillStyle=this.__bvHasConflict?"#ffbd66":"#8fc9a3",o.font="12px sans-serif",o.textBaseline="middle",o.fillText(String(this.value??""),14,i+a/2),o.restore()}})),l.value=r,l.__bvHasConflict=n.length>0,l.tooltip=n.map(o=>`${o.groupPath}: ${o.winnerAction} wins`).join(` +`)}function Cc(e,t){e.mode=ll,e.properties&&delete e.properties[Cn];let n=e.widgets?.find(i=>i.name==="configure_control_center");n||(n=e.addWidget("button","configure_control_center",null,()=>window.dispatchEvent(new Event(gp)),{serialize:!1})),n.label="Configure Control Center",n.serialize=!1;const r=new Set(t.controls.map(i=>`bvcc_${i.id}`));for(let i=e.inputs.length-1;i>=0;i--){const a=e.inputs[i];a.name.startsWith("bvcc_")&&!r.has(a.name)&&Ep(e,i)}for(const i of t.controls){const a=`bvcc_${i.id}`,v=y=>{const w=Zn(),k={...w,controls:w.controls.map(j=>j.id===i.id?{...j,enabled:!!y}:j)};kc(k)};let p=e.inputs.find(y=>y.name===a);p||(p=e.addInput(a,"BOOLEAN",{label:i.name,nameLocked:!0,widget:{name:a}})),p.label=i.name;let m=e.widgets?.find(y=>y.name===a);m&&!m.__bvControlCallbackBound&&(e.removeWidget?.(m),m=null),m||(m=e.addWidget("toggle",a,i.enabled,v,{on:"ACTIVE",off:"INACTIVE"})),m.__bvControlCallbackBound=!0,m.label=i.name,m.value=i.enabled,m.serialize=!0,m.options??(m.options={}),m.options.on="ACTIVE",m.options.off="INACTIVE",m.callback=v,p.widget={name:a}}Cp(e,t);const l=e.widgets?.find(i=>i.name==="bv_control_config_json");l&&(l.value=JSON.stringify(bi(t)),l.type="converted-widget",l.draw=()=>{},l.hidden=!0,l.options??(l.options={}),l.options.hidden=!0,l.element&&(l.element.style.display="none"),l.computeSize=()=>[0,-4],l.serializeValue=()=>JSON.stringify(bi(Zn()))),e.serialize_widgets=!0;const o=e.size??[0,0],u=e.computeSize?.()??o,s=Math.max(Ec,(u[0]??0)+yp);e.setSize?.([Math.max(o[0]??0,s),u[1]??o[1]??0]),e.setDirtyCanvas?.(!0,!0)}function xc(e=Zn()){for(const{node:t}of up(Xe(),Au))Cc(t,e);Sp(e)}window.addEventListener(wc,e=>xc(e.detail));Xe().registerExtension({name:"bv_nodepack.control_center",async beforeRegisterNodeDef(e,t){if(t.name!==Au)return;const n=e.prototype.onNodeCreated;e.prototype.onNodeCreated=function(){const r=n?.apply(this,arguments);return Cc(this,Zn()),r}},afterConfigureGraph(){xc()}});const xp=Xe(),es="bv-open-control-rack",ts="bv-nodepack-styles";function _p(){const[e,t]=Re.useState(!1);return Re.useEffect(()=>{const n=()=>t(!0);return window.addEventListener(es,n),()=>window.removeEventListener(es,n)},[]),L.jsx(pp,{open:e,onClose:()=>t(!1),children:"Hi"})}const ns="bv-root";function Np(){if(!document.getElementById(ts)){const t=document.createElement("style");t.id=ts,t.textContent=mp,document.head.appendChild(t)}let e=document.getElementById(ns);e||(e=document.createElement("div"),e.id=ns,document.body.appendChild(e),Jl.createRoot(e).render(L.jsx(Hc.StrictMode,{children:L.jsx(_p,{})})))}xp.registerExtension({name:"bv_nodepack.control_rack_portal",setup(){Np()}}); diff --git a/js/bv_pipe_watch.js b/js/bv_pipe_watch.js deleted file mode 100644 index a75835b..0000000 --- a/js/bv_pipe_watch.js +++ /dev/null @@ -1,46 +0,0 @@ -// bv_pipe_watch.js -import { app } from "../../scripts/app.js"; -import { defer, refreshAllPipesEverywhere, isGraphLike } from "./bv_pipe_shared.js"; - -app.registerExtension({ - name: "bv_nodepack.bv_pipe_watch", - async setup() { - const lastVer = new WeakMap(); - let lastGraph = null; - - setInterval(() => { - const g = app.graph; - if (!g) return; - - // On graph switch (enter/exit subgraph) do a global refresh once - if (g !== lastGraph) { - lastGraph = g; - defer(() => refreshAllPipesEverywhere(g)); - } - - // Detect link changes even if onChange hooks are not reliable - const v = typeof g._version === "number" ? g._version : null; - const prev = lastVer.get(g); - - if (v != null && prev !== v) { - lastVer.set(g, v); - defer(() => refreshAllPipesEverywhere(g)); - } else if (v == null && prev == null) { - // fallback if _version not present - lastVer.set(g, 1); - defer(() => refreshAllPipesEverywhere(g)); - } - - // Optional: if some builds store a root pointer, refresh that too - const root = g?._root; - if (root && isGraphLike(root)) { - const vr = typeof root._version === "number" ? root._version : null; - const pr = lastVer.get(root); - if (vr != null && pr !== vr) { - lastVer.set(root, vr); - defer(() => refreshAllPipesEverywhere(root)); - } - } - }, 250); - }, -}); diff --git a/js/bv_prompt_debug.js b/js/bv_prompt_debug.js index e9dc127..b92ea24 100644 --- a/js/bv_prompt_debug.js +++ b/js/bv_prompt_debug.js @@ -1,81 +1,72 @@ import { app } from "../../scripts/app.js"; -function setWidgetReadonly(widget, readonly = true) { - // Keep it interactive (scroll/select), but prevent edits - widget.disabled = false; - widget.readonly = readonly; - widget.options = widget.options || {}; - widget.options.readonly = readonly; +const WIDGET_NAME = "bv_ast_debug_output"; - // If the DOM element exists (textarea/input), set readonly there too - const el = widget.inputEl || widget.element || widget.el; - if (el) { - el.readOnly = readonly; - el.setAttribute("readonly", readonly ? "true" : "false"); - // Important: do NOT disable pointer events, otherwise scrolling breaks - el.style.pointerEvents = "auto"; - } +function ensureDebugWidget(node) { + if (!node || node.__bvAstDebugWidget) return node?.__bvAstDebugWidget; - // Some ComfyUI widget implementations use callback to commit value; - // we can keep callback but readonly prevents edits anyway. + const textarea = document.createElement("textarea"); + textarea.readOnly = true; + textarea.placeholder = "Run the workflow to inspect the AST."; + textarea.style.boxSizing = "border-box"; + textarea.style.width = "100%"; + textarea.style.height = "100%"; + textarea.style.minHeight = "160px"; + textarea.style.resize = "vertical"; + textarea.style.fontFamily = "ui-monospace, SFMono-Regular, Consolas, monospace"; + textarea.style.fontSize = "12px"; + textarea.style.whiteSpace = "pre"; + + const widget = node.addDOMWidget(WIDGET_NAME, "textarea", textarea, { + serialize: false, + getMinHeight: () => 160, + getValue: () => textarea.value, + setValue: (value) => { + textarea.value = typeof value === "string" ? value : ""; + }, + }); + + widget.element = textarea; + node.__bvAstDebugWidget = widget; + return widget; +} + +function setDebugText(node, value) { + const widget = ensureDebugWidget(node); + const textarea = widget?.element; + if (!textarea) return; + + textarea.value = value; + node.setDirtyCanvas?.(true, true); + node.graph?.setDirtyCanvas?.(true, true); } app.registerExtension({ name: "bv_nodepack.ast_debug_output", async beforeRegisterNodeDef(nodeType, nodeData) { - const name = nodeData?.name; - if (name !== "BV Prompt AST Debug") return; + if (nodeData?.name !== "BV Prompt AST Debug") return; const onNodeCreated = nodeType.prototype.onNodeCreated; nodeType.prototype.onNodeCreated = function () { - const r = onNodeCreated?.apply(this, arguments); + const result = onNodeCreated?.apply(this, arguments); + ensureDebugWidget(this); + return result; + }; - // Find by widget name (much more stable than slot index) - const w = this.widgets?.find((x) => x.name === "debug_output"); - if (w) { - // Mark readonly immediately (if DOM exists already) - setWidgetReadonly(w, true); - - // Fallback: ensure readonly once the input element exists - const origDraw = w.draw; - w.draw = function () { - const rr = origDraw?.apply(this, arguments); - if (!w.__bv_readonly_applied) { - setWidgetReadonly(w, true); - // if element exists now, lock it - const el = w.inputEl || w.element || w.el; - if (el) w.__bv_readonly_applied = true; - } - return rr; - }; - } - - return r; + const onConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const result = onConfigure?.apply(this, arguments); + ensureDebugWidget(this); + return result; }; const onExecuted = nodeType.prototype.onExecuted; nodeType.prototype.onExecuted = function (message) { - const r = onExecuted?.apply(this, arguments); - - // Your python returns UI key "ast_json": [txt] :contentReference[oaicite:1]{index=1} - const txt = message?.ast_json?.[0]; - if (typeof txt === "string") { - const w = this.widgets?.find((x) => x.name === "debug_output"); - if (w) { - w.value = txt; - - // Keep readonly and refresh element value if present - setWidgetReadonly(w, true); - const el = w.inputEl || w.element || w.el; - if (el) el.value = txt; - - this.setDirtyCanvas(true, true); - this.graph?.setDirtyCanvas(true, true); - } - } - - return r; + const result = onExecuted?.apply(this, arguments); + const text = message?.ast_json?.[0]; + if (typeof text === "string") setDebugText(this, text); + return result; }; - } + }, }); diff --git a/js/bv_smart_pipe.js b/js/bv_smart_pipe.js new file mode 100644 index 0000000..4446e08 --- /dev/null +++ b/js/bv_smart_pipe.js @@ -0,0 +1,1113 @@ +import { app } from "../../scripts/app.js"; +import { moveMarkedPortToEnd, nextFreeOrdinal, promoteConnectedInheritedSlots, promoteInheritedSlot, resolveLocalSlotNameCollisions, retainedMissingSlots, reusableSmartPipePortIndex, smartPipeSlotName, uniqueSmartPipeSlotName, updateSmartPipePort } from "./bv_smart_pipe_slots.js"; +import { mergePipeSchemas, SMART_PIPE_DEFAULT_TITLE } from "./bv_smart_pipe_merge_model.js"; +import { + HOST_ROUTING_PROPERTY, + cloneRouteRegistryPrefix, + compareRoutingNumbers, + crossScopeDescriptors, + detachedHostRouting, + executionScope, + logicalAddress, + materializeAddressedPipeLinks, + materializeSmartPipeMergeSources, + materializeWirelessPipeLinks, + preferredHostRoutingName, + predecessorChoiceRoutes, + promptModeState, + prunePromptBranches, + reconcileRouteRegistryDestinations, + ROOT_ROUTING_PROPERTY, + remapPromptOutputLinks, + ROUTE_INPUT, + ROUTE_REGISTRY_PROPERTY, + routingChoiceLabel, + routingDisplayNumbers, + routingCollisionOwner, + uniqueHostName, + uniqueRoutingName, + validateMaterializedPipeGraph, +} from "./bv_smart_pipe_routing.js"; + +const NODE_CLASS = "BV Smart Pipe"; +const MAX_SLOTS = 100; +const ADD_SLOT_NAME = "bv_add_slot"; +const activeGraphContexts = new WeakMap(); + +export function isSmartPipe(node) { + return node?.comfyClass === NODE_CLASS || node?.type === NODE_CLASS; +} + +function stateFor(node) { + node.properties ??= {}; + node.properties.bvSmartPipe ??= { version: 1, localSlots: [], inheritedSlots: [] }; + const state = node.properties.bvSmartPipe; + if (!state.nextOrdinal) { + const slots = [...(state.inheritedSlots || []), ...(state.localSlots || []), ...(state.resolvedSlots || [])]; + state.nextOrdinal = Math.max(0, ...slots.map((slot) => slot.ordinal || 0)) + 1; + } + return state; +} + +function newId() { + return globalThis.crypto?.randomUUID?.() ?? `bv-${Date.now()}-${Math.random().toString(16).slice(2)}`; +} + +function pipeNodes(graph) { + return (graph?._nodes || graph?.nodes || []).filter(isSmartPipe); +} + +function propagateGraph(graph) { + pipeNodes(graph).forEach((candidate) => propagate(candidate)); +} + +function subgraphFor(node) { + return node?.subgraph || node?.getSubgraph?.() || null; +} + +function graphNodes(graph) { + return graph?._nodes || graph?.nodes || []; +} + +function containsSmartPipe(graph, visited = new Set()) { + if (!graph || visited.has(graph)) return false; + visited.add(graph); + return graphNodes(graph).some((node) => isSmartPipe(node) || isSmartPipeMerge(node) || containsSmartPipe(subgraphFor(node), visited)); +} + +function rootRoutingState(graph) { + graph.extra ??= {}; + graph.extra[ROOT_ROUTING_PROPERTY] ??= newId(); + graph.extra[ROUTE_REGISTRY_PROPERTY] ??= {}; + return { + rootId: graph.extra[ROOT_ROUTING_PROPERTY], + registry: graph.extra[ROUTE_REGISTRY_PROPERTY], + }; +} + +function ensureHostRouting(host, usedIds, usedNames) { + host.properties ??= {}; + const existing = detachedHostRouting(host.properties[HOST_ROUTING_PROPERTY]); + host.properties[HOST_ROUTING_PROPERTY] = existing; + let replacedId = null; + if (!existing.id || usedIds.has(existing.id)) { + replacedId = existing.id || null; + existing.id = newId(); + } + const definitionName = subgraphFor(host)?.name; + const requestedName = preferredHostRoutingName({ + storedName: existing.name, + storedDefinitionName: existing.definitionName, + title: host.title, + lastAppliedTitle: host.__bvLastHostRoutingTitle, + definitionName, + }); + existing.name = uniqueHostName(requestedName, usedNames); + if (definitionName) existing.definitionName = definitionName; + host.title = existing.name; + host.__bvLastHostRoutingTitle = existing.name; + usedIds.add(existing.id); + usedNames.add(existing.name); + return { routing: existing, replacedId }; +} + +function isSmartPipeMerge(node) { + return node?.comfyClass === "BV Smart Pipe Merge" || node?.type === "BV Smart Pipe Merge"; +} + +function routableNodeId(node) { + if (isSmartPipe(node)) return routingFor(node).nodeId; + node.properties ??= {}; + node.properties.bvSmartPipeMerge ??= { version: 1, nodeId: newId(), sources: [] }; + const state = node.properties.bvSmartPipeMerge; + if (!state.nodeId) state.nodeId = newId(); + return state.nodeId; +} + +export function collectExpandedPipeAddresses(rootGraph) { + const { rootId, registry } = rootRoutingState(rootGraph); + const addressByExecutionId = {}; + const descriptors = []; + const walk = (graph, numericPath = [], hostPath = [], hostNames = []) => { + const participatingHosts = graphNodes(graph).filter((node) => containsSmartPipe(subgraphFor(node))); + const usedHostIds = new Set(); + const usedHostNames = new Set(); + const seenDefinitions = new Set(); + for (const node of graphNodes(graph)) { + const executionId = [...numericPath, node.id].join(":"); + if (isSmartPipe(node) || isSmartPipeMerge(node)) { + const route = isSmartPipe(node) ? routingFor(node) : { nodeId: routableNodeId(node), name: node.title || "Pipe Merge" }; + const address = logicalAddress(rootId, hostPath, route.nodeId); + addressByExecutionId[executionId] = address; + descriptors.push({ address, executionId, node, route, kind: isSmartPipeMerge(node) ? "merge" : "pipe", hostPath: [...hostPath], hostNames: [...hostNames] }); + } + const subgraph = subgraphFor(node); + if (!subgraph || !participatingHosts.includes(node)) continue; + const definitionAlreadySeen = seenDefinitions.has(subgraph); + seenDefinitions.add(subgraph); + const { routing: host, replacedId } = ensureHostRouting(node, usedHostIds, usedHostNames); + if (!definitionAlreadySeen && subgraph.name && subgraph.name !== host.name) { + subgraph.name = host.name; + host.definitionName = host.name; + } + if (replacedId) { + cloneRouteRegistryPrefix( + registry, + logicalAddress(rootId, hostPath, replacedId), + logicalAddress(rootId, hostPath, host.id), + ); + } + walk(subgraph, [...numericPath, node.id], [...hostPath, host.id], [...hostNames, host.name]); + } + }; + walk(rootGraph); + return { addressByExecutionId, descriptors, registry, rootId }; +} + +function applyInstanceSchemaProjections(apiPrompt, routing) { + for (const descriptor of routing.descriptors) { + if (!isSmartPipe(descriptor.node)) continue; + const projection = routing.registry[descriptor.address]?.projection; + if (!projection?.resolvedSlots?.length) continue; + const entry = apiPrompt?.[descriptor.executionId]; + if (!entry || entry.class_type !== NODE_CLASS) continue; + entry.inputs.bv_smart_pipe_schema_json = JSON.stringify(projection.resolvedSlots.map((slot) => { + const input = descriptor.node.inputs?.find((item) => item.bvSlotId === slot.id); + const output = descriptor.node.outputs?.find((item) => item.bvSlotId === slot.id); + return { ...slot, connected: input?.link != null || Boolean(output?.links?.length) }; + })); + } + return apiPrompt; +} + +function remapSmartPipeOutputLinks(apiPrompt, routing) { + const outputIndexMaps = {}; + for (const descriptor of routing.descriptors) { + const schema = routing.registry[descriptor.address]?.projection?.resolvedSlots || stateFor(descriptor.node).resolvedSlots || []; + const ordinalById = new Map(schema.map((slot) => [slot.id, slot.ordinal])); + const indexMap = { 0: 0 }; + for (let index = 1; index < (descriptor.node.outputs?.length || 0); index++) { + const slotId = descriptor.node.outputs[index]?.bvSlotId; + const ordinal = ordinalById.get(slotId); + if (ordinal) indexMap[index] = ordinal; + } + outputIndexMaps[descriptor.executionId] = indexMap; + } + return remapPromptOutputLinks(apiPrompt, outputIndexMaps); +} + +function samePath(left, right) { + return left?.length === right?.length && left.every((part, index) => part === right[index]); +} + +export function activeDescriptorFor(node, routing = collectExpandedPipeAddresses(app.graph)) { + const hostPath = node.graph === app.graph ? [] : activeGraphContexts.get(node.graph)?.hostPath; + if (hostPath) return routing.descriptors.find((descriptor) => descriptor.node === node && samePath(descriptor.hostPath, hostPath)) || null; + const candidates = routing.descriptors.filter((descriptor) => descriptor.node === node); + return candidates.length === 1 ? candidates[0] : null; +} + +function applyMergeConfigurations(apiPrompt, routing) { + for (const descriptor of routing.descriptors) { + if (descriptor.kind !== "merge") continue; + const entry = apiPrompt?.[descriptor.executionId]; + if (!entry || entry.class_type !== "BV Smart Pipe Merge") continue; + const sources = routing.registry[descriptor.address]?.sources || descriptor.node.properties?.bvSmartPipeMerge?.sources || []; + entry.inputs.bv_smart_pipe_merge_json = JSON.stringify(sources); + } +} + +function installSubgraphContextTracking() { + if (app.__bvSmartPipeContextTracking || !app.canvas?.addEventListener) return; + app.__bvSmartPipeContextTracking = true; + if (app.graph) activeGraphContexts.set(app.graph, { hostPath: [], hostNames: [] }); + app.canvas.addEventListener("subgraph-opened", (event) => { + const detail = event.detail || event; + const parent = detail.closingGraph === app.graph + ? { hostPath: [], hostNames: [] } + : activeGraphContexts.get(detail.closingGraph); + if (!parent || !detail.fromNode || !detail.subgraph) return; + collectExpandedPipeAddresses(app.graph); + const host = detail.fromNode.properties?.[HOST_ROUTING_PROPERTY]; + if (!host) return; + activeGraphContexts.set(detail.subgraph, { + hostPath: [...parent.hostPath, host.id], + hostNames: [...parent.hostNames, host.name], + }); + requestAnimationFrame(() => propagateGraph(detail.subgraph)); + }); + app.canvas.addEventListener("litegraph:set-graph", (event) => { + const detail = event.detail || event; + if (detail.newGraph === app.graph) activeGraphContexts.set(app.graph, { hostPath: [], hostNames: [] }); + requestAnimationFrame(() => propagateGraph(detail.newGraph)); + }); +} + +function routingFor(node) { + const state = stateFor(node); + state.routing ??= { version: 1, nodeId: newId(), name: !node.title || node.title === "Pipe" ? SMART_PIPE_DEFAULT_TITLE : node.title, mode: "root", predecessorId: null }; + const route = state.routing; + const siblings = pipeNodes(node.graph).filter((candidate) => candidate !== node); + const duplicateIdOwner = siblings.find((candidate) => stateFor(candidate).routing?.nodeId === route.nodeId); + if (duplicateIdOwner && routingCollisionOwner(node, duplicateIdOwner) !== node) route.nodeId = newId(); + const requestedName = node.__bvLastRoutingTitle && node.title !== node.__bvLastRoutingTitle ? node.title : route.name; + const usedNames = new Set(siblings + .filter((candidate) => { + const siblingName = stateFor(candidate).routing?.name; + return siblingName !== requestedName || routingCollisionOwner(node, candidate) !== node; + }) + .map((candidate) => stateFor(candidate).routing?.name) + .filter(Boolean)); + route.name = uniqueRoutingName(requestedName, usedNames); + node.title = route.name; + node.__bvLastRoutingTitle = route.name; + if (!route.predecessorId) route.mode = "root"; + return route; +} + +function linkAt(graph, id) { + return graph?.links?.get?.(id) ?? graph?.links?.[id]; +} + +function upstreamNode(node) { + const input = node.inputs?.find((slot) => slot.name === "pipe"); + if (input?.link == null) return null; + const link = linkAt(node.graph, input.link); + return link ? node.graph?.getNodeById?.(link.origin_id) : null; +} + +function wirelessUpstreamNode(node) { + const route = routingFor(node); + if (route.mode !== "follow" || !route.predecessorId) return null; + return pipeNodes(node.graph).find((candidate) => routingFor(candidate).nodeId === route.predecessorId) || null; +} + +function crossScopeRouteFor(node, routing = collectExpandedPipeAddresses(app.graph), descriptorOverride = null) { + const destination = descriptorOverride || activeDescriptorFor(node, routing); + if (!destination) return null; + const edge = routing.registry[destination.address]; + if (!edge?.predecessorAddress) return null; + const predecessor = routing.descriptors.find((descriptor) => descriptor.address === edge.predecessorAddress); + return predecessor ? { destination, predecessor, edge, routing } : null; +} + +function crossScopeUpstreamNode(node) { + return crossScopeRouteFor(node)?.predecessor?.node || null; +} + +function effectiveUpstreamNode(node) { + return upstreamNode(node) || crossScopeUpstreamNode(node) || wirelessUpstreamNode(node); +} + +function registerUpstream(node, upstream) { + if (node.__bvSmartPipeUpstream === upstream) return; + node.__bvSmartPipeUpstream?.__bvSmartPipeTargets?.delete(node); + node.__bvSmartPipeUpstream = upstream; + if (!upstream) return; + upstream.__bvSmartPipeTargets ??= new Set(); + upstream.__bvSmartPipeTargets.add(node); +} + +function copySlot(slot, missing = slot.missing ?? false) { + return { + id: slot.id, + name: slot.name, + ordinal: slot.ordinal, + type: slot.type || "*", + showInput: slot.showInput ?? false, + showOutput: slot.showOutput ?? false, + missing, + dormant: slot.dormant ?? false, + }; +} + +function slotHasConnections(node, slotId) { + const input = node.inputs?.find((item) => item.bvSlotId === slotId); + const output = node.outputs?.find((item) => item.bvSlotId === slotId); + return input?.link != null || Boolean(output?.links?.length); +} + +function slotHasInputConnection(node, slotId) { + return node.inputs?.some((item) => item.bvSlotId === slotId && item.link != null) ?? false; +} + +function downstreamPipeNodes(node) { + return pipeNodes(node.graph).filter((candidate) => candidate !== node && effectiveUpstreamNode(candidate) === node); +} + +function slotUsedDownstream(node, slotId, visited = new Set()) { + if (!node || visited.has(node)) return false; + visited.add(node); + for (const target of downstreamPipeNodes(node)) { + if (slotHasConnections(target, slotId) || slotUsedDownstream(target, slotId, visited)) return true; + } + return false; +} + +function schemaProjectionFor(node, descriptorOverride = null, routing = collectExpandedPipeAddresses(app.graph)) { + const definition = stateFor(node); + const crossRoute = crossScopeRouteFor(node, routing, descriptorOverride); + if (!crossRoute) return { definition, projection: definition }; + crossRoute.edge.projection ??= { version: 1, inheritedSlots: [], resolvedSlots: [] }; + return { definition, projection: crossRoute.edge.projection }; +} + +function descriptorForWiredMergeInput(mergeDescriptor, input, routing) { + if (input?.link == null) return null; + const link = linkAt(mergeDescriptor.node.graph, input.link); + const sourceNode = link ? mergeDescriptor.node.graph?.getNodeById?.(link.origin_id) : null; + return routing.descriptors.find((candidate) => candidate.node === sourceNode && samePath(candidate.hostPath, mergeDescriptor.hostPath)) || null; +} + +function resolveDescriptorSchema(descriptor, resolving, routing) { + if (!descriptor) return null; + if (descriptor.kind === "pipe") return resolveSchema(descriptor.node, resolving, descriptor); + const resolvingKey = descriptor.address; + if (resolving.has(resolvingKey)) return []; + resolving.add(resolvingKey); + const sources = routing.registry[descriptor.address]?.sources || descriptor.node.properties?.bvSmartPipeMerge?.sources || []; + const schemas = sources.map((source) => { + const sourceDescriptor = source.mode === "wireless" + ? routing.descriptors.find((candidate) => candidate.address === source.address) + : descriptorForWiredMergeInput(descriptor, descriptor.node.inputs?.find((input) => input.name === source.key), routing); + return resolveDescriptorSchema(sourceDescriptor, resolving, routing) || []; + }); + resolving.delete(resolvingKey); + return mergePipeSchemas(schemas); +} + +function resolveSchema(node, resolving = new Set(), descriptorOverride = null) { + const routing = collectExpandedPipeAddresses(app.graph); + const descriptor = descriptorOverride || activeDescriptorFor(node, routing); + const { definition, projection } = schemaProjectionFor(node, descriptor, routing); + const resolvingKey = descriptor?.address || node; + if (resolving.has(resolvingKey)) return projection.resolvedSlots || []; + resolving.add(resolvingKey); + const physicalUpstream = upstreamNode(node); + const crossRoute = physicalUpstream ? null : crossScopeRouteFor(node, routing, descriptor); + const localUpstream = physicalUpstream || (!crossRoute ? wirelessUpstreamNode(node) : null); + const upstream = physicalUpstream || crossRoute?.predecessor?.node || localUpstream; + const upstreamDescriptor = crossRoute?.predecessor || (descriptor && upstream + ? routing.descriptors.find((candidate) => candidate.node === upstream && samePath(candidate.hostPath, descriptor.hostPath)) + : null); + const upstreamSchema = upstreamDescriptor + ? resolveDescriptorSchema(upstreamDescriptor, resolving, routing) + : isSmartPipe(upstream) ? resolveSchema(upstream, resolving, upstreamDescriptor) : null; + let previous = projection.inheritedSlots || []; + if (!upstreamSchema) { + const connectedSlotIds = new Set((node.inputs || []).filter((input) => input.link != null && input.bvSlotId).map((input) => input.bvSlotId)); + const promotionState = { inheritedSlots: projection.inheritedSlots || [], localSlots: definition.localSlots }; + promoteConnectedInheritedSlots(promotionState, connectedSlotIds); + projection.inheritedSlots = promotionState.inheritedSlots; + definition.localSlots = promotionState.localSlots; + previous = projection.inheritedSlots || []; + } + if (upstreamSchema) { + const upstreamIds = new Set(upstreamSchema.map((slot) => slot.id)); + const adopted = definition.localSlots.filter((slot) => upstreamIds.has(slot.id)); + if (adopted.length) { + const projections = new Map(previous.map((slot) => [slot.id, slot])); + for (const slot of adopted) { + const projection = projections.get(slot.id); + projections.set(slot.id, { + ...copySlot(slot), + showInput: projection?.showInput ?? slot.showInput ?? false, + showOutput: projection?.showOutput ?? slot.showOutput ?? false, + }); + } + previous = [...projections.values()]; + definition.localSlots = definition.localSlots.filter((slot) => !upstreamIds.has(slot.id)); + } + const renamed = resolveLocalSlotNameCollisions(definition.localSlots, upstreamSchema.map((slot) => slot.name)); + if (renamed.length) definition.renameNotices = renamed; + } + const inherited = upstreamSchema + ? [ + ...upstreamSchema.map((slot) => { + const projection = previous.find((item) => item.id === slot.id); + const hasInput = slotHasInputConnection(node, slot.id); + const directlyUsed = slotHasConnections(node, slot.id); + const usedDownstream = slotUsedDownstream(node, slot.id); + return { + ...copySlot(slot, Boolean(slot.missing) && !hasInput), + showInput: projection?.showInput ?? false, + showOutput: projection?.showOutput ?? false, + dormant: Boolean(slot.missing) && !hasInput && !directlyUsed && usedDownstream, + }; + }), + ...retainedMissingSlots(previous, new Set(upstreamSchema.map((slot) => slot.id)), (slot) => slotHasConnections(node, slot.id) || slotUsedDownstream(node, slot.id)) + .map((slot) => ({ ...copySlot(slot, true), dormant: !slotHasConnections(node, slot.id) })), + ] + : retainedMissingSlots(previous, new Set(), (slot) => slotHasConnections(node, slot.id) || slotUsedDownstream(node, slot.id)) + .map((slot) => ({ ...copySlot(slot, true), dormant: !slotHasConnections(node, slot.id) })); + + const usedOrdinals = new Set(inherited.map((slot) => slot.ordinal)); + for (const slot of definition.localSlots) { + if (!slot.ordinal || usedOrdinals.has(slot.ordinal)) { + slot.ordinal = nextFreeOrdinal(usedOrdinals, definition.nextOrdinal, MAX_SLOTS); + if (slot.ordinal) definition.nextOrdinal = slot.ordinal + 1; + } + if (slot.ordinal) definition.nextOrdinal = Math.max(definition.nextOrdinal, slot.ordinal + 1); + usedOrdinals.add(slot.ordinal); + } + + projection.inheritedSlots = inherited; + projection.resolvedSlots = [...inherited, ...definition.localSlots.map((slot) => copySlot(slot))] + .filter((slot) => slot.ordinal) + .sort((left, right) => left.ordinal - right.ordinal); + resolving.delete(resolvingKey); + return projection.resolvedSlots; +} + +function removeSlot(node, kind, index) { + if (kind === "input") node.removeInput(index); + else node.removeOutput(index); +} + +function typesAreCompatible(left, right) { + const leftTypes = String(left || "*").split(",").map((value) => value.trim()).filter(Boolean); + const rightTypes = String(right || "*").split(",").map((value) => value.trim()).filter(Boolean); + return leftTypes.includes("*") || rightTypes.includes("*") || leftTypes.some((type) => rightTypes.includes(type)); +} + +function temporarilyRevealOutput(node, slot) { + return node.__bvSmartPipeRevealTypes?.some((type) => typesAreCompatible(type, slot.type)); +} + +function reconcilePorts(node, schema) { + const desiredInputs = new Set(schema.filter((slot) => !slot.dormant && (slot.showInput || slot.missing)).map((slot) => `v_${String(slot.ordinal).padStart(3, "0")}`)); + const desiredOutputs = new Set(schema.filter((slot) => !slot.dormant && (slot.showOutput || slot.missing || temporarilyRevealOutput(node, slot))).map((slot) => `out_${String(slot.ordinal).padStart(3, "0")}`)); + + for (let index = (node.inputs?.length || 0) - 1; index >= 0; index--) { + const slot = node.inputs[index]; + if (slot.bvAddSlot) continue; + if (slot.name !== "pipe" && !desiredInputs.has(slot.name) && slot.link == null) removeSlot(node, "input", index); + } + for (let index = (node.outputs?.length || 0) - 1; index >= 0; index--) { + const slot = node.outputs[index]; + if (slot.name !== "pipe" && !desiredOutputs.has(slot.name) && !(slot.links?.length)) removeSlot(node, "output", index); + } + + + for (const slot of schema) { + const inputName = `v_${String(slot.ordinal).padStart(3, "0")}`; + const outputName = `out_${String(slot.ordinal).padStart(3, "0")}`; + const label = `${slot.missing ? "⚠ Missing: " : ""}${slot.name}`; + let inputIndex = reusableSmartPipePortIndex(node.inputs, { slotId: slot.id, portName: inputName, label: slot.name, type: slot.type }); + let input = inputIndex >= 0 ? node.inputs[inputIndex] : null; + if (!slot.dormant && (slot.showInput || slot.missing) && !input) input = node.addInput(inputName, slot.type || "*"); + if (input) { + inputIndex = node.inputs.indexOf(input); + node.inputs[inputIndex] = updateSmartPipePort(input, label, slot.type || "*", slot.id); + node.inputs[inputIndex].name = inputName; + } + let outputIndex = reusableSmartPipePortIndex(node.outputs, { slotId: slot.id, portName: outputName, label: slot.name, type: slot.type }); + let output = outputIndex >= 0 ? node.outputs[outputIndex] : null; + if (!slot.dormant && (slot.showOutput || slot.missing || temporarilyRevealOutput(node, slot)) && !output) output = node.addOutput(outputName, slot.type || "*"); + if (output) { + outputIndex = node.outputs.indexOf(output); + node.outputs[outputIndex] = updateSmartPipePort(output, label, slot.type || "*", slot.id); + node.outputs[outputIndex].name = outputName; + } + } + + for (const kind of ["input", "output"]) { + const ports = kind === "input" ? node.inputs || [] : node.outputs || []; + const indexesByName = new Map(); + ports.forEach((port, index) => { + if (port.name === "pipe" || port.bvAddSlot) return; + const indexes = indexesByName.get(port.name) || []; + indexes.push(index); + indexesByName.set(port.name, indexes); + }); + for (const indexes of indexesByName.values()) { + if (indexes.length < 2) continue; + const connected = indexes.find((index) => kind === "input" ? ports[index]?.link != null : Boolean(ports[index]?.links?.length)); + const keep = connected ?? indexes[0]; + for (const index of [...indexes].sort((left, right) => right - left)) { + if (index !== keep) removeSlot(node, kind, index); + } + } + } + const addSlots = (node.inputs || []).filter((input) => input.bvAddSlot); + const keepAddSlot = schema.length < MAX_SLOTS; + for (let index = addSlots.length - 1; index >= (keepAddSlot ? 1 : 0); index--) removeSlot(node, "input", node.inputs.indexOf(addSlots[index])); + if (keepAddSlot && !addSlots.length) { + const addSlot = node.addInput(ADD_SLOT_NAME, "*"); + addSlot.label = "+ Add Slot"; + addSlot.localized_name = "+ Add Slot"; + addSlot.bvAddSlot = true; + } + moveMarkedPortToEnd(node.inputs, (input) => input.bvAddSlot); + node.inputs = [...(node.inputs || [])]; + node.outputs = [...(node.outputs || [])]; +} + +function sourceOutput(node, linkInfo) { + const source = node.graph?.getNodeById?.(linkInfo?.origin_id); + return source?.outputs?.[linkInfo?.origin_slot] || null; +} + +function convertAddSlot(node, index, linkInfo) { + const input = node.inputs?.[index]; + if (!input?.bvAddSlot) return false; + const state = stateFor(node); + const schema = resolveSchema(node); + const usedOrdinals = new Set(schema.map((slot) => slot.ordinal)); + const ordinal = nextFreeOrdinal(usedOrdinals, state.nextOrdinal, MAX_SLOTS); + if (!ordinal) return false; + + const output = sourceOutput(node, linkInfo); + const baseName = smartPipeSlotName(output?.localized_name || output?.label || output?.name); + const name = uniqueSmartPipeSlotName(baseName, new Set(schema.map((slot) => slot.name))); + const inferredType = linkInfo?.type || linkInfo?.origin_type || output?.type; + const type = inferredType && inferredType !== "*" ? inferredType : "*"; + const slot = { id: newId(), name, ordinal, type, showInput: true, showOutput: false }; + state.localSlots.push(slot); + state.nextOrdinal = ordinal + 1; + + const converted = updateSmartPipePort(input, name, type, slot.id); + converted.name = `v_${String(ordinal).padStart(3, "0")}`; + delete converted.bvAddSlot; + node.inputs[index] = converted; + return true; +} + +function updateSchemaWidget(node, schema) { + const widget = node.widgets?.find((item) => item.name === "bv_smart_pipe_schema_json"); + if (!widget) return; + const serialized = schema.map((slot) => { + const input = node.inputs?.find((item) => item.bvSlotId === slot.id); + const output = node.outputs?.find((item) => item.bvSlotId === slot.id); + return { ...slot, connected: input?.link != null || Boolean(output?.links?.length) }; + }); + widget.value = JSON.stringify(serialized); + widget.computeSize = () => [0, -4]; + widget.type = "converted-widget"; + widget.draw = () => {}; + widget.hidden = true; + widget.options ??= {}; + widget.options.hidden = true; + if (widget.element) widget.element.style.display = "none"; +} + +function updateRouteWidget(node) { + const route = routingFor(node); + const widget = node.widgets?.find((item) => item.name === ROUTE_INPUT); + if (!widget) return; + widget.value = JSON.stringify(route); + widget.computeSize = () => [0, -4]; + widget.type = "converted-widget"; + widget.draw = () => {}; + widget.hidden = true; + widget.options ??= {}; + widget.options.hidden = true; + if (widget.element) widget.element.style.display = "none"; +} + +function wirelessChoices(node) { + const nodes = pipeNodes(node.graph); + const routing = collectExpandedPipeAddresses(app.graph); + const ownDescriptor = activeDescriptorFor(node, routing); + const scopeDescriptors = ownDescriptor + ? routing.descriptors.filter((descriptor) => samePath(descriptor.hostPath, ownDescriptor.hostPath)) + : []; + const descriptorByAddress = new Map(scopeDescriptors.map((descriptor) => [descriptor.address, descriptor])); + const displayRoutes = scopeDescriptors.length + ? scopeDescriptors.map((descriptor) => { + if (descriptor.kind === "merge") { + const sources = routing.registry[descriptor.address]?.sources + || descriptor.node.properties?.bvSmartPipeMerge?.sources + || []; + return { + nodeId: descriptor.route.nodeId, + name: descriptor.route.name, + mode: "merge", + sourceIds: sources.map((source) => descriptorByAddress.get(source.address)?.route.nodeId).filter(Boolean), + }; + } + const predecessor = effectiveUpstreamNode(descriptor.node); + const predecessorId = predecessor ? routableNodeId(predecessor) : null; + return { + ...descriptor.route, + mode: predecessorId ? "follow" : "root", + predecessorId, + }; + }) + : nodes.map(routingFor); + const numbers = routingDisplayNumbers(predecessorChoiceRoutes(displayRoutes, ownDescriptor?.route.nodeId)); + const choices = []; + for (const candidate of nodes) { + if (candidate === node) continue; + const visited = new Set(); + let cursor = candidate; + let createsCycle = false; + while (cursor && !visited.has(cursor)) { + if (cursor === node) { + createsCycle = true; + break; + } + visited.add(cursor); + cursor = effectiveUpstreamNode(cursor); + } + if (createsCycle) continue; + const route = routingFor(candidate); + const number = numbers.get(route.nodeId); + choices.push({ label: routingChoiceLabel(number, route.name), id: route.nodeId, address: null, number, scope: "local" }); + } + if (ownDescriptor) { + const sameScopeDescriptors = routing.descriptors + .filter((descriptor) => descriptor.address !== ownDescriptor.address && samePath(descriptor.hostPath, ownDescriptor.hostPath)); + for (const descriptor of sameScopeDescriptors.filter((candidate) => candidate.kind === "merge")) { + const number = numbers.get(descriptor.route.nodeId); + choices.push({ label: routingChoiceLabel(number, descriptor.route.name), id: null, address: descriptor.address, number, scope: "local" }); + } + choices.sort((left, right) => compareRoutingNumbers(left.number, right.number) || left.label.localeCompare(right.label)); + const crossChoices = crossScopeDescriptors(routing.descriptors, ownDescriptor) + .map((descriptor) => { + const scope = descriptor.hostNames.length ? descriptor.hostNames.join(" › ") : "Root"; + return { label: `↗ ${scope} › ${descriptor.route.name}`, id: null, address: descriptor.address, number: "", scope }; + }) + .sort((left, right) => left.scope.localeCompare(right.scope) || left.label.localeCompare(right.label)); + choices.push(...crossChoices); + } else { + choices.sort((left, right) => compareRoutingNumbers(left.number, right.number) || left.label.localeCompare(right.label)); + } + return [{ label: "Start new pipe", id: null, address: null, number: "0", scope: "local" }, ...choices]; +} + +function updatePredecessorWidget(node) { + const widget = node.__bvPredecessorWidget; + if (!widget) return; + const wired = upstreamNode(node); + const route = routingFor(node); + const choices = wirelessChoices(node); + if (wired) { + widget.options.values = [`Wired: ${routingFor(wired).name}`]; + widget.value = widget.options.values[0]; + widget.disabled = false; + widget.__bvWired = true; + return; + } + widget.__bvWired = false; + widget.__bvChoices = choices; + widget.options.values = choices.map((choice) => choice.label); + const crossRoute = crossScopeRouteFor(node); + widget.value = crossRoute + ? choices.find((choice) => choice.address === crossRoute.predecessor.address)?.label || `⚠ Missing: ${crossRoute.edge.predecessorAddress}` + : choices.find((choice) => choice.id === route.predecessorId)?.label || "Start new pipe"; +} + +export function propagate(node, visited = new Set()) { + if (!node || visited.has(node)) return; + visited.add(node); + registerUpstream(node, effectiveUpstreamNode(node)); + const schema = resolveSchema(node); + reconcilePorts(node, schema); + updateSchemaWidget(node, schema); + updateRouteWidget(node); + updatePredecessorWidget(node); + const visibleSlots = Math.max((node.inputs?.length || 1) - 1, (node.outputs?.length || 1) - 1); + node.setSize?.([Math.max(260, node.size?.[0] || 0), 90 + visibleSlots * 22]); + node.setDirtyCanvas?.(true, true); + for (const target of node.__bvSmartPipeTargets || []) propagate(target, visited); +} + +function validateSlots(node) { + const state = stateFor(node); + const names = new Set(); + for (const slot of resolveSchema(node)) { + const local = state.localSlots.find((item) => item.id === slot.id); + if (local) { + local.name = local.name.trim(); + local.showInput = true; + } + const name = local?.name ?? slot.name; + if (!name) throw new Error("Jeder lokale Slot benötigt einen Namen."); + if (names.has(name)) throw new Error(`Duplicate slot name: ${name}`); + names.add(name); + } +} + +function openEditor(node) { + const { definition: state, projection } = schemaProjectionFor(node); + const overlay = document.createElement("div"); + overlay.style.cssText = "position:fixed;inset:0;z-index:100000;background:rgb(0 0 0 / 65%);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center"; + const panel = document.createElement("div"); + panel.className = "bv-smart-pipe-editor"; + panel.style.cssText = "width:min(900px,92vw);max-height:86vh;overflow:auto;background:var(--comfy-menu-bg,#202020);color:var(--input-text,#eee);border:1px solid var(--border-color,#555);border-radius:12px;padding:20px;box-shadow:0 18px 60px #000a;font:14px sans-serif"; + overlay.append(panel); + const title = document.createElement("h2"); + title.textContent = "BV Smart Pipe konfigurieren"; + title.style.marginTop = "0"; + panel.append(title); + const error = document.createElement("div"); + error.style.cssText = "color:#ff8c8c;min-height:20px"; + panel.append(error); + if (state.renameNotices?.length) { + const notice = document.createElement("div"); + notice.style.cssText = "color:var(--descrip-text,#bbb);margin:0 0 10px"; + notice.textContent = `Namenskonflikt automatisch aufgelöst: ${state.renameNotices.map((item) => `${item.from} → ${item.to}`).join(", ")}`; + panel.append(notice); + } + const table = document.createElement("table"); + table.style.cssText = "width:100%;border-collapse:collapse"; + panel.append(table); + + const render = () => { + table.replaceChildren(); + const head = table.insertRow(); + for (const label of ["Status", "Name", "Typ", "Input", "Output", "Aktion"]) { + const cell = document.createElement("th"); + cell.textContent = label; + cell.style.textAlign = "left"; + head.append(cell); + } + for (const slot of resolveSchema(node)) { + const local = state.localSlots.find((item) => item.id === slot.id); + const row = table.insertRow(); + row.insertCell().textContent = slot.missing ? "⚠ Fehlt" : local ? "Lokal" : "Geerbt"; + const nameCell = row.insertCell(); + const name = document.createElement("input"); + name.value = slot.name; + name.disabled = !local; + name.oninput = () => { if (local) local.name = name.value; }; + nameCell.append(name); + const typeCell = row.insertCell(); + const type = document.createElement("input"); + type.value = slot.type || "*"; + type.disabled = !local; + type.oninput = () => { if (local) local.type = type.value.trim() || "*"; }; + typeCell.append(type); + for (const field of ["showInput", "showOutput"]) { + const cell = row.insertCell(); + const checkbox = document.createElement("input"); + checkbox.type = "checkbox"; + checkbox.checked = field === "showInput" && local ? true : slot[field] ?? false; + checkbox.disabled = field === "showInput" && Boolean(local); + if (checkbox.disabled) checkbox.title = "Lokale Slots benötigen einen Input, weil hier ihr Wert erzeugt wird."; + checkbox.onchange = () => { + const target = local || projection.inheritedSlots.find((item) => item.id === slot.id); + if (target) target[field] = checkbox.checked; + }; + cell.append(checkbox); + } + const action = row.insertCell(); + if (local || slot.missing) { + const remove = document.createElement("button"); + remove.textContent = "Entfernen"; + remove.onclick = () => { + state.localSlots = state.localSlots.filter((item) => item.id !== slot.id); + projection.inheritedSlots = projection.inheritedSlots.filter((item) => item.id !== slot.id); + render(); + }; + action.append(remove); + } + } + }; + render(); + + const paste = document.createElement("textarea"); + paste.placeholder = "Mehrere neue Slots – ein Name pro Zeile"; + paste.style.cssText = "width:100%;height:80px;margin-top:14px;box-sizing:border-box;resize:vertical"; + panel.append(paste); + const actions = document.createElement("div"); + actions.style.cssText = "display:flex;gap:8px;justify-content:flex-end;margin-top:12px"; + panel.append(actions); + const add = document.createElement("button"); + add.textContent = "Slots hinzufügen"; + add.onclick = () => { + const names = paste.value.split(/\r?\n/).map((value) => value.trim()).filter(Boolean); + const additions = names.length ? names : ["new_slot"]; + if (state.localSlots.length + (projection.inheritedSlots?.length || 0) + additions.length > MAX_SLOTS) { + error.textContent = `Maximal ${MAX_SLOTS} Slots sind erlaubt.`; + return; + } + const usedOrdinals = new Set(resolveSchema(node).map((slot) => slot.ordinal)); + const planned = []; + let nextOrdinal = state.nextOrdinal; + for (const name of additions) { + const ordinal = nextFreeOrdinal(usedOrdinals, nextOrdinal, MAX_SLOTS); + if (!ordinal) { + error.textContent = `Keine freie Slotposition bis zum Limit ${MAX_SLOTS} verfügbar.`; + return; + } + planned.push({ id: newId(), name, ordinal, type: "*", showInput: true, showOutput: false }); + usedOrdinals.add(ordinal); + nextOrdinal = ordinal + 1; + } + state.localSlots.push(...planned); + state.nextOrdinal = nextOrdinal; + paste.value = ""; + render(); + }; + actions.append(add); + const cancel = document.createElement("button"); + cancel.textContent = "Abbrechen"; + cancel.onclick = () => overlay.remove(); + actions.append(cancel); + const save = document.createElement("button"); + save.textContent = "Speichern"; + save.onclick = () => { + try { + validateSlots(node); + propagate(node); + overlay.remove(); + } catch (caught) { + error.textContent = caught.message; + } + }; + actions.append(save); + overlay.onclick = (event) => { if (event.target === overlay) overlay.remove(); }; + document.body.append(overlay); +} + +function setupNode(node) { + if (node.__bvSmartPipeReady) return; + node.__bvSmartPipeReady = true; + stateFor(node); + routingFor(node); + const predecessor = node.addWidget?.("combo", "Pipe predecessor", "Start new pipe", (label) => { + if (upstreamNode(node) || predecessor.__bvWired) return; + const route = routingFor(node); + const selected = predecessor.__bvChoices?.find((choice) => choice.label === label); + const routing = collectExpandedPipeAddresses(app.graph); + const destination = activeDescriptorFor(node, routing); + if (destination) delete routing.registry[destination.address]; + if (selected?.address && destination) { + routing.registry[destination.address] = { version: 1, predecessorAddress: selected.address }; + route.mode = "root"; + route.predecessorId = null; + } else { + route.mode = selected?.id ? "follow" : "root"; + route.predecessorId = selected?.id || null; + } + requestAnimationFrame(() => propagateGraph(node.graph)); + }, { values: ["Start new pipe"], serialize: false }); + if (predecessor) { + predecessor.label = "Pipe predecessor"; + predecessor.serialize = false; + node.__bvPredecessorWidget = predecessor; + } + const button = node.addWidget?.("button", "Configure", null, () => openEditor(node), { serialize: false }); + if (button) button.label = "Configure Smart Pipe"; + const originalConnectionsChange = node.onConnectionsChange; + node.onConnectionsChange = function (type, index, connected, linkInfo) { + originalConnectionsChange?.apply(this, arguments); + if (type === 1 && connected) { + if (convertAddSlot(this, index, linkInfo)) { + requestAnimationFrame(() => propagate(this)); + return; + } + if (index <= 0) return; + const input = this.inputs?.[index]; + const slot = resolveSchema(this).find((item) => item.id === input?.bvSlotId); + const inferred = linkInfo?.type || linkInfo?.origin_type; + if (slot?.missing) { + const { definition, projection } = schemaProjectionFor(this); + const promotionState = { inheritedSlots: projection.inheritedSlots || [], localSlots: definition.localSlots }; + promoteInheritedSlot(promotionState, slot.id, inferred); + projection.inheritedSlots = promotionState.inheritedSlots; + definition.localSlots = promotionState.localSlots; + } + if (slot && slot.type === "*" && inferred && inferred !== "*") { + const local = stateFor(this).localSlots.find((item) => item.id === slot.id); + if (local) local.type = inferred; + } + } + if (type === 1 && index === 0 && !connected) { + const route = routingFor(this); + route.mode = "root"; + route.predecessorId = null; + } + if (type === 2 && connected) { + const output = this.outputs?.[index]; + const slot = resolveSchema(this).find((item) => item.id === output?.bvSlotId); + const projection = schemaProjectionFor(this).projection; + const target = stateFor(this).localSlots.find((item) => item.id === slot?.id) + || projection.inheritedSlots.find((item) => item.id === slot?.id); + if (target) target.showOutput = true; + } + requestAnimationFrame(() => propagate(this)); + }; + requestAnimationFrame(() => propagate(node)); +} + +function installPromptMaterializer() { + if (app.__bvSmartPipePromptMaterializer || typeof app.graphToPrompt !== "function") return; + app.__bvSmartPipePromptMaterializer = true; + const original = app.graphToPrompt; + app.graphToPrompt = async function () { + const seenGraphs = new Set(); + const refreshGraph = (graph) => { + if (!graph || seenGraphs.has(graph)) return; + seenGraphs.add(graph); + for (const node of graph._nodes || graph.nodes || []) { + if (isSmartPipe(node)) propagate(node); + const subgraph = subgraphFor(node); + if (subgraph) refreshGraph(subgraph); + } + }; + refreshGraph(app.graph); + const routing = collectExpandedPipeAddresses(app.graph); + const modeState = promptModeState(routing.descriptors); + const { prunedExecutionIds } = modeState; + const localModeState = { + routesByScopedNodeId: new Map(routing.descriptors.filter((descriptor) => descriptor.kind === "pipe") + .map((descriptor) => [`${executionScope(descriptor.executionId)}\u0000${descriptor.route.nodeId}`, descriptor.route])), + bypassedScopedNodeIds: new Set(routing.descriptors.filter((descriptor) => descriptor.kind === "pipe" && descriptor.node?.mode === 4) + .map((descriptor) => `${executionScope(descriptor.executionId)}\u0000${descriptor.route.nodeId}`)), + mutedScopedNodeIds: new Set(routing.descriptors.filter((descriptor) => descriptor.kind === "pipe" && descriptor.node?.mode === 2) + .map((descriptor) => `${executionScope(descriptor.executionId)}\u0000${descriptor.route.nodeId}`)), + prunedExecutionIds, + bypassPredecessorsByScopedNodeId: new Map(routing.descriptors.filter((descriptor) => descriptor.kind === "pipe" && descriptor.node?.mode === 4) + .map((descriptor) => { + const edge = routing.registry[descriptor.address]; + const predecessor = edge?.predecessorAddress + ? routing.descriptors.find((candidate) => candidate.address === edge.predecessorAddress) + : routing.descriptors.find((candidate) => candidate.hostPath.length === descriptor.hostPath.length + && candidate.hostPath.every((part, index) => part === descriptor.hostPath[index]) + && candidate.route.nodeId === descriptor.route.predecessorId); + return predecessor ? [`${executionScope(descriptor.executionId)}\u0000${descriptor.route.nodeId}`, { + executionId: predecessor.executionId, + route: predecessor.route, + scope: executionScope(predecessor.executionId), + }] : null; + }).filter(Boolean)), + }; + const result = await original.apply(this, arguments); + applyInstanceSchemaProjections(result?.output, routing); + applyMergeConfigurations(result?.output, routing); + remapSmartPipeOutputLinks(result?.output, routing); + materializeAddressedPipeLinks(result?.output, routing.addressByExecutionId, routing.registry, modeState); + materializeSmartPipeMergeSources(result?.output, routing.addressByExecutionId, routing.registry, modeState); + materializeWirelessPipeLinks(result?.output, localModeState); + prunePromptBranches(result?.output, prunedExecutionIds); + validateMaterializedPipeGraph(result?.output); + return result; + }; +} + +let revealMonitorStarted = false; +const routingSignatures = new WeakMap(); +let lastHostRoutingCheck = 0; +let hostRoutingSignature = ""; +const registryCleanupStates = new WeakMap(); + +function monitorHostRoutingNames(timestamp) { + if (!app.graph || timestamp - lastHostRoutingCheck < 250) return; + lastHostRoutingCheck = timestamp; + const routing = collectExpandedPipeAddresses(app.graph); + let cleanupState = registryCleanupStates.get(app.graph); + if (!cleanupState) { + cleanupState = { missingSince: new Map(), backups: new Map() }; + registryCleanupStates.set(app.graph, cleanupState); + } + reconcileRouteRegistryDestinations( + routing.registry, + new Set(routing.descriptors.map((descriptor) => descriptor.address)), + cleanupState, + timestamp, + ); + const nextSignature = routing.descriptors + .map((descriptor) => `${descriptor.address}\u0000${descriptor.hostNames.join("\u0000")}`) + .sort() + .join("\u0001"); + if (hostRoutingSignature && hostRoutingSignature !== nextSignature) { + const graphs = new Set(routing.descriptors.map((descriptor) => descriptor.node.graph)); + graphs.forEach((graph) => propagateGraph(graph)); + } + hostRoutingSignature = nextSignature; +} + +function monitorRoutingNames(graph, visited = new Set()) { + if (!graph || visited.has(graph)) return; + visited.add(graph); + const nodes = pipeNodes(graph); + const signature = nodes.map((node) => { + const route = routingFor(node); + return `${route.nodeId}\u0000${route.name}\u0000${node.title}\u0000${route.mode}\u0000${route.predecessorId || ""}`; + }).join("\u0001"); + if (routingSignatures.has(graph) && routingSignatures.get(graph) !== signature) { + propagateGraph(graph); + } + routingSignatures.set(graph, nodes.map((node) => { + const route = routingFor(node); + return `${route.nodeId}\u0000${route.name}\u0000${node.title}\u0000${route.mode}\u0000${route.predecessorId || ""}`; + }).join("\u0001")); + for (const node of graphNodes(graph)) monitorRoutingNames(subgraphFor(node), visited); +} + +function startTypedOutputRevealMonitor() { + if (revealMonitorStarted) return; + revealMonitorStarted = true; + let previousKey = ""; + let previousGraph = null; + const monitor = (timestamp = performance.now()) => { + monitorHostRoutingNames(timestamp); + monitorRoutingNames(app.graph); + const connector = app.canvas?.linkConnector; + const renderLinks = connector?.renderLinks || []; + const types = connector?.state?.connectingTo === "output" + ? [...new Set(renderLinks.map((link) => link.fromSlot?.type).filter(Boolean).map(String))] + : []; + const key = types.slice().sort().join("|"); + const currentGraph = app.canvas?.getCurrentGraph?.() || app.canvas?.graph || app.graph; + if (key !== previousKey || currentGraph !== previousGraph) { + previousKey = key; + previousGraph = currentGraph; + for (const node of graphNodes(currentGraph)) { + if (!isSmartPipe(node)) continue; + node.__bvSmartPipeRevealTypes = types; + propagate(node); + } + } + requestAnimationFrame(monitor); + }; + requestAnimationFrame(monitor); +} + +app.registerExtension({ + name: "bv_nodepack.smart_pipe", + init() { + installSubgraphContextTracking(); + startTypedOutputRevealMonitor(); + installPromptMaterializer(); + if (document.getElementById("bv-internal-widget-style")) return; + const style = document.createElement("style"); + style.id = "bv-internal-widget-style"; + style.textContent = ` + .dom-widget:has(textarea[placeholder="bv_smart_pipe_schema_json"]), .dom-widget:has(textarea[placeholder="bv_smart_pipe_route_json"]), .dom-widget:has(textarea[placeholder="bv_control_config_json"]) { display: none !important; } + .bv-smart-pipe-editor h2 { font-size: 1.2rem; font-weight: 650; margin-bottom: 12px; } + .bv-smart-pipe-editor table { border-spacing: 0; overflow: hidden; border: 1px solid var(--border-color, #555); border-radius: 8px; } + .bv-smart-pipe-editor th { color: var(--descrip-text, #bbb); font-size: 12px; font-weight: 600; padding: 8px 10px; background: var(--comfy-menu-secondary-bg, #292929); } + .bv-smart-pipe-editor td { padding: 7px 10px; border-top: 1px solid var(--border-color, #444); } + .bv-smart-pipe-editor input[type="text"], .bv-smart-pipe-editor input:not([type]), .bv-smart-pipe-editor textarea { color: var(--input-text, #eee); background: var(--comfy-input-bg, #181818); border: 1px solid var(--border-color, #555); border-radius: 6px; padding: 7px 9px; } + .bv-smart-pipe-editor button { color: var(--input-text, #eee); background: var(--comfy-menu-secondary-bg, #333); border: 1px solid var(--border-color, #555); border-radius: 6px; padding: 7px 11px; cursor: pointer; } + .bv-smart-pipe-editor button:hover { background: var(--content-hover-bg, #444); } + .bv-smart-pipe-editor input:disabled { opacity: .55; cursor: not-allowed; } + `; + document.head.append(style); + }, + async nodeCreated(node) { + if (isSmartPipe(node)) { + setupNode(node); + requestAnimationFrame(() => pipeNodes(node.graph).forEach((candidate) => propagate(candidate))); + } + }, + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== NODE_CLASS) return; + const originalConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const result = originalConfigure?.apply(this, arguments); + setupNode(this); + requestAnimationFrame(() => propagate(this)); + return result; + }; + const originalMenu = nodeType.prototype.getExtraMenuOptions; + nodeType.prototype.getExtraMenuOptions = function (_, options) { + originalMenu?.apply(this, arguments); + options.unshift({ content: "Configure Smart Pipe", callback: () => openEditor(this) }); + }; + }, +}); diff --git a/js/bv_smart_pipe_merge.js b/js/bv_smart_pipe_merge.js new file mode 100644 index 0000000..8e732fd --- /dev/null +++ b/js/bv_smart_pipe_merge.js @@ -0,0 +1,333 @@ +import { app } from "../../scripts/app.js"; +import { activeDescriptorFor, collectExpandedPipeAddresses, propagate } from "./bv_smart_pipe.js"; +import { + compactMergeNodeHeight, + duplicateDynamicInputIndexes, + hasMergeSource, + normalizeMergeSources, + SMART_PIPE_MERGE_DEFAULT_TITLE, +} from "./bv_smart_pipe_merge_model.js"; + +const NODE_CLASS = "BV Smart Pipe Merge"; +const CONFIG_INPUT = "bv_smart_pipe_merge_json"; +const ADD_SOURCE = "bv_add_pipe_source"; +const MAX_SOURCES = 16; + +function isMerge(node) { + return node?.comfyClass === NODE_CLASS || node?.type === NODE_CLASS; +} + +function newId() { + return globalThis.crypto?.randomUUID?.() ?? `bv-${Date.now()}-${Math.random().toString(16).slice(2)}`; +} + +function stateFor(node) { + node.properties ??= {}; + const initialName = !node.title || ["Pipe", "Pipe Merge"].includes(node.title) ? SMART_PIPE_MERGE_DEFAULT_TITLE : node.title; + node.properties.bvSmartPipeMerge ??= { version: 1, nodeId: newId(), name: initialName, sources: [] }; + const state = node.properties.bvSmartPipeMerge; + state.name ??= initialName; + state.sources ??= []; + state.nextOrdinal ??= Math.max(0, ...state.sources.map((source) => Number.parseInt(source.key?.split("_")[1], 10) || 0)) + 1; + return state; +} + +function syncTitle(node) { + const state = stateFor(node); + if (node.__bvSmartPipeMergeAppliedTitle && node.title !== node.__bvSmartPipeMergeAppliedTitle && !["Pipe", "Pipe Merge"].includes(node.title)) { + state.name = node.title; + } + node.title = state.name || SMART_PIPE_MERGE_DEFAULT_TITLE; + node.__bvSmartPipeMergeAppliedTitle = node.title; +} + +function activeSources(node, routing = collectExpandedPipeAddresses(app.graph)) { + const state = stateFor(node); + const widget = configWidget(node); + if (!state.sources.length && typeof widget?.value === "string") { + try { + const persisted = JSON.parse(widget.value); + if (Array.isArray(persisted)) state.sources = persisted; + } catch { + // Invalid hidden configuration is ignored and replaced on the next sync. + } + } + const connectedWiredKeys = new Set( + (node.inputs || []) + .filter((input) => /^pipe_\d+$/.test(input.name || "") && input.link != null) + .map((input) => input.name), + ); + state.sources = normalizeMergeSources(state.sources, connectedWiredKeys); + const descriptor = activeDescriptorFor(node, routing); + if (!descriptor) return { sources: state.sources, descriptor: null, routing }; + routing.registry[descriptor.address] ??= { version: 1, kind: "merge", sources: structuredClone(state.sources) }; + const entry = routing.registry[descriptor.address]; + entry.kind = "merge"; + entry.sources ??= structuredClone(state.sources); + entry.sources = normalizeMergeSources(entry.sources, connectedWiredKeys); + state.sources = structuredClone(entry.sources); + return { sources: entry.sources, descriptor, routing }; +} + +function ensureUniqueId(node) { + const state = stateFor(node); + const siblings = node.graph?._nodes || node.graph?.nodes || []; + if (siblings.some((candidate) => candidate !== node && isMerge(candidate) && stateFor(candidate).nodeId === state.nodeId)) { + state.nodeId = newId(); + } +} + +function configWidget(node) { + return node.widgets?.find((widget) => widget.name === CONFIG_INPUT); +} + +function syncConfig(node) { + const { sources } = activeSources(node); + const widget = configWidget(node); + if (widget) widget.value = JSON.stringify(sources); +} + +function hideConfigWidget(node) { + const widget = configWidget(node); + if (!widget) return; + widget.computeSize = () => [0, -4]; + widget.hidden = true; +} + +function sourceInput(node, key) { + return node.inputs?.find((input) => input.name === key); +} + +function ensureAddSource(node) { + let input = node.inputs?.find((slot) => slot.bvAddPipeSource || slot.name === ADD_SOURCE); + if (!input) input = node.addInput(ADD_SOURCE, "BV_SMART_PIPE"); + input.name = ADD_SOURCE; + input.label = "+ Add Pipe Source"; + input.type = "BV_SMART_PIPE"; + input.bvAddPipeSource = true; +} + +function reconcileInputs(node) { + syncTitle(node); + for (const index of duplicateDynamicInputIndexes(node.inputs)) { + const input = node.inputs[index]; + if (input?.link != null) node.graph?.removeLink?.(input.link); + node.removeInput(index); + } + const { sources, descriptor, routing } = activeSources(node); + const seenAddresses = new Set(); + for (let index = sources.length - 1; index >= 0; index--) { + const source = sources[index]; + if (source.mode === "wired" && !source.address) { + const input = sourceInput(node, source.key); + const link = input?.link == null ? null : node.graph?.links?.get?.(input.link) ?? node.graph?.links?.[input.link]; + const originNode = link ? node.graph?.getNodeById?.(link.origin_id) : null; + source.address = routing.descriptors.find((candidate) => candidate.node === originNode && (!descriptor || candidate.hostPath.join("/") === descriptor.hostPath.join("/")))?.address || null; + } + if (!source.address || !seenAddresses.has(source.address)) { + if (source.address) seenAddresses.add(source.address); + continue; + } + const input = sourceInput(node, source.key); + if (input?.link != null) node.graph?.removeLink?.(input.link); + sources.splice(index, 1); + } + const wired = new Set(sources.filter((source) => source.mode === "wired").map((source) => source.key)); + for (let index = (node.inputs?.length || 0) - 1; index >= 0; index--) { + const input = node.inputs[index]; + if (input.name === CONFIG_INPUT || input.bvAddPipeSource || input.name === ADD_SOURCE) continue; + if (/^pipe_\d+$/.test(input.name) && !wired.has(input.name) && input.link == null) node.removeInput(index); + } + for (const source of sources) { + if (source.mode !== "wired") continue; + let input = sourceInput(node, source.key); + if (!input) input = node.addInput(source.key, "BV_SMART_PIPE"); + input.label = source.label || "Wired Pipe"; + input.type = "BV_SMART_PIPE"; + } + ensureAddSource(node); + hideConfigWidget(node); + syncConfig(node); + const wiredCount = sources.filter((source) => source.mode === "wired").length; + node.setSize?.([Math.max(280, node.size?.[0] || 0), compactMergeNodeHeight(wiredCount)]); + node.setDirtyCanvas?.(true, true); + for (const target of node.__bvSmartPipeTargets || []) propagate(target); +} + +function convertAddSource(node, index, linkInfo) { + const input = node.inputs?.[index]; + if (!input?.bvAddPipeSource && input?.name !== ADD_SOURCE) return false; + const { sources } = activeSources(node); + if (sources.length >= MAX_SOURCES) return false; + const routing = collectExpandedPipeAddresses(app.graph); + const destination = activeDescriptorFor(node, routing); + const originNode = node.graph?.getNodeById?.(linkInfo?.origin_id); + const origin = routing.descriptors.find((descriptor) => descriptor.node === originNode && (!destination || descriptor.hostPath.join("/") === destination.hostPath.join("/"))); + const candidate = { mode: "wired", address: origin?.address || null }; + if (hasMergeSource(sources, candidate)) { + requestAnimationFrame(() => { + const duplicateInput = node.inputs?.[index]; + if (duplicateInput?.link != null) node.graph?.removeLink?.(duplicateInput.link); + reconcileInputs(node); + }); + return true; + } + const state = stateFor(node); + let ordinal = state.nextOrdinal; + const used = new Set(sources.map((source) => source.key)); + while (used.has(`pipe_${String(ordinal).padStart(3, "0")}`)) ordinal++; + const key = `pipe_${String(ordinal).padStart(3, "0")}`; + state.nextOrdinal = ordinal + 1; + input.name = key; + input.label = `Wired ${sources.length + 1}`; + input.bvAddPipeSource = false; + sources.push({ key, mode: "wired", address: candidate.address, label: origin?.route?.name || input.label }); + requestAnimationFrame(() => reconcileInputs(node)); + return true; +} + +function removeSource(node, source) { + const { sources } = activeSources(node); + const input = sourceInput(node, source.key); + if (input?.link != null) node.graph?.removeLink?.(input.link); + const index = node.inputs?.indexOf(input) ?? -1; + if (index >= 0) node.removeInput(index); + sources.splice(sources.indexOf(source), 1); +} + +function openEditor(node) { + const routing = collectExpandedPipeAddresses(app.graph); + const current = activeDescriptorFor(node, routing); + const { sources } = activeSources(node, routing); + const overlay = document.createElement("div"); + overlay.style.cssText = "position:fixed;inset:0;z-index:100000;background:#000a;backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center"; + const panel = document.createElement("div"); + panel.className = "bv-smart-pipe-editor bv-smart-pipe-merge-editor"; + panel.style.cssText = "width:min(760px,92vw);max-height:86vh;overflow:auto;background:var(--comfy-menu-bg,#202020);color:var(--input-text,#eee);border:1px solid var(--border-color,#555);border-radius:12px;padding:20px;box-shadow:0 18px 60px #000a;font:14px sans-serif"; + overlay.append(panel); + const heading = document.createElement("h2"); + heading.textContent = "BV Smart Pipe Merge konfigurieren"; + heading.style.marginTop = "0"; + panel.append(heading); + const hint = document.createElement("p"); + hint.textContent = "Die Reihenfolge gilt von oben nach unten. Bei gleicher Slot-ID gewinnt die spätere Quelle."; + hint.style.color = "var(--descrip-text,#bbb)"; + panel.append(hint); + const list = document.createElement("div"); + list.style.cssText = "display:grid;gap:7px"; + panel.append(list); + + let refreshDropdown = () => {}; + const render = () => { + list.replaceChildren(); + sources.forEach((source, index) => { + const row = document.createElement("div"); + row.style.cssText = "display:grid;grid-template-columns:34px 1fr auto auto auto;gap:6px;align-items:center;padding:7px;border:1px solid var(--border-color,#555);border-radius:8px;background:var(--comfy-menu-secondary-bg,#292929)"; + const number = document.createElement("span"); + number.textContent = `${index + 1}.`; + const label = document.createElement("span"); + label.textContent = `${source.mode === "wired" ? "🔗" : "⌁"} ${source.label || source.key}`; + const up = document.createElement("button"); up.textContent = "↑"; up.disabled = index === 0; + up.onclick = () => { [sources[index - 1], sources[index]] = [sources[index], sources[index - 1]]; render(); }; + const down = document.createElement("button"); down.textContent = "↓"; down.disabled = index === sources.length - 1; + down.onclick = () => { [sources[index + 1], sources[index]] = [sources[index], sources[index + 1]]; render(); }; + const remove = document.createElement("button"); remove.textContent = "Entfernen"; + remove.onclick = () => { removeSource(node, source); render(); }; + row.append(number, label, up, down, remove); + list.append(row); + }); + refreshDropdown(); + }; + render(); + + const addRow = document.createElement("div"); + addRow.style.cssText = "display:flex;gap:8px;margin-top:14px"; + const select = document.createElement("select"); + select.style.cssText = "flex:1;color:var(--input-text,#eee);background:var(--comfy-input-bg,#181818);border:1px solid var(--border-color,#555);border-radius:6px;padding:7px"; + let candidates = []; + const addWireless = document.createElement("button"); + addWireless.textContent = "Wireless hinzufügen"; + refreshDropdown = () => { + const previousAddress = select.value; + candidates = routing.descriptors.filter((descriptor) => descriptor.address !== current?.address && !hasMergeSource(sources, { address: descriptor.address })); + select.replaceChildren(); + for (const descriptor of candidates) { + const option = document.createElement("option"); + option.value = descriptor.address; + option.textContent = `${descriptor.hostNames.length ? `${descriptor.hostNames.join(" › ")} › ` : ""}${descriptor.route.name || descriptor.node.title || "Pipe"}`; + select.append(option); + } + if (candidates.some((candidate) => candidate.address === previousAddress)) select.value = previousAddress; + select.disabled = !candidates.length; + addWireless.disabled = !candidates.length || sources.length >= MAX_SOURCES; + }; + addWireless.onclick = () => { + const descriptor = candidates.find((candidate) => candidate.address === select.value); + if (!descriptor || sources.length >= MAX_SOURCES || hasMergeSource(sources, { address: descriptor.address })) return; + const state = stateFor(node); + let ordinal = state.nextOrdinal; + const used = new Set(sources.map((source) => source.key)); + while (used.has(`pipe_${String(ordinal).padStart(3, "0")}`)) ordinal++; + state.nextOrdinal = ordinal + 1; + sources.push({ key: `pipe_${String(ordinal).padStart(3, "0")}`, mode: "wireless", address: descriptor.address, label: descriptor.route.name || descriptor.node.title || "Pipe" }); + render(); + }; + addRow.append(select, addWireless); + panel.append(addRow); + refreshDropdown(); + + const actions = document.createElement("div"); + actions.style.cssText = "display:flex;gap:8px;justify-content:flex-end;margin-top:16px"; + const cancel = document.createElement("button"); cancel.textContent = "Schließen"; cancel.onclick = () => overlay.remove(); + const save = document.createElement("button"); save.textContent = "Speichern"; + save.onclick = () => { reconcileInputs(node); overlay.remove(); }; + actions.append(cancel, save); + panel.append(actions); + overlay.onclick = (event) => { if (event.target === overlay) overlay.remove(); }; + document.body.append(overlay); +} + +function setupNode(node) { + if (node.__bvSmartPipeMergeReady) return; + node.__bvSmartPipeMergeReady = true; + ensureUniqueId(node); + const state = stateFor(node); + node.title = state.name || SMART_PIPE_MERGE_DEFAULT_TITLE; + node.__bvSmartPipeMergeAppliedTitle = node.title; + const button = node.addWidget?.("button", "Configure Merge", null, () => openEditor(node), { serialize: false }); + if (button) button.label = "Configure Pipe Merge"; + const originalConnectionsChange = node.onConnectionsChange; + node.onConnectionsChange = function (type, index, connected) { + originalConnectionsChange?.apply(this, arguments); + if (type === 1 && connected && convertAddSource(this, index, arguments[3])) return; + requestAnimationFrame(() => reconcileInputs(this)); + }; + requestAnimationFrame(() => reconcileInputs(node)); +} + +app.registerExtension({ + name: "bv_nodepack.smart_pipe_merge", + init() { + const style = document.createElement("style"); + style.textContent = `.dom-widget:has(textarea[placeholder="${CONFIG_INPUT}"]) { display:none!important; }`; + document.head.append(style); + }, + async nodeCreated(node) { + if (isMerge(node)) setupNode(node); + }, + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== NODE_CLASS) return; + const originalConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const result = originalConfigure?.apply(this, arguments); + setupNode(this); + requestAnimationFrame(() => reconcileInputs(this)); + return result; + }; + const originalMenu = nodeType.prototype.getExtraMenuOptions; + nodeType.prototype.getExtraMenuOptions = function (_, options) { + originalMenu?.apply(this, arguments); + options.unshift({ content: "Configure Pipe Merge", callback: () => openEditor(this) }); + }; + }, +}); diff --git a/js/bv_smart_pipe_merge_model.js b/js/bv_smart_pipe_merge_model.js new file mode 100644 index 0000000..a471a87 --- /dev/null +++ b/js/bv_smart_pipe_merge_model.js @@ -0,0 +1,84 @@ +export const SMART_PIPE_DEFAULT_TITLE = "🌀 BV Smart Pipe"; +export const SMART_PIPE_MERGE_DEFAULT_TITLE = "🌀 BV Smart Pipe Merge"; + +export function mergeSourceIdentity(source) { + return String(source?.address || "").trim() || null; +} + +export function hasMergeSource(sources, candidate) { + const identity = mergeSourceIdentity(candidate); + return Boolean(identity && (sources || []).some((source) => mergeSourceIdentity(source) === identity)); +} + +export function normalizeMergeSources(sources, connectedWiredKeys = new Set()) { + const normalized = []; + const seenKeys = new Set(); + const seenAddresses = new Set(); + for (const source of sources || []) { + const key = String(source?.key || "").trim(); + const mode = source?.mode === "wired" ? "wired" : "wireless"; + const address = mergeSourceIdentity(source); + if (!/^pipe_\d+$/.test(key) || seenKeys.has(key)) continue; + if (mode === "wired" && !connectedWiredKeys.has(key)) continue; + if (mode === "wireless" && !address) continue; + if (address && seenAddresses.has(address)) continue; + seenKeys.add(key); + if (address) seenAddresses.add(address); + normalized.push(source); + } + return normalized; +} + +export function duplicateDynamicInputIndexes(inputs) { + const groups = new Map(); + (inputs || []).forEach((input, index) => { + if (!/^pipe_\d+$/.test(input?.name || "")) return; + const indexes = groups.get(input.name) || []; + indexes.push(index); + groups.set(input.name, indexes); + }); + const duplicates = []; + for (const indexes of groups.values()) { + if (indexes.length < 2) continue; + const keep = indexes.find((index) => inputs[index]?.link != null) ?? indexes[0]; + duplicates.push(...indexes.filter((index) => index !== keep)); + } + return duplicates.sort((left, right) => right - left); +} + +export function mergePipeSchemas(schemas) { + const order = []; + const byId = new Map(); + const canonicalIdById = new Map(); + const normalizedName = (slot) => String(slot?.name || "").trim().toLocaleLowerCase(); + const compatibleTypes = (left, right) => !left || !right || left === "*" || right === "*" || left === right; + for (const schema of schemas || []) { + for (const slot of schema || []) { + if (!slot?.id) continue; + let canonicalId = canonicalIdById.get(slot.id); + if (!canonicalId) { + canonicalId = order.find((id) => { + const candidate = byId.get(id); + return normalizedName(candidate) === normalizedName(slot) + && compatibleTypes(candidate?.type, slot.type); + }) || slot.id; + canonicalIdById.set(slot.id, canonicalId); + } + if (!byId.has(canonicalId)) { + order.push(canonicalId); + byId.set(canonicalId, { ...slot, id: canonicalId, aliases: [] }); + continue; + } + const current = byId.get(canonicalId); + const aliases = new Set([...(current.aliases || []), ...(slot.aliases || [])]); + if (slot.id !== canonicalId) aliases.add(slot.id); + const type = current.type === "*" && slot.type && slot.type !== "*" ? slot.type : current.type; + byId.set(canonicalId, { ...current, type, aliases: [...aliases] }); + } + } + return order.map((id, index) => ({ ...byId.get(id), ordinal: index + 1 })); +} + +export function compactMergeNodeHeight(wiredSourceCount) { + return 88 + Math.max(0, Number(wiredSourceCount) || 0) * 22; +} diff --git a/js/bv_smart_pipe_routing.js b/js/bv_smart_pipe_routing.js new file mode 100644 index 0000000..f97c6b9 --- /dev/null +++ b/js/bv_smart_pipe_routing.js @@ -0,0 +1,443 @@ +export const ROUTE_INPUT = "bv_smart_pipe_route_json"; +export const ROOT_ROUTING_PROPERTY = "bvSmartPipeRootId"; +export const ROUTE_REGISTRY_PROPERTY = "bvSmartPipeRoutes"; +export const HOST_ROUTING_PROPERTY = "bvSmartPipeHost"; + +export function logicalAddress(rootId, hostPath, nodeId) { + return [rootId, ...(hostPath || []), nodeId].map((part) => encodeURIComponent(String(part))).join("/"); +} + +export function parseLogicalAddress(address) { + return String(address || "").split("/").filter(Boolean).map((part) => decodeURIComponent(part)); +} + +export function cloneRouteRegistryPrefix(registry, oldPrefix, newPrefix) { + const normalizedOld = `${String(oldPrefix).replace(/\/$/, "")}/`; + const normalizedNew = `${String(newPrefix).replace(/\/$/, "")}/`; + const additions = []; + for (const [destination, edge] of Object.entries(registry || {})) { + if (!destination.startsWith(normalizedOld)) continue; + const clonedDestination = `${normalizedNew}${destination.slice(normalizedOld.length)}`; + if (registry[clonedDestination]) continue; + const cloned = typeof structuredClone === "function" ? structuredClone(edge) : JSON.parse(JSON.stringify(edge)); + if (cloned.predecessorAddress?.startsWith(normalizedOld)) { + cloned.predecessorAddress = `${normalizedNew}${cloned.predecessorAddress.slice(normalizedOld.length)}`; + } + additions.push([clonedDestination, cloned]); + } + for (const [destination, edge] of additions) registry[destination] = edge; + return additions.length; +} + +export function reconcileRouteRegistryDestinations(registry, liveAddresses, state, now, graceMs = 1000) { + state.missingSince ??= new Map(); + state.backups ??= new Map(); + let removed = 0; + let restored = 0; + for (const address of liveAddresses) { + state.missingSince.delete(address); + if (!registry[address] && state.backups.has(address)) { + registry[address] = state.backups.get(address); + state.backups.delete(address); + restored++; + } + } + for (const [address, edge] of Object.entries(registry || {})) { + if (liveAddresses.has(address)) continue; + const missingSince = state.missingSince.get(address); + if (missingSince == null) { + state.missingSince.set(address, now); + continue; + } + if (now - missingSince < graceMs) continue; + state.backups.set(address, edge); + state.missingSince.delete(address); + delete registry[address]; + removed++; + } + return { removed, restored }; +} + +export function uniqueHostName(baseName, usedNames) { + return uniqueRoutingName(baseName || "Subgraph", usedNames); +} + +export function detachedHostRouting(value) { + return { ...(value || {}) }; +} + +export function preferredHostRoutingName({ storedName, storedDefinitionName, title, lastAppliedTitle, definitionName }) { + const definitionWasRenamed = Boolean(storedDefinitionName && definitionName && storedDefinitionName !== definitionName); + const legacyDefaultName = !storedDefinitionName && /^New Subgraph(?:_\d+)?$/.test(storedName || title || ""); + if (definitionWasRenamed || (legacyDefaultName && definitionName)) return definitionName; + if (lastAppliedTitle && title && title !== lastAppliedTitle) return title; + return storedName || title || definitionName || "Subgraph"; +} + +export function routingChoiceLabel(number, name) { + const parts = String(number).split("."); + const position = Math.max(1, Number.parseInt(parts[1] || "1", 10) || 1); + const level = Math.max(0, position - 1) + Math.max(0, parts.length - 2); + return `${"\u00a0".repeat(level * 3)}${number}. ${name}`; +} + +export function compareRoutingNumbers(left, right) { + const leftParts = String(left).split(".").map((part) => Number.parseInt(part, 10) || 0); + const rightParts = String(right).split(".").map((part) => Number.parseInt(part, 10) || 0); + const length = Math.max(leftParts.length, rightParts.length); + for (let index = 0; index < length; index++) { + const difference = (leftParts[index] || 0) - (rightParts[index] || 0); + if (difference) return difference; + } + return 0; +} + +export function uniqueRoutingName(baseName, usedNames) { + const base = String(baseName || "Pipe").trim() || "Pipe"; + if (!usedNames.has(base)) return base; + let suffix = 1; + while (usedNames.has(`${base}_${suffix}`)) suffix++; + return `${base}_${suffix}`; +} + +export function routingCollisionOwner(left, right) { + const leftInitialized = Boolean(left?.__bvLastRoutingTitle); + const rightInitialized = Boolean(right?.__bvLastRoutingTitle); + if (leftInitialized !== rightInitialized) return leftInitialized ? left : right; + const graph = left?.graph && left.graph === right?.graph ? left.graph : null; + const nodes = graph?._nodes || graph?.nodes || []; + const leftIndex = nodes.indexOf(left); + const rightIndex = nodes.indexOf(right); + if (leftIndex >= 0 && rightIndex >= 0 && leftIndex !== rightIndex) { + return leftIndex < rightIndex ? left : right; + } + return String(left?.id ?? "") <= String(right?.id ?? "") ? left : right; +} + +export function executionScope(executionId) { + const parts = String(executionId).split(":"); + parts.pop(); + return parts.join(":"); +} + +export function crossScopeDescriptors(descriptors, ownDescriptor) { + const ownPath = ownDescriptor?.hostPath || []; + return (descriptors || []).filter((descriptor) => { + if (!descriptor || descriptor.address === ownDescriptor?.address) return false; + const path = descriptor.hostPath || []; + return path.length !== ownPath.length || path.some((part, index) => part !== ownPath[index]); + }); +} + +export function routingDisplayNumbers(routes) { + const byId = new Map(routes.map((route) => [route.nodeId, route])); + const routeIndexes = new Map(routes.map((route, index) => [route.nodeId, index])); + const routeSort = (left, right) => String(left.name).localeCompare(String(right.name)) || String(left.nodeId).localeCompare(String(right.nodeId)); + const graphOrderSort = (left, right) => (routeIndexes.get(left.nodeId) ?? Number.MAX_SAFE_INTEGER) + - (routeIndexes.get(right.nodeId) ?? Number.MAX_SAFE_INTEGER) || routeSort(left, right); + const rootById = new Map(); + const rootOf = (route, visiting = new Set()) => { + if (rootById.has(route.nodeId)) return rootById.get(route.nodeId); + if (route.mode === "merge" || route.mode !== "follow" || !byId.has(route.predecessorId) || visiting.has(route.nodeId)) { + rootById.set(route.nodeId, route); + return route; + } + visiting.add(route.nodeId); + const root = rootOf(byId.get(route.predecessorId), visiting); + visiting.delete(route.nodeId); + rootById.set(route.nodeId, root); + return root; + }; + routes.forEach((route) => rootOf(route)); + const roots = [...new Map(routes.map((route) => { + const root = rootById.get(route.nodeId); + return [root.nodeId, root]; + })).values()]; + const dependencies = new Map(roots.map((root) => [root.nodeId, new Set()])); + for (const root of roots) { + if (root.mode !== "merge") continue; + for (const sourceId of root.sourceIds || []) { + const source = byId.get(sourceId); + const sourceRoot = source && rootById.get(source.nodeId); + if (sourceRoot && sourceRoot.nodeId !== root.nodeId) dependencies.get(root.nodeId).add(sourceRoot.nodeId); + } + } + const orderedRoots = []; + const emitted = new Set(); + while (orderedRoots.length < roots.length) { + const ready = roots.filter((root) => !emitted.has(root.nodeId) + && [...dependencies.get(root.nodeId)].every((dependency) => emitted.has(dependency))).sort(graphOrderSort); + const next = ready[0] || roots.filter((root) => !emitted.has(root.nodeId)).sort(graphOrderSort)[0]; + emitted.add(next.nodeId); + orderedRoots.push(next); + } + const rootNumbers = new Map(orderedRoots.map((root, index) => [root.nodeId, index + 1])); + const children = new Map(); + for (const route of routes) { + if (route.mode !== "follow" || !byId.has(route.predecessorId)) continue; + const group = children.get(route.predecessorId) || []; + group.push(route); + children.set(route.predecessorId, group); + } + children.forEach((group) => group.sort(routeSort)); + const labels = new Map(); + const labelChildren = (route, tree, depth, branchPath, visiting = new Set()) => { + if (visiting.has(route.nodeId)) return; + visiting.add(route.nodeId); + labels.set(route.nodeId, [tree, depth, ...branchPath].join(".")); + const descendants = children.get(route.nodeId) || []; + descendants.forEach((child, index) => { + if (descendants.length === 1) labelChildren(child, tree, depth + 1, branchPath, visiting); + else labelChildren(child, tree, depth, [...branchPath, index + 1], visiting); + }); + visiting.delete(route.nodeId); + }; + for (const root of orderedRoots) labelChildren(root, rootNumbers.get(root.nodeId), 1, []); + return labels; +} + +export function predecessorChoiceRoutes(routes, destinationId) { + const blocked = new Set(destinationId ? [destinationId] : []); + let changed = true; + while (changed) { + changed = false; + for (const route of routes || []) { + if (blocked.has(route.nodeId)) continue; + const dependsOnBlocked = route.mode === "follow" + ? blocked.has(route.predecessorId) + : route.mode === "merge" && (route.sourceIds || []).some((sourceId) => blocked.has(sourceId)); + if (!dependsOnBlocked) continue; + blocked.add(route.nodeId); + changed = true; + } + } + return (routes || []).filter((route) => !blocked.has(route.nodeId)); +} + +export function promptModeState(descriptors = []) { + const muted = descriptors.filter((descriptor) => descriptor?.node?.mode === 2); + return { + bypassedAddresses: new Set(descriptors.filter((descriptor) => descriptor?.kind === "pipe" && descriptor?.node?.mode === 4) + .map((descriptor) => descriptor.address)), + mutedAddresses: new Set(muted.map((descriptor) => descriptor.address)), + prunedExecutionIds: new Set(muted.map((descriptor) => descriptor.executionId)), + }; +} + +function parseRoute(entry, executionId) { + const raw = entry?.inputs?.[ROUTE_INPUT]; + if (typeof raw !== "string") return null; + try { + const route = JSON.parse(raw); + if (!route?.nodeId) return null; + return { executionId, entry, route, scope: executionScope(executionId) }; + } catch { + throw new Error(`BV Smart Pipe ${executionId}: Routing metadata is invalid.`); + } +} + +export function materializeAddressedPipeLinks(apiPrompt, addressByExecutionId, routeRegistry = {}, modeState = {}) { + const executionByAddress = new Map(); + for (const [executionId, address] of Object.entries(addressByExecutionId || {})) { + if (executionByAddress.has(address)) throw new Error(`Duplicate BV Smart Pipe address: ${address}`); + executionByAddress.set(address, executionId); + } + const bypassedAddresses = modeState.bypassedAddresses || new Set(); + const mutedAddresses = modeState.mutedAddresses || new Set(); + const resolvePredecessor = (destinationAddress, predecessorAddress, visited = new Set()) => { + if (mutedAddresses.has(predecessorAddress)) { + return null; + } + if (bypassedAddresses.has(predecessorAddress)) { + if (visited.has(predecessorAddress)) { + throw new Error(`BV Smart Pipe "${destinationAddress}": Bypass cycle detected at "${predecessorAddress}".`); + } + visited.add(predecessorAddress); + const bypassRoute = routeRegistry?.[predecessorAddress]; + if (!bypassRoute?.predecessorAddress) { + throw new Error(`BV Smart Pipe "${destinationAddress}": Bypassed predecessor "${predecessorAddress}" has no predecessor to pass through.`); + } + return resolvePredecessor(destinationAddress, bypassRoute.predecessorAddress, visited); + } + const predecessorId = executionByAddress.get(predecessorAddress); + if (!predecessorId || !["BV Smart Pipe", "BV Smart Pipe Merge"].includes(apiPrompt?.[predecessorId]?.class_type)) { + throw new Error(`BV Smart Pipe "${destinationAddress}": Cross-scope predecessor "${predecessorAddress}" is missing.`); + } + return predecessorId; + }; + const edges = new Map(); + for (const [destinationAddress, route] of Object.entries(routeRegistry || {})) { + const destinationId = executionByAddress.get(destinationAddress); + if (!destinationId || !route?.predecessorAddress) continue; + const destination = apiPrompt?.[destinationId]; + if (!destination || destination.class_type !== "BV Smart Pipe" || destination.inputs?.pipe != null) continue; + const predecessorId = resolvePredecessor(destinationAddress, route.predecessorAddress); + if (!predecessorId) { + modeState.prunedExecutionIds?.add(destinationId); + continue; + } + edges.set(destinationId, predecessorId); + } + const visiting = new Set(); + const visited = new Set(); + const visit = (executionId) => { + if (visited.has(executionId)) return; + if (visiting.has(executionId)) throw new Error(`BV Smart Pipe "${executionId}": Cross-scope cycle detected.`); + visiting.add(executionId); + const predecessorId = edges.get(executionId); + if (predecessorId) visit(predecessorId); + visiting.delete(executionId); + visited.add(executionId); + }; + edges.forEach((_, destinationId) => visit(destinationId)); + for (const [destinationId, predecessorId] of edges) { + apiPrompt[destinationId].inputs.pipe = [predecessorId, 0]; + } + return apiPrompt; +} + +export function materializeSmartPipeMergeSources(apiPrompt, addressByExecutionId, routeRegistry = {}, modeState = {}) { + const executionByAddress = new Map(Object.entries(addressByExecutionId || {}).map(([executionId, address]) => [address, executionId])); + const mutedAddresses = modeState.mutedAddresses || new Set(); + for (const [destinationAddress, route] of Object.entries(routeRegistry || {})) { + if (route?.kind !== "merge" || !Array.isArray(route.sources)) continue; + const destinationId = executionByAddress.get(destinationAddress); + const destination = apiPrompt?.[destinationId]; + if (!destination || destination.class_type !== "BV Smart Pipe Merge") continue; + for (const source of route.sources) { + if (!source?.key) continue; + if (mutedAddresses.has(source.address)) { + delete destination.inputs[source.key]; + continue; + } + if (source.mode !== "wireless") continue; + if (destination.inputs?.[source.key] != null) continue; + const predecessorId = executionByAddress.get(source.address); + if (!predecessorId || !["BV Smart Pipe", "BV Smart Pipe Merge"].includes(apiPrompt?.[predecessorId]?.class_type)) { + throw new Error(`BV Smart Pipe Merge "${destinationAddress}": Wireless source "${source.address || source.label || source.key}" is missing.`); + } + destination.inputs[source.key] = [predecessorId, 0]; + } + destination.inputs.bv_smart_pipe_merge_json = JSON.stringify(route.sources.filter((source) => !mutedAddresses.has(source.address))); + if (route.sources.length && route.sources.every((source) => mutedAddresses.has(source.address))) { + modeState.prunedExecutionIds?.add(destinationId); + } + } + return apiPrompt; +} + +function resolveLocalPredecessor(record, byScope, modeState = {}, visited = new Set()) { + const key = `${record.scope}\u0000${record.route.predecessorId || ""}`; + const predecessor = byScope.get(key); + if (predecessor) return predecessor; + if (modeState.mutedScopedNodeIds?.has(key)) { + return null; + } + if (modeState.bypassedScopedNodeIds?.has(key)) { + if (visited.has(key)) throw new Error(`BV Smart Pipe "${record.route.name}": Bypass cycle detected.`); + visited.add(key); + const explicitPredecessor = modeState.bypassPredecessorsByScopedNodeId?.get(key); + if (explicitPredecessor) return explicitPredecessor; + const route = modeState.routesByScopedNodeId?.get(key); + if (!route?.predecessorId) { + throw new Error(`BV Smart Pipe "${record.route.name}": Bypassed predecessor has no predecessor to pass through.`); + } + return resolveLocalPredecessor({ ...record, route }, byScope, modeState, visited); + } + throw new Error(`BV Smart Pipe "${record.route.name}": Wireless predecessor is missing.`); +} + +export function validateWirelessRecords(records, modeState = {}) { + const byScope = new Map(); + for (const record of records) { + const key = `${record.scope}\u0000${record.route.nodeId}`; + if (byScope.has(key)) throw new Error(`Duplicate BV Smart Pipe ID for "${record.route.name || record.route.nodeId}".`); + byScope.set(key, record); + } + + for (const record of records) { + if (record.entry.inputs?.pipe != null || record.route.mode !== "follow") continue; + resolveLocalPredecessor(record, byScope, modeState); + } + + const visiting = new Set(); + const visited = new Set(); + const visit = (record) => { + const key = `${record.scope}\u0000${record.route.nodeId}`; + if (visited.has(key) || record.entry.inputs?.pipe != null || record.route.mode !== "follow") return; + if (visiting.has(key)) throw new Error(`BV Smart Pipe "${record.route.name}": Wireless cycle detected.`); + visiting.add(key); + const predecessor = byScope.get(`${record.scope}\u0000${record.route.predecessorId}`); + if (predecessor) visit(predecessor); + visiting.delete(key); + visited.add(key); + }; + records.forEach(visit); + return byScope; +} + +export function materializeWirelessPipeLinks(apiPrompt, modeState = {}) { + const records = Object.entries(apiPrompt || {}) + .filter(([, entry]) => entry?.class_type === "BV Smart Pipe") + .map(([executionId, entry]) => parseRoute(entry, executionId)) + .filter(Boolean); + const byScope = validateWirelessRecords(records, modeState); + for (const record of records) { + if (record.entry.inputs?.pipe != null || record.route.mode !== "follow") continue; + const predecessor = resolveLocalPredecessor(record, byScope, modeState); + if (!predecessor) modeState.prunedExecutionIds?.add(record.executionId); + else record.entry.inputs.pipe = [predecessor.executionId, 0]; + } + return apiPrompt; +} + +export function prunePromptBranches(apiPrompt, initialExecutionIds = new Set()) { + const pruned = new Set([...initialExecutionIds].map(String)); + let changed = true; + while (changed) { + changed = false; + for (const [executionId, entry] of Object.entries(apiPrompt || {})) { + if (pruned.has(executionId)) continue; + const dependsOnPruned = Object.values(entry?.inputs || {}).some((value) => Array.isArray(value) && pruned.has(String(value[0]))); + if (!dependsOnPruned) continue; + pruned.add(executionId); + changed = true; + } + } + for (const executionId of pruned) delete apiPrompt?.[executionId]; + return apiPrompt; +} + +export function validateMaterializedPipeGraph(apiPrompt) { + const pipeEntries = new Map(Object.entries(apiPrompt || {}).filter(([, entry]) => ["BV Smart Pipe", "BV Smart Pipe Merge"].includes(entry?.class_type))); + const visiting = new Set(); + const visited = new Set(); + const visit = (executionId) => { + if (visited.has(executionId)) return; + if (visiting.has(executionId)) throw new Error(`BV Smart Pipe "${executionId}": Cycle detected across wired and wireless connections.`); + visiting.add(executionId); + const inputs = pipeEntries.get(executionId)?.inputs || {}; + for (const [name, value] of Object.entries(inputs)) { + if (name !== "pipe" && !/^pipe_\d+$/.test(name)) continue; + const predecessorId = Array.isArray(value) ? String(value[0]) : null; + if (predecessorId && pipeEntries.has(predecessorId)) visit(predecessorId); + } + visiting.delete(executionId); + visited.add(executionId); + }; + pipeEntries.forEach((_, executionId) => visit(executionId)); + return apiPrompt; +} + +export function remapPromptOutputLinks(apiPrompt, outputIndexMaps) { + for (const entry of Object.values(apiPrompt || {})) { + for (const [inputName, value] of Object.entries(entry?.inputs || {})) { + if (!Array.isArray(value) || value.length < 2) continue; + const map = outputIndexMaps?.[String(value[0])]; + const remapped = map?.[String(value[1])]; + if (remapped == null || remapped === value[1]) continue; + entry.inputs[inputName] = [value[0], remapped]; + } + } + return apiPrompt; +} diff --git a/js/bv_smart_pipe_slots.js b/js/bv_smart_pipe_slots.js new file mode 100644 index 0000000..ce8c0d3 --- /dev/null +++ b/js/bv_smart_pipe_slots.js @@ -0,0 +1,95 @@ +export function updateSmartPipePort(port, label, type, slotId) { + if (port.label === label && port.localized_name === label && port.type === type && port.bvSlotId === slotId) return port; + return { ...port, label, localized_name: label, type, bvSlotId: slotId }; +} + +export function moveMarkedPortToEnd(ports, predicate) { + const index = ports?.findIndex(predicate) ?? -1; + if (index < 0 || index === ports.length - 1) return ports; + ports.push(ports.splice(index, 1)[0]); + return ports; +} + +export function reusableSmartPipePortIndex(ports, { slotId, portName, label, type }) { + let index = ports?.findIndex((item) => item.bvSlotId === slotId) ?? -1; + if (index >= 0) return index; + const candidates = (ports || []).map((item, candidateIndex) => ({ item, candidateIndex })).filter(({ item }) => + !item.bvSlotId && item.name !== "pipe" && !item.bvAddSlot && smartPipeTypesAreCompatible(item.type, type) + && (item.name === portName || item.label === label || item.localized_name === label || item.name === label)); + const connected = candidates.find(({ item }) => item.link != null || Boolean(item.links?.length)); + if (connected) return connected.candidateIndex; + const exact = candidates.find(({ item }) => item.name === portName); + if (exact) return exact.candidateIndex; + index = candidates[0]?.candidateIndex ?? -1; + if (index < 0) index = ports?.findIndex((item) => !item.bvSlotId && item.name !== "pipe" && !item.bvAddSlot + && (item.label === label || item.localized_name === label || item.name === label) + && smartPipeTypesAreCompatible(item.type, type)) ?? -1; + return index; +} + +function smartPipeTypesAreCompatible(left, right) { + const leftTypes = String(left || "*").split(",").map((value) => value.trim()).filter(Boolean); + const rightTypes = String(right || "*").split(",").map((value) => value.trim()).filter(Boolean); + return leftTypes.includes("*") || rightTypes.includes("*") || leftTypes.some((candidate) => rightTypes.includes(candidate)); +} + +export function retainedMissingSlots(previous, upstreamIds, isUsed) { + return previous.filter((slot) => !upstreamIds.has(slot.id) && isUsed(slot)); +} + +export function promoteInheritedSlot(state, slotId, inferredType) { + const inherited = state.inheritedSlots?.find((slot) => slot.id === slotId); + if (!inherited) return null; + const local = { + ...inherited, + type: inherited.type === "*" && inferredType && inferredType !== "*" ? inferredType : inherited.type || inferredType || "*", + showInput: true, + showOutput: inherited.showOutput ?? false, + missing: false, + }; + state.inheritedSlots = state.inheritedSlots.filter((slot) => slot.id !== slotId); + state.localSlots.push(local); + return local; +} + +export function promoteConnectedInheritedSlots(state, connectedSlotIds) { + const promoted = []; + for (const slot of [...(state.inheritedSlots || [])]) { + if (connectedSlotIds.has(slot.id)) promoted.push(promoteInheritedSlot(state, slot.id)); + } + return promoted.filter(Boolean); +} + +export function smartPipeSlotName(value, fallback = "new_slot") { + const normalized = String(value || "") + .trim() + .replace(/[^a-zA-Z0-9]+/g, "_") + .replace(/^_+|_+$/g, "") + .toLowerCase(); + return normalized || fallback; +} + +export function uniqueSmartPipeSlotName(base, usedNames) { + if (!usedNames.has(base)) return base; + let suffix = 2; + while (usedNames.has(`${base}_${suffix}`)) suffix++; + return `${base}_${suffix}`; +} + +export function resolveLocalSlotNameCollisions(localSlots, reservedNames) { + const usedNames = new Set(reservedNames); + const renamed = []; + for (const slot of localSlots) { + const original = slot.name; + slot.name = uniqueSmartPipeSlotName(original, usedNames); + usedNames.add(slot.name); + if (slot.name !== original) renamed.push({ id: slot.id, from: original, to: slot.name }); + } + return renamed; +} + +export function nextFreeOrdinal(usedOrdinals, start, maximum) { + let ordinal = Math.max(1, start); + while (ordinal <= maximum && usedOrdinals.has(ordinal)) ordinal++; + return ordinal <= maximum ? ordinal : undefined; +} diff --git a/js/bv_subgraph_divider.js b/js/bv_subgraph_divider.js index 164ebe6..462a495 100644 --- a/js/bv_subgraph_divider.js +++ b/js/bv_subgraph_divider.js @@ -21,12 +21,14 @@ function patchDivider(node) { const thickW = getWidget(node, "thickness"); if (!node || !thickW) return; + node.__bvPresentationWidget = thickW; + // Patch per widget instance; allow re-patching if rebuilt if (!thickW.__bvDividerPatched) { thickW.__bvDividerPatched = true; thickW.__bvNode = node; - thickW.type = "BV_DIVIDER"; + thickW.__bvPresentationType = "BV_DIVIDER"; thickW.options = thickW.options || {}; thickW.options.serialize = true; diff --git a/js/bv_subgraph_dynamic_combo.js b/js/bv_subgraph_dynamic_combo.js index e59e57e..4b0030e 100644 --- a/js/bv_subgraph_dynamic_combo.js +++ b/js/bv_subgraph_dynamic_combo.js @@ -1,160 +1,77 @@ import { app } from "../../scripts/app.js"; +import { normalizeDynamicComboSelection, parseDynamicComboOptions } from "./bv_dynamic_combo_model.js"; -/** - * BV Util Dynamic Combo - * - Replaces a STRING widget named "value" with a real "combo" widget. - * - Combo options are taken from a multiline STRING widget named "options". - * - Works also when node is exposed via subgraph (hooks onNodeCreated + onConfigure). - */ +const NODE_CLASS = "BV Dynamic Combo"; -function parseOptions(text) { - const lines = (text ?? "") - .split(/\r?\n/) - .map((s) => s.trim()) - .filter(Boolean); +function valueWidgetFor(node) { + const visible = node.widgets?.find((widget) => widget.name === "value"); + if (visible) return visible; + const input = node.inputs?.find((candidate) => candidate.name === "value"); + return node.getWidgetFromSlot?.(input) ?? null; +} - // unique, order-preserving - const seen = new Set(); - const out = []; - for (const l of lines) { - if (!seen.has(l)) { - seen.add(l); - out.push(l); +function upgrade(node) { + let valueWidget = valueWidgetFor(node); + const optionsWidget = node.widgets?.find((widget) => widget.name === "options"); + if (!valueWidget || !optionsWidget) return; + + if (valueWidget.type !== "combo") { + const previousValue = valueWidget.value; + node.removeWidget?.(valueWidget); + const combo = node.addWidget("combo", "value", previousValue, null, { values: parseDynamicComboOptions(optionsWidget.value) }); + valueWidget = combo; + } + const combo = valueWidget; + combo.options ??= {}; + combo.options.values = parseDynamicComboOptions(optionsWidget.value); + combo.value = normalizeDynamicComboSelection(combo.value, combo.options.values); + combo.options.serialize = true; + + if (!optionsWidget.__bvDynamicComboHooked) { + optionsWidget.__bvDynamicComboHooked = true; + const originalCallback = optionsWidget.callback; + optionsWidget.callback = function (value) { + originalCallback?.apply(this, arguments); + const current = valueWidgetFor(node); + if (current) { + const values = parseDynamicComboOptions(value); + current.options ??= {}; + current.options.values = values; + const normalized = normalizeDynamicComboSelection(current.value, values); + if (normalized !== current.value) { + current.value = normalized; + current.callback?.(normalized); } - } - - return out.length ? out : [""]; -} - -function isMultilineStringWidget(w) { - return ( - w && - w.type === "customtext" - ); -} - -function isStringValueWidget(w) { - // value is declared as STRING in python -> litegraph widget is usually type "string" - return w && w.name === "value" && (w.type === "string" || w.type === "text"); -} - -function findWidgets(node) { - const widgets = node?.widgets || []; - const valueWidget = widgets.find((w) => w?.name === "value"); - const optionsWidget = widgets.find((w) => w?.name === "options"); - return { valueWidget, optionsWidget }; -} - -function replaceWidget(node, oldWidget, newWidget) { - const idx = node.widgets.indexOf(oldWidget); - if (idx >= 0) node.widgets.splice(idx, 1, newWidget); -} - -function ensurePropertiesSync(node, key, val) { - node.properties = node.properties || {}; - node.properties[key] = val; -} - -function ensureComboValid(comboWidget) { - const values = comboWidget?.options?.values || []; - if (!values.includes(comboWidget.value)) { - comboWidget.value = values[0] ?? ""; - } -} - -function upgradeDynamicCombo(node) { - if (!node || !node.widgets) return; - - // Avoid patching twice - if (node.__bvDynamicComboPatched) return; - - const { valueWidget, optionsWidget } = findWidgets(node); - if (!valueWidget || !optionsWidget) return; - - // We only patch if: - // - options is multiline string (the editor list) - // - value is a string widget (declared STRING in python) - if (!isMultilineStringWidget(optionsWidget)) return; - if (!isStringValueWidget(valueWidget)) return; - - const values = parseOptions(optionsWidget.value); - - // Create a REAL combo widget - const comboWidget = node.addWidget( - "combo", - "value", - valueWidget.value ?? (values[0] ?? ""), - (v) => { - ensurePropertiesSync(node, "value", v); - }, - { values } - ); - - - // Replace old string widget with our combo widget - replaceWidget(node, valueWidget, comboWidget); - - // Sync properties & validate selection - ensureComboValid(comboWidget); - ensurePropertiesSync(node, "value", comboWidget.value); - - // Update combo values when options change - const originalOptionsCb = optionsWidget.callback; - optionsWidget.callback = (v) => { - originalOptionsCb?.(v); - - const newValues = parseOptions(v); - comboWidget.options.values = newValues; - - ensureComboValid(comboWidget); - ensurePropertiesSync(node, "value", comboWidget.value); - - node.setDirtyCanvas(true, true); + window.dispatchEvent(new CustomEvent("bv-dynamic-combo-options-changed", { + detail: { sourceNode: node, values }, + })); + } + node.setDirtyCanvas?.(true, true); }; - - node.__bvDynamicComboPatched = true; - node.setDirtyCanvas(true, true); + } } app.registerExtension({ - name: "bv_nodepack.bv_util_dynamic_combo", - - async setup() { - // Patch existing nodes (e.g., after reload) - try { - const graph = app?.graph; - const nodes = graph?._nodes || graph?.nodes || []; - for (const n of nodes) upgradeDynamicCombo(n); - } catch (e) { - // ignore - } - }, - - async beforeRegisterNodeDef(nodeType, nodeData) { - // Patch ALL nodes (important for subgraph-exposed nodes whose name differs) - const origCreated = nodeType.prototype.onNodeCreated; - nodeType.prototype.onNodeCreated = function () { - const r = origCreated?.apply(this, arguments); - try { - upgradeDynamicCombo(this); - } catch (e) { - // ignore - } - return r; - }; - - // Needed for: - // - Loading a workflow - // - Subgraph expose rebuilds - const origConfigure = nodeType.prototype.onConfigure; - nodeType.prototype.onConfigure = function () { - const r = origConfigure?.apply(this, arguments); - try { - upgradeDynamicCombo(this); - } catch (e) { - // ignore - } - return r; - }; - }, + name: "bv_nodepack.dynamic_combo", + async beforeRegisterNodeDef(nodeType, nodeData) { + if (nodeData.name !== NODE_CLASS) return; + const originalCreated = nodeType.prototype.onNodeCreated; + nodeType.prototype.onNodeCreated = function () { + const result = originalCreated?.apply(this, arguments); + upgrade(this); + return result; + }; + const originalConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const result = originalConfigure?.apply(this, arguments); + upgrade(this); + return result; + }; + const originalConnectionsChange = nodeType.prototype.onConnectionsChange; + nodeType.prototype.onConnectionsChange = function () { + const result = originalConnectionsChange?.apply(this, arguments); + upgrade(this); + return result; + }; + }, }); diff --git a/js/bv_subgraph_heading.js b/js/bv_subgraph_heading.js index c79eed4..702dd32 100644 --- a/js/bv_subgraph_heading.js +++ b/js/bv_subgraph_heading.js @@ -24,13 +24,20 @@ function patchHeading(node) { if (!node || !valueW) return; + // ComfyUI removes promoted/exposed widgets from node.widgets. Keep the + // presentation object reachable so a Subgraph host can still project it. + node.__bvPresentationWidget = valueW; + // Allow re-patching if widgets were rebuilt: // Only mark patched on the widget instance itself if (!valueW.__bvHeadingPatched) { valueW.__bvHeadingPatched = true; valueW.__bvNode = node; - valueW.type = "BV_HEADING"; + // Keep the native text widget type. Subgraph proxy widgets are rebuilt + // from this type on workflow load; replacing it with BV_HEADING makes + // ComfyUI create a non-editable/empty custom proxy. + valueW.__bvPresentationType = "BV_HEADING"; valueW.options = valueW.options || {}; valueW.options.serialize = true; diff --git a/js/bv_subgraph_layout.js b/js/bv_subgraph_layout.js new file mode 100644 index 0000000..9c7b534 --- /dev/null +++ b/js/bv_subgraph_layout.js @@ -0,0 +1,128 @@ +import { app } from "../../scripts/app.js"; +import { projectSubgraphUIPresentation, synchronizeDynamicComboHost } from "./bv_subgraph_ui_projection.js"; + +const UI_CLASSES = new Set(["BV Subgraph Heading", "BV Subgraph Spacer", "BV Subgraph Divider", "BV Dynamic Combo"]); + +function id() { + return globalThis.crypto?.randomUUID?.() ?? `bv-layout-${Date.now()}-${Math.random().toString(16).slice(2)}`; +} + +function ensureIdentity(node) { + node.properties ??= {}; + const nodes = node.graph?._nodes || node.graph?.nodes || []; + const duplicate = nodes.some((candidate) => candidate !== node && candidate.properties?.bvLayoutId === node.properties.bvLayoutId); + if (!node.properties.bvLayoutId || duplicate) node.properties.bvLayoutId = id(); + if (!Number.isFinite(node.properties.bvLayoutOrder)) { + const orders = nodes.map((candidate) => candidate.properties?.bvLayoutOrder).filter(Number.isFinite); + node.properties.bvLayoutOrder = orders.length ? Math.max(...orders) + 1 : 0; + } +} + +function refreshHost(host) { + const project = () => projectSubgraphUIPresentation(host); + queueMicrotask(() => requestAnimationFrame(() => { + project(); + // Subgraph proxy widgets are finalized one render pass after graph + // configuration. Reapply to the authoritative proxies, not the temporary + // objects present during nodeCreated/configure. + requestAnimationFrame(project); + })); + // Workflow restore finalizes promoted proxies asynchronously after + // afterConfigureGraph (and later than an ordinary widget edit). Use a bounded + // stabilization window so the final proxy receives the presentation too. + for (const delay of [50, 150, 400, 1000]) setTimeout(project, delay); +} + +function attachHost(host) { + const isSubgraphHost = host?.isSubgraphNode?.() || Boolean(host?.subgraph); + if (!isSubgraphHost) return; + if (host.onDrawBackground !== host.__bvSubgraphPresentationRenderGuard) { + const originalDrawBackground = host.onDrawBackground; + const renderGuard = function () { + projectSubgraphUIPresentation(this); + return originalDrawBackground?.apply(this, arguments); + }; + host.__bvSubgraphPresentationRenderGuard = renderGuard; + host.onDrawBackground = renderGuard; + } + if (host.__bvSubgraphUIPresentationAttached) { + refreshHost(host); + return; + } + host.__bvSubgraphUIPresentationAttached = true; + const refresh = () => refreshHost(host); + for (const eventName of ["widget-promoted", "widget-demoted", "input-added", "removing-input", "configured"]) { + host.subgraph?.events?.addEventListener?.(eventName, refresh); + } + refreshHost(host); +} + +function attachGraph(graph, visited = new Set()) { + if (!graph || visited.has(graph)) return; + visited.add(graph); + for (const node of graph._nodes || graph.nodes || []) { + if (!node?.isSubgraphNode?.()) continue; + attachHost(node); + attachGraph(node.subgraph, visited); + } +} + +function synchronizeDynamicComboGraph(graph, sourceNode, values, visited = new Set()) { + if (!graph || visited.has(graph)) return; + visited.add(graph); + for (const node of graph._nodes || graph.nodes || []) { + if (!node?.isSubgraphNode?.()) continue; + synchronizeDynamicComboHost(node, sourceNode, values); + synchronizeDynamicComboGraph(node.subgraph, sourceNode, values, visited); + } +} + +app.registerExtension({ + name: "bv_nodepack.subgraph_layout_identity", + async nodeCreated(node) { + if (UI_CLASSES.has(node.comfyClass)) ensureIdentity(node); + if (node?.isSubgraphNode?.()) attachHost(node); + }, + setup() { + // setup() runs before app.graph is guaranteed to exist. Accessing the + // throwing getter here aborts the extension and prevents every listener + // below from being installed. + app.canvas?.addEventListener?.("litegraph:set-graph", (event) => attachGraph((event.detail || event).newGraph)); + app.canvas?.addEventListener?.("subgraph-opened", (event) => { + const detail = event.detail || event; + attachHost(detail.fromNode); + attachGraph(detail.subgraph); + }); + window.addEventListener("bv-dynamic-combo-options-changed", (event) => { + const { sourceNode, values } = event.detail || {}; + const rootGraph = sourceNode?.graph?.rootGraph; + if (sourceNode && Array.isArray(values)) synchronizeDynamicComboGraph(rootGraph, sourceNode, values); + }); + + // Workflow tabs can replace the active graph without configuring it again. + // Keep a small fallback around the official canvas method as well as the + // event above so already-loaded tab graphs are projected immediately. + const canvas = app.canvas; + if (canvas?.setGraph && !canvas.__bvSubgraphSetGraphWrapped) { + canvas.__bvSubgraphSetGraphWrapped = true; + const originalSetGraph = canvas.setGraph; + canvas.setGraph = function (graph) { + const result = originalSetGraph.apply(this, arguments); + attachGraph(graph); + return result; + }; + } + }, + afterConfigureGraph() { + attachGraph(app.graph); + }, + async beforeRegisterNodeDef(nodeType, nodeData) { + if (!UI_CLASSES.has(nodeData.name)) return; + const originalConfigure = nodeType.prototype.onConfigure; + nodeType.prototype.onConfigure = function () { + const result = originalConfigure?.apply(this, arguments); + ensureIdentity(this); + return result; + }; + }, +}); diff --git a/js/bv_subgraph_spacer.js b/js/bv_subgraph_spacer.js index c738832..dc8767b 100644 --- a/js/bv_subgraph_spacer.js +++ b/js/bv_subgraph_spacer.js @@ -21,10 +21,12 @@ function patchSpacer(node) { const hW = getWidget(node, "height"); if (!node || !hW || hW.__bvSpacerPatched) return; + node.__bvPresentationWidget = hW; + hW.__bvSpacerPatched = true; hW.__bvNode = node; - hW.type = "BV_SPACER"; + hW.__bvPresentationType = "BV_SPACER"; hW.options = hW.options || {}; hW.options.serialize = true; diff --git a/js/bv_subgraph_ui_projection.js b/js/bv_subgraph_ui_projection.js new file mode 100644 index 0000000..092905e --- /dev/null +++ b/js/bv_subgraph_ui_projection.js @@ -0,0 +1,298 @@ +const PRESENTATION_TYPES = new Set(["BV_HEADING", "BV_SPACER", "BV_DIVIDER"]); +import { normalizeDynamicComboSelection } from "./bv_dynamic_combo_model.js"; +const PRESENTATION_NODE_TYPES = new Map([ + ["BV Subgraph Heading", "BV_HEADING"], + ["BV Subgraph Spacer", "BV_SPACER"], + ["BV Subgraph Divider", "BV_DIVIDER"], +]); +const PRESENTATION_INPUT_NAMES = new Map([ + ["BV_HEADING", "Header"], + ["BV_DIVIDER", "Divider"], + ["BV_SPACER", "Spacer"], +]); + +function escapeRegExp(value) { + return String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +function migratePresentationInputName(host, input, inputIndex, presentation) { + const desiredBase = PRESENTATION_INPUT_NAMES.get(presentation.presentationType); + const sourceName = presentation.sourceInput?.name; + const subgraphInput = input?._subgraphSlot ?? host.subgraph?.inputs?.[inputIndex]; + if (!desiredBase || !sourceName || !subgraphInput || typeof host.subgraph?.renameInput !== "function") return; + + const currentName = String(subgraphInput.name ?? input?.name ?? ""); + // Preserve deliberate user names. ComfyUI-generated collision suffixes of + // the original technical name still qualify for migration. + const generatedName = new RegExp(`^${escapeRegExp(sourceName)}(?:_\\d+)?$`); + if (!generatedName.test(currentName)) return; + + const usedNames = new Set((host.subgraph.inputs || []) + .filter((candidate) => candidate !== subgraphInput) + .map((candidate) => candidate?.name) + .filter(Boolean)); + let desiredName = desiredBase; + for (let suffix = 1; usedNames.has(desiredName); suffix++) desiredName = `${desiredBase}_${suffix}`; + if (currentName !== desiredName) host.subgraph.renameInput(subgraphInput, desiredName); +} + +function presentationTypeFor(sourceNode, widget) { + const widgetType = widget?.__bvPresentationType ?? widget?.type; + if (PRESENTATION_TYPES.has(widgetType)) return widgetType; + return PRESENTATION_NODE_TYPES.get(sourceNode?.comfyClass) + ?? PRESENTATION_NODE_TYPES.get(sourceNode?.type) + ?? null; +} + +function sourcePresentationFor(host, input, inputIndex) { + const resolvedConnections = host.resolveSubgraphInputLinks?.(inputIndex) || []; + for (const resolved of resolvedConnections) { + const presentation = presentationFromResolved(resolved); + if (presentation) return presentation; + } + + // Legacy hosts attached the definition slot directly to the public input. + // Current ComfyUI keeps it in the subgraph definition at the same index. + const subgraphSlot = input?._subgraphSlot + ?? host.subgraph?.inputs?.[inputIndex] + ?? host.subgraph?.inputs?.find((slot) => slot?.name === input?.name); + if (!subgraphSlot?.linkIds?.length) return null; + for (const linkId of subgraphSlot.linkIds) { + const link = host.subgraph?.getLink?.(linkId); + const resolved = link?.resolve?.(host.subgraph); + const presentation = presentationFromResolved(resolved); + if (presentation) return presentation; + } + return null; +} + +function resolvedInputConnections(host, input, inputIndex) { + const resolved = [...(host.resolveSubgraphInputLinks?.(inputIndex) || [])]; + if (resolved.length) return resolved; + const subgraphSlot = input?._subgraphSlot ?? host.subgraph?.inputs?.[inputIndex]; + for (const linkId of subgraphSlot?.linkIds || []) { + const connection = host.subgraph?.getLink?.(linkId)?.resolve?.(host.subgraph); + if (connection) resolved.push(connection); + } + return resolved; +} + +export function synchronizeDynamicComboHost(host, sourceNode, values) { + let synchronized = 0; + for (const [inputIndex, input] of (host?.inputs || []).entries()) { + const matchesSource = resolvedInputConnections(host, input, inputIndex) + .some((connection) => connection?.inputNode === sourceNode && connection?.input?.name === "value"); + if (!matchesSource) continue; + const target = host.getWidgetFromSlot?.(input); + if (!target) continue; + target.options ??= {}; + target.options.values = [...values]; + const normalized = normalizeDynamicComboSelection(target.value, values); + if (normalized !== target.value) { + target.value = normalized; + target.callback?.(normalized); + } + host.setDirtyCanvas?.(true, true); + host.graph?.setDirtyCanvas?.(true, true); + synchronized++; + } + return synchronized; +} + +function presentationFromResolved(resolved) { + const sourceNode = resolved?.inputNode; + const sourceInput = resolved?.input; + if (!sourceNode || !sourceInput) return null; + if (sourceNode.isSubgraphNode?.()) projectSubgraphUIPresentation(sourceNode); + const widget = sourceNode.getWidgetFromSlot?.(sourceInput) + || sourceNode.__bvPresentationWidget; + const presentationType = presentationTypeFor(sourceNode, widget); + return widget && presentationType + ? { widget, sourceNode, sourceInput, presentationType } + : null; +} + +function presentationKey(sourceNode, sourceInput, input) { + const identity = sourceNode?.properties?.bvLayoutId ?? sourceNode?.id ?? "presentation"; + return `${identity}:${sourceInput?.name ?? input?.name ?? "value"}`; +} + +function reprojectAfterWidgetSync(host) { + const nextFrame = globalThis.requestAnimationFrame ?? ((callback) => setTimeout(callback, 0)); + queueMicrotask(() => nextFrame(() => { + projectSubgraphUIPresentation(host); + nextFrame(() => projectSubgraphUIPresentation(host)); + })); + setTimeout(() => projectSubgraphUIPresentation(host), 100); +} + +function createProjectedWidget(host, input, source, key, presentationType) { + host.properties ??= {}; + host.properties.bvSubgraphUIValues ??= {}; + const saved = host.properties.bvSubgraphUIValues[key]; + const initial = saved === undefined ? source.value : saved; + host.properties.bvSubgraphUIValues[key] = initial; + const callback = (value) => { + host.properties.bvSubgraphUIValues[key] = value; + host.setDirtyCanvas?.(true, true); + host.graph?.setDirtyCanvas?.(true, true); + }; + const editable = presentationType === "BV_HEADING"; + const descriptor = { + name: input.name, + type: editable ? "text" : source.type, + value: initial, + callback, + options: { serialize: true }, + }; + const target = editable + ? host.addWidget?.("text", input.name, initial, callback, descriptor.options) + : host.addCustomWidget?.(descriptor); + if (!target) return null; + target.__bvSyntheticPresentation = true; + target.__bvPresentationKey = key; + return target; +} + +export function projectSubgraphUIPresentation(host, visited = new Set()) { + if (!host || visited.has(host)) return 0; + visited.add(host); + let projected = 0; + let changed = false; + for (const [inputIndex, input] of (host.inputs || []).entries()) { + const presentation = sourcePresentationFor(host, input, inputIndex); + if (!presentation) continue; + const source = presentation.widget; + const presentationType = presentation.presentationType; + migratePresentationInputName(host, input, inputIndex, presentation); + const key = presentationKey(presentation.sourceNode, presentation.sourceInput, input); + const slotWidget = host.getWidgetFromSlot?.(input); + // Current ComfyUI owns promoted proxy widgets through the input slot. Such + // a proxy may intentionally not be present in host.widgets; replacing it + // with a synthetic widget makes ComfyUI remove the replacement during its + // next synchronization pass and also loses the proxy's native editor. + const target = slotWidget + || host.widgets?.find((widget) => widget.widgetId && widget.widgetId === input.widgetId) + || host.widgets?.find((widget) => widget.__bvPresentationKey === key) + || createProjectedWidget(host, input, source, key, presentationType); + if (!target) continue; + // Modern ComfyUI widgets expose type as a getter-only property. Their + // renderer already honours a custom draw/computeSize implementation, so + // changing the type is both unnecessary and invalid. + if (target.draw !== source.draw) { + target.draw = source.draw; + changed = true; + } + const projectedComputeSize = presentationType === "BV_SPACER" && typeof source.computeSize === "function" + ? (target.__bvSpacerComputeSource === source.computeSize && target.__bvSpacerComputeSize) + || function (width) { + const previousValue = source.value; + source.value = this.value; + try { + return source.computeSize.call(source, width); + } finally { + source.value = previousValue; + } + } + : source.computeSize; + if (presentationType === "BV_SPACER") { + target.__bvSpacerComputeSource = source.computeSize; + target.__bvSpacerComputeSize = projectedComputeSize; + if (!target.__bvSpacerCallback || target.callback !== target.__bvSpacerCallback) { + const originalCallback = target.callback; + const spacerCallback = function (value) { + this.value = value; + const result = originalCallback?.apply(this, arguments); + host.expandToFitContent?.(); + const computedSize = host.computeSize?.(); + if (computedSize) host.setSize?.(computedSize); + host.setDirtyCanvas?.(true, true); + host.graph?.setDirtyCanvas?.(true, true); + return result; + }; + target.callback = spacerCallback; + target.__bvSpacerCallback = spacerCallback; + changed = true; + } + } + if (target.computeSize !== projectedComputeSize) { + target.computeSize = projectedComputeSize; + changed = true; + } + if (typeof target.drawWidget === "function" && typeof source.draw === "function") { + if (target.drawWidget !== target.__bvProjectedDrawWidget || target.__bvProjectedDrawSource !== source.draw) { + const projectedDrawWidget = target.__bvProjectedDrawSource === source.draw && target.__bvProjectedDrawWidget + ? target.__bvProjectedDrawWidget + : function (ctx, options = {}) { + const width = options.width ?? this.width ?? host.size?.[0] ?? 220; + const height = this.height ?? this.computeSize?.(width)?.[1] ?? 24; + return source.draw.call(this, ctx, host, width, this.y ?? 0, height, !options.showText); + }; + target.drawWidget = projectedDrawWidget; + target.__bvProjectedDrawWidget = projectedDrawWidget; + target.__bvProjectedDrawSource = source.draw; + changed = true; + } + } + if (typeof source.computeSize === "function") { + if (target.computeLayoutSize !== target.__bvProjectedLayout || target.__bvProjectedLayoutSource !== source.computeSize) { + const projectedLayout = target.__bvProjectedLayoutSource === source.computeSize && target.__bvProjectedLayout + ? target.__bvProjectedLayout + : function () { + const [minWidth, minHeight] = this.computeSize(this.width ?? host.size?.[0] ?? 220); + return { minWidth, minHeight }; + }; + target.computeLayoutSize = projectedLayout; + target.__bvProjectedLayout = projectedLayout; + target.__bvProjectedLayoutSource = source.computeSize; + changed = true; + } + } + if (target.__bvPresentationType !== presentationType) changed = true; + target.__bvPresentationType = presentationType; + target.__bvNode = source.__bvNode; + target.__bvProjectedFrom = source; + target.options ??= {}; + if (target.options.serialize !== true) { + target.options.serialize = true; + changed = true; + } + if (presentationType === "BV_HEADING") { + if (target.onClick !== target.__bvHeadingEditor || target.__bvHeadingEditorKey !== key) { + const headingEditor = function ({ e, node, canvas }) { + canvas?.prompt?.(input.label || input.name || "Heading", String(this.value ?? ""), (value) => { + this.value = String(value ?? ""); + host.properties ??= {}; + host.properties.bvSubgraphUIValues ??= {}; + host.properties.bvSubgraphUIValues[key] = this.value; + this.callback?.(this.value, canvas, node, undefined, e); + // The promoted proxy stores an instance value, while the internal + // widget remains the definition fallback used after demotion. + // Keep both aligned so disconnecting the exposure does not restore + // the original default heading. + source.value = this.value; + presentation.sourceNode?.setDirtyCanvas?.(true, true); + presentation.sourceNode?.graph?.setDirtyCanvas?.(true, true); + host.setDirtyCanvas?.(true, true); + host.graph?.setDirtyCanvas?.(true, true); + reprojectAfterWidgetSync(host); + }, e, false); + }; + target.onClick = headingEditor; + target.__bvHeadingEditor = headingEditor; + target.__bvHeadingEditorKey = key; + changed = true; + } + } + host.serialize_widgets = true; + projected++; + } + if (projected && changed) { + host.expandToFitContent?.(); + const computedSize = host.computeSize?.(); + if (computedSize) host.setSize?.(computedSize); + host.setDirtyCanvas?.(true, true); + host.graph?.setDirtyCanvas?.(true, true); + } + return projected; +} diff --git a/py/nodes/bv_control_center.py b/py/nodes/bv_control_center.py index b0abbd6..175f87d 100644 --- a/py/nodes/bv_control_center.py +++ b/py/nodes/bv_control_center.py @@ -6,17 +6,30 @@ class BVControlCenterNode: @classmethod def INPUT_TYPES(cls): return { - "hidden": { - "config_json": ("STRING", {"default": "{}", "multiline": True}), + "required": { + "bv_control_config_json": ("STRING", {"default": "{}", "multiline": True}), }, } RETURN_TYPES = () OUTPUT_NODE = True FUNCTION = "run" - CATEGORY = "🌀 BV Node Pack/beta/control" + CATEGORY = "🌀 BV Node Pack/control" - def run(self, **kwargs): + @classmethod + def VALIDATE_INPUTS(cls, bv_control_config_json, **kwargs): + try: + config = json.loads(bv_control_config_json) + except (TypeError, json.JSONDecodeError) as error: + return f"BV Control Center config is invalid: {error}" + for control in config.get("controls", []): + if control.get("enabled", True): + unresolved = [entry.get("groupPath") or entry.get("groupTitle") for entry in control.get("assignments", []) if entry.get("unresolved")] + if unresolved: + return f"BV Control Center '{control.get('name', 'Unnamed')}' has unresolved groups: {', '.join(unresolved)}" + return True + + def run(self, bv_control_config_json, **kwargs): return () diff --git a/py/nodes/bv_latent_empty_random_ratio.py b/py/nodes/bv_latent_empty_random_ratio.py new file mode 100644 index 0000000..845b7cb --- /dev/null +++ b/py/nodes/bv_latent_empty_random_ratio.py @@ -0,0 +1,61 @@ +import torch + +import comfy.model_management + +from ..util.latent_dimensions import combine_ratios, dimensions_for_area + + +RESOLUTIONS = ["512", "768", "1024", "1536", "2048", "Custom"] +ALIGNMENTS = ["8", "16", "32", "64"] +STANDARD_RATIOS = ( + ("use_1_1", (1, 1)), + ("use_3_2", (3, 2)), + ("use_2_3", (2, 3)), + ("use_4_3", (4, 3)), + ("use_3_4", (3, 4)), + ("use_16_9", (16, 9)), + ("use_9_16", (9, 16)), + ("use_21_9", (21, 9)), + ("use_9_21", (9, 21)), +) + + +class BVEmptyLatentRandomRatio: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "seed": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFFFFFFFFFFFF}), + "resolution": (RESOLUTIONS, {"default": "1024"}), + "custom_resolution": ("INT", {"default": 1024, "min": 64, "max": 16384, "step": 8}), + "alignment": (ALIGNMENTS, {"default": "8"}), + **{name: ("BOOLEAN", {"default": True}) for name, _ratio in STANDARD_RATIOS}, + "ratios": ("STRING", {"default": "", "multiline": True, "placeholder": "Additional ratios, one per line (for example 5:4)"}), + "batch_size": ("INT", {"default": 1, "min": 1, "max": 4096}), + } + } + + RETURN_TYPES = ("LATENT", "INT", "INT", "STRING") + RETURN_NAMES = ("latent", "width", "height", "picked_ratio") + FUNCTION = "generate" + CATEGORY = "🌀 BV Node Pack/latent" + DESCRIPTION = "Creates a native empty latent at a deterministic aspect ratio while preserving the selected square pixel area." + + def generate(self, seed, resolution, custom_resolution, alignment, ratios, batch_size, **enabled_ratios): + standard_ratios = [ratio for name, ratio in STANDARD_RATIOS if enabled_ratios[name]] + parsed_ratios = combine_ratios(standard_ratios, ratios) + picked_ratio = parsed_ratios[int(seed) % len(parsed_ratios)] + square_resolution = int(custom_resolution if resolution == "Custom" else resolution) + alignment_value = int(alignment) + width, height = dimensions_for_area(square_resolution, picked_ratio, alignment_value) + latent = torch.zeros( + [batch_size, 4, height // 8, width // 8], + device=comfy.model_management.intermediate_device(), + dtype=comfy.model_management.intermediate_dtype(), + ) + return ({"samples": latent, "downscale_ratio_spacial": 8}, width, height, f"{picked_ratio[0]}:{picked_ratio[1]}") + + +NODE_CLASS_MAPPINGS = {"BV Empty Latent Random Ratio": BVEmptyLatentRandomRatio} + +NODE_DISPLAY_NAME_MAPPINGS = {"BV Empty Latent Random Ratio": "🌀 BV Empty Latent Random Ratio"} diff --git a/py/nodes/bv_latent_random_ratio.py b/py/nodes/bv_latent_random_ratio.py index 80d4649..5d8eb30 100644 --- a/py/nodes/bv_latent_random_ratio.py +++ b/py/nodes/bv_latent_random_ratio.py @@ -60,7 +60,7 @@ class BVLatentRandomAspectRatio: RETURN_TYPES = ("LATENT", "INT", "INT", "STRING") RETURN_NAMES = ("latent", "latent_width", "latent_height", "picked_ratio") FUNCTION = "run" - CATEGORY = "🌀 BV Node Pack/latent" + CATEGORY = "🌀 BV Node Pack/deprecated" def run( self, @@ -172,5 +172,5 @@ NODE_CLASS_MAPPINGS = { } NODE_DISPLAY_NAME_MAPPINGS = { - "BV Latent Random Aspect Ratio": "🌀 BV Latent Random Aspect Ratio", + "BV Latent Random Aspect Ratio": "🌀 BV Latent Random Aspect Ratio [Deprecated]", } diff --git a/py/nodes/bv_latent_random_rotate_90.py b/py/nodes/bv_latent_random_rotate_90.py index c3a2f73..fc3ea09 100644 --- a/py/nodes/bv_latent_random_rotate_90.py +++ b/py/nodes/bv_latent_random_rotate_90.py @@ -22,40 +22,31 @@ class BVLatentRandomRotate90: CATEGORY = "🌀 BV Node Pack/latent" def run(self, latent, seed: int, enabled: bool): - # Defensive copy of dict-like latent - out = dict(latent) if isinstance(latent, dict) else {"samples": latent} + out = dict(latent) samples = out.get("samples", None) if samples is None: raise Exception("BVLatentRandomRotate90: latent has no 'samples' tensor.") - # samples expected shape: [B, C, H, W] - if not torch.is_tensor(samples) or samples.ndim != 4: - raise Exception(f"BVLatentRandomRotate90: expected samples tensor [B,C,H,W], got {type(samples)} with shape {getattr(samples, 'shape', None)}.") + if not torch.is_tensor(samples) or samples.ndim < 2: + raise Exception(f"BVLatentRandomRotate90: expected a samples tensor with spatial dimensions, got {type(samples)} with shape {getattr(samples, 'shape', None)}.") # Decide rotation do_rotate = bool(enabled) and (int(seed) & 1) == 1 if do_rotate: - # Rotate 90 degrees clockwise: rot90 with k=3 over H,W dims - out["samples"] = torch.rot90(samples, k=3, dims=(2, 3)) + out["samples"] = torch.rot90(samples, k=3, dims=(-2, -1)) # If there's a noise mask, rotate it too (usually [B, H, W] or [B, 1, H, W]) if "noise_mask" in out and out["noise_mask"] is not None: nm = out["noise_mask"] - if torch.is_tensor(nm): - if nm.ndim == 3: - # [B, H, W] - out["noise_mask"] = torch.rot90(nm, k=3, dims=(1, 2)) - elif nm.ndim == 4: - # [B, 1, H, W] or [B, C, H, W] - out["noise_mask"] = torch.rot90(nm, k=3, dims=(2, 3)) - # else: ignore unusual shapes + if torch.is_tensor(nm) and nm.ndim >= 2: + out["noise_mask"] = torch.rot90(nm, k=3, dims=(-2, -1)) # Return new latent dimensions (latent units) final_samples = out["samples"] - latent_h = int(final_samples.shape[2]) - latent_w = int(final_samples.shape[3]) + latent_h = int(final_samples.shape[-2]) + latent_w = int(final_samples.shape[-1]) return (out, latent_w, latent_h) diff --git a/py/nodes/bv_pipe.py b/py/nodes/bv_pipe.py index 39ddf0f..f0b14b2 100644 --- a/py/nodes/bv_pipe.py +++ b/py/nodes/bv_pipe.py @@ -1,6 +1,6 @@ # bv_pipe.py from __future__ import annotations -from typing import Dict, Any, List, Tuple +from typing import Dict, Any, List PIPE = "BV_PIPE" @@ -44,7 +44,7 @@ class BVPipeNode: RETURN_TYPES = (PIPE,) + (ANY,) * 100 RETURN_NAMES = ("pipe",) + tuple([f"out_{i:03d}" for i in range(1, 101)]) FUNCTION = "run" - CATEGORY = "🌀 BV Node Pack/pipe" + CATEGORY = "🌀 BV Node Pack/deprecated" def run(self, pipe: Dict[str, Any], **kwargs): pipe = pipe or {} @@ -95,5 +95,5 @@ NODE_CLASS_MAPPINGS = { } NODE_DISPLAY_NAME_MAPPINGS = { - "BV Pipe": "🌀 BV Pipe", + "BV Pipe": "🌀 BV Pipe [Deprecated]", } diff --git a/py/nodes/bv_pipe_config.py b/py/nodes/bv_pipe_config.py index b62d9c7..59a6eff 100644 --- a/py/nodes/bv_pipe_config.py +++ b/py/nodes/bv_pipe_config.py @@ -26,7 +26,7 @@ class BVPipeConfigNode: RETURN_TYPES = (PIPE,) RETURN_NAMES = ("pipe",) FUNCTION = "run" - CATEGORY = "🌀 BV Node Pack/pipe" + CATEGORY = "🌀 BV Node Pack/deprecated" def run(self, names: str): # store config in the pipe object @@ -46,5 +46,5 @@ NODE_CLASS_MAPPINGS = { } NODE_DISPLAY_NAME_MAPPINGS = { - "BV Pipe Config": "🌀 BV Pipe Config", + "BV Pipe Config": "🌀 BV Pipe Config [Deprecated]", } diff --git a/py/nodes/bv_prompt_debug.py b/py/nodes/bv_prompt_debug.py index d304558..24faa39 100644 --- a/py/nodes/bv_prompt_debug.py +++ b/py/nodes/bv_prompt_debug.py @@ -14,7 +14,6 @@ class BVPromptASTDebugNode: "pretty": ("BOOLEAN", {"default": True}), "indent": ("INT", {"default": 2, "min": 0, "max": 8, "step": 1}), "sort_keys": ("BOOLEAN", {"default": False}), - "debug_output": ("STRING", {"default": "", "multiline": True}), } } @@ -24,7 +23,7 @@ class BVPromptASTDebugNode: FUNCTION = "run" CATEGORY = "🌀 BV Node Pack/prompting" - def run(self, ast, pretty=True, indent=2, sort_keys=False, debug_output=""): + def run(self, ast, pretty=True, indent=2, sort_keys=False): try: if pretty: txt = json.dumps(ast, ensure_ascii=False, indent=int(indent), sort_keys=bool(sort_keys)) @@ -33,12 +32,11 @@ class BVPromptASTDebugNode: except Exception as e: txt = f"[BV AST Debug] Failed to serialize AST to JSON: {type(e).__name__}: {e}\n\nRaw:\n{repr(ast)}" - # WICHTIG: UI + result zurückgeben return { "ui": { - "ast_json": [txt], # frei benennbar + "ast_json": [txt], }, - "result": (txt,) # das ist dein normaler Node-Output + "result": (txt,) } diff --git a/py/nodes/bv_smart_pipe.py b/py/nodes/bv_smart_pipe.py new file mode 100644 index 0000000..de43e4f --- /dev/null +++ b/py/nodes/bv_smart_pipe.py @@ -0,0 +1,111 @@ +import json + + +SMART_PIPE = "BV_SMART_PIPE" +MAX_SLOTS = 100 + + +class AnyType(str): + def __ne__(self, value): + return False + + +ANY = AnyType("*") + + +class BVSmartPipe: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "bv_smart_pipe_schema_json": ("STRING", {"default": "[]", "multiline": True}), + "bv_smart_pipe_route_json": ("STRING", {"default": "{}", "multiline": True}), + }, + "optional": { + "pipe": (SMART_PIPE,), + **{f"v_{index:03d}": (ANY,) for index in range(1, MAX_SLOTS + 1)}, + }, + } + + RETURN_TYPES = (SMART_PIPE,) + (ANY,) * MAX_SLOTS + RETURN_NAMES = ("pipe",) + tuple(f"out_{index:03d}" for index in range(1, MAX_SLOTS + 1)) + FUNCTION = "run" + CATEGORY = "🌀 BV Node Pack/pipe" + DESCRIPTION = "Carries an independently configurable, chain-growing set of values identified by stable slot IDs." + + @classmethod + def VALIDATE_INPUTS(cls, bv_smart_pipe_schema_json, bv_smart_pipe_route_json="{}", **kwargs): + try: + schema = json.loads(bv_smart_pipe_schema_json) + except (TypeError, json.JSONDecodeError) as error: + return f"BV Smart Pipe schema is invalid: {error}" + if not isinstance(schema, list) or len(schema) > MAX_SLOTS: + return f"BV Smart Pipe schema must be a list with at most {MAX_SLOTS} slots." + ids = set() + names = set() + for slot in schema: + if not isinstance(slot, dict) or not slot.get("id") or not slot.get("name"): + return "Every BV Smart Pipe slot needs an id and name." + if slot["id"] in ids: + return f"Duplicate BV Smart Pipe slot id: {slot['id']}" + if slot["name"] in names: + return f"BV Smart Pipe enthält den Slot-Namen „{slot['name']}“ mehrfach. Prüfe die Merge-Konfiguration oder benenne einen inkompatiblen Slot um." + if slot.get("missing") and slot.get("connected"): + return f"Missing BV Smart Pipe slot is still used: {slot['name']}" + ids.add(slot["id"]) + names.add(slot["name"]) + try: + route = json.loads(bv_smart_pipe_route_json) + except (TypeError, json.JSONDecodeError) as error: + return f"BV Smart Pipe routing metadata is invalid: {error}" + if not isinstance(route, dict) or not route.get("nodeId") or not route.get("name"): + return "BV Smart Pipe routing metadata needs a nodeId and name." + return True + + def run(self, bv_smart_pipe_schema_json, bv_smart_pipe_route_json="{}", pipe=None, **kwargs): + schema = json.loads(bv_smart_pipe_schema_json) + upstream_values = (pipe or {}).get("values", {}) + values = {} + outputs = [None] * MAX_SLOTS + + for slot in schema: + ordinal = int(slot["ordinal"]) + key = f"v_{ordinal:03d}" + if key in kwargs: + value = kwargs[key] + else: + value = upstream_values.get(slot["id"]) + values[slot["id"]] = value + outputs[ordinal - 1] = value + + route = json.loads(bv_smart_pipe_route_json) + upstream_writers = (pipe or {}).get("writers", {}) + upstream_provenance = (pipe or {}).get("provenance", {}) + writers = {} + provenance = {} + for slot in schema: + key = f"v_{int(slot['ordinal']):03d}" + slot_id = slot["id"] + inherited_path = list(upstream_provenance.get(slot_id) or []) + if not inherited_path and upstream_writers.get(slot_id): + inherited_path = [upstream_writers[slot_id]] + if key in kwargs: + writer = route.get("nodeId") + writers[slot_id] = writer + provenance[slot_id] = [*inherited_path, writer] if writer else inherited_path + else: + writers[slot_id] = upstream_writers.get(slot_id) + provenance[slot_id] = inherited_path + out_pipe = { + "version": 2, + "schema": schema, + "values": values, + "writers": writers, + "provenance": provenance, + } + return (out_pipe, *outputs) + + +NODE_CLASS_MAPPINGS = {"BV Smart Pipe": BVSmartPipe} + +NODE_DISPLAY_NAME_MAPPINGS = {"BV Smart Pipe": "🌀 BV Smart Pipe"} diff --git a/py/nodes/bv_smart_pipe_merge.py b/py/nodes/bv_smart_pipe_merge.py new file mode 100644 index 0000000..d529fc5 --- /dev/null +++ b/py/nodes/bv_smart_pipe_merge.py @@ -0,0 +1,157 @@ +import json + +from .bv_smart_pipe import SMART_PIPE + + +MAX_SOURCES = 16 + + +def _unique_name(base_name, used_names): + if base_name not in used_names: + return base_name + suffix = 2 + while f"{base_name}_{suffix}" in used_names: + suffix += 1 + return f"{base_name}_{suffix}" + + +def _provenance_for(pipe, slot_id): + path = list(pipe.get("provenance", {}).get(slot_id) or []) + writer = pipe.get("writers", {}).get(slot_id) + return path or ([writer] if writer else []) + + +def _is_strict_prefix(prefix, path): + return len(prefix) < len(path) and path[:len(prefix)] == prefix + + +def _normalized_name(slot): + return str(slot.get("name") or "").strip().casefold() + + +def _compatible_types(left, right): + return not left or not right or left == "*" or right == "*" or left == right + + +def merge_smart_pipes(pipes): + schema_by_id = {} + slot_order = [] + values = {} + writers = {} + provenance = {} + aliases = {} + + for pipe in pipes: + if not pipe: + continue + pipe_schema = pipe.get("schema", []) + pipe_values = pipe.get("values", {}) + pipe_writers = pipe.get("writers", {}) + for slot in pipe_schema: + slot_id = slot.get("id") + if not slot_id: + continue + canonical_id = aliases.get(slot_id, slot_id) + if canonical_id not in schema_by_id: + matching_id = next((candidate_id for candidate_id in slot_order + if _normalized_name(schema_by_id[candidate_id]) == _normalized_name(slot) + and _compatible_types(schema_by_id[candidate_id].get("type"), slot.get("type"))), None) + canonical_id = matching_id or slot_id + aliases[slot_id] = canonical_id + if canonical_id not in schema_by_id: + schema_by_id[canonical_id] = {**slot, "id": canonical_id} + slot_order.append(canonical_id) + elif schema_by_id[canonical_id].get("type") == "*" and slot.get("type") not in (None, "*"): + schema_by_id[canonical_id]["type"] = slot["type"] + if slot_id in pipe_values: + incoming_path = _provenance_for(pipe, slot_id) + current_path = provenance.get(canonical_id, []) + # A later branch that only inherited an ancestor value must not + # erase a genuine downstream write from another branch. For + # divergent writes, the configured source order still wins. + if canonical_id in values and _is_strict_prefix(incoming_path, current_path): + continue + values[canonical_id] = pipe_values[slot_id] + provenance[canonical_id] = incoming_path + if slot_id in pipe_writers: + writers[canonical_id] = pipe_writers[slot_id] + + used_names = set() + schema = [] + for ordinal, slot_id in enumerate(slot_order, start=1): + slot = schema_by_id[slot_id] + name = _unique_name(str(slot.get("name") or "slot"), used_names) + used_names.add(name) + schema.append({ + **slot, + "id": slot_id, + "name": name, + "ordinal": ordinal, + "missing": False, + "dormant": False, + }) + + return { + "version": 2, + "schema": schema, + "values": values, + "writers": writers, + "provenance": provenance, + "aliases": {slot_id: canonical_id for slot_id, canonical_id in aliases.items() if slot_id != canonical_id}, + } + + +class BVSmartPipeMerge: + @classmethod + def INPUT_TYPES(cls): + return { + "required": { + "bv_smart_pipe_merge_json": ("STRING", {"default": "[]", "multiline": True}), + }, + "optional": { + **{f"pipe_{index:03d}": (SMART_PIPE,) for index in range(1, MAX_SOURCES + 1)}, + }, + } + + RETURN_TYPES = (SMART_PIPE,) + RETURN_NAMES = ("pipe",) + FUNCTION = "run" + CATEGORY = "🌀 BV Node Pack/pipe" + DESCRIPTION = "Merges ordered wired and wireless Smart Pipe branches. Genuine branch writes beat inherited base values; later divergent writes win." + + @classmethod + def VALIDATE_INPUTS(cls, bv_smart_pipe_merge_json, **kwargs): + try: + sources = json.loads(bv_smart_pipe_merge_json) + except (TypeError, json.JSONDecodeError) as error: + return f"BV Smart Pipe Merge configuration is invalid: {error}" + if not isinstance(sources, list) or len(sources) > MAX_SOURCES: + return f"BV Smart Pipe Merge needs a list with at most {MAX_SOURCES} sources." + keys = [] + addresses = [] + for source in sources: + key = source.get("key") if isinstance(source, dict) else None + if key not in {f"pipe_{index:03d}" for index in range(1, MAX_SOURCES + 1)}: + return f"Invalid BV Smart Pipe Merge source: {key}" + keys.append(key) + address = source.get("address") + if address: + addresses.append(address) + if len(keys) != len(set(keys)): + return "BV Smart Pipe Merge source keys must be unique." + if len(addresses) != len(set(addresses)): + return "BV Smart Pipe Merge cannot use the same source more than once." + return True + + def run(self, bv_smart_pipe_merge_json, **kwargs): + sources = json.loads(bv_smart_pipe_merge_json) + missing = [source["key"] for source in sources if kwargs.get(source["key"]) is None] + if missing: + raise ValueError(f"BV Smart Pipe Merge sources are missing: {', '.join(missing)}") + ordered_pipes = [kwargs[source["key"]] for source in sources] + return (merge_smart_pipes(ordered_pipes),) + + +NODE_CLASS_MAPPINGS = {"BV Smart Pipe Merge": BVSmartPipeMerge} + +NODE_DISPLAY_NAME_MAPPINGS = {"BV Smart Pipe Merge": "🌀 BV Smart Pipe Merge"} diff --git a/py/nodes/bv_subgraph_dynamic_combo.py b/py/nodes/bv_subgraph_dynamic_combo.py index 3fe38f8..a4b683e 100644 --- a/py/nodes/bv_subgraph_dynamic_combo.py +++ b/py/nodes/bv_subgraph_dynamic_combo.py @@ -1,3 +1,6 @@ +import math + + def _contains_link(obj, my_id: str, out_index: int) -> bool: # Link format typically: [node_id, output_index] if isinstance(obj, list): @@ -40,6 +43,13 @@ class BVDynamicCombo: def run(self, value: str, options: str, prompt=None, unique_id=None): s = (value or "").strip() + parsed_options = [line.strip() for line in (options or "").splitlines() if line.strip()] + if not parsed_options: + raise Exception("BV Dynamic Combo: at least one option is required.") + if len(parsed_options) != len(set(parsed_options)): + raise Exception("BV Dynamic Combo: duplicate options are not allowed.") + if s not in parsed_options: + raise Exception(f"BV Dynamic Combo: selected value '{s}' is not present in options.") needs_int = is_output_used(prompt, unique_id, 1) needs_float = is_output_used(prompt, unique_id, 2) @@ -58,8 +68,10 @@ class BVDynamicCombo: if needs_float: try: f = float(s) + if not math.isfinite(f): + raise ValueError except Exception: - raise Exception(f"BV Dynamic Combo: FLOAT output is connected, but value '{s}' is not a valid float.") + raise Exception(f"BV Dynamic Combo: FLOAT output is connected, but value '{s}' is not a finite float.") return (s, i, f) diff --git a/py/nodes/bv_subgraph_heading.py b/py/nodes/bv_subgraph_heading.py index 1a0263c..d29cbc3 100644 --- a/py/nodes/bv_subgraph_heading.py +++ b/py/nodes/bv_subgraph_heading.py @@ -19,7 +19,7 @@ class BVSubgraphHeading: FUNCTION = "run" CATEGORY = "🌀 BV Node Pack/subgraph" - def run(self, value): + def run(self, value, font_size, show_divider): return (value,) diff --git a/py/nodes/bv_subgraph_spacer.py b/py/nodes/bv_subgraph_spacer.py index 6048c09..ace52c1 100644 --- a/py/nodes/bv_subgraph_spacer.py +++ b/py/nodes/bv_subgraph_spacer.py @@ -13,7 +13,7 @@ class BVSubgraphSpacer: FUNCTION = "run" CATEGORY = "🌀 BV Node Pack/subgraph" - def run(self, height): + def run(self, height, scale): return (height,) diff --git a/py/nodes/bv_util_hex_color_int.py b/py/nodes/bv_util_hex_color_int.py index 8b63ecb..078ae8b 100644 --- a/py/nodes/bv_util_hex_color_int.py +++ b/py/nodes/bv_util_hex_color_int.py @@ -19,15 +19,20 @@ class BVHexColorToInt: CATEGORY = "🌀 BV Node Pack/utils" def run(self, hex: str): - s = hex.strip().lower() + color = hex + s = color.strip().lower() # Accept: "#rrggbb", "0xrrggbb", "rrggbb" s = s.replace("0x", "") if s.startswith("#"): s = s[1:] - if not re.fullmatch(r"[0-9a-f]{6}", s): - raise ValueError(f"Invalid hex color: '{hex}'. Expected #RRGGBB / 0xRRGGBB / RRGGBB.") + if re.fullmatch(r"[0-9a-f]{3}", s): + s = "".join(ch * 2 for ch in s) + elif not re.fullmatch(r"[0-9a-f]{6}", s): + raise ValueError( + f"Invalid hex color: '{color}'. Expected #RGB, RGB, #RRGGBB, 0xRRGGBB, or RRGGBB." + ) value = int(s, 16) return (value,) diff --git a/py/util/latent_dimensions.py b/py/util/latent_dimensions.py new file mode 100644 index 0000000..9db1fcb --- /dev/null +++ b/py/util/latent_dimensions.py @@ -0,0 +1,54 @@ +import math +from math import gcd + + +def parse_ratios(value: str): + ratios = [] + seen = set() + for line_number, line in enumerate(value.splitlines(), 1): + text = line.strip() + if not text: + continue + parts = text.split(":") + if len(parts) != 2: + raise ValueError(f"Invalid aspect ratio on line {line_number}: expected W:H.") + try: + width, height = (int(part.strip()) for part in parts) + except ValueError as error: + raise ValueError(f"Invalid aspect ratio on line {line_number}: W and H must be integers.") from error + if width <= 0 or height <= 0: + raise ValueError(f"Invalid aspect ratio on line {line_number}: W and H must be positive.") + divisor = gcd(width, height) + ratio = (width // divisor, height // divisor) + if ratio in seen: + raise ValueError(f"Duplicate aspect ratio on line {line_number}: {ratio[0]}:{ratio[1]}.") + seen.add(ratio) + ratios.append(ratio) + if not ratios: + raise ValueError("At least one aspect ratio is required.") + return ratios + + +def combine_ratios(standard_ratios, custom_value: str): + ratios = list(standard_ratios) + seen = set(ratios) + if custom_value.strip(): + for ratio in parse_ratios(custom_value): + if ratio not in seen: + seen.add(ratio) + ratios.append(ratio) + if not ratios: + raise ValueError("At least one aspect ratio must be enabled or entered.") + return ratios + + +def dimensions_for_area(square_resolution: int, ratio, alignment: int): + ratio_width, ratio_height = ratio + area = square_resolution * square_resolution + width = math.sqrt(area * ratio_width / ratio_height) + height = math.sqrt(area * ratio_height / ratio_width) + + def align(value): + return max(alignment, int(round(value / alignment)) * alignment) + + return align(width), align(height) diff --git a/py/util/prompt/category.py b/py/util/prompt/category.py index 02e7d8c..c5fa97a 100644 --- a/py/util/prompt/category.py +++ b/py/util/prompt/category.py @@ -42,6 +42,7 @@ def parse_prompt_to_ast( # Stack for nested spans (span nodes) span_stack: List[ASTNode] = [] + span_locations: List[tuple[str, int, int]] = [] def current_children() -> List[ASTNode]: return span_stack[-1]["children"] if span_stack else current_block["children"] @@ -60,25 +61,37 @@ def parse_prompt_to_ast( return current_children().append(make_node("comment", v=s)) - def start_span(cat: str) -> None: + def start_span(cat: str, line_number: int, column: int) -> None: span = make_node("span", cat=cat, children=[]) current_children().append(span) span_stack.append(span) + span_locations.append((cat, line_number, column)) def end_span() -> None: if span_stack: span_stack.pop() + span_locations.pop() + + def split_line_ending(s: str) -> tuple[str, str]: + for ending in ("\r\n", "\n", "\r"): + if s.endswith(ending): + return s[:-len(ending)], ending + return s, "" # Process line-by-line to support block directives - for line in text.splitlines(keepends=True): + for line_number, line in enumerate(text.splitlines(keepends=True), start=1): # --- Block directive handling (standalone line starting with @@) --- if line.startswith("@@"): # Only treat as directive if the entire line is "@@\n" (or "@@\n") raw = line[2:] candidate = raw.strip("\r\n").strip() if candidate == "" or is_valid_cat(candidate): - # Close any open spans at a block boundary (fail-soft) - span_stack.clear() + if span_stack: + cat, start_line, start_column = span_locations[-1] + raise ValueError( + f"Unclosed inline category '{cat}' opened at line {start_line}, " + f"column {start_column} before block directive on line {line_number}." + ) cat = candidate or "default" current_block = make_node("block", cat=cat, children=[]) root["children"].append(current_block) @@ -91,7 +104,9 @@ def parse_prompt_to_ast( # Inline or line comment detection (outside of special structures) # Treat everything from comment_prefix to end-of-line as a comment node. if line.startswith(comment_prefix, i): - emit_comment(line[i:]) # includes newline (keepends=True) + comment, ending = split_line_ending(line[i:]) + emit_comment(comment) + emit_text(ending) break # Inline span end: @@ (pop one span) @@ -100,6 +115,11 @@ def parse_prompt_to_ast( i += 2 continue + if line.startswith("@@", i): + raise ValueError( + f"Unexpected inline category closer '@@' at line {line_number}, column {i + 1}." + ) + # Inline span start: @ if line.startswith("@<", i): j = i + 2 @@ -111,7 +131,7 @@ def parse_prompt_to_ast( if j < len(line) and line[j] == ">": cat = "".join(cat_chars).strip() if is_valid_cat(cat): - start_span(cat) + start_span(cat, line_number, i + 1) i = j + 1 # Swallow exactly one whitespace after the '>' if i < len(line) and line[i] in (" ", "\t"): @@ -123,6 +143,12 @@ def parse_prompt_to_ast( emit_text(line[i]) i += 1 + if span_stack: + cat, line_number, column = span_locations[-1] + raise ValueError( + f"Unclosed inline category '{cat}' opened at line {line_number}, column {column}." + ) + return root diff --git a/pyproject.toml b/pyproject.toml index cf395ce..15b54e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "bv_nodepack" -version = "0.0.24" -description = "A ComfyUI node pack providing advanced utility and workflow nodes, including a config-driven Control Center for muting and bypassing node groups, a flexible Pipe system, a AST (Abstract Syntax Tree) prompting system , and Subgraph-friendly UI nodes (Heading, Spacer, Divider) with dynamic JavaScript rendering." +version = "0.1.0" +description = "Advanced ComfyUI workflow toolkit featuring wireless, branchable Smart Pipes with ordered merges and Subgraph routing; user-defined group state controls; stable composable Subgraph UIs; structured AST prompt processing; and flexible latent utilities." authors = [ {name = "BlackVortex", email = "blackvortexx@proton.me"} ] diff --git a/scripts/embed_example_workflows.py b/scripts/embed_example_workflows.py new file mode 100644 index 0000000..15af729 --- /dev/null +++ b/scripts/embed_example_workflows.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +import json +from pathlib import Path + +from PIL import Image, PngImagePlugin + + +ROOT = Path(__file__).resolve().parents[1] +IMAGES = ROOT / "examples" / "images" +WORKFLOWS = ROOT / "examples" / "workflows" + +EXAMPLES = { + "prompt-ast-categories": ((40, 160, 1240, 550), "_ast-full.png"), + "empty-latent-random-ratio": (None, None), + "subgraph-ui-layout": (None, None), + "smart-pipe-wireless-merge": ((40, 160, 1240, 500), "_smart-full.png"), + "control-center-workflow-states": ((150, 150, 1120, 610), "_control-full.png"), +} + +CONFIG_SCREENSHOTS = { + "smart-pipe-slot-config.png": (180, 175, 1100, 550), + "smart-pipe-merge-config.png": (250, 195, 1030, 525), + "control-center-config.png": (180, 80, 1110, 640), +} + + +for stem, (crop, source_name) in EXAMPLES.items(): + workflow_path = WORKFLOWS / f"{stem}.json" + source_path = IMAGES / (source_name or f"{stem}.png") + target_path = IMAGES / f"{stem}.png" + workflow = json.loads(workflow_path.read_text(encoding="utf-8")) + with Image.open(source_path) as source: + image = source.crop(crop) if crop else source.copy() + metadata = PngImagePlugin.PngInfo() + metadata.add_text("workflow", json.dumps(workflow, separators=(",", ":"), ensure_ascii=False)) + image.save(target_path, pnginfo=metadata, optimize=True) + +for name, crop in CONFIG_SCREENSHOTS.items(): + path = IMAGES / name + with Image.open(path) as source: + source.crop(crop).save(path, optimize=True) + +for temporary in (IMAGES / "_smart-full.png", IMAGES / "_control-full.png", IMAGES / "_ast-full.png"): + temporary.unlink(missing_ok=True) diff --git a/scripts/generate_example_workflows.mjs b/scripts/generate_example_workflows.mjs new file mode 100644 index 0000000..535c0e5 --- /dev/null +++ b/scripts/generate_example_workflows.mjs @@ -0,0 +1,165 @@ +import fs from "node:fs"; +import path from "node:path"; + +const root = path.resolve(import.meta.dirname, ".."); +const out = path.join(root, "examples", "workflows"); +fs.mkdirSync(out, { recursive: true }); + +const base = (nodes, links = [], groups = [], extra = {}) => ({ + id: crypto.randomUUID(), revision: 0, + last_node_id: Math.max(...nodes.map((node) => Number(node.id)), 0), + last_link_id: Math.max(...links.map((link) => Number(link[0])), 0), + nodes, links, groups, config: {}, + extra: { ds: { scale: 1, offset: [80, 80] }, frontendVersion: "1.48.7", ...extra }, + version: 0.4, +}); +const note = (id, title, text, pos, size = [380, 180]) => ({ + id, type: "MarkdownNote", pos, size, flags: {}, order: id, mode: 0, + inputs: [], outputs: [], title, properties: {}, widgets_values: [text], color: "#223", bgcolor: "#112", +}); +const props = (name) => ({ "Node name for S&R": name, cnr_id: "bv_nodepack", ver: "0.1.0" }); +const input = (name, type, link = null, widget = false, label = undefined) => ({ name, type, link, ...(widget ? { widget: { name } } : {}), ...(label ? { label } : {}) }); +const output = (name, type, links = null) => ({ name, type, links }); +const save = (name, workflow) => fs.writeFileSync(path.join(out, name), `${JSON.stringify(workflow, null, 2)}\n`); +const showText = (id, pos, link, value = "") => ({ + id, type: "ShowText|pysssss", pos, size: [260, 90], flags: {}, order: id, mode: 0, + inputs: [{ localized_name: "text", name: "text", type: "STRING", link }], + outputs: [{ localized_name: "STRING", name: "STRING", shape: 6, type: "STRING", links: null }], + properties: { cnr_id: "comfyui-custom-scripts", ver: "1.2.5", "Node name for S&R": "ShowText|pysssss" }, + widgets_values: [value], +}); + +// Prompt AST: a real category workflow with two independent consumers. +save("prompt-ast-categories.json", base([ + note(1, "Prompt AST – categories instead of string surgery", "## Practical use\nMaintain one structured prompt, enable or disable optional blocks, then decode only the categories required by a downstream encoder. The Debug node keeps the AST visible while building the workflow.", [20, 20], [430, 210]), + { id: 2, type: "BV Prompt Encode", pos: [500, 40], size: [360, 240], flags: {}, order: 2, mode: 0, + inputs: [input("prompt", "STRING", null, true)], outputs: [output("ast", "BV_AST", [1, 2]), output("cleaned_prompt", "STRING")], properties: props("BV Prompt Encode"), + widgets_values: ["A cinematic portrait of an astronaut\n@@lighting\nsoft rim light, volumetric haze\n@@detail\nhighly detailed helmet reflections\n@@negative\ntext, watermark"] }, + { id: 3, type: "BV Prompt Category Switch", pos: [930, 40], size: [340, 190], flags: {}, order: 3, mode: 0, + inputs: [input("ast", "BV_AST", 1), input("enable_categories", "STRING", null, true), input("disable_categories", "STRING", null, true), input("inherit", "BOOLEAN", null, true), input("mode", "BOOLEAN", null, true)], + outputs: [output("ast", "BV_AST", [3]), output("report", "STRING")], properties: props("BV Prompt Category Switch"), widgets_values: ["lighting\ndetail", "negative", true, true] }, + { id: 4, type: "BV Prompt Decode", pos: [1340, 40], size: [340, 220], flags: {}, order: 4, mode: 0, + inputs: [input("ast", "BV_AST", 3), input("category_filter", "STRING", null, true), input("with_comments", "BOOLEAN", null, true), input("inherit", "BOOLEAN", null, true), input("mode", "BOOLEAN", null, true), input("prettify", "BOOLEAN", null, true)], + outputs: [output("ast", "BV_AST"), output("filtered_prompt", "STRING", [4])], properties: props("BV Prompt Decode"), widgets_values: ["default, lighting, detail", false, true, true, true] }, + { id: 5, type: "BV Prompt AST Debug", pos: [930, 300], size: [750, 230], flags: {}, order: 5, mode: 0, + inputs: [input("ast", "BV_AST", 2), input("pretty", "BOOLEAN", null, true), input("indent", "INT", null, true), input("sort_keys", "BOOLEAN", null, true)], + outputs: [output("ast_json", "STRING")], properties: props("BV Prompt AST Debug"), widgets_values: [true, 2, false] }, + showText(6, [1740, 80], 4, "A cinematic portrait of an astronaut\nsoft rim light, volumetric haze\nhighly detailed helmet reflections"), +], [[1,2,0,3,0,"BV_AST"],[2,2,0,5,0,"BV_AST"],[3,3,0,4,0,"BV_AST"],[4,4,1,6,0,"STRING"]])); + +// Random latent: configured for a realistic portrait workflow. +save("empty-latent-random-ratio.json", base([ + note(1, "Random ratio latent – reproducible composition variants", "## Practical use\nGenerate a deterministic mix of landscape, portrait and square canvases for prompt exploration. Standard ratios are one-click toggles; project-specific ratios stay in the text field. Connect **latent** directly to your sampler.", [20, 20], [430, 220]), + { id: 2, type: "BV Empty Latent Random Ratio", pos: [500, 20], size: [420, 430], flags: {}, order: 2, mode: 0, + inputs: [input("seed","INT",null,true),input("resolution","COMBO",null,true),input("custom_resolution","INT",null,true),input("alignment","COMBO",null,true), + ...["use_1_1","use_3_2","use_2_3","use_4_3","use_3_4","use_16_9","use_9_16","use_21_9","use_9_21"].map((name)=>input(name,"BOOLEAN",null,true)),input("ratios","STRING",null,true),input("batch_size","INT",null,true)], + outputs: [output("latent","LATENT"),output("width","INT"),output("height","INT"),output("picked_ratio","STRING")], properties: props("BV Empty Latent Random Ratio"), + widgets_values: [42,"1024",1024,"64",true,true,true,false,false,true,true,false,false,"5:4\n4:5",1] }, + note(3, "Suggested downstream wiring", "**latent → KSampler.latent_image**\n\nThe additional width, height and picked_ratio outputs are useful for filenames, metadata and resolution-aware post-processing.", [980, 80], [360, 190]), +])); + +// Subgraph UI building blocks, laid out in the same order they should be exposed. +save("subgraph-ui-layout.json", base([ + note(1, "Build a clean Subgraph interface", "## Practical use\nExpose these inputs in the shown order. The outer Subgraph node becomes a small purpose-built UI: heading, model preset, divider, numeric settings and intentional spacing.", [20, 20], [420, 210]), + { id: 2, type: "BV Subgraph Heading", pos: [500, 20], size: [330, 150], flags: {}, order: 2, mode: 0, + inputs: [input("value","STRING",null,true),input("font_size","INT",null,true),input("show_divider","BOOLEAN",null,true)], outputs:[output("_","STRING")], properties:props("BV Subgraph Heading"), widgets_values:["Generation Settings",26,false] }, + { id: 3, type: "BV Dynamic Combo", pos: [500, 205], size: [330, 210], flags: {}, order: 3, mode: 0, + inputs:[input("value","STRING",null,true),input("options","STRING",null,true)], outputs:[output("value_str","STRING"),output("value_int","INT"),output("value_float","FLOAT")], properties:props("BV Dynamic Combo"), widgets_values:["Balanced","Fast\nBalanced\nQuality"] }, + { id: 4, type: "BV Subgraph Divider", pos: [900, 70], size: [300, 145], flags: {}, order: 4, mode: 0, + inputs:[input("thickness","INT",null,true),input("padding","INT",null,true),input("alpha","FLOAT",null,true)], outputs:[output("_","STRING")], properties:props("BV Subgraph Divider"), widgets_values:[2,10,0.35] }, + { id: 5, type: "BV Subgraph Spacer", pos: [900, 250], size: [300, 125], flags: {}, order: 5, mode: 0, + inputs:[input("height","INT",null,true),input("scale","FLOAT",null,true)], outputs:[output("_","STRING")], properties:props("BV Subgraph Spacer"), widgets_values:[24,1] }, + note(6, "Expose to the Subgraph input", "Connect each presentation output to the Subgraph input bracket, then expose the functional values between them. Stable identities preserve this order across save/load and input changes.", [1260, 90], [380, 210]), +])); + +// Use the validated live test graphs for the complex stateful examples. +for (const [source, target] of [ + ["Dev Pipe Test.json", "smart-pipe-wireless-merge.json"], + ["BV Control Center Test.json", "control-center-workflow-states.json"], +]) { + const sourcePath = path.resolve(root, "..", "..", "user", "default", "workflows", source); + if (!fs.existsSync(sourcePath)) continue; + const workflow = JSON.parse(fs.readFileSync(sourcePath, "utf8")); + if (target === "smart-pipe-wireless-merge.json") { + const positions = new Map([[204,[20,30]],[199,[320,20]],[205,[20,310]],[198,[320,300]],[200,[820,170]],[201,[1260,150]]]); + workflow.nodes = workflow.nodes.filter((node) => positions.has(node.id)); + for (const node of workflow.nodes) node.pos = positions.get(node.id); + const ids = new Set(workflow.nodes.map((node) => node.id)); + workflow.links = workflow.links.filter((link) => ids.has(link[1]) && ids.has(link[3])); + const first = workflow.nodes.find((node) => node.id === 199); + const second = workflow.nodes.find((node) => node.id === 198); + const afterMerge = workflow.nodes.find((node) => node.id === 201); + workflow.nodes.find((node) => node.id === 204).widgets_values = ["A lighthouse above a stormy sea"]; + workflow.nodes.find((node) => node.id === 205).widgets_values = ["text, watermark"]; + const firstSlot = first.properties.bvSmartPipe.localSlots[0]; + const secondSlot = second.properties.bvSmartPipe.localSlots[0]; + Object.assign(firstSlot, { name: "prompt" }); + Object.assign(first.properties.bvSmartPipe.resolvedSlots[0], { name: "prompt" }); + Object.assign(first.inputs[1], { label: "prompt", localized_name: "prompt" }); + Object.assign(secondSlot, { name: "negative_prompt" }); + Object.assign(second.properties.bvSmartPipe.resolvedSlots[0], { name: "negative_prompt" }); + Object.assign(second.inputs[1], { label: "negative_prompt", localized_name: "negative_prompt" }); + + const styleSlot = { id: "5c881b13-e3ab-4caf-9a09-92659fba6419", name: "style", ordinal: 2, type: "STRING", showInput: true, showOutput: false }; + first.properties.bvSmartPipe.localSlots.push(styleSlot); + first.properties.bvSmartPipe.resolvedSlots.push({ ...styleSlot, missing: false, dormant: false }); + first.properties.bvSmartPipe.nextOrdinal = 3; + first.inputs.splice(2, 0, { label: "style", localized_name: "style", name: "v_002", shape: 7, type: "STRING", link: 188 }); + first.widgets_values[0] = JSON.stringify([ + { ...first.properties.bvSmartPipe.resolvedSlots[0], connected: true }, + { ...first.properties.bvSmartPipe.resolvedSlots[1], connected: true }, + ]); + second.widgets_values[0] = JSON.stringify([{ ...second.properties.bvSmartPipe.resolvedSlots[0], connected: true }]); + + const mergedSlots = [ + { ...first.properties.bvSmartPipe.resolvedSlots[0], showInput: false, showOutput: true }, + { ...first.properties.bvSmartPipe.resolvedSlots[1], showInput: false, showOutput: true }, + { ...second.properties.bvSmartPipe.resolvedSlots[0], showInput: false, showOutput: true }, + ]; + afterMerge.properties.bvSmartPipe.inheritedSlots = mergedSlots.map((slot) => ({ ...slot })); + afterMerge.properties.bvSmartPipe.resolvedSlots = mergedSlots.map((slot) => ({ ...slot })); + afterMerge.outputs = [afterMerge.outputs[0], ...mergedSlots.map((slot, index) => ({ localized_name: slot.name, name: slot.name, type: "STRING", links: [189 + index] }))]; + afterMerge.widgets_values[0] = JSON.stringify(mergedSlots.map((slot) => ({ ...slot, connected: true }))); + const routeKey = Object.keys(workflow.extra.bvSmartPipeRoutes).find((key) => key.endsWith(afterMerge.properties.bvSmartPipe.routing.nodeId)); + workflow.extra.bvSmartPipeRoutes[routeKey].projection = { version: 1, inheritedSlots: mergedSlots.map((slot) => ({ ...slot })), resolvedSlots: mergedSlots.map((slot) => ({ ...slot })) }; + + const styleValue = JSON.parse(JSON.stringify(workflow.nodes.find((node) => node.id === 204))); + Object.assign(styleValue, { id: 206, pos: [20, 150], order: 11, widgets_values: ["cinematic"] }); + styleValue.outputs[0].links = [188]; + workflow.nodes.push(styleValue, showText(207, [1740, 40], 189, "A lighthouse above a stormy sea"), showText(208, [1740, 170], 190, "cinematic"), showText(209, [1740, 300], 191, "text, watermark")); + workflow.links.push([188,206,0,199,2,"STRING"],[189,201,1,207,0,"STRING"],[190,201,2,208,0,"STRING"],[191,201,3,209,0,"STRING"]); + workflow.last_node_id = 209; workflow.last_link_id = 191; + workflow.extra.ds = { scale: 0.72, offset: [100, 250] }; + } + if (target === "control-center-workflow-states.json") { + const keep = new Set([6, 2, 3]); + workflow.nodes = workflow.nodes.filter((node) => keep.has(node.id)); + const control = workflow.nodes.find((node) => node.id === 6); + const generate = workflow.nodes.find((node) => node.id === 2); + const upscale = workflow.nodes.find((node) => node.id === 3); + control.pos = [30, 150]; control.size = [330, 130]; control.title = "🌀 BV Control Center"; + const controlConfig = JSON.parse(control.widgets_values[0]); + controlConfig.controls[0].name = "Generate only"; + controlConfig.controls[0].assignments = controlConfig.controls[0].assignments.filter((assignment) => assignment.groupTitle === "Upscale"); + controlConfig.controls[1].name = "Full pipeline"; + controlConfig.controls[1].assignments = controlConfig.controls[1].assignments.map((assignment) => ({ ...assignment, groupId: "db2a373c-9542-4657-ad6d-1a2dd6b3757c", groupPath: "Generate", groupTitle: "Generate", action: "activate" })); + controlConfig.controls[0].enabled = true; + controlConfig.controls[1].enabled = false; + control.widgets_values[0] = JSON.stringify(controlConfig); + control.widgets_values[2] = true; + control.widgets_values[3] = false; + control.inputs[1].label = "Generate only"; + control.inputs[2].label = "Full pipeline"; + workflow.extra.bv_settings.controlConfig = controlConfig; + generate.pos = [540, 80]; generate.size = [270, 106]; generate.mode = 0; + upscale.pos = [540, 310]; upscale.size = [270, 106]; upscale.mode = 4; + workflow.groups = workflow.groups.filter((group) => group.id === 2 || group.id === 4); + const generateGroup = workflow.groups.find((group) => group.id === 4); + const upscaleGroup = workflow.groups.find((group) => group.id === 2); + generateGroup.bounding = [500, 20, 350, 205]; + upscaleGroup.bounding = [500, 250, 350, 205]; + workflow.last_node_id = 6; workflow.last_link_id = 0; + workflow.extra.ds = { scale: 0.9, offset: [140, 170] }; + } + fs.writeFileSync(path.join(out, target), `${JSON.stringify(workflow, null, 2)}\n`); +} diff --git a/tests/control_center_model.test.mjs b/tests/control_center_model.test.mjs new file mode 100644 index 0000000..77b5934 --- /dev/null +++ b/tests/control_center_model.test.mjs @@ -0,0 +1,55 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { findActiveControlConflicts, formatControlConflictStatus, nodesInControlGroup } from "../ui/src/util/control/controlCenterModel.js"; + +test("empty ComfyUI group membership falls back to group geometry after reload", () => { + const target = { id: 1, pos: [120, 120], size: [80, 40] }; + const outside = { id: 2, pos: [400, 400], size: [80, 40] }; + const item = { + group: { nodes: [], pos: [100, 100], size: [200, 120] }, + graph: { _nodes: [target, outside] }, + }; + + assert.deepEqual(nodesInControlGroup(item), [target]); +}); + +test("resolved native group membership remains authoritative", () => { + const native = { id: 1, pos: [400, 400], size: [80, 40] }; + const geometric = { id: 2, pos: [120, 120], size: [80, 40] }; + const item = { + group: { nodes: [native], pos: [100, 100], size: [200, 120] }, + graph: { _nodes: [native, geometric] }, + }; + + assert.deepEqual(nodesInControlGroup(item), [native]); +}); + +test("explicit activate wins conflicts between active controls", () => { + const conflicts = findActiveControlConflicts({ controls: [ + { id: "generate", name: "Generate only", enabled: true, assignments: [{ groupId: "upscale", groupPath: "Upscale", action: "bypass" }] }, + { id: "upscale", name: "Upscale only", enabled: true, assignments: [{ groupId: "upscale", groupPath: "Upscale", action: "activate" }] }, + ] }); + + assert.equal(conflicts.length, 1); + assert.equal(conflicts[0].winnerAction, "activate"); +}); + +test("inactive controls and identical actions do not create conflicts", () => { + const conflicts = findActiveControlConflicts({ controls: [ + { id: "a", enabled: true, assignments: [{ groupId: "g", action: "mute" }] }, + { id: "b", enabled: false, assignments: [{ groupId: "g", action: "activate" }] }, + { id: "c", enabled: true, assignments: [{ groupId: "g", action: "mute" }] }, + ] }); + + assert.deepEqual(conflicts, []); +}); + +test("node status describes conflicts and reserves a stable success row", () => { + const conflicts = findActiveControlConflicts({ controls: [ + { id: "a", name: "A", enabled: true, assignments: [{ groupId: "g", groupPath: "Upscale", action: "bypass" }] }, + { id: "b", name: "B", enabled: true, assignments: [{ groupId: "g", groupPath: "Upscale", action: "activate" }] }, + ] }); + + assert.equal(formatControlConflictStatus(conflicts), "⚠ Upscale: Activate overrides Bypass"); + assert.equal(formatControlConflictStatus([]), "✓ No active conflicts"); +}); diff --git a/tests/dynamic_combo_model.test.mjs b/tests/dynamic_combo_model.test.mjs new file mode 100644 index 0000000..eb6f859 --- /dev/null +++ b/tests/dynamic_combo_model.test.mjs @@ -0,0 +1,16 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { normalizeDynamicComboSelection, parseDynamicComboOptions } from "../js/bv_dynamic_combo_model.js"; + +test("dynamic combo options are trimmed and empty lines ignored", () => { + assert.deepEqual(parseDynamicComboOptions(" low \n\nmedium\r\n high "), ["low", "medium", "high"]); +}); + +test("removed selection falls back to the first available option", () => { + assert.equal(normalizeDynamicComboSelection("option_a", ["low", "medium", "high"]), "low"); + assert.equal(normalizeDynamicComboSelection("medium", ["low", "medium", "high"]), "medium"); +}); + +test("empty option lists keep the current value for backend validation", () => { + assert.equal(normalizeDynamicComboSelection("medium", []), "medium"); +}); diff --git a/tests/smart_pipe_merge_model.test.mjs b/tests/smart_pipe_merge_model.test.mjs new file mode 100644 index 0000000..acd498f --- /dev/null +++ b/tests/smart_pipe_merge_model.test.mjs @@ -0,0 +1,73 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + SMART_PIPE_DEFAULT_TITLE, + SMART_PIPE_MERGE_DEFAULT_TITLE, + compactMergeNodeHeight, + duplicateDynamicInputIndexes, + hasMergeSource, + mergePipeSchemas, + normalizeMergeSources, +} from "../js/bv_smart_pipe_merge_model.js"; + +test("new nodes retain their complete public display titles", () => { + assert.equal(SMART_PIPE_DEFAULT_TITLE, "🌀 BV Smart Pipe"); + assert.equal(SMART_PIPE_MERGE_DEFAULT_TITLE, "🌀 BV Smart Pipe Merge"); +}); + +test("the same pipe cannot be added twice across wired and wireless modes", () => { + const sources = [{ key: "pipe_001", mode: "wired", address: "root/source" }]; + assert.equal(hasMergeSource(sources, { mode: "wireless", address: "root/source" }), true); + assert.equal(hasMergeSource(sources, { mode: "wireless", address: "root/other" }), false); +}); + +test("merged frontend schema contains every source and later metadata wins", () => { + const schema = mergePipeSchemas([ + [{ id: "model", name: "model", type: "*", ordinal: 4 }], + [{ id: "model", name: "model", type: "MODEL", ordinal: 2 }, { id: "image", name: "image", type: "IMAGE", ordinal: 3 }], + ]); + assert.deepEqual(schema.map(({ id, type, ordinal }) => ({ id, type, ordinal })), [ + { id: "model", type: "MODEL", ordinal: 1 }, + { id: "image", type: "IMAGE", ordinal: 2 }, + ]); +}); + +test("compatible frontend slots with the same name are coalesced", () => { + const schema = mergePipeSchemas([ + [{ id: "string-a", name: "string", type: "STRING", ordinal: 1 }], + [{ id: "string-b", name: "string", type: "STRING", ordinal: 1 }], + ]); + assert.equal(schema.length, 1); + assert.equal(schema[0].id, "string-a"); + assert.deepEqual(schema[0].aliases, ["string-b"]); +}); + +test("empty merge nodes use a compact deterministic height", () => { + assert.equal(compactMergeNodeHeight(0), 88); + assert.equal(compactMergeNodeHeight(2), 132); +}); + +test("reload drops wireless merge ghosts that claim to be unconnected wired sources", () => { + const sources = [ + { key: "pipe_001", mode: "wireless", address: "root/source-a", label: "Source A" }, + { key: "pipe_002", mode: "wireless", address: "root/source-b", label: "Source B" }, + { key: "pipe_007", mode: "wired", address: null, label: "Wired 3" }, + ]; + + assert.deepEqual(normalizeMergeSources(sources, new Set()), sources.slice(0, 2)); + assert.deepEqual( + normalizeMergeSources(sources, new Set(["pipe_007"])), + sources, + ); +}); + +test("reload identifies duplicate dynamic inputs while retaining the linked copy", () => { + const inputs = [ + { name: "pipe_007", link: null }, + { name: "bv_smart_pipe_merge_config_json", link: null }, + { name: "pipe_007", link: 42 }, + { name: "bv_add_pipe_source", link: null }, + ]; + + assert.deepEqual(duplicateDynamicInputIndexes(inputs), [0]); +}); diff --git a/tests/smart_pipe_routing.test.mjs b/tests/smart_pipe_routing.test.mjs new file mode 100644 index 0000000..68739b4 --- /dev/null +++ b/tests/smart_pipe_routing.test.mjs @@ -0,0 +1,481 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + cloneRouteRegistryPrefix, + detachedHostRouting, + compareRoutingNumbers, + crossScopeDescriptors, + executionScope, + logicalAddress, + materializeAddressedPipeLinks, + materializeSmartPipeMergeSources, + materializeWirelessPipeLinks, + parseLogicalAddress, + preferredHostRoutingName, + promptModeState, + predecessorChoiceRoutes, + prunePromptBranches, + reconcileRouteRegistryDestinations, + remapPromptOutputLinks, + routingChoiceLabel, + routingDisplayNumbers, + uniqueHostName, + uniqueRoutingName, + routingCollisionOwner, + validateMaterializedPipeGraph, +} from "../js/bv_smart_pipe_routing.js"; + +function pipe(name, nodeId, mode = "root", predecessorId = null, inputs = {}) { + return { + class_type: "BV Smart Pipe", + inputs: { + bv_smart_pipe_route_json: JSON.stringify({ version: 1, name, nodeId, mode, predecessorId }), + ...inputs, + }, + }; +} + +test("routing names receive deterministic human-readable suffixes", () => { + assert.equal(uniqueRoutingName("Pipe", new Set(["Pipe", "Pipe_1"])), "Pipe_2"); +}); + +test("an initialized pipe keeps its name when a copied newcomer collides", () => { + const incumbent = { title: "Pipe", __bvLastRoutingTitle: "Pipe" }; + const newcomer = { title: "Pipe" }; + assert.equal(routingCollisionOwner(incumbent, newcomer), incumbent); + assert.equal(routingCollisionOwner(newcomer, incumbent), incumbent); +}); + +test("execution scope follows the expanded subgraph instance path", () => { + assert.equal(executionScope("12:45:7"), "12:45"); + assert.equal(executionScope("7"), ""); +}); + +test("root-scope pipes are not repeated as cross-scope choices", () => { + const own = { address: "root/self", hostPath: [] }; + const rootPeer = { address: "root/peer", hostPath: [] }; + const nestedPeer = { address: "root/host/peer", hostPath: ["host"] }; + assert.deepEqual(crossScopeDescriptors([own, rootPeer, nestedPeer], own), [nestedPeer]); +}); + +test("logical addresses survive numeric execution-id changes", () => { + const address = logicalAddress("root/id", ["host one", "nested"], "pipe/id"); + assert.deepEqual(parseLogicalAddress(address), ["root/id", "host one", "nested", "pipe/id"]); + assert.equal(uniqueHostName("Detailer", new Set(["Detailer"])), "Detailer_1"); +}); + +test("copying a subgraph host clones its route subtree and remaps internal predecessors", () => { + const registry = { + "root/old/source": { predecessorAddress: "root/external" }, + "root/old/target": { predecessorAddress: "root/old/source", projection: { resolvedSlots: [{ id: "slot" }] } }, + "root/other/pipe": { predecessorAddress: "root/external" }, + }; + assert.equal(cloneRouteRegistryPrefix(registry, "root/old", "root/new"), 2); + assert.equal(registry["root/new/source"].predecessorAddress, "root/external"); + assert.equal(registry["root/new/target"].predecessorAddress, "root/new/source"); + assert.notEqual(registry["root/new/target"].projection, registry["root/old/target"].projection); + assert.equal(Object.keys(registry).length, 5); +}); + +test("deleted destinations are pruned after a grace period and restored by undo", () => { + const registry = { + "root/live": { predecessorAddress: "root/source" }, + "root/deleted": { predecessorAddress: "root/source" }, + }; + const state = { missingSince: new Map(), backups: new Map() }; + reconcileRouteRegistryDestinations(registry, new Set(["root/live"]), state, 100, 1000); + assert.ok(registry["root/deleted"]); + reconcileRouteRegistryDestinations(registry, new Set(["root/live"]), state, 1200, 1000); + assert.equal(registry["root/deleted"], undefined); + assert.ok(state.backups.has("root/deleted")); + reconcileRouteRegistryDestinations(registry, new Set(["root/live", "root/deleted"]), state, 1300, 1000); + assert.ok(registry["root/deleted"]); + assert.equal(state.backups.has("root/deleted"), false); +}); + +test("nested subgraph addresses materialize through every host level", () => { + const source = logicalAddress("root", ["outer", "inner"], "source"); + const target = logicalAddress("root", [], "target"); + const prompt = { "5:8:2": pipe("Nested", "source"), "9": pipe("Root", "target") }; + materializeAddressedPipeLinks(prompt, { "5:8:2": source, "9": target }, { + [target]: { predecessorAddress: source }, + }); + assert.deepEqual(prompt["9"].inputs.pipe, ["5:8:2", 0]); +}); + +test("copied subgraph hosts detach shared routing metadata before UUID repair", () => { + const shared = { id: "shared", name: "Subgraph" }; + const first = detachedHostRouting(shared); + const second = detachedHostRouting(shared); + second.id = "copy"; + assert.equal(shared.id, "shared"); + assert.equal(first.id, "shared"); + assert.equal(second.id, "copy"); +}); + +test("subgraph definition renames replace stale host routing names", () => { + assert.equal(preferredHostRoutingName({ + storedName: "New Subgraph_1", + storedDefinitionName: "New Subgraph", + title: "New Subgraph_1", + definitionName: "Test123", + }), "Test123"); + assert.equal(preferredHostRoutingName({ + storedName: "New Subgraph_1", + title: "New Subgraph_1", + definitionName: "Test123", + }), "Test123"); +}); + +test("intentional instance titles remain independent from unchanged definitions", () => { + assert.equal(preferredHostRoutingName({ + storedName: "Face Detailer", + storedDefinitionName: "Detailer", + title: "Eye Detailer", + lastAppliedTitle: "Face Detailer", + definitionName: "Detailer", + }), "Eye Detailer"); +}); + +test("address registry materializes root to subgraph and instance to instance links", () => { + const root = logicalAddress("root", [], "root-pipe"); + const first = logicalAddress("root", ["face"], "inner-pipe"); + const second = logicalAddress("root", ["eyes"], "inner-pipe"); + const prompt = { + "7": pipe("Root", "root-pipe"), + "12:4": pipe("Face", "inner-pipe"), + "25:4": pipe("Eyes", "inner-pipe"), + }; + materializeAddressedPipeLinks(prompt, { "7": root, "12:4": first, "25:4": second }, { + [first]: { predecessorAddress: root }, + [second]: { predecessorAddress: first }, + }); + assert.deepEqual(prompt["12:4"].inputs.pipe, ["7", 0]); + assert.deepEqual(prompt["25:4"].inputs.pipe, ["12:4", 0]); +}); + +test("address routing fails closed and physical links still win", () => { + const first = logicalAddress("root", ["first"], "pipe"); + const second = logicalAddress("root", ["second"], "pipe"); + const prompt = { + "10:1": pipe("First", "pipe"), + "20:1": pipe("Second", "pipe", "root", null, { pipe: ["99", 0] }), + }; + materializeAddressedPipeLinks(prompt, { "10:1": first, "20:1": second }, { + [second]: { predecessorAddress: "root/missing/pipe" }, + }); + assert.deepEqual(prompt["20:1"].inputs.pipe, ["99", 0]); + assert.throws(() => materializeAddressedPipeLinks( + { "10:1": pipe("First", "pipe"), "20:1": pipe("Second", "pipe") }, + { "10:1": first, "20:1": second }, + { [second]: { predecessorAddress: "root/missing/pipe" } }, + ), /predecessor .*missing/); +}); + +test("a downstream wireless route skips a bypassed Smart Pipe and keeps the preceding values", () => { + const base = logicalAddress("root", [], "base"); + const bypassed = logicalAddress("root", [], "bypassed"); + const downstream = logicalAddress("root", [], "downstream"); + const prompt = { + "1": pipe("Base", "base"), + "3": pipe("Downstream", "downstream"), + }; + + materializeAddressedPipeLinks(prompt, { "1": base, "3": downstream }, { + [bypassed]: { predecessorAddress: base }, + [downstream]: { predecessorAddress: bypassed }, + }, { bypassedAddresses: new Set([bypassed]) }); + + assert.deepEqual(prompt["3"].inputs.pipe, ["1", 0]); +}); + +test("a muted addressed predecessor prunes its dependent branch for this prompt only", () => { + const base = logicalAddress("root", [], "base"); + const muted = logicalAddress("root", [], "muted"); + const downstream = logicalAddress("root", [], "downstream"); + const prompt = { + "1": pipe("Base", "base"), + "3": pipe("Downstream", "downstream"), + }; + + const modeState = { mutedAddresses: new Set([muted]), prunedExecutionIds: new Set() }; + materializeAddressedPipeLinks(prompt, { "1": base, "3": downstream }, { + [muted]: { predecessorAddress: base }, + [downstream]: { predecessorAddress: muted }, + }, modeState); + prunePromptBranches(prompt, modeState.prunedExecutionIds); + assert.deepEqual(Object.keys(prompt), ["1"]); +}); + +test("hidden output gaps remap visible LiteGraph indexes to backend ordinals", () => { + const prompt = { + source: pipe("Source", "source"), + consumer: { class_type: "Consumer", inputs: { value: ["source", 1], untouched: ["other", 0] } }, + }; + remapPromptOutputLinks(prompt, { source: { 0: 0, 1: 2 } }); + assert.deepEqual(prompt.consumer.inputs.value, ["source", 2]); + assert.deepEqual(prompt.consumer.inputs.untouched, ["other", 0]); +}); + +test("the final compiler rejects cycles spanning registry and local routes", () => { + const prompt = { + "1": pipe("First", "first", "follow", "second"), + "2": pipe("Second", "second"), + }; + materializeAddressedPipeLinks(prompt, { + "1": logicalAddress("scope", [], "first"), + "2": logicalAddress("scope", [], "second"), + }, { + [logicalAddress("scope", [], "second")]: { predecessorAddress: logicalAddress("scope", [], "first") }, + }); + materializeWirelessPipeLinks(prompt); + assert.throws(() => validateMaterializedPipeGraph(prompt), /wired and wireless connections/); +}); + +test("display numbers represent chain and position while forks remain unique", () => { + const labels = routingDisplayNumbers([ + { nodeId: "base", name: "Base", mode: "root" }, + { nodeId: "lora", name: "LoRA", mode: "follow", predecessorId: "base" }, + { nodeId: "control", name: "Control", mode: "follow", predecessorId: "base" }, + { nodeId: "second", name: "Second", mode: "root" }, + { nodeId: "second-next", name: "Second Next", mode: "follow", predecessorId: "second" }, + ]); + assert.equal(labels.get("base"), "1.1"); + assert.match(labels.get("lora"), /^1\.1\.[12]$/); + assert.match(labels.get("control"), /^1\.1\.[12]$/); + assert.notEqual(labels.get("lora"), labels.get("control")); + assert.equal(labels.get("second"), "2.1"); + assert.equal(labels.get("second-next"), "2.2"); +}); + +test("a merge starts a new tree after all of its source trees", () => { + const labels = routingDisplayNumbers([ + { nodeId: "first", name: "Tree 1", mode: "root" }, + { nodeId: "second", name: "Tree 2", mode: "root" }, + { nodeId: "merge", name: "Merge", mode: "merge", sourceIds: ["first", "second"] }, + { nodeId: "after", name: "After Merge", mode: "follow", predecessorId: "merge" }, + { nodeId: "branch-a", name: "Branch A", mode: "follow", predecessorId: "after" }, + { nodeId: "branch-b", name: "Branch B", mode: "follow", predecessorId: "after" }, + ]); + assert.equal(labels.get("first"), "1.1"); + assert.equal(labels.get("second"), "2.1"); + assert.equal(labels.get("merge"), "3.1"); + assert.equal(labels.get("after"), "3.2"); + assert.equal(labels.get("branch-a"), "3.2.1"); + assert.equal(labels.get("branch-b"), "3.2.2"); +}); + +test("the destination tree does not consume a hidden number in its predecessor menu", () => { + const routes = [ + { nodeId: "first", name: "Tree 1", mode: "root" }, + { nodeId: "second", name: "Tree 2", mode: "root" }, + { nodeId: "merge", name: "Merge", mode: "merge", sourceIds: ["first", "second"] }, + { nodeId: "current", name: "BV Smart Pipe", mode: "root" }, + { nodeId: "dependent", name: "Dependent", mode: "follow", predecessorId: "current" }, + ]; + const globalLabels = routingDisplayNumbers(routes); + assert.equal(globalLabels.get("merge"), "3.1"); + assert.equal(globalLabels.get("current"), "4.1"); + const labels = routingDisplayNumbers(predecessorChoiceRoutes(routes, "current")); + assert.equal(labels.has("current"), false); + assert.equal(labels.has("dependent"), false); + assert.equal(labels.get("first"), "1.1"); + assert.equal(labels.get("second"), "2.1"); + assert.equal(labels.get("merge"), "3.1"); +}); + +test("multiple independent chains are numbered by chain before position", () => { + const labels = routingDisplayNumbers([ + { nodeId: "dashboard-1", name: "Dashboard2_1", mode: "root" }, + { nodeId: "smart-1", name: "BV Smart Pipe_1", mode: "follow", predecessorId: "dashboard-1" }, + { nodeId: "pipe", name: "Pipe", mode: "follow", predecessorId: "smart-1" }, + { nodeId: "dashboard-2", name: "Dashboard2_2", mode: "root" }, + { nodeId: "dashboard-3", name: "Dashboard2_3", mode: "follow", predecessorId: "dashboard-2" }, + ]); + assert.equal(labels.get("dashboard-1"), "1.1"); + assert.equal(labels.get("smart-1"), "1.2"); + assert.equal(labels.get("pipe"), "1.3"); + assert.equal(labels.get("dashboard-2"), "2.1"); + assert.equal(labels.get("dashboard-3"), "2.2"); +}); + +test("dropdown labels indent children by their chain position", () => { + assert.equal(routingChoiceLabel("1.1", "Root"), "1.1. Root"); + assert.equal(routingChoiceLabel("1.2", "Child"), "\u00a0\u00a0\u00a01.2. Child"); + assert.equal(routingChoiceLabel("1.3", "Grandchild"), "\u00a0\u00a0\u00a0\u00a0\u00a0\u00a01.3. Grandchild"); + assert.equal(routingChoiceLabel("1.1.2", "Fork"), "\u00a0\u00a0\u00a01.1.2. Fork"); +}); + +test("dropdown route numbers sort by chain, position and fork", () => { + const numbers = ["1.3", "2.2", "1.1.2", "2.1", "1.1", "1.1.1"]; + assert.deepEqual(numbers.sort(compareRoutingNumbers), ["1.1", "1.1.1", "1.1.2", "1.3", "2.1", "2.2"]); +}); + +test("wireless predecessors become prompt-level pipe links", () => { + const prompt = { "1": pipe("Base", "base"), "2": pipe("LoRA", "lora", "follow", "base") }; + materializeWirelessPipeLinks(prompt); + assert.deepEqual(prompt["2"].inputs.pipe, ["1", 0]); +}); + +test("local wireless routing skips a bypassed Smart Pipe", () => { + const prompt = { + "1": pipe("Base", "base"), + "3": pipe("Downstream", "downstream", "follow", "bypassed"), + }; + materializeWirelessPipeLinks(prompt, { + routesByScopedNodeId: new Map([ + ["\u0000bypassed", { name: "Bypassed", nodeId: "bypassed", mode: "follow", predecessorId: "base" }], + ]), + bypassedScopedNodeIds: new Set(["\u0000bypassed"]), + }); + assert.deepEqual(prompt["3"].inputs.pipe, ["1", 0]); +}); + +test("local wireless routing skips a bypassed Smart Pipe whose predecessor is a Merge", () => { + const prompt = { + "2": { class_type: "BV Smart Pipe Merge", inputs: {} }, + "4": pipe("Downstream", "downstream", "follow", "bypassed"), + }; + materializeWirelessPipeLinks(prompt, { + routesByScopedNodeId: new Map([ + ["\u0000bypassed", { name: "After Merge", nodeId: "bypassed", mode: "root", predecessorId: null }], + ]), + bypassedScopedNodeIds: new Set(["\u0000bypassed"]), + bypassPredecessorsByScopedNodeId: new Map([ + ["\u0000bypassed", { executionId: "2" }], + ]), + }); + assert.deepEqual(prompt["4"].inputs.pipe, ["2", 0]); +}); + +test("a muted local wireless predecessor prunes its dependent branch", () => { + const prompt = { + "1": pipe("Base", "base"), + "3": pipe("Downstream", "downstream", "follow", "muted"), + }; + const modeState = { + routesByScopedNodeId: new Map([ + ["\u0000muted", { name: "Muted", nodeId: "muted", mode: "follow", predecessorId: "base" }], + ]), + mutedScopedNodeIds: new Set(["\u0000muted"]), + prunedExecutionIds: new Set(), + }; + materializeWirelessPipeLinks(prompt, modeState); + prunePromptBranches(prompt, modeState.prunedExecutionIds); + assert.deepEqual(Object.keys(prompt), ["1"]); +}); + +test("the same subgraph definition resolves independently per instance", () => { + const prompt = { + "10:1": pipe("Base", "base"), "10:2": pipe("Next", "next", "follow", "base"), + "20:1": pipe("Base", "base"), "20:2": pipe("Next", "next", "follow", "base"), + }; + materializeWirelessPipeLinks(prompt); + assert.deepEqual(prompt["10:2"].inputs.pipe, ["10:1", 0]); + assert.deepEqual(prompt["20:2"].inputs.pipe, ["20:1", 0]); +}); + +test("a physical pipe link wins over wireless metadata", () => { + const prompt = { "1": pipe("Base", "base"), "2": pipe("Next", "next", "follow", "missing", { pipe: ["9", 0] }) }; + materializeWirelessPipeLinks(prompt); + assert.deepEqual(prompt["2"].inputs.pipe, ["9", 0]); +}); + +test("merge sources materialize in configured order and preserve physical links", () => { + const prompt = { + "1": pipe("A", "a"), + "2": pipe("B", "b"), + "3": { class_type: "BV Smart Pipe Merge", inputs: { pipe_002: ["9", 0] } }, + }; + materializeSmartPipeMergeSources(prompt, { "1": "root/a", "2": "root/b", "3": "root/merge" }, { + "root/merge": { kind: "merge", sources: [ + { key: "pipe_001", mode: "wireless", address: "root/a" }, + { key: "pipe_002", mode: "wireless", address: "root/b" }, + ] }, + }); + assert.deepEqual(prompt["3"].inputs.pipe_001, ["1", 0]); + assert.deepEqual(prompt["3"].inputs.pipe_002, ["9", 0]); +}); + +test("a merge omits one muted source but keeps the remaining source", () => { + const prompt = { + "2": pipe("Active", "active"), + "3": { class_type: "BV Smart Pipe Merge", inputs: { + bv_smart_pipe_merge_json: JSON.stringify([ + { key: "pipe_001", mode: "wired", address: "root/muted" }, + { key: "pipe_002", mode: "wireless", address: "root/active" }, + ]), + pipe_001: ["1", 0], + } }, + }; + const modeState = { mutedAddresses: new Set(["root/muted"]), prunedExecutionIds: new Set() }; + materializeSmartPipeMergeSources(prompt, { + "1": "root/muted", "2": "root/active", "3": "root/merge", + }, { + "root/merge": { kind: "merge", sources: [ + { key: "pipe_001", mode: "wired", address: "root/muted" }, + { key: "pipe_002", mode: "wireless", address: "root/active" }, + ] }, + }, modeState); + assert.equal(prompt["3"].inputs.pipe_001, undefined); + assert.deepEqual(prompt["3"].inputs.pipe_002, ["2", 0]); + assert.deepEqual(JSON.parse(prompt["3"].inputs.bv_smart_pipe_merge_json).map((source) => source.key), ["pipe_002"]); + assert.equal(modeState.prunedExecutionIds.size, 0); +}); + +test("a muted Merge is included in the prompt mute snapshot", () => { + const state = promptModeState([ + { kind: "pipe", address: "root/pipe", executionId: "1", node: { mode: 0 } }, + { kind: "merge", address: "root/merge", executionId: "2", node: { mode: 2 } }, + ]); + assert.deepEqual([...state.mutedAddresses], ["root/merge"]); + assert.deepEqual([...state.prunedExecutionIds], ["2"]); +}); + +test("a pipe following a muted Merge is pruned instead of reporting a missing cross-scope predecessor", () => { + const merge = "root/merge"; + const downstream = "root/downstream"; + const state = promptModeState([ + { kind: "merge", address: merge, executionId: "2", node: { mode: 2 } }, + { kind: "pipe", address: downstream, executionId: "3", node: { mode: 0 } }, + ]); + const prompt = { "3": pipe("Downstream", "downstream") }; + materializeAddressedPipeLinks(prompt, { "2": merge, "3": downstream }, { + [downstream]: { predecessorAddress: merge }, + }, state); + prunePromptBranches(prompt, state.prunedExecutionIds); + assert.deepEqual(prompt, {}); +}); + +test("an all-muted merge and its dependent consumers are pruned only from the API prompt", () => { + const prompt = { + "3": { class_type: "BV Smart Pipe Merge", inputs: { pipe_001: ["1", 0] } }, + "4": pipe("After Merge", "after", "root", null, { pipe: ["3", 0] }), + "5": { class_type: "Consumer", inputs: { value: ["4", 1] } }, + "6": { class_type: "Independent", inputs: {} }, + }; + const modeState = { mutedAddresses: new Set(["root/muted"]), prunedExecutionIds: new Set() }; + materializeSmartPipeMergeSources(prompt, { "1": "root/muted", "3": "root/merge" }, { + "root/merge": { kind: "merge", sources: [ + { key: "pipe_001", mode: "wired", address: "root/muted" }, + ] }, + }, modeState); + prunePromptBranches(prompt, modeState.prunedExecutionIds); + assert.deepEqual(Object.keys(prompt), ["6"]); +}); + +test("merge source cycles are rejected together with ordinary pipe cycles", () => { + const prompt = { + "1": { class_type: "BV Smart Pipe Merge", inputs: { pipe_001: ["2", 0] } }, + "2": { class_type: "BV Smart Pipe Merge", inputs: { pipe_001: ["1", 0] } }, + }; + assert.throws(() => validateMaterializedPipeGraph(prompt), /Cycle/); +}); + +test("missing predecessors and cycles fail closed", () => { + assert.throws(() => materializeWirelessPipeLinks({ "1": pipe("Next", "next", "follow", "missing") }), /predecessor is missing/); + assert.throws(() => materializeWirelessPipeLinks({ + "1": pipe("A", "a", "follow", "b"), + "2": pipe("B", "b", "follow", "a"), + }), /cycle/); +}); diff --git a/tests/smart_pipe_slots.test.mjs b/tests/smart_pipe_slots.test.mjs new file mode 100644 index 0000000..0fb50c2 --- /dev/null +++ b/tests/smart_pipe_slots.test.mjs @@ -0,0 +1,109 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { moveMarkedPortToEnd, nextFreeOrdinal, promoteConnectedInheritedSlots, promoteInheritedSlot, resolveLocalSlotNameCollisions, retainedMissingSlots, reusableSmartPipePortIndex, smartPipeSlotName, uniqueSmartPipeSlotName, updateSmartPipePort } from "../js/bv_smart_pipe_slots.js"; + +test("menu-created inputs remain above the Add Slot connector", () => { + const pipe = { name: "pipe" }; + const addSlot = { name: "bv_add_slot", bvAddSlot: true }; + const newSlot = { name: "v_001", bvSlotId: "new" }; + const ports = [pipe, addSlot, newSlot]; + moveMarkedPortToEnd(ports, (port) => port.bvAddSlot); + assert.deepEqual(ports, [pipe, newSlot, addSlot]); +}); + +test("resolved inherited slot replaces its stale missing presentation", () => { + const missing = { + name: "v_001", + label: "⚠ Missing: new_slot 1", + localized_name: "⚠ Missing: new_slot 1", + type: "STRING", + bvSlotId: "slot-1", + link: 42, + }; + + const resolved = updateSmartPipePort(missing, "new_slot 1", "STRING", "slot-1"); + + assert.notStrictEqual(resolved, missing); + assert.equal(resolved.label, "new_slot 1"); + assert.equal(resolved.localized_name, "new_slot 1"); + assert.equal(resolved.link, 42); +}); + +test("copied connected ports with localized names are adopted instead of duplicated", () => { + const ports = [ + { name: "pipe", type: "BV_SMART_PIPE" }, + { name: "out_001", label: "string", localized_name: "out_001", type: "*", links: [42] }, + { name: "out_002", label: "string", localized_name: "string", type: "STRING", links: null }, + ]; + assert.equal(reusableSmartPipePortIndex(ports, { + slotId: "slot-1", portName: "out_002", label: "string", type: "STRING", + }), 1); +}); + +test("removed upstream slots remain only when used downstream", () => { + const previous = [ + { id: "still-present" }, + { id: "used-removed", showOutput: true }, + { id: "unused-removed" }, + ]; + + const missing = retainedMissingSlots(previous, new Set(["still-present"]), (slot) => Boolean(slot.showOutput)); + + assert.deepEqual(missing.map((slot) => slot.id), ["used-removed"]); +}); + +test("connecting a missing inherited input promotes it to a local slot", () => { + const state = { + localSlots: [], + inheritedSlots: [{ id: "slot-1", name: "image", ordinal: 3, type: "*", showInput: true, showOutput: true, missing: true }], + }; + const promoted = promoteInheritedSlot(state, "slot-1", "IMAGE"); + assert.deepEqual(promoted, { + id: "slot-1", name: "image", ordinal: 3, type: "IMAGE", showInput: true, showOutput: true, missing: false, + }); + assert.deepEqual(state.inheritedSlots, []); + assert.equal(state.localSlots[0], promoted); +}); + +test("disconnecting a pipe promotes already connected inherited inputs only", () => { + const state = { + localSlots: [], + inheritedSlots: [ + { id: "connected", name: "prompt", ordinal: 1, type: "STRING", showInput: true, missing: false }, + { id: "empty", name: "model", ordinal: 2, type: "MODEL", showInput: true, missing: false }, + ], + }; + promoteConnectedInheritedSlots(state, new Set(["connected"])); + assert.deepEqual(state.localSlots.map((slot) => slot.id), ["connected"]); + assert.equal(state.localSlots[0].missing, false); + assert.deepEqual(state.inheritedSlots.map((slot) => slot.id), ["empty"]); +}); + +test("new slots do not reuse a deleted ordinal", () => { + assert.equal(nextFreeOrdinal(new Set([1, 2]), 4, 100), 4); + assert.equal(nextFreeOrdinal(new Set([1, 2, 4]), 4, 100), 5); + assert.equal(nextFreeOrdinal(new Set([100]), 100, 100), undefined); +}); + +test("source output labels become stable slot names", () => { + assert.equal(smartPipeSlotName("Positive Conditioning"), "positive_conditioning"); + assert.equal(smartPipeSlotName(" IMAGE "), "image"); + assert.equal(smartPipeSlotName("***"), "new_slot"); +}); + +test("derived slot names receive deterministic suffixes", () => { + const used = new Set(["image", "image_2"]); + assert.equal(uniqueSmartPipeSlotName("image", used), "image_3"); + assert.equal(uniqueSmartPipeSlotName("model", used), "model"); +}); + +test("different slot IDs with the same name remain separate and local names are suffixed", () => { + const localSlots = [ + { id: "local-image", name: "image" }, + { id: "local-mask", name: "mask" }, + ]; + const renamed = resolveLocalSlotNameCollisions(localSlots, ["image", "image_2"]); + assert.deepEqual(localSlots.map((slot) => slot.name), ["image_3", "mask"]); + assert.deepEqual(renamed, [{ id: "local-image", from: "image", to: "image_3" }]); +}); diff --git a/tests/subgraph_ui_projection.test.mjs b/tests/subgraph_ui_projection.test.mjs new file mode 100644 index 0000000..5d2cb70 --- /dev/null +++ b/tests/subgraph_ui_projection.test.mjs @@ -0,0 +1,378 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { projectSubgraphUIPresentation, synchronizeDynamicComboHost } from "../js/bv_subgraph_ui_projection.js"; + +test("promoted heading presentation is copied to the outer subgraph widget", () => { + const draw = () => {}; + const computeSize = () => [240, 52]; + const sourceWidget = { name: "value", type: "BV_HEADING", draw, computeSize, __bvNode: { id: 7 } }; + const targetWidget = { name: "value", type: "text" }; + const sourceNode = { getWidgetFromSlot: () => sourceWidget }; + const hostInput = { name: "value", widgetId: "host:1:value", _subgraphSlot: { linkIds: [10] } }; + const host = { + inputs: [hostInput], + widgets: [targetWidget], + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: {} }) }) }, + getWidgetFromSlot: () => targetWidget, + expandToFitContent() {}, + setDirtyCanvas() {}, + }; + + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(targetWidget.type, "text"); + assert.equal(targetWidget.draw, draw); + assert.equal(targetWidget.computeSize, computeSize); + assert.equal(targetWidget.__bvNode, sourceWidget.__bvNode); +}); + +test("ordinary promoted widgets remain untouched", () => { + const sourceWidget = { name: "seed", type: "number" }; + const targetWidget = { name: "seed", type: "number" }; + const sourceNode = { getWidgetFromSlot: () => sourceWidget }; + const host = { + inputs: [{ widgetId: "host:1:seed", _subgraphSlot: { linkIds: [2] } }], + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: {} }) }) }, + getWidgetFromSlot: () => targetWidget, + }; + assert.equal(projectSubgraphUIPresentation(host), 0); +}); + +test("presentation projects through a nested promoted subgraph widget", () => { + const draw = () => {}; + const sourceWidget = { name: "value", type: "BV_DIVIDER", draw, computeSize: () => [220, 18] }; + const innerTarget = { name: "divider", type: "number" }; + const innerInput = { name: "divider", widgetId: "inner", _subgraphSlot: { linkIds: [1] } }; + const sourceNode = { getWidgetFromSlot: () => sourceWidget }; + const innerHost = { + inputs: [innerInput], widgets: [innerTarget], + isSubgraphNode: () => true, + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: {} }) }) }, + getWidgetFromSlot: () => innerTarget, + }; + const outerTarget = { name: "divider", type: "number" }; + const outerHost = { + inputs: [{ name: "divider", widgetId: "outer", _subgraphSlot: { linkIds: [2] } }], + widgets: [outerTarget], + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: innerHost, input: innerInput }) }) }, + getWidgetFromSlot: () => outerTarget, + }; + assert.equal(projectSubgraphUIPresentation(outerHost), 1); + assert.equal(outerTarget.type, "number"); + assert.equal(outerTarget.draw, draw); +}); + +test("linked exposed heading creates one persistent editable host widget", () => { + const draw = () => {}; + const sourceWidget = { name: "value", type: "BV_HEADING", value: "Title", draw }; + const sourceNode = { + id: 9, + properties: { bvLayoutId: "heading-id" }, + __bvPresentationWidget: sourceWidget, + getWidgetFromSlot: () => null, + }; + const input = { name: "text", _subgraphSlot: { linkIds: [3] } }; + const host = { + inputs: [input], widgets: [], properties: {}, + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: { name: "value" } }) }) }, + addWidget(type, name, value, callback, options) { + const widget = { type, name, value, callback, options }; + this.widgets.push(widget); + return widget; + }, + }; + + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(host.widgets.length, 1); + assert.equal(host.widgets[0].type, "text"); + assert.equal(host.widgets[0].draw, draw); + host.widgets[0].callback("Changed"); + assert.equal(host.properties.bvSubgraphUIValues["heading-id:value"], "Changed"); +}); + +test("linked exposed divider creates a non-editable custom host widget", () => { + const sourceWidget = { type: "BV_DIVIDER", value: 2, draw: () => {} }; + const sourceNode = { id: 4, __bvPresentationWidget: sourceWidget, getWidgetFromSlot: () => null }; + const host = { + inputs: [{ name: "divider", _subgraphSlot: { linkIds: [5] } }], widgets: [], + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: { name: "thickness" } }) }) }, + addCustomWidget(widget) { this.widgets.push(widget); return widget; }, + }; + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(host.widgets[0].type, "BV_DIVIDER"); +}); + +test("linked exposed spacer creates a non-editable custom host widget", () => { + const sourceWidget = { type: "BV_SPACER", value: 24, draw: () => {}, computeSize: () => [220, 24] }; + const sourceNode = { id: 5, __bvPresentationWidget: sourceWidget, getWidgetFromSlot: () => null }; + const host = { + inputs: [{ name: "space", _subgraphSlot: { linkIds: [6] } }], widgets: [], + subgraph: { getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: { name: "height" } }) }) }, + addCustomWidget(widget) { this.widgets.push(widget); return widget; }, + }; + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(host.widgets[0].type, "BV_SPACER"); + assert.deepEqual(host.widgets[0].computeSize(), [220, 24]); +}); + +test("projected spacer size follows the edited outer value", () => { + const sourceWidget = { type: "BV_SPACER", value: 24, draw: () => {} }; + sourceWidget.computeSize = function () { return [220, sourceWidget.value]; }; + const targetWidget = { type: "number", value: 24 }; + const sourceNode = { id: 6, __bvPresentationWidget: sourceWidget, getWidgetFromSlot: () => null }; + let appliedSize; + const host = { + inputs: [{ name: "Spacer" }], widgets: [targetWidget], properties: {}, + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "height" } }], + getWidgetFromSlot: () => targetWidget, + computeSize: () => [220, targetWidget.computeSize(220)[1] + 40], + setSize: (size) => { appliedSize = size; }, + }; + projectSubgraphUIPresentation(host); + targetWidget.callback(48); + assert.deepEqual(targetWidget.computeSize(220), [220, 48]); + assert.deepEqual(appliedSize, [220, 88]); +}); + +test("current ComfyUI host resolves presentation links from subgraph inputs", () => { + const sourceWidget = { type: "BV_HEADING", value: "Heading", draw: () => {} }; + const sourceNode = { + id: 150, + properties: { bvLayoutId: "ad9ede0f-2e7f-4715-ae35-e5049b4a5bf7" }, + __bvPresentationWidget: sourceWidget, + getWidgetFromSlot: () => null, + }; + const host = { + // Real host inputs no longer carry _subgraphSlot. + inputs: [{ name: "value", type: "STRING" }], + widgets: [], properties: {}, + subgraph: { + // The actual definition slot owns linkIds instead. + inputs: [{ id: "a33fdabf-bf71-49ce-a0ae-1ce8e0fb2889", name: "value", linkIds: [131] }], + getLink: () => ({ resolve: () => ({ inputNode: sourceNode, input: { name: "value" } }) }), + }, + addWidget(type, name, value, callback, options) { + const widget = { type, name, value, callback, options }; + this.widgets.push(widget); + return widget; + }, + }; + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(host.widgets.length, 1); + assert.equal(host.widgets[0].value, "Heading"); +}); + +test("current SubgraphNode resolver is authoritative for exposed presentation inputs", () => { + const sourceWidget = { type: "BV_DIVIDER", value: 2, draw: () => {} }; + const sourceNode = { id: 77, __bvPresentationWidget: sourceWidget, getWidgetFromSlot: () => null }; + const host = { + inputs: [{ name: "divider", type: "INT" }], widgets: [], properties: {}, + subgraph: {}, + resolveSubgraphInputLinks: (slot) => slot === 0 + ? [{ inputNode: sourceNode, input: { name: "thickness" } }] + : [], + addCustomWidget(widget) { this.widgets.push(widget); return widget; }, + }; + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(host.widgets[0].type, "BV_DIVIDER"); +}); + +test("projection supports modern getter-only widget types", () => { + let drawArgs; + const draw = (...args) => { drawArgs = args; }; + const sourceWidget = { type: "BV_HEADING", draw, computeSize: () => [220, 40] }; + const targetWidget = { + get type() { return "text"; }, + y: 12, + get height() { return 40; }, + drawWidget() {}, + }; + const sourceNode = { __bvPresentationWidget: sourceWidget, getWidgetFromSlot: () => null }; + const host = { + inputs: [{ name: "value" }], widgets: [targetWidget], + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => targetWidget, + }; + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(targetWidget.type, "text"); + assert.equal(targetWidget.draw, draw); + targetWidget.drawWidget({}, { width: 300, showText: true }); + assert.equal(drawArgs[2], 300); + assert.equal(drawArgs[3], 12); + assert.deepEqual(targetWidget.computeLayoutSize(), { minWidth: 220, minHeight: 40 }); +}); + +test("ComfyUI-owned slot proxy remains authoritative and keeps native editing", () => { + const sourceDraw = () => {}; + const sourceWidget = { type: "BV_HEADING", value: "Visible", draw: sourceDraw }; + const nativeCallback = () => {}; + const detachedProxy = { + get type() { return "text"; }, + value: "Visible", + callback: nativeCallback, + drawWidget() {}, + }; + const sourceNode = { __bvPresentationWidget: sourceWidget, getWidgetFromSlot: () => null }; + let appliedSize; + const host = { + inputs: [{ name: "value" }], widgets: [], properties: {}, + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => detachedProxy, + addWidget(type, name, value, callback, options) { + const widget = { type, name, value, callback, options }; + this.widgets.push(widget); + return widget; + }, + computeSize: () => [240, 120], + setSize: (size) => { appliedSize = size; }, + }; + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(host.widgets.length, 0); + assert.equal(detachedProxy.draw, sourceDraw); + assert.equal(detachedProxy.callback, nativeCallback); + assert.equal(detachedProxy.__bvPresentationType, "BV_HEADING"); + assert.deepEqual(appliedSize, [240, 120]); +}); + +test("heading survives reload before its runtime widget marker is restored", () => { + const sourceWidget = { type: "text", value: "Saved heading", draw: () => {} }; + const sourceNode = { + comfyClass: "BV Subgraph Heading", + getWidgetFromSlot: () => sourceWidget, + }; + let callbackValue; + const proxy = { + get type() { return "text"; }, + value: "Saved heading", + drawWidget() {}, + callback(value) { callbackValue = value; }, + }; + const host = { + inputs: [{ name: "value" }], widgets: [], properties: {}, + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => proxy, + }; + + assert.equal(projectSubgraphUIPresentation(host), 1); + assert.equal(proxy.__bvPresentationType, "BV_HEADING"); + let promptCallback; + proxy.onClick({ + e: {}, node: host, + canvas: { prompt(_title, _value, callback) { promptCallback = callback; } }, + }); + promptCallback("Edited heading"); + assert.equal(proxy.value, "Edited heading"); + assert.equal(sourceWidget.value, "Edited heading"); + assert.equal(callbackValue, "Edited heading"); + assert.equal(host.properties.bvSubgraphUIValues["presentation:value"], "Edited heading"); + assert.equal(host.serialize_widgets, true); +}); + +test("projection is idempotent and repairs a proxy renderer reset", () => { + const sourceWidget = { type: "text", value: "Heading", draw: () => {}, computeSize: () => [220, 40] }; + const sourceNode = { type: "BV Subgraph Heading", getWidgetFromSlot: () => sourceWidget }; + const proxy = { get type() { return "text"; }, drawWidget() {}, options: {} }; + let dirtyCalls = 0; + const host = { + inputs: [{ name: "value" }], widgets: [], properties: {}, + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => proxy, + setDirtyCanvas: () => { dirtyCalls++; }, + }; + + projectSubgraphUIPresentation(host); + const projectedRenderer = proxy.drawWidget; + const dirtyAfterFirstProjection = dirtyCalls; + projectSubgraphUIPresentation(host); + assert.equal(proxy.drawWidget, projectedRenderer); + assert.equal(dirtyCalls, dirtyAfterFirstProjection); + + proxy.drawWidget = function standardTextRenderer() {}; + projectSubgraphUIPresentation(host); + assert.equal(proxy.drawWidget, projectedRenderer); + assert.ok(dirtyCalls > dirtyAfterFirstProjection); +}); + +test("technical exposed names migrate through the official subgraph rename API", () => { + const sourceWidget = { type: "text", draw: () => {} }; + const sourceNode = { type: "BV Subgraph Heading", getWidgetFromSlot: () => sourceWidget }; + const exposedInput = { id: "stable-slot-id", name: "value", linkIds: [9] }; + const existingHeader = { id: "other-slot", name: "Header", linkIds: [] }; + const hostInput = { name: "value", _subgraphSlot: exposedInput }; + const proxy = { type: "text", drawWidget() {}, options: {} }; + const renameCalls = []; + const host = { + inputs: [hostInput], widgets: [], properties: {}, + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => proxy, + subgraph: { + inputs: [exposedInput, existingHeader], + renameInput(input, name) { + renameCalls.push({ id: input.id, name }); + input.name = name; + hostInput.name = name; + }, + }, + }; + + projectSubgraphUIPresentation(host); + assert.deepEqual(renameCalls, [{ id: "stable-slot-id", name: "Header_1" }]); + assert.equal(exposedInput.id, "stable-slot-id"); + assert.deepEqual(exposedInput.linkIds, [9]); + projectSubgraphUIPresentation(host); + assert.equal(renameCalls.length, 1); +}); + +test("deliberately renamed presentation inputs remain untouched", () => { + const sourceWidget = { type: "number", draw: () => {} }; + const sourceNode = { type: "BV Subgraph Spacer", getWidgetFromSlot: () => sourceWidget }; + const exposedInput = { id: "slot", name: "Layout gap", linkIds: [3] }; + let renamed = false; + const host = { + inputs: [{ name: "Layout gap", _subgraphSlot: exposedInput }], widgets: [], properties: {}, + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "height" } }], + getWidgetFromSlot: () => ({ type: "number", drawWidget() {}, options: {} }), + subgraph: { inputs: [exposedInput], renameInput() { renamed = true; } }, + }; + + projectSubgraphUIPresentation(host); + assert.equal(renamed, false); +}); + +test("dynamic combo option changes propagate to exposed host proxies", () => { + const sourceNode = { type: "BV Dynamic Combo" }; + let callbackValue; + const proxy = { + value: "option_a", + options: { values: ["option_a", "option_b"] }, + callback(value) { callbackValue = value; }, + }; + const host = { + inputs: [{ name: "value" }], + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => proxy, + }; + + assert.equal(synchronizeDynamicComboHost(host, sourceNode, ["low", "medium", "high"]), 1); + assert.deepEqual(proxy.options.values, ["low", "medium", "high"]); + assert.equal(proxy.value, "low"); + assert.equal(callbackValue, "low"); +}); + +test("valid exposed dynamic combo selections survive option updates", () => { + const sourceNode = { type: "BV Dynamic Combo" }; + let callbackCalled = false; + const proxy = { + value: "medium", options: {}, + callback() { callbackCalled = true; }, + }; + const host = { + inputs: [{ name: "value" }], + resolveSubgraphInputLinks: () => [{ inputNode: sourceNode, input: { name: "value" } }], + getWidgetFromSlot: () => proxy, + }; + + synchronizeDynamicComboHost(host, sourceNode, ["low", "medium", "high"]); + assert.equal(proxy.value, "medium"); + assert.equal(callbackCalled, false); +}); diff --git a/tests/test_control_center.py b/tests/test_control_center.py new file mode 100644 index 0000000..4e076cb --- /dev/null +++ b/tests/test_control_center.py @@ -0,0 +1,25 @@ +import json +import unittest + +from py.nodes.bv_control_center import BVControlCenterNode + + +class ControlCenterTests(unittest.TestCase): + def test_enabled_control_with_unresolved_group_blocks(self): + config = { + "controls": [{ + "name": "Upscale", + "enabled": True, + "assignments": [{"groupPath": "Root / Upscale", "unresolved": True}], + }] + } + result = BVControlCenterNode.VALIDATE_INPUTS(json.dumps(config)) + self.assertIn("Root / Upscale", result) + + def test_disabled_control_allows_unresolved_group(self): + config = {"controls": [{"enabled": False, "assignments": [{"unresolved": True}]}]} + self.assertTrue(BVControlCenterNode.VALIDATE_INPUTS(json.dumps(config))) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_dynamic_combo.py b/tests/test_dynamic_combo.py new file mode 100644 index 0000000..7543949 --- /dev/null +++ b/tests/test_dynamic_combo.py @@ -0,0 +1,22 @@ +import unittest + +from py.nodes.bv_subgraph_dynamic_combo import BVDynamicCombo + + +class DynamicComboTests(unittest.TestCase): + def test_rejects_stale_selection(self): + with self.assertRaisesRegex(Exception, "not present"): + BVDynamicCombo().run("old", "new") + + def test_rejects_duplicate_options(self): + with self.assertRaisesRegex(Exception, "duplicate"): + BVDynamicCombo().run("one", "one\none") + + def test_rejects_non_finite_connected_float(self): + prompt = {"consumer": {"inputs": {"value": ["combo", 2]}}} + with self.assertRaisesRegex(Exception, "finite"): + BVDynamicCombo().run("NaN", "NaN", prompt=prompt, unique_id="combo") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_hex_color.py b/tests/test_hex_color.py new file mode 100644 index 0000000..c436aa9 --- /dev/null +++ b/tests/test_hex_color.py @@ -0,0 +1,32 @@ +import importlib.util +from pathlib import Path +import unittest + + +MODULE_PATH = Path(__file__).parents[1] / "py" / "nodes" / "bv_util_hex_color_int.py" +SPEC = importlib.util.spec_from_file_location("bv_hex_color", MODULE_PATH) +HEX_COLOR = importlib.util.module_from_spec(SPEC) +SPEC.loader.exec_module(HEX_COLOR) + + +class HexColorTests(unittest.TestCase): + def setUp(self): + self.node = HEX_COLOR.BVHexColorToInt() + + def test_expands_short_rgb(self): + self.assertEqual(self.node.run("#3af"), (0x33AAFF,)) + self.assertEqual(self.node.run("3AF"), (0x33AAFF,)) + + def test_keeps_supported_six_digit_formats(self): + self.assertEqual(self.node.run("#12abEF"), (0x12ABEF,)) + self.assertEqual(self.node.run("0x12abef"), (0x12ABEF,)) + + def test_rejects_alpha_and_invalid_values(self): + for value in ("#12345678", "#12", "not-a-color"): + with self.subTest(value=value): + with self.assertRaises(ValueError): + self.node.run(value) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_latent_dimensions.py b/tests/test_latent_dimensions.py new file mode 100644 index 0000000..a750935 --- /dev/null +++ b/tests/test_latent_dimensions.py @@ -0,0 +1,35 @@ +import unittest + +from py.util.latent_dimensions import combine_ratios, dimensions_for_area, parse_ratios + + +class LatentDimensionTests(unittest.TestCase): + def test_normalizes_ratios(self): + self.assertEqual([(16, 9), (1, 1)], parse_ratios("32:18\n1:1")) + + def test_rejects_normalized_duplicates(self): + with self.assertRaisesRegex(ValueError, "Duplicate aspect ratio"): + parse_ratios("16:9\n32:18") + + def test_requires_a_ratio(self): + with self.assertRaisesRegex(ValueError, "At least one"): + parse_ratios("\n \n") + + def test_combines_standard_and_custom_ratios(self): + self.assertEqual([(1, 1), (16, 9), (5, 4)], combine_ratios([(1, 1), (16, 9)], "5:4")) + + def test_combined_ratios_ignore_custom_standard_duplicates(self): + self.assertEqual([(1, 1), (16, 9)], combine_ratios([(1, 1)], "1:1\n16:9")) + + def test_combined_ratios_require_one_enabled_value(self): + with self.assertRaisesRegex(ValueError, "enabled or entered"): + combine_ratios([], "") + + def test_preserves_approximate_square_area_and_alignment(self): + width, height = dimensions_for_area(1024, (16, 9), 64) + self.assertEqual((1344, 768), (width, height)) + self.assertLess(abs(width * height - 1024 * 1024), 0.02 * 1024 * 1024) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_prompt_category.py b/tests/test_prompt_category.py new file mode 100644 index 0000000..3dcff54 --- /dev/null +++ b/tests/test_prompt_category.py @@ -0,0 +1,50 @@ +import importlib.util +from pathlib import Path +import unittest + + +MODULE_PATH = Path(__file__).parents[1] / "py" / "util" / "prompt" / "category.py" +SPEC = importlib.util.spec_from_file_location("bv_prompt_category", MODULE_PATH) +CATEGORY = importlib.util.module_from_spec(SPEC) +SPEC.loader.exec_module(CATEGORY) + + +class PromptCategoryTests(unittest.TestCase): + def test_comment_removal_preserves_line_break(self): + ast = CATEGORY.parse_prompt_to_ast("red dress ## note\ncinematic lighting") + + self.assertEqual( + CATEGORY.ast_to_plain_text(ast), + "red dress \ncinematic lighting", + ) + self.assertEqual( + CATEGORY.ast_to_plain_text(ast, include_comments=True), + "red dress ## note\ncinematic lighting", + ) + + def test_unclosed_inline_category_reports_location(self): + with self.assertRaisesRegex( + ValueError, + "Unclosed inline category 'face' opened at line 1, column 1", + ): + CATEGORY.parse_prompt_to_ast("@portrait") + + def test_block_directive_rejects_open_inline_category(self): + with self.assertRaisesRegex(ValueError, "before block directive on line 2"): + CATEGORY.parse_prompt_to_ast("@portrait\n@@style\ncinematic") + + def test_unexpected_inline_closer_reports_location(self): + with self.assertRaisesRegex( + ValueError, + "Unexpected inline category closer '@@' at line 1, column 10", + ): + CATEGORY.parse_prompt_to_ast("portrait @@") + + def test_standalone_default_block_directive_remains_valid(self): + ast = CATEGORY.parse_prompt_to_ast("@@\nplain") + + self.assertEqual(CATEGORY.ast_to_plain_text(ast), "plain") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_smart_pipe.py b/tests/test_smart_pipe.py new file mode 100644 index 0000000..de0d123 --- /dev/null +++ b/tests/test_smart_pipe.py @@ -0,0 +1,28 @@ +import json +import unittest + +from py.nodes.bv_smart_pipe import BVSmartPipe + + +class SmartPipeTests(unittest.TestCase): + def test_values_follow_slot_ids_across_chain(self): + schema = [ + {"id": "model-id", "name": "model", "ordinal": 1}, + {"id": "image-id", "name": "image", "ordinal": 2}, + ] + first_route = json.dumps({"nodeId": "first", "name": "Pipe"}) + second_route = json.dumps({"nodeId": "second", "name": "Pipe_1"}) + first = BVSmartPipe().run(json.dumps(schema), first_route, v_001="model-a", v_002="image-a")[0] + second = BVSmartPipe().run(json.dumps(schema), second_route, pipe=first, v_002="image-b")[0] + self.assertEqual({"model-id": "model-a", "image-id": "image-b"}, second["values"]) + self.assertEqual({"model-id": "first", "image-id": "second"}, second["writers"]) + + def test_missing_connected_slot_blocks_validation(self): + schema = [{"id": "gone", "name": "image", "ordinal": 1, "missing": True, "connected": True}] + route = json.dumps({"nodeId": "pipe", "name": "Pipe"}) + result = BVSmartPipe.VALIDATE_INPUTS(json.dumps(schema), route) + self.assertIn("still used", result) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_smart_pipe_merge.py b/tests/test_smart_pipe_merge.py new file mode 100644 index 0000000..e2d9157 --- /dev/null +++ b/tests/test_smart_pipe_merge.py @@ -0,0 +1,96 @@ +import unittest + +from py.nodes.bv_smart_pipe_merge import BVSmartPipeMerge, merge_smart_pipes + + +def pipe(schema, values, writers, provenance=None): + result = {"version": 2, "schema": schema, "values": values, "writers": writers} + if provenance is not None: + result["provenance"] = provenance + return result + + +class SmartPipeMergeTests(unittest.TestCase): + def test_later_sources_win_for_the_same_stable_id(self): + first = pipe( + [{"id": "image", "name": "image", "ordinal": 1, "type": "IMAGE"}], + {"image": "base"}, + {"image": "writer-a"}, + ) + second = pipe( + [{"id": "image", "name": "image", "ordinal": 4, "type": "IMAGE"}], + {"image": "detail"}, + {"image": "writer-b"}, + ) + merged = merge_smart_pipes([first, second]) + self.assertEqual(merged["values"]["image"], "detail") + self.assertEqual(merged["writers"]["image"], "writer-b") + self.assertEqual(merged["schema"][0]["ordinal"], 1) + + def test_compatible_slots_with_the_same_name_are_coalesced(self): + first = pipe( + [{"id": "image-a", "name": "image", "ordinal": 1, "type": "IMAGE"}], + {"image-a": "a"}, + {"image-a": "writer-a"}, + ) + second = pipe( + [{"id": "image-b", "name": "image", "ordinal": 1, "type": "IMAGE"}], + {"image-b": "b"}, + {"image-b": "writer-b"}, + ) + merged = merge_smart_pipes([first, second]) + self.assertEqual([slot["name"] for slot in merged["schema"]], ["image"]) + self.assertEqual(merged["values"], {"image-a": "b"}) + + def test_same_name_with_incompatible_types_remains_separate(self): + first = pipe( + [{"id": "value-a", "name": "value", "ordinal": 1, "type": "STRING"}], + {"value-a": "text"}, + {"value-a": "writer-a"}, + ) + second = pipe( + [{"id": "value-b", "name": "value", "ordinal": 1, "type": "IMAGE"}], + {"value-b": "image"}, + {"value-b": "writer-b"}, + ) + merged = merge_smart_pipes([first, second]) + self.assertEqual([slot["name"] for slot in merged["schema"]], ["value", "value_2"]) + + def test_inherited_base_does_not_overwrite_a_genuine_branch_write(self): + schema = [{"id": "x", "name": "x", "ordinal": 1}] + changed = pipe(schema, {"x": "changed"}, {"x": "branch-a"}, {"x": ["root", "branch-a"]}) + inherited = pipe(schema, {"x": "base"}, {"x": "root"}, {"x": ["root"]}) + merged = merge_smart_pipes([changed, inherited]) + self.assertEqual(merged["values"]["x"], "changed") + self.assertEqual(merged["writers"]["x"], "branch-a") + + def test_later_divergent_branch_write_still_wins(self): + schema = [{"id": "x", "name": "x", "ordinal": 1}] + first = pipe(schema, {"x": "a"}, {"x": "branch-a"}, {"x": ["root", "branch-a"]}) + second = pipe(schema, {"x": "b"}, {"x": "branch-b"}, {"x": ["root", "branch-b"]}) + merged = merge_smart_pipes([first, second]) + self.assertEqual(merged["values"]["x"], "b") + self.assertEqual(merged["writers"]["x"], "branch-b") + + def test_node_uses_explicit_source_order(self): + first = pipe([{"id": "x", "name": "x", "ordinal": 1}], {"x": 1}, {"x": "a"}) + second = pipe([{"id": "x", "name": "x", "ordinal": 1}], {"x": 2}, {"x": "b"}) + result = BVSmartPipeMerge().run( + '[{"key":"pipe_002"},{"key":"pipe_001"}]', + pipe_001=first, + pipe_002=second, + )[0] + self.assertEqual(result["values"]["x"], 1) + self.assertEqual(result["writers"]["x"], "a") + + def test_configured_missing_source_fails_closed(self): + with self.assertRaisesRegex(ValueError, "pipe_001"): + BVSmartPipeMerge().run('[{"key":"pipe_001","mode":"wireless"}]') + + def test_duplicate_source_addresses_are_rejected(self): + config = '[{"key":"pipe_001","address":"root/a"},{"key":"pipe_002","address":"root/a"}]' + self.assertIn("same source", BVSmartPipeMerge.VALIDATE_INPUTS(config)) + + +if __name__ == "__main__": + unittest.main() diff --git a/ui/package-lock.json b/ui/package-lock.json index b946bc9..0faf603 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "bv_nodepack", - "version": "1.0.6", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "bv_nodepack", - "version": "1.0.6", + "version": "1.1.0", "dependencies": { "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/ui/package.json b/ui/package.json index ccf6a8a..2369b22 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,7 +1,7 @@ { "name": "bv_nodepack", "private": true, - "version": "1.0.6", + "version": "1.1.0", "type": "module", "scripts": { "build": "vite build", diff --git a/ui/src/components/BVPortal.tsx b/ui/src/components/BVPortal.tsx index 563779e..de9205b 100644 --- a/ui/src/components/BVPortal.tsx +++ b/ui/src/components/BVPortal.tsx @@ -1,7 +1,5 @@ import {FC, useEffect, useMemo} from "react"; import * as React from 'react'; -import { getApp } from "../appHelper.js"; -import {collectAllGroups} from "../util/control/collector"; import BVControl from "./control/BVControlComponent"; interface IBVPortalProps { @@ -10,10 +8,7 @@ interface IBVPortalProps { children: React.ReactNode; } -const BvPortal: FC = ({open, onClose, children}) => { - - const comfyApp = getApp(); - +const BvPortal: FC = ({open, onClose}) => { const el = useMemo(() => document.createElement("div"), []); useEffect(() => { @@ -38,44 +33,20 @@ const BvPortal: FC = ({open, onClose, children}) => { return (

    ); }; diff --git a/ui/src/components/control/BVControlComponent.tsx b/ui/src/components/control/BVControlComponent.tsx index 383d45d..3066f44 100644 --- a/ui/src/components/control/BVControlComponent.tsx +++ b/ui/src/components/control/BVControlComponent.tsx @@ -1,98 +1,60 @@ -import * as React from 'react'; -import {BVControlRow, readConfig, writeConfig} from "../../util/control/configHandler"; +import * as React from "react"; +import { FC, useMemo, useState } from "react"; +import { getApp } from "../../appHelper"; +import { collectAllGroups } from "../../util/control/collector"; +import { BVControl, BVControlConfig, readConfig, writeConfig } from "../../util/control/configHandler"; +import { findActiveControlConflicts } from "../../util/control/controlCenterModel.js"; import BVControlRowComponent from "./BVControlRowComponent"; -import {FC, useMemo} from "react"; -import {getApp} from "../../appHelper"; -import {collectAllGroups} from "../../util/control/collector"; -const BVControlComponent: FC<{onClose() : void}> = ({onClose}) => { +function id() { + return globalThis.crypto?.randomUUID?.() ?? `bv-control-${Date.now()}-${Math.random().toString(16).slice(2)}`; +} - const [config, setConfig] = React.useState(readConfig()); - const comfyApp = getApp(); - const groups = useMemo(() => collectAllGroups(comfyApp), [comfyApp, config]); +const BVControlComponent: FC<{ onClose(): void }> = ({ onClose }) => { + const [config, setConfig] = useState(() => { + const current = readConfig(); + const available = new Set(collectAllGroups(getApp()).map((group) => group.id)); + return { + ...current, + controls: current.controls.map((control) => ({ + ...control, + assignments: control.assignments.map((assignment) => ({ ...assignment, unresolved: !available.has(assignment.groupId) })), + })), + }; + }); + const groups = useMemo(() => collectAllGroups(getApp()), [config]); + const conflicts = useMemo(() => findActiveControlConflicts(config), [config]); + const updateControl = (index: number, control: BVControl | null) => { + setConfig({ ...config, controls: control ? config.controls.map((item, itemIndex) => itemIndex === index ? control : item) : config.controls.filter((_, itemIndex) => itemIndex !== index) }); + }; + const addControl = () => { + let name = "New Control"; + let suffix = 2; + while (config.controls.some((control) => control.name === name)) name = `New Control ${suffix++}`; + setConfig({ ...config, controls: [...config.controls, { id: id(), name, enabled: true, assignments: [] }] }); + }; + const save = () => { + const names = config.controls.map((control) => control.name.trim()); + if (names.some((name) => !name) || new Set(names).size !== names.length) return; + const available = new Set(groups.map((group) => group.id)); + const resolved = { + ...config, + controls: config.controls.map((control) => ({ + ...control, + name: control.name.trim(), + assignments: control.assignments.map((assignment) => ({ ...assignment, unresolved: !available.has(assignment.groupId) })), + })), + }; + writeConfig(resolved); + setConfig(resolved); + }; - const addRow = () => { - if (config) { - const baseTitle = "New Row"; - let newTitle = baseTitle; - let counter = 1; - while (config.rows.some(r => r.title === newTitle)) { - newTitle = `${baseTitle} ${counter}`; - counter++; - } - setConfig({rows: [...config.rows, {title: newTitle, entries: []}]}); - } else { - setConfig({rows: [{title: "New Row", entries: []}]}); - } - } - - const saveConfig = () => { - writeConfig(config); - } - - const clearConfig = () => { - writeConfig(null); - setConfig(null); - } - - const onChange = (index: number, row: BVControlRow, del: boolean) => { - if (config) { - if (del) { - setConfig({...config, rows: config.rows.filter((_, i) => i !== index)}); - }else{ - // Prevent duplicate titles - const isDuplicate = config.rows.some((r, i) => i !== index && r.title === row.title); - if (isDuplicate) { - // Option 1: Just don't update if it's a duplicate title - // But we might want to update other parts of the row (entries) - // So we only block if the title specifically is being changed to a duplicate - const oldRow = config.rows[index]; - if (oldRow.title !== row.title) { - // Title changed and it's a duplicate. We could revert the title or auto-increment it. - // For now, let's just not update the title if it's a duplicate. - // Or better: call a function that makes it unique. - let uniqueTitle = row.title; - let counter = 1; - while (config.rows.some((r, i) => i !== index && r.title === uniqueTitle)) { - uniqueTitle = `${row.title} ${counter}`; - counter++; - } - row = {...row, title: uniqueTitle}; - } - } - setConfig({...config, rows: config.rows.map((r, i) => i === index ? row : r)}); - } - } - } - - const cols = (config?.rows.reduce((m, r) => Math.max(m, r.entries.length), 0) ?? 0) + 3; - - return ( -
    - {config && -
    - {Array.from({length: cols}, (_, i) => { - if (i === 0) return
    Title
    ; - if (i === cols - 1) return
    ; - return
    Selection {i}
    ; - })} - - {config.rows.map((row, i) => ( - - ))} -
    - } -
    - - - - -
    -
    - ); + return
    +

    BV Control Rack

    User-defined workflow states

    + +
    {config.controls.map((control, index) => updateControl(index, value)} />)}
    +
    +
    ; }; export default BVControlComponent; diff --git a/ui/src/components/control/BVControlRowComponent.tsx b/ui/src/components/control/BVControlRowComponent.tsx index ec892d2..596863d 100644 --- a/ui/src/components/control/BVControlRowComponent.tsx +++ b/ui/src/components/control/BVControlRowComponent.tsx @@ -1,107 +1,34 @@ -import {FC, useEffect} from "react"; -import {BVControlEntry} from "../../util/control/configHandler"; -import * as React from 'react'; -import {BVControlRow} from "../../util/control/configHandler"; -import {CollectedGroup} from "../../util/control/collector"; +import * as React from "react"; +import { FC } from "react"; +import { CollectedGroup } from "../../util/control/collector"; +import { BVControl, BVControlAction } from "../../util/control/configHandler"; +import type { BVControlConflict } from "../../util/control/controlCenterModel.js"; -const BvControlRowComponent: FC<{ index: number, row: BVControlRow, maxCols: number, onChange(index: number, row: BVControlRow, del: boolean): void, groups: CollectedGroup[]}> = ({index, row, maxCols, onChange, groups}) => { - - useEffect(() => { - const groupTitles = groups.map(g => g.group.title); - const validEntries = row.entries.filter(entry => { - if (entry.kind === "group") { - return groupTitles.includes(entry.ref.title); - } - return true; - }); - - if (validEntries.length !== row.entries.length) { - onChange(index, {...row, entries: validEntries}, false); - } - }, [groups, row.entries, index, onChange, row.title]); - - const onSelectedChange = (entryIndex: number | null, value: string) => { - if (entryIndex === null) { - const newEntry: BVControlEntry = { - kind: "group", - ref: { - title: value - }, - action: "bypass" - }; - onChange(index, {...row, entries: [...row.entries, newEntry]}, false); - return - } - - if (value == "Nothing Selected") { - onChange(index, {...row, entries: row.entries.filter((_, i) => i !== entryIndex)}, false); - return - } - const currentEntry = row.entries[entryIndex]; - const newEntry: BVControlEntry = { - ...currentEntry, - kind: "group", - ref: { - title: value - } - }; - onChange(index, {...row, entries: [...row.entries.slice(0, entryIndex), newEntry, ...row.entries.slice(entryIndex + 1)]}, false); - } - - const onActionChange = (entryIndex: number, action: BVControlEntry["action"]) => { - const currentEntry = row.entries[entryIndex]; - const newEntry: BVControlEntry = { - ...currentEntry, - action: action - }; - onChange(index, {...row, entries: [...row.entries.slice(0, entryIndex), newEntry, ...row.entries.slice(entryIndex + 1)]}, false); - } - - return ( - <> -
    - onChange(index, {...row, title: e.target.value}, false)}/> -
    - {row.entries.map((entry, i) => ( -
    - - -
    - ))} -
    - -
    - {Array.from({length: maxCols - row.entries.length - 3}).map((_, i) => ( -
    - ))} -
    - -
    - - ); +const BVControlRowComponent: FC<{ control: BVControl; groups: CollectedGroup[]; conflicts: BVControlConflict[]; onChange(value: BVControl | null): void }> = ({ control, groups, conflicts, onChange }) => { + const actionLabel = (action: string) => action.charAt(0).toUpperCase() + action.slice(1); + const addAssignment = (groupId: string) => { + const group = groups.find((item) => item.id === groupId); + if (!group || control.assignments.some((item) => item.groupId === groupId)) return; + onChange({ ...control, assignments: [...control.assignments, { groupId, groupPath: group.pathLabel, groupTitle: String(group.group.title || ""), action: "bypass" }] }); + }; + return
    +
    onChange({ ...control, name: event.target.value })} />{control.assignments.length} groups
    +
    {control.assignments.map((assignment, index) => { + const conflict = conflicts.find((item) => item.groupId === assignment.groupId); + const winnerNames = conflict?.entries.filter((entry) => entry.action === conflict.winnerAction).map((entry) => entry.controlName).join(", "); + const conflictText = conflict + ? assignment.action === conflict.winnerAction + ? `Overrides ${[...new Set(conflict.entries.filter((entry) => entry.action !== conflict.winnerAction).map((entry) => actionLabel(entry.action)))].join(", ")}` + : `Overridden by ${actionLabel(conflict.winnerAction)} from ${winnerNames}` + : ""; + return
    + {assignment.unresolved ? "⚠ " : ""}{assignment.groupPath}{conflictText && ⚠ {conflictText}} + + +
    ; + })}
    + +
    ; }; -export default BvControlRowComponent; +export default BVControlRowComponent; diff --git a/ui/src/components/control/bv_control_center.ts b/ui/src/components/control/bv_control_center.ts index 253ba41..ee2d926 100644 --- a/ui/src/components/control/bv_control_center.ts +++ b/ui/src/components/control/bv_control_center.ts @@ -1,585 +1,196 @@ -import {getApp} from "../../appHelper.js"; -import {BVControlConfig, BVControlEntry, readConfig} from "../../util/control/configHandler"; -import {IBaseWidget, LGraphNode, Subgraph, SubgraphNode} from "../../types/comfyui-frontend-types.augment"; -import { - bypassGroupsByTitle, - muteGroupsByTitle, - unbypassGroupsByTitle, - unmuteGroupsByTitle -} from "../../util/control/stateHandler"; -import { - crawlSubgraphForNode, - getNodeHelper, - getWidgetValue, - showErrorToast -} from "../../util/control/controlHelper"; -import { - ensureSubgraphContainerPatchedFromInnerNodeRetry, findAllSubgraphContainers, getOuterNode, - patchSubgraphContainerPrototype, - renameSubGraphInputSlot -} from "../../util/control/subgraphHandler"; -import {patchGraphAddSingletonGuard} from "../../util/control/singletonHandler"; +import { getApp } from "../../appHelper.js"; +import { collectAllGroups, collectNodesByType, nodeMatchesType } from "../../util/control/collector"; +import { BVControlConfig, CONFIG_CHANGED_EVENT, readConfig, writeConfig } from "../../util/control/configHandler"; +import { findActiveControlConflicts, formatControlConflictStatus, nodesInControlGroup } from "../../util/control/controlCenterModel.js"; -const ACTIVE = "ACTIVE"; -const MUTE = "MUTE/BYPASS"; +const NODE_CLASS = "BV Control Center"; +const NORMAL = 0; +const MUTE = 2; +const BYPASS = 4; +const BASE_MODE = "bvControlBaseMode"; +const OPEN_CONTROL_RACK_EVENT = "bv-open-control-rack"; +const CONTROL_CENTER_MIN_WIDTH = 320; +const CONTROL_CENTER_WIDTH_BUFFER = 48; +const CONTROL_STATUS_WIDGET = "bv_control_conflict_status"; +const previouslyControlled = new Set(); -const comfyApp = getApp(); - -let configWatcherStarted = false; - -function startConfigWatcher() { - if (configWatcherStarted) return; - configWatcherStarted = true; - - let config = readConfig(); - if (config) { - updateControlNodes(config); - } - - setInterval(() => { - const newConfig = readConfig(); - if (!newConfig) return; - - if (JSON.stringify(newConfig) !== JSON.stringify(config)) { - config = newConfig; - updateControlNodes(config); - } - }, 500); +function restrictionForAction(action: "activate" | "bypass" | "mute") { + if (action === "activate") return { mode: NORMAL, priority: 3 }; + if (action === "mute") return { mode: MUTE, priority: 2 }; + return { mode: BYPASS, priority: 1 }; } -function hookSubgraphWidgetChanged(node: SubgraphNode, name?: string) { - let found = false - let foundNode: LGraphNode | undefined; - - node.subgraph.inputs.forEach((input) => { - input.getLinks().forEach((link) => { - if (!found) { - foundNode = getNodeHelper(link.target_id as number, node.graph) - if (!found && foundNode?.type == "BV Control Center") { - found = true - } - } - }) - }) - - if (!foundNode) { - return - } - - const config = readConfig(); - if (!config) return; - - let retries = 0; - const maxRetries = 200; - const retry = () => { - const success = updateSingleControlNode(foundNode, config, undefined, true, name); - if (success || retries >= maxRetries) { - return; - } - retries++; - setTimeout(retry, 10); +function configForValidation(config: BVControlConfig): BVControlConfig { + const available = new Set(collectAllGroups(getApp()).map((group) => group.id)); + return { + ...config, + controls: config.controls.map((control) => ({ + ...control, + assignments: control.assignments.map((assignment) => ({ ...assignment, unresolved: !available.has(assignment.groupId) })), + })), }; - - retry(); } -function updateSingleControlNode(node: any, config: BVControlConfig, savedValuesOverride?: any[], overrideValue: boolean = true, name?: string): boolean { - if (!node || !config) return false; +function nodesInGroup(item: any): any[] { + return nodesInControlGroup(item, (node: any) => nodeMatchesType(node, NODE_CLASS)); +} - let changed = false; - if (!node.widgets) node.widgets = []; +function applyConfig(config: BVControlConfig) { + for (const node of previouslyControlled) { + const base = node.properties?.[BASE_MODE]; + node.mode = config.forceActive ? NORMAL : typeof base === "number" ? base : node.mode; + if (node.properties) delete node.properties[BASE_MODE]; + node.setDirtyCanvas?.(true, true); + } + previouslyControlled.clear(); - // Prefer workflow-loaded values - // @ts-ignore - const savedValues = savedValuesOverride ?? node.widgets_values; + const groups = new Map(collectAllGroups(getApp()).map((item) => [item.id, item])); + const restrictions = new Map(); + for (const control of config.controls) { + if (!control.enabled) continue; + for (const assignment of control.assignments) { + const group = groups.get(assignment.groupId); + if (!group) continue; + for (const node of nodesInGroup(group)) { + const restriction = restrictionForAction(assignment.action); + const current = restrictions.get(node); + if (!current || restriction.priority > current.priority) restrictions.set(node, restriction); + } + } + } + for (const [node, restriction] of restrictions) { + node.properties ??= {}; + if (typeof node.properties[BASE_MODE] !== "number") node.properties[BASE_MODE] = typeof node.mode === "number" ? node.mode : NORMAL; + node.mode = restriction.mode; + previouslyControlled.add(node); + node.setDirtyCanvas?.(true, true); + } +} - const desiredCount = config.rows.length; +function removeControlPort(node: any, index: number) { + const input = node.inputs[index]; + const widget = node.widgets?.find((item: any) => item.name === input.name); + if (widget) node.removeWidget?.(widget); + if (input.link != null) node.disconnectInput(index); + node.removeInput(index); +} - - // Ensure enough inputs - while (node.inputs.length < desiredCount) { - const i = node.inputs.length; - const inputName = `bvcc_${String(i).padStart(3, "0")}`; - const label = config.rows[i].title; - - node.addInput(inputName, "BOOLEAN", { - label, - nameLocked: true, - default: true, - widget: {name: inputName} +function syncConflictStatus(node: any, config: BVControlConfig) { + const conflicts = findActiveControlConflicts(config); + const value = formatControlConflictStatus(conflicts); + let widget = node.widgets?.find((item: any) => item.name === CONTROL_STATUS_WIDGET); + if (!widget) { + widget = node.addCustomWidget({ + name: CONTROL_STATUS_WIDGET, + type: "custom", + value, + y: 0, + options: {}, + serialize: false, + computeSize: () => [0, 24], + computeLayoutSize: () => ({ minHeight: 24, maxHeight: 24, minWidth: CONTROL_CENTER_MIN_WIDTH }), + mouse: () => false, + draw(ctx: CanvasRenderingContext2D, _node: any, width: number, y: number, height: number) { + ctx.save(); + ctx.beginPath(); + ctx.rect(10, y, Math.max(0, width - 20), height); + ctx.clip(); + ctx.fillStyle = this.__bvHasConflict ? "#ffbd66" : "#8fc9a3"; + ctx.font = "12px sans-serif"; + ctx.textBaseline = "middle"; + ctx.fillText(String(this.value ?? ""), 14, y + height / 2); + ctx.restore(); + }, }); - - const initialValue = (savedValues && savedValues[i] !== undefined) ? savedValues[i] : true; - const w = node.addWidget("toggle", inputName, initialValue, () => node.setDirtyCanvas(true), {on: ACTIVE, off: MUTE}); - w.label = label; - w.serialize = true; - - // @ts-ignore - node.inputs[i]._widget = w; - changed = true; } - - // Remove extra inputs - while (node.inputs.length > desiredCount) { - const i = node.inputs.length - 1; - const inputName = `bvcc_${String(i).padStart(3, "0")}`; - - const wi = node.widgets?.findIndex((w: any) => w.name === inputName) ?? -1; - if (wi !== -1) node.widgets.splice(wi, 1); - - if (node.isInputConnected(i)) node.disconnectInput(i); - node.removeInput(i); - changed = true; - } - - let allSlotsRenamed = true; - // Sync labels + widget values + link input<->widget - for (let i = 0; i < desiredCount; i++) { - let label = config.rows[i].title; - - const inputName = `bvcc_${String(i).padStart(3, "0")}`; - - if (node.inputs[i]?.label !== label) { - node.inputs[i].label = label; - changed = true; - } - - let w = node.widgets.find((ww: any) => ww.name === inputName); - if (!w) { - const initialValue = (savedValues && savedValues[i] !== undefined) ? savedValues[i] : true; - w = node.addWidget("toggle", inputName, initialValue, () => node.setDirtyCanvas(true), {on: ACTIVE, off: MUTE}); - w.serialize = true; - w.label = label; - changed = true; - } else { - if (w.options) { - if (w.options.on !== ACTIVE || w.options.off !== MUTE) { - w.options.on = ACTIVE; - w.options.off = MUTE; - changed = true; - } - } - if (overrideValue && savedValues && savedValues[i] !== undefined && w.value !== savedValues[i]) { - w.value = savedValues[i]; - w.label = label; - changed = true; - } - } - - if (node.inputs[i]) { - node.inputs[i].widget = {name: inputName}; - // @ts-ignore - node.inputs[i]._widget = w; - } - - - const ccNode = getNodeHelper(node.id, node.graph) - if(ccNode){ - const ccInput = ccNode.inputs[i] - const ccLink = ccNode.getInputLink(i) - if(ccLink && ccNode.graph){ - setTimeout(() => { - const graphNode = getOuterNode(ccNode) - if(graphNode) { - const graphWidgets = graphNode.widgets - if(graphWidgets){ - const graphWidget = graphWidgets[ccLink.origin_slot] - if(graphWidget){ - graphWidget.label = label - } - } - } - - - - }, 50) - - } - } - - const gNode = getNodeHelper(node.id, node.graph) - - if (gNode) { - let success = false - - success = renameSubGraphInputSlot(node, i, label) - - if (!success) { - allSlotsRenamed = false; - } - } else { - allSlotsRenamed = false; - } - } - - if (changed) { - node.serialize_widgets = true; - node.setDirtyCanvas(true, true); - node.size = node.computeSize?.() ?? node.size; - } - - return allSlotsRenamed; + widget.value = value; + widget.__bvHasConflict = conflicts.length > 0; + widget.tooltip = conflicts.map((conflict: any) => `${conflict.groupPath}: ${conflict.winnerAction} wins`).join("\n"); } -function updateControlNodes(config: BVControlConfig, savedValuesOverride?: any[]) { - const app = getApp(); - const graph = app.rootGraph; - if (!graph?.nodes || !config) return; +function syncNode(node: any, config: BVControlConfig) { + node.mode = NORMAL; + if (node.properties) delete node.properties[BASE_MODE]; - const controlNodes = crawlSubgraphForNode(graph.nodes); + let configureWidget = node.widgets?.find((item: any) => item.name === "configure_control_center"); + if (!configureWidget) configureWidget = node.addWidget("button", "configure_control_center", null, () => window.dispatchEvent(new Event(OPEN_CONTROL_RACK_EVENT)), { serialize: false }); + configureWidget.label = "Configure Control Center"; + configureWidget.serialize = false; - controlNodes.forEach((node) => { - let changed = false; - - if (!node.widgets) node.widgets = []; - - // @ts-ignore - const savedValues = savedValuesOverride ?? node.widgets_values; - - const commonCount = Math.min(node.inputs.length, config.rows.length); - for (let i = 0; i < commonCount; i++) { - let label = config.rows[i].title; - - const inputName = `bvcc_${String(i).padStart(3, "0")}`; - - if (node.inputs[i].label !== label) { - node.inputs[i].label = label; - changed = true; - } - - let widget = node.widgets.find(w => w.name === inputName); - if (!widget) { - const initialValue = (savedValues && savedValues[i] !== undefined) ? savedValues[i] : true; - widget = node.addWidget("toggle", inputName, initialValue, () => node.setDirtyCanvas(true), {on: ACTIVE, off: MUTE}); - widget.serialize = true; - changed = true; - } else { - // Apply saved value on load as well - if (savedValues && savedValues[i] !== undefined && widget.value !== savedValues[i]) { - widget.value = savedValues[i]; - changed = true; - } - if (widget.options) { - if (widget.options.on !== ACTIVE || widget.options.off !== MUTE) { - widget.options.on = ACTIVE; - widget.options.off = MUTE; - changed = true; - } - } - } - - node.inputs[i].widget = {name: inputName} as any; - // @ts-ignore - node.inputs[i]._widget = widget; - - renameSubGraphInputSlot(node, i, label) - } - - if (node.inputs.length > config.rows.length) { - for (let i = node.inputs.length - 1; i >= config.rows.length; i--) { - const inputName = `bvcc_${String(i).padStart(3, "0")}`; - const widgetIndex = node.widgets?.findIndex(w => w.name === inputName) ?? -1; - if (widgetIndex !== -1) node.widgets.splice(widgetIndex, 1); - if (node.isInputConnected(i)) node.disconnectInput(i); - node.removeInput(i); - changed = true; - } - } else if (node.inputs.length < config.rows.length) { - for (let i = node.inputs.length; i < config.rows.length; i++) { - let label = config.rows[i].title; - const inputName = `bvcc_${String(i).padStart(3, "0")}`; - - node.addInput(inputName, "BOOLEAN", { - label, - nameLocked: true, - default: true, - widget: {name: inputName} - }); - - const initialValue = (savedValues && savedValues[i] !== undefined) ? savedValues[i] : true; - const widget = node.addWidget("toggle", inputName, initialValue, () => node.setDirtyCanvas(true), {on: ACTIVE, off: MUTE}); - widget.serialize = true; - - // @ts-ignore - node.inputs[i]._widget = widget; - changed = true; - } - } - - if (changed) { - node.serialize_widgets = true; - node.setDirtyCanvas(true, true); - node.size = node.computeSize(); - } - }); -} - -function hookWidgetChanged(node: any) { - if (node.__bv_onWidgetChanged_patched) return; - node.__bv_onWidgetChanged_patched = true; - - const original = node.onWidgetChanged; - - node.onWidgetChanged = function (name: string, value: any, old_value: any, widget: IBaseWidget) { - let r; - try { - // @ts-ignore - r = original?.apply(this, arguments); - } catch { - } - - const config = readConfig(); - if (config) { - const index = node.widgets.indexOf(widget); - const title = (index !== -1 && node.inputs[index]) ? node.inputs[index].label : widget.label; - if (!title) return; - executeChange(title, value); - // updateSingleControlNode(node, config, undefined, false); - } - - return r + const desiredNames = new Set(config.controls.map((control) => `bvcc_${control.id}`)); + for (let index = node.inputs.length - 1; index >= 0; index--) { + const input = node.inputs[index]; + if (input.name.startsWith("bvcc_") && !desiredNames.has(input.name)) removeControlPort(node, index); } -} - -function normalizeGroupTitle(entry: BVControlEntry) { - return entry.ref.title -} - -function normalizeAction(value: "bypass" | "mute") { - const v = (value ?? "").toString().toLowerCase().trim(); - return v === "bypass" ? "bypass" : "mute"; -} - -function applyEntry(groupTitle: string, action: "bypass" | "mute", enabled: boolean) { - if (!groupTitle) return; - const appOrGraph = getApp() - - const a = normalizeAction(action); - - if (a === "bypass") { - if (enabled) bypassGroupsByTitle(appOrGraph, groupTitle, "overlap"); - else unbypassGroupsByTitle(appOrGraph, groupTitle, "overlap"); - return; + for (const control of config.controls) { + const name = `bvcc_${control.id}`; + const onToggle = (value: boolean) => { + const latest = readConfig(); + const next = { ...latest, controls: latest.controls.map((item) => item.id === control.id ? { ...item, enabled: Boolean(value) } : item) }; + writeConfig(next); + }; + let input = node.inputs.find((item: any) => item.name === name); + if (!input) input = node.addInput(name, "BOOLEAN", { label: control.name, nameLocked: true, widget: { name } }); + input.label = control.name; + let widget = node.widgets?.find((item: any) => item.name === name); + if (widget && !widget.__bvControlCallbackBound) { + node.removeWidget?.(widget); + widget = null; + } + if (!widget) widget = node.addWidget("toggle", name, control.enabled, onToggle, { on: "ACTIVE", off: "INACTIVE" }); + widget.__bvControlCallbackBound = true; + widget.label = control.name; + widget.value = control.enabled; + widget.serialize = true; + widget.options ??= {}; + widget.options.on = "ACTIVE"; + widget.options.off = "INACTIVE"; + widget.callback = onToggle; + input.widget = { name }; } - - if (enabled) muteGroupsByTitle(appOrGraph, groupTitle, "overlap"); - else unmuteGroupsByTitle(appOrGraph, groupTitle, "overlap"); -} - -function executeChange(title: string, value: boolean): void { - const config = readConfig(); - if (!config) return; - - const applyDisable = !value; - - const foundRow = config.rows.find(row => row.title === title); - if (!foundRow) return; - for (const entry of foundRow.entries) { - const groupTitle = normalizeGroupTitle(entry); - const action = normalizeAction(entry.action); - if (!groupTitle) continue; - - applyEntry(groupTitle, action, applyDisable); + syncConflictStatus(node, config); + const configWidget = node.widgets?.find((item: any) => item.name === "bv_control_config_json"); + if (configWidget) { + configWidget.value = JSON.stringify(configForValidation(config)); + configWidget.type = "converted-widget"; + configWidget.draw = () => {}; + configWidget.hidden = true; + configWidget.options ??= {}; + configWidget.options.hidden = true; + if (configWidget.element) configWidget.element.style.display = "none"; + configWidget.computeSize = () => [0, -4]; + configWidget.serializeValue = () => JSON.stringify(configForValidation(readConfig())); } + node.serialize_widgets = true; + const currentSize = node.size ?? [0, 0]; + const computedSize = node.computeSize?.() ?? currentSize; + const minimumWidth = Math.max(CONTROL_CENTER_MIN_WIDTH, (computedSize[0] ?? 0) + CONTROL_CENTER_WIDTH_BUFFER); + node.setSize?.([ + Math.max(currentSize[0] ?? 0, minimumWidth), + computedSize[1] ?? currentSize[1] ?? 0, + ]); + node.setDirtyCanvas?.(true, true); } -comfyApp.registerExtension({ - name: "bv_control_center", - async beforeRegisterNodeDef(nodeType, nodeData) { - const comfyClass = nodeType.type; - const nodeName = nodeData.name; +function syncAll(config = readConfig()) { + for (const { node } of collectNodesByType(getApp(), NODE_CLASS)) syncNode(node, config); + applyConfig(config); +} - const isControlCenter = - comfyClass === "BVControlCenterNode" || - nodeName === "BV Control Center" || - nodeName?.includes("BV Control Center") || - nodeName?.includes("🌀 BV Control Center"); +window.addEventListener(CONFIG_CHANGED_EVENT, (event) => syncAll((event as CustomEvent).detail)); - if (!isControlCenter) return; - - const onNodeCreated = nodeType.prototype.onNodeCreated; +getApp().registerExtension({ + name: "bv_nodepack.control_center", + async beforeRegisterNodeDef(nodeType: any, nodeData: any) { + if (nodeData.name !== NODE_CLASS) return; + const originalCreated = nodeType.prototype.onNodeCreated; nodeType.prototype.onNodeCreated = function () { - // @ts-ignore - const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : undefined; - this.serialize_widgets = true; - - const cfg = readConfig(); - if (cfg) { - setTimeout(() => { - - updateSingleControlNode(this, cfg); - }, 50) - } - - hookWidgetChanged(this) - startConfigWatcher(); - - return r; + const result = originalCreated?.apply(this, arguments); + syncNode(this, readConfig()); + return result; }; - - const onConfigure = nodeType.prototype.onConfigure; - nodeType.prototype.onConfigure = function (nodeInfo: any) { - // @ts-ignore - const r = onConfigure ? onConfigure.apply(this, arguments) : undefined; - this.serialize_widgets = true; - - const cfg = readConfig(); - if (cfg) { - updateSingleControlNode(this, cfg, nodeInfo?.widgets_values); - } - - return r; - }; - - - - const onConnectInput = nodeType.prototype.onConnectInput - // @ts-ignore - nodeType.prototype.onConnectInput = function (target_slot, type, output, node, slot) { - // @ts-ignore - const r = onConnectInput ? onConnectInput.apply(this, arguments) : undefined; - this.serialize_widgets = true; - - // @ts-ignore - if (node.type && !node.subgraph) { - showErrorToast("BV Control Center can only be connected to a Subgraph.") - return false - } - - if (this.type == "BV Control Center") { - ensureSubgraphContainerPatchedFromInnerNodeRetry(this, hookSubgraphWidgetChanged, executeChange); - - - if (typeof this.id !== 'number') { - return r; - } - - const id = this.id; - const retries = 20 - function retry(n = 0) { - if (n >= retries) return; - const gNode = getNodeHelper(id, getApp().rootGraph) - if (gNode) { - const suc = renameSubGraphInputSlot(gNode, target_slot) - if (suc) return; - } - setTimeout(() => { - retry(n + 1) - }, 50) - } - retry() - return r; - } - } - - const onConnectionsChange = nodeType.prototype.onConnectionsChange - // @ts-ignore - nodeType.prototype.onConnectionsChange = function (type, index, connected, link_info) { - // @ts-ignore - const r = onConnectionsChange ? onConnectionsChange.apply(this, arguments) : undefined; - - if (!connected && type === 1) { // 1 is LiteGraph.INPUT - if (this.type == "BV Control Center") { - - console.debug("onConnectionsChange", type, link_info, connected, index) - - const id = this.id; - - const ccNode = getNodeHelper(id as number, getApp().rootGraph, true) - - if (ccNode){ - - const sNode = getOuterNode(ccNode) as SubgraphNode - - if(link_info && sNode && sNode.widgets){ - const sWidget = sNode.widgets[link_info.origin_slot] - const value = sWidget.value - - sNode.removeWidget(sWidget) - const newSize = sNode.computeSize?.() ?? sNode.size; - sNode.setSize?.(newSize); - sNode.size = newSize; - - sNode.setDirtyCanvas?.(true, true); - sNode.graph?.setDirtyCanvas?.(true, true); - const ccINput = ccNode.getInputInfo(index) - if(ccINput != null){ - const widget = ccNode.getWidgetFromSlot(ccINput); - if (widget) { - function setWidgetValue(node: any, widgetName: any, newValue: any) { - // @ts-ignore - const w = node?.widgets?.find(x => x?.name === widgetName); - if (!w) return false; - w.value = newValue; - (w.callback || w.onChange)?.call(w, newValue, node, w); - - node.setSize?.(node.computeSize?.() ?? node.size); - - node.setDirtyCanvas?.(true, true); - node.graph?.setDirtyCanvas?.(true, true); - - return true; - } - - setWidgetValue(sNode, sWidget.name, value) - } - } - - } - - } - } - } - return r; - } - } + }, + afterConfigureGraph() { + syncAll(); + }, }); - -function patchAllSubgraphs(): number { - const graph = getApp()?.rootGraph; - if (!graph) return 0; - - const subs = findAllSubgraphContainers(graph); - - let patched = 0; - for (const s of subs) { - const didPatch = patchSubgraphContainerPrototype(s, hookSubgraphWidgetChanged, executeChange); - if (didPatch) patched++; - } - - return patched; -} - -function retryPatchAllSubgraphs(opts?: { - intervalMs?: number; - maxAttempts?: number; - stopWhenPatched?: boolean; -}) { - const intervalMs = opts?.intervalMs ?? 200; - const maxAttempts = opts?.maxAttempts ?? 30; - const stopWhenPatched = opts?.stopWhenPatched ?? true; - - let attempt = 0; - - const tick = () => { - attempt++; - - const patchedCount = patchAllSubgraphs(); - - if (stopWhenPatched && patchedCount > 0) return; - if (attempt >= maxAttempts) return; - - setTimeout(tick, intervalMs); - }; - - tick(); -} - -retryPatchAllSubgraphs({intervalMs: 150, maxAttempts: 80}); - -// Retry because LGraph might not be ready instantly -(function retry(n = 0) { - if (patchGraphAddSingletonGuard()) return; - if (n > 80) return; - setTimeout(() => retry(n + 1), 50); -})(); diff --git a/ui/src/index.css b/ui/src/index.css index 0bfa30f..0650619 100644 --- a/ui/src/index.css +++ b/ui/src/index.css @@ -18,16 +18,41 @@ --bv-muted-text-color: #7f8c8d; } -#bv-root { - height: 100%; +.bv-modal { + position: fixed; + inset: 0; + z-index: 2147483647; + display: grid; + place-items: center; + padding: 24px; + background: rgba(0, 0, 0, 0.6); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; - box-sizing: border-box; color: var(--bv-text-color); - background: var(--bv-bg-color); } -#bv-root * { +.bv-modal * { box-sizing: border-box; } +.bv-dialog { width: min(900px, 92vw); max-height: 84vh; } +.bv-rack { width: 100%; max-height: 84vh; overflow: auto; padding: 20px; border: 1px solid var(--bv-border-color); border-radius: 14px; background: var(--comfy-menu-bg, #20242a); box-shadow: 0 18px 60px #0009; } +.bv-rack header, .bv-rack footer, .bv-control-title, .bv-assignments > div { display: flex; align-items: center; gap: 10px; } +.bv-rack header { justify-content: space-between; border-bottom: 1px solid #ffffff20; margin-bottom: 16px; } +.bv-rack h2 { margin: 0; } +.bv-rack p { margin-top: 4px; color: var(--bv-muted-text-color); } +.bv-force { display: flex; gap: 8px; padding: 10px 12px; background: #ffffff08; border-radius: 8px; } +.bv-controls { display: grid; gap: 12px; margin: 16px 0; } +.bv-control-card { border: 1px solid #ffffff20; border-radius: 10px; padding: 12px; background: #ffffff08; } +.bv-control-title input { flex: 1; font-weight: 650; } +.bv-control-title span { color: var(--bv-muted-text-color); } +.bv-assignments { display: grid; gap: 6px; margin: 10px 0; } +.bv-assignments > div span { flex: 1; } +.bv-assignments > div span small { display: block; margin-top: 3px; color: #ffbd66; } +.bv-assignments .conflict { border-left: 2px solid #ffbd66; padding-left: 8px; } +.bv-assignments .unresolved { color: #ff9f7a; } +.bv-rack input, .bv-rack select, .bv-rack button { color: inherit; background: #15181c; border: 1px solid #ffffff25; border-radius: 6px; padding: 7px 9px; } +.bv-rack button { cursor: pointer; } +.bv-rack button.primary { background: var(--bv-primary-color); border-color: transparent; } +.bv-rack footer { justify-content: flex-end; } + diff --git a/ui/src/index.tsx b/ui/src/index.tsx index fdf388c..91b4811 100644 --- a/ui/src/index.tsx +++ b/ui/src/index.tsx @@ -2,21 +2,20 @@ import React, { useEffect, useState } from "react"; import ReactDOM from "react-dom/client"; import { getApp } from "./appHelper.js"; import BVPortal from "./components/BVPortal"; +import styles from "./index.css?inline"; const comfyApp = getApp(); -import "./util/control/stateHandler"; import "./components/control/bv_control_center"; -// Expose a setter so non-React callbacks (e.g., action bar button) can open the portal -let setPortalOpenExternal: ((open: boolean) => void) | null = null; +const OPEN_CONTROL_RACK_EVENT = "bv-open-control-rack"; +const STYLE_ID = "bv-nodepack-styles"; function BVRoot() { const [portalOpen, setPortalOpen] = useState(false); useEffect(() => { - setPortalOpenExternal = (open: boolean) => setPortalOpen(open); - return () => { - setPortalOpenExternal = null; - }; + const open = () => setPortalOpen(true); + window.addEventListener(OPEN_CONTROL_RACK_EVENT, open); + return () => window.removeEventListener(OPEN_CONTROL_RACK_EVENT, open); }, []); return ( @@ -32,6 +31,12 @@ function BVRoot() { const MOUNT_ID = "bv-root"; function ensureMountedOnce() { + if (!document.getElementById(STYLE_ID)) { + const style = document.createElement("style"); + style.id = STYLE_ID; + style.textContent = styles; + document.head.appendChild(style); + } let container = document.getElementById(MOUNT_ID); if (!container) { container = document.createElement("div"); @@ -46,20 +51,9 @@ function ensureMountedOnce() { } } -// Set up once: create an action button that opens the persistent portal comfyApp.registerExtension({ - name: "bv_nodepack.action_button", + name: "bv_nodepack.control_rack_portal", setup() { ensureMountedOnce(); }, - actionBarButtons: [ - { - icon: "pi pi-wrench", - tooltip: "BV Tools Configuration (Beta)", - onClick: () => { - ensureMountedOnce(); - setPortalOpenExternal?.(true); - }, - }, - ], }); diff --git a/ui/src/types/assets.d.ts b/ui/src/types/assets.d.ts new file mode 100644 index 0000000..e2c4cae --- /dev/null +++ b/ui/src/types/assets.d.ts @@ -0,0 +1,4 @@ +declare module "*.css?inline" { + const content: string; + export default content; +} diff --git a/ui/src/util/control/collector.ts b/ui/src/util/control/collector.ts index 7bcc84c..61683c5 100644 --- a/ui/src/util/control/collector.ts +++ b/ui/src/util/control/collector.ts @@ -12,6 +12,8 @@ export interface CollectedGroup { group: LGraphGroup; graph: LGraph; path: GraphPathEntry[]; + id: string; + pathLabel: string; } export interface CollectedNode { @@ -89,6 +91,22 @@ function traverseGraphs( } } +function newGroupId(): string { + return globalThis.crypto?.randomUUID?.() ?? `bv-group-${Date.now()}-${Math.random().toString(16).slice(2)}`; +} + +function groupId(group: LGraphGroup, usedIds: Set): string { + const target = group as any; + target.flags ??= {}; + let id = typeof target.flags.bvGroupId === "string" ? target.flags.bvGroupId : ""; + if (!id || usedIds.has(id)) { + do id = newGroupId(); while (usedIds.has(id)); + target.flags.bvGroupId = id; + } + usedIds.add(id); + return id; +} + /** * Collect ALL groups in main graph + every subgraph (typed). * Pass either comfyApp or a graph. @@ -98,9 +116,12 @@ export function collectAllGroups(input: ComfyApp | LGraph | unknown): CollectedG if (!root) return []; const results: CollectedGroup[] = []; + const usedIds = new Set(); traverseGraphs(root, (graph, path) => { for (const group of getGraphGroups(graph)) { - results.push({ group, graph, path }); + const segments = path.map((entry) => String((entry.node as any).title || (entry.node as any).type || entry.node.id)); + const pathLabel = [...segments, String(group.title || "Untitled Group")].join(" / "); + results.push({ group, graph, path, id: groupId(group, usedIds), pathLabel }); } }); return results; @@ -129,7 +150,7 @@ export function collectNodesByType( return results; } -function nodeMatchesType(node: LGraphNode, typeOrPredicate: string | NodePredicate): boolean { +export function nodeMatchesType(node: LGraphNode, typeOrPredicate: string | NodePredicate): boolean { if (typeof typeOrPredicate === "function") return !!typeOrPredicate(node); const wanted = String(typeOrPredicate); diff --git a/ui/src/util/control/configHandler.ts b/ui/src/util/control/configHandler.ts index cfe3565..ca8f7fb 100644 --- a/ui/src/util/control/configHandler.ts +++ b/ui/src/util/control/configHandler.ts @@ -1,58 +1,45 @@ - import { getApp } from "../../appHelper.js"; -const comfyApp = getApp(); -const graph = comfyApp.rootGraph as any; +export type BVControlAction = "activate" | "bypass" | "mute"; -export type BVControlConfig = { - rows: BVControlRow[]; -} - -export type BVControlRow = { - title: string; - entries: BVControlEntry[] -} - -export type BVControlGroup = { - title: string; -} - -export type BVControlNode = { - id: string; -} - -// export type BVControlEntry = -// | { kind: "group"; ref: BVControlGroup } -// | { kind: "node"; ref: BVControlNode }; - -export type BVControlEntry = { - kind: "group"; - ref: BVControlGroup - action: "bypass"|"mute" +export type BVControlAssignment = { + groupId: string; + groupPath: string; + groupTitle: string; + action: BVControlAction; + unresolved?: boolean; }; -function getRootGraph(): any | null { - const app = getApp(); - return app?.rootGraph ?? null; +export type BVControl = { + id: string; + name: string; + enabled: boolean; + assignments: BVControlAssignment[]; +}; + +export type BVControlConfig = { + version: 2; + forceActive: boolean; + controls: BVControl[]; +}; + +export const CONFIG_CHANGED_EVENT = "bv-control-config-changed"; + +export function emptyConfig(): BVControlConfig { + return { version: 2, forceActive: false, controls: [] }; } -export function writeConfig(config: BVControlConfig | null) { - const graph = getRootGraph(); - if (!graph) { - console.warn("[BV] rootGraph not ready yet, cannot write config"); - return; - } - +export function writeConfig(config: BVControlConfig) { + const graph = getApp()?.rootGraph as any; + if (!graph) return; graph.extra ??= {}; graph.extra.bv_settings ??= {}; graph.extra.bv_settings.controlConfig = config; - - // optional: mark dirty so the user saving will persist it graph.setDirtyCanvas?.(true, true); + window.dispatchEvent(new CustomEvent(CONFIG_CHANGED_EVENT, { detail: config })); } -export function readConfig(): BVControlConfig | null { - const graph = getRootGraph(); - return (graph?.extra?.bv_settings?.controlConfig ?? null) as BVControlConfig | null; +export function readConfig(): BVControlConfig { + const value = (getApp()?.rootGraph as any)?.extra?.bv_settings?.controlConfig; + return value?.version === 2 ? value as BVControlConfig : emptyConfig(); } - diff --git a/ui/src/util/control/controlCenterModel.d.ts b/ui/src/util/control/controlCenterModel.d.ts new file mode 100644 index 0000000..f121c68 --- /dev/null +++ b/ui/src/util/control/controlCenterModel.d.ts @@ -0,0 +1,22 @@ +export function nodesInControlGroup( + item: any, + isExcluded?: (node: any) => boolean, +): any[]; + +export type BVControlConflictEntry = { + controlId: string; + controlName: string; + action: "activate" | "mute" | "bypass"; + groupId: string; + groupPath: string; +}; + +export type BVControlConflict = { + groupId: string; + groupPath: string; + winnerAction: "activate" | "mute" | "bypass"; + entries: BVControlConflictEntry[]; +}; + +export function findActiveControlConflicts(config: any): BVControlConflict[]; +export function formatControlConflictStatus(conflicts: BVControlConflict[]): string; diff --git a/ui/src/util/control/controlCenterModel.js b/ui/src/util/control/controlCenterModel.js new file mode 100644 index 0000000..82db4c3 --- /dev/null +++ b/ui/src/util/control/controlCenterModel.js @@ -0,0 +1,63 @@ +export function nodesInControlGroup(item, isExcluded = () => false) { + const nativeNodes = item.group.nodes ?? item.group._nodes; + if (Array.isArray(nativeNodes)) { + const resolved = nativeNodes.filter((node) => node && typeof node === "object" && !isExcluded(node)); + if (resolved.length > 0) return resolved; + } + + const [gx, gy] = item.group.pos || [0, 0]; + const [gw, gh] = item.group.size || [0, 0]; + return (item.graph._nodes ?? item.graph.nodes ?? []).filter((node) => { + if (isExcluded(node)) return false; + const [x, y] = node.pos || [0, 0]; + const [w, h] = node.size || [0, 0]; + return x + w / 2 >= gx && x + w / 2 <= gx + gw && y + h / 2 >= gy && y + h / 2 <= gy + gh; + }); +} + +const ACTION_PRIORITY = { activate: 3, mute: 2, bypass: 1 }; +const actionLabel = (action) => action.charAt(0).toUpperCase() + action.slice(1); + +export function findActiveControlConflicts(config) { + const assignmentsByGroup = new Map(); + for (const control of config.controls ?? []) { + if (!control.enabled) continue; + for (const assignment of control.assignments ?? []) { + if (assignment.unresolved) continue; + const entries = assignmentsByGroup.get(assignment.groupId) ?? []; + entries.push({ + controlId: control.id, + controlName: control.name, + action: assignment.action, + groupId: assignment.groupId, + groupPath: assignment.groupPath || assignment.groupTitle || assignment.groupId, + }); + assignmentsByGroup.set(assignment.groupId, entries); + } + } + + const conflicts = []; + for (const entries of assignmentsByGroup.values()) { + if (new Set(entries.map((entry) => entry.action)).size < 2) continue; + const winnerAction = entries.reduce((winner, entry) => + ACTION_PRIORITY[entry.action] > ACTION_PRIORITY[winner] ? entry.action : winner, + entries[0].action); + conflicts.push({ + groupId: entries[0].groupId, + groupPath: entries[0].groupPath, + winnerAction, + entries, + }); + } + return conflicts; +} + +export function formatControlConflictStatus(conflicts) { + if (!conflicts.length) return "✓ No active conflicts"; + if (conflicts.length > 1) return `⚠ ${conflicts.length} active control conflicts`; + const conflict = conflicts[0]; + const overridden = [...new Set(conflict.entries + .filter((entry) => entry.action !== conflict.winnerAction) + .map((entry) => entry.action))].join(", "); + return `⚠ ${conflict.groupPath}: ${actionLabel(conflict.winnerAction)} overrides ${overridden.split(", ").map(actionLabel).join(", ")}`; +} diff --git a/ui/src/util/control/controlHelper.ts b/ui/src/util/control/controlHelper.ts deleted file mode 100644 index e119aa0..0000000 --- a/ui/src/util/control/controlHelper.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { getApp } from "../../appHelper.js"; -import { LGraphNode } from "../../types/comfyui-frontend-types.augment"; - -export function showErrorToast(msg: string) { - getApp().extensionManager.toast.add({ - severity: "error", - summary: "Error", - detail: msg, - life: 5000 - }); -} - -export function getNodeHelper(nodeId: number, graph: any, subgraph: boolean = false): LGraphNode | undefined { - if (!graph?.nodes) return; - - let foundNode: LGraphNode | undefined; - - graph.nodes.forEach((node: any) => { - if (!foundNode) { - if (node.id == nodeId) { - if (subgraph) { - foundNode = node; - if (node.subgraph && !node.type) { - foundNode = node; - } - } else { - if (!node.subgraph) { - foundNode = node; - } - } - } - if (!foundNode && node.isSubgraphNode) { - foundNode = getNodeHelper(nodeId, node.subgraph) - } - } - }); - - return foundNode; -} - -export function crawlSubgraphForNode(nodes: any[]): LGraphNode[] { - const controlNodes: LGraphNode[] = []; - nodes.forEach((node: any) => { - if (node.isSubgraphNode && node.isSubgraphNode()) { - const sGraph = node; - controlNodes.push(...crawlSubgraphForNode(sGraph.subgraph.nodes)) - } else { - if (node.type === "BV Control Center") { - controlNodes.push(node); - } - } - }) - return controlNodes; -} - -export function getWidgetValue(node: LGraphNode, slot: number) { - const inputSlot = node.getInputInfo(slot) - if (!inputSlot) return; - return node.getWidgetFromSlot(inputSlot)?.value as boolean; -} - - diff --git a/ui/src/util/control/groupWatcher.ts b/ui/src/util/control/groupWatcher.ts deleted file mode 100644 index e69de29..0000000 diff --git a/ui/src/util/control/singletonHandler.ts b/ui/src/util/control/singletonHandler.ts deleted file mode 100644 index 7df527d..0000000 --- a/ui/src/util/control/singletonHandler.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { getApp } from "../../appHelper.js"; -import { showErrorToast } from "./controlHelper"; - -export const BV_SINGLETON_TYPE = "BV Control Center"; - -let singletonRemovalScheduled = false; -const pendingSingletonAdds: Array<{ node: any; graph: any }> = []; - -export function scheduleRemoveJustAddedSingletons() { - if (singletonRemovalScheduled) return; - singletonRemovalScheduled = true; - - // next tick: let ComfyUI finish subgraph conversion / internal moves - setTimeout(() => { - singletonRemovalScheduled = false; - - const root = getApp()?.rootGraph; - if (!root) return; - - // collect all singleton nodes across entire workflow (root + subgraphs) - const all: Array<{ node: any; graph: any }> = []; - const walk = (g: any) => { - for (const n of g?.nodes ?? []) { - if (!n) continue; - if (n.type === BV_SINGLETON_TYPE) all.push({node: n, graph: g}); - if (n.isSubgraphNode?.() && n.subgraph) walk(n.subgraph); - } - }; - walk(root); - - if (all.length <= 1) { - pendingSingletonAdds.length = 0; - return; - } - - // Prefer keeping an "old" one: keep the one with the smallest id (usually the existing one) - all.sort((a, b) => (a.node?.id ?? 0) - (b.node?.id ?? 0)); - const keep = all[0].node; - - // Remove everything else, but especially remove the ones that were just added by the user - let removedAny = false; - - for (const entry of all.slice(1)) { - const n = entry.node; - const g = entry.graph; - - if (n === keep) continue; - - try { - g.remove(n); - } catch { - const idx = g.nodes?.indexOf(n); - if (idx >= 0) g.nodes.splice(idx, 1); - } - - removedAny = true; - } - - if (removedAny) { - showErrorToast("BV Control Center is already in the workflow."); - root.setDirtyCanvas?.(true, true); - } - - pendingSingletonAdds.length = 0; - }, 0); -} - -export function patchGraphAddSingletonGuard() { - const LGraphCtor: any = (window as any).LGraph; - if (!LGraphCtor?.prototype) return false; - - const proto = LGraphCtor.prototype; - if (proto.__bv_singleton_add_patched) return true; - proto.__bv_singleton_add_patched = true; - - const addFnName = proto.add ? "add" : (proto.addNode ? "addNode" : null); - if (!addFnName) { - return false; - } - - const origAdd = proto[addFnName]; - - proto[addFnName] = function (node: any) { - const r = origAdd.apply(this, arguments); - - if (node?.type === BV_SINGLETON_TYPE) { - pendingSingletonAdds.push({node, graph: this}); - scheduleRemoveJustAddedSingletons(); - } - - return r; - }; - - return true; -} diff --git a/ui/src/util/control/stateHandler.ts b/ui/src/util/control/stateHandler.ts deleted file mode 100644 index 478230a..0000000 --- a/ui/src/util/control/stateHandler.ts +++ /dev/null @@ -1,351 +0,0 @@ -// @ts-ignore -// import type { ComfyApp, LGraph, LGraphGroup, LGraphNode } from "@comfyorg/comfyui-frontend-types"; - - -import type { ComfyApp, LGraph, LGraphGroup, LGraphNode } from "../../types/comfyui-frontend-types.augment"; - -/** LiteGraph node modes (typical) */ -export enum NodeMode { - ALWAYS = 0, - ON_EVENT = 1, - NEVER = 2, - ON_TRIGGER = 3, -} - -const COMFY_MODE_NORMAL = 0; -const COMFY_MODE_BYPASS = 4; -const COMFY_MODE_MUTE = 2; - -/** Accept either app or graph */ -function resolveRootGraph(input: ComfyApp | LGraph | unknown): LGraph | null { - if (!input || typeof input !== "object") return null; - const x = input as any; - - // prefer rootGraph (your case) - if (x.rootGraph && typeof x.rootGraph === "object") return x.rootGraph as LGraph; - if (x.graph && typeof x.graph === "object") return x.graph as LGraph; - - // treat input itself as a graph - return input as LGraph; -} - -function getGraphNodes(graph: LGraph): LGraphNode[] { - return (graph._nodes ?? graph.nodes ?? []) as LGraphNode[]; -} - -function getGraphGroups(graph: LGraph): LGraphGroup[] { - return (graph._groups ?? graph.groups ?? []) as LGraphGroup[]; -} - -function getNodeSubgraph(node: LGraphNode): LGraph | null { - if(node.isSubgraphNode()) return node.subgraph as LGraph; - return null; -} - -function traverseGraphs(root: LGraph, cb: (graph: LGraph) => void): void { - const visited = new Set(); - const stack: LGraph[] = [root]; - - while (stack.length) { - const g = stack.pop()!; - const key = g as unknown as object; - if (visited.has(key)) continue; - visited.add(key); - - cb(g); - - for (const n of getGraphNodes(g)) { - const sg = getNodeSubgraph(n); - if (sg) stack.push(sg); - } - } -} - -/** -------- Node lookup helpers -------- */ - -export function findNodeById(input: ComfyApp | LGraph | unknown, id: number | string): { graph: LGraph; node: LGraphNode } | null { - const root = resolveRootGraph(input); - if (!root) return null; - - let found: { graph: LGraph; node: LGraphNode } | null = null; - - traverseGraphs(root, (graph) => { - if (found) return; - const nodes = getGraphNodes(graph); - for (const node of nodes) { - if (String(node.id) === String(id)) { - found = { graph, node }; - return; - } - } - }); - - return found; -} - -/** -------- Mute / Unmute nodes by ID -------- - * We store previous mode so unmute can restore it. - * Stored on node.properties.__bv_prev_mode (safe and serializable in most builds). - */ -const BV_PREV_MODE_KEY = "__bv_prev_mode"; - -export function muteNodeById(input: ComfyApp | LGraph | unknown, id: number | string): boolean { - const hit = findNodeById(input, id); - if (!hit) return false; - - const node = hit.node as any; - node.properties ??= {}; - if (typeof node.properties[BV_PREV_MODE_KEY] !== "number") { - node.properties[BV_PREV_MODE_KEY] = typeof node.mode === "number" ? node.mode : NodeMode.ALWAYS; - } - node.mode = NodeMode.NEVER; - return true; -} - -export function unmuteNodeById(input: ComfyApp | LGraph | unknown, id: number | string): boolean { - const hit = findNodeById(input, id); - if (!hit) return false; - - const node = hit.node as any; - const prev = node.properties?.[BV_PREV_MODE_KEY]; - node.mode = typeof prev === "number" ? prev : NodeMode.ALWAYS; - - // optional: cleanup - if (node.properties && BV_PREV_MODE_KEY in node.properties) delete node.properties[BV_PREV_MODE_KEY]; - - return true; -} - -/** -------- Bypass (node-level) -------- - * IMPORTANT: ComfyUI bypass implementation can differ across builds. - * This is a pragmatic approach: - * - set mode to NEVER - * - store a flag that your UI/logic can interpret as "bypass" - * - * If your build has a dedicated field (e.g. node.bypass = true or node.mode = ), - * adapt ONLY inside this function. - */ -const BV_BYPASS_KEY = "__bv_bypass"; -const BV_PREV_MODE_FOR_BYPASS_KEY = "__bv_prev_mode_for_bypass"; - -export function bypassNodeById(input: ComfyApp | LGraph | unknown, id: number | string): boolean { - const hit = findNodeById(input, id); - if (!hit) return false; - - const node = hit.node as any; - node.properties ??= {}; - - if (typeof node.properties[BV_PREV_MODE_FOR_BYPASS_KEY] !== "number") { - node.properties[BV_PREV_MODE_FOR_BYPASS_KEY] = typeof node.mode === "number" ? node.mode : NodeMode.ALWAYS; - } - - node.properties[BV_BYPASS_KEY] = true; - - // Common fallback: mark as never-run; server/runner may treat bypass specially depending on build - node.mode = NodeMode.NEVER; - - return true; -} - -export function unbypassNodeById(input: ComfyApp | LGraph | unknown, id: number | string): boolean { - const hit = findNodeById(input, id); - if (!hit) return false; - - const node = hit.node as any; - const prev = node.properties?.[BV_PREV_MODE_FOR_BYPASS_KEY]; - node.mode = typeof prev === "number" ? prev : NodeMode.ALWAYS; - - if (node.properties) { - delete node.properties[BV_BYPASS_KEY]; - delete node.properties[BV_PREV_MODE_FOR_BYPASS_KEY]; - } - - return true; -} - -/** -------- Group -> Nodes in group (canvas box) -------- */ - -export type GroupNodeContainment = "topleft" | "fully" | "overlap"; - -/** Safely get node size */ -function nodeSize(node: LGraphNode): [number, number] { - const s = (node as any).size; - if (Array.isArray(s) && s.length >= 2) return [Number(s[0]) || 0, Number(s[1]) || 0]; - return [0, 0]; -} - -/** Check if a node is inside a group box */ -export function isNodeInGroup(node: LGraphNode, group: LGraphGroup, mode: GroupNodeContainment = "overlap"): boolean { - const gpos = (group.pos ?? [0, 0]) as [number, number]; - const gsize = (group.size ?? [0, 0]) as [number, number]; - const npos = (node.pos ?? [0, 0]) as [number, number]; - const nsize = nodeSize(node); - - const gx1 = gpos[0], gy1 = gpos[1]; - const gx2 = gpos[0] + gsize[0], gy2 = gpos[1] + gsize[1]; - - const nx1 = npos[0], ny1 = npos[1]; - const nx2 = npos[0] + nsize[0], ny2 = npos[1] + nsize[1]; - - if (mode === "topleft") { - return nx1 >= gx1 && nx1 <= gx2 && ny1 >= gy1 && ny1 <= gy2; - } - - if (mode === "fully") { - return nx1 >= gx1 && ny1 >= gy1 && nx2 <= gx2 && ny2 <= gy2; - } - - // overlap (default): any intersection - const overlapX = nx1 <= gx2 && nx2 >= gx1; - const overlapY = ny1 <= gy2 && ny2 >= gy1; - return overlapX && overlapY; -} - -/** Find all groups by title across root graph + subgraphs */ -export function findGroupsByTitle(input: ComfyApp | LGraph | unknown, title: string): Array<{ graph: LGraph; group: LGraphGroup }> { - const root = resolveRootGraph(input); - if (!root) return []; - - const matches: Array<{ graph: LGraph; group: LGraphGroup }> = []; - const wanted = title.trim(); - - traverseGraphs(root, (graph) => { - for (const group of getGraphGroups(graph)) { - if ((group.title ?? "").trim() === wanted) { - matches.push({ graph, group }); - } - } - }); - - return matches; -} - -/** Collect nodes inside a specific group (in the SAME graph) */ -export function collectNodesInGroup(graph: LGraph, group: LGraphGroup, containment: GroupNodeContainment = "overlap"): LGraphNode[] { - const nodes = getGraphNodes(graph); - return nodes.filter((n) => isNodeInGroup(n, group, containment)); -} - -/** -------- Group actions (by title) -------- - * If multiple groups share the same title, ALL will be affected. - * Return value contains details so you can show a UI summary. - */ -export interface GroupActionResult { - groupTitle: string; - affectedGroups: number; - affectedNodes: number; - perGroup: Array<{ - graph: LGraph; - group: LGraphGroup; - nodes: LGraphNode[]; - }>; -} - -function buildGroupResult( - input: ComfyApp | LGraph | unknown, - title: string, - containment: GroupNodeContainment -): GroupActionResult { - const matches = findGroupsByTitle(input, title); - - const perGroup = matches.map(({ graph, group }) => ({ - graph, - group, - nodes: collectNodesInGroup(graph, group, containment), - })); - - const affectedNodes = perGroup.reduce((sum, x) => sum + x.nodes.length, 0); - - return { - groupTitle: title, - affectedGroups: perGroup.length, - affectedNodes, - perGroup, - }; -} - -export function muteGroupsByTitle( - input: ComfyApp | LGraph | unknown, - title: string, - containment: GroupNodeContainment = "overlap" -): GroupActionResult { - const res = buildGroupResult(input, title, containment); - - for (const item of res.perGroup) { - for (const node of item.nodes) { - // mute by id if present, else directly - const n: any = node; - n.properties ??= {}; - if (typeof n.properties[BV_PREV_MODE_KEY] !== "number") { - n.properties[BV_PREV_MODE_KEY] = typeof n.mode === "number" ? n.mode : NodeMode.ALWAYS; - } - n.mode = COMFY_MODE_MUTE; - } - } - - return res; -} - -export function unmuteGroupsByTitle( - input: ComfyApp | LGraph | unknown, - title: string, - containment: GroupNodeContainment = "overlap" -): GroupActionResult { - const res = buildGroupResult(input, title, containment); - - for (const item of res.perGroup) { - for (const node of item.nodes) { - const n: any = node; - const prev = n.properties?.[BV_PREV_MODE_KEY]; - n.mode = typeof prev === "number" ? prev : COMFY_MODE_NORMAL; - if (n.properties && BV_PREV_MODE_KEY in n.properties) delete n.properties[BV_PREV_MODE_KEY]; - } - } - - return res; -} - -export function bypassGroupsByTitle( - input: ComfyApp | LGraph | unknown, - title: string, - containment: GroupNodeContainment = "overlap" -): GroupActionResult { - const res = buildGroupResult(input, title, containment); - - for (const item of res.perGroup) { - for (const node of item.nodes) { - const n: any = node; - n.properties ??= {}; - if (typeof n.properties[BV_PREV_MODE_FOR_BYPASS_KEY] !== "number") { - n.properties[BV_PREV_MODE_FOR_BYPASS_KEY] = typeof n.mode === "number" ? n.mode : NodeMode.ALWAYS; - } - n.properties[BV_BYPASS_KEY] = true; - n.mode = COMFY_MODE_BYPASS; - } - } - - return res; -} - -export function unbypassGroupsByTitle( - input: ComfyApp | LGraph | unknown, - title: string, - containment: GroupNodeContainment = "overlap" -): GroupActionResult { - const res = buildGroupResult(input, title, containment); - - for (const item of res.perGroup) { - for (const node of item.nodes) { - const n: any = node; - const prev = n.properties?.[BV_PREV_MODE_FOR_BYPASS_KEY]; - n.mode = typeof prev === "number" ? prev : COMFY_MODE_NORMAL; - - if (n.properties) { - delete n.properties[BV_BYPASS_KEY]; - delete n.properties[BV_PREV_MODE_FOR_BYPASS_KEY]; - } - } - } - - return res; -} diff --git a/ui/src/util/control/subgraphHandler.ts b/ui/src/util/control/subgraphHandler.ts deleted file mode 100644 index e0840f6..0000000 --- a/ui/src/util/control/subgraphHandler.ts +++ /dev/null @@ -1,185 +0,0 @@ -import { getApp } from "../../appHelper.js"; -import { - ExposedWidget, IBaseWidget, - LGraphNode, - Subgraph, - SubgraphInput, - SubgraphNode -} from "../../types/comfyui-frontend-types.augment"; -import {getNodeHelper, getWidgetValue} from "./controlHelper"; -import { readConfig } from "./configHandler"; - -const ACTIVE = "( # ACTIVE # )"; -const MUTE = "(MUTE/BYPASS)"; - -export function renameSubGraphInputSlot(node: LGraphNode, slotNumber: number, slotName?: string) { - - let label = slotName - if (!slotName) { - // @ts-ignore - label = node.inputs[slotNumber].label - if (!label) label = node.inputs[slotNumber].name - } - - if (!label) return false; - - try { - if (node.getInputLink(slotNumber)) { - if (node.graph?._subgraphs) { - const subgraph = node.graph as Subgraph - - const link = node.getInputLink(slotNumber); - const orgingId = link?.origin_id - const orgingSlot = link?.origin_slot; - if (subgraph.inputNode.id == orgingId && typeof orgingSlot === 'number') { - const slot = subgraph.inputNode.allSlots[orgingSlot] - subgraph.renameInput(slot, label) - // subgraph.renameInput(slot, label.split(" - ")[0]) - return true; - } - return false - } - return true; - } - } catch (e) { - console.error("Error renaming subgraph input slot (LINK)", e) - return false; - } - return false - -} - -export function findAllSubgraphContainers(graph: any): any[] { - const result: any[] = []; - const walk = (nodes: any[]) => { - for (const n of nodes ?? []) { - if (n?.isSubgraphNode?.()) { - result.push(n); - if (n.subgraph?.nodes) walk(n.subgraph.nodes); - } - } - }; - walk(graph?.nodes); - return result; -} - -export function getInnerNodeFromOuterNode( - outerNode: LGraphNode, - match?: ((n: LGraphNode) => boolean) | string -): LGraphNode | undefined { - if (!outerNode?.isSubgraphNode?.()) return undefined; - - const innerGraph: any = (outerNode as any).subgraph; - if (!innerGraph) return undefined; - - const nodes: LGraphNode[] = innerGraph._nodes ?? innerGraph.nodes ?? []; - - const predicate = - typeof match === "function" - ? match - : typeof match === "string" - ? (n: any) => n?.type === match || n?.comfyClass === match || n?.title === match - : () => true; // first node (fallback) - - return nodes.find(predicate); -} - -export function getOuterNode(innerNode: LGraphNode) { - if (innerNode.graph?.subgraphs) { - const subgraph = innerNode.graph as Subgraph; - - function walk(graph: any, type: string): LGraphNode | undefined { - let foundNode: LGraphNode | undefined; - for (const node of graph.nodes) { - if (!foundNode) { - if (node.isSubgraphNode()) { - if (type == node.type) { - return node; - } else { - foundNode = walk(node.subgraph, type) - if (foundNode) return foundNode; - } - } - } else { - return foundNode; - } - } - return foundNode; - } - return walk(getApp().rootGraph, subgraph.id) - } - return undefined; -} - -export function patchSubgraphContainerPrototype(subgraphNode: any, hookSubgraphWidgetChanged: (node: SubgraphNode) => void, executeChange: (title: string, value: boolean) => void) { - const proto = subgraphNode?.constructor?.prototype; - - if (!proto) return false; - if (proto.__bv_patched) return false; - - proto.__bv_patched = true; - - // Preserve original if it exists - const original = proto.onWidgetChanged; - - proto.onWidgetChanged = function ( - name: string, - value: any, - old_value: any, - widget: any - ) { - let r; - try { - // @ts-ignore - r = original?.apply(this, arguments); - } catch { - } - - const graph = getApp()?.rootGraph; - const node = getNodeHelper(this.id, graph, true) as SubgraphNode - - const sWidget = widget as IBaseWidget - const iNode = getInnerNodeFromOuterNode(node, "BV Control Center") - if (node && iNode) { - console.debug("Subgraph container widget changed", name, value, old_value, widget, node, widget.label) - // hookSubgraphWidgetChanged(node, name) - // widget.label = widget.label.split(" - ")[0] + " - " + (value ? ACTIVE : MUTE) - - iNode.widgets?.forEach((w) => { - if(w.name == sWidget.name){ - w.label = widget.label - } - }) - } - - if (widget?.label) { - executeChange(widget.label, value); - } - - return r - }; - - return true; -} - -export function ensureSubgraphContainerPatchedFromInnerNode(innerNode: any, hookSubgraphWidgetChanged: (node: SubgraphNode) => void, executeChange: (title: string, value: boolean) => void) { - const g: any = innerNode?.graph; - if (!g) return false; - - const container = getOuterNode(innerNode) - if (!container) return false; - - return patchSubgraphContainerPrototype(container, hookSubgraphWidgetChanged, executeChange); -} - -export function ensureSubgraphContainerPatchedFromInnerNodeRetry(innerNode: any, hookSubgraphWidgetChanged: (node: SubgraphNode) => void, executeChange: (title: string, value: boolean) => void, maxTries = 20) { - let tries = 0; - const tick = () => { - console.debug("Retrying patching subgraph container from inner node", innerNode.id, tries) - tries++; - if (ensureSubgraphContainerPatchedFromInnerNode(innerNode, hookSubgraphWidgetChanged, executeChange)) return; - if (tries >= maxTries) return; - requestAnimationFrame(tick); - }; - tick(); -}