From b0a3c8b4124edda38ca5d812fcae525e0050fb18 Mon Sep 17 00:00:00 2001 From: Kai Cao <107973189+KaiCao2003@users.noreply.github.com> Date: Sun, 26 Jul 2026 15:17:36 -0500 Subject: [PATCH 1/3] Clean public repository content --- .gitignore | 3 +- ATLAS_DATA.md | 43 +- COORDINATE_SYSTEMS.md | 5 - DEVELOPMENT.md | 139 +- KNOWN_LIMITATIONS.md | 142 +- LICENSE | 9 +- PACKAGING.md | 73 +- PLAN.md | 75 - PROJECT_STATUS.md | 114 -- README.md | 337 +--- SCIENTIFIC_VALIDATION.md | 248 +-- THIRD_PARTY.md | 164 +- USER_GUIDE.md | 10 +- docs/ADR-003-atlas-and-data-sources.md | 266 +-- docs/ADR-004-swiftui-hybrid-shell.md | 11 +- docs/ARCHITECTURE.md | 28 +- docs/CODE_AUDIT.md | 237 --- docs/LAMBADA_MAJOR_VESSELS.md | 178 -- docs/LEGACY_REMOVAL.md | 49 - docs/SURGERY_PLAN_EXPORT.md | 3 +- docs/VESSAP_MAJOR_VESSELS.md | 175 +- ..._coordinate_qualification_rejected_v1.json | 1 - native/Brain3D/README.md | 136 +- scripts/benchmark_major_vessel_analysis.py | 270 --- scripts/extract_lambada_major_vessels.py | 94 - scripts/qualify_lambada_coordinates.py | 76 - .../analysis/vessel_clearance.py | 2 +- .../vasculature/VESSAP_DATA_LICENSE.txt | 407 ----- ..._coordinate_qualification_rejected_v1.json | 1 - .../lambada_p60_606_major_vessels_v1.npz | Bin 814393 -> 0 bytes ...p60_606_major_vessels_v1.npz.manifest.json | 125 -- .../vessap_bl6j1_major_vessels_50um_v1.npz | Bin 1853131 -> 0 bytes ...j1_major_vessels_50um_v1.npz.manifest.json | 171 -- .../bridge/major_vessels.py | 15 +- .../lambada_coordinate_qualification.py | 1582 ----------------- .../vasculature/lambada_major_vessels.py | 985 ---------- .../vasculature/vessap_major_vessels.py | 29 +- .../test_bridge_major_vessel_persistence.py | 2 +- tests/unit/test_bridge_major_vessels.py | 68 +- .../test_lambada_coordinate_qualification.py | 282 --- tests/unit/test_lambada_major_vessels.py | 167 -- tests/unit/test_vessap_major_vessels.py | 109 +- 42 files changed, 358 insertions(+), 6473 deletions(-) delete mode 100644 PLAN.md delete mode 100644 PROJECT_STATUS.md delete mode 100644 docs/CODE_AUDIT.md delete mode 100644 docs/LAMBADA_MAJOR_VESSELS.md delete mode 100644 docs/LEGACY_REMOVAL.md delete mode 100644 docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json delete mode 100644 scripts/benchmark_major_vessel_analysis.py delete mode 100644 scripts/extract_lambada_major_vessels.py delete mode 100644 scripts/qualify_lambada_coordinates.py delete mode 100644 src/mouse_brain_planner/assets/vasculature/VESSAP_DATA_LICENSE.txt delete mode 100644 src/mouse_brain_planner/assets/vasculature/lambada_p60_606_coordinate_qualification_rejected_v1.json delete mode 100644 src/mouse_brain_planner/assets/vasculature/lambada_p60_606_major_vessels_v1.npz delete mode 100644 src/mouse_brain_planner/assets/vasculature/lambada_p60_606_major_vessels_v1.npz.manifest.json delete mode 100644 src/mouse_brain_planner/assets/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz delete mode 100644 src/mouse_brain_planner/assets/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz.manifest.json delete mode 100644 src/mouse_brain_planner/vasculature/lambada_coordinate_qualification.py delete mode 100644 src/mouse_brain_planner/vasculature/lambada_major_vessels.py delete mode 100644 tests/unit/test_lambada_coordinate_qualification.py delete mode 100644 tests/unit/test_lambada_major_vessels.py diff --git a/.gitignore b/.gitignore index 7b10933..9785c95 100644 --- a/.gitignore +++ b/.gitignore @@ -36,5 +36,4 @@ data-cache/ *.nii.gz *.npy *.npz -!src/mouse_brain_planner/assets/vasculature/lambada_p60_606_major_vessels_v1.npz -!src/mouse_brain_planner/assets/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz +*.pdf diff --git a/ATLAS_DATA.md b/ATLAS_DATA.md index 72d47f9..8f88672 100644 --- a/ATLAS_DATA.md +++ b/ATLAS_DATA.md @@ -179,40 +179,15 @@ clearance. The workflow remains archived in the backend and is absent from the p 50 µm prepared grid does not acquire 25 µm vascular resolution merely because it is composited over a 25 µm atlas image. -## Archived LAMBADA major-vessel evidence - -The repository retains a derivative of Renier, de Launoit, and Skriabine's -P60_606 graph, [Zenodo record 18876865](https://zenodo.org/records/18876865), DOI -`10.5281/zenodo.18876865`, CC BY 4.0. It is bound to the accepted Allen 25 µm array shape and -contains maximal consecutive in-bounds runs whose point radius is at least 15 µm (diameter at -least 30 µm). Those deterministic extraction facts do not qualify it as a display layer. - -AP and DV orientation evidence passed, but the source describes hemisphere specimens and the -exact graph has no persisted biological hemisphere/laterality binding. Whole-brain coverage and -ML polarity are unqualified, and the application does not mirror the source. The production -reference endpoints never load this derivative. Nothing from it is overlaid in slices, Dorsal, -or 3D. - -The source also omits pial and choroidal vessels, and the derivative omits smaller vessels. Full -identity, extraction, coordinate qualification, checks, counts, and limitations are in -[LAMBADA Major Vessels](docs/LAMBADA_MAJOR_VESSELS.md) and -[Third-Party Software and Data](THIRD_PARTY.md). - -## VesSAP display-only major-vessel reference - -The current visible reference is a bundled derivative of the public VesSAP `BL6J-no1` 3 µm -whole-brain skeleton/radius volumes. It retains nominal diameter ≥30 µm source centerlines, -preserves true source adjacency, applies the authors' Euler plus B-spline Allen transform with -the reviewed ML reflection, and reduces the paths on a 50 µm display grid. - -The adjacent manifest binds the exact source files, transform, atlas identity, extraction -statistics, NPZ digest, and mandatory limitations. The backend serves metadata and geometry only -after all checks pass; the same geometry is overlaid in all five modes. It is one fixed cleared -C57BL/6J specimen, omits smaller vessels, and has no subject-registration or tissue-distortion -error bound. `vessel.major.reference.analyze` therefore fails with -`VESSEL_ANALYSIS_UNAVAILABLE` before accessing a project or geometry. - -See [VesSAP Major Vessels](docs/VESSAP_MAJOR_VESSELS.md) for the exact data and transform record. +## Optional VesSAP major-vessel reference + +The VesSAP display layer is loaded only when its NPZ and manifest are installed under the +application data directory. The data files are not stored in this repository or application +bundle. The loader validates their source identity, transform, atlas binding, digest, arrays, +bounds, and extraction statistics before exposing the five-view geometry. + +See [VesSAP External Major-vessel Data](docs/VESSAP_MAJOR_VESSELS.md) for the file locations and +data contract. ## No official CCF bregma diff --git a/COORDINATE_SYSTEMS.md b/COORDINATE_SYSTEMS.md index a27ef29..beab722 100644 --- a/COORDINATE_SYSTEMS.md +++ b/COORDINATE_SYSTEMS.md @@ -376,11 +376,6 @@ An ontology identity does not guarantee voxel or mesh geometry. In the reviewed four 2D overlays contain zero selected pixels, and 3D reports that no reviewed geometry exists; no inferred surface is substituted. -The archived LAMBADA P60_606 derivative is not displayed. Its exact qualification found -supporting AP and DV orientation evidence but rejected biological ML/laterality and whole-brain -coverage because the source is a hemisphere specimen and its graph has no persisted hemisphere -binding. Numeric points on both sides of the atlas midpoint do not establish bilateral anatomy. -No mirroring or display-axis guess is permitted. VesSAP remains one fixed cleared reference, not the current animal. The shared coordinate frame permits an overlay but does not supply subject registration, tissue-distortion, or inter-animal diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 271e304..5b6a970 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,140 +1,47 @@ # Development -Brain3D has one supported product path: a SwiftUI + SceneKit macOS application and a Python 3.12 -scientific service connected by typed NDJSON. Scientific transforms, atlas access, calibration, -probe/region analysis, vessel qualification, and persistence stay in Python; Swift owns -presentation, input, accessibility, native file handling, and schema-checked SceneKit display -payloads. No vessel-analysis capability is currently exposed. - -Start with [Architecture](docs/ARCHITECTURE.md), [Code Audit](docs/CODE_AUDIT.md), -[ADR-005](docs/ADR-005-independent-slice-viewer.md), and -[Scientific Validation](SCIENTIFIC_VALIDATION.md). - -## Environment - -- Apple Silicon (`arm64`) -- macOS 14 or later -- CPython `>=3.12,<3.13` -- Swift 6-compatible toolchain -- committed `uv.lock` +## Setup ```bash uv python install 3.12 -uv lock --check uv sync --frozen --group dev +uv run --frozen mouse-brain-planner atlas download allen_mouse_25um +``` + +Build and open the macOS app: + +```bash +native/Brain3D/Scripts/build-app.sh +open native/Brain3D/build/Brain3D.app ``` -The default dependency graph deliberately excludes PySide6, PyVista, PyVistaQt, and VTK. Do not -reintroduce a second GUI or renderer into the base environment. +The Swift app communicates with the Python service over typed NDJSON. Start with +[Architecture](docs/ARCHITECTURE.md), [Coordinate Systems](COORDINATE_SYSTEMS.md), and the +architecture decisions in [docs](docs/). -## Quality gate +## Checks ```bash uv lock --check -uv sync --frozen --group dev uv run --frozen ruff format --check . uv run --frozen ruff check . uv run --frozen mypy --no-incremental uv run --frozen pytest -q -.venv/bin/python scripts/verify_minimal_runtime.py -swift test --package-path native/Brain3D +swift test --package-path native/Brain3D --no-parallel native/Brain3D/Scripts/build-app.sh codesign --verify --deep --strict native/Brain3D/build/Brain3D.app ``` -The minimal verifier checks that Qt/VTK modules are absent and exchanges real `hello` and -`shutdown` frames through `mouse-brain-planner bridge`. A green gate establishes engineering -consistency, not stereotaxic, vascular-clearance, usability, or surgical accuracy. - -Useful focused runs: - -```bash -uv run --frozen pytest tests/unit/test_atlas_space.py -q -uv run --frozen pytest tests/unit/test_brainglobe_adapter.py -q -uv run --frozen pytest tests/unit/test_slice_renderer.py -q -uv run --frozen pytest tests/integration/test_bridge_stdio.py -q -swift test --package-path native/Brain3D -``` - -The normal Python suite uses synthetic volumes and local fakes. The real density-archive and -real-atlas checks remain explicit opt-in tests because their external data are not committed. - -## Run the product path - -```bash -native/Brain3D/Scripts/build-app.sh -open native/Brain3D/build/Brain3D.app -uv run --frozen mouse-brain-planner atlas list -uv run --frozen mouse-brain-planner atlas download allen_mouse_25um -uv run --frozen mouse-brain-planner validate-project /absolute/path/Plan.mouseplan -``` - -`mouse-brain-planner` without a subcommand prints help. `mouse-brain-planner bridge` is intended -for the native process boundary and integration diagnostics. - -## Source layout +## Repository layout ```text -native/Brain3D/ SwiftUI shell, typed client, native tests/build - Sources/Brain3DScene/ SceneKit brain/probe rendering; archived vessel primitives -src/mouse_brain_planner/ - atlas/ BrainGlobe 2.3.1 boundary - bridge/ versioned service and handlers - coordinates/ named frames, order conversion, transforms - domain/ Pydantic scientific/project models - persistence/ deterministic migrations and atomic packages - rendering/ raster slices and dorsal projection - probes/ source-traceable NP1 and synthetic test catalog - surgery/ product-reachable probe/measurement geometry - analysis/ region traversal plus archived vessel-analysis algorithms - vasculature/ VesSAP display geometry plus archived qualification workflows -tests/ headless unit/contract/integration tests -docs/ audit, architecture, validation, and ADRs +native/Brain3D/ SwiftUI and SceneKit application +src/mouse_brain_planner/ Python atlas and planning service +tests/ Python tests and fixtures +docs/ architecture and technical references +scripts/ verification and benchmark utilities ``` -The old Qt/PyVista/VTK application was removed after the audit in -[Legacy Removal](docs/LEGACY_REMOVAL.md). Its last complete snapshot is Git commit `51fe26d`. - -## Dependency direction - -- Swift never reimplements coordinate transforms or scientific classification. -- The bridge imports no macOS UI framework and must run headlessly. -- Only the BrainGlobe adapter owns upstream atlas objects. -- All API coordinates name their frame, order, units, origin, directions, atlas identity, and - transform/calibration identity. -- Project files store model state and immutable data references, never UI objects or complete - atlas/vessel volumes. -- The rejected LAMBADA derivative, archived population density, and archived 2D subject evidence - remain separate types and workflows. None is a subject-vessel layer. The runtime vessel - geometry endpoint serves only the digest-checked VesSAP display reference; analysis fails - closed with `VESSEL_ANALYSIS_UNAVAILABLE`, and LAMBADA is never loaded. - -## Coordinate-change checklist - -Any change involving axes, units, indexing, laterality, transforms, picking, or projection must: - -1. name the source and destination frames and units; -2. use centralized BrainGlobe `[AP,DV,ML]` ↔ domain `[AP,ML,DV]` conversion; -3. validate finite values and half-open atlas bounds; -4. distinguish continuous voxel coordinates, discrete indices, corner anchors, and centers; -5. add asymmetric laterality and forward/inverse golden tests; -6. require either the exact source-pinned v4 bregma/surface evidence or, for legacy v1–v3, - a passing subject calibration; never treat atlas origin as bregma; and -7. update coordinate/validation documentation with exact evidence and tolerances. - -## Bridge-change checklist - -- Preserve strict envelope and exact-parameter validation. -- Reject bool where a number is expected, plus NaN and infinity. -- Use stable error codes and include recoverability/suggested action in protocol v2 errors. -- Every mutation checks the expected project revision and returns the new revision. -- Long work runs off the UI thread and stale results cannot overwrite current state. -- Add Python contract tests, matching Swift Codable tests, and a production handler/capability - inventory assertion. -- Do not send full atlas volumes or platform-specific index objects across NDJSON. - -## Review discipline - -Before committing, inspect `git diff --check`, run the relevant focused tests, then run the full -gate in proportion to the change. Never weaken frame/provenance validation to make a test pass. -Update [Code Audit](docs/CODE_AUDIT.md) when a previously orphaned module becomes product-reachable. +Atlas volumes, vascular datasets, PDF inputs, and user projects stay outside source control. +Use `MOUSE_BRAIN_PLANNER_CONFIG_DIR`, `MOUSE_BRAIN_PLANNER_DATA_DIR`, and +`MOUSE_BRAIN_PLANNER_CACHE_DIR` for isolated development environments. diff --git a/KNOWN_LIMITATIONS.md b/KNOWN_LIMITATIONS.md index 8fd472f..236fd46 100644 --- a/KNOWN_LIMITATIONS.md +++ b/KNOWN_LIMITATIONS.md @@ -1,131 +1,35 @@ # Known Limitations -Brain3D is an engineering testing build for non-human mouse research. It is not a medical, -clinical, veterinary, or qualified surgical-navigation product, and it has no prospective animal, -phantom-targeting, histological-outcome, or formal usability validation. - ## Atlas and coordinates -- Only BrainGlobe `allen_mouse_25um` package `1.2` is accepted. The 25 µm value is sampling - resolution, not targeting accuracy. The 10 µm atlas is outside the testing phase. -- The Allen CCF is a population reference from fixed brains and does not provide one official, - subject-specific bregma/lambda transform. -- Direct v4 AP/ML uses a source-pinned Pinpoint/Urchin population-atlas profile (AP− posterior, - ML− animal-left), not the individual animal's measured bregma. Its annotation-derived surface - is not a measured pia or skull surface. -- Legacy v1–v3 AP/ML/DV projection remains dependent on its stored matched landmarks, frame - definitions, laterality, QC thresholds, and uncertainty. -- Region labels are annotation-voxel results, not subject histology. Boundary, hemisphere, and - registration errors remain possible. -- The complete ontology can contain a named structure with no voxels in the reviewed annotation. - In `allen_mouse_25um` v1.2, `RSPd4` (structure 545) is such an ontology-only entry. Brain3D - keeps the selection visible but reports zero 2D highlight pixels and no reviewed 3D geometry; - it does not synthesize or infer a mesh for anatomy absent from the annotation. - -## Native views - -- Dorsal is an AP/ML atlas reference projection. It shows selected-probe landmarks and shank paths - but intentionally omits the collapsed recording-site cloud. It shows the VesSAP display-only - major-vessel projection; missing lines must not be interpreted as absence of vessels. -- SceneKit 3D is a display and picking view of backend-validated geometry payloads. Camera - interaction and rendering do not add anatomical accuracy. -- Probe and vessel overlays are clipped/projected according to documented slice/slab rules. -- There is no capillary layer, artery/vein classification, craniotomy design, manipulator/hardware - collision model, or intraoperative tracking. - -## Probe model and placement - -- The two supported choices—Neuropixels 2.0 single-shank (1,280 sites) and standard four-shank - (5,120 sites)—are complete source transcriptions but remain - `source-transcribed-review-pending`. No independent human has reviewed every coordinate and - dimension against the pinned sources or physical probes. -- The NP2 four-shank target/entry belongs to the official leftmost `shank-0`; the other shanks - follow the probe-local lateral axis at 250 µm pitch. The software does not infer a centered-array - target or independently rotate the shanks. -- NP2 plans expose all 1,280 physical sites per shank for geometry and region inspection. They do - not import the actual IMRO/electrode selection, and must not imply that all sites are recorded - simultaneously. Both supported hardware choices provide 384 simultaneously configurable - recording channels. -- V4 depth is path length from a 25 µm annotation boundary. Its single signed sagittal angle and - two whole-array layouts do not model arbitrary ML tilt, probe bending, or independent shank - rotation. -- Manufacturer tolerances, insertion bending, tissue deformation, brain shift, skull mounting, - probe-base/headstage geometry, and manipulator backlash are not modeled. -- The generic 16-site model is synthetic software-test geometry, not a physical device profile. -- Region traversal and site assignment use the selected Allen annotation and the persisted v4 - surface/profile evidence (or a preserved legacy calibration); they do not predict histological - recording location or post-insertion displacement. - -## VesSAP display-reference limits - -- The visible layer is one fixed, cleared, ex-vivo adult C57BL/6J specimen (`BL6J-no1`), not the - current animal and not live vasculature. -- Only source skeleton points with nominal radius ≥15 µm (diameter ≥30 µm) are retained. - Capillaries and smaller vessels are intentionally absent. -- Source topology is coalesced on a 50 µm display grid. Nearby branches can merge and isolated - display voxels without a retained segment are omitted. -- Pial/choroidal coverage is not separately classified. Artery/vein identity is unavailable. -- The published Euler + B-spline atlas transform was checked for axis order, laterality, bounds, - and label agreement, but no target-registration-error, bregma/skull-registration-error, clearing - distortion, or inter-animal variation bound is published. -- The nonlinear transform is anisotropic. The displayed scalar tube radius is a visual reference, - not a qualified atlas-space vessel surface. -- The layer cannot establish clearance, absence of a vessel, trajectory suitability, or safety - for an individual animal. It remains CC BY-NC 4.0. - -See [the exact derivation and validation record](docs/VESSAP_MAJOR_VESSELS.md). +- Brain3D currently supports BrainGlobe `allen_mouse_25um` package `1.2`. +- Atlas sampling resolution is separate from stereotaxic targeting accuracy. +- The Allen CCF is a population reference; direct AP/ML planning uses the documented + Pinpoint/Urchin reference profile. +- Region labels and meshes follow the installed atlas package. -## Archived LAMBADA major-vessel evidence +## Probe planning -- The derivative is archived evidence only. It is not loaded, served, displayed, mirrored, or - analyzed by the current runtime. -- AP and DV orientation evidence passed, but the primary source describes hemisphere specimens - and the exact graph has no persisted biological hemisphere/laterality binding. Whole-brain - coverage and ML polarity are unqualified. -- The source workflow removed pial and choroidal vessels. The bundled derivative also removes - points below 15 µm radius (30 µm diameter), so missing vessels are expected. -- The sampled biological side is not bound in the graph; artery/vein identity is unavailable. -- The source corrected/reconnected endpoints and removed short terminal offshoots. Some paths are - reconstructed rather than directly observed. -- Radius conversion uses the source's mean atlas-resampling scale rather than a local Jacobian. - Fixed/cleared tissue distortion, atlas registration error, biological variation, and omitted - vessels are not bounded. -- Out-of-bounds or rejected points split runs and are omitted without clipping/interpolation. -- No source-backed mirror transform is qualified, so mirroring is prohibited. +- The primary workflow supports NP2003 and NP2013. +- Probe geometry is source-transcribed and should be checked against the hardware used in a study. +- Planning does not model probe bending, tissue deformation, brain shift, manipulator backlash, + or headstage collisions. -See [the full extraction record](docs/LAMBADA_MAJOR_VESSELS.md). +## Vascular overlay -## Vessel analysis unavailable +- VesSAP data is optional and installed outside the repository. +- The reference represents one cleared specimen and omits vessels below the configured diameter + threshold. +- The overlay is a display layer; the application does not expose vessel-clearance analysis. -The runtime advertises `auditedReferenceMajorVessels` for VesSAP metadata and display geometry, -but not `radiusAwareReferenceVesselAnalysis`. Analysis fails with -`VESSEL_ANALYSIS_UNAVAILABLE` before reading points or touching a project. Legacy V3 algorithm -code and synthetic tests do not authorize product use. This build emits no vessel intersection, -threshold violation, absence, clearance, suitability, or safety result. +## Export -The older LAMBADA path remains independently rejected. Its digest-bound report is -[`docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json`](docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json), -SHA-256 `0993d5a0ad6c0d62094dc395fe2bc4f284870e6e7c0b602be7df5a7da867c93a`. +- PDF export requires user-selected protocol and reference-atlas documents. +- Historical atlas-page matching is coordinate based and does not register the page to an + individual subject. -## Archived and distribution paths +## Platform -- Surgery-plan export depends on the user-prepared Headplate protocol PDF and the user-supplied - 132-page `MBSC_Figs_with_Layers.pdf`. Those files and their rights are not bundled or - relicensed. Their locations are configured once in **Brain3D → Settings** and reused until - replaced. A disconnected volume must be reconnected or selected again. Export reads both PDFs - directly and does not require Word, Illustrator, or macOS Automation permission. -- Plate matching chooses the nearest reviewed coronal AP or sagittal `|ML|` coordinate. Coronal - AP follows the historical atlas convention `Bregma = Interaural − 3.80 mm`. The appended - historical plate is a coordinate reference, not a subject registration. Its output copy gets - an identity/plan summary, but no claimed trajectory transform is drawn on the artwork. -- A FINAL surgery-plan label records exact saved-project and current v4 profile/surface/probe - provenance gates. It does not establish biological, vascular, procedural, or surgical - validity. Preserved legacy exports retain their original target/calibration requirements. -- Population vascular density and subject-image registration remain archived as compatibility - code and persisted data. Their methods/capabilities are not registered by the primary bridge; - they are absent from the UI and are not used as vessel paths or clearance geometry. -- `build-app.sh` creates an ad-hoc-signed development bundle that depends on the source checkout. - A deterministic bundled runtime, SBOM, Developer ID signing, notarization, and clean-Mac release - qualification are not complete. -- Automated tests establish software invariants only. They do not establish biological, - stereotaxic, vascular, hardware, or procedural accuracy. +- The native application targets Apple Silicon and macOS 14 or later. +- Development builds use the repository Python environment; standalone builds use the release + script. diff --git a/LICENSE b/LICENSE index 65ad8e5..e9e64b1 100644 --- a/LICENSE +++ b/LICENSE @@ -7,10 +7,5 @@ code. No permission is granted to copy, modify, publish, distribute, sublicense, original source code without separate written authorization from the applicable copyright holders. -Third-party software and scientific data retain their own licenses and terms. See THIRD_PARTY.md. - -For clarity, the files -`src/mouse_brain_planner/assets/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz`, -its adjacent manifest, and `VESSAP_DATA_LICENSE.txt` are adapted VesSAP data governed by -Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0). They are excluded -from the all-rights-reserved terms above and are not relicensed by this project. +Third-party software and externally supplied scientific data retain their own licenses and terms. +See THIRD_PARTY.md. diff --git a/PACKAGING.md b/PACKAGING.md index 1e9ae4f..ce31ec1 100644 --- a/PACKAGING.md +++ b/PACKAGING.md @@ -1,69 +1,38 @@ # Packaging and Distribution -The repository currently creates an ad-hoc-signed **development** `.app`. It is not a standalone -release: the executable still discovers Python and the bridge from the source checkout. +## Development bundle ```bash native/Brain3D/Scripts/build-app.sh codesign --verify --deep --strict native/Brain3D/build/Brain3D.app -open native/Brain3D/build/Brain3D.app ``` -`Scripts/build-app.sh` builds the Swift executable, creates the bundle layout, installs the -reviewed `Info.plist`, and applies an ad-hoc signature. It does not bundle `.venv`, Python, atlas -data, or project files. The archived LAMBADA derivative currently resolves from the repository's -Python package beside the source checkout; it is not copied into the development `.app` by this -script and the runtime gate never loads or serves it. +The development bundle uses the repository Python environment. -## Current release blockers +## Standalone Apple Silicon bundle -- deterministic Python 3.12 runtime/backend bundling is not implemented; -- backend discovery still depends on a development checkout; -- Developer ID signing, hardened runtime, entitlements, notarization, and stapling are absent; -- no clean-account/clean-Mac qualification has been completed; -- the build has no SBOM or assembled third-party license bundle; and -- the implemented workflow remains unqualified for animal procedures. - -The removed Qt/PyVista/VTK stack is not a packaging fallback and is not part of the lockfile. - -## Intended distribution shape - -```text -Brain3D.app/ - Contents/ - MacOS/Brain3D native SwiftUI executable - Resources/ reviewed UI resources, notices, qualification evidence - Frameworks/ or Resources/ deterministic Python runtime and scientific service +```bash +native/Brain3D/Scripts/build-release-app.sh ``` -Atlas archives, the optional archived population-density source, subject images, original vessel -graphs, and `.mouseplan` projects remain outside the signed bundle. The P60_606 derivative is not -a reviewed application asset: its hemisphere/laterality and whole-brain qualification is -rejected. A build may retain its manifest, attribution, and canonical rejection report as -evidence, but must not package or advertise it as runtime vessel geometry. Any future vessel -source requires a new qualification and release decision. The app records immutable source -identities and manages user-owned caches. +The release builder freezes the locked Python service, assembles `Brain3D.app`, creates +`Brain3D-macOS-arm64.zip`, verifies Mach-O architecture and deployment targets, checks signatures, +and performs an isolated bridge/app smoke test. Set `OUTPUT_DIR` to choose another destination. -## Release process still to implement +When a Developer ID Application identity is available, the builder uses hardened-runtime signing. +Otherwise it produces an ad-hoc-signed build. Notarization can be performed after the signed build +is produced. -1. Select and document a deterministic Python embedding strategy that preserves Python 3.12 and - the locked wheels without adding a second GUI stack. -2. Build the backend from a clean checkout and verify the minimal runtime script inside the - candidate bundle. -3. Generate an SBOM and license/notice inventory from the exact bundled artifacts. -4. Sign every nested executable/library with the intended Developer ID and reviewed entitlements. -5. Sign the outer bundle, enable the hardened runtime, notarize, staple, and verify offline. -6. Test Finder launch, bridge lifecycle, atlas download/open, save/reopen, update/replacement, - crash recovery, and uninstall behavior on a clean supported Mac/account. -7. Repeat the complete scientific and usability qualification on the immutable release artifact. +## External inputs -Example verification commands after a future signed build exists: +The application bundle does not include: -```bash -codesign --verify --deep --strict --verbose=2 Brain3D.app -spctl --assess --type execute --verbose=4 Brain3D.app -xcrun stapler validate Brain3D.app -``` +- BrainGlobe atlas packages; +- vascular datasets; +- surgery protocol or reference-atlas PDFs; +- user `.mouseplan` projects; or +- subject data. -Passing signing/notarization checks establishes code-distribution integrity only. It does not -establish coordinate, anatomy, vessel, probe, or surgical accuracy. +Runtime data is loaded from application-owned directories or paths selected in Settings. +Dependency notices, build metadata, and the generated SBOM are stored under +`Contents/Resources/Release`. diff --git a/PLAN.md b/PLAN.md deleted file mode 100644 index 8428764..0000000 --- a/PLAN.md +++ /dev/null @@ -1,75 +0,0 @@ -# End-to-End Implementation Plan - -This plan separates implemented engineering behavior from scientific and distribution -qualification. “Implemented” means reachable through the SwiftUI + SceneKit + Python product -path, with typed protocol coverage; it does not mean validated for an animal procedure. - -| Phase | Deliverable | Current state | -| --- | --- | --- | -| 0 | Baseline, reachability audit, risk inventory, architecture ADRs | Complete | -| 1 | One supported GUI and minimal dependencies | Complete | -| 2 | Independent single-view atlas navigation | Implemented | -| 3 | Source-pinned AP/ML profile and exact local annotation-surface entry | Implemented; population-atlas assumption only | -| 4 | Source-traceable NP2003/NP2013 catalog and direct depth/angle/layout placement | Implemented; supported NP2 independent review pending | -| 5 | Exact region traversal, site mapping, inspection, export | Implemented | -| 6 | Major-vessel source, provenance, and 2D overlays | VesSAP display-only overlay implemented; P60_606 archived | -| 7 | Tapered-radius reference vessel analysis | Algorithm tests retained; production capability absent | -| 8 | Native 3D brain/probe/vessel view and picking | Implemented with SceneKit | -| 9 | Animal-study validation and production distribution | Not started | - -## Implemented engineering checkpoint - -- The mode bar is exactly `Dorsal / Coronal / Sagittal / Horizontal / 3D`, with one selected - view. Coronal, sagittal, and horizontal retain independent depths. -- Slider, previous/next, wheel, pan, zoom, and reset share one verified 25 µm slice state. A - click replaces one compact region label without changing depth. -- The complete 840-structure Allen hierarchy and search are shared by all five modes. Selecting a - cortical or non-cortical structure replaces one global identity and lazily loads only that 3D - mesh; it does not couple the three slice depths. -- V4 plans persist the named Pinpoint/Urchin reference, annotation identity, exact local surface, - surface-entry AP/ML, path depth, signed sagittal angle, layout, and model snapshot. AP− is - posterior and ML− is animal-left. A separate target registration/calibration is not a v4 - prerequisite. -- Legacy subject calibrations and target records remain preserved with their original identity, - transforms, residuals, QC, uncertainty, version, and hash. -- The production probe catalog contains only NP2 single shank (1,280 sites / 384 channels) and - standard four shank (5,120 sites / 384 channels). Quad Base, NP1, and the synthetic fixture are - archived compatibility/test definitions and are absent from the new-plan selector. - Manufacturer entries stay `source-transcribed-review-pending` until independent full-table - reviews are recorded. -- Probe plans expose entry, tip, shank envelope, and recording sites in slice and 3D - views. Exact voxel traversal drives region inspection and CSV/JSON export. -- The VesSAP `BL6J-no1` diameter-≥30 µm reference is served after exact source/asset/transform - checks and overlaid in all five views. True source-skeleton adjacency is retained through a - 50 µm display reduction. It is one cleared population reference, not subject-specific. -- Vessel clearance analysis fails closed with `VESSEL_ANALYSIS_UNAVAILABLE`; missing numeric - subject-registration/tissue-distortion bounds cannot be replaced by user acknowledgements. - The V3 algorithm remains isolated engineering/test evidence, not a production feature. -- The older LAMBADA P60_606 derivative remains archived and is never rendered, served, mirrored, - or analyzed because hemisphere/laterality and whole-brain coverage failed qualification. -- Population density and subject-image registration are archived backend paths, not primary UI - features. The 10 µm atlas is excluded from this testing phase. - -## Phase 9 — evidence and distribution gates - -The remaining program is qualification rather than another UI feature sweep: - -1. independently review every supported NP2 transcribed dimension and all encoded site coordinates; -2. define and execute phantom, histology, targeting-error, and repeated-observer studies; -3. quantify calibration and registration uncertainty against declared ground truth; -4. obtain subject-specific vascular ground truth with measured bregma/subject registration, - clearing/live-tissue, and inter-animal uncertainty before validating any vessel analysis; -5. run formal animal-workflow usability and failure-recovery studies; -6. establish performance and visual-regression acceptance thresholds on supported Macs; -7. bundle a deterministic Python runtime and produce an SBOM; -8. complete Developer ID signing, hardened-runtime review, notarization, and clean-Mac tests; and -9. complete a final animal-only/non-human/non-clinical requirement audit. - -The VesSAP layer is display-only and cannot establish vessel absence, clearance, suitability, or -safety; see [its exact evidence record](docs/VESSAP_MAJOR_VESSELS.md). The older P60_606 -derivative is not a layer. Its source is a hemisphere specimen, has no persisted -biological laterality binding, excludes pial and choroidal vessels upstream, and the derivative -filters smaller vessels. The runtime rejects it before producing any conflict or no-conflict -result. The canonical decision is recorded in -[`docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json`](docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json), -SHA-256 `0993d5a0ad6c0d62094dc395fe2bc4f284870e6e7c0b602be7df5a7da867c93a`. diff --git a/PROJECT_STATUS.md b/PROJECT_STATUS.md deleted file mode 100644 index 413e50f..0000000 --- a/PROJECT_STATUS.md +++ /dev/null @@ -1,114 +0,0 @@ -# Project Status - -Status reviewed: 2026-07-25 - -## Bottom line - -The current development tree implements the native research-planning path for independent 25 µm -atlas slices, direct atlas-surface NP2003/NP2013 planning, shared region highlighting, and a -synchronized SceneKit 3D view. A pinned VesSAP C57BL/6J major-vessel reference is visible in all -five views; clearance analysis remains unavailable. The application remains an engineering -testing build—not a qualified distribution or a validated animal-surgery navigation system. - -The source is public at [KaiCao2003/brain3d](https://github.com/KaiCao2003/brain3d). - -## Current product path - -| Area | Implemented behavior | Important boundary | -| --- | --- | --- | -| Native workspace | Exactly `Dorsal / Coronal / Sagittal / Horizontal / 3D`, one full-size view | No focus mode, crosshair, or 2×2 layout | -| Atlas regions | Complete paged 840-structure ontology, common hierarchy/search/selection, descendant-inclusive annotation highlight in all four 2D modes, and the same selected mesh in 3D | Selecting a region never moves or couples slice depths; zero-voxel structures are not fabricated | -| Atlas slices | Independent persisted depths, buttons/slider/wheel, editable one-based slice number, pan/zoom, click-to-replace region label, and explicit atlas-physical coordinate header | `allen_mouse_25um` v1.2 only; 10 µm excluded from testing; header coordinates are not bregma-relative | -| 3D | SceneKit whole-brain mesh, camera control/reset, non-cortical region highlight, probe envelopes, and major-vessel tubes | Rendering consumes schema-checked brain/probe/vessel geometry from the backend | -| Coordinates | Required animal-only context plus signed surface-insertion AP/ML millimetres from a named Pinpoint/Urchin profile, local annotation-surface depth, one sagittal angle, and layout | AP+ anterior/AP− posterior; ML+ right/ML− left; positive angle A→P/negative P→A; the profile is not Allen-official or animal-specific | -| Direct surface | Exact superior boundary of the first nonzero annotation voxel at the resolved AP/ML column; persisted source/digest and load-time rederivation | Population-atlas surface, not measured pia/skull/current-animal anatomy | -| Probes | Primary selector contains only `NP2003` and `NP2013`; normal NP2013 layout is sagittal and `90°` is clockwise from dorsal; numeric edits commit on Return/focus loss and atomic selector changes update immediately | Built-ins are source-transcribed and review-pending, not independently verified; v4 has no target/calibration prerequisite, geometry checkbox, or Apply button | -| Major vessels | VesSAP BL6J-no1, nominal diameter ≥30 µm, overlaid on Dorsal/Coronal/Sagittal/Horizontal/3D; visible-diameter filter is adjustable from 30–250 µm | One cleared ex-vivo population reference; geometry is reduced on a 50 µm spatial grid; no capillaries | -| Surgery-plan PDF | Direct-PDF two-page protocol prefill, one plan-centred view or all five, then one AP/`|ML|`-matched page from `MBSC_Figs_with_Layers.pdf`; v4 pages print AP/ML, local-surface depth, signed angle, and layout | User-owned PDF locations are saved once in Settings and are not bundled; disconnected volumes must be reconnected; planning titles/coordinates and final order are verified | -| Vessel analysis | Unavailable; geometry is display-only and analysis returns `VESSEL_ANALYSIS_UNAVAILABLE` | No conflict, no-conflict, clearance, absence, suitability, or safety claim is produced | -| Projects | Schema-9 revisioned, checksummed `.mouseplan` save/open, migrations, backup recovery, v4 surface rederivation, exact probe-model validation, and legacy v2/v3 reconstruction | Schema-8→9 preserves existing v1–v3 targets/calibrations without guessed conversion; stale sources, altered geometry, forged surface evidence, and invalid legacy fits fail closed | -| Draft lifecycle | One main planning window with an app-owned probe draft; same-context window/sidebar reconstruction preserves typed values; open/reconnect/quit and plan changes are dirty-state guarded | Closing the main window does not quit the app or silently discard the current draft | - -Population vascular density and subject dorsal-image registration remain archived compatibility -code and persisted data. Their methods/capabilities are not registered by the primary bridge, -they are not shown in the primary UI, and they are not interpreted as vessel paths. - -## Probe evidence state - -The primary selector exposes only the complete 1,280-site `NP2003` and 5,120-site standard -four-shank `NP2013`; both have 384 simultaneous channels. `NP2004`/`NP2014` remain cited where -the pinned sources group equivalent physical geometries, not as extra UI choices. Quad Base, -NP1, and the synthetic fixture remain archived definitions for old-project compatibility and -tests. Digests, retrieval dates, coordinate rules, product identities, shank dimensions and -offsets, tip geometry, references, and banks are retained. - -Its exact status is `source-transcribed-review-pending`. Independent full-table review has not -been completed. The v4 UI does not add a per-plan geometry checkbox and does not describe either -model as independently verified. The generic 16-site entry is a synthetic software-test model. - -Project validation compares every catalog-owned persisted model against its exact source-pinned -definition, including provenance, verification state, shank and tip geometry, and the complete -ordered recording-site table. A known catalog ID with an unknown version, or a changed model with -recomputed surrounding hashes, is rejected. Unknown custom identities are limited to historical -v1 audit/review and cannot enter current planning geometry or analysis. - -## Vessel evidence state - -The runtime reference comes from VesSAP `BL6J-no1`, one fixed cleared adult C57BL/6J brain, -[DOI `10.1038/s41592-020-0792-1`](https://doi.org/10.1038/s41592-020-0792-1), -CC BY-NC 4.0. Source skeleton voxels with radius ≥5 on the 3 µm grid are traced through true -26-neighbour adjacency, transformed through the authors' Euler + B-spline Allen registration, -and coalesced on a 50 µm display grid. The exact NPZ is 1,853,131 bytes, -SHA-256 `9300dacf25ca57a5d23377ca0dc885e34ff0d18e8d21ef7590c6dcd156cf5db7`, -with 196,377 points, 76,622 runs, and 119,755 segments. - -Deterministic sampling validated the required `[T_y,T_z,T_x] → [AP,DV,ML]` permutation, mandatory -ML reflection, atlas bounds, and label agreement. This establishes a trustworthy transform -interpretation for display—not biological surgical accuracy. No numeric subject-registration, -clearing-distortion, or inter-animal bound exists, and nonlinear deformation changes a circular -source radius anisotropically. - -The runtime therefore advertises `auditedReferenceMajorVessels` but not -`radiusAwareReferenceVesselAnalysis`. Metadata and geometry are served after exact identity and -buffer checks; analysis fails before project access with `VESSEL_ANALYSIS_UNAVAILABLE`. The -archived LAMBADA P60_606 derivative remains rejected and is never displayed or mirrored. -See [the VesSAP derivation and validation record](docs/VESSAP_MAJOR_VESSELS.md). - -## Engineering evidence and remaining qualification work - -Python tests cover source integrity, coordinate transforms, direct AP/ML sign handling, exact -annotation-surface resolution, positive/negative sagittal angle and layout direction, probe -placement, region overlays, voxel traversal, the vessel display/analysis boundary, persistence, -and real cached atlas paths. Persisted-plan tests rederive v4 surface geometry and reconstruct -legacy v2/v3 geometry from preserved planning inputs; they reject forged surface evidence, -translated/rehashed geometry, same-target alternate-angle geometry, projection-digest forgeries, -changed/rehashed catalog model snapshots, and legacy calibrations that violate AP ordering or -atlas midline/laterality semantics. Calibration tests independently rerun both production fits -and reject forged matrices, correspondences, residuals, leveling angles, and QC. Historical v1 -records remain loadable for review but cannot enter 2D/3D planning overlays, PDF planning pages, -or region analysis until updated; vessel-clearance analysis is unavailable for every version. -Legacy synthetic tests preserve isolated tapered-geometry contracts, but the production bridge -cannot expose them. Swift tests cover strict protocol decoding, independent view state, viewport -math, complete ontology paging/closure, slice overlays, SceneKit transforms, bounded mesh -caching, descendant-inclusive 2D region compositing, a singleton main-window policy with -app-owned same-context draft retention, and an off-screen composite containing whole brain, -Thalamus, NP2, and VesSAP vessels. -Surgery-export tests cover the exact 132-page atlas catalog, historical Bregma/Interaural -convention, AP/`|ML|` matching, direct protocol-PDF overlay units, per-page vessel -identity/count disclosure, bounded long subject/target identity, exact planning-page coordinate -retention, and deterministic ordered page assembly. -The app can be built and ad-hoc signed for development and is exercised as a real macOS process. - -Viewer-only slice and pick updates use a targeted viewer-state validator and copy only those -fields onto the already validated project graph. This removes unrelated trajectory -reconstruction from interactive navigation; project create/open/save, surgery-plan mutation, -analysis, and export retain full semantic validation. - -That evidence validates software behavior, not biological or procedural accuracy. Remaining work -before any qualified distribution includes independent supported-NP2 transcription review, reference- -and subject-ground-truth studies, measured workflow/error studies, formal usability work, a -bundled deterministic Python runtime, Developer ID signing, notarization, and clean-Mac -qualification. - -No prospective animal study, phantom targeting study, histological outcome study, or formal -clinical/veterinary-device validation is claimed. diff --git a/README.md b/README.md index 8b214c4..81be508 100644 --- a/README.md +++ b/README.md @@ -1,236 +1,57 @@ # Brain3D -Brain3D is a macOS research planner for mouse stereotaxy and Neuropixels placement. The current -development tree provides one native, single-view workspace with exactly five modes: -**Dorsal / Coronal / Sagittal / Horizontal / 3D**. +Brain3D is a native macOS application for mouse-brain atlas exploration, stereotaxic planning, +Neuropixels placement, and surgery-plan export. -> **Animal research only — non-human and non-clinical.** Brain3D is an engineering testing build, -> not a qualified surgical-navigation or veterinary device. Its atlas reference, coordinates, -> and probe outputs require independent review before an animal procedure. The current build displays a -> population-reference major-vessel layer, but exposes no vessel-clearance or safety result. +## Highlights -The repository is public at [KaiCao2003/brain3d](https://github.com/KaiCao2003/brain3d). -Published source is available for review, but the current tree is not an installable production -release or a validation claim. +- Dorsal, coronal, sagittal, horizontal, and SceneKit 3D views. +- BrainGlobe `allen_mouse_25um` atlas support with ontology search and region highlighting. +- Direct AP/ML surface planning for Neuropixels 2.0 single- and four-shank probes. +- Synchronized probe geometry across slice and 3D views. +- Optional external VesSAP major-vessel overlay. +- Checksummed `.mouseplan` projects and PDF surgery-plan export. -## Implemented workflow +## Requirements -| Capability | Current development behavior | -| --- | --- | -| Atlas | BrainGlobe `allen_mouse_25um` package `1.2` only; 10 µm is excluded from this testing phase | -| Slice navigation | One full-size coronal, sagittal, or horizontal view; each retains an independent depth with buttons, an editable one-based slice number, slider, wheel, pan, and zoom; the header labels its atlas-native physical coordinate | -| Region inspection | Complete 840-structure Allen ontology search/browse; one shared selection drives descendant-aware 2D/3D highlighting without changing slice depth; ontology-only entries with no reviewed voxels or mesh remain selected with an explicit no-geometry message | -| Dorsal | Atlas surface with the selected probe's AP/ML entry and shank projection plus display-only major vessels | -| 3D | Native SceneKit brain mesh with camera control, atlas-region picking/highlight, probes, and major-vessel tubes | -| Direct implant definition | AP and ML locate user-facing Shank 1 at an exact local annotation-surface crossing; depth runs from that crossing to its distal target; one signed sagittal angle and one layout orientation | -| Probes | The primary selector contains only `NP2003` (1 shank) and `NP2013` (4 shanks); exact source-pinned model snapshots; automatic committed edits and slice/3D overlays | -| Vessels | VesSAP BL6J-no1 diameter-≥30 µm display reference overlaid in all five views; no capillary layer | -| Surgery plan | Prefilled two-page protocol + selectable Dorsal/Coronal/Sagittal/Horizontal/3D planning pages + one coordinate-matched legacy atlas page | -| Reference analysis | Unavailable: clearance calls fail closed with `VESSEL_ANALYSIS_UNAVAILABLE`; geometry remains display-only | -| Persistence | Schema-9 checksummed `.mouseplan` packages with revisions, provenance, migrations, backup recovery, v4 surface rederivation, and probe/model reprojection checks; legacy v1–v3 records remain preserved | +- Apple Silicon Mac +- macOS 14 or later +- Python 3.12 +- Swift +- [uv](https://docs.astral.sh/uv/) -Population vascular density and subject-image registration remain archived compatibility code and -persisted data only. Their methods and capabilities are not registered by the primary bridge, they -are absent from the planning UI, and they are not substituted for vessel paths. There is no focus -mode, crosshair, 2×2 layout, or capillary layer. - -## Coordinate contract - -The primary implant controls are the surface insertion AP/ML, surface-relative depth, insertion -angle, and probe layout. The card labels the axes `AP (+A / −P)` and `ML (+R / −L)`. AP and ML -locate the insertion site on the atlas surface in millimetres from the explicitly named -Pinpoint/Urchin profile: - -| Axis | Positive | Negative | -| --- | --- | --- | -| AP | anterior / forward | posterior / back | -| ML | right | left | - -For example, `AP -1.25`, `ML -0.70` means 1.25 mm posterior and 0.70 mm left. Brain3D resolves -that AP/ML column in the loaded 25 µm annotation and uses the superior boundary of its first -non-background voxel as the surface crossing for user-facing **Shank 1** (catalog ID `shank-0`). -The AP/ML values are therefore neither an array-centre coordinate nor a point inside the brain. -**Depth (mm)** is positive path length from that Shank 1 surface crossing to its distal target—not -a DV coordinate and not a distance from the atlas box. Angle `0°` inserts inward; a positive angle -advances from anterior toward posterior (A→P), while a negative angle advances from posterior -toward anterior (P→A). - -For NP2013, `Sagittal` keeps the four-shank plane parallel to the sagittal plane and makes Shank 1 -the most anterior shank; the other three extend posterior at 250 µm pitch. `90° CW` rotates the -whole array clockwise as viewed dorsally and makes Shank 1 animal-left-most; the other three extend -toward animal right. In 3D, each NP2 shank is the complete catalogued 10 mm shaft from proximal end -to distal tip. At depth `d`, the remaining `10 − d` mm extends proximally from the surface, normally -outside the brain. Slice overlays, atlas-region traversal, and any path analysis retain the -surface-to-tip implanted segment rather than treating that external remainder as inserted tissue. - -The named reference is pinned to a specific Virtual Brain Lab Urchin/Pinpoint source revision -and stored with its source digest. It is a Pinpoint planning convention for the population -atlas, **not** an Allen-supplied official bregma and not a registration to the individual mouse. -BrainGlobe arrays still use `[AP, DV, ML]` in micrometres, and the coordinate shown above a slice -remains an atlas-native physical coordinate. See -[Coordinate conventions](docs/ADR-002-coordinate-conventions.md). - -On Dorsal, Coronal, and Horizontal atlas images, animal right is the screen-left edge and animal -left is the screen-right edge. Therefore a negative ML input appears on the screen-right, -`L`-labelled side; a negative AP input moves toward the `P`-labelled edge. - -New v4 probe creation does not require a separately registered target, a subject calibration, or -a per-plan geometry checkbox. The exact built-in source snapshots and their review-pending -provenance remain visible and validation remains fail-closed; removing the checkbox does not -promote either transcription to independently verified hardware geometry. Older project packages -may retain archived v1–v3 target/calibration and multi-angle records. Brain3D preserves those -records and their original semantics, but does not expose them as primary new-plan controls. - -There is no probe Apply/Create button. NP2003/NP2013 and the sagittal/90° layout are atomic -choices and update immediately. AP, ML, surface depth, and angle update on Return or when the -numeric field loses focus, so typing `90` cannot submit the intermediate `9`. Mutations are -serialized and coalesced to the newest committed edit; the views and PDF never claim an -unfinished keystroke as operative geometry. - -A partially typed or invalid numeric value remains an editor draft and does not replace the -last valid plan. Opening another project, reconnecting, quitting, saving, or exporting is guarded -while such text remains unresolved, so it cannot be mistaken for the displayed trajectory. - -There is one main planning window, and its probe draft is owned by the app-level planner model -rather than by the sidebar view. Closing that window does not quit the app or clear a draft; -reopening the same project/plan context restores the same typed values. A real project, plan, or -saved plan-input change synchronizes the draft only after the dirty-state guard has been -resolved. - -On project validation, Brain3D re-resolves a v4 entry against the loaded annotation and -reconstructs its AP/ML, surface, depth, signed angle, layout, and probe geometry. It also keeps -the legacy validator: Brain3D fully reconstructs planning-algorithm v2/v3 placements from the -preserved mode, entry (when applicable), angles, depth, roll, probe model, source target, and -calibration, then compares every physical geometry field. It therefore rejects translated or -same-target alternate-angle geometry even if its record hash is recomputed. Historical v1 -records lack sufficient preserved inputs for this reconstruction: they remain loadable for -review only and cannot enter 2D/3D planning overlays, PDF planning pages, or region analysis -until updated. Vessel-clearance analysis remains unavailable for every plan version. Persistence -schema 9 adds the optional calibration-free v4 representation; migration preserves v1–v3 records -without guessing or silently rewriting their scientific geometry. - -## Probe geometry boundary - -The primary selector intentionally contains only the two requested Neuropixels 2.0 choices: - -- single shank, 1,280 sites (`NP2003`); -- standard four shanks at 250 µm pitch, 5,120 sites and 384 simultaneous channels - (`NP2013`). - -`NP2004` and `NP2014` remain cited where the pinned source artifacts group equivalent physical -geometries, but they are not separate UI choices. Quad Base, Neuropixels 1.0, and the synthetic -fixture remain archived in code for old-project compatibility and test evidence. Exact -manufacturer, user-manual, electrode-mapping, ProbeTable, and SpikeGLX snapshots and SHA-256 -digests are recorded. - -When a project is validated, a catalog-owned model snapshot must equal its source-pinned -definition field for field. This includes identity/version, verification and provenance, -shank dimensions and offsets, tip geometry, and the complete ordered recording-site table; a -recomputed plan hash cannot legitimize a modified width, site, or source record. Unknown custom -identities are retained only on the historical v1 audit path and cannot enter current planning -geometry or analysis. - -Both selectable models remain deliberately **`source-transcribed-review-pending`**. No independent -human has reviewed every encoded coordinate against the cited sources or physical probes. The -direct v4 path does not add a geometry checkbox and never presents the models as independently -verified geometry. See [Probe Models](PROBE_MODELS.md). - -## Major-vessel reference boundary - -The visible layer is a reproducible derivative of the public VesSAP `BL6J-no1` whole-brain -3 µm skeleton and radius volumes from Todorov et al., -[Nature Methods 2020](https://doi.org/10.1038/s41592-020-0792-1), CC BY-NC 4.0. It retains -source radius ≥15 µm (nominal diameter ≥30 µm), preserves only true 26-neighbour source-skeleton -adjacency, applies the authors' Euler + B-spline Allen transform with an independently checked ML -reflection, and reduces paths on a 50 µm display grid. The pinned asset contains 196,377 points, -76,622 runs, and 119,755 segments. - -The backend advertises `auditedReferenceMajorVessels` and serves digest-checked geometry. -Swift overlays it on Dorsal, Coronal, Sagittal, Horizontal, and 3D. The backend deliberately does -not advertise `radiusAwareReferenceVesselAnalysis`: `vessel.major.reference.analyze` returns -`VESSEL_ANALYSIS_UNAVAILABLE` before reading or mutating project state. - -This is one cleared ex-vivo C57BL/6J reference, not the operative animal. Capillaries are omitted; -artery/vein identity is unavailable; the nonlinear transform is anisotropic; and no numeric -subject-registration, clearing-distortion, or inter-animal error bound is published. The layer -cannot establish clearance, vessel absence, trajectory suitability, or safety. - -The older LAMBADA P60_606 derivative remains archived and rejected: its hemisphere/laterality -binding and whole-brain coverage are not qualified, so it is never served or mirrored. See -[VesSAP Major Vessels](docs/VESSAP_MAJOR_VESSELS.md), -[LAMBADA Major Vessels](docs/LAMBADA_MAJOR_VESSELS.md), and -[Known Limitations](KNOWN_LIMITATIONS.md). - -## Surgery-plan PDF - -**Export PDF…** fills pages 1–2 of the supplied Headplate Protocol from the selected animal -plan, renders either one plan-centred view or all five views with the current probe and VesSAP -layer, and appends one coordinate-matched page from the user-owned 132-page -`MBSC_Figs_with_Layers.pdf`. The final atlas page is chosen by AP for coronal plates or `|ML|` -for sagittal plates; the signed left/right ML value remains explicit in the planning pages. The -source template's third-page sketch is a placeholder and is replaced, not emitted. - -Set the prepared Headplate protocol PDF and `MBSC_Figs_with_Layers.pdf` once in -**Brain3D → Settings**. Every export reuses those saved locations until they are replaced there; -a disconnected volume is reported instead of opening a chooser on every export. The -implementation reads both PDFs directly, uses SceneKit for the 3D snapshot, and uses -PDFKit/Core Graphics for overlays, assembly, and verification. It does not open Word, -Illustrator, or another converter. Neither supplied PDF is copied into this public repository. -Each v4 planning page puts the complete AP/ML/local-surface-depth text on its own fixed coordinate -line, separate from the bounded subject/plan identity, and prints the signed A↔P angle and layout. -Brain3D verifies that full coordinate text and the expected view title on the rendered page and -again in the ordered final packet. V4 export does not require a separate target projection or -subject calibration. -See -[Surgery-plan export](docs/SURGERY_PLAN_EXPORT.md). - -## Architecture - -```text -SwiftUI macOS application - ├─ one selected Dorsal / Coronal / Sagittal / Horizontal / 3D workspace - ├─ native controls, file panels, accessibility, and 2D overlays - └─ SceneKit brain/probe/reference-vessel rendering and camera interaction - ↕ strict typed NDJSON -Python 3.12 scientific service - ├─ pinned BrainGlobe atlas access and coordinate transforms - ├─ annotation-surface resolution, probe geometry, vessel geometry, and voxel traversal - └─ provenance, integrity checks, qualification gates, stale-result rejection, and persistence -``` - -Swift owns presentation. Python owns scientific coordinate conversion and analysis. Both paths -reject stale revisions and mismatched source identities. See [Architecture](docs/ARCHITECTURE.md) -and [ADR-004](docs/ADR-004-swiftui-hybrid-shell.md). - -Viewer-only slice and region-pick mutations validate their bounded viewer state and preserve the -already validated surgery-plan graph, so moving a slice does not reconstruct every trajectory. -Project create/open/save, probe mutation, analysis, and PDF export retain the full -semantic-validation boundary. Legacy calibration mutation remains isolated to preserved v1–v3 -records. - -Pinpoint is the workflow reference, not an embedded state engine. Its hosted WebGL build does not -expose a supported bidirectional contract for probe identity, coordinates, atlas/camera state, or -the VesSAP overlay. Brain3D therefore uses its existing full BrainGlobe/Allen service instead of -copying or embedding an unsynchronized Unity canvas. See -[Pinpoint interoperability](docs/PINPOINT_INTEGRATION.md). - -## Developer quick start - -Requirements: Apple Silicon Mac, macOS 14 or later, Python 3.12, Swift, and -[uv](https://docs.astral.sh/uv/). +## Quick start ```bash uv python install 3.12 uv sync --frozen --group dev +uv run --frozen mouse-brain-planner atlas download allen_mouse_25um native/Brain3D/Scripts/build-app.sh open native/Brain3D/build/Brain3D.app ``` -The development app discovers the repository `.venv` and Python bridge. If discovery fails, it -reports the failure instead of substituting demo anatomy. The Allen 25 µm reference and annotation -arrays require about 0.43 GiB before rendering overhead. +The development app uses the repository Python environment. To build the standalone Apple Silicon +application: + +```bash +native/Brain3D/Scripts/build-release-app.sh +``` + +## Data and documents + +Third-party datasets and PDFs are not stored in this repository. + +- The Allen atlas is downloaded on demand to the application data directory. +- Surgery protocol and reference-atlas PDFs are selected by the user in **Brain3D → Settings**. +- The optional VesSAP overlay uses an externally supplied data package. Place + `vessap_bl6j1_major_vessels_50um_v1.npz` and its + `.npz.manifest.json` file in `/vasculature/`. Set + `MOUSE_BRAIN_PLANNER_DATA_DIR` to override the platform data directory. + +External files retain their original licenses and terms. See [Third-party software and +data](THIRD_PARTY.md). -Useful commands: +## Commands ```bash uv run --frozen mouse-brain-planner atlas list @@ -238,7 +59,7 @@ uv run --frozen mouse-brain-planner atlas download allen_mouse_25um uv run --frozen mouse-brain-planner validate-project /absolute/path/Plan.mouseplan ``` -Development checks: +## Development checks ```bash uv lock --check @@ -248,78 +69,32 @@ uv run --frozen mypy --no-incremental uv run --frozen pytest -q swift test --package-path native/Brain3D --no-parallel native/Brain3D/Scripts/build-app.sh -codesign --verify --deep --strict native/Brain3D/build/Brain3D.app ``` -`build-app.sh` creates an ad-hoc-signed development bundle that depends on the source checkout. - -## Standalone Apple Silicon release - -Build the distributable app on an Apple Silicon Mac: - -```bash -native/Brain3D/Scripts/build-release-app.sh -``` - -The release builder uses the locked production dependency graph, exact uv-managed CPython -3.12.12, and pinned PyInstaller 6.21.0. It emits -`native/Brain3D/dist/Brain3D.app` plus `Brain3D-macOS-arm64.zip`; the zip contains exactly one -top-level `Brain3D.app`. Set `OUTPUT_DIR=/absolute/path` to select another output directory. - -The frozen bridge lives at -`Brain3D.app/Contents/Resources/Bridge/brain3d-bridge`. The app prefers that verified bundled -executable over repository discovery. The builder hard-fails if any Mach-O is not arm64-only, -requires newer than macOS 14.0, uses a host-only Homebrew/Xcode/local dependency or runpath, or if -a symlink leaves the app. It then unzips the archive, denies the source checkout to both processes, -performs a bridge `hello`, launches the real Swift app, observes that exact bundled bridge child, -and verifies both processes remain alive before controlled shutdown. The release environment -contains no test/lint/type-check dependencies, and the bundle includes its production CycloneDX -SBOM, exact dependency notices, and build provenance under `Contents/Resources/Release`. - -If a `Developer ID Application` identity is available, the builder uses it for PyInstaller and -the outer app with the hardened runtime; otherwise it uses ad-hoc signing. Ad-hoc output is useful -for local qualification but is not notarized and should not be presented as a normal Gatekeeper- -ready download. Notarization and testing on a separate clean macOS 14 Apple Silicon machine remain -release-operator gates. - -The app contains code and the display-only VesSAP derivative, but not the Allen atlas, user -protocol PDF, or Mouse Brain atlas PDF. Allen data is still downloaded to the user's application -cache when requested; the two surgery-packet PDFs remain external user-configured inputs. Public -distribution must preserve the bundled notices and the VesSAP CC BY-NC 4.0 noncommercial terms. - -## Repository map +## Architecture ```text -native/Brain3D/ SwiftUI + SceneKit application and native tests -src/mouse_brain_planner/ - atlas/ pinned BrainGlobe access boundary - bridge/ typed service used by the native app - coordinates/ named coordinate frames and transforms - probes/ source-traceable probe catalog - analysis/ region traversal plus archived vessel-analysis code - vasculature/ display-only VesSAP geometry plus archived evidence paths - persistence/ checksummed project packages and migrations -tests/ Python software tests and fixtures -docs/ architecture, decisions, audits, and source records +SwiftUI + SceneKit macOS app + ↕ typed NDJSON +Python atlas and planning service ``` +Swift owns presentation and native file workflows. Python owns atlas access, coordinate +conversion, planning geometry, persistence validation, and scientific data checks. + ## Documentation -- [Project Status](PROJECT_STATUS.md) -- [User Guide](USER_GUIDE.md) -- [Known Limitations](KNOWN_LIMITATIONS.md) -- [Scientific Validation](SCIENTIFIC_VALIDATION.md) -- [Probe Models](PROBE_MODELS.md) -- [VesSAP Major Vessels](docs/VESSAP_MAJOR_VESSELS.md) -- [Surgery-plan export](docs/SURGERY_PLAN_EXPORT.md) -- [Pinpoint interoperability](docs/PINPOINT_INTEGRATION.md) -- [LAMBADA Major Vessels](docs/LAMBADA_MAJOR_VESSELS.md) -- [Third-Party Software and Data](THIRD_PARTY.md) - [Installation](INSTALL.md) +- [User guide](USER_GUIDE.md) +- [Architecture](docs/ARCHITECTURE.md) +- [Atlas data](ATLAS_DATA.md) +- [Coordinate systems](COORDINATE_SYSTEMS.md) +- [Probe models](PROBE_MODELS.md) +- [Surgery-plan export](docs/SURGERY_PLAN_EXPORT.md) +- [VesSAP external data](docs/VESSAP_MAJOR_VESSELS.md) +- [Third-party software and data](THIRD_PARTY.md) ## License -This public repository is **not open source**. Original source code remains all rights reserved -under [LICENSE](LICENSE). Atlas, probe-source documents, and scientific data retain their own -terms. In particular, the bundled VesSAP derivative remains CC BY-NC 4.0 and is not covered by -the source-code terms; see [Third-Party Software and Data](THIRD_PARTY.md). +Original source code is covered by [LICENSE](LICENSE). Dependencies and externally supplied data +retain their own licenses. diff --git a/SCIENTIFIC_VALIDATION.md b/SCIENTIFIC_VALIDATION.md index 198d3f8..07b4d9f 100644 --- a/SCIENTIFIC_VALIDATION.md +++ b/SCIENTIFIC_VALIDATION.md @@ -1,234 +1,34 @@ -# Scientific Validation Record +# Verification Scope -Reviewed: 2026-07-25 +Brain3D's automated checks cover software behavior and data-contract consistency. -This file distinguishes implemented and tested software behavior from scientific or procedural -validation. Brain3D is restricted to non-human mouse research. No clinical, veterinary-device, -animal-outcome, phantom-targeting, histological-accuracy, or formal usability validation is -claimed. +## Covered by tests -## Current evidence matrix +- Allen atlas identity, orientation, shape, and coordinate conversions. +- AP/ML surface resolution, probe placement, and trajectory reconstruction. +- Probe catalog dimensions, shank/site layout, and persistence round trips. +- Slice, region, SceneKit, and bridge protocol behavior. +- Project checksums, migrations, backup recovery, and stale-state rejection. +- Optional VesSAP manifest, digest, array, and coordinate checks when external data is supplied. -| Area | Software evidence in the current tree | What remains unestablished | -| --- | --- | --- | -| Native workspace | Single selected five-mode view, independent depths, shared selected-region overlays in four 2D modes plus 3D, pan/zoom/wheel, stale-frame checks | Procedure usability and error rate | -| Allen atlas | Strict `allen_mouse_25um` v1.2 identity, metadata/array checks, real-cache smoke paths | Subject anatomy and 25 µm targeting accuracy | -| Direct atlas-surface input | Source-pinned Pinpoint/Urchin reference; AP/ML sign tests; exact first-annotated-voxel surface; depth/angle/layout reconstruction and persisted-digest checks | Accuracy of the profile for an individual animal, pia/skull correspondence, and achieved path | -| Legacy calibration | Typed CRUD, matched-landmark fits, residual/QC gates, transform round trips, hash/revision binding retained for v1–v3 | Accuracy of user measurements and biological registration | -| NP2 geometry | Selectable NP2003/NP2013 geometries are derived from pinned source constants; shank/site count, pitch, offset, transform, and plan-creation tests | Independent full-table review and physical-probe conformance | -| NP1 geometry | All 960 sites derived from pinned source snapshots; schema/count/pattern tests | Independent full-table review and physical-probe conformance | -| VesSAP display geometry | Pinned source/asset/transform digests; true-path extraction; axis/laterality/bounds/label checks; Python→Swift binary protocol; slice/3D render tests | Subject registration, live anatomy, clearing/inter-animal error, and qualified vessel surfaces | -| LAMBADA evidence | Reproducible extraction, source/asset hashes, schema/bounds/radius/run checks, and digest-bound rejected qualification | Biological laterality, whole-brain coverage, and subject-specific vasculature | -| Vessel V3 | Legacy synthetic AABB-candidate and tapered-surface tests; production capability is absent | Subject-specific geometry, empirical uncertainty, and biological decision thresholds | -| SceneKit | Coordinate-transform, brain/probe/vessel mesh, picking, and off-screen render tests | Anatomical truth beyond supplied geometry | -| Persistence | Project revisions, checksums, migrations, backup recovery, source/input digests | Long-term regulated record requirements | +## Study-specific verification -The macOS application is built and ad-hoc signed as a development bundle and exercised as a real -process. That does not constitute clean-Mac production packaging, notarization, or release -qualification. +A research workflow should independently verify: -## Atlas boundary +- subject registration and landmark acquisition; +- probe/hardware geometry used in the experiment; +- planned versus achieved trajectories; +- tissue deformation and manipulator effects; +- vascular coverage and uncertainty; and +- the exact application, atlas, and data versions used for analysis. -The supported identity is: +The test suite can be run with: -| Field | Value | -| --- | --- | -| BrainGlobe key/version | `allen_mouse_25um` / `1.2` | -| Voxel spacing | `(25,25,25)` µm | -| Array shape | `(528,320,456)` in `[AP,DV,ML]` order | -| CCF citation | Wang et al., Cell 2020, DOI `10.1016/j.cell.2020.04.007` | - -The 10 µm package is excluded from this testing phase. The accepted 25 µm sampling interval -does not bound stereotaxic, registration, or procedural error. Slice and SceneKit coordinate -round trips test the application convention, not biological correspondence to an individual -mouse. - -## Direct bregma, surface, angle, and layout convention - -The v4 direct path uses AP and ML millimetres from a named Pinpoint/Urchin profile: - -| Axis | Positive | Negative | -| --- | --- | --- | -| AP | anterior | posterior / back | -| ML | left | right | - -The pinned reference resolves to BrainGlobe physical `[AP,DV,ML] = [5200,332,5700] µm` for -`allen_mouse_25um` v1.2. The exact Urchin revision and source SHA-256 are persisted. This is a -reproducible Pinpoint planning convention, not an Allen-supplied official bregma and not a -subject-specific registration. - -At the requested AP/ML column, software tests require the entry to equal the superior boundary -of the first nonzero annotation voxel. Depth is the positive entry-to-tip path length. For the -single visible sagittal angle, positive advances A→P and negative advances P→A. NP2013 layout -`0°` places the shank plane sagittally; `90°` rotates it clockwise from dorsal. These tests -establish implementation signs and reconstruction, not accuracy in a live animal. - -V1–v3 target/calibration records remain preserved with their original requirements. Their -projection still requires declared skull-frame metadata, matched landmarks, laterality, a DV -reference, a rigid/similarity fit, and user-sourced QC limits. They are not silently converted -into v4 surface plans. - -## Neuropixels 2.0 evidence - -The primary selector exposes `NP2003` (single shank) and standard `NP2013` (four shanks); both -expose 384 simultaneous channels. `NP2004` and `NP2014` remain cited in the pinned source -artifacts where they share the transcribed physical geometries, but are not extra UI choices. -The transcription uses -pinned imec data-sheet, User Manual V1.0.6, electrode-channel mapping, ProbeTable 1.8, and -SpikeGLX snapshots. Quad Base remains archived compatibility evidence and is not selectable. - -Each 10 mm × 70 µm × 24 µm shank contains 1,280 point sites in 640 two-site rows. Coordinates -use the source-backed 206 µm tip-to-lowest-row-center distance, 15 µm axial pitch, and −8/+24 µm -lateral centers. Four-shank centers are 0/+250/+500/+750 µm from primary leftmost `shank-0`. -The manufacturer 175 µm chisel-tip length remains a distinct physical dimension. - -The two selectable choices and archived Quad Base definition are -**`source-transcribed-review-pending`**. Exact software reconstruction and end-to-end creation -tests do not establish manufacturing tolerance, independent transcription review, -physical-device conformance, implantation accuracy, or tissue response. - -## Neuropixels 1.0 evidence - -The NP1 NP1000 / `PRB_1_4_0480_1` entry transcribes all 960 sites from four pinned sources: - -- imec Neuropixels 1.0 specification; -- ProbeTable 1.8 `probe_features.json` at commit - `207f7bf424b0fa26f271700b970e27a58a9a1111`; -- SpikeGLX `IMROTbl.cpp` at commit `d67bee45fa2635873456eb5d3f5e5a051690e64f`; and -- SpikeGLX metadata coordinate definitions at that commit. - -Each snapshot has a recorded SHA-256. The model distinguishes the manufacturer 175 µm chisel -tip from SpikeGLX's 209 µm physical-tip-to-lowest-row-center measurement. It includes the 10 mm -shank, 70 µm width, 24 µm thickness, row/site pattern, references, and banks. - -The verification status is **`source-transcribed-review-pending`**. The transcription has not -received an independent full-table human review, so it cannot be described as independently -verified manufacturer geometry. See [Probe Models](PROBE_MODELS.md). - -## VesSAP display-reference evidence - -Source: VesSAP `BL6J-no1`, Todorov et al., *Machine learning analysis of whole mouse brain -vasculature*, [DOI `10.1038/s41592-020-0792-1`](https://doi.org/10.1038/s41592-020-0792-1), -public repository release 2021.10.01, CC BY-NC 4.0. - -The derivative begins with the official same-grid 3 µm skeleton and radius volumes. Radius ≥5 -source voxels retains 1,262,706 centerline voxels (nominal radius ≥15 µm / diameter ≥30 µm). -Only mapped edges induced by true 26-neighbour source adjacency are retained; graph endpoint -chords are never substituted. Paths are coalesced on a 50 µm display grid, yielding 196,377 -points, 76,622 runs, and 119,755 segments in a 1,853,131-byte NPZ with SHA-256 -`9300dacf25ca57a5d23377ca0dc885e34ff0d18e8d21ef7590c6dcd156cf5db7`. - -The authors' Euler + B-spline transform is interpreted as -`AP_um = 30*T_y`, `DV_um = 30*T_z`, `ML_um = 11390 - 30*T_x`. The ML reflection is mandatory: -VesSAP moving-x increases left-to-right while BrainGlobe ASR ML increases right-to-left. -Deterministic validation used 20,000 graph nodes. It found 99.705% in atlas bounds, 99.4618% -grouped-region agreement at 10 µm excluding background, 99.9787% agreement between the official -registered signed-label NIfTI and supplied processed groups, and 99.9794% laterality agreement at -the canonical midpoint. Four laterality discrepancies were all within 5.38 µm of midline. - -These checks qualify the coordinate interpretation for a display reference. They do not qualify -clearance. This is one ex-vivo cleared specimen; no target-registration-error, bregma/skull -registration, clearing-distortion, or inter-animal bound is published. Sampled nonlinear-transform -singular values span 0.672–1.560, so a scalar source radius is not a qualified circular -atlas-space surface. The runtime therefore exposes geometry but rejects clearance analysis. -See [the full evidence record](docs/VESSAP_MAJOR_VESSELS.md). - -## LAMBADA major-vessel evidence - -Source: Renier, de Launoit, and Skriabine, *Vascular graphs of the developing post-natal mouse -brain*, [Zenodo record 18876865](https://zenodo.org/records/18876865), DOI -`10.5281/zenodo.18876865`, CC BY 4.0; associated Cell paper DOI -`10.1016/j.cell.2026.03.013`. - -The pinned source archive is `P60_606_graph_2024-12-03.gt.7z`, 5,050,194,723 bytes, Zenodo MD5 -`218ed346c6d7dc501301204f811be37f`. The bundled 814,393-byte derivative has SHA-256 -`fb2344e845e604be3424bd63f4222d273eafba34db0df2eaff32f4400fa9afec` and contains: - -- 71,313 radius-bearing points; -- 59,495 segments; -- 11,818 maximal consecutive in-bounds runs; and -- 10,907 contributing source edges. - -The extraction threshold is point radius ≥15 µm, equivalent to diameter ≥30 µm. It does not -select whole edges by mean or maximum radius. Coordinates are converted from ClearMap to -BrainGlobe `[AP,DV,ML]` and then to physical micrometres without a half-voxel shift. The loader -checks the adjacent manifest, asset identity, arrays, dtypes, shapes, bounds, thresholds, ordering, -and run lengths in the archived evidence path. - -This evidence supports deterministic extraction from the declared reference. It does not support -display or analysis. The exact qualification found supporting AP and DV orientation evidence but -rejected the asset because the primary source describes hemisphere specimens and the exact graph -has no persisted biological hemisphere/laterality binding. Whole-brain coverage and ML polarity -are unqualified; numeric points on both sides of the array midpoint do not resolve either issue, -and no mirroring is permitted. - -No LAMBADA handler or capability is registered in the current runtime, and the production -reference endpoints never load this asset; those endpoints now belong exclusively to the -separately qualified VesSAP display reference. The canonical LAMBADA rejection report is -[`docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json`](docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json), -SHA-256 `0993d5a0ad6c0d62094dc395fe2bc4f284870e6e7c0b602be7df5a7da867c93a`. -The source also excludes pial and choroidal vessels; the derivative filters smaller vessels; and -artery/vein identity, biological variation, tissue distortion, and registration error are not -resolved. See [the derivation record](docs/LAMBADA_MAJOR_VESSELS.md). - -## Archived V3 algorithm evidence - -Algorithm `major-vessel-aabb-tapered-surface-v3` computes conservative AABB lower bounds and -feasible upper bounds before running exact finite-segment and tapered-surface minimization only on -the sound candidate set. In isolated synthetic tests it reports centerline/surface geometry, -interpolated radius, probe envelope, required margin, -registration uncertainty, adjusted clearance, closest points, insertion depth, conflict class, -source identity, algorithm version, and input hashes. - -This algorithm is not a production capability for VesSAP or P60_606. The display-only gate runs -before project, asset, or analysis access, so the application produces neither positive conflicts -nor absence results. User-supplied margins or uncertainty cannot manufacture missing source -uncertainty bounds. - -### Reproducible performance evidence - -The offline, non-product [major-vessel benchmark](scripts/benchmark_major_vessel_analysis.py) -loads the SHA-256-verified archived asset and uses a fixed synthetic probe/profile input. Run it -with: - -```console -uv run python scripts/benchmark_major_vessel_analysis.py --iterations 20 +```bash +uv run --frozen pytest -q +swift test --package-path native/Brain3D --no-parallel ``` -One run on 2026-07-22 used an Apple M4 (`Mac16,13`, arm64), macOS 26.5.2, and CPython -3.12.13. The asset contained 71,313 points, 11,818 runs, and 59,495 segments. V3 selected -243 candidates, performed exactly 243 narrow-phase measurements, and reported 153 loaded-geometry -algorithmic conflicts in that offline fixture. Timings were: - -| Measurement | Milliseconds | -| --- | ---: | -| Verified asset load and analysis-geometry construction | 44.205 | -| First analysis after load | 27.283 | -| Warm analysis median, 20 iterations | 28.656 | -| Warm analysis P95, 20 iterations | 45.697 | - -Python/module startup is excluded. The benchmark enforces `--iterations` in `[5,100]`, verifies -the bundled asset counts and digest, rejects changing outputs across identical runs, and emits the -machine, Python, geometry, result counts, and timings as JSON. These measurements are one-machine -engineering evidence for archived code, not runtime availability, a cross-hardware latency -guarantee, or scientific/surgical validation. - -## Archived evidence paths - -The Kim 2022 population vascular-length-density field and user subject-image registration remain -in the Python backend for reproducibility of older work. They are absent from the primary UI and -do not bypass the VesSAP display-only or LAMBADA rejection gates. A scalar density projection contains no -individual vessel path/radius; a registered image is not automatically a vessel segmentation. - -## Required evidence before qualification - -1. Independent review of every NP1 source-derived dimension and site coordinate. -2. Repeated-observer subject calibration studies with declared ground truth. -3. Phantom and histology studies for planned versus achieved probe paths and sites. -4. Subject-specific vascular ground truth with measured bregma/skull registration error, - clearing/live-tissue distortion, inter-animal variation, and false-negative coverage. -5. Reference-graph failure-mode studies and prospectively defined margin/uncertainty criteria. -6. Formal animal-workflow usability, accessibility, interruption, and recovery studies. -7. Deterministic runtime packaging, SBOM, signing/notarization, and clean-Mac qualification. - -Passing repository tests or rendering a complete scene does not satisfy these scientific gates. +Technical source records are maintained in [Probe Models](PROBE_MODELS.md), +[Coordinate Systems](COORDINATE_SYSTEMS.md), and +[VesSAP external data](docs/VESSAP_MAJOR_VESSELS.md). diff --git a/THIRD_PARTY.md b/THIRD_PARTY.md index 1fa750f..6c1e990 100644 --- a/THIRD_PARTY.md +++ b/THIRD_PARTY.md @@ -1,141 +1,43 @@ -# Third-party software, data, and prior art +# Third-party Software and Data -This inventory was reviewed on **2026-07-23**. Exact direct pins come from `pyproject.toml`; -`uv.lock` is the machine-resolved transitive inventory. Before each release, generate an SBOM -from the final lock/build environment, retain all license texts and notices required by the -bundled artifacts, and reconcile it with this human-readable list. +Third-party datasets, atlas volumes, probe PDFs, protocol PDFs, and atlas artwork are not stored in +this repository. They are downloaded by the user or selected from user-owned locations. -The classification column is intentional: +## Runtime dependencies -- **Code — dependency / declared dependency:** code installed by the default environment. The row - states when a package is reserved for later work rather than imported by the current workflow. -- **Data — downloaded:** separately governed content acquired at user request and not bundled. -- **Data — optional downloaded:** a reviewed source acquired only when the user enables the - corresponding feature; it is cached outside the application bundle. -- **Data — bundled derivative:** an adapted data artifact shipped with the application under - its own data license, attribution, immutable manifest, and scientific-use limitations. The - application source-code license does not relicense it. -- **Candidate data:** a source reviewed for possible later work, but not integrated. -- **Cited source:** factual geometry or terminology was independently encoded with a pinned - citation/digest; the upstream document, code, diagram, or binary is not copied or bundled. -- **Concept only:** documentation or workflow reviewed as prior art; no code or assets copied. +| Package | Version | License | Purpose | +| --- | ---: | --- | --- | +| BrainGlobe AtlasAPI | 2.3.1 | BSD-3-Clause | Atlas discovery, download, and access | +| nibabel | 5.4.2 | MIT | NIfTI access | +| NumPy | 2.5.1 | BSD-3-Clause | Arrays and numerical operations | +| Pillow | 12.3.0 | MIT-CMU | Image processing | +| platformdirs | 4.11.0 | MIT | Application data paths | +| Pydantic | 2.13.4 | MIT | Validated models | +| scikit-image | 0.26.0 | BSD-3-Clause | Image registration | +| SciPy | 1.18.0 | BSD-3-Clause | Numerical operations | +| tifffile | 2026.7.14 | BSD-3-Clause | TIFF loading | -The supported interactive shell uses Apple SwiftUI/AppKit/SceneKit system frameworks and a -versioned subprocess bridge to the Python scientific service. SceneKit displays backend-validated -brain, probe, and display-only VesSAP vessel geometry payloads; archived LAMBADA vessel primitives -receive no runtime payload. -Scientific coordinate conversion and analysis remain in Python. The former PySide6/PyVista/VTK -application was removed from the package and lockfile after the Phase 1 reachability audit. +The exact dependency graph is recorded in `uv.lock`. Release builds include a generated SBOM and +license inventory. -Surgery-plan export adds no third-party Swift document parser. Apple PDFKit/Core Graphics read -the user-prepared protocol PDF and 132-page `MBSC_Figs_with_Layers.pdf` directly, add fields, -preserve vector pages, assemble, and verify the result; SceneKit produces the offscreen 3D page. -Word, Illustrator, Apple Events automation, and document-conversion subprocesses are not part of -the export path. +## External data and documents -## Direct runtime dependencies +| Item | Terms | Use | +| --- | --- | --- | +| Allen Mouse CCF via BrainGlobe `allen_mouse_25um` | [Allen Institute Terms of Use](https://alleninstitute.org/legal/terms-of-use) | Downloaded on demand to the user's application data directory | +| VesSAP BL6J-no1 vasculature | [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) | Optional external major-vessel display data; not stored in the repository or application bundle | +| Kim et al. vascular-density data | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | Optional external compatibility workflow | +| Headplate protocol PDF | Source-owner terms | User-selected input for surgery-plan export | +| Mouse Brain reference-atlas PDF | Source-owner terms | User-selected input for surgery-plan export | -| Package/version | License | Purpose | Classification / source | -|---|---|---|---| -| brainglobe-atlasapi 2.3.1 | BSD-3-Clause | Atlas discovery, download, metadata, arrays | Code — dependency; [PyPI](https://pypi.org/project/brainglobe-atlasapi/2.3.1/), [source](https://github.com/brainglobe/brainglobe-atlasapi/tree/v2.3.1) | -| nibabel 5.4.2 | MIT | Strict NIfTI header/data access for the pinned population-density source | Code — dependency; [PyPI](https://pypi.org/project/nibabel/5.4.2/) | -| numpy 2.5.1 | BSD-3-Clause | N-dimensional arrays | Code — dependency; [PyPI](https://pypi.org/project/numpy/2.5.1/) | -| platformdirs 4.11.0 | MIT | macOS application/cache paths | Code — dependency; [PyPI](https://pypi.org/project/platformdirs/4.11.0/) | -| pydantic 2.13.4 | MIT | Validated settings and project models | Code — dependency; [PyPI](https://pypi.org/project/pydantic/2.13.4/) | -| Pillow 12.3.0 | MIT-CMU | Image decoding, validation, and raster output | Code — dependency; [PyPI](https://pypi.org/project/pillow/12.3.0/) | -| scikit-image 0.26.0 | BSD-3-Clause | Similarity/affine registration of subject dorsal images | Code — dependency; [PyPI](https://pypi.org/project/scikit-image/0.26.0/) | -| scipy 1.18.0 | BSD-3-Clause | Population-density resampling and overlay operations | Code — dependency; [PyPI](https://pypi.org/project/scipy/1.18.0/) | -| tifffile 2026.7.14 | BSD-3-Clause | Validated atlas TIFF loading | Code — dependency; [PyPI](https://pypi.org/project/tifffile/2026.7.14/) | +VesSAP source and paper: [VesSAP data record](https://www.discotechnologies.org/VesSAP/) and +[Todorov et al., Nature Methods 2020](https://doi.org/10.1038/s41592-020-0792-1). -## Build and test dependencies +## Cited specifications and prior art -These tools are not application features, but some are present in build environments or affect -the generated bundle. +Neuropixels geometry is transcribed from cited imec, ProbeTable, and SpikeGLX sources; the source +documents are not copied into the repository. The planning coordinate profile cites the Virtual +Brain Lab Urchin/Pinpoint implementation. Exact source identities are listed in +[Probe Models](PROBE_MODELS.md) and [Coordinate Systems](COORDINATE_SYSTEMS.md). -| Package/version | License | Purpose | Source | -|---|---|---|---| -| hatchling 1.27.0 | MIT | Python build backend | [PyPI](https://pypi.org/project/hatchling/1.27.0/) | -| mypy 2.3.0 | MIT | Static type checking | [PyPI](https://pypi.org/project/mypy/2.3.0/) | -| pytest 9.1.1 | MIT | Test runner | [PyPI](https://pypi.org/project/pytest/9.1.1/) | -| pytest-cov 7.1.0 | MIT | Coverage integration | [PyPI](https://pypi.org/project/pytest-cov/7.1.0/) | -| ruff 0.15.22 | MIT | Linting and formatting checks | [PyPI](https://pypi.org/project/ruff/0.15.22/) | -| PyInstaller 6.21.0 | GPL-2.0-or-later with the upstream bootloader exception; selected files are Apache-2.0 | Apple Silicon standalone bridge freezer; exact COPYING text is embedded in release builds | [release documentation](https://pyinstaller.org/en/v6.21.0/) | -| pyinstaller-hooks-contrib 2026.6 | Apache-2.0 / GPL-2.0-or-later by file | Pinned analysis hooks used only while freezing production dependencies | [PyPI](https://pypi.org/project/pyinstaller-hooks-contrib/2026.6/) | - -## Material transitive dependencies - -This is a review aid, not a substitute for the full lockfile/SBOM. - -| Package/version | License | Why material | Source | -|---|---|---|---| -| brainglobe-space 1.0.3 | BSD-3-Clause | Atlas axis/orientation conversions | [PyPI](https://pypi.org/project/brainglobe-space/1.0.3/) | -| pandas 3.0.3 | BSD-3-Clause | BrainGlobe tabular dependency; not directly declared by this project | [PyPI](https://pypi.org/project/pandas/3.0.3/) | -| pyarrow 25.0.0 | Apache-2.0 | pandas columnar/serialization dependency in the resolved set | [PyPI](https://pypi.org/project/pyarrow/25.0.0/) | -| meshio 5.3.5 | MIT | Mesh-format support pulled by BrainGlobe AtlasAPI | [PyPI](https://pypi.org/project/meshio/5.3.5/) | -| pydantic-core 2.46.4 | MIT | Native validation engine bundled with Pydantic | [PyPI](https://pypi.org/project/pydantic-core/2.46.4/) | - -## Downloaded data and cited prior art - -| Item/version | Terms | Use in this project | Classification / source | -|---|---|---|---| -| Allen Mouse CCF via BrainGlobe `allen_mouse_25um`, atlas version 1.2 as observed 2026-07-21 | [Allen Institute Terms of Use](https://alleninstitute.org/legal/terms-of-use); scientific citation required | The only current reference/annotation/mesh atlas; downloaded on demand to user cache, never bundled in the `.app` or installer | Data — downloaded; [BrainGlobe version manifest](https://gin.g-node.org/brainglobe/atlases/raw/master/last_versions.conf), [generator/citation](https://github.com/brainglobe/brainglobe-atlasapi/blob/v2.3.1/atlas_scripts/allen_mouse.py) | -| Neuropixels 2.0 single- and four-shank geometry sources, snapshots recorded 2026-07-23 | Source-specific terms; the cited artifacts are not redistributed | Complete 1,280-site single-shank and 5,120-site four-shank factual transcriptions from imec specifications/manual/mapping, ProbeTable 1.8, and SpikeGLX. The production selector exposes only `NP2003` and standard four-shank `NP2013`, both with 384 simultaneous channels. The former combined NP2003/NP2004 and NP2013/NP2014 identities and Quad Base source evidence remain archived for old-package compatibility but are not selectable. Status is `source-transcribed-review-pending`; no independent full-table review is claimed. | Cited sources; [imec NP2 product/support page](https://www.neuropixels.org/probe-2-0-single-shank), [exact sources and digests](PROBE_MODELS.md) | -| Neuropixels 1.0 NP1000 / `PRB_1_4_0480_1` geometry sources, snapshots recorded 2026-07-22 | Source-specific terms; the cited artifacts are not redistributed | Complete 960-site factual transcription from the imec specification, ProbeTable 1.8, and SpikeGLX geometry/metadata snapshots. The catalog status is `source-transcribed-review-pending`; no independent full-table review is claimed. | Cited source; [imec specification](https://www.neuropixels.org/_files/ugd/328966_c5e4d31e8a974962b5eb8ec975408c9f.pdf), [exact sources and digests](PROBE_MODELS.md) | -| Kim, Yongsoo (2022), *Cerebrovascular, pericyte, and neuronal cell type mapping data 2022*, Mendeley Data V1, DOI `10.17632/stxvn5sv44.1` | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | Optional pinned population vascular length-density field. Archive `NVU_mapping_Adult_mouse_brain (1).7z`, 311,493,514 bytes, SHA-256 `c715c92ad153bff7f676b883f47108f886147e5d6fcd4502bcc04a0f92ed98fe`; downloaded to user cache and never bundled. The archived backend can prepare a symmetrized dorsal DV maximum projection, but it is absent from the primary UI, is not subject-specific, has no vessel paths, and is not used for clearance. | Data — optional downloaded; [versioned dataset](https://data.mendeley.com/datasets/stxvn5sv44/1), [Wu et al. Cell Reports paper](https://doi.org/10.1016/j.celrep.2022.110978), [open-access paper](https://pmc.ncbi.nlm.nih.gov/articles/PMC9271215/) | -| Renier, Nicolas; de Launoit, Elisa; Skriabine, Sophie (2026), *Vascular graphs of the developing post-natal mouse brain*, record DOI `10.5281/zenodo.18876865` | [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) | Packaged archived derivative evidence for specimen P60_606: maximal consecutive in-bounds graph runs with point radius at least 15 µm. NPZ is 814,393 bytes, SHA-256 `fb2344e845e604be3424bd63f4222d273eafba34db0df2eaff32f4400fa9afec`. The 5,050,194,723-byte source archive and 12,282,574,483-byte extracted graph are not bundled. Coordinate qualification is rejected because the source is a hemisphere and the graph lacks a persisted biological laterality binding. It is not displayed, mirrored, served, or analyzed. | Data — bundled derived evidence; [versioned Zenodo record](https://zenodo.org/records/18876865), [Cell paper](https://doi.org/10.1016/j.cell.2026.03.013), [derivation and qualification record](docs/LAMBADA_MAJOR_VESSELS.md) | -| Todorov et al. (2020), VesSAP BL6J-no1 whole-brain vasculature, public repository release 2021.10.01 | [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) | Bundled display-only major-vessel derivative from the official 3 µm skeleton and radius volumes. Source radius ≥5 voxels retains nominal diameter ≥30 µm; true 26-neighbour source adjacency is transformed with the published Euler plus B-spline registration and reduced on a 50 µm display grid. NPZ is 1,853,131 bytes, SHA-256 `9300dacf25ca57a5d23377ca0dc885e34ff0d18e8d21ef7590c6dcd156cf5db7`, with 196,377 points, 76,622 runs, and 119,755 segments. It is one fixed, cleared C57BL/6J specimen and cannot establish vessel absence, subject-specific clearance, trajectory suitability, or safety. | Data — bundled derivative; [VesSAP data record](https://www.discotechnologies.org/VesSAP/), [Nature Methods paper](https://doi.org/10.1038/s41592-020-0792-1), [exact derivation and validation](docs/VESSAP_MAJOR_VESSELS.md) | -| User-prepared Headplate Protocol PDF | Source-owner terms; not redistributed or relicensed | Read directly; pages 1–2 receive a flattened prefill overlay and the template's page-3 sketch placeholder is replaced. The source stays outside the repository and app bundle; its digest prefix is printed on planning pages. | External user-owned document | -| User-supplied Mouse Brain CD `MBSC_Figs_with_Layers.pdf`, Figures 1–132 | Source-owner terms; not redistributed or relicensed | Read directly. Brain3D validates all 132 landscape-Letter pages against the reviewed figure/coordinate catalog, verifies the source SHA, selects the nearest coronal AP or sagittal `|ML|` page, and adds an identity summary to the output copy. No atlas artwork is committed or bundled. | External user-owned data/artwork | -| brainrender 2.2.0 | BSD-3-Clause | Scene/API design review only; package not imported or bundled | Concept only; [release](https://github.com/brainglobe/brainrender/releases/tag/v2.2.0) | -| iblatlas 1.2.0 | MIT | Coordinate and trajectory design review only; package and PyQt5 GUI extra not imported or bundled | Concept only; [release](https://github.com/int-brain-lab/iblatlas/releases/tag/1.2.0) | -| Neuropixels Trajectory Explorer v2.0.0 | GPL-3.0 | Workflow review only; no code or assets copied | Concept only; [release](https://github.com/petersaj/neuropixels_trajectory_explorer/releases/tag/v2.0.0) | -| Virtual Brain Lab Urchin/Pinpoint Allen CCF coordinate reference, Urchin commit `57be3cdc7d6230543ebbd367be1cbcf1a47862a5` | GPL-3.0 | Workflow review plus factual transcription of the `CCF_BREGMA` default (Pinpoint CCF order AP 5.2 mm, ML 5.7 mm, DV 0.332 mm). No Unity code or assets are copied. The exact raw source SHA-256 `23880cef9abacbadd75b2b898a9b43cf1195ca75446f2c34f9ad0c278781f215` is persisted with new direct plans. | Cited source; [exact source snapshot](https://github.com/VirtualBrainLab/Urchin/blob/57be3cdc7d6230543ebbd367be1cbcf1a47862a5/UnityClient/Packages/vbl.urchin/Scripts/Utils/Utils.cs), [Pinpoint v2.0.0 release](https://github.com/VirtualBrainLab/Pinpoint/releases/tag/v2.0.0) | -| cortex-lab/allenCCF, including SHARP-Track, commit `e5a57fe7e1c9…` reviewed 2026-07-21 | No explicit repository license found | Workflow review only; no code or assets copied | Concept only; [repository](https://github.com/cortex-lab/allenCCF) | -| Simulation-ready vascular tracing data from adult mouse brains, version 1, DOI `10.17632/mjtyry6v85.1` | CC BY 4.0 | Rejected for planning integration. The four adult-mouse MATLAB graphs are separate from the archived scalar-density deposit, and their documentation exposes raw specimen-space XYZ without qualified axis orientation, laterality, Allen registration, or a bregma relationship. No graph file is integrated or bundled. | Rejected data candidate; [versioned dataset](https://data.mendeley.com/datasets/mjtyry6v85/1), [associated open-access paper](https://pmc.ncbi.nlm.nih.gov/articles/PMC9271215/) | -| VesselGraph | Software: MIT; data: CC BY-NC 4.0 | Vascular graph/data design review only; no code, models, or data copied; NC terms make the data unsuitable as an unrestricted redistributable default | Concept only; [repository and data terms](https://github.com/jocpae/VesselGraph) | -| VesSAP repository code | MIT | Segmentation and feature-extraction implementation reviewed as provenance; no VesSAP repository code or models are copied into Brain3D. The separately licensed data derivative is inventoried above. | Concept only; [repository](https://github.com/vessap/vessap) | - -Allen atlas content is not relicensed by BrainGlobe's BSD-3-Clause software license. The Allen -terms observed on the review date limit covered Content to noncommercial research unless -otherwise stated. Show the source/terms before download and obtain legal review before any -commercial redistribution or hosted data service. - -The Mendeley density is not relicensed by this application's source-code license. Preserve the -CC BY 4.0 attribution, dataset version/DOI, archive identity, and associated paper citation in any -scientific output that uses the layer. The dataset's four-animal population scope must remain -visible; attribution does not turn the scalar field into subject-specific vessels or a clearance -model. - -The archived LAMBADA P60_606 derivative is likewise not relicensed by this application's -source-code license. Preserve its CC BY 4.0 attribution, versioned record DOI, source and asset -digests, adjacent manifest, rejected coordinate/coverage status, and fixed/cleared hemisphere -limitations in every distributed evidence package or scientific output that studies the asset. -Do not describe its presence in the package as a runtime vessel layer. - -The bundled VesSAP BL6J-no1 derivative is not relicensed by this application's source-code -license. It remains CC BY-NC 4.0 adapted data. Keep the NPZ, adjacent immutable manifest, -`VESSAP_DATA_LICENSE.txt`, source/paper attribution, release identity, exact digests, transform -interpretation, and display-only limitations together. The noncommercial restriction applies to -the derivative independently of the application's original-source terms. Its presence must never be -described as subject-specific registration, vessel clearance, proof of vessel absence, or a -surgical safety determination. - -## Release obligations - -1. Build only from the reviewed lockfile and record Python, architecture, package, and atlas - versions in release metadata. -2. Bundle required copyright notices and license texts for every exact release artifact. -3. Keep downloaded Allen and Mendeley data outside the signed application and installer; - preserve each source, terms, citation, version, and recorded digest. -4. Keep the archived LAMBADA derivative, manifest, and canonical rejection report together and - preserve exact attribution, identity, extraction rule, limitations, and fail-closed status. -5. Keep the bundled VesSAP derivative, manifest, separate CC BY-NC 4.0 license text, provenance, - transform identity, and display-only/clearance-disabled limitations together. -6. Preserve the NP1 model's pinned source identities/digests and review-pending status until a - separately recorded independent review is complete; do not bundle upstream documents or code - without a new terms review. -7. Do not distribute the user-supplied protocol or Mouse Brain atlas through the repository, - application, test fixtures, or release package without a separate rights review. -8. Re-review this file when a dependency, atlas version, packaging mode, copied asset, or - distribution model changes. A concept-only item must be reclassified before any code or asset - is copied. +Third-party software and data remain governed by their respective licenses and terms. diff --git a/USER_GUIDE.md b/USER_GUIDE.md index 2df2ca8..b4c4644 100644 --- a/USER_GUIDE.md +++ b/USER_GUIDE.md @@ -135,9 +135,10 @@ resolved. ## Use the major-vessel display reference -Brain3D automatically loads the pinned VesSAP `BL6J-no1` major-vessel layer after the reviewed -25 µm atlas opens. It appears in Dorsal, Coronal, Sagittal, Horizontal, and 3D. The status panel -identifies the specimen, source, CC BY-NC 4.0 license, segment count, and diameter threshold. +When the external VesSAP `BL6J-no1` data package is installed, Brain3D loads the +major-vessel layer after the 25 µm atlas opens. It appears in Dorsal, Coronal, Sagittal, +Horizontal, and 3D. The status panel identifies the specimen, source, license, segment count, and +diameter threshold. The source layer intentionally includes only nominal diameter ≥30 µm centerlines and uses a 50 µm spatial reduction. The visible-diameter slider can be adjusted from 30–250 µm without @@ -152,8 +153,7 @@ clearing-distortion, or inter-animal uncertainty bounds, so the backend rejects Do not interpret a gap in the overlay as absence of a vessel or use it to approve a trajectory. For exact source files, hashes, transform validation, extraction, and limitations, see -[VesSAP Major Vessels](docs/VESSAP_MAJOR_VESSELS.md). The older LAMBADA P60_606 derivative -remains archived and rejected; it is not mixed with or mirrored into this layer. +[VesSAP Major Vessels](docs/VESSAP_MAJOR_VESSELS.md). ## Export a prefilled surgery plan diff --git a/docs/ADR-003-atlas-and-data-sources.md b/docs/ADR-003-atlas-and-data-sources.md index 770128d..7d89ab2 100644 --- a/docs/ADR-003-atlas-and-data-sources.md +++ b/docs/ADR-003-atlas-and-data-sources.md @@ -1,254 +1,48 @@ # ADR-003: Atlas and external data sources -- **Status:** Accepted -- **Decision date:** 2026-07-21 -- **Applies to:** atlas discovery, download, cache, provenance, and external reference material +- Status: Accepted +- Date: 2026-07-26 -## Implementation update — 2026-07-23 +## Context -The atlas decision is unchanged. A CC BY-NC 4.0 diameter-≥30 µm derivative of VesSAP -`BL6J-no1` is now the display-only major-vessel reference in all five views. Exact coordinate, -laterality, topology, source, transform, and asset evidence permits display but not subject -clearance. The older LAMBADA P60_606 derivative remains archived and rejected. Population density -and subject-image registration also remain archived backend paths and are absent from the primary -UI. See [the VesSAP record](VESSAP_MAJOR_VESSELS.md) and -[the LAMBADA record](LAMBADA_MAJOR_VESSELS.md). +Brain3D needs one reproducible atlas identity and clear boundaries for third-party data. Atlas +volumes, vascular datasets, and licensed documents should not be committed to the source +repository. ## Decision -Use [BrainGlobe AtlasAPI 2.3.1](https://pypi.org/project/brainglobe-atlasapi/2.3.1/) -as the authoritative atlas access layer. `allen_mouse_25um` package version `1.2` is the only -runtime-allowlisted identity in the current build, for both remote and local-only catalog views. The 10 µm -identity is deferred until the lower-memory path is release-qualified; existing cache data is -ignored and not deleted. Arbitrary BrainGlobe keys, non-mouse atlases, and future unreviewed -versions fail closed. Other identities may be added through the same adapter only after their -coordinates, version, schema, citation, data terms, and native acceptance evidence are reviewed. +### Atlas -Never silently substitute one resolution or atlas for another, and never combine annotation, -reference, mesh, or coordinate metadata from different atlas versions. Every saved project -records the atlas identifier, installed atlas version, resolution, shape, orientation, framework, -source annotation, source URL, cache path, SHA-256 of the installed `metadata.json`, and -application version. The current build does **not** claim to record the install time or a package-wide -content digest. +Use BrainGlobe AtlasAPI with the allowlisted `allen_mouse_25um` package version `1.2`. +BrainGlobe arrays use `[AP,DV,ML]` order and the package's `asr` orientation. The application +validates the package key, version, shape, resolution, orientation, metadata, and structures before +use. -## Atlas identity and coordinate metadata +Atlas files are downloaded to the application data directory and are never added to the +repository, application bundle, or project packages. -As checked on 2026-07-21, BrainGlobe's -[`last_versions.conf`](https://gin.g-node.org/brainglobe/atlases/raw/master/last_versions.conf) -lists version `1.2` for `allen_mouse_25um`. The generator uses Allen -CCF 2017 annotations (`annotation/ccf_2017`) and BrainGlobe orientation `asr`: array axes are -`[AP,DV,ML]`, the origin lies toward anterior/superior/right, and increasing indices move toward -posterior/inferior/left. Treat those values as discovered metadata, not permanent constants: -the installed metadata written to a project is authoritative for reopening it. +### Major-vessel display -The Allen atlas generator and citation are recorded in -[`allen_mouse.py`](https://github.com/brainglobe/brainglobe-atlasapi/blob/v2.3.1/atlas_scripts/allen_mouse.py). -Scientific outputs using this atlas must cite Wang et al., *The Allen Mouse Brain Common -Coordinate Framework: A 3D Reference Atlas*, Cell 2020, -[doi:10.1016/j.cell.2020.04.007](https://doi.org/10.1016/j.cell.2020.04.007), together with the -exact BrainGlobe atlas name and version. +Keep the VesSAP loader and provenance checks, but require the NPZ and manifest to be installed in +the application data directory: -All UI and saved trajectories use an application-defined coordinate model. Conversion to atlas -array indices, BrainGlobe axes, or any future iblatlas representation happens only at named -adapter boundaries and is covered by round-trip tests. +```text +/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz +/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz.manifest.json +``` -## Memory policy +The bridge advertises the display capability only when both external files are present. The data +remains governed by CC BY-NC 4.0 and is not part of Brain3D's source-code license. -AtlasAPI 2.3.1 loads complete TIFF arrays with `tifffile.imread`; it does not provide chunked -array access in this stable release. The implementation is visible in -[`core.py`](https://github.com/brainglobe/brainglobe-atlasapi/blob/v2.3.1/brainglobe_atlasapi/core.py#L122-L135), -and its [descriptors](https://github.com/brainglobe/brainglobe-atlasapi/blob/v2.3.1/brainglobe_atlasapi/descriptors.py#L51-L57) -declare uint16 reference and uint32 annotation arrays. +### Documents -| Atlas | Shape | Reference + annotation raw bytes | Approx. raw memory | -|---|---:|---:|---:| -| `allen_mouse_25um` | `528 × 320 × 456` | uint16 + uint32 | 0.462 GB / 0.43 GiB | - -These figures exclude Python objects, temporary copies, derived masks, and display meshes, so peak -resident memory is higher. Load structures and meshes on demand, release intermediates promptly, -and never create an unbounded resident full-volume copy merely for display. Adding another -resolution is a separate product/validation decision; no silent substitution is allowed. - -[BrainGlobe AtlasAPI 3.0.0rc1](https://pypi.org/project/brainglobe-atlasapi/3.0.0rc1/) -introduces a newer storage path, but it is a prerelease and is not the production dependency. The -adapter boundary exists so a future chunked implementation can be evaluated without changing -project coordinates or provenance. - -## Archived population vascular-density decision - -The optional population layer uses exactly Yongsoo Kim's *Cerebrovascular, pericyte, and -neuronal cell type mapping data 2022*, -[Mendeley Data v1, DOI 10.17632/stxvn5sv44.1](https://data.mendeley.com/datasets/stxvn5sv44/1), -licensed CC BY 4.0 and associated with -[Wu et al., Cell Reports 2022](https://doi.org/10.1016/j.celrep.2022.110978). - -Acquisition is fail-closed. The accepted archive is -`NVU_mapping_Adult_mouse_brain (1).7z`, exactly 311,493,514 bytes, SHA-256 -`c715c92ad153bff7f676b883f47108f886147e5d6fcd4502bcc04a0f92ed98fe`. Only two exact members are -streamed into application-owned staging: the vascular length-density NIfTI and its Allen template. -Their names, sizes, SHA-256 values, NIfTI header evidence, and the derived-cache manifest are -validated before an atomic promotion. - -The reviewed source contract is a 20 µm `(570,400,660)` `[ML,DV,AP]` field with values in -`m/mm^3`, four fixed adult mice, and a 100 µm local window. The density NIfTI itself has unit -zooms, unknown units, and no qform/sform, so the implementation validates that exact caveat and -uses the pinned README/template contract rather than treating the header as authoritative. AP is -reversed into BrainGlobe ASR, ML is deliberately symmetrized because source polarity is not -documented, and the prepared result is a 50 µm `[AP,DV,ML]` scalar field. Preparation requires an -exact target-atlas identity and template correlation of at least 0.99. - -The backend can produce a declared transparent AP-by-ML DV maximum projection with the source, -atlas binding, units, display window, and limitations intact. That path is retained for archived -work but is not requested by the primary SwiftUI workspace. This is a population scalar density, -not individual vessel paths, not subject-specific anatomy, and not used for vessel analysis. The -separate simulation-ready graph deposit `10.17632/mjtyry6v85.1` is rejected for planning -integration: its documentation exposes raw specimen-space XYZ without a qualified axis -orientation, laterality, Allen transform, or bregma relationship. - -## Archived LAMBADA major-vessel decision - -The archived evidence uses the atlas-registered P60_606 graph from Renier, de Launoit, and -Skriabine's *Vascular graphs of the developing post-natal mouse brain*, Zenodo record -`10.5281/zenodo.18876865`, CC BY 4.0. The repository bundles a deterministic compact derivative, -not the 5.05 GB source archive or 12.28 GB extracted graph. - -Extraction keeps maximal consecutive in-bounds source-edge runs only where each point has radius -≥15 µm. The manifest binds the source/archive identities, conversion from ClearMap to -BrainGlobe `[AP,DV,ML]`, physical 25 µm scaling, output arrays/counts, asset SHA-256, and mandatory -limitations. These checks establish deterministic derivation, not coordinate qualification. - -The exact qualification rerun found supporting AP and DV orientation evidence. It rejected the -asset because the primary record describes hemisphere specimens and the exact graph does not -persist a graph, vertex, or edge property that binds its numerical ML coordinates to biological -hemisphere/laterality. Coordinates occurring on both sides of an array midpoint do not establish -whole-brain coverage. No approved exact-specimen transform supports mirroring, so the application -does not infer a side or mirror the derivative. - -No LAMBADA handler or capability is registered in the current runtime. The production -`auditedReferenceMajorVessels` capability and reference metadata/geometry methods now belong -exclusively to the separately qualified VesSAP display reference; they never load P60_606. -`radiusAwareReferenceVesselAnalysis` remains absent. The canonical LAMBADA rejection report is -[`lambada_p60_606_coordinate_qualification_rejected_v1.json`](evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json), -SHA-256 `0993d5a0ad6c0d62094dc395fe2bc4f284870e6e7c0b602be7df5a7da867c93a`. - -This remains a fixed cleared reference, not the animal being planned. The source omits pial and -choroidal vessels; the derivative omits smaller vessels; artery/vein identity is unavailable; -and biological variation, tissue distortion, registration error, and omitted vessels are not -bounded. It cannot support a visual overlay, vessel conflict, or surgical-clearance claim. - -## VesSAP display-only major-vessel decision - -Use the official VesSAP `BL6J-no1` 3 µm skeleton/radius volumes and published Euler + B-spline -Allen registration for a C57BL/6J population-reference display layer. Retain source skeleton -points with radius ≥5 voxels, preserve only true 26-neighbour source adjacency, transform -continuous coordinates with the mandatory ML reflection, and coalesce on a 50 µm display grid. -The bundled NPZ, adjacent strict manifest, CC BY-NC 4.0 license text, and exact source/transform -digests must remain together. - -The backend may advertise `auditedReferenceMajorVessels` and serve metadata/geometry only after -all integrity checks pass. It must not advertise `radiusAwareReferenceVesselAnalysis`. -Clearance analysis fails with `VESSEL_ANALYSIS_UNAVAILABLE` before reading or mutating project -state. The display must identify one fixed cleared ex-vivo specimen, omitted capillaries, and the -absence of subject-registration/tissue-distortion bounds. - -This decision does not supersede the LAMBADA rejection or authorize mixing/mirroring datasets. -The detailed transform, validation statistics, counts, and digests are in -[VESSAP_MAJOR_VESSELS.md](VESSAP_MAJOR_VESSELS.md). - -## Cache, download, and offline behavior - -Atlas data is user cache/application data and is **not bundled inside the application**. Resolve -paths with platformdirs under the user's macOS Application Support/cache directories. Set -`BRAINGLOBE_CONFIG_DIR` before the first `brainglobe_atlasapi` import, because version 2.3.1 -reads it during module initialization; pass the application-owned atlas and intermediate-download -directories explicitly where the API permits. The relevant behavior is documented in -[`config.py`](https://github.com/brainglobe/brainglobe-atlasapi/blob/v2.3.1/brainglobe_atlasapi/config.py#L16-L25). - -Downloads run outside the GUI thread. The supported SwiftUI shell currently shows indeterminate -download/preparation progress and does not expose a cancellation control; cancellation and -quantitative progress remain future UI work. Exact-version acquisition uses BrainGlobe inside -unique application-owned archive and atlas staging directories; -the adapter parses metadata and structures and inspects reference/annotation TIFF headers to -validate reviewed identity, species, package version, orientation, resolution, hierarchy, -uint16/uint32 types, volume shapes, and path containment without loading whole arrays. Only -packages passing that check receive a catalog `downloaded` state. The staged package is then -atomically renamed into the visible cache. Existing valid versions and valid concurrent targets -are preserved. An invalid same-name target is atomically moved beneath the app-owned -`atlases/quarantine/` directory before promotion, so evidence remains recoverable and the valid -replacement prevents a redownload loop. -Cached-only open uses BrainGlobe's low-level local reader, cannot call its downloader, and must -validate the exact requested version. Cache-removal and quarantine-management UI are deferred. - -Catalog work is invoked only by explicit native/CLI acquisition operations; ordinary atlas open -is cache-only. -Production does not call AtlasAPI 2.3.1's timeout-less catalog helper or abandon it in a daemon -thread. The adapter fetches the same official `last_versions.conf` endpoint directly with a short -socket timeout, a 15-second total deadline, cooperative checks between bounded reads, and a 1 MiB -response limit. A validated response replaces the app-owned cache atomically; network or deadline -failure falls back to a previously validated cached catalog. Cancellation returns without leaving -catalog work running in another thread. - -Stable AtlasAPI downloads do not publish or enforce a cryptographic expected hash for each -atlas archive. The application records the SHA-256 of the installed `metadata.json` for exact metadata -identity. The separately measured whole-file hashes in `SCIENTIFIC_VALIDATION.md` are validation -evidence, not persisted project fields and not upstream authentication. A future package-wide -integrity feature must define and version its manifest before claiming corruption or content -drift detection. Structural JSON/TIFF-header validation detects malformed or internally -inconsistent packages, not anatomically plausible tampering. Pooch may be used for other external -files only when an authoritative expected hash is available. - -## Code, data, and prior art are separate - -| Item | Classification | License/terms decision | -|---|---|---| -| BrainGlobe AtlasAPI | Executed dependency code | BSD-3-Clause; pin and attribute it | -| Allen Mouse CCF data obtained through BrainGlobe | Downloaded scientific data | Governed by the [Allen Institute Terms of Use](https://alleninstitute.org/legal/terms-of-use), not by AtlasAPI's BSD license | -| brainrender 2.2.0 | Prior-art concept/API reference only | BSD-3-Clause; not a runtime dependency | -| iblatlas 1.2.0 | Prior-art coordinate/trajectory reference only | MIT; not a runtime dependency; do not install its PyQt5 GUI extra | -| Neuropixels Trajectory Explorer v2.0.0 | Prior-art workflow reference only | GPL-3.0; no copied code or assets | -| Pinpoint v2.0.0 | Prior-art workflow reference only | GPL-3.0; no copied code or assets | -| cortex-lab/allenCCF and SHARP-Track | Prior-art workflow reference only | No repository license found; no copied code or assets | -| Kim 2022 population vascular length-density data, DOI `10.17632/stxvn5sv44.1` | Optional downloaded scientific data | Mendeley Data v1, CC BY 4.0; exact archive/member identities are pinned. Archived backend preparation only; never vessel paths, a subject layer, or clearance geometry. | -| LAMBADA P60_606 vascular graph, DOI `10.5281/zenodo.18876865` | Archived derived scientific evidence | CC BY 4.0; exact source and derivative identities are pinned. Coordinate qualification is rejected, so it is not displayed, served, mirrored, or analyzed. | -| VesSAP BL6J-no1 whole-brain vasculature | Bundled display-only derived scientific data | CC BY-NC 4.0; exact source/transform/asset identities are pinned. It is displayed in all five views but cannot support subject clearance, vessel absence, suitability, or safety. | -| Wu et al. simulation-ready vascular tracing data, DOI `10.17632/mjtyry6v85.1` | Rejected for planning integration | Version 1 is CC BY 4.0 and documents four traced adult-mouse graphs in MATLAB format, but the documented coordinates are raw specimen-space XYZ with no qualified axis orientation, laterality, Allen transform, or bregma relationship. No graph is integrated or bundled. | -| VesselGraph | Prior-art vascular graph/data reference only | Software is MIT; data is CC BY-NC 4.0. No code, models, or data copied. The noncommercial restriction prevents treating it as an unrestricted distributable default. | -| VesSAP repository code | Reviewed derivation/workflow reference only; not a runtime dependency | Repository code is MIT and was not copied. The separately licensed bundled BL6J-no1 data derivative is the CC BY-NC 4.0 artifact documented in the row above. | - -The Allen terms currently restrict covered Content to noncommercial research unless otherwise -stated. The application must show the source and terms before first download, retain attribution, -and avoid redistributing the atlas inside the `.app` or an installer. Commercial distribution, -hosted redistribution, or a change in Allen terms requires legal review before release. - -Pinpoint remains a workflow reference rather than a runtime component. The hosted Unity WebGL -application does not provide a supported bidirectional contract for exact probe identity, -coordinate/transform provenance, camera/region state, or the VesSAP overlay. Brain3D uses its -existing typed BrainGlobe endpoints for the complete ontology and lazy meshes instead. See -[the Pinpoint interoperability decision](PINPOINT_INTEGRATION.md). - -The archived `stxvn5sv44.1` density and rejected `mjtyry6v85.1` vessel graphs are distinct -deposits and must never be conflated. A new source still needs a stable URL, version, coordinate -registration, citation, redistribution terms, integrity strategy, scientific semantics, and -fail-closed UI labeling before it can be displayed. Visual ideas from prior art may inform -independently written code, but repository code, meshes, screenshots, icons, and other assets -must not be copied unless their license is explicitly compatible and the reuse is recorded in -`THIRD_PARTY.md`. +Protocol and reference-atlas PDFs are selected by the user in Settings. Brain3D reads them from +their original locations and does not copy them into source control or the application bundle. ## Consequences -- First use requires a network download; later use is offline from an application-owned cache. -- Only the explicitly reviewed Allen mouse 25 µm package-v1.2 identity is discoverable or - openable in the current build. -- 10 µm is deferred. Existing source or derived cache data is left untouched but cannot enter a - current project package. -- The Mendeley density and subject-image workflows remain archived and absent from the primary UI. -- VesSAP `BL6J-no1` is the only runtime major-vessel layer; it is display-only and separately - licensed CC BY-NC 4.0. -- The LAMBADA derivative remains archived evidence and cannot render or enter analysis. Any future - vessel source needs a new qualification that binds trustworthy whole-brain coverage and - biological laterality without an inferred or mirrored hemisphere. -- Project files carry enough provenance to enforce exact metadata identity and prevent silent - coordinate reinterpretation; the current build does not claim package-wide content-drift - detection. -- Atlas upgrades, new external datasets, or copied prior-art material require a new review of - scientific provenance, terms, and `THIRD_PARTY.md` before implementation. +- A clean checkout contains code, tests, fixtures, and documentation but no third-party datasets + or PDFs. +- Users control acquisition and acceptance of external terms. +- Missing optional data disables its capability without affecting atlas and probe planning. +- Source identities and digests remain explicit at data-loading boundaries. diff --git a/docs/ADR-004-swiftui-hybrid-shell.md b/docs/ADR-004-swiftui-hybrid-shell.md index 44988e7..f0afd67 100644 --- a/docs/ADR-004-swiftui-hybrid-shell.md +++ b/docs/ADR-004-swiftui-hybrid-shell.md @@ -80,20 +80,19 @@ process decision, is: complete 10 mm shaft while slice/traversal analysis uses only the implanted surface-to-tip path; - no separate target-registration, subject-calibration, or geometry-checkbox prerequisite for a v4 direct plan; legacy v1–v3 records retain their original archived semantics; -- a VesSAP BL6J-no1 diameter-≥30 µm reference overlaid in all five views, with the older - LAMBADA P60_606 derivative retained only as rejected evidence; and +- an optional external VesSAP BL6J-no1 diameter-≥30 µm reference overlaid in all five views; and - no reference-vessel analysis capability. Region export uses a two-phase boundary: Python generates and hashes content without mutation, the native client performs an atomic file write, and only a matching confirmation records the `exported` audit event. Cancelling the save panel or a failed write leaves the project unchanged. -The service advertises `auditedReferenceMajorVessels` and serves the exact VesSAP display -geometry after source/transform/asset checks. It omits +When the external data package is installed, the service advertises +`auditedReferenceMajorVessels` and serves VesSAP display geometry after +source/transform/asset checks. It omits `radiusAwareReferenceVesselAnalysis`; `vessel.major.reference.analyze` fails with `VESSEL_ANALYSIS_UNAVAILABLE`. The source is one cleared ex-vivo C57BL/6J reference with no -published subject-registration or tissue-distortion error bounds. The older LAMBADA rejection -remains bound to its canonical report and cannot be bypassed or mirrored into VesSAP. +published subject-registration or tissue-distortion error bounds. Population density and subject-image registration remain archived compatibility code and persisted data. The primary bridge does not register their methods or capabilities, and the diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index ea15bbb..2f5dbdb 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -78,14 +78,14 @@ Pinpoint/Urchin AP/ML reference + loaded annotation selected Allen ontology identity → descendant annotation mask ─→ Dorsal/Coronal/Sagittal/Horizontal highlight └─→ reviewed mesh or explicit no-geometry result ─→ SceneKit 3D -VesSAP BL6J-no1 → pinned transform + true-path 50 µm reduction - ├─→ five-view display geometry - └─→ VESSEL_ANALYSIS_UNAVAILABLE (no clearance) -LAMBADA P60_606 → archived rejected evidence (no runtime payload) +external VesSAP BL6J-no1 → manifest + digest validation + ├─→ five-view display geometry + └─→ VESSEL_ANALYSIS_UNAVAILABLE (no clearance) ``` -The runtime advertises `auditedReferenceMajorVessels`, verifies the VesSAP manifest/NPZ, and -serves metadata plus binary display geometry. It does not advertise +When the external files are installed, the runtime advertises +`auditedReferenceMajorVessels`, verifies the VesSAP manifest/NPZ, and serves metadata plus +binary display geometry. It does not advertise `radiusAwareReferenceVesselAnalysis`; `vessel.major.reference.analyze` fails before project access. The UI cannot manufacture a clearance result from displayed geometry or pixels. @@ -96,12 +96,6 @@ laterality, topology, bounds, and asset identity have display evidence, but subj clearing/inter-animal variation, and a qualified transformed vessel surface remain unbounded. See [the VesSAP derivation record](VESSAP_MAJOR_VESSELS.md). -The P60_606 diameter-≥30 µm derivative remains archived evidence, not a primary vessel layer. Its AP -and DV orientation evidence passed, but the source is a hemisphere specimen and the exact graph -has no persisted biological hemisphere/laterality binding. Whole-brain coverage and ML polarity -are unqualified; no mirroring is permitted. The digest-bound canonical rejection report is -[`lambada_p60_606_coordinate_qualification_rejected_v1.json`](evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json), -SHA-256 `0993d5a0ad6c0d62094dc395fe2bc4f284870e6e7c0b602be7df5a7da867c93a`. Population density and subject-image registration remain separate archived compatibility code and persisted data. Their methods/capabilities are not registered by the primary bridge, they remain @@ -117,13 +111,11 @@ only after the native atomic write is confirmed. Atlas identity mismatch, changed bregma/annotation source evidence, failed v4 surface rederivation, failed legacy calibration QC, unknown coordinate frames, source/asset digest -mismatch, a missing or changed manifest/qualification report, malformed geometry, and stale +mismatch, a missing or changed external manifest, malformed geometry, and stale project or plan hashes fail closed. The app does not substitute another atlas, present the -Pinpoint/Urchin convention as Allen ground truth, extrude a 2D density field into vessels, infer -hemisphere, mirror P60_606, or treat either fixed reference as a subject measurement. +Pinpoint/Urchin convention as Allen ground truth, extrude a 2D density field into vessels, infer anatomy from missing external data, or treat a fixed reference as a subject measurement. See [ADR-004](ADR-004-swiftui-hybrid-shell.md), [ADR-005](ADR-005-independent-slice-viewer.md), and -[the Pinpoint interoperability decision](PINPOINT_INTEGRATION.md), -[the VesSAP derivation record](VESSAP_MAJOR_VESSELS.md), and -[the LAMBADA derivation record](LAMBADA_MAJOR_VESSELS.md). +[the Pinpoint interoperability decision](PINPOINT_INTEGRATION.md), and +[the VesSAP data contract](VESSAP_MAJOR_VESSELS.md). diff --git a/docs/CODE_AUDIT.md b/docs/CODE_AUDIT.md deleted file mode 100644 index 011948e..0000000 --- a/docs/CODE_AUDIT.md +++ /dev/null @@ -1,237 +0,0 @@ -# Code Audit - -Audit baseline: `main` commit `51fe26d637b700d39944bbee86e3ea42ded4e7a2`, reviewed on -2026-07-22 before the end-to-end planner refactor. - -> **Historical snapshot:** every present-tense “current” statement below refers to that baseline, -> not the current development tree. A later refactor made calibration, target projection, probe -> planning/region traversal, SceneKit 3D, and temporarily the LAMBADA/V3 path product-reachable. -> The current digest-bound qualification gate rejects P60_606 geometry and analysis; a separate -> VesSAP BL6J-no1 derivative is now available as display-only geometry. See -> [Project Status](../PROJECT_STATUS.md) for the live inventory. - -This document records evidence about what is reachable from the supported product, what is only -covered by tests, and what belongs to the superseded Qt/VTK application. A symbol is not deleted -merely because a text search finds no caller: the audit checks static imports, repository-wide -references, dynamic bridge registration, and an actual runtime entry point. - -## Classification - -- `PRODUCT_REACHABLE`: reachable from the SwiftUI application through the Python bridge or an - explicit supported CLI command. -- `TEST_ONLY`: reached by tests but not a supported runtime entry point. -- `LEGACY_ONLY`: reached only from the former Qt/PyVista/VTK application. -- `ORPHANED_BUT_REUSABLE`: not product-reachable, but required by the target planner and covered - by useful scientific tests. -- `DELETE_CANDIDATE`: no supported caller, no retained roadmap consumer, and no independent - compatibility obligation found. -- `UNKNOWN_DYNAMIC_USAGE`: static evidence is insufficient; retain until runtime evidence exists. - -## Audit method - -1. Trace imports from `native/Brain3D` backend launch, `mouse_brain_planner.bridge.server`, each - CLI command, and every test collector. -2. Search all symbol references and bridge method strings with `rg`; inspect dynamic - `dispatcher.register(...)` calls separately. -3. Launch/test the native package and bridge transport, then compare methods requested by - `PlannerViewModel.swift` with registered Python handlers. -4. Classify the current path before changing it; record affected tests with each removal. - -## Baseline - -### Repository and environment - -```text -branch: main, clean, tracking origin/main -commit: 51fe26d637b700d39944bbee86e3ea42ded4e7a2 -remote: https://github.com/KaiCao2003/brain3d.git -host: macOS 26.5.2 (25F84), arm64 -system python: 3.14.3 -project python through uv: 3.12.13 -uv: 0.10.6 -Swift: 6.3.3, target arm64-apple-macosx26.0 -tracked files: 156 -Python test files: 45 -Swift test files: 7 -``` - -The system Python is outside the project contract. All Python evidence below uses `uv run ---frozen`, which selects Python 3.12.13 from the locked environment. - -### Commands and exact pre-refactor results - -| Command | Exit | Result | -| --- | ---: | --- | -| `uv lock --check` | 0 | 76 packages resolved; lock accepted | -| `uv run --frozen ruff format --check .` | 0 | 106 files already formatted | -| `uv run --frozen ruff check .` | 0 | all checks passed | -| `uv run --frozen mypy --no-incremental` | 0 | no issues in 61 source files | -| `QT_QPA_PLATFORM=offscreen PYVISTA_OFF_SCREEN=true uv run --frozen pytest -q` | 0 | 484 passed, 1 opt-in real-archive test skipped, 487 VTK deprecation warnings | -| `swift test --package-path native/Brain3D` | 0 | 42 tests in 7 suites passed | -| `native/Brain3D/Scripts/build-app.sh` | 0 | production Swift executable and development `.app` built | -| `codesign --verify --deep --strict native/Brain3D/build/Brain3D.app` | 0 | ad-hoc signature verified | - -These results are engineering baseline evidence, not evidence that the supported UI is usable. -The Swift test target contains `Brain3DCore` only; it does not exercise `Brain3DApp` view -interaction. Most of the 487 warnings come from tests of the legacy VTK path. - -## Runtime entry points - -| Entry point | Current behavior at baseline | Status | Decision | -| --- | --- | --- | --- | -| `native/Brain3D/.../Brain3DApp.swift` | Supported macOS UI; discovers `.venv` and launches `python -u -m mouse_brain_planner.bridge.server` | `PRODUCT_REACHABLE` | Retain and extend | -| `python -m mouse_brain_planner.bridge.server` | NDJSON service with atlas, project, density, image-registration, and unprojected-target handlers | `PRODUCT_REACHABLE` | Retain; split by protocol responsibility as v2 grows | -| `mouse-brain-planner atlas ...` | Explicit atlas cache commands | `PRODUCT_REACHABLE` | Retain under explicit subcommands | -| `mouse-brain-planner validate ...` | Explicit project validation | `PRODUCT_REACHABLE` | Rename to `validate-project`, with a documented compatibility window if needed | -| `mouse-brain-planner` with no subcommand | Imports `app.py` and silently launches the old Qt UI | `LEGACY_ONLY` | Remove; print help without importing Qt | -| `mouse-brain-planner --smoke-test` | Exercises only the old Qt UI | `LEGACY_ONLY` | Remove with Qt UI tests | - -## Path-level audit table - -| Path / symbol | Current caller | Product status | Decision | Reason | Tests affected | -| --- | --- | --- | --- | --- | --- | -| `native/Brain3D/Sources/Brain3DApp` | macOS executable | `PRODUCT_REACHABLE` | Extend | Sole supported GUI | Add app/ViewModel tests; current core tests are insufficient | -| `native/Brain3D/Sources/Brain3DCore` | Swift app | `PRODUCT_REACHABLE` | Extend | Typed subprocess transport and fail-closed validation | Existing 42 Swift core tests | -| `bridge/server.py` | Swift subprocess | `PRODUCT_REACHABLE` | Retain | Framing, dispatcher, atlas opening/slicing | Bridge unit/integration tests | -| `bridge/planning.py` | Dynamic handler registration | `PRODUCT_REACHABLE` | Split incrementally | Too many project/vascular/session duties in one file | Planning and persistence integration tests | -| `bridge/atlas_interaction.py` slice/point methods | Dispatcher; slice used by Swift, point not yet used | Mixed `PRODUCT_REACHABLE` / `ORPHANED_BUT_REUSABLE` | Reuse for tri-planar cursor/region lookup | Backend already supports arbitrary slice and point queries | Atlas interaction tests | -| `bridge/implant_targets.py` | Swift sidebar | `PRODUCT_REACHABLE` | Migrate, do not infer calibration | Preserves exact unprojected AP/ML/DV | Implant bridge tests and migrations | -| `atlas/brainglobe_adapter.py` | Bridge and CLI | `PRODUCT_REACHABLE` | Retain | Allowlisted atlas and metadata boundary | Atlas adapter tests | -| `rendering/slice_renderer.py` | `atlas.slice` | `PRODUCT_REACHABLE` | Retain | Arbitrary index rendering already exists | Slice renderer tests | -| `persistence/project_io.py` provenance-aware APIs | Bridge | `PRODUCT_REACHABLE` | Extend with deterministic migrations | Atomic/checksummed persistence is valuable | Project I/O and integration tests | -| `coordinates/atlas_space.py` | Atlas/bridge/rendering | `PRODUCT_REACHABLE` | Centralize all order conversions here or a named adjacent module | Prevent distributed AP/DV/ML permutations | Coordinate golden tests | -| `coordinates/transforms.py` | Calibration and probe bridge | `PRODUCT_REACHABLE` | Retain behind explicit frame contracts | Fits and applies the subject-to-atlas boundary | Transform, calibration, and probe tests | -| `domain/*probe*`, `*stereotaxy*`, `*transform*`, `*measurement*` | Calibration/probe bridge | `PRODUCT_REACHABLE` | Retain strict schemas and provenance | Four-mode probe planning depends on these constraints | Domain, bridge, and workflow tests | -| `surgery/trajectory.py` | Probe planning service | `PRODUCT_REACHABLE` | Retain complete-pose rigid/similarity projection | Preserves shank/site geometry and rejects affine shear | Probe trajectory and bridge tests | -| `surgery/stereotaxy.py` | Calibration and probe services | `PRODUCT_REACHABLE` | Retain | Defines the measured bregma/skull frame | Stereotaxy and calibration tests | -| `surgery/measurements.py` | Tests only | `ORPHANED_BUT_REUSABLE` | Retain exact segment-distance kernel; rename centerline-only APIs before exposure | Needed by future radius-aware clearance | Measurement tests | -| `surgery/craniotomy.py` | Tests only | `TEST_ONLY` | Move out of MVP product package or defer | Not a current MVP consumer | Craniotomy tests | -| `vasculature/reference_*`, `density_overlay.py` | Archive compatibility tests only | `ARCHIVED_NOT_REGISTERED` | Preserve code/data; do not register in the primary bridge | Scalar population density is not vessel geometry | Density/store/archive tests | -| `vasculature/subject_image.py`, `registration.py`, `subject_overlay.py` | Archive compatibility tests only | `ARCHIVED_NOT_REGISTERED` | Preserve code/data; do not register in the primary bridge | A 2D subject image cannot support deep clearance | Subject image/registration archive tests | -| `rendering/sagittal_cache.py` | Tests only | `TEST_ONLY` | Remove from MVP package | Optimizes a deferred 10 µm path with no product caller | Sagittal cache tests | -| `gui/**` | `app.py` and Qt tests | `LEGACY_ONLY` | Remove from default package; preserve history in Git | Second UI/state/rendering stack conflicts with supported path | All `tests/gui/**` and Qt worker tests | -| `app.py` | CLI no-subcommand path | `LEGACY_ONLY` | Remove after CLI behavior changes | It makes an unsupported GUI the default | Smoke and CLI default tests | -| `rendering/scene_controller.py` | Legacy Qt UI/tests | `LEGACY_ONLY` | Remove from default package | PyVista-only scene state duplicates the target Swift path | Scene-controller and Qt atlas tests | - -## Bridge runtime reachability - -Primary registration is the supported product boundary and must not be inferred from Python -imports alone. Archived subject-image and population-density implementations remain callable only -when compatibility tests bind them explicitly; the production dispatcher does not register or -advertise them. - -The supported primary Swift workspace requests project/atlas state, `atlas.open`, arbitrary slice -and dorsal rendering, mesh/ray-pick methods, revision-safe implant/calibration CRUD, atomic viewer -navigation, the versioned probe catalog and four-mode plan CRUD, exact region traversal, and the -two-phase region-export methods. - -Legacy population-density and subject-image calls remain implemented behind archived compatibility -code, but are neither registered nor exposed in the primary UI. Their presence is migration and -research-code retention, not evidence that they are supported surgical-planning inputs. - -Registered compatibility/read-only methods that are not central to the current Swift path include -`atlas.list`, `atlas.regions`, `atlas.search`, `atlas.point`, and `shutdown`. The independent viewer -uses `viewer.region.pick`; `atlas.mesh` and atlas ray picking are product-reachable through 3D. -The three `vessel.major.reference.*` methods remain registered only to return the explicit -`VESSEL_GEOMETRY_UNAVAILABLE` fail-closed response; they never serve the rejected graph. - -## Resolved contradictions and remaining archive boundaries - -- The project schema retains legacy linked-cursor fields for migration; the supported viewer uses - independent slice depths plus a replace-only region selection. -- Native SceneKit 3D brain/probe rendering and atlas-region picking are product-reachable; the old - Qt/PyVista renderer is preserved only in Git history. -- Qt/VTK and the legacy GUI are absent from the default package and dependency graph. -- The console command without a subcommand prints help; bridge operation is explicit. -- The archived density overlay is reproducible population context, not individual blood vessels. -- The rejected P60_606 derivative remains evidence only and is never served as geometry. - -## Scientific and data risks to keep fail-closed - -- Allen atlas physical coordinates are not bregma-relative coordinates. -- No audited reference-only bregma profile currently exists; no implicit transform may be added. -- Population density has no vessel centerlines, radius, or retained depth in its dorsal maximum - projection. -- Subject dorsal images have no automatic vessel segmentation and cannot represent deep vessels. -- A radius/probe-envelope/margin/uncertainty kernel exists, but no coordinate-qualified vessel - graph is available; the product therefore exposes no clearance result. -- Probe profiles may not be called manufacturer-verified without complete source and independent - review records. - -## Phase 1 removal gate - -Before deleting legacy files, the refactor must demonstrate all of the following: - -1. no supported Swift/bridge import reaches Qt/VTK; -2. CLI no-subcommand and explicit bridge behavior have replacement tests; -3. minimal dependency installation can import and run the bridge without Qt/VTK; -4. tests retained from scientific modules remain green independently of GUI tests; and -5. Git history preserves the removed implementation for forensic reference. - -The symbol-by-symbol appendix below records the complete reference scan. Ambiguous dynamic -consumers would remain `UNKNOWN_DYNAMIC_USAGE`; this scan found none in the enumerated set. - -## Enumerated symbol audit - -The repository-wide search found no `getattr`, `importlib`, package entry-point, or method-string -loader for the functions below. Dynamic usage is confined to explicit bridge method -registration, which was audited separately. Therefore none of these symbols remains -`UNKNOWN_DYNAMIC_USAGE`. - -| Symbol | Current caller at baseline | Classification | Phase decision | -| --- | --- | --- | --- | -| `paths.configure_qt_environment` | `gui/__init__.py` import side effect | `LEGACY_ONLY` | Deleted with the Qt package | -| `coordinates.transforms.fit_anatomical_transform` | transform tests | `ORPHANED_BUT_REUSABLE` | Retain and connect to calibration | -| `coordinates.transforms.transform_point` | transform/stereotaxy tests | `ORPHANED_BUT_REUSABLE` | Retain and connect to calibration/projection | -| `coordinates.transforms.transform_points` | transform tests | `ORPHANED_BUT_REUSABLE` | Retain for bounded batch transforms | -| `coordinates.transforms.transform_vector` | transform tests | `ORPHANED_BUT_REUSABLE` | Retain for probe directions | -| `coordinates.transforms.invert_transform` | transform tests | `ORPHANED_BUT_REUSABLE` | Retain for explicit inverse mapping | -| `coordinates.transforms.compose_transforms` | transform tests | `ORPHANED_BUT_REUSABLE` | Retain for named transform chains | -| `surgery.stereotaxy.calibrate_skull_landmarks` | stereotaxy/probe tests | `ORPHANED_BUT_REUSABLE` | Retain and expose through calibration service | -| `surgery.measurements.point_to_point_distance` | measurement tests | `ORPHANED_BUT_REUSABLE` | Retain as explainable geometry primitive | -| `surgery.measurements.point_to_line_distance` | measurement tests | `ORPHANED_BUT_REUSABLE` | Retain as explainable geometry primitive | -| `surgery.measurements.path_length` | measurement tests | `ORPHANED_BUT_REUSABLE` | Retain for trajectory/region summaries | -| `surgery.measurements.angle_between_directions` | measurement tests | `ORPHANED_BUT_REUSABLE` | Retain for placement inspection | -| `surgery.measurements.distance_between_probe_centerlines` | measurement tests | `ORPHANED_BUT_REUSABLE` | Retain, keep centerline-only naming | -| `surgery.measurements.nearest_vessel_distance` | measurement tests | `ORPHANED_BUT_REUSABLE` | Keep compatibility temporarily; rename to centerline distance before product exposure | -| `surgery.trajectory.placement_from_entry_target` | probe/measurement tests | `ORPHANED_BUT_REUSABLE` | Retain for `ENTRY_AND_TARGET` | -| `surgery.trajectory.placement_from_entry_angles_depth` | probe tests | `ORPHANED_BUT_REUSABLE` | Retain for `ENTRY_ANGLES_DEPTH` | -| `surgery.trajectory.placement_from_bregma_relative_mm` | probe tests | `ORPHANED_BUT_REUSABLE` | Retain; expose only after active calibration passes QC | -| `surgery.trajectory.attach_surface_entries` | probe tests | `ORPHANED_BUT_REUSABLE` | Retain behind a validated surface-intersection service | -| `surgery.trajectory.placed_recording_sites` | probe tests | `ORPHANED_BUT_REUSABLE` | Retain and expose in plan/region analysis | -| `surgery.trajectory.placement_permits_final_export` | probe tests | `ORPHANED_BUT_REUSABLE` | Retain verification/provenance gate | -| `surgery.craniotomy.craniotomy_metrics` | craniotomy tests | `DELETE_CANDIDATE` for MVP | Leave isolated for now; remove or move before Phase 4 if no surface consumer exists | -| `surgery.craniotomy.craniotomy_outline_points` | craniotomy tests | `DELETE_CANDIDATE` for MVP | Same decision as craniotomy metrics | -| `domain.implant_site_models.validate_bregma_decimal_inputs` | unprojected-target test | `DELETE_CANDIDATE` | Remove when bridge/Swift parsing is consolidated in protocol v2 | -| `domain.implant_site_models.unprojected_bregma_target_summary` | unprojected-target test | `DELETE_CANDIDATE` | Remove duplicated presentation helper during target migration | -| `persistence.project_io.load_project` | compatibility tests | `TEST_ONLY` | Deprecate; product uses `load_project_with_provenance` | -| `rendering.sagittal_cache.prepare_sagittal_cache` | sagittal-cache tests only | `DELETE_CANDIDATE` | Deleted with deferred 10 µm cache path | -| `vasculature.registration.transform_image_pixels_to_atlas` | registration tests | `ORPHANED_BUT_REUSABLE` | Retain for 2D surface-entry analysis | -| `gui.dialogs.dorsal_vascular_registration.DorsalVascularRegistrationDialog` | Qt dialog tests only; no `MainWindow` caller | `DELETE_CANDIDATE` | Deleted; Swift already has `VascularRegistrationSheet` | - -## Phase 1 execution evidence - -The single-product-path cleanup was then applied in the same audited working tree: - -- the no-subcommand CLI now prints help and returns 2; -- `mouse-brain-planner bridge` is an explicit, tested service entry point; -- `app.py`, `gui/**`, `scene_controller.py`, `sagittal_cache.py`, and their legacy-only tests were - deleted; the prior implementation remains at Git commit `51fe26d`; -- PySide6, PyVista, PyVistaQt, VTK, pytest-qt, PyInstaller, unused direct pandas, and unused pooch - declarations were removed; -- the lock resolved 48 packages instead of 76 and contains none of those removed packages; -- the retained default runtime imports exactly the BrainGlobe/array/model/image dependencies - documented in `pyproject.toml`; -- `.venv/bin/python scripts/verify_minimal_runtime.py` confirmed all five forbidden module roots - are unavailable and completed a real explicit-CLI `hello`/`shutdown` exchange; and -- the retained suite completed with `377 passed, 1` external real-archive test skipped and no VTK - warnings. - -Removing `tests/conftest.py` initially caused eight fixture-package import failures during pytest -collection. It was restored as a one-line, side-effect-free repository test root; all former -Qt/PyVista environment mutation was removed. This is evidence that the file had a non-GUI pytest -role and was not a valid deletion candidate. - -The source and runtime scans prove the dependency/path boundary. They do not prove live SwiftUI -control behavior: no automated native UI target existed at this phase, and no running-window -click journey was used to classify handlers. diff --git a/docs/LAMBADA_MAJOR_VESSELS.md b/docs/LAMBADA_MAJOR_VESSELS.md deleted file mode 100644 index 9257a62..0000000 --- a/docs/LAMBADA_MAJOR_VESSELS.md +++ /dev/null @@ -1,178 +0,0 @@ -# LAMBADA P60_606 archived derivative and rejected qualification - -The repository retains a compact evidence derivative of the atlas-registered P60_606 graph -from Renier, de Launoit, and Skriabine's *Vascular graphs of the developing post-natal mouse -brain*. The source is [Zenodo record 18876865](https://zenodo.org/records/18876865), DOI -`10.5281/zenodo.18876865`, licensed under -[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). The associated Cell paper is DOI -[`10.1016/j.cell.2026.03.013`](https://doi.org/10.1016/j.cell.2026.03.013). - -This derivative is not an application layer, a medical device, a subject image, or a live -vascular measurement. It cannot establish subject-specific clearance or trajectory suitability. - -## Runtime status - -Coordinate qualification is rejected. The current runtime does not load, serve, display, mirror, -or analyze the P60_606 derivative. The production `auditedReferenceMajorVessels` capability and -reference metadata/geometry endpoints now belong exclusively to the separately qualified VesSAP -BL6J-no1 display reference. `radiusAwareReferenceVesselAnalysis` remains absent and clearance -analysis fails with `VESSEL_ANALYSIS_UNAVAILABLE`. - -No geometry from this derivative may appear in a slice, Dorsal, or 3D view. It cannot support a -probe/vessel intersection, margin, distance, conflict, no-conflict, or surgical-clearance claim. - -## Coordinate and coverage qualification - -The reproducible qualification reran the exact extraction against the exact pinned source graph -and tested coordinate orientation against the exact BrainGlobe `allen_mouse_25um` v1.2 -annotation. AP and DV orientation evidence passed. Qualification still failed for two independent -reasons: - -1. The primary source describes the specimens as mouse brain hemispheres, so the specimen does - not establish whole-brain coverage. -2. The exact P60_606 graph contains no persisted graph, vertex, or edge property that binds the - numerical ML axis to biological hemisphere/laterality. - -Points occur numerically on both sides of the atlas-array midpoint, but that is not evidence that -the source represents both biological hemispheres. No trustworthy source documents a permitted -mirror transform for this exact specimen. The application therefore does not choose an ML sign, -infer the sampled side, or mirror the derivative. - -The canonical report is -[`docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json`](evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json), -SHA-256 `0993d5a0ad6c0d62094dc395fe2bc4f284870e6e7c0b602be7df5a7da867c93a`. -Its blocking reason codes are `SOURCE_HEMISPHERE_PROPERTY_MISSING` and -`SOURCE_SPECIMEN_COVERAGE_IS_HEMISPHERE`; `qualifiedMapping` is null. - -## Sources rejected for subject-clearance integration - -No audited source met all five requirements for subject-clearance integration: downloadable -major-vessel centerlines/radii, an -explicit Allen 25 µm transform, biological laterality, a documented CCF-to-bregma relationship, -and terms that permit the required redistributed derivative. - -| Candidate | Why it is not integrated | -| --- | --- | -| [Mendeley `mjtyry6v85.1`](https://data.mendeley.com/datasets/mjtyry6v85/1) | The graph coordinates are raw specimen-space XYZ without qualified orientation, laterality, Allen registration, or bregma relationship. | -| [Mendeley `stxvn5sv44.1`](https://data.mendeley.com/datasets/stxvn5sv44/1) | This is an averaged four-mouse 20 µm population vessel-length-density NIfTI, not major-vessel centerlines/radii; population/capillary-density display is outside the planner's accepted scope. | -| [Hinz et al. 2021](https://www.biorxiv.org/content/10.1101/2021.10.21.465264v1) | Geometry is in a study-specific 78 µm MRI template with no Allen/bregma transform, and CC BY-NC-ND terms do not permit the required transformed redistribution. | -| [Xiong et al. 2017](https://www.frontiersin.org/journals/neuroanatomy/articles/10.3389/fnana.2017.00128/full) | Named vessels are documented, but no downloadable graph or CCF transform is provided. | - -These are rejected alternatives, not integrated data. VesSAP is separately accepted only for a -display reference; it does not meet the subject/bregma/error-bound requirements for clearance. A -future clearance source must be audited against the same requirements before any analysis -capability can be advertised. - -## Archived derivative - -The 12.28 GB extracted graph and its 5.05 GB archive are not committed. The bundled NPZ is -814,393 bytes with SHA-256 -`fb2344e845e604be3424bd63f4222d273eafba34db0df2eaff32f4400fa9afec`. -Its adjacent manifest records source identity, attribution, schema, extraction version, array -shapes, output statistics, and the mandatory limitations checked by the runtime loader. - -The derivative contains five arrays: - -| Array | Meaning | -| --- | --- | -| `points_asr_voxel_f32 [71313,3]` | Continuous Allen 25 µm coordinates in BrainGlobe `[AP,DV,ML]` order | -| `radii_um_f32 [71313]` | Approximate source radius in micrometres | -| `source_annotation_ids_i32 [71313]` | Coarse source ancestor IDs; not a replacement for current atlas lookup | -| `run_offsets_i64 [11819]` | End-exclusive boundaries for 11,818 independent polylines | -| `source_edge_indices_i32 [11818]` | Serialized source edge index for each polyline | - -The archived loader can verify the manifest and NPZ identities, inventory, dtypes, shapes, -bounds, radius threshold, run lengths, edge ordering, and total path length. Those checks establish -deterministic bytes and extraction behavior; they do not qualify biological laterality or -whole-brain coverage and do not authorize runtime geometry access. - -## Extraction rule - -Algorithm `lambada-p60-606-major-runs-v1` applies the following rule independently to every -source edge: - -1. Accept a point only when all three coordinates and its radius are finite. -2. Require ClearMap bounds `0 <= [c0,c1,c2] < [320,528,456]`. -3. Require physical radius at least 15 µm, equivalent to source `radii_atlas >= 0.6` at 25 µm. -4. Form maximal consecutive accepted blocks. Keep only blocks with at least two points. -5. Split and drop at rejected points. Never clip or interpolate coordinates. -6. Permute ClearMap `[c0,c1,c2]` to BrainGlobe ASR `[c1,c0,c2]`. -7. Convert continuous voxel coordinates using `physical_um = voxel * 25`, with no half-voxel - shift. - -The source edge maximum is used only as a conservative prefilter. Selection within an edge is -always pointwise. Keeping an entire edge whenever any point passes would retain 832,850.19 µm -of path, including 632,459.33 µm whose points fail the radius criterion. Selecting edges by -their mean radius would miss 5,597 edges that contain qualifying segments. - -The reproduced derivative output is: - -- 16,156 source edges pass the conservative edge-maximum prefilter. -- 78,048 source geometry points are finite, in bounds, and at least 15 µm in radius. -- 71,313 points form drawable runs; isolated qualifying points are omitted. -- 59,495 segments form 11,818 runs from 10,907 serialized source edges. -- Source-float64 retained path length is 200,390.862919 µm. - -The source contains 292,368 atlas-coordinate points outside the reviewed array bounds, all past -the second-axis upper bound. They are not clamped back into the brain. - -## Reproduction - -The Zenodo-distributed archive identity is: - -- filename: `P60_606_graph_2024-12-03.gt.7z` -- bytes: `5,050,194,723` -- SHA-256: `cc6d252ee57154f5bc0f06605a703253470a57c210d76e075831effa2098d66f` -- Zenodo MD5: `218ed346c6d7dc501301204f811be37f` - -After extraction, the accepted graph identity is: - -- filename: `606_graph_2024-12-03.gt` -- bytes: `12,282,574,483` -- SHA-256: `c2568cfbecd3f3eb720519be9d042f0cb41606741b8dd2f018bad1c54d36ef85` -- MD5: `b0bedc97ed2c6e00a41565649b3dd86b` - -From the repository root, with that extracted file available locally: - -```bash -uv run python scripts/extract_lambada_major_vessels.py \ - /absolute/path/to/606_graph_2024-12-03.gt -``` - -The script hashes the full source before reading any pinned binary offsets. It rejects any other -file, validates contiguous source edge ranges, asserts every reviewed extraction count, writes -NPZ members in a fixed order with fixed ZIP metadata, rebuilds the asset in a temporary -directory, and requires both builds to have identical bytes before writing the manifest. - -To reproduce the separate qualification report, provide the exact extracted graph and exact -BrainGlobe atlas package directory: - -```bash -uv run python scripts/qualify_lambada_coordinates.py \ - /absolute/path/to/606_graph_2024-12-03.gt \ - /absolute/path/to/allen_mouse_25um_v1.2 \ - --output /absolute/path/to/qualification.json -``` - -A rejected run exits nonzero by design. Compare its canonical bytes and SHA-256 with the checked-in -report; do not promote a locally edited or differently sourced report. - -## Mandatory interpretation limits - -- Evidence use only; this derivative is not displayed or analyzed and is not validated for - surgery. -- The source is an atlas-registered fixed and cleared P60 mouse-brain reference, not live or - subject-specific vasculature. -- Pial and choroidal vessels were removed by the source workflow. This derivative also - suppresses points below a 15 µm radius, so missing vessels are expected. -- Registration error, tissue distortion, biological variation, and omitted vessels are not - bounded by this graph. -- The primary record describes hemisphere specimens, while the exact graph has no persisted - hemisphere/laterality binding. Whole-brain coverage and biological ML polarity are therefore - unqualified, and mirroring is prohibited. -- No artery-versus-vein identity is available. -- The source workflow corrected endpoints, linearly reconnected nearby endpoints, and removed - short terminal offshoots. Some paths are reconstructed rather than directly observed. -- Radii use the source's mean atlas-resampling scale, not a local Jacobian correction, and fixed - cleared tissue may be distorted. -- Out-of-bounds points are omitted without clipping or interpolation. diff --git a/docs/LEGACY_REMOVAL.md b/docs/LEGACY_REMOVAL.md deleted file mode 100644 index 77db450..0000000 --- a/docs/LEGACY_REMOVAL.md +++ /dev/null @@ -1,49 +0,0 @@ -# Legacy Qt/VTK Removal - -## Scope - -The baseline contains two desktop products. The supported SwiftUI application launches the -Python bridge, while the default Python console command launches an older PySide6/PyVista/VTK -application. Phase 1 removes the latter from the default product and dependency graph. - -## Legacy-only manifest - -- `src/mouse_brain_planner/app.py` -- `src/mouse_brain_planner/gui/**` -- `src/mouse_brain_planner/rendering/scene_controller.py` -- Qt/VTK-specific GUI and scene-controller tests -- `--smoke-test` and `--no-download` CLI flags that configure only the Qt application -- PySide6, PyVista, PyVistaQt, and VTK default dependencies - -`rendering/sagittal_cache.py` is a separate test-only 10 µm optimization with no supported -consumer. Because the MVP intentionally allows only the 25 µm atlas, it is removed from the -default package rather than coupled to the linked viewer. - -## Reusable code that is not legacy - -The following tested Python modules are retained and wired into the new product instead of being -deleted with the old GUI: - -- named coordinate frames and anatomical transforms; -- stereotaxic calibration models/math; -- probe definitions, placements, and recording-site geometry; -- exact finite-segment measurement kernels; -- atlas slicing/point lookup and project persistence; -- population-density and subject-image provenance/registration. - -## Removal sequence - -1. Change the CLI so no subcommand prints help and an explicit `bridge` command starts the service. -2. Add tests proving CLI parsing/import does not import Qt/VTK. -3. Remove legacy modules and their UI-only tests from the package. -4. Remove Qt/VTK from base dependencies and regenerate the lockfile. -5. Install/test the minimal locked environment and build the native app. -6. Keep the deletion commit in Git history; do not copy the old stack into a second maintained - `experimental` package. - -## Rollback - -The pre-removal implementation remains retrievable from Git commit -`51fe26d637b700d39944bbee86e3ea42ded4e7a2`. A historical bug investigation may inspect that -commit without restoring Qt/VTK to the supported package. Any proposal to revive it must explain -how duplicated state, dependencies, accessibility, and two-GUI maintenance will be avoided. diff --git a/docs/SURGERY_PLAN_EXPORT.md b/docs/SURGERY_PLAN_EXPORT.md index 29c533e..a11825f 100644 --- a/docs/SURGERY_PLAN_EXPORT.md +++ b/docs/SURGERY_PLAN_EXPORT.md @@ -79,8 +79,7 @@ converting schema-8 target/calibration records. The packet is marked `FINAL` only when the project has a subject, records the animal-research acknowledgement, is saved and clean, and has a current matching v4 probe plan. A separate target projection, active subject calibration, and geometry checkbox are not v4 prerequisites. Otherwise -the packet is visibly marked `DRAFT`. `FINAL` describes software-state agreement only; it is not -a biological or procedural validation claim. +the packet is visibly marked `DRAFT`. `FINAL` describes software-state agreement for the exported packet. ## Selectable planning views diff --git a/docs/VESSAP_MAJOR_VESSELS.md b/docs/VESSAP_MAJOR_VESSELS.md index deb0b9a..0f6aa05 100644 --- a/docs/VESSAP_MAJOR_VESSELS.md +++ b/docs/VESSAP_MAJOR_VESSELS.md @@ -1,51 +1,47 @@ -# VesSAP BL6J-no1 major-vessel reference +# VesSAP External Major-vessel Data -## Decision +Brain3D can display an optional derivative of the VesSAP `BL6J-no1` whole-brain skeleton and +radius volumes described by Todorov et al., +[Nature Methods 2020](https://doi.org/10.1038/s41592-020-0792-1). -**Display-only GO:** Brain3D may display the pinned, bilateral BL6J-no1 derivative as an -ex-vivo C57BL/6J major-vessel reference. +## Repository boundary -**Clearance NO-GO:** the layer must not classify clearance, vessel absence, trajectory -suitability, navigation accuracy, or safety for an individual animal. It is one fixed and -cleared specimen, has no published landmark target-registration-error bound, and is not -registered to the operative animal's skull or bregma. +The NPZ, manifest, source volumes, transform archive, and license text are not stored in this +repository or bundled with the application. The external files retain the VesSAP +[CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/) terms. -The runtime therefore exposes geometry and provenance but fails closed for clearance analysis. +Install the prepared files at: -## Pinned sources +```text +/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz +/vasculature/vessap_bl6j1_major_vessels_50um_v1.npz.manifest.json +``` -The source is the VesSAP public repository release dated 2021-10-01 associated with Todorov et -al., *Machine learning analysis of whole mouse brain vasculature*, -[DOI 10.1038/s41592-020-0792-1](https://doi.org/10.1038/s41592-020-0792-1). -The public data-access record is [DISCO Technologies VesSAP](https://www.discotechnologies.org/VesSAP/). +Set `MOUSE_BRAIN_PLANNER_DATA_DIR` to override ``. -The derivative manifest pins the aggregate source-bundle identity -`d0216b9f6fcec428845f8ecc24860b4838f27b6b69496a88d8b7ab0dcd1dbf8a`. +## Data contract -| File | Role | Bytes | SHA-256 | -|---|---|---:|---| -| `BL6J-no1_iso3um_stitched_skeleton.nii.gz` | True source centerlines | 114,305,865 | `1ea1a489dfacfa509f60d984ee955e43107a579d181bb5e6f3df51da6b68beac` | -| `BL6J-no1_iso3um_stitched_radius.nii.gz` | Euclidean-distance radius values on the centerlines | 136,114,699 | `6a8728d4518957c0e84687b077a76e64362edc9644c6e2adce60c2c244d4b887` | -| `elastix_atlas_registration_parameters.7z` | Published BL6J-no1 Euler plus B-spline transform | 38,472 | `ab2509e07dcab65f176b72337624fa2ccc38f9e32f17530964ed17af5e1e88ad` | -| `BL6J-no1_iso3um_stitched_atlas_registration_result.nii.gz` | Signed-label validation only; not bundled | 320,422,938 | `c3b9904ba95f8566b7161fd0f197cfe064ee0c5cfb24d49e553bc9c8793677c1` | -| `C57BL_6_no1.zip` | VesselGraph node/edge and grouped-label validation only; not bundled | 353,177,007 | `41d4d9d44e4b04190d7f1039615fb08e58aacd707d6d0baffb6c4090162d236f` | -| `C57BL_6_no1_raw.zip` | Raw VesselGraph endpoint-feature validation only; not bundled | 348,965,728 | `2bfd91617100085fd869b5e20970c46c6a1120b2474f78b34b634231e98ccae9` | +The loader expects: -The independent 10 µm label check used BrainGlobe `allen_mouse_10um` version 1.2, -shape `[1320, 800, 1140]`, orientation `asr`, annotation SHA-256 -`9f04278b0e539c88029b7caafa1b9fffed1cd2bf8a4e587903a823e182ce2ab4`. -The shipped display geometry is bounded against `allen_mouse_25um` version 1.2, -shape `[528, 320, 456]`. +| Property | Value | +| --- | --- | +| Asset SHA-256 | `9300dacf25ca57a5d23377ca0dc885e34ff0d18e8d21ef7590c6dcd156cf5db7` | +| Asset bytes | 1,853,131 | +| Atlas | `allen_mouse_25um` version `1.2` | +| Output points | 196,377 | +| Output runs | 76,622 | +| Output segments | 119,755 | +| Minimum source radius | 15 µm | +| Display grid | 50 µm | -## Exact transform interpretation +Before returning geometry, Brain3D checks the manifest schema, source identity, transform identity, +asset digest and size, array inventory, data types, shapes, bounds, run offsets, radius threshold, +and path length. -For a source skeleton voxel `g = [x, y, z]`, form the Elastix fixed physical point -`p = 0.1 * g`. Apply the published Euler transform followed by the B-spline transform and -call the Transformix physical result `T = [T_x, T_y, T_z]`. +## Coordinate mapping -The moving atlas order is `[ML left-to-right, AP, DV]`. BrainGlobe ASR order is -`[AP anterior-to-posterior, DV superior-to-inferior, ML right-to-left]`, so ML must be -reflected: +The prepared data uses BrainGlobe physical `[AP,DV,ML]` micrometres. The VesSAP transform output +is mapped as: ```text AP_um = 30 * T_y @@ -53,107 +49,10 @@ DV_um = 30 * T_z ML_um = 11390 - 30 * T_x ``` -Equivalent continuous atlas indices are: +The ML reflection converts the source left-to-right direction to BrainGlobe ASR right-to-left. -```text -10 um: [AP, DV, ML] = [3*T_y, 3*T_z, 1139 - 3*T_x] -25 um: [AP, DV, ML] = [1.2*T_y, 1.2*T_z, 455.6 - 1.2*T_x] -``` +## Runtime behavior -Use the atlas voxel-center conversion when discretizing. A no-flip ML interpretation swaps -biological left and right even though the symmetric Allen annotation cannot reveal that error -from unsigned region labels alone. - -## Path-preserving extraction - -The graph CSV files contain endpoints, path length, curveness, and radius summaries, but no -intermediate centerline coordinates. They cannot preserve vessel paths. Among the 371,759 graph -edges with average radius at least five source voxels, 30.72% have curveness above 1.10 and the -99th-percentile chord-versus-path length deficit is 38.5 µm; drawing endpoint chords is rejected. - -The bundled derivative instead follows this pinned procedure: - -1. Read the same-grid uint8 skeleton and radius volumes, each - `2804 x 3661 x 2012` at 3 µm sampling. -2. Retain skeleton voxels with radius at least five voxels: nominal radius at least 15 µm and - diameter at least 30 µm. Capillaries and smaller vessels are intentionally excluded. -3. Recover 26-neighbour adjacency in source space before any transform. -4. Transform retained source points with the published BL6J-no1 transform and the reviewed ML - reflection above. -5. Coalesce on a 50 µm display grid. Retain only edges induced by source adjacency; never join - points merely because their target bins are adjacent. -6. Store the mean continuous transformed coordinate per occupied display bin and the maximum - retained source EDT radius multiplied by 3 µm. - -The source skeleton and radius supports match exactly: 58,313,813 nonzero centerline voxels and -zero support mismatches across 20,654,073,328 source voxels. The radius threshold retains -1,262,706 source points. - -## Bundled derivative identity - -| Property | Pinned value | -|---|---| -| File | `vessap_bl6j1_major_vessels_50um_v1.npz` | -| Asset ID | `vessap-bl6j-no1-major-vessels-50um-v1` | -| Extraction algorithm | `vessap-bl6j1-major-skeleton-50um-v1` | -| Bytes | 1,853,131 | -| SHA-256 | `9300dacf25ca57a5d23377ca0dc885e34ff0d18e8d21ef7590c6dcd156cf5db7` | -| In-bounds threshold points | 1,258,140 | -| Occupied 50 µm display voxels | 198,262 | -| Omitted isolated display voxels | 63,320 | -| Output points | 196,377 | -| Output runs | 76,622 | -| Output segments | 119,755 | -| Output path length | 3,817,312.085 µm | - -The adjacent JSON manifest, the NPZ, and -`src/mouse_brain_planner/assets/vasculature/VESSAP_DATA_LICENSE.txt` are one evidence package. -The loader checks filename, byte count, SHA-256, member inventory, array types/shapes, transform -identity, extraction statistics, bounds, radius threshold, and mandatory limitations before -returning geometry. - -## Independent validation - -- Twenty thousand deterministic, evenly spaced nodes were sampled from 3,820,133 graph nodes. -- Correct `[T_y, T_z, T_x] -> [AP, DV, ML]` AP/DV orientation achieved 98.5025% non-background - grouped-region agreement before subvoxel adjustment; the strongest incorrect AP/DV - orientation achieved 20.8207%. -- With the required ML reflection, 10 µm agreement was 18,664/18,765 = 99.4618% for - non-background nodes and 17,505/17,585 = 99.5451% after also excluding root and fiber tracts. -- Corrected 25 µm non-background agreement was 97.8524%; 99.705% of sampled transformed points - were within the 25 µm atlas bounds. -- Direct comparison of the official signed registered-atlas NIfTI with the independently loaded - `atlas_processed` labels agreed at 18,761/18,765 = 99.9787% non-background sampled nodes. -- The official signed registered annotation supplied 19,429 nonzero labels: 8,985 left and - 10,444 right. The canonical midline classified 19,425/19,429 = 99.9794%; all four discrepancies - were within 5.38 µm of the midline. The best empirical separator classified - 19,428/19,429 = 99.9949%. This proves the required ML reversal. -- At 1,000 sampled nodes, finite-difference transform Jacobian determinants were - 1.269–2.451 with no sampled fold; singular values were 0.672–1.560. The large anisotropy is - another reason a scalar source radius cannot become a surgical clearance bound. -- On 2,000 graph nodes, 93.85% were within `sqrt(3)` source voxels of the official skeleton and - 98.2% within three voxels, supporting common spatial identity while confirming that graph - endpoints are not substitutes for the voxel paths. - -These checks qualify transform interpretation, laterality, source identity, and deterministic -derivation. They do **not** independently bound biological registration error. - -## Mandatory limitations - -- Animal research use only; not a medical device. -- One fixed, cleared adult C57BL/6J brain, not the current animal or live vasculature. -- No numeric registration-error, tissue-clearing-distortion, bregma, or skull-registration bound. -- No artery-versus-vein identity; pial and choroidal coverage is not separately classified. -- The 50 µm display reduction can merge close paths and omits isolated target voxels without a - retained segment. -- A displayed path does not establish its location in the current animal; a missing path does - not establish vessel absence. -- Clearance, conflict, safe-entry, and trajectory-suitability conclusions remain disabled. - -## Separate data license - -The source data and this adapted derivative are licensed -[CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/). They are not relicensed by -Brain3D's source-code license. Redistribution must preserve the VesSAP attribution, paper DOI, -release identity, exact source and derivative digests, this limitations record, and the bundled -license text. Commercial use requires separate authorization from the rights holders. +When both external files are available, the bridge exposes metadata and geometry for the five +views. If either file is missing or fails validation, the capability is not advertised. Vessel +clearance analysis remains unavailable. diff --git a/docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json b/docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json deleted file mode 100644 index dc46559..0000000 --- a/docs/evidence/lambada_p60_606_coordinate_qualification_rejected_v1.json +++ /dev/null @@ -1 +0,0 @@ -{"algorithmVersion":"lambada-p60-606-coordinate-signs-v1","annotationOrientation":{"method":"For each of all eight AP/DV/ML sign combinations, truncate retained continuous voxels exactly as ClearMap label_points does, sample the pinned Allen annotation, and count the source annotation when it is an ancestor of the sampled Allen structure. AP/DV are judged separately from bilateral ML symmetry.","scores":[{"ancestorAgreement":{"decimal":"0.866910610","denominator":52198,"numerator":45251},"evaluableFraction":{"decimal":"0.731956305","denominator":71313,"numerator":52198},"evaluablePointCount":52198,"exactLeafAgreement":{"decimal":"0.182439940","denominator":52198,"numerator":9523},"flipAP":false,"flipDV":false,"flipML":false,"label":"AP_KEEP_DV_KEEP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.846928089","denominator":51564,"numerator":43671},"evaluableFraction":{"decimal":"0.723065921","denominator":71313,"numerator":51564},"evaluablePointCount":51564,"exactLeafAgreement":{"decimal":"0.155088822","denominator":51564,"numerator":7997},"flipAP":false,"flipDV":false,"flipML":true,"label":"AP_KEEP_DV_KEEP_ML_FLIP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.247666836","denominator":41253,"numerator":10217},"evaluableFraction":{"decimal":"0.578477977","denominator":71313,"numerator":41253},"evaluablePointCount":41253,"exactLeafAgreement":{"decimal":"0.027028337","denominator":41253,"numerator":1115},"flipAP":false,"flipDV":true,"flipML":false,"label":"AP_KEEP_DV_FLIP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.245175056","denominator":41244,"numerator":10112},"evaluableFraction":{"decimal":"0.578351773","denominator":71313,"numerator":41244},"evaluablePointCount":41244,"exactLeafAgreement":{"decimal":"0.020851518","denominator":41244,"numerator":860},"flipAP":false,"flipDV":true,"flipML":true,"label":"AP_KEEP_DV_FLIP_ML_FLIP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.179921852","denominator":33270,"numerator":5986},"evaluableFraction":{"decimal":"0.466534853","denominator":71313,"numerator":33270},"evaluablePointCount":33270,"exactLeafAgreement":{"decimal":"0.006822964","denominator":33270,"numerator":227},"flipAP":true,"flipDV":false,"flipML":false,"label":"AP_FLIP_DV_KEEP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.177183301","denominator":33344,"numerator":5908},"evaluableFraction":{"decimal":"0.467572532","denominator":71313,"numerator":33344},"evaluablePointCount":33344,"exactLeafAgreement":{"decimal":"0.006208013","denominator":33344,"numerator":207},"flipAP":true,"flipDV":false,"flipML":true,"label":"AP_FLIP_DV_KEEP_ML_FLIP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.152792247","denominator":31677,"numerator":4840},"evaluableFraction":{"decimal":"0.444196710","denominator":71313,"numerator":31677},"evaluablePointCount":31677,"exactLeafAgreement":{"decimal":"0.003882943","denominator":31677,"numerator":123},"flipAP":true,"flipDV":true,"flipML":false,"label":"AP_FLIP_DV_FLIP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.153758289","denominator":31517,"numerator":4846},"evaluableFraction":{"decimal":"0.441953080","denominator":71313,"numerator":31517},"evaluablePointCount":31517,"exactLeafAgreement":{"decimal":"0.003521909","denominator":31517,"numerator":111},"flipAP":true,"flipDV":true,"flipML":true,"label":"AP_FLIP_DV_FLIP_ML_FLIP","selectedPointCount":71313}]},"atlas":{"annotation":{"filename":"annotation.tiff","sha256":"52775c6086ae6aa7d9df2ad2c9e5ab9ce36effa09f5355c7c45efeada6647e06","sizeBytes":308270826},"atlasKey":"allen_mouse_25um","atlasPackageVersion":"1.2","metadata":{"filename":"metadata.json","sha256":"119132150055826484fa75a4dc17c476d02251c0db8b4d0b7b28f6b8c4b8ae60","sizeBytes":423},"orientation":"asr","resolutionUm":[25,25,25],"shapeVoxels":[528,320,456],"structures":{"filename":"structures.json","sha256":"7157e6130b354f6bebc21aa79f882274cbbe253ac916d97123805af3b4ff8abd","sizeBytes":138106}},"checks":[{"id":"annotation-evaluable-point-count","observed":"52198","passed":true,"required":">=50000"},{"id":"annotation-evaluable-fraction","observed":"52198/71313","passed":true,"required":">=7/10"},{"id":"annotation-ancestor-agreement","observed":"45251/52198","passed":true,"required":">=4/5"},{"id":"expected-orientation-is-global-winner","observed":"AP_KEEP_DV_KEEP_ML_KEEP","passed":true,"required":"AP_KEEP_DV_KEEP_ML_KEEP"},{"id":"expected-orientation-global-lead","observed":"8963951/448589612","passed":true,"required":">=1/100"},{"id":"ap-dv-sign-margin","observed":"1333432537/2153324094","passed":true,"required":">=1/5"},{"id":"source-hemisphere-property-present","observed":"0 matching properties","passed":false,"required":"1 graph:edge_geometry_hemisphere typeIndex=14"},{"id":"source-coverage-whole-brain","observed":"official source declares brain-hemisphere specimens","passed":false,"required":"whole-brain source or explicitly reviewed bilateral reconstruction"}],"clearMapImplementationEvidence":{"annotationAndHemispherePropertyCreation":"https://github.com/ClearAnatomics/ClearMap/blob/71444a5c7456901f15e8d0ceb06fab72b74161df/ClearMap/processors/tube_map.py#L660-L682","commit":"71444a5c7456901f15e8d0ceb06fab72b74161df","evidenceScope":"Context only. Generic repository code does not bind a workflow commit, configuration, or transform to the exact P60_606 artifact.","exactArtifactSpecimenConfiguration":null,"exactArtifactWorkflowCommit":null,"graphLevelEdgeGeometryStorage":"https://github.com/ClearAnatomics/ClearMap/blob/71444a5c7456901f15e8d0ceb06fab72b74161df/ClearMap/Analysis/Graphs/GraphGt.py#L869-L910","hemisphereLabelSemantics":"https://github.com/ClearAnatomics/ClearMap/blob/71444a5c7456901f15e8d0ceb06fab72b74161df/ClearMap/Analysis/Statistics/data_frame_operations.py#L53-L59","repository":"https://github.com/ClearAnatomics/ClearMap"},"decision":{"apDvWinnerMargin":"1333432537/2153324094","bestAPDVAlternative":"AP_KEEP_DV_FLIP_ML_KEEP","blockingReasons":["SOURCE_HEMISPHERE_PROPERTY_MISSING","SOURCE_SPECIMEN_COVERAGE_IS_HEMISPHERE"],"expectedGlobalLead":"8963951/448589612","globalRunnerUp":"AP_KEEP_DV_KEEP_ML_FLIP","globalWinner":"AP_KEEP_DV_KEEP_ML_KEEP","hemisphereWinnerMargin":null,"qualifiedMapping":null},"graphTool":{"byteOrder":"little","directed":false,"edgeCount":3301619,"formatDocumentation":"https://graph-tool.skewed.de/static/docs/stable/gt_format.html","hemisphereProperty":null,"propertyCount":31,"propertyInventory":[{"itemCount":1,"kind":"graph","name":"shape","objectPayloadOffset":31054881,"objectPayloadSizeBytes":23,"recordOffset":31054858,"typeIndex":14,"valuesEndOffset":31054904,"valuesOffset":31054873},{"itemCount":1,"kind":"graph","name":"edge_geometry_type","objectPayloadOffset":31054940,"objectPayloadSizeBytes":20,"recordOffset":31054904,"typeIndex":14,"valuesEndOffset":31054960,"valuesOffset":31054932},{"itemCount":1,"kind":"graph","name":"edge_geometry_coordinates","objectPayloadOffset":31055003,"objectPayloadSizeBytes":1847541951,"recordOffset":31054960,"typeIndex":14,"valuesEndOffset":1878596954,"valuesOffset":31054995},{"itemCount":1,"kind":"graph","name":"edge_geometry_radii","objectPayloadOffset":1878596991,"objectPayloadSizeBytes":615847421,"recordOffset":1878596954,"typeIndex":14,"valuesEndOffset":2494444412,"valuesOffset":1878596983},{"itemCount":1,"kind":"graph","name":"edge_geometry_coordinates_atlas","objectPayloadOffset":2494444461,"objectPayloadSizeBytes":1847541951,"recordOffset":2494444412,"typeIndex":14,"valuesEndOffset":4341986412,"valuesOffset":2494444453},{"itemCount":1,"kind":"graph","name":"edge_geometry_radii_atlas","objectPayloadOffset":4341986455,"objectPayloadSizeBytes":615847421,"recordOffset":4341986412,"typeIndex":14,"valuesEndOffset":4957833876,"valuesOffset":4341986447},{"itemCount":1,"kind":"graph","name":"edge_geometry_annotation","objectPayloadOffset":4957833918,"objectPayloadSizeBytes":615847421,"recordOffset":4957833876,"typeIndex":14,"valuesEndOffset":5573681339,"valuesOffset":4957833910},{"itemCount":1,"kind":"graph","name":"edge_geometry_distance_to_surface","objectPayloadOffset":5573681390,"objectPayloadSizeBytes":615847421,"recordOffset":5573681339,"typeIndex":14,"valuesEndOffset":6189528811,"valuesOffset":5573681382},{"itemCount":1,"kind":"graph","name":"edge_geometry_coordinates_mri","objectPayloadOffset":6189528858,"objectPayloadSizeBytes":1847541951,"recordOffset":6189528811,"typeIndex":14,"valuesEndOffset":8037070809,"valuesOffset":6189528850},{"itemCount":1,"kind":"graph","name":"length_coordinates","objectPayloadOffset":8037070845,"objectPayloadSizeBytes":615847421,"recordOffset":8037070809,"typeIndex":14,"valuesEndOffset":8652918266,"valuesOffset":8037070837},{"itemCount":1,"kind":"graph","name":"length_coordinates_mri","objectPayloadOffset":8652918306,"objectPayloadSizeBytes":615847421,"recordOffset":8652918266,"typeIndex":14,"valuesEndOffset":9268765727,"valuesOffset":8652918298},{"itemCount":1,"kind":"graph","name":"length_coordinates_atlas","objectPayloadOffset":9268765769,"objectPayloadSizeBytes":615847421,"recordOffset":9268765727,"typeIndex":14,"valuesEndOffset":9884613190,"valuesOffset":9268765761},{"itemCount":1,"kind":"graph","name":"edge_geometry_length_coordinates","objectPayloadOffset":9884613240,"objectPayloadSizeBytes":615847421,"recordOffset":9884613190,"typeIndex":14,"valuesEndOffset":10500460661,"valuesOffset":9884613232},{"itemCount":1,"kind":"graph","name":"edge_geometry_length_coordinates_mri","objectPayloadOffset":10500460715,"objectPayloadSizeBytes":615847421,"recordOffset":10500460661,"typeIndex":14,"valuesEndOffset":11116308136,"valuesOffset":10500460707},{"itemCount":1,"kind":"graph","name":"edge_geometry_length_coordinates_atlas","objectPayloadOffset":11116308192,"objectPayloadSizeBytes":615847421,"recordOffset":11116308136,"typeIndex":14,"valuesEndOffset":11732155613,"valuesOffset":11116308184},{"itemCount":2231019,"kind":"vertex","name":"coordinates","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11732155613,"typeIndex":11,"valuesEndOffset":11803548242,"valuesOffset":11732155634},{"itemCount":2231019,"kind":"vertex","name":"radii","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11803548242,"typeIndex":4,"valuesEndOffset":11821396409,"valuesOffset":11803548257},{"itemCount":2231019,"kind":"vertex","name":"coordinates_atlas","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11821396409,"typeIndex":11,"valuesEndOffset":11892789044,"valuesOffset":11821396436},{"itemCount":2231019,"kind":"vertex","name":"radii_atlas","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11892789044,"typeIndex":4,"valuesEndOffset":11910637217,"valuesOffset":11892789065},{"itemCount":2231019,"kind":"vertex","name":"annotation","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11910637217,"typeIndex":3,"valuesEndOffset":11928485389,"valuesOffset":11910637237},{"itemCount":2231019,"kind":"vertex","name":"distance_to_surface","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11928485389,"typeIndex":4,"valuesEndOffset":11946333570,"valuesOffset":11928485418},{"itemCount":2231019,"kind":"vertex","name":"coordinates_mri","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11946333570,"typeIndex":11,"valuesEndOffset":12017726203,"valuesOffset":11946333595},{"itemCount":2231019,"kind":"vertex","name":"former_degree","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12017726203,"typeIndex":3,"valuesEndOffset":12035574378,"valuesOffset":12017726226},{"itemCount":2231019,"kind":"vertex","name":"tip_cell_prediction","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12035574378,"typeIndex":3,"valuesEndOffset":12053422559,"valuesOffset":12035574407},{"itemCount":2231019,"kind":"vertex","name":"tip_cell_score","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12053422559,"typeIndex":4,"valuesEndOffset":12071270735,"valuesOffset":12053422583},{"itemCount":3301619,"kind":"edge","name":"length","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12071270735,"typeIndex":4,"valuesEndOffset":12097683703,"valuesOffset":12071270751},{"itemCount":3301619,"kind":"edge","name":"radii","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12097683703,"typeIndex":4,"valuesEndOffset":12124096670,"valuesOffset":12097683718},{"itemCount":3301619,"kind":"edge","name":"edge_geometry_indices","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12124096670,"typeIndex":10,"valuesEndOffset":12203335557,"valuesOffset":12124096701},{"itemCount":3301619,"kind":"edge","name":"radii_atlas","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12203335557,"typeIndex":4,"valuesEndOffset":12229748530,"valuesOffset":12203335578},{"itemCount":3301619,"kind":"edge","name":"distance_to_surface","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12229748530,"typeIndex":4,"valuesEndOffset":12256161511,"valuesOffset":12229748559},{"itemCount":3301619,"kind":"edge","name":"annotation","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12256161511,"typeIndex":3,"valuesEndOffset":12282574483,"valuesOffset":12256161531}],"vertexCount":2231019},"hemisphereLaterality":{"genericPipelineEvidenceSubstituted":false,"observedMatchingPropertyCount":0,"reason":"The exact pinned graph has no graph-level edge_geometry_hemisphere property. Its bilateral annotation cannot distinguish the two ML signs, and generic pipeline defaults are not specimen evidence.","reasonCode":"SOURCE_HEMISPHERE_PROPERTY_MISSING","requiredProperty":{"cardinality":1,"kind":"graph","name":"edge_geometry_hemisphere","typeIndex":14},"status":"unavailable"},"predeclaredAcceptanceCriteria":{"criteriaAreRuntimeConfigurable":false,"expectedOrientation":"AP_KEEP_DV_KEEP_ML_KEEP","minimumAPDVWinnerMargin":"1/5","minimumAnnotationAncestorAgreement":"4/5","minimumAnnotationEvaluableFraction":"7/10","minimumAnnotationEvaluablePoints":50000,"minimumExpectedGlobalLead":"1/100","minimumHemisphereAgreement":"99/100","minimumHemisphereDiscriminatingFraction":"19/20","minimumHemisphereWinnerMargin":"49/50","requireWholeBrainCoverageOrExplicitQualifiedMirroring":true,"requiredSourceHemisphereProperty":{"cardinality":1,"kind":"graph","name":"edge_geometry_hemisphere","typeIndex":14}},"retainedSelection":{"assetSha256":"fb2344e845e604be3424bd63f4222d273eafba34db0df2eaff32f4400fa9afec","candidateEdges":16156,"exactBundledAssetMatch":true,"outputPoints":71313,"outputRuns":11818,"outputSegments":59495,"qualifyingInBoundsPoints":78048,"sourceEdgesWithRuns":10907},"schemaVersion":1,"scopeLimitations":["This report qualifies only axis permutation, AP/DV signs, and ML laterality for the exact pinned files when every check passes.","It does not bound atlas-registration error, tissue distortion, biological variation, or omitted vessels.","It does not make the fixed-tissue reference subject-specific or validate it for surgical navigation.","It does not establish artery/vein identity or clearance when no loaded-geometry conflict is found."],"source":{"filename":"606_graph_2024-12-03.gt","sha256":"c2568cfbecd3f3eb720519be9d042f0cb41606741b8dd2f018bad1c54d36ef85","sizeBytes":12282574483},"sourceCoverage":{"atlasMidlineIndex":228,"bilateralMirroringQualified":false,"bilateralMirroringReason":"Neither the exact graph metadata nor the dataset record defines a reviewed mirror operation that reconstructs a whole-brain major-vessel reference.","graphMetadataAssessment":{"conclusion":"The graph stores raw, atlas, and MRI coordinates plus a raw image shape, but no source-orientation label, alignment transform, resampling metadata, workflow commit, or specimen configuration that binds ML sign.","graphLevelPropertyNames":["shape","edge_geometry_type","edge_geometry_coordinates","edge_geometry_radii","edge_geometry_coordinates_atlas","edge_geometry_radii_atlas","edge_geometry_annotation","edge_geometry_distance_to_surface","edge_geometry_coordinates_mri","length_coordinates","length_coordinates_mri","length_coordinates_atlas","edge_geometry_length_coordinates","edge_geometry_length_coordinates_mri","edge_geometry_length_coordinates_atlas"],"propertiesBindingBiologicalLaterality":[],"propertiesBindingExactWorkflowCommit":[],"propertiesContainingSourceOrientationOrAlignmentTransform":[]},"numericalBothSidesDoNotProveWholeBrain":true,"primarySource":{"finding":"The official dataset description identifies the specimens as mouse brain hemispheres, not whole-brain vascular graphs.","url":"https://zenodo.org/records/18876865"},"reasonCode":"SOURCE_SPECIMEN_COVERAGE_IS_HEMISPHERE","retainedMajorVesselCoordinatesAtlas":{"axis2AtOrAboveMidlineCount":15969,"axis2BelowMidlineCount":55344,"axis2Maximum":"275.406550802","axis2Minimum":"14.709281147","pointCount":71313},"status":"unqualified-for-whole-brain-use","vertexCoordinatesAtlas":{"axis2AtOrAboveMidlineCount":358880,"axis2BelowMidlineCount":1872139,"maximumByClearMapAxis":["301.038440935","545.949368519","282.876755910"],"minimumByClearMapAxis":["6.633265227","72.521141143","13.791384656"],"pointCount":2231019}},"status":"rejected"} diff --git a/native/Brain3D/README.md b/native/Brain3D/README.md index 9199ad5..f3adb71 100644 --- a/native/Brain3D/README.md +++ b/native/Brain3D/README.md @@ -1,134 +1,38 @@ # Brain3D native macOS app -This Swift package is the native half of the Brain3D animal-research planner. SwiftUI owns the -single-view workspace and controls; SceneKit renders backend-validated 3D brain and probe geometry -plus display-only major-vessel payloads; a typed NDJSON subprocess boundary delegates scientific -state and analysis to Python. +The Swift package provides the Brain3D interface. SwiftUI owns the workspace and controls, +SceneKit renders 3D atlas and planning geometry, and the Python service provides atlas, +coordinate, persistence, and planning operations over typed NDJSON. -> **Animal research only — non-human and non-clinical.** This development app is not an -> installable production release or a qualified navigation device. +## Workspace -## Current workspace - -- Exactly `Dorsal / Coronal / Sagittal / Horizontal / 3D`, one selected mode at a time. -- Independent retained slice depths, with slider/buttons/wheel, pan, zoom, and compact - click-to-replace region labels. A region click never changes depth. -- Complete paged Allen ontology browsing/search with one selection shared across all five modes; - descendant-inclusive annotation overlays highlight reviewed voxels in all four 2D modes and a - reviewed selected-structure mesh highlights in 3D. An entry with neither voxels nor mesh stays - selected with zero 2D pixels and an explicit 3D no-geometry state. -- No focus mode, crosshair, 2×2 layout, or capillary display. -- Direct surface-insertion AP/ML planning from a source-pinned Pinpoint/Urchin profile: AP− is - posterior and ML− is animal-left; AP/ML anchors user-facing Shank 1 at its exact local - annotation-surface crossing, not at the array midpoint. -- Positive path depth from Shank 1's surface crossing to its distal target, one sagittal angle - (+ A→P / − P→A), and NP2013 layout. `Sagittal` makes Shank 1 most anterior; `90° CW` from - dorsal makes it animal-left-most and extends the other shanks toward animal right. 3D renders - each full 10 mm shaft, while slice/traversal analysis uses the implanted surface-to-tip path. -- VesSAP `BL6J-no1` nominal diameter-≥30 µm paths overlaid in all five views. The layer is one - cleared C57BL/6J reference, reduced at 50 µm for display, not subject-specific. -- No vessel-analysis capability. Geometry is display-only and analysis fails with - `VESSEL_ANALYSIS_UNAVAILABLE`. - -The primary selector contains exactly NP2 single shank `NP2003` and standard four shank -`NP2013`. `NP2004`/`NP2014` remain source-artifact aliases rather than extra UI choices. Both -source transcriptions remain independent-review pending; v4 has no per-plan geometry checkbox. -Quad Base, NP1, and the synthetic fixture remain archived definitions, not new-plan choices. - -## Surgery-plan PDF export - -The native app can export a prefilled animal-research planning packet for the current probe plan. -Choose `Dorsal`, `Coronal`, `Sagittal`, `Horizontal`, `3D`, or `All`; `All` emits the five -planning views in that order. AP/ML locates Shank 1's local atlas-surface crossing and path depth -ends at that shank's distal target; both are millimetres. The signed A↔P angle is degrees and -layout is sagittal or 90° clockwise from dorsal. Coronal -historical plates use `Bregma = Interaural − 3.80 mm`; sagittal matching uses `|ML|` while -preserving the implant's left/right sign. - -The fixed packet order is: - -1. two portrait-Letter pages rendered from the user-supplied Headplate protocol; -2. one selected planning page, or five pages for `All`; and -3. one matched landscape-Letter historical atlas page. - -The app reads the prepared three-page protocol PDF directly, prefills pages 1–2, and replaces its -page-3 sketch placeholder with the matched page from the consolidated 132-page -`MBSC_Figs_with_Layers.pdf`. Configure both PDF locations once in **Brain3D → Settings**; later -exports reuse those locations until they are replaced there. PDFKit/Core Graphics read the -sources directly, merge the packet, and flatten an audit stamp onto every page. The original -source files are never rewritten. Word, Illustrator, and Apple Events automation are not used. - -V4 export freezes and repeatedly revalidates the source-pinned bregma profile, AP/ML, annotation -surface, depth, signed angle, layout, matching probe, atlas, vessel asset, project revision, and -saved/dirty state. It does not require a separate target projection or subject calibration. A -state change during rendering or assembly aborts the export instead of mixing revisions. - -The vessel overlay is the one-specimen VesSAP `BL6J-no1` ex-vivo reference, nominal diameter -at least 30 µm. It is not the operative animal, capillaries are omitted, and neither a displayed -path nor zero visible intersections establishes subject-specific location, vessel absence, -clearance, trajectory suitability, or safety. The packet is for non-human animal research only, -not clinical use or qualified navigation. - -The protocol and Mouse Brain atlas sources are supplied by the user and are not redistributed -with Brain3D. See the full [surgery-plan export contract](../../docs/SURGERY_PLAN_EXPORT.md), -including prerequisites, atlas matching, immutable provenance, and source-rights boundaries. - -The older P60_606 vessel source remains archived because its hemisphere/laterality and whole-brain -coverage are unqualified; it is not mirrored or mixed into VesSAP. The visible VesSAP layer also -cannot establish subject-specific clearance, absence, suitability, or safety; see -[its evidence record](../../docs/VESSAP_MAJOR_VESSELS.md). -Population density and subject-image registration remain archived in Python and absent from the -primary UI. Only `allen_mouse_25um` v1.2 is accepted in this 25 µm testing phase. +- Dorsal, coronal, sagittal, horizontal, and 3D modes. +- Independent slice depths with pan, zoom, wheel, and region picking. +- Shared Allen ontology selection across 2D and 3D. +- Direct AP/ML surface planning for NP2003 and NP2013. +- Optional external VesSAP overlay when its data package is installed. +- Surgery-plan PDF export using documents selected in Settings. ## Development -```sh +```bash swift test --package-path native/Brain3D --no-parallel native/Brain3D/Scripts/build-app.sh open native/Brain3D/build/Brain3D.app ``` -Backend discovery is deterministic and fail-closed: - -1. `BRAIN3D_BRIDGE_EXECUTABLE` plus optional JSON-array `BRAIN3D_BRIDGE_ARGUMENTS` and - `BRAIN3D_BRIDGE_WORKING_DIRECTORY` override discovery. -2. A regular executable at `Contents/Resources/Bridge/brain3d-bridge` is used from a standalone - app, provided its resolved path remains inside that app's Resources directory. -3. Development builds walk upward from the current directory, executable, and source package for - both `.venv/bin/python` and `src/mouse_brain_planner/bridge/server.py`. -4. If none of those routes resolves, the UI reports **Backend not configured** and does not - substitute demo anatomy or geometry. +Backend discovery checks explicit `BRAIN3D_BRIDGE_*` settings, a bridge bundled inside a +standalone application, and the repository Python environment for development builds. -The development app launches Python with `-u -m mouse_brain_planner.bridge.server` and sets -`PYTHONPATH` to the repository `src` directory. UI requests are asynchronous and strict decoders -reject source, schema, revision, hash, coordinate-frame, and size mismatches. +## Standalone build -## Distribution - -`Scripts/build-app.sh` remains the fast development bundle and depends on the checkout. For an -Apple-Silicon-only standalone build, run from the repository root: - -```sh +```bash native/Brain3D/Scripts/build-release-app.sh ``` -This uses exact uv-managed CPython 3.12.12 and PyInstaller 6.21.0 from the lockfile. It writes -`dist/Brain3D.app` and `dist/Brain3D-macOS-arm64.zip` below this package unless `OUTPUT_DIR` is set. -The bundled NDJSON executable is `Contents/Resources/Bridge/brain3d-bridge`; no Python installation, -checkout, `.venv`, or inherited `PYTHONPATH` is used at runtime. - -The builder verifies all Swift, Python, extension-module, and dynamic-library Mach-O files are -arm64-only and have deployment targets no newer than macOS 14.0. It rejects host-only absolute -dependencies/runpaths, escaping symlinks, development Python modules, extra archive roots, and a -failed code signature. It then extracts the zip into an isolated directory, sandbox-denies the -source checkout, checks bridge `hello`, launches the real Swift executable, and confirms Swift -starts the exact bridge inside the extracted app without an immediate crash. - -A discovered `Developer ID Application` identity enables hardened-runtime signing; otherwise the -builder ad-hoc signs the app. Ad-hoc builds are not notarized. A public release still needs -notarization and clean-machine macOS 14 qualification by the release operator. Production SBOM, -dependency license copies, and build provenance are embedded in `Contents/Resources/Release`. +The release script builds the Swift executable and frozen Python bridge, assembles the application +and zip archive, verifies architecture and signatures, and runs an isolated launch smoke test. -Downloaded Allen atlas data and the user-selected surgery protocol/atlas PDFs are intentionally -outside the app. The bundled VesSAP derivative remains CC BY-NC 4.0, so public distribution must -remain noncommercial and preserve its attribution, license, manifest, and display-only limits. +Atlas packages, vascular data, PDF inputs, and user projects remain outside the application +bundle. See [Packaging](../../PACKAGING.md) and +[Surgery-plan export](../../docs/SURGERY_PLAN_EXPORT.md). diff --git a/scripts/benchmark_major_vessel_analysis.py b/scripts/benchmark_major_vessel_analysis.py deleted file mode 100644 index 8368417..0000000 --- a/scripts/benchmark_major_vessel_analysis.py +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/env python3 -"""Benchmark V3 analysis against the verified bundled LAMBADA asset. - -The script performs no network access. It reports one asset-load measurement, -one cold analysis, and bounded repeated warm analyses as machine-readable JSON. -Python/module startup time is intentionally outside the reported measurements. -""" - -from __future__ import annotations - -import argparse -import json -import math -import platform -import subprocess -from statistics import median -from time import perf_counter - -import numpy as np - -from mouse_brain_planner.analysis.vessel_clearance import ( - ProbeShankASR, - RadiusBearingVesselRuns, - analyze_probe_vessel_clearance, -) -from mouse_brain_planner.domain.vessel_clearance_models import ( - MajorVesselSourceProvenance, - ProbeVesselAnalysis, - VesselRiskProfile, -) -from mouse_brain_planner.vasculature.lambada_major_vessels import ( - ASSET_SHA256, - EXPECTED_RUN_COUNT, - EXPECTED_RUN_POINT_COUNT, - EXPECTED_SEGMENT_COUNT, - EXTRACTION_ALGORITHM_VERSION, - MINIMUM_DIAMETER_UM, - SOURCE_ARCHIVE_SHA256, - SOURCE_LICENSE, - SOURCE_PAPER_DOI, - SOURCE_RECORD_DOI, - SOURCE_RECORD_URL, - LambadaMajorVesselGraph, - load_lambada_major_vessels, -) - -MINIMUM_ITERATIONS = 5 -MAXIMUM_ITERATIONS = 100 -DEFAULT_ITERATIONS = 20 -MAXIMUM_CONFLICTS = 10_000 - - -def _percentile(values: list[float], fraction: float) -> float: - """Return a linearly interpolated percentile for one nonempty sample.""" - - ordered = sorted(values) - position = (len(ordered) - 1) * fraction - lower = math.floor(position) - upper = math.ceil(position) - if lower == upper: - return ordered[lower] - weight = position - lower - return ordered[lower] * (1.0 - weight) + ordered[upper] * weight - - -def _darwin_sysctl(name: str) -> str | None: - if platform.system() != "Darwin": - return None - try: - completed = subprocess.run( - ["sysctl", "-n", name], - check=False, - capture_output=True, - text=True, - timeout=2, - ) - except (OSError, subprocess.SubprocessError): - return None - value = completed.stdout.strip() - return value if completed.returncode == 0 and value else None - - -def _machine_payload() -> dict[str, str]: - os_version = platform.mac_ver()[0] if platform.system() == "Darwin" else platform.release() - return { - "system": platform.system(), - "osVersion": os_version, - "architecture": platform.machine(), - "hardwareModel": _darwin_sysctl("hw.model") or "unknown", - "processor": ( - _darwin_sysctl("machdep.cpu.brand_string") or platform.processor() or "unknown" - ), - } - - -def _analysis_geometry(graph: LambadaMajorVesselGraph) -> RadiusBearingVesselRuns: - return RadiusBearingVesselRuns( - points_asr_um=np.asarray(graph.points_asr_um, dtype=np.float64), - radii_um=np.asarray(graph.radii_um, dtype=np.float64), - run_offsets=graph.run_offsets, - source_edge_indices=np.asarray(graph.source_edge_indices, dtype=np.int64), - ) - - -def _source_provenance(graph: LambadaMajorVesselGraph) -> MajorVesselSourceProvenance: - value = graph.provenance - return MajorVesselSourceProvenance( - source_id="lambada-p60-606-major-vessels-v1", - source_doi=SOURCE_RECORD_DOI, - source_record_url=SOURCE_RECORD_URL, - source_paper_doi=SOURCE_PAPER_DOI, - source_version="P60_606 / 606_graph_2024-12-03.gt", - source_license=SOURCE_LICENSE, - dataset_title=value.dataset_title, - authors=value.authors, - specimen_id=value.specimen_id, - source_archive_digest=f"sha256:{SOURCE_ARCHIVE_SHA256}", - derived_asset_sha256=value.asset_sha256, - extraction_algorithm_version=EXTRACTION_ALGORITHM_VERSION, - minimum_included_diameter_um=MINIMUM_DIAMETER_UM, - ) - - -def _benchmark_inputs() -> tuple[ProbeShankASR, VesselRiskProfile]: - shank = ProbeShankASR( - shank_id="benchmark-shank", - entry_asr_um=np.asarray((6_600.0, 0.0, 5_700.0), dtype=np.float64), - tip_asr_um=np.asarray((6_600.0, 6_000.0, 5_700.0), dtype=np.float64), - envelope_radius_um=35.0, - ) - profile = VesselRiskProfile( - profile_id="benchmark-profile-v1", - minimum_vessel_diameter_um=MINIMUM_DIAMETER_UM, - required_margin_um=100.0, - registration_uncertainty_um=100.0, - source_or_lab_policy="Deterministic offline performance benchmark only.", - confirmed_by_user=True, - reference_only_coverage_acknowledged=True, - ) - return shank, profile - - -def _run_analysis( - *, - shank: ProbeShankASR, - vessels: RadiusBearingVesselRuns, - profile: VesselRiskProfile, - provenance: MajorVesselSourceProvenance, -) -> ProbeVesselAnalysis: - return analyze_probe_vessel_clearance( - shanks=(shank,), - vessels=vessels, - risk_profile=profile, - provenance=provenance, - maximum_conflicts=MAXIMUM_CONFLICTS, - ) - - -def _result_signature(result: ProbeVesselAnalysis) -> tuple[object, ...]: - return ( - result.algorithm_version, - result.input_sha256, - result.result_status, - result.candidate_segment_count, - result.measured_segment_count, - len(result.conflicts), - result.conflicts_truncated, - ) - - -def main() -> int: - parser = argparse.ArgumentParser( - description="Benchmark bundled major-vessel analysis without network access." - ) - parser.add_argument("--iterations", type=int, default=DEFAULT_ITERATIONS) - args = parser.parse_args() - if not MINIMUM_ITERATIONS <= args.iterations <= MAXIMUM_ITERATIONS: - parser.error(f"--iterations must be in [{MINIMUM_ITERATIONS}, {MAXIMUM_ITERATIONS}]") - - loaded_at = perf_counter() - graph = load_lambada_major_vessels() - vessels = _analysis_geometry(graph) - load_ms = (perf_counter() - loaded_at) * 1_000.0 - segment_count = int(np.sum(np.diff(graph.run_offsets) - 1)) - if ( - graph.points_asr_um.shape[0] != EXPECTED_RUN_POINT_COUNT - or graph.run_offsets.size - 1 != EXPECTED_RUN_COUNT - or segment_count != EXPECTED_SEGMENT_COUNT - or graph.provenance.asset_sha256 != ASSET_SHA256 - ): - raise RuntimeError("bundled benchmark geometry does not match its reviewed constants") - - shank, profile = _benchmark_inputs() - provenance = _source_provenance(graph) - cold_at = perf_counter() - cold_result = _run_analysis( - shank=shank, - vessels=vessels, - profile=profile, - provenance=provenance, - ) - cold_ms = (perf_counter() - cold_at) * 1_000.0 - expected_signature = _result_signature(cold_result) - - warm_ms: list[float] = [] - for _iteration in range(args.iterations): - warm_at = perf_counter() - warm_result = _run_analysis( - shank=shank, - vessels=vessels, - profile=profile, - provenance=provenance, - ) - warm_ms.append((perf_counter() - warm_at) * 1_000.0) - if _result_signature(warm_result) != expected_signature: - raise RuntimeError("warm benchmark result changed across identical inputs") - - if cold_result.candidate_segment_count != cold_result.measured_segment_count: - raise RuntimeError("exact measured count differs from the candidate count") - if cold_result.conflicts_truncated: - raise RuntimeError("benchmark conflict output was truncated") - - print( - json.dumps( - { - "benchmark": "bundled-lambada-major-vessel-analysis-v1", - "machine": _machine_payload(), - "python": { - "implementation": platform.python_implementation(), - "version": platform.python_version(), - }, - "asset": { - "sha256": graph.provenance.asset_sha256, - "points": int(graph.points_asr_um.shape[0]), - "runs": int(graph.run_offsets.size - 1), - "segments": segment_count, - }, - "analysisInput": { - "entryASRMicrometres": shank.entry_asr_um.tolist(), - "tipASRMicrometres": shank.tip_asr_um.tolist(), - "probeEnvelopeRadiusMicrometres": shank.envelope_radius_um, - "requiredMarginMicrometres": profile.required_margin_um, - "registrationUncertaintyMicrometres": (profile.registration_uncertainty_um), - }, - "analysisResult": { - "algorithmVersion": cold_result.algorithm_version, - "status": cold_result.result_status.value, - "candidateSegments": cold_result.candidate_segment_count, - "measuredSegments": cold_result.measured_segment_count, - "conflicts": len(cold_result.conflicts), - }, - "timingMilliseconds": { - "load": round(load_ms, 3), - "cold": round(cold_ms, 3), - "warm": { - "iterations": args.iterations, - "median": round(median(warm_ms), 3), - "p95": round(_percentile(warm_ms, 0.95), 3), - }, - }, - }, - indent=2, - sort_keys=True, - ) - ) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/extract_lambada_major_vessels.py b/scripts/extract_lambada_major_vessels.py deleted file mode 100644 index 6ddc2ec..0000000 --- a/scripts/extract_lambada_major_vessels.py +++ /dev/null @@ -1,94 +0,0 @@ -#!/usr/bin/env python3 -"""Build the pinned compact LAMBADA P60_606 major-vessel asset.""" - -from __future__ import annotations - -import argparse -import json -import tempfile -from dataclasses import asdict -from pathlib import Path - -from mouse_brain_planner.vasculature.lambada_major_vessels import ( - ASSET_FILENAME, - MANIFEST_FILENAME, - build_asset_manifest, - bundled_asset_paths, - extract_pinned_lambada_major_vessels, - write_asset_manifest, - write_deterministic_npz, -) - - -def _arguments() -> argparse.Namespace: - bundled_asset, bundled_manifest = bundled_asset_paths() - parser = argparse.ArgumentParser( - description=( - "Verify the exact 12 GB P60_606 graph and derive the reviewed >=15 um radius " - "in-bounds polyline runs." - ) - ) - parser.add_argument("source_graph", type=Path, help="extracted 606_graph_2024-12-03.gt") - parser.add_argument( - "--output", - type=Path, - default=bundled_asset, - help=f"asset destination (default: {bundled_asset})", - ) - parser.add_argument( - "--manifest", - type=Path, - default=bundled_manifest, - help=f"manifest destination (default: {bundled_manifest})", - ) - return parser.parse_args() - - -def main() -> int: - """Run the fail-closed extraction and byte-reproducibility check.""" - - arguments = _arguments() - source = arguments.source_graph.expanduser() - output = arguments.output.expanduser() - manifest_path = arguments.manifest.expanduser() - if output.name != ASSET_FILENAME: - raise SystemExit(f"--output filename must be {ASSET_FILENAME}") - if manifest_path.name != MANIFEST_FILENAME: - raise SystemExit(f"--manifest filename must be {MANIFEST_FILENAME}") - if output.parent != manifest_path.parent: - raise SystemExit("the asset and manifest must be adjacent") - - data, report = extract_pinned_lambada_major_vessels(source) - asset_sha256, asset_size_bytes = write_deterministic_npz(output, data) - with tempfile.TemporaryDirectory(prefix="lambada-major-vessels-") as temporary_directory: - reproducibility_path = Path(temporary_directory) / ASSET_FILENAME - repeated_sha256, repeated_size = write_deterministic_npz(reproducibility_path, data) - if (repeated_sha256, repeated_size) != (asset_sha256, asset_size_bytes): - raise SystemExit("deterministic asset reproduction failed") - - manifest = build_asset_manifest( - asset_sha256=asset_sha256, - asset_size_bytes=asset_size_bytes, - data=data, - report=report, - ) - write_asset_manifest(manifest_path, manifest) - print( - json.dumps( - { - "asset": str(output.resolve()), - "asset_sha256": asset_sha256, - "asset_size_bytes": asset_size_bytes, - "manifest": str(manifest_path.resolve()), - "report": asdict(report), - "reproducible": True, - }, - indent=2, - sort_keys=True, - ) - ) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/scripts/qualify_lambada_coordinates.py b/scripts/qualify_lambada_coordinates.py deleted file mode 100644 index fad5e05..0000000 --- a/scripts/qualify_lambada_coordinates.py +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env python3 -"""Generate a fail-closed coordinate attestation for LAMBADA P60_606.""" - -from __future__ import annotations - -import argparse -import hashlib -import json -from pathlib import Path - -from mouse_brain_planner.vasculature.lambada_coordinate_qualification import ( - QUALIFICATION_ALGORITHM_VERSION, - QUALIFICATION_SCHEMA_VERSION, - LambadaCoordinateQualificationError, - canonical_report_bytes, - qualify_pinned_lambada_coordinates, - write_canonical_report, -) - - -def _arguments() -> argparse.Namespace: - parser = argparse.ArgumentParser( - description=( - "Qualify AP/DV signs and ML laterality for the exact pinned LAMBADA " - "P60_606 graph against the exact Allen 25 um v1.2 atlas." - ) - ) - parser.add_argument("source_graph", type=Path, help="extracted 606_graph_2024-12-03.gt") - parser.add_argument( - "atlas_directory", - type=Path, - help="exact BrainGlobe allen_mouse_25um_v1.2 package directory", - ) - parser.add_argument( - "--output", - type=Path, - required=True, - help="canonical JSON report destination", - ) - return parser.parse_args() - - -def main() -> int: - arguments = _arguments() - try: - report = qualify_pinned_lambada_coordinates( - arguments.source_graph.expanduser(), - arguments.atlas_directory.expanduser(), - ) - except LambadaCoordinateQualificationError as error: - report = { - "schemaVersion": QUALIFICATION_SCHEMA_VERSION, - "algorithmVersion": QUALIFICATION_ALGORITHM_VERSION, - "status": "rejected", - "qualificationError": str(error), - } - report_sha256 = write_canonical_report(arguments.output.expanduser(), report) - payload = canonical_report_bytes(report) - if hashlib.sha256(payload).hexdigest() != report_sha256: - raise AssertionError("canonical report digest changed after writing") - print( - json.dumps( - { - "output": str(arguments.output.expanduser().resolve()), - "reportSha256": report_sha256, - "status": report["status"], - }, - indent=2, - sort_keys=True, - ) - ) - return 0 if report["status"] == "qualified" else 2 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/src/mouse_brain_planner/analysis/vessel_clearance.py b/src/mouse_brain_planner/analysis/vessel_clearance.py index 568fcab..910c3d9 100644 --- a/src/mouse_brain_planner/analysis/vessel_clearance.py +++ b/src/mouse_brain_planner/analysis/vessel_clearance.py @@ -163,7 +163,7 @@ def analyze_probe_vessel_clearance( abs_tol=1e-9, ): raise VesselClearanceInputError( - "risk-profile diameter must equal the pointwise threshold used by the bundled asset" + "risk-profile diameter must equal the pointwise threshold used by the configured asset" ) segments = _segments(vessels) diff --git a/src/mouse_brain_planner/assets/vasculature/VESSAP_DATA_LICENSE.txt b/src/mouse_brain_planner/assets/vasculature/VESSAP_DATA_LICENSE.txt deleted file mode 100644 index c657cab..0000000 --- a/src/mouse_brain_planner/assets/vasculature/VESSAP_DATA_LICENSE.txt +++ /dev/null @@ -1,407 +0,0 @@ -Attribution-NonCommercial 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-NonCommercial 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-NonCommercial 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - d. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - e. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - f. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - g. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - h. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - i. NonCommercial means not primarily intended for or directed towards - commercial advantage or monetary compensation. For purposes of - this Public License, the exchange of the Licensed Material for - other material subject to Copyright and Similar Rights by digital - file-sharing or similar means is NonCommercial provided there is - no payment of monetary compensation in connection with the - exchange. - - j. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - k. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - l. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part, for NonCommercial purposes only; and - - b. produce, reproduce, and Share Adapted Material for - NonCommercial purposes only. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties, including when - the Licensed Material is used other than for NonCommercial - purposes. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - 4. If You Share Adapted Material You produce, the Adapter's - License You apply must not prevent recipients of the Adapted - Material from complying with this Public License. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database for NonCommercial purposes - only; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material; and - - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - -======================================================================= - -Creative Commons is not a party to its public -licenses. Notwithstanding, Creative Commons may elect to apply one of -its public licenses to material it publishes and in those instances -will be considered the “Licensor.” The text of the Creative Commons -public licenses is dedicated to the public domain under the CC0 Public -Domain Dedication. Except for the limited purpose of indicating that -material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the -public licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/src/mouse_brain_planner/assets/vasculature/lambada_p60_606_coordinate_qualification_rejected_v1.json b/src/mouse_brain_planner/assets/vasculature/lambada_p60_606_coordinate_qualification_rejected_v1.json deleted file mode 100644 index dc46559..0000000 --- a/src/mouse_brain_planner/assets/vasculature/lambada_p60_606_coordinate_qualification_rejected_v1.json +++ /dev/null @@ -1 +0,0 @@ -{"algorithmVersion":"lambada-p60-606-coordinate-signs-v1","annotationOrientation":{"method":"For each of all eight AP/DV/ML sign combinations, truncate retained continuous voxels exactly as ClearMap label_points does, sample the pinned Allen annotation, and count the source annotation when it is an ancestor of the sampled Allen structure. AP/DV are judged separately from bilateral ML symmetry.","scores":[{"ancestorAgreement":{"decimal":"0.866910610","denominator":52198,"numerator":45251},"evaluableFraction":{"decimal":"0.731956305","denominator":71313,"numerator":52198},"evaluablePointCount":52198,"exactLeafAgreement":{"decimal":"0.182439940","denominator":52198,"numerator":9523},"flipAP":false,"flipDV":false,"flipML":false,"label":"AP_KEEP_DV_KEEP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.846928089","denominator":51564,"numerator":43671},"evaluableFraction":{"decimal":"0.723065921","denominator":71313,"numerator":51564},"evaluablePointCount":51564,"exactLeafAgreement":{"decimal":"0.155088822","denominator":51564,"numerator":7997},"flipAP":false,"flipDV":false,"flipML":true,"label":"AP_KEEP_DV_KEEP_ML_FLIP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.247666836","denominator":41253,"numerator":10217},"evaluableFraction":{"decimal":"0.578477977","denominator":71313,"numerator":41253},"evaluablePointCount":41253,"exactLeafAgreement":{"decimal":"0.027028337","denominator":41253,"numerator":1115},"flipAP":false,"flipDV":true,"flipML":false,"label":"AP_KEEP_DV_FLIP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.245175056","denominator":41244,"numerator":10112},"evaluableFraction":{"decimal":"0.578351773","denominator":71313,"numerator":41244},"evaluablePointCount":41244,"exactLeafAgreement":{"decimal":"0.020851518","denominator":41244,"numerator":860},"flipAP":false,"flipDV":true,"flipML":true,"label":"AP_KEEP_DV_FLIP_ML_FLIP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.179921852","denominator":33270,"numerator":5986},"evaluableFraction":{"decimal":"0.466534853","denominator":71313,"numerator":33270},"evaluablePointCount":33270,"exactLeafAgreement":{"decimal":"0.006822964","denominator":33270,"numerator":227},"flipAP":true,"flipDV":false,"flipML":false,"label":"AP_FLIP_DV_KEEP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.177183301","denominator":33344,"numerator":5908},"evaluableFraction":{"decimal":"0.467572532","denominator":71313,"numerator":33344},"evaluablePointCount":33344,"exactLeafAgreement":{"decimal":"0.006208013","denominator":33344,"numerator":207},"flipAP":true,"flipDV":false,"flipML":true,"label":"AP_FLIP_DV_KEEP_ML_FLIP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.152792247","denominator":31677,"numerator":4840},"evaluableFraction":{"decimal":"0.444196710","denominator":71313,"numerator":31677},"evaluablePointCount":31677,"exactLeafAgreement":{"decimal":"0.003882943","denominator":31677,"numerator":123},"flipAP":true,"flipDV":true,"flipML":false,"label":"AP_FLIP_DV_FLIP_ML_KEEP","selectedPointCount":71313},{"ancestorAgreement":{"decimal":"0.153758289","denominator":31517,"numerator":4846},"evaluableFraction":{"decimal":"0.441953080","denominator":71313,"numerator":31517},"evaluablePointCount":31517,"exactLeafAgreement":{"decimal":"0.003521909","denominator":31517,"numerator":111},"flipAP":true,"flipDV":true,"flipML":true,"label":"AP_FLIP_DV_FLIP_ML_FLIP","selectedPointCount":71313}]},"atlas":{"annotation":{"filename":"annotation.tiff","sha256":"52775c6086ae6aa7d9df2ad2c9e5ab9ce36effa09f5355c7c45efeada6647e06","sizeBytes":308270826},"atlasKey":"allen_mouse_25um","atlasPackageVersion":"1.2","metadata":{"filename":"metadata.json","sha256":"119132150055826484fa75a4dc17c476d02251c0db8b4d0b7b28f6b8c4b8ae60","sizeBytes":423},"orientation":"asr","resolutionUm":[25,25,25],"shapeVoxels":[528,320,456],"structures":{"filename":"structures.json","sha256":"7157e6130b354f6bebc21aa79f882274cbbe253ac916d97123805af3b4ff8abd","sizeBytes":138106}},"checks":[{"id":"annotation-evaluable-point-count","observed":"52198","passed":true,"required":">=50000"},{"id":"annotation-evaluable-fraction","observed":"52198/71313","passed":true,"required":">=7/10"},{"id":"annotation-ancestor-agreement","observed":"45251/52198","passed":true,"required":">=4/5"},{"id":"expected-orientation-is-global-winner","observed":"AP_KEEP_DV_KEEP_ML_KEEP","passed":true,"required":"AP_KEEP_DV_KEEP_ML_KEEP"},{"id":"expected-orientation-global-lead","observed":"8963951/448589612","passed":true,"required":">=1/100"},{"id":"ap-dv-sign-margin","observed":"1333432537/2153324094","passed":true,"required":">=1/5"},{"id":"source-hemisphere-property-present","observed":"0 matching properties","passed":false,"required":"1 graph:edge_geometry_hemisphere typeIndex=14"},{"id":"source-coverage-whole-brain","observed":"official source declares brain-hemisphere specimens","passed":false,"required":"whole-brain source or explicitly reviewed bilateral reconstruction"}],"clearMapImplementationEvidence":{"annotationAndHemispherePropertyCreation":"https://github.com/ClearAnatomics/ClearMap/blob/71444a5c7456901f15e8d0ceb06fab72b74161df/ClearMap/processors/tube_map.py#L660-L682","commit":"71444a5c7456901f15e8d0ceb06fab72b74161df","evidenceScope":"Context only. Generic repository code does not bind a workflow commit, configuration, or transform to the exact P60_606 artifact.","exactArtifactSpecimenConfiguration":null,"exactArtifactWorkflowCommit":null,"graphLevelEdgeGeometryStorage":"https://github.com/ClearAnatomics/ClearMap/blob/71444a5c7456901f15e8d0ceb06fab72b74161df/ClearMap/Analysis/Graphs/GraphGt.py#L869-L910","hemisphereLabelSemantics":"https://github.com/ClearAnatomics/ClearMap/blob/71444a5c7456901f15e8d0ceb06fab72b74161df/ClearMap/Analysis/Statistics/data_frame_operations.py#L53-L59","repository":"https://github.com/ClearAnatomics/ClearMap"},"decision":{"apDvWinnerMargin":"1333432537/2153324094","bestAPDVAlternative":"AP_KEEP_DV_FLIP_ML_KEEP","blockingReasons":["SOURCE_HEMISPHERE_PROPERTY_MISSING","SOURCE_SPECIMEN_COVERAGE_IS_HEMISPHERE"],"expectedGlobalLead":"8963951/448589612","globalRunnerUp":"AP_KEEP_DV_KEEP_ML_FLIP","globalWinner":"AP_KEEP_DV_KEEP_ML_KEEP","hemisphereWinnerMargin":null,"qualifiedMapping":null},"graphTool":{"byteOrder":"little","directed":false,"edgeCount":3301619,"formatDocumentation":"https://graph-tool.skewed.de/static/docs/stable/gt_format.html","hemisphereProperty":null,"propertyCount":31,"propertyInventory":[{"itemCount":1,"kind":"graph","name":"shape","objectPayloadOffset":31054881,"objectPayloadSizeBytes":23,"recordOffset":31054858,"typeIndex":14,"valuesEndOffset":31054904,"valuesOffset":31054873},{"itemCount":1,"kind":"graph","name":"edge_geometry_type","objectPayloadOffset":31054940,"objectPayloadSizeBytes":20,"recordOffset":31054904,"typeIndex":14,"valuesEndOffset":31054960,"valuesOffset":31054932},{"itemCount":1,"kind":"graph","name":"edge_geometry_coordinates","objectPayloadOffset":31055003,"objectPayloadSizeBytes":1847541951,"recordOffset":31054960,"typeIndex":14,"valuesEndOffset":1878596954,"valuesOffset":31054995},{"itemCount":1,"kind":"graph","name":"edge_geometry_radii","objectPayloadOffset":1878596991,"objectPayloadSizeBytes":615847421,"recordOffset":1878596954,"typeIndex":14,"valuesEndOffset":2494444412,"valuesOffset":1878596983},{"itemCount":1,"kind":"graph","name":"edge_geometry_coordinates_atlas","objectPayloadOffset":2494444461,"objectPayloadSizeBytes":1847541951,"recordOffset":2494444412,"typeIndex":14,"valuesEndOffset":4341986412,"valuesOffset":2494444453},{"itemCount":1,"kind":"graph","name":"edge_geometry_radii_atlas","objectPayloadOffset":4341986455,"objectPayloadSizeBytes":615847421,"recordOffset":4341986412,"typeIndex":14,"valuesEndOffset":4957833876,"valuesOffset":4341986447},{"itemCount":1,"kind":"graph","name":"edge_geometry_annotation","objectPayloadOffset":4957833918,"objectPayloadSizeBytes":615847421,"recordOffset":4957833876,"typeIndex":14,"valuesEndOffset":5573681339,"valuesOffset":4957833910},{"itemCount":1,"kind":"graph","name":"edge_geometry_distance_to_surface","objectPayloadOffset":5573681390,"objectPayloadSizeBytes":615847421,"recordOffset":5573681339,"typeIndex":14,"valuesEndOffset":6189528811,"valuesOffset":5573681382},{"itemCount":1,"kind":"graph","name":"edge_geometry_coordinates_mri","objectPayloadOffset":6189528858,"objectPayloadSizeBytes":1847541951,"recordOffset":6189528811,"typeIndex":14,"valuesEndOffset":8037070809,"valuesOffset":6189528850},{"itemCount":1,"kind":"graph","name":"length_coordinates","objectPayloadOffset":8037070845,"objectPayloadSizeBytes":615847421,"recordOffset":8037070809,"typeIndex":14,"valuesEndOffset":8652918266,"valuesOffset":8037070837},{"itemCount":1,"kind":"graph","name":"length_coordinates_mri","objectPayloadOffset":8652918306,"objectPayloadSizeBytes":615847421,"recordOffset":8652918266,"typeIndex":14,"valuesEndOffset":9268765727,"valuesOffset":8652918298},{"itemCount":1,"kind":"graph","name":"length_coordinates_atlas","objectPayloadOffset":9268765769,"objectPayloadSizeBytes":615847421,"recordOffset":9268765727,"typeIndex":14,"valuesEndOffset":9884613190,"valuesOffset":9268765761},{"itemCount":1,"kind":"graph","name":"edge_geometry_length_coordinates","objectPayloadOffset":9884613240,"objectPayloadSizeBytes":615847421,"recordOffset":9884613190,"typeIndex":14,"valuesEndOffset":10500460661,"valuesOffset":9884613232},{"itemCount":1,"kind":"graph","name":"edge_geometry_length_coordinates_mri","objectPayloadOffset":10500460715,"objectPayloadSizeBytes":615847421,"recordOffset":10500460661,"typeIndex":14,"valuesEndOffset":11116308136,"valuesOffset":10500460707},{"itemCount":1,"kind":"graph","name":"edge_geometry_length_coordinates_atlas","objectPayloadOffset":11116308192,"objectPayloadSizeBytes":615847421,"recordOffset":11116308136,"typeIndex":14,"valuesEndOffset":11732155613,"valuesOffset":11116308184},{"itemCount":2231019,"kind":"vertex","name":"coordinates","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11732155613,"typeIndex":11,"valuesEndOffset":11803548242,"valuesOffset":11732155634},{"itemCount":2231019,"kind":"vertex","name":"radii","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11803548242,"typeIndex":4,"valuesEndOffset":11821396409,"valuesOffset":11803548257},{"itemCount":2231019,"kind":"vertex","name":"coordinates_atlas","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11821396409,"typeIndex":11,"valuesEndOffset":11892789044,"valuesOffset":11821396436},{"itemCount":2231019,"kind":"vertex","name":"radii_atlas","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11892789044,"typeIndex":4,"valuesEndOffset":11910637217,"valuesOffset":11892789065},{"itemCount":2231019,"kind":"vertex","name":"annotation","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11910637217,"typeIndex":3,"valuesEndOffset":11928485389,"valuesOffset":11910637237},{"itemCount":2231019,"kind":"vertex","name":"distance_to_surface","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11928485389,"typeIndex":4,"valuesEndOffset":11946333570,"valuesOffset":11928485418},{"itemCount":2231019,"kind":"vertex","name":"coordinates_mri","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":11946333570,"typeIndex":11,"valuesEndOffset":12017726203,"valuesOffset":11946333595},{"itemCount":2231019,"kind":"vertex","name":"former_degree","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12017726203,"typeIndex":3,"valuesEndOffset":12035574378,"valuesOffset":12017726226},{"itemCount":2231019,"kind":"vertex","name":"tip_cell_prediction","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12035574378,"typeIndex":3,"valuesEndOffset":12053422559,"valuesOffset":12035574407},{"itemCount":2231019,"kind":"vertex","name":"tip_cell_score","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12053422559,"typeIndex":4,"valuesEndOffset":12071270735,"valuesOffset":12053422583},{"itemCount":3301619,"kind":"edge","name":"length","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12071270735,"typeIndex":4,"valuesEndOffset":12097683703,"valuesOffset":12071270751},{"itemCount":3301619,"kind":"edge","name":"radii","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12097683703,"typeIndex":4,"valuesEndOffset":12124096670,"valuesOffset":12097683718},{"itemCount":3301619,"kind":"edge","name":"edge_geometry_indices","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12124096670,"typeIndex":10,"valuesEndOffset":12203335557,"valuesOffset":12124096701},{"itemCount":3301619,"kind":"edge","name":"radii_atlas","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12203335557,"typeIndex":4,"valuesEndOffset":12229748530,"valuesOffset":12203335578},{"itemCount":3301619,"kind":"edge","name":"distance_to_surface","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12229748530,"typeIndex":4,"valuesEndOffset":12256161511,"valuesOffset":12229748559},{"itemCount":3301619,"kind":"edge","name":"annotation","objectPayloadOffset":null,"objectPayloadSizeBytes":null,"recordOffset":12256161511,"typeIndex":3,"valuesEndOffset":12282574483,"valuesOffset":12256161531}],"vertexCount":2231019},"hemisphereLaterality":{"genericPipelineEvidenceSubstituted":false,"observedMatchingPropertyCount":0,"reason":"The exact pinned graph has no graph-level edge_geometry_hemisphere property. Its bilateral annotation cannot distinguish the two ML signs, and generic pipeline defaults are not specimen evidence.","reasonCode":"SOURCE_HEMISPHERE_PROPERTY_MISSING","requiredProperty":{"cardinality":1,"kind":"graph","name":"edge_geometry_hemisphere","typeIndex":14},"status":"unavailable"},"predeclaredAcceptanceCriteria":{"criteriaAreRuntimeConfigurable":false,"expectedOrientation":"AP_KEEP_DV_KEEP_ML_KEEP","minimumAPDVWinnerMargin":"1/5","minimumAnnotationAncestorAgreement":"4/5","minimumAnnotationEvaluableFraction":"7/10","minimumAnnotationEvaluablePoints":50000,"minimumExpectedGlobalLead":"1/100","minimumHemisphereAgreement":"99/100","minimumHemisphereDiscriminatingFraction":"19/20","minimumHemisphereWinnerMargin":"49/50","requireWholeBrainCoverageOrExplicitQualifiedMirroring":true,"requiredSourceHemisphereProperty":{"cardinality":1,"kind":"graph","name":"edge_geometry_hemisphere","typeIndex":14}},"retainedSelection":{"assetSha256":"fb2344e845e604be3424bd63f4222d273eafba34db0df2eaff32f4400fa9afec","candidateEdges":16156,"exactBundledAssetMatch":true,"outputPoints":71313,"outputRuns":11818,"outputSegments":59495,"qualifyingInBoundsPoints":78048,"sourceEdgesWithRuns":10907},"schemaVersion":1,"scopeLimitations":["This report qualifies only axis permutation, AP/DV signs, and ML laterality for the exact pinned files when every check passes.","It does not bound atlas-registration error, tissue distortion, biological variation, or omitted vessels.","It does not make the fixed-tissue reference subject-specific or validate it for surgical navigation.","It does not establish artery/vein identity or clearance when no loaded-geometry conflict is found."],"source":{"filename":"606_graph_2024-12-03.gt","sha256":"c2568cfbecd3f3eb720519be9d042f0cb41606741b8dd2f018bad1c54d36ef85","sizeBytes":12282574483},"sourceCoverage":{"atlasMidlineIndex":228,"bilateralMirroringQualified":false,"bilateralMirroringReason":"Neither the exact graph metadata nor the dataset record defines a reviewed mirror operation that reconstructs a whole-brain major-vessel reference.","graphMetadataAssessment":{"conclusion":"The graph stores raw, atlas, and MRI coordinates plus a raw image shape, but no source-orientation label, alignment transform, resampling metadata, workflow commit, or specimen configuration that binds ML sign.","graphLevelPropertyNames":["shape","edge_geometry_type","edge_geometry_coordinates","edge_geometry_radii","edge_geometry_coordinates_atlas","edge_geometry_radii_atlas","edge_geometry_annotation","edge_geometry_distance_to_surface","edge_geometry_coordinates_mri","length_coordinates","length_coordinates_mri","length_coordinates_atlas","edge_geometry_length_coordinates","edge_geometry_length_coordinates_mri","edge_geometry_length_coordinates_atlas"],"propertiesBindingBiologicalLaterality":[],"propertiesBindingExactWorkflowCommit":[],"propertiesContainingSourceOrientationOrAlignmentTransform":[]},"numericalBothSidesDoNotProveWholeBrain":true,"primarySource":{"finding":"The official dataset description identifies the specimens as mouse brain hemispheres, not whole-brain vascular graphs.","url":"https://zenodo.org/records/18876865"},"reasonCode":"SOURCE_SPECIMEN_COVERAGE_IS_HEMISPHERE","retainedMajorVesselCoordinatesAtlas":{"axis2AtOrAboveMidlineCount":15969,"axis2BelowMidlineCount":55344,"axis2Maximum":"275.406550802","axis2Minimum":"14.709281147","pointCount":71313},"status":"unqualified-for-whole-brain-use","vertexCoordinatesAtlas":{"axis2AtOrAboveMidlineCount":358880,"axis2BelowMidlineCount":1872139,"maximumByClearMapAxis":["301.038440935","545.949368519","282.876755910"],"minimumByClearMapAxis":["6.633265227","72.521141143","13.791384656"],"pointCount":2231019}},"status":"rejected"} diff --git a/src/mouse_brain_planner/assets/vasculature/lambada_p60_606_major_vessels_v1.npz b/src/mouse_brain_planner/assets/vasculature/lambada_p60_606_major_vessels_v1.npz deleted file mode 100644 index 9ad29662ae9e8acc20b72a3d9baeac9c316aba0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 814393 zcmV(rK<>X#O9KQH000080000X08;$R)l*&y089@J02lxO0B~<`sG*(tWoV+JlUU zj}@Y%tVo3HJ(Ionp1v67g&UN1BI@dXO`bZDA(UUY9ENQT` z=d9TQGyQv7b?s^6J*a2ju06ed{R91HD5v@Q&zk)|>y9%P2Fw=g0dr?8nl1h}8)|N8 zZrQi1Wv{+n!@K@}{WUw%UB&j3-8gj80;!3KiUVBTSYEMEO6#bigUpRbA1;(`c2aS& znHyy;N@-bV72ox7W1lo%sj7>LTAkdO{e6-2wVjGZ&E2?oroS|{n~FnzxpGo_YhDt5P`n@PuKCTIq9^}WcNtul2P1j4iw#TsXAsL@mu9pVyi{X|+84oSV zmr75>aPUPrLv7bfU8`g0cT~=0@7GHSr((FHNY2Pj`O?SJF?^aYXY`~E(&U;Lc2AQt zR(E4PJqIgd=(<+M=qxT!660z5Iu8eOqH%iL0F?=vi z#>x&GrRG&J>>$bbec(oE%fT3q=_jN4i28hUPYgYJ$!NWGgLG(X44;|Fn6zz!w0?aI z!vtU3zCnu0j$uo|oeS&xIZLp`QaKYNH%Og@-5Yb{Y@5A7G8O!6w48l)Hb||G$1q7Q z=a$HPslDK}-Q~Rgb-i>^uzd?TBXsg5YZ0sPzcOZ58RLR(^!G?PA`L92^!tVY|IkgKnN{0oH%oV=57D$#kDxQ4rNR1}zrKDVu zKXs05P_|xrv`XaOB}e{VkT030t9bdSBR3drkd|er_^Zf~t1fMjdSP-EDsEOfGWS=36qKss`KgXf*tJROmZqYQizAy>Y?96h){!|f`NAei zH%Y}4JsqhZy;+)@EPOC<~N8Xj~p1fbBpwGnTq|cIB@!m ztiLIMhA9Yx?QsHSMg)I1Aq40A(i$n;?@uY zzRWl+?dx8|i?a=QbI)mMgIy7)^)#gRff{MskRslc8?qq3Mlv%l;)fB2y!_^jG%i}j zzupdXZn|CKQWZnO9hkGazW)F6lKCnYMmca=-43bz9~I{WIPh>rp=2;i#g#K1m^EUj z6gXSO{bL>I^JAwZ^A&f>&VjR=?UFKu|L+Gn(E89WX;P?)8eJS{b9R?hD(v>wb6{)L zZt0&e70>*zXKu=FsY1l((+hhlStNCd5cl-9J*6*2(rLkmPulZrlRc7|TEwc;9`3Ycu*|4$EnzNwmkzf zOQhd|&$-*P>E;q?N`i`CC3{|e-k@ZxV|N83`#I$Onc&&cO*OC=|fd-JNuS$p?OTSe}rm5}D%WzyyKBAzbf;oS!$ zRlbUuGBV=m0qMa86%Uz_Zh;4-klrf37^Ka2|5 zNLDjxOmqG?{a1REq2{1D%~`kgujIEz%{xn*vnKwpw0g6e`C-keR{xd4cdGe$MRPtl z@kiQHs%H7h=1e{EN9t3d=8S^oj9mLi(y3OnXkT;IKKv~Wy{P8m(&kLK^IIyvsb;5| z=2RW{E!jR$^Vt37T)OJFRPjR1d7qmzB;>dB_@kOWIy&t3;kPvRmzr(6>9F_3`dsl- z&2NKrm{9s#N|!>|EUyz6BsajM0U?~cx)ZxEZ-BE#A?%&diQS$zz*oHxh6i@y&#w*8 z{ZBA2OzXt!O*G*4I+(^TomkRV10i>Uxp+t?W|?SU)0tqN?AD3FmKwNN9!x{sPMi!4 zeA*by;&&YxXQP4qTz^`7>+`g}Ha^DtGumCBeND9C5bV#hHu_Al)JFCke;SzS^9zK` zTz@vz*Jp*hcD=o$xB2r!s6OXuYQyHBKlh}Hy+VH84HbWGx{5q`Z&(}?Igoc1T^sem z$}LLD4(amKi8h#+spO^$x?H!v4cuk~@?NMRchAy9PyaxU4>9Ca15GrH3gp=!LpDF% z7)P=LneT1LyC#|#5O#+;wkeGCxwZJoAqM!e-^hBl4U z*yde4s%|P#@jaDWTP0xNNhN&Vrqa$b0qcsDNPLsZW)l+dX`K=pH&fa8Z~}&VD{=IG zDv#GDV8CA=sGp@WS|br1b9_*(nZ^+Z6R>Z-51Rf-W!$O+oW1A+=P#+O4o<)W+5cN- z?b%dLzMX(2jg&~LOy%ca3HbTW2hU4WY3rPbox6SN?H&3kmH9&F{N+kK6nf;s*2B>H zI{WR;wg9P+doUjLiP;`!sKVbvThTDkChQ<2->Ephy>Gk*v^@!Jx?Z~hO@Z#W1+ z_ncY&xg#I79)!26ohd!+NMF?;@S04T?;gjX{mro@FOvbM z#&PP8<}emq`d}RGZFFFomdUUEJ!luFgM>>yyxn96J}Kv5$T1)GdAJ=HBj?}-i@9ZB zBJ#4;C>vSKyw-`Bdq$1blZu)ADFK#$)mV^L%;hDC=ozMlUScsFRwUw9tQw~3VjfFM zL|eht!Nm-lm55U*YB>89)66>&38iYhnp@0A!xAyMgl7jwNqB0kmB*Y9uSL%p?H ze0FslBD(rey-tgFyLn)>%!lsjTCCVQ9$Vx-Jei@z1E0rZ+BzS;DAMBBuCrjY$A?Rc zwP>(l7W(h?VY_`=oLf2zw#7ayD%Ik_Mzi5o;zPGGEw&y#8cA3Fm!i zEqu7?HwU>Fe0Xn<7Kb061J8#(j4silQhP331+PA%#rP3(q4&jy4(GIZICU;QJul(x zgd}vfh{D>s5^DaFgex{tIC7(e%cmuwx8NV=O4w*n5*8RmA+4%}%JE5<+9s;r-uZ%E zcP8O*k0>NevS%-yhBOHGL=Pu>4*jOVZ;qbmsjz3pBMl~u_k@|VJ>Or@U?*=+WXkP% z=aAq~PpCA-q_Ogh79}a#_)dQVQgn6NA|@rlxq#+kq9}0j*ekQ z(_x%*U5;USf;ES+)jlhsw`y=iO#S%$SAJilJ%c>P*L3d0qY(<&*Gh~P^|19y zMLqxjyI0i^3>@5vu6oWG-4^USv=i$lIwQ6n*j(O;7yos}@|-cu+Gb0q-ByqU_dROM z1;4GJzhw;PUbW@R4_5VZ=2&O|F>M^nWtLd5B7pfb$8k-PC9bXy;EJW=m~qn*S?dDW zapgD`Ua`c)-2u$mIF1`?EOCEd8vCuC!bv{$^J?C$Lwwgno0eNfp~3A#Om3#lC0|Bi z&!t0j)77SO#AtlGc8Di5v?+ZUjs2H``NB0573Wp(I}*%6icHA2tKd->%uJ_DjN74t ze04CtkH~~yp$e+FVCK)y#IH>%crOlSbHSbeRiTY{FrCHTMb}gq>>kXgb2H(+RfR6Y zgXt-F`8E~i_X%c;q)eD>6#Cl-GcGX`qYG5HqaDmj?@Z|JRH6Dy5FyxhmkK41f_Qv( zCX~BX_56fjDIgPPUa4T9@aIwk4}Mua7 z#L@gc*rMLvPxoUuWoJ4PW210TaP`%6SQJEI_S%`W=vaU%MI`c*XR-$h&~RQP1|-eo z%UK1;njVRTAv1Y5sQ{NEB9Y)dll^uV;9f{1PK=w$F4qgtJ~t9wM$F{*)|=2#u!ChZ zTZ(um^i9CaUeRopuY%kE#ev;~OqdFb2PeQu$d7eciig{h5N8|B;6_XFZ*h|Nj?uKN z3dOQVNoZ&n&3O@_c>g*HPXy=7Low@X5?aiSX5*kG&~CCq^sdo#Ghc$37Ax>7AetS& zE=JAp6^LIP&E{o`vE6qC7A}eA_<+Ue6S4x{>S*?oFGldz6>yG>=8}(r_`YWa`bR~x zvM>-~2Up;9bTkk724d=~6_^tn&2sZV4DYlOE^$KVs{kA~U5RJ$(bU};fXyB&5tA5A z{Y3$Yk6DTC$vU6iM^|$ zd9c4f_M4@^Brlqm-uYq8MA2ohiDsYeelYtd1)JAK)6vHdI%z3zSRc(<1N`v*XbNJ4 zo{HCtF!6l~T4%a2$E*sg164Q`?ZO*Ps_<}`3fZGi6z4n7@##u+y$`ev;xz=j^txer_!z{p#5zmEk#|ch*Lo0$4E|oCF-fDds_r= zy(&?Iq6WSg$+)8upSmjQ>HP1xrU>q9?T7AqsW8lq<~R5uWKb$X2CSvcNLNN3x5UpO zYdL?WD?RsGV%@-zG}s_fecT!AEk@F6g~YNNXWZ>RlKP<%PhE4aCu7=WB;)r>yx!Uc z)1%1F8OPwdHvwG($)kbC;PNm5_h*swJ&wV>O(HgUkcLB!VKNgj%aJ_Y?iiE-i7*>V zs=ppZ?8ZdA?n&C*IEqb|6EVq%994J}janzcI7`NEa~~pOUKC2BWt>0%A-4NO;oXKj zDrb0eu!$MWa`SjP(3|6p#C(yG$1Wk>3<@wqr}#X64f5vHP&4!l$fG>cn~B@a;2JuV zQ%ql?lUXFZmkwp--xp{yFcNQ<4`ssj7pS(3giZcX4lH_ssL7Gg&Kkgm2J7F0QMufn!Q#z(Zhx78uAn0gkpwGtH%%0=S z*cGFpzj-$GCpdHDi_vg2@}{zlf|e7;qhEJ#-fyU&-rn)`>^hwA;qK>JY%_j7jBoky z^>r;~6wXJ7S3W#0Wb*wMpz}N#KOK04X}zOxX`+npa~@&tkSMq)WQ+-V1ot^n@Nt%L z_?Sl+?i&STD;Y-&c!W_)qu^jIqgJy=Vor^M`;!P-i`hoD%oQV^M=&hZnVvUXG3-?Y z56*YyG7C2hdK;}VzD#o}v^WFnDj9Vw8hm|G+i-KWMB%{(qljT0aBDOLn z=xI`~cQD>wk@4SejT!JH2xp(jSpA?epKJ)im8UW`Jl~kvMM2o}UB;eejoDclgef|5 zMin$>!zDqOsViqiN@JEs2VtI`oWH{wGcY{}j$P$6o70$vql56)Le97`jj25`2%jzG zJTa^>tG$D;#!=25y&LnO&>1pO&WZYs8QCWY%O=U0+n_O>tb!2bDd(M6jo3;Ngaj`+ zjczvLoe4o$FqQp>5ax)C#ko;Hzkj)-f-IYQ6LGAlMd z+JIT-mf%#m73UQ;;EuaXaOQv&&*e5?<*Oz2a`?Y7OmC#(NgHQ2v>l1odMdj27vCa% zB$8XGnBK*iUav<&tCfn^^qi?0F$(I|DjNP(a8v#${A{D5=UWBO{2YbQE-F61ui$t0 z(Xi<%W9KhTXkZZx$8Iv(KWM^4yI}OPl#w+}IQdr)ECgUvGbf3C^yDM1(|xYHF)8jlUa z_^v6^gqGYGE_$r$dZ$$R&M z@aeFOMN>2x{x%3EyF^~OYBFGSaJ~Gr*OBptr4}P61w-Ck#^MoL?C27V0nKDg_0r-# zn_!qW6>;#@;<*07_-rU+SG5+c&j#V8fsB8|ym|L<5bD~=cz27?vs>6|EMwXsEk558 zgbs~l^uMUZ)K%iV4P_krSnN#>LSqdX2YnawY`BQ+-=S0VWftV z{l(ea&0T~&?|gV)aQo6lFu3o-3{hi^n)o5MnTnl4oVlaNNLY%yU^2^@6$3}syB9j0 zRQ#B%;Nj!$i0Q22;BW<>cNv2}BF}?-6l@zZ20>j_ESsVrE{{PsLlyTrDY)?N7(9Hw zhI@5gc)vt~TiqJo)^Xv4G6}r7hTg4QC^ZAdUs}UW8ZOM83sjt4BW52Lw!esae%|`v z!}+2Pr;ql-T1_SKN{ia7{qT>Wl3m_vG2*cwdiGKB_j@gV8{iL{zDl0@sKujU{%AN{ z$-*yM9Cp$l26jp={ia1-{QwY3R*9Gt`2=7hmCSr9a;ZE3M&p%KztCc1%|HyApyW7V z>yCRMoF^)2_D1CA+Ca2gpkzm3Yxwg(^jxUqhYwopI%F|yeUv=&NsEo57Gs=J$pT^b z#reh1QYqO>Pn+j;mtc<3YW_)>&epL*@v7@;8Z4bo*V>^N^b`zDE5p!(D`9d2Y#3OE zzOPr}=T`80yE2UOO2L~|;L30NF*P{_j}pN}H})ejCk0Zzl96(4UVOV41u05iHP+_2 zKlSbE?n|P{8yC#~xDHlFlem133;vj_NA{3uJa=URH zv(posF=Wx)sx_+KaD*K zCorvM5;ixU#u<4N*viZkksqgWW&8w2_7$^sT@stTcZO==dQ?70;@u)=1g=?+cdwHu zTjGpX=hxTsLA^-H$v?DMF>eW+qm=agtwqn`C72Pdr2MZI-86y_9HV3hF$3C<48l^u z2?p9+zaj{pxk@$?^W%fZLGW9p^k9g)q1|e2nNr~=9ULazQ7RtnUl@_UzHptAA+Gm<{o_6Eo2CebX?3I9!nADmy71wi#dMv zQrw)Ei`HKPS(~>MDGPFO>0uxpUoOSHgj{sJ5XkKV!yu2$#iE0O)L#;YoX}iUYzd_L zKp1}bi@lkF{LmmA)5PABA%X1Y7mlUwx%J||Npl)^`A?wMtx5IPr`AoS@7f9cxXcr> z^HVvhcmgL~^hDNysqB7o0{7H-Lb-J+8{M5iO(QRy%ACsUZzphc2QRFRn#wZGiA-7O zh3~#ox!iCf&&=_{nJGeN|B3uo=7kw9Q~9aiMD7**RW_9&g69inuc@k_%h*qlwpk?t}sd~h87Zlz*t z8_}y&9>)TmG~|8^V3*uw$Q`%}vmXYq|Ab|@X}t=;7X$cr;xZhtT?L1u0W>mLhK7n& zXj2qG#no`Qja!BL>jStnJsf${R>3BZ<&FTOinH`R6`&ZS|Kcg;y8=o$N z-l$de@+Y@Q$!@>2IM6QyMSGOg`J+W!(RY>#PSn@t**_t;uvf|8cG`U85{efhkLDU` z^KVWl+zXT(&|aIt&q8rkb@w%%d@LsF6zu_J8f1OFRiElb$?$@ ztkkB`RD}^;e7Uqxo7?-UP@(6`J-OQ47QSp9qs@}(D)c|@%XR_UY~MQ$3yXZY zC{~;Crg2cO@nvAPHs5@YMNWdyvqhWZ&c(tm-j^rNX!Fp;Sft%I=ic7N4AWO(P^~$C z4KwEA7AmxUXU_Ixjp?ne!rnLL{AZ3aXEstH<*zx_OO09lEdtX8JEs}5PgfOeTUv0z zW@GkhufknD3zn1{v!Bqp-^hYD&Kc8OSB3O}7X10Zm{v_xSPKho_-@S3W-44=H-viY zjv!`kHfF9ILi>$JuqrJZ6GDejGvo+9?9N7TekRBK_UB)HJ8aF)06 zW*$JpFuQs&`Q6HwG5*?ICT8J_CceC~Sex2=RoFDtmu4Z_OuwPRQy*XcU8c<=KUEkw z*_VgIwfXLs3JEU0ygNsmy&J3R$=iiwa_FJ}#=oPX_mfB6Ly^wBcUGT z%Q9iBV^JhF4))~(amF{-BT+TPmpZ~$<)28TIQg=N$fb}jQP`{SrN?TK8xB#p<}Bj2 zMwswKnHOiOcHfys~D;nW~<%hI+ z&@38Rg1cSOX0;+32S)pH$~7UgC>k%v`0}O5?Wi@;Xf@84y-#Q};CM8Kc=&RDwKlz9 zM#Ek3lv-`Z>cpV`TwlI_Ant`l493m#rR=eY$)p(g3AX&D&Ct*otPpJ8rYU!?j=`4+ zzPxYNlpPPppzTBvx8Y4Wtu_Xpax*T@)#sURu_!e&qkgPDllsQOsJ9ud`~_RaVn<&y z22I!J!+&BC(awwoj{0=*i-nV|1^-%_@a+8vDEnIQmXQhneG`F;{Vce$xd}7HUHET4 z|5tuXFAMrOnegJR2n;o_;EZV|9MMLF%WW;VEx?3h^+fJ9v|!tK!Oc}j5_fG`o?vnB zOkSJw#BLK#758r0O>_3EGND%k6+B*;bKFf6zWfk@+Uw?Ycqi74R9JG&oXL$%Ik$rf z!v#<4Xv&$x#QnNr&dmc%86a0-{$+E%qA8;WsqntSoOeA<=_l%meW5vr`I^#af(kdb zn=>lPl;LAkn4D`)|5c`36s*GAY;%_GG^IK~1^*bKv&xjgxhfp>GpEKaQ~GDA5F_}; zJ5$D#*T3WQCRlLKQ)9j!E6zUOLexNGo(ff=;X(_hyfWs-jVdgRu;9x###EnHp>ww~ zj{Y{CeZSkm$)Jo4ThE}MjRZ@rGM+Y^!4>E1>V4ne3w(L0e^Y8Sk3|!4uRC>U%Bq&J zc&idQ-?S;cZDKLs&zECAYjfuOSmXux@}0=5f!X!zVg7h?=Kbu)`_rQEg60fp-Jg!J zQINr$1wHyRMID7$J9A#K>d)I@QE2OK&fcT?Gh;~1ubbUg^m$zx)tW>P|(NCzt>6!@$k%{5sc@4K@66FT-E4Pu{Wj@;|GxRJw>ytLn#8sN{%98J&c5d+QEldr)l1!Zu6z=o_xDHN zaCiFtJBeck`=dngqm)T}@Wc;J5$=o$pG4=^e)Vjnj&x_>U{5-4^GA0pciwaIx-gurF$T|^ci@ydoXfR^{L&pzMul@rn=$y5zXKzMo^7|?QF?g? z(uAHj8{BcSaUuMKp2iE@kvXIgA*&7nfiDtCOnT!?#uXFqp`QuHES zdxkUivpX6a?nL)8HE-Pp&$kT0soiQW6f^M5c_Em7+>K}2ia0wi!Jgf2OzrDQu3Un) znYMg6#FectMc_u1Ezika*+A5^Jbzp6vT@}P8x@+*vgM9Gu2e2mVX22LH+OL5)72`x zakS;SrmmcIMupPBwhY&CrO#&-)F!s{Y~jjaBQ<8WvSsOa7nUqkqjP{8HCB7FdS?*a z{oS~|$dd&>gHSxhjaF5j{QWivKNW7&y5q?yvS28j+!*-QlO4^2ab~+KJ0y70C?*7T zIj$Tgc&{o1*J53{G1-$tE`*?GcWd4@R&eapWteVmO?#PwS?rMZp!#BcPFD&Eg{p>W+!Pt9)w?tWeN*bOgQ> zS@YU;1;1uRU|OIJN8NFzm*@c&MBDJ~M`s@OS7T?o4V|@JxLTa|z(yNBGjgF;idZkP z;l!>koV`+wLsd5XJk*8P_oz{G)rKjfTbr!&A{e4BuIP4OAcytFF-d4xK%F2Sj2H9}^ z{5X6b>B=!Fp1jg76lT`0?DMZDk53K7vL3EHUhc`$V?wdBwJX zH+s^vTPW1)>u6S|%N7q}@G7g0-M{JbL8DlBEU%+c3q2k%jm4p;I(F`%$J`OIFbS<= zCtE#+&5Om#kUEYYt;g8ev0`qm-Crs6pPif>iBT49ybNVqM=tE>rUvgXhAHzJ?q%+o*qk5V{u_p9Ub25@yzmA3?5xa zHg3T?G2*QsRmXX4T2NzREE+r3adwXuG#nj^nKpHtZ`*<<{;~DW9;xBVv4=gmdrc_( z-n#JMQBO8~9g65XE_@(3SHTN4JDXH* z?{9I}+cooI?`C1po9Dveg4bw))rJ$Z-i-j4Fi{Nfm7{949Ke?_H9AU=ZzR&P{S#AwjlAz zM!eftBl^>=ICN_x40hBowAWUIoY{y?#Wl<{+lq!lPvM~&PIKRi#rHO%!^s+UAG;NM z8x$b!LJe!jZN;1J1=x9`hTlWCVr`oO?5V3^`Npl#=v{!$FKf7P(^iWLEdoyn3IwU!?WxRVcF7CJvgH}0njiVO}%fiuVr!)5q z@M5%oIAj&hL|-q48i!--C1+kV^WwrQVZdW&{ww(RjWA69>dc|0UVNSqhKWsGc*fd` zGj4^!sgwAof`8l#tEYc>yfd{1dU4vka2N$Sv$T^Jix!5%VwN-O1e?wcN87Q^Olc}| zU_m%~+c~pLu*RHlv>f2fIbS@vXnr`74V`)5t|wn7hS$??o$JggQ@l7wa~b@yoq27M z7n6U7*UJr^P8VqR?KAd%NP=3d4>tXRj26lG)ZqgAkNE;s-(*ZNzQFqtUl8k%42*H* z)+L!}DtZ9-nXc@clZjCScfvEumBWp)Fvf2uyfa)`VV8x>gq`?Q;3{U)EVMne6Msrv z`FwL0CS2VKt&^@|cFRJ}>zznA;mVYkS-7md3(W-Y)60gQ$u1;Sx$>5IHk^j%|}~6*l%!@L(@5x;0f{gn=zX?c5mDB@zR*Z28#CjZc24al5H48@6@htOk*Y)v=|K zh8rJfM#Arx4HKTb(&K>|6aUz7>Lph?A6BE0hR}1^mDOS%FMe;sUfTqpQe*W;8~#ai z<)KY#xIMCA;WAeq+pdO&c$YoryYftt8o`%ssH_&xBLAU$KXy&sQ{iZ1R zpe`9*7VX7-=d(2Wy$wMoo3YR3EOY;ELs#d`n0efZ@edO5an?R~6**B~GYJEy?8BrS zCqB1K!uDzVpyO}C_fH0JOs|zF6SJwo?*WW)Ux`_k3OWs2fw;Ftm;?o?i;j48q(U-4b`tUzg(qI!FMO%ycmwgShE_ux~zv-~<_J4`nh zV6wqkK5Vfa4fYgZjp14T^Ku(v9u^?xXK&8GvI|o}_hD~sZ+^Y447+aPygtcTEEU7PwSp5zC*#uMV)SgN;Ol|OI2l!pJ@1`Z zGbkBug~cd&;KV|MWE9mEW8Y;bF8`5)_U%gGdd-QqZzo~ih!VJ+bYl78BwSl6c)t^K z@{{1Wy99ORPJ9xXgf(>~xWChjU$R( zi2mxzmKoXjJ!2Od2_96Mjlto&psnr3y*IKEkhu$sM9+M-DhC?fcVm&K8{MAfz}8Ce z0x{kX7U6$_p;>!q&k1 z7HnQ>#|grgf0+fh7~Anxy98)#vtZX2b}SZlSFEyN&X3_-D(sdOT5#B-;jH)_50l-Z z_q#BhXB!HcJr?viIGi`N5@4{=f=~V(&Q&5l(+Vv3GG#b3pU2~Ih6QJb4d>W*@o>$y zVA$N@^!hCBLaYTJrVr!p$au7ix8U=zVJw&ukHlaL&Y3%mqh`h9S*QhRUE!_)GNsgDg1kxDB1I#^Kpu3(5;^XudlRLu3|IEkpFKeZ+YuiFsyq{eJbodBXjc{15>y8=L_321^dy2Hqc^ z0Q;4ejI98J!xQjpw=GkLdvHy046Jt9vS7Rix88_BaG{tneLT4DR}A)Vx8><*4<73p z3$uf^?3d@kzxJ`1S8mH;dp)Qtdeo(xZTaVv2cIU3^)g%Lp7mh*KC!;ZmJ=U&aN(_3 z9NB2gxj#J^@<;TO8*CZWdOTyh$Dy4)=ri4u%DiZ}4ggyPdQvAV8dtl3bH%!UZZzKL zfO}_pa`w?^jQSyQm*Ce&qOs?x#I1ru4o4&Zvc%j_PsY_n!?sAGlkybOPbp8 z_2o?TzEy(aKf`%)R2Kf~m!RRV;XJI&LixkudV43d6!L+Y$QrQ^`6hNW9G8h{i}ztv zPdl0n&P3_vefY=Fj;#zcvF`RhwCHHZ&fhceOQ#emo$T23Mh2=4N?~hc$982IFjJHw z%F>R^5i(0k>-ns^Mb5F-dC=V`{7;v2_T)U=TU-J}$Qcx#hrLcESR>}zl!!c(yO!Xa zmz>+wc{nz@1b1BI%=sq|F4IcjV=d=X?>uNFmf*}^8T(Jq!=LK<@i9Llr_;~X2-et# zcSq$MeP=a_E%w#RrSueA`m`O-vo3L1ueKF4?s&$BiuumpmM1@Y&~!adcGT8SKyG>!KFqgc`>*lncB%^LYCBez#v`rQ z3ABy2W8>U-qkY4YK3vLmBWaE5&eEITx(V#lsEzG1gYjJpWuc z-PjNB{&Jr8$VHKE8A6QYY$VS`Czc_(rJS-(xkw5w!&(hFegEd*cVQXUy^-l{>u zm1C5-oRg>Kz;a1B((lUoBs&9PlMci9tep0F8Ssfdj4wi_>AXy=>UIQmIkkLw%z$&= zt^`tQX;Eyz+?y#{m5%}jh)+?6-{2J>md zta^6ecan2%L=I}4%5kcxoVzyUz)r;fzi0ff{PgZ}W=c8Oy}cX;rgHA+o&(dn<>=W? z2yM}W9eUgo?_6IPfgPixOvQa+r02Vfvv(wgWNYMw-O;66jiP@+qIe_&o zo2|a*ou=hL*)ay!tF->f0>j&N+zn z-()PjkcDo!2k}Ek&iq|j*l^+?n*5RRaatDSzYb!*(Ah9B3)TG&;dUE24~)*j)Io>p z#rD5(>%F*^J$D+=Hzft57SuAe%7BJ@QxGttmcQ;8@aWYP?3-Roqb8q~ecjEnSTbxkgHbo#3NZhU`5z6_GBr96H93`&OiiF|?Krvkmz(F%>-p9}F{O zbWtjt?P@tN!;mIdQc*a(mNx$ya`uH(yd74{lEa34@g)_{FY0h-TTM>WEyU%cI&7k; z$tt@-gzeIyt6($xLZqzK;oT37={Kqn@?;$ve{9T4V+zqVOotH<8q+ei5JwL?^3au7 z816lct-Bn#qBIswo*l-@^^TmrDi+^59l_aTM-C5+Mf9R0^?dLjQOl}}hSd9-imQ&b zJpag$ijVdE+&Q?GMwNzi>MZVg-&!V}G~`C6p`URrznwAUuX$-m=upc^hYUq8n})}& zYFWP1kX;U^VQTAIc35vngI8&g3r;F93wPv9bqu<>RMgwsFV~T0e#gM|%n@A3cI1UFv6xzM z1pZl$ygEDG&ByCES9!MCIT&rvhw8~ye$zXLx=Z;8ynB^SvU7M;osZxvS9xL9IXr%pkMQcN z9I*Zz9Gh)G$>W~f9J>>5-yTGtr#*Rh)=rpyKZp&_da@mNVoJk9u&WgJYjy@U$&b{_ z?f?3AZGj`D%`tG8UxCuej?_4F%Hyi$RXVU8>x8H4dnkK&`9BU=oN zK~L+W@S!7Tw~E2fg-49m>Z3?zmCE9v;)Ik zqH)x`65RNN?i)<$Uz>)Nxlb5ZY|1Iu({N|y6COHYN{91lFpGV{k2g%&`(zp}cJIX* zhYQ8N1ITO9i~AoG!gk#OH2Z7DXHN@JdgcJ!UYjxMMIpXlH~`!>~GVHSMm#?dGkO$e_qXdLg(kE9C08GTc$tZ$EAmiTAb7v&X!5)|6H1bXecL%TITUF}&3_e7|y+OUjCoi)|>axyz3k z#rPVq4PGbj^5D#3Tq)UxO;;bYO^qoJg{MRF>|>7KYf4N=$1ewcrYL(cI%p#n4%TPd zqFy|`X(Pga^x^Dz&Qz_*K-!Z&>=Ne8)~hq{{&F9_Om(JnWd^h>`fy``Gixg{Fu$-5 zmF3Rt@I0g5w;ojLz(&ewwCr7p1DhTAz%Lq(<0^3`-GTEnqLJlVi6v`TYd zaTT~VR`hk()6u$TMZLT8Ut5cIIq=P=D17-;3Fq|=JbgV1roE5j;z|eZxE%%WamV2x z&eiNt6eh+Vhn48b-TOvCQCx+V&JG;ZA_~i&S0P94z|L)=@UYDZD0@4w;g?ACRh+=R zz7CvoJrd?iPhf9n2aYU{M8xhB_}bEe>y}00w!ukww{f8M^hi8YoP^tO2RihL#G(l& z>zzI0hm2!F(%|ys7}8(LxMy-2x^=2V>Kz&N?b7hWy%Hm55$1v@V~%Aia{nHO{~8%j>!%{fyb7&_&flL?Fn(qg_H2-G;Pn*9 zGOOUeNyb_GQ_%5b6%<0}wbd!m`(1@+LTB^v6nyS~0|*1#q|3XO9kjm}R*M4t@0bazG!t zPu_&xy87JU)`zV&Y{IO^)3|B=1k^39Mvsfr_+j$|Xu4IS?A$btt($! zD&(H5WxKt`;=Zjy_2F8+D=_A@XRGkFq?R>V#$2tx8a)bYxi#LHlk8T*qo9^?p~h^n za5ZjCsN>feCiGdJjR8^}w~jU8)OCWt*mI;=B+74}gshnZZL}j1*Q^>9-|g8?Cla3q ziCDd`XQ#JnjGtePnYZn!dr6J*b=Bzozoar##(YXraEeG!3`smxz$#7*88;ZT&y&w`KKxrpuAseHG}h!bKi;?1X2 znmQX%8h;TM(W&%yHKJPeMJx+XrTa!BCW*dL`FSdj2(Hv{$3WjyZrx_Y$L8*M;+@Lk zGe*>3&B-u~fbgJm9W7Qun5EV5$*sM7ZOhd&c~v z;=pYR7hvjP%t1Bw9MJYc3*YXGvgEm+Zs>X?3fG=lQbX$iT+T(I`K~3eY9GLhi!IM$ z%{NOb1i0Z$LKMvMEm`C4hFYa)JSeo}%B^nDG>OKrPnMjw(+%erMZ+`2lAq_g;n{^~ z)QN9}_Hx6Ko-tS&Yss<7ZU}UU!SFYhH2$(5M#p2|8EVO(sQsAtItIOcE$J7xA76@N zaN5t3!+rNdPdgUpKUmV_%zmg$j>WSGOFlohAJf*x!a&$J-?$%#Z^hzBj3px+_T%lR zSlGX|WVFeCShbDA%MeRCYVXI1v2l2lY{|IleK_!M9D0d$mIdy^N6$FurCZW{$36rX z#9`*U8eVH-$UDxS_!d(`gC2&=*x`wC!56z2((a)r#=fm#YJWrSO7z6>=QY%p7}Dpb zCzAHoaCNpJm2Y}NZ%Yjy|1jk651x3sriPo^^k#FYC;lw1VQ}}}98lzmle22LYh-WM z=6b?lMh(p;_hx9OCr;SZ@PB{*?bs}ATGsIIw%#0V=+(mh_oFq`i8JK+1W){PzJ?#( z7*a>*X9|uHIbnpd7q(oh;d+rno{#jxK<^q3a5LnIPF}e1q=wF}h73~kLb~AjvkjT7 z|K)q(HS`~DNW_Dm9+5 z#WC<(Jb|kk4@2KQ1_PE&;Jci|nEEjWZJZ{sI{YwNH^!hb&4h=3&1PJq2ezb`aANy8 zl>hR;CAkS>4Ce5n=$ShgnDFF?Iec8^fk$~J96xmq-*>!>q$(4>pFf8?RW4&%g$WOA z5PF5n_*!m4<6}bK`!ZIQn((LR97Y&iMoF;=1E0=euJ&c*elp>$h&gn&xQsi&s_Ydj zLsylz$oi;CwQ?C|d;2#2(mhoMeUjn!thX@n5&dtf3~l$n#SwQ^PRx>F$fLI~KA_5iY#Azi zMW3=(mCCJh(Ba`*?9^GxeX^+tIh=@)woCcXm#OIHpNPM|m(c6`RP2@|V(ExHp8e2^ z-L*ZTJT8wH(tA;=>509}_Gn~!f$im;Ye5qzC9zuqO`4dOpA){l_zvEyI`Hf)v4#Qfv2<1k-X0^v z!1?cC`Kvw6*JZ`T&8B!&}6G0d9IC+5~m%jJJVb46Sa4}@a<(6-> zU%ynYj~dK>BQL?kAeGg5gPB`)2}bIvTwXJn?+Y&>uze~^+YRC9)*g7Ekje$!hOkHT zC3pz_HF5|gy*$LdN}=ndA?&B;fjt!|ESfchUDQ2Vd@J#>h=B`+oaOF`DWZPxd}zpP zZ#)qmlE;Vd44ESG-k6Vh49ODf@8|{pggmCyh&*ZRg#&^Ue;cy@LNC;%<*}l3Z(1Go z!qZ=Q{4DZeh}sRT8yCb<#ow4Ne*$B(AVzoijf#%GXb}8J{WngJ_QhNCAfDC#jUh{Y zF>XQ-+c*D0w@be8@f*z(?@wXj=UAM(J({}rPvKy@IBdTl>e~~iARQlvMWViytUZO~ zEpeE#c{J1QPNCsZ9EL6*&2`47MBa*nhVy8)(>Vo4?ReaoHJY>PPhy)@JRI7l(`TSA z2da3Y|KBtY?W@b4S=W&ND~(;%booPYLS-6z33kc2hSx=D94@##^%|tvX`JxC@z2+= zvMjAY++j^#IystUr+i?brO6v2J{*I6a7;y$zweIbsUn{iXPxRYn)5PG z;@tLl+!MXh>%f!9of!`w(cihAJBdpR;$bc38J;XSG%BmpMBO=(zr67Au7+ll~!oRyJm>L&@36q1+Yf}XS?#JN!#vm+MT|ooEn(Kow*1m$0 z#2CC-64b)~s-GXQ_i?#oMB74WJm8HHa*5ZHLj0sJIij;4w3nXLW<+x@qWx>7z z$-%$!7O|B5aWU7WOoqMxXXFGf<~5xu==|_Ae%xNn65T0qe)1XZ&MoGMZc}jG?=zhD zFXo)W$+%eZ87rq%uw`YcT7dSDq>(t5}Y5JvZnq7E=^0q5VOV9wV8sj<0)8bv6$sur(pA&6qM*M<|nb= zT>VsZQC&>;VN(!kk&3Aei@0{|6pUG&ii72g2+JvWbSV{9Z#230y%~Qjl;UxmCf}!< zasMnSKFBl~uV~IY+obrNrODlz<}BPO#mujo3?FFDjccSZZPH{nm~-Y?Dcn11agnn* z%Z^I%{B}O=Y`Sty*L!$XlE0=Uthv9f?fmUNvG1it;(c6iu z%Ub$md-@_Kn@z!s^{H6k)gu3Zc zKGQ9beB4)rdS@wrOYG)#HOeSMXRM8;*>90pjr&=C2d$SCmZ)NqhMmw zhMxPf;g}MI#Bpu-V}CZ{)1$CzKpR>e$i~F%DClUmVXZV9E1IHO%)Pj@4X>DHV?$vS zIxTO*iR#&~_!`yXT=W_=dC|q31O26#UZ+XyH|OfdQtbY%$?q4<`S89J<8n0FA=sRQ z!=*S=q`=O8RaiAM61_hu@TcITb0RS#R6)F-!r4xdE%x$kqm-*=$I zONIv(Ve%m<@9Zs*box|;35TVu)hm=N{8of3qqJB)#)1#yrO=+N#Q;MKZuFM67?2t{QrJ`K0vX2*y4 zc`lz1JE?L0L?8S)o6oSmYMkoggDZ#gId+N~zes)1{ZBrP68rLg$-kz4rwLd4{^t=QQ;4Sjq>td80SnN}KtE|J5`x1k7W zI3DR9-iw&qsFZ0!0Hi%}-6`L>UUrQBG^|EF0bVlN>U zLkg9d+EWHc-&nj&RAzfa8GQX?Q5d33%YHH(mc^n$s?4})GN`7<;`C)@HcyvfX;v)m zA5`Yy4KkFb#3Fp1GF3ffa7m2Cs(H%v43S~O_t+MDEImNhx^2VcacO8jPMJ2lWiTBc zhXDhWd0@W`?dQe8PDPm~m&nk3Ar9+)Dlue*=qW5RjXyVSsI5ffhj!lOqVBY z@4)JH3hSbD>0@)J#kkSK6jr>{<;CrHa6p>E$Yfmx+_-~`2PwQ$rpr$s?%>m|d|q#* z&dQq)FkbMl*6NIid4R_|^EsovI&aiI5VdPQ<@IX(+h2;<1Nk)jt45iFRP=QDyriVg zS9_&U5v=x8jb2Zrus)H`y?@lGk|SdEcs|n`)mYZ%Aq)f$7vG8-@ep0&jp<~33<2}f z@iy0(Uq>9nrCI3+{cg-FosVJg!gQ3hHsOP+qu6*l9UfXHoKSHTvyP|Z{6G^{M;%4& zS)sXaLVFxVl6M-E4i~ch%Yp1!eHU9#7jn_3flSo!Mt{L^=>zFF-W$!A3i%^vAWy9E zhPB|!zXo#q8E^EuQONg=1Nq>UH-7mPvRZKvQ%bzi_I@Gz*ACyj>}Bmq$Fdtrp|4*_eMP9_{8R(e80Jnp5M^X{r+YoydkkVLbYqD$({#HcC|! z@UpKG2ZaWBSn{4E-PrzqQC8|1P`TBf#PIUW!GpAIkhm8T#L8nK$}I7}L)D2nLSHMn;-3%f=po zrg1j3nrHFxPb+wsC>6YUgCc)j>2HnqxZVJB|Z8A|6>OBO9F!kZ;$cunEEWZl6c z%zAp6sSzoXgAYov;ofDAn3O7^S1DxYFSFf=RLQ|myz1Fd*Rc6PPH+YUJ`Y}Ub%FaNbg#Kat!4s)dZi7oUkaivDqZ2McmH3 zb%u#QD<#>#itx~UQ9MmU$TX@>l*%9Bu-;#EzmN=+& z!qSfIWOi7nn2(Z4c8t4a2MgnTw3%whbIa{uuqq$Z7khJ}SG1(^LM28n@}`eQjHJin zO4P6NrZ^1AZtF^93DysZm274uUJ0(B94A>brV>{LXMc*5EFM~k?Sez+$4i|1RKkDd zIj;1QOL8Wc;`+vO+&xq-8M&tv6Lz2Dw^5>B+gl2?!{_+dP%g2XS&HVf=Q!|rp~UA@ zDN_8;@#5DUiHmDli*?QzZO7TY?eKI z(DllPXSFRugYB@=Js-unwjBP#4$hbJF)ZGe_g>mz(zSf-dS%O}O?J3&As>;~Z0TcZ zj~+rZQq){+S8c=C*0~rjYO$RA+n}75gIoP9_~OwvT+hsbv$h32Hi_{rxd>Ge9J&op zhvj0l;4w{`uwJ785w+%wQQ3_4k^*cHHDGzdCLGvSfNtsL>~wh(8lDv3W28ApFWiJJ zMFm*@!kjDmZ9=tfA?oj&Q)T!jT$ogdi4V=Wpmrm6?kGgXHFI7G*@!<+3$gWt`TzgM z&yDOtblYXl{bx7ApsO7BR*O3N>PAGG%b_$|eCzr~ERe{tK23v;lPuZ0#2?!uHMqyv zl4rF8u=j-qeR^B6&MKgV=5eY9m(91NrfLAZKWk8TgC&*P1R&>=1_vIqWVKNMK80!U z{S8YFatc5j!D-Jd`OmHZj1ARbS)3(nZv|jYhz6VFmQ4K^fGZz0I8kLHbz{Zcsu}z! z&gkBo0(8%rL2GeF?qLORiJieTaYl#V6+rfC2H(B2!|Tcd43G-V2Rl5fF2L5yGnf@& z2d^Ima8#W^VLQ+sTFScssHHcT9C zkL6Da(J$DBaT0sn%_zjqyMhnfqavvg@#kz96KxNZ=t8)=+AvJh0dFb_@nwz;pUrWA zQgI<3jIsSgKraB$4|A8D^-dVHzbO%IymZQSonnq3zQ2i^1#Vu>*Iy*o? zu?XkRSo7j62mDknLfgI8^j_=$vtdQp?`q8#s~vD;ZV^7swdQ&k2kcx>1gmM*JhnyH z6nQmtoHbp|91s>(gntHFbC87tg5DM3xQ;cgCObf}st9?W%NZFk40*Z2hhED$wAFBo zYbu29_2rbe8;+Vjax8edoQG!)$089|^Sf`RWScH*%8Ssa=VpExqYE8_V)PsA%Yw6? zCE?N4=sv`kzM7vUjrG;g8tTi#*FQ;2jJ_jgv@gGn{3PkP;5(+6iW>DsFYe#ti@yU! z-+j3kD*}Ddy`dHwTV!B;27YJO;;EAi_XlSp?nN!8n26e2)YLU=UhHW01uzHci zMJM|3^!%3?@HB}(&-CGrqc5@WUJ?_0`cU@xCCt2%xb#sUCZxS=vG)QMYmPhV0IQNB zsQsAE_(%tg2`<9w{ONqv!4dm?MUR{~o$2b1NXRV0=+No((saZJSrMN2PUqDe2Yl#S zj8@mDb7`IfUTG9#&WY)qVdx0OPQ}RFKAq>+I^yn-Vw{{cofTn@IP$Hf{~zjEbEm2U z+Vw0(rw>UqmX6}E*N<^b@Lk_gbS`>~RuM`3CukJ+bbNxHg7>`~MQ@WQ`2Hq|@<*ds zx$Fs6g(T75e-t&(JVCDD@ZeD#|NIFYLX$Z3%_y$Ue}W@HNnD*WioS}zs27}-If@yB ze9=T@jJc_1=d|@xxsC*RX-uFfLlO&##jiP_5FNXOhu~p$H<~94` zrr?cVMzM4Mr&uF={-I(N=i5F-reKqrQ9QllDWU_CxV)3-C0;(o)_Ee2trR)ROOB8Q z=6p10Bc> zjWVa=j14G{FB0#ZIWrwMppB>v4w#Dksj~r%{fiMXM)c)5>+xf5F{}od^WK;BcyP2B zr8?$R_gjxqp~Y}%XU>$D>rqiwjJgaH*7bM8F=IJeRhn>HTQ^uQlOz4F2?GQ>9+Ts7 zS5tlyJpZvA#a(`5U|uHrIAr1H*I($Ep9y2?QQ{Gc?!zOX} zYetzexs@9(?UuuRk||?*xgqCLOZz&CrhMPg4dxkgv=OX4+zlIQ<&deH5`y>W6k(mK zDX%HIA-q(MoOz~nY2${Q>LPB}o3g27KekcC?fFgATB3m=OzEiLhRh;) zi@l^dTX9#9@hsO1L;|e%VAOajXa{2VP%BQJKAz#`fe1TbMO|3%$JRh}I&8&5gDtpo zS6~bKFV89Pz>^*f-x7h<`xN-+X%9NyiGZu%9v^#f&Bq8BY*OF_c@H}Li9qQqV=k$4 zgDhB%+i}Kh|Jx1n06E6x7}K=I4b4a7_$liAyl-w$IVeX#D-*`WxgqAb9P#QVd?j_m znR9Y1?_g?K9yNCpT=hkYmzC6NZg)!$?;-8oW)oc7z)&|CPfpSm=kj!D+epR+I@72D@S9 zVtI=gUiGDjrS%;+Xv}N8N-tv6a8=gWzQ$ySdioFO!2^Sz;h^9j>OE*M@)<$|n<(^P z=;&u?Kf9hwzl!l0&#?Ag9SwGhb3Yo0X}8RHVZvH;eOxAbS2M0^y%q*}Wmpny#`Pav zakEo7mflQegRK_pP6fc~Rx%AGTAcbi0CTS-^ZPI@mX`&<@@g{EyJ<16G5`avC9_sl zi)P&dG44V#Up8v;n^hqCTukQGQcafG1fu_`WHyFra`enVm>){!v!|MDbtDk8b|=%s zQa=?Q4Euz}p;3+dBA;P_(ERmG#Vt<*@X#xn z!I!isPYu8a&tyhQwfG}h)NI0^?k~0Ib2k9Lg`Z23wWuBwfG&c^lxy)|bpQs5vzXMZ zMfZvTOuU@TE1KF=Q47Rk53%Nf+SKYCh$8o7hS_PegCr2$OM5V+ZYI|R24P=X52^_^ z4-P{0lV04lem0kN3Pj(~UUXVJn??DehD_{5oprNWk`n;6I~Tbip%c4|4uQs%i=6$m z6PN4@!GYK5ysY{VUA*Ek>qmqcAU}8KVT>3yi{|r_Jar*fLn~ ziDvZD6`Gu=7J3JRzj!Xj&wYx*bpD0*@Sg1UGYS`1|3$^fp4_MxjYAtg^X<&1aA})> z;j2Hhc*IjEiwu=2*hBRx=4?;E)P-hz*LN*Ct|-TVO=gVz;)>Ik$`N`)hwZIyV{cRm z!cXhaec)~EPAfr|-8yU-avNI}zqHWk1nSVR|80!^S%S@xIy6(cjUU~=;6xu?=0@Ja z@%~@1*fE28arcnFClP+rGMM}G9~z5gJ?j$?+#`eKuYB;iT4Yke9{E17 zdYu4ItqksLcOQTJ6HwVHgG)x-$Gry$m?BtX?tS=OPr$X-8B{uSAG6&Ppj)5LTQBb; zXh#Bk)@E@3(0lk@mxylLGFaX29_j`sVfld!eognryiG|k+R(t2XAHPg`U>lJH1O9w z0~W=-g2FsA?n_()jhB_!IL(anGuPm2Q6-ATnsJLBg5y9lYFDnoHM1&sD46j} z!WuLmuWDiE_JIbDKWD%m$*(Z&WCO?SHDK}ISE#+%z~L?id@|%UZhAGa{~QBuoBtY9 z?ln+}dmB(*_8Jqy8d&>}0fV*Q;7eqKu&2*cliy%z zR0BK6^!W{MP~wnDHT7FCJn;$R1kX3Sg@gM(;f+-$do8|&z0*FS6*6gg{1#T@6Q+#G zI3Y}i7 zGbH8~w)Fpo`UmPPPPm0qhi@qIP-n-_w=jF(H>e#^=k#Z{kRSLBb(_?=;pHt%&-;el z#p=8qatp!jt6{%Hoql1r5H`FT#OCB20z?iN2 zd=(vn5pNn8vQ3|cu_2HJH1Om~eP%X>V2-qbhA#Si*FUtyTqj}QV39t9<3doE*FY5; zecosYfn#w4UzzH2;?z*IsVhX=OQI;X({b z%fVmOB1A1N#Ko)}XoxyIY-}NV{>{PX5k=6|D1@Y6E`pqja6hI1w9SS4t|EBfEkMTR zT+H5DgdUDb+-7UcgOB}@ZI#4iCu8QP_`_WydWyNm9N***>(NO(y2zNf`UF5}sOV*u z8&lCH05AI_ar_!%uGkuYc)cWEJ7~;^Y7^{U`cVVL?pixH2n!QxOlieG1O;Gt_MIh&5oL0LS#?;2v3r?=3g z#%A%%@oTvKA|2l8S$u1C4Jk$GSR?E=S?Tk4_b?cU?;ani&&!RWuomkH>aNfCN@3U~ z)|uBqpSA77TCD%Sb32K($wupox+n|*#*KW{SD(3i!Z5(1k&6fDv%~!`+@93Pc1HR% zOA3SKj7Ape=+pRb7~afmO)yTA-`b^sy4x0^)^zE$A z6lpjjb~Mtyt3JDY4u^b21A|?Q<0NsEIeW5Vgtn!A{kV#k^><9U657>0bZ<6fKbT(Ub1nn`wSw{$%F zZ4X0JydB-Qjpx@*VVE6f$1dl_bMjT;hip4ey*Hko?qQgoWycR8w6F69r=!D@AX)^&jSzMe8<{!J#wB00^feev`js|GxNaqn(x?oA&L4?eYm;rD?C1y z#D=^+OrQ1&tp)Q(A5NJ33dVbrXxO1IZ@Rofs%Im+x9!H~o8DoNcO&<8@5XkQ-@)f` zBXxUqBg5a}XiOvBM|R_KvD(Al1g;8SJL=-SB1{`z#y4#ic$ z-cR&d=ogB~;!eR`pFt-=@m){c>x24icoq8pcg$*>BN4UYpZ0omeb?i+L}#dGMPPW81w$pZnSzFF3oyJ5;)Bv$4vF>EmKP=Al1BT~5VxDwCnzK8vq6#g2vjLnhv(8n%?n~Rpx;K)79Kbyg(U9RjA zei!|&Ww6x&S2~s7#W?Q_2CZ@>Kemk9HA7M;FHmCe;P;qgn!?9%N^C36sN45OUNPv# zpyK!NsB7eip53U}`2$Q8o2b;e8wXf?KwA4Ies0vGz3T^TQ)}Ygay{Y zel`M&ESmV@Up;1qMxd?WU9{DtN%xw>(xZ9-g=Cf z{SkNDe#Jg7UG8j1hiYj#>Q3siZg2*+MwVmCE?sV4lmXw^a%8X8rP;X*6epHLGDnvR z;Tf3zv>ahmb?H`<(c&!j4ALg*ow)4%JIoHz;*m2>wA%I_=O1YC;udj^=iaxNYb^NL zLS6RM%tXfia=a1W5=C)~bz0~&F+oj_TTZrI|4^~7vVZiba{MC_MmF*FUtLT!FD~3BxU6#~^NU?LLGYi}nLJqJ!VZE}8Z+2W?!r`hL%k-0aRn~C zCAdv#2D>!4@YzalXyj%vxXy+91phY|#V@PIg0K)+j{kw=@zqd$FY4%je;`e_8m~Ww zK=a}cWYvCyYfK0fLViHsRg?SGoVfXJ1m4flq>bQ3_aZQJswU@XI?*FJqJ=&u{u}yy z4S~|RA6V-14bh!KG3LY%xVU}8p01(j6Z8Y$=Y9j#LXjK%16xeKp`CgtJYN35{(rt9 zTq_g@40~bD2VX#>!Hs!ZmTe^NV0;M6SFKelBzg-1o{ZQn0{fUly zt58xOg02QXp|D?!XN2HP-=CM zvnG?^#5#kI7&kPFl&#}^sSjp3WYIop9e+gnz$;DU%mq3$Oo_qRye2N3uEX0(vB><= zM2^*AuaU7>Slz@7GaVkC7mKDpO$-~TL)BBU=%Cn4Bk?Y3pO1y1;Jpeu9CtYuv8|dp z{hN3TBV(~yuuiTvcm9b**Y?d+j?-ql{&6kVf6BND2V|lLa`*`k(f?cIhoJkOpEy%l z3GKHbIQq2Zem5+vLiLppQFr{rqQzC{yfp;<&i{m?MHR}NLvZ^2Pee?pf`VxXCj9sb z-#-S_`*Id41O8xly#e1wo<-j|f8cUo%CjH8N}9hba^3?eTiJe@H$|O>egO&;2+O=1Xsg%uGxsoA5 z?;`lGZLXwiwy-a_O=OPbSDqr*3ZD!bkR$n!q)2;zDV-k5B%!H_oZ~0uK~hTq3;p1iQa0?!l2{4-s25U>mSswGg?^CWW%ikph8RVTcrN9` zpbSaOYefzaoHsB-@+e%9Jp}9APM4gFP^6aNSz76mHA1f+EalT3X_B!*uO|5Sw^WIa z(Ca)C8v9g9nV%v%3w{ulB8hq?_Vu50Um*5Uv#dfgvXv5Nh&?V;s+9cOMTs`IrF`sB zDLK_$i57RH>~CBp`7lI@|Cn^AQR_44zpNhNQ@b;*;55Sit;gT_-RTm38i^kDc(S28 zwXdJX8n1eMJ=~rCyH3L`x*nY#bmxdkr%{nqkN?{2Db6lDx>E9GvJyKh*|Nut8Jv^- z5j|VkveJJBf2MuJv!)r`oil?6et(2%;|yBV&fw;5k+4&><=1w$oT?p(mF;aAsBg;> zwMbO7wdF=*TV{=pMAOe1w4Y*2vr&<_xnD~6QbpJ;SK{#VQaXH9MC36gzFyyzwOS6m zSrrY{gP@`Y(MruwMy?Z~rvQ7!JZf7fPK zi+cCk%sANUH8WS#yMvF$p~|qC@t3suAvg}FjhY!E>fQMzaWEBpR@A%7TJcz9-b}rv z+U&eO9xum;9I`~z$}i)QobS%Nw|nzYS`0QNxbyA7-V9q81M7%+yi#Mpd*2dqGIAcT z78)?cAPMzR^SCG8fb)AL;aBxMre8AP=9x)IRhmzw0|s0jEunW5pB)8{IO zXkDX z(JeXzeHYea_m3i!3yxb{5A&oVG(Qyi&AlEut4k2IHU!l#>+qf>xO5=|jzM*J)U5=| zf8h1Wq>fn7>uZ<9k(5m8Zm6u2QP(P(i-n|Bl=56Zs)p1#PmG2*EX-+n{Tj68jvN z^2+iySX-<_4Z#;4wZV>jB`OO(_q`1c3H{GwBFCDx#TlVb7UQ8u+agcs!v%kgZ;LXa z_c|eEqkcP#t5)Jk!K%yJVd7UME;=CPJKuIVRj)+HlTt3NZ-+azVhw`#OlXhCLf`F_ zlyT?Uqm_a(TOAadyYOl;h!RuT*V0CL{N>5AqDWn75sw?xlhgfGj zRit)S=5fLAXQ(1i==a=|@}#FKehB^1j$hf|VInpC!f{7%sOv;-NestZ!6yz(WI;qY zas_w4K9Ls1;b<0I;Xjf0MUUB~^;O26w&bBh;fVZwg*P8r()UVu3;(MrlwjoO5DZyg zFKWMHSS<{J>VC6S+W8va|>9AAqOL#VzbypPIlar#jOTaWIo4hoIcYZ5f{Fo zUhxW3c3aY_APRHqFY~2f%c;@0wnfTUC%Yi0k1}1vo!Tnv0t;hhP8a$4)rfx}wN$3Q zo0LZm{sUDlEajAhw&Y1`FwT&Iu0y>pK2|Kj19orc_mo#zdh;&px4=!Y^_zxPe1&Ta;XHv zwQK2|;txiZK;E;KW1sn>RYM8f2i3BdhdUf>vVuLNnH6$Picj2#!@l zL&uJxcwW_vE!|{@7!@k++g~{T$;K|xBfQc3iyxn|u~_s73k<}#Z#Jq$Ul1|nFTS71 zhJ9TK40rv-x#igyBWnAIJ%5q1#Etj&jNr!dMCc3NePIM&6enWpLN{LhI)cW{iMX)9 zjV=l!xw|eA=_}mWTYDt`d{2blIycIOj^qY0cinO~dQ2Y4LbW7>%ypyN?2-KaPZA0j zyK(EYk@W1BgkiJXxG-`ggZm`GVxk+fnny8IynV+k-FR2cnC;FcL7Q$=q%pJolCT7B zjG1Z7zK@gOW97zO>x_BaI|<(>xUt_+WB!a!!Z^WIp2i#>E#A=aZVd7>=7|qUh_-O! z)L3EjYZ6o^yYWw&>x>ezu>DyEf1{pM?v`)+?Z0!-BbMGr(cQ{b|Qz^`Xg*=DRk!6 z(sQ^!F6=Hv+_GBU?COtIPfOvyyq0!9{Gd`;ie>9+IX}e@a`iF{-d@Y2GC%y9P=(@_t)}dg&#_;l;P#^TE712hx!j?IB-G4bE6+ReJ{gq!Ews|_};A?C(hUM z<4AwBK{*=VUgCZvQRBgIs!feWE5Q|ShVzp|aM&eYjUCR*onz7Zu#~ND zXdvpCGRGd0vTV8r=Iv1CY{BL#8gSUF%+ums8~jWirE8V>K)he;_o`!}(0>%1XsV8J zr=@bK(@t?5pd=s7o$!KMpJbHm-^iSFe=KQ=XXo0%Jk%V8=9+k(>NteDhS9iO8c)@}L+Cp>8bfpAdDdbG zEnK1zo)XVJg1@hchEq&Dm1Yj%zH`y|5*E*s>xQuXvuJD!j^}Q{;X%<*c@j@o!P^91 zx)aa(qeJ*NBN}m6;@R!=5dNzagPCXI`Q+XZR`-iR-obcELWgkE^cZ9wh^IVlh{%aC zSg<{wyS@$K%S$mRaE+&C+o2rwDh5lI#xtVr~;-Qq>kHzbu@tm-8D1%~SA?p**ZTp6D z#IIP`=*6?&m7(<3jYDXccxL(yrP}y7>{Bg(?`S6O#)I$h4cZxL6CM{9X%jz8LuD~Iad zS`I(%kKYSh#@=|(S{AAMqjGaO`gn;qtJV(>@0TO{UM*A7{NRyQj<-IweDK^4^E-aU zR=--NUGanMgs+(IU(3K9e(163E4sd}W!W4*==yxcAHfOZ{O}{=D|{nrsj4ryLj{&4 z*3!E9DSla0U}#1yuc-JzeN6=#i>s*q#)=R2M599R>Bm+);TH|LtcvaYtyq;7jW=F7 zd~THpqo1PY_0Hks{)sp~q!^RS+w;XR8!q=qL;KA3Jf>sAkDJnv7}=hViZ<+Pmj?IX z|D)2p<8to)Ki<$#S1KW+(4Z7bghF+_UQyYbmJ-?SkiE0Ved8_~_FgHZaN8p)T}`xz zXp_>on#S*Ze}Cz(o{#f*pL5>l{dv#Fl?DyIj^nQWS-{R-JZiWV@k(uYJFFM)b=!&t z(Fb0M?8SEVThP688ym&^-nhezYpStEVPgmvw($WNVdqhE6T!*)3Dtxn0*m$ZA{4wIIv)6e@QdndKS zuN~?P&C_7ci18vnWFteo_pIQx%!a{T4fg0ao{v^#!|RE_QZiC*!16y^Y7Ud`3)3!yWVDR^M?~ z>=gcW&lJlCwzf}_aX6h8kL1SKM2zVc&fnul@?c0JWP0IzU^9|uRwP1C63#+{kqp?7 zh<;k(3{W4*ZQF#-?ZWw^)|p54Cc;cRoHfPHTzD@LYC7R8%NB3>nutHopKTdV?ZA=T z@;~>(@MUG7|joFlHhQqk{=>RGw62`s&_Bp z{VTturoQUL>Lr~2=$Ev9l{yd4T|(p6zof7BtJ7}E5?0RmCH1|i&aX~Om@@O1bnqp0 zI&A38msdBy#Yctqi+ZzS*#@YsSK;Nwy}5Sa2B?OpaPOAh46IoXm#Zq2Z|zOhxb<*- zu0o$}y?J!adbqt;;pFAL`C!C)s5PkYzZJbXSz$fYbyR7(t2c3f9lZ5axp#MOzTdPC zK7Ca=_gHVrhp)qBsxsktZ-)L}i%2h3_Bq*`L!Yh1^;N1=jOoqUL2L2jZ&l8|)thad z*FxcZo>DgB zq2H_Ft*%DjukkQnl8&!_inL9Lhx~}(m5SVRCLWge({W~nB2xq6F|9Hk?yD84+>(wt z=1-7+Qi+Xk(or_{3H**L@!9ossE&Vv`zMrme{VVttat*aV@ljLHyu%dPY@ww4w$E7 z^XMl~x~s(HmGMyTla8aC6`8I30^Ll+Sql`oa>xtVj!uXET18e5eF53{bol)^Z6d8Ua9#eay!Qi_hW3%J&=vOMPt18j` zXFLw%rlLt*i9d~Bz&AD()NK8h_{4Y&7dlVesMyN3CKo>7ZF6^;4f`tU;0FYicIR_` z#eBaH=%3x416O~=pEB#te}Ic_4}O{T6$Um{JgPZ{o63^m-KUCqreiopRfdgwR&wa$ zw@5rvfm>@@D)Ri3L@)pl3Dq6{ZKDLsz^0$b2T!91W z`B*r=2S>lDz^u%CEML@vhQBJ1buAwnK|MIz^c&7c=RAN_`@{`r^|+e7r0-_T=zK4#zP!C95xV7;TB7fwW@bbU2??5yYBzoPMU zS~WCw)$_PZG?Kllk$j|{C!(Wa^|~56PSvyDp=fxk)?mr$dahm`jT3e?=ykQ8np2{Y zwxk9hZq@VrplB$cuEDhj^)w$5joz{v_`j^@i|*0z_+5kU>Ghne5RF4NwaCt`r|Rb@ zB>30j{O5We`VxiGe{1niVLhvoqcGw{Ep~jb=Z14p_`7W#M#*n8T*T2ggBl?oir&wm#hAL^vSh)5nVg|S2zQ|+2KLNA>bzRi%n0PvDH%9@uomx^1v2+c2F8@tV3%JY zH|)y5%^tNFGcS-=|H^>f%+~TDwtMO9qre-XU$C<8UdDJS&@1c<Z30(bKJ{k+Z1S9`31EuduerAfmt2D!b>NNsu5BqZplEmu3_}~TgqM6 zGw{wNjCZz3Ip$*qp7#yoj36mz=4W8X;4nt5l+sKq6Y)-A^!1d|sw@Mg*|!+%9mL$( zcM$mb7GF#cV${Jq2>)`6SLO#XbJkrbmfxauRS+At-9_q;TP#@~M9bW}Sg8?9ED7Sy z4*y~Ar37qw`Wz}zD(sV*0FyJK_Y^hg^3?=v*!~=^MGYEsEdd+nKF5D`Dx5v|C6?Za z$8xy}zYlqdW#RE~*HWdY-b?gd9gijLRarK?f%o=bNAvi4TpHCtUH|L&Fs&Z*CN^+^ z!*#@a)nn?U2Cmc>>vQVS&a;92o1&o=R*xToM`T9B;$%H8&THW19nrA4R^RIFOWnda zevXupI+^G+IgG;=OWDUR6OTQ@Xcj2t)!CVtKPQasH%QrUUnb@ThVl9$DOVg5bDf<4@;QI7120n5kpJZa_%P^*7 zJ5i-L6XS1(ahi}j)9rOD-@fG;$bG{yV3Al04Q~-I!vB@3YY{y@kS0QAk$D{!PY$Gy zkg4~rL*3Ls*1Kll>c4e3JSvdU{W8!#sSXBifpilxiA{BQJvNXBOfoRtMvef7K#o_> zz~hDTRyJJz`5jsg_vB!gYJ6#D&XN8r&@!qmxVPnITXQb%y#nu+wdD{u zbNZGn$ILx#S?Og?pNq?peX1=J0?c{+(sD>++H%u&b3UBE9M6;5azL0l-!-FX zzG}|8(q%|(Y|HRR<}|##4AXTqI6Bju6BaB(ftd!Ii_N*ue3_VyHF&kjoM~kNXr8V? zm1c8J`W67S#jWk^ndii#1yWe*X|{?Bt33%=wdgs5 z#%{<&&yiuAbx+Fv=QD9_Y#58Oq;z?aiKba$JX#^8f!S;P8Amx)FK}dLJmM@>Ia&4s zzwP7k(^-`n7hgclHy+Utv8MMzeB*eGT&T*WqJQvt7mvnys?-wwOdpjOC|;||B^TmR z@;M%Ln^ZY#Ydppmi9T$LDqZAGEb1x6-^rQ`R+qASsS|z`YO-s@L7EnY(4gHdEdKW( zFBODv=a(2b>^;b*A490|Ed~dJ4$}F32-haXV9vUO^nMq@-^nqETYiuqvqQMza*XI7 z4ze*Tge_NNFl+Wf>I&W!6@yii5Ax8<5PI#8!9Eek{a!nwSH327CrKIB(FtC;nhbN0 z^2ZD(1i#g!L0>67k2)bSLzAbwNE!ED=$X=5=eqyph5`q4kCAZXXeli$9ii}C(n`j+ zt(4cQoN%#Gll?TL9MMb|g* z%`Q^w+I#f33gJm>F?0O*hF!fwxL}|P=k~3HLXQxRF;d~nxvlw4#}IDmuEKBrt=A8j zh46@j3bXfCVzx~P+t~=2$Cc0>9wK^c6>k1kiNk`Gom6ONP=!t-LKr?$g>|E=5Fxn# z7!}@FSA}j4A$&ejg-b72A<-p-M(!$Xd0PcKiM=i=T;A?GzPp9cSJ?H}uMb{9XY>oJVPTsL(Q@y|IwVlmq$M1b+?X;w41>9i$A0Pw2oX< zCg$aY&#mPD^pkdDq|6-Xh-=vrt{5w2ON#^6R!jJEf|LqJ9Pr3ai(bM%t-KwuZ;BT0 zO_tKPmjk9P)uNH>6Z~42gc-+Fxz^+fuFeqi@o7~q`}G*6?n$_JMwP$w9wT;G5>)Q1 zw)$RQE`_mgtt0mZW<&Ez7=u1Ivd@NWd=uO$-I3d)vXOr#jOtGu`QTGF9-kGt;-({e zcF4hvqhZ{2#*y<~b8sp+i~;{TGHzoI4(<~5 zSvc|Coou{~61m9QiT{4i#$my|hB(npD+eF9E3vL61Yb`|7`a@D%^yN=?XHAhb|`Vc zrw|w?OL%*Q5*^}0P*Nn}rjzDuKXn;QGBr5;lsVJeFN1xy25zZhhwnOa9xZX+GM%dZK^0r47Iw&_`^;&Q)D~nx&XK}e@5{gr@Xc07vhCWG%&CjC4rCGdrG6{wu`gB+{ zj`pg>kZscE;PvCUF{cQgi}m?y-8kOPE5gMw`c&OAj*C-^aBxg#?yMWjZr_TL?%SD% zipKK4t|iDj)tPHncL5dW%0!lFglA#4YN4tVG@@7lf@T*`7qot8Rz@d zuvB|AJ*slBuxAawHM?<9Z4Qo$_5EMm*sf15>fIk=qsT>{x2e;4@IyGBO@#Szb#`ce zfZy*EvFg4$9X%f*wk83a$E#D~`2Y!_N%;P;_4+s4M^NdU2#2xiJgV~uGe#uhx0^a$ zzCJ{xpU8(U>a2V55DI$|5j0Yr1J!rawEQQAe5yq|#obg%{E35I>TudU0%ZppP`yHh z`auyme5V2N+gj)08)*rwoT!a1PTJfpI8H+wJ)E^!{4#+}3GHypRhw+{mKzr@V7t&4 zxY+WBW*!UJCGiE?*1X}dSqoTM`vMEf-*CdX1yt$%5}AT$OkTjC$uH6G(;Mna7x2Q4 zm)M*AhQT8j@ZgP?NV@ulb_xqvv^D|yXN64Fd=83CfPeTKM%K=!eRcw#3x3u(pJmF4 z=o#^bc|Yfi+?|L;2j6gm(gMbLCF0+0Z|JMBfPohivC^^&FTUN1`Jy&OckV)+ysc2( zEumIZXFmA46>rW;XjYoV3-R8}KA(iG-?Mo0qc^2VNpMrh<|CC^yrTXJ@@tJ$%Zh|< zkOH@yZ=_XDB;xNWw6fdns}V3SX@J2c6&7BLfObU#&fZs{*7XQ9R5!ppU4^4^B2X`H zz|}$(h6p~?vk{v_kMvyeC=Qx7;+L8#i0va zzK-d@6;9y{s9q3W%%Bf8R6 zux?Zt`pxf3Pp>ib&MU*zkzE)%Y%JYpm%@H}7w(%pmW#KS;?KOd%~y%zFNGlTmxSwP zD^YcC2-Nkp*n3$d@67AWo*DHRH9wMNi#zi|OFeeEN0Jjeb5)-P$fa2=Omy6(jDL!=m?-hat z+h_XlRq-o?b;@S<93O6NpNzKVxx7BkgI*D77$W%gWDoXwnTB@*a`|ee2PL&>P`Alt zhPMYxdZc5J;A}q+CX7vo%A!)1_V(q3$7$#@s+1b)zU=Ze4T0-J@mZx9v*)X`^lT{R z_byrmg7vBJKbOVS^PW^{OvO}{91iwy=YmJVR)VMdxKr(G8Z7j4 z7=6K=@}P9sEYD+%uxI4gWONmL(%6@Kb!FJOK97$^`10ux8I}sZGDEPp40+r0n6Sc^ zJ$K0PeqA2#?eb;(Mj7S`{&dWj4_3)gxH^yJX}%0PF2j|SJTC0-!`;18@bY;c9U=U% zdkS{{m&XZ{d}#AUhLP9v=zut;nD3pP89xMGE#=XYk6ECzNy#$-gP#QZufkc z-ByOf;d$(r>cbgIGMqV(#}1!;_`W$AJ$L5ueSr^;2)5Xe$Cq_J>|UGP%2t2g)o>?| zrOSP|CaCpW2K?8^c>$5A@1RKCr;QwRDiTg+ip)zAd^r+BM=0`KW+QEHM#5@};17at zMZ#d6B99mdoh81UwM+&ry*!T4^rfNT-)-|)E%cGBk)c{4kC#4(7~d?zu*O^t6fvk7 zBg3|;T*luQI+uvIm*g_&f)7o<$#5q>mt79~aHLTRn%{^R+~&jO(^BB^AeVP0`*6dG z6#RMb+TMAb)83bHCuGR9&f{=pUpi&V(9JxL&#HYmUNxoFdu=b~vHfTt{_{YF)y}27 z7U0W{{%QDcTq!qr`Le^ZG~5^KFGl+^_jH<=ZA&@c-j}IwTgP?i-x1)+@90>l#;SRu z7H{~DC#7nf>==QT$=^|xt;Q(*2>4lihhd@`yLE}cYnAUvNLJ&Xt`TtlRD~63YAi8~ zz{zJ-2p4;OTqDrsY!x2;Qe)bR2pkEj!sm|a{PQlgxe>S%{~e19)VRe?%w@&j;hZGq zCLOV^S&fL7YFwxtfw9)rsC=eIZQBU^oLmh)Qsbe45eQyWjj(%a)Ugru?szpSZmaQ( z=qp~tSL1=$+kIvPyvnPg^IVPL(<4x)RfD;Y)!1)i1TI%|&e$`a=%MxbkQ4O%kQ81ym%x2tL}UcC2vd;}(SsKps!hgr`f zP&u>~bqQ*G^)v$ey=&nTuf{=7gl^kvarB8Ak3Wh)!o^yAd!WV+MG@GPRErUJ)wo*o zD2!`r(N@?t-R3Bgy4K;1u=(^GSv(ctNqgN?$S!74^Q0#uN3_m4f5zjL+$>55d2*h8 zD%PiE(bLtFMmDK%dy&O8UY^YFlZuY_vlzO}lgEuxaqC_dFYoiD@~Bk&dDow3ZY&b@ zPREmr)}&(HyDTaycvAmbD!PgKHTAm(iwjaQThz5>pFH@wV;b6<_)+b4XIOO5WxlQ- zmp|`}Ll(O9SMcM#O`Tz4t;;Euv)R9IXL$A0WzX}uTqolCQ;iH+QMo)B;6uL@8LaP$ zI1+wdqu4rL7TDLbxX6W_BMP89pq`sPxp3>^0*o}T=kU)i?6j}|3)jh6A!@`Zl!JiNRbdp|T`o!}E2s!^@hjNyXM@2tj5F)#cQ^4AVl-*j(iR!dOC1Q%tvg< z3uThF15cKIgwMNBc2RVotZM=Gy$g!0DQ5lrk`&}y&wr%?7C=D@3O zKjL#iC`U^jSgufjWo4oKa2yNpPh}{>k2vtuyaIIl7RoI*99X@# z02k{*X_ewY!^i?y{|IG%xdUBg1$fXL%4cmHd8DcUu1%r5+{2Nd+J8ctLKvqEccj{& zPw@C1${{lxIcdfxd{hl%L7*c8*M7nRl`uX(;K=*OKH-ga7{9)8EEVSgT-OMRJl zzja;fx@IS*`nTYQVhh?V+eyEXEzq=Y!M6oFxvp0W{8zLfZpuzx5o<5YTF`FoTl`Wt zX1lRJkTvx!7D|k1xb_E54tOixY0SRof3%YM_t;yU=wVE+r9aUA@mn|yHfGd;ANW-G z7W#tc{rv;i)w57-Ys~KZTA$79z4cQx%n;7%-g`aSdzJdB$V;<}J8*4ViasR_w=x=OB zQ(zo-gw*26u4bHF70220MXor|jInFtIAT~WrW|R8d~F;%YuDoV@n)P_AIIv?H7FLd zt?R}(Cf%-qRb(@2HpTJOz8b8HX~yv_aa=X42G9R%#>k*Jy4ln~>uEDO{~gDl$~93A;q;Ln*H^)nqu)pJ-^I+NE`GO*%zHa#(iMW!;Dtv+l%wlJl%P6 zU3#nDX}_D08SKs^aqsoXIlMa7oeQ_MUhn0UBVx^+Ywx7v?BEn z_d2=rXkZ5RZqH%pD0dz{oq^=PbHps-PU{yL7#*6!@qX@f7Myr0hn(Y1cfq5s}=iZn0jUf$I#X?ek#Xn(+kT_TgOoBABzbK0&)-;XL^;mgd*b@Jf3;~5y&?H03DQ(@#;i+)Mx_!L2#(m6iVsT494I(wzo;Af%KX{s7Uv&M#jd`} z9NzI3mnNlR{|IHS*Sp2Fzfy5%yfW|T-s0|oX*leo%#5zL7+{}AM zeuACGreV)W#6%7 zX$u;!#!>gdcciXtX(jXDg*ZMOU5$}@T9A4!j&)l_p1<0H!ZUH~D|~yQtOe#r;uznp z27AA>U_?k9e@&`Exa0?Z1jq5WXAR`GKhXPN9M>k+K(hV^E@Fi&S4^B>z{SR+d1T91_}Lq9oXuz+octB0<_2sTFq++`eT9vl0Y6Gd zQ_uV>K9zT4^W4#FYWRYRly0POKXrFy#E6ZXEZ&|9MCgcAM$WJ}ntI@-l~? zM1I(8orzz9G1Q&a{+aMk$l(Q%9~K|W#H6P=Jlw~flgcyk{A(Ru*1GV&ONE##uVdjM z7w$|eL{(iKbp5RJ&9zxAGi1I36=f2Tr=N~cUJVox}CaQxz3MY;(Nm9h%P_w z^Wy+bBfLGROYQxB44Y+y$ES69O{}Y3G{WHHy1aPYkM4~|FuA5n3YIwfiSnb( zE@SAP)n$(0i@C;7xTVWL!QG8ausT|onaBJXvC0HMG}G?5NNETk0|J%UK$X(dQh621q}hWv2=HoMqX7@i}MNZi+s=r#HYP^(^l% z)~EK`1~fcB%LP0186VMr>MK!5*pmUR@0wh?BMOV=WgxpwlNWYIp~NKv4K zKO{^QdVWdIKy#TUi?2puPjd!Rnlzaq_*nN$IM-|Pf#7Il;$Dr=U+}YenXs#t;}dY$rpDKnO+4G?8g$B(sBhdv zTgz*>QKUp8qb3%4T!UkS66fkSi5d4A3Tl-YuGPfi8`tncRhfCpOZ;7a)r~x@8ifm;l)0v~k=Fg9;Hsz0i}{T_;T45}y_H+t8`-ysktLB(6S;lH z;3n25M&e30Whyx}k&%%YYpcxeLz-A9X5`{A%4`rZXn1WjJ0JRj@1MKT?)Ye0J!~DD zf67~1HSx{gk*J-Z%t>ZVEc1%QeNiKZm^ZQ8;7F{HD$}q}6DMd#qR&WW_7iV+ExU># zZmsW468a1bjl^DmWv(0BMBlTKc)m@U2RH9v=dFeKxm1yhSMQ+izCuWMDY9e04wft_ z#Q3v{Ojx#qeWw&+;v+={EZo6%gA3u2CuIC~u&Hw)=F}_lzQ+!JZTXBv?Um>=We1Bt zd`3WjC7Ms&!PGmSG1x|lZ>EWJPJYIK@k(4Zeg_8!eTK~eAC34lM1ig?>8MXOqDr^| zRdUi1lx9T5Xa$DlrXwxWh##IQaPoiYc>m0ZzuzfP5|NHCF-A0!D=WGlTXQU5@NDhuc)l5MHUvUV=+*_Qvsi zT|RF!hkX|JM)yKpzOC`&lFou(>vBY`AB)m^;ZnB9;etK)_JZ|$U2YScV%rOL$+|TB z?8p99rg)gHOUraW9yxA`c;P?6f;&z##kd!`Jo(6ve=C_{Mw~8(irlXCzy$gCTIcpZ z-`KzR99HP|L3N`pI}Dw}FLV3gr+RxXcbmfxk$td5xjpaCn?qPw;Eq_|u{N60!(BPp zun8-JqUk62Ot&VC3yr4E#jf09(u9Bd$f+~Og`b1V5F=PB>fo?{%Fs*j)x9np;#G!~ z1LRzH)P*tq%1~}CXMUs$uly*5k6?#~EbKQ3vDj)yyNt>8mFHLznt2PVx(WYdtgaQ@zbHWS2N zxjG)yb!c^F(EeB+p56?$YyHMMgAzD?bQ>I-+mW4Y6X4-F{QcVMH7obO6q=u}>Uw28vU1Sfqhfw8-s@&@6b z4@aR>x)hrRGni^F=UKTE>db z{){_ag!#V%xXi|%UeAlrzaoI%^cOR45tf$+@ROH6BR?0xE-QekOZ_?JV-eQB4&bES z{;X6i2A>4bA>5ybeidQ+!vH?L>Caw9#dvlvfX>POyv<@L+znttkv}=F7{lWNIOdl> zWqXQ|aXNry9p-U-R53J925@ozc}!0$#(%X}#f;pUi~epv)7Pss7}uHgM;c&Pbd}{p zIy2~0Lo1oUnyb`Y)0t7*8(R5;*}_=b8MR>RxYm9$UvQvW3rf%Z#^1|hd0|8gUcUH^ zgY#nfc~uMAeEp3Hg4MRRz(7NRQ#@lSz1xC&1`3=pF_vq;w_v)J0#DC~ex z{*m7XQ_fkxU0DC66eWVqm0ju8sSJ;u4bZe`y(h3SQsNl}E$N zaATC5!`i!2J-!V4g)jB8bY*sV8Jt|@EbQ;fF&)bx7ktvjl~0|@k>Mui)-kR;Ij zUgCwfHlOy5#n8|fxb>qQcd5nV-u)L?*4&PxKi`7Grx)no*pBTU-oi80m#C1pV@B95 zxb}UCtF`T@?{N#!qhCTnQJe9pWh`2;2+eIZdGtjYcduWB=RGvp{bd=`hAl#^ohGk6 zEMsE*LR^}n$w_z17;B?v!|Z}rfcf) z&zSYikW*dQ|LV{(*yPDMQ_GbG!^)ssDCZ@KEB_f$hAwq-UJ&1Ii*6Z){*cq8vnzL( zmEuu{dj8i#eA5M`_}j3azq-3}`=U~K^sXlbS1c*T`u_F2A#7g5Qmh(W&r;zVn|hX_ zyJJ0T%3V0yytGvgNfE5C=*okl{_cG$r-#Ttnor9x;+dR=buJ97D1&9+rwlsKpHD`8 z#SY`A{CKWE9q|>>R`z`JYY64abvWJ6o}T(c*|$#}W_Gn_RsW&vIH?X6o$cw!p?o-| z4lNz+d0@s+&K*^Uay@&tUpAB>i|dfBYtJKlhVsdwI$YGYXW?-nv%e0(TK4ph8_Iuf zh;y3l_$YBGi=yh#q0x>GpN6vS>pB$5?YLJylvh*gaI@BquiM&jbYdMMs_i)0*p7?7 z)xr9M9WUC7{a@^xz|4@>MROOeBBpB-oHu;&iB z9F4o}7#eQRPT%Etv(t{MH|^Q6V?Cm`+i`W0J@xGCF>;w5@4mO^%pvvA`pb@W-|bm8 zpdKZQ?daEb7z?J?e2>j(I9^uf27y;Mdg{aM`ZmJOvjGD>41WS-v;# zdu5~AOh&~dZ&uF9MzEobZv~}W)%#Ej}$I@ur4}3qQK=;`q_xAXK z%3uZF@QY=;pDh>|slY``V_A{ff&ozqoWC}f(V;B}J=!|QjvF0IUity&{R&*=8q2@( zf57s%0=qnn!JG*%(5_IM3KwF~!QusWYUnT}!I;UT$mYO0JbGcwOCIE*zv?jUxiP;i zBF8z_;a9XVudOGQ^y*M~&6v9mP|V+Ts0lY_!5Pv-vktpLjcFW17QCy)?rp~0@Pb^F zTZ?h?joG1;bpBk6^ML_e9Walh^-9oTMF2-_pT}&i5`3N&zyXKn(LrpfDGDl<> z(RpM&{_K183u8o26_2x>b(kycU{Dng?@l_c>@eqn1<%{`V>|z5SZ7-B&4hm3yPz2c zHrqKitpH^wRH$yXowJ<^aPpN3{r)NAoVoKczEG3;2g-Oye?EqnYBF4KMb13LrdtHw72ort^k@Ct#IpV`in0`r0o{{735feVTFJ=BQIg)}*XqqPF+6XxwZZV-w zq1by^4%uQ8uCA9dQsjXp3r+Y?69hwJT3xc3IACUV*t zi3yj)gQtq>FkHigH{O8WadmL6H>P$OSQS%;{90p9ZG`A~>X24#%s~?2W1H)cm2b>{ zdysE8)Zuufn3rdcvM661rK-cJZL< z5ql@gc;V_H3{utN%qcRi-FFC2jI?MwRmSfAhoEVuMcrv)uj3(1?W@Iaf|qqYgyRFW zIC++go|Okt)I*E?d}M5!bP$%kw5aYYaq^Ls-h)}J=#vA>2h-mVdT zK?ms3<_qrKX~XPw2iU!^9J#OCaLkGW{PMIM^;K;x^HQ$b>5E${g*|IaIoQb;-UlQcFXm9UZ$9|;ulS~)OR0X@2ceM? zYUP#k!5JU)6Wl4Sl=p}DVEi3PD?Nw1luTXemx1jo3+{F-ft1Vv9d* zZad&Fan8Ki{zQrc#{G{Uhw|612{fKijDAl-8MSr-{ez03n^i8n*C(@ho)=x`IWsyJo z8A!2em>#dp@aK^^Qam1_*J`iQ5P!aIa)jDMJxaA@?AFbjo+>#gZX;uj;D|Ok*xQ`U zR|ek9R?b1c@5wx8=*^CT|E#&zMW$S+?ZoY$>!F@*%3eL3IPrEpKHN9u=l)JK+*gm7 zOQt;S;KVZTdSrx{vfX4S27A`y>=sj|&UT`gRXrXrHs$bDPE_evkJ}4PIe4!V&zjXE zbDAm79e1KzuX=owno{S66RV8tq1NA&o1Qx{q-Q;Pb~R;rmJ^3`uSc1RDI-gq__JD$ z56a@+W+z5e$Wd2iLPpNne0p!e1{W*# zde@AvA1oL-#EQ`xEig&5;Dg>)94F?(jC2dGYH!8qXhE*1kA0P_Sg^bWG0!Y0{nnp9 z*R`}de`U6)pEX6Td<9RHD@<8BfiptqXt>?nL!IQzgh5r zt2LwbTM+Qmf@^16v(Bysu`L#SvdWtIgIX}U*@DUktU1J^1^+aPd(T?aa9RtD8Z7wF zJ!`I5-vSFYOKwWDrqhZREK;%Li$ZIfEN#IRWlKsLt*N@81w)lAIYDOtr~cD|RSK32 zH61|PJuOiDZNa?Z1GqV=1tWwGMw156>v9XeODx&RZvY>Nxq7XpCEeE#pu#a>x3-o% zeP96dkF?;cxVQA|0RDHV1*WQ&?007X5ASb*R~t*NOdi01T`dR^_ul_FfNnu8*x%lg zQFQ~TA#DCs$C7pGHY^NmL47+*4l}gj{l8jZsb$Ha0X7U?*n&yj#9j{@_V#MQ_AZuG z46xyk=`HxBZ%OR7Vc(5{?JYUha**hyg-z@%dC+kX*NeN9hFJ35gh6bWBy_X2WcRs) z_+V@cb`P}V%#DNiQuu%;Eji}jLHtYHWiPd4*qK4B5cctw;N$evzLR| zU!?^zhFNl9-XMPe-HhAft}``*SZCUTcsEP#)wE^as1_8sSTebXEhD5YcsSCM`qsAW z(!K?IrdhJ>NL$`-+k&}MEJcrD%i+RL9!|34-%D*dRGgVT!IH8dTh=!;Y`JZi@NExE24>q*S<-^yg_iWMu;ppx7PQQ_@b*m z;+)=dEot0mFlDvPu=lg1?})+NS=kJ1w&a%4L%8=}LF#_XJdE(y4NT!-5> z#2~9{0^}!j*j3b*Lk0SumH_dzq3KNv-Wwm*^f-joNT9qD7yfK7R(eD}za1}*hi zm1D~HnU1_CugB6X!6lBI@x2~h-Qg7t5g zW6Mqz8jGH1LPR+XUlwgc>Vr5x6GRTy~r08LxU@wP;Tg&mVQW#S2hw%6iRtz>Rp za{~5STAVFO=CKne5Ui%fOyy)I$DhCeB`tnXO6J!uC$Rg6gwub$Vv)~DER#!k^+LN||ljD+@J;sw^4Y}AJnZ&}e zo@}nq#m3V~yyqumDs$28h>+jxNq@aOxSmX6e7HErE)Rd+_3~{JJ$iZa?vOkTmnHFp zt|y%x^F-}P;^&_p%p8@64$qS~rOJaf8}qR5za$=i=fUke^5A?uiC5lxuy}hO9$ZLb zU7`oq?$5)Z<4Kgpc~C1P4-Ooa)LM+D*tf62+7aUFluih;90neDz=n zKh%GOX6H)!W-g(QX#tK1t}b1|(US^LqFu@HUzRXzQvsIgR5I`P5`Mf|fF{ASJ1%Aa zoC0jutz?nKQvM%Z?;X$e_y7Mlw5@m=4Qr`&k8 zAQwgA`LOG5JpC;frmahP|Ct+AGIN{gfrO|1S@(G`{jN7a<5_>!<_u>0^aiZ_ALk9` zfjHM#A$RrJD&CYcuPBfatk12l zP1*dC0{gD%Gb!7YiE9;zJF3sIWu{!aS^<~C`rP~1lmo{raALbYe`}0q&Nu}gIO}t* z!FV1YqdrOH>Dk*VhS}d1QhDCZxJf9v*Ne>zBj#8p} zax5=Y7eF#ri3?xGvhh{{T3IUbOGzx(%qqmN8!fqCaLK|#e7xV1kE>#twXYC;Q(E#( zWh^^9DnzGmE%~2d-&cirC~rxb;C32Cc-c;g(K{|-t7igE4$|aZ!Po2)uxFAcR|Z~! z853Z;Sd;dzE}>R00U6>BQm(j!Q-9(SzDeA7I+r2+7LPp#G#Mk<^-(-F2Wm3VK!(r>$+MTO*3Hf1rv^)REu|y3^+`%<i=jPWsGYPt!p=+rjZGmcNasqy?99)EAmv_x;}-}r_le_GS*zBh*){f3sE z+ptZXHyh7=gM3&UCWnbTE9e_?r?ug_Yu+5V;~RF&YI>Iy$!{>tc!^o@Vm%J5y1@kw zc4qxI>v5Ifj|XhcTn_6|SFoe^Vza#CdMqfs!4vk2%r>3T{N zkp0$Xy07(U+Wj>hdSAf&Fl9#Qyymrj7m)j;={;2;d%@Y84cX>Y8PWtla5ALD%QDnm z>__+2W2rH*4%!F$v9rfme%7hOl5xgDkB?>2of_zmF&3U;LD6VqKD;%S*%38} z8fDDtmt(p7Mhz@`8Phg*EL**=LDwF}JW@TD2jA47OwX8dm2q5OQG?hn#x&?Pj&(&f z*xJdMmeO(b{8a-J9b@jDK8~$(YtUTFSm?cRJeXaBpytNxym=gZw^U%uUn6cgG>**- z6&U;5h(TAzad$5T{?r>WEp8m!>M8KJ)`-nskK+Ly1)P2wanbj2>>_$jzaK{QsTs!$ z#tJBMjQCB}gzN1TxbxMB?RuL~Zl!?lXCp2hYr>~H6p-IG;DfPCap-^+F9aIUY3EW@ z`e||IQ3IZMu@t`kT0G=o!1Py3Av>$Z6{`%`xo{UzVk8 z$NQ_A-1Dt3e`&j;bBrdBe(lQ#^W5>uUz6v*^yT?O?%3w3Nu|8LJo3~XRtq)xb>;xR zOc~92mi2fhH1^f}(QLi79wDm+(4(0V}tx<=e9^l*iX@Du}$DE*%v7TP$; z%!rSo>TzlF0RCQJM7Pj-1aBO`;VX>TDYzct>j%);!-!9Xm+b02fR2ZaIAl#ddU+0@ z|5YPqyVj%b@Bpq$G@{r3diY-)z{ROzy>``Ou-u5wX_FW_ybiHhMy#rw#NvTGdCRA~GD+xv28jTby-X!4wMUq03K#-Ax- zo&TxL+18M!wtGRlhbFbw8FJ=gQP1e6G0ztn@{6e7wZA5FZ46nK>jf8mO^932=OvmP)y0q=gFK-tVpg{^WR8j_PV^LeQqh+yGIrvT zrtmL6`%-#(Crrh=s7mY0mR37)SFA&|&t>!eMjcNlJT6Vpql zp`xdRHv^og(Qi6TM7+;VCmIi*4%JFcX1spMUT>{A9iK7%(M#U^YE8!upK&+tC8ed- z+?}3{=R$`!w6x*P*V!nz{F3kgSW_h+8zHBKmi}wawdb=TIrx%m)ogfic{V0+skCB9@cJ2b#|JU!Gz;fUgc1(<`zb%hKlX z%}Ome)a!C+`W%Li&_Z`fCvJK&hpYcepg*J&ox|p^bFc&t7Ik9FxlSCDI1?VVq8F`p z;^`kV5!FG$O`%S-x;z8fttC8l--%|kW+1Xkc>lLfti3t|OIu0!G}npKugyT9l7#!@ zPP`B_1NkkRezxsdC$24+0f~4X>M!=H$xL`lBpmPS#2>q7;;y=+$+&9mZqlc>jalN1 zZnW-rleJ1VW&L41-rIT#Tt_prQ@+NOBvN1a- zINjtX6=$u@Zkcyu=;WLH6lraCLGW(#n@o9bZRRKVUmdmhKcTg*#UtHPLj8*Y=;RZR z*wqrM3$}5IN3f5CN1q4a`6?0bFQIu!0REdL;v*%j6uikI9wVMfm?=1MR6Gp6NcdgE zpX?NmK{b*ldu+zlSh`;L1(SLu8tglVjd$)~<6;R-9M0kW$2&MaNt}1V7Zi68I7mWe zlXLjf^)7k|?WZgF^_aUDsVNb2JO_Wfy9iX1@QCR-xOm@%wz7n?bk7N&a~CJtiS_Sv z4(DIrMQiac9#@`4i;BD0Bi_Xh`B|h(5>fM4llfI=am_RlN#b3cNI46W$%zB|jv5a_Ai9w784zX%hAl zJfrar9^RMG^WZs5skwt?Hze$S;2gHSxr1Y3{qKr(3%_y)Py8fIiaLkf`*-kcjikwX z{>!%_&Ozt!9h{mj;e-$8aL?fm;*BIsOFIXJ@g2zeN*G@+)~fRzyfT%rxW{=+s!qTR zGg0T1^C*3rfMiN|an*SQ1SX(#n1pYRoyWAD30N~yLPh*}D6A7uE|svyxAO=ZDYU(@ zgi~4tz)~#%m0}G$4Gcib@_3}pYpUTd&5J_$e~mb-?!sYd_bEyORiBm zXNsA!yc?%2yhca$DQ1(tc4O4cYYcfe*=)zlZd~&|l}c-m!|ALli(jTv@4|8P2v_A> z!G_n4!|a(V<6fk4%=_awlBvpoq*TuRdmLY7s@(NFm8%Axz`#aTu6UNp1J)<7O;wHN zPg5D`a{@^{)HqD=%Y!HIbF>{-XXk}i?%eyUT-KPi-tx9RW(SixKMYwBU%BBBV(D+CZ zey=R0-c}3lJyC?)n@ah}#e$!cix9oDl&@BaoXv_6wzrfiYb}^PycqQ=b0~?|z?SEo z+5fjW8+U17LvCjtU@AR-IP?09Y$%ORWmJ+gH=oGHe|^Lp*9YU~4P~C`pUTvW!N|X> z%&K9j>@T?Sjxzs^QR$Y-h4X^3_JuMJYNztEbucn>#B;S&IxGu@ah);`wMk{MOEAuK zRN;tbsXXl(j2#*(EUA0PUkJuMT@}VvzT^FI!T!;Ze&WSIUZkE`$6@$fYnas)SjV8_x784lItaq9;=F78%{ zqw>o@d^Gx;)M1ON%b0&Z8oRISaJ^vXr_so}r^8&q+h0Xv;(Hy=uD*<;@1ha-ONR-9 zgEOL`)S$x`U9VtJb~L7`>M~dF3R09}(7L-WWfQMpe!CbfD2J z!L9~#%@qBc#Mg#`qmyTudCu*@fA_Y_@lv7PEZA*TF?ydUWrTwT7oIJ~=l!J&-e$o=_lj}m zKq-rMSnz#OF)R+2a*&q=J9RFB+M!ae7H4hw)DpZF9Oi4m*v%z4@~eca^DQ`eN-_Ag zgtPuw(04^KehWU?d_HT>6yx@{5@svS=jxb$C?m zGOT{YV2qXyCrB^jMQ#jwNOXAF_A=hIjD@qB4z+zQ!+%mNR`=H7=jLa*c*qp9?+xAA zyVjqRYbTqv&hO5PrT*+wHrcHBS9f;)>CYCwCYz-RKAG*$oX?ZZ5(JMFeQA99F}xGK z@tWv$z3YzQ*a=nM6uqu{_v3hYSe0Ghq_V@rJC}zZ>U$DZ!b~=1hrl zWANV+qBbu@h06zXdP!C@)vpxQkIWg}e>J0Smf}N7EN36A z#N}zNY4S0a5zdvEytFmHEV@OXhEf>ZZ^IsTE_@ui3?7@cxNfowJ=2$A!Er4v`sK{9 zaZ6zyti>t$&P;5+6y=Y!_|&R|=iYAMZbcpj+m~=&;s)W7n)2TjCDabyz&ROtNZnAv zk4HD~NoXDx3;yN4fk!>^Fvz`x!Ok0~x*!kzd`jrBa08bd&cnSMC0y8Y12q@t;Y`Iq zF3~-TpAiyn?LLUR6i3i~y%v48`EiCO7__4f>%ILrZ~!=QeI3?%`LWXk@WzTdEZXbG zdP{Kfk~+vg$$8_Z^GMufIbLJ;!J|0t!cPCwV zxWpL)#64TJ+l2=%J7Z+N77w|&aF^5>alf<}y2^{YhG(HBMww$By?D|j3v*s8^YtPx z22agG@ONd_&-0?%wk#Z}QKs=sFW&u}h5OaYoZ}aS?!Cj{w^NrR?1K>1KMZY7>QZxD z5GD-|gYOMp`e_B>`G_zC-qhu(vTF#k3WM5pU0!>64Zb_VusukZF;}l)<&`iLT-9ZN zk85yD4#VwRy1Zm{4a;i7;FF|F$q2!{!?EC_E`3!*%lpjrJ)r%vT;jc~O{ptLC^9VlN(xy#T zA)mNf^61xcRKG3cU{6b4YgvKmNrhbIZONrWDv)=-kT1_za^L(4e1A~LzLA#vv!epr zZx`~wb4!|Ct-!+2LN;Vta)qn{p~L0e?y#I)a?3GtoSaF^m-CQz1yU!;S-)*LIi&*g zCd+BNVmZINSD?&X&iy-=^K@7R_RNtp-D^2_eyu=3xSRpP`?)KZ<6@9p_;4qV99fPP z7vy}A=|ozV2m4!4S)w0z&Yl|tqamtnA=qbi5b7nWR3y~X`$7=b^i^fY z$a+pl3BtB9sx*jwPpzl^C_B=T?QgxO>otG83hl@e!B2hsars3@j=cY#cb)w)@<&H* zfBv3{Q~mMecSkN1ynBv6WD*Sqq`c?JVg6V@M1%hcb~N_K$;leL{oy@7PVmQni#1rD z{hnc~{c+DtgMGih=YjM7P}-@%B?a%f`ISFr9ns*O()aW&_s52P8q`&-;mwd~^y;I4 zvRV!E9!_K93(sFGscCewRKQ!eh9>^gxMr6El3q0o_L;^> zaS8+tsG;h{X;hUdFlJN@*DagI*IjCnY+A$A+0*DgyB79SYdCn^H1_bSMek{X`%mM( zs9O9MJZ;c4`hKZJm_-fm4w=TN4t3bHw1(;0)2M7-2McKfe+>-5yp`fz3~Jyd!9NAB z&~IRTs}R_(Ri&j~1K)oQM#e@}?vym}kl>Y@RJlsIfj4dkBX6rJRh1ez=xi{e#r;xT zU(Y#LgK_SrD%(`lQ!OnR7w@aGzO0^_EkmH3s>%q#Ta`nwBwy(BHPJjVy9jN(+Ht2- zG>^?GLb!K3PP2{vzu%jmzq=hDSVVJ`(7Z>^wxi$lXf9t;gwf~Qajsc37cVQqmwsF{QT99 z(Q~5NJ6eWG#qFpyEt*na83HTX@jsD&>S7s`6z%xQIGWbOWN>V3#})&lxh%f`S9-Un z<*;gY-0jMT#^q=Rwd&mWhHe70&MH#e4CYm=&eMK*6hzWg;q8g!4FnvON_ARWzOE%2ChC;80mbvl*^5tuI4LLlrU0l^9Zvg^g8oGk2x_ z(sHD=s%8gAS8h7ebbWM>R8i-P3&$6f;ks`XAHQ+oxlZL6v$KjT5?xp`y&NuO`Rwr5 zhWq@AakMs{6-74W@nWboFAy5ih6~(^k=wq2cc0ntUPv*zY8SB8WgB|_SBy2;)$Cv8 zO5a!IkPDt$4lS!dpKsL+(po{YE|s_;_@T}Uc9>a-@tM`!*=7ar?5MI3jp< z`~*JLkz=vZbGEoTfz!LoQ78Dtp$QB(kmI!Ra~|F{fgK0SVbABBxO@Unj*_F_s^>gc zGoEQBm2fi1;pM+3bhE92uU-x{)l3;-Py>HS4$t>8Wplk6+-Q}{x>j8aWL8U_#whHR2BW$*!SxEP7aoxnq7Z?XexB3JOsmc=2;P4(MD2&#^!G z59{3+nuomSlRw+tiN$|yN$#ixyBxY$v~o~Nw%p;qA1T*_fLQ^wujtf(dW#>)jV z?$5E}h!y47zC^}H)mB0`m*cCej3ZR7dG%z|vkd>iGqsA-*1E8{W;xc3ucFr?7rK5g!v?8{ zpX$Pgg0~E+;(VzKwS+E8>rut2gIst#psYy^_x!5ZJ=KNVwwGh--YQN{bK%O+awHt9 z;+zjIJSp^y-M%UYWV&#UY6WD1pMG@V#PJo_w7-f4*)B9*TY=^Ws;KQrKv=rb$!xYF=f1?oFibJi|bPPkQpb%KX@xzcKP1*+Oq^P=cQ z?S*EWtuFe*3RfESt!UDtBJ<|(=1nblRq68I@BIBIG?4zm=n|sFb)y^Tb|o0CAE?o! ze*?RG4~A`)8jmjv$B_>25bLGQ{^P>ort%K;-r9Vq9ggX0?=WGvc9WRTKH&)Z`4+Xi zv^h959PgjK#h$a;+>jcM!i#V5^1L?7Z-(Rkj<+~}S(~H8^DN7^$hoS`Zi4fS-y-&| zHd_mpcX^AwY1+(t7mi{@3M84@d@T4^S_&?G(q@og#jO-ezCo>9W(WdG1=%B zkGHYosLJ^uJ{p5T%JDwg_gv!L9OmVT}`8GxHiuuVW&US34RD=!J zf6~aoj=FCP(c;oi4z#!9f!Bq2cIqb=Y_j9+M}L=eVv*Q}G!Y2B>^IaL^L#(JXL!7B-8M{BQqW@a4x33E?@W_fu z=gZ-9S;oXnD=vLp4!tunCS+J~^!;*#9+t6Ni50*7C{@Kagm2|Y-65k_3u~@v zCHBb%8P{uA)8tjtGx%=}MaeQgxM9W37Ug)9DdQ{A2TmR;$B!Ht&-)6m;a`p!g)#>C zS@Cp0IabMKT)j#3mJl)SZy7f%x1zhK;YRC1Zg8?o71a0_KC>;P+e|eyNSXDU~-k=%Pc7ZjngJ ze~tGmbXcGliK3UU5$dhOu8c&tz}KkUt;5+ak(lT48l!!6xbt8nF511uivS&lMMt94 z^fjzvMQxdp(C_pb0dYEv5-hELg+X`3^TtT*{qPF+-|5iCOOw-l+_7i1gj(L398Gs% zgM^RQXwpx~9oM!>xP7fA|0ZpR?=cDW?KJuA@OG$$Nw{#PCOZt=j+x&ibe>ScM~}C1 z;vG89cOQ2me7G=f~%Hpqwj%ov|CU@ZraAtcf|cA_~_nk%oXS2k>D=@ z+vua!)bqBPE9b~{!aGYUab~KVXO}ML$VrtLFhS1W=F2&2b0xwATa91Nf}52XY9?p& z;N|qrt;FWB;*MTnO&6h2FAtM3Xqz>ASCwH;Um0yTThskP86x#$H1)CO$lYbwFOkvS z-OMxRh?2CpuIL4(i|kE}VYTUnEwZsTO^?`=&h>vF^hUU15qPv!}aFha)d z*R826?&37Tf%mMr%}i*3kutXXV9mWkCtMvM8^%5n^@zE&_q3r( zX*rg46LUOm!;QM)Ue*#ZVK#hdT7iMuGQN9cLp!4iv{aE%o^Hd8K@}L}?@1?}4E#(` zWBFlE_8Xf4w>UM%`gpR?E(2B3YTUQQlV-;<@b{J)<1_N<_1uSnX_N>!7+^ipv3(B)jEA;%WT z*?sbIhMLMzI77~Lqn7jDe{y`BFXu|Z(j9VivXygekL6sqK#tZi8 zwzZR^WO*dc{O|uERO--YLL}Bcc!^lK4*z}LV}B$*o)*um#PfZTkZ*X2NwqqR7u;{* zOY~OPWl=;VRt**L8oJc`5Q(VvB3`1)b={(1-0cOFU36(8cyWCaF0IsM3&EE@C&7D{ zE|c}5@H9RN+P=CxBe?KH5^n6%@2ui zEeUfT>N3wP3f+sJ3@veg*wcIvgl^*QZIZ(EOVYuVh5x zW$#z`{6mM5s7S;&e}&rxI`kIv4f*yGM@yQn!@qgtx{8Lwx>b~TjNPVYUW7EJ2{dCZ=CPQrLX14 z6TI5lkzvo}nA2D6;r|?Y{-hjEf_3&gQg%d+9fDOZICAs>IgSf%9_2_MUpXck$~pSE zBk#q?5jj-O?-`B^@)mwp@S%K1s?U<+jFFt9Y8_eMMGh^&U)wIH{jW+K9WAF%r{#PZ z*|b0ZJFlyP4Rair6(@(GsB`UG2RanX5h^(Dz5|PUR$*9oIUB+pxWTdt-?ZhN6zRZc zyQ;8UM^4|14xEutg(AU8ha8wvT7_jjQh@rykfu_gmc`l&Ok|9P^sV+IPQ zt8=fHC;OCsz~b5Jd?xrq(g%dhRp(#9K9@hBYQ8#GUP|Xv_d_rou1#aXOZFT>`)S(j zbTOTmVh-WcB5kfbozD4*hhV)?n=?+O^K9WE^!3#ynpJYRl`lrmlyHoqf-e^OVwT{D zk_!57_r>0+62AK;WhS8KyAL1I`y_JW&;9cQtr;TrGfC{?9ELhCqmG$`bTFTWQ7PHT~dhAS= z^6UM@yf(8Q1Mf?jbYn4n=hx#=xRiH}EoRj4dTfZ4vXAFt7L2ZkezcSa-4?TlNj)CK zNZHJCF)!%WWBn~DT_-MPhF(3CZ%g@Q&|+HD)!}lmlpnMfb6aK|7F?Ioq@~FDxel$* zO4+|`5l`jS;nF!NFJ&#F`a=;DAZ459i#X+39XebTb;c~B$19QNu#~ILE#kG1I#?Z* z^1a_8eh#Zck!~B<-%MWR*tHJk%yEiuWablu?}Uc zrF#5MC*BIbW?PF^%fwzv6nf0Q7FX@1bPBSjmT4`PSV(De%$hAH*P_<~ zso1mD95bU955>6sU9A~nP>Wq+TVn*Af&Z}48j2Jiil@<5>RbY%5w@<7U z6`vGnoFt|0B`eClEAVuR*e3_A*t0+Z=V?-Y+HA!`PZStBL)7LdJnRbv(!{uDXIXJX zpaNUOxa~(<@xo389L9@y1L19>6liNE)aHW zG+D}->B7^kSD;9Yn{dyPIuJdtsRDH- zQeJVhWa(H1o(z`qxV0qZ5?_NGZMaEcvRR0?K!< z^W7&iGtFha`1#3ozI+0+Pg8pF=9}wG52e|~!M&){F`iR9j^>B_-{_(n&nW%TobdHG zzWNGHYiz?yODo~JQ^wuqHZ1a~MAc>)-!He}q_9eOtQKD0-G(>Qgbs9)(e;=Od(>BA zZ{IlnIFpCHDII8_7so3P^04)G2mbqfNWVC~U73e9?>jJ~e;n_c=3zlb2X+}4NAu2k z$SLi>z&>$2T=oMdRUNoT+!4w>9jLXg8gIlM5!%6lDwC?ADR^p)J(W9EwK(%3U)H(hGr|Ua# z{n$7zSoH%@9hDhBE{;E^{J@0%%Iq>Fjy-z*z!EcMKAsv!^{VffF-e&&)8p7I={rVG zQ>NO?I9B+7NAFq6jGHCacGY*N%~fXO>^QEQ`W=C;%Dg%!j*eZvaU72)<>IEFGUc{$)VrFCiI3E}RmT$(3>Z&_5R~ zJ}9$rRUDIl=b$=EnMYU0@%g(P$UZBx>c2Sty`Fx8C&4j`?D@p87PA)0`F^@Rmt3etrr>g8 zdj_Y~!roG7xqkL6YFme5!G^l_9AsLDCClU--^QMiTk4RyLQadCWgHMy2X2(p@#iuI z6xJa{@RsyteBHesEpEzbI$;?t#a;aGe3ywi&Tj3%@bxv=D%h@*16!=F!EiC(@WBq$ zJ6nT7!F6GK-27$Rp2O9%QtszE2g?S&qzPOQN&!D>4kI5)lqQw3`tabQGD4gLt8 zea(SCzKL}cI&;q*2X<9f;I&}yWCwb+Q6N|F4xt-=wNT*nFgdSRJ8-}d(I*98YU{`o z{S{a?T+XL@j{Gjxd9&c#Lmg>8PxNG|oC7T!X?swCpw%RcbJ2xIS~j-FZ#D25)=lbMJL`>K0aGhMGP{1-jGcNi|LiPQU0*m9wG` z{OLpAv+mrup=tgx8})fK&z&o0)WCX|KE3|9^Tx^=H22b{vgQu1US5ONJN4P8_YS6x zs)1*kJ|CXg!NiiLd5-?4Px%9PPW7t6v2FVND(WnbtbyU?+cZ6IPRqs`gm1acBZtfx zGfaU;Yi~2a%ba@R-br`8&5(`4M_*7N-~Kiuoz3|@U97FmZO&g~&RH#L(Q@8xwqI*b ziQqv$6-&C`m%YQB}UmdBA7YN%#_^$`L6Kc(u<9 z*b9DIlg`aQ4&wMz9jcY3b5ij^boipfEd}X}etr-k-*vciZ6!yz`l7&Hi}g;Gys_37 zw~lME-<;blUpbqz#5(j8^YXKu%{4<6I4S0v=rEg?#U1J|_}YruEb|q2qF9sIQ?vO< zra;b@bhatn&eHr}*q)ZoXJy;ztDTSX7wL2>-%eFYJ{<3-Q@dh2Pj$>kixTJIBFn6}}$w$3yI#oxzGaxn}Zu8Q)YL+`shUVk*lyr8V?auBu z@-f{+>PJKzLJmQdg&||Jm*qAnrWu<+FW;j3&_W+ zw&}E)=g!sV^6~L^8r3Y^`R7bNSd~U?Q+EzLpN~U@Y5dXKotCRbJ>SxJx{o_cR_4R$ zLmFr3yK}dg@B3G2Y-ZrjuFhgEyN#ITwwu~c6-e1-B;M0*wmejUpT~@N(_=R;hgKkD zrx7Q5?iPBx0tttVxbe_#cC4v@??EGWJGz?+y-IMK5fhH>X3Eq`{QGl0hmWR{pN>G1 zq|IN#H^sI+iUnEPG`Wz@A)}Atj7*zruclLa;wU0ibhzV6I$Pa2ihy=HEE|=`ce~%f zVXGQn4NT;vLvL{HkQ&{3CGz{-H<0dAA+UiKT|Gt`)qbeB|Avu{9L$fd_Q-#|ylG(g<7A}2J;s5@&o^5s}_Ww}focGC`c|8*s zQdOApCYh7BWFqc?3VWv{^Ty0f1U^$?i?_*q)Grg?zpFIK-}iMgr}<>T>a_|3-z9T( zd=_Sj{5`~20fkwZQl`SQ*~$FS^&=)WSEWX7GIh;AVzQK7ghc#N~Xz%uXr*`jfvkyZ9!jg%1({ve&T0OBX$MjSW6AA*ww(TYlGo8LW5Dm8dz5vg!RoOTxHlm z<62RtuJHRk8n`7j2tD;ATq@?(UvP@xf9r2leZpHphZv2MV}s5UHpbag<|s$^RgG-x z1ZF;L!I_SYoVEhg&S=4{iyP^?8k}F$f{AJdXT}>O=*$wP#*^+amjr_R?Om=I@(WAv@?Z9!nTGD<3U8>zcuP zUhZ5npcvgpWzcw|JJbD(@u;Mb{f!)XO6Uidyh7d@?a1cBXQ^cua=hTx!YdWMD`a{P zM>c9Ja5Slqiv_!CDA478A-5?1fBY!6kbgQj@}r6Zii3qbD)h<9feIL3EN0pi2j*W? zz%itla^V*yTvxy>x|m*l9C#&9#3UATNnZyp=~4@w?xmC_xby0gYD5^8a_$><>Kv)Y zl;Ndx{pL=Oht>Exwv;<7-I-Zljl@Z%d?2`sK@BV?m$F{&&fAtXC^0W(yEZ#m<6DE* z)}@>zc)-0Hlsl9%y2_n)iWqh#K1`x%wCs=S<#%s&G@qvr&n4gSg5OrFfwQ?t?fnJQP*CUf2PY|%ee z>06Ubi|}kj6sYn_RWirrW@A{rDibS{IY{yuF&)&nNA#ceT|eViZ#7=EFJw^iQYM%y zu-vMU=i`=gb~oXpxAvjc%bir;{s$jj1;_8?iLgINwCTgOS9a3)_8&;6_TjvsogDk) z4-Qn6&~V;-x@!K$m%0)rj-5~El1AKWS<1Bj^J!x68!wehsjoAiSBHog?NaXUJfC0f ze`8ROQugXHpD|9qg|926d$;*4_WzC8F{ND6bw15=e>cg$zp_MVp81?>B3NF+v7Yle z(fK!wib{Ct)OoO6A?+ zJ(m8#O7~KJJw1<4e*VGR7IJ>>>4*K)<+ToS7PRuiM_XNHw3o9>TR-IN*5#1cP*_Ch z(EhU~i!ws7|B(*AiN0Ep7K%sdI$WNv$-H-=sLR)3(K}5(Ee^%EuDX;(YBEt43f-Z) zTpOmzm|vloC&p1+*W`0?mz{t80~c4Svvqnh?f?G3NDp;diaj$3=wyVuHe6d z>txBS`SSxmJ=Hn7ESax{=V8}z_5a%gHwCXeq0W{qQ6F zCzbJv?p*pjYDS-4{dvm5i$Q92_@vaIZOpxdKdwVVi!feID#gqsHEvT641t zns1>j3@k_P2Lt`Ga4%Pr z$J={wUSJkJBx&+t7Y`os&qBW_O=6G-m$_u&PJkxQ4)kE5O%~F8G+8#lgX?Bxp=gaJ zDOfQ+3(c)HxoVsT2an3aOlb1nSPw?_&BBraV$aOnKYtbG|s>($EIt|LA zJZPGq37L%s+ddI>e$GU35Wkj)tQGw{eJ)7GL{rk zb|zX;QE8!_^K3z-q%0L9qD31O!wg#9En42~(Y|Y;-YsaCrQMdYj7kd?BE*cr%<#KE z-`_v^qw9KH=Q^+Zb?*Ch&V8OIbs43H2cdB|IfFfGs)qt$9Ij0)qhqRisM;5Yw2@_$ zQm+e*_i@Eh)mF#g_jVEOVEngzM6X!9 zNo3!stuM~^W8dqlh<^U>|IAv%;>Ugw$!+w}IVu+Nvm)x@tdF1ev1nu((sZ#tPEL=- z&h;W%yh$H_-}%p2?})9RkC1&bdN@1*YMfbZ?|5&la?FP0>rz`+xZhh#L|KLIWSJu&s9j1KY=kg4N|0~fpdpRzB5iB%j; z-N?m}A!P{9jiqnfxcK`{GvCmFS&YppJLy~s2O|oE^gCn#wlIEFCZr>R0T}O=gCFiI zu7eI-`Ox0|i7aNZo^mfABL7cx%AGa&)|t-7>EGx=SBd8SDQiqWx#}5jrpyuOEnLXu3Y8 z4~oUjbF60H>Z6#k#!V5m|I|l$-&jmOB%Ircn!h zw$Fjb-5_u#wov1!9L#wYgs{;q)HN~(vnqn{c~}eSFm`DU!kj@Z#2t}?nHtOR*t~^? z+2vq{`7#VQXdy@2984dz45zhQ=)u?=oS(G}@#9+P#h4si2w*zXu7%!>&cUTk%MfPu z|KEFM_cHvnXrZMObD(i~8NRr*klnN#?6|)S_ncd30&=h?e;GzjXrbwpg9DYzaNWLz z^k?OuPwO)5WU=*Q`E1fN7^*BbYu6m~w+zN+7Ms0G4s6B-L!sY7Djqrb&m|b&SZqD# z<=}x|FqW#f(2}`1_!b(By9LdZ?4E-j(ZSG2Xzn&&=o;ss=4v1kSdAEI86)IfM`Yom9ssp#+9SgEv-fPL$rJ|URLazkSg^B*39 ztqWSHmv0WLokP%TP78fq%4%d`2sBwuty`6YhIJuuS;yAt`3t@(A<#e@2~>XJL_;t> zQ5!vLuSHH%Fb0IRQDjpsUaE#L9neO_)wS?62|>uAHgf+|i{9fxAb8V8>)0LsRKpV| z9?0p$f&_S5dLr_RoW^)2;M*8aSeD6Yo<{=u&huC6Ftln^fn*?1H(O` zIZZ*ImM5TopC@iFQ;^5{1Pnjwi8Q8rL)Rw2=RZ#I7_i?TH!13esdeq|g)f zT?&fXn1H}iPqbQh(y{Oa#5Z|j+U!pHTSvtoPJvBPJ&k^)i_X(2s7$UW?Jv4WV>+!f zww~sF)5V1ADcCu`o(BEU#jVs7jIgaInM@ZenBJSBR8JE-bun+GIrhlC$)sWc61nE^ zZ1bj3Zw6pH#~iJiJ{0obfNpneGvfo}Jn;Htca8daTrwV?uBE~#J$O4O<2%2WN)G6u zXjU>f3u;MpMGtOX$uJvHOXV4Q=n6R`eeupYN+$K9^NuNKj`vK$~E@H-Yz(9I1}J7e z0Sk;#7ixgcb2`vpZj7hP4Pd>yyZ;O_hDDSCs7eQSnBDQ90TQG-=wkfzr~&3`_l66b z6&jBlVDO;cNYylk)*S;xJN8B=<3s5Nuy^m>t#_YKZsn# zo?Xm^YnnQm`B^Yp!iAKve0>(w{J2O;SBLG2EUXOTVp_gB90Ri8vy2Nd<5k{Sc(RI% z!{60$$~}wK2N(7-b&Q^tg|qv(SgE6dNO2~NtGM7F)WDs(Ol+^^!uYBNhE`@`k5WH` zUe@TgmlF@N;J=6qzfg7D&dfrUKNtUPR>!NCSqNbwG=Pnv-EWzK$;W>tVP&8Gjt>$jDC*CY%%;^{ZnFUJq)$QZQy~9rd=+Lz{jI`0;gQ zF-Z@S3vM3U-Au{}4TVzM71qQ-4uQiXO!0l2L5>ixe;PF!OjaPBzq1 zaGoA`2bukKErtDL`uR{YqFMgC|I&lQo@6+M)lzz+9`!NWH2U>obK&RWwj|c`?4;Vs`sR`czm9&+|fL zgf!Ch7sYsUPzbk^jgv*j*Rm ziB}Wp>@P;vDIsJhn&|HsJ}Q-tLP*$bImNI9BkP4Q9@R)CmL-@` zC&aVSjkJ1L36}g4B5YhEamSTlM}rV2S2fbW<`~?n5s{;h0X~0?!GabMJzHzg?VR05 zreF{|f8E)7nCO^-N2ztBZLbF#rxeU7ucMyEdN6WH!3RYhX|en2`P>vV+tkygHeIB8 zv+wB6__Hnoc`4WzT~AZXbuoW=3VNQcC#R>n_-B0zZl0;9+fQ_{k)MLWIrVh+qAr5B zq`>b@Jv~nEKA-*_+hv;+oS9KaJ6XP&k4ZsL|2kTAR1b%zq@ch27rC+A_-AGcTvY4G z%XP&d?>^bQ4_iLD#e%gLhv;HP`hC%zLp8`a^fGl z-oF%|KMG;L{tqo0UW#&-dlxSKp`H$_h{%tLE zJhcH)Z@ge+qKrTH8}PQq3xVU55hHHEB5xt|LS(c^(tx7rLL{D&(a5d_rc;FA7s)7> z@yMC1236z~!e%007j|xAJmLv!2NO-@APy*8p8;cjTi_#5YP@q>B@6`Rq>nMl}m`(NLd{SpzFc1-h{Lo{uN) zl@v8e7k}R^_nk{%QX#~KOO5n+bO}s<2=TSDkN?|MCVYOHQrG)z3 zVgzXhz*t=wvyX^jDCNOqfHJaAi=oxdgJPmG`d<;_el-s*-pV*~ON?u^JiHB4hUP;t z66$!kwnrJua>Q`@z{CD4$|%hfW7sDi0RfY8$31*+> zp*%qq{0IpO_wcabt|~spNszFQ$M&s?Q@bPxVH{bY3dKPQhVSP=T+P-zDM8}_9#$)J zka0_pvMA?4)3J7{s}PFUVv@qI!QD)0lBsdF!+5ZJ-5rojGJ8C{HTt5 zR@r!QjSK4+>bPRb?3cN?dP^O5jI%K|i3^9@>Ug4?jloyAc*XdYW;XP%aTgtFpo?oc`5095jimbB>vUahK76-UQl~rX(GB_NN~@$@OLft=D<79#s_6R` zU3hW|*mY7xu}5?&xij)Hse=_AUw#& z+xTX(doRMrV|>^?XeRYnBFIws@VwnjC!UCqb%T#1H=D`!t_Zts@==o9Oc$<+aO4ah z^S(CI*s~%mIm>)1n(5^c5eA>*qx?fN`Ro?qH{*VyW~z-7A)UQ9xTKk)H;E8;fsd4T z&D1kg1ec3^hzpzP@7M~PM7aErkHOoUX{k(v4HlG#~ra<^tP>D?fN`U$bo zRY8@vgU}hq?oww36`l^l&3GY>1uE$Ci6Hc3x^c}`1@X2AVIk9{J5MTTZWyyOO_=mp zK>=%nuvR4o!cPinSsjEPMlo2&=GmV@+D`J424cd*Sk!5D(b4Dm z2+a6SYmVyTXI?%gF!nyi^0Oo#XAga+ucvgOR*??@<2R>u;mz{dmvQPDRtqejr@r`3 zzDyrhHRZ#S@$@^os2)&&4(WGtlCW9(z6e*RMB$Q8Guht|VU2GTUT$qBU&dPgQ7B7o zrnwhHDB(w;<#RKoo)_Wmp(u!YwvY+qHz`qgkkwjI++^)DOn-pm^s zeUViY%%Dr{e~=7pg}DZ6HY7R(0m0hNmk)!x-z<474Z473je-U#(if6vZ`0% zOtms5k^&XAt03uA#uLVEb*tcJr~)S_(5GP)&f2QrmZJg}Iic9=q0;TH)|ruw@^~)f zD>M+|k_|&PQ_Hq%z}7h%OFX$yJEwvAvDw(XfQ#8rHIP597~1oN*!{SPY;22hk%Vyi z(?nYb7Gu(AHunwwLmy3wAsQ&e!$p6{rFSumhYE2k{tsQ_6r=AjAqMRHL!BM(anFot z%SV5@{Y-hA*C1GB#UWg!i`p>=+Rx*#-mZ)OaTHtYAr5?+>oQ=trLv%I8aZMBk-ORM%?G%>ti`a-F3px3mlw$ zE{Dk-Cv-6OFOcKtNhhqk#DPPp9J~Z44BpRy?q@ly4?CeEii5@PYBp)HtcfZuY^ zCMVpQ$H7^N9I9bXSjqbS;!Zh!u5$vP@!v5_yDZ1Qznq}*m4l$ua&S4$XlUW!+z~mB zn>r)1ndyzaats*bj9_&&bZnF3gqt%OIcjha$kAsh^HEj9hHyFJBc0KutcLh7IV$6w zF}{w2=PTs!Ip>UwS`L&0@A0LzB69_ZT&uObzAtGcjJb zA3hapz~ojYt{L`2Oq~W6UCD$Aw;%ecXu|wNCSFbKhgx$@2st9u6+}ZPznR>c%J9A; z8Vi3mQIPI`DhGgJ^C7B%cN+S_h}(@#`c-fcr&Giu8a_&H76RU zH?X^L0=qX}Mq|^}7D^h=?u~Ek*^(BTIZcF^AJI_J5|cHvM<@wUFj`C+cC0U(32@j? zOxGPnu(4qM^boT%wjVEm`BO1{A1=a}1p<`Ri0Sr^4xGMunKFHiFqZM?`Qzn?#8vMz|~M zK)}=_YOXUvAC3&OU6bgbvN1mOlwogF67}nAjHJFYw}Du-rgIdM3a#s*1~}w zy|JTiGMrnq(EheJ`p72Z)+a5zd)yl#I#V$1qZagz^u~-)Q!qV83pH`QkuYrv%CodE zE3`L;EMPv#TIlcH8xhN=pzN9!4vp-MY0*=V$#{i%Zyee;1@o_J;crc1I=CF6)qLbV zY#|xrE2Vt&Y;K{{A?5JN;-kN`g$`MjE%qn=l&=$a{f z=U&3h@+1mLG{xWcQ@Di5W3Q0O6;rIVzXWCe6>G-X( z5My$>XzH&T%v-z$KPSow;u>67zXqq)$(i1eLVMT@s9CFH#|0_2kDCDr)KL)Kh`i12 zNEoRK%WaKNS>=xTT-9#&2VsqnA92Uc;oa?C0>*3IF~Ut13xti3Zg+>oUlleH>Cm)U z2=#(4I=&_y=NR(}y2q)#HyuBl7GRZ@60Yw{$FxriP^qH?=U?d5?bTI>}Mlkku0IqnM{-K zj>Os<658rgj3!4-O`Fv6gzGWf8%u&FV^vT-s@ZAc*aqq^sFq^S`U9}F;$^zc#L2t!&7aNbJ~{WOe_ zBQ?O%)p}SWHiV|!0OPmmfiE#c7OS1jC-u-ee>7@G?ZC&v4jM9dG`y$o0OwB!amSBF z{j41rYapZPV@G3&?+*BmlTk)gA;ztV#)Mx|+7n%f2)}6b7|=#uf(wikkuwgOFHnvja@*;4G1(+AvN(SNVS&;xX z$*pu($o5zvfclqK3fNhMpC1JX_|{6=hl-HN_V}o(mG(R+!jbm^>{=nEQDlkXoiQj$ zRYrxqC3JqrU_pU0ZdzKRqA3Qk-<84BvqZ+17<4I=QQl>N$DdDma#F0qqYlP+z2i1&=LI_lnJu8&qI-ovo7>g9q^{ z_*>f>GR+?u6^(1GmQz28U>FmP|0*SPgw5tEY~B&{VKw+egv$S-;Wf3D&c>#}x|bIQ znJGadJ`F>g7Q(BC64o4MT)Ysy8oTI~Fb%18UND6c7H>}jjrD?yuM&!1KSh*_1q20} z*qHMa-lHvW@tr0nKX{67b1l&HLlgP`J;mn`3xrl_BK^WsjE%RznFdYVz0rt+&8}Ef z#zFecMl|+tLjlu)1`ir>yuTZwnLadp*obCFH%JZC@byU}25PwBeW+Tu+RR|wYhMx> zOf`lxtC~5&=7>>T8Bf(_=15y8hTZRYvavUZ)K83E(s)|sVvf}R@rQVl1e!w< zEXMcm@iaEd93^YSSYxo8cI+`n(P}Z?OxsPP&zM7RlNdwh?xyvr=BPL?hwvO>$QX63 zPi8aD1wxvuIwqyaarq&k#!nsdF3HjOo}dw~j-XR=jQvfp+My0xHiN8H1AQt2eA>>1e2o>cIL?dc>L-WiDK zt8eJ*_>+|Wav&VGz9ILCCn^8cK!_K=p~sU>Qq}A3&%R@8w)8ql2B`zl`#>&b<(;6$ zl7XmRoQUcJOORgNMX7;_=##PpyCq$8F(45o&zE3ZFD0y7o(TEZC1@~L!jj-bJnUG4 zn|4aDTAhdr13#EgRYKs(L=1EE!y7Lp{A<{RL1C^q9HNG?I!$oi<%-HEHGJYUL5cBW zz8Z35jo5L@6*D)f;d*l;v~IhiFiZ`3wT(D@#uZud-Rr3HV1MMf*rMlj9ZcKOAEU#gqo^r`P&JIkmErBA>RO0w(`YyawA0V|g@8>oqKCG3>rEdPrO-ZYW4s+_h~M5R z^wQE8exnWXDmsO_?2Yl=&Jg91DKvhDF~Wu!BH&~S%~@iM9TN>|Ae$t!Esm_qie9`Prep!jTM54T19@J6x)Fq?DIKV54V;V`4|rtQdl^ zowkT-aim|2&FgHjQRYZ9T82PHWQ$Fz zQB#CRc>-)XD5Y%`Mfi~~0C&H%TW=b-^c|d8pB=SSN}d7l@NGR@u81R+#*-71h?lXN&CPH5O zK+{?YTFWx=tH=k>Sl%Wr&cwavK3KL`3DZ3@vF(8mR3nw}(=8KoZ}{NcAtl69Cd|(J zVA4$`*iFbp^${PGy;cHeVkYc1``|&o5>o6l(Xqh?^J|sRw^@RHQ9P`dsX|&S!BYVb zDS8}y_$EPP3=g$d-G65BxBnWM1hbfbp*{zxoK`$u$%Fn#4zzVz!4Ksj)Rlt}qgISs z!^4w64mifG7_yFsf1){9+`knS>v?#4n1k20tw>wV!;o|ihRjUFm{We3eXNTnxh6um z)ei;XU8LiYh{cEeuyj%v{p~Y$QX+Py`XTOd7hzN)O7r~ipt6g~ha@8Yiy!7zbkREV zL`-b^)4*bJR+ni9);jwkdNQ!}Ju7bu-t%LHz z7{tpIHhQF5z39&y-tYMF!oJV8lmhj#Ja0pbf>)m{5eAG{n$kZIvVh2q7X_< zFO6w#z^Y+F>>Hqj!?g`KU@L@hJj?B04Y+3~gz`{13o(2< z`z}Qd7^z_Obw&vi#y9H(sC}S>#MjKu^yk|5tfyx+;4Z7jmU<-|zu$mwtoFaED#P+r z19Y8*XuO~dp>G338SGA|SB9BK1J>RYpi@l+4_z9dc1D0G3l&Ts+W`MV0%*=w!OEj- zMtVrQjC(!`Mk3&D*62DD{V@mpbBiNHJUFkN0cTp}SLx z(ii^dyHg!k8E3xo$AL5In7T`fYj6C~GhH2}j1T1bV|%_j*2GH@S>TV(@9J2+h0W>T z{UK~uN8hb%&31n{^wxkNN{ZHAJWT4P0fTi?NXGE+yN?FT^?Z1+c{Xo#JNYo)_$3l^ z&a~4|#>aj{;%#9&$))*tSQiOTlHY;HWXhz zsbYXc0k_qmc=22ns}u@ISB4_xrYaoNJMn;VDq~LXPDC?)$hgR;6B8L{FqT+$;=Ujh z+!R&h*mNR_u{q=PQJn|~3B}n2Rq!TuLKYng17^3I)`>@qbr^4*(}_f3C@gZA-MbTG z4~F8OGF2#eosb>~#U{q{S9YTGP$(iASe)UVNMIbuxH-BLzKmxvp7~EF#vciVvl<7d z_jSVbSSUuCb8zKUC%6fr@EXR!-+SNmQGvDoq1e@`3K`?rfKViBbFlf70{;evB5x1} z6N?onT^5S36FG=oV*szYhHzKX$H6TI*zRPAJx2QYyOwpv)!|QJ3|0^7Bsa!;zQ;hr zqmyn5GE4ugVpilX5iH}6&oDORI zk&p6=kysJkK|L97dk~4{4IMP(dp?F2Mnbrzd!E~+1VDdIsq>l%Ls9)C0KvAU&I1Mw zg{&|D+A~U>KR6D>-#(j81mN-NQs;Z~hN5Iw0QRevI=8PHiqVk)SaPDo*>U?&L@+*O zTjHE@W+;k+0}$}6*!kD}q3HM@e=T-iUN98%7X-j4ve@}z%}`vU0KC#JcCJtvhOUtT z*m&u^vmtjFJS_rXGV#5$yTdSC)(*h^qIb^QJ%&Ld<6+*4cg_z(hr$0l4-Y>UIVb-+ z40a1{z%#?b`FFrboSSt6?&TKF2RDs`*!l)WjJ9xIoHr5ek2~#@HaZWM*%3HV(@w=UdFY!Ofgk-kNNkY@t)vKyUf4k^`sCr-sR&djchJKx zd04k368+vv>0?PACb~yrntB`QF4j7*I8S$w$@5%1n-zh8#12X+ z%!R-$0=-Xk(8BUu6!}NM@@NNjRp!EGLj=Yg=%B;DbMY;V#d)xUG^DvWxHkf;Gdk#$ zavogvL|{N>_r3JlkdL1Fw-Dvrcp-*)=plMmUSNX*#UPToQJXlRW@LRveG3CqXPu1M_E>YyD><*=O{g{!?f zC`(q3l@p?1JhOvV$;&Zea1Kpjj)7e3{Mt^{H1s_V|WweGqAn_?5uOXwSds}f~G7mrdt6}lJRvetl!?E#d zkTTxv%)>MfH5~r86>Gr5pA~8tvA-3*(|I_vSq(NjTT!xz2lb$|#`L1eup(@z1m}YF9DEm3y)HI=qbj zH8;gs#y09@lw@IwbjD`&rDQbT6oX4*arI0oU9mL9o2FW-!*a~VdW%jxxRCra8=(iDgf%j0|Y=wcJwXleH4{mdLBon#V#!+6e##8OsJ!2i%oE|o{t&#>S%tP z3Eq#Y!jSV5X!%}CxJ;Y+bLe-2 z6^1)-Sx(I%bv0`w59Gpksyl@mS|dQ0i~3pav~##MKFiHva?+jtOt!{y=D*;SJB@f? zg)?j&p_e=H9$R%=|8I_3&&A}5IrO#83L)FLxO;96T~M{g{9{}=ESp2YX4aT;jf-5X zIb=QB8VeqCQS3K|mKa-OWg!=phv(2ig%#{8xv+gdhrFd$-OlaLe0H9>6DTU(68?)OYG=aWM>4p?jB1(Sz})o+V_IVT$(N zaX9ySGaeznFgaFoOnT`!mIafoACYAr^d8BL)WD_^xoSF{oY$({z*4_`OylsPc1O!s~g3LtPt2(0Ofz9;LLj2pr!)Jo2 z^|Bv~Z?27k?yq)I{A9W=APRphI_PnA0Zz_~!e{ReI?DLGR}_}VchFkKNlT*8^ss}5 z)vz_^M4_^|gC>4t{`OJ$HAzN64_;!fPArYn7>H4~U!ue-mhzMb;@7R0C_WQQ!xaN? zfwAakEbVCVz=tXr zIw2LuW-h|HTov#~q+)i^BA8aFKr!hkBK&;edP5aIrys=>o-cBeRZ-}E6lzO-G5NYG zCixtNfcYFdqzV-~M_}@L7+&YV%*+w%-Pg0T*%4nAo*;#cU&k94|5)K-a z9C6$~465%q7~JImjqotE6mYOu;ed$kVfdEI!NFPw6rBvirq3KauXez+|H2UTk;U`F z0r#`RFjvHZPn82^d<;WOEeF4w91zS2N7FYBEE^s0%_tln*t7G0JHUTfIC9vt9v>WV zYf?CRf8b!N$N?kgg+p4(!JSeE+zATD=l2{`7CT^EWH_F`4u_(e`KLLcx8??X`Ofxr*8ykE zHXw_|Hs_oJ)NMCFldW_6KL@;^4cN+J`*_0vi@i1=knKw?#R1JLH^7;lm3E>7{@J_% z8Ej4W4CQGBnl)6MsE^%@`~0e=;dk`$oUwOqHEqw;hhL8JvISIX1w&a0+U?7Auf%R1zgQk#qR_z2wjChvBK4D3;WX^Z)2jge8S zW&uK$@)7%=j9xL`xttG;Z!$W;`05%y4)&4LYQ}Fi@L@JhPE#1yMe%WYlbm!JYj5Ub z8lu^~sB0M7@9$%2rrKTc0St7)~x6Hqz2zMfc2>gCKC_i5KA3sS> z3m9)c&Bum~amlNpk9#UV!v#eEeG`C(TI(;Gg81B!+ zxA<89?H6SYHpS(0eEjq57kN!J#TIrphp+siY9CX)V`tE~?-yk=?eX`!Hs|s2=4u_y zE-*phLq3~N>xlEs1kP9aIMsvISBpuv+PS5bf;+df$;;RbP)@;^huQSq&J4lr$vB>n zO?zC;uW#Rw;Je(7%x$U zm#7B*bt{nMql&fcS#fY2;zlVWtF;EgGjZ_Sri{yjYQf{hL2Ep-+tnhBak8f}?1$9C ze{LMcu2F{X;aVJ%FGuw(RY>C5+|hdl>Sn59WOOYedaS^x>8e|SwdzuH?OKh;$+!%)@c+kE&8zdSh zBl1rT$=?{k!ZaDvp4ZU#0wWBwOUAq@HKeC!jL3Uks8d>v-W%0%=4Kbnl~-dQ~g$mgs^_&Ifi_2y#xGB>(%$_5DoxR`&!jf%I};PF^42EKJ8mE|_b za^a#Q&y57ZHt4g2`DD7$lDRerT*ox_T{oIK-Uk0{<>FYa8?EnWgUd&`h_jeQ7gcTW z>?#+l7tW&68f#QN;)1tl7HJh&Be#HQ^|`aC@P{=DnC2Wddlt?4ZjB-_7hKm_^rn){ zOB(&qcg8Go{bmgfvwpa!G>e4H=gWkC;8nWOoln-?;&)}ULx!CjMc=c5Wvw}6ZLZ}0 z&ITwo$GHctv_oWryE*2#z221uys<&YEpzy;awR?HPiM^0Yndx4U$VjNJ?5Bb=1S*| zvTt$Q97o*UsL{g)CeO^_li)_~0XAr6YbKStk^UkZTxak4^~sF}t+ByA7Q?M`ZuH|H zn{Kg9>@gHS3dhr%uQnLeY6FYJ@zh&pgYT6#h&Vr4AhSDMQXV!Dk3s4daf@P{#M1#*=X!dSH(SQE1J)?mT^)?J+K3b)&&(gushvly=_*QzB)Yd)(6k71Qh!Z{4*Ia8%z_>d&f<8@ zhqYA}w9h`vUyppyez(B={#pFXeE9gqf<{?qxn`Q0K);1@;)Plul&N6UvbJk^AaO&b&4#qcUWSRvrz0cwh(UQj_Eg1FnojB;X zK(t=uPJHG&@xXt9u-fWQ?IZ8R@evEe@=flvSolu79KS$}IqFV8$UD((#sV=jL!Nz$ zBiIZq60dC=R;#fpyJEWSj_3QD>iuHcKgIYgm)`rif+y+4tX>*N_ZtfC+>pIM@|MF2 zx?e1&YFQlT4=T8QvY4eS;>g~wpzEPx>a2>RVy}YmwZ*iW5y!E$3X0nn(=R8UMhBG) zl|9J#Njx3)E7_S;&icRlqs=$rz_oII-O`_fh1I{$oNHXc(d+$L@XiFgMipeA=#PDX zDH~0q8QH%`>`b(!zx1reM~Z~m9ouSsf8YFQK1aS5y;s^WXGS#N`@a?s_t_96wd9XB zuf>Q6{`_3i4)80NLB6bbh;D9exGd|;(mot;6i^cX&BE5(cl86+ge z&?2}}^naM~f4@^UrEjHZ{V0RUt7F(VxKcF8$>4T$49|yGiuUOlXeP(deqE)o`6q*M z17euDxl;Jw%wS)a7&6o3_^k|#Tf|T!TgE46(9J1^Nb_&iba=3PKF*iJ3748PMRF~v zg%nbgOn1!3wJe->LyS3RolgU!Nd(IJ*{nf6nnsg&Fiq+r%Y43hO`?gcv2`SG37Ew6 zKE~Ke9@BRcV|y91Omg4wN&FmV%o@oJV!}I3|d=GyS?2wSLo>|)oQlf|aA-B!-q7TwuiXv#dviCwz0w7`@m+siqo z>rUuP(`sjDM`Ahmf9=nve@s|=tQ^Ow{aKo5!u#v?)cZ4riV$OlJ+P<2?ihmQK4_%& zSadsv8TE~s73{#$J29lzHKyAN2c~_FVZO$gAzK{SY8p#ni4pgXIIzPkR%%is0+Jor zZ63?cVk4T}b6}{W@F z{i;N1duJX`yVcda})KHZ(; zf&OClFCI)C=1!;X{^HX}4@UQJ=Xp1O@nw_;1KPN=K=QZI9&~Hsj)&x`F&=cN<<5hy z{=#^i2i`y2SS;CeyodDDZuo}yi{JDfJbB>8>puQs!#oetuDNkQ^0pWcE+2OzT=L#n z4^D1(!&~yvI1i>QcjJAizi7AKgW*wbT$U_0c(8Pw8=HFji+l4uq}Op{p4MLsnpRy4 zIY^D9UeaFlndCu;TU$;9M6o_q#W>ftZ0s9F*c}y7P1_PPJ_?7MDwa97WvniW+^Z@s zHEzq>tx@zks3Oz8El-X`QEQ)y>1J&yxEaN$b1LjVwIShA6zk5Y_)XoG>t#{oA6K!% zxGiUmqS=2`#b3&{9I}pP;$an`Wo?-27R_ckr{YN)y7)(vx?hE5P8$MxN3(K|ibfCH z&}K|DJ$I?-^q>s|k)^isZ!~UWv?@`uurWsZGg#B}Q$mUv2+yNxnDFU(^~{{k=>HbmJHKzVd$cpsS}F zxz_%o%?=N0ORqluMSJl_qRf+uX4E*?UX)~cuv2<_<;nIUuGoXs_x|^H?AnXpUVAX^ zd@~N|+lvB~C;j&|W2fZLYEQ)4W^9#gZsN(OxMmz**k0_i^W@N!X8g0dy=dp_$)?a| zh6x#A_+slO-BGhI2ixxI*$@u`X#@P14I>M7V zi(Tm|xz$up;%B+i$hp0!J4juHwZnX>9k~0r^ zVm8l({vFzj?}t4(GtmXpuIL3>!y2mX#R%oN?HoaI3vbJSJmuUX%UM$Wvvc;!sG~b+xMMHaAdUuPaqiL~t)W)`&4sSL+ z1=EgUw5yQyd14Ar-NLZ_Xw01vDa`f=!$$Jcfhm0P4P$E!6|H)u@O!H;HcMWmO`%zv zFg8iv(;3iCX}sFc2@x0m!L4a0chsp4>x6#i`##&gLkyA+OV!nn~~ z#n`$jXidYoF8Qi?3XjbGA3GYSu>VsiNBvZEeUnT^MkotAs0hzXX6cPk{vD(u?Qt>< zZ-tU4`CUdb>(fK&KTRcTSu#y!`~b=Emy_9%6Ux;^s%p<(I7dF$*f1iCjd?dah2-ck zmKVrgKTCS6^ zZk1?cNadJ}nNmYR&pD|KmG|o0RKf5msZ5viOzI>xc4#VtjzqC`xT4zHB5%uk-HM`R z{7(@e`QYDCoI3tfm`N_lilR;KPx0VZDlH#JalUSq*duw)%P3i6tHi0~RH8GZm_M&d zbd=*iOQHxmDAy*L_fg!)k!!x0$`Yxe_o@}-Urgn3{8r9+f0u$Ll3Q0su`yA>G8tdLDvIDN1#h3E z^4>TaMX7>kzZLLL@OV=GP!YYj0PhatNj$0Ic1!{8l1)yiSU9VI)`8>s_qK|_$pvVG z#&hANiesY+s2DJw;-@Np-*b;E>*uoX%ui8#^d7f1&n2hmr#KF#2>7>rmk#py}$Qqx{tYtc8U;8ea3`u9iejUq7zKbql>8LL1aC-G!ObAWq zNQREY7vIH_!RhoX)De>NT|5jiD_+rwAA6MEx&5z~j&6^C3jfdP94OUsW#vyX`cpc=#(G99{wc6HAg zr{y)7^O@!RF}EwdcbhTyPC35gy5g2(Mu=ktr%&`lKiQP+(y#5g){npYm~umM#lwEQ z?PV%+sDiC!{dhIblrqT$M*T4#Yf62m3Va&$$7i%DV;fY^$h|*vyP7hhW(EEM{qew* zkqs+&)?da9G3BTnzdpV{5uHq{dBE!-71VD$fZz~Q-gT|un%w}x+M04Opn}P!1Gpr4 zc&iF(e&~;DyZ`^!CJw1!bL#<&n`p|BaTPS|IRHbPDch!1ux`u%wr?b@b7w4&MvE<$MykeVomw)_a*yv-TC{*DpX(Xpd!hROoT_SPVWT{o zw}0qZZBivVjZUX#Lp|B8szmsVbh3l=+?ie_et%FzT%>{Cjz)Y5ch(ual56|-b*YHKI5%rT~}&-wibxB zan|&dJY`RTs9a~wqHP&8m>0vIb3etVtr?8i7(Rb;cb&8s>;AA#S4RBNPN|B63S}69vsyWpzneJ~wS+Y@0Ve@1X--q(} zsG7-c$;^5gO3Dc}a}u(#ne0ZFPnM|nW)q;78a>C7(_6A}|ILlJ_bs`*BAeF-+?bnU z$v;m@`FO{`?`>6_FDT`aWS71wcD^m;g52V~#U1y;0 zH5L1wl``X30~+a-9vu5j)qs%{-ZLfWz-KmwkEGrm(`w@uiJyrXG?EGVro2A>nVwxn z()+t9j}Crje7BJ-t7AsRzR%dV8p+_kW*pcf`=);skEj0-H+HA8E=2b6Nk4?0?AP~J zM6u=1A0pf#9naA^qO29Hv6nq=u8t0M6(rfEGj*lxBUTD>ZRNSxE&GMkA?A{gozt<< zOo6XWIw60{bEHua)+n8dTpeb{3XWPzuF|onfdY4ISQIAU<1&Pnn z=q<+!yrc#=Tf{d1;bisEU`Qw;D0nz$d^H^0T|~jq;jFK(A^ndc7Do(c+84F-g+)}x z4=3bg1Q@epY#FZc1~v>f=HDS@%rY2Y znlZD7mSHvDz?8*OANDI_!~z4>+l|@Yql^}-46HqFj3%&*0c#Ch%{H#49~=f3@MrjV z8s=-V0LdjH>6KD z$oS;v z)>pGs^5^_>Ee-NxbVqh`jWG(2bOsQIW$XlJK!LDt@t zQY+@ireVEE$KLEJv1mye(|5|6tW?l!O&T{7b(G57*t<0ieTt5hmI}J9{C5q}Bh&aXR!0pJnQsHr$dvWJ zjG|NDDW0~IXloJJ=Zvv;b3ldaRZI84X*MGD5;$)}EaIDu4XxdjvHdrE~`@|}!{j6S1c ztBeV~GLfO_vbNmKr|9@Z1{bTU&GSXxYxmcQv`N1A;%5&9EqkYO zYf=;kWsVK#mCC62DEd*|Peng3LJ>QhjQJY&-Y?>L_;4mH(9r#E5oLXcQ#nb)naf3N zklZm`Q>~7rt@+5t(3N6l2PZDXd}Qde6~cS66WQ&Px$Y54_--{dB=2t*irW%3O4;Kg zdxa7p``xED$@q^6rC+?7*R7LLMTIhPo|4jIH0qelkA0z(EmtFalWBJ? zl)*cy_r#s&GKjdYW7BK}_s?daeyn5e424{C29)VoFkQjxOBpboj&!F>7JmP@PVNxl>yEMIsM9`49%<3MrqiKo*)?`0>$`OjAeP8U~7qpFN5G*qGr>1H~j6!cZ`E%9qu@m08&7$zm4nF7~0A{ z;yIRtzhqDBRE)wVjK8m&(zH!6yBmek@tP^Eyow1_hoO<<^_moO$|MY@C#Le97c)rm z+8k5jO^X@xC6qhQO{;y&I=#iwRSl z`8ueBs3&8ZggSG{v4hy}?nUh`&bT>u5MMmJ=<4gt$VMH+g$7=nn_mUGm$8``EwqEQ@ za3b}99GCI&o1GZ=M#k6kV#s1AihMc>ja+BUEGGtscNC6aJ&73QgvsQNBBs(4w_Z+^ z`E?XF^}T4|@5H{=9YwUY7beY|7}d6;cp&G@t?PutypCeAoKquf?qF5Ij_jt*x|dJQ^uT-wXxC9jw0@dCx6P?_`Ry5$d&PHWj^OC z14LJa7gJ?EzvvPmetxfBGZRm)=TxsD6eu)2JGdT~p+m4LQdb+_cyT?QI}ahHkp^qY z+Bi%Ay7Q_^&-q*kMeV%7$ReOOtt60*Ff>4wHK9P_LN@>6uUy?oL%kd zxH?cwnBv7UKYIpc1qyAr7dl6KOdbS^Ta&zKWNA-&ZlEZM_rkQ&j>QFmV#a(gzPz$S z6a|V;3%uByWykiDf#ULZFT`a#be96f>r-B|JZeXWtAQf&j2Gj#*fHrxpg1XG1}w3o zjiQriztan5+hJndNnG6}&+lkEo~S#CUv_)p+}n;*rk%w7JzmxJWU1VfDla)_A1~U; zJqh|8AX-fJqVT*uORfZncMH8(yw4uLv;a|Ss~2W7N3#WK{>TV4X{m*$x z-(pYrcv&kly_g#+=WiY$o|Smv(8V5mnGbtRyt&ZQo)S%fxNYyvK?i#lnFWa8#@=+X zko#;MAZE4p=JjVg?!D|N0z$lbm~Y3FypG~(UvFk+*fFTQqbQx|&4zP!Y?V0^zetWR zOX6LpU1C6s#%!IR#J5JfMBmnp*{e%p@AsWzNT0@(?M>oG{axZWIetAMiHZ)p#AX?P z^GFg!V|Izvp7PpLN#riwCH`=&9&fWvvh^+zE4k~sB)&J;B_bsM_rCwtO9h^3#CO+m zaEXG>PHDXCAvM)v1zj6Rt<^!tu|E|ATS^V)t>eN)1s^0gchHggNWs0DX{74#7qb7>N+a}HGzW7P^sX(n<*jJS3luc1lZL~|XxbMmsFXZ^TQu`a6r|Tp zBY$x;ciu{ESuc%lGoq>eUO`dgG$xOVrb#U&7aY?_`z4wwb(Ph6*vBpYQpO#v%5_g3H|nbLo|$T6~S! z>FkNnV|iG?h1hhm7wb8GS?=x9bSA8jefF_}iZ$u1-KVErg@U`17a!51G*=R`EuGr3 z=e}y9q(##VZk^TPdrrxuCK-%K)uBGEWVdq$AOF?y=(v){P8qEHtmE)eCAB3tvD6cL zSV<4Z43eDn^gf`(&^Uv>?esYARdUuLgQ8w~Dt0L;wa*}atez{|l{iaopwqKvi;_^g z4E|azb;Twnt86pqvR6;b^-8YVWbiCek7A9I7Zw?`E7Ws&w-U$5OBDRkl^lf`{YPD* zWlC3eOFmsA9h0VdIwUAqYMl;p4K?JREOJaIwyU1{zbP>BOvg4@&%1*PMz%?(k-wf= zH>>aMf9E+TJ!wXLJ*{pj7;BtPJB`#ld6K`Tq4}c2|EGfA%F>uEJ?y*sN`A{vqkDyp zvKC5`a%3LLnElyw5tkNIn=p2{yujxClPsVAYX5uY|aX7n6AbLtya`;PrJBNg?h zD4Loo>3cJk;JVT5v{Ulyg;XkSqM6!C$=sw=9<_<)Q4jg<5>q+TFB&mY$>*!7G@BaD zt~v7BbE!;U9!;I)N)8`M<=g>z7IrAB-D}{hRMJhOrEXBNz9N;{U!u4ybHnz;W0L#I zbs8ISVgF-vgY|gYR$udfV~$^V%$Wgt#yA+!_2y#^$@qrtCI9o7T~Y`B@AoxkJbBEr z;d&NLGvZCbW1NP`@kk@;mp^8K%>Nm|Mg-q3!S+@h=95%xNGV~kNGeatyh&WZ*M$Tr>mI#YYEPY@wiV>v0L)azvG!_P%%wk z!l}G?+}6wW%qZdSuX6qaDmwm|$G931BulLoaU>6Os|d=EsnMRvV{y$0Hpm)ccPS5J z$sJCq`EWZAgJlH&o>p@=Gmr1`+GS_ebbFe|P_qd3NUd)BDvun~2zu^PQ~oxOP{|+v zl-j;Bj{^=7cwA6ZYMf6K$=MgxT(-<-r+ozTQ`9U9&gb{o2pagQ`4(GB?I-bkouQ)5 zoKhYNOQJLrRILW#GjXRkhr> zA#>(pRTRH>Q1ZKEg(jN*1C$JvOpR!)rz)AfvITQC4H1nOxnrttfm4qmB5#g6k&>^P z3=s)>cRoyPLDL&yBEaCzl7THKnHwh5Gu$zw1%q3Ki9hDbc*#}oLdBSQ?ijUf!M}S$ zMe_)E7C6Y5F`?qRj4za|b_x}%WxTFN3zS)d#mI^7m{&H(YSCcf7wXP5$u}4*s)o6f zDLKYyu(&(gojyg)QC%J+#>n^=+0F5pIY{`+_@D>PdDCK$&k&LYWoG6o3OUhaI~*_=tg4G>pl{H$Hg z`7Q>CY~fyQf82B}*z|CSu$%ABrD*xQ4Tp;UG46P-Xu-sZL&e$^?(Ey%0_(#=g=(=o z-jYK;4;3{wx^r!t+|PEygm#TPKF3-xaLF*SY?nKmue9K6_Arrg%pE7mW19>Y&o8;N zGOGn{GlvV$ba!g)T+hesAxv4WVe6*#9Jw@vI=^dh{e3+n4h*;!C2!#(d z3~&FE^cAzYs8_Q|a_Dcfv6MMq-s~j{ug&J&Q?>ka5zX>t@AEXJ&xJ9*g()pQ zE40(k_|t4g4YGeKv~4c=GjU}N-1}W3u5mYx^fV(%a^u?FD4$@4V#p<$Sa*|oY)0Lm zskFKg#rir*I{ru{?Qs;ss(QWZeT-S( z|0yA|c8#8DjAF!79?jBYHQktX;ZKR2tLMQoW0uT%iqj}PPOFW%7yFd0($AiqYfSP| zd9C!hReEE3uX{>?>@T-B7-N3uDJSjqr2b)yT9i;+JC3}6RQ%Gegc+`JOiEQ@-@N4i z{@>94FI9|kDdA^G91otz+G1P6y76%geyAd{j;u5D;%N6qMIFhfH;(1C)SRkaLjJQjj##Q0Ao*K)9Cyss%$K}G9gn}Gn(n40 z9J7t*hpY*`N98htP6@W@lLA~uZ?f9dG1Fyj7Fsq41um|$!uG7WV%9lv`RkuN!-rH;qmMx0ueMwYFPCM}Js)%^D1 zC3Gu_$LEmjBO^=b@g|=8mn07=;aZN|Ls>K5^(x`;op>@ItEkYH;BsE}l&30UJC;!E zU_7@zsxWO;!uL(_jI&a+&a;G)CGq@ptG@s1F4t%IqbSU5%o%p9J~f_3ai)djKkIYr zZWRCgVlK~YeS*`Xh#75;+k*O-BuBA%o;kln)aPDO6qQ@d3C_=A+yEV&%9Je3$)fX6 z9ffKm#z{^br6WuB?k8+i?aI-NGMcld#%eCp|2XSR`SZN`QqBQ z2Dp?cwKlQ&;%B{voO`3xHciME;jRq{E>~(#uF4mCIyL0^2cdcJrO+K_(N>}b(M zh(=>P8S%i5E{;O18|8^@vGi-rgg7!w`tI*`3}`BZ%S=yNS=lq!Nr+vMo&-7Dv&}&W zyXl_PZ!NuQUXXaU*b}Gj_KbfSB!(>V#Am2ITb>1phrfE#WSTvJ_Ch4YdeUOPJ<&Eo zxW{;sEj_HoI3czz_hg;)wwob)8!(}6p34L&D4c@pSA^Cv;##4%5b z`Z}=XQIKf;mnR>`Ibil6NF*kBqKtMRCM!q;9+A(u!hrxYA!2^_r1uU7&S-=%`puIe zCmirq39)RICx2Xbpt8LXcjf-5rw$O_v%T3A zY)6!3fatlznYjAX zyJOf6gP58Y>?}UUilIntWI@8qV^j`--z0}TIL5~5FxlLKM(M{$>ks0qIUQzXGB`#r zdzX@#6Ej&mM$g8JN?M0!VkEuB*-J{kNS@hN*6^#+$4$y4&q>e68%km)XVSlh^a6L3 zbefXMwNE8;j=7?Hd&6UST~$NL*GZ&N1gWerRlBx}wenX-rKCd-S zQ~@G?TT=#_Q6n^?O4Q1k1!LQ-4C5?fnC{*XenJz_cPqJh4JTpJb3 zqxKqhb}OVubSyu5Y4{pY$iv@aaTueirmqZ=z2b%oWxhLoKV`D+g^mh$BW}LVr15th z^8$^ql;am(>o_yih}R!8=~Mo{Z}LXWR%9_l_Rw>yjp!>`RjK2T14iVPXYxtrcE@{0 z+?|rc+28hxRlS_pIx7d$HG4&^o=!x}%VFr+y<+_@P6Ym%!?AUHMS~trylVK8>+R;y zWuuxcO^iuNXFcZ=pDA^b zxm0Y-_`YR4QqJdqv5Fg#dw(%dp^^TsUl}*b474{_u|RS_fq{5S75_>;^TfclS}IC< zlu?*zU`-tr=OtggZICt380%lk=y=J%SA~jPIo|M$0lN}oI?3^MM+^*nYs@b}W!&6t zpl(I=pW!Zx%OTl)zesuE$b+aHlFauD$8U}}&&c7@n|)$|wG*?a=dd|ppIC|$d(P$3 zr!YViHFx3nW4Xj+2Z$XuF4!H&WnX51sFHkWM=p=j1H>3x7usyh#rp36aYyo)Rk;kx z2@p9gU8Gjc2e+>|Ay0|bLE@*G&Qm! zUGjx{S%YeQzu|;jB4klc-mRf(Xf8fSrenHOLqJF_hq9-0bf1P6P4jTKnZ@NiH6v~E zaQ2-=*RN_$gye9h!G5v3xf2J%a#&ljPsFvXzK7PUzL9(Kptup%n2Yni;e6+ynB~{F zTHcl{%OU#WUNJ=L#I2<{yv^GyY=WG)8lS_Dy8FcYfllPi&7oxrIcIQMb&ahq~jk+)mePjRBvjvSiT*ds^zdgvf+C~!7wM{59d&^ zaE~|^=EU$rISfnKBXonR|18qzt5W+YK3^>QwIQ`7A3B{cIzDQM@^&d{_Y5>xqNXUL zloOJdOE2HzX(=XG4RlIY6ZNW;k>?GR=cpN0UJ8=K-b+3IwUoGX2JU=NV{TkV(pdxT zKB+0IQN|9*o2@ixt;={Kb6X>8RENf8{F!3FU5-1rm$6v#d^ZiVeapC>Y~Z!KhQS@n zI4rpX($kHT9w_y`cre5f|9*N#W#1PEA|3hOS5LEl?~5&q9ck5BkNxZWB7B=8?>gyu z{_(yTeA1Cq-g+)Qye~ZOIr7?8&w-cs#mAS9?2|mSoSu|cJb^bvW4w7r_(UG)L zMe&#{mYvoSGhM~0!C4sH)DhTE#k`(b=pO1&ww69CD2wtU9akI3-qa?G39{ZUtTbl7 zM;23ROF#I@7;WP$BHi>P%etYimqkH)J#qJqxnY{ckYGKX&Pi|BEJ2v(*s!XV9e)@n zh?7@s=+V@UvX@81^3yi>2H0^i`G^SKZNuUqJG7gQh@hP|6nooYHT#HAt+FA|*N#CU zN5t{DHdHy;@x=XzI5f+Ku{G`3qd6j`kGA20)NaMOhehLH8{&=Z`0LVPQP|FgM;bet zZ$2#YTiej-y=}Gi7zZba@o#O&(Ax2L_XKfIV@u6Jb}WoY5bpN244Pm^`>hFLYLG2& z^>)?jgWcb`JiZnvyvtnZdOerQ^g!XGa%K93Ts)u3nq%WiRh5ubrQAayYfTUz{@o{i@ED$d~`0# zWu1lglxwwm^08JPhhvl=uI{3ZIs87KW5<|c~p};f{)DNiirj{$?lhC zv0tsBvSA)B_h)fesi9SmBqqjtalDrmft{1Mw84w%!B%u@n?(HtFT8tLand^pm)l;% z470+nX%emSy|^>o3Zo`Tlz#Q%uLvu8I3+Q|qvX{A|^YG<}(L}NHjXNch(=JaC!^_=S($JTf*a;#-#vfJtVj43+EcxV4 z*Y_<+ZZ|=Em)Aaf*%BwC31W=3N3}ILOO8wm7hNqpI6Bjp@!!M63XO;K*}e=5oFvkf z9yFig%jNTvL{qEk*XA$w<)b!SsNFs2vDufQ8^Xo9b{;$)H-^^jZU-rfTkvJ>7(U*; z6|_~^lE3A+cjWD$?{!-;X8C9`XWR-JlI(|H^k{~!x)l_WvXL!EoR^))K^<3(ZFSaThll^rL z9+vq+)3h;-z0-&vt*7vX5%0Xx*fLSi-Y-VnkbGvUtf#e&`F=YC>(%qy-9 zHI3)o^d&W{=U|y${d?We5lU?*j|fc9n)7d%QX46G+BtK^3{+~bHHu(&hB?I{O6@zz z>MV02dn&a~HW7@!Z%$x$rFN2c1QnU)+(4<_D7m*B@7YPIy(;-owmA(tD79`aB2bo^ zqblf__555^_=va0QAtuUrb%if~bd3-SQ<vAGQk&N$E-;X}_Q^i6V zf4rF=J*G_+9`+uzlRWqMR544&Z)@+zGUYU3=jOr3U_VB5nI(w-IO?aS<^rODVbTJ{ogM$nFm_2X0u<7MN3&||dDhquWE8)sH5zi;CysAz%APQ#nOdtokf^5~v7DG#m4{*lP4f4$jz-wONhiBx^}#=cP2u5XE)uH%Doz7-)~ z6LIzNA?}kE{$CQw!H040t@!m*BEchlc&V<%`qD(!&GBKKaV-obiF8@vgI-aKyRQ>D zyWfXTb!u_8IFSh#eRyV7i`y>~Ig;taZGg;6!^dYAN(b^ zd}h-+Tg{*@FY(pRrmysXH6_muolPBiF1GoPaXxrj}V2tGnuXqf*gZ>W7A{^>{d|@Q{4i zUyo4-)&J>=j#7K&^j8ri^~N55h><#^hrOP`t5v94XVFu7z}Zsgoa~gvrN(+L z9#XNQM;884lO#$H-hMz9N7~9cuc{~il*msW>O?RAFF>)X!ATlyq0>S;VnDfzDy9?d~AulYlnBf z)FF*+8I@~CFUzB%t(7gqzuM8(;i%YKX~XA+_SLUd9u<8;Z5jX2j)N{o#o1}LoG!G( z&-JKyFjMNF?{<{-I4U|Xvt?%ud%Sub6?OEs{MOW-!pNf{?sr@MZDr5Q8ArwL^|r+H zu;<05qvG-=TU>_Qqn(jWgR*GKrIrYpm(6pfj$lg-XZ6{%Z=j=xxrUCCdo|NBu1rn0 zh1t~WpyP_vx|i2vQ{Gp{52^FVZ92gDkBQ>NXD1f?c7U4q6Gd4aXH3={p!V)W@l@$d z?voN0yfmJ{^h zxnnI8dZd={=PLuv+)T)jJhIS$Rc8}I|1QC<$iTAaaWdTO?bW%;&@Z{{2$PQ)){uf6aup|CaE|WcOHG(8`C#+; z1R9z0t7HrR`RuVarB1g}Ui4bPnyqH+>{`n2gBMV|$&5xJrPz#KfcmHzE|RxSS-`E! zW|Ws^v&~oP{Ad-e^0EnOuVc>dD&{`Q#-y_jBboo9Y1xc#sbh)E^FOX-*P}sAhuXfBNg_I#7*~MX zn5E@L#7wY5aiiay_e#s#tFMfP(=#Udpp`yx{{XJ#}~#sBruK0+*mU zL})d5zI%b9>l_rrG)(yS1%(6VuxNpXn1&^E{M$g#E)An4Ka}2Z<_Zm6CC`?AaQj>h z9+K<)W#H;)4VIEm?lJIhPYvY_O6a%Qz}L1KvK;03CIit<8h(-dZli&bX7aw0H?A}g zA-$x9&jWRIju9^XIyz4Xr8~#?)U(UH?ya5|o4=+kC9crLWrkbRh zCHV9=a3)KQ(3H?T*uc)0uR7QSZGy{gdK1Vr%N z&WxeS3T?d(5nMAdWAAx|)~daHmUpI`X~rsL)n8N6^f~lm-ULjuC9DFk$pO$qo@% zJT)Oy`_M8M%`w@sBsGI5XlcE zmyc9vS4!Tu-Gp7C3hgGTU3L4b=S)`*rS@0(eq&l%P{&oNeJ0=g?d}#Nl-{J<>t_5pq-m=u<@pj~&$drEH({#FBL zpU*5P>BE^_mfUUnnX1=)SiQ^=jooMTZ~E|ZsU`k(KciEGV71 zJ`?T}LfmmnHdTINNS6@&Zdj69@rm9;LYR2Xk}bubNFEkK+Z;>MUw-1~j1VS0v}EI> zPpn-Uf@6s#0qLKxS`tFueM`)4eL}Y^gfp)#xu5che^-RCL{XE+BR^rWAcP?SHPH|H z#K-j^ls2tNVDC@7l;e3FYVxdUC9ZS3(#XFi@wS!hoZXeWGUj5PO2*FVNw?*lA6@b zD(8n%P`;%mc6ZC!s}g)YUX#U_%Xw`ru==AWAxF!(S6}kVn$_}WtCLczl;^t9FBUYl zS881(hX+^BvBfg?a^!go9A!aJbEURWp3`TuE%@fA)P9ubckVI^0$a&k71DFAzY=aOYkUmbH*#|Eym@IjwJj;n6EpX|k)Gm-`ytR1^{y(bD zGOWtwecK`+wblZpL`B*F3~UgCIhP$++un#>*ab)~?B0sqiKu|O6$BewF;Gzn1te4q z7TEot-}`>q>)UzEaX&Nj%yZ9mUpL@kQBOVfI=R-7dJ4A7o^GF9t4<3AgJrLGQm(bQ zs{*TGdg^OZL&}FMSR{MHGZz3a(7lQ-{d4>O4~*U%#1>fbW(} zkiL50U3nMYS`z9ym#ya&n8jJJHF!3+W+?HAvEX5!*(6H7Q(N}j=GkI%TW1y;hv8EB zNQ~*{Ok2s9e?AgjCOGrPD2$QD*`i^DGdn(oqAGtRDmFONOY+`NkHp<0&V2tEN^`wz zaYWXp`jYpQJ`!tko$2!-6q8$z#EcKle5nd$dG;gG-Nc1ml8uWV2`5JvE>=qKaP^V+ z*~W$9>S64BDCh6(!eYs)f=A-g7#DWyh0*WwBe5l1*WbHr+^Fa;1Rg^KxF_OmTYvB65jHf1%oXe=e6aAMsRYj1JRD)&8mrT!% z;KhG02+*2L84lp2SouqpRj`8L-YwK z3}D0L6$DJxXNBaGqgOC+kv<(?25?x$)VZwBj+AuNKZmdZ6Bb@fM-&Vpy_pGv)6z-4 zJ%lwaO~_79=Tq_!RymuH@NYUn+lMg5-2|@#>BO54A^N;A-o9DreF-CBr2(^jvRI{9 zz?5YMoNAjzEtds&EjHjwn=JOXS-?Au0c|BW?Y)4+CWG^zHsbtGjVf?exfDYa6vFm;q z-~Kh=T>pEhvcq_I$AEt%o8^VEvdn-z{qC{xa~PFB445l<-On%%SsSvuAeU7`mI?O> z?u;wU#kct~@qLmz4U2LqH(Ms|1-p~>I+vjpOGRd^JBzAvak#luEMDl2_4xv(YUgrD z_PLEu7BKtST>i?FzWs0k^KZ>XKVSA`y9=0iZ!Swe)Zplb0veUhCAOjl-B%Q_?Dt#} z42)PAQ-Dv!To%_eqR;#Sw#Yf3)ivT}Z~-+;=ke29dYjP&)G?n&Xm=x>bvc&atRq0tZG6JzKu{nfC>KRCHJhWgTjy|6DO;Ccjq zo*LodR!WiN=^u#ty$o5k?*WI;hW@|5 zm3qEcjz0+HvAZEnBqzKKCDFx@$UP5e^edEDM?>!Hmg6j90i>0rTA z$=AjEgnZ^G!?=A4u4H?|4Q zkDK#Ha_7({JWev_({<^W)-)mOs5xUY_0(Crns6-6oFQ_bYfd#Gah*BKKbElluL$gJ z8e#dSgwsS&Dp`MEDTV(=Fn+5MlO&HxiQu>VF7JED@$?8%Z|dgo{)j9#-CDq<4+b<} znnl{(1)NhFqLMuO(E`Hi8%qD4MU&hGwC-q#vE=EW7LYX1kX~jFsjUiQ{V+q^Z5|TW zAdH1G4M}u-$Xd@ZwyrQ_X`_c!?;OVRy@rfw@sOE;VT7g`^2)W8na+_U$nP86xRji_ zk^E^Pzjf65z9W^nW4U{?7>IeEOV;D8ln1-G|aF2_j^E!h!iK<%Y6$q*xhm%K|3r}G9wYD+$HHJp$mhMbVTt3ysWLk;^uf(S)_?ija`|&FP^Psr$yIhu2?0-bMMM&al5N4ewo?iO6__U ztNU}a{yXNd?S7$H(b9#%k|VzqiZR|U?ASdAy-`KNuBHpi4D@vARGIyCfcNSYQJ2I2YyWCk5V?|sb-LN-(P0cxc`3t{m z_vXH_Il1XyXx^+heT>X8J@JKcoqKc3(46}TU-;0qH*4#dQ*F-|T>kEjqP96co4=4K zdAYqg8)j`GA~%Ss1;#|p*uuFFLF81*nl)_;myJe|{7#)k})-+v?Sa6Gga1$Pjj_QsO!%^`WCzh*5c^s&uM!L?u^m$#Mz&s zrWT|O)3V0RAG0nN?ChtdYXg7UjzFuae`{G=!L$ za9{FLQw>WTOz2VmodMPwOl4nS`sO=P^)%EJCOY1D|FtABuagsht~#*!iX0!}#Ed5n z+`5z`qNX^}>X8E%FC>Y2u}&nEI`H8|lF)2$VnvYy?uAL>{UIm%KbJaIEm<7NaALt( z2l8FxnBgDD^;V|b@`z)}h(L(H0IsvBGT@Ka>~<~ z`iqL_dM=a+UdH?kE8^$*P_}y*({g4JOOA%p$5Yp1%<D3@v(_qIoRr@Fd82rO+oy|(hg`9DjA!KZbTRadD-*5bX|p9= zsM1_u*F6W_$@2=g>oMZ{(Ktl1G1L084p=gvCoE>XmjI6qyqe&k9k z{dfwZ(uMksE5+XqVzD$`46N=(^{Ruc9iJ|u9Nake>L3}@(#5)#ZUhz_)LMG2O!n+` zBcqqK^e&m$ta4*}Um5ct6T;nCJJlNfyi8_HabxjvYvPJC*)`0KhyJcjDG~ z3;x}$rGex%l4r(gIdr!p52wiS{r`&Y8aL`RcVy?ye}#F38%ygt;@teC2s-A5`OkV7 z+a4j*>zc4W?#wQ`Bjo8_6F#S$X=Q(e4o|L%z%r4|;CD$<5uxOpmF7)V;Da)+2U!OE2AWPuFe+gPa4XFR*z85cY7>8`nmHkuZU(@ zVSFEB%>Aq)63&EC+|!ub*NbpC7{(3hb|y^*t=;MyWEU9F2{@OhSA^MSVt$H-+V_%=umO9 zV;ytz- zhlrsqJ?Pv__DaKoxja~zsnKbPE~o05k0^wd?7 z7j{=lU!tcr92!hv4<+qw^whN^`}9&`W~ry{IXsxbW0ZvH#j(y}BnN()vgh-9t~MBn zy`>o!-mNFkeI#i$&4_-np3T7{xjEbnztYnToY|69n=DCvb{eD6EqQg!l1AC5={vC{ zuGcNmJUUIiX)QUMZ^_iugB*E~F7$(RwM(?k=X?JMx^0!chU9)Cg2GeA)aj7Vse%Z) zcQ)bIn|$mP5gdMOjCD~yx%DGBUT#d;t$YTBMqui1!aT{1){z9z?k@Rd10^oY^wg6i&u*mT&_X$n8aOl3+C)^6$@INq5ASJ9D1ul<#dK0C%fS2Ed5@Hp89kqkp~NXhPrckDn9e7aqJ|PL&N&;r+srRXaiTmtYQ>s~9fXqPu)w zcNK0E_0$19<$d>45m5iAa7?siMmJ|}yB-yGXKh*7%$Yh}j|$UUwz38~Gj8%x@%xD_ z>A#&gvg)Y#SZYglsS|IH9Tjgr*rLsJ;($61z5XK^WMf7~yEy9h9mz*qGoCk(qjjH= ztgmH8tn`iHUL$EyWy+?yam=?IiC&Q@>F#kDd>F~FyJi&Dj>FY7i1HU^{I-mvopBH= zO3bKh5=XxpL3ov!G35SpQm%(m^Mdq;_ny-%Ka_cAjj5LVoI_Qi%zR`_J30Q+Sk{~S z#(cQ@95?4MdX^dU|zkOZ?(en~DLTS&ccAzYMenG7%F zpRy1ZHZh?=ze1`%3ZYw56VzP`nQG2?g!+=VHV$LrHWL#33-Rw7#+_sngyhx3!)TspLSCmr@~4Nf z;jjqFMahFj%^**<#uajD)?g77=1FVGPhtm)z_p$n-B8Fc z28-b8UhFxLEaDo};_+)Ix<)69>t40^`;QZKU6VzrK`kmqIJ44q4vscO;(U<{Ve6u2v>f%bHirL(>EE03txpMm1Y%;3~Mbm++J_??=UAr5$IqPK>XYC@Ng-_)yK6 zY3f8#zkwagt(_^GkSK=w*wMKiZ zg~vx@u1enBA&OH9=|kG*lCmv|goP$_wamrlU=*5$CiIiM{%{of(%TG|Y?&NI>`>i! zQCCZ+SDiSLV#zdjEelFJF?P2lqnm2^{jw9aQY|THtED8n6WV*0I(K1;#T&dI1qhS5 z9^5y2gK=hnxGnF?&EMtBeHb88mU?jcQ#mhk1H|qf9-MnyPM;S6V#Ns$LQBe7wIV9C)?4kvood-6GcL}9j`k%lkquG)Lm~!!+y?OubU)>Z?xm`SZAU-C5Z<| z?J$_@OoQR&99z&wsLy*)zkfM(WBUk?hw|OKmb3S_)b=)>I(6;VpY?c|1ab7Y8I>Q` zqjm~HZKYuMoAubc264kvL4fqkZ{33kP%D`KWIaFqf~Xjxpzr1NWDg3$aj}BX)9ZOY zHHe#A6?i1CXa9^KhW)Ex;QsZ*FA2i*hJxY^>*;$ihy%rP{?GR*PO1>mm+MjS_C5zo zD#U_E^_Wm{pUnnZ@mFd+otQ>{?(=JPh1gqI5AzyX6mG2$W&Zd%M>{+J96q$ZN^Cs@70lKk81PQ zHdE{v+mR)&YV%#P2=7SpkJ{9fJbZ6QW?R<)V?dn0p`+BIEBgzD|4COa9GcDkMTMd& z(-pr>vxyjADE5}RlD}~_l|2eYHj#=#k=@jdR-SazOyO6Qy|<&xuNJdo4BL`aXZwF8x3aT6Hy>qtaM|}v@}ZMN7MUPW-C5X{^r}&3%;_@!@IsKO4R`&w%O!*@iso29Q)Z@>V7N}sIo1@BT*CUDa?TLx!IDbYa44GGIi@V# zUqZuE(R^BBO0}&e1YV5hqsEl6i%W>U63y5hraJd)q`Y?xJp)A7XR=mGc7EGO=zsBG zkBq6@-$z85d-8c_IT!!#BfdBAq}N7y-);Mdxt%=ml^ph@w`exZliq$>veo`vHm-@U z6?eaR(G{`~f-$?CQJSyas*nID_GALyya#s;(Up$g9@dg?UUD@`rY?TNCV^ihnVQuYP0z0$C4IEHK)Gf<>a z*?tU0?q;~QP2=`}F|>9v)6vq(F-gMgf*q%3IP+mylIW9R$AE>-d`wOf>#o{Sxyf0_ z^ZfVO0EZ-zv(t{!RnFA@o+yge+Hv)uGlh>6#aoRX2QEm>|2I*5nPbP|r_KbfO%#R` z>=<9^%+MX*D88NhLSOLjS^=9q;w-4=dBFG0{esA4LrNs~rSA>ymCNFrk<60g5rcAhQy9t42`1#ft)@;M(urdO zYLfD*n%Z(^CuU8o$(oXC>KV&A(I%oM6AG)TZ|~{EuYYRNA-|g1HN6wp4%TGQ!)oed z?>pgkswN*^mN4~UG{2^s^8Hx}dmcs8Xqvpsk4kuy9nHXCQ(0F_nD8Q+kx`~RyimgS z;%JsfNUbqrSxDx*nXZA$Kw*X$bEN5nMq-%s;>Yn~)|nRAOMaU+UbtqrpnQcsC&R{z zHSb!mOmbDn@xtGzC4+bBlU{ASIO^CEx8wR~E{zj*ZCj$ftWQtPIHBp=k`7Pw$!$AM z+!)Z3^ojcPj+-b7ja%rvOa3-X>RDN_{<A1+#w>|#ZWL`N(hSyJ28 zimpc;ng7y~4Gpbme#uein=S~-WpqU(r+S;PVsb7QYeZ2nR@Zm^H@@!RT*lmw#6Q-A zcKKRN-F(UaV$CASzw7(rq_W|z`lhAp zB)C@F3d^_0ME^&%n03^dWABfN5m#l8aK)LPmB++{lv;Glcc$dSF)=&77R^68^L|M( zc`4%w@G+$yuy%=3wXKJn3Ef> z(Ay#$l8xCDcLjg1aCTfaX4U#DwConnrzggo*nWlh(cz4IXUx+BSFn!==ceq(|C?`~ zdu2|(il(;A!&93}xKj{K=s%`(SX08U$I)c3)2&DUeRjg05=?$ab9#@QXHyA>O=CEA z(vkT0OL9n4|3V0+ZRkc|5sOOzAox z8Rb#=9mktu+%1{D*T&;EU%sPXGHVLQQzmQuGVf$=eIHN!W>dP=Pe#vX0uvHUv2sX8 zRc8W~=S_KFnM}u46F70tl;bs$+1hOaZEl&e=0_5h!zXa&iYdLcN!ZPsK$tww!1qav zi=DvibW@%Ev>lwxvgPCPSZs=u%?ql}>LrdKpNYrh{c!s^Vw1s$ttxejr!)3t`~*p5L28x=TlTSiVV4D zTi<+CZKD_g~W@ zmohQymN%X~9Ehu4Cbpz|lRnykkit@N=%6*)#rurE^zT+QnXKjS2mTcGwPNlpEf2o>^Jk0| zmuh|`^YlXQwUPZ!UCC(+IoaEcqxHWs;>tp-Mw+p@*;gv=E@biyGiLaHWns=j(qhaQ z>+)6J-$m^EW2U3GTV*eoXK%%s97jqezpH1(x(Y{XK9(_3p9j=%qV*F?o>^P*tez7Z z$(1tx-Rb&^r>Y<$g)(K>+R4OS`oE8m6QJM zIBRUh;uWbh^J>RuGb>iEOy!7eJDQqXF)>T}y~fYP_w|nK$ktPzYxPXDO>pGeb3L`; z)Mr9-&ynl~Cq&ycd-&nZ*FVR_m^=2o`0C8R=Z=dPFYH;G>#P&Aw&w|veb1glX1e;& zv3UjOQ~fY2v|@j|3QQ0B@%^h6#+@q|9OuVNOKYkJRG`@8N1uk){1{Tf#VvlE>|o7@ z(G|?v?nkY^tQino!P({V*{Rn2JGX)zOZ*5KY)#?cr^)OSBf78kYR$xTT6(Db=xS`u*kxKwT>W@uXpKX(%(41@1k{zaZ=RMA$)hCuP1Ula zksr64TkE__%JdWBV!1s>nz>NB`w8*TtTxWUF4U9bt<7umILd{kk{4UmW_FwlwYr@U z)xBzS?4S#d(@uzqO=aJi?m}{x6XIpp+U(7AAzyt$gpaJvmuD^%Hb0HatMP2MRN(G? zn&C23_0v`8ZA)cUtI4!ltD@7PGG?t`NKAiIVosDXK=N6s zV=W{f*}0Gasbi(b%P=^+kY`fIM#}h;M;Eg0kSP|DE#y75J8R0t_%fzlUdTqN`E})Z zn!KmgUYasrvf;IbO#E$%y0Mn83pJ=a2HiG~5=y1TE!beb}_lmN3a5C-_i&$d!kxZFMxiZFH$Vx)ZRL9%EakEsZ~m7V*2hapmOONt87D84^22ly)`!e=^erK(f}T?Mo=V-@ zxvYY(EB$D*(3*eNSFmr59~-t>vv5ZRz1R6sb<7&C_zEl}KbQRISOpLM@#B`{rs)+} zNBgnurZw4@D|i&;C;LOGz4t3nkMqOxk+sgZOKejry3X^)QZ^z~QBei2T5unE6c zUBUcSIL{WDu)eUE8JlCMe%Oq|<;B$B6vNXaX3Y6m%w(A}o*8B=`(2FF?ii|FF=MB3 z3E48QvagzP)~SSZDKVrJ$=dzn53K@%$mw9I^D~wjvL=3MJc25Fb7pN$#eK{OLQKr* zHY$~Gn@2FJr#XA3rt)jg2)w45)2wD1DK>+-x7VBsi!{!74CdobbN)6;<6@`5T-j<) zof>Ie{cA8UH<}Y^kVeSN!5mL8XR~<`!z~7iOWB^d8Wl0se4t2p>`Bc(g>3&dKy13? zN%b#cJ~D~mmu|G1F&&;jE7 z5*c&1kf*f=2%CAHI%_4^717aUpvW!vBU;cRNc=*xM+uPjo<CN4*h-Ec*ur}P4v}+ zb7bvHv8Ph<`ggS{K4DLehrYT&^*X#uw#Up~g4#$t$6WUN;eX~a$vJ&hWHB8o; zTY+@#t-@$PD)Hw6**HN(Zpsfb&+HL;9~w~S=np1^?-8!~4P+fi!7A@>`np*#L-K>7 zztQ?ya5giAikE-Ww7&&mWhvBJ5y-1Z3x*`-(!)50zfPIacV8~QWRLbb#f(Fnb7@>H z21hv_6PrS`XCR54EO@vgg#_N18Hze#iKf@ELk3i z_O6Oxw^SZ13uO5{6|qfHX+I~BzK>Mcw@GEuZ27F@#{Q|i`8$xKIV#4BRGtO|vgD(R z`MpwU=PS?Qn~I>$so2yHBE$MfUjj!?awNUh(hVviF~%<(OeRMvS-N-FWGXKKe2;$_C}z z4Bp*eE{0rd$m8M+zGN*IzE>O4CNG1}UzUqT7aHpPPHMD&C7(UpVq|B_^~RN`9ophv z&z63z6DhwuiJJ2iv}>P8Lct{JOT9fL5_$V;64xdv7}h_Zm0L9gtyl1e(G>lGA z(5rnuWA;eCpuns{KBikVJj+$!*-~ozIt^hT72If&Psw5p551LyUC=V`y$`OpZCH3p zOYAcrT9(+*(()J+-ydB$+J7eus_^PXa0a& zIi!z^;ba2^$8YAaY?jmqKLw-D=ddO^hK2zOEdR}6)9M&Lk5Z5xpTnT7F(i*rFkyQR zqYuR}XSxEbe{z^1->Zd2!TCiwL|>8nj8jlo@}R63Cdiz;8k)o8f*7pNDyRy}p=~t{ zdkPiIf1bgCIb(&RPcvpe&fsRVv7%A?W{kd@!Q>WW#T>t8)V!8K(2B7lvu87^Rq3hw zcFq&_{ak1&*}p-axHs8_sg0yJYwF9K_qNn*p(Rdo%m1;TmJhXMerj#$-C2596JOex z*wL$xmeU`7SZ-!VkHJ#^Wu8A*+R-&g%goz8cw5*pYN3{2i+!NnmSL;343PeC^IKiN zr?S&mdz`PsPpRPvw)*N%iFGK?u*bWmzIw!oI=p&n&nu8Y*e)MP79UCqm z_|2-<{WHBYgO2^vLtn4?1>-ux$oGqW9 z&11^WN8)yuMpQ}udhe027}|&?x98C(`H`44vk?s?KP-GCPR2GO=+->Wl|K^7EsYp< zdLElAABlcRjTn=-o&#TlsMb+Q?Edxq`#Fe%os>F1L$KLe%8+`Ci0Po@*uGLGH(bQX z0ZNAIl`-^VEKi=Q==rsj*6(6*t5Pv9yOd%%uHVocqkUCOoZFp&M{Tf^TxU#oT3@lj zUGn|D-Kmvt!^^!@4Djnt=rbEyAFbjP z3^h!9q~K^;KHFu#@Ucw6%%pq6q#$=+J_nsN{9B-4$7b34$o=<}waH+0KF1qt znEq61g(jcrJ{k-kD%d(dAG&G?FO_{wa6WO}q;3=|crYrT;6WN{epaw=P(EG9YKSye zQoC0^C*}Sl>nU|=T$3C7v9nAOjjwv~`22o0*{6t0`CdevlH)EZV#r4?G>QAEUOh$p zG;hrCB{_5-tzlBWg8EXg{*q@^|Dpn~k{s?z9UJjNfqiZc9UsNuoT=c_-5d-HW4L`y zf$B;Q$o{Lk{1(H~q=vtUp{@Kz@ku#cERJEiJgcgGIs7h(;h?P1+c)Q6`5}fL4|KKh zziY)-F_Io-sP#!ab~R?40_-Ndmv zO<8uSl%dYu#Q3^RF}o#W#&r|Z^qUg*pp@^EyNLz{P1!g!g&vkc%)e`a)9@4~{~XED z2NoO|k;3wqBPo1rLCe4t4nG(vzrO|NN2YM|+(^0=SkPru3NH_hB&^tid!th@jFZp4 zv|#Yq6kMW4^6ZVSZ~SkL`N-VsJVis-MoOx^$fIefhQsZYTz{NLoh2G-^iguFNg3Jw zV(Drt{h{RUf5(#1NQJB9ixXpM-Cjk6TN&G?#B#pBiZ->&SQ-+`ys;`O%*zN{6icId zDh?QyF@0SukC&+U`lFP;HpJ3@he~IyGxF{{TA<-e8zmPr@;E+A!#N)%UZ?Zq98zNg zlypeS!*jZZp_7zsO3P!}I1T$3>+bnMVID!!YnhK#@~k|MebSp*g(-RUF^>|d;g)Na zZ2OZ(Qi6sP2}%x_NH2O)L;M9Lrz9&=HB5XW_h6Mzw+syf-YK~!dGZwvDnt2>lB;ED zu(emQx@JCe@?_6$qoT|*pI4S@u~=KQQ{|c2T_9lj|kV$lNeVq((L2UEVXsmrN47 zBAf6c<{7m!gT>0CKQX9M?9 z@HkcYr+ez;&%P>oJ}YCHxl5k;>r(11jAiv66@v;&*&uT-cb9Iyt(SQ?YF8}7PpI&f zTyi*;qgPdwe=nsZH5T;~6`QrCyu1?2(^o3mNuG5-7Q3IiwaM|!I##?M%ck0vlwMtj z`NOfaHI!$yZ5k|BZ?^YiD&EN$->7|@9+WEX*n3g1Y#-_-sp3l=FXqMV168Vc z+QN&=JN7X{@*i(6h8^0+toJG6d3P^*NiP4KA~uZllKr;a+v5~5XTBHB&hDe`lN7OO zt`{4(9A!f8cF}ZkWBg2Ie=%#D&<}3H6000M#%OrGPKmp*^v^Rj3_hS_%CDzp%t*r*}oqkQ(-Q%Ypdwa`?B z{+XxLmiPT>-T%+?4{O-lQU%AJ;*=!sdk@*;?|;hhvl=Q!sC4$T%^`>D(=-$xQZl4r z4%t$37G@~1Zjr-_85&&jmE3Qi!+W{sbDxwf@0P=UIll0V67_%_hROI|-<16NThBQ>^~)Q4e{uG8S=d=cKqn~tNd(>iCqm@(QLo1xd)>>VOL&h)0i@aybq z5hA=ddNX_1b%u&C(caFRW1FN_NDj00X49JMtnMEsrg(T0x#T)qM~8{w9lU8j<2oHK zgo#a_-du7mrC`t^p0!pnyg@0I{)?y^C-ZrKDKErA`h8I`Qr55YZ5L9*+MF84O4-+B zAs_9`Ih5B}x-{6fpC36XqE|OB z?)|f$aW7ItzRcC^W&82WND-k6yvUVjRejI`;qkVa&bj$_FD9mGECb6_?Cns@4Zm3G zd{wc(Wic;1#uczG3*B5PukUglg#E~bs%Vy+Y_ zv5c_|&#XTmFUO`?#{;-~mpZNE7WYy3%^*0k&OA6GjhQxwZNLrY2j2 z=O@=1`&>`5Z0WMMS&*$)N=6K18(K14^3YLW(%KU9@9$~b3x*5J8qfZ+EM@osXjpDR z?nw=Gdyk;r6jQpL(C};Q2wp~+a`?Q4_ftpkv5zUP=QKP^8o~7*rtCkXpc9v7@n@5gfJZt;4AJg>w1(ObS-Y>9D2ZSjOhVi7vgjVY7bX>8X;T#j#y zPNOF*?!JhT8yYiK+FJ}*gl9%$ZtFfFbMPWQTxyK3)VgBWBKF7`^X!wCtXiyM@!rNL z-n?X)WaY)iXg=qgzo3mRjZ_mNYyqiUuVeRDoyqio06Syr@7|H$>$?bxBVs^Js* z=p&oF+Hr5C6$AEZdA~x=*Qy03dPiJ~amN5P%bACrU6-~2*hqmV2 z^xrr|yVDtXG)r7K<$~r=I?G>XiJ0py{N9<)2D9VhSCI=VWSp$7$3@yF7i_nub7$sp z(LvX>Mo(P-_X8%KO<8f$qj zdEi__cG+k-H%U#d+*_X}k|(PfxxgDyd3hz$B9EPJ#kd!@aBA+IPujJyU=pB)m4+W*@(si z%BfvXO-ZH^c9NePs~M7Q#A?Z#q(i!nkBfglqQZDoJ=3$Mf zwsNK8-gF9AYQza|SC;Hc=j9ZQi0R?V)pO~rY^4z+#=By2A)O3;jj)P$t+79a%W|;P zpDh}dd&(M|L;q2;g_WLH4WD%B2zJ zv&8oyUihxc!OAyIYE&;?q{?Tz#)(r4z38+t2i2B1aV5oz(hWK6ITR=6?)GAz3+JoJi0V1z#mk z-aL^vi3+ZC)l+_x{Uo`+EiS=&N}u}{oSSXSy7QidEp95bZvJ#V=t=eJrlPIVpD*h@ zIkT;)i2cK#?kL;U$Q)syjCnu?2(bw^2EnATK84E3*3{|_nB@m-oF-pV~M zu}$assw{DGw5$V?qc&%W*qN@Ja!hCAtt=6k*PBTA_zOdrPU!UpT(vN9BtmvcujJdNP?ToEyKKC>KTKRFt*_!!N zKQrFi505t1)Qb2_J3BwVceZBO$j_XYJW14C!+NQ^-t6$@QZH-lr0%-1+n2@Ttl1%T z*UtUE^qpr-@tDu-pXtlH7uGfE(pZI-wNursdSS?P11%F{)olN6NN_DJmGjipF)(7I zU$*}SE*6D8sV>}rNtICn>!eBRdSoHYHa%%VOCqqyM1cP#u(LjS4$@? z>2qbAB1619wLFmVOUey7?60N%d^KYv`(LbN_hL1}LyYKhqmsNOvc8Qp!nmN4V{6pp zOg5tEX(b!Bsj**Z#J;zc#2-*IWu+0@uTN*;*+MaMVH;9TOeg`i___CaA@&_FsT8YRvOY(`Gim}Ij7$K&U+7Ao zr&6o8nP1c2ztKyoWSyMlY>1)WOE%i8IVNYBA#w(vFYBQuTK1r(FNv2tKxN2x$t_*g zcx*OgX3|9N9rz}W+PB7j=0xT%{U&tUwWd$ZL~h1^6S2cvvtmdNhs)-O&5J#F)HjE1 z`{szQ%WHnOb3FAkxubkpbF5~b#L2w%Zsf}*Pa6tl-d>Yz=ViltnYTTg`Et+Q2A%nz z$@i7{=4!*|X`lJt&6iSzO^rAshwWubo$8<*%OKwL-AmT6>Y(W^K}-zZORr#&HX z(*EE5Jaga`-Te}oaN3BV)32}%N+fEd5$b<*l>zexqJC+?=X_mduL%Q*mHc1(Uy}E& z8pv?11*%YY*0gRR;x78rrJXxrubPXqSN-vKbjR;yb1^H&A2$WmVgw-d1{I0msKct0-tsQ`$P6c+RY7Uhd(L=IU z=0F`iW8Qu%XO!%Zh6-ciKa_LJM~#_d&3=8Ns*{rr5xk%aZ?kC3|R7 zV?rIJ|7%$Xe2p3CuI1$$HIbplG;6QrMY)=VLyfWNs^wPgB>tFe%v6n*k7;VOPyV<6 zT1M}YF&`K*ZHJa=(%$B&A>Y<(X)pP*c;QtC}xhz6_?w)(M0l$h+I+9(+xMtJvQcwRioVK_bZBVb8>}OoEy`pfZG?4M9=88IJ+?cH&&9T^AG4h!k6RjF>C1HSw4i6;HvH^ou z3=msq2GX*;KAl?*6r(N#);PPlnQq((Xd%{p_UFP@H+s3Y5T~E`b9k8>on2apxiSZ~ z%XRp)X(2ku9GEuFjhnMu2veB@WBR#qF|LIukn9`e#)RA!;*d@NGhE$xa7x-s{V}z6 zV{lFj;a4jFoqBHcx!OYflAKrJN_}%j@yIlQ=x45MYvw3AwGJRIA_fPg0fpV1s5dx< zsoe}1JKTviU1P`&G2ru5Cz`j7!L+9Vvy+`T+&qTSeGJgs;>0q;7>p(u(D1Mm-L+Gg z7Hz=!n@)t+dd<0+i41fwW~=rUMY9u$ZEK8=H#rKVw?f;rDdMf^0X@b7w!-gs@?=WFCueoWZ;_oaI zj(2*^VrLb`g(e)>GLg5T4M@y&V#?nW8Qre|o&I%Vz#kf>z8r~heFZlLX&C)|Brj?! z2#vif5IHA#-czVznxs<+6tF z)5|3*EuM8!&%b?ejffrbbP6a%<{$k)oz#@ zOry`Yd%`Tk4V?zl(Eh$BOfI=$tUrxI|K1b59=Y+o?leN)-V-68{`YrircwO)o}jin zrFzpy%)2M%H*qJg)-;SB-4oM2-Fc)lja{eiiNAy0Ia3{r)8%_&=LmOJeuyRZ+C8x_ z)*YwPSO)3l3#*OpWWSH)dFOnw?TCAgeK^`*L#O7WQ2jKexUYtPI*#H^V+FN`Xqeb< z6bS|j5_@UrIe8RTwhAicvjK_H$Fk;rru5YCrS2#KJQch-evqG~>qGK|b8Mxev56^Uz58^{9 zJYrSj*{N@IloW*WDAtNY?{$=8-iM-2vf|w*9c6-U7#^FfXz@iyx!od+f@c91p0%TxH}K7nGXdyoH2!O?C4JHiwg*Gna= z;RMF?RA6bGistut&W=}bx@ju4-;HNXjDpSv2U+%Fy-3~S!Pi;`3A(yo+&k&Pgt7zF z+P7Y8DfFP#+XFO~?DRnP*?$jkb?JH$S>aJ5uX;7gW!3(8_HCE-&^(t($KyGfWyleS zTnx{}<0X6g80TDW=EO5|gUmypTs~fn=h#L=Hh0YBz(4V5*BR10So++F$5;An>z7Nt zyYY0)G^EvtT%7V`&L5SUYCxLH~uOlLT< zO7hdM6(VA(BP}IY{H_oewmA}1yNcFJg1G9^gs%;&Fqs*|Ihv4f_P^gL8bpsjns8dO z7#GCKDNWcexk3LR@{^h{->!-o1A+)oYeKkWK@j_nHNnuS3LlRkcHd~i=ayB}u?wQC zxCz(YtBAD^VxG1MJK9xI>=1;0V_OzV&T1UQ07qK}b*{qED2QkNwz!5=vD!F@h~Bo` z?OVml-<_B+-j?Y@t62VC@_bt?##XWHK_?>C*m7-h6?^Y>VpFCq-MQ%3a0t1%Y%_Ia2GI ztC+nzu*RJ0Gq{{hlhxeFGsdZx)DlvAJH0WcLzi;i%u&;;*cj))a*j*QKl!yWO}xuV zn5O1xm7L96m*cWf&6b8HtZ*ntXQrA{MkZ`AFK6`(HM@RDZBVzI?i19+)-kE^-c54u zo;p^|_d;WqPA})JWW5i@m@Fu#yGRj%6C|Mg;S|#F9CmGz?P(Gv=2iQ(kFkxILI7hO*|o(6H`IFs++eQSw|v z^9RA~@Ug<_nTA6Z!Ps=O!lqEeaKjMB|6#?BCmOCghhP+K#oD_Xrgsft*nBIp{;eQH z&QQbZ-GtYdDwwE|`zE>H$qGvLtND^@!iB#ph?FzY zqj(cscUMpGCwp&+TJ1JB&`lpfa< zoNMb)!|vTqPpP?~;CYDTKt1Ks(+c*FaiGqm-Kg4Tir1y?w4b?~sU0)LQXLNxXYIz- zK2!9v_TcyILsX6bOW34&aWwT1<3s)uoeq1k;nh1TUA);;V9#F33QupwmfCaT(>w0_ zNUr6;g~laZZ061SQU@OF_=$mgM9k`wRlb0bK z*)G|1;ZJfyJ5qa<1Nt+6lJDP<()|w9pY)TdP96Di(1FlDe=?+1M}}uOuwvLxI=Ak~ zMafJ1{iN8eBYA(z_{yK`sqR409S02d?&0XJ7;Z{kcYO06dK{N}aj!A?1)qq2?8Cg7 zwggpvVp7AlEH$+y@^~v|UvU=ILj&oM-ipF(XHj=}AR|&*k)v@I!-E5vKfe_hb~}r# zwt;MkYQ_0=&cdi!ATfhm(M+;+^FZj*3iVoN(XvG#uRU9Fr?0a(AnW9MyH*_A=`23` z2NG$}3R}t50W$ZrP9*Pe7L7XuV(`j|uiKr4y{x5A@|+ke*`re+kIy+#_QF}*kp2e_ zNW0{J0|Rkc?}R9G7Q6cf@-xwi6Q7;MX<2*64SP+BO2s}mQ=ayHP3#;MAFNI3-|sbt zCaXBDZ_1zJUlaAGihC6%+*>bo%eNlvd)GwHJ37jxFM4phx(Tb^>L_O|2t!$F$J0_B zWgW>g-`mlpOh;K76~;#$ds4pYDCbCakX-p)M>%$I80*dK8TMQ1r7mHZw6W(>EnQ`x zR~XBK>}g$3SJ}=sj3<(p8|W%qH3(zKKzp9O-onoJ*`mXBcjAh+5MQ1xzCU-zIDZSn zzh{eM-`)9~y@lBivxRLF54OK}LDq3k5k0Ccj-@XcH_uaSp4}EtX?I=fDUw&VCGF7* z28MbH-~DY_E4fo+Pth{FEw%2xVBu{K@t~+J2C2o&Pfw&-nhDR6iutl95xYzij?OD4 z`amKUIVQA{yzqD;7ap4MeQGg3PbG5fqX`owo8~0aU)L1(xy2;pC9>bllrmK@Wsej2 z-r5vl6^)_wb@A2Oop#pIeC>Q)%&>6B)h3$95!Xefse28dAr{em`;jXad%H8mESmd| zb48OdcT{r5JbWfs93Jb=cB5$Otj!g3mbs(9D2#>v|A_Sq+~nLD#^^5phzzOiCrj?! z`yX*}pBvjHI}H6t+&w2}#`7B9)edENx)sAT8rC?3vLnliuUj-!C4|y0-->6eHSF9H z%8b`moL{A(&9P8^6RFSm*6>y*jDXtKXqRgkY#xS= zt~JjVX{h#;c2jH4CTK|N7RCibYc|GfXgoX&8d@_^#*B>)!>Gba>N*YD_%K#|vLac= zOil~Ku$DDrRT>%{4I|~Z)ZvL5Qm@Ips9~1Je8cEWJ1KxN?v#-(O|07OLet;4ou>Q)Byk8 z|Nq9nEctlbBo61A(D{zk0P-vzKQ-aJWW9Dt)c#^Z)zwP6xF<2DvAlOVl_WSOVPI-X zvgGqNNgS~-<+kKs#z_opB0uA`N&@uddmT*qL-Oq3YSJ8~z33Au+kH5vZ^y~IpRi8# zA+wnscDbJzvDSyv?d`a5?h_x?J{;?3hw0i+oFCm57v=YQhfcpo-o+tK@hmRC_p zwA^Mw(rvBuNn+Yc6V7I9NgI&FnT00!p4Ku_a*X`!hmL4zF1ba535|AWDejZR+odKo z;#d`HX*e^9dw-iy{9cQ1LK1Q3rKbI=C46}j)^|*Zt=5vVJ_(K7pMd(`xwJEh5LvHM zTYhKkl_Xxv&;EzUceebK#8?+o3MK!Om&EwarWkpC=jxLr4)if)x#aIfN$eeG%2mnb zZ{>Psn6f0`J3e2M=&v@VSC{X^RVQ(3jVUI*zH`1oGB&$R88%qPR3wwMRrZ~K^pxAr zMzd~&1yAzzl)Kiw6kEYFZ3w$NFy%f#D#TIOS^NyX9mWx+Ayor}O zCuzrWaVpE32!j#~o-G%a20j!!t-*S91lq;sT(w(6?3f7V?=C>Ct8K)LY; zKUODk{=Nxul9fx7nE%9tY==~Wr$x|M-<&4qsRS*FKw)Q&exp=9g^ntI$!FB!tlX zp$&s22Tlng_LB`RpLCSwBSMI;+l1;89p$Ic5LVhY!T!CDQnU}@rFRpWOYR&Hf^TpW zgyc1?LRdDk30)+wl5^bCX-()ZIn^Zuk0nhAmAukT#@yNj+c!GOh$bPd$&xW8kGBiq z^^GPpmHeke2!79He97U>LP-AB1V_oET7>Yxz?QGYI?DDYA$)9ROQmFAMF<^bzG)?U zn}@KXhb^Wrq|Vd}p>&Kb*PiMq>(>q8TbwPqlI!S)(B&^%)<4ow{`)nUk-PsdKdB7n z@6-R6AAAqy_dm9bFVsK55d%JWrx>Y z9c9AfV48QbL+7@Razt)0od??S`<9M!$cuJbFsTU0nR1--tCQ-lRc-- zXVKbb3iH0n-gG;QV!J6MeKM8v;s<;W$=PwD9c?6MrUkNBZO3Ypk9ZC4fb(Ws9P~eO zOxXdGt+w?3{eh-kI*=%N!IuxLkX$MGP{{|XBu8$u<;k-TjPEMvAjuQVt9k5sR1~jt zqnCX(mnAz&_H9+oLCNF)_qT;Ssxk6EDt4s1aiV=S-`XD)uXego*14L+6OM{~$J}@j zQq3gErAOU3->;fJl076>4z1?d+N0vjWjCIVt>&WS_L8qmtY)X=d6(SCm{H9l$(Js= zv3fx@V|>wSd|qQ@LAefGT|f zzT;#axo5z^)CELLOhxas0f`G2ux~~xlTH|LXwm|n%u8j-Rs*JuSb+YVR8&h0=oz+v z;KWouCmC?fX94x3eMqDMxwUpM_V@|W^^zx}zHes$Q$Vc0{`nKa`H?3LKX1oYa>FN{ z?0mhQwmBz6S%oM5McWCzb3)uV@M8Ym?ewlbA#&}#aL(OM$?p?lUsEqGoZrs(x+g_S zdoS3ro#h=*iXP*=__%&M%_KWVc#-heb{xB&6pDB+%+=dz)$^qIz21vyC$79Og^*@gl0PbQgzb`eO2T5eHXv7g?#k z@}3tlc2IY5Hp7=bX+=~-cNbHy_>#7|h_h|Gi#gAH>3sMd^-H`sy4Zm(r`~bsofof? zYkvQbsr*38&)(FzZqL4e57_AY5cJfZzq~%++{A|ukL?Na{=oe7QMYgOE|$5Y;$gWd%Z3ya>8#>gT?M-(hqt{O&Ad!y`G&DT)r6oL04b6z)HgHuohV=vXz8^fbyub-e|v7Lez z(Z&24siJjz1#82L>GOvQ)4ny=v)8+n)|0(x@X&#H=Thtzd9kn10p-_^jIQOwa2E$z zb3RhH+#7=~4h*aJiHzsooEYwajqxW8B!3;|z&M9bG`Qi-x_J&P8(&VQBgBlh?K?Be9LK)C$N5O%bATbPLZ1V zZ51ff%PGxM^P+{KhCOvtIR*u4`u9>$aI^|Hk04G5+hTK|ioV`KJRfO`%Z@6t?1R`P z*Q4A}#kj^n1j+RbU0H?AuTDH&Y0K)QDzuV4Qlu7|U&WY`PW(u%`Te=oh8Wqyip1^n z?$k<(!TfEJ7?$tOO;rpBKNpFH@1#93hPin~;){+4xd}1Ue^ey4n|V;RFoqkaibRsD z2g{|8!}TIjySE1`6OW<(YZUcHT9BP^4E+P6h?aWz$HHSQzB-D#i)!kqg|<1=^$rz# zwe9hfTu>Dv{x$Yzu~`ngvO&v!` z+*ZcZTCiN6QPSEnYRhNqe6i)5x{Myb1XqpiYQ!A;yNt)r1Y6hHQe3Z`PsM`V3|m_N z)>96OjHcmIOY*<#Dbu2(N#1VB>EEl#@{VBl5p#CcSwl&W2&}Se=6P&X2_b8}>0fP6 zi|`Vf$v&%iZBPE-5`JmCxp&i^MZHRRbj6#$j@r|?YYA5#dSiIR9+U1R?3FbkG0nb4 zoU5Zs@JjNgxwQjU152=|L9L&Z3+)tMzZ#YIcq+oa3V00 zqyPIqysuL@FYQ;&EO_}eh1ZHmHhWoc=za=se@BqvXMx8*Db)KA!NUF)HDV4lNF~4` zk|Y^Zn4~h;GZLRh7F@DUWs_edG`FC=OB!byUK2@`I zKfL(RE)B1Y9FafOi%Wy0zkiPCvC4~plnUPdt;D>$9i28-kd&t6&`3KPJ-^G(R4W?x zZ^`m^cQM#tMbqe(jNche^&gG6nc_^lwb3{PHKM-8xyE|NI;L{6X(WzvoiANe`Q;Re zck`NSb}&k1c8^HH+gq@pPAUV(M55|t!LuJJxW`4Z|4$2&Kd10&NhI~gTJZH_3a7S2 zk}=AHEiY4;d^nPZ@~&MiP9gkSBnx6KnDQV6#iK}`$$Phn_5F@>>aQL;W-V0|HlUanDWSZ6_wCWT)eqtIDvLD^CH-holfm$T~7eJSjZj^e}x zxzCb4*F-U}*n&P%o3xeZILg3+Z=tF5kmuO#t2yJO)|gik!K@;4W=%*X@@)jaFPqoc zhx#t5RCS7!+Qxz*fW)9{UfoMWx>ZOsciW(k~`Zh zI3AbE>G9IO)q=nT8FOMJt{Mw2E=i@+G`Y7oEa<)}mH63_41I2a`_@zf=SEUiZNcM$ z!wfcCDCTK=@hm*d-xUkQ&^x}AlpJR2mUkEZd-&0PP7%$k zyNL-;q|YWTeM*yPq^n?BsuqXJBx;)|*tJ;8(2q%saZ%7^p%(Y=Net|uz-6YE_CJ#N zA^T?TL@lOul6gBu!J)BQn$=AvDNaGNKeddmmrUde1$BpMiPcZ0cDjO+zFLy%C$sUS zf?L5_(i$Y=c1J;{5G~IQlF@%D1=X^NYe{MC=r+%z7%xgrL5%6obtjf9U^M1x?d{WNL3YjRcG9_A%`NE*SRS4GMc zFIH`r_C8ldmt-$qEK4KqudCv2q8AU3WN_1XD7O+Vsl6wI&uxY>VXY+|n=>%(I+Qwl zEor+vgSV51Vsg%sQ~fUCC49ukCjndty+mwZA7NM?z$q><{k^wXU>V4_xjBf~IbxjD zvGwQWkm)=}g{-npd&*_aA`(P`Mchs<8 z!#81nxK$1N4Sx*>etr`(&bDG}I}HuIE5-ZUt%&v2FfpQ1jDFUNxzhjXkxG&Ktrg8H z%5YyIIAdf-z|S&T&l2pG^Y5j&G8(@U#5K38(XacMY-01`+hWOUPk!oeA~^ZBSoOw} zJ=Ghf-)*t+ttWlHZDgnFw%Gd4ll|{E(*5Xdp)b#IR`EtM_um$o(!bfmjSSm&TO5`C zpYCkr(ze@T$URS@uWY1w&TaAMKb|x?xRGXKZj0!>o;B(~r}{^5Iy_f|<0of=4}4kZ z!^UwAm?nOpY@!bnBOQo~`@rWRJ}}9FtFu1PGt`HFlN@lFB)OdrCzm=fYvKovw(?={ zE{7U%`fvC^!8#uX$Q)R->jRw=e29=eS~cyl@J@B&){53F>+@LT%y+^*wKan*9*a@q zoH&=(npMsBay0g!P>=M+N_Q{us}71qQY-W|*h^%ygJR9Kn)X+TS;VKuP`kew@#-wj zu8kpLvKjsA)@QPJtDvFw#O8x$d6LLN}-`132?_c5DN`<$#DV|?n zQPM)i2s=|&{C>p*R~30Srljb<=29CKf7+VX__v8w39nD^x%&vvGiz@FPiCj zlGQVoPX+fxz&j5Vr5UUkJ(S)bE&25_gOOc^%9-wezmGTr(Qzo9u2|ClUIsxOhEkMm zN#M;4jG7K*VWuVO%Ndke4W(d{B`Z&5P-;1p8Iu275C0p#%kvCQ&l$?cYD=aUX7F;& zP?j58u`xeGYRRFjY;HxnXVU-FQ0{lOs-dgvoGoI^=B^@bn;*Td$bK}Ut5|fxkDyyc z*iY;#OmF#N*rbpmTNUFsDadbGNTr<$<6{cSJPO$(XUxUd6qr3JM6a0&PdV>=&nslK zxr%fL1#NN)`Nu-V4>{|NI8#VRD;0g@9O|E0h=q}gf9w@R?7G`|P<<79 z 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