From 63e50e26dd6c66141d6e8b03f7c413f942fa00bf Mon Sep 17 00:00:00 2001 From: Etan Joseph Heyman Date: Mon, 14 Sep 2026 00:10:35 +0300 Subject: [PATCH 1/5] fix(observability): stage deterministic fixture mtimes Co-Authored-By: brainlayerCodex-3f017180 running unknown --- scripts/observability_eval.py | 55 ++++++- tests/fixtures/observability/cases.json | 196 +++++++++++++++++++++--- tests/test_observability_eval.py | 57 +++++++ 3 files changed, 282 insertions(+), 26 deletions(-) diff --git a/scripts/observability_eval.py b/scripts/observability_eval.py index 7d47fbad..e90346ef 100644 --- a/scripts/observability_eval.py +++ b/scripts/observability_eval.py @@ -6,11 +6,13 @@ import io import json import os +import shutil import subprocess import sys import tarfile import tempfile from dataclasses import dataclass +from datetime import datetime from pathlib import Path from typing import Any @@ -97,7 +99,38 @@ def grade_payload( *(f"undeclared opened input: {item}" for item in sorted(opened - declared)), ] return Grade(case["case_id"], _field_diff(expected, actual), mock_green, traceability) -def _run_case(case: dict[str, Any], root: Path, producer_root: Path, golden_root: Path | None) -> Grade: + + +def _stage_case_inputs(case: dict[str, Any], source_root: Path, staged_root: Path) -> None: + source_root, staged_root = source_root.resolve(), staged_root.resolve() + declared = case["declared_inputs"] + mtimes = case.get("input_mtimes", {}) + missing = sorted(set(declared) - set(mtimes)) + if missing: + raise ValueError(f"missing input_mtimes for declared inputs: {', '.join(missing)}") + unexpected = sorted(set(mtimes) - set(declared)) + if unexpected: + raise ValueError(f"input_mtimes contains undeclared inputs: {', '.join(unexpected)}") + for relative in declared: + source = (source_root / relative).resolve() + target = (staged_root / relative).resolve() + if source_root not in source.parents and source != source_root: + raise ValueError(f"declared input escapes fixture root: {relative}") + if staged_root not in target.parents and target != staged_root: + raise ValueError(f"declared input escapes staging root: {relative}") + if source.is_dir(): + shutil.copytree(source, target) + elif source.exists(): + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(source, target) + if target.exists(): + timestamp = datetime.fromisoformat(mtimes[relative].replace("Z", "+00:00")).timestamp() + os.utime(target, (timestamp, timestamp)) + + +def _run_case( + case: dict[str, Any], root: Path, producer_root: Path, golden_root: Path | None, *, stage_inputs: bool = True +) -> Grade: root, producer_root = root.resolve(), producer_root.resolve() golden_root = golden_root.resolve() if golden_root is not None else None try: @@ -106,14 +139,22 @@ def _run_case(case: dict[str, Any], root: Path, producer_root: Path, golden_root return Grade(case["case_id"], [f"$: golden unavailable: {exc}"], [], []) with tempfile.TemporaryDirectory(prefix="observability-eval-") as temp: output, trace = Path(temp) / "observability.json", Path(temp) / "inputs.json" + input_root = root + if stage_inputs: + input_root = Path(temp) / "inputs" + input_root.mkdir() + try: + _stage_case_inputs(case, root, input_root) + except (OSError, ValueError) as exc: + return Grade(case["case_id"], [f"$: input staging failed: {exc}"], [], []) env = {key: os.environ[key] for key in ("HOME", "PATH") if key in os.environ} env.update({ - "BRAINLAYER_DB": str(root / case["inputs"]["db"]), "BRAINLAYER_OBSERVABILITY_PATH": str(output), - "BRAINLAYER_OBSERVABILITY_TRACE_PATH": str(trace), "BRAINLAYER_OBSERVABILITY_INPUT_ROOT": str(root), - "BRAINLAYER_OBSERVABILITY_JSONL_BACKUP_LOG": str(root / case["inputs"]["jsonl_backup_log"]), - "BRAINLAYER_OBSERVABILITY_BACKUP_DAILY_LOG": str(root / case["inputs"]["backup_daily_log"]), - "BRAINLAYER_OBSERVABILITY_LAUNCHD_OUTPUT": str(root / case["inputs"]["launchd_output"]), - "BRAINLAYER_OBSERVABILITY_DISABLED_DIR": str(root / case["inputs"]["disabled_dir"]), + "BRAINLAYER_DB": str(input_root / case["inputs"]["db"]), "BRAINLAYER_OBSERVABILITY_PATH": str(output), + "BRAINLAYER_OBSERVABILITY_TRACE_PATH": str(trace), "BRAINLAYER_OBSERVABILITY_INPUT_ROOT": str(input_root), + "BRAINLAYER_OBSERVABILITY_JSONL_BACKUP_LOG": str(input_root / case["inputs"]["jsonl_backup_log"]), + "BRAINLAYER_OBSERVABILITY_BACKUP_DAILY_LOG": str(input_root / case["inputs"]["backup_daily_log"]), + "BRAINLAYER_OBSERVABILITY_LAUNCHD_OUTPUT": str(input_root / case["inputs"]["launchd_output"]), + "BRAINLAYER_OBSERVABILITY_DISABLED_DIR": str(input_root / case["inputs"]["disabled_dir"]), "BRAINLAYER_OBSERVABILITY_NOW": case["generated_at"], "PYTHONPATH": str(producer_root / "src"), }) try: diff --git a/tests/fixtures/observability/cases.json b/tests/fixtures/observability/cases.json index 35618e7e..ab7f9224 100644 --- a/tests/fixtures/observability/cases.json +++ b/tests/fixtures/observability/cases.json @@ -23,7 +23,14 @@ "profile": "healthy", "split": "dev", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/healthy-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/healthy-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/healthy-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/healthy-dev.txt": "2026-09-13T12:00:00Z", + "launchd/healthy-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "missing-source-class-dev", @@ -52,7 +59,14 @@ "emitters", "author_unknown" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/missing-source-class-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/missing-source-class-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/missing-source-class-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/missing-source-class-dev.txt": "2026-09-13T12:00:00Z", + "launchd/missing-source-class-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "missing-log-dev", @@ -79,7 +93,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/missing-log-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/missing-log-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/missing-log-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/missing-log-dev.txt": "2026-09-13T12:00:00Z", + "launchd/missing-log-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "malformed-log-dev-1", @@ -106,7 +127,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/malformed-log-dev-1.sqlite": "2026-09-13T12:00:00Z", + "logs/malformed-log-dev-1/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/malformed-log-dev-1/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/malformed-log-dev-1.txt": "2026-09-13T12:00:00Z", + "launchd/malformed-log-dev-1.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "missing-launchd-dev", @@ -133,7 +161,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/missing-launchd-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/missing-launchd-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/missing-launchd-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/missing-launchd-dev.txt": "2026-09-13T12:00:00Z", + "launchd/missing-launchd-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "empty-db-dev", @@ -158,7 +193,14 @@ "profile": "healthy", "split": "dev", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/empty-db-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/empty-db-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/empty-db-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/empty-db-dev.txt": "2026-09-13T12:00:00Z", + "launchd/empty-db-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "clock-skew-dev", @@ -185,7 +227,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/clock-skew-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/clock-skew-dev/jsonl-backup.log": "2026-09-13T16:00:00Z", + "logs/clock-skew-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/clock-skew-dev.txt": "2026-09-13T12:00:00Z", + "launchd/clock-skew-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "no-op-dev", @@ -210,7 +259,46 @@ "profile": "no_op", "split": "dev", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/no-op-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/no-op-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/no-op-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/no-op-dev.txt": "2026-09-13T12:00:00Z", + "launchd/no-op-dev.disabled": "2026-09-13T12:00:00Z" + } + }, + { + "case_id": "legacy-no-op-dev", + "db": "db/legacy-no-op-dev.sqlite", + "declared_inputs": [ + "db/legacy-no-op-dev.sqlite", + "logs/legacy-no-op-dev/jsonl-backup.log", + "logs/legacy-no-op-dev/backup-daily.log", + "launchd/legacy-no-op-dev.txt", + "launchd/legacy-no-op-dev.disabled" + ], + "failure": "none", + "generated_at": "2026-09-13T12:00:00Z", + "golden": "golden/legacy-no-op-dev.json", + "inputs": { + "backup_daily_log": "logs/legacy-no-op-dev/backup-daily.log", + "db": "db/legacy-no-op-dev.sqlite", + "disabled_dir": "launchd/legacy-no-op-dev.disabled", + "jsonl_backup_log": "logs/legacy-no-op-dev/jsonl-backup.log", + "launchd_output": "launchd/legacy-no-op-dev.txt" + }, + "profile": "legacy_no_op", + "split": "dev", + "unmeasurable_sections": [], + "window_hours": 24, + "input_mtimes": { + "db/legacy-no-op-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/legacy-no-op-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/legacy-no-op-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/legacy-no-op-dev.txt": "2026-09-13T12:00:00Z", + "launchd/legacy-no-op-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "backup-errors-dev", @@ -235,7 +323,14 @@ "profile": "errors", "split": "dev", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/backup-errors-dev.sqlite": "2026-09-13T12:00:00Z", + "logs/backup-errors-dev/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/backup-errors-dev/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/backup-errors-dev.txt": "2026-09-13T12:00:00Z", + "launchd/backup-errors-dev.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "healthy-heldout-3", @@ -260,7 +355,14 @@ "profile": "healthy", "split": "heldout", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/healthy-heldout-3.sqlite": "2026-09-13T12:00:00Z", + "logs/healthy-heldout-3/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/healthy-heldout-3/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/healthy-heldout-3.txt": "2026-09-13T12:00:00Z", + "launchd/healthy-heldout-3.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "missing-source-class-heldout", @@ -289,7 +391,14 @@ "emitters", "author_unknown" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/missing-source-class-heldout.sqlite": "2026-09-13T12:00:00Z", + "logs/missing-source-class-heldout/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/missing-source-class-heldout/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/missing-source-class-heldout.txt": "2026-09-13T12:00:00Z", + "launchd/missing-source-class-heldout.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "missing-log-heldout-2", @@ -316,7 +425,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/missing-log-heldout-2.sqlite": "2026-09-13T12:00:00Z", + "logs/missing-log-heldout-2/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/missing-log-heldout-2/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/missing-log-heldout-2.txt": "2026-09-13T12:00:00Z", + "launchd/missing-log-heldout-2.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "malformed-log-heldout", @@ -343,7 +459,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/malformed-log-heldout.sqlite": "2026-09-13T12:00:00Z", + "logs/malformed-log-heldout/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/malformed-log-heldout/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/malformed-log-heldout.txt": "2026-09-13T12:00:00Z", + "launchd/malformed-log-heldout.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "missing-launchd-heldout-2", @@ -370,7 +493,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/missing-launchd-heldout-2.sqlite": "2026-09-13T12:00:00Z", + "logs/missing-launchd-heldout-2/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/missing-launchd-heldout-2/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/missing-launchd-heldout-2.txt": "2026-09-13T12:00:00Z", + "launchd/missing-launchd-heldout-2.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "empty-db-heldout-3", @@ -395,7 +525,14 @@ "profile": "healthy", "split": "heldout", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/empty-db-heldout-3.sqlite": "2026-09-13T12:00:00Z", + "logs/empty-db-heldout-3/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/empty-db-heldout-3/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/empty-db-heldout-3.txt": "2026-09-13T12:00:00Z", + "launchd/empty-db-heldout-3.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "clock-skew-heldout", @@ -422,7 +559,14 @@ "unmeasurable_sections": [ "backups" ], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/clock-skew-heldout.sqlite": "2026-09-13T12:00:00Z", + "logs/clock-skew-heldout/jsonl-backup.log": "2026-09-13T16:00:00Z", + "logs/clock-skew-heldout/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/clock-skew-heldout.txt": "2026-09-13T12:00:00Z", + "launchd/clock-skew-heldout.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "no-op-heldout-2", @@ -447,7 +591,14 @@ "profile": "no_op", "split": "heldout", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/no-op-heldout-2.sqlite": "2026-09-13T12:00:00Z", + "logs/no-op-heldout-2/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/no-op-heldout-2/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/no-op-heldout-2.txt": "2026-09-13T12:00:00Z", + "launchd/no-op-heldout-2.disabled": "2026-09-13T12:00:00Z" + } }, { "case_id": "backup-errors-heldout", @@ -472,10 +623,17 @@ "profile": "errors", "split": "heldout", "unmeasurable_sections": [], - "window_hours": 24 + "window_hours": 24, + "input_mtimes": { + "db/backup-errors-heldout.sqlite": "2026-09-13T12:00:00Z", + "logs/backup-errors-heldout/jsonl-backup.log": "2026-09-13T12:00:00Z", + "logs/backup-errors-heldout/backup-daily.log": "2026-09-13T12:00:00Z", + "launchd/backup-errors-heldout.txt": "2026-09-13T12:00:00Z", + "launchd/backup-errors-heldout.disabled": "2026-09-13T12:00:00Z" + } } ], - "heldout_goldens_sha256": "7c14c1457dd3702b0980e8a755b4aadec59a2a62d99091cd3950d94682296ea9", + "heldout_goldens_sha256": "a945fed90d3b943a994e952f7b041b6745991d68bf6e2d16de66ad7aa5475228", "schema_version": 1, "seed": 20260913 } diff --git a/tests/test_observability_eval.py b/tests/test_observability_eval.py index ea25606b..1a7b05f4 100644 --- a/tests/test_observability_eval.py +++ b/tests/test_observability_eval.py @@ -2,7 +2,10 @@ import hashlib import json +import os +import shutil import sqlite3 +from datetime import datetime from pathlib import Path from types import SimpleNamespace @@ -52,6 +55,60 @@ def test_builder_uses_vector_store_schema_without_handwritten_ddl(tmp_path: Path assert "CREATE TABLE" not in Path(builder.__file__).read_text(encoding="utf-8").upper() +def test_runner_stages_pinned_mtimes_without_mutating_fixture(tmp_path: Path) -> None: + source_root = tmp_path / "fixture" + source_root.mkdir() + source = source_root / "db/healthy-dev.sqlite" + source.parent.mkdir() + source.write_bytes(b"fixture") + os.utime(source, (1, 1)) + case = json.loads(Path("tests/fixtures/observability/cases.json").read_text())["cases"][0] + case = {**case, "declared_inputs": ["db/healthy-dev.sqlite"], "input_mtimes": {"db/healthy-dev.sqlite": "2026-09-13T12:00:00Z"}} + + staged_root = tmp_path / "staged" + evaluator._stage_case_inputs(case, source_root, staged_root) + + assert source.stat().st_mtime == 1 + assert staged_root.joinpath("db/healthy-dev.sqlite").stat().st_mtime == datetime.fromisoformat("2026-09-13T12:00:00+00:00").timestamp() + + +def test_runner_fails_closed_when_input_mtime_is_missing(tmp_path: Path) -> None: + case = evaluator.load_case("healthy-dev") + case = {**case, "input_mtimes": {}} + result = evaluator._run_case(case, Path("tests/fixtures/observability"), Path.cwd(), None) + assert result.field_mismatches == [ + "$: input staging failed: missing input_mtimes for declared inputs: " + ", ".join(sorted(case["declared_inputs"])) + ] + + +def test_faithful_stub_requires_runner_mtime_staging(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None: + fixture = tmp_path / "fixture" + shutil.copytree("tests/fixtures/observability", fixture) + case = evaluator.load_case("healthy-dev", fixture) + os.utime(fixture / case["inputs"]["db"], (1, 1)) + + def stub(*args: object, env: dict[str, str], **kwargs: object) -> SimpleNamespace: + payload = evaluator.load_golden("healthy-dev", fixture) + actual = json.loads(json.dumps(payload)) + expected_mtime = case["input_mtimes"][case["inputs"]["db"]] + observed = __import__("datetime").datetime.fromtimestamp( + Path(env["BRAINLAYER_DB"]).stat().st_mtime, __import__("datetime").UTC + ).isoformat().replace("+00:00", "Z") + if observed != expected_mtime: + for section in actual.values(): + if isinstance(section, dict): + for item in section.get("inputs", []): + if isinstance(item, dict) and item.get("path") == case["inputs"]["db"]: + item["mtime"] = observed + Path(env["BRAINLAYER_OBSERVABILITY_PATH"]).write_text(json.dumps(actual), encoding="utf-8") + Path(env["BRAINLAYER_OBSERVABILITY_TRACE_PATH"]).write_text(json.dumps(case["declared_inputs"]), encoding="utf-8") + return SimpleNamespace(returncode=0, stderr="", stdout="") + + monkeypatch.setattr(evaluator.subprocess, "run", stub) + assert evaluator._run_case(case, fixture, Path.cwd(), None).passed + assert not evaluator._run_case(case, fixture, Path.cwd(), None, stage_inputs=False).passed + + def test_cases_cover_every_fail_closed_shape_in_both_splits() -> None: cases = builder.case_definitions() manifest = json.loads(Path(builder.MANIFEST).read_text(encoding="utf-8"))["cases"] From 8d549105604ee1edaa9f401f81e5d28bad1d901c Mon Sep 17 00:00:00 2001 From: Etan Joseph Heyman Date: Mon, 14 Sep 2026 00:10:44 +0300 Subject: [PATCH 2/5] fix(observability): correct backup receipt goldens Co-Authored-By: brainlayerCodex-3f017180 running unknown --- .../observability/db/legacy-no-op-dev.sqlite | Bin 0 -> 5173248 bytes .../golden/backup-errors-dev.json | 26 +- .../observability/golden/clock-skew-dev.json | 24 +- .../observability/golden/empty-db-dev.json | 40 ++- .../observability/golden/healthy-dev.json | 26 +- .../golden/legacy-no-op-dev.json | 327 ++++++++++++++++++ .../golden/malformed-log-dev-1.json | 24 +- .../golden/missing-launchd-dev.json | 24 +- .../observability/golden/missing-log-dev.json | 24 +- .../golden/missing-source-class-dev.json | 2 +- .../observability/golden/no-op-dev.json | 26 +- .../launchd/legacy-no-op-dev.txt | 2 + .../logs/legacy-no-op-dev/backup-daily.log | 3 + .../logs/legacy-no-op-dev/jsonl-backup.log | 1 + .../logs/no-op-dev/jsonl-backup.log | 2 +- .../logs/no-op-heldout-2/jsonl-backup.log | 2 +- 16 files changed, 461 insertions(+), 92 deletions(-) create mode 100644 tests/fixtures/observability/db/legacy-no-op-dev.sqlite create mode 100644 tests/fixtures/observability/golden/legacy-no-op-dev.json create mode 100644 tests/fixtures/observability/launchd/legacy-no-op-dev.txt create mode 100644 tests/fixtures/observability/logs/legacy-no-op-dev/backup-daily.log create mode 100644 tests/fixtures/observability/logs/legacy-no-op-dev/jsonl-backup.log diff --git a/tests/fixtures/observability/db/legacy-no-op-dev.sqlite b/tests/fixtures/observability/db/legacy-no-op-dev.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..0550e61053f6f24c68c4c7124dc28b6c995ecc4f GIT binary patch literal 5173248 zcmeF)dvqk%eINL)?nb`=bj@H$_KYZrC5jLL5tyk*KWD5^;1DFCnZb}ljL4x(x2vme z0mbPD*j<(;GXpZmMF>Q*-j&pmt5^_b$c+6~iF zjL5M_G#YuoqC_H*IQ{!$dhR~{8@-^k-b3oW8vi05IsNg430giW{}TO-|FQh%@}J3n zD*u7}Rrx>2zb*f!{1y3EY0($yzi<5Ul$^+Ys31k$rp<13Ua8X_Rn2X$6}+!no7>In z)f>$6TJ27?-MZ=8ovJn}_1H7hiQJ=)O4mHIR%fE14tr&rHLdX5?D;Dz%j+x3`tsu! zSCmlR`KH-mi?rs#?vqo=T%jP{J`JX$@Ab1=jv$?Zyeln4JUOQaN`bCD@)lZw+eKwWMEi6d4U+Sy7YgcLSO`+d?mma8d7ntW% z<}*s)qgA&>Xi*ESue`9{&%Zd3)iRr{rfZq?&xT zL=YOUJs3!s8?5P7x7sborT#zoE-|1nxGd!1M+whxU}*SR#rCQ%cUsNCiVp6EpLcu9 z?nVZUKNt5pZEv6aT>hik@)+Omfkg}F68lBY;C@xL!S~7C3$bMG%o*wSO5jDkhc(P< z!`*0`p4)16h7#ffYD0@h!1+TbSLhqgh9S(Yt-3p+iwx(qnPChQu8@3hos(L$HyrkhQ!C<~$2I}VRs@2-2-4h40;X-(Y$5f)j z=(yh=v#@S9H?}E?$1J8DxWU?;AbP8!DTX({)#|u@d>>T7D%GUga-0r3a9^r*v*T6i z)MA?lvEQ4AHyrrh@~WNfMsRrak2523wOMyi2o6L~tUS4V_2RlR-|^ax=Qh~<-0Zcb z*~ZeWy*~T&+1X2HXPp=47U!C+n{x{b!{t$%-(XFDJgr((P2P2evxz9$FAG01wA${5 zD~7gi-R7u^(Ds{i!{v5^YOi3Wx0b(7o!J{~pY=A)&gPir4$gS0PP@gAD#P1$n>>p+ z@(yR{>~yMItnIe!Djjm#qD%Jbr>d&96#QFP)w99B)09RJ0v{NN{V}?)Fp8X@&U?FB zp~sS@FB#gpZk#Pt=-+8Stx|b$ZlI(^#WOcVBl$0>Gc_I8_D@=sAgq*u@aev*-q5*{ z;x@KgZGQaZ`Q5$IW>I0ywoBuD?`))-;_tt=-Q6zF)$os>euwfq%Rns7X{Xh>#qN1t zwX@TxwZx#jsI*z9Rlh--p#DH7fkBk}r-D_-w8X(Xl*tvxHcB>cQn&M{f3nWrA+%e` zphAt7&FZ4mzIxV7>w1@+@^8^O1Z%ifwa#wzvWtDGcC1!+gi~x*^QvSE-RX8&poWj7_udRO_z8s_Pd@v{*j_nQh)t)PJN_<;3iXyzn^BXw%_bGyon&-F zotBtwYt!{NJ7QUfPAS_RMrV!HTDL{bjg22^}uf#3{wuj4Bnw=w*#S~F>UR>gKj7M`e$O6>NJft-fOS)*QYy?4k^#9+AHcDp6* z^^TtB9EA*lQ9q!QRz~3#bgJ%APw`q?6n<8Ho0f><8Fd(T!(}(C!7Pb)46!M3WUjh2 zul}RmW%~JtyYHt-^yhcKjedS+_r3J<*6uX@{EnCD$J%rB!=Yo%4|u=WkJ=F&Bn9mR2PdD}FG&;9ijbW>zE@hjfA7>#x&;CRF#z~YTlx%SQW>yn4#uNm0D3P8!WF| zX051~?TSHTVS(k##iC)9%Z_Smre3KzwW4D?mP0=Z4l~2=`_%_D`9SjWk9_a@57!v4 zzc}GX!_^=f9^!3XSa|5chmINzSHsbeKU4+sAO6Uh-p-uiXY5O@W_^cVQy8?Gr~TP) z{ZK*Di<|xyDT`>?phI}mT@s~Qb$2P4!ipg3oj%qohF-Lan#xR5wF_psqUlDtQZe&+ zUDK_aUMN;HTQBA-PRS_NDpt9eFEdrMO3Y%W=AY2L@hIxnSuNztWm9K0r)-&4O>^vG zo*8AsG%A`}G9Bg^rLt<-C6%dEKV2&o3#?SqYk89bu1JAnl$b-SGiDo3k)8+N_u!Y* z{9#(*h{2VAeKGC_*Mc8h-SMQbpgnm1QG;tC99+hsg3I{uM}okqneC+xUFBtm3ZsU# z)gM3=5kO9zF>k4}T?^udzq4Acw(T~9S)zy}y13$LtY}yK)-W}*Xw@vuE;u@~C^QNs z&8g7{RVx)Nvtk$}!z!5tR$+Rn>==5UMhvrH-jN{c*4uVUrDCmEv`TiVQg$4tV$}4q zV{6QIYL%j;o2F4SZPjK@zM>awqf%l8U9A)fMN2bOL(@x6ffhP`2~NojzwZkoV^I5u z;bMF&7W2cU>3CaF=}4;<)x2gERYxzIc%9WaF=;cDG##Gy+GoQj83BGQPX=GFB zgvrnq;Cr`__Q-Ki?}nj2@{St@d#7qD4LHSOO)YA*3M=OGB}=aqC?0G&3(_1q zx2Ko7PDk2;nYSu=OEoREsMl(aO)nV@k$2!!P3u;f!mdOoYK3Bv4x4J;)=kUEYlc&^ ztrCrnd1lerOf{(0RHoN#nvysw%~1>*ip`Rv(Gc#?;K%5k&a!C`Wa0OHaj5PWhvOP) zzgVO(?w3x|k6)ajA77ZFAHR^u(9cuZ7b5bX$iE~1n*4eBbMmLiJWl1mk2VLC=K}vivTWTIIe_Lit1}p)?apC>{?b6pn=w@^UD_$c7U1=}>|; z6-rPi2NTpvCX`T4hZ0JuP(m>oN+={k3Hgaof)NiT=&?|O7L{YO>AiMQRsZV&vFu+) zO+=jXqsSG}S2e{Dv5 z`2T3|>pU+<kNBVe$K)T0$p2pc1$x2*0uX=z1Rwwb2tWV=5P$##AOL~4OyF&?iZuE% zMeL#2d8vDWV8q3U=sRQQ)7|AGE+F`y|I>30h009U<00Izz00bZa0SG{V1n~Jk!Tf-K{;K?I@=wtVJRkr82tWV=5P$##AOHafKmY;|cryh~#$yHP{FRmE^_A)e zSFSv_dU>t-%<}sArxUqYtdI^ZxwN`=`ARMtE2P2;mOnrXq}al#!38(e)7t5x|M`Dh z{%l14Bl$PvpQ9IeKmY;|fB*y_009U<00Izz00bcLRtTINa~U8$VnJ{fAU0}&e-$8l zJhl+JZs33ZFJ+HK=pP;sfB*y_009U<00Izz00bcLEhO*@87UQs-k#e1=u|xN^{;$LiuY6EIk@>9z0QjFvUu*!g^!E( zGvfJ#c)m|O-!GmY5YIXBd{R8063=(<(=YSy|9^Kx{yq6$$e)wH`|hnOY6bxaKmY;| zfB*y_009U<00I!WHw4}pkDX6jo7>In)f>$6TJ27?<~GgtPBlpEJQRzamqspcw{E(2 z=am2T|4;#Z&65&+hhT6`v5G(cKb6f!uOa5i~C*&WHKPlgkYx0_WR(_8>ll`mg zf64x4_6ym6l>PhJk7wK2@5p{2Tg*O8tKb0v2tWV=5P$##AOHafKmY>Yv;s4yCL*(G zsk77cHks#IOM3p~%*k+?k(s9tfvt_s`rPPE+rjxi6HaRZh&D2&a{2W@f@^ zrQIXMJu@9n)2C*p!fD#%%w#xC&CFy%X=)`slMbhq zQ!}Y>S}8e`45t+nGl_6oVPa+?oR*Kz#KUPuY$g^?)1$|uep-63EmiHf_<8ycz^Ca7z>d5rKQBKi7vx9e6LK{Br`g}lemVQ|*&oY(Ci|)E zt67&;!2<#ifB*y_009U<00Izz00bZqITo88xQuWrlwh0;CFr?Og7!ctLA`%4L95&s zN+_QQC6s1D3B}`~gu<~3LkWdM zC?P))N-*M~1U(i?(4ul|w*QiVIxYY6$dvS*k>va3Ur)3XXC}Ta{`J`Z8+%vuKSrC; z1?fAbY~*6(i-!y7-N&-YT%jP{ewSy~>TJ~a4MwHO{JwF05Qrmanc~UR|RyF0HJsFS@p}zVgDla&>L>*{dtc+U0d+ z?drvgi@a1?DvA&ZEyw9Fuba5=%yc66=%doLp#Gg#>aNGC9rnsLYg#PyHak%3(8Bqq z*dg02jQ>surhz0?I<3*yZb(~`)n$iTUd~8ztmUf?$T}x@O8zlHAEl}E>q?+O5dYZw}n|ZVEaOP zaUiQ@Hd{^CGV7rgdZ9g#+h$vBW|~1%-JHhvx2=F@F3RQ40V}k||v*~skgL^TU zY13>p+~!8rb~~O)owOU{gSouUU>SQ7=MwvchPlC-UUjS8a@;zj&=`E5+})Z8LgTdu z1IEFngYOapVLZ4jgy}~K&v0O9_*q5msxNn1&B47KH1P9oZ`s|*pxeq`-0Sf@5I>jy zXtq4Y(FPVREXNbMt7pb_B^t_D!>l&kjkf8zttOETB~9#Jh$VAp&Pcac0=1zGLkaN# zyP?G+`25kATa4{h{!W@(TXlCtM;V5*nPeQ$W6D$;lOI?;i8 z^Ry9_Jya`Ot)@q@cu)g3sGiis=0W*7t?jnOs(x4>l$GM^W%@E=kZl-7)T`?4Z1IwY zvjpStei^8nx2slbn|7~za2^Oczo~eI$5f)j=$OkSM6*!f+L%MZZjfR zn|1qjaPsrS%9G1iFRm-|9k1$6XvoxOB+)_HMmajx0AIk&Jd zTpqRg4c7F>)2c<)rF*5$VFU9wj{RaLd6 z;NQBco(=w;rZjpG_;6V76-JR0)Ol}LEA&{>^d&=E*NwA<3jI6nr&TI1&JC2bsCedv zXe9q7b*84{+Wtwa5`>j95I)^^)f+ljQryN?tIdy}Jiog)+AJ!p*>-7Q@10O|Q~dq+ zw!7Qqxf=cf)9+AzXBmjaIqkGMx7a;Jt9Eu8wU!uB7nL^awCXo#6VxB*{4I!b|17TR zn3gzrhcdb1@I=YxP3m?Y^-nrP_l|gU|&_93dA7gvv zP$4#*G4A-gC@R!jMr}q-<~EyDba(F64Ru;#wyjOq-|UEG9Xh3KcNm>DR%_iBH8(ce zY$F(|D8gC-uUks@gmqErFxDJXTTSe8kfqy6X$OKc*u9Rgblk@9yK2p(@mUqy6?y#r57HLmZ*1+ika7(q8ZAdCpPD5E%6XI%#DTZb7H&9`zKjwMF4) z)wgMhIG$05VK-cMvl>irc*hXqt~fGxtFS zxfF^0QY_lguqIOS^rS zVFqhrw=DmHz=%zVB?|}EMP!_tr`G89{{E9~rSocV0bybHowK|)PwnI4pWBY8jW`jQ zKd?3;VZCoZhrpd-viv$fbC)cuPW!r?vf?qu%Vx&6YMW(9=c<+-Vt2i*_{s44fO?{pp4x-Uw&ZB zcizsgDjyGTa5&6G%0pu}dH8TnJjl0N3U5`!U0(=`ly{EZs>m>Y+}ZE=CA}@U3c35f za76~glis~!Yz5w67&cBN{m)Hyhg)DU^86Tj``AhxI>I(iCUPIXy6+io@3RQ;8?^iv zYQ-tsh6K*};lSeizUz9tw3=Jgjnu$!LY^PG2$ z?-Iiw<@J?t{~@pr`N7_`y7TD=;t-%<}sArxUpt{hhzil1r;=m#_GL08reutGCLfNijk^CF-&(RA!AOHafKmY;|fB*y_009U<00IzrD+ErCxeO2= zu^_k#5F53?zX}jN9$N@qH{ieje=L$c_Ezi~wg~|UKmY;|fB*y_009U<00M87z%OK^ zR3v(PYWJg4@yOS|{&nfCs))bc?#82{5;5@{7ta&oIU$~t;yERr)8g6xklTMu@~24m z<_7-c*MDUBQ$!Ze-MR2_@qR`;pAgUYiRb&p^8?~JC!SA==TqYOu6>Gs$tO5PH~*9W zQ2s6Xm*t<3e?b1Ed_%6uYw}t7J@QQUud@Fo`WdBk2?`J=rZD+qD`+;mR`!Mbo zc-J;6Dh2@vKmY;|fB*y_009U<;1B{crzRq^X{oc*^fsC2T1$HV8FXX$5&k4yWa_Gud#O zF+DRKPSdAmrow63lBAk|w z&&0!NMrJ|~OwcO#g%ZjqLJ6grP(tx|D4}pHl#rK02}U-Q zpihSqw5d>nIyso2Rx+W4aypbyN`(@N$xuQe5lYBUgc6K+C_#^f611oso9(|Opz`nk z%aLsNyAOz62tWV=5P$##AOHafKmY;|_*M}3#78HjiS+m4&;NZZG&bG&@1NuE|9xw; zH1-k#5P$##AOHafKmY;|fB*!(bp^VA|4*L$*@*oA$UiT)WF`AAv$wOx^naZGAE%$3 z`ma+zI(2O-LyPf%00bZa0SG_<0uX=z1m0SKr+@OJ^pN6_UH^V$kHu6yKOId-NyokA zZMWHUG%iiIY8}?TVb+MWOV^XZ$x;Y)4koLX=JROb3lT$OPr+++LoHo^0+|*EU zQ=+)3f#RmR#eFVZoI2T8+~iPklcKoEf#N2+#rB+w0l0(HMMRCc2 z;*#CszCTo)T1oU3ml!H8A&N^36qo20_kH2w$`gIXO$-$`A&Q$AC~l%#-1mlyE5!SX ziw_kS7sbT~ii>xP`|faY`B-0Zv7zE(qPW;Vaj|Z3p9mMHMf-}QT%k@D6~#pdii>uO zdp%s7D)kj74HYMe;-rD%BvG7^iAC!EC?ri!N2Vo7ib_&UlH!syAxQ~IN=i~nlG2it zk)%mUnvx{SG%3X*Z=YV~gO~sL|Frxg5&6H-6@WjG|C9XhN7?+MIrb7U2N_2tWV=5P$##AOHafK;WB6;M{aNaxJLv>~r0l+baWKj!?wc zCKURDgrev7?vbwN&rKa|Wvy>z?cC(iR#y8~R?lUQw6a#(TUjfeOCN3JV&BTebE%`P zZ1k;coJ$^UWxa1@{aoTmE31{gmDS3*iKDGt?pwKhE`GF?3w`H{(njSY5E%gKPZ2n{0aH5%UiSv4+ua2 z0uX=z1Rwwb2tWV=5P$##4k3`4jz!)!!82y2`d&}=y{2#S_wuCsUZ?tAC;MI}`d&}; zy^i<2j`h8c_PwTG0O)OtswK%^qxt_Kb_7`<009U<00Izz00bZa0SG_<0ucD75txiU zDBWP~j@xR+{qO&$rvE?x{(rwNzb+TDznA@c*{3N14+ua20uX=z1Rwwb2tWV=5V$u4 zo(|s>P}lG1O#!t#ds9Fye@AZ$sHu1Mrhvseds9IDjocLQo%B_L$NeCc5{U@i1TcJ4 zz~KIWiFfia_V53fkpI=d{r~t9{Dc4mAOHafKmY;|fB*y_009U<;4T*k?(uin`~M}f ze|O;ie|P!5p?VO200bZa0SG_<0uX=z1R!uv2psYLe|q1|19km~_y5!S?*FG9_5Oca z-!1&K{1NZ}r}f>1Pg9S2|G&OlHLAs<-v6%;Ox6AG|0m?19=QMCJrPFO2?#&{0uX=z z1Rwwb2tWV=5P-lvAdtcR|L%cS#4bPp0uX=z1Rwwb2tWV=5P$##{`(2^-~Z45vjmd- zXY@1v2lAgymnOfK`N!#I>e0mSPy8?OTI?a|w*iGS;b`=RITbx7#X5|( zn~g?ynv_$Dd7D(NiD=ZdrlP56bek5wgBH@7IVrZ?riJg6VmD0Mv*S{X{tW3<^bsj` z%iErczFms#D9%*$WHj2Odc@+XWHOmb`TyvD{)XPs8~=x&luF$`_qicLb&?ZKa>7YY zI4KAx1>qzooD_tUf^d=(PIAIYK{zQ0Ck5doC!FMjlbmo;5KaohNkKTt2`2^NBqyBY zgp-1Bk`q#E2ZWQHaFP>Fa>7YLI4KAx1>vM1oD_tUoN)56gg+W4)JhpnnBjyOPM8sd z89|uggc(7Y5ri2|nBjyOL6{MQ89|uggc(kl;e;7Mm=S~-L73r$89|uggc(kl5ri2| zm=S~-PMG0@8BUlHgc(7Y;e=X75M~5nh7)EEOZdY>gvB%`Omo6CCrk^%v>;4#!n7bv z3&J!fOmo7tAWRFwv>;4#!ZasLbHcPBObf!aAWU<@v>;4#!ZasL3&J!fr12q$!ZasL zbHX$yObf!aAWRFwv>;3i!ZasLAC~Y3hX{=nCroj|6emmx!jvFPal(`!ObNmiCroj| zlpstA!jvFPal#ZQOmV`LAWR9ulpsuT!jvFPal#ZQObNmiC#0b-AWU(>6emn^!jvFP z3Br^hObNo2AWU(>)L{ufGeoE-Ibo6$COKhJ5GDm-k`pEcVNwt#Ibo6$CIw+q5GDm- zk`pF5VUiOj1z}PUCIw-V6D9>=k`pF5VNwt#Ibl)|COKh}6DB!fQV=EuVNwt#1z}PU zCOKj9u!P-PM)i)!Y9+x56Pz%?2@`@aAqW$kFd+yNf-u1e6Pz$12or+PzZ;c*L{4zR z1Sd>z!h|492*QLQOmM=4AWU$=1Sd=g!UQKw2*Ly>OmM;kCrk*!gdj|CLNy@>6M`_o z2@{7U{JwA$s&t>M;G|}P6Hai#2|+j^2q!q%!U;h*AqXcp;RGj~ z;Di%`a6%AH2*L?YI3WlpIN<~*oDhT)oRCgsf{r}F2`4z=1SgyjgcE{rLJ&>}!U;h* z!3if0OZdG*goQXKjB~;`CyWcixFC#k!nh!e3&J=jjB~=cAdCw_|E^lsKUz2qi%%2||ezN`g@0gc2u|1fj$U zB|#{0LWvVfoKO;kk|2}>p(F?;K`3!T>2QPw-RZCH&!MI1>B#i(o&J)Nl#-;hBxNLN zQj(@5i84*mU;m@o{{O|N*Z%$grsW?Qxc{I075Pi@7v!Ine^UN2T7(A#AOHafKmY;| zfB*y_009U<00M7{KyW+1>1gmopH#KDD`cL$Uq5njmdihWE$&LR+pFa3chrR#b z^wd`e?*Es)nmsxFZ>N7?+MIrb7U2N_2tWV=5P$##AOHafK;WB6;M{aNaxJLv>~lNx z4PNHaN5S+BUe=~>+q(4CUixyaOJB65Z}GNU^u^o0Tf6D`b5loKS?hE+v7~F~CXcpq z-+ke9^<3siD{G~_Eo-H7>7%XOcT+j7crJCcm5shF8|RWoTesfE5R7mj%UKeaEy)cjHJ|JN5`s&>@-|Mf+fs`~f;o0jc?`~S(G zlYdbDKKT>!UzfLN5grhL00bZa0SG_<0uX=z1Rwwb2pmEnGaZY(?Gc_aGu8KcvhOv0 zmA{uK-S;}x_d414+Q0u_x6FyY*YUpBvA);QzSr~{0KIjoT9W)Vn*SeSN00>q5P$## zAOHafKmY;|fB*y_0D*5Bf&Tmd`Jexv$i5np|4{zd@)zYFmp?84Ex9efB(KVO`5}2S z`)ApIpZyovpU!?Z`#(@NJRkr82tWV=5P$##AOHafKmYoLEe!XQsky=i?_P z!x@cK>O>}-s3(&%>G0ZW>_jS*k?xn9IFSq|mM11=5}~!#V)VpBIAb9mKM@Zn=3}wr zF@Np!o|>wkh=%jg?J18-6SMS7A$|E&|Neg`vOgb@|3v;B`Pbyn(|7+rEq_wpkvHY% zhrUw($N-C64PKFYSiBLjeB9xGi zhZ6KyC_#(LvDyCX1i|nBM~=M(O@~cF00Izz00bZa0SG_<0uX=z1R(IH3HYD?WB&i9 zabrUefB*y_009U<00Izz00bZafwx4!|NZ}|$oE9#f0q5r?5|A!*7QG^{120#&3qvB zL#cY=*J(lUkpJl&soZN17|Go1tn{&#XV&V>Yi+q!)!H=OW+!<4-RJYkoMA}czZ5L* zuujKqHLI-IcCF0@YkHj#N#*lbR+iUSl=bDuFRmyfGAQ#ICG>D@Wp!%2I(IM;05oLg8Ju1S}M%5HmAzko4y>1Je2 zd%tYTCkpI=#7Q#56H?FmIw_X)pOwoU(U`HU>L>ou6?5QW>! za{a#9sWwcT$F}YX@fBG~3Lsnj#9j zU9203BZfnN(5})!#51d#t?hP4p~LFM;TmkUTQ5^=j~Pj_tn-G<70lOs_nflzV;q1nS0l}q>txg{ZeJLFlL+s*4$mkwh7riTmJe*o_e#ADX=kGFf? z!-dmvcE80Pk8OpHJ^O^nzO8%vgK9E&=8W|Ehk}L*V&6aNv_%XKCFBR1ZD{f6*6Rjx zUjrU=+IHw(ICye2Y#EA+;S79F$24;{48|<(?^lD}=6z=pxo008*KN9$qSGXg-SVnh zD8YEGd^(wX^ik>Ka|0*UB7Z2iKF}tig(F&|o1@!R`kG~!r+*iRm)6>5(;9cCyw$EY zw`t68cTX0E*QfJ_hU-;3o94KV<_AK@AN`vf;}0-zutV+FMHZE>XBmN77zLSuh^m z@7Tio9@U+g_FkXfeeAu#vE}w^K(x1H@72-(&0czl#h+jDh25So{utgP9G|7H8!7YM zau*d^bD_7({w5b5TS(-dTN)Q3d`-veROyde(gCQu^Lr_a{`?=G|KE|T8z=+<5P$## zAOHafKmY;|fB*y_aMudp`~P=s)1YDyfB*y_009U<00Izz00bZafjcIE&;RcjB?^K7 z1Rwwb2tWV=5P$##AOHaf+_eJu{Qs_P8dMAd5P$##AOHafKmY;|fB*y_aK{Aj`TrfG zL_rXM00bZa0SG_<0uX=z1Rwx`yH)`6|GTznP%#KV00Izz00bZa0SG_<0uX?}9TUL! z|L+(j3W5LxAOHafKmY;|fB*y_009WxwF3D3|E_HsR15+TfB*y_009U<00Izz00ba# z#{@9{zhjgr2m%m*00bZa0SG_<0uX=z1R!wN3gG+ycWu+4Vi14;1Rwwb2tWV=5P$## zAOL|oCg6YmAC><&BL6x4zykshfB*y_009U<00Izz00bZafqOw9lZi#%CUzty#UfMq z{Qq8PR_p@=AOHafKmY;|fB*y_009U*#8ze9{Exv-AVm+N=trE;!hIK$Co2t zil<^<&R)x&ocfiiPfcYez07~gyp;Yo@yh#V=n>M@Ed8O`ptZHt1 zt>AsN;cm1|&uulU>;`LkovId2S^3z9zb%=Yos~XS@yuGCZMa^w!5Xc$%R2q9m(O2W zSzcdJ)|Vf@xT5qgQRXvB=;7MR`pOII$}?A1FD+lWrd(LLwm6i@YBfEo6VJJJd0kn% zdhz0LwxBXQRc~jD9hB8-H5yd?O|!FkP}VlvY8{k^7&lw(AlGoU__jP|S4~eLnv2T# zT`(PoS$t+URU0y|!tH8;FXUf2^WPcC1*xUOiY)!}V#nsujIcO6!>&7IER3Whpr z4YGDzn>8&qm|Hzv8ZN%gJZk+LX1!{)wyA+u*Vb2_TDhWh>olT9Zj-XRw(0L=ZD-6L zisossPRHEfjXAt=&)gU%BZ7KS>Ab2ue)00- z3%lpmiNeNL&QfXM(dd7j{x=qO=S#`l`Sa55^ZNq2_N{UC zqebTqS2xNzH{YRSxxJ`(tld~twl)_5d@nkahzV}JH?-*SN(J_XK7wH!csKw#?)zk{F2k-Pl z+Y^0YT>1wNsK=4J(1|CKxk5qOT^-FrVLwzAN?Sdk8gH<-{LS;pT&Xm^tth;QYURiL z(+5=R(EZ}vn7DKUC83f*&hs0xGi9D>EP1AcTWyfcyQT> zGm#*JdC=)ZkgIl3uEU(JclUA3S*tdD=&zd{uSXM{7!T*^8#0x7zDtV=uk@ngS1WV? zf5Y>!*B*H+nOj|CH+-4r1RvkP8qmib6{xjUn-6?PNCNrwkicZ@K`Hok&{i{!&;ReChQ+Qx00Izz00bZa z0SG_<0uX=z1jYzp{yzo=$q;}51Rwwb2tWV=5P$##AOL}TNC1ET?;dJQ>w;x=t|tMf|T^;p&1 z_FBRFDr;wQ@yy zV&%!@s~6W5ZA7VVyW>?mv@b!i!x`%4{>wX_>1}s-ox0nZqpG?$*xYbwo$W2UD8y`L zS8F?Cwz$=9-C#|#X|bxcx!t^8b?tEZA9`s-+0R^Ay|jGgnsQ;~nlj>~vB-3j?ML zk6lURo?99h2G=*bkq}gZLLr>;!tL#6lewiO>0|E*!Xdmo{QmiYum~@GBcah{Iw&&Q ztj=!uunGm}#l5gNtq!-8)oS*FZBc3Xo~>rp+u35g*%T_wCrG?it(&FcFcFYw&S@CHa|CeZE3c#G;6QVK7Drf(%D(( z#ks|~X6xqM!os4m-C^x2U14?|m)S$%r}AzuLe*_-wc6fr;H#$#i^>hN?%GwS-D-&3 zJYkyxzAjSOtu42`SJy>FG)p%=dA5Pk#UJIbuB|?Mb!EQShKowCl@|ND4|SgdgLg^Pz>tv8m@YF9q?z6;6RyWcH+a=9Da-4ZFbyDy&&hjw?t zHyYW&`a6e;!lv2agU&vY+F+h(o1PgoMQ>!A8y%-_EcAxjd3%etycZt5t>3Xww#;U$ z=~`yJ+M`%hY}T>b?v_6Ui!j}<|0#F84{Wqs+gsfMXR&*l)7h@|9V7NVIZ(FDHbp_N zh#^KM&}=NwAwQ1>?ZvFnSn?SFC87u-4m(4 zv07Qax_)_ejS9Q8vbH`vau19R`vmTm>3OW(cVyisuaMXaf*~?0tnJpeJ#mm8THdPL zRT|&6$1QKNoBJ*w7h>wjQ;0Xz&j#wgaQn&CWNvOwdi_Gs$eYZpdz)28CyHKY;LYWM z<{emc$J#d7?4gFP4rOiAbb=2{;}7394PS1ZA7w|x(w&5~pAJrCJ~qjFOK^tG9eK#| z*Ovwu`8WJ~vNiry~YPI!k(0 zdHmw##~1MV{~fz@fr20a0SG_<0uX=z1Rwwb2tWV=cdY>C|95TEpkfe!00bZa0SG_< z0uX=z1Rwx`J0^hn{~e=5K@fld1Rwwb2tWV=5P$##AOL~8R=~gif8^L*TRl_^0uX=z z1Rwwb2tWV=5P$##AOL|oAb|P*9Y9185P$##AOHafKmY;|fB*y_0D-$)0N?+=%Nq#Q zg8&2|009U<00Izz00bZa0SMdy0et>{2M|#N1Rwwb2tWV=5P$##AOHafK;SMH!2JI% zZy;0;0uX=z1Rwwb2tWV=5P$##AaDl+@csWgfQTX>009U<00Izz00bZa0SG_<0(ZFp zKL5YV8wk~d00bZa0SG_<0uX=z1Rwwb2;2byeExq25K#mKAOHafKmY;|fB*y_009U< z;4T-y=l^$k1EG2lfB*y_009U<00Izz00bZafjc1JfBqkrKOK?3D*u}NQ}hB42tWV= z5P$##AOHafKmY;|fB*#EOo5Z}SV1~}Wo3DNrTW2@E6=T7UaLN{yng=aL@pL9q(e(C zt*%|Zl8eR)sqlj356}WBws2~2!437acDm?){vVe=82@28fSX5L^X_jauMe1&AJxErhNc;P?OEiYCQ2ApijgKmY;| zfB*y_009U<00M8WfIt7wNxvG2{i6K3d@fs`{^9B8r+#AUxyj#{d_40rnL_%fQX8p9 z5}!@f;-%PMM86vSO!S=etI~4h-$XoGwcbqT9y=xNPP*gb?TM8al)mEoaw?bC6rOv& zFLlAGCv)d$BNO3`SgoeVnqJ>lI^(v|pS5o@{mBcviR;PS%7V1}=-`H`u3a_juGy(t zX0z3FEwdifvX|Z-z180Gz4dyV?k$_|mC3zn!9wfhWUe$T?aIA+2o7`GcD?F#w&nFF zyfU=;{-r^7f4lvO^SvGL3tOnViJUPjZI9lb*Xdt%YyYizouO@corTrSMDC@M6bUxa zd8O`ptZHt1t>Ar?+R*iOs@{$tF)nMHZEJIS&uT{Tv0}5QRXvB=wWTTbvvkxtZj*#npy)ABk!o#5Sz6(^CqGiNC3j^5cs}xQSJpW`i99&T2Kb>Wn%w>(GE>wc1RfZ%bWN)-JCrYgaE` zRGwIQa{21Tbwxd`4x{o)RO{>pt1GK(>nl&KTp3KRBX+FK>ZTtmolSSEdi2%nX2;{2G=O=7J2&6) z+K%To*!@94@mL zlXD)s<&B6G5mgP^t-;#tt=S4j0<%71?eIu3ybFCpkuopr{Aw;Ldpj3u!R1;aclFG; z7QDXE9g2g)9ivfZD9OEj!A$1PoRMB%3EFTd!%)KJKr0R{9?^`!)(6Rk_g?I@PvUr;vYQ*+9lZfV)t-E z2ls*O3xDG~=>)1G?dAqBU7~krkf&I8+>I{TVCu#I>)hx}bMx2xt3#DvP@Z31fBN#( zb>+(C=U1QDjaKR8>YTLu;K&NtEvw_c%EE<h+K2?)JEM=xzA=%>Ab2ue)00- z3%e8F!7K5uk(Ka!JhgVX5+a%HUkQHRQ zlD+@-DaYJ=hi$m_qT;c3V^P`KXtoynTcv;TLa2TI`nM-@g~Hh8F+DR}C7aT${p;js z84pscx2)^DVP5)BBKOLLeTIu0%;H0aADi^XYqiC+K~;mnW4{cw-G^UH<}O^2cF%Ra z_sdQ@y5C}RV4oj8Aos)b?bc0-%l>%e_3s3`-aCC*xNt3zt5yzc5R}Tt&4J4D^zYnV zc_HZUw`WK0G0zpQx+ru1{o|RsyEUS_Da%*aFR!jqDVJ8())%|u=GC>;XRogGc6YHm zG3fSKkSgO4 z2ZB+XrWJ$DxyYRc6BnNPU?TUS!eQIkZ91*t;Pz9${ne|yyY`0jfgtd+gi-vo5A9Fl zXL(qezs`1O1i9rYTWz;tws#at2#!YEOfj1~3;6v1&Ar}&tw8_+5P$##AOHafKmY;| zfB*#E3IW{z|E*BRHX#532tWV=5P$##AOHafKmY=7t^hv&e{;RDH3&ce0uX=z1Rwwb z2tWV=5P-m2A%M^S-wJhX69N!`00bZa0SG_<0uX=z1R(I{3izM@N98|`$bU{h@PGgW zAOHafKmY;|fB*y_009U<;9d~OWMYxGi5-bavB(rY|GyWS75e}I2tWV=5P$##AOHaf zKmY;|*k1s@|G&QvmO=mm5P$##AOHafKmY;|fB*#U1p&v3#I8U90uX=z1Rwwb2tWV=5P$###t7i^|1mH~h5!U0009U<00Izz00bZa z0SMef0{Hy@9%@YN3Irek0SG_<0uX=z1Rwwb2tZ(r06za81A}A;KmY;|fB*y_009U< z00Izzz&#}3fBru+^^u7D>+(OAze|2WetY)!vp<`?oqaa@&guVq`is;5VEXd(iK+i{ z>L(}@9uR;41Rwwb2tWV=5P$##zEJ^VCjO2GFWJm;{l7(K(Lc83Ew`;r*JGBq-8Sn= ztF73q<8CzRiDx@=Jf3^-Lg%_$uZuOVunn4c7FY+oCO-b@x?f z`&$Uo6t}5(n@kCEbrfc`Iy)VYH7;f+PMz9~bz0kPi_yBY`ITE9Yd2|EsJ0#@DSY8s z#o9ERO;%r2wpzAjcDzNUR&Q-ADou8?Q)eEn^`7bY?5U+zd&6wHubLhi@gmQ+8e3*_ z$FKE9yS2Ub=u|v+YK7gPr98trYizZAz97xd*RrhbcAJs#dne|Cg+O$E?mO{~C zo}Gw4c&aM0^Lj1UI$qnPydsqv&-7cW8Pv{hHB1T&*JkFKIIX)%mGevH>+VGzPxZIw z(k{ES!5i#7vH1O`-seYWD7T*!>^f`vO{PSt`Iffm&-Zns;py#$NgHk2?hV)8HtUZ{ zel!GODk{D0wVJI)YrC@-zqIWjcKy%)XXN>a{9on&EdL+!SL83sKTB5v{-ON0<=5mJ z^2_o|@^kXj@?&y=GT{LM2tWV=5P$##AOHafKmY;|xW@&iV(*Z;*A+79SWXHqB_vX@ z`{`Ay9?Qf|N&Lc2)?XT2hC1%A)V)5DoQyr_zwxgJ#DfLmg48j8RX(4O9*fON{g->D zkH_Yufomygzw}_{F8i;7>pN3^3H;j4q+fFPO4*FRNpYcKVmkH^y%rZ)QmI%j9b6&6 z_y6zlz{T!C00Izz00bZa0SG_<0uX=z1V{k$e}n-9AOHafKmY;|fB*y_009U<;NBO& z{Qur>W9%UWAOHafKmY;|fB*y_009UK{&t(5|_OscSvbpJhIsK{W zm8q{!{nM$=)Y9ZvCx2-2LzDMszMT24%=z?RrvFL$6ti*Sx zB}dooqG?nrwSrx?ikht%d3u#+CAFm5rBX3p)SR+zFlN?tQ`bv&u~e*CwpJ??GWDV221pf{FIxwMjL*X**b6&~QF zqfrJ7O9n|8UJw`#gmqly>x z9Qqi(lzGjpw6}4;^)k5AeDkZH@uGCCJFBgbNwav1@3elhx zt5PfF^M$f)7i_&knN`Cn6!NBO+RR`^UbAadnqicwSy|bt8C2V%W?GKvv_Yhl*>jTZSb;*7VwU<5bt|eVRiUC&|FJ7nR)GTAtR#3TM!_npv|f!8ReCDqshbqbB?>Ys zgz8Qkpv_YBk+`aw)Bw!XE2RPzT2{4ePzsF~MoFjrB~Yrh>CmV^JqIung=G~}sfu~I0RdWph_ zc8Gd=El)#K-ptp^Y$_;)_LxRXvsR$((hy9Yj)skVNo7TwcDCdYq+X<*rNN=>kUR}( zIz>{YW>r+ju#I$3ibmNhx>ln8W)`iQrP&2XXO>DqSfT)=@Jo7`-*)yc8NvX$;Y+1LZ4PschGrTE5^^XqYk_Y7yEp1stQ^;g5+-E9lhTmTlQZ zvUiw$e^83*R8;CiC5R4DeHO2JRCik4F$aMQMG)N-0eOf_mo z^~4i&JW8vk-?wN4(P|ayMfsAYR|-WMQ%gk}jVZwBrLNOn70kRfrxquFZ}JBxU!1%z^J|$;WFAld zMf!im{Qq7**}?un00Izz00bZq2n1(sbZ$x06`CO!{@JOyPBQ?1B4V3G$EFz&(=<8>t~h+M%rxfIR64z_sCk;Z(iynpSadNWPv_1>m8Qda z-J+9!nn+g+X46T2zDy^mG_i10o6beWw8f??6?E2Fv`TiVLi1gRglOJtYs_}&1eMO* zY3^m(s?D4{%>!(jd9#A9R%ps*(d@(EC)PCE)HRw<(lr#C+tQnSiLPHz4%4#q8l9V$ z3k4&u(*&x((Hk`c1FCx$cpje@64~9Q;tk8tT&eK&3)ig>pfiBZI zw^67S{d0FZdsj`BW-oMsq2ixH7j(O3i3uvr-Ds9lWGb^YI#Z@AHbqm_X+A_#?n2Ql z7HL{jq=_a?YxHu(Vmehcuh9&E=3*q5=MxT#D$7ioJ>+RFTBF%3O-u>Z%9kr9E7){h zK(%N(WLp+Zi}EF-M3eSXIqzQ*pqZ-S@C!XP%0g3-BBOnw>j%`zG;gDDpvgU1)o8+H z((IL*$DxWDcAlA$-Q zb((~hY3^w|L|n=HC^P{z_~oJ^%`F-ASIwe;Fe^4)Orj|y)y}_GNO4ROC6g{U(N!?I z6hd5dsl?VwI$dBY(e*xyPu%Hxg=SK?miG%#DIIi;>sm=qnSSkqKT zr@5w8p^3OgR~hIUpQZ9kS9!X4LqkJ_t~^;~n%U=R?roIHCE5d8lP=PbuI*oA(rMo) z7HROJ0jyZ2u3+jkd*+u#4BerNJLE)Hkm&LPT}g4QBK3)yUNRU3U`f~MdKO(^E0aW# z#Irng$xqPul$*MgruuPh&{ekz+0n3R*QibDLS~6Ey0TLsEh?*~)4q{Otz4i> zu8ac9p`Ky$i*adF-eU=2LY#S(Lk>`{?$^WY*2UA=qe0#AF>V#U@8qc{zVJA4nq;2H))72 z7WgGSRW<0ED_w)6 z6U_hR|DU}(fsZ7;3xlnaW=3Q(s*}m79v=Oa0Cbha6%wJ!jS+WBwUFJ*B5d?0wEmX2zLl1+z_q+$@j08T55Hx z#?tKiGgCbCvwN%Gx2oUzKlOH1y+^gqWxxOb>*+71|26&&;PZJ%!+%ng+`3qpUf7ri7wOqg+{M? z*VaO#d&l-dJ)NGq`$R1!5o8I`!CXJpUx;4ad-@BNR&OR-C`b3|iLHf3{kHx>bPP;x zEmXT_`wKBSBpsSNFPfd zNk1Shr{}f*3sc1fLVy4P0t5&UAV7cs0RkbAwaH`7elu$@_u{FKeyhJ5E%1JeJ{Fq& z)^*I&X!W}Yy0KEf)!*&4Tm4pgOq%NTI|O2(-S0h!N3pv7=6d!NNx!+?iD^Ck)_yFs z`mOYs_tfckEVQHWeiuPZA?x+q?J>1$q2IQTUW87+{U5U`wz>vlx>PUCb~WZgbhdgJ zVnL@m}il4Z^Jx(oeYi1}V;;hqDu|Be6qCJ-P%fB*pk1PBlyK!8Bu1^Vs&Xzur$ z>G9u2zX_f_#ozA$=tXnC-z5+aP1X9t^f7V2(Qo(1FCz5%t^8Q%Y)>EPHu@a^v30NC zaF2z??fou>ZoAVjDt`5)-(2s-Lcd3#7tQ^ClRjJM_anqYt=~1!YjkS;Mt(fB(dc(W z^kVive~v)>ib${D$d83izq23~8vTxmUcKGvcPPX{P+O!f3npML)I{ipu3t> zA3OHfj~zYwwxjQR2#l6?mWA+v3hN}z0`iPxxBKzwBB7`UtV1qPMi3`M_zyN;Y%0KJ^J`-FTUwq-X`Z> z_xQQt&CYLs)KYWq%I3`UY$FPt-oMb^@|EuJrW0Rq;}Wy=$BN4mm##H8o}63WJTpC8 zefi|(iJjtBuXWd&8xh$0(#CVwy1Q>DK7XvJ-OT>FSwXu==XVzSnR8EXo}QjvjIwq^ z+gW2rb2nw;Z{Mi6ZLyIO2ad~~xlhP=V8g8Nk*xFEpE=jQ8nK>DHj|yw+fQC!d3t>*o))`)t-JJObN$J!l#Q|C z#@EbB+Dbh?wEbM~%Jl4OqL8Dbh4dp_*%&HiJ+GAERfmchPM+I5_Vo1Z#kpkjm3s?X zTJ9`0uPis$m)gyh)s^LT^Gbg&chcAPFLft>ce|aUck<5fd}e&%f-W-VHm5gFPS1YW zLzA1Y*x8eQWnPXWy4GxORom@jGL|v%xnsLCw$9*No$b$9=Fayt+m(sU6VtN~$FAIW zgI&qKWMdyQ@wX1JAK8}s??nIe`rqD<-8_D5w*2zRx9se}mefY`a(sE4mv`Sye9l;r zyP4UlyZ+h6=i?>Ao}QllptF;k5AXf_^`$G#^^K*q?#9}3_pQ-c+^^XapS^z(qigS! zw0?f?$IP93*jMy z>+RLG?)GkcR^Dz5tva+1L#a2|f#)}m#(6S!U~zN@T5HSgtZr_X{x`Qvf5YRC{^d6e zUkA4GmjH}QfJd%CYC&$0)>#Nt-+TEpgSgvpH!)N9R46i%1 z1H;L4Pi;=cRWC}~y&`Py`u1h#%Jud5u5B0f8F@wRS$U|eJ?V3u&B?9fI(C{|Ub)=cKy_GQc@tYIJ zW*cWGpC9|!tz&XMs>aq=<8S1C^v;^YAHS10_tYol9E`#FdHA@0YF;UORvs#7Px{>D zPt2)e{UDZB*Oo6YuWSeO*K>>NpQ^Xk9WH4odG5{6AIrW=*GJi|G*>QPZ(bgJk>8P5 z#$dgn&mSbsUH*i;AhL^oToSW;n(ZK7$SYvrlC3*b$Z+!98{ZzM-m{~p-u1z~!FCa! zl2^p`eZtVE5AGZ~Z=0U2?fXrS-Cw>MFWaB}$$6i>K3H++(|6M1+}-M4nS1kd{oQ|N z^cb|)y3P37Z5OebSH$*eLj`Q7#P@aXsb_O4ZFeR6Ml9|5*8R1-BKE92RM4LExxeyE zR+o~ukH)dJ)*z5ix^W@h&e-So&pdNWZ_U2o$=DZs`RcXRwT!E`uW@s@2@oc!Tp4}<&CY|!c(ItQGwsuU0d(p-ESS?Pssc1 z;Z=u97*5V^$evi=fB&Ppbp{uSx963ywbIb1Zzaq+rKbS-+Gci{u)AS>t_UFaKAq_ zARgr3{yl*xy+75U77P7Z2-O(n@6QN`g;syqKU?TeKFEGGVC%8}D62pIAAhrhzuIr>CEguB0EIzA62v^uyB+PG6PI zrjs+j7Mu7-fB*pk1PBlyK!5-N0tDXc0(VVaNMf$dm267S(lgmCx9-~6{SxooFY(NN ziPLvZT{toNnbT8uCRf|n?%DqDZQK7nx&7ZGXQu8?+N&|YJ*E&Y-@WHuy64@AJ@2N{ zsaGU1`RsZp<{rl8ca6NC8F_zv}584xg&eIJ$pHwy`0Kkj%6=Lx7z=I zG~WLIzVu(k-vIcs^z+hpq|cBq)z|9?>Y^4}}cvuTSd*03NdDm~=@2q*} zp1j-lyz4jpch)?!C-2mrcl~aGoi(TTZ{U>(T%o_Lo_WwQEQosFwTej41 z|DVj3`tASi-~WGMBK_m|3xL0!{#yFW=`W-|o&I?G!|4yiUjqD|^gGjcrQe)>L;AJp zSEXMbe-ZGV(IfC#>8GVH9E8|91PBlyK!5-N0t5&UAV7e?Kp<<4pUqx&2kiT;_PevR zyRw%%vzOgL{C-P5&C+JFmowSR?!bP(b$=pDJD$BvXD?fW{n^ry>}4u@nVg!MII;Eo zzxMy&Sokji0t5&UAV7cs0RjXF5O_}sWQ}p{|M!%x&m};B009C72oNAZfB*pke>w!T z|NnFx2YW$)009C72oNAZfB*pk1m2SZ+W+rKU7t;W009C72oNAZfB*pk1paggyw}_R zXFg{l{_fxRr{9$Rz4TMkr_#TiE~NLT$KtR2{qW4YX1;vp(`K&Cym96)%{(x3`poZ~ z`H3^%b>^#M6aNShAV7cs0RjXF5FkL{MF`AJ)lO7OmHLI!;)QbcQn~U0rBeLw&G$~# zlHv67cKYOKMz(gg!PH1bX>mK_$Y{pGcE-`sjK+4xvC)kBcEeEMiwN$*RK z#0-ERo%xQLub%l^GjE$|&pb9$oB4Ay(`SD3%#WY>?n4A&uCH~^?w@?`{>iiZC*QMw^4v48UI z`zPPFe{#Bi^349pXZBA%y?^ql{gY4bpL}Bf&xpK&6SO%jqbA>XUCK7 z9Z#AaPr7G3>F)8QyT+6598bDqJn8oFq}#@m(($C3@uV~3NvFq?PK_s>98Wqio^*UX zX?i^A*m%;>@uVZ;NmJuVlebUJo!EOE&HpdlmsLOn2oNAZfB*pk1PBly@TXMZy*~ec z=0_&d-%bBV`cvr-rr(qPi}dT#FH1i^{j~J?^et&O{h0J4(}&YqIv2A6ZcmTS{9!y5 z@N=<=e*_2+AV7cs0RjXF5FkL{y(@5P>b~Uq%F`>W&#assTE2H^d3I>|o}uNthnDXe zTE25=`HrFG+lQ8K8(L0>mS={R&kQY}9$G#%w0v@C`NYuj@uB7Eq2*&k%SVTnj|?qO z4J}WeoVxGCw$Il5|94HKzmxv=^vBcxkbXz{&*E1AzA#$35OFVFl;{35`AocY%??|SbZVx2& z=W_S#o_BZed3XDscW3szJF(~8(bH4+pV;}#(^D@?I^Fj2dhGu_!*A{wels)t=H&33 zW5aJI`|bZze=rfx{(p8n^Z&AV*8l6{xBf29+;-;2&V1>aC(o45OrQSg)8BOZGfzKv zx_A1C(;s~L)u-S0^vT%7KLP{@5FkK+009C7ZV`doryfk!y3H#a%U8P>o?Kmh`rfgW zJH}E@kEQgVPVWDzSgW~qVSQtDt=oUVdv8+z3GBT|{YRwtCLK9H^@il3_2*VLp6qTc zw;x*Xu5{uD?N(Q=JQvIH^!e(_tDjnrx3dRb@%DqRcgwM3t~9TAx({7jTYakA z-dKO=^6HiD)%8KZTfyCRGaJp^%tps=W~0f4sp~h4sb3BIzn-`^uCq70;hi_T;hCG= zaJn&d{lw6B=hf|z{!03@>5rt}8#4gDG5tsBm!zMU{*8D7U@g6z z{*{;o@S*8z;`aa_NZ%(-J6HIQM6;`Usf-0RjXF5FkK+ z009C73M+7Y>PYg`SANb1pB*g3(*|29vx9|u1`Br&7UDsKt#$4kEZi|zxP7n?&nRrI zlMWVU1`B5f3-S2E);gyK3nvE)Ck6}gWW&}v(}RU$gN37mg(HK7slmeJ^wg0PSzKG~ z{}(3GKTdx?{q6ME(qB%0A^qw2C4e7Je<0=pd{6qF>ATWzPQM}j+UO7X^7M<-cgDPc z&x&6Mc%iU|TwnwU5FkK+009C72oNAZ;5{Pn-v9moubN2zD4qcLt@KyZpNv-jze>M8 z{sO?~rSC|eNte@)9s2$MV>7=o^J6pLHS>)#U-cfL@Sy|<5FkK+009C72oNCfXImiq z&ARpLt>)$K%Es*Qn^X5pm6P6;Zg=BCdv$fKv%J#(VZVF!Prhyc^#W zG?D&h`ZMYGN6Y_f(=SRtJ$)|b`@b=s`LCt#m)@C9#xMW>?930$eEZDT&HTNY&xqd# zT%LK;pX~}MdIAIp5FkK+009C72oTs3$QqwJKjnC#GJkd?p?dE~LS=R&p?uFsLh0_k z3FXDRMiLhKZQk8t%Z)om)~Me;l2E&CBw;=sNvO_@Bvj6fB$Q8&B$Q6=O(-p%97$L> zF_O?YK9W$M9!aPj8%dZyI+9R5GLlf48c8Tmrc)1`*aa$;viASI>8Blf{=a%ofB*pk z1PBlyK!5-N0t5)$gus!h6Uo`^B}V8^B(vGeJ=x1$*~^{TON`o|NN&$wZp&WM>}4i< zIg`D_aQ=zpRQ7T*dpVK49M4{2*#AUwEPFYcy&TD2rm~mGsi_kuwEu77SlNUC0RjXF z5FkK+009C72;8hdHXA?M|JyV4qy0aTwf`rw_WwlI{@Z{E(91PBlyK!5-N z0t5&UAVA<&5zzj>RgRSXBtU=w0RjXF5FkK+009CwFQEN@^LDl*K!5-N0t5&UAV7cs z0Rp#*fcF2ba-{4h0RjXF5FkK+009C72oSh=0qy^rx3eVy0t5&UAV7cs0RjXF5V%zY zwEu6FBV|7c5FkK+009C72oNAZfWXZQX#d~5oh=CvAV7cs0RjXF5FkK+z^x*n{eP<* zDf>x)009C72oNAZfB*pk1a4m7%;Z;2ye#?diOELt-RaetAD#KoGhcnCeEMCdUw`W7 zPBl;d(#bcT_{9@zCnk@7?(wtJUorj4W8ZMBeDtf2zUIh}9%)bg=G603w@rR!^5Dcb zo%lQZ?Zf7=%~ws&KKj7q=G^j1r~B-3=h>z1^P8`po~=GKx%rBnw5KmGHLol;*O#uW zu0DPJTDQA^FaE1NUZvyCWpdS`!z*Ieo?U+E4fOnkwOOU%|ED=tf1y4KuyaxUuDQ?swU zFu9rR6qg;YEXM0APwyVN{@eA5ZyYOZXzjh~TU(s(|7U5rGxyZyUznb~5G5TQDQT-h zjurLKbBfwpec!USt9BH2ZF6o*F&!>!t$U@p5l3u&X}d1(BuxCX{Yu-(?ytXHgt?P6@eS{$(Eb)<#cq92MtW`Y!5bF2zIuJF zoqcC_i~OfIE^=#&u_CvUvm#rY?|*Ez_KL~phF$ya%iZ;*mFCr*Q$)O<`1<`y+q3rY zaf~g_XP*#N<$>v}kfHCupn7Db44;UyQvS&eOBp>2WuP~5^XTULP0wD8in)8% zY_G1Zb=z50iEqjB+Isd~+32pVjHXX~-B{71s|+^H0v*jezx}aW73lfRS4_`79Q!f5 zV>`OR*0*vrb>eH^{a*CHhWqZr&KLBV%|Aaq`#}#*Zr-_5{*&G2m5nEtx^E4z^`-V& zx4F^n>`9#Xnz6F?}AHSQT z2V0GoJ;<4R%jUW1*~KV%_Y}XUjQ)|?lQQv--c6~4`nG4Q^L@gt%F<`#SNJH!iNf^;l_JpV>bhzHe0Ev%?j* zpBGo^{)uqu+S=+<@wMJcocN0U3maW~r@Zy^dp{;S9jB;7q$MiwY?hm2rHN4 zWVP14wz@ZI;vbF`ymy8EHd(QIljC}GZFO$*^yd3a&wgZ_CU$T9t}b6*>tEP*zNxEM zuP$#aJ=t7;ax`z^AB>egy2?^}ck^sFM)S`P<;QpTY@o;P?0$nr*YC$OnmF<0?|whB zfcM>jzQpsJ_r`fUs@HuxXN}7d^wsXw)wS$0vAvgB{U1)B__DErhqH$_%gP?k+YUU= zf!SGWWpj4x9%J`{KfH4P%RZbi@ufE|cyQtv-sXHin&-Ao9KFqZj%Bxo&+i{^hBCbE z#NWShc>~?yZMN#z`sUqHtK+P=d-rrL>QZ;xCN78ByFE!0UouwMp8Ty%GSEHA=eOSV zulgICcWqsNc5Bj}bq8PHJ&6-v{O-!#`p)lD@>a&&=KE~kIX(Lk)yd6=cU%Xzd&|7t8hmhE8jSz%*KZ+>009C7 z2oNAZfB*pk1PByMK>NQ~$5S)}2oNAZfB*pk1PBlyKwv)s?f?B$q!A!MfB*pk1PBly zK!5;&VhL#f7wdS6h5!Kq1PBlyK!5-N0t5)`C!qbmpNcdB1PBlyK!5-N0t5&UAW$p; z?f+sOPtgz{K!5-N0t5&UAV7csf&B!u|MydoMt}eT0t5&UAV7cs0RjYyC7}IZtm7#f z0t5&UAV7cs0RjXF5FoIhK-T_0o4zoS{&D*I>2IgMmi}`33+Yd%Kc4<@`UC0rrr(o( zXZo)6o6~Pdzc&4<^vlyPPT!e+Uiw+-r^P1z5gPm|J#coL009C72oNAZ zfB*pk1PB~LK>Pm?SXL!KfB*pk1PBlyK!5-N0=KAu_Wvz<;OsU50t5&UAV7cs0RjXF z5IBT@_WvQUtV)0Y0RjXF5FkK+009C7Zczd4|6BCH*=+&@2oNAZfB*pk1PBlya0mhI z|3hF|l>h+(1PBlyK!5-N0t5)$q5|6gx9EYh+XM&@AV7cs0RjXF5FkL{5CYo&hrqHb z0RjXF5FkK+009C72oShM1+@Qf(F13<2@oJafB*pk1PBlyK!Cs@1hoGTfn`+!1PBly zK!5-N0t5&UAaIKcX#d}$2hMI2AV7cs0RjXF5FkK+0D(gYX#XDq%c=wj5FkK+009C7 z2oNAZ;1(6o{=Y>JoZTisfB*pk1PBlyK!5-N0*4UL{yzkkRS6IvK!5-N0t5&UAV7e? zEh?b>e~TVCyG?)q0RjXF5FkK+009C74k4iZe+VqA5+Fc;009C72oNAZfB=D8R6zUx z7Cmrwn*ad<1PBlyK!5-N0t5&gLO}cf5Li|vK!5-N0t5&UAV7cs0Rp$EfcF0_df@Cf z0RjXF5FkK+009C72oN}gfcF0(u&hde009C72oNAZfB*pk1a47*GqK-yOn%hFS?p@=s1KoOs>w$B%r?EgIs`Zhz|H<_AvS z_hDy`f7Z)3)|M|{?yj|;yuR}E`ciLWeQEVtcdfaxyt>l7vb4Oi-d)?+%6#PY7azWK z@!X}?Kl))GcJcM+Zn(v{hd=aEtn=vOPh5QcrE{-)e0%M4A9C@-9)0}exsiX{t3CSo zrPt+r?D?^6vX5x5u55HyHePjZ{rc6b&9&!Vb#9}1dHq%A*1GGfSKiv~EWPD=H%ooG z``l8m+1?nGH?nr-H@e07!EVp3 zZay?U`_My^o2Q0LYF=4xt}ksocdfg-Wk0REKJl&l6}G#<-r}}5I=`Dg_x$For)R5C z;w#2Wyt2Cb^!01wWqwP3nOmFOpwx4Zyza5bva0v^>mGUdiHmbiwI4ar(Z8;>(+ie|Zn~h22`~rTCJbA5{96Q&J2^NrTmY;@N*vj4WaEA1!a zjQMo-roDQl^WfZT#&&1ytlYmktgSw?+*#i_{k-a2cFE``<{iBLxiPE1v7;N?SCp+S z&W~^Mo)2^^&iKYX^18=A^sz@DxwI43+_~4j?%W$b>b2Qf=ZTA#c7r_kf#D))X{?U(o`1K!i?jtUK%y{)1Y|_2j>UKKIE0@oG$fK7&wp^;r z|J6N*XRzMfW_7bMJ^SE;$3J=K3pv=yJ)yn(m~I%%A%fW5`44^Ubr0{i``JxLeR}qT z&Q5NA(9TUqzl8Or_Vu;3xHnje+uG%D?ccsneCPJw@7_l4yLNVyv6XSYz1D4R#GP_8 z?xN!^=iJu$cX{QlaleZ-Dj^YuXQ`|kvnM< z-@adoJK2Lxw#(c}KfnD^5$oLM8k^7L#YN__cn z*gGH4-?^cqH}NlTSYChi(bDpQ-8`~c3i2qsyl>g<=E~~Ia=UqDxcq-{!}51F8Qq7S zjHQ+4)$XeX_t{w^Y0minQ1^gE0t5&UAV7cs0RjXF5Fk)c0qy^S9#~-!AV7cs0RjXF z5FkK+0D&Qato?uX^hZpjKaqZ8`dR6d>4&86JM()p|7qqQ&%7}6aWe}ucbxgvGymqy zm!5gsnM-G0edhS-pFjO=r@!Fzwb;Zz0t5&UAV7cs0Rja6>{`cnf=T~1W#FO*6T#7fEVO6BpD%9CSjWuG(hQI)CDwMvWQYgLbo zt+g<|*8I`2wHo7V)sBs=RUcogK0UTpZG5f9@v*h$$JbgoF}7B9e67WkV{47mmrJL{ z)*81jmrw6qt8}RkAB7Gb#&YG%p0!Ggm&)Vzk9-PLvn!99wIj&sw}|bgk0(XH`mfkF7QSS(WlVd)I1Qs*E4U zN@aF*t@3zXtyJ$FTWg=snm?O8|9>p`iHS2CC;#{Hjbj(5emUOwR{((*P91yffseWU z!SdYQ$snBC#Ke6s+l*uW$RmTKI|mDc{~kYa{CF&%sBNCPaCiKB;K8#;CO&3j=p4m#Ices<&fTK8N$7JIH#d;9b8jMbHm<*VHbPsY>nt+nRz z%9ZAG-L(tb>&5fC%kgY?Jj}JxeRku?<;zdL|In48G^o|_0}b(rZ~U4-dwD&6ouS@r z*1HR(#f3(-T5mLZ&BaE0q1WhorTCKUbQ0_D;i}i)YMzz*y_7*FpYP+*ouXbt+ z?Z_^bO63dv|LvUGUL9%i@6C(x??Sn9p<2$)8@0vw->b8<#l<(5UtQX7-@4^)uT?5_ z8;hm+cI--fvDa&NtEKtIVyj+SsCMTo?PjZ9S?DZQyPa;WJHJq`SE~yPy;7&#tSq*A zt$MH1Yxm-%*6TJ$-w&(r(cF6c?WwQ)oDV+O!Fb`#N3+`ShJJ0hf9qJ+=I+1m{=?RW zH;mSX`2+31{M(;@XeXG5;&%c%Q4dyEt~?jZQ4LmCUj5X1ygg7Q*{L_fM`Uo;z1+RJ zys~^@`%~LjmM=6f#}i%Km1yT-@z!FsQg7GGrEarX>eQMGi{(mnVR5lJKVKhp`eMz!8rY%kR37rLc#yU}fTo8_#!y!cu)*ymDheqo_m>9%?c?Pj}G?se+( z-ReTMSzRob8qHp}S8Xhm+MPzJTZ;XwlpFP0x6!Dy=9^LB>QQm3jczYC?{+)YUOoQ1 z_x%q1h0^>%j=~`;*Zd2wI+9hcxvX*x&L_3G@_lz7wsOslR<7!SDp&RG&-W`%tGRYz zJ)Yg|9;g~!ZC@L%K!Y2Y-j!~5eM{w9qugu78LHK&wVR98YNOh2G;7_(Zl$r%t5)XYjM1z$Uy@2R z*zZoS(WtlT^>(AvSX}7!dW+RoWuez8cRRh-V!d5yHmj{>r_|~8<`*lqPIa--tyM~k zwOYMhu9m9hN~2ec%wF~hy+(8N{ZJ*U?$thIb*a8%YAUNP>sfWVf9PEFio;fy_0j55 zIZ$<}>^T?3&)38c)eKHU>knmh;-S*wL*?p2YpYkTtX|(Z#Hp$OS@F{p@gp?b*S4W5 zRvxrsI`Ir|JL=fhnQ!zQHT0bS!a}=Rj~cX4Zr0*z7U!h6@^vbma(N+6VC7b$Uh4KL zy|~OQlhxZU3bwP?rADb-nXlKIt;N#9Lbo2*+r?5`X-oCe ze7RjO^(qU^h1Ps^zS}=l#rd_=ZY`9e(k;|m%~qw{s@9`=HG7SABdTX>^!-o;s|=l` z4tjhJSqm#KJTsZq!mC*=e8uec74gCQ4}X7jb+i_i4^#`wBen2KGk#p-p=)caPet8W zf9Ue+mG0H`LA5+g73_b|QdSdJquISSTmc6SzIcd!eRb`^V8RV#6!tS@xp;@#=QS-0MfGg_rvUZ`{yI=#+(X>q>Q ztu4l7vs#YpWw+Cgt7JEBwd$?W_d}Jhyr=RV;IJIB=9S-ZBFSpr^{nPy7@Ys2<{kQ8 z?D}ZUD;=ojm2O<~b}ybcQTqlrsY}l^X>jLOtrRDmdc9Su zms^Y7`uu#OU0JL}edxqpP`MZP_OV#0#Fe(zoNq7Aw@b}-sa|QddYxG8#wqe8xK-Qf z%Zh5(h#R$9y&jj%(tM}VY***Y)n2R9Zp7JfzT1v-bL>H@Rq9q+ooJHuO3_BC#;Lg3 z=#}FX-iwo8H}2`$oj3`0N8b=r4{_*ioI`+iW?GvH1kez&x|M_H^&c>N8t?0E0H&cKsQ?&u%s2^c_6_anxGXxX4uItI?6PP_50k z8w>SHGaBBFO7zo2W4v7MR!Y&jtJW)}W~Eb&vwGB`m!LObu+s~*PANJa78WYef^4=* zwWul0a;F}J#XWy5YFOmN?R|6$l;c7&-;D01Rwug#H5Y27#ZJ_tdZ!atmu|b3-Di)! zAF4*fmzdncaLC$KdSUKlR=f802HaOZ{EhWkZ@}V#Zf_P}ir#=h_xyHU$?XOh+${Gh zaW5MEHH)oUXCeBP;&{x*(tJ1Wm`j~#na|hDy@g7(8-0A0W~I{T)T6cD?vz`#TC}v| z?)4?8L4%#{EjFSSNBh5;o#o1LPtt1k7JA+JYV<>PI`i$=t%Y{nz&E2A7dOw%R(7Y- zYj?WywN|My-)KeU$<9H&I4$+!j%DQiZVf6ezNoH%#TVXoBC9KVy8`aN@9?+6V_g9Y z2dXOzBe%l;e{}_v27^}{)e9R>#>u?X>8?M$v3hO0zU|!nMr)=ST{o>-saJ|BwotCr zJJtDU(bPM&cJ$ap$9AQ@5cO`My%2{zIuGlWIA<-k+KZ)LwNrgb>eXOpqn|x4uJvxI z+bPGbb)0|d&FC#Dm!ng%R&PevKvezcoQSJ&Wnr=1t#sP;`Es1gDvMcvcr0f1s-2y= z8d-1m==-61wXo;r_h5(Ra3`wL!V7E1v&y%(2Vm~L!*^Sb^#C*uRQVbsmG1ye&E4Dn z8w{evFQZ0R!oEEKrNK~i)Vt=jYlF7e-pZGCZMGL%agS76=yYnG%3`$fOVwU2?x{-6 zPPf{PCQqjood7YC5ht&1+=Eri)rERg)#%=tU#ON}l1A6g&ej^WW}_ax@=>v(vNh`q z(Otd}m&Mvbw^Ny4XjdvRyi<>^%T_tMp&FH5dok|)$_ug7Xtzt{IElr{Ejyt_zih8J z`hKY1HTKlI100b(Xv$#e!ThZ*U#!00c-H6q=L26eP;O zfxpT^DTeqO^WEq!=ro$udVL|f<6nYH>tL^Y3(?xB)Z#pw?Mn1ARHHhzqVpl{3!{PG zYbJM;7HS|zSoF|^f8aO? z|F@$JSBW8==#_3~-GOm^D#vZn==-_ZhHJbI~ap;^h1pQFE*Ns<@s_eT0)K1 zLfFUQD9x9eakSB2KG0mG^4_^f2OVEN(5WeZ z{6Cu`J7`BAc>KQ>r=l27T8!B~aZqCpNAx3gviV61F$xrzm zs`aAv6)m*57PYG{{?>PRuVb!3xj7%ryXa-;He#4RMz3PtK_g0up7wSOwY5vFXeKsl z(aYV79)ai)iyPzUFet@ky48+rTRqNe{qF6o3t;s9Pz4*FrF78abI4ja|H3mfSuNb# z`hO|L|H}uOv{a5sOERZJqdF!I z)tWKQB<5gtqJyf_in0F~-&~A(8gm*OwU~FgP|AA6U)&VA;XSU$T&r#js+QYv`fM(C zVv<2r{W#xcU9NGtjBfBoGo~TLMZ4aMj;Ko9b#=;(O7vhf+Viz`wbJS}`m>v|(UmwC zkGvnMeAUAqmP6LO>N`%H$!gx-E`XO}{J(sl`A_B1`A;Lg9J?pF_edAO&=Um*8~=~W z7xUP9^PO&7zM|u4zSCmtwT2U5!!~;}jQX<4!BO1gh<3jMi1-${HP1^D(ox64%@4hH5R;nw?fR zF2}v-SC6?0F(ajyb;if}FuK-9-w)Npy_290c#sZR7b{!s|L@xx|9|>eb?Qfw?;C1F zTD)}xUYNc&JFSd0_+Rw+e&s+Hv`Spi_B2s<&m#wE@HZ~)JjSx!;Lp0Dqld3jiF?|1 zb3VRejZ(CDx(nUK>|Uoo|38Ksy5&Y~F**XG{S)85=m(C@-&P~LFf~dq!41&Renl%j zdK*fMF>$;d?fQlJ7?g>L*>P7hA6?HeP8{F(PBuln5?7;Yw;gkWVqQ>vA;v+Pl^8l+ zjQ)sh_F0^t8Zi%{HTr({yI-m9kv!a&x>9}NV`sCPFw)q63C8y;2fDyi_FiCeo0$iy zAmfewp~s>QI=6ajB@b zVhUS4;*wo#7Gv^bjJ(9$%Ko^248cWjSbPbhwI6NI?%wx9)oAz_6~We{J`H zw9#gNPqw@MbAwm1~_}I`C4x= zM!I7DXfsCo=VRh?w;UZx(PbIqOz{*)v)yTT>e25V-8MH}#|FLb!w+o_(z3cX2%yre zHp`7DI?hP7=*@~T*TqK6Z;RX5R@|Gn;3Fd5|L8ZY$JF|E^Z`WI zXG}6FMWa3*=8b`oTFj@75t3dto~(}_6^WnuiXpn@e65=OVnDCH(2JhO7yk%UX?T~j zDa0{RG)4l;<;58N@5GF#m_1i*#BWK(Z#4C)wN^drz>O~4QnM5jv*JO8#jLYE<_ff8 z)mT>hb$wd*AQ2|0{bZK^^cQ9j^UfnUC+xzr9tyH};bN0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&U$QAhaxj8Zj5FkK+009C72oNAZfB=D_2z+l* z0ucuR0t5&UAV7cs0RjXF5Fn5%;P?J>X=D%}K!5-N0t5&UAV7csfx-yR;R9=R30t5&UAV7cs0RjXF5FkLHFakeam`DUdfB*pk z1PBlyK!5-N0t5);3H(f6hI9f12oNAZfB*pk1PBlyK%g)JKUR;TwaEB0t5&UAV7cs0RjXF5FkLHFakecm`DUdfB*pk1PBlyK!5-N0t5); z3H(A{hI9f12oNAZfB*pk1PBlyK%g)J|E(~Q2!sFu0t5&UAV7cs0RjXF5Xckw#k>sZ z1PBlyK!5-N0t5&UAV7dXVFdnrVImO-0RjXF5FkK+009C72oNBUC-6&o8PW+5AV7cs z0RjXF5FkK+0D-~?{BmI;5eNYS1PBlyK!5-N0t5&UAdn~UKk_o96Cgl<009C72oNAZ zfB*pkg%S9lg^5HU1PBlyK!5-N0t5&UAV7dXp1`l;fwmm!@10RjXF5FkK+009C7 z2oNZYz#kVT5`hpPK!5-N0t5&UAV7cs0Rnjff0CCWod5v>1PBlyK!5-N0t5&UD2%}W zDNG~+AwYlt0RjXF5FkK+009C7@&x{GUWRl61PBlyK!5-N0t5&UAV8of0!dK<5eESR z1PBlyK!5-N0t5&UAdoAN=m5yIkwJg}0RjXF5FkK+009C7iXxCq79|pK5FkK+009C7 z2oNAZfB*pkc>>8)UXFAE1PBlyK!5-N0t5&UAV8of0?Co0L?R9X1PBlyK!5-N0t5&U zAV45bAUT?sBb@*N0t5&UAV7cs0RjXF5Gaa3a;zwkh=TwD0t5&UAV7cs0RjXF5Xciq zrt@;76Cgl<009C72oNAZfB*pkMG;7j7bOyL5FkK+009C72oNAZfB*pkc>>9ayd3ES z2oNAZfB*pk1PBlyK!89|1d@|Qi9{R(2oNAZfB*pk1PBlyK!8A=KyoTCM>+ul1PBly zK!5-N0t5&UAW#&6bAV7cs0RjXF5FkK+009C7@&uAJFGo570t5&UAV7cs0RjXF5Fk(# zf#kNLL?R9X1PBlyK!5-N0t5&UAV45bAh|s+M>+ul1PBlyK!5-N0t5&UAW#&61PBlyK!5-N0t5&UD2hPxzD0>d90UjuAV7cs0RjXF5FkK+K%PMIvb-GW z1PBlyK!5-N0t5&UAV7dXQ3R4dSCmM^L4W`O0t5&UAV7cs0RjXF*05^)e9K!5-N0t5&UAV7cs0Rnjf$pd*g(g_eCK!5-N0t5&UAV7csfuaZ` z?_ZQi#6f@n0RjXF5FkK+009C72;>PQ59Z}aCqRGz0RjXF5FkK+009C7iXxDlFG?ih zAV7cs0RjXF5FkK+009C7@&uB(yd3ES2oNAZfB*pk1PBlyK!89|1d_i{lt{!ufB*pk z1PBlyK!5-N0t5);2_&z~%aKli009C72oNAZfB*pk1PByGAbC|$A`u4x0t5&UAV7cs z0RjXF5Fn5zkX*>ikxqaB0RjXF5FkK+009C72oyyid38}D5eESR1PBlyK!5-N0t5&U zAdn}JJd~Fsod5v>1PBlyK!5-N0t5&UD2hN*DoP~cAV7cs0RjXF5FkK+009C7@&uA{ zUXFAE1PBlyK!5-N0t5&UAV8of0!gJPk%)r;0RjXF5FkK+009C72oT5+ul1PBlyK!5-N0t5&U zAW#&6WT7aLh=TwD0t5&UAV7cs0RjXF5Xciq7V~nX6Cgl<009C72oNAZfB*pkMG;6o zpeT`ug8%^n1PBlyK!5-N0t5&U$P-9jlb0i%009C72oNAZfB*pk1PBl)ia_!gixP=A z2oNAZfB*pk1PBlyK!5;&Jb~l`^KzsUAV7cs0RjXF5FkK+009C;5lH@0Q6dos0RjXF z5FkK+009C72oNBUCy;zlUXFAE1PBlyK!5-N0t5&UAV8of0?7v#B@%HEAV7cs0RjXF z5FkK+009Dd0?EU9InoIbAV7cs0RjXF5FkK+0D+E2oNAZfB*pk1PBlykSCCQSYD2F z0t5&UAV7cs0RjXF5FkLHC<4ic7bOyL5FkK+009C72oNAZfB*pkc>>9!c{$Pv5FkK+ z009C72oNAZfB=D_2qgbcQ6dos0RjXF5FkK+009C72oNBUCy;zZUXFAE1PBlyK!5-N z0t5&UAV8of0?A`Vi9{R(2oNAZfB*pk1PBlyK!8A=K=P4!InoIbAV7cs0RjXF5FkK+ z0D+ zKB_2@h=TwD0t5&UAV7cs0RjXF5Xciq{&HT9bOHnj5FkK+009C72oNAZpeO>#>x&YJ zI0z6RK!5-N0t5&UAV7csfjoiaiM$-?1PBlyK!5-N0t5&UAV7dXQ3R4pMTtZl1PBly zK!5-N0t5&UAV7dXo+ul1PBlyK!5-N0t5&UAW#&6vSN5FkK+009C72oNAZfIyx= z^09e2(g_eCK!5-N0t5&UAV7csfuaZ`f2Amqh=TwD0t5&UAV7cs0RjXF5Xciq{%T&1 zbOHnj5FkK+009C72oNAZpeO>##}y?KaS$LtfB*pk1PBlyK!5-N0(k<-QeKX90t5&U zAV7cs0RjXF5FkLHC<4jH7bOyL5FkK+009C72oNAZfB*pkc>+l@FGo570t5&UAV7cs z0RjXF5Fk(#fuvQGNW?*a009C72oNAZfB*pk1PJ5_B<;K$=>!N6AV7cs0RjXF5FkK+ zKv4vePEjHe2LS>E2oNAZfB*pk1PBlykSCCI^KzsUAV7cs0RjXF5FkK+009C;5lDJP zi9{R(2oNAZfB*pk1PBlyK!8A=Kyo=RM>+ul1PBlyK!5-N0t5&UAW#&6E2oNAZfB*pk1PBlykSCD5B`-%h z0RjXF5FkK+009C72oNAp6oF)|D3OSR009C72oNAZfB*pk1PBnw6G+zca-#TZ!N6AV7cs0RjXF5FkK+Kv4vezgCn;#6f@n0RjXF5FkK+ z009C72;>PQn|V3X2@oJafB*pk1PBlyK!5;&q6j3PT$D(}L4W`O0t5&UAV7cs0RjXF zPQpPiQ@od5v>1PBlyK!5-N0t5&UD2hPx zIYo&?90UjuAV7cs0RjXF5FkK+K%PMIxAJnN6Cgl<009C72oNAZfB*pkMG;6ow>Aj=jBKzK!5-N0t5&UAV7cs0RjYyB9MGRQ6dos0RjXF5FkK+ z009C72oNBUCy;z$UXFAE1PBlyK!5-N0t5&UAV8of0?9jz5{Wnn5FkK+009C72oNAZ zfB=C!f#mPxvSN5FkK+009C72oNAZfIyx=^7r#{q!S=O zfB*pk1PBlyK!5-N0!0x>zO*Qjh=TwD0t5&UAV7cs0RjXF5XciqzAP_CIspO%2oNAZ zfB*pk1PBlyP!xgW%Zn0;I0z6RK!5-N0t5&UAV7csfjoiaALQjoCqRGz0RjXF5FkK+ z009C7iXxEw!=gkY4gv%S5FkK+009C72oNAZAWtCqio6`@1PBlyK!5-N0t5&UAV7dX zQ3R5&EJ`HeAV7cs0RjXF5FkK+009C7@&uBv%FB^XfB*pk1PBlyK!5-N0t5&YMIia= zqC_GN0t5&UAV7cs0RjXF5FkJxPaye6c{$Pv5FkK+009C72oNAZfB=D_2qgcwD3OSR z009C72oNAZfB*pk1PBnw6G*-$FGo570t5&UAV7cs0RjXF5Fk(#f#hq85{Wnn5FkK+ z009C72oNAZfB=C!f#mD*a-vSN5FkK+009C72oNAZfIyx= z^3U^fq!S=OfB*pk1PBlyK!5-N0!0x>zOg8gh=TwD0t5&UAV7cs0RjXF5Xciqz9}z9 zIspO%2oNAZfB*pk1PBlyP!xgWn~M^OI0z6RK!5-N0t5&UAV7csfjoiaTk>+G6Cgl< z009C72oNAZfB*pkMG;88wJ4E@g8%^n1PBlyK!5-N0t5&U$P-BZMP80{0t5&UAV7cs z0RjXF5FkLHC<4j9EJ`HeAV7cs0RjXF5FkK+009C7@&uB1<>g2xK!5-N0t5&UAV7cs z0RjYyB9MGrQ6dos0RjXF5FkK+009C72oNBUCy@NByd3ES2oNAZfB*pk1PBlyK!89| z1d?wrN+jYSK!5-N0t5&UAV7cs0RjZ_1d{K_%aKli009C72oNAZfB*pk1PByGAo+ul1PBlyK!5-N0t5&UAW#&6tNGCvm009C72oNAZfB*pk1d1Y%{F|agA`Sus2oNAZfB*pk z1PBlyKp;;b`L}sF(g_eCK!5-N0t5&UAV7csfuaZ`|E?&Jh=TwD0t5&UAV7cs0RjXF z5Xciq{(WAKbOHnj5FkK+009C72oNAZpeO>#_ZB4*aS$LtfB*pk1PBlyK!5-N0(k<- z_vPhCCqRGz0RjXF5FkK+009C7iXxEwhoVFx4gv%S5FkK+009C72oNAZAWtCqk9j%L z2@oJafB*pk1PBlyK!5;&q6j44UzAA1L4W`O0t5&UAV7cs0RjXFHd zB;p`IfB*pk1PBlyK!5-N0tE5|k{{2@kxqaB0RjXF5FkK+009C72oyyi`H7-LA`Sus z2oNAZfB*pk1PBlyKp;;b`N_N-=>!N6AV7cs0RjXF5FkK+Kv4ve|5}tt#6f@n0RjXF z5FkK+009C72;>PQKb4mwod5v>1PBlyK!5-N0t5&UD2hPx(?y9y90UjuAV7cs0RjXF z5FkK+K%PMIGkH1E2@oJafB*pk1PBlyK!5;&q6j2ETa-w|L4W`O0t5&UAV7cs0RjXF zvSN5FkK+009C72oNAZfIyx=@@siH(g_eCK!5-N0t5&UAV7csfuaZ` zzh0C`#6f@n0RjXF5FkK+009C72;>PQzmb1PBlyK!5-N0t5&UD2hPxn?;F4 z90UjuAV7cs0RjXF5FkK+K%PMITX{Ls2@oJafB*pk1PBlyK!5;&q6j3vU6e?~L4W`O z0t5&UAV7cs0RjXFg8%^n1PBlyK!5-N0t5);3rtSs=gA>JfB*pk1PBlyK!5-N0tAX7 zFnOdHafpHd0RjXF5FkK+009C72oT5@m^_-FCx-w50t5&UAV7cs0RjXF5GaPgu!Rysa22oNAZfB*pk1PBlyK!5;&e1XZ?{5&}X2oNAZfB*pk1PBly zK!89o1San-MjWCbK!5-N0t5&UAV7cs0RjZ_1t!nt=gA>JfB*pk1PBlyK!5-N0tAX7 zF!?^kh(iCjVS9;t&M^ z0t5&UAV7cs0RjXF5Fn5*FnND|o*V)M2oNAZfB*pk1PBlyK%f``ljn*NhbRaTAV7cs z0RjXF5FkK+0D*jg$(QHn$ss_1009C72oNAZfB*pk1d1Ur`R9ufhbRaTAV7cs0RjXF z5FkK+0D*jg$yem($ss_1009F3UpsdKXXjbheYoeo@7XheA|jS$6tFF{(3YLDl{PJb zl46^(h#1pk+J>eHB8k|hzg2|3WB@1qlgRc3*x@vzVG__o|*eeJIVC_ zG=8KnzJIQKRLuO&%$)Ca&Uwx`&xsNsK!5-N0t5&U$RSW3kfTEd0RjXF5FkK+009C7 z2oN9;3zP@On}q-Y0t5&UAV7cs0RjXF5Xd1=J}pOw3IYTO5FkK+009C72oNAZAQmX6 z#G8cx0RjXF5FkK+009C72oT62P)^O!p@IMb0t5&UAV7cs0RjXF5QqiJY4K(uK!5-N z0t5&UAV7cs0RjYa2$Toq=ukm`009C72oNAZfB*pk1PH_e<-zf0AwYlt0RjXF5FkK+ z009C7atM^ub9AU6K!5-N0t5&UAV7cs0RjYKfpSK?SqKmyK!5-N0t5&UAV7csfgA$m zAvro!5FkK+009C72oNAZfB*pku|RofyjchkAV7cs0RjXF5FkK+0D&9=<;)x%DhLoD zK!5-N0t5&UAV7csfmooN6>k;-1PBlyK!5-N0t5&UAV468Ksh@{hYA7&2oNAZfB*pk z1PBlyKp++<4~sVo0RjXF5FkK+009C72oNBUL!dl7M~4am1PBlyK!5-N0t5&UAV44% zD36FY3jqQI2oNAZfB*pk1PBlykVBw6GDn9B0t5&UAV7cs0RjXF5FkJx7ATL3Hwys* z1PBlyK!5-N0t5&UAdo|#JUT~*3IYTO5FkK+009C72oNAZAQmW(i8l)Y0t5&UAV7cs z0RjXF5Fn64pgcB5hYA7&2oNAZfB*pk1PBlyKp++<=fsl*h-Lg#ZBp1PBlyK!5-N0t5&U$RSXkkfTEd z0RjXF5FkK+009C72oN9;3zR3un}q-Y0t5&UAV7cs0RjXF5Xd1=o|L0Q1pxvC2oNAZ zfB*pk1PBly5DS!ZkbPtDPxf&c*m1PBlyK!5-N0t5&Uhy}{i;>|*U009C72oNAZfB*pk1PJ61C>Q1E zP(gqI0RjXF5FkK+009C72*d*A>G5VEK!5-N0t5&UAV7cs0RjYa2$bzPI#duKK!5-N z0t5&UAV7cs0Rpi=xj5b|1PBlyK!5-N0t5&UAV7dX4uSHF933hM5FkK+009C72oNAZ zfB=D5pnQ6~SqKmyK!5-N0t5&UAV7csfgA$mk{lf>2oNAZfB*pk1PBlyK!5;&SfE@Q zZx#Xs2oNAZfB*pk1PBlyKp=-e*^#3|1pxvC2oNAZfB*pk1PBly5DS#c;>|*U009C7 z2oNAZfB*pk1PJ61D9_B%p@IMb0t5&UAV7cs0RjXF5QqiJv*OJ{fB*pk1PBlyK!5-N z0t5);5Gc>i(V>C>0RjXF5FkK+009C72oQ(`%5&n)LVy4P0t5&UAV7cs0RjXFkbSLEnWL4W`O0t5&UAV7cs0RjXF!~*5Yc(V{7K!5-N0t5&UAV7cs0RlM$ z%2hc!R1hFQfB*pk1PBlyK!5-N0C>0RjXF5FkK+ z009C72oQ(`$~Ez3AwYlt0RjXF5FkK+009C7atM_DIXYAjAV7cs0RjXF5FkK+009EA zKsgX^76Jqa5FkK+009C72oNAZAcsJCL5>a;1PBlyK!5-N0t5&UAV7dXEKpt;Zx#Xs z2oNAZfB*pk1PBlyKp=-eIhdnE1pxvC2oNAZfB*pk1PBly5DSz;@n#`FfB*pk1PBly zK!5-N0t9jhl*2hXR1hFQfB*pk1PBlyK!5-N0lpEvCLVy4P0t5&UAV7cs0RjXF#f#g#ZBp1PBly zK!5-N0t5&U$RSW}%F&^M009C72oNAZfB*pk1PBm_1*jBfB*pk1PBlyK!5-N z0t5)e0_6+h%|d_x0RjXF5FkK+009C72;>kbug=k-f&c*m1PBlyK!5-N0t5&Uhy}_Q z#+!uz0RjXF5FkK+009C72oT62P+pUxLj?f>1PBlyK!5-N0t5&UAP@_bFN!w{0RjXF z5FkK+009C72oNBUL!i7iM~4am1PBlyK!5-N0t5&UAV44%C|?|J76Jqa5FkK+009C7 z2oNAZAcsKtk{lf>2oNAZfB*pk1PBlyK!5;&SfG4qyjchkAV7cs0RjXF5FkK+0D&9= z<#jnaR1hFQfB*pk1PBlyK!5-N0kbUzwvr1pxvC2oNAZfB*pk1PBly z5DS#AiZ=@Z0t5&UAV7cs0RjXF5Fn64pu90hhYA7&2oNAZfB*pk1PBlyKp++sQK!5-N0t5&UAV7cs0RjYa2$Z+v z=ukm`009C72oNAZfB*pk1PH_e<*o5%AwYlt0RjXF5FkK+009C7atM@f$kCyK009C7 z2oNAZfB*pk1PBm_1C>0RjXF5FkK+009C72oQ(`%DdvtLVy4P0t5&UAV7cs0RjXF3~=9V!SAAV7cs0RjXF5FkK+ z0D)Mbd~dv22oNAZfB*pk1PBlyK!5;&90KM0a&)L5K!5-N0t5&UAV7cs0RjYKf%5(F zW+6a;009C72oNAZfB*pk1ab(JAIQ<6f&c*m1PBlyK!5-N0t5&Uhy}`f;>|*U009C7 z2oNAZfB*pk1PJ61C_k8^Lj?f>1PBlyK!5-N0t5&UAP@_bABr~%0RjXF5FkK+009C7 z2oNBUL!kU{jt&(B2oNAZfB*pk1PBlyK!89jP<|xdECdJ;AV7cs0RjXF5FkK+Kn{WO zqd7WM5FkK+009C72oNAZfB*pku|WB;c(V{7K!5-N0t5&UAV7cs0RlM$%8%#hP(gqI z0RjXF5FkK+009C72*d*Az42xtK!5-N0t5&UAV7cs0RjYa2$Y}5(V>C>0RjXF5FkK+ z009C72oQ(`%1_3dg#ZBp1PBlyK!5-N0t5&U$RSYPm!m@k0RjXF5FkK+009C72oN9; z3zVOVHwys*1PBlyK!5-N0t5&UAdo|#ygx^W3IYTO5FkK+009C72oNAZAQmV;9d8x_ z1PBlyK!5-N0t5&UAV468K>3**9V!SAAV7cs0RjXF5FkK+0D)Mb{A|2g2oNAZfB*pk z1PBlyK!5;&90KL%a&)L5K!5-N0t5&UAV7cs0RjYKf%1WPvk)LafB*pk1PBlyK!5-N z0yzZA&*$h+L4W`O0t5&UAV7cs0RjXF!~*3P;>|*U009C72oNAZfB*pk1PJ61D8HDa zLj?f>1PBlyK!5-N0t5&UAP@_bUy3&i0RjXF5FkK+009C72oNBUL!kU}jt&(B2oNAZ zfB*pk1PBlyK!89jP<|!eECdJ;AV7cs0RjXF5FkK+Kn{WOt2sJU5FkK+009C72oNAZ zfB*pku|WB?c(V{7K!5-N0t5&UAV7cs0RlM$%CG0>P(gqI0RjXF5FkK+009C72*d*A zH{#7gfB*pk1PBlyK!5-N0t5);5GWta(V>C>0RjXF5FkK+009C72oQ(`%5TP-g#ZBp z1PBlyK!5-N0t5&U$RSWZl%qoh0RjXF5FkK+009C72oN9;3zXlAHwys*1PBlyK!5-N z0t5&UAdo|#{C18G6$A(nAV7cs0RjXF5FkK+KrB#xC*CXs2oNAZfB*pk1PBlyK!89F zf%3aKI#duKK!5-N0t5&UAV7cs0Rpi=`Mr3v5FkK+009C72oNAZfB*pkIRwh@=jc#D zfB*pk1PBlyK!5-N0t5)e0_6|l%|d_x0RjXF5FkK+009C72;>kbf0&~~1pxvC2oNAZ zfB*pk1PBly5DSz)iZ=@Z0t5&UAV7cs0RjXF5Fn64p!{);4iy9l5FkK+009C72oNAZ zfIuuz{v_Tk1PBlyK!5-N0t5&UAV7dX4uSIF933hM5FkK+009C72oNAZfB=D5p!{jP zSqKmyK!5-N0t5&UAV7csfgA$m&vJCAAV7cs0RjXF5FkK+009C7VuAAK@n#`FfB*pk z1PBlyK!5-N0t9jhl)uQ)p@IMb0t5&UAV7cs0RjXF5QqiJU&fn-009C72oNAZfB*pk z1PBnwAyED*M~4am1PBlyK!5-N0t5&UAV44%D1RMq76Jqa5FkK+009C72oNAZAcsKt zn;ab~2oNAZfB*pk1PBlyK!5;&SfKoEyjchkAV7cs0RjXF5FkK+0D&9=C>0RjXF5FkK+ z009C72oQ(`%0I@Ng#ZBp1PBlyK!5-N0t5&U$RSYvDMyD20t5&UAV7cs0RjXF5FkJx z7AXH5Zx#Xs2oNAZfB*pk1PBlyKp=-e`Ij6WDhLoDK!5-N0t5&UAV7csfmopYYrI(q z5FkK+009C72oNAZfB=CU0_ERwbf_RefB*pk1PBlyK!5-N0t8}#^6&9xAwYlt0RjXF z5FkK+009C7atM_F$kCyK009C72oNAZfB*pk1PBm_1C>0RjXF5FkK+009C7 z2oQ(`>P);@2oNAZfB*pk1PBlyK!5;&90GMVM~4am1PBlyK!5-N0t5&UAV44%sB`gV zAwYlt0RjXF5FkK+009C7atPG<933hM5FkK+009C72oNAZfB=D5pf1Flg#ZBp1PBly zK!5-N0t5&U$RSV{b9AU6K!5-N0t5&UAV7cs0RjYKfw~lL76Jqa5FkK+009C72oNAZ zAcsKRlA}Wf0RjXF5FkK+009C72oN9;3)JO!vk)LafB*pk1PBlyK!5-N0yzZgU2=4& zAV7cs0RjXF5FkK+009C7Vu5fLg5s31Uq009C7 z2oNAZfB*pk1Y&{uaq(s$K!5-N0t5&UAV7cs0RjYa2-J_y(V>C>0RjXF5FkK+009C7 z2oQ(`>fPhbLVy4P0t5&UAV7cs0RjXFE^V6$A(n zAV7cs0RjXF5FkK+KrB%27jG5<1PBlyK!5-N0t5&UAV468KwZhvp@IMb0t5&UAV7cs z0RjXF5Qqipr^K6u009C72oNAZfB*pk1PBnwAy7XxM~4am1PBlyK!5-N0t5&UAV44% zsP~UI3jqQI2oNAZfB*pk1PBlykVBw8AV-G^0t5&UAV7cs0RjXF5FkJx7N`%5Hwys* z1PBlyK!5-N0t5&UAdo|#ep-$W6$A(nAV7cs0RjXF5FkK+KrB#Ci8l)Y0t5&UAV7cs z0RjXF5Fn64pq`qeLj?f>1PBlyK!5-N0t5&UAP@`G)8frSfB*pk1PBlyK!5-N0t5); z5U3Bz(V>C>0RjXF5FkK+009C72oQ(`>VxCWLVy4P0t5&UAV7cs0RjXFX|t@R1hFQfB*pk1PBlyK!5-N z0~~3jqQI2oNAZfB*pk1PBlykVBw8AxDP_0t5&UAV7cs0RjXF z5FkJx7N}2*Hwys*1PBlyK!5-N0t5&UAdo|#J}F0s3IYTO5FkK+009C72oNAZAQq_S z#+!uz0RjXF5FkK+009C72oT62P@kNmLj?f>1PBlyK!5-N0t5&UAP@`G^Wx1yfB*pk z1PBlyK!5-N0t5);5UA(p=ukm`009C72oNAZfB*pk1PH_eb!)s?2oNAZfB*pk1PBly zK!5;&90K)%933hM5FkK+009C72oNAZfB=D5pk5en76Jqa5FkK+009C72oNAZAcsJG zN{$W{1PBlyK!5-N0t5&UAV7dXEKs+_n}q-Y0t5&UAV7cs0RjXF5Xd1=pPHjX1pxvC z2oNAZfB*pk1PBly5DV0&#hZly0RjXF5FkK+009C72oT62P%p~Sp@IMb0t5&UAV7cs z0RjXF5Qqip)8oxTfB*pk1PBlyK!5-N0t5);5UAU8bf_RefB*pk1PBlyK!5-N0t8}# zdU3p22oNAZfB*pk1PBlyK!5;&90K(jIXYAjAV7cs0RjXF5FkK+009EAK>hT1vk)La zfB*pk1PBlyK!5-N0yzZgB{@1&5FkK+009C72oNAZfB*pku|T~v-Yf(N5FkK+009C7 z2oNAZfItp`x+6!23IYTO5FkK+009C72oNAZAQq^X#hZly0RjXF5FkK+009C72oT62 zP@kEjLj?f>1PBlyK!5-N0t5&UAP@`GXT_U^009C72oNAZfB*pk1PBnwAyA*4qeBG& z0t5&UAV7cs0RjXF5Fii>)aS&Tg#ZBp1PBlyK!5-N0t5&U$RSWaBS(h{0t5&UAV7cs z0RjXF5FkJx7O2mSHwys*1PBlyK!5-N0t5&UAdo|#erApi6$A(nAV7cs0RjXF5FkK+ zKrB$77jG5<1PBlyK!5-N0t5&UAV468K>e&79V!SAAV7cs0RjXF5FkK+0D)Mb?u<7J z0RjXF5FkK+009C72oNBUL!f?kjt&(B2oNAZfB*pk1PBlyK!89jP)NA6+ zLVy4P0t5&UAV7cs0RjXF|*U009C72oNAZfB*pk1PJ61sE2cO zs31Uq009C72oNAZfB*pk1Y&`DZM<0s5FkK+009C72oNAZfB=CU0`l`x8&$hL4W`O z0t5&UAV7cs0RjXF!~*qY@n#`FfB*pk1PBlyK!5-N0t9jh)X&e+p@IMb0t5&UAV7cs z0RjXF5Qqip%j3;LfB*pk1PBlyK!5-N0t5);5U8)n(V>C>0RjXF5FkK+009C72oQ(` z>MP^TLVy4P0t5&UAV7cs0RjXFg#fJs31Uq009C7 z2oNAZfB*pk1Y&{uW$|VqK!5-N0t5&UAV7cs0RjYa2-Gjn(V>C>0RjXF5FkK+009C7 z2oQ(`>Q}^@g#ZBp1PBlyK!5-N0t5&U$RSW)pQA$s0RjXF5FkK+009C72oN9;3)DBn zn}q-Y0t5&UAV7cs0RjXF5Xd1=zcNRM3IYTO5FkK+009C72oNAZAQq@!6>k;-1PBly zK!5-N0t5&UAV468Kz(D54iy9l5FkK+009C72oNAZfIuuzzdGJ51PBlyK!5-N0t5&U zAV7dX4uSfn933hM5FkK+009C72oNAZfB=D5pngrfSqKmyK!5-N0t5&UAV7csfgA$$ z%{e+$5FkK+009C72oNAZfB*pku|WOWc(V{7K!5-N0t5&UAV7cs0RlM$>euDyP(gqI z0RjXF5FkK+009C72*d*Q>*LKrfB*pk1PBlyK!5-N0t5);5U6j-(V>C>0RjXF5FkK+ z009C72oQ(`>RaQ@LVy4P0t5&UAV7cs0RjXFg+%9V!SAAV7cs0RjXF5FkK+0D)MbeoMSr2oNAZfB*pk z1PBlyK!5;&90K+2IXYAjAV7cs0RjXF5FkK+009EAK>gNuvk)LafB*pk1PBlyK!5-N z0yzZgx8>+iL4W`O0t5&UAV7cs0RjXF!~*r()OW?3g#ZBp1PBlyK!5-N0t5&U$RSYQoufkq0RjXF5FkK+009C7 z2oN9;3)Jt7Hwys*1PBlyK!5-N0t5&UAdo|#epikT6$A(nAV7cs0RjXF5FkK+KrB$d zJKih=2oNAZfB*pk1PBlyK!89Ff%-i;I#duKK!5-N0t5&UAV7cs0Rpi={oZ)95FkK+ z009C72oNAZfB*pkIRxtW<>*jBfB*pk1PBlyK!5-N0t5)e0`>dj%|d_x0RjXF5FkK+ z009C72;>l`KaitC1pxvC2oNAZfB*pk1PBly5DV1z#G8cx0RjXF5FkK+009C72oT62 zP=7E-hYA7&2oNAZfB*pk1PBlyKp+;VKNN2k0t5&UAV7cs0RjXF5FkJxhd}+|933hM z5FkK+009C72oNAZfB=D5p#Dg_SqKmyK!5-N0t5&UAV7csfgA$$M{{(jAV7cs0RjXF z5FkK+009C7VuAW&@n#`FfB*pk1PBlyK!5-N0t9jh)F02$p@IMb0t5&UAV7cs0RjXF z5Qqipd*jVQfB*pk1PBlyK!5-N0t5);5U4+qqeBG&0t5&UAV7cs0RjXF5Fii>)Srwu z3jqQI2oNAZfB*pk1PBlykVBxpFGq(80t5&UAV7cs0RjXF5FkJx7N|cJZx#Xs2oNAZ zfB*pk1PBlyKp=-eeSeM)6$A(nAV7cs0RjXF5FkK+KrB#yI^HY<2oNAZfB*pk1PBly zK!89Ff%-E!I#duKK!5-N0t5&UAV7cs0Rpi={n>c45FkK+009C72oNAZfB*pkIRxs@ z<>*jBfB*pk1PBlyK!5-N0t5)e0`&v&W+6a;009C72oNAZfB*pk1ab(}pU=^uf&c*m z1PBlyK!5-N0t5&Uhz05|#G8cx0RjXF5FkK+009C72oT62P=7H;hYA7&2oNAZfB*pk z1PBlyKp+;VzZ7p40t5&UAV7cs0RjXF5FkJxhd}-1933hM5FkK+009C72oNAZfB=D5 zp#Dm{SqKmyK!5-N0t5&UAV7csfgA$$S95fzAV7cs0RjXF5FkK+009C7VuAW=@n#`F zfB*pk1PBlyK!5-N0t9jh)L+lhp@IMb0t5&UAV7cs0RjXF5QqipZ^WC0009C72oNAZ zfB*pk1PBnwAy7Y)ZdIZ3jqQI2oNAZfB*pk1PBly zkVBw;C`X410t5&UAV7cs0RjXF5FkJx7O1}!Zx#Xs2oNAZfB*pk1PBlyKp=-e{p}nb zDhLoDK!5-N0t5&UAV7csfmopaPP|zN5FkK+009C72oNAZfB=CU0`+%ubf_RefB*pk z1PBlyK!5-N0t8}#`g`$aAwYlt0RjXF5FkK+009C7atPGl&(WcR009C72oNAZfB*pk z1PBm_1?nHfn}q-Y0t5&UAV7cs0RjXF5Xd1=|1d{~3IYTO5FkK+009C72oNAZAQq^9 z6mJ#+1PBlyK!5-N0t5&UAV468K>gz!9V!SAAV7cs0RjXF5FkK+0D)Mb{z<%92oNAZ zfB*pk1PBlyK!5;&90K*jIXYAjAV7cs0RjXF5FkK+009EAK>gErvk)LafB*pk1PBly zK!5-N0yzZgpXKOKL4W`O0t5&UAV7cs0RjXF!~*rt1PBlyK!5-N0t5&UAP@`Gzl=8v0RjXF5FkK+009C72oNBUL!kaujt&(B z2oNAZfB*pk1PBlyK!89jQ2#pKECdJ;AV7cs0RjXF5FkK+Kn{WWH#s^~5FkK+009C7 z2oNAZfB*pku|WOXc(V{7K!5-N0t5&UAV7cs0RlM$>fhz)P(gqI0RjXF5FkK+009C7 z2*d*Q@8iuvfB*pk1PBlyK!5-N0t5);5UBr)PIaO z3jqQI2oNAZfB*pk1PBlykVByUQ;rT51PBlyK!5-N0t5&UAV7dXEKvVB-Yf(N5FkK+ z009C72oNAZfItp``Y$;;R1hFQfB*pk1PBlyK!5-N00t5&UAV7cs0RjXF5Fn63pp_IEA_x#5K!5-N0t5&UAV7csff0dL zM@AC?0t5&UAV7cs0RjXF5Fn63p!t6Qkm7a}L4W`O0t5&UAV7cs0RjZZ1lr8lY9l~^ z009C72oNAZfB*pk1TqM;*$fpL2oNAZfB*pk1PBlyK!5;&F@ZKWw%P~~AV7cs0RjXF z5FkK+0D%kwZ9YSV1_A^K5FkK+009C72oNAZU`(JbjIA~T1PBlyK!5-N0t5&UAV464 zKwHdEp@9Ga0t5&UAV7cs0RjXF5Ev6^OJl2z009C72oNAZfB*pk1PBnwAkemCsL()w z009C72oNAZfB*pk1PF`?wB@nYMt}eT0t5&UAV7cs0RjXFWDsa~$xxwz009C72oNAZ zfB*pk1PBlq6KHoGTWtgg5FkK+009C72oNAZfItR;cDD=_8VC>|K!5-N0t5&UAV7cs zfiZ#habv5E009C72oNAZfB*pk1PBnwAkaQOLxlzc1PBlyK!5-N0t5&UAV6SDpxu3J zwGkjdfB*pk1PBlyK!5-N0vQC_CuFG5K!5-N0t5&UAV7cs0RjXFj0v=RjIA~T1PBly zK!5-N0t5&UAV464K>NfD6&eT-AV7cs0RjXF5FkK+0D&=qcF(cZMt}eT0t5&UAV7cs z0RjXFWDsbdl%YZc0RjXF5FkK+009C72oNAJCeZFRw%P~~AV7cs0RjXF5FkK+0D%kw z?UOT9Xdpm<009C72oNAZfB*pk1jYo~$z!XH009C72oNAZfB*pk1PBnwAkglep+W-z z0t5&UAV7cs0RjXF5Fjun(C#y~+6WLJK!5-N0t5&UAV7csfeZrez8NYs5FkK+009C7 z2oNAZfB*pkV*>4dW2=n-0RjXF5FkK+009C72oT61&{i^3Xdpm<009C72oNAZfB*pk z1jYo~r;M#O0t5&UAV7cs0RjXF5FkJxgFyS#3>6v(5FkK+009C72oNAZfB=Cpfp-6~ z)kc5-0RjXF5FkK+009C72xJgw56DoVfdByl1PBlyK!5-N0t5&U7!zm@99wM!2oNAZ zfB*pk1PBlyK!897f%a(`Dl`xvK!5-N0t5&UAV7cs0Rm$J?Ub?AMt}eT0t5&UAV7cs z0RjXFWDsblW~k6WfB*pk1PBlyK!5-N0t5(*3AEG3RvQ5V1PBlyK!5-N0t5&UAdo?z zJt#wk1_A^K5FkK+009C72oNAZU`(Jrcx<&1AV7cs0RjXF5FkK+009CS1ls8tDl`xv zK!5-N0t5&UAV7cs0Rm$J?ToS2Mt}eT0t5&UAV7cs0RjXFWDsZ%$xxwz009C72oNAZ zfB*pk1PBlq6KD?|TWtgg5FkK+009C72oNAZfItR;c4meO4Fm`fAV7cs0RjXF5FkK+ zz?eWgYizXl0k+6WLJK!5-N0t5&UAV7csfeZre zu^B2f5FkK+009C72oNAZfB*pkV*>4*vDHR^009C72oNAZfB*pk1PEjhXphTKp@9Ga z0t5&UAV7cs0RjXF5Ev6^j~`oY1PBlyK!5-N0t5&UAV7dX27&g33>6v(5FkK+009C7 z2oNAZfB=Cpf%e3))kc5-0RjXF5FkK+009C72xJgwPs&iCfdByl1PBlyK!5-N0t5&U z7!zpcj;%HV1PBlyK!5-N0t5&UAV464KznkA3JnAZ5FkK+009C72oNAZfWVkQJ8x{Y z5gPHu)kc5-0RjXF5FkK+009C72xJgwmt?5WK!5-N0t5&UAV7cs0RjXFj0v<$$5tBw z0t5&UAV7cs0RjXF5Fn62pzX*|p@9Ga0t5&UAV7cs0RjXF5Ev6^myNA90t5&UAV7cs z0RjXF5FkJxgFt&`h6)V?2oNAZfB*pk1PBlyK!CuQKzr8MY9l~^009C72oNAZfB*pk z1TqM;XJ@F;K!5-N0t5&UAV7cs0RjXFj0v>ojIA~T1PBlyK!5-N0t5&UAV464K>Lgg z6&eT-AV7cs0RjXF5FkK+0D&=q_S~`6Mt}eT0t5&UAV7cs0RjXFWDsbdnV~`h0RjXF z5FkK+009C72oNAJCeWTYw%P~~AV7cs0RjXF5FkK+0D%kw?XxmeXdpm<009C72oNAZ zfB*pk1jYo~&au@-fB*pk1PBlyK!5-N0t5(T5NMyBp+W-z0t5&UAV7cs0RjXF5Fjun z&~}ZjHUb0)5FkK+009C72oNAZAcH`=JVS*B0t5&UAV7cs0RjXF5FkKcOrY%^TWtgg z5FkK+009C72oNAZfItR;wkJb{1_A^K5FkK+009C72oNAZU`(K`j;%HV1PBlyK!5-N z0t5&UAV464K)WJCg$4oy2oNAZfB*pk1PBlyKwwOuT{*Ve2oNAZfB*pk1PBlyK!5;& z36v(5FkK+009C72oNAZfB=Cpfwp&SwGkjdfB*pk1PBlyK!5-N0vQC_^D|Uv zAV7cs0RjXF5FkK+009C7#su2cW2=n-0RjXF5FkK+009C72oT61(Dr4h&_I9y0RjXF z5FkK+009C72#g7|YsOX^0RjXF5FkK+009C72oNBUL7?r=P@#bU0RjXF5FkK+009C7 z2oM+(Xa~kt8vz0Y2oNAZfB*pk1PBlykU^lmAVY-)0t5&UAV7cs0RjXF5FkKcOrX7R zY_$;}K!5-N0t5&UAV7cs0RkBW+QAGJ8VC>|K!5-N0t5&UAV7csfiZ!0Xl%6+AV7cs z0RjXF5FkK+009CS1lr*Y6&eT-AV7cs0RjXF5FkK+0D&=qcJ0_|BS3%v0RjXF5FkK+ z009C7G6=NmGE`_FK!5-N0t5&UAV7cs0RjZZ1lsjutBn8w0t5&UAV7cs0RjXF5Xd0V zZpcuffdByl1PBlyK!5-N0t5&U7!znWj;%HV1PBlyK!5-N0t5&UAV464KzmV!3JnAZ z5FkK+009C72oNAZfWVkQ`<$`WMt}eT0t5&UAV7cs0RjXFWDsaC&QPI&009C72oNAZ zfB*pk1PBlq6KF3PTWtgg5FkK+009C72oNAZfItR;_PH4G!P&_fB*pk1PBlyK!5-N0%HR0Wn-(2009C72oNAZfB*pk z1PBnwAkaQPLxlzc1PBlyK!5-N0t5&UAV6SDpuK!-wGkjdfB*pk1PBlyK!5-N0vQC_ zD>77QAV7cs0RjXF5FkK+009C7#su0c$5tBw0t5&UAV7cs0RjXF5Fn62puH+Xg$4oy z2oNAZfB*pk1PBlyKwwOueZkmjBS3%v0RjXF5FkK+009C7G6=L+XQY88VC>|K!5-N0t5&UAV7cs zfiZ#hMPsXt009C72oNAZfB*pk1PBnwAkbc$p+W-z0t5&UAV7cs0RjXF5Fjun(7t$V zwGkjdfB*pk1PBlyK!5-N0vQC_mt?5WK!5-N0t5&UAV7cs0RjXFj0v6v( z5FkK+009C72oNAZfB=Cpf%a8ntBn8w0t5&UAV7cs0RjXF5Xd0V-k7060|5dA2oNAZ zfB*pk1PBlyFecExdTg~3AV7cs0RjXF5FkK+009CS1lpT2RA?YTfB*pk1PBlyK!5-N z0tChc+SiP&HUb0)5FkK+009C72oNAZAcH`AbA}2H1PBlyK!5-N0t5&UAV7e?m_Ym5 zvDHR^009C72oNAZfB*pk1PEjhXkVA1LIVK;1PBlyK!5-N0t5&UATTD-zJ6@A5g3K!5-N0t5&UAV7cs0RjXFj0v>w99wM!2oNAZfB*pk z1PBlyK!897f%aV)Dl`xvK!5-N0t5&UAV7cs0Rm$J?YqZT8vz0Y2oNAZfB*pk1PBly zkU^k*PlgH&1PBlyK!5-N0t5&UAV7e?m_Ym9vDHR^009C72oNAZfB*pk1PEjhXy2Ei zLIVK;1PBlyK!5-N0t5&UATTD-zJF}B5g|K!5-N0t5&U zAV7csfiZ#hLu0Fr009C72oNAZfB*pk1PBnwAkcm|Lxlzc1PBlyK!5-N0t5&UAV6SD zp#8|$Y9l~^009C72oNAZfB*pk1TqM;AI(sqfdByl1PBlyK!5-N0t5&U7!zneHn!Rb z5FkK+009C72oNAZfB=CE0`12$RA?YTfB*pk1PBlyK!5-N0tChc+Iz=V8vz0Y2oNAZ zfB*pk1PBlykU^mRM1~3t1PBlyK!5-N0t5&UAV7e?m_Yl|K!5-N0t5&U zAV7csfiZ#hTVtz@009C72oNAZfB*pk1PBnwAkcn0Lxlzc1PBlyK!5-N0t5&UAV6SD zp#9F+Y9l~^009C72oNAZfB*pk1TqM;-_1~=fdByl1PBlyK!5-N0t5&U7!zo}H@4ac z5FkK+009C72oNAZfB=CE0`2!RRA?YTfB*pk1PBlyK!5-N0tChc+8>OqHUb0)5FkK+ z009C72oNAZAcH{r!weM~2oNAZfB*pk1PBlyK!5;&F@g3+W2=n-0RjXF5FkK+009C7 z2oT61(Ed0>g$4oy2oNAZfB*pk1PBlyKwwOu{mIyBBS3%v0RjXF5FkK+009C7G6=K} zXQAX0pt1Ab$ zl$GhFuiH}YTFT++h36*qioG{%DW5#4SFIl2Qf4Q0@9vc?WucUP)Ab||x|GdYf?mv9hmeMBmz~zUwlr5!PKmDHjPwK(d>3`mDdbO_KQa-hm>vnA^ zcbn8htJB|mmr`!rKfUCn9=>XNwPs4$yL(HSFXh_lc%SJw{my$%>a_=_<9#Rfx?R(< zkDJu%SI*v29x$ml9KLo-x%Z^rxN^mo@=2xapI(pJ=I7?-=I7V`Yx>{)FVnwG|FZT! z*1j}9f73Z{-$Z!kQYT#MgiD=pX&_u02$wqH(m=R05H5AXrB1js5H1abO9SCjCtT`; zOPz3OAY2*E_K4CPPjA>E_K4`t-VgT)Cre5;Zi4D8VHvL!li+5X&_u0 z2$wqH(uoqj?Rdho9<|sB7dzo%CtMr|7YD+{PPjM_E)Il?op7-eE)Il?1L5L8xY!97 zJK`)2p=}z3FkZEd?%bA2XPB_;I=Q`osKsYxL&UM1MfpBghoa=;hop5d-oEr$|2Ew^c zIM)g1I^ox6TiaBd)+>x6Ry;an%2>x6TiaBd)+8wlqH!nuKP zZXlfNgmWiK`1<1s&wR{mC!Fnsvz>5uAef2g2D-I6Dx|cEZ_CI6Dx|cEZ_#aJCc9cEZ_CI6Dx|4urFv@XXnP zaCRV^?S!)@O8B}>gpZ!-gfpFRrW4K#gfj!-OedTf2xkVunNB#<314Y<#aHbQ^41_ZS;mkld zGZ4-UgfpFR=0pi!yNU1-trNCR*g9bw2-`r|I$;|K+d$YlVe5o#AZ!C+8wgt`Y@M)m z!Zr}Lfv^pPtrNC^uyw-L3EM!}I$;|KTPJLtuyw*V5VnD^4TNnVYy)BIgzZELU%iR& z;k6UiPFOo(9SG|{SUX`I2YcEUOk)`74NgtZgafv|SM z+6n7GSUX`I2x}*-ov?PoIuO=@unvTEAglvn?S%D2316{^@T}4aOD8OyundG{AS|7* z41{GMES<1)!ZHw+fv^mOr4yD;SUO=D2+KfN2Ex(_%RpEB0O`_2`8O!(g`O6;bb73bi&C%I2i~hop90#Cj;SR zAe;<@lTJA4gp*D<83-o>;bb73bi&C%IO&9wPB<9|C!KII5KcPbq!Ug$;bb7341|+` za54~12Es`voSYcp!xrmF`_|r^PnMTYTAoZMWiqLgNt;Y&CX?C8WNtE3^cQPtUAzD4Lp!fHd}!y|R}SvF zX6K&OeXEC8`*7YRThHCGb!EpT+b+Ct>m@7UrB}|qV8?Vnf9pkCrx(9?`*6vXCvUxQ z+xEqk$A+&)c!Gc2)b=Zu|cA z>%acRLo5Be*01T#^=~||Z_h*a?m6w8O+Wwkuf|b_O&7oYt8-NCPQ6M8Ua)#_*WtYf z_V3zvf>&$9cidT8CxCve`PS{{-*U~7C(fPx(CHoUKAZ1=Cw9l{mvV=5huhi@9vdI! zo9=KgKkvvB){l6vdCcZJ+|kGG-u=^mLwEQ@k9hsk!yRzj_Di>3vf~bqc*DiEZQpV6 zh9ln5L(QqX59~j@y8rO$D~GPV=9*mxZ#;eF@UANloxXB#_0WNR*RAf^`NC^g*S>o7 z>Ww?E*tPrc@zdVb=~s>(@=n`yi0DVoOY>AH|9Sc9{@qtiZ>_7>{<3@eEOW~3JjZOh;Wr#L zPd$2zO>geuxp)0R9o>NIH`d-gr>{(}?BSjLZrBg*r*8h1J3n@l@APT^yoYj%jBe3~l{Foz;pF8=&d(FS* zcAhsj+&+WK9X*scf5%7U;k@C;p1MhA?a_Ahk@gXJoNxLKo9_f3_-pFJOTrU=;6Hxl zn1}qacgD4!cY+V<4R?qBFpX}YJM)2kT+F6B&51l{H-&6`;BFd^^_sruTmSsOzUHL* zn)1w(-v3c}+w&3ol{e2HIdA>t>&q_P_-bP3+VkJeYhSQu*Vy}}jh8y+X6WyohJ)nA z7py<`-}Z{)n2S!2>f6`vEo;AVW!t6ePg2`2yXc~obGM(r^87;w_V2uI*S@`b)}P$g zE_2%SraJ3H--fMU!_9A?)}AQ$?m6~m-S9BD_>z@v7jD0J`d00>mpAJ_>DDKK^_Meu zc;}y9@oQIC*5A~vhpg_}ebsFp$Nu{1z3QfiA9?cnZE?$kH{TX_^op+E7Nf7^?mYLS zuNgl&Zm-{eJ;YW?BbU&r1`_&+)av*Gpe<|9!* zm2>Q&V8fBw&-OWxs=&;Q47scwzj_^RyIFP^iw>2ba3;{)y{p$>edW&G*B(4LJ!Rfchadm<;bY5ZZrl2- zmE*USb1yyS5k7pZ_@Mq$c6#Z9tNYeJYddtz#roTZQ`g^J@4VvRfos;^eXqUqp1%Km z{W@}E`JQu@$Uoo@49C7^p$H?5AT|u9ND$@9&W=AIe|BF8!o-}D~GoP>(~0m_=BJ0 z-xD17Q%*hhTAjXf>(4v>_E}kZ=D8PLw)N7L^%D{O+tyBp91S{sICXd2ng8jX{>Vi~ zwy$g7bYY;~Kgis0)$Tw$_~3KH54h7j*G{+09(nqD&&}rqJ^gIThO2W2J;B+R4L>00 z+4%Z(!==~mAOBBo*?S+kXzrd5e(?N}7arbq`M%ZTuEKGDz4cIZ$&Sm;y=Y~}xlg`m z>&C~x`n~$HOSf&maP40$mZ*(e>MSnU#M1re8X9^Yy#+v9q#c>$7*PJmZpWPe1pP=d3(!>vJ~0 zWL~}I^3^?i_U^xO<${YYK6l4+&pPw$hd=MwYk%`;N1i%&@;MKjf7wfh``MLy5AVEY z^_l|*k3CFn{PJ=4w2jk=9;j|TVYU0fHP@{F#zTj8T{%5=t)FR~9=A6B(BO`_@gJ0I zy!eJA*R5avZyddD{hk5fwpX0DcU@1v?V7Irj`1Vft=0X*&|}NjzP46Ba*(_1$hP$x z>!!=18>=6+HYVKBjTIc{HvWh^*MIG3ch-@otcTsQ9EJ76*T!pgM`6JMZ{v>$!Zsf9 zHeP)Fkaz2C_))(%oPFfNxqD7uq}_C{^#jlG*Yxz|DTkHY@RdT=-0c>KHV7oON@+_eYY-Hx0;ebC)&{^nGY$3)m_6s zT0HLIcH1u;K8fp>J?7cv_*bV#kL|tcn2T=yr0wWy{oDVL?acq7$?bi}HZ}2y Date: Mon, 14 Sep 2026 00:10:50 +0300 Subject: [PATCH 3/5] test(observability): derive DB goldens from built fixtures Co-Authored-By: brainlayerCodex-3f017180 running unknown --- scripts/build_observability_fixture.py | 38 ++-- scripts/derive_observability_goldens.py | 167 ++++++++++++++++++ .../observability/db/backup-errors-dev.sqlite | Bin 5165056 -> 5173248 bytes .../db/backup-errors-heldout.sqlite | Bin 5165056 -> 5173248 bytes .../observability/db/clock-skew-dev.sqlite | Bin 5165056 -> 5173248 bytes .../db/clock-skew-heldout.sqlite | Bin 5165056 -> 5173248 bytes .../observability/db/healthy-dev.sqlite | Bin 5165056 -> 5173248 bytes .../observability/db/healthy-heldout-3.sqlite | Bin 5165056 -> 5173248 bytes .../db/malformed-log-dev-1.sqlite | Bin 5165056 -> 5173248 bytes .../db/malformed-log-heldout.sqlite | Bin 5165056 -> 5173248 bytes .../db/missing-launchd-dev.sqlite | Bin 5165056 -> 5173248 bytes .../db/missing-launchd-heldout-2.sqlite | Bin 5165056 -> 5173248 bytes .../observability/db/missing-log-dev.sqlite | Bin 5165056 -> 5173248 bytes .../db/missing-log-heldout-2.sqlite | Bin 5165056 -> 5173248 bytes .../db/missing-source-class-dev.sqlite | Bin 5160960 -> 5169152 bytes .../db/missing-source-class-heldout.sqlite | Bin 5160960 -> 5169152 bytes .../observability/db/no-op-dev.sqlite | Bin 5165056 -> 5173248 bytes .../observability/db/no-op-heldout-2.sqlite | Bin 5165056 -> 5173248 bytes tests/fixtures/observability/derivation.sql | 15 ++ ...297f5eab46d82dd7ec6a1fb669b123d2c66cbf.log | 6 +- 20 files changed, 214 insertions(+), 12 deletions(-) create mode 100644 scripts/derive_observability_goldens.py create mode 100644 tests/fixtures/observability/derivation.sql diff --git a/scripts/build_observability_fixture.py b/scripts/build_observability_fixture.py index 9885dd62..be4a97c8 100644 --- a/scripts/build_observability_fixture.py +++ b/scripts/build_observability_fixture.py @@ -16,7 +16,7 @@ SEED, GENERATED_AT = 20260913, datetime(2026, 9, 13, 12, tzinfo=UTC) FIXED_MTIME = int(GENERATED_AT.timestamp()) -HELDOUT_SHA256, MANIFEST = "7c14c1457dd3702b0980e8a755b4aadec59a2a62d99091cd3950d94682296ea9", Path(__file__).resolve().parents[1] / "tests/fixtures/observability/cases.json" # fmt: skip +HELDOUT_SHA256, MANIFEST = "a945fed90d3b943a994e952f7b041b6745991d68bf6e2d16de66ad7aa5475228", Path(__file__).resolve().parents[1] / "tests/fixtures/observability/cases.json" # fmt: skip @dataclass(frozen=True) @@ -27,6 +27,8 @@ class CaseDefinition: @property def split(self) -> str: + if self.case_id == "legacy-no-op-dev": + return "dev" return "heldout" if hashlib.sha256(self.case_id.encode()).digest()[0] < 0x60 else "dev" @property @@ -34,6 +36,10 @@ def db_path(self) -> str: return f"db/{self.case_id}.sqlite" +def _mtime_iso(*, future: bool = False) -> str: + return datetime.fromtimestamp(FIXED_MTIME + (4 * 3600 if future else 0), tz=UTC).isoformat().replace("+00:00", "Z") + + def case_definitions() -> list[CaseDefinition]: document = json.loads(MANIFEST.read_text(encoding="utf-8")) result = [CaseDefinition(case["case_id"], case["failure"], case["profile"]) for case in document["cases"]] @@ -60,8 +66,9 @@ def _rows() -> list[tuple[object, ...]]: # fmt: off rows.append((f"synthetic-{index:02d}", f"Synthetic observability fixture row {index:02d}", "{}", source_file, "brainlayer-fixture", "assistant_text", source, sender, created, - provenance[index % len(provenance)], source_classes[index % len(source_classes)], - ("knowledge", "decision", "operational", "noise")[index % 4], + (None if index in {5, 17} else provenance[index % len(provenance)]), + source_classes[index % len(source_classes)], + ("knowledge", "decision", "operational", "test")[index % 4], "synthetic-00" if index == 21 else None, GENERATED_AT.isoformat().replace("+00:00", "Z") if index == 20 else None)) # fmt: on @@ -97,8 +104,11 @@ def _build_db(path: Path, case: CaseDefinition, pid_root: Path) -> None: def _jsonl_log(profile: str) -> str: - if profile == "no_op": - return json.dumps({"status": "no-op", "message": "no-op, 0 files already covered", "uploaded": False, "verified": True}) + "\n" # fmt: skip + if profile in {"no_op", "legacy_no_op"}: + receipt = {"status": "no-op", "message": "no-op, 0 files already covered", "uploaded": False, "verified": True} + if profile == "no_op": + receipt["attempted_at"] = "2026-09-13T10:00:00Z" + return json.dumps(receipt) + "\n" # fmt: off shapes = [ {"status": "uploaded", "archive": "claude-jsonl-2026-09-10.tar.gz", "uploaded": True, @@ -132,8 +142,8 @@ def _daily_log(profile: str) -> str: def build_fixture_bundle(root: Path, *, seed: int) -> None: if seed != SEED: raise ValueError(f"seed must be {SEED}") - manifest_text = MANIFEST.read_text(encoding="utf-8") - if json.loads(manifest_text)["heldout_goldens_sha256"] != HELDOUT_SHA256: + manifest = json.loads(MANIFEST.read_text(encoding="utf-8")) + if manifest["heldout_goldens_sha256"] != HELDOUT_SHA256: raise ValueError("cases.json held-out digest does not match the sealed digest") root.mkdir(parents=True, exist_ok=True) for generated_dir in ("db", "logs", "launchd", ".writer-pids"): @@ -161,7 +171,13 @@ def build_fixture_bundle(root: Path, *, seed: int) -> None: db_path.with_name(db_path.name + suffix).unlink(missing_ok=True) os.utime(db_path, (FIXED_MTIME, FIXED_MTIME)) shutil.rmtree(root / ".writer-pids", ignore_errors=True) - _write(root / "cases.json", manifest_text) + for case in manifest["cases"]: + future = case["failure"] == "clock_skew" + case["input_mtimes"] = { + path: _mtime_iso(future=future and path.endswith("jsonl-backup.log")) + for path in case["declared_inputs"] + } + (root / "cases.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8") def _build_case(root: Path, case: CaseDefinition) -> None: @@ -174,12 +190,14 @@ def _build_case(root: Path, case: CaseDefinition) -> None: launchd = root / "launchd" / f"{case.case_id}.txt" if case.failure == "missing_launchd": _write(launchd, "") - elif case.profile == "no_op": + elif case.profile in {"no_op", "legacy_no_op"}: _write(launchd, 'Bad request.\nCould not find service "com.brainlayer.jsonl-backup" in domain for user gui: 501\n') # fmt: skip else: _write(launchd, "gui/501/com.brainlayer.jsonl-backup = {\n\tstate = running\n\truns = 6\n\tpid = 4242\n\tlast exit code = 0\n}\n") # fmt: skip if case.profile == "healthy": - _write(root / "launchd" / f"{case.case_id}.disabled/com.brainlayer.jsonl-backup.plist", "synthetic disabled fixture\n") # fmt: skip + disabled_dir = root / "launchd" / f"{case.case_id}.disabled" + _write(disabled_dir / "com.brainlayer.jsonl-backup.plist", "synthetic disabled fixture\n") # fmt: skip + os.utime(disabled_dir, (FIXED_MTIME, FIXED_MTIME)) def main() -> int: diff --git a/scripts/derive_observability_goldens.py b/scripts/derive_observability_goldens.py new file mode 100644 index 00000000..21d193c6 --- /dev/null +++ b/scripts/derive_observability_goldens.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +"""Derive observability DB sections directly from built fixture SQLite files. + +This is deliberately independent from the observability producer. It is a +plain-SQL oracle for reviewing the committed fixture artifacts. +""" + +from __future__ import annotations + +import argparse +import json +import re +import sqlite3 +from datetime import UTC, datetime, timedelta +from pathlib import Path +from typing import Any + +DERIVATION_SQL = Path(__file__).resolve().parents[1] / "tests/fixtures/observability/derivation.sql" + + +def _iso(value: datetime) -> str: + return value.astimezone(UTC).isoformat().replace("+00:00", "Z") + + +def _input(case: dict[str, Any], root: Path) -> dict[str, Any]: + path = case["inputs"]["db"] + db = root / path + with sqlite3.connect(db) as connection: + count = connection.execute("SELECT COUNT(*) FROM chunks").fetchone()[0] + return { + "mtime": case["input_mtimes"][path], + "path": path, + "rows_or_bytes": count, + "sha256_first_64kb": None, + "skipped_lines": 0, + "status": "read", + } + + +def _columns(connection: sqlite3.Connection) -> set[str]: + return {row[1] for row in connection.execute("PRAGMA table_info(chunks)")} + + +def _preview(value: str) -> str: + return re.sub(r"\s+", " ", value).strip()[:80] + + +def _emitter(row: sqlite3.Row) -> tuple[str, str]: + if row["source"]: + return row["source"], "source" + if row["sender"]: + return row["sender"], "sender" + return row["source_file"].rsplit("/", 1)[-1], "source_file" + + +def _db_sections(case: dict[str, Any], root: Path, template: dict[str, Any]) -> dict[str, Any]: + path = root / case["inputs"]["db"] + connection = sqlite3.connect(path) + connection.row_factory = sqlite3.Row + try: + inputs = [_input(case, root)] + if "source_class" not in _columns(connection): + reason = "required column missing: chunks.source_class" + return { + name: {"inputs": inputs, "reason": reason, "state": "unmeasurable"} + for name in ("stores", "emitters", "author_unknown") + } + generated = datetime.fromisoformat(case["generated_at"].replace("Z", "+00:00")) + window_start = generated - timedelta(hours=case["window_hours"]) + rows = connection.execute( + "SELECT id, content, source_file, source, sender, created_at, provenance_class, " + "source_class, content_class, archived_at, superseded_by FROM chunks" + ).fetchall() + window = [row for row in rows if window_start <= datetime.fromisoformat(row["created_at"].replace("Z", "+00:00")) <= generated] + by_class = connection.execute( + "SELECT COALESCE(content_class, 'knowledge') AS content_class, COUNT(*) AS count " + "FROM chunks GROUP BY COALESCE(content_class, 'knowledge') ORDER BY content_class" + ).fetchall() + by_hour = connection.execute( + "SELECT substr(created_at, 1, 13) || ':00:00Z' AS hour, COUNT(*) AS count FROM chunks " + "WHERE created_at >= ? AND created_at <= ? GROUP BY hour ORDER BY hour", + (_iso(window_start), _iso(generated)), + ).fetchall() + by_source_class = connection.execute( + "SELECT source_class, COUNT(*) AS count, SUM(CASE WHEN created_at >= ? AND created_at <= ? THEN 1 ELSE 0 END) AS in_window " + "FROM chunks GROUP BY source_class ORDER BY source_class IS NOT NULL DESC, source_class", + (_iso(window_start), _iso(generated)), + ).fetchall() + by_emitter: dict[tuple[str, str], int] = {} + for row in window: + key = _emitter(row) + by_emitter[key] = by_emitter.get(key, 0) + 1 + latest = [] + for row in sorted(window, key=lambda item: item["created_at"], reverse=True)[:5]: + emitter, _ = _emitter(row) + latest.append({"chunk_id": row["id"], "emitter": emitter, "preview": _preview(row["content"]), "source_class": row["source_class"], "stored_at": row["created_at"]}) + live_count = connection.execute("SELECT COUNT(*) FROM chunks WHERE archived_at IS NULL").fetchone()[0] + unknown_count = connection.execute("SELECT COUNT(*) FROM chunks WHERE provenance_class = 'unknown' AND archived_at IS NULL").fetchone()[0] + never_count = connection.execute("SELECT COUNT(*) FROM chunks WHERE (provenance_class IS NULL OR source_class IS NULL) AND archived_at IS NULL").fetchone()[0] + top_files = connection.execute( + "SELECT source_file, COUNT(*) AS count FROM chunks WHERE archived_at IS NULL AND " + "(provenance_class IS NULL OR source_class IS NULL OR provenance_class = 'unknown') " + "GROUP BY source_file ORDER BY count DESC, source_file LIMIT 2" + ).fetchall() + trend = [] + for offset in range(6, -1, -1): + day = (generated - timedelta(days=offset)).date().isoformat() + trend.append({ + "classified_unknown": connection.execute("SELECT COUNT(*) FROM chunks WHERE provenance_class = 'unknown' AND substr(created_at, 1, 10) = ?", (day,)).fetchone()[0], + "day": day, + "never_classified": connection.execute("SELECT COUNT(*) FROM chunks WHERE (provenance_class IS NULL OR source_class IS NULL) AND substr(created_at, 1, 10) = ?", (day,)).fetchone()[0], + }) + stores = { + "by_content_class": [{"content_class": row["content_class"], "count": row["count"]} for row in by_class], + "in_window": {"by_hour": [{"count": row["count"], "hour": row["hour"]} for row in by_hour], "count": len(window)}, + "inputs": inputs, + "latest": latest, + "reason": "", + "state": "measured", + "total_chunks": len(rows), + } + emitters = { + "by_emitter": [{"count_in_window": count, "derived_from": source, "emitter": emitter} for (emitter, source), count in sorted(by_emitter.items())], + "by_source_class": [{"count": row["count"], "in_window": row["in_window"], "source_class": row["source_class"]} for row in by_source_class], + "derivation_note": "metadata.attributionAgent is absent in the 2026-09-13 census; emitter derives from source, then sender, then source_file, or the section is unmeasurable", + "hidden_from_default_search": connection.execute("SELECT COUNT(*) FROM chunks WHERE source_class IN ('desktop', 'brain-worker')").fetchone()[0], + "inputs": inputs, + "reason": "", + "state": "measured", + } + author_unknown = { + "census_2026_09_13": template["author_unknown"]["census_2026_09_13"], + "classified_unknown": {"count": unknown_count, "definition": "provenance_class = 'unknown', archived_at IS NULL", "share": round(unknown_count / live_count, 6) if live_count else 0.0}, + "inputs": inputs, + "never_classified": {"count": never_count, "definition": "provenance_class IS NULL OR source_class IS NULL, archived_at IS NULL", "share": round(never_count / live_count, 6) if live_count else 0.0}, + "reason": "", + "state": "measured", + "top_source_files": [{"count": row["count"], "source_file": row["source_file"]} for row in top_files], + "trend_7d": trend, + } + return {"stores": stores, "emitters": emitters, "author_unknown": author_unknown} + finally: + connection.close() + + +def derive(root: Path, golden_root: Path) -> None: + manifest = json.loads((root / "cases.json").read_text()) + for case in manifest["cases"]: + path = golden_root / case["golden"] + if not path.exists(): + continue + golden = json.loads(path.read_text()) + golden.update(_db_sections(case, root, golden)) + path.write_text(json.dumps(golden, indent=2) + "\n") + + +def main() -> int: + parser = argparse.ArgumentParser() + parser.add_argument("--fixture-root", type=Path, required=True) + parser.add_argument("--golden-root", type=Path, required=True) + args = parser.parse_args() + derive(args.fixture_root.resolve(), args.golden_root.resolve()) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/fixtures/observability/db/backup-errors-dev.sqlite b/tests/fixtures/observability/db/backup-errors-dev.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/backup-errors-heldout.sqlite b/tests/fixtures/observability/db/backup-errors-heldout.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/clock-skew-dev.sqlite b/tests/fixtures/observability/db/clock-skew-dev.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/clock-skew-heldout.sqlite b/tests/fixtures/observability/db/clock-skew-heldout.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/healthy-dev.sqlite b/tests/fixtures/observability/db/healthy-dev.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/healthy-heldout-3.sqlite b/tests/fixtures/observability/db/healthy-heldout-3.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/malformed-log-dev-1.sqlite b/tests/fixtures/observability/db/malformed-log-dev-1.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/malformed-log-heldout.sqlite b/tests/fixtures/observability/db/malformed-log-heldout.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 zcmeI&dyE}b836G6oimR!Gw00Ny|?YQ^s(F0hYRd-@7>*YYl|!>SdUEt2I?Tbr1GmS#Ya)F6*23J9{q+J_1zh#>r-Ae17BN)sLpiZ!B%e&>GQbh}gV z52F6HH~DsE&pq?qJHLD9%*=Q0wY&F-Yk$8-+|&w3zSedD9C={Fr)~Jgb!U}I-s=xO zWsktFs+ifbH3`n2cTw|#TKi-u@uR0y+Sxq4o}E(GO*^NQH#~TI`3^btG|zQxcO5Hv z$M)Lv$yw8MUER53%J;nC{*A-g8=Ya_4cD}cUef~GZ<%A0Jtg}WyUz~Vw)C0w`n1dZ z!R#{U>c8oG^hG*O_WWqJ*p-Ydd+1txfLFS166QWrR_onH1Q4zpxN7){p?)JgFoUZ% z_77dTYW2Wn1H+q*kRXQ!HyPnWv~lzL;m`LE53Dglc%d$o z07w82zy}BbLI4F20mJ|afCj)$3CPk6gU610#2CijRkCm6SNk>lM|;RVYoE4{+n?Dz z_96Ryd)H`lpWJF|frp#p_t-7)`{x$;wQ&plwA}(fCAUCaw+Kb{Y^&&)W%Mg0`*XX^ zo@aIX>-6jCr_!nB1#`PuW#;Nv@PK(tizOy|<`8sb_q+fWbYnfO*NzP0v` zyYwJFA7{^Wiq7o$gOEZ*>n$(hx@xT3uCdK(T}wjh@RaKixWt{=vO|z&PalHQZSPpu zYVQ)yJ-rkp^;-H8ZXsy>;g?{=EMwP}>|6G*J%~Dw+DGiYcDKFRe#L&tZm?^e(b;x% z?Gd=`b8~$p1$z|#dav1|W>NB1{6Mr`of;hW@AOv7RybI?b=Pch#mMzb@%Xi*VjW4{&#zw8MhY1zB&3j#LPiQ1$z5PL zq>zw8MhXcjWTcRh@Dikf6cSR%NFgDGgcLGTNJw}!(m=v%6o(WNQbrr()6kB~e<@(9UeB#)6iLh=~N zVe$s;6>kUU26 z7|F|#JVx>u$s;5$NBZgsNZpc{K!2xbw)BIpuZkcw!ij0_A5X2E;F#!xMYMKFsX z7C|h6Sp=~NW)Z|9h(!>KU>3nFf-bSEf>i{nXm^b*h(!>~&PyCi6^I3h1&9Th1(*eh z1(*ex1&9TR1(*ex1(*eh1&9TR1#%W(7GM@27GM@279bX279bX279bWN79bX27GM@& z7GM_0S%6re!P5Vp?yfc7UE`hKt8{BOaeIxGtd9TI?e&dfcT;;M-BPlz+vn_K_I~?K zyWI}ii?O=UZCh=U9!+0PpG+S~??`Vj*`J5^ z-N!Z7gGzI;V@>NyQ?ap{BxPIJy4LGg(n3eP3yUkp|M>V9$C6f5*2T@cy-HHtyi2J{ zTx_g|VL8fX--idSDm;f*SV1K$Hum~{IVikbb)l&E#g09mSMiFC-BLD7xAjQdK&5x#g9PM>! z)^$Js*;nztxU>Sn(`H$uc&;*%f7WBsO_RDsY9k8FZ%kfS1*mgV92I-OXx%8*$L+Rb_4PBmQ z**-N5lB{XJnlk$GJ~a!HvL{QR-Jf9F0k!QwwCzCr@PQ=gOP?>9;rMMe9GoK$!}D1A z`vv@OD)yt-gnEZcUoDw0#{X0!!6)Qj;Z=OSXJOjbP`}d*0T=$=B*FGZ<$v_YW&Hs) zbx671m%C|#lUs09$45{5bn5*tnj$#q)Ua=KpFdVl-hiW0Wx}7?Ut2V@$zl!I+9M4dWz?=@>IGW@603 zXvJv5n2j+9<7AAv81pdZV=TaUA4WUIDHx|>oQBbX(TQ<7MirxmQOD@Q=*H;5SctI* zqZeZ_#``grU@XNr1LFf2XJWX0It$}$j1OXb2;&@#b1^=Qu?*upjE`V^6yto1<)bT? zuDEwiTUxrcWdCgUrduXTyA!2ds((+Eb{mrf6Qx}@lQL1-ZA>>!ly)0)aucOpH*q;p z+I6$L)rr#Xx{1>6Q2#_}mnI1&O1pIVI8oaDKbLlwzvt5KEOWyrsS;pt0qNdSy4Mv$ z9!&9oz4b{{Q*VGNy)D6|t4cF8S*VGNw)D6|t4cF8S*VNr_ z3f-)*p_;nk85l!Fb;C0-hHL8XSBGxu+)z#3a82D1yrG)9;hMUknmYahu`!p2ze{wp n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 zcmeHLdu$ZP9p0JUd-!g5=4QrkY;3^h6>RR#cNk+5Owu%@P)I99p??51#!#zZQ`_J; z1Rdl7L24l>kv39F6NRQ#n^%)4T&t8cV>y)K+I-qrXQ0s*utvkXr zNN6HarcaU)t=pnnr){klI9j(etvk4GnvBPA2yN`UeR$hoFQL|4V3OkQKTaw$)FhJ^ zb8ujU&_HQYHZuUi zh50)J>xX&=w|B4a+uS!isxUwO;0g~u_AH80D`ZPI#i?vhw#kAaUx7lg-Wp*p8c7El2)#-Mc?BCnp zvbWgr==;$l(NV0~N7Ps;Y;Y8-jv1Hq&*VdA3>lA)%qM$a>8T0zxulsTL z^;X)-JH{F$Iyzad(tY&|VZ`yu(X%Mqxw4ZkXqpo=2aFv zK_bx^)=x0*uJMk}kgi-zg1Ku>``9S)cK7sI5_cEBfoHICm)%iaHoajA<{WS9q+Wv~ zZ;+L96|Xb+U-%#RulZ~IW&R!hB!84Yh)@4czLjs_tN9Av#Z!DXugi)q^Idj*M43iy zz<+hJpezc?v4S!$C^KEou6>U@_Spxi6$@H%ga4WTj2(1tu^lUpw^nCm4&0izG>^0z zM(8V6yiuE)W>cFQXqXykm>Ou98fcgrXqXykn3`sqGc`DYsey*6frhDphN*#usey*6 zK~rsNaM;*KXpNSPcbJ5xbYMN9(UOGH!2v?2T}3jNxn|;%CsdXuCd>q(swAOwCTySPkggPAD%)C>;iQp~*_dYih#x5L#QBm~aPhilvF! z*MkX`|0^=?EB~ae2vH>4G`fi(U;S2}}e6i|M6EW;&(Yy9tezCMF^SLRm>d>1cm( z;6gJKVwr-#MYlE)^pqAU(Ez17N(xU#@c#XFly1Y6>Pr$#2`{OtG%<5A=2Swp;QoH; zBMK%0F+xRYVvaPzmo;5h;NZ$=6YgJp8ICN5N)y2_p>?H+Ioi09(CWzx?q5x5Kfd2m zB4}z_;i8x}l}e@4S^%h=)+hMulltmlI(=7XKI*;a4rCPyzCNSl-kd{Lv_`vFMWfnl zDtJxp2NnFFc5R9x)E(+oa8}y?DEJ@kQWR~}PC`+x?Y@FB*Opwtl569vBWi7L6)n>i zRMB#66cw%1W=_G(nVU0xC{z$_jdaYd?TezeHW><*K^p-@8}xUrXzoi@_)_)9rzq3k z6CNt}g&-=|i(b*NUdD>n>y@dnGWB9pSYmqlC@deWh@|r0uEN{3^&3;(J5a7zLpw4$ zjL$J5Jw~L*i1ZneJ|og&MEZ9xcMBMfkMn)JM}IJX(ZDi|}X>d0K=| zi%yO-EyANk__PR*7U9t%d|HG@3lgQ=LP7eZX%QYR!lOm_vu024%9$Qf3Tr~K3{tNyC{%!s+Qs_axhA-o7yn#p9U)eeK3d^#`*q7KS+rU<_ zMQkP$&czp|(eFF+R8626Y5Q2Z2@9=Mb#Y~zl(Ncw;AyHdmBrT*La2)3%6KfM%8M!! z9h^%QXofQwyI*2qK*{2U?Tjf=T)Dt;R4kAg|G0^?ZA)G}X3A2mxO-bPs+{7=WF(^O z;>tu>nT!?>88=l#H_Q}p74Ha#RasH@_`*;~g^MfOgFzW88Z*9ts$g-$bReJt#g!?` zQkGX49b3k2?n}?mrH8G?*kS9I#=X`#3YdTe1b|@HIv1k5Qit@O-|zS@`78W5e~v%S zUA~X+;9K}Q{waO~PxD#4hDX`I*m-t_onlAXQ|yp78a>Rt&>!AGs@-)1;VGot-J%aM zcZWXM?misq!;aZNE^Rjk#+_N&#|OgQT`AY#|Kxw;Z}Fe-AM)?=C-@gZL`OveO;K0xc{!TE8V*n+B4l}>g}j|;}rY!SSz>o znow7Eb)EgRd4(CviT7)%cP~t{ue`sUJv`mk8_cmQZ7{q0XW9ij%-L&a**^-iliqwc z23yV7$VtriDLvoniTC&CTb>*@-$#=6+Atj{cR#GPD+(vvIc~z=n-l8VyLzz=H~<4U z5Ca4t0R@x;6+k6W1ylnyKrJu@r~~SOsXznJ2uuT}12cdopc$A6%mQWubAY+PHNZTe z1!x84192b$B!M;{1*CxmKs&Gy=l~W0oxoz?THrch383e+6u2I^0r(hjBk*zHCSVzG aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/missing-launchd-dev.sqlite b/tests/fixtures/observability/db/missing-launchd-dev.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/missing-launchd-heldout-2.sqlite b/tests/fixtures/observability/db/missing-launchd-heldout-2.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/missing-log-dev.sqlite b/tests/fixtures/observability/db/missing-log-dev.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/missing-log-heldout-2.sqlite b/tests/fixtures/observability/db/missing-log-heldout-2.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 zcmeI&dyE}b836G6oimR!Gw00Ny|?YQ^s(F0hYRd-@7>*YYl|!>SdUEt2I?Tbr1GmS#Ya)F6*23J9{q+J_1zh#>r-Ae17BN)sLpiZ!B%e&>GQbh}gV z52F6HH~DsE&pq?qJHLD9%*=Q0wY&F-Yk$8-+|&w3zSedD9C={Fr)~Jgb!U}I-s=xO zWsktFs+ifbH3`n2cTw|#TKi-u@uR0y+Sxq4o}E(GO*^NQH#~TI`3^btG|zQxcO5Hv z$M)Lv$yw8MUER53%J;nC{*A-g8=Ya_4cD}cUef~GZ<%A0Jtg}WyUz~Vw)C0w`n1dZ z!R#{U>c8oG^hG*O_WWqJ*p-Ydd+1txfLFS166QWrR_onH1Q4zpxN7){p?)JgFoUZ% z_77dTYW2Wn1H+q*kRXQ!HyPnWv~lzL;m`LE53Dglc%d$o z07w82zy}BbLI4F20mJ|afCj)$3CPk6gU610#2CijRkCm6SNk>lM|;RVYoE4{+n?Dz z_96Ryd)H`lpWJF|frp#p_t-7)`{x$;wQ&plwA}(fCAUCaw+Kb{Y^&&)W%Mg0`*XX^ zo@aIX>-6jCr_!nB1#`PuW#;Nv@PK(tizOy|<`8sb_q+fWbYnfO*NzP0v` zyYwJFA7{^Wiq7o$gOEZ*>n$(hx@xT3uCdK(T}wjh@RaKixWt{=vO|z&PalHQZSPpu zYVQ)yJ-rkp^;-H8ZXsy>;g?{=EMwP}>|6G*J%~Dw+DGiYcDKFRe#L&tZm?^e(b;x% z?Gd=`b8~$p1$z|#dav1|W>NB1{6Mr`of;hW@AOv7RybI?b=Pch#mMzb@%Xi*VjW4{&#zw8MhY1zB&3j#LPiQ1$z5PL zq>zw8MhXcjWTcRh@Dikf6cSR%NFgDGgcLGTNJw}!(m=v%6o(WNQbrr()6kB~e<@(9UeB#)6iLh=~N zVe$s;6>kUU26 z7|F|#JVx>u$s;5$NBZgsNZpc{K!2xbw)BIpuZkcw!ij0_A5X2E;F#!xMYMKFsX z7C|h6Sp=~NW)Z|9h(!>KU>3nFf-bSEf>i{nXm^b*h(!>~&PyCi6^I3h1&9Th1(*eh z1(*ex1&9TR1(*ex1(*eh1&9TR1#%W(7GM@27GM@279bX279bX279bWN79bX27GM@& z7GM_0S%6re!P5Vp?yfc7UE`hKt8{BOaeIxGtd9TI?e&dfcT;;M-BPlz+vn_K_I~?K zyWI}ii?O=UZCh=U9!+0PpG+S~??`Vj*`J5^ z-N!Z7gGzI;V@>NyQ?ap{BxPIJy4LGg(n3eP3yUkp|M>V9$C6f5*2T@cy-HHtyi2J{ zTx_g|VL8fX--idSDm;f*SV1K$Hum~{IVikbb)l&E#g09mSMiFC-BLD7xAjQdK&5x#g9PM>! z)^$Js*;nztxU>Sn(`H$uc&;*%f7WBsO_RDsY9k8FZ%kfS1*mgV92I-OXx%8*$L+Rb_4PBmQ z**-N5lB{XJnlk$GJ~a!HvL{QR-Jf9F0k!QwwCzCr@PQ=gOP?>9;rMMe9GoK$!}D1A z`vv@OD)yt-gnEZcUoDw0#{X0!!6)Qj;Z=OSXJOjbP`}d*0T=$=B*FGZ<$v_YW&Hs) zbx671m%C|#lUs09$45{5bn5*tnj$#q)Ua=KpFdVl-hiW0Wx}7?Ut2V@$zl!I+9M4dWz?=@>IGW@603 zXvJv5n2j+9<7AAv81pdZV=TaUA4WUIDHx|>oQBbX(TQ<7MirxmQOD@Q=*H;5SctI* zqZeZ_#``grU@XNr1LFf2XJWX0It$}$j1OXb2;&@#b1^=Qu?*upjE`V^6yto1<)bT? zuDEwiTUxrcWdCgUrduXTyA!2ds((+Eb{mrf6Qx}@lQL1-ZA>>!ly)0)aucOpH*q;p z+I6$L)rr#Xx{1>6Q2#_}mnI1&O1pIVI8oaDKbLlwzvt5KEOWyrsS;pt0qNdSy4Mv$ z9!&9oz4b{{Q*VGNy)D6|t4cF8S*VGNw)D6|t4cF8S*VNr_ z3f-)*p_;nk85l!Fb;C0-hHL8XSBGxu+)z#3a82D1yrG)9;hMUknmYahu`!p2ze{wp n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/missing-source-class-dev.sqlite b/tests/fixtures/observability/db/missing-source-class-dev.sqlite index bd9dd0dd07d78f0a951eeac03c3972d080b5df9e..498ad5827e36153f354ca92c2800e932652fa3f0 100644 GIT binary patch delta 10495 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 delta 6122 zcmeHLdu$v>8Nc~b z_5FdwAKZPvZ)ay`W_Nx&`#omt+_N+`_AEWxBrct5-YzbE=g@~_{NnvRk%;~J*_UNC z)tzXHZEgLCT9#Q+Eh6DBw`O7E#Hq&gM2{Xz9U30md!%n<&EX?^diVDaj+{NGpS0X1 zHuqY=y-Z}Hu4==?nVK(De0*@|*n$4N`}_Sj+u}VBo~)fbSu5`Qd@AN1kI1*=FXcnB z%X{5Des=Ta{ciq&{V$B+C+x`h2O|-&-Abp^f?^~x#Jb&L-C?uNMOk;oSg((>?n+Qh zP$pBsC)rBY?Mc=-hxIy_b*IO=OLEg}I)y`g-@rX1M~3?a*(-s0ivQW?L`|M7F@Ld! zhmHw~mM0a5M+Zkf+CMVTCx}WVKewu=#*W8=UwDjnZOU!=bja`hRd}a2qMCl*v%kqx{=$u<#N3I34~mcYVI3M@Hbh1S-d1;F!goPCHJcC`h?2mHU3Wh0~bGp5of(FmL zDz>dOvLPb>A^$9YCx0eikl&NvkYAOL;nTlY9+G?IhvglzM|Q~NvSCtP7H@htR~jp_ zAR4|pT~t;@>r3X)|B(Fn+k&sXw6QwzRF(1P;Bf;)gyEKjU~ zK1{G;TJqOQH!2Vvz@)0m5)d&esOB9cKf49dJ($wM^2CCF5>#EDSn#HB@mT-!_4M4* zf=?9WlqE#R!1$8uOaARHSi}A3)l`@KurzR? z{G3>(C~)D{7J{DgA|;9vag>ypkKp}>?TC(GN{wX+ri7PNTb@{j7;}*z7TiB9y+gr5 zASOtaC)TlM__CJk3LIPowc!4xm*L1#sI(9a3u-7&tkLFug6ifkxPKkdAim#nB51Pg zL`h8B(b191u>ep7%_sQtNn>3smwTXlI_f>~31k%pzCO=!Z^0oOs%IB#D9K*az-zJ} zH1LD$+6*DoJ=|~Ltl0k;_#bvDhML()7?N!F4U9Qkasx}w#+f5(wzq~V*n%3WVxwrN zhRvLTnX?Y$2T-UMY>hbPX8U5uVUuBC8Q2IIYU1zOP~l58_)_`fGvx92goi48A&AO( z(HlzeGB(u6E7M?Q@?tYsV!V6|mJe1$)`V}@;O#p6#!T=IjIVZ3SDwT80wX$LLB$cPRZ(E%emU_^(E=#UXk5SS4iFrouSbijz7W<-aKa0N^PR8a0WB? z%dC$YUD~kI^NcF3T<5wb70u6n+)U1Kv@9L7!!}-N_x5DcxTTfZ%1YyuR%R+Hbh32F zv}G!}VZMl~bXOu_DoVPi*T>@~QCis0aXbE9J3+fU9_KB;KgwUr7v*#EX?a@u z@?m*g9+bP}2jnd>Czr{3ne?uDZ+KJQOWqH?Z+efj&FJ&|zYQjii#mVTP-3B|@(=PM z@I#8uq(FQVo|%9*?28kuOW%KAOpQT}dnj?QePPX30R zwuC#9;64X=yLCw|Z@2o}lg>|ynk{ski`LsrQ_sC$xWUVJoV&w2c}_dL#hWVG;`Pte zIK_LsmsZ7lu)*u(6W&xX(UI8g)@3n;iT;!)S~vH`g^6NcIpuF!>>Mka!1otB+c3|n zIrCgqJWu}zE8;yT?_TWyF5m$YNC67afB~w2YM=(F1?qr$U;(fYXaE|4ML-kK4BP}P z29^LVKr65mSOzQyRsbu3RlsUs4bTRx1=2tU$O7#^2ap5S0iD2lpbOXlbORfKcLDDP vHUT`R&A`pTEx>z#_X6(&ZUwdgw*j{UTY)=(_fOuvdfV6gChe!TU0M4d=prJM diff --git a/tests/fixtures/observability/db/missing-source-class-heldout.sqlite b/tests/fixtures/observability/db/missing-source-class-heldout.sqlite index bd9dd0dd07d78f0a951eeac03c3972d080b5df9e..498ad5827e36153f354ca92c2800e932652fa3f0 100644 GIT binary patch delta 10495 zcmeI&e{5Z483*wDyzhH{zwde5d)swTSntLLj?!{(e{7wbvZ3OTF~Il>7aaT1#U`+l zu55Iu?SNQKGz<$Kh-jAJ2pS9^Xh|wy6#g&~gcwC-jF_Mh`C$|U^dEiR`#fiD&%z%P z<6n2lclY$Y=RCdr+6|#+1+U*yy#!u=;F?d{;I%^=OC|N{gHPFZ zkyTruUEXB>Kt`J8G-xGwBU!zj@KzW-icg>wEO&I!@+hTU+3^WODOEQ}_>5 z=}=p#R60-A`UZ^fA=oo=-T1X*!$v4DqdWHvkL};FbL6U#@d+a&$g$A_MtBhIo7g-4 z`Qh=AT}B8M=yJIE{$jbhUQkXK%S}#buBR8((|Nsni}h;Bf_h1@-bBLXl11f`yxcv7 za+CG7@q&8sN%dl`7cZ(8=k>l@s8?STEhrbAR4(Fj5to}Jz9_GEq*$*%Tu?7Osb0wS z!bLAH%*)+bEY}w-C>IE|vGDE&TrXHuFUafNUZ_`Fm+4eo47KdDsn{xNgW31-M^PKd z{)sPPJfktBmHE$)I4XtV|JL8`X#r= zJfX#UlRa}Bda`?-0}Hyboc7gE><`Bvg@~3rp2y{| zv26S2H>>xr4`_v_+zP%c+?#Da4r%uEaX8lw&97P;TCd#G8$i-p8(zRI1TFvg1=zaG z*xe=jrhVBSL!QU&!}eZ##NKMZV!vRovAZ48`F3{qU*XOxS9)j)_AUHhy<*=oYm+zQ z2co@UxBs$tRPB^qaIADkhJX3BlQ*o-ckY`G;x-jktM=jEy-J8ZBU+py#OO{fa8DZ> z)nYkFoG-K}gT!e=i;58YhP5ytcUAG}802tuOp7Y6yi&H`3q~hic zIkKy&1@0YJjp#|yhO6Oxu|$aL@Yzm~I3H=z4iYCJH?v5bsIwp$3gxJ4Bix!YLmuZm-F|ild1c^H!PCY`5?9u}Fn``mO)A32%vI8W}fLbgAiIbo1 z60IN)RQt482@)qqElvYDQQf1(QX%$^>+JsR;!H%!XRLW7oU$572_YqflrU1lNC_b& zjFd1^LP!ZAC5)6XlA8=2QbI@xBPE2CFjB%uZn|_x2_Yqnln_!vNC_h)goJNs0|_To zhm;UfLP!ZCC5)8hNC_h)jFb>kk|X8w@ChV04>yovLW&6~W~7*rVnT`;DQ2XYkYYlL z87XEYH^V!mn2=&diU}!Zq?nQ1F~A|kgcLJUOh_>y#f%ga5*`m4NO+WRNHHPBgcLJU z%t$dK)ni7A87U^DI7iA4F7rrubZH<(gcK1{#7Ge%MT8VFQp89RAw`4~F;c`x?zrWU zB0`E7DI%nZks?NNM>dBP5mLlR5g|o{6fsgnNVpp}knq^&kRn2g2q|Kuh>@ZkDPp9E zks?Bha-{r-Igf;g%mz|ONFgDGj1)3bNJt?gg^UyuQbiM=AtQx^gi}xh2@mKFDI}zjkU~ZZ87a(>LPiQ1DI}yYN6OCw z=8^D3pn((+Qb0%nBL$2U5K_QM0V4&36cAFtNC6|cQw)a`5K_QM0U-s96fhE=gfx%> zLJAluAf$kh0!9i53C~9wNO+dwkOD#q2q|EsfRTb6DPW|4kpe;ra-{s^<^)o0oli(U zA^C*lGm_6pJ|X#xu$zvpskUU262+3n4kC8k^@(9UeB#)3hLh=~NBP9I%G(JflA$f%45t7G9 z9wT`bF_K~=#Yl>f6eB4@ zQjDY+NimWlB*jRIkQ5;)MpA^N7)cS5A|ypfijfo}sT@f$l42x9NGeDA+DS+Ql8_`J zNkWp0BpFE(l4K;wNRp5wAxTD(j3gOJ5|U&jNl22BBqK>il7u7~NfMGIB*{pUkR&5X zLXw0e2}v@NWF(m*Nk)>4Bne42kg`j!5S7VVT@Z^P7C|h6Sp>5PViC+Dm_-naAQr(a zf>{K!2x1X*iY-V*G*l)>#s#zBRbXSP7Q`Z$MG%W17QrlnSOl{OViCk5h($1qU=~5A z*fqf_0#&p-#}>pQh-Kz;j->{~0>lEu0?Y!;0>lE$0?Y!$0>lE$0?Y!;0>lEu0>lD2 z3or{X3lIx13lIws3or{13or{13lIws3or{X3or{X3*;<7EYM&Xeoxoe8n3VM((f;H zY1h2KcFnAw|J4Qd&EiPQ*_HHQ$-ZWPXP>b5+i%%vJ7%xI2E%~uvPt?@`p5Li^x^cb z^yc)SyDs07PF5=3DuB}b^**-bOu6i>!i(+&gMEIbwYXwk>q<*;u$ClcTiCijt)a1C(e?U^wF81dX}R;oX&ivw`H=@ zB3CVPEf)srt%ZSF%i@9hkSz?XO$!5SOkrR^^8j}Md+Pm3VU@nPFi?vY57gF$g@K`< zFtEli3=DdO0T`Hm@-cyt7=`gL{_K;F1?!FsG@8hNw!gQ(w2#>z+M_nJU$xiUtL=7s zncZaTcDZe}kp3-wIej7hEq;<8PqDFlsXUZs)k^}^=Q`6%L)i{)p)Fr%$rp6K5atUi z`}W@O`s~cnFoo9aveB?JJLs0Z>7%0|Cc?zCM@N$#Q|UV;Gm)t9Mt`S@;T_kVdlCNI zj`{5L+sT(gD*{(52*2)+s&)~$T5o{3Darl~nmg@TcUiY)pAve1qu)OJ8=-r{j?wU< zRhPG3U0>Y}XLR61ivI>zcT#J9OJ{4gEzz^Iey7&2$aj0qhFOqcH}PVl1Ww(~2o$DwsA*J7x){1G5x! z3g%QyC+0NF>6m4hE=(1(9J2y*24*E@73NILS(x`>R%6b_bYsrJ^k8~1=VEG@I;IcP zj~T!WV%A{RVump5Fz?5#$85lS0P{i2c^LOMZNi+7`4HyAn2%sCzTZaZh|_jXm&(j6uHcl$_su-Pqbc1!uZuGuYZ^xd1?Qg?Hr*)46{!D)6&8@IWd z-BNciu-PqjH%x2IZt0$8w{&c{*)65Md$U_g-$-b7OaIT^(u?17w{)4g@e_2VZ}0)q zM@s1O>Ow5hM_*S;hP$U+tlu>eC}?vp*FSQHnkymLv3oqmotXi)cCc& v#_ciuvY)%rYN$MYMZTO}}pW!~W;hP$U+SI1eroQ{|*4lpn0)pEm delta 6122 zcmeHLdu$v>8Nc~b z_5FdwAKZPvZ)ay`W_Nx&`#omt+_N+`_AEWxBrct5-YzbE=g@~_{NnvRk%;~J*_UNC z)tzXHZEgLCT9#Q+Eh6DBw`O7E#Hq&gM2{Xz9U30md!%n<&EX?^diVDaj+{NGpS0X1 zHuqY=y-Z}Hu4==?nVK(De0*@|*n$4N`}_Sj+u}VBo~)fbSu5`Qd@AN1kI1*=FXcnB z%X{5Des=Ta{ciq&{V$B+C+x`h2O|-&-Abp^f?^~x#Jb&L-C?uNMOk;oSg((>?n+Qh zP$pBsC)rBY?Mc=-hxIy_b*IO=OLEg}I)y`g-@rX1M~3?a*(-s0ivQW?L`|M7F@Ld! zhmHw~mM0a5M+Zkf+CMVTCx}WVKewu=#*W8=UwDjnZOU!=bja`hRd}a2qMCl*v%kqx{=$u<#N3I34~mcYVI3M@Hbh1S-d1;F!goPCHJcC`h?2mHU3Wh0~bGp5of(FmL zDz>dOvLPb>A^$9YCx0eikl&NvkYAOL;nTlY9+G?IhvglzM|Q~NvSCtP7H@htR~jp_ zAR4|pT~t;@>r3X)|B(Fn+k&sXw6QwzRF(1P;Bf;)gyEKjU~ zK1{G;TJqOQH!2Vvz@)0m5)d&esOB9cKf49dJ($wM^2CCF5>#EDSn#HB@mT-!_4M4* zf=?9WlqE#R!1$8uOaARHSi}A3)l`@KurzR? z{G3>(C~)D{7J{DgA|;9vag>ypkKp}>?TC(GN{wX+ri7PNTb@{j7;}*z7TiB9y+gr5 zASOtaC)TlM__CJk3LIPowc!4xm*L1#sI(9a3u-7&tkLFug6ifkxPKkdAim#nB51Pg zL`h8B(b191u>ep7%_sQtNn>3smwTXlI_f>~31k%pzCO=!Z^0oOs%IB#D9K*az-zJ} zH1LD$+6*DoJ=|~Ltl0k;_#bvDhML()7?N!F4U9Qkasx}w#+f5(wzq~V*n%3WVxwrN zhRvLTnX?Y$2T-UMY>hbPX8U5uVUuBC8Q2IIYU1zOP~l58_)_`fGvx92goi48A&AO( z(HlzeGB(u6E7M?Q@?tYsV!V6|mJe1$)`V}@;O#p6#!T=IjIVZ3SDwT80wX$LLB$cPRZ(E%emU_^(E=#UXk5SS4iFrouSbijz7W<-aKa0N^PR8a0WB? z%dC$YUD~kI^NcF3T<5wb70u6n+)U1Kv@9L7!!}-N_x5DcxTTfZ%1YyuR%R+Hbh32F zv}G!}VZMl~bXOu_DoVPi*T>@~QCis0aXbE9J3+fU9_KB;KgwUr7v*#EX?a@u z@?m*g9+bP}2jnd>Czr{3ne?uDZ+KJQOWqH?Z+efj&FJ&|zYQjii#mVTP-3B|@(=PM z@I#8uq(FQVo|%9*?28kuOW%KAOpQT}dnj?QePPX30R zwuC#9;64X=yLCw|Z@2o}lg>|ynk{ski`LsrQ_sC$xWUVJoV&w2c}_dL#hWVG;`Pte zIK_LsmsZ7lu)*u(6W&xX(UI8g)@3n;iT;!)S~vH`g^6NcIpuF!>>Mka!1otB+c3|n zIrCgqJWu}zE8;yT?_TWyF5m$YNC67afB~w2YM=(F1?qr$U;(fYXaE|4ML-kK4BP}P z29^LVKr65mSOzQyRsbu3RlsUs4bTRx1=2tU$O7#^2ap5S0iD2lpbOXlbORfKcLDDP vHUT`R&A`pTEx>z#_X6(&ZUwdgw*j{UTY)=(_fOuvdfV6gChe!TU0M4d=prJM diff --git a/tests/fixtures/observability/db/no-op-dev.sqlite b/tests/fixtures/observability/db/no-op-dev.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/db/no-op-heldout-2.sqlite b/tests/fixtures/observability/db/no-op-heldout-2.sqlite index 19dd7a1ed88aa887611c07a32d9e6092c8a196b9..0550e61053f6f24c68c4c7124dc28b6c995ecc4f 100644 GIT binary patch delta 10702 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 n!iH+V{`v>V}KzhG$?5)znR+rheD%71e(O(W3q% delta 6252 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 aGw=yuIj{owWOnu9l~49$trIIR&i@ZW^iI?O diff --git a/tests/fixtures/observability/derivation.sql b/tests/fixtures/observability/derivation.sql new file mode 100644 index 00000000..ce10c962 --- /dev/null +++ b/tests/fixtures/observability/derivation.sql @@ -0,0 +1,15 @@ +-- Review aid for scripts/derive_observability_goldens.py. +-- Run against a built case DB with: sqlite3 db/.sqlite < derivation.sql +SELECT COALESCE(content_class, 'knowledge') AS content_class, COUNT(*) AS count +FROM chunks GROUP BY COALESCE(content_class, 'knowledge') ORDER BY content_class; +SELECT source_class, COUNT(*) AS count +FROM chunks GROUP BY source_class ORDER BY source_class IS NOT NULL DESC, source_class; +SELECT COUNT(*) AS total_chunks FROM chunks; +SELECT COUNT(*) AS never_classified FROM chunks +WHERE (provenance_class IS NULL OR source_class IS NULL) AND archived_at IS NULL; +SELECT COUNT(*) AS classified_unknown FROM chunks +WHERE provenance_class = 'unknown' AND archived_at IS NULL; +SELECT source_file, COUNT(*) AS count FROM chunks +WHERE archived_at IS NULL + AND (provenance_class IS NULL OR source_class IS NULL OR provenance_class = 'unknown') +GROUP BY source_file ORDER BY count DESC, source_file LIMIT 2; diff --git a/tests/fixtures/observability/expect-red-da297f5eab46d82dd7ec6a1fb669b123d2c66cbf.log b/tests/fixtures/observability/expect-red-da297f5eab46d82dd7ec6a1fb669b123d2c66cbf.log index 98446889..db5aedf0 100644 --- a/tests/fixtures/observability/expect-red-da297f5eab46d82dd7ec6a1fb669b123d2c66cbf.log +++ b/tests/fixtures/observability/expect-red-da297f5eab46d82dd7ec6a1fb669b123d2c66cbf.log @@ -10,6 +10,7 @@ | empty-db-dev | 1 | 0 | 0 | FAIL | | clock-skew-dev | 1 | 0 | 0 | FAIL | | no-op-dev | 1 | 0 | 0 | FAIL | +| legacy-no-op-dev | 1 | 0 | 0 | FAIL | | backup-errors-dev | 1 | 0 | 0 | FAIL | | healthy-heldout-3 | 1 | 0 | 0 | FAIL | | missing-source-class-heldout | 1 | 0 | 0 | FAIL | @@ -21,9 +22,9 @@ | no-op-heldout-2 | 1 | 0 | 0 | FAIL | | backup-errors-heldout | 1 | 0 | 0 | FAIL | -- Cases: 18 +- Cases: 19 - Passed: 0 -- Field mismatches: 18 +- Field mismatches: 19 - MOCK_GREEN: 0 - Traceability failures: 0 @@ -35,6 +36,7 @@ - `empty-db-dev`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface - `clock-skew-dev`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface - `no-op-dev`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface +- `legacy-no-op-dev`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface - `backup-errors-dev`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface - `healthy-heldout-3`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface - `missing-source-class-heldout`: $: producer failed rc=1: /Library/Frameworks/Python.framework/Versions/3.13/bin/python3: No module named brainlayer.observability_surface From 99716a9278da9ca05aa2876c27e5c71d8b0c9830 Mon Sep 17 00:00:00 2001 From: Etan Joseph Heyman Date: Mon, 14 Sep 2026 00:15:08 +0300 Subject: [PATCH 4/5] style(observability): format evaluator regression test Co-Authored-By: brainlayerCodex-3f017180 running unknown --- tests/test_observability_eval.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/tests/test_observability_eval.py b/tests/test_observability_eval.py index 1a7b05f4..591bd98c 100644 --- a/tests/test_observability_eval.py +++ b/tests/test_observability_eval.py @@ -63,13 +63,20 @@ def test_runner_stages_pinned_mtimes_without_mutating_fixture(tmp_path: Path) -> source.write_bytes(b"fixture") os.utime(source, (1, 1)) case = json.loads(Path("tests/fixtures/observability/cases.json").read_text())["cases"][0] - case = {**case, "declared_inputs": ["db/healthy-dev.sqlite"], "input_mtimes": {"db/healthy-dev.sqlite": "2026-09-13T12:00:00Z"}} + case = { + **case, + "declared_inputs": ["db/healthy-dev.sqlite"], + "input_mtimes": {"db/healthy-dev.sqlite": "2026-09-13T12:00:00Z"}, + } staged_root = tmp_path / "staged" evaluator._stage_case_inputs(case, source_root, staged_root) assert source.stat().st_mtime == 1 - assert staged_root.joinpath("db/healthy-dev.sqlite").stat().st_mtime == datetime.fromisoformat("2026-09-13T12:00:00+00:00").timestamp() + assert ( + staged_root.joinpath("db/healthy-dev.sqlite").stat().st_mtime + == datetime.fromisoformat("2026-09-13T12:00:00+00:00").timestamp() + ) def test_runner_fails_closed_when_input_mtime_is_missing(tmp_path: Path) -> None: @@ -77,7 +84,8 @@ def test_runner_fails_closed_when_input_mtime_is_missing(tmp_path: Path) -> None case = {**case, "input_mtimes": {}} result = evaluator._run_case(case, Path("tests/fixtures/observability"), Path.cwd(), None) assert result.field_mismatches == [ - "$: input staging failed: missing input_mtimes for declared inputs: " + ", ".join(sorted(case["declared_inputs"])) + "$: input staging failed: missing input_mtimes for declared inputs: " + + ", ".join(sorted(case["declared_inputs"])) ] @@ -91,9 +99,12 @@ def stub(*args: object, env: dict[str, str], **kwargs: object) -> SimpleNamespac payload = evaluator.load_golden("healthy-dev", fixture) actual = json.loads(json.dumps(payload)) expected_mtime = case["input_mtimes"][case["inputs"]["db"]] - observed = __import__("datetime").datetime.fromtimestamp( - Path(env["BRAINLAYER_DB"]).stat().st_mtime, __import__("datetime").UTC - ).isoformat().replace("+00:00", "Z") + observed = ( + __import__("datetime") + .datetime.fromtimestamp(Path(env["BRAINLAYER_DB"]).stat().st_mtime, __import__("datetime").UTC) + .isoformat() + .replace("+00:00", "Z") + ) if observed != expected_mtime: for section in actual.values(): if isinstance(section, dict): @@ -101,7 +112,9 @@ def stub(*args: object, env: dict[str, str], **kwargs: object) -> SimpleNamespac if isinstance(item, dict) and item.get("path") == case["inputs"]["db"]: item["mtime"] = observed Path(env["BRAINLAYER_OBSERVABILITY_PATH"]).write_text(json.dumps(actual), encoding="utf-8") - Path(env["BRAINLAYER_OBSERVABILITY_TRACE_PATH"]).write_text(json.dumps(case["declared_inputs"]), encoding="utf-8") + Path(env["BRAINLAYER_OBSERVABILITY_TRACE_PATH"]).write_text( + json.dumps(case["declared_inputs"]), encoding="utf-8" + ) return SimpleNamespace(returncode=0, stderr="", stdout="") monkeypatch.setattr(evaluator.subprocess, "run", stub) From 4565f083535074ebc7a1a1e388a2403897fee482 Mon Sep 17 00:00:00 2001 From: Etan Joseph Heyman Date: Mon, 14 Sep 2026 00:30:20 +0300 Subject: [PATCH 5/5] fix(observability): close pair review findings Co-Authored-By: brainlayerCodex-3f017180 running unknown --- scripts/build_observability_fixture.py | 2 +- scripts/derive_observability_goldens.py | 4 ++-- tests/fixtures/observability/derivation.sql | 10 +++++++- tests/test_observability_eval.py | 26 +++++++++++++++++++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/scripts/build_observability_fixture.py b/scripts/build_observability_fixture.py index be4a97c8..bedd88f6 100644 --- a/scripts/build_observability_fixture.py +++ b/scripts/build_observability_fixture.py @@ -177,7 +177,7 @@ def build_fixture_bundle(root: Path, *, seed: int) -> None: path: _mtime_iso(future=future and path.endswith("jsonl-backup.log")) for path in case["declared_inputs"] } - (root / "cases.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8") + _write(root / "cases.json", json.dumps(manifest, indent=2) + "\n") def _build_case(root: Path, case: CaseDefinition) -> None: diff --git a/scripts/derive_observability_goldens.py b/scripts/derive_observability_goldens.py index 21d193c6..f690bffd 100644 --- a/scripts/derive_observability_goldens.py +++ b/scripts/derive_observability_goldens.py @@ -106,9 +106,9 @@ def _db_sections(case: dict[str, Any], root: Path, template: dict[str, Any]) -> for offset in range(6, -1, -1): day = (generated - timedelta(days=offset)).date().isoformat() trend.append({ - "classified_unknown": connection.execute("SELECT COUNT(*) FROM chunks WHERE provenance_class = 'unknown' AND substr(created_at, 1, 10) = ?", (day,)).fetchone()[0], + "classified_unknown": connection.execute("SELECT COUNT(*) FROM chunks WHERE provenance_class = 'unknown' AND archived_at IS NULL AND substr(created_at, 1, 10) = ?", (day,)).fetchone()[0], "day": day, - "never_classified": connection.execute("SELECT COUNT(*) FROM chunks WHERE (provenance_class IS NULL OR source_class IS NULL) AND substr(created_at, 1, 10) = ?", (day,)).fetchone()[0], + "never_classified": connection.execute("SELECT COUNT(*) FROM chunks WHERE (provenance_class IS NULL OR source_class IS NULL) AND archived_at IS NULL AND substr(created_at, 1, 10) = ?", (day,)).fetchone()[0], }) stores = { "by_content_class": [{"content_class": row["content_class"], "count": row["count"]} for row in by_class], diff --git a/tests/fixtures/observability/derivation.sql b/tests/fixtures/observability/derivation.sql index ce10c962..8843328f 100644 --- a/tests/fixtures/observability/derivation.sql +++ b/tests/fixtures/observability/derivation.sql @@ -1,5 +1,5 @@ -- Review aid for scripts/derive_observability_goldens.py. --- Run against a built case DB with: sqlite3 db/.sqlite < derivation.sql +-- Run against a built case DB with: sqlite3 -readonly db/.sqlite < derivation.sql SELECT COALESCE(content_class, 'knowledge') AS content_class, COUNT(*) AS count FROM chunks GROUP BY COALESCE(content_class, 'knowledge') ORDER BY content_class; SELECT source_class, COUNT(*) AS count @@ -13,3 +13,11 @@ SELECT source_file, COUNT(*) AS count FROM chunks WHERE archived_at IS NULL AND (provenance_class IS NULL OR source_class IS NULL OR provenance_class = 'unknown') GROUP BY source_file ORDER BY count DESC, source_file LIMIT 2; + +-- author_unknown.trend_7d: live-only seven-day counts, grouped by UTC day. +SELECT substr(created_at, 1, 10) AS day, + SUM(CASE WHEN provenance_class = 'unknown' AND archived_at IS NULL THEN 1 ELSE 0 END) AS classified_unknown, + SUM(CASE WHEN (provenance_class IS NULL OR source_class IS NULL) AND archived_at IS NULL THEN 1 ELSE 0 END) AS never_classified +FROM chunks +GROUP BY day +ORDER BY day; diff --git a/tests/test_observability_eval.py b/tests/test_observability_eval.py index 591bd98c..9706787f 100644 --- a/tests/test_observability_eval.py +++ b/tests/test_observability_eval.py @@ -79,6 +79,32 @@ def test_runner_stages_pinned_mtimes_without_mutating_fixture(tmp_path: Path) -> ) +def test_runner_stages_future_clock_skew_log_mtime_without_mutating_fixture(tmp_path: Path) -> None: + source_root = tmp_path / "fixture" + source_root.mkdir() + for relative in ("db/clock-skew-dev.sqlite", "logs/clock-skew-dev/jsonl-backup.log"): + source = source_root / relative + source.parent.mkdir(parents=True, exist_ok=True) + source.write_bytes(b"fixture") + os.utime(source, (1, 1)) + original = evaluator.load_case("clock-skew-dev") + declared = ["db/clock-skew-dev.sqlite", "logs/clock-skew-dev/jsonl-backup.log"] + case = { + **original, + "declared_inputs": declared, + "input_mtimes": {path: original["input_mtimes"][path] for path in declared}, + } + + staged_root = tmp_path / "staged" + evaluator._stage_case_inputs(case, source_root, staged_root) + + assert (source_root / "logs/clock-skew-dev/jsonl-backup.log").stat().st_mtime == 1 + assert ( + staged_root.joinpath("logs/clock-skew-dev/jsonl-backup.log").stat().st_mtime + == datetime.fromisoformat("2026-09-13T16:00:00+00:00").timestamp() + ) + + def test_runner_fails_closed_when_input_mtime_is_missing(tmp_path: Path) -> None: case = evaluator.load_case("healthy-dev") case = {**case, "input_mtimes": {}}