From f10fa8436c31a103ee92efcd5a05f7a0898bf0f6 Mon Sep 17 00:00:00 2001 From: Ervins Strauhmanis <17160191+resoltico@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:30:33 +0300 Subject: [PATCH 1/2] release: bootstrap 0.163.0 payload --- .github/workflows/publish.yml | 185 +- .github/workflows/test.yml | 16 +- .gitignore | 22 +- CHANGELOG.md | 78 +- CONTRIBUTING.md | 185 +- NOTICE | 172 +- PATENTS.md | 228 +- README.md | 236 +- check.sh | 33 + docs/CUSTOM_FUNCTIONS_GUIDE.md | 1012 +------- docs/DATA_INTEGRITY_ARCHITECTURE.md | 330 +-- docs/DOC_00_Index.md | 518 ++-- docs/DOC_01_Core.md | 1817 ++------------ docs/DOC_02_SyntaxExpressions.md | 341 +++ docs/DOC_02_SyntaxTypes.md | 211 ++ docs/DOC_02_Types.md | 1538 ++---------- docs/DOC_03_LocaleParsing.md | 231 ++ docs/DOC_03_Parsing.md | 752 ++---- docs/DOC_04_Introspection.md | 362 +++ docs/DOC_04_Runtime.md | 1755 ++----------- docs/DOC_04_RuntimeUtilities.md | 194 ++ docs/DOC_05_Diagnostics.md | 207 ++ docs/DOC_05_Errors.md | 959 +------ docs/DOC_06_Testing.md | 677 +---- docs/FUZZING_GUIDE.md | 227 +- docs/FUZZING_GUIDE_ATHERIS.md | 518 +--- docs/FUZZING_GUIDE_HYPOFUZZ.md | 692 +----- docs/LOCALE_GUIDE.md | 323 +-- docs/MIGRATION.md | 796 +----- docs/PARSING_GUIDE.md | 860 +------ docs/QUICK_REFERENCE.md | 976 +------- docs/RELEASE_PROTOCOL.md | 299 +++ docs/TERMINOLOGY.md | 458 +--- docs/THREAD_SAFETY.md | 230 +- docs/TYPE_HINTS_GUIDE.md | 821 +----- docs/VALIDATION_GUIDE.md | 337 +-- examples/README.md | 436 +--- examples/README_TYPE_CHECKING.md | 155 +- examples/ftl_transform.py | 4 +- examples/mypy.ini | 7 +- examples/property_based_testing.py | 9 +- examples/quickstart.py | 5 +- examples/stubs/threading.pyi | 84 - examples/thread_safety.py | 52 +- fuzz_atheris/README.md | 1127 +-------- images/FTLLexEngine.png | Bin 2012861 -> 1999997 bytes pyproject.toml | 55 +- scripts/fuzz_atheris.sh | 32 +- scripts/fuzz_atheris_corpus_health.py | 7 +- scripts/fuzz_hypofuzz.sh | 2 +- scripts/lint.sh | 14 +- scripts/publish-github-release-assets.sh | 111 + scripts/run_examples.py | 110 + scripts/test.sh | 11 +- scripts/validate_docs.py | 60 +- scripts/validate_version.py | 47 +- scripts/verify-github-release.sh | 80 + src/ftllexengine/__init__.py | 16 +- src/ftllexengine/__init__.pyi | 8 +- src/ftllexengine/analysis/graph.py | 220 +- src/ftllexengine/core/depth_guard.py | 58 +- .../core/identifier_validation.py | 26 +- src/ftllexengine/core/locale_utils.py | 28 +- src/ftllexengine/core/reference_graph.py | 188 ++ src/ftllexengine/core/semantic_types.py | 30 + src/ftllexengine/core/validators.py | 37 +- src/ftllexengine/core/value_types.py | 22 +- src/ftllexengine/diagnostics/depth.py | 23 + src/ftllexengine/diagnostics/errors.py | 18 +- src/ftllexengine/diagnostics/formatter.py | 14 +- src/ftllexengine/diagnostics/validation.py | 65 +- src/ftllexengine/introspection/iso.py | 264 +- src/ftllexengine/introspection/iso_babel.py | 107 + src/ftllexengine/introspection/iso_types.py | 73 + src/ftllexengine/introspection/message.py | 178 +- src/ftllexengine/localization/__init__.py | 6 +- src/ftllexengine/localization/boot.py | 6 +- src/ftllexengine/localization/loading.py | 24 +- src/ftllexengine/localization/orchestrator.py | 1181 +-------- .../localization/orchestrator_formatting.py | 216 ++ .../localization/orchestrator_loading.py | 294 +++ .../localization/orchestrator_protocols.py | 108 + .../localization/orchestrator_queries.py | 240 ++ src/ftllexengine/localization/types.py | 31 +- src/ftllexengine/parsing/__init__.py | 6 +- src/ftllexengine/parsing/currency.py | 517 +--- src/ftllexengine/parsing/currency_maps.py | 432 ++++ src/ftllexengine/parsing/date_patterns.py | 375 +++ src/ftllexengine/parsing/dates.py | 834 +------ src/ftllexengine/parsing/fiscal.py,cover | 615 ----- src/ftllexengine/parsing/guards.py | 22 +- src/ftllexengine/parsing/numbers.py | 28 +- src/ftllexengine/runtime/async_bundle.py | 10 +- src/ftllexengine/runtime/bundle.py | 835 +------ src/ftllexengine/runtime/bundle.py,cover | 1613 ------------ src/ftllexengine/runtime/bundle_formatting.py | 221 ++ src/ftllexengine/runtime/bundle_protocols.py | 75 + src/ftllexengine/runtime/bundle_queries.py | 88 + .../runtime/bundle_registration.py | 150 ++ src/ftllexengine/runtime/cache.py | 692 +----- src/ftllexengine/runtime/cache_config.py | 18 +- src/ftllexengine/runtime/cache_keys.py | 177 ++ src/ftllexengine/runtime/cache_types.py | 216 ++ src/ftllexengine/runtime/function_bridge.py | 122 +- src/ftllexengine/runtime/function_metadata.py | 14 +- src/ftllexengine/runtime/functions.py | 80 +- src/ftllexengine/runtime/locale_context.py | 560 +---- src/ftllexengine/runtime/locale_formatting.py | 330 +++ src/ftllexengine/runtime/plural_rules.py | 20 +- .../runtime/resolution_context.py | 4 +- src/ftllexengine/runtime/resolver.py | 501 +--- src/ftllexengine/runtime/resolver.py,cover | 954 ------- .../runtime/resolver_protocols.py | 87 + src/ftllexengine/runtime/resolver_runtime.py | 196 ++ .../runtime/resolver_selection.py | 159 ++ src/ftllexengine/runtime/rwlock.py | 28 +- src/ftllexengine/syntax/__init__.py | 16 +- src/ftllexengine/syntax/cursor.py | 170 +- src/ftllexengine/syntax/parser/__init__.py | 8 +- src/ftllexengine/syntax/parser/context.py | 69 + src/ftllexengine/syntax/parser/core.py | 34 +- src/ftllexengine/syntax/parser/entries.py | 229 ++ src/ftllexengine/syntax/parser/expressions.py | 594 +++++ src/ftllexengine/syntax/parser/patterns.py | 358 +++ src/ftllexengine/syntax/parser/rules.py | 2206 +---------------- src/ftllexengine/syntax/parser/rules.py,cover | 1980 --------------- src/ftllexengine/syntax/position.py | 34 +- .../syntax/reference_extraction.py | 84 + src/ftllexengine/syntax/serializer.py | 411 +-- src/ftllexengine/syntax/serializer.py,cover | 784 ------ src/ftllexengine/syntax/serializer_lines.py | 72 + .../syntax/serializer_validation.py | 210 ++ src/ftllexengine/syntax/validation_helpers.py | 6 +- src/ftllexengine/syntax/validator.py | 20 +- src/ftllexengine/syntax/visitor.py | 32 +- src/ftllexengine/validation/resource.py | 371 +-- src/ftllexengine/validation/resource.py,cover | 842 ------- src/ftllexengine/validation/resource_graph.py | 262 ++ tests/helpers/fluentjs_fixtures.py | 145 ++ tests/test_analysis_graph.py | 24 + tests/test_architecture_contract.py | 254 ++ tests/test_coverage_policy.py | 29 + tests/test_documentation_tooling.py | 417 ++++ tests/test_init_module.py | 2 +- tests/test_regression_currency_decimal.py | 2 +- tests/test_runtime_bundle_property.py | 10 +- tests/test_runtime_cache_integrity.py | 2 +- tests/test_runtime_depth_guard.py | 59 +- tests/test_runtime_locale_context_property.py | 5 +- tests/test_runtime_resolver_core.py | 18 +- tests/test_runtime_security_expansion.py | 4 - tests/test_runtime_survivability.py | 2 +- tests/test_rwlock_coverage.py | 4 +- tests/test_syntax_parser_attributes.py | 2 +- tests/test_syntax_parser_entries.py | 28 +- tests/test_syntax_parser_error_recovery.py | 18 +- .../test_syntax_parser_expression_coverage.py | 120 +- tests/test_syntax_parser_functions.py | 5 +- tests/test_syntax_parser_patterns.py | 4 +- tests/test_syntax_parser_systematic.py | 34 +- tests/test_syntax_parser_term_references.py | 2 +- tests/test_syntax_parser_terms.py | 2 +- .../test_syntax_parser_validator_branches.py | 18 +- tests/test_syntax_parser_variant.py | 7 +- tests/test_syntax_spec_conformance.py | 163 +- uv.lock | 224 +- 166 files changed, 12516 insertions(+), 32344 deletions(-) create mode 100755 check.sh create mode 100644 docs/DOC_02_SyntaxExpressions.md create mode 100644 docs/DOC_02_SyntaxTypes.md create mode 100644 docs/DOC_03_LocaleParsing.md create mode 100644 docs/DOC_04_Introspection.md create mode 100644 docs/DOC_04_RuntimeUtilities.md create mode 100644 docs/DOC_05_Diagnostics.md create mode 100644 docs/RELEASE_PROTOCOL.md delete mode 100644 examples/stubs/threading.pyi create mode 100755 scripts/publish-github-release-assets.sh create mode 100644 scripts/run_examples.py create mode 100755 scripts/verify-github-release.sh create mode 100644 src/ftllexengine/core/reference_graph.py create mode 100644 src/ftllexengine/core/semantic_types.py create mode 100644 src/ftllexengine/diagnostics/depth.py create mode 100644 src/ftllexengine/introspection/iso_babel.py create mode 100644 src/ftllexengine/introspection/iso_types.py create mode 100644 src/ftllexengine/localization/orchestrator_formatting.py create mode 100644 src/ftllexengine/localization/orchestrator_loading.py create mode 100644 src/ftllexengine/localization/orchestrator_protocols.py create mode 100644 src/ftllexengine/localization/orchestrator_queries.py create mode 100644 src/ftllexengine/parsing/currency_maps.py create mode 100644 src/ftllexengine/parsing/date_patterns.py delete mode 100644 src/ftllexengine/parsing/fiscal.py,cover delete mode 100644 src/ftllexengine/runtime/bundle.py,cover create mode 100644 src/ftllexengine/runtime/bundle_formatting.py create mode 100644 src/ftllexengine/runtime/bundle_protocols.py create mode 100644 src/ftllexengine/runtime/bundle_queries.py create mode 100644 src/ftllexengine/runtime/bundle_registration.py create mode 100644 src/ftllexengine/runtime/cache_keys.py create mode 100644 src/ftllexengine/runtime/cache_types.py create mode 100644 src/ftllexengine/runtime/locale_formatting.py delete mode 100644 src/ftllexengine/runtime/resolver.py,cover create mode 100644 src/ftllexengine/runtime/resolver_protocols.py create mode 100644 src/ftllexengine/runtime/resolver_runtime.py create mode 100644 src/ftllexengine/runtime/resolver_selection.py create mode 100644 src/ftllexengine/syntax/parser/context.py create mode 100644 src/ftllexengine/syntax/parser/entries.py create mode 100644 src/ftllexengine/syntax/parser/expressions.py create mode 100644 src/ftllexengine/syntax/parser/patterns.py delete mode 100644 src/ftllexengine/syntax/parser/rules.py,cover create mode 100644 src/ftllexengine/syntax/reference_extraction.py delete mode 100644 src/ftllexengine/syntax/serializer.py,cover create mode 100644 src/ftllexengine/syntax/serializer_lines.py create mode 100644 src/ftllexengine/syntax/serializer_validation.py delete mode 100644 src/ftllexengine/validation/resource.py,cover create mode 100644 src/ftllexengine/validation/resource_graph.py create mode 100644 tests/helpers/fluentjs_fixtures.py create mode 100644 tests/test_architecture_contract.py create mode 100644 tests/test_coverage_policy.py create mode 100644 tests/test_documentation_tooling.py diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 367f7606..95e00f68 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,22 +1,40 @@ name: Build and Publish on: - release: - types: [published] + push: + tags: + - 'v*' workflow_dispatch: + inputs: + release_tag: + description: Existing release tag to build, publish, or verify + required: true + type: string + publish_to_testpypi: + description: Also publish the tagged distribution to TestPyPI + required: false + default: false + type: boolean permissions: - contents: read + contents: write + id-token: write + +concurrency: + group: publication-${{ github.workflow }}-${{ inputs.release_tag || github.ref_name }} + cancel-in-progress: true jobs: build: name: Build & Verify Quality (Python ${{ matrix.python-version }}) runs-on: ubuntu-latest + timeout-minutes: 60 # Force all uv commands (sync, run, etc.) to use the same versioned venv as the # scripts. Without this, bare "uv sync" creates the default ".venv" while the # scripts pivot to ".venv-", wasting ~150 MiB on a duplicate environment. env: UV_PROJECT_ENVIRONMENT: .venv-${{ matrix.python-version }} + RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} strategy: fail-fast: false matrix: @@ -25,7 +43,10 @@ jobs: # When Python 3.15 releases (~late 2026), add "3.15" here. python-version: ["3.13", "3.14"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + ref: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} - name: Verify clean working tree run: | @@ -41,13 +62,16 @@ jobs: echo "Working tree is clean" - name: Set up uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: ${{ matrix.python-version }} - name: Make scripts executable - run: chmod +x ./scripts/lint.sh ./scripts/test.sh + run: chmod +x ./scripts/*.sh + + - name: Verify shell syntax + run: bash -n scripts/*.sh - name: Detect package name id: detect @@ -63,12 +87,10 @@ jobs: echo "PACKAGE_NAME=$PACKAGE_NAME" >> $GITHUB_ENV echo "Detected package: $PACKAGE_NAME" - - name: Validate version tag (Release only) - if: github.event_name == 'release' + - name: Validate version tag run: | set -euo pipefail - TAG_VERSION="${GITHUB_REF#refs/tags/}" - TAG_VERSION="${TAG_VERSION#v}" + TAG_VERSION="${RELEASE_TAG#v}" # Validate tag format if ! [[ "$TAG_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then @@ -89,19 +111,17 @@ jobs: - name: Install dependencies run: | - uv sync --all-groups --locked + uv sync --group dev --group release --locked echo "Locked environment synchronized" - name: Validate runtime version matches tag - if: github.event_name == 'release' run: | set -euo pipefail PACKAGE="${{ steps.detect.outputs.name }}" RUNTIME_VERSION=$(uv run python -c "import ${PACKAGE}; print(${PACKAGE}.__version__)") - TAG_VERSION="${GITHUB_REF#refs/tags/}" - TAG_VERSION="${TAG_VERSION#v}" + TAG_VERSION="${RELEASE_TAG#v}" echo "Package: $PACKAGE" echo "Runtime version: $RUNTIME_VERSION" @@ -126,7 +146,7 @@ jobs: - name: Upload coverage reports to Codecov if: matrix.python-version == '3.14' - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5 with: token: ${{ secrets.CODECOV_TOKEN }} files: coverage.xml @@ -177,13 +197,26 @@ jobs: echo "Package integrity verified" + - name: Create release checksum receipt + if: matrix.python-version == '3.14' + run: | + set -euo pipefail + PACKAGE="${{ steps.detect.outputs.name }}" + VERSION="${RELEASE_TAG#v}" + + cd dist + shasum -a 256 \ + "${PACKAGE}-${VERSION}.tar.gz" \ + "${PACKAGE}-${VERSION}-py3-none-any.whl" \ + > "${PACKAGE}-${VERSION}.sha256" + - name: Debug Artifacts if: matrix.python-version == '3.14' run: ls -laR dist/ - name: Store build artifacts if: matrix.python-version == '3.14' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: dist path: dist/ @@ -193,15 +226,16 @@ jobs: test-publish: needs: build runs-on: ubuntu-latest - if: github.event_name == 'workflow_dispatch' + timeout-minutes: 30 + if: github.event_name == 'workflow_dispatch' && inputs.publish_to_testpypi steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: dist path: dist/ - name: Publish to TestPyPI - uses: pypa/gh-action-pypi-publish@release/v1 + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 with: repository-url: https://test.pypi.org/legacy/ password: ${{ secrets.TEST_PYPI_API_TOKEN }} @@ -211,16 +245,22 @@ jobs: name: Verify TestPyPI Publication needs: test-publish runs-on: ubuntu-latest - if: github.event_name == 'workflow_dispatch' + timeout-minutes: 30 + if: github.event_name == 'workflow_dispatch' && inputs.publish_to_testpypi strategy: matrix: # Test installation on both minimum and latest supported Python versions. python-version: ["3.13", "3.14"] + env: + RELEASE_TAG: ${{ inputs.release_tag }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + ref: ${{ inputs.release_tag }} - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: ${{ matrix.python-version }} @@ -236,14 +276,6 @@ jobs: echo "name=$PACKAGE_NAME" >> $GITHUB_OUTPUT echo "Detected package: $PACKAGE_NAME" - - name: Extract version - id: version - run: | - set -euo pipefail - VERSION=$(python -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])") - echo "version=$VERSION" >> $GITHUB_OUTPUT - echo "Version: $VERSION" - - name: Wait for TestPyPI CDN propagation run: | echo "Waiting 60 seconds for TestPyPI CDN to propagate..." @@ -253,7 +285,7 @@ jobs: run: | set -euo pipefail PACKAGE="${{ steps.detect.outputs.name }}" - VERSION="${{ steps.version.outputs.version }}" + VERSION="${RELEASE_TAG#v}" MAX_ATTEMPTS=5 ATTEMPT=1 @@ -282,7 +314,7 @@ jobs: set -euo pipefail PACKAGE="${{ steps.detect.outputs.name }}" INSTALLED_VERSION=$(python -c "import ${PACKAGE}; print(${PACKAGE}.__version__)") - EXPECTED_VERSION="${{ steps.version.outputs.version }}" + EXPECTED_VERSION="${RELEASE_TAG#v}" echo "Installed version: $INSTALLED_VERSION" echo "Expected version: $EXPECTED_VERSION" @@ -299,37 +331,86 @@ jobs: PACKAGE="${{ steps.detect.outputs.name }}" python -c "import ${PACKAGE} as pkg; r = pkg.parse_ftl('greeting = Hello, World!'); s = pkg.serialize_ftl(r); assert 'greeting' in s; print('Smoke test passed: ${PACKAGE} v' + pkg.__version__)" + publish-release-assets: + name: Publish GitHub Release Assets + needs: build + runs-on: ubuntu-latest + timeout-minutes: 20 + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + ref: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} + + - name: Make scripts executable + run: chmod +x ./scripts/*.sh + + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 + with: + name: dist + path: dist/ + + - name: Publish GitHub release assets + run: ./scripts/publish-github-release-assets.sh "$RELEASE_TAG" + + verify-github-release: + name: Verify GitHub Release + needs: publish-release-assets + runs-on: ubuntu-latest + timeout-minutes: 15 + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + ref: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} + + - name: Make scripts executable + run: chmod +x ./scripts/*.sh + + - name: Verify GitHub release handoff + run: ./scripts/verify-github-release.sh "$RELEASE_TAG" + publish: needs: build runs-on: ubuntu-latest - if: github.event_name == 'release' - permissions: - id-token: write + timeout-minutes: 20 steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: dist path: dist/ - name: Publish to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0 with: attestations: true + skip-existing: true verify-publish: name: Verify PyPI Publication needs: publish runs-on: ubuntu-latest - if: github.event_name == 'release' + timeout-minutes: 30 strategy: matrix: # Test installation on both minimum and latest supported Python versions. python-version: ["3.13", "3.14"] + env: + RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + ref: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: ${{ matrix.python-version }} @@ -353,8 +434,7 @@ jobs: - name: Install from PyPI with retry run: | set -euo pipefail - TAG_VERSION="${GITHUB_REF#refs/tags/}" - TAG_VERSION="${TAG_VERSION#v}" + TAG_VERSION="${RELEASE_TAG#v}" PACKAGE="${{ steps.detect.outputs.name }}" MAX_ATTEMPTS=5 @@ -383,8 +463,7 @@ jobs: set -euo pipefail PACKAGE="${{ steps.detect.outputs.name }}" INSTALLED_VERSION=$(python -c "import ${PACKAGE}; print(${PACKAGE}.__version__)") - TAG_VERSION="${GITHUB_REF#refs/tags/}" - TAG_VERSION="${TAG_VERSION#v}" + TAG_VERSION="${RELEASE_TAG#v}" echo "Installed version: $INSTALLED_VERSION" echo "Expected version: $TAG_VERSION" @@ -405,9 +484,14 @@ jobs: name: Verify Python 3.13+ Requirement needs: publish runs-on: ubuntu-latest - if: github.event_name == 'release' + timeout-minutes: 15 + env: + RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + ref: ${{ github.event_name == 'workflow_dispatch' && inputs.release_tag || github.ref_name }} - name: Detect package name id: detect @@ -428,21 +512,22 @@ jobs: # available on GitHub Actions runners by default. # GitHub Actions runners ship with Python 3.12 as their system Python as of 2025. - name: Set up Python 3.12 - uses: actions/setup-python@v5 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5 with: python-version: "3.12" - name: Verify install is blocked on Python 3.12 (below requires-python floor) run: | set -euo pipefail + TAG_VERSION="${RELEASE_TAG#v}" PACKAGE="${{ steps.detect.outputs.name }}" - echo "Attempting to install $PACKAGE on Python 3.12 (should fail)..." + echo "Attempting to install $PACKAGE==$TAG_VERSION on Python 3.12 (should fail)..." - if pip install "$PACKAGE" 2>/dev/null; then + if pip install --no-cache-dir "${PACKAGE}==${TAG_VERSION}" 2>/dev/null; then echo "::error::Installation succeeded on Python 3.12 (should have failed)" echo "::error::Check requires-python in pyproject.toml" exit 1 fi - echo "Installation correctly blocked on Python 3.12" \ No newline at end of file + echo "Installation correctly blocked on Python 3.12" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d78ed842..89e7a05e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,10 +9,15 @@ on: permissions: contents: read +concurrency: + group: test-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: test: name: Test (Python ${{ matrix.python-version }}) runs-on: ubuntu-latest + timeout-minutes: 45 # Force all uv commands (sync, run, etc.) to use the same versioned venv as the # scripts. Without this, bare "uv sync" creates the default ".venv" while the # scripts pivot to ".venv-", wasting ~150 MiB on a duplicate environment. @@ -26,16 +31,19 @@ jobs: # When Python 3.15 releases (~late 2026), add "3.15" here. python-version: ["3.13", "3.14"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Set up uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@d4b2f3b6ecc6e67c4457f6d3e41ec42d3d0fcb86 # v5 with: enable-cache: true python-version: ${{ matrix.python-version }} - name: Make scripts executable - run: chmod +x ./scripts/lint.sh ./scripts/test.sh + run: chmod +x ./scripts/*.sh + + - name: Verify shell syntax + run: bash -n scripts/*.sh - name: Detect package name id: detect @@ -51,7 +59,7 @@ jobs: - name: Install dependencies run: | - uv sync --all-groups --locked + uv sync --group dev --locked echo "Locked environment synchronized" - name: Run Linters diff --git a/.gitignore b/.gitignore index 268628f2..d51d1138 100644 --- a/.gitignore +++ b/.gitignore @@ -95,17 +95,6 @@ pdm.lock .env .env.local -# macOS -.DS_Store - -# Windows -Thumbs.db -ehthumbs.db -Desktop.ini - -# Linux -*~ - # Backup files (all variants) *.bak* *.backup* @@ -113,8 +102,6 @@ Desktop.ini *.orig *_backup *_old -*.swp -*.swo # Build artifacts *.whl @@ -127,6 +114,15 @@ docs/.doctrees/ # Security scans bandit-results.json +# OS and local scratch files +*.swp +*.swo +*~ +.DS_Store +Thumbs.db +ehthumbs.db +Desktop.ini + # Temporary files tmp/ temp/ diff --git a/CHANGELOG.md b/CHANGELOG.md index c1e84b77..90e2091e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ --- -afad: "3.3" -version: "0.162.0" +afad: "3.5" +version: "0.163.0" domain: CHANGELOG -updated: "2026-03-24" +updated: "2026-04-22" route: keywords: [changelog, release notes, version history, breaking changes, migration, fixed, what's new] questions: ["what changed in version X?", "what are the breaking changes?", "what was fixed in the latest release?", "what is the release history?"] @@ -15,6 +15,75 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.163.0] - 2026-04-22 + +### Added + +- **`docs/RELEASE_PROTOCOL.md` maintainer runbook.** Release operations are now documented as a + `gh`-first branch-protected procedure with clean-worktree guidance for dirty primary checkouts, + explicit PR scope checks, merged-`main` verification before tagging, remote tag verification, + workflow-dispatch reruns against an existing tag, GitHub Release inspection, and PyPI + verification. +- **`./check.sh`, `scripts/run_examples.py`, and architecture regression tests.** The repo + now has a single top-level verification entrypoint that runs version/docs validation, shipped + examples, lint, tests, HypoFuzz preflight, and bounded live Atheris smoke checks. The new + architecture tests also lock in layer direction and reject `sys.path`/`PYTHONPATH=src` + import hacks from code and public docs. + +### Changed + +- **Oversized runtime, introspection, and parsing modules are now split by responsibility, with regression guards to keep them that way.** `runtime.bundle`, `runtime.resolver`, `runtime.cache`, `runtime.locale_context`, `introspection.iso`, `localization.orchestrator`, `parsing.currency`, `parsing.dates`, and `syntax.serializer` now delegate focused responsibilities into dedicated internal modules instead of accumulating more behavior in single god-files, and `tests/test_architecture_contract.py` now enforces module line budgets, rejects tracked generated `,cover` artifacts, and blocks version-provenance annotations outside `CHANGELOG.md`. +- **Public examples now model explicit ownership instead of `threading.local()` tricks.** The thread-safety example switched its per-worker customization path to worker-owned bundles, the example mypy config no longer depends on a local threading stub overlay, and the example type-checking guide now documents the simpler strict-check workflow. +- **Fluent parser grammar internals are now split by responsibility instead of living in one monolith.** + `syntax.parser.rules` is now a thin aggregated surface over focused `context`, + `patterns`, `expressions`, and `entries` modules, so pattern continuation logic, + inline/select expression parsing, and entry parsing can evolve independently + without collapsing back into a single 2,100-line implementation bucket. +- **Release automation hardened around pinned actions and explicit handoff checks.** The `Test` + and `Build and Publish` workflows now pin GitHub Actions by commit SHA, add concurrency and job + timeouts, verify shell syntax for all `scripts/*.sh`, and allow targeted `workflow_dispatch` + reruns against an explicit `release_tag` instead of relying on ambient branch state. +- **Coverage policy is now explicitly enforced at 100% line and 100% branch coverage.** The + `pytest-cov` project configuration and `./scripts/test.sh` default gate now both require + `100.0%`, and the contributor/testing docs state the same baseline instead of leaving the + stricter standard implicit. +- **Fuzz-only toolchains are now outside the default gate surface.** `hypofuzz` moved out of the + default `dev` group into an explicit `fuzz` group, and GitHub Actions now sync only the + dependency groups required for routine lint, test, build, and release work. Atheris remains an + opt-in specialist toolchain instead of a release prerequisite. +- **Published GitHub Releases now carry the Python distribution artifacts.** The publish workflow + now attaches `ftllexengine-X.Y.Z.tar.gz`, `ftllexengine-X.Y.Z-py3-none-any.whl`, and + `ftllexengine-X.Y.Z.sha256` to the GitHub Release and verifies that handoff directly with `gh` + before treating the release as complete. +- **Maintainer docs now assume protected `main` and automatic branch cleanup.** `README.md`, + `CONTRIBUTING.md`, and the docs index now point to the release protocol under `docs/` so the + documented workflow matches the repository-side `main` protection and + `delete_branch_on_merge` posture. +- **Semantic localization aliases now live at the core layer and are exported from the root facade.** + `LocaleCode`, `MessageId`, `ResourceId`, and `FTLSource` now resolve from `ftllexengine` and + share a lower-layer implementation home, eliminating upward imports from core/runtime modules + and aligning public docs with stable package facades instead of helper submodules. +- **Reference extraction and dependency-graph helpers were split into lower, shared modules.** + AST-only reference extraction now lives under `ftllexengine.syntax`, dependency-graph + algorithms now live under `ftllexengine.core`, and `validation.resource`/`introspection.message` + were trimmed to orchestration-focused roles instead of carrying unrelated graph logic. +- **Repo tooling now runs against the installed package surface instead of `src` path injection.** + Documentation validation, example execution, lint, tests, and Atheris corpus health all clear + `PYTHONPATH`/`sys.path` overrides so quality gates exercise the same import contract users get. +- **Atheris corpus health now bootstraps its dedicated environment on demand.** The + `./scripts/fuzz_atheris.sh --corpus` path now creates `.venv-atheris` before invoking the + health checker, so fresh machines and `./check.sh` no longer depend on a pre-existing + Atheris venv. +- **Public examples and parser-focused tests now describe current behavior instead of stale cleanup notes or old line coordinates.** + The shipped transformer example no longer embeds inline `TODO` markers, parser coverage tests + now describe behavior rather than historical line numbers from the pre-split parser, and the + docs/tooling regression suite enforces that public docs/examples stay free of `TODO`/`FIXME`/`HACK` + markers. +- **`scripts/validate_version.py` now uses modern typed dataclasses and accurate check descriptions.** + The result model no longer relies on `NamedTuple` plus `type: ignore[type-arg]` workarounds, + configurable footer checks are documented alongside frontmatter checks, and display-name handling + now comes from explicit configuration instead of a misleading `capitalize()` fallback. + ## [0.162.0] - 2026-03-24 ### Breaking Changes @@ -6820,3 +6889,6 @@ Both validators are re-exported from `ftllexengine.introspection` and the root [0.29.0]: https://github.com/resoltico/ftllexengine/releases/tag/v0.29.0 [0.28.1]: https://github.com/resoltico/ftllexengine/releases/tag/v0.28.1 [0.28.0]: https://github.com/resoltico/ftllexengine/releases/tag/v0.28.0 +[Unreleased]: https://github.com/resoltico/FTLLexEngine/compare/v0.163.0...HEAD +[0.163.0]: https://github.com/resoltico/FTLLexEngine/compare/v0.162.0...v0.163.0 +[0.162.0]: https://github.com/resoltico/FTLLexEngine/compare/v0.161.0...v0.162.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 73e04018..da2a5494 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,154 +1,135 @@ --- -afad: "3.1" -version: "0.107.0" -domain: contributing -updated: "2026-03-10" +afad: "3.5" +version: "0.163.0" +domain: CONTRIBUTING +updated: "2026-04-22" route: - keywords: [contributing, development, setup, pull request, code style, workflow, pivot] - questions: ["how to contribute?", "how to set up development?", "how to submit PR?"] + keywords: [contributing, development, uv, lint, test, fuzz, benchmark, release, virtualenv] + questions: ["how do I set up development?", "how do I run lint and tests?", "how do I work on fuzzing?", "how do I prepare a release?"] --- # Contributing to FTLLexEngine -## Setup +**Purpose**: Set up a working development environment and run the same validation paths the repo expects. +**Prerequisites**: `uv`, Bash 5+, Python 3.13 available locally. Python 3.14 is recommended for forward-compat checks. -FTLLexEngine uses `uv` for ultra-fast, deterministic dependency management. We employ a **Pivot** architecture that isolates your IDE environment from the validation silos. +## Overview -```bash -git clone https://github.com/resoltico/FTLLexEngine.git -cd ftllexengine +This repository uses `uv` for dependency management and self-isolating shell scripts for the main quality gates. The root `.venv` is the manual development environment; the scripted gates pivot into versioned environments such as `.venv-3.13`, `.venv-3.14`, and `.venv-atheris` as needed. -# 1. Setup your "IDE Sanctuary" (.venv) -# This environment is for your editor, LSP, and manual exploration. -uv sync --all-groups +The shortest reliable workflow is: -# 2. Verify and Initialize Atheris (macOS) -# This sets up the isolated .venv-fuzzing environment. -./scripts/check-atheris.sh --install +```bash +uv sync --group dev --group release +./check.sh ``` ---- +The default test gate enforces **100% line coverage and 100% branch coverage** for `src/ftllexengine`. -## Environment Hierarchy +## Setup -To ensure data integrity and zero "environment stomping," the project is strictly siloed: +```bash +git clone https://github.com/resoltico/FTLLexEngine.git +cd FTLLexEngine +uv sync --group dev --group release +uv sync --group fuzz +``` -| Environment | Purpose | Managed By | -|-------------|---------|------------| -| `.venv` (Root) | **IDE Sanctuary** - Autocomplete, LSP, manual runs. | You (`uv sync`) | -| `.venv-3.13` | **Validation Silo** - Clean-room lint/test baseline (Python 3.13, declared minimum). | `scripts/lint.sh`, `scripts/test.sh` | -| `.venv-atheris` | **Atheris Fuzzing** - Python 3.13 venv; active on 3.13 baseline. | `scripts/fuzz_atheris.sh --setup` | +Optional environments: ---- +- `PY_VERSION=3.14 ./scripts/lint.sh` and `PY_VERSION=3.14 ./scripts/test.sh` create or reuse `.venv-3.14`. +- `./scripts/fuzz_atheris.sh --help` bootstraps `.venv-atheris` on demand and requires Python 3.13. -## Automated Scripts (The Pivot) +## Daily Workflow -All validation scripts are **self-isolating**. They automatically "pivot" into `.venv-3.13`, ensuring a clean, reproducible baseline independent of your IDE venv or Atheris toolchain. +Run the repo gates directly; the scripts manage their own interpreter pivots. -| Script | Purpose | Preferred Command | -|--------|---------|-------------------| -| `scripts/lint.sh` | Quality checks (ruff, mypy, pylint) | `./scripts/lint.sh` | -| `scripts/test.sh` | Test suite with coverage | `./scripts/test.sh` | -| `scripts/check-atheris.sh` | Atheris/LLVM health check | `./scripts/check-atheris.sh` | -| `scripts/fuzz_hypofuzz.sh` | Hypothesis/HypoFuzz fuzzing | `./scripts/fuzz_hypofuzz.sh` | -| `scripts/fuzz_atheris.sh` | Atheris/libFuzzer fuzzing | `./scripts/fuzz_atheris.sh` | -| `scripts/benchmark.sh` | Performance benchmarks | `./scripts/benchmark.sh` | +```bash +./check.sh +``` -**Optimization**: Do not use `uv run --python X.Y` with these scripts. The scripts handle their internally versioned `uv run` pivots silently to avoid noise and environment overlap. +Useful variants: ---- +- `uv run python scripts/run_examples.py` +- `PY_VERSION=3.14 ./scripts/lint.sh` +- `PY_VERSION=3.14 ./scripts/test.sh` +- `./scripts/benchmark.sh` +- `./scripts/fuzz_hypofuzz.sh` +- `./scripts/fuzz_hypofuzz.sh --deep --time 300` +- `./scripts/fuzz_atheris.sh --list` -## Multi-Version Development +## Documentation Work -Python 3.13 is the declared minimum. Python 3.14 is the current stable target; Python 3.15 is the forward-compatibility target (N+1 policy). +Markdown changes should stay synchronized with the code and examples they describe. -### The Master Control: `PY_VERSION` +```bash +uv run python scripts/validate_docs.py +uv run python scripts/validate_version.py +uv run python scripts/run_examples.py +``` -The `PY_VERSION` environment variable selects the target Python version. The default is 3.13. +Expectations: -| Task | Command | Target Silo | -|------|---------|-------------| -| **Lint (default)** | `./scripts/lint.sh` | `.venv-3.13` | -| **Lint (3.14 forward-compat)** | `PY_VERSION=3.14 ./scripts/lint.sh` | `.venv-3.14` | -| **Test (default)** | `./scripts/test.sh` | `.venv-3.13` | -| **Test (3.14 forward-compat)** | `PY_VERSION=3.14 ./scripts/test.sh` | `.venv-3.14` | -| **Benchmark (default)** | `./scripts/benchmark.sh` | `.venv-3.13` | -| **Benchmark (3.14 forward-compat)** | `PY_VERSION=3.14 ./scripts/benchmark.sh` | `.venv-3.14` | +- README and guide Python snippets should run as written. +- `examples/*.py` should execute cleanly under the dev environment. +- Source-code docstring transcripts are illustrative API notes, not an executable test suite. Keep runnable examples in Markdown or `examples/`, and mark any source `>>>` transcript with `# doctest: +SKIP`. +- Reference docs should describe current symbols, not removed or internal machinery. -### Why this works -- **Zero Stomping**: Running 3.14 checks will **never** wipe your 3.13 environment. -- **Instant Switching**: Switching between 3.13 and 3.14 is instant (no `uv sync` overhead). -- **Parallel Testing**: You can run 3.13 tests in one terminal and 3.14 tests in another simultaneously. +## Type Checking Examples ---- +The `examples/` directory has its own `mypy.ini` and local stubs. -## Code Standards +```bash +uv run mypy --config-file examples/mypy.ini examples +``` -Style: -- **PEP 8** adherence via Ruff. -- **100 char** line limit. -- **Strict Typing**: Type hints are mandatory. -- **Immutability**: Preference for `frozen=True, slots=True` dataclasses. +## Fuzzing -```python -from __future__ import annotations -from dataclasses import dataclass +Two fuzzing surfaces are maintained: -@dataclass(frozen=True, slots=True) -class LocaleContext: - """Context-aware locale container.""" - tag: str - is_clobbered: bool = False -``` +- `./scripts/fuzz_hypofuzz.sh` for Hypothesis and HypoFuzz. +- `./scripts/fuzz_atheris.sh` for native Atheris/libFuzzer targets. ---- +See: -## Testing & Coverage +- [docs/FUZZING_GUIDE.md](docs/FUZZING_GUIDE.md) +- [docs/FUZZING_GUIDE_HYPOFUZZ.md](docs/FUZZING_GUIDE_HYPOFUZZ.md) +- [docs/FUZZING_GUIDE_ATHERIS.md](docs/FUZZING_GUIDE_ATHERIS.md) -All logic must be verified via deterministic unit tests and non-deterministic property tests. +## Benchmarks ```bash -./scripts/test.sh # Full suite (95%+ requirement) -./scripts/test.sh --quick # Fast mode (no coverage) +./scripts/benchmark.sh +./scripts/benchmark.sh --save baseline +./scripts/benchmark.sh --compare ``` -### Property-Based Testing (Hypothesis) -If you see `HYPOTHESIS DETECTED A LOGIC FLAW`, an edge case has been found. -1. The failing input is saved to `.hypothesis/examples/`. -2. Review the `Falsifying example:` output. -3. Fix the bug and re-run `./scripts/test.sh`. +## Releases ---- +Release work goes through a release branch and `gh`-driven verification. -## Pull Requests +Authoritative procedure: -### Mandatory Pre-Flight -Before submitting a PR, ensure both versions pass verification: +- [docs/RELEASE_PROTOCOL.md](docs/RELEASE_PROTOCOL.md) -```bash -# Verify Baseline (Python 3.13) -./scripts/lint.sh && ./scripts/test.sh +Support scripts: -# Verify Tomorrow (Python 3.15 forward-compat) -PY_VERSION=3.15 ./scripts/lint.sh && PY_VERSION=3.15 ./scripts/test.sh -``` +- `./scripts/publish-github-release-assets.sh` +- `./scripts/verify-github-release.sh` -### CI Requirements -- Parallel matrix testing on 3.13 and 3.14. -- Coverage >= 95.00%. -- Strict type checking (mypy) on all targets. -- Successful documentation validation (`scripts/validate_docs.py`). +## Pull Requests ---- +Before opening a PR, make sure the baseline gates pass: -## Versioning +```bash +./check.sh +``` -**Single Source of Truth**: The version is managed exclusively in `pyproject.toml`. Do not manually edit `__version__` in `src/`. It is auto-derived from package metadata at runtime to prevent version drift. +`./scripts/test.sh` is expected to fail on any coverage regression below the repository's 100% line-and-branch baseline. -Standard workflow: -1. Update version in pyproject.toml -2. Sync to refresh package metadata +When the change touches runtime behavior or supported Python versions, also run the forward-compat pass: ```bash -uv sync +PY_VERSION=3.14 ./scripts/lint.sh +PY_VERSION=3.14 ./scripts/test.sh ``` diff --git a/NOTICE b/NOTICE index 82d9e2ee..21ef1141 100644 --- a/NOTICE +++ b/NOTICE @@ -3,145 +3,69 @@ Copyright (c) 2025-2026 Ervins Strauhmanis Licensed under the MIT License. See LICENSE file for details. -This product is an independent implementation of the FTL Syntax -Specification (Apache License 2.0, Mozilla Foundation and others). - +================================================================================ +Specification Attribution ================================================================================ -FTL Specification Attribution ------------------------------ - -This software implements the FTL Syntax Specification. +FTLLexEngine is an independent implementation of the FTL Syntax Specification. Specification: https://github.com/projectfluent/fluent/blob/master/spec/fluent.ebnf Copyright: Mozilla Foundation and others License: Apache License 2.0 Project: https://projectfluent.org/ -The specification is licensed under the Apache License 2.0. This -implementation is independent work and licensed separately under MIT. +The specification is licensed under the Apache License, Version 2.0, full text +available at https://www.apache.org/licenses/LICENSE-2.0 and included in this +distribution as LICENSE-APACHE-2.0. -Full Apache License 2.0 text: http://www.apache.org/licenses/LICENSE-2.0 +This implementation is independent work — not a fork or derivative of Mozilla's +reference implementation — and is licensed separately under MIT. ================================================================================ - -Important Clarifications ------------------------- - -1. This library is an INDEPENDENT IMPLEMENTATION of the FTL Syntax Specification -2. This is NOT a fork or derivative of Mozilla's reference implementation code -3. All implementation code in this library is original work, licensed under MIT -4. This implementation is independent work and licensed separately from the - specification - +Optional Dependencies ================================================================================ -Trademark Usage ---------------- - -This library uses "FTL" (Fluent Translation List) as a descriptive term to -indicate technical compatibility with the FTL Syntax Specification v1.0. - -This usage is descriptive only and does not imply affiliation with or -endorsement by the Mozilla Foundation. - -"Fluent" and "FTL" may be trademarks of the Mozilla Foundation. All trademarks -are the property of their respective owners. +FTLLexEngine has no required runtime dependencies. The following package is an +optional dependency available via the [babel] extra: + +-------------------------------------------------------------------------------- +Babel + Copyright (c) 2013-2024 by the Babel Team + https://github.com/python-babel/babel + License: BSD 3-Clause + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. ================================================================================ - -Disclaimer of Affiliation and Endorsement ------------------------------------------- - -This project is NOT affiliated with, endorsed by, or sponsored by: -- Mozilla Foundation -- Mozilla Corporation -- Project Fluent -- Any Mozilla-related entity - -This is an independent, third-party implementation created by the copyright -holder listed above. - +Trademark Notice ================================================================================ -Patent Considerations ---------------------- - -The FTL Specification is licensed under Apache License 2.0, which includes an -explicit patent grant from specification contributors. - -This implementation (ftllexengine) is licensed under the MIT License, which -does not include explicit patent language. Users should be aware that: - -1. The Apache 2.0 patent grant applies to the specification itself -2. This independent implementation makes no patent claims -3. No patents are knowingly infringed by this implementation -4. Contributors to this implementation grant MIT License permissions only -5. The MIT License does not provide explicit patent protection - -For patent-related inquiries, consult with legal counsel. - -================================================================================ - -Third-Party Dependencies ------------------------- - -This software depends on the following third-party packages: - -1. Babel (BSD-3-Clause License) - Copyright (c) 2013-2024 by the Babel Team - https://github.com/python-babel/babel - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - - 3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -2. returns (BSD-2-Clause License) - Copyright (c) 2018, dry-python team - https://github.com/dry-python/returns - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +"Fluent" and "FTL" may be trademarks of the Mozilla Foundation. Their use in +this project is descriptive only — indicating technical compatibility with the +FTL Syntax Specification v1.0 — and does not imply affiliation with or +endorsement by the Mozilla Foundation, Mozilla Corporation, or Project Fluent. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. +ftllexengine is not affiliated with, endorsed by, or sponsored by the Mozilla +Foundation or any Mozilla-related entity. diff --git a/PATENTS.md b/PATENTS.md index ead4efc3..3f2412a3 100644 --- a/PATENTS.md +++ b/PATENTS.md @@ -1,214 +1,38 @@ -# Patent Considerations - -This document provides detailed information about patent considerations for FTLLexEngine users and contributors. - -## Summary for Users - -**FTLLexEngine is licensed under the MIT License, which does not include explicit patent grant language.** - -If patent protection is a concern for your use case, please consult with legal counsel to assess your specific situation. - -## Background: Specification vs. Implementation - -FTLLexEngine implements the FTL Syntax Specification, which has different licensing from this implementation: - -| Component | License | Patent Grant | -|-----------|---------|--------------| -| FTL Syntax Specification | Apache License 2.0 | Yes (explicit) | -| FTLLexEngine (this implementation) | MIT License | No (implicit only) | - -## Apache 2.0 Specification Patent Grant - -The FTL Syntax Specification is licensed under Apache License 2.0, which includes Section 3 (Grant of Patent License): - -> Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work... - -**This patent grant applies to the specification itself**, covering contributions made by specification authors (primarily Mozilla Foundation and contributors to the Fluent project). - -## MIT License and Patents - -The MIT License grants broad permissions ("to deal in the Software without restriction") but does not explicitly mention patents. Legal interpretation varies: - -### Implicit Patent License Theory - -Some legal scholars argue the MIT License includes an **implied patent license** through phrases like: -- "without restriction" -- "without limitation" -- "use, copy, modify, merge, publish, distribute, sublicense" - -However, this is **not universally accepted** and may not hold in all jurisdictions. - -### No Explicit Grant - -Unlike Apache 2.0, the MIT License: -- Does NOT explicitly grant patent rights -- Does NOT include patent retaliation clauses -- Does NOT define what "use" means in patent terms - -## What This Means for FTLLexEngine - -### For Users - -**FTLLexEngine makes no patent claims and knowingly infringes no patents.** - -This is an **independent, clean-room implementation** of a publicly available specification: - -1. **Specification Patents**: The Apache 2.0 patent grant from specification authors may provide coverage for implementing the specification -2. **Implementation Patents**: This implementation is original work with no known patent issues -3. **No Patent Claims**: The copyright holder (Ervins Strauhmanis) makes no patent claims on this implementation - -### Comparison with Other Licenses - -| License | Explicit Patent Grant | Patent Retaliation | Widely Used | -|---------|----------------------|-------------------|-------------| -| Apache 2.0 | Yes | Yes | Yes | -| MIT | No | No | Yes | -| BSD-2-Clause | No | No | Yes | -| BSD-3-Clause | No | No | Yes | -| GPL v3 | Yes | Yes | Yes | - -**Note**: Many successful open-source projects use MIT/BSD licenses without explicit patent grants, including: -- jQuery (MIT) -- Rails (MIT) -- Node.js (MIT) -- React (MIT, changed from BSD+Patents in 2017) -- Angular (MIT) - -## For Contributors - -By contributing to FTLLexEngine, you: - -1. **Grant MIT License permissions** for your contributions (copyright license) -2. **Do NOT explicitly grant patent rights** (MIT License has no patent clause) -3. **Should not contribute code** that you know infringes patents you hold -4. **Should disclose** if you have patent concerns about your contribution - -### Contribution Guidelines - -**Before contributing:** - -- Ensure your contribution is your original work -- Do not contribute code you know infringes patents (yours or others) -- If you hold patents related to your contribution, consider whether you're comfortable with the MIT License's implicit permissions -- Disclose any known patent issues in your pull request - -**By submitting a pull request, you represent that:** - -- You have the right to submit the code -- Your contribution does not knowingly infringe patents -- You grant MIT License permissions for your contribution - -## Why Not Use Apache 2.0? - -You might ask: "Why not license FTLLexEngine under Apache 2.0 to get explicit patent grants?" - -**Reasons for MIT License:** - -1. **Simplicity**: MIT is one of the shortest, easiest-to-understand licenses -2. **Compatibility**: MIT is compatible with virtually all other licenses -3. **Ecosystem**: Python ecosystem heavily uses MIT (matches community norms) -4. **Low Barrier**: MIT imposes minimal requirements on users -5. **No Patent Claims**: This implementation makes no patent claims to grant - -## Risk Assessment - -### Realistic Patent Risk - -For most users, patent risk is **extremely low**: - -1. **Specification Coverage**: Apache 2.0 patent grant from specification authors likely covers implementation -2. **Published Specification**: Implementing published specs is generally considered low-risk -3. **No Known Issues**: No known patent claims against Fluent implementations -4. **Defensive Publication**: Public specifications serve as prior art - -### Higher-Risk Scenarios - -Consult legal counsel if: - -- You work in highly patent-litigious industries (e.g., telecommunications) -- You have specific patent concerns about localization technology -- Your organization has strict patent policy requirements -- You're considering patenting derivative works - -## Alternative Implementations - -If explicit patent grants are required for your use case, consider: - -| Implementation | License | Patent Grant | -|----------------|---------|--------------| -| FTLLexEngine | MIT | No | -| fluent.runtime (Mozilla) | Apache 2.0 | Yes | -| fluent-compiler | Apache 2.0 | Yes | - -All three implement the same FTL Specification v1.0 and are functionally compatible. - -## Patent Non-Assertion - -The copyright holder (Ervins Strauhmanis) states: - -**"This implementation makes no patent claims and is not aware of any patents that this implementation infringes. If any patents are held by the copyright holder that relate to this implementation, permission is granted under the MIT License to use this implementation without patent liability."** - -This is a non-binding statement of intent, not a legal patent grant. - -## Questions and Concerns - -### I found a patent issue - -Please report immediately: -1. Open a GitHub issue (mark as SECURITY if sensitive) -2. Email: [your-contact-email] (TODO: Add contact email) -3. Include: patent number, jurisdiction, specific claims - -### I need explicit patent protection - -**Options:** -1. Use Apache 2.0-licensed alternatives (fluent.runtime, fluent-compiler) -2. Obtain legal opinion that MIT License provides sufficient coverage -3. Negotiate separate patent license (contact copyright holder) - -### I want to contribute but hold patents - -**Please:** -1. Disclose in your pull request -2. Confirm you're comfortable with MIT License implicit permissions -3. Consider whether you want to make a patent non-assertion statement - -### Can FTLLexEngine change to Apache 2.0? - -Relicensing would require: -1. Agreement from all past contributors -2. Architectural decision to prioritize patent grants over MIT simplicity -3. Community discussion - -This is possible but not currently planned. - -## Legal Disclaimer - -**This document is for informational purposes only and does not constitute legal advice.** +--- +afad: "3.5" +version: "0.163.0" +domain: LEGAL +updated: "2026-04-22" +route: + keywords: [patents, legal, license, fluent, apache, mit, babel] + questions: ["what is the patent position?", "does the project include a patent grant?", "what about the Fluent specification license?"] +--- -Patent law is complex and varies by jurisdiction. This document represents the copyright holder's understanding and intent but may not be legally binding. +# Patent Notes -**For patent-related concerns, consult qualified legal counsel in your jurisdiction.** +**Purpose**: Summarize the patent posture of FTLLexEngine and its main upstream legal inputs. +**Prerequisites**: None. -## Further Reading +## Overview -### MIT License and Patents +FTLLexEngine is distributed under the MIT License. MIT does not contain an explicit patent grant or patent retaliation clause, so this repository does not add one on top of the license text shipped in `LICENSE`. -- [MIT License on OSI](https://opensource.org/licenses/MIT) -- [MIT License Compatibility](https://en.wikipedia.org/wiki/MIT_License) +The project’s legal posture is shaped by two notable upstream inputs plus this repository’s own license choice: -### Apache 2.0 Patent Provisions +| Component | License | Explicit Patent Grant | +|:----------|:--------|:----------------------| +| FTLLexEngine | MIT | No explicit patent clause | +| Fluent specification materials | Apache-2.0 | Yes | +| Babel (optional dependency) | BSD-3-Clause | No explicit patent clause | -- [Apache 2.0 License Full Text](https://www.apache.org/licenses/LICENSE-2.0) -- [Understanding Apache 2.0 Patent Grant](https://opensource.com/article/18/2/apache-2-patent-license) +## Fluent Specification -### General Patent Information +Project Fluent specification materials are published under Apache License 2.0, which includes an explicit contributor patent license in Section 3. That grant applies to the specification materials and upstream contributions to them; it does not convert this repository into an Apache-licensed implementation. -- [USPTO: Explore Intellectual Property](https://www.uspto.gov/kids/explore-intellectual-property) -- [Open Source Licenses and Patents](https://www.fossa.com/blog/open-source-licenses-101-apache-license-2-0/) +## Contributor Guidance ---- +Contributors should only submit code they are authorized to license under this repository’s terms. If you know code or data is encumbered by patent restrictions that would conflict with normal project use, do not contribute it here. -**Last Updated**: 2025-11-25 +## Disclaimer -**Contact**: See [NOTICE](NOTICE) file for copyright holder information. +This file is informational and not legal advice. For legal interpretation or patent risk analysis, consult qualified counsel. diff --git a/README.md b/README.md index 4fae615d..ea8e2364 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,8 @@ coffee-order = { $bags -> """) result, errors = bundle.format_pattern("coffee-order", {"bags": 500, "origin": "Ethiopian"}) -# "500 bags of Ethiopian coffee" +assert errors == () +assert result == "500 bags of Ethiopian coffee" ``` > `use_isolating=False` removes Unicode bidi isolation markers from output, making strings suitable for direct comparison and logging. The default `use_isolating=True` wraps each placeable in U+2068/U+2069 markers for correct bidirectional text rendering in UI contexts. @@ -65,12 +66,15 @@ result, errors = bundle.format_pattern("coffee-order", {"bags": 500, "origin": " **Parse user input back to Python types:** ```python +from decimal import Decimal from ftllexengine.parsing import parse_currency # German buyer enters a bid price result, errors = parse_currency("12.450,00 EUR", "de_DE", default_currency="EUR") if not errors: amount, currency = result # (Decimal('12450.00'), 'EUR') + assert amount == Decimal("12450.00") + assert currency == "EUR" ``` --- @@ -90,7 +94,7 @@ if not errors: - [When to Use FTLLexEngine](#when-to-use-ftllexengine) - [Documentation](#documentation) - [Contributing](#contributing) -- [License](#license) +- [Legal](#legal) --- @@ -120,12 +124,13 @@ Or: `pip install ftllexengine` **Works without Babel:** - FTL syntax parsing (`parse_ftl()`, `serialize_ftl()`) - AST manipulation and transformation -- Validation and introspection +- Validation and message introspection **Requires Babel:** - `FluentBundle` (locale-aware formatting) - `FluentLocalization` (multi-locale fallback) - Bidirectional parsing (numbers, dates, currency) +- ISO territory and currency lookups @@ -153,15 +158,18 @@ invoice-total = Total: { CURRENCY($amount, currency: "USD") } """) result, _ = bundle.format_pattern("shipment-line", {"bags": 500, "origin": "Colombian"}) -# "500 bags of Colombian coffee" +assert result == "500 bags of Colombian coffee" result, _ = bundle.format_pattern("invoice-total", {"amount": Decimal("187500.00")}) -# "Total: $187,500.00" +assert result == "Total: $187,500.00" ``` **German (Hamburg buyer):** ```python +from decimal import Decimal +from ftllexengine import FluentBundle + bundle_de = FluentBundle("de_DE", use_isolating=False) bundle_de.add_resource(""" shipment-line = { $bags -> @@ -174,15 +182,18 @@ invoice-total = Gesamt: { CURRENCY($amount, currency: "EUR") } """) result, _ = bundle_de.format_pattern("shipment-line", {"bags": 500, "origin": "kolumbianischer"}) -# "500 Saecke kolumbianischer Kaffee" +assert result == "500 Saecke kolumbianischer Kaffee" result, _ = bundle_de.format_pattern("invoice-total", {"amount": Decimal("187500.00")}) -# "Gesamt: 187.500,00\u00a0€" (CLDR: non-breaking space before symbol) +assert result == "Gesamt: 187.500,00\u00a0€" # CLDR: non-breaking space before symbol ``` **Japanese (Tokyo buyer):** ```python +from decimal import Decimal +from ftllexengine import FluentBundle + bundle_ja = FluentBundle("ja_JP", use_isolating=False) bundle_ja.add_resource(""" shipment-line = { $bags -> @@ -194,10 +205,10 @@ invoice-total = 合計:{ CURRENCY($amount, currency: "JPY") } """) result, _ = bundle_ja.format_pattern("shipment-line", {"bags": 500, "origin": "コロンビア"}) -# "コロンビアコーヒー 500袋" +assert result == "コロンビアコーヒー 500袋" result, _ = bundle_ja.format_pattern("invoice-total", {"amount": Decimal("28125000")}) -# "合計:¥28,125,000" +assert result == "合計:¥28,125,000" ``` Bob uses the same pattern at Mars Colony 1. Spanish for the Colombian agronomists? Add one `.ftl` file. Zero code changes. @@ -213,6 +224,7 @@ Most libraries only format outbound data. That's a one-way trip. Bob's colonists type orders and quantities in their local format. A German engineer enters `"12.450,00 EUR"`. A Colombian agronomist enters `"45.000.000 COP"`. A Japanese technician files a delivery date as `"2026年3月15日"`. FTLLexEngine parses them all to exact Python types. ```python +from decimal import Decimal from ftllexengine.parsing import ( parse_currency, parse_date, @@ -232,14 +244,16 @@ if not errors: # Japanese technician enters a delivery date contract_date, errors = parse_date("2026年3月15日", "ja_JP") -# datetime.date(2026, 3, 15) +assert not errors +assert contract_date.isoformat() == "2026-03-15" # German engineer enters a localized amount for use in a Fluent message fnum, errors = parse_fluent_number("12.450,00", "de_DE") if not errors: # FluentNumber(value=Decimal('12450.00'), formatted='12.450,00', precision=2) # Pass fnum directly as a $variable — it carries its formatting metadata - pass + assert fnum.value == Decimal("12450.00") + assert str(fnum) == "12.450,00" ``` ```mermaid @@ -262,9 +276,11 @@ flowchart TB **When parsing fails, you get structured errors -- not exceptions:** ```python +from ftllexengine.parsing import parse_decimal + price, errors = parse_decimal("twelve thousand", "en_US") -# price = None -# errors = (FrozenFluentError(...),) +assert price is None +assert errors if errors: err = errors[0] @@ -284,6 +300,8 @@ from ftllexengine.parsing import parse_currency price_result, errors = parse_currency("$4.25", "en_US", default_currency="USD") if not errors: price_per_lb, currency = price_result # (Decimal('4.25'), 'USD') + assert price_per_lb == Decimal("4.25") + assert currency == "USD" bags = 500 lbs_per_bag = Decimal("132") # Standard 60kg bag @@ -309,7 +327,7 @@ bundle.add_resource('confirm = Contract: { $bags } bags at { CURRENCY($price, cu # Works normally when all variables are provided result, _ = bundle.format_pattern("confirm", {"bags": 500, "price": Decimal("4.25")}) -# "Contract: 500 bags at $4.25/lb" +assert result == "Contract: 500 bags at $4.25/lb" # Missing variable raises immediately (default strict=True behavior) try: @@ -322,8 +340,8 @@ except FormattingIntegrityError as e: # For soft error recovery, opt in with strict=False soft_bundle = FluentBundle("en_US", strict=False, use_isolating=False) soft_result, soft_errors = soft_bundle.format_pattern("missing-message", {}) -# soft_result = "{missing-message}" (fallback: key wrapped in braces) -# soft_errors = (FrozenFluentError(...),) +assert soft_result == "{missing-message}" # fallback: key wrapped in braces +assert soft_errors ``` --- @@ -362,8 +380,8 @@ with ThreadPoolExecutor(max_workers=100) as executor: executor.submit(format_confirmation, ja_bundle, Decimal("4.25"), "lb"), ] confirmations = [f.result() for f in futures] - # ["4,25\u00a0$ per lb", "US$4,25 per lb", "$4.25 per lb"] - # (CLDR locale-specific symbols; de_DE uses non-breaking space before $) + assert confirmations == ["4,25\u00a0$ per lb", "US$4,25 per lb", "$4.25 per lb"] + # CLDR locale-specific symbols; de_DE uses non-breaking space before $ ``` `FluentBundle` and `FluentLocalization` are thread-safe by design: @@ -380,17 +398,27 @@ Bob's colony manifest system loads `.ftl` files that grow as new message templat `add_resource_stream` and `parse_stream_ftl` accept any line iterator. Memory stays proportional to the largest single FTL entry, not the full file: ```python +from pathlib import Path +from tempfile import TemporaryDirectory from ftllexengine import FluentBundle, parse_stream_ftl -# Load directly from a file object — no full-file read -bundle = FluentBundle("en_US") -with open("colony_messages.ftl", encoding="utf-8") as f: - junk = bundle.add_resource_stream(f, source_path="colony_messages.ftl") - -# Or iterate entries without a bundle (parser-only install works too) -with open("colony_messages.ftl", encoding="utf-8") as f: - for entry in parse_stream_ftl(f): - print(type(entry).__name__, getattr(entry.id, "name", "")) +with TemporaryDirectory() as tmp: + source_path = Path(tmp) / "colony_messages.ftl" + source_path.write_text( + "hello = Hello from orbit\n" + "status = Cargo ready\n", + encoding="utf-8", + ) + + bundle = FluentBundle("en_US") + with source_path.open(encoding="utf-8") as handle: + junk = bundle.add_resource_stream(handle, source_path=source_path.name) + assert junk == () + + with source_path.open(encoding="utf-8") as handle: + entry_ids = [entry.id.name for entry in parse_stream_ftl(handle)] + assert entry_ids == ["hello", "status"] + print(entry_ids) ``` **Same guarantees as `add_resource`:** @@ -401,12 +429,28 @@ with open("colony_messages.ftl", encoding="utf-8") as f: `FluentLocalization.add_resource_stream` works identically for multi-locale setups: ```python +from pathlib import Path +from tempfile import TemporaryDirectory from ftllexengine import FluentLocalization from ftllexengine.localization import PathResourceLoader -l10n = FluentLocalization(["de_DE", "en_US"], ["messages"], PathResourceLoader("locales/")) -with open("extra_de.ftl", encoding="utf-8") as f: - l10n.add_resource_stream("de_DE", f, source_path="extra_de.ftl") +with TemporaryDirectory() as tmp: + base = Path(tmp) / "locales" + (base / "de_de").mkdir(parents=True) + (base / "en_us").mkdir(parents=True) + (base / "de_de" / "messages.ftl").write_text("hello = Hallo\n", encoding="utf-8") + (base / "en_us" / "messages.ftl").write_text("hello = Hello\n", encoding="utf-8") + extra_path = Path(tmp) / "extra_de.ftl" + extra_path.write_text("shipment = Zusatzdatei\n", encoding="utf-8") + + loader = PathResourceLoader(str(base / "{locale}")) + l10n = FluentLocalization(["de_DE", "en_US"], ["messages.ftl"], loader) + with extra_path.open(encoding="utf-8") as handle: + l10n.add_resource_stream("de_DE", handle, source_path=extra_path.name) + + shipment, errors = l10n.format_value("shipment") + assert errors == () + assert shipment == "Zusatzdatei" ``` --- @@ -420,7 +464,7 @@ import asyncio from ftllexengine import AsyncFluentBundle async def handle_request(name: str, bags: int) -> str: - async with AsyncFluentBundle("en_US") as bundle: + async with AsyncFluentBundle("en_US", use_isolating=False) as bundle: await bundle.add_resource(""" coffee-order = { $bags -> [one] 1 bag for { $name } @@ -432,6 +476,8 @@ coffee-order = { $bags -> ) return result +assert asyncio.run(handle_request("Alice", 2)) == "2 bags for Alice" + # Shared bundle across requests (create once, reuse): _bundle = AsyncFluentBundle("en_US") @@ -466,17 +512,12 @@ contract = { $buyer } purchases { $bags -> info = bundle.introspect_message("contract") -info.get_variable_names() -# frozenset({'buyer', 'bags', 'grade', 'seller', 'price', 'port', 'ship_date'}) - -info.get_function_names() -# frozenset({'CURRENCY', 'DATETIME'}) - -info.has_selectors -# True (uses plural selection for bags) - -info.requires_variable("price") -# True +assert info.get_variable_names() == frozenset( + {"buyer", "bags", "grade", "seller", "price", "port", "ship_date"} +) +assert info.get_function_names() == frozenset({"CURRENCY", "DATETIME"}) +assert info.has_selectors is True +assert info.requires_variable("price") is True ``` **Use cases:** @@ -490,39 +531,70 @@ info.requires_variable("price") Alice's trading platform and Bob's colony manifest system can't discover a bad `.ftl` file mid-operation. They validate everything at startup. -`LocalizationBootConfig` is the production boot sequence: load all resources, run `require_clean()` to assert every locale loaded without errors, and validate all message schemas before the first request arrives. If anything is wrong, it raises before traffic starts -- not during it. +`LocalizationBootConfig` is the production boot sequence: load all resources, run `require_clean()` to assert every locale loaded without errors, and validate all message schemas before the first request arrives. If anything is wrong, it raises before traffic starts -- not during it. Each config instance is single-use, so create a new one for each boot attempt. ```python +from pathlib import Path +from tempfile import TemporaryDirectory from ftllexengine import LocalizationBootConfig -# Load .ftl files from disk, validate schemas, raise before accepting traffic -cfg = LocalizationBootConfig.from_path( - locales=("en_US", "de_DE", "ja_JP"), - resource_ids=("invoice.ftl", "shipment.ftl"), - base_path="locales/{locale}", - message_schemas={ - "invoice-total": {"amount"}, - "shipment-line": {"bags", "origin"}, - }, - # Enforce that critical messages exist in at least one locale - required_messages=frozenset({"invoice-total", "shipment-line"}), -) - -# Primary API: returns structured evidence for audit trails -l10n, summary, schema_results = cfg.boot() -# raises IntegrityCheckFailedError if any resource fails, required message is absent, or schema mismatches - -print(f"Loaded {summary.total_attempted} resources, {summary.errors} errors") -# "Loaded 6 resources, 0 errors" +with TemporaryDirectory() as tmp: + base = Path(tmp) / "locales" + for locale, invoice_label in { + "en_us": "Total", + "de_de": "Gesamt", + "ja_jp": "合計", + }.items(): + locale_dir = base / locale + locale_dir.mkdir(parents=True) + (locale_dir / "invoice.ftl").write_text( + f'invoice-total = {invoice_label}: {{ CURRENCY($amount, currency: "USD") }}\n', + encoding="utf-8", + ) + (locale_dir / "shipment.ftl").write_text( + 'shipment-line = { $bags } bags of { $origin }\n', + encoding="utf-8", + ) -# schema_results: tuple[MessageVariableValidationResult, ...] -- one per message_schemas entry + cfg = LocalizationBootConfig.from_path( + locales=("en_US", "de_DE", "ja_JP"), + resource_ids=("invoice.ftl", "shipment.ftl"), + base_path=base / "{locale}", + message_schemas={ + "invoice-total": {"amount"}, + "shipment-line": {"bags", "origin"}, + }, + required_messages=frozenset({"invoice-total", "shipment-line"}), + ) + + l10n, summary, schema_results = cfg.boot() + print(f"Loaded {summary.total_attempted} resources, {summary.errors} errors") + assert len(schema_results) == 2 ``` **When only the localization object is needed:** ```python -l10n = cfg.boot_simple() # raises on failure, discards audit evidence -# l10n is now safe to use for the lifetime of the application +from pathlib import Path +from tempfile import TemporaryDirectory +from ftllexengine import LocalizationBootConfig + +with TemporaryDirectory() as tmp: + base = Path(tmp) / "locales" + (base / "en_us").mkdir(parents=True) + (base / "en_us" / "main.ftl").write_text("ready = System ready\n", encoding="utf-8") + + cfg = LocalizationBootConfig.from_path( + locales=("en_US",), + resource_ids=("main.ftl",), + base_path=base / "{locale}", + required_messages=frozenset({"ready"}), + ) + + l10n = cfg.boot_simple() + result, errors = l10n.format_value("ready") + assert errors == () + print(result) ``` **Use cases:** @@ -541,21 +613,21 @@ from ftllexengine.introspection.iso import get_territory_currencies, get_currenc # New buyer in Japan -- what currency? currencies = get_territory_currencies("JP") -# ("JPY",) +assert currencies == ("JPY",) # How many decimal places for yen? jpy = get_currency("JPY") -jpy.decimal_digits -# 0 -- no decimal places for yen +assert jpy is not None +assert jpy.decimal_digits == 0 # no decimal places for yen # Compare to Colombian peso cop = get_currency("COP") -cop.decimal_digits -# 2 +assert cop is not None +assert cop.decimal_digits == 2 # Multi-currency territories panama_currencies = get_territory_currencies("PA") -# ("PAB", "USD") -- Panama uses both Balboa and US Dollar +assert panama_currencies == ("PAB", "USD") # Panama uses both Balboa and US Dollar ``` Alice's invoices format correctly: JPY 28,125,000 in Tokyo, $187,500.00 in New York. @@ -570,8 +642,9 @@ Alice's invoices format correctly: JPY 28,125,000 in Tokyo, $187,500.00 in New Y | **Runtime** — `ftllexengine.runtime` | `FluentBundle`, message resolution, thread-safe formatting, built-in functions (`NUMBER`, `CURRENCY`, `DATETIME`) | Yes | | **Localization** — `ftllexengine.localization` | `FluentLocalization` multi-locale fallback chains; `LocalizationBootConfig` strict-mode production boot | Yes | | **Parsing** — `ftllexengine.parsing` | Bidirectional parsing: numbers, dates, currency back to Python types | Yes | -| **Introspection** — `ftllexengine.introspection` | Message variable/function extraction, ISO 3166/4217 territory and currency data | Partial | -| **Validation** — `ftllexengine.validation` | Cycle detection, reference validation, semantic checks | No | +| **Introspection** — `ftllexengine.introspection` | Message-variable/function extraction, ISO 3166/4217 territory and currency data | Partial | +| **Analysis** — `ftllexengine.analysis` | Dependency-graph helpers such as `detect_cycles()` | No | +| **Validation** — `ftllexengine.validation` | Resource validation, unresolved-reference checks, semantic checks | No | | **Diagnostics** — `ftllexengine.diagnostics` | Structured error types, error codes, formatting | No | | **Integrity** — `ftllexengine.integrity` | BLAKE2b checksums, strict mode, immutable exceptions | No | @@ -609,10 +682,11 @@ Alice's invoices format correctly: JPY 28,125,000 in Tokyo, $187,500.00 in New Y | Resource | Description | |:---------|:------------| | [Quick Reference](docs/QUICK_REFERENCE.md) | Copy-paste patterns for common tasks | -| [API Reference](docs/DOC_00_Index.md) | Complete class and function documentation | +| [API Reference](docs/DOC_00_Index.md) | Reference coverage for the exported package and module APIs | | [Parsing Guide](docs/PARSING_GUIDE.md) | Bidirectional parsing deep-dive | | [Data Integrity](docs/DATA_INTEGRITY_ARCHITECTURE.md) | Strict mode, checksums, immutable errors | | [Terminology](docs/TERMINOLOGY.md) | Fluent and FTLLexEngine concepts | +| [Release Protocol](docs/RELEASE_PROTOCOL.md) | `gh`-first release-branch, tag, GitHub Release, and PyPI procedure | | [Examples](examples/) | Working code you can run | --- @@ -620,13 +694,17 @@ Alice's invoices format correctly: JPY 28,125,000 in Tokyo, $187,500.00 in New Y ## Contributing Contributions welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for setup and guidelines. +The shortest full-repo verification path is `./check.sh`. --- -## License - -MIT License - See [LICENSE](LICENSE). +## Legal -Implements the [Fluent Specification](https://github.com/projectfluent/fluent/blob/master/spec/fluent.ebnf) (Apache 2.0). +ftllexengine is MIT-licensed. It has no required runtime dependencies. The optional +[babel] extra adds Babel (BSD 3-Clause). ftllexengine is an independent implementation +of the [FTL Syntax Specification](https://github.com/projectfluent/fluent/blob/master/spec/fluent.ebnf) +(Apache 2.0, Mozilla Foundation and others) and is not affiliated with or endorsed +by Mozilla. See [NOTICE](NOTICE) for attribution and [PATENTS.md](PATENTS.md) for +patent considerations. -**Legal**: [PATENTS.md](PATENTS.md) | [NOTICE](NOTICE) +[LICENSE](LICENSE) | [NOTICE](NOTICE) | [PATENTS.md](PATENTS.md) diff --git a/check.sh b/check.sh new file mode 100755 index 00000000..a8dfeb52 --- /dev/null +++ b/check.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +set -euo pipefail + +PY_VERSION="${PY_VERSION:-3.13}" +UV_ENV=".venv-${PY_VERSION}" +ATHERIS_SMOKE_TIME="${ATHERIS_SMOKE_TIME:-5}" + +ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +cd "$ROOT_DIR" + +run_step() { + local title="$1" + shift + printf '\n== %s ==\n' "$title" + "$@" +} + +uv_python() { + UV_PROJECT_ENVIRONMENT="$UV_ENV" uv run --python "$PY_VERSION" --group dev python "$@" +} + +run_step "Version Validation" uv_python scripts/validate_version.py +run_step "Documentation Validation" uv_python scripts/validate_docs.py +run_step "Examples" uv_python scripts/run_examples.py +run_step "Lint" ./scripts/lint.sh +run_step "Tests" ./scripts/test.sh +run_step "HypoFuzz Preflight" ./scripts/fuzz_hypofuzz.sh --preflight +run_step "Atheris Corpus Health" ./scripts/fuzz_atheris.sh --corpus +run_step "Atheris Graph Smoke" ./scripts/fuzz_atheris.sh graph --time "$ATHERIS_SMOKE_TIME" +run_step "Atheris Introspection Smoke" ./scripts/fuzz_atheris.sh introspection --time "$ATHERIS_SMOKE_TIME" + +printf '\n[PASS] Full repository check completed.\n' diff --git a/docs/CUSTOM_FUNCTIONS_GUIDE.md b/docs/CUSTOM_FUNCTIONS_GUIDE.md index 3b70e228..4873fdec 100644 --- a/docs/CUSTOM_FUNCTIONS_GUIDE.md +++ b/docs/CUSTOM_FUNCTIONS_GUIDE.md @@ -1,998 +1,80 @@ --- -afad: "3.3" -version: "0.153.0" -domain: custom-functions -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: CUSTOM_FUNCTIONS +updated: "2026-04-22" route: - keywords: [custom functions, add_function, fluent functions, factory pattern, locale-aware, formatting functions] - questions: ["how to create custom function?", "how to add custom function?", "how to make locale-aware function?"] + keywords: [custom functions, fluent_function, FunctionRegistry, locale injection, add_function] + questions: ["how do I add a custom function?", "how does locale injection work?", "should I use a registry or add_function?"] --- -# Advanced Custom Functions Guide +# Custom Functions Guide -**Purpose**: Extend FTLLexEngine with custom formatting functions. -**Prerequisites**: Basic FluentBundle usage. +**Purpose**: Add domain-specific functions to `FluentBundle` or `FluentLocalization`. +**Prerequisites**: Familiarity with `FluentBundle.format_pattern()` and FTL function calls. ---- - -## Table of Contents - -1. [Introduction](#introduction) -2. [When to Use Custom Functions](#when-to-use-custom-functions) -3. [Function Naming Conventions](#function-naming-conventions) -4. [Parameter Conventions](#parameter-conventions) -5. [Error Handling Patterns](#error-handling-patterns) -6. [Locale-Aware Functions (Factory Pattern)](#locale-aware-functions-factory-pattern) -7. [Integration with Babel for i18n](#integration-with-babel-for-i18n) -8. [Complete Examples](#complete-examples) -9. [Testing Custom Functions](#testing-custom-functions) -10. [Best Practices and Pitfalls](#best-practices-and-pitfalls) - ---- - -## Introduction - -FTLLexEngine includes built-in functions for common formatting needs: -- **NUMBER()**: Locale-aware number formatting -- **DATETIME()**: Locale-aware date/time formatting -- **CURRENCY()**: Locale-aware currency formatting - -However, domain-specific applications often require custom formatters for specialized data types. This guide shows you how to implement custom functions that integrate seamlessly with FTLLexEngine's i18n infrastructure. - -**What You'll Learn**: -- How to create custom functions that follow FTL conventions -- How to make functions locale-aware using the factory pattern -- How to integrate with Babel for CLDR-compliant formatting -- Best practices for error handling and thread safety - ---- - -## When to Use Custom Functions - -### Use Custom Functions For: -- **Domain-specific formatting**: Phone numbers, file sizes, durations, credit cards -- **Business logic**: Loyalty points, shipping estimates, inventory status -- **Rich text rendering**: Markdown, HTML sanitization, custom markup -- **Specialized localization**: Industry-specific terminology, custom plural rules - -### Use Built-in Functions For: -- **Numbers**: Always use `NUMBER()` instead of Python's `format()` -- **Dates/Times**: Always use `DATETIME()` instead of `strftime()` -- **Currency**: Always use `CURRENCY()` instead of custom implementations - -**Why?** Built-in functions use Babel for CLDR-compliant formatting, which handles: -- Locale-specific separators (1,234.56 vs 1.234,56 vs 1 234,56) -- Currency-specific decimal places (JPY: 0, BHD: 3) -- Symbol placement (en_US: "$1.23" vs lv_LV: "1,23 €") -- Right-to-left language support (Arabic, Hebrew) - ---- - -## Function Naming Conventions +## Overview -### FTL Naming Convention: UPPERCASE (Recommended) +FTLLexEngine supports two patterns: -By convention, FTL functions use UPPERCASE names to distinguish them from message references: +- `bundle.add_function("NAME", func)` for one bundle or one localization object. +- `FunctionRegistry` for reusable or shared function sets. -```python -# RECOMMENDED - FTL convention (UPPERCASE) -def FILESIZE(bytes_count: int) -> str: - ... - -def PHONE(number: str) -> str: - ... - -def MARKDOWN(text: str) -> str: - ... -``` - -```python -# VALID BUT NOT RECOMMENDED - lowercase/camelCase works but breaks convention -def filesize(bytes_count: int) -> str: # Works, but unconventional - ... - -def phoneNumber(number: str) -> str: # Works, but unconventional - ... -``` - -**Rationale**: FTL syntax is case-sensitive. UPPERCASE names are a convention that: -1. Visually distinguishes functions from message references in FTL code -2. Matches the style of built-in functions (NUMBER, DATETIME) -3. Makes function calls immediately recognizable - -**Note**: Function names can use any case (lowercase, camelCase, UPPERCASE). UPPERCASE remains the recommended convention for consistency with built-in functions. - -### Python Linters - -Disable naming warnings for FTL functions: - -```python -def FILESIZE(bytes_count: int) -> str: # noqa: N802 - """Format file size.""" - ... - -# Or use pylint disable -def PHONE(number: str) -> str: # pylint: disable=invalid-name - """Format phone number.""" - ... -``` - ---- +FTL uses uppercase function names by convention. Python callables can keep normal snake_case parameter names; the bridge maps FTL camelCase named arguments onto Python snake_case parameters automatically. -## Parameter Conventions - -### Positional vs Keyword Arguments - -FTL function calls use **named parameters** for all arguments except the first: - -```ftl -# FTL syntax (camelCase for multi-word parameter names) -file-size = { FILESIZE($bytes, precision: 2) } -phone = { PHONE($number, formatStyle: "international") } -``` - -**Python implementation should use keyword-only arguments** after the first parameter (recommended for clarity): - -```python -# CORRECT - Uses * to enforce keyword-only args -def FILESIZE(bytes_count: int, *, precision: int = 2) -> str: - """Format file size in human-readable format. - - Args: - bytes_count: Number of bytes (positional) - precision: Decimal precision (keyword-only with default) - """ - ... - -def PHONE(number: str, *, format_style: str = "international") -> str: - """Format phone number. - - Args: - number: Phone number (positional) - format_style: Format type (keyword-only with default) - """ - ... -``` - -```python -# WRONG - Missing * separator -def FILESIZE(bytes_count: int, precision: int = 2) -> str: # [WRONG] positional after keyword - ... -``` - -### Parameter Naming: snake_case - -Use Python's `snake_case` convention for parameter names: - -```python -# CORRECT -def PHONE(number: str, *, format_style: str = "international") -> str: - ... - -# WRONG - Don't use camelCase -def PHONE(number: str, *, formatStyle: str = "international") -> str: # [WRONG] use snake_case - ... -``` - -**Why?** FunctionRegistry automatically bridges FTL's camelCase to Python's snake_case: - -```ftl -# FTL uses camelCase -phone = { PHONE($number, formatStyle: "international") } -``` - -```python -# Python receives snake_case -def PHONE(number: str, *, format_style: str = "international") -> str: - # format_style receives "international" - ... -``` - -**Supported conversions**: -- `formatStyle` → `format_style` -- `currencyDisplay` → `currency_display` -- `minimumFractionDigits` → `minimum_fraction_digits` - ---- - -## Error Handling Patterns - -### Rule #1: Custom Functions MUST NEVER Raise Exceptions - -Fluent's error model requires graceful degradation: - -```python -# CORRECT - Returns fallback on error -def FILESIZE(bytes_count: int, *, precision: int = 2) -> str: - """Format file size.""" - try: - bytes_count = float(bytes_count) - # ... formatting logic ... - return f"{bytes_count:.{precision}f} {unit}" - except (ValueError, TypeError): - # Graceful fallback for invalid input - return f"{bytes_count} bytes" - except Exception: - # Catch-all for unexpected errors - return str(bytes_count) -``` +## Single-Bundle Function ```python -# WRONG - Raising exceptions crashes the application -def FILESIZE(bytes_count: int, *, precision: int = 2) -> str: - if not isinstance(bytes_count, int): - raise TypeError("bytes_count must be numeric") # [WRONG] NEVER raise from a custom function - ... -``` - -### Rule #2: Return Readable Fallbacks - -When errors occur, return a fallback that helps developers debug: - -```python -# GOOD - Descriptive fallback -def CURRENCY_CUSTOM(amount: int | Decimal, *, currency_code: str = "USD") -> str: - try: - from babel import numbers - return numbers.format_currency(amount, currency_code, locale="en_US") - except ImportError: - return f"{currency_code} {amount:.2f}" # Shows what failed - except Exception: - return f"{currency_code} {amount}" # Minimal fallback -``` - -```python -# BAD - Useless fallback -def CURRENCY_CUSTOM(amount: int | Decimal, *, currency_code: str = "USD") -> str: - try: - ... - except Exception: - return "???" # [WRONG] Not helpful for debugging -``` - -### Rule #3: Log Debug Information (Optional) - -For production deployments, log unexpected errors: - -```python -import logging - -logger = logging.getLogger(__name__) - -def PHONE(number: str, *, format_style: str = "international") -> str: - """Format phone number.""" - try: - # ... formatting logic ... - return formatted_number - except Exception as e: - logger.debug(f"PHONE formatting failed: {e}") - return str(number) -``` - -**Note**: Use `logger.debug()`, not `logger.warning()`, since formatting errors are expected in normal operation (e.g., user input). - ---- - -## Locale-Aware Functions (Factory Pattern) - -### Problem: Functions Need Bundle's Locale - -Custom functions often need to format differently based on the bundle's locale: - -```python -# How do we make GREETING() use the bundle's locale? -bundle = FluentBundle("lv_LV") -bundle.add_function("GREETING", ???) # Need access to "lv_LV" -``` - -### Solution: Factory Pattern - -Create a **factory function** that captures the bundle's locale in a closure: - -```python -def make_greeting_function(bundle_locale: str) -> Callable: - """Factory for locale-aware greeting function. - - Args: - bundle_locale: The bundle's locale string (e.g., "lv_LV", "de_DE") - - Returns: - GREETING function customized for the locale - """ - def GREETING(name: str, *, formal: str = "false") -> str: - """Locale-aware greeting. - - Args: - name: Person's name - formal: "true" for formal greeting, "false" for informal - - Returns: - Localized greeting - """ - is_formal = formal.lower() == "true" - locale_lower = bundle_locale.lower() - - if locale_lower.startswith("lv"): - return f"Labdien, {name}!" if is_formal else f"Sveiki, {name}!" - if locale_lower.startswith("de"): - return f"Guten Tag, {name}!" if is_formal else f"Hallo, {name}!" - if locale_lower.startswith("pl"): - return f"Dzień dobry, {name}!" if is_formal else f"Cześć, {name}!" - return f"Good day, {name}!" if is_formal else f"Hello, {name}!" - - return GREETING -``` - -### Usage - -```python -# Create locale-specific greeting function -bundle_en = FluentBundle("en_US") -bundle_en.add_function("GREETING", make_greeting_function(bundle_en.locale)) - -bundle_lv = FluentBundle("lv_LV") -bundle_lv.add_function("GREETING", make_greeting_function(bundle_lv.locale)) - -# FTL usage (same in all locales) -bundle_en.add_resource('greet = { GREETING($name, formal: "false") }') -bundle_lv.add_resource('greet = { GREETING($name, formal: "false") }') - -# Different output based on locale -result, _ = bundle_en.format_pattern("greet", {"name": "Alice"}) -# → "Hello, Alice!" - -result, _ = bundle_lv.format_pattern("greet", {"name": "Anna"}) -# → "Sveiki, Anna!" -``` - -### Alternative: Automatic Locale Injection - -Instead of using the factory pattern, use the `@fluent_function` decorator for automatic locale injection: - -```python -from ftllexengine import FluentBundle, fluent_function - - -@fluent_function(inject_locale=True) -def GREETING(name: str, locale_code: str, /, *, formal: str = "false") -> str: - """Locale-aware greeting with automatic locale injection. - - Args: - name: Person's name (positional, from FTL) - locale_code: Bundle's canonical lowercase underscore locale (auto-injected) - formal: "true" for formal greeting, "false" for informal (keyword) - - Returns: - Localized greeting - """ - is_formal = formal.lower() == "true" - locale_lower = locale_code.lower() - - if locale_lower.startswith("lv"): - return f"Labdien, {name}!" if is_formal else f"Sveiki, {name}!" - if locale_lower.startswith("de"): - return f"Guten Tag, {name}!" if is_formal else f"Hallo, {name}!" - return f"Good day, {name}!" if is_formal else f"Hello, {name}!" - - -# Register - locale will be injected automatically -bundle = FluentBundle("lv_LV") -bundle.add_function("GREETING", GREETING) - -bundle.add_resource('greet = { GREETING($name, formal: "false") }') -result, _ = bundle.format_pattern("greet", {"name": "Anna"}) -# → "Sveiki, Anna!" -``` - -**How it works:** -1. Apply `@fluent_function(inject_locale=True)` to your function -2. The runtime checks for this via `FunctionRegistry.should_inject_locale()` -3. When calling the function, the bundle's locale is injected as the second positional argument - -**When to use which approach:** - -| Approach | Use When | -|:---------|:---------| -| Factory pattern | Function needs locale at definition time (closures) | -| `@fluent_function(inject_locale=True)` | Function accepts locale as parameter at call time | -| Neither | Function doesn't need locale (e.g., FILESIZE) | - -### Alternative: Use Babel Locale - -For CLDR-compliant formatting, create a LocaleContext inside the function: - -```python -def make_date_range_function(bundle_locale: str) -> Callable: - """Factory for locale-aware date range formatter.""" - def DATE_RANGE(start: str, end: str) -> str: - """Format date range with locale-specific formatting.""" - from ftllexengine.runtime.locale_context import LocaleContext - from datetime import datetime - - try: - ctx = LocaleContext.create(bundle_locale) - start_dt = datetime.fromisoformat(start) - end_dt = datetime.fromisoformat(end) - - # Use Babel for locale-aware formatting - from babel.dates import format_date - - start_formatted = format_date(start_dt, format="medium", locale=ctx.babel_locale) - end_formatted = format_date(end_dt, format="medium", locale=ctx.babel_locale) - - return f"{start_formatted} – {end_formatted}" - except Exception: - return f"{start} – {end}" - - return DATE_RANGE -``` - ---- - -## Integration with Babel for i18n - -### When to Use Babel - -Use Babel for **international data types** where formatting rules vary by locale: -- Dates and times -- Numbers and percentages -- Currency -- Units (distances, weights, volumes) -- Lists and conjunctions - -### Example: Locale-Aware Custom Currency (Educational Only) - -**NOTE**: FTLLexEngine has a built-in `CURRENCY()` function. This example is for educational purposes only, demonstrating how to integrate Babel in custom functions. - -```python -def CURRENCY_CUSTOM_EXAMPLE(amount: int | Decimal, *, currency_code: str = "USD", locale: str = "en_US") -> str: - """Format currency with CLDR-compliant locale-aware formatting. - - EDUCATIONAL EXAMPLE ONLY - Use built-in CURRENCY() function instead! - - This demonstrates proper Babel integration for i18n-aware formatting. - - Args: - amount: Monetary amount - currency_code: ISO 4217 currency code (USD, EUR, JPY, BHD, etc.) - locale: Babel locale identifier for formatting - - Returns: - Formatted currency string using CLDR rules - - Why the naive approach is wrong: - - Hardcoded symbol placement (always before amount) - wrong for many locales - - Hardcoded 2 decimals - wrong for JPY (0 decimals), BHD (3 decimals) - - Ignored locale-specific spacing and formatting rules - - Did not use CLDR data - """ - try: - from babel import numbers - - # Use Babel's format_currency for proper CLDR compliance - return numbers.format_currency(amount, currency_code, locale=locale) - except ImportError: - # Fallback if Babel not installed (should never happen in FTLLexEngine env) - return f"{currency_code} {amount:.2f}" - except Exception: - # Fluent functions must never crash - return f"{currency_code} {amount}" -``` - -### Why Babel Integration Matters - -```python -# WRONG - Naive implementation -def CURRENCY_NAIVE(amount: int | Decimal, *, currency_code: str = "USD") -> str: - symbols = {"USD": "$", "EUR": "€", "JPY": "¥"} - symbol = symbols.get(currency_code, currency_code) - return f"{symbol}{amount:,.2f}" # [WRONG] Many problems! - -# Problems with naive approach: -# 1. Always puts symbol before amount (wrong for lv_LV, de_DE) -# 2. Always uses 2 decimals (wrong for JPY: 0, BHD: 3) -# 3. Uses English thousand separators (wrong for de_DE: period, lv_LV: space) -# 4. Missing currency codes (180+ currencies in ISO 4217) -``` - -```python -# CORRECT - Babel integration -from babel import numbers - -def CURRENCY_CORRECT(amount: int | Decimal, *, currency_code: str = "USD", locale: str = "en_US") -> str: - try: - return numbers.format_currency(amount, currency_code, locale=locale) - except Exception: - return f"{currency_code} {amount}" - -# Benefits: -# CLDR-compliant symbol placement -# Currency-specific decimal places -# Locale-specific grouping and separators -# Supports all ISO 4217 currencies -# Handles RTL languages (Arabic, Hebrew) -``` - ---- - -## Complete Examples - -### Example 1: PHONE Formatting - -```python -def PHONE(number: str, *, format_style: str = "international") -> str: - """Format phone number. - - Args: - number: Phone number (digits only or with separators) - format_style: "international", "national", or "compact" - - Returns: - Formatted phone number - """ - # Remove non-digits - digits = "".join(c for c in str(number) if c.isdigit()) - - if format_style == "international" and len(digits) >= 10: - # US/Canada format: +1 (555) 123-4567 - return f"+{digits[0]} ({digits[1:4]}) {digits[4:7]}-{digits[7:]}" - if format_style == "national" and len(digits) >= 10: - # (555) 123-4567 - return f"({digits[-10:-7]}) {digits[-7:-4]}-{digits[-4:]}" - if format_style == "compact": - # 5551234567 - return digits - return number # Fallback -``` - -**Usage**: -```python -bundle.add_function("PHONE", PHONE) -bundle.add_resource(""" -support-phone = Call us at { PHONE($number, formatStyle: "international") } -""") - -result, _ = bundle.format_pattern("support-phone", {"number": "15551234567"}) -# → "Call us at +1 (555) 123-4567" -``` - ---- - -### Example 2: MARKDOWN Rendering - -```python -import re - -def MARKDOWN(text: str, *, render: str = "html") -> str: - """Render markdown to HTML (simplified). - - Args: - text: Markdown text - render: Output format ("html" or "plain") - - Returns: - Rendered text - """ - if render == "plain": - # Strip markdown syntax - text = re.sub(r"\*\*(.*?)\*\*", r"\1", text) # Remove **bold** - text = re.sub(r"\*(.*?)\*", r"\1", text) # Remove *italic* - return re.sub(r"\[(.*?)\]\(.*?\)", r"\1", text) # Remove [links](url) - - # Simple HTML rendering - text = re.sub(r"\*\*(.*?)\*\*", r"\1", text) # **bold** - text = re.sub(r"\*(.*?)\*", r"\1", text) # *italic* - return re.sub(r"\[(.*?)\]\((.*?)\)", r'\1', text) # [text](url) -``` - -**Usage**: -```python -bundle.add_function("MARKDOWN", MARKDOWN) -bundle.add_resource(""" -welcome-html = { MARKDOWN($text, render: "html") } -welcome-plain = { MARKDOWN($text, render: "plain") } -""") - -result, _ = bundle.format_pattern("welcome-html", { - "text": "Welcome to **FTLLexEngine**! Visit [our site](https://example.com)." -}) -# → "Welcome to FTLLexEngine! Visit our site." -``` - ---- - -### Example 3: FILESIZE Formatting - -```python -def FILESIZE(bytes_count: int, *, precision: int = 2) -> str: - """Format file size in human-readable format. - - Args: - bytes_count: Number of bytes - precision: Decimal precision - - Returns: - Human-readable file size (e.g., "1.23 MB") - """ - try: - bytes_count = float(bytes_count) - units = ["B", "KB", "MB", "GB", "TB", "PB"] - - for unit in units: - if bytes_count < 1024.0: - return f"{bytes_count:.{precision}f} {unit}" - bytes_count /= 1024.0 +from ftllexengine import FluentBundle - return f"{bytes_count:.{precision}f} EB" - except (ValueError, TypeError): - return f"{bytes_count} bytes" -``` +def FILESIZE(value: int) -> str: + return f"{value / 1_000_000:.2f} MB" -**Usage**: -```python +bundle = FluentBundle("en_US", use_isolating=False) bundle.add_function("FILESIZE", FILESIZE) -bundle.add_resource(""" -file-info = { $filename } ({ FILESIZE($bytes) }) -""") - -result, _ = bundle.format_pattern("file-info", { - "filename": "video.mp4", - "bytes": 157286400 -}) -# → "video.mp4 (150.00 MB)" +bundle.add_resource("attachment = Size: { FILESIZE($bytes) }") +result, errors = bundle.format_pattern("attachment", {"bytes": 15_000_000}) +assert errors == () +assert result == "Size: 15.00 MB" ``` ---- - -### Example 4: DURATION Formatting +## Reusable Registry ```python -def DURATION(seconds: int | Decimal, *, format_style: str = "long") -> str: - """Format duration in human-readable format. - - Args: - seconds: Duration in seconds - format_style: "long", "short", or "compact" - - Returns: - Formatted duration - """ - try: - seconds = int(seconds) - days, remainder = divmod(seconds, 86400) - hours, remainder = divmod(remainder, 3600) - minutes, secs = divmod(remainder, 60) +from ftllexengine import FluentBundle +from ftllexengine.runtime import create_default_registry - if format_style == "long": - parts = [] - if days > 0: - parts.append(f"{days} day{'s' if days != 1 else ''}") - if hours > 0: - parts.append(f"{hours} hour{'s' if hours != 1 else ''}") - if minutes > 0: - parts.append(f"{minutes} minute{'s' if minutes != 1 else ''}") - if secs > 0 or not parts: - parts.append(f"{secs} second{'s' if secs != 1 else ''}") - return ", ".join(parts) +registry = create_default_registry() - if format_style == "short": - parts = [] - if days > 0: - parts.append(f"{days}d") - if hours > 0: - parts.append(f"{hours}h") - if minutes > 0: - parts.append(f"{minutes}m") - if secs > 0 or not parts: - parts.append(f"{secs}s") - return " ".join(parts) +def UPPER(value: str) -> str: + return value.upper() - # Compact - if days > 0: - return f"{days}d{hours}h" - if hours > 0: - return f"{hours}h{minutes}m" - if minutes > 0: - return f"{minutes}m{secs}s" - return f"{secs}s" - except (ValueError, TypeError): - return str(seconds) +registry.register(UPPER, ftl_name="UPPER") +bundle = FluentBundle("en_US", functions=registry, use_isolating=False) ``` -**Usage**: -```python -bundle.add_function("DURATION", DURATION) -bundle.add_resource(""" -video-duration = Duration: { DURATION($seconds, formatStyle: "short") } -""") - -result, _ = bundle.format_pattern("video-duration", {"seconds": 3725}) -# → "Duration: 1h 2m 5s" -``` - ---- - -## Testing Custom Functions +## Locale Injection -### Unit Tests +Use `@fluent_function(inject_locale=True)` when the callable needs the bundle’s locale code appended as the last positional argument. ```python -import pytest from ftllexengine import FluentBundle +from ftllexengine.runtime import fluent_function -class TestFileSizeFunction: - """Test FILESIZE custom function.""" - - def test_filesize_bytes(self) -> None: - """Test file size in bytes.""" - bundle = FluentBundle("en_US", use_isolating=False) - bundle.add_function("FILESIZE", FILESIZE) - bundle.add_resource('size = { FILESIZE($bytes) }') - - result, errors = bundle.format_pattern("size", {"bytes": 512}) - assert result == "512.00 B" - assert not errors - - def test_filesize_megabytes(self) -> None: - """Test file size in megabytes.""" - bundle = FluentBundle("en_US", use_isolating=False) - bundle.add_function("FILESIZE", FILESIZE) - bundle.add_resource('size = { FILESIZE($bytes) }') - - result, errors = bundle.format_pattern("size", {"bytes": 157286400}) - assert result == "150.00 MB" - assert not errors - - def test_filesize_precision(self) -> None: - """Test file size with custom precision.""" - bundle = FluentBundle("en_US", use_isolating=False) - bundle.add_function("FILESIZE", FILESIZE) - bundle.add_resource('size = { FILESIZE($bytes, precision: 4) }') - - result, errors = bundle.format_pattern("size", {"bytes": 1536}) - assert result == "1.5000 KB" - assert not errors - - def test_filesize_error_handling(self) -> None: - """Test file size error handling.""" - bundle = FluentBundle("en_US", use_isolating=False) - bundle.add_function("FILESIZE", FILESIZE) - bundle.add_resource('size = { FILESIZE($bytes) }') - - result, errors = bundle.format_pattern("size", {"bytes": "invalid"}) - assert "bytes" in result # Should return fallback - assert not errors # Function handles error gracefully -``` - -### Property-Based Testing with Hypothesis - -```python -from hypothesis import given, strategies as st, settings - -class TestFileSizeHypothesis: - """Property-based tests for FILESIZE function.""" - - @given(bytes_count=st.integers(min_value=0, max_value=10**15)) - @settings(max_examples=100) - def test_filesize_never_crashes(self, bytes_count: int) -> None: - """FILESIZE must never crash for any valid byte count.""" - bundle = FluentBundle("en_US", use_isolating=False) - bundle.add_function("FILESIZE", FILESIZE) - bundle.add_resource('size = { FILESIZE($bytes) }') - - result, errors = bundle.format_pattern("size", {"bytes": bytes_count}) - assert isinstance(result, str) - assert len(result) > 0 - assert not errors - - @given( - bytes_count=st.integers(min_value=0, max_value=10**15), - precision=st.integers(min_value=0, max_value=10) - ) - @settings(max_examples=100) - def test_filesize_precision_never_crashes(self, bytes_count: int, precision: int) -> None: - """FILESIZE with precision must never crash.""" - bundle = FluentBundle("en_US", use_isolating=False) - bundle.add_function("FILESIZE", FILESIZE) - bundle.add_resource(f"size = {{ FILESIZE($bytes, precision: {precision}) }}") +@fluent_function(inject_locale=True) +def GREETING(name: str, locale_code: str) -> str: + return "Sveiki" if locale_code.startswith("lv") else "Hello" - result, errors = bundle.format_pattern("size", { - "bytes": bytes_count, - }) - assert isinstance(result, str) - assert len(result) > 0 +bundle = FluentBundle("lv_LV", use_isolating=False) +bundle.add_function("GREETING", GREETING) +bundle.add_resource("msg = { GREETING($name) }, { $name }!") +result, errors = bundle.format_pattern("msg", {"name": "Anna"}) +assert errors == () +assert result == "Sveiki, Anna!" ``` ---- - -## Best Practices and Pitfalls - -### Best Practices - -1. **Use `*` for keyword-only arguments** - ```python - def CUSTOM(value: str, *, option: str = "default") -> str: - ... - ``` - -2. **Return type must be `str`** - ```python - def CUSTOM(value: int) -> str: # Returns str - return str(value) - ``` - -3. **Never raise exceptions** - ```python - def CUSTOM(value: str) -> str: - try: - return process(value) - except Exception: - return value # Graceful fallback - ``` - -4. **Use factory pattern for locale-aware functions** - ```python - def make_custom_function(bundle_locale: str) -> Callable: - def CUSTOM(value: str) -> str: - # Use bundle_locale here - ... - return CUSTOM - - bundle.add_function("CUSTOM", make_custom_function(bundle.locale)) - ``` - -5. **Integrate with Babel for i18n data types** - ```python - from babel import numbers, dates - - def CUSTOM(value: int | Decimal, *, locale: str = "en_US") -> str: - return numbers.format_decimal(value, locale=locale) - ``` - -6. **Write comprehensive tests** - - Unit tests for expected behavior - - Property-based tests with Hypothesis for robustness - - Error handling tests - -7. **Document parameters clearly** - ```python - def CUSTOM(value: str, *, format_style: str = "default") -> str: - """Short description. - - Args: - value: Description of value parameter - format_style: Description of format_style parameter - - Returns: - Description of return value - """ - ... - ``` - ---- - -### Common Pitfalls: What to Avoid - -1. **Raising exceptions** - ```python - # WRONG - def CUSTOM(value: int) -> str: - if value < 0: - raise ValueError("Negative values not allowed") # [WRONG] Crashes! - return str(value) - - # CORRECT - def CUSTOM(value: int) -> str: - if value < 0: - return "0" # Graceful fallback - return str(value) - ``` - -2. **Not using keyword-only arguments** - ```python - # WRONG - def CUSTOM(value: str, option: str = "default") -> str: # [WRONG] Missing * - ... - - # CORRECT - def CUSTOM(value: str, *, option: str = "default") -> str: # Uses * - ... - ``` - -3. **Returning non-string types** - ```python - # WRONG - def CUSTOM(value: int) -> int: # [WRONG] Returns int - return value * 2 - - # CORRECT - def CUSTOM(value: int) -> str: # Returns str - return str(value * 2) - ``` - -4. **Using camelCase for parameters** - ```python - # WRONG - def CUSTOM(value: str, *, formatStyle: str = "default") -> str: # [WRONG] camelCase - ... - - # CORRECT - def CUSTOM(value: str, *, format_style: str = "default") -> str: # snake_case - ... - ``` - -5. **Hardcoding locale-specific formatting** - ```python - # WRONG - Only works for US locale - def CUSTOM_NUMBER(value: int | Decimal) -> str: - return f"${value:,.2f}" # [WRONG] Always uses $ and US formatting - - # CORRECT - Uses Babel for locale-aware formatting - def CUSTOM_NUMBER(value: int | Decimal, *, locale: str = "en_US") -> str: - from babel import numbers - return numbers.format_currency(value, "USD", locale=locale) - ``` - -6. **Not handling invalid input** - ```python - # WRONG - Crashes on invalid input - def FILESIZE(bytes_count: int) -> str: - return f"{bytes_count / 1024:.2f} KB" # [WRONG] Crashes if bytes_count is string - - # CORRECT - Handles invalid input - def FILESIZE(bytes_count: int) -> str: - try: - return f"{float(bytes_count) / 1024:.2f} KB" - except (ValueError, TypeError): - return f"{bytes_count} bytes" # Fallback - ``` - -7. **Ignoring thread safety** - ```python - # WRONG - Using global mutable state - _cache = {} # [WRONG] Not thread-safe! - - def CUSTOM(value: str) -> str: - if value not in _cache: - _cache[value] = expensive_computation(value) - return _cache[value] - - # CORRECT - Use a module-level dict protected by a lock, or a ContextVar - # for task-scoped state. ContextVar provides automatic async task isolation. - from contextvars import ContextVar - - _task_cache: ContextVar[dict[str, str]] = ContextVar("_task_cache", default={}) - - def CUSTOM(value: str) -> str: - cache = _task_cache.get() - if value not in cache: - cache = {**cache, value: expensive_computation(value)} - _task_cache.set(cache) - return cache[value] - ``` - ---- - -## Summary - -**Key Takeaways**: - -1. **Use built-in functions** for common data types (NUMBER, DATETIME, CURRENCY) -2. **Create custom functions** for domain-specific formatting needs -3. **Follow naming conventions**: UPPERCASE for function names, snake_case for parameters -4. **Never raise exceptions** - always return graceful fallbacks -5. **Use factory pattern** for locale-aware functions -6. **Integrate with Babel** for CLDR-compliant i18n formatting -7. **Test comprehensively** with unit tests and property-based tests - -**For More Examples**: -- See [examples/custom_functions.py](../examples/custom_functions.py) for complete working code -- See [tests/fuzz/test_runtime_bundle_functions.py](../tests/fuzz/test_runtime_bundle_functions.py) for fuzz test patterns - -**Questions?** -- Open an issue: https://github.com/resoltico/ftllexengine/issues -- Read the full API docs: [DOC_00_Index.md](DOC_00_Index.md) - ---- +## Guidance -**Python Requirement**: 3.13+ +- Prefer readable fallback values to raising exceptions from custom functions. +- Do not mutate a bundle from inside a formatting callback. +- Use a registry when the same function set must be reused across many bundles. diff --git a/docs/DATA_INTEGRITY_ARCHITECTURE.md b/docs/DATA_INTEGRITY_ARCHITECTURE.md index b7129425..38ca2b0e 100644 --- a/docs/DATA_INTEGRITY_ARCHITECTURE.md +++ b/docs/DATA_INTEGRITY_ARCHITECTURE.md @@ -1,323 +1,33 @@ --- -afad: "3.3" -version: "0.161.0" -domain: "architecture" -updated: "2026-03-21" +afad: "3.5" +version: "0.163.0" +domain: ARCHITECTURE +updated: "2026-04-22" route: - keywords: [data integrity, strict mode, FrozenFluentError, IntegrityCache, CacheCorruptionError, WriteConflictError, BLAKE2b, checksum, write-once, idempotent, RWLock, security, FormattingIntegrityError, SyntaxIntegrityError] - questions: ["how does data integrity work?", "what is strict mode?", "how does cache checksum verification work?", "what is write-once mode?", "how to detect cache corruption?", "what is the data integrity architecture?"] + keywords: [data integrity, strict mode, FrozenFluentError, IntegrityCheckFailedError, cache audit, boot validation] + questions: ["how does strict mode relate to integrity?", "what audit evidence does the runtime expose?", "what is boot validation for?"] --- # Data Integrity Architecture -This document describes the architectural design for data integrity in FTLLexEngine. +**Purpose**: Summarize the fail-fast and immutable-evidence patterns used by FTLLexEngine. +**Prerequisites**: Familiarity with `FluentBundle`, `FluentLocalization`, and `LocalizationBootConfig`. -## Design Principle: Configurable Data Safety +## Overview -The system separates two distinct safety concerns: formatting error handling and cache integrity. +The library pushes validation as early as possible and represents runtime failures as immutable, structured evidence: -**Formatting error handling** defaults to fail-fast (`strict=True`). On any formatting error, `FormattingIntegrityError` is raised immediately. Soft error recovery (returning a placeholder like `{$amount}` alongside errors as data) is opt-in via `strict=False`. The Fluent specification defines fallback behavior as valid — FTLLexEngine defaults to the stricter interpretation to prevent silent data errors in production. +- `FrozenFluentError` captures formatting and parsing failures without mutable side channels. +- `FormattingIntegrityError`, `SyntaxIntegrityError`, and `IntegrityCheckFailedError` surface strict-mode failures explicitly. +- `LoadSummary`, `ResourceLoadResult`, and boot schema results provide startup evidence for localization initialization. +- `CacheConfig(enable_audit=True)` exposes immutable audit-log entries for cache operations. -**Cache integrity** is always-on by default (`integrity_strict=True`). Cache corruption is a system-level failure independent of how an application handles formatting errors. +## Strict Mode -| Failure Mode | Default (`strict=True`) | Soft Mode (`strict=False`) | -|:-------------|:------------------------|:---------------------------| -| Missing message | Raise `FormattingIntegrityError` | Return placeholder `{message-id}` + error | -| Missing variable | Raise `FormattingIntegrityError` | Return placeholder `{$var}` + error | -| Cache corruption | Raise `CacheCorruptionError` (always) | Raise `CacheCorruptionError` (always) | -| Error mutation | Immutable `FrozenFluentError` (always) | Immutable `FrozenFluentError` (always) | +- `FluentBundle` and `FluentLocalization` default to `strict=True`. +- Resource junk and formatting failures raise instead of silently degrading. +- `strict=False` is an explicit opt-in for fallback-return behavior. -**Rationale for strict default:** A bank displaying `{$amount}` when a variable is missing may show no financial figure at all — which is worse than an explicit error. By defaulting to `strict=True`, FTLLexEngine guarantees that every successful `format_pattern()` return is a correct, fully-resolved result. Applications that prefer graceful degradation opt in to soft mode with `strict=False`. +## Boot Validation -## Architecture Overview - -``` -+------------------------------------------------------------------+ -| FluentBundle / FluentLocalization | -| +------------------------------------------------------------+ | -| | Strict Mode Layer | | -| | Responsibility: Fail-fast on ANY formatting error | | -| | Raises: FormattingIntegrityError | | -| | Scope: Both FluentBundle AND FluentLocalization | | -| +------------------------------------------------------------+ | -| | | -| +------------------------------------------------------------+ | -| | Error Layer | | -| | Responsibility: Immutable, verifiable error objects | | -| | Type: FrozenFluentError (sealed, content-addressed) | | -| +------------------------------------------------------------+ | -| | | -| +------------------------------------------------------------+ | -| | Cache Layer | | -| | Responsibility: Checksum-verified format result caching | | -| | Type: IntegrityCache (BLAKE2b-128, write-once option) | | -| | Integrity: Independent of strict mode (always-on default) | | -| +------------------------------------------------------------+ | -| | | -| +------------------------------------------------------------+ | -| | Integrity Exception Layer (cross-cutting) | | -| | Responsibility: System failure signaling (not Fluent) | | -| | Types: DataIntegrityError hierarchy | | -| | Used by: Strict Mode Layer and Cache Layer | | -| +------------------------------------------------------------+ | -+------------------------------------------------------------------+ -``` - -## Component Responsibilities - -### Strict Mode Layer - -**Responsibility:** Provide fail-fast behavior at both bundle and localization levels. - -**Design Decision:** Strict mode is the default (`strict=True`). Soft error recovery is opt-out via `strict=False`. - -**Why fail-fast by default?** - -Silent fallbacks are the primary source of data errors in localized applications. When formatting fails and returns `{$amount}`, the application may render no financial figure at all without any indication that something went wrong. Defaulting to fail-fast eliminates this silent failure class. - -| Consideration | Rationale | -|:--------------|:----------| -| Financial safety | Missing balance variable must not silently render as `{$amount}` | -| Explicit opt-out | Applications that prefer graceful degradation set `strict=False` deliberately | -| Spec compliance | Fluent spec defines fallback behavior; FTLLexEngine enforces it only when explicitly requested | -| Development feedback | Errors surface immediately rather than appearing as mysterious placeholders in the UI | - -**Why offer soft mode at all?** - -Some applications — particularly those with partially-translated resources or during migration — prefer graceful degradation: show something rather than crash. These applications opt in to soft mode: - -**Soft mode activation:** -- `FluentBundle(..., strict=False)` - explicit opt-out to soft error recovery -- `FluentLocalization(..., strict=False)` - propagates to all bundles -- Combine with `cache=CacheConfig()` for caching - -**Invariant:** When `strict=True`, NO formatting operation returns a fallback value. Every error path raises `FormattingIntegrityError`. This invariant holds at both levels: -- `FluentBundle.format_pattern()` - raises on resolver errors -- `FluentLocalization.format_value()` / `format_pattern()` - raises on missing messages across all locales - -### Strict Mode vs Cache Integrity - -These are independent concerns controlled by separate parameters: - -| Parameter | Controls | Default | -|:----------|:---------|:--------| -| `FluentBundle(strict=...)` | Formatting error handling (raise vs return fallback) | `True` | -| `FluentLocalization(strict=...)` | Propagated to each bundle | `True` | -| `CacheConfig(integrity_strict=...)` | Cache corruption response (raise vs evict) | `True` | - -**Rationale:** Cache corruption is a system-level integrity failure independent of how an application handles formatting errors. A non-strict application (returning fallbacks for missing translations) should still detect and report cache corruption. The default `integrity_strict=True` ensures this. - -### Error Layer (FrozenFluentError) - -**Responsibility:** Provide immutable, verifiable error objects. - -**Design Decisions:** - -| Decision | Rationale | -|:---------|:----------| -| Sealed class (`@final`) | Prevents subclass invariant violations | -| Content-addressed (BLAKE2b-128) | Enables corruption detection | -| Slots-only | Memory efficiency, prevents dynamic attributes | -| Composition over inheritance | `ErrorCategory` enum replaces class hierarchy | - -**Content Hash Composition:** - -The BLAKE2b-128 content hash includes ALL error fields for complete audit trail integrity: - -1. **Core fields:** `message`, `category.value` -2. **Diagnostic (if present):** - - Core: `code.name`, `message` - - Location: `span` (start, end, line, column as 4-byte big-endian) - - Context: `hint`, `help_url`, `function_name`, `argument_name`, `expected_type`, `received_type`, `ftl_location` - - Metadata: `severity`, `resolution_path` (each element) -3. **Context (if present):** `input_value`, `locale_code`, `parse_type`, `fallback_value` - -**Length-Prefixing:** All string fields are length-prefixed (4-byte big-endian UTF-8 byte length) before hashing. This prevents collision attacks where concatenating different field sequences produces identical byte streams (e.g., `("ab", "c")` vs `("a", "bc")`). - -**Sentinel Bytes:** None values are distinguished from empty values using sentinel bytes, preventing collision between `span=None` and `span=SourceSpan(0, 0, 0, 0)`. - -**Freeze Ordering:** `Exception.__init__` is called before `_frozen` is set to `True`. This ensures compatibility with alternative Python runtimes (PyPy, free-threaded builds) where `Exception.__init__` may route through `__setattr__`. - -**Invariants:** -- All attributes frozen after `__init__` completes -- `verify_integrity()` always returns True for uncorrupted errors -- Hash is stable for object lifetime - -**Security Properties:** -- Constant-time hash comparison (`hmac.compare_digest`) prevents timing attacks -- Surrogate handling (`errors="surrogatepass"`) prevents Unicode exploits -- Complete field coverage prevents metadata tampering - -### Cache Layer (IntegrityCache) - -**Responsibility:** Provide checksum-verified caching of format results. - -**Design Decisions:** - -| Decision | Rationale | -|:---------|:----------| -| BLAKE2b-128 checksums | Fast cryptographic hash, 16-byte overhead per entry | -| Write-once option | Prevents data races from overwriting cached results | -| Independent integrity_strict | Cache corruption detection decoupled from formatting strict mode | -| Audit logging | Compliance and debugging for financial systems | -| Sequence numbers | Monotonic ordering for audit trail integrity | -| Idempotent write detection | Content-hash comparison for thundering herd tolerance | -| Node budget protection | `_MAX_HASHABLE_NODES` prevents DAG expansion attacks on all paths | - -**Configuration via CacheConfig:** - -`CacheConfig` validates all parameters at construction time (fail-fast). Invalid values raise `ValueError` immediately rather than deferring to `IntegrityCache.__init__`. - -```python -config = CacheConfig( - size=500, - write_once=True, - integrity_strict=True, # Cache corruption: raise (default) - enable_audit=True, -) -bundle = FluentBundle("en", cache=config) # strict=True is the default -``` - -**Checksum Composition:** - -The BLAKE2b-128 checksum includes ALL entry fields for complete audit trail integrity: - -1. **Content:** `formatted` (UTF-8 encoded, length-prefixed message output) -2. **Errors:** Each error's `content_hash` bytes (BLAKE2b-128, always present; `FrozenFluentError` is `@final`) -3. **Metadata:** - - `created_at`: 8-byte IEEE 754 double (monotonic timestamp) - - `sequence`: 8-byte signed big-endian integer (audit trail ordering) - -**Length-Prefixing:** All variable-length fields (formatted string, error messages) are length-prefixed (4-byte big-endian UTF-8 byte length) before hashing, preventing collision attacks from field concatenation. - -This means different entries with identical content will have different checksums if their metadata differs. This is correct behavior: the checksum protects the complete entry, not just its content. - -**Idempotent Write Detection:** - -In write-once mode, concurrent writes of the same message pose a challenge: multiple threads may resolve the same message simultaneously (thundering herd). Without idempotent detection, all but the first thread would trigger `WriteConflictError`, even though all produced identical results. - -The cache computes a **content-only hash** (excluding metadata like `created_at` and `sequence`) to detect idempotent writes: - -1. Second write arrives for an existing key -2. Cache computes content hash of new entry: `BLAKE2b-128(formatted, errors)` -3. Compares with existing entry's content hash (constant-time via `hmac.compare_digest`) -4. If identical: increment `idempotent_writes` counter, return silently (benign race) -5. If different: TRUE conflict - raise `WriteConflictError` (integrity_strict) or log (non-strict) - -This allows write-once mode to work correctly under load without false-positive conflicts. - -**Type-Tagging for Cache Keys:** - -Cache keys must distinguish between values that hash identically but have different types. The `_make_hashable()` function applies type-tagging to prevent collisions: - -| Type | Tag Format | Purpose | -|:-----|:-----------|:--------| -| `bool` | `("__bool__", value)` | Distinguish `True` from `1` (`bool` subclasses `int`) | -| `int` | `("__int__", value)` | Distinguish `1` from `True` (must be checked after `bool`) | -| `Decimal` | `("__decimal__", str(value))` | Preserve scale for CLDR plural rules (`Decimal("1.0")` vs `Decimal("1.00")`) | -| `FluentNumber` | `("__fluentnumber__", type, value, formatted, precision)` | Preserve underlying type and formatting info | -| `list` | `("__list__", tuple(...))` | Distinguish from tuple in formatted output | -| `tuple` | `("__tuple__", tuple(...))` | Distinguish from list | - -**CLDR Plural Rule Preservation:** Decimal type-tagging uses `str(value)` instead of the numeric value. This preserves scale information critical for CLDR plural rules: `Decimal("1.0")` and `Decimal("1.00")` must cache separately because some locales have scale-dependent plural forms. - -**Recursive Verification:** - -The `IntegrityCacheEntry.verify()` method performs recursive integrity verification: - -1. Recomputes entry checksum from current field values -2. For each `FrozenFluentError` in the errors tuple, calls `verify_integrity()` -3. Returns `True` only if ALL checks pass (entry checksum AND all error content hashes) - -This defense-in-depth approach detects corruption at any level of the data hierarchy. - -**Invariants:** -- Every `get()` verifies checksum before returning -- Corrupted entries are never returned (either raise or evict) -- Sequence numbers never decrease, even after `clear()` -- Metadata tampering is detected by checksum verification -- Node budget enforced on all recursive `_make_hashable` paths (including Mapping ABC) - -**Trade-offs:** -- Checksum verification adds ~0.1 microseconds per `get()` - acceptable for financial correctness -- Write-once mode prevents legitimate cache updates - use only when data race prevention is critical -- Different timestamps produce different checksums - not suitable for content-only comparison -- Idempotent detection adds hash comparison on cache hit - negligible for concurrent workloads - -### Integrity Exception Layer - -**Responsibility:** Signal system failures distinct from Fluent errors. - -**Design Decision:** Separate hierarchy from `FrozenFluentError` because: -1. Different error domains (system failure vs. translation issue) -2. Different handling requirements (escalate vs. fallback) -3. Prevents confusion when catching exceptions - -**Hierarchy:** -``` -DataIntegrityError (base - immutable after construction) -+-- CacheCorruptionError - Checksum mismatch detected -+-- FormattingIntegrityError - Strict mode formatting failure -+-- ImmutabilityViolationError - Mutation attempt on frozen object -+-- IntegrityCheckFailedError - Generic verification failure (boot/load) -+-- SyntaxIntegrityError - Strict mode syntax error during resource loading -+-- WriteConflictError - Write-once cache violation -``` - -**Invariant:** All integrity exceptions carry `IntegrityContext` for post-mortem analysis. - -## Concurrency Model - -### Lock Architecture - -| Component | Lock Type | Rationale | -|:----------|:----------|:----------| -| `FluentBundle._rwlock` | Custom `RWLock` | High-concurrency format operations; read-heavy; writer-preference; reentrant reads supported (custom function re-entry); write reentrancy and downgrade prohibited | -| `FluentLocalization._lock` | Custom `RWLock` | Brief read lock for bundle map lookup; write lock for lazy bundle creation; exclusive writes for add_resource/add_function | -| `IntegrityCache._lock` | `threading.Lock` | Short operations; no reentrant acquisition in the call path; `RLock` thread-tracking overhead eliminated | -| `LocaleContext._cache_lock` | `threading.Lock` | Class-level LRU cache; two sequential (never nested) acquisitions; `RLock` thread-tracking overhead unnecessary | - -## Security Model - -### Attack Vectors Mitigated - -| Attack | Mitigation | -|:-------|:-----------| -| Error mutation after logging | `__setattr__` raises after freeze | -| Subclass overrides | `@final` + `__init_subclass__` raises | -| Dynamic attribute injection | `__slots__` only, no `__dict__` | -| Hash tampering | Constant-time comparison | -| Cache poisoning | Checksum verification on every read | -| Data race overwrites | Write-once semantics option | -| Metadata tampering | Complete field coverage in checksums/hashes | -| Diagnostic field tampering | All 12 Diagnostic fields included in error hash | -| Timestamp/sequence forgery | Metadata included in cache checksum | -| Field concatenation collision | Length-prefixing prevents `("ab","c")` = `("a","bc")` | -| Type confusion in cache keys | Type-tagging distinguishes `1` from `1.0` from `True` | -| Decimal scale loss | `str(Decimal)` preserves scale for CLDR plural rules | -| Nested error corruption | Recursive verification checks entry AND all contained errors | -| DAG expansion in cache keys | Node budget (`_MAX_HASHABLE_NODES`) on all recursive paths | - -### Trust Boundaries - -1. **External input** (FTL source, format arguments): Validated at parser/bundle boundary -2. **Cached data**: Verified on every read via checksum -3. **Error objects**: Immutable after construction -4. **Configuration**: Validated at `CacheConfig` construction (fail-fast) - -## Performance Characteristics - -| Operation | Overhead | Acceptable Because | -|:----------|:---------|:-------------------| -| Error hash computation | ~0.1 microseconds | One-time at construction | -| Cache checksum verification | ~0.1 microseconds | Correctness over speed for financial | -| Slots vs dict | ~200 bytes saved per error | Net memory reduction | -| RWLock vs RLock | Negligible for writes, better for reads | Concurrent format operations scale linearly | - -## References - -- [FrozenFluentError API](DOC_05_Errors.md) -- [ErrorCategory Enum](DOC_05_Errors.md) -- [FluentBundle strict mode](DOC_01_Core.md) -- [Thread Safety](THREAD_SAFETY.md) -- [BLAKE2 Specification](https://www.blake2.net/) +`LocalizationBootConfig.boot()` is the canonical fail-fast startup path when resources must be clean before the application accepts traffic. It combines resource loading, `require_clean()`, required-message enforcement, and message-schema validation. The config object is intentionally one-shot: create a new instance instead of reusing one after `boot()` or `boot_simple()`. diff --git a/docs/DOC_00_Index.md b/docs/DOC_00_Index.md index 1b6b1061..7c63e088 100644 --- a/docs/DOC_00_Index.md +++ b/docs/DOC_00_Index.md @@ -1,350 +1,182 @@ --- -afad: "3.3" -version: "0.161.0" +afad: "3.5" +version: "0.163.0" domain: INDEX -updated: "2026-03-21" +updated: "2026-04-22" route: - keywords: [api reference, documentation, exports, imports, AsyncFluentBundle, fluentbundle, fluentlocalization, cache-audit, boot-validation, LocalizationBootConfig, validate_message_variables, require_locale_code, make_fluent_number, parse_fluent_number, FluentNumber, decimal_value, iso, currency, get_currency_decimal_digits, LocaleCode, normalize_locale, get_system_locale, LoadSummary, ResourceLoadResult, FallbackInfo, LoadStatus, PathResourceLoader, ResourceLoader, LocalizationCacheStats, parse_stream, parse_stream_ftl, add_resource_stream, incremental, streaming, async, asyncio, CurrencyCode, TerritoryCode, NewType, require_date, require_datetime, require_fluent_number, require_currency_code, require_territory_code, detect_cycles, WarningSeverity] - questions: ["what classes are available?", "how to import ftllexengine?", "what are the module exports?", "how do I validate localization at boot?", "how do I validate one message schema?", "how do I canonicalize a locale code?", "how do I construct a FluentNumber manually?", "how do I parse a FluentNumber?", "how do I get the cache audit log?", "how to import ISO introspection?", "how do I boot FluentLocalization with strict validation?", "what is LocalizationBootConfig?", "how do I validate a date at a boundary?", "how do I validate a datetime?", "how do I validate a FluentNumber?", "how do I validate an ISO currency or territory code?"] + keywords: [api index, routing, FluentBundle, FluentLocalization, parse_ftl, FunctionRegistry, FrozenFluentError, introspection] + questions: ["where is a symbol documented?", "which file documents the runtime APIs?", "which file documents locale parsing and introspection APIs?", "where are syntax, parsing, and diagnostics references?"] --- # FTLLexEngine API Reference Index -## Module Exports - -### Root Exports (`from ftllexengine import ...`) -```python -from ftllexengine import ( - # Core API - AsyncFluentBundle, # Async-native wrapper around FluentBundle; offloads to thread pool - FluentBundle, - FluentLocalization, - CacheConfig, # Cache configuration dataclass - parse_ftl, - parse_stream_ftl, # Incremental FTL parse from line iterator, yields entries - serialize_ftl, - validate_resource, # FTL resource validation (no Babel required) - FluentNumber, # Immutable formatted-number wrapper - FluentValue, # Type alias for function argument values - fluent_function, # Decorator for custom functions - make_fluent_number, # Construct FluentNumber from int/Decimal - clear_module_caches, # Clear all library caches - # Errors - FrozenFluentError, # Immutable error type with ErrorCategory - ErrorCategory, # Error classification enum - FrozenErrorContext, # Context for parse/formatting errors - # Data Integrity - DataIntegrityError, - FormattingIntegrityError, - ImmutabilityViolationError, - SyntaxIntegrityError, - CacheCorruptionError, - WriteConflictError, - IntegrityCheckFailedError, - IntegrityContext, - # Localization boot (require Babel) - LocalizationBootConfig, # One-shot boot orchestrator for strict-mode assembly - LoadSummary, # Aggregate of all resource load results from initialization - ResourceLoadResult, # Immutable result of a single resource load attempt - FallbackInfo, # Immutable record of a locale fallback event - ResourceLoader, # Protocol for loading FTL resources (structural typing) - PathResourceLoader, # Disk-based loader with path-traversal prevention - LocalizationCacheStats, # Cache statistics across all locales - # Locale utilities (no Babel required) - LoadStatus, # Enum: SUCCESS, NOT_FOUND, ERROR, SKIPPED - LocaleCode, # Type alias for BCP-47 / POSIX locale codes - normalize_locale, # Convert BCP-47 to canonical lowercase POSIX form - get_system_locale, # Detect locale from OS environment variables - # Boundary validators (no Babel required) - require_locale_code, # Validate and canonicalize a locale code - require_date, # Validate date; rejects datetime subtypes - require_datetime, # Validate datetime; rejects plain date - require_fluent_number, # Validate FluentNumber at a system boundary - # Parsing return type (no Babel required; lazy-loaded) - ParseResult, # tuple[T | None, tuple[FrozenFluentError, ...]] - # Message introspection (no Babel required) - MessageVariableValidationResult, - validate_message_variables, - # Analysis (no Babel required) - detect_cycles, # Detect cycles in a dependency graph - # Diagnostics extras (no Babel required) - WarningSeverity, # Warning severity enum (ERROR, WARNING, INFO) - # ISO utilities (importable without Babel; call-time Babel for type guards/lookups) - CurrencyCode, # NewType for ISO 4217 currency codes - TerritoryCode, # NewType for ISO 3166-1 alpha-2 territory codes - get_currency_decimal_digits, # ISO 4217 decimal precision (no Babel required) - is_valid_currency_code, # TypeIs guard; Babel required at call time - is_valid_territory_code, # TypeIs guard; Babel required at call time - require_currency_code, # Validate ISO 4217 code at a boundary - require_territory_code, # Validate ISO 3166-1 alpha-2 code at a boundary - get_cldr_version, - # Metadata - __version__, - __fluent_spec_version__, - __spec_url__, - __recommended_encoding__, -) -``` - -### AST Types (`from ftllexengine.syntax.ast import ...`) -```python -from ftllexengine.syntax.ast import ( - Resource, Message, Term, Pattern, Attribute, - Placeable, TextElement, Identifier, Junk, Comment, - VariableReference, MessageReference, TermReference, FunctionReference, - SelectExpression, Variant, NumberLiteral, StringLiteral, - CallArguments, NamedArgument, Span, Annotation, - # Type aliases (PEP 695) - Entry, Expression, PatternElement, InlineExpression, VariantKey, - SelectorExpression, FTLLiteral, ASTNode, -) -``` - -### Syntax Utilities (`from ftllexengine.syntax import ...`) -```python -from ftllexengine.syntax import ( - FluentParserV1, ASTVisitor, ASTTransformer, - Cursor, ParseError, ParseResult, - parse, serialize, - SerializationValidationError, SerializationDepthError, -) -``` - -### Errors & Validation (`from ftllexengine.diagnostics import ...`) -```python -from ftllexengine.diagnostics import ( - FrozenFluentError, ErrorCategory, FrozenErrorContext, - Diagnostic, DiagnosticCode, - ValidationResult, ValidationError, ValidationWarning, WarningSeverity, - DiagnosticFormatter, OutputFormat, -) -``` - -### Introspection (`from ftllexengine.introspection import ...`) -```python -from ftllexengine.introspection import ( - # Message introspection (no Babel required) - introspect_message, MessageIntrospection, - extract_variables, extract_references, extract_references_by_attribute, - clear_introspection_cache, - VariableInfo, FunctionCallInfo, ReferenceInfo, - # Variable schema validation (no Babel required) - validate_message_variables, MessageVariableValidationResult, - # ISO introspection (requires Babel) - TerritoryCode, CurrencyCode, # Type aliases - TerritoryInfo, CurrencyInfo, # Data classes - get_territory, get_currency, get_currency_decimal_digits, - list_territories, list_currencies, - get_territory_currencies, # Lookup functions - is_valid_territory_code, is_valid_currency_code, # Type guards - require_currency_code, require_territory_code, # Boundary validators - clear_iso_cache, # Cache management - BabelImportError, # Exception - get_cldr_version, # Babel/CLDR diagnostics -) -``` - -### Enums (`from ftllexengine.enums import ...`) -```python -from ftllexengine.enums import ( - CommentType, # COMMENT, GROUP, RESOURCE - VariableContext, # PATTERN, SELECTOR, VARIANT, FUNCTION_ARG - ReferenceKind, # MESSAGE, TERM - LoadStatus, # SUCCESS, PARTIAL, FAILED -) -``` - -### Analysis (`from ftllexengine.analysis import ...`) -```python -from ftllexengine.analysis import detect_cycles, entry_dependency_set, make_cycle_key -``` - -### Validation (`from ftllexengine.validation import ...`) -```python -from ftllexengine.validation import validate_resource -``` - -### Core Utilities (`from ftllexengine.core import ...`) -```python -from ftllexengine.core import ( - DepthGuard, depth_clamp, # Depth limiting -) -from ftllexengine.core.babel_compat import ( - BabelImportError, require_babel, # Babel availability checking - is_babel_available, get_locale_class, # Babel introspection - get_cldr_version, # CLDR version -) -``` - -### Runtime (`from ftllexengine.runtime import ...`) -```python -from ftllexengine.runtime import ( - CacheAuditLogEntry, FluentBundle, FluentNumber, - FunctionRegistry, WriteLogEntry, fluent_function, - create_default_registry, get_shared_registry, - number_format, datetime_format, currency_format, make_fluent_number, - select_plural_category, -) -``` - -### Localization (`from ftllexengine.localization import ...`) -```python -from ftllexengine.localization import ( - CacheAuditLogEntry, FluentLocalization, LocalizationBootConfig, LocalizationCacheStats, - PathResourceLoader, ResourceLoader, - LoadStatus, LoadSummary, ResourceLoadResult, FallbackInfo, - MessageId, LocaleCode, ResourceId, FTLSource, -) -``` - -### Parsing (`from ftllexengine.parsing import ...`) - -> **Babel required** for this entire module. - -```python -from ftllexengine.parsing import ( - # Parse functions (require Babel) - parse_decimal, parse_fluent_number, parse_date, parse_datetime, parse_currency, - # Type guards - is_valid_decimal, is_valid_date, is_valid_datetime, is_valid_currency, - # Type alias - ParseResult, - # Cache management - clear_date_caches, clear_currency_caches, -) -``` - ---- - -## File Routing Table - -| Query Pattern | Target File | Domain | -|:--------------|:------------|:-------| -| AsyncFluentBundle, FluentBundle, FluentLocalization, add_resource, add_resource_stream, format_pattern, require_clean, validate_message_schemas, validate_message_variables, require_locale_code, require_date, require_datetime, require_fluent_number, get_cache_audit_log, LocaleCode, normalize_locale, get_system_locale, LocalizationBootConfig, LoadSummary, ResourceLoadResult, FallbackInfo, LoadStatus, PathResourceLoader, ResourceLoader, LocalizationCacheStats | [DOC_01_Core.md](DOC_01_Core.md) | Core API | -| Message, Term, Pattern, Resource, AST, Identifier, FTLLiteral, NamedArgument, dataclass | [DOC_02_Types.md](DOC_02_Types.md) | AST Types | -| parse, parse_stream, parse_stream_ftl, serialize, parse_ftl, serialize_ftl, parse_decimal, parse_fluent_number, parse_date, parse_currency, FluentParserV1 | [DOC_03_Parsing.md](DOC_03_Parsing.md) | Parsing | -| NUMBER, DATETIME, CURRENCY, FluentNumber, make_fluent_number, fluent_function, add_function, FunctionRegistry, CacheAuditLogEntry, clear_module_caches | [DOC_04_Runtime.md](DOC_04_Runtime.md) | Runtime | -| FrozenFluentError, ErrorCategory, FrozenErrorContext, BabelImportError, DepthGuard, ValidationResult, Diagnostic, DiagnosticCode | [DOC_05_Errors.md](DOC_05_Errors.md) | Errors | -| detect_cycles, entry_dependency_set, make_cycle_key, validate_resource | [DOC_04_Runtime.md](DOC_04_Runtime.md) | Analysis | -| extract_variables, extract_references, extract_references_by_attribute, introspect_message, MessageIntrospection | [DOC_02_Types.md](DOC_02_Types.md) | Message Introspection | -| TerritoryInfo, CurrencyInfo, get_territory, get_currency, require_currency_code, require_territory_code, ISO 3166, ISO 4217 | [DOC_02_Types.md](DOC_02_Types.md) | ISO Introspection | -| WarningSeverity, detect_cycles | [DOC_05_Errors.md](DOC_05_Errors.md) | Diagnostics / Analysis | - ---- - -## Submodule Structure - -``` -ftllexengine/ - __init__.py # Public API exports - constants.py # MAX_DEPTH, MAX_IDENTIFIER_LENGTH, MAX_LOCALE_LENGTH_HARD_LIMIT, cache limits, fallback strings, ISO_4217_DECIMAL_DIGITS - enums.py # CommentType, VariableContext, ReferenceKind, LoadStatus - integrity.py # DataIntegrityError hierarchy (6 sealed subclasses), IntegrityContext - localization/ - __init__.py # FluentLocalization, LocalizationBootConfig, PathResourceLoader, ResourceLoader, LoadStatus, LoadSummary, ResourceLoadResult, FallbackInfo, type aliases - types.py # PEP 695 type aliases: MessageId, LocaleCode, ResourceId, FTLSource - loading.py # ResourceLoader protocol, PathResourceLoader, LoadSummary, ResourceLoadResult, FallbackInfo - boot.py # LocalizationBootConfig (strict-mode boot API) - orchestrator.py # FluentLocalization class, LocalizationCacheStats - introspection/ - __init__.py # Introspection API exports (message + ISO) - message.py # MessageIntrospection, introspect_message, extract_variables, extract_references, extract_references_by_attribute - iso.py # TerritoryInfo, CurrencyInfo, get_territory, get_currency, require_currency_code, require_territory_code - core/ - __init__.py # Core exports (BabelImportError, DepthGuard, FrozenFluentError, require_non_empty_str) - babel_compat.py # BabelImportError, Babel lazy import infrastructure - depth_guard.py # DepthGuard, depth_clamp - errors.py # ErrorCategory, FrozenErrorContext, FrozenFluentError (re-exports) - identifier_validation.py # FTL identifier validation utilities - validators.py # require_positive_int, require_date, require_datetime, require_fluent_number (internal validators) - locale_utils.py # require_locale_code, get_system_locale, normalize_locale, get_babel_locale, clear_locale_cache - analysis/ - __init__.py # Analysis API exports - graph.py # detect_cycles, entry_dependency_set, make_cycle_key - syntax/ - __init__.py # AST exports, parse(), serialize() - ast.py # AST node definitions - cursor.py # Cursor, ParseError, ParseResult - position.py # Source position tracking - validation_helpers.py # Shared validation helper functions - validator.py # SemanticValidator (AST node-level validation) - visitor.py # ASTVisitor, ASTTransformer - serializer.py # FluentSerializer - parser/ - __init__.py # FluentParserV1, ParseContext - core.py # Parser main entry point - primitives.py # Parser primitive operations (identifier, number, string literal parsing) - rules.py # ParseContext, pattern/expression parsing - whitespace.py # Whitespace handling - runtime/ - __init__.py # Runtime exports - bundle.py # FluentBundle - cache.py # IntegrityCache, IntegrityCacheEntry, CacheStats - function_bridge.py # FunctionRegistry, fluent_function - function_metadata.py # Function metadata helpers (requires_locale_injection, etc.) - functions.py # Built-in functions, create_default_registry, get_shared_registry - locale_context.py # Locale context for runtime formatting - plural_rules.py # select_plural_category - resolution_context.py # GlobalDepthGuard, ResolutionContext - resolver.py # FluentResolver - rwlock.py # RWLock (internal readers-writer lock) - value_types.py # FluentNumber, make_fluent_number, FluentValue, FluentFunction, FunctionSignature - parsing/ - __init__.py # Parsing API exports (requires Babel) - numbers.py # parse_decimal, parse_fluent_number - dates.py # parse_date, parse_datetime - currency.py # parse_currency - guards.py # Type guards - diagnostics/ - __init__.py # Error exports - errors.py # FrozenFluentError, ErrorCategory, FrozenErrorContext - codes.py # DiagnosticCode, Diagnostic, SourceSpan - templates.py # ErrorTemplate - validation.py # ValidationResult, ValidationError, ValidationWarning - formatter.py # DiagnosticFormatter, OutputFormat - validation/ - __init__.py # validate_resource - resource.py # Standalone resource validation -``` - ---- - -## Type Alias Quick Reference - -| Alias | Definition | Location | -|:------|:-----------|:---------| -| `FluentValue` | `str \| int \| Decimal \| datetime \| date \| FluentNumber \| None \| Sequence[FluentValue] \| Mapping[str, FluentValue]` | runtime/value_types.py (exported from root) | -| `ParseResult[T]` | `tuple[T \| None, tuple[FrozenFluentError, ...]]` | parsing/__init__.py (also `ftllexengine`) | -| `MessageId` | `str` | localization.py | -| `LocaleCode` | `str` | localization.py | -| `ResourceId` | `str` | localization.py | -| `FTLSource` | `str` | localization.py | -| `TerritoryCode` | `NewType("TerritoryCode", str)` | introspection/iso.py | -| `CurrencyCode` | `NewType("CurrencyCode", str)` | introspection/iso.py | -| `Entry` | `Message \| Term \| Comment \| Junk` | syntax/ast.py | -| `PatternElement` | `TextElement \| Placeable` | syntax/ast.py | -| `Expression` | `SelectExpression \| InlineExpression` | syntax/ast.py | -| `InlineExpression` | Union of inline AST types (superset of SelectorExpression) | syntax/ast.py | -| `SelectorExpression` | Restricted subset of InlineExpression valid as SelectExpression.selector (excludes Placeable) | syntax/ast.py | -| `FTLLiteral` | `StringLiteral \| NumberLiteral` | syntax/ast.py | -| `ASTNode` | Union of all AST node types | syntax/ast.py | -| `VariantKey` | `Identifier \| NumberLiteral` | syntax/ast.py | - ---- - -## Cross-Reference: Non-Reference Documentation - -| File | Purpose | Audience | -|:-----|:--------|:---------| -| [README.md](../README.md) | Entry point, installation, quick start | Humans | -| [QUICK_REFERENCE.md](QUICK_REFERENCE.md) | Cheat sheet, common patterns | Humans | -| [PARSING_GUIDE.md](PARSING_GUIDE.md) | Bi-directional parsing tutorial | Humans | -| [TYPE_HINTS_GUIDE.md](TYPE_HINTS_GUIDE.md) | Python 3.13+ type patterns | Humans | -| [TERMINOLOGY.md](TERMINOLOGY.md) | Glossary, disambiguation | Both | -| [MIGRATION.md](MIGRATION.md) | fluent.runtime migration guide | Humans | -| [CUSTOM_FUNCTIONS_GUIDE.md](CUSTOM_FUNCTIONS_GUIDE.md) | Custom function tutorial | Humans | -| [LOCALE_GUIDE.md](LOCALE_GUIDE.md) | Locale formatting behavior (str vs NUMBER) | Humans | -| [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) | Validation architecture and responsibility matrix | Humans | -| [THREAD_SAFETY.md](THREAD_SAFETY.md) | Thread safety architectural decisions | Humans | - ---- +## Routing Table + +| Symbol | File | Section | +|:-------|:-----|:--------| +| `FluentBundle` | [DOC_01_Core.md](DOC_01_Core.md) | `FluentBundle` | +| `AsyncFluentBundle` | [DOC_01_Core.md](DOC_01_Core.md) | `AsyncFluentBundle` | +| `FluentLocalization` | [DOC_01_Core.md](DOC_01_Core.md) | `FluentLocalization` | +| `LocalizationBootConfig` | [DOC_01_Core.md](DOC_01_Core.md) | `LocalizationBootConfig` | +| `PathResourceLoader` | [DOC_01_Core.md](DOC_01_Core.md) | `PathResourceLoader` | +| `ResourceLoader` | [DOC_01_Core.md](DOC_01_Core.md) | `ResourceLoader` | +| `LoadStatus` | [DOC_01_Core.md](DOC_01_Core.md) | `LoadStatus` | +| `LoadSummary` | [DOC_01_Core.md](DOC_01_Core.md) | `LoadSummary` | +| `ResourceLoadResult` | [DOC_01_Core.md](DOC_01_Core.md) | `ResourceLoadResult` | +| `FallbackInfo` | [DOC_01_Core.md](DOC_01_Core.md) | `FallbackInfo` | +| `LocalizationCacheStats` | [DOC_01_Core.md](DOC_01_Core.md) | `LocalizationCacheStats` | +| `FluentNumber` | [DOC_02_Types.md](DOC_02_Types.md) | `FluentNumber` | +| `FluentValue` | [DOC_02_Types.md](DOC_02_Types.md) | `FluentValue` | +| `ParseResult` | [DOC_02_Types.md](DOC_02_Types.md) | `ParseResult` | +| `LocaleCode` | [DOC_02_Types.md](DOC_02_Types.md) | `LocaleCode` | +| `MessageId` | [DOC_02_Types.md](DOC_02_Types.md) | `MessageId` | +| `ResourceId` | [DOC_02_Types.md](DOC_02_Types.md) | `ResourceId` | +| `FTLSource` | [DOC_02_Types.md](DOC_02_Types.md) | `FTLSource` | +| `CurrencyCode` | [DOC_02_Types.md](DOC_02_Types.md) | `CurrencyCode` | +| `TerritoryCode` | [DOC_02_Types.md](DOC_02_Types.md) | `TerritoryCode` | +| `Span` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Span` | +| `Annotation` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Annotation` | +| `Identifier` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Identifier` | +| `Resource` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Resource` | +| `Message` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Message` | +| `Term` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Term` | +| `Attribute` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Attribute` | +| `Comment` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Comment` | +| `Junk` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Junk` | +| `Pattern` | [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md) | `Pattern` | +| `TextElement` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `TextElement` | +| `Placeable` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `Placeable` | +| `SelectExpression` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `SelectExpression` | +| `Variant` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `Variant` | +| `StringLiteral` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `StringLiteral` | +| `NumberLiteral` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `NumberLiteral` | +| `VariableReference` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `VariableReference` | +| `MessageReference` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `MessageReference` | +| `TermReference` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `TermReference` | +| `FunctionReference` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `FunctionReference` | +| `CallArguments` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `CallArguments` | +| `NamedArgument` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `NamedArgument` | +| `Entry` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `Entry` | +| `PatternElement` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `PatternElement` | +| `Expression` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `Expression` | +| `SelectorExpression` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `SelectorExpression` | +| `FTLLiteral` | [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md) | `FTLLiteral` | +| `MessageVariableValidationResult` | [DOC_02_Types.md](DOC_02_Types.md) | `MessageVariableValidationResult` | +| `MessageIntrospection` | [DOC_02_Types.md](DOC_02_Types.md) | `MessageIntrospection` | +| `VariableInfo` | [DOC_02_Types.md](DOC_02_Types.md) | `VariableInfo` | +| `FunctionCallInfo` | [DOC_02_Types.md](DOC_02_Types.md) | `FunctionCallInfo` | +| `ReferenceInfo` | [DOC_02_Types.md](DOC_02_Types.md) | `ReferenceInfo` | +| `TerritoryInfo` | [DOC_02_Types.md](DOC_02_Types.md) | `TerritoryInfo` | +| `CurrencyInfo` | [DOC_02_Types.md](DOC_02_Types.md) | `CurrencyInfo` | +| `CommentType` | [DOC_02_Types.md](DOC_02_Types.md) | `CommentType` | +| `VariableContext` | [DOC_02_Types.md](DOC_02_Types.md) | `VariableContext` | +| `ReferenceKind` | [DOC_02_Types.md](DOC_02_Types.md) | `ReferenceKind` | +| `parse_ftl` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `parse_ftl` | +| `parse_stream_ftl` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `parse_stream_ftl` | +| `serialize_ftl` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `serialize_ftl` | +| `validate_resource` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `validate_resource` | +| `FluentParserV1` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `FluentParserV1` | +| `parse` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `parse` | +| `parse_stream` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `parse_stream` | +| `serialize` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `serialize` | +| `Cursor` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `Cursor` | +| `ftllexengine.syntax.ParseResult` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `ftllexengine.syntax.ParseResult` | +| `ParseError` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `ParseError` | +| `SerializationValidationError` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `SerializationValidationError` | +| `SerializationDepthError` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `SerializationDepthError` | +| `ASTVisitor` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `ASTVisitor` | +| `ASTTransformer` | [DOC_03_Parsing.md](DOC_03_Parsing.md) | `ASTTransformer` | +| `parse_decimal` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `parse_decimal` | +| `parse_fluent_number` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `parse_fluent_number` | +| `parse_date` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `parse_date` | +| `parse_datetime` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `parse_datetime` | +| `parse_currency` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `parse_currency` | +| `is_valid_decimal` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `is_valid_decimal` | +| `is_valid_date` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `is_valid_date` | +| `is_valid_datetime` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `is_valid_datetime` | +| `is_valid_currency` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `is_valid_currency` | +| `clear_date_caches` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `clear_date_caches` | +| `clear_currency_caches` | [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md) | `clear_currency_caches` | +| `CacheConfig` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `CacheConfig` | +| `FunctionRegistry` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `FunctionRegistry` | +| `fluent_function` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `fluent_function` | +| `create_default_registry` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `create_default_registry` | +| `get_shared_registry` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `get_shared_registry` | +| `number_format` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `number_format` | +| `datetime_format` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `datetime_format` | +| `currency_format` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `currency_format` | +| `select_plural_category` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `select_plural_category` | +| `make_fluent_number` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `make_fluent_number` | +| `clear_module_caches` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `clear_module_caches` | +| `CacheAuditLogEntry` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `CacheAuditLogEntry` | +| `WriteLogEntry` | [DOC_04_Runtime.md](DOC_04_Runtime.md) | `WriteLogEntry` | +| `detect_cycles` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `detect_cycles` | +| `normalize_locale` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `normalize_locale` | +| `get_system_locale` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `get_system_locale` | +| `require_locale_code` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `require_locale_code` | +| `require_currency_code` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `require_currency_code` | +| `require_territory_code` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `require_territory_code` | +| `is_valid_currency_code` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `is_valid_currency_code` | +| `is_valid_territory_code` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `is_valid_territory_code` | +| `get_currency_decimal_digits` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `get_currency_decimal_digits` | +| `get_cldr_version` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `get_cldr_version` | +| `__version__` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `__version__` | +| `__fluent_spec_version__` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `__fluent_spec_version__` | +| `__spec_url__` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `__spec_url__` | +| `__recommended_encoding__` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `__recommended_encoding__` | +| `require_date` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `require_date` | +| `require_datetime` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `require_datetime` | +| `require_fluent_number` | [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md) | `require_fluent_number` | +| `validate_message_variables` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `validate_message_variables` | +| `introspect_message` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `introspect_message` | +| `extract_variables` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `extract_variables` | +| `extract_references` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `extract_references` | +| `extract_references_by_attribute` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `extract_references_by_attribute` | +| `clear_introspection_cache` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `clear_introspection_cache` | +| `get_territory` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `get_territory` | +| `get_currency` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `get_currency` | +| `list_territories` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `list_territories` | +| `list_currencies` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `list_currencies` | +| `get_territory_currencies` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `get_territory_currencies` | +| `clear_iso_cache` | [DOC_04_Introspection.md](DOC_04_Introspection.md) | `clear_iso_cache` | +| `FrozenFluentError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `FrozenFluentError` | +| `ErrorCategory` | [DOC_05_Errors.md](DOC_05_Errors.md) | `ErrorCategory` | +| `ParseTypeLiteral` | [DOC_05_Errors.md](DOC_05_Errors.md) | `ParseTypeLiteral` | +| `FrozenErrorContext` | [DOC_05_Errors.md](DOC_05_Errors.md) | `FrozenErrorContext` | +| `BabelImportError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `BabelImportError` | +| `ErrorTemplate` | [DOC_05_Errors.md](DOC_05_Errors.md) | `ErrorTemplate` | +| `DataIntegrityError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `DataIntegrityError` | +| `IntegrityContext` | [DOC_05_Errors.md](DOC_05_Errors.md) | `IntegrityContext` | +| `CacheCorruptionError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `CacheCorruptionError` | +| `ImmutabilityViolationError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `ImmutabilityViolationError` | +| `IntegrityCheckFailedError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `IntegrityCheckFailedError` | +| `FormattingIntegrityError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `FormattingIntegrityError` | +| `SyntaxIntegrityError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `SyntaxIntegrityError` | +| `WriteConflictError` | [DOC_05_Errors.md](DOC_05_Errors.md) | `WriteConflictError` | +| `ValidationResult` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `ValidationResult` | +| `ValidationError` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `ValidationError` | +| `ValidationWarning` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `ValidationWarning` | +| `WarningSeverity` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `WarningSeverity` | +| `Diagnostic` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `Diagnostic` | +| `DiagnosticCode` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `DiagnosticCode` | +| `DiagnosticFormatter` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `DiagnosticFormatter` | +| `OutputFormat` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `OutputFormat` | +| `SourceSpan` | [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md) | `SourceSpan` | +| `scripts/validate_docs.py` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/validate_docs.py` | +| `scripts/validate_version.py` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/validate_version.py` | +| `scripts/run_examples.py` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/run_examples.py` | +| `check.sh` | [DOC_06_Testing.md](DOC_06_Testing.md) | `check.sh` | +| `scripts/lint.sh` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/lint.sh` | +| `scripts/test.sh` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/test.sh` | +| `scripts/fuzz_hypofuzz.sh` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/fuzz_hypofuzz.sh` | +| `scripts/fuzz_atheris.sh` | [DOC_06_Testing.md](DOC_06_Testing.md) | `scripts/fuzz_atheris.sh` | +| `pytest.mark.fuzz` | [DOC_06_Testing.md](DOC_06_Testing.md) | `pytest.mark.fuzz` | + +## Guide Links + +- [QUICK_REFERENCE.md](QUICK_REFERENCE.md) +- [CUSTOM_FUNCTIONS_GUIDE.md](CUSTOM_FUNCTIONS_GUIDE.md) +- [LOCALE_GUIDE.md](LOCALE_GUIDE.md) +- [PARSING_GUIDE.md](PARSING_GUIDE.md) +- [RELEASE_PROTOCOL.md](RELEASE_PROTOCOL.md) +- [VALIDATION_GUIDE.md](VALIDATION_GUIDE.md) diff --git a/docs/DOC_01_Core.md b/docs/DOC_01_Core.md index cc78b58e..f4afa2fc 100644 --- a/docs/DOC_01_Core.md +++ b/docs/DOC_01_Core.md @@ -1,56 +1,21 @@ --- -afad: "3.3" -version: "0.161.0" +afad: "3.5" +version: "0.163.0" domain: CORE -updated: "2026-03-21" +updated: "2026-04-22" route: - keywords: [AsyncFluentBundle, FluentBundle, FluentLocalization, add_resource, add_resource_stream, format_pattern, has_message, has_attribute, require_clean, validate_message_schemas, validate_message_variables, require_locale_code, require_date, require_datetime, require_fluent_number, validate_resource, introspect_message, introspect_term, get_cache_audit_log, strict, CacheConfig, IntegrityCache, CacheStats, LocalizationCacheStats, CacheAuditLogEntry, LocaleCode, normalize_locale, get_system_locale, LoadStatus, LoadSummary, ResourceLoadResult, FallbackInfo, ResourceLoader, PathResourceLoader, incremental, streaming, line iterator, async, asyncio, event loop, thread pool, CurrencyCode, TerritoryCode, NewType, date, datetime, FluentNumber] - questions: ["how to format message?", "how to add translations?", "how to validate ftl?", "how do I validate one message schema at boot?", "how do I validate localization at boot?", "how to check message exists?", "how do I canonicalize a locale code?", "is bundle thread safe?", "how to use strict mode?", "how to enable cache audit?", "how do I get the cache audit log?", "how do I validate a date at a boundary?", "how do I validate a datetime?", "how do I validate a FluentNumber?"] + keywords: [FluentBundle, AsyncFluentBundle, FluentLocalization, LocalizationBootConfig, PathResourceLoader, LoadSummary, ResourceLoadResult, LocalizationCacheStats, require_clean, get_load_summary] + questions: ["how do I format messages?", "how do I load multiple locales?", "how do I inspect localization load results?", "how do I boot localization safely?"] --- # Core API Reference --- -## `CacheConfig` - -`CacheConfig` is a frozen dataclass that encapsulates all cache configuration parameters for `FluentBundle` and `FluentLocalization`. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class CacheConfig: - size: int = 1000 - write_once: bool = False - integrity_strict: bool = True - enable_audit: bool = False - max_audit_entries: int = 10000 - max_entry_weight: int = 10000 - max_errors_per_entry: int = 50 -``` - -### Parameters -| Field | Type | Default | Description | -|:------|:-----|:--------|:------------| -| `size` | `int` | 1000 | Maximum cache entries (LRU eviction). | -| `write_once` | `bool` | False | Reject updates to existing keys (data race prevention). | -| `integrity_strict` | `bool` | True | Raise on checksum mismatch and write-once violations. | -| `enable_audit` | `bool` | False | Maintain audit log of cache operations. | -| `max_audit_entries` | `int` | 10000 | Maximum audit log entries before oldest eviction. | -| `max_entry_weight` | `int` | 10000 | Maximum memory weight for cached results. | -| `max_errors_per_entry` | `int` | 50 | Maximum errors per cache entry. | - -### Constraints -- Immutable: Frozen dataclass; fields cannot be modified after construction. -- Validation: `__post_init__` rejects non-positive `size`, `max_entry_weight`, `max_errors_per_entry`, `max_audit_entries`. -- Independence: `integrity_strict` controls cache corruption response independently of `FluentBundle.strict` (formatting behavior). -- Import: `from ftllexengine import CacheConfig` or `from ftllexengine.runtime.cache_config import CacheConfig`. -- Usage: Pass `cache=CacheConfig()` to enable caching with defaults; `cache=None` (default) disables caching. - ---- - ## `FluentBundle` +Class that formats FTL messages for one locale. + ### Signature ```python class FluentBundle: @@ -66,128 +31,33 @@ class FluentBundle: max_nesting_depth: int | None = None, max_expansion_size: int | None = None, strict: bool = True, - ) -> None: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale` | `str` | Y | BCP 47 locale code (positional-only, ASCII alphanumeric only). | -| `use_isolating` | `bool` | N | Wrap interpolated values in Unicode bidi marks. | -| `cache` | `CacheConfig \| None` | N | Cache configuration. `None` disables caching (default). `CacheConfig()` enables with defaults. | -| `functions` | `FunctionRegistry \| None` | N | Custom function registry (must be `FunctionRegistry`, not `dict`). | -| `max_source_size` | `int \| None` | N | Maximum FTL source length in characters (default: 10,000,000). | -| `max_nesting_depth` | `int \| None` | N | Maximum placeable nesting depth (default: 100). | -| `max_expansion_size` | `int \| None` | N | Maximum total characters produced during resolution (default: 1,000,000). Prevents Billion Laughs DoS. | -| `strict` | `bool` | N | Fail-fast mode (default `True`): raises `FormattingIntegrityError` on ANY error; raises `SyntaxIntegrityError` when `add_resource` produces junk. Pass `False` for soft-error recovery (returns `(fallback, errors)` tuple). | - -### Constraints -- Return: FluentBundle instance. -- Raises: `ValueError` on invalid locale format (must be ASCII alphanumeric with underscore/hyphen separators) or locale code exceeding 1000 characters (DoS prevention). -- State: Creates internal message/term registries. -- Thread: Always thread-safe via internal RWLock. -- Import: `FunctionRegistry` from `ftllexengine.runtime.function_bridge`. `FluentValue` from `ftllexengine.core.value_types`. -- Strict: Default `strict=True` raises `FormattingIntegrityError` on any resolution error and `SyntaxIntegrityError` on junk FTL. Use `strict=False` for soft-error recovery; errors are then returned as a tuple. Errors are cached before raising; subsequent cache hits re-raise without re-resolution. -- Cache: Security parameters expose `IntegrityCache` features for financial-grade applications. - ---- - -## `FluentBundle.for_system_locale` - -### Signature -```python -@classmethod -def for_system_locale( - cls, - *, - use_isolating: bool = True, - cache: CacheConfig | None = None, - functions: FunctionRegistry | None = None, - max_source_size: int | None = None, - max_nesting_depth: int | None = None, - max_expansion_size: int | None = None, - strict: bool = True, -) -> FluentBundle: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `use_isolating` | `bool` | N | Wrap interpolated values in Unicode bidi marks. | -| `cache` | `CacheConfig \| None` | N | Cache configuration. `None` disables (default). | -| `functions` | `FunctionRegistry \| None` | N | Custom function registry (must be `FunctionRegistry`, not `dict`). | -| `max_source_size` | `int \| None` | N | Maximum FTL source length in characters (default: 10,000,000). | -| `max_nesting_depth` | `int \| None` | N | Maximum placeable nesting depth (default: 100). | -| `max_expansion_size` | `int \| None` | N | Maximum total characters during resolution (default: 1,000,000). | -| `strict` | `bool` | N | Fail-fast mode (default `True`): raises on errors. Pass `False` for soft-error recovery. | - -### Constraints -- Return: FluentBundle with system locale. -- Raises: `RuntimeError` if locale cannot be determined. -- State: Delegates to `get_system_locale(raise_on_failure=True)`. -- Thread: Safe. - ---- - -## `FluentBundle.add_resource` - -### Signature -```python -def add_resource( - self, - source: str, - /, - *, - source_path: str | None = None -) -> tuple[Junk, ...]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | FTL source code (positional-only). | -| `source_path` | `str \| None` | N | Path for error messages. | - -### Constraints -- Return: Tuple of Junk entries (syntax errors). Empty if parse succeeded. -- Raises: `TypeError` if source is not a str. `SyntaxIntegrityError` in strict mode if parsing produces any Junk. -- State: Mutates internal message/term registries. Clears cache. -- Thread: Safe (RWLock). Parse occurs outside write lock; only registration requires exclusive access. - ---- - -## `FluentBundle.add_resource_stream` - -### Signature -```python -def add_resource_stream( - self, - lines: Iterable[str], - /, - *, - source_path: str | None = None -) -> tuple[Junk, ...]: + ) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `lines` | `Iterable[str]` | Y | FTL source as a line iterator (positional-only). | -| `source_path` | `str \| None` | N | Path for error messages. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `locale` | Y | Locale code for bundle | +| `use_isolating` | N | Enable bidi isolation | +| `cache` | N | Cache configuration | +| `functions` | N | Custom function registry | +| `max_source_size` | N | FTL input bound | +| `max_nesting_depth` | N | Nesting safety bound | +| `max_expansion_size` | N | Expansion safety bound | +| `strict` | N | Raise on integrity failures | ### Constraints -- Return: Tuple of Junk entries. Empty if parse succeeded. -- Purpose: Identical semantics to `add_resource()` but accepts a line iterator instead of a full string. Memory usage is proportional to the largest single FTL entry in the stream, not the total resource size. -- Raises: `SyntaxIntegrityError` in strict mode if parsing produces any Junk. -- State: Mutates internal message/term registries. Clears cache. -- Thread: Safe (RWLock). Stream is consumed and parsed outside write lock. -- Import: `from ftllexengine.runtime import FluentBundle` (method on `FluentBundle`). +- Return: Bundle with normalized locale and empty resource store +- Raises: `ValueError` on invalid locale; `TypeError` on invalid registry +- State: Mutable resources/functions; optional cache +- Thread: Safe +- Main methods: `add_resource()`, `add_resource_stream()`, `format_pattern()`, `add_function()`, `validate_resource()` --- ## `AsyncFluentBundle` -`AsyncFluentBundle` is an asyncio-native wrapper around `FluentBundle` that offloads all CPU-bound operations to a thread pool via `asyncio.to_thread()`, keeping the event loop unblocked. +Class that exposes the `FluentBundle` API for asyncio callers. ### Signature ```python @@ -204,1587 +74,250 @@ class AsyncFluentBundle: max_nesting_depth: int | None = None, max_expansion_size: int | None = None, strict: bool = True, - ) -> None: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale` | `str` | Y | BCP 47 locale code (positional-only). | -| `use_isolating` | `bool` | N | Wrap interpolated values in Unicode bidi marks. | -| `cache` | `CacheConfig \| None` | N | Cache configuration. `None` disables (default). | -| `functions` | `FunctionRegistry \| None` | N | Custom function registry. | -| `max_source_size` | `int \| None` | N | Maximum FTL source length in characters. | -| `max_nesting_depth` | `int \| None` | N | Maximum placeable nesting depth. | -| `max_expansion_size` | `int \| None` | N | Maximum total characters during resolution. | -| `strict` | `bool` | N | Fail-fast mode (default `True`). | - -### Constraints -- Return: `AsyncFluentBundle` instance. Supports `async with` (no cleanup required on exit). -- Async: `add_resource`, `add_resource_stream`, `format_pattern`, `add_function` are `async def`; offload to `asyncio.to_thread()`. -- Sync: `has_message`, `has_attribute`, `get_message_ids`, `get_message`, `get_term`, `introspect_message`, `clear_cache`, `get_cache_stats`, `get_cache_audit_log` are synchronous (O(1) dict lookups, hold read lock for nanoseconds). -- Concurrency: Underlying `FluentBundle` handles all thread safety via `RWLock`. No additional locking in `AsyncFluentBundle`. -- Strict: Same strict/soft-error semantics as `FluentBundle`. `strict=True` raises `FormattingIntegrityError`/`SyntaxIntegrityError`; `strict=False` returns `(fallback, errors)`. -- Import: `from ftllexengine import AsyncFluentBundle` or `from ftllexengine.runtime import AsyncFluentBundle`. - -```python -async with AsyncFluentBundle("en_US") as bundle: - await bundle.add_resource("greeting = Hello, { $name }!") - result, errors = await bundle.format_pattern("greeting", {"name": "Alice"}) -``` - ---- - -## `AsyncFluentBundle.for_system_locale` - -### Signature -```python -@classmethod -def for_system_locale( - cls, - *, - use_isolating: bool = True, - cache: CacheConfig | None = None, - functions: FunctionRegistry | None = None, - max_source_size: int | None = None, - max_nesting_depth: int | None = None, - max_expansion_size: int | None = None, - strict: bool = True, -) -> AsyncFluentBundle: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `use_isolating` | `bool` | N | Wrap interpolated values in Unicode bidi marks. | -| `cache` | `CacheConfig \| None` | N | Cache configuration. `None` disables (default). | -| `functions` | `FunctionRegistry \| None` | N | Custom function registry. | -| `max_source_size` | `int \| None` | N | Maximum FTL source length in characters. | -| `max_nesting_depth` | `int \| None` | N | Maximum placeable nesting depth. | -| `max_expansion_size` | `int \| None` | N | Maximum total characters during resolution. | -| `strict` | `bool` | N | Fail-fast mode (default `True`). | - -### Constraints -- Return: `AsyncFluentBundle` for the detected system locale. -- Raises: `RuntimeError` if locale cannot be determined from OS environment. -- State: Reads locale from `LANG`, `LC_ALL`, `LC_MESSAGES` environment variables. - ---- - -## `FluentBundle.format_pattern` - -### Signature -```python -def format_pattern( - self, - message_id: str, - /, - args: Mapping[str, FluentValue] | None = None, - *, - attribute: str | None = None, -) -> tuple[str, tuple[FrozenFluentError, ...]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier (positional-only). | -| `args` | `Mapping[str, FluentValue] \| None` | N | Variable arguments. | -| `attribute` | `str \| None` | N | Attribute name to format. | - -### Constraints -- Return: Tuple of (formatted_string, errors). -- Raises: `FormattingIntegrityError` in strict mode (default) if ANY error occurs. In non-strict mode (`strict=False`), never raises; all errors collected in tuple. -- State: Read-only (may update cache). -- Thread: Safe for concurrent reads. -- Duplicate Attributes: When message has duplicate attributes with same name, last attribute wins (per Fluent spec). - ---- - -## `FluentBundle.validate_resource` - -### Signature -```python -def validate_resource(self, source: str) -> ValidationResult: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | FTL source code to validate. | - -### Constraints -- Return: ValidationResult with errors and warnings. -- Cross-Resource: References to existing bundle messages/terms do not produce undefined warnings. -- Raises: `TypeError` if source is not a str. -- State: None. Does not modify bundle. -- Thread: Safe. - ---- - -## `FluentBundle.has_message` - -### Signature -```python -def has_message(self, message_id: str) -> bool: + ) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier to check. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `locale` | Y | Locale code for bundle | +| `use_isolating` | N | Enable bidi isolation | +| `cache` | N | Cache configuration | +| `functions` | N | Custom function registry | +| `max_source_size` | N | FTL input bound | +| `max_nesting_depth` | N | Nesting safety bound | +| `max_expansion_size` | N | Expansion safety bound | +| `strict` | N | Raise on integrity failures | ### Constraints -- Return: True if message exists. -- Raises: None. -- State: Read-only. -- Thread: Safe. +- Return: Async wrapper around the same runtime semantics as `FluentBundle` +- State: Delegates to an internal bundle instance +- Thread: Safe +- Async: Formatting and mutation paths run through `asyncio.to_thread()` --- -## `FluentBundle.has_attribute` - -### Signature -```python -def has_attribute(self, message_id: str, attribute: str) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier to check. | -| `attribute` | `str` | Y | Attribute name to check. | - -### Constraints -- Return: True if message exists AND has the specified attribute. -- Raises: None. -- State: Read-only. -- Thread: Safe. -- Duplicate Attributes: Checks existence only; does not indicate which definition will be used if duplicates exist (see format_pattern for last-wins resolution). - ---- - -## `FluentBundle.get_message_ids` - -### Signature -```python -def get_message_ids(self) -> list[str]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: List of all message identifiers. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- +## `FluentLocalization` -## `FluentBundle.get_message_variables` +Class that orchestrates multiple locale bundles with fallback chains. ### Signature ```python -def get_message_variables(self, message_id: str) -> frozenset[str]: +class FluentLocalization: + def __init__( + self, + locales: Iterable[LocaleCode], + resource_ids: Iterable[ResourceId] | None = None, + resource_loader: ResourceLoader | None = None, + *, + use_isolating: bool = True, + cache: CacheConfig | None = None, + on_fallback: Callable[[FallbackInfo], None] | None = None, + strict: bool = True, + ) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `locales` | Y | Fallback-ordered locale chain | +| `resource_ids` | N | Resource identifiers to load | +| `resource_loader` | N | Loader for startup resources | +| `use_isolating` | N | Enable bidi isolation | +| `cache` | N | Per-bundle cache config | +| `on_fallback` | N | Fallback callback hook | +| `strict` | N | Raise on integrity failures | ### Constraints -- Return: Frozen set of variable names (without $ prefix). -- Raises: `KeyError` if message not found. -- State: Read-only. -- Thread: Safe. +- Return: Multi-locale runtime with canonicalized locale chain +- Raises: `ValueError` on empty locales or inconsistent loader inputs +- State: Hybrid initialization. When `resource_loader` and `resource_ids` are supplied, resource loads happen eagerly during `__init__()`, bundles for those loaded locales are created eagerly, and untouched fallback bundles stay lazy until first access +- Thread: Safe +- Main methods: `format_value()`, `format_pattern()`, `add_resource()`, `add_function()`, `get_load_summary()`, `require_clean()`, `validate_message_schemas()`, `get_cache_stats()` --- -## `FluentBundle.get_all_message_variables` - -### Signature -```python -def get_all_message_variables(self) -> dict[str, frozenset[str]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Dict mapping message IDs to variable sets. -- Raises: None. -- State: Read-only. Acquires single read lock for atomic snapshot. -- Thread: Safe. Provides consistent snapshot during concurrent mutations. - ---- +## `LocalizationBootConfig` -## `FluentBundle.introspect_message` +Dataclass that composes strict localization startup into one boot contract. ### Signature ```python -def introspect_message(self, message_id: str) -> MessageIntrospection: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier. | - -### Constraints -- Return: MessageIntrospection with complete metadata. -- Raises: `KeyError` if message not found. -- State: Read-only. -- Thread: Safe. +@dataclass(frozen=True, slots=True) +class LocalizationBootConfig: + locales: tuple[str, ...] + resource_ids: tuple[str, ...] + loader: ResourceLoader | None = None + base_path: str | None = None + message_schemas: Mapping[MessageId, frozenset[str] | set[str]] | None = None + required_messages: frozenset[str] | None = None + strict: bool = True + use_isolating: bool = True + cache: CacheConfig | None = None + on_fallback: Callable[[FallbackInfo], None] | None = None +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `locales` | Y | Fallback locale chain | +| `resource_ids` | Y | Required resource list | +| `loader` | N | Custom resource loader | +| `base_path` | N | Loader path template | +| `message_schemas` | N | Expected message variables | +| `required_messages` | N | Presence contract set | +| `strict` | N | Runtime strict mode | +| `use_isolating` | N | Enable bidi isolation | +| `cache` | N | Bundle cache config | +| `on_fallback` | N | Fallback callback hook | + +### Constraints +- Return: Immutable boot plan object +- Raises: `ValueError` when loader/base_path invariants are broken +- Raises: `RuntimeError` if `boot()` or `boot_simple()` is called more than once on the same instance +- State: One-shot boot coordinator +- Thread: Safe +- Main methods: `boot()`, `boot_simple()`, `from_path()` --- -## `FluentBundle.introspect_term` - -### Signature -```python -def introspect_term(self, term_id: str) -> MessageIntrospection: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `term_id` | `str` | Y | Term identifier (without leading dash). | - -### Constraints -- Return: MessageIntrospection with complete metadata. -- Raises: `KeyError` if term not found. -- State: Read-only. -- Thread: Safe. - ---- +## `PathResourceLoader` -## `FluentBundle.add_function` +Dataclass that loads FTL source from a locale-substituted path template. ### Signature ```python -def add_function(self, name: str, func: Callable[..., FluentValue]) -> None: +@dataclass(frozen=True, slots=True) +class PathResourceLoader: + base_path: str + root_dir: str | None = None ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `name` | `str` | Y | Function name (UPPERCASE convention). | -| `func` | `Callable[..., FluentValue]` | Y | Python function returning FluentValue. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `base_path` | Y | Path template with `{locale}` | +| `root_dir` | N | Root for path safety checks | ### Constraints -- Return: None. -- Raises: `TypeError` if registry is frozen or if callable has no inspectable signature. -- State: Mutates function registry. Clears cache. -- Thread: Safe (RWLock). +- Raises: `ValueError` if `base_path` lacks `{locale}` +- Security: Rejects absolute paths and traversal-style `resource_id` values +- State: Immutable +- Thread: Safe --- -## `FluentBundle.clear_cache` - -### Signature -```python -def clear_cache(self) -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: None. -- Raises: None. -- State: Clears format cache. -- Thread: Safe. - ---- +## `ResourceLoader` -## `FluentBundle.get_cache_stats` +Protocol that supplies FTL source for a locale and resource id pair. ### Signature ```python -def get_cache_stats(self) -> CacheStats | None: +class ResourceLoader(Protocol): + def load(self, locale: LocaleCode, resource_id: ResourceId) -> FTLSource: ... + def describe_path(self, locale: LocaleCode, resource_id: ResourceId) -> str: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - ### Constraints -- Return: `CacheStats` TypedDict snapshot, or `None` if caching disabled. See `CacheStats` for all 19 fields with precise per-field types. -- Import: `from ftllexengine.runtime.cache import CacheStats` -- Raises: Never. -- State: Read-only. -- Thread: Safe. +- Purpose: Loader contract for `FluentLocalization` and `LocalizationBootConfig` +- State: Implementation-defined +- Thread: Implementation-defined --- -## `FluentBundle.get_cache_audit_log` - -### Signature -```python -def get_cache_audit_log(self) -> tuple[CacheAuditLogEntry, ...] | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Tuple of immutable `CacheAuditLogEntry` snapshots, or `None` if caching disabled. Audit-disabled caches return `()`. -- Import: `from ftllexengine.localization import CacheAuditLogEntry` -- Raises: Never. -- State: Read-only. -- Thread: Safe. - ---- +## `LoadStatus` -## `FluentBundle.locale` +Enumeration of resource-load outcomes. ### Signature ```python -@property -def locale(self) -> str: +class LoadStatus(StrEnum): + SUCCESS = "success" + NOT_FOUND = "not_found" + ERROR = "error" ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - ### Constraints -- Return: Canonical lowercase underscore `LocaleCode`. -- Raises: None. -- State: Read-only property. -- Thread: Safe. +- Purpose: Classify startup load attempts +- Type: `StrEnum` --- -## `FluentBundle.use_isolating` - -### Signature -```python -@property -def use_isolating(self) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Boolean indicating bidi isolation enabled. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- +## `ResourceLoadResult` -## `FluentBundle.cache_enabled` +Dataclass representing one locale/resource load attempt. ### Signature ```python -@property -def cache_enabled(self) -> bool: +@dataclass(frozen=True, slots=True) +class ResourceLoadResult: + locale: LocaleCode + resource_id: ResourceId + status: LoadStatus + error: Exception | None = None + source_path: str | None = None + junk_entries: tuple[Junk, ...] = () ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - ### Constraints -- Return: True if caching enabled. -- Raises: None. -- State: Read-only property. -- Thread: Safe. +- Purpose: Immutable startup/load evidence record +- State: Immutable +- Thread: Safe +- Key properties: `is_success`, `is_not_found`, `is_error`, `has_junk` --- -## `FluentBundle.cache_config` - -### Signature -```python -@property -def cache_config(self) -> CacheConfig | None: -``` - -### Constraints -- Return: `CacheConfig` when caching enabled; `None` when `cache=None` was passed to constructor. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- +## `LoadSummary` -## `FluentBundle.strict` +Dataclass aggregating all startup load results. ### Signature ```python -@property -def strict(self) -> bool: +@dataclass(frozen=True, slots=True) +class LoadSummary: + results: tuple[ResourceLoadResult, ...] ``` ### Constraints -- Return: True if strict mode enabled (fail-fast on any error). -- Raises: None. -- State: Read-only property. -- Thread: Safe. -- Note: When True, any formatting error raises FormattingIntegrityError. Errors are cached before raising; cache hits re-raise without re-resolution. +- Purpose: Summarize boot cleanliness and resource outcomes +- State: Immutable +- Thread: Safe +- Key properties: `total_attempted`, `successful`, `not_found`, `errors`, `junk_count`, `has_errors`, `has_junk`, `all_successful`, `all_clean` +- Helper methods: `get_errors()`, `get_not_found()`, `get_successful()`, `get_by_locale()`, `get_with_junk()`, `get_all_junk()` --- -## `FluentBundle.cache_usage` - -### Signature -```python -@property -def cache_usage(self) -> int: -``` - -### Constraints -- Return: Current number of cached format results. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- +## `FallbackInfo` -## `FluentBundle.max_expansion_size` +Dataclass describing one fallback-resolution event. ### Signature ```python -@property -def max_expansion_size(self) -> int: +@dataclass(frozen=True, slots=True) +class FallbackInfo: + requested_locale: LocaleCode + resolved_locale: LocaleCode + message_id: MessageId ``` ### Constraints -- Return: Maximum total characters produced during resolution. -- Raises: None. -- State: Read-only property. -- Thread: Safe. -- Default: 1000000. +- Purpose: Callback payload for fallback observability +- State: Immutable +- Thread: Safe --- -## `FluentBundle.max_nesting_depth` - -### Signature -```python -@property -def max_nesting_depth(self) -> int: -``` - -### Constraints -- Return: Maximum placeable nesting depth. -- Raises: None. -- State: Read-only property. -- Thread: Safe. -- Default: 100. - ---- +## `LocalizationCacheStats` -## `FluentBundle.max_source_size` +Typed dict representing aggregate cache metrics across localization bundles. ### Signature ```python -@property -def max_source_size(self) -> int: +class LocalizationCacheStats(CacheStats, total=True): + bundle_count: int ``` ### Constraints -- Return: Maximum FTL source size in characters. -- Raises: None. -- State: Read-only property. -- Thread: Safe. -- Default: 10,000,000. - ---- - -## `FluentBundle.function_registry` - -### Signature -```python -@property -def function_registry(self) -> FunctionRegistry: -``` - -### Constraints -- Return: The `FunctionRegistry` for this bundle. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- - -## `FluentBundle.get_babel_locale` - -### Signature -```python -def get_babel_locale(self) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Babel locale identifier string. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization` - -### Signature -```python -class FluentLocalization: - def __init__( - self, - locales: Iterable[LocaleCode], - resource_ids: Iterable[ResourceId] | None = None, - resource_loader: ResourceLoader | None = None, - *, - use_isolating: bool = True, - cache: CacheConfig | None = None, - on_fallback: Callable[[FallbackInfo], None] | None = None, - strict: bool = True, - ) -> None: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locales` | `Iterable[LocaleCode]` | Y | Locale codes in fallback order. | -| `resource_ids` | `Iterable[ResourceId] \| None` | N | FTL files to auto-load. | -| `resource_loader` | `ResourceLoader \| None` | N | Loader for FTL files. | -| `use_isolating` | `bool` | N | Wrap interpolated values in bidi marks. | -| `cache` | `CacheConfig \| None` | N | Cache configuration. `None` disables (default). | -| `on_fallback` | `Callable[[FallbackInfo], None] \| None` | N | Callback on fallback locale resolution. | -| `strict` | `bool` | N | Fail-fast mode (default `True`): raises `FormattingIntegrityError` on errors. Pass `False` for soft-error recovery. | - -### Constraints -- Return: FluentLocalization instance. -- Raises: `ValueError` if locales empty, invalid locale format, or resource_ids without loader. Locale codes must match `[a-zA-Z0-9]+([_-][a-zA-Z0-9]+)*` (BCP 47 subset). -- State: Lazy bundle initialization. Bundles created on first access. Locale format validated eagerly at construction. -- Thread: Safe (RWLock-protected; concurrent reads, exclusive writes). -- Fallback: `on_fallback` invoked when message resolved from non-primary locale. -- Strict: When True, all underlying FluentBundle instances use strict mode. `_handle_message_not_found` raises `FormattingIntegrityError`. - ---- - -## `FluentLocalization.add_resource` - -### Signature -```python -def add_resource(self, locale: LocaleCode, ftl_source: FTLSource) -> tuple[Junk, ...]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale` | `LocaleCode` | Y | Target locale boundary value; canonicalized before fallback-chain lookup. | -| `ftl_source` | `FTLSource` | Y | FTL source code. | - -### Constraints -- Return: Tuple of Junk entries (syntax errors). Empty if parse succeeded. -- Raises: `ValueError` if locale is not in the fallback chain after canonicalization, or if the locale boundary is blank/invalid. -- State: Mutates target bundle. -- Thread: Safe (RWLock write lock). - ---- - -## `FluentLocalization.add_resource_stream` - -### Signature -```python -def add_resource_stream( - self, - locale: LocaleCode, - lines: Iterable[str], - *, - source_path: str | None = None -) -> tuple[Junk, ...]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale` | `LocaleCode` | Y | Target locale; canonicalized before fallback-chain lookup. | -| `lines` | `Iterable[str]` | Y | FTL source as a line iterator. | -| `source_path` | `str \| None` | N | Path for error messages. | - -### Constraints -- Return: Tuple of Junk entries. Empty if parse succeeded. -- Purpose: Identical semantics to `add_resource()` but accepts a line iterator instead of a full string. -- Raises: `ValueError` if locale is not in the fallback chain. -- State: Mutates target bundle. -- Thread: Safe (RWLock write lock). - ---- - -## `FluentLocalization.format_value` - -### Signature -```python -def format_value( - self, - message_id: MessageId, - args: Mapping[str, FluentValue] | None = None -) -> tuple[str, tuple[FrozenFluentError, ...]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `MessageId` | Y | Message identifier. | -| `args` | `Mapping[str, FluentValue] \| None` | N | Variable arguments. | - -### Constraints -- Return: Tuple of (formatted_string, errors). -- Raises: `FormattingIntegrityError` when strict mode enabled. -- State: Read-only. -- Thread: Safe (RWLock read lock). - ---- - -## `FluentLocalization.format_pattern` - -### Signature -```python -def format_pattern( - self, - message_id: MessageId, - args: Mapping[str, FluentValue] | None = None, - *, - attribute: str | None = None, -) -> tuple[str, tuple[FrozenFluentError, ...]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `MessageId` | Y | Message identifier. | -| `args` | `Mapping[str, FluentValue] \| None` | N | Variable arguments. | -| `attribute` | `str \| None` | N | Attribute name. | - -### Constraints -- Return: Tuple of (formatted_string, errors). -- Raises: `FormattingIntegrityError` when strict mode enabled. -- State: Read-only. -- Thread: Safe (RWLock read lock). - ---- - -## `FluentLocalization.has_message` - -### Signature -```python -def has_message(self, message_id: MessageId) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `MessageId` | Y | Message identifier. | - -### Constraints -- Return: True if message exists in any locale. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.has_attribute` - -### Signature -```python -def has_attribute(self, message_id: MessageId, attribute: str) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `MessageId` | Y | Message identifier. | -| `attribute` | `str` | Y | Attribute name to check. | - -### Constraints -- Return: True if message exists in any locale AND has the specified attribute. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.get_message_ids` - -### Signature -```python -def get_message_ids(self) -> list[str]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: List of all message identifiers across all locales. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.get_message_variables` - -### Signature -```python -def get_message_variables(self, message_id: MessageId) -> frozenset[str]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `MessageId` | Y | Message identifier. | - -### Constraints -- Return: Frozen set of variable names (without $ prefix). -- Raises: `KeyError` if message not found in any locale. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.get_all_message_variables` - -### Signature -```python -def get_all_message_variables(self) -> dict[str, frozenset[str]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Dict mapping message IDs to variable sets across all locales. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.introspect_term` - -### Signature -```python -def introspect_term(self, term_id: str) -> MessageIntrospection | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `term_id` | `str` | Y | Term identifier (without leading dash). | - -### Constraints -- Return: MessageIntrospection from first bundle with term, or None. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.add_function` - -### Signature -```python -def add_function(self, name: str, func: Callable[..., FluentValue]) -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `name` | `str` | Y | Function name. | -| `func` | `Callable[..., FluentValue]` | Y | Python function returning FluentValue. | - -### Constraints -- Return: None. -- Raises: None. -- State: Stores function for existing and future bundles. -- Thread: Safe (RWLock write lock). -- Behavior: Preserves lazy bundle initialization. Functions are stored and applied when bundles are first accessed. - ---- - -## `FluentLocalization.get_bundles` - -### Signature -```python -def get_bundles(self) -> Generator[FluentBundle]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Generator yielding bundles in fallback order. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.locales` - -### Signature -```python -@property -def locales(self) -> tuple[LocaleCode, ...]: -``` - -### Constraints -- Return: Immutable tuple of canonical lowercase underscore `LocaleCode` values. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- - -## `FluentLocalization.get_load_summary` - -### Signature -```python -def get_load_summary(self) -> LoadSummary: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: LoadSummary with aggregated load results from initialization. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.require_clean` - -Method that enforces a clean initialization `LoadSummary`. - -### Signature -```python -def require_clean(self) -> LoadSummary: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Initialization `LoadSummary` when `all_clean` is true. -- Raises: `IntegrityCheckFailedError` when initialization had missing resources, load errors, or junk entries. -- State: Read-only. -- Thread: Safe. -- Scope: Checks only loader-driven initialization results. Dynamic `add_resource()` calls are excluded, matching `get_load_summary()`. - ---- - -## `FluentLocalization.validate_message_schemas` - -Method that enforces exact message-variable schemas across the fallback chain. - -### Signature -```python -def validate_message_schemas( - self, - expected_schemas: Mapping[MessageId, frozenset[str] | set[str]], -) -> tuple[MessageVariableValidationResult, ...]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `expected_schemas` | `Mapping[MessageId, frozenset[str] \| set[str]]` | Y | Expected variables per message ID. | - -### Constraints -- Return: Immutable tuple of `MessageVariableValidationResult` values in input mapping order when every schema matches exactly. -- Raises: `IntegrityCheckFailedError` when a message is missing or its declared variables differ from the expected set. -- State: Read-only. -- Thread: Safe. -- Exactness: Declared variables must equal the expected set; both missing and extra variables fail validation. -- Scope: Resolves each message through the fallback chain via `get_message()`. Terms remain available through `get_term()` plus `validate_message_variables()`. - ---- - -## `FluentLocalization.validate_message_variables` - -Method that enforces an exact variable schema for a single fallback-resolved message. - -### Signature -```python -def validate_message_variables( - self, - message_id: str, - expected_variables: frozenset[str] | set[str], -) -> MessageVariableValidationResult: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message ID to resolve through the fallback chain. | -| `expected_variables` | `frozenset[str] \| set[str]` | Y | Exact variable set expected for that message. | - -### Constraints -- Return: Immutable `MessageVariableValidationResult` when the message exists and declares exactly the expected variables. -- Raises: `IntegrityCheckFailedError` when the message is missing or its declared variables differ from `expected_variables`. -- State: Read-only. -- Thread: Safe. -- Scope: Uses the same fallback lookup semantics as `get_message()`. - ---- - -## `FallbackInfo` - -Dataclass providing fallback event metadata when FluentLocalization resolves a message from a non-primary locale. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class FallbackInfo: - requested_locale: LocaleCode - resolved_locale: LocaleCode - message_id: MessageId -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `requested_locale` | `LocaleCode` | Primary locale that was requested. | -| `resolved_locale` | `LocaleCode` | Locale that actually contained the message. | -| `message_id` | `MessageId` | Message identifier that triggered fallback. | - -### Constraints -- Return: Frozen dataclass instance. -- State: Immutable. -- Thread: Safe. -- Usage: Passed to `on_fallback` callback in FluentLocalization. -- Import: `from ftllexengine import FallbackInfo` or `from ftllexengine.localization import FallbackInfo`. - ---- - -## `LoadStatus` - -### Signature -```python -class LoadStatus(StrEnum): - SUCCESS = "success" - NOT_FOUND = "not_found" - ERROR = "error" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `SUCCESS` | Resource loaded successfully. | -| `NOT_FOUND` | Resource file not found (expected for optional locales). | -| `ERROR` | Resource load failed with error. | - -### Constraints -- StrEnum: Members ARE strings. -- Babel: NOT required. Defined in `ftllexengine.enums`; no Babel import chain. -- Import: `from ftllexengine import LoadStatus` or `from ftllexengine.localization import LoadStatus`. - ---- - -## `ResourceLoadResult` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class ResourceLoadResult: - locale: LocaleCode - resource_id: ResourceId - status: LoadStatus - error: Exception | None = None - source_path: str | None = None - junk_entries: tuple[Junk, ...] = () - - @property - def is_success(self) -> bool: ... - @property - def is_not_found(self) -> bool: ... - @property - def is_error(self) -> bool: ... - @property - def has_junk(self) -> bool: ... -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `locale` | `LocaleCode` | Locale code for this resource. | -| `resource_id` | `ResourceId` | Resource identifier (e.g., 'main.ftl'). | -| `status` | `LoadStatus` | Load status (success, not_found, error). | -| `error` | `Exception \| None` | Exception if status is ERROR. | -| `source_path` | `str \| None` | Full path to resource (if available). | -| `junk_entries` | `tuple[Junk, ...]` | Unparseable content found during parsing. | - -### Constraints -- Return: Immutable load result record. -- State: Frozen dataclass. -- Junk: `has_junk` property returns True if any Junk entries present. -- Import: `from ftllexengine import ResourceLoadResult` or `from ftllexengine.localization import ResourceLoadResult`. - ---- - -## `LoadSummary` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class LoadSummary: - results: tuple[ResourceLoadResult, ...] # sole dataclass field - - @property - def total_attempted(self) -> int: ... - @property - def successful(self) -> int: ... - @property - def not_found(self) -> int: ... - @property - def errors(self) -> int: ... - @property - def junk_count(self) -> int: ... - @property - def has_errors(self) -> bool: ... - @property - def all_successful(self) -> bool: ... - @property - def all_clean(self) -> bool: ... - @property - def has_junk(self) -> bool: ... - - def get_errors(self) -> tuple[ResourceLoadResult, ...]: ... - def get_not_found(self) -> tuple[ResourceLoadResult, ...]: ... - def get_successful(self) -> tuple[ResourceLoadResult, ...]: ... - def get_by_locale(self, locale: LocaleCode) -> tuple[ResourceLoadResult, ...]: ... - def get_with_junk(self) -> tuple[ResourceLoadResult, ...]: ... - def get_all_junk(self) -> tuple[Junk, ...]: ... -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `results` | `tuple[ResourceLoadResult, ...]` | All individual load results (sole constructor field). | - -### Constraints -- Return: Immutable summary record. -- State: Frozen dataclass. Statistics (`total_attempted`, `successful`, `not_found`, `errors`, `junk_count`) are `@property` methods computed from `results`; not constructor parameters. -- Junk: `get_with_junk()` returns results with Junk; `get_all_junk()` aggregates all Junk. -- Import: `from ftllexengine import LoadSummary` or `from ftllexengine.localization import LoadSummary`. - ---- - -## `LoadSummary.all_clean` - -Property checking if all resources loaded successfully without Junk entries. - -### Signature -```python -@property -def all_clean(self) -> bool: -``` - -### Constraints -- Return: True if errors == 0 and not_found == 0 and junk_count == 0. -- State: Read-only property. -- Purpose: Stricter validation than all_successful. Use for validation workflows requiring zero unparseable content. -- Contrast: `all_successful` ignores Junk (only checks I/O success), `all_clean` requires perfect parse. - ---- - -## `FluentLocalization.cache_enabled` - -### Signature -```python -@property -def cache_enabled(self) -> bool: -``` - -### Constraints -- Return: True if format caching enabled for all bundles. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- - -## `FluentLocalization.cache_config` - -### Signature -```python -@property -def cache_config(self) -> CacheConfig | None: -``` - -### Constraints -- Return: The `CacheConfig` instance passed to this localization, or `None` if caching disabled. -- Raises: None. -- State: Read-only property. -- Thread: Safe. - ---- - -## `FluentLocalization.get_babel_locale` - -### Signature -```python -def get_babel_locale(self) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Babel locale identifier from the primary bundle's canonical locale. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `FluentLocalization.validate_resource` - -### Signature -```python -def validate_resource(self, ftl_source: FTLSource) -> ValidationResult: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `ftl_source` | `FTLSource` | Y | FTL source code to validate. | - -### Constraints -- Return: ValidationResult with errors and warnings. -- Raises: `TypeError` if ftl_source is not a str (propagated from primary bundle). -- State: None. Does not modify bundles. -- Thread: Safe. - ---- - -## `FluentLocalization.clear_cache` - -### Signature -```python -def clear_cache(self) -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: None. -- Raises: None. -- State: Clears format cache on all bundles. -- Thread: Safe. - ---- - -## `FluentLocalization.get_cache_stats` - -### Signature -```python -def get_cache_stats(self) -> LocalizationCacheStats | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: `LocalizationCacheStats` TypedDict with 20 aggregated fields, or `None` if caching disabled. Extends `CacheStats` with `bundle_count`. See `LocalizationCacheStats` for all fields. -- Note: Numeric fields summed across all bundles; boolean fields reflect first bundle's `CacheConfig`. -- Note: `bundle_count` reflects only initialized bundles, not total locales. -- Import: `from ftllexengine import LocalizationCacheStats` or `from ftllexengine.localization import LocalizationCacheStats`. -- Raises: None. -- State: Reads cache statistics from all initialized bundles. -- Thread: Safe. - ---- - -## `FluentLocalization.get_cache_audit_log` - -### Signature -```python -def get_cache_audit_log(self) -> dict[LocaleCode, tuple[CacheAuditLogEntry, ...]] | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Per-locale mapping of immutable `CacheAuditLogEntry` tuples, or `None` if caching disabled. -- Note: Only initialized bundles are included; this method does not create lazy bundles. -- Note: Audit-disabled bundles return `()`. -- Import: `from ftllexengine.runtime import CacheAuditLogEntry` -- Raises: Never. -- State: Reads audit logs from initialized bundles. -- Thread: Safe. - ---- - -## `LocalizationCacheStats` - -TypedDict representing aggregate cache statistics across all bundles in a `FluentLocalization`. - -### Signature -```python -class LocalizationCacheStats(CacheStats, total=True): - bundle_count: int -``` - -### Constraints -- Purpose: Extends `CacheStats` with `bundle_count` for multi-bundle monitoring. All 19 `CacheStats` fields are inherited with the same semantics; numeric fields are summed across all bundles. -- `bundle_count`: number of initialized bundles contributing to the aggregated statistics. -- Import: `from ftllexengine import LocalizationCacheStats` or `from ftllexengine.localization import LocalizationCacheStats`. -- Boolean fields: `write_once`, `strict`, `audit_enabled` reflect the first bundle's `CacheConfig` (all bundles share one config). - ---- - -## `FluentLocalization.introspect_message` - -### Signature -```python -def introspect_message(self, message_id: MessageId) -> MessageIntrospection | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `MessageId` | Y | Message identifier. | - -### Constraints -- Return: MessageIntrospection from first bundle with message, or None. -- Raises: None. -- State: Read-only. -- Thread: Safe. - ---- - -## `PathResourceLoader` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class PathResourceLoader: - base_path: str - root_dir: str | None = None - - def load(self, locale: LocaleCode, resource_id: ResourceId) -> FTLSource: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `base_path` | `str` | Y | Path template with {locale} placeholder. | -| `root_dir` | `str \| None` | N | Fixed root directory for path traversal validation. | - -### Constraints -- Return: FTL source string from file. -- Raises: `FileNotFoundError` if file missing, `OSError` on read error, `ValueError` on path traversal attempt. -- State: None. Immutable dataclass. -- Thread: Safe. -- Security: - - Validates `locale` parameter against directory traversal attacks (rejects "..", "/", "\\"). - - Validates `resource_id` against directory traversal attacks (rejects "..", absolute paths). - - Empty locale codes are rejected. - - `root_dir` provides fixed anchor unaffected by locale parameter. -- Import: `from ftllexengine import PathResourceLoader` or `from ftllexengine.localization import PathResourceLoader`. - ---- - -## `ResourceLoader` - -### Signature -```python -class ResourceLoader(Protocol): - def load(self, locale: LocaleCode, resource_id: ResourceId) -> FTLSource: ... - def describe_path(self, locale: LocaleCode, resource_id: ResourceId) -> str: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale` | `LocaleCode` | Y | Locale code. | -| `resource_id` | `ResourceId` | Y | Resource identifier. | - -### Constraints -- Return (`load`): FTL source string. -- Return (`describe_path`): Human-readable path string for diagnostics; default `"{locale}/{resource_id}"`. -- Raises: Implementation-dependent. -- State: Protocol. No implementation. -- Thread: Implementation-dependent. -- Import: `from ftllexengine import ResourceLoader` or `from ftllexengine.localization import ResourceLoader`. - ---- - -## `normalize_locale` - -### Signature -```python -def normalize_locale(locale_code: str) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale_code` | `str` | Y | BCP-47 or POSIX locale code. | - -### Constraints -- Return: Lowercase POSIX-formatted locale code (hyphens to underscores, lowercased). -- State: None. Pure function. -- Thread: Safe. -- Babel: NOT required. Pure string manipulation. -- Import: `from ftllexengine import normalize_locale` or `from ftllexengine.core.locale_utils import normalize_locale`. - ---- - -## `LocaleCode` - -Type alias for BCP-47 / POSIX locale codes. - -### Signature -```python -type LocaleCode = str -``` - -### Constraints -- Value: Any `str`; narrowed by context to a BCP-47 or POSIX locale code (e.g., `"en_US"`, `"de"`). -- Babel: NOT required. Defined in `ftllexengine.localization.types`; no Babel import chain. -- Import: `from ftllexengine import LocaleCode` or `from ftllexengine.localization.types import LocaleCode`. - ---- - -## `require_positive_int` - -Validate that a boundary value is a positive integer, rejecting bool, non-int types, zero, and negative values. - -### Signature -```python -def require_positive_int(value: object, field_name: str) -> int: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value to validate. Any Python object; non-int and bool always raise TypeError. | -| `field_name` | `str` | Y | Human-readable field label used in error messages. | - -### Constraints -- Return: The validated integer, identical to the input value. -- Raises: `TypeError` if `value` is not an `int` instance, or if it is `bool` (bool is an int subtype but is rejected as semantically wrong for numeric-quantity fields). -- Raises: `ValueError` if `value` is zero or negative. -- State: Pure function; no side effects, no external dependencies. -- Thread: Safe. -- Babel: NOT required. -- Import: `from ftllexengine.core.validators import require_positive_int`. - ---- - -## `require_locale_code` - -Validate and canonicalize a locale code at a system boundary. - -### Signature -```python -def require_locale_code(value: object, field_name: str) -> LocaleCode: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value to validate. | -| `field_name` | `str` | Y | Field label used in error messages. | - -### Constraints -- Return: Lowercase POSIX-formatted locale code (hyphens to underscores, lowercased). -- Raises: `TypeError` if `value` is not a string. -- Raises: `ValueError` if `value` is blank, too long, or structurally invalid. -- State: Trims surrounding whitespace and normalizes the accepted locale. -- Thread: Safe. -- Babel: NOT required. -- Import: `from ftllexengine import require_locale_code` or `from ftllexengine.core.locale_utils import require_locale_code`. - ---- - -## `get_babel_locale` - -### Signature -```python -def get_babel_locale(locale_code: str) -> Locale: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale_code` | `str` | Y | BCP-47 or POSIX locale code. Normalized before cache lookup. | - -### Constraints -- Return: Babel Locale object. Results are cached; semantically equivalent locale codes (e.g., `"en-US"` and `"en_US"`) share a single cache entry. -- Raises: `BabelImportError` if Babel not installed. -- Raises: `TypeError` / `ValueError` if the locale boundary value is not a valid locale string. -- Raises: `babel.core.UnknownLocaleError` when the canonical locale is structurally valid but unknown to Babel. -- State: Normalizes `locale_code` before delegating to the internal cache. -- Thread: Safe (internal LRU cache uses its own locking). -- Babel: REQUIRED. Install with `pip install ftllexengine[babel]`. -- Import: `from ftllexengine.core.locale_utils import get_babel_locale` - ---- - -## `get_system_locale` - -### Signature -```python -def get_system_locale(*, raise_on_failure: bool = False) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `raise_on_failure` | `bool` | N | Raise RuntimeError if locale cannot be determined. | - -### Constraints -- Return: Detected locale code in normalized POSIX format (lowercase), or "en_us" if not determinable. -- Raises: `RuntimeError` if raise_on_failure=True and locale cannot be determined. -- State: Reads OS locale via locale.getlocale() and env vars LC_ALL, LC_MESSAGES, LANG. -- Thread: Safe. -- Babel: NOT required. Uses only stdlib. -- Import: `from ftllexengine import get_system_locale` or `from ftllexengine.core.locale_utils import get_system_locale`. - ---- - -## `clear_module_caches` - -Function that clears all module-level caches in the library. - -### Signature -```python -def clear_module_caches() -> None: -``` - -### Constraints -- Return: None. -- Raises: Never. -- State: Clears currency caches, date caches, locale cache, LocaleContext cache, message introspection cache, and ISO introspection cache. -- Thread: Safe (each cache has internal thread safety). -- Babel: Clears Babel-related caches only if Babel was used. -- Import: `from ftllexengine import clear_module_caches` - ---- - -## `clear_locale_cache` - -Function that clears the Babel locale object cache. - -### Signature -```python -def clear_locale_cache() -> None: -``` - -### Constraints -- Return: None. -- Raises: Never. -- State: Clears the internal locale object cache shared by `get_babel_locale`. -- Thread: Safe (functools.cache internal locking). -- Babel: REQUIRED. Install with `pip install ftllexengine[babel]`. -- Import: `from ftllexengine.core.locale_utils import clear_locale_cache` - ---- - -## `require_date` - -Validate that a boundary value is a `date` (not `datetime`). Rejects `datetime` explicitly because `datetime` is a subclass of `date` and would otherwise pass an `isinstance(value, date)` check. - -### Signature -```python -def require_date(value: object, field_name: str) -> date: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value to validate. | -| `field_name` | `str` | Y | Human-readable field label used in error messages. | - -### Constraints -- Return: The validated `date` object, unchanged. -- Raises: `TypeError` if `value` is a `datetime` (subtype check runs first), with message "must be date, got datetime". -- Raises: `TypeError` if `value` is not a `date` at all, with message including `field_name` and `type(value).__name__`. -- State: Pure function; no side effects. -- Thread: Safe. -- Babel: NOT required. -- Import: `from ftllexengine import require_date` or `from ftllexengine.core.validators import require_date`. - ---- - -## `require_datetime` - -Validate that a boundary value is a `datetime`. Rejects plain `date` objects (which are NOT subtypes of `datetime`). - -### Signature -```python -def require_datetime(value: object, field_name: str) -> datetime: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value to validate. | -| `field_name` | `str` | Y | Human-readable field label used in error messages. | - -### Constraints -- Return: The validated `datetime` object, unchanged. -- Raises: `TypeError` if `value` is not a `datetime` instance (includes plain `date`). -- State: Pure function; no side effects. -- Thread: Safe. -- Babel: NOT required. -- Import: `from ftllexengine import require_datetime` or `from ftllexengine.core.validators import require_datetime`. - ---- - -## `require_fluent_number` - -Validate that a boundary value is a `FluentNumber`. - -### Signature -```python -def require_fluent_number(value: object, field_name: str) -> FluentNumber: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value to validate. | -| `field_name` | `str` | Y | Human-readable field label used in error messages. | - -### Constraints -- Return: The validated `FluentNumber` object, unchanged. -- Raises: `TypeError` if `value` is not a `FluentNumber` instance. Plain `int`, `float`, and `Decimal` are rejected. -- State: Pure function; no side effects. -- Thread: Safe. -- Babel: NOT required. -- Import: `from ftllexengine import require_fluent_number` or `from ftllexengine.core.validators import require_fluent_number`. - ---- +- Purpose: Summarize per-locale cache state from `FluentLocalization.get_cache_stats()` +- Fields: Includes all `CacheStats` fields aggregated across initialized bundles, plus `bundle_count` +- State: Read-only result object diff --git a/docs/DOC_02_SyntaxExpressions.md b/docs/DOC_02_SyntaxExpressions.md new file mode 100644 index 00000000..694bbdb1 --- /dev/null +++ b/docs/DOC_02_SyntaxExpressions.md @@ -0,0 +1,341 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: SYNTAX_EXPRESSIONS +updated: "2026-04-22" +route: + keywords: [TextElement, Placeable, SelectExpression, VariableReference, FunctionReference, Entry, Expression] + questions: ["which AST node types model Fluent expressions and references?", "what public syntax union aliases exist?", "where are placeables and selectors documented?"] +--- + +# Syntax Expression Types Reference + +This reference covers pattern elements, expression/reference nodes, call argument nodes, and public syntax union aliases. +Core resource and declaration nodes live in [DOC_02_SyntaxTypes.md](DOC_02_SyntaxTypes.md). + +## `TextElement` + +AST node for literal text inside a pattern. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class TextElement: + value: str + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import TextElement` +- Helper: `TextElement.guard()` performs runtime narrowing + +--- + +## `Placeable` + +AST node for `{ ... }` dynamic content inside a pattern. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Placeable: + expression: Expression + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Placeable` +- Helper: `Placeable.guard()` performs runtime narrowing + +--- + +## `SelectExpression` + +AST node for Fluent select expressions. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class SelectExpression: + selector: SelectorExpression + variants: tuple[Variant, ...] + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import SelectExpression` +- Invariants: at least one variant and exactly one default variant +- Selector type: restricted to the `SelectorExpression` union, not arbitrary `Expression` +- Helper: `SelectExpression.guard()` performs runtime narrowing + +--- + +## `Variant` + +AST node for one branch of a select expression. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Variant: + key: Identifier | NumberLiteral + value: Pattern + default: bool = False + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Variant` +- `default=True` marks the `*` branch + +--- + +## `StringLiteral` + +AST node for quoted string literals. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class StringLiteral: + value: str + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import StringLiteral` +- Helper: `StringLiteral.guard()` performs runtime narrowing + +--- + +## `NumberLiteral` + +AST node for integer or decimal literals. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class NumberLiteral: + value: int | Decimal + raw: str + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import NumberLiteral` +- Invariants: `value` cannot be `bool`; `raw` must parse back to the same finite numeric value +- Helper: `NumberLiteral.guard()` performs runtime narrowing + +--- + +## `VariableReference` + +AST node for `$name` variable references. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class VariableReference: + id: Identifier + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import VariableReference` +- Helper: `VariableReference.guard()` performs runtime narrowing + +--- + +## `MessageReference` + +AST node for message references like `hello` or `hello.attr`. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class MessageReference: + id: Identifier + attribute: Identifier | None = None + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import MessageReference` +- Helper: `MessageReference.guard()` performs runtime narrowing + +--- + +## `TermReference` + +AST node for term references like `-brand` or `-brand.attr`. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class TermReference: + id: Identifier + attribute: Identifier | None = None + arguments: CallArguments | None = None + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import TermReference` +- Helper: `TermReference.guard()` performs runtime narrowing + +--- + +## `FunctionReference` + +AST node for function calls such as `NUMBER($count)`. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class FunctionReference: + id: Identifier + arguments: CallArguments + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import FunctionReference` +- Helper: `FunctionReference.guard()` performs runtime narrowing + +--- + +## `CallArguments` + +AST node for positional and named function arguments. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class CallArguments: + positional: tuple[ + StringLiteral + | NumberLiteral + | VariableReference + | MessageReference + | TermReference + | FunctionReference + | Placeable, + ..., + ] + named: tuple[NamedArgument, ...] + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import CallArguments` +- Used by: `FunctionReference.arguments` and optional `TermReference.arguments` + +--- + +## `NamedArgument` + +AST node for `name: literal` function arguments. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class NamedArgument: + name: Identifier + value: FTLLiteral + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import NamedArgument` +- Invariant: `value` is restricted to `FTLLiteral`, not any inline expression + +--- + +## `Entry` + +Type alias for every top-level AST entry that can appear in a `Resource`. + +### Signature +```python +type Entry = Message | Term | Comment | Junk +``` + +### Constraints +- Import: `from ftllexengine.syntax import Entry` +- Used by: `Resource.entries` and `parse_stream()` +- Purpose: closed top-level union for syntax tooling + +--- + +## `PatternElement` + +Type alias for the elements that make up a `Pattern`. + +### Signature +```python +type PatternElement = TextElement | Placeable +``` + +### Constraints +- Import: `from ftllexengine.syntax import PatternElement` +- Used by: `Pattern.elements` +- Purpose: restrict pattern contents to literal text or embedded expressions + +--- + +## `Expression` + +Type alias for all expression forms valid inside a `Placeable`. + +### Signature +```python +type Expression = ( + SelectExpression + | StringLiteral + | NumberLiteral + | VariableReference + | MessageReference + | TermReference + | FunctionReference + | Placeable +) +``` + +### Constraints +- Import: `from ftllexengine.syntax import Expression` +- Used by: `Placeable.expression` +- Purpose: closed union for parser, serializer, and visitor dispatch + +--- + +## `SelectorExpression` + +Type alias for expression forms valid as a `SelectExpression.selector`. + +### Signature +```python +type SelectorExpression = ( + VariableReference | MessageReference | TermReference | FunctionReference | NumberLiteral +) +``` + +### Constraints +- Import: `from ftllexengine.syntax import SelectorExpression` +- Narrower than: `Expression` +- Purpose: encode the Fluent selector restriction at the type level + +--- + +## `FTLLiteral` + +Type alias for literal values allowed in named function and term arguments. + +### Signature +```python +type FTLLiteral = StringLiteral | NumberLiteral +``` + +### Constraints +- Import: `from ftllexengine.syntax import FTLLiteral` +- Used by: `NamedArgument.value` +- Purpose: enforce the Fluent rule that named arguments are literal-only diff --git a/docs/DOC_02_SyntaxTypes.md b/docs/DOC_02_SyntaxTypes.md new file mode 100644 index 00000000..b56257cc --- /dev/null +++ b/docs/DOC_02_SyntaxTypes.md @@ -0,0 +1,211 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: SYNTAX_TYPES +updated: "2026-04-22" +route: + keywords: [AST, Resource, Message, Term, Pattern, Span, Annotation, syntax nodes] + questions: ["how is FTL represented in the AST?", "which public AST container and declaration node types exist?", "where are spans and parser annotations documented?"] +--- + +# Syntax Types Reference + +This reference covers the core AST containers and declaration nodes. +Pattern/expression/reference nodes and union aliases are documented in [DOC_02_SyntaxExpressions.md](DOC_02_SyntaxExpressions.md). + +## `Span` + +Immutable source span in normalized character offsets. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Span: + start: int + end: int +``` + +### Constraints +- Import: `from ftllexengine.syntax import Span` +- Semantics: `start` is inclusive and `end` is exclusive, both in normalized character offsets +- Invariants: `start >= 0` and `end >= start` + +--- + +## `Annotation` + +Parser annotation attached to `Junk` nodes. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Annotation: + code: str + message: str + arguments: tuple[tuple[str, str], ...] | None = None + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Annotation` +- Purpose: preserves parser error metadata during recovery +- Used by: `Junk.annotations` and `ValidationResult.annotations` + +--- + +## `Identifier` + +Immutable AST node for Fluent identifiers. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Identifier: + name: str + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Identifier` +- Purpose: wraps identifier text so AST nodes can retain spans +- Helper: `Identifier.guard()` performs runtime narrowing + +--- + +## `Resource` + +Root AST node returned by `parse_ftl()`. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Resource: + entries: tuple[Entry, ...] +``` + +### Constraints +- Import: `from ftllexengine.syntax import Resource` +- Purpose: immutable container for top-level Fluent entries in source order + +--- + +## `Message` + +AST node for a public Fluent message. + +### Signature +```python +@dataclass(frozen=True, slots=True, weakref_slot=True) +class Message: + id: Identifier + value: Pattern | None + attributes: tuple[Attribute, ...] + comment: Comment | None = None + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Message` +- Invariant: a message must have `value`, `attributes`, or both +- Helper: `Message.guard()` performs runtime narrowing + +--- + +## `Term` + +AST node for a private Fluent term. + +### Signature +```python +@dataclass(frozen=True, slots=True, weakref_slot=True) +class Term: + id: Identifier + value: Pattern + attributes: tuple[Attribute, ...] + comment: Comment | None = None + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Term` +- Invariant: a term always has a `value` +- Helper: `Term.guard()` performs runtime narrowing + +--- + +## `Attribute` + +AST node for a message or term attribute. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Attribute: + id: Identifier + value: Pattern + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Attribute` +- Used on: `Message.attributes` and `Term.attributes` + +--- + +## `Comment` + +AST node for Fluent comments. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Comment: + content: str + type: CommentType + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Comment` +- `type` uses `CommentType` +- Helper: `Comment.guard()` performs runtime narrowing + +--- + +## `Junk` + +AST node for unparseable content preserved during recovery. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Junk: + content: str + annotations: tuple[Annotation, ...] = () + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Junk` +- Purpose: keeps invalid source and its parser annotations available to tooling +- Helper: `Junk.guard()` performs runtime narrowing + +--- + +## `Pattern` + +AST node for a sequence of literal text and placeables. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Pattern: + elements: tuple[PatternElement, ...] + span: Span | None = None +``` + +### Constraints +- Import: `from ftllexengine.syntax import Pattern` +- Used by: `Message.value`, `Term.value`, `Attribute.value`, `Variant.value` + +--- diff --git a/docs/DOC_02_Types.md b/docs/DOC_02_Types.md index 22c90f42..a5074d0b 100644 --- a/docs/DOC_02_Types.md +++ b/docs/DOC_02_Types.md @@ -1,680 +1,340 @@ --- -afad: "3.3" -version: "0.162.0" +afad: "3.5" +version: "0.163.0" domain: TYPES -updated: "2026-03-23" +updated: "2026-04-22" route: - keywords: [Resource, Message, Term, Pattern, Attribute, Placeable, AST, dataclass, FluentValue, FTLLiteral, TerritoryInfo, CurrencyInfo, ISO 3166, ISO 4217, require_currency_code, require_territory_code] - questions: ["what AST nodes exist?", "how is FTL represented?", "what is the Resource structure?", "what types can FluentValue hold?", "how to get territory info?", "how to get currency info?", "how do I validate an ISO currency code?", "how do I validate an ISO territory code?"] + keywords: [FluentNumber, FluentValue, ParseResult, LocaleCode, CurrencyCode, TerritoryInfo, MessageIntrospection] + questions: ["what public types does FTLLexEngine expose?", "what value types can formatting accept?", "which semantic aliases and lookup-result types exist?", "what introspection result types exist?"] --- -# AST Types Reference +# Types Reference --- -## `Resource` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Resource: - entries: tuple[Entry, ...] -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `entries` | `tuple[Entry, ...]` | Y | All top-level entries. | - -### Constraints -- Return: Immutable root AST node. -- State: Frozen dataclass. - ---- +## `FluentNumber` -## `Message` +Immutable wrapper that keeps a numeric value, its rendered string, and visible precision together. ### Signature ```python @dataclass(frozen=True, slots=True) -class Message: - id: Identifier - value: Pattern | None - attributes: tuple[Attribute, ...] - comment: Comment | None = None - span: Span | None = None - - @staticmethod - def guard(entry: object) -> TypeIs[Message]: ... +class FluentNumber: + value: int | Decimal + formatted: str + precision: int | None = None ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Message identifier. | -| `value` | `Pattern \| None` | Y | Message value pattern. | -| `attributes` | `tuple[Attribute, ...]` | Y | Message attributes. | -| `comment` | `Comment \| None` | N | Associated comment. | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable message node. -- State: Frozen dataclass. -- Validation: `__post_init__` validates that value or attributes is non-empty. Raises `ValueError` if both value is None and attributes is empty. +- Import: `from ftllexengine import FluentNumber` +- Purpose: lets formatted numbers still participate in plural resolution and exact numeric comparisons +- Invariants: `value` must be `int | Decimal`, never `bool`; `precision` is `None` or `>= 0` +- Helpers: `decimal_value` returns exact `Decimal`; `str(value)` returns `formatted` +- Thread: safe --- -## `Term` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Term: - id: Identifier - value: Pattern - attributes: tuple[Attribute, ...] - comment: Comment | None = None - span: Span | None = None - - @staticmethod - def guard(entry: object) -> TypeIs[Term]: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Term identifier (without - prefix). | -| `value` | `Pattern` | Y | Term value pattern (required). | -| `attributes` | `tuple[Attribute, ...]` | Y | Term attributes. | -| `comment` | `Comment \| None` | N | Associated comment. | -| `span` | `Span \| None` | N | Source position. | - -### Constraints -- Return: Immutable term node. -- State: Frozen dataclass. -- Validation: `__post_init__` validates that value is not None. Raises `ValueError` if value is None. - ---- +## `FluentValue` -## `Attribute` +Recursive type alias for values accepted by runtime formatting and custom functions. ### Signature ```python -@dataclass(frozen=True, slots=True) -class Attribute: - id: Identifier - value: Pattern - span: Span | None = None +type FluentValue = ( + str + | int + | Decimal + | datetime + | date + | FluentNumber + | None + | Sequence["FluentValue"] + | Mapping[str, "FluentValue"] +) ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Attribute name. | -| `value` | `Pattern` | Y | Attribute value pattern. | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable attribute node. -- State: Frozen dataclass. +- Import: `from ftllexengine import FluentValue` +- Includes: scalar values, `FluentNumber`, nested sequences, and string-keyed mappings +- Excludes: `float` by design; `bool` is not intended even though it is an `int` subtype +- Purpose: canonical runtime boundary type for formatting and custom functions --- -## `Comment` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Comment: - content: str - type: CommentType - span: Span | None = None - - @staticmethod - def guard(entry: object) -> TypeIs[Comment]: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `content` | `str` | Y | Comment text. | -| `type` | `CommentType` | Y | COMMENT, GROUP, or RESOURCE. | -| `span` | `Span \| None` | N | Source position. | - -### Constraints -- Return: Immutable comment node. -- State: Frozen dataclass. - ---- +## `ParseResult` -## `Junk` +Generic return type for locale-aware parse helpers. ### Signature ```python -@dataclass(frozen=True, slots=True) -class Junk: - content: str - annotations: tuple[Annotation, ...] = () - span: Span | None = None - - @staticmethod - def guard(entry: object) -> TypeIs[Junk]: ... +type ParseResult[T] = tuple[T | None, tuple[FrozenFluentError, ...]] ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `content` | `str` | Y | Unparseable source text. | -| `annotations` | `tuple[Annotation, ...]` | N | Parse error annotations. | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable junk node. -- State: Frozen dataclass. +- Import: `from ftllexengine import ParseResult` +- Success contract: parsed value in slot 0 and empty error tuple in slot 1 +- Failure contract: `None` in slot 0 and one or more `FrozenFluentError` instances in slot 1 +- Used by: `parse_decimal()`, `parse_date()`, `parse_datetime()`, `parse_currency()`, `parse_fluent_number()` --- -## `Pattern` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Pattern: - elements: tuple[PatternElement, ...] - span: Span | None = None -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `elements` | `tuple[PatternElement, ...]` | Y | Text and placeable elements. | -| `span` | `Span \| None` | N | Source location span. | - -### Constraints -- Return: Immutable pattern node. -- State: Frozen dataclass. - ---- +## `LocaleCode` -## `TextElement` +Semantic alias for locale identifiers in localization APIs. ### Signature ```python -@dataclass(frozen=True, slots=True) -class TextElement: - value: str - span: Span | None = None - - @staticmethod - def guard(elem: object) -> TypeIs[TextElement]: ... +type LocaleCode = str ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | Plain text content. | -| `span` | `Span \| None` | N | Source location span. | - ### Constraints -- Return: Immutable text element. -- State: Frozen dataclass. +- Import: `from ftllexengine import LocaleCode` +- Semantics: BCP-47 or POSIX-style locale code such as `"en"`, `"lv"`, `"de-DE"`, or `"en_US"` --- -## `Placeable` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Placeable: - expression: Expression - span: Span | None = None - - @staticmethod - def guard(elem: object) -> TypeIs[Placeable]: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `expression` | `Expression` | Y | Contained expression. | -| `span` | `Span \| None` | N | Source location span. | - -### Constraints -- Return: Immutable placeable node. -- State: Frozen dataclass. - ---- +## `MessageId` -## `SelectExpression` +Semantic alias for Fluent message identifiers. ### Signature ```python -@dataclass(frozen=True, slots=True) -class SelectExpression: - selector: SelectorExpression - variants: tuple[Variant, ...] - span: Span | None = None - - @staticmethod - def guard(expr: object) -> TypeIs[SelectExpression]: ... +type MessageId = str ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `selector` | `SelectorExpression` | Y | Value to select on (InlineExpression minus Placeable). | -| `variants` | `tuple[Variant, ...]` | Y | Selection variants. | -| `span` | `Span \| None` | N | Source position (start/end). | - ### Constraints -- Return: Immutable select expression. -- State: Frozen dataclass. -- Validation: `__post_init__` validates that variants is non-empty and exactly one default variant exists. Raises `ValueError` on constraint violation. -- Selector: `selector` is typed `SelectorExpression`, a restricted subset of `InlineExpression` that excludes `Placeable`. The parser enforces this; programmatic construction via `object.__setattr__` bypass is rejected at validation time. +- Import: `from ftllexengine import MessageId` +- Semantics: message key like `"welcome"` or `"error-network"` --- -## `Variant` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Variant: - key: VariantKey - value: Pattern - default: bool = False - span: Span | None = None -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `key` | `VariantKey` | Y | Variant key (Identifier or NumberLiteral). | -| `value` | `Pattern` | Y | Variant pattern. | -| `default` | `bool` | N | True for default variant (*). | -| `span` | `Span \| None` | N | Source position. | - -### Constraints -- Return: Immutable variant node. -- State: Frozen dataclass. - ---- +## `ResourceId` -## `StringLiteral` +Semantic alias for resource identifiers used by localization loaders. ### Signature ```python -@dataclass(frozen=True, slots=True) -class StringLiteral: - value: str - span: Span | None = None - - @staticmethod - def guard(key: object) -> TypeIs[StringLiteral]: ... +type ResourceId = str ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | String content (without quotes). | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable string literal. -- State: Frozen dataclass. -- Guard: `StringLiteral.guard(obj)` returns `TypeIs[StringLiteral]` for type narrowing. +- Import: `from ftllexengine import ResourceId` +- Semantics: logical resource name such as `"main.ftl"` or `"errors.ftl"` --- -## `NumberLiteral` +## `FTLSource` + +Semantic alias for raw Fluent source text. ### Signature ```python -from decimal import Decimal - -@dataclass(frozen=True, slots=True) -class NumberLiteral: - value: int | Decimal - raw: str - span: Span | None = None - - @staticmethod - def guard(key: object) -> TypeIs[NumberLiteral]: ... +type FTLSource = str ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `int \| Decimal` | Y | Parsed numeric value (int for integers, Decimal for decimals). | -| `raw` | `str` | Y | Original source representation for serialization. | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable number literal. -- State: Frozen dataclass. -- Precision: Integer literals use `int` for memory efficiency. Decimal literals use `Decimal` for financial-grade precision, eliminating float rounding errors (0.1 + 0.2 = 0.3, not 0.30000000000000004). -- Invariant: AST transformers creating new nodes must ensure raw represents value. Parser guarantees consistency at construction. +- Import: `from ftllexengine import FTLSource` +- Semantics: normalized or unnormalized FTL text before parsing --- -## `FTLLiteral` +## `CurrencyCode` -Type alias for the closed set of values valid as named-argument values in Fluent call expressions. +Nominal wrapper for ISO 4217 currency codes. ### Signature ```python -type FTLLiteral = StringLiteral | NumberLiteral +CurrencyCode = NewType("CurrencyCode", str) ``` -### Parameters -| Type | Description | -|:-----|:------------| -| `StringLiteral` | Quoted string value. | -| `NumberLiteral` | Numeric literal (int or Decimal). | - ### Constraints -- FTL EBNF: `named-argument ::= identifier ":" (StringLiteral \| NumberLiteral)`. -- `NamedArgument.value` is typed `FTLLiteral`; only these two variants are spec-compliant. -- Import: `from ftllexengine.syntax.ast import FTLLiteral` or `from ftllexengine.syntax import FTLLiteral`. +- Import: `from ftllexengine import CurrencyCode` +- Purpose: distinguish validated currency codes from arbitrary strings +- Validation path: use `is_valid_currency_code()` or `require_currency_code()` before constructing or narrowing --- -## `VariableReference` +## `TerritoryCode` + +Nominal wrapper for ISO 3166-1 alpha-2 territory codes. ### Signature ```python -@dataclass(frozen=True, slots=True) -class VariableReference: - id: Identifier - span: Span | None = None - - @staticmethod - def guard(expr: object) -> TypeIs[VariableReference]: ... +TerritoryCode = NewType("TerritoryCode", str) ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Variable identifier (without $). | -| `span` | `Span \| None` | N | Source position for IDE integration. | - ### Constraints -- Return: Immutable variable reference. -- State: Frozen dataclass. -- Span: Populated by parser for source-tracked ASTs. +- Import: `from ftllexengine import TerritoryCode` +- Purpose: distinguish validated territory codes from arbitrary strings +- Validation path: use `is_valid_territory_code()` or `require_territory_code()` before constructing or narrowing --- -## `MessageReference` +## `CurrencyInfo` + +Immutable ISO 4217 lookup result. ### Signature ```python @dataclass(frozen=True, slots=True) -class MessageReference: - id: Identifier - attribute: Identifier | None = None - span: Span | None = None - - @staticmethod - def guard(expr: object) -> TypeIs[MessageReference]: ... +class CurrencyInfo: + code: CurrencyCode + name: str + symbol: str + decimal_digits: int ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Message identifier. | -| `attribute` | `Identifier \| None` | N | Attribute name if present. | -| `span` | `Span \| None` | N | Source position for IDE integration. | - ### Constraints -- Return: Immutable message reference. -- State: Frozen dataclass. -- Span: Populated by parser for source-tracked ASTs. +- Import: `from ftllexengine.introspection.iso import CurrencyInfo` +- Produced by: `get_currency()` and `list_currencies()` +- Locale note: `name` and `symbol` depend on the lookup locale; `decimal_digits` follows the embedded ISO 4217 table +- Thread: safe --- -## `TermReference` +## `TerritoryInfo` + +Immutable ISO 3166-1 lookup result. ### Signature ```python @dataclass(frozen=True, slots=True) -class TermReference: - id: Identifier - attribute: Identifier | None = None - arguments: CallArguments | None = None - span: Span | None = None - - @staticmethod - def guard(expr: object) -> TypeIs[TermReference]: ... +class TerritoryInfo: + alpha2: TerritoryCode + name: str + currencies: tuple[CurrencyCode, ...] + official_languages: tuple[str, ...] ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Term identifier (without -). | -| `attribute` | `Identifier \| None` | N | Attribute name if present. | -| `arguments` | `CallArguments \| None` | N | Parameterized term args. | -| `span` | `Span \| None` | N | Source position for IDE integration. | - ### Constraints -- Return: Immutable term reference. -- State: Frozen dataclass. -- Span: Populated by parser for source-tracked ASTs. +- Import: `from ftllexengine.introspection.iso import TerritoryInfo` +- Produced by: `get_territory()` and `list_territories()` +- Locale note: `name` depends on the lookup locale; currencies and languages come from CLDR data +- Thread: safe --- -## `FunctionReference` +## `CommentType` + +Enum of Fluent comment kinds. ### Signature ```python -@dataclass(frozen=True, slots=True) -class FunctionReference: - id: Identifier - arguments: CallArguments - span: Span | None = None - - @staticmethod - def guard(expr: object) -> TypeIs[FunctionReference]: ... +class CommentType(StrEnum): + COMMENT = "comment" + GROUP = "group" + RESOURCE = "resource" ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `Identifier` | Y | Function name (e.g., NUMBER). | -| `arguments` | `CallArguments` | Y | Function arguments. | -| `span` | `Span \| None` | N | Source position for IDE integration. | - ### Constraints -- Return: Immutable function reference. -- State: Frozen dataclass. -- Span: Populated by parser for source-tracked ASTs. +- Import: `from ftllexengine.enums import CommentType` +- Used by: `syntax.ast.Comment.type` +- Type: `StrEnum` --- -## `CallArguments` +## `ReferenceKind` + +Enum describing whether a reference points at a message or a term. ### Signature ```python -@dataclass(frozen=True, slots=True) -class CallArguments: - positional: tuple[InlineExpression, ...] - named: tuple[NamedArgument, ...] - span: Span | None = None +class ReferenceKind(StrEnum): + MESSAGE = "message" + TERM = "term" ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `positional` | `tuple[InlineExpression, ...]` | Y | Positional arguments. | -| `named` | `tuple[NamedArgument, ...]` | Y | Named arguments. | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable call arguments. -- State: Frozen dataclass. -- Validation: `serialize(validate=True)` rejects duplicate named argument names. +- Import: `from ftllexengine.enums import ReferenceKind` +- Used by: `ReferenceInfo.kind` +- Type: `StrEnum` --- -## `NamedArgument` +## `VariableContext` + +Enum describing where a variable appears inside a message. ### Signature ```python -@dataclass(frozen=True, slots=True) -class NamedArgument: - name: Identifier - value: FTLLiteral - span: Span | None = None +class VariableContext(StrEnum): + PATTERN = "pattern" + SELECTOR = "selector" + VARIANT = "variant" + FUNCTION_ARG = "function_arg" ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `name` | `Identifier` | Y | Argument name. | -| `value` | `FTLLiteral` | Y | Literal argument value (StringLiteral or NumberLiteral). | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable named argument. -- State: Frozen dataclass. -- FTL EBNF: `NamedArgument ::= Identifier blank? ":" blank? (StringLiteral | NumberLiteral)`. -- Type enforced: `value` is `FTLLiteral = StringLiteral | NumberLiteral`; passing any other `InlineExpression` subtype is a static type error. -- Defense: Serializer validates value type at runtime as defense-in-depth against `object.__setattr__` bypass. +- Import: `from ftllexengine.enums import VariableContext` +- Used by: `VariableInfo.context` +- Type: `StrEnum` --- -## `Identifier` +## `VariableInfo` + +Immutable metadata about a variable occurrence discovered during introspection. ### Signature ```python @dataclass(frozen=True, slots=True) -class Identifier: +class VariableInfo: name: str + context: VariableContext span: Span | None = None - - @staticmethod - def guard(key: object) -> TypeIs[Identifier]: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `name` | `str` | Y | Identifier string. | -| `span` | `Span \| None` | N | Source position. | - ### Constraints -- Return: Immutable identifier. -- State: Frozen dataclass. +- Import: `from ftllexengine.introspection.message import VariableInfo` +- Produced by: `introspect_message()` --- -## `Span` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Span: - start: int - end: int -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `start` | `int` | Y | Start character offset (inclusive). | -| `end` | `int` | Y | End character offset (exclusive). | - -### Constraints -- Return: Immutable span. -- Raises: `ValueError` if start < 0 or end < start. -- State: Frozen dataclass. -- Note: Positions are character offsets (code points), not bytes. - ---- +## `FunctionCallInfo` -## `Annotation` +Immutable metadata about a function call discovered during introspection. ### Signature ```python @dataclass(frozen=True, slots=True) -class Annotation: - code: str - message: str - arguments: tuple[tuple[str, str], ...] | None = None +class FunctionCallInfo: + name: str + positional_arg_vars: tuple[str, ...] + named_args: frozenset[str] span: Span | None = None ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `code` | `str` | Y | Error code. | -| `message` | `str` | Y | Error message. | -| `arguments` | `tuple[tuple[str, str], ...] \| None` | N | Additional context as key-value pairs. | -| `span` | `Span \| None` | N | Error location. | - ### Constraints -- Return: Immutable annotation. -- State: Frozen dataclass. +- Import: `from ftllexengine.introspection.message import FunctionCallInfo` +- Produced by: `introspect_message()` +- `positional_arg_vars` contains only variable names, not literal argument values --- -## `ASTVisitor` - -### Signature -```python -class ASTVisitor[T = ASTNode]: - def __init__(self, *, max_depth: int | None = None) -> None: ... - def visit(self, node: ASTNode) -> T: ... - def generic_visit(self, node: ASTNode) -> T: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `max_depth` | `int \| None` | N | Maximum traversal depth (default: 100). | - -### Constraints -- Return: Visited/transformed node. -- State: Maintains dispatch cache and depth guard. -- Thread: Not thread-safe (instance state). -- Subclass: MUST call `super().__init__()` to initialize depth guard. -- Raises: `FrozenFluentError` (category=RESOLUTION) when traversal exceeds max_depth. -- Depth: Guard in `visit()` protects all traversals (bypass-proof). - ---- +## `ReferenceInfo` -## `ASTTransformer` +Immutable metadata about a message or term dependency discovered during introspection. ### Signature ```python -class ASTTransformer(ASTVisitor[ASTNode | None | list[ASTNode]]): - def __init__(self, *, max_depth: int | None = None) -> None: ... - def transform(self, node: ASTNode) -> ASTNode | None | list[ASTNode]: ... - def generic_visit(self, node: ASTNode) -> ASTNode | None | list[ASTNode]: ... +@dataclass(frozen=True, slots=True) +class ReferenceInfo: + id: str + kind: ReferenceKind + attribute: str | None + span: Span | None = None ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `max_depth` | `int \| None` | N | Maximum traversal depth (default: 100). | - ### Constraints -- Return: Modified node, None (removes from optional fields or collections), or list (expands in collections). -- State: Maintains dispatch cache and depth guard. -- Thread: Not thread-safe (instance state). -- Subclass: MUST call `super().__init__()` to initialize depth guard. -- Raises: `FrozenFluentError` (category=RESOLUTION) when traversal exceeds max_depth. `TypeError` if visit method returns None for required scalar field, list for any scalar field, or a node whose type does not match the field's expected types. -- Depth: Guard inherited from ASTVisitor.visit() (bypass-proof). -- Immutable: Uses `dataclasses.replace()` for node modifications. -- Type Validation: `_transform_list` validates that each transformed node matches the field's expected types. For example, `Pattern.elements` accepts only `TextElement | Placeable`; producing a `Message` raises `TypeError` identifying the field and unexpected type. -- Required Fields: `Message.id`, `Term.id`, `Term.value`, `Placeable.expression`, `Variant.key`, `Variant.value`, etc. require single ASTNode return. Returning None or list raises TypeError. -- Optional Fields: `Message.comment`, `Message.value`, `Term.comment`, `MessageReference.attribute`, `TermReference.attribute`, `TermReference.arguments` accept None returns for node removal. Returning list still raises TypeError. +- Import: `from ftllexengine.introspection.message import ReferenceInfo` +- Produced by: `introspect_message()` and reference extraction helpers --- ## `MessageIntrospection` +Complete immutable summary of a message or term's variables, function calls, and references. + ### Signature ```python @dataclass(frozen=True, slots=True) @@ -684,106 +344,19 @@ class MessageIntrospection: functions: frozenset[FunctionCallInfo] references: frozenset[ReferenceInfo] has_selectors: bool - - def get_variable_names(self) -> frozenset[str]: ... - def requires_variable(self, name: str) -> bool: ... - def get_function_names(self) -> frozenset[str]: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier. | -| `variables` | `frozenset[VariableInfo]` | Y | Variable references. | -| `functions` | `frozenset[FunctionCallInfo]` | Y | Function calls. | -| `references` | `frozenset[ReferenceInfo]` | Y | Message/term references. | -| `has_selectors` | `bool` | Y | Uses select expressions. | - -### Constraints -- Return: Immutable introspection result. -- State: Frozen dataclass. -- Import: `from ftllexengine.introspection import MessageIntrospection` - ---- - -## `introspect_message` - -Function that extracts complete metadata from a Message or Term AST node. - -### Signature -```python -def introspect_message( - message: Message | Term, - *, - use_cache: bool = True, -) -> MessageIntrospection: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `Message \| Term` | Y | AST node to introspect. | -| `use_cache` | `bool` | N | Use WeakKeyDictionary cache (default: True). | - -### Constraints -- Return: MessageIntrospection with variables, functions, references. -- Raises: `TypeError` if message is not Message or Term. -- State: Caches result in WeakKeyDictionary when use_cache=True. -- Thread: Safe (worst case: redundant computation on cache miss). -- Cache: WeakKeyDictionary auto-cleans when AST nodes garbage collected. -- Import: `from ftllexengine.introspection import introspect_message` - ---- - -## `clear_introspection_cache` - -Function that clears the introspection WeakKeyDictionary cache. - -### Signature -```python -def clear_introspection_cache() -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: None. -- Raises: Never. -- State: Clears module-level introspection cache. -- Thread: Safe. -- Usage: Testing, memory pressure. Normal usage relies on WeakKeyDictionary auto-cleanup. -- Import: `from ftllexengine.introspection import clear_introspection_cache` - ---- - -## `extract_variables` - -Function that extracts variable names from a Message or Term (simplified API). - -### Signature -```python -def extract_variables(message: Message | Term) -> frozenset[str]: ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `Message \| Term` | Y | AST node to analyze. | - ### Constraints -- Return: Frozen set of variable names (without $ prefix). -- Raises: Never. -- State: Delegates to introspect_message (uses cache). -- Thread: Safe. -- Import: `from ftllexengine.introspection import extract_variables` +- Import: `from ftllexengine.introspection.message import MessageIntrospection` +- Produced by: `introspect_message()` +- Helpers: `get_variable_names()`, `requires_variable()`, `get_function_names()` +- Cached: module-level weak-reference cache memoizes results per `Message` or `Term` --- ## `MessageVariableValidationResult` -Immutable result of comparing declared FTL message variables against an expected schema. +Structured diff between the variables a message declares and the variables you expect it to declare. ### Signature ```python @@ -797,787 +370,6 @@ class MessageVariableValidationResult: ``` ### Constraints -- `is_valid`: `True` only when `declared_variables == expected` exactly (no missing, no extra). -- `missing_variables`: variables present in expected but absent from the FTL message. -- `extra_variables`: variables declared in FTL but absent from expected. -- Immutable. Hashable. -- Import: `from ftllexengine.introspection import MessageVariableValidationResult` -- Also available: `from ftllexengine import MessageVariableValidationResult` - ---- - -## `validate_message_variables` - -Function that validates an FTL message or term declares exactly the expected variables. - -### Signature -```python -def validate_message_variables( - message: Message | Term, - expected_variables: frozenset[str] | set[str], -) -> MessageVariableValidationResult: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `Message \| Term` | Y | AST node to inspect. | -| `expected_variables` | `frozenset[str] \| set[str]` | Y | Variable names (without $ prefix) the message should declare. | - -### Constraints -- Return: `MessageVariableValidationResult`; `is_valid=True` iff declared == expected. -- Raises: Never. No Babel dependency. -- State: Delegates to `extract_variables()` (uses introspection cache). -- Thread: Safe. -- Import: `from ftllexengine.introspection import validate_message_variables` -- Also available: `from ftllexengine import validate_message_variables` -- Version: Added in v0.148.0. - ---- - -## `extract_references` - -Function that extracts message and term references from a Message or Term. - -### Signature -```python -def extract_references(entry: Message | Term) -> tuple[frozenset[str], frozenset[str]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `entry` | `Message \| Term` | Y | AST node to analyze. | - -### Constraints -- Return: `(message_refs, term_refs)` — two frozen sets. `message_refs` may be attribute-qualified (e.g., `"msg.tooltip"`). `term_refs` are bare IDs (e.g., `"brand"`). -- Raises: Never. -- State: No cache. Traverses the AST on every call. -- Thread: Safe (no shared mutable state). -- Import: `from ftllexengine.introspection import extract_references` - -```python -resource = parse_ftl("msg = { welcome } uses { -brand }") -msg_refs, term_refs = extract_references(resource.entries[0]) -# msg_refs == frozenset({"welcome"}) -# term_refs == frozenset({"brand"}) -``` - ---- - -## `extract_references_by_attribute` - -Function that extracts references per source attribute for attribute-granular analysis. - -### Signature -```python -def extract_references_by_attribute( - entry: Message | Term, -) -> dict[str | None, tuple[frozenset[str], frozenset[str]]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `entry` | `Message \| Term` | Y | AST node to analyze. | - -### Constraints -- Return: `{key: (message_refs, term_refs)}`. Key is `None` for the value pattern, or the attribute name string (e.g., `"tooltip"`). -- Raises: Never. -- State: No cache. Traverses the AST on every call. -- Thread: Safe. -- Use case: Attribute-granular dependency cycle detection. Finer-grained than `extract_references`. -- Import: `from ftllexengine.introspection import extract_references_by_attribute` - -```python -resource = parse_ftl("btn = Click\n .label = { -brand } button") -refs = extract_references_by_attribute(resource.entries[0]) -# refs[None] == (frozenset(), frozenset()) # value pattern -# refs["label"] == (frozenset(), frozenset({"brand"})) # attribute -``` - ---- - -## Type Aliases - -### Signature -```python -type Entry = Message | Term | Comment | Junk -type PatternElement = TextElement | Placeable -type Expression = SelectExpression | InlineExpression -type InlineExpression = ( - StringLiteral | NumberLiteral | VariableReference | - MessageReference | TermReference | FunctionReference | Placeable -) -type SelectorExpression = ( - StringLiteral | NumberLiteral | VariableReference | - MessageReference | TermReference | FunctionReference -) -type FTLLiteral = StringLiteral | NumberLiteral -type VariantKey = Identifier | NumberLiteral -type ASTNode = ( - Resource | Message | Term | Attribute | Comment | Junk | - Pattern | TextElement | Placeable | SelectExpression | Variant | - StringLiteral | NumberLiteral | VariableReference | MessageReference | - TermReference | FunctionReference | CallArguments | NamedArgument | - Identifier | Annotation | Span -) -``` - -### Constraints -- PEP 695 type aliases. Cannot use with isinstance(). -- Use pattern matching or `.guard()` methods for runtime checks. -- `SelectorExpression`: Subset of `InlineExpression` excluding `Placeable`; used as `SelectExpression.selector` type. -- `FTLLiteral`: Subset of `InlineExpression` restricted to literal values; used as `NamedArgument.value` type. -- `ASTNode`: Union of all 21 AST node types (includes `Span` and `Annotation` utility nodes). - ---- - -## `FluentValue` - -Type alias for values passable to Fluent functions and format_pattern(). - -### Signature -```python -type FluentValue = ( - str | int | Decimal | datetime | date | FluentNumber | None | - Sequence["FluentValue"] | Mapping[str, "FluentValue"] -) -``` - -### Parameters -| Type | Description | -|:-----|:------------| -| `str` | String arguments. | -| `int` | Integer arguments (includes `bool` via subtype; use `int(flag)` explicitly). | -| `Decimal` | Precise decimal arguments (currency, any fractional value). | -| `datetime` | Date-time arguments. | -| `date` | Date-only arguments. | -| `FluentNumber` | Formatted number from NUMBER() function. | -| `None` | Absent/null arguments. | -| `Sequence["FluentValue"]` | Lists, tuples of FluentValue (recursive). | -| `Mapping[str, "FluentValue"]` | Dicts with string keys (recursive). | - -### Constraints -- PEP 695 recursive type alias. Export: `from ftllexengine import FluentValue`. -- Used for type-hinting resolver arguments: `args: dict[str, FluentValue]`. -- `bool` is absent from the explicit union. `bool` is an `int` subtype so type checkers accept it; the explicit omission signals that `bool` has no numeric localization semantics. `NUMBER()` and `CURRENCY()` raise `TypeError` for `bool` at runtime. Convert explicitly: `int(flag)` or `str(flag)`. -- `float` is absent. IEEE 754 cannot represent most decimal fractions exactly. Use `Decimal(str(float_val))` at system boundaries. -- Collections: Arbitrarily nested structures supported (e.g., `{"items": [1, 2, {"nested": "value"}]}`). -- Cache: Collections handled correctly by `_make_hashable()` for cache key generation. -- Location: `runtime/value_types.py`, exported from package root. - ---- - -## `FluentNumber` - -Frozen dataclass wrapping a formatted number to preserve numeric identity, formatted display, and precision simultaneously. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class FluentNumber: - value: int | Decimal - formatted: str - precision: int | None = None - - def __str__(self) -> str: ... -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `value` | `int \| Decimal` | Y | Original numeric value for plural matching | -| `formatted` | `str` | Y | Locale-formatted string for display output | -| `precision` | `int \| None` | N | Visible fraction digit count (CLDR v operand); None if unspecified | - -### Constraints -- Return: Immutable number wrapper. -- State: Frozen dataclass. -- Purpose: NUMBER() produces FluentNumber so the resolver can use `formatted` for output while using `value` and `precision` for CLDR plural category matching. -- `__str__`: Returns `formatted` (the display string). -- `precision`: Reflects ACTUAL visible fraction digits from the formatted string, not the minimum_fraction_digits parameter. -- Import: `from ftllexengine.runtime import FluentNumber` -- Also available: `from ftllexengine import FluentNumber` - ---- - -## `VariableInfo` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class VariableInfo: - name: str - context: VariableContext - span: Span | None = None -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `name` | `str` | Y | Variable name (without $ prefix). | -| `context` | `VariableContext` | Y | Context where variable appears. | -| `span` | `Span \| None` | N | Source position for IDE integration. | - -### Constraints -- Return: Immutable variable metadata. -- State: Frozen dataclass. -- Span: Populated from VariableReference.span for parser-produced ASTs. -- Import: `from ftllexengine.introspection import VariableInfo` - ---- - -## `FunctionCallInfo` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class FunctionCallInfo: - name: str - positional_arg_vars: tuple[str, ...] - named_args: frozenset[str] - span: Span | None = None -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `name` | `str` | Y | Function name (e.g., 'NUMBER'). | -| `positional_arg_vars` | `tuple[str, ...]` | Y | Variable names used as positional arguments (excludes literals). | -| `named_args` | `frozenset[str]` | Y | Named argument keys. | -| `span` | `Span \| None` | N | Source position for IDE integration. | - -### Constraints -- Return: Immutable function call metadata. -- State: Frozen dataclass. -- Span: Populated from FunctionReference.span for parser-produced ASTs. -- positional_arg_vars: Contains only VariableReference names; literals and other expressions not included. -- Import: `from ftllexengine.introspection import FunctionCallInfo` - ---- - -## `ReferenceInfo` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class ReferenceInfo: - id: str - kind: ReferenceKind - attribute: str | None - span: Span | None = None -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `id` | `str` | Y | Referenced message or term ID. | -| `kind` | `ReferenceKind` | Y | Reference type (MESSAGE or TERM). | -| `attribute` | `str \| None` | N | Attribute name if present. | -| `span` | `Span \| None` | N | Source position for IDE integration. | - -### Constraints -- Return: Immutable reference metadata. -- State: Frozen dataclass. -- Span: Populated from MessageReference.span or TermReference.span for parser-produced ASTs. -- Import: `from ftllexengine.introspection import ReferenceInfo` - ---- - -## `CommentType` - -### Signature -```python -class CommentType(StrEnum): - COMMENT = "comment" - GROUP = "group" - RESOURCE = "resource" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `COMMENT` | Standalone comment: `# text` | -| `GROUP` | Group comment: `## text` | -| `RESOURCE` | Resource comment: `### text` | - -### Constraints -- StrEnum: Members ARE strings. `str(CommentType.COMMENT) == "comment"` -- Import: `from ftllexengine.enums import CommentType` - ---- - -## `VariableContext` - -### Signature -```python -class VariableContext(StrEnum): - PATTERN = "pattern" - SELECTOR = "selector" - VARIANT = "variant" - FUNCTION_ARG = "function_arg" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `PATTERN` | Variable in message pattern. | -| `SELECTOR` | Variable in select expression selector. | -| `VARIANT` | Variable in select variant. | -| `FUNCTION_ARG` | Variable in function argument. | - -### Constraints -- StrEnum: Members ARE strings. `str(VariableContext.PATTERN) == "pattern"` -- Import: `from ftllexengine.enums import VariableContext` - ---- - -## `ReferenceKind` - -### Signature -```python -class ReferenceKind(StrEnum): - MESSAGE = "message" - TERM = "term" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `MESSAGE` | Reference to a message: `{ message-id }` | -| `TERM` | Reference to a term: `{ -term-id }` | - -### Constraints -- StrEnum: Members ARE strings. `str(ReferenceKind.MESSAGE) == "message"` -- Import: `from ftllexengine.enums import ReferenceKind` - ---- - -## ISO Introspection Types - -The introspection module provides type-safe access to ISO 3166 (territories) and ISO 4217 (currencies) data via Babel CLDR. Requires Babel installation: `pip install ftllexengine[babel]`. - ---- - -## `BabelImportError` - -Exception raised when a Babel-dependent feature is called without Babel installed. - -### Signature -```python -class BabelImportError(ImportError): - feature: str - - def __init__(self, feature: str) -> None: ... -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `feature` | `str` | Y | Name of the feature/function requiring Babel | - -### Constraints -- Purpose: Fail-fast error with installation instructions when Babel is absent. -- Message: `"{feature} requires Babel for CLDR locale data. Install with: pip install ftllexengine[babel]"` -- Raised by: `get_territory`, `get_currency`, `list_territories`, `list_currencies`, `get_territory_currencies`, `is_valid_territory_code`, `is_valid_currency_code`, `get_cldr_version`, `get_babel_locale`, `clear_locale_cache`, and all `ftllexengine.parsing` parse functions. -- Import: `from ftllexengine.introspection import BabelImportError` - ---- - -## `get_cldr_version` - -Function that returns the Unicode CLDR version used by Babel. - -### Signature -```python -def get_cldr_version() -> str: -``` - -### Constraints -- Return: CLDR version string (e.g., `"47"`). -- Raises: `BabelImportError` if Babel not installed. -- State: No mutable state. -- Thread: Safe. -- Purpose: Debugging locale-specific formatting differences; verifying deployment environments. -- Import: `from ftllexengine.introspection import get_cldr_version` -- Also available: `from ftllexengine import get_cldr_version` - ---- - -## `get_currency_decimal_digits` - -Convenience function returning the ISO 4217 standard decimal precision for a currency code without a locale parameter. - -### Signature -```python -def get_currency_decimal_digits(code: str) -> int | None: -``` - -### Parameters - -| Name | Type | Description | -|:-----|:-----|:------------| -| `code` | `str` | ISO 4217 currency code (e.g., `"USD"`, `"KWD"`). Case-insensitive. | - -### Constraints -- Return: ISO 4217 decimal digit count (`0` for JPY/XAU/XAG, `2` for USD/EUR, `3` for KWD, `4` for CLF), or `None` for unknown or invalid codes. -- Raises: Nothing. Babel is not required. -- State: Pure; consults static tables in `ftllexengine.constants` only. -- Thread: Safe. -- Babel: Not required. Available in parser-only installs (`pip install ftllexengine`). -- Casefold: `len(code) != 3` returns `None` before `.upper()`; single-char expansions (e.g., `'ß'`) are rejected. -- Import: `from ftllexengine.introspection import get_currency_decimal_digits` -- Also available: `from ftllexengine import get_currency_decimal_digits` - ---- - -## `TerritoryCode` - -Type alias for ISO 3166-1 alpha-2 territory codes. - -### Signature -```python -type TerritoryCode = str -``` - -### Constraints -- Purpose: Type annotation for territory codes (e.g., "US", "LV", "DE"). -- Validation: Use `is_valid_territory_code()` to verify. -- Import: `from ftllexengine.introspection import TerritoryCode` - ---- - -## `CurrencyCode` - -Type alias for ISO 4217 currency codes. - -### Signature -```python -type CurrencyCode = str -``` - -### Constraints -- Purpose: Type annotation for currency codes (e.g., "USD", "EUR", "GBP"). -- Validation: Use `is_valid_currency_code()` to verify. -- Import: `from ftllexengine.introspection import CurrencyCode` - ---- - -## `TerritoryInfo` - -ISO 3166-1 territory data with localized name and official language codes. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class TerritoryInfo: - alpha2: TerritoryCode - name: str - currencies: tuple[CurrencyCode, ...] - official_languages: tuple[str, ...] -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `alpha2` | `TerritoryCode` | Y | ISO 3166-1 alpha-2 code | -| `name` | `str` | Y | Localized display name | -| `currencies` | `tuple[CurrencyCode, ...]` | Y | Currency codes in priority order (may be empty) | -| `official_languages` | `tuple[str, ...]` | Y | BCP-47 official language codes (may be empty) | - -### Constraints -- Return: Immutable territory data. -- State: Frozen dataclass. -- Thread: Safe. -- Hashable: Yes. -- Multi-Currency: Territories may have multiple legal tender currencies (e.g., Panama: PAB, USD). -- Multi-Language: Territories may have multiple official languages (e.g., Belgium: fr, nl, de). -- Import: `from ftllexengine.introspection import TerritoryInfo` - ---- - -## `CurrencyInfo` - -ISO 4217 currency data with localized presentation. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class CurrencyInfo: - code: CurrencyCode - name: str - symbol: str - decimal_digits: int -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `code` | `CurrencyCode` | Y | ISO 4217 currency code | -| `name` | `str` | Y | Localized display name | -| `symbol` | `str` | Y | Locale-specific symbol | -| `decimal_digits` | `int` | Y | Standard decimal places (0, 2, 3, or 4) | - -### Constraints -- Return: Immutable currency data. -- State: Frozen dataclass. -- Thread: Safe. -- Hashable: Yes. -- Import: `from ftllexengine.introspection import CurrencyInfo` - ---- - -## `get_territory` - -Look up ISO 3166-1 territory by alpha-2 code. - -### Signature -```python -def get_territory( - code: str, - locale: str = "en", -) -> TerritoryInfo | None: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `code` | `str` | Y | ISO 3166-1 alpha-2 code (case-insensitive) | -| `locale` | `str` | N | Locale for name localization (default: "en") | - -### Constraints -- Return: TerritoryInfo if found, None if unknown. -- Raises: `BabelImportError` if Babel not installed. -- State: Bounded cache per normalized (code, locale) pair. -- Thread: Safe. -- Normalization: Code uppercased, locale normalized (BCP-47/POSIX/lowercase accepted). -- Import: `from ftllexengine.introspection import get_territory` - ---- - -## `get_currency` - -Look up ISO 4217 currency by code. - -### Signature -```python -def get_currency( - code: str, - locale: str = "en", -) -> CurrencyInfo | None: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `code` | `str` | Y | ISO 4217 currency code (case-insensitive) | -| `locale` | `str` | N | Locale for name/symbol localization (default: "en") | - -### Constraints -- Return: CurrencyInfo if found, None if unknown. -- Raises: `BabelImportError` if Babel not installed. -- State: Bounded cache per normalized (code, locale) pair. -- Thread: Safe. -- Normalization: Code uppercased, locale normalized (BCP-47/POSIX/lowercase accepted). -- Import: `from ftllexengine.introspection import get_currency` - ---- - -## `list_territories` - -List all known ISO 3166-1 territories. - -### Signature -```python -def list_territories( - locale: str = "en", -) -> frozenset[TerritoryInfo]: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `locale` | `str` | N | Locale for name localization (default: "en") | - -### Constraints -- Return: Frozen set of all TerritoryInfo objects. -- Raises: `BabelImportError` if Babel not installed. -- State: Bounded cache per normalized locale. -- Thread: Safe. -- Normalization: Locale normalized (BCP-47/POSIX/lowercase accepted). -- Import: `from ftllexengine.introspection import list_territories` - ---- - -## `list_currencies` - -List all known ISO 4217 currencies. - -### Signature -```python -def list_currencies( - locale: str = "en", -) -> frozenset[CurrencyInfo]: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `locale` | `str` | N | Locale for name/symbol localization (default: "en") | - -### Constraints -- Return: Frozen set of all CurrencyInfo objects. -- Raises: `BabelImportError` if Babel not installed. -- State: Bounded cache per normalized locale. -- Thread: Safe. -- Normalization: Locale normalized (BCP-47/POSIX/lowercase accepted). -- Consistency: Same currency count across all locales (uses English fallback for localized names). -- Import: `from ftllexengine.introspection import list_currencies` - ---- - -## `get_territory_currencies` - -Get all currencies for a territory in priority order. - -### Signature -```python -def get_territory_currencies(territory: str) -> tuple[CurrencyCode, ...]: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `territory` | `str` | Y | ISO 3166-1 alpha-2 code (case-insensitive) | - -### Constraints -- Return: Tuple of ISO 4217 currency codes (empty if unknown territory). -- Raises: `BabelImportError` if Babel not installed. -- State: Bounded cache per normalized territory code. -- Thread: Safe. -- Normalization: Territory code uppercased internally. -- Multi-Currency: Returns all legal tender currencies, primary first (e.g., Panama: ("PAB", "USD")). -- Import: `from ftllexengine.introspection import get_territory_currencies` - ---- - -## `is_valid_territory_code` - -Check if string is a valid ISO 3166-1 alpha-2 code. - -### Signature -```python -def is_valid_territory_code(value: str) -> TypeIs[TerritoryCode]: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `value` | `str` | Y | String to validate | - -### Constraints -- Return: True if known ISO 3166-1 alpha-2 code. -- Raises: `BabelImportError` if Babel not installed. -- State: Uses cached territory lookups. -- Thread: Safe. -- TypeIs: Narrows type in type checkers. -- Import: `from ftllexengine.introspection import is_valid_territory_code` - ---- - -## `is_valid_currency_code` - -Check if string is a valid ISO 4217 currency code. - -### Signature -```python -def is_valid_currency_code(value: str) -> TypeIs[CurrencyCode]: -``` - -### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `value` | `str` | Y | String to validate | - -### Constraints -- Return: True if known ISO 4217 currency code. -- Raises: `BabelImportError` if Babel not installed. -- State: Uses cached currency lookups. -- Thread: Safe. -- TypeIs: Narrows type in type checkers. -- Import: `from ftllexengine.introspection import is_valid_currency_code` - ---- - -## `require_currency_code` - -Validate, strip, and normalise a boundary value to a canonical `CurrencyCode`. Eliminates per-caller trim / blank / case normalisation chains for ISO 4217 codes. - -### Signature -```python -def require_currency_code(value: object, field_name: str) -> CurrencyCode: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value. Non-str always raises TypeError. | -| `field_name` | `str` | Y | Human-readable field label used in error messages. | - -### Constraints -- Return: `CurrencyCode` — stripped, uppercased, valid ISO 4217 code. -- Raises: `TypeError` if `value` is not `str`. -- Raises: `ValueError` if the stripped/uppercased value is not a recognised ISO 4217 code. -- Raises: `BabelImportError` if Babel not installed (delegated from `is_valid_currency_code`). -- State: Pure function with cache delegation. -- Thread: Safe. -- Import: `from ftllexengine import require_currency_code` or `from ftllexengine.introspection import require_currency_code`. - ---- - -## `require_territory_code` - -Validate, strip, and normalise a boundary value to a canonical `TerritoryCode`. Eliminates per-caller trim / blank / case normalisation chains for ISO 3166-1 alpha-2 codes. - -### Signature -```python -def require_territory_code(value: object, field_name: str) -> TerritoryCode: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `object` | Y | Raw boundary value. Non-str always raises TypeError. | -| `field_name` | `str` | Y | Human-readable field label used in error messages. | - -### Constraints -- Return: `TerritoryCode` — stripped, uppercased, valid ISO 3166-1 alpha-2 code. -- Raises: `TypeError` if `value` is not `str`. -- Raises: `ValueError` if the stripped/uppercased value is not a recognised ISO 3166-1 territory code. -- Raises: `BabelImportError` if Babel not installed (delegated from `is_valid_territory_code`). -- Note: Casefold-expansion guard prevents `"ß"` (len=1) from matching `"SS"` — raw length is checked before `.upper()`. -- State: Pure function with cache delegation. -- Thread: Safe. -- Import: `from ftllexengine import require_territory_code` or `from ftllexengine.introspection import require_territory_code`. - ---- - -## `clear_iso_cache` - -Clear all ISO introspection caches. - -### Signature -```python -def clear_iso_cache() -> None: -``` - -### Constraints -- Return: None. -- Raises: Never. -- State: Clears all bounded ISO introspection caches. -- Thread: Safe. -- Usage: Testing, memory pressure, locale configuration changes. -- Import: `from ftllexengine.introspection import clear_iso_cache` - ---- +- Import: `from ftllexengine import MessageVariableValidationResult` +- Produced by: `validate_message_variables()` +- Valid when: both `missing_variables` and `extra_variables` are empty diff --git a/docs/DOC_03_LocaleParsing.md b/docs/DOC_03_LocaleParsing.md new file mode 100644 index 00000000..89506040 --- /dev/null +++ b/docs/DOC_03_LocaleParsing.md @@ -0,0 +1,231 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: LOCALE_PARSING +updated: "2026-04-22" +route: + keywords: [parse_decimal, parse_fluent_number, parse_date, parse_datetime, parse_currency, is_valid_decimal, clear_date_caches] + questions: ["how do I parse localized numbers and dates?", "what do the locale-aware parse helpers return?", "which parsing type guards and cache-clear helpers are public?"] +--- + +# Locale Parsing Reference + +This reference covers locale-aware parsing helpers from `ftllexengine.parsing`, including type guards and cache lifecycle utilities. +FTL syntax parsing and AST traversal helpers live in [DOC_03_Parsing.md](DOC_03_Parsing.md). + +## `parse_decimal` + +Function that parses a localized number string into `Decimal`. + +### Signature +```python +def parse_decimal(value: str, locale_code: str) -> ParseResult[Decimal]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `value` | Y | Localized numeric input | +| `locale_code` | Y | Locale for parsing | + +### Constraints +- Return: Parsed `Decimal` or `None` with errors +- Raises: `BabelImportError` when Babel is unavailable +- State: Pure +- Thread: Safe + +--- + +## `parse_fluent_number` + +Function that parses a localized number into `FluentNumber`. + +### Signature +```python +def parse_fluent_number(value: str, locale_code: str) -> ParseResult[FluentNumber]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `value` | Y | Localized numeric input | +| `locale_code` | Y | Locale for parsing | + +### Constraints +- Return: Parsed `FluentNumber` or `None` with errors +- Raises: `BabelImportError` when Babel is unavailable +- State: Pure +- Thread: Safe + +--- + +## `parse_date` + +Function that parses a localized date string into `datetime.date`. + +### Signature +```python +def parse_date(value: str, locale_code: str) -> tuple[date | None, tuple[FrozenFluentError, ...]]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `value` | Y | Localized date input | +| `locale_code` | Y | Locale for parsing | + +### Constraints +- Return: Parsed `date` or `None` with errors +- Raises: `BabelImportError` when Babel is unavailable +- State: Pure +- Thread: Safe + +--- + +## `parse_datetime` + +Function that parses a localized datetime string into `datetime.datetime`. + +### Signature +```python +def parse_datetime( + value: str, + locale_code: str, + *, + tzinfo: timezone | None = None, +) -> tuple[datetime | None, tuple[FrozenFluentError, ...]]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `value` | Y | Localized datetime input | +| `locale_code` | Y | Locale for parsing | +| `tzinfo` | N | Fallback timezone | + +### Constraints +- Return: Parsed `datetime` or `None` with errors +- Raises: `BabelImportError` when Babel is unavailable +- State: Pure +- Thread: Safe + +--- + +## `parse_currency` + +Function that parses localized money input into `(Decimal, ISO code)`. + +### Signature +```python +def parse_currency( + value: str, + locale_code: str, + *, + default_currency: str | None = None, + infer_from_locale: bool = False, +) -> tuple[tuple[Decimal, str] | None, tuple[FrozenFluentError, ...]]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `value` | Y | Localized money input | +| `locale_code` | Y | Locale for parsing | +| `default_currency` | N | Explicit ISO code | +| `infer_from_locale` | N | Infer ISO code from locale | + +### Constraints +- Return: `(amount, code)` or `None` with errors +- Raises: `BabelImportError` when Babel is unavailable +- State: Pure +- Thread: Safe + +--- + +## `is_valid_decimal` + +Function that acts as a `TypeIs[Decimal]` guard for parsed decimal results. + +### Signature +```python +def is_valid_decimal(value: Decimal | None) -> TypeIs[Decimal]: +``` + +### Constraints +- Return: `True` only for usable decimal results +- State: Pure + +--- + +## `is_valid_date` + +Function that acts as a `TypeIs[date]` guard for parsed date results. + +### Signature +```python +def is_valid_date(value: date | None) -> TypeIs[date]: +``` + +### Constraints +- Return: `True` only for usable date results +- State: Pure + +--- + +## `is_valid_datetime` + +Function that acts as a `TypeIs[datetime]` guard for parsed datetime results. + +### Signature +```python +def is_valid_datetime(value: datetime | None) -> TypeIs[datetime]: +``` + +### Constraints +- Return: `True` only for usable datetime results +- State: Pure + +--- + +## `is_valid_currency` + +Function that acts as a `TypeIs[tuple[Decimal, str]]` guard for parsed currency results. + +### Signature +```python +def is_valid_currency(value: tuple[Decimal, str] | None) -> TypeIs[tuple[Decimal, str]]: +``` + +### Constraints +- Return: `True` only for usable currency results +- State: Pure + +--- + +## `clear_date_caches` + +Function that clears cached locale-specific date parsing patterns. + +### Signature +```python +def clear_date_caches() -> None: +``` + +### Constraints +- State: Mutates module cache state +- Thread: Safe + +--- + +## `clear_currency_caches` + +Function that clears cached locale-specific currency parsing data. + +### Signature +```python +def clear_currency_caches() -> None: +``` + +### Constraints +- State: Mutates module cache state +- Thread: Safe diff --git a/docs/DOC_03_Parsing.md b/docs/DOC_03_Parsing.md index b615414a..9c40259c 100644 --- a/docs/DOC_03_Parsing.md +++ b/docs/DOC_03_Parsing.md @@ -1,97 +1,88 @@ --- -afad: "3.3" -version: "0.153.0" +afad: "3.5" +version: "0.163.0" domain: PARSING -updated: "2026-03-13" +updated: "2026-04-22" route: - keywords: [parse, parse_stream, parse_stream_ftl, serialize, validate_resource, FluentParserV1, parse_ftl, serialize_ftl, parse_decimal, parse_fluent_number, syntax, validation, BabelImportError, line_offset, column_offset, format_position, get_line_content, get_error_context, position, incremental, streaming, line iterator] - questions: ["how to parse FTL?", "how to serialize AST?", "how to validate FTL?", "what parser options exist?", "what exceptions do parsing functions raise?", "how do I parse a FluentNumber?", "how to get line and column from offset?", "how to format error position?", "how to get source context for errors?", "how to parse FTL incrementally?", "how to parse FTL from a line iterator?", "how to stream FTL parsing?"] + keywords: [parse_ftl, serialize_ftl, validate_resource, FluentParserV1, Cursor, ASTVisitor, ASTTransformer, ParseError] + questions: ["how do I parse FTL?", "what does validate_resource return?", "what syntax traversal helpers are public?", "where is the syntax parser API documented?"] --- # Parsing Reference ---- +This reference covers FTL syntax parsing, validation, serialization, cursor primitives, and AST traversal helpers. +Locale-aware number/date/currency parsing is documented in [DOC_03_LocaleParsing.md](DOC_03_LocaleParsing.md). -## `parse` +## `parse_ftl` + +Function that parses FTL source into a `Resource` AST. ### Signature ```python -def parse(source: str) -> Resource: +def parse_ftl(source: str) -> Resource: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | FTL source code. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `source` | Y | Raw FTL source | ### Constraints -- Return: Resource AST containing parsed entries. -- Raises: Never (robustness principle: invalid syntax becomes Junk nodes). -- State: None. -- Thread: Safe. +- Return: Parsed `Resource` +- Raises: Never for syntax junk; parse recovery is represented in the AST +- State: Pure +- Thread: Safe --- -## `parse_stream` +## `parse_stream_ftl` + +Function that yields parsed FTL entries from a line iterator. ### Signature ```python -def parse_stream(lines: Iterable[str]) -> Iterator[Entry]: +def parse_stream_ftl(lines: Iterable[str]) -> Iterator[Entry]: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `lines` | `Iterable[str]` | Y | FTL source lines. Trailing newlines stripped per line. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `lines` | Y | Line-oriented FTL source | ### Constraints -- Return: Iterator of `Message | Term | Comment | Junk` nodes in document order. -- Purpose: Incremental alternative to `parse()`. Splits at blank-line boundaries, yields entries as each chunk is parsed. Memory proportional to largest single entry, not full source. -- Note: Span positions in yielded entries are chunk-relative, not stream-relative. Use `parse()` when absolute spans are required (e.g., IDE tooling). -- Raises: Never (robustness: invalid syntax becomes Junk nodes). -- State: None. -- Thread: Safe. -- Import: `from ftllexengine.syntax import parse_stream` or `from ftllexengine import parse_stream_ftl`. +- Return: Entry iterator in source order +- State: Streaming parse +- Thread: Safe --- -## `serialize` +## `serialize_ftl` + +Function that serializes a `Resource` AST back to FTL text. ### Signature ```python -def serialize( - resource: Resource, - *, - validate: bool = True, - max_depth: int = MAX_DEPTH, -) -> str: +def serialize_ftl(resource: Resource, *, validate: bool = True, max_depth: int = 100) -> str: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `resource` | `Resource` | Y | Resource AST node. | -| `validate` | `bool` | N | Validate AST before serialization (default: True). | -| `max_depth` | `int` | N | Maximum nesting depth (default: 100). | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `resource` | Y | AST to serialize | +| `validate` | N | Validate before writing | +| `max_depth` | N | Serialization depth guard | ### Constraints -- Return: FTL source string. -- Raises: `SerializationValidationError` when `validate=True` and AST invalid: - - Identifier names violating grammar `[a-zA-Z][a-zA-Z0-9_-]*` - - Duplicate named argument names within CallArguments - - Named argument values not StringLiteral or NumberLiteral per FTL EBNF -- Note: `SelectExpression` with wrong default-variant count raises `ValueError` at construction (enforced by `SelectExpression.__post_init__`), not by the serializer. -- Raises: `SerializationDepthError` when AST exceeds `max_depth` during validation or serialization. -- State: None. -- Thread: Safe. -- Security: DepthGuard prevents stack overflow from adversarial ASTs. Identifier validation prevents invalid FTL output from programmatic AST construction. -- Roundtrip: Programmatic ASTs with embedded newlines followed by whitespace within a single TextElement are serialized using separate-line format with structural indentation, preserving whitespace through serialize-parse cycles. +- Return: FTL source string +- Raises: `SerializationValidationError` or `SerializationDepthError` +- State: Pure +- Thread: Safe --- ## `validate_resource` -Function validating FTL source for syntax and semantic errors. +Function that validates FTL source without loading it into a runtime bundle. ### Signature ```python @@ -107,35 +98,26 @@ def validate_resource( ``` ### Parameters -| Name | Type | Req | Semantics | -|:-----|:-----|:----|:----------| -| `source` | `str` | Y | FTL source code to validate | -| `parser` | `FluentParserV1 \| None` | N | Custom parser instance | -| `known_messages` | `frozenset[str] \| None` | N | Known message IDs from other resources | -| `known_terms` | `frozenset[str] \| None` | N | Known term IDs from other resources | -| `known_msg_deps` | `Mapping[str, frozenset[str]] \| None` | N | Dependency graph for known messages (enables cross-resource cycle detection) | -| `known_term_deps` | `Mapping[str, frozenset[str]] \| None` | N | Dependency graph for known terms (enables cross-resource cycle detection) | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `source` | Y | Raw FTL source | +| `parser` | N | Parser override | +| `known_messages` | N | Cross-resource message ids | +| `known_terms` | N | Cross-resource term ids | +| `known_msg_deps` | N | Existing message deps | +| `known_term_deps` | N | Existing term deps | ### Constraints -- Return: ValidationResult with errors (syntax), warnings (semantic), metadata -- Raises: `TypeError` if source is not a str. -- State: Read-only +- Return: `ValidationResult` +- State: Pure - Thread: Safe -- Complexity: O(n) where n is AST node count - -### Usage -- When: Validate FTL files in CI/CD pipelines without runtime bundle -- Prefer: This over FluentBundle.validate_resource for parser-only workflows -- Avoid: Repeatedly parsing same FTL source (cache the Resource AST instead) - -### Notes -- Available at top-level: `from ftllexengine import validate_resource` -- No Babel dependency (uses AST inspection only) --- ## `FluentParserV1` +Class that parses FTL source with configurable safety limits. + ### Signature ```python class FluentParserV1: @@ -145,626 +127,248 @@ class FluentParserV1: max_source_size: int | None = None, max_nesting_depth: int | None = None, max_parse_errors: int | None = None, - ) -> None: ... - def parse(self, source: str) -> Resource: ... - @property - def max_source_size(self) -> int: ... - @property - def max_nesting_depth(self) -> int: ... - @property - def max_parse_errors(self) -> int: ... + ) -> None: ``` ### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `max_source_size` | `int \| None` | N | Maximum source size in characters (default: 10,000,000). | -| `max_nesting_depth` | `int \| None` | N | Maximum nesting depth (default: 100); must be positive if specified. | -| `max_parse_errors` | `int \| None` | N | Maximum Junk entries before parser aborts (default: 100). Set to 0 to disable limit. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `max_source_size` | N | Input length bound | +| `max_nesting_depth` | N | Nesting safety bound | +| `max_parse_errors` | N | Recovery error bound | ### Constraints -- Return: Parser instance. -- Raises: `ValueError` if max_nesting_depth is specified and <= 0. -- State: Stores max_source_size, max_nesting_depth, and max_parse_errors configuration. -- Thread: Safe for concurrent parse() calls. -- Security: Validates source size, nesting depth, and error accumulation (DoS prevention). After max_parse_errors Junk entries, parse() aborts to prevent memory exhaustion from malformed input. Setting max_parse_errors=0 disables the limit (not recommended for production). -- Depth Validation: max_nesting_depth automatically clamped to sys.getrecursionlimit() - 50. Logs warning if clamped. - ---- - -## `FluentParserV1.parse` - -### Signature -```python -def parse(self, source: str) -> Resource: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | FTL source code. | - -### Constraints -- Return: Resource AST containing parsed entries. -- Raises: `ValueError` if source exceeds max_source_size. -- State: None. -- Thread: Safe. -- Security: Enforces input size limit. +- Return: Parser instance +- State: Reusable parser configuration +- Thread: Safe +- Main methods: `parse()`, `parse_stream()` --- -## `FluentParserV1.parse_stream` - -### Signature -```python -def parse_stream(self, lines: Iterable[str]) -> Iterator[Entry]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `lines` | `Iterable[str]` | Y | FTL source lines. Trailing newlines stripped per line. | - -### Constraints -- Return: Iterator of `Message | Term | Comment | Junk` nodes in document order. -- Purpose: Incremental parse. Splits stream at blank-line boundaries (top-level FTL entry delimiters per the Fluent spec); each chunk parsed independently. Memory proportional to largest single entry. -- Note: Span positions are chunk-relative, not stream-relative. Comment attachment is semantics-correct — a comment on the line immediately before a message/term (no blank line between) is attached to that entry; comments separated by blank lines are yielded as standalone Comment entries. -- Raises: `ValueError` if any single chunk exceeds max_source_size. -- State: None. -- Thread: Safe. -- Import: `from ftllexengine.syntax.parser import FluentParserV1` (method on FluentParserV1). - ---- +## `parse` -## `ParseContext` +Function that aliases `ftllexengine.syntax.parse()` to `FluentParserV1.parse()`. ### Signature ```python -@dataclass(slots=True) -class ParseContext: - max_nesting_depth: int = MAX_DEPTH - current_depth: int = 0 - - def is_depth_exceeded(self) -> bool: ... - def enter_nesting(self) -> ParseContext: ... +def parse(source: str) -> Resource: ``` ### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `max_nesting_depth` | `int` | Maximum nesting depth for placeables and function calls. | -| `current_depth` | `int` | Current nesting depth (0 = top level). | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `source` | Y | Raw FTL source | ### Constraints -- Immutable: Uses slots for memory efficiency. -- Thread: Safe (explicit parameter passing, no global state). -- Purpose: Replaces thread-local state for async/concurrent compatibility. -- Security: Tracks depth for BOTH placeables and function calls (DoS prevention). -- Import: `from ftllexengine.syntax.parser import ParseContext` +- Import: `from ftllexengine.syntax import parse` +- Return: Parsed `Resource` +- Purpose: syntax-module convenience alias for parser-only tooling code +- State: Pure +- Thread: Safe --- -## `ParseContext.is_depth_exceeded` - -### Signature -```python -def is_depth_exceeded(self) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: True if current_depth >= max_nesting_depth. -- State: Read-only. -- Thread: Safe. - ---- +## `parse_stream` -## `ParseContext.enter_nesting` +Function that aliases `ftllexengine.syntax.parse_stream()` to `FluentParserV1.parse_stream()`. ### Signature ```python -def enter_nesting(self) -> ParseContext: +def parse_stream(lines: Iterable[str]) -> Iterator[Entry]: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| +| Name | Req | Semantics | +|:-----|:----|:----------| +| `lines` | Y | Line-oriented FTL source | ### Constraints -- Return: New ParseContext with incremented depth. -- State: None (returns new instance). -- Thread: Safe. -- Usage: Called when entering placeables, function calls, or term calls with arguments. +- Import: `from ftllexengine.syntax import parse_stream` +- Return: Entry iterator in source order +- Purpose: syntax-module convenience alias for streaming parse workflows +- State: Streaming parse +- Thread: Safe --- -## `parse_decimal` - -### Signature -```python -def parse_decimal( - value: str, - locale_code: str, -) -> ParseResult[Decimal]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | Locale-formatted number string. | -| `locale_code` | `str` | Y | BCP 47 locale identifier. | - -### Constraints -- Return: Tuple of (Decimal or None, errors). -- Raises: `BabelImportError` if Babel not installed. -- State: None. -- Thread: Safe. -- Dependency: Requires Babel for CLDR data. - ---- +## `serialize` -## `parse_fluent_number` +Function that aliases `ftllexengine.syntax.serialize()` to the serializer implementation. ### Signature ```python -def parse_fluent_number( - value: str, - locale_code: str, -) -> ParseResult[FluentNumber]: +def serialize(resource: Resource, *, validate: bool = True, max_depth: int = 100) -> str: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | Locale-formatted number string. | -| `locale_code` | `str` | Y | BCP 47 locale identifier. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `resource` | Y | AST to serialize | +| `validate` | N | Validate before writing | +| `max_depth` | N | Serialization depth guard | ### Constraints -- Return: Tuple of (`FluentNumber` or None, errors). -- Raises: `BabelImportError` if Babel not installed. -- State: None. -- Thread: Safe. -- Dependency: Requires Babel for CLDR data. -- Precision: Preserves visible fraction digits using the original localized display string. -- Usage: Use when parsed numeric input should flow back into Fluent formatting or select expressions without manual `parse_decimal()` + `make_fluent_number()` composition. +- Import: `from ftllexengine.syntax import serialize` +- Return: FTL source string +- Raises: `SerializationValidationError` or `SerializationDepthError` +- Purpose: syntax-module serializer entry point +- State: Pure +- Thread: Safe --- -## `parse_date` - -### Signature -```python -def parse_date( - value: str, - locale_code: str, -) -> tuple[date | None, tuple[FrozenFluentError, ...]]: -``` +## `Cursor` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | Locale-formatted date string. | -| `locale_code` | `str` | Y | BCP 47 locale identifier. | - -### Constraints -- Return: Tuple of (date or None, errors). -- Raises: `BabelImportError` if Babel not installed. -- State: None. -- Thread: Safe. -- Dependency: Requires Babel for CLDR data. -- Preprocessing: Era strings stripped (English defaults + localized from Babel CLDR). Timezone pattern tokens stripped from format. Leading/trailing whitespace normalized after pattern conversion. -- Styles: Tries "short", "medium", "long", and "full" CLDR date patterns. -- Year variants: CLDR short patterns often specify a 2-digit year (`yy`); a 4-digit year variant is also accepted automatically. Both `"15.01.26"` and `"15.01.2026"` succeed for `lv_LV`. -- Safety: Uses `hasattr` fallback for Babel format object attribute access. - ---- - -## `parse_datetime` +Class that tracks an immutable parse position inside LF-normalized source text. ### Signature ```python -def parse_datetime( - value: str, - locale_code: str, - *, - tzinfo: timezone | None = None, -) -> tuple[datetime | None, tuple[FrozenFluentError, ...]]: +class Cursor: + def __init__(self, source: str, pos: int) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | Locale-formatted datetime string. | -| `locale_code` | `str` | Y | BCP 47 locale identifier. | -| `tzinfo` | `timezone \| None` | N | Timezone to assign. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `source` | Y | LF-normalized source text | +| `pos` | Y | Character offset | ### Constraints -- Return: Tuple of (datetime or None, errors). -- Raises: `BabelImportError` if Babel not installed. -- State: None. -- Thread: Safe. -- Dependency: Requires Babel for CLDR data. -- Preprocessing: Era strings stripped (English defaults + localized from Babel CLDR). Timezone pattern tokens stripped from format. Leading/trailing whitespace normalized after pattern conversion. -- Styles: Tries "short", "medium", "long", and "full" CLDR datetime patterns. -- Year variants: 4-digit year inputs accepted for CLDR styles specifying `yy` (same as `parse_date`). -- Safety: Uses `hasattr` fallback for Babel format object attribute access. +- Import: `from ftllexengine.syntax import Cursor` +- Purpose: parser-building primitive for forward-only source traversal +- Invariants: `0 <= pos <= len(source)` +- Helpers: `is_eof`, `current`, `peek()`, `advance()`, `compute_line_col()` +- State: Immutable +- Thread: Safe --- -## `parse_currency` - -### Signature -```python -def parse_currency( - value: str, - locale_code: str, - *, - default_currency: str | None = None, - infer_from_locale: bool = False, -) -> tuple[tuple[Decimal, str] | None, tuple[FrozenFluentError, ...]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `str` | Y | Currency string with amount and symbol. | -| `locale_code` | `str` | Y | BCP 47 locale identifier. | -| `default_currency` | `str \| None` | N | Fallback currency for ambiguous symbols ($, kr, ¥). | -| `infer_from_locale` | `bool` | N | Infer currency from locale if symbol ambiguous. | - -### Constraints -- Return: Tuple of ((amount, currency_code) or None, errors). -- Raises: `BabelImportError` if Babel not installed. -- State: None. -- Thread: Safe. -- Dependency: Requires Babel for CLDR data. -- Validation: ISO 4217 codes validated against CLDR data. Non-ASCII uppercase letters rejected (ASCII A-Z only). -- Ambiguous: Yen sign (`¥`) resolves to CNY for `zh_*` locales, JPY otherwise. -- Ambiguous: Pound sign (`£`) resolves to EGP for `ar_*` locales, GBP otherwise. -- Resolution: With `infer_from_locale=True`, ambiguous symbols use locale-aware defaults. - ---- +## `ftllexengine.syntax.ParseResult` -## `is_valid_decimal` +Generic syntax-parser result object carrying both a parsed value and the next cursor. ### Signature ```python -def is_valid_decimal(value: Decimal | None) -> TypeIs[Decimal]: +@dataclass(frozen=True, slots=True) +class ParseResult[T]: + value: T + cursor: Cursor ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `Decimal \| None` | Y | Decimal to validate (may be None). | - ### Constraints -- Return: True if finite Decimal, False if None/NaN/Infinity. -- Raises: None. -- State: None. -- Thread: Safe. - ---- - -## `is_valid_date` - -### Signature -```python -def is_valid_date(value: date | None) -> TypeIs[date]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `date \| None` | Y | Date to validate. | - -### Constraints -- Return: True if not None. -- Raises: None. -- State: None. +- Import: `from ftllexengine.syntax import ParseResult` +- Distinct from: root `ParseResult[T]`, which is the locale-parsing `(value, errors)` alias +- Purpose: low-level parser-combinator result for syntax internals and tooling +- State: Immutable +- Thread: Safe --- -## `is_valid_datetime` +## `ParseError` -### Signature -```python -def is_valid_datetime(value: datetime | None) -> TypeIs[datetime]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `datetime \| None` | Y | Datetime to validate. | - -### Constraints -- Return: True if not None. -- Raises: None. -- State: None. - ---- - -## `is_valid_currency` +Immutable syntax parse error carrying a `Cursor` and optional expected-token list. ### Signature ```python -def is_valid_currency( - value: tuple[Decimal, str] | None, -) -> TypeIs[tuple[Decimal, str]]: +@dataclass(frozen=True, slots=True) +class ParseError: + message: str + cursor: Cursor + expected: tuple[str, ...] = () ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `tuple[Decimal, str] \| None` | Y | Currency tuple to validate. | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `message` | Y | Human-readable failure message | +| `cursor` | Y | Error location | +| `expected` | N | Expected token spellings | ### Constraints -- Return: True if not None and amount is finite. -- Raises: None. -- State: None. +- Import: `from ftllexengine.syntax import ParseError` +- Helpers: `format_error()`, `format_with_context()` +- Purpose: parser-building error object for tooling and low-level syntax helpers +- State: Immutable +- Thread: Safe --- -## `clear_date_caches` +## `SerializationValidationError` -Function that clears date and datetime pattern caches. +Exception raised when an AST would serialize into invalid Fluent syntax. ### Signature ```python -def clear_date_caches() -> None: +class SerializationValidationError(ValueError): ... ``` ### Constraints -- Return: None. -- Raises: Never. -- State: Clears `_get_date_patterns` and `_get_datetime_patterns` functools.cache. -- Thread: Safe (functools.cache internal locking). -- Babel: REQUIRED. Install with `pip install ftllexengine[babel]`. -- Import: `from ftllexengine.parsing import clear_date_caches` +- Import: `from ftllexengine.syntax import SerializationValidationError` +- Typical triggers: invalid identifiers, duplicate named arguments, or non-literal named-argument values +- Raised by: `serialize()` when `validate=True` --- -## `clear_currency_caches` +## `SerializationDepthError` -Function that clears currency-related caches. +Exception raised when serialization exceeds the configured AST nesting limit. ### Signature ```python -def clear_currency_caches() -> None: +class SerializationDepthError(ValueError): ... ``` ### Constraints -- Return: None. -- Raises: Never. -- State: Clears CLDR currency maps, pattern, and locale caches. -- Thread: Safe (functools.cache internal locking). -- Babel: REQUIRED. Install with `pip install ftllexengine[babel]`. -- Import: `from ftllexengine.parsing import clear_currency_caches` - ---- - -## Module Constants - -### `ISO_CURRENCY_CODE_LENGTH` - -```python -ISO_CURRENCY_CODE_LENGTH: int = 3 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 3 | -| Location | `ftllexengine.parsing.currency` | - -- Purpose: ISO 4217 currency codes are exactly 3 uppercase ASCII letters (A-Z only; non-ASCII uppercase rejected). -- Usage: Validation of currency code format in parsing functions. - ---- - -### `MAX_DEPTH` - -```python -MAX_DEPTH: int = 100 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 100 | -| Location | `ftllexengine.constants` | - -- Purpose: Unified depth limit for parser, resolver, serializer, and validators. -- Usage: Default for ParseContext.max_nesting_depth, FluentParserV1, serialize(max_depth=...). -- Security: Prevents DoS via deeply nested placeables and stack overflow from adversarial ASTs. - ---- - -### `MAX_LOCALE_LENGTH_HARD_LIMIT` - -```python -MAX_LOCALE_LENGTH_HARD_LIMIT: int = 1000 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 1000 | -| Location | `ftllexengine.constants` | - -- Purpose: Hard limit on locale code length for DoS prevention. -- Usage: FluentBundle input validation. Codes exceeding limit are rejected. -- Security: Prevents memory exhaustion from extremely long locale strings. -- Note: MAX_LOCALE_CODE_LENGTH (35) triggers warnings; this limit triggers rejection. - ---- - -## Parsing Behavior - -### Line Ending Normalization - -Parser normalizes all line endings to LF before parsing. - -### Constraints -- Normalization: CRLF (`\r\n`) and CR (`\r`) converted to LF (`\n`). -- Timing: Applied before any parsing occurs. -- Scope: Affects all line/column tracking and comment merging. -- Rationale: Per Fluent spec, ensures consistent AST representation across platforms. +- Import: `from ftllexengine.syntax import SerializationDepthError` +- Typical trigger: adversarial or malformed AST nesting beyond `max_depth` +- Raised by: `serialize()` --- -### Column-1 Enforcement +## `ASTVisitor` -Top-level entries must start at column 1 (beginning of line). - -### Constraints -- Rule: Messages, terms, and comments must start at column 1. -- Indented: Indented content at top level becomes Junk entry. -- Error: Junk annotation includes "Entry must start at column 1". -- Rationale: Per Fluent spec for message/term/comment positioning. - ---- - -### Pattern Whitespace Handling - -Patterns have leading/trailing blank lines trimmed. - -### Constraints -- Leading: Leading whitespace/blank lines removed from first TextElement. -- Trailing: Trailing blank lines removed (but trailing spaces on content lines preserved). -- Continuation: Multi-line patterns joined with newline (`\n`), not space. -- Implementation: `_trim_pattern_blank_lines()` post-processes pattern elements. -- Rationale: Per Fluent spec whitespace handling rules. - ---- - -## Source Position Utilities - -Character-offset-to-line/column conversion for FTL error reporting. All positions are character-based (Unicode code points, not bytes). Import: `from ftllexengine.syntax.position import ...` - ---- - -## `line_offset` - -### Signature -```python -def line_offset(source: str, pos: int) -> int: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | Complete FTL source text. | -| `pos` | `int` | Y | Character offset (0-indexed). | - -### Constraints -- Return: 0-based line number at `pos`. -- Raises: `ValueError` if `pos < 0`. -- State: None. -- Thread: Safe. -- Clamping: `pos` clamped to `len(source)` before counting. -- Complexity: O(pos) — counts `\n` chars in range. -- Import: `from ftllexengine.syntax.position import line_offset` - ---- - -## `column_offset` - -### Signature -```python -def column_offset(source: str, pos: int) -> int: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | Complete FTL source text. | -| `pos` | `int` | Y | Character offset (0-indexed). | - -### Constraints -- Return: 0-based column number at `pos` (characters since last `\n`). -- Raises: `ValueError` if `pos < 0`. -- State: None. -- Thread: Safe. -- Clamping: `pos` clamped to `len(source)` before computing. -- Import: `from ftllexengine.syntax.position import column_offset` - ---- - -## `format_position` +Generic base visitor class for read-only Fluent AST traversal. ### Signature ```python -def format_position(source: str, pos: int, zero_based: bool = True) -> str: +class ASTVisitor[T = ASTNode]: + def __init__(self, *, max_depth: int | None = None) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | Complete FTL source text. | -| `pos` | `int` | Y | Character offset (0-indexed). | -| `zero_based` | `bool` | N | Use 0-based indexing (default: True). | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `max_depth` | N | Traversal depth guard | ### Constraints -- Return: `"line:col"` string (e.g., `"2:5"` zero-based, `"3:6"` one-based). -- Raises: `ValueError` if `pos < 0`. -- State: None. -- Thread: Safe. -- Import: `from ftllexengine.syntax.position import format_position` +- Import: `from ftllexengine.syntax import ASTVisitor` +- Purpose: subclass and override `visit_NodeType()` methods for analysis or linting +- Helpers: `visit()` dispatches by node type; `generic_visit()` traverses child nodes +- Depth: protected by `DepthGuard` +- Thread: Safe for independent visitor instances --- -## `get_line_content` - -### Signature -```python -def get_line_content(source: str, line_number: int, zero_based: bool = True) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | Complete FTL source text. | -| `line_number` | `int` | Y | Line to extract. | -| `zero_based` | `bool` | N | Line number is 0-based (default: True). | - -### Constraints -- Return: Content of requested line without trailing newline. -- Raises: `ValueError` if `line_number < 0` or `line_number >= len(lines)`. -- State: None. -- Thread: Safe. -- Import: `from ftllexengine.syntax.position import get_line_content` +## `ASTTransformer` ---- - -## `get_error_context` +Generic base visitor class for Fluent AST rewrite passes. ### Signature ```python -def get_error_context( - source: str, - pos: int, - context_lines: int = 2, - marker: str = "^", -) -> str: +class ASTTransformer(ASTVisitor[ASTNode | None | list[ASTNode]]): + def __init__(self, *, max_depth: int | None = None) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | Complete FTL source text. | -| `pos` | `int` | Y | Character offset of error (0-indexed). | -| `context_lines` | `int` | N | Lines of context before/after error (default: 2). | -| `marker` | `str` | N | Character for error marker line (default: `"^"`). | +| Name | Req | Semantics | +|:-----|:----|:----------| +| `max_depth` | N | Traversal depth guard | ### Constraints -- Return: Multi-line string with context lines and marker pointing to error column. -- Raises: `ValueError` if `pos < 0`. -- State: None. -- Thread: Safe. -- EOF: If `pos` points past the last line, emits an empty line with marker. -- Import: `from ftllexengine.syntax.position import get_error_context` +- Import: `from ftllexengine.syntax import ASTTransformer` +- Purpose: return replacement nodes, `None`, or node lists while walking the AST +- Typical use: transforms, migrations, or source-to-source rewrites before `serialize()` +- Depth: protected by `DepthGuard` +- Thread: Safe for independent transformer instances --- diff --git a/docs/DOC_04_Introspection.md b/docs/DOC_04_Introspection.md new file mode 100644 index 00000000..0e094409 --- /dev/null +++ b/docs/DOC_04_Introspection.md @@ -0,0 +1,362 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: INTROSPECTION +updated: "2026-04-22" +route: + keywords: [introspection, validate_message_variables, extract_variables, extract_references, ISO 4217, ISO 3166, get_currency, get_territory] + questions: ["how do I inspect a message's variables and references?", "which ISO lookup helpers exist?", "how do I validate message-variable schemas?", "which Babel-backed introspection helpers are public?"] +--- + +# Introspection Reference + +--- + +## `validate_message_variables` + +Function that checks a parsed message or term against an expected variable schema. + +### Signature +```python +def validate_message_variables( + message: Message | Term, + expected_variables: frozenset[str] | set[str], +) -> MessageVariableValidationResult: +``` + +### Constraints +- Return: `MessageVariableValidationResult` +- Purpose: boot-time or CI enforcement that messages declare exactly the variables the caller expects +- Babel: not required; operates on AST only + +--- + +## `introspect_message` + +Function that extracts variables, function calls, references, and selector presence from a `Message` or `Term`. + +### Signature +```python +def introspect_message( + message: Message | Term, + *, + use_cache: bool = True, +) -> MessageIntrospection: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `message` | Y | Message or term AST node | +| `use_cache` | N | Enable weak-reference memoization | + +### Constraints +- Return: `MessageIntrospection` +- Raises: `TypeError` when `message` is not a `Message` or `Term` +- Cache: weak-reference cache keyed by AST node identity +- Babel: not required; operates on AST only + +--- + +## `extract_variables` + +Function that returns the declared variable names for a `Message` or `Term`. + +### Signature +```python +def extract_variables(message: Message | Term) -> frozenset[str]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `message` | Y | Message or term AST node | + +### Constraints +- Return: variable names without `$` prefixes +- Purpose: simplified convenience wrapper over `introspect_message()` +- Babel: not required; operates on AST only + +--- + +## `extract_references` + +Function that returns all referenced message ids and term ids from a `Message` or `Term`. + +### Signature +```python +def extract_references(entry: Message | Term) -> tuple[frozenset[str], frozenset[str]]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `entry` | Y | Message or term AST node | + +### Constraints +- Return: `(message_refs, term_refs)` with attribute-qualified ids preserved +- Purpose: dependency analysis and impact assessment +- Babel: not required; operates on AST only + +--- + +## `extract_references_by_attribute` + +Function that returns message and term references grouped by source attribute. + +### Signature +```python +def extract_references_by_attribute( + entry: Message | Term, +) -> dict[str | None, tuple[frozenset[str], frozenset[str]]]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `entry` | Y | Message or term AST node | + +### Constraints +- Return: mapping from attribute name, or `None` for the value pattern, to reference sets +- Purpose: attribute-granular dependency and cycle analysis +- Babel: not required; operates on AST only + +--- + +## `clear_introspection_cache` + +Function that clears the message-introspection weak-reference cache. + +### Signature +```python +def clear_introspection_cache() -> None: +``` + +### Constraints +- State: Mutates module cache state +- Purpose: testing, benchmarking, or manual memory-pressure relief +- Thread: Safe + +--- + +## `require_currency_code` + +Boundary validator for ISO 4217 currency codes. + +### Signature +```python +def require_currency_code(value: object, field_name: str) -> CurrencyCode: +``` + +### Constraints +- Return: canonical uppercase `CurrencyCode` +- Raises: `TypeError` for non-strings; `ValueError` for invalid codes; `BabelImportError` when Babel is unavailable +- Purpose: validated currency boundary input for formatting and domain models + +--- + +## `require_territory_code` + +Boundary validator for ISO 3166-1 alpha-2 territory codes. + +### Signature +```python +def require_territory_code(value: object, field_name: str) -> TerritoryCode: +``` + +### Constraints +- Return: canonical uppercase `TerritoryCode` +- Raises: `TypeError` for non-strings; `ValueError` for invalid codes; `BabelImportError` when Babel is unavailable +- Purpose: validated territory boundary input for locale-aware domain logic + +--- + +## `is_valid_currency_code` + +Type guard for ISO 4217 currency codes. + +### Signature +```python +def is_valid_currency_code(value: str) -> TypeIs[CurrencyCode]: +``` + +### Constraints +- Return: `True` only for known ISO 4217 codes +- Raises: `BabelImportError` when Babel is unavailable +- Purpose: runtime narrowing from `str` to `CurrencyCode` + +--- + +## `is_valid_territory_code` + +Type guard for ISO 3166-1 alpha-2 territory codes. + +### Signature +```python +def is_valid_territory_code(value: str) -> TypeIs[TerritoryCode]: +``` + +### Constraints +- Return: `True` only for known ISO 3166-1 alpha-2 codes +- Raises: `BabelImportError` when Babel is unavailable +- Purpose: runtime narrowing from `str` to `TerritoryCode` + +--- + +## `get_currency_decimal_digits` + +Function that returns the embedded ISO 4217 decimal precision for a currency code. + +### Signature +```python +def get_currency_decimal_digits(code: str) -> int | None: +``` + +### Constraints +- Return: decimal precision for a known code, otherwise `None` +- Babel: not required; uses the embedded ISO 4217 tables +- Purpose: authoritative ISO currency exponent lookup + +--- + +## `get_cldr_version` + +Function that reports the Babel CLDR data version. + +### Signature +```python +def get_cldr_version() -> str: +``` + +### Constraints +- Return: CLDR version string from Babel +- Raises: `BabelImportError` when Babel is unavailable + +--- + +## `get_territory` + +Function that looks up localized ISO 3166-1 territory metadata. + +### Signature +```python +def get_territory(code: str, locale: str = "en") -> TerritoryInfo | None: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `code` | Y | ISO alpha-2 territory code | +| `locale` | N | Localization locale | + +### Constraints +- Return: `TerritoryInfo`, or `None` for unknown codes +- Raises: `BabelImportError` when Babel is unavailable +- Cache: cached per normalized `(code, locale)` pair +- Thread: Safe + +--- + +## `get_currency` + +Function that looks up localized ISO 4217 currency metadata. + +### Signature +```python +def get_currency(code: str, locale: str = "en") -> CurrencyInfo | None: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `code` | Y | ISO currency code | +| `locale` | N | Localization locale | + +### Constraints +- Return: `CurrencyInfo`, or `None` for unknown codes +- Raises: `BabelImportError` when Babel is unavailable +- Cache: cached per normalized `(code, locale)` pair +- Thread: Safe + +--- + +## `list_territories` + +Function that lists all known territories for a locale. + +### Signature +```python +def list_territories(locale: str = "en") -> frozenset[TerritoryInfo]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `locale` | N | Localization locale | + +### Constraints +- Return: `frozenset[TerritoryInfo]` +- Raises: `BabelImportError` when Babel is unavailable +- Cache: cached per normalized locale +- Thread: Safe + +--- + +## `list_currencies` + +Function that lists all known currencies for a locale. + +### Signature +```python +def list_currencies(locale: str = "en") -> frozenset[CurrencyInfo]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `locale` | N | Localization locale | + +### Constraints +- Return: `frozenset[CurrencyInfo]` +- Raises: `BabelImportError` when Babel is unavailable +- Completeness: returns the full ISO 4217 set, falling back to English names when CLDR localization is missing +- Cache: cached per normalized locale +- Thread: Safe + +--- + +## `get_territory_currencies` + +Function that returns the active legal-tender ISO currency codes for a territory. + +### Signature +```python +def get_territory_currencies(territory: str) -> tuple[CurrencyCode, ...]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `territory` | Y | ISO alpha-2 territory code | + +### Constraints +- Return: tuple of active ISO 4217 currency codes, or `()` for unknown territories +- Raises: `BabelImportError` when Babel is unavailable +- Cache: cached per normalized territory code +- Thread: Safe + +--- + +## `clear_iso_cache` + +Function that clears the ISO lookup caches used by territory and currency introspection. + +### Signature +```python +def clear_iso_cache() -> None: +``` + +### Constraints +- State: Mutates module cache state +- Purpose: testing, benchmarking, or manual memory-pressure relief +- Thread: Safe diff --git a/docs/DOC_04_Runtime.md b/docs/DOC_04_Runtime.md index 83151e77..1b9d344f 100644 --- a/docs/DOC_04_Runtime.md +++ b/docs/DOC_04_Runtime.md @@ -1,1615 +1,280 @@ --- -afad: "3.3" -version: "0.162.0" +afad: "3.5" +version: "0.163.0" domain: RUNTIME -updated: "2026-03-23" +updated: "2026-04-22" route: - keywords: [number_format, datetime_format, currency_format, make_fluent_number, FluentNumber, fluent_function, formatting, locale, IntegrityCache, CacheConfig, CacheStats, LocalizationCacheStats, CacheAuditLogEntry, WriteLogEntry, audit-log, NaN, idempotent_writes, content_hash, IntegrityCacheEntry, detect_cycles, entry_dependency_set, make_cycle_key, required_messages, clear_module_caches, component_filter] - questions: ["how to format numbers?", "how to format dates?", "how to format currency?", "what is FluentNumber?", "how do I construct a FluentNumber manually?", "how do I register a custom Fluent function?", "what is IntegrityCache?", "how to enable cache audit?", "how do I read the cache audit log?", "how does cache handle NaN?", "what is idempotent write?", "how does thundering herd work?", "how to detect dependency cycles?", "what is CacheStats?", "what fields does get_cache_stats return?", "what is required_messages in LocalizationBootConfig?", "how do I clear specific caches?"] + keywords: [CacheConfig, FunctionRegistry, fluent_function, number_format, currency_format, select_plural_category, clear_module_caches] + questions: ["how do I configure runtime formatting?", "how do custom functions and registries work?", "where are cache config and write-log entry types documented?"] --- # Runtime Reference ---- - -## `FluentNumber` - -Wrapper preserving numeric identity and precision through NUMBER() formatting. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class FluentNumber: - value: int | Decimal - formatted: str - precision: int | None = None -``` - -### Parameters -| Field | Type | Req | Description | -|:------|:-----|:----|:------------| -| `value` | `int \| Decimal` | Y | Original numeric value for plural matching. `bool` is rejected — use `int(b)` at call site. | -| `formatted` | `str` | Y | Locale-formatted string for display. | -| `precision` | `int \| None` | N | Visible fraction digit count (CLDR v operand). Must be >= 0 when set. None if not specified. | - -### Properties -| Property | Type | Description | -|:---------|:-----|:------------| -| `decimal_value` | `Decimal` | Returns `value` as exact `Decimal`. `int` is coerced via `Decimal(value)` (no precision loss); `Decimal` is returned as the same object. | - -### Constraints -- Return: Frozen dataclass instance. -- Raises: `TypeError` if `value` is `bool` (no numeric localization semantics). `ValueError` if `precision < 0` (CLDR v operand is always non-negative). -- State: Immutable. Safe for caching. -- Thread: Safe. -- Usage: Returned by `number_format()`, `currency_format()`, `parse_fluent_number()`, and `make_fluent_number()`. Preserves numeric identity and precision metadata for select expressions. -- Str: `str(fluent_number)` returns `formatted` for display. -- Plural: Precision affects CLDR plural category selection. For example, "1.00" with precision=2 selects "other" category (v=2), not "one" (v=0). -- Import: `from ftllexengine.runtime import FluentNumber` -- Also available: `from ftllexengine import FluentNumber` - ---- - -## `make_fluent_number` - -Helper that constructs a `FluentNumber` from a domain numeric value. - -### Signature -```python -def make_fluent_number( - value: int | Decimal, - *, - formatted: str | None = None, -) -> FluentNumber: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `int \| Decimal` | Y | Canonical numeric value. | -| `formatted` | `str \| None` | N | Display string. Defaults to `str(value)`. | - -### Constraints -- Return: `FluentNumber` with inferred visible precision. -- Raises: `TypeError` if `value` is `bool` or not `int \| Decimal`. -- State: Pure. -- Thread: Safe. -- Precision: When `formatted` is provided, visible fraction digits are inferred from the rendered string when it still represents `value`; otherwise precision falls back to the value's own decimal places. -- Usage: Use when downstream code already has an `int` or `Decimal` and needs Fluent selector semantics without calling `NUMBER()` or `CURRENCY()`. -- Import: `from ftllexengine.runtime import make_fluent_number` - ---- - -## `number_format` - -### Signature -```python -def number_format( - value: int | Decimal, - locale_code: str = "en-US", - *, - minimum_fraction_digits: int = 0, - maximum_fraction_digits: int = 3, - use_grouping: bool = True, - pattern: str | None = None, - numbering_system: str = "latn", -) -> FluentNumber: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `int \| Decimal` | Y | Number to format. | -| `locale_code` | `str` | N | BCP 47 locale code. | -| `minimum_fraction_digits` | `int` | N | Minimum decimal places. | -| `maximum_fraction_digits` | `int` | N | Maximum decimal places. | -| `use_grouping` | `bool` | N | Use thousands separator. | -| `pattern` | `str \| None` | N | Custom Babel number pattern. | -| `numbering_system` | `str` | N | CLDR numbering system (e.g. `"arab"`, `"deva"`). Default: `"latn"`. | - -### Constraints -- Return: `FluentNumber` with formatted string, original numeric value, and precision metadata. -- Raises: `TypeError` / `ValueError` for invalid locale boundary values. -- Raises: Unknown but structurally valid locales fall back to en_US with a logged warning. -- State: None. -- Thread: Safe. -- Plural: Original value and precision preserved for correct CLDR plural category matching in select expressions. Precision parameter affects plural category selection (e.g., "1.00" with minimum_fraction_digits=2 selects "other" category due to v=2, not "one"). -- Bounds: Fraction digit parameters clamped to `MAX_FORMAT_DIGITS` (100). Values exceeding the limit are rejected with `ValueError`. -- Clamp: When `minimum_fraction_digits > maximum_fraction_digits`, `maximum` is silently raised to `minimum`. Matches JavaScript `Intl.NumberFormat` semantics: `NUMBER($n, minimumFractionDigits: 4)` yields 4 decimal places, not an error. -- Rounding: Delegates to Babel `format_decimal` with `decimal_quantization=True` (default). Uses `ROUND_HALF_EVEN` (IEEE 754 banker's rounding). Non-finite `Decimal` values (`Infinity`, `NaN`) are forwarded as-is; behaviour is locale-defined. - ---- - -## `datetime_format` - -### Signature -```python -def datetime_format( - value: date | datetime | str, - locale_code: str = "en-US", - *, - date_style: Literal["short", "medium", "long", "full"] = "medium", - time_style: Literal["short", "medium", "long", "full"] | None = None, - pattern: str | None = None, -) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `date \| datetime \| str` | Y | Date, datetime, or ISO 8601 string. Plain `date` is promoted to midnight `datetime` when `time_style` or `pattern` is set. | -| `locale_code` | `str` | N | BCP 47 locale code. | -| `date_style` | `Literal[...]` | N | Date format style. | -| `time_style` | `Literal[...] \| None` | N | Time format style. | -| `pattern` | `str \| None` | N | Custom Babel datetime pattern. | - -### Constraints -- Return: Formatted date/datetime string. -- Raises: `FrozenFluentError` (FORMATTING) for invalid ISO 8601 strings. -- Raises: `TypeError` / `ValueError` for invalid locale boundary values. -- Raises: Unknown but structurally valid locales fall back to en_US. -- State: None. -- Thread: Safe. - ---- - -## `currency_format` - -### Signature -```python -def currency_format( - value: int | Decimal, - locale_code: str = "en-US", - *, - currency: str, - currency_display: Literal["symbol", "code", "name"] = "symbol", - pattern: str | None = None, - use_grouping: bool = True, - currency_digits: bool = True, - numbering_system: str = "latn", -) -> FluentNumber: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `value` | `int \| Decimal` | Y | Monetary amount. | -| `locale_code` | `str` | N | BCP 47 locale code. | -| `currency` | `str` | Y | ISO 4217 currency code. | -| `currency_display` | `Literal[...]` | N | Display style: `"symbol"`, `"code"`, or `"name"`. | -| `pattern` | `str \| None` | N | Custom CLDR currency pattern. | -| `use_grouping` | `bool` | N | Use thousands separator. Default: `True`. | -| `currency_digits` | `bool` | N | Apply ISO 4217 decimal digit count (e.g. JPY=0, BHD=3). Ignored when `pattern` is set. Default: `True`. | -| `numbering_system` | `str` | N | CLDR numbering system (e.g. `"arab"`, `"deva"`). Default: `"latn"`. | - -### Constraints -- Return: `FluentNumber` with formatted currency string and computed precision. Enables CURRENCY results as selectors in plural/select expressions. -- Raises: `TypeError` / `ValueError` for invalid locale boundary values. -- Raises: Unknown but structurally valid locales fall back to en_US with a logged warning. -- State: None. -- Thread: Safe. -- Rounding: Delegates to Babel `format_currency` with `decimal_quantization=True` (default). Uses `ROUND_HALF_EVEN`. `currency_digits=True` (default) applies ISO 4217 digit counts before formatting. `currency_digits` is ignored when `pattern` is provided — the pattern controls precision. - ---- - -## `FunctionSignature` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class FunctionSignature: - python_name: str - ftl_name: str - param_mapping: tuple[tuple[str, str], ...] - callable: Callable[..., FluentValue] -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `python_name` | `str` | Python function name (snake_case). | -| `ftl_name` | `str` | FTL function name (UPPERCASE). | -| `param_mapping` | `tuple[tuple[str, str], ...]` | Immutable mapping of FTL camelCase to Python snake_case params. | -| `callable` | `Callable[..., FluentValue]` | The registered Python function. | - -### Constraints -- Return: Frozen dataclass instance. -- State: Fully immutable. param_mapping uses tuple for safe sharing across registries. -- Thread: Safe for reads. - ---- - -## `FunctionRegistry` - -### Signature -```python -class FunctionRegistry: - __slots__ = ("_frozen", "_functions") - - def __init__(self) -> None: ... - def register( - self, - func: Callable[..., FluentValue], - *, - ftl_name: str | None = None - ) -> None: ... - def call( - self, - ftl_name: str, - positional: Sequence[FluentValue], - named: Mapping[str, FluentValue], - ) -> FluentValue: ... - def has_function(self, ftl_name: str) -> bool: ... - def freeze(self) -> None: ... - @property - def frozen(self) -> bool: ... - def get_callable(self, ftl_name: str) -> Callable[..., FluentValue] | None: ... - def get_function_info(self, ftl_name: str) -> FunctionSignature | None: ... - def get_python_name(self, ftl_name: str) -> str | None: ... - def list_functions(self) -> list[str]: ... - def copy(self) -> FunctionRegistry: ... - def __iter__(self) -> Iterator[str]: ... - def __len__(self) -> int: ... - def __contains__(self, ftl_name: str) -> bool: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Registry instance. -- State: Mutable until frozen. Shared registry is frozen after creation. -- Thread: Unsafe for concurrent register(). Safe for reads after freeze(). -- Memory: Uses __slots__ for reduced memory footprint. -- Freeze: Once frozen, register() raises TypeError. Use copy() for mutable clone. - ---- - -## `FunctionRegistry.get_callable` - -### Signature -```python -def get_callable(self, ftl_name: str) -> Callable[..., FluentValue] | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `ftl_name` | `str` | Y | FTL function name (e.g., "NUMBER"). | - -### Constraints -- Return: Registered callable, or None if not found. -- State: Read-only access. -- Thread: Safe for reads. - ---- - -## `FunctionRegistry.call` - -### Signature -```python -def call( - self, - ftl_name: str, - positional: Sequence[FluentValue], - named: Mapping[str, FluentValue], -) -> FluentValue: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `ftl_name` | `str` | Y | Function name from FTL (e.g., "NUMBER"). | -| `positional` | `Sequence[FluentValue]` | Y | Positional arguments. | -| `named` | `Mapping[str, FluentValue]` | Y | Named arguments from FTL (camelCase). | - -### Constraints -- Return: Function result as FluentValue. -- Raises: `FrozenFluentError` (category=REFERENCE) if function not found. -- Raises: `FrozenFluentError` (category=RESOLUTION) if function execution fails. -- State: Read-only access to registry. -- Thread: Safe for calls. - ---- - -## `FunctionRegistry.register` - -### Signature -```python -def register( - self, - func: Callable[..., FluentValue], - *, - ftl_name: str | None = None, - param_map: dict[str, str] | None = None, -) -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `func` | `Callable[..., FluentValue]` | Y | Function to register. | -| `ftl_name` | `str \| None` | N | FTL name override (default: UPPERCASE of func name). | -| `param_map` | `dict[str, str] \| None` | N | Custom parameter mappings (overrides auto-generation). | - -### Constraints -- Return: None. -- Raises: `TypeError` if registry is frozen (via `freeze()` method) or if function marked with `inject_locale=True` has incompatible signature (requires ≥2 positional parameters for value and locale_code). -- Raises: `ValueError` if parameter names collide after underscore stripping (e.g., `_value` and `value`). -- State: Mutates registry. Validates function signature at registration (fail-fast). -- Thread: Unsafe. - ---- - -## `create_default_registry` - -### Signature -```python -def create_default_registry() -> FunctionRegistry: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Fresh FunctionRegistry with NUMBER, DATETIME, CURRENCY registered. -- Raises: Never. -- State: Returns new isolated instance each call. -- Thread: Safe. -- Import: `from ftllexengine.runtime.functions import create_default_registry` - ---- - -## `get_shared_registry` - -### Signature -```python -def get_shared_registry() -> FunctionRegistry: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Frozen FunctionRegistry singleton with NUMBER, DATETIME, CURRENCY. -- Raises: Never. -- State: Returns shared frozen singleton (lazy initialized). Calling `register()` raises `TypeError`. -- Thread: Safe for reads. Use `copy()` to get mutable registry for customization. -- Performance: Avoids repeated registry creation for multi-bundle applications. -- Import: `from ftllexengine.runtime.functions import get_shared_registry` - ---- - -## `FunctionCategory` - -### Signature -```python -class FunctionCategory(StrEnum): - FORMATTING = "formatting" - TEXT = "text" - CUSTOM = "custom" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `FORMATTING` | Number, date, currency formatting functions. | -| `TEXT` | Text manipulation functions. | -| `CUSTOM` | User-defined functions. | - -### Constraints -- StrEnum: Members ARE strings. `str(FunctionCategory.FORMATTING) == "formatting"` -- Import: `from ftllexengine.runtime.function_metadata import FunctionCategory` - ---- - -## `FunctionMetadata` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class FunctionMetadata: - python_name: str - ftl_name: str - requires_locale: bool - expected_positional_args: int = 1 - category: FunctionCategory = FunctionCategory.FORMATTING -``` - -### Parameters -| Field | Type | Req | Description | -|:------|:-----|:----|:------------| -| `python_name` | `str` | Y | Python function name (snake_case). | -| `ftl_name` | `str` | Y | FTL function name (UPPERCASE). | -| `requires_locale` | `bool` | Y | Whether function needs bundle locale injected. | -| `expected_positional_args` | `int` | N | Expected positional args from FTL (before locale). | -| `category` | `FunctionCategory` | N | Function category for documentation. | - -### Constraints -- Immutable: Frozen dataclass with slots. -- Thread: Safe. -- Import: `from ftllexengine.runtime.function_metadata import FunctionMetadata` - ---- - -## `BUILTIN_FUNCTIONS` - -### Signature -```python -BUILTIN_FUNCTIONS: dict[str, FunctionMetadata] = { - "NUMBER": FunctionMetadata(...), - "DATETIME": FunctionMetadata(...), - "CURRENCY": FunctionMetadata(...), -} -``` - -### Constraints -- Type: `dict[str, FunctionMetadata]` -- Contents: Metadata for NUMBER, DATETIME, CURRENCY. -- Read-only: Do not modify at runtime. -- Import: `from ftllexengine.runtime.function_metadata import BUILTIN_FUNCTIONS` - ---- - -## `is_builtin_with_locale_requirement` - -### Signature -```python -def is_builtin_with_locale_requirement(func: object) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `func` | `object` | Y | Callable to check. | - -### Constraints -- Return: True if func has `_ftl_requires_locale = True`. -- Thread: Safe. -- Import: `from ftllexengine.runtime.functions import is_builtin_with_locale_requirement` - ---- - -## `FunctionRegistry.get_expected_positional_args` - -### Signature -```python -def get_expected_positional_args(self, ftl_name: str) -> int | None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `ftl_name` | `str` | Y | FTL function name (e.g., "NUMBER"). | - -### Constraints -- Return: Expected positional arg count from `BUILTIN_FUNCTIONS` metadata, or None if not built-in. -- Thread: Safe. -- Access: Via `bundle.function_registry.get_expected_positional_args(name)` or registry instance. - ---- - -## `FunctionRegistry.should_inject_locale` - -### Signature -```python -def should_inject_locale(self, ftl_name: str) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `ftl_name` | `str` | Y | FTL function name. | - -### Constraints -- Return: True if locale should be injected for this call. -- Logic: Checks callable's `_ftl_requires_locale` attribute set by `@fluent_function(inject_locale=True)`. -- Thread: Safe. -- Access: Via `bundle.function_registry.should_inject_locale(name)` or registry instance. - ---- - -## `fluent_function` - -### Signature -```python -@overload -def fluent_function[F: Callable[..., FluentValue]](func: F, *, inject_locale: bool = False) -> F: ... -@overload -def fluent_function[F: Callable[..., FluentValue]](func: None = None, *, inject_locale: bool = False) -> Callable[[F], F]: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `func` | `F \| None` | N | Function to decorate. | -| `inject_locale` | `bool` | N | If True, inject bundle locale as second argument. | - -### Constraints -- Return: Decorated function with Fluent metadata attributes. -- Thread: Safe. -- Import: `from ftllexengine.runtime import fluent_function` -- Also available: `from ftllexengine import fluent_function` - ---- - -## `select_plural_category` - -Function that selects the CLDR plural category for a number using Babel's CLDR data. - -### Signature -```python -def select_plural_category( - n: int | Decimal, - locale: str, - precision: int | None = None, - *, - ordinal: bool = False, -) -> str: -``` - -### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `n` | `int \| Decimal` | Y | Number to categorize | -| `locale` | `str` | Y | BCP-47 or POSIX locale code | -| `precision` | `int \| None` | N | Fraction digits for CLDR v operand | -| `ordinal` | `bool` | N | Use ordinal rules (1st/2nd/3rd); default `False` = cardinal | - -### Constraints -- Return: CLDR plural category (`"zero"`, `"one"`, `"two"`, `"few"`, `"many"`, `"other"`). -- Raises: `BabelImportError` if Babel not installed. Returns `"other"` on invalid locale. -- State: Read-only. -- Thread: Safe. -- Rounding: Uses `ROUND_HALF_EVEN` when `precision` is set, matching Babel's default rounding. -- Ordinal: When `ordinal=True`, uses `Locale.ordinal_form` (rank context: "1st", "2nd", "3rd") instead of `Locale.plural_form` (count context: "1 item", "2 items"). - ---- - -## FTL Function Name Mapping - -| FTL Name | Python Function | Parameter Mapping | -|:---------|:----------------|:------------------| -| `NUMBER` | `number_format` | minimumFractionDigits -> minimum_fraction_digits, useGrouping -> use_grouping, numberingSystem -> numbering_system | -| `DATETIME` | `datetime_format` | dateStyle -> date_style, timeStyle -> time_style | -| `CURRENCY` | `currency_format` | currencyDisplay -> currency_display, useGrouping -> use_grouping, currencyDigits -> currency_digits, numberingSystem -> numbering_system | - ---- - -## Custom Function Protocol - -### Signature (without locale injection) -```python -def CUSTOM_FUNCTION( - positional_arg: FluentValue, - /, - *, - keyword_arg: str = "default", -) -> FluentValue: -``` - -### Signature (with locale injection via `@fluent_function(inject_locale=True)`) -```python -@fluent_function(inject_locale=True) -def CUSTOM_FUNCTION( - positional_arg: FluentValue, - locale_code: str, - /, - *, - keyword_arg: str = "default", -) -> FluentValue: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| First positional | `FluentValue` | Y | Primary input value. | -| `locale_code` | `str` | Opt | Canonical lowercase underscore locale code (positional-only). Only present when `@fluent_function(inject_locale=True)` is applied. | -| Keyword args | `FluentValue` | N | Named options. | - -### Constraints -- Return: FluentValue (typically str; non-string values converted by resolver). -- Raises: Should not raise. Return fallback on error. -- State: Should be stateless. -- Thread: Should be safe. -- Locale: `locale_code` is NOT automatically injected. Use `@fluent_function(inject_locale=True)` to opt in. When injected, it is the bundle's canonical lowercase underscore `LocaleCode`. - ---- - -## `validate_resource` - -### Signature -```python -def validate_resource( - source: str, - *, - parser: FluentParserV1 | None = None, - known_messages: frozenset[str] | None = None, - known_terms: frozenset[str] | None = None, - known_msg_deps: Mapping[str, frozenset[str]] | None = None, - known_term_deps: Mapping[str, frozenset[str]] | None = None, -) -> ValidationResult: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `source` | `str` | Y | FTL file content. | -| `parser` | `FluentParserV1 \| None` | N | Parser instance (creates default if not provided). | -| `known_messages` | `frozenset[str] \| None` | N | Message IDs from other resources (cross-resource validation). | -| `known_terms` | `frozenset[str] \| None` | N | Term IDs from other resources (cross-resource validation). | -| `known_msg_deps` | `Mapping[str, frozenset[str]] \| None` | N | Dependency graph for known messages (prefixed: "msg:name", "term:name"). | -| `known_term_deps` | `Mapping[str, frozenset[str]] \| None` | N | Dependency graph for known terms (prefixed: "msg:name", "term:name"). | - -### Constraints -- Return: ValidationResult with errors, warnings, and semantic annotations. -- Validation Passes: (1) Syntax errors, (2) Structural issues + duplicate attributes + shadow conflicts, (3) Undefined refs, (4) Cycles (intra-resource and cross-resource), (5) Chain depth, (6) Semantic (Fluent spec E0001-E0013). -- Chain Depth: Warns if reference chains exceed MAX_DEPTH (would fail at runtime with MAX_DEPTH_EXCEEDED). -- Cross-Resource: References to `known_messages`/`known_terms` do not produce undefined warnings. Cycles detected across resource boundaries. Shadow warnings emitted when current resource redefines known entry. -- Duplicate Attributes: Emits VALIDATION_DUPLICATE_ATTRIBUTE (5107) for duplicate attribute IDs within entry. -- Shadow Warnings: Emits VALIDATION_SHADOW_WARNING (5108) when entry ID matches known bundle entry. -- Raises: `TypeError` if source is not a str. -- State: None (creates isolated parser if not provided). -- Thread: Safe. -- Import: `from ftllexengine.validation import validate_resource` - ---- - -## `ResolutionContext` - -### Signature -```python -@dataclass(slots=True) -class ResolutionContext: - stack: list[str] = field(default_factory=list) - _seen: set[str] = field(default_factory=set) - max_depth: int = MAX_DEPTH - max_expression_depth: int = MAX_DEPTH - max_expansion_size: int = DEFAULT_MAX_EXPANSION_SIZE - _total_chars: int = 0 - _expression_guard: DepthGuard = field(init=False) - - def __post_init__(self) -> None: ... - def push(self, key: str) -> None: ... - def pop(self) -> str: ... - def contains(self, key: str) -> bool: ... - def track_expansion(self, char_count: int) -> None: ... - @property - def total_chars(self) -> int: ... - @property - def expression_guard(self) -> DepthGuard: ... - @property - def expression_depth(self) -> int: ... - @property - def depth(self) -> int: ... - def is_depth_exceeded(self) -> bool: ... - def get_cycle_path(self, key: str) -> list[str]: ... -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `stack` | `list[str]` | Resolution stack for cycle path. | -| `_seen` | `set[str]` | O(1) membership check set. | -| `max_depth` | `int` | Maximum resolution depth (default: MAX_DEPTH=100). | -| `max_expression_depth` | `int` | Maximum expression depth (default: MAX_DEPTH=100). | -| `max_expansion_size` | `int` | Maximum total output characters (default: 1,000,000). Prevents Billion Laughs. | -| `_total_chars` | `int` | Running character count (internal; use `total_chars` property). | -| `_expression_guard` | `DepthGuard` | Internal depth guard (init=False). | - -### Constraints -- Thread: Safe (explicit parameter passing, no global state). -- Purpose: Internal resolver state; created fresh per resolution call in FluentBundle. -- Complexity: contains() is O(1) via _seen set. -- Expansion: track_expansion() raises EXPANSION_BUDGET_EXCEEDED when total_chars exceeds max_expansion_size. -- Constants: `MAX_DEPTH`, `DEFAULT_MAX_EXPANSION_SIZE` from `ftllexengine.constants` - ---- - -## `ResolutionContext.push` - -### Signature -```python -def push(self, key: str) -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `key` | `str` | Y | Message key to push onto stack. | - -### Constraints -- Return: None. -- State: Mutates stack. - ---- - -## `ResolutionContext.pop` - -### Signature -```python -def pop(self) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Removed message key. -- Raises: `DataIntegrityError` if stack is empty (underflow) or if `_stack` and `_seen` are out of sync (state corruption). Peek-before-mutate: neither structure is modified when corruption is detected. -- State: Mutates `_stack` and `_seen` atomically only after invariant verification. - ---- - -## `ResolutionContext.contains` - -### Signature -```python -def contains(self, key: str) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `key` | `str` | Y | Message key to check. | - -### Constraints -- Return: True if key is in resolution stack (cycle detected). -- Complexity: O(1) via _seen set lookup. -- State: Read-only. - ---- - -## `ResolutionContext.total_chars` - -### Signature -```python -@property -def total_chars(self) -> int: -``` - -### Constraints -- Return: Running count of resolved characters. -- State: Read-only property over internal `_total_chars`. -- Usage: Preferred over direct `_total_chars` access for encapsulation. - ---- - -## `ResolutionContext.expression_guard` - -### Signature -```python -@property -def expression_guard(self) -> DepthGuard: -``` - -### Constraints -- Return: DepthGuard for expression depth tracking. -- Usage: Use as context manager (`with context.expression_guard:`). -- Raises: `FrozenFluentError` (category=RESOLUTION) when depth limit exceeded. -- State: Read-only property returning internal DepthGuard. - ---- - -## `ResolutionContext.expression_depth` - -### Signature -```python -@property -def expression_depth(self) -> int: -``` - -### Constraints -- Return: Current expression nesting depth. -- State: Read-only property (delegates to expression_guard.current_depth). - ---- - -## `ResolutionContext.depth` - -### Signature -```python -@property -def depth(self) -> int: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: Current resolution depth (stack length). -- State: Read-only. - ---- - -## `ResolutionContext.is_depth_exceeded` - -### Signature -```python -def is_depth_exceeded(self) -> bool: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: True if depth >= max_depth. -- State: Read-only. - ---- - -## `ResolutionContext.get_cycle_path` - -### Signature -```python -def get_cycle_path(self, key: str) -> list[str]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `key` | `str` | Y | Message key that caused cycle. | - -### Constraints -- Return: List of keys showing cycle path including triggering key. -- State: Read-only. - ---- - -## `FluentResolver` - -### Signature -```python -class FluentResolver: - __slots__ = ("function_registry", "locale", "messages", "terms", "use_isolating", "_max_nesting_depth") - - def __init__( - self, - locale: str, - messages: dict[str, Message], - terms: dict[str, Term], - *, - function_registry: FunctionRegistry, - use_isolating: bool = True, - max_nesting_depth: int = 100, - ) -> None: ... - - def resolve_message( - self, - message: Message, - args: Mapping[str, FluentValue] | None = None, - attribute: str | None = None, - *, - context: ResolutionContext | None = None, - ) -> tuple[str, tuple[FrozenFluentError, ...]]: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `locale` | `str` | Y | Locale code for plural selection. | -| `messages` | `dict[str, Message]` | Y | Message registry. | -| `terms` | `dict[str, Term]` | Y | Term registry. | -| `function_registry` | `FunctionRegistry` | Y | Function registry. | -| `use_isolating` | `bool` | N | Wrap values in Unicode bidi marks. | -| `max_nesting_depth` | `int` | N | Maximum resolution depth limit (default: 100). | - -### Constraints -- Return: Resolver instance. -- State: Immutable after construction. -- Thread: Safe (uses explicit context). -- Internal: `FluentResolver` is an implementation detail of `FluentBundle`; callers do not instantiate it directly. - ---- - -## `FluentResolver.resolve_message` - -### Signature -```python -def resolve_message( - self, - message: Message, - args: Mapping[str, FluentValue] | None = None, - attribute: str | None = None, - *, - context: ResolutionContext | None = None, -) -> tuple[str, tuple[FrozenFluentError, ...]]: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `Message` | Y | Message AST. | -| `args` | `Mapping[str, FluentValue] \| None` | N | Variable arguments. | -| `attribute` | `str \| None` | N | Attribute name to resolve. | -| `context` | `ResolutionContext \| None` | N | Resolution context (creates fresh if None). | - -### Constraints -- Return: Tuple of (formatted_string, errors). -- Raises: Never. Collects errors in tuple. -- State: Read-only. -- Thread: Safe. -- Duplicate Attributes: When message has duplicate attributes with same name, last attribute wins (per Fluent spec). - ---- - -## Module Constants - -### `DEFAULT_CACHE_SIZE` - -```python -DEFAULT_CACHE_SIZE: int = 1000 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 1000 | -| Location | `ftllexengine.constants` | - -- Purpose: Default maximum cache entries for FluentBundle format results. -- Usage: Referenced by `FluentBundle.__init__`, `create()`, `for_system_locale()`. -- Import: `from ftllexengine.constants import DEFAULT_CACHE_SIZE` - ---- - -### `DEFAULT_MAX_EXPANSION_SIZE` +This reference covers cache configuration, function registries, built-in formatters, plural selection, and cache/audit entry types. +Runtime-adjacent utilities, validators, and package metadata constants are documented in [DOC_04_RuntimeUtilities.md](DOC_04_RuntimeUtilities.md). -```python -DEFAULT_MAX_EXPANSION_SIZE: int = 1_000_000 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 1,000,000 | -| Location | `ftllexengine.constants` | - -- Purpose: Maximum total characters produced during message resolution. Prevents Billion Laughs attacks. -- Usage: Referenced by `ResolutionContext`, `FluentResolver`, `FluentBundle`. -- Import: `from ftllexengine.constants import DEFAULT_MAX_EXPANSION_SIZE` - ---- - -### `MAX_CURRENCY_CACHE_SIZE` - -```python -MAX_CURRENCY_CACHE_SIZE: int = 300 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 300 | -| Location | `ftllexengine.constants` | - -- Purpose: Maximum LRU cache entries for individual currency lookups. -- Usage: `_get_currency_impl` in `ftllexengine.introspection.iso`. -- Import: `from ftllexengine.constants import MAX_CURRENCY_CACHE_SIZE` - ---- - -### `UNICODE_FSI` / `UNICODE_PDI` - -```python -UNICODE_FSI: str = "\u2068" # U+2068 FIRST STRONG ISOLATE -UNICODE_PDI: str = "\u2069" # U+2069 POP DIRECTIONAL ISOLATE -``` - -| Attribute | Value | -|:----------|:------| -| Type | `str` | -| Location | `ftllexengine.runtime.resolver` | - -- Purpose: Unicode bidirectional isolation characters per Unicode TR9. -- Usage: Wraps interpolated values when `use_isolating=True`. - ---- - -### `MAX_DEPTH` - -```python -MAX_DEPTH: int = 100 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 100 | -| Location | `ftllexengine.constants` | -| Re-exported | `ftllexengine.core.depth_guard` | - -- Purpose: Unified maximum depth for all recursion protection. -- Usage: Message reference chains, expression nesting, serialization, validation. -- Import: `from ftllexengine.constants import MAX_DEPTH` - ---- - -### `MAX_FORMAT_DIGITS` - -```python -MAX_FORMAT_DIGITS: int = 100 -``` - -| Attribute | Value | -|:----------|:------| -| Type | `int` | -| Value | 100 | -| Location | `ftllexengine.constants` | - -- Purpose: Upper bound on `minimum_fraction_digits` and `maximum_fraction_digits` in `number_format()` and `currency_format()`. -- Usage: Values exceeding this limit are clamped to prevent excessive memory allocation during formatting. -- Security: Prevents DoS via pathological fraction digit requests. -- Import: `from ftllexengine.constants import MAX_FORMAT_DIGITS` - ---- - -## `DepthGuard` - -### Signature -```python -@dataclass(slots=True) -class DepthGuard: - max_depth: int = MAX_DEPTH - current_depth: int = field(default=0, init=False) - - def __enter__(self) -> DepthGuard: ... - def __exit__(self, exc_type, exc_val, exc_tb) -> None: ... - @property - def depth(self) -> int: ... - def is_exceeded(self) -> bool: ... - def check(self) -> None: ... - def increment(self) -> None: ... - def decrement(self) -> None: ... - def reset(self) -> None: ... -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `max_depth` | `int` | Maximum allowed depth. | -| `current_depth` | `int` | Current recursion depth. | - -### Constraints -- Thread: Safe (explicit instance state, reentrant). -- Usage: Context manager or manual increment/decrement. -- Raises: `FrozenFluentError` (category=RESOLUTION) when depth limit exceeded. -- Behavior: `__enter__` validates limit BEFORE incrementing; prevents state corruption on exception. -- Import: `from ftllexengine.core.depth_guard import DepthGuard` - ---- - -## `GlobalDepthGuard` +## `CacheConfig` -Global depth tracking across format_pattern calls using `contextvars`. +Dataclass that configures optional format-result caching. ### Signature ```python -class GlobalDepthGuard: - __slots__ = ("_max_depth", "_token") - - def __init__(self, max_depth: int = MAX_DEPTH) -> None: ... - def __enter__(self) -> GlobalDepthGuard: ... - def __exit__(self, exc_type, exc_val, exc_tb) -> None: ... +@dataclass(frozen=True, slots=True) +class CacheConfig: + size: int = 1000 + write_once: bool = False + integrity_strict: bool = True + enable_audit: bool = False + max_audit_entries: int = 10000 + max_entry_weight: int = 10000 + max_errors_per_entry: int = 50 ``` -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `max_depth` | `int` | Maximum allowed global depth (default: MAX_DEPTH=100). | - ### Constraints -- Thread: Safe (uses `contextvars.ContextVar` for async-safe per-task state). -- Purpose: Prevents depth limit bypass via custom function callbacks. -- Security: Custom functions calling `bundle.format_pattern()` cannot bypass limits. -- Raises: `FrozenFluentError` (category=RESOLUTION) when global depth limit exceeded. -- Internal: Used automatically by `FluentResolver.resolve_message()`. - ---- +- Purpose: Single cache configuration object for bundle/localization runtime +- State: Immutable +- Thread: Safe -## `RWLock` - -Readers-writer lock with writer preference for high-concurrency FluentBundle access. - -### Signature -```python -class RWLock: - def __init__(self) -> None: ... - def read(self, timeout: float | None = None) -> Generator[None, None, None]: ... - def write(self, timeout: float | None = None) -> Generator[None, None, None]: ... -``` - -### Constraints -- Return: RWLock instance. -- State: Tracks active readers, active writer (as `int` thread identity), waiting writers, reader thread counts. -- Thread: Safe for all operations. Read lock is reentrant (same thread can reacquire multiple times). Write lock is non-reentrant. -- Purpose: Allows multiple concurrent readers OR single exclusive writer. -- Timeout: Optional `timeout` parameter on `read()` and `write()`. `None` (default) waits indefinitely; `0.0` is non-blocking; positive float is deadline in seconds. Raises `TimeoutError` on expiry, `ValueError` if negative. -- Writer Preference: Writers are prioritized when waiting to prevent reader starvation. -- Upgrade Limitation: Read-to-write lock upgrades are prohibited (raises RuntimeError). -- Downgrade Limitation: Write-to-read lock downgrade is prohibited (raises RuntimeError). -- Reentry Limitation: Write lock cannot be reacquired by the same thread (raises RuntimeError). -- Usage: FluentBundle and FluentLocalization use RWLock internally for concurrent read-heavy operations; downstream code can use the same public primitive. -- Import: `from ftllexengine.runtime import RWLock` --- -## `RWLock.read` +## `FunctionRegistry` -Context manager acquiring read lock for shared access. +Class that maps Python callables onto FTL function names and argument conventions. ### Signature ```python -@contextmanager -def read(self, timeout: float | None = None) -> Generator[None, None, None]: +class FunctionRegistry: + def __init__(self) -> None: ``` -### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `timeout` | `float \| None` | N | Max seconds to wait. `None` = indefinite, `0.0` = non-blocking | - ### Constraints -- Return: Context manager yielding None. -- State: Increments active readers count. Reentrant for same thread. -- Thread: Safe. Multiple threads can hold read locks concurrently. -- Blocks: When writer is active or writers are waiting (writer preference). -- Raises: `RuntimeError` if thread holds write lock (downgrade prohibited). `TimeoutError` if lock not acquired within timeout. `ValueError` if timeout negative. -- Usage: `with lock.read(): # read data` or `with lock.read(timeout=1.0): # bounded wait` +- Purpose: Register, freeze, copy, and dispatch custom functions +- State: Mutable until `freeze()` +- Thread: Safe for normal runtime use after registration +- Main methods: `register()`, `call()`, `get_callable()`, `list_functions()`, `copy()` --- -## `RWLock.write` +## `fluent_function` -Context manager acquiring write lock for exclusive access. +Decorator that attaches Fluent-specific metadata to a Python callable. ### Signature ```python -@contextmanager -def write(self, timeout: float | None = None) -> Generator[None, None, None]: +def fluent_function( + func: F | None = None, + *, + inject_locale: bool = False, +) -> F | Callable[[F], F]: ``` ### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `timeout` | `float \| None` | N | Max seconds to wait. `None` = indefinite, `0.0` = non-blocking | - -### Constraints -- Return: Context manager yielding None. -- State: Sets active writer. Blocks all other readers and writers. Non-reentrant: raises `RuntimeError` if called while already holding write lock. -- Thread: Safe. Only one thread can hold write lock at a time. -- Blocks: Until all readers release their locks. -- Raises: `RuntimeError` if thread attempts read-to-write lock upgrade. `RuntimeError` if thread already holds the write lock. `TimeoutError` if lock not acquired within timeout. `ValueError` if timeout negative. -- Usage: `with lock.write(): # modify data` or `with lock.write(timeout=2.0): # bounded wait` - ---- - -## `RWLock.reader_count` - -Read-only snapshot of the number of threads currently holding read locks. - -### Signature -```python -@property -def reader_count(self) -> int: -``` +| Name | Req | Semantics | +|:-----|:----|:----------| +| `func` | N | Callable to decorate | +| `inject_locale` | N | Append locale argument | ### Constraints -- Return: Non-negative integer; 0 when no readers are active. -- State: Thread-safe point-in-time snapshot. A thread holding a reentrant read lock (acquired multiple times) counts as one reader. -- Thread: Safe. -- Usage: Production monitoring for read lock contention. +- Purpose: Mark custom functions for locale injection behavior +- State: Pure decorator +- Thread: Safe --- -## `RWLock.writer_active` +## `create_default_registry` -Read-only flag indicating whether any thread currently holds the write lock. +Function that returns a mutable registry seeded with built-in functions. ### Signature ```python -@property -def writer_active(self) -> bool: +def create_default_registry() -> FunctionRegistry: ``` ### Constraints -- Return: True if write lock is held, False otherwise. -- State: Thread-safe point-in-time snapshot. -- Thread: Safe. -- Usage: Production monitoring to detect write lock contention or stalled writers. +- Return: New mutable registry +- State: Fresh object on each call --- -## `RWLock.writers_waiting` +## `get_shared_registry` -Read-only snapshot of the number of threads currently blocked waiting for the write lock. +Function that returns the shared frozen registry of built-in functions. ### Signature ```python -@property -def writers_waiting(self) -> int: +def get_shared_registry() -> FunctionRegistry: ``` ### Constraints -- Return: Non-negative integer; 0 when no writers are waiting. -- State: Thread-safe point-in-time snapshot. A non-zero value means new readers are also being blocked (writer preference). -- Thread: Safe. -- Usage: Diagnosing write starvation or identifying write-heavy contention patterns. - ---- - -## Analysis Functions +- Return: Shared frozen registry +- State: Shared singleton-style object --- -## `entry_dependency_set` +## `number_format` -Function that builds a namespace-prefixed dependency frozenset from reference sets. +Function that formats a numeric value as `FluentNumber`. ### Signature ```python -def entry_dependency_set( - message_refs: frozenset[str], - term_refs: frozenset[str], -) -> frozenset[str]: +def number_format( + value: int | Decimal, + locale_code: str = "en-US", + *, + minimum_fraction_digits: int = 0, + maximum_fraction_digits: int = 3, + use_grouping: bool = True, + pattern: str | None = None, + numbering_system: str = "latn", +) -> FluentNumber: ``` -### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `message_refs` | `frozenset[str]` | Y | Message IDs referenced by entry | -| `term_refs` | `frozenset[str]` | Y | Term IDs referenced by entry | - ### Constraints -- Return: Frozenset of prefixed dependency keys (e.g., `frozenset({"msg:welcome", "term:brand"})`). -- Raises: Never. -- State: None (pure function). -- Thread: Safe. -- Namespace: `msg:` prefix for message refs, `term:` prefix for term refs. Prevents collisions between same-name messages and terms. -- Complexity: O(N) where N = total references. -- Import: `from ftllexengine.analysis import entry_dependency_set` - -### Example -```python -deps = entry_dependency_set(frozenset({"greeting"}), frozenset({"brand"})) -# deps: frozenset({"msg:greeting", "term:brand"}) -``` +- Return: `FluentNumber` +- Raises: Locale/value boundary errors +- State: Pure +- Thread: Safe --- -## `make_cycle_key` +## `datetime_format` -Function that creates a canonical display string from a cycle path. +Function that formats a date or datetime value for a locale. ### Signature ```python -def make_cycle_key(cycle: Sequence[str]) -> str: +def datetime_format( + value: date | datetime | str, + locale_code: str = "en-US", + *, + date_style: Literal["short", "medium", "long", "full"] = "medium", + time_style: Literal["short", "medium", "long", "full"] | None = None, + pattern: str | None = None, +) -> str: ``` -### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `cycle` | `Sequence[str]` | Y | Cycle path with closing repeat | - ### Constraints -- Return: Canonical arrow-separated string (e.g., `"A -> B -> C -> A"`). Empty string for empty input. -- Raises: Never. -- State: None (pure function). -- Thread: Safe. -- Canonical: Rotates cycle to start with lexicographically smallest node. All rotations of the same cycle produce identical keys. -- Import: `from ftllexengine.analysis import make_cycle_key` - -### Example -```python -key = make_cycle_key(["B", "C", "A", "B"]) -# key: "A -> B -> C -> A" -``` +- Return: Formatted string +- Raises: Locale/value boundary errors +- State: Pure +- Thread: Safe --- -## `detect_cycles` +## `currency_format` -Function that detects all cycles in a dependency graph using iterative DFS. +Function that formats a monetary value as `FluentNumber`. ### Signature ```python -def detect_cycles(dependencies: Mapping[str, set[str]]) -> list[list[str]]: +def currency_format( + value: int | Decimal, + locale_code: str = "en-US", + *, + currency: str, + currency_display: Literal["symbol", "code", "name"] = "symbol", + pattern: str | None = None, + use_grouping: bool = True, + currency_digits: bool = True, + numbering_system: str = "latn", +) -> FluentNumber: ``` -### Parameters -| Parameter | Type | Req | Semantics | -|:----------|:-----|:----|:----------| -| `dependencies` | `Mapping[str, set[str]]` | Y | Node ID to set of referenced node IDs | - ### Constraints -- Return: List of cycles where each cycle is a list of node IDs forming the cycle path (closed: last element repeats first). Empty list if no cycles detected. Cycles are deduplicated via canonical tuple form. -- Raises: Never. -- State: None (pure function). -- Thread: Safe. -- Algorithm: Iterative DFS with explicit stack. Prevents RecursionError on deep graphs (>1000 nodes in linear chain). -- Complexity: O(V + E) time, O(V) space where V = nodes, E = edges. -- Security: Uses iterative DFS to prevent stack overflow attacks via deeply nested dependency chains in untrusted FTL resources. -- Import: `from ftllexengine.analysis import detect_cycles` - -### Example -```python -deps = {"a": {"b"}, "b": {"c"}, "c": {"a"}} -cycles = detect_cycles(deps) -# cycles: [['a', 'b', 'c', 'a']] (canonical rotation) -``` +- Return: `FluentNumber` +- Raises: Locale/value boundary errors +- State: Pure +- Thread: Safe --- -## `IntegrityCache` +## `select_plural_category` -Format result cache with cryptographic integrity verification for financial-grade applications. +Function that resolves a CLDR plural category for a locale-aware number. ### Signature ```python -class IntegrityCache: - def __init__( - self, - maxsize: int = 1000, - max_entry_weight: int = 10000, - max_errors_per_entry: int = 50, - *, - write_once: bool = False, - strict: bool = True, - enable_audit: bool = False, - max_audit_entries: int = 10000, - ) -> None: ... +def select_plural_category( + n: int | Decimal, + locale: str, + precision: int | None = None, + *, + ordinal: bool = False, +) -> str: ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `maxsize` | `int` | N | Maximum cache entries (LRU eviction). | -| `max_entry_weight` | `int` | N | Maximum memory weight per entry in approximate bytes. | -| `max_errors_per_entry` | `int` | N | Maximum errors stored per entry. | -| `write_once` | `bool` | N | Reject updates to existing keys (data race prevention). | -| `strict` | `bool` | N | Raise on corruption/write conflicts. Sourced from `CacheConfig.integrity_strict`. | -| `enable_audit` | `bool` | N | Maintain operation history for compliance. | -| `max_audit_entries` | `int` | N | Maximum audit log entries before oldest eviction. | - ### Constraints -- Return: IntegrityCache instance. -- State: Mutable cache with integrity verification. -- Thread: Safe (internal locking). -- Integrity: Each entry has BLAKE2b-128 checksum computed at creation and verified on retrieval. -- Corruption: Corrupted entries are evicted silently (strict=False) or raise CacheCorruptionError (strict=True). -- Key Normalization: Cache keys are normalized to prevent hash collisions between values that format differently: - - NaN: `Decimal("NaN")` normalized to `"__NaN__"` (IEEE 754 NaN != NaN; prevents unretrievable cache entries). - - Decimal: Uses `str(value)` to preserve scale (`Decimal("1.0")` vs `Decimal("1.00")` are distinct for CLDR plural rules). - - Datetime: Includes isoformat and tzinfo string; same-UTC-instant different-timezone datetimes produce distinct keys. - - Collections: Supports Sequence/Mapping ABCs (UserList, ChainMap) in addition to list/tuple/dict. -- Idempotent Writes: When `write_once=True`, concurrent writes with identical content are treated as idempotent success (not conflict). Content comparison uses `IntegrityCacheEntry.content_hash` which excludes metadata (created_at, sequence). -- Import: `from ftllexengine.runtime.cache import IntegrityCache` -- Independence: `strict` controls cache corruption response independently of `FluentBundle.strict` (formatting behavior). Sourced from `CacheConfig.integrity_strict`. -- Access: Typically accessed via FluentBundle cache parameters, not directly constructed. +- Return: CLDR plural category string +- State: Pure +- Thread: Safe --- -## `IntegrityCache.get` +## `make_fluent_number` -Retrieve cached format result with integrity verification. +Function that constructs a `FluentNumber` from an `int` or `Decimal`. ### Signature ```python -def get( - self, - message_id: str, - args: Mapping[str, FluentValue] | None, - attribute: str | None, - locale_code: str, - use_isolating: bool, -) -> IntegrityCacheEntry | None: +def make_fluent_number(value: int | Decimal, *, formatted: str | None = None) -> FluentNumber: ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier. | -| `args` | `Mapping[str, FluentValue] \| None` | Y | Message arguments (may contain unhashable values). | -| `attribute` | `str \| None` | Y | Attribute name. | -| `locale_code` | `str` | Y | Locale code. | -| `use_isolating` | `bool` | Y | Whether Unicode isolation marks are used. | - ### Constraints -- Return: IntegrityCacheEntry if found and valid, None otherwise. -- Raises: `CacheCorruptionError` if strict=True and entry fails verification. -- State: Read (may evict corrupted entries). -- Thread: Safe. +- Return: `FluentNumber` +- State: Pure +- Thread: Safe --- -## `IntegrityCache.put` +## `clear_module_caches` -Store format result with integrity checksum. +Function that clears selected module-level caches or all of them. ### Signature ```python -def put( - self, - message_id: str, - args: Mapping[str, FluentValue] | None, - attribute: str | None, - locale_code: str, - use_isolating: bool, - formatted: str, - errors: tuple[FrozenFluentError, ...], -) -> None: +def clear_module_caches(components: frozenset[str] | None = None) -> None: ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message_id` | `str` | Y | Message identifier. | -| `args` | `Mapping[str, FluentValue] \| None` | Y | Message arguments (may contain unhashable values). | -| `attribute` | `str \| None` | Y | Attribute name. | -| `locale_code` | `str` | Y | Locale code. | -| `use_isolating` | `bool` | Y | Whether Unicode isolation marks are used. | -| `formatted` | `str` | Y | Formatted message result. | -| `errors` | `tuple[FrozenFluentError, ...]` | Y | Frozen errors from resolution. | - -### Constraints -- Return: None. -- Raises: `WriteConflictError` if write_once=True and strict=True and key exists with different content. -- Idempotent: When write_once=True, identical content (same formatted+errors) silently succeeds without error (thundering herd safe). -- State: Mutates cache. -- Thread: Safe. -- Skip: Entry not stored if weight exceeds max_entry_weight or error count exceeds max_errors_per_entry. - ---- - -## `IntegrityCache.get_stats` - -Get cache statistics including security parameters. - -### Signature -```python -def get_stats(self) -> CacheStats: -``` - -### Constraints -- Return: `CacheStats` TypedDict snapshot with 19 precisely-typed fields. See `CacheStats`. -- State: Read-only. -- Thread: Safe. - ---- - -## `CacheStats` - -TypedDict representing a cache statistics snapshot returned by `IntegrityCache.get_stats`. - -### Signature -```python -class CacheStats(TypedDict): - size: int - maxsize: int - max_entry_weight: int - max_errors_per_entry: int - hits: int - misses: int - hit_rate: float - unhashable_skips: int - oversize_skips: int - error_bloat_skips: int - corruption_detected: int - idempotent_writes: int - write_once_conflicts: int - combined_weight_skips: int - sequence: int - write_once: bool - strict: bool - audit_enabled: bool - audit_entries: int -``` - -### Constraints -- Purpose: Precise per-field types for cache monitoring (hits/misses → int, hit_rate → float, write_once/strict/audit_enabled → bool). -- Corruption: `corruption_detected` is the primary financial-grade alert field; non-zero requires investigation. -- Conflicts: `write_once_conflicts` counts PUT attempts on an existing key when `write_once=True`; non-zero may indicate bugs in calling code. -- Weight: `combined_weight_skips` counts PUT rejections where the entry weight (size + error count) exceeds `max_entry_weight`; non-zero indicates entries too large for the configured cache policy. -- Import: `from ftllexengine.runtime.cache import CacheStats` -- Extension: `LocalizationCacheStats(CacheStats)` adds `bundle_count: int` for multi-bundle aggregates. - ---- - -## `IntegrityCache.idempotent_writes` - -Property returning count of benign concurrent writes with identical content. - -### Signature -```python -@property -def idempotent_writes(self) -> int: -``` +| Name | Req | Semantics | +|:-----|:----|:----------| +| `components` | N | Specific cache components | ### Constraints -- Return: Number of writes detected as idempotent (identical content already cached). -- State: Read-only. -- Thread: Safe. -- Counter: Reset to 0 when cache is cleared. +- State: Mutates module cache state +- Thread: Safe --- -## `IntegrityCacheEntry` +## `CacheAuditLogEntry` -Immutable cache entry with cryptographic integrity metadata. +Dataclass representing one immutable cache audit-log record. ### Signature ```python @dataclass(frozen=True, slots=True) -class IntegrityCacheEntry: - formatted: str - errors: tuple[FrozenFluentError, ...] - checksum: bytes - created_at: float +class CacheAuditLogEntry: + operation: str + key_hash: str + timestamp: float sequence: int - key_hash: bytes - content_hash: bytes # field(init=False) — computed in __post_init__, not an __init__ parameter -``` - -### Constraints -- Return: Frozen dataclass instance. -- Immutable: All fields are read-only after creation. -- Init: `key_hash` is a required `__init__` parameter (BLAKE2b-8 hash of the cache key, for privacy-preserving audit). `content_hash` is NOT an `__init__` parameter; it is computed in `__post_init__` as a BLAKE2b-128 hash of `(formatted, errors)`. -- Checksum: BLAKE2b-128 hash of all init fields (content + metadata) for complete audit trail integrity. -- Import: `from ftllexengine.runtime.cache import IntegrityCacheEntry` - ---- - -## `IntegrityCacheEntry.content_hash` - -Computed field holding content-only hash for idempotent write detection. - -### Signature -```python -content_hash: bytes # field(init=False, repr=False, compare=False, hash=False) -``` - -### Constraints -- Type: `bytes` — dataclass `field(init=False)`, set by `__post_init__` via `object.__setattr__()`. -- Value: 16-byte BLAKE2b digest of `(formatted, errors)` only. -- Excludes: Does NOT include metadata (`created_at`, `sequence`, `key_hash`). -- Purpose: Two entries with identical content have identical `content_hash` regardless of when they were created. -- Usage: Used by `IntegrityCache.put()` for idempotent write detection in thundering herd scenarios. -- Note: Because `repr=False, compare=False, hash=False`, this field is excluded from `__repr__`, `__eq__`, and `__hash__`; it participates only in integrity lookups. - ---- - -## `IntegrityCacheEntry.verify` - -Method to verify entry integrity. - -### Signature -```python -def verify(self) -> bool: + checksum_hex: str + wall_time_unix: float ``` ### Constraints -- Return: True if checksum matches recomputed value AND all errors verify, False otherwise. -- Thread: Safe (read-only). -- Recursive: Verifies each FrozenFluentError's integrity if verify_integrity() method available. +- Purpose: Public audit-log payload +- State: Immutable +- Thread: Safe --- -## `CacheAuditLogEntry` +## `WriteLogEntry` -Public alias for the immutable audit log entry used by cache-observability APIs. +Dataclass alias used by the runtime cache implementation for audit-log records. ### Signature ```python -CacheAuditLogEntry = WriteLogEntry -``` - -### Underlying Dataclass -```python @dataclass(frozen=True, slots=True) class WriteLogEntry: operation: str @@ -1620,145 +285,9 @@ class WriteLogEntry: wall_time_unix: float ``` -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `operation` | `str` | Operation type (GET, PUT, HIT, MISS, EVICT, CORRUPTION). | -| `key_hash` | `str` | BLAKE2b hash of cache key (privacy-preserving). | -| `timestamp` | `float` | Monotonic clock timestamp of operation. Preserves ordering; not wall-clock aligned. | -| `sequence` | `int` | Cache entry sequence number (for PUT operations). | -| `checksum_hex` | `str` | Hex representation of entry checksum (for tracing). | -| `wall_time_unix` | `float` | Unix wall-clock timestamp (`time.time()`). Enables cross-system log correlation. | - -### Constraints -- Immutable: Frozen dataclass with slots. -- Purpose: Post-mortem analysis and debugging when audit logging enabled. -- Facade: Returned by `FluentBundle.get_cache_audit_log()` and `FluentLocalization.get_cache_audit_log()`. -- Import: `from ftllexengine.runtime import CacheAuditLogEntry` -- Identity: `CacheAuditLogEntry is WriteLogEntry` - ---- - -## `IntegrityCache.get_audit_log` - -Get audit log entries. - -### Signature -```python -def get_audit_log(self) -> tuple[WriteLogEntry, ...]: -``` - -### Constraints -- Return: Tuple of audit-log entry instances (empty if audit disabled). -- Prefer: Use bundle/localization facade accessors unless managing `IntegrityCache` directly. -- State: Read-only. -- Thread: Safe. - ---- - -## `IntegrityCache.clear` - -Clear all cached entries. Observability metrics are preserved. - -### Signature -```python -def clear(self) -> None: -``` - -### Constraints -- Return: None. -- State: Removes all cached entries from the LRU store. All counters (hits, misses, unhashable_skips, oversize_skips, error_bloat_skips, corruption_detected, idempotent_writes, write_once_conflicts, combined_weight_skips) and sequence number accumulate across `clear()` calls; they are never reset. Audit log is NOT cleared (historical record). -- Thread: Safe. -- Usage: Called automatically by FluentBundle on `add_resource()` or `add_function()`. - ---- - -## `LocalizationBootConfig` - -Frozen dataclass providing a canonical strict-mode boot API for `FluentLocalization`. - -Composes `PathResourceLoader` (or a custom `ResourceLoader`), `FluentLocalization`, -`require_clean()`, and `validate_message_schemas()` into a single audited sequence. -Designed for regulated systems where every resource must load cleanly and all declared -message schemas must match exactly before the application accepts traffic. - -### Signature -```python -@dataclass(frozen=True, slots=True) -class LocalizationBootConfig: - locales: tuple[str, ...] - resource_ids: tuple[str, ...] - loader: ResourceLoader | None = None - base_path: str | None = None - message_schemas: Mapping[MessageId, frozenset[str] | set[str]] | None = None - required_messages: frozenset[str] | None = None - strict: bool = True - use_isolating: bool = True - cache: CacheConfig | None = None - on_fallback: Callable[[FallbackInfo], None] | None = None -``` - -### Parameters -| Field | Type | Req | Description | -|:------|:-----|:----|:------------| -| `locales` | `tuple[str, ...]` | Y | Locale codes in fallback priority order (e.g., `('lv', 'en')`). | -| `resource_ids` | `tuple[str, ...]` | Y | FTL file identifiers to load (e.g., `('ui.ftl',)`). | -| `loader` | `ResourceLoader \| None` | — | Custom loader implementing `ResourceLoader`. Mutually exclusive with `base_path`. | -| `base_path` | `str \| None` | — | Path template with `{locale}` placeholder (e.g., `'locales/{locale}'`). Mutually exclusive with `loader`. | -| `message_schemas` | `Mapping[...] \| None` | N | Message ID → expected variable frozenset. When set, `boot()` enforces exact variable contracts. | -| `required_messages` | `frozenset[str] \| None` | N | Set of message IDs that must exist in at least one locale. Raises `IntegrityCheckFailedError` if any are absent from all locales. | -| `strict` | `bool` | N | Fail-fast on formatting errors (default: `True`). | -| `use_isolating` | `bool` | N | Unicode bidi isolation marks (default: `True`). | -| `cache` | `CacheConfig \| None` | N | Cache configuration, or `None` to disable. | -| `on_fallback` | `Callable \| None` | N | Callback invoked when a message resolves from a fallback locale. | - -### Methods - -#### `boot() -> tuple[FluentLocalization, LoadSummary, tuple[MessageVariableValidationResult, ...]]` -PRIMARY boot API. Executes the full boot sequence and returns structured evidence: -1. Create `FluentLocalization` (loads all resources). -2. Call `require_clean()` — raises `IntegrityCheckFailedError` on any load failure or junk entries. -3. If `required_messages` set, verify each ID is resolvable in at least one locale. -4. If `message_schemas` set, call `validate_message_schemas()` — raises `IntegrityCheckFailedError` on mismatch. -Returns `(FluentLocalization, LoadSummary, tuple[MessageVariableValidationResult, ...])` for audit trails. - -#### `boot_simple() -> FluentLocalization` -Simplified form. Executes the identical boot sequence but discards audit evidence. Use when structured evidence is not needed. - -#### `from_path(locales, resource_ids, base_path, *, ...) -> LocalizationBootConfig` -Static factory. `base_path` accepts `str` or `pathlib.Path` (converted to POSIX string). - -### Constraints -- Raises (`__post_init__`): `ValueError` if `locales` or `resource_ids` is empty; `ValueError` if neither or both of `loader`/`base_path` are provided. -- Raises (`boot`/`boot_simple`): `IntegrityCheckFailedError` on load failures, required-message absence, or schema mismatches; `ValueError` if `base_path` lacks `{locale}`. -- State: Immutable (frozen dataclass). -- Thread: Safe. Each `boot()` call creates a new `FluentLocalization` instance. -- Version: `required_messages` field added in v0.155.0; `boot()` returns 3-tuple as of v0.155.0 (was `FluentLocalization`). -- Import: `from ftllexengine import LocalizationBootConfig` or `from ftllexengine.localization import LocalizationBootConfig`. - ---- - -## `clear_module_caches` - -Clear module-level LRU caches to release cached memory. - -### Signature -```python -def clear_module_caches(components: frozenset[str] | None = None) -> None: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `components` | `frozenset[str] \| None` | N | Component names to clear. `None` clears all. | - ### Constraints -- Default: `components=None` clears all six caches. -- Component Names: `'introspection.iso'`, `'introspection.message'`, `'parsing.currency'`, `'parsing.dates'`, `'runtime.functions'`, `'runtime.locale_context'`. -- Unknown Components: Silently ignored (no error raised for unrecognized names). -- Empty Set: `frozenset()` clears nothing. -- Thread: Not safe to call concurrently with active cache reads (no lock held). -- Import: `from ftllexengine import clear_module_caches` -- Version: `components` parameter added in v0.155.0. +- Purpose: Same public payload shape as `CacheAuditLogEntry` +- State: Immutable +- Thread: Safe --- diff --git a/docs/DOC_04_RuntimeUtilities.md b/docs/DOC_04_RuntimeUtilities.md new file mode 100644 index 00000000..6b7dff2b --- /dev/null +++ b/docs/DOC_04_RuntimeUtilities.md @@ -0,0 +1,194 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: RUNTIME_UTILITIES +updated: "2026-04-22" +route: + keywords: [detect_cycles, normalize_locale, get_system_locale, require_locale_code, __version__, require_date, require_datetime] + questions: ["where are runtime utility exports documented?", "what package metadata constants are public?", "which boundary validators and locale helpers are exported from the root package?"] +--- + +# Runtime Utilities Reference + +This reference covers root-level runtime-adjacent utilities, package metadata constants, locale helpers, and boundary validators. +Formatting functions, registries, cache configuration, and audit entry types live in [DOC_04_Runtime.md](DOC_04_Runtime.md). + +## `detect_cycles` + +Function that detects cycles in a dependency graph. + +### Signature +```python +def detect_cycles(dependencies: Mapping[str, set[str]]) -> list[list[str]]: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `dependencies` | Y | Graph adjacency mapping | + +### Constraints +- Return: Canonicalized cycle paths +- State: Pure +- Thread: Safe + +--- + +## `normalize_locale` + +Function that canonicalizes locale codes to lowercase POSIX form. + +### Signature +```python +def normalize_locale(locale_code: str) -> str: +``` + +### Constraints +- Return: lowercase locale code with hyphens converted to underscores +- Purpose: canonical cache key and comparison form for locale handling +- State: Pure +- Thread: Safe + +--- + +## `get_system_locale` + +Function that detects the process locale from Python and environment variables. + +### Signature +```python +def get_system_locale(*, raise_on_failure: bool = False) -> str: +``` + +### Parameters +| Name | Req | Semantics | +|:-----|:----|:----------| +| `raise_on_failure` | N | Raise instead of falling back to `"en_us"` | + +### Constraints +- Return: normalized POSIX-style locale string +- Fallback: returns `"en_us"` when detection fails and `raise_on_failure` is false +- State: Pure with respect to library state; reads OS process locale and env vars + +--- + +## `require_locale_code` + +Boundary validator for locale-code inputs. + +### Signature +```python +def require_locale_code(value: object, field_name: str) -> LocaleCode: +``` + +### Constraints +- Return: canonical normalized locale code +- Raises: `TypeError` for non-strings; `ValueError` for blank, overlong, or structurally invalid codes +- Purpose: system-boundary validation before locale lookup or cache-key creation + +--- + +## `__version__` + +Package version string for the installed `ftllexengine` distribution. + +### Signature +```python +__version__: str +``` + +### Constraints +- Return: Installed package version from distribution metadata, or `"0.0.0+dev"` when running from an uninstalled development checkout +- Purpose: Runtime-visible package version for diagnostics, tooling, and support reporting + +--- + +## `__fluent_spec_version__` + +Constant declaring the Fluent specification version targeted by the package. + +### Signature +```python +__fluent_spec_version__: str = "1.0" +``` + +### Constraints +- Return: `"1.0"` +- Purpose: Exposes the Fluent spec baseline used by the runtime and parser + +--- + +## `__spec_url__` + +Constant pointing to the upstream Fluent grammar/specification reference. + +### Signature +```python +__spec_url__: str = "https://github.com/projectfluent/fluent/blob/master/spec/fluent.ebnf" +``` + +### Constraints +- Return: Canonical upstream Fluent EBNF/spec URL string +- Purpose: Lets tooling and diagnostics point back to the normative grammar source + +--- + +## `__recommended_encoding__` + +Constant declaring the recommended encoding for Fluent resource files. + +### Signature +```python +__recommended_encoding__: str = "UTF-8" +``` + +### Constraints +- Return: `"UTF-8"` +- Purpose: Mirrors the package guidance and upstream Fluent recommendation for `.ftl` resources + +--- + +## `require_date` + +Boundary validator for strict calendar-date values. + +### Signature +```python +def require_date(value: object, field_name: str) -> date: +``` + +### Constraints +- Return: validated `date` +- Raises: `TypeError` for non-dates and for `datetime` instances specifically +- Purpose: reject accidental time-bearing values at system boundaries + +--- + +## `require_datetime` + +Boundary validator for strict `datetime` values. + +### Signature +```python +def require_datetime(value: object, field_name: str) -> datetime: +``` + +### Constraints +- Return: validated `datetime` +- Raises: `TypeError` for non-`datetime` values, including plain `date` + +--- + +## `require_fluent_number` + +Boundary validator for `FluentNumber` values. + +### Signature +```python +def require_fluent_number(value: object, field_name: str) -> FluentNumber: +``` + +### Constraints +- Return: validated `FluentNumber` +- Raises: `TypeError` for all other values +- Purpose: domain-boundary validation for preformatted numeric values diff --git a/docs/DOC_05_Diagnostics.md b/docs/DOC_05_Diagnostics.md new file mode 100644 index 00000000..7199d229 --- /dev/null +++ b/docs/DOC_05_Diagnostics.md @@ -0,0 +1,207 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: DIAGNOSTICS +updated: "2026-04-22" +route: + keywords: [ValidationResult, ValidationError, ValidationWarning, DiagnosticCode, DiagnosticFormatter, OutputFormat, SourceSpan] + questions: ["what validation result types exist?", "how do I format diagnostics output?", "where are diagnostic codes and source spans documented?"] +--- + +# Diagnostics Reference + +This reference covers validation result types, diagnostic codes, spans, and formatter APIs. +Immutable Fluent errors and integrity exceptions live in [DOC_05_Errors.md](DOC_05_Errors.md). + +## `WarningSeverity` + +Severity levels for validation warnings. + +### Signature +```python +class WarningSeverity(StrEnum): + CRITICAL = "critical" + WARNING = "warning" + INFO = "info" +``` + +### Constraints +- Import: `from ftllexengine import WarningSeverity` +- Type: `StrEnum` +- Used by: `ValidationWarning.severity` + +--- + +## `ValidationError` + +Structured validation error for invalid resource content. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class ValidationError: + code: DiagnosticCode + message: str + content: str + line: int | None = None + column: int | None = None +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import ValidationError` +- Produced by: `validate_resource()` +- Formatting helper: `.format()` delegates to `DiagnosticFormatter` +- Security note: `content` may contain source text; use sanitizing formatter options for multi-tenant logs + +--- + +## `ValidationWarning` + +Structured semantic warning returned by resource validation. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class ValidationWarning: + code: DiagnosticCode + message: str + context: str | None = None + line: int | None = None + column: int | None = None + severity: WarningSeverity = WarningSeverity.WARNING +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import ValidationWarning` +- Produced by: `validate_resource()` +- Formatting helper: `.format()` delegates to `DiagnosticFormatter` + +--- + +## `ValidationResult` + +Unified immutable validation result. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class ValidationResult: + errors: tuple[ValidationError, ...] + warnings: tuple[ValidationWarning, ...] + annotations: tuple[Annotation, ...] +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import ValidationResult` +- Produced by: `validate_resource()` +- Properties: `is_valid`, `error_count`, `warning_count`, `annotation_count` +- Factories: `valid()`, `invalid()`, `from_annotations()` +- Formatting helper: `.format()` delegates to `DiagnosticFormatter` + +--- + +## `DiagnosticCode` + +Enum of stable diagnostic identifiers. + +### Signature +```python +class DiagnosticCode(Enum): ... +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import DiagnosticCode` +- Coverage: reference, resolution, syntax, parsing, and validation categories +- Stability: intended for programmatic handling and log/search indexing + +--- + +## `SourceSpan` + +Immutable source location for diagnostics. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class SourceSpan: + start: int + end: int + line: int + column: int +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import SourceSpan` +- Semantics: `start`/`end` are character offsets, `line`/`column` are 1-indexed +- Invariants: `start >= 0`, `end >= start`, `line >= 1`, `column >= 1` + +--- + +## `Diagnostic` + +Structured diagnostic payload for tool and human consumption. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class Diagnostic: + code: DiagnosticCode + message: str + span: SourceSpan | None = None + hint: str | None = None + help_url: str | None = None + function_name: str | None = None + argument_name: str | None = None + expected_type: str | None = None + received_type: str | None = None + ftl_location: str | None = None + severity: Literal["error", "warning"] = "error" + resolution_path: tuple[str, ...] | None = None +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import Diagnostic` +- Purpose: single structured payload for rich error reporting +- Helper: `format_error()` delegates to `DiagnosticFormatter` + +--- + +## `OutputFormat` + +Enum of supported diagnostic formatter output styles. + +### Signature +```python +class OutputFormat(StrEnum): + RUST = "rust" + SIMPLE = "simple" + JSON = "json" +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import OutputFormat` +- Type: `StrEnum` +- Used by: `DiagnosticFormatter.output_format` + +--- + +## `DiagnosticFormatter` + +Central formatting service for diagnostics and validation output. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class DiagnosticFormatter: + output_format: OutputFormat = OutputFormat.RUST + sanitize: bool = False + redact_content: bool = False + color: bool = False + max_content_length: int = 100 +``` + +### Constraints +- Import: `from ftllexengine.diagnostics import DiagnosticFormatter` +- Main methods: `format()`, `format_all()`, `format_error()`, `format_warning()`, `format_validation_result()` +- Output styles: Rust-style multi-line, simple one-line, and JSON +- Sanitization: can truncate or redact source-bearing fields before output diff --git a/docs/DOC_05_Errors.md b/docs/DOC_05_Errors.md index f9c8d147..ed61bd4f 100644 --- a/docs/DOC_05_Errors.md +++ b/docs/DOC_05_Errors.md @@ -1,20 +1,21 @@ --- -afad: "3.3" -version: "0.161.0" +afad: "3.5" +version: "0.163.0" domain: ERRORS -updated: "2026-03-21" +updated: "2026-04-22" route: - keywords: [FrozenFluentError, ErrorCategory, FrozenErrorContext, ParseTypeLiteral, ImmutabilityViolationError, DataIntegrityError, IntegrityContext, CacheCorruptionError, IntegrityCheckFailedError, WriteConflictError, SyntaxIntegrityError, FormattingIntegrityError, ValidationResult, DiagnosticCode, Diagnostic, VALIDATION_PLACEABLE_SELECTOR] - questions: ["what errors can occur?", "how to handle errors?", "what are the error codes?", "how to format diagnostics?", "what exceptions do parsing functions raise?", "how to verify error integrity?", "what is SyntaxIntegrityError?", "what is FormattingIntegrityError?", "what is IntegrityContext?", "what is CacheCorruptionError?", "what is WriteConflictError?"] + keywords: [FrozenFluentError, ErrorCategory, FrozenErrorContext, DataIntegrityError, BabelImportError, ErrorTemplate] + questions: ["what errors does FTLLexEngine expose?", "how do parse and format failures surface?", "what integrity exceptions exist?", "how does missing Babel surface?"] --- # Errors Reference ---- +This reference covers immutable Fluent errors, optional-dependency failures, and fail-fast integrity exceptions. +Validation result types and formatter infrastructure are documented in [DOC_05_Diagnostics.md](DOC_05_Diagnostics.md). ## `ErrorCategory` -Error categorization string enum replacing the exception class hierarchy. +Enum that classifies `FrozenFluentError` instances. ### Signature ```python @@ -26,27 +27,53 @@ class ErrorCategory(StrEnum): FORMATTING = "formatting" ``` -### Parameters -| Value | Description | -|:------|:------------| -| `REFERENCE` | Unknown message, term, or variable reference. | -| `RESOLUTION` | Runtime resolution failure (depth exceeded, function error). | -| `CYCLIC` | Cyclic reference detected (e.g., `hello = { hello }`). | -| `PARSE` | Bi-directional parsing failure (number, date, currency). | -| `FORMATTING` | Locale-aware formatting failure. | +### Constraints +- Import: `from ftllexengine import ErrorCategory` +- Type: `StrEnum` +- Purpose: replaces a subclass hierarchy for normal Fluent errors + +--- + +## `ParseTypeLiteral` + +Closed literal set for parse/format context. + +### Signature +```python +type ParseTypeLiteral = Literal["", "currency", "date", "datetime", "decimal", "number"] +``` + +### Constraints +- Import: `from ftllexengine import ParseTypeLiteral` +- `""` is the sentinel meaning "not applicable" +- Used by: `FrozenErrorContext.parse_type` + +--- + +## `FrozenErrorContext` + +Immutable context attached to parse and formatting failures. + +### Signature +```python +@dataclass(frozen=True, slots=True) +class FrozenErrorContext: + input_value: str = "" + locale_code: str = "" + parse_type: ParseTypeLiteral = "" + fallback_value: str = "" +``` ### Constraints -- Type: `StrEnum` — each member IS a `str`; `ErrorCategory.REFERENCE == "reference"` is `True` -- String repr: `str(ErrorCategory.REFERENCE) == "reference"` (not `"ErrorCategory.REFERENCE"`) -- Value: `.value` is still the plain string (`"reference"`, `"resolution"`, etc.) -- Usage: Check category instead of using isinstance() on subclasses. -- Import: `from ftllexengine.diagnostics import ErrorCategory` +- Import: `from ftllexengine import FrozenErrorContext` +- Purpose: keeps parse/format metadata immutable and hashable +- Typical use: attached to `FrozenFluentError.context` --- ## `FrozenFluentError` -Immutable, content-addressable Fluent error for financial-grade data integrity. +Sealed, immutable, content-addressable Fluent error type. ### Signature ```python @@ -59,122 +86,60 @@ class FrozenFluentError(Exception): diagnostic: Diagnostic | None = None, context: FrozenErrorContext | None = None, ) -> None: ... - - def verify_integrity(self) -> bool: ... - - @property - def message(self) -> str: ... - @property - def category(self) -> ErrorCategory: ... - @property - def diagnostic(self) -> Diagnostic | None: ... - @property - def context(self) -> FrozenErrorContext | None: ... - @property - def content_hash(self) -> bytes: ... - @property - def fallback_value(self) -> str: ... - @property - def input_value(self) -> str: ... - @property - def locale_code(self) -> str: ... - @property - def parse_type(self) -> Literal["", "currency", "date", "datetime", "decimal", "number"]: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `category` | `ErrorCategory` | Y | Error categorization (replaces subclass hierarchy). | -| `diagnostic` | `Diagnostic \| None` | N | Structured diagnostic information. | -| `context` | `FrozenErrorContext \| None` | N | Additional context for parse/formatting errors. | - ### Constraints -- Immutable: All attributes frozen after construction. Mutation raises `ImmutabilityViolationError`. -- Exception Attributes: Python exception mechanism attributes (`__traceback__`, `__context__`, `__cause__`, `__suppress_context__`, `__notes__`) are allowed even after freeze to support exception chaining and Python 3.11+ exception groups. -- Sealed: Cannot be subclassed. Use `ErrorCategory` for classification. -- Content-Addressed: BLAKE2b-128 hash computed at construction for integrity verification. -- Hashable: Can be used in sets and as dict keys. Hash based on content, not identity. `__hash__` returns `int.from_bytes(content_hash, "big")` using all 16 bytes of the BLAKE2b-128 hash; Python's `hash()` protocol then reduces via `int.__hash__()` (Mersenne prime modulus). -- Convenience Properties: `input_value`, `locale_code`, `parse_type` delegate to `context` (return empty string if context is None). -- Hash Composition: Content hash includes ALL fields for complete audit trail integrity: - - Core: `message`, `category.value` - - Diagnostic (if present): `code.name`, `message`, `span` (start/end/line/column), `hint`, `help_url`, `function_name`, `argument_name`, `expected_type`, `received_type`, `ftl_location`, `severity`, `resolution_path` - - Context (if present): `input_value`, `locale_code`, `parse_type`, `fallback_value` -- Length-Prefixing: All string fields are length-prefixed (4-byte big-endian) before hashing. This prevents collision attacks where `("ab", "c")` and `("a", "bc")` would hash identically. -- Import: `from ftllexengine.diagnostics import FrozenFluentError` +- Import: `from ftllexengine import FrozenFluentError` +- Purpose: normal parse, formatting, resolution, and reference failures +- Integrity: stores a BLAKE2b-128 `content_hash` and exposes `verify_integrity()` +- Immutability: attribute mutation or deletion raises `ImmutabilityViolationError` +- Sealed: runtime and static checks prevent subclassing +- Convenience properties: `input_value`, `locale_code`, `parse_type`, and `fallback_value` proxy `context` --- -## `FrozenFluentError.verify_integrity` +## `BabelImportError` -Verify error content hasn't been corrupted. +Exception raised when a Babel-backed feature is called in a parser-only installation. ### Signature ```python -def verify_integrity(self) -> bool: +class BabelImportError(ImportError): + def __init__(self, feature: str) -> None: ... ``` ### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Return: True if content hash matches, False if corrupted. -- Method: Recomputes BLAKE2b-128 hash and compares using constant-time comparison. -- Security: Defense against timing attacks via `hmac.compare_digest()`. - ---- - -## `ParseTypeLiteral` - -Type alias for the `parse_type` field of `FrozenErrorContext`. - -### Signature -```python -type ParseTypeLiteral = Literal["", "currency", "date", "datetime", "decimal", "number"] -``` +| Name | Req | Semantics | +|:-----|:----|:----------| +| `feature` | Y | Missing Babel feature label | ### Constraints -- `""` is the absent sentinel meaning "no parse type associated with this error", not an empty string value. -- Closed set: any value outside this literal is a static type error. -- Import: `from ftllexengine.diagnostics import ParseTypeLiteral` +- Import: `from ftllexengine.introspection import BabelImportError` +- Purpose: consistent optional-dependency failure for CLDR-backed features +- Message: instructs callers to install `ftllexengine[babel]` --- -## `FrozenErrorContext` +## `ErrorTemplate` -Immutable context for parse/formatting errors. +Class namespace that builds standardized `Diagnostic` objects for common runtime failures. ### Signature ```python -@dataclass(frozen=True, slots=True) -class FrozenErrorContext: - input_value: str - locale_code: str - parse_type: ParseTypeLiteral - fallback_value: str +class ErrorTemplate: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `input_value` | `str` | Y | String that failed parsing/formatting. | -| `locale_code` | `str` | Y | Locale used for parsing/formatting. | -| `parse_type` | `ParseTypeLiteral` | Y | Formatting type domain; `""` when absent. | -| `fallback_value` | `str` | Y | Value to use when formatting fails. | - ### Constraints -- Immutable: Frozen dataclass, cannot be modified. -- `parse_type`: see `ParseTypeLiteral`. The `""` sentinel means "not applicable". -- Usage: Passed to `FrozenFluentError` for PARSE/FORMATTING errors. -- Import: `from ftllexengine.diagnostics import FrozenErrorContext` +- Import: `from ftllexengine.diagnostics import ErrorTemplate` +- Purpose: centralized diagnostic-message construction instead of ad-hoc exception strings +- Output: returns `Diagnostic` objects from named factory methods such as `message_not_found()` and `plural_support_unavailable()` +- State: Stateless factory namespace --- ## `DataIntegrityError` -Base exception for data integrity violations. +Base exception for system integrity failures, distinct from normal Fluent errors. ### Signature ```python @@ -184,29 +149,19 @@ class DataIntegrityError(Exception): message: str, context: IntegrityContext | None = None, ) -> None: ... - - @property - def context(self) -> IntegrityContext | None: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context for post-mortem analysis. | - ### Constraints -- Purpose: Base class for all system-level integrity exceptions (NOT a `FrozenFluentError` subclass — different error domain). -- Hierarchy: Six sealed `@final` subclasses: `CacheCorruptionError`, `FormattingIntegrityError`, `ImmutabilityViolationError`, `IntegrityCheckFailedError`, `SyntaxIntegrityError`, `WriteConflictError`. -- Immutable: Attributes frozen after construction. Mutation raises `ImmutabilityViolationError` (except Python exception machinery attributes). -- Context: `context` property exposes the `IntegrityContext` passed at construction. -- Import: `from ftllexengine.integrity import DataIntegrityError` or `from ftllexengine import DataIntegrityError` +- Import: `from ftllexengine import DataIntegrityError` +- Purpose: corruption, strict-mode violations, or mutation attempts that should fail fast +- Domain boundary: not a `FrozenFluentError` subclass +- Immutability: frozen after initialization; mutation raises `ImmutabilityViolationError` --- ## `IntegrityContext` -Structured diagnostic context for post-mortem analysis of integrity failures. +Structured context for `DataIntegrityError` instances. ### Signature ```python @@ -218,195 +173,92 @@ class IntegrityContext: expected: str | None = None actual: str | None = None timestamp: float | None = None + wall_time_unix: float | None = None ``` -### Parameters -| Field | Type | Req | Description | -|:------|:-----|:----|:------------| -| `component` | `str` | Y | System component where error occurred (e.g., `"cache"`, `"error"`, `"bundle"`). | -| `operation` | `str` | Y | Operation being performed (e.g., `"get"`, `"put"`, `"verify"`, `"mutate"`). | -| `key` | `str \| None` | N | Cache key or identifier involved. | -| `expected` | `str \| None` | N | Expected value or hash. | -| `actual` | `str \| None` | N | Actual value or hash found. | -| `timestamp` | `float \| None` | N | Time of error detection (`time.monotonic()`). | - ### Constraints -- Immutable: Frozen dataclass; all fields read-only after construction. -- Purpose: Passed to all `DataIntegrityError` subclass constructors as `context=` to enable structured post-mortem analysis. -- Import: `from ftllexengine.integrity import IntegrityContext` or `from ftllexengine import IntegrityContext` +- Import: `from ftllexengine import IntegrityContext` +- Purpose: post-mortem metadata for cache, formatting, and strict-load failures +- Timestamps: `timestamp` is monotonic-process time; `wall_time_unix` is wall-clock correlation time --- ## `CacheCorruptionError` -Checksum mismatch detected in a cache entry. +Raised when cached content fails checksum verification. ### Signature ```python @final -class CacheCorruptionError(DataIntegrityError): - def __init__( - self, - message: str, - context: IntegrityContext | None = None, - ) -> None: ... +class CacheCorruptionError(DataIntegrityError): ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context. | - ### Constraints -- Purpose: Raised when a cached entry's checksum does not match the stored checksum, indicating memory corruption, hardware fault, or tampering. -- Severity: CRITICAL — should trigger immediate investigation and incident response. -- Sealed: `@final` decorator prevents subclassing. -- Import: `from ftllexengine.integrity import CacheCorruptionError` or `from ftllexengine import CacheCorruptionError` +- Import: `from ftllexengine import CacheCorruptionError` +- Typical meaning: corruption, tampering, or checksum mismatch in cached data --- -## `IntegrityCheckFailedError` +## `ImmutabilityViolationError` -Generic integrity verification failure not covered by a more specific subclass. +Raised when frozen error or integrity objects are mutated. ### Signature ```python @final -class IntegrityCheckFailedError(DataIntegrityError): - def __init__( - self, - message: str, - context: IntegrityContext | None = None, - ) -> None: ... +class ImmutabilityViolationError(DataIntegrityError): ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context. | - ### Constraints -- Purpose: Raised for generic integrity failures (e.g., newly created cache entry fails immediate verification, write log integrity check fails, error verification fails). -- Sealed: `@final` decorator prevents subclassing. -- Import: `from ftllexengine.integrity import IntegrityCheckFailedError` or `from ftllexengine import IntegrityCheckFailedError` +- Import: `from ftllexengine import ImmutabilityViolationError` +- Triggered by: invalid mutation attempts on `FrozenFluentError`, `DataIntegrityError`, or related frozen evidence --- -## `WriteConflictError` - -Write-once violation: attempt to overwrite an existing cache entry in write-once mode. - -### Signature -```python -@final -class WriteConflictError(DataIntegrityError): - def __init__( - self, - message: str, - context: IntegrityContext | None = None, - *, - existing_seq: int = 0, - new_seq: int = 0, - ) -> None: ... - - @property - def existing_seq(self) -> int: ... - @property - def new_seq(self) -> int: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context. | -| `existing_seq` | `int` | N | Sequence number of the existing cache entry (keyword-only). | -| `new_seq` | `int` | N | Sequence number of the rejected write attempt (keyword-only). | - -### Constraints -- Purpose: Raised when `CacheConfig.write_once=True` and code attempts to overwrite an existing cached entry. This is a security feature: overwrites can mask data races in financial applications. -- Properties: `existing_seq` and `new_seq` identify the conflicting entries for audit. -- Sealed: `@final` decorator prevents subclassing. -- Import: `from ftllexengine.integrity import WriteConflictError` or `from ftllexengine import WriteConflictError` - ---- - -## `ImmutabilityViolationError` +## `IntegrityCheckFailedError` -Attempt to mutate an immutable object. +Generic integrity-verification failure when no narrower subtype applies. ### Signature ```python @final -class ImmutabilityViolationError(DataIntegrityError): - def __init__( - self, - message: str, - context: IntegrityContext | None = None, - ) -> None: ... +class IntegrityCheckFailedError(DataIntegrityError): ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Description of mutation attempt. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context. | - ### Constraints -- Purpose: Raised when code attempts to modify a frozen `FrozenFluentError`, `DataIntegrityError`, or cache entry. -- Raised By: `FrozenFluentError.__setattr__()`, `FrozenFluentError.__delattr__()`, `DataIntegrityError.__setattr__()`, `DataIntegrityError.__delattr__()`. -- Sealed: `@final` decorator prevents subclassing. -- Import: `from ftllexengine.integrity import ImmutabilityViolationError` or `from ftllexengine import ImmutabilityViolationError` +- Import: `from ftllexengine import IntegrityCheckFailedError` +- Used for: verification failures that are not specifically checksum, write-conflict, syntax, or formatting failures --- -## `SyntaxIntegrityError` +## `WriteConflictError` -Syntax errors detected in strict mode during FTL source loading. +Raised when write-once cache mode rejects an overwrite. ### Signature ```python @final -class SyntaxIntegrityError(DataIntegrityError): +class WriteConflictError(DataIntegrityError): def __init__( self, message: str, context: IntegrityContext | None = None, *, - junk_entries: tuple[Junk, ...] = (), - source_path: str | None = None, + existing_seq: int = 0, + new_seq: int = 0, ) -> None: ... - - @property - def junk_entries(self) -> tuple[Junk, ...]: ... - @property - def source_path(self) -> str | None: ... - @property - def context(self) -> IntegrityContext | None: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context. | -| `junk_entries` | `tuple[Junk, ...]` | N | Junk AST nodes representing syntax errors. | -| `source_path` | `str \| None` | N | Path to source file for error context. | - ### Constraints -- Purpose: Raised by `FluentBundle.add_resource()` in strict mode when syntax errors (Junk entries) are detected. -- Immutable: All attributes frozen after construction. Mutation raises `ImmutabilityViolationError`. -- Sealed: `@final` decorator prevents subclassing. -- Financial: Financial applications require fail-fast behavior. Silent failures during FTL source loading are unacceptable for monetary formatting. -- Import: `from ftllexengine.integrity import SyntaxIntegrityError` or `from ftllexengine import SyntaxIntegrityError` +- Import: `from ftllexengine import WriteConflictError` +- Extra properties: `existing_seq` and `new_seq` +- Typical meaning: concurrent or forbidden overwrite in write-once cache mode --- ## `FormattingIntegrityError` -Formatting errors detected in strict mode during message formatting. +Strict-mode formatting failure that carries the underlying Fluent errors. ### Signature ```python @@ -421,607 +273,36 @@ class FormattingIntegrityError(DataIntegrityError): fallback_value: str = "", message_id: str = "", ) -> None: ... - - @property - def fluent_errors(self) -> tuple[FrozenFluentError, ...]: ... - @property - def fallback_value(self) -> str: ... - @property - def message_id(self) -> str: ... - @property - def context(self) -> IntegrityContext | None: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `message` | `str` | Y | Human-readable error description. | -| `context` | `IntegrityContext \| None` | N | Structured diagnostic context. | -| `fluent_errors` | `tuple[FrozenFluentError, ...]` | N | Original Fluent errors that triggered exception. | -| `fallback_value` | `str` | N | Fallback value that would have been returned in non-strict mode. | -| `message_id` | `str` | N | Message ID that failed to format. | - ### Constraints -- Purpose: Raised by `FluentBundle.format_pattern()` and `FluentLocalization.format_pattern()` / `format_value()` in strict mode when formatting errors occur. -- Immutable: All attributes frozen after construction. Mutation raises `ImmutabilityViolationError`. -- Sealed: `@final` decorator prevents subclassing. -- Financial: Financial applications require fail-fast behavior. Silent fallback values are unacceptable when formatting monetary amounts. -- Import: `from ftllexengine.integrity import FormattingIntegrityError` or `from ftllexengine import FormattingIntegrityError` +- Import: `from ftllexengine import FormattingIntegrityError` +- Extra properties: `fluent_errors`, `fallback_value`, `message_id` +- Raised by: strict formatting paths that refuse to return fallback text --- -## `BabelImportError` - -### Signature -```python -class BabelImportError(ImportError): - feature: str - - def __init__(self, feature: str) -> None: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `feature` | `str` | Y | Feature name requiring Babel (e.g., "parse_date"). | - -### Constraints -- Purpose: Raised when Babel is required but not installed. -- Behavior: Provides installation instructions in error message. -- Raised by: `parse_decimal()`, `parse_fluent_number()`, `parse_date()`, `parse_datetime()`, `parse_currency()`, `select_plural_category()`, `LocaleContext.create()`, `get_cldr_version()`, `get_territory()`, `get_currency()`, `list_territories()`, `list_currencies()`, `get_territory_currencies()`, `is_valid_territory_code()`, `is_valid_currency_code()`. -- Import: `from ftllexengine.core.babel_compat import BabelImportError` - ---- - -## `SerializationValidationError` - -### Signature -```python -class SerializationValidationError(ValueError): ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Purpose: AST validation errors during serialization. -- Raised: When `serialize(validate=True)` detects invalid AST. -- Common: Identifier names violating `[a-zA-Z][a-zA-Z0-9_-]*`, duplicate named argument names, named argument values not StringLiteral or NumberLiteral. -- Import: `from ftllexengine.syntax import SerializationValidationError` - ---- - -## `SerializationDepthError` - -### Signature -```python -class SerializationDepthError(ValueError): ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Purpose: AST nesting exceeds maximum serialization depth. -- Cause: Adversarial input, malformed AST, or deep Placeable nesting. -- Raised: When AST depth exceeds `max_depth` parameter (default: 100). -- Security: Prevents stack overflow from adversarially constructed ASTs. -- Import: `from ftllexengine.syntax import SerializationDepthError` - ---- - -## `ValidationResult` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class ValidationResult: - errors: tuple[ValidationError, ...] - warnings: tuple[ValidationWarning, ...] - annotations: tuple[Annotation, ...] - - @property - def is_valid(self) -> bool: ... - @property - def error_count(self) -> int: ... # len(self.errors) only - @property - def annotation_count(self) -> int: ... # len(self.annotations) only - @property - def warning_count(self) -> int: ... - @staticmethod - def valid() -> ValidationResult: ... - @staticmethod - def invalid(...) -> ValidationResult: ... - @staticmethod - def from_annotations(annotations: tuple[Annotation, ...]) -> ValidationResult: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `errors` | `tuple[ValidationError, ...]` | Y | Syntax validation errors. | -| `warnings` | `tuple[ValidationWarning, ...]` | Y | Semantic warnings. | -| `annotations` | `tuple[Annotation, ...]` | Y | Parser annotations. | - -### Constraints -- Return: Immutable validation result. -- State: Frozen dataclass. -- `error_count`: Count of `ValidationError` entries only (syntax errors); does not include annotations. -- `annotation_count`: Count of `Annotation` entries only (parser informational notes); does not include syntax errors. -- `is_valid`: True iff `error_count == 0 AND annotation_count == 0`; annotations DO affect validity — parser annotations indicate parse failures and render the resource invalid. - ---- - -## `ValidationResult.format` - -### Signature -```python -def format( - self, - *, - sanitize: bool = False, - redact_content: bool = False, - include_warnings: bool = True, -) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `sanitize` | `bool` | N | Truncate content to prevent information leakage. | -| `redact_content` | `bool` | N | Completely redact content (requires sanitize=True). | -| `include_warnings` | `bool` | N | Include warnings in output (default: True). | - -### Constraints -- Return: Formatted string with errors, annotations, optionally warnings. -- Security: Set sanitize=True for multi-tenant applications. - ---- - -## `ValidationError` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class ValidationError: - code: DiagnosticCode - message: str - content: str - line: int | None = None - column: int | None = None -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `code` | `DiagnosticCode` | Y | Structured error code. | -| `message` | `str` | Y | Error message. | -| `content` | `str` | Y | Unparseable FTL content. | -| `line` | `int \| None` | N | Line number (1-indexed). | -| `column` | `int \| None` | N | Column number (1-indexed). | - -### Constraints -- Return: Immutable error record. -- State: Frozen dataclass. -- Code: `DiagnosticCode` enum, not a string. Use `.name` for the string form. - ---- - -## `ValidationError.format` - -### Signature -```python -def format( - self, - *, - sanitize: bool = False, - redact_content: bool = False, -) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `sanitize` | `bool` | N | Truncate content to prevent information leakage. | -| `redact_content` | `bool` | N | Completely redact content (requires sanitize=True). | - -### Constraints -- Return: Formatted error string with location and content. -- Security: Set sanitize=True for multi-tenant applications. - ---- - -## `WarningSeverity` - -Severity levels for validation warnings. - -### Signature -```python -class WarningSeverity(StrEnum): - CRITICAL = "critical" - WARNING = "warning" - INFO = "info" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `CRITICAL` | Will cause runtime failure (undefined reference). | -| `WARNING` | May cause issues (duplicate ID, missing value). | -| `INFO` | Informational only (style suggestions). | - -### Constraints -- StrEnum: Members ARE strings. `str(WarningSeverity.CRITICAL) == "critical"` -- Usage: Filter warnings by severity in tooling. -- Import: `from ftllexengine.diagnostics import WarningSeverity` - ---- +## `SyntaxIntegrityError` -## `ValidationWarning` +Strict-load failure raised when resource loading encounters syntax junk. ### Signature ```python -@dataclass(frozen=True, slots=True) -class ValidationWarning: - code: DiagnosticCode - message: str - context: str | None = None - line: int | None = None - column: int | None = None - severity: WarningSeverity = WarningSeverity.WARNING - - def format( +@final +class SyntaxIntegrityError(DataIntegrityError): + def __init__( self, + message: str, + context: IntegrityContext | None = None, *, - sanitize: bool = False, - redact_content: bool = False, - ) -> str: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `code` | `DiagnosticCode` | Y | Structured warning code. | -| `message` | `str` | Y | Warning message. | -| `context` | `str \| None` | N | Additional context. | -| `line` | `int \| None` | N | Line number (1-indexed). | -| `column` | `int \| None` | N | Column number (1-indexed). | -| `severity` | `WarningSeverity` | N | Severity level (default: WARNING). | - -### Constraints -- Return: Immutable warning record. -- State: Frozen dataclass. -- Code: `DiagnosticCode` enum, not a string. Use `.name` for the string form. -- IDE: Line/column fields enable IDE/LSP integration for warning display. -- Severity: Enables filtering by importance (CRITICAL > WARNING > INFO). - ---- - -## `ValidationWarning.format` - -### Signature -```python -def format( - self, - *, - sanitize: bool = False, - redact_content: bool = False, -) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `sanitize` | `bool` | N | Truncate context to prevent information leakage. | -| `redact_content` | `bool` | N | Completely redact context (requires sanitize=True). | - -### Constraints -- Return: Formatted warning string with location and optional context. -- Format: `[code] at line N, column M: message (context: 'ctx')` -- Security: Set sanitize=True for multi-tenant applications. - ---- - -## `DiagnosticCode` - -### Signature -```python -class DiagnosticCode(Enum): - # Reference errors (1000-1999) - MESSAGE_NOT_FOUND = 1001 - ATTRIBUTE_NOT_FOUND = 1002 - TERM_NOT_FOUND = 1003 - TERM_ATTRIBUTE_NOT_FOUND = 1004 - VARIABLE_NOT_PROVIDED = 1005 - MESSAGE_NO_VALUE = 1006 - - # Resolution errors (2000-2999) - CYCLIC_REFERENCE = 2001 - NO_VARIANTS = 2002 - FUNCTION_NOT_FOUND = 2003 - FUNCTION_FAILED = 2004 - UNKNOWN_EXPRESSION = 2005 - TYPE_MISMATCH = 2006 - INVALID_ARGUMENT = 2007 - ARGUMENT_REQUIRED = 2008 - PATTERN_INVALID = 2009 - MAX_DEPTH_EXCEEDED = 2010 - FUNCTION_ARITY_MISMATCH = 2011 - TERM_POSITIONAL_ARGS_IGNORED = 2012 - PLURAL_SUPPORT_UNAVAILABLE = 2013 - FORMATTING_FAILED = 2014 - EXPANSION_BUDGET_EXCEEDED = 2015 - - # Syntax errors (3000-3999) - UNEXPECTED_EOF = 3001 - # 3002, 3003: not assigned — character/token-level errors are AST Annotation codes - PARSE_JUNK = 3004 - PARSE_NESTING_DEPTH_EXCEEDED = 3005 - - # Parsing errors (4000-4999) - Bi-directional localization - # 4001: not assigned - PARSE_DECIMAL_FAILED = 4002 - PARSE_DATE_FAILED = 4003 - PARSE_DATETIME_FAILED = 4004 - PARSE_CURRENCY_FAILED = 4005 - PARSE_LOCALE_UNKNOWN = 4006 - PARSE_CURRENCY_AMBIGUOUS = 4007 - PARSE_CURRENCY_SYMBOL_UNKNOWN = 4008 - PARSE_AMOUNT_INVALID = 4009 - PARSE_CURRENCY_CODE_INVALID = 4010 - - # Validation errors (5000-5099) - Fluent spec semantic validation - # 5001-5003: handled as parse-time syntax errors (Junk), not post-parse codes. - # 5008-5009: represented at runtime via VARIABLE_NOT_PROVIDED and NO_VARIANTS. - # 5012-5013: not defined by the current Fluent spec valid.md revision. - VALIDATION_TERM_NO_VALUE = 5004 - VALIDATION_SELECT_NO_DEFAULT = 5005 - VALIDATION_SELECT_NO_VARIANTS = 5006 - VALIDATION_VARIANT_DUPLICATE = 5007 - VALIDATION_NAMED_ARG_DUPLICATE = 5010 - VALIDATION_PLACEABLE_SELECTOR = 5011 - - # Validation warnings (5100-5199) - Resource-level validation - VALIDATION_PARSE_ERROR = 5100 - VALIDATION_CRITICAL_PARSE_ERROR = 5101 - VALIDATION_DUPLICATE_ID = 5102 - VALIDATION_NO_VALUE_OR_ATTRS = 5103 - VALIDATION_UNDEFINED_REFERENCE = 5104 - VALIDATION_CIRCULAR_REFERENCE = 5105 - VALIDATION_CHAIN_DEPTH_EXCEEDED = 5106 - VALIDATION_DUPLICATE_ATTRIBUTE = 5107 - VALIDATION_SHADOW_WARNING = 5108 - VALIDATION_TERM_POSITIONAL_ARGS = 5109 - # 5110: not assigned (VALIDATION_PLACEABLE_SELECTOR reclassified to error range, code 5011) -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| - -### Constraints -- Purpose: Unique error code identifiers for diagnostics. -- Ranges: 1000-1999 (reference), 2000-2999 (resolution), 3000-3999 (syntax), 4000-4999 (parsing), 5000-5099 (validation errors), 5100-5199 (validation warnings). -- Gaps: 4001 is unassigned. Codes 5001-5003, 5008-5009, 5012-5013, 5110 are intentionally unassigned (see inline comments). -- Import: `from ftllexengine.diagnostics import DiagnosticCode` - ---- - -## `Diagnostic` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class Diagnostic: - code: DiagnosticCode - message: str - span: SourceSpan | None = None - hint: str | None = None - help_url: str | None = None - function_name: str | None = None - argument_name: str | None = None - expected_type: str | None = None - received_type: str | None = None - ftl_location: str | None = None - severity: Literal["error", "warning"] = "error" - resolution_path: tuple[str, ...] | None = None - - def format_error(self) -> str: ... -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `code` | `DiagnosticCode` | Y | Error code. | -| `message` | `str` | Y | Error description. | -| `span` | `SourceSpan \| None` | N | Source location. | -| `hint` | `str \| None` | N | Fix suggestion. | -| `help_url` | `str \| None` | N | Documentation URL. | -| `function_name` | `str \| None` | N | Function where error occurred. | -| `argument_name` | `str \| None` | N | Argument causing error. | -| `expected_type` | `str \| None` | N | Expected type. | -| `received_type` | `str \| None` | N | Actual type received. | -| `ftl_location` | `str \| None` | N | FTL file location. | -| `severity` | `Literal[...]` | N | "error" or "warning". | -| `resolution_path` | `tuple[str, ...] \| None` | N | Resolution stack for debugging nested references. | - -### Constraints -- Return: Immutable diagnostic record. -- State: Frozen dataclass. -- Resolution Path: Shows message reference chain (e.g., `("welcome", "greeting", "base")`). - ---- - -## `SourceSpan` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class SourceSpan: - start: int - end: int - line: int - column: int -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `start` | `int` | Y | Start character offset (0-indexed). | -| `end` | `int` | Y | End character offset (exclusive, 0-indexed). | -| `line` | `int` | Y | Line number (1-indexed). | -| `column` | `int` | Y | Column number (1-indexed). | - -### Constraints -- Immutable: Frozen dataclass. Mutation raises `FrozenInstanceError`. -- Invariants (enforced by `__post_init__`): `start >= 0`; `end >= start`; `line >= 1` (1-indexed); `column >= 1` (1-indexed). Violation raises `ValueError`. -- Import: `from ftllexengine.diagnostics import SourceSpan` - ---- - -## `OutputFormat` - -### Signature -```python -class OutputFormat(StrEnum): - RUST = "rust" - SIMPLE = "simple" - JSON = "json" -``` - -### Parameters -| Value | Description | -|:------|:------------| -| `RUST` | Rust compiler-style output with hints and help URLs. | -| `SIMPLE` | Single-line format (code: message). | -| `JSON` | JSON format for tooling integration. | - -### Constraints -- StrEnum: Members ARE strings. `str(OutputFormat.RUST) == "rust"` -- Import: `from ftllexengine.diagnostics import OutputFormat` - ---- - -## `DiagnosticFormatter` - -### Signature -```python -@dataclass(frozen=True, slots=True) -class DiagnosticFormatter: - output_format: OutputFormat = OutputFormat.RUST - sanitize: bool = False - redact_content: bool = False - color: bool = False - max_content_length: int = 100 - - def format(self, diagnostic: Diagnostic) -> str: ... - def format_all(self, diagnostics: Iterable[Diagnostic]) -> str: ... - def format_validation_result(self, result: ValidationResult) -> str: ... - def format_error(self, error: ValidationError) -> str: ... - def format_warning(self, warning: ValidationWarning) -> str: ... -``` - -### Parameters -| Field | Type | Description | -|:------|:-----|:------------| -| `output_format` | `OutputFormat` | Output style (rust, simple, json). | -| `sanitize` | `bool` | Truncate content to prevent information leakage. | -| `redact_content` | `bool` | Completely redact content (requires sanitize=True). | -| `color` | `bool` | Enable ANSI color codes (for terminal output). | -| `max_content_length` | `int` | Maximum content length when sanitizing. | - -### Constraints -- Return: Immutable formatter instance. -- State: Frozen dataclass. -- Thread: Safe. -- Security: All formatted output passes through `_escape_control_chars()` (full C0 range 0x00–0x1f and DEL 0x7f) to prevent log injection via embedded control characters in diagnostic messages. -- Import: `from ftllexengine.diagnostics import DiagnosticFormatter` - ---- - -## `DiagnosticFormatter.format` - -### Signature -```python -def format(self, diagnostic: Diagnostic) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `diagnostic` | `Diagnostic` | Y | Diagnostic to format. | - -### Constraints -- Return: Formatted diagnostic string. -- State: Read-only. -- Thread: Safe. - ---- - -## `DiagnosticFormatter.format_all` - -### Signature -```python -def format_all(self, diagnostics: Iterable[Diagnostic]) -> str: -``` - -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `diagnostics` | `Iterable[Diagnostic]` | Y | Diagnostics to format. | - -### Constraints -- Return: Formatted string with all diagnostics separated by newlines. -- State: Read-only. -- Thread: Safe. - ---- - -## `DiagnosticFormatter.format_validation_result` - -### Signature -```python -def format_validation_result( - self, - result: ValidationResult, - *, - include_warnings: bool = True, -) -> str: + junk_entries: tuple[Junk, ...] = (), + source_path: str | None = None, + ) -> None: ... ``` -### Parameters -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `result` | `ValidationResult` | Y | Validation result to format. | -| `include_warnings` | `bool` | N | Include warnings in output (default: True). | - -### Constraints -- Return: Formatted string with summary, errors, warnings, and annotations. -- State: Read-only. -- Thread: Safe. - ---- - -## Error Fallback Formats - -When resolution errors occur, FTLLexEngine returns readable fallback strings instead of raising exceptions. The fallback format varies by expression type. - -### Fallback Format Table - -| Expression Type | Fallback Format | Example | -|:----------------|:----------------|:--------| -| `VariableReference` | `{$name}` | `{$count}` | -| `MessageReference` | `{message-id}` | `{welcome}` | -| `TermReference` | `{-term-id}` | `{-brand}` | -| `FunctionReference` | `{FUNC(...)}` | `{NUMBER(...)}` | -| `SelectExpression` | `{{selector} -> ...}` | `{{$count} -> ...}` | -| Unknown expression | `{???}` | `{???}` | - ### Constraints -- Fallbacks preserve FTL-like syntax for debugging. -- SelectExpression fallback shows selector context. -- All fallbacks wrapped in braces for visual distinction. +- Import: `from ftllexengine import SyntaxIntegrityError` +- Extra properties: `junk_entries`, `source_path` +- Raised by: strict boot and resource-loading paths that reject partial parse success --- diff --git a/docs/DOC_06_Testing.md b/docs/DOC_06_Testing.md index 3aa0a4ae..9d2417ed 100644 --- a/docs/DOC_06_Testing.md +++ b/docs/DOC_06_Testing.md @@ -1,676 +1,161 @@ --- -afad: "3.3" -version: "0.153.0" +afad: "3.5" +version: "0.163.0" domain: TESTING -updated: "2026-03-13" +updated: "2026-04-22" route: - keywords: [pytest, hypothesis, fuzz, marker, profile, conftest, fixture, test.sh, metrics] - questions: ["how to run tests?", "how to skip fuzz tests?", "what hypothesis profiles exist?", "what test markers are available?", "how to see strategy metrics?"] + keywords: [testing, lint, pytest, fuzz, HypoFuzz, Atheris, test.sh, lint.sh, check.sh] + questions: ["how do I run lint and tests?", "what is the fuzz marker for?", "which scripts drive testing?"] --- -# DOC_06_Testing - -Testing infrastructure reference. Pytest configuration, Hypothesis profiles, markers, scripts, contracts. +# Testing Reference --- -## Test Categories +## `scripts/validate_docs.py` -### Categories +Repository script that validates runnable Markdown examples against the live package behavior. -| Category | Location | Execution | Duration | Marker | -|:---------|:---------|:----------|:---------|:-------| -| Unit | `tests/test_*.py` | `uv run scripts/test.sh` | Seconds | N/A | -| Property | `tests/test_*_property.py` | `uv run scripts/test.sh` | Minutes | N/A | -| Fuzzing | `tests/fuzz/*.py` | `pytest -m fuzz` | 10+ min | `fuzz` | -| Oracle | `tests/fuzz/test_runtime_bundle_oracle.py` | `pytest -m fuzz` | 10+ min | `fuzz` | -| Depth | `tests/fuzz/test_core_depth_guard_exhaustion.py` | `pytest -m fuzz` | 5+ min | `fuzz` | +### Signature +```bash +uv run python scripts/validate_docs.py +``` ### Constraints -- Categories are mutually exclusive: No. -- Default category: Unit. -- Property tests use Hypothesis with moderate `max_examples` (50 in CI, 500 in dev). -- Fuzzing tests use Hypothesis with high `max_examples` (10000 under `--deep` via `hypofuzz` profile). +- Purpose: parse repository Markdown, run configured Python fences, and validate FTL fences with the project parser +- Coverage: executes the runnable example set configured in `pyproject.toml` +- Failure mode: exits non-zero on invalid snippets, parser errors, or failing Python blocks +- Related guard: `tests/test_documentation_tooling.py` verifies the validator configuration --- -## `pytest.mark.fuzz` +## `scripts/validate_version.py` -### Rationale -Fuzzing tests use `max_examples=10000` (via `hypofuzz` profile) and take 10+ minutes to complete; excluding them from normal test runs keeps `uv run scripts/test.sh` fast while preserving the option for dedicated deep testing. +Repository script that enforces package-version sync across code, metadata, and documentation frontmatter. -### Usage -```python -@pytest.mark.fuzz -def test_example() -> None: ... - -# File-level: -pytestmark = pytest.mark.fuzz +### Signature +```bash +uv run python scripts/validate_version.py ``` -### Behavior - -| Trigger | Action | -|:--------|:-------| -| Normal test run (`pytest tests/`) | Test SKIPPED | -| Marker filter (`pytest -m fuzz`) | Test RUNS | -| Specific file (`pytest tests/fuzz/test_syntax_parser_grammar.py`) | Test RUNS (bypass) | - ### Constraints -- Location: Defined in `tests/conftest.py`. -- Arguments: None. -- Run: `pytest -m fuzz` or `./scripts/fuzz_hypofuzz.sh --deep`. -- Skip: `uv run scripts/test.sh` (default behavior). +- Purpose: verify `pyproject.toml`, runtime version exports, and configured Markdown frontmatter stay synchronized +- Coverage: enforces the AFAD `version:` contract over the configured Markdown set +- Failure mode: exits non-zero on version drift or metadata mismatch +- Related guard: `tests/test_documentation_tooling.py` verifies the frontmatter key contract --- -## `pytest_configure` +## `scripts/run_examples.py` + +Repository script that executes every shipped example under the active project interpreter. ### Signature -```python -def pytest_configure(config: pytest.Config) -> None: +```bash +uv run python scripts/run_examples.py [--pattern '*.py'] [--list] ``` -### Parameters - -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `config` | `pytest.Config` | Y | Pytest configuration object. | - -### Behavior - -| Phase | Action | -|:------|:-------| -| Configure | Registers `fuzz` marker via `addinivalue_line`. | - ### Constraints -- Return: None. -- Location: `tests/conftest.py`. -- Hook Type: configure. +- Purpose: keep `examples/*.py` runnable as a supported, repeatable gate +- Import mode: clears `PYTHONPATH` so examples run against the installed package contract +- Failure mode: exits non-zero when any example script fails --- -## `pytest_collection_modifyitems` +## `check.sh` + +Top-level orchestration script for the repository's full quality surface. ### Signature -```python -def pytest_collection_modifyitems( - config: pytest.Config, - items: list[pytest.Item] -) -> None: +```bash +./check.sh ``` -### Parameters - -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `config` | `pytest.Config` | Y | Pytest configuration object. | -| `items` | `list[pytest.Item]` | Y | Collected test items. | - -### Behavior - -| Phase | Action | -|:------|:-------| -| Collection | Adds skip marker to fuzz-tagged tests unless bypass condition met. | - ### Constraints -- Return: None. -- Location: `tests/conftest.py`. -- Hook Type: collect. -- Bypass conditions: `-m fuzz` in args OR fuzz-related file patterns in args. +- Purpose: run version/docs validation, examples, lint, tests, HypoFuzz preflight, and bounded Atheris checks in one command +- Environment: uses the same Python-versioned uv environment contract as the repo shell gates +- Fuzzing scope: includes corpus health plus short live Atheris smoke runs for graph and introspection targets --- -## `pytest_runtest_makereport` +## `pytest.mark.fuzz` + +Pytest marker indicating an intensive fuzz-only test surface. ### Signature ```python -def pytest_runtest_makereport( - item: pytest.Item, - call: pytest.CallInfo[None] -) -> None: +@pytest.mark.fuzz ``` -### Parameters - -| Parameter | Type | Req | Description | -|:----------|:-----|:----|:------------| -| `item` | `pytest.Item` | Y | Test item being reported on. | -| `call` | `pytest.CallInfo[None]` | Y | Call information with exception details. | - -### Behavior - -| Phase | Action | -|:------|:-------| -| Report | Detects Hypothesis failures via "Falsifying example" in exception. | -| Report | Generates standalone `repro_crash__.py` script. | -| Report | Writes JSON metadata to `.hypothesis/crashes/`. | - -### Output Files - -| File | Contents | -|:-----|:---------| -| `repro_crash__.py` | Standalone reproduction script | -| `crash__.json` | Machine-readable crash metadata | - ### Constraints -- Return: None. -- Location: `tests/conftest.py`. -- Hook Type: runtest. -- Trigger: Only on test failures containing "Falsifying example". +- Purpose: Separate slow or open-ended fuzz tests from default test runs +- Behavior: Normal `./scripts/test.sh` runs skip these tests +- Location: Declared in `pyproject.toml` --- -## Strategy Metrics Collection - -### Hooks - -Two session hooks in `tests/conftest.py` manage strategy metrics: - -| Hook | Phase | Action | -|:-----|:------|:-------| -| `pytest_sessionstart` | Start | Enable metrics, install event hook | -| `pytest_sessionfinish` | End | Write JSON report, stop live reporter | - -### Enabling Conditions - -Metrics are automatically enabled when any of: -- `STRATEGY_METRICS=1` environment variable -- `HYPOTHESIS_PROFILE=hypofuzz` -- Running with `-m fuzz` marker - -### Event Interception +## `scripts/lint.sh` -The `_install_event_hook()` function patches `hypothesis.event()` to also record to the metrics collector: +Repository lint runner script for the main static-analysis gate. -```python -_original_event = hypothesis.event -hypothesis.event = _wrapped_event # Calls original + records metrics -``` - -This enables automatic metrics capture from all event-emitting strategies without modifying strategy code. - -### Output Files - -| File | When Generated | Contents | -|:-----|:---------------|:---------| -| `.hypothesis/strategy_metrics.json` | Every session | Full metrics report | -| `.hypothesis/strategy_metrics_summary.txt` | If issues detected | Human-readable summary | - -### Per-Strategy Metrics - -With `--metrics` flag (or `STRATEGY_METRICS_DETAILED=1`), tracks per strategy: -- `invocations`: Total event count -- `wall_time_ms`: Total execution time -- `mean_cost_ms`: Average time per invocation -- `weight_pct`: Percentage of total events - -### Environment Variables - -| Variable | Default | Description | -|:---------|:--------|:------------| -| `STRATEGY_METRICS` | `0` | Enable collection | -| `STRATEGY_METRICS_LIVE` | `0` | Enable live console output | -| `STRATEGY_METRICS_DETAILED` | `0` | Show per-strategy table | -| `STRATEGY_METRICS_INTERVAL` | `10` | Live reporting interval (seconds) | - ---- - -## Hypothesis Profiles - -### Registration -```python -from hypothesis import settings, Phase, Verbosity - -settings.register_profile( - name, - max_examples=N, - phases=[Phase.explicit, Phase.reuse, Phase.generate, Phase.shrink], - derandomize=bool, - verbosity=Verbosity.X, -) +### Signature +```bash +./scripts/lint.sh [--verbose] ``` -### Registered Profiles - -| Profile | `max_examples` | `derandomize` | `deadline` | Use Case | -|:--------|---------------:|:--------------|:-----------|:---------| -| `dev` | 500 | False | default | Local development | -| `ci` | 50 | True | default | GitHub Actions | -| `verbose` | 100 | False | default | Debugging | -| `hypofuzz` | 10000 | False | None | Coverage-guided --deep runs | -| `stateful_fuzz` | 500 | False | None | RuleBasedStateMachine tests | - -### Selection Logic - -| Priority | Condition | Profile | -|---------:|:----------|:--------| -| 1 | `HYPOTHESIS_PROFILE=` env var | Explicit override | -| 2 | `CI=true` env var | `ci` | -| 3 | Default | `dev` | - ### Constraints -- Location: `tests/conftest.py`. -- Override: `HYPOTHESIS_PROFILE=verbose pytest tests/`. -- Note: Individual `@settings(max_examples=N)` overrides profile. +- Purpose: Run Ruff then mypy under the repo's expected isolated environment pivot +- Behavior: Pivots to `.venv-3.13` by default; `PY_VERSION` overrides target +- Import mode: keeps `PYTHONPATH` unset so tooling resolves the installed package surface +- Output: Quiet-on-success, log-on-fail, agent-oriented summary markers +- Failure mode: exits non-zero on any Ruff or mypy violation --- ## `scripts/test.sh` -### Purpose -Run full test suite with coverage enforcement. +Repository test runner script for the main correctness gate. -### Invocation +### Signature ```bash -uv run scripts/test.sh [--quick] [--ci] [--no-clean] [-- pytest-args] +./scripts/test.sh [--quick] [--ci] [--verbose] [-- ...pytest args] ``` -### Options - -| Option | Default | Description | -|:-------|:--------|:------------| -| `--quick` | Off | Skip coverage measurement | -| `--ci` | Off | CI mode, verbose output | -| `--no-clean` | Off | Preserve pytest caches | -| `--` | N/A | Pass remaining args to pytest | - -### Environment - -| Variable | Default | Description | -|:---------|:--------|:------------| -| `CI` | `false` | Triggers `ci` Hypothesis profile | -| `HYPOTHESIS_PROFILE` | auto | Override profile selection | - -### Exit Codes - -| Code | Meaning | -|-----:|:--------| -| 0 | All tests passed, coverage >= 95% | -| 1 | Test failures or coverage below threshold | - -### Output - -| Format | Location | -|:-------|:---------| -| JSON summary | stdout (`[SUMMARY-JSON-BEGIN]...[SUMMARY-JSON-END]`) | -| Coverage XML | `coverage.xml` | +### Constraints +- Purpose: Run pytest with the project’s expected environment pivot and reporting +- Behavior: Pivots to `.venv-3.13` by default; `PY_VERSION` overrides target +- Import mode: keeps `PYTHONPATH` unset so tests exercise the installed package surface +- Coverage: Enforces 100% line coverage and 100% branch coverage for `src/ftllexengine` in normal full mode +- Output: Log-on-fail summary plus structured status markers --- -## `scripts/fuzz_hypofuzz.sh` (HypoFuzz Interface) +## `scripts/fuzz_hypofuzz.sh` -### Purpose -Entry point for HypoFuzz-based fuzzing operations. +Repository script for Hypothesis and HypoFuzz workflows. -### Invocation +### Signature ```bash -./scripts/fuzz_hypofuzz.sh [MODE] [OPTIONS] +./scripts/fuzz_hypofuzz.sh [--deep | --preflight | --repro TEST | --list | --clean] [OPTIONS] ``` -### Modes - -| Mode | Description | -|:-----|:------------| -| (default) | Fast property tests (500 examples) | -| `--deep` | Continuous HypoFuzz (until Ctrl+C) | -| `--preflight` | Audit test infrastructure (events, strategies) | -| `--repro FILE` | Reproduce crash file | -| `--list` | List captured failures (with ages) | -| `--clean` | Remove all failure artifacts | - -### Options - -| Option | Default | Description | -|:-------|:--------|:------------| -| `--json` | Off | Output JSON for CI | -| `--verbose` | Off | Detailed progress | -| `--metrics` | Off | Single-pass pytest mode with per-strategy metrics (10s interval) | -| `--workers N` | 4 | Parallel workers | -| `--time N` | Endless | Time limit (seconds) | - -### Exit Codes - -| Code | Meaning | -|-----:|:--------| -| 0 | All tests passed, no findings | -| 1 | Findings detected | -| 2 | Error (environment/script) | -| 3 | Python version incompatible (Atheris requires 3.11-3.13) | +### Constraints +- Purpose: Run default property checks, deep fuzzing, preflight audits, and repro flows +- Behavior: Supports `--deep`, `--preflight`, `--repro`, `--metrics` +- Output: Structured heartbeat and summary markers --- ## `scripts/fuzz_atheris.sh` -### Purpose -Byte-level mutation fuzzing with Atheris/libFuzzer. +Repository script for native Atheris/libFuzzer targets. -### Invocation +### Signature ```bash -./scripts/fuzz_atheris.sh [MODE] [OPTIONS] -``` - -### Modes - -| Mode | Description | -|:-----|:------------| -| (default) | Interactive target selection | -| `--target NAME` | Run specific target | -| `--repro FILE` | Reproduce crash file | -| `--list` | List available targets | - -### Options - -| Option | Default | Description | -|:-------|:--------|:------------| -| `--workers N` | 4 | Number of parallel workers | -| `--time N` | Endless | Time limit (seconds) | - -### Available Targets - -| Target | Strategy | Use Case | -|:-------|:---------|:---------| -| `fuzz_roundtrip` | Parse-serialize roundtrip | Parser/serializer consistency | -| `fuzz_structured` | Grammar-aware generation | Deep logic bugs | -| `fuzz_oom` | Memory exhaustion | Resource limits | -| `fuzz_serializer` | Serializer edge cases | Whitespace/escaping correctness | -| `fuzz_runtime` | Bundle format operations | Runtime resolution bugs | -| `fuzz_builtins` | Built-in functions | NUMBER/DATETIME/CURRENCY edge cases | -| `fuzz_numbers` | Number formatting | Locale-aware number handling | -| `fuzz_currency` | Currency parsing | Symbol detection, ambiguity | -| `fuzz_plural` | Plural rules | CLDR plural category selection | -| `fuzz_iso` | ISO introspection | Territory/currency lookups | -| `fuzz_integrity` | Data integrity | Cache, error immutability | -| `fuzz_cache` | IntegrityCache | Checksum, write-once, eviction | -| `fuzz_bridge` | Function bridge | Custom function invocation | -| `fuzz_graph` | Dependency graph | Cycle detection, chain analysis | -| `fuzz_lock` | RWLock | Concurrency, timeout behavior | -| `fuzz_scope` | Scope resolution | Variable/term scoping | - -### Environment - -| Variable | Default | Description | -|:---------|:--------|:------------| -| `TMPDIR` | `/tmp` | Temp directory | - -### Exit Codes - -| Code | Meaning | -|-----:|:--------| -| 0 | Completed without crashes | -| 1+ | Crash detected | -| 3 | Python version incompatible | - -### Output - -| Format | Location | -|:-------|:---------| -| JSON summary | stdout (`[SUMMARY-JSON-BEGIN]...[SUMMARY-JSON-END]`) | -| Crash files | `.fuzz_atheris_corpus//crash_*` | - ---- - -## Fuzz Exclusion Behavior - -### Normal Test Run - -``` -pytest tests/ - | - +-- test_syntax_parser.py [RUN] - +-- test_syntax_parser_property.py [RUN] - +-- tests/fuzz/test_syntax_parser_grammar.py - | +-- has pytestmark = fuzz - | +-- conftest adds skip marker [SKIP] - +-- tests/fuzz/test_runtime_bundle_oracle.py - +-- has pytestmark = fuzz - +-- conftest adds skip marker [SKIP] -``` - -### Explicit Fuzz Run - -``` -pytest -m fuzz - | - +-- test_syntax_parser.py [SKIP - no fuzz marker] - +-- tests/fuzz/test_syntax_parser_grammar.py - | +-- has pytestmark = fuzz [RUN] - +-- tests/fuzz/test_runtime_bundle_oracle.py - +-- has pytestmark = fuzz [RUN] -``` - -### Specific File Bypass - -``` -pytest tests/fuzz/test_runtime_bundle_oracle.py - | - +-- conftest detects tests/fuzz/ path prefix - +-- Bypass skip logic - +-- All tests in file [RUN] +./scripts/fuzz_atheris.sh [TARGET | --setup | --list | --corpus | --minimize TARGET FILE | --replay TARGET [DIR] | --report TARGET | --clean TARGET] [OPTIONS] ``` ### Constraints -- Logic location: `tests/conftest.py:pytest_collection_modifyitems`. -- Bypass: Target file explicitly or use `-m fuzz`. -- Fuzz patterns: `tests/fuzz/` directory (any file directly invoked from this path prefix). - ---- - -## Parser Exception Contract - -### Rule -Parser must only raise `ValueError`, `RecursionError`, or `MemoryError` on invalid input. - -### Allowed - -| Exception | Condition | -|:----------|:----------| -| `ValueError` | Invalid syntax, malformed input | -| `RecursionError` | Deeply nested expressions exceeding stack | -| `MemoryError` | Extremely large input exhausting memory | - -### Violation - -| Trigger | Result | -|:--------|:-------| -| Any other exception type | `pytest.fail()` with exception details | - -### Location -- Enforced in: `src/ftllexengine/syntax/parser/`. -- Tested by: `tests/fuzz/test_syntax_parser_grammar.py:test_random_input_stability`. - ---- - -## Performance Contract - -### Rule -Parser must complete in adaptive time threshold based on input size. - -### Allowed - -| Input Size | Threshold | -|-----------:|----------:| -| 1 KB | 120ms | -| 10 KB | 300ms | -| 50 KB | 1100ms | - -Formula: `threshold = 100ms + (20ms * input_size_kb)` - -### Violation - -| Trigger | Result | -|:--------|:-------| -| Exceeds threshold | `SlowParsing` exception from Atheris target | - -### Location -- Enforced in: `fuzz_atheris/fuzz_perf.py`. -- Tested by: `./scripts/fuzz_atheris.sh perf`. - ---- - -## Test Artifact Storage - -| Location | Contents | Git Status | Distinguishable? | -|:---------|:---------|:-----------|:-----------------| -| `.hypothesis/` | Entire Hypothesis database | Ignored | N/A | -| `.hypothesis/examples/` | Coverage + failures mixed | Ignored | No | -| `.hypothesis/crashes/` | Portable crash reproduction files | Ignored | Yes (auto-generated) | -| `.hypothesis/hypofuzz.log` | HypoFuzz session log | Ignored | N/A | -| `.hypothesis/strategy_metrics.json` | Strategy metrics report | Ignored | N/A | -| `.hypothesis/strategy_metrics_summary.txt` | Human-readable summary | Ignored | N/A | -| `.pytest_cache/` | Pytest cache | Ignored | N/A | -| `.fuzz_atheris_corpus/` | Atheris working corpus | Ignored | N/A | -| `.fuzz_atheris_corpus/*/crash_*` | Crash artifacts | Ignored | Yes (prefix) | -| `fuzz_atheris/seeds/` | Atheris seed corpus | Tracked | N/A | -| `coverage.xml` | Coverage report | Ignored | N/A | - -### Automatic Failure Capture - -The `pytest_runtest_makereport` hook in `conftest.py` automatically generates crash files: - -```bash -./scripts/fuzz_hypofuzz.sh --list # List captured failures -``` - -### Hypothesis Bug Preservation - -When Hypothesis finds a failing input: - -1. **Automatic**: `pytest_runtest_makereport` hook generates `.hypothesis/crashes/repro_crash_*.py` -2. **Manual**: Promote the failing example to an `@example()` decorator - -```python -from hypothesis import example, given -from hypothesis import strategies as st - -@given(st.text()) -@example("the_failing_input") # Preserved in version control -def test_parser_handles_input(text: str) -> None: - ... -``` - -**Crash reproduction:** -```bash -# Run auto-generated reproduction script -uv run python .hypothesis/crashes/repro_crash_20260204_103000_a1b2c3d4.py - -# Or use the repro tool for JSON output -uv run python scripts/fuzz_hypofuzz_repro.py --json test_module::test_name -``` - -**Rationale**: HypoFuzz stores 100k+ coverage examples in `.hypothesis/examples/`. Committing would add 100MB+ to git. Instead: -1. Keep corpus local to each machine -2. Auto-capture crashes to `.hypothesis/crashes/` (portable, shareable) -3. Promote failures to `@example()` decorators (version controlled) -4. Each machine rebuilds its own coverage corpus - -### Atheris Bug Preservation - -When Atheris finds a crash, use the replay script for reproduction: - -| Step | Action | -|:-----|:-------| -| 1 | Reproduce: `uv run python fuzz_atheris/fuzz_atheris_replay_finding.py .fuzz_atheris_corpus//crash_*` | -| 2 | Add `@example(...)` decorator to relevant test function | -| 3 | Fix the bug, run tests to confirm | -| 4 | Delete crash file after committing test | - -**Crash-proof reporting**: Fuzz targets emit `[SUMMARY-JSON-BEGIN]...[SUMMARY-JSON-END]` -on exit via atexit handler, ensuring metadata is never lost on crash. - -**Rationale**: `.fuzz_atheris_corpus/` is git-ignored (contains binary seeds, machine-specific). -Unit tests with literal inputs are permanent, readable, and version-controlled. - ---- - -## File Pattern Reference - -| Pattern | Category | Marker | Notes | -|:--------|:---------|:-------|:------| -| `tests/test_*.py` | Unit | N/A | Standard tests | -| `tests/test_*_property.py` | Property | N/A | Hypothesis property-based | -| `tests/fuzz/*.py` | Fuzzing | `fuzz` | Excluded from normal runs | -| `tests/fuzz/test_runtime_bundle_oracle.py` | Oracle | `fuzz` | Differential testing vs ShadowBundle | -| `tests/fuzz/test_core_depth_guard_exhaustion.py` | Depth | `fuzz` | MAX_DEPTH boundary testing | -| `tests/fuzz/shadow_bundle.py` | Support | N/A | Reference implementation (not a test) | - ---- - -## Hypothesis Precedence - -| Priority | Source | Example | Notes | -|---------:|:-------|:--------|:------| -| 1 (highest) | `@settings` decorator | `@settings(max_examples=1500)` | Per-test override | -| 2 | `@settings` with profile | `@settings(settings.get_profile("dev"))` | Explicit profile use | -| 3 | Loaded profile | `settings.load_profile("dev")` | From conftest.py | -| 4 (lowest) | Default | `max_examples=100` | Hypothesis default | - -### Interaction Rules -- Decorator `@settings(max_examples=N)` ALWAYS overrides profile. -- Fuzzing tests intentionally hardcode high values to ensure deep exploration. -- Profile-based testing only works when tests don't specify their own settings. - ---- - -## Design Decisions - -### Marker-Based Exclusion -**Question**: How to separate fast unit tests from slow fuzzing tests? -**Decision**: `tests/fuzz/` subdirectory + `@pytest.mark.fuzz` marker + conftest.py skip logic. -**Rationale**: Directory isolates fuzz tests visually and structurally; marker integrates with -pytest `-m` filter; conftest enforces skipping in normal runs while allowing direct file bypass. -**Alternatives Rejected**: -- Naming convention only: No enforcement mechanism, easily forgotten. -- Environment variable check in tests: Invisible, hard to audit. - -### Profile Auto-Detection -**Question**: How to configure Hypothesis for different environments? -**Decision**: Auto-detect CI vs local via environment variables. -**Rationale**: Zero-config for common cases; explicit override available. -**Alternatives Rejected**: -- Always use same settings: CI would be slow, local would miss bugs. -- Require explicit configuration: Developer friction, easy to forget. - -### File Bypass Logic -**Question**: What if developer wants to run fuzz tests directly? -**Decision**: Detect specific file in pytest args and bypass skip. -**Rationale**: Allows `pytest tests/fuzz/test_syntax_parser_grammar.py` without `-m fuzz`. -**Alternatives Rejected**: -- Always require `-m fuzz`: Extra typing, breaks muscle memory. -- Never skip if any fuzz file mentioned: Too broad, confusing. - ---- - -## Quirks - -| Quirk | Behavior | Reason | -|:------|:---------|:-------| -| File bypass | `pytest tests/fuzz/test_syntax_parser_grammar.py` runs despite fuzz marker | Detected in `pytest_collection_modifyitems` via `config.invocation_params.args` | -| String matching | Bypass uses substring match, not exact | Allows both absolute and relative paths | -| Profile load timing | Profiles loaded at import time in conftest.py | Must happen before any test collection | -| `pytestmark` position | Must be before any `from` imports in file | Python module-level variable ordering | - ---- - -## Pitfalls - -| Mistake | Consequence | Correct Approach | -|:--------|:------------|:-----------------| -| Commit `.hypothesis/` | 100MB+ git bloat from HypoFuzz corpus | Keep ignored; use `.hypothesis/crashes/` for portable repros | -| Rely on `.fuzz_atheris_corpus/*/crash_*` | Bug lost when files cleaned up | Create unit test with crash input as literal | -| Hardcode `@settings(max_examples=N)` | Overrides profile, CI takes forever | Omit decorator or use profile-based settings for fuzz-only | -| Forget `pytestmark` in new fuzz file | Tests run in normal suite, slow | Add `pytestmark = pytest.mark.fuzz` at top of file | -| Run `pytest tests/` expecting fuzz tests | Fuzz tests silently skipped | Use `pytest -m fuzz` or `./scripts/fuzz_hypofuzz.sh --deep` | -| Set `HYPOTHESIS_PROFILE` wrong | Unexpected example counts | Valid values: `dev`, `ci`, `verbose`, `hypofuzz`, `stateful_fuzz` | -| Long socket paths in fuzzing | `AF_UNIX path too long` error | Scripts set `TMPDIR=/tmp` automatically | -| Ignore `.hypothesis/crashes/` | Miss portable crash reproductions | Check for auto-generated `repro_crash_*.py` scripts | - ---- - -## See Also - -- [FUZZING_GUIDE.md](FUZZING_GUIDE.md): Overview and comparison of fuzzing approaches -- [FUZZING_GUIDE_HYPOFUZZ.md](FUZZING_GUIDE_HYPOFUZZ.md): HypoFuzz operational guide -- [FUZZING_GUIDE_ATHERIS.md](FUZZING_GUIDE_ATHERIS.md): Atheris operational guide -- [tests/conftest.py](../tests/conftest.py): Profile, marker, and crash recording configuration -- [tests/fuzz/](../tests/fuzz/): Oracle and depth exhaustion fuzz tests +- Purpose: Run, replay, list, and minimize Atheris findings +- Behavior: Manages `.venv-atheris` separately from the main project venvs +- Output: Target-oriented CLI workflow around the `fuzz_atheris/` tree diff --git a/docs/FUZZING_GUIDE.md b/docs/FUZZING_GUIDE.md index 9947b2a2..6b25bbe5 100644 --- a/docs/FUZZING_GUIDE.md +++ b/docs/FUZZING_GUIDE.md @@ -1,225 +1,40 @@ --- -afad: "3.3" -version: "0.153.0" -domain: fuzzing -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: FUZZING +updated: "2026-04-22" route: - keywords: [fuzzing, testing, hypothesis, hypofuzz, atheris, property-based, coverage, crash, security, metrics, workers] - questions: ["how to run fuzzing?", "how to fuzz the parser?", "how to find bugs with fuzzing?", "which fuzzer to use?", "how do workers affect metrics?"] + keywords: [fuzzing, HypoFuzz, Atheris, Hypothesis, fuzz_hypofuzz.sh, fuzz_atheris.sh] + questions: ["which fuzzer should I use?", "how do I start fuzzing?", "how do I reproduce a fuzz failure?"] --- # Fuzzing Guide -**Purpose**: Overview of FTLLexEngine's fuzzing infrastructure. -**Prerequisites**: Basic pytest knowledge. +**Purpose**: Choose the right fuzzing entry point and run it with the repo-supported scripts. +**Prerequisites**: Dev environment synced with `uv`; Python 3.13 available locally for Atheris. -FTLLexEngine uses two complementary fuzzing systems: +## Overview -| System | Script | Best For | -|--------|--------|----------| -| **HypoFuzz** (Hypothesis) | `fuzz_hypofuzz.sh` | Logic errors, property violations, edge cases | -| **Atheris** (libFuzzer) | `fuzz_atheris.sh` | Crashes, security issues, memory safety | +Use: -**Detailed Guides:** -- [FUZZING_GUIDE_HYPOFUZZ.md](FUZZING_GUIDE_HYPOFUZZ.md) - Hypothesis/HypoFuzz property testing -- [FUZZING_GUIDE_ATHERIS.md](FUZZING_GUIDE_ATHERIS.md) - Native fuzzing with Atheris +- `./scripts/fuzz_hypofuzz.sh` for Hypothesis and HypoFuzz property exploration. +- `./scripts/fuzz_atheris.sh` for native Atheris/libFuzzer targets. ---- - -## Quick Start (30 Seconds) +## Fast Start ```bash -# Quick property test check (recommended before committing) ./scripts/fuzz_hypofuzz.sh -``` - -You will see either: -- **[PASS]** - All tests passed -- **[FAIL]** - A bug was found. Follow the "Next steps" shown. - ---- - -## Testing Pyramid - -``` -+---------------------------------------------------------------+ -| FUZZING LAYER | -| +---------------------------+ +---------------------------+ | -| | fuzz_hypofuzz.sh --deep | | fuzz_atheris.sh native | | -| | - Property-based testing | | - Byte-level mutation | | -| | - Coverage-guided | | - Crash detection | | -| | - Logic errors | | - Security issues | | -| +---------------------------+ +---------------------------+ | -+---------------------------------------------------------------+ -| UNIT TEST LAYER | -| +----------------------------------------------------------+ | -| | uv run scripts/test.sh | | -| | - Comprehensive unit tests (95%+ coverage) | | -| +----------------------------------------------------------+ | -+---------------------------------------------------------------+ -``` - -Fuzzing finds issues that traditional unit tests miss by exploring vast input spaces automatically. - ---- - -## Choosing a Fuzzer - -### Use HypoFuzz (Hypothesis) When: - -- Testing **properties** (e.g., "parse then serialize equals original") -- Finding **logic errors** and **edge cases** -- Working with **typed data structures** (strategies generate valid Python objects) -- You want **automatic shrinking** to minimal failing examples -- Running **before every commit** (fast, no special setup) - -```bash -./scripts/fuzz_hypofuzz.sh # Quick check -./scripts/fuzz_hypofuzz.sh --deep # Continuous fuzzing (until Ctrl+C) -./scripts/fuzz_hypofuzz.sh --deep --metrics # Single-pass with metrics -``` - -### Use Atheris (libFuzzer) When: - -- Testing **crash resistance** and **memory safety** -- Looking for **security vulnerabilities** -- Testing **byte-level parsing** robustness -- Doing **security audits** before releases -- You need **raw mutation** that ignores grammar rules - -```bash -./scripts/fuzz_atheris.sh native # Crash detection -./scripts/fuzz_atheris.sh structured # Grammar-aware fuzzing -``` - ---- - -## Command Reference - -### HypoFuzz Commands - -| Command | Description | -|---------|-------------| -| `./scripts/fuzz_hypofuzz.sh` | Quick property tests | -| `./scripts/fuzz_hypofuzz.sh --deep` | Continuous HypoFuzz (until Ctrl+C) | -| `./scripts/fuzz_hypofuzz.sh --deep --metrics` | Single-pass pytest with strategy metrics | -| `./scripts/fuzz_hypofuzz.sh --preflight` | Audit test infrastructure | -| `./scripts/fuzz_hypofuzz.sh --list` | Show reproduction info | -| `./scripts/fuzz_hypofuzz.sh --repro TEST` | Reproduce failing test | -| `./scripts/fuzz_hypofuzz.sh --clean` | Remove .hypothesis/ | - -### Atheris Commands - -| Command | Description | -|---------|-------------| -| `./scripts/fuzz_atheris.sh native` | Stability fuzzing | -| `./scripts/fuzz_atheris.sh structured` | Grammar-aware fuzzing | -| `./scripts/fuzz_atheris.sh --list` | List crashes/findings | -| `./scripts/fuzz_atheris.sh --corpus` | Check seed health | -| `./scripts/fuzz_atheris.sh --replay TARGET` | Replay findings | - ---- - -## Key Differences - -| Aspect | HypoFuzz | Atheris | -|--------|----------|---------| -| Input type | Python objects | Raw bytes | -| Grammar awareness | Yes (via strategies) | No (mutations) | -| Storage | `.hypothesis/examples/` | `.fuzz_atheris_corpus/` | -| Filename format | SHA-384 hashes | `crash_*`, `finding_p{PID}_*` | -| Reproduction | Automatic pytest replay | Manual via repro script | -| Corpus | Implicit (coverage DB) | Explicit (seeds/) | -| Workers | Multiprocessing (metrics need single-worker) | fork() (metrics need `--workers 1`) | -| Best for | Logic bugs | Crashes, security | - ---- - -## Parallelism and Metrics - -Both fuzzing systems use multiprocessing, which fragments in-process -metrics across worker processes. Each system handles this differently: - -| System | Worker Model | Metrics Constraint | -|--------|-------------|-------------------| -| HypoFuzz | Python `multiprocessing` | `--metrics` forces single-process pytest | -| Atheris | libFuzzer `fork()` | `--workers 1` (default) for reliable metrics | - -**Root cause:** Both systems accumulate metrics (iterations, coverage, -performance history) in process-local state. Forked/spawned workers each -get independent copies. There is no cross-process aggregation. - -**Recommendation:** Use single-worker mode for metrics-sensitive runs -(debugging, performance analysis, weight skew detection). Use -multi-worker mode only for throughput-oriented crash detection. - -See [FUZZING_GUIDE_ATHERIS.md](FUZZING_GUIDE_ATHERIS.md) for details on -Atheris worker behavior under `fork()`. - ---- - -## Data Directories - -| Directory | System | Git Tracked | Contents | -|-----------|--------|-------------|----------| -| `.hypothesis/examples/` | HypoFuzz | No | Coverage database | -| `.hypothesis/hypofuzz.log` | HypoFuzz | No | Session log | -| `.fuzz_atheris_corpus/` | Atheris | No | Working corpus, crashes | -| `fuzz_atheris/seeds/` | Atheris | Yes | Seed corpus | - ---- - -## Workflow Summary - -### Daily Development - -```bash -# Before committing -./scripts/fuzz_hypofuzz.sh -``` - -### Deep Testing - -```bash -# Run HypoFuzz for extended period ./scripts/fuzz_hypofuzz.sh --deep --time 300 +./scripts/fuzz_atheris.sh --list ``` -### Security Audit +## Choosing A Surface -```bash -# Run all Atheris modes -./scripts/fuzz_atheris.sh native --time 300 -./scripts/fuzz_atheris.sh structured --time 300 -./scripts/fuzz_atheris.sh perf --time 300 -``` - -### Reproducing Failures - -```bash -# HypoFuzz failures (automatic replay) -./scripts/fuzz_hypofuzz.sh --repro tests/fuzz/test_syntax_parser_property.py::test_roundtrip - -# Atheris crashes (manual) -uv run python scripts/fuzz_atheris_repro.py .fuzz_atheris_corpus/crash_xxx -``` - ---- - -## Scripts Reference - -| Script | Purpose | -|--------|---------| -| `scripts/fuzz_hypofuzz.sh` | HypoFuzz entry point | -| `scripts/fuzz_hypofuzz_repro.py` | Reproduce Hypothesis failures | -| `scripts/fuzz_atheris.sh` | Atheris entry point | -| `scripts/fuzz_atheris_repro.py` | Reproduce Atheris crashes | -| `scripts/fuzz_atheris_corpus_health.py` | Seed corpus health check | - ---- +- Prefer HypoFuzz when you are exploring Python-level invariants and stateful/property-based tests. +- Prefer Atheris when you need native-style mutation, corpus management, or target-specific replay/minimization. -## See Also +## Related Guides -- [FUZZING_GUIDE_HYPOFUZZ.md](FUZZING_GUIDE_HYPOFUZZ.md) - Full HypoFuzz documentation -- [FUZZING_GUIDE_ATHERIS.md](FUZZING_GUIDE_ATHERIS.md) - Full Atheris documentation -- [DOC_06_Testing.md](DOC_06_Testing.md) - Testing overview +- [FUZZING_GUIDE_HYPOFUZZ.md](FUZZING_GUIDE_HYPOFUZZ.md) +- [FUZZING_GUIDE_ATHERIS.md](FUZZING_GUIDE_ATHERIS.md) +- [DOC_06_Testing.md](DOC_06_Testing.md) diff --git a/docs/FUZZING_GUIDE_ATHERIS.md b/docs/FUZZING_GUIDE_ATHERIS.md index 361ae524..559392a5 100644 --- a/docs/FUZZING_GUIDE_ATHERIS.md +++ b/docs/FUZZING_GUIDE_ATHERIS.md @@ -1,514 +1,34 @@ --- -afad: "3.3" -version: "0.155.0" -domain: fuzzing -updated: "2026-03-16" +afad: "3.5" +version: "0.163.0" +domain: FUZZING +updated: "2026-04-22" route: - keywords: [fuzzing, atheris, libfuzzer, native, crash, security, corpus, workers, metrics, subinterpreters, concurrent.interpreters] - questions: ["how to run atheris?", "how to do native fuzzing?", "how to reproduce crashes?", "how to manage corpus?", "how do atheris workers work?", "why are metrics wrong with multiple workers?", "how to fuzz interpreter pool?", "concurrent.interpreters missing?"] + keywords: [atheris, libfuzzer, fuzz_atheris.sh, replay, minimize, corpus] + questions: ["how do I run an Atheris target?", "how do I replay a finding?", "how does the Atheris environment get created?"] --- -# Atheris Guide (Native Fuzzing with libFuzzer) +# Atheris Guide -**Purpose**: Run byte-level mutation fuzzing for crash and security testing. -**Prerequisites**: macOS with LLVM, isolated virtualenv. +**Purpose**: Run and manage the native Atheris/libFuzzer targets in `fuzz_atheris/`. +**Prerequisites**: Python 3.13 available locally. ---- - -## Quick Start - -```bash -# Run native fuzzing on parser -./scripts/fuzz_atheris.sh native - -# List crashes and findings -./scripts/fuzz_atheris.sh --list - -# Check corpus health -./scripts/fuzz_atheris.sh --corpus - -# Reproduce a crash -uv run python scripts/fuzz_atheris_repro.py .fuzz_atheris_corpus/crash_xxx -``` - ---- - -## How Atheris Works - -Atheris is a coverage-guided Python fuzzer built on libFuzzer: - -1. **Mutates** raw bytes using libFuzzer's mutation strategies -2. **Instruments** Python code for coverage feedback -3. **Crashes** are captured as binary files in `.fuzz_atheris_corpus/` -4. **Minimizes** crash inputs automatically - -Key difference from Hypothesis: Atheris works with **raw bytes**, not Python objects. - ---- - -## Prerequisites (macOS) - -Atheris requires LLVM. Install it once: - -```bash -brew install llvm -``` - -No other manual setup is needed. The script bootstraps `.venv-atheris` automatically -on first run. - -### Verification +## Common Commands ```bash ./scripts/fuzz_atheris.sh --help -``` - -Lists all available fuzzing targets. The first run creates `.venv-atheris` if it does -not exist. - ---- - -## Environment Architecture - -`.venv-atheris` is managed **independently of uv's project system**. This is a hard -architectural constraint: - -| Constraint | Detail | -|:-----------|:-------| -| Atheris Python | <= 3.13 (Atheris does not support Python 3.14+) | -| Project baseline | Python 3.13 (`requires-python = ">=3.13"` in `pyproject.toml`) | -| Consequence | Atheris and the project baseline are aligned on 3.13 — no bypass needed | - -**Solution**: the script uses `.venv-atheris` managed independently of uv's project -system. On every run, `ensure_atheris_venv` checks `.venv-atheris`: - -1. If it exists with Python 3.13 — proceed immediately. -2. If it is missing or has the wrong Python — locate Python 3.13 via pyenv (or - `python3.13`), create the venv directly with `python3.13 -m venv`, then install - `atheris`, `psutil`, and `ftllexengine[babel]` via pip. - -**`UV_PROJECT_ENVIRONMENT` must not be set** for `fuzz_atheris.sh`. If it were set to -`.venv-atheris`, uv would silently recreate that venv with Python 3.14 on each run, -making Atheris uninstallable. - -All fuzzer execution, report parsing, corpus listing, and replay go through -`$ATHERIS_PYTHON` (`.venv-atheris/bin/python`) directly — no `uv run` in the atheris -execution path. - ---- - -## Command Reference - -| Command | Description | -|---------|-------------| -| `./scripts/fuzz_atheris.sh native` | Stability fuzzing (crash detection) | -| `./scripts/fuzz_atheris.sh runtime` | Runtime stack fuzzing | -| `./scripts/fuzz_atheris.sh structured` | Grammar-aware FTL fuzzing | -| `./scripts/fuzz_atheris.sh perf` | Performance/ReDoS fuzzing | -| `./scripts/fuzz_atheris.sh iso` | ISO introspection fuzzing | -| `./scripts/fuzz_atheris.sh graph` | Dependency graph algorithm fuzzing | -| `./scripts/fuzz_atheris.sh builtins` | Built-in function rounding oracle fuzzing | -| `./scripts/fuzz_atheris.sh --list` | List crashes and findings | -| `./scripts/fuzz_atheris.sh --corpus` | Check seed corpus health | -| `./scripts/fuzz_atheris.sh --replay TARGET` | Replay findings without Atheris | -| `./scripts/fuzz_atheris.sh --clean TARGET` | Clean corpus for target | -| `./scripts/fuzz_atheris.sh --workers N` | Parallel workers (default: 1; see Workers section) | -| `./scripts/fuzz_atheris.sh --time N` | Time limit in seconds | - ---- - -## Fuzzing Targets - -Targets are dynamically discovered from `fuzz_atheris/fuzz_*.py` files: - -| Target | Mode | Focus | -|--------|------|-------| -| `native` | Stability | Crashes, hangs, memory safety in FTL parser | -| `runtime` | End-to-End | FluentBundle, IntegrityCache, Strict Mode | -| `structured` | Structured | Syntactically plausible FTL for deeper paths | -| `perf` | Performance | Algorithmic complexity, ReDoS vulnerabilities | -| `iso` | Introspection | ISO 3166/4217 lookups, type guards, cache | -| `integrity` | Validation | IntegrityCache hash verification | -| `lock` | Concurrency | RWLock timeout and contention paths | -| `roundtrip` | Convergence | Parser-serializer round-trip consistency | -| `serializer` | AST-construction | Serializer idempotence via programmatic AST | -| `graph` | Algorithms | Dependency graph cycle detection, adversarial topologies | -| `builtins` | Functions | NUMBER/CURRENCY/DATETIME rounding oracles, locale coverage | - ---- - -## Workflow 1: Crash Detection - -```bash -# Run stability fuzzing -./scripts/fuzz_atheris.sh native --time 300 - -# Or until Ctrl+C -./scripts/fuzz_atheris.sh native -``` - -**Interpreting Output:** - -``` -#12345 REDUCE cov: 1234 ft: 567 corp: 89/10Kb exec/s: 456 -``` - -- `#12345` - Iteration count -- `cov:` - Code coverage (edges) -- `ft:` - Feature count -- `corp:` - Corpus size -- `exec/s` - Executions per second - -**Crash Detected:** - -``` -==12345== ERROR: libFuzzer: deadly signal -``` - -Crash file saved to `.fuzz_atheris_corpus/crash_*`. - ---- - -## Workflow 2: Reproducing Crashes - -When a crash is found: - -```bash -# List all crashes +./scripts/fuzz_atheris.sh numbers --time 60 ./scripts/fuzz_atheris.sh --list - -# Reproduce a specific crash -uv run python scripts/fuzz_atheris_repro.py .fuzz_atheris_corpus/crash_abc123 - -# Generate @example decorator -uv run python scripts/fuzz_atheris_repro.py --example .fuzz_atheris_corpus/crash_abc123 -``` - -**Output:** - -``` -[FINDING] Parser crashed with ValueError: ... - -Full traceback: ------------------------------------------------------------- -... ------------------------------------------------------------- - -Next steps: - 1. Add @example decorator to preserve this case: - @example(ftl='...') - 2. Fix the bug in the parser - 3. Re-run fuzzing to verify -``` - ---- - -## Workflow 3: Structured Fuzzing - -For grammar-aware fuzzing that generates syntactically valid FTL: - -```bash -./scripts/fuzz_atheris.sh structured --time 300 -``` - -Structured fuzzing finds issues in deeper parser code paths that random bytes cannot reach. - -**Finding Artifacts:** - -Structured fuzzing saves finding details to `.fuzz_atheris_corpus//findings/`: - -``` -.fuzz_atheris_corpus/structured/findings/ -├── finding_p12345_0001_source.ftl # Original FTL (PID-prefixed) -├── finding_p12345_0001_s1.ftl # Serialized once -├── finding_p12345_0001_s2.ftl # Serialized twice -└── finding_p12345_0001_meta.json # Finding metadata -``` - ---- - -## Corpus Management - -### Seed Corpus - -Seeds are stored in `fuzz_atheris/seeds/` and are **git tracked**: - -``` -fuzz_atheris/seeds/ -├── 00_minimal.ftl # Minimal valid FTL -├── 01_message.ftl # Basic message -├── 10_select.ftl # Select expressions -├── 20_terms.ftl # Terms and references -├── 30_complex.ftl # Complex nested structures -└── iso_baseline.bin # Binary seed for ISO fuzzer -``` - -### Working Corpus - -The working corpus in `.fuzz_atheris_corpus/` is **not git tracked**: - -``` -.fuzz_atheris_corpus/ -├── crash_abc123 # Crash artifacts -├── native/ # Native fuzzer corpus -├── structured/ # Structured fuzzer corpus -│ └── findings/ # Finding artifacts -└── ... -``` - -### Health Check - -```bash -./scripts/fuzz_atheris.sh --corpus -``` - -Reports: -- Total seeds and byte count -- Parse success/failure rate -- Grammar feature coverage -- Duplicate detection - -### Adding Seeds - -1. Create seed file: - ```ftl - # fuzz_atheris/seeds/40_new_feature.ftl - new-feature = { $arg -> - [case1] Value 1 - *[other] Default - } - ``` - -2. Verify: - ```bash - ./scripts/fuzz_atheris.sh --corpus - ``` - -### Binary Seeds - -For ISO fuzzers that expect structured binary input: - -```python -# Example: ISO seed -seed = bytes([ - 5, # locale length - *b"en_US", # locale string - 3, # code length - *b"USD", # currency code - 0b00000011, # flags -]) - -with open("fuzz_atheris/seeds/iso_custom.bin", "wb") as f: - f.write(seed) -``` - -### Removing Duplicates - -```bash -uv run python scripts/fuzz_atheris_corpus_health.py --dedupe -``` - -Shows duplicates. Add `--execute` to remove them. - ---- - -## Adding New Fuzzers - -FTLLexEngine uses a dynamic plugin system. New fuzzers are automatically discovered. - -### Plugin Header Schema - -All `fuzz_atheris/fuzz_*.py` files must include: - -```python -# FUZZ_PLUGIN_HEADER_START -# FUZZ_PLUGIN: - -# Intentional: This header is intentionally placed for dynamic plugin discovery. -# CRITICAL: DO NOT REMOVE THIS HEADER - REQUIRED FOR FUZZ_ATHERIS.SH -# FUZZ_PLUGIN_HEADER_END -``` - -### Creating a New Fuzzer - -1. Create `fuzz_atheris/fuzz_myfuzzer.py` with the header -2. Implement the fuzzer target function -3. Run `./scripts/fuzz_atheris.sh --help` to verify discovery -4. Execute with `./scripts/fuzz_atheris.sh myfuzzer` - ---- - -## Troubleshooting - -### ImportError: symbol not found (LLVM mismatch) - -Atheris was compiled against a different LLVM than the one on PATH. The script -auto-heals this on macOS by reinstalling from source with the Homebrew LLVM. To -trigger manually: - -```bash -./scripts/fuzz_atheris.sh --setup -``` - -If the auto-heal fails, install LLVM and reset the venv: - -```bash -brew install llvm -rm -rf .venv-atheris -./scripts/fuzz_atheris.sh --setup -``` - -### `.venv-atheris` has the wrong Python (e.g. rebuilt with 3.14) - -The script detects this automatically and rebuilds the venv. To force a rebuild: - -```bash -rm -rf .venv-atheris -./scripts/fuzz_atheris.sh --setup +./scripts/fuzz_atheris.sh --replay runtime path/to/finding ``` -The setup step creates `.venv-atheris` with Python 3.13, installs `atheris` and -`psutil`, and installs `ftllexengine[babel]` in editable mode. +## Environment -### WARNING: Failed to find function "__sanitizer_..." - -Harmless. This occurs because Python isn't compiled with AddressSanitizer. Coverage collection still works. - -### Slow Execution - -Check corpus size: - -```bash -ls -la .fuzz_atheris_corpus// | wc -l -``` - -Large corpus (100k+) slows startup. Clean periodically: - -```bash -./scripts/fuzz_atheris.sh --clean native -``` - -### Timeout/Hang Detection - -For performance fuzzing: - -```bash -./scripts/fuzz_atheris.sh perf --time 600 -``` - -Perf fuzzing detects ReDoS and algorithmic complexity issues. - ---- - -## Workers and Metrics - -### Single-Worker Mode (Default) - -The default `--workers 1` runs Atheris in a single process. All metrics -(iterations, findings, pattern coverage, performance history, memory -tracking, weight skew detection) are collected in-process and written to -the JSON report file at exit. This mode provides reliable, complete metrics. - -```bash -# Reliable metrics (default) -./scripts/fuzz_atheris.sh roundtrip --time 300 -``` - -### Multi-Worker Mode - -`--workers N` (N > 1) uses libFuzzer's `fork()`-based parallelism. Each -worker is a forked child process with its own copy of all state: - -| Concern | Behavior Under fork() | -|---------|----------------------| -| `BaseFuzzerState` | Independent copy per worker; never aggregated | -| JSON report file | All workers write to the same path; last writer wins | -| Finding artifacts | PID-prefixed filenames prevent collisions | -| `atexit` handlers | Fire in each worker independently | -| Performance history | Per-worker only | -| Pattern coverage | Per-worker shard, not global distribution | - -**When to use multi-worker mode:** - -- Maximum throughput for crash detection (findings are raw crash files, - not dependent on metrics) -- You do not need accurate aggregate metrics -- Corpus evolution (libFuzzer shares corpus via filesystem, not memory) - -```bash -# Throughput-oriented crash detection (metrics unreliable) -./scripts/fuzz_atheris.sh native --workers 4 --time 600 -``` - -**Metrics limitation:** This is the same class of problem that -HypoFuzz encounters with multiprocessing. HypoFuzz solves it by -falling back to single-process pytest when `--metrics` is enabled. -For Atheris, the solution is simpler: use `--workers 1` (the default) -when you need reliable metrics, and `--workers N` only for throughput. - -### Signal Handling - -In single-worker mode, the script disables libFuzzer's SIGINT handler -(`-handle_int=0`) so Python owns Ctrl+C and can run `atexit` handlers -cleanly. In multi-worker mode, libFuzzer's SIGINT handler is preserved -because the parent process needs it to propagate shutdown to children. - ---- - -## Architecture - -### Directory Structure - -``` -fuzz_atheris/ -├── seeds/ # Seed corpus (git tracked) -│ ├── bridge/, builtins/, cache/, ... # Per-target seed dirs -│ ├── *.ftl # FTL text seeds (top-level legacy) -│ └── *.bin # Binary seeds (top-level legacy) -├── fuzz_native.py # Stability fuzzer -├── fuzz_runtime.py # Runtime fuzzer -├── fuzz_structured.py # Grammar-aware fuzzer -├── fuzz_serializer.py # AST-construction serializer fuzzer -├── fuzz_scope.py # Variable scoping / expansion budget -├── fuzz_bridge.py # Function bridge machinery -├── fuzz_builtins.py # NUMBER/DATETIME/CURRENCY builtins -├── fuzz_cache.py # Cache concurrency and integrity -├── fuzz_currency.py # Currency symbol extraction -├── fuzz_dates.py # Date/datetime locale-aware parsing -├── fuzz_diagnostics_formatter.py # DiagnosticFormatter output/escaping -├── fuzz_graph.py # Dependency graph -├── fuzz_integrity.py # Semantic validation + strict mode -├── fuzz_introspection.py # IntrospectionVisitor + ReferenceExtractor -├── fuzz_iso.py # ISO 3166/4217 introspection -├── fuzz_locale_context.py # LocaleContext direct formatting API -├── fuzz_localization.py # FluentLocalization multi-locale orchestration -├── fuzz_lock.py # RWLock concurrency primitives -├── fuzz_numbers.py # Locale-aware numeric parsing -├── fuzz_oom.py # Parser object explosion (DoS) -├── fuzz_perf.py # Performance fuzzer -├── fuzz_plural.py # CLDR plural category selection -├── fuzz_roundtrip.py # Parser-serializer convergence -├── fuzz_atheris_replay_finding.py # Finding replay utility -└── mypy.ini # Type checking config - -.fuzz_atheris_corpus/ # Working corpus (gitignored) -├── crash_* # Crash artifacts -└── / # Per-target corpus - └── findings/ # Finding artifacts -``` - -### libFuzzer Integration - -Atheris wraps libFuzzer, providing: - -- **Corpus management**: Automatic minimization and evolution -- **Coverage tracking**: Inline 8-bit counters -- **Crash isolation**: Precise reproduction via crash files -- **Parallel fuzzing**: fork()-based workers (metrics per-worker only; see Workers section) - ---- +The script manages `.venv-atheris` itself and keeps it separate from the normal project venvs. If the Atheris environment is missing or built with the wrong Python version, the script recreates it automatically. -## See Also +## Useful Operations -- [FUZZING_GUIDE.md](FUZZING_GUIDE.md) - Overview and comparison -- [FUZZING_GUIDE_HYPOFUZZ.md](FUZZING_GUIDE_HYPOFUZZ.md) - Hypothesis property testing -- [DOC_06_Testing.md](DOC_06_Testing.md) - Full testing documentation +- `--list` to inspect captured findings. +- `--replay` to replay stored findings without starting a fresh fuzz run. +- `--minimize TARGET FILE` to shrink a failing input for one target. +- `--corpus` to run the corpus health check. diff --git a/docs/FUZZING_GUIDE_HYPOFUZZ.md b/docs/FUZZING_GUIDE_HYPOFUZZ.md index cd6c7056..ab4bf46d 100644 --- a/docs/FUZZING_GUIDE_HYPOFUZZ.md +++ b/docs/FUZZING_GUIDE_HYPOFUZZ.md @@ -1,687 +1,35 @@ --- -afad: "3.3" -version: "0.153.0" -domain: fuzzing -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: FUZZING +updated: "2026-04-22" route: - keywords: [fuzzing, hypothesis, hypofuzz, property-based, testing, coverage, metrics, workers] - questions: ["how to run hypothesis tests?", "how to use hypofuzz?", "how to reproduce hypothesis failures?", "how to see strategy metrics?", "why does --metrics use pytest instead of hypofuzz?"] + keywords: [hypofuzz, hypothesis, fuzz_hypofuzz.sh, deep mode, preflight, repro] + questions: ["how do I run HypoFuzz?", "what does --deep do?", "how do I reproduce a Hypothesis failure?"] --- -# HypoFuzz Guide (Hypothesis Property-Based Testing) +# HypoFuzz Guide -**Purpose**: Run and understand Hypothesis/HypoFuzz property-based testing. -**Prerequisites**: Basic pytest knowledge. +**Purpose**: Run the property-testing and HypoFuzz entry points shipped by the repository. +**Prerequisites**: `uv sync --group dev --group fuzz`. ---- - -## Quick Start - -```bash -# Quick property test check -./scripts/fuzz_hypofuzz.sh - -# Continuous deep fuzzing -./scripts/fuzz_hypofuzz.sh --deep - -# Reproduce a specific failing test -./scripts/fuzz_hypofuzz.sh --repro tests/fuzz/test_syntax_parser_property.py::test_roundtrip -``` - ---- - -## How Hypothesis Works - -Hypothesis is a property-based testing framework that: - -1. **Generates** inputs based on type strategies -2. **Tests** properties you define (e.g., "parsing then serializing round-trips") -3. **Shrinks** failing inputs to minimal reproducible examples -4. **Stores** examples in `.hypothesis/examples/` for regression testing - -Key difference from Atheris: Hypothesis generates **Python objects** via strategies, not raw bytes. - ---- - -## Command Reference - -| Command | Description | -|---------|-------------| -| `./scripts/fuzz_hypofuzz.sh` | Quick property tests (default mode) | -| `./scripts/fuzz_hypofuzz.sh --deep` | Continuous HypoFuzz fuzzing (until Ctrl+C) | -| `./scripts/fuzz_hypofuzz.sh --deep --metrics` | Single-pass pytest with strategy metrics | -| `./scripts/fuzz_hypofuzz.sh --preflight` | Audit test infrastructure (events, strategies) | -| `./scripts/fuzz_hypofuzz.sh --list` | Show reproduction info and failures | -| `./scripts/fuzz_hypofuzz.sh --repro TEST` | Reproduce failing test with verbose output | -| `./scripts/fuzz_hypofuzz.sh --clean` | Remove .hypothesis/ database | -| `./scripts/fuzz_hypofuzz.sh --verbose` | Show detailed progress | -| `./scripts/fuzz_hypofuzz.sh --metrics` | Enable periodic per-strategy metrics | -| `./scripts/fuzz_hypofuzz.sh --workers N` | Parallel workers (default: 4; see Workers section) | -| `./scripts/fuzz_hypofuzz.sh --time N` | Time limit in seconds (--deep mode) | - ---- - -## Workflow 1: Quick Check (Recommended) - -Run before committing: - -```bash -./scripts/fuzz_hypofuzz.sh -``` - -**Interpreting Results:** - -- `[PASS]` - All property tests passed -- `[FAIL]` - Failures detected with falsifying examples shown -- `[STOPPED]` - Run interrupted by user (Ctrl+C) - ---- - -## Workflow 2: Deep Fuzzing - -For thorough exploration: - -```bash -# Run for 5 minutes -./scripts/fuzz_hypofuzz.sh --deep --time 300 - -# Run until Ctrl+C -./scripts/fuzz_hypofuzz.sh --deep -``` - -HypoFuzz uses coverage-guided fuzzing to explore new code paths. It runs all Hypothesis tests continuously, learning which inputs increase coverage. - -### Deep Mode with Metrics - -Adding `--metrics` changes the behavior: - -```bash -# Single-pass with strategy metrics (NOT continuous) -./scripts/fuzz_hypofuzz.sh --deep --metrics -``` - -**Trade-off**: `--metrics` uses pytest instead of HypoFuzz because HypoFuzz's multiprocessing prevents metrics collection across workers. This runs all fuzz tests once with 10,000 examples per test (hypofuzz profile) and emits live metrics every 10 seconds. - -For continuous fuzzing, use `--deep` without `--metrics`. - -**Session Log:** - -HypoFuzz output is logged to `.hypothesis/hypofuzz.log`. View failures: - -```bash -./scripts/fuzz_hypofuzz.sh --list -``` - ---- - -## Workflow 3: Reproducing Failures - -When Hypothesis finds a failing example: - -1. It prints the "Falsifying example" to the terminal -2. It stores the shrunk example in `.hypothesis/examples/` -3. On re-run, it **automatically replays** the failure - -**To reproduce with verbose output:** - -```bash -./scripts/fuzz_hypofuzz.sh --repro tests/fuzz/test_syntax_parser_property.py::test_roundtrip -``` - -**To extract @example decorator:** - -```bash -uv run python scripts/fuzz_hypofuzz_repro.py --example tests/fuzz/test_syntax_parser_property.py::test_roundtrip -``` - -This parses the failure output and generates a copy-paste ready `@example` decorator. - -**JSON output for automation:** - -```bash -uv run python scripts/fuzz_hypofuzz_repro.py --json tests/fuzz/test_syntax_parser_property.py::test_roundtrip -``` - -Output format: - -```json -{ - "test_path": "tests/fuzz/test_syntax_parser_property.py::test_roundtrip", - "status": "fail", - "exit_code": 1, - "timestamp": "2026-02-04T10:30:00+00:00", - "error_type": "AssertionError", - "traceback": "E AssertionError: ...", - "example": {"ftl": "msg = { $x"}, - "example_decorator": "@example(ftl='msg = { $x')", - "hypothesis_seed": 12345 -} -``` - ---- - -## Crash Recording - -When a Hypothesis test fails, the `conftest.py` hook automatically: - -1. Extracts the falsifying example from the failure -2. Generates a standalone `repro_crash__.py` script -3. Saves it to `.hypothesis/crashes/` with a companion JSON file - -**Benefits:** -- Crashes are never lost (even if `.hypothesis/examples/` is cleared) -- Each crash has a portable, standalone reproduction script -- Crash files can be shared between developers - -**Run a crash reproduction:** - -```bash -uv run python .hypothesis/crashes/repro_crash_20260204_103000_a1b2c3d4.py -``` - ---- - -## Database Structure - -Hypothesis stores data in `.hypothesis/`: - -``` -.hypothesis/ -├── examples/ # Coverage database (SHA-384 hashed filenames) -│ ├── a1b2c3d4... # Stored example (pickled Python objects) -│ └── ... -├── crashes/ # Portable crash reproduction files -│ ├── repro_crash_20260204_103000_a1b2c3d4.py # Standalone repro script -│ ├── crash_20260204_103000_a1b2c3d4.json # Machine-readable details -│ └── ... -└── hypofuzz.log # Session log from --deep runs -``` - -**Key Points:** - -- Examples are **pickled Python objects**, not text files -- Filenames are SHA-384 hashes of the test function signature -- Hypothesis automatically replays stored examples on test re-runs -- The `crashes/` directory contains portable reproduction scripts (auto-generated on failure) -- There is NO `.hypothesis/failures/` directory (this is a common misconception) - ---- - -## Promoting Failures to @example - -When a bug is found and fixed, promote the failing example to a permanent regression test: - -```python -from hypothesis import given, example -from tests.strategies.ftl import valid_ftl - -@example(ftl="edge-case = { $var }") # Promoted from Hypothesis failure -@given(ftl=valid_ftl()) -def test_roundtrip(ftl: str) -> None: - """Parse-serialize-parse produces identical AST.""" - ... -``` - -This ensures the edge case is tested deterministically in every run. - ---- - -## Oracle Testing (Differential Fuzzing) - -The `tests/fuzz/` directory contains oracle-based fuzzers that compare `FluentBundle` against a reference implementation: - -``` -tests/fuzz/ -├── __init__.py -├── shadow_bundle.py # Reference implementation (unoptimized, simple) -├── test_runtime_bundle_oracle.py # State machine oracle fuzzer -├── test_core_depth_guard_exhaustion.py # MAX_DEPTH boundary testing -└── ... # Additional fuzz modules (grammar, serializer, etc.) -``` - -**ShadowBundle** is a deliberately simple implementation for differential testing: -- No caching (computes everything fresh) -- No optimizations (simple recursive traversal) -- Explicit error handling (no silent failures) - -**Run oracle tests:** - -```bash -# Run all oracle fuzz tests -uv run pytest tests/fuzz/ -v -m fuzz - -# Run state machine fuzzer -uv run pytest tests/fuzz/test_runtime_bundle_oracle.py -v -m fuzz -``` - -The state machine fuzzer generates random sequences of operations and verifies both implementations produce consistent results. - ---- - -## Depth Exhaustion Testing - -`test_core_depth_guard_exhaustion.py` tests behavior at the `MAX_DEPTH` boundary (100 in `constants.py`): - -- **99-deep nesting**: Should succeed normally -- **100-deep nesting**: Should hit limit gracefully -- **101-deep nesting**: Should fail cleanly (no crash) - -```bash -uv run pytest tests/fuzz/test_core_depth_guard_exhaustion.py -v -m fuzz -``` - -This ensures the resolver handles pathological inputs without stack overflow or infinite recursion. - ---- - -## Test Markers - -FTLLexEngine uses pytest markers to categorize tests: - -| Marker | Purpose | When Run | -|--------|---------|----------| -| `@pytest.mark.hypothesis` | Standard Hypothesis tests | CI and fuzzing | -| `@pytest.mark.fuzz` | Intensive fuzz tests | --deep mode only | - -Tests marked with `@pytest.mark.fuzz` are skipped in normal runs: - -```python -pytestmark = pytest.mark.fuzz # Module-level marker - -@given(ftl=valid_ftl()) -@settings(max_examples=10000) -def test_intensive_fuzzing(ftl: str) -> None: - ... -``` - ---- - -## Troubleshooting - -### "AF_UNIX path too long" Error - -macOS limits Unix socket paths. The script sets `TMPDIR=/tmp` automatically. If running HypoFuzz directly: - -```bash -TMPDIR=/tmp uv run hypothesis fuzz tests/ -``` - -### Failures Not Reproducing - -Hypothesis stores failures in `.hypothesis/examples/`. If a test passes when you expect failure: - -1. The bug may have been fixed -2. The example database may be stale - -Try clearing and re-running: +## Common Commands ```bash -./scripts/fuzz_hypofuzz.sh --clean ./scripts/fuzz_hypofuzz.sh -``` - -### Finding the Falsifying Example - -The failing example is printed to stdout. Look for: - -``` -Falsifying example: test_roundtrip( - ftl='problematic input here', -) -``` - -Use `--repro` with `--verbose` for full output. - ---- - -## Workers and Metrics - -### Multi-Worker Mode (Default for --deep) - -HypoFuzz uses Python `multiprocessing` to run N worker processes in -parallel (default: `--workers 4`). Each worker is a separate Python -process with its own memory space. This provides high throughput for -continuous coverage-guided fuzzing. - -However, the strategy metrics collector (`tests/strategy_metrics.py`) -runs in-process and cannot aggregate events across worker boundaries. -Each worker accumulates its own event counts independently, and there -is no cross-process shared state. - -### --metrics Forces Single-Process Mode - -When `--metrics` is enabled, the script bypasses HypoFuzz entirely -and runs `pytest -m fuzz` in a single process. This ensures all -`hypothesis.event()` calls are captured by the same metrics collector: - -```bash -# Continuous fuzzing (multi-worker, no detailed metrics) -./scripts/fuzz_hypofuzz.sh --deep - -# Single-pass with reliable metrics (single-process pytest) -./scripts/fuzz_hypofuzz.sh --deep --metrics -``` - -**Trade-off**: `--metrics` mode runs a finite pass (10,000 examples -per test via the `hypofuzz` profile) instead of continuous fuzzing. -Use `--deep` for throughput and `--deep --metrics` for diagnostics. - -### Comparison with Atheris - -Both fuzzing systems face the same fundamental constraint: metrics -collected in process-local state cannot be shared across forked or -spawned workers. Each system handles it differently: - -| Aspect | HypoFuzz | Atheris | -|--------|----------|---------| -| Worker model | Python `multiprocessing` | libFuzzer `fork()` | -| Default workers | 4 (throughput-oriented) | 1 (metrics-reliable) | -| Metrics mode | `--metrics` forces single-process pytest | `--workers 1` (default) | -| Multi-worker metrics | Not collected (bypassed) | Per-worker only, last writer wins | - -See [FUZZING_GUIDE.md](FUZZING_GUIDE.md) for the cross-system overview. - ---- - -## Strategy Reference - -Custom strategies in `tests/strategies/ftl.py` generate valid FTL constructs: - -| Strategy | Description | -|----------|-------------| -| `ftl_identifiers()` | Valid FTL identifiers (`[a-zA-Z][a-zA-Z0-9_-]*`) | -| `ftl_simple_messages()` | Simple message definitions (`id = value`) | -| `ftl_simple_text()` | Text without FTL special characters | -| `ftl_terms()` | Term definitions (`-id = value`) | -| `ftl_placeables()` | Placeable expressions (variables, literals, nested) | -| `ftl_function_references()` | Function calls (`{ NUMBER($x) }`) | -| `ftl_message_references()` | Message references (`{ other-msg }`) | -| `ftl_term_references()` | Term references (`{ -brand }`) | -| `ftl_select_expressions()` | Select expressions with variants | -| `resolver_mixed_args()` | Mixed argument dictionaries for formatting | - -**Chaos mode strategies** (for parser stress testing): - -| Strategy | Description | -|----------|-------------| -| `ftl_chaos_text()` | Text including FTL structural characters | -| `ftl_boundary_depth_placeables()` | Placeables at MAX_DEPTH boundary | -| `ftl_circular_references()` | A -> B -> A reference patterns | -| `ftl_invalid_ftl()` | Structurally invalid FTL for error handling | -| `ftl_semantically_broken()` | Parses successfully but fails at runtime | - -**Usage:** - -```python -from hypothesis import given -from tests.strategies.ftl import ftl_simple_messages, resolver_mixed_args - -@given(source=ftl_simple_messages(), args=resolver_mixed_args()) -def test_bundle_format(source: str, args: dict) -> None: - bundle = FluentBundle("en_US") - bundle.add_resource(source) - # ... assertions -``` - ---- - -## Semantic Coverage with Events - -HypoFuzz uses code coverage to guide mutation. But code coverage cannot see *semantic* differences - two inputs that execute the same lines but test different logical cases appear identical to the fuzzer. - -`hypothesis.event()` creates "virtual branches" that guide HypoFuzz toward semantically interesting inputs even when code paths are identical. - -### Why Events Matter - -Consider a currency formatting test: - -```python -# Without events - fuzzer sees same coverage for JPY and USD -@given(currency=currency_codes) -def test_format_currency(currency: str) -> None: - result = format_currency(1000, currency) - assert isinstance(result, str) -``` - -```python -# With events - fuzzer actively seeks 0, 2, and 3 decimal currencies -from hypothesis import event - -@given(currency=currency_by_decimals()) # Strategy emits events -def test_format_currency(currency: str) -> None: - result = format_currency(1000, currency) - assert isinstance(result, str) -``` - -The `currency_by_decimals()` strategy emits `currency_decimals=0`, `currency_decimals=2`, or `currency_decimals=3` events, telling HypoFuzz these are distinct semantic cases to explore. - -### Event Taxonomy - -Use consistent event naming across the codebase: - -| Category | Format | Examples | -|:---------|:-------|:---------| -| Strategy choice | `strategy={variant}` | `strategy=placeable_variable`, `strategy=chaos_prefix_brace` | -| Domain classification | `{domain}={variant}` | `currency_decimals=2`, `territory_region=europe` | -| Boundary/depth | `boundary={name}`, `depth={n}` | `boundary=at_max_depth`, `depth=99` | -| Unicode category | `unicode={category}` | `unicode=emoji`, `unicode=cjk` | -| Property outcome | `outcome={result}` | `outcome=roundtrip_success`, `outcome=immutability_enforced` | -| Test parameter | `{param}={value}` | `thread_count=20`, `cache_size=50`, `reentry_depth=3` | -| State machine | `rule={name}`, `invariant={name}` | `rule=add_simple_message`, `invariant=cache_stats_consistent` | - -**Strategy events vs test events:** - -* **Strategy events** are emitted by strategy functions in `tests/strategies/`. They are tracked by `EXPECTED_EVENTS` in `tests/strategy_metrics.py` and drive strategy-level coverage metrics. -* **Test events** are emitted by individual `@given` test functions and `@rule`/`@invariant` methods. They guide HypoFuzz per-test but are NOT tracked by `EXPECTED_EVENTS`. - -### Writing Event-Aware Tests - -**Option 1: Use event-emitting strategies** - -Pre-built strategies in `tests/strategies/` emit events automatically: - -```python -from tests.strategies.ftl import ftl_placeables # Emits strategy=placeable_* -from tests.strategies.iso import currency_by_decimals # Emits currency_decimals=* - -@given(source=ftl_placeables()) -def test_placeables(source: str) -> None: - ... -``` - -**Option 2: Emit events in tests** - -For test-specific semantic categories: - -```python -from hypothesis import given, event - -@given(ftl=valid_ftl()) -def test_parser_coverage(ftl: str) -> None: - result = parse(ftl) - - # Emit events based on parse result characteristics - if result.errors: - event("parse_result=has_errors") - else: - event("parse_result=clean") - - for entry in result.body: - event(f"entry_type={type(entry).__name__}") -``` - -**Option 3: Composite strategies with events** - -Create domain-specific strategies: - -```python -from hypothesis import event -from hypothesis.strategies import composite - -@composite -def ftl_by_complexity(draw): - complexity = draw(st.sampled_from(["minimal", "moderate", "complex"])) - - match complexity: - case "minimal": - source = draw(ftl_simple_messages()) - case "moderate": - source = draw(ftl_with_placeables()) - case "complex": - source = draw(ftl_with_selects()) - - event(f"ftl_complexity={complexity}") - return source -``` - -### Checking Event Diversity - -After a `--deep` fuzzing session, the script reports event diversity: - -```bash ./scripts/fuzz_hypofuzz.sh --deep --time 300 - -# Output includes: -# [EVENT DIVERSITY] -# Top 15 events observed: -# 1247 expr_type=Message -# 892 expr_type=Term -# 456 strategy=placeable_variable -# ... -``` - -**Good diversity**: Events are distributed across categories, indicating the fuzzer explored varied semantic paths. - -**Poor diversity**: One event dominates (e.g., 95% `expr_type=Message`), indicating the fuzzer is stuck in a narrow region. - -**Fix poor diversity**: Add more event-emitting strategies or adjust strategy weights to guide exploration. - -### Event-Enabled Strategies Reference - -| Module | Strategy | Events Emitted | -|:-------|:---------|:---------------| -| `ftl.py` | `ftl_placeables()` | `strategy=placeable_{variable,literal,nested,...}` | -| `ftl.py` | `ftl_chaos_source()` | `strategy=chaos_{prefix_brace,unbalanced,...}` | -| `ftl.py` | `ftl_pathological_nesting()` | `boundary={under,at,over}_max_depth`, `depth={N}` | -| `ftl.py` | `ftl_circular_references()` | `strategy=circular_{self_ref,two_way,...}` | -| `ftl.py` | `ftl_invalid_ftl()` | `strategy=invalid_{unclosed,missing_id,...}` | -| `ftl.py` | `ftl_unicode_stress_text()` | `unicode={bidi,combining,emoji,surrogate,...}` | -| `iso.py` | `currency_by_decimals()` | `currency_decimals={0,2,3}` | -| `iso.py` | `territory_by_region()` | `territory_region={g7,brics,baltic,...}` | -| `iso.py` | `locale_by_script()` | `locale_script={latin,cjk,cyrillic,arabic,other}` | - ---- - -## Strategy Metrics - -The metrics system tracks per-strategy behavior during `--deep` runs, similar to Atheris fuzzer target metrics. - -### Enabling Metrics - -```bash -# Continuous HypoFuzz (no detailed metrics, multiprocessing) -./scripts/fuzz_hypofuzz.sh --deep - -# Single-pass pytest with live metrics every 10 seconds -./scripts/fuzz_hypofuzz.sh --deep --metrics +./scripts/fuzz_hypofuzz.sh --preflight +./scripts/fuzz_hypofuzz.sh --repro tests/fuzz/test_runtime_bundle_state_machine.py::test_state_machine ``` -**Note**: `--metrics` mode uses pytest instead of HypoFuzz because HypoFuzz's multiprocessing prevents metrics collection across workers. The trade-off is single-pass execution (10,000 examples) instead of continuous fuzzing. - -### What Metrics Track - -**Universal metrics:** -- Total event counts across all strategies -- Weight skew detection (intended vs actual distribution) -- Coverage gaps (expected events not observed) -- Performance percentiles (p95, p99, max) - -**Per-strategy metrics (with `--metrics`):** - -| Metric | Description | -|--------|-------------| -| `invocations` | Total event count for this strategy | -| `wall_time_ms` | Total time spent in this strategy | -| `mean_cost_ms` | Average time per invocation | -| `weight_pct` | Percentage of total invocations | - -### Live Output Example - -With `--metrics`, every 10 seconds you see: - -``` -[METRICS] 120s | 45,678 events | 380/s | +11,234 since last -[METRICS] Top: strategy=placeable_variable=1234, currency_decimals=2=890, ... - -[METRICS] Per-Strategy Breakdown: -Strategy Invocations Wall Time Mean Cost Weight ------------------------------------------------------------------------------- -ftl_placeables 1,234 456.7ms 0.370ms 15.2% -currency_by_decimals 890 123.4ms 0.139ms 10.9% -... ------------------------------------------------------------------------------- -``` - -### Output Files - -After each session, metrics are saved to: - -| File | Contents | -|------|----------| -| `.hypothesis/strategy_metrics.json` | Full metrics report (JSON) | -| `.hypothesis/strategy_metrics_summary.txt` | Human-readable summary (if issues detected) | - -### Environment Variables - -| Variable | Default | Description | -|----------|---------|-------------| -| `STRATEGY_METRICS` | `0` | Enable metrics collection (`1` to enable) | -| `STRATEGY_METRICS_LIVE` | `0` | Enable live console output (`1` to enable) | -| `STRATEGY_METRICS_DETAILED` | `0` | Show per-strategy table (`1` to enable) | -| `STRATEGY_METRICS_INTERVAL` | `10` | Reporting interval in seconds (with --metrics) | - -### Weight Skew Detection +## Modes -The system detects when actual strategy distribution deviates from intended weights by more than 15%. This indicates: - -- Strategy filtering issues -- Biased random generation -- Dead code paths - -Example skew warning: - -``` -[WARN] Weight skew detected: - - strategy=placeable_variable (intended=40.00%, actual=72.00%, deviation=32.00%) -``` - -### Integration with Events - -Strategy metrics work by intercepting `hypothesis.event()` calls. Event-emitting strategies (see Event-Enabled Strategies Reference above) automatically contribute to metrics collection without modification. - ---- - -## Architecture - -### How HypoFuzz Works - -1. **Discovery**: Finds all `@given` decorated test functions -2. **Execution**: Runs tests with coverage instrumentation -3. **Learning**: Identifies which inputs increase code coverage -4. **Mutation**: Generates new inputs based on coverage feedback -5. **Shrinking**: When a failure is found, shrinks to minimal example - -### Database Management - -- `.hypothesis/examples/` grows as coverage increases -- Large databases (100k+ entries) are normal for HypoFuzz runs -- The database is gitignored (see `.gitignore`) -- Promote important failures to `@example` decorators for permanent regression tests - ---- +- Default mode runs the standard Hypothesis-backed checks. +- `--deep` runs the intensive fuzz surface. +- `--preflight` audits event instrumentation and strategy coverage. +- `--repro` replays a known failing target. -## See Also +## Notes -- [FUZZING_GUIDE.md](FUZZING_GUIDE.md) - Overview and comparison -- [FUZZING_GUIDE_ATHERIS.md](FUZZING_GUIDE_ATHERIS.md) - Native fuzzing with Atheris -- [DOC_06_Testing.md](DOC_06_Testing.md) - Full testing documentation +- The script pivots into `.venv-3.13` by default. +- `--metrics` is intended for metric-focused runs rather than indefinite continuous fuzzing. diff --git a/docs/LOCALE_GUIDE.md b/docs/LOCALE_GUIDE.md index 26af277d..3741e2ef 100644 --- a/docs/LOCALE_GUIDE.md +++ b/docs/LOCALE_GUIDE.md @@ -1,317 +1,54 @@ --- -afad: "3.3" -version: "0.153.0" -domain: locale -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: LOCALE +updated: "2026-04-22" route: - keywords: [locale, NUMBER, DATETIME, CURRENCY, formatting, BCP-47, locale normalization, str vs NUMBER] - questions: ["why isn't my number formatted?", "how does locale formatting work?", "NUMBER vs raw variable?", "how to format numbers with locale?", "how to format currency?"] + keywords: [locale, NUMBER, DATETIME, CURRENCY, normalize_locale, get_system_locale, use_isolating] + questions: ["why did my number not format?", "what locale string should I use?", "what does use_isolating do?"] --- -# Locale Formatting Guide +# Locale Guide -**Purpose**: Understand Fluent's locale-aware formatting behavior and common misconceptions. -**Prerequisites**: Basic FluentBundle usage. +**Purpose**: Explain how locale normalization and locale-aware formatting work in FTLLexEngine. +**Prerequisites**: Basic Fluent syntax. ## Overview -Fluent uses **explicit formatting functions** for locale-aware output. Raw variable interpolation produces unformatted strings. This is **by design** per the Fluent specification. - -**Key Insight**: If your numbers don't have grouping separators, you need `NUMBER()`. This is not a bug. - ---- - -## Raw Interpolation vs. Formatted Output - -| Pattern | Input | Output (de_DE) | Reason | -|:--------|:------|:---------------|:-------| -| `{ $count }` | `1000` | `1000` | Raw interpolation via `str()` | -| `{ NUMBER($count) }` | `1000` | `1.000` | Locale-aware via `NUMBER()` | -| `{ $date }` | `datetime(...)` | `2026-01-12 14:30:00` | Raw `str()` representation | -| `{ DATETIME($date) }` | `datetime(...)` | `12.01.2026, 14:30` | Locale-aware via `DATETIME()` | - ---- - -## Why This Design? - -The Fluent specification intentionally separates: - -1. **Raw interpolation** (`{ $var }`): Developer controls formatting -2. **Locale-aware formatting** (`{ NUMBER($var) }`): Locale determines format - -**Rationale**: -- Not all numbers need locale formatting (IDs, codes, versions) -- Explicit is better than implicit (Python Zen) -- Developers choose when localization applies -- Consistent behavior across implementations - -**Reference**: [Project Fluent Guide - Variables](https://projectfluent.org/fluent/guide/variables.html) - -**Note**: Examples use `use_isolating=False` for readable output. Default bundles wrap interpolated values in Unicode bidi isolation marks (U+2068/U+2069), which are invisible but present in the string. Never disable bidi isolation in production applications that support RTL languages. - ---- - -## NUMBER() Function - -Formats numeric values with locale-appropriate separators and decimal points. +Raw Fluent variable interpolation does not perform locale formatting. Locale-aware rendering only happens when the message explicitly calls `NUMBER()`, `DATETIME()`, or `CURRENCY()`. ```python +from decimal import Decimal from ftllexengine import FluentBundle bundle = FluentBundle("de_DE", use_isolating=False) bundle.add_resource(""" -raw-count = Count: { $count } -formatted-count = Count: { NUMBER($count) } -""") - -# Raw interpolation -result, _ = bundle.format_pattern("raw-count", {"count": 1234567}) -# → "Count: 1234567" - -# Locale-aware formatting -result, _ = bundle.format_pattern("formatted-count", {"count": 1234567}) -# → "Count: 1.234.567" -``` - -**NUMBER() Options**: - -```python -bundle.add_resource(""" -decimal = { NUMBER($value, minimumFractionDigits: 2) } -no-grouping = { NUMBER($value, useGrouping: 0) } -custom = { NUMBER($value, minimumFractionDigits: 2, maximumFractionDigits: 4) } +raw = { $amount } +fmt = { CURRENCY($amount, currency: "EUR") } """) +raw, _ = bundle.format_pattern("raw", {"amount": Decimal("1234.50")}) +fmt, _ = bundle.format_pattern("fmt", {"amount": Decimal("1234.50")}) +assert raw == "1234.50" +assert fmt == "1.234,50\u00a0€" ``` -| Option | Values | Effect | -|:-------|:-------|:-------| -| `minimumFractionDigits` | integer | Minimum decimal places | -| `maximumFractionDigits` | integer | Maximum decimal places | -| `useGrouping` | `0` or `1` | Thousands separators (default: enabled). FTL named args accept NumberLiteral, not booleans. | -| `pattern` | string | Custom Babel number pattern | - ---- - -## CURRENCY() Function +## Locale Codes -Formats monetary values with currency symbol and locale-appropriate formatting. +- Public runtime APIs normalize locale codes to the canonical internal form. +- `normalize_locale()` is useful when you need the exact canonical string yourself. +- `get_system_locale()` reads the OS and environment variables for a default locale. ```python -bundle = FluentBundle("de_DE", use_isolating=False) -bundle.add_resource(""" -price = { CURRENCY($amount, currency: "EUR") } -price-code = { CURRENCY($amount, currency: "EUR", currencyDisplay: "code") } -""") - -result, _ = bundle.format_pattern("price", {"amount": 1234.56}) -# → "1.234,56\xa0€" (NBSP U+00A0 before symbol, per CLDR) +from ftllexengine import get_system_locale, normalize_locale -result, _ = bundle.format_pattern("price-code", {"amount": 1234.56}) -# → "1.234,56 EUR" +assert normalize_locale("de-DE") == "de_de" +try: + detected = get_system_locale() +except ValueError: + detected = None +assert detected is None or isinstance(detected, str) ``` -**Non-Breaking Spaces**: CLDR uses non-breaking space (U+00A0) as the grouping separator in many locales (lv_LV, fr_FR, etc.) and between the amount and currency symbol (de_DE, etc.). This is intentional per the Unicode CLDR standard -- it prevents line breaks between amounts and symbols. When comparing formatted output in tests, use `"\xa0"` or `"\u00a0"` instead of regular space. - -**CURRENCY() Options**: - -| Option | Values | Effect | -|:-------|:-------|:-------| -| `currency` | ISO 4217 code | Required. Currency code (e.g., "EUR", "USD") | -| `currencyDisplay` | `"symbol"`, `"code"`, `"name"` | Display style (default: "symbol") | -| `pattern` | string | Custom CLDR currency pattern | - ---- - -## DATETIME() Function - -Formats date/datetime values with locale-appropriate patterns. - -```python -from datetime import datetime -from ftllexengine import FluentBundle - -bundle = FluentBundle("lv_LV", use_isolating=False) -bundle.add_resource(""" -raw-date = Date: { $date } -formatted-date = Date: { DATETIME($date) } -""") - -now = datetime(2026, 1, 12, 14, 30) - -# Raw interpolation -result, _ = bundle.format_pattern("raw-date", {"date": now}) -# → "Date: 2026-01-12 14:30:00" - -# Locale-aware formatting -result, _ = bundle.format_pattern("formatted-date", {"date": now}) -# → "Date: 2026. gada 12. janv." -``` - -**DATETIME() Options**: - -```python -bundle.add_resource(""" -short = { DATETIME($date, dateStyle: "short") } -long = { DATETIME($date, dateStyle: "long", timeStyle: "short") } -date-only = { DATETIME($date, dateStyle: "medium") } -""") -``` - -| Option | Values | Effect | -|:-------|:-------|:-------| -| `dateStyle` | `"full"`, `"long"`, `"medium"`, `"short"` | Preset date format (default: "medium") | -| `timeStyle` | `"full"`, `"long"`, `"medium"`, `"short"` | Preset time format (omit for date-only) | -| `pattern` | string | Custom Babel datetime pattern | - ---- - -## Common Misconceptions - -### "My numbers should auto-format" - -**Misconception**: `{ $count }` should produce locale-formatted output. - -**Reality**: Raw variables use `str()`. Use `NUMBER($count)` for locale formatting. - -**Why**: Fluent is explicit by design. Not all numbers need localization (IDs, version numbers, codes). - -### "This must be a bug" - -**Misconception**: Seeing `1000` instead of `1,000` means something is broken. - -**Reality**: This is spec-compliant behavior. The Fluent specification explicitly requires `NUMBER()` for locale-aware number formatting. - -### "Other i18n libraries auto-format" - -**Misconception**: Because ICU MessageFormat auto-formats, Fluent should too. - -**Reality**: Fluent made a deliberate design choice for explicit formatting. This matches Mozilla's implementation and the official specification. - ---- - -## Locale Handling - -### Locale Property vs. Babel Locale - -`FluentBundle` provides two locale-related properties: - -```python -bundle = FluentBundle("en-US") - -# Returns FTLLexEngine's canonical LocaleCode -bundle.locale # → "en_us" - -# Returns Babel's CLDR identifier -bundle.get_babel_locale() # → "en_US" -``` - -**Design Rationale**: -- `locale`: Returns the canonical lowercase underscore `LocaleCode` -- `get_babel_locale()`: Returns Babel's CLDR-facing identifier - -### Locale Normalization - -Internally, locales are normalized for consistent cache keys: - -```python -# All of these produce the same canonical LocaleCode: -"en-US" → "en_us" -"en_US" → "en_us" -"EN-US" → "en_us" -"en-us" → "en_us" -``` - -BCP-47 is case-insensitive by specification, so all variants are equivalent. - -### Locale Context Caching - -`LocaleContext` normalizes and caches Babel locale objects: - -```python -# Internal: cache key uses normalized form -cache_key = normalize_locale(locale_code) # "en_us" - -# The public locale_code is canonical too -ctx.locale_code # "en_us" -``` - ---- - -## Troubleshooting - -### Numbers Not Formatted - -**Symptom**: `{ $count }` produces `1000` instead of `1,000`. - -**Solution**: Use `{ NUMBER($count) }`. - -```python -# Before -bundle.add_resource("count = { $count }") -# Output: "1000" - -# After -bundle.add_resource("count = { NUMBER($count) }") -# Output: "1,000" (for en_US) -``` - -### Dates Not Formatted - -**Symptom**: `{ $date }` produces `2026-01-12 14:30:00`. - -**Solution**: Use `{ DATETIME($date) }`. - -```python -# Before -bundle.add_resource("date = { $date }") -# Output: "2026-01-12 14:30:00" - -# After -bundle.add_resource('date = { DATETIME($date, dateStyle: "long") }') -# Output: "January 12, 2026" (for en_US) -``` - -### Wrong Locale Format - -**Symptom**: Numbers/dates formatted for wrong locale. - -**Check**: -1. Verify bundle locale: `bundle.locale` -2. Verify Babel locale: `bundle.get_babel_locale()` -3. Ensure Babel is installed: `pip install ftllexengine[babel]` - ---- - -## Bi-Directional Localization - -For parsing locale-formatted user input back to Python types, see [PARSING_GUIDE.md](PARSING_GUIDE.md). - -```python -from ftllexengine import FluentBundle -from ftllexengine.parsing import parse_decimal - -# Format for display -bundle = FluentBundle("de_DE") -bundle.add_resource("price = { NUMBER($amount) } EUR") -formatted, _ = bundle.format_pattern("price", {"amount": 1234.56}) -# → "1.234,56 EUR" - -# Parse user input back -result, errors = parse_decimal("1.234,56", "de_DE") -# → Decimal('1234.56') -``` - ---- - -## Summary - -| Concept | Behavior | -|:--------|:---------| -| `{ $var }` | Raw `str()` interpolation | -| `{ NUMBER($var) }` | Locale-aware number formatting | -| `{ DATETIME($var) }` | Locale-aware date/time formatting | -| `{ CURRENCY($var, currency: "XXX") }` | Locale-aware currency formatting | -| `bundle.locale` | Canonical lowercase underscore `LocaleCode` | -| `bundle.get_babel_locale()` | Normalized Babel identifier | +## Bidi Isolation -**Remember**: Fluent's explicit formatting is a feature, not a bug. When in doubt, check the [Fluent specification](https://projectfluent.org/fluent/guide/). +`use_isolating=True` is the default on bundle and localization classes. It wraps placeables with Unicode bidi isolation marks so interpolated values do not corrupt surrounding RTL/LTR text. Keep it enabled for UI output unless you know the output will stay LTR-only and you need plain strings for logging or snapshot assertions. diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md index d766fe93..0c77e329 100644 --- a/docs/MIGRATION.md +++ b/docs/MIGRATION.md @@ -1,786 +1,40 @@ --- -afad: "3.3" -version: "0.153.0" -domain: migration -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: MIGRATION +updated: "2026-04-22" route: - keywords: [migration, fluent.runtime, upgrade, breaking changes, mozilla fluent, python fluent] - questions: ["how to migrate from fluent.runtime?", "how to upgrade to ftllexengine?"] + keywords: [migration, fluent.runtime, FluentBundle, FluentLocalization, strict mode] + questions: ["how do I migrate from fluent.runtime?", "what changes when I switch to FTLLexEngine?"] --- -# Migration Guide: fluent.runtime → FTLLexEngine +# Migration From `fluent.runtime` -**Complete guide for migrating from Mozilla's fluent.runtime to FTLLexEngine** +**Purpose**: Highlight the main API and behavior differences when moving to FTLLexEngine. +**Prerequisites**: Familiarity with `fluent.runtime`. -**Target Audience**: Developers currently using `fluent.runtime` (Mozilla's Python implementation) who want to migrate to FTLLexEngine for Python 3.13+ features, better type safety, and improved performance. +## High-Level Differences -**[IMPORTANT] REQUIREMENT: Python 3.13+** -FTLLexEngine requires Python 3.13 or later. If your project uses Python 3.12 or earlier, you must upgrade your Python version before migrating. +- `FluentBundle.format_pattern()` takes a message id directly; you do not fetch a message object first. +- `FluentLocalization` is the multi-locale orchestration layer for fallback chains. +- Strict mode is the default. Formatting and resource-integrity problems raise immediately unless you opt into `strict=False`. +- Boot validation is built in through `LocalizationBootConfig`. ---- - -## Why Migrate? - -### FTLLexEngine Advantages - -1. **Python 3.13+ Modern Features**: - - PEP 695 `type` keyword aliases - - PEP 742 `TypeIs` type guards - - Pattern matching for cleaner code - - Frozen dataclasses with slots - -2. **Better Type Safety**: - - Full `mypy --strict` compatibility - - Type-safe introspection APIs - - Complete type annotations - -3. **Single Dependency**: - - Only requires Babel (vs fluent.runtime: fluent.syntax, attrs, babel, pytz, typing-extensions) - - Smaller dependency footprint - -4. **Simpler Architecture**: - - Cleaner API with fewer abstractions - - Direct imports from main package - - No separate fluent.syntax dependency - -5. **Comprehensive Documentation**: - - 100% API coverage - - Working examples - - Quick reference guide - - Migration guide (this document!) - -### When to Stay with fluent.runtime - -- Your project requires Python 3.6-3.12 (FTLLexEngine requires 3.13+) -- You need Mozilla's exact reference implementation behavior -- Your project is tightly integrated with Firefox/Thunderbird ecosystem -- Migration effort outweighs benefits for your use case - ---- - -## Quick Migration Checklist - -- [ ] Verify Python 3.13+ is available -- [ ] Update dependencies in requirements.txt/pyproject.toml -- [ ] Change import statements -- [ ] Update FluentBundle constructor (remove transform_func) -- [ ] Update FluentResource → parse_ftl() and add_resource() -- [ ] Update error handling (errors are already in list, not separate iteration) -- [ ] Test with existing .ftl files -- [ ] Update type annotations to use FTLLexEngine type aliases -- [ ] Run test suite and verify behavior - ---- - -## API Comparison - -### Installation - -```bash -# fluent.runtime -pip install fluent.runtime - -# FTLLexEngine -pip install ftllexengine -``` - -**Dependencies Comparison**: -``` -fluent.runtime → fluent.syntax, attrs, babel, pytz, typing-extensions -FTLLexEngine → Babel only -``` - ---- - -### Import Statements - -#### fluent.runtime - -```python -from fluent.runtime import FluentBundle, FluentResource -from fluent.runtime.errors import FluentFormatError -``` - -#### FTLLexEngine - -```python -from ftllexengine import FluentBundle, parse_ftl -from ftllexengine import FrozenFluentError, ErrorCategory -``` - -**Changes**: -- Top-level imports (no `ftllexengine.runtime` submodule needed) -- All public APIs available from main package -- `FluentResource` replaced by `parse_ftl()` -- `FluentFormatError` replaced by `FrozenFluentError` with `ErrorCategory` for classification - ---- - -### Creating a Bundle - -#### fluent.runtime - -```python -bundle = FluentBundle(['en-US'], use_isolating=True) -``` - -#### FTLLexEngine - -```python -bundle = FluentBundle('en-US', use_isolating=True) -``` - -**Changes**: -- [WARN] **Single locale string** instead of list: `'en-US'` not `['en-US']` -- [OK] `use_isolating` parameter works identically - -**Migration**: -```python -# fluent.runtime -bundle = FluentBundle(['en-US'], use_isolating=True) - -# FTLLexEngine - extract first locale from list -locales = ['en-US'] -bundle = FluentBundle(locales[0], use_isolating=True) -``` - ---- - -### Adding Resources - -#### fluent.runtime - -```python -from fluent.runtime import FluentResource - -# Parse resource -resource = FluentResource(""" -hello = Hello, World! -""") - -# Add to bundle -bundle.add_resource(resource) -``` - -#### FTLLexEngine - -```python -# Direct string - simpler! -bundle.add_resource(""" -hello = Hello, World! -""") - -# If you need AST for introspection, use parse_ftl() separately -from ftllexengine import parse_ftl -resource_ast = parse_ftl("""hello = Hello, World!""") -# Inspect AST here if needed -# Then add the original string to bundle -bundle.add_resource("""hello = Hello, World!""") -``` - -**Changes**: -- [OK] **No FluentResource wrapper needed** - pass string directly to `add_resource()` -- [OK] Simpler API with one less step -- [INFO] `parse_ftl()` is for AST introspection only - `add_resource()` accepts strings - -**Migration**: -```python -# fluent.runtime -resource = FluentResource(ftl_source) -bundle.add_resource(resource) - -# FTLLexEngine - direct string -bundle.add_resource(ftl_source) -``` - ---- - -### Formatting Messages - -#### fluent.runtime - -```python -# Get message first, then format pattern -msg = bundle.get_message('hello') -result, errors = bundle.format_pattern(msg.value, {}) -``` - -#### FTLLexEngine - -```python -# Direct message ID - no get_message() step needed -result, errors = bundle.format_pattern('hello', {}) -``` - -**Changes**: -- [OK] **Simpler API**: Direct message ID, no `get_message()` step needed -- [OK] **Same return pattern**: Both return `(result, errors)` tuple -- [OK] **Cleaner code**: One call instead of two - -**Migration**: -```python -# fluent.runtime -msg = bundle.get_message('hello') -if msg: - result, errors = bundle.format_pattern(msg.value, {}) - -# FTLLexEngine - simpler (no get_message step) -result, errors = bundle.format_pattern('hello', {}) -``` - ---- - -### Error Handling - -#### fluent.runtime - -```python -from fluent.runtime.errors import FluentFormatError - -# Get message first, then format -msg = bundle.get_message('hello') -result, errors = bundle.format_pattern(msg.value, {}) - -for error in errors: - if isinstance(error, FluentFormatError): - print(f"Error: {error}") -``` - -#### FTLLexEngine - -```python -from ftllexengine import FrozenFluentError - -# Direct message ID, no get_message() needed -result, errors = bundle.format_pattern('hello', {}) - -for error in errors: - print(f"Error ({error.category}): {error}") -``` - -**Changes**: -- Simpler API: Use message ID directly, no `get_message()` step -- Same return pattern: Both return `(result, errors)` tuple -- Single error type `FrozenFluentError` with `ErrorCategory` replaces class hierarchy - ---- - -### Attribute Access - -#### fluent.runtime - -```python -msg = bundle.get_message('login-button') -value, errors = bundle.format_pattern(msg.value, {}) -tooltip, errors = bundle.format_pattern(msg.attributes['tooltip'], {}) -``` - -#### FTLLexEngine - -```python -# Value -result, errors = bundle.format_pattern('login-button') - -# Attribute -result, errors = bundle.format_pattern('login-button', attribute='tooltip') -``` - -**Changes**: -- [OK] **Much simpler**: Use `attribute` parameter instead of `get_message().attributes[...]` -- [OK] **No manual attribute lookup**: Bundle handles it - ---- - -### Custom Functions - -#### fluent.runtime - -```python -def number_formatter(num, **options): - return str(num) - -bundle.add_function('NUMBER', number_formatter) -``` - -#### FTLLexEngine - -```python -def NUMBER(num, **options): - return str(num) - -bundle.add_function('NUMBER', NUMBER) -``` - -**Changes**: -- [OK] **Identical API**: Works the same way -- [OK] Function names should be UPPERCASE (convention in both) - ---- - -### Multi-Locale Support - -#### fluent.runtime - -```python -from fluent.runtime import FluentLocalization, FluentResourceLoader - -# Load from files with resource loader -loader = FluentResourceLoader("locales/{locale}") -l10n = FluentLocalization(['lv', 'en'], ['main.ftl'], loader) - -result = l10n.format_value('hello') -``` - -#### FTLLexEngine - -```python -from ftllexengine import FluentLocalization -from ftllexengine.localization import PathResourceLoader - -# Similar API with resource loader -loader = PathResourceLoader("locales/{locale}") -l10n = FluentLocalization(['lv', 'en'], ['main.ftl'], loader) - -result, errors = l10n.format_value('hello') -``` - -**Note**: `PathResourceLoader` is in `ftllexengine.localization`, not the main package. - -**Changes**: -- [OK] **Similar API**: Both have FluentLocalization for multi-locale -- [WARN] **CRITICAL Return difference**: - - fluent.runtime: Returns just string: `result = l10n.format_value('hello')` - - FTLLexEngine: Returns tuple: `result, errors = l10n.format_value('hello')` (errors is immutable tuple) -- [OK] **PathResourceLoader**: Similar to FluentResourceLoader - ---- - -## Complete Migration Example - -### Before (fluent.runtime) - -```python -from fluent.runtime import FluentBundle, FluentResource -from fluent.runtime.errors import FluentFormatError - -# Create bundle -bundle = FluentBundle(['en-US'], use_isolating=True) - -# Load resource -resource = FluentResource(""" -welcome = Welcome, { $name }! -emails = You have { $count -> - [one] one email - *[other] { $count } emails -}. -""") -bundle.add_resource(resource) - -# Format message -msg = bundle.get_message('welcome') -if msg: - result, errors = bundle.format_pattern(msg.value, {'name': 'Alice'}) - if errors: - for error in errors: - print(f"Error: {error}") - print(result) -``` - -### After (FTLLexEngine) - -```python -from ftllexengine import FluentBundle - -# Create bundle -bundle = FluentBundle('en-US', use_isolating=True) - -# Load resource - direct string, no wrapper -bundle.add_resource(""" -welcome = Welcome, { $name }! -emails = You have { $count -> - [one] one email - *[other] { $count } emails -}. -""") - -# Format message - simpler API -result, errors = bundle.format_pattern('welcome', {'name': 'Alice'}) -if errors: - for error in errors: - print(f"Error: {error}") -print(result) -``` - -**Lines of Code**: -- fluent.runtime: 19 lines -- FTLLexEngine: 13 lines (32% reduction) - ---- - -## API Mapping Table - -### Core Classes - -| fluent.runtime | FTLLexEngine | Notes | -|----------------|--------------|-------| -| `FluentBundle(['locale'])` | `FluentBundle('locale')` | Single locale, not list | -| `FluentResource(str)` | Direct string to `add_resource()` | No wrapper needed; use `parse_ftl(str)` only for AST introspection | -| N/A | `FluentLocalization` | Built-in multi-locale support | -| N/A | `PathResourceLoader` | File system loader | - -### Methods - -| fluent.runtime | FTLLexEngine | Changes | -|----------------|--------------|---------| -| `bundle.add_resource(FluentResource)` | `bundle.add_resource(str)` | Direct string, no wrapper | -| `bundle.get_message(id).value` then `format_pattern()` | `bundle.format_pattern(id, args)` | Direct formatting - no intermediate Message object needed | -| `bundle.has_message(id)` | `bundle.has_message(id)` | Identical | -| N/A | `bundle.get_message_ids()` | List all messages | -| N/A | `bundle.get_message_variables(id)` | Get required variables | -| N/A | `bundle.introspect_message(id)` | Full message metadata | -| N/A | `bundle.validate_resource(str)` | Validate before loading | - -### Error Types - -| fluent.runtime | FTLLexEngine | Notes | -|----------------|--------------|-------| -| `FluentFormatError` | `FrozenFluentError` | Immutable error with `ErrorCategory` (main package) | -| N/A | `ErrorCategory.REFERENCE` | Missing messages/variables | -| N/A | `ErrorCategory.RESOLUTION` | Runtime errors | -| N/A | `ErrorCategory.CYCLIC` | Circular references | - ---- - -## Migration Patterns - -### Pattern 1: Simple Single-Locale App - -#### fluent.runtime -```python -from fluent.runtime import FluentBundle, FluentResource - -def setup_i18n(locale): - bundle = FluentBundle([locale]) - with open(f'locales/{locale}/main.ftl') as f: - resource = FluentResource(f.read()) - bundle.add_resource(resource) - return bundle - -bundle = setup_i18n('en-US') -``` - -#### FTLLexEngine -```python -from pathlib import Path -from ftllexengine import FluentBundle - -def setup_i18n(locale): - bundle = FluentBundle(locale) - ftl_source = Path(f'locales/{locale}/main.ftl').read_text() - bundle.add_resource(ftl_source) - return bundle - -bundle = setup_i18n('en-US') -``` +## Example ---- - -### Pattern 2: Multi-Locale with Manual Fallback - -#### fluent.runtime -```python -from fluent.runtime import FluentLocalization, FluentResourceLoader - -# Built-in multi-locale support -loader = FluentResourceLoader('locales/{locale}') -l10n = FluentLocalization(['lv', 'en'], ['main.ftl'], loader) - -# Returns just the string (no error tuple) -result = l10n.format_value('welcome', {'name': 'Anna'}) -``` - -#### FTLLexEngine -```python -from ftllexengine import FluentLocalization -from ftllexengine.localization import PathResourceLoader - -# Similar API -loader = PathResourceLoader('locales/{locale}') -l10n = FluentLocalization(['lv', 'en'], ['main.ftl'], loader) - -# Returns (result, errors) tuple -result, errors = l10n.format_value('welcome', {'name': 'Anna'}) -``` - -**Benefit**: Similar API, FTLLexEngine returns errors for better handling - ---- - -### Pattern 3: Custom Functions - -#### fluent.runtime -```python -from fluent.runtime import FluentBundle - -def upper_formatter(text, **options): - return str(text).upper() - -bundle = FluentBundle(['en']) -bundle.add_function('UPPER', upper_formatter) -``` - -#### FTLLexEngine ```python from ftllexengine import FluentBundle -def UPPER(text, **options): - return str(text).upper() - -bundle = FluentBundle('en') -bundle.add_function('UPPER', UPPER) -``` - -**Identical API** - no changes needed! - ---- - -## Type Annotations Migration - -### fluent.runtime (Limited typing) - -```python -from fluent.runtime import FluentBundle -from typing import Dict, Any - -def format_message(bundle: FluentBundle, msg_id: str, args: Dict[str, Any]) -> str: - msg = bundle.get_message(msg_id) - if msg: - result, errors = bundle.format_pattern(msg.value, args) - return result - return msg_id -``` - -### FTLLexEngine (Full mypy --strict) - -```python -from ftllexengine import FluentBundle, FrozenFluentError -from ftllexengine.localization import MessageId - -def format_message(bundle: FluentBundle, msg_id: MessageId, args: dict[str, object]) -> str: - """Format message with error logging.""" - result, errors = bundle.format_pattern(msg_id, args) - if errors: - for error in errors: - # error is properly typed as FrozenFluentError - logger.warning(f"Translation error: {error}") - return result -``` - -**Improvements**: -- [OK] Full type safety with `mypy --strict` -- [OK] Type aliases for clarity (`MessageId`) -- [OK] Modern Python 3.13 dict syntax (`dict[str, object]` vs `Dict[str, Any]`) - ---- - -## Testing Migration - -### Update Test Assertions - -#### fluent.runtime -```python -def test_message_formatting(): - bundle = FluentBundle(['en']) - bundle.add_resource(FluentResource("hello = Hello!")) - - # Two-step process: get_message() then format_pattern() - msg = bundle.get_message('hello') - result, errors = bundle.format_pattern(msg.value, {}) - - assert result == "Hello!" - assert not errors -``` - -#### FTLLexEngine -```python -def test_message_formatting(): - bundle = FluentBundle('en', use_isolating=False) # Clean assertions - bundle.add_resource("hello = Hello!") - - # One-step process: format_pattern() with message ID directly - result, errors = bundle.format_pattern('hello') - - assert result == "Hello!" - assert errors == () # Empty immutable tuple -``` - -**Benefits**: -- **Simpler**: One call instead of two (no `get_message()` step) -- **Cleaner**: Fewer lines, direct assertions -- **Type-safe**: Returns tuple instead of mutable error list - ---- - -## Troubleshooting Migration - -### Issue 1: "FluentBundle() takes 1 positional argument but 1 list was given" - -**Cause**: Using fluent.runtime syntax with list of locales - -**Solution**: -```python -# [OLD] fluent.runtime syntax -bundle = FluentBundle(['en-US']) - -# [NEW] FTLLexEngine syntax -bundle = FluentBundle('en-US') -``` - ---- - -### Issue 2: "FluentResource is not defined" - -**Cause**: Importing non-existent FluentResource - -**Solution**: -```python -# [OLD] fluent.runtime -from fluent.runtime import FluentResource # Old library had wrapper class - -# [NEW] FTLLexEngine - no wrapper needed -bundle.add_resource(ftl_source) # Direct string - -# Or if you need AST manipulation -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Resource -resource_ast = parse_ftl(ftl_source) -``` - ---- - -### Issue 3: "format_pattern() missing required argument: 'message_id'" - -**Cause**: Using fluent.runtime pattern-first API - -**Solution**: -```python -# [OLD] fluent.runtime - requires get_message step -msg = bundle.get_message('hello') -result, errors = bundle.format_pattern(msg.value, {}) - -# [NEW] FTLLexEngine - direct message ID -result, errors = bundle.format_pattern('hello', {}) +bundle = FluentBundle("en_US", use_isolating=False) +bundle.add_resource("welcome = Hello, { $name }!") +result, errors = bundle.format_pattern("welcome", {"name": "Alice"}) +assert errors == () +assert result == "Hello, Alice!" ``` ---- - -### Issue 4: Import errors for specific exception types - -**Cause**: Different exception hierarchy - -**Solution**: -```python -# fluent.runtime -from fluent.runtime.errors import FluentFormatError - -# FTLLexEngine - single error type with category classification -from ftllexengine import FrozenFluentError, ErrorCategory - -# Classify errors by category: -# ErrorCategory.REFERENCE - Missing messages/variables -# ErrorCategory.RESOLUTION - Runtime errors -# ErrorCategory.CYCLIC - Circular references -# ErrorCategory.PARSE - Parse failures -# ErrorCategory.FORMATTING - Formatting failures -``` - ---- - -## Compatibility Notes - -### What Works Identically - -[OK] Custom functions -[OK] Built-in NUMBER and DATETIME functions -[OK] Select expressions and plural rules -[OK] Terms and message references -[OK] Unicode bidi isolation -[OK] Error handling philosophy (graceful degradation) - -### What's Different - -[WARN] Constructor takes single locale, not list -[WARN] No FluentResource wrapper - direct string to `add_resource()` -[WARN] Different exception types (but same behavior) -Return immutable error tuples instead of mutable lists (`tuple[FrozenFluentError, ...]`) -[WARN] Python 3.13+ required (vs 3.6+) - -### What's New in FTLLexEngine - -[NEW] `FluentLocalization` for multi-locale -[NEW] `PathResourceLoader` for file systems -[NEW] `validate_resource()` for pre-flight validation -[NEW] `introspect_message()` for metadata -[NEW] `get_message_variables()` for variable discovery -[NEW] `get_message_ids()` for listing messages -[NEW] Full `mypy --strict` type safety -[NEW] Python 3.13 modern features -[NEW] **Bi-directional parsing** (not in fluent.runtime): - - `parse_decimal()` - locale-aware number parsing (financial-grade Decimal precision) - - `parse_date()`, `parse_datetime()` - locale-aware date parsing - - `parse_currency()` - currency parsing with symbol detection - - Type guards: `is_valid_decimal()`, `is_valid_currency()` - ---- - -## Migration Checklist - -### Pre-Migration - -- [ ] Verify Python 3.13+ available in all environments -- [ ] Review breaking changes section -- [ ] Identify custom function usage -- [ ] List all multi-locale fallback logic -- [ ] Backup current codebase - -### During Migration - -- [ ] Update `requirements.txt` or `pyproject.toml` -- [ ] Install FTLLexEngine: `pip install ftllexengine` -- [ ] Update imports: `fluent.runtime` → `ftllexengine` -- [ ] Change FluentBundle constructor (list → single locale) -- [ ] Remove FluentResource wrappers -- [ ] Update format_pattern calls (use message ID directly) -- [ ] Update error handling (tuple returns) -- [ ] Add multi-locale support with FluentLocalization -- [ ] Update type annotations - -### Post-Migration - -- [ ] Run full test suite -- [ ] Verify all .ftl files load correctly -- [ ] Test custom functions -- [ ] Test multi-locale fallback -- [ ] Test error handling -- [ ] Update documentation -- [ ] Update CI/CD to use Python 3.13+ -- [ ] Performance testing (should be faster!) - ---- - -## Getting Help - -- **FTLLexEngine Documentation**: [DOC_00_Index.md](DOC_00_Index.md) -- **Examples**: [examples/](../examples/) -- **Quick Reference**: [QUICK_REFERENCE.md](QUICK_REFERENCE.md) -- **Issues**: https://github.com/resoltico/ftllexengine/issues - ---- - -**fluent.runtime Version Referenced**: 0.4.0 - -**Note**: Babel is optional. Parser-only installation (`pip install ftllexengine`) works without external dependencies. For locale-aware formatting, install with `pip install ftllexengine[babel]`. - -**Note**: For FTLLexEngine version-to-version upgrade guidance, see [CHANGELOG.md](../CHANGELOG.md). +## Recommended Migration Order -**Feedback**: If you encounter migration issues not covered here, please open an issue! +1. Replace message-object lookup flows with direct message-id formatting calls. +2. Decide whether you need single-locale `FluentBundle` or multi-locale `FluentLocalization`. +3. Make strict-mode behavior explicit in tests. +4. Add startup validation with `LocalizationBootConfig` if resources come from disk or another loader. diff --git a/docs/PARSING_GUIDE.md b/docs/PARSING_GUIDE.md index dabdd257..e29a420f 100644 --- a/docs/PARSING_GUIDE.md +++ b/docs/PARSING_GUIDE.md @@ -1,854 +1,66 @@ --- -afad: "3.3" -version: "0.153.0" -domain: parsing -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: PARSING +updated: "2026-04-22" route: - keywords: [parsing, parse_decimal, parse_fluent_number, parse_date, parse_currency, bi-directional, user input, forms, BabelImportError] - questions: ["how to parse user input?", "how to parse number?", "how to parse a FluentNumber?", "how to parse date?", "how to parse currency?", "what exceptions do parsing functions raise?"] + keywords: [parsing, parse_decimal, parse_currency, parse_date, parse_datetime, parse_fluent_number] + questions: ["how do I parse localized user input?", "how do I do roundtrip formatting and parsing?", "what do parse errors look like?"] --- -# Parsing Guide - Bi-Directional Localization +# Parsing Guide -**Purpose**: Parse locale-formatted user input back to Python types. -**Prerequisites**: Basic FluentBundle usage. +**Purpose**: Parse locale-formatted numbers, currency, dates, and datetimes back into Python values. +**Prerequisites**: Babel-enabled install (`ftllexengine[babel]`). -FTLLexEngine provides comprehensive **bi-directional localization**: both formatting (data → display) and parsing (display → data). +## Overview -## Table of Contents - -1. [Quick Start](#quick-start) -2. [API Reference](#api-reference) -3. [Best Practices](#best-practices) -4. [Common Patterns](#common-patterns) -5. [Migration from Babel](#migration-from-babel) -6. [Troubleshooting](#troubleshooting) - ---- - -## Quick Start - -### Basic Number Parsing - -```python -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -# Parse locale-formatted number -result, errors = parse_decimal("1 234,56", "lv_LV") -if is_valid_decimal(result): # guards accept None, return False - amount = result # Decimal('1234.56') - -# Parse US format -result, errors = parse_decimal("1,234.56", "en_US") -if is_valid_decimal(result): - amount_us = result # Decimal('1234.56') -``` - -**Note**: Type guards (`is_valid_decimal`, `is_valid_date`, `is_valid_currency`) accept `None` and return `False`. This simplifies the pattern from `if not errors and is_valid_decimal(result)` to just `if is_valid_decimal(result)`. - -### Direct FluentNumber Parsing - -```python -from decimal import Decimal - -from ftllexengine.parsing import parse_fluent_number - -result, errors = parse_fluent_number("1 234,56", "lv_LV") -if not errors and result is not None: - assert result.value == Decimal("1234.56") - assert str(result) == "1 234,56" - assert result.precision == 2 -``` - -### Bi-Directional Workflow +The parsing API returns `(result, errors)` tuples. Success means `errors == ()`; failure means `result is None` and `errors` contains immutable `FrozenFluentError` objects. ```python from decimal import Decimal -from ftllexengine import FluentBundle -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -# Create bundle -bundle = FluentBundle("lv_LV") -bundle.add_resource('price = { CURRENCY($amount, currency: "EUR") }') - -# Format for display -formatted, _ = bundle.format_pattern("price", {"amount": 1234.56}) -# → "1 234,56 €" - -# Parse user input back to data -user_input = "1 234,56" -result, errors = parse_decimal(user_input, "lv_LV") - -if is_valid_decimal(result): # guards accept None, return False - # Roundtrip: format → parse → format preserves value - assert result == Decimal("1234.56") -``` - ---- +from ftllexengine.parsing import parse_currency, parse_date, parse_decimal -## API Reference +amount, errors = parse_decimal("12.450,50", "de_DE") +assert errors == () +assert amount == Decimal("12450.50") -### parse_decimal() +money, errors = parse_currency("12.450,50 EUR", "de_DE", default_currency="EUR") +assert errors == () +assert money == (Decimal("12450.50"), "EUR") -Parse locale-formatted number string to `Decimal` (financial precision). - -Returns `tuple[Decimal | None, tuple[FrozenFluentError, ...]]`. - -```python -from decimal import Decimal -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -# Financial precision - no float rounding errors -result, errors = parse_decimal("100,50", "lv_LV") -if is_valid_decimal(result): # guards accept None - vat = result * Decimal("0.21") # → Decimal('21.105') - exact! - -# Float would lose precision -float_amount = 100.50 -float_vat = float_amount * 0.21 # → 21.105000000000004 - precision loss! +delivery_date, errors = parse_date("2026年3月15日", "ja_JP") +assert errors == () +assert delivery_date.isoformat() == "2026-03-15" ``` -**When to use**: -- Financial calculations (invoices, payments, VAT) -- Currency amounts -- Any calculation where precision matters - -### parse_fluent_number() +## FluentNumber Parsing -Parse locale-formatted number string directly to `FluentNumber`. - -Returns `tuple[FluentNumber | None, tuple[FrozenFluentError, ...]]`. +`parse_fluent_number()` returns a `FluentNumber`, preserving both the numeric value and the localized display string. ```python from decimal import Decimal - from ftllexengine.parsing import parse_fluent_number -result, errors = parse_fluent_number("100,50", "lv_LV") -if not errors and result is not None: - assert result.value == Decimal("100.50") - assert result.precision == 2 -``` - -**When to use**: -- User-entered numeric text should go back into `FluentBundle` / `FluentLocalization` -- Select expressions must preserve visible precision (`1.0` vs `1.00`) -- You want the public one-step API instead of manual `parse_decimal()` + `make_fluent_number()` composition - -### parse_date() - -Parse locale-formatted date string to `date` object. - -Returns `tuple[date | None, tuple[FrozenFluentError, ...]]`. - -```python -from ftllexengine.parsing import parse_date -from ftllexengine.parsing import is_valid_date - -# US format (MM/DD/YYYY) -result, errors = parse_date("1/28/2025", "en_US") -if is_valid_date(result): # guards accept None - date_value = result # date(2025, 1, 28) - -# European format (DD.MM.YYYY) -result, errors = parse_date("28.01.2025", "lv_LV") -# result → date(2025, 1, 28) - -# ISO 8601 (works everywhere) -result, errors = parse_date("2025-01-28", "en_US") -# result → date(2025, 1, 28) -``` - -**Implementation Details**: -- **Python 3.13 stdlib only** - Uses `datetime.strptime()` and `datetime.fromisoformat()` -- **Babel CLDR patterns** - Converts Babel date patterns to strptime format directives - - Example conversions: `"M/d/yy"` → `"%m/%d/%y"`, `"dd.MM.yyyy"` → `"%d.%m.%Y"` -- **Token-based converter** - Replaces fragile regex approach for pattern conversion -- **Fast path optimization** - ISO 8601 dates (`"2025-01-28"`) use native `fromisoformat()` for maximum speed -- **Safe pattern matching** - No ambiguous fallback patterns: - 1. ISO 8601 format (fastest, unambiguous, always works) - 2. Locale-specific CLDR patterns from Babel ONLY - 3. No generic fallback patterns (prevents misinterpretation) -- **Locale determines interpretation** - Day-first (EU) vs month-first (US) based on CLDR patterns -- **Thread-safe** - No global state, immutable pattern lists -- **Zero external dependencies** - Uses only Python 3.13 stdlib + Babel (already a dependency) - -**Important**: Ambiguous dates like "1/2/25" will FAIL unless: -- Input matches locale's CLDR pattern (e.g., "1/2/25" only works for en_US, not lv_LV) -- Input uses ISO 8601 format "2025-01-02" (works everywhere, recommended) - -### parse_datetime() - -Parse locale-formatted datetime string to `datetime` object. - -Returns `tuple[datetime | None, tuple[FrozenFluentError, ...]]`. - -```python -from datetime import timezone -from ftllexengine.parsing import parse_datetime -from ftllexengine.parsing import is_valid_datetime - -# Parse datetime -result, errors = parse_datetime("1/28/2025 14:30", "en_US") -if is_valid_datetime(result): # guards accept None - dt = result # datetime(2025, 1, 28, 14, 30) - -# With timezone -result, errors = parse_datetime("2025-01-28 14:30", "en_US", tzinfo=timezone.utc) -# result → datetime(2025, 1, 28, 14, 30, tzinfo=timezone.utc) -``` - -**Implementation Details**: -- Same implementation as `parse_date()` but with time components -- Uses Babel CLDR datetime patterns converted to strptime format -- Pattern conversion includes time directives: `"HH:mm:ss"` → `"%H:%M:%S"` -- Fast path for ISO 8601 datetime strings -- Thread-safe, no external dependencies beyond Babel - -### parse_currency() - -Parse locale-formatted currency string to `(Decimal, currency_code)` tuple. - -Returns `tuple[tuple[Decimal, str] | None, tuple[FrozenFluentError, ...]]`. - -```python -from ftllexengine.parsing import parse_currency -from ftllexengine.parsing import is_valid_currency - -# Unambiguous symbols - work without default_currency -result, errors = parse_currency("€100.50", "en_US") -if is_valid_currency(result): # guards accept None - amount, currency = result # (Decimal('100.50'), 'EUR') - -# Latvian format -result, errors = parse_currency("1 234,56 €", "lv_LV") -# result → (Decimal('1234.56'), 'EUR') - -# ISO codes - always unambiguous -result, errors = parse_currency("USD 1,234.56", "en_US") -# result → (Decimal('1234.56'), 'USD') - -# Ambiguous symbols require explicit currency -result, errors = parse_currency("$100", "en_US", default_currency="USD") -# result → (Decimal('100'), 'USD') - -result, errors = parse_currency("$100", "en_CA", default_currency="CAD") -# result → (Decimal('100'), 'CAD') - -# Or infer from locale -result, errors = parse_currency("$100", "en_CA", infer_from_locale=True) -# result → (Decimal('100'), 'CAD') # Inferred from Canadian locale - -# Ambiguous symbols without default_currency return error -result, errors = parse_currency("$100", "en_US") -if errors: - print(f"Ambiguous currency: {errors[0]}") -``` - -**Currency Symbol Handling**: -- **Ambiguous**: $ (USD/CAD/AUD/SGD/HKD/NZD/MXN), ¢, ₨, ₱, kr, ¥ (JPY/CNY), £ (GBP/EGP/GIP/FKP/SHP/SSP) -- **Unambiguous**: € (EUR), ₹ (INR), ₽ (RUB), etc. -- **Always safe**: ISO codes (USD, CAD, EUR, etc.) -- **Locale resolution**: ¥ -> CNY for zh_* locales, JPY otherwise. £ -> EGP for ar_* locales, GBP otherwise. - -**Supported currencies**: All ISO 4217 codes plus major currency symbols (€, $, £, ¥, etc.) - ---- - -## Best Practices - -### 1. Always Use Same Locale - -**CRITICAL**: Format and parse must use the **same locale** for roundtrip correctness. - -```python -# CORRECT - Same locale -locale = "lv_LV" -formatted, _ = bundle.format_pattern("price", {"amount": 1234.56}) -result, errors = parse_decimal(formatted, locale) # Same locale! - -# WRONG - Different locales break roundtrip -formatted, _ = bundle.format_pattern("price", {"amount": 1234.56}) # lv_LV -result, errors = parse_decimal(formatted, "en_US") # Wrong locale! -# Result: errors will contain parse error -``` - -### 2. Check Errors in Production - -```python -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -# Check errors tuple instead of try/except -result, errors = parse_decimal(user_input, locale) - -if errors: - show_error_to_user(f"Invalid amount: {errors[0]}") - return - -if not is_valid_decimal(result): - show_error_to_user("Amount cannot be NaN or Infinity") - return - -# Safe to use result -process_payment(result) +fnum, errors = parse_fluent_number("12.450,00", "de_DE") +assert errors == () +assert fnum.value == Decimal("12450.00") +assert fnum.precision == 2 +assert str(fnum) == "12.450,00" ``` -### 3. Financial Precision - Always Use Decimal +## Type Guards -```python -from decimal import Decimal -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -# CORRECT - Decimal for financial data -result, errors = parse_decimal("100,50", "lv_LV") -if is_valid_decimal(result): # guards accept None - vat = result * Decimal("0.21") # → Decimal('21.105') - exact - -# WRONG - Float arithmetic loses precision -amount = 100.50 # float -vat = amount * 0.21 # → 21.105000000000004 - precision loss! -``` - -**Impact**: Float precision loss accumulates in calculations and causes rounding errors in financial reports. - -**Note on Special Values**: Babel's `parse_decimal()` accepts `NaN`, `Infinity`, and `Inf` (case-insensitive) as valid Decimal values per IEEE 754 standard. Use `is_valid_decimal()` to reject these for financial data: +The `is_valid_*` helpers are useful when you want a boolean guard after parsing. ```python -from ftllexengine.parsing import is_valid_decimal - -result, errors = parse_decimal(user_input, locale) - -if errors: - raise ValueError(f"Parse error: {errors[0]}") +from ftllexengine.parsing import is_valid_decimal, parse_decimal -# Reject special values for financial data -if not is_valid_decimal(result): - raise ValueError("Amount must be a finite number") +value, errors = parse_decimal("not-a-number", "en_US") +assert not is_valid_decimal(value) +assert errors ``` -### 4. Validate Before Processing - -```python -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -def parse_user_amount(input_str: str, locale: str) -> Decimal | None: - # Trim whitespace - input_str = input_str.strip() - - # Check not empty - if not input_str: - return None - - # Parse and validate - result, errors = parse_decimal(input_str, locale) - - if not is_valid_decimal(result): # guards handle None - return None - - return result - -# Usage -amount = parse_user_amount(user_input, "lv_LV") -if amount is None: - show_error("Please enter a valid amount") -``` - -### 5. Roundtrip Validation - -```python -from decimal import Decimal -from ftllexengine.parsing import parse_currency -from ftllexengine.runtime import currency_format -from ftllexengine.parsing import is_valid_currency - -# Verify roundtrip in tests -def test_roundtrip(): - original = Decimal("1234.56") - formatted = currency_format(original, "lv-LV", currency="EUR") - result, errors = parse_currency(formatted, "lv_LV") - - assert not errors - assert is_valid_currency(result) - assert result[0] == original # Roundtrip preserved! -``` - ---- - -## Common Patterns - -### Invoice Processing - -```python -from decimal import Decimal -from ftllexengine import FluentBundle -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -bundle = FluentBundle("lv_LV") -bundle.add_resource(""" - subtotal = Summa: { CURRENCY($amount, currency: "EUR") } - vat = PVN (21%): { CURRENCY($vat, currency: "EUR") } - total = Kopa: { CURRENCY($total, currency: "EUR") } -""") - -def process_invoice(user_input: str) -> dict | None: - # Parse user input (subtotal) - result, errors = parse_decimal(user_input, "lv_LV") - - if not is_valid_decimal(result): # guards handle None - return None - - subtotal = result - - # Calculate VAT (financial precision) - vat_rate = Decimal("0.21") - vat = subtotal * vat_rate - total = subtotal + vat - - # Format for display - display = { - "subtotal": bundle.format_pattern("subtotal", {"amount": subtotal})[0], - "vat": bundle.format_pattern("vat", {"vat": vat})[0], - "total": bundle.format_pattern("total", {"total": total})[0], - } - - return { - "display": display, - "data": {"subtotal": subtotal, "vat": vat, "total": total} - } - -# Example usage -result = process_invoice("1 234,56") -# display: {"subtotal": "Summa: 1 234,56 €", ...} -# data: {"subtotal": Decimal('1234.56'), ...} -``` - -### Form Input Validation - -```python -from decimal import Decimal -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -def validate_amount_field(input_value: str, locale: str) -> tuple[Decimal | None, str | None]: - """Validate and parse amount input field. - - Returns: - (parsed_value, error_message) - error_message is None if valid - """ - # Trim whitespace - input_value = input_value.strip() - - # Check not empty - if not input_value: - return (None, "Amount is required") - - # Parse - result, errors = parse_decimal(input_value, locale) - - if errors: - return (None, f"Invalid amount format for {locale}") - - # Validate finite (not NaN/Infinity) - if not is_valid_decimal(result): - return (None, "Amount must be a finite number") - - # Validate range - if result <= 0: - return (None, "Amount must be positive") - - if result > Decimal("1000000"): - return (None, "Amount exceeds maximum (1,000,000)") - - return (result, None) - -# Usage in web form -amount, error = validate_amount_field(request.form['amount'], user_locale) -if error: - flash(error, 'error') - return redirect(url_for('form')) - -# Amount is valid Decimal, use in calculations -process_payment(amount) -``` - -### Data Import from CSV - -```python -from ftllexengine.parsing import parse_decimal, parse_date -from ftllexengine.parsing import is_valid_date, is_valid_decimal - -def import_transactions_csv(csv_path: str, locale: str) -> tuple[list[dict], list[str]]: - """Import financial transactions from CSV.""" - import csv - - transactions = [] - import_errors = [] - - with open(csv_path, 'r', encoding='utf-8') as f: - reader = csv.DictReader(f) - - for row_num, row in enumerate(reader, start=2): # Start at 2 (header is row 1) - # Parse date (type guards accept None) - date_result, _ = parse_date(row['date'], locale) - if not is_valid_date(date_result): - import_errors.append(f"Row {row_num}: Invalid date '{row['date']}'") - continue - - # Parse amount (type guards accept None) - amount_result, _ = parse_decimal(row['amount'], locale) - if not is_valid_decimal(amount_result): - import_errors.append(f"Row {row_num}: Invalid amount '{row['amount']}'") - continue - - transactions.append({ - "date": date_result, - "amount": amount_result, - "description": row['description'] - }) - - return transactions, import_errors - -# Usage -transactions, errors = import_transactions_csv("export.csv", "lv_LV") -if errors: - print(f"Import completed with {len(errors)} errors:") - for error in errors: - print(f" - {error}") -``` - ---- - -## Migration from Babel - -### Before (Babel only) - -```python -from babel.numbers import parse_decimal as babel_parse_decimal -from ftllexengine import FluentBundle - -# Formatting: FTLLexEngine -bundle = FluentBundle("lv_LV") -formatted, _ = bundle.format_pattern("price", {"amount": 1234.56}) - -# Parsing: Babel directly -user_input = "1 234,56" -parsed = babel_parse_decimal(user_input, locale="lv_LV") -``` - -### After (FTLLexEngine for both) - -```python -from ftllexengine import FluentBundle -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -# Formatting: FTLLexEngine -bundle = FluentBundle("lv_LV") -formatted, _ = bundle.format_pattern("price", {"amount": 1234.56}) - -# Parsing: FTLLexEngine (consistent API) -user_input = "1 234,56" -result, errors = parse_decimal(user_input, "lv_LV") - -if is_valid_decimal(result): # guards accept None - parsed = result # Same locale format! -``` - -**Benefits**: -- Single import source -- Consistent locale code format -- Symmetric API design (format ↔ parse) -- Better error handling with structured errors - ---- - -## Troubleshooting - -### BabelImportError When Parsing - -**Problem**: Calling `parse_decimal()`, `parse_date()`, or other parsing functions raises `BabelImportError` - -**Cause**: Parsing functions require Babel for CLDR locale data. Babel is not installed. - -**Solution**: -```bash -# Install with Babel support -pip install ftllexengine[babel] - -# Or install Babel separately -pip install Babel -``` - -**Context**: FTLLexEngine supports two installation modes: -- **Parser-only** (`pip install ftllexengine`): Syntax parsing only, no Babel dependency -- **Full runtime** (`pip install ftllexengine[babel]`): Includes Babel for locale-aware formatting and parsing - -All functions in `ftllexengine.parsing` require Babel and will raise `BabelImportError` if Babel is not installed. This is a configuration error, not a parse error. - -### Parse Returns Errors - -**Problem**: `parse_decimal()` returns non-empty errors tuple - -**Common causes**: -1. **Wrong locale**: Make sure parsing locale matches formatting locale -2. **Invalid format**: Input doesn't match locale's number format -3. **Non-numeric input**: Input contains letters or unexpected characters - -**Solution**: -```python -from ftllexengine.parsing import parse_decimal -# Use `if errors:` to check for parse errors - -# Debug: Print the error details -result, errors = parse_decimal(user_input, locale) -if errors: - print(f"Parse error: {errors[0]}") - print(f"Input: '{user_input}'") - print(f"Locale: {locale}") - if errors[0].diagnostic: - print(f"Error code: {errors[0].diagnostic.code}") -``` - -### Roundtrip Doesn't Preserve Value - -**Problem**: format → parse → format changes the value - -**Cause**: Different locales used for format and parse - -**Solution**: -```python -from decimal import Decimal -from ftllexengine.parsing import parse_decimal -from ftllexengine.runtime import number_format - -# Correct: Same locale throughout -locale = "lv_LV" -formatted = str(number_format(Decimal("1234.56"), f"{locale.replace('_', '-')}")) -result, errors = parse_decimal(formatted, locale) # Same locale! - -# Wrong: Different locales -formatted = str(number_format(Decimal("1234.56"), "lv-LV")) -result, errors = parse_decimal(formatted, "en_US") # Different locale! -``` - -### Float Arithmetic Precision Loss - -**Problem**: Calculations give unexpected results like `21.105000000000004` - -**Cause**: Using Python `float` arithmetic instead of `Decimal` for financial data - -**Solution**: -```python -from decimal import Decimal -from ftllexengine.parsing import parse_decimal -# Use `if errors:` to check for parse errors - -# Wrong: Float arithmetic loses precision -amount = 100.50 # float -vat = amount * 0.21 # 21.105000000000004 - -# Correct: Decimal arithmetic is exact -result, errors = parse_decimal("100,50", "lv_LV") -if not errors: - vat = result * Decimal("0.21") # Decimal('21.105') - exact! -``` - -### Special Values (NaN, Infinity) Accepted - -**Problem**: `parse_decimal("NaN", locale)` succeeds instead of returning error - -**Cause**: Babel's `parse_decimal()` accepts `NaN`, `Infinity`, and `Inf` (case-insensitive) as valid Decimal values per IEEE 754 standard - -**Solution**: -```python -from ftllexengine.parsing import parse_decimal -from ftllexengine.parsing import is_valid_decimal - -result, errors = parse_decimal(user_input, locale) - -if errors: - raise ValueError(f"Parse failed: {errors[0]}") - -# Reject NaN and Infinity for financial calculations -if not is_valid_decimal(result): - raise ValueError("Amount must be a finite number") -``` - -**Background**: These special values are mathematically valid but typically inappropriate for financial calculations. Use `is_valid_decimal()` type guard to reject them. - -### Date Parsing Ambiguity - -**Problem**: `parse_date("01/02/2025")` - is this Jan 2 or Feb 1? - -**Cause**: Ambiguous date format depends on locale - -**Solution**: -```python -from ftllexengine.parsing import parse_date -from ftllexengine.parsing import is_valid_date - -# US: Interprets as month-first (Jan 2) -result, _ = parse_date("01/02/2025", "en_US") # → date(2025, 1, 2) - -# Europe: Interprets as day-first (Feb 1) -result, _ = parse_date("01/02/2025", "lv_LV") # → date(2025, 2, 1) - -# Recommendation: Use ISO 8601 (unambiguous) -result, errors = parse_date("2025-01-02", locale) # Always Jan 2 -``` - -### Timezone Pattern Limitations - -**Problem**: `parse_datetime()` returns error with input containing timezone names - -**Cause**: Timezone name patterns (z, zz, zzz, zzzz, v, V series, O series, ZZZZ) are locale-specific and cannot be parsed by Python's `strptime`. These patterns are silently skipped during pattern conversion. - -**Unsupported patterns**: -- Timezone names: `z`, `zz`, `zzz`, `zzzz` (e.g., "PST", "Pacific Standard Time") -- Generic timezone: `v`, `vvvv` (e.g., "PT", "Pacific Time") -- Location timezone: `V`, `VV`, `VVV`, `VVVV` (e.g., "America/Los_Angeles") -- Localized GMT: `ZZZZ`, `O`, `OOOO` (e.g., "GMT-08:00") - -**Supported patterns**: -- UTC offset: `Z`, `ZZ`, `ZZZ`, `ZZZZZ` (e.g., "-0800", "-08:00") -- ISO offset: `x`, `xx`, `xxx`, `xxxx`, `xxxxx`, `X`, `XX`, `XXX`, `XXXX`, `XXXXX` - -**Solution**: -```python -from ftllexengine.parsing import parse_datetime - -# Wrong: Input with timezone name -result, errors = parse_datetime("2025-01-28 14:30 PST", "en_US") -# → errors (timezone name not parsed) - -# Correct: Pre-strip timezone name or use UTC offset -result, errors = parse_datetime("2025-01-28 14:30", "en_US") -# Or use ISO 8601 with offset -result, errors = parse_datetime("2025-01-28T14:30:00-08:00", "en_US") -``` - ---- - -## Known Limitations (strptime) - -Date/datetime parsing uses Python's `strptime()` with CLDR pattern conversion. Some Babel CLDR patterns cannot be represented in strptime format. - -### Pattern Conversion Reference - -**Fully Supported Patterns**: - -| CLDR | strptime | Example | -|:-----|:---------|:--------| -| `yyyy` | `%Y` | 2026 | -| `yy` | `%y` | 26 | -| `MM`, `M` | `%m` | 01, 1 | -| `dd`, `d` | `%d` | 28, 8 | -| `HH`, `H` | `%H` | 14, 4 | -| `mm`, `m` | `%M` | 30, 5 | -| `ss`, `s` | `%S` | 45, 5 | -| `a` | `%p` | AM, PM | - -**Partially Supported Patterns**: - -| CLDR | Issue | Workaround | -|:-----|:------|:-----------| -| `MMM`, `MMMM` | Language-dependent | Works for English locales only | -| `EEE`, `EEEE` | Language-dependent | Works for English locales only | -| `SSS` (milliseconds) | strptime expects 6 digits | Pad to microseconds or pre-process | - -**Unsupported Patterns (Silently Skipped)**: - -| Pattern | Description | Reason | -|:--------|:------------|:-------| -| `z`, `zz`, `zzz`, `zzzz` | Timezone names (PST) | Locale-specific, no strptime equivalent | -| `v`, `vvvv` | Generic timezone (PT) | No strptime equivalent | -| `V`, `VV`, `VVV`, `VVVV` | Location timezone | No strptime equivalent | -| `O`, `OOOO`, `ZZZZ` | Localized GMT | No strptime equivalent | -| `G`, `GG`, `GGG`, `GGGG`, `GGGGG` | Era (AD, BC) | No strptime equivalent | -| `Q`, `QQ`, `QQQ`, `QQQQ` | Quarter | No strptime equivalent | -| `w`, `ww` | Week of year | Limited strptime support | -| `W` | Week of month | No strptime equivalent | - -### Fractional Seconds - -**Limitation**: strptime `%f` expects exactly 6 digits (microseconds). - -**CLDR Pattern**: `SSS` (3 digits for milliseconds) - -**Behavior**: Patterns with `SSS` are converted to `%f`, which may fail if input has exactly 3 digits. - -```python -# Problem: strptime expects 6 digits -"14:30:45.123" # 3-digit milliseconds → parse error - -# Solutions: -# 1. Pad to 6 digits before parsing -input_padded = "14:30:45.123000" - -# 2. Use ISO 8601 format -"14:30:45.123000" # 6 digits → works -``` - -### Two-Digit Year Century Cutoff - -**Limitation**: strptime interprets `%y` (2-digit year) with a 2000 cutoff. - -| Input | Interpretation | -|:------|:---------------| -| `00-68` | 2000-2068 | -| `69-99` | 1969-1999 | - -```python -# "25" → 2025 (correct for current decade) -# "85" → 1985 (may be unexpected) -``` - -**Recommendation**: Use 4-digit years (`yyyy`) when possible. - -### Non-English Month/Day Names - -**Limitation**: strptime only parses English month/day names by default. - -```python -# Works: English locale -parse_date("January 15, 2026", "en_US") # OK - -# May fail: Non-English locale -parse_date("Januar 15, 2026", "de_DE") # German month name -# Depends on system locale configuration -``` - -**Recommendation**: Use numeric formats for non-English locales. - -### Workarounds Summary - -| Limitation | Workaround | -|:-----------|:-----------| -| Timezone names | Strip timezone before parsing; add after | -| Era patterns | Assume AD; handle BC separately | -| Milliseconds | Pad to 6 digits or remove fractional part | -| Non-English names | Use numeric date formats | -| Two-digit years | Use 4-digit years (yyyy) | - -**Design Note**: These limitations are inherent to Python's `strptime()` function. FTLLexEngine uses strptime intentionally to avoid external dependencies beyond Babel. For applications requiring broader pattern support, pre-process input strings before calling parse functions. - ---- - -## See Also - -- [LOCALE_GUIDE.md](LOCALE_GUIDE.md) - Locale formatting behavior -- [DOC_00_Index.md](DOC_00_Index.md) - Complete API reference -- [README.md](../README.md) - Getting started -- [CHANGELOG.md](../CHANGELOG.md) - Version history -- [Babel Documentation](https://babel.pocoo.org/) - Number and date formatting patterns - ---- +## Roundtrip Rule -**Python Requirement**: 3.13+ +For format → parse workflows, use the same locale on both sides. That keeps separators, currency symbols, and CLDR patterns aligned. diff --git a/docs/QUICK_REFERENCE.md b/docs/QUICK_REFERENCE.md index 918e8c5a..7d8bcb5f 100644 --- a/docs/QUICK_REFERENCE.md +++ b/docs/QUICK_REFERENCE.md @@ -1,966 +1,120 @@ --- -afad: "3.3" -version: "0.161.0" -domain: reference -updated: "2026-03-21" +afad: "3.5" +version: "0.163.0" +domain: REFERENCE +updated: "2026-04-22" route: - keywords: [cheat sheet, quick reference, examples, code snippets, patterns, copy paste, BabelImportError, cache, clear cache, CacheConfig, audit-log, require_clean, validate_message_schemas, validate_message_variables, require_locale_code, make_fluent_number, parse_fluent_number, FluentNumber] - questions: ["how to format message?", "how to parse number?", "how to use bundle?", "what exceptions can occur?", "how do I validate localization at boot?", "how do I validate one message schema?", "how do I canonicalize a locale code?", "how do I construct a FluentNumber manually?", "how to clear cache?", "how do I get the cache audit log?"] + keywords: [quick reference, cheat sheet, fluentbundle, fluentlocalization, parsing, validation, boot] + questions: ["show me the common commands", "what is the smallest working example?", "how do I boot localization safely?"] --- # FTLLexEngine Quick Reference -**One-page cheat sheet for common tasks** - -Python 3.13+ | [Full API Documentation](DOC_00_Index.md) | [Examples](../examples/) - ---- - -## Installation +## Install ```bash -# Parser-only (no external dependencies) -pip install ftllexengine - -# Full runtime with locale formatting -pip install ftllexengine[babel] +uv add ftllexengine[babel] ``` -**Requirements**: Python 3.13+ | Babel>=2.18.0 (optional for locale formatting) - ---- - -## Parser-Only Usage (No Babel Required) - -```python -from ftllexengine import parse_ftl, serialize_ftl, validate_resource - -# Parse FTL source to AST -resource = parse_ftl(""" -hello = Hello, World! -greeting = Welcome, { $name }! -""") - -# Inspect AST -for entry in resource.entries: - print(f"Message: {entry.id.name}") - -# Validate FTL source (syntax and semantic checks) -result = validate_resource(""" -hello = Hello, World! -greeting = Welcome, { $name }! -""") -if result.errors: - print(f"Errors: {result.errors}") - -# Serialize back to FTL string -ftl_source = serialize_ftl(resource) +```bash +uv add ftllexengine ``` ---- - -## Basic Usage - -### Single Locale Application +## Format One Message ```python from ftllexengine import FluentBundle -# Create bundle -bundle = FluentBundle("en_US") - -# Load translations -bundle.add_resource(""" -hello = Hello, World! -welcome = Welcome, { $name }! -emails = You have { $count -> - [one] one email - *[other] { $count } emails -}. -""") - -# Format messages -result, errors = bundle.format_pattern("hello") -# → "Hello, World!" - +bundle = FluentBundle("en_US", use_isolating=False) +bundle.add_resource("welcome = Hello, { $name }!") result, errors = bundle.format_pattern("welcome", {"name": "Alice"}) -# → "Welcome, Alice!" - -result, errors = bundle.format_pattern("emails", {"count": 5}) -# → "You have 5 emails." -``` - ---- - -### Multi-Locale Application (with fallback) - -```python -from ftllexengine import FluentLocalization - -# Create with fallback chain: Latvian → English -l10n = FluentLocalization(['lv', 'en']) - -# Add translations -l10n.add_resource('lv', """ -welcome = Laipni lūdzam, { $name }! -cart = Grozs -""") - -l10n.add_resource('en', """ -welcome = Welcome, { $name }! -cart = Cart -checkout = Checkout -""") - -# Format with automatic fallback -result, errors = l10n.format_value('welcome', {'name': 'Anna'}) -# → "Laipni lūdzam, Anna!" (from Latvian) - -result, errors = l10n.format_value('checkout') -# → "Checkout" (falls back to English) -``` - ---- - -### Loading from Files - -```python -from pathlib import Path -from ftllexengine import FluentBundle - -# Read .ftl file -ftl_source = Path("locales/en/main.ftl").read_text(encoding="utf-8") - -# Add to bundle -bundle = FluentBundle("en") -bundle.add_resource(ftl_source) - -result, errors = bundle.format_pattern("message-id") +assert errors == () +assert result == "Hello, Alice!" ``` ---- - -### Loading from Directory Structure +## Multi-Locale Fallback ```python from ftllexengine import FluentLocalization -from ftllexengine.localization import PathResourceLoader - -# Directory structure: -# locales/en/main.ftl -# locales/en/errors.ftl -# locales/lv/main.ftl - -loader = PathResourceLoader("locales/{locale}") -l10n = FluentLocalization(['lv', 'en'], ['main.ftl', 'errors.ftl'], loader) - -result, errors = l10n.format_value('welcome') -``` - ---- - -## Common Patterns - -### Error Handling (Production Pattern) - -```python -# ALWAYS check errors in production -result, errors = bundle.format_pattern("msg", {"var": value}) - -if errors: - for error in errors: - logger.warning(f"Translation error: {error}") - # error is FrozenFluentError; use error.category for classification - -print(result) # Always returns usable fallback -``` - -### Error Handling (Test Pattern) - -```python -# In tests/examples, use underscore to explicitly ignore errors -# (When errors are not relevant to what you're testing) -result, _ = bundle.format_pattern("msg", {"var": value}) -assert result == "Expected output" -``` - ---- - -### Accessing Attributes - -```python -# FTL with attributes -bundle.add_resource(""" -submit-button = Submit - .tooltip = Click to submit form - .aria-label = Submit button -""") - -# Access attribute -result, errors = bundle.format_pattern("submit-button", attribute="tooltip") -# → "Click to submit form" - -# Access value (default) -result, errors = bundle.format_pattern("submit-button") -# → "Submit" -``` - ---- - -### Validation Before Loading - -```python -from pathlib import Path - -bundle = FluentBundle("en") -ftl_source = Path("locale/main.ftl").read_text() - -# Validate before adding -result = bundle.validate_resource(ftl_source) - -if not result.is_valid: - print(f"Found {result.error_count} syntax errors:") - for error in result.errors: - location = f"line {error.line}" if error.line else "unknown" - print(f" - {location}: {error.message[:80]}") - sys.exit(1) - -if result.warning_count > 0: - print(f"Found {result.warning_count} warnings:") - for warning in result.warnings: - location = f"line {warning.line}" if warning.line else "unknown" - print(f" - {location}: {warning.message}") - -# Safe to add -bundle.add_resource(ftl_source) -``` - ---- - -### Custom Functions - -```python -# Define custom function (FILESIZE example) -def FILESIZE(bytes_count: int, *, precision: int = 2) -> str: - """Format file size in human-readable format.""" - size = float(bytes_count) - units = ["B", "KB", "MB", "GB", "TB"] - - for unit in units: - if size < 1024.0: - return f"{size:.{precision}f} {unit}" - size /= 1024.0 - return f"{size:.{precision}f} PB" - -# Register function -bundle = FluentBundle("en") -bundle.add_function("FILESIZE", FILESIZE) - -# Use in FTL -bundle.add_resource(""" -file-info = { $filename } ({ FILESIZE($bytes) }) -""") - -result, errors = bundle.format_pattern("file-info", {"filename": "video.mp4", "bytes": 157286400}) -# → "video.mp4 (150.00 MB)" -``` - -**Note**: For currency formatting, use the built-in `CURRENCY()` function instead of custom implementations. See Built-in Functions section below. - ---- - -### Locale-Aware Custom Functions (Factory Pattern) - -```python -def make_greeting_function(locale: str): - """Factory for locale-aware custom function.""" - def GREETING(name: str, *, formal: str = "false") -> str: - is_formal = formal.lower() == "true" - if locale.startswith("lv"): - return f"Labdien, {name}!" if is_formal else f"Sveiki, {name}!" - return f"Good day, {name}!" if is_formal else f"Hello, {name}!" - return GREETING - -bundle = FluentBundle("lv_LV") -bundle.add_function("GREETING", make_greeting_function(bundle.locale)) - -bundle.add_resource('msg = { GREETING($name, formal: "false") }') -result, errors = bundle.format_pattern("msg", {"name": "Anna"}) -# → "Sveiki, Anna!" -``` - ---- - -## Core API Reference - -### FluentBundle - -**Constructor**: -```python -FluentBundle( - locale: str, - /, - *, - use_isolating: bool = True, - cache: CacheConfig | None = None, - functions: FunctionRegistry | None = None, - max_source_size: int | None = None, - max_nesting_depth: int | None = None, - max_expansion_size: int | None = None, - strict: bool = True, -) -``` - -**Factory Methods**: -```python -# Auto-detect system locale (from LC_ALL, LC_MESSAGES, LANG) -bundle = FluentBundle.for_system_locale() - -# Context manager support (no-op: use for structured scoping only) -with FluentBundle("en", cache=CacheConfig()) as bundle: - bundle.add_resource("hello = Hello!") # Cache cleared immediately - result, _ = bundle.format_pattern("hello") # Cache populated -``` - -**Key Methods**: -```python -bundle.add_resource(ftl_source: str) -> tuple[Junk, ...] -bundle.format_pattern(message_id, args=None, *, attribute=None) -> tuple[str, tuple[FrozenFluentError, ...]] -bundle.validate_resource(ftl_source: str) -> ValidationResult -bundle.has_message(message_id: str) -> bool -bundle.has_attribute(message_id: str, attribute: str) -> bool -bundle.get_message_ids() -> list[str] -bundle.get_message_variables(message_id: str) -> frozenset[str] -bundle.get_all_message_variables() -> dict[str, frozenset[str]] -bundle.introspect_message(message_id: str) -> MessageIntrospection -bundle.introspect_term(term_id: str) -> MessageIntrospection -bundle.add_function(name: str, func: Callable) -> None -bundle.clear_cache() -> None -bundle.get_cache_stats() -> CacheStats | None -bundle.get_cache_audit_log() -> tuple[CacheAuditLogEntry, ...] | None -bundle.get_babel_locale() -> str -``` - -**Properties**: -```python -bundle.locale -> LocaleCode # Read-only canonical lowercase underscore locale -bundle.use_isolating -> bool # Read-only -bundle.cache_config -> CacheConfig | None # Read-only; None when caching disabled -bundle.cache_enabled -> bool # Read-only -bundle.cache_usage -> int # Read-only -bundle.max_source_size -> int # Read-only -bundle.max_nesting_depth -> int # Read-only -bundle.max_expansion_size -> int # Read-only -bundle.strict -> bool # Read-only -bundle.function_registry -> FunctionRegistry # Read-only -``` - ---- - -### FluentLocalization - -**Constructor**: -```python -FluentLocalization( - locales: Iterable[str], - resource_ids: Iterable[str] | None = None, - resource_loader: ResourceLoader | None = None, - *, - use_isolating: bool = True, - cache: CacheConfig | None = None, - on_fallback: Callable[[FallbackInfo], None] | None = None, - strict: bool = True, -) -``` - -**Key Methods**: -```python -l10n.add_resource(locale: str, ftl_source: str) -> tuple[Junk, ...] -l10n.format_pattern(message_id, args=None, *, attribute=None) -> tuple[str, tuple[FrozenFluentError, ...]] -l10n.format_value(message_id, args=None) -> tuple[str, tuple[FrozenFluentError, ...]] -l10n.validate_resource(ftl_source: str) -> ValidationResult -l10n.has_message(message_id: str) -> bool -l10n.has_attribute(message_id: str, attribute: str) -> bool -l10n.get_message_ids() -> list[str] -l10n.get_message_variables(message_id: str) -> frozenset[str] -l10n.get_all_message_variables() -> dict[str, frozenset[str]] -l10n.introspect_message(message_id: str) -> MessageIntrospection -l10n.introspect_term(term_id: str) -> MessageIntrospection | None -l10n.add_function(name: str, func: Callable) -> None -l10n.clear_cache() -> None -l10n.get_cache_stats() -> LocalizationCacheStats | None -l10n.get_cache_audit_log() -> dict[str, tuple[CacheAuditLogEntry, ...]] | None -l10n.get_load_summary() -> LoadSummary -l10n.require_clean() -> LoadSummary -l10n.validate_message_variables(message_id: str, expected_variables: frozenset[str] | set[str]) -> MessageVariableValidationResult -l10n.validate_message_schemas(expected_schemas: Mapping[str, frozenset[str] | set[str]]) -> tuple[MessageVariableValidationResult, ...] -l10n.get_bundles() -> Generator[FluentBundle] -l10n.get_babel_locale() -> str -``` - -**Properties**: -```python -l10n.locales -> tuple[str, ...] # Read-only -l10n.strict -> bool # Read-only -l10n.cache_config -> CacheConfig | None # Read-only -l10n.cache_enabled -> bool # Read-only -``` - -**Caching**: Pass `cache=CacheConfig()` for 50x speedup on repeated format calls. - -**Boot Validation**: -```python -l10n.require_clean() -l10n.validate_message_variables("invoice-total", frozenset({"amount", "customer"})) -l10n.validate_message_schemas({ - "invoice-total": frozenset({"amount", "customer"}), -}) -``` - ---- - -## FTL Syntax Quick Reference - -### Messages - -```ftl -# Simple message -hello = Hello, World! - -# With variable -welcome = Welcome, { $name }! - -# Multi-line -description = This is a long message - that spans multiple lines. -``` - -### Attributes - -```ftl -login-button = Login - .tooltip = Click to log in - .aria-label = Login button -``` - -### Select Expressions (Plurals) - -```ftl -emails = You have { $count -> - [one] one email - *[other] { $count } emails -}. -``` - -### Select Expressions (Gender/Custom) - -```ftl -greeting = { $gender -> - [male] Mr. { $name } - [female] Ms. { $name } - *[other] { $name } -} -``` - -### Terms (Reusable) - -```ftl --brand-name = Acme Corp --product-name = Super Widget - -welcome = Welcome to { -brand-name }! -about = About { -product-name } -``` - -### Functions - -```ftl -# Built-in NUMBER function -quantity = { NUMBER($amount, minimumFractionDigits: 2) } - -# Built-in DATETIME function -date = { DATETIME($timestamp, dateStyle: "short") } -# Built-in CURRENCY function -price = { CURRENCY($amount, currency: "EUR") } - -# Custom function -file-size = { FILESIZE($bytes) } -``` - ---- - -## Built-in Functions - -### NUMBER(value, options) - -**Options**: -- `minimumFractionDigits` (int): Minimum decimal places (default: 0) -- `maximumFractionDigits` (int): Maximum decimal places (default: 3) -- `useGrouping` (bool): Use thousand separators (default: true) -- `pattern` (string): Custom number pattern (overrides other options) -**Examples**: -```ftl -price = { NUMBER($amount, minimumFractionDigits: 2) } -percent = { NUMBER($value, maximumFractionDigits: 0) }% -accounting = { NUMBER($amount, pattern: "#,##0.00;(#,##0.00)") } -``` - -### DATETIME(value, options) - -**Options**: -- `dateStyle`: "short" | "medium" | "long" | "full" (default: "medium") -- `timeStyle`: "short" | "medium" | "long" | "full" | null (default: null) -- `pattern` (string): Custom datetime pattern (overrides style options) -**Examples**: -```ftl -short-date = { DATETIME($timestamp, dateStyle: "short") } -full-datetime = { DATETIME($timestamp, dateStyle: "long", timeStyle: "short") } -iso-date = { DATETIME($timestamp, pattern: "yyyy-MM-dd") } +l10n = FluentLocalization(["lv_LV", "en_US"], strict=False) +l10n.add_resource("en_US", "checkout = Checkout") +l10n.add_resource("lv_LV", "checkout = Apmaksa") +result, errors = l10n.format_value("checkout") +assert errors == () +assert result == "Apmaksa" ``` -### CURRENCY(value, options) - -**Returns**: `FluentNumber` (usable as selector in plural/select expressions). - -**Options**: -- `currency` (string, **required**): ISO 4217 currency code (e.g., "USD", "EUR", "JPY") -- `currencyDisplay`: "symbol" | "code" | "name" (default: "symbol") - -**Examples**: -```ftl -# Symbol display (default) -price = { CURRENCY($amount, currency: "USD") } -# en_US → "$1,234.56" -# lv_LV → "1\xa0234,56\xa0$" (CLDR uses NBSP U+00A0) - -# Code display -price-code = { CURRENCY($amount, currency: "EUR", currencyDisplay: "code") } -# en_US → "EUR1,234.56" - -# Name display -price-name = { CURRENCY($amount, currency: "EUR", currencyDisplay: "name") } -# → "1,234.56 euros" -``` - -**CLDR Compliance**: -- Currency-specific decimals: JPY (0), BHD/KWD/OMR (3), most others (2) -- Locale-specific symbol placement: en_US (before), lv_LV/de_DE (after with space) -- Uses Babel for CLDR-compliant formatting - ---- - -## Manual FluentNumber Construction +## Parse Localized Input ```python from decimal import Decimal +from ftllexengine.parsing import parse_currency, parse_decimal -from ftllexengine import FluentNumber -from ftllexengine.parsing import parse_fluent_number -from ftllexengine.runtime import make_fluent_number - -raw_amount = make_fluent_number(Decimal("12.3400")) -rendered_amount = make_fluent_number(42, formatted="42.00") -localized_amount = make_fluent_number(Decimal("1234.50"), formatted="1 234,50 EUR") -manual_amount = FluentNumber(value=Decimal("5.00"), formatted="5.00", precision=2) -parsed_amount, errors = parse_fluent_number("1 234,50", "lv_LV") -``` - ---- - -## Parsing API - -**Bi-directional localization**: Parse locale-formatted strings back to Python types. - -```python -from ftllexengine.parsing import parse_decimal, parse_fluent_number, parse_date, parse_currency -from ftllexengine.parsing import is_valid_decimal, is_valid_date, is_valid_currency - -# Parse numbers (guards accept None) -result, errors = parse_decimal("1 234,56", "lv_LV") -if is_valid_decimal(result): - amount = result # Decimal('1234.56') - -# Parse directly to FluentNumber -result, errors = parse_fluent_number("1 234,56", "lv_LV") -if not errors and result is not None: - amount_for_ftl = result # FluentNumber(value=Decimal('1234.56'), formatted='1 234,56', precision=2) - -# Parse dates -result, errors = parse_date("28.01.2025", "lv_LV") -if is_valid_date(result): - date_value = result # date(2025, 1, 28) - -# Parse currency -result, errors = parse_currency("1 234,56 €", "lv_LV") -if is_valid_currency(result): - amount, currency = result # (Decimal('1234.56'), 'EUR') - -# Note: Yen sign (¥) is ambiguous -# Resolves to CNY for zh_* locales, JPY otherwise -result, errors = parse_currency("¥1,234", "ja_JP") # JPY -result, errors = parse_currency("¥1,234", "zh_CN") # CNY - -# Note: Pound sign (£) is ambiguous -# Resolves to EGP for ar_* locales, GBP otherwise -result, errors = parse_currency("£100", "en_GB", infer_from_locale=True) # GBP -result, errors = parse_currency("£100", "ar_EG", infer_from_locale=True) # EGP -``` - -**Key Functions**: -- `parse_decimal(value, locale)` → `tuple[Decimal | None, tuple[FrozenFluentError, ...]]` -- `parse_fluent_number(value, locale)` → `tuple[FluentNumber | None, tuple[FrozenFluentError, ...]]` -- `parse_date(value, locale)` → `tuple[date | None, tuple[FrozenFluentError, ...]]` -- `parse_datetime(value, locale, tzinfo=None)` → `tuple[datetime | None, tuple[FrozenFluentError, ...]]` -- `parse_currency(value, locale)` → `tuple[tuple[Decimal, str] | None, tuple[FrozenFluentError, ...]]` - -**Implementation**: Uses Babel for number parsing, Python 3.13 stdlib (`strptime`, `fromisoformat`) with Babel CLDR patterns for date parsing. - -**Babel Required**: All parsing functions raise `BabelImportError` if Babel is not installed. Install with `pip install ftllexengine[babel]`. - -**See**: [PARSING_GUIDE.md](PARSING_GUIDE.md) for complete guide with best practices and examples. - ---- - -## Introspection - -### Get Message Variables - -```python -bundle.add_resource("welcome = Hello, { $firstName } { $lastName }!") - -variables = bundle.get_message_variables("welcome") -print(variables) # frozenset({'firstName', 'lastName'}) -``` - -### Batch Variable Extraction - -```python -bundle.add_resource(""" -greeting = Hello, { $name }! -farewell = Goodbye, { $firstName } { $lastName }! -simple = No variables -""") +amount, errors = parse_decimal("12,450.50", "en_US") +assert errors == () +assert amount == Decimal("12450.50") -all_vars = bundle.get_all_message_variables() -print(all_vars["greeting"]) # frozenset({'name'}) -print(all_vars["farewell"]) # frozenset({'firstName', 'lastName'}) -print(all_vars["simple"]) # frozenset() +money, errors = parse_currency("12.450,50 EUR", "de_DE", default_currency="EUR") +assert errors == () +assert money == (Decimal("12450.50"), "EUR") ``` -### Full Introspection +## Validate FTL Before Loading ```python -bundle.add_resource(""" -msg = Hello, { $name }! You have { NUMBER($count) } items. -""") - -info = bundle.introspect_message("msg") - -print(info.get_variable_names()) -# → frozenset({'name', 'count'}) - -print(info.get_function_names()) -# → frozenset({'NUMBER'}) -``` - -### Function Introspection - -```python -# Access the function registry (read-only property) -registry = bundle.function_registry - -# List all available functions -functions = registry.list_functions() -print(functions) # ["NUMBER", "DATETIME", "CURRENCY"] - -# Check if function exists -if "CURRENCY" in registry: - print("CURRENCY available") - -# Get function metadata -info = registry.get_function_info("NUMBER") -print(f"Python name: {info.python_name}") -print(f"Parameters: {info.param_mapping}") +from ftllexengine import validate_resource -# Iterate over all functions -for func_name in registry: - info = registry.get_function_info(func_name) - print(f"{func_name}: {info.python_name}") +result = validate_resource("welcome = Hello, { $name }!") +assert result.is_valid +assert result.error_count == 0 ``` ---- - -## Type Annotations +## Boot Validation ```python -from ftllexengine import FluentBundle, FluentValue -from ftllexengine.localization import MessageId, LocaleCode, FTLSource - -def format_message( - bundle: FluentBundle, - msg_id: MessageId, - args: dict[str, FluentValue] | None = None, -) -> str: - """Format message with error logging.""" - result, errors = bundle.format_pattern(msg_id, args) - if errors: - for error in errors: - logger.warning(f"Translation error: {error}") - return result - -def create_bundle(locale: LocaleCode, ftl_source: FTLSource) -> FluentBundle: - """Create and populate bundle.""" - bundle = FluentBundle(locale) - bundle.add_resource(ftl_source) - return bundle -``` - -**`FluentValue`**: Type-hint for resolver arguments. Union of `str | int | Decimal | datetime | date | FluentNumber | None | Sequence[FluentValue] | Mapping[str, FluentValue]`. (`bool` is absent: it is an `int` subtype accepted by raw interpolation but rejected by numeric formatting functions; convert explicitly with `int(flag)` or `str(flag)`.) - -**`ParseResult[T]`**: Type-hint for parsing function returns. Alias for `tuple[T | None, tuple[FrozenFluentError, ...]]`. Import from `ftllexengine` or `ftllexengine.parsing`. - ---- - -## Thread Safety - -**FluentBundle and FluentLocalization are always thread-safe**. All public methods are synchronized via internal RWLock (readers-writer lock). Multiple concurrent read operations execute in parallel; write operations acquire exclusive access. +from pathlib import Path +from tempfile import TemporaryDirectory +from ftllexengine import LocalizationBootConfig -### Pattern 1: Shared Bundle (Recommended) +with TemporaryDirectory() as tmp: + base = Path(tmp) / "locales" / "en_us" + base.mkdir(parents=True) + (base / "main.ftl").write_text("welcome = Hello, { $name }!\n", encoding="utf-8") -```python -# Create bundle once, share across threads -bundle = FluentBundle("en_US") -bundle.add_resource(ftl_source) - -# All operations are thread-safe (reads AND writes) -bundle.add_resource(more_ftl) # Thread-safe -bundle.add_function("CUSTOM", my_function) # Thread-safe -result, errors = bundle.format_pattern("msg") # Thread-safe + cfg = LocalizationBootConfig.from_path( + locales=("en_US",), + resource_ids=("main.ftl",), + base_path=Path(tmp) / "locales" / "{locale}", + message_schemas={"welcome": {"name"}}, + required_messages=frozenset({"welcome"}), + ) + l10n, summary, schema_results = cfg.boot() + assert summary.all_clean + assert schema_results[0].is_valid ``` -### Pattern 2: Task-Local Bundles (Per-Task Customization) +## Register A Custom Function ```python -from contextvars import ContextVar +from ftllexengine import FluentBundle -_bundle_var: ContextVar[FluentBundle | None] = ContextVar("_bundle_var", default=None) +def UPPER(value: str) -> str: + return value.upper() -def get_bundle() -> FluentBundle: - bundle = _bundle_var.get() - if bundle is None: - bundle = FluentBundle("en_US") - bundle.add_resource(ftl_source) - _bundle_var.set(bundle) - return bundle +bundle = FluentBundle("en_US", use_isolating=False) +bundle.add_function("UPPER", UPPER) +bundle.add_resource("headline = { UPPER($text) }") +result, errors = bundle.format_pattern("headline", {"text": "coffee"}) +assert errors == () +assert result == "COFFEE" ``` -`ContextVar` provides automatic isolation per thread and per async task, with no dynamic attribute access. - ---- - -## Cache Management - -Clear module-level caches for testing, hot-reload, or memory management. +## Clear Module Caches ```python from ftllexengine import clear_module_caches -# Clear all library caches in one call clear_module_caches() +clear_module_caches(frozenset({"parsing.dates", "locale"})) ``` - -**Individual Cache Clear Functions**: -```python -from ftllexengine.core.locale_utils import clear_locale_cache -from ftllexengine.core.locale_utils import require_locale_code -from ftllexengine.parsing import clear_date_caches, clear_currency_caches -from ftllexengine.introspection import clear_introspection_cache, clear_iso_cache -from ftllexengine.runtime.locale_context import LocaleContext - -# Clear specific caches -clear_locale_cache() # Babel locale objects -locale_code = require_locale_code(" en-US ", "user.locale") -clear_date_caches() # Date/datetime patterns -clear_currency_caches() # Currency maps and patterns -clear_introspection_cache() # Message introspection results -clear_iso_cache() # ISO territory/currency data -LocaleContext.clear_cache() # Locale context instances -``` - ---- - -## Common Checks - -### Check if Message Exists - -```python -if bundle.has_message("premium-feature"): - result, _ = bundle.format_pattern("premium-feature") -else: - print("Feature not available") -``` - -### List All Messages - -```python -message_ids = bundle.get_message_ids() -print(f"Loaded {len(message_ids)} messages") -for msg_id in sorted(message_ids): - print(f" - {msg_id}") -``` - -### Check Required Variables - -```python -required = bundle.get_message_variables("welcome") -provided = {"firstName": "John", "lastName": "Doe"} - -missing = required - set(provided.keys()) -if missing: - print(f"Missing variables: {missing}") -``` - ---- - -## Important Warnings - -### RTL Languages Require use_isolating=True - -```python -# WRONG - Breaks Arabic/Hebrew -bundle = FluentBundle("ar_EG", use_isolating=False) - -# CORRECT - Default is safe -bundle = FluentBundle("ar_EG") # use_isolating=True by default -``` - -**Rule**: Only use `use_isolating=False` for: -- Documentation examples (cleaner output) -- Unit tests (exact assertions) -- LTR-only applications (verifiable constraint) - -### Errors Raise in Strict Mode (Default) - -```python -# In strict mode (default), format_pattern() raises FormattingIntegrityError on ANY error -# In non-strict mode (strict=False), format_pattern() returns (result, errors) tuple -bundle = FluentBundle("en", strict=False) # opt in to soft-error recovery -result, errors = bundle.format_pattern("missing-message") -# result → "{missing-message}" # Readable fallback -# errors → (FrozenFluentError(...),) # category=ErrorCategory.REFERENCE - -# Always check errors in non-strict production code -if errors: - logger.warning(f"Translation errors: {errors}") -``` - ---- - -## Exception Types - -```python -from ftllexengine import ( - FrozenFluentError, # Immutable error (returned in errors tuple) - ErrorCategory, # Error classification: REFERENCE, RESOLUTION, CYCLIC, PARSE, FORMATTING -) - -from ftllexengine.core.babel_compat import BabelImportError # Raised when Babel not installed -``` - -**Note**: `FrozenFluentError` instances are returned in the errors tuple, NOT raised. Use `error.category` to classify errors (e.g., `ErrorCategory.REFERENCE` for missing messages). `BabelImportError` is raised when parsing functions are called without Babel installed. - ---- - -## AST Manipulation (Advanced) - -### Parse and Serialize - -```python -from ftllexengine import parse_ftl, serialize_ftl -from ftllexengine.syntax.ast import Message - -# Parse FTL to AST -resource = parse_ftl(ftl_source) - -# Inspect AST -for entry in resource.entries: - if isinstance(entry, Message): - print(f"Message: {entry.id.name}") - -# Serialize back to FTL -ftl_output = serialize_ftl(resource) - -# Validate AST before serialization -from ftllexengine.syntax import SerializationValidationError - -try: - ftl_output = serialize_ftl(resource, validate=True) -except SerializationValidationError as e: - print(f"Invalid AST: {e}") - -# Depth guard prevents stack overflow from malicious ASTs -from ftllexengine.syntax import SerializationDepthError - -try: - ftl_output = serialize_ftl(resource, max_depth=100) # default -except SerializationDepthError as e: - print(f"AST too deep: {e}") -``` - -### Visitor Pattern - -```python -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Message -from ftllexengine.syntax.visitor import ASTVisitor - -class MessageCollector(ASTVisitor): - def __init__(self): - super().__init__() - self.messages = [] - - def visit_Message(self, node: Message): - self.messages.append(node.id.name) - return self.generic_visit(node) - -resource = parse_ftl(ftl_source) -collector = MessageCollector() -collector.visit(resource) -print(f"Found messages: {collector.messages}") -``` - ---- - -## Supported Locales - -**CLDR plural rules via Babel**: 200+ locales with full Unicode CLDR compliance. Includes all major languages (English, Spanish, French, German, Chinese, Japanese, Arabic, Russian, etc.) plus regional variants. Unsupported locales fall back to English-style one/other rules. - ---- - -## Getting Help - -- **Full API Documentation**: [DOC_00_Index.md](DOC_00_Index.md) -- **Examples**: [examples/](../examples/) -- **Contributing**: [CONTRIBUTING.md](../CONTRIBUTING.md) -- **Issues**: https://github.com/resoltico/ftllexengine/issues - ---- - -## Version Info - -```python -from ftllexengine import ( - __version__, # Package version - __fluent_spec_version__, # FTL spec version (1.0) - __spec_url__, # Spec URL - __recommended_encoding__, # UTF-8 -) - -print(f"FTLLexEngine {__version__}") -print(f"Fluent Specification {__fluent_spec_version__}") -``` - ---- - -**Python Requirement**: 3.13+ diff --git a/docs/RELEASE_PROTOCOL.md b/docs/RELEASE_PROTOCOL.md new file mode 100644 index 00000000..7bf67b72 --- /dev/null +++ b/docs/RELEASE_PROTOCOL.md @@ -0,0 +1,299 @@ +--- +afad: "3.5" +version: "0.163.0" +domain: RELEASE +updated: "2026-04-22" +route: + keywords: [release, gh, github release, pypi, tag, assets, publish, verify, worktree, main] + questions: ["how do I cut a release?", "how do I publish GitHub assets?", "how do I verify a release handoff?", "how do I rerun publish for an existing tag?"] +--- + +# Release Protocol + +**Purpose**: Publish a tagged FTLLexEngine release through GitHub CLI and verify the GitHub Release and PyPI handoff. +**Prerequisites**: `gh` installed and authenticated, release version already set in `pyproject.toml`, and a checkout topology that can produce a clean release payload. + +## Overview + +The release flow is `gh`-first and branch-based. Do not push release commits directly to `main`. +Use a release branch, open a PR, merge it, verify the merged `main` commit is green, tag that +commit, and then verify the GitHub Release and published artifacts directly. + +## Step 0: Verify GitHub CLI Readiness + +Before doing anything else, run: + +```bash +gh --version +gh auth status +``` + +If either command fails, stop immediately. Do not continue with release work until `gh` is both +installed and authenticated for the target repository. + +## Step 1: Choose The Authoritative Checkout + +Before any release build or branch creation, inspect the checkout that the user will keep using +after the release. Call it the primary checkout. + +```bash +git rev-parse --show-toplevel +git branch --show-current +git status --short +git fetch origin --prune +git fetch origin --tags +git rev-list --left-right --count HEAD...origin/main +``` + +Rules: + +- If the primary checkout is clean and current enough for release work, release from it directly. +- If the primary checkout is intentionally dirty, contains unrelated unpublished work, or should + not be disturbed, create a clean release worktree from the same repository and do release work + there. +- Do not run the release from a dirty checkout just because the intended payload currently lives + there. +- If `git fetch origin --tags` fails with `would clobber existing tag`, stop and inspect the tag + divergence before continuing. Compare the local and remote tag directly, delete only the stale + local tag, and rerun the tag fetch: + +```bash +TAG=v0.36.0 +git rev-parse "$TAG" +git ls-remote --tags origin "refs/tags/$TAG" "refs/tags/$TAG^{}" +git tag -d "$TAG" +git fetch origin --tags +``` + +Recommended clean-worktree flow: + +```bash +PRIMARY_CHECKOUT="$(git rev-parse --show-toplevel)" +git fetch origin --prune +git fetch origin --tags +RELEASE_WORKTREE="$(mktemp -d -t ftllexengine-release-XXXXXX)" +git worktree add -b release/X.Y.Z "$RELEASE_WORKTREE" origin/main +cd "$RELEASE_WORKTREE" +``` + +If the unpublished release payload exists only in the dirty primary checkout, move it explicitly +before running release gates in the clean worktree. Preferred: create a local bootstrap branch that +captures the payload, then add the release worktree from that branch. Acceptable: export one +explicit patch and apply it inside the release worktree. + +Bootstrap-branch example: + +```bash +git switch -c codex/release-bootstrap-X.Y.Z +git add -A +git commit -m "release: bootstrap X.Y.Z payload" +RELEASE_WORKTREE="$(mktemp -d -t ftllexengine-release-XXXXXX)" +git worktree add -b release/X.Y.Z "$RELEASE_WORKTREE" codex/release-bootstrap-X.Y.Z +cd "$RELEASE_WORKTREE" +``` + +## Step 2: Pre-flight And Release Readiness + +Run the local gates first: + +```bash +gh pr list --state open \ + --json number,title,url,headRefName,mergeStateStatus,isDraft,author,statusCheckRollup +bash -n scripts/*.sh +./check.sh +PY_VERSION=3.14 ./scripts/lint.sh +PY_VERSION=3.14 ./scripts/test.sh +uv run python scripts/validate_docs.py +uv run python scripts/validate_version.py +uv build +``` + +Also confirm: + +- `CHANGELOG.md` contains the target release entry. +- `pyproject.toml` has the final target version. +- the release checkout is based on current `origin/main` or you explicitly understand the delta. + +Do not cut the release branch or tag anything while any gate is red. + +## Step 3: Release Branch And Staging Checkpoint + +Create the release branch and treat staging as a scope-verification checkpoint: + +```bash +git checkout -b release/X.Y.Z +git add +git status --short +git diff --cached --name-status +git diff --cached --stat +git commit -m "release: bump version to X.Y.Z" +git push origin release/X.Y.Z +``` + +Requirements before continuing: + +- `git status --short` shows no intended release file left unstaged or untracked. +- `git diff --cached --name-status` matches the expected file set. +- `git diff --cached --stat` confirms the staged payload is the release you intend to ship. + +If the staged diff is incomplete or polluted, fix the branch before committing. + +## Step 4: Pull Request And CI Checkpoint + +Open the pull request: + +```bash +gh pr create \ + --title "release: bump version to X.Y.Z" \ + --base main \ + --head release/X.Y.Z \ + --body "Release X.Y.Z" +``` + +Then verify scope and wait for checks: + +```bash +gh pr diff --name-only +gh pr view --json number,state,mergeStateStatus,statusCheckRollup,url +gh pr checks +``` + +Rules: + +- `gh pr diff --name-only` must still match the intended release file set. +- If you push another commit, reopen both the staging checkpoint and this PR diff checkpoint. +- Do not continue until the required PR checks are green. + +## Step 5: Merge, Verify `main`, And Handle Partial Merge Failures + +Merge the PR through GitHub, then verify the merged `main` commit itself before tagging: + +```bash +REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)" +gh pr merge --repo "$REPO" --merge --delete-branch \ + --subject "release: bump version to X.Y.Z (#)" +``` + +If `gh pr merge` exits non-zero, do not assume the merge failed. Inspect the PR directly: + +```bash +gh pr view --repo "$REPO" --json number,state,mergedAt,headRefName,baseRefName,url +``` + +If GitHub already reports `state` as `MERGED` and `mergedAt` is populated, treat that merged +state as authoritative and continue with the post-merge checks instead of retrying blindly. + +Then fetch and verify the merged `main` handoff: + +```bash +git fetch origin --prune +git fetch origin --tags +git switch --detach origin/main +MAIN_SHA="$(git rev-parse HEAD)" +gh run list --workflow=test.yml --branch=main --commit "$MAIN_SHA" --limit=20 +gh run view --log-failed +``` + +Do not create the tag until the exact merged `main` commit you intend to tag has a successful +`test.yml` run. + +## Step 6: Tag, Publish Workflow, And Asset Convergence + +Create and push the version tag only after Step 5 is green: + +```bash +git tag vX.Y.Z +git push origin vX.Y.Z +``` + +Verify the remote tag exists: + +```bash +REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)" +gh api "repos/$REPO/git/ref/tags/vX.Y.Z" +``` + +The tag push triggers `.github/workflows/publish.yml`. Monitor it directly: + +```bash +TAG_SHA="$(git rev-list -n 1 vX.Y.Z)" +gh run list --workflow=publish.yml --event=push --commit "$TAG_SHA" --limit=20 +gh run view --log-failed +``` + +If you need to rerun publication for the existing tag, rerun the workflow against that tag. Do not +move or recreate the tag: + +```bash +gh workflow run publish.yml -f release_tag=vX.Y.Z +gh workflow run publish.yml -f release_tag=vX.Y.Z -f publish_to_testpypi=true +``` + +If GitHub Release assets need manual convergence after the workflow, use: + +```bash +GH_TOKEN=... ./scripts/publish-github-release-assets.sh vX.Y.Z +GH_TOKEN=... ./scripts/verify-github-release.sh vX.Y.Z +``` + +## Step 7: Verify Public Release State + +Do not treat workflow success alone as authoritative. Inspect the published release object: + +```bash +gh release view vX.Y.Z --json tagName,isDraft,isPrerelease,publishedAt,url,assets +``` + +Required assets: + +- `ftllexengine-X.Y.Z.tar.gz` +- `ftllexengine-X.Y.Z-py3-none-any.whl` +- `ftllexengine-X.Y.Z.sha256` + +Then verify download, checksum, and installability: + +```bash +TMP_DIR="$(mktemp -d)" +gh release download vX.Y.Z \ + -p 'ftllexengine-X.Y.Z-py3-none-any.whl' \ + -p 'ftllexengine-X.Y.Z.tar.gz' \ + -p 'ftllexengine-X.Y.Z.sha256' \ + -D "$TMP_DIR" + +( + cd "$TMP_DIR" + shasum -a 256 -c "ftllexengine-X.Y.Z.sha256" +) + +python3.13 -m venv "$TMP_DIR/py313" +"$TMP_DIR/py313/bin/pip" install --no-cache-dir "ftllexengine==X.Y.Z" +"$TMP_DIR/py313/bin/python" -c "import ftllexengine as pkg; print(pkg.__version__)" +rm -rf "$TMP_DIR" +``` + +The release is not complete until the release object, assets, and real install test all succeed. + +## Step 8: Branch And Checkout Hygiene + +Clean up the release branch topology and reconcile the primary checkout: + +```bash +git remote prune origin +gh api "repos/$REPO/branches" --paginate --jq '.[].name' +``` + +Requirements: + +- The remote `release/X.Y.Z` branch is gone. +- No stale historical `release/` branches remain locally or remotely. +- If a dedicated release worktree was used, the primary checkout is explicitly returned to a + truthful `main`: + +```bash +git -C "$PRIMARY_CHECKOUT" switch main +git -C "$PRIMARY_CHECKOUT" pull --ff-only +``` + +- Any still-needed unpublished local work from the old primary checkout is moved to a named branch + or exported patch. +- Disposable release worktrees are removed after the release closes. diff --git a/docs/TERMINOLOGY.md b/docs/TERMINOLOGY.md index 7829e44f..6bea954e 100644 --- a/docs/TERMINOLOGY.md +++ b/docs/TERMINOLOGY.md @@ -1,443 +1,41 @@ --- -afad: "3.3" -version: "0.153.0" -domain: terminology -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: TERMINOLOGY +updated: "2026-04-22" route: - keywords: [terminology, definitions, glossary, fluent terms, message, term, pattern, placeable, resource] - questions: ["what is a message?", "what is a term?", "what is a pattern?", "fluent terminology?"] + keywords: [terminology, glossary, message, term, resource, locale code, strict mode] + questions: ["what does resource mean here?", "what is the difference between a message and a term?", "what does strict mode mean in FTLLexEngine?"] --- -# FTLLexEngine Terminology Guide +# Terminology -**Purpose**: Standard terminology reference for FTLLexEngine. +**Purpose**: Keep the project’s documentation and code comments aligned on a small set of terms. **Prerequisites**: None. -This document establishes the standard terminology used throughout FTLLexEngine's codebase, documentation, and communication. Consistent terminology improves clarity and reduces confusion. +## Core Terms ---- - -## Core Terminology - -### Fluent System Terms - -| Term | Definition | Usage Example | -|------|------------|---------------| -| **Fluent** | The localization system and specification | "Fluent supports asymmetric localization" | -| **FTL** | The file format (Fluent Translation List) | "Save translations in .ftl files" | -| **.ftl files** | Files using the FTL format | "Load main.ftl and errors.ftl" | -| **Fluent syntax** | The language syntax used in .ftl files | "Learn Fluent syntax at projectfluent.org" | -| **FTL specification** | The formal grammar and rules (v1.0) | "Implements FTL specification v1.0" | - -**Rationale**: "Fluent" is the system, "FTL" is the file format, "Fluent syntax" is the language. - ---- - -### Message Structure Terms - -| Term | Definition | Code Example | Prose Example | -|------|------------|--------------|---------------| -| **Message** | A translatable unit with an ID | `Message` class | "The welcome message" | -| **Message ID** | The identifier for a message | `message_id` (snake_case) | "message ID" (two words) | -| **Message identifier** | Formal variant of message ID | `message_id: str` | "message identifier" | -| **Term** | Reusable translation (prefixed with `-`) | `Term` class | "The -brand term" | -| **Term ID** | The identifier for a term | `term_id` (snake_case) | "term ID" | -| **Pattern** | The text content of a message/term | `Pattern` class | "The message pattern" | -| **Placeable** | An expression wrapped in `{ }` braces | `Placeable` class | "A variable placeable" | -| **Attribute** | Named sub-value of a message | `Attribute` class | "The tooltip attribute" | - -**Naming Conventions**: -- **Code**: Use snake_case (`message_id`, `term_id`) -- **Prose**: Use two words ("message ID", "term ID") -- **Classes**: Use PascalCase (`Message`, `Term`, `Pattern`) - ---- - -## CRITICAL: "Resource" Disambiguation - -**WARNING**: The term "resource" has **three distinct meanings** in FTLLexEngine. **ALWAYS specify which meaning** when using this term. - -### The Three Meanings of "Resource" - -#### 1. FTL Resource (AST) - -**What it is**: The parsed Abstract Syntax Tree (AST) root node returned by `parse_ftl()`. - -**Type**: `Resource` class from `ftllexengine.syntax.ast` - -**Usage Context**: AST manipulation, linting, transformation, serialization - -**How to Reference**: -- [OK] **"the Resource AST node"** -- [OK] **"the parsed Resource"** -- [OK] **"Resource object"** -- [OK] **"AST Resource"** -- [AVOID] ~~"resource"~~ (ambiguous) - -**Code Example**: -```python -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Resource - -# Correct: Clear context -resource_ast: Resource = parse_ftl(ftl_source) # Resource AST node -for entry in resource_ast.entries: - print(entry) - -# Ambiguous: What type of resource? -resource = parse_ftl(ftl_source) # Is this AST, source, or loader? -``` - -**Prose Example**: -```markdown -[OK] "The Resource AST node contains all parsed entries" -[OK] "parse_ftl() returns a Resource object representing the AST" -[AVOID] "The resource contains all entries" (which resource?) -``` - ---- - -#### 2. FTL Source (String) - -**What it is**: The string content containing FTL syntax, passed to `add_resource(source: str)`. - -**Type**: `str` (or `FTLSource` type alias) - -**Usage Context**: Loading translations at runtime, validation, file I/O - -**How to Reference**: -- [OK] **"FTL source"** -- [OK] **"FTL source text"** -- [OK] **"FTL source code"** -- [OK] **"ftl_source"** (variable name) -- [AVOID] ~~"resource"~~ (ambiguous) - -**Code Example**: -```python -from ftllexengine import FluentBundle -from ftllexengine.localization import FTLSource - -# Correct: Clear naming -ftl_source: FTLSource = """ -hello = Hello, World! -""" -bundle.add_resource(ftl_source) # String parameter - -# Ambiguous: What type of resource? -resource = "hello = Hello!" # Is this a source string or AST? -bundle.add_resource(resource) -``` - -**Prose Example**: -```markdown -[OK] "Pass FTL source to add_resource()" -[OK] "The FTL source text is validated before loading" -[AVOID] "Pass the resource to add_resource()" (which resource?) -``` - ---- - -#### 3. Resource Loader - -**What it is**: System for loading .ftl files from disk/network. - -**Types**: `PathResourceLoader` (file system), `ResourceLoader` (protocol) - -**Usage Context**: Multi-locale applications with file-based translations - -**How to Reference**: -- [OK] **"resource loader"** -- [OK] **"PathResourceLoader instance"** -- [OK] **"ResourceLoader protocol"** -- [OK] **"loader"** (variable name) -- [AVOID] ~~"resource"~~ (ambiguous) - -**Code Example**: -```python -from ftllexengine.localization import PathResourceLoader, ResourceLoader - -# Correct: Clear naming -loader: ResourceLoader = PathResourceLoader("locales/{locale}") -ftl_source = loader.load("en", "main.ftl") - -# Ambiguous: What type of resource? -resource = PathResourceLoader("locales/{locale}") # This is a LOADER -``` - -**Prose Example**: -```markdown -[OK] "PathResourceLoader loads .ftl files from disk" -[OK] "Implement the ResourceLoader protocol for custom loaders" -[AVOID] "The resource loads .ftl files" (resource doesn't load files, loaders do!) -``` - ---- - -### Disambiguation Decision Tree - -When writing documentation or code, ask: - -``` -Am I talking about... - -├─ An AST object from parse_ftl()? -│ └─ Use: "Resource AST", "Resource object", variable: resource_ast -│ -├─ A string containing FTL syntax? -│ └─ Use: "FTL source", "FTL source text", variable: ftl_source -│ -└─ A system that loads .ftl files? - └─ Use: "resource loader", "PathResourceLoader", variable: loader -``` - ---- - -### Variable Naming Conventions - -**Recommended variable names** to avoid ambiguity: - -```python -# FTL Resource (AST) -resource_ast = parse_ftl(ftl_source) -ast_root = parse_ftl(ftl_source) -parsed_resource = parse_ftl(ftl_source) - -# FTL Source (String) -ftl_source = "hello = World" -ftl_content = Path("main.ftl").read_text() -source_text = "..." - -# Resource Loader -loader = PathResourceLoader("locales/{locale}") -resource_loader = PathResourceLoader("locales/{locale}") -disk_loader = PathResourceLoader("locales/{locale}") -``` - -**Avoid**: -```python -# [WRONG] Ambiguous - which type of resource? -resource = ... -res = ... -r = ... -``` +| Term | Meaning | +|:-----|:--------| +| Message | Public FTL entry such as `welcome = Hello` | +| Term | Private reusable FTL entry such as `-brand = FTLLexEngine` | +| FTL source | Raw `.ftl` text before parsing | +| FTL resource | Parsed `Resource` AST | +| Resource loader | Object that returns FTL source for a locale/resource id pair | +| Locale code | Canonical locale identifier used by the runtime | +| Strict mode | Fail-fast behavior that raises integrity exceptions instead of returning soft fallbacks | +| Boot validation | Startup path that proves resource cleanliness and schema correctness before traffic | ---- - -### Method Naming Context - -Some methods use "resource" in their name - context determines meaning: - -| Method | "Resource" Meaning | Full Type | -|--------|-------------------|-----------| -| `add_resource(source)` | **FTL source (string)** | Parameter is `str` | -| `validate_resource(source)` | **FTL source (string)** | Parameter is `str` | -| `parse_ftl(source)` returns | **Resource AST** | Returns `Resource` object | -| `PathResourceLoader(...)` | **Resource loader** | Creates loader instance | -| `ResourceLoader.load(...)` | **FTL source (string)** | Returns `str` | - -**Note**: `add_resource()` and `validate_resource()` take **FTL source** (string), NOT Resource AST objects. - ---- - -## Other Important Terms - -### Locale Terms - -| Term | Definition | Examples | -|------|------------|----------| -| **Locale** | Language and regional variant | "en_US", "lv_LV", "ar_SA" | -| **Locale code** | String identifier for locale | `locale: str`, `LocaleCode` type alias | -| **Language code** | Two-letter ISO 639-1 code | "en", "lv", "ar" | -| **Territory code** | Two-letter ISO 3166-1 code | "US", "LV", "SA" | -| **CLDR** | Common Locale Data Repository | "CLDR plural rules" | - -**Formatting**: Use underscore (`en_US`) or hyphen (`en-US`) - both supported. - ---- - -### Error Handling Terms - -| Term | Definition | Usage | -|------|------------|-------| -| **Errors tuple** | Immutable tuple of FrozenFluentError instances | `errors: tuple[FrozenFluentError, ...]` | -| **Fallback** | Default value when error occurs | "Returns readable fallback" | -| **Graceful degradation** | Continues with fallback instead of crashing | "Never raises, always degrades gracefully" | -| **Junk entry** | Unparseable FTL syntax | `Junk` AST node type | - ---- - -### AST Terms - -| Term | Definition | Type | -|------|------------|------| -| **AST** | Abstract Syntax Tree | `Resource` root with entries | -| **Entry** | Top-level AST node | `Message`, `Term`, `Comment`, `Junk` | -| **Expression** | Evaluable AST node | `VariableReference`, `FunctionReference`, etc. | -| **Selector** | Select expression condition | Part of `SelectExpression` | -| **Variant** | Select expression branch | `Variant` with key and value | - ---- - -### Function Terms - -| Term | Definition | Examples | -|------|------------|----------| -| **Built-in function** | Provided by FTLLexEngine | NUMBER, DATETIME, CURRENCY | -| **Custom function** | User-defined function | FILESIZE, PHONE | -| **Function name** | UPPERCASE identifier | "NUMBER", "CURRENCY" | -| **Function parameter** | Named argument to function | minimumFractionDigits, currencyCode | -| **camelCase** | FTL parameter convention | minimumFractionDigits | -| **snake_case** | Python parameter convention | minimum_fraction_digits | - ---- - -## Writing Guidelines - -### Documentation Style - -1. **Be explicit about "resource" meaning**: - ```markdown - [AVOID] "Load the resource into the bundle" - [OK] "Load the FTL source into the bundle" - [OK] "Parse the Resource AST using parse_ftl()" - [OK] "Use the resource loader to fetch .ftl files" - ``` - -2. **Use consistent capitalization**: - ```markdown - [OK] "Fluent" (system), "FTL" (format), "Fluent syntax" (language) - [AVOID] "fluent", "ftl", "FTL syntax" - ``` - -3. **Prose vs Code formatting**: - ```markdown - [OK] "The message ID 'welcome' is used in `bundle.format_pattern()`" - [AVOID] "The `message ID` welcome is used in bundle.format_pattern()" - ``` +## Resource Disambiguation -### Code Style +“Resource” can mean different things in localization systems. In this repository, prefer explicit phrases: -1. **Variable names should indicate type**: - ```python - # Good - ftl_source = "hello = World" - resource_ast = parse_ftl(ftl_source) - loader = PathResourceLoader("...") +- Say `FTL source` for raw text. +- Say `Resource` or `FTL resource` for the parsed AST. +- Say `resource loader` for the object that loads source material. - # Avoid - resource = "hello = World" # Which type? - r = parse_ftl(ftl_source) # Unclear - ``` - -2. **Type annotations clarify intent**: - ```python - from ftllexengine.syntax.ast import Resource - from ftllexengine.localization import FTLSource, ResourceLoader - - def process_ftl(ftl_source: FTLSource) -> Resource: - resource_ast: Resource = parse_ftl(ftl_source) - return resource_ast - - def load_translations(loader: ResourceLoader, locale: str) -> FTLSource: - ftl_source: FTLSource = loader.load(locale, "main.ftl") - return ftl_source - ``` - ---- - -## Terminology Checklist - -When reviewing documentation or code, verify: - -- [ ] "Resource" is always qualified (AST, source, or loader) -- [ ] Message ID uses correct case (prose: "message ID", code: `message_id`) -- [ ] "Fluent" refers to system, "FTL" refers to file format -- [ ] Variable names indicate their type (`ftl_source` vs `resource_ast`) -- [ ] Capitalization is consistent ("Fluent", not "fluent") -- [ ] Parameter names use correct case (FTL: camelCase, Python: snake_case) - ---- - -## Common Pitfalls - -### Pitfall 1: Ambiguous "resource" - -```markdown -[AVOID] "The bundle loads resources from disk" -[OK] "The bundle loads FTL source from resource loaders on disk" -``` - -### Pitfall 2: Mixing "Fluent" and "FTL" - -```markdown -[AVOID] "FTL is a localization system for .ftl files" -[OK] "Fluent is a localization system using .ftl files (FTL format)" -``` - -### Pitfall 3: Inconsistent capitalization - -```python -# [WRONG] Inconsistent -from ftllexengine import fluentBundle # Wrong -from ftllexengine import FLUENTBUNDLE # Wrong - -# Correct -from ftllexengine import FluentBundle -``` - ---- - -## Quick Reference - -**When in doubt**: - -| Context | Use This Term | -|---------|---------------| -| AST object from parse_ftl() | "Resource AST", `resource_ast` | -| String with FTL syntax | "FTL source", `ftl_source` | -| File loader system | "resource loader", `loader` | -| The Fluent system | "Fluent" | -| File format (.ftl) | "FTL" or ".ftl files" | -| The syntax language | "Fluent syntax" | -| Translatable unit | "message" | -| Message identifier | "message ID" (prose), `message_id` (code) | - ---- - -## Glossary - -Complete alphabetical reference: - -| Term | Short Definition | Full Details | -|------|------------------|--------------| -| **AST** | Abstract Syntax Tree | Parsed representation of FTL source | -| **Attribute** | Named sub-value of message | `.tooltip`, `.aria-label` | -| **Bundle** | Single-locale message collection | `FluentBundle` class | -| **CLDR** | Common Locale Data Repository | Unicode locale data standard | -| **Entry** | Top-level AST node | Message, Term, Comment, or Junk | -| **Expression** | Evaluable AST component | Variables, functions, selects | -| **Fallback** | Default when error occurs | Readable placeholder value | -| **Fluent** | The localization system | Overall specification and ecosystem | -| **Fluent syntax** | The language syntax | Grammar rules for .ftl files | -| **FTL** | Fluent Translation List file format | .ftl file extension | -| **FTL source** | String containing FTL syntax | What you pass to `add_resource()` | -| **Function** | Formatting function | NUMBER, DATETIME, custom | -| **Junk** | Unparseable FTL syntax | Parser error recovery node | -| **Locale** | Language and region | "en_US", "lv_LV" | -| **Localization** | Multi-locale orchestration | `FluentLocalization` class | -| **Message** | Translatable unit with ID | `Message` AST node | -| **Message ID** | Message identifier | Key used in `format_pattern()` | -| **Pattern** | Text content of message | `Pattern` AST node | -| **Placeable** | Expression in `{ }` braces | `Placeable` AST node | -| **Resource (AST)** | Parsed FTL structure | `Resource` object from `parse_ftl()` | -| **Resource loader** | System loading .ftl files | `PathResourceLoader`, custom loaders | -| **Selector** | Select expression condition | Plural category, gender, etc. | -| **Term** | Reusable translation | Prefixed with `-` | -| **Variant** | Select expression branch | Key-value pair in select | - ---- +## Naming Style -**See Also**: -- [README.md](../README.md) - Project overview -- [DOC_00_Index.md](DOC_00_Index.md) - Complete API reference -- [QUICK_REFERENCE.md](QUICK_REFERENCE.md) - Quick examples +- Use `Fluent` when referring to the Fluent specification or runtime concepts. +- Use `FTL` when referring to the language syntax or `.ftl` files. +- Use readable input examples such as `en_US`, `de_DE`, and `lv_LV`; reserve lowercase forms like `en_us` for normalized internal/cache-key examples. diff --git a/docs/THREAD_SAFETY.md b/docs/THREAD_SAFETY.md index 4ca68ff9..f360662e 100644 --- a/docs/THREAD_SAFETY.md +++ b/docs/THREAD_SAFETY.md @@ -1,225 +1,29 @@ --- -afad: "3.3" -version: "0.161.0" -domain: architecture -updated: "2026-03-21" +afad: "3.5" +version: "0.163.0" +domain: ARCHITECTURE +updated: "2026-04-22" route: - keywords: [thread safety, concurrency, async, thread-local, contextvars, race condition, WeakKeyDictionary, timeout, TimeoutError] - questions: ["is FTLLexEngine thread-safe?", "can I use FluentBundle in async?", "what are the thread-safety guarantees?", "how to set lock timeout?"] + keywords: [thread safety, concurrency, FluentBundle, FluentLocalization, AsyncFluentBundle, shared bundle] + questions: ["is FluentBundle thread-safe?", "can I share a localization object across threads?", "what does AsyncFluentBundle do?"] --- -# Thread Safety Reference +# Thread Safety -**Purpose**: Document thread-safety architectural decisions and guarantees. -**Prerequisites**: Basic concurrency concepts. +**Purpose**: Describe the concurrency guarantees of the public runtime classes. +**Prerequisites**: None. ## Overview -FTLLexEngine provides explicit thread-safety guarantees for different components. This document consolidates all architectural decisions related to concurrency. +`FluentBundle` and `FluentLocalization` are designed for concurrent use. Read operations can run concurrently, while resource and function mutations take exclusive access internally. Callers do not need to provide their own external lock around normal formatting calls. -**Quick Reference**: +## Practical Rules -| Component | Thread-Safe | Async-Safe | Notes | -|:----------|:------------|:-----------|:------| -| `FluentBundle` | Yes (all ops) | Yes | RWLock-protected reads and writes | -| `FluentLocalization` | Yes (all ops) | Yes | RWLock-protected bundle map; brief per-operation lock for bundle lookup | -| `FluentParserV1` | Yes | Yes | Stateless parsing | -| `IntegrityCache` | Yes | Yes | Lock-protected | -| `FunctionRegistry` | Copy-on-write | Copy-on-write | Copied on bundle init | -| Introspection cache | Accepted race | Accepted race | Redundant computation, no corruption | -| Parse error context | Thread-local | Requires clear | Call `clear_parse_error()` before parse | +- Share a `FluentBundle` across threads when all requests use the same locale. +- Share a `FluentLocalization` across threads when the locale fallback chain is fixed. +- Use `AsyncFluentBundle` in asyncio handlers when you want bundle work offloaded through `asyncio.to_thread()`. +- Do not try to mutate a bundle from inside a custom function triggered by that same bundle’s formatting call. ---- - -## FluentBundle Thread Safety - -`FluentBundle` is **fully thread-safe** for all operations via internal RWLock. - -**Guarantees**: -- All read operations (`format_pattern()`, `has_message()`, introspection) acquire read lock (concurrent) -- All write operations (`add_resource()`, `add_function()`) acquire write lock (exclusive) -- `format_pattern()` creates isolated `ResolutionContext` per call -- `IntegrityCache` uses `Lock` for internal synchronization -- `FunctionRegistry` is copied on initialization (copy-on-write) -- Batch operations (`get_all_message_variables()`) acquire single read lock for atomic snapshot - -**Write Operations**: -- `add_resource()` - Parses outside lock (stateless parser), acquires write lock for registration only -- `add_function()` - Acquires write lock for registry mutation - -**Acquisition Limitations**: -The following acquisition patterns raise `RuntimeError`: -- Read-to-write upgrade: a thread holding a read lock cannot acquire the write lock (deadlock prevention). -- Write-to-read downgrade: a thread holding the write lock cannot acquire a read lock. FluentBundle write paths are single-level operations; they do not need to read-validate while holding the write lock. -- Write lock reentrancy: a thread holding the write lock cannot acquire it again. FluentBundle write paths (`add_resource`, `add_function`) are single-level; nested acquisition is a design error. - -Read lock reentrancy is supported: a thread holding a read lock can acquire it again (enables custom function re-entry into `format_pattern`). - -If you need lazy-loading patterns, load resources before formatting or use a separate bundle instance. - -**Timeout Support**: -`RWLock.read()` and `RWLock.write()` accept an optional `timeout` parameter (seconds). `None` (default) waits indefinitely. `0.0` attempts non-blocking acquisition. Positive float sets a deadline. Raises `TimeoutError` on expiry. Reentrant read acquisitions never wait, so timeout is irrelevant in that path. On write timeout, the internal `_waiting_writers` counter is correctly decremented (via `try/finally`), preventing reader starvation from abandoned writes. - -```python -# RWLock is an internal implementation detail used by FluentBundle and FluentLocalization. -# It is not part of the public API. Thread safety is provided automatically by those classes. -lock = bundle._rwlock # internal only; callers use FluentBundle directly -try: - with lock.write(timeout=5.0): - ... -except TimeoutError: - ... -``` - ---- - -## FluentLocalization Thread Safety - -`FluentLocalization` is **fully thread-safe** for all operations via internal RWLock. The RWLock protects the bundle map; per-bundle formatting is independently protected by each bundle's own RWLock. - -**Guarantees**: -- `format_value()`, `format_pattern()`, `has_message()`: briefly acquire read lock per bundle map lookup only; actual formatting proceeds under the per-bundle RWLock after the bundle reference is retrieved -- `require_clean()`: reads the immutable initialization snapshot without mutating bundle state -- `validate_message_variables()`: resolves one message through the fallback chain and validates its AST without mutation -- `validate_message_schemas()`: reuses fallback-chain bundle lookups and message AST reads; no mutation -- `get_cache_stats()` and `get_cache_audit_log()`: acquire read lock for the full duration to produce a consistent aggregate snapshot -- All write operations (`add_resource()`, `add_function()`, `clear_cache()`) acquire write lock (exclusive) -- Lazy bundle creation via `_get_or_create_bundle()` uses double-checked locking: read lock for already-initialized bundles (concurrent), write lock with double-check only when creating a new bundle; callers already holding the write lock (`add_resource`) use `_create_bundle()` directly (no lock re-acquisition) - -**Cache Invalidation**: -`add_resource()`, `add_function()`, and `clear_cache()` clear the relevant cache as part of the mutation — not deferred to any exit point. - ---- - -## Resolution Context (Explicit State) - -The resolver uses **explicit context passing** instead of thread-local state. - -**Design**: -```python -@dataclass(slots=True) -class ResolutionContext: - """Per-resolution state, isolated per call.""" - stack: list[str] # Cycle detection path - _seen: set[str] # O(1) membership check - max_depth: int # Stack overflow protection - depth_guard: DepthGuard # Per-call depth tracking -``` - -**Why Explicit**: -- Thread-safe without locks -- Async framework compatible (no thread-local conflicts) -- Easier testing (no state reset needed) -- Clear dependency flow - -**Instance Lifecycle**: -Each `format_pattern()` call creates a fresh `ResolutionContext`. This ensures complete isolation between concurrent resolutions. Object pooling is intentionally avoided to prevent synchronization overhead. - ---- - -## Global Depth Guard (Contextvars) - -Global resolution depth uses `contextvars` for async-safe per-task state. - -**Purpose**: Prevent custom functions from bypassing depth limits by calling back into `bundle.format_pattern()`. - -```python -from contextvars import ContextVar - -_global_resolution_depth: ContextVar[int] = ContextVar( - "fluent_resolution_depth", default=0 -) - -class GlobalDepthGuard: - """Track depth across format_pattern calls.""" - def __enter__(self): - current = _global_resolution_depth.get() - if current >= self._max_depth: - raise FrozenFluentError(...) # category=RESOLUTION - self._token = _global_resolution_depth.set(current + 1) -``` - -**Security Model**: -Without global tracking, a malicious custom function could: -1. Receive control during resolution -2. Call `bundle.format_pattern()` (creates fresh context) -3. Repeat recursively, bypassing per-context limits -4. Cause stack overflow - -`GlobalDepthGuard` prevents this by tracking depth across all contexts per async task. - -**Thread Spawning Limitation**: -`ContextVar` provides per-thread isolation. Custom functions that spawn **new threads** bypass the guard: each new thread starts with the `ContextVar` default (depth 0) and can initiate its own full-depth resolution chain independent of the spawning thread. The guard prevents re-entry within a single thread or async task; it does not prevent cross-thread recursive invocation. If custom functions may spawn threads that call `format_pattern()`, apply additional rate limiting at the custom function level. - ---- - -## Introspection Cache (Accepted Race) - -The introspection module uses `WeakKeyDictionary` **without locking**. - -**Architectural Decision**: This is an **intentional trade-off** accepting potential race conditions for better common-case performance. - -**Location**: `src/ftllexengine/introspection/message.py:59-83` - -**Trade-off Analysis**: - -| Alternative | Overhead | Benefit | -|:------------|:---------|:--------| -| RLock | Synchronization on every read | Full thread safety | -| Thread-local cache | Memory duplication | No contention | -| **Current (lock-free)** | **None** | **Best read performance** | - -**Why Acceptable**: -- Introspection is a **pure read operation** on immutable AST nodes -- Worst case: redundant computation (cache miss), **never data corruption** -- Typical usage: read-mostly workload, concurrent introspection is rare -- Cache entries are computed identically regardless of which thread wins - -**Explicit Documentation**: -```python -# Thread Safety (Accepted Race Condition): -# WeakKeyDictionary is NOT thread-safe for concurrent writes. Concurrent -# introspection of the same Message/Term from multiple threads may cause -# race conditions during cache write operations. -# -# Trade-off: Lock-free reads provide better performance than synchronized access. -``` - -**When This Matters**: Only if multiple threads simultaneously introspect the same `Message`/`Term` object for the first time. The only consequence is both threads compute and cache the same result. - ---- - -## Copy-on-Write Registry - -`FluentBundle` copies any registry passed to the constructor. - -**Purpose**: Prevent shared mutable state between bundles. - -```python -class FluentBundle: - def __init__(self, locale: str, /, *, functions: FunctionRegistry | None = None): - # Always copy to prevent external mutation affecting this bundle - if functions is not None: - self._functions = functions.copy() - else: - self._functions = get_shared_registry().copy() -``` - -**Guarantees**: -- No bundle shares a mutable registry with another bundle -- Modifications to the original registry after bundle creation have no effect -- The built-in registry is frozen and copied if `add_function()` is called - ---- - -## Summary - -| Pattern | Rationale | -|:--------|:----------| -| Explicit `ResolutionContext` | Thread isolation without locks | -| `contextvars` for depth | Async-safe global state | -| Lock-free introspection cache | Performance over perfect synchronization | -| Thread-local parse errors | Hot-path optimization | -| Copy-on-write registry | Prevent shared mutable state | +## Async -**Key Principle**: FTLLexEngine optimizes for the common case (single-threaded or read-heavy concurrent workloads) while documenting explicit requirements for edge cases (async thread reuse, concurrent cache writes). +`AsyncFluentBundle` is not a separate resolver implementation. It wraps the same runtime behavior in an async-facing API and delegates the heavy work to worker threads so the event loop stays responsive. diff --git a/docs/TYPE_HINTS_GUIDE.md b/docs/TYPE_HINTS_GUIDE.md index 9ab13095..8d32d035 100644 --- a/docs/TYPE_HINTS_GUIDE.md +++ b/docs/TYPE_HINTS_GUIDE.md @@ -1,812 +1,41 @@ --- -afad: "3.3" -version: "0.153.0" -domain: type-hints -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: TYPE_HINTS +updated: "2026-04-22" route: - keywords: [type hints, typing, mypy, type safety, pep 695, typeis, type guards, annotations, FluentValue] - questions: ["how to use type hints?", "how to configure mypy?", "how to write type safe code?", "what types can FluentValue hold?"] + keywords: [type hints, mypy, FluentValue, ParseResult, TypeIs, LocaleCode] + questions: ["what types does the library expose?", "how do I type parse results?", "which helpers are type guards?"] --- -# Type Hints Guide - FTLLexEngine +# Type Hints Guide -**Purpose**: Leverage Python 3.13+ type hints with FTLLexEngine. -**Prerequisites**: Basic Python typing knowledge. +**Purpose**: Show the main public typing surfaces exposed by FTLLexEngine. +**Prerequisites**: Python typing basics and mypy or another static checker. -FTLLexEngine is built with modern Python 3.13+ features and provides full `mypy --strict` type safety. This guide shows how to leverage type hints for better code quality and IDE support. +## Overview ---- - -## Quick Start - -### Basic Type-Safe Function - -```python -from ftllexengine import FluentBundle -from ftllexengine.localization import MessageId - -def format_message(bundle: FluentBundle, msg_id: MessageId) -> str: - """Format message with proper type annotations.""" - result, errors = bundle.format_pattern(msg_id) - if errors: - # errors is tuple[FrozenFluentError, ...] - fully typed, immutable - for error in errors: - print(f"Error: {error}") - return result - -# Usage -bundle = FluentBundle("en") -bundle.add_resource("hello = Hello, World!") -output = format_message(bundle, "hello") -``` - ---- - -## Python 3.13+ Features in FTLLexEngine - -### 1. PEP 695: Type Parameter Syntax (`type` keyword) - -FTLLexEngine uses the new `type` keyword for type aliases: - -```python -# FTLLexEngine source code (Python 3.13+) -type MessageId = str -type LocaleCode = str -type ResourceId = str -type FTLSource = str -``` - -**Your Code**: -```python -from ftllexengine.localization import MessageId, LocaleCode, FTLSource - -# More descriptive than plain 'str' -def load_translations(locale: LocaleCode, source: FTLSource) -> None: - bundle = FluentBundle(locale) - bundle.add_resource(source) -``` +The package is fully typed and exposes useful public aliases and guard-style helpers. -**Benefits**: -- Better IDE autocomplete -- Self-documenting code -- Type checker understands intent -- Easier refactoring - ---- +Common surfaces: -### 2. PEP 742: TypeIs for Type Guards +- `FluentValue`: values accepted by formatting functions. +- `ParseResult[T]`: standard `(value | None, tuple[FrozenFluentError, ...])` parsing return type. +- `LocaleCode`, `MessageId`, `ResourceId`, `FTLSource`: semantic aliases for localization boundaries. +- `is_valid_decimal()`, `is_valid_date()`, `is_valid_datetime()`, `is_valid_currency()`: `TypeIs` guards for parse results. +- `CurrencyCode` and `TerritoryCode`: typed ISO identifiers. -FTLLexEngine uses `TypeIs` for runtime type narrowing: +## ParseResult Pattern ```python -from typing import TypeIs -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Message, Term +from decimal import Decimal +from ftllexengine import ParseResult -# Using built-in type guards (static methods) -ftl_source = "hello = World" -resource = parse_ftl(ftl_source) - -for entry in resource.entries: - if Message.guard(entry): - # TypeIs narrows type to Message - print(entry.id.name) # Type checker knows entry is Message - print(entry.value) # Safe access to message-specific attributes - - if Term.guard(entry): - # TypeIs narrows type to Term - print(entry.id.name) # entry is Term here +def parse_amount(raw: str) -> ParseResult[Decimal]: + from ftllexengine.parsing import parse_decimal + return parse_decimal(raw, "en_US") ``` ---- - -### 3. Pattern Matching with Type Safety - -Python 3.10+ pattern matching + FTLLexEngine types: - -```python -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Message, Term, Comment, Junk - -resource = parse_ftl(ftl_source) - -for entry in resource.entries: - match entry: - case Message(id=id_node, value=pattern): - print(f"Message: {id_node.name}") - # Pattern matching provides type narrowing - if pattern: - print(f" Value: {pattern}") - - case Term(id=id_node): - print(f"Term: {id_node.name}") - - case Comment(): - print("Comment found") - - case Junk(content=content): - print(f"Parse error: {content[:50]}") -``` - ---- - -## Type Aliases Reference - -### Core Type Aliases - -```python -from ftllexengine.localization import MessageId, LocaleCode, ResourceId, FTLSource - -# MessageId - Message identifiers -msg_id: MessageId = "welcome" - -# LocaleCode - Locale codes -locale: LocaleCode = "en_US" - -# ResourceId - Resource file identifiers -resource_id: ResourceId = "main.ftl" - -# FTLSource - FTL source strings -ftl_source: FTLSource = "hello = Hello!" -``` - -**Type Hierarchy**: -```python -# PEP 695 type aliases are TypeAliasType objects -type(MessageId) # -MessageId.__value__ == str # True (underlying type is str) - -# Values are plain str at runtime -isinstance("hello", str) # True - MessageId values are str instances - -# Type aliases are transparent: both resolve to str -# They serve as documentation aids, not enforcement mechanisms -def format(msg_id: MessageId) -> str: ... -format("en_US") # Accepted by type checkers (MessageId is just str) -``` - ---- - -## Practical Examples - -### Example 1: Message Formatter Service - -```python -from __future__ import annotations - -from ftllexengine import FluentBundle, FrozenFluentError -from ftllexengine.localization import MessageId, LocaleCode, FTLSource -import logging - -logger = logging.getLogger(__name__) - - -class MessageFormatter: - """Type-safe message formatting service.""" - - def __init__(self, locale: LocaleCode) -> None: - """Initialize formatter for locale. - - Args: - locale: Locale code (e.g., "en_US", "lv_LV") - """ - self._bundle: FluentBundle = FluentBundle(locale) - self._locale: LocaleCode = locale - - def load_translations(self, ftl_source: FTLSource) -> None: - """Load FTL translations into bundle. - - Args: - ftl_source: FTL source string - """ - self._bundle.add_resource(ftl_source) - - def format( - self, - msg_id: MessageId, - args: dict[str, object] | None = None, - ) -> str: - """Format message with error logging. - - Args: - msg_id: Message identifier - args: Variable substitutions - - Returns: - Formatted message string - """ - result, errors = self._bundle.format_pattern(msg_id, args) - - if errors: - self._log_errors(msg_id, errors) - - return result - - def _log_errors( - self, - msg_id: MessageId, - errors: tuple[FrozenFluentError, ...], - ) -> None: - """Log translation errors. - - Args: - msg_id: Message that had errors - errors: Tuple of errors encountered (immutable) - """ - for error in errors: - logger.warning( - "Translation error in message %r: %s", - msg_id, - error, - extra={"locale": self._locale}, - ) - - @property - def locale(self) -> LocaleCode: - """Get current locale.""" - return self._locale - - -# Usage -formatter = MessageFormatter("en_US") -formatter.load_translations(""" -welcome = Hello, { $name }! -""") - -message = formatter.format("welcome", {"name": "Alice"}) -print(message) # "Hello, Alice!" -``` - ---- - -### Example 2: Multi-Locale Manager with Type Safety - -```python -from __future__ import annotations - -from collections.abc import Generator -from typing import Protocol - -from ftllexengine import FluentBundle, FluentLocalization -from ftllexengine.localization import ( - LocaleCode, - MessageId, - ResourceId, - FTLSource, -) - - -class TranslationLoader(Protocol): - """Protocol for translation loading systems.""" - - def load(self, locale: LocaleCode, resource_id: ResourceId) -> FTLSource: - """Load FTL resource for locale. - - Args: - locale: Locale code - resource_id: Resource identifier - - Returns: - FTL source content - """ - ... - - -class LocalizationManager: - """Type-safe multi-locale manager.""" - - def __init__( - self, - locales: list[LocaleCode], - loader: TranslationLoader, - ) -> None: - """Initialize manager. - - Args: - locales: Locale codes in fallback order - loader: Translation loading system - """ - self._locales: tuple[LocaleCode, ...] = tuple(locales) - self._loader: TranslationLoader = loader - self._l10n: FluentLocalization | None = None - - def initialize(self, resource_ids: list[ResourceId]) -> None: - """Load all resources. - - Args: - resource_ids: List of resource file identifiers - """ - self._l10n = FluentLocalization( - self._locales, - resource_ids, - self._loader, - ) - - def translate( - self, - msg_id: MessageId, - args: dict[str, object] | None = None, - ) -> str: - """Translate message with fallback. - - Args: - msg_id: Message identifier - args: Variable substitutions - - Returns: - Translated message - - Raises: - RuntimeError: If not initialized - """ - if self._l10n is None: - raise RuntimeError("Manager not initialized") - - result, errors = self._l10n.format_value(msg_id, args) - - if errors: - # Handle errors (log, report, etc.) - pass - - return result - - def has_translation(self, msg_id: MessageId) -> bool: - """Check if message exists in any locale. - - Args: - msg_id: Message identifier - - Returns: - True if message exists - """ - if self._l10n is None: - return False - - return self._l10n.has_message(msg_id) - - def get_bundles(self) -> Generator[FluentBundle, None, None]: - """Get all bundles in fallback order. - - Yields: - FluentBundle instances - - Raises: - RuntimeError: If not initialized - """ - if self._l10n is None: - raise RuntimeError("Manager not initialized") - - yield from self._l10n.get_bundles() -``` - ---- - -### Example 3: Custom Function with Full Type Safety - -```python -from __future__ import annotations - -from ftllexengine import FluentBundle -from ftllexengine.runtime.functions import create_default_registry -from typing import Literal - -# Python 3.13+ with precise types -def format_currency( - amount: int | Decimal, - *, - currency_code: Literal["USD", "EUR", "GBP", "JPY"] = "USD", - show_symbol: bool = True, -) -> str: - """Format currency with type-safe currency codes. - - Args: - amount: Monetary amount - currency_code: ISO currency code (limited set) - show_symbol: Include currency symbol - - Returns: - Formatted currency string - """ - symbols: dict[str, str] = { - "USD": "$", - "EUR": "€", - "GBP": "£", - "JPY": "¥", - } - - symbol = symbols[currency_code] if show_symbol else currency_code - return f"{symbol}{amount:,.2f}" - - -# Create isolated registry and register function -registry = create_default_registry() -registry.register( - format_currency, - ftl_name="CURRENCY", - param_map={ - "currencyCode": "currency_code", - "showSymbol": "show_symbol", - }, -) - -# Type-safe usage with custom registry -bundle: FluentBundle = FluentBundle("en", functions=registry) -bundle.add_resource(""" -price = { CURRENCY($amount, currencyCode: "EUR") } -""") - -result, _ = bundle.format_pattern("price", {"amount": 99.95}) -``` - ---- - -### Example 4: AST Visitor with Type Guards - -```python -from __future__ import annotations - -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Message, Term, VariableReference, FunctionReference -from ftllexengine.syntax.visitor import ASTVisitor - - -class VariableCollector(ASTVisitor): - """Collect all variables from FTL source with type safety.""" - - def __init__(self) -> None: - """Initialize collector.""" - super().__init__() - self.variables: set[str] = set() - self.current_message: str | None = None - - def visit_Message(self, node: Message) -> None: - """Visit message node. - - Args: - node: Message AST node - """ - self.current_message = node.id.name - super().visit_Message(node) - self.current_message = None - - def visit_VariableReference(self, node: VariableReference) -> None: - """Collect variable reference. - - Args: - node: VariableReference AST node - """ - self.variables.add(node.id.name) - super().visit_VariableReference(node) - - -# Usage with type checking -ftl_source = """ -welcome = Hello, { $name }! -farewell = Goodbye, { $firstName } { $lastName }! -""" - -resource = parse_ftl(ftl_source) -collector = VariableCollector() -collector.visit(resource) - -# Type checker knows variables is set[str] -all_vars: set[str] = collector.variables -print(f"Found variables: {sorted(all_vars)}") -# → Found variables: ['firstName', 'lastName', 'name'] -``` - ---- - -## Type-Safe Error Handling - -### Pattern 1: Exhaustive Error Handling - -```python -from ftllexengine import FrozenFluentError, ErrorCategory - - -def handle_errors(errors: tuple[FrozenFluentError, ...]) -> None: - """Handle translation errors with exhaustive matching. - - Args: - errors: Tuple of errors from formatting (immutable) - """ - for error in errors: - match error.category: - case ErrorCategory.REFERENCE: - # Missing message, variable, or term - print(f"Reference error: {error}") - - case ErrorCategory.RESOLUTION: - # Runtime error during function execution - print(f"Resolution error: {error}") - - case ErrorCategory.CYCLIC: - # Circular dependency detected - print(f"Circular reference: {error}") - - case ErrorCategory.PARSE: - # Bi-directional parsing failure - print(f"Parse error: {error}") - - case ErrorCategory.FORMATTING: - # Locale-aware formatting failure - print(f"Formatting error: {error}") -``` - ---- - -### Pattern 2: Type-Safe Error Categorization - -```python -from __future__ import annotations - -from dataclasses import dataclass -from ftllexengine import FrozenFluentError, ErrorCategory - - -@dataclass(frozen=True, slots=True) -class ErrorReport: - """Type-safe error categorization.""" - - critical: tuple[FrozenFluentError, ...] - warnings: tuple[FrozenFluentError, ...] - - @classmethod - def from_errors(cls, errors: tuple[FrozenFluentError, ...]) -> ErrorReport: - """Categorize errors by severity. - - Args: - errors: Tuple of translation errors (immutable) - - Returns: - Categorized error report - """ - critical_list: list[FrozenFluentError] = [] - warnings_list: list[FrozenFluentError] = [] - - for error in errors: - if error.category in (ErrorCategory.REFERENCE, ErrorCategory.CYCLIC): - critical_list.append(error) - else: - warnings_list.append(error) - - return cls(critical=tuple(critical_list), warnings=tuple(warnings_list)) - - @property - def has_critical(self) -> bool: - """Check if critical errors exist.""" - return len(self.critical) > 0 - - @property - def error_count(self) -> int: - """Total error count.""" - return len(self.critical) + len(self.warnings) -``` - ---- - -## Advanced Type Patterns - -### Generic Wrapper for Bundles - -```python -from __future__ import annotations - -from dataclasses import dataclass -from ftllexengine import FluentBundle -from ftllexengine.localization import MessageId - - -class TypedBundle[T]: - """Type-safe wrapper for FluentBundle with custom context. - - This pattern allows attaching typed metadata to bundles. - """ - - def __init__(self, bundle: FluentBundle, context: T) -> None: - """Initialize typed bundle. - - Args: - bundle: FluentBundle instance - context: Custom context data - """ - self._bundle: FluentBundle = bundle - self._context: T = context - - @property - def bundle(self) -> FluentBundle: - """Get underlying bundle.""" - return self._bundle - - @property - def context(self) -> T: - """Get typed context.""" - return self._context - - def format(self, msg_id: MessageId, args: dict[str, object] | None = None) -> str: - """Format message. - - Args: - msg_id: Message identifier - args: Variable substitutions - - Returns: - Formatted string - """ - result, _ = self._bundle.format_pattern(msg_id, args) - return result - - -# Usage with typed context -@dataclass -class UserContext: - """User-specific localization context.""" - - user_id: int - timezone: str - date_format: str - - -user_ctx = UserContext(user_id=123, timezone="America/New_York", date_format="MM/DD/YYYY") -bundle = FluentBundle("en_US") - -typed_bundle: TypedBundle[UserContext] = TypedBundle(bundle, user_ctx) - -# Type checker knows context is UserContext -print(typed_bundle.context.timezone) # Type-safe access -``` - ---- - -## mypy Configuration - -For maximum type safety with FTLLexEngine: - -```ini -# mypy.ini or pyproject.toml [tool.mypy] -[mypy] -python_version = 3.13 -strict = true -warn_return_any = true -warn_unused_configs = true -disallow_untyped_defs = true -disallow_any_generics = true - -# FTLLexEngine is fully typed -[mypy-ftllexengine] -ignore_missing_imports = false -``` - ---- - -## Type Checking Best Practices - -### DO: Use Type Aliases - -```python -from ftllexengine.localization import MessageId, LocaleCode - -# [OK] Good - descriptive types -def format_message(msg_id: MessageId, locale: LocaleCode) -> str: - ... - -# Less clear - generic str -def format_message(msg_id: str, locale: str) -> str: - ... -``` - ---- - -### DO: Annotate Return Types - -```python -from ftllexengine import FluentBundle - -# [OK] Good - explicit return type -def create_bundle(locale: str) -> FluentBundle: - return FluentBundle(locale) - -# Less safe - inferred return type -def create_bundle(locale: str): - return FluentBundle(locale) -``` - ---- - -### DO: Use Type Guards for AST - -```python -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Message - -resource = parse_ftl(ftl_source) - -for entry in resource.entries: - # [OK] Good - type guard provides narrowing (static method) - if Message.guard(entry): - # entry is Message here - print(entry.value) - - # [OK] Also correct - isinstance() works fine - if isinstance(entry, Message): - # Type checker narrows to Message here too - print(entry.value) - # Note: Message.guard() is preferred for FTLLexEngine style consistency -``` - ---- - -### DO: Use dict[K, V] Syntax (Python 3.9+) - -```python -# [OK] Good - modern syntax (Python 3.9+) -def format(msg_id: str, args: dict[str, object]) -> str: - ... - -# Old - deprecated typing.Dict -from typing import Dict -def format(msg_id: str, args: Dict[str, object]) -> str: - ... -``` - ---- - -## Troubleshooting Type Errors - -### Error: "Argument has incompatible type" - -```python -# [WRONG] Type error -locale_codes: list[LocaleCode] = ["en", "fr"] -bundle = FluentBundle(locale_codes) # Error: expected str, got list - -# [OK] Fixed - extract single locale -bundle = FluentBundle(locale_codes[0]) -``` - ---- - -### Error: "Item 'None' of 'Optional[...]' has no attribute" - -```python -from ftllexengine import parse_ftl -from ftllexengine.syntax.ast import Message - -resource = parse_ftl(ftl_source) -msg = resource.entries[0] - -# [WRONG] Type error - entry might not be Message -print(msg.value) # Error: entry could be Term, Comment, Junk - -# [OK] Fixed - use type guard (static method) -if Message.guard(msg): - print(msg.value) # Safe - type narrowed to Message -``` - ---- - -## Summary - -**FTLLexEngine provides**: -- Full `mypy --strict` compatibility -- Python 3.13+ modern type features -- Type aliases for clarity -- Type guards for runtime narrowing -- Complete type annotations - -**Best practices**: -- Use provided type aliases (`MessageId`, `LocaleCode`, etc.) -- Annotate function return types -- Use type guards for AST manipulation -- Enable `mypy --strict` in your project -- Leverage Python 3.13+ features - ---- - -**Python Requirement**: 3.13+ +## Mypy -**See Also**: -- [DOC_00_Index.md](DOC_00_Index.md) - Complete API reference -- [QUICK_REFERENCE.md](QUICK_REFERENCE.md) - Quick examples -- [examples/](../examples/) - Working code samples +Project-wide mypy configuration lives in `pyproject.toml`. The examples directory has its own strict config in `examples/mypy.ini`. diff --git a/docs/VALIDATION_GUIDE.md b/docs/VALIDATION_GUIDE.md index 03e89d9a..9d139238 100644 --- a/docs/VALIDATION_GUIDE.md +++ b/docs/VALIDATION_GUIDE.md @@ -1,332 +1,45 @@ --- -afad: "3.3" -version: "0.153.0" -domain: validation -updated: "2026-03-13" +afad: "3.5" +version: "0.163.0" +domain: VALIDATION +updated: "2026-04-22" route: - keywords: [validation, validate_resource, SemanticValidator, duplicate, cycle detection, FTL validation] - questions: ["how to validate FTL?", "what validation checks exist?", "where is duplicate detection?", "how to detect cycles?"] + keywords: [validation, validate_resource, ValidationResult, require_clean, boot validation, message schemas] + questions: ["how do I validate FTL before loading it?", "how do I fail fast at startup?", "how do I validate message variables?"] --- # Validation Guide -**Purpose**: Understand FTLLexEngine's validation architecture and responsibility distribution. -**Prerequisites**: Basic FTL syntax knowledge. +**Purpose**: Validate FTL source, loaded resources, and message-variable contracts before serving traffic. +**Prerequisites**: Basic familiarity with `FluentBundle` or `FluentLocalization`. -## Overview +## Resource Validation -FTLLexEngine implements a **two-tier validation architecture**: - -1. **Resource-level validation** (`validate_resource()`): Checks spanning multiple entries -2. **AST node-level validation** (`SemanticValidator`): Checks within individual AST nodes - -This separation follows single-responsibility principle: each validator handles checks appropriate to its scope. - ---- - -## Validation Responsibility Matrix - -Function names prefixed with `_` are internal implementation details. They are listed -for traceability only; direct calls or imports of private functions are unsupported. - -| Check | Module | Function/Class | Scope | -|:------|:-------|:---------------|:------| -| Syntax errors (Junk) | `validation.resource` | `_extract_syntax_errors()` (internal) | Resource | -| Duplicate message IDs | `validation.resource` | `_collect_entries()` (internal) | Resource | -| Duplicate term IDs | `validation.resource` | `_collect_entries()` (internal) | Resource | -| Duplicate attribute IDs | `validation.resource` | `_collect_entries()` (internal) | Entry | -| Messages without value/attrs | `validation.resource` | `_collect_entries()` (internal) | Entry | -| Shadow warnings | `validation.resource` | `_collect_entries()` (internal) | Resource | -| Undefined message refs | `validation.resource` | `_check_undefined_references()` (internal) | Resource | -| Undefined term refs | `validation.resource` | `_check_undefined_references()` (internal) | Resource | -| Circular references | `validation.resource` | `_detect_circular_references()` (internal) | Resource | -| Long reference chains | `validation.resource` | `_detect_long_chains()` (internal) | Resource | -| Term missing value | `syntax.validator` | `SemanticValidator` | Node | -| Select without default | `syntax.validator` | `SemanticValidator` | Node | -| Select without variants | `syntax.validator` | `SemanticValidator` | Node | -| Duplicate variant keys | `syntax.validator` | `SemanticValidator` | Node | -| Duplicate named arguments | `syntax.validator` | `SemanticValidator` | Node | -| Term positional args warning | `syntax.validator` | `SemanticValidator` | Node | -| Placeable as selector (bypass guard) | `syntax.validator` | `SemanticValidator` | Node | - ---- - -## Quick Start +Use `validate_resource()` to check FTL source before adding it to a bundle. ```python -from ftllexengine.validation import validate_resource - -source = """ -hello = Hello, { $name }! --brand = FTLLexEngine -welcome = Welcome to { -brand } -""" +from ftllexengine import validate_resource -# Validate -result = validate_resource(source) - -if result.is_valid: - print("Validation passed") -else: - for error in result.errors: - print(f"Error: {error.code} - {error.message}") - for warning in result.warnings: - print(f"Warning: {warning.code} - {warning.message}") +result = validate_resource("welcome = Hello, { $name }!") +assert result.is_valid is True +assert result.error_count == 0 +assert result.warning_count == 0 ``` ---- - -## Resource-Level Validation +`ValidationResult` separates: -`validate_resource()` orchestrates six validation passes: - -### Pass 1: Syntax Error Extraction - -Converts `Junk` entries (unparseable content) to structured errors. - -```python -# FTL with syntax error -source = "hello = Hello { missing-close" -result = validate_resource(source) -# Error: VALIDATION_PARSE_ERROR -``` - -### Pass 2: Entry Collection and Duplicates - -Checks for duplicate IDs within namespaces and duplicate attributes within entries. - -```python -# Duplicate message ID -source = """ -hello = First -hello = Second -""" -# Warning: VALIDATION_DUPLICATE_ID - "Duplicate message ID 'hello'" -``` - -**Namespace Separation**: Per Fluent spec, messages and terms have separate namespaces: -```python -# NOT a duplicate - different namespaces -source = """ -brand = Brand message --brand = Brand term -""" -# No warning: 'brand' and '-brand' coexist -``` +- `errors`: structural or syntax validation failures. +- `warnings`: semantic problems such as unresolved references. +- `annotations`: parser-level annotations recovered from junk input. -### Pass 3: Undefined Reference Detection - -Identifies references to non-existent messages or terms. - -```python -source = """ -hello = { greeting } --missing = { -nonexistent } -""" -# Warning: VALIDATION_UNDEFINED_REFERENCE - "Message 'hello' references undefined message 'greeting'" -# Warning: VALIDATION_UNDEFINED_REFERENCE - "Term '-missing' references undefined term '-nonexistent'" -``` - -### Pass 4: Circular Reference Detection - -Detects cycles in the message/term dependency graph. - -```python -source = """ -a = { b } -b = { c } -c = { a } -""" -# Warning: VALIDATION_CIRCULAR_REFERENCE - "Circular reference detected: a -> b -> c -> a" -``` - -**Cross-Type Cycles**: The validator builds a unified graph to detect cycles spanning both messages and terms: -```python -source = """ -msg = { -term } --term = { msg } -""" -# Warning: Detects message -> term -> message cycle -``` - -**Cross-Resource Cycles**: When validating via `FluentBundle.validate_resource()`, the validator also detects cycles involving entries already loaded in the bundle: -```python -bundle = FluentBundle("en") -bundle.add_resource("msg_a = { msg_b }") # msg_a depends on msg_b - -# Now validate a resource that completes the cycle -result = bundle.validate_resource("msg_b = { msg_a }") -# Warning: Circular reference detected - msg_a and msg_b form a cycle -``` - -This cross-resource detection works because the bundle tracks dependencies for all loaded entries. - -### Pass 5: Long Chain Detection - -Warns about reference chains approaching `MAX_DEPTH` limit. - -```python -# Chain of 90 messages (warning threshold at MAX_DEPTH - 10) -# Warning: VALIDATION_LONG_CHAIN -``` - -### Pass 6: Semantic Validation - -Delegates to `SemanticValidator` for AST node-level checks. - ---- +## Loaded-Resource Validation -## AST Node-Level Validation (SemanticValidator) +`FluentLocalization.require_clean()` converts load summary problems into an `IntegrityCheckFailedError`. This is the fail-fast path for production startup. -`SemanticValidator` checks semantic correctness within individual AST nodes. - -### Term Must Have Value - -```python -source = "-empty" # Term without value -# Error: VALIDATION_TERM_NO_VALUE -``` - -### Select Expression Requirements - -```python -# Missing default variant -source = """ -count = { $n -> - [one] One - [other] Other -} -""" -# Error: VALIDATION_SELECT_NO_DEFAULT - must have exactly one *[default] - -# Missing variants -source = "count = { $n -> }" -# Error: VALIDATION_SELECT_NO_VARIANTS - -# Duplicate variant keys -source = """ -count = { $n -> - [one] First one - [one] Second one - *[other] Other -} -""" -# Error: VALIDATION_VARIANT_DUPLICATE -``` - -### Duplicate Named Arguments - -```python -source = 'msg = { NUMBER($n, style: "decimal", style: "percent") }' -# Error: VALIDATION_NAMED_ARG_DUPLICATE -``` - -### Term Positional Arguments Warning - -Per Fluent specification, terms only accept named arguments. Positional arguments are silently ignored at runtime. The validator warns about this to catch likely user errors: - -```python -source = """ --brand = Acme Corp -msg = { -brand($value) } -""" -# Warning: VALIDATION_TERM_POSITIONAL_ARGS - "Term '-brand' called with positional arguments; positional arguments are ignored for term references" -``` - ---- - -## Architecture Rationale - -**Why Two Tiers?** - -| Concern | Level | Example | -|:--------|:------|:--------| -| Cross-entry relationships | Resource | Circular references between messages | -| Entry-spanning checks | Resource | Duplicate attribute IDs across attributes | -| Node-internal rules | AST Node | Select expression must have default | -| Call argument rules | AST Node | Named argument uniqueness | - -Attempting to consolidate all checks into one validator would create a "god class" with mixed concerns. The current design: - -1. `validate_resource()` owns the resource-level view -2. `SemanticValidator` owns the node-level view -3. Each is testable independently -4. Each has clear responsibility boundaries - ---- - -## Integration with FluentBundle - -`FluentBundle.add_resource()` automatically validates during FTL source loading: - -```python -from ftllexengine import FluentBundle - -bundle = FluentBundle("en_US") -junk_entries = bundle.add_resource("hello = Hello") - -if junk_entries: - for junk in junk_entries: - print(f"Parse error: {junk}") -``` - -For standalone validation without a bundle (CI/CD pipelines, linters): - -```python -from ftllexengine.validation import validate_resource - -result = validate_resource(ftl_content) -``` - ---- - -## Validation Result Structure - -```python -@dataclass(frozen=True, slots=True) -class ValidationResult: - errors: tuple[ValidationError, ...] # Blocking issues - warnings: tuple[ValidationWarning, ...] # Non-blocking; do not affect is_valid - annotations: tuple[Annotation, ...] # Parser annotations; affect is_valid - - # Validity check - @property - def is_valid(self) -> bool: ... # True if no errors AND no annotations - - # Counts - @property - def error_count(self) -> int: ... # len(errors) - @property - def annotation_count(self) -> int: ... # len(annotations) - @property - def warning_count(self) -> int: ... # len(warnings) - - # Factories - @staticmethod - def valid() -> ValidationResult: ... # Empty result (all tuples empty) - @staticmethod - def invalid( - errors: tuple[ValidationError, ...] = (), - warnings: tuple[ValidationWarning, ...] = (), - annotations: tuple[Annotation, ...] = (), - ) -> ValidationResult: ... - @staticmethod - def from_annotations( - annotations: tuple[Annotation, ...] - ) -> ValidationResult: ... # Convenience: parser annotations only -``` - -**Error vs Warning**: -- **Errors**: Prevent correct resolution (syntax errors, missing term values) -- **Warnings**: May indicate issues but don't prevent resolution (duplicates, undefined refs) - ---- +## Message Variable Contracts -## Summary +Use `validate_message_variables()` when you already have an AST node, or `FluentLocalization.validate_message_schemas()` when you want to enforce contracts across a loaded localization set. -| Validator | Location | Checks | -|:----------|:---------|:-------| -| `validate_resource()` | `validation/resource.py` | Duplicates, cycles, undefined refs, chains | -| `SemanticValidator` | `syntax/validator.py` | Term values, select rules, argument uniqueness | +## Recommended Startup Pattern -**Key Insight**: If you're looking for a specific check, consult the responsibility matrix. Checks spanning multiple entries are in `validate_resource()`; checks within a single AST node are in `SemanticValidator`. +For audited startup, prefer `LocalizationBootConfig.boot()` or `boot_simple()` over assembling the boot sequence by hand. That path loads resources, checks load cleanliness, enforces required message presence, and validates declared message schemas in one place. `LocalizationBootConfig` instances are one-shot coordinators, so create a fresh instance for each boot attempt. diff --git a/examples/README.md b/examples/README.md index c03293a9..5136b70c 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,417 +1,65 @@ - -# ftllexengine Examples - -Comprehensive examples demonstrating all FTLLexEngine features. - -**Requirements**: Python 3.13+ - -## Note on Bidi Isolation Marks - -By default, FTLLexEngine wraps interpolated variables in Unicode bidi isolation marks (FSI U+2068 and PDI U+2069). You may see `⁨` and `⁩` characters in terminal output like: `"Sveiki, ⁨Anna⁩!"` These marks are: -- **Critical for RTL languages** (Arabic, Hebrew, Persian, Urdu) - prevents text corruption -- **Invisible in proper Unicode rendering** (browsers, most GUI apps) -- **May appear as symbols** in some terminals (this is a terminal limitation, not a bug) -- **Recommended to keep enabled** (`use_isolating=True`, the default) unless your app will only ever support LTR languages - -**Important:** Examples in this directory use `use_isolating=False` for cleaner terminal demonstrations. **Never disable bidi isolation in production applications** that may support RTL languages. - -## Common Import Patterns - -All FTLLexEngine APIs are available as top-level imports for maximum convenience: - -### Core Message Formatting - -```python -from ftllexengine import FluentBundle, FluentLocalization - -# Single locale -bundle = FluentBundle("en") - -# Multi-locale fallback -l10n = FluentLocalization(['lv', 'en']) -``` - -### Resource Loading - -```python -from ftllexengine.localization import PathResourceLoader, ResourceLoader - -# File system loader -loader = PathResourceLoader("locales/{locale}") -ftl_source = loader.load("en", "main.ftl") - -# Custom loader (implement ResourceLoader protocol) -class MyLoader: - def load(self, locale: str, resource_id: str) -> str: - # Your custom loading logic - ... -``` - -### AST Manipulation (Linters, Transformers) - -```python -from ftllexengine import parse_ftl, serialize_ftl -from ftllexengine.syntax import ASTVisitor, ASTTransformer -from ftllexengine.syntax.ast import Message, Term, VariableReference - -# Parse FTL to AST -resource_ast = parse_ftl(ftl_source) - -# Traverse AST -class MyVisitor(ASTVisitor): - def visit_Message(self, node): - print(f"Found message: {node.id.name}") - -# Serialize back to FTL -ftl_output = serialize_ftl(resource_ast) -``` - -### Error Handling - -```python -from ftllexengine import FrozenFluentError, ErrorCategory - -# Robust error handling -# Parser uses Junk nodes for syntax errors (robustness principle) -# and never raises exceptions. -result, errors = bundle.format_pattern("msg", {"var": value}) -if errors: - for error in errors: - diag = error.diagnostic - msg = diag.message if diag else error.message - match error.category: - case ErrorCategory.REFERENCE: - logger.warning(f"Missing translation: {msg}") - case ErrorCategory.CYCLIC: - logger.error(f"Cyclic reference: {msg}") - case ErrorCategory.RESOLUTION: - logger.error(f"Runtime error: {msg}") - case _: - logger.error(f"Error: {msg}") -``` - -### Advanced - Function Registry - -```python -from ftllexengine import FluentBundle -from ftllexengine.runtime.functions import create_default_registry - -# Create custom registry -registry = create_default_registry() - -# Register custom function -def UPPER(text: str) -> str: - return text.upper() - -registry.register(UPPER, ftl_name="UPPER") - -# Pass registry to bundle (isolated, no global state) -bundle = FluentBundle("en", functions=registry) -``` - -**Recommended Pattern**: Use `create_default_registry()` and pass to `FluentBundle` constructor for isolated function registries. For single-bundle functions, use `bundle.add_function()` method. - -### Introspection - -```python -from ftllexengine import parse_ftl -from ftllexengine.introspection import introspect_message, extract_variables - -# Module-level introspection (works with AST nodes) -resource_ast = parse_ftl(ftl_source) -msg = resource_ast.entries[0] -variables = extract_variables(msg) - -# Bundle method (works with message IDs) -bundle = FluentBundle("en") -bundle.add_resource(ftl_source) -info = bundle.introspect_message("welcome") -print(info.get_variable_names()) -``` - -**Note**: All examples in this directory use these top-level imports. - -## Available Examples - -### [quickstart.py](quickstart.py) - -**Basic usage of FluentBundle** - Start here for single-locale applications. - -Demonstrates: -1. Simple messages -2. Variable interpolation -3. English plurals (one, other) -4. Latvian plurals (zero, one, other) -5. Select expressions -6. Number formatting -7. Loading from files -8. **Proper error handling** (production pattern with error logging) - -**Run**: `python examples/quickstart.py` - ---- - -### [parser_only.py](parser_only.py) - -**Parser-only mode (no Babel required)** - Everything you can do without the Babel dependency. - -Demonstrates: -1. Parse FTL source to AST -2. Inspect message and term structure -3. Extract variables and function references -4. Validate FTL syntax -5. Serialize AST back to FTL -6. Roundtrip validation - -**Run**: `python examples/parser_only.py` - -**Note**: Works with `pip install ftllexengine` (no `[babel]` extra needed). - ---- - -### [locale_fallback.py](locale_fallback.py) - -**Multi-locale with fallback chains** - Use this for applications supporting multiple languages. - -Demonstrates: -1. Basic two-locale fallback (Latvian → English) -2. Three-locale fallback chains (Latvian → Lithuanian → English) -3. Disk-based resource loading with PathResourceLoader -4. Custom in-memory resource loaders -5. Database/cache resource loaders (production pattern with Redis example) -6. Realistic e-commerce application example -7. Checking message availability -8. Iterating through bundles for introspection - -**Run**: `python examples/locale_fallback.py` - ---- - -### [bidirectional_formatting.py](bidirectional_formatting.py) - -**Bi-directional localization** - Parse locale-formatted strings back to Python types. - -Demonstrates: -1. Invoice processing with bi-directional localization (Latvian) -2. Form input validation with locale-aware parsing (German) -3. Currency parsing with automatic symbol detection (multiple locales) -4. Date parsing with locale-aware format detection (US vs European) -5. Roundtrip validation (format → parse → format) -6. CSV data import with locale-aware parsing - -**Run**: `python examples/bidirectional_formatting.py` - -**Key Features**: -- Number/currency parsing via Babel (CLDR-compliant) -- Date/datetime parsing via Python 3.13 stdlib with Babel CLDR patterns -- Financial precision with Decimal type -- Form validation patterns -- Import/export workflows -- Use `has_parse_errors()` and type guards from `ftllexengine.parsing.guards` -- **Note**: Babel's `parse_decimal()` accepts `NaN`, `Infinity`, and `Inf` (case-insensitive) as valid Decimal values - use `is_valid_decimal()` to reject these for financial data - ---- - -### [ftl_transform.py](ftl_transform.py) - -**AST transformation and manipulation** - Build tools that modify FTL files programmatically. - -Demonstrates: -1. Removing comments from FTL source -2. Renaming variables (refactoring) -3. Extracting hardcoded strings to variables -4. Removing deprecated messages by prefix -5. Chaining multiple transformations -6. Real-world modernization workflow (camelCase → snake_case) - -**Run**: `python examples/ftl_transform.py` - ---- - -### [ftl_linter.py](ftl_linter.py) - -**Static analysis and linting** - Build quality tools for FTL files. - -Demonstrates: -1. Detecting duplicate message IDs -2. Finding undefined variables -3. Validating function calls -4. Checking message/term references -5. Identifying messages without values -6. Building custom lint rules with ASTVisitor - -**Run**: `python examples/ftl_linter.py` - ---- - -### [custom_functions.py](custom_functions.py) - -**Custom formatting functions** - Extend FTLLexEngine with domain-specific formatters. - -Demonstrates: -1. CURRENCY formatting with symbols -2. PHONE number formatting -3. MARKDOWN rendering (simplified) -4. FILESIZE human-readable formatting -5. DURATION time formatting -6. Locale-aware custom functions using factory pattern - -**Run**: `python examples/custom_functions.py` - -**See also**: [CUSTOM_FUNCTIONS_GUIDE.md](../docs/CUSTOM_FUNCTIONS_GUIDE.md) - Comprehensive guide to custom function development including error handling patterns, Babel integration, testing strategies, and best practices. - ---- - -### [function_introspection.py](function_introspection.py) - -**Runtime function discovery and introspection** - Discover and inspect functions at runtime. - -Demonstrates: -1. Basic introspection operations (list, iterate, check membership) -2. Function metadata inspection (parameter mappings, Python names) -3. Custom function introspection workflows -4. Financial application validation patterns -5. Auto-documentation generation -6. Safe function usage with existence checks -7. Registry copying for isolated customization - -**Run**: `python examples/function_introspection.py` - -**Note**: Uses the new FunctionRegistry introspection API (`list_functions()`, `get_function_info()`, `__iter__`, `__len__`, `__contains__`) for runtime function discovery. - --- - -### [thread_safety.py](thread_safety.py) - -**Thread-safe FluentBundle usage** - Patterns for multi-threaded applications. - -Demonstrates: -1. Single-threaded initialization (recommended for static resources) -2. Concurrent read operations with ThreadPoolExecutor -3. Thread-local bundles (for per-thread customization) -4. Dynamic resource loading (always thread-safe) - -**Run**: `python examples/thread_safety.py` - -**Note**: FluentBundle is always thread-safe. No manual locks or special parameters needed. - +afad: "3.5" +version: "0.163.0" +domain: EXAMPLES +updated: "2026-04-22" +route: + keywords: [examples, quickstart, parser-only, localization, custom functions, thread safety, benchmarks] + questions: ["what examples are available?", "how do I run the examples?", "which example should I start with?"] --- -### [benchmark_loaders.py](benchmark_loaders.py) +# FTLLexEngine Examples -**Performance benchmarks for resource loaders** - Compare different loader implementations. +**Purpose**: Show which runnable example scripts ship with the repository and what each one demonstrates. +**Prerequisites**: Development environment synced with `uv sync --group dev`. -Demonstrates: -1. In-memory loader benchmarks (baseline performance) -2. Disk loader benchmarks (PathResourceLoader) -3. Database loader benchmarks without cache (worst case) -4. Database loader benchmarks with cache (production pattern) -5. Cache hit rate analysis -6. Throughput and latency measurements -7. Production recommendations based on app size and requirements +## Overview -**Run**: `python examples/benchmark_loaders.py` - -**Output**: Comprehensive performance comparison with initialization times, throughput metrics, and best practice recommendations for choosing the optimal loader pattern. - ---- +Every `examples/*.py` script is intended to run directly from the repository root. The command below exercises the full shipped example set under the project’s Python 3.13 environment. -### [property_based_testing.py](property_based_testing.py) - -**Property-based testing with Hypothesis** - Advanced testing techniques for discovering edge cases. - -Demonstrates: -1. Testing universal properties (format_pattern never raises exceptions) -2. Testing idempotence (parse → serialize → parse roundtrip) -3. Testing invariants (message count consistency) -4. Testing symmetry (fallback chain locale precedence) -5. Testing batch operations equivalence (batch vs individual introspection) -6. Stateful property testing with RuleBasedStateMachine (advanced) -7. Custom Hypothesis strategies for valid FTL generation - -**Run**: `python examples/property_based_testing.py` - -**Note**: This example demonstrates advanced testing techniques using property-based testing, which generates hundreds of random test cases to verify universal properties of the library. Excellent for discovering edge cases and verifying API contracts. - ---- - -## Running All Examples +Run one example: ```bash -# Run each example individually -python examples/quickstart.py -python examples/parser_only.py -python examples/locale_fallback.py -python examples/bidirectional_formatting.py -python examples/ftl_transform.py -python examples/ftl_linter.py -python examples/custom_functions.py -python examples/function_introspection.py -python examples/thread_safety.py -python examples/benchmark_loaders.py -python examples/property_based_testing.py +uv run --python 3.13 python examples/quickstart.py ``` -## Basic Usage +Run all examples: -```python -from ftllexengine import FluentBundle - -bundle = FluentBundle("en") -bundle.add_resource(""" -my-message = Hello, { $name }! -""") - -result, errors = bundle.format_pattern("my-message", {"name": "World"}) -print(result) # Hello, World! +```bash +uv run --python 3.13 python scripts/run_examples.py ``` -## Loading from Files +## Example Map -```python -from pathlib import Path -from ftllexengine import FluentBundle +| Script | Focus | +|:-------|:------| +| `quickstart.py` | Single-locale bundle usage, variables, plurals, parsing handoff | +| `parser_only.py` | Parser-only install surface: parse, validate, inspect, serialize | +| `locale_fallback.py` | `FluentLocalization`, fallback chains, disk and custom loaders | +| `bidirectional_formatting.py` | Locale-aware parsing for numbers, dates, currency | +| `custom_functions.py` | `FunctionRegistry`, `bundle.add_function()`, `@fluent_function` | +| `function_introspection.py` | Introspection APIs and function metadata | +| `ftl_transform.py` | AST transforms and serialization | +| `ftl_linter.py` | Validation and custom lint-style checks | +| `thread_safety.py` | Shared bundle and task-local patterns | +| `property_based_testing.py` | Hypothesis-oriented usage examples | +| `benchmark_loaders.py` | Loader micro-benchmarks | -ftl_source = Path("locales/en/messages.ftl").read_text(encoding="utf-8") -bundle = FluentBundle("en") -bundle.add_resource(ftl_source) -result, errors = bundle.format_pattern("welcome") -print(result) -``` +## Picking A Starting Point -## FTL File Example +- New to the runtime: start with `examples/quickstart.py`. +- Working without Babel: start with `examples/parser_only.py`. +- Building a multi-locale app: use `examples/locale_fallback.py`. +- Accepting localized user input: use `examples/bidirectional_formatting.py`. -`locales/en/messages.ftl`: +## Type Checking -```ftl -hello = Hello, World! -greeting = Hello, { $name }! +The examples have a dedicated mypy configuration: -emails = You have { NUMBER($count) -> - [one] one email - *[other] { $count } emails -}. - -greeting-formal = { $gender -> - [male] Mr. { $name } - [female] Ms. { $name } - *[other] { $name } -} - -price = Price: { NUMBER($amount, minimumFractionDigits: 2) } EUR +```bash +uv run mypy --config-file examples/mypy.ini examples ``` -## See Also +Related guide: -- [docs/DOC_00_Index.md](../docs/DOC_00_Index.md) - Complete API reference -- [README.md](../README.md) - Project overview and getting started guide -- [CUSTOM_FUNCTIONS_GUIDE.md](../docs/CUSTOM_FUNCTIONS_GUIDE.md) - Comprehensive guide to extending FTLLexEngine with custom formatting functions -- [CONTRIBUTING.md](../CONTRIBUTING.md) - Contribution guidelines for developers +- [README_TYPE_CHECKING.md](README_TYPE_CHECKING.md) diff --git a/examples/README_TYPE_CHECKING.md b/examples/README_TYPE_CHECKING.md index a0c00c26..e15f5102 100644 --- a/examples/README_TYPE_CHECKING.md +++ b/examples/README_TYPE_CHECKING.md @@ -1,152 +1,37 @@ --- -afad: "3.3" -version: "0.143.0" -domain: examples -updated: "2026-02-28" +afad: "3.5" +version: "0.163.0" +domain: EXAMPLES +updated: "2026-04-22" route: - keywords: [type checking, mypy, strict, threading, examples, stubs] - questions: ["how to type check examples?", "how to use mypy with examples?", "how to type threading.local?"] + keywords: [examples, mypy, type checking, strict, explicit ownership, thread safety] + questions: ["how do I type-check the examples?", "what mypy config do the examples use?", "how do the examples stay strict without local stubs?"] --- -# Type Checking Configuration for Examples +# Example Type Checking -This directory includes enhanced type checking configuration for example code. +**Purpose**: Explain how the example scripts are type-checked and how they stay strict without local stub overlays. +**Prerequisites**: Dev environment synced with `uv sync --group dev`. ## Overview -The examples/ directory uses **mypy --strict** mode to demonstrate best practices for type-safe FTL localization code. This includes: +The `examples/` directory uses its own `mypy.ini` so the example code stays strict and self-contained. The examples now model explicit object ownership directly in Python instead of relying on dynamic per-thread attributes, so they type-check cleanly with standard library types alone. -1. **Local mypy configuration** (`mypy.ini`) - Examples-specific type checking settings -2. **Custom type stubs** (`stubs/threading.pyi`) - Enhanced typing for threading.local() - -## Usage - -### Type-check Examples from Project Root - -```bash -# Check all examples with strict typing -python -m mypy examples/ --strict - -# Output: Success: no issues found in 11 source files -``` - -### Type-check Examples from examples/ Directory - -```bash -cd examples -python -m mypy . - -# Uses examples/mypy.ini configuration automatically -``` - -## Configuration Files - -### examples/mypy.ini - -Examples-specific mypy configuration that: -- Enables **strict mode** (demonstrates best practices) -- Uses Python 3.13 features (type aliases, pattern matching) -- Points to local type stubs in `stubs/` directory - -**Philosophy**: Examples should demonstrate production-quality type safety. - -### examples/stubs/threading.pyi - -Custom type stub for `threading` module that provides: -- Enhanced typing for `threading.local()` with dynamic attributes -- Type annotations for `Thread`, `Lock`, `current_thread()` - -**Why?**: The standard library's `threading.local()` uses dynamic attributes (set at runtime), which confuses type checkers. Our stub file helps mypy understand the thread-local bundle pattern used in [thread_safety.py](thread_safety.py). - -## Thread-Local Typing Example - -**Problem**: Standard typing can't track dynamic attributes on threading.local() - -```python -thread_local = threading.local() -thread_local.bundle = FluentBundle(...) # mypy: error - no attribute 'bundle' -return thread_local.bundle # mypy: error - Returning Any -``` - -**Solution**: Our `stubs/threading.pyi` provides `__setattr__` and `__getattribute__` stubs - -```python -# With our stub file: -thread_local = threading.local() -bundle: FluentBundle = FluentBundle("en", use_isolating=False) -thread_local.bundle = bundle # mypy understands -return thread_local.bundle # type: ignore[no-any-return] # Still needed for return type -``` - -## Production Recommendation - -For production code, prefer **strongly-typed wrappers** instead of dynamic attributes: - -```python -from dataclasses import dataclass -import threading - -@dataclass -class ThreadLocalState: - """Strongly-typed thread-local state.""" - bundle: FluentBundle - -thread_local: threading.local = threading.local() - -def get_bundle() -> FluentBundle: - """Get bundle for current thread (type-safe).""" - if not hasattr(thread_local, "state"): - thread_local.state = ThreadLocalState( - bundle=FluentBundle("en", use_isolating=False) - ) - state: ThreadLocalState = thread_local.state - return state.bundle # No type: ignore needed! -``` - -## Why Not Contribute to typeshed? - -The `threading.local()` typing challenge is a known limitation in Python's type system: - -1. **Dynamic attributes by design** - threading.local() intentionally uses `__setattr__`/`__getattribute__` for thread-isolation -2. **Generic solutions are complex** - Would require Generic[TypedDict] or Protocol, which adds complexity -3. **Production pattern exists** - Strongly-typed wrappers (dataclass pattern above) are the recommended approach - -Our local stub is a **pragmatic solution for examples**, showing users how to work with threading.local() while maintaining type safety. - -## File Structure - -``` -examples/ -├── mypy.ini # Examples-specific mypy config -├── stubs/ # Local type stubs -│ └── threading.pyi # threading.local() enhancements -├── README_TYPE_CHECKING.md # This file -└── *.py # Example scripts (all pass mypy --strict) -``` - -## Verification - -All examples pass strict type checking: +Run the examples type check from the repository root: ```bash -$ python -m mypy examples/ --strict -Success: no issues found in 11 source files +uv run mypy --config-file examples/mypy.ini examples ``` -All examples execute successfully: +## Files -```bash -$ python examples/thread_safety.py -[OK] All thread safety examples complete! -``` +| Path | Role | +|:-----|:-----| +| `examples/mypy.ini` | Strict mypy configuration for example code | +| `examples/thread_safety.py` | Thread-safety examples that keep worker-owned state explicit | -## Related Documentation +## Why No Local Stub Is Needed -- [TYPE_HINTS_GUIDE.md](../docs/TYPE_HINTS_GUIDE.md) - Type hints guide for FTLLexEngine -- [thread_safety.py](thread_safety.py) - Thread safety patterns with type hints - ---- +The examples avoid patterns that depend on dynamic attributes or implicit shared mutation. That keeps the scripts easier to reason about, easier to audit, and naturally compatible with strict type checking. -**Last Updated**: 2026-02-28 -**Python Version**: 3.13+ -**Mypy Version**: Compatible with latest stable mypy +When per-worker customization is needed, build the owned object directly inside the worker or pass it explicitly. That approach matches the project’s architecture guidance and removes the need for local stub maintenance. diff --git a/examples/ftl_transform.py b/examples/ftl_transform.py index ed78563c..b75896c3 100644 --- a/examples/ftl_transform.py +++ b/examples/ftl_transform.py @@ -262,8 +262,8 @@ def visit_Message(self, node: Message) -> Message | None: # pylint: disable=inv userProfile = { $firstName } { $lastName } accountBalance = Balance: { NUMBER($currentBalance) } -# TODO: Refactor variable names -# TODO: Remove obsolete messages +# Legacy review notes kept as comments in the source file +# Variable names and obsolete-message cleanup are shown below """ print("BEFORE:") diff --git a/examples/mypy.ini b/examples/mypy.ini index 4293d4bd..cdbbe34b 100644 --- a/examples/mypy.ini +++ b/examples/mypy.ini @@ -1,11 +1,9 @@ # Mypy configuration for examples/ # -# This configuration provides enhanced type checking for example code while -# maintaining practical type safety standards. +# This configuration provides strict type checking for example code. # # Philosophy: # - Examples should demonstrate best practices -# - Type stubs help with third-party libraries (threading.local) # - Strict mode enabled to catch real bugs # # Usage: @@ -19,9 +17,6 @@ strict = True # Python version python_version = 3.13 -# Local type stubs for threading.local() enhancement -mypy_path = stubs - # Strict type checking settings (applied globally) disallow_untyped_defs = True warn_return_any = True diff --git a/examples/property_based_testing.py b/examples/property_based_testing.py index 377112d2..be88ca59 100644 --- a/examples/property_based_testing.py +++ b/examples/property_based_testing.py @@ -29,6 +29,9 @@ from __future__ import annotations +import contextlib +import io + from hypothesis import assume, given, settings from hypothesis import strategies as st from hypothesis.stateful import RuleBasedStateMachine, initialize, rule @@ -79,8 +82,10 @@ def test_format_never_raises(message_id: str, args: dict[str, str]) -> None: # Always returns a tuple of errors assert isinstance(errors, tuple) - # Run the property test - test_format_never_raises() + # Invalid random message IDs can legitimately trigger parser diagnostics on stderr. + # Suppress that noise so the example stays focused on the property outcome. + with contextlib.redirect_stderr(io.StringIO()): + test_format_never_raises() print("Property verified: format_pattern() never raises in soft mode (strict=False)\n") diff --git a/examples/quickstart.py b/examples/quickstart.py index e2b38c62..d1941e78 100644 --- a/examples/quickstart.py +++ b/examples/quickstart.py @@ -10,6 +10,8 @@ always check errors and log/report translation issues. """ +import contextlib +import io import tempfile from decimal import Decimal from pathlib import Path @@ -285,7 +287,8 @@ # Missing variable in strict mode raises exception try: - strict_bundle.format_pattern("amount", {}) # Missing $value + with contextlib.redirect_stderr(io.StringIO()): + strict_bundle.format_pattern("amount", {}) # Missing $value except FormattingIntegrityError as e: print(f"[FAIL-FAST] {e.message_id}: {len(e.fluent_errors)} error(s)") print(f" Fallback would have been: {e.fallback_value!r}") diff --git a/examples/stubs/threading.pyi b/examples/stubs/threading.pyi deleted file mode 100644 index 33265572..00000000 --- a/examples/stubs/threading.pyi +++ /dev/null @@ -1,84 +0,0 @@ -"""Type stubs for threading module to improve type checking in examples. - -This stub file provides enhanced typing for threading.local() and other -threading primitives used in examples/thread_safety.py. - -NOTE: This is a local stub for example code only. It augments the standard -typeshed threading stubs with better support for dynamic attributes on -threading.local(). - -For production code, consider using TypedDict or dataclass wrappers around -threading.local() instead of relying on dynamic attributes. -""" - -# ruff: noqa: PIE790 # ... is required in stub files, not unnecessary -# pylint: disable=unnecessary-ellipsis # ... is required in stub files per PEP 484 - -from collections.abc import Callable -from typing import Any - -class local: # noqa: N801 # pylint: disable=invalid-name - """Enhanced type stub for threading.local() with dynamic attribute support. - - Type stub: Matches stdlib threading.local class naming convention. - This stub allows mypy to understand that threading.local() instances can - have arbitrary attributes set at runtime. - - Usage in examples/thread_safety.py: - thread_local = threading.local() - thread_local.bundle = FluentBundle(...) # mypy understands this - return thread_local.bundle # type: ignore still needed for generic return - """ - - def __init__(self) -> None: ... - def __getattribute__(self, name: str) -> Any: ... - def __setattr__(self, name: str, value: Any) -> None: ... - def __delattr__(self, name: str) -> None: ... - -class Thread: # pylint: disable=too-many-positional-arguments - """Thread class stub.""" - - def __init__( # pylint: disable=unused-argument - self, - group: None = None, - target: Callable[..., Any] | None = None, - name: str | None = None, - args: tuple[Any, ...] = (), - kwargs: dict[str, Any] | None = None, - *, - daemon: bool | None = None, - ) -> None: - """Initialize thread.""" - ... - def start(self) -> None: - """Start thread execution.""" - ... - def join(self, timeout: float | None = None) -> None: # pylint: disable=unused-argument - """Wait for thread completion.""" - ... - @property - def ident(self) -> int | None: - """Thread identifier.""" - ... - -class Lock: - """Lock class stub.""" - - def __init__(self) -> None: - """Initialize lock.""" - ... - def acquire(self, blocking: bool = True, timeout: float = -1) -> bool: # pylint: disable=unused-argument - """Acquire lock.""" - ... - def release(self) -> None: - """Release lock.""" - ... - def __enter__(self) -> bool: - """Enter context manager.""" - ... - def __exit__(self, *args: object) -> None: # pylint: disable=unused-argument - """Exit context manager.""" - ... - -def current_thread() -> Thread: - """Return current thread.""" diff --git a/examples/thread_safety.py b/examples/thread_safety.py index 8325cdaf..25c9b611 100644 --- a/examples/thread_safety.py +++ b/examples/thread_safety.py @@ -14,7 +14,7 @@ Demonstrates: 1. Single-threaded initialization pattern (recommended for static resources) 2. Concurrent read operations (always safe) -3. Thread-local bundles (alternative for per-thread customization) +3. Per-worker bundles (alternative for per-thread customization) 4. Dynamic resource loading (always safe without manual locks) WARNING: Examples use use_isolating=False for cleaner terminal output. @@ -112,55 +112,47 @@ def process_file(filename: str, bundle_ref: FluentBundle) -> str: print("\n[SUCCESS] All files processed") -# Example 3: Thread-local bundles (alternative for per-thread customization) -def example_3_thread_local_bundles() -> None: - """Example 3: Each thread gets its own bundle (for per-thread customization).""" +# Example 3: Per-worker bundles (alternative for per-thread customization) +def example_3_per_worker_bundles() -> None: + """Example 3: Each worker builds its own bundle when customization is isolated.""" print("\n" + "=" * 60) - print("Example 3: Thread-local Bundles") + print("Example 3: Per-worker Bundles") print("=" * 60) - print("[NOTE] Useful when each thread needs different resources or functions\n") - - # Thread-local storage for bundles - thread_local = threading.local() - - def get_or_create_bundle() -> FluentBundle: - """Get bundle for current thread (creates if needed).""" - if not hasattr(thread_local, "bundle"): - # Each thread creates its own bundle - bundle: FluentBundle = FluentBundle("en", use_isolating=False) - thread_local.bundle = bundle - thread_local.bundle.add_resource(""" + print("[NOTE] Useful when each worker needs different resources or functions\n") + + def build_worker_bundle() -> FluentBundle: + """Create a bundle owned by the current worker.""" + bundle = FluentBundle("en", use_isolating=False) + bundle.add_resource(""" worker-msg = Worker thread { $tid } initialized task = Processing task { $task_id } - """) - print(f" [Thread-{threading.current_thread().ident}] Created bundle") - - # Type ignore: threading.local() has dynamic attributes - return thread_local.bundle # type: ignore[no-any-return] + """) + return bundle - def worker_with_local_bundle(task_id: int) -> None: - """Worker that uses thread-local bundle.""" - bundle = get_or_create_bundle() + def worker_with_own_bundle(task_id: int) -> None: + """Worker that uses its own dedicated bundle.""" + bundle = build_worker_bundle() tid = threading.current_thread().ident + print(f" [Thread-{tid}] Created bundle") result, _ = bundle.format_pattern("worker-msg", {"tid": tid}) print(f" {result}") task_result, _ = bundle.format_pattern("task", {"task_id": task_id}) print(f" {task_result}") - print("[EXECUTION] Creating thread-local bundles:") + print("[EXECUTION] Creating per-worker bundles:") threads = [] for i in range(3): - t = threading.Thread(target=worker_with_local_bundle, args=(i,)) + t = threading.Thread(target=worker_with_own_bundle, args=(i,)) threads.append(t) t.start() for t in threads: t.join() - print("\n[SUCCESS] Thread-local bundles pattern complete") + print("\n[SUCCESS] Per-worker bundles pattern complete") # Example 4: Dynamic resource loading (always safe) @@ -213,7 +205,7 @@ def add_and_read(worker_id: int) -> None: if __name__ == "__main__": example_1_recommended_pattern() example_2_threadpool_pattern() - example_3_thread_local_bundles() + example_3_per_worker_bundles() example_4_dynamic_loading() print("\n" + "=" * 60) @@ -222,5 +214,5 @@ def add_and_read(worker_id: int) -> None: print("\nRECOMMENDATIONS:") print(" - Static resources: Use Example 1 (single-threaded init)") print(" - Dynamic resources: Use Example 4 (always safe)") - print(" - Per-thread customization: Use Example 3 (thread-local)") + print(" - Per-worker customization: Use Example 3 (per-worker bundles)") print("\n[NOTE] All FluentBundle instances are thread-safe.") diff --git a/fuzz_atheris/README.md b/fuzz_atheris/README.md index 8fee84ed..b4b8fe5e 100644 --- a/fuzz_atheris/README.md +++ b/fuzz_atheris/README.md @@ -1,1087 +1,48 @@ --- -afad: "3.3" +afad: "3.5" version: "0.163.0" domain: FUZZING -updated: "2026-03-23" +updated: "2026-04-22" route: - keywords: [fuzzing, coverage, atheris, libfuzzer, fuzz, seeds, corpus] - questions: ["what do the fuzzers cover?", "what modules are fuzzed?", "what is not fuzzed?"] ---- - -# Fuzzer Coverage Inventory - -**Purpose**: Stock-taking of what the Atheris/libFuzzer fuzzing infrastructure covers, enabling gap analysis and planning. - -## Fuzzer Summary - -| Fuzzer | Target Module(s) | Patterns | Seeds | Concern | -|:-------|:-----------------|:---------|:------|:--------| -| `fuzz_bridge.py` | `runtime.function_bridge`, `core.value_types` | 16 | 33 (.bin) | FunctionRegistry machinery, FluentNumber contracts, `make_fluent_number()` | -| `fuzz_graph.py` | `analysis.graph` | 12 | 24 (.bin) | Dependency graph cycle detection, canonicalization | -| `fuzz_builtins.py` | `runtime.functions` | 13 | 24 (.bin) | Babel formatting boundary (NUMBER, DATETIME, CURRENCY); ROUND_HALF_EVEN oracle | -| `fuzz_cache.py` | `runtime.bundle`, `runtime.cache`, `integrity` | 14 | 38 (.ftl) + 15 (.bin) | Cache concurrency, integrity, and public audit-trail access | -| `fuzz_currency.py` | `runtime.functions` | 11 | 65 (.txt) + 26 (.bin) | ROUND_HALF_EVEN oracle, `use_grouping`, `currency_digits`, `numbering_system` parameters, custom `pattern=` precision alignment, locale matrix (CURRENCY) | -| `fuzz_parse_currency.py` | `parsing.currency`, `parsing.guards` | 9 | 5 (.txt) + 20 (.bin) | Locale-aware currency parsing, symbol disambiguation, cache stability | -| `fuzz_iso.py` | `introspection.iso`, `ftllexengine` | 12 | 36 (.bin) | ISO 3166/4217 introspection; `get_currency_decimal_digits` oracle; `clear_module_caches(components=...)`; `TerritoryInfo.official_languages` invariants | -| `fuzz_lock.py` | `runtime`, `runtime.rwlock` | 16 | 39 (.bin) | RWLock concurrency primitives and public runtime export | -| `fuzz_numbers.py` | `runtime.functions` | 9 | 70 (.txt) + 19 (.bin) | ROUND_HALF_EVEN oracle, `numbering_system` parameter, custom `pattern=` path, boundary values, min>max clamping (NUMBER) | -| `fuzz_parse_decimal.py` | `parsing.numbers`, `parsing.guards`, `core.locale_utils` | 9 | 9 (.txt) + 1 (.bin) | Locale-aware decimal parsing, FluentNumber parsing, locale normalization/cache behavior, boundary locale validation, pseudo-locale fallback | -| `fuzz_plural.py` | `runtime.plural_rules` | 11 | 37 (.bin) | CLDR plural category selection; ordinal plural rules (`ordinal=True`) | -| `fuzz_oom.py` | `syntax.parser` | 16 | 42 (.ftl) + 8 (.bin) | Parser object explosion (DoS) | -| `fuzz_roundtrip.py` | `syntax.parser`, `syntax.serializer` | 13 | 31 (.bin) + 4 (.ftl) | Parser-serializer convergence | -| `fuzz_runtime.py` | `runtime.bundle`, `runtime.cache`, `integrity`, `diagnostics.errors` | 6+8 | 100 (.bin) | Full runtime stack, strict mode, FluentBundle AST lookup facade, canonical locale boundary | -| `fuzz_serializer.py` | `syntax.serializer`, `syntax.parser`, `syntax.visitor` | 13 | 26 (.bin) | AST-construction serializer roundtrip, visitor/transformer validation | -| `fuzz_scope.py` | `runtime.resolver`, `runtime.bundle` | 13 | 29 (.bin) | Variable scoping, term isolation, depth guards, expansion budget | -| `fuzz_structured.py` | `syntax.parser`, `syntax.serializer` | 10 | 16 (.ftl) + 6 (.bin) | Grammar-aware AST construction | -| `fuzz_cursor.py` | `syntax.cursor`, `syntax.position` | 8 | 5 (.txt) + 35 (.bin) | Cursor state machine, ParseError formatting, position helper parity | -| `fuzz_localization.py` | `localization.orchestrator`, `localization.loading` | 24 | 13 (.bin) | FluentLocalization orchestration, canonical locale boundary, boot validation, `required_messages`, `boot()`/`boot_simple()` 3-tuple API, single-message schema validation, AST lookup, cache audit trails, loader init, LoadSummary, fallback chains | -| `fuzz_dates.py` | `parsing.dates` | 14 | 59 (.bin) | CLDR→strptime token mapping, parse_date/parse_datetime locale-aware parsing; 4-digit year oracle (lv-LV/de-DE) | -| `fuzz_locale_context.py` | `runtime.locale_context`, `core.locale_utils` | 18 | 29 (.bin) | LocaleContext direct formatting, canonical locale_code contract, ROUND_HALF_EVEN oracle, `numbering_system`/`use_grouping`/`currency_digits` parameters, cross-locale determinism | -| `fuzz_introspection.py` | `introspection.message` | 13 | 25 (.bin) | IntrospectionVisitor, ReferenceExtractor, programmatic AST construction; `validate_message_variables` schema oracle | -| `fuzz_diagnostics_formatter.py` | `diagnostics.formatter`, `diagnostics.validation` | 12 | 23 (.bin) | Control-char escaping, RUST/SIMPLE/JSON output, sanitize/redact modes | - -## Module Coverage Matrix - -| Source Module | Fuzzers Covering It | -|:--------------|:--------------------| -| `analysis.graph` | graph | -| `core.locale_utils` | parse_decimal, runtime, localization, locale_context | -| `diagnostics.errors` | runtime, oom, numbers, currency, cache, integrity, builtins | -| `diagnostics.formatter` | diagnostics_formatter | -| `diagnostics.validation` | diagnostics_formatter, integrity | -| `integrity` | runtime, cache, integrity | -| `introspection.iso` | iso | -| `introspection.message` | introspection | -| `localization.loading` | localization | -| `localization.orchestrator` | localization | -| `parsing.currency` | parse_currency | -| `parsing.dates` | dates | -| `parsing.guards` | parse_currency, parse_decimal | -| `parsing.numbers` | parse_decimal | -| `runtime` | lock | -| `runtime.function_bridge` | bridge | -| `runtime.functions` | builtins, runtime, currency, numbers | -| `runtime.bundle` | runtime, cache, integrity, scope, localization | -| `runtime.locale_context` | locale_context, builtins | -| `runtime.resolver` | scope | -| `runtime.cache` | runtime, cache | -| `runtime.plural_rules` | plural | -| `runtime.rwlock` | lock | -| `core.value_types` | bridge | -| `syntax.cursor` | cursor | -| `syntax.parser` | oom, roundtrip, serializer, structured | -| `syntax.position` | cursor | -| `syntax.serializer` | roundtrip, serializer, structured | -| `syntax.visitor` | serializer | - -## `fuzz_bridge` - -Target: `runtime.function_bridge`, `core.value_types` -- FunctionRegistry lifecycle, `_to_camel_case`, parameter mapping, FluentNumber contracts, `make_fluent_number()`, `fluent_function` decorator, freeze/copy isolation, dict-like interface, metadata API, signature validation error paths. - -Concern boundary: This fuzzer stress-tests the bridge machinery that connects FTL function calls to Python implementations. Distinct from fuzz_builtins which tests built-in functions (NUMBER, DATETIME, CURRENCY) through the bridge; this fuzzer tests the bridge itself: registration, dispatch, parameter conversion, lifecycle, direct FluentNumber construction, and introspection. Tests registration error paths (inject_locale arity validation, underscore collision detection, auto-naming), metadata API (get_expected_positional_args, get_builtin_metadata, has_function), `make_fluent_number()` visible-precision inference, and adversarial Python objects through FluentBundle resolution. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `BridgeMetrics` dataclass (register calls/failures, call dispatch tests/errors, FluentNumber checks, `make_fluent_number()` checks, camel case tests, freeze/copy tests, locale injection tests, signature validation tests, metadata API tests, evil object tests). Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -16 patterns across 4 categories: - -**REGISTRATION (4)** - Function registration and validation: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `register_basic` | 10 | len(registry) matches registration count | -| `register_signatures` | 12 | Positional-only, *args, **kwargs, many params, lambda, overwrite | -| `param_mapping_custom` | 8 | Custom param_map overrides auto-generated mapping | -| `signature_validation` | 6 | inject_locale arity TypeError, underscore collision ValueError, auto-naming | - -**CONTRACTS (4)** - Object immutability and type contracts: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `fluent_number_contracts` | 12 | str, __contains__, __len__, repr, frozen, precision=None | -| `make_fluent_number_api` | 10 | default Decimal precision, grouped/localized formatting inference, bool rejection | -| `signature_immutability` | 5 | FunctionSignature frozen, param_mapping tuple, ftl_name, fuzzed lookup | -| `camel_case_conversion` | 10 | Known snake->camelCase pairs, fuzzed input returns str | - -**DISPATCH (4)** - Call dispatch and error handling: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `call_dispatch` | 12 | call() returns result or raises for unknown function | -| `locale_injection` | 10 | should_inject_locale flag, FluentBundle locale protocol | -| `error_wrapping` | 7 | TypeError/ValueError wrapped as FrozenFluentError | -| `evil_objects` | 5 | Evil __str__, __hash__, recursive list/dict, huge str, None through FluentBundle | - -**INTROSPECTION (4)** - Registry introspection and lifecycle: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `dict_interface` | 8 | __contains__, __iter__, list_functions, get_python_name, get_callable, __repr__ | -| `freeze_copy_lifecycle` | 8 | Freeze prevents registration, copy is independent+unfrozen, idempotent | -| `fluent_function_decorator` | 8 | Bare, parenthesized, inject_locale=True attribute, registry integration | -| `metadata_api` | 6 | get_expected_positional_args, get_builtin_metadata, has_function vs __contains__ | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OverflowError`, `ArithmeticError`, `FrozenFluentError`, `RecursionError`, `RuntimeError` -- invalid inputs, frozen registry mutations, and adversarial object interactions. - ---- - -## `fuzz_builtins` - -Target: `runtime.functions` (NUMBER, DATETIME, CURRENCY) -- direct Babel formatting API boundary testing. - -Concern boundary: This fuzzer stress-tests the Babel formatting boundary by calling NUMBER, DATETIME, and CURRENCY functions directly through the Python API. This is distinct from fuzz_runtime which invokes these functions through FTL syntax and the resolver stack. Direct API testing isolates the Babel layer from resolver/cache behavior and enables: fuzz-generated Babel pattern strings (pattern= parameter), FluentNumber precision (CLDR v operand) correctness verification, currency-specific decimal digit enforcement (JPY=0, BHD=3), ROUND_HALF_EVEN rounding oracle verification (NUMBER and CURRENCY), type coercion across int/float/Decimal/FluentNumber inputs, cross-locale formatting consistency, and edge value handling (NaN, Inf, -0.0, extreme magnitudes). FunctionRegistry lifecycle, parameter mapping, and locale injection protocol are covered by fuzz_bridge.py. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `BuiltinsMetrics` dataclass (per-function call counts, precision checks/violations, cross-locale tests, type coercion tests, custom pattern tests, edge value tracking, rounding oracle checks/violations, min_gt_max coverage). Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -Run this fuzzer in isolation: `./scripts/fuzz_atheris.sh builtins` (uses `.venv-atheris`, independent of the project venv). Linting of this directory is covered by `./scripts/lint.sh` (auto-discovers all directories with `.py` files). - -### Patterns - -13 patterns across 4 categories: - -**NUMBER (4)** - Decimal/FluentNumber formatting: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `number_basic` | 12 | Result is FluentNumber, fraction/grouping variation; independent min/max draws | -| `number_precision` | 15 | CLDR v operand non-negative; ROUND_HALF_EVEN oracle (all ASCII-digit locales); independent min/max draws (covers min > max clamp path) | -| `number_edges` | 8 | NaN, Inf, -0.0, huge, tiny stability | -| `number_type_variety` | 8 | int/float/Decimal/FluentNumber all produce FluentNumber | - -**DATETIME (3)** - Date/time formatting: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `datetime_styles` | 10 | Non-empty string result, all style combos | -| `datetime_edges` | 8 | Epoch, Y2K, max timestamp, timezone offsets | -| `datetime_timezone_stress` | 6 | Fixed-offset timezones (-12h to +14h), UTC, naive | - -**CURRENCY (3)** - Currency formatting: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `currency_codes` | 12 | FluentNumber result, valid/fuzzed ISO codes | -| `currency_precision` | 10 | Currency-specific decimals (JPY=0, BHD=3); ROUND_HALF_EVEN oracle (all ASCII-digit locales) | -| `currency_cross_locale` | 8 | Same currency formatted across locales | - -**CROSS-CUTTING (3)** - Multi-function and consistency: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `custom_pattern` | 8 | Custom Babel patterns for all 3 functions | -| `cross_locale_consistency` | 8 | Same value, 3+ locales, deterministic results; independent min/max draws | -| `error_paths` | 5 | Negative/huge fraction digits, empty/invalid currency | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OverflowError`, `InvalidOperation`, `OSError`, `ArithmeticError` -- invalid inputs and Babel formatting limitations. - -### Rounding Oracle Design - -`number_precision` and `currency_precision` include a ROUND_HALF_EVEN oracle that verifies Babel's default rounding mode. Babel uses `decimal_quantization=True` which applies ROUND_HALF_EVEN (IEEE 754 banker's rounding) — 2.5 rounds to 2, 3.5 rounds to 4. The oracle covers all locales where digit extraction is possible. - -**Digit extraction** (`_extract_oracle_digits`): Uses `babel.numbers.get_decimal_symbol(locale)` and `get_group_symbol(locale)` to normalize the formatted string for any locale. Normalization removes group separators first (critical for de-DE where group separator is `.`), replaces the decimal separator with ASCII `.`, then strips all remaining non-digit characters (currency codes, whitespace, signs). Locales with non-ASCII digits (ar-EG Arabic-Indic, hi-IN Devanagari) are detected via `c.isdigit() and not c.isascii()` and skipped. Unknown locales (Babel raises `UnknownLocaleError`) are skipped via `except ValueError`. - -**Oracle check**: For each non-NaN/non-Inf Decimal result where `_extract_oracle_digits` returns a value: `expected = abs(val).quantize(10^-precision, rounding=ROUND_HALF_EVEN)` is compared against the extracted digits. NaN and Infinity skip the oracle via `InvalidOperation` from `quantize()`. - -**Input domain**: `min_frac` and `max_frac` are drawn independently (not `max_frac = ConsumeIntInRange(min_frac, N)`). This ensures the `min > max` clamping path in `format_number()` is exercised — a path that previously could trigger incorrect digit counts. - ---- - -## `fuzz_cache` - -Target: `runtime.cache` (via `FluentBundle` public API) -- cache parameter combinations, multi-threaded access (2-8 threads), LRU eviction stress, concurrent resource modification, write-once cache behavior, cache key complexity, and public audit-log visibility. - -Concern boundary: This fuzzer stress-tests the cache subsystem by systematically varying ALL cache constructor parameters (size, entry weight, error limits, write-once, audit mode) under concurrent multi-threaded access. This is distinct from the runtime fuzzer which tests the full resolver stack with fixed cache configs and only 2 threads. Unique coverage includes: cache parameter combinations (5 params = large state space), high thread concurrency (2-8 threads vs runtime's 2), cache eviction/LRU stress, concurrent resource modification during formatting, write-once cache behavior, cache key complexity via `_make_hashable`, and `FluentBundle.get_cache_audit_log()` consistency against `get_cache_stats()`. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `CacheMetrics` dataclass (cache operations, write conflicts, oversize skips, error bloat, corruption events, audit-log checks, thread timeouts). Cache stats and audit logs are collected per-iteration via `bundle.get_cache_stats()` and `bundle.get_cache_audit_log()`, with invariant checks on tuple shape, `WriteLogEntry` typing, stats/log count agreement, non-decreasing audit timestamps, and operation-specific sequence/checksum structure. Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -14 patterns across 3 categories: - -**CACHE_KEYS (7)** - Cache key variation and complexity: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `variable_messages` | 10 | Cache key varies with args | -| `attribute_messages` | 8 | Attribute-qualified cache keys | -| `select_expressions` | 8 | Complex pattern caching | -| `message_references` | 6 | Cross-message resolution cache | -| `term_references` | 6 | Namespace variation in keys | -| `many_variables` | 6 | Key complexity scaling (5-10 placeables) | -| `deep_args` | 8 | Nested dicts/lists, unhashable types stress `_make_hashable` | - -**STRESS_PATTERNS (4)** - Capacity and resource stress: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `long_values` | 5 | Memory weight enforcement | -| `circular_refs` | 5 | Error caching on cycles | -| `minimal_resource` | 4 | Empty/trivial resource edge cases | -| `hotspot` | 8 | Repeated access cache hit efficiency | - -**CONCURRENCY (3)** - Multi-threaded scenarios: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `capacity_stress` | 10 | LRU eviction under capacity pressure | -| `concurrent_modify` | 8 | Race conditions: resource modification during formatting | -| `frozen_cache` | 8 | Write-once cache behavior (immutable entries) | - -### Allowed Exceptions - -`CacheCorruptionError`, `WriteConflictError`, `DataIntegrityError`, `FrozenFluentError`, `ValueError`, `TypeError`, `KeyError`, `RecursionError`, `MemoryError` -- cache integrity violations are expected findings; other exceptions from invalid inputs and depth guards. - ---- - -## `fuzz_graph` - -Target: `analysis.graph` -- `_canonicalize_cycle`, `make_cycle_key`, `detect_cycles`, `entry_dependency_set`. Validates cycle detection correctness, canonicalization invariants, and namespace-prefixed dependency set construction. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `canonicalize_idempotence` | 12 | Double canonicalization is identity, closing element preserved | -| `canonicalize_direction` | 10 | A->B->C and A->C->B produce distinct canonical forms | -| `make_cycle_key_consistency` | 8 | Key matches joined canonical form, rotation-invariant (unique nodes) | -| `canonicalize_edge_cases` | 6 | Empty, single, two-element sequences handled correctly | -| `detect_self_loops` | 10 | Self-referencing node detected as cycle of length 2 | -| `detect_simple_cycles` | 12 | Known N-node ring detected, all nodes present | -| `detect_dag_no_cycles` | 10 | Acyclic graphs return empty cycle list | -| `detect_disconnected` | 8 | Independent components each detect their own cycles | -| `detect_dense_mesh` | 8 | Complete graph cycle detection stability | -| `detect_deep_chain` | 8 | Long chain (up to 200 nodes) with back-edge cycle detection | -| `entry_dependency_set` | 10 | Namespace prefixing, frozenset return, count preservation | -| `adversarial_graph` | 5 | Unicode node IDs, empty strings, whitespace-only identifiers | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `RecursionError` -- invalid inputs and graph construction edge cases. - ---- - -## `fuzz_currency` - -Target: `runtime.functions.currency_format` -- ROUND_HALF_EVEN oracle testing, custom `pattern=` precision alignment, locale matrix, display mode preservation, `use_grouping`/`currency_digits`/`numbering_system` parameter coverage, and `FluentNumber` wrapper contracts. - -Concern boundary: This fuzzer stress-tests the runtime CURRENCY function formatting path. Distinct from `fuzz_builtins` (which covers NUMBER/DATETIME/CURRENCY via the FTL `FluentBundle` evaluation pipeline); this fuzzer calls `currency_format` directly to probe oracle correctness, custom pattern precision alignment, and boundary-value rounding at precision 0, 2, and 3. Found production bug FIX-CURRENCY-PATTERN-PREC-001 on its first run (~1009 iterations): `format_currency` with a custom pattern and a currency whose CLDR precision differs from the pattern's declared decimal count produced incorrect rounding because `currency_digits=True` caused Babel to override the pattern's decimal count after pre-quantization. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `CurrencyMetrics` dataclass. Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -11 patterns across 5 categories: - -**PRECISION (3)** - Per-currency decimal precision and custom pattern precision: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `0decimal_oracle` | 12 | JPY, KRW (0 decimals): ROUND_HALF_EVEN at integer boundary | -| `3decimal_oracle` | 13 | BHD, KWD, OMR (3 decimals): x.0005 midpoints | -| `pattern_oracle` | 16 | Custom `pattern=` with CLDR-differing currency: precision must match pattern, not CLDR | - -**ORACLE (3)** - ROUND_HALF_EVEN correctness across value ranges: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `boundary_values` | 15 | 2-decimal currencies (USD, EUR, GBP, AUD, CAD, CHF): x.005 midpoints | -| `large_oracle` | 11 | Large positive amounts (>1e6): non-empty, ROUND_HALF_EVEN preserved | -| `negative_oracle` | 11 | Negative amounts: ROUND_HALF_EVEN preserved; abs() applied before oracle comparison | - -**LOCALE (1)** - Cross-locale consistency: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `locale_matrix` | 11 | Same value across 10 locales: all non-empty, no exception | - -**DISPLAY (1)** - Currency display mode contracts: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `display_preservation` | 11 | symbol/code/name: result contains currency identifier; not empty | - -**PARAMETERS (3)** - New formatting parameter coverage: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `use_grouping` | 8 | `use_grouping=True/False` on large amounts: non-empty FluentNumber returned | -| `digits_override` | 8 | `currency_digits=True/False`: ISO 4217 precision applied or bypassed; non-empty | -| `numbering_system` | 7 | Non-Latin digit systems (arab, arabext, deva, beng): non-empty; determinism | - -### Allowed Exceptions - -`ValueError`, `TypeError` -- invalid currency codes and type validation. - ---- - -## `fuzz_parse_currency` - -Target: `parsing.currency.parse_currency`, `parsing.currency.resolve_ambiguous_symbol`, `parsing.currency._get_currency_pattern` -- locale-aware currency parsing, ambiguous symbol disambiguation, longest-match symbol regex behavior, and cache stability. - -Concern boundary: This fuzzer owns the text-to-`(Decimal, ISO code)` parse surface that the runtime-formatting fuzzers do not reach. It covers ISO-code parsing, symbol-only parsing, `default_currency=` and `infer_from_locale=` disambiguation, public soft-error contracts, direct ambiguous-symbol helper behavior, and cache-clearing stability. It also targets the longest-match regex path for multi-character symbols such as `R$` and `S/`, which is distinct from runtime formatting. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `ParseCurrencyMetrics` dataclass. Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `iso_code_values` | 14 | `USD 1,234.56`-style inputs parse to exact `(Decimal, code)` pairs | -| `default_currency_ambiguous` | 12 | Ambiguous symbols resolve to explicit `default_currency` | -| `infer_from_locale` | 12 | Ambiguous symbols resolve from locale inference when enabled | -| `ambiguous_symbol_resolution` | 10 | `resolve_ambiguous_symbol()` matches locale defaults for `$`, `£`, `¥` | -| `longest_symbol_match` | 10 | Multi-character symbols beat shorter prefixes in regex matching | -| `invalid_currency_inputs` | 12 | Invalid codes/ambiguous inputs return soft errors, not silent success | -| `cache_clear_cycle` | 10 | `clear_currency_caches()` does not change parse semantics | -| `type_guard_contract` | 10 | `is_valid_currency()` accepts valid tuples and rejects malformed values | -| `raw_unicode_stability` | 12 | Arbitrary Unicode inputs preserve the public result-or-errors contract | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OSError`, `UnicodeEncodeError`, `FrozenFluentError` -- invalid locale/input handling and soft-error plumbing. - ---- - -## `fuzz_fiscal` - -Target: `parsing.fiscal` -- `FiscalCalendar`, `FiscalDelta`, `FiscalPeriod`, `MonthEndPolicy`, and 5 convenience functions (`fiscal_quarter`, `fiscal_year`, `fiscal_month`, `fiscal_year_start`, `fiscal_year_end`). Tests date arithmetic correctness, boundary conditions, month-end policy handling, algebraic properties, type validation error paths, and immutability contracts. - -Concern boundary: Sole owner of the `parsing.fiscal` module. No other fuzzer imports or exercises any fiscal API. Tests FiscalCalendar cross-consistency (fiscal_year/quarter/month/period agreement, quarter contiguity, year span 365/366), FiscalDelta algebraic properties (commutativity, double negation, __sub__ == __add__ + __neg__, __mul__/__rmul__ symmetry, total_months), cross-policy ValueError enforcement, MonthEndPolicy CLAMP/STRICT invariants, FiscalPeriod frozen dataclass contracts (hash, eq, ordering, repr, validation), and convenience function oracle testing against FiscalCalendar methods. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `FiscalMetrics` dataclass (per-pattern check counts). Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -10 patterns across 4 categories: - -**CALENDAR (3)** - FiscalCalendar invariants and identity: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `calendar_invariants` | 15 | Quarter 1-4, month 1-12, date in fiscal year, period agreement | -| `quarter_boundaries` | 10 | Quarter start/end contiguous, span 365/366 days | -| `calendar_identity` | 5 | Hash, equality, repr, frozen, type validation, range validation | - -**ARITHMETIC (4)** - FiscalDelta operations and policies: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `delta_add_subtract` | 12 | add_to returns date, subtract_from == negate().add_to(), CLAMP month-end, STRICT ValueError | -| `delta_algebra` | 12 | Commutativity, double negation, __neg__ == negate(), total_months, __mul__/__rmul__, __sub__ | -| `policy_cross` | 8 | with_policy preserves components, cross-policy add/sub ValueError, all policies valid | -| `delta_validation` | 5 | Non-int fields TypeError, non-MonthEndPolicy TypeError, valid construction | - -**CONTRACTS (2)** - Immutability and oracle testing: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `period_contracts` | 8 | Hash, equality, ordering (__lt__/__gt__/__le__/__ge__), frozen, repr, validation | -| `convenience_oracle` | 8 | All 5 convenience functions match FiscalCalendar methods | - -**STRESS (1)** - Boundary conditions: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `boundary_stress` | 5 | Extreme dates (year 1-9999), large deltas, result type assertion | - -### Allowed Exceptions - -`ValueError`, `OverflowError`, `TypeError` -- invalid dates, arithmetic overflow, and type validation. - ---- - -## `fuzz_integrity` - -Target: `validation.validate_resource` (standalone 6-pass validation), `syntax.validator.SemanticValidator` (E0001-E0013), `integrity` (DataIntegrityError hierarchy), `FluentBundle` strict mode (SyntaxIntegrityError, FormattingIntegrityError), `diagnostics.errors.FrozenFluentError` (integrity, immutability, sealed type, hash stability). - -Concern boundary: Validation gauntlet -- semantic integrity checks, cross-resource validation with `known_messages`/`known_terms`/`known_msg_deps`, chain depth limits (>MAX_DEPTH), strict mode DataIntegrityError triggering, and FrozenFluentError Error Layer properties. Distinct from fuzz_graph (direct cycle detection API) and fuzz_runtime (resolver stack, not validation). - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `IntegrityMetrics` dataclass (validation codes, strict mode exceptions, cross-resource conflicts, chain depth violations, FrozenFluentError coverage counters). Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -31 patterns across 6 categories: - -**VALIDATION (10)** - Standalone `validate_resource()`: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `valid_simple` | 8 | Valid FTL accepted without errors | -| `valid_complex` | 6 | Multi-entry with refs, terms, selects | -| `syntax_errors` | 8 | Junk extraction, parse error codes | -| `undefined_refs` | 10 | UNDEFINED_REFERENCE warning | -| `circular_2way` | 8 | 2-node cycle detection | -| `circular_3way` | 6 | 3-node cycle detection | -| `circular_self` | 6 | Self-reference detection | -| `duplicate_ids` | 8 | DUPLICATE_ID warning | -| `chain_depth_limit` | 10 | CHAIN_DEPTH_EXCEEDED for >MAX_DEPTH | -| `mixed_issues` | 6 | Multiple validation issues | - -**SEMANTIC (6)** - SemanticValidator (E0001-E0013): - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `semantic_no_default` | 8 | SELECT_NO_DEFAULT detection | -| `semantic_duplicate_variant` | 6 | VARIANT_DUPLICATE detection | -| `semantic_duplicate_named_arg` | 6 | NAMED_ARG_DUPLICATE detection | -| `semantic_term_positional` | 6 | TERM_POSITIONAL_ARGS warning | -| `semantic_no_variants` | 6 | Malformed select -> Junk | -| `semantic_combined` | 5 | Multiple semantic issues | - -**STRICT_MODE (5)** - DataIntegrityError triggering: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `strict_syntax_junk` | 10 | SyntaxIntegrityError on Junk | -| `strict_format_missing` | 8 | FormattingIntegrityError on missing msg | -| `strict_format_cycle` | 6 | Cycle in format triggers error | -| `strict_add_invalid` | 8 | Multiple Junk -> SyntaxIntegrityError | -| `strict_combined` | 5 | Various strict mode failures | - -**CROSS_RESOURCE (4)** - Multi-resource scenarios: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `cross_shadow` | 8 | SHADOW_WARNING with known_messages | -| `cross_cycle` | 10 | Cross-resource cycle via known_msg_deps | -| `cross_undefined` | 8 | Reference resolved by known_messages | -| `cross_chain_depth` | 6 | Chain depth spanning resources | - -**FROZEN_ERROR (4)** - FrozenFluentError Error Layer: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `frozen_error_integrity` | 8 | verify_integrity() True for uncorrupted errors across all ErrorCategory values | -| `frozen_error_immutability` | 8 | setattr and delattr raise ImmutabilityViolationError after construction | -| `frozen_error_sealed` | 6 | type() subclassing raises TypeError (fuzzed subclass name) | -| `frozen_error_hash_stability` | 6 | hash() and content_hash stable across repeated calls | - -**DOMAIN_INTEGRITY (2)** - LedgerInvariantError and PersistenceIntegrityError: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `domain_integrity_ledger` | 6 | `invariant_code`/`entity_ref` properties; `None` default for entity_ref; ImmutabilityViolationError on setattr; isinstance DataIntegrityError | -| `domain_integrity_persistence` | 6 | Basic construction matches message; ImmutabilityViolationError on setattr; isinstance DataIntegrityError | - -### Allowed Exceptions - -`DataIntegrityError` (and subclasses), `LedgerInvariantError`, `PersistenceIntegrityError`, `FrozenFluentError`, `ValueError`, `TypeError`, `KeyError`, `RecursionError`, `MemoryError` -- expected for strict mode and adversarial inputs. - ---- - -## `fuzz_iso` - -Target: `introspection.iso` -- ISO 3166-1 territory and ISO 4217 currency lookups, type guards, cache; `ftllexengine.clear_module_caches` -- selective and full module cache clearing. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `territory_lookup` | 15 | alpha2 matches input, name non-empty, hashable | -| `currency_lookup` | 15 | code matches input, decimal_digits in {0,2,3,4} | -| `type_guards` | 15 | Guard consistent with lookup result | -| `cache_consistency` | 12 | Repeated lookup returns same object | -| `list_functions` | 10 | Returns frozenset, elements typed, cardinality | -| `territory_currencies` | 10 | Returns tuple of 3-char uppercase codes | -| `cache_clear_stress` | 8 | Post-clear value equality preserved | -| `cross_reference` | 8 | Territory currencies resolve via get_currency | -| `invalid_input_stress` | 7 | Empty, long, null, unicode, mixed case | -| `decimal_digits_convenience` | 8 | `get_currency_decimal_digits` == `get_currency().decimal_digits`; valid range {0,2,3,4} | -| `clear_module_caches` | 6 | All-clear, single component, subset, unknown (silently ignored), re-lookup after clear | - -### Allowed Exceptions - -`BabelImportError`, `ValueError`, `KeyError`, `LookupError` -- Babel not installed or invalid locale/CLDR data. - ---- - -## `fuzz_lock` - -Target: `runtime.RWLock`, `runtime.rwlock.RWLock` -- public facade export identity, reader/writer exclusion, reentrant reads, write-reentry rejection, write-to-read downgrade rejection, read-to-write upgrade rejection, timeout, deadlock detection, negative timeout rejection, release-without-acquire rejection, zero-timeout non-blocking paths. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `LockMetrics` dataclass (deadlocks detected, public export checks, timeouts, thread creation count, max concurrent threads). Weight skew detection compares actual vs intended pattern distribution. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. Corpus retention rate and eviction tracking enabled. - -### Patterns - -Ordered cheapest-first. Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias that caused severe weight skew under FDP-based selection. Seed files provide FDP parameter bytes only (pattern is determined by iteration counter). - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `public_export_surface` | 4 | `ftllexengine.runtime.RWLock` aliases direct implementation and appears in runtime `__all__` | -| `reentrant_reads` | 5 | Same thread acquires read lock N times | -| `write_reentry_rejection` | 4 | Write-to-write reentry raises RuntimeError | -| `downgrade_rejection` | 4 | Write-to-read downgrade raises RuntimeError | -| `negative_timeout` | 4 | Negative timeout raises ValueError, lock still usable | -| `release_without_acquire` | 4 | Release without acquire raises RuntimeError, lock still usable | -| `upgrade_rejection` | 8 | Read-to-write upgrade raises RuntimeError | -| `zero_timeout_nonblocking` | 5 | timeout=0.0 fails immediately when lock held, sub-1ms | -| `rapid_lock_cycling` | 8 | Shared counter correct after rapid cycles | -| `cross_thread_handoff` | 6 | Rapid write handoff between threads, no lost entries | -| `concurrent_readers` | 12 | Multiple readers hold lock simultaneously | -| `timeout_acquisition` | 8 | TimeoutError raised, lock usable after timeout | -| `reader_writer_exclusion` | 15 | No concurrent reader+writer, no multi-writer | -| `writer_preference` | 10 | Waiting writer blocks new readers (fuzz-controlled timing) | -| `reader_starvation` | 6 | Continuous readers cannot starve waiting writer | -| `mixed_contention` | 7 | All prohibition checks and permitted ops interleaved across threads | - -### Allowed Exceptions - -`RuntimeError`, `TimeoutError`, `ValueError` -- expected from upgrade rejection, lock protocol violations, negative timeout rejection, and timeout-based acquisition. - ---- - -## `fuzz_numbers` - -Target: `runtime.functions.number_format` -- ROUND_HALF_EVEN oracle testing, custom `pattern=` path, grouping separator correctness, boundary values, min>max clamping, `numbering_system` parameter coverage, and `FluentNumber` wrapper contracts. - -Concern boundary: This fuzzer stress-tests the runtime NUMBER function formatting path. Distinct from `fuzz_builtins` (which covers NUMBER/DATETIME via the FTL `FluentBundle` evaluation pipeline with structural invariants); this fuzzer calls `number_format` directly to probe oracle correctness and covers the custom `pattern=` fast-path that `fuzz_builtins` does not reach. Key gap: `fuzz_builtins` verifies non-empty output and ROUND_HALF_EVEN at specific boundary values; this fuzzer covers ROUND_HALF_EVEN across 35 boundary pairs at precisions 0-3, grouping separator interaction with rounding, and the `minimumFractionDigits > maximumFractionDigits` clamping path. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `NumbersMetrics` dataclass. Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -9 patterns across 4 categories: - -**ORACLE (4)** - ROUND_HALF_EVEN correctness at precision boundaries: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `boundary_values` | 15 | 35 `(precision, x.y5)` midpoints: even-digit midpoints round down (ROUND_HALF_EVEN) | -| `grouping_oracle` | 16 | ROUND_HALF_EVEN with `use_grouping=True` across en-US/de-DE/fr-FR (gap in builtins) | -| `negative_oracle` | 12 | ROUND_HALF_EVEN preserved for negative values: abs() applied before oracle comparison | -| `pattern_oracle` | 13 | Custom `pattern=` path: `parse_pattern(p).frac_prec[1]` precision, ROUND_HALF_EVEN oracle | - -**BOUNDARY (2)** - Edge-case value handling: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `large_integers` | 11 | Values >1e9: non-empty, grouping separators present for en-US | -| `min_gt_max` | 11 | `minimumFractionDigits > maximumFractionDigits`: result non-empty, no exception | - -**CONTRACTS (2)** - Determinism and value preservation: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `determinism` | 11 | Same `(value, locale, kwargs)` always produces identical output | -| `value_preservation` | 11 | Formatted numeric content matches `Decimal` input through grouping/sign stripping | - -**PARAMETERS (1)** - New formatting parameter coverage: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `numbering_system` | 9 | Non-Latin digit systems (arab, arabext, deva, beng): non-empty FluentNumber; determinism | - -### Allowed Exceptions - -`ValueError`, `TypeError` -- invalid parameters and type validation. - ---- - -## `fuzz_parse_decimal` - -Target: `parsing.numbers.parse_decimal`, `parsing.numbers.parse_fluent_number`, `parsing.guards.is_valid_decimal`, `core.locale_utils` helpers -- locale-aware decimal parsing, FluentNumber parsing, locale normalization equivalence, locale boundary validation, Babel locale cache behavior, and system locale resolution. - -Concern boundary: This fuzzer owns the text-to-`Decimal` and text-to-`FluentNumber` parse surface that the runtime NUMBER-formatting fuzzers do not touch. It covers canonical locale-formatted inputs, the public `parse_decimal()` + `make_fluent_number()` composition contract exposed as `parse_fluent_number()`, locale spelling normalization (`en-US` vs `en_US` vs mixed case), `require_locale_code()` trim/type/structure/canonicalization rules, public soft-error contracts, Babel locale cache reuse/clearing, and `get_system_locale()` precedence through environment variables and `locale.getlocale()`, including encoded `C.UTF-8` / `POSIX.UTF-8` pseudo-locale fallback. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `ParseDecimalMetrics` dataclass (`parse_calls`, `parse_successes`, `soft_errors`, `fluent_number_checks`, locale variant/boundary/cache/system checks). Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `canonical_values` | 14 | Known locale-formatted decimals parse to exact `Decimal` values | -| `parse_fluent_number_api` | 12 | `parse_fluent_number()` matches public `parse_decimal()` + `make_fluent_number()` composition | -| `locale_variants` | 12 | Equivalent locale spellings produce identical parse results | -| `invalid_soft_error` | 12 | Invalid decimal text returns soft errors, not silent success | -| `require_locale_code_api` | 10 | `require_locale_code()` trims/canonicalizes valid input and rejects blank, invalid, non-string, and overlong values | -| `type_guard_contract` | 10 | `is_valid_decimal()` accepts valid finite decimals and rejects bad values | -| `babel_locale_cache` | 10 | Locale normalization/cache clear cycles preserve locale-object equivalence | -| `system_locale_resolution` | 10 | `get_system_locale()` respects precedence and skips encoded C/POSIX pseudo-locales | -| `raw_unicode_stability` | 12 | Arbitrary Unicode inputs preserve the public result-or-errors contract | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OSError`, `RuntimeError`, `UnicodeEncodeError`, `FrozenFluentError` -- invalid locale/input handling and soft-error plumbing. - ---- - -## `fuzz_plural` - -Target: `runtime.plural_rules.select_plural_category` -- CLDR plural category selection across locales, number types, and precision-aware v-operand handling. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `category_validity` | 15 | Result in {zero, one, two, few, many, other} | -| `precision_sensitivity` | 15 | Precision changes v operand, both results valid | -| `locale_coverage` | 12 | High-leverage locales with boundary numbers | -| `locale_fallback` | 8 | Invalid/unknown locales fall back gracefully | -| `determinism` | 12 | Same inputs always return same category | -| `number_type_variety` | 10 | int, float, Decimal all produce valid categories | -| `boundary_numbers` | 12 | CLDR boundary values (0, 1, 2, 5, 11, 21, 100) | -| `cache_consistency` | 8 | LRU-cached locale returns consistent results | -| `extreme_inputs` | 5 | Huge, negative, NaN, Inf, high precision | -| `raw_bytes` | 3 | Malformed input stability | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OverflowError`, `InvalidOperation` -- invalid numbers and arithmetic edge cases. - ---- - -## `fuzz_oom` - -Target: `syntax.parser.FluentParserV1` -- small inputs producing massive ASTs ("Billion Laughs" style DoS). - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `placeable_nest` | 8 | Nested placeable depth limit | -| `attribute_explosion` | 8 | Many attributes per message | -| `select_nest` | 7 | Nested select expressions | -| `variant_explosion` | 7 | Many variants per select | -| `reference_chain` | 8 | Long message reference chains | -| `term_nest` | 7 | Nested term references | -| `mixed_placeable_select` | 7 | Combined placeable/select nesting | -| `attribute_select_combo` | 7 | Attributes with selects inside | -| `raw_bytes` | 10 | Malformed input stability | -| `comment_flood` | 6 | Many comments before message | -| `message_flood` | 6 | Many small messages | -| `multiline_value` | 6 | Long multiline continuations | -| `variant_expression_explosion` | 6 | Variants with placeables in arms | -| `cyclic_chain` | 6 | Self-referencing message cycles | -| `term_message_cross_ref` | 6 | Terms and messages cross-referencing | -| `attr_deep_placeable` | 5 | Attributes with deep nesting | - -### Allowed Exceptions - -`FrozenFluentError` -- depth guard and max nesting enforcement. - ---- - -## `fuzz_roundtrip` - -Target: `syntax.parser.FluentParserV1`, `syntax.serializer.serialize` -- parser-serializer convergence property S(P(S(P(x)))) == S(P(x)) across all grammar productions. - -Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. FDP bytes are used exclusively for pattern parameters, not pattern selection. String and RegEx instrumentation hooks enabled for deeper coverage of identifier lookups and pattern-based parsing. Custom mutator parses valid FTL, applies AST-level mutations (swap variants, duplicate attributes, mutate variant keys, nest placeables, shuffle entries) using `dataclasses.replace()` on frozen AST nodes, serializes, then applies byte-level mutation on top. Multi-pass convergence checks (S2 == S3 == S4) verify serialization stabilizes within 3 passes. AST structural comparison (ignoring spans) catches bugs where serialization normalizes structural differences that string comparison misses. Junk ratio tracked and warned when >50%. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -When a convergence failure is detected, the fuzzer writes finding artifacts (source.ftl, s1.ftl, s2.ftl, meta.json) to `.fuzz_atheris_corpus/roundtrip/findings/`. These artifacts enable post-mortem debugging without Atheris and can be replayed via `python fuzz_atheris/fuzz_atheris_replay_finding.py`. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `simple_message` | 10 | Basic id = value roundtrips | -| `variable_placeable` | 12 | { $var } placeables survive roundtrip | -| `term_reference` | 8 | -term definitions and { -term } references | -| `message_reference` | 8 | { other-msg } cross-references | -| `select_expression` | 15 | Plural/string selector with variants | -| `attributes` | 10 | .attr = value on messages | -| `comments` | 5 | #, ##, ### comment types | -| `function_call` | 8 | NUMBER, DATETIME, CURRENCY with args | -| `multiline_pattern` | 7 | Continuation line values | -| `mixed_resource` | 12 | Multiple entry types combined | -| `deep_nesting` | 5 | String literals, nested variable refs | -| `raw_unicode` | 5 | Random Unicode junk-free convergence | -| `convergence_stress` | 5 | Multi-pass S2 == S3 == S4 stabilization | - -### Allowed Exceptions - -`ValueError`, `RecursionError`, `MemoryError`, `UnicodeDecodeError`, `UnicodeEncodeError` -- parser/serializer resource limits and encoding edge cases. - ---- - -## `fuzz_serializer` - -Target: `syntax.serializer.serialize`, `syntax.parser.FluentParserV1`, `syntax.visitor.ASTVisitor`, `syntax.visitor.ASTTransformer` -- AST-construction serializer roundtrip idempotence plus visitor/transformer dispatch and validation. - -Concern boundary: This fuzzer programmatically constructs AST nodes (bypassing the parser) and feeds them to the serializer. This is the ONLY Atheris fuzzer that can produce AST states the parser would never emit -- e.g. TextElement values with leading whitespace, syntax characters in pattern-initial positions, or structurally valid but semantically unusual combinations. The same AST-construction model now also drives direct `ASTVisitor` and `ASTTransformer` coverage: custom dispatch methods, list-expanding transforms, and invalid scalar-field replacements that must raise `TypeError`. - -Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, `gen_ftl_identifier`, `gen_ftl_value`, `write_finding_artifact`, `print_fuzzer_banner`, metrics, reporting); domain-specific metrics tracked in `SerializerMetrics` dataclass (ast_construction_failures, convergence_failures, junk_on_reparse, validation_errors, visitor_runs, transformer_runs). Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Custom mutator applies whitespace injection and syntax character insertion mutations before byte-level mutation. Finding artifacts written to `.fuzz_atheris_corpus/serializer/findings/`. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -13 patterns across 5 categories: - -**WHITESPACE (2)** - Leading/trailing whitespace in TextElement values: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `leading_whitespace` | 18 | Leading spaces in message and attribute values roundtrip correctly | -| `trailing_whitespace` | 8 | Trailing spaces in values roundtrip correctly | - -**SYNTAX (2)** - FTL syntax characters in values: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `syntax_chars_value` | 15 | Braces, dots, hash, asterisk, brackets in values | -| `string_literal_placeable` | 10 | StringLiteral placeables with edge-case content | - -**STRUCTURE (4)** - Structural edge cases: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `simple_message` | 8 | Baseline AST-constructed message roundtrip | -| `attribute_edge_cases` | 12 | Attributes with whitespace/syntax-char values | -| `term_edge_cases` | 8 | Terms with whitespace in values and attributes | -| `select_expression` | 8 | AST-constructed select expressions with leading-space variant values | - -**COMPOSITION (2)** - Complex element combinations: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `mixed_elements` | 8 | Interleaved TextElement/Placeable with leading spaces | -| `multiline_value` | 5 | Multi-line values with indentation edge cases | - -**VISITOR (3)** - Direct `syntax.visitor` coverage: - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `visitor_dispatch` | 8 | Custom `visit_*` handlers and generic traversal both execute | -| `transformer_roundtrip` | 8 | List-expanding `ASTTransformer` output remains serializable and convergent | -| `transformer_validation` | 6 | Invalid scalar replacements for required fields raise `TypeError` | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `RecursionError`, `MemoryError`, `UnicodeDecodeError`, `UnicodeEncodeError` -- AST construction edge cases, serializer limits, visitor validation, and encoding boundaries. - ---- - -## `fuzz_cursor` - -Target: `syntax.cursor.Cursor`, `syntax.cursor.LineOffsetCache`, `syntax.cursor.ParseError`, `syntax.cursor.ParseResult`, `syntax.position` helpers -- cursor state-machine behavior, contextual parse-error rendering, and line/column parity across normalized source. - -Concern boundary: Existing parser fuzzers only touch `Cursor` indirectly through parser control flow. This fuzzer hits the subsystem directly: constructor guards, `peek()`/`advance()`/`expect()` semantics, whitespace skipping, line navigation, parity between cursor-computed positions and standalone helper functions, `ParseError.format_with_context()` rendering, and `ParseResult` contract behavior on arbitrary raw and CRLF-normalized sources. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `CursorMetrics` dataclass. Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `constructor_guards` | 12 | Negative/out-of-range positions reject; EOF cursor behavior is correct | -| `peek_advance_expect` | 14 | `peek`, `advance`, `slice_*`, and `expect` match manual semantics | -| `whitespace_skips` | 12 | `skip_spaces`/`skip_whitespace` agree with reference implementations | -| `line_navigation` | 10 | Line-start/line-end helpers preserve valid cursor positions | -| `line_col_parity` | 12 | Cursor-computed line/column matches cached position helper results | -| `parse_error_formatting` | 10 | Context rendering stays non-empty and positionally coherent | -| `position_helpers` | 12 | `line_offset`, `column_offset`, `get_line_content`, `format_position` stay consistent | -| `parse_result_contract` | 8 | `ParseResult` success/error states preserve documented invariants | - -### Allowed Exceptions - -`ValueError`, `EOFError`, `UnicodeEncodeError` -- invalid positions, EOF access, and encoding edge cases. - ---- - -## `fuzz_runtime` - -Target: `runtime.bundle.FluentBundle` -- full resolver stack, strict mode, caching, concurrency, security, AST lookup facade, and canonical constructor locale boundary contracts. - -Scenario selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. Security sub-pattern selection within `_perform_security_fuzzing` remains FDP-based (second-level, already guaranteed execution). FDP bytes are used exclusively for scenario parameters, not scenario selection. String and RegEx instrumentation hooks enabled for deeper coverage of message ID lookups, selector matching, and pattern-based parsing. Shared infrastructure imported from `fuzz_common` (`BaseFuzzerState`, metrics, reporting); domain-specific metrics tracked in `RuntimeMetrics` dataclass, including `FluentBundle.get_message()` / `get_term()` AST lookup checks, constructor locale boundary checks, and direct `validate_message_variables()` compatibility. Weight skew detection compares actual vs intended scenario distribution. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `core_runtime` | 40 | Frozen error checksum, cache stability, determinism | -| `strict_mode` | 20 | Zero errors in strict format_pattern | -| `caching` | 15 | Cache hit determinism, corruption detection | -| `security` | 10 | *(8 sub-patterns below)* | -| `concurrent` | 10 | No deadlocks, 2-thread barrier test | -| `differential` | 5 | Same FTL, different configs, no crash divergence | - -Security sub-patterns: - -| Sub-pattern | Weight | Attack Vector | -|:------------|-------:|:--------------| -| `security_recursion` | 25 | Deep placeables, cyclic refs, self-ref terms | -| `security_memory` | 20 | Large values, many variants/attributes | -| `security_cache_poison` | 15 | inf/nan/None/list as args | -| `security_function_inject` | 12 | Custom function registration + recursive cross-context calls | -| `security_locale_boundary` | 8 | Canonicalize valid locales to lowercase underscore; reject blank, non-string, invalid, and overlong constructor locales | -| `security_expansion_budget` | 8 | Billion Laughs exponential message expansion (max_expansion_size) | -| `security_dag_expansion` | 7 | DAG shared-reference args stress _make_hashable node budget | -| `security_dict_functions` | 5 | Dict-as-functions constructor rejection (TypeError guard) | - -### Memory Management - -Two reference cycle sources were fixed in ftllexengine 0.101.0 (MEM-REFCYCLE-001): (1) `ASTVisitor._instance_dispatch_cache` stored bound methods referencing `self`, and (2) `FrozenFluentError.__traceback__` retained resolver frames. Both are now eliminated at source. The fuzzer still runs `gc.collect()` every 256 iterations as a defensive measure against Atheris instrumentation overhead, and defaults to `-rss_limit_mb=4096` as a safety net. - -### Allowed Exceptions - -`CacheCorruptionError`, `FormattingIntegrityError`, `WriteConflictError`, `FrozenFluentError`, `RecursionError`, `MemoryError` -- integrity violations are findings; depth guards and resource limits are safety mechanisms. - ---- - -## `fuzz_scope` - -Target: `runtime.resolver` (via `FluentBundle`) -- variable scoping, term argument isolation, message reference scope inheritance, ResolutionContext push/pop, GlobalDepthGuard cross-context depth tracking, select expression scope, bidi isolation marks. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `term_arg_isolation` | 12 | Terms see ONLY explicit args, not caller's scope | -| `variable_shadowing` | 12 | External $var preserved around term call | -| `message_ref_scope` | 10 | Referenced messages share caller's args | -| `select_scope` | 10 | Selector and variant bodies share message scope | -| `attribute_scope` | 8 | Attribute patterns share message scope | -| `bidi_isolation` | 8 | FSI/PDI wrap values, don't alter content | -| `function_arg_scope` | 8 | Function args evaluated in calling scope | -| `nested_term_scope` | 8 | Nested terms maintain independent scopes | -| `scope_chain` | 8 | Message ref chains share args (depth 2-4) | -| `cross_message_isolation` | 6 | Independent messages don't pollute each other | -| `depth_guard_boundary` | 5 | Self-ref, mutual recursion, deep chains hit limits | -| `adversarial_scope` | 5 | Scope leaks, missing vars, empty values, fuzzed IDs | -| `expansion_size_limit` | 5 | `_total_chars` budget fires, EXPANSION_BUDGET_EXCEEDED returned | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OverflowError`, `FrozenFluentError`, `RecursionError`, `RuntimeError` -- invalid inputs, depth guard enforcement, and resolution errors. - ---- - -## `fuzz_structured` - -Target: `syntax.parser.FluentParserV1`, `syntax.serializer.FluentSerializer` -- grammar-aware AST construction and roundtrip verification. - -Pattern selection uses deterministic round-robin through a pre-built weighted schedule (`select_pattern_round_robin`), immune to coverage-guided mutation bias. FDP bytes are used exclusively for pattern parameters, not pattern selection. String and RegEx instrumentation hooks enabled for deeper coverage of identifier lookups and pattern-based parsing. Custom mutator parses valid FTL, applies AST-level mutations (swap variants, duplicate attributes, mutate variant keys, nest placeables, shuffle entries), serializes, then applies byte-level mutation on top. Module-level `FluentSerializer` instance reused across iterations (avoids per-call allocation). Junk ratio tracked and warned when >50%. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -When a convergence failure is detected, the fuzzer writes finding artifacts (source.ftl, s1.ftl, s2.ftl, meta.json) to `.fuzz_atheris_corpus/structured/findings/`. These artifacts enable post-mortem debugging without Atheris and can be replayed via `python fuzz_atheris/fuzz_atheris_replay_finding.py`. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `simple_messages` | 10 | Parse produces entries | -| `variable_messages` | 12 | Variable placeables parse correctly | -| `term_definitions` | 8 | Term definitions accepted | -| `attribute_messages` | 10 | Attribute parsing | -| `select_expressions` | 15 | Select with plural/string keys | -| `comment_entries` | 5 | Comment parsing | -| `multi_entry` | 15 | Multi-message resource handling | -| `corrupted_input` | 10 | Malformed input stability | -| `deep_nesting` | 8 | Deep placeable/reference nesting | -| `roundtrip_verify` | 7 | S(P(S(P(x)))) == S(P(x)) convergence | - -### Allowed Exceptions - -`RecursionError`, `MemoryError`, `UnicodeDecodeError`, `UnicodeEncodeError` -- resource limits and encoding edge cases. - ---- - -## `fuzz_localization` - -Target: `localization.orchestrator.FluentLocalization`, `localization.loading.PathResourceLoader` -- multi-locale orchestration, canonical locale boundary and boot validation APIs, eager loader-backed initialization, fallback chains, `LoadSummary`, and post-construction mutation APIs. - -Concern boundary: This fuzzer stress-tests the FluentLocalization lifecycle orthogonal to FluentBundle. Distinct from fuzz_runtime (single bundle) and fuzz_integrity (validation). It covers constructor locale canonicalization/deduplication and unified rejection errors, multi-locale fallback traversal, `add_resource()` mutation between calls, `has_message()`/`get_message_ids()` API contracts, `get_message()`/`get_term()` AST lookup precedence, `require_clean()`, `validate_message_variables()`, and `validate_message_schemas()` boot-validation APIs, per-locale `get_cache_audit_log()` access, custom function registration and invocation, `on_fallback` callback delivery, introspection delegation, and the loader-backed initialization path: eager resource loading, canonical `{locale}` directory substitution, `PathResourceLoader` path validation, per-locale success/not-found/error accounting, junk-bearing loads, and `source_path` propagation into `LoadSummary`. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `LocalizationMetrics` dataclass (including AST lookup, schema-validation, cache-audit, constructor locale-boundary, and loader/boot-validation counters). Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `single_locale_add_resource` | 10 | add_resource accepts valid FTL; format returns the stored value | -| `multi_locale_fallback` | 10 | Primary miss triggers fallback; callback sees resolved locale | -| `chain_of_3_fallback` | 8 | 3-locale chain traverses correctly | -| `format_value_missing` | 7 | Missing message returns fallback text plus errors | -| `format_with_variables` | 9 | Variables propagate through fallback chain | -| `add_resource_mutation` | 7 | add_resource between format calls updates visible state | -| `has_message_api` | 7 | has_message/has_attribute contracts hold across locales | -| `ast_lookup_api` | 7 | get_message/get_term honor fallback precedence and namespace boundaries | -| `get_message_ids_api` | 6 | get_message_ids returns all IDs without duplicates | -| `validate_resource_api` | 7 | validate_resource delegates and returns structured results | -| `validate_message_variables_api` | 6 | single-message schema validation matches AST lookup and raises integrity context on missing/mismatched schemas | -| `validate_message_schemas_api` | 6 | exact schema order, fallback resolution, and missing/extra variable failures | -| `add_function_custom` | 6 | Custom UPPER function registration/invocation works | -| `introspect_api` | 7 | get_message_variables/introspect_message stay consistent | -| `cache_audit_api` | 6 | get_cache_audit_log matches initialized locales and stats | -| `locale_boundary_api` | 5 | Constructor canonicalizes/deduplicates valid locales and rejects blank/non-string/invalid/overlong input | -| `on_fallback_callback` | 6 | on_fallback receives requested/resolved locale data | -| `loader_init_success` | 5 | Eager loader initialization records all-success summary data | -| `loader_not_found_fallback` | 5 | Primary miss increments not_found while fallback still resolves | -| `loader_junk_summary` | 4 | Junk-bearing resources are surfaced through LoadSummary | -| `loader_path_error` | 4 | Invalid `resource_id` becomes a loader error, not a crash | -| `require_clean_api` | 5 | clean initialization returns summary; missing/junk/error states raise integrity context | -| `boot_config_api` | 6 | `LocalizationBootConfig` validation, `boot_simple()` → FluentLocalization, `boot()` → 3-tuple, `required_messages` absent raises IntegrityCheckFailedError, `required_messages` present succeeds, second `boot()` call raises RuntimeError (one-shot enforcement) | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `UnicodeEncodeError`, `FrozenFluentError`, `DataIntegrityError`, `FormattingIntegrityError`, `SyntaxIntegrityError`, `IntegrityCheckFailedError` -- invalid locale/resource input, loader validation, strict mode enforcement, required-message absence, and resolution errors. - ---- - -## `fuzz_dates` - -Target: `parsing.dates.parse_date`, `parsing.dates.parse_datetime` -- CLDR→strptime token mapping, locale-aware date/datetime parsing across 24 test locales (Latin-DMY, Latin-MDY, Latin-YMD, CJK, RTL). - -Concern boundary: This fuzzer stress-tests the bidirectional date parsing pipeline. Covers the `_babel_to_strptime` token mapping, all 14 pattern variants (short/medium/long/full plus 4-digit year oracle), adversarial inputs (null bytes, ANSI escapes, surrogates, 10000-char strings, invalid month/day values), and cross-locale format string generation. Key invariants: if result is None, errors must be non-empty; if result is not None, it must be a `date`/`datetime` instance; `parse_datetime` result must be instance of `datetime` (not bare `date`). The `four_digit_year_acceptance` pattern uses ISO 8601 as a ground-truth oracle: `parse_date("dd.MM.yyyy", locale)` for locales whose CLDR short pattern uses `yy` must return the same date as `parse_date("yyyy-MM-dd", locale)`. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `DatesMetrics` dataclass. Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=4096` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `parse_date_generated` | 14 | Generated date strings parse successfully per locale | -| `parse_datetime_generated` | 12 | Generated datetime strings parse per locale | -| `locale_variation` | 12 | Same date parsed in multiple locales | -| `style_variation` | 12 | short/medium/long/full styles all produce parseable strings | -| `cross_locale_agreement` | 10 | Parsing is consistent across 3 random locales | -| `adversarial_input` | 10 | Null bytes, surrogates, ANSI escapes handled without crash | -| `format_then_parse` | 12 | format → parse roundtrip (DATETIME output is parseable) | -| `invalid_date_values` | 10 | month=13, day=99 produce errors, not silent wrong dates | -| `empty_string` | 8 | Empty string → errors, not crash | -| `whitespace_input` | 8 | Whitespace-only → errors, not crash | -| `partial_date_strings` | 6 | Partial (year-only, month-only) inputs handled | -| `unicode_month_names` | 8 | Non-ASCII month names in CJK/RTL locales | -| `leap_year_boundary` | 8 | Feb 29 on leap/non-leap years | -| `four_digit_year_acceptance` | 8 | lv-LV/de-DE/pl-PL/fi-FI/ru-RU: dd.MM.yyyy == ISO oracle; must not return None | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `UnicodeDecodeError`, `UnicodeEncodeError`, `FrozenFluentError` -- invalid locale, encoding edge cases, and bidirectional parse errors. - ---- - -## `fuzz_locale_context` - -Target: `runtime.locale_context.LocaleContext`, `core.locale_utils.normalize_locale` -- direct formatting API: `format_number()`, `format_currency()`, `format_datetime()`, canonical locale boundary handling, ROUND_HALF_EVEN rounding oracle, `numbering_system`/`use_grouping`/`currency_digits` parameter coverage, cross-locale determinism. - -Concern boundary: This fuzzer stress-tests the LocaleContext formatting layer, distinct from fuzz_builtins (which goes through FluentBundle/FTL) and fuzz_runtime (full runtime stack). Directly exercises the locale-aware formatting primitives that underpin the NUMBER and CURRENCY functions. Key invariant (oracle-based): `format_number(val, max_frac=N)` must round half-even (Babel default), verified by `Decimal.quantize(10^-N, ROUND_HALF_EVEN)`. Also covers `numbering_system`, `use_grouping`, and `currency_digits` parameters added to `format_number`/`format_currency`. Control chars stripped from currency symbols prevent log injection through formatted output. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `LocaleContextMetrics` dataclass. Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=2048` default (no Babel concurrency needed). - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `format_number_int` | 8 | Integers format to non-empty output with canonical locale_code | -| `format_number_decimal` | 8 | Decimal values format to non-empty output | -| `format_number_precision` | 8 | ROUND_HALF_EVEN oracle at explicit min/max precision | -| `format_number_custom_pattern` | 6 | Custom number patterns produce non-empty output | -| `format_number_grouping` | 6 | Grouping on/off remains stable | -| `format_currency_standard` | 8 | Standard currency formatting is non-empty and oracle-safe | -| `format_currency_precision_override` | 6 | Currency display variants remain non-empty | -| `format_currency_custom_pattern` | 5 | Custom currency patterns produce non-empty output | -| `format_datetime_date_obj` | 7 | `date` promotion to midnight datetime formats correctly | -| `format_datetime_datetime_obj` | 7 | `datetime` formatting is non-empty | -| `format_datetime_style_combo` | 7 | Date/time style combinations remain non-empty | -| `format_datetime_pattern` | 6 | Custom datetime patterns produce non-empty output | -| `locale_create_adversarial` | 8 | Successful creates store canonical locale_code; invalid boundaries reject cleanly | -| `cross_locale_determinism` | 5 | Same value+locale → identical output on repeated calls | -| `format_number_numbering_system` | 7 | Non-Latin digit systems via `numbering_system=`: non-empty output; determinism | -| `format_currency_grouping` | 6 | `use_grouping=True/False` on large amounts: non-empty FluentNumber returned | -| `format_currency_digits` | 6 | `currency_digits=True/False`: ISO 4217 precision applied or bypassed; non-empty | -| `format_currency_numbering_system` | 7 | Non-Latin digit systems on `format_currency`: non-empty output; determinism | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `OverflowError`, `UnicodeEncodeError`, `FrozenFluentError` -- invalid locale, Babel formatting errors, and out-of-range values. - ---- - -## `fuzz_introspection` - -Target: `introspection.message.IntrospectionVisitor`, `introspection.message.ReferenceExtractor`, `introspection.message.MessageIntrospection` -- `extract_variables()`, `extract_references()`, `extract_references_by_attribute()`, `introspect_message()`, `clear_introspection_cache()`, `FluentBundle` introspection facade. - -Concern boundary: This fuzzer uses programmatic AST construction (bypasses the FTL parser) to reach introspection code paths that parser-generated ASTs would never produce. Tests the `MAX_DEPTH` guard via `SelectExpression` chain at depths ± `MAX_DEPTH`, frozenset deduplication (same variable referenced N times → 1 entry), `requires_variable(x)` ↔ `get_variable_names()` consistency, cache correctness under repeated calls, and weakref/lock safety under the `threading.Lock`-protected result cache. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `IntrospectionMetrics` dataclass. Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=2048` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `extract_variables_simple` | 14 | Variables returned as frozenset; deduplication correct | -| `extract_references_simple` | 12 | Message/term refs returned correctly | -| `attribute_variables` | 10 | Attribute-level variables extracted | -| `deduplication_invariant` | 12 | N references to same var → 1 frozenset entry | -| `requires_variable_consistency` | 10 | requires_variable ↔ get_variable_names match | -| `deep_nesting_guard` | 10 | MAX_DEPTH chain triggers guard, no unhandled crash | -| `select_expression_vars` | 8 | Variables in select variants extracted | -| `term_reference_vars` | 8 | Term args as variable references | -| `cache_correctness` | 10 | Repeated calls return identical frozensets | -| `clear_cache` | 8 | clear_introspection_cache() resets state correctly | -| `bundle_facade` | 8 | FluentBundle.introspect_message() delegation | -| `adversarial_ast` | 5 | Programmatic AST edge cases (empty pattern, no elements) | -| `validate_variables_schema` | 8 | exact/superset/subset invariants; frozen result; missing/extra sets correct | - -### Allowed Exceptions - -`ValueError`, `TypeError`, `RecursionError`, `FrozenFluentError` -- invalid AST nodes, depth guard enforcement, and resolution errors. - ---- - -## `fuzz_diagnostics_formatter` - -Target: `diagnostics.formatter.DiagnosticFormatter`, `diagnostics.validation.ValidationError`, `diagnostics.validation.ValidationWarning`, `diagnostics.validation.ValidationResult` -- RUST/SIMPLE/JSON output formats, control-character escaping (log injection prevention), sanitize/redact modes, `format_validation_result()`, `format_error()`, `format_warning()`, `format_all()`. - -Concern boundary: This fuzzer stress-tests the diagnostic formatting pipeline as a security boundary. The primary invariant is that no raw ASCII control character (0x00-0x1F, 0x7F) survives into RUST or SIMPLE formatted output when injected into any diagnostic field (message, hint, function_name, argument_name, expected_type, received_type, ftl_location, resolution_path). Secondary invariants: JSON output always parses as valid JSON; sanitize mode bounds output length; redact mode replaces content with `[content redacted]` sentinel; `format_all()` contains each individual formatted diagnostic; `color=True` produces ANSI escape sequences. - -Shared infrastructure imported from `fuzz_common`; domain-specific metrics tracked in `FormatterMetrics` dataclass. Pattern selection uses deterministic round-robin. Periodic `gc.collect()` every 256 iterations and `-rss_limit_mb=2048` default. - -### Patterns - -| Pattern | Weight | Invariants Checked | -|:--------|-------:|:-------------------| -| `control_char_escaping` | 14 | No raw C0/DEL in RUST/SIMPLE output after injection | -| `format_rust_all_fields` | 12 | RUST non-empty; span line present; resolution_path separator | -| `format_json_valid` | 12 | JSON parseable; mandatory keys present; code matches | -| `format_simple` | 10 | Single-line for clean messages; code name in output | -| `sanitize_truncation` | 10 | Sanitize mode truncates; ellipsis marker present | -| `sanitize_redact` | 8 | Redact mode hides content; sentinel present | -| `format_error_location` | 10 | line/column present when set; absent when not set | -| `format_warning_context` | 8 | Context present in output; redact removes it | -| `format_validation_result_mixed` | 8 | passed/failed summary; include_warnings respected | -| `format_all_multiple` | 8 | Each individual diagnostic present in combined output | -| `color_ansi_mode` | 5 | color=True longer than color=False; ESC byte present | -| `adversarial_fields` | 5 | Control chars in rich fields all escaped | - -### Allowed Exceptions - -`ValueError`, `TypeError` -- invalid input types to format_error/format_warning. - ---- - -## Observability Standard - -All fuzzers import shared infrastructure from `fuzz_common.py` (`BaseFuzzerState`, metrics, reporting) and compose domain-specific metrics via separate dataclasses: - -- `BaseFuzzerState` dataclass with bounded deques (shared via `fuzz_common`) -- Domain metrics: `RoundtripMetrics`, `SerializerMetrics`, `StructuredMetrics`, `RuntimeMetrics`, `LockMetrics`, `IntegrityMetrics`, `CacheMetrics`, `BuiltinsMetrics`, `BridgeMetrics`, `FiscalMetrics`, `ISOMetrics`, `CurrencyMetrics`, `NumbersMetrics`, `OOMMetrics`, `PluralMetrics`, `ScopeMetrics`, `LocalizationMetrics`, `DatesMetrics`, `LocaleContextMetrics`, `IntrospectionMetrics`, `FormatterMetrics` (per-fuzzer) -- psutil RSS memory tracking with leak detection (quartile comparison) -- Performance percentiles: min/mean/median/p95/p99/max -- Per-pattern wall-time accumulation -- Weight skew detection: actual vs intended distribution per pattern, warns when >3x deviation -- Corpus retention rate: `corpus_evictions` / `corpus_entries_added` tracks FIFO churn -- Crash-proof JSON report via `atexit` (stderr + `.fuzz_atheris_corpus//`) -- argparse CLI (`--checkpoint-interval`, `--seed-corpus-size`) -- Top-10 slowest operations (max-heap) -- FIFO seed corpus management (`dict[str, bytes]`) with configurable max size and eviction tracking -- Deterministic round-robin weighted pattern routing (immune to coverage-guided mutation bias) -- Pattern-stratified corpus retention (per-pattern FIFO buckets preserve diversity) -- `atheris.enabled_hooks` for `str` and `RegEx` comparison feedback -- Periodic `gc.collect()` every 256 iterations -- `-rss_limit_mb=4096` default safety net -- Custom mutator (roundtrip, serializer, structured): AST-level mutations + byte-level mutation for structurally valid inputs -- Finding artifact system (roundtrip, serializer, structured): source/s1/s2/meta.json written to `.fuzz_atheris_corpus//findings/` -- `fuzz_atheris_replay_finding.py`: standalone reproduction of finding artifacts without Atheris instrumentation -- Adaptive time budgets: patterns exceeding 10x their mean cost are tracked (`time_budget_skips`) -- Performance outlier tracking: inputs exceeding 2x P99 latency are recorded with timestamps -- Per-pattern mean cost tracking: exponential moving average for cost-aware scheduling -- Graceful Ctrl+C handling: custom mutators catch `KeyboardInterrupt` and set status to "stopped" -- FTL-safe text generation (structured): 90% safe ASCII, 8% Unicode, 2% inline-safe special chars -- Consolidated `record_iteration_metrics`: single function for all fuzzers (time budgets, outlier tracking, corpus retention) -- Common FTL generation: `gen_ftl_identifier` and `gen_ftl_value` for deterministic FDP-based identifier/value generation -- Common finding artifacts: `write_finding_artifact` with parametric `extra_meta` for per-fuzzer metadata -- Common banner: `print_fuzzer_banner` for consistent startup output across all fuzzers + keywords: [atheris, fuzz inventory, fuzz targets, libfuzzer, corpus] + questions: ["what do the Atheris fuzzers cover?", "which targets exist?", "how do I map a target name to a file?"] +--- + +# Atheris Target Inventory + +## Summary + +| Target | File | Concern | +|:-------|:-----|:--------| +| `bridge` | `fuzz_bridge.py` | Function bridge and registry | +| `builtins` | `fuzz_builtins.py` | Built-in formatting functions | +| `cache` | `fuzz_cache.py` | Cache concurrency and audit behavior | +| `currency` | `fuzz_currency.py` | Currency formatting oracle | +| `cursor` | `fuzz_cursor.py` | Cursor and parse-position helpers | +| `dates` | `fuzz_dates.py` | Locale-aware date/datetime parsing | +| `diagnostics_formatter` | `fuzz_diagnostics_formatter.py` | Diagnostic formatter output | +| `graph` | `fuzz_graph.py` | Dependency graph algorithms | +| `integrity` | `fuzz_integrity.py` | Integrity and validation surfaces | +| `introspection` | `fuzz_introspection.py` | Message introspection | +| `iso` | `fuzz_iso.py` | ISO lookup/introspection | +| `locale_context` | `fuzz_locale_context.py` | LocaleContext formatting paths | +| `localization` | `fuzz_localization.py` | `FluentLocalization` orchestration | +| `lock` | `fuzz_lock.py` | RWLock contention behavior | +| `numbers` | `fuzz_numbers.py` | Number formatting oracle | +| `oom` | `fuzz_oom.py` | Parser object-density limits | +| `parse_currency` | `fuzz_parse_currency.py` | Currency parsing and symbol resolution | +| `parse_decimal` | `fuzz_parse_decimal.py` | Decimal and FluentNumber parsing | +| `plural` | `fuzz_plural.py` | CLDR plural category boundaries | +| `roundtrip` | `fuzz_roundtrip.py` | Parser/serializer roundtrip | +| `runtime` | `fuzz_runtime.py` | End-to-end runtime behavior | +| `scope` | `fuzz_scope.py` | Variable scoping invariants | +| `serializer` | `fuzz_serializer.py` | AST-construction serializer paths | +| `structured` | `fuzz_structured.py` | Structure-aware parser stress | + +## How To Run + +```bash +./scripts/fuzz_atheris.sh numbers --time 60 +./scripts/fuzz_atheris.sh --list +./scripts/fuzz_atheris.sh --replay runtime path/to/finding +``` diff --git a/images/FTLLexEngine.png b/images/FTLLexEngine.png index 7e10326c7d379e7f823a0a0c2005704270e08ee1..5b640eee2dd53c47ee5b243385c52ee16f0b45ba 100644 GIT binary patch literal 1999997 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≪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�JS9~K1ZPH>ht@Mq_3urLg3n8fB#*w4nZ8ULL-KnBBOw{`L0|K|KNOtkmvOf zymF6I&pD9Cc0!P>+{S`wm>oH+j6 zqtJH3!yTlOv&E~)f`tfVs^qJm=;?WSs5>+-%Gn62Z6$48O8#myRr(%UdSdM3OxNiq z7yKs^BlAOa{o7wh#OdX2Mdf9WQSG8aMZ=N-+U8!KoNjdP97BiN)j4Zz*1SGNE-X2b zf*fu@h0=YrS;_BwS#BN87p5CNE~wHx)6G|9B{U9oa`gpE5bRX-j{A zRmrQyq)$t`>+e{25?wh#T8oard*rUeLZVPa??5s#NM9mYH&2sjUA2U&z_!RP(J1vf(cfCpS35uQ$~Jq zV_jyi%f65Eg84PSRsXqn#s?M2R_w0^l0POl>G>@n+tW)`LuH;xjs=$Dsd`(#JVKR64DSwT`tPhR{E^kkhd^VI(>=A>*Tuhi#e!IE6~m zU{DbB-NTvGNY1}J=qdCuGi1Ck2snUdpq7kc(41X_XyfUR(P%0-$MY?uDlmiOx|*mR zB2P0|+JlV$BMdQ9SO-rKz*QvBnQ>%R8m=c*kgu1*WRq05u^Xh9ctJ=N86Jq3Rnu8* zAp!oB{SERoLBYT;$5aD!TRaYRHa|VLsYdTEzpCwE`Z2>`f3nDNW6~Ea`xnlpGshon zPayMrVp~ywTAIKGyIl9=bo;i$X%it2m9KV)ZFy*q<@le7RhD0hG;Fn6`;c6_M&Dym ztd5^k*D~kB68_sM0fU0;+At3$*eSFESw+OjUCUd5bo%fug&kZW9#U*;E@Yu9TIXU$ z83^1@Q;30MC=qrP%2osDYn*BNxMnXAM1dKh#QJu5xVAe;TUh|rlIZOxB9lQ`a@C8@ zs!$W_6jTp~x@m8nq%Si$s%-y2M=B;{B}vq}_v8=uC;1!(-F$_xFuMV*mMkSQXO1tZ zzA2EiI20V1DPGtyJWJ@b+?IG|tG9PP6HksE%x7P{c>evnH-UemRS};ta|Y&T5#&qa zMn_U~FrW{gf;`%~P{MdlY6wkX<0dms^mq;;A|3d~cRSvzkP024NoDBF^{Z;ZJk%rZgDR z$hQYlbR{N4x%{G4A~HXh8r-+_D6#Ym0+Zr=m`cWkCzwT`kNfxs(*!lb2^xTUD2k2u0cbl}s&dkF3lI~LylF5@{qjMih*XV$( zeqppQI1e)>^G>hi>T{E{7G8+xDpyp-xwQjRrzUx@YNt8D@emw2{FYg2hX)@cCjRNu)#ngYKHXkl-<{ zd|g1FKtI3x;m1Gx_)`c`nP9nZ5uN+-=MPz|S*MTB&Xb-vuQIgXblIdkTWYRG=M@C1GN?WA% zWQ@{r%EV&HFRz1!e;E$l%>UZ}>luXHv9GmS*&m(;p|82fy3=AZcV5p#JdWedFe+pz zi3RLUF);`pbe1-sjG?v@Z4kqCOSDA}pf*_ZsiY_dH(yrLn}IdQP=fHN*>H)8rMCDrb|gLCpmHD5i5lQrD+m;)%Jy(z~k zSC`*~*0pgYDTqr#S%$BrsKUIOBl~(8DWYJTgi0lxS}b5U;PU{XBm>qCi$`Ok%q=h) z?5r^%7IW{3x`qvB8Nyn#&0B!l7FU+e#>e?3oQE7f1c9yZBw0q8IY-v=sk;Nh)Vdc= zksa%(QYOmOHIl+7n?C;^F9v7U9K*H)$Spz&Kx7g8g#h_~TK<`6#@gWPFP3MDW4K=6 z?JOvsJZ`&7cFTbpa38#+o}Tt2XCl4%t4!yb^X|1qM?0wl={0Ks^BrV^s)phq%L|*y z^|n>e;8Xb>pVM5*`=r_U>YPK=A$nN(GzYrG!_~|rj`EiD<*_f`y4$@1IvbDx%{%SR z5F#zl0mO#LNz$N(tS$XY+#(qr6dq~g`H1ZMoy2Faq7Z+qI`tMfyS(ga`H~Erv}l|a zEN}a%MS)Qz1R((>qS=#_=uA3Tbyl=-9-oFf51&o$CGYE|omWtaW^M27PZc6K{(P}) z6IYxcn%8rJ6oR_CZ+A8Bfiu`Wx`@Df{N?e~u%23IyDp z5d0dVpE2q27xR*0fquoPRY6hj_t%4*Cb!Uc933H_wo>z2SQ`C*V$Xp1J71j}+y0Mt zWKW%T-iGzuRAoo5?YGkLGkeYD*UDyqp0nC^OePJQvxgjlXZRK<$6thq8P*cF=G+aDT~Bc) z(j9qMkJaW0Z#IYZHp-ybq~v2*c|!&>7F~-o+1bU)qowNgRj}?JtB3BZ<%cNGO0)qF3jbxaye7cfUxPE5~j7waRRF>exDE^;vQKL z>i7Ie;xDS|!ta0aKMDDLn8ED^T={?t=_X;H?n9nS(GFcC52c1sOP@ucb?XIAbShR{jijw#;}67KyeZ>kZeq;ouB}h165;$d*)WQE9;>kw zZ4_0IoxsfBiJv^A4Bb8}5;0iVpe&2FSN06Xq+7+EGqH(Uf((~DBKOXT?F-p8jWk0w zwvwcZaLFX;RZR3vT6f9k*bw%W(ixK1bz57F@SHA$l+$c=bDfc2l^OCW!Aw{%#}Ww# z&lxZ{*LagVmU{;u$(aR$4CNvdU|PS8pvYs`2h7M?a~3l2ZWoVa*h6jFtmRPGW@mNb zQNXv($JOFdN;x5b@+$*Ut&=)oZC0p`c!@qH;?2)iAX7PV{Y`W1d`-K&<=kibg0!@E z5z@>2;~^r-(h@OE4X^$+?UR06EKlziJ8H~#qk;~zhK_`^>> zfBNzzM|l6~BBk{ijzG3g+S}_}(anWrJk%qG|t+V(8c`@$PU@tEyQSez;O2KhSTuXv8#@-$4i4{<3&@hMcM%Xo$p z)t~lawfQ36+@9id6W9V?I~u*tW4ny>P*FvVS>^3 zvB`hx6L)nrR$aLfJC=tOW`{6d4rpndlGr@+>qQ6 z-gpg4KGR&4 z4>Rkd4<=n^2t^b7n6uDG+E0JGn?CFlbkytTEKQ!wl8u)ps+NhmeU}ma-}(+84&&huvzNYplO&;(*cEqMj1=Quq73` z{YmT$7&iH>g8Gnia2b~xB|7J()ciup$#tp2?q+gd5>TPsA|NsoN-$%fjM%gjXnX7U zCP-7l(vmvw3bp`u30^J?bWDY- z7(MxCek%vjl2Q%Z_`S+|m=v3QgMEg}s>#oEg2Kb>vbD|GJQh`)-Ezsu0me4(wYI9#M$*-YJ!$NHfDiy%?+u< z!yu2Dmw7n*)~gEv&hwZ%f(cyz40z#`iWKi`CVa5+x)E^|G%|0nrwL}N-6)(m%9N(; zCB9nq9BlA57}lAXm=XP^BS~54#PF4>g2|;C@W12To>b>T0H*jR zomoY5@tzN6NyB&w(DS=$>LJp9_ik#yo@R+Wd6rRHA$!g0C~ka;V#UXgm%&;uuOO^B za>r^>A?9)ffXWTcnc{jgs+Lhw3h@g46Ok0|6U*Kk`Y!dEHW9CfXiE=Dwl0o*p zASy+?QdM6S;EY60E>PyVvbA;Ao1NbFJBVy<*mWOGV2;YYP@Jw_ZWA%`8rH43-fHVj z{nY#OI;@00!St=pCO!LEP>Y;$JFLeMI!Up|hyX?Mqa9fI$L!#-b25G65)xisjj}{Q zY6PyFH&4hqQd7ngrAa)(^*hc=8_0zeY|K7j9hz8Iff4)d;T+b5w%#5A)yT4q| zt;TKF_KYn;PjfP$kk}y_(&|cDIGw%qw%)3}a4rE~W~_ESa>|{my4~Q- zBW_BcAVbOS;;G^MCP-y2s8_JSN0swCO#JxiBlKfUQu0?!C5Q0wl`crA@~DD4nZS8# zY%$?^>AP7_xS*ZwbWd0si;-0^=krf7%t*a#?eNYrIJD2Kad+yrUcO9@UG31ddR|!; z;nCNsmksG)F?gUR$}w% zu`LIV@eVQ6cf5|n#9h;YtFGBtr?5O)3NQ)%xRNQjyuM27y02f-S?sDE#=d02-i^}G zEQ1Vcm?S@>%>DCarcQvFhPn?l2?WZJAdwf=BAvcWVB(+NfB4;xKmNzx{qD#2A7VWw zAnzPYMc4G{%TFfZ!$X#BJhii$p!`#3fK-0vI&^#w@$loP&%u(Cpi6pg&oL@Cmo9oJ z=0xX&e&9z;f~qQYDD_5i+s#WTrYlrAp8Kx%Hk$rDX z!7SBt#B+OMC&JXy=^vCOGhpc4ixP^h$}pQltIQZB9H>UyfJMc^9#JaHC1llPgBYNE zTBki$N+7Y4IJ;^w>9*Gwi9~>F6iGvh?JKa_=Pb_A;gW?0+$dIaljlsUy~QcaRg( z;O(Rvr@Sdjq5f_OQH(8?TzC!z?igv%Hk%vZ`|D8vnBnE1FgW&iCG)cA8E}3_@ts{m z=csyA|Deqmm2^>cm&Jkh!))e!y1=kMn9U7Jraz$7=ETL_U(f87g#%E)Gg704S8XXl zpP!8U{K>+{T56F`uUMjQfOw_ynY32mOwm4U$~lck%@0?x5&s%xU^`XJxOrY+aWc4j zYIeqOE_r5eE*7H`L&+&*VB8g00HO-U4X{S+U@OOIq7JbdFwV!hXn8}o9bbZ(MSYYU;RpX{RFE`D_8JZA}7DkxhLNJ7voE;S}RJzxZs z)5Whgy&#?}HzPAwQFE^2aDL@Bp${2^Jj-u)q?HQy73rJRk&k4a>A%6}UqZ^*sqH)n zKubHnV5ZBtnpw3p1buv)3=khqEWOU2KO&yLDx(Jd@Df+MchaD{uPZq>4-z(5KpJUH zf~W3@V?xj>3{1u8;CngJ0v`M|Hxm>{NZ+^K_e$xT0(y|C`4~MPO~?31Q_N$m`p$Vc zkBNxnvX?HzA4+? zY8%B!Y}Fg)twC1mURlOiVoutWP0^1-dMYk#X}CW*dCL=s1GKvQJdsVLf5HPokW}5# z?BK)TGr@l!c2*N|Y8CDt+SfQt2ZPX-rv&WGDnmn)31FjSaQA|*xs}*_WucbYR)4m0 zemR5>yQR)^h;i}LNsr|>CL?Zz_;+!R+%m9tKoYx{96xa$@9Bul)I9vVfB5S=>wfDP zO*D)A85ul!1VTxU>+IYaKK1abnP?ypr_33n1)}GHjroe|Y^`B_jP+{j0{@0Ml<9|FAMfrroQg_s~ONE+m}QS$~QG48je?kU~33F$1hs&K7&uV*O^GrJJr zRPNNQAqK1MeDUnr_Ynblk!~%|A_LTh@$s}lq7pARL4HyM_UYrN1O#fJAc6+xVWlY9 z!6i-V@{yR#6qgT4!Q_WB=FEX9kRk_xc`5sJPvp8Botpv&bg>-Ge4dV%BQKKBacKiH z2~ACp~>?z#}yH}Y2NUp2#AluYcZ zG0o$IKGU$g@>TWEWP^!6XPSvWjh-xoR2Xsir65QZa;+VMyn2@DuwZK0Weuh`^wv*c zDk+!Q_`Eu-`QMpja%rc%Dr#q=6`BYkp8#<#{2qX-#~F%;EkO%zd~ca*$fA*F#HDKz zE}hNL%(O{JnJ@V=LY^j?mb9~!9LH2LSyCbL_EkuiQvjv|P6W0`QE0-;^Tm=dHvHgb zcjv+r=%#i0Psw$E474>FZjilM0TK6gf`>(+TH2Y4ZrpWWG{5Ka4_U$a!<7H1TJ4N5 zuNVRBhRn>~naL8@D?*;KI$Wc#B*Z>e8CQiR=fR*ZGZDXJYx^RX?EQHVG{q;HWzifo z3N#K*sb{@jWfxdTEgKxpO?&hd_q#>LQiW?LkCDW^rvb@4$^dBvm2fui&!B{dLagn{ zw0U|8uU|&8Ui;udJazj>&L*bPjh=yOeGHHBShSD=4!1&Tg*T5=m4~#a#j-Qo_b7$6 z>BHu-Sb^M{+(!iw?sCa)=NXZx*O0|wLvAN;1|yWJ$g~<@s8GZFGNKv*=Ng+J7d&@o zsG_s$TIKo^0NTgxjDlTcNpAPf5VgL{N$>H5Ab{JUBVN~HLc4%LA$X^@`a10gk2i6E zuHtnC1{w;8Bpl~>cL6AOtz6$))>Ylr) z{;KA>cM{CT6VO=mjx)6GtYj~#@8(e`N31=WqebW|p;lY*tsyQxy3l$b@$;hMfQWk~5GFeDBHX`y={-hX;E~Z!ofe1EXQ{!V{kHXMd z5}u5%Rro#xHDo*^dJc1o*{Bx3Tt z%|-GRC$zqqFJ1&w`NV~t&V##U_mTrJ(*$x(%N$$D5(*NwXBm6NU$mCyXzsfm`N5I~ z_j|igWR{${euZFV-ph8XhG3}#(yv?upK5JTw^2ztYjxIzk=~m{YzDtldT|Du5Q~4P zw5`6SI7n^O%kin`WL_FMZvuT;zS1KA-KX;3@*p+f};b z=&_*zs2%mC+&1so%LDnqb4sZ3*gyLe!k{i}udRrTi9m~tlt~%Fw+k^1g z{At!Ewu?*l__n>DS)-#$4^7=k&exlvTJ2jp<6Z&QVR&Vx@CWls$HdjGzS2u0seGJK z1B5SqbLdP{>({N9VS!a)vf6N{-VQ{oVkbh1{G z_p)f2N{m>pB0t8L-N3xAL^S_lZbU>Nrg*KP{VK=fgD9yH8m}m0-ONQdo1meDyNqI7 zWOV?fnX`qoxO|oga;p#zJbvWskuDQQEDz8ogRFT)nX&18}jPr_?1|hrFB}(+mLN zE^<1A0pTU=pp+QaMXT&(a z48|yO1k$O8cSoeGu@bD2Rp(}-l}dHjR{6JGnIGJ65k-rvICp$JkEca{;@l4^(a^@~ zlO~mLfJG*N;{ofz!Q!i#$KbUn%AXinD@#?bZzbz$SZtXq8#Zb1q@$CE4hg|965J(M zCXQV)0h#;}rg#;DOGBjDhAN~!3X^F7rB=yqprPWyy6ibrMmt&??}PsQeDULl&$0Uo zeWl9`iwtK*Ku<2Vj+mmwb=)(S)+5nb%4n4%y~%=_9zBJR^A_{Xyc(L)=!P^)&<3=o zcks#Bv-4a=MOe_PjVHWMX~WL{pU}um;BA=IW+U=5r*R32Nzv<7mvsC9A{g8jJ5nC# zBlD;%9>oxaD?<%=DSYm-Bw@kt~EF(sYeSrQH?_^ z>YP=H%B_pJkuW4$^r#wDZ3+%pM|2v!R|)@(zfJze1H~PWjNElc(pJS9$pfN&xjnPS z`tV|Rp1PDx8+4M))Oyq)wc+PD5fW%%n2L|&G1Ttt8TqYuftVz}m(QHzs&v~NQ20a7 zjR$s!GXv+^@`TzWDqSU!=Cr%AJd{rKA>yLUvhQp2Qrw6j3nQ`661Z6$LkJ31Ijt^J zWugt@T`_`4I0yTEu*4Kb6*5;d77i~!fjUp(W)}SHU!N|rtimn*^wZDpFD@^_+s`P* zIK=dYvKQ`8ke}yI9~~ZK)!4NkH1a>s-OPFvs^?c_q_0E&3HK+tiX2|#A#TaF43`67 zu{X??^n$1%UF~mRnUzbj`K!iL;52#WDpM5rkZj;l)C-(!-u*!5_JW$eG^Za)|Evx) zvB^B&(bv!dWs?6TzQw-rWX7WqhJ<$$o6o8@xAY)P-LqO?7*PGZGZJj=5->by%{l|d zF!;F&Vp2=BaQxx1I$PCDSHak>((flq&zTjQo{VYLnsVUV$Urr;nI8~vj}wnB!fKOk zbc68tfZ7=$XxcqU^P&D|Sl}nnYr7R@-vnK^6B467b@C54RwAK`bZk;9JRc7X(Ett< z%Q~$_Ksmm8k%>yqbdQzgZUtT8+T83@B9|R*&4YAQkxjHgY~iZ=McR@-D#YsDrr za!9)FF%+B-QDJ?rdCr3s!UF8}-F61k&Go(PFtbK-0b|Ij&(C6`fCYR|W5=Etss_4- zKnAb2AE66Y6vn=@S_rZEP#S$~^UUn<(4Q+$*ypwAct>t8!@^DHPa3w&3OTjR2N$k8 z5@RhpSjp5`?{r?~-0q}5rTVyf0%o}iRAniLwkNM&%49Xhy7!#)%pyR+l#Rna&JKtR zJoT8_4fxeZB37LziuG=Ws<1_3vzGVvAbF8yE1h!ZR&l7UPu}Xmr)q0zlI!rUws)kp zss(wA^FHE!x{emku;b)Szz%^bblxX_1zXi!!#_>H{N60O;B0BWj?;FXFg`Mc#RCjr~G-c1-|* zwj?^*4kVYyzEj%otOBT=h8xfpk)4hll8PXgJHl99#X=-5H)M-O5`p2BaI(O=c|ji@ zoR{bd&L(370fiR97GP6G2FJ;L;Mnx_t**%0w3G~yMU&&9=;cp91Dxxerl6%3RUEO*_wEyUXr*W5(GWyBSVB#%9OA1A#Q z3>3CStiGGT=3`+IhDD-=HcdhTdb&#L?BY-rCt!5+rOMRE%`oIp9y=muLYkt3 zdz$l4_9io_B%o;1h9jNFATu-t`RFST@XPY@t;2}v>$@Fy9}v<_1oi_>D4B_4mxGQ1 zKrJkaqGRITn69>1*9HA)VgC#TQG@s*+P2L**< z6{%z2=N@#3O>u)fbkiKSOc9N347?8*R*!vtK07O^m{kT380NQCi~xHjzaIj>^b{bh zpsJrd6;ov#e0Ei@+SLSFnW`iY^Y8{Fi`=g#?Os$h%>%xSUS=^mrdTF`9EdiSxx2%vN%PDayo0E?m%(U9kGJlg4sPE`#=v#_e%yy`V zB)M2fEq$kbe5ia|YZp77(KHk%5F4$fypAQC6T8 z%INO}jO>`*cMAH1Yzky-9xeZ#n=to3K#v}9l;JW6vfo1vir67Jk>Lu-D5?gxC}fcC zy3*Zoo9hNsQnl#V3V_X!mAAB&+CE3Sg>(Y|#jmB^jYkrA~U z>1VmRw{WC&ywHfknqHgU8=nNh*Ntmaiijd#Yj057NmI# z=i2H0#+I`)3A!`T5cri;LC&z%?cYW;DnmFMYq-66R0yDm#{J3x58b_!9TNl?Q^CUd zc$hjLE&{Fo{8OrnKYhIXGRh_SRBmOKXPl(m&0N{QCR4?nPU?yxr@dG(@C?Ff>$-EV zvKOX*ScpkU%^}9-ijrW2y9Q2r^!TjPY^x;VS=cd|ZjiscG^f*LQRH&+o4J7 z)O{$BAu*PdcB6Alqj0J=s*+WCiS1^jCHM9@Ic&RTbtin{qv>3cnG!ry%=4{NJ+=$@ z8#|CxL2xDIJavkX1=q$_WX)D-^3-g>r4SK~3t0=A1w<56%zs*Sq_Ti1K=*(>ZeXSC z0~z2rIT;=6Vw05KR9dIBHv2=aG;>`=w4(R_l1qub2|54h14cIub*W@vtv=<`$PVO3D|Hm zAB_FaZ-pD=5k|#h5nyQ-N}}*vbo=(tjJ>omKUwa!OdR=6Zgzh$m0K=~o(u62?ar7= z@`Vp-&nb4nn0WgbzD8I|%sANW_*$g;+&Eg7Hgw4}E;0g;*p&%mC&jK(L7iqDhQ0E| zIoN#RfGBUOqut6C3s~ts%dUC@h%kffCaRCat-GTlqtbCDdRq`Du|7Vd2172MrJaX^ zbKULH8%X2~iDP=MASsuZ`<^YsUaC))9c}4O>t2kz;rMWjSzkPX!~D*BFkb}i9qW0c zq2@(s<5PJ7YkmF`w#J&}6^nbG^b6oD*>1IfRq7jqgK=YVo)$9QRjJ zzeU9N8<124BPNnKqn~`q_+tebK@fh(ASgHVy~LO)?H4uBp?q+dwq-Qo?sXh(3=fQw z+mKcpynDurkvCjj@2)RTCWEC5M+2^6ml_96O){1c#WX1Ls+fMb^Ml|_gk}|E@8=-+6&C0P9oo9i_FPVfP#dw+u3L`-$-x( zn*gS@$V+y23*O6E)b$eQW#cZGY=AI+wbY>8CXENLOF!fx%`BX=mZ3FyAlu(nNlgN8 z-+NZiyVIoxtqLrA2M^7QY5jW|5+=WD!WmasgtzP1+boOfjI<85?DOv}ZmxXZFMrW$a z$+Vt*mlxuD?KdkuVhS=aBL`E)EcLwGqS0|ea|)HkY}Vb1+W9ZyD?x-!h^KDQ*be4T zu-*XmtW1z6mTSd^;LHzll^R+(Ns*=UF(Hc^N55)88&Xm+egO3hYyK1lPynEyKhK{% zZ@6->oG=ozP67a3WZqv~M0y5kJRYzLdF;p>#MamC*0z^d0F8=fEHe}Iq4Cd(vHhBD zx;Ah!G+VLpNXJnN0)@H{j>BAXFNpe@!DujMBk13?ua*;nIv9}tO<6GUDf2+oU){u4 zne?KmH&|V2)ZDCX6*(C(q_`TH#Rgyk+_o1+r$!?cX6h(Tr8H{ zvP4PwO=5>)i(4!io5OODVkH(;wY6I2?L)7)qPt?Co>OWu4;OBP5dcZakWFA#22g$) zRYF(u7zcd`x}}&!F5Mjz&B`X7)xFcg*(AvcXR)Zw=9OjjIeOlZ3$KSd%#{W0)$zUO zb8vv9*UW!e6f^(ffeW(M^wwihlG8;QF-OS1lxkB}H!?AC_BFoynI;|MdE{5*o`kekFq3trDDKm7w66q>8JVZ$vIQkM3~-$1p>Srr^0_HKqaro`skyn%-ww?_a$F^f4jBJFP-NmSn1P8XAkOmH~c%iD2&k<;fFu|Fcp^BU&gH|TK%kg+Cgn|(t*;_0&XTWaa_fWGtVFA zZTWjV%1T1dR+7>1U1|_w*_!{p#r?6BGz^CzUs9Ss- z-{5R%fO4z~Nh}iZEAxR0doa7$rPDx2gMQ9e=WFf97=?-*_*8ONV!;9{T;y4Fi71$h z+_eYRQ&(2bP#*>@GBfR~4yL?oRq{%!Y6LNx6Dh8l1*%+1TNpvBtE-^YF?eNI+|SM3 zN+D5fHqDN1Uf;$K>-L}D<1ADWcHFAj&L(@5SI8_Tr@@Nu_Y0eN?xqZUj{T^zJ=xMS zqvvRY=G^C}PiNs2qWXG2w(B}iGBL9N^S86vY_Ot6hT~9OFjX){(vDMJkCEPNFXlNS z9+SoZ;si0^%lls%h=d|eYxh_@PaZOT%;3(H;r%GwR$eQcOD6->juGJb(;Y`N0C0FG zcTrI=b;5?~+`L_VvTPt>68?LyMVQ27&2UI9nD-EHC%kOnvUs)z;yX|f%zx#ySqQ`; za&N2-=UIm4J$$YCIR%lMa3n0!JYNopd%`0Yw7Yz}zi5!tWjwuK=!;{-kBZ3~Hddw$ zZjtlvQ55=l;L9VgNCM$c<-E}(ic!|r?L1gD3Ic?FVdI5N%GynhjhKbRAh|PGIri6> z0`u)_-qu8XoV6N{IYRzwThxt0@kD+ADb!@_q~v&teUJ25j`O9p4<)O9D}J5FtaIr@ zT=-#>9JU}=(!$>4()6g(KX)VB&S~G3>pnIAB~NX09tkM#pcqsF71wg_(IMmpqIFdB zAV%)mE3bABxTlgydMQ4I-ivn~*kh$t@(R?s<0I6cFV2W3&dZZn*l}fcS+V^+^H0tv zLPmZ=i*h?eJ1sw3AvyfbVBD`FG;xZ53L(F>$B`(>!qIni;feOI%ETbAAzz_ZtTv;o z5@jA{ru>r)(e%nU0>(@3g(oME%KfD zy=hK0qEtY`6V88J1tG2Sc_(aSZpMrJ`sw2G!-r2v3{MJb-p>i#N{02Y!+VP@yb-n#1I zzA{OWBqC(w4RD7z2X+FRlc0{F%tJN+B0w0pQZ?S+K%xwwS>b!$8-L=wjY1~uTxW=d z1X^l5zqE=NU*vMz59bwqAV-DINe2MZy16rOH<$70tBvW_E&MXSRmaG;2zQ|mZi98d zm~t7t26a>Ct~zPHSgBg$4d&R5+WT0~9A7;SY#ZbW2G?kTM$U>PA^u2bY5<@&Z(qNB z5oGdNN)ySxI?O{*bh-t7j*EWz`KEo8xAPU@OVsOArjXYS>gJjgH;oO{R<~g9cf-epfcAvNi3{KPl*WG5G%?m*P;cN zq;JHpA!27<5g|fmcF%Y%{jEBhGwOO_>sY~F!CnOY%v1FBJ}|ZtSmmyd@2+XYP%02t zkI?NPRCDN%io%VNxA<=6hN+8fL3xLx!!dG91Ym4ZGD(Tb(i4i5DO$m} z*LIA`;A8aKcnrP_(wc|3B<6gZ+Hf6Wp5{&Qw8?1y^esb3!?2D z*xHmXPqf!KZ^<|?njLN9xfQoNj)uqdm3;R?;;HC8={V;rkTQo}pbmaDB;>^5=1afJDF;}VsT7NeR zN~3u<(!fDFpFDe>$BR7rJ4XIRhVx+aT}n){^xbX6NYq2}+nvo=*ZK1!`{Yq;+6 z_sqTM$K?bb+T0ftzD>rnChGql+pL77>)4aTwW)dh6z2blUL4c{;6an_q6JEM2q~b#MZoLLx8wXQm( z3Nm*@Y+xBBSHLp41mm7-^jBtZ&ZZf>Up6ktVKY|cRSh~^bHtZBesb8;Z;x~2FuyACc`}iFhC&zo7=GHY(GjNnqt3`k=u%_O#$bNwTE~i;*-t5i7^bT7*{R47in& z0j?}E6f?JEBIL~7f|{}eqhG7*XhU7HCD2;TLlFw6PRz02WwK8?s8S(uhC0u#K2w4M zIw`%&FgW$>ltAmP0p&HVSEh}{raoSfi7u2M+=O05BP$MSD?sf)CtQ_!JC;n)ZhMD( ziCx{e8Tp)#T!0;UDdw!CeI6Ru%Ibs3bl}D_))tDML;Mr>3kL+-OX}QJpa3C}5addzF9DppP|3xcivnFPf;zFkj66b zFTQ9#=CPJ%4kNIcLYKQaNSv?ys8|uSZy*Pwl84@)vk4A-q01c{CxZ=e&ncER#WTX` z^9HfrJ+fP4_&FxNkKJ3vc1-0W$JJ9Z)b7_D4Wxw%M0nA@pVJjx>P%0BBENGv^9PmdUk1rvz zOIrh(P7B2170}9Z0pgMGwY726tRn;;v(dVfsB?xE_;&Ea?r!>ct2z{8y4OM#TXsf| z4tgT`CYJ73b67J$U$3MMgrd%*QPt3{sRHRRSOHNxLYb${8=1oeBNj9Ifh88CF5cIO z;a*-P3z9fk@{eOn1+4wW2m}v%LqC{u*QOxAh2%ZSP`-HaEL%MoZSmr_!n#&2!xP~c z7Q?L+bpfEQzw`Lv=Vlp)gneFH-g$Wqd#Bn{T5wBWb!k~Fb`|KulO?)F2dWg?GJyX6 zZ~n5c&-_NyvN4N)0F8`@sgpNq9j>g=6k%xe8}nv1ajy+oZHeYjsD-8UH#ix^{`t~o z`?ZM6S+an~X19*2ur^A??A&KsfoYbpRqTsHD!w=ebXKASGo6*!hFtAfn?&UJT$W5C z*Tpe!x!1!R%KA9JwYa&8X95siDi}#jX^9UQV~0&4MkbI zFK%9ocN(^pN~BQbriw-PHQ&-Zq5r&l^Xk>BmrovzOS#FyNtIW#AeZ&!>hkjQ=loEK z&nZn_`VQqsZfDDl;{{mi3v#y1G9ZQ>aOT@*B>Uh-EHOV`!Ys&Lp_NHG6p3v!HD1dhP$?d$r;BqMC7lT{6{+ALMJE99hMoT<(qNweM@;IM_)aFf~&KY zcMYym7kkeRzaD_!xf9A2oiA()CDpb;pgkwHS5684H;!110Cw(e<%ykOp=P zzEisU#H-yI?2%Krorh#^O|+mCOlb;H&Nn5hD}=wcEA91!aVa@`%sLa6P$cM2Lf-Va zI~1mjNsKknIwwQ0R5PVW&161FR&sd?7eRkMeExDZi+b#jP{g`}U1l|@1I?h!Z!Cab zpkQfMq%oflxI6P-2Bsxd52fETeW1y^uhvzSz$9m=Mga&iqE~1%Q`MOlDJ~@BH6y#Jh zJA)uZD>srQId)}JZf5ho9-0I3V2#W;LpTm5BpU*<0cNkh9#G(usSa8Dws;PWHa;E|5>Cl%>Ml=4nob#TKp3O+BBrpJ4_@khBYDBfsHCmZT*!*L{}_ zUMyGlbX=D5gHk^C>{)oi&j$X9$lI&@%G@_^)U+wY&J(kOF#42ycgv5(>0Wxw>V5Mn zH{x(Ti+WBqSTM~}QXQ4d8Sc;5u}wpuYwi8)#e8X6<9Yr4`;R}qe;?@QcfbGRAAa~T zn~LU=8H1!L0MSteJX%c{)eJp`4HuIMp?8Xsc_N6(%Ff3;CU zsWOpTyE=PBu*GR6P#LP&iCWT;0BL^lUZQx?3Db>kPI!|bAr}~5Uq~r~nct=VT!s{R zb)%xe4ye;j`0)An`EUjr@6*WVWC=^t2tD(Mb@lJNv_&M(%FwaJN#XBKvpR{ivVID_Io;wPWdm zoaE>1;axr&w=O4`FQ2izyUoUyZ6TXY+RWq}<4R6qacpUBQ(H3M-{!FS#esz$vfhsSuBiTB<6hdh6csLBKczFc zg8&c8qdaOc=G0PCZ=rt8p3K>FYgqlBWZ*cZyjUbbbwXO2V0Us22|x4FK|v&tF!U>7@-o-#B|a3MFPur{2@ zip(+kKZF5-Q12n z%r`>7(PK$Zz`0V*m?GbIZ^}MQc0|b9d56|*OzfMx?hi+C5caJTC>V&Cd3`e=5#bns zov>6>V(_1OKpCvvv7bq(Ws(4DrTM=xcc>r*ZmhU*K5^yhiqi(|-j#86sRel3^K_2{?ED$XfMf;^APgwCTfvG-I2wgw88H`` z@3|@z&R=kUjGIAFA}HK1ECQk)m)?U7;fbMFV-o0oOMyS%=efTBoLFo=(OGr{*w!jO z6(-040WQYM6*q80GtIIQTf(_jO-`IZe~#q>H$cb^IQ=Ek4(8*h%k0IKtsEODYS5W1 zYe5Eh0^~7tSwS#TtfH}CabVuOejT5^OJSxZgk|+l9DZ88L)A8(=bRB-XhmhPh8!S3 z=G(&=zikO!867^V2p6~4ii9ZV3E~pVBmD`IRwgw`ukf!M5wlw<0sAYpkHQr$?@}01 zF%!3m(B{hj`fE+CJz&ahx;`a-M`Sy{Vb1x*UD2)F;-M8N4i{0af-DJ;vefg7u7WcA zyk|AjIU7GgpGyqb;tCFRDDZ?}B9<_9Kx26b6>XVbIrwcmc{qkxo8d3l;`GU@!Q2;c z;N;yRBoQ^n7A>sASkcO*?r~NmPr9BIyyE<_#8JfRAok(>-3a%Xym8T=xG9tZAd9oW zfNt;Jy#DTOSZOa3Fr=Iy-<?#V0%VsI2VV_8Pc?8@o$;NrFN#bg}fpHFdMgO-4~c@hgev+D2RftqB#>jKN6l( zhSsu|CndPg0Q8*P_qhJo!(ZQIKIOHfUuchU0aY$AslTktb$uAJD@MvghTNtW&mDbsJXVcXFv@!{3ZQPQWACDPJ@pphPMUkUj2+BLlz3))ki zEox`O_WdM&NRNe$IhUsg7`PjB=ww_nOZ4P%;Pxl4Up$MXNR#Vl2v+$=#yAIrw5rQD z_ZIv_>GoqdpRxFnxNXdtWB`%f!Ic}!dn|_xKprUfK9%1Xr@uUT^Q1tJ znzcc-;5hkbE`ZQRL}is+4N{m_5kSHjq2YB;WO0yUw-WFqnS&z!%j#b&hGn2kc-){R zmn)*yFDF1H*_{{&Mc{dkd`mknaXzy2QiT`Ft~zs0r*_dY2aCryJA0z0%1%WDCd9<^ zay@2)PQZX;OR{bT18Omj@FS1dt&phSfBN|2Pe1?j z@Bi@A`=38vd`hL|G^y>}ep>D4SHmpIG(XKq%pyG*a5FmYX;T^KGtyV%d+qT_R_JX} z4|r#ch*dLsd6NIA%bX!1AS#YIC8%hf=sEiHXOAK-o_`MWsHZfQkD6kg%$J%u3cz@) zoSVD{ewZ-{GMh_?gXMk&64)C)PVJaT09!b!$xaqwb{ z+K}-0*lbAl>e%77NW05dhB`N#%`p%yORSEVl7uV-@OuVe3}c&E$3tSKb|K{1$}_x! z^0XOQh>%p^4~^LKgqjr=PoChV z_Cle(cZc4!vAj(<=X~H55~9e7H{A#C#O_@Y`H4M_|COUWd3?xy8?xF+H95?ZwzmK<`lLpd>i0xJWvo4YWtFZ(&$ zDDhit#-aeJE&h%*oXq%S?%3*E`9!ZlBQk(b1Zc zzf&uRzpro9B#kg<$A2IIs<5cXk$@D7cJ0pzoXA;@{-zwEuxOmg8tr@+dUz^f!%j^S zBuhI3sK1^%02i-~H{NqT>@JYrr`(s9`okhg#V>FHfJl~`U)``@HD6AGtVw~S)f7_a z(_Q;=;xBb2im$D>7MtByF@H2Mi|kL#YuXR1VBsVy_AGZ5&EJ_JLG?X-rPC=7V2iy* zl4q<_=amqYfQB1qKDa%S^q6Ht#I(*V>UT@^ONx2dLsZJdm~8%>HR6N3z@>~vSI%a~ zLvx7Q|It+OV9gkCE{))kYJn65yKLPpt1=1WIrADuq?1E`Pt;&fIdBAoLl&n8n=oeG z^R1ce6nG}P9VOfkpY!WllLv%WF_$iWIWX^{5#^Yn!6Y*1tZ`@T%NNhW$F7~pNdj;; zwape~-{io6ApsWF(yZt{45VywxUge1`i&wP0cO8wA|3Xml8#fp&gXAQ`v&l7o0}~2GXGqbNWp!O zx#pQ!0y0jSJKfH=NC^q0lWImW+h_O@$7&pc!7@Ck!XpC&g)rAUWEK?)UGAAROz_;M z1?yqv+-v{=F-TXWGAO?zLvU3DC{BJI4n(_cO1pWh(}B=?DYOAc$Hc3;tk>I`i$h#^ zY=!#M*R?OgQ({c`Kyym zzB-iY_)E!5<=O}*J5@N5nFEYti?CA5*P7|&PU#aDyjTQPc{Zd78PuJDQnlb*{9YOU zz>C~LZQ7PX6Yu1qrgChd!7d{1MOBrVx0LFrrin@kG@O%AtzOb=3%$wLy( z;0&3)CaprMrT8;{&Uu<$@Gq1a+v=QNp4`mIG;`~UbTT?`ke1u8e-MHFnd0H3Toqr* z9LprvQ79jlh=z^kGLbBxLCiFd&^)(7i6(5Z{hCAlk7vL%=Vd|nH1`b#)CwcTqTti! zhmQcz)ZHW-e^nlwhTkm@oUiVleacWuA7v^gOjP_#s^PTzq?|L(urt*8r3n4FAfYVe z;~i8}j8TKN9c(rJl!f#1+2e>nS1|M(a2cSP^QB7C4&7lMP-te^zu$>92(UD(kNBs6+yXe=hlY7s9Nq_C7ZH1Y~RS<4$J&a6iz z#6u35r1YU>CJiGJrsn5Bs`C%|1kgOx0+CUfgN4M;rOffAJ89zBNv$cCybSV0IT)Mjbvr+W!8>%U0d^`tpzmRj%Rk0irMYzb#^5{5ydMoH_D!w zAj>MBCeoO@+1cpY?{4QK7+I6$A6I$?NCSBJG4+yz{WPLvtxsn=-w|RtI+LvrTi7HC z4x@aOsjl>|=d(#s;HK#oJXs?*6~uWz!_tP8B^4LdGLE@+3MM%JxfuCa!GFB#Gu_2= zrfrWfSEQv`FYRkK!Kug^W|NFA!Oeiy&7MuquiyXihaZ0W>C>l+EHs1J`oYso>Y(sJ zY@ZZvwsB@ny?XvU#ObI49ZI~F_RMyaK4O|8#xQ0;ay}u11sjc{Vip|-u9|hXl+H;; z*m+5`Zv7=IIQ8bu%bZW}LY8IB*ZCpL4BQ0$zj7ScWr1MI%%A5f#)2gm{VE;b>s006 z^n*x2+f_T6Nmz`x3W|$$%=yPmntM=G|7OL)*?ur;f3{)=_%64na&}<4lJMh8uPAQT7@$Y zc|MH#@)HBn1^kJp87Qsj%(=v-qzFF_4&*EL^pEj>D6mEKw?Svih(iK);72iEWbZOD zVkVQdid&(I-!^Tf43D4`)Mfg>^b(#q{jk&`Y#6SfY)UEEM@1<41#CsZ(>o~_Nqgj^ z2&pdV`Z~3Ai!(M22S0wg2(tNc_QI>&u)LDRu3zAQO8q&sk}LmIYuGh7_1&qn3xP2o z&8o?Yj;U`o!Cr6GvI|VjBJ1;|`rMy3pTnb;G!;V;E>P2v%j&A_fUfc`?u-AIrd2tW z7xaj%9n@w{^T#FMh8N=dBrRvbQWzCA_#!vXhGPUzt zl;IL=UX+P=r1Kb`Q^<$8iQdP1UmR`1WD3rmcD|<^-X6sKLvu52`gK4uQMG?&NNJOE zt8CdQSLjfu^@<&zIY+!$x*SN`+`IxDUvU; zs$)yz3p~hQ)m%4c5KJ`h>_VN8%2+A3(5jO2Z`Wvn)rs!z8%cix+JTT})$CB(mX7Vx zy_(qMdT`sO_*V*((pk1!P>Mc=Q|Y0}ZYkA;K46LoORW@@I=;eZ z^RmTF7094pl2?e#O6~J0_Q$!54$s4{l*Ghumrl!x728Jb7WB1YAJpI0(TlK7i}ts@}~uWF-Li@daInj{x#m&=BI%XKtF;q zwn7zElV+1nxT7%8q;)yDx4{-ZeER(H!{-J#w}oXG8P;PGa;6qRq?i)$RqhFIvwqGb zHJ?qAWWK_}#9Ybtkcnrw+^@uun6ZDL0R%Uj744$R8$VrZVWPbevs@ul}B=(|Hs zadkpnkxNUB1VtG)b!D@nbFJC*i3H83{{FB3a>DyAel(K~oH(MKpBy_OI)bvm%XaeT(zydb#@jXwjIU`v<-6JiEa1;Hm2IxA^N}~aeLW1IR0zb! zPL>!_SQp18cpuvoR`T^#Jd>+1tXjOi)fy10JQ%Qf%s29n-F{iV2gPMAv%DX`O7f=7 zo?+w^m#8uy%#A}e7w3;V<%%we9E-#zd?615F1U41yVQ-_*lt^xNslMBG=Oyf*>Vxx zjBtW88hgz@Dky4^={wl8n&J+ zV;v})@`eh(4r?Y$AkQhQQNf@$ln+X?sBWDQv|<$ipbFJ8phLWLMB}E+L@p?Q(ThUu z{pvgowO&*pc=6-2)AWFk3{b$$cn|q3#{TQ8>#d;p-(e?Cu) za0^*?eDe@`!llEuWAt#cFd41K(?0Spc1A1@eOvay?2?-$+k0rDUc<{gG--yx4IcMo z>JYe1$}7w~svKXw&QDSmNV$uR$flmi#y8q$if`q1e#x@L^IUegIJ@W+^*!I{Jln4@ zg%ZOKBV!kf;XS@=XZaoS8uB?Nn6sKUAaw3kJnHfS0i;+u$-NApVt!QQIrDaxFfeu^ zgR=s1D+1mW=dIa40>D`ttK@BWn@~D-EsWj%D{$UM0~5gxx!N@{`*vq-GI7e3IjlAr z5`*(k%w?F%x4Y$l=5Dg_iPKWr(=K~iIzEM^KgTEFDmKfNbAnUeI4W09p1gkjBE~~V zDf2l1&nPYjlfC?Wkxq6~T$0UEn2?_=)%eZYpxBsl;luE6KP*T&H<99L27P4G=H!MF z=$6$>k9D0mqvFD&$DCoII_JK(SNQQ``@RPNdjIib@@U$AWiQZG@VtrKAUFa2!fuK7 zv*ny2P1lUD_VP|e^62N}=g$8WRI`fmnb(6~?NW&KtO zRnGC#$IsnxPxl-Kza`QPUGL^j3lmv*6lqUM6W%#A#wMnkfaZ242j^gD0j# z+ei^=-iZ>m2<`p%N1q(OYJcdf8BoVEq*9%TyUR9+J0Pf z`QcsW_T{+_T&(fZs#{fBSOby>e3i^SD+PplKKA4hap&117y)4$^ZvLc>#+|_lPE_a z){7Vm{d@prKsZ7q$&-vmh00Re-deMbuIP_>Qv1g9CKo$iB|cnReQiCq%0Qv%oBJ|D zl_JRCl9`;rH?O)O*3{o&!p;qe^(qxOPt4Fc?>YX^d!sRtk7Xy#_x1uGWm2>soZftg z>HJkrgz7@d9p^0>=a3s5&k5};o-f3TzdUOb0bjOP^BSjAB5YoQOdKUBcZ$uuj(3~ zs!Ba)7RzJHhDyIHSIQhcHX6jChDF$G7CS=8jjPKjgeRNP4|>?L7@i@E?SAJyY6v_D zS>r@LU{UgMLTy;Ql!qNjFiNb%UIDk1F;8G0IE*`AZ`h8bwD|N9ztODA2cyH*^DBF}en3Bp`E zFCbV69o>_$fqT|X+}9(Cg*6tAA(FhOc6#si7KP2kb>@bfUkY*K_32Sq^78fPtC;jS zFjoWzcMau_wGUD#E6(5` z?l{@IX}y*8CdydN&Eqt5Pd{%=H(yj;zBAVg&8YvjaX76tn7cvFM+W9Y?`_nidNCS6 zf1!G4b@dYAbEbt1t$=kx+EnRnyI_8efo3)Ggvi0Tdo)PcJjR0oR5R|%X4vKI zO1ugdGx0I*hJ0p5ywzX2R&V45qiM&=kyt2A*_CbqVpdzk44MR>_3XBgXVoct5<8q7^a*az2Rq zd7ZkUd2T+}h8{PKlJe=SCN*CP19HbF%a{OsJf@tFwP`l4RTQx+IW1} zL1g!J>GofLxha5koeOBMv^#mWwpyQ&_nCVgxx?fYoNO&eYM0C>j256A21Pk zRrm|Cf)zfW99YiLUv}O1M-;Em3)IK{y?S!~?)l?4FCtY%LI-hsVv7fCWpfhz7v++4r*y!(!ltLZ9weL z?-x_B8D7hnz(bctZlBOM7nT9fI?R$y5&nly7eTbf;9L*HnfE8b6A(9-k`s{Ukik>6 zr_`T`({q#ezoUR+hIuo_d*RWCWqZx+GUgS6oskD_YIBiKF}$eFQ7C%RkUax6M%ZMw zbJdEnA?!eoLN=nkrAC>)@yJAJI5qi!8V9tCUHTG3Q2uPHwZDJ&=5c%7D-zF*pzoZw ze5tjXYT~n5JomO6uwz9od%tc2m1Lt4W}LOJXEvbvQ8y+)G49yvS;YhWv<~*m(40e= z83+3K^^T3o#&p{n{DgT!AwCQVXa*28bGK04B`^#EpOoe#)?2?RKU6era*|}Eb5Hs1 zy8QAv8AEDrnLh+I2OOL7s0~@(7=GQJ0*)xwdeBrSv>^)#02GgrXv>)*-93ed?4Vk6 z=JoYf*IYDti}Q7?&aw1nAN*|wc_?_q2dNrK);%^j1K2%eq=e`dbG#2)lso((HIikV zwrB8JAiS18x0}V>q=PDE>0GIW+~jN*863FJGUmAmD_V(TQzTk<}wm_f6SQB7&RuJgdg>v_x1o`V}s$1G|dzC#1_L@!o8x1 zi|oloSNE4EDmIF^^^^;Ku}<8TT-V~X@+Wzu`4T{$R_t!;oRZ`B!^*gH0WYF=B9f8J z;b(~G*ny=Tu|!_xgqQrJM-c~Scw&R@b9YAuQm6S{BAWJ1(lAvWG6;2n5QU`o0Yxs; z^&;;CF3)SR>ju_uyBekp#sse=U^Lra+5)*Hu#ytC*$`Lt1|h9iuU_PxG4CipGQ$>& zTP+flM?BQnk_n$Q;h_*1e6XBB?ep`H1T}Q^>TLbhX@z4}Z71`6?oLjx2jOKQ!y*+A z*fd{<3Bs%fsTrsmIo+*M+lX5&k9;~@4|&YtD>ak+9Fc^(9u>=horKY7 z^|&+*`7QY&!o*eP@5#QS-sk@jRQR0kueH{quvvGDx*nTk&g9$>3{htCT-3STO5_00 zfidjaJkY!>PZuU`Ok&*ap)6ADq*IO!OwcuAg;zrY3hh_~%}44x*pTW!%*D=~&5+BY zRm+aW7|O!SNoux}a^HNL0q#S#*sNnqWG-?vOp5`hlx4KQKi`?(bJ6mIAQ@Wwt*gz; zSc-Mq9;v(ng)8!6xX@@+U9e+<#B7wF=Q9qR1+ESJ43Lz&Z<=M_0X69S7QT3%kouDg zu<@(QRd=vJIIOKY(`r!bg7l#|8DMy23B;~WWAjvwxldC&t;wH{$K#^?an>Yb-U;`z z23GyjcAO1Ros*OsStJgHolL*?J2(B~wVV0c^7}7zpNPK*GnN)o&(kFz$jlh7ZYLJQ zsue7_ek#Wf5m$DX@mGfruG5l+!MF0oqK1i$%K%I4z{mP{YT-_JA`$~$rh&>DBxyLpq0dSdPqzYj-W06r3a+}6upglaeL(Z@lUZt^~ zp%A?p*E`eFB&dI20-Wd;CIy}^&Jy|B?!r*0<}?m%?NYR>6pjfg7l*t@oP5qKwElU| z^|>C76hLGN7UWc4haXY(knEjg-ePVOI))CBL~9_PSo8c2surftPwziPl_dUmg4LW` z-Wi|&^2^sxR}=d{+0c>Jic=H5cv9S{I~^>y_sE- zd=nF{1xF^I6p5hM&I&z4PvxL>%O}38|2W;Z&DIgDnJ5}njUIeHpN%rhAeXF)r}aul z=WoR!Fz0!Of+ASMkBr8g6$6=%NMG0KuT^iXi;M;gT^emX3=-E5R(*Rt74RPOYk<`M zZCil9H#;|>dov2`AvQ-ZA*lV9nP7P;Q3vxm4e9S$m5;;g`t`eK|K_)E|LZ^h{$Kw3 z)$8Yvr{#9P^;_=+)rlUr2TkDqlh~J7{$xbPgc0BkeM$b zcbc)BUFk{6r7KiP5xJgTDL*GT=|O+`qgy-ynYp8QH)X7Tt!hI`C|kUC5`-m}F&`(2 zA6q&bN8`i%7UdU{d0Wto-lTdq;JP+#*<()V$Ryo`Bl4XaeyxXfAY&-r7IRkJQs0l{EJUV%)3shfAY-Xz!1xRR?T#}#7 z;kJ!Y+B&z^wUof$rKV%%Tar6In~fgV9z2ofti+UjIwpn=zZ?%jFPI!igAr7#)2y6V4t<=OY^tumJ*+ z+-DrH6h*t{wvtal3gd=lqk->(K4r=Y&MF^URUL3)95id+2NzQh*t%DB zbsw=9JJzdiNuPCN)is;Z8%vmtP)M@9C5_&DqDHS!)+^GRF$)xf2{H%gaTWv zVZr{3bvNHk25~DAO!iRAbD~`x0Qk)R@V9>7>+8^vZldz**HbEJ+pgN9-d&A zpmI6XJgY;-4+9hdo>Bbs&7?_`<=JS1pX>MvX+V=CJmxSAh(XMSVaM%^dJFO( z#8qkz(8Zge2v9@=DnT-Ka)a5j1>5TXYmRIuHq=#2!6z%S+#b?-4Q7->$&uy}d4-gK zwL9I5#P=r(v3geYM>DVifI@&v+BhJn`zs!XqrpKlBNe}_?7^vUt~3FbhuWe|Kv-q| z`QK?RLHQ=LoVpD9A}9@E$99-wietM>W8aZ(&iYE8Sv3<4s&FlQu$tPUHVBDhgD0a_ zoMM7%xTcIu?-aAx7?oE!rd-z&;)SwMs}G{5_Bm31IT>0f@jJ8?n8Lc=0QE<@e%hZN zPZ#GZcRv~%LGuW?<}=NU_K#Msl83CqlBT8yvHamV$%`iBCKoMMHx6#PeImg~ zW68b2?MVXifu~5%@Zj?#$@&r7E{>23(ZdBMCFwnm+P!;S=2zSKO|fLdhC7U{YT4%4 z5<}HGy^$TS5b23zx$fPo#~f}n935?PRfK6P6ZS}g$v3ZJaz|YSAu&e$EllyFH-rH6EHJ#lAnSWeF3@MyGOE-REL0fc}~Y9zn!*y zsjPy%!m(J0RQzr;DOfd4QJVc$iKAJ5Z7%+rnz%#jLE6G8kHK41M;|+*ax}!i%#IQ< zZUt=Lzi^AQSGLxC%E8oW}o-I zp2PenNkRn85vn9oBkxiBlqsij_fhS3cHkh;Ie~miJP&p$MR2CQ?AcOP_giNcNqB5Q zk`O>q4%QM-gY!Bp`w5Om@?xwQd|zM*NDn92&IfHn6T|d&*vNr;#eJyn&zZZ?D~Nm6 ze*Poxoo*)2AN?1V`i|>E+^8D?KM^DaXRKsn!9#Nigkz*TzlDvKO;?I8j>vu0+ zL~$mRnZklkBx5o$bcK^9)jT-gPd|c5q7OPxnYgCE@+r$o{~+6qC_0EV>H$T5`%x~( z1NTQOuE%{(SZJ|Si5GFCzg$h+nEf#zMhaxIL051(7ETTL-0ogfRG1$HXdVx~9mO(C zCHD;dC$D@CMdIV<{Em_Fy;ZI`1klaq^77U53~eadd9IzuLb61PRPb^Kd8@Dm{3dmj zXl{0g#U$PPr*=LxSC-=ly5i3fxtLA@N$!RI6M}a_>{5=$g1`x)68ER z63FJYnrTl|Y{q|TQNQG(a>;K?*d-t{daJT5<&s?P5^Nb5L}SbX7-)hio_(%ziiX;< zQ^&5ng5lrH>a5e_ma@eH9?^*0)7;ezf9NWm@JCkTwh|k;Pg(Clzal)HbDJ8~@^0oG zT0R}&AjPC^xrK8#$}7aTnsrKsUt*a}uTlnHz$PWOl?+sGsN~(P2>x^w95koX_heL} zv&d?S>Gai|=o+}2IW_`ExsZ%jmWCjPu1KlaWzBjM*ZVCiiPCI^!V1Ay~W&dSMP#g`ZL)r4Y zYBP1JOP=4Q5s%}8&5?UVcZ9DCl<^NJ6PL_&!Aej*aa$4@g%^rFCriC(JFqBXz1p)* zy0>Yhhs6O^UF8qBBpqzv!Wa!fN|zy*xEuk%ToZwO@E zuoc>y+WaNG{Ea-X8sY4#L4PI!yN+EvB9hDKWUx-!zS*dfzRh271~WXyxD?=oB%xY7 zu@b|zvZqLq(kFqax$is>vc+P(WA)dY$c$4o(~tMgsRdb3FUbyQ7L;Iq3IWZWnIrq@ zom`E#mbg-u98}jU_)F?p1bN z16NJh!lYMw3kN4&NNdB!xe9t4E8^?wKRq_xSLenwlYBmrYfZprm+LDFdpHoR4^UOk zoUd* zCk>#ly+)pp3LGGpnvf-dr!9(1(!BXnFKRVd@div60wQ21C~N( zaGzHbRgR8KFHo{NB!cTeKR-=D@AYM5O|NeQ34Qu}9jqtejdu0<$u-6u&l?5+Dh(L* zr^jdHHZ@{c7(;=}BME~rM=L7DnERaXn(q6Z_?K)IWOk7JJ3slLp)9AIr5NA25rINuAFlQmP zpPNKWYt|~iZBs)UrWl{!9`2xQFa%j?LqHMoZ5eH{CX-U{z*u}azTFOUK~8r7N3A9B zty*7AJeAyLo)}zP=2#@m&bF~|CaTj7gW$>=@Igixmr!TiDEPl}b;(_Xa`|G#A zeisnn*>`VV#BOK6vof1IJ=?Th$1h(*Crv=n1MdiLF5yN=S|xRHYP7qA?rnZ;E7Y zqU5>S^|SMF1S2aQaoj|tS&o4cvOQ><$bQuBc9K}pIaVxI0duNRik!y` zc&<5rY750t3XpPrsWVLNE_!+A znaCLg-Qpk3?luBRp`sqt9VjQS$8WbS+C3RvwM(&nSlgW2oTVZNcC{|>QrMiRz(wIX z62#6G3?C=Yj$acEB{n=M?lo^X(P?}tyrQF(&30f!j&v3FGOfP!CkytbdG=Y#O{JrvYmmsJydTp zQr<6jxbmPv&o)-;1nP^TRNtGI@JDD?Fy_FmB_m@{N3w)4KMUp__=fg|d z=1;cKTB?nt)AxTn*H@Y-1f5g&x;Fw81v}!L*yRB${n}Pc)4^Z{`*4?`^CE6^o-N!J zcp9GF7qF$aSo9QVdK>6&wMY_5 zbtvIleT>zDPGSbZl%^+|avhizr_XN6s*oFC51M_eH?ynkmY|~fD0bh$( zhYEy`r0@a$jjF_}P*lY%?&>g`EYngBTG%kA4>~S{btRCY{;LYNWr1py=MkTTj}=$x zP-99uB9Y6;B@r+SHkGTe3_ilj9P5=_56e9XllJ$$oj}y)$ET!$ zx>UG{foafWZg1O$Z&b^!Mqp^1lVHyq?7O)}vi6qBdYo9*>%qlusyP>L|Ij`_fGSpx zazskNUcY)d1q6?${}kKDtV{|wK4l)4qa>P(OK85L9a(Y9P*<{(_RQ;@TCUs!S7%Z! zx=L=xY6Gd7AX7!6!Z>W1^W9(X&N?^SpH^m`vq4TLz8OvX7xR*}?Jl25BoGy#^?U8fbT+fx4m|6wB}$2&$EmR#<_= zMxvg0#v;;Onm+4ec!pm##Siu^0meM(qfc^A=cEXp*j=ay!I<#c?Cw@;9!Ta^+1R|2 z_{RBom=hRDDGkoghDkT#L`_T`5DW99&i8p<%Vg;l<$o&w={LEG8ERm2a*>}e<98?F zpbv4AuDJzeETcqahGq@fmY{X)HM_x95)V>bE9_qkAc>9_V{M;Bk|Sm}kpY?Z{CxU6 zcKk~zSovv-2dWp-2t4l(7MirOoWtd409^%j178xHt~oNLbyCnnaI1opNWZtnjl3j4 zhFAcjA`)Y(=BDq09iWqJBvonfPE?$%F$Y{3np?VQj1}B@g*6P59m0ZE_J~u7;=#PQ z9A9Bduo?C+9?H`88**Z;nb(#uLU0zd-zJTtPdux1=tB|iK@W4{`6n4#))k+AV39f* zd!xO{99K8$^wrB33GK-8>9d{|(+^98RBR<3$9|GsQv_PZ{zk9HIr)C|h~-vfgr z%@8nMI812Cu^9);&vn1BSD<_@P{cCC?;ECoy2tJakQkCGh-3V&;k0 zBU}FBY0#fJjgaE5zJB{~b^GH*NTqjqXS|2EuU@9?E2__-%Vbo?Yp<`7bdbu&U;w^F zS8~beyv?|=(sot%>l;xskYyh%m^px5GJ{{CBK7letui2hU2KI6Q&!5b1@u{)l7wS9 z)+yoW6Cx^d>m!2{4>i9mo8Q* zg(g;3Y)X!=kR&-e5^PGOF~#_l)u$-&HfMfzut3nYu~OQyDq&8kCp&Fh_? z{Y;0BwSm8=q@b!(4&5+!#w2DfOnfs>aE^EidA{t}Ruiff@i>Z^qtje1FH{UrO0wjY z=C?C4);@QIT`I?|T!5lKxjQYGn%`o@$iD7kJ#Ei7>oczZOq^IC#k;f3)^rQQ<9X$- z&I1nBmjiv0So+$`V%8AxQME7`b5!p50~s=OIql(#p55m;5ucj0+m?C_`g1aO{FZ`G zKHH4;4W4G!W~O*NjSS65Syu>e{yuvUo)4YH^@<@f!!+d}GLrXY5{Lko zoKT*y-pN5FBMaTbIs^|`=2W!vM9zk%ZEvQJX$tMB7oH*7f~|o@)doZgTlJwj@u2{^JC?J@zpyR2at&FE{FcIFp6QF5Q zTel~us96E=bAVY;t#U2!2LxnxNT7m&41k0av!ng!rkq_V!xcxkgE$W@>mK52;N4cv zhwe8BXw00w#+2zC5b!UK^GP1Oej5!JNaImOaBK6;+c<4DO191&G>lB5TVS@_Rwkf| zW2hX`iW484u?vX8&$ZKsP%;aX@+9z6#RqFQ4Gn!-AuAy{D-0K(&= z%SuUj#vdOFRKzE#-5AV3DU-@#4cGX1^L`eObVf@qViog>1k2a@Jow%-Q1ek49ip7G zh4Fc|C%cq&@Bh%92GsHA9=x+-ie7;X6+#(d%?}?gLxiOAsexJnIN1nJ-2*IR#>9o> z^Wh?8Qt_hMFHTng)FXz5?lJ63lm_hTJ8| z{l0HJz*^u#5JgfpXyzbW#8;r5q%;px{S)UQ{Dh)@C;F&pUDUWXMTxWWU5fTJ!|y0L*27McJpC&w1Z!67TOK z1Q4m*6v|@$ixU9Ou)wxbCXbRKw=~<WO=8bpL*+NfV z@<&2cbnSsI0C^F+E)D|Fl0_p~k7PqRSP*N=MvcjQ)Sm_6M$RPP?hQz=IhrIDMTy>A z)X?!k0is8hHi(O}u=(-OE^=-~K+4)^-<(Cz*b2gTA=r`Z%3)ElAYAQEHD#!yab7%p zbwDttd|V3apmMW9+AaS=4qH_T@J+~?>94ZJ5-3w|=8Qa}8ri>$v zWD;luvI-F)*Pg|fB)=_c)%Q+Zuoum>rF2%go|@l~-I6U%*@UdnNKVxM&Z(Fcwqe&} zwc;;`BvBrAQ(#ah7o9?kuq5(3+9-O{X5@pQ<+#1^B(%;&D%OA;m+NQ$@jdVVtHRMcm5<6b0^ z9KDsZjOtXz<$0=n5+R4vl%FSg07gK$zeDrt@>oo$_0;dB(kFvNAP}~};Fv6%^>i(O zKWMxCn`K+osb<+~;$s#WH@%3hUp)%59Pny#`B;Z|c9}VuED&l0dy^J{YaJY;CzqTm zm&c`TP^cNCBb)_N`b=CcFs&#ZQe-1w^^!*QvvX?N)6CT|BTiEP{>2BBd2@Q!729qP z!u}K2lS6V2`8r$`O5DC;^{v1xbv$WV>k0x0O{mgQca$c2GDWj~u5RwXetY=-^7f}u zC_g4PeDUo0cW+<5oLMmQA)nF}f%=KYcJV5*N6?wttVioBn+Q6v6wIxPJifb!`g!?n zVLI@s3+}UmFuC} z&bH{VW%^^RmY>yqxkq#FRLA5O3lF!U-KZxfeMvjnATnC$9VGeAbo*kkOi|{qmTIh1 z)(CJUfaKNXMREerbB$5Z6kS~&+)E2YPt^>58ADS6xAxi`UVeoSaVmbQcQfPfBu_VL zr*IU(zI6l{vC$qne==Z^SQ;Bb)+96T;_3>D%BW?nqZMbX%?(PV#{OyDjQe<||qM+h5 zceb28Lq9+25HnETW1iG#IG>(OgED{3vaKrU3>bK^1$1{H9(*EtlzBbBDe1UU+q6y5 z-iMa$WVoXwc=Lhk9L+JZmLW}JG{)Xz*31J(X|YNX2auZ@3I(Q|F^K^dx#V5Ugr@Rp z1@oyve?&%3sWe+VGS5Gg4MH{u=pF+uHQpv>^2j2h^F2|_e)%F;-#a5ogh&yCLjH0R zJN^b>)u}W$?7KKcYEkiLb#j0SE#90(l*BC$--!6gt3O_p3h@gv6$nrz0n_h z|M4OOpmtW-7B~#So=;EO&b0-en|ZN?#sT;9Vk~tYvz0J4ZBs*KUtF!QX%jcFvuG%0MNq9lsQrh( z`Ag2av&7O|*<$H&R%x*)`A->PW+Y!DwS*QXsV@058Zq7OnKo&E#T{7vcnbb0GeilW zw^B;lT~adI3jt7JC-InNq*pLgv`E$uhZzlYShp zXe#6{M-Rb8S>zH0yVi!V2gnVGt?6%oX~FYacoJIMl|Q>MU; z21Vz$(9SD1T=mTMYQZX{39{|0%@7_3uBjP9LD4I* zzk{k^0vStLXw+!+L|p!z$|vP81vqi;6?`T7jP;p@gF|3=`uyda=P$yWdHLk&vp9ughupRv#{+IdZL< z%6($@QLgYtyYYx ze!nXee%k3|aY01{Z8kiq5|Tj8FKf%Ss>@s^`uv8A+I&_3=$<6N7C#*T7J87!++ zv)EvEfjFu#Rb9EgGM{I@Dx&ARt!sj1^Y6-t6g!AbUNr)vBD`m2<~$1(87p+Wop06G zt=t_gwXHI({B2A|f5mQ4TOhrhC-%-&WxdFEpdXo7#b{#w`=q$K4JYopxVpKxzWwm& z%ZJOaA1+5KJ#P$g`gyE#IGO=o+ag`QDi$Hr*;T|iRQ&rki|fv2zN=PgEhoEv-}Iey z(~<*RyQ*<8Bw03MYr^MbN5xU&fz2ZIy*IH=6f-(Rv&{7*%=5jPHG5EE-QN0DXVJA2 z3hMKa^)Wg(+#rhY{Qq7%#X%2bR2iIu`IO%iPE z*m1~EN*DPR=6s&y0+mB9393ou>G;;Y(ng%&dB3-58lI3Z=m}4b(n-%GD=|2Y2W7e6UM-reLeR z@{O%>9dWf|Mm*qD79bcXe=U3m$LOifiTUhc1f^uE$HLI$i5ZI7OeYU9=y{nh zlMjDT;%C0niq5b+8EjzUhdeJpe~PcSlHM+GC>7nS7gA$OvUxQJeowdx*v+Hh1Ttkg zxQbAP7&^Y9U#WJtkFPeh#2_?{%Ck(AnPE3yvmxPbWF|NP3ENpCcS{n>s^3@=_qVF` z+ud@|L*2wRz5XU_Hhe4zGm1~@Ou_!jQe z#H(=D%xMfAE_=RJ>uNBZlD93vWJ}T!7~iMO%5~kbO}0(@0n(AXix>#ml)iQvJ6mhz3|+eN$Y%7)y>uA5>FctXF88=`b1|s z6w_Loq%|l660#LH)GF%P1}?!dl3i{jIPcXtF6WbN)j8Tbre@Q%)N15~p2Iv5TqpyC zs;sK6?cfBMoR3;F++#Y&wGugsvzjT|_v<4;1j=InR_1ljp@yy?n&hk2Ejn)4nO=S?`tKW~CKy2lrTpW5CG^e@)VIlgESDfm7z-tFJj+%2|UzK+*Ht4J#8zDmxvWK|k5p%MR5tF!oyV`A|2Esn5Ky zNGP6iapbFIpH_C7BR%CeL6+p)I;9YS;QH-SH!QNMBz`3sf_(0BTG?)_Jmz)Lr+Z*0 z$gz!#fTvZjOA99N0e2Ai=yZSpEiTNy*{tu~%YY}#sxJvuPE=mWm$+;1UcY=ZGSJgX zIHQ%Lz+x?l3~8v&pFVxM8V1ntrL9ImEw-dX<>9{T!`@e?;;;HKR7Q_uYQ&>&tJg@=nFZwxfeAeuv@AV$zWu@23HBx z(h8Vz?1#EPZ0)JBDCghn26;xiwofu#Pzn$e&ukqyng-m-P`Y?T=F)ZMa2o=3UCSwCMpOSe_ydi%g@5VEgqDnmJMHNGuPPqds8u$Mti@&%Ikj&3WtH>Q3Hf%qN;spm7>(ZYD|o2UK;(-Kd)ekbXIegI_lOY7%+Z#4j)vW=yG+fQ zQX*(fjOcY=f4nhR>Xr{^fQxt7@ljOS_xX!K|z=s%Td zlUrbJNI6RBxzjWN@@035=ry0F>(K&`xs^RgDqNma*}gpl3DVy~)z8b+dzVQ+YyX5w zYcAnSufbLoo1fkHbG!9nO&fWU`ANZr{6?0MaCQlq0~s6Q`rdC(M}4=62=(*3*yzCA zxtR9P;(a2lW!st$i`S-Q;gh)!;i$cR{ru(gCt0A?k~{7Eufqpu#LO<_BqKRUfuenV z=o-=Fj-j2)RM#V#*Qd4lag-@jv6@>QMn=X5r5D;fndFDO&$&U$rD9z3@fe)eVI5+E zwA0GpaDT>qq)#76u8@A7XR*u&TP>&xb#uCuRW@ykAfNNeEQEI9s9)p6--9*BmL{wV z52)MO{Ff(UHtr^&5arLi@N;>oE>+Y=-f(ZJk{kW$B=-n$_G< z3C!&X)L+G@kna1V{V~T9I{FsB9Z7oW*mbAId9RKUBW;9CeU}6=xEa~%n!lwfGr#+~ z2kFguKgaxf$g!jM$CYZWl&eO02PRH_KCeiF=XPYVYwA>LfF8Rz{<8*oyrKdE(yJHh zNIQpMxZ$cTMJ%gMZa-Vsh?JF-I)!g_w9bgrwY@-SNjXB?62elkL^)ECCzK6JXOns) zykhUreruqg>P#Oe62H;scBaY1*lqX0vETB@MZS~-OPj&^s7D3N~)&rls1ZZmd1)n?(JKYh-b=YV-d7r!}zUbL+@!M;fq ze=d{E$6+7&u!p|2N*7d=pO(vQ@d)CYmfgsAdEH+zC|48ut&F!#vY8IAv#X*z-J^1A zq;z)YSugI|miec-*SM@D<0h_JjhuZcBAmtUszg%uS8#mVY)%!JGnp5&rXV}y$$QxO z$yot1s5_Egn#4dGsyKp~CQ&W(r%T3+fWXb&u@AM6owkqGf(}ij z?KfsgdoseU@6CfS(eNhjJjuy`_HrC_ z?-{P4K8YH%Hr6I(;IIU0Iotd(N2@UDtcW{dSoS5nnM<6ey zHnE2luzYBG^PKZ!s!2MJ8?c|pRtWJ{dlT->+=t9_lz;aWe7$!sDcFKQHySdUsnGG^ zzis#io9O>AY53~p1n~yBh4~_^`@{eGfBL%uJ#HN1MMG!awA7>plWZpuU;SbiJw)%M zv10W^vu^X;EIyV}A$h|5D|b>zwR`Ftk;e(-b(xN!;~Ar1HS;goZ^Dg}EP%NVRyiC%GRK@zs_BU{nl1T~3hz`Ks->J8Cftna%xT3HPcrth8d16oh{ji~ z#4mLvgzKj*nv;1@FU`a=u!2mTn2fd>(Z=NC+RB7Onv4%Ie?G3*Y8DCIkltC@0Oj0h zkhzL?uhUlcRREwk>Qoz7ODVkYT>8bwPx&1pP`({@gOQlC%5=%~x<;_*rcu9F6!Uke z`gh4Q%4L8#FA}h@i7Q;v%(`LNs9rjBJ_0QjK3uBva z>{BLYZ?`lFOs_zB^RhLIQs>644p7R) z4LdoBUn($~28C44Geh3KeV3n?FJC8aeex`VpU+;se*5C(o5xR|kEzL-vp3VY=jQVB z=PXR?h@#Wp(QNwlDWh$`5O{Xtz(+Gl)n46=%Eb6v_aGmMNBacmw)WkehX&jDn>HCD z)p=sdi7TJXNo7O1EAb&?nBi`3(X;S<5>*Fjc|OFS;R-22$)+m|V0_!%`B`W7!U;DxiOW}eS^U$4)0ncxON;x&u09s??o3(OVrbuDqj8amml`_%F$1%5> z;@Q+kLN$PN?ixFpvz46)7V}g?c3MkU#5R_6Hq!EChi*1t>(o!D?l&p<#e!I)0cmnucFx^m9* z*xC!Ek5Z9M-WTSGoRW&gyuoedVV_NLA_ouRIR)g^YiPsDj#xgK3KS*D`H+hGy~Fp+ zG2DTi|6#^ypwi(=RM$WDIA5NBX8woW_AU!A4o~fHruC*fJ9lMfk$aTa<~rjBF&$LT zcKxY5NAfr8B+^3%jzvK^5zXz~2$_P$PSU6KH8~sSc|v8QjV$m!DI71=P6f5L@WJYO^?O>JZdEYi+oh;QmKY??RtYlIJC>l3H-4abk4 zF5`eIK8oQwtDxZ>b?0_gWf&95X98q6&TEGrceynuc5JoLG|7sWV;<(jTUI%nIM^`5 zl2>XdV4!5$^q1i0j7`pb$dG*c^f}{$j8OEs8(d3Va$CoI9nQjI%$5lALXqHTiB!c! zx|48SN?D+#HOqJjX~{Ao%(|O-oge$SVma~?nM1L78qll)&-JCMLU8)*j8d^;%c^4C zJ0|}`V9!A(_b`_a?W*9wrU_VY2O>s*oNii<7As5!qL6HE<$Q!19S(c$7q2j#@-hcP zH;wL2-rH?`>rO5_%fGTO#V}5<`a=tg#@G%6s5Rw-FJvh4x>&$`h>=z8aoQ=$2#CHc z*j$7nh4NXJ=g?-Xk*4nYO& z$3m9qYC@{7NSa&YDhfdr1n&qWbf1-y7iG9wSUM+NEzGfRvF%^G17`0itL{dUc=hZP zA<o#j=xwnA^T?L+IK)L9Z7|V(C_uKcg%%+x( zj-(b%0|bN|!A2rd1izgU#6vdy9_TM{U~B95OBdJ5ghs6`r`I zGA>I)Y90+VZphNt9_DUK$sY?kJX_HeG9mtRSc3wfo76*_>FfSTJ$a_}P ztr=DRM?yicbE+jfC;|B1>3UWqDDUStZcSf`{*3!J_YqO0JCstkAZz`uo!4`pVQ5RW z{2u5t$8N*GZ~5{w=+czCjs?K|Vab%Umq$M-&+G>Sg^Zn_FM<2$zAW#dxK_Oz*G^5M zcjiypAaYv3VWw84jzC89MJn^;A>ywhNpTe#1a0-NifOc&>oLa*!VmI(p`tj;C2f5b zxfbG23&x1An}@eE;!tNym4BJM5+S=DFnfW54(2`-S@|s#1ek@ zE<}qLaq%%d)jp30PJFgKAIE~-&3zF^wF$;q=4z!sBs41@c{)}BjHYCaFA8xksMnaH z#695aL{=Zsf{+()2_^Pi8+57r8xs&ZbQwT7bqO1=G;<~gwP-=&{D+P6b0HZT#D4p6juRV^%?0K4 z8~OK9D;XF}C5VNPH*o1xV`b7o^=yVvHQincAH=B|3U2-*va6~t6W4^!K*-dElY4d5 zQf>6Gj@rrqFOBf^kT>vMNa&06A}?{)%pPc5H71w+)`UQngDklhZQ|%FRtG^C@YB|r z({HB|!c=Err=v^&pckpTc>XMYcs{W28GxHn!wLeHcs^7h9d;}v0XH3)42)ixZW(n? ze06;=w?b3JR)*Kbc6(D=h0;mZge$OwD){I=lBm%a{Zd6p@hUC=8D>H09U+OPhBjV< zS=35bYAlai;;u0h%{jO#9_;EoGLPk2)hgw;mzUy`s$Fo*0FI4*jU}kn!ohE`)8);Q zhh6iJav!v=qXbdE>e%{@>o|y5XpV=HaTTCUb6l1d$5J$WqtN z+T^&2-&}R(PYRM=C*leE^X&QLT!-`WXrlF=cY6sx&}0;s@#~!O*vmEV$ARA14dTrC z(wN;8K!vH(LW;wd{mzdzVQNclCp{VHjFvA=bmylX$|xv34r5}p)>7B_?rr`*k6<7} zoXLNAl48fV`O~{M-@SdEpYOl(`^~Sudz&XOr}}6xqtsgIS&-H7tM6Xt55Y;>fO+mt zYpOSwdcL)*tp78M@LcBKltH{FbQbPF)qmz)dS_7nvPQ;M=!j=-`(2FK+MnpM zR%XghE6b|?V4ed4@>j|8`GS_kCm;dS_$v^4QFdjwoIFcH`^kHx49rqlaoibU;>wUC zpH;cw2E?7SMaV~$&#q=v&dYW|7JxHoPVZ28G4~)9PZ_k#$T-SlwR+i;Q*DV^Nvd~? z1lrFj?;nBHyauO!I00=Z_W4x}Eg;ISaUqMhct9Cd zRpmwt-9Va)%79$WQk?OBuipLYzxf~k$A9^+{zW=^h3@nsUBu525aWc6Bw6O}ldLe4 z4Hdh4Xp^#PESYv0irqL3` zBxd$js!++ZVHg#J1Q6tb2_?sz|EEK2_sM7Ru5%x!TzX`}CNmMTTS};Yl?C|j^(?;d z-Wobe7~l&Ft`IY&KyvwbI$3D^Gx-=2h9D|#iJ2@@t%mWfG6TDHpCP@F zDTSbpT8KFq&?k6tFuTHYL-a#%!0~L1uP2HT9Nq07xTPr2M zGdG7_wf9h){t_irKAFoJ1qa85Gr#!my z@?EV1y5eA9=WP|WZF7!_B5F0ka?{_pAHP?QgEkJboD&$FqI{fK$&613qxl}WM{E=U zkcosA$IkEvs-47H8Y zH0tZweLJ3$;fIXHdOVx0@Z3J%E$_sBT{j;w^A5CxD1Fv*4uzo|1LsLU)v=e-mtpNC zt8NIW8#E|m+?>i>mI{e{L})6PpBtd*1^ikAgehUW(U@LDcNachzBq%ZMIBZG0@z$O zk9~+6l+=}7+~*exmBDOH*)cO?Wx_dixRX?91cDSX|B` zZ{nXX^*8L!yvDgo4d4W>ceAHRh+@=Y^$zq#0rN0Oig2D(_clad@hHVqfNPD-zs z=`xV&_nn4x1ru|x! zy}#5OjGNqdJighGq^QsOoY&Mw?Yk~2-fqzuS_(7qdP+rknvf>GvFCRsAxIm~8*o(0 zI8)+~$LiW{!3uHCx|#~L&z15RQ>Y)-{Cr(6&`O`*oww%X>H%jh@ZQB}hgC|`Rq6HC zPR9iT&3=Jb zH3J}r@#s8nmgQUemM4J#jo2yk3P?+>-{gnJp=xfbjGNB4DnY=ErU!gUD4C#ax_d;f zU#LLe4zI_~;mCSqx-@AV87Ikf(FnvxzOk=sqnE-oDBc_$z%k&(`T4+b@ww`qYw>g2 zs{BAHpECYU@Mkpi0b$^@R^fN9-bT`=F2`OWrY)OTi@gK?R56iVgm4;bNatv4eN`(R zNAbn;mj$WMW1chMNxMnfT&4 z(h-HvZ(hIt{`+@*!|S}`U4H@qr9b1#m(K_PnJp!c;5Ea)cosP6dBW6J ziBEHbq}DUUL{{uHnQN@7EdkTet|=@WezFx^)!Tef<@QkMuZKq=o2uLH-0$NQ!ZcBO zo5vKzly330f*>(6*Yk68aWM(wfNWt0Bt*QNPu#+Qm=wD#3*II{gd-3n+s=(SYCvcX z*NHhScu}W0G)4$MD-mE}%xmNV#^qEV}NU5*;dDx4Lpafn!tovD;|6LQv9}tHV7* z(S77GjX2k9kCQq#u_>5XV);ro0e`{kgdr-)JcjDo%eQ~_=YRG*voj&<@vZ^hEZ0Pe zu{sI6GT9Q)N{+EVIGgz;V|-FfiZ_)Zebg{4zhgiW4?lnUtd+kb0n@KO-BcKBJckHi z@6bJ@j<$Twd67$9W5G#?z50daatGCIe<+FAwmjFneRF_psepFDUf!9Rnh6{svjCNu zQ!X*{>P zd%?r41Ec-hn{)D6t)DOFkr}5zc=93{FIHVN&zbO5)t+gUr&mS)Q>v4DlslX6 z%SY;%Mjm)Z6+kwEHu+E~cp1g~)JMv}S=3F-OFj@NQ-y*#w+v(N_^Am$FmAo6RxwD5 zOYf5yn}(+?J)Er}pT&v+AqIkvm!_)s^kh~y#*+<^=}>b=gR z^xduYDYKSEf(~NLb>?!C9B)i6h7SDa_y@1|+m%>4;pKjCUqw$4kmU|-{Gd(%XAZo9 z^l_&f5)NAlF{h0Q#LF5ywabk?)l9QMW)dVzledChIv%IS;KiNp=X8voy;!DymtX!Y=6B&p|h%%y9+im)@*;n!l&6Q zoAamYKZbG``0?|G(Au3}1(w8eA3|=cL%*sG$y={leqABjkw7S#B%iRMN6_6okEP;j zw#%-~w_sqc3iz_0PP0deLl{24@kpSENgmrgm)mlPO8@vrVC zrz#KkmjLPlvv5!3&sSR2r}A65|5E99u3}4_l9z}Yfj$g2DnJ_vODkX_2uV}KmYvk z{ZF4hzR!ySLN^iHJUiHurb-m`Y6Na`;dz?qFONseU>y3`y!fWUbb`?YvibF|zWdFu zzW?p7zYAL@KY8+-@4ox)?VG?r0cgUcNbm4~HF@)QYI7|Gro zfI`_`|D`$!jDlg&Qte%2WaZ4)<_$qM)fH)53uZogwrZDMk>}8GcvcZfQDVt$q1cV{ zbj;~#7rqR3Mmh*+3|8iYu<)kB_Z$lAMOs7Sl{r&kN@scI(A#&fLR8G2ol!@d@4A+; zc_^PH+o<)!O)aTa1B%T95U+n9@5EPe6s&rw7y{~&Ck$^+M&!@VS^Lu+DI!y)r_KCm zONj5kfAcJ2Rgd$hiF__UeZIN=5`Q#-@U!O=+2v@u4($zVrankz;^WE&Ii+^NKI@UE z33s*3pK+211W?RXsE-^G$Ss54d+u`CC=O8Vg^!xatwJ|vGWl}pnP$2Xx5~p6&1kzd z(DQC{LyQ_}yh0fHsi@X%J4UtXUT~k`i98XwpX9`{@MqmWLRQLgDhrgF{4i-;H%x1Z{t2J8bXENvg`fTLQD! zv~8Ipk?u#9D)pJ}ybVXaAs3i)NT?$C#3Nvq2}5oDI*S2P!^!bk`f@`8z0G#nTATKw z+Q=+-FsAuZxXj@p^Bksin`7SF(1jK6PJ?ca%P&o5r(&PaQ=yFP$tnBM3IAo^L{enylxrtD|8vpfN1DvcII^JVa_MKA)m-> zv_~~p^oRhgplnPGCC5IxBX5??3fR5hZEM>VGqCbIJ&_Ok&W_Gn-Sk}U#8;StqGi#_ zPOS0h{iSf?9O`eox5RqT*w~Mp8nFdFgWZ;6Bc@^-i5DrkfQFO_m9xcDTU~e%QAU=V z_>RyW1BRJAe+8X2x3_p0i z??Q;gPaMwjo?BuNR{AY(-!;*UO|HU|*=DwR&Zbo7ju0=#6OtWjb~R*Y7t3$xoV-F4 z7`HPFEDh-q zAyhoj8Sv2ET`fh__z)kpmpdY%A9r0wSI?}|{>gq#zBm5_C~VOSN*mm3kF;gfZ``6f zg%aRl0AvVqlWf3nB@O&LS!ZZ0U4`y=Uv)0?A0_5-sOWLd4%rPU|CWF{-YM^$X+B;f3Cw$k{MlI@~BP|qPv?W zKVt(BD~2w5CyZGmQv!K+)5pD=>NFNXiBZU*+&os;P|I%dAi4hbd07j$yyAr_Q8WV7 zI9YMi9Caf6#%AD^!9Ye``7yi!CqGx*Qu(RxxwyERG{rA?xk{bEXU;S4CxJvTOQ6mZ zSt%3?vzsFHXI^3pPJ6wUp0~MhprJ%fQl^>cp}W0*|MQQ3{NaZm{&4Z>{mqxl`*f~I z6q|N&KmU;5nJtD|jn9UuHz3Fb#^(#>7?>uq(c$lefD?XCgvi?me->=r(4aZ5L)H21 zZ+`Www{L%4+$YqYRAc3L;GKLts84X8@n1)l`pJtycIHWfw7iH-dfLZ{L};^w2$M8B zjx||KS)qgLBblxCv$uTiZ5r)@d~un(G5Iig02Q8F31`Jk^TdpG3j{EVSZr-P=~VpVbK^ z9ou`ZTan7mgjMGQV4YPIfBc^=`DO*D2BGfW*mJ$PEAK+XZc4y{-ePj94vpH^hbqQY z|EOr}*-1ooE4_5COMv8rR$Lj*dO>GgI{R{R3P~#D8;8I!3No5QS7)$dz|6?T?`yS< zO3K`?oYL&DAdInKqKKK{!wzW;c<_iEvu1agTTlQ;)2D#V$@p7mbg6JEp)K4YxJi39 z0T!9Kc@d{z(4Pk*c>uW!z%j%dVTA1)b73#r%;dFL=TfK3#ntDF%XZe^%3izZ?ix1C zYqGwynew|6Qp$P*tp<~?KLEp$NC`dylFodLTYJnqL{c zhvGw>J4to6UpRW~w|16!7R===7G}ItSQku<(*ju)Q^It)%z2N6HPA~#k^F!D9SS(= z)_6xHGGtX|x6jX~RQ*-JxLqBZ>+XJs{vZ70{P7$xvJ6>kU3w&XHGCYB)M3{S??y9u zep$DPgJkxZpwZOdn)xC!iz!Z8qG zlF}KW+}iwO`aM-@IE#%c)7ug39J_L&zx|GLde(#a?Fu6ElJyV)l_3 zN6ir7#U^4*dJl~jK&3n+uu1AggV%gT#=3FCd{Q%Vty;i9$XWB@nW7K5AyWA(%p2qx zuH^lvJLJ*tN}G(V2knrlfN7$i0f2Gj=1!1-V5_qs5KVGr^YIP9neKVk>$+^N`V5 z65YOf-YnFzi)ot5L+Dj|B~g(DN@`@)xr8B)a}urZ{xf$!kjKn6g>@TDtqf~ z3;9Xq5`yr$eVn7wa9HkYmB=yS>wKhL=YOtc>`x!edtOnXGOsj0O|(8 m2J=T3?v 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%0D?NOd86#QieGtV7AH+p2k_ZI44#8OQVZpFamMp2w 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 z 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

eLj=kUWdFnnh{hK> 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

ysI9Z& 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

SOHgbAs<;OwxVuz(!Hta7$tu#S)b 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�B5lG& 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

nDEJJmyXj|602lr1O-oKqb`#=A` zKlz6r{&YQ;BP(m5nHPC4c_D|ze)AT(D)wuqfc}KQ8`ph*KgP+8_~h~6%Za~HZ{i~6 zNM1Q1SB`{Ev1ma>#-hh)o~i ziaHc7Q6-v%M)dmK`fBp2uqbDz)ygW~_vnO5S?Cez~ zn!W8JWL?PUoBVjJtev>erOc8WS!5f}?9K`pGk%E|@*&Q5Ai4MN^5s`4fB)kA{AHL) zjTF6j6_hA{zYa>2_oZeX^`cOTa(XnJ(3E=eEFc!J&W^iEUn&+VmTT;-3|K}b9h_cB zbhHYq%|Un^(%9=3>JCszSgz=0%&wihSuWD}JdQzvGV)=I2Tj?#wsWw5J%Hz@$@xC8a-KoV|Mb;{5sftEW$2q)K4-ZzRJr6mMR? zNhgFTQ(8R9XA}<2v?&g6?>Z5uK0GLR=;&bY^!PBepu4w@!|}d#a+IiSj^s~qhz|Es z1h7z~oBPLyd-?n3!S2D{^*m#FGy@C;C(7d!%O_$^M+Y}DE%$QsWvW$wC#N!_M6TKW1Qp>OHTsC+xOlK7#BYm+zgNI)d0>ty};bIeu+z}qNwqv zt_Zk%s@$ZcdK1WNlD8;Z{+Yj%I~jN=qxRUoo?9&9MJ`BL%!)th3^<+P}% z=SWT{cu4AH%ce9|ER5g$!EOM@7+jS;$!O=H{_yrgZYw0R)D2vzsn>pfx+~uZ^dr5f zY0+C*0i;o_rny%*+D@0DsqCAgXsuGhd{EtyO}sjx2HT>rC(&=oM{VM!qo}c}QzRBe zxu2RFyl@M7%vX`$NiGGtvjFMaEI;X}2#u4Zf9D2qTZ z#Y+(8+3G{)OzvO6W@t)s(Q^)qawJ*z`-=NEHy?x~AgzMuxzn3P-3um9Mem$^ZdI09`<$zXj&? zT-)o~bVg+{k zEy`ijbGK;YC~v*0-F7?LZE5s7)h04|q%zHmd4L8F;9UDWZGc2)iRhnehVNy^2|T;} zQ@>S9b_Z9De%|!D*Mab!BJiv%txYkQD#w}RJLSu#L-S^5<~d%XK-NvR{EM9>&6D!1 zP-(98p?>y~!;=P&0zN$-D&aTBi;YOiV9qoY9#GJdGuS0otD|{^m>fbKoQ$lcHPM?U zl39lpP7Pz#vjV!8*)tCc+~Cfe~9u%?HwQG7SKg&mVgXDKFDomqIPuHIbIVq#46dK89OCP99& zAEYAI;;?`+s9{~}T0gOi(YGjlbPccEQwLcaSb?nTw|U{N&*3Q!t{QLwiVGOZcD5AK z^Mh-c7R0*7isr`2C?E~ViJ)&k944sbsJNsz^ld>9GjRs@Cw~N5abo$sZJ?CW2UGQ0 zCt&-C;MP{7>8uKyldM;c8=8GiLwlsbl>a0pW$t!~josyfsHf)5q{L|}o%~ydvaaCX zNE>ut2pY)4J{tNva-CdA?vc$~KL{Y8zs|IS2@nxB>EP>R)5v6p;EfV&mMyMtI?7&U z0nNamZp{mX`7qRQ4QRbHvIODqJIt<858Zf;1C~Pxs5)UD>*@ArxOmNw_LYbh{6g1` zpJPRi$)mS6gWNPTO5htnA3G2Nnh>?yvREUAL)^vvlGT0?{{8jUJ`S1PKW+@n}4KXylW@+OrSXDjgW~Ll^}k(zuBI z4qz|H%V(e5e{kVI(!%`L0MK4M?NogV z5OlN3aqfoXk$)baB=EL-db5tyDLWP2V(Vv3VB&igkq?27hHhf3aS3L$2s{tPbbKJ1 zeF`?R_nw`2(d+D=@qphYmF7bN9wqpgjWBG0VigrsRDaH1y?t@^I)c<U2J(@b`_!#iY(0jvbPIj5Kt~ znWs0Zs9a>t(+O{b5xxD8{>Yg*|9zK`TQl4x;3}adq*-;$R>fA!^g24&KiInwh$xw5 zCz*Bod#5KyCr2R}9o;y=@bKT(wpcPUrMl+U01L{3YfvP?ylvzZ(~ zpLA)-1JR4DPUlxtZ+2>D>+McO<;Y+wkX(mbg)N`tuXHkjY7C-_j_qaA!Il(DLyEL#+hI9=UrLc#?$tOdPcTh-X1Sfqn~OVFf)%pFwgej`2t z42sRx27kv{d-t)G$R*EP6?pS$?$Da%PDkolm)XM9=3^^%JXLXJuVy&WM(MNQie^pG z@Jx^reA%=m({`g&k*>kaNb3qpEwd=6wpQBSF^OSiaTNUu|4WUt<{8ysD?ZqIMwheR z$_92oC$)w46mqH~1o-H5;ElHsJ1Z;802+vt^f+4nZ<#O2!}BC121=Ql=6pfNqjI3Kz^^1Anv)vSJ*IW&^p6P&ysp1K;B`D!7Th2vcQ>3Wj) z%}BE1@{|!3j*ghShB{5fp=E=&_wZ^M57bTWD|3f`W0nVBZxfSy^%VX8hd{vOi_1$aPg%Ct8zNyul^_`|F z-H7otKJz1^gr?dfTh{Mk91!771kgI{(jJ`aRii*B}? z*)fSppRUs(+mi3~0*GU8qKLb_Xc(xMvijZ5;xu+$_Nwg9d=!>%W>EGa&$WTB84m4j zWhlFV8WHR|2(#W>HuE_)XSl;DKU#P9y>CApTCkGP6mjIO`GHkG3=B|6ShsrHOtmC= z4{Nk1ae9HW{94hlRg2*@th9}ZLllkg-C>iY2+gQr&sW)}xGySIZMRfjzHY6_@aI$b zpA`^dqSRmEYE50!!l670d(MyOxbA`4GRtktAhfNp-FnFCZW7#vThDeg`TBNI#>%=? z4wCX2ImUaDVWtCrDY1iwXNSw$((8s* z!9oeTI4qO@+T#nA;Ez!OsmI;Q~QvFs}6?9ZBRRG4Hw; z?QA2%PotBlfR%P;H5w0?%~jlE+{?%1nWX>l*5KLoMUka`;VF>6(h1JDXpfCqs9eUD zpk*%N&!iYM)cZ~5hBB2VhyC?ES+M$u)*7*Xd5e9TYnsbuk#m3%)z1F;);xAo2CJ5D zP91KShYoRPFg|E1jo8#E`mSLZH@0ovSbzHcNN567%~&$@X8`kp3F>o6V-ivEaqic< z0!kdw+XKojm;4A>SMl-aWuwMC&=RX<95)CL}mt0M0X5u#YJ(o=Ic)=e)ofE zG&0l{R_DP1@+}LRHdt-ben&(D)J{(5JL`jra+rMsQ_0_d_LqPA7k~A4SslhG_!$_b zr%VsKLF>~ftS$?Tp@5!7foNzmY3-9BH?jy?M?Y3$(Np*n_{qv1_QN4TI5H}_VI+w!u|Py z_E5=wDkoBllS>kKBw{q748=8115(Q@pin&XIO_4(Lmv70IMMb%Y#Wq+c zIDpik4MK5zyqmQ%{G$YF-UcW+I}6o2$!yIF;KrT%l^e(CFy}%{Q$boOi4%)vFY+~nV@A}@2?Ss8*8OY?wJ$iAT=iDBh z7JD@8KGvTVtFEoUfySD^<_4g7h|uSDEh$zTQ(~(fHhGJx%mc?`WjBqhK%&b=G?M5P z(n_GW@VPSgLvK0n_mO-`=Z5E!BkAU7cc94F6 zfsFR{b`Js=Wf94&JIY^snSa40162k{3Tl~;P6HIxIs2Kh2M3v)Ik=ZO+=%BAtdkS+ zAmvE3H#1>x-3ruMB=qCpo<|3VhnesBxxylHFep_}*X>etT3W}Gm5`+?*i)W`*ui1U zmGRmVHR=s*x8d4_7f?vx&Nd_7mq}i(V_-ERJLY-YjrOum9isG+Q87#+&x-;L^M>;H zMN4>ADZXHj%`nQ;%y7TzehyzN5Ona+T8iF>6%>W|c+g{G(!{^nHk_=J_Ismd+a7 z_71&FfTIuy0rFbl8IxsZAc6lej3(n7itirdZz&}7uN3P@LQsI@zF^~~&^ z2++)9Vx4IRAKM+tx3VGTHE-qQtEa5kd@*oOn#u-1q9zF30N)zy#V94uCk*!C-8bE; zOV|fu(FoKrXfJ#H%zJ!ZJD$yuMa3Q%j5b=6oAwv8kZoo>BEx67?V@iLJI^A=u))!$ z`jPje1e;{KvA^?`z*1N_KFKWcsjaIRkkw z9Lj!1VCk{b48|6prP{+GM-H&Kq0y^N?$IOn!`r~3y86gebN!sNY~4@F>pmQ*?ix(N zhn{KQaUZF%=qv|lU8gvWI-#`W$PO~^wXdF1W&z@rkdD!&?xHS z$F*O)fZpaK{l6BdHqYxd+4Cw;Bkt!t9T=hdYVGz!CTKHgQbKG+^K^QxTDfBLBo+va zIa6`zEO2Qz-Ao7_Za8JMJQsqj#8}KmZjmh&4xZDhwjlu?DLxIN52Z2(F&@K&j?g?(_DFz?imCRmV3+;*v3%;lFIAlH2s8bSY0o z!)0C7T&+nv*JzSwN&-KvJ~-OFclTDd;6mPli2Pgs@^1qIg~Zv8++BHt_5H2}ou?tl zJ3FiG1K%AvsZKyL+=XZf_Q$Bs2BaA2S~EeWKm|bI z80Bt{wwVQvgU?|9j$QeR3`9li^`|kS0W|1W!@K4Rj?^>ng$sw45W$xb-?s6$?Pam! z?$$Z*8eqRQa8yt8i1klkHhB@*)t+h)Z`O#we|fM1q?$+P$iU^oriNc*y=qlq0sVDR zI7bH^4PDMy(`lx^K-U1&%ybUfA$5}ScQ0$#V-u(S{rqmF>dl}3_22*bU;a&&4h{(( zQ-4wJAsX{?@cz^cmIP|%Fdv6Lx8be;COkzvr-yjdzY{=<{rj!YKKal7qkliw&Y7W{ zBwVkE><|}Il#sq#4pLHx>+&am`M3Z7AN<*RCUsi_@!;^$M3otIBfVwF|LY^QVAE@& zta%aE#fa1uY3F!;2?Ub%WS4s`#1+}5)@R@)TEW9l?tb>*Ud{A_I+t6(5ffV9>iBkgB|qa%`Bl&*OsJywcib$CD!}HlN%Auw z4&D*%-?UjU8CCf&PA2gS9PUZo#z9r*AW3 zsVp_!VBMNBVBJX&bf-S$d~PJ#R1l}FI;D#;E%OBA*DFT-{vvOwGc-43ict%YO7*?S zV9Y_zP;4xrxnkGo&+9ViPcuHMmP-8OAS-D>{x6WwQSp@yGMl3)6^-$9+1pp|>%Q8= z4K~OhP7j2!V_QcP1|sLPS&rJi$uWi}7dYO+E?pd292J`H^Q{FtEj{MhX_hNuU46yw zlTY)1w%t6llH%ud#ZrCh?%GZx!0`c0tRsg zR#+;KQ0_fF*7V7uW`x?7-)f+zzE;Gyot8s3l6`lS$Wc%;E8RHZj9ioac7{5A(tImx z{-UW*nRVIRGx{X7`E@0PM`E_pKHJ$40VQIRPr;qKw{$tX`Vae4L8vBlm2f+uuDNuK z3BM3nt=`x!enivy$^`9=z6L@ujh_G8>U^bbkOd4N~A*$G=JNPn`_1IVLJq}^@)!3;UuVc(F6yzq!Iy3iI zqOEq-WZI|%$E%{$k;h9IrmvQjt!ZOjB|7KGr-8pU_~-s==5h5@yLx z=SW%=$eFDrk55Ho?GdSWihgYLIjjmQX zsbM(|ILNnZUUlw>Yvz^tfb77W82kX$#6rGxqcmZWbID*qQkdeBiSij?^7Qtqx9^hZ zYEY@MGg_5oG1R(Ju`ZocznHbGFxK9tTP)wI-gVj9oPYz`SXI}G#!VNt?kb{Pf}MWT z_Kq5YMF45Ew4iCR|4eexM}v~K(b;GH&ZQE{xMG!c%2LstGBc&I=jYT1tfwY{79%)U zn$0aMOP>}MCek(XN`WZgX{9}?rPvT7s_)jgPxz+v|i`#UOeMfveh@OGhw1;CyF(dpXe1SBT~485dMdE z7rpadiuSGAwt+O|52{0$y;hCpI0LwwP|`5Ss%zbbXPanW67vP5fs9R&>ndrzPBIP^ zE|l6!9nWJZTvSz9+lB1pxy$BJO`+?Q9f;}l^WTfHe0outWVzuk69H&n&q_j?!KDKG-SRM z3_0w3;(tT09#0Bhn>XSf$TCf$+YElh$LSJ=pJ|vIYs0;cS5ZbUu^`EP{VhTp9wgJQ zC)pC4rq5qlF-PriK7?pn<`0Zt=qcBULxozI>$=yvL03Q#oyi@h1ml%St*jZY8E>=u zY4A1bZzi4C5lRj`%i@xmIpxT-xMF?O&-NH!%|NkMAc-x`SOHEO6uuIkKhFoq0%#C} zOY-b3xn6@CcSOcAoB~?pq3Qma7pdO$=VJT~9Qc$WqOOGZ zU{-zW^7_&gLRK0W)~E@kr<`wkm3iI2;y;73vf=efz!VWYsP#~v8p<^}Ugwhr!0GD+ zBq=iQva7V5Y0fk%S!N=#`+I-*r+@qR|A^D>myI}c-%Kz|J-mZYHM9&yaao+;i3c>K zjzC9q?+l`rH)-hizyF=@edqJs6i{QQ@m#8(Dxv5oV`N3jT?91v(NDkn>gy+xGRK6# zRANkfYCI`c1~W%vhJ2N^NNGY1gvQc)MwYRLSb;gnquh-7Fe=>`5UVJ4vpcs>QuZtV zIzNA%e3=%V?NYK}lyzka<%*C~$$Wu@x}M`IflOd6lP^5p0!1*PuZIf*9B$#F4?A^{lL;E2Lt5*2G>FV1yw zh$vX|Y&~WM5s0h9jk^RlA*Q|;pnQLB)a0Vhnh`Sg^9k_KGbw!Hek*9y`Pv_p4=+LA z4`Eg$*C{DxA+3bY5<<(1^EV+AJ$qWoW|7E=wG<;J-v0AC=`65MHuh8^3;%tq_z-!J zGeBj36_MgHGS%-cKfFs_v(5TLe(LR;R~H}N1!qVUEr0TrWB~>LTwmnOq=uEj@ap`{ zt9NgnJbV87&HG&aX^Nq}yAXA`b$s-5-~Ke-Q3xRQfMc`HP<7)qf&>hPrMR~@*?EQf ztz&{Ky#n+TE$q?9iQp*W3$(TqGpmV2VsW5+9$R6D?+!RbhBy8 zGEY#(F2?%1KrEF2co_mwta)-#De@L3O9mo5y9hyLbOM`(_L8y4k^IS*;vD8;lN3N_ zLd76!(W`66$DM9=>*UtyNq9pi$49sCoZLD&xqIg{l%iWFH*ZJ4=*~$nzPJ;`>MH4? zqr10n2B^Jta?s|~CWNt;Nyq?|6%a%v&*JqaY6rHJO3=qvwEEKCmk5CE|jkHXCW!AX7`jcge^TbY0qPwEH+t7he}}|X$}rfQ`;PCnzG#_R2SZzw19XVxHAp+ zkNTUSkTvb+bvelRKI>MJ-pJavv)iC0X93`FOxW;B4~seFpy7~^^0EGohr-$=ke>m` z<|5!K=t-5+hKbQIh+1|Lw3NI?WYh@ukvf)HnuCT9Af6++j_ddA5+!Rl&JTGjnO#PoLRKEzl~|klDJ~d39NJNApHM_bi&Ez7YAj zuF3xbpD}c=vdUGv^6XdNR#+$r!+}9midZxoC{4tmA3Q#>tHIq9 zVa*LzAK?A~k>xiCeKp-=@|c?F6!U9gxtU*cUe&yM%v9ox7DKAnVpN8*8i4!q$iz_7 zC#J;S{*ApZ5b?e5fA;xj_xWbaZ-4%Y_>9yLsd{NiW-Xj@7U3;o7+(&umFHOr=j<^( zw<_AYXdrqfH`SnCo3jV=holY+-ViV%1#RqDopVU@LNX_L{Mr@ruw}OnVK^i#^%!|2jphReuzeU|uE;D|)*#^ZXSWPfrO8blmni)OGtOfmo zo5}~yap^oRB58(gp6MlXzE8W<`FT#1hriyR#`>0$K;M9RYcs8+94}V=V)3v($?505 zGKpCjqe49TQohK`yw-Br7Oas?hJRzqphd8Z34V`z!7pI5+SLq!ZN@8I=7E&xk=Ll* z&Xe(ljwD=Isb_a}QmP+*wP_%}F7w&(iN@0IIy?v9XO2OI`qCz>-< zjrq#9y1-S5attU(X~w~OvX5HF^B(xZwNOsWjeA*ia$Fh_qB|%-qV&uK04fl7*AH?~ z2S3Q8S|=#9+~aOSDoUyh!30 z!R7U{vzLGK_h0<+pZ#T&bYhIm#p@=R5`_eJjLkG=@~BcjqzYk z?Ttw_O}3W7`^{hfmDCT4PrXyGI!^{lf&MUOG6%X^t&mnu{o+SIef0QQAFqzGX{n53 z?&&Qzl}2=X^Xc3_%i5}kAv^eDrsZS}^wtiqb+b57OdLI6R-^YbDCaA*6Mk|Wcqr9L(BE`0D90*1Bx6T{!jnQ|MSx?pKNy!8yK3MEG4$%I%b*S1=+ur zZG5hRSn_rikyK4m?FI!+Aiq2^nn8vsEo{E(!lyvzn6Tg>TdjQxV;_;&jAana z6=7^lMJUM0`7cMSNJ?wLWGvYjX;rqPTDxi;PIg;4&buYRc|;tQ>s0G{9?A46HW;MKWLp#X4!00*{7VmwRHBnhrS! zNJQg^h;@}Vd!MAI_o-|4^3}Vu*MTJR_xtB(ub(`9*_mZ;qDd5dBCu=}iDG)hb`F~) zqZBEf?0(m;*TfCnlaG=j6~HN*Y;=J0>_&MyfK%9faaXo5&=-ipBS z{PRKn#faQcLR^=wS=(}(Ky`0gsVK-r`aSHs^w|0N+Z;PfcRepb>tqE!dzKzO&-;wd z}7851;0G5?8k%C)8l|g zpL}xX&aIPsw{LxN|MvZR0gjGNZtmYXJqlV>*^zrmI$NEjKw3S>JNu~=bFGT6+&tVp zxN&{Ex#9`C1`>*lQEdO~l{*oGwxai0AQb>@24B6&hqrIt40Kh?Pmf(zQ6*D_!P?^h z9<}H%rgpPhcs|Y25Bf53$uC;N$armN7rGCjngV~) zJCHkBU&+aNHH1IO`LA#`8AjZ&wCC2+EtyfW512C58(9*|Y!kGvb&P21VpE?&5Zd@zPC6_?kBjbAQnelJ zXK>~OteG?+ZzkeZEApW8fECo913;@Ah^*9e7{1S*?8}2N`CqZ=ZNL9Z24!&J1pvAa`i>@ z1B$)iPlggKX1j3;%eDR7qe!B3uJt_Xb`icn$i+@t z^ePv_6$hd$n`V2WM!Si`??rv*tyb}d(B82_Ry zbb{ylbV6uKm=}MoNG08SsAs)a=RYF03!NrNN&FP_R*93V0%g)aq&!;NQ3Glp&pBYY zJd%1?9=v2;95-@8rbGrBi9`Aro=efT8guDdcy^Q7^Y1|-G`HMIkJTG$q&$#nfA9OT zQe2aplUXg@9*M3IxQ9^Rodia?4g8oWB0bf(33BRqZNGLUxGd5u5oWQNe@VLhZlv ztxuR-+Jpxozp=Wl#noD$?9#K!E^iX>vc|7%lkAB%YB*Px&YJNJNe6%=Ql-dW?E@_z zC5V6wmJ{-ap$zp%=c30ejla{B#bpZ*BBOVi+oIcLzS#3*57{1yP1BcWM^**{C=x&S1#~pacn?5;S^`uhHkh&O~d8`XpBb3fjghGBb*`cuRi0?78+QdxNq5 zlJ&K1U*J2`{@oqYGe+E?{u{YA9PEuAhex#M4749q2)m;q74Y%~M3(e-h`m#}&0lg# z%P%BI(SmuS$aJ$4Y%v|ES4WIiNJq)q6;b$>dsdf~ZP<^*MYpv25UV0!YJN-IkfE+Z zPel6%kz{r)@n~jMl)3QI@Hs8Dq_aFTK4LvPg0IB3#`O|g7|bJ$tbSH18ckN5iy_H0%FG+5d4#65Qa$xC z3TjyNWN_;)A{V{(#g+-J!ZFWYp8x$9KMeZwqo4dNONuFBqWY3An?e@@MV-kK;y)u9 z#|W;(*7~OO;T(S1n(dxCr1LTFB(NRdJpA3?`ORw`gt^fiJdqa6$B~U9>LM|2(+o;Hg@JE#uCE(T_3zZmE^Q4~1?WZ2V6z*$l$rimTOEJN^j3(%x3RNGhZ^0}zsU-=g zT3{&dhT0iJnC8~$&F_Er+t+u(G%f;`oFFf;=m@Y=mHg(T45xzO*yJm zEhRy$RgldQ0G5)*`Bsa_uIHkO)`3}&RSnHvRdQ2pj8@uLaGk8q;Hp@gIZ2L2E3yfI zb>*z)+Zqcz){(GKRUo^#QA@oX+&;Y-2Rzy1rx6A&h2W#Rw@%`32Skg4Z@{BSyhM^H z@4I?b?o_+Vhu~KE71)rOVSkp4O=asOqdW23|&NP zB}|l8Zz6^B?)l4C5n{=g;}8*RlVC9F?leTZO~l zKYsr5XOEvfdUpOSB$ue_oWD)yX5J%`g)J3>^UiI!D%_(*=jvzWL8@+EZk6&%k^-Xn&Ojk&!%{Ql64bxq*wp%5q(6l!-F0D_L5^z;@>rJ>_ z&!3+K$b0_s{Mn0FsWg|;_>UexfAah+a9&2^*^Bd+uirj;_A;nZM0JwcN4+S7tWBk; zWRjM);Nj8XZtD{z_!d0q-rd^|9^6m8{0H}MWun$xy?v5NTO#Ynhj(t>OcDJsjUL=P zIl6KEo`)zFULJwn-JL+F8OZz{;^B6e*v}hVT-RJLEEqo0z{KTT7@-zm z>A-}sBD7)q1UgXY0R9ES!7P}QVxW5spe~vX)PpP4H(w5WZY-?w>(g4YJ9*VecZ^d? zOI`?kSwZ~O?p*PAduIS-qeQ}T(3;kjoi~%AyJZC{ep%YnJ_XX&3Tc=5 zWCy~NmW-D6%~zhUV`uLEV56xusKBK4Bp6=4czJSL^YY22+*9}7Bw8jNv^dP&2ARfCOs+gWsI)cW-hO@ z%OA(XOo@Yvhp{SWwUc1bsRe1H^vovPs|S4(Ie!eJoC)Nr)S?V-164I%Eew<<<$761 zL;0;?%5e-nn_!RZ^6zsG*K;(?-G1fAt)hXMvf_jXl(^@u(`=WkZ{A)kAKtq&;^K>* zh{XJXe{IdzXI8z8an9x55?*P7R>({Bz-BV}-KIVkwS%^4R-iODn+GF*Q*h|W*hR%>x_*a>Lakf2 zv(=Axen_Of3nlJA(78hyNM6pUi%GRXIV5pH8VVeETdxw!;~c@6m8yNnCOzZxbEr4a zN=9l9Zswpz4B?^$)Y#}B=&GCr=!w!-br-<9&M|J@0bKLrx`X|GXN5+)1u;w~V7+2p z^65B-Ld9AI9kGh3%0K~8gJ4xwWYS3NPU28b;DYK9p(-?o0rOLD9Yh|Uo}bQlb*BAw zB#5D|Al+y`cAsy}JMkph1sOqj9uAMccv+wp7QB+_TmXN|cMoo|x zPUQSg*cqG8je8_HRg2C)jqYk7pgazb9zXrZfBI2e9Tr{x)=a6=$#X>pXdPP+ZiR@1 zUPNKqG$1iB`iosSz^qM=j>wWJCb2wy{oQYW{!72`{j4foL}0H6q+Ir`)6+ly ztH1x7zxyHv`FKpSJ|$)m^rtMmISE%R8faxoq+xaz);kVnO{4xFEDus+4wS2aDbR8f zVz~=qMpUIoi9;%Y{ITw56o6J&Esu+%(t|bC)G!ZsT1V+a<2x}XM8)%4?X5`!5XRi1 z-+?5rL|xtxsDhBTh%HNWT_6%7UIbU-A5f*K^JED%rseewErn0i%(Jvc&`E1Bo7-+l;Slz-O2*9BNSd-3|o z%VPb!zq|~tlt1sPV>WT?2?d59_p>h_E%Lh!n)a(Yjg2&|^YTqpV^J+}CeIfuB%hL8 zZ4FnL`?Rfa@_Q+OFqSf4+c}mdl|(%4PMgZ*^zLW{V3kg;_`HB;{5)3TeCC@H#q6KF zVq1ZrqL5!f(8QN`Yft8)Mi-;?S5M3h)yuRqdO!-$L zWmz-RN$LNyvkcdV07en#diC~QaGwZ=C+ja#%3&8hdG_+_N6+(jp!T2r?8(=UpFVm1 z^6`@wUw-xU%SX>1KY13^@6qEbs2{-T{MFlB&92y_`!YfEU$KeyOUF78`JK$tn+HLK z9^AW?Kbg9pKDhPy!@Hk-a`*o2C@*C`|PO!knlXnJpgGowp@9BUjD(*_@FJz?OQQQlfHj%am3j zt6yYEm`STfg7kJqEeA=IMzu%LvHobs7jwj8w`!&BCe~$8I`y84Yp&Vk&6eEig|t^! z2{(BCWa;CHBxo}UibpCfAU1@91<CgEz0=S*|kvSIuI{s+9GX-Id0K$CPg+CX|Vr5(iQ6uD)Gu=L$7twyXE@s+FNF zmh@q6IeSyWjcQm!W&zDpT5&DpE4)0s88I)8Cjq0pyX?}RiAQ<9oA0)LiH$Zwo%NKJ zh;UZ^JOu`n+AOVrmeIs2%Gh-h&lW2YoYH-Zu+nNai3^5ZbN~MB@&o&)mf!yD{$fF9 zwH7H+3ocfB9V;R%fJ}}G^LOx$lv|smKu76oOBy1RTP!2BP-g>gq3k@eEtA-M*=gce zNP~(bWhQmOpu!^=^XTrCPt>+#J)AP+5fOWVpQP#JNzSvXm!*x0gFQ|=0~aUyRT1a?1Q3_%d9KWlV$ zEWsCT4Gb!dOl(65CB?N-GeS!+ZZLRppi0`ak71Iq`3HBV-y&P}f1rYXnS0z(hO#|L zKx0;2ouqL3`gI7=26tu5+0$nDt0T?o=DiA`BUA7NEA9 z4*eQwqUO1KhAiZ;K1a-O=Ah3wKHwPM=16q%jgb_lweAbCMF3~d}jB?QRLFwbWOp2L$!`;*MR+5aZm=#B*-`jx8Y}FA% z>w1uIbc56eeeQ4@f@b>yOJ(XbpUxA{vw+j(Bj0tW#(xZ-Sqf0IbeIw$0>s(4=&GSF zUY@7yQM$ma0P`_P%`0%^vR`JrwRCd-oYODE?iL5=;OT&0&($g%zyF2pTt|n6Vh^k4hEmcO(Qw6uIx1{OuO|; zHxvD^7f5UeJrwnJp47eg&$u(4PFq)>Kc;=mi8y1w{EOc|+Pe|#C$H?OxrjtvIZCIe z2l+dMuH;HdWd<+?{4 zCwJ3fp>!#&R?kJuTS>D1=F(VL^fn=hoD)t5Z5J3lLMsWs!5~bMKERZU3d-;VfRaM*cAKKUM#MBP0wS1$ zSPa!;`Q5Hph2lO^beq9ZN&+2X+hnjZ8H2qSGpH({6-E~bDTJ@Ez*2ZF#pa&9d{vOp zljp&SLM#e$^wr~M_5NA%(Oy1l=1~Jok(YW^AYcZ*fkky0GBwlk8&x;uMtJl2bNB9P za?|eKxfS)X2M_Z1>HT}RGrjNMKfRmxw@+>-J?-wv&7#gFr*bbaX#AACIXp;~TLlzT z`99&^RDF+8pD7w?_9nU{0%ko}wGIn7`C_{`6fJynGpR}BlmrKRTghiFqahKiCwl1|Tf4Znwag@5=*$ z#0g)t5(NzeRbs$ca9(GDdmfNr5C-*D>I+U1((z zSiuv4&jPUWb^8cv@ErOT>~B!4^>pewU4eG2KdPJMyDjay6;L=M!NfPOmY1+y9a{_l2(=H>5?% zI(~c`Jk^bvsaZpE%QYWb=Ss30AXRFM4EklK78M4!DT^ylViJdg8TE>Km35XKn49U! ziR;izTO6PkyFfgOPBssVznOlkCtd1U-TS8M=$k#G7|85NDdj<2Vqs~GMwL}-fq*ve z;M*MnO!s>_gvRj}b3P!fV)oW?D@m{OxDWha6gW(%ql5i>_fHZE?!4XY<>wFYso+z$ zTTe4_fm+7_>OhGcgUVAKm)A;|s$hY&bbSJKWebWIUA4uZ?n|3;9O9cVTNKji86*!m z`lW}jeyD1*U1U4YL9$*QnYe25PO-D{Z7MQ13dbpO*Ie9x(Q z*`i37b*df=v3+$Vkos(m#2Bn@xpMly$$?uVjBhe1)ntqH5jqbUjyhPXQmbH)xxD6S z)vTKeeQ?=2BuY74eP%z0K(N~E;;ZWorZDH3B?Jfb9ou3*Db_ysHED(DG@}nrf`Qr* zpg*8i;opHZz#V{4PLQ6ad@oD~oxxhL4Gz#XdbLQyZ+B8d|bO~0A3>*jgB>MjphJnK$yRg3@?rc zM^5~KWIZcn^swuX41XF=vOZNK(Re?NQp+F$IWc7rSajD&C6aT>HZuC2 zm&HtSStzUTx6H~OTscs-u974R6~6yu!;2S@D6|xMQ?bA2B92VCa;R!by1)f|>MjU3 zTJW(dR z@drOjW(_vDF0yv1t;U8(1FgD4!rY`M;FV}Vjn3daQ(l`(Aff*C zfHnRb*x*-w@q0;Qe)TF5{*wL~%YrCYwv~)XORCj=WQX2v3_031x9{Bg;)g%|!$1Cu zOPS{r_a{X11nsk(K>UfU)f;=02Vr`q^h6)g?UekoG#~Bne0Kj<`Y>Uod@KLOnu+sM z@0NN?U<5+Ul6(kR3v z15h*CNL_ZgaucMlWAkNQi6{56W16<*DnC)VN%gQhx7-?1c5|ab`B(NwyxKehDS16Y ze4%v&Gm25()^Otjae#xht>VxoTPMk7hv6hAx$Ji2U2Yymo%&9t=iE$z@R(#FM#Sw6 zqdT5+D-dmW+{RKc(Hw?EkVJB8#BBH=!T^toLCh+!iD!u3w6~uNrTslUTTm}!QOuOO z^L&~!fjabbLoP?IZ>jrH&fikD?Mb(a@KqAO&1j0|vFf;axtYud96HK$&AhJTc&sz2 zt!_bSt#ohlICJHi-dp)k_TLf_Sb17}H1HEzaSv7xADhIMG7~&k9dOEHrT|FnE;8O- zjJf{HWX`Lt9rQPehs*Uht#x9~*{_J1Jc?>7AN3E=4z`As%=*d^JJ-o znt25#u-r-K$)Cgp7n`y_V+Ap5GX3&uM7bC9QnAd0jF#uJNmc9gPUE(lp7>Yt1oK?H ziSW>yz<(EK=WoL>3ht9XkDr}AeR2Nc<(ue7ef4!fqO+&Z&%b)~{Lzyzj9xx^@}jv# zFP}a;%U3dUf-WVeFmEn$JH?L2=dCo(jxVmlGz_`u)yTK2dPegOY}JxPR^Rct0xFl`?QpsR>z+5;wMOaJ2P6Gk> z=}d3VMc$BzrhS>E64NlpSv!Duldkiv1cs+ts7x9pg>*_Qv)D5g;Ioo)+GQ<|48KNI;%04wvypuk!yGET zvDuJF1S`$X7_$Aiie^`xJQz|vJ$jT`-4s7-7LW`#f($@%xuP<;BhijDWQ-<;k*eqU z9vO0&-NiRhF9MD;)~a3Z!)sEg8Z^l(0}_)-V~zK zsZWgwY$)YPie2`1`RTP1rZ?Mrh*E#pJ!yYe`P|;!yPp2BOl3Ci@9yk2`jek3qDYG) z=;OVOv@1CMqtKctY}MIMPThs~4O5(@uY1Rz`xwHor;~ zKZ{k{n$7;pdvkSzG|l8o8}ocs9flN5P1neb`_?CS(}Kk5^4r<|FMD3fBb8g5&TFfp z<{8me^_XOGF5s6fDW8#np~kM|L$_8AwFn4k`DHYN%F4lX=y{oGjbn-P*22jb&8x4h zzjQ0Kl4aZ_&AY(-4zQvwl4o3vbE|MplamYxm&VEQ$WJFQNtk_P#%}fcsMejNR%HP| zh6S={8*itnTHc=0A%Ia}YN)cqJM85X zh~x63A`-HU_PCns&uzdl>BDYtR*Xsi054`RsNTz%U27ShnePm?)Y8R)76WF|&Y?v= zx4{WRTzLWw2iOF{@d$t1=8?Q@O8^paP#sqgVF;@WQn^hUw=>U58<+T5o7porZAQPF zpR-yrpiSvzEaG}eR3Wt^^GBP_6>4XC1}3f$+_ z&wcMZzx0bgm)~vX%XPg1m$l4x$LfDKE}yb8Sby@>*FXHp&vH5DGUgL_mrd5aXO>O# zgqdrUQB)ZBo(nr7x6phL(*Wk?WTsF42AiV8!EVe|&s|hLe*XL4i6l)_TF%a2b&x7? zlJ3ctWXiIm9DD!N_LW_xRUYFZr2^4E{rIat{FA>7aR8UA*WFTZ%Vr;=q%J}gWss_R zYO&y_UC*>Py0~WjF22{l@vr>Wzw>YWi+}ZZ|M2YjtM;I_;9dj~%W-PMGF$biNjL2^ z3fW}8Se8~=vOm)Lv}e{>;fgdDoia$P{)jZzYS1Nk;&$f!fZ^=OuY<d%;(Lws)8m`d&yQiPrtE`;+cTXPPJ9%*Dzp<*;&cJO$W?s87}O3R_*4ZmLELA#4`o4P6p3(D?kxma0=+Qu-! zo~Nz zh*Ae6?GkAzo_6ilari%(VvexBYS zK~({8r|3m_c5>yQu5Eu#Vq|d?T8k$ql+z&X$X>%;$@rJ*WksZy(j4euZp5xTK_MSO ze`fBC^|R(c7V2f^T3ALfE|)vA>EdN4C37wuTf1JymlBG2Oun zVvAUs1akZYZW=-B%$UX4RoM>KO!2MRa-(~vM9io+j|{>TVb9OiEz3v9by#2aL7Oim zD~D!Y&kkdV>FD-RGKTGk>cx-9GM$Dnzq$Hke?%N}u=~6ie1w*)wC=j=xvZK+B0Qgw zQv9gSQCxgWo`En)13>vjONvM;F_iTjks^+bkz~^m8cJtdL$I3J@hUSwTPCLb@DWyxAg_9gN^zvEX^vgB#FDjWShLpD7nn7puSPfRbq)uOsQ+sjKIU&zlF3WwE@=QuJ_CT2C zIi8_mb@P?*e>3PR{mpg# zGpA+OHfjv5?1bsbtY)uXziH-29)`|nx8(9-tF|7f_sSICwlD&-{FU4hY$rH$_qDCTq0YA5Y# ziatqJ;$gKC2M+$oxqUri;4bBbQhd?#%P zsHStYMWYTmXt~5bO=Hv=^NU0%a@^j~b_{!{%wo1$ZKBXl|C`b)iiv>cS6^usXg;#Y zGVCm+g-Lhks{q3L&Ry}EM$lNNSt~Omq04ZSj3zbckL6wJ)voSNSJ=bcUN;m92gr@* zBa{|anz7CWx~ABaA&EMlp=kY|?1Kt?PQT#|guyPr;kUhV$Su)Bb|lxsi4Y+dIh-EC zk=f+T&3u*lzGglSu7{t_Poy8_O4~lqo4Gw03?m84&MG;4^i>8(Z=(vkFBBTh-Wu$i zkM2%yd&4gGf*iR=CsYO#6N>UePc5RJ+K`v`H1N^-+%G;C$l#-*?^443`W$rnsPa96 zfywVirx@3yvb45F8#q{o@0!6`D`DZaw;4NAbf{z0`F?^`=aJME^|#b8G$?qyWNF=F zT1|J_FGJ|AqldhSTT#7W5J zSk%@igFJoy!W{lsX^2C@U9=t!sv2e@;+Qn6ahG*)Fq`oBx|4Z0eZ1Ra<*=LgE065I z_|N}tSQP=7gZ8%ejj@&@?()?nFe2rzvX%cCSAXFjNs?^qqSazZF>_(V@a&n*a1S&7 zmyem5Hw`rxGlLjPDoOP|TVKk5eQuUo9g2+b@NhI(wyeT@PVPQ<{Pg)NF3=oiTREY0 zqj5&rSP&3@TVLKq!?C#nG@xi9axdUd;Tx)p|b#w%U?KoMn z60|6R0?WUVaS9UwpI4B-2(|KT$A4%z6|bD3SZ($B^))1q|KH#L;o#_lURf?Rv5s>S z+ea!5umU3psIm7oat>H5hB)r#?M+F^cw_Gt<#rO>5PxDvl_rmDva|`Ba{Z!ExAF>~L0KJu zmIaQXrTOV4OhQYuOS98g))ua=FKw*MFU(BLOpZ=Zj4sbl%@yPC*yJdIW;IMcAn!uVyf^yaPI5C>0mi2c1y!agLsT27cYZ^dz$F9Y3TOp0BsF_{1dicdgf8H~uaMKBs#1m7}V!3c2@ z%4>j%&|PCe;#-)=H#c`-CL&V!)hjrp-n@Rj`TWJ3XD?nqc>Mg~qZcnK(2WnQI@)h_>T9wO2;eUSP{3u% z!;EcLehqwG(JMpIOuOm}suc*~0!e6nN^T>TNAQ&ahPu8vDHy>ytMgRu0`ch@5M8xS zlK#c~j9kyah##r?+6gOJ4;2(uAuLqa8_SkxP2Gf5w+tp#LGF=eL1Jm~BTiCIy2U6a z_-AH%anUJ z!42$^$#Yu2O&LaA)n!_=heB*>Zu@gOK*F$JS7QbhCESnY3q{gE&KB@4&k6TvrqK#4 z^jPB{-*TZd-LS9dJK{Rc+Gg4{4r)XR%#jmE*tn6lybimqc@m|FRync+xrN1=Dba~O zHlD6q{|qgvgx;#2qM5s)&NIf68(RNR0-sG$pR83{BP;QRKDiQBhgbF%6ZK8B8>fU@%i#(f7spg5-w%KT$#F$>PVCCr3DzDtIcEXbjl}3I;OF)(&Mb zwww0{C+tdPLJf8IVG;kGn0`?|kQPSTkRP&`G2}-_hp=L}u=94z0-8!|X4)SkT0dYY z-WLo#gZ%KA`br63Xj$eF)u{lZaM7sqn%2z~Oo_|2?qk+2moFtWVQxhko^U@szr1zL zA0 znc`<$e7Uby`N%A^FOYmha>i+FOKG4mSR<)3OO>MdRx>%>$$Ga{=NudRhP!0BSf6e)pjoLQuz{t zq7Q_q2D`NAZYnJ?uyt>Wu8ykBgns7cCma zei6yy1)NbUwyo+|b{n0x7UiM3x_BKQ-K}#8BJ{e7fzNNWFHm+eYd%}Et`N5 zaJi-t12;rdeQd(k;4O`a#xHZR>65ojyw8=vSIc6+w{GZqS*zyD%ZnBNmFYPc=Y_ZT zX6RUqzPXn5Lj(bi1yq>tZ{LMMBX8)8v1Hf9dK|yxx^oeBsQhsJwBJfvj`_xF)v#m! zZ7Vs>O`&4jaO^tCS>PL=-MG5Gyhzrjo!wn*4T$MABy_CBw;au_Jj0UI82N=61%+g0 zb`E#_Z+`zZ*{W+Aq{p@XU{gSiG54ZcqIKhTbZlWxI!WlCEMooA*>hTiNd1(`asKx0 z=Ho}tws#AYY#M~R%q)iqH|9!Bu?0Vlw$Gq3TQg^l10{pM1fvkN;+Tc@_73=-Z~5WR z<8Wq}uB{Ab6qCJjD9psdG&m^0rn@1(vI=R8EOjWMsV=J7VY|o+UNWAdsx9|oFBAIi z_N_BhEN5QIsiax3HcD$Eo&sl@UF;TMbOTBw^`ib_-y9OOwQH;y-*uhQz6jhw%}dHt z!e|=fn9wpbX|!k*V|;O>_W}jR88&FzkSpkUa=Is^e|QcJd2;O2tIMl16IWK}SLdf! z<|bF>rj}n+V{I~;+WM2gb{`(*h$gld5YW9;J_ftBt{t=8xxb* zjzJ7n(AmoJ{L0e&#`@CQ>cZ8HMOYx#m*=luS-!TuL_FHY$}Ak%m)B;QFRKN(8(&$N zm;r4xF)}wbvOG6FJwAdBb+SYJCYfY<1|mtbuoZ_Fn?lbgOdlGN&6ponSHyIFVXrP! zW6*E~I2s+SkTm!^_>_OU07@*F92dqUFn?K#Bgu#PwN~aD;Rui#D=U~NwhvQ8OHa!+ z(K||W5q;xea16L9i@WsrT+XB5GGfzj*?}qH)Do0r)azRM1w~fT7G72}E=~?>f?7gp z?)JluWepP=bO7S2_-pxj4~44eFj36#2rB&VOTv z`C&ktgGC&c>Avg%X{)Uwkg_?^Nmw0!4hE;8Qg++JPQ1 zC`tF5_->^sr2sWMg;ep6JluBn3=dFkR!X$_)d7>5hV%AskNb|EX*1C?m^8a9oXdVK z)|fIC=o{e6NIJ9cQ<_#VeFAd4y6Wl`cCD68Jg;0Ob0-fqA-Bee{CTQ$>T1b9iWnLm z;%c6+#Y&u!HbIsYF7~;Kd7_P2l}#rvOP2;y<#5+7rPAOxs~T*JCZb}TyE_;JBgK@~ zPf>PI{BV|A)TE?gCRXN>!kX%L*r}T3qPK@v=&NYNKwO|2ljuz&rpZ_$EY-kp^>b)m zL=2dZNLp2j8WdH}CeA7m*CWp?Jd})ex(O9QSwjGWGx!uN(`Fx)6q&A=epnA_f$B1M zI>%cy$MQuu7*|#ou$s{;SPpxyZLF9L4lzr^M@$?sAW`9j zkr@Z0X+zVgD`_L;La0P45~{~KJ6#DfFde}JNPWR5> z()lEWjji0VTk2Ie%YfbhZgU#*6hl=pv(?zm{HFx%)2hv^Z%8DRtRF+wLNG-O#B-%q zK^11NJ%!5}X^tL9Z7mY8d(d(UP#Lawv1rht#xUQ^H+tGl3?Qguae zWNCDh>)Hrh%`c#RjRUBzZ>AsXARxB;G#}eF3^l8S)e}S1GNxOOxFM~4zHB3R&?eP% zZ`;Qf^iiI7Lv0+xsxFqHLCSgO)~*dp1B8{aOi3LSLE1wlf%VZ^!<_7@NhwFKk-irb z*;K=}$U2+OKbtd0WP#smOt%rFn6aIGt|q;PRq-8L#%S$4UL=o_HFs3|0K>K;mw#|@ z8nl(x&bK+G2TT);`9#F`p?va#n->Jo*47Tgt3jVyR;+fc9%VqOSTIgHqHII=aw?~& zWc9t*zHkNBsOjrdM(ba${o_CS#m3qS%N%L|!mmREv9lq6)Q*(CY)pD5v1})39pBx& zi%uO68_nmWtH&Yb#i(udZ16g4RG<0xSeiu^%;|C=wdYBdZw zY6j_eghzGNR2{R?LfJ|yL0IYD6|_6dXJmAIa$;s~W_YloHjq&w4xSq9?0`8*)Qr0! zs{_8NDEdS?^pxMY{7C&sT0HI~A?VH@&GejcJ)#O_`zQ;ScA?7b@F4*yU<&{z@9gc9 zrVV_+&d#350$@a_p3)NaE3~c z2^QqN{#fEBbCp~9spRd&*<88X8NgHyYUeNkAM9-JNoULaq-5;0Ne6Wfb3tdQALfFE z>G3NoGwaJUE3=bJ(_@!crk7^MXD3FXni?A(8o|d{=pjsj#T)4UP6z2`q@sBOk~*ZDq(#PB|Xz8WfPe#3SB?8UpvgZ6Hl-;bWW#NG|v^~=|r&tAR- z`S|$R>nG3Oa0a8%^Ox_6*r8Y^}A(_}x*Vks3=O>v;^RuH@)<72x%}rNk{i)6{cA~l2&S38) zL~!QN{Onle?dL%tjKW3F0-VgvgDgqtR8v!96XT-=Y0rXCk#Ww^q; z%)|*8IYTlYpBPo5P8?2FFQ6FEvtggLOxVC5NFK$Xz#UhX;TsWhw(Vw{xK<|BaGUTP39Hzw0e2wjx3 zS$TkhPqM_gA2nYgb=GNTyt&e*T(l{W>$@ivVktv&IR<(`Ph9SMsTW7BD^t6f(eyt> z{#OUAi_H*U?MZ7JWYZ@isn!<$RKAwTQcQ04l<=o1c^lx#%&} z!(mc@9c6FjTl$?xxRprDKu3ZHU}^OgDl-NafiyevRk`_NMJ*^mP&^ST&>{m3J1tEr zc@$`q9>RSp<#)jgWW%YK;*XH#)a_jP;r(gyfLA@`dy3%>()SNppHEO22l2opfF_wt znJ;C3VfVcxF<;itc(ZCAjE)ZD)8GIJ5VJR2Bn*ud zowicW7y_U^tkr{B%2QzOFeV90T**ICwmHsB>!x5A5se_t1U!vxQW%K4uO6XGfgNf5 z=HhaW*81yf@Jy8!vqjVbCx0itBkHV8RPRHxDrv3fWbSL?bKZ zpxE@sC@#;ObkQ!j`s=8_2I7V@VrCkpB8DREc^YrfT0YN{9stqi89FZ2@D9>wA}DwOJpnXG5&n z53mV_lhpfbHx!=LtWoxtU7%9hC^+dFCXLzL6gBL%cD?0`XHhI@v1{&vEq>L=CPfg< zqz!AP4MjCy>wv?l@$@!3PWxzhvPFHO5#5bJsEH=jzu|zagSJ$yT2@eN1YbyeW53#Z z9B3w^9KB~kfpSe7w+@x|Y|Tvk>C;UtpNvw}2WiR__w8AuQ7{Ks>?Bv8{UQd_ui zw!l#@uPt9)U&SP{xwVZrQl&`O(nU=VI@uC7)z1v6&7xF`L9johA}8;}-~Z#6Fm%+K zz>OiQfC!IWpX)VVi{->6#7S0h1V6Ma3!+)r?F%(fx%s_M>cA~_NlsOV{3N(>$aWgToqj9|^KVFt1 z<;-HW*UQS4$UV~S33N)|UDDDgGSoraO=}vDXmiP$s7m`<@f;_LTvAeAR^MRbeTXPt zh7ujuB5q0qPaquS@b(%}i9Gm2S54K@QY zTdK$`8p>UVe+q2;&spgrX(8ergqO-J;wn%ogWTpRl-(I@rbaSaa!qn3b821warH$#hLp>S{yvJ=aDZL?SNT zMtg(auaTP}$mI0toTpd=Ga2n?_0ip3dMP7~uXIr$#vrYk`>e*;MYewF&wE%Hg`Y$L z<0RKhp=!999aJ*yAj+qfeAV?@)|59iSR0`xhm>(cWR>8TYZ#< zIWYFxXgH6_tSm&Q40j}5BFFaj2}@?=A8zj*!g7tBbZ7r)bLZgo+nu)%UBBMs=PBv) z-)ug5^7_fkcaNXHdHD3zorllvKY8`w*{dh7Ht*bj{^Z5mN6+89e7Ey@b9a0HJ^S1K z`;)`>r%>A?-qDd%yfcQCba;MYny9p-MVnjSSX!E!y>WdVAM>Zz*OulgNONsz_R2a} zO~T=|yg0eKFawR((%d*di?d^sV?#3&s8>BB0|oF#nZ?dCHe7fjrU+{iay&nyVK{>H zdW<9Rn*-n!3ZtHb;c>#=%3fa@E@wJp#Lfa#3boAz%7fNcnHM)9e8AkG84|pc+)~}V z^$PzAVlC`li-ya%nT9BvE3%PRCvt}C*frFoYTf8!^fUy^gCo8o)C%Q02wtPVgdHu3 zbxUj+T7ne9si&)_Hb=_TMar`zVZhDnE44JD<`FYYzR_T*gSbaiD>Ikr*c0O~u2vtj zS#_BXT;r9x))eGgZektnqO_>3T90xjFQ^_t$*zsvyg;$Lie)y1Tr>``D*b|Mw4a*j zE$%q;IT~wHx+=G~_00$=S2hJw?<^HLGei4sEBlo#ck)bDL^FxHhao&Lf|rT(bjqU|Fh(acty_hop<99-7z z?9sf91{X7^vN&*TB#hDP2I^X8{PtK{FsJIjp+~}dc!~MKnu*mT)_K!47JxBp@`*X= z_{IO&`*E91OpLOT1_{e*kI)s=9dj_`_uPo2L%;DS2h1;V(Aaxx2SJx*QN7p%?Fbjc z4_Y&$l@}RV_63|qPE{raC$av}RoJOm5BbO=j=`0_i3CzDk1WJpyc+JU*f+E~RRm1p zSj%FSK=KiXJpvDBm@8}$+*7u;m}vk6@i-h!@e7}hja87q)btp4F&+UKF~q4{SVST& z7Wp(`MkvmX*qEteW1_*02F;nm+_}WgmDw@Es&mKW zB(5_pkq*BNPNI^Um=O>Cie0aS(&-51pCTOP@7vEjOjDnAd zqcc9z;Xq7}eR3I|)<+)unnL)I7+xA^XgCDoT8N!a7aY}0Y{X?2T`k9Ih3UdU%E6_N z1`zBYW{y*{(^bTs%bBg8hx0mR*6l5ogZ9xa%(Xna%eJ5~&tB57orIbSLyfJ_%nOoF z^R2d6<^sDrDMX%>bFm=}xz->9dZ+8twX%7E1`G8` z!H}#>9BW3=SowoIn$iGAZ_%INHR|+YTg=p!(yfM(Twc;(JMD3_uYD&nr~!7A+wC|# zi*9%^L3v<_c3nI|UK|0@v8^NJhc*$f_F_#lvTl_vKbwO_ZR?YG^rlB$u#&&)jBRTp`$}5qESZmb=P!T$lN;AI*dGQ1{gX3TjWWdX zzMy?yCl!nMK+ucT00N*VPhY4`Yd@_OOeC74F;C;9237+|eN!vvEMRiDm1xuxyed7M z&vUjq+8rM1MarP|FZG7x<;K+w))TBhhq%Hc;&e%HYx69FKW{oYS&480g}^aYnj1j} zxUX4O|NggM5-!28vDjo#F0~<1DJ2;@+FAA~kBtc4Rvhfb6Pyu2jo2nI7QB7)?%n1# zYvIi73@JIDK7Fybw@*)mEWd1llfXtsLUC9^MzLcQMR9)_gC-|N$;$(Dd3+rB(9rbM zc-4U;cIDCH@4ySk<3Vf@vVlT1+8LXknITUYO?HyBsh#ohm6a7}KSoAJOTwh8p`}p3 zKaE+$M0RpYVfa82qUPkapxta(HZ`n6IQrc9xCZ$kws>K`bypoT*-^vbFGzL>#!o`= zYsYtlhNz`RYr&O6wcBk{2XQU(UOa{T zAJ7DlGFDIvG#2p)iuT@>y ziSugp&Sl->+^Vm;0Zui}${yGkrXH_vSzQbhP@@yZA53envEm}kDNVK}Qw>%Siu}+i zIW*q2Mj589%`R*d2*iQ^)PhW7N4hhMPHZvKol*@=mKJUn5(c_ET{MR>g#ase#cMdh zvoswQQPW7MRG3+;bGAO?x#*+vA|Icb-Z9P4opF^C;De0BWrkW%Y34|s zDKl|Do^2)+Ctch$g==_H>@kzN_HQa#{X#{>j7R?zal!ePg;28^?sulAF-;9A0K}7# z>~2S8XnaLx6;T7wJVx=N#kj1*_+sUN{eZRC1QbAH8_^A1G(%szy%&#mv$+ASaUy*LI^pQ}Xm2hkn)6e)KL7L03T~E%>P5?4mU!Gl<8RrK8 z5V)b4iP5DwkVoV5Gh-~Xvy;Qq<3kf81B{yfOJ}s&$Z#)R#F`F?3P0Ghu?6ux*7zBq zOk+cy8Sj)Gp8tpvE$jN=V5iWXj9u1V;z~w39m)U$Rm%pz1e%V9E;j?1sAAbKOpwx) z&Us0);%F&L4Z31sjvSl}hWDjE(^n1ybB)!Ssq;V+q(R`XOVG!TX>RTi8Y;TNknX!!J6=Mx(R$BEgLw5o8RROz#18sea0 zsrWWn7&lf$I0?Cp9hU1CYvH?qG zkh{<&&aB?XnwXEA3SbB}IJ$()hB{a1b5!KrMc~TbqK8u4xAl>e*O*?$nDi{JNG6BU zv~SWq7UCA|Yp|indCW6Y!K&=+PN+vV-skF#AVM6O(7A0og-p(Pj30VT8PX$JWai!B4<^haEg2yRYU^p`r z7Gx$q@|9>izLIi_xtM?{=$~<95-(U?sJC*KhJVLFp>F04fQM=VTYgadmw$zU7J%GGVsyW6m_Kuv}Nzme_qU z5Xgzmd5j$#P^a=JCh`jwAikB0NZW_G{Sl6(!KYIr5h8e1h4l1tOI6aGN@5y=YZ48_ z8eJVzlS4<5RU7kql`0RKpLio9ml=OKoYlGO4H}r(s*lq;6P}lMhXoI*2iRx zdh!G;m{`rnw?ysg7~*bZ57BtQnH*IGY;u)eU(eT|FfZ1s&@5AiW4XZ#k}$=WjpO5t z3-f#7tcve`^x-rVjNu8c9p39*&A;I_wp+{5;8kAfqp6!g?j9Fu;Ul}Bc1V`na4NqJTflo)@AJ^_=D0SNV4?mz>_T9e!1&H2VD ztJ*k^?Dxi1#G00a>bsV?x$%Gf&{FkL*(lJ8+3D%O`tv^>Ei**FVyT!5XOl)l4b3(o z$G#v91py7O@a=cEclQs_81ahlIduKi|)bE-OKZ3H{Z zdDMJ#91G8Pp7O2>3)5HER|qiKJ2-&tMSi~MFg2tMv@xa(>rXJi=fILdG(b|=>2#0= z|MB{QA1=C2cl=bY2hWDEj{k&kW{>Aebj~+d}6!;7oC}7*bM?@o(3qD~o$RLBG*LXcMR$#ZP zuF-cL2b3^P^StsEGQyx4Evb)uz=%O+c#OT6ZGwx9{&Oh1Y!((Z1KuELcRBD88@jOauY{*27yf_fBC8be*@1`mmTwv4l!Ib# zQlz-k3ywss`HDZ84$8FsEgO-jH{LhG3=LumIhvPy4GQBa2#~I>V(VJ|2a&B3?K@g% z6UMM25Le1T=amMhH!qQ4!k%fF1kAi zM6 zHn;JHfG2(S;_ZVcFYiBo`RLi3`%hlpeemSoW?mv9aw~wE{g4O8B zi&r3$2xr@6-8=cfIxHN3eQX%p&3FfcJ`rIHi_>@o=4U2XSLat2XEvZQTAf>4nZ<0h zx->mMH8wvrIyVh!uY);$VjLexQCtHlBF{cbA?6{vXBZK;pXB<;M;upPXAJOA#n-k_ zk&MM>)WJg32Z{mkCRU`*#OTmy8IJ}q+|wd}AecIQH9j^1ssa(AN-sozfg>QM6;mLF z$X;+!sP2xqA{L2JBNCRe#B_GP)0e*p5bLHrI@<{ek|qpLh};Y7kLw#CRW{WU5=Scbvj*aD) zkKAY&mkVX-0&hwO?(NxFEt00=V^AJVp+JHKT=zCDpKsaA$d}zJUk@@1N0)&&Q3#~e zMBu1U7+vhq2}N(5#lfFIyea_?6gA_u&BZURgRn#_3zvvZTQ3I=gpgRJ-9DxsvLV(x~zTR@W|bt3`Ng$!pbK^pxv9rAF+b;%87%j&OJ zsNV>IxE!!`6w}VRi?-Y&Nyw$xUm7LtU26-%H7`c7$T6(bNl{h!Xk(|iKpk};as8gx z$}u(3Vc8rX!z~$P>(#X-?&np_Z=zjUN<6-15=!L|;{rV~AW%&_0%AC|)Hu!8sx?jz z9Y#FYji-=1g15^@Qrz0EN+$d_x|@4>ifCIgDHU^=rZNNW$87l~Yp9+~e5SJ+a~^)ET39cHm{PaxW@nMM z)7_|%OM9;>E>Ce26<)zrrmWT=;?`&;DFeRj=oYRennvq|t;9DrnmDN+wyM9|M_T}4 zK%T!DrTMY67Kf$dS3O6aL=Dh#yj~ZLk8mjR+ci!uDrxZK;<1G-TsjQT`htAiV|Z?> ztrR>)jj3TOWN^9bk7p7vlF}{b+zRJJJ_q4CI<5geH5*-UVgJdmesTTEI?aT~5(&Uf)jm(T7w?;KqF>I}3>f4C35+oSl||Uv zBuw4OB~D1LH^B(P?)sy#$@9u4l?WZm*ZL-tQFku*UMjP~B{V1bK6?Iz`zBbVXK`Wr z+T~SVgZ;W9SU;8@$+^#R&3f8@jR<*Fak{xYt8^yO>|4A0+W>X;x%mT+)y&OEJ2*Og z`}!>#*8IZU(&FO$+``7j#?Z*ftJiO69|-pGbmJ2;5{8PS1Zs#LD3Erk%CYnr*L>mN z3B-w(qvL3F>C!{4SD;tqGqV~Q3WwTfMh`?c>c-6~_Pj9DXQU!8%7sv1sPR!u5^RC` z(o028E=v@Fa<`**WfTsUnp%cA9EOYztWIWuNoYU?z=zp0-K|hSc$SO3y+S)BOG;6Ra{(qHrZ~4?r^8i9Wp=j@h6hI{CWffh`@>R? zj}A|8073tQb?@2Ug>(agPX4UzoQcAytzyo0mvh3ymY+Roo=dT%ZUW zIgnPV!~QIo##zLvEBLOP;8Ib+Y*`I<#F)qXS5jkkJxNIv&)SAlWx6CXF(o;UcirSZ z*)HAqsx(aSslOaI6+KE77_m_vdgKIg5!O%cVy-TP;L2(v=cu!i21h5UmiSnblBy%E zq;6#0=sQE$IPd)81!z(VkE6BnE^98XO(t#2AB`r=#BEGfUsf;;a`Am!@6SK1s8ixWfgQXnYaPcJdyY;{w{{Ky8Rh5T*~@oN zpe}m(=GjZ|M9&hN_WJ(g7hsDX5}Wo6GVHfcp7Sls;T8dI+dGv+kT>p&SFyzh`(uP$6(Te!Bdw6Qw(>D46|;=j1Q^6BNJ&#%|PkFKv?U7NqU zKD)j&bpRb7^v{e|)%qsvt`vHm z8d>cz>Vz6k3(eP3HF1+MCcVnB5!n3bsdX_CXQahPNs^*mb4(5(P}*$b2JO1miE7~< zkN7c$)Cx;oDriU^6X}-C-c_@hk`pk<&SZl5GQmeNK6T7z@u5OPAaff9Sj{qVaEhrV z0K`~R>7tZ%!;X)dg5agm~T!b1UsSDZrqe zqDq?A&AsTdEa9EYsVW1n+(!==((t4-sU!l>#0LZ}5uq0dkGJW!@u{1I0UnQT$#*}Gk5R5@K~8BXkp zMQV1UO}rjQm1WdrrNa7_e3a)n_~}Goo)j?xBjEmV9~A$Cs^AH(ue+m@VG2Co4* z!~#{>&}FTy(={Z@vqeQi7{`lfTh+-S;vwYRHG~-a6XP`)IiQ`kb}?>O3JaV@_y#Y9 z!>B)oT^gM2awL6ssTMuMp-Kwkf(p`)nZg0U$Wi?-sf@~pTZ7TX!o^o?c_acr4iw85 zjqlV#1SzgB_E_AsKf<4q*FI?YNaTEH&qA&@211na%5qk zr&UvhbZD=UgujNVVe?U1^bo3v>kp?fb@6d4>lfoV84YU@F)C7ScFNO-uOiC-Wgz3E zE>OL8Rl``^RDtwfYE+gbNB#x$4XMij(N;aHRwiPXS*MZL8swr0qa@2>C68lW1Bb-; z(v)gC@k$kUBYRDjR6nY(61nHf7FQ+hD8IFIs&8xmmMK6o_QpD_mBc4{r3sE&nqK*U zTE+x@FJ7aKqp``#Vk;y>HaN$po(lJDJG#MoY)Q8#0ZQryR@)c#O5ZVGYIAAMWgDoz zweG4EjzEFyzFp#vWMPnArv&MiIrxXa4JKE4;8@6Ovq#uS&S~eA*b_TEXL77xg+C)w zsNpxJ7+=+1*52eW@EXS_7qLaVGMK`Xr`taI*?n2B_qi=-$afLaViVcHZEpGsYE#Z8 zO@vZfun2&BaB&cQ<46z|BvV5Qu+sH0IRAaYe-8H!50P0}?oC~654xE0zh*@9iP=`m zVQV~j!`H|K*t*B+YpQNx4pO@KQue9YF;0Llu*uEy0W4%m(4_ALM>a!X)gXk z2omd_;gU^NV|B3u0j`(=jseZe#xFQ*{DlUn6hsd%pKlkeO z%lAp+Rc@v29ol+sri1MRgA4Ez1S}*ZlKb$Kf-1ylo(QJeIS^2~l!Q^RDVx}f&E0+C zCLni~LC-1d{FHj{sNC#(J6k&j@{snKYCn1M6hde)4%5?9Loxh~bVm4-|3(t&fRCE| z(H!8wIE~SyoV_1gii%I_Yqm}~cgwhPMx(||27Ml{U(i$xK~?`#LIsQNu=K;ifunjB z_YF_QzQ)W$PC~xoSvH%4Ov90gqj zlu^-}47fV*1qnnQvU+XhcL^0IS{YPBf}_M}5QK%+XRZHpl;JM0mCR<32+@Z>F zz!`N*CUapT21>+Ngova{zl=C+-0>;BndKGgv})002=x64^yH1$i+RVAYTVEf zsg!a`>~xp!H9dn=AOgKj6VopXIOkQlos#0$xmivt^R|SEse~m(b861T_~k^$+j=^5 zSoTc7q7=bFbExRgk10wn>TYrdVHdhX685yqR}Tna3W{2F)!d z&8cj6X)E_sz0i8a#Tn7pTqZq{yPM^6DD5#Hd4J9MV19Sj98v9>s1hMq8Y7}F>t}YB zyg~L@F;)eo56KahBRuvPhxv`U=k3<+=Jx)pH(PHYw1&y(P4Qm8c(a9t=n;0JM=vlE z-MsVU?&BA???1Ww@acm`q}tzn^KN%@cdrtrRZ79izlM#`G0UhU_I9k(8J`#?~w+SRpBuV21$W%cUi1)RpzWPw2$tR^dfo{X^%eTz?2Q~EFjKc8 z2S!>*#w=^BLIPJB;pi&L8E2E21ru&!acG!*^Xt`@v930Jkk!y9<%8bSbNR4+>$~>) z;u}+ba}DfGHNyU(|J$`x*JhI|^i%sW9K<1*Ias`1$OBfHf6BeCy*2{ZbU93uPrw)# zT0rbiS9g%^Hj$#*NyXi?K!iGy6r!)zOchwWpeHuSmcN)6vJDetV6yy_ueYBPcw$ogM8%aj(UoAZEQd07n2kc^(~+% z>_IgUR1Nath5oaJ#gD|TP@^T0TqxREXJUgZ8Q??p*YM~N@1Bs-Bd+8Dm8Bus?qqjL zk5FLQGIsamSE+^9Jyc7g6;S*5m@}#*tlVTUWI-TaHG4++PG~LmYpPK#W`f$@auKn% z80TSXRK78`H`a{u`m-Qo6Q~nsY$%lsgbd(hC*%zJ14ECXVD-lG45iNM z*d1JoUEVE0nVBD>WgNHSYI#=u%5O6^$gIb+K$@?S<#A>LS&$Oo09vMN^fGBV)25)V z!ow>62=g{n!Kzh!OJh+>!yYwN_Joz1?G~e;&I)R&r%{&~gGsozSO(?k1_d&}Rmvh$ zT?O5AD)=^5@LCk)tYHvkfhZH84hLx+OjBh*LGkT}`UDWZF|OyD&s8%5MY)t{UQtDE zc4>zmeLHb06{&#^v62yZ5S34K!^gb1YpiT0M)FI4la?`?VC<$f2xtJKK+E8rjl7$# znE7SGRH@O#SQ(edU(z~Kjcn?|CKSJn`<2~8*;mr9o+>pyP$@Y%6oF+(Z4!12v?ZR) zTpy_eqCbz*hHc_i1v1V^T4uPu;kZUMGU0hqO*6=${I>nOazH>*Mp_z^tktuk7BvM( zH6vk7lQ;#oNctNQwtcwD=w(%6@70EFm9!HHac`8&nlQvH_^I+0TrAT^ks$pi8wA)}hd*5CbX=Rf;{-t9BtAb<< zWQGh=y>aL{>Rr~Hi9-44iw4`W1YP=r}?L8*IRdM&}@w7RE8V%9SP9lTBPu6 zm)ASPgZq`=xIi{F1|>f-tF3?=*g7hIGg?F+pR-6Iy#dR9bMwxF2TypORD&!#ol#Q} z_X@b+adNC+TtX{AE+pYi8O@}y&BxBI6;d(O5#+4TVA$Q;#fznzg#j^5i1pNXbva#K z+Yk%?Nzu^`Rk?!&N|N!cBnGu>`Jrg3gX808uin0SyHgewM}6j+!nVqxVbQz~h*uio z;PBx7{Rg*i-Ff-)6<}a4AZw3ccxqTVPDA8ddB-k6^jpAC4rqjUtNPf-@%0ri5z$g? z>wP_VxfiCVHdYtbm*#)++0{S!_0Px0$DhA^gNU`TwEWAT{Q~d}`cwFw1(zA1iU^3* zbByeRe+^q0<~sU~hUGl=ul<9H-NRLQbZm-iE;%-#%HjS=(Nv#fLM^(-(54#GRJtft zWkWXaKJSjR%M1w>L~v%>fx+Ig(Nm%9m=PqZZCPQEI*#ip3f!nJRF*xCLTJFzvEgEJ z0q}(gQHHFukw7_k1ry&83N|q@_Ui2pIwZpZ*%_l8LWPn&zlDE_vDGro@N0Vth0Dt4 z_9UUhne!sQoxL1uDy5p5_@xps?S_1)b$fPz#+R=@yhc7stm3ayGV|Smork)cYbkT* zQf!kSRIyv}-Su3NMvN{0Xfe(^Mr z_aYO8pB!p)zNO{+gX6cTh%_OKlo^LVg5WNvV`#Qr1DRFonTi&Yf*Y1Mh+Fg z6JGTkvU2+bwWkTaB(o;S)K{XyUZrk29Cr-k%8&?)B8gW0QM zv-I>`Z(a1G7yEQ!oA!Nc!c6ROaTEzOoInhI_01SIF~{c}ZU?htx#`cVrBl|%}h@(F3!!*&GNIlx=7-J#d*Thmabl1<(T9<5MX0AT7?jM zY-DkEk_2jNOEYs*W7vbnhWjT*27wNdG!4=s;@3I@oEgHE04+T$GwdV7{k=0&Bf}`| zIqp=t{g15Mlat&sgzaQ(49U6_N|v&*(IUd8FK8xA?buMu`O!h^D-Fej^mYMLtQs(p z%R;X;cPhS0;w}WtT#fF(rEo>jGg4JPTFZ3DO7C}>fJEFV3kCn`6sR$;_9Vx-!cQgA zEQ?`p!blX1%|l&RH$R`jAMTTe4_iaZlTcfjp1Zt(EXsQtXSD$p0yhpznQkP+Q5}%u zRiT>_m~K2v3{eyc>3e!?E8j(1k_)>*Ei7DAEUY(01tnLsmZPeVhJZ{8Q_>kDqPUoO zYG42>V>NhcSku>JPM}@aAC>Jc~yi|A-V448#OvkD_vRfWY2~SBH z@jlKJbSooGwJt)tDoY^~S+o%zT!f-zQw(pBH7lrOGb-pmHwHzA7WJ+5Q*!ZmO$gzv z&Dd0f@qxK7cdZa5E|%_mxL*Nbm|tNvV#6eCjdk{D@4dvB6v-NB{&?mNHsyNn3V|-r z25%>Wl8ke#(sqc30)aBxD=0^PRcXI2CBJ0X(8eF33kl-SAuo0y+UdOo+gLETJ)Vf@jLUub-wR67aPX@7G zID}{yM{3Sx`rK00ni>jBEr!J%QH#5AG1~CV&_U~IJ7}6VUx}cWZdo2$L#~u~l-OjH z@=r89#Yu*M{L|E1wSl{6AB_S=lBZ_}tfxe(I*u>{x0Gbck=$rpm7xtL$dHYjW|xCa ze1S?P=CM-1F0wyr=@cgJv^Va|3S)iDy`=(qz4|QIcpP{^S)E(`ITL9`XO;Y*C5by8 z8pn^nwefJ6Cz=zjYNFj#jGV5>hB~p=ly8)@3|_OmbdXMX?erRAu;=SmmCfG!tc$g^ z;&ryMx0rLSsh3_LqR5ssdP~cL`junPoMp`r&~9mHf6KA(kAB&*fcc(op1xN-+rK>T zB@V?p&O zaAQ$obHti;Tjb&uEmL%il80dj4Sr(WwFAXRxXoLK*gCuKXq8%*nW4+q@uX%Ev|pAT zV4_eSG$xR$kWK7!vrnfzdjt*`swNsm5lS>!LrB@b9y9{)mIA+)ulic|@7axOSN`Hp ze_atbdVb^KwP6}rl2%S@W!JQ{rkMI)zTN!t>zl;}$c;vL5X~<{SWa+r_{q)1D zT%Dbwm$+^F76PWsjB9&0f^Zk2)|Lt`&>>&FvW_w3;Bdc81>kZ+Eyrb26nDpfaoUlM zD&{rs3u1yZUw?o5(UTXh7q#UlI%zmb12X)29hsmKc-O6+{oVw<4~ALR@yXYxBHp{B z%XSk~2x7lJSZm(B-Q;>VV;r-Kv*pGWC3==jm&Gd`&sb$?j~A5LH_{o@6#+>pWf$%A z<^g$jcEAK>KI@}%2$_S!0bJ+esYTFQUWSHf_V%57_wPRhj-!u+L0B*;hy}A3)8?vA z?uG~!mBb_lyd;;TYG@1aSrDi2acyztKmYrG@-P3%pa0FD{o+?Y{rqQN-1zZl*TyG0 z-`}~nxqArU^;f_8)%EMw?%%&p{fHxn$p~ak50gep!r?*ci;;^TG}Fk^JqjzJYe2VG z9wK~XMR{wA)&a@gkl>)6-9HRAswDT4Ai-5}j10tEaL@MkE;nWjd<^QLJW|x3b)Lt` zrNYP)s6tKBgtQqU+hq(0yLK;|9L~7mk@Appzy*lJ?C{xLKVcI@Sd66GgLw#F-@C2- zJCC1Yo?>_q40Bk7NX;(XT@7XHYu0Vu0#0@>aR_Cy|H3sSqezKS{6e(N=PyVTB zxW(`%7YKl&dYUy2m*y=vW6X;qoV%QZ@?Ew(q}p103>l&?0%J7$07iC-XW^A!pC(6f z;fFXf0F3(wCvaA8Ztc9=+T(-)7QynI!O`L}^7L4-t@K;_G3ae>dj1It@yW@dJ7VU9EcGc(hL zGg@A}e0g9N2S{BamT(Dw-Y}oWfKzJUBTzNH*{B;Q>%ZSdNBzK4CKgJ=y8&1$o3tHb1OF z$n0Wkh{VPCKRGeR0U9rhA?rD&bNUj?QSFBLl&BKrKjMe+3jOAs!ZuKYS64;C;X_A= zK9~dZT1JM{3L{%kjH)%}MLO5TUEiZgFlwHPT}n(4eI4F?qZ4APFycf}SND|>PY50c zpjq+{G3FYflpC40GMecGqfAqA>0+cIM3hwhU2?#(hL*2QcKiWz2%26^CL`0HN)z5hXmK0rI801~r&Rbk zBQ{D=TuwC8y5-R^$|ScViT5zXyg!t^tz1XqE0bZP6fk~}S}KB`Ufw@Tq9=X}Og-Yfw^c1j)C^RvyvOtSR+&nh4FdWXoghI4^ia-mZdd z%7(=i>hJQ6HvVGH^R4eJj+-)#j~4e@ZJYE>gB6t`jY0W`u;w5rnrY9$5X(%BMh?#7 zapW4-E<_X;mITFTh;n6?EUsa8k!OA8@i_)mEXoj(5{vYxj8`UgYmka2}! z$7-YbxwbUvA*JgR3>h3s*(Q}mOavAYq1PT0?`>1?g{U^#ieo)Ix!_!9qcOS|Dy5Kg zvT@8+M&T-vX!|pXk51P{0Ia3VH{y1NX$v7Su0)lU14WYp)}t8rcE^|K!b~F zTj8V5+45w|g=R36@7qEG9Zp7Pcx59MaS!;Y%IZgekM@o{E-J1`&1+>>HT6cTA?QZz zn1n+jz%?qHY*#p~j6`aQT;_6a@SO{wm>^9U0xAsz^Yt6Oj?=JVsYIqY_535I3Tjxt zwUuaU)2u^%-0)Pen=wc@mElwhzUDsnty^+&OXH&r&Q>+AmR1i9G=7A!SZ8r|jUKfj ziMssO*0T+vTw@uoB;M=Z=0aw_C{_yR)vTtu&+DCivb1QVPp!4j-8!aBTq#!Q?IoklU>y=jRZRI50 zJq|pZ(Fxu<#fCDOC?995sS5A`{;PlXPhh_rh={CJC=J!J(Y2wg^iZcmQ&NKmf=?FC zn|JO%c=)6z!_w7&tBk-;%JWitc)D7s)o{aRqi@l0JK6@n)@JUC#vV{MNa8V6C7#!zVxoE?`)J$mVibn_PUBhIM^% z3>gjN#{=DTGzUhF#pQXl%BRm>#9zXHg}5QX7hS;%Bp=NuaZ6RqJ2n+AV-V~mzD(H{ zuNp6c73YtC@%g{~SO4Nq{`{B2BcOst=&^zwM0rN%dHn3naX4ar^+$j7;^iwywPDLb zK4iA=8^(=9gbzet9!L)50+eUC_Rv!dVT3Xn;%LCm=;+v32jLj6)cDjG@5sBODVgGw z%cwCu4v-tN0;*aW%YviEe#9Y=BFs?)^AkhIPchL#Ln{O2$Fe5yzL@rCOhiW7Ffnig zfSw3QLk=4WXea}se{y=1I?y$AJ!lk0)5zG+$Wvx3O<3u6Zd(S zhy3DD>|0b6V}FF-@(pJ=M-%BGH(-tNY-g%|SfcAQ$HsrLO6w?ZfMQO%VYz>?Hkp@D zNx<>UX73`;hn}m^;ImRII#HcS*vAnlC08yJNKJWp15qvV6n6?! z{j=iH&w4KlGm=Ojb8yK&%G6aF%vxR5!)03gnkFquPE4N=V`ODYNNL<615QB|sEjKK zQ%PbG(EGYq`V$yPlOjMWMiZWTwBc?2giK^!V3-4iw?Ev z{PfAQm*3xHQ+R03)&)OifPkv$z1)^}@#b;@ZmMmCI{aHSKX=Z6|0y3i&((TVr%}xztJeuwlbwFs4k`u7cB-{S)R?k8B^YnZmvW{U zRIb=&Jj6vt4#Pyck!y_2w!0^WI3q|1cw&TCSaMYv>5Jr7n8?jovh!WCTkhY zhoU48QU&X;sUq2PbjjqWquk(g3OT|q8$d!0{Pa|<1O4z?og%OiI^F;Npb|%<0SiLg z8$j7WpTL5?O4kLh%1qOdxB_qN1`mqCb$Zr*q!ED07&(bCW9o+D1B$&$@dkF=_~Y6h3s#-iJ+HRm*YG=(RT{8_ABWidJ_dLxl& zwVogk#J$uHjtTjsypIRRAeCx6{osyYiEAo9>^?Owob1Wb2Nu{$19J3X1Pd%@2q!mD zRY+How6xfY)exJX7&nF*qG2Cu0Yi*|;GxXzQ1c=-2fgR!HRCSLZG2I*k{VJIKU0_? zlS0H6KUjEh(BC6VWKtX-VMr8f+qJdj{)B+iGW-r8U!}s7Pu&<}1s$e~yQavO1a8-C z#Et-@$^^0WeY|jGMp0iart3KCYJD(MU2XG~e4#H26=H`rGsZCxc8FhtJvvOP|FQD!~zut*}#`5CwcYDYDl{n?b+pVjOZZr3sF&=jz9)= zasjwV5&=JTg>pe?g1b%lAQ~v1)rzqy{AwIH-Ar4_5NULlVhWE)D>a(cLI?CG-qP8k z-e@)@GeL+O;ufu1>~nfr^j4{I3skY)>`H#?w^ZO`*xPh`c&P|Clvw0~)t(oQBa_l; z(PR-c9`*c#Sw*z0S4Wh?Eqsl9uh&%&yGRK=HXI`#DECqnjhyg=>H{lcc$B_M0bhK_ zk?r3syGAu73fPF7EQjnqqgoQGlx8XBkBWbA9(uz3R* z;!+xG&anICG!a7=R;=EZ>B;SdQd{^AEvjwBZ#9@060E^g22;OnVQ5uv*A8Dp(~i4i z9@aRU_0{;bW+rh%8c;mr^lYp;%ET9}Nj89=`nKU;Jga%mz9>VaVRTB_si^-<$fD)T z@*R%8xgFQCnps1ULI#2vl%^w50oPa}3bc~yVh$lI?>*Mrfn>X!RC(Oh{fOt8ODapakdKOG| z4~!5vXbFv`Z+THuxbs{pBtfINS3PfRZLIBhBCxZ(efthV9D!`~7%9jWrV*Y8!5Sdn z9aPriiX7v?u2G0|B?b1?>cJA8IHrCCt*5WHUcKAnz&dMPb&T;in^;qjZHL%KXcFAd zySsajA3p`Ca`^smckdvED(US*HJyQ3n?>R&=wz&8NN+{&Vw~)$+sVoL;{3n+mw)~5 z|J8ptIX1C>a)K%9>st^0;WvN4phL6*3MaU>?{7a~H^bU>?fO+}^WCl6RETjl7=jh8 zKV#$L6O$8@Q}i`n** z@>~CM|M-i*Ohl$OOm5=(}Qg|pBATO%O(1c9p` zNW+c!!s~P5PX$}aZ^}8-K5`kePd-jgD9$>+7>Di`+L+W^gu19ix!`Nn7VquF&DKK+ zT5YsJL?JIJPV46d$5|ydjc!)oa+iw^XJiFJM7U(`aKUi~Ae-MH0_aKVX=q;L#y%x) z!yl^61ZD z0~uyM8l@i-KvW&%K=%k)hp7Kac#&JfqBtQ2tH5OINshU0nAMp!VxCgTtz#e-c%u7( zVpX@$3W5geno;CQb!Bev9>%B!PQH-$yv5PAz`CN^tRaci@OMmftka@JIzS z#&&ilmRS^1$!1hW3Dx0Q%4fBx40I)Prsmr3M5PLlH0QmtT!Tl^R{66!MOU;^LH!v$ z-$jxsBXUZUv@}U9JIV*Nuw878Okl6C!WACXS|7f%K*YV{1SwsONvWPzF!zXtAw@+I zvNRVC4bId0@);Rzz;kMCEX%vfXOG+{!mKMha`MZ_3&E_E`k)&-8Gc!sGWPdMm+suW zhytSX>cCBq?CQiBoO5k zD-`uE66MZezhuU}sJ^z!1h z^|{ZlE^_eM)x|4ovzHgAmS)CQ=EkNw15={|kY2+XGCtTlKGa7t{mIV2aL-3DtRo;L z2YX<|?If!jD<>w$K2}y1d2mPK)ftm0iE^4GKM@1jOwIw>iBHT0(M`1Y@Rj+Cdm^$5 zfixqb+qaF}&o!DUMT(u9FV$6|MzeCSWCePmvJTYRE2NI?UI$xcmW-EOs1bElRASb1 zN@x;hIdM#iA_<*~)ivy*;+SL<(Vm|9 zZVZQcmT7X%U<5?*-`?JbfBgvWkPlLL)}5a>5_}-y)mRg&yozG&qi@a>SYP$ZSRDgj*JsBE~UrRqPiyv6%io zu|`*e&KTB6$w~J%Qt?#=7@8TgYEG=Naer7*Ya&C|zk|0Nn+H!56W9mw^O;Ld5n{xKZ~HK@bcD% zp{em`aEsanvr_1d7Qt@Pkf7@|fhm7UG{u@_N>`bZ2r{Roi$*eTc`3cQQ~y5==Mp1u zT3&i=+dfE(Pqk5&PH9%8Z!m9#ix)GEg(+7uzG_X!zlsc1%MgP^Y*E&prXH%MHa-Ov zO9_(XneG!?ZVm#OT=EgkA)v?>R^^rvO@CJ-;?Y{_TEo*V#I|)GH{eU#NSypiv}(3> zN{o!pZTXdq-Lp*XPy%5T{tVQ2nQk~$y$AyQM2eZFM7N<!i( zj1^bH^)gK}EJio3uK(+Q@lRO{P=d@g>+tr#(JtIeGnuXiRST*Obb@X2;p69De*JxY zkq6ptb%|Y*SJGeVmZ7YZFC}n26E;W{OpU=${hg;9^h(R{mGABvqPs?FMeM>G>&wgY z)8GQI{+xtlUrV1OBKDwewm!jXm1gK;FRRq(*a)Tn{;TgFKY31V+$>r4E9ci}W!819 zs#Nrgf=+UW-NR!Vo{a1oF>9YH)%{Ecx)!F_WB&N0Qiqm^$S?Ax^R12oo;E)_F*!O? z7;jM1CMO9U9tm?P7DLJV!_(SR>Mbw|)LdZG+uS{P@pe0FXIrw&4`@s>B)l&wkOIup+S*UKj;u<>7^38N{>j*QL4J5VYCp>ilPlEJL+oGf z&Pa8A`OtLZ6@CT#Y4s_$LnJ7KLwZdL@Qn~p@x*PcW!1JzcfuusxKOlvO9RN zM~X9*mM5he?9T+*p@8v&ryb#J_uy!2XBQD|VjOW6)|gZ7nnJWi_C+KRHIWFBy(3cc zA79wZT|WG1*mh2~jYjNnNgEui8+cxn93Sx-wRD(EqG7n$jB~1dS|@dzTo~!TI`&VR zSKc)w5d8)cV@vHKCMXa6?_>A4(V$Bm=1S*0GPZ^@`Pve)WOQw%!7_SO)yU<`fGqbi zPEfwPe-s!ztMvx#{)r&Bt*YiG8!;!bOdoofT#HN+Ohf7|<7);Lb5WI^B29WC6O9>v zbkxh4sGLwS3-L%LuS&0p@I%{C9`fRWQu9n+Ic_n}hPgWtR5VObGVmPp%=YwYL@OCu zJzqL@QFtsDyn;J^)-gkt#0B>#tB5`48cXg=l%iR0Xg7D2EUh~HyNJ-zTcR0KPgW92 z(9T$MDi*7wgJY^_wr^4poQ9h+eSL0lH*Zb#7}YvOTGDaUU#T&;n6u)Q%9tM1l^Nd? ztKQXugj6U<(7Yu+<`&)f0@GMlX+133BAWZ-(WC;@us{Kdpv{?=1D~rH?=%tb7S~`6 zNbAP6itb|Ncq7x_^okoTKV`M2yqAhwGFZv{SV~HA2~oqUYSLf#rbikAT9cMaTIFNP zAd!Kd_x&iDOHIf#h2b)0r6wQK$YPhQKck)ZP4=|f0SnZC;VCYFqMc^M_A|KxyofL% z7@0pqdsGrO4?78O2p6L!vG`%9CL1J+7f>UXuh(yOu+hV3^z`MsyZ4{ntJpLUny+r& zdIF!(*WcZ}dFK%U(03n_U;i0jam~}`uU@=*`~1Z_%uL0IL{>x=8I!)TsSQ@z9il>J zr=h-{UtE~qSY5e_ZRqOSmGzY`ZfyMMvnxOS;_4UI*M9uj#!o(7=jX=dazPYIp0?>$73!l*tWJaV-n;aj8 z;Ezd*r3j4C)Wj$OFk_>G5E~VB5h^j~aig?&W5m&O*I-5E3(}ly zI?+&q>FZGeG09yvbQf>5n6jZbCgmiNElWCcDYc}a2~ed%gT>{FQsh42OO20JZ?PIN zmEcn5uhbb5%+sUh(H2`&05~^zp&WUb?ni4HMuGAgr3a zMbIHcpp-kut?~F$vzthsbv0(A-lP2^YE_DSxQ$tD4-bwNZ&^ICTu^xqkXzV)W%#O* z&vEu6gdAQTUkjPBBw533ErYNr(uCEV97_;e%_zsb7(IRSG1>Q$np3`QY1detjph^j zL{*W}6d((L5^x#g)l~&iDo%GpP0jUQQ=4^D=Z77{#avctA2NCSl7gTV@u1W-k<-7~ zeR>KR9FSo6l?d8RxA&l!7r4{>lB1oWvji+t8D3v&3Cqy*bccb-@;o|5z}F}H2cXMY zo3#)@j9pufFpef;3lP!xE@L-`R9M^_i<-Nej8P7Z;8iPwX%ShT)_dEkhVFVG&dxyE zel7Ar_3Z5(ym;~A@uTOj-n=1oZ0}D#yIjCF-Z4U}HZwOZLoiG~RzwDL73Z@Z3MzIf zFHYY;V`392nTCq<0*yG8s;{A|THh^)I&fV6!1EYZ z4SiSEGCU#Wo56u2ptARc>=V601EKUfto~-HFgt?-T9F9D1U5g8b%U^c`&bG0E zh&eP4mf<0ehB7mvM4g+ltI@ddF^_niH!P^aJ_Gy_uOxFe>w;O9m?Vu}M&AzQ8*7S0 zB(6j#P2x^#M~pM7&opW}hy+aW(ceyI+D?oOml8#P`nZ9He8WcGEL23@k^?hO+iotD zs`riEp#E+YHWres*NP*;L`B!P1XwCsygX;P)8)I>!O-!Z=#k1#-Y!d#^Z+ein7B48 za2`vHA4iB2vM%>6^+382rRFYPLM((PRmo|n$b5R4yw9qO)v-9O34Z&-1Y&;bt%Y8< zcsjq#Q8oGDd|u6=tD5g8V>0Ep>b9>` zBkj_Lh|$m^8?^818+pCJsECZUhFSsb6dt#+;Rf%_^~JPpacr3ym|PO+1%3Tq?kjk2 zt1)kA8VFW|TX!E4lVY+KtLkN3r zla_W(1CuSK66$hh<=l-J>%N(NB$iuysdHJZFPq55+Vbks0*c|@-X017&-5u~!H~zx zJd9k=^1+sYr2xDJs1wTk{g>Z8dh(1nPdjJjA0&B7S({~9a>bAWgMv}3=zBo>bnubRNSiOxu|{|xm8Yh8A2BqxkhR2TyX ziN*M{wnRg%Gv=xN?!n2^SMN?j|8M^~#~khc7KdwmF@vhVeR|{Szxg-+eEssq_jexsAO4?z_y7Kf zukbcMc=GDmt4%B&kP3~DkN(-OevFX_G3XYKX$)0W_ukpLxd#vKRMp(!TIE=Ua z7=X?0&hFmM&d&BWZjASpO^-}xd&j`FN&3tcB|;^)YkwguOfQ1Jn)V;*3?*q9zH6v5 zP)SDcUyqE9lC_ME$i~EHK-*tIaAc5l z9v_wSq8BYrw+au3*^$?QVjN@C(!z9SY>;3;h8_0M&^J_4UWyv+6h*?;9x^i$MHeU7 zD7rN(w|VVXZEFqO+n;$hdoi+G=!(R#?`@8H4eQQ|dRE0m@ZM^Kg;jji%3 z+G2_^%2CW*pJi51g%&XyyfA1!rVrJp5T5AvA#5svB>fZ_iPlK5Gp8r&hcX^7#sQ98 zW}>9vMyD$OP+_BoO5&FXBtc0!5fMarIxVGMsCB;47@35mlIfbmA#yoO5MLqkv0k~& z@f;2sh_WV(5$k3;6UWM@{P4WBBc~KX&bZn)`9$QP8lb>fLz9$(%%{VoqjAjMOJn-< zpkqqKZQLKDoe_m(!$7F0%`URZeca`-FJTK|+CH&*Qi*fGmvlk%o2Dgecsb5>^4G+S zvo;M5BU^%z6a4F5@9NES+ZNVme$q5k^H;SpGa5N=`_U)zr^cou63_f)eWv`>UF0y< zM@6UeF03j%MY2v~3q(oCOhdcK2elaHc8}&@%or zU`iPgA}6zKSqu}C7_Zowu$S|SL#dA*0Q!w2kIJZeD^aR>1v|^=yy`W$x?(!4IYjwc zC`hP(@czRdQE3P7vGN?8oV!USVo$FSk22U#inN8<38Ka6ouPq|!D1XjsTu{Ii7MLH z%bwopl*)lR$l4Bm1lJd-<2fG8=nBzqkHk~_!s3dRFjiI`5!%bI+4lIY;f%~Fab!wbNPJ)KdXLuyr0 z3afEJWxML56RqATPT!&j;y6hj%3{bd#mSmPO^$LV;4Gsql<`b;Zy=EfdA+uoVa5+B z0DeG$zXR}IHF+gw`RHVKb<*u8*&M4qPZySzSx~`E+~xA9oJsp+V=DWO2oJs$)X1~+ zaEyd4&SF!SmQ@+yvlMn{5R#1IJsSXKHBIM6I|*2ECFJ*6@SkY09E%JXgMtejV#U*+ z0W_ve+-5W@)nPcENqrEtipExQP>(SO0#b|HsB5xIoi+!bYacR-xJUxind!0V$q4}a zj0+iWY&}$X@VvBnlSEX>88f`e_wzAs@$}dzoVBa3xFPN6mn6YSey$Gz)AB&RhaQLrv5(PvdR*1C z4X75WL30ZyMJQPw3IY72|EDR~1G(Is^ruNe*&;I&cGyoL zalxIMx$rDo3$N+3D2F9qkD>f5NGpwH-os@k%R^aV$w|{5k?pR>MkK3 zkxf6ebn;3nn*9Wi$RObL)Pg<^IQC=2JNm_7PQO)m=UF04q)L&Zh-Q(KMdDbUV6;jJ zyGTU#zJy*%r=r7XVeVDrqF9z>ZB7-5oxE%mp$W{~84U|Vf0}xhrIUM=WOy7NU|vcf zQkj;5P7qGgEEFORq<~R4mUKZ59g|6kWNGT9mLqZCEsVvyTCPy-BY%n~q+fB};cBtL zR>UgtvZ`Ui87$DXjo*G$gGE>fmeEM5ob9vPw<_2zr<)h}L{$i@YFrq{w7)S*>hT&5 z9A+ArbkbS~A655e{Sh%Cla3G5te`SQ9|rWU$EH+eVmfE|Jkj=cI3g=dS&Bi@=)@$ zeH8wzxhN`0ZD@9`R7tb`5=l7#e1y1+vk*CO3=_$>-`~ZU(imI(zlI*omx74&9T`w& zBj~sEhI*9ik^}n(ygwGHXlOga5AkpR3Ch#jAJ!_}i~EhT6-HG-nFGFMw?N&$Pu<6K|pJV;mKS@BZDJ`j-*OXqDRTqgIgn3-nAF&#MNf{U#`rRKOS9oAc8ll5_ zTVd+hdZK5R>Jr)k^8gs@LE$?)2guSaZu595*;`3EXrLE%clY1D*@A#Z zMkITO20#oY2k;p5nF(RW(t%V(Lq>=Fh$Kq;AqN1_FDGz>yyK&?rMxaj?$+=y(Py<( z>e8UpMy76HtjzjkmVr3*?Yqr8ckUeQAIJ%x0P2&ztl;n^alL+fwG>_gXfb(b&J%FN zyBtAeb9hLyv%mVQzx?@6ehOXb|Kh7;qb1S)AG#~KD@v(7&d$OX`nBm2RA(*o)=BnNV zeVB!&W&f!QXu4w0FD8x}!Zb1`sRJ!6INd2kvAX>=Yy~S6#&L;X_73kqeEIn0+XqixKYaY^ z!PA$w?moR))Ys3y`K~gieRu1@H{ahQSK8ONupiyKdHW$T!uMb@dis)xwug_N!+{MH zdUyYTyap`z@x&Jbk(C@iqnSza<hU-i zrJ}6vH*;1OdfylD6e~4^Xv}M4Pz>#KDG0c!77Vioif`f?Zkd|wKn_!3vx5ok3>&d% zPafx7W0s4@jM<2)vxf92@1f(;AhdxobkwbINhL>}Z~?Lh53=SwT@Sr;GtG#USUfNZ z<0xaza5jEk+^pg;@JUZmtBR-vbIhN|CLeG`C6xjP!i!rnbzn;Jo5lna#5_hd;X&L1 zLl8?4MFNU?pZyh!X)<0^Zwgn`Ln94b(xsmGIFs@N=7WeAB#7mpgii&fcJk{!Zg&xW>gRB_8e`3PKfAvNAhp zDM^wj{C&V?oX66kfRjACW%#E>6r+@g`fH!4*ES`pf&m{{W0LucJ<{O)3Tp({Llc-n zf`&lI)6hWmD2KQ{9&P-&aq=`=PV1D=d3|%xqx_?V%>Ln7%l< za!hNdGO6*BU;Y+vr7m4fYQ#hoDjn~1rUqkU#d$R&wz!O6R9Iu7Y)^8*D8sc)nqya@ zpr1-k4SuYmsBof>@Ly-79M=rx3s1BZWsTN{7v#Y6Qanf8LWL)|+iT=hVnZ`( zgR!CdsS1Y>PXnSK=;k_4Z`!xM!8S`LoA>k3v1U;k}~Sde@iiAhnq+2qrsc1 z?tFY)OBl~BUaX(3`KB5I!k*IP&k6l_axEEr#~B6qhMKXL74@|jXlH3}>Sn|7MXZ*0 z`CEP2+v}7y5jUsoB2rwRf6D@<=3xD;jKNgC6W2Eziuut5PqMyf|M+jSfVGNvlg(Je z)kab=Q5_PB<40gl%W`FFh?dYuCw+ita%VkX+mlL^Wr>&Zy!ELJBMyoXe2SgX(4!;8 zw{Eqyc`ZThsI@@5Qk+h%luw;vq?$Y9*gkR$Xq*+`;(@Vi4oj{dpPZUsSYBCPnt=ud zSp(mN1>0A?Q59;wKgU!{b)T=YLh8n~Ga0o`Ti?{dt;sJ#=;W6_|HErY0kcup5J-uD{$b1!lt4kr`6I? zt*6%k=`8YrHm058U2dpci{W{FZSnHPD$TgNx5sANeDL;{h&k43L&~vJlh?L4F&)#h zQ$RYu`sUX6x9*(lu}@wnL^tAqutZc(C3}TrgxVEzvf3M;4_ZIxB@LY?h-hMzC0$y9 zftY^S3fcY;3M9tNTRTtQvu(H zx;%UN76u|@Vm1$rzs+9Rl16a`i_F6OJfi2r2ajGne_>h%Cv5#>oe46$WE6RYU5B{} ztJciaI6gv(4K2~}`o`K{{P~~LNB__N??3$EoA0-F@F3Oh=t2QU%D?}&{}li2_Pe)z zA5ULBezL!_Ma#U{+^p!M0=*}_6Zeeso`d|(VJe%#RUnqF7IfYqY%P$YUt zi%EY`DxMfrPcMKWkCEa-rTXH0oEG#5-fZHt^vF?iq55bI7A~SfQ~_gT@t zyss;q2Q9~CO;*pw`r}_MDpm~01)Z74PAe~{kIA_lSx&v?crYV@#|qqz8z+~cYRXp} zC^(6U)>16@kVm4BJd*&oI;%ZN>dLZiws3f}KCAhfzfy;s4{Zq zE*Q*9#SnxjnR=RfT-0uzq0T7~(_sQFPcdg2BTn;*GvZlFp4#sWY1im1BPmNtR=HxC zQGt|q(#4@Ay;b(p4X&WV1@2{%xtbeG9v|89%p+;5Yb;Z%;klyA(+EPh3bJkZ6%SRW z&8}b8A7(CSM)Q>AuDZ+sD7SUKtwKUpZ5^cRW~?*ijTY3xRk_a+Z^gIz0y#Fu%J?j4 zdM^M(eXbrdiqIDtRpp?p=B1nqM3RfJ=Y2KBl6r0im^f>3!M-B}80saqo%2$do1j2k z5(hHQ*op}G3>Z{glpxRnN+~{(Dsv^nPv@&?&KU-@Bx|PJSQ>mQRM0vL|F5^KF{z7E z;E8AjRxQC++P0`h!Gwf62TdPLfIg7(G#+2=ir?-a9(R&I42a%U7F(mpyv?l3+BF z2Hbh{9AN34htIzJ=I)(G&)_Y(egE-IGVb3lKBHUrAKtus|L(&l9KnA5?ByF0V7_=+ z7^4H0-HNSbmw}6Vd~RW8dTMH6VP<}2a(!jt`n9!BKfPQyqn}*=?D}QEM61j5P+#A; zM$)vUjkN{xrjcBqq-o^Wzq~rLwldA}!t~gc^#vfFOS5A$6Qj%X6Vs!Eb5npehCmp> zYBVuEJTpOJwK1$kV`C*WbcP3}Cp#0P_#6g0?B>OD!o~xpxWd3uT}YIG$%r!ys`%b| z+4N2972*r@){>wcb!&>Om)I$f`3K3YwI`(X<}Ko<``VINc+icCFIv zSFR@#2xJFGOonu#qNN&kIU&HQ7P8S z4@H>~tT)6=Mcu&4lcqC>PSbFyIbfQw^G4U!pURKOHLPG7NiNCRsze=@%mS|@1Xa=9 zRx&^bo2-#+E`wwNTR`>-L0TCy5^{VhO@kUJLXUJd3JD>{s$Fn&bc9M99etj4hwCe# zIzm!(i?Z!8TigY?jR#YZ3XeHQ=?9%i?8?|>YL7_@V;v&{=6J}G&F;k+_8e6^;XjfM zabCw5T~*6pgq$pD<#W(%K_d!#u7oHW<4()GLY=86b0eEdLHKCXL`BhXTK$tdte9%F z9ag9Eu$b0NgouDnh?(JCCMn|~C&DsmOk@8T5f)l1WWit|M0DW#9ZtC-SSL- zu!()oIOQ}4yPzX~NR`_9TcnSG4qbvO66y=m&}6xnPf@^fJO-h9F=n+X{>EU-w#a1? ze)6E&*DWWWD;iY{`bWbMs`cs`0e<*BD4B&)pjIW44BwJCFQZh1S|}OEqa}&B)}gA1 z;r9*h!81JcmK<`(ssFaF}M{`}8>^+!Md>5o3Yc6l96W3Zaz zozW~a*#`v+P(`~XoLlC@&?ms0YUaG|Nweb_K9FOme^wXg|NX!E7h|JXLyBrW(FWSb zdYmV|b%W#ir=;@y(_)Sg@aEm_-~RpYIPyhxM;o8gIH#0fO|_uc-NtmTIc6FemfSr~ zWGi8hI|t2^ZAIC`SC;3mY^-wM&dzQ@MfAi5JgB}Q^q?e#1$kCa(TZAX8xZRG$Rk!z=(~QlKH~mQ+OSDR16x zzk9chw}j@@iY7u^`x<_Ld64Us&j3M6U=%D!h%2@(?DDI=O zFFb#}h0lYR#9Y*?`%C>Qi8vVz?1kf<&cx*S=H}+32af>$h!b%vJ1kLH!NM>V_||RO z#e`#QQn*-abe4_pbbD)mYI^DyfAsTv4<7&j{_c0=IA^hNeRY*Uj#*ip`FH>1FW$U- zy}P~nU;e{Czj1Y=uMecs-tTTce*9t+>@Zav8yh3ei^tIdC3|56VsD5rDxVD_sM8sO zPlqPgKUAiZNRxc8SO)f|*}M!Yr)2yBkZd29*b_BL) zesKnG$XI7=YI*`07}pqtm2(TTi;J@h(^Dkbxwf(R`PJ2x`I)6fa_)8L{fRN?ErwAp z8KU4Bn90*q<2~sbXFP+vk5WSU>9Fyj4JVgFod}_GE)YHD)94X~7TqdTjW4yx_&{H_P8+EI|x?1-#Pt5u!k4z1lpqMiSxQ^pm7@QjBkE0!= zI)J^c38qwnrKdi4Cw&0CM|KY0lg_BXd5 z+`RjkD7MGX-#mN%7Q8Ac(;h#2y+v`LLW<&}hj?MKrLnrJb$x1OVfOOc{HIq}))r?s*5_B}XRfW!uPsilFHTMk4`L^Ry=ZQ77$h*H*VCQh znX!>du@C8WFZt1Wp_s$7hZr|E-RboAht+6kIDTvlM#KFBGn3;hOS99{W2lCh=#UL6 z^EHW*FX4wMBx%oi?FEPj3Smd`K*F$OB}LJX9g94yCWK*VwR*Ondp z=1G;1_|1f-VLfH>q%f0V10;_33fqs!&+vc%p_J6fiJKeRkfUQ&XlX(rB2zjbq0ZW;~<)t7-1TKn&%ECJMT`+W`BZS z5#q=n%G4Md8K5%IveBo-pH{5i?bF=is7sZN*lq>CnZeX&2E%B;JliHW2>8g{)Maz=I z0F@BhyfYZCAS0k}Sj!sKG0TdC$COjh&5ImnvOP(ht|%Zb2Gr7V7A*FgK*CQLcHGE( z;+8TDM4T$fT!xNG3g~b3H}0UOT%&JCKLbiiH0m<98|}SA^_ll-eZSc41WR$q*^X5#dWtN{p0EMjxB^ArXHBwfM^ zxwN?O*^TQz{mD;${YSt2lVAVxkAL;cU;OMxKmExUpI*Ou8Md3Hg@w6U@^lbEgXj`d z#voIP|J5O%L@etU)jQYVT>(P&bSm%r->k1LnxxNAZ)TajW;2Nvup`>=Y4*Dh1^=md z&9A<@b?^QoO1PLW>ZJA0HrKH)M%`{`C63@tP|(cvqyqI~n+ZFUkvzj%8t0Lxw5 zcJ@w5(^||k<+u{ELEyvO!U&>boriAk?7evT2Cz^4ysMXC9QA5tO6bDG#hX-?gVF~Ze?VGoM`P0w;>wo>1%Nt9NU%dO@{@;K1_3bD7??347 zo1C23+Iq+1T;4Imk(qd)JSBvDJ>71IRr)kl5kCfA3Cc1 z8x`PiR4i9#428jp<}0V747kadR|+9B2n>;!FWmRcU);gH!QRue;}b>f$Al?0>hKV! z2l91Xf<0Id02qzIV>;fM9PcoZX#s{ijTr)RtdaeE%m0FRF0e4mM~O&GheSrGV{5f_ zNfR08TE}l^oRHXtax})a%`a!YgWLm8HnKRs;^UVM*eT+>%28&}BIslmGwDbBu7L-2 zkLU6esx)myg4oqGJ{TEhX0!ySa8kovY{9kua6l{|k26nIjWG9#B$aoh$A0HS>bORc zao@gS-ic+~MmdY=SwDmA=G$uB(2Amqf{G+2wCoPZx~ZzXFy+-h4~Z-?o>)uwseG4o43pZg6e9HcO6XI`c4J4Q z+{&#Mg95WIYTLOX!#-3VdQ?iPU6!D*0-39euZ*41DW&VN5#{nEE->0axH0wDfFgp1 znv_+g#Sccr?a4Y%+r^}-heL~JnRhvI&E~~5uWRh&W6l$$(zB=@*(rI%XMl-H2x>Bt_#UmywQ#{1k6*!I^ytaUdyk&o zz4r{L(Y;5{Z{B%K4BD-GkAM67Z+`RTcfb4c=C`-+0}B4`_PuX!-X~q!vsZ5_gqf}7 z?Kay93l2~L#sl)!L?zdsTw0!ATUow*WsMA^SNXlR_*uoHZG7?Bl~1p&!dvvkjdf_S zACq^(B4NYS786Bo6JCNJ;^?)v>ZwNph9|unaC3b;1DkcW;hHYesQC$fyp}xlK zRO?y1hB&uaotQtFV&Tvz3r^|XrUFzB#5|*Jd+uzCb|04UN?5MTw&s2kUl{DhXdO=A zHZqSaatS`I+>Qn^mUUH9Djl~GqLq{N@XDB0;ZbB-*xAFL9JbgBeq=`Q2yod5t|u-# z*{KwGG_YzJ_khKdA;cn^JbJY*i49cT<*nMT=eoys81rk{K^T;h6I~Lp6KdcjnlKpj z+=*%SZR*Vh>;e@VLA7;y*#LZzz@lYnX3r4HaXuf(E(0Z1>{u$p( z%eu!$ZYU=$Yq35Jk}8H}Ez!ctH%XtynZOCB4toWnk()+~OA~dK3{Rl~tZ_|%PziUS@)TZR%*d{4N`yg%Q zpkf}D$&uj3^o5R4Wdg~tsgEzx>4_+1CWo30; zt}B8_A!OMjoC!9OLqa1f3I^S9aSjL6@@F@${p?4d|Kevq{`D_@_RF9B_~$?V{PRz* z-MDs{*fCsHb2HQPL?X>h&*s0W=^02C$*(=er!$6VLAWM6G7yu$_|sqgQAMYDq`g4!nwBztA03uM2y&CZ`-k5G4HYfbc=`=&lnBX}w~r(wvddaNI1NTB zNEvKuS>1z+Hm_AqgIa*hJ@d0u*RIfLpKNV!o9xNt>**gaHmtp56dfreQKeC>>4>}c zo_zEDZ6L~_h^i10WZz0ad!dcAcsln>%H+|BIWN8jI5K%CRrhuHn3kA*4Wb|7L0GTU zs!b9k$3F!^kFB>9dA0AZLFD-W*!edk>+(G8hGaP}9i$XImF1^{@BPDP$ znb$r=tsp?AS+E6SeE?NLA+KJ&e*5+73+qoX`89EocgUAlvdgU|GjuL2y?sJ-oW8 zMm>fjWc|(UJ@Tw=ZSPYu5pZk3zH#iICw=7Ku<%h!Fx48+6bv5YICokUd z_x296`EdUbaTbbeF5KJQKdoneV3))|MIpFPXd7k}??uKjMCc5~N=c5F0}~;THQKxE zK9MZ>YM^paB;iP<%F^DM1681s#n}BNGJu+>{;boa}`%9z%x4YEP&Ze|CYVSi{fEidfreCPfNy+Ml z(wBjoI_R%Oj-xl3r-AwvOs05(9V;nQUkcwja>_nF3^h&NPP1tI;uGFV=W-c$6eC&Y26(m7 zgiFJ8mI|vZ6k99;nWCyoxO-($Ib{WQhr*FW-MF5ePI)ggqDMawlZy&R^E5kWcZ48f zNM4Z*vC`F%>QVTKBw{gJ)y5$JurJBBYdR#dh6{qCWkalFX3QW)Ld*k~02w89pg`!F zaXh6FFvezD2#1eZ;F1lkR7QP|$+lGf4PLeM#*9e7M>wwmgtKe!>>cjyvnP}TfJFNQ zSig9^NwR#Xi|#ypj;RP+(!(dOZr*)z=fP75uz&y6?LT~b_xE4j`u#VzfBWV4-^Gdq z_4Td0kIA0)^u?POuixP>AwG>v=ONwirllZT0nCGV@8$|&w79ms2!#3Cm9=YERyS6b zuWqb-eq;S-UtGh4^y5!2e@^za&>Q{e)5|xmtX$t%yt=l0_454OL*YIJdSa)h0NoM?mnv(x+^coFWIKKhbf0^86~#h?{kJp+Y}qr@RvEtxU! zThK4eGY)V@7>4OYptTJYLRm}vO|6+BcIR6R1QkZj+{6gNC<*cNDLIj9nk$bdq_Oyh z&Z_-`)9VV`p`a}tgntMa*ioVym-5IYr5`^Oi?cXJEUAP&D6 ziJG=~93L@v0D?N~;}yxIe}kHfhWyCW~J_16TktZ4?qNQlE-Mi9i_oDtk#x)a~mxY3`%YbA1OFm!OWnbkEXF`(2* z6E^FNb#q9v-jeTm3_>{PIObvI#-h%0dTaGKbwDGQVdM%Rg+WG3@KP*TK-VO<>*Euj z4;WFFT^1no^D$I0DwT5}Sz}E5s&iYErqBohw_>eD*i!whn+jdjQ1;fck!$tm8VTe% zqf@2D!<(qm_0q36r%8)HO{&!p7CjLtwa(h9TqfkT_5nk60t43188zNwdy%kBRiMAr zEU?*bB|@)7Lkte-khxO2sYV(_7prRWrj%f|r8*y`5)Kc_@d!>a@3KDf;QSD~;d9kX1v>c{ttZ+he0Q(&qwT{wc*YX6 zdMG$L{~MvEg*2;>`D+#WO%>UE$f61@SExv{zInzcI40Fce7eo<$ZRayEj^dj*U05B z-%({(JGUnsCygqhdBxRs8ra7HZy=k{gA5JJF>957)-}z$MH!NO$*x_aD>ZKb5b;*N zuWiL?HaavwYPPz%rgf0hjki^x4Qec#8j9peBt#}RdkzaHd-?3-`0~QsmG#x@S2jMq zcKPz^>dMj*f$tOJ6P@9a@$s?giOIRynYp=HFhh$A3uNpDJ#_ubI^sn|l_exIO`HE( zj=5-XT2h)*RI@U}Si>}~HuiGp8^8PR7WY_Z%8-N8F{bIxwMwrG9|QR*=*jr)4bh6rjf}nwT&goNLPy+xfc57N zo3X&0zND%Ir@>~b$6IC``8#R{=r4g-HfZ*CgvEDnw;fLzCq6oGxh}XXCd z#)gp0AeuxD3;PC-t^6b4J`BMywarkrl9`!FdJmcap3XjuIf*8RfVm<>dMm1*w7xH2 zZv{au=V%$@+2tTK#tcMjyu|kN`Yreu@ppQMM56IH-iub~jCR-{x3{-3Lo`5N!zdBf zgzSiLgzQe6gmU6z!qYlY=?hyB8@5=+(ma#o3?xC9@p3!STu9P=xcXPLd*m&jvcryqM zGVN;bA+I4=On8Y~l@TjK9ctx(lyr*OjO(`$K!eGi5i3|PkRxOpnvOG5lV}zMpp7tM zD~CO1<7&`8kVO2C(FM!_P6`?rSC!6N3hzsoBL~sUW#$NiSYb{zSR*E9jEHxc5Xso` zmo==UJDP3ofn(2!ubJ5XY5RhUvUVpwu9s+I=aFViF|*K%Ns@WX5`mZz0TX=#)-J zn1c=3RjIZ9neSY4TMp#o6Gd*`Os?m$Kx0mX4@W{SYeKk+y1CvZ>!!Et1&VcY(L3Dk z(rRB6J|%gCth2_fi^gQS)q3VmCv$2@<10O|E+y4Ju|HBy3M5qjp*Oi-w<4ElB{Z;$ z6_Wnp!6BHZhOL|gvxTr(c#fggwvb#K5{kPamCzEX6b$P^+BhS4UzDx_HeYB};Y^nL zTDKjXQe? zI_J9_N!3%;_yz(~vc6l%H+9&T;XcZXV=tzq0U-%o%xY$9V)8yo&CHNsidz~{yPFh# ztfl4VrymmHM@xczQ+K6pXj`6}xnIhpGGXyp)w1hXHG^Ce3?M)(;VVAL0oNl?j_b=J z9CMgV>gEo1eZbNm2V@n+tpbm;#@4f_jLd^##9W#TA2#ec%4WbRSh}GA{PN}>zPbI~od+aJyM6Boh@^WDAyEXNM06T{11wR;mH8l< zk$87?BIfJV^fa`5i}Q2qtIOA}t=+hO`HRnPT)n)CIJdF9aQ!Nj*h?ELi%WCUM5~c2 z?fT{AmAUD)7-5Ff1UKIbThgEMT-Mh9!e8>2cLP zO%4e-t!YK)iucq3FQW~^sS#ZPlE92#^G=yQiN%WoIo53#7_@J?Ro$8TI6I9%GEz*j zlcTI=A7!RDF%NrzVJKXqXG`<Hb(JWz41=3e!!<3`!!c0pcS06Bu%Z zX*QZXW@tQHHNQ?J{iv5J1pjbZZI9!Otg7N_3jUj?$?qob10N}wf@Nvf0N7WR`Xw9|ZmwMu_yvJBHZz_`D>2&igW=)+ zBz8WL#VnmJzNRf8lq^6M14hnOV~t%xa_YigBjQs%hbbpf$y`h+%^W4_L&y^xWEC!O z6Yq;4B{?}?u~sI*XD!frQ!AYBL%ld-9g|(CzfZ*SFg~?j$Bk2)pB2-{rJ~CLMKyw} zM*qz93>1+CfoPVzXk5RzV)59ROR{f?qN<@EPk1b*!mpzk2&1K6Op@nETn1_1%i%@&T*+yCxx7)v%z!!wruaB! z&yvcay!u6_9d=OnOV%UvL~sU8M#17^wms9wn(9N(m4+c@4UL2PGp)J1vLdO3@G@Bc zkoH*aJ^h6eJb9iks(kS*DV#cJnNfz*?WuK45lT3*liIDFyQOE+GG(4S{&rStn-IvO zY~ciKzzlsL_Je=}iEkA9d_QZVqVhu$W!V|jB(01?%mqhsr3TvK2C2KmA4y`$In9n2L2l)^04~CC zUR+#m5OlTr)(&b}c0H>lUxq&e-Idj(pywzul+AKBJu$w#I8XTc>T=9LW21dqfx{Mo zW2X~e#_Uvw?=p${HAu<1;K!+IySdW4nq3G?XQ^{}*LDt$zxnnK;)=_N##33wZGT_V z0cybwha!0%hmxCnUPHVlNR<$;;ZK_}5iVeVrmt?SvjKp%D4TxyqGeM$bKtQw1Q&UZ zBMW^Sg#^J3R|0>sU_N>F>dS9#?%}A<^fcn2+@2Zey1^UWe$^=*qgIUW!?1Yq>Ma-_ zUy}Npbh8wUa%>iSlUyMHuI6XQH&*8V=qK0y;#Z&j^7Hl2)-l9Q>>nOs9iUIJ{`6ND z3pD6MIR~oMBLzhEZ~c=dos9Ra2d@+jvAGT6>WG&LprMvlbz1hIckeby@eV$vh0a}s z-4)Ffk_Mq+{P2Xm{e6&A+@dD#*mGL(B1nqtQKyNRKt!huVBIh#Kw_}CI9KT#it?Fv z9EK<8+UnAu|N6&2|KbLGLlAlXZ~xE#pa1p$>HmwTbQ{xEmZ4}PpR6t~zCS#8{ra^= zTcwT~60rCsQ7h;xRC;zyrU-4qP&2?m>OHDWZNb_YM1Uj+Do4~NOo-cu?@2=6+gEVo z`p5H-jU@hP;h&nJbq=*fAcIq9HBHF4W^6N%0%cX7?BmkIh;&hGs^5`5h|9yv$1!Z} zS^cmKCS-%*Dt%m!xYtwMt#~pKOsRi%)q2w5{t;DU;3Zex8OWa?k*nLna3uLTaEX() zzHyFfV5}&CFL^o3^fTbDl)NVh?&XUrXHI<;k*s3J5Knpp>an;Dbx>%mHgd;ZwYdZo#9T#PNZJx( zvwN&J%U#k0nSR_^T#q>r+u|WFI5j?cbsbe_g4GNiW@db3qBA&Mzega~z`9*|!l2`KOp9f5daR*i5HmFUG+ z3See^lHtNA9j9bQsPh$My96XxIcuW3J0RXsk6`_=`zg^b^o3M?*54k?ct?I*eU?9o40mBIsb3lsjXV$BofXkHxwTyVxFD_66l8tUisS<+R<2*x7Ps0WItj#y{^e5hc}JFYAeAi} zP$hMySW`BeTSg93eqR^_E90%a>~dMK?>Gziz?Kyjk}{l``J2U)zH=rs%a zL3Do>b4EMs{2_cvymVkDMcSf8Rb(HRa}CRr1eDQn3|uPhRNw`Ro=`g)kcCk~Uj;-N zInIp5OU^7imm$Z+hG9}U0ZNK?JeT+6TbWt7ThA8nYK&+-RF5SVt_%;3Il~XdkRpv{ zI{;_2|DMcduikFIdbjiX-7XwPckVyCM=;uBXpElTy88rc(O2K!|N7>A5~Y3l-M!y^ zeTzQ<8DTK`lHcFn{=?U|zN_r}w{PBgKr;RZ51&DU{dTk5C?BdLSR2bdz+TLXj{gr1 z?8SxYg_)@<>&rK;tY5nV(e*Tjp&OT%KfSzsWwjFOUs+p#&uD3Oe0_0hab|RNVSIXQ zn6-3fav1jOvEe~jt{3OV0U3=$fIZWh7#U_SnHU>H&OvY-A0J?lVYgtmO->F&TEzas zA~n+6N5TXq<%hEL)uztMP;dp9q>AyU1{c33r(r4_W3U~C@yDJr`^o9ax%pL&kF?b} zDGdsv%u35}9$FFxIz|)o4`>$e(v}AwB*j?99+%gwWc*{@@!jxSuAxs2{ZVsd9WEx~;eO;LWqi{b8m!}XpaiJJJUO`2s(vnVVj6tS zs1=%5BV5yYO!iu`2eKC9CMndjK@u^0^?r73t!4t9N}&6AhnbgEtPDD`)tG~pneUR} zV(r8A4DeP|U2!0Arapc+pvj~_=LP8GlMEmxRhE)IlYmHfPYFfV6VacoUL(DMQ3fzm z53Z3+MWd3LM9hb!2}9x=rg%x-8EJaygAG&FuZZs0|H?ao!5b4O?NTg4*-KP`c@ZpA zfzejw4TbfIyb&Tr$gu{Xuwiqiq4-uaWNamUJWf0guV6lDrK{M;r52SFNH@4#Uxi&a zG(Z@FM7tD+FT(l4ThpN`d$Me(?hA;pJ9T?<+>$7<`AaFsbM+)65oz*Z^A;c?F9wxW zdE>n6D^K7ZP&JIcRzlQ+U~FNp89g~0TV~@nYN6VEY2-y0l|b*uiq9THO=#OPNaMFk zytpJ_-W{oIy7D>XGGQrb1);U zw$)}#ZP|-Nw}><`@?YWC%Y259@T7FYT1gsE-*>V8k~_Bhe3FY11^a5+hIQ(ikY0WU z_d?+c-shV&yo^zx7OmiDD~VU~ey{gUeKEc0Ri^JH^2qySr#3Rk$4IcPr6VOsf~f1GPhL-ci!1DQx$oZsAIwc- zyLm-k)+3ukD3GtD>4*EMu#Q~npr;WPqcb)(Gc!lC_zVkdbx>JxC7GI@B##7pmyqu) z`oSF}o*sJ;;t;nKi_p^i`r0zapp~V0KqX^irS)M^K%HNlp8;UPY&C6)flj*kWTA3! z+oxK8jK&JOwj9)KPDtb1dq?M=5T!Cfj)!p+;*rq`G{cfHG*pQr%4t=*z2xt_l&~^= zcWu}-idiY;H8nbo8-H0NxHZ|<)vFsU420UaB2k{%^!V*&#ztF!&&s}0t2EzJ70fGe z0=|B`iSR^p&nL~l(OR4;BIUP-IcOZ}5CF@E<)bU)wmLHdi!Fxjfn>vo_vk~qutYn% zc*LluS;+YR8p|RUP1LMQUvHCh_Bb+r`GFF|O}ic(9?=v53KTS*L4{d|VTM#dBoU&U z=8y2mmR_YP9IHY6(xr5j?Qp37D8>RZiAJCAGp7zeB?Y8&>qH2mDot!+WKi|YWT3(c#*{!W_^sXz@&Jo%GVQsUJ)&o)vTy+;RZ5XuGD}S6!@Sdm>}OgP4ZZZ zBr=UR>v@Hzu@=X0X~fxS&}U}P*C(te#!2Ej!?CZ+r|s+&a1;qd3Tv@F9~d9 zBGK-q6*CoaG^;{w!-OCLMRuEy$zi00Lf{GSq9nunn9G7QLU{Dp3(Sn%+vTj3E7M>l z>Q4ehcRl(*ktP9XXL1-BkZ2g)X+8~`mU_|{iZRuMF2cTAlb!0&lS-MXYQt9Z3<3Lc z%wZ_xTe{w@sy8?ncewJ&yW_{whfkWSmQEBjikXOwp%W9KwbEct1EMuKB^8>5)T?oC zxT1@D(>GNz(b4LtU|Bp)k{Q9}p>ZV)9k_NcdA z6S>#ykV4^DpP3zz@kCYAcjk^PDG^D9YXmskAg(R$0?wLJFsTx{Lq0mig-|6^RYfA3 zCMY2-hO*a3YnlYCwFYxNt(|_!vpA-A;yyPgMKTPY#OfwSUTb&7NR?h(>2SCR3&i_` zh%i9NWr_Xs;OKHUe$L^dv(*CZy-Dww}FuOZK$8SdQ*JCU4rex3L`E{r=7a zB%I%Wd+WDfefQP(cYgcTx4-}T<~O(Q-F@)n&i%&^A3uBg;uVo;{C*1ncz2iTFdu=J z!au#RFtso{wX`$~9rcyVOY3XU8_i!{U%Ya8d39;->e?bpL}gD~L@Md1zkT|q$DxgxfeHz<*=TU>BN)%3J!rmKm&3h4`lb84k5_stmXi za#za1c0r(0WPpG%4OlbPmU=q>YpKbFLJW@#RLqkqLu{iFj(W{5FQc&&M0u>a|HH^! z*ix!Wv^o|{9W-3RZb=B(3V+ZE>Zn?t_z^21bF~3J+HQ@3WiAZQZvr)+=!%fT$c2+4E&O<-MmF0CgZ3Sp8FIbI?KY2<$fEp$YuQv3Up{uj0 zsCp^q!)R0W!J@2pD*(~5+i?j^1=DH;!Saa@M>U>~2lmETsnniD-Z^BjBRHVGtQ;l_ zFz-NF{%Y+$7f7F+d9@yyeA11FWk3Uy41!wsIZ$)q*osj#cXTsc^hOyL!OI&lEES|g znDZLc+RoxwOp5qvGxeBjgO+i-W!zw(X(`G1UZO$0Jw8q%aaxnh6fzLj@ieo^>mrl= zM{5@iX!tay94(O|gVVb)!4_;4VM3$~{S@c~o7SnTJ{JHY`^8N5bhmV~HV)m*SN4>T$Ox%HW+Y>T zS3$xSU3I8~oUx%=bdWF3frGgTta{NKXh<8V_1Cno8&LeYMez#a)EqNTO6{i_DU9H= zwQVcTQ$1VLr#O*SL_MffK@0Qz23P3X0@!VAe1Z>8X(2@oB2gcaRv``tHx39m5u>Me zPj|h}ICA|w2|fsb5QU-h&rVIRuYnC-1K;rO_3MTC>4~W^LB+hM(YjiL{cRYagSHt6 zn02~L%O8GJX?ymL&UOz$H%yFAP7Du$JQ$gtnVy@U11~&TiL%FdqoJV@zMh<{Ke1VG z+2|;m{)ki)EFKt%C|%wz;b|h+Tr2q451KrDG26IlJCqVxsJKgD4gmEa^r}pLC&j7&pwIl<-+c4+t$WYkY#k-1m$C&v=z6Ow3vlo}e*84Ux{Yq9j68+VUSd+< zHOt?Nfg-WtIv6VGn3v!+x3>4>L`=ew!iuu*LwLS(c=Y1UHjdAWc;T9%LcdiVMM0^@ z@HGO^&wut4-Wd5;n|!0XYBmVX!KOtko}NtU_es$1pSv%f|FLF}CyddyK@-Q{yA7 zS=xN)8hMMTuF*qOhB`Q7S-LndV@W+c(}9N?jH3itmnpO}<#Ul4e+%??Ubi#0wQJMM z=3{a-;HHGb@Tu~Zv`xZMs;ojzW*GY)(MIGsEYLQOB4y6gu z2!^g-lT9u=(^4Y<3dl&gV`QQsMjrN!WD;WF)Xd_}SBm_Rc6f|J!8so7e|!4e|;cYW&o(7YT| zrg$;q4^XGMkfnqAF*;;~IL?D~G7ki#@PV(gVrVDgJmpa5kJ){~Ep?_YilGEKBA6qt z={4UA2kIki)-jG3?o1L@9%7vt=ha7_6yTIO%@a#o%%i!vI9yWBX{K$<4R;FM57IKzNOCB|`p%?PgqQR6#%@84}7Z0)~?1N-IMU7SzPUTr>p{_fu6 zmvJp27ucglG5{k?zu!_D7(c@xYL7A44!2=IUK_}P=EFP}bt{R~n& zyi+@b0YQGp8eU??+$=PcfQ;sr0G_WdV-s3iU0PpSxU#y0{pj-g!pi&{foX8Xe0F8^ ziyLb{{%qsQ%ED(?mp{M0{P~sTYwL?&Tw7h8pPro<=I6@#?CQc4cBT2L5wJ)LlbyBY ziE-BCp}v{P5%kH?{=Rv#so|~zgfUP*tdC{!sIIR`T$tR`j|?Wr1`+wP1lPA2Aq)|7 z2v!%=pm2RC)Y52A;$$=925N;g7%Ibwza))6%>_m~bF3wZX!@O<;*L^))V^11SMXwH zI^$1vA3E`1@4cplEG02CwSsu zxVM&-mcGduA8FuTx3sUEi&mBqKUcjyc^0P@1k&!)`@6Ley$ve{VvRu<=a zudgi)72kL@v???bYTcPd-xN-ULg>dAg)8{KT*K1oC9bN{h$Q?+3%b~1#Evoy$A(Hn zAO=+w72cj&R%@--YR-3!$s+!-fqJX*PK1Fhv7_w!>e$#0r0-2cw+@qF7A^v$#Tn^K z(XFS+pw~pLu^gv@q0X7 z1iL6i18!B#HE9^Eu4l|8P8+A#5aWaqNW}?LluDgh8(NYJ4Ht?R9L1Vs7xQ+-f23bV z6t0M=QX6E*DIFg^Vh2vd|`nGS1tXP4TzN&pFN44O+*AjdycCk#W=B;m>;PK84=gS3MDpCB*6h9(U)@0%sWB;0F8twvna z{6DdIbPYygzM3ZQQ>>D|1(9p%Xy0mT@z~fpr({!FK^^Pca6DJwDsiCj)rPs z8oQyixWu{UC>O=my2dHiVgo&?0c^hiWC99#6%9fg_2J&rVkKWze{qE-Xw{G7W zp8&2hPBr>MZ6;lt;2#U}p&~RIBI&$1`C@ADQ_IRHZ()x)C|*F_tw`=HcNllD{Eijg zWDHx+*m#+Lpqqh<8pdHvLQ~WAk86l#ALX^j#;2yH%TzQtLJN?@jJx{taml5XoY+)( zZf+Vp6AR!ngTC4>*_7wVnI}&YvW_qTv@v7AutUup;hxMo73PL(lwjq7a z^fL}j^-gi%)wAa8iwzpH9dX^;JG~ZIj8!vwP#kmP|E!Je$4EFS( zozJ3Xmo?<=yG`7P&tAT~``|Ho^lu?5zIwX{{-3q#B4NKld>9Fq7Z<3*<0nt)B_Gzj z>;A_g0h)Vg_QZ!ODha0f^SO;GbWI z$f-zP`N8N31Zrk_VtQ)w*T4S7pZ(b{U%YsZL5%P*rh={u#{hN{C%A3SS4>zVMNp-H zw;>QPU3!BN#*|X8Avs8_0wuNcF}~GYocxjHi&ZL2#3f;rn#cS0^^jm53JKEcGZ=_Z zEDr2QkQu{@0jzac zg?QuHnQ_oVV;z7soUbG+{0Xf!=lc^`Mtl}_7Gk)tA+ubLRbJ#?YB7@BXBZ;KhB0In zmjo}sJROiH3%4-F*2* zpLj~5LD6lt_YU?Bj+n69yG)iNeu&nDjf3gT1;iJ`OjAB8xqSTS4rwHGVwak*;f`m( z7oV1%(!3x3$uG*4?Lxy)8Md^rct-V4-buvv+$j@3|51c1Atg~azL)bzL0`v%{E|tj zskA2gxRxEUA-(FH#qwULqB3X(-Yx-lcF&JubCB+0>MCB0I+5HuyoEanKhl)ejmZ*) z>lwj`cQOHUcS9_UQVn2RrlkTfzEbGo#TrsgEFRMcK9fI$_b0h;qH@Q`E8N&bcr`(k z*%Xa6m@xjtge~Xl2yGMD{5zaf>vmLDly5%Nm_`V20{qr&kn*WVCSi z>#d0*-D-EECCP)BfMGS6%Qm6HWR6QJR8%xu0^3()*sArTR$&8ZTioT{4|77yYf zF<)uLh$EA`q;2LkGk+LC{E2ant(@*T4bX)F$8U(65Dj(?Sm-`%@4eqCiRIwU=E2K1 zJFhnP9zA{g_{HY^$FB%g`}Wqu@9#bS^1J)L|Mt$8-{1cI*LV2&-M4pu{X&UN%-Xki z9)EM|Ax5QJ4`1AW`npo@zuv|@v$c0b{(f*9W!NTOgP=mf$wp*+RmaTgYZHGar=DG^3mSXK|kKI8(30X>h}gJ+{cC zO4CVnb8rjX?rM?w1lu3OVF0p zsf@rJsMj%$y9Y&(;x|2rEtUCItl4y9idEdiEUUT5>@$-oQbN@g_CDG1Gi7*Frb0T? zh=y9~ooiCXvCm89(ENZIjjn{M6=(SkoBPac3F>#qqQjR!p;%s6!{|PDvCEgHp(>xg zck}9$=2!!tGY0uH$xx&&Hpw@pVhYg3YTA%7DqzxUWF6gwOoY;Z#9M_qO-q=pvDk4a zSQU+|DSTn@a8*Rvj%kP5?7Ib_+=$LiZ5q{ukghL_yEs-tDikor^@^a;UCI1`EN){_ zh1#lPLgr~f(gu=q&JWk3QW6sk3m*b5lx_PW4Nch-*iY?f2he-O&M`}gTI89GN4^cG zfPwuOr_B77xyrE_%v=!9s0vC8-BDybYJJ2?(^|EfT`vQL-ZCGj(S0%^kHk`4IK)jT zn`Uk3N;h$ManeLf1v{$Rg^F8KrJ(viuFUo-sISwen9HRxy_kQul6VX@Lg zs+m@^g}n3{jA&a9M%F`f^XuzQ5L4@J^pl1R@6uc{2y{45Fm;4Wwlbh$f>ty(3{t1@ zcI!B(m(L%onZm%g3*zAXDD7%{vRORUQg!gy0v4d{!xOw%IYF47et3J$kC3i`RPrUxi#W-f{*Op$!Jbp)`lNr09aUFBL+laRAwa`)7I8*3+zu$n%9`S$U%gZP!t zk%L@PM<~@y{09OEM==V8gafHj;`S?8m4N~+p%m8Ev$3&3I60Kn9BgfF0Ug@e-q~E= z+`D#lXM1;(L}r}AWVJ-1sIA@Y9qdYFj-!{;vNS&jS}?E-cQVrg@?wA!>3+GgguUkR zvloAUZvAnz(Ez5KmAhS4K_)`pV5Ug%|7O}k3uRM&`0!Z-R3dbal4!j8VK4@YXv`n> zb)w9O5n~t7fovET`_WrGeodMQZld_`EUYN)^iseb4I}3a?kzSreq2Bh)M#h7_J@yN zK!OAOhc%fO6($gXC%uU(j$i=U&_DmB_gQU8!Ua(!S5UI9nFFb(VbSSeD5d{8>n9tl z3m@FSfhGU-0SL`xMq{qQc1c89aJcoLQgT#ebY>tqVa%yUXV@ekIax6%AlmJ2Z9wq+ z+2>k+#xxva^O;>3)8F!yOB61A87OIy#uD_+Eg+1jKyle9pP&PbXwIB9&FKD{BghnJ z9i1O}MSgsj?&ujHE4S|41P6Eb{;l=J)%DfY!~Fw{ER3kV>sJ@%q1>K7Ek-yiTe)rw zNO8kL`xiaRFyJkO+OW&wen^53+}HHiG52QJH8)Lpri(zS9rGe$la^^r3B-$4R5%H+ zw!j>s{T^XGdz))ugXGe1B;iL$UM28wu-jJ^NLN@ znpw3ZUM}+V%N|`u^?dkEfaKQt%EsFAl}tUPZXAgO1eDpD)HBq7X7edD}9^gvx01}*d2@RLY%PZz+AV7SyQb6L2bTCK6TCxI3eaA_`(Xa5OuQVW7GUK-8Z?aFT% zW-V>kKn_mC>|jehD!Yoq9*?*F)UIzAHG))!&+rrVnb|5vzWLgWspOy$24W_Nz7#)o zaz?*h$DF#o0iKoJi!*QbRfhYCx}G4qYPMDz&2Xm<6EX$|0QTXly#dzLdxFTlzdqdtCu|dF;YGn>ng;n^xzL4ri!v z3Q3SriL2tU;NF-fBWOlfBflJ9RKwXKmFv3hp-@h`QZ6C4_-Xoe}(Po*$cqOiJV5O zpN%OHDe?+g_mkyzeRF#oVxw(@#GNhR?R!vS!-UOdf$`|hjXg|7*LOB=-5^AL`~5q6 zH!&eWiG6kBqx)BH?`___v3>8x=AG+XJL^j~cGqw2VSQS>IC-~>5Hf!WKM}jr-WJHC zOXP3|+KOL_MKigIF!+h!=otpNNh;J@~kmuxFc)S+w{>~ z`K>Srh;C;jl$$a>$Ro`w9lM%?d6c#oJ26qTbI^A#BR%52s2)5LL+4YrAYR^uPULvT zNy*|$-zmqIkpvuzdPfSv$HF7rEHtDF%uL$Q;#6wom;y_ST}Cnpc5Z?Mr$4-Z!$D@| zBk9U{kugL#vvAai(&W*~WQyjpOfb|`6U}>-z@N?>vz;BAZ@5S)_7@yHX#BbII8s`j z*fZw6a?r;-Tv;vf)Lu|~{Ip@EGZpt~RxRJN<&GNJh1z6Uh$VsU1|R&M!lch1b5i0` zQ5yzu@rBV?b6V!=kC8zQAxVBaGk21&glf^08j`7Lvk`E3o-4uh?K6$C4kuPtb1tDZ z+(=yeraSG`UIx0Iw`!j<4v+>CEUi*1$BH!`%(ZB1CJvy?t(Vuwjx$tZ2bnE7um&bE zHD)dQTvcQ;b7kP>*f-`m=20^1i=ZmMl`p-mC&0mAY~OL_9M*)#$C6k_;}tO*&y@;V zk;@Axi`05NTq}c;*Ra>rOvA+cJ0*1Wr&(I;zJf{(e1{(`_h$#Crl#f7$aadxBdq|c zAR=jPb1O5vhDw~%9Z~WYtGbLn8rU2M$?WiK=eztGjHWiL0c*o!!1Jw_C@Riqnz4fF zwBBxC45ndoTG^f|g<{hblzmaYbes%KQ=3TyxI(RZo!(K6Zj!l}6{6)HK|Nk=%lH`E z%U0ydKBs-88OU+#FSCSb5Y(0GBMkZE3QZ{HsBw=sn$JNlXP-A|p;AlHWF-BtFFnyN zK5$z#>Iribr9W_9JjDk#S7FrPnPT}yqsmUgjhbR*R$f|K##~|!AX$w@0N60SQ4XOS zlDz@E1Xpuqelf5+A)7X)BTckmv4l_rK6?BFBMYXGM0B=1_Mn}`LCa$;e7PBF6dmGj zDj8~$CNU#{|9tz1u=FEbpl8(nm1Rzyvk|pLW+i@}=Sh2imeHn=a;Jn`1stOb%d)^z zs0PL|d_&+5lJWv;$LhuwpY84W`Nhk4OxRX{-z;JaS|ZvBT4JnWe#Hk25vx!gr11(6 zrbKKSaZf+^@lU^f_*jZF*+Xdub_8ZgNMv**))D&N`?r7P*M5Fycbx`IBK8S!yP*Zy z+ug)Y|K#b*i^)-fCLe+rl@``>_B?P#tkMr3J%!_Wt;agfBfVb7Bz@W0y8ciXExawH*Vj!ee1^B>MG_Q+6=yvjqQz2 z(J?a(^cw^_1_EPWcyq?8I|GLlb(B|yhl6j*zED4&wKl%M6wxX(0{A!|2z;!ErZt_) zl_M)(r9(5J=-<`@mn_c>(NZO2Jfjzhr?^yx!y`KVT@Y$K)&c3FO$E7=BYFsg9d)dj zrulM)+B7e3((SWg&~12MS5_8reevo@P$k-E8jW~a!S7HH07To{=^BWrqi|L{qXB2j z(N4o+aU%c?t76#4mlrV+6s-^`h{EKN$p|xxTtGFk8#30Yi*ZH`@nDXohm>AuP8V~f z1;dlMy#CmW!Yh=HvQW&0(JUfp3|A3pM64)^xc6}+_43&09rT08%`-wg^gHlMet47A zfjpb&QIS5f)aj5I_Dpw#;l|)Bm_%+w)O5F+C?$5l`x|9aU65Zz3nVbXGkg&ynxK9} zbsl%1zC+3vdwY2JiYx2MGvo@@^bNWj z9zL!I_=fy13`AK-@m}5^F*SM{P0cCl)AwrDbY4VRs7Bq`*yGfqg4W=FG^Gv?qaUe& z`RRF&nX_cH90@D!Wz)_I1F^dmL^(E)L|alBNP|zwl(70DT$HIg2E?8ZhYOb#)090r zRVcumelQx#>~9>89IQ+q4Gp!y2`G?~Ic;dOn{6#YbJaY#ow;M4FAmt<^aPyfG*a?B z&GixqQ}lnTfD!4(p2?shpw@Z1eNXs+s#tc{ah> z#;u?|p{d&PW4$#z!Yp8>Y^It#jn$doobHpjGT3uXv8*o?@aQ>2L=T?=mwpB-_7`70{MlCzzk2xWhd=rJlP|yd;m2Q) zI_)Q)eEGLO`TRfq?WceBqn~kxur=6@KKb(7&%b*3<+o41dGr+U?8`$WwWNo~8Ru^L zwx&9^b$mOJU&6-7#<97I1!-w-XPwyIt6Lkpo9oxFZS8HZW6Rjv*(6}?=G9H|nO@&n zzkO|EcVqSX?mDDJM5x`ozIkhJb8{7X?A6`P+~aPPf`yu=dX0Um-xgg8@r9FizIz~ zFLQ{jOx*gWg03PX3jof9={whV8CdaEauG45U7lo|T8sDq{XI$}{G){ZAPDmV~9b1rZk5^N2| zl_}XFga#n}^AyZRrjo(zZE8bCIfbq{zlk>Al@d%%toB#);aAnV=){<904G1fN7>cf z?~HH`XF+Y%M6lst5!^-HX;7%R3gAj%SeeTT!K2c=>BQh$R#gL+@;tZmf`BId+Yk@!-(88O3rZ5{nzHG#P!7&o zTyYf#p9Fq|$(&^{m7T$?rLodCV{}B2(sEBXTHDxcG4P7fGJ*^H;@Es%2xLg{wNQv0 z3AR@Gh=%2jS`7?w;H1ZsUZ%~GiaXxAfODAk(NijBhd&i@w8H*fqGg@TVl`wmkQG=I zk~Eb(**(AwU#9{0N@HQC8)K+7WSBj)Q)oI-LXDtMhNCgy)u8kNiZgeQF_D=W)_vr# zWJzW;%qTX9VOTP-@Z+UgLsTt{ZIr`%B(L>AQboyt+~TyznCIR$^qHrAb#Aos`oS4w z`>0zg9T{k;%|w;mhB9f|aJTwo*>>!g(aQpPd=9^T6L0X19@}W*K^zZ5ww4PpRn|o9 zZ<|y#QwXsg;S(xUnT8hWl~qgfqn09HX`vZez_`m4q%i<3uCQKe^YJax1Nmw`s(-z) zFD)>K*$aAxz$#v5>nS-{yOWwHpT2lWBocJ&I1V)aDA7`Ud!IiC7{s?IBKbVzN{SKa zPpC~3I>GV=hson-hglm6?58kH|7skr5+{B8Nw7k7XQNe8P0mwtQR1wYTv<~5vz!j< zDlFhE)hJu>%?h}So3w?l3fplsJJSr1=xF#Dh&f|vA=+#)X|k6=b8Kv`v*~jN?TGAN zfRHd>AQ~*9H7@X9K(}*6W7!-WONGrJAdc?eyS2T!dO5rX38CelyLYbwPUf0#zkLFM zOZ}jBO{8|GDoskaA08aMeECWn>)=O~ z8!_I(8ZXL%#aO_Ag&Bs>Io@wRN@H8tXd=vYGkWpt#qP?Ly_L&QGk*O9{PrOw(LShV z=x3Nso;-LQ z_>Zx!Y(|di%=&hWk!}cuSj3(^eYQvzv#VQJsS=qIQwvJ(2@yY!pFDs3=n3{s%BGo{ z>S!gVE(`+>)UoYTa%N$rP_%$}9pOaUi%91Uexdg%9t2ESb5KGer7={x#b6i1F%~7Q zh$;pn&^$zHtd~@d0##v76oiYCDUJBZ#T#8cIg%nvRgB59$1z(!bD~Ob^_iN9^NJc} zn5TkRITqy_KBGt==}2>wG|C=VWR!LQ5dsjRWR{fDW@juRlG1K0FXq{x0pTVHl%PAc zIa0A&;rilFW*}{X=vEOf+BJqSiD2X>CeI5MT*1)8-|apwfCw}FkgY9vYP7)u7SyW= zUYo7?AbD4t5hO13#pQYGRcJOY;F9dmL>zp@0p;Pze9QlI*lf<~4y+i=7ix5VTw~8-Oivl!3-hzUGc`CO zGcA^myHrJIP&V~>H%hf}ExB$gXZZ2P=Q{Na1e4rEi=+ln)?UE~d}D@tQzi=ggKR;ZkqB2zzs z_Ie}Q-!aVUL6Pc(L9UR)Wva5&MQfeVdpG(VweX^(VjOJAJ#WBOfDhey75JzUZ&aQ? z>8#QFU8E21&H+|G@OXy*n=Z<0Sc{lS%Bu;ZC?_V*PNPwL)Vvn1WE?5cTuW|(HVJF6 zXj1^-17iFc;flUorVdgDhKO^zmkb_3@6b@i8;3gZ*6dX2kaKBYh0ZO6U$KZ9E_YZft;aMo8s63}IQHDXL)*lt!VMUo<1@QD;g924~bD9O3T@ z6g7zsBeu{yzEtXne8r0;2&+Adq+D_5V3^ir+rPX7ts!kH7lnF@a{EejcKtFTQ>J(@($p$){g_ z_T|GbzJB!6Prmx}i*LVv@C3V35Jumy&+o&f{q?s`!lnI!;NQ1A5VH~EHpwOURj1i} zg0UkPG6OOE072gf%XNd!R+g^sLXy2s4BFP}qWspkuB~q_&ELAVMtIuIt81WIp)}fB zy>fMH6^ji~X`INS~aQIC?->Ac^AtxHLUwum}MG7!{l85NSHc+xcZe9BRres@HPHZ}B>AG+Jr zx3UUiTA`u3zUW$b69W);#$syzl$v39E}L%JE&!)6ahmyo24%<9{-nMq-5TF3w}}_! zN^UgvUg@U{J1LnIMCl=>Q#*{mD1cGxf`-^$bg?J;tYLd*!DR9wO*+A{8)8j}hx0N6 zRDM%hp#0bgTwtX3$!C^+&YQ{72!CF89%YdFo@LiJ>h(kp|N0X;Rcg|kr72@@FD!^T zmNqF}QI*E{ckXE`CvT@YDD;H8<-OWjStjzqZFButAS;tkgX}FpIB=OCUFg%2qPgSISjm z8g-S7oKsGQ8Eu|z+mVK8aMRW%dS)`0>B9V6KF3BAsi8rt$py5#&$+u$PTyu4)I6=F zRgoHyAI|G;8YmEs#dGRJQoR)3ESZkeDT}t{Kl68q-*MQ)7iZV_ULP%%W|Z7Em*m)b zi6`Pw;-0)g4<5(jQGJ5^0)_!jhfw%b>m)*A@vSFTx^KD%;S`kMj-5q@gh@(7rR1A{Vod6 z&;x{z>Ph{(>nj^t_Vo{wK(*g0ZYFlv<_ zlwD>6NmAjr0IB$k=PyaIhJgL~=U@HBU;NDvfAq;ue*Ec|Uw-xZ=U+Vh_Tj5nuiS~8 z3~n538A!Jyi@B&t;9!YRs`A4HHEgv_)t5>(!o*{=q z527vyuio+#Z75AE>s)vN)NJIlF!N4u5cTT2Ffb2kLwbiZhB;L1iCXUU+MTO}L}b_0 zejbg>E+D<#MZ{h-0R(<(ECX>wm-6(PyaD(6Rb382DF>Hk7fE zcA1_QSv-Rfy}Gu*@Yp{n9;dV&bRrfU?w9LSUBz^Dj2d`|DHTNq(#P3`h6=n`qD8s&9~VyPn@aC3v1K5yJTjXEC+q)bfF z_z))n)8k4E<_t)FSO)@LDtaAkT2|7!pb!-?aG@h_@2qjzRI@SaD@q4>Ta=p&@vJCs$k4&Y)ftoyDak113dZ*-2=jL3>5Hy;o+4hjn2^VlD$m%li`KQwd@v= z@Rf78gqA|02341=&yBOAou~!n&#c0byVZ6M9Q}c?s ztTbBM~?yAHd!%g|`QlorTHB+-Mh73y1xAM07+#>kSD7pkXae7eEfx*#0BZfU3 zF~&s-FESP(#c?ubo2_svXZA?apNiY<3_Tuy)uKOgonmh2XRCVYpNh2;cSU%sJGBqR#m0aV%@m3Mv&d z3b-bwu>jaPZ^pEA4K0tq(8*H2NTeEz?Wl07*1E*n%A;nCs*Wu<88hMd5AvLih$O0H zOe0*E6WDs-GkWmk<>TiE51+n#^5WH351xJT&C@Txefs6Y=Rf(`x1WJI`sT^czJC1U zkH7r*i*JD!{p4p*7d`mm!DCEFWLP7g>Eq{z5NRJLKUc#2c`S}iUZiMFkD!O*UPU%r zUM9KZ(niu_EE1}`v$eXnl?<>k6|FBpU%k4tu)QAAqN|%Lh&|VK*Y>uSH~{mywXv|Z zI={WKv~+nEacFIcSmvZB!IZMTe0eD{<20@^06%2n-%g&{wb_UUk%!GnNnvO!RmGu@ zI`4%Zj`SM}|J+=AP%vv=&je#6F>l2X8M&>gorlEBW9%A_6bf+j>b9bTCSE>bkY48bQONb_&~aC>dIy`IQLO!8LIM( zQ8rq4#J)MV9!=ner}8rYWNk_ok2Bu*69eP;?MAB(116TsbnWsS`7(^*lAMj!l*-x| zW0nZssOvyNIC#Ct33tRn*VEXcj{_Q#*WHDcu}j^>V!3!T;f*hK!g3|Hz1UN#K8m)b z=_>hUB5Ad8Qn5BEp8@chu3ZA(<6uouH#P;BCFJ4Nbn9D=cNd&{-;5t4{;IiGwCmu zau7gFKC|~QFqC>Lc_`=zp-iJ`_c7<+NDHMb2%*elJ^ zE(2eY(h9X=%jtJ5R0d1iVhU9X^tPu)utAICN-bD@@Z(q{bt)l9JkLA5#==WXm;sMIxRv;ER{DLNRTHFAe}6%Fc5EkkTfu`P}qSbi!~`cNOmNA@BUYFKdvm(kjG zmZl#q8$3fJp9U76Z@Z10Zl33iq+{Y@ESnf5Wk#c6l@%P`Eub(Q)2W_)3>K4_&nGM8 zj5^w0zI~)c(=5o-Oj>07_?2ajm}QPL&+Lf$Zxym%S5 z5<=d~L-dwZY8AOJpx5IMf?bmFYnX}7SXxClgL&@e=}S61ae?7r-`(E2dGk7@BoY3@ z$4?$Se0*@oe+QI*p!~EMI~lQVuwxpG3$3IX%2-tcB7ohdTh9YG&2V?f`jc6`Jq zY!<_1R}KeAlo|DB5jWA7(*2>d#8hFHLw;zdqMvwLC;3sL*P{Rw2A(tTIFmpU`KN@0 zP+w-A2JkMtXF$j(PSp_FCKrrqp}Ap$#+*uROEH7&k+q(VZnVp3(bn0cDM>c|N}}L~ zX5$Yx9R9R`?vqkcOw3h8sGq}Dmm4il2Qd^uD>Pe0Fda)PP^1T19>B;EIy3uDkOgR! zv|Nol*$Fg5@WDvL{AH6P42|HItZA_g#mYv5P(eJG+=Pi3(y#IjkXNL(+7 zl9w^mWnCGyHvb^eI_y3S4-jqAdv{Pai&`qRE1l+A(LfQ#ZgOEqqdZkn$2eA~?ldCnD5l z8id7ri*HISumg<|sT47IeBRUxrL#FhviPx(t&}aB!qB&--x(>7jYY2BryqC9KB`|i zijM&bS{S)qx(_NYWGU-O1)k=QQhIK+V@VD@Qy1WeAwAYhenp{uuvp!DZ99 z_+~U~a5}g0eBIJ~t3TL)JDw>)s`(jsbyn$~qyTO}k-xI;yINyWjEQ*4Vr~?t`S`@D zOM_*2+BqQD)X#EpREAW8$V{OpwHmlq;GUr}?5o_c4_dQ=I=Lxj6G!C{gjEifY!T(o zOAI6Rb;^%4uK_~>CwcW2@sB}E>3PWO!?(`L;!vUy3x(@Li{a9wP-=Eb*`(#p${0XX z^{=8KYLe#9<^hO{1^cVn7=kAPo6fawIez<&pO=SkULBnfq4wMy{7m!7k$xdQ~^%V>{oLB^2v_m$1_LoJX%of42 z?`^LF-QU?<-Q8N<+E^m@=I+iaDO1;%m&n$?va*1a>1`pp68$KXGi=NqDTk?gkRqA5 zFX_O9jna3LK&wTH?-qqeUVsMom9FG{xB$=naCZ0+$r)ZNc=1O9Vk=WwFvCkkTg0GKes10?>PHX( zFVM2bl;+2HE56F6)>e|eTca2ao99sGf}r>oDMj>$uanz915Sf+eJ_&LnN>k}Mm$B` zVg+n)&Ei5Ndn0K_QZticXyS3i50+)sZx3qou3pXUDlUVR)X`G#q=R{=a3f_EcTpKd zf}u|Tea;}BDf_@#+Hwtj!_{WJ_{;Ke&P*0A(A|oC(r|Z(G_eeR<5y?ANayGq`_np( z1n~JiJjq(Vtg><-$8!4EiUxJZW?wUoFA^TFNl9r!6W;!SRUa&#TlSn+gzO{Ho~Z*jgTYGXaLjb*r8x3Q$E^;yk0{LzX!s|eaI?^ zO|bi|lR5aj)LCQi_$bFa)7D<|Hu3xev)$^Co|+bMaGm zyL}uMtbrDRL{S3WOT_N8hrT*|_3$A%sGjm57MUg#5Eki6G8BhftiN40#mcEOh>(v2 z$7)#iAAITa|Jg76XZP>lxqt8W&;Q(a@7}(N8y##AS23;}Liq9IYjCAvYU3e6b}R-s zRK%tnR$MmMj1KA9uGh}uUi{7xBAG=wH6tXk98nYsw^JYut}#5+#z~%NvVV zKiK+>|NI~Q;cx%W_pklR&hm}>n;*Wrbo8J8-QT>~pG;5HY#h?i)923*pfRFcY<6;- zi2)21bXp?;)eXms?0Z~v?!Bv<^!i_a{Poj=BPXK+TTNpuQ~k-;fDvx)fk_B#v+>7q z#03_lxhqUV$r^>teHkk8H849Xcg`}Lj~Z?g9fXYx4ID8y2;_hx7!3?}AYO1lJ$Uw#r1orY=1^mm z<(EQ_Ig+%V(76hvMY+fc$D;LOrobMT%%Zvbs$B3OSfUT!nrS7Y zQL;pLi$qSNMx1v!qVbW)nI^8T#AfQdaDAnTgl2FfXA#+P&eqg2SxC{n*r!nSfXO%!vFiv3^h@8_LsHE|a`n)HF7(23*gPfXfI6Zb(@nCSY_jZZ0fznDs0sOWHh8VaY_>~FH43*+rjY{&An@3-PRiIP6)3w+!3ncjA;#Zjk zn7_+`%?lgeB7>)4-p&!XIo&O0T`=-Rca)A{!Gi|%R8y$z+BiaP?d;~(aMLLKBuYTP zb%~`Zs>@AwmIggpbncfz)fk-G5rE`emgL^m)#MWH%>}*zO8PbCD|k>Ufk znL4)RW0vfqGSZ*{jbI*g`P;;tQ?{YM7+A*$iS46!C7ZY2=vf`TjI3N%?7aR{jfq?= z`L_Z&R}O!zN%Y(WME;0_=1)c9h(5Xo6rMFAoDsmRK!Z=J0N; ziI|$8EG+;d)fp-Rs|)^Y*e6R0u4#{g@f2-d!&lwZJx*_h0(Bz43VW1dW3ZMY+-LJO z{li{=T(dswXohyqD^X~onl#cmyE*aE*+jwzlwCu^D;=tna(>~GIR|+*b2zQ7p*GrR zx0M>8YYCdInv?PzS0-{!sWQk z6mwov9;(351nPd$%pQoGXqDvGfAXB#lM~<__M>O}htFQV{^sHHZy&$l=Zgo=KmF7R-eyx)MK(Nym#iK3y!=Iz7sA z3;+jti|6ywOdd0;H29pSNW3ELsBf=`mZWa8T_S}J7I4Icky;o=yo*`PEiSTkfuB_U zIA-;sa?mqNGS_u#PL*CFJ?;|gTV6Mo41-kZ9l1O&Mq)1sG?($Nh<1F;A}Os;shh;$ zah?IKxGcmA8OTPUxSFeZ!nl`EV`CM~r->xY(i#J3R9FLIqh3SgY79`Jrat`~G*aXW-r7Z)&-_wR!*ky${~Ix3js1v`%6I zC{$9)^~ zeBQo3K@?z7p`DP>P~2xP(q{`X?vP!4ehH@Pl|}qBTbmo3*n`MSy|cZ2b@%G^>({Pb zCC${eYkSuSJG*xE+V=J~yZFw|&id-s&b3{rnb@h`o=m-&yu(=V?aN1h@gIKh*$=+F z@D@g>847?=^W{sVgy(F9oTz`}b~qaQiBG zG!R-}lB&H4!ln9g(4I|zF~wvJs{{x1d2@B113C_`LGvZ2UKeYUL;eCU(^LbeuV2Se zTmd}|fHuy`@#VuOh6eIjE2awJAb09VJP9#p;u!DUyY;>Aeem+x!TM~*BZiw0t#juxmWTUD0s|y zn!vGLwEv|A)K&8M=#H2PC~O{x8ao=*xZLb%QV+~u)=V>_S={X=R?eJp-C}Y@9d!u= zbfB`#NyJuGSYD6#(fFxT6i%Y^6a%sk795lpBrFl}%?S4dn7fh_6@^U2P*39Lx~4Bx zdTcG{);2y^P48hSIS4?M+G4y1^<*k~oLi>%QIi#GvMMd;-DfWJZ= z63F4vL~mq$zY?5CKg1_Me;!iogA!K|)-_NuYxu=+=$Yo{a80{ZqDQQ(F3whPT3iY) zGJ#{REtL>J9a4TCh^WR2AXyq~NBwg#BEPB-3=S)Jf#Tt5H_DUf%hJ1;YypcK79U=O z>P`=GfMJ;dKt~cQ0G$NS#ca8?$?~zdy}7c!HjmM0asKkgdO|Chyn8#V@d?i-Wj<$? zNUl%UhiT{(U>+t&Oi28BiE$b(##60#k_gwGr#*t1z(M!;foRT`~Mb-@DuVx>e(vD0Cj9lO3q>#G%NYGG|76~sh zh%DdNQlf2CezX!@2SCJ+d1IRkF{6;*3UxRVay37iT52s4CoTr0)VNo2>b8a_=j8Pc@k%{&Sd`5edD`Lbs^XLchXPSJWUQJk>SBQqwK32_3 z4;P!73%f>JW85Tuo}bU;<>{{Tmm3Vl^-OoJZ)S!tw(y&E9772!&7fzkGL7EKpf!@eQqD^KUW7`Fbm_5& zrq_ZP3ztY1(sQY=MvMYpFnmvIO13E|lGp?VRGEo1qsXox7|L;LylV+S9hPu#+R+}pwk%-Y6De$2{5i5hg46*Yw{ z#*dbF$7c9z=rMzsN*1qRm*K^76**n$9Vif4tD%>IelD73Q91IF>le}F<4Ue(uF6J9 zL@-sWnikZo$jTE;uE!OuX(8)r#%kTk)K}c1VziC{J~8WymWuM8oQHhf^mBRaY#EDz zmQy3HWV52~v;$+)#5L58p~VEmeS-B9*9G62o6np=?0P)kW<;)=6!2oOFfHuhR4IN} zTb1@HpP=2JQt_u?2-(oZAy)W|6iP!=Q+kUkQ#*s`a1%0MIM8#7OOIxts~OAPLuT9zBD>5bMvEUqAi)o5x>0e2Q)8vo9Wf z@#qM!c6u<;t8hX2S$9aY0g>{g2L?Vg&da6VcYG)Ry(*M^GP!5_57dE^G zX-mad7LS-ts5jfLTMr9K1e)5RxL4b`TzamyG{K;@rL+`b@U5CkpYckmE@~i;32BC> zF)m~*qn8`#6z_TmhzQb)l!}Q#$(gIjTjoom^|YHXV))j$FeC!R5qto_Ov;vBmUWjZ zZKAV9>oh$<$fS{`wIt9a0!Ge*vNJjv;xrvCpvcQxXn&rQ^}2K$%@LCaYSj~B<5DYE zbcai(sWf<6owK*}ypfsOKHPX**=bwJ%tge>Bs7v?i?}Xl2vK{ z@}(Lu`>|1#Sp8Q=v5Z&Z{``VNv8@`#Iji+~q`|U%1jP*7kL39pE4BN`@oBjyI#cw) zSqh&f-c5rJuQFwiW0WtO$%WO&2YPesHT=7tvUNQ_65Qp0y^r$Yp?LP}=~rKT`S8I5 zbd<#Ae|xZnkyzgnoA8V28uV-EZ@L=^57*gg35maFgIe{W}d3o14@2_QYM4i8U` zkBBcLv(g9ezYpw%y6&@`9Uh86GfvRlUg5^h8h(X!Lq8Q7zp}nQcCMGfVMdQ=bxSr` zldy7^iQWU03$1>thvLm%(}vDNfT)jNBj+})nOBaskUOqnh><14%`|;O*`)5D>;eY!0(WlRr62d|l`RWy@NanGR zq?RCcB zyJ|p~Ez%?WP`gGVm)FDD8c~k|K(W2Nw)_g?;K8fyl_hjj6fZ0{OxQE|a^UYAr%p;w zx0&c+tUs$O#5)B4!X6RLCobzCDVY8RQJ;l5D|2)_obc7^@)ETp<1DSh2In=y&gFdf zq*LCwUDCjR=YzWt0sY_p@Bi;lKKuOPgNN{=Q)8#NrK^X0TEaL43}=e0{G3E39Tptjq!^F%%ouAbKTsP#5Cz=GJ}L> ze1!u7^^;}D> zLfiAV@=Tg1_B4%VL2p61DbMbu`ZkS{6OE$i!g-eGGF$|&-I*0W5!RE#!?(gyM22#) zW+ox!?lo%lvYuNWMi!xb@>*s#5!VK5)pQy&R-wg(tzCG^I1%6hX9y_E+Y@AZ888uE zkk#b{cqOnBZUUEEU0h#Uy1Ki*yB&6ktGjF4>&qmvA#h-GeTi#Um*+z=dWA)Z`1mGX zOUl$nxwV;6M^>s1c;_Y!CU<8JY8OyR)6gJ>$eHDK=^345(|xELy8S%npuj^V2T%Lq z7I$0yj;=-8HGEFbTQsB7&msUsmO39fb~Q7@zDtaT6OrYz0N5i+kD;wp&#p6RQjn1z zXs(w`O^WMt0pHK5W>cXS1JgvmYvnQ{z6rvVh#U^ngWEK7;ZzM-t_)g+0V%&pp3JG5 zA+X3&VnqX%HPJVeNm)@+yptB)#T*UAgjW2oCmR$S_b9JW3CUa>u^ro&MH$jOn07(6 z%9Nf(be07wnzP78ehYJ!afTKEYGLra>U}L)6J>s*Kup5O!E|@<25F|inyqN&&I{$( z;wUf2xZOOO$Gn#^DWwQRufMwQq>4=J}AJJ9IjYFAPQm0tQYU9?3BLY$5i|ij12q{AMe5o61yD6`KyRzb& zB8q)nA=%Vp#j3>S;;3^zrWVE2@Y~2Q^VxB|VKj0+I`KSE4rjGTY!i^%87D=xX7E!r zuO0#*zv1(bzSps5&Qqc5qG4OM}n9f8k)LByAJ9G)8F$a05D zq=`I&Q};wRK@DSO&0|mj>7ab!^E$V#w&&UUlQL4nO=J{-1+GVxY-8O!w>*m!Go>TN z!geM+D!@&OQD!K4acud5%@a!mT2sywZk(&dAA_c_Abvoao8nxyENPOB1kYUU#Ai!o zDgpWA47=-TX|{C2(hiunI6!!B#;yw)WCIvEy-z11B#V%3~SlPj=|Sr zvU0v`gPLnGTu@!D%C0}t@7=tLM+>tY{f8{rg(8Irtv%c z%4cz>kX%gn=(XUATvi{dEpl?6>q_!b`R(!ca3&T+id$5kcmV+MM$Mc}q<4852Mi;E z+iN$SG8UAFQ;Y03O|&V0I|X65@+HICB-1pVJ0hbDzlA_5nwrhqNXV+|F=2{3;H0Dq zHSy%G$T1b+B@#y1QLLihIIB~|fLH_TYL|&1TWmeMWcVg{npPo!(}orcnQ;?UiytcL zr1mh^Srt{CdMuF~%eTjQw>`?t&}Y7Iw`(7kV9_8rWL!5Dtu(ib-*N9`bX71g5GjlT zbio2xFzr%jL&o)J! z@`{*MjaJH4iW>UmL^%y;iFvhXJ?%%1BL4JIT53!?qAOVONaK{Soa&}SNzMPh*DtK8 zW*XsV?qD^S^#0~kV8O8&eBNknj=j;@_dlT`8YIawNlmxk{m=C9gTqW|-Da_BPC&=) z@HmOiM&0UG&F}dC9p{$%9MPn0#zNYgP8Q?cs+1b^lw;c}!+^-1>?c;eO`>~H7>i}F zw&Du;*dUqCENqPpIXD2#@RCq1;k&gMi;d2Uw32y7Td2yvD0)pQx zkvDGKyngL^1z_1C2KagM_I2XBSjPy3`sl;=ukP*fCQ9;(Fpv~JQd-f zic~F~rL0bAOtzV@LGuJra5Vv5)_wYy2}K1YnE z9zd!ZC^D_34+MoVz)4UNjn1s6DBb!x3SQvBrg-ODGM>;djkHe&797gvf?*4fU+8sn z6wXBnPXqT+Fy?()a$7Qj0rRI zYl~|Omk9P=*#KFzwza*rd+*M@+qZxa-M(@CMqor++Ynd7UPN;I_4W0wO+vv5GlQUH zkqC2C%H_pnl!=$GvhdUG=TRG-H72*p(y9ac6kx&4YYr!)Kp<@eO+Eo!i&R%mG09;0UJhBfX}1zCW%T=M&gT0rBDH+WgE! z17*e|mdurvE2qb~k8JnPpC7UUkP2<4JT`A%A#TQOMB)tm++RI-iXh2n@GpcmyI3}- zwjq-2Xt!=&|K9h$^TGS?;Vu03n{R*cgCBkT$!CmedN3~EE}6q_EUu3tL7{~pF@iCj zzm4I(Q06}F<;AIsQh3n^%@x%MFP_hU5&G(;!=%IlNW*;o)r05zuj2aYVg}CRAO7;s zef0jFdw0oGfA!w&>vwKl<>&g|HW7sD1P`t*VhdPXPWrl7KG~qlzHvscR0ma{!3{Bx zp1d1(XqB)!qAMZQVp%}xqRcpojp{-a3Da|Ax+Kk2MMh9Tc0oXY&EP2~4gVxOKXTW} z>mFb;LOgA%X6{NACZeQ~I12#fnDe3*87G1QF0^cnI-c3oJP`=ZaSJrSOgD&jW-L0~ zXYC2w2+veRqjWKVrdx-`o3qC66J*M;)Wk^p1OXir&zyvHyoHHeQkXgXu*X$4;3KP+ z*isd~!P>%X6|ps~`=nemY@MoXN&<6{ks^=L`x>g$=F$tCtpADD<5JmhG__CwhD+1Z z4Tcn$HG%^;OeUJw^n-h`1_e5T6^+(oF_yXZB%El`B#1Iwz-bT%7)I}KVD4?NK?$+7 zzOu0jox}p15hSU>Fa$0SE-(((mKHYGme9+v5Us5&z$lUIX91cqm>D2hBM^Bxh0G%W zjWU(;G zl8N$mdmXEa+r1YL+fkmQ9Yi~hY^1uoJy|2eNnu1DV+!@(i4+$3B%(I5e}v@zU1F@< zrDa6Upq%UkG!#JiiK+LnG4TX72!5i&H#wRDk8CfdMK?#-Oy`0Xg2`5orb(2X-Mmq+ zWC@Z?(sztec(}dZ#>Q%vs0>I`=WXM#^}oB z#|bD&&M#h390$Z5Mmce>XrL&}m9pfg%V6M0c~UcwaYoEC?4r~Z9}G-JXOd(@aVmmC zi}K{b&Fhz-3chvxn9)qiLhd+YGpSQnIv)LV5>*M;GVN(wRgYZ)=jV!1P}bF~CVqB^ zxQ3e6B9_YxCAOP7QoATc=5t+1qenHUhNDtWvQ)cnO6 z8cXXUWmcBg9Al_p1;dOko~iwdRRo8dR$voYXT&xUm>?#8d@?5!pIBLoHzG|j{(&zD z?&eGjmR*>qnwhKl+LDozdnJ%H-CnKFR5b-d#!Gpmnnko~DkSHulnv&U(=|*p()>1aj+8@(~ zN3V}c6_0ud`YAOEy5*F#xoH75sccwpvi@sunW-=)!{57#(46J{Z;O2_S|#SlE?>eg zIBJYbdxv^(86|aZZ4SX%ago{qIyX_^e#8QyFd3VC86{g-2S@wO z1t>uc)pm^JPtyCdqw_$Lg2WV33)Tpq;ea+pfN-5F*lgb(B!^|6vdI& zc4#=FX_dM))=m|Do{>kHDLjv3gt10+WVh{F$P`ACXCXXV6G?Of*aNV))IvOP@V|hL zw!pIeQ)Ye-ajSgDD6}2gez|`Vt-%%^=qsBR_f3`R0(xH_#Q7KBbc*)>c^wsW~6QMD-tvqdJ z_0sGjQ?g9koI&pG(!);tmZkeUAAa!Rhu>KWd_LJ;q{?>X9WW1-5R;UNaX2f#_I3TL zPJm%Tl5e;M9brX%Ud<~mZRY58j~E%#i|O&bChJw5Hrn26v>IqCGBi3R>qlgg|7nyN zd0{LPA5CoZjyL&m>u6-JL7qOxN{JY1f2D1$BcH+lZ-RXJ;q`ua!=SBklQ0ZQ--6qo zAC)Gr90|Y1CaMKXdyRK!|FNw#A{acS{ajLF!%b>R^u$Fy$;v~%)-V07=I_BcKkPxa z(uk4Kz-3J=w4|-#l>{ufd)e}XIfws8<4^?|$9>fx#%t?pKjQ3QjJBF1_m|J(Og@ga zX1vmdgn_x#}W5mKPIiJH)h$y7k^Rr6q#6hJX=6YH~x$qhxR;EMtLpkpcpFno{Ae zpyew}oSJt7X^fy71PfjPs|Y1wO$;70yKeed5P>Cc@)WZkaS%8vSFvTHp~tVrWTn0* zRF>~i(5A5{#k4cOu(7_ry0WsB&o(4PJ6qdVAtKt_BhHMBW(1qvxN+^q^=mh;U%z|z z?%vg_{9v}bdE>^7>(_7JtPRg-w5z)tYip2T;}Ba}UO=5(0EJR$a6lJ`=_d(HFyc#y zs%~}_@lplH7O;Q70HNMT4+-eM#wj;t|p{b%I3cZO>B zzey9^yn$`>M?d<>#~=Uf(c`D6a~OAAnB_&*T+viL(Xkl~FZK`IFLX_Fz`Vltgd`)H zLx+6LF2PL6;^+LvuxDm2{U~k~6qOeK__MDcJbuoMJ%8iH`**K@_x-zzjDzNXsdq5Y zFNkJfkD||aHaD*BZqdj5+`O@Ob$9#b^}QR{cKLG~8Y+gx+A{qZTfiLReFdVE&;rtE z3s4c&n>tnEPXse)$mwd{uGG#~VwY$OGl|HvKIwwkSQ~#%be7TO9AG?>s=6#iIplXi zp8W9O3ZwmrgwXWBO-rn;q@Mg*YGMpZ-&fviK6~652~nwMY5rs zhj!|+mJGXo-HEQd0t_>IT!HBh>@Ucs2J3aTIi{V=L`7+lh1g1Yu8;xF&?-k|cxhKzHM;4yTo_4UP-rTLAuWwLu? zt6f>-7~9b$&M1oJu|G8% z)eht`lk?$4W|rCqdoUs%PXMH)3C5w3Ph(7L075N>u1xFN0^% zny9i$S4wMQIubD;ZJepf_>F=ppO;~HnKkofvI!YPG}MfE=QrPUqMY~}w};E%u}+Bdf7a>HHDSxKg&+_oL5pVo)DBC13u znFhX3uBqMLoCxyGgfe(s*D`}u2J4aUUlIddxwh({Lg#w%$PosLu!!HJtRvk7`?T`K zNUY0ZWvr8ulo_~9)J+A4gU!AcD5ua>v>oMq=bj>%S0oN!YmTI=l^CiBi+{-@x?RcW z>Z9XkV^HP1RdU|cRw!}4+ha$*|EG?Exz4sv3##&>eyx4BskjhwOa-W3z+Dtio2FTm z(eWuZc601{tRd7LaZXhpr5hZOd9fM08IYCJXSKxfpV{*Aue^sD{Rf(H?HN zDU%zXsI#PO8DMp-wWs*aOlNng>!3ngB-^ z2&FhP8v91aBUc~>z?8%Qz-lr4^C$KF#Q*ZQ%aFO%lfSd(5}nUo zHz@&PL2bt6#-q24-LANqr%^yI;}*)=82*UqhwzPeo1{R8`)@+8TLYfFwT!&8IOiaY zQh(0a=$H?WHOANFWzMh6;X)AQB^@g-uhs<6xs@FIRr}+uVj!|O@|%(;cGnI2H1i*U zk^!xaqY6M~125tvwX+?ub2FYOEyNZaL@hZgJh29E+Q?B}T9C9^d=~XZ42Be%R9>X! z5o9bX%hChT-rWN+ldYnV9OEI-%n-wsw^zogN%8H#}ovg2*BbgI8gu z%~dbm9bM68+sy(Eba)ownLUi2jfQ5acwz>esJ%pU7^X;7c}s`##N?Xh7VSXJs6Bf9 zhLJ@a%D?#M|KyMV=nwwr4}bT)JGV}oRWXxcWPmE7|Mr z=s~%SY6oP#2viZOBR8-X8gV^Z=xj}nO`9k3&_s`Ihi)MQDRUm;iN6^>&5NfqQZr;3Kj_;mOsUb}+(A3Cit_zcjHGJzEx=2I?!wYWR29 zD?o_tjGkwsau!M0c9y+KEpI17{`*^0tm85 znfg*(jkLc|H04HRxIuNPbyX*zLZRnd^96I&INJ!9{W(vsz#3B zFJTV4Q?xUl@AvWo)-s`yjD_DO;Ug%+!O)Rl4&aPr6EKu7|Y@Ys4YH=CPO< zzW@F2Vxz!5@N$12p&_e%%M?Up8vbeM)+}_lxlc45H zV4qM#{R-(I)3u~icqW~~TjKS77s6mhjL>2zO~4v34GPK#7{OssUsF0#LwTX85jGiV zQX$YLRRse&I0g_=bf+{)1~#xlnpBmFvtY8aHsEY=WqFx{)n)!&Szld)oCy37Kf60D znVXp8YA}MgXMKBP>)OuFom(JHZrr(jlVteVlK>BG?QAbCuYsyWg^@4sIQ8NfAv=G{ z!9i2kSC@g<-xGq+S>L|%{=KgrKKiR4eM+Q^;1ms}n&8cgtT~cp>C#LDm;hX7f%QN4S{OiJu46-$U##iG6S9?+^ zDyh@SgKr=H;0Hha$xl9h`s_K*J-|}nY8Wbs=Hn_SLVq(tC?y>O?-CY9TG%;mEKDpc zaWc3YW`zs@t!_s82yjj*Ny3^;#Scl@qvXY>woCkbPhPxy{OkoIJc~tkM7eq z8n8H7Cs($0erT^_$lhE^)AkaW{`Fy z6I>0O?$D?t-lx3Ou_kDAbCWF{Nu(`ap&*K&kFBtDwi4NzKRdXLwqiB{hA20pnb4Y) zw-NNAjWE`_WW6U%B$pAOsR;RwhBA@1@8Urr!!Afc2b+?HFmqGOb0wlYq7eoij8KA} zob@%qhio{vT#g$|-U?}PmBb>G)S)6Na&`oxTB>ta2Me19dIA;U%>Mpi6%AHGaZ?kB z8)*5Iv(O2CsG^V@JhhA^q6t@5NnH%C=*s410Aov6F5SGbb9HB(I5a>*oa8HDLKucH zfPzEgm;^v!BjR>MHdayNyGupfQ4KnY@kuZvN>moJ`77A!=SZK&!%Jp#N*=u>Qt$Wo z^86f}C2)}KtS=D@2@?)NAy(;S-bJ`&*^Xj(y4V@2_TeVqkNzsR@8RDXDzT6tKj%mF zMGaNozB9zkPoL!e#^J=H%GF{eyi(=gJd9?lIhHI!!(8{usGUvLZwfq)a**CkuPKs* zKdR;;{-&?!FV66PAaw!U6<$!$6jLC-rAFdMS|W+_d6AJCZ|c(Ec`O}GHI>4u|I-u9 zchj)w2NiHJr&dxfi%NQ@>blK{H)T9^xoO@uU4xA0{8_wi$}b?r3>X<3VR$G5OU$5j z#au&)YoAquk{^)rsEaZwrn+=TJ#JK)WHh{55E&z8V`GJ-{#EI>3X(d`UTLTc*Ov(~ zwxlcqs@z$K6y1%6(wADBOok+Z&WinE|gnkfs)h`fP^NScxDg}XMUK(~dspEn=8HA-#2A!OnX*iY%9zjuz z4|0-3jx7SfRdt_uwk~021UGD%XR@GBc6AUMj>4Vq#3y`9i7kD6Ds38tbrZO93*~_% z>7?l=xz`_+XCr8M7v_TuhvMkK9uglL@J*d^wNJ<65xG$CZh1wd7VnErT9g>CQ{9{5cTFJmjR#=TYtnWJBIaUBslQb-uZDWKk z)A5{flNy=1y5O2Spk?48{Rp?wP9*FwvYl4oRHw`r1&i{(1b)YP4$~&-fi(}?+B|%q zC#r)@&>@R0nsB9g`xw4G2scn)8g^&hCYnEZ9|dq!2$&=dH6wIyZ|9eO@fZK-4}Txi z&p-LczrMb<3O&i=hYt~R-J1<>;Xryz>_E-X)E*uF=e|M%iUtKg9M(*xC}0p-P+$qn z?xiE3Oz6f)A!Q)m(5ubtu982zG=g^q=E(Ej%Sm?~IcWNtoX@c%)6c-$oG0t>X|i@X z4D!9rXGL2A?e`W>JhqmOkx*X@QMa6l7l>&Z%-LFq+~>68=r-{(j;-vV08j@rrc_s& zh1ZBC6|r>~_6oUF`H_*DD;bd%;rw=f53;2gyorWjS;6A2rE2t~!QNWh1}umUvh5Vt z1oX-Cq61Mua3uThbjkd*%-V|dhG^rP*kPkV23wDVq}OQO1KWr`jsR{>4GXD*NM!P9 zcXJIu7IGkzm}yx*TmSU8W8##bj>Lhn6xoJ{#&mSnesu?OQiLc>g{<_2R`#EJG)y zgmr@?Oi8)NI!;Qc$)Z8=fmjrT!5~-8JCC&QaKcy5w^W=4!B34j3C#^keu?KaR>m&h zxv%+#-`LYN$bk=KN{VwXr%C7-xlItVvZ>*&BIH}4;F}8O&vxdrJaZ|03d!pfSv^`s&8VUwrlP=U?%S5tjC^ z22oQDI=GpU@Zf?#qEEvqu!x$O7$q(wc7dT6u=ioi2PbVS!=DiiX+QuB`>&23KRZ0_ z{;nHY&2DhvkD1O#Taa+$Xe+ zrOE(}of--CnkTgLj=_eaPub-q)KAM7v|~ZkC!PBOD5iI}SAOn;dqj5`qH2&LQW8z7 zFsgAEQI?817g#%NdRCEEoUSGblz_$yr6Qv+| z8n6_N3sG5zY#{1cr&vFExQUkdmv7zg1_IbChyHBRL(Xeps$1D0IFqTleCamGV@QNATI&x&jHUZina zY|&Zfa+7W4e*@Vj%8I(0#h=Qqpiv{Lfd?8Pro+FZYSsYT`Ni4Ldb! zbGZys28iLh)WyjAsvE~i{p-ht1oGrY(Wxl$Q9C_3ME)9eNmq!s7+uuB?lZ^XSJk9-W> zRZf+|k@CA#=4mCLvI~@rl=`GA$)g;0=OUkR8;W__+UnEFH_XJ5Y=kEpIL7UAbqN^v zw^g2W;wYcgToI##VmXg!yQV+H@0(w>npBNYO{7&DO;RV3MaL>g4I$7~ha!*nsOGQa z3p1W^J_4B7?X;v*&3!XwYYZY?NcoDvOyO7nRl^0+bDojILs%O)A;>`84SNSy(tRQf zn$k=Ai`~No+7^zqtOUupbB0uai)QJUw$MMBNKczI}&Pz8O;>CUA`NHXkU6L;hc zeoyL7*DLO7Ze}=8Y#yZvsmLq&c1|)(`+OG-KBnR3hXM#naw&6QPv5<< zW1nFbL3G!TO-Yn)gg%O!n3Tlp$cz|;$z-jrO}%XP3DDrxo%zW=)>wc!8bqFRp2t88 z(ONkLWQmJOd#;Ob`_j}2#xznm&b9ET?Bc?jR5|24reQfY;Zl+6k~F8;725LB4pUlF zAhGrXzT#PqHW~68Y@8-FrGl!dx=j<2&@ee^RH6A(v&Gdb?pDlX9&oLZ1IRrZX~2=I z@*^X4o%wH>J&+*$>aYFs@BQxY{^x)EhyU;&{Mzo$CISRBw~wDZe);@m1e|(WY?)KF zbrCn(L{rWH&@>MkQzURk_Sr#B;V!MoLXH^SYdW%pUx`N;83$D4=nrG#1$l~j@tQt4 z#Yk)P(HchvL7gszx-rwm+V$N?oMt|d+vPMBIAAp`{NTTEam=%<2~QgkrydxxdJVV}AD=#~QA5QNn&Y=Bd|vA)8Z_Nbq;Jb0 zbGfgTc(^&Q zO8bnK(8f`MY{>noSS=fK(hsZD>u?Ai5X*xN=<4;WD0$Ccywu7@&=FGvf6v0oyqp3H z%gO2(xB1c)-X$2Hw)o(8W$+AO#Be8++3Y70XGTXleBHe!QQ}pb=SnZ~&IT`cZ-gog zJ&blfV44i)VRz%CLA4Fa%YccPb(EC~35Yg~>@|Oh&N+B_&<%77<|8J@O!lT29Vm2j zXfnpo=;mE{cv$vT+eC)Ti3gcW{DHX;<^G$8k4RWHa#?o3ILgM7mPt2%X%_xkJj+xK zTeR)6w#4cu12-J0&58DB1En64@(U;#ofp5@E?=E@1p~IMuW^0cJfqD*H zZ;zUUtJV$8C>P3g5;w3O0`O;0gx9-jz2B&q1J-m|Gpg(S15MF0>< zC*66D-hi(xp@} z(PgYW2-D*K&};tVU;p?=Km8JinwGCuX}yerdK#xLFI*z8ZTEK*M1@1$0Bt~$zg${k zSdL4_Ad#edE4N>1YAe|QDZNpj8t5GyYB_Ek5=L~8r@%al6lN%O>A75`k@{3{5Os$X zvdFTNmod);1o7;}{tMQkBXc~N3Tmjtp;*!wjl9T+rBc$AV2MB+Udoa(4UPh_Zex8F zz!YLNxy5 zn7KeTkz^?)i^FL+kAgJE=Ed0K`8ptJ8LWo#fSkld92+8i^AZc)>my^|TfAvwIRw>H-{*H?D8 zNg%m|MH*oqBM~I2{AL+uIifjvlcdXO)slv&j5(cIc(|s}q6t%q7vlhecY!nWmk6E> z1Zg=Is#)w-*oKx9rEC+UBeMv-U_I>l&N%+9~y}r6! zmM?`Koz@)6b}fWh9JEWLXjwfm6+hhJ-O!>X8Fc1U=hI7SW~uj{Ta5itn4-%}i&o6z zi6$gkpUdBBkOfWmReQjMzKEmYZ-bYD6p1aw;r__$igk z3trXnMDb1&hBN}rJ)IdRy2toImPhOp+(n>0wSEC`GvjAtPBv>rodV>>_F#fc9P{s)=YF_GY*oc#k`RXS0AeBS-LO%O{|J%QK ze!zw$Mk#eZqp_m1(^Eo5f)z^K7NJNL)K7JKRUXrkoc2)+ zEDR@IhS4C+Q0f@2>@pjBQC`~e(CmXV1C0Jqf`TEUCchu z(}-_s1toAZXw$f|Alb8gWo(m)*Ntr#2+bKSVhyMih?X7Mqz6WEa>f?PN#5Ea8Bm0IpDEnA?FhD(v zg@Li)CB+$Ghee{ZlZmA-)OwKH3+c0ut_Pvc9Q}N6{%JF(v{0v zPxOcLmNE^+z9=Px4tpVXv`ULLU|Lh{R5Npp+znz|QgX>?`!p5o z;v-7GKXX9}3`dg21r4_)8_9xhdU&279?D2&mKX(Ohl^%lge}9b>nYCaD`gjdb70B2 zVMJz8Li2Q-#Ksg6cynXpmw)M({_qce?~i`}_x|xe__e*AEhLo3j~+dF@&vA1<{Ki5 z1#qD>lvfaqNxKK)V^}x(1`3#um-(I3%wviXW+HQ0s8qCiCRW!xJ~&Xc7g+t_Q=-PM z<7RmjOJ&4zkHt;I>^cIEHArZu&@v#>NBKj3t3mN&pISV%6W4Pu;4>^H*6X6zYp`nt z9UBG*d9$Q%Er3TpD+P9Iag)>hBY4M0S#~{e^;XlF8W*guZDIh6$>4RGjnby4oclUC z__%dz#+IC0(oY|zk>ySK=k&nX_NrU6MJJ1rv5t05)<7GAOzOig`5M12y9H)SVB% zYwnFgQke9##%{wd8uN9T@zZ<|M#7xBqWD_&1s*$BA3h_Ii?iJIUWzwU*BiN@+tn(} z*@@&YYw&w%E_b7c6h*rs6r*;-#jNn2T6;5TkRP$7IvtUHfOiquXn{J5xX zYwJt&SS031hgV>>e)!}?#D76;4wnHd9QhnIdP)pn@S|VV7&o9RezI*9pKG31;6HLb z4$8J>4$a!4hfp7v7DmMhv5;K7xV*G~7(Jh__~A-~8Eq(R^n(t}&;TG6a6bd4;4~{5 zqF|{BGctq+x`8zB^@&r=>A+5=zIl=kspVIEV(ZI9qcs1ofAeRLpB->O%?Z}nF9?Lm z%?&)A1_V}eRFzx4*abQSmQ$=Jm9549nljvt)BTZyD`BFJC^;?cyx4W_LZ7E`l^LYr zoUQt&I7F!^I~zB`+E}f)EH9({IgY2)pzQeblD9rSWXeWIOReJe$|H35Ai-fNqM?eM zs5Lsi0n9g~??5?CNGcNebZKY-HWtJH`{7)WaeXXRLv+jf=DJ;9F|&hpn-!F6#2jf} z*Jvm)Ha3$O|o5!TCEX)5bXjnA@0fKtC)|MqeFHuCLEz5fk=GhOBdq-B(WhmW6s z^X-!ZY(TMb@{oM^O1C~rawW-G`G$DXjzv7Kk*j916GkPi$vDyUfH9pLP5Q%mz()wZ2#&0u34JA!Fr5*D zHBh@rDMF-7Zl0a_&5bq0djK6IkO3>S$U3&Xh`D)rnKO$VV>jY_02k%{XyyCZCc795JjX$BOZ;>I?rthD9fr63sxSB(I;vocp?Ja z&=p8(>(G{5PHj$EcD3!o$F?G(#<3rppFl>_w1wjOV6|nC5%FZ3&Ol4vpF5A&uyd0a^xY>O%2k{AfhDR77Ws zqZ~k)&h-W=0b-=!#>x_Jm5^*|K>#$Q4pa?Ex<-N zhGj`z*0t0Ok5oUFW5va4e}k^{Sn{3NCgf47NMGif3(d>H@f?C8KiUiU9p0Zr&*v+l z)KpW;C_SRmHLWJtG1K_ju)l>Hu7a^nae7Ax_DKVSHPM>g_*_1ZCd#tI13~C~_SNIV z*C)8kIByORdvm(_tj3^h*zF^El&O0RJQ`Jht?dDLZ}g^*22EQ~4tYOmx$*&DnV zy8)sUi#pBfH4=?Vn7|)d4QRdQ->jTD(@gC#_R&_=i!X{NLb_o0!~%=j#7 z)0`=YK}e&W>!>xbhBd@=Ly3QqKEFGf898J9=J*-!^ELYf{+qBk+84H^^gu+>ffbq1{?TUf1Cy zF##=Llz3yrFKB+2>4rc9N-JX#_BQ1?U2UA-b~uQB2JS~c2<*rX(^cl@JFA$);1G556W))HS`w{U%z zkJP>6i@OH<3Ga2~VzjxGbOr1|wGlod&}7V}UFa6T?);a>*lc!H1j@`%ZgJwX- zC=S=Es^5(Aa8CG%@B=N3+DFVC;BM;jriELqha`~$)iSAEKE}7I8oxa-tU*}2`-G{n zj4#cZsuqKVRLGBZF_of`MN6->VG#_WF{$(wIJb40D=FHQuFghC2`1vxr&(a@muGUM z{HHTPJSWHQTiSjE=Z_4pZd4Y)q?ms%r@ACKBOPyF$}iKLbFK#(k4;*ZulQIJTi7sy zK}PkWqp9SK?82vs~-4Yby)b!x9vQM3aL)3Bn_YS_^O z6QuQrbEeyrAmBWSSU!2TmDk8A#>eTobYWU}zwqlC^bZWo2h) zmvu%|#h4>L*#oD(EyhREKrOH=@-2WyF)a?S7MB*^d+*-b+8WdRVE@pRf92GeIx0wk z=Ta%KFh~csWB@gjTw|Ss{@)$4zL$0UNeB+sV7yd*rHrdy?ewaT0{MEjWUn=O9vYA&G1g z;BFd&J<~+6SzS#oPDv<3aTb(6@}k+7Fn?e!=RlFmj4eW(*b^J^7ZVudz(mxd4$;86 zJ-MqkaP)lImL7al7(!SW+4SibcT#AKumQ31@l{|rs7aSexrH1vT{i$idGO5gStMvI zM8tq8W*07BAs^ND<~lsFn4PGO;S5e;7AUMgTU(ol`v*@RKao{uq!jeyWKdo~x4LtE zb9Lnk?J}vIMV=Ii)&V$}Ie`$c#;FCfO9ft)+uP({*sthN{W|74&(l_Lc^=H4VOfz;_R zTn(YO3~>p+>1^###ekH@blN0PYBEeTeMroAspH~f>t4n&2Y?Bgov=;t*rU@ETz32K z-oAMK=J4I|>ys0>yPm$-fBNEOKY=%U95h zu1&Or%&7WJk8%x#?g%{9zEi@O!qzI3n_Pw&r$sFH*78N$%129KG{p)o#Xz2b$4+fv z%$QebWk;`$aW@nxX84WV#I)v1X0NOIu>>@29VJF8Ti9CkNfy|d2E>kd}VfU#RHl?G-@Zo zl3$S-^6{@!HDL#^wqbBIstw zZnjQ5=`yG!j5v*PWq449I{En(=dq}m1{Yk^V8pQPyhcwC{(#0hsr09MrKS;D~OJU8qotQ+cL2K(aDLcm8bFKWX2~2d|QMYK~*$4;XcYbg{^A z+V{q!s0qU~0@VR&dXse;susHsVg$A%{fJW4BL6Ve0f+HeR$36g20e944Tn)y%j$so z#cQmm6v9T*J`x?|-UdBb@hU8{GQtS-mSJ5aeozK=ca@dw)a+3T^WM&}@GhARG!_qj zN!CUzXxS`c<_oK!_;Fb&d51uC3V`{OS(Aavr`uTqR7+ALt%;5gW7(Ti7x7jd1mNJH9ea8`ML0y3bOp3sZ`l% z1$psdJ;6Me#2Ur3P(jXUNz5vgv1iW2cjq3*gyYa1lh(>tbKIQWXWDmucQoi?IZ@B5 zvsuCWxTve<42f365Rw;J(+?Y;Vck64#a0ZRpr`Io6JvB_02ESC37;phdIp$TH@t!h z7UbDx6;Fo8+QB35@hqyWZ_>23CV!;uX*8T~{4P@u`?{oKeQ7e^y;E4_hh?@!L7T#l15#wMHRUL#XW@*6!DcK;HE(D$ z2B4yC4DO)?4C^~l_ZQ)N|K>H?5wjDMS*Du^M#X=Fg61uFV-Qa{ujP+k!qJ3vP35z4 zvpKZ$N`7cKlpLDO=~T!!+eygkICvG&Bvu=~6-UE0rlHZ1PfN>Hj`)R$XmB-~jUo3u zgZn70spmd%*ho$wk33PZt`wwd4jLDMM^-8VN`09vO~n=ua7q4MWkY6G zGD4Xh*hDk6%r!YBIc_-umX{LPv8FM|r+wGjwI( zc4~gnGe3&dNBZ@-frHXYq@5#q&1*pH*y0^~+3 zVi(&BY9PKSZ`7XE*ZERSOWMf974q@5m9_G;<+f0>3jAAP{||FxSKO`x&= zGBY~sVX~#jKFXN`k8_2sKzTZ1 z`6|C`wj|z_J>s2jPs)k7yUT{tgfBb+xMlw1L)nb(mR5{X$vY-cRIfh2i^05t%*sZa z$0m>}5qWg9s|njHd&m6JJom7Lutf7}mi>XrZRVpqgD21;M0^lO0$%_bskS#Z$x9D` zx3LDih0qV!KaP*yJbCh133!Md4jT_;q+$o&-dJ8;g7O9r-VrC8HX-6clN<}QK8=tc zaW9dcY_%`;kNlXXadbV@6dXpC z7UT18AO6R`_~Aqoz@)RLjl&o{u8|&zPGQ8f-W;PqVfvxL!PiPg%Y}vcSii3M=Q))W z^dqBZ_n(Qsw9dweiBg0nqfOxD+{t-X9E>kK-);5eJkDKHdWs>SNwy|5$w~$ll_It_ z%&^JD49yIPi-$yPr(*m@FGttsXUYTGB#}IGC}AAXjs&P64pTUQHK=h!0HSCBB&BB# zVsybg`kIi0m*GEq6RX7Q#Aq7lb(~T$M-yvrA`8%n9OyqYDiGVB5{0@1Bg@%65>V16 zB6MgI9hn$3i(Lq&FY~t^Z{{8P3=kLuDkhikG~O*k4zC1%w_8E@Zl2& zH7`_6O?is7XAz(W(e2f2b3VC*C*lpGu+=7RuxHFSB!cXqt((9lO}AMLMnXqb?GUq# zKcc>xN99y%9SxDlR$6RPvY06kGrNrnlrvG@ErS&F$^=>({ohR$sfixw{QH`ugVj^7hs$cA~AdC1{2K+--!zXc^I&BM*$`ZpfQi>c4`mVK2**Cvi3>9Zu$*olC=Acpi$hw3A-H%SaFlbL1fQEPShg9+ zvnd;d>-nCLG^mUCmU>_kqHouh>E_v(wi^R^nOv6j>|D-sE)puYy|J{uGS94HsVJj1 z@9dL{a+>MGL&Z`tNAlOYyh>qHe~AHv=>Setw^T%<$3CqK^V^QGm4##cJD?otybq?;c-;2CxK1%%0%2E4X)N=b$lYgh)ymVh+ccM|gKr zimnumSJ?8W)Cr0^+MW8h9Qm2JD zR<4nEHL(;5Z?UTPUPdY96cZP*xGsMxY9azYEH5;T%_ELR566IV8=W9=&!8gZ&lWzS zTCqPYoaQH;(pBu3pKH!jGpXlA9cesNV%a!lXz9AI)Jc>T336BeWjGbv&1r*FQdb5o)utITAr)V$jQ+DiAPoW^#F%W@<+9-k|BS?k2o$E}v;u@1|gj zMS`6%L9&qHM+{@>i4RS4C+}^fSm0NTkCd^9wyvcSu6>J{BGhA@If$&4B5K4}RNw8K1AbEx+E|`K&F>m<8UQ6&B}QE8&WkuHYS-rGJ+d(BX35DJ)h$o~U=pS3#P>8AWKG1n*nYN0mWyA>Zws=x1Mkz87ueL@_JnsK) z#)cRnc1NrDjP(?9tq z|M(x>ym6h@eEI~$Pw+nA2CRFes0u0$O$|93E>f$4Hs7j#gk+@3r8By_?1|$#GENzpHGPo34fD(_1Ch{3tF?4ivRWcp; zIj$rYqH(!_rxFR((mDu(UDJFQM}u?6V@(_4pe&NvEtH>o+Ti37k|s}(b@wY<%%&ez z%bM=N5hAJ(9Tk0uZh0T8re;8&crM#~WX-Ji-o$h1zI2(%1=Y7z zP5k&q`*SM&<#(C_TcFmxAFUY97mcU=UH@Uj{YD&LJ?%Dwt)~UVCh-YE`qipZR82y% zg9|if*|jjn{%GT99kUE}pX13vswY)%Ahr3T9?@*kZe~J`+-XLQ?fuqrSlrsKK3smd za_>1-kN6~U*K2_K`!7SL4)4$E>MA;f!~Q%H*j`VA7}oBieY(p+e%mY#zn*b)j`%o2 z1^8xjXZz~jE_(!f1`Ho;0W=8C5Y~sKI&ic38R6IWu)fVN&L=Zq!PP-YPtu76q6=V+ zpE*(1iPo*xsMExF)lzsIQDY0K3y3wGWg33vdWBEGLTGS*mn=N8btV?rRM~N6Hm^`5 zp6)JlSAhP$OP3{+al(oV|DlMiSIQPFkER%(;^7vX!N@vB#c^9Jnzt1d-voqq%wWispc;oFV^+Gv5UBh>RsGh(;=i4>3FjvZmaw+u#ZT zDQUxQHM|Z4mc$=iMrk!BN;hWVAA;?2o_ z=ltT{T-MCTsB3ja1#!#{CcTo|pWms#cgdyO)so{o6U|N%lWr_*kf$S3Ho1pyW(Bzos89z=J7zM9@>rO$hF<}LJ za$bjOgG5`Yp({{oo47)cH5Vije}H{e-UpvE=rCbU+6__HycZsE~CO}V10 zCgdX&)2*Vs*#7W{NpyPcL>zN6n?i?{L76w9CtAR!zG^*hf|EnULk z3bS&P`@h86@?c3M)$drhYn%3W3TiM!J!eE5jrD=u@s!DD$MbVR4?qNupa2$#mMYNMH&k;L@ z9Fj30;6pARuFJT^Qf$^sQ^Ez-T2+lMUoDq5h8{}J*^*vopWuHAMp7I^gZ0&g)#Z5( zl2$*gZ3!=%$5fA6TKgx*nW04|&D2ubO9IfKlnO2eOi5em0Vl=txRh5eH57wW6uxE} ztuSR!)e>a-=41ve4vr&!8PCcERT8^ClpaXrh_^CSSX;#W3L2{6smYBy@7^`n5^a@X zRNf-ms(iG^66of9!51_s_z|8|1wPH*Y-&lTVDzGd-#pexYJ)l*>^wm=L0aM_PRc>& znsX--!lZ#?RFiTFmE{IyMRUD#yMnjtfW)k3Qoc+twn)5AQUx2i@EJ}rxf+>aO1(r{ z%^HClZH{@DlDJY*Jb|JU#WN~GsiwQ^u!a~&PT5SC#@ZrFqvRfREsv_S^N#bP#+qd; z#sZW(Ry_uTjK^MI;E8dgleAbx@U%dkZEg)rd<3@G6sB-=Wf`GpjBVD3rmj9QHcGUt zh7!JVGG!>#>QOj?dv~*nzm06uGROlRX(}MovZNb6Y5BQ}uT;bac@_`HUZ~v85*@ou zR$6n0t>IC{xXfHk>8!SnOeMXs#Bf89gC?F73FBI z1f#b&*+jWMIUX;SXPLn0ew~5ktkF{%d7AO8MyWk$y4#P*sB0lk2N+nPNj28oDxoeV zQx%JiWzCM8R-K9$sbO*g5X?}ZjZGm~Umuxg|zduQg=z#nnrU?!g^hnX6zvavvA2{Jg~L%W%g zRGMSgcAtQ-eP8zr+ih4Y_^4hAH*h?NrC<=saW^1K)XrGHVTs|iimlis z_csxVd@Adk=S$}6T&~|BNBwBR({9R--U$sxe-~=O8lpGerWl5U!Fg<@go+4x>4Bdq zrAaTV2%(8VVj91({rQ*|z_;7@DYHHd6WsWfb6(qrFbz+Ok?~0qyXF<%Doech9U&yf zyS4K6h^-*xMEjs`%=C2w@!3An;OHw!$$p)OWQknzH;YQfW|!n0h>xehZ^Cq`zWtNPDqCb{4?sJfG$} z>{(wS;f}P3Oc>z5TXg>_M0dIcZ4< zTDx`oCS8z@<2K+-&0#G2rZ_k(trV|4!mAGoes<;0g1{kp)A84F3c;FhqqMM$)S2wM z)X|VY+%=tcZHu#HJBHWdD_jCmSUX6Hw^@kJ(;*Q@n)f6-+EI7=~0CMyhPRtk8 zzztWQKXP?f zKjvMQIVHxLi8H`xJ>950R;MPtKw;co85J4EGhu8|EmW)FIIB?2U0zsUVXc~h+nOm}epr@>2vz)0D~8{@a`Dz*o`lFsonq3(2I?-IG|yK@O2pvQ zr-qWOAwWNvmZ>%H5bQpzDKSg2P7)nX7$)!{R2d2Ytdo#TR$7#*rF=UL`e}9f3XDjL z3sHBl6D?*#$Wm1lCd*xVji2i3QyPN?SD@Z5!IDaATp==j;DS|W#3#BPaOv=oamGHR zq60o-Xc!e0{I0RS^=-Xt|JAJ?5ug{-6nZ~3B$@c^+@h50jVu#JV5Ep#e){H_i*k)A zZuUH%6ICHSlj;r>froN~m>`J=XbaBkA4-7@ndBp{Rxh)C6r7Zlcq4-EYY|{qi>-}}rPw&FAdYLsrKx?X(RONW zoEQ0VhG;JIN#s%gQ{w>0Cc}*EQEC-gH)=4QxRRT_QIdWYx4A~K2*_6ClXjziloQ%Y zs_fJ14dsWYeae^Oo@w})s#LpP=m17-nvthqouo=S`5Iq&EcR0w+lj+dO=w=c+eDik zJ&WZUYqe@MJ$2dXA{4!sV<`hFC6&v)IrJu~f$GSlglHs8K$g)CC=oz6ukx%cx3zm|-#so< z5Io_E8m#I3DYLz`5bYw9E-j?3j#g-zz;`A)q^0N#Q=hzxLqjsE-0rwB4{oH=24or^ zSQ4W|qOzXpIYM%ByW%Tj1lWjepxBVlf!Qp#BYFYz6HhR$;JX?G&B9JORlE41?;BVs zjjU4cQy8{te$&l0D#vU&m<7(?K3(M`3uw%5BQ~

wjWvQNy=$LC{WK@fXfi-k%HTduI?9!mrC<1kpa1RO`Q1PMqd)qUU-@NF04%Ie zP$M2c-ha7I9Ylf}JlU`dji31#RK@qM*G4&dVDO{MeK*XQ_S|MhjH|S@E>g>$ZLS1W6^TkAj7O_>76op<1pWyn~hAN>J=jdjRQA_T3(EA%4MPx4SEu!CSScU zA{W-tdfM8w?Sd=0efRd>?lzb*7>@O9N#r!_fQ|&luDrJHZ6p8t=s1U&W&*oAzlY&Z zyR&~bTefB>E$(i9d?l)m$tPVhH{QPg-umVy3m#6tWIW8SQ%q!iD`^w&)uyHHGMKS@ z~Gg9W|wBt~5 zyuU=iIVH7n#zLwE*DAYpX~-jw2CLxw;^OAU=Gy8q;?oX( z#3gyc6%+8|C%x3I9S<9YD1O_8C~5dv|BJ*H)SXpGqPlMJIDcM!{q2KKKl|e0qle^* zivh7-Z1Vsbc|O8j9hpj>PEwR2bR^V7A}^McKPdg;rt|u>A#(4)7<(@r1@4B)aP$g; z2!hf4r(ZwWe--bmnf0Bif2GV9OdzS49M$Bu1<}L=p1JIKY=YnI1nqmu|~bi|O|AqsLF_ zBaPbJl3n;DVlVgdH0Ap?>G9^q>g^lX0;|tw2D1?@j023iK!y^Q-|%6*vykuVm@PL) z43Q{#WpByiSa3w1EU!6Za$#xl;gje8?|<`W0RaorEUc17s+j7Uosp&SL-|J=Xw=Et ztte)BOf#EIK$b_vg&t!%#JWlBo$#*6g^Y6@MW$*s{mp5IYvJhWWZ)XS&8@+31C>UH zjQgo5(-9`j^_I<10E?K3e3y{1y=kK<1r?rS8p&?9K6^+fRqYG1;z$OuE=0OVq#$LLlH4TCBrGvsX%8Y(OlLvU|5GpqcC6LXWH+7$5}MEKa(eUW-jb{!~dmiJr+rA{(2EwN_eA(*Hcu z5d#25VS-|~-%&8;NQ^{g#G5h0L%xzCS9B^T84;nJtN6{^c@8F_ZyrAR`kRMOpS^hg z>^XMr2j4DO~H`i}o-+AxujXO84Uf-{3sxr7I-Y=u71fR7Xn9ffn+*7b zArV$CNp{7;n5s!6i>_Zrh-4E|t27*sYQ=uUL8CFEJ(jC_a=9&5FjUOTOoK)l&cH6N zorsx_g$S4tkRqZ}dxr2>zoPT=C=tp`$ST!SdL_!#r0J$TF~r42C<#;__8u?M)u-`7 zsX`&#JVHuYrq?;kEm*CUquTg#O`&f zaD|6(L2R`(aA<^bn(*v0WB8h>BaV2oCu@vTsFr~)Yuqq?aV&*GcTYpBI5_I|ZOC@h zmYs;Nlwp=)p)5(&%0jBbBKPo20in6R0hLT8y@~X@)M-L^^cV^DNeMe`u!kB%sT9gr z(r*u)MFJz5h*G{QrJ(AbsR`>ai@L2or3u(krzT|pgdnMK)t51WVwYLzRB43GTFVFv zo^U_&x6tb~RcmnUd@NE%>@Y>r4Zxt&-egAFdT2z|otSl`MuYU1Xv*U*)X56cBpW?* zBBxSSq11wRHMl;f9{ z=SlIxLIpHEsk}D`G~+)WthzJ~lX0^i3T>cOe<@hKiGgc5dihWs>bsAW?nLH-5ANOI z9`y}V_HrZ?m#4T2XfF_eV?sL@0Lm>CSu;3t4{cC8OKf#D%EVEixpcS|@f*+!-KQs! z5pkMHgIec#G2y;3xN~A*;9>D9^aao4M z@(eBywm{BkC7tcYbJ8eiS`!IL`?rdByuaM82cu_LhHE=7Xs~38rrvOWRa}tOh^H+q zEx7dXYsX$nKFlCC~{N|!OmhrR&D{K5P0|JHB)CUIWB@vr~I_3PJoA8Zli^TKtE z5-P*I8R7?z%wX|!&k){Fn~dL#E~^3MeDdpPP+n9ox8J4j&0i+Kwy4t9c6=JJ}zK ztgL7wjdZ5g%6G;{_0_#7ZK9ci_j*nKHNLqYN!LaIg*t-eY>EB}f_VP?c?c9Vs!9DmhFQB%6QN1;h7rY@8gb^3$Rf~#(St&n>}ywiZFj;} zWt9?6+}b5PN487OFv|!F+P!-9*^`F{FJGP@B$Pc5kuMd|iPU>-9E+v!p+#s+8SR#0 zKsYbJbrs^4wY8ToUNSh!4j7mPay6 zf3$#YZ&ty^`bA4JbWUHoVW6D$S> zlo-$vk&C}Gm_g^2yYL`?|8xRCnmvfR@8oEshtt$8F9vjapQsxCr6&Opubn)POza?Htte zG@fOi?Z(x~{K2!$L}UCp`<(=qjw?ZhOa}VYWUgW;W=yjX*)9o_ zGh9#3&_?XJR2&d%04Qj@YnHts-yzyWznKtN0n&7d|Gce&T=QBjK+YG;Ol zerH!U_gy)^vR24;lBgobeB_^UIlKOgU2Py)YuEpkw3 z);&zaqTS_!j+`kjo;QjyWP+H!+(t7Y6!BIJTb>}E+IhkKX8w{@x@1_YF_U`c6D1JJ zv#6I7Ozdg%gk%Pb!h*o+7YkZ7`C6A4NZhO77juqWDXjLo=W1ihnvls`VFp)90rF`m z;Q-uXf@FD8&K!7wy+mULNkl`1+zH4 zPoBSg@PH`T7hinw?ZZb;A3u3U7tn)5@L`U|&wYbZcKX~sJ{;7}Nzl}Hjy}Nr?x7Mz1trFhFYB@Jk-dSY(#0O323>4^CVzV??bHzx+ zx))5Nsp1-t=h#wBD$Ua(&vIoX1nKX_gSDFvhImtmGEHR#H3=-jTE=!A2;YgXW z;0xmx4IboE0Zz^bRc=)nIgaF{=F=3~X_63(YZ*$LOq@Cm>g=@)e@$t%23FqXA-TXz zXa0yz;&Rts*~(l^oDkw!lrRk`toDyzYJZi8{812r+)Lu~L)ZrKav8)G~ zgYD+IbK@WbBl4cqlZ~_CE4h|M=P`+FJJ&!CWuT`3$(X^}PBD|l(ND=zckXDZrl1tx zeW8I=0ujtx$K2=pCO98zqq3(b9rROgR}7a&oO^MV7==UW-26<+!Tjln&CWuY=lsIlyLcL8(W&)H z^{L&&@7Xp~du7UYJ13eD-!#0T{h;+UPR&uO22C5vlO^d@`*Cg%gL0Y<;>YmlWBQ`B z;k5qxO;<+G!l;mrCN$A_i4>Bxk0YDxw4q@2$k4OIhk~3De5e( zkb;I^CMK~CTm*v5RqL;zq$FNEGYEMq1DUY95e>@A4BIopf_~*UPd4J1$!PS4<`2rO zC(KA_ZL#8U>{(OgHKsA6yY^JY%Jy_Wj90BBTw$bKY*IDl4s>oQ%@ZCeiI>^hxH229 zaK^MiY`W(L3Eq~+s-aq`cU;D5A z>;Lk1e*3q-`@N4CRd`Y$_^I88#jE(MzQ%o8#Zs-(;iXB%Gujgk*-#xC(tx%A378b$ z)Jcrp9MBBy4#TqJ#v|6D51jah-l+ZFm2s%VqK9(Gd10} zY%46f2RLjc7hvd)X_E3?F7A4NH6^hpz0)r+4+m3eaj$k`TG&s3nQ(@uP{&XgvANJ z*azC1Rd~+nz%8%>wWeMR>M5-~hy-#8sT&8m*@-FNmQ2sD4iBC@dO!-UW`|Abs#T4A z{nqH>u=`lA9$N{gWs5fqWRB&a+2^77!KlP>yqCuj7s}4t*RcK!Da}T6_LvN{wayb9tqvy{$1G%1xnu8GSY2BuI*&yXFDtf|OuZPa zvnC^sM7?Qt31ota=4qgj0R+){(NDV9n5s3=9z2%faQ)fVUT27=Jyu;aPIi+jI6S## zQ(7MtZ~OpcK%2i?!%vT=n%tTNN-`{ZVrg{=8I|%tnaus+r?}E+?PkE`Emz`#PH+Sl zs3odFvAP0=Ex}$eutKug5nk=TL5#K&9)bTaN zYfMCi5?f{pF~~`c{p;kYPDpo_i}OGF**9cYXR40{iUWN%ay^+?gt}w1LoK6>*RNfr ziGT8=pFVr`{KX3vfPGBB2d@q}013$F^_$mbxNHj_an(uvLu$@Q4U`!v#@87Ph2+3d zcWM`WWQj=R2rbWFhR~{D>;&oXoJd4X$0=hBoh}AsWqIMw&FgHDeM_XhcugxEQ7Eow z2+=zPbo1D5lqZlS6`m6#2uQT}eqSXughl1I34Rc`8SMYxfA{APpS)yPaI#25E%&bB zr-Y~=yDRz7wgui+)TMm z_{~%J%{#&fsRG0A@_=J#n|7%xrnf8nX)126MS5YRXw<(Vai-}q|BgGy-6bCm?NigS z>A23b;tH0i;soca!6uS$@zKvF0<_ZB2&oojqvQap;!I8!kUK&}4Db&_b2G+at>A!h zj6#GJ2Gj`uvx=e|az5iuHR)o4Xw;m|!(}2A9;H0+u87MHPKAN&$Wr!XbVUNpChN9p z>XNRj`4)Cu%~n~i&HI)|O@$Fmz$UrCuY^NANc?(E89A836IxhU5L1@*jRwKFYb0rj zaxx02qlrpXR@;(U26>EZFZI)!+xLPBoAj3vS!<)J7$3&Wv|A&J7(J#Ojk;9l`Mb7~ zh7oh>#V?qQ@8mGKq*yMGL<3<8At?fWWn~fj4jLJQ12a~K&~*6S==wKrA3u7IWsHzs zY(rms_29|Vm)|~k^6bR{%g<|&UM0LQpIs&n)+xw_NVd4KvU2zK)%R{)d;jju@7%xr z!F$A+ZCu;kxPSZF`?qd<@ZOD&-oJ5kck|xutJikcukUWcSafxJeQo*j$^!dd0=|-` z8Z;NiAR^BKsEm)-AKH|ShWBYelu1Tt8;xT)LW3EPw0<7T!(9!k+)S~f3EhebHNsvc zk4iFgEQ8IdkE++uvk=4cCo2~gXKv(&71d)yI%9CDG$ra=KygTEd!?LQfY;Y{W;SwOf%OcMY%v0EfWf5f3LrAu5e$~?dpkCL3$uKssie%G7gq} zW^B70@B(>q3WUsdCU$H#*6D&>(pl4rF-#;=OzAjrP*J?Jm^OjgQawh7(RObp%CtGF zw=r(2IyJ@2azb+wi+L7R#DE}G!||jtFb(KY3Evzajv+oVsn-u}M{Z`vcNw$Tf22tlepGL8;_7FMyhy1iPf`UliaVN3Gr{~U{P>KU8Hv!3eoKSW zjr~*Q5ck;edn!;1ryRSVEU;8l6@vG((Hg@>BTz7-PiGpIX;!ZR&Y$f_QVN$~VvbYo zw)N$uU;d?E{G&hk{r~E}{L_E<4}NuHZH-=d!tVFtIbsRoxhUvbSw)Iw+zEsk?4e>k zloz$~Xo%71qpof&mGmF{!+18zgS%`@fp*4#c;N1#GVby>T%(>pS7z)}V{OEOc(23T zy9_H!*}R31t_=C4xyWc$Q4g|WX&do}vzn-M;JX!R9P#Zk>{tfP9O~Sq@Tj<^m^GDP z##c>|FFw<~(^;wK*|r^a4b^-Npd(hRQn0v>!7-E@t(Prk>DeT#9e-Pqs;#m{IWVmI zATsKiE(n?z6r$Biw7@x*2HIb9n`}+Py6=D(Sgmw%+e$Zq2e!{Jkyuf;>c|9kqmA0i zY6!Dzp7kyXn@5k2b{LdN!!Buf+6dCSp@Hu$JLbI{4MaWqTH%w->``_cD zvYXnl)6vI9^ZN0iLyi77yOt8zdB4x7#&FKUpUV@mMWM2;t*x)DE>W@1M&remjS}IGZqKK!;|%iW(D^kaWaeT*qf%fHvv}c8mU(8RqS5` z#!_aCHL=1GX5-ZVW_ry^H#-*kQEr=Eti6;+mS5mBbAAFI8%M^k(9%xE~I z&gC>K291wCoLW@8j$gL`X)4p0wIeKs>AqyLnSOb22)XQ+-+c4+H{XEUEQLb+%uZEx zFzu7t8FFGk0zIh4MdBL}i|9}*tMiBvRs3kl`1}!Ka4WHe6gQTJm3NOW!a=*Rvh@7b zyH7uVfNIsqr1P;iRPzydTdCjA#>V>U^2$$t^3%tUpO8B=7NF<(1r+W%N?0;czou1% zweu+45~$6p_ngp8jlF~3;mLF;M_OWQvoN)Rc`-wb&45PJ;~XbLH`~;|u1@j_Pj%l^ zmbeNJ`tBB^#O7n&B>K|O2rAe7YjYCO$co5-!cd45fp~yPi1Da>fnilpTSPYrTd}r0 zeDdty{QJM)OWvr+D;2%qV=^YKEs-@ziq95_ab5v*zT7?1RcbJ;jA0_bkQTWFYBtc> zAdwkAs*!HzT53>(*-x})!pjQ+h=&f|5ED>{Fy&9D>ew2EcE(&%Adkpf6QY?X5i8He z&eHAs+q+knSJyACtX+Z=d|_$s^8C#F0{p?VSQ4pG(riaJPwJ)ku46VbmLv+3>K;){Hw{OI)B;%^-s`$Qgc|Xw|Hk>}X&JeldnJs`+4KLF$66 zi$Ae@W)8nj^azH~qkf8@3D5;&3`5JtQ7=*%pln=a1X)5NDNvZI7kG8Qm0l`?*-Wx> zognC9%*{?$*_DYO-*SsRqC?SmsXmorXltyY3esMP7SnR7uHs1M7o&m|16}Xgv%?2Z zUZ5N;E?qWD4r7nam6wV4p**~fV(HkB!%>d5%E_m+$-(Q_Y%`Fv65(ir(>wO=q=tCP zi9uWk@T87jSo*ja+z`Da-4Z8x5nDhAsb;f8FU+T>ge$RTGtDU#Yh8Jcj}T~HJU?J1 zdK?q={?lhHPKO*mdh+C(Zy&v6je3Q^oStIdv9kjBzIkhRZ*ya7b$NGdb$4sy=CvJy z&hFp6MmC<0zH|4Z_wRiFqxlC0Te# zqDJt0Ej}>-O|z7pS%plZ$8R?DUJ#pmFtMDO%LN=UML6~caUlC^@oS?5q49j58vhj)sF~%L+V~kkK(cGuP#T?T zn~)N_MyIMm=Gxa{CHIq29gTN8lB_`!4;T2Ju2>U=LtpFOL>0Kv31+cdu!(vco9s}0 zO$D)R0S?t_i_*XCE`dMiQ?lBBU%f zGe##Nx7eiEfw?{twSJMT^Nli*vZs&D#@Fl?k(RM}mA^QvFHIZVN-xumV0L-lB{3Nz zN@<_-rWPr}C{PA&H@HkbZ|X~YI!l3&eMJpE1u{AjXcUn?Y2<-^*vx8W+75Fuy+kF5eDIpF*1|O~z`G9Jho^e-V2nj5Z?IKTX<7)*K zgJudQH8&0#8lRBE!a|WV1>(5V4ah<^U!G>0>(-cVGg4p%7^W(17Sp${?Vf>@&N5`l zcpL)+!^NzVjYrCx^gz9pZ#+-|N4WqR7mI5IPIsOY9X;&FWuclw6M&X4c%u3#9BSbXJ>r4~jZUl7}nm%9s ziL#oXOO0G^*Fht#j_%u-H+XbjBb1yIJ{ziIES%9weq_4Q-eTE&THfNPZ#2-)<~N3M ztX6!q@v!IyU)B!;!<+(IOEuf@872}NLDP*3jUi-adFR;pH!Y+#??B`@D(o_eYwgWy zo4r+2krQzkWrl^Pl~oZkWYV6pJf`=O`bsO|7z5gIhON*t_|S%J=g_@h1E?yN&+&oY z&pIHmOv8t*IKQv}DhKvl%Y3d8RY+KkbfX%FQ~ zCkhw43(7o5@o;CL!7eVPKos)DOO(aevew}!GyH@COYMw^peq;}6rK?0)lBk;A2q0o z1wWE3FFuC)&2aHNK}uTQrwvd~U7($(k&2X!cr`6$FPpSNPH}7P^nYJG5WZ#IwrcFGarGu9Ttg*O}k12R*R;YrdN*cuV6%a`%$GmiPZ3Vr*1ThJh zxYWq-?q-va!d!~N&y%etGZ3keK2c`U(143T+ZIoV(9rS8TZ2x;fzt?Rp7(116%E=I z36#)rlh99sU|P)f-dQzy6^uYaz+N7_`s%^AAAkG_#LrkySiu=XGy>(+SVpCsbdmyy z8FiXEJp2mXc6)spv4vv8RLa*)s4)d=z)|w4p-xZsU%cWOveeN746K(a>J;9Rk3at! zV(95`9_i;7X4|1yd$;*R7Z&l{#nD3wouB`O?=dsJ`s(XoYTD(RhFWaX#5QlsIh+ju z8bxvqXBbcu%m_Vm^1GGy$!j9Mio)f_) zde_|To7c%f&3dWR=;e!7uny9dh8Qm_UY?M$q!dU9xVg8M8YUfZ`Glr&WZ7(cqYEo)N+E$lXt}L*c zQVsV20|v7lf`>bd7S*}npfMxrkv=U^OR&jLp6_FYZqvGSXBNu2r%Kr~E`z46m1s6l z`9YT+djz%VWw_|B-`d*VC7ILZ`T4o|#aYfQF3&A3lMWnn9Gd*x%KH4`GT+WFuM%=d zB+liP^#xAGwsP_0(&Eg<`Wh&_H?IJybQh5xK_~ghNZ_B-d9j90qZ#@rnHUCQZwFTv87;4BjrLSa)d!u*?Eey%Z6Zk%M}G$JB6~ z+0Y#ng@IB*0-a_LfWUjA{u?q1GHhOA)`0^EVN*^BAaIw2w@tXn1$$X@XZnjEY$(5zME-my~ zo`;fTGwKR@G7%NGmJ>S5K8hB6vEXK^4qEVk5Y8B{|Nxy^x~ma#@5f3X|@_(mXp6stt1s+e~;#;IVFw z@K>)vhSFf!n+{&S0(!}6Mh888`uyQTu$a$coqq(q_5QOb&++u|bGZMCD&bYfKDD;6 zaQo&SWb?38gDS#Qbeo@R+wa}E{+;*k{KEI&`_6p~M)y9rd-KEhZ{5DJgPrK3@7#G0 zan#`Fs&a?j=EmYiUDQKyRX}kzE&gDY%#6mtouw!lIsl3 zRw#ARvt!i(6|THMZ0T@PDv|2jQi5@b@NQj<99Zj-j+h@`p@{1NSNgObX#vQ4w$RlwsGR@2E zX~u140o~|JWh$;i8CgrFrvT{+~Gz$Je`HHjZ(Ch9gI74DeQ!a)VcRO8X-X7!lUi0>JlCkwB$?^v_2!(?NR}6l3-g(w^=F!_gWgl$ zlpY8nVc@E;@S4Q4+i0SWnw27UoQ}ZMZn~jVltD?rv81*vbef%4wi8;38tLvfokh<( zo(lpYeUFo{3*|sVVKCbT*{w57L!pk0Ooo&l$1OvO40{40NvQ-OUaffkbFoS zP+UoxkyNl<3Cm+Svyu#BO~NN>m!Pjr1IYyDI>SA`D$r0tQAB@H|Xv>}}E0pi<`-ccQ5=ECvBN8%QF1w^U8||g{hOx!HCg#LJMO$fK zSG_m4G$qM%8ZO9PL~kP{|NPH=_rLzH{)_+qzx!{0?bm)84o)0R5a;1sdeao3_!fj7 zs7|_Wy3&p;11_=y9-^5;RaT6Nw5EegMXh>D8+>(RroJm(&a^c=Ql*tC#*ZYFdMXr+ zwV)d$<>%CEsy8~}M>Fc1RghJ}uG~J@VzeK4kP+B(8Lnf_i&4@xOq&aUj~%5I*4D|7 zcsD*;!8zufLB+l>2X%3{{%U2g&1@@A3Q-xwZ(ecR)@lySkyrIP=a-G&qmGk~t$ykk zw%$H>0NLdGuyn=_4||h76R~nR@Z)!uQ(@R~K)L#DIhbr;jUDpR`>}ER(LU%aw4_)R z?Pvq>WFi2I;k^R5G^SXf5yhqp!17yCXMr_TDDb>*@Gd*3yQWzP9ROzv*Us(^D;ONQ zGv#O0b>{SRJMrOOZln2PkG1{?D7Gnlzg8pVAED7^EXv+itj+5P_XjLmt7{uq=I8s| zRIm^2Gp)Q4E*eSu8K|qXGI(Y*yl|xQVU4iCe8lc45De;ZEofZ_e6|FZEGDZZ=#2_O z0<07Eyyo9A21*!n%)2JSoC#L39n%aE6$VSMOI2Yvlj$GX#B>aXlb9-kHMUD`eU&DB zt(d7GhEP6LG%~YDRWMI(C<-N^oMu+z?dEagnIik_UlEin`(oOt3%3wm2b~S|<~Q3r z+Xph%+`=57=w#nNc-b`)Jo7Xw^V<6A(h?js^9-`GdPPBW_sJ+K2D22i3CO49%t7<| z3yeZ8nr@mTXKqPPB58s5!K_cxeRT3j=O=9(K6BHi2@}zcbUnXxB^+?|4zaKQ?5nRn z`ScSacNsYpf;GH>&u6`?D9;hU1}zt#T4~PawKE!}bY=Mp!@St2O9w9wXTv5CumjHm zGxHifvzfL51W{A&ep9S2xuyt2`{J9&31>h6jtA^@layA@9{;Gf@UIK?JUbI{xz^ld5gDhWwx zsa+Ut5FZHc`c4p<(E`d!7WGEgmpL(MIjE>_-M9)hfD1d9HWBjCbm)8L)iV(&HC83x zSs@rE5v%pH;ml39YLG$^7l9CB3FV3Z{?GsF+egn?JzehHk8CTPoolNLw7I@Y_9KRv z_U5C~{ZyLQeaqt`&jK>xmW8=F_+f2|S{}p2%M(l+r((k`jA7M)liJ8t%g{=m?;pM` zDXGhtbAK%UuDxQrWGYl1C?!zN2vJb)l9XX(b7}AH&SYi^=I{dm{5*j3S8CvZjs!Io zibDw9uMmqeb9oUZ`|{$(!qWP}+Rn<-+S1zY>IWa)TUlHE?9(r>fl}g&jwK!b=b+C) z45YD}^NtuDA<7toDN;|9L3WpGzslDxc@h{{eM~!+&j3>iLMqz2QC_CNF^(32H zTU|mVRtrVq#ahHLW`x6@j%3H@a!g1I$p4sV3j_;~q-2E@Pa%tS3p5dtkI0IzE9kM5 zQG%F|nlJy{Zk~Zr+fDXdb34(LEL=&wQlg)c8v%$GAI72HGO5i~3b+Il6-80JQL_#F zGq4b5>m@p|aTXaSepT}LS-BmsSDRs&?v1k?{dG6s$4p1(M;zeV$6T^ zCEBkbbGBBh5 z2u8bi4d4IWn|n8|ZjefUdu<8JGNeVD>%g$cwI3bUa4@C?8$9YDG0` z*8WJzHGg!GGU8#l44Xs6 zm;gl_J$^Yq{D}h)IOrE8cjLfy!&S?$ffT~?deS^rb{%3cpTU2BzW$7?FP4o1>)S(( zL?_1O>6)GNf`TOaWjmicOb1~kZygW6VpW4<$I zjaxs*jdjzL8ks?HSc{RqK((Hl>@Rgam?%rLM_70%u0sY_o0KR>fmDqHjr+v0A=Ut? ziD93yQDv6rb3x;d-zw%$H)K`FDnMFVT0FJv9QtiF*(2=LI?!B z8!KlVNUHE%iqA=K^xv1GhgNR5On#>7fQbKsDe3GI+OcC1sjgKolWvQVSE?Hb@ z3i+h)d`DZAd#I|w8E1RbBGAr!OBobBHNFatMK$8Xqr~{}m4>RM(l61nLndY@trL^e zYrDJu>>vN5|KpAkf(hHg8z zh9&|(SIMWU9_N@(>r#7sq7E;NrVWlzgeP$?!JG`J9;f4OGsf*JdyS@*<0S8u;zs4}LY{pk-N>;1YX4G9wK{FQ!WYYk2tux+!-kU-OdP&=Gm{$aBSUX>887!vzrna6Dj_1QQAS%T7;rVDw8pFft@*^mi zC%CNB=GvF+AbUg}8EuyK7wzB}9@2msjL+BZ;8vtO=L7X~l6&2|9LL68n%v5BsgVz~ zTl?RjepT2pE>SC-lSL!H?h$^m25Mdbw}EpI#LCig$Z(MywX!nAe6p-r7I7Hmbcl;C z;n-n5f&^PCcN%rJ88b~d2syTkt-c+tIcl(4*u5D5B(PAQyG!Pp|X7-Rwo&M^9Pny?in zl}t7Nj7H2}&z?SKCed45^Z4N-*3Y%IW%Rvx>E8x&KN2vzL!TVMb_C{#XHAW7HEpw5 zbd44+losPflpGBz9+b-nQt>J?()raKl(@2!{u814Z9%Vxhi|`m@ZgKDzx?)_Z{vl` zFp3~4Y+H0miE-^pXSefRInYn~8dJg&J6dV8!)ZFXK(=HAf1KM0o0sO341tsYM{g$z z;)MhPkw_l2<>l4SzI;dqB;qHeV;H7b@fsS_r<=!<$VRjsTJPt7{(H=iPd@qVO_L0u zrm`zJRXf#9#b_R)j7KAm6(b) zQ|3wG4N{V8XaH(M{MR8MwH8L|2S%6TexfR7Lug%X++~!RH6_@ji~~~gXPy%#^1=N( zKmXx}zxGS`cRu|7cR%{>2k+m$ewA5B#0-OzHQq5mv&hEPDFb;#EJ+0=Wq-hv`eOgE z@+&`fpEF-UJgsEVolsM$6|?I}T8S_%K&Lh@LxFa#Z_cmGLo4;-^$`mL!XM%&){*l4 zOlMaEopi!Li+_*J8>}-E6+!h4660}@0I-37{pG{2e)e#RFHZOgib3no*v>SXD4i&W zbl4AkXqUcjlw(1gDRdF3mrW53oFR`K#`G^YVz!mCew@g=;i`%(r!-X3n^Ok{vY2$; zYV&3_>7JEwg*B72d)wO|eR%i&of|i=U%PpIk2IHidt009Ymkd?Y^<%WtdK(wYei#l zq7MrIG%u~J0u}R)vu-qX}Viz1oxBt2uXKG+hOGZ_`)Ue&u9zj3{FiRy?yMlrb(T0c%r$Oiv+L)j-COGRW`U6A*Y|C>X zZKtPKmlt<;NqN6=b!X?swO!)QZe8E|&ii+<88HsO`{BLse&^oZ8=2p8?nClxB>F;rX>!8bGt1>?;0u9<@(S4mc3SVB<0 z?Qfqmt~W-ZC8}Oy!JO;^ZqI=x760>oFC9K?7b4?=N7X#ZZT z92zD{J8D?5m~QDZXR|y7C2H-tT}Bt4z?$g<=ibD=l*oi{`G*yQFW^^%wHaxTSnYeG`>aEfnN@oJFcD+O4$xj<-fk{memr z(rUF1Y9|f@mNQEBmRjor7z3?I-Vh0{XmL>+oX^PXaud#ia}uo7`dvqS!#RauQ$h!2 z{3nfjyV`3Y`&&L&dgz~5-81XCbfTlO8y4CZC((a#wq{iZnvQAeD9Qkf6qJ&#kM1C4Om26 z01-u4%y#mcA3CkZzL3?aruO73Dj6+tI_!khfwh`7nLl}J!aJ@6k<9W0gDY%HtLtm5 z(odf}K`S6T7;mF^V*OCS48vp>;KNtc-EMMtBQxGNOt6kNz`L!6L}*dTcl<}(`P?cv)n@hx0hUS2x6F!RZm-=MNn-$6_+ zwUZM}j&$peD8n|iy}kWQzx<2;=HLGN|Np=F_dosklg~f@0*8c)As?OjBU+w;L4hGe zXZuqIV19>VC6qhq@s4|wfVe&fJL9NkU=X;7Wr`Hh)KsRwh9Q7E$mp_kj6rj?uqzXi zbNl8sGT(7B*Pk!0N2O-hi%>YQ#;CZQUc5M{^Q`ZkQk0LdD<>uML6$&nUENsw$!A~u z<=^~-uGPsT^dqZHvCn8+Of@54q?Dq{NHqF^UH5PxF;#Z9HvYvw{fEEtum0)%J9jtM zNnXStg*+Mxk{j>cyGv-=mtTK{;4J!UWa6tGIIP&NDo8bynZ(&R40)d;(*zDK6Lo2X zhLiFLgLPTpf*zM0w0=A7(>xqI&C<&J)jQjlmM^_!M4~wZ_gP$-UtT>$9LKXde`#ti zxc^|PsSA~2{G*33-d?|@DW5*y2ek6=!P5s{J%0P*=)xp`rRjnnMVRHHzA@2xDsFJy<`>gMYPgu28&>wZsXOxcP}g$?@OX90e2-L#C5FL+ zZHU93k8Z#L!X=01qp7jDli@=8395L`v&xk}VG_D)nL$cfC8$SyD+eRFts1NZ1*R2m zI{Buz7n@Tu6dKu_o|MBm$X&cb0C7#HE<`81i=OSC63Qn=OLwR!wAl1b_}iT&9tB`T zT!Z1vqzSS3<%?yYK`e6`aKyC8-2Aa0iW4z^i2)OmTGQx$so z&>I>_!V(zY2wH%9E9(hyWNg9sZ>!u*unl3td-43myTUR)U^c z;880}3&6*=w;6$ilI@W7?7h1;-@kwBqYv%?Ec*V3_dk69Hlb(Vxqpj4@87w8_tw?x zyBpW9ZtiWbUfm{F+QRnw(%K3}qF^}q!9WLkk=ftWDhj$4?HU5cvAi5iDMlLoBFI++ znG1`;4L@q2O}jo3#%pSG>HN$pYXGkdgDwKqGt@eD+?s?=*Q59L6$1}H{C4M}mJ7Y| z`HZKKJbaFJ zdCTb@?{wf68yqo^-*Wz91uo0*X=lMia0atk2aFQ+v8bgIgJ69YMPcLH<{X<63e!Zi z-NJZz8tZ^S-uN1|Jj^tEct;l3L}@a6Y%mKCn6Ys6sb#`I~nk+>|Drm9{9A*gi3R8^X*G$1hrYR)q4Ax{GVL zPJZ>%`iR_EIK{v{>8@rb&SLORwZTCxLXFKo1I>sxIVFaKln1~5>%a0p{CEHT|NMXW?|$JIevYnq&d5DDKwG0D*q`x) zHca(In3)RJFdwASgOg=s4(k7wQ|p7G`k>v_e8fo>leB52r6y$!$yUwST7Nhg2CObO z&S^89YsuGG@URvG+Q5@-+d%~5|C$C=IYtPmfkip* zr=stX5ngKR4cvzZ-aG6>W?LJ%x7;HwhDfa(bW&?kl6T2US!G+n1epR- z96#f8ZYk=~IkUKRtTD*AMU3` z?oWp+ARzWhV{M*8Y_N|VgeJ<)H!{NUO8btb-W5g*NJKi*Js6r8?R^gM)=W~dcQ-uB zXl;|}@DpfmVv3WRosB6j;*#2MTo9GBlDje>4S6aqGGv5C>>`)zcB8e7DdRi7qWTl}<~4uA8} zWFQf!SA~fZIZsSAz8d;0jz>sJAIlvl`H8!ir_9(49Nmd0%2tX)N|X^_P$m-e<+&{F9nxD`WF zvTzw80XJ8jZzq(B?Ta(;Um#WpfGtpYLeB9oA3XWy;WNZ1o;$KPQYlB~uz8tNoI`Zl z-}=qp+~0rk(;xqYA!MFjr>&z=#hbt6fMkVbj-bp$s_SLg9}z4~s#0|$>Ql1?B{7g` zn}lZ2WDARnNDl0Q)Lk=N7mz{O7Rg6KiURdd@b%rjb)8-|#7boVL2!Tn5H*lN3lxcg zX`(aKJiyD7<7A%3j0=s((W~T|b_ zVnM=YkWJ=wVl;N#iu30nh9OfHf9Jj1fAWXF``r&dM0X9o=a}^NhZJ5C1Z313*RJy3 zPd@!Dpm$7oKe5I2X4xU~Ge@BjRN_T67vU0vgKumP=ZY;5oBZg1k50&}pvL(J{= z-sbksDweEO;@K8as9!!ieD&hh$s5Gy$pxi~X7rQd%?(|yH*>n{j;QRK1x;yF{7X7q zid;Ds!__^9SfALmp6NBPc!n*{tw)5Du6X@OaYLRnVi;e>mlVk@NQOrx3u7W+AHH^V zhvDWD#}^oeOv+xO#sL|i@X5*)w!WnPCp;%cb_BVVt7^3Y-vG~jv@UP7jRM-W=PG!92~smTNVWh`f?wYDlqgDAyhTcV9RIyV+u%O zm@o=F1?6i;3kVU<+kQ*%THV0N)w4}c*$_5xH1AH#^LU9sw!%e2r9aJa7)xsswbX17 zAT(vz6Cqe2VTa-NMn(Kkf2H+xQr8eDDjUl)-PP9F4%jpDpEj-XUG6s4|mU9&IbDO z#leNyi-)vngRGn7?byJ@vb4lnm*b$!WNt!-m4%S&gJCF4+w&MJ84rx%?Vat7 zn|nL=?p*)i{;m7BuVWH|hX^DQHly!;a0g%!7NYm=T)ThgTC<_8!%2kkaxr9Bbj}oP zt_&dt8>rz@?YfkjV0o|HUWzLpaa#Cnf8?@nz91;yiI*q{=!LYLvF(&WqD0ND(yTTA$G84Qx@*iH;vYqJCxa zVojE=x8BmbWGTuCFYsJ{kI$6W9{bUQ4%Jf)`b7cGFd_hQvnID496#qpJ^@lVaRP^ zqK=x6Tiwbw$*`wD;t#6z*vlg81H5nt%oCEk7VW-#yI7WMKagYbOph@Ln$_OAk8V_fVjoYj{a5ur5MI1;l<=R zuON4+ZEJdOXH%Co_Y@RrI{1jHvRJ9e#t2<&I`3-&Dbtb}tuWF1En0yVHe3zfCJv1H zn61!Hq3uojM{N5rNgkUo9>GMiix>4rn|=G2jGuO5>D4h$J*A=4p(X-rBB$tN3$ zDLhOHSU%c-a?K}aatD61YGPKSM)iUESLyvDg3pfA_!rum1Fp z?%cY`ge0ds$oG@x@(GPa;iOd%21l-nwZqp@AV2Ql+m$FJuX4>(SLBPq8O)&+Km26s zwIVs_pP836d8*C&P7?$5MJ|*BiZe2)XG%IS8TnIIxu21>%9YU-IlsGB*L?1U12-g= zN2SYfv$URQj**alsPn_1qr2Q=V`_Z0rS+L+S(XV#tdK3Eb;)~AEcwuJ#?b@VT<{D5pyP9_clL5 zb&c4!g>1jU>~n5caN$>&Vd7?`LWr!OS(FI1UWHux0qvrcsjZLI=&OI3v#sb57*2 zyR(T}9r?GEoyW?ZR@I`W4#y^HneQaaQC;YCG&PR(BC$tNcLSBB;?ipsZ#2e?~bK7R7_ z%P+rTbS^C|VW2mXn%_J^DU(K$`iN$C-Byy|fU?QDR*fmh4)#Z?7WU4|^4urP5*RNl@x_9lvJ0JYwcfYr_x%uhGpFDf`eDVhC53_{D(FL$$!#tY?Uwd3f zbV8^qxHGi|E?BomMAphJ9m#Y2Fpn7GTI9K~N^b-$#fgs0i5^!?xAI!b0L{n|#WB}0 z;6VuH8xdf;t*@=Z;}aRSI5J%$<^^(;^2564dOXuu0KSsh!EpYbuV?|ryqRA4lUg)U zHw@V;@7=%m`B&fmhd=*Iz$e?A>lEL_z)T&nGbUO(G1SDpvVa$6Gz&MICG&u3gE8;` zyC&KWpK^ohf-bFL@NvxyHB+XWCFFiGZT=HF%7QB1Wz<6CxFvMS_xH&GB=rK z#s)orsse0`9VcwxWp!O-sgb5~x&#;9n6W6arBYO=#nFVZhtXcHLd2Y!6z{bD`Y8F) zchb?kiyCRnU{`jBVDqD`__}8CShgmODAeL9u{|M&01SEZ;yf6ltXSxn*RNl_bsZ4f z&U^Q7-o3T={vB|Lx8A>h1Nx!c*LH61ZQr@Edu@B|`rbO2xV??l?X|`2wS~=)9vC;ykEQEE&| zP=l7CU#S7-;W7i77F}67uTaLV3`si-QOdhi3FHBs`ulo^0=B+=ea{0eG-4XGt@}W~ z9lpAr()lV9#|ykh9l}3#u}bW~$FI%;&HP9{{c#CtuI6I2YhNx^N<2UnB zAFY82(*m-qY-*-Q^R3ZaTWsSlb0sTmA64pWesbVsEX`B!+K9pm2`U%-$5nnPoaA~lNx!#N42x;|>#Wirw|ENLc2tj!@SsVLFP`1VM)Hon4D$4eh>qDMUQ!BOl45 z_`5VrnwrIKr>2GgT|lD0yYi#OgB$q@L-1UOB1LtDamiwh;dKFy5ZR4;1LW-Wy{!`N zoXC$rOCBzxglzkN>;>?Z5ix{}_7G=V&Jf2NYU8lgY|F zq#91?0SK&N*-`09mji(hIpy9tqN}8#avZz7sYUR+i-;H>emkmT$k0$ZX!Jecwba@o z81W&_&y`M_jAkG+9ZI+}$c9}FM@Z4&{Sh%Fa!0d{nrzDC!~1Lvv`rjlGmKy;i(wuv z6^U*Qep$86Vyb4#RMJCfhB(Sy7TZWAeW{v5Mh1N?|4cYt15)ScjDac*e-1fyVN&?s;Ol-R1_xvE4{9bo>s=WXr78#&DbV zmnF`-@(N$4m+73Dbx>|AG?#QUOCJAnFb`sfyyz>WM_r?Vtp7Htc|%y_M=CU_ z%_atbmeqnEO?K{`O<7Y0eH{#o^D(bSOpV~q!)rgwl57HOnr-b-^|DG?MCmXQ{J6<$ru8F z4m4^|-Se?@f!&Z;fJT8=+>q=yMGAt%YnNTlS`&&drfJO z^Nh@%={Bx5(zfIY-IH8#)O z=Mv0Bs^umAvNhi+!}^3mlivcx8EU?mX&*iNlg6t(X>YUL)V4 zW;-X8fC5G!1K17GNyG@@df)=ae^Rxgt@lL1%@TQg0d<|&w7;WzJVJkv2v1h zm?uGqRx_q0!_HwTv)zo`-Au(z?=*I7Qf2D2{(Rm0QzxZ#p!{f|)CkiI2-fmoWN}~t zxwJsOp7P{yYL>kq2pt3i7=q|7)+OdfT%UDZ9`3*4Wgrdt1BVJN`}**xYN(jY+0c^+ zFJyDF+A|)A^lNy|1xAY2r19j z+%tk1YWk7>*A1(d8;^~CaM{t`q=6~^5d8{WDw$cva`;&8^`+DV& zW{zX=>8aM#@i6hqpsLdYxu}?DA*i%IR!27V)6(7YHcm2(xs~ygv2NTzDHLf^QCq0;eT%;=>AShGxw`C;3dM zCK9W>6H@Eg%G_(1f_=loi#5w#8Ksr3Xb_f1p4lg-xnk-ne*zyYAG~_{=C$qfkj3~U z&Df&AtqG7fnL)g|>j^7b?CtebUurxpZ!@~V@DRS@PcvjylaKE!gIEyki8=5CR}N!# zynLAxrd@{$t_G3#id#t2%qO~vGMJHvcJDfJ!AyIuIFy8|>5mf}q%}aQ?Q>-V6T-MD z>`lg;ZprZu7>!k0`3vCcS;tw(isqTjb;qs$Dv~|+EL?mt&ZJaL3IEpoFEg`it8B0H zI`&P6&j!Y5qVDkmRcV=R5FGvl%r{e2q@^36s8U+$mglZiFwmqE+h3HL=m$o~AopSI zuJJFHIL#@Mmb&hk74_=w?w|beAO7$DH~*V|`0Kw+kHJw2>Nb63_r%$rw7{LoCqvOy zT^{5ygBi<6C>IyMF$nr}1U&UV4Z~*j^4Mwb{2y5v2gZo2I7 z+{Y^TKLMFg7p@sdb!nkZNx*qEc5mujlsIPQJm^JUgC>p@FLSAi4Br+qPE9(Pc9!I_v## zU<_Zf`<8!L=&6Rm=K6M-3<8;4j!)-c z9$Vd&*-k78VirDDKBhmz#(J>-@_7<4?XwGY>p5|Ny8)+9JDy{T)fyY<`yrf;P@HaW z@6KJCmjTc&RLQaAoG?(=2=+mRZjaj-wugj3dQtdjT^iwDNXXhBVECioZw z&2D$JJ6MFCSBz1)Av3Ugc%6Gf|RUA2pg-@(j5<=Ifh3(TZ!*6Y*>=zk58 zii%>~y;((F>UkEs2xoam9HX>QU}dZroVrz`r5`n& zLRf5$Ge{U_3MFTja_3u}_Dp)hh|bED1olZbln%WVwiLKgKL6s2Z@$I)^At5FOsbXI z*&hbB{9Ig!&l$W9OEhAT5{Z4+(#kb(La@;~yBb(0K4q7ns@Z}sg_x?o~1Iy#nuVm4|7;;b2qiMF6_SO8H_FB3GeJdZR2 zHV2~>=Q*aAsVObAyt4Z5{_HP4|Kh=g(#$IrXz%7#Bc<4_ zn4f?5H~;nh_wG^#I+^iCY|W#GkDokxfdo!+&#B|-ovZ6z3#WB0eE!uJJSsb8{kmC! zJEhwLk?&s|yh7Y_ijN>#eyqOX6=iUBwsz(0pjBByTBo<1znM}0BU^9b9>R}m|4THg}Wj39F^D| zDI|$;-{yL={E;d33hsA+8f((1bIzyoi6~^aBIy;=1<&x6{YX+%C`NC;oSC}aSukba z{qfJBU`IthsLLYxxCnI>f8AcEQ?RC9mp?qt70VZY)41fin6H1fWsdaq_TW5r?7u~%40Q_v1nlf zs$^pwxyEsg1?0^?xDO)%+ERQqUgH7Yd?gVsw=xEcfv^U(#;fM*K?8$I4I-l+RP z5}26iB9gY!8r(+ZAu+gtP7;0}S2|(TNg3 z(8j#x3{sRapgCEnJX%^#StmgqNx`2L7$O0JWbiEsffq8 zIGt*ITh|uXmgcUn z_Lt^om-H*@2`>zPm_Xs=6|&I^7=hi)(>=Z%?)5gg2|VYVY|E8J{@lyM7Ui zz%{J!myWwTa`JP)C@P#|t#C~yxJWF{bPpqpQYtE$>IvO5@}x}sB< zI0FW5C7WNVO-w)BdDXTXy+i`L+(ECPeXMF0RMfrm8r`|pjM)n$OFDIOAV5+VHKUO? znhgO`zN;ZrW}vBQNB=CSIAtYIT0h?OOOTlfWG=#ib%ASnGA3O*j~8w|M@%1utYjP^ zXQ){ugHRyAN4Cy|JnL7jlhPS%8jWF>%YcL%LWdz8+JNHn2!STbC5z!?1yRUCyChbn zJS?TWUJ2MZapoD%;Uq6|Z@yAsJ1&w^-Z@TQ3?s+OLPR=bi~Cuxs$@GhF!*WRAZPqa z3zJ~R14viFJ|NfY3e8Fz$zjFV&^#mp4dKg!m~Z&X7D{az#~NaXKs-^t+HS2dE9GBZ z;7oo^ThfmW70;d3Il?ig;Zj=OrcTHw8;s4P$(F@J~?Ey z2w#+)38ISC)#bnQxBk}e{JVeu=l}GdAnBc*-5MBqmS0~5#OrP|=`X;05NVswTU=vn&#tf5gBj9X z#Lec@Dc03&epD=4lQdV8qsbD#rjs|=k@9+I5aGnqIq)xwP-nSdk7_JPoS1?PFU?oh zRXayH240qWxHpg!58q+=UF#bNpjBXH#**4&hOOtb4LVd8(~>QK+VH0q3O&CxzcfdJ z^=_RwX{9O6o;$r3ZAg{X*srS^n^SvEWviM zh%_-wNwPQM?t#On1Vb`nW=ysbI#$}6fg0{-IGbBzUeb!wfXB@eS0}AKleRSY`YJcl zZu^V+gBTzWD+d)5Y0TU)I2defZ1ZphF-g!|jQK3;H69@VvvSFv>InB-x@NrMqylXg zok5^9SGf}j76~*<=#bq_WeVh`@K=wbu+}47;3F}}m}S_^ zD6k%xpt%ne5P(dQntymlS*Ws8{W{|F2mj(_i&l(nKL85vo13LvVg*#R{Oae_ zDWt)3vr}w5@ox5J&WmumCRXxC&pfSN-l%uck7{~J5D=!?>|Bi>9GyORvZ;qP_vE&7 zM-UmXqbdxm&fUxr09T2e=G(c!C`m*)X_O6~Rp*9f3QLMw7ip@X_j=Qd^F0bkPawlg zn)=nBCrWAA*Wz*yG!KQ6)rhWn{7S(UXtWgXM0If+Cc0D^dggmw2v#QJBuK#pZIQQ} zk5Wv^aeVj!34}sInsngWa5|}0<^!AgsU0dk7ONv$e9n{efux`**{BpF_p5Q`Qp@&`Arufr2OH#5CFzW_fI zVat}5=KDQ}t1%OGmlwIXu)?kL{k8R_<%IZgToe(g(t=s)`E&hEkU z%{_!;*>vEd3X-1UtDM!Ia_X9#WjR;aD-qic5HigzY`d^W&KQAmcwr8f_HqFwHMUxb zR0UTN>-@>0Zmo(|=Ms+{bX5r@$G8Mc4E$66V!Z%#L&!5$c;pH>%%IzY&>ei!=^3j& zhAIyNQG|&J(l<;L2+$)?MxkkAh^5zzmnA7Ca^@EX9mso{oL-8AgYXEG5XdKv%!2H?6xyf;GM}~P3T4t%XZrNy z6;)Mx?tCO zy!1lS`$T!ArrO+Zhu2(K3?sm{Yq_%>?IHt*n+>+*@~%-!U)~?hQU$m8mCq}&hWrF^kM-vol8%h3%9i{h~dbd zLscfa6&j+@7ME7Cxn-UH+Kll>i)#E*=N^rZIawlUZT*6nikU93L`EV5AseU{hT5c5 ziDydw@ut7(B*ssS6kfxA38kQ9f;Z#?BHQGOObRUG72)fDmGwI+Yh|8dj$U6~!suX} z0&-6hvJy&RO-5-tb+h2Oih50DAHCB#lV=TU%{}3}uEi2Jqba%=V0K58(8iU#Hq7`Q zQxc>;qM?9A=Ajtf@@)9-NQ$&E0AK39F$^NhM*`25g@)_eHCz*w6)B+>E`6J$5e8>d z)2G!P>dm*1Yf=;;rl%5Yi(GME*}Y?{Zi`jQ#n-S{RbO$niD?)koH6HEez5f826`IL zVWg+Y*+FEU$u2~VU@DnrLES`X)4)=SNWkj`kzs&!BBN)MlwPR_Uk8yE8B&e{QK5eg zhsim$>W&r@I}`t3`>TKX4}Smm|IDBH(=-u8KOhlGOax1yhZ?Ez0$SCuf(6W8l0U|bct45HV&Bd1=WIA_>uDhAz1^W1O|%40qjGGq7EGO<7dPiL~z_3H?4No5}B|baML-XKm@Dpvl zzFIY=A%K*qp6HP2TO7%zI+WnPq^_Hk{l7tY^e-L~2}{yrX7!x1ESG`mmAlPpqP;@Q zNZn&CB^_>UMyu8-Bou6zQJ@@+8^~JHNvu_)En|;qI8sfbJk)#yr6_KeispBuk4PgS z_Wrg7-S9<8;kQf}-X#wR#jq0WQBJ^(O4bByT<16`0F7GHIH$GeX=^iro_kz8_?N`t)iW znpuN+g!fa&OeB>@V~Zqagj?if56RD+l+8$CV*tnzA-K><>Etfw;WxVh*aW~TuZQE)VpB24L2 zULQQ&*gH6?2{aq>e2}qWTxkx}vbw})9l>g6K-7*Qe>Eoal`ovDR@yCTO;&gG$?feO z+R^ULMe@utfc`>D#i_Y~JlyRT2HA7ly!eT-XkpOt=E>?#wKWxXK=JC8CY^zrXD-%g zOCP*>ZFOyV(J&%%+&B=?CG?Q0X`Pg3iZF>LrH!=Fz!*heW#sPel=lR!NlfutlQ3g$a%9eRW(&c&GXi;YiKPsqAR^p(ibhd?xGMf@vVi>u zhxNX&`;{C3X+nD{8;wVU>6vsC4kRVj5udJUBu`Pd;8%X;Ue29jQ1Rf$?DxBH@?ho@iJ^{;&C>tFlwlP4RWef|iQ zyWcOn4OwA?G8`C*&OeNPT7^wqG(qysS^@h2!%MJ5$B?5xLFa z+ul9egRJ`G6qyRA@zU}fb;vp;m^*B0)$?f;x+By@*iPt6h_=&n{$7)BmWSL{W@Su= z(~~SLFpm&CElbj(aY97VjS3zcm=d)~?bDMGoD3*>0iYh9ru4Kp*dK(bcCl2&8A;4^ ziXpEiV#+^Ka}cr!8w!oWN*I%vv$hIRw3@hp1!qKH9A1qNDQWHO?z*CGy`QdyEvY0= zHnSNPncWKeNq1xw&M-1Un&E>vBW3lX(7oU_MsX$%2QRoX-I;LCWp-olj5U6=3pD`< zI;gl)l!rX`iv1h(1e#zMk#Kale=xv=O^cH>Sb&Vmmt=!khA|S}Vo`;=KwDYtt}b*|7CK9PETI#yYp5;Pb-AEXGx0lUo-Pd-n z4I<=Sb?&yOPG?+eW-C6Fy6&?3Ebn2fj+qM6(VzEz9kVI?9qswxF^eYcswocr~q#YAWkN zL8gO`;s&H1duIudS&)7)kZ~3$ER|X~d8J$k3j^b)YDSQ`3B{kFtqEhnr);~rg7a3H zGD*DXe#&hPdg*E^r)pe|d0Yc06&+Ak^_Q9&4ND)`75U(H7hwp;Fj$L?^KqIWl z&#emp*Xg!^CI9T7`_sSwyTA8W|H@y&PQAakt69Cq2ydrvM@iMy+zl(C80prH%C}Bh zz#zL3kGoEksln}Jk>4@#)Co^$tktNL%=27|Q1{fQY`!jqO_N`n2+5N8GN`kDG0Foe zzGxJ~-MtxtN?o}jQ``zB2?-#*(u_48uKW%AM_FC`_@Kq-qR(=snZs8!=3q@cGBx@| z2xmh^XlK+)qIFzyGN)TbhVq0%8zt9OL(QoM3zzqPt->lgb@t&%SsJ>eQNcA>hHdI3 z(TJa2%$SbpJG<+5YC@)OGIhnpj`*?^+zOJG$SU>8#>C^%B6!)LD&;O~y~XO}Xpg#C z(CD9shPWI<>y1UW?AEzG*2zq7m*&Zs4BM>rU1O{7Z6$4S?i%(-%Zs2taUcAgxA?UV zF0}Oz$FTYA&t7q6vR$OetFQ9ymEpKdKPMQ4;mRQZQGa1&uD?LmFNQ46j8kc$l{`-2 zR`0MaZ0o8AU*uSJ2DN=%7cPHCMP3TmQlS0kbc~VOawVKIE)rtI}Fs>+?k16elv0eHbi69I-5p zu*FF(d39}^#$TAF2^Ho7((S>5=VW__%hWVWAl_bc6N3J{EIU*h4ZuQlYkT|Aqet7@ z8z9b3Puat&E$dQ;!c6SOiHvemFxpS3%HUJqa*Cn9+g-C)QpzhU2o|ST3KUG`qSF}F zc*H0<ahC5=hJ1F6hZD3qN@0PKcZ}#PfsY37VMNlyt^OIu}*{oJVu0 z{$_B`2#ryPmB=#kz%q1cY3XOb`pu`G-+!H-NS?=8tb$))qZ5}1p5bq1y1GHMohq}S zT4~zxVWFSAefuWH#{;}h_l{Y}UAw(Z9c(_^=Z2Nld9ueMisqv-7%$)Y-Vg8He@NrQ zA%aICKm${w&@%8J3@`=Ko#~EuRys>J2qfJH>D0r~ZMnB}eQy2w{2Hzsj0^lOS#aN8 zx%Q)HrP9QHF){f=>>DiIgU9LBc@y5PNO)RxpNzkd+AQP*h>bXwjq_K zB5o{8Mou6a#@xVYu}xX~^LPyM@&={?qXL28pjmklL-;IPph218AXA7BXFYLqV;RT_ zu}&dVI(SsEIM?hh+dYG?0esvokz`sIun-%ai_)Sg$|f5%m`oaW%58juPR#ZDAd3F4 zZ~bUv8;*159XArtr7Nevn)R-SA#HjR2+YlE>+37aI9OpXs0BW@s&0q6 zW4w3g=17o4rYC2*-5%GbXJ_eDySoR-rP?W}I%FwJayll|whCJKG!w)~@f$#PuSr6V}IxyH`W$0q+=ds zM6l<8@fmSX;ZU$a#sD+HHiUHm{Lb#);4p4Sl#A)~W#md0U-D+uc+><&2Q9{pG6R*3 zm%5-R$dfCzj==qs^^Xq4=H^aE^eL3)DyWFjkA0C$F}{Pk(L(#QZQ z@E|vkf@`QSoC0?(alyrKqtFA3cZ?Z?hL$%HR~D?ImD-C}G=2F&#D*?qDvgeigAI(-QY#_7RP`0}U$;9= zRsf4(8Jr#i1T;H8H$yK&2ru+!X2-`c8?7y480r8rTI@~VTwh$7@7}q-czvaR=f>iV z)dl{rBHg$)zufN<5&!m$MNmj{ok^&y38X;mGj>M$oymS@YH<$taU%Lv95fI{Y!FOV z@IgW{*7}O>hdHz=paxEPqLEd!PYpvx?vM#l&PvssXvWP)Kt-K9RfPZl{#xp9+GQFi z(WQzg1xI7^)S%mlO5aSzOMY)lhB|F}d%M?f-jKsQ`Ng9tu{n{6)%Tj1AAGfRF3o(0 z(P<2+;`QbRAvuv?B2M{PwrQ@0b6UL2dE9}5HZr<=AfgD$qoPSE{5Lm*3h;vNm8a?+ z2ENhKh1+n>JLR|Le(F_omgalzmxD|?OKmCITSyHBhZLnI;9<(`ULEFL5mG!zd9aU3hs8&QWw5*$4$0D#-x0<5U0)Tc(Z4RJ)8SAZpj%$i3Is0WdgG=r94|BjqZd^A~KJ!{nTHovcYtU_y&kex4u;c}c8~v5D$~Lt;Y5 z>)hJR0*`wIA~x6tSM&}rU!`1TrR|t++&bPXw~G`$&7>{)6qij_PG5aqnqf$MknUwI zURd31r^qYRYXwGny*^qkHBXu0p6BbpE*d$GqS20`y&%sw-W&}sVt=$y)Tf6YSUw{6 zv)?Scy0z`1bxBx?D<7|G!>N;oEmF9fW)s2Gffe7P#f3_v^3T!uhD^sy6NvD4WhIoEzoPk{Uu$CB{ClWliIhH~1Feu3RhP zy7=^B_W=!!l%DPO`wL5`mJ9)Il-dbt!3;5s_?dj#9ICFr#R--3l(_LXDWzRfNA6#h zo7~~t45K`1Nn3?9Gh!a)S>Jz&|FU=4Mb$aDf^a~n)qZr)H+cml1(U|JCq(!2&26U6 zaB8v>SCP32B+rp}3X?%cX7)W73d=gIxeXd&M}Z*Dw1qt?1a-E|%6WFWaIn-Z2{NJ3 zKpK@0n7VAp^}~Av8)H&I6{e}oFz-YN=~clSne*jAU~!Ii5JS}ko1#I5L=FenBXo#A za>azCkyhzS6O&9>y_KA~AnlD`CWoD=^-Qr?QJ~W^YO9F@prD74Yo_Diuu8q={j{lODR~@J-1G#ctKGi7c71(0cb1t$ z)Vsx@#dXFscz;OGUrOwaH$-UPYvOC6OcHm({hr!hBOn)E72p2;N1NNb)RCrQG!8=O z&?qo)EY8oOjFN4f6DSLeA)MFpCgJd;^g>SEfApl^>8`9UQHm+ZVvk>v7BnruH0GD) zioKDoFS#nNPX6rUU;khK&$rJ@HNp2JB(*_!kv9y8G!CX8P|cadjmKA_!yQXf5L4p> z>eLf?(9ps$I>&0ov#DaVoVR*Qvp3&gpTN&zdHK$*cS-$4Ef480wIxfw5VSMn)3XyZ zYu)7=y=xz?yz{}@9avu{r$>PSeR%!Ot<`J4`1IGm{>`VSM=#HhUX9Q(3yyCmxwP`@ z<)@*IT(zwQbwceU%uB8iRP8uPK?+V!o$MVPpBaE6#xh_ag4Y@8&OxN&fw+*)-$;cz zmX=XTRD4!w2#vTdmXr|JnGj$-;4oAq2fB|Q)7-D>Vs9Y>reG;3AQ^B@=OmFs)Ol=? zx=BgGQwxg=2S+depYQ$%GlWigC|;DMI&%yelr#pE$+76k^cjqvWFFQhUP1Kk)#ZiG z^mJ{W!WSN7+zD*b@sGm3!h8Djee6M$lT|EoU}JO35Im9CmDDgEW$9)NPiWB))VyV8 zW@c$=fjxj9|Lo(t_n*BUElUCGe7Cz95)`GvtBXVA!n>lP=V zN5BzbY5^L6V-(Xd#!iI;a}<&;Q|=ib;e3(Qxd`16_ovu;Lc-;iGgU~aD(Vr-|K{%g zPMqwR?^rHEVg`bMS%+m=@lq$$J+{T;)4~C5ZC6aQoqa%ic%M{IdyG{{0eH(H=GRvR zIO3`Ejm=#K$R5@sC{fBswra@;+-#1pv#p1wba^;I6dpE=!+b+zYwJpovhq$4Axl;B z$GnMTc~OpQOj4rH&Ru{6&sZ_$^U5=V)3e?HxkG;s_k3uEYLR@Q<1oXQ-XRq_Ybo8F!8gd<9_B5o~9vO*~XwQ-CF{Vg~5ZDk}(p_nzUjd zMExI~?oP5$6)+0ONQ~qa#AAIH`8s(f1N3&ud-zT(aw;Z5Esn3JN2dlEr~WXRfzmyT z*9E*$8pB$2Z3Qp0d90QzOP#gF-Usho z`^J~whPr5F9stqo+c%c(z+QBHiKu5#7xjBn#7<)hUg$GxUF~M_vDFz~lA?~RrtZ2xIPt44;mRF&Y^}&1U1MBHaS^lctw0OH%61uTEYekI20& zIkW?0_^2q6g#)q5G)H$Qu{EP1ZendLR*2Aiy}Iw-X}ha^fv-k$`U zRA}1R@&t+Jv^WAjtv(qLwBfdhT9^50LR-^}*p}8Ye1x@w!q>u!9CZpP-N;vp3arFh z*!7%qW(UhjXc}z6Q8Qz=Ne~vN6N{rWn$>PS+nNn{X^CTx)9qcph zhV)C}KP6JNE0K~bQ1W27(>JHa7TwIVw&CKYgw~%plLn?z(MVmw^3-=Du8iBEDdBY)fZib!=A~80#R3pw9;keJuwF9 z5Brn--VAw@E10>MhDa_7&02Xw{fvjTY^gGjl;3+~F}@cpgzi0f%C9o!3LsP{aqht6 zsdkW!CfGFz`9>}(tCVK;G1_Gxi`Uk6A*C~^YvkfhDCH9C!uJ8z3>`t&JmYA*47!#- za1GS|-obzlkR6>00#_+ySDY@yv(%Ne;zT$i696UNd*>z`@9s~SXWp8itd~S=)_EB* zlB?ni7&0r1ymLk~sFMSM(s1|c@)DW(?hih~sYH`EH%*OSWwo)ly+c^6Zg(hx%tp`}ceI*LQJ?d%R7J$icU#!ZYq6BD%6`0KMW37~$|7E9Q^F<9UN^4Yyd|H*&( z->~{+bp(x)wOowU*~t{>!VV!zR!-7`D#H|2Q+qS#@vCygB|!_mtNdd?>M~qSUaP(l z;(slzEwH5S_WDQXr*}6VKG=D(vA1<}0YqZ=@Ffd#e9p>@d2n*DIoR4c+CDrvUr6BFNs%tn3`RUr%Wvr{?OTaVPZH`ILLep1;6!{hCypEA*{h8#EG`m* z@BjVIk7z{kz~WVt;j8oXkg;NB;Vq<2e+y2BlcN1bNWKHP?i|(=+`pjG?HCZJOq&=q zPEM&$EIdfUS1&4fB01mM+}+vT$=*9~McrC!7R#@oD%kf#pcho1GU6$V=M=C0&JTWe z@8JdxP`d|5XNZmjex^v{!J~y82|--cY(QzCfx(OGPyC^;&UYsuIisBXK0C$Ag9u{d zESTrJGb;xuHAHIA2OYhzM;GOI5y?ycgAQa+O;Vv%JqdX~y&bzhD?0jo4b4|YgGE&^XqXK{B|4(n zC;$rVP!vZ;p(>7GL;iS6u3$eDhjAYEbd&@TfYacWsHgqi19CzSp_hSsO6;c>kcClE z3^#+w9v`04_gOlQWX7T3csbDh=w^Y;qfao>;R&H!XUHBJ2>Dad_p|P!jkt}*=+XZR zgIxMBKhd8#qHNRsk`wY{|){M58TzWF;nDeMv(F_6At!wM%X^*LVC z)80UfGhv0MXG)(T@6i9#m#{igD6B~I8&Fa7Br2jeJ4x@InH*;#n(Ivyd2?ldcDYZe7G9s)1*FQ5`cnK@#f*) zA(f3Oja%pgysiBd>r6Xo!GqOme=8MfRlREVn;xs4Dy~AQ<=%h^_@ahLGV_hfNcF>I zqdGNTc;3am6P)p|T{s9?W^T3TV`kwrP)=be?lxW$5(yOIDJ^0QHju1c*TRfhb!^$t$cG%?!@4T*f_0ZFCu)5GhSVqdl3(C04*}+ zCz<K8&xnOd@U znhok2OQonWJvBvyoX4xRaEEL`0!*GpV`Z%&5lqo3$C!588ls zI0iWz4%9@%7DA8|%7%qjgea9PN`EVM)yPtr$fKs~iA{#lp<84$Bv!E8udJNhA2Qf1 zLy_i&BPp|AHh$$Hs+!A;PCBdyD20){=>60!FN=awHHn_eby`}kbk3Wzim^Y*3@zn; z4(68LY|;Jv&cFM&U;D~eDC}S`xX?o^9j|fmik09*Uq}1+(CX6yez}Is{TzXmiC7WP z`?`g7uamdTA1%vul@IGg6GI#P3X5hNPMR$)$3;UYIU+d`%j2_6?ob>aa*@y=MO<%C z8-A4>UQoL3fu(s{grWR!4_sGfaSd91FVk^7s~Xl~T#44v&fslt;(KIR_gaI&+h}=L z60ZvyJet*(GB);HGi1@s48K~U#@*8@!>B7FM3h&Jen{gNrNRft%=GX^!6ahuA$I(NI73l^eW{Dx|x)9n#4K6sFeX6__W(&tRS7^hmio-A6Astc|& zbrtO4YCOMm+W=uep1;-{6A;tI*47RRJk9VT6bKmik&R+DF{6-EC`igIo-KMF9!}n% zx6ADpH!IpAOu!{nwI&F=WWvC*BZnU*l0wWTeiQN*8%hwV#rsRaXf}80xj4z4F}_nA zvJzGrx=qD5Am^Aqcu6f6Vvr>0I;^uyQm4jTv~%5q_t$EWoaU+I=duq|NIu0h>DiRH)g|`B zwNX|!T8vU-?5kc8_n(;rxkpuy*d*J1H3k(6TB029b)k)yTu}fy1{JGjRT;&JOue*l zZM|x74?-S`WifpK*srByIqTW63-D6y%P1^uiAyvD1|U)Z%piV~0@Gg9{Ajpi(azQX z>PN+Otg%F+p?f%5DW=|G+G2(bm+~l8mQr#{pzwFc&r&L#Y6_&W0Vpgl&HwtdFMjdy z=OpQz$hx9CJ3}2(-nqn=;3^y{ObD#&n1YKOW5}dVDd|ouP2r{mLj z7CQ(nfIr+>TSw=GT=?lPfBm2SSO3GK$Iq9R7Fp>~m*QSAe3XzFbAdO4&mz^?=xh;n zT7~%HEbqz?vBQ}t(G13-c8;CyGKdmYhnZs$-;$Y0$*O#oI>{QW^4WL;>!)G#)vCyV z^o7`P=DE|c2COPu>YNuXEid1D^z?f_{249oc0Pqo@4LYHtCJXc%6$2ZXaY*gsNNqO zVV!#S_6_)RYV{rf2BHC9uLVa=JATcX6SPaP{OeT6T3T>Q}A8SefKlJ(g_nZq{qyyhP|QYpVq@Jees% zEX^D_dUALQmX>B3OZN)5-9)E5i>aLi=NGzk>Cy_$YtI8a8j?EEjrE1B?Hpc5-tyI$ zMdvudl`|%muF&YP77M5KSZQBzw_ymAEAm!K9p+2cy!B%I)(gT$PFSG_XT&oL zeCtj(P3W|N8;_#rlv)_^p#_$zB8P+-{R>A_dYn4g<(CMl5qG*w*>}3>eBu1Qht(*$Iq6J#a?F(>D=L>(1Ij@A}#t zRMyM=>DlosoymeSv(Yi%WjhCBU9n$bJOXCdEt?Tzdjy(zK7lM1kr{J0y_C~L%QB)7 zpY~N(sWRLX%zr30;>wcpD38dLs~bfoqEzXjD3Hci)<&1J%+gzG`htnFq+Y8I!qqHzgq1{>q8RwVB-S@8#4(!0#NWss2bB-FZ> zUafJ2pgA1-**iN3>v{1u??LY(k1tt(@zZNCvH?;XJg2Vl`u#d^F9MXQxPhe zj9o|xcYlqwl2!->K)^{=quYz{Coa-;f-$bD(YHm`8%&^JCAnv~?H@;~R15i`g0Q^kzrX~Y zkmuD=$t5|*RBnjGpp6PdATEvx1f=?CLhu^SsW!4Ak0^5_JCb?|Z8Q0_mf1Jv05?^Q zDDIb^m?qO0CF4lJPQi#3H{@14udoK<0nRj3tuDy|H#ArW_fxl{WIIF>$Qp>wWEJ67 zBzmK;qA6W@ChS~wF)>x#_w}!T<=_3=fBV<|(qCphb8s*~j}swTt(BueEKDKqH55w{ zsf(VtEmb8I@*^hb66+xZKX}Z6s z3vQkKHouY$+KBrFM!I-tct{UlXU8EaF;+usR~@2+ntgCYue2Nr?zYdb##fhfo27HB zp~d_%&$hM3Alu7y$~{fTDTVdW8<7)@LOMj*?@Z6Sqr(VUYTU7vNHdc~SZm**qbYM# zw%o&Z*lL3h_ZinYjEX3V#OtmyHD)PWt?c@2922C2AO>R&&YSUvsxmX%!K)q-PYJAQ zoxDgWzLwNa%?*t)%9asaqZvq9;jeB27(VkXepL=$+fo!;vaOSbT`N^=Qg8UiwIB~- zJcVAE$R$&f&6#Btx{)P!EC+xJbfxgv62oy1(@)5H_Z~mpq)k{MCqniZcVY=bNFua_ zdW>bh2*9V-DyWZKHa0(McecK3DZ&kA54938OUA;h7s1OBW+ndESA-PeEC6rfd}*)E z&V-RriyedA1ml2Nm1Jr#JQCRMO*MJl35zKN})=@OvYyw$~lX_v>aR;`}glZ ze75H?&$3Xdo!;yp zNHK#Vz~ih-3GR$b1=mmGxinVxptA8%hb}uWUS@s_7JZ@HSz72X_B$;7reMMbcwd-# zNet?Z;piE%f~6wtS4!T9py8kva`*-#fNN~d4W3G2$jHiapBBVlqQB5#LMMm|osF^} zud+XeghZLCs6CjgcK7zr0vIW_kEE$ADxMwS1cCZesiP6IfTdyV*xng99^FhkkCbq? zjiwP`8$4Ia!!eA?VeAqGHD?StF*Q^@zjup@cKUli`q_g=&$(O79X$|x7Q`h~A801D zEJjB)Vu{47rxcU!Q8?xEs}p3oY+iKh_>;bVwz2i>`R0`@Yl?HbfNv9keI7r1{(~R= z;(z`>zV&~8>jxNQZ{J#HQ~Ke9CosH#0we7*RYd=xlxUUMsp)NsdMBNc7E)ceYl+yh zC!s7I3lxh&*o^cIcUwne59;)$*KRHIvRZq=m^zIOV&cZyjW50P;q}F}9(*!WEL$c4 zoX}JDUmQMo{&4ePYh!Na&nAL?RqtfINK029s1Qh$4I0Bg4Mi}o5UCP3XW1RE<$E+GTg zp4V~dEMMsFM2Mp~xY2gO*u~Af5!ILEm2K!jQyAYkVgmp=aF?vH=^F+Bs>G9LR^Sg2kT-4BUr$Wh7S z#?!l~5V{t|0;0U%y0K0ZW9NOovGwHflP8ZKKYR9kXJ-d*sn8=8yK3U(oNFM4=h4^9{TRZ>ncYeIRcdYw71Lx=%_(;W$oUK7x3pg}n zvUqZOv3tNq<9siOzacE0_Ck3ag^C)CmH8!O~g z-bQuL5%=n%`_W~QPV5Wd+xqbF#=~c2)jxdkf=pCMv62sAq))s^O0{>0!d?~)cz##Q zwPyu4Ga45n=f}@B0eO%r-G;SJIZq^yRDh@L*%!5NL8pjYM*fUG#6fjdG7Z0{e!BMz{rAUhQ<@FjAU zR%d#hQdEZGsAjkwW{Sh!juCd9C^JQ%k7p%oTKdtU`erNj06_ zpizFN6jHm6M8q-SF;r#sLV;n9(BM1UnWfV*@ae(beh1l0YPGg4C$jRK1zUt7ah_Ew zo~wW{QFw3!qy3~MreyAYV;7RT2xHKz6GRR}vf3FPgBAq9bV-LYjoopYyrU`)x*m` zMkdgf05vPM-Cx%ZZK0!%-Z1aJx50wE&=r|J z0bGoosD(m{|6M{AYvob^+%#xV|GSaMF6k|Qo%K|tm2=pwl;skM3I>BosOP(*@vRsm+CnZ6d4mHW0;cU z_Zr*$l(&KUX8hI)q)60a7?VhkZYpTpr6z(YF;8mGma&adoic+DBsJnMGTTvkHH=G1 z5A}NXd8p8G`Q=)6{Mejf7gUNq7b;=zdJ92gsv)M{;!AWT0@6PlO38`nkSBDek85tEZWFp>!O6vVbDt98#|C_ z2GbW0RY$dKL+oV_x!HhQ7%wlOG9MS07M2hmL^DnqEf@Thm~laxRG&Z;^tq$ zSQADTB5ozw0`;JDKN@h7zICO`TLVdH+-Yu2f;n3h0JB|B{dOP$O>bt;n;V*pQQfr6 zvbWmM<{?G3W#kBGoz{D7juw6*6<*i%PH!~Tjq2FfTHVc*@BfX}$gJ8KBEDKN+taUG z5Pf>7_9jUT1nry{1@SZ?E`lGgg!{yDc^KJKB7SM%k$ zh6<~pJ&2sDXlylb1^lhG% zKGLddJ7LO`i#C5n8f$Jw9qIMwNa}k({OJJ;A;)87jImR|sf9jubd^OO7y%xEbsPPG z)_7ggn`M|T`_g-M#zp<6nRF`Mt-VeDUDtzxvI0zW>p;zW32bKmYjg z^DVO7=}cc+Up_e4LpseOk7f(BWu({A%}_Hc>}hTIh`%m-qWvnfkDI7%9!QB*-iE*~ zDpdw|9mKE+PK?a2^cL6W$3az0PXp&5eh(H63N zOWv-t?$q=8$PC;l7A-l*<4Gw-X+GdhUsWE3-!A*|Mf+>}us+8@IKfC*U=Ljtv zCTCo(@Ib%%tV0)M?);X7m*muklpSK>{QG} zSPxkj1Mmk@#B1nL*m~$wJ)jx%u1OFXQwT~ZV-UcMO=^qTOU`N5@jR&2m5QPrEBa*Y zM{vz#I=w7TZDV8~rNevE)fvl3daQVed!q)|$Az19#hr|8jwq_BXe7u^eq~?{EUPXk&YKb8F`?ra&GfNlFZfQe3C6P)IhqDwc8i zy)pH}TXf8R28%JOXy~p|cB_%BlHxgW&JbqYt2qNwLK@G_cQSt2Vt<8*%PO+$tz1Ip z)@rs?f~(@PVJo2yCc|e$`+~fp*W)4;Kf4LQK_~#UTz2cv$O!|P=0A?7CplLX)6=ld zKqrVPlZBYBEz}NGB=#BLQY!FVD`&JgOiQ%}jE~6W*79s`M(V|J?AcRVh0ZzX37Gq* zD`bALVi%ODR@*eIUc;3P?ubSMJP+S#A)6*^v~wR8JsHd^1R3jrd z_E5JQ%j(5ZlOReCX-5siFSw%G&s2Y#ouT64O2ep%^`}S8F&ASq>din|U4ihS1!VH! z6T=WQIJSALLJR%bewSWKA_(%U-~d4>F?VBHqKDV|jh6<9jZ~rclApHRQm=E#aF+M%_db9l`@2*dq`HG_%xl$rQL_U^np`6Izk$T`<+)x8Ugz-m;>qckM7=Eck z)xV@>7~DKKM8CSW;)a@>5k#^&j$T_`lrwkKv}mH-2HWB=w~{p-K<7ykkc z3+%Sm6$$7f*LMr!)gmjoBIUL9x;pAAXI7E1*zK3%^z2!pF1TRqAx?sD<6NU>eTFVx zq2AdrxssnNL#3C(A-&lsbgQ)2FIW;FwR|D|0|xoyH2nu;w>b*#u12a)P8KiCA#3f6+?+X99^6T{VhB0~nv zwID{^))CKQC}gE8meRW;OABGoyW5+Y>6FqiQo^mVkK0U^E9aN7#*97#FUUqG^iMGvGo{0QkZ%TRUEahRGJ`0^NAPmM`xwFF|#ld%h*?%Is`psRGO*S z%wxEm00^Rt=(%OssxpoMlOb2#xz79lA6tLfrPsD(X@Zh7v-t4EV93ZUX0FO+=Kfoa z-}_557ei7c1z)}g#m>y?XU<2yhGL9<<;TzV{cc!j%WN*QX+QqnlP8a{3V3XMfP7K{K2oOD8UMcLUs`1ZRO zdx!ghv7m?8--CXD8;y)(%qcM_iaTSBjcge;LXDF;v~rmagYG+JYkCGBnXJQ%s@Zl8 zydfsYaG#lWX7wn2!6m~-)t>X|z)nvVS(ZzsO7dc)67@u5lqJ<>wo6btF|gyJvb~2L zggu7th}O8gJcluZA+$=86vDVdFI@v^Hi#exG-?cNDpi?rC%yB7%mT9e;`67lAK(~; zr9{q^!@U!LrF+!k_`Dl7+1hbo><-Y({=p%$+Zi`m4~+G74ANy(0$w1CGb^4>YBU;_ z39S+LgsWTPCZOM7M?D78{xSRKZ`nxSJ-|Q$$AP(n{dS<7KtdQ-XP32(vO_E(2ctur zmLF7h9CH|pUw-raCqMgD&Bpfv5dIP1B{s;`m*#0}teTt4j2YGvw$0E+7{1PX$^Q*0u)sG)N`;));ix=O$xjrEV z=4z6ubb6f(LiJwJ%+XEQs8!9Xp)j}(xnfH#$HcDzsq-uV&t~(){8CK4%iM#bC!wPE>01xJ%0h1tU7G@@^9 zIruJNa^VlgNj7l_aR7t-YYyy`KbPpz(8*DjmF0||*=~b#5zsIt(ZVZ=H5uol43hFv z=|tAFiiQLIh0o%{MP!zS(~M z{Noa(Y$?|v?bUPRfw0H&w_Jdov&%#u)ZBfA#BN$`5J6DJ=1N!FRdPjy9RbjFUGV|c{IhoF#wkTgE0 z$L2)RYj~=faK3surR1t&(qwtE%yAW(&(e;$!>Vy`Hc7mv#tyjcx^UX;~mJ}SG)sPik;1tpiYM$myTSSqd*@#h##Y~yEzxv_9!{5DW5)j#QV%XbQ+Wb%iQD5lbBnGY<@+56d6uIXWD~QZu;Z;O3lH}k(PimG5=4uUtGB{Sp zoknfqUa1*b5z&by!9_Eb{4e-AL$)vD$q0UDd$X8jV}UcxG0gdTzEu~peUc0q@uU$z zpM>Be02#U_U6QHZam>{3R%8~QcoLR3D{K_qFyx&*3Dj<60& zy}^f%oW2hph|7-i_r0c(SsLmxS_SU<>wXP6qIN=rAGkko#-JXj;;4&nFRtlJ4U!ty z$W36`CPv-GoIP(I98ZcPILmc3Ney=*nIpW|y*~ZD{c6>genne>nCW8tDwH z;bVn@ye56^GY7%74XjUAF7`(5aByYk&DZLX zz0dmvMYpDu0;+iO(RCC2*uXFrczjsfjA;oV}ZII+A#q zUNh$Y=&(e@jOH0&QM+THZX?FoIAWtR@Ae!TwgN4^dg=OP95ju| z#$@xvCq1S8RX6pFAMI_q*y>h%&NI9_~dB;3z#M1TYa6;66YG z*f#jH;GDI)cL*f(W^aFckMVMJSeu7%GjcP8uJt6pxt(!zaD4pY)%JHUUVZoc)t6s= z2XBb_A}?ZRRhFWMTcLjj2?_x@DmdEq(xUV1ww%r49Tc^Bc}!L~T~qD461?kOcNA%d zdMgW;=QpQO?)5b;!su2(>_b$Vv%*!%d68*7+$o9PC@x7#51y>$PjeXvKxdEiVYt`v zn7PF%7@!H4z;WuwKl;%RzW4oyTMswaH#asgW-)&gG(q9%K5(J^17NiMZDPO9NNjh` z0z$36_w3`f<&{7CtH0daKDr00LaSh%Vpe6rXybK5al|9LJjtQc(Vn*ApXfG5j{8Y` zj0eY}eEe|z&Cc%j?h(VnZy9XZ_K|8+SsIO9AB+Co5~NtokqZP<4auCXQ@x_MC6@fk+6s8pfBtv= zAx1eC6_@ce*|mdYA^mbPU5_@-eJrO{O<_hqp$cDo`Vsq=dhY00THo0GGbq0FL;2S6 zW4RPKJ0m%r9bf39tCcufEwm%AO71O1Ht=fN>}f3vNkv z*ro-{2|H?F>!pQFNYs{-k9>P~f9LQpEX&OthfND`Go4ED=?Z|9OWHjUf#8V@JH#Ng zM4@Dg-&Pp)xYGC3uslHijj%-^VX$JGqVjMI8b`O`P9W8FjX<_8 z5;@{N*JY{W?@irfSK(lne5)t;IffI^Tz(1u?fC58RpOTu=Z7RriZ!GJp;!rVXM#4j zDLu$#I1}lRK20-(1&SP^U3I& zX~c%+q38P5Rs2#fWCCM}is@VDP9c(q>3`iM9+OWVZAQf@X{E(Fj}n}r z102&h4l|X-7HZ$W3rxe#YIStCgU|+>7=D&f5>hh2*Xr)Kwf7BUCa@EQgF%Mx>s@A( z8&otZ#5e|#!z3h4n%Bi~7BZk?(WrphkdwF&fBqh7buo@=r znz?X(ddVcD=BS%D*#j)t*u9nr#A>%@E)xu+mNX1s%OT2wT?&SKv={j=nTpw$ix!BM z&m8Wjs5#eTU+|D-k(`wSU55}}!N|>Q0Vm2Zzn`G|#%r*<%hVD&q0M!(Z!Dj{rz19S z--GqF|KQ*I_x_jv%m3Mre)t=xp;6D-i72tSXsCRmDkCGg`#>FnE%E6EHBudCIo4!0 z6|cZy>3;O|$!}_x=gWv=amq9ygjqbL-}Eg59@6>3BBiR?4>s(}?0xzpyw@69@${-z zsrGG;ghEpt<1aL?eMj1@U-}?JJ+<~NgL9JZ9&FdP&wy6*$0#rd`VjfJKG%C}Bg@A1 z);-63D40{rwrjp0<&b8xGDSpY_}$ny1GKR`yx8Z95Bfb#V;gon7*IN*Wb#oA83H-T z&u;pnfz9#BUWDz?_vr?2*&GRjX>#O%^L7!O(c>1_wo;&skRn~n{4P)Jy$%HP&bCO( z#{r7xTibT@(davIL&ce>gd|x~LFF1pyEoe+{ps;2AqTdGtvz^=-j~?{)5||3b!!UJ z`Uv=BsnBI)7`fZLSkOo3Iw@=}A|tNqP)WcS{*g;amELkE{67favql5>5%J8#zRN23 zVZ@?_Umdx5OIQIqTk|+2s+H=J*XwIVAPKFSCFOEoYanv_clhY#N4&UK^OHX{nJCm8 zpZU3wRiQDJ2F8m26##W&#iVCBn7*!?&*9(h#ezq}`u-2T_vt4et*x#SjDolZR6-3oIXK;ZyZz?%8wQCx zZ*fLy?^8PwIYtX7OZOA9zLH66U~}kvOt(2HS!=kS3#jsBVu7VIkGDKhfaL<;`>($K zc5i>Dx4b(%*xP>d1_uiL7fg;@bSYvmID5JAId6(kT2=P}`AXXOjb(1OsR!#TC~eE= z$Fp;oItJr1Ad{GxZTCv3GFv zW_$n5&OW>7aIsRVKTaJnNv2^H_G zzcrIrM@Z9R=tY}M*tu`|m?U2OYjt%U!TBHkr+RX$F+oX!zsP-TDH;G##0EF;83UzGtGBcyt27aw z_`4h&p5b~%CNtb9clW_+NPKp}0bme6uix&!*+qDsB1m7p-hYeJ<=)ZTT^wcD6ghjl zb3{ZQ$2d4%rPrWgzQCo3^&dZiqk}Aw1!OM~EXV`21zvA*LqgLk?Xek|xdFKvHnkAl zm4GjXTxUJs8Y#dTD@zO`lWuHC8SQ%=yVBwlz$0>d~CKD%37n&9B94;L|I}Ji?Iy} z^h4Kvxs*7f3AurxoV}e2dIfPdH)@jy0Zjl)G|r^gt+9d|H{;bjSqy7IraqPt0K!M_ zbod2P3E+Z~#Ctilur%-9g*%56)jdh~xVe#7!$U;!agzAi=5!&>X`E+51 zy~*GmrZ-!N2ye|LfEcjsqG2%O<^TAqPX2M)4T0etN99(8|ki?{KUZ z?q&Vy`LSD-YxreEfy3NiM)3@n5dQR7Fv75)0jZd^*JaNgGu=;o?-f(D4P@t^@6!KBOPA^yX*DJq2O}%I$ELs#33j_)Tt=`%@W^A|;*O|W^XhsQK6ed{ z=R3Gq)R~WS)q?S3tq1pwPxmm7^<@&xSRJ3}-FhGOrXDM4{E?sAbGg*krbYQJ{j;yo zGWUssBmGw8?R}**+6_tb)iOYdn~!8$Zv1+eyUWVErjpcDNW+dXsBe+uqtEIk{<7{p zu+6=|uZO>ty>s7_br&5?<7dPcJ4y!+v;)dwc#(rl+Om<~Ow@t{{`Tz-t;QT>k#)P+ zfrl>33>{d%(}f2LTpQ2?JOD%>^aHW0-tzCKhYorw%KRSfV3{5HVx1o_q&uFY<%`ak zP3$^9?kz}WB${AIm;3xt(JJ>P2oUHQYmILcj`Yda$Oi1GyJxq+2F+oeu`QNy?mVJt zyZ5CvF+9$MfjGpHs|gWbs^g<$0xLjJZW zd2c*q;{@T`OV{TJW8*grVnZx#Xs@6sw83h&w6h{mUHICfe`&dewcChGwjw(@v2 z>g)HO+b+g{iE>cOT7C4gh!jx0It1}eZwiFG#JcWxkJ^&!AUEC)5({{5t&B_a4$dl@=$;^@Q29)QRxpaC90!2YZbKlt9qkG57j zz@2w_8jbfCKmYYtUw!kV?|<*NfBZds5GJa7wArU*I-`tFiBwrx{m=jIKLqFffyn2SSElNe)5a24^I;T%5-WivTiIE77uWMY`KTyNuEioLg0@3!-LIu03q_e z{Prb8%gx|~q>2tin1y=k$%v1ajXZ{|^8CgkRm#xc0n>3KMb@2% zZH*Y#gZf$~b__8HbiQ}Iy?5N>^S3*+;yGUtp9|W~LW5@zXBakML4f<&I6uEWLu{5G z=iuNZmM8-?C{^YdFOD5oZ$jSA(qC&fV+{7dVn(ry*aQNaC!715H`|CZY7rK~cbQEl zfR-qh9sLlJm^sc3S`G5~*sT|*1Zu?=1HizinCltjys$*EVJht0&s~)DPQ6MqHXGpt z^8!nbQ_b6WuW>3<+8oWAJ&lp8ePs9#CwZ4;AQseoKKr|D!!+w?wGp1cVyFB`4+d5a zhi_to>eCd}r6Q{qIu)6_iSrRHd7!gAtE8{s+s6Li=p}@tRft?Ug~ zOuYv0@xv}up-kfO6L$vsv$it-@WBcg0iZCRM!2|fo{0r$**MxMMk(WWZFMg5qWSL` zs~}A)csYfu2xMZKc{;_Au75EcJC=ZUUDJ(bVt-YI8{G}L%mHc|gJV+4%tqexI5ra)4HO4weshbM zJB&tQ_(tE(>JrPGvM~x-<3zx@*L>;>3kpr=T%2A|dvrDKqCVz5+1y;CsYxtAq&n9Z z=VzBVTgTJ^F~peW`J~B!WS-~XE6yZD!D75N_eUN=X#tNCrxq#5SSQw$FK(C~%y}2f z8xES(IlFeU@Zhc=Lg*9(#gj_W!mzs`zG>NPicSVkrS6o3x9FF|%tU*btUC>J8xh01 zil$8k5yQ!-#FN2)s>Skj8jV&eH4hHbNlV;~+bUa`rxU2-|KdOUxBgrI&Hu&^e*9x3 zU}X?8Hwj;8OKoe-#o++rI2cHfMqJRr;%>T-L^r+hK)0PB0{VsD`Tpn%5RgSy7l+;8 zdHIl!Mr~LxA-$$+63E+l<$-3QT46K+I$Lsq4&w35k(+Ed>FBf|Lyy%I6skEbW}(Jk z<*8NkMT51Mrwx>6FvYlk#qbn~@d?~Ju2efzt+%S)B~m;*PDXb5R&XFPA+h$$4-lJ? zg?)JSiAvb26J9K%~_)=LKU4*m<28COXhyPLA!KUbqDXL{UD)C%i!lnQs|`lCOMHr=mfBf~xr^QrHZs?0PLaJOod5+~f0})4P6N z;^XbTDNwM+_ypkC+dcT|>lf^7(iC<0Pl^{-7SpJuHgr;Boo;&eo1+=Jjydl04K3peKX zN&N3c5Oydef$^9cfI+l7jk&gl<+g-hI5jrE2~FD7Gzx2CQJPG%k;3&@yq^MaR*vK@ z#;A0O`BzR-HLj=YQqJj!p!l>-rlzcPoCk&?qtiFfzdJbGB^D+W#4Kr;{=pfYeS>x? z_-|A(<>9TffW`X89#19|qrsbEDj~PY5*|IT`g2BvR zXW%h6*T=_!hd2osq&dW0r5DY(X2+OHHqA|xSGu^g6wN)_4xO%}65XxJOWoV-2`l56 zC-4s7$c@#t-Tec=m#JDMUX1D=Nh<1@ZdFo2Md=-^;)Z;$LzZ(;h`-g)zO`}ONL z&tJU!`n%`9{_5*ree>1Ne)X$geD&o|fAPy-fA{Uz-@U**LxBAJ=fAo*xx7BTy3a_@ zV0wq)z)S4WRv{Z~cMO2(Vgu#Ov5P1`+egIQwC)t!z->Ah>l!HStLJa%(QKBMg13&_ zGxf@;a_d~HgTrJS6WM4|(3*L%X@$bgMJunc#4B8wq=%vYT@EoYCb%K9&E;f-8s#^+ zRjZH=(rCxDHVQ+{O;3D-XUz>~n0yIMGP@r>dI|fX$`s2=qHV9hPc|Pte)M1cy+2`ekp8&aH<>%~ zWndn?e!KT)fA#DA;|SlHsByVU3>Q}|R^&d%PqFJI$A zB^ewDD`Jw?j+}4aL`rK9(oMKvP|}+M%BTi!_74B*SI>X-EwNL_D@%+2(m(V2f9v;u zOmg}sPqv;sdhqen$De)r?2FGn{`|9#e(?QIfBeHQzW>FiKlt7!IH!L4$x|56K7RV> z*^>w0L{A@W;&$|43n(88y_8foya^PM9s{_KBz%!N)%tiui-@M)5*+s}4 z5?}Ua`vBv}v@ zTb?LADyx%3@;jMFI9^UEXE1^y0QagPquyjZ%%W7V)N+tOw-VzfX95TST;uM00Hc)a znx+bncVR9gNVu2hT~q46o6R=nC8R-2J5wlfL(-wnM2zq)K0MGBaVamQ3}^+6fs*TH zf37S3)jaJ^UDVw5gDX)W=nwJ&y>dEXmGcZ{c8E4s7a+7|E--l4R_1VqTjXFV>GQb& z0RxFO%1`1ZlbSFZ7!L=4qNat#L!HKRS>d##MqCa*!<5r78K&Z$0ppirJKPI%jj~$l zoslH<%Ggr!8NJNA4B}H14}->S;<2IY=KV;-%z?u8e(gktlfetR9pK7*ud+QJK%am7 zgc;77#N5-7!<$W(nK>EMai;qrQJ46g1a)0jnf@$ey(yVi=H{|mjZEHr#Zd2FXyO-R zM+GjOE^ytsec!xY(NKyS#24m%Mj?MPATX-JN`UJ=BQ@Yu=iyDGyWy*k3lsWoH=+T6 zxRTs{C`=Su6@=l^O_C-w;mHNQxe6%^o{{yus&3s01QAj?312TmPN{?M@~AMJAoen-*Z zA8`wchlsgqfs2W9T95QW2`tt#_;-YRjFK53f`h?X={}}2d$cN2=R+LVO)nePkMmug z1@(UGql_3?(>^Vo!oZwzJYJzocyVFkme;>lu*_HR(b6V|OvCM zoXdFb^|p`k&l+<2|FeLh-SMiW<&~|ihl@)q@LOi@lhhM;ACB$ZI>a?pwQwAc%9IF6IHDFd^b^SSdQ~U17LB_b2pe3#ZBh&=dTdhsQBirrIV-hGYzlp zLY&N-;vLE1SVE1MD_fmyrZXlxI4CF$(TzMu6{~5{(3K+odMEK`v&);FHa-HBl-E%b zoTc5aX+PeYgu(#Q*@c9~@MN>FEi8o&Zhaj4tnt(bDb&pHX{q8Khbo{XGk|B~!0FWKZV1|Fg_kzi&oWFGRr?(Z34;hODbmC zH2GP=Ogmt1(;I%O01)GG#j}g+`(mrKO1Ove45T@J!Q8>=+S(xi=o7m2XAcmOgEF)dK0N{&j^n0FNyQribor^`wC%x3%U z-u}y%ub}bRKRS3zGC@o!N*!s44Sk<&orA|J(D*n# zeDri{d;jp&+k>$$MJyg}K?@~tWtQ1H0a@|^r(49ErXKh=E=g#zyql8nR$AWhqFXWX z4i0|d#scjTuHuswl!C%GT7CWX1q&)cAdOco0teeuK3KjJs-C4C8ndH#CmtFONOXaDB!1Ma{E?0UqoqB~lzltFh_ zUc?Z2`s4v`|1bakpR6t~K6&;m*1XT04rQM)6)gmATv$YrZ+Qg zt+fu2Cs>{9t4j|bZXgfw+=11L^md)8_Zc`3HrHl~tBP*Wc(i9sdggTpFb`qg(UPzt zfBR;iPzQzz3@JbS?8(+fa>y7qIM!HhbVfsBhZ7m==GNxs!>z3cTbs|GJ^JL6XP4lT-eY--}9ZZm!TE zGxdmMIY3-snl8@8)d<^auD(tP^YyirB(pCt%Kr4m`tsT;(_kK?Ym&ap`kWBw_{lB> zIl{MSGNgN94Wi_zFD&%@X5f`QHd2a>^V$HVEQvd2S_!R#(aegUlTE}4o54BiPg#N^3dRX1T8=60WUVN6n_%w#kK z8z&Z#< zPEsu1$aWelphoxU$ptM*pOTduy=cKfHJOdHVB+;E3K3Fi)S{9a=yfap9-wC;0laB1 zg2-@Ze*AD{ac26_gJp0Z9O*Vz=eJho6K=MeK(mcy98TvRZH8ueetMEL`J3=|Qw!YX z=!>Z|Jpu|0DgvYMQ=QAR{5PieeMU&$Ui70YW{J`!J+DukrbrIuJT++&CxrzDzND?? znyYuhU+3G^_!{ui$fR7;o|4c4Og$QnA0EnFm3&jpJ)4m@8M5M(^CE%$_1Bnm(_0cm z_f-)6L~$EyEjlZ`ycwF{>tRWw<0X*h*_xUFnCe4nqCAZ!t9D?^Ehgp1JbGBM$@9ED z-a1o2i4AkO##08H9i;7gRDnrIQLAyEAN)`L z$Nz&r_`^R$q}(uVQ2`^^g2>vOn$g3+^KkI~j1VF7cD1lM5Z4<7KqF;UC5x$QM~KV^ zAyjI0{l*VRy`G`K#Nuk$t8z&BJRX_%2QU@mT&p9yHNcxcBQLZ4GTIKAsn_(`a|X ze&~Q>vkVNvmK3JdPB02e0WnZtD>9sq%&Wq&RWmwH{};ivLHnKK+&swV?@+!$&2yJf z*?Nf;3}h+lAWzT-rk~hyw-TN8m%WOA}5{imNy#B&Q~) zBb36>B>8kczNB0b31toE$o%5!+Bz_{)N2R|uVjeU`y+lVD2ucFi&Zxxt@O1*j{EBl zd(#h36%-0(dW&86Jx(}(J5dYf76=-}G5L4Q{>fSef{Gtff!VIkoyPVSz$x}8Il6h! z%z{sOxRf^p4GA%D;B~=IZmi?|4AtUCVc|&4Zd+wj=Ol(7K~{xE;Aldjbae_M1v+TIj0VVqL!`IFp4S ziLs++tCi?ZdR>?U?ZFKLIlMUurz6S-t;+-H83aCXOxM07V|x2~8+~#*$yrvxgCKLI z3}iKAS>1TRo_Ruj9f6HsOO2Y~CV^vg3d$c#jI#8q>PrK{OFVg(f5-E(fP4DpV=qJw*pU1k$YpPi=G9_*S^}E*-$BG z=;DFn62|GGFc?u;%d)^xzIV}jnGK}Ysg4wes;4_Gw`X#qZ1Ut)t-tvEKb@7EDnGVDPwYfFea* zhVKk-W%9E{40ie5%k5;F(v|6c(xs!LGEtBo*+`GP)-^cXJs2K{1~9`x!-DTBKWB+!VFtXk!dXMXY=Cc+QD_X#mu;*S}(ZHl23 zRnsxBj{B}ZdiDtG{ZIb%ryo6i1R1mLS_O_Le(~$?e(~i?GSeeHqHA^hz%-BTS3 ziK3-0$}UG;KnEW`1Os2R=+VY!uz!UZJx;{#9U_1Aq6)Wboso@4EA4AsFWcCmkD(U$sInxnXS2Mr z{O}E6jrFnAX4wWV)zl%tXFg0ybJ*n7S8@gxsf? z_DpWBq?d`?4zxtRsOFhvDrDCsuZgTI`jh(c(rn%c1CMXFBbU7>Z{$M#iHI$M@aJ&i?X>IL8y<80i5%jATm5s%WO@c*%81f^xm*Lk-rQO z8ZBm6$CHBK@6`h{Rg8IMLyiq`2&v%)GB)US6q|@&GLiBBru(#u zqr-p$sNT>)8TF=DqRjPBW7T0SQQ9p0bS0neaUvs$WRzMvdxsZ|O{-HXbB#0fI!!_q zsnK-ZiRr!$Tj6>i!vdn z3Cl@{yXrhl>G{@xH3F|F46WX}-RJGJXcV08F*cEK5`mfHjIS7RClW*6T=4-&a&H+~ zb5mbXP#&-?TFE>ht*LB_DLq$qfC2_(a8vS*ISw+}lH;!001c^kO5HR9v(=Y4psgQj z%HycD^bpyX?oLra_3p6zbAR)X{s;g4|K2B`f5sjsD>V-Z`olyW{IwkmTIqvtW#EPO znN|(|jBbq*-S0YL#*SqUM2>U1kCZ0L+jafrSRi9uq> zy&OaiETr_nUUK&qU5AY$OCflw$cu_{Stt5!KRSK*`G7|~DxI*7p8Pye4AolLp}a@* zb)@s)FWp1*GaCLocLzcTw(ZzYZ&5~%zL7-D>f$TeJ33DUxO_VdQrkhK&1-`Bg7ePI1O4F6e^bdiLOCK#`EXo5>Hhyl z`V6EQU=SbFJ0^+sHS}x*iSU@<=*b1fx0%9z1|RtVdG(U>WIHshXYtsstJzeCSE=en zg*XWFE8>Wc@MUYIHRpV}5zf7?(`IqI3piND;PWZHmDJT z3&v+)bXYye3yTL3Q_pQ8gl(7tpb9QAP-8J7FiqPer_fY+k-0%HOPxKrHVd2XM{)MS z)2A`#e2QeVg75%Ex=~K-l(GzQdxNK9i*m2sZ3Dp~%+(MTX)t5;%~G{M^7jCR4tEcE z4*X8E3*Gk7r%zW_R@m&MqXPGr`L5}Td1m^Y_9=;VBc>~4S?mHN@x&4UIW8UAhN&jf z=Uo98teV7PoVlzi()y3D>c^(APm|n7i)rvZ;i}5ak3mp`2fT^)d${(6c7vjFQXA*dr&=*tHw$i2E!W&m)(mkW+)NcXRat7J z7;2J|w&|ZIotXM87W#cEwDtJQ>TkJR-v#SMB-v7EO9se@ro_L-M$y7~ zW_R77UB@Fol*Fa$jI>E`(0p?YO%N1MDsjCdF}%%Ri~d%c@a&DVI~>6KI)0LoZ6gnr zyCGv;s3JFbdEB%ZzS8aAtp8hU3qg$)dnq(;nGLlquwmyGKpsu>&l0myx$lv5- z12-_|oY<0@i8ZSMO1MK$Y;LSA)K%UMa~`JrbU~Ca%=V-mI3A&PCG*ZdJu!n~S7Uca zS*kB-!EwDFB0SqvoZ&6dru#CBNuv!DEuFaqF_iseaKh7$kum*0H(-S$<)i&Uy1F+qCq z(kiPHgrlC-KaRd$T3C4WaO2U|*5k)p;NbYSk=d##%wZI!v?~~ydaCk#Gd#N1$KkHI zw>!Oz2D;iqR9(eLe)@Rh`=36;ORUwR`SUFvj-A27GVJKpS{b@$&1&D6;giNk!swF2wTZ;cS_+dTu;eW$C0xNq2)? zjR;Cy4^oL%;0LoDgbP>I2XhXw+nN|B@aCIJURm}Erd3WXc%c$Wm>Q|!=*#kVpngV3XV8E*g?rL%t z?gIMk?Bgi({N3HLOp~i%@nBI?>FMdX-c1 zaQSr&H9HkG3d+{)oJO34Qy=1#Fq;+D%x)HsySmKv3E2ri%lW-MN|X8#6&XIk9dOLfs^X3ywDV8 zSmH)Kfb4LdqTv>Y_Ug`-oeTWIHX+l22hz1C6os@E&CY9GC}bV%2>p}hkfYL)-q_( zdMJu!Hr4^xsZprcP;jUb=qG=aWnCe8ulfir&#T_&|8X=+>7ZMpJF*=6laEruC8Z}B zESeQT|1T2d#3o;b#JgZA-RPZs@?cY9Cpt#5dQe8r@C;RiDTZI!(b1&LX3`ub_sPvc zo1gW;@E4n~fR4Z4I2-m-rOTll=z$s;=qUWZ08lyy#1Wz#dW5gg!;(7vL<-dz%6Hz^ zu_^~Pzm};XiQWO5mll;cIT|clJ{hgvaQtn(+%Y&;IRz4 z`2HlN8V`x9HmqK_zW)3F_P_C8|F8WAGqdwF3yTu{NA1k@&OgTbfP3nOGYCWmgyW7G zpIks^i=66Bz&Zc#{^qTpoakL0M%Dv-*G7)|Q6T2!J*68uW%GIohQ?O2 ze(Yw=kgC~y;igF%d_Y#*simKkj(j$#pFFm7gCpmZn~*}c2B{4Sou2n@PRm2-mTb=Z zE{D{}a6i)ObFU8?ltv@5|6s=XAWkd4{nIg{`fK;We4|-r%R31-1FkA6HK@CLmp`4?=7P{rfvESA#Smj4pazs!YK)<4PdUH%e_8ru^DUEX^AvL95|lUG(@zUKQ)ljc_|0UO z%8>_+pk+Y!g{2j0l)U0uOE1Zu&NkzVS377aY&P(cJ~J&ZDJHfS_!!E8ytwh3VBJAG z>G8;N#kzq1Get$`=pI+J6MkPKTQ}92I zX&o{s(^T)ePr}-Ed~iZX@`9w|hVnW60;SR3&f6Vaa>{X%PKVAP%qJzmi)1>h@#Wc- zKrS(WDoDDTYW7nLZtP-lbJ?wI6tB|+4l@Aa`}5Uz-|X-2++JUt68ds*zz$?E0MhYKopJI#e%qLE8dBfj+U-H#SfQvgE0>(# zoaHs5Ax%9VkKI(5!7#xR&$P+NXKg(>$`%VRZx$7}gcjieqU*ECd2+hGvh?&Z@%S@1 zWYaV#5VP++sP8@5T>kjU#=}iEk7u4dSX-T+`{>cyM~^qxmloDhvz8V>q3|-&byOCK z+pcs1u)H+jWqpOvc$ms>ws*h!`fEJTf%a&NB(Ir^BEhIuZHi{!aU#*LI6`XrF4~v@ zcSoTYJ#h(8DCrTYtW|1xUa*_)R;TB{h1>Lh&O7fNF=PB2yDW@QoCmnugmQUQcTe7n z5FYk^A&c)4J(W{pOeGc8t+NrF*$sBvsE%OKce!4FpWAkBjGLhaRBB(9UYcqc%xU{b zW#`lL8-jo>|WfE20x!-1*s$4YqNOt^81SMp5wvF)=l5pfuiHB>; zwBs+oer>F#zQeOk9!JHPqyire0n-a3A|jfkgdG*i5e3SYdN zn8bv2PzBL>3f687qQS+qF}I7O@jIQ{08Cw_F>|X7SMX*gIs&OhOfUD65!%F6{Ad5w zKfod_ds=ieL|J3OWA2QQPgQWD zh_?RI)2EIqJUoqSJg*Ev?t3?(_!PLqU;X^ofButSUX^PHZVocOfY)M_KH6AjA!7*) zQ%rP;$^D}%Jb)+z^go|HdyI+2JYpPgY^?wIM?V1Xg{1%J=xk@_V0&*rS;leGc(b>? zfAI3v4v5TmFLu6tvGe7(Z=S!}d+}-)L;btwZ=b)~d9!=;`pp3bC#|-&9#$p_`{zIX z@~h`NG4<=Azz;=YGEUV0;<~x3XbRR<8VdLX?tI*X@EKrOJ%9cd51{>{GsZcK;xb-cgdWi!SZd^s?+=k&gAHRR=CRLDtf< zXfKlJ-CUk$v$HTU0*YxLpRD?Bb8Yz+>S4?WY>;+u>`Rhg^R5Q##~N>7H7y#1(pOVX-~zmdXjN?C)V4w?HAUa7vO)wBqFx_)8Rdxuru#Tcj}eeAWge~JW-@_8 zll3_Y>{)S*dz*6gy6Pq6=lwhojZwcC`VKFroBE*#Q_F&7Ou$W*>bMj!wHai5Yals7 zpHacdoAbD^P#DH7BH5hkJcZoF9H~?LvFpf#PD8Q zWsuJkp0>I$15OlpXd&BDjAX_PwP?57S!vpDxNe>B#=$hQX~j_iGn#^S4W* zAoelT(2_c98x#boq%it`-?};&k*{ zxH;;TA12;XzxGqpQAD{faQn_L8ca8Wj0A%$MhzFol`cP{;~hK(C0X}@)VNz^*C5Nq zuYDFrqn2K22QbRymEenXtLOc+g?XDJT0Rb|A?)VJvCLd*v+Hiw^SNj=eCZ)@cIYRQ zmX9=qc`Sdhq|p$|M82=Cf`B-X1*hy_pCkC>(7!PSUoYk1@vGoh4bIrr7mZG5D+%S` zg0vUqwRlGzv*2)#`7^}y-C8xZ%4D@k{%0_VY!O+Ty06SxVS=f_>@zY^@)?e#6(F(& zN3-u=iclaPe8@ut-0cQbNq%&^(&XT`VQ!96@yg`WonIoJJFZWW?g{=lK1R!Yfv+^e z@w_Z5{HE>sQsach!v!cG2c7wG5-QS6Pu;dn-*F~cy`}}x-sj73$lU~>NeNN=>e0Xg zgr!B1_E4@VTD~wGKjFoaV3MmAh@hP(Idh{fP&_p z`9czg&ElGZLZ6{UGq6Q5AIz;_aY6>rB#`#mTV-5jdpfE&E2T4;r^U&!W0tR&_OK8D zEPeO#`SHo&O`w#^qr(HXUKm1psr0u#efGO^Cl=RT1SKtL_Vz&ZPOjmx;=J})g1?dS z%`;_Ry3oY{-OK6Osf1g{a3s#YdNSfu)vSZ@1!FHKMrK~&K0p1EoxPQ{Maspu*~D9l z;~Pd2`BMl|*don2xwki0IlHwF(jW&*NpBNDYd74G(3#Y$}4g z;=rfr8p`lMUq6pJioCt;dJqWmJW!GNQ4N@U!*O{euekFDc$dwy`;#XBV!O%M^2UU? z2U1(yr59tyLC_U#)6CQQP`=(FK!-O+jS)!-3 z6KQ#O+QP!#D7=otTf@n_a?yjBG?=oBsFdM(G_gSa^|;sd!ku;#K4`0yKC#q4b&%v0 zfJb7GZgJ~rE%mWfA=2}xmgCJW4a(NVE}S0PURK zURzsv{9r?(84B;mT2l=3H%S6l1~K(mGnrHF)9ycF7dqOsS&aWxjOk z)Ya%?%6YH5M|$Qk<~f$rfOZZ5v~xfqu~0sF_TbYe8=D)*zo|B9$BCRF{m-2vKAb|V zQPeym_Sekv$_nSRm2#b#Uar!tcdFm~vp)r41tnldl#M;1l3zF?p%*T?%tB zUP%xRHGYR8g&Ukze`#q}H;uSE-^K`^?lt#~GOJxCio^nhJxC)9lHUdW)%82``Wl&h z^RBy$`MJUC3SfxHvV#y3o#Qct2->HqcMd=&;RVNS?e*RPe}4CR@5T21tDVEQ2Pbd# zPWFyYj>(pAa!FJf#5jj=mWQ)8vXG8u(Yh)eC=(-{SdB5hGi-YR0i%GonZUqw%INH82q1rUjMmQ^)!gQv5E zsh{Z2SYE;)P-q2+wuAj+ZiKj-2hwg`b1MQEY4da0jfm?aspaF=w6HwK>|{OShsn?~ zOlEy7^oA~tioVc{b&O0fW$|moRr5Zj!|GvVO5b|ilq!VhBLgW?>9<+Yau083!9#db zTIN*akZ9PfP09!Cb|x>VXjq>zPm=<}*#DX;?{Hsw{A3M*&z3TZHLt&DcmW6a#Nq8o z!)&Z43?3KAmE}2N&>Y(gSKNj0vHAG%+T%@9HPLh@p-4SCJVE+E9t1N&Xcvqg zFVQ!M4QmV~@LgrqDJIY~0Sv6-PDutIM;o;B{g0xyHpwC*o3xbwz5n)q;}8Du5744{%-q}})0gXM1OxY~rR$e6D498; zAQn4c{Pm2jfj=bIDkg#Z%YJT6P zG2&>%l-!-XHFmk(sh@>*vH(`5G)pR$PojYGKd& zy)0A}0eXL%XKLKua8q9`hmj|3a{uH;jq1P7gTpf?E%2b35yBX0^0lVCfB5{5;2r&& z^v&@ZZWT*=(dQ1Z!^aKxte(%22vnz7vlXg&%QD*s>&i6zi8Ks`S=i6`e_MX!gU^|f zpUapdt6*REBak;-;pBqh38U%78~js))xwLy`A3GK%K05UCutGV*XoRT88J!=6MJKz z4?W{>@h$v}&@vmrzR&~0zGy4tUpLsVkuV7K_>0F$()4-vOumk&SX)Cg+ge)-`orAm zY)nII_om%?FmgrnGHa9xR0r;cLon8>jIw?wPz6heF2tw_D{>?bx`tuy4QtSQptHw{ ztHupTC_RN>X$1a+z?LU%B?qu_U!+C{cTZFr`2Tl8+nfg1Sd89;zAKSe_jhCka&0g) z#s1}dKTU43Ft@Zq39su@fuk*6Ks&qpzy9hw$QKcGAR5{s9l=ez$Wd zp)e~4bc}|9L#x8wCQ#raag7M*1x(2iy6a#P`|h~7^&d^+{*~a0jB{VI^2vS)}-cpKWY}U6dh?34!Xqxq>5jof zgEfh!=l9meGO-@W0`?BrlA`rcwx)S`H6D3Mogq3Nnyqr=PSD#_`QM^qq63WxvkLab z4Lm(uR}_(Je4j8>zZf&4nVb>ZfXfV7Rjx8SF`KVz zsFk6bKDRMRZf0h0QvN{6GwlJ$s>BIc$%R-4L#-|n{GGt{Nx z#t~y{YQ_tHrJQ&E5YJg$Gcs|6WIv~>W?GLaR3G^;E)jjk^P7DyVG8?4rvN}`0^IoV7+~+>-t$S&7V3uZz$fOK}gy`&Yqc2{rujhYrcg`@q405UVVe<7L(cPQD8|Cnq zzkZJM5zoxlKI4+%0gl0<3c{5%%BMVyrIz8k^>CeLK@>B*jW|JCvWiLP$|{UY1si9K z1J;Xfg4{blxk|rxmL(@tE5%JSV3uCJ9=@d$;;D!gE=Hus5#c7nmU1B=60tka z0f2Q}YzY;`Qwa)c1U}X;Awgh6Kt*e7v&&1MNP%mX*+N(ip)Y}Eb3EeSI|6XlAohZF z7_PeY#fMuHYy?T4NyMMBO zM9TbA#nU$hwKJP8-dHRhEYl@CN?4p;r4sN{ z3{t-}4CWpCefKJCS<%=^VQ+&rp{~rJ8cm@F)`uNvBK+l1dl)})Y2t@rvVoV-#u7s@ zkmYPfEG|VvD?eOc`1tYa*6IRYMf~1enSHde`03M)XOC8&Jy<2k9;W+E?p<4ays`Z8 zqcwg%eX#QM!PpC|UG#^IX>FY8E}aumMe` z9$Do$1j#y3b&bzVMbIA|vELch9PYxVq)_qS+1myDnr3ErW$R17H_j6G>v0)A-`_IPDU-Gkcv<{luM*4lTdE< zj@0)wu~I@%r0#+Sw>n`7joyDL^1<5z40rdKhnU8-9-(}6;<(=}9ZL8<+8LXH2GM?| z41~op^4!m1iPdA|M?d)DzxUt%uYdph-vj+&X`EkNMo1b+#f{YA4p5Od`NQPgbu<#H z7@$V2+5XNa>Z94;oBm4}N3Bd364^^q4Q)8_Ch;mw_0|X>6-?Qx*15(sRr-#PgtFei zQw2x3STl1ZQ`aHqgZO;jnTE8QBQjsYHb=`Kvh|kt56F3UqPS)d8>dwIgBV@!$ABth znj|B%Qhk0?%C|+0|FV(wg>mP~XY%n4Tsz2|2NERIB3aS!;>q9np)fwxm^#aKS3&>K zL8*Uf=lgK}d7HSNXY4!io8enz>+umaa}4mshXHHeXBg>l{o(K6;KOHxBR8A)pvN0+5c|TrMmzczpW|=u@%Fn! zU8>0H(RrFJGw98%vd|XSOE66O$vEqtMaknNO@dp zRjL!$ldJj+B$ltAK7WG?H158fwg)A_>!_=pR+?2Lxxf^jo=9eXa}mA8`P!n| znfFk=f<9*n$XbAHb9!_Ni60-zHQgitNPHTdEA=WZ<`-L~YD9uA>0Hhg?Mbp2Nj=eJ zQGD@Zy^diUK%XsW%3M(8h92iEy`n2YV(F=$wiiX#iPr4q%i?Rt(VH(A$st(CgC`RLpHIHXa zyzY4pD==dtcrkf-=aZpkV`F8ysoij>o(({g_zQO6G4{w?yt%#t`a|k^+?H;e6`R?H z7c;|X1#hBesqJc2uaL?)j#;}oS=OOcM+~LZMc`u$z?g-YX@E-DdYC|b%P5BW`q6{6 z`RSxmp05Fb#Wqi~Wc--9sUAapjgqQql9GTHlVf8ow~^gEIi5B3ovD%-T}3Jb?v&(+vy#OYd`YKcm(bemx`!?* z&&kus2Lb?8`9CREZq6nf+fcY&%Du{KaRryy|DrN&p-Xszcjp09i9*4 zJd=AWTq+XN+|(70)0E_>Yz_~%Hc9OSgjzFoB;knuuM|_u?JbkC-3g^J(p>R%XRh{3 z3CFUf*ITyiF)A@g|K30TlUHx{_?kQL7D0%0OFvI$IU|^eS~32y0AKDL)Boh0`tc7w z0l3lGAI&@y>ORKEF#_}A0CYf$zx<3J-ql$-kDC>Kg+MSQN9X5ra;Sgt^ao#n3O)VN z_dfdJ7a#rj`yYc1kw6{v=fTz*Xd{uo`^TsM^e=vKaF)PhW__CuXaG-_+3x93wpk1c zoQtqCC^*F?{T6r`vJ8FdyO(e9bH&M%+F~$2+*$>mrp}C0BLfiQgh$b|+1X7}`SiZq z+j|EmuXgsCqDZapee&p&r>T2ysVjM$QB0#VCu57XjlSJc)@TKOH>_gv71n zBqK}&?{T?p7~XB6?yS-xg2A*+cm1L(oq z>dDh}Lfa_=HKd(a*OJbk1pwp-iey$3Tum8oD~m|ud7vb=jbM2B`0?gvpFY55&iRcc z8h}g>tRBSbQPfo?4LDR>{ATI>Xk|&M7H-(MM3u;zktdAVc{U^Pb%emK9cm z2rXJx9^1O3sv9H5sj_4pF*chs2%nech?;6>Rk%)1PGdKtRyKR)6-pO~B=Q`N>ch}l z!yRdFr-*d=%~0bdWa@; zT{;X)Lpqvi5n!?7b}DN}b&`~DHc_`scI?B9_Q`0cgrS9JDmlxdaB~4`A9pR1JgV8T z=sTf_M2htT;Kd#}1hTui&^d&TITEpaubT3MLEX^4Dht3-OP zE}|=u1?-Wrf9Nuo5-P_1fNs{OD+@ZMGyy?6GQ)SO=v{~{QIz?P(O3qt>trZMVh$I7 zFu%E}hGO-r$_(ynf1Q46MwyHf3AWI-t0z@&7R)`XxTL=V=y^)O%w`xl@|gMA`DS#ue*RAO>Wxn0`7MdqRieQ^H|Io1!T4iyJsO zY*atKbi}NTtYlQ!165cK635X7*8!vsnbJ<@0pmvdNI~GAwEv*79IeOkt+KWVm$#Up zU8bHEDi3i#Rv=-Z47|6?q@G09z>qG@|B<6j?sqwxJZ%q(+SJ7Upj3C@$Y>v*W8N{X zJAse<_SM64TN)!Db;skA-Vq41->taEocFg)&mY#q-Cdn-2H}OBCQxGlg5SBn%2@}7 zz?GH*2VOraV!O#`Pz9Z82vm(0a0uAcd4?_Q81o^5Qg%5%4q;(Cew?i>(s*wKt`8Ak zK!&iUE-bBn@q-_t&VbB3di3Zce9a#}*?h3Yx;7ys)rq4`&VkeCEg)+@Ji4hRI#karo{$EAKUuo-LoX^L(~Fp;YPk^y&9}b62f>Fjmet0l9i&=-d9leU=+n`<2J>{(L8jtaz+mS2%>+DwBlmj}{V8C(uo}Up z7k&ITX}L<5eFZMEy1ImVK`$p6@Dhsqq|UHx5ogUURK!X>*F0``NY&|BhuIm%V9Hi^ zHk^M+PETpk+Oe81?{<|L^eo%F2=6acc>ti*JTq=eNdTWN3xEh<#f`9aG&6T{oivOe zg+7){v$I`l^di(uBQ-mhp^_b-YWB1Sy&cBzjEiV#RE?)#4?y+8AYNSw6a}al2k(`T zKXRV;#HfswLKB9x0xasu<27`+62e7`7_zddDiZJGNHD5tBm|tSoG>)fy&VnvvC_%> zUE-S>egpZgQ?L*@|Ddk~9<8TOxU{7dX&dX%+J6ezemWk-kzKp;wGyX5k5WMw=>&5H z1_IwhOAKl%TUKx%3~d~;_yOpNW_WT{S#>{2+)gj~xds!y#`g!n6_9`@5FeZ5-Ry~T z(4V?AQsM{`xoPxocl>8c(#q9R_%KK!g*c|F{7sSQNA7yFdx%1+?=Yq=y0=<5bC!z5 z_~Fy`6 zXvR<*<$s1(r9pK6VzOg1AQI99se!*|);2c&>Sw?H^S}IglB5+&twJ7lAxxb*rG{vO z$2R#_Sf6+@>M`E{0IjdD=os!^0+sDHWHfetsYHcRue7bcd)1&g-3;+DnV7j5lX-<3 zs|o4t&O8jz%vl_iaC^~7HVJvExWOH>wVo!*n~GV${_|@4gm#7_<40e7Ok5Q`%8o2k z8Ot6RnSn*X*U{n8;o-sF-rk!x+i%{!efjeBt5?}Wd^yuZ={eSeQKO+}=9R?UP@e81AU3_SlvcT%g_8Pq%E6LcSI1kN25Z(P`Y6nib zoL!n?<&-`iVGD7aiwkf}K!4hcU4X>t;0ze{cT~UVRE$I}V|J~tvqmf-cJNhTJg|3x=q4VS ziQZKMPo?Y%%y!IB@`Ro(gv1a`U}4tt?^ps@o#?R0{Dmp?NEU(z>kA;Vun#aPsW+u6 zxlc-o0PW@h0z6SgOxjKk{>(+JgLG&-Pou$dNfelns9eTBSE|9D$#hnyQjOpY4m3!h zO3nLte6s6;2OMtN3`KU^-tHZ5?;pcV1U&fbZ(e`>Vw*_8uV3wa`Q4lEUhe=Hkvk4I zL-L&wr-r%&h>m2+l!_>$BO}0B)ayQ*9MIuQx(T;RT8}4E|${=5aJjFnOq~qdNjLIEVTxvFMWlYM~Hq#xQaGW>2eOXrMbXt8HZ%-&TjcW#99)o0L^+g^vFfZ1FOu%Nl;AJg;n54PO>Tm%&RECPs z(+m{8rHp#Sh){HwBN!*TNG+&$%L|K99M_g(8D6GEg%!b`G?r%CP*kUey6oKfkDM~B zD7=yO$Q12c_<$L@lE=xYL_A-7`s}~^-}$e9^3liH3A+c=5OQsb7d7%rV{bT+4-%Kb ztHX(0Gw`6n-P3Od2eV{$LKY2&>v;|a0glc@{4vrcdJRK@lRX&TEw>hJm%8!A{yBz4FqAz=q=u!F*A^e z9I2m;XXZI-RN_0sRi_sj6XErqvZ=gRqjx09VlqoF@*Z0HFk_c>pR5tyi$_*&4h9Y~ zUckpoa@Nl2pT4ebASF|Z!GRs!%SQe(y{kNLNrzvO5LN$cM-P^$Hl6L1M&P3xpwP)} zKLRKtr7j=$UL1cTQ@j1)@bkSI2KJh+FuFL|n1k5+!x%KX(q0gOvW5Jm-qc(?~%G&rQZa4-`g7_mT*ZI7RRwDDkb7Nulyd37xe1E?ytn6GkxDS3FJ zv&v`5uMzp%hLSu8k$;+$5O@_e4^>>uqjrZ!rCaCuKQaSe0RDn2uaNmW13wM+Yd#>B zcq74hSx8K}6(HVbvBZyrDEpC$H9txTr)Mx_eZ`IHD#;kg{?a07_Z-TiS-1=;bPw3P zPItanZge96!?`2oGB>|6x3E;76c+eMXwFlwqoboQzkLDqCL0B4W=LaG$(Y1mjul}? z12=KS=ZIzkJt=~I8|wW;*C!{@3Om5vUWS;^fHFLlSb#~po*=p=TM4iKRp5i!GM}^nferpp_3?)N7 zSObnzeby64`&EemjDDqNQf43@=u6hQ{r#htFJHWV{qo&CdjIqco#^xgmEt`ZZI5^9 z<#yff9L0wCDJOfZ6v|fv=~TWs`1KddDk*15pD!@VNg8t2Toe)j&DV3g3Ne^PLRZpt z=y@ihj>@9*EOni0+8{;=PiHL30fSp^^ewy<<`O`MfQFuf^NC_;P6_1obds%QJ0zy` zO>iivD3WEYzQCuk#$xYrhGs{#;#-E>!NDn`f<7wGAObyMYg|K@89oiXmD1$JPkbPPSop*>gwR?udlJMW;n}bUca8q6jc)@-8J}5((Pn+ zU&my_I=Od+P&`E`yypBZwlkLj23_9XuTM}Yf#TX%tw6`=53)=e=x+Xd-ssY-UaA+H zTLgd$6ldq~7-{F!YR;FWrxtNj8!)lGOQ9(*)JBZTQ8{)iD4mtn;f9k8ETiD#!hlNv zgEqmsx+#=JQ6h?H)Cr{uu};NEjP`DH*R{}rohN(zKHpZsT&aRuHm1+Q(%Q;D`LnN^u zPyQorvAeq$tNM{YDI_q#`uaM__W!{@`ZH*q)Ihp(9+WvGU(4j(4`>B~L236-F5m8+ z@`6VXR)6^UCnOLw$ed1KjzE+%^X*kb)E2MFetQHaj{p25+)&I*w@0K69Rp_>p=99L zN2e!Wk^gDu@PY-U6@gVMJ{^tzz8~JYc#=Y;jQnTCV&GHE>Iu;v$Pcx9bV7HmEzOex zj9?8+$BA}#Mo~we$&THn%b)$H66Q#DpUDNU4mjyV4&;1I>NmT?Z8`qDy4*iJ`tlpn zz#lb~;Tm6@2kR>kGviGQ)IJjyyhK0H)QkklJr4GK+<3Dv1O> zDcKgPvE9V&td+$RuLyX~)6lpN_wAQG7J@!=^& z#VLXiCzd(%2Wn#)kGqxh9_TZolMzern;B()d!HH+s>5jD-Ui)=A2#7&(>gIzO3;n@ zcUNT#zTZrj;b#F4%C-X@OUp}fuES*m(1(B$HdfdkK!l_{Gh3?>)uEf`Cp2unTy6CR zBH}IKY|R20eu(87RNM96DlO6<{pm(b3*GOTs zL|in;eF`N9d58>d$7Wn1Pm%&J!B*$25-=9+?4N)E0Tscj{@tq`0MM6jc9~yfJtLl$ z3pl_9iFrpiERtBD*MGr~z zkI9rIwVP@TbvUgOJ$H-eNwazA88f-ilCbL&=j(=fa#QH8Hdc_D70Gekt;C)XWT#$C z827hJ(R+)i!Fx_1jA4V$hdW!R*Mz)F2CtygzB8+1!4B6H`hy2@8L%a)Wop{Z6@)=I zjbwy;r)jHp7qOt;0`TXxDu^Q=YQ>5JnuuDXZeiRLwdYx!G(`&` zSEddDT?5uZ6h*y5;bxcSZe-C?RDwvq$(c-4UQds*GMU_+CO|ic0oIf`Xin{5N}3)1 zoNw-1Hs-K`f&4YGz=_PBz$DaNZkZ6xB0g6R+kh{!6p;}ot1{=QFCr#04ON5Ap6DhI z$x2EyLDz%P;;BoFG1BF*(6Xh0tm=~!fhxT&#MAWwcnF|XlJp@}{qq@MS^(*E_{YJLN3QZ0;xrz9WhhFX{@ zpz!pK#*LrZ?SZ2O0WH#KMdV$qXd8~*x+;i$$Y(Lzn zQX=e9?q*;3)*Ict-wgoE^M+dV$u=_MeB|%8oqeylcr3F| zv)4=xV+DK0yKJkw2U)wqp`Gi6dbk@L;hTYRk2lkL-%D3f{3Y z2@>}S16A_gHOKgnwmIS6wASv#CLYQgcLqCLrXh~&cS>9nK+I{IngF^ zI+(tI=Y#dUc=i17aBu29P}dpT)1-TsbVHNRh(#y<=)~?9nXh^fZMZ{~juH-bsyY#S zsK+8lroYX-KCZe;90X84Ov@B#?4l4=L74>YU*>fz&#c9~npK|5bbtaUVb6x@P<__H z!kt&dh0%6s4$0T{E;Ip@1P?f4=u)FfRJ6&fFe_!&5POf_gWm*8eB#4+d#508XTQC) zz}IqkLrOZoM93939vIvVgJ5^(xN27NZ${P2=uPAWT6uwhcS%x~-A)?(Lg$O?d~VI{ z0?N?!5d$NMNNRU6AY#NoMZ|PtV|i^o);n5#Jgt*wCjEjoA7b5maXt^1WRquS;=GG# zl#VVVCiXmomLaF>69kAfJi5xm&DB)2=G$bp+^*1$VnN+zAN8WCWT>*KwZ!a#@)W}0 zfbxVGIODco4X(8AZprS&$jC~T%fNW__;cnB7g|M) z!_$w#H=ps9!q)Z9^O}+FA0)I&`mxG{u*Q_r2REO0k)AmK-@);R<6Dj~2~TmEz=eP_ zH&>^)YofL{1@cAaU#%Lqssei%Zpc=Cv6#plhn%a4VdHcbfgxXf`egUuh`@(1&c%od z>OrTw;T4d&^3Q-Tw7U;IeX?I|7A-f-x~d=w1ZB9(chRamz+eQ|BVDa2Gi?CqlRf#% zc>Q3v=Q$;qd1wfbds1Idx#Rz#h2FSob%e(~iC{Btimh97P$gIj^$udXk@yH0EJ zOzdF{E)tEDn6U6VhH}Fg+=0XXWn`~&Z7q~ z2;)atZ&?gsMg{v{3^S^NA5g~sO?FlSYTxR4%0=03r$HKRdI3Dd3?iNm?;h5AMk!rD z-Emn+kY*OHxs8V#I2^I~(koEGuCJ{vmSB$ToC_szAs$CQwW+34G?fs~H%CMYJP~6S z9m8bv>=`h2Kohu8-_Fm;$A=-R#GNo6O%XTdt5b~QxvrWX(p$b0+foT16M*B3}DC1ibqlc zO_&-eh-@=3IuU2HbxoS<76OB?dL1iZz{IFh)vZnafplUyW<a1`nG743gBB@)hKD zM7iD7B=NzI7`LDzD3r~ecOM0n(JP+@jmg6SmqB0wp0MK?O7OG;3>k(-^k%q<4o~qs zBIVi6{uxAU#Hr!>xp#1Wa7=q&C%IU+Q2{uZNKE4EYHmd4yvIIf(n08ftilQN=PSUJ z+1bSsHJQpCm<-Bx8jlXqy@+*_0tI`Eq)Ppx6gC|SKlSLGWONCs@D+98`1+2*GP=!G zpo#36ma2t8m4P(Xc{-gqdbCa$jN(Qb_0x@z^emk?M}O45#^at|qcn6MLJw?}=F1G4 z%0G&Mtcb=^4}tRrX9LKxKOOYLY?@7ZhF)e88=1n2=xSl1OJsbvuMrN8^BcN@R-J?e zjjj{q&$wBL$W(7Gi~F=1zkU;@)a8-+SI>Et-ehsfByA?zz%bEG;hIVhv5-uK_lTV> zYSn$^J9?3(ho=Kj*>L$I{&R9V>LwdtD{IRL0;UR{GBo{AWqA}bm)-)DpC zu-SBdx@Losn;@Sdz?wv{Tjn5$tgL8ww5`!s$*9A$X=P}TPoF*h+yDN*^~L93+@~aQ zp29PDi4~Cn#;hKuulkc=7rJ2&<2GNY@C}C%tzT_bj{IHp#2uB=?j*YxBnF}ttD{Y8;p1fb%BPr7PZ_^fhcOjOzG|KF5t!g}=QCo- zGcq~Q2gl~gr|shgoFBjTIeGzD>)}?T?y95nfJFvoH28*{Km79o;S{YYVHBsdwYO|_ z5VBzU{`APF*l(>4|9qO>O!mTnp)9{)Uw$Qk0u>~IFCZomtPkijd>@z+j9qxr=yo}^Q0_=)jyHX#RgmZhX=!)Rxo)}|>xdzcu$1Pr zWEp0)V1EnA!v_tZ@;QLn@cA0Q?`E0g;!buqVihpLMA>`caqyvNOxm!6w!1j=O^!WP zbE0Ttb_MhX<^7AxYZ%RC2+D#9gkNQs{9i}E{Povt4TZ#|7&cm6oA;){S!ltW4M9wp z)XIvA*=%c0@tK)a%9(S4wI)#{bw@%$2}@0P0WbIMbE7D&QpxUjV?dLMR+XTXPMm2P6#n9XFU=OjXh1J>Bu~!;nB%*J zg(#i8DQzny`9xkugkAQ0&{Vr%v1*IYHz!DpUh~95pTJHUqt5V81~ktxx_mkZ*(Jjc zV98e4vdu$4jStbEV6NA zS2$>c@zvKdPM3A#5Ae>PNz}>@J+I6!2RnoF(W9*|zk9X2f7;l>d}hO`-;VC2u&hj% zkbQFChKJ09?|skH5sd|i*Lfo`U1x(ngyJ-cu9Ys^TDV%W5Hz6)9c2XDjd1mJ41h}t zQ_pvXrQ6Yby5LlHnIT@OOd0iWVwA3LY+!EvoqzC;clM8*a%Hs$&cdpp4#{)ea*#2H zI?_s5Wyr&ao9oW~x(eo_TbWfJJ4X5el}+ZoX7^#D$!3MS8&2IGK@{j^%$Q$ZS^edg z-~Rbu{ot?4} zOVo31c@9~ICUYV2~hX`Dg z_!EkmFFty(1xHQSL09CdJAuQ20;j)oUf#s~*`=}+MCKEPjQ^sfZ*XO77A&eLX4OSpyRXHudCN%ly!nCZ#$6nKu4k#kmR^f(-AlmAs|@cfqd>WS9`DzY2MZ>lVlSFpIUtu;Sm zpl^t3-KounN;MFoT=5&K>+U=V(Q??7rs-CO3Qa_#v5HY@VV#nTUr~&7Kb$6!0KsP*zW%TUVd(2I5Qg_~APEDlHIC&$tyM>LXP+pg17#X0l^#=Xb=fJA@4b z(jU;=@J3W}8A66lJLF4AvS*kdW;aXfG;ZN+5~kmjVsEkyF6knye@v(jpm#yNS-b)} zMjmFSqJkEh2$Yc<;y#(Vy}q`>aHU3cv^oy@7|>XA%wF-}+2Rsa?PMZ0A9_Nv0s~!g z93zF_Vc~=zpWeGHw8hQNRrab~;kl^$mRH%gZwS3Yiz

    3rZmWL5%RKNZex&0`87 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%0AN)WiisNwMUCag} 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

    !OqLDKBeZcW?tD+t1jv1gtWtq9oJzFt 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

    4y0);~1&$+M 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

    @+PYCdwM`~yAr>t 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�H-Hx@Vs2#pUkT4dNwCnF$X#fP#|357;pVG8#eyg_ZIyA|Q+SYC{&vVCEr z%!G`;ZJSimp$Eqv{fJp|D>l|7TC;PsHXD^%J1hRuu`TiGH8-aiIVN!^M?IsO47_~0 zKBmfVM?|mt+C};QTlEWa-}kL8%48FA9;77#rgwiq8Q3|{DQd4YIYC;9eec9fi-fy8 z#M0u5TaGY>9$Vcj?HUSti&hlTESyx%#U#LC>L}EchnCAV*V>)*>$p@m|$!2;1wKoKp=BC$!w0+`bN2mf>@~ zvbIxe-s@1RGL8HXCAn0@VBpG4u&LFB4v&1AeW;8mN2|+WA z@p|MH=8F1tK@hOPqTNAfr;$MM>SP?7t$dS8jN{`AY|zkL3hTWIu@c9v8B4ifPp zOY7>U39ZaMveBy!RK3u!zms;Xi8~xGt}AID_EXrGQ1*s!n=>-vhWGd7``~o1gd=PI zslQY2CJuMkK}i<*;Vs^BUTyCc(B=7cHMFw?O0Y$%%T_EIt@zqg#Dk8 z!snV*_T6=IDl1keKO8QE^ZP;68jmrTGBiWEO6+}6V5liz1LGj6wO4g zUy&I~$Pm~o8+@g15A8A>j@SUX^2d*MF0+Yk?#&Bp|Gw8oyEa!nr4z^o#bhVu4@yPi zxS&xM1sZz03>R2ocs;7n))_WG&18ttgIo`;BrjMQO2Yx$4Nux?{DE9a_oiW$u~lDD zHQ7Ei{xVX4!+Pe`*a0;p=<{W{{P|i?;nc0xdq_Ie2@NHv24iI5MC%enD zrVOO@qYlsN!i7Kgy!rRX*%}h$5a2@J^%9U;g_#>fBO96 zFW>I}^lScp_~qOE=kEcAo_{>Oe*2Lk#Y3J}{)85syDX{g*gkHmFJcOggw;p)zjGP0 zow1Dw^3-%iYUG*66y(JSzcCxDgIs!MUZ>SPnM7yWbXCI4&8*A9n{2<|h${0l1Vg$# z2FVGqllSuX$6Fww0GC(iKYzRk=vKXv?HG}Jcw1wTquXkep%;F(4K}w?Q33Kne_$-% zdWn@Jvz;zEr@8@FGTFef`vTg05KaIP1jKhE+%$RF)p>w1a%jbeNTf`>>6EqBpEQ@- zpMCj`91~+{e^6*CpOy2Rl_6?`k!lYhc|di_SU0Ujr@dFjQ=cBC@aUIM)aL2n+FGiz z^Hu6@OOG3bau%9giKQ5o-r|Hbn%3)-4$wjxT+u$6IW<QH27Ho=d5--;a-&L%nSas-4G2r1Xrquf5hf5gND|Mqb z+upbZEaL0dN4z)8+O%4}w9#Io3OB$KEw7w=zDEq`Yha;BhX_OOBu#@Nyf9cp1AY>VMs)4wJ{m!4wM zGX-|kJ5Z&I>`{NgkNL}EL@0VrE4lKwxP@lZjljN6{h_qMwo7*kYUO+oru2_oxvE39 za#L3;6P~nlt5#hR3|;NHbId~2(tpls9dRFJXsa08lURz2`&(A2KtG!OYRB}xsly)6 z3Wd9r9Ot8HNrD_eOdPm+fxB^`N|iggpIC_fI@!5YqK$IJ&H(bA*e7n$3=qQuHw(Ae z5KEr>Pxi;oV*0RriD>8D{RD6&N)@JOx7Yot!ywCidMTUyrJ|;fk5L4TE_*u21RKgL zZ-y*{r&l-qh^a3C*S|;cFW?<4gUlVfkz)6B2IS7jvo*-{CMZ2?P0-Q|$jG**;4JK} zwb_Ab~ zL#z3U_t}|o!cnUcW9bRLi?PzBMJ>W=K&U)OEf$?3w(mBFduNLuT1yPxy(P&gmSKyD zt-Y&R3prTdqY0ILx%w20bOHcEwffH#SBdf4F?^W>#$i)V^{Sh92|wLXN8TB(+BQdL zm~u~+Ib?#xag0|k2;NyuN0?ks=eC{lC5FHXp`2~6x0#Qq^bZ?D(^~O};umn}avZy@ z976yO+{Jtr^u}~T9V#UiT?H{rFcB2`X*C?L?gDaEY*sa6D9}JT^f8d~q@<~K$0_II z?z2GrMbEaY%^jhy(N1K>TG8|z)^;GV*N;T#wT8~#?Ud~0Zd9VFT0Eun)wWHy> z9cS>YR-;?z(PbhPqt-^zUw8^0nFFgpRPG_&YDD&JhiZb|Wwx}=vUPf3h$Ta5r(j8o zR!qyMt2yCC)4G-ALh}7Rq3J-yr&kC(OTV>+8SB-8tU9ZZ5X*QfizGYvyYVD}T7HeS z(wRGUWE<&4tE;TPYLf^1TbDZq4J}Tk+B*3oU+TG{CryVR>yVcilDNCxiyivABeY?~ zAldn>Px-9VU=Es{k%&07vO;!x4TRvHQd!x2k{nCotN8N)fF4+5xf0b^n?MJqH*K74 zAyk*5oU7`8ojOP=OKjIvaf(ilm;2*!e=swD@)Yp)$_zx|Mu<2 zpMUurJ?7ka7ZoL_Ww=wz6NJgmKW05oz(;5G@sGd%`S1SjZ!*GfjTaAk7g`LU$Ff{) zfGcM_WCGjo!lBq4$+Rh&llzt$Ilv%;vf1j$LW%(m0r%yX&17nY@bcUxVP!>VA#;F4 zh*<3BvQZ@A7EEb?Q4L(%v9Wnu7?) z(5whRJTchUQ0eEFedIp(flZ@A8DQw^-P7kE55Im57?eMEDJ4rmS>F75|D3;ngftYW z5q0VSqm|cax53xizf+0*fjIgI2~k=)a*F6|W}4X-RbE>L))bfY=MlhKKlnf`s|6FY z8kG1^p$6ELK<^xRhUVQzw5VGlpG8--!7+@63;F|Qz|a`l1&_N)9p70RYxd`WL4|~_ zI-*^|mCGnSSS?$VtMZ%hPudmg&>ch-Q72-}qvAHQp^X~!yGPi{1i5n_+qoNz7R^+l zLP72*?~XM-z1WZL5%d=M+xBF!JGit@rD5LSmgfgMWL10wZgV+!&&}7}Kjigj`*~W7 zRlzI2lZ@l!miAVPl#%ng^*GW)>>iDzwCx5Psp2l5w4DZPoDfxV9ojU< z+a=mP)bg(44uY~V$&K7}j`2Gy>eua1CR<`xgYufxl0LAH!o&F)P@sSE4vJYPU7s~# zeC2d7AZ*)d1)?L`<)~#7*lP4ez1t#lpzOksMYVyOBO*f0Kq} zR~G@7x3n{u2OEURLn%^_KS<%)LoGbGVysn>7!*H-2}4f9-d>VomKNz!RCF$7qYxE~ zYN&dn?$s>mBNIK_N6j&oA#aIMy6?tq)h{VBGHO)@!Q?%v`2G3RBfJSBL23&~ZTF^b z5w8CNNS){j^aR9H5oEBtQ|)8$#HKXtKT;=>DysG#b~8p`2vTz&e8B6kKYsl3`CHhk z*?695_?7Dt53s1x$6>vRq$eY*UKP1Y)8-alIW0{!+YCj=-Cqo=!V{8!TwKzZTxIVl ziu;povn-WTdbWmNB{QYvC9I3u)DGBSdpL&0O7Y?tFst033jc_!$-Y)RXp#JEkRx41 z48vw%Ch!bPP@`9x+fCk zR_!;duQb4kvz9?6cx8hYf{+en-Az`m@>tZs&T2i(u!1!U)jJ?lB>NJoPKoR6sc+UF zS!1jicK$1^UH%&PY1dU9h{+2r$kLMwXCs@|A8eF4)ROE)b{6QtOV2Rb=&Gi&290-l zjkKw@KvTh8b;P!$D2o0a;emMzzla-xR;5l zMzgY$DL4(R+bDe}EodtphT6l)p33u}u=*()&0_NYAda)hBI!b=E}k z3ah9Bg;k1KZJmg8X$dnm8)_PK9Lf5=He+$Hxd)-K8K=@~8R?jOpVMNeSx8Z2ri12NeY zPa%~&4%8=)Rl2EO21?0KlxFWX`CiMBROyNfJJR4Xu~Xgsrxx{C5{}YpR~$_5X#}8X zveOm^WqC9qx0EL{h5FBPxRS+uv4)M0Z+kSGf zXQ)YVHjwauDwrawl}Wss>%Jta$P|-k?^FjWI&A`%ZHGR#YQY_$7uI~c{R(6?&$%|* zW*ucXc0)ZPicy^)ba{@>RU8ap+(~)wD)*bBC{tt8_Uf_Hi;QD)4NLDWL{Hr)W!+L4 zy>XV{-L*ad=@tcyhGJ@TiEYx+_GgpX0{bT_z%i=156!SHM<9l-(Zin0C|#hB_@$$a zZpkP)g3!A6FR@7CWa}|n)LBnmKST|HE#bIfOBRSXXrC9B=adI+jjB2fmfIu!Tjxz> zB9jLe_*WTVvsH=DG9@+IClW#f1lY>ZKJB51b}A-*-sO86G3F_w03s{OXN$yss0}}Y z=Cs51RJ;rUG8;FjPy=5n*WX&v88ZtATk&;M)aCX7R!UyW;fb??g-7@}5pvDTaZYzu zGteC~CE=$|*VezZ`*SB*eojJ2=yts}%$d-0P;yJNHcQ0ARP-;TFZCFcXH`~AZOyqp z(o`?h%ALo@*BnXRJ*X35QN)RGO$)?i+R+oRASNEpWIE`vWc=3*dU!)WeYnk+qp@`$ z=(AxHS(z9rIzVN@$k-ymyc(RpcvE>OiYr;&BH$>~Q@N{LOjdi6V(n}N!!W^sMUhc> z!7^CtUXQwK^HdL8hLLe)>2Ki0q;fs1VHfsou&S~WKa>XSfLbOVebx=(PFaW29qbKi zgfBrshU0WFe(7byZR}2^c;$>ss1jdHe?`ww%-I0LiRjw?T-8*&3>ElUHL)GrlaQd4 zmhyv|b5A0ir$ctu;R?58L$g!>id{auv`iVdZV@AJ3EKtkmWeZBv}JCPX*Yc0H? zhc+@9kf~|4V4fp@Y+s#twb+(a&#hfJ&;XwP;C8jP6?SI}Uf-!imwZec6yh1$w@W=7 zA)qp3t25ilmVy-GixQ3Uyb$8*JlRq(csw*gn*k}#T$YyQ3jMMUU2Spi6EhjiL=BWC)GJP@xf!PFk4I}0#>>d7alTfA!X$^LU`)@w`u z<$d3g4`L3}Oof?z16Q+WYBA(8^|RIJeCrt4Rc;R)R5&?*l;OCCxzPd5l0#v-I#825 zKpl3U+8QUU_(kkXJBuM2lpkAW2Rd}st_`(R-Hh4$FKB=*Y0YXBQ^{@~>YOVjXfd`7 zaH|LDv!J^?8~W;`>N?E8Umrf)B)A1B*t_NAjtnhCK#TR{B0%%S80$3eN|@t~l{}o=CuP(?z37|;I34!z-u}tNV(GVTwYuLOw-(Uciw~X^gTnf|XHWoPmnuH!|rv|}Y zJJu04j_vukle(Pm>JZhkt?S;YAq~Pf_MI|%X6sL_=CgbH3*fQ6Dl>{A136}cAdNWe zsgMmNS{{Y!`g6xlHpWSHzdpyzON=SQ2TvQ{eJZkL>o>jCcd|gorxM^+^qie#*UCzI zjp=MXcI6DWjCs9V+*5_0^7LQj=1QotmE|Gffby}udm9L5C<_UepL|9Jw;pM!m#zCmSX8dT*sd()v#v=|EGxWBQ(IuwlOT_0 z?n2okK^Ay_D6jKDwH^?>*qGaF_WKBl6z)%y3)r#tKkgGkzSUz{lzbKr&#+X~_EgKR z;jZwT?(dTdHAN+O2_A{oSu|<`N6{Y#TTI8k@P2Cb4k9dl$9&tWd$FEH%zoK-OvA}k z(tD6c=g7N+{R#!$^rbvNSR|9W*Q`%(yxzZUYd#5|+j361{g*1x6e>cryYaTnf~9pA zl8Ro8g7*jW=d)7Pyu(+he(mM(aVP}#wm9Xwd8TWYxf3i0(3PeKH^`!Zblk}77)r(= zgYC@E@3$CRF-ONxLB4#-D{;ZLoh^zdr-jDL*3KlsCIGn_Mr(L%W(Q~dq#WEgu>*s2 zK;s)u)m&VD!HZJae#%6&Q{A+S>(FLueTgqqY-<=0yX4&5TA0a%UY5M*xy<(b$$|FoWvXro=_JQK%ym2=9LR-mNqV9XyL+*wL61o|$6bx#&8wme%^yM1jo zS1_KC<~^uPcdnquYHd_3gz1h(k;rjhXznPoY@*v%-!ZYqu{|MnRUaeUp9O|a`v5M1 zl;*}r^=?ZIm9*HP=%fWMPyn{?tU9jf$$FZ)^`I+eiyV0EtK8Ua^38;J<;H_0a1oH%f zxsZBN30SgAlj2p8*eZ^$ZjVLgZ0VZo^g;sWCYqN~3;pM$UwhJWO@Vt^ATK+KtQoq$SHlXG(+PBft^Z64x7%uf!pYr$I~(Ag|w zBR32Vn(N&H66~bfC^uVN^{o9#6F}ONh#A}9pB!7Y-pj>n2iZM6DD~TWd6|$|thP%q zEgl2-<9i5{nV9WXY1;4l`r;q|;ctKb>Ej#hOJT}Pn^;e?lDpWYizfOuq|Kn!jI!WO zj73z)VlibA_SHdeK>o|u?|=T~OFBtCGx5q%?NqJs7YDrYYzrzW*VpGr53k!seYGb! zTJ;lXM3v9anCM|Of_b*qb%7yKrvlwoFNG)&kCNoy7LLbv4#^$n); zO8dWARov%OqE1+i4t~yRsy@R$nOqzjNy*KjyZjD2hB{kEs$Z6IgLi*4xjXO>5nXXE zm%5T~L0t%~tF!H=+pAp}@$E{K4eFwLtPP;TFiOSKHGUS=v};Z_7V_x;g)NnZGZhN0bxidoH)@{Px4;Hmb`T8c-@`X+e_SokKmTYhFyY zEUgUYQ$e4n?+6V267lcv4=Eo@JGft|Bg_2CuO7R^UW4hSaa=xi$f;E77TWhaSI0onEBR&)F`6U$`*u6k>zBlt*BxiYjLMrL*e2 zeb9$meF7)5hW4g$8Vrl(izIvFZA&(E$Bi-kS^rK=ACk`o5QAOo7tB(6{9Ko@DNxI* zXObR3Q{C6CZcSZ93&$ulN7$aJ?* zG?u|Y`YJi@O}nzy%z=T}w^hg7T;)o)*idbPKZ4C&YHidjk??FmBaxfA%HX3F{L8f| zH6o4ZU^9CrZHj*)XPM6wC72Fig|ihFr#%w74V-F=zeE9SIw8BEZHe+N8KRuuBzy@h z2=3%u!bx&OJLXzBfM*l_J>EXV^u?^q75#M_gd8eIeV~x!1PfAQk}$Yjr@mT;1M#dm zVd5c?v86qV1h~Z+s!>*;rzNp@Dy2bYiz-5=reH2dVFmj?D*a2t!a;S${6hA%%8vTt z@NuehCQ#Br&3N)Cg_9^nJTfag`%Ud$l!RIui$WM$Nu+tY8L!w8l`vHBtXc8CPCNyh zYe*cjctJ9PeXP`3G)}g$n<7>g0SRxpYNUP)M*j4Xv3=4=O@!1c1^MMxpy*a~B#3i0 z{3goB@F{KEkECn=R_>&n)z|&qS$#n%M3TZj( zF1KS|MYJvlXQRTjq3pvhu1%PG8Qp^!90g*!MM>8J&Kq<7d_#7f1k8yP?5uBLj*8=8 zt)l``j}WOujnzvM3K6_ed3|-#>fh_-2wE^<>jW%KqlFmk3vQ)P0ZvO~P4xi2hyn`_ zWzN{IR#|cGeU8?1h(BL{+<&`!{QgjtqgF`QNuSK#A5u@!%kRYl5tv<{9*61W`YF*w6cue21Fr{Mf=_^UbJAdXr zf+?cU>E+4#6L#r&H0)Y$Tj?8IDfXnWy(~kw22F&fNlvK3eMavlb@biAJ2oCK7vRVz zq=asR=`|76+vur?lS)mh*s+t}4Odw_2-RuQq$O_FSAuWt598;=xS(^l+fYjFiw{M6}v4`d3Sd@c^ zXRVhYCN@x%VQI!!6^6ZcWC2L$l0gxhOK)F@R`D`EXaG4VG^S{mpo?T!`{n24@<0XC z%!}G0O_o}MoE@Q;{eUwpB?VNGfp(`f4_EGmzLrWcl(?6l8oM`pY3-zGfKDb$p;`M_ z#X917!Dr=u9fw$LN5BkT=A99dXhNO}4Tuso!42^l>_qb=8!iq#;H_FL}C z0`b|i8voP?RI;JO3-~pZ8d=BDF{rx#by7hZtNDN-I!7lFK3WM;0*rcbc1Euuapkav z?ccO&3b%$k2isNG7Eu^vAjKv#>JoIopnXx<-3q2eR|VgJXF)sLo0C*)GFb8I0At$BNLBVIdOnVo``ub@$R0hw>H;W=PpvSl@yCd@TPb~ksF zpR-dbm?ut-Gw&yOMNx=7Yv>c9P9Mi}K0ODBg#%wnn~QoiT|^qpTJ^&uQcx>lYcQW_ ziPe2BNaHnpRn=~qa)tJK>JDSAeb!#S$o>Wt9zqi2nq9UzgALa+@{Wi`PbY*Vhk_I< zmmy%HTCcNJ28yh?U~50Cn$eRuXh)?C;EOF9KvHkco3A~?OB{9o1g@Hx$(~n;r!r4s zRhZMMstdGbsO-bEGA9k*XBlrDs;ib%T-3yoEtc3G7|~|94H>qonQSsxH1=pnVt2*( zBUT-n_%=~(57~|>w*XpQ_~6vpgBO*3M|BSl#HAuN2zrhOSZU|h)rXhZ3_?Gmi!Rqb zu}%<|!6v!ebuqgvz$zK99v=(Dh!Req#U`FFc9h{%eW?~Tk;rg>q>ra}fntVvtb|3$ z^CcRJ-p)@y-6kKm9m^?T=GZZ_6;kP4B}Pw???~xl6{AL~{DSx9_6^7OFVhAS+H~Et zkA_a(L?5ETMc^iib0tQv~YqdJLk8gUOF2U zcUOcsu{7JIW@PNVZHZikw9KYkxK~OS5~6wM^0LE}Rhh!N#!W9Q9J=>R#0Zk3z1kBS z7xdPeID;Bpg7$pvJdaDvLurP%u*;!o-IcOQX3AgsEo_tH(6vqiF zaeJ}-`S#*(e!BYUYV-S#=bx^2SG)1!2mwW zPv^hC-u=@buK#eoyFMEO@t$uA-s$1zrI%+llFr+TmtLMhQ;lG#h~<|h6ng!BFD>XX zg417HO?LM=KYTA#^y}9O3|3U=Wq7C5=PH|fd0TL?+YXP|Qdl4~u!6r9 z`gHnDRRoLjl;#vMwIje>p|=3LahaezADZi#ILllOqt3LN_nFEe2_#(|+SN?vESOz8 z))Q4iBTaB}zRjM}K~AYhXj#eOf4Hqq*2lp z-Z0$K7qmZ=Mp>l>yQ?mu$oQ0f$r%v|Q(s2-a4BXnu_^IVxZR*4Kgg?ON0==>vTiDm ze-fszq)fx504S;FKo0qqvN~^R8DFyFs%eEpu5lGWfwoXqq zmUsBMR!*AI7PCG#@J6b3svLc+s(6Gd0Fx0TI9GFAnBzrr#An)n@}kmbE0Zwa?udy| zNJA*=!@I@Dg_~_F-<_p5W~fw`pwjHv%Q9z0Ev3b=OQYJS1cR|vel zhliyu*EA8F8srj&qTtOqwouN`zK7g-vVDm8E-U01K#PhqPzN~MZpJ>29G~6SA}nVe zxuAX-{S=t?b-xVo%roz;MOOrS{tf`fH=3;jvxf!_%F3?sms$cX$P=76AyltjaF?Py;Mh0y3OFBxY>@})=f9Y**5 zG1yk_nlk_aSfoQV)F!6w61uthaB-~a>M=F@<^CM7EY5Z<+i$@vBS_yTK$5Jaodjm` z8Z6)A$GWhw${!pzjQ~EpW>%1;xm`E zl&bj;xk5s7Vj>=&zdUB?PruxYUZ780q)a%>y$=uaC{ajV^OsgCHEkiYwR4ZjpTi5) zlVr3;PxgwnqBA`m8+5eMQe9Hp?&f7piuHqQpAi77?wZz*Hyf)c&w2C#Dd0lOWMeHS zm9uWy_g%BsSPG< z+gc$U?&HMwk1_|l5i<34NqKSw3&emd+VTg=8`U2fge~lmkqfO&dwIQYO~sV-^SAql z&v63-aMJ}}lrTZr-~H_${^s{TXRB%ekio&uyAfAvIuD}>s#dlu?K}Y+sU&LN&sn!{ z&H87xnv>O)y4?752j_ z+(w|Nf+RvIr#;0rxDmgYY{e+FQ8QFT4y-EfYFz7>pTaLy?kcBHLTDqRa9$;N#paq3MRV%ZxE2RAp9SLaX->Gm zO}|k?npeRid$O4S6UH@PsAaZaTjI1G)R`UWD`sv97jgHcfw1#r>nX@0lGt%Jufr-f zAAqb^Qx_||Lrw4Ge6mNO`iY+F6xF_C!$CKLhRGj;url@bv)x{=KxM? zVK2H}Tl-Zt1MZy)-nGeic}(341f&E;yRE;+XYYuk7O7}X{`TW)OVPkY0qJ^!wMhux zzIW6;>P@*#;4s+wpdq)(-OPcjn~OaE+*saJ(Id`gdUXc=Ya$7$S7FNCmOz?xwtc?J zrzZVuF9^DwZgoxbPNo?oiFFgqrIV~}p^zKTXEMYxIu|mgPMyl6y)(SrPV$bt22FiW z6J1sAkjc1&SE`h5wyk3|vp7I$)qR{B*1|GihUE6Ig8|qSbvm5W{3}jwZYtHT8S2D; zKG_1k&dIze#>w)`t7B^MGQKGDVNh`f%E>le|4c~tTgEo{i*tCA_(3p>g1b?MZef&p zilw!bW}tw&A@HFnM#isUz_tcozYF%nd(As-xsxO$uP-e(E2_zZ;;L}gWLrx=q_tvw zo0gJQ!Fgg!x1z0)Hn3L-hQLg3`6WD>N{F^1$u48ne5uvFZ%@hcN9fCGm%WMv8>%+E zq7BM9%GpY5WxhviKOYE6Q{@5Ump&zvl$fkGs~rScR%*`Tl;&@de8&8gXoVGV{sC!p3c3dq zS4~+#ZyKsM*FI+U4$DW)fsIVXI@s*F{ay-)@rs# z+@}E0$IDH4JvW!z+u#(}XCKoND?7z5f7X{RdKx}l?m`IqIYgn0?H@m!|Ng`I?ZxIc zM4_NX*X@&I&3}j471NikTl-r485dNp%J*@xdKA6OgXt(Ey-#&mpr6$Dr6t+thzk9X zI`o`I_1_=!ciwrvdu%Wnz%#XpY)?%>pk#9J%WIdE#s}ephGt|r3Iny|KMM*FK(WXp z^_Idc69w${8!;Jadx2))NE*!~bu8|;A(C`^lc253nI@%zQu1W`{}5hMrbkcu!0TlX zC146oFc4@!qRYHXN4d(B={(^ssUlZ%qZfrvX>URdTR6>3d^)4CQE5 z_DPRzg{~Xin67N6nVv8kVY$f%h;O|nbRVpBjgvA_L6%20 z(}6y-M!CXVV3J+GeEIh4m+#4DWqY8ucQOm%5|%tD3cm8CU>L9d47!0l(bh|{>9zbL zU141fm#TKai7GYE7}%{{mXI}!3Y4ht?o*i5mq7HTeEujkeP4LO)aeQGP8H&V4Dmm+z5|uEc;! zhq)e|)b*y-4K6WYsn&{GoR#&GsnXC8;2Ynacoi`n*NAG?ujF+Q2~ehYQd`uW`s78h zrB0I!se*1cwUlsYUf1(WuV|TDOC5!}2D@dIjo&BL{$Yn!sl@DLFPbyu>qFCFs$@o7 zFg%Nfk&N@|!-o%_l2E%iI}j*lze$~Jyr{Wlyj4gU^DVVPrAk%?f&?Jjouuwwg>tib zA_@u7crHQ`a{3COSS*i}z*~%4V%HBhH>xV`Itj+!h%L0|A)0|YAvvwQv#goI{rd_} zT)?y+TXQCpNa@qr_kjU5=yQ)#U{#c9Y~G0h-1_n z8NqJM%#+v$pd4|`wxS^nMdkn4y>eu^-uA6VQhloQZS7}w&`Lx{9}w6Yu}qoE+T^+; zRG=KG!BM3)ewQWNbp@fc)In8D?bQU{AcGq$-bf(NuKb;Cm&2xBP?I`&r`63_?#d$N zhg^Ul2)Uvzh8@DXb~nS49vjJ3*0ck}Edv~^b36HV0vi}!30d1Ec0+$UR*JZr?K>#o zDzo*fx`1%Z5&1swSqO}#eQL^dp9o3l4@)mFu_3GYrLN?`fe+$HG!rglKa^v|D?ju+ zhq>;zrU|r60c%;<5ZUN?ggPFAEH$21vb;X;Q-PS7bK=ipW7p_IWkTj&;=Sc@12-Jr z&}X^H6d&OlzckfK9nxUC;Y7uD?{aBOQ<1|a*oJlJV--eeFs$BCeWxsePaj&;l4bwi zy|kB_W1vpNBxNm6Mq*&!b#yb6H@m99(4^_uF{A@VmZ#)RE6X(F8$8PtVrM#Q)-qkU zbi!3Lf%>CvRaq2@{dcS~P-hKf4zDotfD%$2mk=p(Kbc(HMm=M0G>NNRM$Vj@dU$Av zl&^lcFF0n`=5if0)E${FSThPkX&tqAnSPnC?s2)6z?W;pF$2AoqS%HZ#af2BSJ=4^ zPcy+(^6m-0a{X1t80v=;eMs^p4MtxV%k&1ww^yXGvsN>t4DzH#$;elCh*ptToZ~rrJoZ1J&RKoriTES8hCpPSANxsS2TPuQU(hkgp?9#2vLP zK{3AGrZ_c^u1#R#HRL<#VfQLQBwoZ_J<@$L6zcGb6x)7oOIbsQceA;yD#nGMR@EHAT;s*}}_4FB!L+0VBr6y1GHtMyI! zhNglI$K*Qcgb%!Q^Z3{S6hNZ}%@r`ldPk z*Si8kpT9o*c&s!<;^6!KkZ7VL9RWf69p^lGj+>Hz>Pj(@NNCwOz)u*j(G zE`t(T_d7h#ZG}f;1lXNyv3=A|V&R){u|wh>8Cw0i{mVWhsCn#;>H1wCx0L)OG^9~z zsyKJK^ZXEwg{i$oQytu@t9a8{38@uJs8*H&U8v(-=UBB`L}axv)^ei? zT%qqzAM4@WTwi8Mgc2E&i)n& zu(Z37xs0BggYCx5w%iQ`0#wkHc(Q?6V`~@_wt9F9psJgkPwC`2CHxe*rc)DZ4yY$Y z{i(Xthr-5tw4e5RS&b!(z|F#`B9V8R2jl=xK(N2$TO?Xc!wNzpRXJKjksov!Wgl=m zD+RxgG)&=!PzTRj(7Q~Qmapgw1_81Q2bBV3IapM0XD-wa`t9mXPz1YEPs%)oU8B`! z$z7b6mZ_gni8zT}({Dtq03-5h9eYQCd6=1(6`LrKYJ(yv^4eDDK6I--sfIhGf*`fy z;rLZ1lmx}nEW8(aac+UYhJ0y*H;}Eialm_JZFWlZv2}$u+P9mVA9a8mMywqvrE;NRgJp5J|kC+n7cOAE>SYY z+*XxA@#VBJUn;}SPsLu`P81Za-XAn6nKy$$eS0LfT3RWi7d9 z_Zm2ruamXbaCr$RXtA z{=78*@-I0?jw+6o!V}&jnrr@^m-S5x|HtdexBJN4h&!wq6V-^x zcvUT^rf**)sPy=|cz{o_@KhYd*WJUsE6O7|RD>}%Cq&|GlV>4(%j76U;&K9~x7rPT-eYxhlH}@? z;2Z5u)n`P#m@8t@s6yXCOfvUd;^EhC?6=`PH$OH!QZpaf={+`su?Te)n^N zA~j|5|3QR4#&?d+AO+hg^o}@4Wlc88op#x86dy#X)IGXyRjszam7!xgdNr5(@WDQMD+((zEQaB#mXn#H?+jBaoZ6ZDzGI zTs!MQMvq;Mc&B<9^Ra2?D$pT$lgHtHZEqPB4-EbZd$vS82|x$d$~lhHO$ zh~#RWB^bIh{NFM=7TQjZw;EUdyNq4;3mj45vs@iw+eh4r3~Buz8AI05*wwDfQ1gz5 zX*S57aZcvMY%FDjnT1_iFj9G!1nRUGXouO(Rpz>#cWlexfLnT;S-gQW)f7dyVM;4)mB^o6P86{(0^~TS3b7XI&8*D3H<#XY? zE=1!~qZPSeZd24FPjqjP#M<*)S!NCaA+u3SqG5@h)IO`Trjc)j#g0_~X}4USvsU)W z8p$EiMM(#Y%7jl1=oJOvjeHv(bti$6g?2cKhaZ~}uLGyDm((mQm0#*=KffC3 z4OaXKy{V0$Ue!AwZc`m*FRLij;k{ZiDW3d4e*GjJ;vsXEJQ*X%$PdH5zK611n3cVvCYyS1#n2xvOIf4u8x% zL9D*Q=RtpL3p14+fAZN%3li?#0SX@WZz>-#U+!dwmB?m~hXhFZSi^t=Uo)ko`y`sDEry*874)!q(3=XYHOv8|*|YBBx^6RGA#u zP5KCSt;@?pT%82-oZMs^*5=+dVV1|Q{6Sp_UbRw;k@Oz3%Kl1m5$l`%r>4|)ys}*s zadbLLeYZ@^;D^)t0igu77)~02Y)ImxcG#`oMi$~=nV5B<73zbc@X{=68_(xo`6+g% zw8NQF%xa{ymcG^n>T(i&;3~z2Vx>QQybU?%qV-}m1u+Q^Dmx^F2Jfgw_3>KyIIttdgg|B#~+hp`8x+i!G z#&Iv#mTewB>BvHrd@9BnUzpAoL1=c8TMs$7Dxv&a;G>~t~;6tdCct0>M-j? zNt`he*B%qVGkMWSKyG^No(e9I;$cBkx8lGEfsF&x!fi7dTE?jkVf}N{>!8g2z6CuS>3lZ$A2 zfh-_BK-RS5>jrPOumJ}wr+CN>b@F`q3WwJ?+*Gh!KYP#Byz?ylvYY{JvMRfWwuNI< zK(Z3=7nOL=>ZXOD}%f4Tpt=*%G`a2G@d*aW&d) zUIsTMq$06V^KNN4dz-)w$2q8)dbyC?X-7kNNVNiWf}DH~ zU85Raew`I|jE#eiHE{G)f420s?=;ACOdZmEoC}b1)SFs_>xWM%Muk>aiI8fmTO?M&OBk-*s`68RtWTd` z)_&SQvBD?~gzTmV&vYioJN2hZ-oQqof7#4oZ8qHSwfh3*qT8HxaH$!Po2uQmie4+8 zmj&LIqF7xejaTa$R6tP!5`f52**PV1Yo4SX*`)9A&SMfewai+EU z&#cX?)ZCp!50OWSqpWn{9Q6)*?NVZORhTDoDvxx%hhwE63cG!(7=Rf@2@BjGIr$7GgGWU;82F+L4aV({p{JJ|Y`a*lT>Gg6Tw|8csZ#>7bRtve|h6587Ep3ki(qP=?8Oe-?>d#k_(S-j(ry4iug$k|(i-8qZGElRwd z+Z-t08<-x3j>Fs{9W8Ut2Ir-e_;Ps=k!ebV^l9xlpv+8D-nvF$W|V}b(^gp*Iw$$l zM)fs!>)YFt0`~|!hf;23>k#g$uBa5K4I}8hQ_Ri`M?P!S{1$e(@?M!#`eU{BO*mED zs^VYZt+f?MNoG67wI~scRk_U%Q@?Q?>`k;6pUU%hbt|fs?=_nv(mK7DO4$r6$%Kq> z#!KSIW?R}<4Nk$V9&1|*xlw*Z87#}bns-FmKGWdHh1u*c+t<=R&a)=t?3?hHkc6q%#AE z5T5cIa)(HCm0@QN=tR;9oMpu*pkUj3W#C}(%r;0VZ;^F(6kCByzCj5qaD(b;5eo=k zKtj45&9e0KDVA_42E|LDGF`?cZFte-y#Z@miA|;fD#qLn8}FUVawk82Jk(Gi@_uUf zgj8Bko3W5ki+8e4Z?0>F=65|>ThV3uU0z=0+kf2sC@~5>GE?AI)ZliSxEhj;Z|#by>U64?q`yZcw-kXccc#r@r_S(K_Dow|0EkTciuTj<;5p{Ln(k%Gus#DCyW$BXkZhrg z4iPR&=c)<*98W>RlqqswFEM-H0IXI=y?jgvWx2ZQX_pXJ9P4msNNfAW#^!dYm}Ui= z?J2pXHuLJLInHv{Oz%PP=@w5SIadM3Gegd5ok1B-(~P<^t}@Qyt00BNzGE6<)|J^70pV_Q=DDKzk5y5oT=vrd9S2V zI(CI`W)YiZF^Z1Gh8S@o+lrXZY`agpZq>2e2s}|sb$!vk=^ZN?7WSR1^P7u^A{EwU zQ9z%jZ>714ofSC-l1t)L57mE@^wRM&Lunbe!Wtsuxi)6tKI<$ILE?gzjNO$elwS2w z7s?Oe3Vo^4(9`Gpr~G~YoECC9@-^BK?OYa7!Tm&Yy?t!aYs|~jn_Ovv;$B{Ch=LHL z&HD~GHGH%kJskFveyL^MlkFW%8^Aj@=9)0pGK=$FP0Z7PudG;H{Q^L0I4^1rVlT=) z8lUKtJ49v@B)Tk`1%9>%v3J^g-`s_(#m{rz{%y)}$sYTTGyz+oDb!)m10*dCsAbHD0oDhAb(6iWz;$mjTzu;^l+++#T^Tx<9OMpU`#e`cKJBDC-kDE-uI+dlAiQRx^uux!9q8ZRYHlrpUZu=NxrX_=_;7Tlk#ECT4}hE8rmQEf&Cg1PDBt1Li?W@;Qj-ORy zjA)NkHK`6FDp7%cRNc!3+0`=VvFUz}H0Ej6aW!OC-&~ev3%#iq#k{XMu)Mhl&fJWs zHUBb$_V{FC1a^(-!PHg-{*nBZS^} z2HDZ;X`+d4bLMCAC=(oIMrTo6}$(OorJ;3GTUp%+2tYxo~qQiL>yXvRXpvWI6wcZEzT7|uQ=MrMB4KeW#XOa^MR3h0 zCo#$~Uu>zhLMDwxh5Tx-K&X4!h7@}i|LL^1O`&$l`hx4*p9GllgE`J+vm?W!sDEvsaFXCQKttn?{4YG${@gGdEg?uL;!3{!BCGN9 zNASw(aee9uo3pnnfvF{hYN21LvvVqx4qt%K*GCrYx#$B02vBIXn#6B*z2X&%IW_EQ ziHc$ec?rR<=miN#q;_>xB^8rSpl+R4-V|c<5j*!1{W$7XL8gY<2qbR1m%5>jzAM+OH9aWX%l59K+jct=xfIwneVq@)fymIOh%YWg3x|)`uKEve zeBZj{AlL->sply#|NZZ7RcS4bPi<(D9v`pI|4;zvB1eC(uKbfqoVB7;%T#yURGst& z69f{K&w6T9w9Qt-DbKe<9m5vvs=z3v|7x)+P`Jq$Iu%aIm}ZX3LvZrj;;CPERzgrH zJo!6eVXiqqWcATV=F5i#vzHHBC6VlvwbQV&S}QD}P3iJpPQZm!$6#8nb#Yn1v10*M0-fx$k zjZY=l!)UWcgn&VLauuC3&k-UmE1`Hto)=7QY86!!>Ih3P_ss2d`Br&;+kwG)>)g)i z6%S^m7c>dOYX)yi5(+4Q--LoIapBh8cA%==p!b3V6#$c-`< z813pY^aHj?x zR)n-PZx@j`?x>J-u8Y>@Q)iZmD14h>Ln~`XBySXA>R4gfb^=ny?ioK@^JWx{eDSE7$Qoz>7rX)>A7t=$A`7l|; z-Q!QSAQ#E`^?O`4_`^KD_o*pO*Vz1zWe?a#uSUfc$3cyYGu zb!uwYSOxHYT4W#ygHOAf=>;(`f2(V2^FPS~UW5GwRK8GMu)w=VQqPZskX`5Hb-xu1 zdTyh!{5Ave*qV^`P>&9{NPqjmcEiCBS^Ga&ZtU%$gWwp~~F$C4>OmMLpD+rfPNGw^VgwnFstSxi+f*Vr^Qoe&j@nqVl;sb@JY2 zcWZgC%jn(az~Bh^L*-C+O>vq0r^D1;duy=KEh;}7SF_7Cv*Bb`8i|W0mpwd-BRFHMc%S5**^ z8#x7@woZGcFj@YEGOjAKD>!9<2WGL7(4>cc(zTtP^IM5sQ27pyiBRTiS7JF4q%5|9 zv1rXcFU#MV)1QIT_I4U&a&{s~vcr5?o2fF?j;>6J7Q|{BbX{EJS*I4{%eT9T#m0iy zKvzq~r!rLbsVVaU>V4llYiLMNU?-`Df_jsSWovvM#|vRIV16k`@B6mngd z6vFO4nU3w!*~-iF#RAMh*(`xIckwJ2?vIICP1aHZ?8gj9Boz7RUG-l7g1@*;$nKHM zqPH}Xatb?b|mQim`-5c$uw91BS(jqQhKAv-_ZY$Qx>OOOX z_38v|g}P)hsDRc9a3DIRA?d=Fop{sdVw~oqFM(H~L*HFN>!VQmi8i1hFRv*^zq@-x ze{Gu!4N#I>jyhrXf_%lNtF!;b|L`CG{%?NHCLOJT|Mo9mB1@h5)&PE3IsO61la`h< zNTQ3yPDt52?QTOsc7w^>SR=+}#;tg={G@YJNekzjVXzSYj*N;8<4RRO4jINBP@asN zI4u`tn>I)wJeO-MhoH-_>I?-0i=xt9%KTh=>*R*j?j|9*Pqb+#lzeBtQSF`#Um8N! zNjMZ-qj_07YUL829@~Vedr4_TTYG>EMv}Du&#w^RJdp=aWeZ`-w5vCr<4c}ubOdr5 zXrPibR8Nm-y@Ye$yB1o-rB*i4Hg;3|Lw&Gj&Q`r6+_`#9xqi52rEv+1?D5SY4)pKJ z%&xjXY~N~rTaBT9aGI2AB5dAo-XRYGYn4-jbX?H9T9PkHR;OK9R&_4Jx&lRHvyK?v z{_2E|b+=m4%DvnfJ6QD^dVHZ1h3ktue3j8$mIHtcaAtbj0>IlSqiRjKFt`rItxp(`u) zsvChC!y^+XqGQ( z-)DMbRpAs_tmhYR7Aj(kBfGiS5BuWkoQKtAxG(eWAju(9OX*)V)P&A!7Z-UIAJF8y~h77L3&Z=t>cr?{2F!DhX*sEaU1g$?gGxklLXzcNU|=PN2f{etv`LwaFuB9WBm+Q5`nKteGO+7+Dr~{MSM3m}&!6VcNr)YGSaY_Q< zRWaZKJ~LeDQQ1?TOQ}P7E;55wy?8TFYYfQTn}c0QSYw$2B~)`U9Uzj0bZ0V4Xn~IB#B1cOB+%QD(=d$dC3M!86nb@1{_0-h&xkp$k4D~uX82sNe5wkipmiDC~PD~tr zlg{W@fl0@!tk&C$+xALZMe!_`_u*=nchY?cX;)8get6k*Jlx=b_R!&^v8anR;C!~P=rr|q zz$Jeo#cEwhWw@ zv|Dld21r60g(qrD1092)A_6>LTOixAOnF0oBvtz26hyNW(BG73LzGiWe|q41vyfF)l41 z+fOO6d5qJ~Hc?KdWrOOE*lxgZ+VM1y?%LBMF}8$rWO<9Yr_bGDw7ej{gK$wRClWji ztr~FO%DI%a)-*U7Bpk|(%GWUJqs8_)#=Ug>2?1tXz{rz4%FF{L zWPY8@rA>&4Vd13F}vuP$Ptt*{9MoX3!$gG@-~M4C5!2U!T8xuQ4e1r}gC87x@AT(CH0Z zDrMK$g$JRn6XZRSnR&^uw0;-z-^rT!Chh#|{YW;EL+7u=Mi$6LtLXRoamUuHa=TKa zx4Rlyqio-;dN|uak8VTZC9K9?FTe>M2> z46J>>OORju%TFwT=5_Y4cdX)a}AxfqB)ya zD8!!;sV@uHqF8B3^_}~zi%Buj!()~}n(|g>8bKD<1#QZZthV49;9haooH}QqAb6i& zlO8Cf`+lcbMaBN}KsPP_{1END+v^Q9y|J%iE^R_g=}H^kpWDb#w(p4H+Tuk4cdkYs zWiC#_j#FWS-mUhQnlD))Blf{yvge5@3_&;QGdYLTMzshD8lkJu^PAt$pvN6kGiya; zk1QZk)f?j_y*i0Y0)nb>$xG7gt7BCV)81-I?X_@>T82Y=Ryasnq0ZOl>4zegaCTp4!G75y!4exQA{XH)q5^0{x;Yo)zPiE373O906j30A&Gq^|m|#J<^8^Jd_u{X?)eJh(o@9@`n$ z*(f)sMHVClyCbv512s+?l4^ZMS7#|#vE6~R>us-UH2a-z-}d~42-U*0wo&VB>+vjk zDIr@PysGe~E(%&{NCi!-+OVj5>g6ct(}A@xb1~^~!)*#7UtY;)cbbVOu5cUWb(XiF zz=dy?^>_&(&MjEh?TimfMSH;rLrv$N%#k&^RKQRj#FPv5GC7;d-}4Z+$MU5M-l^WI zY@iJ?xAs=+O{!?77|>Qe!YP6{FT=QjJu77+H?6VBxRG&hZ$SzR4q;=;1g`@RkL2EsdBmn9dDS$m=DaY8S=M=TfA1xx0~XwDw1; z*L>*p^W6unWgq~F85VUS-`iWRpux?hF?=kmQpzv~w@11QX)el|Iko24>#m$_J9**( z9p}=<%d$Zfd6X39Rz7FY%2N|h=St*3j@B3CZse*9)9|s1d{f=C544m@u@>`e$p*@E zQQo_p<<2@YrrT}h4nnRBpjKxF@ZV-tN)gFRFyQGuPLrPA<@tqVuKga%TtVpB{I`)* z@x*O-g39Rh1g&gpx379=SjFxa%vC!Zw$kd`kB1_s`mQ{zOcWx5rPRnKeFauRUw>Z| zU8?RZHdN`tX+$&0GwmdRCTWsmi#8CpW$o?;i?3fXvZ%>h}K4Ve>>3Rm+fH%3UzAYM>gcm2Kj(47K8J zxqy`V=29|yYi`)Zk{8H7?Gn)B)1k1){X<~t!+jgW%yMlIDU{E9o=@5twtyXCI)zlG zV=qWXLT7b9)#DL44l=u4H`@_Wsr(e%a2fL(W^PRDc6D>P%Rd7T{qEys+Kq*pn?70b zR-*r&8o~U@k=-b_W6y?MnjL9@eLHR)aN!;WK$kiI){ze9QY@wScjP5HuZp?%9-yJk z$O8Mm?&&`E6kzDv!*evJ^YizImkdi7Ls6uTv`~%-AdxbN! z>^VKyuv?E==s_xwIBU!AX^)IkT6?pD{o zTH%E-IZY@a%ujU4vh}pl2$v)_Cuzdxa+FckB4m_PU3J0!$;dXdu|=}Z8Il>8f403} zC6ifGV$ZOL>`+!5Brkf;d$U;svoR0MSjxo%v{!(RUS>^Ww!;Dq%$#g8ES!7J%zQWP z*tU(Yl%!qOB)iHYuBOV5*S1lTfFUBQS*KQ9BjXzw_Qmn}!p!J4`xpqzc54EDiEW|YPDJM)H69e)wp+oPs*<*o-z`nnJ{T}cqb~XTT?0^+%XK$l`WAx;+@MNx*cd#5Dv!T}}>~Tc#hB*rFkQ z-(d#NtU+6j>Dr`PW4n$gR5hy@y070K6rm7+^W?o|PbG}b51f|DHA?EZyW>KBu^G^U zKzT{-h2nQw16K6WlXJ8>**3UgNy>=fEe}@n$oEA{1gfM8SXC;Ru6Yqy0dsNd>JQ8X zPoSL8Qj2G2?pn)*U?rPC>mdvzWodZ?HeliaF_fd{Spca8*Rxxhrq3R?Qtiy0cu8h7 zdLzEceK~Zh0IKM`JQqb~e(qV3TJy1aGtdAy&}))PKYrZjM;gJT zb>`D!f+}!g%;QK;MP{Qc_txjvek4iayvpD0HAB%Q>X_$8_jICP*u-n8H??gRFPArD zN!l)Qd-;_Nm#&OMHC)MFz7>)}O%DP14Hcql*)r?cNoT}gli6$#vRc~QDn427T;;og zoMarEGEL}E+~vvfG1)1v5^Y?lc4J>zs>Lb9zFh_-U{W+KA}Jhd31|VnNqK2hsCPB* z)axBQuFs@E!$A4Q{wa&@$9)6>;=ncD-q%V*E$9z__!JfJf9F5?FaGrF-PAlvIluX8 zxC7e&DC-k3qzwJI&bx?N(0y`6!x2!eBdV_X>d8)O1mXLvbadY)%}X|n_Ap}UneUm( zWZ{X^vg$C=1BG4#iVWsP;_zfpWWv|)L9L^nB?*I7vjr{qtp-i(Iif8DMYLAgS7tTy zDsNI36tmoK!KxGn%EY6;kFpM(4;3U%hy>(Kt)jG)j`q@0s*{zQVzCsX`T5gLE=K4- zC6fKr+uSLWF{Q!f*d`h*JwB_nvLke4Ka_4P)o$*E z8FoN?&%t6b!@FusM^d{%(R62BL!%}FbJ#25C6KJi%Gmf9^CeqGwc304$y^u7=~NNc5JFcb|QJ3>{pGCRJlwn1JdZ&euGCs|a z6F8A4t|KVaSmQ$?2h;#H?*r+XSx=*Z_mTd>6SO0GHtX7;{Ec(yUKSriS1`*Yc6fz> z%0O6UlfQ}2x0bvW*rGJDrd8Rtk#KY#62eDyKG8LSm0~fKAmEz!%#cyH0hQl#lUrqA zL5f~O&oefPw|e{WLvmm-n1{~DLxoB5fWSjdU)U9j5{si3`ObBngEh$X96^fTUX-zH zTiz#CaM{aElhBtV*1qz?*O85<4g9p4pA!L3-LR5<2jCm^D(q9DKwiG$)5na*d1d1e zL#g3KR6BQUt|i~D{zEP;PfFxBzqx5oxU(D(E>CVBoU}sbNXnK>Wa?U9I;b!C2H1vd zEmdnO#m_*$0Lp>B^7aLe39@`%P|_Yuc$A%K@`z)am{jHR(2T{*D4jYl8h{gfT6AK3 z4hTCIaF--N3cPfuGxVQ=n%TCwwvQ+rA68(J#Nm$HoNNPVANvhzv%j1U9?Ix=yF@9 zpBFjG?6=Y_u@*{-wP_O8^#gUt^~rtttj%AV^fN?SM4&C)6WB_Knbi==&SOP_-tLhZ z3M$k;_s`)9rD`mksr#q>uU`WaJ%6XB?92DZhf;(lRAuLfa@LA5g^sMqL*>AqX~FdL zM(8vgm}+C@pR&5to z`I3TWfK2O3wOSw#M^-|I$K>VPMw?1Scp}3v4^yjXX__M=N!^o%N$=g8%aFre(1F&6 zM)fU!H<-`Q-@o6tO-QT8UhW_4W`0m3*-YIDJBOh_&SZjOGs+IVDoR>OX>$lUs-Z7F zBmEj0uU??63psYL>5T36p;*0Q*4&O2Cr-qvjGqD`5Eivn+nUm+ypCF@^R|8mc>44T)dF0Xi)^1t{qa||kjW_%jGw;r>P7*7{?1n}kv|dK{uD)aE1z|N(xQzeVR+!A} zaqpelX7w_V{X6DyWhd^fQG2zg$UoOk%l3^b@hcf6Xjn3d6qY{N$ayoGY%!nK&E7`l z)|xuh(o1Y}1Chq@?>HFUDIR2c99^E0TA%0&p9As;1Uc*-=3<=mMLK$YM+Ix2b+5!f z#!*T&&y|=(n#yO*)_a`A<}xRH-OBEAFCB`q5DOm3r#KaxNX`YAS7F2k{0v2RR&yFc zX>#lGn~5RoJ0|dvPqHv@mczyO+G$>YA{Q;T9aq$ir@e>zn%AmX&6QV>Bw{|wfUSlb zG9U8N+cf^G2V6vaAHes^kNZSx_kn)iiVF|GItxhAGcW@)sCNAmaItTcHgw^ekkzr4 zR?8%}rH8mJSW0G^Rr?9y&UdhxOJ~5PJv?LLxvXQNE~77-qpO2!i^D9#UA@CbkCpRy zX}!r4!WKRSsCzEwg-7EJXwW)Yxw1u@Sg=BzI=$f=0YR_e=Z!kRPrCaDD`VpQqyl(M4H`bdNHci z_%)9$ZQXhOoaaK zKAL*_x)kM-nVyg&F}>G%Ra*0Wr;`{xmvcn(@>g~f_n=?|sKe|vjJLO0i)UfDFv7yn z=nJ5hk}UdIOIz|_bgbgh;%LrnuQk6?l4DJ7ZZF%J`0`?7TM+b6Z<71l?)t>o3(#@s ztF)2L#!%Kaz4>*eKrAXZ1IcMuM=8u~C}_i-wir|p%!Rf0lK})3vL$2Bb5f{vpqpEQ zcYsXcm#=q!{>$h8{J;9=fBxlbytj3AA_{<7lte4B%R;w6)w!zR2)7p(fAjl~8Kcl{ zU>w+HwAUbu4N>Pt0wFcV(*PyhV~Pv?cbfz;H$zZ17Ht1LR@6%8so92!KvK_o=ykW<)Hq>1jz;Qk({-u=63U$TZVHFm>I>C402Hzdyl#UT28Jyl@<(_ zDW_3_=Zx%A?#3SF)K%Dd=Pk3FW<8_8hdYjXi!O3frw!o2D7(w_FJ)pC5Z!J#PcIMB z)-V!!sn)$k!PL5~T95pq?M)bZW}Q~lODfk7ZS``CHgJDT2>|nDN~_bH8L1cHpoz1O zP}`j3y2`Wrh^K}VR5zp3L=@X}4#1X;3wjd!A5{oep)oW{`?G#*>?6~)>%+{hNr)Bc z#zswYz-7qFww7;)Rm|M5H5f>17Ac)l1OL$gxA$d$7l=gN77B~jtpTZ1WcRM!Iel7( z!DViN*t*6{`KOvwTAK8;wyr2^Vmq1)woqVx4<@_NN%h&Z*j_ZGLuS0k@`jv{GCqfzS1M;G=Fx`eL}$&y zTGF5f#jY?r=q9_FLoA@YWMXn{HilPUJkzKj=pVI*SUTI$W*xojtm})OKc>kN4aKC~ zZG#mhd(oj%4x$6wA{Xm116z2oGy*AOxoi6dx~7~DtF>h-WRa0lfE--LZT!IzOVtRD z1bj3CbW3U|WWYl$-}d_RiTbY3 znGpeWNV`d&(wLHfn7CRZ-B#_Mzmm4@o9ZUYKoL?gucqj2d98_jp@FYK~)jI9bF(s7L%6wM(9hW^J~_qo_ni%y5d!qp~-8D+J0>I)$WElF#% zPD*p;9$BeBLM$k);tt)y4M+Fd_am4QY$gM2oD*%zWL_F*Y!>uUXw_s$7Q3GPR3cpU z?P3~Kp0>c1{rAMxl01e1>M4xyB_6B6rlFK$l4BVzm|3TiHt#~_1@*f19vXX$Oqod~ zG&$kSGE(c^in7tAm@Ae^k7Q5Zs7$u&vK@D>lpL0!lUA9Jfyf;5so;1Ux?tf-br7)5 zHBxrmJfb+xg*jIVeKo)oQ3}+cWZY+G zN(qWcn3~yoXdSt229*)0D11QqG# z0ev}ci~5hxQXb91A=UZtoaPb?hxFZDNb-ziMwm`;0O#c(H-%A=BQIGp(Xhx;h|*b> zsT=B6D9mc~>$7$NcdsD`^kQ7d>^MHz63`^m2`x1sq<7ddLzdKqwRmzE*=N_D-{DoT zQ>85Rqzu9(iygp&-91SHb!O6yuu-uop!~pM+_z2M!&3-C_c0^!CjbhY>Uc6($=Ui8 zY*SdplWd5z-6WA7B6mLZ)U@F9YunqCBvF=b&xWCf??{qkDf5o?Z~`Q1${harr%ypW zV!l)vh*`M4$v?^F4NZdw*15jCZ2Z&1Iw=Gwn={F&tJBx4N{lg3Q(+_3=x?sBZf|db zJ>@8)J4uN8=xfR!a-2p(S?j$jiJMV|h@PveSb0;!LNx|KI8Ov$2tTz1jgEW%AmKbC zudp&-^j@kNUPG(><47b^m%~`yHD$TB$}3U)l53U;oA@t95Wo9$o3P=o(Ay!mnb({X zl4&@0E?T>>y`TY5DJtzN4@#}JILs8|YmAy-~yLFH5? zx{!2VD~K@D25YuGd3WLWa;nPejpYTe8tftXB1HnXp>cjC^Lmm%m5Ig@)f_?F&>=3G z->45wmW(GNHLiksYp#vFU$a)l-@RC8QO)+jY~4;g-FryfnVLz5GS6KZcI_PSJ-XsO zGn$DFU`qU<>%@VcTv7lOk?&l!5oh2_N!bKN2GY$-!-linr!iRdJDQT6ZjZ5Pq#NY9kA@I7nC1o^hzddi;}cTN6(WFsB2JpH1Xf2auujcLKlm==|_V zLKf*jJ9*c~CV@(UXZ`YmFa>fkNASNWQGA>F&_f%cX@sr%Gd-*?o9W=~hSh7vpRAV~ zxKK}3xu~w(gUt$&5eb|vti(;M2PeQZ6%H<=q_0kC_MP@XoFIUs5yQn!N3*%5%RR%z zgjJD~2Fs4^iS>xQK$<$K09_la0|Fg_GWmK$&0fcdzr4C1_Wh2!Gpb89KEc;7Uq65T z_VDn~J@_c&>DYAONC)_tw)Y{DRR5(gzF;C5JHjQKp${#{(s^Uwq}5>bci1ytn?9II zbD)*#((-wv1N{YRjLipFWy1!VL9ovO39VHNY?W}0ly%^Vwx+G8?`-cXaKoMQK-=5S z4p~Tgg)wt*Hx%!fhmNydAm!;a2U&Tt(uJniNfL5CX2*j(kERl-gmxk5Hy-+^W()rc z*gq-{>ZUAXy0J?UYbIKeJ$B->-U| zwq%jR$AJhlwohWa@|8D~!%V(g(%Y8VZ`0y$)Vk6NqXwMLdYQ3N+B&Df`~pMEGsx;# zvDdbh7+P!;cc0}c33JngprU5`x(NAuo~Yn!@05I`Jrmcp$+2nn6k~G~z*-Nrs8^SC z`=vOBYU4)B`DL|`Ys^#YROz<+KF1`kNW#z1uP%1w9k13|`>K-Z&NYv6U~UlZ89{fj z$kFxykXD5;Q18vKjjrn<2q~UGTL7`omj25{2N5I`q?t-MQ8Yc$Oh!r7Av)dCkH1QUw&~ZWnfSrqkZEyH{Fs-=R|rM-8swsb3VRDn zzm+9}u8-}-8!HM?SVu=bj_bE)VG>ZD#%V6=FbS?Hs=$> zK;A<)*?E$T!&CIG8alaV`^n~9hRp_?5&`5TUede7jk6DHkMnovne^%F4@uoR-#KUU(&1C7A!9G!p@J8e zt!pJa(Vl7PAl?9CK%KvbNJdEcWT|M%4VX}piDSPctpaQ;WsIhdmxdBoNXME!kF#3l zNxkCP706JxC|_Oi{F3S^SWE3ORdN%O;TE5}1`K^M)|4gFFUD3vImS{upKrd%O>Lll zUdCqaGJ&*ZHCX?xJQv+hHR`nnJ7TupiN-y4TwDkS)y@MS+=4Y};_S&~ajc+%#!4e-sqi8X2eq#96eKYLHo( zDS5<$Oz?_Way}RywEK*hW*dKJh|74C6Hg^2bDbZ zFpdABpzLR?vJwPwk8oQtR`KgBrqc@gKa~aK#duTh4&J6;_y3P`G5W;E4x})F)v{KqsoyF`%sO_rb8lXZ zM$B{>Ic?pdthe+}l-t5YsH>{2@Ehd^nGO{$Tz+u4{Zb!_Ace)zZu*MKTgQQ7ZhKX~ zweLnqD+Pl>Hi^x7?9`bw2Q4_F(XM2NgS}Dn3oB*t_p9UnTv@&QR6X%SP8ftJ1}8sj zvfWab@{_ZRvyZp87ncn&WWq+hAqn;svn^v#wtv7`S<|NxWkn?x?N8i3h z89OCQy6W?#VhR^@op{E!3tee6Viq>73vObAri@JjL93zbUs+VDUx~U_@;N(T9+wjD z!QZ{X=}?K{>>WC%_UKsKw9Z&a^@8QLk4>kJAI_E}6!rdbtRXwoC>1Ynp>hJ1q0dWFNrQIKgx)b}9y{o*28nDq56D(p-!1D<9q}Z+|Ih#H|H1$CzxNMc ze|(QHuAEJ@d-?=5gSts8a4s`3;@?Y)12=s&j4W5rG+}vmD6oy@=P<%nq;Q{G#-E({+VZRxNSLYo4kJkY$ZE4U?)Hp4w;{?IDRMc1Z#Yp8H!+71WpITGHP+YW4pfjd>P>)lMqY0 z(;P9MC?d(8Xupm*F~FW0UPvLey;;RALp#>XjmCU(etA<#vdl468u({cw5+t_`+^S9X~UQ2+Gw6u{mK+iu(JPsTd*TOP#4&K(Mjy$u2CfC3yVrbCuatsKeM zt?N`~NNvzuzY)Z)r=m~gw%oC@?AOI3a`9??w(OuV;+|&YPzkqfHJGWHcLaLSd?_Px zy#_Haepf4$Ybd6J7Y*M;p&Mm)hC{@LE=nFV08^i+--{wn@)iTeP4!ic#z<&ppW^H> zecTG?lN_RdZl9^W_@qx-XW+L(_;ic!<4_ZTqCa#nSpK7Kc6pKLzz#!2&JBBdSOcG~ z%GSZPC^bK)|71M5eivGJ^`%kJ3o=+m9{1CgO6^(uc3hRiHK2FAvYp&@n_QRGqQZS! zS7O%WauRb11=bx`Gt?fq;$^WhF!xUBJ}pT`CP!M?9Xz{vja)kFC$Dy;ED+blZeAp# zn#ZS~TzK)ae-!c;^02)MK=qdKB8*w!QCm{H`cUtQ244l0lE-Fg+k^Hx~^}70tPO2n{rB%G5j6ysL zQuuQ7F$I#5v=xDfo77E(ay^;-SKP+*h25StXKo%Iug_|CW?NCz_eJjU36A$meC1l} z(g&($(#|_)nYHN}8?F##@NL(s3b*<%EPxeC<~zo@NKOB2+q*HIDot1{4BmyYSr0X9 zLmhS)dcZVC*(D-Yi?Darn{lqi_J)*TB1^p1#jKbRS}KzlMzr4S0Sj+03&W0JazIS3 z+8fJ8PMm|j2BxEFE4FA2o>4_6bk*!l-P`&el?x@UYDK)>$&qNzpPS6VE|28Tc@$j$ zh7d0P=CMs^>?`Di&tyn#pw-hUMMm+9G?NZdjtpr$&`EY&#;O&_XkJ>>w#L8RSRGA2 zl*(qIz&{zO=Ptx_at(3i>pWdu+39>jbv0MmY>ArzG!XkDJLkDny`{Ekv=aH)ayALc z4X4C9O}S6+JOy&(TT?DP0v~04rd&zmt%Gy9M|Yz^x4^Dm#BY^Cu=G?F6;V-l3+Qq~ zosPW902&iTr0Q)T2W$DAQiXYxjstS4k~R7=1~=7jH?f?}h9eZ%SyBP=;If@hrHCez zmyYJ*Q;yF7;APJ{d!TA(=cO8IW|rsT`}L*50kwLqT(VHJaiE9B>gIkv9vq z
    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νP+-ZYdE^9fU5=`BId4SW88y7ci5y}HU3w9& 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

    H2L-pp^WEs7 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

  1. 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∈H-c*2x;rQ!NGA-=vz|!9M*)NaQOQJilayBi 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
  2. 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%0Dn_N~o^T)YL~d~0XWf`4{;j7Y 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

    @ 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%0ATrfDF{b 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

    H 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≥i@)?4N1D&8iqK_#^!`=0;P z!)t6N`^i5duP+B2c`f_4@qHZPa{3*uhA@ofm7n7s@=V9*7OW2;9=G|;#VvOg_J;>f z&5VsOiKw2j?`kq9Ek!E1FS%8O8e^k^YOK)sjr1H|Vr$r^9>09?F0q=y4!4{oJMSModYA*-^9Fe8b7q z@vNpbgy$q^ZsS1?gj;3O85fCZ0D8 zLGgPxOuT^I;iq4G{iDyn9GhzgZVocOV6R0f-Cpankg)`cDP|_E_2hgE0*Ep||MTqe z15_-=5&d{=ZS~V{e}cUilK%7a>%+s-gX0rr83(4ZcYJViy8HGJi_Ggchp*loe)DQ? z=k4*Ew?`=IuXpx$-X889oxj^VMd75@hO1&_qOd>u**DL34yEcFp}-$SVlXz0znD08 z6;;8yN=0Elfjb{~5SRhF)y~fT?jELqYx;Q`JrFZo2jy6+8+8^0M9j)~fVy49za+;O zd@l4l=#VaNMAr?&8maDwMB-Q-nz!+7>KQW6)V+qF-)fufeguy}brs(!y+BI`g2r z+J{JvIlhVgZhajypqN}Z2%ds30Ix8X@^c47#-Ob*9EAriEt{lTKo5)~X!y1k(dWk9KY)BOM`ppY6?91O2>&{E@3 zlwr+IvUixI?AA*=Z#ptNm}W;~X(I#AbWCgMwWODj=uJoP4S51&HPL{b36o{)Hs_je zVVcMXvlLm&8;z9w`qpST4J9j9H%8UdZIs~5^en=pn!cKHVlDtZM6IF=>uo(L=}nP0 zEv$5VLKp`lA4d7{jh1YV(qaUphca(6v0~#Gx&>p7ng&*zpsJmDbzX=)rg@)#wrV*;iYss$-xXw%8~HG$+z`t%A8PHzNZp)mAY`XfDjW3{U!_f2T3 zmsXcs?>$_3w6*eRdv$ZQhrwtSa_jYFy7zE}PTnCrZKb<}ok-@PuG~`eWcoZ^8X;Hq z`D8_uHQ%aQ$vadN`6a!Pev2L&#iq^^6BHP8Lv)&m9Rk@rey|Z|etZjDjCd3wb!PNU zaGT5)m8H!rOe|tvuC#KgcI{O|BaroRqVd!1Gs!89x@mF5yg=hyDpE@i20ivi=7{8S zIPM7YFOa85^GuH+zM<7YS9;uSw)vv;V|lFw4dM*IEi8lsm`gBY`kw&?uCaxk~|3RmPH>6+KFopWWi|HE1ZC3(41rn58f&a`w17&-a59 zOlR~>8qynAm2fIQ>mFvnZ=L3@F0C`HBqdD__;;qQn^=5t0<=1a<-{l7f z)0H5j7=u!bD$BdJKz>TYr}OB1ACIl8VAFhupw^|era{umrrHBH^KqS2D&F)EfE~OsXtjlgP`Bj^OBxl??~@jM1q(E!dL1zhw%=!~=$0M8I}8AWE9y z!nIwiuL*NYFRkpA$h)0o;<*KV((JC_kBbYW%r{`A$5=qjqQWP2&yP_~SUj=-X-lU| zejJ60IMb8ewrV?$D63a9MzrM1sJh%#1{#$RvCoKxc30*q%Emr0B(0RvppMin zbCt*odIl0?gN)MNUU+|v@hSt&D;xtlBor}w}sZ1%O^RrW2FLa@x zRQwrCU)numM;cchL0OUYPEEy@!Br3|8Q0kl!Cy)FmLq0gx(&nt*(<}-LkU<%0TRov zu8jD+s@6ea!SLls$EDFi8Okmj7++v_VF-B|BK zP(dcLwRMPu6gWnX*fj`-u=;eGbVTBP(8N}h3zqaWB6Qr^8sb%^3sSvQ1f?x`Pbfa4 zE@e(g2ru>c@x$-@`nT!7bekkW7o5aaxd8MW*{;e0%gI4mPfJRb&PW?vM|!LJok(g(9sC?m5{@ri(h2pIbbhlGiip@Sj>RdnYC zDKPuHkugxQs3y~Y;-Q zFf)T82snu^;dkI8aF49}+}?~6u4`Mq3PL$38&APrap2R;8cO$Qpb|(NWxmy5HXLgRDSIe%jG;Rer0 z{Zo9B+=(Xk;Ox$^d!grCa>66}fHb8V9vgE;Ru;)AZbWK6o;I?EOgbsd!PN}XTSL7m9w7AfPkRSQ-082kj_MDX?GN+ zfpWEXLfSh;$2@y)`-7(scpFLs;^w`_56Py_@s+-~`I{|S7|GBCXy{B6%+=YMNb~8; zW;Yup^*E~Z@yW&6*(H{7c+2S3bl9zpA;>IV;EJyg~a@wwB3H*?0qH zd#aCVh-rc;YuI0g0f!L+l;+L;0qLfAZ z;VFegLwW!4=F^93>ubxb=B`rrlbSQ65h`VG9Aa9dsJe&ruciKAz;U@!CK~DHD%E-y z@tgnBo-s^QT@YV<3GMmODgCqC6Y>s>gL$voD0*~$3_V;t5@jI|RjmI*DD0sgu@RC9Ss^NqRj;R$E`ALA!K-9;>?Y(=Yd6 zo~CEftld89F)6^i$__pddZ^0|di9!iP@V}W=6G{stpiF_sh|kVS?*x@WW3h`zK1e0UNL~m18TzepJ(+7T3E0c1zbU9I3`0bgor;j?2E-6k&Fa#O#7HArVgx%Qw?~Hq9a^WOD4gU-wI32za-r2!!pWkkJ7`2FaS}a?V6+n@tgzMJ z`JhaB$8bLfp*_sW-2= zo&xA;owmFYf-aI;Ua+Qazs=}mJ>rkS;4&;|eYEKfSsD?&>x^~uOl-=rUo%}f?~@wL z2qUNT4dTXBAp)SZ%)Mxy7Al03c{&STQx+Emwm1$+D2yQ1H4yyT*QeY(Z z->S+T@TCV2hfMgmlo70X{H?$4~7rc zNsZrG0a!F>Zwx#1|CP=n`)hryNb2^3K?`d!{XBoPQoALo->^>S0W@Qgb0tuGHkn5Q z6qW&q={xuZk9G~(z$v}_$m2()8j>nYT>Oe0IX%5VA_%;e3ppqT=y1;UI-Jk!An8HE zE1O+Iiw&nc5k>0x*(I|N$hku;0RpyV7YuXu5g?c4dSCmq|L}-gD z7#woKwi68#rjjbSC4;hP5h7uUUK;hgPGiJgi7BZM&Jw%q<_yjvdNK!MWSNB;*9n|c zj4;SVfGGD0!X*-(aj+#Td=>j$IB-J2kmFHp0y~NY#)pj*FPA&qG>;C4Q4Xfc^OXyu zRR3ch9PSy$t73<%K{7?rvNo0L3+BHB?-<|Y^4|-dnz?;FW8Nom$?Xa}t5)b^feIeS z*$N|hhh^3`4wR|jiJ}-3wa{Dn*EL`A!RtuL&y|>?yh7TVtuSA>oY4<`eu+%<(c&KW zr73)@aQUKc7~#A&&xN#z**C9K;$`ZrWDzxeB(3Hn=`MK+e|fJ$Rg<;|0wQhUTF`%X zuuqs_n9zk62P7H(9s8>%=58Dgk<2!RLs@?qJ06Xy=;*zwH}8~O(L5|~qyc0Ax5FXm z>lQ{?zZIy0rb82=)QA;XGY+yw!rUF!5cGgYPhLD?Trml$rI=V8f!~N>D+hh@{ls|I zDcKLeJqLoD@OY1Do5R>OdXk%(roMIv30qi!vNj|%CGE>`Z%%H~Z7&Zf;l!8| zTH%hS03)!m28|+t!+^jiH=IrbXA|}(R2}16Eu#`y*i_ootrCrS!j?OoA9R1CyP!E_ zO=Iu!=4$utyWQR0>zi||5LXu$XD6pq!=K{Lp@cEBvO~i}F-X_)k1a)OlMNZTd+>Il>wsIkYFHLt=2Di;k|wUey<% z2>=d6#luRlJm^t;!q3*$#4bt~mkQBtt*@c};J_A&M7bs^UZJ~~B~WLc!FRYm7}Jc` zbq{99kEF$<8tJ#;H#9y%-Cpayp-^Fo3LJxh25S;k&*#QkpI8s(0(=L!q^LcFttJn* z#1mf9jF12ildZDkP6*mG^S_JQP#T?}L@Q&TVBl(DLs61kJPRmI9IsMx?&O{xstQZw zZeBsMXjTbBgNsRKG#f^QjN`O~tY%(ibfPv-tf&~^>ma+4h^j2Sj;^c^pm`$5azy87 z(=C&lge}JWOv{l6GV@eD&`e%*Yji2x@eT8!js+G3W^RV>Yo*)=4?a;RoZ{)_*E{xa zCJiTQX5@;uj``JN2thZHa31FIs0vID6FW6&Ty=w*^oO6qEAM&HglecpJ1AQhH`KWu z<01g+c7oHfXVf<=P+xACy!&;)mj+ZOPb+@*+!)rEjKcJDZi_W|h;I7-bM+ofvSitj zURG*RT0PaT)hKWYfLstDmztpF8jLimze}Sq?vlU)gPj2eBYIjsS-L7Kv$9h1bN7gA z1x8ori;N6$clA(l z1H?EyxV*mmmw)+l3?CFJRxmKF*4b21GWrDIW;tot7oPKOtX1!DZx`xf-WC-+A!a2H zCgmy6p2(jz2??zkBBc0u+{Z+6?DaxLve-;ftMF}NiUBD7)z5$V%?}^es(%Gc@s5W4 zuTu|Lf7VO&Rpj6A-`+qQg{JhQ&t5)1KJ1!Jf(kms9w2*i2g>T#ub+SV>IK1TKlfvP zsA0;F=O;&C9`WZ`)Ku*;gp83F;}X$l+~3*v6sB-9o?-w(65ztu&kw)&eb)2kcdYdRtB%Cy4COz8q5tTfqDE+z;?><-uw>s&_! z?R}6+P*7{aZ?^~ul96cG-{0@;Y-2@|xn>6!!k!3y2{h|-i^hfkoPCJBU>$BY;r%^5 z-Uf)#HE|3SgP5mYzQFv|V>u_wIHB(x7UrlY02{We=SO>VA#6NcGXy22wGVTWEUEMm zW>Rj2F-w#^7V_BPBnF6QT6%c`MKuN!i;&<28rP;7UaJzxji+lY?c_%^K!?UCiINSD z2OQADYW?x-?(z=asL9*2+qY-eA1?3TyuW(;@d^|6hw~ezvJdBXS2vTJF)8z>^yi?x zrCGPprkPYXvEQ?U9D(2KaBuJQUgBQ<_pPwA>Ztt*sBLT6zhR@YvA*)=A z5xQ}p883yq2AM}lC_@41X|W(D5YK_M66d&tJ529qP(&?3XFG*dL;X>IGoy!OqJY~? zJxrxVLcU~N5nb-2QglKsI`gF>zMUpDU_D2{ZF6KzG1e5LgT>qJ#N4c> zM&yYeT75Mc@yyS?ZX2$VY?xV3c}hgPWYe8a7<59tnea$qaY2>Z^{!%&`psc58~l9@ zPqwURxKiZX5KZ2S5oD#Ql_2gdN4kl>9I;3JN027|=q87tgbugqiZWUD)MJ4Z5v_cB zFns-d?|5$rs))~{-QKgq(Pu9YUp?D2yPj+9P?4Rs! zbDR;uov}2X9Bg9%I-=1K{^H@leik?eC6j!fJeS5?^^mh|HlWHPM_M=*L2>|8UgH_5 zn(4=5{GAf*nYJ7_9$#)NoqNU|FqP?gJvQ9Q4Le^D6PZC`F{SFMXl}}MiBVJXqGIz} zELWkAGDATJRgJoS5ZcTZ8pknaAzwOSC%u+l$cylH2$#&N48m};yQfw(v7v;ZNcMut zZZ(-qE%(o3`QT|X4BLCmO_Ijdh)}kGIJWH4p@dbmGdcqm68)Jn5Ee_%i$8}YHi(g* z{p8F4^?&;BfBfSgVf|rg9E^6DBoj!*g}g&;Pzi7H)8yO+8pTvmj2hNv{i)63BR}wt zK@0^GR!d{X-GqcTI$Tu3s1uc{?l!_I}nR);@ zPvY}=rYbV8St9d8*p}W>h-`C7bpsubCyH|lv9U@OJV>JJvn8M^F-;*O%uD(Hl(iyP zspG$Vq011@Rqn}_Cp7ZGk@^`m)m%kZR8Tznu0INsyC$YC<*HvWUjk6_x9It~IsfId z*!6NGZ5R7Z!4~;)ZI#u`$NAxDz*??L7-@n2@LhKBf*D~i&L%b;C>XH{7g&g6Dyv^1 z$*$|V)Op&jpiNTb0FBD|QGTiyNu7l5-didpZIP==J!&V3F0T`HMMQ3tj4-L0 zLT{E=j%kbYLoiJGNr81AB;;|BDghR9a{BDq^A{xDV8-L>2-B%4i+FXYTI$YyDO3}w z#OT{WYCSp)Ha?XZdz2P$1hbxeDEhCNEn~!sbc`C@BU?1L2-fUyg^d_o8tYF1k>#ab zKlSz`x^SIliKoSUXKZo-iI;yM$-2sZRI_mVciU%kQM!#%XKD;9CobGeJY(Z3z1%3K<_m8b0Jy&~~&e@cRY%~dq9TfSn_MS-yU!IHZ4BdW@1 zefil)HA0S~_YaeMbj{gpa(8>fB1oyi6IY1CoX(@NR!4QG>eBrZ3&z*LFbkkAnVVw0 zjp#{Hlg=Ylbcz{t8h$GQ&7gqO_zoFUBO&ex*W*c>N6)Pu@zCSA!kg3r6v(pSyl-AD}wvB=0z$3PoYH;5R+ zgPbvgON0&bKDVgxU)qU-!e)!H7bB}J%Lfiu(%?7kaGIa=4z83GYAc0KO3u_7+ zqu*Dy{;bqqHny5b+t?WkiIP=9Wx$moIpS!@Vr_geowlG2ZM^QHi{d_Ree!`|0P_4_ zsWyK}az}_y1wp{^>dYYFQcUc^pPL?0@9Ir`H z9Y9m1)mIsk?9QRt9A`Kh@0JvwdSX0(?27^V@DTQ&pa1K>Pk3Ksc(#7egS#y*l@Qac z429z`B^jH|;q>^3)J~XCt)^D~qR9W5#UkbU5|a}f#^Oge>lHt4iH4b~%CZ&In_TuN zl_;eD@~{8)!`U@Ia|LJ-CNaD8b!V0{f{A!5`ac@r`^$UUpPW;F@RLt5+yv~8WUc|V zg)(x_g!wpo;E!i{R1Sbyfh)uWLvnQfz95JCmoICgY}cef7;JZ99p>M#xTfgIYWL)m&L6o8A+GblL4CjA!nGUhVm zsW

    z`0K6()v)CPmlL7PxH?7(?kX^jT0V4)ylIAhSVN{xVNuwCm$|v7^2KtKl=39 zr!SAdN;+eN(&j|yjl7X9^0s@In=gI9t0TiM9Gpp~3fo{-2QH=nk(B5R$=d>6>O1TQ z;|bP$oAqbR%qS^X1eyxart31(4w%Ilh)%Gi@z2JFuX5#^-B-}4DXQSUrlm$DqLu zC5T^dsNE+2k4EB#6(q_;*7V$P6*(T?NXgZTUw0JyLr5|O-*i1ix5Hy=IBI0$js&fW ztV7DCa|VHVagM0AL#xDfI+;puMyz!9%mqRh7D?uFII8bNYYlhM;_8;%X8?`IA1-d* zVLZCN`{BbSHY3jYcuBU_3k*q^BQI~qV>D95`YASoVJ$}8MpNFEZjWl>J53{|XSvAw z=KbN7-Ci_UCuv6L1Ibay)?!s)w&pN@1HJE>n;{XIhYJ&dJUv{aIcg~B;^qc%V7{>h zAE~Ti4M;MB#AXSfQs;XWiwj4<nUAC5J?XHl)L0Y35J#WQAeT{kE;O z!!n6V*i+OkgB|@)y}c#rlrS`!ht{O<3@c7x?c=Hu$)lVdi?)ktLXl$LFnHnPrOAjI z01Zvq)Pm$$vpHC91Mq;d)Kh+4$jQ`Ouvhfno{6gwmJQ(QZA@3MPVR(>%ysnPfdrl| z^wk8iV%Z^xl23Q4-tqqEcwd2LNGKSRc86U+Lq||q6Y04(LRKOR*t5j`AHftRvpj~Nd762^k!C>>+zDawJw+Suue67A^`ol;u6d3)Dw_wP` zE9Ew3E)azqHmQK60})s|MMM@?t#$^Lv~2>gSfdx9`l;e%?^!MNl^KQOdfaT05O?kw zr6oC2LhonsI{Hc@iQzk49beAWDX9~VB%b0YpTGWJ{>Q)g{EN@voLBtBkQz|OTGyf7 zA;gJBzbX8$*{u5OyAMAlX1v;?~77I=%%3e%|+%fmD2|R#<1s`0%!J?yP%R@`dO36yb3uh-H zEIW$haD`U@5X1cH+ZvA_1Ewoj!PQM{e!s3bPGkjIf25{i{! zUFA5}$&m^RACT4mlA|r$?;J1Kp|oJEHde8pl&Ut4JguM9Lo2z@YfrL1^XP)y4vkT6 zRrC0$bz%rhyXVET&+&Yw>iLrQh<7)jn?iVzMvI{)0SNgm{#A~qW5jS3&4HbqUtT2j z7DfXL=)6V@Riy^_NdKy8DK%WMV7VI?rpeR9Vbo6uSVpUhRGzB|H#doWfjNXVb-2Cv zhR3Ea|W{Ho*!!!!-aq^k<>!Q z#{Wx|n-2=$hgUAg7}OFQl{zXQd>*^9(I-Sb32yJzX%RRc<4#W%O`ySwBAm7#BASjCj-FnghRVgU*}4}}SS2?1wa4-J{9 ztlNl_lI5WzFHMp)aV9H;sl68yQM@gM+L&o|<0%wCPF-V_0~7_$jd4fS7)Fu={1C7e zu2yY|eL#c_Rf=%0Mkxn);%rKf0mKO*yOj#pue>LZ;FHW0e(g1J%I`mZeEa?_d_RZ; zcQ-e8x3_53c1~0rw9)*7I0z^&lv2r*;n8Xfg#iwketkq&rMWW_DSNP>g>;4@1{cjt z>}6VIN^seNlH0QfZamW(?`2dhZ;E9~$O1Yu_je}XCP40rM8A#MPOL_->1~<99t?!( zvKQDz_V%{hEpspf``<=zZv_mCi&$%}O+~EKedlolA!X2U0JB~Cpvq=A8{l7((^Fcc zcC_Ys?Nz4JvuyLA0phzN2v8`vr(jA-0Iw#K0TF{07sA%z%-qU#;xK*$dTBDw&Ni=< zUYq=saJR3nA`g%yduoH$7Gt>jg`_lIjk}-^K=nc=-rJQaYScHtdspO-9OpSwDy5}R zg(9uM7WLx!J~EsM;Uqi;sqdW#P!UeV0pmCq(EW9cgxBL3(_j1+M!A|=Xd z8n!IieNeOkWbucgN0Q-W;kjx{N!+G${+8H;m%{$6W*7-p>^H@R-NYx(j{gj4q{Ny` z!c7x=d-}hIB(-cQg^f<4S%`gJmG2aZcI2wFt2+eJV24q4k-Z~@GiG@)DL-tkPmU~2 zMouMV!Of_o)xvXRqnl@*t#z2}bMdqDAq@GL(B_=NZtk z2>2S`jqmPmudlDq&MwZ*&)>iQ_~FCZyZ7(kzWeZwzxVn(!x3=-)e18!AvB6Vpub<7 zU0$4D;aPt1?AiPCn}7AMe?u;I0|w|b!Ua$^YzQ&ax9pc?x})Biqgss?0Y_9A$^*0D zSKqw-;lssDOX-G)q+Mn=IZ+ZhzHl0PUyhT5Mz;+>*_0+qLy2Ol}~e==`}opeWD8r#Y#y%1qT z!R7=3R%qBh@Y_aHghX`R7?l#dBh&d}jd}@Obm=*#xlyJzmMA73Iws2j@Dqnj3b3h$ z=*s9%ec=UAoDN_>vA?%X!Mmm>avG!S;9!8!hiM0_0{sEsMPJNBLk7B64UkIm3iRA( zC^_ehh9WWSw!sSJ_=Y8b)rkhvoIh+wj$|P?IT&J*g?)fQ$$L{Oll!QYOrUlih=YaU z#h~@z;Hyq*wbY&Gc(QuAT6)}P%0BD$jJZo-&_{8f10uGoq zT@i2F`Stz9&Hcv|pCh0Y5$2 z=S8UuIRcmJgoA-rt01Z8=2u}HQ1c;*Nb0oVb}!^Uj&f~2+PLq2qN$j(=Z{=fQB3p# zG#PW2P#5uDZ{}!BEsRJT8PYti%J}WvoUZU$GDa; zWm8v&M}&N>!#xem?3zs}sXzEhKy|Y|tGZsCf&h}0Hv&bV;8s0^(@7uV3kSJ-(4;Gi zn>-|bX`Sp*N~xWtJ5Ker1(E3Ps&T47w(6A0vZ*YI{Vuj1LIHU;7X#v&Q|SiVQyi1G zD-@f`O$J|X!_3I)%Y5X(JYK~5e^Q*<^Xc-7Nt&zjI-G!qDxo5@bkjW3lre}H&hd`q z1D=H}Vhw7uGaMl}g87qXI9H9vtcdL?%2L-AwQ}~5=>OqgolfYe;>M;vG(`OrHn~>y zFoTRt#Pj86ul|?+`M>}4lh^WuHDDTIUTgCpM}9@wD**CB;!?pJa)5J+J*aT^_?N=L z95TB`t+H48JUfK|CtxDJlyr$X$NFB=I|bdcPBEmJTgu=_p1MyYs@Qi5 zRL3Xjvo=lSP^v1|s=^8=$CL-57pY83PcwGq-CI_|eR9dl%}%j{ln3~DL2|iq{56kr z9fXp}dBp05_Gu-5Sd1nd*Kpt2#__+Lq*!yV=TAH$^sdh2)Lq51RIJhU6qo=T@+^WE2m=DU$ zvy+nwhg421%tTC#XdujO&tHCWcyiQ3C>ibS?TcXmQ6)8&N2P;h=HZSRRlZj&arU=2 zN)VW`Q%{u=0#uRnPzho#v0FSUcAe|r8D~5!_y$*=P39X1e%8T$h}v4>6A8w{L}FrB zK#IJ%ht z#kmukOMkH2A8s3y!UC@un&Z6Jcs%~*hj&nK;wV5eV>V7I85PU{8YQ=M0ylx;vqv>y zJ+TFSE$V$m*Y_yNE*@aJm*)-@VW-=Zo0PQc3Ziqe74iBnWIpJb@ig|jbR~15tuX6k z46=BK4v_hlecn?rct@jjoc+qg*aC9$s}-26IUP&|_%oF4zNpAva#4f;Xkg^F1!8O#j01B|A?GC#wM3SH zXL;AY(+1H?xI29@95BFgC2xUN=qrGZ2^xA1jw_16IVBpRQbIeCJ4CAVN_HryD3oQ) zSm3F&G3k38q1q9x_?7N~C!V3TcOWs|JLx_%CmE25@0bi-3*_7#+ zL?QS=lMS(InW6|Y5CtRy&cPmfu5N%xMeqoeyDy&YV}Lpl6K%U=Iz^ti@ksUv&@ka; z_i{|{YOD{RmEM?IrCt@tES^9$A zDAQ~93TJher(zGPr}~O(&tJ0o2Wy;1)1AX*Zd{K>N<%74!jvouF84T>!;0*nA;K%2h{ z6zB5pp4l!#%Q;_^o;nt{NCQc1pQSJp&n(}~W zCwo8r;!_d`CdiydV2nVN)2_s@ND65s%iPkamvQAX)j&o8s`nP)!|naY^BYV+gOW ziUo^vaBDav0 zZ6|JLt+YLHLBO+I3(jlo zSmux)c$=j0s8`Yk)@PQ7G?|H za;8i1vtSRB+X2MV&bGjH+e5+d2q+nVUFr*ztoqbwwM1k#+92;_>^5uueWBi86gL*Y}L z9Zkv6_{0u^@ln4jsA|nmHjX)S-;@^?k9FKy{DL4F7PgkdDw(Vjc>W+cMA1J+TmNU_H+xKb~8as``2x)Dr z3LmjmB616cr&lkIIYdYA85c^`2$EygXExqS7MOkqu_m%b;+_`HCBea@Xd&b(sY9@? zVb)ntI&%)i-mYuK^kr76#GRIYw-Ihigq6UrKw3CNqC8n96 z>9Ns*)FsB4*=1_ZAtoZ8D2p0}QAD5!gO;RjqP0d_&Jc>PgPe^02<3z+j*?K} zaxET?WX)ZwdWlm0AO7OM{o?b_)*GsBL+BT+?Z8F#utcvexXeE%(IA=Doc@;o~RrF#)%JDomw12+Vl3y`4MJ&_|Pf4E2hP8$%Kv|#} z5$^aUI;!5vimZz2$Hmr>4A`-t1Z!P5Z>louatc#mPd=e~efIJqxuD{>NwKqWVT2O? z5`PiFB?4R_$MHu(?_Cr>EOncMRsFcAfq8F=0V~H7YT-MllIiCqe|PFR&rL3#lsR`x zt0g&1UeHH!RqCp~Q3_bNazZ0*vJYOz=j1gDIdnQni5yI9PzjIH33;N=FIc0rrW-i> zA(}|JOWdF9Q}^^WF?*$K0rvPORZDb(AQUR=NKMETs7?x>lp-9-2`OAmn1$CVrAi24 z>C7p6UbECvW&qVdxi*#RzL!}zfkjN6BAa9$9qxcIH(z6F!S}8C_7jQZs<3IreZEu( z&rIo%J(&(?%Kk8)%Jd_YB1gESPP>$3-dhRXVn1wO_LWOaVlQSO?7^|s@V1sQ~sh2xOdH|;LZ7Mw>k78dKTTZ2UYLV`+E4mX^ zqh@63l5A3|90wF{$jS&s4kguk)+q_H8wrb40EOfPnRoqT zx}qMO4FOLeabeV5x9@yy8_@(%5)g2Sq2rB$EkT-Gh*?RahS+=Lp1DXRlmlKMc@IIJ zj=$Zsz{_xWLrOZ>?kkdFzQG+wC%C%2x0uDEFQ}0NloWY^RBl7SMoG%#?WDpV1HM>l zTPL>*RtB$+C>V1}C%wxZ0wo42B8D4|<^2O`?@0ART6ZYF+68G|#JUZE&&4I_vQWXftA>&(mq?a)CZUfJnt7tDGL~=|!!+wd8VJARS4ATFa06=u|Sia#CwGYfE0s zCJc5ckBEWQZ~ar@O0#z>>|XS2bwA%BSwb4cFJhA-oh^PZyOCGYxl}L3#uLO}MqYu? zme{ajYtH1Wt^B0@nwUAqDN(J!n}sd(W1bVl8e>i$U_Kkop4!2_1Mr9aHT$T9Qy>#S z2spA@Oo3}6wmSv#qsE`Lnz*WD_DZ-Ru6)~KJm+wvUQH4-9JY9NTBBk4~tx3dfiQoGF+8sQLEe_!3bH80<~Uvs(NWK`l<^dg{t}5_&(c}rT-Vr`5ZM3aU;X_1A3jh6v9M6Wkc;!a z4tdkH0fm{7x=T+Z$sL9v7@+%_2jrsU&I}*VR~t_SLcN9er_fC<9Pk%*>V(d5L=A1W zRA~VT*l~(sK`lgsu>Zrmv%mWJ-z}6zEt;6_!$3}k0Zh+J=fk2YAvb{{mREama`2Nc zUa4449O;}ci~}+9#+4fiPKsAdb!~;UYIW_z>tIiN1PA^!y{BGVvQ4~x{rZ=``u*Si z`WuiD!WX$=?0H>@8<>^Ooq=CbSoFTj1_6D0y9#-sVy~`l-n_rS07Qpngb`ST#R~OR z3t2@9(Xm4WV8W2HJz7bN^fDgLFaV(~(`m6q{^(PJN-@Pq4G;ET2D@59b7(D<>YU{Z z&G|vGS^kgklf0Qy{5;l-%d!J0Jt3|LgLLN?7uUc0<{kLlx%=?x;SP2y?Du;IJDa6y zlY62Mqi`X>sHK{G)uhCG4M12ZCzLRotYS?3+rts@xzsJccDhmw0a?h@X{EQ-(Q)Je zI-zisM$0zal#J7W`H4vb9FY3|N}d%NwbwzOa#G8NiMFFnAC=8>3n&>{Gq_HXY|sR} zJCFqhX=>r>AD$ipIAZaoRiJ`B*xw(SV2M}!L8lroEq zk!17u4Cp&p6F8H&V|eZ;n5jeXegO}b3}7_#Lu4X*U4 zxVxMrUiKsU?QFq&2uMzUKtQGUhEIdaAYNK>BQmG5eRS18$bqcF3iI!Ybs8tj z$V5$s1&B-v%62M`1_``~b&~?g_NJLi@6T_-$y!G>q7%14Wm4fM-i7^TO<^h7W+Bsr ze5R&qXhN5e#Tl;@ zAU3mSkL5OMFy*Je+LG3c3LU0#ipitH%9hLvSs>e{hY;VtK_xthnGxT7CQ~LO?y(RW z)|jrIY~)Fh-)?J7qS!7o7DNdUNO;t3qOX)uhhgKFp+Y`;_53gX`G5807hi5s5`m{c z25&DkgqDozqWVUDs(79CUwu5PeFVM&7>V{9U6nn5#(I*!$Z#cIogH5u14N@3%bvm| z^4OY7L|2A1^o;-6gG1%upOHVPE+v2CST+z@_5tFJ>TdSd<2}D>64LSSQz8 zp$oAH+03&-F_3qRQ6`k(g-DpKka`woneyVL>NL9Z=EV)G&y+bKd-kr>ckpR>gcyC>ymG#^00!_f{vh?>*gaK&Oh zi8^F!SJ<**RrfC`q?uV2fUVgD)X&VB4rMVW(D(AKC4ld@l_4>IASxwROGBYiQB=45@oWQUJBC7 zksR93A*mDb2FoiDG$_v>?d+p8n;}RGCMJ9fyX5~GfA#fuxQ3YG{LnR0ovU}{;4GwI zj*1{gOloFDMQu)Pw%NL^%yLFt3P7YN62p-YP{dMcEf)!u6(`JP1Q+Ozu5BKL$C8$a zl`es;$!cfyz)kQZ4EtSpI*IMW`WD2n8qJ}b49)AlFylG4VS!%EBTygr6Z zjlyem@foLm@=btg(rRdrZqI8CfUxtkk9f*oygEW#JUcrBBZDXt8+QWk@?X>y?xR{_ zryg02;BjnKNq|qm724nxzr8Mul{T|dnm>+#s7%yq2uf+huG66KjU9eWwjg=~a#?zE zr!T`CzYT{HI;B;%YfAE_9!7+nd_L_M__tWKZJ$q05GlRM6W<@>1EiPwM&h3mF>txjNeQf`&98M5Kr%*~cY=b#TM z1}AcyVi5gEixY>&g~Bw+B|Ah=rUJ+Jv-^9&<>=CM&6!kjeB@z<3T=v-C`2ueLF=Lrs#ouCVt}nUz1Lc7>>2ONN7NWtz#C ze0ZuY)c!df!%*h`q%jTvJU0)BtPy-r7!f#*%w}T{e+d5UZ!HCub3#JO1X)hpU^ZV+*zQ#HsIw z_Mk{vmE=p5Rkgz-%!3v7Tn*t^fMq-)aSllYm58{WNzlzpn{7>8Em{bi(1eCc1lua+ z>W&nEIfXIuoo*R-G@BP3&t1t7pIMnQ2H({0<9R+r-TJ@(-@m@R8E43u)nd^#IeJCu zSi2m;n8Q0#OK4@xho?se8T*0?dJC*9uUtGv!2y{~rjqQQCYp3sxVk&BHIULPlrepN zXLs+bZ+`gYuYR{OXH$}+2Th6UBqxNkEFo-j*}F3mb}>ajRdM{;t7ly+vHd}^&S}&$ zX5;Kk){@A%sd;u;hA0H`DLk@eEw(j8o{Pw5oW@Xn{plzF3jEKvZ*c{O?>u#j7QHi) z${q&;H%LCUUYFzjeUUotP-eyOo?nvTyWuFTgFO*}jm(-VWQei%TG>@;i&OCm=(EQPdMyk!ttk$hc{7Qy;S;Sc6E-~tg0Zg!A?+xv zQ>OPQQ{A4Ik2!9w;488CGe*Mo&fU6*C0s)FGboXQLiWgOG18UiOLm1da)pdOUg)WH zgS9&Zk?{&V0~v{0U?vAbO+x@CVuEB5`0nEsoX3azd#8uHmJ^o*D&h^~lUELtmuzun zTXTL!nZ6;aUDuHOxg`*yT)_<)x;wx^v?Dg94$azdB5x{9%lT5O! z4jo;dA&Cj&K@gA)prMKJLCTtcJH4CEF0Sv$l7~HLJdwfZezv%q%x-R{{Q59gJ~b8! zu4Vt`e#Xv1@LPON64=(&>LcDjuvE`a53sLN144QND>kE_D0(#!3Urc8cD=6lHT}jz z=rEw*0h1d(5tW?AB!knA`NbsJ-A!_ynvQ14B^+%l^SCMYTCVVrF2ef9fN}@g$m-4F zC9|XELyc5KP@5)X%HRUi`Dtt)?C;WDc_SJ+G7j<>rZMN3U2x-`?GhI4!bF^W=xZ4_ z#PZC(loUS2!U;h>tv9!6i;FW>@l|Jq=Op_r7xLRXgg%p&UTMAx_#l2rtpq&2Eza$z z#}pzY0`%J0WzEbd7*3KGCd!FkcW}7RNt3%N4S)@W>4|ll7nU(=rq|S4)gh&nUr9tS)s?^4Kt<31}2bW@4uCCcp_v^Myis9)f>){o+KUcJI|PxSGqb}JO&%0|)VFtl zl3%#sJ`zpvlwc)WAScmP_Hd1cPd@segLEtT~?n3qWE76o!2Js~d{{9!K1`IZv$M(mdq_I}S| z{-_%(d`!iXRZJwlPmWe3+{rCcvX7;lbs(PHl}{76`u-8HN|(@ysoSR(v=oaIOMbM1 z2Z{y4pOq?-<0afoy{=$YHg$HRy2UdX%X9fG{kGIC|75VIPJ%5;$J4*Aho=!{p~7Wg z5(14Ti(O%5u3J_%=yUC^Ci435s?$+e=iAM=wHaVF+SObC2>Cb6DzO zqEDLKDdMGDHkAcOZXWo-|DC1eWHJfd3Z%Gaq?*w;QxY6-4yovF;Q; z-d3ypu#`3bgV%ZqqZE;8?NG3osL9GcP%Xe)C1=L z6pz(LaXoTHa(uwxK-zM@X>l-fZCnU4=(I!zq;MN?NGT*eb3W@4r4CY+g`B5w8pqmJ zD@jOjbA16X5DNz#@ZGz&mzOsbEVQ-7c*^~GTCv-+Q_|~jTF$X2b6LiIR15oBw3&J* zkfIvl$N3dAR|S7de451Qo}4;z*o^S1snRJcY(8kFj_Tu3Bb-4})r75(W5yVVg^ICJ zY&@T=*AHWwRgilgyb#vgXl<{;J=#kmNbqI2SXLc_4i;K5!$zdEAa)Tq*};JZ6yJF_ zmTj>!G#Ovq#QaeaIo1kBw+Uu#zjR;Xwa`fn3vA)`(XseKWtyxsTe}B4ThRuscT*2! zxA0QMPJ$Fxo;QO3T0BhVaTJk*mmZp^rm6BqX;~LrrW~FdJ~Q2NDWi-&KtDk{;%F3j z`V6WKI_GLZ&s--z!^-TQ&bNUOFT5Z9$WpZgLfB8ec$?nRR>8t~-0g;NFq5I_pE%92 zhYGSVeT55=b5y!a`>Zcl_U@mC9*=W=~hbE-Tj0j?eFd!AM6QCA!5%8BpXW>TReIZLJSZKrMKJC1T^c)&Ysn$F*B$$ z%XKinj8<$+tUkZ|hu{6`H{Z}N9AeW6;1QKrD&i2A{nluAu#q;n{CF`QKP=jWXekBQ z0e7(KBnOyjP@d00@@n#5SL&1%Hy{G__DP;s!g^ZeQA zzxb3wz# zUU0-(WM*aI5IH`Z%);cwMCy3OX0#igb$&Izyt(HQ$2-GMpB+6r-m`KpQud6Xz!D8E zmsNuGC`&+uAUnb(Im9i-X(id8NoRe6@++zRV#r|H!$kV#-Pvz`|Mq75kSU_uQusG) zZoLjLB|TctvTTSkXg-s!!yUr?x?YQPMJ66dtgmji*><-ln)5ZML)_-kz7iBv#6WEm z@7vtNG;1+yFwfBx_P>3{v7{TVFNJyFpQ0EIm}I(T+^Kss@HBUZ)z{UPNT z2}7b*HKQ?6I5s#)GnM>_GzRv>!Ft5p=`+}ZFonfO($w2gOxa?%JM1!wqHgioZCf10 z0s=5xZpLPl=VG3V{ur*AuBS%{U3Mx{tMUDNct$cQVGvsYAo7!KD{Ut}qYN}l%QjZ| zPiQ9k8$}x_bh^(DpOqRS+#*+LVouo9WTHS}+l=foSuL>#-9J3ujvsEPkI0-?;8SvNj*b7kK9+&FeEL`kwgo1n zTlp~Be1yM(x zkV?0R&hSy>(>9JwtuUDfl=AF;CQKjF+Cs_;&CC3T0hK!B&R)}7abPn#G?fU{rsW@m z3|!z$&XHT-06NSn!r(Tjen!6uuu~qhxprl>b;gQ#3u(71caP(r=|MAfGDd!qjLPmC zhc80BY)0xyvh`wWf7Ba!MQ8DrmPsQV5imhVx&@|F$@&bNW5A0)@QL06)Lf$}IhQqElnUXXwD- z4(F?GwwUxMb}0xvuUk2$?9qh(JxRT4Ua4cYaWcpdB3V+HkN)|8^I!eZAO8_fLew{2 zyf@fkzKO^c#WX0*cypgZS_(x@l-SI4jat7i6ucZSW*|vNQD!+3(Qpf`@c#`M4NF5>=$HYhP=T7Yv&Wjre27q%zhozzDCR;le$l0qDm+AcSU z5NSJ30sEvmo*IKJP!(HD>O3XPyT^xL3e?KaoR_?8#h8_?FbBEVrPoj!apBf|DJwc( z!hu|upHJ_&9?YhtDKCuX?C`xH`U}>*2J-OSvK2F84(fdiag491OQx-$v8qd$4su~= zheO4c@Q1XgAtGL!cJm2%X!w><5VPG1K% z*aftfUncS;UlBI}9+=TtDJR3BpTA9wp~-6-qtS>;9vb+F?@_2yX92sV%=Y=qXFEiK za7qP=s%zNvDd$^|I4T~E<)lH}msJ`A53qDC>r7RA?GO1=f_C^JWbfIg1}2kx<~xCP z5l}oi2HKgCED<_}0dG29U{f@blRrl1>5~Y3dzZ6KQn=<*ARy(|o{h(MU;X|&$O2ip zL=7X~kZ@WCBF|HKw$&yK8ovMnG!`ljIA=8YfM6Vk2eR5>v*;cpNQF@dni?gAjeWt_1(Qc_Tx`_tzK=Y^GG&H2C_#DngmJ9VIwp)!P&q|HrliaBH#8YU zmsQ&c9g#kadK8$Q1j{gpLb8LnW**-_9TmWyP-)KO0E4pS_gxshMo**i)%R4MMrY7P z0z>PgzD%0Cg+e4uwT*-HsPWyDyQTG+Po*}X&gwpoR14J^n&-Ip8I)ceWi+J1F}*Re zar5#D7Myw}bZoolcQWrq{*iFPeax2>h8^S1*fg;RY@6I(iM@@}LZW3&`Nky)D9E%E zEJg^zDuNrqxQv+N&x~WdOMddAnS5lynpLDW1#;_6t;bfJCAE7iYg`>hT}Sm+(6*KR zKI-H8%UalymCiCo)|?0}6|6DtuG~ilA`8`ygevMbJ+X4Jp@`7i$VU;lb( z$Wo>YCMC*IUVL zQc=%j03$Qt?*6uB75A+8YqPG!TG8=XV~0{*kEiIXoOXJ&^X2C+pld;)us5fgj@>td z>}$s^?7K9Bo#8Wrt#dIuK~j?TYCh*zZLHATM#v+>g{iqmWga;D-M8-`Q>KrDMoeZy zv|nU}gOgp(qyK@z>kT^`TFy;X3tI>k!i;@DiY$Oa%=r^c19$DwYEqiO* zNEQtJZr8>PxKgyRo`S4oz;6oc5#$9U1*~PEx=ZLWaZf@m4Mi$sn+~X%0i%?6A?c7X zn{(VwLiZ4-!W%WDGE1?gepIDij@icd6FT7D!FIazXrv?qG&BfA77I)$>INHyqbiNM z6GIHQyYLNs^Y-HEe$EWbTKZ4_jnDt+r=Klmun>sS2tsl43SgK8#|TWc9i{HxNGEnMbSl)CMW? z3E&!GAoB=58IPK>z{qoo=U%&6gD?%NMW^2~%2~3fcWG)LHI}`xRI>{bCUX9PO0o~8A*L}R6oZn8)ZzgBglgqp5 z^}T+*xV;B(bTfIxT0}_N9dM*ag^4q^9-O*&VNph+lOYSRK(XIeH<$4!IROy8k-@d9 z+GA;tZ3W^JUd$fHR2>JHp=1&@TAbXabSm~8D9mlOqG6-eJ z;AF>GA(W^A5+;hwFC3`x&l@L!LZ{-wWK+WmCAXf30Uj7Cgx(ZpAG`bTK8d%Su0df` z5IO5+RW?D?2GL?@Jo8G<^dUKd^-#4S!J2~$s_wwK1EZT!6=)PZ%Z_fxEt~2o$RHX- zadZ^Uq7TE^?9PvfcXFHbjOCUPuc`!yX7#M0wQ42Z&jdr}dcdk~A5@>(d_?Bwh{F)H z)X0RyC}!VM5$E&V)_?n7{b&E|pZzn4M49@QQXrWE_PAdF98sK~;#q(zTi8UA|j72_T zWw|!}1YA(v$frgn4h|yaqnkyXE6L_@L5D+yjd(Bjrqa3Lq;!WS1`XhP+GD7gufP@)t-~u^c@e9ohI= zL5E7PSK+OAa#h7Gm1|>UjVF^U5Fl9ynQR#Lp1O2N1)A_zDbc>9av1`3W)s?a zxe{&J_TC|9<6x4dMKXrGu4c1-c>n(FS6_XHXuGf%v_(n93MWpJ+W4&KGaibcfbU7- z&J=B%zMgEZ9|rU-wgq?{~-twAd;l9f17(FWO z)2vg`bHoOhMp`OFJXz_IB7h1^VzNL0Sh);9i(_A8ZOI-LZLP1hTm3a|cItsO&J5^! z=)yF7%9>YDNp z(IlP##cl2MZDZB=w)+S1`k^U^@gwMN#l}w;EYp;LgRHakaU+r>_t5u+x?MJ6&{Am) z*D~$*n#Up5uOVD8HbmS;hAktO(H%?_BF{PgIxZoZhz7HIJ1!j26rw@#(^P&e^lA-K z9!;_{W}J|b^SU@l!*$cPR6}97Id=}NFPg>NIZTleDLLbo<`&YViqc|$NU)Tr%GMb= zn8ZKl_)qFdgd~%~1_adgdMfZ#Sckd1qRkRjQ%z&1=94kb0tuUS#SKEC>ME$!q#aq9 z0mTYGb)^DCFx7rL2}5mzaz{-j^{l~9<9{od@l&4uOy)YQos!s8=Y;Dpwn@5oB86Qc z4dZ>X{AJnTYgUJl_>|*p#rjjgMk$64WtA^KXmgpo_T^A`WOyS{a<Dp;nOzaq)FsRl|G-oG<|qT*xGn3loE0> z`*&D{ZpE6){2*)5cmj9E)iwW4`2XS(v?9Xhl*NnVW>>`xJ|X_=-G|HY3sZa^M8QOx z>V<}aQl1nwiUB8JexjN_dHI}V!Bh#y9q*>KY!yBzt29}}lgMT5QAQUERV9Nik?Fb0 zHCEADhk=1E+f@peea81+{`D`vdv_LSBf2H^&~C}M%JoC#VCoVw$<1evtG6HTfTQhh z4}bc_>;3I*cVorS%{aQW;OU8Iu?qaOA)Z<#1(rVsy?Qd^4~>^u*b7AM*JxR7(@skb z`{MZtA<;=URsgaX)I4+kumsLwcCf}GT%y`G?plJ(qHSJWkC~=ko$ixv95Wm} z&?7#^oOU2Q5(7*qn{XWxpq5<=Ol)xX2~5->R@3t7A+Lwrc(ZQlV>L@_Igcj@?*o+#>24^<@IE3*zS zOD{P--si%rtLvSeZ5DA7Gqn4yhX=72GdnV7;Q#`h7Sd7-x4b1>PGAC%;CL=i1ocDg zSg%9E0r|X)NVg)~Z$AP?OCMBA$P9gP_i#%kOP^f+?DLmD`|=fO?T`zsw6`TW*!B@{ zBLe_8M^`+6qVC1&Gf*$>FekACefX%~gPn@-B47z^=?yw+X{!CXt?LAjfJq!-32AMfZpAnaR)dhDO?h zrLU=SdI)_<EGMHY(F#mN=;Fl9(+7AZcoMfL zyeR5g3Hk}zoq^44Ozm~~y0I(TsW3xb*CObbriwd-Sa&04BoxMmgehcWQKODHm54(H z(opq&)m9rt_F%LW;{YQE+T+QD>RpN50B=0CMh6 zEzn6kNV1)C2e6zl*xMMvx&_=3Hymqm6%(EdYm(!L zTYheVH0h0UJZI+hQ{p@*-wNSQF(M>lD#xdp$I^UJ$O zkj>+AJfGY@^N7{&r$C(o&oZFIH&l_tDyM;$R*N{xXCS*zuB@`~5wx@*>t$R2`5&spSrH^nHqK-Mh9y%h<3q&9~~V(J3V@KicdkL6_OR0 zn`gFjSjf;vNnVx?<2|=#ahcXfigA!ncZsJKtEw$rMJ78aI~Su~sZQU8+}?ecD&`E zie07fVz3*pdl2sl?a6PZU(xAuf>o&>m_PWY=`ru3Ki6$uJj~i0h*>9#S{@N?KW=#s zNH#&fAMWq(Zm%#ppc5kkAep5+slb%k)Blpakc^hb&1-Pqj!M#tR383^QY}N{IQ<~%DYn? zNd>6PP4UIM5?B-v2L-=E#*)o~Hq;$p1k_T>QeuQ=Vh|pU=m}q-h>e%>Pi|sT3B{&) z798Nb7;O(7KP5YU2ff+>cy4WJAbOp4w7zhPcsL88EWZ#dY5bE7o8^LC?G7~0-`}IW z-GW|fcN^E&mlu~;wtDCu#n2y~!ta#6kYg{^x-I11bqgExY)UocsZmNs&Y(++{tLWbZa2TAm#O@6Ru8jU`4nz`_zQ zkqwj*zSUltlc@^3trY0a{S69sqzs#vBJf1`%@7t5dcelhwn_G1kvoV_p}RCW5n6HE z_KvR8#>XDYZG&K>n(QUR_QSstRp}3Oqhvg>4_KC_P!ceB(4sfy!Vigl#~!BS5Ky%m z1<(oXg)3dL(%ELJiqO@Q3j*;JC#qB4aI!s?&Y_eT+rC$S&J4~7=Wq-P5lO{|ir~x} z=}d$6`XZCw+c5-Q;2?Uji;XLrJNTvv>=!4i>z0-aQ_Ys>V1t!j#>-M%1)eKH8>E*F zy=d0p5Jj14I#^&;UFyGL8&%F@f!>jVaKmyb_k%`(za8kFd;qKqG5g|cYqM#OD^TpC5zGDV>wnWX{U@IlgQi0RikJn z-|~+go*On_U{^f{NQxgu+6A_u2PMs!qBz~$hy#S&RX4Zyw|C>KyYa`fE0SuFl9}9A z-@keP^>^RDeSiLF_@R9XtrQG*CoM$_Qh=bt!cm>jam-DF!SK^pFSjL{N&*i`$T8P4 zhH|FI1%Ms-x;>dUf}^B8m?F0L)TA9k5KA3y{m28!s?N=ij}Os_{_1aj@%HS>9a1*X zrSle{sSW|EI`fMi8Ew+Te8fk;SYc=R(dVBaf!pqEc#-Qez8n+!hvLA_QQ=5iir+_t5CUt#3XV&)IUPBb(&dhX`n1hnNSa6$~OGQQlt28x+J&LYU z((fiWws?!hnW89Hj@o}i^oi;%GZ<4)^ayuU`X~A^C&)J@k5pT6-z{^Mm~CCBHS9i@ zz0mqP;sJipWW1qkT5?mc*m~(o6y5~7G(kTI(xE$HkL7XLj4*?7=H2Z?s9q-trN;@R z4Hb^?9rh^ns8boax`PhZ1bX_~>0ZD5 zBPH^r)Kz1|II^~xk4`~sktQ?&oaITRiJe_g(*kdfiKlDYUtZ=>o$!Xj9|1RN+1zF- zDJ^BrHrtR^D{B;wu$V!S?B}ROYjg(+3Y)%we*4=-;^q&TmI|OfyKxLV2jwPsO{4i_ zWS04wNT9jqzp1&~fF&Z9!>+?06BPR#CxQvV<4(XL&jMbqG{zgO=KQXMUT^G0ljkoP zx7Pt`sX(VnETL1%rF;3=72%eCnh`_>rB+Q9JthRSX9X8dZ#C=CcwX1+0 zTZni`<_*pc!#5U~_#p(_4-i;RCA;m1J>}rijhgH*kfY;;-kSlGXf>I_?Z%UYL)u5a z+nq?)uM-=uoa!a^YJ@dlV>8i?jbxvaf zGG~=?vC{;!bW9Dj#cU=IiES<$&uq*NkGvbUA_gr5SlO4tG(_N~Q|PO|xa-@g1z@ae zKL$NRk<1UanpY9^)WX8}CIq3Of_WK(B8pDD1|=|*DFHjuF(%^~1>h|62tIHQ!p)24 z$28JnF6h*aT{BA+KpGV9!qa)&!nheH40dZ%-1UT+=OEX9{`%Gb@IU+oSX1YB z=Hnq}Qllvy1Ivg?) zgGwfpn2pj3v95)|#|PK3U(~GFY_5FoRKa5PAaVh#_bs-qf*gsu#%WLZiTK^;`%c9| zQ7+tiYC_VVE7=zo2{^_O|1U5n)NRMdN2f1e?wy|E-&#J-ug)*t1LQb6yBm)+XRM5Zt4$&%#zNvK!erZ#38(p8A1i<7u$zfl76V9zVs(NEbcV4OVixuv>=|V&gnikXINnpp8-k#U-d!^Sk^5_yNR^ljQ=VA+H zsu-$rliVln?%3TDhQm%*S{8pI9}U+}k`$|g>Zg<>bR{_#|LC!dOpv~aR5H>L@U4vU zGkEl1nHb+a+>gOhKiuEV9_}&lXvs%pwd`vrRGjd>q4^|A>|BCD_&J46^cv!(Kn%V9 z{?Uo(4j(4mQ+@{-2c7y0ZDn#tOw&Jn_5H1I8Qril&!&P}u%SHj048Df4HA^yM41)i zD|Y6o1X-}pyz00EZX=@%b1#=5@h-J$P)LC{lh{JY4%*$DN8XzG*-L;Vkt*@oDuLO6 zq7>NA$6UQwa+&vsVbJmlEqXe=9M;VonUH3Obf2@tL9J@Eh zz1H*=H-36)uz?A)La7Wbh!4l88KX?a+baJmd(lEXC368`O;N^73@PSXfCuy=3>G20 zQ*wTD)8Iiu6BV<@Oi(GF#`5?|2bDJc?;Rhl)l8&Dvcqkg;6I% zJ8Thc*%#*7c|y6sv`tGPzZOoKV`e3-L<`gsB(t#cDI9>yfJ)qtXBFtOVZJBRf-;hE z4pR=n8?AoCc8Vg6IVo0QgNrqYlX{MJ_{=wt!Gz%SZ&eE+dJmi%*gsNcqtQoHHnKd9s^|^m;9|0kg{v zbp&VR?hrT@vWK1N^l(h}VoK+4DI6YxmkhAfq$-Ji8Ua8fQ<q(T+{VS#gB?5|ydE zS=2L<$W)lD4dpQ%UfiY9JsA;rn0fKQAW`e~_e4X%D6{9Fhx93AU`I9q%8J}g<+H`n zk{lfVi0*2fSM6}}5kB;-OxpUjhLL8!P~#OiZDf_F(4K6$u&g8n9$Q2sKUsePLD#2g zm-az-k9J~`4*3d%#Fy!PcgiC!GQ;hN0CVYU@1RKeUyD7WKN zESX-NgM!Zx&a#ft1V}Nu!vFKHe(~YrHf_(X5ZbvAP#%lD30b#1r;!|e{_%3m(){e? z=+l?a=r9S~Lyt(#zLg*CM^HZ^kp=9--~EFW#muPlc|wOai7xTDNt|`4@${@uUcdTq ze)%u|@|R5QbMs%Nz-^TIn*NrTrvEZ6(GYyw+u4SXg;7Z&DsKJp;_BNU-l3XuEi3p5 z#4YkD%Z+aipcXTO#X^m^aF(IBJxmlzfa*&IIvNqBh6M0metNp+@P$O{YrSh}P&wWr z{NnY@Pvu96rMheeOK$iWc9%wq$V*~iZcn5($C=()IC?T_ z_W?Ol!r;dt$DpsEzAsJDL}}+UEgOWDvA7Uv8;M%g!y06ApG51U{l!hptzv$CoJm9E zGa0hi=E2z*6q!k5ZWyodXi{T^bkltdHDYF-drcugc;%cN8q|+VIjEG~Oaw^?A>;9w zY9A=Uws=bbS%eA-GZSsWn#i>?qeq!PnE_y%4oUj6x{)5kNZ*R{pZyu%X%Hu-wv0I2a=tB0Hsc-5j$aX4f8KQSw5dWD4L9=pF1#wfA+<5bb7^zu@HdX8d%^on3Nr<&CWg2u2?3z zeAP~0hz<+G9Zr)Z(28r@+LN_)1YAS>^hY0>GT2S-hH>0-3X_B4d-0&OE!3JSvSAK% zjXq(1q8FG(!#-A<@+`RX3p+{@$3;o1BfOq$#0j6&uOrz~n1|^Pls=T8adb5zp=pNM zT6h|qnbVpnhWf$8Jf6+52eCt&i^TeFD(Z(uO6}6}3gUGV#+mrUrJwM1ZVsR$W60^v z=27chsMSh# zY%vh1D;GOd?pYZ}QuySv%cgEt&Up&c@j0PuVXKvJ14K$ZPA&{UBbNj!#R2`5#w@0# zoNnuWWQ&rCEG6RKT$GyB8~L14h7wv8J6+Z}4i+6)mF~Y7eNtw2bnm=ld>CwIF;E7O z=g;sxaro}~=EK{!Z@>Tk?88SyOqQr{@>IQ|CXmWj@8va1I<{tgPTjIa1owNFcVVy8 zbxAH;NWKd|D|M;LNS)W4Pg8lS=hs`=uN8~{&QjHEE@4xngD6pSS5vA;piHP^NDjEP zpnEF#QjJS0rqbvs;bhGbKT|E3{*ZIxxk{Ns%wg|}b1w7*6;wQ`obAqU5(UYH4i`-R z{E>jffRoJB9GX)FvOBe`)1)d&3eHAx(k{?qIE(6$wOW%Nt*xgRag&Z|u!zklv7SdQ zS;Z3VVPd0z)@}*SU93OH>tg*e>yOzjus)GH>Hhru;#a@@7EVkSD1bKPIw}dOnX!2< zBn4_#d7zx|k|OaGL^S7I4`G(VsZ6BN@C?87wFoYakOZ?rr8kl;C2LI}qVZVBJM9$9 zNS6GH0GGVEGy(oi#0%3I2CZf_AjDW&(Yn^_a3(88q70fsX1PoTQDf0SHom*LyS~CXKW2KkppGuCK#XTXPKG!NRM2x_|Dmm7 zj!d|Fz$ux8UHl3lrUNxInj{q))M;i`P%aAEBC8>1x~gT2;8tPOX1!w+j3@GpfX#-5 zf+*31aK9}9_}49&ffDOJko3?@IEhEGSZ_fku-b-y_ujXH zRFH&0b%|Tx=%EYbIP$TiA^_^Wo+|LO@`kDp0x{6Qde3FL*m{wf%z~t`*!m6gk>j zLK3-#!;ET4hIMfr$}eZ-lX7APwN~UXW-D@5@D2TnKdEE&`oXL5!~`uO2_mi`bTP1H zJ~OJC{uAg9dVk3bX_<<#0$Yb!U7OmfW(zLkD;ub zcF2eItmkZK>e9y2BAjqluozY>mBEC#;IJ^X-G7klFf|dTiVgE3Z%~m=~8IS!S|a z&-q$Jom#Lfn7&*^X@xQiz&bJb-a^Q*3?olv0yg53on=-4t70<5gtF2sEo&CadIbZ?e2{jU&J+7VQKNJEKL;HPIwb^u_Z9n#f;z4_{5m4)1A3Bm8sec9K7U$)sg=B$V#hr?I>0DE`QLr~NH%r-xDorrDcRJ)pN7EO z7Rp!&S2E127lptpoeG!o`Sl$(6T(l*RX_@Zo3d;~{Z(qjLG#sC5J8h0{ zbwFPPT_gKA2##Quj>PEZk(^|Vr0-xWHk}23`LDnF?%Vel)Eo66_8+nGZFgj7-l4xi z<>Q%6=X0s~Zlr)*BG;$Vc<#djXH$w)D zZbm|~Wg+aEC2c}=54UB3MIMOtDnmQM8;8)saB_KY2|+X58PWZbRH;pNn3RNr*ffKF zrMAtxCwM_xq-#%`jB7%(vV;iW#wD826rsWjD_KG|qemI<4iEPfWzy6PDf5K0fYEeX zovrvZolTF$6vPc)4Zz0`ckLhU03zmD6a({C$subZF6|(nuugUR47%0(tNUA7vIO3F zb+Y^K{@XvD&8BDP*D?+{Znx=%Gf!d-{<4laPiTwBQZV2KNGa-tUy&*KmQIlX^TZ_# zKw;};*8m+t@5Q`=NrLJB+0ov~zBz!*Yvb_Md5FxpiRK=eg!n;Z>dCY8xFUve3cLl1 zbn26J;PX#TI!(u+WBmvu(0*-t^~#Bu!h#nt8a=vWq%FTT)goQJivXvC5Fm(_$ZVBb zhP;ByTVZUbVatka%H5(Y@u3WTqXE@FFm{#E<3wyK3p*TPQrGI)*Wx7Cik_&SILJur zQJ5abv{Z1Fx~OCE5D)F3?JTV-M9bqeV>yLl<15l>ba2FB+T6jS!jR5w#FsDB>Rghh zU>yJu^#1&sC_IJnPL!8`=@(%P`2?W`G3?{z4T;Zg`Fb~nCmgREauhF2g8Z={Db)JX z;bO{^Fc(Xy##->m;aXU(H5h1oS{rl{oJSun?ykg>J#BsR{HW|*A zoLt${M+JE8v46?(FM{#xh033bRRtAM%kv{8*z`95=55?+GP)o&O`Gk90jTE}vP(?-ZDG^ot z%dzq`#vqQwSmxZ^J(l^)^UHT{-+p}e{^sgh*|mcXa6ys-E-zT;cb zgnFGs*;XxFoWnF|x{d3$#B-(?8r6KTdE&59xW2pujcu~l%H(0fJ{~N3NLznOOELSI z#3)_D_Yb@%n_di;3>UN70?XdrKjf78!&HC=PL%#9ff7ds&gq+*>)-tT``>)~e!7VD z)Xr^c*ze?|Mwq9CVHRb~qRQ{ir{mPpRb)eq6_t9<*a?eS2>6v8z$+-eaf}>H=Dd$e z@whYrO@pa8Jh$*_a7WH$Gxw0>zd&b|2gGMKaRxrD8m=Xdu*`wtkpV@CIj!(p2j=}* zdUz!otReSW@x;pW&sd17?SZw&-6{Nh>^Fs5VO=LG?tD21Sqf0)_U!xuvJZZZG@sP( zJV+LqkUH1+9jbsMRB+&W>6sZ#{ADnQ5~Ac2WNG7dNTZwJ{EYEBzArFMLuk9Q*F;H1 z-?ai3Yg1ydhiz;$*C$G%nS`$y5QN4KWA|&)eGx zy^$yUFzNyl)@kO73oIzHZe{`?Rt#&rBZaim7h)wNZtL78C{8j9YM zcZRiRAt#>GY0#3GEG zutdV12~=gwgminSnm%Gc8-qr?{4pTFH*}Hp{yxyU|yA$i34aBVOSFFNKdmnO=6olih0@0 zISKJb_G3Sc;E_;b+2pO`Us>1>mm`sG(|eiZ4v%(`{nj=NIDCu>7LrJUIJQ)DS_hZ0 zPstJYDIsU@@+zuTJv6cbg*3g9;TQsvhZc^nd5d^}5?)$x$C=X#S~e47=DNbTSK!p% z(bvqhv7>dJ98-dOBq#@&no~)ltY!mu54MnSBb^3qO@E7GkR{DVf3g}+jP|k=_k=4i z(^>({K25_~87$b67|jejS?uHf%o>m^jhPmL?a)CsGic-jvGBH}0R}-iQ=e~fL)rq1 zB)x){N6k<^9cM{nU^2`Vc5x5XNF1^36D*1CBWb7a6xpyAF^V8(!Vx-c9Q3ZT93`dw z17`+h&lKcby>cE8A&uMq{@q6qKm=(si+mFz`9ja7)v5o$qcQ4(bpG$LM|D5T~vny%~#aIZ$t2#8<{1y@mw2wp5A z%$_D6TqN-vaspaj;9YW_@DKH{)M(w_9Wraqrn;m*>`ccZV50e^_j6EO)A6hs@x~0Y z7x$0fyt`y!rQb88pB-%fJAe4&hw1eFhfDg48fOIvT0#pYPmF3p`uLTv@i(Z?8_2|0 zj`Jc>XFwoW32o6iCw8i>ojaA5U@V(p9`Q|<9-2D#j`l~K##GMAj=f=OQs-t3 zoTSdh-NRs?>Dt@7+1N2n$OF_oB=m?t2RnVJh|stdg)An)Rh+MD&jViLoMgbu!OAxm zHPwP1rAX(5HuDY%xNa$;T#!b`2I{Iv%PsGRJGpHvL>4_JC_3}$@oryYHu8d$Lr%u1 zz&r5Q?I_`(EIvyAO66^_$Q!}x#mEc^j3@R(^kzItUvwp#BJ*%OKnZg~Za33!s zDq+G?f^|(OXfS}uT^>3eoX2`5qMbCPXq_mA1nAgXl#|F=Jd_ zF>g%IFA>bfP&l#k{_Oh0#m&2qS068KF(;9c?&5NMGoFDhBJ0`rZ?E7Q|N71O+mAOO zE4dcAuJx18U+wN~Gxh=wBimUP-G>$9XL?MQl#S{y8f^}U1((FD0s zl>d@QzJQ{2;Hga}0a?WwMWHfpaUTm-#e`9zEeZj%6~AJIN%?b$1-ClftkTcRo$^v8 zRap)F$Zxemo8m1N-~hFS1c58dou2Z@7)4lUbn3H=IZpv&XoyuV3UuD#37w4%Iev8U zK-Qs8C9zjhq~`q4^d>2LKrwBXD=3n};ZoH@xLxzOeCA{qrm8#Nr+$_;4WBezTDV!4 z$99)GiN57{T0i&lIeA|{B5!I6Sa=3*Z!tlS3F-(lcYg9CyyLBoL@UOI8Z*UK!kzqt z6ui_%p??Y!PPt)FQBqJndmL3^LP~kMu328N5lBy|BR6VB=(o&@#rUJui z3E1KG?t#T`EJdeNr_U$iz{p~H0 zLCUu%Jd$Yi7Mk#gjmqL@^h77=SA$z&AT!6Z3>k3IA*D#>C!|J-9JF)bYMB7Lwwc8V z0YM`wv~zEDSfDc45uLTLH>>E{XiBUFypj{PEji+F?u<|k7%A`$p+dw&&Xe2FB}Af6 z$}^L01OFcIXkbk|NXmeq*YfaCcmye-s4zWn4l1JGjykv{1MS@v*cTkkSC`jk=a<0m z%Sh$7F^bX*<>X2seNca&$dU?CedzRaH%JIu$CjG6J2Qvbz58a;Dm*UQ>k zB9*}HX1t-ap*BhdWLr=eMJ05d|@BU$o<2Nt4O{}qLkZPx{`oM%e4Z^^iT*XyxrbS z(5RKl1j$46tM`qjE^oNJE7kV+?pE>yV=X9*@DLd)w;b(=-;|35EivWO!m;hi=fY|t zr=@eif-I*MoZw;^)`Ny{G&1z7Zlug~B!WBVcTZt$LF^@!KB}PPB`%jIO@Je5%XnN> zy%sr%+MGMT4Bd+1zyKA%#Ef21_7D&!pnBaQjw-)6 zzd={$hb-Rd39%y}%^>6?>r=1y1dz{>dO7Y71S^2smBMh4!QoshLdLC)!b`2EMq^3K73-?w|){cB84}AYniIZ4uwoOCulda8jClyDFYCSBBLy^ z72pB$i9Lw1#=u17Q;6Bk9iLc{;H193xuZuj_BqG10T4pvt;Z_FS4^~e@r4|>vx@&n zAw2x_>#x4~hu?m;u*66=Gk~qhO1Qh-!y|&B(5X?@c($*`0tljdeewDw0b;S@MS2Oz zSH-5Z%3<~kxmle_qamo2P0ykA(fjjD#RF?G0({5G>G3cA{x{$L@P4(Herv2yu&C?M zJ8*m%J|x>*I%Z3xlZ?!=OD}l)@$BMe%z1Q7=ub|L_eb#)dsd>kqFd1}+?GK>sYIV@ zL8FYEMVKy~D^fx|Va;k2@BHoEt;d zAq@3&y0Y!qn2~k0oDEFeYvHkPq=xOMiuXw#(}ku(3=k6G6AOkE8kI1U1~VSd(hHi6 zCY&)`YMo1AXlq+R%@Eg@t46AyQiaBAOMT*{7vzY0r+I}C9(P|Mx4?O)m zh?rdU-4R^LMudddY%WNgj8M#Ssst;QtYONm=d9MA3Fl1UoHN`RY`LXqF=p7EgKbI( zuLy#HROW6gfk>LPJB0lzaOA`J-47qHMRmm}m(_1|xdO104!&)W;gwYk-C&Ale7&t5+x z;OzVoTCp+Xoww&Gk2C8KR{`@0x9!@19g?W2W(u@ z@p{@yue9mJ#z~X!h-$sbuN0D215TSrmnbRH;%nzeL9x-?=0eEdihhCH1HcK8TN?fJ zWS`q|nZ!l4sCus)2@dia4mGIyUUp*}qLOu_FA7cyCcLU%xjCfr4H-jNFs)>x=cMoS zYBzL?&rry<8LdW2qA0~_C0hywy~JIaj76HpCVrbzJOaiHMgb$)O@w}|8F@girM@skx2ib!*+LQM{<0n8wz+3ZSc#Ne$yXEX;D z7g}%gF>CDeaAwa9MOX4v|7QdCmLmOFSL9uwjBy5L?F^!XB2j=y8;FLiIvf$Cd7(2X z6_rDSp_S;`R+YQ}3LynXI+YA<82|<>?jr0YA)hk~a2jriB=@n3+gh6g18;~3o2lFf zQ4BaMFttQl6M>dc0hk4N7Q@ag5L7(J)PO*9G*i?)!e6tG5cJ?>g1Grb<9Yf7Goe~cfA zudqInf<@x6&Qu+YRiiN7_&8hnjG;$6d9U0s^&hUHz^7AM9V{u%0^RaX3La%XkBdR1 zM!tlrMmNuW3IHd!N@Zq?RWIIBE=q7s$yBAs)b*J|sm0v8_+8^%ddk3=n#zjB*Hn0k z{3@>4Le`UJFCmKMlvoK{F$sA~9W-q=^5uo%x?GpGcOCkBIW2X|JrQuvudcDIa~>T@ zwrtO1X!x-}6>_EGxs}{x_%#)1bu;ET8&hk`Vm7H^&gRkAvQv{s7XX_^zqb&zmgIVT zrmbT*HjJa&BwAIevq#Ih^4U-k?ljKM$bv8M^Aug+yEh;I`tN`L{$k9Uui-2GRBDn) z?952Q|7hBjAk%^}d^zI--=Nr!DT;wD`M?0ZB#LIrt$2>jGGM5JtOrZ8BXdJai%cRw z_TuOR)o?X)T9goIybtjXhtuuTOuAP03zaziY( zxbpZlR!bh5_^*}S-G1d|=7;pZz_pU$jx&A0Eu5egRjkg;*mqOsx`YOA+KvJXr?rE= zD-&dilnH08*IQZcO9Jv}7F5N`gL5wVBMRg~*nx>y8?oR3QHGZU#4=jr_=T4V-rr6Ybuv`PMq1+_pB51rr#)~qruOT| zT46j?R5g3@W$iSYCy?)zpj%C?1N(STHvoRtGm-E={AcZ(6Db z@5@fyRD9a7B9AVpEMy_Rs)I=tS#GT9@hl$iWXx~~cDaL15Syf$N?@H>haI_(?~Q-W z2CB(0X$q1<+o=Y7O)rm%R!j7&D@ygYQViWT0<}^@Dr)ixe;g&!TXUu_*^=7k^6=G? zz4$l+7ND*iqoyYAIXZt^u@UfY4IqVqMFq>w!9Ma?ccjF_&Z@R00}x}CN1~N-poQ^E zhM@+LXPQWH$Z^n!%WhllTyZjXP1J2+z+VNy=15G9{INw1jx>@Up5-Z%D$p=8<|IXq z;mK0?X*9KnSMy|U3d`Om4k0t+m{wDRD043r?tE$zebGkd%L=BM1#MjtW!8j-!MO+M zw5~^M^q+`@IcN+Kn+u#(r!We!slb&Rqu{$E5n@WCLg==9aw3jp&cTGveVKvBW5oh6 zlgYi$0FnSKo*n7tb3PRgHkpWNh=I&`jBCVm)C@)+&i1hlzGQo3R4Qyi`RrwrXCK!z z2RR|A>v7CuElN+AcbQ8!*9PQ>9s&cofZR%zP`UZBzo;&Z*MVMxBG1Z zleX4d+q>#NOid8kti=vaBc_I_TJ^hAg z3!_u`)%57b-Dr-Lh@s`iKuhLctt-oovw7m1QFs?`{^%X%E~Y`7+BIv+TuoWr^ol!7e2w^cPQY+9Tvc541Q8xs^Af*5(=7y~GcUO~6TkI-)a>@4o zaCX0l9GX0Ol%F@EgiNGPeGvPO^8bu)rig9oehZz}=`~?uq|5E@Xr^MB!;JDE$!BqM zKRLgCxSh<`*4L=m{bBdt`?r3EboTa#kKt{>Kbat3^8k9Pe^?eb^Be^_86gbG4_kI} zYEv5?5esSzVtd|LK3DAhvL5*ecbvwiX|f zHSW)IJ*$h5yKNf^zs5t&PPpS37txHFE{Oq`YYHD;tBqog8H*<(_a%teP}4RV8KvlR z2IEC0W*G#if_NYpUkTc>X<8kuZHjv0l4LM)9{ORo3w$z*PDiN>)dOTwA3=D?`C7l6 zJ*{g8=caA5I}L1)MHSkN-3VKf(DbmuARrpI7?qF8q$gxn&$=uT%$hPrNvm2)$Qze` z;EgSVb+*hC#21DdV|3}HX6(!vyolmfC|DVXihQ)c>eb}z;5QXc}!Fhd!iIA zIknv{O4LxV*yh)cqsQHQDz77BPhSlbVc0N{adN*eGdYzRNqeKNm~|OleBa*d(7V~+|MB7BVKm~Ey4Qfh$XwX%7i}zXm$>yKrNvd0UyClCFCP4b zH@8rz1Rw2l3YaITN~sx(f?V*K1?N(*Cc3r`GYhuDJZ6T|@>3L#5@W^F3paE162&l3 z|D$tUhTOkW*WI;pZeFBV5Q@rI3=FBC@Wtkdya?ts7fijbhMy=#Bb4=Y`8N)}e!2f&y9@u4r>CXLPgUjTo;sMP zXr(EHN4}~M?i4dxuFbJXu~l0a&hoq_6uVDU>(XB7HZfZ1$dg|klo2C%zOp6OTYste^ut0-uG2(y z+&6fqUHU*->yqV)+J~Fcs!VYCOEToTlC#W-BwV z2Cjl|L%4IMHBk5}rxSkhsvJd|=O>3vC5<;=9JN1XNK5Hi2myxdvI^9oBt>hpF}Eva zue&4bH>=5dp|()WnzM;33@6}2W+JZim_o=iSH1276bQ=#rx8DKb@lOKe51GAn!kJZ z;qCh~6mn}Ld8193x)M6XUyL{*MxpS@W}4x^q2&8u3psQ;I_FgU2qhM>_zyg?a)V-* z59pDFPu)qEYQ-P);Pe&XVq0PH&io2PjU&NvKu0w#cK>>Kmz+n2$Yn74Lqp2M`EgRs z7SbVY7<#}YbbWgdR_Ipyk06=h1{#ZfV2w}2ww?wi8Topgwt16bVTxtNP0tNElV;OI z!{iVE1jmBOi8X=j*_bt`J!dmFPOAZ=X~=({qh%p^qJb!i3=b)_iY3@JsO%jeW(-<;Fjp16212Xjx#&)HeGgK<{u##&Yq zHyjPYf6eHb$pFO-Iph#UUB~6NZ8YPT;hu~?>^@;gL{xQZR844!fVMAPriGZWmnO9h z_5sO+rza@2ASie{FH8iD2Nnsp&_$TfFz@hb$jG^5Zr-aF_08d!v;NlWw?~rD*d; zibNy+1=XEINS6DhX++&Bs2grx)96;B1vjio_cmp%S380tsl3zlYBo`W6$U_`7RgQL z6w-PQ>Uix}EBPY1$y5JPj?m!~{Gua1-=Df2`#CYb5?=G*KqduB62Dk-Je&`DbS9r7SudKHKoPU0s#;*>+#XS>sQY^!N1g|H!BmB zgEotwcIzA<9!821Cw8C+4PZO z9Vj~Fj5i-e!~^;6Pd|V5>ct^ClXOkb=AcSbEb4SCl1Spl=e-@$owEX{}9_6JA%JS64}<|67-{1~c9 zOUq03WW<}URCl>3jDqYXS(W)TB&Y|EOl8ugc=tyc-WNs{$Wyk14vpzWL4Pea4MwwT z8BDOCiYP6&r7n_ykE(Y5MTPWo6|Zo2J)WDQ*nMfE;ssRBQX=|4TSbJCOjd+79e=pf zAB=i)`zyGBqB6(rA8xmugqk%Md+1#0w{<5DnwMB;tey=AMr2Ewr@6JnEJTizIhh@% zEESFL9WhCWU$Sl4DD`a9F1sAh|&6XNg8N9oL&Y%AAk62gV zy+2!NrC^rhKjk)k^rB#iPFfOou+}Wk499~*#K=wqS$7s}r_O`Ej#skLYAhmYY^@#g z=B3m8ywio4i6QDjQl;9uSc{A!OELlBpxlZ0-%&o5?#Y|WWbEN51CRoLu?@|jvLXb` z9BSr?_k_Z`Sih4aAtG~B19r>_-3ns{tA*vCd9rQ<2cfbl1LKAImOs*M z!G2!|HQ7+uA!HIC3G)?l{;slQ5+@`q5eGS8W#np3W>Ui^Pye7$okzoazFDuo!zaqVhtUoqUU|YH=>QPSiItSJMQ% z`|-if@!>YhFDEMt7-9z}**BGl0D7(ZJz5Y&=B5ZPv7@s&SgeuYWAJi4OGAn9ln5$a z$}9~w;Ked0KZ4Q9!s%Ju-=Hsjf3 za^|P7h&u%dhc>YnCisFWNj@1m<~%WzPUO~+cZiuK38%4-CWpPeI##EX=h_6)^zNn; z(cPmUP*mz6nuFHvj=1p|4SRdrq=CG@7pVcoih!PUSImSP0~(pN|M1`Z*`NN&KW!TH zP5~S;&}Rx`crs5Uz9wp1f&E0g&JrBT#w_h+F$gn9Y&GSY8k692yd`dH8JSt1Rxs*c z^IRSh15>$G=#A^_AsYR;DPJ@8N{;Q4!YRj}2DjHPC>0=2VYjjc)C;-kyL9jgbh+$Q zD}9RL_(}CD7tvw!E=H=tOqqOYqD(!8vnF-e$fnZNDpIje#2k`+A5KUG*A`@W%I_QM zTjjX(R&=U5n|?*fTp%hrN5?A&ZtY#y*Mj%)6BAd>W=*C<5=EUW&77O^qg&1Q&fR_Q zJT_ZGz+xgvbro1v;go4U4e#9{EhA33Kky&Ku* zryYuACn)!Hn_8`9EBWbSG%OK$PpnPpVs@6s4DGGNNXFDxIG$2E?&(Z|WMsU3_wgLP zH2AxQgS~HW?{02xK>RV^F+#(4CM}=;y+!tKm0axnwN$wHX9D>V-lvOJgV5N~r@1X! zuA{1!gM*9Fryz-JY%2Tdt=aE-N=k?pM@tZ5p_Ja_iY(7=lvsa~=2lfvII7(IYh!V8 zfn)8|;_lUjV5?=PJ<_MLm+u`M@$lI+l+UY85*OP5g!s>KA_uYl{LSBg^}FxRglcyr zoHS1-o8URFd(!-IppH4F$6p+=%yJe-zCTGOR;LYBuYVHTp$-#S{+EN-~=Dt}qYR@i`Nml~R;lb_>VvQ3r*v!#!Qcx-H5#wwVifu^! zB2!AbQ|MP>;SL;;11mGp=8y4&td3jw4w(quKHaqTnRKrkf0 z5uKsi!iPK+j+)Lj=lq3vskmfgR4++tPzl7xlmK~~kW6^dO-2}sXWtK_Rq{HIrf&>( zjoSq)N5ZKHa`-HVImntw~af`5i=?<(j0o+t#zl zShVCPlh#T$DMkZxS9%4GD>^_ZnP`>d#92q5U#bbgOrhOH#h1U$rHRU6xO&s&bh#{6 z(i=D}FjC`d#ICY-0~>&dL z=U3w^4WVYT#bjZ`M8-u~g)`0PCRrwf{q%EE)fIfNED>e+vs*JTn)tv=TbBPPPClbW zh|K{&t#Gu9*`62S? zcSxPKgTl5}<1$}~+>=|TC$OZCQ1G0ZW-?U(?9^PjQqS5QU~|5QhPFC@sZX>YhIj!v zjfjv`Y3&Nuuj#lch z(@Cj%SSqc!^*$6OfDj{vQ=urr#nX#ExHdAs*@?>}2yc}4nUPgB^wdUDEeF$D2gnL{lDj1*m7{7l7;`Y(j3-m^SP24eW|#%j2)SCaz(4uvkN)6CUnmLQLcI$qQ#V=}dC0ZK z=OB1-aM0r{(@WbUvT?3eCW_%u)?hlkRvev#vq7}h_}lnowbF5cPq$gix}q1L*Yq7R z5H}A3hAu~F=rdBBvV`n}yuTJQhm;CoClQxt$I zsc}cl2C~}{O||)<36tapCNI9mEfz0_gI6~Ip^_jF@6g??a&0=rEMH~Squ~KV?(EAk zrIieb?3Bd~aT5`9WtyZ8>(*jgmam7VbG74Z0-Lj>4?}p7I^qW4ekeP{MGcz~=w>NuJQl zSeW;=PWGdcXo>3`5m0ivb8XSc10e}SC{Ibg?X1n(T+kBfQ>X`uF(rWQk|HAyt|Y2t zXYkz;3svH=qUQ?-FdT-6x2DR^1N4!5>Y;^TsNic#9*mIfLYQJK!!RZ{AE?eq0 zMS9Bplsbq3~EgZ4CT20%h!S|$R*zQ8^@Yc1kkElbxAqMmb!9X)H-SkR3Ay# ztV*KGWBHGzzgYQV{7Us^H=VAk`P4=_Z|=RaOZMjOo}higNfIX&uArqQSC;=ha@8Il zN@M97Ct~YOIOf~hFxw_ZTt~X*FJS$!TR^U1E6363P3dXsjDRteC|^iCH&mn)Au!%k?;w! zbq_{Ze=H2$HxSUI)7ZAM5UL&P4}o8@{=7T?+uwZsyYD_M)^0#g5i2Q9MmpGslcHp( zB(%!b;Re{5fL@(rUU`vhFHqc#2aT?aWUw?lL$IZuLDc*#h<7))P9M8AVpo+GcwpCh zPCNLcRb|R#_U5<(gcm55fdr_@ zvuCQj4ss_&IzM}}Sxq_u6wkl={>{6Om#i9`LhU*+r@;BN1>fCC3!Rp#KRW?Pv$10G zYl8C%8@>5TddaAec20zyo7EU1OOu%v*6CCZA;~~c{d8sRYI#GE*>_+L$cwhY%;@a9 zeD5O9Ny|YuM&HKaf!c#o#2-HnL}Xr(BRZKNum|=<98+~TC$TS$pCw;s@*)!~W>#8>!aN@t zn(Vv_8#B0!gJSWs%Li>e7~~*~XiZ8eo(Mz!5`zhm0mU3+mwK4-hsZL;_GH(HtV9dB zWRp;zo*ckZa1GoU`IT0tkWOHf0H34{ML3YrC#l)#PJmbvUKhv}yXsLZbxU@1GV_cF zk#>5L?=gb#E6+u|<0k3n61|da#X*ZovFb#yyiM19%UL+wVazPxl^*FZ0gU~DeB&P`yP=P?(IPC-J%-ql^MhHYqjFD2#4i)_HlJ%hfJ1hv-b5>O1)xxVKLX4-|_6%xpWLEodw?#AFujLO174m-=*udyTKIi(&Lo*IIgicUMSs zVp!?4`0Y5pw>K0Kn^~w4Ce>*>wp$zfXc=|sd06v?y`duI!2oQ#+qT_W5?oTUf}*^T_}=Rx^%+R5?s%#<&; z;E94Nl`1WXR6#m0Qkiph_C@wgoGVC1%F{M{l58!s5ftjp*3q!8)+JGuYo@fQTtA~T4$L~dDHrweI7UxXROVKpA1d{~r#Lc^=>t>SIk{!Ee>HnM9MICiZ z{qV+2UhFhX#KAi=@9~tL8Tv5#BbYP4>46qxovL_kGl4AWPO7*Har5}JC5^7`P43+f$tMLOl36jNuc%(o2$twt< zfM_v`*3kGZ_?2IO`ie*2-Hb7NJ$rrxTN8CMod71NWC&(O`q}-2nh`Sz^Q7!2o_jY= z2pHc|w;O!!DvCx}gqTV}0*d=abN(jW_NJrbl<-Y#6>jW}c=tph#BC|JjY#TUG!7!d zbUOL;#WB|~XexEe6Hn*`JHmz*hK*q1h4(QcTUvi+S4%tk-QJ68{z*_Lol~zIX2WQ( zK9w1Q37;ciim7tE1lv2kq@|)T40@i+ooOTILtvQ;QbwuAm<}#)rf*?WzPTR@LnPA^ zYsFvuH~+WF+TuVW(w#5Tc~^R*NpZ zM3OKipEEoyEighg7By71)MZ^a8|TMV&;Yk37MV!`K?~_0w}#9{Bh-pEC70aQ=QItD z;gG*>Q^C>BChWXsJ0r=Mlws|7L(#uZMvzJHHjd4J;vMJ zt@J&Rz|?t_t=BdhS>)wL;LhuCI>dJ&$AX`=nrp?QW>+o)1N=eB5gr&=G14;*dEm&? zfdNx1J=%u*pZ@5J|KQ*M_weB>51M`89eL(^!Z%9L=@z=`Bqyi{4Li<#(Dx;VOQq_^K6f0MJ`Ugr05A5d&&#L=M(G_o9c3Be}C`r zkRNEZC$dvy4p)myP~w0R#uejBnA;=tnAg23VkVtHR|*tM*Jh{KMDmUqLMfD|trR{s zlq$Hu)c5}Ciwk(W6wI}e`YHC3f_QROB$RBE%BD$zvN?2L01MbBxI`)3Hjtuu@qbt-=2~Lh3;4C zN~}y-sC-A?pJUW9gSTL`e!Kd3sXBJ7QEk3>Nkro3bv(sy%3ZT+$&0WqOHHp=ZU}T!``z4SmoJQ8b6_ zBtI@&w_)thV0(9We;-~%Ox=u3J*mbLqIjW!;pe%%yZzz)`QQHf+poSqn=Lda(@9Dfck&L~zEErZ(|CD*=`3Q7E-lS36q$3`aZ z$Y2!3TaV7{B$%mj!jCg4JJf3sj9@(2tTSV;(Y4&vzG8W$xG5E-m;~AAC1mgq-3LiA zS&bJ?O~9+n9XcfPn(<@6g?Kzj_jP@FwwPS^`x|z@{r)X%d~-u2xM31`*pawsTN|Oq z|r+hX;$XBf&D z;a?mvy*7p{emU-mf-@3*h@3QSgx#LPWIzcabRX^SzIu5~zGJznq;og%Xdyc~b zmFFhi@6(y5gymB7ge7F?)*Oc#jP-=c!N7&qcI_;a#{?t5WaikDnN&fnLRfM!3_)az z4}UD%P|_?@UXd$X#a3Qn#f(qpKu|`z+eq?)0bUXsCVLQNK!Jlkc_N<<+j5gAVVnPO z|Dd>lC2^ob8$bDu3}+g}P$Dp@62`)ip&O@DJw5ui9!RZ!+TGIQRwb0<=Hir>ox-vD= zwJHJ>k@eKE+ zOuoymzL>TzL3|7%O3LV?nmh$%QI>xts~1u&!m~Eh^kV1Q7L~wYXLm#)QM{2TnP}Vg zM^ZLQ?>-EMONKuLGj?Jpn%t`~sE344^RFH-3IsJ(@}fvpm^*U(1aGTIdn*d^d?3#mf}S6YO6!|IZ}KwnVE}V z$0C5SXoC)1~J!hB%;))K1&oo4vC?$s3h2>oE(mPHK6%$hulg*$Xbx6mvpB& zk}~7~TfA0TRLc6oCNa__%#6fy%ROV>=BKhnw2CWny+qOK6MWYY&SD*kAFR9Acl2e= z_6iN2X_(*MDOvK(SUY%eF0N&ENy0MmRTE4q?BFV7sId?MDh&3JyXw$7*m>cG6uqd} z!0q=R&;Q}KUo#D6npzld-ZNPVorjk5AZsir9z$=yppw3~Js2JzAFy0gi1%j~6lU#Y zT>Nx=u(!WIVxWh2A*v8Vm??-+%6=#&8Mata2|XhumRkDc*})(E^wa0hjx0nd>9UZa zM*c=eV>iY$Sw(Hq<#4)?oGlJEvtyfa>ZL@XS1TJyxkkonxv?8UZLqALpI?3b?fdKT z15aV}Gn2Pgjs2q`er{Gx?5EtZVK&^+?uh=Ye8(FHLJBRb2wBEDBZ$hxRKz&rxS4Sl zPVCd>O_?_Yvamr1!wnN;Y&0V9_eR+ok`uK0CWo--`CG#HBuhi5C(0yh5=D$M%%sYS z%815Ef=&gI2rnrQs)=i7a^np)2=%O{5M*rZ`XP-Pj zyu7@l&$rBM*fKj3GaJlJi>2b!76N){#v5}^E1pp~?i@ki2prFhOA8d_@Q!f;+GoQ+ zV?LFYd#Q;xKw50TbVcq1Hw!oo3j>OGVaBEjyksW@#6mW@6+27j5EfAwtnbUH@ z%6y2N5Nu#9oqZ>JWk3msA!e9G%R;H~%bY7?A?;2*i0j)}R8T^ofdIN)+)gfT1!;0{ zrF4hgVfRn|_}_T>`~|B!ueQ6rb98ugdW?Q>baH%je0cEeo&|zq9l8y+zWu0yUiGJ5`YTqma(_8ufQqu+GOctf^|*_m5}li7fOeYw#@8Iow7Po zNES}oeyF?;%12g<<%g{n?*<@%d*|T}X%> zazCI5jNQ!>8qbO=n0+@p-Y%pX{_L%3mlR;W!fR}Nq68@bo*ze<$)8{V`6)kqpIL!40EmBBr(jU^d!=M(+PGusA z%v4=dF5SvGreG}LKSeyt8S>VI*qwJRwu$_t&)|jpSGG-E!-b%x&`t+knIuysk(O_5 z+Kw7;6C6#h%{lj7p&!J6B#Il?T3r2 zvy1D1#*?>8rk3y}n>lQ$ZNVs%*>SaKIQJxz7k{0^03-Yy_~bfD%a_MtOL_E}HeNa1Md~fvI-@r-pDR+f)yJHQ8ia|5Rh@eYv%vrH>@#`I9$4cEmwWU6>=(cJ{+qX# zbH|co^iV3MXj_)!SWx=Xw$}-s&yFZXcsnbQ@eMT#w~@QE1%if;h+T!#*pH2vcTeCX z#WbW}J~|4n7q5YenHi8UD2YN5BwvEfW*w1g%{j;_R`v#{*_>(8%4V4Vv<%e|p$LnZ z^pf2Y!w@=TI96hN%Lru?@l#u4eyN8M@Nl!cLtNO5u&?jQ&v`xNj(V=gNLn1trUdp@ zXre8hL(4}<3LLT~F>NToq;xK+?o~FH!fVEnVC2f6%3_Ohs^fQ3XB^Jkp0vZ55?@Ni7Ev-rtFv*MpHXA4T^ z%wjQP@ra60c_3jaEt>_1rsjO@XDrL4rN9lSBFx`JJtfq3#mHqK@n6yt1g6AmCaJul z1Kgdk%=1a!89sM*H5qe+GCIeZ`cGV*q3+HSjJn7(oMU93JmT`zc@#+8O(GU9uF!K8 z4_ccaOv)SEUBMMLjDF%t35}%1*cm$DuFm$@%Y?><8=sd!0UQ;Il&B&+(7gQ*6t~xg3^J<@b|$hL`pL94Ptt^Q2^;3NsF%U#srY^ zN1igBb311E^9Rc2_8w3n%D6tc6>|lk9!~i1;r#dCy}^9U0vUlh)JwDry4K3_5K|xZ zk~lt%DY1-Gr8{VS)WFB{%eQA|Ske4aTlB;i&yF<*HawF%!hjw{G+bmeK#S-j%r^0b z(<3oy(aV1N#fv}s*{3Hbc(T|u2%CUQ;i5isB=&rhTFR)<5~|vrkXS(@&?$ zF^BignIc02OaYh+L6GqlZTLnUrwjxk?)9aIWppIPe$-5(=BUy?YqJFvUB%l9E~{zQm*%78|tZ%w#lgTgKpW$NXva2!MsuVK1K_fsrGO25+L%>?S8^ zBkln{xHieQj!zB-((#vu=E+1;k{_plQJkYz^ql|EE8UV)B9DbDosA#6hRR|1XMWq? z?saTh!f61a3d;!NfbjNcZBrxw(+E%o@hg$ieuCXks&I51KK8bI|Kw+1zI^tKDG01P zb_Qn-?P^gnq_1Od#7L$A97Q9162qesX{y@#6FV^U!CXJpc0biywXd;`NJ@&pvtf*{kP2`uz20pS)sZ|M2!b?hQI8 zH#8wpi|P|UqnL(7wCUA;t0QQYOhQN=eM7LBT*Opm9>%pRFw!FLi>q#AdARlbiU4D-;hLzC)~roUDWGW(WwG0cF#rV_FNr zVo6g0CYK?Jbfp$++V0|qhdWdoM-+uCV2(25f|){mp?Xm}NDvz|hXUi@BB<(5N zf6KOEs!j45f5L`gf09x6fj^E=ARfx*iN2GlZyxbfsm>}J+LS2c`885zl)I?KK}ANN zjQ&?V$<~d-hTuo!pTbI8Z{=&&$jU15goGtJ1_w$4?@)>7?BI_IJ}5WL@gyb+c(^#U zLywV1(>hVAR{_8HaRJnrvtx94j6L=g%Nk7OXBhA2v#uQkQEmg1i5g!0@6uM3x5Xk7 z97^Hhd4kG`Eh%*s%TyIQXJ4Gl_T-$@fECda4i5uA;>i|0oS}Bi8-;KiXluA7HP|#m7dzIJ8#W7uFCj~1;JwDCjK1X)^ zcyaaN{OVC8V%2J^2oh9TLR}P&yMJ_eAR>uvQC6_rizrm_FYUw&u(lzh8*J$;Gghrr zC;nG{^1o0?1~&ip z!};HT_2#?xS6F|zTIiyN&c%$z%_F%+9P9R#%YzpTCdFhrt*{AM7Lk{U#R5kh&4I|p z*NrLn09KiHM-Xv&1&uYZ2rCo6Bt=z(YM;w#$H+I#;WCnQ(9=CFXZnK*)xm`-L$Yd^ zuW@0D8NOrjVJV;jxD_{{Ub8sy8ej?pIGxECoQwxV-8WhihGtVPM^&C*pI=;GzB@UB zP`UTj?|=XMZ{8so^UhVPsg>o}NJt1J%&n+`NWe+^f>aVBe99hOuK4rqOb&gIDm*WR zQMDuo$O&v2IKhi?EMT`Sdr;AQORPvn4KN=ZSjaV&!5VX!fw+_6DM(?2rlMT$6EzXS zKe{uIq=~ExcNJ*`0@p|iHhT~lYid@4dsyhnvpDQ3wKfI^x>BdDmqdt?z8<1ex}7-( z#pz%hfm+5>RAFJ;Dm&f^*&O?c^^TmFqtl( zzq-EXE?k8W&kHh?!1D2K2_~A)@L!5D?BeF`;~9$N_|2P-e7(bpAnseLQ`Q)>TAXi%g}_fLDv9NOv_M{N##MwsbRH_A#aFh zkcM(O(t+d_kv@26d4I+4b`et{YGy?m_O$=&3DsC7&V2=+TH6*@#7AXqqOmp$`a{|zpmSt9amgj zFe)vlQ9OgM>7VF_dZ2w9iaJ{Ks` z!wE3%BW5C<2k68vViEF|P#~f399)xd2{{yJ0%fT@PSEB`Ua=cgDKi7-@LMePjikQr zb;AY6jzTG&Ta9^>5shw45qbi9iN`@|Hj56D@DBN;%tO@Pf;)b|p@vd2aU-#Cal9*; zzAyE;A;S&LBxSNfa+Qp+6^z{286F`xYEPWLyMylO(JoI216?AIsaYBbJH-aE*=f9z z#3!OcWvMAB(LAM+ro2;6Ff~I^E{QPc0~T5$tCx&v5vX!WS-V47!2i4}pETFe@m^!a zy)^TDyco~uBu2T0UC0m*dVy>OVH#3UCnOgNM&{cBljy{H9iPfp=By5kaRxpXVQfb1 zpI_ZxkMFVgTwISoo?m}Bzq|mUX@(P_M4irjFBl4U5hP_Yel$`GeFJdJ`;Tb05FHnKEWylLG9S zk~K-o?X)r^>CE;zFSl%Ir4G5R3H3BBgo~GbZs>_(nc!c>rmDP5p>6}l0xiP`;vFXA zdomJy`@=_oC$Xe6=61GGF*|hK{exZl6dH0SSo8xgE=zbZm{jQGtmfo6=f`+ksBtE6 zVy0L?;nWu`PH3}C-`NwsW^G96iurEtY(gpX%F%r62)(OJg(lBhRv9qntgR22Jb2%x zjU7s1rT|N>!ZyUdCHA;&7Ho(FjIV(LL=cB?T41``>NHrp`ALgrw}}au?y+~cO~lD; z@;KPW!OvW@7I4q?i4uV^V|#xz9X|p-pxjPW-9X?2^256mO-8p%dV8X=c+lR_&MNqq zp>s8g-V|H&bZxI0z!T27y%pUp=3f%4@rH!mx=yk|WfC>&ac2IXC%^)&4b5XY{3a*e6VAo-7pie_z@!YF)z){aL18tOM^@T{4EXn z@w+tH9GYVzhOm2GMm^Ku$pJWPEi}{U*p@^j8YaY&`#PSQ!_poX>XpV#Q^WkXw;OLk}y1crC zV6+03HdIjwg!9oiBoN_U9s(^qJUu;q`Qq7VwEf)=?=Nn~NFiLs`N;#w z`Vq}TwmB(8g3c@+1!r5T{js!=co9n@tD=0_(FcP|rKdtx%^IQk>XYZk+yvoG2_4Ld z&0kVZvJx+xBPDJSwm4_P#R~^OD;{r$nT2=2N!nJNO~+*d*?5N}c{9$JUf0d+-BEDqNLDecj!tmsg)LI4Oe$7teK(<;C@l&R zcvKkD0^{x3L6_uTwm)oMzkK#@{+oXQBZxGsR>kaq1Bnho^N3&|v-pB7mLMfJU#h<^ z!oeq#wydx!d8Inm`t8#U*(I}h3SYvzii#{VS(JxXiQn;kl3h#t#SBrH4!slf%9_u@ zKiUvmg2f_EmLmh|u4ZdMjUd3#eLwwc`&QAU>?9Ro$;}>^npCG5a`C#4X`Obg-^k#G06SPl0y;JZ? zIi6l!taaJVIYpYx9dkzNzibigP`1u4uiu|vV`!DmX*D5EYz27qOxeS{Y)*bzfAGQD zpWsYT%+&G3YOFA}3wV!@8d>8lW=$WbMA>&;rLi=T#yD=5c#GrB0^jgvgI8)ZFJ8Y| ztYa0yQR($kYGJS&3Y+3-eC0DbK(f@^G!vwQeCCp<%orC0 zFAvYu#3zfl2jn`&3*14 z&>v~p3`HGm(+c+xY&%Iz%#>;1C4xQg-qQjpKE|ERm6ZX<+O^f}k`GZeZw$r0m>pLMgR60o`ln@8u<2B3Br6dyGpjlx z1(d<)W|Ju`1Fs@-AT*PbB!#+F;Dc81&<@k^!-1%U?A&YhS+f~X4y8%7FDrA;=2y|Q zC}~Cucr>MwjkVup$ACC9=4q!g7_pnT$gEYA;et;L`$;D4#8N64Ds-g0y4}$Wqd?Fn zvFp75aN(@gQV>vykze@ZREl+QbO6~0C?UiFTfOKuUC!a;Z-4mk?)>Wg$BT1F<=>rS z9(w=b^77^m1JTMU*pYy#4Lqs@C{xb_RX)Szsnvttmyeg4w+tOyAgR)3EgQ6ZM8FIrJiD@z}TT-sP#}1QU zXxwQYppXb~43*Har3cO&ILbcD3ZEk*;D(0D6Fa=W-#^%;{b67s#;}jZi=1+DM0v58 zA(OZ8J~9G1h|OqdOb{Q32iqjOp-Hl44V^8Q8b+?h(S3Zd{p#61%Fp3$|6mVJcbTH- zDiofEj~(&Kk7li9KgP#+1RYxa#RhG4AsaE?{VL=ZTr8DgAT|j^zIO z`u2vuyF1aNJN(VK8-+g6-x6-e7mA8Ig3UD=CNkAQVm!UvOYTjGxcaxajWhKvDDvBn z7vI0TxSKv2WZ9s9!jD1U*gx1gJvruL>Xn!z5i}1K%PG@_$+JbIA~8lX5tA2>3oN(i zEJf@KDY>(4G;0-D9b+P5d5sx2e%EF!E(rqwJDslMRi%w805e>Ea4m-b+vFGznzGs= z)aSJ<=ZSjHh+sZcJpPz(%>iU}OnkE9Hc`PC`E`6L>KiSfap)j5PD3|j6o=m(t&C=( zDtI}RL8J(x%xE%t0xf%eIlj8M#ls<*eo83V^~Nk85}J63^t<_zHD`NwJ58W@o9;yL zv{~nN_l78~9M|&DY2Vz_2NR?tZbN`zUw(QDy(}PB-j1;nZI>~i6Py(*%&63@4Ky96 zBwe#2Cnp-uif$Mtos9=X1Z0bz;-B7F-tdvoQ*7Pb&)7RT-09FCkbr}EH~m=v>@nyV<*72kb6kyI&xe*+BBjXeF4At~36)0kzh0@*thS`_ z%Ul&NVGW(8zI0d{J-m3(ExZNewgonyaZSw}Y)j%hIuw;VCs9ac!je;@8-afS=-Y5z z?nM2-6+WHI0K_PZ3!9wwUwroBvrk@T?rBm{PDOxa2lvkI-T~`{QGV(MbU52%WN-|5 z(-5cf;Q`%gOj}MS{EGBLP!Yvu7K+mw<4WId33+{-TUNkL5i2*>PIr!R8Ef@wMT;nl zLG)T?9)sCIZ;1fMOOMRT3Df2#npMCuKQ1XpruS?K{O5sK=ooi|fE_U@?(7K9ENl$r zUgqTmDhtm)7qc2VYIEMu@#V%ATy+cKHdXUQS2uvDO=@JU@B2Nd?A`=*hYr5c)O*vVF>ofeRgBrkdxvdEZ z7dRd{jZr<51GXu1yW@MK@q@65e61kxfnxht3-eQKfD|nxMvLxL>P860I5?N9M~v%} zF|=)zoa0TVsn1D=qb{|+z>zh^7Ajg_#6WjlWxQrUKg9iMr2)5Dw4cL z4n#guWp#{q!ch1bYbUkGRmp);luVsj=VK~{677^cT=klnl|08|z$!Q#o)_J`#%>fa zZ^=HU1JPJ&kV|#nl4+u>&O9c!Ex(3TkP$;^3t}ajGh5DDYttT6e7(k3u__U;g0d+* z!Fi#0HOzGIczbhm{_*4W<>ef$wL$v|Cuv&8jxUVropPpZrSLgWBUw0DpHb+H3KMfe z?F#nC#i+S>Vv8ubvAmUak<(M=jawkti;`krJhrO3WRXird_Fs2?{f_mQ$owN;0nodtCBydKQDOc9>p@4UQv-8 z*G*Os2kfWw<({h4(l-hna=|ruKe@(2#hn@`qGaJgFKwhJ)VbuGon(Os1rN*Hk5|lz z#`DVOWMneF4G=x@@v+ZA2i}KR!cHrv?vNnj!C82+YGR#&IMzP}HeUuoA!&|m&B275 zWzg|iNX^R|{iBGsA~DyBeR`>7V01r)$2N7ausmnabn}KaQogD=%!(aqFg{b5VCcLS zcX|ZD4o6%LNP*0rb}S~_mpz;EzGC~)Jd95D-P`kj_&o~m9lp|Zs-ASG9v(v8j~O^w z1srmvhf)yc(gb5OvGZcaBP&_yLMY}6*E5?+S#l6@hy9f+RXA|A_>-fQy6PyJ7F`28 z&0Qi%Ar;oLYQb%DzPhM49vj=71XX}VK_FVEr2s?)NPpwYV$E$?NTicPkzgK9eic=) zxqcUqauhp7k*4T&uX*v|e6gIgnb)VcXXn@NNv?Z8ryOgeFrpoCJ};f7l!g)*zd`=W z+EBUlCAtZ6TaSgrRzJnRRKXhcz~=IB25j3J>&+=LQBplD%#7NN>2)Nd@EM~C~= zck;{95>#sC+*|4K=`9>VRM1^1Ej^iccHd;VrUN`0G4wE7-p>%KErT*Qb=pkBatbQb zd6!@9>1}O`pAcJ$&>0Tl8Gt|PbrpJP{zxTIFaao}uwZI*j?@bN01fdY3%*0eI&OD; zwq#E7k=QyU;_KfMa$7Hmwauc8&&qZj=U8A_OQ-C?aD(cF$VQCG`Q;6N*R~CXmwL&i zCfve0MVDNzalXmQXb@LtzErp4OfI>m7d$*(f)|=h-o86iWD0^H;U{1&98$P*SpZxNLvH%4TE?qgC-=;WK7pV$(G2Jz3?)i%Bc@M=io{?8RPnd(47$%x zcMo^i>GkAWc0h${Uh+?Jbv14N!>lK#h?$bYcx6?vkod*z7cs0vh=)|pzZZNk;(EzZ z>z}fh3!h4Zg;%Kjs5N3OJPS$O4)Q3gW=Lb?pEOVm==DGu<+Bc)+pj9@yO zaqUEXRt5?sNd%Di!`n;p<$wFb+4pbGzxn>-5AQDCygMV)0!|mrDgrUxku#B|o0!c@rGUj=A8A%Fxc zbR~2+?%Y$&Ecj6ZnL{Yrt>E&S(5xvt*r*-b0A*Or)ud9gV5~PPig%ASVJQ+KNpD!A z(Eb#ZW(gLH9Y9@a-3TU{<<j#1@zepix(@_Y zCd$~lzrWw!m09`jX3}g*Pekv)U%$O4=pIweV5dhP$GV{qGrc2uPGwYLYM>9Wy53ye zH#-eH{?|7T7=Z34bJjBnii`QrK701XtJ9Ak&SAEquq>ezlBUFx6-PgE%G&h1EZp1^ zSO!Pw$#IXdQ)`Eg;a!P12KE`O#&fyxWGalpWeG|V?)G!HFK(tddrl8_LoTDNN4rDO z+NyS!?Ut^^+Jk+T+!;!!KTc!UBz8On+0n*Y2JkxN$mH zs~>GaPI_Xi!zd_65pRezI|JQ8To@o|E}SAwnrV^9-$Y;d6+%d|<-8My*Rbx0yRf&k zuy#L|-}?OWj?)NB*aIhI?n_=15G%K35-`Qy3PhW1hg6$7vYTVwFmQY2d9SF7dN$Q` zdbF>=bdcUd5gVN_S9Kf<@V39R&hC(K!s;kvkd3>ppjA(~q@obqn!^hrs z{!z{}r!cS}kpcp>vaN2-_+$mrz#ewEOcR-xN<=(HUE%|`oV3Ld0-+ywogosdIMviP zGZ`<3Y&bUU4l^JHU}5ABp$dtSe##RmWE8HFxtSH5r?Ai-9UagL0*+2*$XF)P(E7f+ zEBOn~Fp9)0PzxdE;OW!}i$5kIi-`{#iB>Y{(U{a)qA0X4Gi~!{Kl$>LS1)m_Cw)-z zLUk|z8Rt(=E{^!XX=GX4-hq0R=3oFL^aVJ_ST_g@msf#E)V#uMktdR%y};wctoeiv zCHaZXQNM{%A=$DDov`-(SKK%utS!iqf;TDq*(tQXTjfZsD&7iJaxr=E9%ZEOptu+TlrQ#OL7~ci#g4Kc)J zo>hQ0Iv)E;k%v;?f`KZ0J`s#kAvqRm8=esdf4EWn+>(mEoLZ+3tG>mh7Kuq?Fs2jN zx$p0j11bqW4oA~WYF1rRfj@F?DviDTm%WmPzu0nKhc`(GX~vOaY399hmD`6gmka@*`qSt?Q@IU|Yiu=U%Ko;k@8z>Gr82esr0A zyoP%u3v6cMu1B{lnR>zkc`e>Yg_bunysdL_XBq zS}OE1RBo|wAvrOD;o8%KRa033Tc^ zvjEFlh&hyv(ZmF_t^DTBB-)ifbHpY;m9tYJeDl6hfw+NXvbEJaA&gjllor)E$!@~X zyct!zGH6(K5JX7oOokH62;7q+SC?e?x*iSj>fB#m-(20W_=cJ(p|3(nCFmH*n5Uap zqQsfArIUN*WwQ~v%t!IF@fS3!hkQXMwsHsl&&Y}ZR8WW;tM^tj^n%>2FzT44rFXc$ zH&l`2Mdw$28cm(HaFkhaTOO(|Vamo$Ql3px`5~-3!IeCy4bc-kh8S{%AR^zp6Opd0 z&dK*hO=d2no%67sjG2SrFW93yk@1)BS@baj9YL|UFII*_*h&XO+%`%FK7hx>)H}-Y zG)mHOzQxSZS2{fX$wg$_QPNtrjVTIjEu)WG3K5m7S_@^|mDFK)l!Or8owH}n=h)eqA*@G;i=4U=2Zb`772 zHq|l3jEzk4RB{@xKxYYP3pFgsABmO7J*oJWpWc$37Q>2L#H+U3q!BY{I!t^myhTXU zeTTLak1!$dQnJEuqpV|{rrd#i(dJAOyacL5HBeThn;Wd;*m>dpbiyWrs+|B3IXRWML29T2B0;w813hrJd${0Z7;l#mZ|jUg2m&rNRJ8j z_ZnpEK$W++dn(#g%|bLOHO3_jBQhqTy`;=pBO;@P9N;MgzS{LU{>WGTpEcq7GgZp6p?dl|KvVLn`3eDebcxjW`1^M178xIa4B0fvS-l6Cuj0>@Y`NUtJ9ud!sHBe=u|{hx%F> zk&fx*SUMm<65%Fuphn<1(lRIpXiF_`252M!k$S#o2BZ~!=?%DmHATn{%tn-sr7nTn zXl%BBY2f>7n}~7>7#V1He}vOWHW%w_EakCo@I*tj*3KEq!AJF2Jz{}3hzC(T%p$ZY zj*O+yBFZJog_g%P=o0r&TT@Ze`?N8vC0F1fkyosT>q|8MOuqmwAUhvpE3|_o+yOuN z{Mi?;k8fy2^h8gs&MFHENjQM_x}9T=dgy2wzZgY6a8$Nhfgc%(n+bM(Au{w3NT=ucyrAR z1@j3mGG61em&f9D^MpyOMam7)Fslzu8LmTidOaEYqCZmFb*-5u0428M2zz{s?&AyP zAc^Q0$+qpc#|Gm>4C`Z%l6wPmOL`W)B8wXHJfYTH#W_?uqnifyiKV`z_;-W3HnCX6;b#}ZGHn-uzipH>Bj@TCN#lk-aCnI6Ue$o+frR5Y zJ~arpv6WCrTW2?&yHvq$uE?S-s~2t%zFc6 z&|uh+e}Rtfu_1AaQ5|JQzFg;qprB^qR^!c8xeaVoPR`n4d2x?dvX!=UjqYTcK7osg z>*QjBH$Fhkp7XO}G&P*KsjnLryg^hb#u86NLXr?8=|yHgNZK7bHMiv2w!d0x3nCHx zZ$cHCwmF$|knqLyaj*k*8TE{u1ZEqcB{EqU1Xw<)Ut}Emt)zI*CiM6&?y@je*h9#E z)2TGYTtL%fOHTB@?K6*4m4Ms)lRx|BVL)hUn>N;Q0)A78-KT+VZwD*XL-r4Ii z%7sVhg}YkQt?F>eO(15S$j*@4{9+!gD5eAEz|&|4EsDc zcx?Yv^XAAOw0zKtugopBuvBDHy9;4<88%xQx zVcSObqq_UwOi;nW23qvg#K%t5HoZs~ZA#r1L54SaB01$Jol_%d*mtWHW0qUoK#bBx zp$#rjZMT3NS&bVPNd|?#)MB5y%$_s_Gg)z%XMP-LVVa zQDEYUs9C^syO^tDfJ>LvmV+5>B{7_HrIqNp>~LXS#re-agyPw`EjwwH!rGI!D5kEb z@pl2Vb1&uwT_`1lqpGJ8Lum`nf=^vlamr+9#B7z`8{=T|Knu6SY{SW>xR^Ht{0Q#H zULMhsDd87G>F)NHn#B6^+waI)J6k%iC`qP-2{nb*!tMq^yBBNAB69LO(nq3IPOI^l zo1t0gDCN}te_krBIG1{h|3Hl)lbpR4S-{XRd1;yqO$$h=tzX8XDlShseH#@8mY^I? zv&E!}Ws35w()DJ}IH@DfaPh>@;sa#ipfu2R60O7o5OxxX zgiZeD=HlbKw}*$2-#z^LSKr)@SvREZ&Foo?^@n0_8GIgCrI7+v3g-;xB#=%VZZdhZ z9}Tz84J3EB709Q(t|EzFWezt$BU)Bw*`)er!FAF}ZN-ev>MXLW(O^}x!|;xEOl#%s z;9I&Y1>|dbS=hS@0e1QxC5>!G_lXaQ6H|bYy>l)%m3}UeHlmX0rR_goS^H|(HWz&l z%Z+Nq#mH=Ls1G8L+`=;D*bUWk0D@pdqF_`)f8t1-(z^pABUmEXr#TaT z)-uD@=K55oc7m^TaWlG8{y+Sw30jupUr^fVMc1t7MjZ6f27v;eGg%uFW9v%vD3nxuIJb5CHMPGBRA zM#uqR69$Fc%MBUq=xlIHMp~mk7~$d94A~-$HId!=9cFuV1{OZe8UrBnnA%E0o z>^?C76{`^UNn$BZU|>Vs47&he2)ZH2R1*>{JaZ}@2sDM#+$m^id3JUsuk_PQ2%vuN zhnIWIH_N&6Cd{S%f*zFzmk!J!#{;7BEbL)nQaHbosf(}fdkZBxd;p2?1jGkh4hzZ! z6xTNxACwpW+xabqq2r6YFW;^XPp-e5UjK1;{_zO&(CKeq&VK)T@$m?1=hNT*IQir2 z>94grWVy+&Ajkj36g;N+MMZfXLXTzbujCg3A-6kp9 zQFklSB92iHAeX8*1`kQPZ^uq1nEt>%BW=+w z5n{G?M$XCA!FtdA=CtE{-m^`R`O`fOxFRPC9qb8VHP7IU_k9ife)mxWeAyqt2Xs#p zqYz(%o|TbWvj?^F!`|fQA79}SI6uF2&I_@WB&1HWrSoUDo%xaOXQw#t&JPWXSQ)pGpO#gj^JP zMp!Z@1xt>9nw%f+m2r{t#deI;&C9-jvq$;DKU@Z;0XP&){EQ`6H3f3Wj>0p8McUb! z(0Lvm9TtBKHugwyO^ZY8B;Vj=^>(Y^dibL}n2;$UHYu#J!tr&bo(n?TXQe==URbYJ zdfUOMOTS{4;OY0b)J=mSb_98Y*URAbC^FJHYK4n{<4(j>d2 zf|_hkN$~aZC1$!q5`P?j#pcS36M_Y7n75v6ZpIb~(vL~G%LF1_zGFI}YM2>pzczbU zaGGs1B1s&$yu3L)IcIj;pKj8qPQ2deIpqR3WCuA(ctZFrX68V!{A?}yj>6ha;q8#M&jZtK*DN8Co{2r88uU<7rFIiiOCw9;GhND3|NN@b+@;Q zgug@Lw|4?K9E-Drcx?it$6-k<9Pftnmc$&4Ng5qBJgd;sqk%aE8HGX1-3Y6@z5$o`R;aCH;clrm5KaI3^H1B` zTM8cS2w5PQvtpjPp@WqMx@}-A5aV1&fx=gEIJ& zr#uRy57o$pvZ+>eju=&WBj;nZ$omYh`{$^rD3I*rc*u97cx0!9eCGi!L-IxyF5Uu} zsm6ba11|v`RT873C@1tOuVuS#)Rp=XB{ZvMzs|)b7!Lp#4Pbx&75>l9pFd-o#T_ek z*{xL`9cr5FCnHrJ;3E#c$dxpnLM&lNR+bcuzD86`Jv zc&Cn}%OzD8^~IS1vEhpK`Cp$7Z*HH+=jV25N_P|vQ);2m1O0x~NVvx6C~l^-reRry zWxMbVxe4p2LhYrTsqg$izf@Be^H!bMAiNfQFboq57Rtt`II)eU()sFJ$AIhZ?YSGq zAKWDzG~O%otr*rg1JXJ9I&?$qMayLZZjTvKwitTw1_2>7mkTVEK6}NeiDGC90NK{%Up=z3H>>QgrBFy&`qSFGzf-`w}>V1|F z*V?t{z#cKRp`g+ya}}kwzi5$Zhqlvk>j4OP$urWEBHg3dHrYskLnL4NU1lOVT`1eQK)kXRLfV_c6)M)6#GRXmqz^^z4!JtKSyMg`W~ zQpLh6xr#%fgN>2e_1}DWjP=J`-3jS>J7_Snl~j?EnLQ)kIjd1GzzVf*;oNZ;p^=HT zS=K+fpGm*vtZK}f6PMFN=*YF1rvju+|KnEi9#Kca4Oz!axLdgPSa#8Z*@@$7ZU?Ds z1m9&`<50J&;CTdx;JIW*F~7rT$i_aBi7^>Q7O`>Cc&wb_{71(dB98O~7owule-d{P z0F;eQ6tPsAcEZsRVW3)*yagN?N`h*oa{x_}o}f26Ih@eiSE8X+_99j&k`^UZ*)?Bq zIEl-49zssfEAp6gGhRTU5K70pQcs<0T%t6f8ev(&(FN#?R_2aq9qz&!{*Y3O{8)Y7 zWKQkaAK9099gB6#>{Rp^R2Pxy$k!gS)g=$oT;M*2AY|j+BH=TXkOIgZW{D!EJtY1p z>S4~7Vmy=c)AOP}ZGv$|ziw-Ddn|)ppXTT*gv8)q&gz&tk5I^K=9jfsl;)J`CslT~(ZV$w(;%r6lwq)duAXc1IqGL$j3vQZ68 zP-$x_C#?)rhB->vvK>qj{9UpwCtjG{q<`p}wxOaQbS7qwXvZv99pQJh-*Kp8Mx5-M z&f;WN_~6a4Qxj#Pu|juYpU=5jKWHEhvvhPEGf7{%N5c%sb{+R*AO0%Lo^^b-*M7&( zM#AkG*a9~Y((14;3S>yq*clI~&<4nU6sm*i1kfO-$>ypsiWXGUWAL*E4PlLhb9#So zYorWl)(iaCiI3f+!2#ci|7bFNxwo~WTbYBrWr@>svUWqb~fcl(_ zfPP-E?-gsovt%R15k+xwt<_iU6c1Y@-KEz*Y=_7O$l~E{xCKo^egKbqrpC!+xPyhv z{Cf-?5PMfzN0u}*8I)eXoZ?anpozOPa;f03m`P8Qq26XG(e5hu(B;hoAz*n^$uK70 z$oPs8m!Iaw41Cyx&@E;QpKVs{kKiU16jGe}50ulV6#OSdK&C zw{rSOVakeBX*Ez;QzgNh!7sCuM|#Llc|j)vU&p`{u~Q0&w`gIBuLN=j?H0sg%mEFX z1*koa^JvYJ6~$6h6>KeysO^ZCEM5;bdr=aIbmt3I>|fu%vI$`w9)i#WXI&^jg|_)3 z6UAaPbc>DFr_ABq*LN$rl}6?Nz>!4BO#-_RW5&9~ypBtg!G$Qs#5Fece#=IAQmtFa zdO;MC9SxELn-0&R-gp912o_OU(hB7(=9^LXm;ZQ2p7$4u7E&aa(eO7!50WiL2#=-) z1;b-&f>gDEgpSKak2LuSLutByFy5F@nc(o?ETJUh@#gOI0FMvN#piNKxowc6yO^6@i_jxhF$Sc31ySws5h=XOM#rS@#q25;s6kg` z-I846T#~t0pFJDdxy}K77MHdJn$CM+?R_8U~pj+BdTn{t}eMSS!nJ`2s zBZQHRJ`@S}2X#duu`8J(am9Q=^?^ly_rpsH@Tf(2u366_djyoF-S8~A#2@_Srw^0K zghd{qi0&2bCG=?+o|6r+aQ7e)VchZBmWUELNf6+i_Tqtt=wtrb+6F+R0bOG{N+Kb4 zszH{mENLDk!NaCk^YjFShp06{(*bpBhyPULm6~of*g|c|m|l`t8D>&b+vswB3G&7I zOr`uJWa)W6uPD3xrpE?4tWD>$7i5#wj~a&(Oih-5>ndy|iM6_!k%WPa>`wOvqsigX z(aF)#?2$=emaHh;FubkN$!n|=d;Zi`Y+pK<3Mj7N8lz#$kS~lFTBWY{B{5HgA^#bX zbB;HCZykxzq-4r3Ox|o3Nn0h@DlV_IV=>PeE74B8dy*lup9K6y92CqmM+%EH=Y(W8 zH%g>@LP%belLCpNw0X@KXsX(%n>gRnEUk!z+@T`jH`C+R2IFO`-7o8W@T)p1ci&&`+RDA}{OAsdIc(>N@@l zC%wYHn4!p$A>+^O#nsi($@#y&oPNafD0;WVX)l~Jk;&Zar1c%Rw~oq%5Aoy8r|d}K{Q9Sy=obx}8QIzN}y@2Khk{(~h4hXmw7 zRHnr&2|B1p0$N)e;ykCJUB*^Lo(}eAs=XCx4DJ&G*M!HnWhCNjlyNDJ=J5%AgFJ_j zb;1?!eSt`D`^O)LS6AFkqR!0GKA9MKR;HFH&)mTYyg~wMfWxW=7_N1kHY#jB=|aUQ zAJY%_;XB%5l5*m%jM^FMA9ESH2iX9J#Q{e~8QoR><~1%U2?{SP8F0X;S)Lw*AdUy! zo{~gRqY`7^h();A{iU4Oh&%_nv=bSbpcN0^1hu)_JK8HVP13sYP&y*diVGl9mJ|$Q zpyIQ!niNJPYeA-p6i`0|0UUKyosbb6^@7L^lN7eCts|}{!*AOr#fV3FV z!wzZx003q#V29)U-?f>Tsloj=J|;&4#QIs2o7Q01KoXpt%`Fn6L!sQx=nq(dV-m;h z@VvW|OoU13()OV9OXV6PWEIHJEgIeZ1G{K=3Y-_cBFV%g?L9qa0?6fg?HxTid_@`%rSq0X9g>=N08 zk4xSR`J9oaIFFyOTuEJb{3Or4xxSYl(kve7|7ctZmgMF0I3`|6rX}j1*F$`ArPx{9LpTO(j^z6%9(VT zG1zma-qo5xs7x%cnv?;h%S7PGOD)X1%x@Am@g5CWS!)7tN59e2h2xO-oA( znTgF8f2y+)Q*?H~Wul_&ZjC3-CXO1$3CVyS`VamXga8C~C*#*IQ8Nb+V2A5hDW#>N zGp=Pjrg#p53yDv`8b*dJYkk%NAM|NC9I3KIWv2FukJ(yM}TIafVHc_+7FAPZIXg_)vj@(B3?y;HFYGQ7s1Oz*^Zx5T zbnyYz<(?l`nbL9eB{QTN1*ftrAxYq%RazPmXJe2|PJwnV9A4z|5ZI+yQOlVQKbK6U z)sxqhHLI&>+1b9ZoVLwHD+m+!+1=Zw{7h(UFBI1T2C7Hje-Myd!I%gD3b8TrLToE* zk@s;-vk;gIjlLE2pov1b9eyUOrifZ-J*-GflJqNLc!8bp|bPaS-z-LXIj+-;k0qyv2KfPfV zXN@p{pyqS#7CJUgHM5VFAupyfEF?VHj6I6Zp?Dd#(Lj@}M1UYC5(&823`dn#6|!nB z8Ms?sUEl0XMz8lb+b;y&SR*_bpCRr%AuH!p0>L^madvRv&5gN)l)XutfCE#Pbf5_w zLcjd?a-Cl-u$2El~akuUY;hP7%k*?jxq=iTYsR&Qu3+eQy-Vt>pCV0mRjOHd3@LzwrQI|u|% z6o4h!xW%ZJl-AbNO&}ridpJKCC)?1~clz<3(4VNE`+G`Zer|)TBPdd(3~VHx*ZVsy zqzLgQ*o`driMMzpWC?I0DrP$|OW7!sWH~SF&12ZGJ`>~Z!KoNX^eOxT5o9X$pNJgjH81*;D#HlaXfghexOX2zRL)shn8+A^stPey+|(i4x*VfwdAy?It*yOwK+N=u@e zU!b^|vsbJAF)%6XfhOy$i8%u-$HBoX)~_$0zusP7qIRVKt)^wf>OLiNS=cjDi-ova ze~|_X0497cC4?t;h{huAs08?wfPyqeJjO9#_@{yiD#k3fQuS=*HZkz!m(r#w3_BH< zb1K`~I0pmAs6#!UbMr)iXy#SoNh_!5nMMKBg?W~^y;%p2<#1sZDb^ytWr2fnEM@l@ zG*ApoIW0am-7H*g{HgtO)TXS6X}Mue4gBiQnalh{wo)Qpov#UVWoeXJg}e0h^6J;$ zKLdM)@9!^v{VUxM-DPBc5KKQrzwjqP&cW49`>9P1qRB1Ilx|*Eb>V4hgjB3p^wNT@ zx_FUhYQk^d@db6x$aV3%GKqR`@FlLyb6*R`ABkeq_-@bew^lGQ)JD< ztRs|1cyqLQ%<6_=?m(ubf|>JCeJMMWH#JGm>$3Gb=6@NggdLNWm`=|A!)41%)zpd{ zBvQsCXwuo(u@P*YjLjM2qPca_ka#$$RKkYO&rZpUfb@HE^6k^7V-&5*J{1Zt2POm< zWwKjt>O|eo*xZYCfX}w+W??L%w2AYgWz%{UVVSr1$)ki&)qzIa)D<52#v1F9UGB))${}eo1urMLH z%F@F*c{pPXkwu#!HlE*5?8Ukj6E>ezI9DboT53nr5{3 zibK%DpSI;Rx1{s0aYfK~JTK^^7#F(62z3++Iz-?ZO4Lwhu8}5&5k?~1cK{ubYWUMJ zg}|#94|K9}hIY88(G4BHRE9vq(`ivY3za{AVS0)=KJO@RL1FSnP_xaJZz7kS^C!(5 zRgD-j{Fdag=I`q6p2&A*t5C@xaxfQcY;H{8)83d&r@LD_0(dDVPMjC+GH!x~Qv?7y z+1wf@cLzx4)j|(XI@^$y2DE5(V$DfzbmM?Dc_m-|0%uqZ)2JvjgPS;wUm3gPp3RU6 zXJ>Nx@p>B*F*mv4R+6KfO^?C_8kT%C!CmnjKV2ZibOGwlL4TTOT=HdB1lo^tlT#-6 zqh!oMYzw|1b~kI8jK@rkaqpxqNc`OFZs3vVO|_Oq~nw}j-)L5NLD+{XIWDLXFMz4+oIsy(iW<)td&L`ztCZm&>@I@zfRemKbx6quFh2 z4kgJuEjpt&KoU(h9obNLFM0}LknGb;58@VF^d(40dnZ3C0*SSZp0LB%=I=FWbYBSK(j)0{$P&N~PN>89NsfV@F)OaW&9w3d_f&tkNxkf23&CK8X*VBLe?LE#n zOm(Y7ST_WX)Uzr|otELH;WDQb>X`{_w=0uzS^?6zmKV%wm@EmQG3B!;ahZI0Q_NGS z!UrrM+d~U-vc<5nhWmnZc#wy_<@D+80L z(yY9St}-BQV6vZWh!Xcoe7=P{V}cDGvZemIC|$cQC;(ah%^Ix($If939Yjb6Xp zzsH_BJ#?YUVoZqhX^^pO2^q zS(&2bI`*?8Dgb=ttP})#M77g;!WIM2pIB0!LqGgAztXtgngKtzjXg$}TUh7RL&Ja= z^F(}@SuA51;%hr2jH($c0iV9aCG!-zX1m)F1b0zZ2 zMXQ;Eg4~HU$@fpK2Eb)iO;;2!TB+zr5B{lsejZl?c~XWlQKrRmeyTI&(Ll-xKBE}X zQqWX!9-8-xzQIm;k$=~fzvibH4|D&7Zurl5iOncB2rQ{qbJGm9BT*Eb=>Iv09 zTcNU2BnRMrX{wn{=+5yI)(OU_A^E;wV%Px47!*ZIjCpJWEEK#gFU88^N-Wp0`RcS& z;y=0yHZaCevtP)4SV`?pO_j_;W)5-KXP=KMpTWub@FtH%oGpkfiby z6~hT)TZ!IXs+C)zO0B?d#{LY&p~hOkd$QPQ;c35I_~Vtw|B}k*r2cq6@DelDSc&nP!*LVZ_|wIQH*;is+>cKL(f1 z!Lu>DQP}7b{2B~ekTUGVs1(DpDk@=9u?ICx0oV*MUL6&o znft&1>PHufdUh1iK$g~i6*jM!Zq!1mql9es4D^?{DSvP}ks35c+(7msMAo>THV-u% zCRLYqk+{Yw`7_H&VE^jBTACB#XfF0x+d1x~!90!uICQ(wg}9ZYt7@CO@5WAaIt!qQ zNvF=e*@=$?LbKVtYW78GJS+5#;O%7I>Z-uzc~mcQvN07#;}F%Jdj#jvHQ9s+Bu4D6eFa+M;j-1ic^mjO7J z-D-Y)edDM-O{b^|(g0N#?ce_OU#qzu27mx>?)P0GhG0!~7Msx*?RG)znk+NY^|hHPMzq}M_I z;z88r2sMN1#_UOcbVz?DI1#i3q*z92$R8Jh+m!PsGUW&HoEpP1G`jzb&9rdJea|DeN{j1j^4g4nU zVuTKzuw~b;u)UHEq)9H&q)^AWH((zYQ&v^mn8fo(rY*En*4*_{O8}#do;De8V4$Si zCG5aPe71zO&cWddzuc~=@f37258M(fGlk_khD2~f;p*y`&bepfJ+`XxWP`^uSRRyR zNtA*uPSv=Ov~YKG&wDc>ocky!!Y0a^*q6_)J#e#L2;2Bw`zxjhRs_nqwKJL#6Li1W znqu)|V(-z(S)!lJ($$o{Nk~3^EJe>yW8fYdp2J_gJ^-Y-Tu>8WyELY5F7A}t+~`X* zN6LT%((AXd6OuLJmat866Up|<3%}ag_{T5ralf6NUn}*Ye1Je@6&t7sEZfaPcWuK5 zvxjCvPEajXyaJx1l(9|L=S0yO@}oY?4oAe9Yk5OIDJNH(BvdD7H@jOKd)wo=sCeZq zbE>6w@X<2Haq?VE$#Lc>dN}pUgmC{TVHQa9bbI0;<;M?irYwv1kE#Q|cttMU@q9%| zg!VAzF5=wx+HOwkg?C@NfNeCH(0MK=1dweMjC5^oSR&}zZP`|e^8>saS8WUgwy-f) zfjQ?FclbGM&c2{GXj3~zu=lSHKD>Y1K@C^ly$7(u2e01H z?^rJ5ri$$m!^P#Lrc7qeRi^s3Qj|1hBpI2om{`s0sG9^fwiMQ*oS)s^5IF;Tj`OU| zICC`K04Ea?PA2@r<1?H<%mh3UXywyArLkuKBPpISZILT9L4t8cv`oU;2 zJiuWTr## zYy2uSnq+YsC6FPwr(!|HC=TWy5GG%hPjRHYgBV)|ax7bjcZexXMt9KgGo6xxxv(1$ zR=~8vI;eEB1UYl9xKjdI+$$G zrd=+?+4bYQA2ucv#IHn^$5tb}tMd&|S=2!0Vt&Rm&++1|%|ForSdZA#`OHzwJT&M` zERF#S#L@2Q-s)bB-{Cl0_-pdXfoRcLW9UKQf91uCJ-7rMMJrYrlG(wo>5>L3R+OU6 zhGR&Fo>Rh<)LL~+P)W;>WvOB{E@_qA=rMi;%TVZV3loh57q*!9?5YYKgZE+N+9%$U zy1co*0lvV^cww4}hQ@zes4GgTQf58T53G?a1*TL|zZXeD?_OkvgarjkRA@aaOidJc z_6zJNzdcW1mAyabq%SPmr2-mtn-+tM_x)I(Uarow@-42oG<`8`=s>P_$*JuUj~4We z8pXG^y~tY$$SSy}Ji*mcQ36?94?UY-F!!X1)wp@bLZ{<*(LMhkPf(it*}M2~p~~Il;S+9u%UJ z`0dsDsg2~1XlApgHv^21uxJI+l3!iI>fdl)B-M0!Rdr^Kt%z7-m#?;{ff38HHM4Pn zCIq~z6F#|d!!Kb|!?FWK2t6ilH`csOU)cv#pqW zGp>{Om$P{eXHo{$e=o_r+LCFURVVsbI3rM*&?}PVol;UOK7W-b@|;j9tz7)>K+ldt zuf_>dOVUM*Ih9;wE{yL>r^Qtws;p?{E8(kzi-jsf`NGm(9a&ccBgGI$>8?m^a&d@@ z1lbAO&(ZPu?XBo1D>`R$YB2WQH&T+=OxICgbwU-fo1RvXdO;b)`jbjcsH}$-o39dB z+zw&3wReJap{~Md?GzgwE=1Dchce_fPR;SLv$cUBTL5ebaLEP|^_2$M-=8Ycy3tPw zam|acU&>5X1{36V)_zE=`FtMdm{Fb9kDSCehqfh7w#iCL`E^Os$@%O|`WbUk#@Gob zmtk!DkStCmMU+0%?pde!D*&8?YGwvYm>9aZI=iu>bHj%C;C2W1nNfVu}UMCy=lrOz*8-igmdKP73Y!x>gciu4?( zonGo!-AWYQ5%9VODbFNyq9`IWi^CCfkFwWa-f~bJoW?F;rb5^zCWRs?Z5dyz2h$dj z8QP|3z?2}A>xEsR4jij<1*(7{x#R!7bBFQO zh$potJJgQQPad;6-q9pF98kMbiX8l?7`~8RbB%;XMP$fwimp!4P!v#*{^EB$%tC0(89ZyOeN)yFD6q>mryah=V<4ESH@c$H+%5%dokAs%07>vWo@Bx#YJ;7M=!L8ADlpJD{NA$rJfh>yT5CD3< zCWw(=snXG;PrRPZ+R_&9Z)MCFIa(ac*Ffj5k_^jtTX=S)9)L282=}?Xyy6i{k*nx! z8C79AN84qLIV+?Z3w@V(N1|#IqD7s&+28)}|9pRUdqX5JvjB4|#WsCgGcjL_r9w(+ zpinZm4GwA<6S^>$T!7Dtr>^rS7Lj_P2dQqk>;G}}COwj5S(cuf&V$XPd$@Z z7BZQOwL5b@4bM`{i~QxUe~F(55dn)h)|vO;{c>;r5N({YfwyIPd$ETp={N{0KfgFX zKYMd>a@w*`+SlAV#31=nLJ{oeWk(IS&af3uq;PK zVe`TObQs`ta>#9#2z**InB7i}50^`BF@2!{>21gdd!v@9*VP@F+9)55yRjI(m01)~ zN+E?2A31@_k2i@?ItfFr+tW@uPSwLT&_%$HL4b_dkZ7VD&ziY8n_Jm$oxD_ji8}>U8 zK>GqfHq!~cg}NLN7@{VXV5dYvz=r5}@zzGaEjyN>U8U)c8X&cu-=!D`3O=Li!OkgVs#v&gCOtdyCI~dpK2gzTs?OQA4W= zCad<_`{bzQG0eG6qR$i~maSyn(tg7I!pT~K z-HagkDovYjUO19ms$5+@^qH2ls#dcaQH!}l-Oo~W`K+ofJHE5~1BXhwuY!K^JC>?0 z?9(|Xz00?$x}-g0&Wyl+v^Fr>=X)Z*e*F0lKYXH392^`liNWxPgl@XZ{(-GOqa+ey z{KvcQa-?j9sY*6rD?hEmUu!+k`WNeN94+i6pO-%KUj>?oTvqGARmecWawWzhp)W8~R5*P)x5eFAG)Wa{&b1DD}wndy(sEgx>OQo41s4uKgCp6Cs z;Hz81eB_f3^2lw6R z7Ysk$4AVW>lSN@N$lF(#F1^y4Ub}d_Qq*=RCpAhEM_fdZFR=_}T3E>2kUo-?%uvi$!OlC40sL3o%?m30R~~kN0r# z(wkRK`lITNS>F>$Lckasz+1u#kViY@!~;LVmYKgwdcllBkD5w#sg*1L87|6cl-6P# zhO zyHsrD7j=X3K`H9&MXBz@?^_j)y_ua@T}|18AU7UQ@5k`M-hcY}`pez;%k}u`S~3B=OcTaX>8H+>CY)B~zce z+6Z06<=iKwVgjM+KoDqUcda7SFbm;DC3zW6985x3j%H3Ulhz56j%&G|Cl7lBJ z0+pW_vS4!%=bRu^?mFka(tD<-W$s5q3-m1GRHRyVSSsO~iLnxx5YqWjtMZuiRwj_> zqUIiIXKvAP^MDv*Wu%e`@^OgR-iKVebR=mr_pzvqn_Y8dL4;(_L+9>?C77r7>cn-*+qQI)ITKCHyw*743p|(8{PA zn<-DEQ3L+xD!K$evGqizKH?;99+(kWGgM=mY-S!}nh(1M?TG>=zBO|pX^~Sp9;KhN zA-)lA;}9zO#nn>C)guG$#9#KbSX=o{M0jRbsM{GPjIykx))^ZE9qCoUFPbrMvKr4- z=9H4s)T>wU_4$mzlYe4FcIM{JkoOn3k_lo9r;-_pSwu{h-0oeRpAtci`2vU2moGPr zEb0ynKMc_D$s~hhJlPu$Jy|5fz_OAZBvL?E_=p9(JhW{B-nps*rw7sFKWb!|q-c|L9C%8jCWiV+|DT z8Z97>A>+&9X=5K@CXLmyLrqh+#q}i2X5$icF+?DvgkD#+uQ?N_h76bOheocQz?%N8g7MZ4{NM1d241a5{YXPAVOdXL6V?>0*$gNe4+ugG#j{5$L`_2e z^~ro0cqk&)`O)yVzy5AMo8OP87+b8ZH-c2>o<{u(a_h-#+cgS1mY}71Y=hHJGLNN6 zS2!4uCS^;yr!XfbwJ5I;UpJ6VGQ9TM!h)ee!&u}ncE(gk{jjBgU&bswi2(?vk0OEm zko=}3=nWpi#Ky8g`vM++cYgTh^x)xf%J8AvM-z~r(&2kNI(DU)aW$*6g)Pyh)-Zf| z-z%>}qqAR9MNzi+k9hGI?xTGoZI}aV#iVs|Alo37%xt36-n5j}S_6}1N9$qta7D4S ziY;rtY{a2eX?N>)XUBi>tM7;xKpuc)kFjua`iAFECSz8`i?eT92!)C07i4o%ZwP4Xa@nK+{k%FLkaSwj$g?ufy8cuKoRCQl@Jmnlf0N34Z%HRUj4B z9npo)1da@`a(@5e8)kI6DJ2xXu`7QIU4rZ;(CA>|VRgq)L|?~W_dI(sx%!TIc9xWk zeaLQx5W-u!;$#+Dz9L`wZXK$6VFE%>xO<2*X0ZaKMEiqlaVK`N(&@`cWIElg$)%{r zaC(dV&M805Eul;eA!lNZ0Lsq&#UQF>zVkSllM{of)ETupm4Gtn)AN`t+VTP^(ZbOo z-nju)z_bx4)ZxhiD+g7H@?*AXUKNDA(dIPuu=6~7U5go!1xeXe?Q+{;p;9L{vd$Xm zntEfpd3B#pam7g0+a5Dd3{=aDQiqi#5}PS-7=vknz6fp5i5k;3Hh zYQg+k;`3E41*=u~itJ9z&(;55XH09BD6oQ%%H=sX1qg9W@%*GP|GDv{<)2M%71vk+ z0=W`%t8(KUi|Hp=upBN#`np*ubNy1q`_#^|^fh~Q%=K{gPB;0Mw`d`6=Bnk2hp`;J_y{MU*RhCkJM1~mh$K=2Z%k`A1M+)fr} zU%;m0>^V~o9~`T>)k8w+-iJum88F-8!HMZ7Nx2z0$j;!}V4>qSL^~cFouH_3-6~OF zxtGmJ%)Hfh)YJz;R;FD%Dk7p`CzAJ1`7gf)W;Gsi~#HiX1lW$->u zMI3|+Tb2w}sYRL8TVZf39iOA=U?uLdgq&E!Z|7X9BI6aUh~!p?LFA)hSd>hKSpoW8 zus^#e2fIicPBxS^TC#FRWz!whi8rN-%9qQNT#X(A`K-}Z-l_6;_yj+w8SfnOsOJs7 z>IJsO{%jr9FZ{L#K{s@dA-vB33}=x0iHD{D(P0}26J+vWCP>FquUV+8ao5b(yl*BT z4Ofc_eEJDdqPUfj0#=gg1JVBCOGpn1hX_BRS|lu!7KX@x6Le74Kgk0k=vipFmxGk& z+LDVpi_*KbP%Z$Gi@|+Z+ZYQ7WMrM=HWcXaNSGk%Oi;L<%tlBip(8_{cz<#9iw{KT zBMB)X_vyj#>}3B8Wd7-1v+4eC8i@ER*pWc*tq`=81vlf4SL4?FB(4g_Dl!7V?E?wI zDGKxSm)r5>4M~FTJ}Oc4&F8B-cn7ZU9_}6hT$7$TtL zBMj>ZqB5*Il*8uEAT$%`oo+4mbov;ZA=&y--Gj2RKpQ%wuURKlNFhzAV9Lqt^hCNe z3QP@86`eGvOqhuHIco=CbllE#U{lers3LGZNVX_v0zLvlmF&L;PzP&^VcWlUX>EAhv)y!LCsZ&XXwXmCwq-Rq!7L153U3v96Q1&ffuVL~&`JV23DLLETHmM^8RMjwihPBo@MCM%LNk_~(A z2@PapLsTuVGKd84QMwgGcLRt-)=2@_#}t6^kMf3woarSrx;$NYlLVAGGKJ#t6U`I{ zO3(pGZ0b-`wRkYOA(oztk* zkVuGEmd?@=LXC?>J>y6)8Xa3tomH^G*XiT4b*m-{WK8GGV8PF>S4nG)$|f}=b_(LQ zcslLQkBljLxDC#{C=cvqowb-xU2uLo##ttD%?y?n6iPW%E@?t>h`EJ31ZVX&cQLQ`RV zt;_&XSgbQPc&RMnjMI41X{O-crQ%r*xPN?Nh!MW|0#r868>rCvF3DHzXcf{K*@6jh z4sKcu>qd1}Buy(%Rl?G^nZ5;FU`U;25=T$k?CWk+~HX6bwKZ7ASD2b2yVbBbzdiNM%58fxe3NWya%V zEZ1O_Ue{6u3kw^=@%-fA*T4MGX=9asW_y~?_#5BfK0b`wO>y%tR|4Dw(_nTN`jHr) znawz2-efV*O(zdmH(xM1{`xO}vwv_nd3a!!phDti*wG7iO-#8EaX}+MMZT^PHyP0Z>}yg?tQp8i$3%6 z^hyP{`Io$Uo<`BWW#v^Pe3dP6M6sa?1W3lH#c+@j_^dl zy2+7YDWSeL#wdTwQxn8g@|3xny<`^XkIzr~r(7IuizB6OWBDrKa+&Png30lcnS!q+ zG_K?w(5p>0TMICQ$llynNU%Ufmb_ZV zcdVR#63Kzv?qOO!JcjfYaod5%FQ}n5J=As|bHq^=fgCib*X-E9q>9u3GP)yyq3LVG zDmrr#BBDh;eYwN>^XYm#eq@&4)T1wHzjTAP)g-o9I(*Y@<`y|nLg?rX1#u@{AM^il zIU-B2DpHzPa?nw(#IeU)Ma3lpXsl&Ci>s(PgLEvWoA0sH?*N^T;ZW~jwwH!EN15tl zRAM&c+Q44*XE})@cKdA2FUz|`V`>5d2Y943BAp)aZ!_$*?R1vshBlr|?#6eYi6CL| z$NB^B1C^7A*nob`$e7@2_G4tPY|2ade(l|L+-i|yEX&2XtSxw@{1-S_*o|@yzb2rp zSjkzZ0`s9cFi;{|vgBXi+;iIu@BmBMxu#=S z0d8k_wypHC6Rcv(nsX?${TXCs<$w{o(MLOmH0l*&uvRx#2jE5K&&%oj1#}P;w-3aG zjvudt7`ne6qw$Wf?jB?w8c&tNo;Q>w!tsT-G2qb+&qb4Xz$8;-p$`ht1AFM5syj5q`^cZnm;AGpI)G~c3^eed! zJ3TWoQ;Z@H@HO};*NkLxZckxWh65lJ2cCc`C76R!iM17NeK=wu@IH)fJBh2nbH?(j z0f) zisoS4pVG?W#L26bXk1=lKnn1F?{II3`}_so z*LzA!v0woMGIe+`qI{^m&d0Z;NSgF$IA?K>`^+5b4EDtoes_kml0Vk?&ss@iG{1Rs ze0s9qq;XfG&*M^M=;tx*%9W^la+%kKtRNZeP5+eads#6eZ&d<#jd;S~I_#n}YE2)E z@P;S|bpP=1{O!g5t^)P~U?D1s(n{5Dib#-qOefE1c}{5DnoY#H!+QarL5oBNp`V~6 z(%MGStr|3qGD~Qd0KbJDgzk(H5bF{88={ptZp@ixVt(GhSiCg{dBg(vfdoUDBa=$JY}^vBe|8@AaREyv5q;?wSTh@(IN zK%H!gxk-2;WX6ZPDH0cR^<@0SeMrJVwLwvWQSjvAXtR_PEjCbIJtG=hw7Zx<&_Dqk z&Y?!Z6gr8aq>AEZS=CXc$}=k1xyCN-`jX$5K_>UQ!LfQDQeZ zfaq^z#pIrXvU@t7V(400drY%}>KPP1J~r&6%7X^s!0x+1G$&G;#-v{u<_HvI|X{r6V@qTwWhX zqJvBv4&+q8P|$2A$A~5hl6+~^^4M{dPmeLh{^QdU?H!OhBRzAYQxj|ni2LP-w>{Ft^gR*yjZ^$0XAZYAyqOFO4B*jTp9i(N z8Z*4oz(lPfx)VG{LFURbIwJ-`R<i6~`GgJ^~8EH{>V_D>QoP^XXElLT4v^+aIf-ML)1(a`^qOH}Nm0<^m6xtnz zVGX>V9c7))yLWGn4i7mVq-^YN1*+M!j)$TW2zQqd2Acez#fPIxh+r>#L<6`0|*|OLx!PxvIS9CDP zvG3#+_=t_5gmisfZ*feO`in0}Z{*4=R3WkW#P*l7>*F<6D3A0rQ^*3G(O%I3xS)O= z7a=j{BG~t>g7GO>q00E>^Eh4t(0w1irY(wP$GT@-8a>X>C^n#K6qMMq0_iOAY6Tb- z(?gC5?Bhv|jWH>C!mOp3eo#U1P!qNE|Ns8SA3uHO{ZEfiPLGdH4i7HQPR>tHPL3J2 zd-$u7< zLGOslp|1o*sOc23QaAF-p^769#&} zuO=^d-T02ulTqFRT;dgz7e7!Jb*&_DG;eEEZnhX2k|DL#mYi3}8rDvXlH4dE>cV5p z&GoZV5bMG?3PcitOGk2m+*~oHBs(M}l*j%>XnX3{B8779@WxJaX~6)8eJ7QdrEDF{Me2ktWUf*6T2{xU z{`rkqXsY~WE@9@bgnh-m=4%}i>kTf8xL zkrwzjK~hFcg{Q9(CLfe2@M4q=%@K=UcC?432eoyxcchYLm>@uaF^=hSPp%2ZRD6H1bK&R~|wMe*;4V9}$W6p~nIx2k{V) zB5a_1AQH@6RCbnzD-sXFyW75P*}%M`s4F$VNBsFt?;SlsDqq$qQ&Y9Ft|je}0^(|( zW)^g2Xc-H#sT(*BPHt?;-ig>roPG?H^lj&4ZrW(h5Zd_7ngPFrRU|79VsK^*qwo}z z$M9i>k6nNgI&L(*-BXHJ3QC(bfoYs`RzWT_1Aop4k}k$^-6W_ao^E!qyk?S@ySy>2 zhAc)11sme4)GN+hCa*2)0!51K$9)oWkmUVMV@uhI0o^2hE!ZuFH4!@oL=1vd07o!0 z@vBWvx=&N@;+pZb;l=Y{SC_8XHjQUdcMLW@4m0bSNi2=MgL;D2{o?G9fK3@Io!<@H zAz+uaO>7t>$z?`pIYtNG@AB%3^-`;zo87coO}kZ4%9I{FD_6o!vw%_}``58kj7TVR z|2SLm-Bp-q#PlLYJ+@2!%wgQ2mKOGNx193af>UGdsmHTcGqk?kC~k>}Y8vS^vtj&v zMFuk~T=Vci0cm|Cu z=G|G&Q1fZNle5E><5zYMB`^?Kh6=3YZWuK8=$AcANVZAIvdq&tg3Ra`8G2Pi^wY9DHA(|wCi`vKxY*I0rdDn^{B?-+=7nGQk(J1J!9HU$|jHEL`PPh*JNX)HYlMr*~smBI(K!i5rAXRH<1(;1{+!0 zU3GptEGUDnRe-khjPond09tJ3)cXT3LOPaQD+VS^rz?|3TfAnPLa89Q}H_AD8I8qLgvG>ythMA+^4 zfvF*67p#UsfvG=aS#Vm+USD@u7&Plh+Xf}$j}S0p@?#i}K3PrOq=7%<*^DBD51USK z391)5WyX^6kHo`5OM_u&GSO+%%bsn_z{Tm^7>_j_51o)-bDx=d^>?7uq`)tfmrddC zydmKYVs2IdA@*g)CpP1_8tBj@U4(31M$M(XI?RgrD!FJrb#N94qd}6+C}#wZ>-WXE zL%&08KwuS)Ns(_`tn(}s&>sy)UFwfJb06?V(?`0cst;*$!HybOLluF(({FJtvopkRbak%BAx86KAD`Smu{P7@h|&kAM|f>6Ki*`XN7@g0QY*z)6KEHOcaeAnuwK6Eq$=3l3nO~`~Np~yEM=|_p$5Te4WO815RoFnilGDfctkTVSaZ1_kNJ*ShUuP;2A7WjtP;p>Gl3KD>$QE7*K3Nv!AD3Op z{cvM{^m>IDr9b``lG%7E5h?1ATgG-~cK>Jan73oBKZ^PKd^0idhf!kE7K4cRl(@fA zEQ8XwTd%H>Q^}Ln3{)ElI0?MbX@kpaTbE9}df-CT7GgaT7SJftEikuB;*s4S(Ozkc zDO@0O$vesLjt?zt9a3N@kNHzM3v&-*+0cC6*f;cc0za;lm_`m~Q%jgBkn)EIVdW4f z8p?#bf?@M$rXGAiELa`9m#>+_8mJxgM3{c=Za))s0ZG#R?f6Mx0)F;5a?Xwbpfaw5 z1~ODzJBCNaKrHEmYKc!t$#jz|tx8@b*LpFn27H$=UhXfzzg^kskoI(Cey9?kA*E5T zfHEk5Mc7}*0&oJZJoFg^1nL>FFJW=Y@@cKl)YoC?X!+UtKmvvvm?6x-4tch{i|x#@ zEcyn%h1rBBv!jKFYEOoa^nn1lXdP@ZfbsZ_fGAvo3|>2Q$KvmfrtNsiCX&L*$x*{e zlwEO6#vOJ~u?BdN;SYld6%!2yWHf)s6-cECaBMp;stCbbbHi6ObB@T{n0QFDqTjd` z!7-?-DBk=OGGJ#1V<%uYZfMKA&gZL4Fg63l)R>u2J4Unz%uff7$KL|6Y75~Tibf^9 zlI>N!10~V1ga}RobFc(27idayM045FVf@?y8wo@5Uw&k&o0^pcXbgQguGDHeD)W9m zGMlAj3FWX+(l6RT`m!m=bi9H0b0+s{Cw%Plmzz(Q*FSx_gq5GaA3t6aWd>RktpFtpBm{;T`s}XE+Xq-4k4}z=)jc~s z<{t$;_4|8!$|)`GMdw|mM2sMIC<%ak=Ye$)&_;^i(Cj49{H=US6^K2W2_fPH_5bYf zJ>EywpC??2Qg$&}O@RqZ?puoxjl*Ic;(RfsWz>P}XfOs1M6JL(I%o+%1*AbuwI9 z-W)4g0#va07hhgX;bA-&GYtbFQMVn3WG4SkRy0gzVd9(wF}#Q@9%dY|lNylEK6 zdGTb{V=AI?M`A7?(RoKoJ=OsYLxb<{)15_CVJuP$%K*C_>sqY+>h4OHroOG^Lpx`UJ~$+h8c> zMvDAwmTW2?QHDMiCLlg3fYfzPu|P;Opf}OAu5TZfOEm`#7^8VSu;I@4^C({G*smFgvmz9s#lKe>Jhwkg3lQz@4h*I`{s;f(DaHi z3?TRSLn?VR0?yNPJ2Ggd6SAqYUJEK~bdSt}D`}e>W^WlO#C9^EwHS{mw;ZuuLreXL zcIzh`S{y#*xz7acBj^G%OV` zt4SGU^fjfj^=)Tl1Sws;F@4wuQR|uxD4R}DiyC0PIFmsGN4?~ib_d;?rbQ;3JUmis z&V9DQM2v0*LE*vCh~7QEow9~wKenk~WMNLw-byx1#EDlSLYMB$T2gq#U{^6Hw1eam z$q(`<(EkZ`;U@H~yU7cZn!SZerN2LD|L!;6VfV#sz4kze5e;yn*`v2|9(3s*&H~|8 zZ{b8&JWw<6QWr6vs8BwsQYL9mgvZM8AJz2ANlpVJlK({_&W4eT1c<{CewE{+U8Wb_ z49g%(C1af0jTS-Wo3KPy+>L3c)e4Kv+s{Rzr8@_n44CaXH_h#W<6tP zX+bEVt16^LAKE2+m`R>knS|USbO)n@!eE%Bcu_+_f*DRgMrmILcV!avbC#vyKm4bIHGZ95io3zlqNW= zRTRpGVV-PFNfeksjuMn!`IHw)1qGPBtvoU8UryGR;l?K2N>mPkV^KGTc+FzS!J6^0Q z!K>Hs2uwEqfLdu42Cx94j+()wqRfXTU{mT)jwS7jvBw?H>6l|;a;CQtdU2wJf-O|F zrAM`?_$30q7?sCEdya}2DszNPaSaCnK8$CyhjXNLo$*+v2|n~Vzc$9Z82t8RFd8yL zAveUF0In+%*k%=u^d>`rNe43%VV7*Eq+2YSdNnGCT69jq7W7e( z4&@eievNk1!2-jMs@Oop=ebrx7NNH3(3xeJR@o;4<>LG-=~wG4U~H9=9Oaw}*l4ri zR+;}}Q1D#h&mz=i;-;iUljXN4$>pZ8N=BhJW+m{|mrWAX&xQRV9NcqAKHtFM3ez03VmXA96!!JeYyGl51&B$ zlLheY`Ptj^)3+CA@87<;I6Fm=7$zfbs8&*?K}cogNb7K{B-p67_|iF2bwywa7PHu5 z%hQeYr;dkg11}^5XVBM+zNhVR)U;Ez=b&e-kdNcLr`Z%E1-H|5iT4V*fIryZfdboG zkYYHW`Z{U;20{)U-~gq-OYTA>!^;!ZVO33Ug|VH#lGdGJ;p9%XncQD4G}385RcrVZ!Vy+w zVp1t0t@7l|H~i5(IG4-G41p1fr|VjaJI=V#k|Slg%2?`14PFvkMA5mAvUJ(Mf#MrJ z4o;>aR@S{7cGQa584r&peL=xH_V;#GnO@G2%mRy`{}`RW(j|?=@kOlB~RW*H3^F?(ebwFn@%exf*M2D|MO869LDAV!`)f%2ti8)SmOnZ-R%44KxSq zjK8v26(mbwYMI#*hnpk(1(bnM?zo8^@;zmBFDws_NW5mW0{*-OaiXZkt`dw@&&h6TG0ryT) za31QgvUs@})yU3mN zc&kFcOJngbkYw&ojmABT;Ned0VrG#KpS?Z3c9y!zE&rt|xKAvzy4*j-?n8ltu;VqT zUas&@xC>0bSJ+(fvOUAc8RJ*m@Z@k2ld}x3;_2zJzVv!wsOfnsqz3i55;rBw!P2=+ z6ML1R#*Tf??Kn<6KbW}2c1qfg(r?W@glsSs(r=OGK%)9(1^%jqS_pg5!qV&V?C z(2{)_WdH+>hj}xz3NQRHf4zH{vf>c%N4pG$Dmt2f&}Vvgn~$^7hKGypfv_ETc%b)j zz;t4vbd;;ZxKMxB+&{v!gwuMW|Bx1&^lRPNY3c@1WapTa4N$M|Y2p zKmL3vBL(L>TpffL0~w(uGA|RCS{xUwhZ5yL7$;LrIIxrqt|gU$(^zrDhhrikKu&|6 zW+{xkp_QdNcnf|-PGWsiP=pOe)Cyot;Aa8FP+4x@hNd1W(8#7l)6}uUMdlZ&Fqdy^ z1q7^detPij`#102zCoEfI65G12Pv6wCkSq6Zd;c%V?58$c+e)6NytF;Jk79=C>=y1 z#0R^BIhFM+$1}ar0233RJLzH9bWwzaGGAiGdNL*`WareU$Y@OzpD2ZmH|`^|k+TI^ zYu$FeP*IJUk>vBRhnp`oQCTUkm^?(dpxLv!-YSS}O8KU?XU>T0*$)_;?RgBn2f3j&4t} zcszEvR#&V&tdLmRbO+;cDBs1KV@50ykIV(OP%f=M3+b~IG;KAV%!4)({MaH0m>s0^ zn7D$ccpT3db~U{Q1Vg zio$JxWKZ1#H9F8-+ikf6@kVr=fORnyVYCwQS;J;aMeypl$<>;BheO6#Wa!ELl=k@M z{dv<;zsOcGwoy6F28s%_h-9J0!sJ}_f$tRSyQ%n{(wN~LPLr+)U+om$p#GunRou)$ z%S62Q|C|<8(S0w#PVL4*kywoKAmfDBp|3)TZYJrbH-q0x__HC$Js}pFb{XX_8hwBp zMO}|K`0JRg5SqH@I2tp?4xbfOzK~OLJf8D-SahqOKd&drV!Qe@@GQx zqK7($SUZ~T`+fX}%wiqQ1=8DDX}El`62u_-@k)XBs%4cq{CpI&#;RnEOmIX={9cvL zTTRkbk@%LDEyj{U#KT`TF(qgyo2}iEV;IlncDhO=BfjuK!-{C$k^qSpJNj0NU>Tn~V2vFEG@EPAE zUrZTy%qGAcV*W<_2u?(;Z1@99Wo4}}wMve&UpbjICXG_f)ZpBld=Y-rEQrpn8jgS^ zU)c{mvy-wjB!%LkUS&zKD3j0??#rzJFEM6u8`}QTz~Po0&n!B05vp-1R%?gP81Vrb zh^Al_1Mj_9s&e=`qIV3aTP+RFMg*^vQ~S4ck|`*55(>es(pJqMu29jaGSGZkO~?oLRkDZF@GfUMciB*kNq)V9D1I` z;x2Q*-Q5I@EJ8pw>fY*o^F&b$%8Z6)!DHy?>?abzq8N=`O+n}wQ3$C+Rsi7$Jp;3> zhoPUVEDM-0+q5_#RH6yO;>8}<@?2Y08XRYh&Qvp2_=G5*J+!4v)+Ar`g5uHNV<0K5 zGT=5;0;$%S$}%UoMm39Yf0HF_K~djcePQUnIXlBjB)Ka-M(aPWPjzSY88*+7(SrGi zm&+7T+)~G5{Ry8=coRxoFz08=6o|w1Vq#j=a|yFe3o`!LDIpl_giD3;C!)S{(^dQ1Cs*d3{bTEv; zGza^kYPJTq>DcsxY#AQ(EX2Z?SKh#kyJkV0#dgfE!dE)uKIhQ}EDNy|Q+A648ed5j zxKZevJ( zbFSojZYkA3uP1*u1szZ3=+zCoti*D4u#d9wAAbJ>{S(s?uppj-zN1n#)usz!ETtO< z9nkQ4x)6oDNa8~Shcz+tLnyc~`jADNN&^%tV^+6~#fs$!CTOBU`3Z{^Z-mx*3YTez zSW(p2R=?ReK45ri;p(X#8oUXeUdF8B(E!klK@-$~S;{NQX9>m)5diItI&aSpKfJm4 z^{?Iy(5XzWN*pfzHAH+)n6Sd8qm0)_`^x6LPdu+kUA4Noi*}r#25vqv@_L1JCY*Il zKb9Ia1eVS<7*$2NtHbZrqpoyKE}_Pfc40s>_r(k(wa8I*3}MC^O`wrzk1$8LCvIzld`I!7v@>O2&et^-GLeviETg`^l`QPkwVK4`1a=T6oG_;HfaOv~les26aeEU~NLMHN0s{~MtRO)6)oMEr zvhd(6u8H(yKPzQI<7M@)EtVT|r5ju9S;(uQH5Q>Gg>Vt{ET%2t5VOz-zwIzUtc!>u z%sz~o9ZAtEUYR~cmu>|SEKN2Xi@Xj3i@r_Gn`5J5)AYJq`oQ<^-kcsC$pL0Tno`AU z5)#HhXE;(8i!ekoQP_ShyLoKf^c!Z1wxB)ANo}mXlvW-V*@O9&ULGO|UQ_we9J9j8 z!rDg#T0$0vOMSAVn5R&2@^;~s+j>Z@S0T39@(DS&d`ryOwN|_Fa?j7LUw-%|9zz<^ ztehL;k<_`_Cq5epQ#5(Cy3D1FK|PX(F^k0}M{$H=#W5fz^G4r{0FK#MHI@IOk3omm z+}$6zQ+8wDqWUNWMju1kmKb8W6)0eYis4>QPAV&$z%Yrlq$9G1F^o;e0`ZmJgvo`D zID`9rQvobj<~ffGj;S9aQikh*b;ZwB7Tlg_oV!d_UemDkU{R8X*#R7lI&KL^%faC; zU4+}lS0m?N(xNxHYDokoO(J2@R7|I*`}7CMnLsl!cOYLdG2u0((*RQH^&}_7En9Fj z*%O4`7%FPZapN5;?c8cMn?7O#qQgn|uToA`l(gY;&-PW;u)s#N6FR-<)yX2CpfFTG zsMiP};kHcEG`hnteY4uD=^)zye=Gq(VI)*1n@`c#0(arp@;W8hIJ!^ZExBtUeh%Mc zu{-5A+k>|p&i!K?iF%;p)uXiEC~B4j`p^U#^yPh)6e=9r7nTnc1vF;sLGfQ1!r?w})upTj+|1T@K7)x$6PNb!mVeSIT>gZO@T8I+K462pLLR)u}lRgnUOU&;08 za-~{I2KpKYlonC>OSLjyvety57T0$0KC=5{bhFjSj;K0x!1*Jpx0m8;3#9Xk0K%HxO6NEp0O`Y4NEOQcycd|h_gsn5!8=#b5 ze}UWc=hx?l*&I8=N!_*CiQ8 zYz2?W5tBTW*+&n`{1Bzos6&;6wUQ#;-^=<_phoG;CJSr|DKY8?ZAV`c3lH+HL*dvG zqZ+FytDA7U=DZ7OD^nuDl^Sj@s!b=^l?1~lH;LhfdW$X^6Cr;zJtgNe$)^!Xam6!I zCQr&j>TvpEQ&x~zVdqKw$Y?O6dQqiQ$!R8=?|F{2*d)x(n#Dr)<@3+av&XZO<9BZ_ zsG-C@gz}?hGlaZ_wqN9-)G?*1VSUMrw0khVaKp6fb-zQmU-N$IzeUD`+pO zI;>ke+5Gfk_-0F3G3Up8#W?a{30S>aShtSTDLg*Tc5G*9$TvcJ^c&X5ZhF&eJKeu&x;}o@bH~!((x<8OALGkGj zoRQVmrru_-NQ@^GD*|&^d1FRt^IKd{4#P~`s~?jF2^q&uY3^1n8N_t%PR0NJZq?P9 z%T}NZU>#xxyPr(K#S{Ga`SSYaZj7}EW*`0nH>bs@Tzux?v;r`MUz+_9dM8`2p9B;U zN2qc$p*Y604!Regi^Yq8+zW_y&>O&Pz)K-yQ%;*}sZ33YHpa;|A?AxYLI-(GUidbj zX$E0HF^H5;E#U*S-AWTnhVa&m971liWVFp{Pb-Hpov#rJm?Wu2uWrq-Qz2d3kiB9` z>d_2QxE1}r>DBpgIoXCJ9p|kX(a6KrzuO5cre zCnduM!&Qm6XHbLsca}F1DkVsV(czG_9jc$#2p)}TBd9&Bbe(nzDBG?>w6lSLe zqzPiGP*->T2Mv_0FN%yc!pK>ol*|E4uJm(|RxW8QpWEdI( zR_g3=yxln3?-L%nKkQ%(g2o4KqLZT$Ur!H*$NLBzZO%8=2`kkQvjD~~4j$}wcY7Ty zL?7N9{>@*0|Lt425)bGCilwE_votW`pT~>W5W>C@@|wf^A#a9SgLU zp3KLpNz7kmH)PU?*e@bs8GT+YwJ1DLAgh{N5OGH*TYYJ8Hyv!6C7Q8|V#T_nP9-#y z1(A)#RE9IF{NhCraV`XLBO9VTIZ_#tVTMlf_&7x`7827f@;YC>%%73SMwqlHV1nKm zj2&fp&V0qi&(mjoQOFq1lDT|%m^HSt-_oyUkI%ey=+z1KWKr8V;+J~6cymff-NwcM z&67OS!PiJ>NU)3=+)+FaCH-l!dBASW0_;$6UV<5&3FGGB`ODqx)Ai)1%kfW__di~a z|McnZ$Io{kzuf=)g`}iUUv3}oAD?q1)ZY;kTT2O`7GvF+U1Oc^GX+203**IGG# z8HBWr!Y$T)bM&wO`p@1|IafDh1w`8D5~yrI(7LTR`n{Z$TdidUTg@Cwofsb-G;6Ms z7tMay7CV+sHpz*Wfciw7P*e;($TPG)w$$T8>Oj*tMTJ6+#;2QNYNu1v(6(K~DYE58 zc={GL@9>E5E;2CRogaUAf1wa^F;VDut&i3jw-%K7E9#fSM)fT)pZL#K_F4@TN2P^^ zXW5fwCiP~3J>f_a#{)OW(i3wM{}Dw6bsaZ1ubhJSO}O32ge+0hQdQ)SJeOT=$#dx# zoE*bimf+wp_(mG|w+FD>h@^QX>T-Lywfre;c^Nrl!W zlgq16<#J8S7}=q0>gs4peP(AWl(%R#F^6w0H?y`eycx{X#}{hGL`56D?}C*1Pb@Zs zjALBBRNRF zg72_bwnQ3eCuha;Y#@&QLUvGNzqbOJA&O93jEzLmi-_8=TDRL4}nmC&yG||GEmP{YpXfk9qgJkp*^(fK zof2E76Kee`=Vjl;wkVn6={#+@r0zv&Odr*jGRFg%9R`eVRoJp~fs5z1OMfn8-KE_F z04et@zjDkw>7pu(dih%0QVgSr0mirRX$#$x|4>PxV7MF4{`Ax5KmGU#;rW}l=fC;0 z?|=2}`wxV#pAi`#PSJjkO@`D$o8@M#!`O_HOF`1C7Ezihb%|=MVM=_@$#vSegn@Bm zxta%zt72$NmRCQ>84LmKOvlUDXD>YcK347FUaKocFyA&Ut`}ZZHd*|EiAtdF$;!hI zoAoQFby{qy|KxP%--bP4u1aHOU3uIg|HXW^&_*5Nbu?y5Y}vEh`v-_QFrN{BK@Eb z`Hct@_5zG}VdPGWPXiG2^rZX@L?{86EL{1uspUiO)pB+)9uyv#mQ7Kz`$!*N%i%1= zuPq)Q5kSb;;q_}xk#?M@UaE))2dup#l)p&Gpgo}*KtQ{{zqz{n>1lR1A;H1JEPO{OlBB}UEv9biJ?J1X8KJAiX2eitSL4U&YA38nOGA>9ZGEMdw#m` zl1UT7lj$TJCGF9xG>vAl%LZIS9UdJF&rkMn=rMMv90DH%VQ@{Fr*9LRZ=J$Oie*W1pFO0j#$NA%IMo*bIrxHLs`Vv2JeiGS<^xAb0XNkeKvRQz20}e2S zVUP;1@sh4L0rg$ruw}Qu{l&Z8z1>^kg%=t|Y?dxcPC%goxP|d?R0qL%w^vv60EK#< z9MF4>{BLnV#dIU@g`(9qE8)rc9#;JhJ8W8WsoTtcqH67$*@_k44$>+i8Xd`iASn`= z1Cwk%*><=yJ(dbIsoW~L&qKhCcS_3DNMg29-qe zPKNE}+dVT>#}Px(GZ=jymtlm-L|0)|)T4P9OpOlhXBJDoMVlDRHe&OW7oQSR_ca}V zmGZw?u(bXw=>;;M$0U^O-%W(J8a%&|kf{v)^iO)|!=uQa@9rlzw_^|~pod6x&v7g= z;U@y2lUbZ06}K&v1=xvpvwS#F9aRcWocedDK5wCEgy=}lRD6w%uztbL(1;1%XfTTT zPIjfhJuT%^mm(V?SPX+3y#gO9!w2in!-QimGnM&;GP8q$2)^(cN*$-E!i8txgR7QG z=0Z0z5X{XGBP^^IqEZ&s0PcPHtJxADRwBh=Frh>o3CH|s==ZYaItFMS#0jyt(WhFb zaOS5#u6vFIG$T(pPKUy%6|5!uV1k%J6=*LMK#N@ITO)&-8YxQuT;&Mc6Pp#hDv|E8 z6mlOG(nBv!nxOd@OqGMu3{VPrD}t7JSWD;OWND0En}pUka)HyZj!_ka03Q#;z)gr{&1}D&^akX?= zy`$D^8mqls>iBRV01+qS*}&XGU86c-72@ycKyeWKcrfIg9w&{uE!3kAZ;#)R(0*?h zJq0AOoFeErOASI)Fq99=QH?n&&#>dtZ6 z<@31`;Zv$GB4e_?pT07V0nMQA*+@h^Yh<%y@J$1x!$QF&+vf#9o7EKa(EaSo&EwS= z2F%A#R}UYrCLgaSpKczm?q@$=Ki*EBC$rb<@%(NAM1)n(uDMQ!MOM?=NVJ%kK9QG? z_V*av06d+gad>?{olKw6q!4t3`!)|CYb89nnU)z61YKH>+<**~0xmd6iw1dkR29TG zKr4WL`sVDI7W{mDM`yQ=lJ(Idji5bRQthtkCP1k8;%}yXgYO9mzU96r1As`s?8b?XAZ!$84b0%+T$Lk7<8#6P~+iboJ$Hm6J z8T`_3P7lBUaT<~~iZioK0%)j@C>fL|!NqmJWgLWIotL?PqvZq8lU8 zP_DUFtBaA<6dm(na=r!$KNt;oQ!qXxP#5O2Wx3z5E=2@O(%pfs_2S}i_7tR(4014y zaT-(ikWR}(?Ph06KxlbS`ugJoT7tr(;e__g8RnD`kgh;%Jp4X%ko$)jjmmhFvF1gq z3T=Q>g1S(mRwhMT%M>QS(&!-GHeUx_*eH4Zh$BhJONDyEYNT@Gbc-)HGsP>d(4OJAsQO{Zm=GY*R}|p@u7CAX7nQK?oCy*ADte0L(>hlGniBD(g)) zhaErB#mc}gA!;@DM+K?3oaZ+wcozB7ydUU$ zDyOoV>C&%QoU1%m&?Kdh<+ZuyYrIumUHnCaDojJ=o;oLq;bK)wc~ZpSo656v zgsr5e&$;EbnuQl>TeX$HWU7kgE_ZdAbxEn4uR~ypT`Xkzv6!2&Os4UIS}{fOQXh7< zFtmfQhnN%B1hD@fKYjVbpMIJ?PKo*Y?Qj14x4-$bUwjMQ^C{F2;JNWShQu_DSPi$} zSkl!>UDX}0#5yVhu3XJ!f)7qWw7@)~ZZFZYM3Dv0~vjPX}T6(eN=K@7Q?| z)p5sxJ2AN6gk%|$z!iLf;P=Le8h}8RCZcfRyccEw2{W`&PEp~S5?Bb-MRP-5yt%%* z{Pg2``LtTSz>v+#n%=@q!dDtgc6v9LWMz9sI~kg00c)L zr%xD+9_P=-RyC7XG4IR1M^~ms$s%vxp3(Z(w|6D?0aaM6Kgv01TzG8I1TkKJ`HZAY zoeL}j1-R{Z)IZ}$s0WUkzM3)8H4Hw)#zDk5?7AWe3KoB(e(15*Ha{XC9QCkP1BBGt z8#k>f-Yf#zRsyh&wK=+-{txfE`{dTCRJ|6&5iRj4{eKg@Qk7f@KIt3dk(A$D@99ED_>Or&#Ez-5f!Ds^E$Xrx81Z*aYd6!BJcQ3#4 zV8`$FW8$KXxCsSATJb#7qFpp9JpFJj=Oo*X#+3ud7;eB_(QzmgMT(J#Ih#*sGTnmF zvyq6?HQ8o{X&WZLT3FeZ$6lW5MAHYsv6DCINEcEitKwzr;S;iLY_^%+8ULsmqP2ER zfLJsHMzd$d^B-?Vg=nU-&L*sfnN2gmMb&I(&vXx->rchyaT#crwbgECjj!H9ulrT_P&&>piBe-4eonD8rTQ}}#ULhv8=#Rm+5>d6cX4ryEd{+pY(Ao+ zRu88J*qj<%y0mhwx<5PmV?#SKN1%*^dMPVfGb70H%L-re!z!q^z@&=1HwO*g>%2af z=+7xhRWK^e1}91PC_xAN0uIX1ulh%GaW@wHXYbqh=ZH*nMI&pv$PSbkSkcB^D(rrg zwt(ERrU@|$GGI?u#@VBCV)GbYna3p(C)r^;07*c$zg8H>_m5CDG7C|k;p7^)gT*b) zC46!%M;zcIraa6N%=H#D+8RH@ev&C^JZOTo9W4w>>?y!d7|HoeF|o8fUDQLrUEGvT zW-Tgl9<(r*oHJ)_IGLOAA`CKCXoM&+g?H&=FjYwt2{{9!fTyy9q%oV!dFJi`4cvKn zn9Ce|Km;DO1T{64CXKp3)NG97lEUIWV!uBmv;LlI1>Fi=m|rPBWF|bfi7{yUw0IJC zi10x&6U4RW^*3CT7L>y8p_$g_Z1{oy=|5OrKmfs}PaRAZDfWsv34GAy?d)p&^z-eM zzu$kn`@_$7fBHQB{inM>U5w&!Gw?@ z>@sntATu@dMw8wpPsxtl>Y#<@uQF0|Au}X}$EHB>xY#r&U7K$z+S+h|g~)^bG*o=# z*^+6YK!nuy-6FcWCN(coQGCq_ul6Mk{xB!v6vD<9JO}gF{^3wgg87pAw~h}&&6#RB z!TemSjp`qvc=oIiFh}iF3eUkF*3t`jezzW2us7_20^Qx0Y|obgCO$;SU7Fj`ogsZ| zIXQ_IP|t5FTgRwjIxx3Ewg3=hu&o?s(UFtuI4nPQBN@`ZS<$~?%EPPC>&s|GAu``$ z;bQsBlvO1?)R-;3f6LIGqui^X(AFXANNk|wC9;5>0$@?jb##@UOeDI_LIC(m1|51t zOk9ZvHd&^Y$8X+U&?m-s6S}1h1+tRTD-Z*?Irm}j^_k~}pT>cF7M@9VOdJ5AYrGwn zx5qI#7@*5h{y7*66BuG9Dzqfp0fSjbd@`SjvpG>wa6tx?*5&fJ#Z zsTez&)j+PzBFSi;<);wq`2B*GH}RWIB(%G^ff*(XelkA@<*ruK;JQ&!e3uGDd8yX+y0g4$mig5>80BBNb`ctGRqxF_gm5zVVL|I2B2rbO9^&6=m5l zr^a%fSahLX@IV^rkUX6{D|w@s7@2t7;<77n--K@QmLmPJdx)GznJB`RVzH=-T@q1F zONxj5je|ZlWc&3iWkxhfqLzlE&6Ba7SU z)XFgXl#@pogBGloM_&el0d$d zX_`%gpPZBz&2j`5L%CB#YeF172n#Fl?WDcet(?x^<=mDb5ZNXm%_uE7&f^mb6#I4T zsi@HW!p}@5;cQ}KP$2-!*_b(%B>tI!W5ec}jZa(mGP=1JC^n5RU2aBgY$9RuYB@+s zEoeS0v?g%qLZ-k*Y~a{XX|vhy^f_YBAGJYKqBsebGExiD-0678pOnwYM zKFK5mR|&jGh`KUmCA(R>$q8J-?4!b)otK?7U)uy;>}c2+50BQ(!H$im47U(L2p`91 zNd3)GO+Ra!8AbuTn*L?K;#wJAj9+HKl{t?Wv3YN8&<7>1$X^XY#GXaLY_{7;?}~$E zWs2oWqHt{-9UWnvU}R3GGloiBc?}OM0~3OzOANA@m1u&{kVBkc+sF=8Mn|Bo$tn{& z)cRG}nFJhhga(ReAob6-{`maqXy|C>!lV9|Err~7+-fhjI7 zPN)YvU+~jN2|}Ath?#JZU2Lz|`#6tRu<|7mIw~;c^{v(5mTN3AOXmKln7JCJs^A?> zqpo?QB8gu^ZOMCUu+p~V>88u@TFH@}{?9+ELq@C3ZR#~L_B9x2s3e*tOy~bR!y~Tc zm_`zu)>+xPf&2m}HO_uPKVyz36qM>)Dsvy94>MzRtr#Yt>(yvME`MFJI*W4WaSB5h zlOb)}$tS6B(al9(6gAU&%VhWT=o$g>0*RN&3kSMK83QbVYt=g+%p> zMGQTW5YODF)fE6OVk#lcTnOS4{WRH{L{<&dh=D(Ou~4{)jLh!S^tI)n(5IQ+v2VVs zZF4)DJh8}l1>b`DNrH1)lP>R&wZ%{LViOk7s&^X6nc(fEGFNOi))SD z_l_8_C2ORl0)}}Ir13TdeNa*=XUm=|os(+Ud(rTGA7LBymDVHzNYJ5&*(-ndk1ybZ zZtmw-_wyewAHLkrK7JYhczOTFpYMM9@__Aw3S{sK)@CVg@fsyw3|wo^3`E1=*AeJd zQr}A0#_0>+L~iaLYvkIN*fgwBk59ax?B2@EfiskO#2a-*<@OXONDQN<3&sc+Vmie% zGwjJ%1F$GMh2m?Yp?IOMo$K1S)i{m;X&xMm`@C%!wIWhC$QYtgZ<~VyOZsMOFvm(D zAh?+*hVV_c!ZVZ}9!d8PkK2;7b=p#^Hpb&$ynh2$jzQRkVfOg!?fdV@MsRR+w6}L~ z!1r^g2rmwgPL$Y7K3|P5u}v|=L{}&{(Hur!*X6t>s)YR>N!=HBX;O z*`xs>9Me&+ZpSQ7yc9R>4;h1w&TEJWDNIAmS6mWWZhAhwMoqTbDEBCTFQQ(nq$$hR zl6k&+e_`p0y6%~-Y{eu+5fB^ z65dlXq@2XY&$F3Q_YZaz z@UJ;lPdPFQ$eyHjVaaJ0JVKBZL5l>KV_+LShlv=qin=^JJ|<-xLZTqzcEl#{T}1P2 z)gH%;$c+P;E$76InMB3Wi(+9Z>AYfP(+X&f@=4CJ8LAcFGx{K1LVzjc$fM(v?$#z@}Z8d<0~a2$a~QQktO1GOB{`%K52_s?|y)V4EHhDxBvLJzx(yCKmZ=0#w5kN*eGf~ zjtWd+`(Qd}yxA^_8?;2hWhWI}YqP~Dn=QN5*ZMdz34FEg>E!}fX};)HEnb7v2uzeg z#hYOaCK~2x3YRm&Q%lOHwswq|HXCteatFBc>d1D>%489bozU=X;;3*<)|tIx{^1{N z)I%07Hx1`TbliYt98|*cC{fi82eo$~ zraP8?sPoKMQ3BC@60yR2(S_R{>9)s(H@B(HNFO9d9Q};GVpGU;5ND|tCr`zav(>hq zSFIZ)04KD>Ndm#09g?krQRbSJSzb!+BU91VQR2-s7gvN&XR8&;xlBP`;M_)Jy}bNs zGQMHjrt)rY?vZlRzMLEkXi^|?EcwyW9m0fdf^aEIe1=&$w%yQ;IS|0cU(WRE8^W3x z8F~BU42p>--N`-Kzt%%LL>@pXXhBx=0#z&2KU{!hptPgT4PXcZzJgL6QjHe>&PGu-0PF{D8k22#+L!XsVC{&Hi%sFKs#iWw2 zRM)S5_3bzB-e8nO*^Z4YhPL2FW1P(cgJ;A;asB0zmDRYJ9aK${{TZg-X&5w=U@OJ~ zm7gUR6^=U@BTQ9GT%kC=Ii5Fl9PbFlkQUEc%xBPBYMo@O&GP1&^rV5$KwHT1onXGH zB_=(jS(5^JZD6a7@NxhKs>dHw9pBg}Cr!bF+z`6jB8N5>ued=eYJ8ru4j5h+f4=?I z;jE3gSuwB0#+MBDZ4*Bw9n$`uY@Qejk>XB|_P>31@%H?f&NFfl8HBi$09z3-0TspR zgmnM9*)wmbM7E|S1FXA>rzj~2Vq;mZ)Cx486yRYWUI`u=Ll6BL0}maQr|<>?kw}A4 z5-}J@z%ikqQfkiM8}<$XG#&0CL-86EhaQK&5OI;y)N1{%F;Hff(VJ@h%EBB;N3~Iw z#mFY!s=%chb%OL9bZ5sbOL4OBHb`+2ghiQi6og#iE{X+VUWadaQ(u|A?N+L~;C03Xk3*UT5 zg2AY=?o+Bn5G#h!bFXtya<%(jrcehi1O*V7TFB`H#xY_pj9r;&{aQOt!lk#i9@xpy z<|@_>MoO}td5V+2ArKPftVH9GKDUio2WS9j82TsL5GBV)Pd{N2Q16MrY4kw=cUc;G zU3J<>s(ow1M&WdJci9#4!q~CicAZrHE2=kTVM@Ec%S&>Dau}qn3V{K^h;Zixr_9FLkqR0P@5Eqx#;CZEx@9YScId~eFiTnI;g8{&G^H-ffa*N zVIaoTh3tY+nfa8Sj~Itu#X3(703VUHku`drJXxqD8Prh+iZrVIV&w_@49Ci_;*xL$ z2A%(Pw&KVt@ptmi*I@^Iih)QWu?x^Zf`glHM-3;6ab{@EVAP~9&s@Q#9;K{^$|$SQ zR7X@b5L}en$!;yKq@9GyS_&BiH~h^#d~MVF>GS>M$;czzy&I;?Fzq?@1l1+`0P$rY z>Atx*K0iG=KiwzMH*spqxq-}D-&2yPP2_tBN>JA`)}WzpByr0(cexl-kiVtZtv)P z|M+;cd$12o@$l&I^kRrH=n#|8{{G?q5V={XApRFlDsnH+IlnjqqRX&@@A%EzHw;TW z4x-rdNx>w94TFKU*_asA&=&C2)2HW-IJU8)b!?eY+7qgS!Alos77(P!BDJ!a+iK5O zp|+Q*@X$8~eP4wMU7Q?aE5d`$sH1{0xlJcZvqdxo#*4|rY-`}OdHyZ38tBK+8k&HU zqEks`YSgVUf?z#UuKSTf(9O2stWD0Y!XSU1i`13Xh4PUFtYL^3XV3)_5z5@>BwVkI zrQ|N{f!{$JT6&d(F4JA>+ zg12)|T`S0A#dt!{!zprncz~++H3%s3aGY8NUXqXsGlz*33DJf|MMi8XAWpZ>m2kcF?a1p8*(vj4vwrFUze5pIc%$Is7+2Habv`e8Kn z1lYpmboSn?Aq@1Q@{7{Yt5BeA-tLWY(!T7|ow4AY4Dv zsFdP8?AUykwD__7NI3HzK4B`5SO(-Y=_&-$0`vj+gWc!y=KgLB>IW@GwVo_C9-pnu z>M^opEQTYN&C>H=U`kgmBZ%FBTA%e-<*fpj}9TA%5#1*QS{*obOg6 zdc8EJcoR-K03DbWW)F{#@Uiny4BH&%oFuAu{-$I+aPO^rgOPK#Nw=@r!t73567ZB^ zXr?G;(+H|CW#Y=!0AskReHgQphwxcDEEywia2i*che#SO1>EH{CM9`^G_t~N z6c3rR|QImnoDS+HhvSzcJh9v`2kc*C9H ze~w705h^lHE&+=5&6{(m>)4@A1+-U%6X>+(cv139%L>3dqB=5OlCa5SJ#5X0Pss|+ z9H^-yE|_?C%pqVbo-LB5)iC|P2s;zDIXAnIGb$|R&vJaTDA2(|bd8$PiV54$Z{bj! z^DDuS7^Ao?*HdhCS31z*WyP5Wtg8XTB+YEXyiJK>cMOp*0zc>HEn>~#oFb|66pvK( zTepb|FAM1_7i4B&c1h@SkazsW_^5S<))Co|i0U}rbAlQff;~k`_v$c;gQ;|m#fGe_ zOsAZj9C`2sd$nq=?Lv2gT9J%UWQt+jr2y)@ML6#wLLSK5Ehhz?k$W2T_R9QVUT2x8 zdP62j^|aV?xj*Y~!%-oA^cFx3Og*&wkT7vms_%-RSM>R~(wlS-Obo~S-KOwm4Z{$P zp%5NWD;m#m&)i8ZZB(HsQcv_g^PFOqAg>da8xRc~qOEy91r06MUfFaGb%aq9Tbt#v zm1}tC6>&lj?NEDx;@X4^8ZZEH(pyfsRlb}K=c9>hj65B90}EK z(Va}(v)Xpe`>{+9=`^iLtUV${HHzPl^_n%B0tAarCNJAnG(1DYRy=^2tN$6D;D^*_fl0fDgkWnvi6rq|{gd^`=$=j80c%L?qB@ccl2oo@`!?$LTA` z-zc|qGp4{OF5FoRM=OEI=x?Bm?jGjAS#HL&>#>-OV6(oupI+WRLVA7sFb5BXO=>y^ zutkSt@l_V7{e3CG03nVK_95E>_>WGF-StT8l*p}_{P(psA%`>>?zkKfA_(B246Jt; z<9I^~&pcx&rB>?I!X`^wcs&XXaw2%`c}-W6@axt)49qK(Cl>Nq~yV=ytRou6aI z>&ga4(oDk!tzQNP?z#HI+tY!7^o@g~eIC!K)^EfuJDs&bs!ZN|(iM(R50NU2dX@JHp@*9yxZ%HVbp&zpJg$h902)KtlF%m1 zOroxs%U({W;qFV%UP#Q$=^YyaLw(KvWq3!Ej4~Z_OvJ>&Kw2)77b)Dg$gdX5`+W`% zxl=Mc%j9Wfcu6NC1>h?ZWghCoVW^>(gnTEuY(*4Zv*b$Gids^j4e{Y8M$8{pH&=^1 zG14?`W5Jh`OX7}pLYnh(&OW-y;#y4F&6>KXn646c>SCul_|?zI$rZ0^tZ#1D&~4~$ z1xuw%m|(Tlv7-VYDi?-vaohOl^3e?ZJ4O)hP^QlHTG%Vwm)21$!fax7Ra-)yeX@U# zgF5CRjGd{RsQR zjt(wyAjsUqP{L=4M1cServ2*X?#EA;mzOu({QK`d{PREj?LYn9?|%LL2lBQu{6~ro z=-X|}NBrB~%9iRZ0bGR}J!IQ?*Hmh(ip9F)kHU@3Wd+7n+$L=5H;(+wjf;iP7lV7? zLy=zd>Eq-0b~+g|olEMK+~(vTPU7SH7-FnHwzhjXm&)s$6ao6wdgQUQ(u%|3nTky&j*@rW>4YkinbfUtsT!Y>KsFlC z5q;`3JSBKTO3OV0Af@2!+c05I5vLn^7PLjn@90=-`7PzQ`b7D=^W=A$Ov|N z>;eUHTd`iC2e{R?eG`f>nKS>#5EII<^Z_c7rlWSF%SA1x?kJ&s=7tSo^atAGu0dWP z%7zDMeE(%Wy?r9#JG9Re1im^p)5ATDo(xlgTyuXuorFGRsK!px5qhv>0JijLR{iWJ zjy+}(+R_?(n`RAg#!zPtB(Ij<-cf+@)`R39f=Cq(zoy|TjzMluwJ7#7p~2S}-$m>eKTYhx}v=_-8(1UTD@78w4Nr?SB)+o z3H#5>e13EFh2cg0gj}35;%f_=coO|NHI-~8AAgwA?< zb@Sba_i&am$ceRXS|N6$7;;6IuvZD=HX|m`2@&^N{cZz>uh~GPpmvkyL+9usgPLh{ zdcBQkQt?cU7#yG<0#j<=2x6z-EMKT~lGA5HU{Q9U*?v`^0tZQpAny&!X+*dBCb z5gf+-^OFN$m&2WH+1HE z{*n@lBNUjn_q13oMFNJ%ojag<6gwqco;|g82oHL~+aSDQy*fSFM+Z1L-XjGJn5MUH zPEJntG5jjEv=AuHwUi8FE(}V0oMdz#8Xv(m;mjpvq{gLIwOEDd%={t!a3X+x2BGalDl6@QZ0r}2wYS~XtdQ7P+k%bCS5Ob$2}Ql(4yBL^ zAG6sC&6X)}HhoSkC+!o59!jj@s++-3s}59gZb5X~rBF*j`>KB?fpNoin5t%r%tjLg zA;dZ1!_pHr6^f)wCCJx`dl+RB+;R4rj9bQAQZ>fSO8^$jiKl_-hK zxF(>I!6YP(4^@$Ja+xrT`Ifg}hrR&tjo=tKn|X0+ zf=7=$KKY+dRAh>W?iRF^CKg*Z6P!y&HPi+3kPLzZ4Pv&S+3Bd`2R>xIp_d{m;B?~r zHJ<(wSiaft$=fW=9&ZG9!ES3q8hLV}39MkUg9#T$?1Jnw=(D_7vW0k)Hp`_PhoqTUTwVvH-t9m^x_0WHk{VN9uK4#Qa1YA)y<5sENrpV zul-CFls^5tC|QXd$zP<-d@Bx14#!noF3x?jWj}&VN!SvZH-j{UgQ1cjUWKSe+u(Lg zjhX;w%^*v`X-&l_<27BekAOhiGK{B~0y$Gdri)>MZdUkH^DMLWB<5Yip3jwMOS&4F zNW>!aLU7pv1JLK|hmV){AFswge!l{n;-sV7B4FA3xrXr_ZqxB1pFd4U;KARRxaeS*kgUtrJFz!w$WS z4h`q{1I@9hvyZifuEl8i_Uz>BXkX)JwE_aAfpHT19bXWzeLkYJ95zn#9zjDYow z9&hz*DLCIsFNXi*?CcP;;J_hR*jeb-_?asb!Hoj707yaP%y@oAi+g;g3I;-|mo!>f5TEG{hSSSV&l{%K5}8jUotz!ABw_)U8o$}v1(g|j zr)$3uLv+LSk}j0F?fCcr+{YNR&dkhg*;JDWKD zN{pm4kYFk_^IBZ4%&@CKYT@*Dib_NPGTgHyAoeDM?^HNU=z-M9=mlKMVodS~dTR1k z7*NO7&hnX2%)tOns-#z*{Q45aN0{an7UQ_twh8Mn1kn@dA55?IX$NPXKF9S{@^T;1 zGh-w!!@fXHVoFHHxTL&F;`6PI9bqou(G2ZOP=4aFT!s3Rg%7#%iT7lo>jbE0gXgU&E7Mz)ESveDDhOv)I+GYUoqe z-Ta`FQdHGO&NWUx0Qj}B=rQ^T+G7!68Fpgr+8AV>0)C2kflbz#Sza(({CxT4)8{Xb zk28WO|LQk?{$Ksm-~H>~{^j@Y-yREM-M2#84YbUNZuRT*2X|xd6I z4G3kUnajIuwg9z5I^vEc(~m7@?C6u4OrkKB9oc=ny=Z$4(NChi(4VK)H^xT&klyS1 zW=v}2F^8T6`$>}pDMlIc?tz|30n4Dly4Q@_axM?seI+AO1M;-5R}bUs z+2k4r;q~<`Y&Zd_WbkGF47xBztJs&VW;8P3v{Q#wCkiH$MIzCxbXDCi{J4$Ulxz+W z88zbfj^Ti36_aHMJIp$<1_MnKW7`sl$*|~L_0pZvKhrv~o}c=ZOzTeVVX{bCS#F+ zotEp_uj9qblvv4VDFy@&_6pXDfq+$x9mG3LLgv>@Xfx_4*W%FTDw!rdBzY1Y!Vn%A zvk~%!ebi}5QFvl$0x}HZuB3#&`0$o_dp?&y8{RT%EP25~EJ~^431Fkj@VOW%Bl$`c zqGrUPPN-zFQLGXH7b84cmRJ>Rmqe*E{YwK~9Vk%Siv)vW&ulc1m4Y3@m$!c)%LsfO z=jVsVN4tl6LuBQ{qfyT&cI-!7OP3i~DDAdoV^WAyLy>e;V`Lh3czmXo0*U3*2z2iz zv3=8MsILIR!55==gX1IN9d>!bGqD7*Pqs3WGv4d?1d;WAJOiZ;SjQEkNZ5cw)m`ll z6`5|+CIE-a@g$tzcxRKni!<1#HdtRNIddtc#87Z{ddN~FY?mCgZA@WI8Z;bVK|xZ_ z8K;E2-91ck8iUtoT_z;R27(u640J*Cjbtd}1rc$Xk+^6b8Nft}Q8ER6b9jX<;IgrD zbN=kWtBgpz6&;TPi>5sZ^%Ha{`ks|D@M;dG@UbN!v@>TWsw`;%bOM1z!u}X7)s?Lu zIoy4_(XnNa*H;YJKzP#R4B|pu2`nf~XS{eKK)Ds=v9AsEJfT=*wPLOnd5*H6*^I@Aej7UYmgA%6iXVJ3WlYED-fhMsL$zautZr9Y7I(yl z9jV{>hB*vx~v zTr?{)rCV0`-sBnECNjkMPN{h45f}+4VI>?$xNEDAV^Q&hG@w@S&ygn-D^syqC><&oU zB^)}_*hr3q&Gca=?V#60Ai-{nn1wThc4T=s&b2WGC1k1-6gtUhGUv7Tk4JQMZq*;i zcO@i|X_$5o`bznyrtF}sf4REaDue#6h@4&mhu@B;FAq;V0dt#PwPa)|;SOvO)k>zjO5Du#dle^Z4i#e+pZO;qf6C3QPk&;eT=JBaj6|4+ zn1t>hp04g5ukNOo*onT3KVFVM-%dV$dAPir-i_xZZUss7|Nh|;qU){fq%EdBaLW7p z{RFPCbwt(A@@fl>6OGx|CtVfF9r`cxp6ggrACoFrViKl*bAHrtTnP7Jx+G6`lLE>n zLL+?<}RG2_@1?lV-LtZq;t zEO3~yw$^_FRi!~geFD&T&!UNOF-gde*zF>1v=zt!mnYE;$6+{SttP6_@nxFRI2aGP zl*pdg_`=@C@n9mH12^lIjKSgz`j?Eu=CwVCfQ{9P1BnRRV&-Ovdpb zD53}jRTxA`STJMnN&el!dc!$opS|c6jog_fG!Lx}*M);7dpcgzItIDG*GR@$wgZ3S zC37}qPE3#_9UF1!nGBoix>^@!>o~(j-0X3~u(`I3sj)n|jK$J{_)(Z`oULP>;>Cz< z#0JRh1)iWCzjYz@&x9A%D0OI^sPHORR{z|ma-REWX3XYSb*`;^>bO(_os&VHM&d3d zJwy0_bf$})9PNHWZNSoz++VvsUa(GHjD3Q08~dkZa8$KXQDH*mND`jrkA42ad?Bkv z+)B!Ig4sgS@RzIGpFdyS-H)m8?>>C^hkyMy|NIaC8j|O4a4{pVL||bxN`r;ps#&NU zvc47Tk3aoNX=?vcD^bNO@-?wfZr~sJ482R?HqzG;spx(EWUq53C1DRqGleG=d44*< zoR2CXpbA?b=YSwTPS_zn6gFqX>Bjn4sSCF9P?1!nzxoJ=oXZru4;5ETKib$q46?|D zOvb`6Ayl1LYw?|kkY7I+>#WJ**N)<9J|p7`E*k#^e&Pzm&b}d z8gWlt^Y=uz-rwKPg;@ypr?DwU>Sjd;p06c*I;4YsLH8feZUO72uS5%?45>-B%n6(r zqeja{%;dXCD0D2*Y;mneu;T-50o*+cxdwLnVtQlEGJ}kNe7Fk&hWm*xW#FKtCNsBK&;yh)=cYTU?3Pf;;2tkEPyg5d^B<7pYGz9{ap?0h8yf^Ph|!bV@{cihE{UV;V?fCo7(ACVa22LAIXr_t z5NDNBwMzN4&o<0lS(TjVGifm-r^d<|_%6RP#CaCdf7p~Hzu8ViMYBbvr$|gqX||TT zB6|Jh_4x8?j9v&$+uO5a`iWs^>i?R^&9%gfQQIc|2u@HvkS{^0usS3Um;SukzF3#z zAcpYSOi{1&K>TW6TsEP+vAsmPT-KPSSn@U7(NUE0GAvi&rtApC+K%0y6L*dts zlsfJG`_pgU9KU@F)QPO#`xh5S{1J3;es+MYh&bBoD(b<^L_-D2ajAGr75ymw>W+wh z{49b+s-c!x+G--eX z9)q$_D~8)xv!)}=MCNCVER~fAENU|uB-iF7M#EwD4(qd%?PehFgb^m5X3k9Rc}$`Q zhokT%Z4EUA;lM@`WoU@PF2+Q(%C7CMH zxKf(*RMgp2U7V5Lqn4^5N&z5v7Y-&H12xgLIha_K!$UC>^CoEWm_BO)H)nOLm1a!*a0p;_sYCYK1yDkJ3mfl&i=l@ zAqF_$S&!A4#rVd1#OX*8rl1x@H<~6ArTk%<3!ZT@VGN@7Y!AW{-wZm8BH>(|%|!F= z*ljJi9L>@Tz@xEKg`P29R%{~l=pUYpr~#Vd@JJe*+1WLj@ON{4r}UcZ6`?;_v+2)$ z(IyU#PWKe-mH=`EzO)yXeG!kygTygrG`i7b@{GA1i^I!mo4BOddt%8$7Rk6kYGW+C z>iCx7iEIFZY4WsiLRO7&AqVpe7p!c4y7eG$g#jgR#FnDOy&MR(zUmUGvV3fl9L)hx zVww}Li#`FlU=>nQe6v|oUao~H?#;>G!Kgi8j`q|a2{069{E2$sL_&hn$cE4)6b}L; zJKU>m7+gvkc=VB;0~mQVu`a-pJ9~V%yF>E7y}BYeeLkO(h04dS?(goBYDrE-uc7FdxegEba$6w;6GoFWNEyJ*yito5hlz;0g|b>*uW!J-~`9OrLy> zhGOmao0=0eIapQNQO-We{7QueG7D3!tZ7BP%X;+goDeVp(x{lB9U)AvM<)Q2It_D= zGDkC~Fl-pHVehv-ORhnt4za0&fncf?N700l^~`*V4TV{QsfzKx6}k`QPZ?f#>UccG zd^mJEQmKnl%j3a*i5-d|8O58GoC%S5c;s>hH6z@9HjJzbkUo5+rs$OLm9ZcJToP(= zu}WrKTdaj>MJC`qk53M^>yTFPN;sh8NO7oecW+0f&s3U znt&Lb)SbW!<_=&GESItc>Rgd@G@PIFC4mDt#UyPw)q-Ru^cHjA!-6R`NR4Q$iL#3&gp7#a&a4QxC{Od0-wNe+~DBw~FhsE<-4v`72&)&o4UJ#j8kU zyv4q0BQp_L zSk_%79Hb`M0;Eznx)2!ZCoy>h6&XrJdAHbdT)UO$U;R7kU2P8vZ%(X66?G9`Q?ZWz zP2DBwSRg>*2dNoYb(yg#6x)f85}>zWUHoOKF8!&S*(8FScYV;UI%C6hG>*rk+WHlDKve7odG5vDe4Xmp6BJ zl!VBUzy7Pg0P*v8fAd$^+EHltD!Y#fp6lSif;{I%jsL0xy1W(GS7CZCJAQ9nu73NU z17ZuFmS3W>mKYHFLoW2dh}%Suh)IQG%;rxsLY61|%k^zLX%kN6S(;tt4C@Mt9-~h? zTz$z1CJkk^N(xf@CQO}5?K*s&eWaS$edY*DOoJx)WJ<)>#Z1L4hnVy*o!?Jp=RogMbx{(5wlMi-P^?xb?=^>PsJa8~lijS9>Lh&hR&*YbD9elaG1##+>ii1r442ZB|nBgV0ES)pZ6#Co3zEquT_$QF=D4#wJAXrVH?*;3V61!`QC@D!ovIIbWShYPo9LHPbL6%mh_j zh|hBS{Uj%hTEC2pc2XRG{pjN2&WE z6eSgO5I;`zp)$k_$52i3b9U@kSigF5V3K1eM5;|;eqoV_zdRY-2d?@rIpj}8>e*TrhVeTYFrngwlyT7~84_+Z4>39aG#|rK{IYd5&cvYklnDfAp@V=Cs3X${9_FRfTvoYun^=7fMlNeu{@=e{| zJRmWJ3yBwC)>2+Yo0b;p6-im6*$;z)1vZK%uQiwg0n*nE!u>eNRi=PpFe$jzX`2?o zHPdRWM_^h|Ryo2#!wXPH+=y}_dn1;!#F#+OOv9~~yRrIw@bJ0=`zEBvGZsLu0Y~;G z+W(0RLlsdHTEY1NJxd!XhtHtPI-?<`1eY>3HnJw_sQox%jtk=$W0m@(dN~-fvvwCP zMxHPk;*HBQr1!;?I_e7Z*&-C(EUzq!m^PAA1pEkgqwqy6JcCK_VB{{PIM5sWJ~o_mvk$BbIynuyCHY(tjNfa zCmvlg*Ie7|1fSSb`~hxhECf1ouq~{XC_zjiLe0`qv5YWMVQjm+nVg=B8~glX0&oNC z@WrK!WLSevF@%$<;)2k~36>uk8d_{t1lBKxcQ`37uf|w^OrgC7A4FHD^-%!hO&pD~ zXU0;3X-DerLZ{Ddh%l!M)dnRQ{Y@Gcx*-Z<(8pupRalg1bnrf!NUr(yR(@gx4B8HJ z7&99u;`jhqK&QXpVW(r3SNukTbT81C3;`sjjY5Bl=oY3wZ&yy=YCcp|TR?ryR-7>Ttc18sFx0Hln~*^^iwqhaE8Gy9n8-F*tF>Vv@uR z#~Gs$WmFB&0T^^l>|8o35Pl8}n)JSr`qx^;Y-+9u0)l$5jdFfG!lqg-oR6R-Lq5^H1C5_pEZF(oe?BH-nvtbl65Pc1bhuNF?Y^k6s=Yr`r zZE%?`^;&}-&<`vCr89E1qoYGWeRa>#6c2GtbabZZV~UO|)DlJcmic0KQ z25VS*!aT~!mF<~xk_m?$u?6!Pnw82-oST-{;gsO4WBSnpBEcZ*uuj>bEdkwXn>e$B z>(QRdKo%en9~L$PzU_6@?pD?0lZbkjG;LyD@jLJqI!pjVeDLWV!N}y5bO(|~Bg0k5 znvLE*g3pRvIj?L7SN;Lxvi}zJpE2KNonSj(Rn|?hT_JaJeP7Poxr$!~WS85#yldqR z-uWB;o}{LhO+r8GI}fja{w-9__QWy;*<``4GB1_WxG#9KA~XGwg^En%uiw6Vjhp!L zisyQ8@94L``to1?XMaI@FVec-hf~C)vT|)XZC(^JcM`XCXkYS5pQ%#s`}F~#kN3ph zA7n+^%r(j3XD0rr{AY)`GswPy&pJ$`pSS zXCbn;f{71$wq0S|Hpq7L52mUNE=mU;yIwBu?4;864z}rT?4u0)8o>YOBK~D##`_{C=JIAW;Yc0o7Dug5B^RIduJ2Of{3Rd72ojN4L(#BT7h!RB`L z;k6u8@Q~&Ph5um*s;OaK{s~vBi zF55gh+sx410jY?q#XzljJ{4A_FR)J{)qO)#otz*!Whk2`Rsu7s&e7ok&t{ERqt7#K z9hFEJLna@E@yZd+y%;_t4W$Lr8yd*%Sda?#NJsTNfF6})lDif>VkVs}{3T7{R%kx* zK}8J6zzL^bTAcNZMe?8h3xD>X{HOmRLev=p^DTjEXWNJSJk9_3KmVVv-<`IJJ+#3q zJtu+I@|n#w8}J2H9Q#3$HmCrnNXUI!)EIq6 z+i-~K+oU`)IZ37D(oUz69;NYR>7dgSVxrS)d1t*88>Cy(4H76P-JmO?<@6Brp||gu zg>G2$KKtYef+008ZBzJm@i&KyM3zEf{zL;DF@cLyhiqhmE*52>gv2y#f}SofaXql8 z^YoHGwZ-xL5x}CV)*`-HN;N<0KZWka2 z1pGRa4^zr5^C#6+^qQ7LOFyD2-TTcoi?WUsL9w%7^KPmPNQOK zVB|t+cYLt(>8Fo&ckt~wWtGBt@LK6$fkaFOOq1y@2;1Ds<05QsthP*UCefSIwQo%2 zLl{OynfylOZ<}LFFen~D;e@#5<@cV; z5G%C*R%n4l0)O?GGtR+=bE%`LW6ytfG#;wbgDb#AjQG6H}Fv5<=-C5CW{E}%t z;&;daS5EVWLxkh$jEo&oXS8Lu;FK(vVq)ueO@^%!FygpLK4+MYg-GWM_s+nEEoiw2Q*vDs zT3bOu3_#1!y2x7f-&3q#(@Sd4ev}pywd~H!ggCHnKubvaOKFl`go7*aX$&`2vf#W6 zY<0D0>X_2%nQBwq!Vk$Et z)dT=F+%K5^LE;2#UX}TSlIKPhQ)jRP*^}cmL+42E&-uYq=h+IWzOo|aN|h<83USkx zk(jKO{jU7@M1do$Qk4rccOVk5;4$7Avdm7o7xM}IeT0NCS*XX9rDI!mAL12AXLfnZ z`|NrQSJC+m+4Qe5YbwXt6`a=B)|^F)jl(kN=NLZE&H)Nt z;;p>|l{Qusr1C8Z6~|xAzpT!F^gFLm5@Sv;udo9fc!)|%sWnioplimX>jvVTYza|g zX$;H+m^#lccmk1IXHrU=H$Q%QkNaXqHJZVY5RSfu1}ye+#a*+oaQmSqFW38e!%-X) z9)9dc<6BuIVvk>n=Z}u;2w0&2)`G+B4egvkY*+cH2bKhTe!9#o`1)D3Sz2g)Zpuu1 zdpl(`);BVcn;nKpye%GkKm2NDwv5>ls1ZeUKvp9(a$Jh1VC-Y4LMa<=_iBvu(L%zF zVWq4J*wi;{*ilTI7_KQS50*cLGA?BZ%jAwsiRp|zR6^7z9w*8bvIFai{3@tSGWWFe%S2C8!x3}im5uS(Vt9;QzM!{w(r`Mn zsg0)g#!?g1Z6(5HCmS3T<+DOq#M)7$H;&-w0NIRiHI0ooF$uezG4lHU*(mw&1E-1R zS>~>atx2Yz9`zTYtR=rh1z%dZBWBXH2IeQN#sEA0g$GQSj)RVrnbWY|aPKZtY%10C zD}0zE+J=vi+h{<#*28(6?RCs0*{bYBF{xNttpdu{u?YD9n{P^6(uXD+KN1IVaht<) zRuPfqtMSd3FF8WbGJ+b-3+_TW3cDiay zhfVBqNouEwEU3JR#C|8C3#db+16~7A2I{OPdW{EsYFRa2(e7JX%KjdVcULMPlRfKY7 zMGD5P;>PBH4;5NhIHCaoM;Qq2;U@7lVUGB8W3BMPX+ldKHuvbOC!lpuKLJhAO=qg$ zD%eY54ii=F*i4O6Q+1BCJ;juUR}D!WyAPb%Cu|XVYI2;IZ5kmX|EKsA<4yEphZ6>6 zScL?u7<4oPrRN`qX%RBo!Zp99yW4CU7Ml&qVQsAe-Y&^&xYm3sVUC^=V~T-|>xAjC zlMM#X!tQ&_?#Z&mQpsHg!vURoN)M?A2ym@4FDauk;mRX%dF0Nrf{>YON>y@a@UP%t%R3m=XhGHz_9Yf?clgJ8GhE zCKu})mMvU$1#@cYAq?u~-J4fXjPiR$yp=#^Qh`Jna~K6(I;xrzy({H&Jq~leY8JGl zXv4nF7fP|5tLc^C7hEDf7ZI@+nuH6uRk9IbfglJTUByvX^#Wbx`P{N~kxlHug9iuu z_;hyvxqtqj`?G)UcfbAJZ~xi9^p~G~@%gh?Z+`marE_p<8puyr}EP_m4?v zf~zo)Tk%7fPbx1ONSDjxwocpM6BvyrgPYxTyB zF*WE$afv`8omE39~_ZHAtGV{`kD6<#= zILQ>xqj4Iu8^7`Z^bhPo5Lq4{?t&)@<@4?ihQz%G500SXhV6w>Y$%7qnv7rORcKsE z2Nv=OJEGLehDt%aDI6Tr9@`V84w#K*7>pLz0^`rH8Ht%_GJSt~h2BEY0n5$%6L{ss zTSUC}$tjD^L=iw{hhe>;ZsAQJqzH2W$h9Yrj-Ece2iZAg+!^$t7-E5Uw!ZB{o2%)8 zJSh#jv)gCPBut4S;?rd+rOTo1&*$o0B#@ek(nT3UX_029K|o)eRM;I^2n6=*N_1S# z)}UjMRTL0x4<%LxPE0D4h>&e^dCA1brSb#$WWqrGo<8fuFC{q$+O9L#~{s#W?I*N44Qm4 zJQA({Zx;4+lU`mR z#|ZV{{vl=o`uxL(NAw5mgZn0Bhb5LCBCuQ=T9)B&e)Y-INB5pQdieD5!;e3C{P@BB zCr|Gm(@pl2@_PrqKNG7HW&?ZzH;wbzO_77>6`rM+>`9LWB}6x7-D9Vr42_8+UYN<9 zj8JV!Hy({;^fv)E64uJ8>+aa5f|TLjkWuD92b8QO;m_RUD*N*~o)LTl`?3zek{|u24O5 zg!PK&w0y|wu#z#>?xsPvN#-iNZ~_UUYtL5*d`vJiud2!=*U%)-X-L{p44E4*2urk} zlEg*4S(I4XE^nuBHl1FL&aWru*CQg$0JuSyPn>sP2b5_%k+)s1R0R+rf-Sr zLQ{wnVMpQo^YOgy@Jk*I5oIi^-n0n%?P=n}31)=g21_=J2RF~C1N3-j?1a{#h1Ti# z2Y8TrL*{=@3DXVJB6d4MN|~NCHMbljO!i!dC^w7=3cW=Hoe&`k`7A1O1jl51@xri% zHEqPwgHefxWwoa4B@>Oha)@b>uK6^ix2qXmGHmiI8+Xu=nV$XD;#bDf>yEJy@KLC{ z)|x0rIFLVt;KhoZ9ZWm^-6d=#I|JY2vh%s7R<*ijWKI71fT-;pl@T9xsDj@3arCN8 z&{3+34PND*czY^;G8+k(2qe%@i?%$HM%*U9k{^~IAuV24?kHhEYhN?Z>-~aN< z&;H`ifA=r^cwQZf7# zU!s+#f5y;RSuJy7Ub$v*N81@I7MNgU@=__XSox}D=wi!^T>LjTkZu*wYL(V{lf19q z2#$)sscIV%<<8BE4SLtDshwxeCNpA_jqwzG4}gE@LIG02v(7cxsQ@$-KJS$7iNF6Ey*JEz;<$K#^Ye)L}YNn zm*ELV3VB6v5uhSNm4{^~g9^@OmBt1p zU}RWOGH)wUHy8&g23nhV24|g+jwf+na|Fs#?fUX`wVc4yZQ6<%h0ZJFJ{6aE!&E&% zJBF~9B4yRI=~ng;7TVw+*H(-Jlhn4U_`|H9WQgILKuz*UEzR-CL*(>il?gIhEr1%D zoM=8DSDGfvP8~Npfh5~PU$c(T)uhbRszQ;ZHjI^PxW?#cUw!@&y%R7I4Id75$|(Yd zl^8b?qIl=F&O#A3z`$B5a+#OsE?|&&4gmK%%}PVBfoPv_|oSr+dV9XLP;=|cAjP+AaO!p24 zPgtl*glPkX>*cGrfAu$i|JQ%>k3{C7z5EaV^Z)UG|II)C_22#eho64tvY~!Unis4Wm+6d;hAnZl1k)hW5y58SE2$XH-6CIvP}p<7)M$UTY>%3 zSA~l~nm^c~O_(*Yv8OVsMuBfXp%{OJ6?Dfdj`Vu9!85Aj2|( z`DSlV>62H&7R{Y4u?I=>Az@eI)e?A=MVQ4ki~h)D{`5VnfW8di2JTF*fJul&6l~7^ zJ|9~cj7XJB-Y8^akQ!8V^t(`u2W&;jf|ur}K*M=jdJ-GVmUz)9E`x64**~O;%o6xX z83beA(*-&Y;l>z)-ji+M4E*UOesA`?Jwb=L!V?Y<3{F2;15FZ4f5W&8ml8%XCM_QD z$;0E1pFI5J>3tAIPag5yI}eWc!T)~r^gcC4h07-5EP0IM1(ve5rC+axx1zlh8P$Z< z(b=r#4lSp#M&`{Pm*o^2k>*=5(DASW&TMrUWM;~g?It}ivKc@myW9yTkZxkfiQIG? zpf%2S7u}GZf@UueN)ET~)X5oY<|$`DmCCs)oD0Y2i}O>Wb%E)1U=Bnj}Gp zUNY)B!pWEE-id0&vcNX|5A-Xyc9yS9by7^C@+GfFAt4L#7oeP22SqKUJ9ZlmP!J$% zf!3~w9wz4g00OK5V}KeMY-u3?YP7f4r)S9bzhv2J19e$De{Qm#*EU>7s+@C{-I-#^ z&I88~8pMwjv5+mqlCF!?fcko&rMr%t^!}312pv$vx&YM3{syPy+51p|26> zirZZpnWAiuT3PJNq1vp^O5kbK!UqSAEaZl`H>e-3h|cG5cz^=8oJIGeDfvnhhh(bV zYXx&56p2+?B8e6@Ycg95cg1EaW1Ky60t^DvFupvCJ`9ZYu0fuI*Pz`V(a^n5MEk#jC;-#4np-<@^s0^GTJPmhxmB zuO254lTRiPXjk@!T>@{01h!GnYr#G;M#C+*HE@noCw5rd&5sRB@kJ|DU^K6+?@3BP zPn+7q%_l1WJx|EuiAZ1gWSV9t2uk4jPRl#tJ(^l{*T(Epv~Ckb_R$o4&=|1L6+bBl z&JA-ZfwTzp7=gylq$lw5RL)_*SR&)c{9{iZ>ml~6B3GajBT_>a7&?+myQ1`qQ-ot| zFc%1j!9e3sF;)JdCd@_+n>={b0jMtrUE8&59uudKNJe1H)zsk5-k@$*D%aiKMmO&B zU@V6_Fw$>C!*26}q(&}FIRL*Q2VR1zHSvC;BAJ6w851(VQzDhl<`NMVPwHW?doXOe zUB@@mc2_*@m|%tGG7J&5lSzL#l)D%cEWM4PNUftwkq43Gd3-zJCz3nxsA|P#jpYHw ziHc-+a#Pw6ORahS7fd(IT28P#V?!uWYZ|6CS=q5BIo&In}T6Xj;M zG|bsgelS_h6yGETG8#qO%2{R^+RnnTStnn3Fd$f!Us?09>@ZM-d zkpV-KD7S$!m$XrsF|Mp-A787m8ibsG28VK(2SZ2DwRKqu8k5^@>7r;U_9*knqTZNBMOFSq(dXDvNX zv1e*p9}E*`;C#-{FA=y|^Y0xWeg4@ezx&Ov|I&`|uRioqlsz^0`M_ zwt!yF_LY?-E|GLD_T;6b(st!C=ff)E9xjl{&KMmxeVN_)LvKl#%(IZB_vEihnsZEu zd#iZtYME?WvD7p08Ns^5B&}ojNvPK*?PrKp2(jHXdBvJ$iojWNx=$SSwP3YiUb^+7 zf>h0$Rm^r?#ID*1p?rELd-(Q_hCNU?FU@GPe* zzXCWjMX?tG6V^!Ww^gxiozQrepg-6r+bFuOEhA0TZ!X4UNTntfaq4lUpaOXXwueJk z$R-mM8`KROT$mTKLx`YXsOId&Us>o63c}#p4JzHD0uPA*t1zv#`ap zWuoY{5kvicYl-$gzFE%+KE9zEMe!d~vOmKL=8!Jc7_TDZp6%y0tovZU%-`H9U_k-7 zlpU&=YE!*v1h#5bF=ZTK(7tmjp^>^W3#LdDFonaFs}i+A@q9^tmeKtQd4Rr?cgwaC zVf!7+FrLb{pU%mZWAwz7OEAvA|L^{5zyH&>tZ1gesyi~MK-(bk)04Xr=K0r-TOuYc z!(`@}!<|D19j0b-98&@@?c8Z4Rg|~VkNBwpC#n&%!21ble?`V~Pe1t_&lk_ha9uoRoQ#dd7TP3jrH^Bg=l zd$RPH5T~8E&Ugu#Fdgj}%JaLmfhs6BG*Im6NH+2WD(pZSERV+irQJtqGPd0u;X&6U z$8)02U>#|QX8Z8ruYUCJq5;ZI`)yji9%+s8JX8!Ko1^ZA@ zAKX8{L%uYP2cC8Zm8eHhSAi;L(PiGSLxea!rPr7*Wdvs&1mckdC>$Jsv)RXK*|rg6 z;zb%bmlZ`5v&^R8@TN*IH&CAN0}@FGSjOw`s)?Gd7ok0G?T2E zKom+Nwcp%EK-ae=(8?G=L+|ZxW6(j$hA15hOE45bYY2%-y>Sd$m+_%fFBEgO<&mj&x&G!n)m zknoJWiE02hlI${QI4n;nJebSQE=O1fiG0Le@#5wCHzyZtpy1e!GmFr|93qe!p@Jr! zrB;9oeFhca?)JUIy@Oq`aZ@4FnZnF5rS*l|QaVU<6KrG*WHxwkr!t=lC3L5rZ;4CZ z6`B7Ug7buG-6VMFz3AD=jHAI~qnNrS2TVQW89O#anlRB&8oD2?hWB9A4Ad zW7LZaR-aYqmNv38&a;Y0guj*ImRQRaCW>c-_FOgGwZ(~nJ5|qEl40j~F5hd{w>r(? zu-ouuY0VW?O`SXK3X?GU2v6rQ9bIuWnqz7i3Dd$(6`~+T_2Uw%J)*{B# z5lun%eK2^zt25;G4+O@s-HEXW51$CYcqG}36;6q8AX!9HOjCDdp^}=Ys^Rupewo6J zG~SpPVt~XTd2c$inFCQ?x*o@*B?(exh?3KvCcy#4**2hxk(UW#?O0r+a@YKaHMLs%dA&mP%CL5YWxiq;snM^UB?)H%FlRa`E>GQDg4$vH*GKQ zYim%+mgo2#+8`mO?Ia&++YuB;&3Y3Kye3W@20J1}1bX(wN8PeeYmzhJq%Z@u?CPZV z8CHH5ZpBP4alA8&6(~F25m{P5aJ zf#Y6^fyjRggLO7CGX!?aw%-|S>!|&_0&J-aJE6%C(88f!^fqUC2yUigIE#O{m<2q~ zFEa9Zg+JIu^QW)O&I)f5;t8t5n}Jo!X@+pZe7w7hw@ukJ*(2$&w7A4v!pqhiO#%K~ z#7r{R=X~t!O)k$$d-d1RBKuXMWnk4fUg zKrNg8_$~2GSuo0`%L(49cJUF#J|>}fjdDPi%bXP8TLlLz`H$Us%S9`NNf!>DAQ?}B zCa`s&TtiC+rMrAa^@+qq6I&Ny*W54daQ!*bi4u2&E7b|J1nv;SfQpjtRmJ6#?M z<_Xa39#-T$x1`u;)SaL?7)4b5V1RI>5sGnkbTdlhGE0YaT{Xc!?kKBVT}&eKEX*gP zo5ft&+JL8_!7*8KN`gsKW06i0(#1~O%0q&t6!^AkCC@jm2wUE(jPHK&Xc0t$L}s@w zKIuwDV3(`Np5EkXGGv1z-F`fRj2Clrsjl3bRU(jz8HW+HHyqqM*k;4?CoLsAH50%@ zi^2xKR@U@5rTOyk-tjNbUXpDcbZXtBAUKF-X~OKN$+o(l<;+{&PJDNm>{~Vo@J!xQ z%cm3D2`+)!(`6wuDG65KRY5IZp>^VxF4l6VSXSi5(jm-&2u;-KM|@(RV?%F8m2&|0 zXV&Sn(^F=m%5&&7tG?%a#!Jz=&3sQ7?jzs*HG~t;1kft~`Y{as#I9!w; zgCt^i5XW39eD)#XzBU7^lL-x=jCCMJli4nHLQjhkAE}SRGt-4mF$+8M333`*dff#O zXNpHkcgSS`dmfBqBa?KpeJrdX(fe> zp+fTjK>#r|VfA2xJ^Y@858RI8Q4emNFtsTppK7Ny*uzgezNq}|&Bi_c=KUEOjuSzg zJbQie`sD1zo6{F>-~asV6@HG{QfNC2TV{-wVueQZ!?QPBfvE8(j}Ade!KU!V$M*?0 z`-|Uw!NyL%PwKs=4-PRKk=c!o$ZeTmh$sSYMZ<;ThOrCTv;+267oy*oDuBzLEgOI& z+De0)NndEoo4X1W-My&+r8FxVO|QwxrZk#4K~;RQlSBR1mD+H^V#cFvzAy@~EGBMr zta!0P%#PMWYCxb^7_-HxU{!t2C5wbe;acA{%}khX>_34-;|>&+V>Hft`x zgK%pZ`RD4coEy@yh+EVK->7Y!(9tN951VUxMrw66_IM(FHiYL*=TD*ra5403dXbz! z)Ucy)18oUSqMq5I35g)s*}-zEY}I71yLYsEu&4P28U4|td+-n)3p%tXT&ObyY<(m`Z`?y!@g zHyO_vjI1b0ZA^6$0LhyQ=fE^HBWkP_562hah6(**sfJ!VaJWe?-5%1;tnXatZg<#) z<78*6J?!&Dyt_jgW#Gw`0*aA{T5p@ooBqtKG*Ex9vy8L9*VTGxhc%0xfyRO|XCA%_ zF+q`|u*xV}1!{;G9(w!kP?mJ{E~g5$v$i98{X&Q!@)ZJ!oi2%YsZT~b3zI;wN)g|)&hj@sz-5h|7}YX@R@BxH4NU$PSq@W(RDPV* zF@6P?9x0cOz)vvHa32{`rxG@})&g@0=3NKm@s8=IiUX*!9Pu}S7ul283-587uvx^z zJ7%4!p=VT)(>pFg^v*_*M9i+#AEG`&DWGcJ2>4gneXhqa4ZT0VKD(ZXb?8bd4Z3am z38+#9zOp7JQdQ(}gKh+4xxO(q#53tY|>n z2ph;7I8ECW#p%{?BFa!K<57Qie}__yZ)PzL;?BkVv}K-xU0|+2xO$on#NvK6WzqH8 z-aumDXzLFa`URQTG{GLvqQ|c2m+fB6CCkpBgENN}lBjG)>S~JbnduPiYrT>4#}gA{ zQcD`YG8U;Sk*+ncG074Xz_a3bgP<}lG&z#Y!f4xv!6{sjp@Mx+!%e=pBCeQnrg%!9 zW(!e(?OZmH9|u#_3?^A&1A^U!ovk#UeW3%o+W`T6%#I}c++Z$W|;(t6<*0OWczPY@stG8 zrD3|FB9_o&D1P?GGa$HlzME3F>r@tg3u;M8T%|g_;=oVLP15MZY;3A*8^tpLxxi+X zQh{RYsf+>@vLoe;l9T9qeLCG5GccMkDD8dn`tIYCkl|BWv?*!BgTty7^NJOI1u8Sh z!x_Z>nSaRkd{tnAX0Zma#de7y;`#C`@9^(1Sop2n8Kxc`A9#`P=fk|6B`vleTWx~h zQHt3VV{YV*_WNy*B8Pc$8i`9S@9yXQDpe?tIC{Nse&mJKUFAJ4ZUa|dWEz~LQi>j_i_Ut zV)~(I_6!Gp#mlbY{P#=U!5;5v-t##^$ZeduhL7^T87ZcQXfF&FL6CF>08dD}oL^izw_e8>G4QTtCCF-woO{Oueym$bFvKzQ*-pGP=UXe|awK&)YNPJ8B~c zuVmg%uv?~*V9G+GK_N0l)eYdUBG|)#6U$K?0}V%CQyU40OX{&8hbyyD%s`wGw^GFS z2oTy|SNsUQ0vwIP+x{umjgvDV5CpOQAmnixW1Ry6X_V5KN&RWCcK48x4BBnX<^3D; zHqxZPY-U`1koL72yBUMLJ%*iHJVv1mk64{Yq*uMXB+8M##Bn)2p?N4x_mB1v&$((_ zVo-3VYPgP5*o51)%CDae&n6w1+JJ%L(Zd4(7(F>|cv9)jU2oG}xBAX~3RF!(aF>Z} zXK%;^$RnEvrWX3AG;#0*W-G6`x>P=x?EkHQ?O%9$bno`;;^R-Ae*g0?Km7D8=!1Yk zvO!r?nM-k7WaN4wu4Dcr{=IHxlrTR&#WQk!OPz$hYvJUJh~v}=asnb*OwY;RkF0WM zkAZT_c15#D-JtexFG1l5L?U_!R0X^&q@)5Omu1*Q)N~;PEgngDZN`zMWJZBOQc~(T znE6iuWg0tr1b&^ueQ-Ux_uvSiEHgg?C_a5W-zGEXORDBLFFk@+O1M+!#YSg#dOne2DHorjcHg%U2S6&L1M6^_~!lxiqh12&sE1c9|OIt!wB_RhT519+g z9p`c**>Ve>awSV~mJ)c%7O}3*rUD>vi_p!iIcB1VOun{>MD`7md5 z^iB*A2|8m#`oK^W@5m=ZnRvRUHCPuh>@~f4X8JgWfGvf(+rPE54WrhB2Zy_ktF`$L zc{t?p&8*$Y&yehaJbp4=MEpRgu<>?^)JYQXu^b?LTEti6bG-kOyJ*?NUEZd^D za06;ZiV$aQ*05%rnjqs0n(8-auiu}c2)%lLd5sZjG)4%zykv5?9d6?Q7$@K4_2tdI zqrE4O?rrz`5APq~+dkMHGL(Mz)yMD*e)`eFT^_aB`1tAl&p&yHeTZjAI5G@US@13h z3Rb%PTP}XW&B(=W;fkKd21X*LWW4$GZBcZ?d7X8w*#tqbJ!C_~Th1eSrvYeNugT;k zvV^QXV_a}T$k#>t&GITpQC-WmRG3UBrf(Olqt%smU^+JK32UTD#|r(e%EW8B;+l03 zK{dlH!9OLKvzpJt;)3()iFJUxDhACWW5Ed+;fKNi!NugH=%+r}Hi6~}dBmHp6$eJt z_C`(HhUwKjpc>o@YA`Ou?8#uGg+(ka<{V8O)|EA@nA5~AD|2yj3VmK6K~P1;8&Xp+ z`fWVogt;Ngtfn;`RDniUS613^Ty}&M-Xsr8-MNz`wCD;NA4X8+~QH4ZuD-~+#Qe&L+g z3XvB4AMFy6g;5Q276FXdWcLoY7Zariq2^mk22CZC_(*oyw)4R<I%Y`tW8c5 zwSq2~&e@{jR+tea3r^`Xx;W@;rW6IbF%brtLMP#x=BI12kE_|!T5&JfGF1fQS4=_r zt%?b#w6aY5Ij=Gd`GlOQpBQ+&S(%mQswPpE9uku-i-la04#7)?D4s&xUQL~f`hN>3 zOnzH++u$}FLlC7PI&8%dT{;m1L@MIN3bPP@!$=a+jZk*v?OgJ)o=Z=hI>6kP=ryJe z#Z|CpwuF(I_svAsBJRp0wvSz~CRYRtF;}(42MIpou8xXIm#dk)XV}(fCItn!3enR=c|btk*&VR*t&z`KYDI_0nkrF5^(yB{(gnaGT}~>ZtSDsvWOU3?xjx*ou37fG2ykx)l;lwT?_OBaah=sn(qNOF{rk zb4=!LZQFxFOwnlj#da-&-nR=HD2%G%1!89f9sF?c#Y&HadmvEvF4Zkw28*6{Hl7!f}!l(vVl){t{qznWbeR!8BxsubS zO8IQ7e`vQuvg8fpwfIPQ=G-qCe?n=gHi|J$4Ws6mBwAR#1=o8RfS%}RGiTr-oY*BH=!Cg^&-fwL!L*WtrfZ-KN8|K4~#Bkyvy?H;*|I!$l5YM zHttQKwAY6Pa2hQ+fRo`U(Sl8%A7V8}maQ~%ngWK2I*!fs-k6h8z3I>#A6^(8$)89q zo-HYMvInH?!kur{=Q(CR*_o;d(tpZ^tfA$RW@u--=k)4Ps^zvN0RehS64P^7X$(bx z7W)G5J)Dyw5{^F&X~B;WY*Nq84UH1B5oxSdN|9bo|{JIa9hvY1kBPX*nJlv_(^v;NihkHZxnHkf2Q~AXcq!z3J z{g-K{5Gd_Q7CTJKHXw6vJ-&DN+b^HqKiuBm89aE%%ng4EQ@7-Qkqq{cp4rfSTP>** ztd>ajm)BRxlcm~;3Y3Hf9#)~KS5^4NUwroX-~8A984j%b51+g}yZrC}m;ZxEc^)Va z87Vsvn)Hp>f&-PMdt-m$K*TikZpIXBSq`P79~$_?QQ(oC&zyxJk|jHX-J3gJ&!o<4 zh8WW^@_zigtTccZXfN~)nPH$BkuuJw`?EzI8G5*KU6iO?Fb$dT;~1I~KyJ8!R!+r^ z*#<$sT`S>`;tiiZc>q5>qfFh~)y3KA{OCm#Z*11vNK@gWy0d+Uuc-voxo`tjmVH^M zB(-WZCGR^TbTKREbVA?SWy@tJSkh^E0H+ts&=Bu z+&u+$O!;ywomtN9(HI^E=dHh)$lZPG&r!m_D7KXUwgI83G{SxaZ!kX*t-&%NMaZ@# zY(qH7FGtfir&n)Jl)~)i7w_JlUj6*${g2Pye*N7qKfQSK^Rw4PQXv1Jt6p9RQgm^C zwf4B6z;x98qrHIHA3wbJt6zV5xGNqaz?F|4?lVrP0jbSmK3$_&Ev&2ETwYOcXK;gE z+;mNkVwRj0%9z<9o(R3MXfiXv7I**57Fzmvq+8+e}L%-rju23d% zw-V9qO2b0nUpYlFhi&hO_S-yzgasL&D`E<6q2v2o-H6B5Zti+q)9iA{Y!ue%GFg2* z!_?|9xGn6Vq&|2S^eO6}>vI>EurUCQ;`qUh$!HCp677o=X%s9ql*mI`!p$k$rbTy6 zxzq97=9 zA5wQ9PBHpX&qPb?r1Jq2(L*^W<9ea8SqPHzNvE$^chnr$&&6!pf1;U>K*eRtu#~8GDrKvPaYou%ESJ`90D`| zb3ly02@?|LXpC_y4KdGJ?JDK8;zipTLsa5%+?qay z9sH?SXp_x=$K2)C!%p9W5XmqE?^2pA$wcpNSPHfxFB9ZM%s%UdgCaTV13}DN|5Qog z=MU8f`wO!$6_k#V_k3b>ki_R|B?^Qgf!nr`76zsusToqHbB&+1PSf1m@2kZJJ$_9* zDb)xFj%A5?GyqJj^wyu%ODQ5uSSWPBf3U4j9JZEnYQ=o=;Fyv{TVd8_C$-O5l@-~D zdV_e`P?Tbqq27egYEw9XvXY`#D<#91Kl|sx!t3* zq9tEBa8{MZEVip$^|x0e=08Hv!}$W5x@{NVQl4kcgOJjt)=-t{dE7DVxT0wU>+3yB zfqfM7k54A6tOOCI2@DWJ<2fv9?Z)@tV{v>%eWWHLx$^6VhlI46o+a7j5nV33qN zCZ6a9Jd`g`jq)U>^(mD-NGq4B&bj~=H)*HzA~4x#5{G*49v(lF zGX;Vr_C8QMA#P+C;8$aU5)`yl$C$B`FEaFazkf3S4x4ly0eKRG$}s^Mr49SaC0HJ~_KW*_a=P zm*c$b*y1mr3%>&JnfWESr#Tm}Ke%OsZ>O1Ldc)R(PYJsZ5FZGh&%sz-0UfwJ$0=#6 z1wAKB4Eao5$#nZc7QgiTJaRBBS$^2oIsPej4W@FAHR>n)pmmeo=wF;2S*4J|LmtFi zI-ZM*q(a}YLA-^U%p5=F$yT5_IG(w^yXd-~c6Eg2F@w zWHuK1i?chcNLJnDIH4FUfDE1fu;&(c%(6L35Diu2D0oS69Vm~P)sgxD8(g2C@p$n6!(}hy}ij4oUoK zNR)#5vBH)VttrOJXyhJ>4f%DX4yTisW}tlV!kUE>Z`i}Wrii)ORNSacGO%w1(-f-j zl$@&W2vt7BhRed#P;-aQ&>6mXYL`ny4(3Kd*5?2Yiw#qixt1Y2eV=24TT$U%HhNJ= z0Stp((X;8PbncAhRFr)#5!WhwUxe>s^kt}K4XVaxB0YM^vTDM8Q1^WfBs+m^y5or z#tguU(Jb9;u@L;HG-P<8sc96T6Abr;OezqXpd^5=(fZz~86-Hj1g=yjQ@f9^0k#Q+ zKNq3NQaE$65u;$QR?<4=n$8z{2YXsTU8kk(uPzT9Rb=sfEpi)MX1!W5mf5L{%hs%@ z5JZ(g+}XpL#qboBlJhRZiG$VTyB}YW^ciU$4q*C443zXkVUy*e4@6GlmQ$c=_KuA> zSqxGnYKE@JcAyzq2r_0vqwkkYQCYm%W6_ni@L_IxPL~omS5J-*8+%8}kIf|AIAJVY z2G!X3LARvCZH(uN!89HVO%8Mks~(C-HIHzMev{a-!InatwE*hDgh~^lp{Y@3W^Pf* zBwd{Wk77EbgxFB#(^Wl2E3Y25{&37%RzG9zBIecYb4_BPwdF*QzIBMM_&JzR1v##1 z#5P5br!5SUkFBRF}jUl$WvTUY8xnfC5l+~ zV3x*D9UhIV8)bK*|6{Kro38R0dzxdI(yP!Y7$728{%fBq3n#H6kG>Q|rr`ES2q@*}rB{T$T+V6KVy=B(Xs-8K^ zf-qK0K~y=Z^cxPxM&q@j+osY`f>29`Ue`?WQs)P{L}vY!7@B)*Y#e1Kv#k-km@{Z{ zlM}&KM&y;oh%E)iW^#1wTurG|BAhZR*78D)`Zvf(9t%U-+XPs!MpN@mE8C*FH7`Wc z!%J$N*m*Tsh#J{o+m)eQrF0Xh5n38id5Q=)Lc)dy|`5r&t)gB zu|L5}$*xVU0bZA%uR$L>5seN??pWBe zt-U>IEc^QkT4M@eCQ-+cDXq&&nDIVR_Eu3jP@!NPl@eMEK>$l+++j?P$C}HjZ(x#? z3Ok_95TYUHae(Gg5;`SbG3<%R*oc5kGZL}tvf5BcrUMm^K&PI#Q@8+!(LvZ4fN_og zTHXRdKd5E2LCrrR(W~$6$VbLE8G|}a&_+BkC?R2GSZ<7QpvgFh_F_`f(K6I(wN7Nr zV1R-nbAc*YFwC`R-)**Fin@QW`^A$72cT8}h_u^yT<|3_*|3KK6I@7AIO-G_D!1NZ z4^;8^x3)NDZ~$LElM5s#9VQvzPKw=Q2XhNoqwi7cGC+IIZMq5Db|La5W}}7?ModZf z_WDN$L*xTOt=Jd%Im3+sV3||U7E=(w_rIWX&cwJ3cQ_r6u3kXn3zT>%uvBj2h-x2b z$K~m0_OXr^q~BkP^~_j<=ywi6>$$x3kaJUAG35Epy)3T!qk33Nre zoq0|h^mrp-1>fczEHDoDMhz4d9g$i*)SbhMQ~2iRpFZZ{8Q~#}+){9{8k_SmNm6PI zewynCoh_LP1%#O|)WDoVCCUj;XR+)e>NRd1e=J55lm6KA)(q4PA0?w5D>c_=J^)|c zY!{qr+j~R08nKu3D(VVIUQ2z8xlzJ5V=`eeveOQFXh;kRN?LE;(chWc3=6w!_1mO! zPjnIY>dW24wr1f?S&e|1crGXD9N-KACPCSffP)QYTSai#a~Kyc1}r`UE9lrSL93w( z1$WVm|J*qg|wKA7m zYfGv~ddg5H=wTdU$t-4oO+FG2Y1CE~duczd;Gp&v#+Ao*LL{r$s48;Ay6ifX%rVuJ zk+wPBLYO5jeR5*XEkmd>I4X{Y6psJCPBiPXFR&T2uE~}?5?CO2?>)GWK*EvHve#wS zq$EcVjJ)FejiQzDSTQ_@+umB-k{1VZ$Ld%1=ZpwdF0HPYHL0@WhQL+7mj5{~m(Q~V z-DDd2*7tyej*boD_aubTwwj(egOEV$fmHL7su&6U6}hj);VBjN#!>--&fDN*ZN0 zm$rQ!2mAN$-Fy7#;isQ`L>$*|fAg!~{`#xm{OZfEzWC(RkDo%`eD7#~&p_hjvNb7t zJ79Q(U|z;XnFS!U8|gi+>s0&yA7B+tJ3sw@EbG}B9kDuHznafD)}Hk9fJ(GoS%0bn zJPMK*qk<8!8Pzi7v523hbf}uq+U&1V3RPi-p{QGz9Ii>vXv1lskY-;>AWPVvgt4k> z-7Phn@pd-Tyk&hOstzs!KF_iKTpEbZcQx3wV9KziDXKO7xw2fwcVSSSYpw*x@*FC?UYERu;Gufn`BQH=9o=IxVNVa_}Qe9TtL_ZI-H;+vj5>lb^w1XdP zFpaUtHiZpwtPdYQKr%}t3+dhi1avh@`${%t=3Xi_80^pwNmg?~*MYwKwXsG-wNP?H zFEiaV%uFP!lbv-aW{5#(pL4h@2)kx1un^A5EPk1R)AvGS>GllotPiLab;xH%e)gx{ zVrNTF*1YW+j(yO&S_PHV!Br|WPKr5{V|aF+Gs!rqGn6M5K9msC=JHRMP4`X1@n(KO zW;)m(BIC&VX3}3Y31kfny9=p{C5+DhxeT4f6pQQNo}|H>8Pcc2Chd)HXeg9MxF8%{ZW;6=y_&EiLScg`e(27B+wN)EzKh zHQpm#xyIris4#Bj1iU#uL}KjB(0_nOm`9hx3LY+Lu!%5rKKo!w{IIlmZiwyu^5QC? zDO{B4n;G%-o6{SE>@>BRXI!hfNuAD>nB$r|cl485KVymwgPqly;e4$ivQVZlT>`iG zFaPWR7CZveqM#YYD@oS$ml7}~AbbRWNBK?S&<9a^d~Y9b^W3H$;9ZoHaR_vMV$9~o z=3l0nj^)+5&Gft4v0>6M-KvDPEBSR<0=)sV>JWTSk0f64}kJWd^R$ ze&IZ$g;+i58@RsJCzF@KV}vbQk22BO5GNCmo~)9HZs(Ubzxwhs9t4Z_T6D8A%~W~x zI-VsmpU78?4r0o%Q1-JC6c1itHaZ?EmY_6h)Lnfj=Sq9wz>LsMlHX}UqpFTx&G);1(68Jv-Er4W;-!AYrz(v`(;tXBDVN}((hG2lSX)3$ws(EJ7dvwiWatMFCL&HSfW_z57SIF!CH9@399+4X~OA_YUqK z?}52PWx+VY9&kpqFoFejLIbc$@@V1*bKYKsV*ntU%m~gh#hJij{GHpQ=FDFJoE5I_ z^>l_E6fIl9p_sgBQ<|HR0w`uKS{w8n$Tc9-xF#LXXm)beDUpuY6&F=)z^lzt|1f(1g00MR!!23xJdG>{av^x zb>!|oHQc4)oHCfHyT|mY@F0-Kazm2s~ zxwl4B3W>}cSKh+$3XD^$IqHWoJBm3-sL~m=hb*fQil*FD%xMgESSDY+dUtwy&In~- z$`s`=$Y6(+-_x@`<{k^-Ey`d%EZu~GNBL$m+F{WGW1pPZaFa*|B!(s2BuP@kBhoc*z#y1?XW=6o+iO-6Qlg!5X3pQa~Wki|xOJ~us z9Nb>Ruf*)b2D3N~d33b9nJr0(z%&Q<5PbpU*!4B~?Tir%s0=w11}~eI6>m(}mbqFK zCky6)*?7)Gx_`XOipC?*^^vHU3lLneJ)y5*9%H(d|7xtoX36Coe9izH-%b|>)875Jkp)aR7+7dn}4Ntd-D~$aWkRhj= zj@MpsLjXcAS|MV>N5J0*3Y0s$WBtjcDw`;;#GpjhF8~yoyDVB)(P2sWVp~DrVAGH% zW882anS!QBcPRtb62Drd3Dmt(jBLoLMCWjM`RFoFw{yo5s!T5vwu>dXN~m zDlb}7UxP03+qeSb{s`!nxk&VfXZl(4$~{l4B`6;g*4km1~NN3 z1UoA6l_EJ`drNP&yb+L(3<0*ir$NhJdFPDi`QncX-B5;X6;owtnrT!sX%6-~&=vRU zs!!&a>Vo=OT8^p&Sn1;akv&!da(r0HgHYkZS(=Ps}kfuW8aPJS|G*22*u$B?%F;}rW+I59fNW5*aJt<$0HEfx3WX_{uqJk!LJ>A2&=%Uyw5mp0sKGQ-~Nj~ z`w}L>M-PrL5`XmM0V%*A93S34#xn|8t%!*ghbPfhgGcWav^1#Y6+){jq&Ii3NFw8K zONxDbfRFASj+M)UKHsr}mUq)w9O+KNm(}D*k8cT)UA^0{Fuq~vIls8M1Z{VEt%R(j z>FLEaNmvydrFiWo!UjqRk8J!!~R{&{Qv&dd5-8wnp%SA z+ZV6iGXALl{F2e6HgHdK(C)b6AanY5F{y@}Wj>m#iks*IW{a4KKQei~<_jsnj16;> zcRgPuW2B%Od@-C{){Pt3v=u^vgg;=%ri_uK$8fHLFxcighqyrONYR~->gaY zQ)I;MkYH2tHLV?B#e!_rPVSgY;JTMHC;^?|p-B6Uz6#mO>FL$XVXB@AY7Nsv(7<6! zWwz9uW0ssO)SEhLX#i73 zF+bT6rlz90!ar!U$X)ic?YVrDhmFV)$|tA)GN{do5o2nvd+{QIfdj1uQ|yfTR)Esd z=sc0MJP2_6)5U~A;7>9hHYJN-0_HHhuS{t2efGPecxWhyk0)e7Q()YQK`fAjs%uYY{@ zn!IK|J%9VtFRxy|Jrl5WEK@8J)00P%ufF&M%ArTU{JZZJLQbFxc*GRy149+&x`pv!+A0jNMp+_G-}}R#XAm zFX;ozJECvs?zD(}D$!BB$RXVw9PG+rX)?#gM&5MVx3Nk3V9CaS^)ZUEnwSi`-7qT_ zvSHXDHV*GdG-arZ7-jLou+yScEo(hC8oCyMA(~jrqB1+LC=!E$F&JpDX)vTQ6@0%I z2-_kUQFMha=)5Vcup&BCup0@<&r$#Z+|PDC7RkI&OA{%^!@|2D8<2b*n6A*Noq1}ZPxg&eTZeTu#upG583}MZIw@A1nEO>iE?400+7%A9~1Qen|u?ZlA z974z1kA7a;1Zm)W?HzQQSaCO;a(;n+eo%fAf>a_pKED57Mapc5Fv-0$sw;ud-EUB5?$sC{+V1edH881j-iq{*oaECPV`z0ZigPQ z|JGD7p!6uZ%=GrsBs7VRkSx?}W7lA6i}fL$EY7a@^Sx2vTzE&pOJ0ely=oypUzUl% zBXvd^Ag#X5)ooAE>WjfmI9IU>oV-FIz72#U(ISEES9Dwz{{{O)0$m~$xJ>{-dKq(J z9F1iNuMiqB;rlH9m0ZplHF`8ISb36z+-X$k9^W|MR9DNWrm?DKxaQbgA;=Mb*LIcN zh9X8cj!@-W1RRtnjOEC;_2t4n;rhulCS^)9ZaAY!WHezTco_sgq$TicBmo>Vl8@t!RYZrvKu^k{E%(l z9RJbNr!ew-_UXr;fBFdyDblWg@%blTe*Wo~pMCn}7oW1>_a~o!^7QjhpMLuBWArp6 zkB9dUVe5ppXU`G2Sl{a<&3>3yU*PV#Ja^ zY{x3_J}!_8QeM?xq9i0&e>BOJu|FPbM5kzU5t;4n?Q$t>TbxDx$to0NpWTCT)^kd(Khd&- z>p{s=Wgwd^C-U)1D9K$|{FifTQdP=jlm(=ZIF%{OlpN&j7>aZjxq<8k3RN(+(J@?M z5|N-8&*$Oc7DC+Q2J&FiCXCL|bmc$Wd2 zrFfCzXtGi*%{FU#I8&hig8Zv312NN@RuD3+5FPsQlSfQnUwr!X%g>+w>hq62d-~wB z&mY}qt~=VpYlkYx^oeuU8W8{{A4jz-csfsrBp%-r37}`QhsAbg0PY; zlD`3?#Wa8d9o8pPqV#wOzLB9q2m<`8Gsz*{L2u=?vhKW2TEBSGdhPP|_VRWtIYh}k z<{TW5Y~rTVAF>Q3=!|tg(;CAWZzkL3xn2hwR&gGQ2G|0AHGgIj;z&jux1+c~60lEk zKRQ+{!aO1)RGdLA$p#!rg>f*Fgrk!UPmxsCO_j|!i#sy(WMsUV%H*UA&KAl%$h5=g zzyM7>V3r<&UESeB0@UHr?tCFw#KxUJNg=$+e=7zZ1+@uJWGdaWiz|{bI#ULN6e4=&cZwmmy{wz}l$`%}D_>wV~P{8m6x~!JAeU)&5C3#{+0Fl63 ziv{9Sui4aFi|3V$%AQ!d(-tzZ z){36lN+-awVsHf0br-t>^EfHGk;y$s1>ij)9Ce=>HyeD_253uh)a6-87s(_jhy ze0x0>;?;4Q!X5DVT5AAxbfqG0Q4OjZu1~qSNyz}X;myKg@GXD6BCoQbtWAB$a8bvL z>@Cv6F*jVI=Q;_Yj^|_sf|8xh3?_oNNLeqYbCaFWCwK(JIJRj|%1!seFvM^IF7)=~ z^2OVeXRqG<@!Ma%{^|KQKRo;Xr{_ODfBC~NFTefq8Rk~p50qdq(4>T`8(`go2ggha zpM3h!Z~yF94UUp$^z_LWUwrb}r=R}nw_kny$>(2v3GDj8r%&&F_Q~Te{lgvV&{jw>=>Q92gJqW`NgdMR{9FM*4d9(X{;4m)Shi8)$u5*+or;YD9)jA; zA;B4OFb+)4q94lt8HyRCa#8ilqtH_!5qL`bvFTP*9bVEKu+2t{4!D%^~^(YJWHxUosP?Ea+X8)P}Wu(!nkOC ztyQjJOg{tJ4UxW0Ff`~foEe%OU8>J_ZiY=n%$fpVdQ{<{G<##oywYZw=zICjEz zL-R^c;AS|&NjxGHRUZQoP#{4CF`lAoQ!r!}L?O&>!VjXk$R^SQ6SOO=NRvSUOU{EM z;D_4}?(Z=z2*|dSZchEEIxNd6$j*$^R5-te+PLXFPSom%$C+mmtn0JNN?ZmhR0?l) z@-G|tF&KiF8hCADn)VUJD|)D}lgYL^op+8)R8|~ENz4LJ3GS!8?cTxuw(+9P=t?|P zg(K!cG@~xWKNHpnVVcAPL%XbRG0xeHsC#n!=bt>HYxdQlm7OX&*E1NX1e2~ylf)oOUzd+% z?i`2WOBN%yU^RCdauk5uQFSyheHB6F3Xw(AG2J`4bQrRt_+cP#EJNJ*fwp%TNp0jU z@Ig#ol3b@N)<_OHm6vaXxKq=TUo*S=Vmz9&Lh~yt!6MP%nkJA3!z$eq-Ze&WlZ_GW zNiB`WTFP+a&{_G-JzuY$H0RD@p(V#5LN@mpO>8k*m?nkm@C4kf^kXCkFhaB7o~F}A zvb?^&kz?F17NsOp3p-CRFPtU(l{wO~^3_Uyo^Twds}{0moT?>;g2}fGb%`Wu3=;1$ zF1P0_TSgnLJRMl0j##5t$Tlj@ln6g%vZN2Ycw~ooM}ww`k{^?e(76cgL%?u@I&US|W^Sn4H^I=1ZGVO6z9{bUfoNfndpr7#Wd5R=ImB z#85y?F?eNv3g+FGLQ0yC{1k?!v`FRyv&v`(b1T2NA+k$GqJU5MWSA)Byuz|XC5WAf z!3Ela*fBB_3rTdacYJh6;;nl}0u3D32U%3vVq> zJ?ToU-BsjH;8(3e;-(C|ydl{@uN;yr*Rer_EjW>URTx*vm|c9WOyk}t(rl;MKIGD` z06~RJ{~@oFtGzIn=cm-Ze-4nL$_19o=HP0wuKHnwT^Y=I_MT`9r7l)!RQ>WmE5pPb ztjhLm*kF*$Mm7zK&+B|v@% z*T6!Ag98B# zEQMS6u)?UcG0+2FRx(m8P3Xhqoc3aP#v(i(tMr^kKT+D9CWxDPU`dz>owZu(nFHuF z;;8ew4J%XUF=HL!T$T*l#13agYB2bRJKJ_;Fd<8sg++*BG(B}h$-!$)jfYl`r^wo5 z{!uc*D*I7;J#Va$>qh{_-=5x#t*&P(i?b`hNza{r9Iufv0|mNBd#A!fR~#OVEYd+J zSSB#NUwWyPt1##%<}~RE8P)pTu%M`*f%k+Z+`3$!4ulaf*q?N~QbtHe*4)Klm4w)~ zN!}2KkRM%KssC`l6fGme40;X5I3Ylk0b!lM(>70s*UQ1};p|LC0^3Vk#4VVwM7ELy z+eWYxNIT{|G`@0lD_~pdr{*{| zJpWiXW>yp@Gol^@>La8Of-Zzv#%~fWbDAR;)`pNEjY+PR5@L5q2_0RF`(xOX%g5|& zCNM4+N_P;a%!TUQpun{ z+C+P499iW9;lda5JaPy{hDL~*JU-fK`36)Ga~BUD(x|qXlGAVb8jX%8C05lLM&uoQ zbpJkMGtM^D46eW(;yz_vqt{6{+pNv7fbz0nW9d+B1|tMu7y(ik4d*doj(sX?#azPs{RXD5Y>cck4hQHeH+7>n4Rv^iaY; zJk}_wOgZ$T`(j zf^IC5A!mmAl0CKP3<-NlHZ)EwdBHR~LzTdnx|OB%(p4%K7w;CQVqt^>nA2-!YS9Kq z0@c%VcDNJ|i#U)RGV#C=4#eH39^!%#7jPK`rlQWr96bfgla{~YZp48)Sp zU~gNZ4({i!R<4eNIE_BmthKbFyH0nq;Jn~V+&LEDGvn~9)_Oi|>O~jPLhsDYGXn=! zBdy?oiqI!fUuU#8-eA76LLkb|HDKknK(oQjfXZ=xIl5FX=UcLvom^i2_|wbpe|q`j zvsXX-^!y+G@a>Pky!!V0XaD!#{Nq3V;p^|e|M}~$e|$kk{8#S@pJZ$x1)6A&Cq4M+ zqmPd9*gd}Y@c8)A<9mc3J!v}|0Ne~?&h5;># z^%__?$_xFZu?Av84lJ$fbdsLzM1zhP^nshP7&k;9&4MUcP}dF^#rkP}S%`D3OL&)4 zD*%&JN4C+K?#*zL39zzs%r~v ziC@OhGe?1KBc*6Mx)x>Bx+(b5ns%E_mh30-Sz;}<@D<}`ZO(NHte$LrZO!Sy87WQGO(>EtF4*|{N6LcQKfR)6VEtuZu z2~vz?FzbkM6_}g=Sv}i>sFQ)1=?7f|54pP#m&lbdG}!6<>K0~h=At!CHlriZlJi2ruh)>_*7vX2hGGqp=8owE*;HTYOu9k zT{AbYR0&H%I*^e*{rC}+o!*FswqmfiEkkFWp~Z8`ouyV3?v6nPxQZL1P||hUw?s=><1tqNlN_V(dFCgqN2x(j?KfG`$UjL=XZg%sO!sSH#v(LL)7T8Smh5 z2V=dMcEUb@5Zq&h@G@iHCR6p!_Lidz>A_9PNr)K-Q>(oYVi72yxkGk+ZiK1z@Mtfg z-LyG(v`T5%l?E`=jiwANjx4K$V8FS^kl;n$s%ylYcO#%(#JWLk( z%uSmt+A+$+lV62~RbhzU!viP1QU39YWDw=k7=+o}9-*9_%rEKBam}(PdJ(&P0e`qF zSE@^uW~)-gLxqvT#~4&5;VM#tg{a6D2NgNCiO@(JxM+@H-bU1LQC}e@ByW{joMI3S zhRAzL(i#7hDoS}%mcUP>Y#Z~;XN3XDgCy;4t{-GmE*Xnkl}_IGHDE62j6e*0Qj82S zg2bd!*Fm{8d!&y^Z8jfLN*miy0yWr<%_Y^sVW}22T^WYzw2aVUr+J9jt8JsH-7B>! zu$5>n9p|*Q=_bifD! zYx-w}jHr$&J4-e3=A$4+;g!SqsDf!L!+A;k;p}6GQF`^Pnj&A9rnne=DhB0(qji%3 zwed$}^rY3trWopXr){2r>@mg9GC=`Pod4m}D+hTnx2a*&_3>JdQUkBBvGDaAPr375+EBGSTH~F&HJYRms<$Mz>ht zYpY5;BZUKqdWh$aQIv*A*_@%Kv9_4Zvo{noFR{jq9!cZcU=MXIr8?mWDC)MzivvjH zowLNr@M|o{gQ0{OU==L^QN;&AQP_4$@)grQd-{TAY(hTGeZ%FE2nDVTEZMkp3`KZm zr``GrKgsFU_0O=n;Ef8ZB{No@E}8GtICF$AsO4l7E#$m!F-osT7(BSAhQI1=SS z;=s>86-wx<&p!IDWnGy>W+W7#or~tH?an)GEVx<_Qym#C}J?13J)SN=)I8D9mRZgAOf#-pwd6{2!3X zYiQU$A?uYL~B&LpN(FOwccqdaUNT4auP^6}T3@ zUzsNw5}ZVe$=GipU-r1^St06fnj&8x4(c7~!AvG!k34#O@-SI7i4NlpLCx8>bWgO_!yljzB&&W+V>GfNL1T zHfz@7v!EmlP!HsmbGZu3MrqS^>7V9lqOMGO?Y_=W8LC;@<5vj4(AXJGodIP#{7FD^ zPM}D!9dm+~1^Mv!yW&4jfhZNhEG^7d_=dP(`sdo}vDCImz+RDPWi#U{`?c@ha&{PL zXxzDNQWCRp%FKs12kVd5xHcmO(;>mRgRcCS3~fZ<@YD+I>d+o)$A*2y>iVnjm6_#Y z{^q%~QLg(|Ze=P-a&A3^SAjdfV%Lt#0R|t&)_5dai5c1I9PgOuV7*qh%LRQ5j_m zuhG|HLmOd7Ur*PTsDgn?D!R1;eia*PA&0)kS2_u+zj8*IfJBEz z0Y@tliO*a z;{20ft<3rJ9%7`V?Twknn~X^;1u}ul(WG^qNtp$P-T*iO4>+@Dz;!&L?QKGVVx@z@ zk*)^q|DE+;3Gr}B3D_c+(Srwv$hI@A>_ke8W}af&lmI*QVuoG3iK=jOHQ63^=Mp6r zTX;Ma7p6Q%8NJy5W}^l0yu|5XGJW{yJ}o{|0KG6o#=D9`J~TKyT_&UbgB>tRJk0s| z^~UoQ_OtjvR$A2Od`-&*(drDfB1lVGCU+6HWn{fFCrC|)6~|M7713r~!SZfMRHK13 zo9JHhu1_sM&MaieGs%YaUM;{XP?W;_cPC>bdlSYI@JULWf;H0v{Slv-r4GHSkTE8v zrIS~Gm~km7lY$q}MgjUrj(LfA6@J~jdAuq~eCk366w%qKqS8KUKu-vR{POK0mzX6= z61jkn!m@^UM*9<$YLe+B@8I;psFX!rS2Af%W$4j{OTrVE*~Iy0tVBffiqFVJ%~PZj zw0Km>{5U>sm*YRMQAE7XV&q*Jzu8{~i}8~-OPSwI;5`wxs{Ls_bDIPy#I|2$2!lnX z@b6gnP9PKit$h`Kc>k)JiUOt!`7*&k?z>xepTqFXcHCAt0H*~ zxF8oT=e0&^GS!n`{WUEf%BgCy(?%|}$u-NMn<`?K+xgfWooO_I25IoP_l2L2=_fWI z+tHeNgtS=(QMRlDY7p^fS(5uK4JA+Vc3vTGPHr`ZXDmK!W2X+M5Bi?0x1(_)zqEZj zakjPOz6I%nh{*mJS~c=RiCX2t3pOWF7ReYD5h*>w(OfEY9#oyv-fwm%8%{h5IxO*V zo-5J>@hVd@X?2ByCbZ4xaJp+*c6O>D^8ojdHolf2J5g!LPwJZF+` zH20npX)m035w%S;qFOtaw>KloPtT<9vK(=51PIPz@@EYf&5A)rh$@*4Xc_bYtflyY zxw4@R(sC70hP7Q2MbmEWIRYCErbf5L}nJ+pWt*Do}+7C}j9_8O5EMPMVc*Tvf-DDz1{ZQH^fK6Ro-x z!+5Rg(?yXe#*WiuAjxJzNO%aFERig`$x;;hB(`Zm0_z)A-Ftm|6!ojXS$lf}mJy&T z%dQ|ML^5N9$TK-8 zsl%uW(n7bD^M>{%^#9(Y2jt>MYBW-5Js3z3MJ*A2n`QceQto28A`0ot&!2q$36ZKt zPoLa-bpMbyKe2e;Nc*v1ChKH#AR2)_1s3~>IVRc;7NC;3J~dDvE}fo+JxxFL#z;@; zFoql0<*{lzpBgO_M@^Rd%_&%wJ!-ZdCRXe)|@Z` z*ekp5Nc3K8FrNSbe1CEt$6;j30KF01S=nfj@W1hs1ZxN8WD($@W}}%SH=0aJ7WGuz z02S>NvAa$a3pLzZJ9AbL>1=eI?JJ$lFl}pIjzU6HqM={Bd{0S%Q8-Q>dW$$$d!Px} z=`2Kb$9;4GB|#@-TA$_B)eYH_;le;Sb)p1|Mm4b~Bs?&=O(%1y$~=B%vKVId;C|9- znT+kb?#hwM=Ro*8pcw+^YYRn)YCI#&TPkw@AV= zlX=ORPPBA3t(LGsA@ihENR%nnCwH{(L3!d5BD2T=YhJNhQc%q#xSR!rR@D5KLSuTW z5~CgEdeJ<%R`k|qQgGw%E1`by+J)`Cx=iLJh!MGUTNC23fT|gv1;`5w<(%Jm<91V7? zp=*u04RTHF;23vhaKQ{_WMY%0;>FvmpPrw5`}6DXeth%){M`?K_s1Xp_rLn%|N4La z{=ffU|L%YKzyAKe`yc-5?|%Qy4?jNp<2OJ4FaO8yzxn1F=n1+-y|s0C|H09N$44K1 zvVZjC-p8LF-@muFvwsW|(YaJ)u2IItnVlF+LaMHVLh1mz5e{O_#Hgu*fj|Q?yG_Qz?HwNPqy5p`Gt9!A_NbhRhEso2Rf`(mvuNOJVTQ-RM~JC zY*>euPyjDvgjFczjWSG4ZtTPWX+W00Vp1m*9b*cUuHwIBGTxL}{z&`!U`JkZ?}P}{ z#79vSq}$%*Et>^nmpjj~x+)|40y`07hwlCMJxq-vTHjLi zKGV(4Za>iC!=oLHO3V%%&qg1S(sau#H@7!4nwF?h9^uWq6FMlZ3P3Sloe-%S0xuPn zK`O|X(QJxE|PL)xm=?`vz%I=d}ocaG$xK2g zUz64yTMus|fW+~fuULz&*=4*B7nw>=;gy@JVm+>_JUB%$Qw^yxoHx>4J-~V3qRG;a zDsY<*jj=WD5SwhUU8)BYrg~gQJu8CaDt`mLD6#Prj-8UXq*R2{R8vYvcmZP`ow^IT z1ihL9W1ZnD+dC4g(Y)OP?Ro%fT{R62A()}e2uUx^jt-Ac0omyH^>myQXD_W`}GW|laZQ!cW(zV49I?MJwf-MjBiQn`^($2v+MC%saIVa?vO!zl-RLa z#&0SirgI9AnLMandIF~ef}8wAVI)Z`Nm$0i$6Od+>N+4{g#q+R81oIwBWn%MTC6P0 zCx}gSw{*g?`TWkHbJN(5C+2|!vrs+I*Wfy{9c1Cgs<_W<;bUUKwF^thr0{@J5XlCH z5=q{{YFVRaZkaj$8TT1V;<^>a!A;9F6YxTXRKL3udXk7mO-yY!Qn~e;3+bJ_R9)m zW`Ty}Ce4B!5k&;(t~S;sf?|+zm{EWru@pRq7K?R0>vDV#?1cL-7~a@SQ3kCTLu4zC z5s=2c+Oo@lAX})}eQR781vnL+-sH-0(^YnGwM*rD2prG$0&E2`SRjp@onKZfpldaa zE*0H{)H*1Xe^)X?uFy0;Ma-Z~9!XghdUz_5XUQyw#1b=bf_X#Kl7vnC2}NMAY3;TX z&^iVUSP1Y9;Tfk&#K3g615gWz4xvj*Om};zOugnO?lIDNFevL$Zn-<4N3Qea;e99J zO@6MdylPh)SyU<}Js^7 z9h#|KrCgS`VB_O4UzukGyIw2;ZANq3 zh`lN<&&Yv1Ba*OX8?{crDG}M(6ItIrLao1!!xf-jlZH{k$ayAmidA`&dZ6w3qVcGj zRN^qMY!>-)q}hzF-srK+$QO~U=-#C`cu6c!nJe?%Do=ffvz@QgL)aoe8_dAcQjx3K zka5J&0HzN@Gbv1xn(rU%w%fAiCmo(HWdmY3+PIl%YZ(lgG}H$c+OrBoD?DgMStbBE zP--C}DMMC`Oa+U`5scr0%wjT3 z_(FmWS4vZ%A3#v8zjpG1$YS3MoJPA<;|7H0P8hE3_!s3AJVo{|LD2$p4;EN(hZ zqo+l}aJLC($~+dy1tkF{X0@NGLc4kzbo}5^pPykMfaw4JLz0W^9V%hr!O{J_ zy*-+N^>1s4Eos2a9ND$q6(&gZ=K>SS-!C%QF7F^iWzZY~%MxD3TtyN;P{QZ5h;XKZ zjyRz_m2fU-#U6C-UZs4sJyfDbHG$hWesz3>$X^3LOq@GJcE?;1*pnP0VrlxIDOMwrn~8?5vzRILtl` zKg&0LnFr?^Gcx8lh9-rfv{drc;j~~T>L&cAV4@{z@{Ga_QDsDI1p`C$kirFv)DSDN z?TC-Ldvv%iZZ88$n0NDS6=p6R z5MqWI<0=uq$XA<1Hteefyt?H6_u(OQw?g4_qb){Gi^#@%qs6+8QJuNR4DKt?Nemo} zKBpq&x_JHm;^!AcnZ5n-*}He=H*y3xUx#d701TbIG^YRPO1x{%Cb=~C8IQ%-7X`nn z`Ysbngu3XeQ3F*CR#c1iqRcd^-@G04Q^Rk~^j7_11B<*}S;ILb^-$53Bw>+X6}U*< znB%bB!H{Y|Z^7Mb(RwMm#08co#UZzW(u}T62(iAhD=?L&Yznaw;oLx3 zMb@UgVr;u(%FV*W;l)Bt6;;O*eo;$B>I7$J4{4BAyWXx0-%P|p@ORPJH@W7KauA@NE=@a z>eO58K-B?MUls1;I~Or>Z0Fcua7x164_~P>os}=Tnm=QtOUtw!&g(sSBJXjrH6NvH z?v%PkU?ZCSs?_Iqc`$b7rtC~LRP~VU%34xkb}H|8Wz>uBI|_D=i~+lX|5VqhXVWcP zsk^yO1u4q)D}EndC54rbNr;5`o2fc|+RBriK}Ln)xuAKrj7tSn528VpVP$?OwuA9T z&}0wVLo#?J(>@jrg9<19oS|<6*02MA657-;@E@ao_>4*DiepB+CraWjZ~uh-9Lu(_ z;=UHw528LrDtO%E>@5Sb!pv9k{#2B}@tRhoRB04zM8(hwXr-+G!k?=*5#(_W1 z6C+cc)e@($p{kL85eg|1Co7 zAgy9TWi#4-MmiI6X06}|JnnR=<5T*GO{eEqb3JByXJzcmD9ERHe1OIcz$sEX6H4isAJ})z}k5^ zK|yd*^eZW%2&rZnR+WDAH>@M6WOSCT?L=w(Z?Ls?9hO2fBknyfBxC_ z7Z0|c9QGgVbsipej)%>|t>#X*Mwk@9n67f_Y%nPCNG0`|-Wh>xREuEsxA6g2TEvs6o#59-!_PFV)63pG~e zJc|5~Qcr9_QGaNO)eFDfa3Fz9ZHFcywZ9R$7A*k7_w!e8O$sCWXHtE`1@2ghdNNXm z|0~2CfiN-|610ePm%a{6<^JITk9Hx_=*;jAIp;GYtIkFYXX)hnnyH}?-m8Q!dAUml zs7!!P^e(p!nX{ITK?|_Ow`*t=3)`5_bu@exLtf%$0yz@yO5IW7 z5YLBmdTomIAopa5DfO8Iwky+_)vd%pE!i+ZBx7@-MiG4jZ$>yrvINDXxv`K;sZ4T@ zaIHRz)j)!x8-rF$B&!o@v|{X|hlCx8pITxg{+y6RLXlFA?EgWtZW0bhqmGWu-Nb%+tujTP^{(1ol?PBX+@N|KYT zVq06Hl@;^74ePDaiO3#?2H#p<^;j=U>L_lhxq|FMKoMzWbbdNdgrJpEg~a5`jWnrx zsiks0`}h$U#sj6P#!4l#asu!RV7_^>;GTdGa3m(78pyCKXs{ilL1@hR#Rxi}wJG}K zhMx)a$|G|$GZ{(~T?jXq6S{-=k{NHfyF;b&jXN-$-@G}0`RdI#-~9Lw|M1QK{nvl^ z+kg1e|MtKAKmYsx{#XCk|Mh?W)nEV3|M7qRKY#kux8Hp8!>bpsPfyOqx3}QYm%s5T(Pr7w-*p^Z6(4&g1TNn)3O-Sju5vA;;~k$AGm&K>p`E}ffAC(osd3` zq1Qo#1Y(GLnP9F#U?qJ0H@SoOg;ln`(aXR4((M^s=+f`dFQ%cz1tmG!^eH zMT%>G!`Sb)W(tK%wn|ywoH@~$2(xR8gQY3pEdvnElKSQu37XlWwfoq7#jMN%rR#O>?bLsZ{PVe)zB~vQQ0T0Ak*Von-|E zrNDTK#utr!;T4nED2$6?B`ez*SRv?;Get0HDyCOp z)u3yPoMy&lfCK39{Vk2bF3--hkn5f2!1O~WN0X74$-Hq49*&`W;lu0M7r_G6c5>*x z$(s%Xo zJm4akTqzLP&eO9C-iWw}8i;?C1>+x+CbAHNNH;fRl$ruwPN|euP$)j>7{k3S8DB9R z^3qZvahb91MOOl1Y>yzTS;`Z-FA>p%a1=}lL9}w~L_>M;OKa?hhB^M2Ksw@7uOz>f zz5Tq{NoBEZhe;#SUWIz#72Jm-%VL3+r;GOEjUmqB3WzvqSZoIEyvcw4q&c6GNU9y?39q`?kfKRay+(heQZ*UUJ{gOF;W74xcG(3wi&VUCB>3UK;>UKIfA zL!egvxWzK5#Ydfu5&)UjN#z&ERN$ZzKlMR4VZN16M{nd;&*~N9s~gnFnDH<)gY0GQ>2jF9B+0q}ya+pd3=1ht4XfdjBZm3DY;5yaO|hJ%nQ!fCA?k zqqp3EagOV{Hm5_Un;F#og0;IB*9+1l;{HkLbA)AwJTO7xC;#R4F`>h=iM{1agb@ zJLW4@quZ$<`98hQMCIZdSlL~M{K=kRaN??^8``a>vpMhy=}@1>9RNxlAe~?pp*l64l`-vwIotGe zs9h`;3=;I8q#mc1Y~52L0+f(D15q0a3pG1fP$e!NUz`G3y_AXy{vxLKAhWC@HfRCT z^8EIz&-TdpQ?bq&(Oo?>S4HOE+u!FKpdRNN9&GRI4ouvLy@$04y<9@r(oD08qFFMw zPA@OcFRxka*Ou9l7HEHzXufzlpalcD1fGn2$?QJ~?J*oWwluki#pxSj?*yL2b+NIb zN26dVB>zSx)Od-+ny!-6vbW zd%E?PU+nzzpKbryCxhQU>Hq5K;N!#gr}x{BcbfNhTf^=hF=UtvM66oZyTo{XxST~F zu2)=gK}HNrTDe@9l3+_vWws4Gi72U7PDC*c?NP=nSaB{c+eGHyh;3|aN~S7Kr)7hz zvGY^&UY39`6{4sxNU1k*Mr@059A~fwo5wPv4-YT*WG>^T%wnjF7;dn$Pn^H$vyYzc z?hggCu(76PY!Sy(j}(!C&&WdgK~teT+%6N{+mrLN^Q(2KLTBcwkf&TKk(GhX+A1V0 zK>B1;x5J{85B4>IY?68~rwav^IAec1Efv%foh!`i zJj=$|V$2-z!LWle(~glFj}J(RxJ$Ys)KZ=kY@DLl9)g7Hec2DW{;yI=!c)*TWB@0W+Hm-A44z%=r&^B`Sy=?4~}*Y4)^vCw!!P}9}Iz) z0E{7;Z+nLxL?qg-vzc^(Bw_v-sDE+b01g+Wd6cO_fq%xNX{ub;*cia0@0pDujvT@< zu+u8UtRuaI9$S)m-F2$V`YdfauHi-S@@421p-(BYPl8*&`g*GP(3@I!mXRDg+x zh0lcU!ba`xZ7~+`5pGN;CpFV(eKV^l92iudNp(e_&VDX}hHIT)q>79%N=tcq0~uu# zd|Frey9^CHkLZBmgWo;a;^C-I8Y_z4mf=^th027S-e^g5=k0AJ`|l_!Q4Uv$d3~kd z!knqlQJ#9Bcyy*k(6T))E~XCAGRA$$ONxt8$u#5*Q{q9v@Nr*Tq7FT^%Zs~+& zL{+Jr#3hD^{XU?06?|klo-+c;jL3&k@j&FzP0!U*#^bx9jFEseqBk2W7L-|;;6x?d zZ&Qtn1@&1bkJCI>XNq8rJrzZ{lW{G}^>{P~7 zBpy6Ufj{#s0cv;^zr#ii6cgL{WqeYg~p9iy>pl-+!W=r5to zhY93@2FAJOa@ArVQNgn6`XBzRJYaf4{Atfx-%GhPt6$VB2UDp5vl?<-By^ISUTF#w5?(I!zH3$X&M+6B~r5h_|7UP*S z@=b^AASpI%Dl%Lsb{WUa(~^3(?O!uCm^a6!VjOW>VvYg;=2suax6(z%{^FV)zW6$9 zbHN<%UtKDln;5QKpU;?<+!p0Fe?lW|(X!;du3ASmm?m`#msJ!fdvuS=9v89O_bf1( z?2ENM5T`2mMNRD12uU{IE56}uq=nM7=?`pG6jXttaEq$FJczVa@o-m$iI~}>o(AvJ z(zfNVR`R&VE>h*Xa&$mjsM+3tpJNhDE*^#lFB4IEoH$K8TXT;e%(yc5j1;M*JY2T; zuz}qspdL1^t_wl|-dfJbO7az3&v>GPITpW}2q1Oh4SP7+KMH5QGE6q~?eStH2!&18 zeXu{Jxk3Lz*iqDZ+ty*_*J17)>|~lt-RIxf;ii1Z!5^+G=m$!6DP6xRtJ8 z$^7Nj$ru!BT^Dzq6zpT^qQO-15i&Is_BS~)xsdHAU(`#IvM8B3i$9)A+=o|gud*qf zOj?Drdg;dH}+)WuwfdcrcVAN(b1j|UdX2o;vMs)$G@||s^I_35qOP?_a&+N?i zeT8q0;mIv17Z%Ng=Y~D_x($S>Wf|oP_%Jx@! zg~P$i*e%IwMkI$u_I$Z$BRXd;iMETfGg?4IX{a z$C{59v3zy3j7CZ1`pT<+jcXUv&L;Lt+-vpvxd8rnxU1Gn^U8S zQE2oHwGj*{T_t{+#Lp&+V(6bk>wvt+m6K{tpa$fArGekZ6N)B$OmJnlE!^>}2tA-_ z&{0`jiCFph*()r)NW=uQ;S>J!$rD9dIjDv*2R(Ne1`vZ*kqIG+Mw^Me?$27tv0@14 zNvi%_a3XkeixW63R{@6_)*4HnHu#lj2r^*Oj;h|$l$vSKUNp{fJsX$pz-``PP9)2% z1Sw-b#bnd<8jU=h9BRT2nPEtOHHys&(Ny3++X+mHW!bb@2)&!+yr-f?9_0LPE|Cb8 zVy%mHRkMmSf>Bgm+YcB}YGgA$*pC`HHN=2!Z1s^R5tphS)R93LuTX7iSXHA%79PtM zGhNN`#tSS+38~+h+MI5~ui=)m5zYP*Pc?DBX#ZOFL|*g|>qWBKx133npA`4x4jIFB zPpL}@If+50)zP958$LwBPVuDa$_Z52vu{2Mq_#pE$^03$tC?OpP{4c~M?@lhvlOh3r%9>>+>ByoK z%+keT=EBS!+KEkaIyYuhFh(U;;w$^bw8F1kfuA%am8s1f9V=9QsUB)mvFGsgAWf)5 zW_ko0lmc$g3O=4rB-LEqnyg0Yy2F&k#82xn2@o40r1EUZXnptg|M>L}-+%YZPd~nW^XldE=jUhdFV9XV;~Q-HJjdC|DfZwNJ&{Hh zV;&PYmDp>j<0v_NSEO;6Z%9lFC(X_ly4n6AcAI7ktI-Y?I2slti6ch|4I7f(3egyh z#g-YYkv9}~B65%xZYP=WHZqR1OpdmhueZ0m(2s1EHRK27I^0O5%0y33o8C^alx?9T zs+XfJ_9)_Vao094GJdAD1}Sk8AW5B{)Iuin!tJ#j@N@cae3fsBe3Dp?b$!cs7Z%%^f8BneBx z*?0pUvR$}s6A5dm0^8Y8o2i-kjKU(lxXKot2!`N*BxigeAypgZJNSUB!~lZKw}q$K zzeE&tDpds_1}v}08$;LQQH~BxzoneaZ|DkKiENydI#Qqso|cHh*ur^t(Ej)$CsX0M zXn8eo2G#g(wWf0{5~+`wuOl@4wNjI^k5EWPHuy}1l$u;3V|0B^l4RI#-`^in zji!=V%{@Plr^~7Hs?SXg$?_gIAuRMZ?n@A&mH25={8~~#{Q8TJk*dQ=BM*C9Hsg9j ziw!$N@rdTdA7(;Iu(vm}}X;FWi1z=|MtiTr}it{qJ4!}Oo zs6Nrq424)sa3+-m*o?W@mV32RP=CsHAVg;}`pCd};Y=@M3)FPv@6s5l$xr*ub#R)Y>PlMg3Im@+o69={VY zlkn&Bohvg|qodN3;)jp2M+f3Mo3vcC`FNFim!^(nI!MML51S;_3Nf&JeaTkF3Kobm zUq?n1OpMjmnrFc!nr$37rRpo>Vfd?)LZ1I~8^c(WqBn-|F7Z2+?q2eSgnWma7wj_u zn^ZhOm61qK^nop=G7_<;1pZO-N~%kT&M_qyauwd~e~I?Yx#^&RoaD&DJXAsyDyo03J9d7Ca3LsDZm#jh+TTuN2yLg%-^IetjEe)DVi(r?ZQaP0!J=K+y zHm?6PO=j<8!cJ9J^C|D5Cex-7-b({wH8JN#)n`1g70XGa^MGH>kX3ZAj+1}1yfU;? zxh2|4l~X=im7lvJ+g25u4464+X0g4b@kxSV4F&!eWIhYqQYSK@+SYT+Cnq6flXjNC z6R?j=Eu&C4kCV(xnYh}~7*wbw2Mv!{A?1#{YxcH;?mRyC#%7gP$w1;lA>AFr3EvXmp4l(|si5e! zRW3p&GP@(1$=ILthp0j20ORc!&4@a&zq`dq74}EeLQcE6xkHOK%|wfrsrth~Chdh4 za^=jfIQJCVK*^8Vu7@3Yb&6@Ehydr^h>`(!6 z_2khpnL{aqj}2ago%+_ zxU)#HNVHA>r@m(&T_ZkxTjx!9uUNLt;r88s{I7rV(W5QYOinQhKvO+unMQ?vPO%s& zh_jHVv`NQuaJYSR(0O#!`~2zNSD)_x`m^0X|9tN+e|7K|U+!TQ`uy<#>c%NL*kl!_ zUK+hht+>5CL`IJtjaU-;2R?7wzhxz#{ZfaWuicIro?S7RUb=WUGL+*KU^^|FC5nw? z@8&Q@VL>qLJd@69#~2h;M}ZHffML+>?+hOv?^AiEU{QU=)kKvtFfMLxQE7pMjAlw@ z_{q~J5AN@WEV5xEZ&L3C&K5*AvnYL!J{-{^<0VsB1&GXN=E=;8F{I{MLR1{YbP$fF z=GDG1MaJ8i)KqL{=`7jiK9DDP85yU1kG2@O&uom{n9>BhyF(TX8~~!pH1dcFsTo%l z;vOE8BJnFzy|R)`^|>j5SZ%Rr6)Al~P!(P+EqCsp6iofcxqb?>l);+;(PSHSSJJ$`}Q6+8q`8v-@<`wcoww}qw(WkMC^hPFQul6@V44~hfhyp+b;i-+cT1AOG;DpML!Drynp9y?pcH`MbBTPu{(|xjer(dq29p znoh<%C*W$MCxj?~+=wtFnkeKz0L&;fKUh2zlnqWAK%WQ~!jK;B4~9D+iF*Alph3_O z@pP@48UjKnA$eD#3!GKo~ z*P+a6y<}mgV}K+guA=4Slx$nJZ*f72FNBCG2_3mo2Li=7r1rvRzfY>Qw%D?`ER6t^ zi2^t>hDk>74KzwR%*wI!TRhRO3>8eLlhM54gcvpXJH-LSP$D+1^wU#}-rCs&IbGM3 zg{|knQV~=~(xdz_U?^C}nm!~)hBqc3w9Uk0Q4=u3@Vp!h(gGQpjw7qLvsCC(2FfWs z$~3$5bAIG`!S!+gSEISQ28<)}AYRjN*iP2P(ih%hJP=8@FC zG+>7T7fyPfk&-hhg;`U!2sL<(2)UN*Q!F~f>9ZN+(Z)+U`@`8)=OBKK^2n?%yRbRf zVxFeCBaw#L$CHV>kHbEa0jb3&t~$e)ur%y#_vjjYk_(mnG@@aKGC#_6$TjUnfhEAz zVx~VfoN1l=7MNTP6An>Ue66G(Jv^rL6A|WbXnq;MoUU?$oU)9`bBQg`_Bn%ALPSbJ zSxs09kD~UNZ>d6F^gmjZ=A~FSV_uX?MnNJBsoV(PHVL(4?Vc`z%a{qfDDu4F))s9B zn^%~b7=f6g>B@FnvCul<;?<4X)%DeI428LFav6nFvs$ zk?S~zx0AKI09|DyLT{XOtO9S3rLxYbV2Xsq;ijtS|)?#V^}I(o~RsFIr)u(UTeB z5^iR_syLo7lE%OHA+1F=qH)C;R+%<6z;oZ|pB3sMOhNIHdQZ}+29_1W1UoBE_2hD@ zBHF5)I+YOV{od_Y%1{+jUvqAGTIhJw^c7Pz-}8#WuF}kXd^7v4PP=BZ->+zfIlju0 zmRoUTN?hgM%Dsy1zybXZ5+U_n024|*KjbDUeX6JeMy5A!isK6-T0Cjt_emBigMeJg zsiss#ys4>OH%c_?JVM!XbWC0`2o~1sY9p@_ZRBVzV|$#Omj8TVquJ8SpY8Ol9Gqt2 zm8U38sP4mTxlx!)jZc{{41#=P_|x+P!@)A)v|G4LNT5(;XAdtAKNo~PV_9|(!@}c3 zjzUBsbQ|``W5(X;lnvZs7gr*5=0~o^oss}Psoc4#$GeA>dz525OY}|pp=-88TIHLn zCD1|%YsSVGrd4N$VKZ%-%1oA_Ds(hP=d@NBb9k9YBduQ;n2NC1fL4pVzbb(0Hd8ecA5kmvZ4<84|pr8V`wE46dfK@nJ`aM!W9QSB{}3a-%PyuN)&k9jLDIbav2gy1lFHEHlzuQ(MKG>^lI zfclDh#ggC!OsaUIR9F$X$7m$5gTsO%F{y(&w|6&+hc&K(TgrwK*%=*R<@mwcW^dU0 z;?qYsy<_$b?Qx#7)U~;w_R}M7Z?2&|*Z3HZSg*+3#{EKRWXse#)-eVu9&utP3GT)) zOWkOdG|3dKC9Ijq%HaE2;y@j4@9ysJZa3v-QMdt(h4V={gOcoAZ~!ku_+T6^!3HHX z($;X-a`g!u2PeMGKk}1H0(6Jq%B{P_Kl^g$-~JaL_pQqZ_>C0QG?J4erJ@TG&{2PM zCIWPK;vIO@MnlFXxu}Vr%Hgp$5s7%WkY|v`rH6T$xd?>3s-~e`K_ct7wYGT~ zqZh!V)hxeaj^P-dJ(Q;Wl=!mb6QKFf5S_*z)kv@!bWBtvY`csFdN$EO9GK+;vk^}o zaxv6hO9o+AqzGQQVuiM~Hxgh7sbfM2?H3y~Vi?(zbAS>SqL==vb%L2i>ke!%@_(qT zT2|h8F3aj0+xG)QPI`Nei)5lkh+~Vopg~#vcv3K(1Xsd{zcaJ~JXG)(;WIQniZQH2 zn8Si{4cxWbPJoC3t=bcOI4|}maX6op6kDHA{tNo%9iSi9i;Jtt+12>$a`OKC_Uv-Z z_LZ_Y-D!raYsM5ou@Fo{1TeGaNwcDdD1Qaw5u<*&VqwM7#9GLN9ShdFhQcWxITkm1 z8P+RwJ*I*;XIIZ(okGF;?B&U`mv4W5{_?wTfBOCJzx(copT7RnH{X2y%^&~xr=NfP z>G@B;oVHvmIKBSXVuIDQWZ zXm^0s2K>-Lcd*^v+TC`58~p_P2^JJ~fU+T!jK%ceXb)o}V+ZXX+b+Rn08?;^bTsE< zqvRW1i+iaXV`ah^Bwbz+RUL`~tU>*jS&vWQdqe;N`k_&iZ{A4&NgPS-378qtPPE=@ zaT?NuELWSA<~Ap}mgzy*qMpVCk|>oJ|FK5mdKEk-!)s>2DAHNeoQb-EN1!uMOD1A) zNHK3Wh-G1Vz%WGCAFhuVQ>~*Q7f^8CA3|LG8hrN+ltr$o55mjJ`K6pJvBDX7+lW^lIvGgA^8&o zkfKn9Mr_6nY7)bB>fG?au*lah}tqR??LuE81>6Npe?*fPMV*0d1+N zq%OH(Wt8&O<*2T}?}7=RiHa)DLNd2>&g@UOb4IWRtWc7uoME&GX=$2y$Xb=mTO4~!Z)AoWn_oRuZpGHdKv+5P}ZRYXt)g%wa$ zYz-Wof~U4CXcfQ2JW&Oj=E|iW8sbSG#1V#Vr3^km9o1#iF)3$CRX%V@U1MI%z?m$+ zwHvYP*xb`jj%fYRWxu7FNHigI)@gb6utu)kXA{$WOeHBtw@HVO0Y0VywNPbLWy8JP+XXfuog}?C*_YxXD6^)OBH)KeE8ivUYoBM4 zzt))<^{)coB}rV=7?sfH1UD3m2frqi!ER@nv%vnhw9q?jWB-WR>R$G?Hyx)yc4$SaFWhzd% zr9TrtQyvqdI?Ls$$sp@OAr>8vO|dWx2i)wEel}agEM1NL3j0&VSP}WP2lnTKfXYEn zd7Ux+j0`DtuE|B(F%uW-CJ#bC>~^F=(ED1>%tg7Vg>N zV=l@|b)aK(7HTM?_4NFV5HL%YfE}p|5P1(nz+D zz&4SzD3T6YD=P)k37d$V_-2_z(nfrSRE(>MGO1SI*^&1V8S7|k^B?_dk3V{{6~km! zuvW(eCrGErC|z8y1||u--$bw&9vqM!=j{C{Uy*|ud}Tw2WQVe?P(MNUBW*o@H^EmQ z|3@lqe}9KomR{3}&gr7cn&@)OulB40!j#DvQ~D_s>q$!FxHto{){ z-0O;l4(2Qn+G>X6LgBX0Dxdi@BMyY!$4?)!VNz;g6=^RXp5H{#l72;71cVytucD}M z@DcTzQf2&d40|%4OEh0EfAjg1&p)}hYjzC&GYarVCW$0#4M8?eBFSsEvOJc#9ayDC ziw|zKJ)=k=R!NYPdmspqd-n%B$J@J)cJ`heKmGI1e*G7}`^}fX{pj&Wr0d28bl0Ig zqO2yqE_#t!*jBMsv2kZhTI^Qw4vLG@h#{U4D-g$1zL|5>JAPy;zoT|6r6!>YGCu8? zOqSvV(=j+ga+hE()sz2)sxM(>9H}a`>Lu__`XnWCRz5k$d3i2k@<3YXnO@pF(_)74 z*b_nx8w$YFJv8~Qf>GE*&(&d$OzH6ERY!6XOwjeR>4f6C%T)s!m16nI+E(4m!Wc zQWfYhL1mcY>jLX@eua2Lk_!2^%%i&D38_(e&<9&I53|MfXiiFnv&+%7tUMFeu&dD& zD-xc4j6%*=E?J0JElLL1VCvwt%UfYcWZT@-I4oTLmz?RaWnw)}&o7?8eDnVO>1(nA zoxc0#kKcUv-FJWU|NQMA|M2_ofB5$8+gCq)``wEd&)>d%eSLiam#K563Z#d`mPx}} zh++6b9Ba*@8qlnU6y@L$3Tl=(Ll#yoh4(5SC6&KrfL|Y7u?H#A&X%a@wmBV)YR517 z88}S(CPYQJCAWt|UD=={j&-dHc1pLzqrbJ?tI2gLv@G)Oa97FiK|_bBP&{sC%c2=r zWNA3d&NX3y7ig>tXA@G!Bvus>s`OZigmFU>jU=<>m_A!AWv`+8F?@`5*s#j&9c<|d z4IMBo^u}fym{K&5>5z<518F;KM+J}`NQ(*E(xaoA*WZ9O$rv&~+p4YWU}-{dltrUm zP?|;`(4!MH=iDjuy5oEM&Nx23t0jlE`Xn|H3MPZ8Avbhg>@}<=j)!U@_EC7u0~_<4 z#N--29GU*{<@htHdmJ+*jIHhIdNZA8Trl9ahuxhmg$9+zR^8n^{h_a|CE|?o;J6z0 zVci-Y$bdlei{Xe%a(xCTCyMQxBAN|wZ38aF<%Sr_k?t{Z+HqD7ztUnQlPISohbGN2 zXBXEI_%v8TwQ?dKoJyncf9uHkl8q{!CV3JBc4lyEo{@;Aam{o@Rm*yX%zzBpV?W3G zx$45JZWPbO)tG|0i&C)}LKfJj@UYaRG|jvC<}NI8^Wcf!&mmgOd&7!;L}4hH+n8;KMH zjUFlq^CUav;Z$!^YepBfp;YP|l}ht7{AxA1l4PWGQeMGC`|><9=^yUz;hd=%=5sAG z=hAWMb7#ftnyyHRGaU{_o5|gZOzJQ>^h3u7=uRfllE+LPUCbnEAk7wZessBw1+10o zr3(F6hZUA>ch`-WH7ksk{3>39tSm+W6Lu*nh zx(GW{YOdx#>yR2cLsDf7%3muhekCR|e)0-xm++|gw?mf9-|UGcBT$ieR6Ydk_=gHY zQfwryJJ6eOOMe&wmhy0gY?nwPwksdh`hyS|9m*@fy-1B!&`nO^Gh$($I=3zvZAu1~ z3JhFvuOx6i_s;S0T~-z4SNLvHobo!2ik2l0Us7d%$oF1cIS{8jbo_5I%muttw1p4N ztt&K>SEEMCTooo4q2Ka7FGHqv$EwH`bproV2^^E##7G$1MXYs2O-5g?f))!FbVqMl zl5@0X$BDaa?&%7_>us${>MJ>tNm|F~JAVsP2$tw@TB$GVWnw(dr2)Ng3Ue1-mc>#W zKDT1(xkir+tY>PYk0R}L9O4g2`gFJN0H5gH` z8KGJ;nqoYq_zX!DQC?K_t!{lwA!|nJSG~YGgL{72->A*I|oiiN7?2;?Z+ylYuin;C2b~ z8Vz8wL$+l}VSg9(qR5=O6?Cf_zc0UN*vhE?^~yXl>;cQ5OD)kLqO==Bq@Wv`m_>xU zU_;p5-=+ZktE1kn`}9xF0s zV~OM|brs?wH|o8E9o>1$}H zo&DZm7y@0P-TOP}@zco&UBL~cAHq|%;Y%^zS4=EtXVdqWtDEt<&QE5Y+}$1`N9h1B z!x7evwzjRxdGRQA@{4bT+|eV`1n?Cm=EZ1b@wQN1ds1CGOifg@4WJvmpE8sMUkn7jS-@`m7gAOo-8o-x55?o<4M zjFOF-s0@uQ%Azltur&?3Vs=eS$yj41;D3Vl4K13HKE@7&xSK| z$~YaEXF|zi&J`V!FPVK!3d^{nO52KeU@SKd_qPvrhc^?&&RmPWac*eEf(_Od)%|Lz z1!y$V0<~6D2)uHn!1IE&m^q1=)?P|NLgqnh>tN6%4e-&xIUL`is04>7Tknwul}RZMH< zw_fowO5K^sW#BRVA00$%bb|K-N?lsGr1pXjiZ~-HlU^&6ny=zjiWf6dW!qt!+%679 zlc0B~QrEvmbO78m1lzHe4+hvoWc49>Mx;FU`?7Aa6Bcvks8I7jszqOkVW^KXWY<*F zY>!fYY;}ul*lw!5GUzCkXfKil(uWl87UP%#2j^mZLF|wE%67=Sd7e1VD`}a^Vae1U z^~8eVk)2h#TSR;j%F?xL+~Ij#T9K0Zvw;@HehdjH!ut?93q91^LNl_Jiz;CQi(eBU zVVf(|`#m8w^lq9uq>Y_d7ql&@1Ck;Ewv{26lAtcoq?m!Q)F{M^PKcFfDqbSF*&G|g zI)JBpI+q}ZDThvc$-(2v`?Jf-TiA7$)F}LYfHX1vNRO2I*kb6iwGg-lGG>ia-pE~7 z*OS$quoWZae3a<*_6=I&?emxKp1*kW%d=O{p1=P3Pe1y{2Uv%`|MC0pzy1?} zX8-W@H-Gx}>#twD`01zbzI*-b=Zm*5##blp#sa_Jk3alyb$LO2FxDFNhXJHNH=v$0 zjFyX6uU|d;<@xFR_v9eJQa_zf;A})6G7ubp;GD!no{d`AM=%Tx0G#3z=x^PB{N(v!jvXl%ta&vvm4`YKl#HpiE?pGH}g2FH>S)Jr#Ks`YlClh`V<( zW42`29USjN8^m?20oLV=5#&=wgkF(9T3&q5+W>*-7s`4G`)#;e8BGSQP-v0;No)`y z+E9vlpY>5XqOmr0W6?I~;B;ZGNppj=SQt707~XzyVKQ32}yk> zKqLcX3|Si$k1Ci2EeN~_-ByX}ltGWt)Eo{K*-7FpnO(LA5AN;kZw+>3vgvMj+Zb;V zbz%~ti?U_#iy?keoNGL*1 zmEyr7+dJ6q9S#S_2Rj_bkRjXso|zVrd3qeM)dv~MIc6~I$Bt}Jb|bp~GdU{^75wE0jk4g z2MS^DecOUdJw1-%TO?Jdq;!^{O=M{JaS_vEPVl*{Q~Gr05QCglSZ!FT(@Q(o_QNNQ zn9)VN*kCK#RG4(KomWK{-S9^!PMUJmWJL)qsF_!cMgGudSl}xX4R#0pT^T;Sm9XdB zB_UAZ3DRc{srw_SB?_BU^ePQRQHhIPzIt#&6&Az4>7(Ky2*FKh*x;3)cI55 zY^D*4sw(YPIV(mmot|=42#(y{5p5sb*R_&YN>Dv#%9BgQOjHDal_ykuF1dcr3w|vc zF0X7vVh-eot(;Y00kcO3r84<&?Hgs2)=qF%MluROVz{(SvF+w(2md)Dh8}HJj1nCtPj8Y#^f#F<=}ua#WZEj?u`Oyv90tHchrKAV2&ZFu#mGCRYznv*S>D z5-SE`pyyWr3)h#|lr3~dwenS<-l7;*>1`_DSJ@sJVlkoxk5id2;WpZZvA0EcRg)!x&n|sHpcD!QP|P>6;-+cx z%DflkAD2-o5E0-tBMv4BAPH7!VrWEXGcz^1&}F#jT`E(8g{XG6<^C!GoWeEO`9n#w z+Nz5DO70K-b)7HSv^brLqzg|wl@pj@o+b5mXIfP>(#wmB*-YceqR*588e)+Lrr?g2#2E!r!_9EJkk`5n>$^LG3;>bk=>?VciQNvbCUsqxZYImY0kUD2JzZ4! zZhiJI|91c5C)=E!>8>fcMYa`i37ABh9q}}jqnU5pq^|+t3(9^l+$EC@BL&k|%wt~5 z{HiNA$HnF3&B^q9RA1FJJ`HFRvdKy4y}p-8y~Eemay(F?g2iLaPSiPpBQ#DVm6?aL zSX;d|G2td2JaM$4t21JyW)~MKb?qV_YEbO%^gn)ZPgtu~nKq&6AfTFr zOM3tN^GkMvygNC&;trpF{1AU^BG&0`I?M1MO30MY)6h|X7{sXEblZiKCGMs0H)WBg zremiLQZi7BFus`=l3%3@C5S$inxV*@1E-JuD9m4MN4BP?H8VeEbW5EGuSx>39df9} zLWJdHJj7NQZxdZEl#cEK%}mHfi?rEEjT^ukD3W`f8K!7S_*q`Qx%l>{*Wds2nlc|A zAG|rgczb%KYH#RhQ96o1)M*np8lb}wFOsiY#)<>Jk?TzA=v6a*F*StdIuKLk)1!X%ox3n`} z_gLCu_>kAoDTIy1a|sP2rP%R!b1F?)vBhybRUCU6> zB5(|p-&)p>?V&iE2OaI{Sxv;kvPY758;Xp9a^i&Z) z_37|7OL}p!WRvtDH3R2SK%L9A*h4`R^q4%SJdbas;2M4?sBmRJ4dJoIls*A_I#{eL zKGr(g99jkDuN|Sx>iA+voQ1O66cR7<+MTKlts2O0hUm`JR8kK4fHe(^{}$AiUSTiySM=>^iG+@ zF5nDe$pi6oemy?DxV^lY5qSocFc?MX-dj0 zrT}^kI_}N25*@vJclP$(>8m#8F?9egEw1uYdgJyC44gum9l>zyH%WfBO3O zfB5=;{onrX|NOuI0jBD=uV1}-{_^DXjJMDU{od}u?%hi4B0SoYC--5ACE+z1h;;l35-S8HY7)r>jIfp$`GdgQ@P3KnY z&Zol85dDU?j7|h@gBhc1L7Vj~q3h~-W~9PD$1#Lv(stMhwJfS;arJ z9t#(S>>XoAtD_;%@~^1&JT-$cyy(m*i6R*82(#i*QX>~3QilG~AN@(fgV0)hsrGwcbc!}#oXWyDF?m%Wy? zWZJQ#dK0h@ou30Dm?hydRbf=Sq#~2<-|cSo?%&_1t22ihcP?Ds?%t5Ll7$FnB1fFE zoI&zyrKPhipB%3NK3_zIgME->6i3Hk*{3{sm~gORhQ?xL!_B5)Nz!xNs?a~p_!EzQ zkuIZT01VbXYn-v_62&P`BI_AtREYFzA8$vpE>Sp;BNce2-I&$Ok)fJL!c+cmg`(o=hAljPH-4V*iMa&BNZ5Xgn+3%W!hSwhWGvG$XSG{I?lYo_3CJ8fj4 z=}}ps>flJ?)Itu&!CKEsnJl5&Vc&>FVB=RpFcOdAjI4F^RSx5lNg}`rbZxeiaGJKK zr#KQ%ab6J((W2FGCO(J_FSIO))L>xqHK18>F<5ShaLG|gWYF{l=N86C&S1?)P33eA;6(B*6^8t@F22FYUGwN1yM~C z)T3AEev;Xt(nc!GPOg@XR7=cZ>?(~h6;6l!J~##PK|V0CPuk9_^bl5sguO7q?l}Ie@+ZRNm(ta%akpJOhx6v^U6j_6`Wv_ZPA3h=$7K=)0F7Bu%PVe z@oM|USCkkIHzG%S)W}KT#kMcR@lsYKm-S-qsaYkW=95^8@xnml6}$}z*flKOQ|X!M zx9)tZ78X1hcrg1oqwvf)whiOM)=l?+_ie7k&!X}ffecb47hmCPCcG%P8v$Cuk*7DK5g!Z;q=8?$( zX`VDyeAiWsLq&g{(H&BpWWcEshvnBOFwGJLosr4KGn_&f7Gp!~xoPG^jCjBn$hBC1 zf;#AeM&5%_ahElKDI*RIj@#bZzIS}MaC1 zA~#sDM z)=?$RCssTtHz^EY>!H9UTjjadbuD|)tfeb*+A?un$(K}glB{b6_q&+tI$O5mj6;ym$)J8bkc_KyS2Tba$TT^oZ zx)SP6IK@R|K%q5hh)gvdvqEHYV6Mfs*>SKx`qm@hKSw*L4k%qqY~Ylu(%ruytcSCjO?e*?q8o|L~K3V+R9JoIYYs zSWRA@zIp%p&FPEx=kHLam6ei=KP!ipEu5b|u1C`yEFDtBT&*}buepmLF?lpUesVZ! z15ks2G_;gm+{_^ymdcF4v0Uj$`x6U6%s?kC&b649IMP&ClOGbw@5XJwx+Lb>?We% zK}^}j{Lz6>qTjOl5UUEv))?&bp0MC4QiP%8+(zN9=XSJ& zlyXf8b!k}L7Tf5h*mb1bie*d?34US^8)2(uVxkiC4Hd5@f?Mm-Tn~LdMQ+Ag>(KiZ z5}WB1c`Xexi=Tai5dukx>XG5b*i;TrSPCN&R~%#&Al=aNaEM%!6Yv`I(DZh?B=^+C z6(k?E+t~`E<#XQzZ?{EtrT9HQ55hb~{^xZ@8UquExt(r=wRV zw-+~y>)GAUuP*-K>tFurZ@&4PKmGLAfB)k*KfV0BKm7EE?|;S`dq(p6i(86Ib|e}E z=oL_({?_g%pM8FObpOHqdq+nH5APq++~8*kLo3=SVq<|dKOw=0nXJOl10nx} z*Z_^3Gx%w>2xnPsss&5#Q95oApbqb)ts9BIzP`9YChbWJUK>s%3X!A$<9Is%_HLj3 zz;jq>XnI{|YSN;$w10t`J1lt{S`am{Mm-DDJ*asgU)@ZNXck~A_Nkf82R2~U>433W z&;xjze0s10fYx3|r{7&mA%G})O5-a+ZK~X(GTG2|Kr$|7TFX3PYuchuis*-4=$mp1 zZm7LI*<3mTzA26k2#BmzVvgtCsVQ%RLNu!sij0B@v`Q9Wl4MwE3XyCLQsK}btUC>J z#P^fUwuw2ITB00KTZx|@XsrZFKpP4>CDe+O6Mu@f!y>vTh}$+Wn<4ln9U~y#;ok62 zcp{8e3?IN?FcztBJRqK$V5X7fH@1)S#e;W4`9pWxNYF-t*R0X8!5U4Np^bVB!N_l$ zcug1uSwq-x_Ima#BC@jA7C;4l#&gN%*yNA$)+t{Ya5%{lu_84;d-4D{B_m!I6A^Av zT-r-2n_`JIdl^~Xi$|!Ajm8NnC_LIABy4AC-*o4nep&&|H1J-@shiHTTD0RXIgNudYnR1wI;6(bzoJa zAM?zN-w+#P$1q1)@<@u0DuM;QJbASuNwB&zgho~~wTFidr$D<%nG_}xiK^a4lc5Y% z8Yx-@S3sJL77OE@X`VG>D)8Ph4h#u3TT4CU;CRPJghl)=M9#rP#NSf$V9=7eUZc+P2nvQVH_DWcMbe!*etV&jTY!TS zUu&;zj6q=zGLN*XRuZ<$!ym>sFNBR{dOAKvh92i%2yi#}Aa=8#4_jyB zh!zSU=kqlxO%-VNA+>P6uvf1S!7^pWu>c%)clR9hwyJDOoLj+Ok{eLh_I9X;a@icI z`<6aiHewq}?yV~LOQoysp5Umw*yFZhvpOcTdG)&o@TSDoRFq}e(7)`+XURyZ{!BKv#GlX?QL=>Ng;uzuqTWQ%`%sH>}tT4f%+wA3c{i0nxNRUJbO zVUw{(eN}n+lfGn%Zol&@1*WQg3wvUqIqXc^xhnS?98TxBuql;gI z{j?EPszbAVbxW@s2SUk*+g2MnH!aO2ITjC+WF7Q;s>RcxFp2$~~GcnZpL z7EBO464(P0P0WC0tRfWmg&7=Jg)jyY)y4L$USnwtUVwa_$r5#0>A2|JCue7z z%lg1wM$-x12WzVblh$+bOqsOk_GU`=;zEseM*|n$=){X9X zs=1uEV3N*U(GxtO-;g??EN>?FNRUWJm1TzD%n4jAU8QF8r5dUN5C&OBZ*;2oU@Ky9 zZ{qq7#2}K5`8xyg=xPJSTE=7k?&Ok*@AFR{ z56U8OQ*I|*j0s%lGfk*qEyvs=21IwHU^PBu>r7V7%!kU?=1}5Hm>I^2!lObo%6xvn z(R@}h;2E>A;daOh#u`CP4GZo$P{o}(Y50CcuhCCL8DN#|9&b1tan^4YYU`E7Zf95pF$vvju z<`xFZHfF~rwk%}SJ0g9$OwD)AVQqrNaSM6{YOgP@gS*wu=H}9eU`eS>t(Xw%g$qvrrbZLPkZnM2Z&&8=2h==0h>Fw>UHrdRah9y#lh;zZFp;WpC*d_0a z>qIv0Si5iuxR|o~#h==9(3yLEop-RA;yN;aqJy+3L)RHR)r&gT#?f8*5!TaCh_Vk9Mn8L`n9Sb}aQr`O}RCpSP{$!JDm zp_}mn=ME+zOqb_Zc=CwW-OSb^;%C^*mvX{DP|eynHAxpSqeMu@FG8Qa&2`U zK~BQ1&D}eUHZlJ?ejKz*2f7z?dJy6#8sFK{#Bj-EBE1zW%+cWvqjg~b0e6#q*JGIS zqi4!JBtB$~SpkT8Qv8taDHA3Ydd0@b?nqVfRq&s4C2IjLq4)MAx>VV78I?iHm=to& zr;uwJ4(-rF>yu<;j6~;L=Zjepn;s|%r(&w2w-bl7yQ3du*&s~PI1KDoCVuK6TXouC zc?ax|=Q^afj$}}u1+ZjiB-CTutkDcHakEhIuI{kBqb~ts+H(>Q>_Gzp)3$p6ogUxc zXM7#*b6QIbM7_@8?qFxDO=LQ4#z%>PE@vqj#QdWT|Zf>Q@}IzsMXmyEIeP|VSlBXG;bN}AOqPQ zou(Ii2UV$z4+W-Q)f$G^ELRM&$R#qX7$zD>QM5b(nEeySsKGqna~S(;erY`UnWctV zL)iF5AvrRR~m}B zDDa;SqVXBp$tSNsb2ugVpbCx~1WHCV17^U)MtdtsW(+#DP@M9Xu#}BXJE;NLNE(Qa zp%fvW3^8QeJVOzQs+3`o^`p#Gsmi@sXt#+NDu6JhQ@n&97sSWfm&O85Ff?Ilir1$Gq)(&uAYX>5TBmAYRc>q+M{{6}38X)p=e5nL6*Wzm&o ziL=4U-0nY{w{~l`)8W+_L4^E)jxhAn;X?4Pa8C*D`^z zBy?R%Av0nKk8Wl9xi~+^dK7vB4z4VATqVxoiq&@=@wx(`Bz0Y6+0txUGC73^!!2Iq zbgS~6Rg!BXHJ^0mB^Ol=y9-ZQvkW53DA9(SBz>}CTjvB0kiFXFr;8;|O~X!g8Ud6P zHNy~1PKvcveU71Kl(d5LTvJKYyY_7F%Paob+%#r$=%^ED1T(;c!le@PYul963~GRp z72gBhn+KJ2r9`TtaN;4btRkv=W#Os`3)SOu3=L#}W0X4aH-+uR{s|j^98N`>QWb3S zupvXmy2Eg)8wISHb|Vtv8UMu;Yy9bWhJ;|u-RPS4jRxuE6@Mq_p|bf8 zN`Jm&DZsP~b^;O!)ESs85vi1UOr{X5Ckkib44O=tQ0AO1N1uup&N9*8uu>NNoRY9; zQJ+j|oWgB+WTZO;53i1Z1%$1b)Ay!JM)}sTL)~F!{L3$ffBx(J=AHAMbEtSwmW*$v zA(lXCI}1vAx)@&}ToS3qu%Mq$ZcbLyv(@}|y%??LN@^2DHxNul0o8MPMex_{yVLpY zh~K)?W%KfOiHf9|S6SGE21i-KJ!gq|t`X(dWF#g1Gh@RJDtmh9^99;MqJd|CxCf<3 z1PPTaW04%#7C3)l+p7R4sE(3+B*;OBWFAd4x%)@^$9p>gHQ1!csUjV3I+g7C&G`NM zD=fe7&H!Of_O^z{`@`gtGs9Gm0#;OIG!_HUby?tIT}`-_xVqf3fkJRh zWLeJ2&hUk2ijG0qowga9Y}WVS?}A0C5@m9UtlDAa^Nei^Q9$AbmFO`1q9*e1b&w%< zd(LH^Jak!*c_S-@4xjI_jBtfyAGfJmCIzm1t<`7BWI|@Nql0Y}4+fBfzbZ+?7!_40IfFg?9z)(JhaNm`DHL>z*%84KrW?~bry>Y15nDO^%g$OWm$xP zak|+w#8`}|idUXvjPb9Vby`>FI8+s$!aSE^rEs1H4VJKTa&tw3m()D9G7O*V)T|S+ zT2WM&%Bf&nGY!Y^3LYiu6GJWR0-!o<<`d$kZ*8qDfEbM-1kG@uj?(Wc#4K5Hv2Zwz zJ%>qdm8yBCW<>Hbxd~Q9j6{|+{I#1H+YpuqXKHLza-}7uY?&@b^S1SOm(c8<5i_IL zS+*4OSi&CBiTEjGL%yu~RfsHd5q*j>S0z=qqH{J=6TU?G3;=bZAnP+BGZ*k2p6p8E0vSd>hVo*i@JVruzP&C z4|f*vI%y?B3lef|F38C-T}WM~^rn+}{8@0WsOR$Z|siCs^fbF)4_9}&gY8;GnH z6f_O9UQ)*_e3G^o(`6_)mUB7tWrCjwRYVIk)PY+h0O#pVCcClGL{w8mJ<&y}d{A#1 ziSsoBIyuvkKup*{3#wl+{OI?Lm&OMQDxmXrKycpuR9X4EazTT843wL`G1n1*8KQFSuD` zb`0)B&9l(cEd^xL*z69wT>wx%phwS$W=D6FbZ0xhLUR}(=31aP%5vn)r)--cUdJ1* zp-G0mTB~_En6J50&nDN@Dn)8=dE!rnKUBsl{-PV~E5@x4RicA^3ab(suy%2O3HPMH%uZAG>X^2+p`kmP+6<)#vNL-5`Yqg6P71gniT6EBs#bG044Mj`TT`Y?9Tn0)T7%JE5 z%aFfif2NNxlR_me>DS>vs7pg9%=bY@T*L%GQRxCfR!1TU#YYq&d8llYV$@JM+%c%$ zhHV&$o#q|q8ygK9m`K6cvUKJ6Qi*XUXRVd726DODUoOeJ(~?Tao|*p)ZqxPXrBWgaEN9& zXbT8VWf}6GoE;QEB;bhGc&T&WDlb_1Alap73wut*w^ z4rNczueM)0#5f?=xIR*4m7ynisYuK&bY9xM(b8TqAE`9qeAbY*uYl5v;p4ix3o5%yveSd#gmH<-gD3vq~Fg_6q$_W!B3nZ03Jn zu>;DjR7Gyzc|;T^%EMs$j9D`x#Pb=$2X;8F6X&pAhO2}S2l0?PalbWN++r!g+J;~* z7eO|B4V#iRf8|t_$TW`GSu^n>rEAZizq7Z^?eI(c76luE5GYotwiR@T=bMJVt*w<% z9MmeI%g_oCOaX8!hMv?}$<|towd^+;A*)MSDdj8kuxUPhT7?7T74v$&+BlnW;L{7` zv&xc~sO)BFck=Q`Cgm0b;pFTR;LD~8YyFVuy}~}&NelL8yHCA}u_*I40tlh+j~*PN zmw|z|N+nBlN-NFN5F!15!_ zbaIQ8=WaOxvgV~k#pdgLbiSHjLy3#}$>?w(Qfbn4B|vWY?(`P+pUWFMUwd6cA?ZVk zLD|9FSzO#CUptk|G-znUhG_^31(h%869f&?H(Lw)O9LCxubpO~_zlsf*mUAZ96S1o z?i`0|fQm_Vq!dLWaB(LI=}AjWC=ZVIk)fNql(Nq#g3P!Bw$TpGZf>YxM2fd3S4<>N zAKhzPA~NZ?lBBsiVN49NX+uRow7)202}}1)F3}1;<>lH7om~JzsG+AnP-Msc`Kr%SOYl$Vb+oi#Fc zR?rxhG|ljKqaiWW%sD+V0X`+*r<9pT)^(b7M2C=d+N-)s2{nQgdbUVX>V<>0xGr)5 zP1AJ7!_4!cK(Y*=k_1ENWz;Lbf~V9=+2CuE{V}0=D78?YkzN&{6QK+C<(|^LgN2E< zRWtQ9Rbi%xP7qZA?@+^$kRvv8Sx%|4K*V0jXTln2$F@Xgk%jRrR1Qs(90I9%Dj+E= zni89n{nN}Z+!u4_pf?_d9YgT9 z>*w0v9a6`1(#tD3L$7bI!NC6V?Dd#fw4J&-BaP0&hV*>)->LO^#$XKTU1$c;f~{Q$NyeABAIoLw13+7$wg`;F7@Hkabx2^t}zzZ`; zBzjbSM{dfXFbYmR|Ka^32F}dTe^0`#mGcfmtq{yo-^AxXN}$tdHY5MUTz42q-!vlp-32#vI(PedE!bt^E4@Ivs4 zRE*xmeugTu5HXk-Pc>sdx_8KVoScWhzMcv=Am17}w$x}i2H=R|;X!uM*Ri&6EduBG z4J@?t9fCuVNVBUL`r-Otd|zQZ~1&J!yxb zutl$CNW_%G4WroWyn+!z#p5iVh4oS@v4wJ5Y!Yt6kE+M)v^7V%daObr4?;7K{U|&s zeBlyov)>+0edQNkT%0HzXd%P}HyU#R3X*DxD>903qCvxA1f|YrEQA(S6wV!#8-*Aph};g{U%syhEgZAUY($);ylsn$~4`JL8sf* zuF9`c8G4M)3Bx^Ar>AG5d=~fMXs2wISfhZWV)=^Oldp02Wp~)J44^}ToI1V>6wYW| z0(|&nXRtPN$BwHbx!drSfe?vp>6cA5^Qrq;!DjAGC3MfoV4s^&sG9ZTTxOj>doUt! z0AF(o8~hb$$TylMyvt0vq1{ziu(}%v?r?V-(@zXQBCIxFHC4e)Aenv-D){6KyAoHh zXc%&eGWVPT{2x+~SL|2`9xOAmM;pvWBTXD$Vf+2`wde_DmkZHYE|s0MT14S0CtV!i zX|Aa5r7=2+keZnvqZg?FaW-bq+0V%0#}|Rw9aVw;L+>*75ZkU07N#26gf%(19xg%s z(gyTPW<@=tW6p6WQGj^dyY7>8XNrx#dWE7}xAf^O*EBd|aV13O?R0`LgQA-ZV(Uav zF?PY64NDysVZM)21TV3g-G1wYU!vgqn0QuKAz2d zrLH)grD35?=r)$WdD^~zfZbxI0!c7Y8a&BdhbBD`S@iR5#2wa@A35in{<4a7G zicLY}GO{VoBnzf$xG7!t^!EAN(aGfs64L1$wGAKJ5YW$^nR$aowL`L=C&EVMDOS)t zKB;89i!uzkG{N;SFf$?0d2FL;MGk4&M40g#UVy+=C>ZrALEk1_uE`9^&W;!Xw!b)|ucYHzy;yXiU-@PcLc2)Pw!yg`bbYD4;_G0v5KG>@`y<#lOg3f1xtyrav5MMvIw-3n$6NloSOh`Xl znlkP~D%4T#5v~Lx3^7O6eNK-=Q31@kXu5PrA2p7G*`y!__pzO9Vj&x%+KeHRq?HU- zYF`WLqKfx5op)DuFjPv*5(|og%szGaHl4vi#5D>`3;A^SVOddiUk5QY#q4Sx3~B~F z46T|rSsGm!2724gBtJDvhX-RUnHFpnMCW9D(f=)-q61TfHcKVGlL@(DUy@MpahWU2 zAjV$PQJ0Px?Ju$9NedJH!3tdLsEF9?l)W*@ad;ww_rudCl!eiCib8O_SW=>?z@zI~ ztWg|1BKpB}+FY4FMo}0YJemO-+8T4ba*Rd1{!{Ig0JHF>M6o0UbCha~)(~ zkPhy9Mu%zgmc*(Jbu(jX=1W;)sUd@2x0dlpD_0Rx;drX9R*)Fjn&{2! zXDE+mI`{l~^ycj9`=4LGczgEd;oG+V-KT<3W`k}k*wzV!mMfv8|0I>bvUM`Hq#pU;mEtqRjI6QuTWzt_iQRdxx39; zB)=;qb;*Q759D6b+B&*2JyS#8bZ-Suh`B*9)=eZ^HrPjzkUALA!CxcI*KF8I+!Gf! zO^TZpkCf5PQDhxpdl$=t(`>c9WJtUWQ9b|X&SPj(vW`#BPjVFu_Q~tLvL(p=TrumR ze#mg_2veINSLW$D?$fT+8%b`DAv6wq`JoYN?LDmd> z#RY<8pjHI&lqbC$7&LU=j4b{s8I2L*Xl@9Rv1p8=H{KcMNhP zs-@QCthgxKHt3+%T1l4l6H4g77n3SJN3IM7(hutb$Dy~mgcipB@JsS0>Ec$u7dl=x zBeT1RXE!lD$yO6|cu9v|(KQ!2s*=K)ci2ngXUom|AOdYI}9~kB(7JEXu1Y+Wy<0^>!VP9 z{YvOjj5=<{Rm^j%Xd5As;N>srd$IfQyLZ}h?^mcdaHRjXQ1UW z`n(Ob>St4P{qW;VJCmpj+s))QMxPsAw+SIh=m^J*6*;Dj(XEV3;Q*q4vCUZqIBhLUc(do(Q+qdtC`NG1)Wy0?e=XH!Y z+N@sYn5c4kYum2`;|9Q48v6?Tlv`n4I;iujPcN}BjVj%~Pl<=KYQvlowV_G_pJtBR zT+^M84TOiygoSw&$l+GA5ZP)WT@5myX;7#~H5BlbXLOn3IHeKs267)Irm^2RN%6UL z?r5s}X0S9dJu=qCsppB#*{1I3!L&=rylE_&o}vqgthxWtZ)HQ zb+6x@jwMbp;p=(xO5>aQCr&dleXgSxc|C0_G*7e(d}Wd4;)jPjEjzKpWyZSWS+Pwa z!ZX+M%oDR%SUh47@0uEqr{nkZp1Mh1ux_z%P%!F7;el zS$*kj+>Yuc&>+Y-G%lv@g*icZKu5lW{<&7h+t$<5s$8q=417|<$*-2%J(<1|mlUT+ ztUv5cBF)HD)ojQsZ0n}Vl7%n+u*xqQ&`Qj*5m%h6o5a97Ju_u^KDR%nq5!jQkc?N^ zlYD}f!K6Lnqmw>4Tjb*Cv>eao%4=nYXN-5el3C1UP)p?oj5GV~nM=Do)AkNA+Va5j zM7sy51kJ;vo#C!1e=O_PSm#ii=&A2tU7o$YJij=3_xjc4`xA5;*6AtiDOhZ0&Q!&# zgb!2Hk_W0D$u{hbcb28&LP!bu6Kon)#G1(2e1#mB!>-0qw6UG(US)qK zF(zvy#c(j-M#uA937JV9CIdu_p7ro0X^srdT9Mi;a$wJL;GnN4gl!D_;vdw$ zo`4gQO8E#;CWmu+s6K3XGFfLNY%g+{#3(b;l*z(0IznhrBCTp%{NQkhzI$~oyqBJW zSwaFsT?R`B#2Ja-Hj!MB;F7~gRHr$?b}<>Uj8`(-LmiZtu4B9&Kk^ftAxivYgBoL- zfyMaZO>m1cJ)ti4`-ew+BtSs3WdRjW$Ur!$xooLZQoJH1Bw}$q3QOdSN3@4ly@*=t z_wBiBQEy!~*^X~G{?ou_*Qa24!0&+N`SIBs%tK#) z|Lo`2@1Zh0y|{)*$b_(5whJ=)_;~klf9Kx)Ln@OnoKHS_@X!7B<1apa7|jSM9u2~v zI={F@B_|IC*L?Qs1S0C6pS=Y@^z7xyi#KOKV}-iBdhz=7^!(nRz=H3S))kF(`|L8u6P~$>a0wN z%Zz?b>r4K$|BBltoRf);7uUk16(w_JBOqG_@=JV0kz#J%w_CTx|Y6GVy>zX})=u5|!^%zaC_mSlOXn$vSXJ`~& z9~91^LcYM$QA4KraCXI;i2^5`2L5nYqLo6fq`|#T^U8oKnv=1cK(&Yh zZM~W}F6bj>60L(3ga?5prRwQVE92R){>&y41-)LG@ldL=CQ;7EHc7*X(hu{VikK3v zJ#Dp<%EVfPg#(9Ph0Hq+SS!Rcnu+Gv~eL&OsMQOW(hjP)@qqQodJD6Zg@g&yujkH_GeAewLkF-OpS*Yaa4c00=B-b0pKN#L0+_e&u;0H1qn9={9n3 zcqOChu9MN+mF`sOt0XGo>JH_PP8rWz+Ql~Z2x@kwux$y$ux*cEb&2#l>6bco&PzLK z=$S2&aqO^f!G8osql3om#P%qtj&M5SX}&dT2mzY>Ua*CbrAy>K7!X6(Y`o97iX|DF zR@OF34&c{-&*H9(88mc{g-#_%s#=0iDwegy|9Eu*1?vh_sYHQ@xo_USB}$usZ@Q^# zvd{t&gAf9r@H$0w4w@q(XGWh2;A}5}fCb=_tS>PKRE*#G%1;%2X*9imn)#~{JRmYy zIEE7*m@rcH{sf#jMR8yzk>GOxO`tnj)};4I6*NIZf;4uN0Jf)*D~&=ALs`Q8&a;Zq zBLSRc2w?ofys6uo<=&-_#+7FdgjQS#HP2{-$|FGYW&}yeWNMX3qRWAXe5weY4*P3n zF3@u#PJ~Oqi86~@6ujD=_3Q#mmVh1Exa6%#krE2<)zA@g2j(MlJObiyMnyz*rcq=g(=8)hEnPnwa}!DNP*0O1 zu9F_y?a1^qb#aZgTh|xk-NtA=yPYH4j93w;;*;P)(;0#@^A!1z+0d*v7WLanZM0}!-9jJ$8iL|U+Kxx0YeGY>S@J}Q z!zj40wuKEF2i<#WvbNYQ#D>Tqi)4A-_+YHfO7RR5Fn}5!Ujl%6PZ)*COb=Yd3LpJ!b#Sx^M|HSFN0+^!qFG_JB2gE5o0yK z%H?MZ3&)rj(*Q}wD;atd=wCqG3Fl1Yuy@{{S(RDu{!jiAw3*ci)( zPwOy5Py{N0J`qYCH47U{wOzp4nyhTEgnkv_$+Ue;qvjWD z%8FqATycUjNj`eGyR*|p<~u#Pj%5>d{_K2u@&1;Om0J?=ot)Irm7vSNnxN-RZ_peB z%VHFBE30LCvnM^xEHjCkx7}P}O+k+qsR??#DCfG>V@fJ0i|NLdm`q-~uvN;z!-8wy1KXQK&&7)t+)x&*WS&UxWs5!G#|)A; zF^h49N*8N1BR>ixYnhTG`GZ2*8%X3N9XWrT1)Sq#`^t#%;a@ORS|M1YSetj(2+Rqq07Q5k4`&AURF!zC5(eg)Pa2{ zfy|aAv%)grnO3E|vTdYV-~{o6ykJs?IqPU2<5!Qlh$KVzj&}EigBY|;@q1_0V9L^B z=&4M>mPl(Jq12l5g?FhOJ_m!O=;p6L2^Ofk0a(W$AAv3TJ++D{zmknU(r4FW88qh* zUXa%B>ITtNi?VS;!XuBTiZ7e0x7Ycg?@NleK_Rj@Y5z;D&t;!J4_OE&phD!G?NM!WyIldJUCPV{TlnnZE1L=1<3lleA>% zqeAx&h8t%ZrGl7f7p>wrPtxZ2~T-(%mSjvWOAeJKa zqR_$D&3zdWiOcC+=VhzM89 z!87=K-WjF|U6$eLQHKIXJ};hTYX1`Z><(HR;?QQux<)9WQZVon7NyJU8xHHqy4$%k z=@Gvt*>FT3-oe_0ks}=FkqDTQrTG~5Arp1M%cF9$lf!}srXFLijwWU?yig^0WZuq@ zVxkmt4bVU0vZtcrN1~1!J~bTv^|B06HgZjO=ulKNZ7R~i;oVIB9$K2BWhqKu<9Lot zM9gKq?gK<#Zmdn%kIMp3zLl)j2da&3a-;OopEqGK?iBm zpUteuB?>5~a74Z&;><6Nh>pLslN2;uM*J&3OK4D-dbKSy3O6@>kFUuq>D65}7cvTD z6-W|IGgyWy<}>xSanqQtU$5{w1xnUeUh@H^GJmSW{eW}xvPp)<;@Gq-=TsEnIx?5? zWob>L$#~7N9|nHISJ`-k2}2FjPG@*0ftQGx6~i?aNwY$?pp;@;Z_d_=m2~VQpUwH{ zGjrWa{WE?5{>@4jAw$x_W)R64tM$o)9i|c6$Ei z^_w@Z-dKSliOo1)IU(4%QdUg&5SNNnDp`8Z6o1!TP$x#R+dLw;U|iVpCB*Z9N^yDM8TLR1At_1MV_q6 z6#g76|4>Ir6KW7J_Qctmctm{By^U%jfY;1ih%Q*wuptA!h{7Za~;Djd^c7BIoz0KOK}x;l5Ki^VKd538!iLy z=Ul_4bcMvix7@eQ;Sy|=9fRrZ#_eai4p^AWQh|X>#Lz>z;qRa}SQzyPg~irJ0TtNU z*1VUqM7|&{7njyJ8mwT6_F6e=PYe`2O}5kxt5;A%Nqxpva4yLM8dI|3ALI>f4TfUz zg6DNUSFpzRZtu~f{U;yo4|jX?X9gYf!`rtP)1~A+^e*gAFJ4{IG&qEJhsqO9v(IlZ zSc=}MzNWeYT9O=Cfx?qv2dOwNqSRr$5}wZ+(biC2oy2YYgIG$CBgBk6bVwM&;jxJCZtytH#2iH}2$5WxpjYwPvhB;bV>*8=0*F zCDW-gaM%t`$lG^CaH-DksBTIMHZXsO)1Ys*j-aR;<_4!8Bbn=(emoj6xggaziB$}m(kll$8S;_u*tOzi zwSqY&X^YtrjIf#Ac@*c^wKgb&2ccMfxhye!;DZ5cAZQ88@jeu(!&XDV2Qf%Z731GGq+%9nVyI+>n3UuDo18_=L{9Sy38MxqoaqVb8>KR zpf5&I3A(2en%TD|r-DpKwz`Tac45d8a-*%r4e4!gNDaEARXP9~JRCf@zkjqnxF_?+ z;OIaqZQmKIHQB};$jhEW8jC{L1HONdvpv!Q6AshxqrM1<1b4#4bNiD+^&ArtWm1Vn<;^0IMsfB@$QG` zCqKVB{pHo^PcKh?d42Z$_4(WL8)C~4X2z6iwS*Ric?`=T>q&1*dNg%{Uc_Sxv>|;c zG|9q+@QoN%6b4o}U^Njl0?4%`-8Oy?SR_)*Y)LjMVJ2z9f{UbSSWiu2VLi#of@nd; zj>ib#BLU?&EIc7eJ=wKsi33=|FyFKVdDg(-Qi>)vR2ma^CzNu=qNF~}b;VH@V1aKI<{ zxr^Be`X2ilX z!3>#a9NvNoG3XI3EOkIDvAMpf%ELne{-_4R-k8>D08Bw^bJQtiiGh&|#=g`0*H)@o zp5C68)PoiqS`3NEmNyQ$!vvdT#kDW3Q+388lK2yu``-?X^1q3~W;dR)!Mlz3UgwZZuXO=iQ`A`2juJGibx zE4|SeFpS02fb;qF6&@ekVSHbl?(?V|UOq+Fs$SLsBveK7sF1xe6ovgUiV*vgN-oMO zn-n35>R+6Un5k4H?rzuj_wlsu`X!f_f_4%JWWs{+$2MjTu1EwrleOF@tJ>B;k*1pkE;U&K zs8eKagv%#KdyfuxKYn=p<>!wc>}`Mk^xkhi|LChvAAR!p@ZJH8v0c2lM|(Suj^T6` z=|hq)23I&W$1Jl0ae&*HZ!CWw9_=sv6id146^tN#Ls`@WA-Q&@`8Fkly~wr$K9TDB z9Slgd3g=o1znU^#_XmvXR z2?#+I5llpHtuHT^msgmj);Bk+%ge>hEdXag4XeqR88W^JW)cYo;laUflGTPPWK3P( zOkchoy}w*y`oaG_n%BlN>{epsr*K{SP8l*@Tw3MJ7y<g~g^5 zCxg>yWdV#&$U%HM-PmMGB7HR!QEl5(ygaNsmZQ0H90|zooQ~>)kVbDqq<#AEm@+lY z2xgudO1iou**U0r9~O`uL?) z&zY?}VM|r8MB0v#h?3Hd+20naN*4e}_&j-Z#x?%Hqob|QKYvJU=OqkiXP{!I@7@B6 zpI|B)-7I1J_~n!#E@U2KCG`A-+aaBGgn% z6uzRYqM(#H*7P{iF0O8P>`$LQ?2EZ$$r_6Z0+oJa2g%y%jpC&2TT#tuIaY(NiX63t ze7f;x8pVR*CIs_guQS-c=6P5Rf-90HBi0O(R~Dr}ej1*y$_-toGFrtBlANl6esd%p z%~5zN)zTzQv~65j{AMl&@tR@YZ8{Z~vmA1I%jkfvS$=FF5=jLO%vQ}8l)qN#CmeUS zG<|p?%Zz+kCX67S(vHb-ot9o=FlfT$X4So%4u^TE$V}%V#TBh4+K9NsjCeXXyeCN> z$2&S_vf3MtQ;%wGe`)M)ng=2pH4Xa|Ept;!+5W-q-VOmwN^FlkY)~4BI;N6l3GkBL zF!3#yty>dTwMURfpjw;qD9cUV9T+1K`;uX!&qW!+TE8lq$ay^y0?0YOKi^$1|9FzK7y+3iGDFAy0_u+xRWe>^LL3`U~! zD~UkofOIx@7o+*xv)fniZ{A*x-k#sSIUl_~xp{X1ga<5XjT!y)a>T)JUSBZAnM_z` zxh@u>;Xt7-2fKp@_jaL-;V}rd`{MIQ|J-jr20g}6C=?Wxz_+APqiiQ=L&*70dIlnJA zkz%{-qAN?M;@qKySEdn~m`|oGx=PcbeE6bQ%cMbX(IqjM zYADG^VnFeo+A)?R%FjsDaJDM~V=KKxz)3AYlD(Nypu(h&1tTe?So>Rs(aF$Blg*|! zSS~n>64f`<)M%qhl(_rERh%24rv@I9o|F`Ot%F?Or*&m>&@9FWjsJ~ z@s~+Gm#T-4fwF%7@#9eR@x??$RES=2P^j+uZN?wxhw3jW6*$as1zJaWqZ7uUJ{~Dd zQv=(4T8>0T#P3FV<^fL0;ER;mmI05Raj?%cq|p)(gbJjkR~X{KP!@Z>GL#)kupzdK zN0I>4Rlpj;8a2sfC8>DHK?$M(GAv_GW0dj;(p}}dvuRMN2Q?=~Vqj|b(rV_i@vFh;YSCLmJm=u0+(5zREkO??HcWg$9NjAqvAu9*_ z%>l{RI|h_tXa?^awE2YLh6p*>`n?b?1f_ z;=(fhjA4M{?-)bR_2`!09POowxXrn2mA9Y<`9D?2m_0b@W2u{hm->`fD6ONN^@a6RF3_O z$Vr1c$~`1jk-kD4ZqtrIXF+Uz$o!I$>llqP_0s%O8Y7JBsb>_&C0+#dg{!+l6nZ~v zr)F2zigxB)3&CN+C_*FSso)vx1`#bqS3pa=UW&Uhf2VQ)*>={5uO^J7!8~S&tW~xG zE4ME3j7_87WQcSP8;Q^i)xpM3XMEO*DLTQ07&1ff&N!#ZShi>51=BTCJkKJa5DE_t zp5zfE{-?gVxEYge`t`~Ah;`9e%gmN3UN-o2!Bm(enRex?NTF?x=eDTHrav8j6zE*o zQt~)CF*A8GeA#ZO=u7tNaJN*RSJS&a)wrOraA5E}b9$#@Zt=m@tJWnQuN_~ z0&PGlB1AC)8M=Gh9mxNVcZW|O9DMQV{e$7w7au?P_|f6x`}^cM6_@q?pJpWgrI z(St8OdGyhPg=4pf+&qW6B4J}DeQ-L z+L&zEzPeprUL&Bduddgafi5nW7Z>xZ%lRdf$IW6g#y*Z=OF?i*fk{_nnFO}Q*{hS$ z#qHf}-Gl;iG^cFx#`APuDAW-6&%`8U z^n8|~1QyBz>3J#mIGJ4QMbe2V%;l`YGfKolzDn>a2{rB??X~S8q*Qjc$)6e7_|KC^2X>6DOdJ^~Yr~kMBE19hB@1zDTeWL*-)SI z$vhX&LDK}Ht*(HN;ZfqjclLYzVFwo`{p9BAmRJr*vM|YmN?W^o5B9tB$@27kbb56= z*xr8h@x6L;IlY=R(2h(MF`vvSHM487_r@v6IuUqO?7u5_({zk5SB51p{E5^J5(MB8 z5I_hgxOZrpgZ&)}FgL{>$0WHy7_S(lY*D3AHri?(=~}@svOB2*)A|8m)@-Xy(+3ls zZ2nxCJmDzx4)tCJYqPf48WyJ{BL;Jk>kXb9bTeFiE%)vNm^m5;($nkKAI8Did66M7Ixe zBhZ<6i9%OgK%Z=gWFtY5^Z?EC&3KdxpnJ?!%mePs1-Y0dAt$o*Jdm_&9LY&p<6`AZ zdSZlMHH0MxVbVAEcn9*VndP@4!7Ah<)jfA>%x(+ zaV=?`rLB_MLOopUOQK{!mE&g&?yO2YE7+OH{wR7Budn&7-W_0RlG2XsN>wQm$DB&) zDsDV_4_lP`tW#{hgy_1$-_H`Pn(tlf`Fq%0Wi+9Nwe}5cHH64ujq5l=-WE?a%MkUeU~_vvbgQo)9V!83Gh5z+vXFayw+_CUGr z3?JM(_BC;%}!Hk$@0mkgV7cf3E|2+htNhAO&~ny zHxmp)XV;T==c89AH!t2@y*|Hv{{H52ycnY_KfS!gU4=;t_>io8bpZ}&NBSURGOJQthSU$u z)wIzp=40+_XKKVV4G_7$L;@qE7`7gz?UP+k!$gQP&S(o_M!R!m)3#_4NiH+rP=JyU zit$Q7z5#1ZCIpV*CLCkyl3*)_FR1o3Z93G8dgBVzY81n$kUcRurmou9n1T|eX;C-X zgLNWZ0_&u?MDx6DW(;=vC#RxvJ=lmgiv~(d(I@$^^Lv>HwV2wa=L!>T)+&0=ls2TB z$Z?XqV{}~h4i)zXXv{8HEf%uuG_-nb%SE@>)I&2B^Sl$o^PM_12ar}!BJgQCyNmQe87hA|56aXZWTQEB>Z()IdGt+9y*5rK zfkO+aox(JQaE>#ARdJw4BPr5@3hfv!OEpW%v2&6e20t%%hi5$#7N!(NCwT2ict!Yz z1L4*n=4IP(Sap;9B1F`VrdG!a&0$CrgF1<8iyz|9PFkxdmnmc-1-MSMP)_F8#9D_z zHe4_jy<+@hUOckUl&BV6PN-BlPa+N`QDxtV@)-LG_MUT@doIq-$hvaLhW7C3e*`F9TwGjVUvs=HGO_x& zBG}evEIu+jQ7yLn=>M_`s^Vkr@}{AvVBXs4`sXlLy8`rdjj8CC9kgY0&t!6Sjp1m_ zuc%DfW&^SwQhQz-&ck7sZ290DZDYxD4lmvc4J!adQ#;ENmd1Vg>xP>LyF~R>AR3up z{R(T6!i56lk(S#{Fdf5FabE25t1kPwR`CRI8CWOrnl1s>>E!+UcMw{$~Ua zeM&GOHcV6|W6lb;s2I)?wGAv~i_ z6Q+{KF1E6zI<&hn0EI->jT}Rs8@#mj*yWj~RHH{Hq&&DT?%mtR4e|W-sUiS4^@B#& zhOIoQCEjew3gHT8r)QzHTUMagr%xZSLcKq^V8){BCoUso;PGrrLA5APr+)b02(yJ2 z;@he4#g4h2OgwZ<+Ldaj$2vrXXV;@KrSS_L1F;yXUbIlHHgFw8lhtI2F$h>L68~zp z;zcX(?{6(93*E6z__i|fu=3K+n9OD)>AeiV@eMQB0x2h1hl2z`Xq|}*Pc@4ZvSrp* zJhN~X5N@^I={&f%cep)(uo-#?8D+-H(ansq)kV_5l%xhyh{{^LQPG^~JblKvxw>g$ z$L5O_VrkkSx+GSNH5+YF(kx~eO4QbHh?{S_o6z^LqH=Muq8fJLp0U9%b$fY31EJH= zI1F@HZE&I^ZXhhsN9MxBH7N^f`-Jxl^f6YU^~DW+b$NC^KRKVCoK7z;W>;5C!mK;g zzR*m#aNnO!uE(3{sycDVAOzDMo2`%!Y#$l>Ac_ zi}}Wsle84|uVuyFatp7kDt;;ygkJCHIkIIUn1!ddZblXQ*tT?;PS>!s83lDz=?H5= zyMaUa#j8_lmCVZTPOnIK{;8sYy40T3%x;HK&k#%wGOk7mX+Z*o=9U|!g}T6j#bs^` zC@-Y%$*dQ14~wltc77^zc=>tP2_<4f_5z0-BzbmdweCDps+?Adl#EhZMGS@ekHhm5 zMU65Xa&%6UK4`xnZ=NOEphAkI(fcWAt1>(`nU%Rn>UL!q6bmMupRbg|Dzn14sDzlF z){+did?^V}sJP@} z1EK(EK`W;P;FP9o!}X&kdV6~D-A^w7C>K6vMx8Z4&Z3QP95*f^LIp&`p0eUoDc3CZ zamC<(qJ4#=!y>=zqn@YLlWYAFi?zwA%Ce6|r3E7l}tPEldFKlEY}HF~$@ z0f|)zd<6BURPC~#Xg{MSrXpbKrf}{NaOBV`1?=$nj%Z;9lWmtm&8@pRSlbXqM@uE2SkLYW$v&OEa* zf*4k8sP&V7C1}J6L1E4~rWMCBHzpqT%xS5bd9Mud9#9(34^8JjPQE;+EYQ8G#36-@ zS^>`^ONtf2m1}Sd4C8y}QI%L!{5mXgS|tzEq`yIZ|!~vzOwraCU#8EU-m9 zIM^jb=gUv-fBx~&qr;uU-Tu+R0DCQTWO;mUkE4b+6%~V*g>$pTk#!Ufvgz__G=Fy{ z^U$mJ&|SZO{`Q=hviBFaFW#KLe0M=`*{hSQw`U-UMx@1rdq^_)6rOCfj8$9gkgd^Z zu`*?0z3E73*NISJ4kuc%DjRE4-zdvFKM}gbLLcC*Y!^Lo;!qobbIRq}Z&CR&omhyq z`#~LpZZn-=WXZVZ$c+u-5`>jrvqo9O_2U5N)nLn@VViF2&IUdc-W5Z2VevwW%CrPrT1y)R{4E0s`o5ElW z*yogylHkbSL_z5D3=KqXhTd$dqM>7HK?xqg4iyfK80#K;*L8Y6aRBifGdKP~+0|+? z`qVtNcht`Q(IPD4;ojjM%n{Zcq!2`CHjaJM1+V2HiV%s(^G=o^)m}$-MB(L>8@{8A zy6)NZsTF_lP!=BjY^5O)XpQJwdNS z*N$+*I+ZIl~L$5Qe8Bpe)GbwcDA4i4CRjQQ~OhWCE6+>5Pww z_(+@@$HYOTRQF!DV*f})Nz#p}V>|vce6hTe_q`&QWfqC=H<_?PK**5+OIK*1x{nEu zPwKDAaZ{=v+T*Q)zcxY0Rmj-dtiJK0XR=|NyJw1_SL!CdTAVsbmXC(cJEXkV%FHd@ zUg2T^h8XBF8k>mImP?0g1s_!AC~%pV<^Fg@Dy|<+aO{}A=0Re>Nkn&2;0JJI%jhDx z0r=pP?Vy(Q)q8?oNw&2dKjXW@%BBuyOB_>-4n&&Ltpgy6;vIXOj*5*dxSj%jL>Y=$ zw=nGJ)4M`_o!hbYT-myFc_mU~7d0$MycSd6eKb+rCHq~@rA;utO!BF58SCo4cw9+N z)5cdubAh-}252viDeKKGD6o(A+srqi+}bl4 zlZZV`JvZXY;Oi|IpAa^?KN!~|HlInhdHZ?i+>vr}JEwpZLY*zOMOl?`x5m<;3EzkS z{sg~c4aZr}oFa`qy!c=b$MTcBc8+)8fGWv9ABo4IE&v{#ygzyO?mdtnsP-sOlI)aG zf6~+gr77bG3S#YmahNZv*g*Z3S0Ht@ay|Ad?A+QFBGQ7Y$2%(Krr`DL0*(E`cxh*1DuT3u}&d43-5T1=GxoedvO0AryC^;Kv#j& z+>fqGyD2Dmz~_Q#7h-NaF6y|L*Sif?%B#`j_1Pr}GLV)M(V1v3J-zcGrg`G$PjFL^ z3+!Qo7f;9jU^z331_=`VbK@6h=4)1vwy(??Ny}mzL9(k9)}LkoDYg)CFJuDj5eRgo zdPTP9h|*42+3eC+D#oI^Vde!ZMtqxETph-eG^j+8DQQc2vH>x5t0H0|i`~kUhjk`d z-n6w8QRAv;4#d6q671_e6f;dUP^i28}9!R^`9# zQ&oHx^AgXGml7}NGMP184DKuQ%@&Y;#l#Y}03Itr=<@wem+_5oIY3oA93*mE@2@QlI6IA=n^lmBA%KlXB(o$%Z ztJLaifT6mNhauyaPeq+<;_Q)@z@m^CvCI-wKCia14C)5PO(c;5U;#6iuXVieS{a@e zb&Q@^TU|*;UR=cX(1CCL$Zgx*>2(8VM3Moh?FFQaOy>(7i*u2a3qPM#Zj5hRJ3aaX#oXHMQ*?5@ z_qT=0yBSGUhX#oBK>G)SgZs+EMJixqaDqPYvVQfOuXc93S10Fv#_Mu@@$SY;kMas7 zbQcXdkKandM~5bDG9`xZ%oB|&&{dJ_3AfJIu(zw^GDsYZti$62TI2oM z^W84aEVfGHa!sl?=gZBB=e5ZoU)&`oqmg_<}~%U)e54z^knhb z*W~0ba?X}XeuXGh-EupXHo0X&t<5CKxk2o0={h=nT3~$CQEld~Cm(@a*NzEDV6`ch zwI`-SHaHS_mFGo;rQR^sxWktWR>;OCJjawHCI; z(3z8mNXkM*O4T&JNl_O)j(1Fk=5rP)3m#>NIy#_<@RYQkOEp+rM1f>;MnOs25~zbw zY(}B+JQ*8#d{+OM3lRpwf46jtIhBgqB5v$}5Tj!{(YOY!I`ExX#%NlkRvwn+gPD*v zqh|uh&GN1J(8;s8_>>hQN9rTNRO4#0z(j@h zB+}ArgeT&f#_-CTMtKhQ#Gh!Zu~uPs&bx$i3m*`P)BFRmBXFG2g_;4?i0-ARHK*sq zh}{rFFTl>}<(sqX*QZxNbuhtPVs=@uX3dC{V^!bC^whflfShdm_wOA(xPSQI-qB9K z_xQp7{r$bCj~M!N=N4g*`$PDK2HSmxiY%UY4uXoOjaen4IV&suRK`Y0O)W+oV~)&I z1XB_ze||m2^z-iQ`rY~MyYn09sEKHU^XR9S?|*rD`uy!Bfov-F`z!d5piu%$bd4#? zCIy6s@l3*N+W;Ra{bZ-L`RpzzSlR*u;?$Y5*zO1ltv$1a)8iIAWv!&iwHqZPm)5CZ z9Q1Iyu3S*Y)A6gIWIKc8Qed)-4-!F|wu>Md0Wf;K;U+2-foT*;_=cr;65z~HGWe-F zdd4_Kj)Q^4*RP+bn&f|43=1<7q@Q7)@sdgpQah75wxTftFQ|fufj=)^$ zKTdjNqd}IouKnjjBv`upqX$QtRtzA#^RhuudU8@4*y3}V@*f`{C2Vc6&Y|+Hos|GT z#~~qw4jMt-?enXB&Fj}>&*gJsmV8X zVwl@M6cRK5Qy4=ufp0}js4Vm{;m0b&uN*JJqqW)=tCs6ZhV1|sxo7xyO-fqi$_aui z7NI-)s*6bVGPSm)UfB_2?2pMLtcSb;CZbPA`JuRhlW=|goK@866>5Hke%vcXh9K3+1Tw?HWjL|q; zLWuSYVRrb=bkB>*)V6>Cdq9N0H0xMNOt`q@pky*i_`OX(_QA1-GKE6Gl`nXhEm$!L z`O~Nte&ZiylL5-mA=`nH_@6&Xfge1P6NeW>HlT0by+3*J^2Li6FJHcRDMsLzuU@}? zgUJ8`N9;#a+kv<#Z%*egx1b(krs100*QTiCJDXwkr%EuCBovB!Nr)cvSLQL)Awyv_ z`jVU?mYsA(HvDGWRpkANn~U{?&m=Jk=4x*1PY}^DY$fJPRvqu~smJ zQ)_t}bDjdVjNiEiyhCf!jw<|E{LPapLA&8R0)maMMDsdy_EfGNmRbTEoY*%;ypY&=_+ghEfc` z^B3or@87+92YKlkoUW5($}@pZJyac)ww@&ZjDt8fvooNQgkn{p0qoDf%(gF5Pzwj; zzVS>H4JSR;SFX}av9pR`%IS#<+r;ZrQAhi0fo^PCf6#^{gLWh=hAO*C77Xr!03k1xlhQ_W9KbQ`8Ek3FH`5nJ#6&Jim%i9?%wpmb86YpHSW$~ya_%nX* zh6IRM32S~*{i}I9{N91=W)`LAgibHXcUe~H%5UDC1NX2Oj*kzzQ~s8HDAdu>d9$|4 z(j*B=hsjH9l%?~OuWI(yxFmOhWhIq0vXp_=Rm@p_C$H;}=0OPHphDMZj6MRYN z7%I+oM)S|ohUleO0@u#c;y{27J5eS%WpcadBi8kMQ{(>VRV$%?5K5ZjVwj@WN!^9B z0CphUp(41sni0C9{xF&`;DP#!SL=F8zuZ6EW>jCE-XJ9H?hm;F7escY0$^)cFVqC0 z5s|YLO+<`S;}P?OJekG?tdnDHI7Ce8`D@MM*M>>eX5BRjP~ocvr-rI*V!@45DM_{E ziNO|ai=L_9v^|3H>1jN_8_xjQsbABcfWapV!GA6% z8y=7WWjp_h3P~Tasb8#%`21-#f&OWfL5JN80(R1Mg%q%X(O^}X{92j^Oti70P|-re zP{Xk5ay9!Rg%7G_zLKtA52)7Ys+x2*!U=b_A3Zo!`g~C~2#Z1Yqc>8AJOV%r9*_{C zH}5Z4XO8!f0eeVamTFAgW3hmq#;+l@xv~GpDxxjx<-`~g_qBEXBICPt&ZseAu(AtX zQ%zX=#T(MryhL4x?l%Tir#9oAXqN<@gyz|X#WJ@Y`@#ei{%QUOA8jAuI?{#K7pqtt zDtNv;{2{-OX3jrdA*aW0AGEk>nAT{dG$RfWoE(DQr0E6>R(NltkqZ7E&#cMzT&tMaAC`D<0i+ z7o^^>kEp?OquW6OMRp-G=GTJHs+FnS=O%}Y&Q2Se+eiz2CV#fe9MQ!p$+k^m$yS;6 zEkNiNax|4^VM4+;MYPOD6a)AV14!O!ZtYh%bTC^RO{uhct+JUSAJPq+_izKr^83w*7@EZ4l*5E@ESv@kxx36x|&>Js2g&9!jkUl!FK9IvZ{5cg_vnWn7E?f^P3MD>*2= zlz4u&ktN!M?+9Q`2zjmm41wz9Q0RFaL?$EPAzSn(kwoSPhm z!H7}gATwE-FbA_#k&cxy3*Ux`y*Xy(5X+cN zD=0u5|EjEznHNJwuLP}I@(lh!1_Jso=uAQ<&o4(HI>{OT{LR_7KfV6r_b>kV!>d32 z@ak{>`17~V-+uGM>mQ$=yuZA?RRXf`VuqeRzW?;$A&bTrPmezP=t#*t zJMH@i+k4x+Z47Iqb!v##Tk7U!)vU{7X0#ClO#O=D2fiAqHQS6UI{tJanT26N>V*r) zsz(#hOvI6~`anno-_Y6Rh!kn(H>1~Y&(Cgdu_eJtbOB}cbo%}b?Mg{l0e-d|1~<+*M=k>1f$lB@6nZyZ8o8D5;(1B*tg41)=@N`}uKH7b}g z3mc}P^o!*+e7gu&>pa&Q;8sS|x7&8^HXq$TY#7=! z8qG3yGo*QL51zuSEE~;&Qm9`-a<267JsByF4@n*>Kp9hHfGVtj*mmGDz(H!5hAia` zTQo+u!e?NW^c2LiDgi2PCuZ%DF00@W+q@;qM%v@CsU7AifdCN@$Mdw%!bVV&-gk}q z5ezRVI4TbB8N_B5P?mw!Q5m5XpcWW8R8rQ7AcR}3_(p_LLcM9q&MFZhdV-|$D6JA- zB#R^kuhcNFZ6QJnrKd^kw5W$CJ28HlmEyHdR>-8MiAI+Y5Mhc$owzf%@Quy4i*F!<+1G$0nHd{Bjct;wBVH2 z36x9Ld_IzqoMs8`*Es5MQLhsF7dZVq)*$EN4Wx$uiKx`+Zls6^ceY_C@~9%)vn0wd zL2}Wix#lt#Ng)>g8aR(7g9^Xn{VJTwA8fbpt4$7w9ZAL=$6-YVnzO%z?fJ_3f#c@3 z_=Fu`W)M@jmwc}xG1qt;mL%D{#t!&0`!lZ@8`rlc^`1?Q?$PVUJ2-$pBa=6Wqi3Y+ z%!%S+K;B@}F+n%i#SCOF@G{DbU;Wi7!)Ob22(dJ(t~P9^gsBrZ$|h#bXya|?-4D80 zU>+pAy4LKZ>SVY1|6BUcCWqS4WBY6~ev|a`uwVrmleB1a75@7DyOZ~CPat?EdTw;% zcm!r-9~?wU#mgN=D86xhOAmVGr;7iZotzlxNt{curRLYXjI%R{y~Kb7=pNKh5v=4F zKW0Q{998T#S+FTaeog-P#1F-A9NLQ{{}0H?A<;xenii+87_z;OHs#}J?*Ex;Ix1dOxb{*TsRHC(fsiM7nAZOAG5%-Aj zr^6$N*q8hP*H2N*iuzsehDj)$P*g|_dyLge$$1o(OA-#7<6;1?SaWZ6tsDVj3rIcO2*9=4d$Y9dM=9&GRLZgH}_F9Xp%*wtFk=)04B zaB*=Zy$3mFxT8!KPFlPS2?cF5ol1D2R2tJ>Bv_Y;`@=E?BM-(4I3Q_p+-0}~K%WB$ za>mp8*7g=XUEbY|Fc(`pvN{Q?k7+T&I(Xvln!nZ3oN`vc736?fEbOp zi8|`Zrk^Y%0X0|bMVp8~Hk6x=&|rkjyFp@lJ`6d!HjEdmg}y4BWr+#(*vokpt-j?V zUyW_wA`PA;LsIzCVX!)^E{7izQ3zi>9^*pTL{8%j&l?*44qG!S*^U|B&JHFtK5KNK zq+E>=fF_OH6JvBHB5UJp)P=QFw2M(-_R3O?khUHk?+|~29FA*=0k{@gyd4s2#sZa0 z>2Ji!3<|G}ivRv>^!DxL(fy+@zI=N2?hWp>7W&nUMR(1(i-D4W2t)V_b~D#eZ2GN$ z+=Ia4=Rj7g_$>O#E#+5sdXGuAu!qdsJcD_V)N5r9U?Z50aID}a=G3{r`w z4n!gilx!YZRr3RH6AerAC#E3+37wy@Lo%kNzW8(?SBvO89`>(>5rLfg>X8Cc%Ou z8AE3w;-QdH#xbmivQt)zMJcya5>HBZai3D`D!gD}p$MzrkR{CsYigeBEKJSgWxdAU z_~F{dV{(kP6@9Pc?MCVZb{#~m{dOJUFajx!d7|MJ#LFuOa;xLx{g0kJ_{~?J|Mu5k z{EPqWw}1I(zy8ZV|LWIYd;&w<{lndl9v^-5@bEEKxnUoh0?j$>Ya&5nU={Bf-N_t? zOw6cGuZ~2=UBVV`grJg7Q%>pjHSxuubI>1oAa?TLLnXWHZtrZ4eG}goXCb{s9l&y9ytnI`0^jVe)j#dcR#&8 z{pH=ox6j_cKD#=-7%eso1TB0>H(!1F_}5>4{M#>|e);i(KmXO!-+c1ucV9mK?9tIz zA02=E@Zib)y^kIr91I7{+)#HP?{DARACe4%3S7|-Ws3>nq0l$t`bp>$bCg3wyjE(| zL_@=JdUHF4ZIq;GCl@!b-d_MC!k$IA+0QTDQ}~x}&#-M#e$Y=ZUZ1{vcmCqdsgAk0 zy;cP4j7|xp$lj2RMe~AY05C_8GNB04jAU>hB41sQVkc{`%&FjC(^_{sS~YCqZ?Hk9 zqE_i(NIra(?PA4(+uu9bZPr?hXanE`TiMx_sHAf}g2G=MXNJR%L@Jro(E+d~Kz?PU z&)TZE*I2FEr4d6VVSHg~>?`u-+_EvHZ^x>P+kSin!u(A39Pdg&<{I#5I|=P9pdnMTNd}968U6PU}dT$`U z6pUA)4*6BF(*?6&e@H7#L%~yMvG;!WhvKY?yCkfr(S)-v{EkUpW2ypKPr>r z?d%%~xs2lC&EhQbpb0EOiW|DNi;xXGIYE@z6k(GD)WUY}#8fo5c|(Sb%FHpfJ48tt z7vZ(B9cGo>VKL&cU06o=T(GfB@D_VwE#lwQ00X|p`x^93fd7s+4wIn1g+#ywS>_IL zqB0{JW3=FZ&_F3~66ULHw)gN3V|6e}3xi zo|+!pHDHSF)btGDJ0=_UBsA~V8#mU-!RfGv-KuH7l#**IJ5jitxeq00n-RzHv_ZiQ zumTLOdww)*OUm|m} zzc4e!P87_oFA>v|UOtjn#z`y=TqHw7_bdIYl(RAe*|4bBhcVt&a0FjV z6Ou|E*j=upQEb|a^vnpp%pFW1i0MK7(1-XfW*J1k5aEN%<82{Q`o;{!z+zk`|Bxt8 zJe6}h1UEc%d;2?-htWr)P$YFu-AQY3lldgZq#p8h%Fgm8+QmD0M4f({ z;>oYbK?6K*0{{?Q+WvGfQrLR>!H)k z^KO!X!sIXXcFa1Ywc;wwMNJ`)y90BZ931YT@*=(7Snsi!d1{cvD(R$d~XUhnI)>DzjTAYa>VEa|&IK@aC0S2T34-xa_g2 zpi_hKiKX6DoiaahHVA@@Z#98^Ed?sRAt<7>HXE31q}n*{R~r$hlHE1-=x{kZKa1`W zuuR}ck~7`zmI?%WOGq-0gGH4IG?~#&O=$a364Hy!M5%JA{OhZc$zsttdrUaTkN23q zQ1}myw|5T)iy2aQlcqj+{>i>}GC35g}5~CttVO zrh;Kjq9U(-^&oK~GpkapOVCw#XuEmloFTp!dY~md{Oe{}t_2U3#E4Z|Mh19LJUm)} zy*#f?d*resvPCs!0T(j*sWE=C(fXyeulZk`%J3v+f7@>*M2 zCzU}~9IDtZ?3B5g;e*Z@8fL_CU6?dU=IcqRIL3>MM@^%~h8Ae6f01eh@OS3Wc$E1m z0biyaUI}zy52G*=$r*>Kb`gF5=kA*jFi_P6)(!||Yn{aj_BsGRQgqT}e=W+eRi%0xet z1<0Dyi(8B-zq~&E;l=6KKfM0-*}Lzaz5Dj(xBu|%^WT5>;@h8J|7^OS%iGyV8K1Zz zuBO59F`mR-9tQTMFF*VE%g-LEHJ=+*$o=Q#Wip}%n|b$1JV9}&{E>45?0sR3-kq^PZZS-WW?lo z$Qv{eW$Otsw+XCUYx<&yHo%TS!(w>c-5tcSJ#gX+^$=4V(@}XRrdw;+$|xMA)ejo3 zop>n`mU+Yl+p(0Zh6%xXhe+192F`rfRkyZKDyO`HLl~CCExhpdbFF zggt~;hMPsl5C&&yAHFGdh*AW<*O$$n0VW}a(i%@GP!m9L%0yYW2C_VvBv%3Iw23nL zx##u!DjOYK%sz5iYk*Cp;x5+l7}OmYse0xNCK1I^6FL(dX~S&c%9!KcNs-Z1Q6eaM ze7ZcUSM;V!RU)REvRgUovK4aE5R1sF>ibejw1!00*_^N!ri01`zqYq3(bU|*v{HCf z3<$6d$fcA@GN4cdH%|j^j zUS*dFWGV6FVY0|%;W@V`Lxlt4r!2kO0-|mBeFF07mf>ANF7O#Q2m{q#Tn!w~ z2op{66byhi`lE^snm9H6Nkq`3-XHP&#IYOhGKXHkd>@g~Q7{@Zc z8YNc9-c-~)O`*wi!6(yy(`?W*N1Q1se9J*1Nn<6_1efW~f-FCU70W0y*#kIjAb+nk z7NM(==INa7!6}tMSymWH1xBzZL z5F7IldtzD3GZ^$9Rp%iivgrhoPR3{+X*S$w96t8P$zijql-eH+_c zUpXeUr1l1KXs3iUhk4EN(7Y|Qxj?!(W-?B54X~tk#SU2Xz+|W~@3Pc9dlV!~;MX9Q z#|&#pFxA4FZjrp7w@qcYX(>O0I<~ z8VrVc^n?u|1EB#x2`v%m24lq57DmIte1f4F`}7)@{BH6G2}jSYdYyTK)GV2ho& z!AIDTYOP7NjdM#KnDNN?N^ZUkC1d_Hg@C~s3^`184T=Vj3^j>M%_O8jLdeC<@?zMt z5j|E2E8Z?{Pp@O4VStl6`N82n7jZzYZe0seNJruj(&O8cv+cbdxH5lv_J$&T@x^23 zHm6)wbr&6Q~uVb0BfDOt#-66O` zepEcV`c-2oXgDU0P;PT@D8A^%EVZHJr&W^&U1E>xB-5nzIwzBH*}{VpoEJaGfiSt9 zOGrz%2i`vH2?91(WilwXcl+x9##o7AYQ7-=(@jvD-H1J_i*!0$V|745BIZ{tCk~E_ z0VttB6xU;2xswxn=-Ny2FJ>f*-(8h$;wVLW{ob~;l`NVDVP)|uy&&!fl4 zBE*56&w8l3)NHNl_Grg6p8Sl3V5yCy2NCa;$WTn}!3d{HX$H<(n{RGvc}}Jocd$Ui zvO>l=#7khDOe@~eXcctGvGIFZ3Hed|mdQ#PlxMfoIY}q+fQXH8vEcN;wdg*yT}Umo zu)2x)wEC8NtzDRw4e>(I#E!qPN3mwGWNIu7ee8{wfb}{Ogtdckn>IqNom_Z^SK9aB zNx&3-vi?|cNW$sVydZ28APPJ)M`AcK!|*mK#W9G0T9oKZpf zyoXy%m`bPOq>wzh`MQ$*6tl8qNVAM18w5nA9z{n_-!QCHE~sW|&Cxh+7LD13VB_Mc z0b>Z3_LPj{Z%==D{r1OSUVZn|tM7h!^~1AQKRg@frH&U*!lR;5vD+Ri0&N> z3DtD&ug2bXmrZ6l9+KHmL#F9cwHs_FAXFL9Y|>JyyS_CKp3;E@)C1Z-O(qT#g}Fgy zIwrpL?aBG`R|F4Sym$Omwp}z@ekpT&Q_@Qb^cQ)VTpdj8uI12&n|2RY94_3)-=-C3DGuVK>A;3= z$)@Jnpv;j+AFuWr<3t zOWa4OtnzFvWlD#Nkm1Dg!=*%#u#BsldJ){w_NFzjn6j30)sAS~S&(hC;v$rgH;2{j zVF-T`GSDh4giI>vIbmK26N^1acee60La*zXh<=;ajpeSU`?joO zP}C@bF)&9=iKjgYBe;G{B*D0**^;4#SIr7xm~OatOh`7(Si^}N?+iYiZivkyf#`h3 zbM2s_%sh5`#`$KABB5My7e}8D1zXsTsyQOBTq42~+d07D`q5o;d_&bzYP0dhmG~x| zUeVU3JeJRRxiGpf+Y~tDHPm*@G0U*wgdo{?7B<*3aoCY87fvNkqp_i{1Sl!7l=rh? z3(-upHKhrO_q9oP<^}_W0v`*Vz~J{&XBwtg}O%9oW~qG#83a6LA6nOwQx zVCH1vv{G+8I|r*^E>ifO`NcM%!v1Ab&N?tBzIy3fC&gRh?B;jhPB0#vU(rYs@`6b(Lxw7FPx3p)`OHgu{LVl5fc)k`Ut*{&&G=+a^@ORB^~U~ueD+iK|TjhQS{^{Rv*AlVbzY|0bJ zOge?!BX0Dxotq<(eR^09X6~iBvcciph3I`6A87IA)ub2#|AhF*?N#lv49Dukik8s# zXekvs6^R5-3S%=oaY-{2#j@%1zjJ3L*Nv$VUOxo9z2Qs*kUO1N;Q zGyOzreYiZ~d!8?3?53dd3D3umkJ=wU5E}zhuwDIn_Fxv0kb|;00JB92b`BpQ#jUKz za(9W}CZI8@k!D4sYr=(aJF9*D{PtFkXDMb#@mI^*i_1BvbBy1#Y@$S|x4r${w$*aP z71|3qMvdsagk8O)+FCxL9!wx;pb8JjM7`EaIwS}4BRp*MjIc457^`+&EKXKI8_n(E z5QrU14>N{Ci^ZUK1i$a@HdhvSIUy}~9xMh#L!j{b&FSvJ{xf>~#m&*)?$MrNLZ@K0 zHVGkFS>S2ep%of}84Hu{Xk$msNVKW*!H4T7m`V+85;T*_B2;%dXOsM0xbELs+YF@jjLhwmVA3ePEK;x{)U2FC}- z5Wn)bg(V0S44?qB0Z41jw4c}nM#Gguj5#^r3!4I(YxA#p{%9uI77Ap@ygAE4Y!)fi zLn=fwv$!D{xjjVL$!Jc++*~6S%`r${osVv>S@#x~7n8FyB&6ld`7}N`n8N_%&^IO* zkPOa1_CZSmtM?4=Hx5l9y0~lsq6`~IJcXf^spbF1X_CzBt{yd>A`DRc{oQS(PuiLV z2N{^>az5!~z0{?G{`Ts;;VVsA(N%CdoAGK3hwJt>VpLjal7DeK_S@fJbeNfO8rCD& zkXZyR+MG&Br#l|Y2c}%GB$J#}mgyKM}K*^9`o?29BCw5%OYU2c3^EMiq zbu$_yCOf1xt$l7X^+}zXnw#;yUA1_-OxN4{?{O$T}NuRv3ctOh9?fepv@hF1y(P%#?$Z!;-WoImOtJ-$JN& zBe^(rL!L%ahWyvVpR#Qt2^iHLf4pn+T2dQUt7Po6ojA0xjqN(IDwKIBtA1 zWnx1-K0Q}_^5vzoj*Qrl_>YZ>24M^{OlV3_3itN5@9hphzJL7W!NKFB-TQmn#FSwe zdU&u4bIs%X`wtJd9~`hYb_x6d1Op6WyWdled$^gcqSAy&|#um#*mrqu4hy4`@fVle-oL-rnYVmSXJ~u8K2(a99B_zij&gmP% zNXJSRhDikg&a<~?*opq}yXSxP_uv2ZAAb7BZ$(A)&5v)Mzq=%r*!y!Be{eP_A07>X z7i^bC>&vKzsR*K_dq=xXi`}4^K7D%p@Ca)OE*acgaCp1&+jYzh9Z8=3mI0+bjDVI! zNg5$^qwU`i9Akdk9+2e_hN`Wdogv5y+KTxR`GVve^tjh=&flC}y?A{_eA(+0!HB;5 z@ii7Aw%=deK&{Q=unn0Fq>S^Gr#Pi$i;mEI^5Bqui6qfy01O8SdgNvd2vBg!vFC|N4meNulr=4OoDR}(}N@Bj|M5@dcKy+Wa6 zg7*$*#YG?Pj6{{k(Uj2zOpygV(cnzkSz-|+(5e$Q70jvwk|lzp?wVySFi|H+UPpuD zQ(AFU$=Jftrnr$|AW{$b6V1~M|M3N>c}jOyq=Jl5(H!tN1wE+a{bI+d*mm?&$w|(7 zKq-?jrAiSUl``Bk(Pe|eh=178@8QC5&F}zT|Jh&VmQFZsj*nli%uo^zpB)P*^XD4L-jW=UpzPBrK(MGPz!3II!+9cDN(h&@DXkxj1)0#n5r0~ zjB}8ULM!BLlicvuF|pua6Cs0DNjQ{jRRe>D2+&$yr zK}+$Bd===)kfKmc=d$4xVr+&Mdg5In6iVPXUzf%l`E=?tQNWsdGDTkFNo<9zZ_U`ehWj{t1cJh(!^p)T{ zG8{7YRfV+j)ioHO)05M)({m8pa6D75OiAf@0nNr{M8UZ&f1>Qi;l(SIG0_$>USm)3 zralrJmTpUdt7^!>Nq~`+j_r)cbop4661?M6HnzqVPmwYtoYWBA>g8YkavGErE0hOK zhgXH%LRXIV-Zm7G8M~brOn!6H6LezDDk3b9^&~)&80!)q%%|0D{n^;YL1*ISY>DAx zYKB#r=3{zwb6e`kJn7pp@y53oZ@iO>cQp4J`&}IEyJJqG*HAh-Vzb3z5>tR1t(7Ko z!sC)jf^qWl-5IK;tFCFi$T(C_6rrMwElk^G`ZM-~>fZhasRn7;jTfePJELm^?%s~4 zy-GslHVfv$Wp-ox7HJFj(!0RX603`fh)%^EN~jt!llIfc)}znhcic|tzhSuoA}%Di zgi5zEZ6Sr$_IG4N=7ImvQ3EfC2 zu+W$A6L&{zefa1Q$%BOu^D*VzJKo_81R7;r@7VWbKv%6HvL@uA-cMmT7H zpR238GsP*^9?4H_9jNwfXIT5UVrIDM#-h$xBEN$46J4E-N-%Y=HJHOpDsp8pP^J2Prd%MK?1HT!qjF?Y9PhhP5XIh=Zo+k2I z>z0^}B#ze#T9Z&vg&U>UmH&C^Z1)@%95l-Wk4!V+2#X7f;}N>_L>|S+L5yFLQPPgs zbHh}Kba%YFgJjQr>3W<)+2Z>FL`EW*=WpMl{-H{K|MLrq`q9&eZK-*y@QcUMRWp%r z%jRS(Dg+d>=%i11R20#bnO6(6qdzHQbR0isMzM68a8QP_J!3PTaN0V^j)E1aL|o>| zyn+mJ$eYVk&9I&vGWH86oRdr~GcYFHAHkC|C+ZK$T1 z?CVuY5RXUFPu3J991wj|)MeSAav9A2$^p%|A`+4o#EsgkOw3xPI83xDPeJIrL^y?I zb?Ss8i?f!{@P~Kt?Wf-DK6w?mCYbCp33a?F$_w<0a2%PR9)ZUnaSWr|4Akz z9bG1+#D5ycsO`qhy30zGP_JZubTn@I!7 z@QU(`y@kG@tc5EL*hpDSS@G#|jg!+$qE47;H8-w9SES()bcbbji6UHl;X0A0$M76p zAzKKcge9$}dYq}9V|$Id!F*;rb*soR;!v-;Gr@%%gO&}BfC(fN4{Vz;WNlmjGC>tw zHVjQ1leG6qJH?!1*9FZjDUUh~@l(9UN&1^^#;=ZM5Q9l#KW)@=Cgmbapd^HHEUP4K zVaCBYYk$M_#==Y4>D%DkE-r3vQ3Onbt$5>EQjtvA%S1Fbh&{-DlVC_E0eyS052G<` z#vSr`9XP8O+#g3W8T2r4-#^C8y^Zk{voAI@MXR%#*m2$;INy`gz=uU%bT!6RNhLP6 zPW&&m0+5T&pTK1Ap>-W9=_WeFn>oG&bCKm{-L z9=ciA08hU4EC6gdgMBcwoJH^VgwzTHo84e#uvo;dNFW+DN{ObKrFHXMy<;~BE-Xff9c6l>p-o+jWhKSo9>ui+jV%@=29*FfBF&=}WCdT&igp6DQwC7gWL0LJ7$?X@LIfCf?oqLQ<- zNTuzXvOI7+-6G6I^`Hei28$UEuLJ5v`zDnnVr0cl#x1h?%q4oRIluYf-XYB#tGPQC z!&niL$V&92B&A*}?6XU0OiR|4HP?1=ZW<3&xHb~PATxwjoPkD=x@I_ylAVEzI~5}H zhw&iRExW-6blVd}>)moB_8>Y4U6Vag!4}Ex;l9&XbaWkg#nag`$;IN+V8iT>Qcj}- zh1i%!pkUnHI~#zrW2OOWrMP!LW(+I2UBg5Plq%+@3c4)zU*9g-!5z9BWmQ1aBt=eW zM8!9k8~LeMIXI~?oh<0X#LuCK4kK-LaVd4VIBaY74h6H5VBlo6uS`b#%Zp!;{M@FY z$1CKkfe+$O6zN_uWCYVr(LYzaZ(Fqg4HRWY){CIT|b;N%6($M|Pd5?trQNUCQCYlR3 zG%omtSRO))!#nxT*>8-{61@Vq!Z+ z97@HvTMjoRGkb26AAPJJRhZIZ#eF%3jgiEg1^419atr<>pV!jZ8w^);BubKC{&hhq zT?DN0pF5^!@}?dW#Tk0+k~(ISW)1R%uLeAa3p{guy+ZdS+f*3-=u|QNgmuLdc(d|{ z2lx|mpS;-bIjVqXZ_0G$VYSGMqXSWC_$QW>L`qXk>Wf-u;=DLJCy6_Dp9^A0gnF9N zH8`>gu1X#dwv(`rZy_~^l8_+kxG3U_a~awnge&R_1#PqTsGPB)=QD%a{k-Caw)Wyz zE|MQ|c!de6KtokpDAjZMQ-+KF@+x^5TzM{r&&qTWqnKkr45UhQlAWT-t;4?HK~{RL zBVoiKLbD_-SxTiV)#3Wps6o7Q6#AXoS3BnobL!f%;DK+*9*vIY!LiDnBwh@sPXYl< zwa_tGy=F0#=}DPT!-SUv23%fJ2`mXR=1$I7x1C$%-RZ^IT$C z{R7S=l^kM+>G!H;X5#}AsbT~0j+W%uXGFykev`TQO{fp9`s;&58lnzXz#a3MJK=$hgv?(`5F(TuS;Q3x8JHH}ZE8%UZ2J+WIrwn{yk zJX)GV7BbLKPC5x2xPK`IwIS|KJGgGICw3#X@wc`c5>M5L=GR8?5I8q%GG>tz358d0 zdMP^a#)>`lMu%neFINI1M1`1)7GehMs@ExUzAJrlbfYOWSzYixp<#`fMs3fEP6%cl z_wl{m`e#p&cYrOkQ#BkPZ$ZS>0?D}5XmydVz)AFnN3HJm&E-X6Ng2Ln$_4jH4QdTm zh-0VK=5V-uc7A!ix*NHzm)93~P>L4oYn zzqsw}>r7216pmj4lXSvT1qs5#3j_e6g0ecvhAglNFAYkajnJ+Ij45q45@z@)(}*@^ zrKPwrk_?@cV?%A}#YG7m*+Xe5Inoj(^myT)Bd{dTV+B*kySTnZ;4z?BYLYV{)~h_Z zvBifBE362i@^O(e!!y|h4GJVd;q^cXwzqi3rO`K?sR%Kg1;Sb3BPj_nu_%0Lj(N8z zUW+M2E1(US>3C7Jw2UU@uI**q+N5KiKDZPI&~x6LUS2xa8cqchFgIf~jaiF1mXC-y z@&0V2W^J@(x)TGbtZ}&7nNU&&UU^==qWI`nDrYGiA(bD~QgT-}9NQ7vL8ix!Q+Xl= za3bT*<64=9%8YxB7<$&`rM4of5gj@RSMnxNV3x0hbHOg`^}5GF=ri_KZ(uw+iiNIP7V9u4A^uZd)9>U`+Og*n{?V2ZIMBfZrV+1DG6iu|yK^ zvZat}Ni5b-6nE)aw=NT*Q}4B1rE4QPDH~cd+cf52ARxAMZ-tTALvJfUPz97IUZ|)@ znIJ-X5NkEQ6zVE5kJMZ8lVptpsGkka8rSc9nX5 zHu^X^=?8=!M(43h20K<6CIsFR13e0&qXkc$xg`^Cq}eEX<+cte-Ke#QYWYn+$A=mv z)-I7)g$g5?^V8)TSScV?W1uhroLx;IAtJH;i#Hc1mm}z?Wp?@H?GG>B0m*s!=A2*8 z$Txq9MrBG&jY@ItbwznTJlNfN^5~eLvrj*M@EO5_AH(ao`{~EWN19_LmF(~InDBVx z)n^=1uYj1T1u)dKE+eBQ08uZ5=t#eyXYdeg4Ttn)Mk9+`8{pU!wlX@K4Ds*bpFX?z z<@wv6o?{q#_vYl11hVj0!-@s7{)o;fXZ(`KOm&%JuSGx6tk>xbc0lpm*|sa|tY&;0 zWOZ+Lnz08-j89vA0}`xt&BShBf;9yst2nc|Efx!uIn7{)`#aK8t!9fX+|9Z2u(qPL zS@HY=tJ{Do7-YL{#ba(i06i;M5{{wyl2h}+{iDx5ehh~wb~UtRlCvoq){febaO4nuvOUnykurB#yl3Lx6ruosEH3@JIoHvx{UF3`hv66 zJ|&3`0wm9p*_SI&hV)2OX<9b63RPG_MT`LQB&+@xNKu(@OM8q+GPJm>Nhu7Yr88d) z&31q{v!+ruEg{sHiTYPDrntIV*60#b#gP??hVRh_lJYDKOqls84 zhxEEa_psj^mD#0QFW1pv;+D&m3!)7pcpathN#1t-sJO0eADQpj>Faakhi>rbZJAKm zs8HSsfysKD;^p*Ae0e(A)cx`z6!KF;WWDwz8b86DwobHI7hUSYGvi4(>lEK4g>YiU z1Z3k~urRY(#j10gc&qu?VPec2i5eS^%l$$3_(Z;9&J9SX2>a4I0b;WNa6pg0FgLTV zD>{u!`1WHfAsp{SnM;p2y8hZB?FHfVA``CTu!4<>w4n|YxS2CFCEMna>G=3B8Oik;gKfB=m}N7_Mw$6H6t;dxpHC`zxw*@sjeRyg$ywl zu(IjuQ}vf1@Lb2A)flN*Ma>CP@EYVU8q>DR22scYUvX7XyLlp~)lec2nk-@;Js{Z= z;v8TVNFX%#OwcQ@rA79P>4b*SJHu>^IK``_@))WamQS1N;y9&yTM%sWVm1qzjxj?@ zw;5YA_vPhCt~$8yVXwC{5a0%ro;bYbbJTJ~c^h6ARoX0LU!p)3Y&bE=q?(GEXA?YE zn5TuLfa10t>3q7Z^n?l3j zgVdO=C;v}R#Y2wclfxKvk^|)W8*t6QXTZ+TKWXfd^$P0P5!|)?gB=(gU%x$L7N9g{ zI#h)C((3MN<=WAjRRHt!ZbCXE5(K)`#wqx4Y_h#vI{n9;@~4b$)d`pq<&1IUIi03$ z&ZD*}8T*vdT9fmFt_9>rC`I!n@DsfA%px~80!=0xT_`ZcH$M_k(ZM^7P%Sb&a;}#O zg{v?T)3WFo$r4RJ#{o;hbt%U_AfS=X2l0ZLHo=db9)%P17^B(84|@CC8!`)L`3nmP z-KT&Hw2?w~yWOD?hmg<+QO?s{cLRmV;ApxH0qFmP;Tmh zhmcZg^`Il;8`Zvp9gu8@EMrbWhjO*RxB2)UN==^wGUqEns&v8@k3$kyy7|e;#c*%$ z_uu|VFFiWggOQ=#He77bjWsYx8Atki;@B=7N98~cz zaYd%1hylR?r8Zbr>6|f=MzhUaol;~9jqN*-QpuTy4cVP;jZygov|np3a}F1=$}}8E zDMAr7f{&k-;BcoIl7sU z@x4q55?@YywYh9FI#*^<71zz*a2N7Y!XI@@HKf(}NB55jl%Tp|RUcbxzB6`Gcp_gX zwaqo<{;aGpeqQ5o(izH+B-giE8(e25Pmd=JG_-W4q9PMuC~{-~610K-%zQ==5C@Ct zRGN>bzFZigi6VNi1omYFkWsR{)4|$aD^pjr9cvKB93Sk+3`{R~|Cfi?dCEFLE4z?+ zMt(>f0E-|ut=vm(eYHgGN=sO1?76t>g0Csp7cD)MoNvsPB)VpHa`p_#ZPFyPWUJQ% z)5=U3{{p8ZCK~5A5gbBvSnf(y$0HIv4l{=Fi6u{yF{j1^VJDRy7ll9BC+pbXg(S|h zB}|STPP!_0jNc-!Ag5BWFn{?L&Ga9d!vP24>MD?tsUk~U-flQ~fK2?6Mz}|>n@6p8 zdou9xvUpQqD%A=)Qgxe&!tTYyl;}vt2to)8H0MScc4YUOYjHs=U#25SN_!`Lb8p0> zpfR=9Ja8lVV;-VzzS_#EseNr5Fs|V2e6&r!NnPhY$}Cyx2& zm+yag_V%Y2?|ypz2BLQy8!%6uo?at~khuJ#rw<++9Xx$>@3T*y{44+RKljBaAN}U5 zk3V_x;Ioe(@&4%XG1jzg@|PV#jNT)2A@eW5fd$Io2q3$l2bg$4yC)`&g~X^9T6qJ7 z;NIaj%Z!P()*yiJW1XH7%y0?)`K$M*a9urn^&ak_mv2vg`Q;5%M6XGPdy4Dj0t4~+ zIZNyG;sW@ovJlb)JhT@yA-wA51#4So@7VFUb{uZUfK5r}&Kf}zVN{U;rz4{1!LZA8 zijFA~=(Pk3a{car3YO2-bG@+@%&7^2qA4`>zz}O-eN7xXLct*6snaz*cTDV6Mzy6i zk<@N)gqMv1$asSA5mXazDX8L+mj3xe*2QwvN`WGh2y zP^C59u-}X&9Grebwet?^4KBp^SDpAN9Jot)Srr2;^=38^S#Kz79E{ycWJm5rUuT0K z^RnxvDLj!4pRQbLO!EsZeP=IFltWsB+ULnbFU$p;lU@>I(b4_UWeU{b3|i8b(NMWt z8)j3wMk2q;bk}7(aP-pxG*qdty!};=oFfAWVrO7JIXD|!jjiA^B3f16@2Il<2gc9gFxXHyE@725&PuocWvz+8dU zauA>VlJr9%gjNZ?p=&M_4#vGW#;c$(JBeHf$Vq1{*kGS7>$60??7L_~H?ch{FnBg7 zV}x)sCL}|x1iv6+g5nCxX5w@b7+7V%4$?l^@jAxx1S&#h#@5MkRk$L%sbCJ#H@^a^ z58fv*o8;Y2jo^z*X#dPIfjU!R^Jx<=N@k+1WWppKFXh6B&Kd z?(S?=+QH*;mR%&Woz zX~W&yuK=WDyr7km*DOQ{8GeD5WTfQ9R;o1me@aVh@)_X|abjO=oZYxx5~Y#^AI$p% za3yQoTyhmX5HNm< zR+cho684O+yR*gIPQnN>UvSY1`%^)~vRzHUL1k|b`!rElB&r#bcEkojO#-b&$pKKX zDKnHQYN>ocTlBgsvuo1m=pjgZZDUbA)vRbE1hQmWVSq3_W7&b8V|+X5Y8u3vkk|oL zNIJ7zII9{~7wD_$lGNPVgxP_zYJS7jViUO?#TzRXvI;Ts1&YCIBU;EFG4efu&Icky z-rm6^j5ds-O6lu7J>023z0cCSgcQ_NeaY}s_r{%M8*ONM#2!uhj&^5odwEKCM;zfJM!%vv z*)i?_xBBao@tez4vp?)0?hVAK)i*+lt$Sn5b5OpMiPo~bpcpP;uwIT2ARo{OY73{sm)GjuN4ge3xXl5xo1 z)L2GbaLOEzEO(p|T6g*tJ7vvTgennb(iV4%AD$nS{fZW$8(8h9!W{in@G#ny=trYe zL5?$tQHl4C4vr3YDFJ;b)ktw@eU4u{cqg+(p#Bssf`@4gT5)m4Q^;!>BZ39KrOmRL zwC6Lf1n~+mAE9cd<2mZozwvMU^Phk5=-s=s#cVwv%`+C5J-99-%jhTFH&+f)+r_Yq z=hwQhL8}f!kk7P$Q7dswgn-dRSTS^_@&1|cxNJC*vzkYgN-EG$aVP6yp(uvp#6h^C zpAbq^>UYA;7_HO~Ps$b8$&$dY%A1qr;7*{4w(V3rHA)cErY#5(#DlX)Hwc`$=xh;d z<7;8DbFhx;BrXll;evRNr|db}-)122yv~~^p^gKJfaod}FPHOV5~P2Iu$ecD+}ms~ zJlk5MQG5C^gWplzIu5|J`ZoFSbeIkS0ZHsPhF3`&1tRESloNb1yyoG%;4Jrwwnuvy zg@d6>)Fj7S_-f?%*i6G;p;f@yi0I&9qz;;iqj*MHN&0Qh;%bfo?9f0+`qH)*N$A0- zi8xei+X%tAnvsm1v4N6yktedHo-I%e&`Ewu4$~w`j`)O($0tiye7bE1m4^u5P-WIP zywxF;(U@3Kr*<#kocpFp2kcR1IA#6Iwb+&7ITfM@*z;ey$Zbpu>Y9^(+7^4VUO|?L(GD^!)~jGzikhp z8Dsr~y6AV+9<=k`{#Ms$tl$0m0*=cB9^*mY3SGK7; zTQ0K@8}j$ilbVl?56~a@zef#MH5cR%#ns@Cf1u6ENQ>7 z18o>U(UEvxL)>Hv?)&$Tas9FA&K&ufWJAgF2-6ayM($z*L@6RYJh|HgiD$$nE-sDT zFcEr|E~bEr&cU=A#za}DjieP?W!_9GJZjjT^|eL$=ZS~n>J%11Ez=N{!ev;z9o#N# zZAc0=v}`5eI+ekK`r#|TJ4W5Hjfu;(+hJ#Wo5g+N_?_q>u9={95?`#B?&rzfEbePQ z3;n{geDasYJsyjG%Es^hrh~J_#6%S)=-5ZAQBiW>RoH|gD7r!)1bLKo-50LNp>-+m z%AN$N70Pp_s90wzzGvQ1{_k>yT+TPCMtdTevm`|FNI|nRdpJJNRn7>ZMoA&qj`m*g z-NdSwC}Q_`*|X{Qdecbpr?X!i7m78^BO@8RYc=dkx7*+N2wCH`L}@vSIm0NUcD?i^ zhQg+>_cg-G5$k&^)sh<4xqc-R6s1`QnPRDdqa#45@;x%sqA{DbOqvs;SirS<`+~8v zAhO5Y5T{9w3Gthz<4%WTGd7*_Uk}nYJRp~%%zO>{tl;i(C(d26hfSn>H;9jq(Z{tE zL5hR3GlMW^B%nzJO*^{HvymeyY7*ehMPLMTlZ-y$^f^CMc-L5{LrcWviJ8^oHO==_ zY`(b{#R8L`ik?&VD^7!o$hk`HMFBF7Qcj;-9G3nWV@| zPN&2{9e`Wz5`(JSS<+e_OLxplM1f#Sl{TA@tt^Z zFL=q4qDDdV*>DBGuqg=P8Jl0bSs|J53T0~^ zvn7g_GeA3RL^@{(&s+h<3R!Ivl^rCD+rw>^!%mI$Q=(jL&BAbTE82A_>V8%ATzQ07 zw#}5yRqBvAl2_`pL`gH^qc;Wz%5JBYYb5kE80qv4o#HEmtAcxk`pGbpcxWAV6IHX_ z7!Czndim~@Rd(fo)~Z<}g=E_s#atR#u%s(VrM;S+$p*}~!-2(4ssYJ$wJxk|37t;g zz=+**N_!T5ij7Rbq8!dYV%Zk~@P|!bCPGDD?(A*Toe)oH9C9caonB|TZ90<*?=R3g2;pI!Pf>0%oQmEz#}q1kM2JqOTl7tt64`gjJZqJPDd6t5c@9B z=3cy?Tutl5*2$^d;8PDjcls4{29FnqWX3S!Ao|2GN}xAwAG!p|=42kTQGFNR^22-F zcdnEdLY7fMY!gaMi}Bdqz9=3unV|E>oxm-Iwjxm{bdjH*y*fX?5EWF1Vy~e1d2;`V z-)V@18E9O3j%2QI0+IUF_0{pi<3D`!GX^`PG>SpHu!`|OT##kA;2BZh)`OTMZ$>qG zQ7Go>%pNh~B&T5<0HIp1RAqL@*B$c;?PagKS}ak;naMM=(cvvkxy*i5kOa0h>dO(F zQOstkH<&%z-j`Kr1*Q`AwowgRW|6Oh`^|(JB|`H?QaYM7+|mTslc=Vr$F65OLXIV7 zgc+Bbk11L4U#5u+MQcnFnar{fMo+^mX_KYcXCgQU`-#+7QmAOziqw(Fpp9OEqR5o| z`DagvLb-GsTJSgpWm!av1Q)l&FY^IUoPyVQE;Cc9gU4ga z!`p3ExaT>&T=k6Da`7q_zdR_1hGA1Z%rZRxGw~*$rm;esSinOe$^?UTj**KZMEPv- zY@o#U5Lg_Xb)%?&CG{%QM?s3`3~>g~M&R=WF^*6q&5#vyf<3F2MXeOv3aq{0wxk*A zDzm=Gp3okWJU;k$&WIlp0%h7In+XS-b`;1)@mnaAmFH4MB~k2h>Kw46K2CgOow$h zrkn+nmyD8j9Sd$?S7M+d27@W4q-|$LSna6zz|v?m+RsRzCY?|+sVzo;wyv+I7;dOT z=sU)XC44Z;wLA?=3)meo{fncIwanID$96c9R1-*-1xi^{X^W-lLRf7>IY$HAohi+c zSh1xe+>s`LU|?V4@nz%9{DDa?VUaF>_~!@xO>1|rT=ywTAahuBM%rke~U87_2MRTm}mdeC!R(0N7lWnt!;hdsE z3Iv~DY^qXPb|@w}S{!kVL1*huJXD8{AvBN;TO3GNX1Y#bEIljU`2x9F$~>9gW28>r zYPNDqZ>8w+Al3c( z)%exBiyxoA`|g)F*oOY@k3aqW*FXQ^yBFX5^!nSMU;gys?N7hFMk+kN99@l+MsVen zBQOv_CVl_-=<$Plzx~xmzy0##-+uM+uRnkCn=c-J^pKs94-vM%B(_A3|JfKaYC3(d zBeEfS$noJGLO$v3o<4r?$wv?V{I{R|#h?A^U;UT=0yxsY_OJfszwpm~_q*SH@#xXL zX{cvrKpb%ftcUeojISoBY?YhD3UbP>7q?DUasUUnl??(sXnD)JOBoUvh5yd)J4 zLg(dn+A7b|`sD9{`Bg}bu$Bgn~Yyz zG45dD;-c(}VJN^H7IB1wSftp^HYfYydWBUtM>@Eac{&CP7v4zV%)Z*;J^bTc8V%LH zTqHS&RpS+!%=0wkh3&QRP>9#Jx3?G2H=n}kbH=CUtsCW3RFg$X@a@yz*pueYIOXLH zk65;=UQ|-sR2`@U<7B5aJpW=+0NY73`Po?PPSsx`x}JZua}1)q9G1fNlXDl}V4 ztBp_yCCzQXYXvZ{8WEMk;^FBPFWsI27sX@HEp&%W0z5N2*knEoQHVV}(!C5Im&O_& zEZqY^kXthr63>-DLI?B9krSw+dT%ge7BR8u$04w_HQ<_Piu~m4ah4nGXk~=aiVo9i zAYCDm@fPPxzsG&m?%Z9flpdJ=IP7=9)}zd>oZ6b%9g+JAg2s`=Ca02Fho>x6Q;jW$An3j?C5I2D`YyGUq5NfWN#Y$gb-kXy1p z-9EEZ0{xoCjq)AK3Xj0S#&7pSHnG-Nl9J37cqn#J0io^KSexo9*zXRVi5I{b7@AiT z7Hb*rU?^k(bl;$cz0&eBoQ6Hw$=fVqbACWWQlqbQq}9S1twvw+SZ13uv|h85^Bhaq zyu3R9>8Iz{H#bx>sA-C~m@c>BQNVpm&3X^O0b-+StL-9y+5&5xNxQGF4-#k7V z+~1?h=jlnt`{Re#LQCDEJ_M7sn90MygiX_qZZ5E3q78>_U)d{N5j>F_h5R|qS0|Gn zUeC^^&Fckf!vZD3Bff^bmnDGzhW)nqD#Ctws9q-E=nhqacY6wNeS%-37Rh% z6$@KwTog&)5gUCbE^eF4!Bu9L$G zJf;d+AU*j^67gihHnU6<;s=pk&VuT-TDn$u;+QOLoEcL~Rnu6MRC$=5Sxv=5Ml7S@< z4ob4Bh@I@=L5$uKvq{BpZ0sj@k^`0PtioBb)5?0&5qXs^ld^<*E*g#2F{xl%KY11f zb#Q#R`{dz0W(yL2;_qwAl`RK_2?~6w8-;<80=G(xjO~6Jb}@{m7)UYf9F5iHTz|*L zCK41flIF{RTQzwHv$F~Iyy;$~7^qen%RO3t=!82tmzmaxaOJp8(x&VM_*9oe)k=1*h~R#CkNXSf1EJoCs86D`zPR-+a4Vr?|93%%sxOyUfk5?DZ`_ zrikI(+%Z*Kx0g4a%IDx@g64ur0;o;lyzG3{nx$P1!b=ir9R_V?%lcK_q6?lc((U2E zpjKc9G2`cwI>Z9Y><&5PU6ZG#I2vpi3U5sgEgp1vQujq zy0^F2?;Y$8a0cyeqwC6s#ZYXh%nqhY>_{zwQBam1(PsFLa!q|=*{7q$gQe#8Fv%3h z=f>bl%vJ0ZH?ukj&HL0dFK4)%^}qdKfii|>!@ z_D*jHnOU7vMV2LZK#MoBt)hSwMO4G!hIxo2uvm!TA$tD${O6Y^KR!Ppkr|oGzW({m z-+%p_wD;JF$aen|8P4FSrmrqFQV$OIpFVl`)n^}(=l-JyhxF{zi%T+Wl4kzR$r`{|G0{_p}v+Kbok-oJbC%Zt84>`q86w2-Xh-KrA&Vfr+aM;G7DkCg`_xG2Dz8I9GR4dP~uE zjoQgnO64JS5ltJDWg_~7B zY{4tGZK#$}*lR_iOgRe!XAl_d4o*@_gN5&83M;c{ZNkIHU6XPfub|^l7G{iVFc*iE z8re6ec#srs1Rgv#9p)N#tX=v9{={$-OfOY$wO>L^+)!L9rg64odUXjGM1e+(s}4qbgZcs6LOQ5k`L2Lco>DEn#aJDbTe^-#1_DJwWiP253(5r zXjC{TC}Aj6oC&LyS3;IKpPx8TJvX_uu<67G-;+rwUTdyam}-1FKZSP3Se}Y#S+`@S zducZ*x~lx^35aX3$LGdS#We%g^NA&$iwdlpR*NxLpiPtGncF0R4XPNpXGSr^^Xg^LWD7%cDSUG^V$uZ$*& z5yX7lt@&Bo738O)pUUYjR4$&JS?R7747DQ3^3!W~0#4KMIVrt1w5INdAKpXf2CEg& zTmrc(^pMKqW0C?nH^?15q@pAF`bJX~k=w*zo2?_}U^7E0DXG)eE@MorptXtmHkE9w zInL;BekA1^rdt#6!;k5 zso0MDmMJIrYe%_1u!9gzeD83(TbFHtnN^hM6Q$B5B%3^1%(R(T<3n~!6(+f)%PHhq z&ryY|xuo=tJ&1M;W)RUZ^%>c&X$w1Nxl5EHg0tF15zXkXX04{?a}D6N^Kr6e7)}d@ zT^6%=!Or_%CV|VJGKPus9MkahI2@5|GIf&EHh` za2wb~pNk;WGG-5tcByEdnx&Q@56q|S=Ek&PC`!#)MK#iq;^|g6NqGvEs(`&POp$9J z79*r*TGB7XTv-bBZ^O5xog$01H&+`Xj3P}liH0jpFP6DjfCT8}P&-^WM2rbHH}BrO zeD?E?IFo5Xy3GD?sPsKu0XmYZmJ;HE4l_Nv2gT+Rp$fuq!$37l;JR5;CqzAG^P5uSrGgR0)D6G#=;7l}kgpEn67Ipb^Sf`JUH|-k`R;msIihmv zQX3u06h4~52;vc)Jj%3|6DKDpi&}ph02jTn8H2vMyV6XpIuxYb&~|AQN)um*se&{o7V@GwF!c2!&8pWR;Vi$!|$o!q82~dE6MG)X)0GE7KsYU&($+_Ltx$ z4i#@2PbC#dSpvC7Eb+W;8JDDFC}a`k8h>(dzRuaSVe}Bgx}h3XfDCY9VIVnk`8%GW z&2#K!C{MJDvVmT@VyCjX21eTyx+FDjiGI67%YFmWyYOtdn%b9E%T@c z(#ahD!}G)$A45+Bvl1dyI`GTBoB!6o)DWv=Bk-Iin$f}o@{Cp>8G>5 zZ7P&XR&y0TeS^EGcp59ocOHJ0IIWrvvWkopv?04g^l8mlHs56RrQjNogdCIr3FHArc(LWAaZVylKA>GEMASFev-!%-V(t!>k*YWaqVgeM*In~7WaFC4V{ zmQ5ZTt%Mra7|v**BG)0bAqku$uzD=6&_xieX7lM%HhEvv$C_)KNJ5z`M$x%4*)w1< zDxF_mUtB?ZaQpuB6i?{+`K5qVVwPDqP^G)A{T(J=pdlT?=l6zvQk%mj2X7mB>-V;M z(DWc;!AG;Vjq#|rBkY*eU*^$1TV`2`P_Krw(xw69QIJy6TRA2{vdQ~~1E_9IpGIWg zaJ!$Boy<0zs(!)htomuJyzazBr#a28g`S#ISK{w*AmP%erFt(oNP`hE3}G7LQp_iT zW;3^NJe^sHX=e-%J5?lfyTyZsE7&9|2{3yi0S7P1D~hoHX2izikQ8e^HPep2l=5>C z*HVdf(Gl{K>nA|J0&Nt0A6(Tu5a{Tu6`sdfDU;ps> zPd~i+hi{($?H_;q>%ag0`xkEzDRIgJwgS%c(MJzI`RLJSPapm6tB?P=Uw!h={pQnO zfBNKCpRng1??=ZpZyPe&5sq`XF-}i@{`vXW-~IT^-^`KsW--i0_8R=r4ZvtAF_~|LkA?SO4-~{g?mz&wl;+ufP15$hC*}4u_b9)OKr@ zCj3~maEidjF*NX%Td*eb zX}n21)s;UvD1e4N?HUW3>`GcIxlySCM|mYVH)T%8;zk9GT=NKndB{28*p8YM`xpO; zOaT>3jtPRY07Y!#U$ohxo4Wf)aZS3}61W?}qWHbN>0=U#QV~Tb`ycCQ`Yi0 zwK9p6IGr5v0dbfA<=m`l*_*R6@WK(0WhshxfdKg+$RbI{D(psu^y9o}iLnUqb!DxD z#gf*?Wk5?g$Cqd(!j2SnyDV>^@l1bqs+~+ET5fay7(`P4dev1+1v9@9;j)zTaxelh zW}L!)LuW&yYvYcOptr{d7Gnf&X1kaV__076>14jrbJ!o$O(Mh_IYmOf7jo|mxu8Jf z+}%fWzLNrEd^xx>CYFdMvfY?WKCI_D%cs@MaS)(Sj3B{ge@N&U(@)b!y0(+j!VwNu zA4fN+fj1Z65Lwb>?zz0eH4I92G|gb4O5^isxa8@yN$?afT>|20sj}VE;Mxv-QFQxA zdpuJn=yd7yQvHq3**pDplkvi~J9}~2lEK9T#I}p5@;NA>Y*`XQyA@)UAbqNs$AEew z?Yg>Bo<=naQXXH%f_fn6zGlp<;pq%bk4fC5on;k^*O1N@R-HU)sF%Y}nI4rPnP;R& z7BCPy?Xx1T%wUztFkV?{@zTQscG$#nXhxE|WI3E#>DM?-V6pMu^;%4p9n&sI+~maN zd?Rf^KopMFquo2$JAg4nn)Mv|bYNeXw{^=o2f&}4<(^YgP`SZ5B}y_ckL!d(ig8AFG!!2hQR3rl8C#(mFtKoW7L^+R%rxd?hP+S#l}eBw`KzS;TG40uCCHzZt-S1`KCs=O zyS#h*7V{6j&7j`sVB7&W6gT8bH#ak5m-rC3;9`bjSu4bBvZSuqDOLjG+9qSfYjaT< z9f=W{+A;o;Mv=wA)4M6R*6M6XjXVYUnbw|Lgx|F@25+r};2QKOd@_6BLxx`r`pd%| z!mc@u-^z{6Le<(2ANYj!|nSx`0}Fq#RtGA+-+@wu8?wDa<0@`oQUuNLjI z8z@xP2@|6*ym<;^1SC+kG+rdfXsj7t7n(MiKk7{Y_%xaENE-EQ#Ks;@Xll+_QLf{*}%1TmKg4DqP%n+YF_TSECKmGFR_GThI)?pYNzTJnBoddg6@nX6Tdn?|* z!BFz{*~RGHyYo)B_owfE!L5C7fA8MW9tQ^o8>4q{wY80AR4jp)S2t)iDQ6PXR#|1a zU=S|JG?W3vVubN%=M=uwu3&3iygaVZ*t z>oCCQ1|~#8pb{*g89C0&Vq3#@^Oav5z$%}F{Sxi$LZVvCJ1H|CB?((IHR-f^f@X;F zf$BA0Y_-z3c!TV=JIu9`;`@7rMCRCN}ru1g<1d%w{844;EgT*X9m^zb@2(g_s zN`@Fa9a&77%`jWw*?;}=-ROGE#55mGS<5My@Mf5b$}lu8MJ4lKoJIeka>k<>RmqBv za)kTIai%McEWZkVVxkMfqTrs4DPO*MjA$wNnP`5to-E8tu`2hU|7zN2<2D4*lR@Z};eESIxhY>2PmX zA!?M5D%#uGIli|Ch$X1xUSGKa%e-balWZt!n9#4A_4Soub#ld#5JL+LXdsAz0y`kl zL9-+I8JiSW!vUj=G)s4EVZNFN2ir*^M*ojm62@2_B*A(noe+_t6%f8Ue9oct>XvQ2 zRtD*DLO-<7>zc^5g&o$yLxZ7**byu_Y)d$x8m5-rZRYbH*r22RAu9;>eR!#lpatx- z?M`S2blY?)y^f566pFS}v1l)fEA<*{+;%6=_MnSS9=rl%SFO|7RG=*Gkf>;$U)~SC(j`1yyd6GvpFX zIQ}Wwf*aXpZQ?k(83!@_(BpxZjAo0|>j{a#FbVzf+ZTWO@#XKo6A76nX`r-Ne z=Wov6oe|N?z+K)UMFJ2z*nRZq!B<~=^5y5B{Q6g){|o=p?>_tVBj_=qc6$8q{?Wk! z69@v{_0+2ifAKH?bCZG~cleV-<;D`hEEKSRtv~U|^fRTvE zGolLeGb8L`!Y{Be);Z}tQCm%}Dd9d2RJx0YU!x*o@VdUqN(|Q&-JUM#K-SC}4KJR_ z-qMk9Bk|229Oornb|7aF@*rFUn_cr96E^!G6v8}>nx*-=-O3v2TQrBFU+Riu%mCve zPRB`AZLZqbAlk%6PIbkX9)J&}mCb-cGQab3Y!P=U=z*Q}NfVqSk7-JV%Qhv~by{VN5x>hZ}dk+3rFb5G`LBK7q*m5|!V z3YXTY7)&Wjr2)ly8m+q|VaZ*qd+L~6sv1ba2PO0+hBJL;&{lXKU%;*RPg#x1 zK_2IM#$AkA*$4|jYBedt7D9C@pBH*UXu0{CkT+eUeB~MQ_`%3DOL(N~T$T$|o%koI zu3%~;uqJq%~% zC8hM$HCCPrP=@-v1mHu0eW9xjWJowbLMGGEDzF$kKaA03cM^?pczQzmWV%7>CmjmO zBAuk1=PTy&4-slQv=RzSUeY2*UVL=1E%|sInd^jbJq`no3>Y=OO2_wU$VSNzjZ{34 z!JKoq*sR%^mh^y);U+$drU=i7O}5kGq0fxmfYgP)Uovi}MUoPt%;N6? zn8As&xS=^;R5s2HT022c4NvSyz0T{&OUr$b>U~~1#kxn`*R03()Zt~nOuJ*xZPT4r z%UZLZ;7487=1ArO(-jRLlUZP^JsUIHM${;Y-rrqbz9%kOv3~0cr<=M;$IG)&C$X#r zGZlk$2sL?CdP4N5jJt3-ms#7qP5C`35<=w=jsqV0g0sL}CP`R&Kmp%$BvUe>r<~zMR%NBM~Gj{E8L{JtxWOV-RFKr&l*D zThpds{kmOSf7+sqVW&l-CR@RXneW5$Njn^_AzrJ;3`1cfg`?6?dx$|yz@(mxGzG5e zgghg!-|+~+i_t4_aKZX`j7?|2a>ZGti^%0?3k9FTNtrj|VfN~&3a5WN@8>)^!;XlJLb;Np;L^+k0OUz&i{!ol z=_Yqzx^!$e*1A{1J7^SG`*L3L?f{ zO!Wu8GW@gHWf{Y|6xSe4`Imq3)kjYbskypQ26SkP)}k?tMU2nTWZbY)JDDk+J6XwH z)or#J>xq;PraO>)Iyw4Uk^!kc(-jk|ZWNeNrOPU(M2MdQ@``IvUNwjCR}7F@B^ePk zDCe@rN?ps02|<60Qwft;Ku^4VKph2#E|0m52v#&GV~FI!a#xIClO%pwpn16`cRd>Z$mkWzJn?ZFhj7|ml_)C=-q%Z#Fx4~gqBOc|$g6BL{ZCi7oZcdE09&qu*8p7x6?JKF^D@RO9m%~ zgKhJ^^w9NYGJ#J<6S@monCS`3Cy30~mp3L_a0ubb=nspOg_%bqPTR2wR>=@(p7_)x zwR%)0urbMA*su#QInI>j&DCCN8Fj(gXeQ1@sbsNZAV~U)Wyl5mk9Bo z96%b~+|F)B@_L~7uRM8aaMk5q5HIgqCQgI|&%?@FABY@JX98pq(UNAKol)*$xTkwi z1I#~EAh9yM`8EDjj#Q?02zJc@gdQp(ge6_5EdgYLqF`Q9o%1pffsFL&OIX%wp1yiL z?GcOfK!s!Da8I)wu|VL74iC0zV&-x>JV+d>vB(zRQ(up@g}IKe+dJAt<*?2t9zI03 zv#Eqequ9t7){C-$Bp^K~+;%mG}-r zf+>v|UJNESrDqsKaO^l^VPG$c&o@|+^2EkrUuP_NcbUWLL4-NYM0{)9D8y;Voq@Ph zs31r)PX$;c^AI|dxvtTd*qLO0q0Ee0$c(_AwZoB;rz~q52PaLH#b-HA1MMl%F=hUO z$eIQ=mrAJ=%j`*J;uKzW>9~@pMqD-+nfR;{!tEWpRRycr_!Wyxt{(>O{FEkOBN}@Q zQVqZSYsGY{)+n#zo#iX2hotrX|Ii6l;W@nKl5 zy=^KcX*Lo#S}}&D%)ztJe6%vtJm4VS+89qXFDJpgLFSz7gdNSOcsAP^gCHSDq10?d zE{|7J;*^zhisjD2wovP3=D1d71UB+GNuiZ`4(Cp4FTzuRQU5eecrCb|fUA=-!245% zh?jcI5KHICAi`2787$G0vrXmag@WgG$h-g*6^p##>JwDgRM5XM!CV-3&d(Lh#oLk1 zm)Anm-fF3wDTPLsc2hnUR;@&|1^835pip&*Sp8Cvq^?MVCZAu3A+ddgiYrrjs9q9N z6N7xZ0xjqHHxj3AUf+uiNdDo~t z+CZQ^ev?*AqV~oKfLRrhxE|j}>gZwpVg5royo8$W;^ySydMc%~VEA(b7p;&AkKH#h zHJK|iX^7Y|nRon3V@1TYGnUU~p4V%O8l1m;w*u(`JC$TuJfb{jwqYYRs;ibQf*6Xe z0H)FN%iFlO^GZANH5zda(n2z0blJAA1 zQwJ16JYO57Te2m0GMXVTBIr+$7lg-F@=9)o?EaC`08>D$ztB?$Z;(XF0DF5ySJy$UcbF!y1Ipn zYJPpQ0I`FW50=l#1WpH7ConnDG^`Ow0%Tm$h)jO8<(%g(5KNR)k6^+ec47fNzh3-2gxnythrW#ds?1tI66sLpXAuefLG`i{tFdQI=gqCordq{s;7bZad`j40cU zkRW-^#>>DXS8=H%)&1C8E@#|i7t!QOUTmJxE< zYEk2fW|nG*p}QH4-@m^k*#}u^Cn%^}D8&ehRG$rYGwWvoyVlTEaeFDRt|Vh-msJX1{{#)F_d=m%zoW}H&(X-zM+)NLR_wGakb z5Xlm+PhM`G5>XzK!6?aS6G}HGmSqJ)<=8=A+$;KhUBV73;mMzfI7#0(3uj)1;l zv}SNYxk6)6;aEjDV|=T8c;wXvD8xY7Kimesgd{KGa4J3ue_em=C9Or4z$GO!7w-h>imYnrr})8Ng>XR7L78;ZdnM zg}iY((qXA6F&WV;$jldeRFr9nfV+s=vB z!sbGRL|4+NWf|hfzAaFugIR`Z(=%bT7>#S5F~PI?1gJ3(Q90ep`2p*qMj8?~L%Bqq z$xmI5WJ0ikILVsAu29hoHSA!BjLr8bBf%C#M~GAwM*jd6Axfs1qA7%8vX~p4O&^9e@Mr9uC!c-mQ!GV)}CbN>R8gePs5*PPdX-eg-v;%U6p}+`szEWRdsw?msuJNFGnZ(VX zB2rt=u!5KdSK&Mt0j#fD254xaDLoPi4T+^Z(NA0@YLz(Z{E~dh%cvr@b4(a-L*&f= z+{+dy85ZV3#7p3&p*5hK4aYg=Lj~!ntW~^}O)@N~A}f)qUmc@Y z#V1nOFFlqjrA4b3`+43ZwrnJIdcdXbXhK?L<>SRqj;f21Q%AZ7S3sMj53d+ibdW2p z;>!xKB|=+#^*ND4QZ`>H2Y*2HV?{JTyKKZSm#52!$O)mZjv+Soro1Y{jUUR&yid&7 zO0ivru*a8lMWt<}RNXgKcBd3KVcZoxQSuqBoB*3QcoyCh8HUDKG-M{4&AhNz34Eik z#wZpRBxAS|aFo)P5f(M)X<~f z{7@ld)>-i@<~l~e1_4*ur|-(JJ6DC?!D6fp;8ZP0tC=JH@%Yrk4d$M!YXx&%USjBh zJ&donVxyq4)afHtr&?mPO6A8^cvqG!PZ6JC%W%2Ov+;3d_DIu|k&>%~r(~v#Co>eY zY125BK41)27s_IsIY+mOfEK@CF638gFa0}w)r1&*jPdnl6T25CwLo>Wn#xq zX70peTcufXMmz__D6nFgvF@tVRz!IvJL`D#l{RkcBk}I&DFPS)J&tn~`R)DL)v8RH zoa3sTUkMw`wuf*HISD6QmU1(yv_k4_zgCMetA(sEetvWF@?vqbYMx%nZ=K{g^M#J2 zE=&;Hj!{gmNmCor4YFe6eMk-dCxp^fE#fj zRtt~!O*)4ifufw_M524oE-qIV9nv_z>Z3a{Wzt3p0Px1jcDdJ_d2wQBh`EnBbFJ2rh= zrE@l!5u;d7Z@f9895o+qY{o?x3?p4rGfJ!CH63;6^5XhLIjSe@S~*$}^@n~G2ED|M z^BI?zXB(R)tme>|_SKZikH;E^O{S7j<*JSCU8h#Vz;x!yYnkrg;vG_+2_BX ztn$oPnEmvYi1+-maG;jwHqBkqFWiC?X+pK_!GLap3|~Y8*?G$>n#|UoJ=`!D3!I@Q z{g77XkJg~D8XI$15aK37YrRO(khZfv(hPZ;si|7D*GRc>v@dBNlCwGPqM!@{1mpC? zCD?q-5P}Vml5dg++3*V45Z63~O+sAp=KN~VY&{(G4tuQ~>X3Yk^}DTBt>37#P;E8t z_O!pX(`@S3)oOq-f@rweqQ6)U33ouY#B@(=$83c_Mt|x!2L(DA{2`Vxnu-34&rHnB zhJ;(>PsD-d_OP<18_(@evficsXZEpr0v?0YEr`JN(uEmikTW|%mqRGku#g`b1oVAOAI zVB0neI@<33-VmP);fEBmuXwwdvl}vI%~bz9GH-^9n0?0V!t_J_FOg4=r_f&tJ;YN} z14wF2FC3|1YD^y;tnO@L%rRLM@Rtc9X{EmCjS>p4*?ph*2gh9F2zdekxj@=R-?yDh|Qdt${$?zC>QZpi%6CDsfy=;6W6 zy?Z21R4xZ4)ZZQMkmhVC6COj7g1a>(=`q;_A;tf=$Kopu?@!cFCjqP{`*u*PVHMEA z7Zx^y?vuKQvjWJ`vVon~Eu#DwG>>JZr6xLXE2 zrRH}Pe%lYvX7uiemSx5#-qGLnJq#d$vp4<41|y>#>q_i}FtXez11Z?PtI^{0YVzar zvu}QR|Bv6j`nzvm|MfR7|L;FO`(OU=@BZ%F=Kza-dUf&Q{q>uR@$2_jx6|dtXwifg zsO2=oXBXEaMw-JKc?aNUq8n%UGt(WOA~>X(!`Q=g!+6=<8PZ`fo2PeCK1E8Wb=BA{ zWsWbFpE~9e_9s{9!n3Ivb`?)<>Kqw`)dP5SycpYk<(xC|*p=K_kJYWB6eE_J;35hzjkJ_=v?KAx`#Idq(ioAY+a7 zO!N8{d?i`itlJwD>KEl^Z}>;J6z%2SYOIsDj3);;tqp4e65P?kB9zdnV$-y?pZm(R z>_=C)7MHQp-V{9x5xdIBBcFXxzBfR4ZmzCLPmma{OTDjnQrLVrI0jCy%N8De(@aMx zK+Imz<11`M1sRKQ&%MLylE+CK2e(pnpt}lLR-)blAYVEixO;eB!Pn^ceB&c^n@*SR zoeq*dlg`S!Fn#(RA;VWHO0HIm*&so}DOqxd`<^Seac&oJE$gu$PQGK6r!3T@84fYS zWzA@MJOv;o9 zMCgGe`mD@==ECqQ`de(x5h8iHjWkq6{O{s*JR1hCrK!xidQfbL9SsXZ8=JrexETSU z?(XaiyTXf&=sM)5yn26rbw&ppO~Q&|#A|pFNo*kkz$;U_^oA9_S6a?56g-ysDEpP)TbF4~KBz z?S;|ia&PMEY}M_vTFC=RE8~$vgyo4GkF~a@%vvlu9>fe*(4Ae1(~^)k=8Xg`cn42ca&i?(f8+Iv^MJm)vkg889i$=k zSX6@(#}P>}!{aBMPE)>OK>PtfAyljvhM;zYTv*u|NZxm8r_1&C&tH=`!%xjm65=@$ z7kY-X^K-4KOyKcTKvGLilJk(D2B=dWZVm4B23rJ`fPQb+x1bT^F6x@lArip89#2=m zg05~CXP2|{%f-bNZwPLdSG;dlqcOBEYg>f~Pe2LeQ;-hmr+;{Hb2i#sjMqqD9_7L) zg@!!n@Sx0s;Z-@Es~(S4QjXGL3f^}o!9n=hcGn{k(8_^#B^vEk?zt4IjbiR^8%LN1hC4+TlI8iE1#aiCIHOd~NLtW0Vferuc1 zYt@3Xrg3TRwE|A9OP9%vOI$!S3L6WwUltOZc&1LgC;AM}Hk&fb2a|*C#qBb{!MOW7 z0q*#g?h*4(p@_I78QE;~ocw!c1Q|VwJaLa79MD17lirmCwed@FKprsZJ|hC9(Wx&E zOFIUG&z|rc1Wp@blwjflb>(q*u{D|Mc1oII8aR``iotqsZwLc2cqJ(0m^=kuV4f@! zCYXbxgmN|{%xkks|Knx9inI^Y-9}NL4EDJYMmQ^+`MzNw9*&QQ%{5b-MH-1WC6t|6 zJ)8Dz(+`%`L)a5K(aIwtq06!~rE-O+(h#ROJ;cW`WJhKUNIV9zIdzv` z7ta`~?4V!uQuojj#v`Cd8(Xb8h>D>kH>?~6#lRfQX{=)CNeMc}vWOu`P7y(sNb$+` zoP#Mjea^4|;jOrN*G$^LMz@DD19_<3B`HV75jDfY%!wrcCs@onC_5_}qUC1%`BNAo z8yP;xLTKfS-i0m@Kn-h}!cLtAerJcNv`4+*DS%6>Lv718#4i$M4IZay?Fsh0$4@om z(5qD@3v z-h_J&Jt?-l2#QsX5t#xw#CxOFO8yMhylqKz%j86if@96YKV`10Sa&O{LXg1xp-|J<6<~+Eo-SUzyL$fi@`snFfBfJ^CL2>E(Heel zTjs*gv_Y?61jP{wp8>rDZ)cJXM2icGlI@HrUXcbexdcTTAG>{Dn*={Qi;bAbIW$J} z)Cd)ZfUN51DzFkC+Y@c%=C^;+bZ)%j9E;3tn3-Pj495$^z0xVt%<(Dtvq+N_ z?$~gQB~>S%8X@t6c~uJrCw?;(wSw*Vu2EUpF7azINaa^;XEVJyM^&eU)ul=>uVX&| zUnD4^qKU3@A*JR^-%%~cM2FACBF*q{*(d_R%F9Nzb{Q%jXn)2dUzR-ADS1FPm60Mh z4X&@!i!zLhkT>HX((c%Olw8bdSuhD*UrDvajDos58S`&KkW{F_>6YObN}ipiBP5qj zb-?~WDiW@kWLr`4DOLCj<3r z#fw~#QEkk9u=3PgfPvl5W0foVm2C~aRF&MZN+#ldYphdtr+D?eQf!NWN&AuudUv+; zsu;#|VkFmW*dd|q473<rvR#)mvo9A9izVA! zCvI$~(hx8Y5VBB~!!6m%D2IOyKX(PB>Nv%l#*5fhn9r0oAzXc?e&~imwdL4wBM6F7 zE!2Sggv*GPq0oy@DfX=7%V?W^yWQ0k%H-u-+Crtq->a$9tAo#NWbm?L5V3xIu=n)w zaYv5j)kxUV>yrztKbHg=fc;^Lt|}z`fzOEV;likV$jK`aj3lpg18$p6mDx4Hu%VDF zI4Eky7WqXHGc_g1A~C$N!Us|jM@nUBYB;u>M%mu(6CCvB-6f)VVeUzIK^3oB;bQ!S z!jdrw4g#ED-L~oh5u}`TYkX~)t72Qca=28p+$Y{ah=4#X*`Ut-WHJd2MfRL95Zmc^ zZXVx~+|uY#${kDPU?5ljaJYp)44RBUaAbV5bu^&z1&MxjamykFWybrn%hg)4F96=oroZ-Z}YL?=f^sq$zPPW}?`7PKXe3Mu&B!H}$s@WMN) zYk=Eu2J$7=1hi;`*I^fnK=7@OwOj?aOR)kgMt=U&56}Pj-OrqI|7gGOVMJgi+66>} z=A!`;23 z!EmqF+v3z(8*)wVznI|Mwn^xEi9P7-V)6cb?)U8d#p3jGc|Bf((7qY3-(Ajb*Y)$8 zg+ko8J4k1v)?r(C`Uu{Nt{kdXL=z39co0*HrotKf)QNUAWULI%g1(uoJq&0zq)4pY z!>Jvc7nAwUGl_8WF<%E#5qiPX^Q#F8TT48e6acCBNbz4(6SX~HIZM=JhhDlnWHe8f z3$zYqx)*Owm@do^A=xOf&81P9B7+~uQKvlCx3^?>WL7bL$9F9exU^$6#~PLC3E6yD zCD1a4@^loPm0lI;t}x15U5v5OFr_;u2S@<5G^KE9HS@hCw_;4jC>IrSC7{f``}@>8d?_J? z%%ITyoglo5A9n(iRssiTH54T;p}Mb)dMj6;qVg$uV0Tn?!c@bnz)~OT8Ox>ix*LYf z{J<`ntH7L=$SIq(qD2%&v^=c65gcbYhC3KXpoJm8xL`^ZC%Fdz7hO(g8JX3vcfn`g z*%ZRx^h0%8GaiP)r_fj|V22GL;VmjdDXsD8)+yk;i4;~SO9u=_TJrP7{3OJ#bEWGiLo%~)BiYbHo!(7F!t6>T@)S^FqtYY(P+Qdu z-*t?D*JYJ6j#HyQ%-<0?(^6&Rj{Ivncqd*K^=eZ_2D=g0QQe@ho|kOkAV!TO>qsNb zkud+lM{A^cVg|8aIJ=qUY8~z<5lcyF?uZ$Nnu-Ma=Hhz4*Lz4T535qU(Mdigu?z8; z?K-+Hrb~2V)*`-cZFS(1YcFKDLzmV$6Z>%_|yPTkroz_y;Q;OD9fQb((B`xw8{lvF|>L~|jK=I4rJ zrK&buwjpbsP`bOjgF83vVxe$ICPT&!9fp1b79!|i>W4XPxMfNk_REfdG`?aOW4?g@ z#%t)HYrZ(@81iH~DPnZ3$?RVgB1tNc=M%bt&f1lAl2O*gE)MKZInD=Nrf!T!?C%js z)fL0e-u|#|lKXy7V9+3}>5@_9x$^i{yc2{Q(!Ky=85g5lzG2#tiwM2@^5T}*K!$_! z%`eD<$@0CB@V|B<&gFRG(W2#`mB7X&JJ8Vif$KP*Cc1zqAX$2xK8Q|C52oCvX&1XQ z-5YTw98#Ksx`s)MOQ=H&CNB-wN%(QHqKLr6p_;br>je-*KRZE(z0};0LE6IB!@IAD zMdhsMTNXmlGDVSc!)qCF{1+l7#|LG@9M6X=(?%#*JQLYz%hF-O7a~{lS?2Yw$!g&{ zVtk^*P(s=Z`B;tto1{5AWZS`yQ|2TZ3wBoMgUnT6Rp{c4qf6QZT+0{eXGr0;Hb_<^3L;crZooGuf7`Ej|-I;_HQR?jk{e%rK zdQPyhp^z8oFN&2(Mc9b3DOk>^NP4>y#}M0WC#Xmhy;Zw5LFA+-8PAqYjQv4XF)HY< zQ8}IVNaaUxF!F!Jxk-Eu2-ZNh8qG-&Aqm4;RPy=PvZAl;%%pwk6I?Ge$m~ym679po z${gctUMok?Mjy7YUZ;5sRa2i%m{_vSQeOc9h0h|%K@*9_{^3w#eQDV_v7;f177U(e zGgIu{9VEW_DNuWFuYMYs>?fXi>p3DNw!ac#xuoRUPJmvN}&kfeR5YU4#ib*59wxMqf_=s1)X<7gH zk*g)7CO-Cb#Ar|ny2&*QJWj%_?3}4b?uy*@0lp(vp~}b-EJjG0(mHzRl5wdrg;ur| z-z)y%LKBNakE0UTmGXG8%qcqFf7ug-L$68$N!bFKiB6b1=CcYe$z+j>Y_h*7O#Zr= zvhG$?z8vWTf+&uCE)ANdVJDx#$RIXh0n&^b(=45d(GBq=7RfwpEwI@sUaK>*PTFC`&72%KU%e05KQkT*$SMCAuV zu2siao;Wk9E+;N^owP#mtPh5xfJn92_#_E&ZZPU0SztGJ;hAvzJh*qT+aIuyGtZr$ zUte5e`nh;X4ovK#U>2;iMJx_vj0q`iMCDiWiLPk!?BrF$Y~xyIgf>bR_EN~E9u!ba?dMDB zoLzf62)r6IRFPfNI5wo@yK-pUKK-4=ej?1E%7@JAU>W&%xm?c#F|0~FBatQ>>pyHS z*)T#G38n{rdx8@WD@hk1%wkT-#S^)UgyL8*T7+W|ugS(DCOGjmEaC=#>dXbcgo1Yc75#y1R}pR2=N^7r5TjP3gHaG!KA zbW+O3ghmxn)l$6M9TM%Lw9~%x$&z!aF=~UrFT9_>ee!e{?WK zhr0aavlT8~OA>JUikV{Nurir~K7mf;`Hpzx8Qwuy?u zyg32%H7wyo8jLlEVpmjp?30&-Ysw3)=@_56Cme(&aRO>o8c#uBgYp&`Ke+a24W}f< zj_-y}4Nj1mEfG+PwN!Xr3q6${E~(Ncr^qcgjYZy~EO@aMGl?DGQnMjviSLlMV1n#AH!igy$5I7*EhV3XfTfZzFbCJw5k%!?44pudoJB;>gWA4jcC)D`MEZ3 z*<_*=v@L|tvG(RkV=ZFIsF`#L01Ed^Ho$~_(8>)fXQ55x$}x*@0ELifWAe5`C zTlmz>{s>q}IxR{$mLaZ#N;7OV_b~}|TidPXZnp&|$QBn|3Q{-*TE1GM@h8<y5o9#O`o)sRGPk?ayMM4%Cx+Ty7Hlpi zXz$Xi1CSqGj~F;X4-8<(TYwMM+I)I)gD?#OkjLcV$D=9tLVE>C)!*u2QgNWDD8OY~ znTi6X?=)dpeGRl>PEg$%@~fyQikC+lZZY7bGs1{V>v7|U4|WF%mZ8GMIJ>_$*xx1O zPEHygtk;5n8dAF+r{Jeq8>2VeQr;7`vBQarEz$RmYq=91R)}xpe{}1SSgYt&0^>}l zvQ;tg!Od|bZA>UAju0^fbvu-BYRB8sSrnN!#$%2L1Eqi-c~cCgrbmGsbX1yr2ZV_Q zdrtjGHMf?X3>Ea}q$)$Nry}T6f)s_>)*K_;mrfWnLqf@tgHJ(`&gI90C^)w++Yk^N zK8-N#Q$IsCcKTSHSt5r$Y<$R)GOi6Av)sjzCcCXx$wtl0K91~0M2IBAwdf2Pyi3bk zn&}rC%Fi01C^^p(pj{D45|11;g+6JTmyI=dRW&WeBj8)Yz=y!<60uL_%XMFbCS{FDS(-QR;nrb?Dw981Bq4>~N2nTrE zoRmn5$`};qpI5ZPs1&B1nxm{V6=x@}(xn{&ki_`M_o?kL8)N~pJG}Y$;W1}njq59Y zUTG&Y49q7b;HZ^z%7o*}HLy{@vx76`2R1W>SBUssCFPj@nZpE*vKu)zduw!5cXvTQ zb|6iXc2mkKH&9ZHWkZecwcoms94vWGHC_mnoc7qc+waV>zKK)YQ;*d`N#4F!5Z6pw z2B(EEHO4b7sa>I2^fVDDb7CWN?r3I6ZEJcd8nX*;aDWG~T zUK%>52hPJQt;w{KshpN#eox>SVH<4B-0#^ihsM-j7bMKqT+W6LnDIH6Q;e_rDaX?f zdC5x1n}1w9tE`9B2ly;KOWBlVWKDd-RdTn~v$f{5a1|I*;UhwiWfO@$t2QlF^t=i< zUb7;2PJgW$z!g&E8OZ?*u85v7<@hd@acxzm;_^Sgf;x2ZZ5R)Gln-HVu9M#PAxHdD)+`I}LF2W%J{ zV#a#8DO6H_XB!B~qX$Pk5~?qDzvS00lL57&Rx$N32S!+rxm@UvL4Rpzc#yiRA&D^M z_J}z2BkC~sX(KpBGOnd*0K5!a<`)!7#o7i7e8RKc9<`osukDN%O$JV+?P%Ff9NHYb zw*%?V;nCrc-nbAchNO|VCl?o^(Iu#5rGX2kBSv=Byh+D`qSr=d6}||5oC&|=Cd$;x zXQsh)>-5+lm{R9?YHEfH+WMxTJgZnSar!W?y4CibfI`}3_>$6=@i1>r5Phe?qJL=l zspgS%gG@^3>G&awX_I?dzDG8SK%0CMxlLv#wRg7JI5{3&@WTY;73XBE-;d$zX~s zl}vf^x>(gg1B3?w>knG!rcCL*@demK*!$u6n>VKytiHh#;)o33fQta~4>T!q3%n5s zl0wYY+jL0m?O!~2gng&w{ttADvlJ`0v(3;Pl4PhWn^eEm#e=xNv%5bW?rjb4@9jK3 zJa~L`@c3Z=>CwT%gS`hNMBkCMXumr^oWt~SJ=t8#($qkzoo?#W6=P7kS)`7p%@RB> zeN8|xL@cCP!5f<_1$G`RyVfv|j`kani8x$Wc%QE1yvPF$=h6~_PXpZ6C4(c7XArKe z9O^b2x$F<&r78F?y5NGG zMm?r?n=edSavZaA(mD<+&aF@gZ|YJDf&VNW4@H%bpRQs5H%qkWrHzmYas(YJm(7#X z3IVvq9?i}2(JfOUo;V6)uLa9$c7^W!A<7Jl~<6^V@Hd~RJ@Q9TP&|(z~sgL zWPr*%;H9w3R+#d#*2F-cDLu2+#E;QMW$FrfA5Cm;*gx3YVP1Ro=9KIMX^2wV0M!>?e#6 zj&$ZqujwMZE0_n}ukzyZE(ZA@DTSkZ^y~%sQ4+pjVuAW+JaP<9gSApAs8m{zn-05v8K>*nc2B1(le8$LAT=a54|Rc z$O0}3$+70WrdY;Zs~~zF+}oFrZaCl^q$wJC^Z%0dT}`ee*?A}r*Ff9beeKN7?$U`5 z`>OvRA%zq{y(mbEIFLD_k z8LKL7*Xh!1^dDq0>B7o{#j)#KvzDR!IR*WLkRZf}RTXI3OgM#K9a_79L?Ts#E=tUS z;^5;fr*(0G*-c`oCQr_7LXICD5e^+BkDNFd-R#m$A)FnLV2#7zHP0J_-hz!w9yLdU zTK_UNt$_}<4?1(4So|`ZBhiCUT|=d@hs_0bMRX5SfHjCU!ygFO8jh5bQ(!3}Kt^^a z9y39Nt=~A;y1p}Mdf(C*KYeXTbf&K<+QtR}WC1(H7h-=} z`XWM9ZL6e`^ho#aZ5S$cvf>=`_G^V=qbf=ww-LIL2lJ?a2uDad7^GqPL-WyC*Fj0%ls-^;w^sWXa85Cn; z3k)tRFy=Ng39EUzaR(-4C`hHrs9NU{Gkr!(N4lj|RUD<-m>!5GA^t<98j?5Y37&F# z3j)$q0}$z6GO8x-8$%kBnC*5l<7uT%ipSYo;!tMqTR!i(`AU1O+0uzY)8;(O(_W!N zgq@ICJ=c?zJXKYlMEA&T{4%|lx1`~x#9=85m~JRV5d}#aLgtfu{aJyEoE?#yIds!N zpPnaH=^!HLt95nHxpwT>wCSF%I!qpEx}LOSSW`eMS^jWHyk9a1Myi$+eP-N?kt{E_ zlse5_*kwyGpYepu5iSnrcFcT467hy9r*GVw$ z@Srs}8Sq?z95SKZI~MsRhjgL=_D&YLGtkDWuBc&ZkNeSdm9ogWXGXtt(sDV73>T8* z!F`VxvsbtRg+M%}pZqp2ySkAR?xlwLxIkqgr$JL8veh!5S-pK9MJX3lgaljqATf#K7A$qk5CW}HW51V~X|0|%i%kwvvXdHRqhp6=aFd#q#V}c0f2Jw3c zB!J}vwoW9=ME*Basj$0H6p$hYasdVtU^~%mQ=l-572RaeFrQ#6 z>W^rb=OqJ$jVq*D0#1Uwgf);}-)*bl6M&!ze8!kUo!~rXOKFOB$DUJ@?1t%nyk0V2 z(m}8V8B?4f3<5kT9r0iqk^79q8Flsk{S7j_nC=~SCN1c|;I$40DHx0(<{;+caj`_x zqY{+)x`K*$*!LXvn#1St)s9A>{CFT_b){ScR4k>yk`U+BB~+y`#4U5?I#`mU+-gHp zF^E7k;9eOM2cPA@C|9Hy%v_uZT(B(o853mdgQ4F?(TL!QHf5To(}JITha6L|&cM%- z=hVY7F;Ad@i5n4BA;5cK;G_b70(jgkX=qIxIY>4Z4MYz*EdXV_deT!^=5S~O(ST;n z>_h6Qr_n401c3pq&S9e0L^a3=C z>)oN1Brlki^SCMPng_Z5b2xTLpX!7-T#=0xm1o6CW6WoVgSM=N@q6eHkB)alO^TbF zTSexM5!wn-CV%|-BZ6}oxr6e__!2_1#dqGfoY0|q{q_U$fRmO9XaYdqGKKG1+*AMQ zt;d4m3UG?4xP$<&z{P~+?uoObIaO>ysAHuLVlNe2OS2P~HE9DTV^#RJ zMv7Ky6^wi<%LU~jWRK94SR8iyXw#~kSjex$?#k> zrhwIZ);VKfJ50zU7$TbH;bFyAI^g;oNe^TXqL@yV!ab<{YBRer z6JL)VR5C5oGE@NhQYgbL>Oo|Ja$VGBRU4Q98_@<5a}EiuOeT?jBZVqjQ2?ln&wWXb#&Ha37P`pqU&Uf`wJM zMRQ}(&#lm{Qi~p!n_8|uLAt1mDT-MUPIC33N8rb7M^BBn&IL}n_wJSBVz^At0^jw$gjGZO;GnFpPm6O z1jfv>lgs%O^A!>@yu$uD|9}*Jbuqs@=idn-!_9~*ON~;BWil%RK;Lk7%U-r`=zrXz z^r|@}=$kQPvK@DRshF9kFRri7Ya<=St7gOwS5q^^6ag1t7muwoxK)bRV7ZFqB{-0b zYBt3f(=*uo7Qv;&@_YjtJBm$&zH>3?d$TW7l!@21VM_ygRXGnUy=oiH6F{Dv^7^a{)`bwyfrQ=wshx2tP``hQsPN$rYTRB zhcmmVHY3=RMalN7l()qOKxclz7oTU%-z7|h;x60q|3hBjXMcA+3gewfs6w~&peR)G z)Kmudd0&Tp8H?Z|8S}!{k02js1Ju{hIw_-#Z-X8G*@asw{Q&|`P`5vWM(4@5{A z{$00&$iK+^;)riQKbteTLw7L4E}rFA!a;h!O)*B#l0B}qv)$Y0?6Kf@I%BSEo^w1J z3J+G7H`iC+fBzP+w8w7`jHNHLhsWiouXMLyC_Pv#StIZ)imNkdRl!v@BE zKxTyM{fJCv56e;=6ecJncZDFhqH(H71K)!_Nd%I*0=ZzES2LfKpcw`^@}OQNRaCf- z_hQaU<5fKm42QIF^ew6JAh|+F+$p0RJ`4IhJL3??44UJ;YRYERT}%Ahcc1Q_KHWXw z+OrvycP2!J4d(jl3`=?|(`Q)|^?>ssiULW;M9bU5-TfWlSbz8ZZ?4bg`H>3qcYpK4 zo4@}plos@X+4be+57*O+DTXNmu`a*6IemL|AgLtd*_ug1wI0Iz*vy|JXrkyeCkrB|NOYB1>$xYH-U0$5cVdVPq?VeFH%9tRI zr}_Emq?Ni{3+V=x3io#(pkdvg{lFO~9PUAS0fiUY^Ow+M{7N}6#R4A{_{OP;{PgO$ zQ4ltrcIC92tOt#5{Ny#xe!jLNw#70n()_`qr(h+s-5&!ooi#7hymC}uqc}xw-D_A4+@?}03>)`0sAT3& zC<(jk%<^TeHike$B8AFCiv$#Z(M?JxVw9) zd5Fy5#)?&rt+mvuvpK1EaSh4~qz~p-CIVlq{`~2#JyNk0bp(NQJSWr=8%ydTha+r8 z=W{4jr%-LsnKAU7OV@sDqw`>v-78n7D8mZ017;qmic?rbzD&8g z3!3Rgkzo!d`_`&b0f4zIl9)zf_M%b%6XR;J&@RX!-bo)Rz24P2a}eENS|IF^IIoy;dh^o&X|lhjH%$Aw$zu|`495ifOzh88>uHzxu4 zka19(jYCKFGPXig>#^(_7)`qF4$ywO_3H@(^Z*AzrCUSCX}wtgDq>=QvgtJOcf>Xb ztf+-c4D_h~4G+=mthhy@s0gm9d&w=Z+(BW3mypoILGNl*FeZ&bR{!am8dX>Ums=Qs zV56YdVY6}e)trA#g&B{MPh+$`f!5t%q2MTs*>Zqe6MvbQX#mO)P|ZmzH5%9P>t(Gk&y9LR6l1p-^# z>=>9v=um{M3~|6Y)(TN=P*)rfZYO}rEUoNu#@EM@2w1|^Fb0xdJ()}}u_$!Vg!VKK z$-z?3k#Y`$J}<}_R8=tUC{lXh{8kPpwvW+^P$h^s_Hn(XD8Hvx`CQ?5$f&?1ak<)#%uE>asMIIwkQre%XBR(boCIdbPoJkaZA zW@~2g3|&doDh?3S+QfIj`Hrc!11=ol9ZX=8EU~6?ODszXOylRqoA6X$sDCbZOeGUT zQ1Gj79bPAzT<~MUiP-Yu&!m=k$47jQtw+*f;xB2FhkP7=^2 z?b}LXYnN?C;Su`dJriQZ*F>_+2teqK(N<{_fG9*E#Y+rw;XjqoWemxfUBbYJqJp`Z z@ROg8uQ84)YH)f*Zy}8eE$C%}HT5qV&NhO?mCFzRq+6xb_=$YV_O&e9pit31U#Gj8 z)ezBQZL?BJ6XtHE{qUm6LKuTn!YSs)O8i7NVy2$v#J4KE&M`klG%I$otrMk@K~=|u z36kJdOGS~>kMlevA$&7UDQ^h1TbbH%|1(6JAY!X$>QGs}0`tyB$>wC?E37S4m=L54 z?OSHJz^;9y{eTjZsp~aM<5GElgc+f>DGEs}*VcI$a#B|*P6X%Rpt-<^Zy!*e18)x+ z$SEFj&LxG3NNthFLvgMAX^PR~seC)!_QTuj?{46W8@_&hiE@#fVZHtG?ctX%U%%cx zU95Mkw*V?O@zd{{F3iH4HJ>s!u)qo!UVbuT}A)Sf@pZSsY zFI@BRump43-TmWcx&Hl|H{ZRwu5wv4^7`t{CA_Ribv{DIx_57L+@ak+-`znAx%uJE z{PiUZR5r6$5VcP0;RLQHDhEng?+E<^>hsY5{O$f9{^L)#n@tCp07M!r`gYmi%#6ua zWVUFWd=ua%rp|ykq@aUpSSddmhZ2lg7_-*)@sp5otTY{|oIgdJC1t&c(0sePN>A`BTh4~qb8=r3<@JP>W znVd{;qB`-PLqaajs8oOa{B0}dJLRg&zI%7`{fF0>l#pp)$vD0Z9l3$QEzBO70LT`x zl%SAOP2vtmzjiM&n~Y;F zrY2%vXoyT86p~0vWY4i9fGRUL#|eiRc0QuxflLut0MRW)fa-*vH75a!ksaueY?Pv^ zFM?_>KqQ&QW~Zz`Lyq6ijT2EJTPkL`sZ?$5K8O&y5}mo!k`9&1IF7z20Z@@c7c3RX zN~s%CD;Jjf0Dextg^t1+T!>;xNsn zToVR```q6??3deDqw&qKhQ)VSDCR{B(Ch%*7~w%K-yI8XGZ54qbR=dhfD9l*fWg_l zmTVf1H5GtOj0v`Dj=rc}25xUa6~AoucboliG`fBb1Jt;4`jqX?9ov@(_QZMG7-F~%lMM1#V!^_?kSpIgP#?1q9sgKVAMTb1-moWC+%woiT9VzUMVPBc zplK|c;(6%^DAQcGSP-~EYXVy|n}Xl%bV^{5I&0VV0DKbl=9=I2u&30@?+ofX)IUi} z_OgRWEpwMsy2c&@2L|DhoG^zyZ6C~!CN?nwj@GTv|lBo=sGSU7dvP92!dkw;FLnzl&JCpb;)pZsG<`ylA%nsQ6M z8Y#mHwngSxRX&jnKP9cnvTQcRlq}TalM@b43V10fzg?Z>~I(l_FzC4{=fG>a2 zT+HDa9Fm^AuE@2-%m8Jrs9virAvD!mTi1~T$hM-rY$(piXhpDhk_cME#NQ#`EL$Kk z?C_3Zzt?6Gspv@!v48fKn+SGGlO#9Ns!5=kvbf-N=Vajw{00J`nbCd6oRTo?DGln* z8HR`AEdvp9t;t$gHCi|EU^?EnTfB&2!+l7>+gjtr5Yc?3+^Ev)Y?v=YMhV^*AGt&g z+|%$*Qe-ZLR6hrCS@lk2 zX(bcQU_1-H+p}$?bV&2&a5)i7K$lAmQ7C|=6CP0n=Du^v@JX7 zDe(>=^-R1^;3P`Mm{cZ-Kk-mJno5KBO?8rZUYzC1UwMIdTn{dsnW+-TakCWw}||IFXvJ4o8V_xNkd zpdV?EVhx*o%*Wk%lKS1pbHaUM@k|qt9-8i>1HoXYpZuBnq0djCB)>&6`h*rq6i!A` zNUX_i0}AwkF|aO$8b%H*_k~o(EHwvCl)b=fPQnz0vUxU0`NDKV{#AC}E4rJ~ULOQg z>j@@$Z%9>UvNlF}pcg^tY>7-MTmr~3l&~3xKQypgR$WTfPMF#WV`3kE6myY(ffQ1l z>vBe1165&y&y?7X8G>YKhwXt?q$KF25bXRFb|0ad&AXxXn~6g0-p3D|sgBe+Q5Z8m zc*jXDaicd^mw)}c4*+7^eY-o#IP~X_pZ@gAX9(zsB4Me`7#^YkJ&uAI)Owvc#%+5t zR4RefQeQc!W_sQkXgxV@Hd)pFq4*QH={I(c%=0DEI{mb3fOyy(JfX z20fwaPtRs}dC5IoTTMob^Cnp1=O+)(tDk@Uyo8}@v4Z;dOcW0!TLzBxN>tqO8I-ip zG!SQTEj)w|M13FNOA_iK7g<1l_qc!t>p}S!nYy&4A*|g5ok}C~n7$-$QW{GB;SIG>%A#058Fd8_-)3Nkxv zJeQkpt4ibn9l$j1%zFw6U@)J z-8OYInKI;pNCezrM8nip@IV_qHE-|{G}jIWaOWcai}nt3aS+Y`ljQ|-8rOEntJ?5!Ufz3t{BUR&iR|az@W=SYVP!Y8{aTQP~ki728 z4Qd{(Z<00TKdPMJ+7Sd^hFmn$+qq6GjQOxxVEn6a?qngbaE1DKUen-)vk>?&pN-3k z8YZ|)Y>>jf)(zw9Wp-2gmBJib$B-jc3xURnW=_HCc@_4TYl2d^;-D?;KoW?F)G9d6 z$2Edvh7|J6sKTb1Gsrn!*yVbmKNutZH{ZQ&8LqgeT4h*JB#1Q9Gur91mGax;(ciy& zjd3rpGh>&)5sT-3eOP?CU!cy=`D@ji0%Yl6Hpe19j8yF?v=7MX%#3LVEiMJhDYYld zv|i(J&#N`6#yMn0g#znQmrz=CQUOId2z{Ffqu<6-Q`iziitEf1cM$&+XE( zywGvuY_HxT5MM@nU)LkT$!;v;_X{bF*do-LHIMt4prBx97V%SAZk2UJoT`~kjCi0m z=Un7*NDqPpW7pI1HF!xXsI`=u83JJ(mbPB4?}Wl;2@oSH+2ZPoZgP)Y2^CaFu@jXD z(s7JLifk%IHiLo^H(mdEyZ;J~7~nMLvkK#m{KQ*lg%+Mjql!&0(pXusqgXlsU>OSp zi7%-d(E#+c+1-JbxLYq!UW;Q$zkp%V9tZ{>Dj8NLGH=|FHfNdHgGg-l8PQ{-ivxNC9|j%@ z#3G=(Fl#z`8cqeQHGM&Nff+3j*u}I7N@@gO!pWRA0{KNsR1Z)jr&DO7G_&Ak(AD=| zI5Hq)>7{TV@cJ$@O~0d1$RY2v6_v>E@x|IxE6-jlLz+0dShorhmVN zB2x{{#AZde^Ps|xHX)>FWyU_sBE4Sp^HtD5Fr(7UskxEO&P_RROCw2foC8n2ky^Rt z|GFW5cglQYjVCm`lm?x-=MJPNL$tTj9WXZ;HFsK!YMEl2noz8aP^nr-BE_*Ocdrz7 z$jLkTANUt2@I9u`M2?|xPFo>~tQ#tU)lmdVK|-QyiUh;uio5IfBj>ll%A%%?VHHQ^=TUz?whNE-$q2uJvXsR$%QFb^TzjAYd(4L;!$ z61kG{pTD{~x2xZIE=?oU9fBy#&M3@%t6Wq@Mp}$O6^j8qb5yyF4rmX2?|B5WlhEpa znOeK7oqQpZ2g@RZ=Q9qXRUeY=u+)mYhcVO%+p(>f#qb9|dgZ46-cg$bLZ03_`@%c=I9KQ*GL3`o(**uufg zrZ;>#`?%pMK1Vl6E_dJ41SVEUf=}KACAx>;Gf@k7CE#WW_aslg@8oMk;`|h7=5d;= zU9NeHZSiHJFWNK>+EN&r&x{%FY*9+ppZJCXDUy4X4U%2tgV5RD+ztF3kAi`@B~zw< ztKU93^muobMBVN3$2d6mq6B9%e|Ee{=G*3~%w&5~sJb{u_129T#~MZWdqsjg#h;=z zP@tPKW?NTYD$buR!w}lOQuZHb=To8+E-JmiK{!%I!)0%yr{2F(TCPH3lhZ=u`A7m* zTjCc#rB>*yaEayaz`O)u0?{R%2$m@xD`xf}cPXU(HFL!6@Ms)yte;yGHhRj$xyk8m zN1+mk=f1nS{N4NOp@NxUh6lmQpMLt~C8)hL_xSP@qVw=8aKhxVEL!Ar8 z==M>Ev4vewa2}QI<~&gNr;(i}UUSJ?uEGDwJGs*aZT5kxt-1zA6msj&DV>3~^>*)?f=ZCzGKIvMO#x+2@K&UlaB=UcO zQ2duK_q#ngcbP|aJl=_{BpWE_8WbL8KiQTgN9gKl%h`k&oZYaf{`UQcH|J-EU? z;g#)b@p${Sf;0K`1wo~U&C|!vkGGG6Cv0g*!)gdu8Wfc7nsKI=7m*J4F4vvWYi(JJ_qSUEgH+bN>Fgn`eFUunj2Y<|R+YA);KKU4G& zxgm^ivT4zTK~DVC@ovl(jD#!@cBcw=Rc-W+J6;i8vae)_zdD~Gl(Nv{afED=(g&Oj z-lPX%BEn`Z*U3x-lV5FctAmjXXm&U+A%*p*1GXx~<6z$E6%!=h7D}^KLAHn&7~Vo7 zJuk^xg71;Oy={c4L7khQ1;uvSS@ccVf(6Mxj>v>S8z|lZV;n^?J%W9)#ukYXO}VT3 zqsp%e=dVuL7Sb&_k7uPIFQk6kiC=ci32zl$Hu&4%OmzD zC98!HjacJWsw8Dj;;mQ`2LSde63LH5Cjv88E2<#awyKPXnp!6r_O0DD4SjfonI3^>R54_3hpjT5jja{Z>lb=P(3(+stBJS@jJmB+MJd;4W zt{YTJO;#wD2Z7Zjmg+NUh(t)$687LR!etEDA2WKFA(PO@F*8o|IxU_0WsT5&>W(r` zmw@P^tH4ZiJTl!r%CTP2*n!~*lDh%Bt4#*Q#Rb&!8oY$)S8(8WaF zjf@g4dHp%58huu)(-P&vzLDYnbP2Q}xreC&IB;T&roE^5D=D2n(HBqB=c(TIrXbkK%e|EH3S%!pEW9HvXL9A>>iN~21 zM~U%+Du%G&H7r&QM6lo6Xh3U`<|~e`*14_r%)qvHvMn*j4jR;UFQf=_%v0Rv+zVk+ z>YZRU$~~pE4fUoqHH&UAJUTK;(IUxuGn(F3E!MRZNi6hSDEZt#HfobaS>x9Zor;fW zvMn52Cy2qGHdnJ8i~guYr9t1sr$ zH&>_RAv&EFudgpT<3*H*xtq**347S|WYYDtwnUe#CJS`cXiG)|+52aP2z)C042OYL zFBB`K7SbeWu_I)~!ex7zw3Q)JcM0*>mC?OShQxpNx(r69ELABe)=Oc=DOTu@QZT%H z;vd8=Q%#h4h!{6v6*hZ@Ns_7q1ihhkgj}^^No^+PQPWj{NY4ngLfgTC?#>i2q!b64 z3-{ONX#b`Xo3l}%|WxGBX5`Aqzh*s1LxPN}$G21DUR z{}YF3My|X>v0)Y-of@&BK2s&)f4(-cdZd6xT#-)p(_I*&!Ck6k53&N2h)|OU`{kz= zB;U#xx;WvXih&BUi`7@1n9A(iy5|2A&V@S(=8*6+UC%APg07AJG@X&6z1$+fd5=yT zO>n8?DbOh*hP*}XE#=Hg*?e4Lo3295#Mrl#%PgUFWMstl!t?*aBxRw~4@|FPgO@&1 znf&HB$bYFX`EbH~8OxJWZn=Z`iJoVyj#7Gx*dIUML7J%tS;ciC`Sch+FyWHC@B8Q4 zLTJ5)4di=jsue{w9ps2$+Gbns<#zMfbTqr*vy}ev9Q#S+?N?@KWfNeD9iz*Mp0~0X zqfLUa~uY+K`1m0yXzEJYJ=)t}E!kQnaQ zPv20Np3m9j>YlP3(q)3qiwNoSQ*tg)Zi8r;^}l|;eR^J-!x`tH0H{(pLhqjzoG`p$ zFSzU@N;JWL@|VQ+DVIbahE&2}It@acLtcV~;*4}e2-s; z1V|Qrh^!4VE|kjY2`eHNPok_#_SO4GD1J}^wxvP_)S7{c8}$PX0&XFM-q4|1Fc`U$ z_Z5kd(cW**&wq1$jhwp(NnkAbd~z}_w~NQaenZ*k)%!jx5v%%=GYFL-a*m-`ashFV}vQ~{@`zQ+vJRWgG4&u2dW5$ij*Kqs1_;UA%UGzhW zx{3p;S?waB;K6b}KRG*}fBpuVk*A|rPH?M~P?iC1EjC8J+ctzF_+XcoBgM|ZV1M__ zpk+XRCaUalWq|nQg=a-b&w)faq6O_Bl!l<>-%@Ka1ipWN^XB>zFum?bGa?@6jH`kt z^+M*?Bk7%(^RRD{b=HU!aeH?QS-Wt+K{p)lvM=MYn1?qauCkm=2~0_;3XwYu#4}*p zA8EVnHU{<-##u*%puvwOus2@_=RKXJ96sn#lqSu^iSK*`U=^9?NJ1d66*8BgCh7O2 zD#&$&bV44%LPv7J65D1Zpvg^=Ag`zMyQ|FN4#x~mLi4_7UbFcW&$qV-XX6PrZ5SyK zpigyeh5ZGsf$0dcAf?C~cYpuv6g()6Uz;m}g564oMMw_ZF~DtS7Z?eWWSc{mJ5eSe zEcq}21Dl5Pxm@yYyt#dLs4<%ouxF&I8M0{(X!zvlHssK<6-*2%dt8HYkqzRiB!ec^ zCuLo-#kOaKaM4#<_s*+)O)W;sia;FbJ&O72Y5h@y#-#iG4Cd;lBBJ)tnybz=Lns+k zDmENd6=S+R?i7wtSs0MZxzF8>(nL@Og_Cg3lu++@>H$6#G|GH%-@e^tZFe)ByaHw+ zgU(O<0%ZgHdJVrVxM4@&P==k7HD8d!t_#`vQK@Dru2~+4E)utbTQQfrh=4L7j@j=v zefM$O-tJrcEPMgEaOD2>g5#L(EC^Az~~9jSuP9$ zxN^U{IR^&{vvKV^hQo|%SW>WI(FMR!iO!hV!RhPDlBmy~%V)(nSBwt8C76S$#wb5X zbv6Afqn0{?_;Lm-5g1GpTf=z)&#HMk<1kQE^m)?E(RL$dTPYh%7{A$7!xDmXK|PD; zR1W2g@Ks!b7g9_m27+sFAP7mX#fr0oVxu~lEeQBRBVymCP5KV@9JaIh7-`xTD?DnC z&I&8`1X3wEuw|<+s}?sDw2Rs|-dC4*dz1+?4|7v=Z3j{I`s$RnfRl-Vs6?YM!MQWC zk1kY?r?U~deZx3|3UpwUtn6SL?T`$ZqmUX}dFucq#AGF%{;0{n zXWpco#-NpwvSWnfh{Hc8BSH|@%5R8QFly3@70$t-jp9$~Cu=Gr?-aZy!!+#!5E(cH znMz-VO%BPLXt`2&Bgg|=1s-M`sZEa3mTC!xCn-^#Fgt;hl;9NwMOytaG_|9d!?8I1 zUU6-*hi6JYK0+nTlvme+^kl>%fclyQQ1~(;on>XFB^8oHMMfb)Wb7k%Bq>+VeQVQL zSrW@{^xOgZ#AHytnP2_wZ{PgkZ?6CP`}w<9qpQ;aAibFkj#8Es)=kktkthxXE+KcN zmCh*w@VYPwfl-TOYk0fYH&+6@*|w7>mRU?O%=NC}k>Z|E;!^8n7c0V`fRJZiE*j%d zj44RjzH=@4gsitcHcvgcCpIsWm_+a^XCILY;eVzb5rnlg;Z|ahl`)$;5G6T!B{Vn| z*KurCLd-W|$+)g<8srVpE#x0y)>Zt3>kWCpeL|w^z&lK{G#=*g3WAlqVu{cc&()*o znS?op=5dKHUF5@cKAnPdCEru%)2dYjzULjhS6rJE_lr98QXP|?Mg=5TxE)$z$_!^1 zfZ0{=Zj7DYInnEAQv)4qM|NN#PvI{HvqUl#zkXtN!2PWiQ2rA%gZI&ftCIfk(#BwG zYeFjdXxecYvr~1a%wL9Z+wX4HNyibU5UQBz%27pz2pEr3L|959Y4v^<6vEz*(CfU6 zZ*Z%)Y5N#*qF1&WAJ6yM-2961tzK*CQdMgJa8G)bc#F{bHjJyS+5(|csWsrT3h)6>eWg&9(Z?1q)M}t!9 zAg1P^_u`;~3;|-xO3-j;4Y$$9cp{eH{LPiQAwtSRh&4|4h=0suVkD6!1?=Mp&XH54 z1=d5Mnk3lE#qEkx8HP$a14`;GmVYa0@S>#3udTtzj7x!uPE+NIEocNgdrg)>Bo=XbcO?17TsJ}N_mm<9vxkDh7Vdp0endR#xI9w_q9UdMQ2vF({3`3sIMx0c+iqUd`2t-fO9tw60#A(*(j4X0D z$1##8J8$CO@=twQ3tpgyVq5TMX5@K)eF-Ct%z^^YBhZl~N@7ZATejvYqhKa`XsjXu<-nm?q=noAE8Awd z9aq)w-n@A=pGn7PunM1F&aQ4wiu!PNHM{umDsLbr@3xB-JV5Mhm7L-9s~=a78;}R> z*KOZ&3PW4txq=?ksPXyf`G5ZFAAh{PrC41T)YZ!Z|DDXn`GA8CUqwrl+3;#ewGk60 zpTd$2s}1r2E9DARYhxnvqXYiSOuT_+;vh{)nJZ@l|C)xLf1zVI4Z?2J%ZE>`oVsG%7V(Uuk9ncDpM^DTU{g@DY~OKtSW4rvfo zwkhTP=Iht{`-kVfT0hC5DF*ux8UBxCvsT|tH@=Xd7~v8d2m{O8 zZ+As^yhauXpg;0VBudHt*b@t^(9S5`@t#M)9Egn~c7t)t1r=9(W@c8F-be)!r?F%* z%{md8g(fuX^Y-xL^X69E+A!`5{3ZP;r*g+CqIH8csf6{xe#*aEjH8mJEu=9TC_irY zFblTmU6K(G-@Uv1-G^6$wx=LemDI_V3Zv`r)6EYbUZX7lX{Mz^`8P4|IQ1Yjv=&Ww zQm$d+gQiUxNl_I20E2xtpJ3U;OAD!Tz`9%1IZOtAL8!>6DuYamM6fT&T{v`q zkGW>^ydWJK#!)jO;&{E}5{6pAk1OT2qorWT_uZ`UY9xf^$`ENYIeY{vTdiA|qP~1Z zra_L+Et}(jIiG7(Pwu(wFLu_F7C$z|=5feXT5MG~P8uLB^T+M8l_Nu6>Gz88TH}ozIcyF)wJL1AZAD z7M?um&z z6b~AO$UX7eg6E<)5m~7S3?YTrtCbzq4nX!jiJH+9SqAxT%xo>PJkE-a(%7s2ILuir zF4(1A)lNk0bTPev#hX2g-{B_4xuZas;7pt2(29~BgH4%}kGb;LF@-9E)k4vQ8m*<~YWRqrgkWs^46lWBet?AI&KpHraD> zgP5>`S4n|CBq0#RX>R2)gx+vk7nbK>fwA`c=UJka!CztpMt#{UD~|3u1Q3}s0#8)r zJnkR`AUBKKPJI}b7aNZDDg|fxNc(C5#A#4v-V_om)1oXvyj1HZO}|nImAwCUga&02 z-bF0TbmqwO3=I(3Pn(7yEA!RMpu>iwe>E#q&W@~aF%Z$bi5Qs!5&f`|1O<1FGxbQj z54mYQ3#bRBe#}a3xJpgXnO!1qQ?Mp@0*+(Wl1vc72a?srl7!6awEoz6j;0h*kD)BWA_ zA=u4*P=}MrCTgnure^kdNhm_uK3o~;vC(?vTe;Xe>=4E1ayCIsZfu}=`$asNIrj}F zW$Engz1%n=R8mO{J;Pansa-P|ls)JXDIb}9u!XEFYa8Gp+9F3y6$w%wa?gC66f=$w_uFxmk-RpUX#XG}J4 zna&{|RY=lb)&-7|Wxuw8M(bpMfJFY=_wV0cox;`E?wAu}x!->J_VCYt{0V+pczPTu zW&5=;J8t(}7;vDJ6e16axO1- zpyKmbAVX?d+&wUdj~|sdwmceKW`DYqdpyD$_U`5ilMo~uoMu-ZPGG(1rAPyzz?P<| zAymLsy`}jtufz}HOuEqG!I^z|c{-cVK$LsWl-mlrG+fbaf=r>nw6$zvv8pg9F*oOV zF*RT&RJNGxvSU+`B$e+D$zwo5U)%#VG*kksQR8%{$9jZij-nOU#FRlv4&;i?G-Evo zRt@OI5cU=Di2<&vib(@Ig>xouwUj9ztIeb-KfJzzM^SmA814kOBl^&ET07r4&W{0u z^mf|N$*^&#dCG%^nnX21xXugabjOpSo(%-eyEvb{0+4++a(G?I)DVpn8*zj66#w6z zp8xRr^=#NsfvJdry7~Uq#cwZ9uBVf;aWNZnIvtk4L(i@+&aN-!*XQG_bAYK}G(Z{9 z#Q0sW&44v&<&3g~*!+L~{P7?D_1_m5XeIem&;$(=(+)9LU~X~n*FYIgZ5S2gn~S{> zD{V`nZus8j^XY+n!x_&}G)=AcV%D~n5*No~RX}lqMjENOL>7SKMh#Rnn_`MEC>Y&h zx!Hcbe?ZlV#DI$jOxV*AvU;By=~CC!x=hq%OD~NG+40lY`%kwIkUy21*$LOXftiEN zrC4)PLrKucAg5og){1WI=vI}%D`r&mtjo>QZn6@3Lv2WOB$w)r@*HZ36@`NqJXv2d zqZ`p|IV1}NIxk5EwJxW59CubM&(i|dpG8bOlq>Oy@Q;JQ$Gj7`5=NqDnTj3&n0k1I zi2;AW%`KM1cdKO>@2i$!evfHobsi{9Aqq~ zY<%6zOcYKVqCuSjIMz9$P4ckWK+KL|(F*gzV$DiYq-TvwP%AR|RCqOL5o&JQ4Qvur^eSUf#X65V2=%Ox8m>V0{ zQaiOApST+G=u7kZSXS)Pc3fG)v_6QzisEAr)d6&*swETf8Qp`yDI#Oy2nE~rkE_kM z{k~`_%=XC6u80H&0}`~Qy3!1zoMN>uHv?%v^{PwxDtSQ;Sk5#J6B+}L!a2beHSDrR zqi@!^4vwaE&je40Jt`CZ`J_3X4Og(E6xoKa#5lN;9{qy( zTeAR1U?`0dyN4dyG&&_p4|4_}WArX$bPArHj-ec)jO+mt3t&PVlbbV!eME#wnZt*H zepLuHf+IslQ89QW695S(e7yyqzz_ZoqPm*TxQJd53WX5JsjzOHS0BB&|?NddwYzY}u8=+xZza zH(0$etpWZ}Hko;eLZ+;kGY;LrJ-iT3;6x;#gR?-|99-z0RxHG7RND-S3CavpK$eZK zrtkjn`#1mPZ$>AV7-Dh%tdKw;lX^8>VaAJ1kfFW2ea)M9C*-Y^fej@OPTfuxvR*rbM8U|ib=WbJn6+#vFci5Ih$~o@V}f$4 z%3LOi^bvD8r`LnH{WX7C6M@y%Q(@^OkxCGFI-kMUC4?u2u951Tn!R>r@|jx~G#iDC zn!Ux7N(m0p4*1Okhc^90dkQvck_l?z#PD+P({z$TZw#Gq`aNggFZ@!$aZOdwmefRk z5#!fFq9U(|l^l#1#1{SSnere@3B?lD!ogzL)Yksj>l}^=n`0c0rjqp0A#9X;!LNB@ z0t$41Cc*ItG?d0r4X@)b=~qpl6;M$zi+`jy4q;g;LeNsIbLfbRFVq0Os2=<*836;5 z#jy;zB0-{0Oz$3R6+I;IO{P~XCFGtkXnIN!AL3@wIq7|M zY9VN}d1~~O#CMoFwQXKLX7gFZ2mK{gQ0H7?>Cz&XEg`rTavLVhaqF<}!-rk;g_ zy{YOFib1FO3301}@ijD!r*#TgqT_|*7yDciWchkr(CZS6-39%tDVed<3`X!e6wB_g zLUo8*rolHau>N^=wXs5+JFGo>&o~jos7+;&c3!SyO708ek9elRI?T8dYA=KWahhzc zG!KXs$LnCE8-R{oNY>kNb5je;vCp(cxg$FX0RcAdj%nHi9GZn(}0`?q9 zEeZS;I#Pm(y<{fC^Je4bci&$_lZL_z+6ZwaLAIa-B3f=l=LyqG7Jj5!2I{82RS(j{LAWDVKvJ2HXWMSS2>VR~m&qMv4Mw zvc6>NPbSwu%cZr0dkGMP5~0$*dvk$L2w@O~aT_QDbph&4;AHb16F4xxyFFm&Wq3K~ z89`4VHvvrp)O~;XdjIu)!63*1-L1WvZQ2aqzquY3^^VA^-V{RU7443~@m`qwc{BQ} zw{K5J7{=sH=m-%X+`PY>zMdbk-mlh2jD+?PI$}Pa~m& zT(2Ga0?B~74n!pX{a^m|r`y|BQXMe&L%U%I>~fZUNj|!3(Gcp}J^e8`o%4-Ib(F-a z0?{OZf_9mrBcNtbe`qnIjU*A08N}=cJiKREK?KDT8OOF|0yqYMSgS{uxP>j_d4ZD9 zAfRZb$*_WTYgE;2(58kygxQA37lu4A+yP1gdJf?~tDQOQ6pI$jDuoP=Vq+Oi7;;hN z5owDTgt^i9&=e$HH#9SO`Km*xOf>A;rR0loc`(x_a+9Ow9DJfTW7`Q2Z}~^)jWEad z5;n}p6Y!qB@R%XlN|omlvU9VX9}GJ*aQjy#7};4FENzs z#JN*T@k5irnkG+b7Pw#pV|4aa_G+aE!pK0JBVL-c3?nK=0&)^*0;>%!onrFOoM^@3 zlB0N}c0GN=RZ3+yym}BF&v}T@-0a(0S)3r>d~G--syw9$n6j9gQdZWimSWP>0eWD569-n4^SI?#8s8m& zAKTp=>L@Owr5y4caoi}35&cX?F&cpjzuQxKwZf8<;S!$o@TM>;JZ|?tt#_Z6 zTdc}J099i9P-bNMWIUq;$J3F^jis_uP$MyR$;jT~kEhnW=*l%Q1;j^TZmM3 z#f1ZJ1e*o5v#bDKl@cIICfqmkHew-Fs>;a(_!?Ra_t-QH&*!tZ*OygO-QGVwKCYAo zE(iE-y>9nX`%!Yi73t%t8`QHHq8PxjLuDZ9Dp%NY;@);b04S}^sKOE>uD1c^vdhaE zl5ZS4E-|}3rxFMo&fM*Zv62Z7my{YNgj_Twt8~vPZt=X$tKvX|c)KHX;wTVLu zV5S)zw^ZNTZV;A5f)+w7D{?#gSN5tXSr&M!LE`KTVtUu;u5>kn5kBWUG z2DZek$cn0I*XCevgmB?>DRO#RlPaP!9Kvk8r_!xZA!G`9b??X&i9bqL4tqom*W=nu zJQ7=|X*5I537iC{&B+J&uC8I9r$strpRcP1;|ar}nGA8`&HeJQ*d04s%Dl=z3dOFW zxY7W)@u8dzoH&?SrJlBBW|WaJ4W-fX?jxb{${#5E?E zFn^Fa3(+A2=@0B#a(5SAA<7s|C4mQ9GFJ+vr{&)=bg~W%q%=Cofyo*wp@&>2wrDss zrc@P4t%?k7I24m)idF64*Y{H#ua|kVvZKxSG|JbxoI(z$lsrs$BD6AI!Z;(kERo2C|H5s2L*K{+)|r2i^DDkU7S7itDX=TmtqWii zhQrO$k>tldia5aW{0?|{Nfq=GoAA;Zu6q_d=%fDd(;aFQFLLpC)A%|rr+@OzbOit6 zLD#c?^SyOD57mg(I+{>CkuGtIg>hdn4oJsC@LH}cwg%OQ2gSPgX^Ffiu~sE`my4I$ z(T-o=*(f9&*DedIs|x;VyAjZw16}ATeZO3WqIve=H&HdBU&~!s_yCjp3P|?K3lCXzK8+4)T%rH#cXq zDJ0>Y{Pl>R`ttbr@fKe5b*FhMaizP{ct6#Y6G7T=<{8HE$);3KmFZwH+pZnxDuRDC zuLx5EKUx*+R=SzwV|vwcA#q06Df!Ge<_%-wZud-a|i)JE#rw0Zzv z><{m5%B(|c9O!Yv2hCXIN;nXnEuV#>atGWw($E8u-+0Af7Oz-HggjxU2dyKFi7=W~ zwW__$QzCVjyzir~Vsj`SETvI~#%M6ja4QNxW|5Eqlo$u=$xa}kNW9J$#y=i)ly*0p7rtrMcISoFPa)?4t!{xNBbNRFx17%ewFO7jJ z&rc`6`S5BA$(4R_rt(B{BOASVi}$y8j}m;hc|lHAt?Zp<8H;`Bia4^zpt@fyzdkLV z#4C(?cF&rf4Bx#$^!n^DfEc)UhxQ0;8|y$_NBFiXoz(0_;Ci3|!^DKpQc?jDk!V z3@8*vS#tNZXKzn>S zg}0g~i=6@P-v#b4=pY}{@HZ@P9~S`hb%MbU8@i4!&*lwvONw!bggQH&A~70^Jsp)g zKBfy?J*ufRugd;H+;Qgl--+tIoEZ1+3EBIWvd|mNRpY@ZNSb>-d$=LWZOin-CJNmO z{J2r*7COB4xq}nrhwol2m$^|`x4Y7)Peb2EX zDP>?0b-%Vnmrx?t40z94uqjJw=H;M_>@14*KN&@65nrcu(Mx3iD{dj2teCKM2`-P0 zMyjbsG*ns{*P6;YvN$z>NMgXEJq?vbe?vt+tw096#I2dKhirT%c{HIo6=^ALY&dg_ z^8S+3h|X&&$DL_~Vhv-W#N$xB5QyCq#g8^cKf-j)09#goef7A`+7R0Zr4=4Wd|P@R z>fG!tD5`~u#8c+QOynsAbIr527Z%hz+0JZC*gH8;{o$Ic z_U>Rtb8}!Dhl_o~ofNbiP!&X}Ypw?<^2g=+4$5=RNdrl8=!s$HCLq_z8c6FdOPQIc zOX0|DHMInb+sYx%NIp;tK9LpJhUo#U^v$q%dR*-GiqunvEFely2AuTx_(a%dR%p5J zVW6Qw5LGQM+~cI~Mma3=gjAo@qZ!wRc15DHs)iY8D+z?cVV2X1O(6uOrBlBcj%(Oz zkL+D&DHsQc?||X;iNmsmlz0@C{lha;C@Lg_bG2b{CjlZvB6v^!2gnUDme z25V^Y$Telj_n+qqb7rtGz_94^#tL){f8i6IAjJV1BChQ#!LR10le!{=t-!|dcw}w& z0}{h8HYUv($hBb21}EE__^1Vc0jCVotXsuUoKpBiw>ST3ehtg@7=7cPz8s_C6MY7w}zN0~M zJFBai1HA9`B~KEH6EU*>jTbdk%2}lqZJtM(VYPtj1n;OeB&6K>!wV8nUS(s8H{U;D zE39evIzaA#L?RhQ%C=Y6n5UrpPx(tzJCaSoJbI5xEF6$lD zaX9RXjrv{hcXU~Ts1%A9(iJ7cQEVog%)(Czz~Uph-zDm+*uv{L;xV4=CNoiTjHK%w z{OPDGL$qAl5Z>pfy4JZyJOg%{-32gRe}>l5ERcB%prG^MQTrj zaa=sUMr4T&EH17gcb?QM?E4i?&_|6v3yoyfNe2r!1Q$oO&=fk&urSJbUJ4;dO|>>3 z6k&=*6n_vb968_a7*!mo=AphieVfnHl&ZKB1b}zf)cbH5{3f^>)8VJj5732x{Bg#{K;n~p&OE|- z*nQ020(oo22CX`GOL=ljwmB2N+Wv2|np1t5j8i;3y+=xDc5O}{CLABDG0j~L-cBia zQH%!?e=MD?Ceda^mZ`KI(PY9=bChkw+GL9EwGDBHaJ$1!+V6Lo1pPXc2SKe?-h29nmCZ{6`4@vVl{!QFhDA^ z*}<_4qL>4184+um0DNOMJ(-H~xp z+jYx#tTHA5-t4c&qm-x?8{! zwD|V4x?eneyj|ZvZtfPVhb0X;0^yqPVz;3K@6+AmfBUC@`sMNI0EtL4ilaF=y-G$$ z2f+*CxJIXDlL*kF&|iMZ8{atY$zH$>=pCD{3nxQdJ+uV0;Cou0t@IfqPGHAv135phxv$sIZz0u?1TU?QUt#de1O z4TtCFvtivZpySA#iA}Af{z_GmM>00!Q|zHAB)}9#6G%#On5Q|;%|nF!zgWn$b=dgH zKeG_*Wc{JncefXR1ald0vA-c4Z%Mnx(Y`SYoQ?}mxAjgI_q~%6Q+ShCZ-5$esE+BM zGu_keh}XQlID_hB44o5l1^TQ|+OB1*5%ZYjUR>*St*U9F6@ZRi;-FcDJJQhbUe60E za>3$IvPZe}JM2hYtmsoFeXM;svYu4Z(k(6EeqNqBLxdbagaR0)?m!PbLaC!0ui%n< zJ6YCfVD&=DhEXb&=-p(E1qlf^ zR~KtxLp z*-XlMEDI4ASpfPPd4^=bwFsg6I|l`cq$T9HA{ZWp$S}2wea~gd{*M>OzC*ycjG>KW z8*-%qumEogh^4Nt=BV|M#HD9&$ReQJ!o2hU&hIi5v#) z;(3V?KCkKzNDfdJ)seszm%I=?h1V2HK@zm=iSaZyJZUhK&MxP)6fZY?uH@%ZNIJ&! zVX_vkDr!1?DSxw_@sFGK-|iQ;7?3>~`p-^JP)@UaV52hC?$uojlO9$jJ3&&@lzO~# zlqjp{a6n`eOe%*sUSODpCyMNTL*imEk&eXMVvI26Os3XmG+(({?$P6;~P=sSnzz$4EnstFc0@)69KreNeQyf0H+jOR{S}hq< zQH13IOZIM0vY3m5#2b(sdsy$*?5n6L zRB73iSSw945;z$T9GK1wYrVD6pdg+FT}BLFkP=XN9faX=h4M3xZG&eGoc@yN8%5O+ z2qOfIvv({$|ONcQ&G?X(d{0cg%0WQ4A{S@Q!1@2>>bjO2NwO=-!;>J{P4>1{qjlOCy(vQf|EgC>6Co)= zv+8l}Xc{Cz*g_R_OlAf{)f`NrP$nzwHRqnI_{v_`G2m^*BT8jQIxgM?CEl+9O#S84 z?(?$PbmMY3#wtya2GhSVP_b?%H0n1cHX%ohtnb+%ToVh#^`Xx3n-x&mG-&8atQzF3 zmdV-bmQ+r*H~Nq^_7XA4W|T_BWo?#h^S#-k-H1N|B8$t@ovq^GHN+ z5i4LWoKk&>p6RL;11Uc$-iyeKed|#flLP$upB^Zh5|a&iu~J?Tszk z1)?n@fwxbhq&2x(x@XEYhSK@k#Pu7qdhwr*^H=TT{J>fVtsumDs8mW5Q25@bq&G|d zXJ7JLgh)5-3n}A-f4DZ4Dq)CpE=!Pji+NBsCZFp|5}%K`kOgoHspWYjZm~ujh2$qB z(9$boO~TiN3>4h4orQIts8tjAN{5uP3LX{mi}l8d>| zf*;IPn6jtYMCg5Y%?J^4#ie9z39hKGCHsbdmDimzoZ7-XM`V|z6}#(gGDt|h#Li=Q zGj!vEP7=-!IV*@2(KJ+V9IT#TiFmM}L5u;`ZBJ=tyIPz>*=D{=dtIIRSoW-x^D*NPfLmR2QCW$ItOGJkCvNI~^LpkI3borZ)Qz{1I9nR>~>G<_1)v+@`Vv3Tu1_wg~9xR!vfzd z@q5^^0Gd%v^ApxQ%d!*;$efx?Hrx>}jPW~UTT_n3UNva@Q65wpPX=$jH^tl-m; z*AzM4OTV?9x2D_2=TWviJaUJF>~X#*!rMwG>X${CB~=<;Iv?)tJKn0$+VTSDYs zOxpwbv#|EgrYJ%KRSH|xP?3-%S9;Xb7Hi0a1QY=Omn(SS@H!~c5YHjs#Hd7$r_1>a zvJm_+xEvM`K_#iEG(!%D68zBR@M<(sXX;TSQqNB4f<;Fd2|81*?3Rvm4;D$X5cl1I zHj+I+;~hcZ^dhdID02TOcl3Y!&xapA{JLd(49t&Xt2G*$^wkGC)+7#97XIuLDispm zwH&1*vi}T`{L6V06dT z`SiNaclV-oD4D)5%b^$m{&RgbM>k^i<|nX(BBTO^%m^hQz4TxI@ei0ce*EbpN<(3> zst~(z3B1o@2G=z7$Jw0uVn!7sQbSl3R3Z-5+#{|j(aQ4$Snio$c|HLc3O#t#fZ}>K znVg?9)xW|tj<|Xx%*9E1qtP)Z5(X>LcjQ*EtHX1V&#}|X3cpc)36~mI(#%<$43Gr= z-{?FiVpk7Iz~|RAcEQV}?}-JBJ1Jl|Nl;!}wZkARC&@Bt0E`bnU4T;q3ZqqpqG00@ zm%)0YFMz;!qoqz>vv@bDG%}PQJNu!W09zYTJXEN}md!jk8P`O)1_ce$gy6tiJU}$D z^wDN2Az}VbO(6VB%RB5(awd{zDmXrR*J*nqGI1}1J_?JsOUz202z8uJ(YQ|IqZ}@v zFr3^nmFEX_5Z0m5mjg{QYC*ev4DIXkXyY|!)`U6i;ZR|yqut*{#)4Vg#SJkAsFKt{8h584Fc$M6 zlK{%upoQKwVYm(3R`pgDISN9K74}m8H5KRlfCW}9Y30q#BI-F)Q?xWJfpBlGFK*sl zz!bXzBfe(%sx}7@4S%o@d5&^64{)5>MQP_sRdQpgnuNrrfnG zpPdk3cL~DJ-_@c#dTC?+HnG&?quYyNlv5+>$O2^VNL5n}{ z2ixQJ0UyN?Rw(c1(CQjHv zEm#M0u3yaX>;1zM!~o^a<2y5aX~T$TV3Iq{OI)UiT53?S2zLJZ6+#wC*$FNiQj9_E zQO=~~S>ZSaH4=E=T+J^R;Hn?ykalF{LG=l@fFvOb9c^2pq%#JrvD-8dUrhE_2yVIH}@M$pp;D8R>X3{M%$Y@8tGQrsUm5%aflOdUD> zVp>(VqCQTSgH<65he1Cw3_q|78588Zdoc0P5z>X;g{l_ji#>2lUtMQa8P!S5UtK~P zd3wPwv^F!#q=GkTz?CS7nIDc7)H=>**q5r#>Zh>T9aeLHwc4UkL>7qgJ?4wVYOZMN zUcd~DXUwP01A~Uc(cNmpDCOtpo?(mYJ>sUmJv@K;y8P+4=f8bE-foNIfTPVKvE^H{ zn8^$=9#d$*e~9EJfOo>If1EubhC(?Zp#c16(m7<0U^PXEez5doIx*TsGa5~d7Tm>U za6*N6(v&ij+jwjvk*ugxHCm}kRtIg~&}|9Kary)NO8qJrKG^&4YpT<#NhJ&w0XDuskk>(J}(YRj39`sTH)#A%E!d)r}XFigpP$@qq4?D`Z;j$(0SHxfN zgh+@R^lBG1zLKlLl9!r2zO*XG)nZeor;OClK9RXC~$XGX{j3kK1Bid}V^1gO5 zw_pN8B?@rAH8vkCBqC>`Z^b_TL=zicQ~9AdJGnkR5xe}>l25^Z(X|VXg19l|K#)jtn=&u%;3S(Z>7PR3?3&Bq38*=GZ_k?%t zpo3}-0yikssvYof;xxI1a1nc#NC{b1@>X6B63mphd_ zsD*NWf?)T2GKCEYm93DJ01X66}^lQLYCZ zt{R0O4iTbwb%xKrqml-^kN8b12oujzo_C5ie_oUN0xa4jB$3BVA(llYy$-8B_?l6G zulL_zZb7v{FJeNm?g#}H%RMa%r);%+`TF_p?(Y8n{@V+%6YCfJgrS8MovNKiEdH$H z_tg3{xe-gN{F3TRC?VEt^A7IT^i6*L_V}+q{P*3if$~Jk0M7YnJ&fUpBx=o0V*{fUYv~~+@Q-qw@`}N4m>YUtgb#62h;E0U;p(_-~IC2 zr{6w)g#?Bc1c2)TeW$9KIA%Z-q^O-`tsB+G71|YMrb!a1O04%BRm#dcLR(*)p%+8K z1g9_lkA|ycSU;cRV`NhZdy#m@t48XhqzK(1v#Hm@9($x)Na}}!e4Pu-fCw#lA&}hQ z{5<}e`)($ikHnT5`r1oG?+Jb!Fv{MdUr4)&ypIF6E_oLTdyp;LBQ@0($-lObK#x7H zFz4X&i7CnC_{TgiS|W^e;O!u9kHzfP$SQwo4XL@Ini!{Oo}T{7U;v%i{wK{K=3~I`$3v zw!c#lDvI~&qqgM%ON>WRJ7JN;6pIT- z#!!jVipj`E&5@v%~D$!qS;b6oW zCc#RUG@slMuSb!dvtL!Z2{15G8oZrWiGXkIM2hM>)4Wz&u$ps3QXynF5JpMtsFo*D2|zfY z+Z|rEmw==-%pNj3!NcMRN;jl87dE#v}nXb@e z1qq(FZIAgIogagTNv}#!L|tCaG3z&CXdN8bln2(HFyOd^B@vS>soyq)0)hp7*bS;( z*C6_AwQp93;(6CUt^3DKjahlSFS6jv7xiH)5Cc@~wyX^^N4+lL-k>_CW5tG!h=jDpTVfh)z2GsD5c1c|Hj1o$) ztVcB#IJY2iLqec*JvDszMS#o9Fs?~J!-0YPV!6`QD-(5>!F>h6M}0%&H95*Ql#R7e zr-ai0ZX3Z4d(5EtNj=I*IVc$_Y;AW`DqD;K@ac3AR+#}7i*IEn--2$u79;VnBk8hD zrKmj$+tQ@jVQoh~;?A}qu+w628RT+Osyj%eGU8)U*JwKh4i02Gr>u+BYh;6v0+}J$ zIKB*BHAPKou2vipjd}nvRZblPp_duWl&Bt+t*Cv$g@nzNvyfkNDF|#58G^K&(ROB$ z3A{sapU@&l6IH(z&KJkmv|G_ri?cBQ!_kNrqQQq)<^Ua{YpCzky*s;R6;Z$(@bXEJ zSc-lxS;mz_#wsn9bYh2T5T2bh51>5|{QiIP~6mm5bc#h=VMgqR&KtcA@9mQg96~)Im$J z0m-5*Nkn#TxXebQB+4Es_WVgy>ZQ37&BbH$0QQ3{A{yP4OTu^-3ujK$m8ghN8x{>6 zUY^h*`q0!*QeGeTZE<&Nyh%*7M-g|5mMCvNPL06*L6#Bz!!HTK!&`C7 zV$DP)Gm&4~LlxUNr6KqEdE~xzjk(lr>rgg7Dqe^qMvl082i%W*K|UeyNhQ1zw`c@U zsGgADCrQbcd=uM_%yS9*<2m8v8}TQD`D1PSGJcI^<-(su`(WxD>P3F9S7b@){Sv3O z%M*T2oz}1HbZLgG_&D(__E1$sD=6}Vr;vY6>Z;kJ?UOXr4%a4Jo9{sRJE$d@Ls_Mz z5C?&q5ck*i7|4=_)t#KXCm8aq-V;S^(jpkydj%(BVeo@A*HUjWs;dv(UQTZ=`GdX0 z4xA~WnIlC4uHOLC3?&}3%AsKJ{0mN4;7ka$?zHB9#!c+Fu=uVz<8#eCDsm9qNA;}1 zFXH)xL!$!l?#;!!>#L#CFLnxOySt-qdAmgJ=M@|^ow}S2CpP7v)E*b^AnsK15^Fs( zn$L-fDyn=U8u$6^KYmkV2CY{+XwiWAOq09A^36fuMaucJ3?*az9c0VFc3 zjRN0dray17oMEhKgUkdR&p#p4?D_m@^}Jjm0=>neP9bJTKyU0bxziOh50}zLm>;yI zCO|+IJfH6E1(mv5EsyoIhSq2DS9KDG>th4xOL@xc#W~C@)YU1!<{*frq6lpnxrbl~ zdi(ZrHk-b^x|olrL|e>Yo}1H3BryfTlWK#3`WNSCZ!XW_$96CphByvRW@EJ4)AMSt zbW4sCshd(*7EM&Nigx+Y1_172?eW8o$#^jY)mo|L=#7KmPLR*ZYSLpTB#E)_gQ4+r#+zP&;&jWOZ!Am=+0`wiF7^cmV zjJ$BT84!d%hMQ}=6Y1tKPh3)Qha=kAg|Oo(eI$=M?;G>z8SYS&35T1O@7HT?mOi61 z*|s3w-yjsr9gUO|bOxva#*^8v*3#TY`5S>D2;hZ12&wsRAHHE0eOR&wKEp6%&2^CB zd`aUqHs!}*@bF?j`^z7G|NWo;;mw-`E=MwHSy9<@(yVBdH;ynzGeKUx6F{Uqp)y;z zr2OhkWY%2^GS}dGmKG+Ooz$M31VF@1h!m_u8R5OXTGa)G&(XK<9}&_+GtERW zGzamTG)n$pMQjCcSz!#0%|j+14I)k!?C~(wp&lj#Vq(CFX-G*1_k^R8(7jSuVMh{u z7+whV;JMMzCx>x$QtiYr()IH4Mwe%hE*v8>cqO-p2QXVhJ?Xektv4-MNVI<2#cTg= zU|Hts&{qKoSU5kPB^bY5=}c$Bx+1Vm%M{1pQS|G?MgTsRXWR}ptIqp?KX^1LL2^#1Xs*zB!)xF0rBjzF+e#}oupwnQa!<1+LW+hJj`ri4Y#L$>svoN1cnnE*ggDVI_i+ zPzhxKaK3VD;!VRDRZ+bP((GuenoS{h%^@hPAU$eI-)^0%;)u4hjI@_i$7(RSfuvnv zU#89zkx)dFFv9?9%%DFMh^bnS3>D`9WFR$F__7g$66CRr&q8|%Ql~^n_=jO`^#Ol$ z6vKAd?w9NKX><6tA)IZ~Wk)Nu&h^1&l3qaR)NIrE(Qkpmw`vINn>Ve1lQAV}X6(7F z(N3c6^uT%4A-xPb>Dp1Yc3~xgJwl#|!1tjg$q3${yBRL4S~Bn?r~no{p;_6mT-C~W zD&2}>PY-e`h`bC=%QEIf?-e3z8hL0?93yBJHd4U{$k7tUL1jaFVBcFMLl*>QRnC0cq_NY89`o2Tr>}7w z#yr-tW8yW@MA%a9DhEa5&kSuw@mNeTbPfAnzny}u(5*5N{>3CL?7jxpI>$|7+cBP{ zi{aVMf+Xw`4<=q=yWH``EgK4e9ibmhP@g!4ddCwT=!ctWIGj?q;z ziTF%2+Bk)iaoLMC0u6#JOaD^ z9|4VL_LIF;7Vo0PB&M?FX4kIK1QFwtrLZj59;-s1E{vZalWqCle0|>}g}7tS1W?JK zrn=;rKH~QEIqoVUHJHoI`pFWS#=xb3MRI@2UZWv&roK2?eoB*MT5&TJgyF+2#l49F z)}75I)WcmSUhDP7KWzk#!>XxHpF#aqw0Zyy!R)nyqM10!^bsjHu%7FrqPv$>u|`Pdct!Sq{C< z$QsuYz8d>Y#tnRtDW|F7f`DE_1F`$FjVASw=Srrd+X{t~M>o{D=reM-!ZxZIJ=Gt%2~;0_zs{FgDSLvag)$X*j?EmrKTw?XW7^b%qHWd#Ff!J6$TIu= zAK$;doZdeymrsQAvN-B^$y{sNHR?zznG?R8^zPIjDozv?_V+DTu94uV*g?byo12cp zB0&9%A_4IV<+#@|%5xCt?0L3xoBCz}OO1qq6MEVZI1ymcU>E{C==|&qCWQ+?e#Vn? ze3{PR&dCOReNR)pKwbr1TL-9}s6&=l3TmElwSuhROm;h>#`{w49PHzX#y6RmxuY?} zD1M5hCOq0em63B7Z|wv|yB%?H4U^vw3{8Fbw!-Q;gQ8#7n7QB=EyQj8e^h-}lO)NO zR_KV7rMg;7&+IIVfnmnl8u0&Lcv@S`;AMe@W$$I?_Oz-los}{apKuQ=vTJIxA|oR_ zTpT~*JKsSpjE3>UvpIBtw%HKw-$T7_wHA&C`e@YWRLubfdVh6Rq$pYSLau8eymrrr zqU7YsOF1Hm3+{gZ^8FSjWjbz$0m%Eie_xtU`pKtE|*XM8l`!D$U@~1z(qmbQ~ zACK@rsUrA(yJZ&mNR|g8gjpRV;o66v1C984_w*0{^nY$&_I;ilTH4N#2BrKs?i6Q* zQvjSgA>ms*2bP~zd|;&;riB94K@JOYRVWD`7U7aLWd>=zS$pUcx)sR304*Mhgt-^( zFc$qcD+ko*35b!AyY-${=~GJJ?ONc9G^P8 zKWq^qMuUb9vkQ+oDg_k=h5&$4hmI_*&B-W-HO+1sp?mnOs6mX(G~^ z<_slUPC8P2iwYs*x{L|C3cE^i(b&Kb9rf`&KA+Ed0s6|Dl9-*wAJRthu5BuVNW>5r z7{W_$yv_O?PH&yWEj34mh=)>KCDBK?ibB}~@C%Y%h4mS9`-Jc{lbs7bIJRO|Xj4Rs zw$`>8$K4?&vkqZ?O4aliM*!1Y{eUT`2ph|C!*yzfEbbn*w@*7V5Jwx2CSs_PQYb<<%+hM)q{d>?{EgQ(flnxh?j*(54xJCL=r17zjF&_b> zo0I*d8wvBzT|qUMUz?pK$|}ASeWU}=0%sZE%o(JkRT9_Upy!a$du?3WcGt z!lu2RjOE}#jRUxAb*C4BvZk(tRVy1EffkXSm0=7SDA09!5RGfiB1csaw#ro3y1!wE9FYWrn7T;|1c%$Cr>y0ISmv#PuR z>1|zJF6vd5ukw7Ar3-k&p-{jqr+CB^N|&rw3H?fQdKhNZ+?a`s2JiPgDstF9B-s?X zQTEs;xiKr{wG!ft{uq4Dx3)K(!7yTr;bdNLFMvyv>IAGy?)AlpS$1rjSy79YvR3M4 zOaD%SGjY!Pd|o)@-;HwA=8zaDJ!X*ruh2;a0eWseg4+PDLNKeqq&ai4hThYgsW9?b zQD-);@W4pQ;M(@v9f3==@yvOyh0L1TN-^s|z?b2uxR5Z4jaH3n&bC-h_&~sUjgK8z9V>oKOYLapn>w6Fa+A$1-X-4*e4DDhKFxPr#2@gC(zWy2E5O zQ24o4hWpF-Qgon9etB0pamZOrwoEBPxY!Z>CJ@j;31)cTCBtbP_IQAdUI1?F1IZ#? z^_h+lQO%h1x7~M&u48Y;%|;3&9O1q)xXPOxP%>W!y7-MmcCm8E5ZAjZD@`9czAdlv zH&R5S-T;SP=HOI!w ziXwnsH%$H@)7dSe_GEkZ5O`v9M0?E5^xA}W_Kl2iz9u>zdpEdT-7po`)XU(p5Z#K_ zvWahWG{RkSg4GRs6L>X56h<3w&W)T15$$)x+bO-sJ{+H*D{{K)T-UbGr?@&hFV<(b zk<1%K+_m{>Z9z>0#C}Z>A>GcG<7sYlI{6}Xml(`9E{4*v961Emk z{vv;ZtHT}ThG=xmEj~tfoBGaYdxLk^Pk^0?V<*PJLY1)zAZFv%o#R8sI_Zo59}3CU zL!vJ%fbVRd2YiJ1u2Z+!M?C#pPi(rE2UmmaIpA5~A=9B)>@1wacFIxfG%ZF#K&9~( z0p;^04neUpnH*l8;SLQM{fFQ7JQ^pW*WeC=tYRI8P|(oA+%<`)`?3(sK2`=8-F<=5 z9x}|?lyyaQNO{_9!zd*tHwH(K;V8XD2cAQfl_iL|?%Ztzh=G3@UH54PhqrjGiNBIP#8$xz>sj+Oz4^a~wJPB=Ff=W{k! zdHVip{dfQF*F{x;P!Fh|PDx&kP*=*6H<}g47>Hgi7$>LX7t~p07dYbRd`MwoZF`s5 z!Zslc7M0Xmdj|G36Vs&@dsLPgXIib%Bo6*`Vl=2^)Yo;sYm)Pn zb4BDaUEu!l25N=7DDlD>IL*vE1LkLzO2|1!QW#8c%FeExsCEMfzb!PA*LDP?bTTGk ztD70n*|a!<=u0M3GZQ^|Ju7VLY=EJ{QP$i{b#sj|>0 zyA%%FW|U}EWpjFeF5X_Qvci;*T*&j8>Yi|D$oYlEisW{1HvQ$>4`z~Ku8LF(^Y4WA z!v&Tka0xxP{oVcqTjkUJ%kMXjfBJm;=P$Rvf4TeP+x@p64{%o@c?W(iuo6He*nuLH zBroaz{QdJk{pIU%q`laV{K*s|#$Y)iGMIVFx5s!120}oAE%t&07PG61btMRk;@<^B zyLyU5aaYUvL9BC_NSGluCIt!46zmx?F#xKvSfS}bpU~sW?vL+3$o?bCzu@(`7|tLj z>I!V8HxJL>@8tav6t2cV)a8HpkAM5?uRs6&fBnbb{_+)52&r1|8I=MXP~0UfPtMDW znyG8~5AA@a{s8X23ACvX?A2~HbA%~Ve`>xy=bq8 z5--ei*H^{F1y*QQQ;t>SmTJz=*Tll9R$4_&P>D~J%v#VJu0Lx99i25($U&KT)67jV zJ34RC_#k!^`-(p@g038WWpX1F?r6(<;;iKliNMetq3FjyB$$2h|x&0W)j9d0~(Ew_}oibmnKGL{dA zV_Ft|BdRY|Sfc}rCU;rfKW!g2do%-%0}bm)Ia&r6(x70wvx#k>!e(pf>Iw4Gl1*hJ$LRQ?MV?A#=sd$Z_HJ<7M_Vg4!g4 ztWHR;9r3Jyyu!YG(=H*e4JFrCublx@wmPimeTYh*+|GIQvPPz8InSgyJDW)1$;WWHN0R9TB| z?pm{p3Ij%wTY=Ofh$ITJrUYwsCQJi7KCo0*YuuxdDCJBB4IC$1&uJ-zGr{6bg-6$_M;wJ~1cOLxM*7PV-(_e7 zm!;QY%wj681i;Y9)<*kN)fU7X>}xgeLKnHJsWiBw`9rj?v81{feyJwOF;O}P$XW+m zB8h=}Fo%YZLxlsdN+avJ=}IhfL`30CBo31qF$!g(*lkgf_y&TBK18%R7!SGJ2skmb zg(6^MYDg(=Z!!c4u#x+UbbEZM(f*>JjK8_EDp_*D@m*J(*p>;nKK@b$)+p+&!cH0c zi|~C+ag1tO<*iH$bT{(>&G}iRT|$ZE5)(L~6~QR(<@kY1&AF$rI~kvXUgFvJC&eq0lOjvazQbGtd5d!%YC zN8XwnxrU0`QYX zn2A%8%k>>F^W=aC_^C`UC4Zh2y5S5m;0ZIB!cI}s8ErmA5miV&S7H=au<LidAUYssDXlC8Ra4PmO}bn z5?{8H9nX9ymlPc*SUImP!Uqfth>YC^Lxps=NP%R$l0y9^$$G`+ ztn<|&0Wu?3g3p=UN&ded&`r<(2#Rbz{_5yw^i%oaW7!h*5MPFVq&niS z7?sppSyc=CL^$rToOqUf**w5`-2UkiH0oL&;xx>4Hy$+ip*!3TFXO!A^axm3Rk*K`!)X`e8R&&cC=F=y zuo3|ae{gz4P$YhOE3XM7+pNSyodFG}!3ZdRk#Q}b1b`$5P^0=#jKU9<&LP-Uh@M_z z7QbcxR58sVM|%R}lG~FaqCzTARi9$kv7t8*WQc`+d~@~l+c)Q{Im#b`J_SGw%#?4p z_g{Y8BQD)(cM+zKgKs}$PF=9ngSVbP_*7u^sWL!1EjVXp`Hg*rp%79)hy{=r=V#o# zj2ABK@kzLg`tDjF{5)1g)PzwzM96u(N7ewaKQv?gvT#UVbA7Pf_o6A602JiuukSDZ z=Hr{D$Pp-dg0Ybh&z$7}lV9dC8s#E!2&68_Pmu^9BPZhsbDwDHq5xC^gf@5p5f-xN z>E22*CLAbZ#WtpcvBCr~^kgRKp%)WG7jQQ?j+b~hXf|i!(Ctq249RZ65U49np@Uz0%SUaNop(l>PXY;$MNhVNCHRY7rqr~!- zqk~IfFNcGG{wCS&t{OHDftBNQ;6h*&aeKlbiJd1Qw>p(MuCJHpy~hQg5^63B=R`bG z@0H8)MyAj{c6DBSe0TBgY(3)2O59qKkdlogeGIWn%sgsDYju13{N?8UXgWN}Izun< zUk3wKR$33WA)!BLKc;XAJ+|HV-QnBI{*R~aZ$BP>zq$YO*V{jRxy74L-|xOZJbit5 z{_meY|A0R+BO-&bHw8;f;^WiMlI10Eg@zq@FiN*j?K(4pw}Dx+l@^_ zOKs6qm*<$o#h~Q?3QKpZB<-uON{4=Bis!*pu!c0%#uP(m0Q$yKoOz-t+OcBQ$F5zxCTI}kH3}Qm?)!+iew6{#h+uuJt-QGVi#q9R+?*0jZ zOyr%hd%NB-7jz^HQ2K$I8F<9t3A#92f=~U|Up`#Fxq?IQ>-XEfCw2xsEIx92imkDe zbE9yVQZ5_YB7o0;>#N`RJjRB&)_oNIiTTw+-Vm`k#*Gn`;UMUx$qzFYv(!$J{E?v^8&BQdAyE&ZHXYfjJ zmKLBZCX~%8O+OeNT&eM-kKLZQ^^eTRh*Vq?wVdh0*qq@@qb^@1B%(ygyAAXQ!-pG(;D z^TqCY-yfm9(D1Rp&!A3Gmk`u;aOoV8A!2{{u{-^-JwCU@hM*`OrW-kNL}A+`&`%I2-fxs%(<9!Vg3Np&isk(h)<6QEQUk6jx-DO(A&E80bhD%=Aoks!z(~ zO7P&K&MhIf5C_}uC>6;;<6Nh@1W4r5*IRVRjHrhK7hl8u1NnqkUGux7fuG^Pa!DRN ztiU<*VX5rV3)U3!#}ctF06JBNdTwR zvr4`v8##$9=5*9$nfHhrnK48hpH$7<+OW^l?=SR$N?qD3gl}=3*YuQgM3t-AJ8=x! zjB3Z^LQ&ZJQ>r$09v9(ESSkacf`fMCY3@JMql(YJoYHM@To2?>Ie*)%3Z#jA68oh70u%bDWfx;Jff)>yM3bRacvFV%N9F6bheZ(!h>maSWI~w9-zp%6Ul|M=#hz7 zmFbOMy7G_&|A?;XtP`#x`OkEn&}>JjrV7(TB>u1sKUKxnv+#)BcDkM0;ieh?;;eF< z6G1!9c%Q0M`2nLh=QW>>e)&!M3ZpdgVfw=8^psw%L*VPr}j*! z8JkqTtr?N{yiQ=DeDt;ar!S^&yXBIdBI9&=V-^v-#_zb_>~zv2kVwpIrpm>0FU4y5 z>IG-%N1|vS^Ygu85mJw9N(U32YNGy(%C{;{*NhNj`y}PTjAm!9vfP{P7GPkm3{_F} zP+GI^`(UED>r7*mq1pD~nlu#uyzw-Z+0z3Do7`1qRWQrIq|~ET4k}JO3uQVPN@ z7^n<$Va=M<2A3>LzVVY9ybTM@&dp98it8;{7>FfqG2bRrpFALZgd^TvUXVGINIjzk zMQ(twxF{`IEy6V^NL1esMwghQ&Yn0NF-N|!wa`n@V4>*g%140er?+o@es=+kF^ZBR z-VUqd^N;)QH}_wEfNpNncJlbd;ph9H@sBae!L(U6%+uDRJk2rv>8x!3t*Sr*dsEf5 zGl*i-8neG;PoYH+WmH7NO*CPJ3Tk@8H$qe49U`J{?;qLbX~9_3coOnQecqHG-kpIh z=W^A&eX~ZFBC!Rm!BlBDJk?Uf>i{u@}I9ZKgF^VHk=@Q;m3-6NV)X?bFj# zhFwYf>PJrC?RKvc=3`z#^KQ*;VlmUu*d?`du2E3Lo3=E@U14POtYGIuA_#GyWf!oy z3nNISxg{QGO8DiJ5WxhMr&=XOIj|B3DKCy=nu`vr2iXepWjZJG>ZS2cd&9R( zPp;~N3f5}XK3 zT2NW%N#vixk7OF7j@bH*iSUF)q#EEFus;_W8GPE4u#*)Le~q#=v4R+gsyQ5?3hF?w zw6_fBx@rkH@1{z5s)bsv zFV??&{P;iq>7W1n+aH*CSExg`oO>NXyM$FUY8p7jRXT?JbP`sWaPk1Q32jm;$MoaS z)ny%rPHw-&@kDaNoZ09!Q&7na9bGF{Tug8jGLLG9L8a3H;)et}(x!UhwfkNK^G+C7 zogJ!1P@hN`q{K0pTFWK<1L#Rn$*_Q-QhK4Ivu_BWG>&+X6!Xp~M7jPVsL-s;Ny>F6 z7`Sno%n_&*{xz@^FK3kL2u=(va^_Qi6%30zorR%)S=VyR#cGxH3cZZCwJP-bg>ztW zp~hM!JSjOliV{dgaofv6V;x&AgcrK7nOS*zPp{CoANOBxZUJrkdUN;v_5mbB_aLZ# z+K{;PaKd!~RzPm=r!P0S2(FK=>w0RfY9x_gqK#wM887Y~(4HzmM-wO3St}^3+^uzx z!zJ5d?s-5RTl`j)yc@~*K+-R^#KotLENB{#;uG_A>;`1O0lS6`>=IibF5Jw zjp-&xDZ&cP&KTezshycMWMSu(sn7!sU^NYsPAnvRUc+smUl1NrmvsQkq*$|P6(2$j zbXH@1Sy#*?9X_$5l)#l(nF~&&9F13ju)(Y2d#R1se=A~%+56d|coz^0hp?@C+7EQ8dONajwcd zSzj)3aeV#arzSYlZenOvisb-693|yuNBD=-m=u_`4_E6C zZ_j@I<$6V24Iw9xC@;jRC1B!(WW?XsMR^7^N|Dq1lao!nrrZn$d8PF#24a?dRNFO& z3v%Z-8P!==d8h#;Zb}^3flvs${(i6C&g8zprMQFR?pRG2Qj~noJO!pVBn^R%v z0)X#Qa~DTub3hXe+O4<+aH8apLa!$9ZdX=z% z2fKAtzd{8|xC?8zyy*=Hjj$r2Hr!-X5RvMZJm$(%f!T`_9T~=nvv~oP07F(cm90*! zP`vn~Up19s+1xs0Bh(e0@hj?$GvPCt5!qncx&kI|X{ODglfJj7GYC&~6z~U)+>6h? z<>7%zk>hX_2eFI8D1*F%jwD5tp;jRI>D?65IvLz`PL7fd&OsHC1iMUx^Cv$!QCS~#q(Aco-Ad~|6HaGL+l!(8+@=*=4E`}nATu{4tR=HPgm?mOsZkCoN;N! zu5;|(a@$;wDTWy}8Ul6(=aVZpg;bzSC#ONl(^wcc7^l64L$Ap>XkS=-B8^U@I`V(+ z8RwAt{M_dVlAz&;DQ`mgx_0%-+;n-MT_j|kv7)KA7pnkZ*T+xSV%wvp9$k$S{Eh$o z;4TYj_k|%{g$P+F?liGfk}?y&M(M9fjyZ~0GH9&%;}EUto`hsW$R(R1xB@<64NI+4 z2=k$5^#?zxRe`*4z?nnmDP~3nTz?^d4|)sXT&TmEOQhID$Q@s~y1J~2N;`dD)iocV zX%r_Bx#9fXNdZ-t9qhZnt%cL^TYMtHAvq|A$5jUv(BmG0{r(rkf>*1$On2K2+-XpY zVLW{P2D1U7Wd;}eLB&m8FD1nfDVq4|UNcE~$JJB|2R#+-D~ymh4uN~vY(93H^A&;e zt{^ta3FU%u6mxyiKymw99h{UX8}6SruyC9co=%ij;T0*{g$75lqcdn=C9o1CRC;&> zu%X{#p=AG53fF60%Z-J3sT-yyzq7PF9`&43 z-55to@Eb>HCmhhQldSiC5UFjA5ym(J51x-~ms|m~Ar+oMe^Q5PRH1mjtg}Sn9)*bW zl%S!D<>Ie@c{{`Oh(R{e=N;IRdS0IJCc&EubM(jkMg-5hqu?Z#Z&U3>`@oC_ijyN2 zz?^=k0t!iFpk*zdbW9Hf*ozl5)1`QVh`p2}An@G~a^(QAsjIFPfkn#6Pz0Dya=uzg z=P$85jU{Q1#5x&61l>2sI}r^Wgt8HgOI3k%o!*lnN$Bhzdg?P&Z(ugV-Ff)!)7JwF za_6SVflQ~b97;d02`?dHfEXFNgCQ!`Fb8Ar*#{L62<-41oB-dvnv9=ehst>U&N zpM}&`W!6*a1n&k^0hr(bk1U%Cq*H5Xu4!r`nbU+uY1Y!~+zNechuF}fotS$ERb`iM zAPuw^o&c9U0?}_h@JRnq%Q@Ub$K_f0Ee!RD-Owh# zJF8My)MW`T`P&a~uYtIrc`19nEJI~F?K7c?c40V#t~_YAQz0ce0AwRbgpLMuTa$cI zvK!2kRE1?+7;XlEJS3&kmeK4_U+-X%z?ecC@F{PthsDe^gxSC=gvZV4?mC9XK6eTO zScGZ?XPDg(ejFpoBAKAQQDazW@Y2FpTO_FJ!b-J`+63U&Cw=IeQAJGRG*B17A% zh8nGeWJ6oL9pftrZB%k%paFoZ++!q;6h$geJ~;I$us0;BXC~Kvg!x-jGK3a0$XFp4 zCeIai85mk-YcTxV$4z$Z-ZitIR>WakSOe- z7m=-q8i#a7?z1tC{0sE<(T&crMGeUIgqcm+l$YHJF@wZj#Uy!mxqA2J0+S&ZwiRIm zvOag@L_6({=*^}bFUw+4Fx~}~tIk>4Q9o&kw`jcMS8{j^n0Q>^L9#QkgNUI#k@F&{ zXn;90re^dJ#K0>I?v9MeyPPIQ3Q_d%utA%bEX2k58Pnt7qND5C1j>A+irU-oOch?m z2@0SFv&smx%?n~zn*#yk{qyq+=8qCx^NS0H2bn|+C+Ld!Pdao+KFcR^5|hFJSK5o2lMp>oxG)N<-Orz7`N74MCNLW*MbTQ)Xo&bd2hnX`>i23_e{4NltesV-YGeK?AN#73dd{3>AIV zJs*j*Ju%}?MeT+c_8U>09Y0bQwu(YRMY4`0;+#ImtV%^ZW=Ia@s0NZTcdj!Ip_8Rs zRT5)Jb3Vfdc<<1z={#kiQbF${({ru3Nowmmaxb9C15K9$WtcMF3nj#(kFjhgd~EK` zIl_^SDw-eT$@;pbMpbpDPRPs5fih`hJek9zw7BR2Nk}p+n@-l3d5iFEb6Y4DM0*vx zX4vmbkvt9Nl`_FZX{8b;HIwA$s~?U4y~#rbj{(u0C12~Kcq@zf|1X!32>SMp#FtH^#_0ifDpu zgHjB6XtfCN#h4r9ydf*fBM$~a#_!^tv(@a0Fkkk_BYuShcfA6UkWoCbV7v_VXcjt# z9|=SvNk?=y8K>i%Cbu9&pJF6UI~QL*-&cq#k^db1!D|wbDY_DDL#bRg>1{n5-C)DV zeP!pA8|91mWk;CdSE0|NKgb`si(a!V59Zb}vN}3_+*+Tnp7;0oQRIXQ{ppAB?lLhh z`4RjT-%b!PKjUo=z-~;wd01TV6=XJud&IfsJP#N)_a0n@5)y z#D}vA^_yVYDm%Rr=l!^4E;RIzqcH-aV@yS@!dd6+Cy2+lSC_csNr;W25}=QzBAtzK zge>{+=FP{St{R0z;Qje=d-tc`K7ac5(42r4O6leW|JTjW=&y0m(lgwaU$>-C%fjP6j`BZj5kcM?~{h$ zd532;>P_dz|MWit+*IAX21LD3O(ksattw?&-k`n}OvtqmQY9w9ihpJ?bFk!|kk$fA zL!`^{p)UX)mX|HdwVs_X2U_42?Bp?p@UMXU)+U%)f(27YS5uvxVXgxjJfC) zYId@7A+9LRH@r;FH9#LS$T=&BXoEukvLSP9aFGw4dFz~@nrR?Z*ugPy8u?1@fI~r5 z{!hm}4xBh?sLGS1cIUDtC`P8tyV1N_@?lYuD*7-%4I z&qd*D(1Nbdmsx_RW;I;=;Bn`T@bGngak)HKlGJj>dgMTS!-j{^n=8^GIC=+00~ppV zU2=`qPClp*JG2?F_kF#40G44$IV)r~(K|zFEnqsNuEDy~7UQ=Tn0BmtqsK?m8SD>& z{$)fYNlA1O3`trwC7s2IqYhyULvJ|jVe+P?DuAqk^hjClnDxJkG>9X?4N^#!-In1w zuJo#e*+T%1+#H7Z##+36D(0-dC&pXRFRf)-)=bj;cKc{yCHt8$ggKOr0$L*-oG{~C z(x$?TMd;t^Y|*xyT~C|MkGp$JMI=-qj*3x4lng>fOOlL55Nc)y%tY$|1p`9va=p4b zN3k$gn!CPOf!6xn)%m+O>%aN=-M{+z?a%M7<~1iQo*l9JpWdzCU#?J%ezmB2McD|z zELA)sRpqJZsvG1A$xN7Q{GB;Lm2wR~gzbr5BF=B?Qovhh11I287JeJcN0r%o6^+~a7dn`7DRP|Ry} zg1;Taibvv9r_h5924DZP>LkK|{rKU^MZt~wqbIQQj#J>%)dJv96p34N@seH0yh3!| znikXE86za{%WB3LDGR)bqa!S_{T@5a23wds!j-T*z;rB_S5-nR;K3hWcHi!v`+@Xo zkQHW=3=u(Xc&%#j$gLbuU11OeJzyKAp5dK=j>HOMSf!F-!XZ-;MsG%EOWdcd_(U8* zIjsgtR9;zyP&H^gBAi0Y_E<+9j;7=g8He;|E?%?|y(kk?I?ucY!4pCh__DnAS=$E= zpjUOQsf@Uswx$O)7EULb{VwGeD}k8P^L44*argXE^}{cy=(nEDip&$tx*R(sBB9Jy zY0NdG>)4y7oRosI<-9EF-ShG3elvE7Vo~}Q?&Z1W`Gt|zKI?GraY%0VhcEE2=^~ex zYlXqIE(5XL=%5Z)VqHMRGm(l|1sTH0IdsfQR{a6O8)0JKzfeZ@)EOw*F4l82ovAK+ z*5-g4f?ka(BY385n{m7>ifb(Ax~!FnQ_C`i;L`Rjolt%$7fx~ccC!aMx~bFnz_=b7 zR3h_qJu68|%PX8;twcXxvd}XHKJgmJQ^TLj1qrq=K-4GaEOBK8*dasX@zGloZz+c} zvm12K)mXFxHC7*;E?XNKWYB8r9Z?3#)@yg|@w8+(D*ny-< zFsUY6$^3&_#g^lN+15LLC=3#~lgWh3!O$Z}_okC3=}G!yS)q^E&q#_UlM%}? zgqEh!H(VAfQ>q)<(Ew@yd86db5ubvwnr3^l?n{TOC@0mwfo=E1ix3*;Vh~0YqieAa z#)KND8$cJ;k@aHD&u0)#Sytwy!*2rrc%>lw#PQl&x}jYj60ASXDjMe2I`E7xXHbh^ zP#QlewZ%w>dAvs+3a&X9v=37R&S(@?dw+fH-4^-kgzcG-MYncVVI~}`C_D@64Mw*r zmx1k;kRrphbGb3nw$eF9V=oM3ebOV?kT=xUndDQcwbzur6}rM8g(?3$acn!ArSY^0w!UuR2hAoV7UiJUrYRVm8RWuMQ`hPJM1kO} zuAHF#8BzTuqxSiSJ=TbpO1-%_p1*)IP zJ`*lX%xr2FdoMAWRR5&0(2&Y%Z1c19aK7|?o#XX1z`(LFQj z#QC*52Hy^1-fWFG#`HsE62IF3ZXMM521b-g>Va0SJ5kv}Hq|vmdn{|nNITS4;4i9- z;J&M?v!ok~1o&;52z-dw!9USr8zUD6n>ngW+w zts3a!Xcz7dUCcEd9a%&t;Oli$Vv_GvBty1+x2JSxqS;PNy`5M~4YD=~sQrVO$($iA z-6Ce+G-aD&Kp`+taW5&!$%@TLWwXxF=vjlv8s3mwsH)-Gz;i5Tr0t+`mSqipQ<--( z!og=tJ1;=A)0vW1IkbmHpN`ZFC#Kl|)|qlKC{Ib2WbR$oMAU&F)7Ta{q^xn#S15@G z2>@RMZaG0LBUCc#0@3F(0k3`LRF}i?GRFgYZR-FpAbSFG1LI=&4}>XvK;T6Gc5{b3 zEC52`Vg*tXqu|5|@~z?p3J1+~x^u z4mxO|s*yt?W6IDZgNa&|5Jj5a*DW1Dn^OmQ3wOU92VBc6Uyx^FLhKl>=z3bbq(CKy zfI>2&JM24zBbcM)B-2w5_|J{tQfMKr)0Fv#tFto%RGRVyJHj5AMCd=#wA%#ot7-f9 zO?|xpX19bC$`wSRwMxudDlTfT-=wHQXlm3dQ0+_UgszJ!y?lQl5CHxa)$eoq+ejO* z%nm!2)GSJBgU=gEvUx+fQRjsS!%LMg;w!{xV*-Ie=|L}zwPi$7Iqr8{ZrIWw_3#D~ z4x$uUZ>n!t!NNy=W?9yJ2DzHild{qA+tP_jHN~-L@5_RI8Rs7<-ICEqY{BAvOjN}v z@0bB6y1IlY&PKzbTyO52W->k;sB6;g<@yzr)h#~9vx{~nWK9Y6lPXmlPe%iJXepD* zk~@WMF^M(ecH7f{k?leXc|vUmW4*=T)0{Q-LZp+V7^6TwgLo#W3fJIX(Df>w&c}KRgT#~b?AmM9ECyNr^70~A(P)a?DL2@I=PC?rWn_-9DQW|l z@npTKm=DL{5g{dusT5O9B`2HY1|j3P!#GoRpH^ByLU8ps7K3Szr*d8HTVvXpB^wi? zAg&Gqa0+;0ODquvZw$5lC5~gli|r82X)_v986OUutWdjQt73n0_Bhu((LicOE8m%< zTcN=)O*NY#ml(rSi$-*;O(mFIW|IazjGt8UiE}Fkc1%SqJZg^p_WJ4q7d{9bltm!i zp^kGXc5h@uyi5agYNQ3wzsT6EQ)~{uqrRa#SImf&mfUGC{PQ z@sa8kqdcTF&CM{KRaak#Eoa?Qr=Hn=3NM{~kUPx(~_DR}!2U-Wz3 z-uP^PrIXKbnjy9s-ET1$C4yF>F<>B=VXJ1hNpws-<0lW9P^PW*{C{23$|pOu5RW-2 zaOR7S#hZc$Xu=#tBPDge2}G9Z%63ROiWpQtIln93TIb^)8U`o+h=9e1~c_>rO z4gZLiNFHu#{x67P7m36h)UF|#ov6{y z@}!aZG0pi*9;MQZN8GjvA;i))qbLoS#F8*IjlG34vq3eu639HF0?8EmcnNemSmB^# z6expY+juJ(MR@S5v-6KY{I6#N! zrF?td;$9(Ta>~^7qGOr- z1Fwa&bI((i5r9=W(mb8W3@m`fqc|-Fx7O9v!Qm1U!WEN8HA+aGx>aUX4$nZippmcYqVWn!Z zr%Q7OuaF##5C>G0T5hARAcN;pE?Z?LUUP5DXUbadn(&N%v4`70=nF#-f0DqX?OlmO zL1yOR0KlV=cFBPyQ}hh;uZLI1@d#I ztn%RO;%bdXx>PWneQ;{@vV8D3_b*T&4~}-EBJrhDwxr~#=U6;BS4xwobWhRRDVj1> zh?a9pzW89G>HSoLfS*cgSHf`hoc&2A2M}&$qIx-YxCU|UI{cBqjfJB1IW>*rtihDf zP)W3+VMc?&s>G;~0dzUjlA@?@j4YG15&Z!f6|-QkbC-t;DO5|z(!1yFAKz}<-bNHv zC(P>)Z!h3`nyD;0Pk2~ZT z4bb1J48Ji8`Hzm90kgLjh7RVMWm?;{jz@^1@?;qs%cx_H(HN%|8;h6Y3`k!H&_he! zB72mez`;1gu%YL%Se#(I-%FL1--W(-rJcGMpW^?SP#3PiSYy3oysoa!O+F2v5S>H~ z46r%vDT!iXR8_89X`9XpGs&?6d!_XRm;~OPU57CgOO+U}s=y9YH@vyLRMf#Rjz*!n z3YBGk7I=mHo99l|POT_}*^>r+Z>m8yQ4PG}sOB&ADzCsF1ww#O!_YheoZ{lsNrGKK zvN2O+o(WLQ*b>3eSNVhB6+(?jluZO|!OnM8XC_D1o2$$B@7~a-HU}~7`s!>AmT}A? zKy1#KW<_>fxSVj=+lQB4(JUNk1Uh4`12x?~#WLR>QOpq?az@Eo7V3?O2~n|uUirdy zfSOH$4=G*;{%NN?_dcm{!p!!hi=r9;$>9u!YRfcC`mJbH$kUg2;&o)@v*M&|i@_TV z-b+PEQdKJ_l}14>KfEv-@TXB}>|-gfp<-82$Z>Ik@j}>x&^;FTrBoc_4)6wR+<`Gq z107*722$I)I`au!$&^MS?E>2QaN|Bb0ebo?l#dE(LlTSh_o+2HqgcfVY4RZBq*NM- zX<=|rA6`!Tm*db8OzD#LmVx-D1(7Xb(|TA#ASkczf1FO=k#L%fH49o1Z5MMHM+Y9P zTFBQb<2xBzJpxDFtxY^!9gb3w<(LosfU;owHfA!ZNF3-=Y4Aw-Q za0M}ynsJz_JH2a~ckAWZ8vYU-gRsr2MoSwoZybRl+Ehi&M*+gfXam=!QT-MwE2=l) za(*d1Z9pG^o(^M{71Udrg>p4yyJH+-NZKEYO`pv4;s8?NO%Vyl@NgcJ2^z=}Ffg+j&i%PQq!Onc=7n3E3OX=|eNXf|aZYY5`9$_~s`R-#in z+khiKzrX(Y;SJ;n)V^Nx(M3WGcOW`RB`Og|*b!^gizVmaMP!JH&N;~&pOxy$x^~ra z`3x!NE4(e`L6Z#CI+Y6A%!p#cX2Fn{YC3T*(7hY6zuT!K`9ln57xhv~ez63K8I)I?j8Q&xZuGR#pN+L_jJf+7yL=TEMZipE@=DT!=W>0FL0aWBcSDb7R*o1wYTW9~ zS8s5T$<-Zc$1_`u8n_i1RoF6f>EW>53Z|1cW$73+c+yxH`b(LZQoAxf!X(F4$y;OB zr!r-9hKPO;4oWzgIMTSU>BQ}4r8S5*9pA8Txp^1LD52rtoGcNE6Yk6LP-8j)j`+1! zi4&0hY-wkO3H_tA&zd^%9&uMgyfQ$naSqllE{nOyo)GQ;65Ja<;m7o1Qg&-Urc;S; z1jR#dm`=#thbC7Sa+xYL_X7c;&3wcGj^Uj^q8vRERtWS^cuZc?a7Wx@GUv2j%xPya z6?I^nZS=)U=nqewwhi1!yW%5_VG!FRfbbn@k3F~Lt zsEO&wfz4^9^iHers*(Hozucj`n?|beNqZbLh((Nw$O2`OQ=mf89>naG{})855?pA{nPim z&5?0b*Z$*bTC5tzxRMm+Aw~*=4p>m%G3nYNER3lVNmL(Qyeg&g{>0idLd3f`s5l5M z0W!pm3n8?*D{{#M+0u&D+fT(JtHc%&s;#t4T8D)Bj0sF7Co0slTEaOvzMUwc@Dv?J z(4}z1W`^O!d!b*wkk#5kGG#RM)f{2?F+-tAEI7~_Q>g9-fwy-%(|roa+$Yqk@=9>` z98hK$=t@OUrd4NBb6dRCkdkZ?Z=u5COJkp6Ta|Bu01w2(uHT#`N_?X}Dcb{34QMlP zLBTGC3&5m|SS1E^+C5E`O)!(ZO!X%TA=Dx)N|Qrmn2rQ#O9%^h6Ty|SDx#h5Eh&5w zsHe8v60zRmISI9^iuZ58DZYft2&g=4J(F|rKyn%SGf!WLTWM95wWWoSj4Bn(!oc`V-I7whJqj-k z4ef;pQ;PJX&@e}rkzwTRY;3|AJrr}KU?xdaWGK} zccPyR7^^Af9JheB%i9VM4mwcB)5U8heZ6p|2^(YBk)v@^bg_Y1>#%^GN@`3PWaE@4 zM~^psmxGuj;*=e$y_;2d5Us$JP=-!}+w2dBZraxt^nj^;r%7cZ$57{tQB++7rtIeS z2?RsnG5LP?`0WQMs2}m?^OmFEsSlbNOVq=FN0q2wKECh96m{+~$jV-!+92*zVRj1Y zhd=Ic?IZl^zr4GAb3s2Uv;_`CF857leJ{e**-b+F*j$mKlM8F3gjO;xLrmZi+`|IW zj;R=eAU)8%SiiFxE85XO(R_>~xb6E1%3+*--iMuQnDjKN4;^&)4$EQZT6p-bYV1M| zvxREa*PF-f?j+D~j$d2xd6`62(=bppI03>t?1)==Z_><%ZIYRl-=VByXUntK+CUAj zd6KLSH=+BPo$6?F;n=Bbw%lM8b~7|Vv#iF%5|qu zV&BvamgMlOecK*C@0gt2G%Qo+q4YO{xRdwSn5pC9q8tx&^UD>c;&F% z-9JOVke^r?k?3N;AR*5MJBko}A*~G4mM0*!Y1yiL>gnk6Y6JEQjLpTGIbMio6ge~& zzDIP59tnBhwLXlnwi~EOm18E`pV(VjrK}|7dDR{|<*W_DQIf0&>^g8+TK*VfnQ7lt z0Ri!jz;2bdFH=oMGfqNwI_-erA`%O-9(*nmXjLXk2xVnsC}VceAx9RRg49{Am;z66 zO@q3?!=kM!`cXl5Lf6|7Z_F;jLXNqZrzOkDs@5w-Ur@TkN? zH>j=%wP<19u`8RGFl7Kh@R~ib-by1N(itj0$*si{jPspFW)r}`3*|!yOCYOS+)0#A z7!Gqj8UbLUUaA%uotvEMQYR1^bVyHg86CjXbv(Ya>1`xp*oEq_7rVf3n~L3ub`I6Q zLz}7&8urp>C^;ZSk|g1AQqJ3i=ca)Ex5ZAm(T2+4bQX&~RhlZCKIWw+v8k12Bk8LKn zZO!~7JvcAqS$AB-IU07*7KEJ5i%?HJXVM-1#;GRuPiVHi?5Kud2mpvB<0dtGg7mDZ zC`QWDoF4}TVo7=hKHW)dObWA534?sm?q%?2^cmwTECpRFv6?JJX8Ts?ppb`hs&|mv zVBpN)D>20#?rV2|l?ijp*}ivrg0TkpZTZ51wm-tJWOUWk$QR?$q?9lh%#@tvnP8OT z7|E)A97n7JO~4k9+C(kvq8kRo!wi-lCV0F$K{uUn%&y0zt6ELbaRqUwJbI&4LV~o_ zCO5AZGSa-`Xuwf*%=J3HuXf4WWi^S`49rtR%hhPYQ4nX3}K2t?S{su z@T^B#QCEFRKn4lF0&csboqVDm7=5Xyo`$YP9L;;Z1|jAcqnXuAU0^_<&RLIXi}xmb zt16ACsDF%pLI+xiLgzLG0Ms8CQy4R%NQw;mMrz$CM8aiq_mS~RMB^@AK$<<39@7Yl zY)&S7L+><^!5ALHJ&;Qb+76`SJUu<$KWtz@!WaUI`TOl75dH_cm3uoDJqp45smv^= z^f+(dV4ave7^Zq2xl0uN4mp~NZ;w+kFT22avbw_5-GMn?ek=SKcI)hJ?>LDPcyXFZ z#O=8Sj}MY-?jN7FJ8Cyl%)(uxe>1!=YhWJ3L|-+P(9Si9drs7Tu$RNSOQdsjE&i-X z7+Y~<0mtABPlqkA@rTp>1^{hZzW|GYPL42_v#iAs^Bs`N4} z1R?Rbq^aoJmG`IkbJ5Fsf&5pJ$bePRiXH_3Q|t~-pOm7|x{{D60cPA))4>rW^(3{2 zQcSTj6brLXnyuEXJu{Ug#of)CUp5TenM&}e!XX`l78R~+$FJh;T2>Y3suLkQp(il2 zEc|U^1x%n=ISdz~NT|qf1xbq;4lBrvQG7M6%s>1q=;#W)_Oe*!tBP&lPN-$p>{4LCEtujFkE`+zR;&5kaX`yZ2KnX(*-sA50`{$b@HQJoT z`+(Z1sw?<7rH^40pc%`1P7$$MECI8E@O>ep1_RodEVw^%6|<4^&>9g7gs&IcsLT(T zV=^PR?oLcG?LcNUvi2t9-Tmfyk73z6S%5}qD8HCvHPHz>a?X%YrOL{N)ymktWyS;8 zCKR8~3Klq9aWyuW^Oan^&fgKQ5EnAScsMROmm2Mbk6at8c1fVjuyk6;#uho$BtDMZyS8G~ zS>>eqsm7(wbWv9wo@$TWpT7O}>HD94|N80s9SYYW_Y21XVM~OtgD5ft zxT)PAT;flAIzJ&b4295MNg;wi=J;VWw4^^s3mm%&mTyd(>ZT(6PM&r375M(pSI+3P zGtrU)Z`X?j3XKb|nNS}V!d?FQJc}BR569XEI#gv?cjQULX9ty<9{NPMxkLqrORa{% zY_JmfoR|BqyEz=b9@sm`|GI?G<4z>1Wt_=-b$+g@5Oa-4QL#8mS(zFrt~g`&gmpa% z6Vx3#+C_L61aGd+7LYpK2!!As06##$zw2*Q5d*XaP*G@*Pv0I!l)zsB%mPhJ`BJ46 z*BQ*GnxxPrj2%4qP*hYx>IUKnokMUI{f|m*Vn>L0)P+aM!gv8Po|)V&DGB?_3@t*x zLC|3?KE5#Ifmtc)x~8TQNF~AxCvswXWV5gYb8q9$!Q|6fOzE;je_#^Qla?fB5Zns} zmRNpJ$*Vb9sF$&>+qh$ushI#k=a)79VTMa992^CNVE%2H| zv>k}}GQU0s0UxecOzKpUpn$G9H5z!o(K_UcW+NjjEm>?7Xg7nNLK=coU}OvgYYe`V zz@=gdxGUxoHoxVHK6KUgt+7^s$GRd9AdFl99oVrrj{a08DfgFzz@HLf6*NpHYJxrK zz{o4pGmj(`8nLF}6`~-J>!0hQA_UtQ#*-M)vE6fY3?o&&PH`l$g$@Tc@o5ku}EUr9(Aw zignFRr~E;tdVuY}=rmXs5IDj92uG95B9v(toalaSpL68hs!>?k;7gLPfuqEmP>99) zQ;FawbL#u`7;468!bG11FRPc^V0sZlqitT|os4lliofEW)hES=&D||t#`YOUqCxJs z@r#;_y5j_0$@RkMqtR@hkLQ`Mpnl+c-8JBcd`Hur*bYgw6FYy-EFB?-Kh_sFS+&s$ zS+tKQc$BB8?~>}W4#ZhUvBN^)I~|PG$M`s}o+Uz%d?W6%Zg8MQ>Zih6oW>Dsr6sA? zM1vX-VZ0IlIRNFl(e~7sN48WvQl<0w5ri9&J2VTKl4>2diiO*yjpcsc7fLSS)Wph0 zxKAuv6yfP+WGA^5?&28J@(qbI*Zr6cqo+4tq8f(K&aU_ zF7R|x03juEzCS4>J`cPb^sYk?Le;=ChlM1QWYuwz*hOfh>$_o%p%sCL19{c zA2Leg%(MsyO=X|up0@J2(7T2^Ycl3m-;0dW9w_F+ZVTpLM428o$NT5)X0QD70}Vk# zzVX|7zOi5){mivjG@%T)#LX;(aok>7%OcN7cF%|tLiINZ&%j3PXtQZ?a3&7+ZI4Y0 z?=4I`L+~IBb*g``^1K>FfJA~G1m17&o*tie7&ZCMT-7rI_jIro}lzK;Y>OpzBB; zm&}$d(dw8gbUN4aM@(;YAiTrPaCap~46IH~6+|o;qNPR$8|%0K6##vKh-3QQcb+tE~Xrt{rqBG<*GFd(XZ${jPp_n1opz}8l- zRrs&qkOk`y{h-Q{QKEe~n7?P`#2vuI> zYO@#sY3wl(MP+CqwJt8_tnt4;alWbOOiAUE!N#)A%eru!RRl+QpotYMp%?Y?j2f+j zA`_R2o}Kcm1wlo3IH@K{2Fhx@`RV$qV0J<;$^cqcrt+aOUzhf;0XJ;mI(t+SnBcoS z!^wEq{xm|27`1Mn)XNJMwJ*01-+w%g19_$vGrX#S`awqxSg@}F$V5drVa34w8xphs zAhm~1kg*%dft)iGhaQmL&x|l@g*%)ukboR3<@WIj7s<$Sm71Xw^ZaSc(COv*52!^Q?c)M%2M}V z?D+_b47ulW$1A0d{n3kniP7@tOOFmC_4{jvMEyThHjTl*iGn(;jo?$W{wCToSj+Gs zez|%0m)}2s{dUKFMvv1llLdpNXCDX5O#c+!*8ZRVbQ~dRURfI}=y%ok!35OVH zAL2;K(_HnKZna6j>NTUC0wY0@8zQ7lfzm!#E||v-6Y9&&qreJ-Hm1TwnlW60^YC7- zArQ^Q6xUbDr>r+ZR{QMWfPwIUE;ipDXzkz>Gc&H zKzt~yk>i09byO*XW`SYLhJAbU$KA{0ex8qTgDWFSQxyGk{bv5l&pn#`^hD02!(NtW zYxOA=x3w5ygv8QZWn(gN2#f=8?2s?RXl!PUUV~P^CaFT^!xN)HP=42Il1kC{gEd~) zV(%)<`s(7pUV3)AqI;#`&=3x#)&)UV`GpQcgKOdh`aMaTz%({o)ZdoBQY%23Rj?W~ z7C7wOw4LynM{UQa6A~>qHvrR-B8|Ehge@9{XxIvV7U(&pjh_xn3-%KoJ@e-BocEp~ zarlBR8u&&pR&$UcQiP?5P(qQfpHb*(L#yRq~J-& z`-6U_;VJxVFf+xOnh9GiFlk~UCp6HBK}y7yyLo1c@07N1g5LxnQ(=}}+_kp22cw(0 zrF0UHoYIsUha;65n^8u}*U~#6!`L3&mHH135}{%%2|p^1p@wP63;QX}O`@LyPMc^i zCzL9c+p9*IiZM-M>WL|nbR<;+2+4FY1evkKl(Z){uZtY1fu`DSAQQ>IeS3N0EF4^S z$;f9%nar?@mfDzdu9dhpY{l@!6xrzFHqt>kQ*@n}`pe0p^0>1pa*h~7NCOF9D`lu~ z!{cj;U6^`ZZU)yaiu@z?VSAI*mAI(gDNx!B5jl1AE5UW+jJr^&L9=Ixxy!ggg+8}? zL7Z*1$z}WhN7Z*MIgV^uLIWg&!H}t5_Ioup`&rCl7W4n#FpDv3vwor~Gb=?zP=b(s zggdO86&1+y=nslBXPMbB=>X6_1b`yP*O- z8N{n|`!Vp50&rm^G!St_SD<^0tg&Wko8OQ~S4&hbl3I@+C2KfxWPg+Eh#68G2PbtY zE$2o$`kF*XRcg$$CXpi~c)4wkxH{J4u!8O*xfw4#%Ozq$S<~y_*3PK6Prz;$m2n9w zx_ub&0=&OxuhQ#!*Z$9nNGB31rtzS;W=*NHxPe?Ki!IeF(K~-=>ou~emt{zNyv;p(dVM484tC~#Uh*}}ukO{GEzR{61w zTu79a3j;2ceS8Ey0z5@OQK1S1@X^0uU(DP7xIY~OE=ag7sU}?Rt|G?>QY8pQMfbFQ zsjhE`%eV%CiKr`+e@Sy^)smR1*NN*$e7nr;*CV6xbR^*u@c<5mB9HdZPHu|I<#g0a zNeE|H4gJ*YI|YzkYKnSDRqF0|15Im(9rX4VDn(VI87%-8rz@;G#3TEQs*oz|&#AIF zYPk*~22J}-KieZIpT(eMX4jBx12gegvy}Z@MvL*7TF{>2K}IQAGBwmx!*7Z-Tw_@a z#@5Z6c#5~%=^(@v3@UgSUSG)$j4^UnV5bJ@oM5nI)MirXE}!1*HZ{F(ne} z<6vIW1n<15IudA*9|KleW%%vAS=$gUZ;V*sAMQTF3ER-cp({5KYQT;aM>(HnqUz&2 zi)O`_=x*RtqVk6h6foAl+H%xJLrm+Mu{C!%hn4p&UE+ss4u6FS@RdEPte2+jc%q2Ec@f|-B?D4RdbaOitfC`4h4K}XNg{I5$mSyl}=hBwCbxDs=wmaR5* zN2ar$o)OpyRAmWMPsQ+Mf*5&)Ga%epN79y@ff!b79%mRc^pg&U3ybOs{)1Q;QM@&qPd4b?t&FSgYN~>p+s*Ne*L8v^ z@~|}waF_-$Ef09G&z~NVa>fPJ_V}oV=By>qbz~f0Zz@0yH=A;Mi+ME}e_d}XCD76= z1QZ8d4>uor1EXw{rXh90++O%-6WXukW~Oa{rf5`HL>OveznErhnM$V*Y=hdVO)JAm zDlCYd(b7?=i=tygYMAnN@q_+>Z6|I=2d%MR2p~5M9HVOov3Zv3$Zi;eyPaGwmd!+h zC5r%Cu3t2JBscv*KX-c;@_=~6_m{(231%=<7 ztI~4urqn!9DQg{37a3Z@*n1wh`CKr_fc;9qGj(IGwEAH+ ze4$443D!EaHN@ht#s@i1JOYpxEtLIZV2r;nb~ZcQQ*mzMfuEo5FrmNxc*Dx3BjDU3 z_wbh?ML(EahT?bMf9=6S_5JnmcD#r;chvY7(D1QA?BMa=Y~DTJeR}_dbTdrmfBf+S zjOoVlS=Y59jp4&;dqVzZ9m>B_L`Qx-Ip+8*gRDn%yKsNem1ez*#lme2&>im#)PO=1 z)j_IJ!#?}<&(|@@@flX3p^mw>cvzOAv&gJ482BIcPu>w%2y}^%w;}E`HkqjpmK21qre2v71tX zpkum5t%(X*hocZRU(W6C*h&Gmy}JS5JaLGIXC$+o!uC1?QMavbGp5} z4+;@O5DEQCd$H^k+8Cg`zyq;XO*o28O)`j=P2HeQ!M8tty}VtZ+;6LVyW+$q*W2!9 z_rL$o`hWf3YMo8TH*_Api;C`Gwohp>_3VHtp~`LZSWQ)>DvfxaAPU!01Dm&Z+gla_ zE6`-5wKC(Qh0BJy)Ei7WCTQeD0x~(IcG|UbFI)v|l)<7^Wcbgdy|5q6Zr1hGIS(g@ z9R^K>hTf@CAyr=y3whxTs;(8eJEbJqaV(QZp0kON-kvI@qI7inza7q=LSRQSpCEt` zpPugj$6w!n{`CI+^Bq#pnu^|FYzpt5@8Q|Mg&$8CoE?L0@T&qTi^WB!45+f;KLV=y z@eUmSo9Aa>g9;SBz_tiEs`3jZb~I%_b%i8V!wTAoXfczSZyM|=={({3n@xr96BY!) zxUK*UQURa{4ETpcQ09s zw!k$^CU-FTaZKhC*tNhd9d_^#Ihx_oHE+wJ0k{_3z}M(g7q5yP8P)@qKPSESy^KvU zpOm6TZgygyj<2SKHNHmWDY^KR@j?3Beh|HhxEmg!t&w_RIL^*}1_ab{9K_ z`3^(s1h>f#YB!n0u3ig3M$^_j9enFvl4Ooxgh;I|^(d%SZj8U{gg7@z&Q$&p+(YB+ zi&!EU!5v$|^OQzvQ_pEi!9DD%&xWBcwLjFEv5&)oc=JX6}R+oW_i*wo}GRkp=|`CniKpipL6)H<#Dg zYC4|FlaT7HE-s%G@8wQ64~vS~P3E*$a!*|d4&bj}JKh(c2GzeCq=K)6$Ya4vbhvre zP01`TduOgLUX2R5LV5zb)hgPDzS_v_o8-3db$5tn!nD+4{i{2S_ zZ(1PG_jcqw@-D*(uh8@mNn5Hi6g`=G)=tKZb=mi!L(6Bm`)Tk)Zs9J9{7Aeg(^kYT zG@IRxf?0{#G^P7vqQ()j-ve=ymd=HxG;le7~?8E4WCFv4l|l=3yqJt)Nu^G#!Kh(0hCgWLo`_W7RLS9At-tR=B?{414ksy75#Cttt6q>Y47R>*)*_Ai44-# zP;h&vTgtvmQVG;0m&2HVBN?p8b0@y1fumLz6&@Gbd|j4!?+Jeu(L+{dW^p3#fPm$= zmjKi*awnebb=8Y0fPgqUH%X>ocz?(F$#wPh#~zGb1JBP4kyS#~{NX)-Zkt?qY^>|k zS-b#Md1!~1(-r;5HGgR#aae{?{(WN{){M16{jNt6Fk?(h7#&?puM$uLR+2GTaEI-W zjCkYyXOOXOn!dXd#c1 zxQ`GD*Uy3>%>9)jktSl><7BbE1j-v%v9MEEuIm}yau#BLf51P)D-myAIr0|Oi9yT= z(q!~Nd?Q7kN(F~ink^-H*W;(-tA~`J8ZQwIxDYHf*nN1|D}%y=5XP8+k_$4x#J4Vb zbI&{yX``ah{vxaXDM`|z; z?NksrcxX8*97ki{8fAv(RgMGoC)3Qigi8d==SmF@iEL)~;z#&HM~Z^KOVYVV`u;>| zP|1R+v8EJpQlO!mhPwB^V*G)8rlqvCd7HQ-J?~Jjnd_z57?? z`SAWqU7|mbl=@<-V6e0O{_PilMZbT0`ThGVGOd2T9>Gj>r64L$mKXE=|NZ~J!xA=w z1nx)8S+NZaD+0wpi9#Z}Zc$pKhE&T!r1GitJD3j$t774tmRmN#T;O?BavZy3=U8ua zl8#|gr?&s&+sib&ex)jmkx`{qv{T;6L=s->nj6+I^QsefMiZPFRAmlQlB!6O$4u>H z4`ANm)L_TQn2rb|3qoDy9% zGb}XDM-a?i`_~JZf2yW|mli{|2OSGc{7wm^#}>`2Duw|>WDYReZB^6;{x~>lJ;!Ur zTc6bR8#y675M}o97~&CRT`*LohjU z3olAk-Ty3tRu)EuR{P_OE$M+zf$EJ%tlx~77!+ZXl zXC*mCnOu+e0U}UjEnCa3>mc*BF|`_fLbK;YT}hxBX1N#uCu6!@aNKGYreY(hdc)MS z)EoV!<@RxsYTb{@ffz^4e-81L3G4JPTY|EW$(>B92BY;IeZfb@e%c0fkz8EDjuHma z?ER6!HQRA1R!~VD3I}$+681aoN9Gzf-gE3BgBZ4C=<)G>=klUnrpr%4|9J z8_mW+X#<6h2+S;F%rN7{x8QW4L}69eFE?VseH*tXYUKbHR#Ea-mUp|j9wD4TvE@q*(E)>;wdup95<6xTCQ7G)Md*fWk z@jN0+^{!b@y1<;=X|4BNeB*PjZVELnfs{9>9|KZARq4@i zuS-`h@UxPFD?u?j4Q(aqgg>2UjtykHQA)1r`{2um6Z3=I+hs+o#wq>1cgjf@FWA(%G{V5{YJ4Avz@Gok0TP(a=+Niwf_} z>#LQl%Zce@=`D|zB1NR@-BG&#AsITjR*Vl8md=y?=E3WLa`8;mTgRy{r3 zKizFh@)uqpGoUk}SP!Tf_ADJ9eK}D<@gL#6Hw>W;g)j3X>$uiAZF{{Wx3%zNit-#S z0;|FH=Z0KRe_eO+jeT3+(KuKu%_TY4C#?tzpX7E!*?GRw>~uL=Twhv8GSD`TjTa^w zDHs3t;Q_c|vjR6Y2NxOI1-pV=miBC-iO?ieV@|Zz1BKX1{FIRTjZ5kG!`t~RMcm$S zCYyMT&l6h(fEAuqbtTefMf&qpDl&!`)t6NCm!Nucl-Nr?r?WVx3%3|AVG1T0|0U{dsQ?5P{dyp8L zwvHi`h1dfqri|3nt0$5Is9xu2Brcb(kQX2Fa^+Z?wK0J524ng86DpI6gPK1$S8ko_ zxsw|a!;p0H!46kCiJ+;`XEZ=jrs|J_PMNV&FPp7YBrYSUx#QlO9z|^W7h@xHqk82 zqQ6nUm3a0()E697PlBGYd>gnX@bjBh9W0c9o!i=N3IU)Lmm*2aSttu$;ginOC&`DOwT#;Zf z5w#poVq;{~SH;3RaTh9eK)Xw(tr`9WhfH$euhD4DSEt_0G*0T;=>WtTsXY)!DPi5% zl2nN%&tYKT4Z9tYc>rAN>Q1ycaty8Tvsn{7REu?p^tY*Zc`t00zmuS|_|>Y9-n1nk zB%NG5YkcqOh1zxt*xvY4J9XwhwCdzHOYufu)0J}BJN^xkCB{?Mg2I2B=dmLz zxFK*<5AsB#i&TYeq>NHYFWA07G;nKoz5)lG(7c(lMH-+?6*A+vtbqehntR5V^@0&u z*Yaqlk#I>EVe((R?9ZsOAX0vIh4q|UEP1KlxGl#njo$B%5Q6n; zLqt-Rc^O*6bVYmVX(PM?8^P6Z9FzahUH^GFeuW6l;R{fOEm`|n5$Z3SXw`vaYGEoE z;#>qO+1k|Tdd|JUrL6$c7buzCcw}(^dK>^Yfj89Ll-$uS9l(dj!}$a~4=At`QlFR% z2X76uRl4D!?sNmk=IuxOEAVY_>fixzmRTg;@o(eTIm$X4JL?KDopV$INg zq02|n@DtXJwT<6r!4GfNECkkQzRI3up)w4Zt1dFjXvTST2>Ie26d4J z_^%g?N!u%VU&#GXyMt0x!Cji|6_I-E90^z;r{;++DskWvoMH|sm0G(Rt^xzKlLl?s zoAAMz^n>oh`0ojEJ4vx2xDoQAWSLjmJGEHn#0Mn&GG?Ap7^NA4f{m59;Ia!zsZSk{ zGb@}6|B<$eFVSX~+%am>z_D~DJM-ZVU47{Y3<|t;CMSt`QJsjH_@30}gyA0mF}-kC zF?7bJ79`EAJu4GYW~ja{k~lf&8P4Piay38$GL%S!>zjW$2}?V(C1_lPD+#2Dj>v8% zfdGoa&~YJDiz#~@-ZTxcy)Dz^u!)O*XORim-bZVp+EgOfgR7q3ZnyLx3V`aQCu3!~ z%+%iw``i9O7n|j~5GvKUCoN01o44>RXE*Z8hFX+7lRg)`!JhBQp)JR>$K1Z1TW;in zk@onawVYbRj{r`qf)J?ObHBUAjo>`76WZ>sM7tEeZcC5P(oYNc-z;BH1w6lLl+G$h zp(%s4gCn?xM_18WrHM&t=sFT2um}-RWWt2v(&9PNI`_inh_b?;23xxee>-5#;gmgZ zZ$&{7Gm1fZa*7RpE8sBNVPQZrE@fXVPL}(zOyfXC6D~78hgThELx%z}O^oy?mop^e z7;B>$VwE*8)OdN@TyzfLQc=Pbo(9*5Q#rzj>>i>yZ8Qz9XndwM75}Mg@=VWT`<~`l zQ^_pRa)(-~XKp-OtGUOM7o1MS{;-Rbqh#80*F@7Br@TedX*X0oU;{?BO3vSU89Qc= zYT!Bg?*+f?CGs|gw`PemjVsRe5>?An8~kpk1#u|p8XrEgD3+XjXYawbBh-;@%qwh3`{lh8P8#)xNw~WYnpJ~Q;cP7bI5@rYES%ABBDn$ zGhqaNaEBOGwvpDrh^rXa@O{W6On$HtJLcB+q42*(z?%1vDzVFS!X52NB1i#`g+<>f z)!D0l-4LK-2?p8f+z?M!^JKGI=*#arMbFHHUosZaxOf>QX=Fnb579W{cc8M;`bu-` zTaAMA#;SB;(PNouk$~DCir&H-v(d{PnP0AI5A+i0OtTt;j&aYMSIFGAcwjsGQa+IY zSzO(w>rOi3hKI>vZTf(SVPuI=^P@@J`<~SU0wd24AD`|q68rtzchu~C1Czqr?_YoI zDV`>bfKpmUMp{fXkfugcdL0F@F$Yv7+qGCtiz};ml1HQG%-6|5f9AFxSz8kpbe9+fH|64?;Ds8g6VWJx_2te|qmxTQx@w3hx293L4n6vQye0&6o zxyFn>i6UpS=8g)j5er2zC{8NS{gkZvNcD*z1-TCz9`8hLOV|begg5=q@2@$|&?6`t z3vXz~Ax4M2ALk#awGGrr`bo>(HQlq7Dm|kg;oBFxc@A{}BgVXj!x>%A(nT@rGnT$i z6RN2-osZYPl#`IjW!J%FK*o+mh;t2@GOB1%&s;iYotzkpmUuCtSRYDC&P&cI?qwe_ zZEsia5DH13a!b9a6n8GFc6`x9vxK{fua&pvWH#MsUs7GRD@`(L?uCV-F3Ay5 z4(~{M4!ogw)s@jmt+%X_n|kUQ8bYfSZ=C61x^(928Tk>XTt?x<_M;h4Piz8tdgW9{ ztIt?kn{7JGfR&Aeg7@&ZR!#lSFMsw|(8@A~s{Jl&)b@P#8z_F9VOA<4*2Ce@W)+u}Ox8@;#*X+e#zXsh#rT)Gl}CD4k|kzAgtG-itWB1u49p#rj#phG$%nP{h{ zPI=}u&Zvvhx8cd-q$n>FJ53z!8r4pd!ErH3byUF}TQw>Ew2FVGO3BAarM&EqC&Yo# zV=9r;+M+lU!N-B6l#|+wpF)&0dXr^Na8s~T+4nQ{PP4Ak*HaN4xe*ca{oU;?IbT>| z9Uda4kFA*o_3(hh4YqopFXnGOwL(D>B#AU(9HfTk{>)<8P^mqRJ*6<}AMbf(M~UiE z8;lUMQXtYL0%d`dMpU(r@>n2E3>%sA_l+#T2(mp6cgJuSl~ZqyqQtOX-i0$R5rN(7~f9yCAU!*w)Cid8_ut`a-iYA`|aJF`#V2_un@_)v1nLiN^2Sgt;YJq!jZX$#lOTPX9c%paDV` z-|r;&>UwmK5y&|vMvixK3eSlG965xo>s5~md)R7=I~t`uHu^X6k@qR-W}xz6f2oJ_ zu)4v7cKQO%b@agLKr+X};o1r>i#yI(e{GlbEb=;h|DK+YaYilTJC*%r?9a;VtFmt9xROc#AmQ2gZtkxza~Qx>2=N868ExRaFH&kV4p8AS+a zHQkm;sP{MPnDTgB`l=HzZK&Iu5H$CKer)>P?lZu+>Uwi8Rm~hFWogy%*_Bx&Wi+9O-xM zuSoDb!~fVc1t4H(=Kjd3=)fKecSzeOnGE^bs6N?MvZY*ZfMGke7;< z6csy$M=v?QGaEvKX_cM5#;Z9*qNuf54D8#Zc2yPTOzK0i3Qh{BnpMNf_F~(%3X-`7hY5_0jr3(;@_KX=l&2@+FM zicKSorpboKpv(4$qhNo7F{8%7h^;e{w(zB4Y&3Q7NK4W?&c^I@;KguOg|@0hwcm^- z3%;RwHfE2~FHhS^|2#T{UPc+n59{(%sr(UMj2V~+ z0fKPPZ^RD*kqw{ys4y=k9q8$B@!Oj%Re>?sSanT0-sm*UJXl2I+uSV+L0%~$Ih2C` zxJ(AlpdU3>9<0ic=3#GjmSkqjX{0(sVrmP>T~e^?U379X<&9bJUBrjy*Y)mhTTAPz zwUgmKT4LzuO@o7yX>PEI*7%nq$y{C|15KV+gqo`YC3Yz@zT6gF<&lvKeIt#6Q_prr`Lmey5+w;{9JM;!Z_kaEP43-4)Bg)B=DXs^V zh4IyM%N_L|id3mS;#e0s8C7T_r8UEr;#FZ#UX(uka^m!;L6PKi7P3rc zjFaZFgo)T>*+bgY7PJGjw0rrf$(ysj!A$u1@(U(8M2jr6+B&5JT4-+Ao3(KxL4naA z6S-X<|xP zxfXMwPm6P(9NLy%!P6P5V@0c*0DHqBF?P7KphKBM0+2bcsQz_0p)u8}LK|c~PT=D} z(kR9hOc0|8%n6#_@;N!X>gw7ltYyFLC|cQx==#Iq0$9h_uc)L);L`oWtsK5+5p}A> z1~UPm)aDsJ)QnGsrX-te;F}-OILs@pRC^PG{IP~p3ViK?1KvC_yMFul{Cs~yE3~JL zXNyQ#&y@jdm`#S6U`a$$}wMDhYl)fC>)Nmx1dQ1|7=*A7L`*q6MJTrNJic(FhmC09NE@y_uBD zKo1mkj0(TWWFgOmiY??Zr!1>fZ@e=!hUA6&0pK zFD`b2Hw$_wk~YTdc)zzcx$q512KdM%zmgad5Sea7dpyARdLoL%^cmcFC2OlSxk$`9 zs0cQss1~Ci2Y9!@CS$pP5^YE1|&+G!_awnkkwyd_t3 zL}nNdkcZcI z@r0{i-;N_5_UG~R<8V1#NVt0*Mtmy3I3(YX{rTJ5@vZAtPq+6U?o-))5oulkQPL~T z8T$5IwLp55V&hq?Z^4udd2&o{iHVQRTfD&032s67NtldLZ-~@PjxV2FL z9h5j1##1}2dXyi-c-eR3C8_mfIsytDZ$O3Wx6d=Zx5ngwk>|s^$M?u6y94b2^eSG# zE&+V3)l|xPI%3yo81kSA;9@3&!a}MBKGMb?4UC!{G8CtZ*!%+}y%5vH)el!TeYCYK zJmzdi9u}q@)*QZsIxV`@Sq|!UhWa9{h6}oLufadACF)v@X2w8M@z^Wv>72mZ2J*9@ zgv`2@wm&(xTtc4U!E&O~WlB446W+35MBoQ4#8{(yk$eXQ{(L13rSn^dnK*H|PdE)Y zjziCCiW7S~Wn?%=t7+}#NzD%6-O3EC!d?Z1Tt#r}r;!}})= zj*GSHrDBk!H=bJ7eXQIE9u+Q1yS9>wUP?RgM%BG=}c%gyC7X0Fp2<2IJ>M0+}9 z}&CaR545ouuFacDndxmj`v zlkYMsl+?i*7h**jzj6tABNtFJwSAGvv!0~M-iD;u<(QhuTSUuV@QE#RQ0y0o2P2`4&`?{lW-uR9EiF>?1^$|Ow7Mpfq z1@_4}E|5;Rf|+{A3ma>b`-o#$v)@ENjIa+p6K#s1^pF~p#GATut(%0dUaIK@KUV&Z=y z>yVcf7nfNrGO@C@+KD~LzehS_p3EkJXr)G$WQA9lByovNxOr>hATu2lS7dqyY9 zd3=W1er5=OyQvJ+ppKh7%Obs!5~&e#-%|;|p85#+xTftIn3+)CV`w?8_bRsl>^u6 zaU!p&i!g)`^9RU%T-=q%367;x-s44v?3$Xm0u*dHR^H=o`|0W79c)4=*~p6BV4EU2HF9~d)2kUo9^mRcRyLkUkueOqR&$z%a}nq zM)}yPcN+pe3N4xSL;FJJvR^KIBeGW(Kyf)>%q`%cF>r5)^Bh@+4acQi&MpqMJPYrY zCC_)8PpB9IMq4pWa(QJLqASGmtm}ceiy244dL#_=1)a?S$vYJIpZ*F#~ZE-LD{xnxTO8)AREV zdjr}7k48o?#pcteckdqW=<%FLC@98+9!mscib)3078G>Zlbmo)05n@uBA_loY>G7C zF1S63gtN%mTrhUx*{Gz#iVCq)X_aP`s)l#p_LxlQB~@PIHsIu4T+rMbg8USemyA@G z1HHx*OhD0H%U76$?G=$yWoEeoV*-O3&fkjRr5+wK)nt_H7^xGI{YCxCu1>)eaqzppXnEPfb?jf{54ZYpb)(<>k?JT5Cl9!=pM(ORo+Ce~e{5F^%+og9ST*99gGSeYQ)_j_o$!7lCEaTWqy+_wIn{!s@BtX6Cm=?_ntrR5#s27TV`_N)3dL3In&{=#J zzM_{kPT;}dL=fvg^_jzg2IKJz4Dtb-(_g>ufzv^v7Qk*NLJa7q!I+~zHY%#sh!xP@ zB?E9M-dB|!Hs~^^DKOqXjRv$UJ7I#E_pdK6X9WoaNX(TrCbonbibZxJR){o2 zwd`cp-sXjv_560e9>(d9 z(*-DQL>+$n?UO(v{myF5uos468ZLmY1j#S{Zrs)HM_(OshMDFEqMP!9+ zvG}1Rrz}i55&+F;*m*eaFOW`shjrJz?2mu`I{oo>{`Pu4LL`=HwIZugN$dpc_fHd9 z>Wi970Evn}-&D$3)y^Qufa(R_5Ail~$)CA#kvvdYsaWfVcstfDMqXL5gf~v`4#Gif zmn8%#h8T{v#~nwU%dx5F$+LdKLz@xOfUH2-F7?tlV%*lA(+8U+b|e8Jd_PcV{_^Sh z{nNu8rDBGm0VapI$V&%nG*wCgJgm9C*j*|9Nb|I5t``d9Tv7Q>+nK<0X3U^t2uIX~ zf&t2RiJo%SJR3e@GU}1aMt>zLcIwAUaR)j&=s99S zgN)W>7Qlib5~40pLq`5|mKrSW3&onSXp$X=SsheahdV1V9xC9$i7NPKixh8J10o4R zcUXYS?<4lfScxn!CuBAh79rvd^M06##$zk0<*HYVX2 z<>m=F3J_)ahYwGQ$9bMyR02o2UkPla9C#T>{GMytMFJEvk0^mZR4&JD^vZ);AB=gk z+nVV@%%Dc=2B=6T?11N4t=cu-@R|E6M1j5aPXASjdw$K;zN3$cxT91Y&&2GAI3OT* zVx^TdGF3x1I*Lvv0+pRsnVv)}^qyor8(er}2^H4;so6@YWA&Qt>Xu=mHo4;#SC4#Z z+DjsZ%Jl4$37j0_h79qhWj2sPL`&Es@y7O#yUR&x75Nkz<R*N&D1{>DeR@>Q-u`QRJu%A~?#xq3dRW1eT_ zVNM!EcorGvvUgKPuLX;SF$>hNNhlOW6yb{EQqI`fj7!iITq}ev*GoO)5?%bAFV)9A z$s!oX%peOe%4pkZ4!3p+rzwy_A*adMcFG4+|6|0Uc>E=Cu)$NWmv zMW%A&b=cLe|45aWrzt$(`D1({-WW$|MmZ0bAK54~o+*rxyv7x#Iu1&tr_j2w+g>_& z!RTveGtC1fF8_&54{lEJ=wuioFF$Wy=<_7So@MW`|{w|Qde^#&|C=)CsI_SH4> zeO%L;b;RW?0~EsiuXHa?R5H*4^df@w2)^Cko4CHybyM@xc+ukH{b7K^oa0K5X7_wiE=fD5!kB7TE z=*RtDk7VS9-D1FUiyE2`++=8*QhR3 z0SdDB-Qx~rbTzZ3sY|V?8EG75c&t8t#7_MBhV-r1DxEj*Rx4;A{yr8A-BN;ch2ufs z-N)pYR>NMh`HgYM1c1yy874TTQ)luvm1#cc%CE{R>@+fvP$Cjxg$AtX-Wo`84U@74 znK3E~V@$D-FkY(k!w8R3%&3^4)P}y zBX`9**xMjp`Sr3-^vWfLofJQdNop3ZfjutP6_eBJpIjM~)U{}bFA#FQQ5Y{VO)|z! zSm_es^bJLEiandwQ(f9kARH5Clpz31T*4D@P6XF z<#M=?gIcIk1}(BeoOfLQy`vwKbjSrGgY&r3|C6cfY;GI7qUeA~Yi-NcdcB!UGWq{M zD3cG_jEh7S_JaC=oC0dh<;o-of)B6UcgwlwCNo;um{w~-;+TuI#j`vUrULOnWdUps zEgVtm89<~UM~ovXDyE$xiX7<_EFFJ`B&Muz`~YGcS8%m5#Yl>!TuTt`~rwz)G)%$aYl}H6twKgdgRJyHlv^-19 z45V7L4 zay&Cuit#X#|5O$%CO>%<6*nV33vE-ugeA2CGB!Gi0kTCZZjUS>TpVA&Ftv-aL3Y7R z!h`*gv{1)p0|KVk<8FI`AcWWN1eZPYgy_bq&sb~dx8ZQ^==%fqXM1`AlN7F=F>F}D zBc>Zin*~vcgA7R(*y7%lr}B+pEfbdBH+6G3!UJ^N?e=(V@%L~5EENCZc?Mw-vwg6H zxxn$Sye9)*R*qm|ygt{o#$vjXW_S_!4caO955p#G%na@dcUKKGw~V`yq-WgQxMoY8qOO0mJ1TFV3l#z;(53~b4WSS%M}L9^G8 z{D>r~1O?(K<;eoW%#3?P4iI{Dg)$1#JQ2Q<5d!;6%ZeotDNCzTILd@VQ5p9|RX8S^ zWR%RtuMqj+oD7qZshWoibb5iroOq;~0?H7bsL^34U2z&An*=!&->;GttkX)lweK}E zW11P`xYPHnSWo$eVwwvkNkH7O7k;A?oKYavZyn3IZZg&s zb0K`>rHvwiMa*QBWpetsSaY7*L5$n?xVt5)k4E5stNb03vi2R;UE7+1hP4q0 zRdZfjM#eFb%7-Ec5Decg(?7r5=Xgg!E&5jVc&mgU{FI|{|>x?gL%#@JpVEJD@Y06fa{1!qG^)6qn#A7taEpqrqBfCV_B$0rJSYaJ~@@ zD)mY&!QcXC-j#BA4nalD_3%XTuFnWFwr=fEh8n6g9XZ%x+fL%QqdSPGI%7Zzj*)Wr z^gA5ch9)EJE@l{JH1)f-b=m@RJT-oAC7Bd76ZwT^R7X;DA~hWLS3Zb+qchLZwN_?g zMuRI8kU)}=HgDwuI2Dm!)&;zAnYfE3?yc*xLVO zW!;JDrnB`zjr7xOw3Fne8d}_1BTTM|GmtfotsBW@j&05DNq(G?YCYeMIL}BaJgpZJ zBOp(YHCRpzzDrdWHdEE!LZpm|v+hlgE)TJ@rfeDoz2KN4DxnxwFy2R?WvAp6qCaB` zO|~V?DV3tHj3n``plLSd(Hhl=xy?laGR)O0CZ#vtAp4RFTL|Rd3|X^Kj(e5AF2!G1 z3qDo}y?p(<#MxxlkZP8KFEbxFQ5N062>TE^;_6?_Es ztwtwiH5nV>6GP(S5RG6|f4zGT7YG`3J{@8BJ*~I@{kHn?vPJnGf{OYvaXHMe7c^4gBIPmW2Y)ubjzq#t{ETZ znV$=q(2Ua3AY!>d^mqw%X?I}V4X309*)tel(kd&KCEBw1(}(5#Z-`$Oq|czC80rg^ zf(Q~)m7AJ+u$u{&GVx^J1#T}bjx$c;+^&gkh??evavwkx0PPAd$2VEdZJR>Maet`jvbvW44|Q<*xe{&^ORTX2kiF3j)|U052vdZCA+p!jyeIY zH9L?%lka$XeKN`l^mUG z>RTl+=ECdqdt*qN*Zp?LV72nSGHfq8I( z*NvmMo~UjpNns%2UZld(1>6(dPRecE!VO_}qX0^vBx{ItYXgGpQzSj%+$)5d-~Ys$$QrE0c_jxygh2pyg~f@!~hA0&}tT69)n zh&<9pf89iE7$gSF8?S+v+V_q9;gMV$bdjVL)j7HZhI)99yfcL>xC0q{&1A{g(mv=O zW5VrIQ^vTo_NYft`JP;canK$&>rgc9x(l8XFX%MIcm~g57|+~iWgYbj5aQde0t2OQ zQkV96TD`$>JdILU`GuZVfbh{S{O1fW4D<&8PYML{_=N9M^suGaBumlKnyQ?NKEEg% zh3^LfggImqgB32J4Fz4nXZohw(2Q{i%03`_J@{Qo9t|=NIF&3G_T0n>Z###-c=fGW zl=!V5v&Oi@T3ck)dzC$hDYie-Ut%AV_C3FhCk+Z+Lc;{l0#19~o*!Qi-&fmj@CvQA zKc08r9ydRpcB}RAWp~*gus>k3(L}?fkOD;(RCE^$c~=#F3yviC3yhMccCGFL^eT-_ zyE$v5V&!Mz0va58LL1CFYGh?8KON>(A2=CC-UydZS&5e?FCZePSdr<7G&qm!bA_RaGake~Cz?z}qGt3$JEhf5ftQQdxe z_xa0R!GLy#U!l~XuX;Ql2}(r+hCmLfFP}jK$D&>2Wv3=DH?iCXj3)GLLx@IwJ~1E% zRSYhn=a=>CdV_@CJ+WKuBuQEojI99N1RoJf4`G*Kf^B4M$RIpmBfzMYTM9Fy@*F&H zWEao2=fgQrICvs}xi>XRE9P0W21?}J2RbNB(P$bFo;T3u2`a49OZk+*d?Ub^L@(pj zmpItzyq2b6+Z?5gBI~@|)N1Y>N5HqK_(-=mv4G0zaicG(pC?Ww8weJoXetz@(n^^| z*-$E;%f;dMmW9ID8t9N}b^nD|n{t zN8Sw75=^#97At?-YP_=IvC6DTh+;o6pG%P@c!He@;zhb^RHiUeiUpRW3eX~!51R$1 zGV9z{sg$VzS>^7G!z_>6mjeRc5RZ zZce@+7Sw}2aQErG0bh{YT|?$_Ze)Lcy|-V3-6x)7&l1M>@VPzlSB79a(yd6f@)D_Z z`kYqdd{It2Jw`QJ_sBD7SSsr4K!mwPJa=<3utLF-c;^)&1;T{r8SLzE?BdGWGq}pN z4+YszYNr9i0S8U1A^)PeibT7{&Sg0R-G%)m{%0~{Ij(818@CxD$k17~39m^#Jb(6L z2;WiW+zT0)J(JNvu_&G_PpS!1lTp;XF1=ZZSIX`KzaFS3kBV#ASr#iqmti>pMu_$x z+%_q>5qH4^VAY0{7d#)x<Qo{rYCVE^^XXFyTx3sYE{&J|lg^2|`2B zgm6k1BHj(pQgJzB=$up9v@?KKkT>@H80gf;U7@wMt77?yBlf@Ma1t4&2r(|7AQw@3 zg#@M?EDkI`z}JL=(W?Yv=}a|aC^Cvae8h2Ai6sY`t{H+(!!!jNzsnofNo7eYB5Bvb z%mo}WVM(GH6%}lH!Pf~#)l5H+PxVlD>EfRMWM!sG3iCA;m4g5XTD%eYfbhz|Fs{(d z+$o~CN=b6G#3m|-y-2bnC!iVaC0QY)3G`bsWeiI>hX^Mp#OJ>Ey`sEANbd=AJIry z1uZF`GZ)>*!!+#ZF#(KeyfKyNhOtVMC>yIi35lTbMbq*MCkSN6>RNa2AuW)GMuWd| zU09|*$D~ChFa{PLZ=}p!kPC5nxh(k}P_c~s;%STXN3QdlsrKCM`y~b%P$}>)$-R;_t>crELpz4Pn_j?yDdUFB z=x2XoB$`{pr~M52A{7kjBxb@2lL<1S!REJm#w2>iNG_JN;x8y54Lr>Qe9L6;ronQk!*M^AnO7-#G2h+a zV^x3r&;PzZzizTzdWnEnSVKV8fatv_3unJVep4;ed=pxpOaVV1p7!f?kw&mgu%=8f zgNp#i1cNH4>>U-k0Poei24+;p{G%|7$|uz9;{vpcZt)w{_?P(=I|kS?%iBKlv!*!>oed!D+EOLMxy= zF%iWA z>uDAlmxBU7Oa`=`mJ26t;(~%9kf1qBq|IU zWV`&x8avvFbDY<#6~S12DoRSsF32?9!mPeJ@=PAnssg|q6KT0%H0UEa@=CgQGnzN} zPi&QurC&zk zVvtk)vN=9&m^=3KdHW!&&}w~Jt-=4+VHritF)faD|6{dohhP|c(B_5CM2{^r`kvd; z2@4^Gc_O--Iy0NW8EALp&4N&1>j^eh#15HalEIiK0O5x9C{)+`24jIOhBY+QO=B8E zl{rr1ehlkwcxk)mwtZ^5$4m3n^v_KPe-L~_>mfW}x|e47d2SxS-gU0|5fbH^Zr64A z?xyWGE&NL1FpfJM3}H8pE%j!mT|-*NvXA1FFj&k_YG1-~l?9xna$srKpjRTA?ETES zAL5Sa^fcMascz<)N?8nB`d|P2^B;fz9UvnYpT!1@Ii`f*(VJSw4V_6(oIW;{Bbt0Y zE~sJzJ!ID~p8BwFdN^|c=6XFfAbZ}Nn%4_KQk%Nn594JVFR+E+3oH6n^r+g=If>}EJsc2V zs-fiMG#t30FyfLx-kyM(IjcqxsSi(=Eq9j7S*k!y$5T&MJY||1ePcGy$i}~d`0Q0d zf$0-pFUwnfT?_XVcN0B&5>p+sLR|IO8Us2z8eJ&`O(WG+t@u@mNp=XY z#_^h5(-T?*hrh+#S~*q3fvUe5?RIW!c+G{(&nsv zoKc#CT6YC4(-I-ZfpDvL&No75$M88tt#|sy%UA~o*D-Z%f>hdo(3hC`vLc?TLm{9Q zv2RB8?GS#7+P#as5*A^!bL&g?xW!aNDgHU_Jqc54&n8Z&i_3jC&EsTdT5Ghk66r}K z2?Cv4G||ybNkFWM@OQyh)x4uuyTx+f+VH75ufchP5czb|4E9yxw+FhDyt;@Exa`4g?MkY3Y zO88ibpM?>)9R_hJ>t6SDY$YD&2eB}LQt4XS`7(iV6hu>$4Gm!Eb0*W6(-}=8x^_Mv zyDH4>)h4Rr>1bca$~g z)5(lJXEKBgBVC<@uCUs0P9vOS{BAMJt?I=r)vn;{_2jV8cG2ksPP6ZfA8N@=e2qo? z^_o?$Xak}jmGrJW&El5vS{4by?}0&PH~rkzy|CmEOX z%oGb2p!zF6W!~-NF)^x)SE9ZjBphWM-~@?mqO3^!rFh8&TXX%9{hE%&)RJBb*;rpy z5zdSS+mlx_=N|gp7f(-re0Dmpi{G00_2J`RetU;*3iRhzX6!b;EX#vnu@W;K3}#*u zTS|#pQP2rPI~ltShsT}jlb@)trq=IR*?R^t@)FPJs}T%=SJj`2yDUvF2Rjyxzc#7M zs>Un!w(Bpcj=%@BB@B7WJ-V*k&%9VhFV2sjqiqT6<6CIE+*yj{eQP{3>Oj6jfy^Lo z@{BRaRmV~Dkjf}(i}dggg^W)E&d2n!YB;@qb)DoFB=ZF`1OqZkJV`xM|TcE#zS+ zZ#(LUQOV#~aMGptp(#l>Xb9JsgbMc1>Rt30a}qES<3RYStV3JC2M0(6$I9CAG#mXpU+-yHbMLcube3Oz{73_+bF|$G%NmF5kG8Ev1|I33&=ecTYKf>ESpgUC z_Mo(PaW%(Y)IHtClPO*OSe6#g(@ozNw&>E_9J;3jc%PuqV}gR2nu4YMC zjtBkcKmOtT;`yKc<=;MDe^qzfnT-pCXZ+pEORPQvHsL*0&45rm8vLhE-+&}z5d7_L zepi~Od|Zv=uAS8 zZlTtWjA|or&kDE42U6ejz}W=%Wv=h^7`sO{`T&#uVVqvN>egbl1AU4i`J^>21uD> z#yPqLJJ#uKR$nw&+4pNl4D_5~NOqI#amz7=#wOM&eT#;Veop`Y_~I$4%BRQc%jc&g z`%uS?(Sh)bK+(ymZWzP}H)Yk&LJ~xXfYh+ByDf;G54ZPMfQI0QzQa$%n};{IxQ8BI zf4h5q^Zl5wy?b+e2Y~2?DPosAe|}D#B?}s06Xk(TT8t!NRM)MOGOV^}t>)#s|mNfB$d)Oa?A}Eqm5ROr@z6N_={eFJ}1| z;gPN;3XI@DL4RdYk^AGG=VjsVk_Sh=F+btr1?`0|iTS_X#b>nJQr~bLyf4wkh{qug zQC4V)5$9YM2S09_5UyLX73&Xx1@52F+a>s;ZO?Mx&-I$ayg5Aq1|k&~-(rQtK#hvh z^g$Ghxv6~=0s|X_0O#k^=No>mu0Mac{_^4DCvsZhbOT0o{rLv%h)}~9Tr64AP0`ua zQYapu?s|~1l3O^7SXR3Paih+e0r5Ax8p~wDn`RY07QN1d^hl{sCf!UF0MnO&EOKY=MQR}^ zveU?QOM0X$(nslct=We1_()P4XxP37Yj-VF(@nw7Q) zD2{byn@h#rH}wS59p!**^=k>vM=1~Kgyd~;gfp8;)7W4XlqZ}fGKdFMf4WlyH=a4@ z6@9dmb1xAe<=H7yNwWbJd5ksZJYp^^7|(BURYIU^Epy*( zFO7}u)%Yw3bG`nig4Tz~H?vrvaON2aJM4xX>kj8~5-1dAwY91c55J!{?Dy-;vk7ipg=bc)vd&Z$zH$Ev}@6*At@w|4(DeT$d@D@a^Gk?2@87DGCYmX zw01ieqG%Cw0FPU9Crc6}RxV&e8pio$HEPXlg;^YcdMHwV$H=F(?F8Vo2w*`*c~WOP zg1p2)rl1bS@gj@a&!U%W*p$GYlN-N1vp!2RZAas}#ny}_&zI7oD3U>n3YMUT#Io5~ zqm=e=&DQOAcAQG&m#BIn4j(}qlV|?+!^hVjuHRl0hx{&yY;BpuL+WGdj2d-Z2C=ov zIpsBPl)EXGr6;JGm81H4>bU2$LUXGK&lO*_iX2+HfdOzcq+Hd0Bwl%lx;Q~%w z5n%Phj7CpgefnGng;5LB4|NlVklAJv*S&!E=hgG0L%G2-%h1xXY{;$P%QK=XsXy$Q zB}fKyGfg-ZhAH30qB#_%-eh_d!Gwm+x`Igr%L%fTpMQLYKZ=qB1{;?P#r}O%W<_J3u!B>;`DMOXsQfr z*dnHjwWxMh?-_OFPUC6sPLa!5H3O9`K@D9zQ~r)SQ)xjOl(%i}!no#9pwrH5`U!un zg+udokraZTQ_~7tbe+8VCp=xsW}!Eqpf}Tc^Hb>V{9d71gBapc1h|&#V3g=97)h6c z7R)gB#%@F9%hYVkG%fq8Mjl&pQ-swe{sG0zJM&M5keHAQld`-~*WBu7nutPmE}l}Y zCb;^f1E}xAI1(yG7d>Sr)$|MO4(f`M$bOaxGJ9#3BV_>4_W0phybN4d|?4deAq{5SD8U4Mz? zY&Rmzh`=e=Njg9rSzR*YsTA`a?96 z<{Xuo8#Tc4WzpA73g-O`&8q-@IwX^8Guyb7t(iCo2b;oUb@wcqv}o~-)}-5ro*2|r zB|jcA>*R)L#X!~_syWLO);3dz77TUD(h&SSlqd~KI(!y!1dG(pOBj&%_TQD=;#)H* z%v&$V+{8+w{Ss?%L~Tp(*5s^M=@TMS&8PUv(d12*q^m<(02c_;7y;g}a14IS1<)HR zdzraxEZJF@dy0D;23(klPiG-ys*D>Jm9s+)c&U0^r%&y@*0r1^h$7gZACo?sSVV*A zhsYjjN7751?g+MIypvgjdmiqYEE zt-Se=M?`w0d)?-OrE*78VCr@5{MMCQt4EdiAV8EAo-!e1Jt#g^y`N7#rvd52A#nQQ zA8tiU3bQ^&`*Fwcp0$i-)!;v4)U9yTmf`w^ISitixR;h{VN*tp=x1c7Dyuk%XdU(N zE<)}Wqb8rSaAFw8bAAl@+SANd{=lPc`Ngn*%I+kjQB-dnL)cBslMr={aheSHiAGqa zSyVTaXhgO^Cxnc`hk`oC{&JjM`#DB4+09}qN%_6Q{FV+tO4$_IjNT%fvZn7on2|*+ z9lA2!qC{o_4`SK}{u3;GHhp;a|M>f#kiAHiU>vmf*+y}EvKqNs`e!2{i5&T*6D!^I zRBI#aF`oqWR%)#=ll5L+Uf%F?2QWv+(1!j;g26v{vOazK#4OQ_F#vnKv3#{D&#V-j z-i#h-s|02(`$+26DsWLfpG$)q3+8_d&#rl;Tv#^W>}8@qc%P#tA#I2B_jqqoHv42k z?T(1rkwFgAxcI^AgEoR=2xrjy4W$nlOkt_q9CYYYzJuTgAUK_y zgw3+rWi|>{#pLCsISba#GpT$x%gkZi(TJ)ow90+41bMtLwg)61(p*%E`(IK{2Qz|^5(~`HvZ>9(1e|~)Q z^78!UC4jRZ+{T>nZY`vE-0uXQh07zLK8{#%HXku{ zN}#=vl()C0^^Nv)Pp~B-=Vkh6M$AShh8CZ?V_~m0UcX-^^kEh)%Gbv>Tob1X_8lOwYWyQbP~;; zouaTl=VScVe7$9cn2+>0;sCuF56%;nhJuY%bYmaJnXX$Ts6+2`pzLZrQNDs0Wf%k= z30sIy2P17r{WzU0Die|unTsQeTO}{IGbv0DsJ}IXk;S#lHP~vBPc=>X3Y%P*aZJ*= zr5B8ab^_22mASb2T2@L_{uHl#)FO;bn9r$I&j1~pD1XRa^h||aIjvLD6>+m#v4~>q zv5!hfggyGzCEaN4((y{mt-?Mi;7UcoMd`Y#xB-re;paZ-QWu?#U#<@LCf;Mq(9ghB zcamYr)p{Fa)un_uq+`ls%|bZQGHjt}5pAVFnkt^^C5)^zGkVrR@$vH72(J@@vs4UZ z?v)1}6zz!S5uU$rV}yb-)L`bGi5BimDDvNpL`3m?0W~`|&Q5d*i!ca_rI{vf6`WJ} zlHt1tHB8f%RghbdPxzQ|i)>v}3Eq+=i})ML;Jhi%5rg4+0b9q@+||_ykPt`zr3VK zD^5NXtmwHsY|)E|O**#fh2W>1OUl%wU^6M?pM7&LtAc7y2!=R*F7XmysLx%WT?%01 zXMA>gjKcKs;}^P$^4RR}ESv6?j9|Qwj@tGCuhSwUD$<0wI;Ra~!E1+MR>iKj)C+&f zs>_H|9tHO^Q-Wvj>SyZ#@6-C4^thZp(CtRHHr%kl_rM1RnS z4Q$k6VIbIg%Gg~rD^2=zeUm~5R+bDjbvNJ_KsT@+R`xF*M;&S3x)q0l2|I*TeZDM8 zE0Jd{5H8d6KCDbA!^+_!GrNZ)R3!_X!+*)GTg;)euYpCGE=8X?)qBv?X(fc-4K`2D z+3JrA#)<*uF6#$6MQh3$zv-G;MS{% zfEpB;+PZ37-Mqr0YG5z^8WpSuS;ja-h?qD0wuD;nL1^K;2R#SzYA`Z)aPiVbDW%s6 z^rIZ=T)#oiaxfL{TKDu=@7z2XqT*0e&xP?(N;5fdB*F!Trh%u49wEp>IudKnBGryiQKBt-@%GXm=#lNdMANy^v* zPflDPCsA`}q(>Q7{^kieI%u;rZo0X53X1Zx#CU#JyEv33Sro=oI*GuVc4iA2w5xvU zvS>gqS9U=C-Is^{;m9Mkal`G0^3?v_6lnvW`KafkE=i;iNIuP7s|(>FV$`u!MiaX` z2j=d)50d&@h&fwc_hl9o76{vlh&lF-@EgXXaiD7D%;fkqP!$U~jO<&1~{31ZG*|vGT zG%3?LJC`D2soy4@fU=_Q-Ar5NocNk#vZv+4{`%uLa>K9^(Ap}Z6G&LM7a-0O}U6M2anBb?)gly)I?6CGJ>eG|4x#+E7cf*E8V3HS>mHz$9dG;33nZ%xvT?n!x$R z@MD_an-?7amT}^(7FnSHG_~+!EF)(J($7u|Kj(kc+wNQ+S{kty7p&zle~ z*UY-aG%bt}KcAL>rc}$IYGefznoWWnQr0OlBlW@!gBN8`h<;sBG1!{);YE!p32&1C zxB!P-U)8*IH|+M&Gj~ZpmO9ro^j)iIR7S`=eZ(_de}WGTF>B2!Q`>Nk^R2x$2@=H7 zPn4Thb%)3`6-GQwhoH27!luHYq0>;0Mv^MmT(I3z3UICxlvy0(cQHJ9jTT3#ZJmpGxx?Ki*Ung^E%hEzi5jFarkZHKWNfB66=~(Gq~=pX8GlMn z%mo>x5IHFeNOwVG*Ht0TnV0ILJkWID&MJ?i5nYbZ2BufB-{~j;*^lw4Ba`#00v;;( zml9wlub}RtRDybjy4!b4Zi=r1YCqbj29WEwpr3EqT)puq?c7+FPpW9SMpVZ1iLBUiu^$*f3NFqGaq`-e^?0aQ=OX8)r#zG{ zp{+)U`?+xmx4PB&)0ltYCK!r>gIY)P&g_qSSDyjl^1s? zwG;tWG!v4~fBEqOgfh9|@2;+{uCK8ku^XvQ`UUmKkagjT6{-zpHiIVmKd(ocOx5;Q zx>4rX*S>Ua=HPI^OV+2;jYsU8-L9RlKTceslB5XwMtGeq-bmq6#umG*pw<~`4eAcM zBXzfgY3^DZg|VDsclzHM7SMh_J%9S@1-5ns1=hC3Uoq|Ca}jY#2ow;FJQ;F4Y30Uf zU(~f{<{)NqgtLHM7}Mx`ra@DfTj~yQ3Qa+HG%8%?52SYSr=DqrFH=+FMd2>S=Q*#* z%S}wCC1R?Dk9#p2YKdKl*tMd2If;)KhZN=7eLR5qwX&DyUB9b*#Qxg|N|(u!+I(v2s~h@?WB zYx7|K=JoZL;@4#7)g8RfjNO~L7|qvhi2mO@i9zb|Kv)rUU_}TsnyrwBB4r>J5wh77 z5S|j99=8`gl-Pr%C%P-S%F2eQQ+s2;X>yCA3o48NMN2236w0)p57~>Go(!EWo+E6| z$Ur%X*jW&yrOzx4ve##fn*1IGieC&0ziA+vE?!%*<-T`cpE2{R`V4le_}p>I{HMDN z21KZKUU4tx7_%&;xUGd`ttAryGV9dNqjVP}rGX#CtZ82O%T4CecA+px#=hz;Hi7qX<1_ z8Ws-fENW2@?;4-WQ8TsC(b*8lEsNKJg9`|=0A#IWQ4tR%U+U!r7`=<%y?Vj4_%nx?9!ipe1Sxz!OeThXzEu2-jcP}f^)$}NjItF?=+q{rW*IH;<~8HQSgh>DLF?c zR#$1_a3e+yf@L1af^UVuTt7;heMsLT+xw57-(gAu*0xe~SGrc1Y4~F# zn~)DCbEeD1Q}&(XJia4K@9~@M9?lp1jI@g7RC9uvFN?Y3R?nT&oo1iONLv0xPHx2& zzEeJqT0se1o0lI6=JDHd1#(n!gRKAx^Y`MXO95|QO%kz=n<&rDLuHPtX`R=+vgV}$ zZPHfQ1_UPe(I}^gi<3tK$;(PbRGJF02DSiw6=(7u`A=9(PY~HvL6@*I@|*S3RKcTo z>xPLt(#rD)G+N#~P}%zYwB_FB8PFiDIDXiz8Ypf^xKO(Tjb3}>!O`qAF}3= z2M24eQTrmm&23Pb<~?PX-m$pop4d zH5i$i0wg>lu9=IrfN3>H&=t$D%U%$qUQ;d+(mYNq7h|`jOID1JO&68t zBPkr;?l%;EAW*`#&2j_AS4Sr$1q)fCH*g&U89K{GgOK@*!-G(Vd{x5C_w;OQ{7GtK z?!`_C0&F8P^U)M;`E=H#A1Tzwa3Xd-_;MAoUn3bJ!< zAqU=l{7ecY`xke@tBX$!wVBgc%v*D;P#BtNREl(cox@U>*=o`yRueJ5Yk6Qsl+ToQet2v4=$!Y>=MaD7bV%mVu84lr zHt|P4V5L}CCL0^GOk+zR?Ks%x0ArE)!KqnQJ)v0H_nTZ2=b$+mjhiYybVlb0Cs-L= z(}v^C@-7~b>4!8m1TK4>K4NQ!xS)X7nMB4K;V;WC`pDsKTZsW&HM8u9k@)53m)yLF z@lxT?pe9B++!ZCJ1GuOj>zG!88}=C*PiW~)jP{ZJi$f?_~FzV*bLTsoly|* zHBre%FPB7#Z*rTbQWDN3L*)W&Abh#XSuslWAsX`c=#W`t!RfdF64Z^;H>j;c9A@9s z_^Q=sC-NsQgeQy43xp+BPg4e+a#AG?TvOOEyAEbQ>RG^q%S71{5U3| zq#DtbM&}YJ%*+{UM{E|AAwq~tR-bqjBLn$SAd{?)I(NDl4S28u5D|D)6RWijUMc1`mmy>MG zLj=9}EZH2^j5U&==nNecE=;eq$_*mEY*Zd|ur7%eOcq(fUY~jV=ntiBM4o?qK@{gW z$VAgN>kz49*Ql6+KGtQ~e}_02d{d{RIdEE;x(H(3qv6mUC$%o*_nHknSvHd=g5 z#1{8HKl$O;mlx0UHM3UfAC%xBz-h`+r(=f&4NAi_9`_|nMkQo=)oZy46NI!8;haMD z>KT8s{&o}eP4ZAv6|37KJTK|WA)G7^A?O9gAQ1-RSkIY-w1YK^lU@cK#s~$CFxO(; zH1$DxmxUWm>6SK4Fl3%E0m624{S}jy*{FqO^5D$*|NVh2lIDrDMS%#ojBhhh0+_c@ z2mYWEbW?1ExrT;~g2F8f)nyLj0O}Tre%eCI#NUwQQVg<|Rr2(1KoOa4yh()>oWIQZ z=)gRT$s7Zt@8G^?g^p~tu# zh;U7X%|;j#?S#}O2C(}R*F@H^97W)U7O-AL)yIvb3>kfRf*4ALDu?4>Y6-rQwj^pJ zl~|2Eq~$L^vp~;`|L>o}hzY1u)rH|y2X*qec9ewMHl8-%k&!y>9>~m>6x-@*9!S$4 z<}vCxx!i12$`LIR7l!7+3W^FXpOK&AsZhhwF|E=1Jv%!x$qx621-V6ig0yNz-Cm0U zwf5zUb3_ZO5S^RRN#1l+?TqGZeEa?rd_(k@p!Yr3W1(5|ZX?UU`U2Upippq?`5r@| z@lSfKaHp*Vc_oHGiqzj14}!1m5t_Dz24@e#+nM2J3al(Q(fXuvjU}`G)ywCX7w7ov7^<1|-OHXV z<|ukjf$%MAd2sD*EfrK{)%;XnEPPCH#RkGAi;ho2k1K^_-F#dG$;b4-2f=Ba;8(5V zGoJ_z)B!Xv)dW~6{Iw27JCCri&?;6jE(wgqtdu7|VEy8sV2PY-%EmT^dY?I+yR@u1 z1?dl}m--tMwuaN9mX-EH4K0Lui*Lj{;?P0m2=S0@sH=j57GwQKpPC+`qMM3|J$%>S zhlH}6BS?QA9WUuWbh~z4^D9{$b1}<;VNF60o+Y(k0t&DKAdkTb8YY1VseL^Fz8C|) zv3m~yosjlLy2=qGyQie63|mB8O4HQehva9hoA^VgFi%!ys}XuB-AQ++$ zN5(jrUvWQB{P7zkW6Yc)Q0O=EU%OJPAETD!GQE}AxmXLBi7rZlh&Q~8l zBM+E1F=mt8bQ)ikh7#9C#N}p!B)H~ap%^||tOP0;k(vvmD2y6V8&Ai$t^=V+nf%;K zKF7KE(AF}tOpUNV%Z6fAF7-d^!HB}63wYJs-ZH*)n2hg_Y^e+3NSVgDpo>x25a=1ra40>jG(*L1BssZ`_Ijxn+}G72U6 zafU}MYy7+AJ~_WQ>(YZZ_hmFe7*Adl9y#(6;*7f@H0$^Dq+zEh8}mQ@`l_PJxHm(f zjpS=rB&u;It^K?T)mfD5r=SRB>sBv5pEUY0s1{GwuP-fxZJlsV8cU+nGM)F?IrLVP zb>EUS6VqgC)M*nrt8HYx)>BoWDQJ_xc)`d<9VbYLZEi-1JRpOHC9*@^839vlWGxbB zpcoAeo67QKSLNyC^r;)9t0oWiOE z3qzUzFt|2QyWnwEmcjlTwSQDd~HC9zrys?6Dnqh|3W4lonJO9sbWa{lS* zByQ{^Y`#O04pzvTOk&!}z9I+EiaW~Z5)tn-oS2(EH~)xlM5eQ+#_xx8!#2xG^B_$% zB$5Yg%#IGdzu|&J1y)&b6VAi za^SVA`cZrW8ui<>Bgj&#By0-SX`UMMgjxLT=^0mGr(>Fp`Zbz$B;aT&A6}#}H>tz1 zd_Xj&{S!QebE)3p1}K7>b{&;sMzNr1^2MC<+|0L%kk-pbUNJ01Z@ZKh!ML)zGiY6v z2}QN=JeK@uF)z$Z`ns#kwwXz?4F|1T)x4E2#1h7km3}_z`+a4Tsdf*BXq2vg2M zc13W+Lf40iV|=7UYT8th7$WG9=9!b<$5o}q(zTvLYG0a{9qX}Fai}Qb$Y7tss~yRt+b#oZPwa$}-J3FlQib!w z-i#b;);iNsv6F{G#+m}9^IeDOX=L)Ekj$1l1b@V0@m@POm_U%^Xbgrz#XYC(b@f)h zk;B71PtH>Dlk=efk%o^XcrU!yChRMvsXreT7ZL-$9;8+}MWba9HM%#L4m>I5 zjr_H4PR_J@tMFhlF62&UQ>m10F$+H0i%QV(%7$nvic(b8-|p|Q(XrJ@Uuf>DF_OW|AW?i~5?474c*n3U3rU>}HoDkp zVGK>4KYI&DmMHmTdO}DFkZ>XJn|&U|9q}G+9c{;KNBHs0kYqO_YmAyPgFHUvEn-{( zM34U>7$rJ%87QBT9u4D?dCxOjB6)Z}8rLZh5>>9cjZTdggmukzyflQBY+IVpsISy= zu~F5YXOhBoyL0@-9eyl_IE&+czG_L zo#VQLq7KIpadLo`7y|fd|JT3&=l}TAzyA5JZ!P1SL?QfZItQaFGb(hKGbAnagmrg; z`UGX6$_N?cpYyH9ST2*l1&o(sB++nM$rw>DM(+;!uxNj}r|`SHMckqlU`J&|LIv)~ z%%6{+ziw=3VfpmZV{TnK$_NC_R>Mg*(t1!raBBSF*WX=UKKr--^Z)+*UliE6A+EMn zEyPkscz(q37U{GQ_LvZ3tA%DNswN4(pgLRd%X5I(B-yNR@!m<$yF^^NXb5;JX=1cmZab{&Wt4FMuJ5fesiU3*c=@P z^R7!sxntoDW~aHRq>6(Y3upxkQv?|viX060kX%beKomJ%Cda%tn?0=Rhw?^>WvrtF zV)mA>WDVM57Hk&VJ5}kDM`tyeell`5n$OTNMj;P>mGp?Kx7( zE3JhF6iXNata)7gU+*l=sDbLfNq1F&H;Lw<;Tb1(AcxMJ2kNKbSKVkebf?D3V0k7= zB-7v1^OKcwDY~)gC9>)zmzL{T0K3up1wbLa4=WgONpwY0UA{QSrsqurCUr$*iWyAd zR42$D8eQ1P%E=QE`a-J;=qNV11dg>Pa@UQLDMI%-SHT%sEuxm^~xr4h`1A zC5#p@&?7C3FU zep!zty=Lf{x-f;ayP3?B&qW@Xwi{XWXtSg+t`b1ku}O2i`eCwh)N9f}7mhVa8?m(LO>}k{1~tY5+8oY~*YQFguUfi? zXYprQYf(KR61!e(=8St*=8|rpkOO3#{Z_LU>d7SuU6i6rzm<7+u}$hv;N)22!CNfL z{nhF>nO!2a_y3=%H|>!m&8{=u&9{s_GIFb(-Ay*x6a``QMHoP%{}0TU!C(N5Mg&E6 zcXf5;8kw;#zRYu;V;PcXRFsFgx!G&)a^Jh0d+v6uxPtp!O|D)h301zB8v zOgq^j4Y;IfOm!J+x0<&hHn63DC(h?}t}r59Y6Ff0!8)Pbpk)wK3=d+G(FVC;oz_ix zOT^;)Z{P6PM%vd;6c2;CegkEN%;@maP}F*VjG8s#9xI~@+$w3Po#mWfuY10olJAxl zR3uKZ%5&cHY2Cx6d~Rab#25E(wfH8ZAt+)O$rsfGMLMw+A4{9hO`AK?v8)-{%31X~ ziJ{n*Mn`GbxODi8xO62&2{O7Ll&rL<>|38`BlF)ALl=ME&HPTOrhFdFBvhatrTYPYspyE_2gE zj3IkzX@+ROiN0Z*qkpbN7B#6&ilq_rT*PTUvdAd67KEG#s$84PnI{)2T%wr0(d^BrV!?Pi6lmW>ruajdG)+d_$P?or0Jkax3)2~84nRri-x&`2 zn2>Mh6uzex-t^2)%xP3Nr4Z-JFd*JkvGb_eKno-3YEPs~bV*omtN!Fpo?Oy|yE~Ct zS+B+@I8t&uRa7OW(!(q~V9yw08S07`u1>462dL0Hug8?MZXiwNo0`4Md`(RxRc2(4`b_J-9be`lxh)E$~;qxLdA&QRClow*}qbpG+2`q1z_ zzXku3Qp@ekp_8^qb+tn?0 zmOdBNZ=SP>W*P==JnlT25EJ_r4cpY?NDwwY`haIn4ixU!oEZFe+i%t8@jc$0H)lua zEV>R8#pTv02DnIC#<@-wh77_c(?uZOn{;TJDqOtAnw0rrQ)%BiYYM*NZP&6ZmH zpa9$5?YKe4kzrxPdK3a+;SXj`X>>VZA{dQ}m+T|zizRhX(U2!43PrB^-AA5eWl3f( zNq#bd^tt9xJwc}?J}5b7Nl0Nsf&uC=j5f$A>gblFjrqgQN6&!Ez(l`^fW1pD0K;Y= zG;H*b7QQfQ5_gi==a_$5n6#PmWfhEl$K53j;YdVciWnqsV|jR(#3;l&Bf*$r$kBn_ zMz5*S^Xq$zFs1=-*2?BXZP}8hNp3Q0sVun|)V?H1!5h^eQ^c1?#$*Z^dCY;88hn-` zh3l&>@zYX+kNp1m?T3H+%R7?1{^ifV{PUmw`rrQb=l}PQzx-eS?O*@T|L33o z?|=R`is#TTO)H)m|6^dP;@|W|;q|*VFSs85Y8U#{TzcXf_$VMRH9*=>{st#%x`n?G zAf^@)&2IM378ECc-b6tS^l6N!ix(a=K-47B|5KDxr?vq_Z7}Y|4eB&uafPMPG?{`U zShm1e8kyq=i<+2RysHt~j-$@zChfJZ{6bP;d6f)0$5)tDY4AysiXwwhRzr6^FDcYq z9gH{XzYX^y?(?Ut9by0P9U04JLh$g*Ro=94HGeWe#p^vbahM~BQZ^2PYfUSY11r-A zagadcHQ&JoNohiESFrO^$6xIiCxGD|efOBSqMl1~I_c~z<~OV^BH!H^X?Em{zW=Nl zG?cD-zQL`L4?IdpnxvhQ%7bktZ#WCN)XZ_ddV$(!ZeU#4(~#*-G3hfuAN3<&XFiqhB@r3R(3bbN zWEB417Mvj)x~K~&V$1$gmp5t`?m1MA@cc4W_R-;^S`u+fs&euR5-g-bC?fCW^AjtP zCB#k+E5Dfuu9Pm2bl?-MC;!*P7RH4mSommy`mqpiX%G-X95igNGzslx3EtLXaWp^( zSSe7F{ZM8J`NeY0(hg~MNf)?G^CoyOlF}8(f2;oHNr#P zS%^ABBmumN@+}L1$-npDd~aD*s|*Njm8|b zocUTGg02>K?WxLfrIws0?4HqD$@=>4&DrmN_v7FG=KCMMc?nPRtLM*8PmdOYtWvvw zF)zc3+r5^!rcDdo%8nnTzlhGn;p7h;bmHe}8ffoMF)%G3;`1`S*LtsdZkGCUxp=MM zT*1wh)0P4LCxtZ(uX8I6Cd%a<{=v!$2IS|-In*n_?{rujkOZI zpRe{{mG4xJGxxi6l6eTX!zW}1^PX(*dYqa5NBjFs#Nz9?d1DK8|8uXrub}Z&v`&*I zB6ki<5Hp~f%4G&e9C%*QMDtN=(fd4lg#!!v`~?8c9hcMl%!Z}|O9M4+_!`XDK`ROL zbl2+d%%u9BXh|?5CiXw^2qs}3A)+%t7M>E{R_{#Tu0;eaN;2XsnyGYX)2>h+Z8Xw1PLB(IRmoH16L}$p2iPHX|sW*EywFz z7+GEBwa;~X=^<`b|4K~Dy;C;OTtkA6spDu>ubGu@ifW00Wg0DJUJKX}$YM10T8ufp z^c?CPSG1}5g2rqvSzJb=WPyBJ1FjQZU)4t3X0U~3Xwj>SC!>)CTDffb@7>kq9q?-G zjo85Av)Bvi+Y%7e^UVO63Cu8QwA*j-o7@qfM_owtzDKyY;}CH5o&#is_>6d-&P_co z*9s0^>iXSDS%j_TBTiw*Z+fX@)m)09M}@#s!w|`jPjF?6o^0GU zThF0zHtA7#iRe*|Jb8i!Yk19-NJ2}N8CGZb!r)l1Q(`7&aTzO$1v4Qa(iU~KOB+oQ zEgzB$W6MW8Osj?|tjWD1eREln9R*S6ed`DDEDb)i7(7i%8YxHPK{#-xWn6~2uu5G& zEx{0OGGFHX4`c2pCnu3JvnV=^>*D0#@bn05!U7Te`TWb53xef0AE*xstWVXXFEy=25IXa#aEt6^Jb>R zW9~nO-f7&D6Z0_Ov;zZaSwu7iQx->_c;Lcd%@`d6ybVOpSnmg7i@FbD?u!j%mSJ!( z!$pxS4}<*yp`H9M?ik%shmJzb#9hWOgziPXhW-k z6rpSsN+m}>q=j{+P;u0jkhB<;D|}}(pj3v{YJ_6^6}+RPR8(Ld7p9)nrT_8M3l#qX#Ylaa?Bb)K1AyOT=wA3Y%Y)&4TK>{qL=(1lq&iHi% z7A!m6Jc;v0_R5?wUq=2jvKQA^^vgf|!{7bOzy1kY9fsrFpUAVar z)w-VQ3@XX1ADUn0dqs`h{J3R1qmn^D^|W8#ef;I^hxj=B`O{zD|K;t+U*4Vn^8TD! z`yj9+{TN**yqZB3734t zG$=!m&eBL}MygOd8qWpFTlZiUtwLa!QSOY5C~YeQp2}|Kww6kUoPQ-#W!@x59wpLhhXBkHZ`5c&&FtLO{I)AQntzx z57W3-09>e@mEof7^L&XvTAP z{m^xeaVHsZW->q534SOjq-gl|)pNLzpT9U^L2y6wSWn@;Np`XvN%&~CU)8zjklO0b z(~L;n4fQiGs+4P|xEBbzsvb1cI$#i=%}$;lo}TW%p!Cw47vFsQ1{E$Iw@s9Pf)n?a zw?_l#TCZQ6&e2Iv`-h)?_jljE`3|KWQ-mg?pVMvWU!KySX60n7G1C1q^kro+=Y`?Z zpDk^%u`a*C1Cgz*XE(9{cLd`rjtY^DU@5}GN{A)*;Z|&sycUbdbGG=RjnE2qn%+Dz zZfPU38LZB?Rv&`mvE2xJrh`)XJp1$^11mb$h{|40uC`b-n@Rnw#4G(sx7LjL_qpCf|s0>>_f{{ z_6$Kg8yz%kqa;vpHtwUs{&#iX_)tTUaweqJfkn$27%Z!+Jt>Z38t^llv5hxrMV_Rh zm+1`phW6AanBc!JwVx$`3C6z+RShxl)O;mQ9NHj>xNd?0LBuPZ?Z%fTPM2;u54R&8 zt)4qU83{j{8!#9Fj>zL>+5)fGe)VCS5Tt77TB+Z<88oB&v*L_n>UN1{OK3K!yINmc zk?Nd~B`O0MBE*cc=t-p>$29`XUM7f517d@ECys7N_@iV!WLUdKN;-(h)0a{8Me=6V z6jiBW_r|Hmt16K`qp=u@JDq2K3);} z0{c@eBbiNTLalXLR&rK&w|u&RZ98}|J^f6lu94zpG^5g>CvqhgHUKUTb5}O}>{zqV z45>cOX$GxzBed3r#7wmX?A3Ar=N3M{1XbeinEz#!Y#@~5M6b)R6kCps#HLF^wNYNwl_HZF&9$zcMV)Asexe;6 z6icWS56|yr_gG$G3$Mz=AS$bX%j7GMW;-sEx2*dhcM%*KUsVC~ED*&>qA0EDh^hJJ z#o4Q1e3!Cx z&o8Eux#&Ce@b6wd|J$ElpOA5xJV6Uxe@W8K6oo0I$f^0oU70R}b)ar9AJEfTlLVGY z$uVHCi;3v+xwyRB2sppI3Q&*Xw-kHa!&e+(>00UJUi`db1kDodTui7nznp8xgeWoD ztG;@i3DKbcS=Jipc*vC%I8lWMll!{;AqF49oU8RBBZ*a$Qsr0Lom`UuK3#&Q6XB0L z_4@fCwju&*>Q~%1`MhdmCi7ZE64NKuk%oc3phHWyG!HyE0+Vxi#`MfizQ6tC`4@K0 zw-_~qI+gEf^KI+MHMmNmmR zl)-#57A_e17RSOh={-@CTs8t!%=r2F#p9zeWS!~p7aL)1DAdMJwV`mDG_W6=usqY4 zspJo4x-N#2?&_wC8~uqvuWWjJ%Eg%^5jZ8ovXay@9bSFvd7W#m;AS@N0VWW;Te>># zjGBw}$Sizcm(665{pX-E|3>$7;8_)1f2qxm$rlG+-9 zb(D8sopU45Y*VfiM3#1G_DU1>!)Gc|)miRb>i(-YZ5{gsbVHqAa`sz~RjF$hEmGZR zZsa-Vmf1sj80oj&vTvq_X;&6l*E(ogn*A;%pAx&Bwi0wwj~EorN06rFfF3RHo6(^e zl4(Bh7aR1QvUD+>b}f)sAbi2olKu+)vc zNsW$?k`CeQyPHWz@Z}40`7z$ttF)OI) zf4<8(mcrf!O0P7g7G%>xnUf_RDkKKOqM@MrsQ6TQi#Gn`xnq)4#>f*5sx&DZTU!J%mOk1d#xotf!Ubab$ zQ(liPwAk#ehI;5yR!F(KTN}QY>d<(rTqLJUP3mdQtbQ!Sl=I!I@+!lBn;MZ_gHwcp zfnsgHuU#yeg1M|hh50FE^2*&Na?`BT!AT$|xuqgx%Bb~Ehqe>AzIcY{ue`_4b)&`0 zA90{-TNV&Rt1^n_S3As8<@LSsD7-(Zl`va~{n1aX-RE0}ru?tSUdeZQclZD3A4|j> z=iFsZWX909HH;ZNe)B2I+a07z5*IdW(exrHHV%rHcblIZ=tvID5=CEAT;C$Xmr^5a z9N4%{n=>W*mB0;$fT2gmTg(pcPr%jM zj9nxA^QDTpaE77%H&K?IqV8N>v0LGtqq$gQe!m^!%)LmMZW6-4Xo)) za;-hoM_jiNBSL)42h?TbGOr)BRfo82OQ>Y_N&>Qay4n`sD=ms~*fP4vA&!(miJN;o zlB5vd!3+Yem_|-$zID(fx=P!0TxI41dzqgaf%;UpD6jEj;Blhy;$q#Q{ zzXJcW2R!@c>gwwJ^XD(uS5Uovx(H)$_7{C>HGUc~E_-?zCdy0Q`~({8?c7xA9c~=n zPIf|@^Ce}t!E^bjeYGBngW*gzG|?D!8N1lrO)HC_LumBYEF2}d!W*Rlf#F^Sdm?)w zsQ^J`nN-+uej?0cd{2&6zy0pzk05=I_soc!9G>nYKrgP@pYzmn9l^C%c^u|5?Tno& z)A=3xhlxM9^lq(-!5m^EWzRz|;c4B~r*Z7sS5kLHMqwy#bwZVo=^+$yP1lkb#Tko8 zWZDanfV)TkwbZ{7YR;+vacU)Y>hF$J4nki|@8tTH%Z)i&iM_BWGPl5qU6=8Xo+ z^^<^-iy$@T%0NM{60mNDTI^M1rnX~?9+ZQ>Doclu(_Fbp^)04`<8g_Y;N#-X8pI?B zv)JKYx!CBR`d*9bvV!D>pU}r7NFzeC{{2`68r4FjxuBWwfd&v6qb2gEMa3Wc4=F zerV5UqH3(VWcZPWu^@)LZ5bxL?Yh>?O=XlCoG)7w>WfgKYC&3Ycy2VPIEUH))3;~8 z`4*}c663-{D+GXc$^bY;TL>m-poeW15Fx_jXV3TNLAi6Gl#XgG$U3!|oP!IEtOV8& zUwX3{vcNdBn+bL&%gY7adF8W z7(f%A1lKrp9$k<1qgWAd9wf4L=rYKefH{o|Y8x+4PY+gNc*_I<1I2T}6wgl}r%Kro z8T;o&j#NgCB1?(l5r3!6#OVu^ZV zo@o5?yde^oLn_c#60xLgpa)^>jD}-Bm&PvVNcD#xGCSk3MbfOK*GkoS1f)vS$G`$p za}9R@wCgYM2|1skzX1&A%;#a3XE;{F=M_&LKd$Q(r~BsBNm!G`<}hJcs`N(7FR&!6 zW`!sa;*Il>Te>!JSz_-X(qp6znYWshY1kk`ZITFg6NgE+y)huruC$r?C7d;M~KhwHst82y9G$JCxVodaf( zEs_Am`S~YyNhTGlo1ApfEya&lGu8d7g4HPFOrj2>{(U>t#uS|j2_0yx`TpVZ?8V`? z-@W+myB7-uFHXnZMwZ(w;q2O~D{H0C=ulxC%qD$<4~y<-(?}^4*i%_4?gAWK&huW4 zD>~|Auq9cWAs36?w@Hu&^;3Gs1h>i_gIKCZexbU-SLh6aF$D=0WyTOVLrhpO(uJL# zjYDU7E21v6aQzv9^99Ys=5-yZbWD~16GanU?Y5+p=5`SR=J*BdZq6#!PRIcauZ3X8 ziBbHAn}86Z+2GTS+?unq=O^XO8R!Pb>9MohJ4CjkLt(h#T?gW8%t>E67ojgw>p6N8M#N(HT{%HG0wjlNSt1n_YolIVJ;F!#a`cK_q|XL$pwOMwij7=WC88+^3s)Sl11dsg@a5~AbiW#u@DvDmAF(9QJHQ}hI*|RU|;G*)*>~0+`JEN zC(r0c1-E)|eKeWj?b~Ja4+@IO*K?b|b>}mE^;AdS1<3bJO}7VIY>Uwc69E8Q$Y?}= z3*j{hsQ3aNjS~me%BkQ(XG@HeI?kg7s#80S%`_A;7M@!3q-a0bG)90jJ4__q&1=o` zMQ!F9rA^i=kf21@*rE_?NeDKYjib6pVEN zea3=C^G504UB@lla*fiiY4dk{8Q@x0G5ZS`8XfV{{j>~xp`@Hu@u)=2Z-JJ@4UL{A zm&UxqA$3|Y-WBhb8&eP3x*@XwQEX^iV05NM#MGG+O^Vo*@hqNnu=zi|dGXutU$S=T zz`8cRe7R!K?jt52Aa!K*5DuKn;=$b#p_ium`r-zmObZx7$_X)nKYTnlgC|d%lN1xVnL_J><4A|4+p#=Z*K{SD^g15V z#Gfg}l_-$C{ZuKxNY$mBqk4iyhngrv;6(|8nJu_zx=>5AqDB}S$SmxZj~qa2<9KSv znBnGDZn;)7d8;@E%rX_L<-gz~jYBfQ#d33HS#+A>J4PROZz*`xPEv1w%?5= z?4-4Ut>=;qld<5A9NGHVq9X^y!R1VJThvRVd&skF&EA0YyKgB zl;SEaDt^Ru{b0$|KEBwlDFO3|oK0|-USC~(b9(fLzxnp{*Tu>E$)8(Vc*nvYOZZRfN(irW z3W_7T!v#vv8|jJwsG1%j6JZt2glvTlo& z&lTx?S7Q9U@i*@~V{1zB>iODL(QNUV0NIdi~!d-ldzu`ZUH0@pKcg;OSSGKZlHg- zE}g(EGEni@;vpOqi`o)XMS3{yGD6b00$aNDhFG32NR6SDNHNy8=?hb1tGT#fq6|Tc znh(N=UZs5EN^6VPPT;w^(|o9i=IL4T+em~=0H!#Xp>i{iKszfqVo;e68ZA9*yndW) zF|N)i&OSxvSQ8(bhN)6L>`Q#kpD~7zbq?=1nTo-P{HK5E_(Q1BfOxkQqmwZ)>i#usWc>Zk=o> zYzrm6;NdKfAV<4W0=CHle0F=d``eP=X``S9l|sSYcCXXLuhL!u15`! z;JIp^iOYuB7u%5&LW}b#z^YD{xdSalI*#eU-{=BxxC}~M9kuu3=1IL}p5MXe6*9w&cJWR*gm+EEKBoY8(Y#h0U zB`o;X!@W>%?R1*_CHbBOWQ56up(wGwr1-QsN4Xnn$d4MI$^ zMc1$$tdc3#LC#9PL_2jd2$hg%U(AkvvZMg$7o@k)Fq*5>pu3dB-RZ(5ROg*JG=)IK zQQj{u^i!4|QL~7xibpo$NMBjL`6Ljv&g_S)wuc^2KSB zp2~*vgny|+@re&ly5As6y@Ch==b~v2?u+x8bK2V%@=y$pC)SE+wn(G>HO6|2a!#8> zB?+Ijd1DcJtw9}YBU@?>zp=)l#hWc#rqyS}a^cq-Zz-fuM1ysFRq-3fXh$eZh zP)cI+3$e+YmeRw$l8cBtp`pEdSvHDea_!NKe5HkW*N(Cx*lKwit7^LWSIaNxD*xlT z+It2Y4NsMkx@MSZceIDy+W7X2;cw5Nqto@N#cSG5i%?o6{TX-S)7EJ&m2U6eA>&tZ zPc@{=yjudD)~Z0iKqSR~VfUh|O|6PkRh#i`NnIWpZxO)_CP3$aBVq~Co7+6N_qunB zl}}4|td%t~zJug*#@Xa(D63JPt~_VW&h3zK;TBVO-06{d>nJ_TsNrc2TaaPlW#V;T-rH>YZwg1pipA?WGC zsb0#!7pW99zM1MRm<6JQ5kYB?kj5%VzM4Q^wqqHW_w=Sr8<3ex55d}!p?N2V$W(pH z3=4;{1+?hKI@-$Ht>n?Wq3fhtuZ+>nPfH7SPDAS$%2NnR5bJyaadWAk8-;~XND(~?8$O>sT!N=aVq4>zcc zZaugtI%@o#6;JWOa#Rhe;06<%OZQ35lZB zrLdwCCt^W)h-#Cz87{7~wMec)8<>hJ#N0X!?v`(Z&D+X+4=W8v8bvS8f`KdstikPi zW_ekOFVnatk0wNFvXVve>N&7<^vJ7E=b!)d^V^@_zW?=80M`$C1N+lkJ13oK+EB&z z)hMzDHeFYx?kRvVtrZeA_-EY%G^W`Q<^5B16iiuLEO+wHF}xLro$|T+MfVYRkT_Ty z>Tf7RfMjaN@?Ao?DRrlhxN1>I%~?Ovu~V!1cRyl8C$5T4g}giejDC_j(+mJ=K$X9v zb?H*YlS^TVv~~jV0Etnyl|svvFi?5xF>^6>=@pyw8Shz_ZJK%MPTLt3$tUL5fqWiaW{))+dqh{73F8n zuZ~>@D-+oGYc5XXch1!qT}2fMcce>8nS>tPVcpQ%m)CreO_(cGwnSi>(4Sz4vFp}EjwqG_pQ%XAlU=!v?^kVEcDd=>|2H{2f6-_jC(JT^;WPgxpaDxTo0^|L`zm_C}qE)ube0Dan?sV5alz2sxMt!gBkY+14^KLGG zio}bd`YH&A?x>?p@IngQ@MEl{8Bn8%<18Ht?aTp>R0k~5$HnI-)fW7;QmBw9UZ`>m zTnMlY`RXo7+_mUMScdXjNH9M=8Ke z5n+4W3caIL8#kh+8EeEfXbbwJ(L9Irn9FEesk9{13_QYs_xLPm z4-+0FQIJ6hKq=YCbuBiEA*gQbDvo$zG&!vlJpA;I^mG0As=h0p0^blt=;Dvx5gxtF~yk{KMx)#X~NtJ4kat@32T%vIQBhA@B}0-ZE7)U$1YYXmK2Y#u(B< z5=gl|t%Wm%@0ydFr)DJY%vi)*z-^kM#RLBE?ThceIb)*kBGSVZAMWjC(ijsMjy`4y z+O4Hd(vztI5t*s2llGhVxs}9rst}>+rSae(QjTxoWP0)95CjmN7&m16I)P6%Zb6?U zH)lj-%-HtNud^>fPQ(P~!ff>XLsjIT!T08~YVHZVeF8*(wc{RI9mo}wS+)~~Pia4@ z;Il|sN5ua?715&&`ZkZOdS0bvc^kbf#|kD0S&Gccx!t|~<-rQDs8+LSG#@(R)0f-- z@$=ia?>=AMhB5*l9l?XXxw)tF&2dqjW~L2dCS=Aa?@M*y8kJMALj0q?I6LW43c>*d zN-2qE<#I7Jx9en`3znQ}fX||3Nf_TK#ZVL5%``SFhJ(Uz`sVc+p4ROSUa&8hpFiJT zU2@T6LLa?c?w`${9U$GgWE~l+>EZax1Gkvv~5aav$SC{~zzbCbMS4C(t>rAm;x~CQj%F>`ME0N$)Y)pk#?b3d? zmgcHhU*9_L9JW7xe@M*C0bJXGz!bN#3m!z1g>l8m(-=Mn-0pZ7#eY}#iEv| zK|Nd@=GBYm8wg_EA}vfhz8D^dKW@#f7IJC87A7n0d?Br6(jH+x zK3XQT)q00IIFwR}1+n9B*QbyOziU_XzSVy=&ihuvYYIT25L3B_ve&vbCTe8%K3_DA zBAjaNf%>iZ77IR$$2d=8=}qihScZ|cz7kNA9@&Ugr>O$Q+9PG`=ADimi%Bta!-Z+y znMnKoxzNv2V%niJOsWW~PkC4Y;WLD<#6WqX5^S5Z=59UnxIyWDN&`?~*c6DJa3=>eq!N?{bq+(QOhH{Gi9=krGIucdxBkWQkz-#UQ(rAOhuWcADR<7qI@~4^w4JbrstrC_;ljhCPpE+F3xb&lP8x`8d$>?PKRjuoZ z@_`TKz8p$eYYDBQ!^-!X9~@jsw_c=AMqs~w?jmklaCbWjJ`3|(Vf{g3qn!w*`pc@` zt)x#vMGJ|82WMu0mhb7o=V}}yzw9u%nbpb!u$x36 zWu+K#ozzp_(thn;-ZW&yXEST>?O`IK?LFMxUSEGWKmX$|@7@x-DFaCHTnbnTv;3li z))myML%eM=u)xe>L!3WuEnlrH!70Lsm_9uiowtUKE4?m&N+B(@ivID9Z3q&xMq~5K zN_7!YWulFFrZYUAJo}~P@lB|$0fQuw8!LsMCYY~pPSKeIAYYryjWZda7v~ImTKNvt zM_d+V!y;Ch15K^tBu-;3(vXBr1QK#HCcTcB%#EXyRN&HWgJesI=*DO2wQpT&2i%>G zi8L9Kux3%A7^3D^(@`3$F=$PDS*D)uB2hBq9}(&3phAKl`C5_Ys_>2Krr~iLd8>($!iRtFqMN3p>k{1Lkzs&j3Qd;f4LRoV`3r3O`|KVzC3Qn zlxP}qAFV8jE&0qrJz2U5T64#Z!+g4hWj;3c-Uyr54s0MTkB^BnMEi-xU*ad$XW?wY z2v~oR&Zf-(vY3X9`Cl5fH2+%Mt|VAfe_|EJwE#S z3$$LyJqMi=M;>|I-~I6N#sBsXzkP9YG~oPxhgXOhKN>X8bCZA3k96vp~Ct+M&NBQG8uHq0w!a@$}DZPh;HIW z8hMZ6&HGAzvjVrKq&*@7d1L)==n>=aU2k*~jN53GyoIzu&n$hC;gD?ruaK3AGrkQD zIheDIxI(7y>lJd94fRQvS-<{$Rv8csI<~^9sJc-n7TQCEpFaxtFCx3Cg^l_)Y&p_n z$qc=)Od+p|XqHvg689RnRPQaiVT3Z(TR;b7gGR?wdx;4xfRrV(Hk3~16nn()mQrbH z+%or-@~;_cns#X)D~Y?XZGnn_yru-_b! z()^nkR(->GuTzSiHEd@OZ>Jfc(yyhs;q( zlIR=hib4>6bMwGn&!i%U4saCDoGm8X2OMN9!}=|gkwZ@!~WofR=~vjd=Y*Qo)O`U*0EYzIl=s+0!)g0@74HMMOOti zhv^VzZ20DNTQf_6bj_PEP9l5UE^%65HvIDL^1uGeumAj~xBva$-v05gpZ@&o`LCZY z-+jLRde{aO7b0s?B?RrCwMa19G{;)XS6OZgLG}wl~)u`l~o*r+-O(i6hBd4F~-yG za&9QgX%F37gy!NVm^`G_rtvd#q}1edw)HD4FW7Ld{A;u% z7;0d3Y^~im7lvW#5@XpE4$#+N{GsudMzeEJYoKxYa{1NzDj0#am&4^xc_OB0m_+r( zn1+U;prw`HVnVPU8iC}5K8(0-W0jiX+|NyS48=5PDOzXI-KgW3`rkPgL$0I=JZEfWCAOi$5Q;Itw;#Y00c@7q?w!majHe9Z97DE9QvP z%puRSG%((!J2=BUbE@~MOze?~oL}Hslclw$+IZmo0r3_Uy>xsNLJz6DSIOoXl7g zUO-^{(%m9L{vj8VO?3kDg-0PmUTNzF6)zcs&G zMx;Q1&c@=H_>s~qksL!$siIZ(m1gfZb=LK1|2SsNqAz5(ys%abiPK-Mszyy7=hwIc${&^F@MzsDAY#aV(oCYJt?cwW@&~INrolm6HT6_Onq+GI)UFt2 zcW1lg?UBnZ%ujsb>@>kuPHv?n!IMUV(>WDOx|8%;@}{8fF}a{0x?Hzd z6A!ra&KnDr3ZjHy57EMgzD)h4qs(+R`lJ(3MkHR24lAVqz!FaJD!eg|Yg}5MypfHl z6=A$*^z6ZX6kz$G%mPHk(C~kK_x=|uzMp@&5)9H**$jDK{Oxmf?7DJms8{@YO6v}^ z>{|ZRt$@=!W8FE~Eui+TBdE)`MZ}cz^#^f8qIYjuihaM;p6_+|#P*H&IGS6?8?ruj zk-o#F+?-6;)MB?{-QlyNqsX(%J+;t45^Ljjc4tE%c&hf_NlE zzpVq3d=2g*AV?QL23(kJm?=b%#eXCY+&X53M>)Sb+zfE|arxLCKQV4I1>&DlDKe%VBnzq@p?jto+#i5mLE}Nu1U~^2 zc~4Hq1`L>hzy0Z(|M2&}0}Q}^QXGfOO);ihL%k$5Mh95t=>=}VRXBR_OpFqaS$k@gg{wb~=B5*|3%e<+D{GkPAUfV)$_oX?mrW;Ba$I$kLG zO)ZZ|FOyRJ>RJ&OS+;dwK|0bW?o4cx00i3>13NWpj|vNFU~BkM}eCEIO5VUNZSgD zv+QmK$wu>%`76TFa53u?qyV!{lu1yU3m=DzVe*CI!CddCQH!k8`JyX-sT9cQl*&k# zbY9gGV-+pa##*QJk>rfCAmduE)_KA;)v2ubfdh0LjDa4KMWs7xeb%%&QE~aC*?=Z`)LX}>!J(^YVEGM*} zUL+|JSQs4>^3!E56&1qrPixf&qFK@QY012%jD1Z6zKa_gkSInt);rs7cPQ`9)$NzS**oOU(B2@tNqmD|Vkh=*S|Ri%I|Sd+5{-_vnoX#y#1PJXxcCDx+Z} zty|SRvt?<1$UuYf0ig^8XG&?dqrGPbE0Xt4NqIef2HErB$v&XqQ%a0IKR9^~THnIZ zsr0&bZ^s$)UT#0^4VXs4Goc6=B!i%Qr=s2 z>*kiz@*MX$vvIZC=*B_&9-1G(vPA?H5IO2{wVg)0`>DWuxi11(Yq38*6oNntN@SL3 z2S4~U>n*`YbbfXB_S5yRA20s$_WX}OfBgCFr@y@Y{Qms<qm2MhqxA#6MIsR0}1Uj1ft z<|I!qn=(_Q2=tvG01${QZ6?pj>B-*SA)~14Yqt+Q*VzxVy%(HP(*IGtpBq=YyM`{4 zp<|{Y2T|ZLSgMOMD>7>&0HUERNfQub*Pw10CumKN4k%BcwJS4j`B({e!4Jw@ASS4d z8LYJ0X5g#Yy>z`}AjOGR4NZIJUVn5MAFkDD%W)x}NMqQo>NPFmTRVEnzWkdXDAu+T zC1&=CrKrPI)DXY6OgXI@XfK+gBDWBO( z4hj+}3!m{rtK1u4sali$S6OeId{Y8&(K>PgNR-IkSo3L$3&0KXkv22nvO)&Sz@G@o znrE8x0YOCZm3KssXI_OfnMgGik`G&j6%gxJe$43o5p9FD96E>9?+J& z;ZT?kR7vHRRaj_&_0~xCsDveZ*&_!Oh z?#0w#hWLPmicZ1fAZUlm4ik`CmbmBBj8eomPNFkuKp2U8WI9Dwa;#DM3^9gB>R;U7 zD7jdZtmkai5jjQ4q+`vT<876$a#Kb53sZ^pQ^k~t*HF+1kP+A^30nDji@j*fq*cl# z17h68zLk_qE_Y@6gpsTLUx@LIJU)4u#BMUq4DSTD&_s$g8O#=6S3|`t1P-{7vh@06`E```uvyp-52`!Q!cK9_+@DV$fjuL{WYgN}s6O3PpETj1Et4l+#(?iV5lDD zz2-Vij4!yQmUXAf%%6BDWj-zm`o#6laYFuyNlB>NEtN-O4k@qlui2wbU!`?vxk`hl@xhzZ({JBA zXSkS}=btWrdH3#*zr6j++fU%Hxm)vlmBV7S6lmRR?EIXR>5xa&?X_ zepEe{C-hp;g-dC;5tS{9zY2h zoRfQ)QL;GtJeqgX@nDaTmTyB5v7L-e7oTsYAao2NcHh~JWj2PR;2Z-~BtrZ5zx$iB z)3cACzYryM!MRM_FJi+qxRI?fy;dkbaChF|y1MhGOknve)^S1^k0Da(+|Ktf8&R83 zR|6PXpiE~4Ys)~gkRw<>qiL=>3r- zTS*}i&0q=k$%9hHh01*)Ni8>HagOf0Y9(+n@J*ftL4{8I5a5>Tn+$KXhO05+P0Qsj zUrF>w_7)teTruX6szukhyLo8!i+|L|R4y%HclsiUS}x@WK}s)-Qap=YXriSU3nL)h zF;%^}C!NoAxG||O6yi!YpQA?aJ>2ggt478m+i_-d_3mjAzq_rPNW^-)Gux;W$S8at zgahDEd46>8=H)RZ`QZED&sQ&xiR8aJIr{tGe0K(J>v6+0keD0+yDjm#1}&YFmCLxK z{i_A<*Fvxn>}A|wuR1y+H|-d7Ht{*4-keEe>fPtLtO~s188ABy8xFVE@%8B?0=ojH$hZFQ^eO40`f+wvzp4;!o<(q!tl&O!?B2~P2lQ7_9kXB zG8aX>jAnEdt;(#(C@+E(&bUvQfi$uRM8=MJ%huh@Wj1$gNn8QtE^%i^qUvo|rQvq1 z$B%|$Wzx!@?(ca$1pxMg(hUV+xxM3^lV)4TT1JW!u$N12xHB!H52(D#PB*4hYzj3m zOXL4cuP)bK$u-o^$7&Duo$;-WyNN)UG{ZCqe$y5715d{iU{VPeAL@afSrfnRU|G82 z%;1}x!7(E}Lkq?$*{rEoZtj|d$glsGP` zV`vI1PSOn#L4kQ ziN>0ZRrAtf{57Cm&W;cH{qp4S+gGRGzMv@i-s|Tl-@ktT%}cn}<<(lu@u$`8>Ac9zCQ`Mwf zQM%Ruy>oFs@+$x<>Gk3!vs*ci8pLQJDAu0Oo0%B=J8R76eF|lS1iF=z>cnw?H6?gs z(HlLP#`C0-!Ig=FGW)hVM5jb?i7Z%tNA@N@6hA48>56lA)+!b7jxcZua2=WvA}!`Q zuC7m?Z$F-2efWF@_2l`N+w)8Qyk>Tzky4QZGRjAB@h4@O zjWP2%n;f^DVQ>S{yZZ9w^A()&=Pb_aJ2Tp#(A{lxYcN=(#D4qgCH}SBP$qG;kgp3? zkaf3tPEs+@t4z_DHp<=vfMbDzs4}7;6K;!;u*C2L9-SQUCz>0po*!hz#h2SF023MI zdMUOXO>KNBZfmKPwXojU7C+61Ym$Ha%}W@;AFa-TX3uvS*jz=VULoXB4n;R~3oGJ` zYmOdv_rwvSP`o*m+ASj|GpMtCI*|*%P9Hrxz6$T}VryPTIfFR<=J5WpO6=I4i>=-QgM%rBy-`&Du!j(cTk*#b6?0Ey~Oi-|Hiyp=hyGZcfF=Hq|8^(ZT+Ib$%aX@p^C5?Q49jbg3#70 z9pplgP=b(4mJtDHU$vN8%QO^nQvThspt9P0aX>+TFvYFM(M-BYTVg#0tAt>E#HEVA z5U0!qnzb^;Lev>4nq!R9&2kZJzm!I?X6NQBnWx=6k4eiDwU&haF_hUvcml`ML&$6N z>U7U(n&=2(x`%0ve#kbNhBYMzYmL$m zLF8I>MMZEa)f_(8ec}4LGDg@1rxl1!pOnZQxzoBlG$T8rJ~a+n=*JZ<(xlY3ofyID zt1Tjq`KweQ7uPqmtrh6fE&9-S>B;Ilu9Nc2H0VJ;rs6iy{=JoWSJ7Bw;cauI_Y5-R zyCPBU6xrP4UQ(Qba!a*%B*$~g5i+c_Sjj1Dc16lG>{Wzi{G)N?smI_+r?!B(RGEfrsK?k9gDOMyqA3(S&h z)@xX?_?^!DTBG*~w9jusSonWv)DT==+P@a$9KVz2H`-DtO_oo=NJ71kv*G@*Ug0#W zyS3F=J&8UQg2koA8jz~9c&;q}G;C_|R;@>B$^4yowL^JGyzASSsU0-k79jlV`;R~W z`u^SLi%YD&08`UZ1@=@ZHA2aP3f-0<`61)UHwZS!pbQy4-f(v<7pkk$B%fr_N z+zqb--KqZcXRlcLQrBQvx@=I#3(1hn%0IfySaXDFtRl3T6Pr>}u^ht^HSB)+_66P_ zfbsF`Nc(kg6f_E5dWs%&$o$Rvf}@b_Jj%Q(Px&m&gLsg!n)VEQCKfL#tD^Z<l*Iyeka!a{y)k)fHo&GKVGC5h4m>Qa;=EnmJk<970GS?Ny&wAtNg`dprfvjl$k z%r>q-4650kG684u(B`J;@hLMj^Q+hSw60wka00W~1> zY!3tAbQu%kkn`vmP2alO2KXsMh#;L3Oh#QJT`YTiCn9=9oHkf}?5J#uY-%iXn~_~0 zp4h@FBN7WD&KLzpQaf@ zwL~KD7nB`j2UV7q1qOJ61itRh$eZel3q$eCWTPA12+j)kI2Agxd{3vZ@pxze$$2smrx|B^4mk|s?BE6~|^R6J80nya0vAxG6I zJcqkhN2;ulSAa)TCp8_5gPg{nMNBu+&}`yI!OLrZH;#B0B_i&^0yCH02lq-iQ;s1u zrz9LDSDBg8m~-(mwCzURM*~aU^tQCzg@*D(Id=3S?x93A@+uEnds2q7NLp2OcSc4~ z8>!d_-j`pX*O#PhUb%#8I9s>{nKrZVGD;&6oqe+{ zm}$HLO$NXQ&jFpt{=*QomiZH_m(jzad9wDZDQUVFt!!v%3x~KNI@}qozmn`mpeo@R zW{zOseYp-V2ks9f#)T*$97I^ute6}TN3agH(vaHNw|shwvm}v#ZWZG?vs@p28 zkBool3-$i=Ri2Y(OV9DL)>f&a@IU(!0WN=@;c)`OK=)@Ms%E1Fh))iBNaYwh;{m1(}DQ{4L z82!ROYL3+^k)VL|$;iDs4)^X2;wUp`-4hqv(-KPmZG@kP7T#04(~W2*zsXj;m&aTHdC zU$oA0UDe0|!hSz||LXMlNwUDB=w~|(`feL{4&zq(IjKciKftxHCqG|ao%8x~aq$ka z?vPps54#qd5@tI5r*OBwdC8vGBiv~5wHBV5*gE@>_GWXQtT|pR=72ojSB_a>ZKC5_ zJ7ZRI(iu`5>BcbJFpn)5&GvSu$Hx)Q3To95JH^Y zr6^o()@N%pzn&NRvGY~l)>`|M6hxN~pCb+RJXM+~7O9!xPnDRK?om0-6!C(do@fQz zl14IlF8ec(_bT*DMEBYUt7TN;*OGyUX4w6P;mN*Yrxm|u_FUsm zDXJF=c(fTId}VM*8-#KoN>`#ta9(0TrD}i|Z%>vS1f^dz%6&rA1u>!$1~36_=SyDcd_5MXFq2hQ zRCad0*iNp|+wxmRq6TSkwyi9q=qX}C7oqc$wmk}Y(6$jTWIHq3jS4za%8XpU!08b<1p@NJcUsY) zdo|Ohh|of}G=@hadZa_}>M{j}{HXNL@ofv?F74$`JHdpDxf-)MvBguw14UaoJ_5M7 zy-*a|pRt~G(`~6WafL3wdTJ7*w6s5us|emPEGR2HqlH>@y;->3?wmBT(UM7A^C?fb zbOy|*JGrKcYUv3=@t;Le6L!1g`u0DA%)zX?yxO*=Kq4_~0TnTkVJ%_c1GjKzu93-P z$Ko(qMsa6P@?Flj3yLi^i3Pc>aV|gQVD7r}T=Cg#XNAR`;nvErvXgRSEC5~O0|@Y= zM4F~_{q;44PO15I{>!@$q<93|G70OG;)|C9UH4_*$j)oI_h|&Z=hXXCZ9dCcC88+8 zCZPSVFtPd+O8?LIG+<306#Q5`mq4Msyl?JYS*nO0i;-!N>x5>F7*mNQZ*@t~nM6P-v22VETXns25n=PMn ztkT627mXThue8=%+`5)aiv*M| zZP%$~siP8*+5U;_Ig>82M3N$2lK+)b&6ZMN1gp4|_SiCuZclE7Qrk?{vWIftHgc-@ zs>6LPyke?cFkie$VeXIN6|g!?>sMxrS8>t3vJ=yn=1Fsvm7A?KQhigh5;KzJYM~<6qvP?=i2q;o0dS z7r~2@gnY||Ox^xM`4{hA2=DH1?j@hy76d9kbQ(kF$99VP5t^R44UPpMS~42 z(n(b~;oQl;eBxM66lC4t3O$g+c@_yTWxznprIOvHPXK?> zn^z}q&Q8w4*u7U#liUs(+Z`DpCc?DfPq`HJ%(^u@ALgnAy2EB>y?GaovqoAi1-+eP z#j3Z$K=CPV#Na|loi}n)cw-AB7qiI>SF3SXvOHf#`#!Ec_Perj5?Hp-YJz!;iMzKL z3ae@e1J8`*%Ejw3QibKFW^-m^8fHLo$-$~Xro_cbWUR6D2n|%2L?$MY3CW_yv&`T+ zcgoXTrn3q9oAC3*!)dg4xBRFt*GNFVaupdy8q%uJnI*p|s*0p(>6Mmo=$4eKAi?*= z%qTM*q4GSnX%}?SsEy0OKudTdm6~qTl&T9cWi5zEEtMR`yBJURP5O4=`i%n_nXBc( zT8<8&a=I{5vpAu)!!T#eDP#s=5)DyZU#i&e5J3oe^LF)6JPWJ_g&R~b9Sx)NeuCon^&^nJji`@a5tMFk39Hi z7>iT1ygk2rkW3D7TFsViJ18gRIRZXPyG5fObT6`9L$SY@m>|Q>b?uV|fjA)ekOo-` z*7IRPaGh2&WK5Z7*izrUKKt$8`~bRSmrW*<)>$!Y3a9HdD+1>(gRga+9TpYg^y~yN z&Jk=CbOwIMd)fe=;b->K)^unzxz%P0eaLbygX%7kVEW)*dWuQDI|HKn;q&FM??1EO zGMog7FRlWF`Fwdti8Ne8Ai~ZsZt#iV3Iu10V;wDm)7a%nEkqZ()@0jAoT|LdW?F?2 zZy*mYm~oZBl92pTRn$>lPpC+FwTSeCe}LH(kcFmgpd#E=_$AFRi>j9C$^woc8(A7# zl$dTq>9;JV;za?Z3fEvG?|tQMv2;0H<&n8r#1Pzd?>=7s>(B51zkmJffBom5|NH;= z^S}Jt&u`y-0RF>lFXFh>PLPcZgcUZLjEM{pD{3m1oMqOyR5iswNsR(RXxa`IlNIiS zZF_q|ynb_kHS91IA13RY?Zd_0mk%F){mUrn--Aa~9|5;71{Tjq;J z7F$|Qi&^IlN0{g|ooSZJ5Au8k0i@`Rvg?B9FJEft9qY#GOGJWGx#O>vKL!9tiqNsX zaZ|CLuod}Rtss#dW zLfb1@nrI_@#(hzufik9RoaPDz2(*-kUhMqIA6-=aUB7R^O=*$c;Av@ROVRV&#(Ht( za?_N|nptuv#RvS8)5<5p=`HQdq55UM-Xagqw+bz(-Vb3ut`KBe2@$IlvRN|!@GrFgjbrP)~7=IYIY)+~dH*H8>g9fFMvbDx&A<_dlG*2QRgc0{PW z(F`pYX-tMY^F%ZpNe9qxVs?z-6u;<!7lDdEaeso^7&v81S{+4BiUEg|bE9408Gyg>v?6M@}Wv3a6?*BQ3=UrEDC8Qnjo&x-SZ4xH^@PV`CGn(Imh`u1 z83*A3X|@Q8*jB`lzWlsO*i7R^W|fO1T7@+u^TQN)aQzHliFJ8(?n!Mx^K~%k;%Rc1 z@i7zEq%Dti>SzwSpYmOI#A0N6ofOcqNDckKnH(#2#(tYsyDD>8H`-L&(TT`nGg%;N zLg@WXI7jj`0*oF`zJ2+e3=beK zpjWXw$T=dpgQ^fXIrJFhr6_AGD8HH_8u`=8*skAhoN0jK&fgQ+g&MmaWxFM4lwIN| z&Dr)(^`X*umr%2!&lJdD`br@rCF<50#qq|L)6XKmp6VlnQjyQlc<7&EMzpV@0qg0T z{OxbP`Qhc+d>N0)ohlLOSHdT!)<9tz1pb#au}Mf(o*y4TjzH2r59>3h6zlJQ`{R$_ zzd>|F6+R5_=8Ko7XZ#UI^(w5C0%2OQv0i?hh6p7-kM8T_bApT3G(V328Z|1BK8v&| z3@yyZkfy_&JOv{>nplS!!F*V6o7Q2>S)FMn9@U{4>%_I__)gRtyFtkm+P;w9L(Si?quRI<>)DKn-#3*Pe7g29Q28l+cZxS(17?BttjC-y9gT6z?w$Qgn6xjsXmmh*hZk&Gs-!6HOK-Vam?MK3`KZMZii+xFuI3uABAbhG zxjK)-qr`6^mb^zMr~0NOsq{G=%kL#G()6hPd~(cO#PG*L14d>1cAL0p{C82&Xc_iE zVtuh>TDNeoc4S5g%tn6D2l zc5W3m?p`E07pVjK-h7`XWVNy~?df8-q~?-UR^?I_NCk}COf9!mo~y!n*!a3Mkg+dL zPk#F0)ibe?+$g+a zUcYSh?9O(PM1zC#%-KqjxHd7kBR%`9*6ZLP^V8hFS=T#=ELf1513L!zZ zZ|kU4U#(au0b)V5=r;2qZzL)hwk5t4nTs(-BPFjFIHO z%`^Ry2!DFA#Sqo2?N8OA1~Lsq&G-)*ua~ejfBXFTQIb8+P6DW5gF6T}a0`2zE+9^k z8)+?P!wsv5aXi+Qgaf#$Gn_U|@Ii|N5*AWh`rRNy zNfzc)qurT)ELEf~4|Qn;3Z>vwrlduf!XF<0{OhN;Kw!Syd`SWITL52F)w;NO0PV#O z9>6dD;Df;F!;xTQOrK;v!~tZ~(|B8pg>71GnaM-nV)!tc*0biATy-Tl=QCgROIOhI z&aENwOY+aSnEF7>EAE3Q!tk^CnlY}&e9YLhLDnxpkpW?aT63S3XwhVD9{%+R7O|_{ zO7J);-0b6;#YK5*SUK?oc2Mv)_19VTX|_Rn-i(+s^HC02Wtj|%gz$r1l3;<2$9TN? z_*&~sZ*%9Y$QHt~%ZrT?(c5M_IkX(xc&U${`&mt{N1mA{?jji`Q!T!?>~RO z4EEo|bmTMd8N>pnst>b`ynGSRp!Kl=u4lK>SRX3M?dkNtUZ;cy!Z|Ax6CIUph_Sf1 ziHB*hL8XEL@yetDZ-pwf8?qJJKQk;8zk-%jUU-2%am0$si?U>iueoiT)J; zV#z%bhPI?opcsM6jJM^1}h;OP}z>%i04JyN4RsS zu-=tyc$)6Y0Uw;AV23TII_8CKO$tMb1xQ&mkc26z99gH}gAd6EoPglRuYkzoH=~5XQV~P-JBk(KLHGW|M`mr zL5KK;MxXJ(5qFU;*WFrpg|Wbd^igxeU@9xhZj-fIZAOe@!Bg|K5)A`;=T$TxhHXbv z7?-%gbeyv(UDxEenpI32hR;|{wy1KJH*SF2or5&5=rCT`RlyL)ILQoQ*Uf?o!_g1| zY#~vYN3DTX4ivf?d#_b6qRsQNLQQF%NVY0P>*%N#(a)^I)TPO+EXYkTR(WbxkKpYr zY`VH-Uu0pQVmX%VV`qR-t{e`{ik_=7#{z$KcFJ;QHh_vK2g+`$TKsA@)oehkT!VOI53~t+lzHe zP#3$m87uDf?&ANmwOS6G08!jLEI)dQ>8JJ;&?d75t!c~NS?XEmeY%UQw*sg$kE1Qz z?x1J0ivV<6ZMA!IzM#cOZ*v7RVq<1Fw@Z-{Q*dc*BVB%J8$*wV$%8TDUctjUpPZk6 ze*fvq`Q_EyPoFXE(1$p)FiCfP1%f2d`nH<7RcSCtBA&a~ao;lY#YgxQPUlX>?sK-1 z1H9KCnx_`Qm(vv3>x#z$7AoIP-GyqXw1<9Xf$})v28?71S$k-S;{U0`F|$HL>z0VC z9bOpuauxYmRImYnUF$S+rU)__uj`T!-6@lOC=aI2lC}IeEle}j&BQ}LnlOv$z+KoQ z>7{AT*|?|0IUHW~Y-LQr#x6032jS%zjThDE&GwVdyoN!rQ@e3v6F`rhiZ9N~N# zj5Uc8T0$r@TbJqP)Emwe#R#mPiL7ABG6}$41LzQSnA^1|VP>}On=qDWYg%5qAtEbY z(RilHTDUVON-Qm2!dCfU>oNPT4adPow20M$8Vh-_li-G3WZ#_nWtsWu=KGm{`AX-R_$ey!oSJL=vv*$H)uY%QGxgwC&}4t z^6%OpSxb4+|L7{HtrL@avKBUp!SZ0U*yM97%|+*Fn2Id}1B=jPn_M>(&Xc3~sCs!JQ zO8yJVceYa*b_+Z)b~vo;Qr0!Eg<7kTiCh6uM3|re#-c}E>}L50XRK?x2+a;daA%^G zt5_5&sHwau?6GmMyD; z=m6U@scOL~+N$yX@Y{pKPV8zi?9JJYQl*a7ewm5F4V$ZJ_@5u{=Zfn@?Sjs}FLs#wB-ODUH3#HcNSXyTV;U z>@6}d%%RdAvmL}?wu-V5mNViG0O+uOu>wmhSOlM}QA2t)lE8NnnYo z91t1%x1bE>xw2y2dAn<&`m8&29zX#RTl_|ba$MfA2fRYC1tDxceZEFS02cx+^8WmS z6dT|W{7DuIl7tfwFUT2WODeeEja+!Rp7|YmdsUvoi>f6S)TX64W%SVJV(N!ro`)dv zPjRkeD5xH*CR;PSMV zGug11R}^;OdWdD3N-iy?!=L~93Czp&!wy zN?L~z-XHff#w#gxG1e{MVckp_!5N@=6l117sts71FdXkKC?3f?;2R_@?2Yx5Crop? zC&G&Na(y6i_oON(EO!)|r}@6W_vCA%xIQPeK0TwO#M48K3orRrI~oeWY7ofDeo^{` zrx*zz@f36d+TA5xASMkk)9sbmGZCaw6!`G-`Q?{S=M=+y|Mr)^{6g9kE;b&Ve#WDU zS|DvLr#I@E)rXvh#|@(G)e12Z5YR;S(dInTr>I+2W{d(ukMd1fdd*^U)8P-&{RHW$ z?F%j|q6LpAmK#G)GkI!7--PxCBBw^QE$GG^0?tS4;Mr>3^c?6WF^8#oy{A znhFZ%)pHt#E)i)N4JOu^*HzZSoW-m*2FYWXG1z`)+;=ttKK<%PbrtrDmOQ zXyi8$jufp_lu#bKnOU}TQJG@?`j z$`e6@O3&QB;$;1urE%J}IDgYhdEHC-&1KS8F4QN|R>A7)iKGdwX7YrD;)HU_w8}%7 zeYuOqTI0!*q_c54;YEElqJ)}z)fom}r`4ACwn|cMxg`}j)uaO7_4zeZ(q=gbX zZ}_i-vW}EhqRJWe7}!|5h*XGcJ@j}hBE-16SveO-HRZ3Rb3|g=hj}z>?$me)&_YPd zoisEwI6A~Uxmpc2^SrIYMXO?yxp{BxYD6$CZb8br_8Ns=^Dk%9DR zBqe)~kW`F5mUO%{`-uq4<2zOvP@;}Ct*kuF4;29_drX@h&l;!D6Wh&2nUNREOHf3msK|2I6Wb5aC* za?^s$R}B?~F)2MqYfE!eeb6S{x;#rK#OM&G;!^x<9bCBu^d{@z;7CnM4>G9|L6yWL z?$OpnXS;`e20Tt5_INcrU_>msp42nT{p|bvt~02abe{iIfiYwDRHd$!`)b&CX>(4M3~p7PDP!`} zUX9xpqDAH@GZ*2&IrW&Z`Qc&Yw3p9MV6x00-i3tkAmIC`6hO75w76%CjzAZZ8YT(O zP&h}>%u)SmSCLr{+fZ^6f|SzfYrSSMJIni|hI zGYt>UoV*gjm>xpo%Miq?1iDM>;Gj%ab0`e3q&y5Hmd4D-AH-1d;wJ23QCN+_O&zt3 zi;$6RKpr8$dyXJ}F|V15=pAGqV#u+gfBkgvkqGep!~1jITmk~XC5VOa@gl6T!D%pj z$+F3)VLrKiML{>sCJjb<)5ENe=!M2uP;#jpkBZMI;|ax*yMGiJA-If#tr#T-jo=LZ zA7(%2Q+8CIjwPZk!E0(9=&`9cg0U5P&5jp(6YU=bV?~Z_jP0d0%k~1)WmE%ZxO|&EwNDQPxREr_foqQaqI~N48d*ECw%NybW^RU&d zmTuYgW$g4@BTD+0JklP)jQgh3oi{aWsD< z8f1PMzJK;K){_a)K^`H4`3l|m<>KbLYWZf1Y1(k|o$eH-1#NJB48k@+VeHceHeHln zDyiZ8`sURclXwC*`p~(NRTp|iJ_f-MwS_(1{EoTII0ZJs0o%TH52K{ zI0hPxX2eq#W3U#ayJutVh3o~AX}WGGrDb4Ym&3$9zl=MqVfZ(%U;ev)_}%l)BZ5Rqv4g#u- zDOk}$>~HnIV?uGgATuSi3H!RGn5dfZoK`eUHf@c~X4%F$&ITpM2}y2v ztdM&Re^#Fu*tltB$}eBdOb$a2%UGwrouM=oQ9NoZeh8v$0pI9{;ihN>WL{dG=2w}; zCewN=$;zF#S{n}-is)Qe1uPCB3+Xk6R-?K_T=GWKS5lavD<@H-az~k>R(QNIlU`s% zcs4#?Mxhch<_dl{JG5QUdMis~1*M@i9WKvbv!v|K3X61M6Mb6`PneHwcGGIi#5j}O z2O+MHM#5c62-0&WgAXN~zkoE6y}2g(fPSPA&cmA;dz@?ztR7ZofVyw#*-E6xr>%P4 zQqX1IW+jzPr2O+D7e*7SDsMhg4K22~LHmZsTi-#oOFPf6&?m*?bh&a2KM)=Y_XmoiTmbdjNr-oFp*O$_^GCbP&GQpgjz7r_%}fZq}7CP|;*tm&UfR9l91N z7;3$J#MS}umHAk-wHZ1Bs!c*jtW{46#|x4N)3}avQw_RsB$pyWM#yC_O}uRkGdo}- zCc?5f8InRa603rQQlS(WO6hTYy>JV0m3!N?J~tc=saeeRgJC#ECDre-1>XyLnIQl+ z^8Wk_;$N+1U}hud*djx(n7t(sL^h8EpfrJk^ ztlbt%NlqMeAiY1bOU8^SQ<$Y0D7`)EJ6}|<&B^F7 zJZYHu?vi(1tX~1%g+`WLVgy_ITm{4PIinD7y)=7UE80|4&>JloM*r~0t+7}+!Yvx2 zVSnNX(;lQPtscy6CbabS9hEpgyd#()i69qiguLkzb@bRnW6GrE(ecqN52ze?WK*VN58qxr zu$Y;xpDtLJ53E#vjLFi8sMvZANk5qdTPh29T-7;K zJf>IMsZw*z)&X?3YzjEaBd=Dd@Ah`G$@r75YZ@VO)0-^%sKS-jlr@Kc>t0!co6lqT)DMAk+iLr zsM?iCGD3FDQ6Eyq=Q$}9nsTS~4}qgI7z z6V2RxBm`JqwuL_G;*{kl9o3;XKq3fT02&=teVqqk8#kQhMxZM#cB|n6y{^;Nx|&&= z&!BFEqDy0y%}ynRis;*y9X76n7~_s?#_nwNBPUav^{bG_tL00CKG)U8D+(#S z)a4@`p2mYw@bY#cZ%j4Hqo(v*q(^MXD!NI3HaJs+k@7Hx3eBbiWu=tuBKV->aZ3Fj zU^Tx*rA0)vtGOf{MI**!0!t{MDcmbFOTjahjqaXf)|g|7G1C@;#+$sxvK?eW-c1x@ z>vai|9`5f-qZ|1;n}D$~({qmUjVT=X0|*CwTI>!*6?SLTPM*0yc1yF?K|PQ;#ZuWN z(RD6~+72m*|0wBHs~`u+h)1p9=};O#)3D;`(uM#<)+|`4Q7{tThz3Sg>^jTS+FueNbK@x;f@?(673U5(2p;3W%IxtEE&Km%?+ziENUb zOp4kzfmI{fRxhGMc8%^da?dU=({r5r{Q$whb(KL z;+%EJAB#{NFx=H_Ysv*skCLM}B!f5J~)ye3}r9C8+eY~IrTf%}kfGmrKDHJSNas#g;A+_%!|F5MJLdn4;bd94h zjn6G>&~3ub9qGzOW?pjv$U_0V+82#k#@2TA<Pj)>=l45pS3b{N|*+MB-UM z0~Xnf(}Uv`prLdDW5X`Qr>s~`-Zzsg)r7-qG1T^1BB>(acCx;z;RKLn06qP$sir2v zD;KTSGf9nXJU$;kUwrrg)CW{|un1J=c=z@rY91YMd3E#ayAOQ&<;xYb=j!6tvifYS zmvnnmS*KRJrakiJL>oliz!FS02xTDpeBs9^X7$vSx0a48gE@#cUM87R=-E2(n)Tr;slbYA) zj*>-xXsv`2P}hWLM1cPbl-28F4o^PSv(+57ZeV5rW!7viIC10enfz&}S=CLN zuTmcc(ju32p#j`-C$mqulNryko>8ygOa`O4MZeE|w5b$mzRX9p6W7u! zq{g-`w>&TB7iU-pS@Dp3+WsC|Gpyt|B5@R_6VW2JR*#s41|4tnt?G{tK2ehVM%|mk zUlQd8YD&3>3x;ixiOZa$&22WiK31u3kqou6iu}Pf6DNm4CN@_YFWVr@6Jv%<;38FGO z4~?sL$v6!V=cPW%G#d@$mHE$c8gB4g;{%CftuaO}n6Q=2;of1f5ngz9a?B>nr+Sm( zbut%{*GOi;Wy_7qXfo`m3Rt^HEe4(D(fn3o;yn`>d&%nZQLdD{aZeD~LBuni&>o1j z(k}LrX&3c`*_HE?*InXdm7%l&zlj;$jAF}k(7d>-1SQEAAYMR34-*VW>0ph*ue(L?Q0~&qtWp_4HfcKTjO_Xcls&bzdfxolNM87ByrX3iuU{_S)&B|roU9Av< z?ZzZ2a}vzh&Gchr(c(~3vZ0z%r$ak8L3Hu<_y}$Cnct!n5f>@%MU6=7Jvq>E&v7YT z+adU%kiM>;MV>K!lNG&C=Abd7WK}nLE~;!y-4+3h(ev(a9^9&p;i#N(YjFfVr!S*W zvvRd8fG9Ynw=k!vE zjpQttk=^I!Eq-1G`25ycCY(pGj}dw0t(nWbZ_rYJ%u{_FIT7ai5Y09*qZRi*zr|gw zo3z!y2{T`SSWWcS;whLn`$$y&q^CVD1kTYCPE9n-D|3Y=1JalxrL~ko)n}sdyv4KE zoF~YwDVwU(Nkvm3&fWQ)#b|(~w1{2Tw2fCHqB7A4F^hh}@p9jf1sP0qx8+q%(tBK| z_jNwmZDzi?Uqv!kXYe&t&mj!b+I($WY!TorHiGMG7%GOb-?oMg=qeHz3FzR&rxMqLjE@(%j#TK8x=Vk%R$`rIFD!sI|vyZs>+fl=t-2UBs=Uu_Vjsi(+$g&S!pVGOtmuJ^OY8Y zf?`%xgd36c#(+j^T!h13riYmn&Otc^57k6hOW4X%v9->~kXsJcb@FOrB5)gNdNHg; z#pIRWO*?I0@wX$?qO_`PHAfFt(SHPKTw7bm%Ax7_wb4{HH{-R^l$2j%2nH>A_suD& z0$p*+Lp4LzT|?>_^#<mXS{%1eMB4aVAQZ09nzc>w7T?6l!3WXoc4jvV z86#;4wlr!Nuc1R9auJ9ioxeps=XfOiXkNyzm3pFfz1=B-GtKX_)HwK~Fj1j)&lAR&0O#us&J~_1OX? zEkU(nWIDKYES4mTHg}JR#DHW#41WB}SE(}mlqR~#&2UTD%7Gj3UJ51<6>GfC~^7WFk-k({8>GfO8m%co>v<vFHHr#YR%b3tJ)KC) ziwTH66K*W2wco${^zq|o_DwuKgs!QDN&W+o?BvRsmq@!)j!m0~X4EaWr*?{t!VxaX z1u3_JdcnQp21bG&g7uSib`3e99i}wo{p|Y?L@PGN=*pA)hyWw_^<>P zBnip7Tgf7fbECe|xvtET=o=>}P^bk5)U5n_A|--Ck{M`8mdIPVZV`j(MGXn7k+#`gS|bvtJ3dXy8|_ojU#@#NMWbzDiJo%{0e(-s?& z(=LoZh&+|@D%oqDOsrfZmic1gE&NgE3oayJ)ls3=i8-*X7VWZ8hi23D8B@}Wv$=j1 zM>cRSg7VQ?8(ito%9|5|NUCkQSB+Oj0FlIvDomqN4rY*|tUR`+X70idZD`2IT&)e; zT5LL95A-D~N^XT49483qY~d#DqYGacB$^H8i|XJgkc1PSGR(~`+>}H5^mzY_ot%cW zOuk@3-UnF|r-sR`3PBETEh-m9lT13kZ-fy1IfzF-rRxfOYq&!cSHtW>p2*|Q<}IoX z+BtoWD+G`tAJ$vMSRnL|3}r7|mdRT&KaDOuJ2@$%CsG~FyB^lvlnqe7A%O^K#nV+*zLKRj4+CnVcvhn@jY&j%gCyD_P3m`Vk{3YId%j*Wu94it2yoZF zaRbS%M9g-}Y#Eop;Ok|v2(epBHj(W%b`k2PXdSDt>5u5ZF&1VCKyA5lg$Bt*Q;S|H+P{=Q_5LUvclEE=*`bftkj@DGCEGb9S%_CyH`7ybMN3D&-2p?knw?RIbM4kbQrYejIG(d~q4P z=_Kjuu4U^NE3|T`paa?c-8^){Y90 z-|Xhhr>$npxqOP&#R)h}bTuG)1`X1EQm%P6_en%P{R9Xn3}yqti*R;A-3D|#$vBD{nYD41pY>vad;ZqLQAO z58d4Pvorz?IOi#b_#Mc{({AqP6lUs~pV9Xi7*>KIKjBrA|vTG7Xy8 zps;06te3Lav{Uj5)zZCF(b%$5KO4U&VEwJ`V70?reUi&0mCspCW3;r9rGAq^HLA~D zr1__Zb>c@(xIm!2j`R-GF;H-oC<3htW-z@BMG)i*j}I?<%= zTugu#b#(s6^jg$U?WSK+g+YQU?u$VcO=g|l#40=yBU^DySsW4>tqdp&~q8XbAcuAbdnBpii&sMKq9O3jq zID)r3Jq#G06YxMy*AvnyPmkjR*b80pvwE`tS#S|^&9W^OX^XMI1$TC}_D!PK7`jX; zqDu@Ls}h_Dupr$!w_x}H$%0h@A_Nw~>Qq6A;4k{{GRx?M zoajy4F$Z=7ZCMKbTD7VOGUxoH=Ua3*?%|+BCAi=OBOeiRj3#eVeaTX@On+{Fb0a}q zNucl7RMDCUc^2{a`1ajLrZ)5I(bB6FVn><1xJb)sv$lPFnMhkUU80y=lerwL(@mC5 zhom)pq;uKO;DN?)M+3z#4(l^*N3vmfp#C2n9}!CB)-@l1X=(Fuu|`|Bw`%swy*SFP zSCLe{XrU>;cyMz3jI|e!UV_u;5mUTEY#^jA;2b+WSRUvx*{7OhKb=oG@{;QQhkG0^ zhZk}mfEoy(3vyI>e?taYei%)T-{rnrbm7~&ge<;xC!{EY7*4um3({$Bmn!frxFJYdQO^`;EHUG5<+lcYn*BW=DY18A?ROb9`KM6x zxC8xmn0X6b&JRuv6o*>pEPhbV-S}cke%ueVIAM*Kh92M>$cE z2$X?uNjZmqH(Q3~BOaXa_cvtqCX^ViFELca8kb@DjNSyk8=);^bxQLn0mt%*=J_>p z)(FHhv>pmT3B2PM6FkN06PnOHh_SP7yX$W4-3^T=EGkY79VRZT2E9NMs%{iFohmdL zIJt1aVw`aAmITi2#ck$qQHUzlvy>5)pRd?3PH&OCx_t6o)2;bwk)8V3>dlFApV1KV zH=?hGC$LNrLla-jhK2&wKIci`vaq`LiDjX^W?4{kUmM9!Vj5QLFA}gud%UUwe`P~h zu$gnPfI}Ubt$)O?CQUSTGbUW)C8N4-rwFnd!>ag`(qxChB=CZXr`^-b%UTX|+FK*4 zj2nz-BE|vt8avYG-Rz-6JdpKazM!A^^r`aN#5NmOkpsvKch1+FRO78FEzYB7ruS>! z!!RFq;pWzsv%}slZ%9+j=FR+KSLC;y>cIJ!iLom48ib$t$mm|EZmPM~P;=nQ2*|HN zK7m4|xQ>07Wy5M@DG@p67JOa2Tx?D*jr@N5;q$pRQj&c{LIsQ`m@VeFgkhzrHt4an zhF|jM4KH||ZCtG=!R1yeLAW|tQwg+BIvy=HoV2ecDArY?K&;Sv5k_fn`S3B8wEV_2 zy+VzyrCBOHP$PRw-_SzkPr6!bIRd5m2=zu`&aLgdCkkKT6{Y{4*P6tnM_WN;WxE1y3$}6S9cMG`A7Vj(hFP} zUtiq>C9_mx9ut}hV`++hvg8O2xt()ay;Os+|HsZ@7xEIgCf5p}NmbGQf23DLGz<+Z zcMde`er9}MvYx6~^WyTs+}&q%XjMxo6DEor(4Vpr z3{_N!rQ#wFS&xeHdS@mr9$btL9xF%~Up_yaM^xrUwEX?Yi(fu`diUuwMqFp$RySwg z*Pm7L#d?A2?J7%DPw=;o?)#Yt$I5eFjbizy5cgdSKV^lCOS%<`B&wI%+^*b_m$F)6 zP#z*DXn_>$5v4QOjQlmR8^bAUafI&K5zfvrnSEk^A`Om?Z~&Qv<(%PCXw29}G{Zuz zNhN4?6@D>$*>s&1nt!@!c8L&1_tjm~YG{e-YnAzE)3O)&+=i`aiF)9owf6WJC9gg# zzQ}>Xd5Q=?XiH6%a#XdriWsFQa!Fs*h@t<96iF(Xv7o2Jv6a24iL>sQ*70dS8>JZ| zJpAT8lBc7Y*@22IvJ9^T6R&8pv}ZYs3ig$4q^bIqy1F>9j&BQAND<$zNf?3MEc7D0QrfznF_(xnb!RBbl z(aTxT@>rY8AY-=`!5CleSlbJY3(aY&f7Sve>B%O-*P)sDqvWJxS^0GgC?$k; z8e{FMVcaY3=+S_$^wLQ*Yoy9Y=4xFxrREv6jFvGl&Y7xDGxrhQphk^{mKY1bjUvzy zK@V{c*}}VZm}1Fuq<4t@w7gxnfNlztY8QtgG~mFuntK%Xm?f;#gF??BjHc#X7TvnJ8!Z1tkoRw0|6bEA9zCKp>e# z8>fuXqrFn>aY6dOg3GDJ;RHxJE)%W%q-jh#DJIgvL|o|T4AWd@AWF6sW*I)Q>mhxg z3dwBRrU0)jkmmIi##jVOk=N~8WK5>IGSK4*6Bf(d2&G??l);A4{{e?Oo--rHSZp3x}wiq42$5zS$UvWZuC}VMQ9lH zlLM$|8l(zuloeKS9pk~xY$}3y(s|O|p~bxD?fcPU3tJE)Rh=yadR{_K>~t(wu!c%H zvI@B@6&snr|zV2KafN@PS9kIS24f65TxuGH9jp>nq50!7Rqa2Cyhcbt`ELItQ zFp>4k(Dy($%kin4CPk|5Mu`eSL`|MV`w)as4~Pj*_m;3se^xdvmJ?ltcGxY|g1OvY zHZ*nGmZ&o{ILBWA6BVQiocqi0q3Pv5)@Sv5n5 zhj&jX2g}x(kTDgKu89))w#Fn-kBz3y?@Re6aU8%*|B*zRV6-{HaU4U*jw2?FYL4Fw z?V3v37p>*Qv^4vHHz?1HVC!w6)goRno2|V-&xtS{id~pi<`{-4-%-|xyUbnkm@p4w z4NJS71EI*>nk za|u~8KXK2|rQv3{HuWz%l(9fYF)P4{jdDwb;ga68hEzx!!?$gE7&5%E7G7iSQSKtMq#Tr%vC7D-C8J=$(;PI$I3bl1G?;Z~faIY7 z4()|<=+N7t!3`!cCV*Mz?7w%}3lJBI_p%O$e}G*(#;eHFbc`^-7K`DmYR);UnCz@jmX5vP#IgW$&Qq>cYmsY-4Xy3S zu&yM_TWPEhM-#||aAp&%DCT=qK83={@$G7*JzWnsG{ zAGOECybDOPj>A(T8;=k%?8H=R3+=(WSS&*&hBsY43vS0IimNrctgg+>9$zIzA6NJk z^V>oMWq{PCXXa!M2Qxm|K zq>x6IaE9ULJxjVh8M`jrgo$3#Ct!4&owV_h8IA_fMCAun+qqP_ZpXSl&8DiwSCxm_ z3;&q@S*>C#HN>0gO^dB-H%Ri{lxgjoG+qD9;|ba&}7N^TRj`tz>&mA7x2UiBv7$_^PsVc zS=h>Q%1b|On7`xjWN7k{5FxWKiMuxMDi@SsnCW8sljg<|`W=g}u2wB2c^rhspgK#w zwk0shmr6T=C}7?ok#85t^izHDBwP9iWe#C?%m=>c~Kv0~6NGBv%2_TyehP39O?6KxFO{T#!3;h*K zyj4VmlJMEV%0fb!-H#;?&KuWgYLQ zY%GVb*N6?`mB}ond9mv?;^SzLxk}+@IaMqP877^yp?)Y7ju#LEOlbbBaS{lIa3ovU z9kXnXlL{zTVk8eM9BiC;o zy(Nq&Uu>}zu8g#<8H?=Bsq3jFMj#Pujmdy4A1v{%+%Rw@<4H58XoQi41OxddOG&3h zB(`X~S%5#o&=RSE;#zA7v51j|9auo9Y0-?R>=-{iWT2Cu&$fhhxOOng5-tZAlkaCyK z&DyRFz&KXmm;S5}3GO%-hZVzU7!l}>PTJXVNtS`*kwj6eIJs&9hT^iF166M}al0&c z>r&qZ&cho3xdulAw&g)u=Y`w1X!lm;$A$r-rEq2Wj9Nm3R;4{O$V9)=a#kAav&c#j zoh?5FS1`vyg=zv_2k+INOpjHEUFr7`q%$e8OFAdiISDE@dTa&vq*}DfWc71SmtG(t znG{e@E8M)yc7GxwEvpxcq5DpTQmezHy&!RvpAm!gK(+KCkQte?36*C_(&3FiHi$)^ zGuN39d`q0 z1wV zA3O`sWuP>vZRirrRQ`-&wkClivo_Ee&Sja(_CJYkirzp+6C+y2+$6MdctFJy6a<+C zR*Ax9mF*v$9zWaPX9ii!eqoK^*-EE&gVUS9fm1%%0F6`t zmON3KUW^ybqQG9<*VNFY=d%XCkQScBEU-sJbg04c2k|DQ$L_x{e77J?!V!*Q83wnV z*zM>fkw5n$Zctf|_MUNJKm+uE;5)>Nker+BJ2JQj7BD2cC;}a&!pQUlH%q*k_#_#- zrnV*Ety*5TV@bqD-0QZq3A0V!v$8Vw;ZWl&&2|$HgOzMqG`Y8t6=_59WdY*NIAWeH zri~&ip@n}lwUWR@+zX3`rYRBx9^R5Km&nK#kKT7C#0r#5x{ipk2be=liOHcH;iR}`)nms% zfZg*?HCFKYqct>C}l;0%MMZF4``rtrXT1=NciF@AgI{R_%z55vuoEf#Jd z(K~veWYgG4z-bptJwrZFN5W6m>?if}@yMKrKpzaMuLx0w=IW4GREMD+Bb1oPNbUSJl=Np}Hodh~BD{)|6ka8bn!^X^` zoB?i);vJMJR$jpNo2_VrhiX%1FWAoBU0o&ZC@Q8v7%&m5?yBs6_IW0+TJJMe^N|Qe zV_Cl=pD(S1>@AYW@&P2Eig`Uf!ZOV@QKMp-=PLV|V0 z4m?B+x>6XmQMbp#BQu>oiF`wdC&o4PVVVkJN2_n!?@Aq*iZCXX7Mq8GYob~;4w;3HQ zxmb(!C^{y-%VvHB{F2Fnq8Y&+_ND*(>+ip*U`3Uj#qU5knzbr1mIy$`Vy&b?ti9C* zVDsp3Y4m7SR1g zf{j{wvTJ}XlZbcyL`Uzsx-aCY%D25og3@U_6Rb^)&z*ejIo9qKi0TIw#Fj)of%h(u zuzCY5wy$Ik%Yc)o5EU%Xwi$XZ(*u#wsT@)LVXwnip{mQ-^VF zlt?#n?5_G%cku&OFOFpI)a@^7Wa7-iFBvPIXi8GREbk(TukIU0pQIJ8TlDz0#=opL z`Pw9`9I9~ecwi#~NucC{3M*5M2*HK9}&<2P^Edt^HQh0HuiXH= zG&JY+Sgq@A+@uXnk%no=q8yqQYZ^>Zt!l$6nabEU67m-_tVLvZlVWGwgT_T?lVL}p zS3xZ=yPVL=LLl;>E(aX}2ui$D?$K&`(*5Q$Q@JzUC1&2RJ@rWV&a>qujze*R(cJ&Y za=}E!kwG8XyBh~H=B$=sIh3{^y@bT~^TsMj)0EEcB+DtGpI1Ilm_K4_@@krGS`1)n zEABPt%z7b5sGnCZ!DLq{`tX!C2>jHW=7euLn||1Q+z5Lo;jbbFeGDy>(`Y&HPqm$5{sB{ls_xSU~q?lE*4`hZk5|!w*w8graE>+ zNo)ieBr9Z~S%_0?!i#-LC}P9B({6V{mZf+Fzuq`EEOflo(^}&;65u?iGYf47e6(-a zwfA1=7+(80FC=ZbY-k84!h9|}bvaY^2Lhp?6S}_--ExaDrA-;`>r1MSW!&Rw3cUR; zvSA%UmVi)>*H@ddGr_WJ?P?S+Srz8Ok$vI7N z`fsgOUn1)7jgSU}Xt~4mG?<79L_cmDF^T6+p|bq2*_EO}9533<3h$4|@yZ+0WOH?F zAL^yzA6GF+IN-X~YA@1z2=RgQ^q5?*R=tFY8NoK9{9hK+j0gP7*Kbb`xtFK0JKAfs zl)pcPZ>^E4V0>~eFhoDn2H{0{ZGJiRBUjb^I%unO+94x*eS81@cyo7g3HxS5aXz}f z3Swv^KgGVyGI@8brV|uc21fTp_gK0*H;Os{OF*>02Q~`I{Ax9Q6e?G{k)?_TzPhsV zx~FD0H?mvZo=Ar-V?x~%0D_Jn>Lhr1W}3_ic%rMcr2GH%kN3a7Ki1i%AxvqSI(Bmq zS|#q?<|N)8tFf^Iwi0|GYxl>)?NuYfuFA@(4rRgawaD|2ecxQm+8Y!FhWxmxpfNI0 zG)Fu(y&{ZGWoJ*jr5nag$_OAjMU9w(ijq9Rb1UNt_ADVc2u`}Y0n?mi+}}sO;Ww1% zVB^Y-^rrfXaj9X$-hnQm4=D4r$UUfb(kfNQy6h1J_CFkLgGw?`M^Zyx=Ziz3*O41i zsSK#2+E%1}HSas20;cX_vNh()s-c)NHXX}T*GJx{vEZF(P&34TQ1ua@1yOGCcGHrA zu*OAW_0s9Jt&)haTUg4#->nIoU<1s=ABdzu;@AdBp~^kCe^K>>ksF0}@y zE9P4H9W}NtA{-n31s6esw^v{}Myq9^Nam%ZBdBWV9)tgRxGa(6A@5D&f+hFWp)4&D zL7^IgxGm!+(WKbpRmE#E#Rnke)eah(cR0h+(>mjGxu~s%M5wZCmseJThp13m=^2wmsvRH`b}m37dxu=N*G2H!TYo<5qRVx@j;G_H*&uZYShqHnVI(qk;w8;^^tL zHVsv8*~aqTL7#B1@H+RhR9ZE*VA4mvqqs@+W=&vqxFQIMPgyaX)QqjwpYY2S%5G|d z9?0}sjXjw-ut+s!-yJVohVyX9-Iee^r2@2g*s7*BhG{ms09`wspHg+C|3BO|3%%FG z>)o=!ugxFRY94^|hu9@o>v7p5YZm74I~jG(ZDjp$ffO0Vysr7`qn~f z1-Hi?oNG01{L&=hR8;+Vf4g5>rLH@6%9e+#^1oldeg4{Hb`uZvA}Z^}{6scLK%lcm z`Y@3Wmh1N5{7#|3?|ZYFuW7Ch@nwftkgST|?qn32>4h|wWbD`YTxxc(7n$R|FwP;t zm}{LI8Hn0BXQ1Zguws?*XlFtV-mVR2a$CykUX5>BOxuPDg5Vxo>; z9~#|)ureFDunXoGTk;Et4^2B+n4+9!3WVIf4A+m;bqzJ==ZR(AUZIC?AkW$n zI~DaK24rG_P&@_4N(7@mG7oWQjJ3W*aWXpC(#?38|Qz+RAuU3i=i)3-j6TROv(BYUK zq?waW{tTZA;lxPS8N|VBn`Gn){_MOjW(Or98nBN|5QqedgyYDIZDr*D6^Yz&eLvNI68jSt`us% zZKyG~idva|mep%saO`6uce&9FO<067W7*lEx5HLnZ(AF*Rfq9LiONY+^*9I_u1qt| zyXy3I!sqHh-WGp!hCOg3%dC(Hh7ONY4NtxT6F>@@i8WbPsIqyMDu~!2Zc6B2V6>en zb!RsUB1S8y-^vRVVyOh42P0?jmA3=il6_h`3P3Gw4a#s1k`ohYGi~HjU4-7mJnY{0 z(0-d1zT~s6{-){4++lrQ8IMnhR<>f)Fvy-y+S~AMthe2rvzEnQ=fO7}ARUYPs?uqu z@aH@x2w3`%lqhyL%hF>lP&;M|Zj0(AP?8ChtKX0!xx`=!V%h`En^f9YGbo19P!GOr zcJ{1-+I_t=A-|4!%pvh0NqkA|s)(kEC}Wfr4si{TSo`4}@?EFI0e z!9q(}YVp~0xwChKHyC<-Ak%iWfe6db@c+e&WF36iFRM{K_^Id(7)iIi`(w6VY z<;=Y=yx;`$jyG}fREa8Q&|x0~y_s-R%P?IRJG3r_s694D3onp`)X4muGhE|C$?>vQ zugga{ez?E6zd2@2KSPGC9~;jykLrr2LY%_Z491g8=V!{9my9`Y)E;PipJB89{zRcb%a}UnCn*l)txG;27|#=*!_`%D>5OGn z;~8=~!-wcWQ&ae3FBqo%`Mn8J8I18S>drg2 zTG`<;&-{yjG!sY`(b6X+MK{XES<2lhPXCYZk9lSeWjaLJCFr=0*=E4Iu{54;kX;wp z1h91PqacIRUZOx|P$FdJ`*)ZB`>&4?2gw1Xq>`3w7b%>fXF%@5{moV85f$oJhp^%% zfB&+1sF%t7&6^xCt+I|XrUAc1f`q|p4bd&7Dg=+z0h$(=T0WEMUr}5TS>X;1Hh|+M zL2YGEV~JCGMV|thXz4m>H?0$WQe)p`KJlgxV^kEhZy#-w7Otzsm%zrP1=$tIO)=OEqY588E8c(JQ;n@VHb>6w3<>bh#foC z`@=ES&Ef!hPrhvnwZ4I<%{{9sHsTY8DxWI9gi}aNcp>4(Xj8%4m>;xHsM_o{mWRdR zHFvd4jGgi|dlCw(^s(-jUANRb!0IE}3b$qCvXS|;lUSUcD<^T!CfA06*;ljxY3(ld zU6LcTy`Hmx{%O&PeSSd`g zX%r@kTC!_9eT7GJv$21q+fYk0^hd!mvW-whaVjn5{acb0q4ILvT%z;NL$!3fI{SsQ zWPlNUnj5LMCWa)P2XeU$+?b6X+wF_i%>Us3; zNSXAEKNSn-0-hbpVVJn5;YWmZbRKuC5n@87s3Rh$%3dPx(h9~= zN9V0jD;S@(9ybUJMQZdaY}jR_%HlVGxuGM>qLSZtbOKB(QR4Yk%67%&5eb##?XSs8 zLNCAIDp=0wsYKMxjkmV9(|B}>(>c%hM*@z00BsYU2iD;g6lIU(1`=m*bznbqoHUXo zAuE&Ixq=a<`+T3tLpj?5X1!*9#Z0TW%ViIh*hWs!D#LW6*UDG0uIv*_iTRgvnoQyE z_Cy```}zvIa*+~%-DdM&6h7I9QWPv*@dRyW<&N-H{GR&)&XE0xAzil-LE@xVG}?e< zE%p_Vy8KOoA^CNnb6I_uRgJ-htyK*ble1|EDsxd&%8OAM(ps}gT}W=5Pa?akjOb!^-O1(Adq3m5r$G`qqsVfP(aUU6B2Wu5C`TR24A} z07hoPY|0O9{T-G9JTGuQsYjWKV_78*rWzE4j`2H}ow1XtQZC<^kSyL!UlkmL{r0kq zVEeX^!wf=LH6w~CZvb3xHnAjI?wa~0k7CQ)CuvFfK7gy}?aH(A%`m$+Pc*ojI#QwT zYUdT)*74Mf8UcAac7yiF|PP$>&m+C7>OzQ6*YIQi&H|}aWm+$$!h_>4~3Lt*|NnDNXXsEEv-b`f-ZN-L2m+sCk3a$=kSw-KRyDrAC+^1`bedSFe@M&7-vyO6tu5#I@|Ep~N3AMY}8%0f=`h zLPk0!xeU|2245qhxrr+4xV5O#v$MG8^>t@pt_X+S!1($<0c7HiWP7bMTL2X*!NCWi z?#r<#`JkGBgxpp|89@ECUKRJ;Q34@rKl{iv(K8tZu#LGE^S2HPQlCK1Z$|^7YuryN zQSK<-oprSo%dzn?SMp^;wY8H*P)O$npU6Zurr4}Rc9(1!Cp6dkVX=EHq_yFS-Jl^p zAK+8Ziin}CLm8L!5Qm+rV^);zY4fut*^zz~r8XBhNcCJ=c(2wA$%doR`(PW@a%F^A zb9Z#9{W<9RHrYoseI>1tCm9tFmzid|Ji&0)FQ#5$CQD|Wrn`|Cd_z4lIj8wb7eK5d zC!V@J^wl#Ct|8ux99i-sy?aT!hWoh@Us_-wO@uYx+e#;Q$$nb|V!b>K1cS9D>Q>YG z03ELdqa=Ln48$#zojsd<^1&(8(OQI=|Ah(vsJ(8qzmuK0LgL$LXkqNbhu>~QVQh(< zA^JMQt7k&g0K9ssOZ6D8kRK&qS61M0xV*nBVq4JLz65F)?{1oNPB}kvA%_t{!#%Ct z>{#!)NWKq|&<%*B2002L46jg~C~*y>oLQdvCI|e_Kkk0Jzs{tzz<)bu9CG}~Cl%V6 z?YvQ!6oYKkU(~-WOJ?P_qEpZu6bZ>4rB9+*TD9$L`XTyqk%0JjvR^6B zxCfi;kH%I~r=RIUQ=0r>EL{`@-@OuD*$qT1Qu zqc`=)Yn5dC$QISzFuLfr7nPzOIXVDXYn?Swt7%o*mN{1ZFBWe0VhMfPWkphNV=-kx zQc;nNv)5)0=7bW(ASFbX=VtmI_8$w2-e)ibiM|#QHj;02Qv4%5M#cd-f<=WX|52!B6_6Nn4>t-G$S7oT9Nco+(({h)Tl&s1e+tNp>157A$1>-%vq5n?+^YXlFp)A zxBYcbXef$(9Vi2#o6R8ST1*`eS&FETIyC5v`^HF!sG*TbV=w0`s$UbELXpC`(_^XH zUbeHghu&Ti;-)&hW6ctUc(KNip(K-%tbLw{A30FirBvX?jGU z%YX5$M1%R`w+|6jX9T6`R8PogEX?{-(Y97pppcikqp7*-;_P?loCcb~PQE`#x15$yLccG=em%7h1Zz5MBlgD0I3VpE?pSf|BIYrex|&$GR>y zUX(0+sa;V+=SHbE@{gEdfn%VMIzZ{GJ-KyQni!=ZGAvvbC8HlPhtqb|;)b)xq@%%j z8j%H2FP;!BBPG%^gZ}#b^{+2qb8y)St?^HLj7ZOnd$ITZ(*W|+G0zIZWkbEN#O%@I ze?{q|K>v6wsb2mJsc7mSZNaIUg0C<5%@1w0IQZv_dm&iS2)|o<4JA^zC0THhvh)CR z4UKepTA`b|^CJ$N9+_#GhmAl$8iit7aj8#nAc-CF%VxO;K!*X`Bn79LtPs!(zGB1R zF&eX=GIVIhqR-ySnUM;rkK6=U2}d$;!BM9%Z+U{i3wYdsmM=dy zct-aA0ql%10Ax5dcQUa@NQFxHxL<=*tyrc$pjbjTjdp^i@rp?a`Q`V*QF6Lqp8xUt z`xt>n(?py~n%-eeBdnHK4HN|t>VbUr2)zM@qdw_A!3;M^VLH1@mOi8ET^*xq!5|F8 z@W^>^p5{4%Jvrx^MyJa@NZF>yl=2SL8h=3U4N7<_*OF}S)(hc?%a;3Pp1(*2RFx=4 zVo}Ev&Eb#=xyH47vj)>wsykSriAy(yS(@E6RWf9A&4!Lq3m!Xja(>k#OX1$$9vjW$ zky{`+OB(X|%+CIZI2v7;t74dQ5=#r!r_hQ*augPan3hWqDI_^xWhvPH9AvqiTxGlO z?zR++|7BEL5j^s1qc@pPHYBYSK?9Mpyx=GHtQBfs{=ukiDDMoVqLnEY?1}43S`)$i z0;v`aiiN{sg2tFUlHBLB(Ub@%DFx|m+!Mj1v_4B$N?{`_vDEe1Q-daOn^1Trh@L5{ zMm5v0yvv=K>z&oIs{s8bI^PPMhtNt|+LF907*yb_4yFd*d#@VR@T36vfke=N`^S5-qAfv&pKfda!bLDC; z>2)$~Q;AxVENgKzSB&)q(9hjJ-=^h}& zELPB;=Z9IOr>VK?xLsgER30;1F8D3jjqZ}~YNa1zMu!bBwKFTeS~nk?g6(v_Z^-1A zl{j7>FQJhdp#oSJs&Og+O(QXP9EZyQbaX63`Sw2Gk+HRg53Q@%br)4ASn~dS>`9Kz z8p}5&?~R`zq|{eYX26Z4rAc36?uC}9eRhQ*4eBK4*_yv^q)N@qK$;Be>Qrf->;wY( z^c|9aKqfDed?3^gOD?k&wcl*}{@Q|c@FEA5^ZDzyPk()l67>Z(BAiF1M$RpBg}8V+ z97ZD^f4-O;8#$A{iuD1*SF@gT36$-6H$o1C1MdZd;9@*mKDax3(9Pd-o$5IyN2^l) z^!Zb;LQwOkRo}zp_?^9Gv*LPd^zSSebfO6Org+D%b`3Nug~{R%x(Y__|ST?{x%_2*ttl7e(MqW+L;n#5(#nb@fWXyx(C*mz1^yUV6KzAY7{21h`+Q zFBTz^c@@uW(mda)`yozqaLtldQmbyZsZrTT`6^op`+g|`B2`9^n^yjky1^>a0{nAt zR(WzSh_RASD!VCzWm(4j6-6ql___?Xl1rZY#@GlhzsB=cvmQv*>`EJA_DvcEN+}m4 zc*$CJQjQY8$Mr$PlsQ}U9Kx)Mt2qsp-WI-R&B|8_E6Z1k**oN2&W&+22Ei-g5#9b) zYqj&wg5AF%4U8CXl=Ewyh( zFnHQX{%SV>YAialLyutq^C-S)_yqMgQLC%vksDY7Z% zla|=mPsf}2L>^zxfY3ha%hMcIDZhrl=kdAx^J0@6|Cfc$pc%^QW|Mejwim<=rMi`^AHA~lnuiE2c0X6^Eg)5yt}zZ`xw^TC973K zPS6&gjH7|Uu2z9vo%VAi6z<@Pyxp$^Ogx;VnsZ;~jhY`J${h+%Y%BcC$fbc8*Iwx% zN%ITLmr*=29do*D-0APctJ2Q?4mnsWrP+&f=IoJB=SVuF@vA%r9@Hd;epQi8zjelw z-XAX*eXE~nf!F3wBWb;(Tmsja=%=gWfkqA)vfhU%+|_V{dY2g+@6TgvDzDPbpT2$j z`|I~0Z(kS^eK9kr9A&1ltPMGX?sg-uvh$dkBR*^JVKzTO89fgcT69jd>8uEuar}cQ zoa{V<*pxTvmxt@RJ2CET;=s+yNxPT{?V>9(aelT?9d0agBzrnnjgkp~eH zQ6G<4t|%y1htlZhL505ZNnKJMFURNFb=eahEU^#Cy(bj_}=VPFpupY3H5E&K=jgOYUzEHh7Kl)dQ=-ITTmB~dw0Jix&z3s z^VxWEc87cu9aX0fy+JMv+ca`1Z&AOZR}m~F#?jApVZ4#r>`f&;Pm$ivoER;x;`H3o za#kO0sjIa2C?a4FzSQd9{1XAXVAke(OzZ^FN!H_keX5HY1FWYq$-+{h(hsNYMO84q zfTAz*p_-y}+D&@zRrrtqNhll0D|wEP$E{FBHZ-SJDuD_|S#;i)b!e(55tngaVM?bRjjFxqW+Gl1ql^lzDcsYqjF1XB3l@#4#f*Py9U>Q*Xt6j@&HzIjp>g>5I4U`^{vDG(d1B2Ao z;=h=Pgi96Cwvfw~-Ea%cZKRdER>GoUj+2=XuQlVv2Duq20R&daOEBP~HTjWST|$yl zs$-bFiuF(?iKkvmA{4hTI*EvzdL2lF9H5=byvW&1Oa|@6I4&{KF_Wm~<$k%AwDGN~ zGpzC=j7W>ddZv^TAHp_*34@71ayl8u7a3*HEsj>>(AT9$O7`45tHt(C%oF4md z|1PIGfbq1B?G@=tSG6F<<1t%t4;!E{&1XRyMQORa%l=$ERDK)!p}e`fIlPNw;bB{z9X zYa_9YZlWUM2>|#Lgl5v~K7Ic3*WX|M{PWX)|NQ*dr>|jB{LgATyNUq%%7NM6g8Mw)1lX;)(%#GW-cX0;Z%H!E_xwwn>a7=kPG^qOKIyuAT`r$T-X!~o@pDuS5xxWzN zqvd4fIy4g#c;h;g)WV%?sa=(jM-0LmHmr*kTDw^(69jVKzCPqPn4~mkY42ey5us8~cNRx(8E^8*$f)=gEo=0jOc!WjFFLse zM#v14=9?K{Mt_mQq)Zlr0!q?qiBgnUQ3HE?3*YNfogDjX5m)N`B3eZHSoZ4KY%RWZ zKqpw0Unmfy74xflY~2fNj}6%Ce^?kie|vueLSUC(4dVWfui)XW?=vyNLp!!MrRZeGO1xZBiZjUc)+s& zW81IUgoqhV`uIfg*m0@_+*~(uB4Ch&v9Xzw!`^1?9QlBVDX}ti3R>3P%qh11wn2Nq zl!|N`S&J=9brFrTBx>{|RURS$D9R4+tgJ41OlpL2`%!o}+Ih2T!6x84pM6*>&59(Z z4q^UrU-_X4V%FONg|vc5v_00Zm>#rb8Ag+6)FC9(dW9vrZKmSY1ac}uO`oNm0RLid z_|Pf8i9k)raXA}8gb3}tM9EAq>f=>dooGxl&wJy-L@ilmk*pDbjF$6Y0wNj@K8seN z(%Q5Hpd3;{9CKtK6WM=nW2%8a)YTFJC=y&ZU;CYfQhIj$aV1OI?boP9rozn#<+`++ zv@G+{%58qI@D?r8jMQ(^2ylZZmkj#yEvUj#Zh6*A=ZU=WW;<4QLQcU2J3!ucQX$yk zpJ)Y4$%B)@YRjg@Kq#Z8Hz6IJvQ5>5N8B3Npmiswj!2eSh2187PH0 zTP-(}w=GIM0^{7%|7W7#IFICHX~PmXDpnL|<)O5%aWfTJh3?u2p*(zI1a>%3q-tX* zq0-dlfnHAgwTc;Ark$uR3U@LGP#y8DF1dB>_OZVF9G~$|3l+F>_afYfH1$J+SyvW) z#Pliz)U>imD+s5RVfGq7KtNac{`SS?P2@dU{3vf+cTI_c1*>Z|2NrjoyTWw&{{5kh z*G%I`gxl-X2x}juG3U8O{ex7Gc9Ou$*Sdo$+Fq!1uJwq}w||z-5aX)5&`Iu0Q%I>w zDsZfLB2Nu!sMy9nB>0gkE2~JdI`;Rqawe^}j=*fmLd++v7yaqNxZWbn0Ct+M_p{0W z<&1*V(P|Y~j7@@ztxYl!*ybNlz1$oQiC{rvIhh!72AL1P)nPj{5glOvoEToJlR*15 zM~B19Y`&iBOD4s3kOrPuwtSnpnbB!85a#(6w^`HCnqS6nN`QqnPMRkw5qxhMSoe^G zo<4p3o?@$#+RG0zfZJCy(A8VR7aolfu$40~jltoKOX&GILNwfVc~@%wQ)}Uj{rE%O>wb)WpP5b_ zWO^bo?!|7ej6fjBAiefBJu>&UCwtB)P(}VJ4h9leI^88wylcg1Nzn7WdaEBO%#qt=^e*Dl z>@Y6nJ3 zDI|4g0M9WcYSGb~YMrByl>UiS)@-ZXKF^!eu%V{qkc%0$w0T~Ro-v=|7HR2M9Dh~k zYU#*^!;X+RKaPw*S~3)uZvz+Zz7G(Dw5Z3^lar)tO@#?`hBPI%FnU=3AR;t`gS*Oy zyUa_vck$*lYdz^*=cSB1rXc392T|B6=i80ozT@l`lHlSR%%5fb%umx%$ZJlw+d9w3 zWS=c(XolhjI^LWYn^HJRaV6XB#pyO59mO}d?UgZ0WgL>X5dRKIX)U6cEBVU1wr9lw5d}m`dmI;0!PZ8s%mt5=Zfl~ykhBNUNrzbj&&l4&u0DgrRad>FVh{>>t|g; zSKq!}ef|0)&Y-_PfBXCM*MB~L{rm5)@e1Y2x9>lrOMLr!ee>%!;~x#I31xw_P#iiE zO!JMOiK4bs3ArgJ^RF^3BtOny zgg-kJL)rP{vfXES^()u+DqA?&_hz_LMxYeV;hE0k#*J7fW696rXG9BMt%&p15!v;! z-E;wi6C{&yds;q(PW6EOtDizErh0x8`6+j>T*^#u$sly3Twm`wR?;zADE?PC^GeY@EizVc0M#TE00DHX7)Gq;-A?#- z4K`@wR-=JH!VEFc^dzKBgf`-x^H-1d{^qvl2*jgGKXSMA$f!#XLnNDYr6YM5Nu@n_ z!KPMjDJHiAyCsk;QR$ijW){5HXd=MF803GML?6g(iSj`MK7eu1#A@%wFU}Lq!a+a?-DEDZw8&ViJ=r<} zxgr&7?qU%!_BqYcLt#geB1ibKU)U>9i5N#?vn+9+Yp|FRDfE7tElWseDO!gKF!KM5 zJ?X1R8C?%#Ij;CwlS*2hCtoxL-4U~%^ue$Eg1%>7at{g;*Y8gMNl+i^FV8N_cHRI- zw^C@!BoTQ-aVe`A?iexYd*lvCX1GGkbaS+OI-%u9HruOu7KK*OQB&MkqwaRoMs#F0 ziO3nnNC$+runs*s3J-&qlqdx52Rt@nxO#V0C~*qLPIFUlYYr!hoE{Nrl=3R`PBV>V z03k+Xl<9>GXl8+>Nm+ihY&8J(Xz)u;*0huBv94|@ysc(0VUwUD%ioad+eh233!D+! zlTX>kD{VH~1oyr@L`z7TFuBHhH!u^G2Jb;?p+@9PZu)--I2t9SDs<2qb$8`6n3+mI zDBY+ScO9Zga59E=18LjGfP~wqPD;r^sYYZbCpisZ&@g`ZJt{z1!wqMl_U$vj8E1Jq zvZ$jFT%5daWx-vk`!d1gi_`@swNa~Fo3_I$$qJ#!>nzQAKpWQFU4Z~f<5Lf(2bKZ$ zFdH??&xBj(72)TjLW-Xn+3Nvzi0U^ItL>yaMz4o8$k2?_c1?eHC>k3{4=F=bz-@`l zW{SI|kp>Wm^P`YmoRvB6jzq28SPRxLyT}(we>_T=#G0*npPPEvvkMxB*yCc(S({0W z=8#p8KO!r?-NQ9E75Gh-VxoU>jlF++@%H?vT*)Nj{`h(Q{p$M5_v^1ee?<>?+H0US zi`<1_Kt`q{gl9Xe|5S*zGFI3WqP73DNSkE0&bVGAbL{y)K1UQ-U*?4fL$4ZtLbjmm zTp}Q0jF`JBUWEhlpUHkF`1&19HJ#C z5O-L@EkNSBT1Uw2(k$hj1lWT@#*txAU1B3w`viJa_(snT`kd}^6!*%@^O|2j5VJDI z<%sLObzqw)v935udskOC_jon3Q8Q5t6st!{JH44W6-b5Itcb}A6Uz&G+eQ=37WpWEA;M8fdPa4VigkDJ(;Y(p7g0L%lVA9_Y)!P_xemPZI%c0?4j zuJBP-Q4_#5z_@QbAkWybSp&2tV5#uRb}%6k%V2cO%|C~reKuPvE}LX~nT$#C)YePd zK|3A00dzg%@C-@I5Y_F1cV5&EI%Cq&~~gPlCX+}9{;o{m7t>ySi|zkaBPQquhCH8 z-_vx8#-G2phNA&3Fi<_+V#{S=r4PXLaz8S;*g2JNn?eJ^C6_nB6j(N1qNtn*=2%%J zjY(K;CJqKBkKL#JPMWlh%WV7e>2p}X~ zjw=BLcoB@rK;@9=8+~|?Ysx@1I#Kx>N->xPmM-yVZBy4|x{{XJHPnS5MNvID=T-BY z;G<>qzy))?7yI(wPWRY#OC`c4)Bkwn+S9mFq*iuA0FC zd{fi0dPufah>9a*G$GUK$GJtU7P&84S?tztky6k=j_987oYxhaT3v# zl30vP7PPicg4tU%r2h!|2=3I%uwMvY~!vKR;y6 zJhl8;S%;NtMR0Jc3gGGs_hR#vNS7AhR|`I&qdw7HmRu$Y#cC;mqP zvaI=t$9u}3ttl3a>kYk)p{QE%Vm`@YuQeZJ2~$+n%8SgM84m0I>?Hg(ec> z=d>wD8@#1_Dv3v2OKwsQAh#0PsVCf1y4(!oacJTfhxERD2U%JjKn#~N?h*5|6-!xcf-SmGmy zvJG{uA^JfVnY5De^b09s3VB$HPv@d`v~f;*XT(5$iUGw)lYRxvK`^t6}dudtSl0Kn)3i%O90Z)_8hU4df0D*Uu?#z#UrZlyae{=3Rb77 zYGR~rvEMe&r+@)@%euV<^g!`!*7&w}JHz*F9X z$T=}#NaIh7!^93i7q>8zm3&ze;NmSi4PY(e-Xy-~NUtBxuI)UsNG|C%SeB!uG_)dd z-{8}wpmpoAHHdTorb%Ea97f`B?SJ|_h}|G0Qp;^FUT4};b}^!##Omp4VL-sCz35nHwkXwFhc21do2Rl10_lt;j4UsC;oae+7JP?t4B zv~VUUXL&zFDtQRO;A{O9XghWdZs(BBqlk;iB*T`<`F-mn?p8HIGpf>dw32roB5PHA z6ZtrM1#}+leab!@7vO$#U1vtrj{o`V%Rk?)QatrndQZee9=LXzeP=1h7bZ224}o=_ zCFnP^T$^&SA=Q{X1f2509h8@x3%Kw5dbVKMm>M&*nU`os+5*t0E|t$ce|YJ0ESdmp zc|Q5hu0t?k^B}468{-X}j+~t>ab2p~%*(qsr$*07LA&+%+eZ~`k;rV6dbA0Hxw z@9ttw-rfAV(MNQPMWp{lXr5FEOU6!7^9aCjwOX+*^ z3igaXI(Hc4WvqEDn1(5XIwUWO)5{jIA{gVjwgy;BSq;5r^J67E+`5D`yAug7Z*WGt zI61>+NRg}B3SJ16j_TKhzU%JL3)VhRymklC04TgF{nojsE(&4m-hq#6Ft7GCG!Z=`u@0Hy>+hOQfn4N6KcW= z5mU3=8oZq9ihmv_Mt(i=;Y2Y7HSPZJ5XX~DBE$9m&5xZ5{i16d?Z9nD^Q zuuC9b7o-=B=o_s7fKeo!e3diSv|!9KO$^PUL<>9iJKsX{rU5ZqD z5y-Z~zyoni<)bENfyT{TMEudaFdxi(0yP@Ec!6gz3Nd%&=(Rp%GdZrP(M)8L?$ zlW0!M+EG?9Lo05l^);vA%xvm~3x+5s8jsA1opE=ri1e235TQi27g@9vg_*+LUh{sl zf_%47)-CB^EeVH8FYUBE3G$|uk*yHvdYpyhmCT+Ja&=jEg^X_Dc+;jQ=e-r*CA%Su zfx+*FnyfY4E7%2j6Uhf5K&vi{i<(N7YRb3>aL`Fyc>AV_Dmi(cfayWn)wKhVxdxRn zKafN4T9WuPfE$HHxK6P;Pcs^~59xLQh|^Qer`1^5PKEvD0HnIQ$P(MrI(J#vxV^v< zRR|0OOwyk$w%6sot|v6ZchaRhKS@c$^XBeyL@yA*!3F=vzu$j+S0avN^k3Z+2q7`T z^{>+4TwmwXKE%U&j*MDKFp|WP5z!KPRXK-i@6Gv}i_15WsXu@Ij8=4ZcJkrFZ|^VP zr|i_(`DsYHRCq8K1t<-~`HIvFNEyogF{!4>B#JTWH_%GE!=2Qe}s-u)7V(=XwmMPX_tw`X=6)7XZ`6Lbit4p7G=8#z6g09`Bp?^T23FX zAcM@*>jnxhPY~kqM&-}GMPF(DaCV zQMUN_bzE;Ix^~+(GedmMAV_U|6nO`Uszf3@i%>ygMa5g~O$C~s*!4Z9l7WcaZsTLm zPz1#TY}#5q&@;`_)Or{l%&6*T161(rm#kF?H>=eU<4tTwBhKOgRFM;FUXpl&6Xv}p zBr;H5IgPdtutV;c?)pCP-^JJI%2hw1M*H3{V53BWc6H)Vc94j0@hcwL7(Sfkz^Ba) zo<%exBrU}=&^U~EJ#_jh*e7Xc`>^Qq2knJ_TXWn({+vikkJ*fhJSnY?9%p)B7Q!3R z|5x3)aN|&aNph=PCyTW>FC-7(O0rJE0dzTzJw(&XXXMLDQ#>z`|9Kg8&(LK5tKwU& z@a*g~@^1fSKe9MD}yUaNQ#;KU|?7@T?2SFS6?f4Nq^MNb#@q`Z6oAh zboatioGX#(aY8xB4!ej7rGd_s+eGlqZtIM^Tm7wk@M0q7$?jdnOS0r-cY*PDkW+_ssPY3DwR*Z3sy{55t?q$(;gq6DwMX>mE7GAf-R5mkP%bGPm;!eypWjTYEH ztPsha=zQk75n$Q9h{WkbY$K#SX8aA!3DPs)wQnF2f;KhEcagV_6(O~D+g5U!?9tH} z?}GZQc`gYQbn|J}8#S_awfoV>N7ajnQBt?!+sr`=Z(GPyTi~#L1JMDf4u1CvwXAbUEoU^2_Lv zuupbDCM>g{@oCyoN3~KolU0ig;lTP=#m7U-nrYsHXPY=F;|5Y(Z2=DHT9ThdRHHui zv78qVixE{HXr(nTt>BT)I=)?0j|FMNc>3VbWgG%bz=2qEzYos-m8Wn;=Q}m)F~afP z+q0-Uw~Sb9w=X|}{fP<@O`>{(@c}$C63I}DiubTW9N6ac^_WPj5YuHNOo$cYSNtxA zfm<;jQesb+QTCkx#0p--xcBnz`as($&lMTF`l{#i?p4U;h^mjYvVyB4?uk>y! zCq0!g8gqd_y5~8Cz%&KZmJkLt(GeJ?W*gsPK{Dm&KTq)o?VzEQOK2+B>CF>t{TA%E zKXoU;SSJwn5!OLvk)S-OOo2{}X^LE)nr*o*#=(_AxB$^B2#Bcq0mw-`BfW#YHDjV< z(NtDdE=ZsNML@d02U-TX$&P;3gQuKsV(y^StEVj#03-3MaUkFik_ch40_m_w{FJ2# zu$)X)k5r>-A|_-HRQ@dCRwE#`FJz{p=&$_~Rp-?dtwRLVVknK^q3BQRpbIG8x98L? zLW^)0DF3ZSUlSLekw}s}j#biMYKu6Ce77DhLZIwHBSG-x#W+>HVSJTum5m@_=ky8? z4e`2Vu6IFDS=ovTWbz)D)FY~6P-=qmB4CfDi>AJYdtrVCt|r!RMB!v0cGq_D>rfeY;X{F$m)POz17 zKuAXq8WB1(k+}_!Kv_aG57Lv|k)Pcb6_kCK)|l>U*aje{C2=gw{&?le5pK{sLsTws z9lpDXjYi4%X7*q;|lI+PC8i#85m<?<&=o2jg-5*VEjE-LA}2$2b5Tm;il)`F6sS-IwV%PZcnoF4qjLw`ba8fkvfaEre|35B zD(|-qek{vK7^l+lI$T9@KczP%y#~y+;ZC?n*dtgLdOF0tn!uh3H3uRhT2IXlnPma& zBz-I>q4 zEQ#HXmkoX&NjZVgt}2lLBw`m3O`O$*#xz2Kg<%QYUaMib?jH+V2OdaK4#Spg@^mKt z=5+s2jjQdq8MMGH;TEIi8a$S!*ys%KGnn$ zv_avM+;Av?U2b7!jM%5jRjnPMmw0uX%}0rQ`Cd9cvhPW%GCyO8xUC9j4+z;5w?stx zI0&BsY@kJ=XstnX23aTF)UQKn(%t^)<8NkK87n4`$Uu@_WbNlQc6CiVE*%%+3l*6=S4+V{~|PIWWo_PG(h*Fa#^UHslLUw>wSgFB~cDsQ+1W%BfYKGaEn`pcP1AZ)$LDbOv?kfT4ZH-}Pl1p^{h31cg zlop^RH>JnZvtSu&8D%+W4sq|AiQra9VSBEsXH2!;;;N_F$>0pAJ2)zyx=Sr?^D;bA z1@*ygFmJ?8KMxmGHg^?)Ictvau|9OylqO3bZdPVKs)4lY z?!$Ck?U97);xPF@CG}iJhl8iRUO_jTX3KPl8OFS?K_oRFL`#yDk6WF>c5y=$BfDA? zjEAl1P<9H73m)I0mQ~=#Cv|v39Ilnv74kI6-Qy<3vAcogbouVhS?FxCORlf0qW$yz z`t$eZe?9OOv$t|nrIs6?mDZOH3RfWyyfdX-mD(IP_d=F9xz7v*SeMYc2GVs4-f>sT zpQo3Hd$k2F@D1)^){=Wiuf32WPtdd}Q&m2V^XHnNWfz2gwEe8PXuWgcei|wkHAn;J zQ59jx+*Q= zz2P->viXJrcQsBFX!3LEKjH%HGoW208Y?i9iZES`R6}pnnp*T03N$;r>%Zu~*);8= zB0h3R5Q==lmH_dH(u5gV-X)8Eg76Z#lZ$X42+FXIBsTNl>gmoy`&wakI^7huV7di= zG0hOo^SnG)1||2%wN3fd5yG2dOjiL&K6?DYIK7*~E9B_h@2Ga5g=%JlkX#{*eq=#%MB$65Qa%1)G zGY4Pz4L4(glM3I094RAJe?h)W4T);Q`DZ-5`-d=+G*6br11b1j9b0*2;H+D;f9g!Z zn$c;BW|Y8s8aZj*xAD0%)zr9SJ7zt0K>69HNblFj1FJNv^#O<`;eB=qGh$sEV4k=b za5pGOCF7Go+QCWx`(A$m1-yIs7ACVyC)@dFEFlW?ijCYBVy#IzoR3Uio-iI*FXI|w zM|sb8G9#;bF2=x5@_*F6*@-$-Q0!QorjkuvcM8>M0Us6-c;Eo=VPhtB7V=s?Yt&Y$ zgWId>I)`|XK17`s@pJ6K!)Bo_sl>N`mJFJIxA%FWE%YTVH?RV7MTOC62xM@q^%eo& zWy}Z)K*;DZr1-*`Uh#iComqDqS#pHI0t$dAN}`swr%%t=<8$W0ezE`m&+*grj3iRx z(%gW;M0{Trt9961fWoc2H7)ZoA| zgmYC)Um5_@P?2c^5JYICtS%54OUoyN=>K~4*@OX`s(UB)1{D*21F{{*EVc-0Sbj_D84wFVjD^X zGN3&@g)sxq-y=6vWOtn%xql=4u`mn6fgc`$$oCUFOzd2t-woU^Mw-tgA?ZO=!$w6q0o;~Mt!mW;)Juql%G}e zCe~OBxOr}5vdO4x9G5j+ov2VN`s397ybWmR>$e}**EfOc}i4Msij%caW1Vw`;c$C*f3+=85;-=4t z4NZVUrwQ5ntY-I@8p(wmWm1v_ct3d9laF7h3oRiM-L$%=Gn>J&2--@}m*BPQ2KutJ zD$&R`^$>Qmz~^bdz*qq}2l{vRczuQp6U$!sU9L8J}=Dqyv_eI%Q0O zvgR!$v)e=?=9G;Wi6b;AJ)B83ZtK__&|rmIa4tLWWX zbT2)5!h+S%g2%x>Y>MkZ0w4wm;=l+L%VrI8D-M)^XbowhaN9a&a6iXB3o?S8b9#Ti z{rn-5d3r2yI35|MEIlJMCrimn>T$&P7Eds87C_RsxRA$Y5ETwnw>OXCN8S2lLYT@RYR$guF*RTk0QUV?r|) zE`~m$ST8w)jBI%@mjA(`k`vdFifcJIYd`QfB`tEBx4rKD6Xx3z1~W_QF$qk??G`b< zgY(5P$QP_RiU9lmt!GK`7iu%-BSm>*AFXQl=uP_E5I*gVl+&~(N0yMO!Zwj|LFWY zuetFwmv+Jg1Qf-RhoOVD6Q*Hdvj(xx(z?jLOx>S+wk??e$-jn0%sC4Nlwy_<&edta zy9~s`KuQQHpP{i5G*O$#BF#7k(L-L2@c{)P3-ttL^+gdYAHvC)8hFIa%CukZB*DQ=asAu^Iv^}e}2D-(-!Pc-e}NAre4olr$vEL_A&X?a~a!OYt0t7 z#B7Yp>EvUj@?pO58f(P#eSypymQ_*i1@)X))CnPVS}sK4mH5o?y?m%r*ybXISUg}% zR%}iz4vw|JmiZ=X#>@K#fx<=%f;_|*`=spJNzDvn%(G>t6SJeCgJ*=169?o(X#aCJ zE^B{gsR1xcPUUX`)U9m7#yKJ z@|Df|oz;1WJ{+|tlo4?=7_W$AQR+(y%Xl$_BMl0_rnb!FqXeNF)JR-xknvfG|HTIx z?{0FA(kQftlMJt+&7ti`0F9tkTP51Xym#z6xE?@5{LUX^NWVe{5z!T_w%!!%DYsf}kn+;XN&0fH<#!+EIzlhRmPf~(C8Iq<9SM?~t zWft7&yebfGt`!#Nj*&sS{HS(%8W*mjbe24T>oIqpXJg-$X=nL;c^tYr@^!s1M(NBT zgNSR+e%D?Z3-5ZKW$d3odT-$-@8H_!IwZzeiH@|$x@79$VNnfRNk`p& zU6h+%Gszg1qlX_c9hDk56(1-3HWr{ivAR~`cNS5VJzOop8t9&>D-0R)8D!E`fa*CJ zU2S&caZP+JQM(?AplvP_1Q8;Qp#oL zx-}pUMMBXS&9xy6SA>ONQH8$pLAj?<_bR>@7u?8{l3^n$2RvkLNF6_Cl%xs*qeOBI zH4S9HC1@k;CBl%^1c7E&KY_OXlI8Y7Iiy*4Sq1Y|D$s$*$iQ05 z<9fDqHOY0B@3l^b#zq8mL`teTz_7^HTq5T~A>>&RcqYO{ z(Jww(($ZaN7|OGrx~g3_k}kEL{LdRdk>ROP%c@yD#Wl#(4*=ExD4=I?s zYhhB{;IuBl9!iji`cc@6>YSvbjbtreR{4Qi_%n(Q9vus~Q;X3{J>x`m@dK4~0+e z>)uNAx&a=7^IzB6Z;S;oIWtl8=b8FU`>EH=oo{*9eK9*N77ISBdSur(-><_tecOLO zN<2i}7QToYL7et$bqOWQ#4LP4(6`}BD?)PNKVyMJ-%zh(MzqRS3Y`E~G;{m{qecn_ zrBWQ$)c2HWsIiC48ROkM`2iQLPfKV~D+YUy4+;C8ygXSvm^+*otH>4hnLu%taS8Kr zM}=miQCMbe%Y5W#?=!o+-{#8fTZ^{7zRuKCFW!~jzNstUMhBjtyk|P zWB*7=B0;OU8Y}j^wWCPzWH$SprVB>SZLE;N5Y>!wWPUHjHEZw+V~byM_x^XVq#4%J z3Bn0-$Y7czpfyG?K$7xGF`Jv@MkciDp!B&ST+rqTbjSJGoY0(p6pD?XG@@2dS?MGJ zvotP((bS^Ovw-B>r8g4h$~z^~Dsme)ZX6rJ*kZ6HkKmvv{pty^{5@k`-^h_NFBiN< z{@QtN-!URG$WlyHk=>*qGD9@H1`R#x2&#G_8}RIe!IKk5VUS19qdto0K`e-;_=Vto zAP#Wqc^GThQ-R791=f``6i&A_GghBM_4We;(zH5>JH9rypc` z=iFvl^1{1+$g;V7j}i%}1Qm;O_bZg}i%x?o+XIPvvxpM2Psf?}s%#6=6(io<=Tg{F zIyO%hsw8k&paLIthHjJA>c7;#rwvVbEI`rf?(`czYT6B`Da8v=YWwf}?7PuB$A@Lv4#AFsKI*(>mGQCxS z2_1fs<9}r44{N)k5gA6N_@I2Eu7ib6GB}DwLgZ^c{L^VG_f64!oPnKjs2!m^)tj>E zC(}9|__I+PBGV9CAK<_X1zuc9}q zLUqxB(;qid4!N?Tjk{fr$};#={wcj9`&&134+g9{u}Jygiqb(;yYG(!nfyFmzwTO) zvc@267Y_qN@HsQ2LS1JJC_qMxQeqvm}V{#iKs)g-1cU)&df$V_Zn4O@757qX1 zn^Ax*1d*d;;O`z_L}$7q!=2Y$zCADX0LolN9by~z5T60wSvDOeUYpUGPYxfJnHDs$ z26aNHdT0wDo&fsL&X}x|jNLpq_{+nLLmZmKq6^cCn!5y*vU@j2mB<26tlU4p7kQpr z#ZAv+SkfDxO&5O)myjNab$n@<3<4hZvJ>KPuiV`rH9#x2j?CnsWPAaJa9C>l>WHf{ zqdW?bg|%4Vv1CInpv!#}`ppzQvdxJluPf5)s0qqrmiUb|3nu7@l~782b9~B!6pbSI zNC%zuf(nY^k18RmbXg%SCj60XAD$HjA?MN{B{{ zi63poM5Qn_C10SwJ)(C@#J19#jFh_meLH|bHZ`(DX`CBPhBEUtE?-VsK5Yve0PtES zrYzBx(@yQxibx_(4w#g7spgc~yLv4mcFT(`i!=GYQdZ?cJ~4Gm!i}c${oNB>qf_d( zhoNk*z4HqSxl<8>StGe^x--Y>hcW~ob>Xr+(-uyBD^vaQlcKOPswq}V8YCvE&N<5x z$mENdcN8rqLay+#pMUw~@=ff~u2EEqXKnwGll7&V5=CdgenF@tWdQVCKWSz<=IYRbX|9-1+X;U3AoUXMas2e)~1? zvIv`W?O(n-Pygh#hJLo%?N~@wF{I<0HIU4LgJ65g=AHk&**C7h_e1{WW~0F%(z>18 z!gu+N5;txD%jLd`>@^Mpm0XYI75Z^w7>JM%3T0Py4zGXSUtc#cbbDJGQFtavwX=&U z2b_W6aTmlf3kng&m%3+Ekjc#|nMv*;kD-Oe0S4sGjm|_x07*c#^By0&LhIp6UB^u% z^DLHxs$P9s_;-%t{RuD`OT6D6>a+MGgMzk9x!xosO>bMWcO-oF%wsA!w+&Ye=i2zkA&8$~IDi8Y9~znm zLIDoq%v>q*#`JBSX5`_s!Kv!lH({%*>GZ$<^S72&@AvXZ3j-q`?QwXn?+{;Y$R7hM zLW#a020%d&Q9aI(x(J?gs>QPqe{}O_ehI0fTy5*IZIe-1khe0V_&h4t$N|l(Mh}yj z_2$praZL`B;~6AJIP!>615A{-TNmvwV@KL${(gbt7e)3A;{YOR9Fn|vE(@J-b9G$I zZCd>a%d}%8JQ9{FWk#K-l%tjava%;No>|<4viDRE)>axcMLVq36Ui(zBuAL$8Cn6)SIPuhh9>xn0ovs9 z=$W^J8`_xh-lEymT13XBD)OjtK~#|SR+GI4C(`4AOL#zzl%lN(qES$ST`dzkaZZ|S zBsKMG0s;A#UG)Ky_PA~r=$a4_7!VrV%HkxVL@+aw#vSykDWcRY*w_$fZjzl$=tMeJ zpqacLcvt1d%g)^T(o6udIwb%GT+o;TwM!^$bOLH{Ek7KI+9-x)@2y3IWoX(F#uEW` zlV;4;smKvN?v!KPA246g>u6H2Hsh~coafqa1`4*36_1OMc7wo_7h>i)Li`6;cA}mc z=s6ABj>xwg2I7Ah5n8e?ZgvmX1M_4xnWJV=2&JAZcvR-Uv@gR(ln}fv$Hx2cAoXh{ z+GI%*M@I8vMbg+%h!S;3U(;zG8E1GDeg=tujsA{h6;@?$YwkffgYuJe=^{!ikk6q7 z%pPE6@*0Rx?z{o`OS)fJ$?ltZlU?wxnB~Hi4Obhx@x8X0ji?cD zV=mfz6O3{^DGv&lO?Lz%6zwq~ctj^hP;v$`EJjmcK+L8lbWN6i3438T0`I2?u=U<^ z69u`|pEzzri(nCi&z zn!a90f&|`Xwk;r9FACX1DJq}RTe3>u-`_PSe0v90{2_%285fiDdatrRIcn~17GeY3 zSn9?Iiq(+%qI}^RxSR&Lk21a54MX^ZIQtU8SEz$cGou+4ym0^Z)5#DLdLyXhgv{|^ z#brmCrW{1?p1DA1xvfBd~Sq=p_8!f);c(Gp;s>Z&Yr9jsZ zy~w5$>W#d1Df_DYxA0yWc`XKiO&w#B=FXt0Qhxg<0r-u$-Vwlj!eJv>iV z3mS1abKiuZVP$$oM(W%eRLe1~lDV-noN!ew31=!F$BkQkqE++r=kg`z6NPqWRO0{T zvvPcesEF$e9TM|v@glUiVn=8+F~yI=GuK#%Iu&?*Z* z^DHCi7z0AYTZK;+DRv@%Zq~{*n_(j8aL8*j6RbT}GjxgAcFJp=`mqQI3ST-cFhk|l zM30L0%}Ox`-Zr-m=mo?%&i!Tyh>#Y|#LO``qY(M(42hQ66pr?PgQsCFZT^m@R<@UX zR)nrIMyf;LEq8ibDNN->nde`V3UF!HN7ANgVNAH{6usI{HD|5w8whH+vq*Z@SSK7k zmXz5WXwPvi>`or0MXLctFGs|R+TC4?clIOtsc~HzwOJ_G)WOjulY-hF7#986Y|G~3 zNA@*yBzb|;J^-7bZ1PPxWr!C89BT;dBAu)f0)cu9U8SeIEt^;)$2>*3TO!g0Y2eFJ zoXGynJYPXLtsORnp!!~ZfGB!E7Zz(av=;Bvr;l&n{)?(JVQwSKvNK2^0gx0aYO7Lr z&Gdx#u){G9+yDQk*fBFb)3vBnlqgbM03>|Q_hmA|C>8~PKrU~&@4kD_J?Ct9=%ZZM zmuGSEI%qbVER@+Xr4!?1-rU?pBR)mffd&2LryqX!@MaSy_M#cGGc@=sNE8v6wb;aY&&6m%=-~5_FrrTT7`+4%)ub;AZbVn+d zdPq6j>v!+oCm!_nUGz;O;&K&;(+N!N`@newEAw~TBa8Q78+VYrsj}Vl-Oy*1JBNl;ajf!AET^ zajBTN1srOb2OmDX2~9PT^rD1voD6Ih_oDwITbA7eJ~`Xw4)VG;n~aL{>gnVp<&)mz z_Zp!wvano7CO3GQ`k8={|3AbK54^#=cFp5ovBM^qB^Y|7Ix+ws9>jPf17FhYv-*Q1)?yN~(u7AhA!a zfkd`QS`e+wTur+G^=T!M0;dfmNjZ@R(N`_b3uQ7H$h~V*?(Y#I2>^#Hz>HnFrC~CR z?dU8o<1k3!`P4)QrG`Y!^4xazIif0)oN#qU&&~ryNy~6F+y&q8x()OhY-#hA3)FK{PUO@sa|MPbTV?wTwRwO;~Ff|644FY0<)!i z)gOX{f6;azxmfEAfzCoYZPWZq6lY1IFB!o7E4{EvTi!LaN?Ns?m_%(Yeg>MWDTNLFwY-zC!yX6*mdu zet*j6?}M`b8a!~skEsR+_$#_cE{h2p?=X;5OG9LA-}iY3y5IR7eN%(iMC2s^I!?6u zD4GP>wASdQ?Pj zxpY@16{|qWQ!F+N?!<=jvLCJkp)zB)UaoOMg%`-Qiw0HQucwBS!!U=XWRQ>6)Jfnc zL|o_c*vO!P8!~ScxsVcX7gz%;1lGl&m@eo*A~6=7;QW4k{C<0z(tw9vXquyWq_H_7 z6cVhSwuu^ACB4r=Mu-GVuFD+oJ+aWeFR2U3R*dz@umJ0|$tVRkbpXm{qJrMBVA?TY zev7UAr18~cjN>fE@^kUf>k!|00y1evR8f3W#QP$N$QF*4llPFs#>d!~966Vj7Hmoo zDRjzda=cKVcA;sBO`gn%U03`ZBRR~RH_6JJYt|6lSq-((LwK3xp0#2l7H>WSkwvJ7@Z)ylM+ z0G|qffCUCx*e6Ba=3Q(T0ak%CEAo(nfbunF(OhP`80%|IF1yJ zP_z_5uNX2%spc2hdt$TB#! zR$axF67Wa@tke!f=dCWpwlCZfs9!NE#HD~PFszo7tiuox`}BX*?O{U?Ex=*$kG=#0`J>=JJI>CYdp3QFEk zdyoTmvl`}+q1t(sdN@xM14iFWI}01D;eG6KZ!#!kw~d9B4rtiIZk^aojw9t=}$lX`NxlczP^5& z11sop5rojiWxe_H^I(Op!~ER%76G{2z_5uC3@qTc-##VCmCw8lb#r-0<7t&C?D{fh zCJVqicbBZ&P-WLHW~2-#E8Cm}kpw^eI)*KX?9yGOBBg$8O5}3-ZI_!vvIv`6j9pn%DYHGw)d*zckbz(}1b-%`5+J~p-Stcw$caLAb-X{`-Fj+A~U*lDVOyD*R z*1>)sXUu{tJU68YOLEWt5oY?K=_eANf&kG+Z&)A5PlvF?G%913-gxJRz2$)@@Tf?* z*EEUBIVBph1MAwRpnRc0Z8k2gX&_O&k_jZxoS+~? zxUN)OyQ?J*Ik+;KxHNcl@N>ydD57>IGg=tHvD8DIsD`2QK3mk@Ae<;vgpCA2ST5@2@)w1m*^ zMl(J7oD`rG#pZ@f#&>d=Y8Q_Co=)$s14Z(YzCxR zOq1f=qFDVu{@Z^V*75^P{9D-tsrZv01;S-S&chXyu__u!^$kVe%^S2Y&AN;#ZNb*; z&d{w(KhM>W+dt8-SF6Gpo4I}p+H;P7oJeOf0v*I%J zn&B7ZB2r2JmYBt&jiXWyeyxce_z0+674D1(msBhkm9$m}2v7IpzyhTg_3R^z+Ot^3 zAP;N(Ih2R3;+cbx@;00N&B++J(;rZew}=;a59%;$7Mca5nO(= zB2MZFhKE)D&VRr$+#+!eXo?#zfDf7K4<6-a!*OmLk&Kq4xj6kQD4Qz+FL1sMvQ@la zBZ+t?bcCAI2GM#g&w$>{=*HNm<~b>jG-fVU#WDA;@{gu3j7Z9lL$j$m8Vd`U^>EIh<@&Vxn=1}M;geOhd>BM!LY0ia*cN-14YKFhRP3{mFR~d%8@&cU+Y&oqF;XwOSohR~761 z48ANSk52I1p$tmS`VmyHLcXO1kiG$w8Ju2fxoU1LsN(R+xNP8xA-ZQkyq_QnGtL&za~oclJ#%hM>9@zU%w2ryagi34_s8`9tb^dl zM?%7h&nVK?tDgb{#@W<+$)LAAO~Jj8!L8ZZ+HT${ys*vDTM%wc+=vP1ZA--e5XUD= zwAmPs-&Me%q$nG1N+*fR1<@k;UB(~5Ke~GKi%dpb2}d@lBpOuHE#DdYhrt_^a?7|6 z5BST#FuSyChq!Yya)kfnmO=z4v#=yo+Z_%*ShvGsY zuCLu#S*ixJ!EOb_x2TG;=hK%I6z5$MB=r^mWYw?MqgZbXNN6x75Lziit?YNt`2Sc-y!u$U+YxobWNr)=cVxv*2ZEul}uFMxr{e{@Y2 zDN6$YoweC57ZugpwSzT_n9*_t4)fyG`K#7n)W3HHaf}JbbsS1pNl0Riy~3P=%*v|a zR$)fRjM@4r;*;li{9UiR>7_tP6-%JLy~9cOY5|zPy@l0-03vXh^}1jONz--2RXL0o ztE)LUPYuz+XFrfWDFqU9Tu5D-Lzy@?GazIGTO%@+9VY5QWk}F#6&lQaX<#+!@OhmO z;prEZI&N4IJ%p~Oh^QxmlP`(m%lH$HL6Dkg{t6(x#Sw=+*pt1EP0nsm&uI4w#Gh(+ z`5BS_W93@L4bb|joY($j5IalFMn0& zLrsnxR>v~wu$jfbNS|3CVu5$J>jANk2Rf`E%EygZ{ECr6GN5D%3mGW&FZfLOzsY(ib4>tq#=w+ge1F6wBX#S z8BxM-ouN=xDefj$3Z~yl5r{6#S^0!}p z`Q_)o{`0@)pTvoBF=?(eaUw!DU%n)G^!w+}!K{S`Ip0igpC<}*dGYv2+K>Ik5sZHj zs$Hy?VIVrcetlVP&6=|Ho9n9|f;IZ^Hi4l4ih$4eGpi2X>W*cn@c!L(m>Gq<6`j3a zy}rK8XWD5U+it6B0CT7163Q6cmg^wslIzzOZ(moWHRo!29`X3>N~2Tu@%{D3cb7lD zzYG<^>x<2st8GHoSBDHb;e7(n{t*3s-`HgkBK`%_Ydhq;SCOD zu>z*$L_JvLFA*PXe{#gMKrC^Yd%{EUqi!Ia&J%y%+}#l20NkS6=XRU*{|b6k(CB7os>Z z?qR!tD;8iOK9^*sb;S7yv1~xEDBDsx69ghMx?Lt|FXTacsN64k1w0whrh1HNOoL*% zfO;uICu8ohyo|&nM3={~KRsB$Ef?Dq{BE3b+qKvh*3FaCjl^xsde95+6SwoOKE?D= z?M~to06SybI3sDeCfhP^T5$}Hbv2O8r8Z(hum9(N{}-ZAqw4JLsjxP~nK}9Mfatm# zPfQmU=k9Z3_H=+9#Ti_>vxHVU{H>=@10pYHu8P?oVbCaf!~VJ-SDB0Fpoidv7fZ63 za@yjbkIo{!dAG|h#b7m`rN=UTYJ%M&aJQOzib8wjv=@Tai)i^hm8V{9XK=e#W(?hh z5y~$4z;ayUrGs?tV1LBtpUglcB1Fd5+W&XQQ(khh7cn_UfuRoCyZE< zjN;aKANm;Oh}o_))63(bjxvfO2M*jM7|<CFL!`}zr}%Z0>;zeNbWMyjjE_%{%I@ajUa8U4H_xq zpLcEoxFms6242<%D;9N?@`Kktu|Yvrtn_2&bDA)%vB?3+GbClv;x*#}CG`LoZ5V}8 zHR_G0lokbYHiH5FlE9%cyq)GRNdR*4YOBrlz;09M%UTAIh?PO1(Tu2WU?~zgsF2j2 zDPS3?F`D#_eu;TS^-ZL4(PHFfIwg^=B&HyLV76jyh>>6r=y9`=aui8~B~yT4E^Ng@ z6XnFZB`i@18j!%znV1nZt)K&h57Qn)11eu@o zj4vGgR`-Z|GF5e)w2fL`5|eKgWQy3oervzw3ldcr*-^jGbS`Iyg>*j?VeF@cmJAG@ zK?oGES33nbqK#3`|WNE>lT+wt5+Zv8x+ztyXbR}&EgHdXb@dPR#ZoIRYls-eNJn^*c zzDjLGh4O-5`;x&uJ~mPjs8C`;-)_GLf|8_U-i;Lfu_25uSB#uP2`oWHg8GtY-F~s2 zViwCz@Wkeb~>edUzFA(pJC(6bRftnf!D!T`(9$@Q!A_ph%OAYVGh zv=U?tvShU7$w`E{uVa2y`ag0x=yKvY6xJbu8csmW$`;0kJ!kJwLp>^~+9fqQu8h(T z?{}T2)(a%7Imr~vH1Mcg*RE!HtvXIs?k#+!ysk093u^&U4qjO4RE-1F)fMZ^-2pew3{@BlV z*;IN@k@~S#TVtgN36lrO}XpKmf6Kn9sNc$XQJ(k?=1)ko3Azn*p>Wc>_96 zng8~QDK~hF%BKV^OZRIG&y#^nCKZWDv964VkAP<%A*Ar32Af^k*< zdFRYxO?1ZrA`Rw0(R(A zz>J`|kLl5mAKv`CzmJUmhqzQ(N|7l2_C%L=UuzlM)@XBh`O-S+hV$-Mp7E1d1yX0VCt+F z>6A#tMWy~LT-5o^&qE;W0dC)wxiXe2^C-W~t!(B5{~2^8$5f7S027uvb?|coZ3e_(M9HBdx!Zn%;j4?aNMM0tQuc178M5j(W>9n5 z+wUwh3H_I!e%$MAV+9R$o5m^H;W?wr$-N@OHKvLxB zUdWVAflpU>0kmLr$pbG7t1zMv0l_>EH9*J{-PC4qj`Xzn;MJGfCQ!_oVg51f zQatEpI3uT-Ve*GSfpUw)*2#T!cBtS3(I7D+1k4FuoS$`GGZnhC5E2J9*ajp>{niY~ zm_U72>nRO^xxaP6kWU@84mV&_4id@2JQ<8YX?s4DgEPlrb{_*|%A7)dcJCI~F{vk= zv1Y2)@w-M=!=S2M30%(-UckDi`5Q`;s+<(pW_m$#-)=`~E2g$$aLxZ4N3g9{L!F*w zr*nP5#r%-N1qef?=WsS#d$0{jWfGQe80H})9LJExw!LUJV@tslvidm#1zT1<}6w_Ia7(itmp0pGp3 z%796VDS)PiY-Vx6$%M@4B%wY!H&{Pt0(rQt)ma(Y7Ul~WKz$@j1*g!Mg)mm|c{95m zu7foNUK!V~#-AY}iS8iySSUG^=ZY)k32Efc2*nC4wpz@2Z<)*INYH2uYvR14cIo=lk%FF!Dc)tt&zv^RP#1o$-Q*dydZ6Cpc#&|H0-S($I=|H6|plj_d zCFjbqxJP2P*9#Razgm~enZmki;cx143^{N9En9=e?u9qy-i9U9R z+}%Wlr4iNc@v~FS#$k?A_u8D}#ujavHaqI$OXRC?7GTDxhR7=C5}s`k7RVOU1C29t zjIQ|kRt#=zT`t2B9nEHs=IUuqZN%cmg|5qhdltglpFVs@rd~ktigDhtjUt!=(p@eI zb_mF~>9Qu~(hc(pG9L=oUbz{ji|Um*miENaDf>NDZhXm3e$tHV{`T2ioyem#Dh@ea zW!F0R2f0)X2{A9t#YdO4rjM2e z)#79NMvAQBmgX+{P3I#v&0@D2|58h=Wks}@@f6FXj1*4k`V7A`ookho&}n>uQhT1o z8ZuN&TAr|)DEb}=4kawC%^AcKs<^LWW-34U{ zXqjMKv*IK*>zZcQZsdC8eFZ$8sbSf)kbEN%&lA>l=7CmZ0|9>81VpDExVgh+BHbCH z^6E<+cyxUMG9S(F+-Q~~`5$9jTHd%QG=7KvSCQlSjht>SLrRo0q^5F_VbE(fx2dA` zqp7O8#6;89MN)U{g`ao>LXfp1xa?l86G0eM;_#n7{qZ$bKn+Z0Yh9#Az&1BG<7TcYsc@JXT6DW$0ykw$sa;2GySEO|p?BJwaLSApr| z_!)l|&d1o$EQjxf2&Js}p1@*8uL0a+8Z~A+>SI|iqLlvm_dh=W@g*ScyrUdY2{!;a z-rRgmhA-cdvoDaRx~{CnSrG5OH4_ojk*z0S^~wv7BVQoPyLp`eIs4PxS|AI65>78) zUtC^x{~BJTbVNS!=4~;A5TTFRj13_7@hq|)!CO}uwa3@5F8}*K{+E>X2ltd){_r;S zYugoA%aqW4{BZr|)p?%$`2OlY{=-l2-@Jltefj#;`BejG>?N6gGB(Jb(|scGBW?AI zzP7eZ_@V8_PdYdC6>-PThInO7x+j<3VkaO<=vSvmr z1_dIr;(anB3mjg|{EuRebSJVR!~!%f3;BAYR%rG=yOyQXsu>Bgj;ihodT6l>N&6Gj6b~pF zvB*}uO&JlvmWEw&3X^zBT(h-a(gMtZSSQ@E%%w;Pq?|Kr zHZULjb;{6ciSk*~U&@`h>IkkgTWj=0oQTkIsUl336ETM^0+C4CnIR0aK!zizANnnP zawcsaHZCii6g;k`zR4|+79$YmnyoI6eQ9~&o>-%os_Xxf>UZH3R_7ip1}noOoj}R) zPS=w*WFU|L&w#AOBxH-rF3RadoU?d%WqPc_I}uAVF4T54k^TZiS^EJseqnMGZ+EZS&C=eOU1nE~pukFE6U{?nV6;uWCPqSrqg)}n-GIstmboQB6Pvih zT$;OcFPb(mK4N;GO3_$qd|z;NPD>&E?zwf&_S7DVpvu73Tw6|P1kK2sMA}DiS1lnj zdCX-8Xx%cUuVP;Go56(FP^t)~_|}s2W?YxNFUf^^^Acm%%|dp*75jHtO&j{TxlQJ& ziu)u05C+DR^5IpNd`ms}dYh(O9*>nu+CIxikC>8L5dQrmdmV!zavU&kWXFBEWuOvQ*k~ zo3m(uu^y3wdjc*Q_NMn63dBn}J8N;DdkGmmTs55F(yLM92_}flRS+xcL>w35s%CyP z5EG(f=;9NlUvag%)saajQ|Phbk$L0Xd93@LDS2WO| zh0++=FBLQ>Y06Jfbs%A=k2uY1Fq`?jI3u}udJ0%J)7nf`K^ADk!8TLH6Th_75~S&~ZXmB4N?Hv9$A)0(NIw{+A5P zN}1eJ3J1E7F=$y^`?AvM(8w{L#On|@$#LLR$~It)L$gKxnUHShqa;K|rqZX*^jB9G z`D$if#);^j^XAn%c=HoDK|(2pI8mG|R~)<_?Z@_S%V!WFSr*+Ok49e0>AbH2hq)82 zC_~}Sse=r-z{<)zh~Vk4iNDm=OFU6Xk!YPmf{MiULt+!DyuBn;<_EIXer-WurgA+ABR+QRP>Tlm{4>h&Bf>Bx zk*V$yeC@z~N8ECfU;v$J0S>+3FLw=ffy&hm<{~Hb3j0kv9s*7J5kaQmj7o^;M zyZzt(xcO3cArj%eUEyFIlaQI7hNdUE{TP)*`K781K(LN9-XrbMV-gB&2sOg<2^rPH zWQ*JKw1`5%lE(RSkK2%7UR6c@EdHsJD+N*`Xo%Y{b?_0Tefsi8E-))gZmC6Z*>--< zFG}CygMA6#&F$@D_dEN$zy?$I^sO+|1isQTtpkPDJ$;?YlJI@zlw2dL)9?xxG7<|J zVf#+Q)%L@mqM?69_Ga<^U8tyEugJa>Vo4CqbXLfQQb880l@Su9vL#N^?cKL=qydj* zb$R>x)sG+E{KMacs`Pc<3oJH8Nq_qAZb5?oG6A53>IuLO5TXq+j5t(jrUZ~uQ+9os zSEojG(lpA$S?!S@I?B2*!$S>`05r)ZvWeh1Tob|2&qyN}AM5mQSr#U0zE~76mlSrhG4r3lh9D_gIt))D|sWj9%S>8_KvD2DUsc z{D(^&e~gT;ivBUQ!}+#Yp~R;GP733DaYF;pHE02l|KFl&vLW44dji*WOT1x3t)uU@ zTMT|Ko|;pIN;BV|&9cf1X(^HthtAltuViXmY-6va2T_qNN2}$8>oEJZk;IN+Ce=J- zHL{V!L*WVRN>s;;+E9{HH&_rUhQRUYm? zpCLQR47|scYZ4yjKg%&5fDQ{>cPrN`Zbcj$u0U4^1A$6y$ylm46LA#>kdyVVtNyh? zTO2jB&~jU%HFy-aqEZ0gTA`BA5T@u18%X0Tl)#Z>hTLrU#7y27bqmyt?>3L3M>jdf z!1OHL6)gPbUa0D(wWf{ZFM(zhd8nOtHx(JAlRIuATdC2DK zX!F?mj>h%cM^=MN%?RjIeTQ@)`BmZ_;<`D2kqC{B4uo=@ywGN>n-Me9&lL8&All9=tu14eKM z-Th{AT0XpYQNq5ur-v*QiZZEA)iN>FexeRM>Pudaznq5P-A2b-JW;{MpON~P-+N{e@qh50Ov z33*d`HM2BJmu0bORKCj`B%UHpA*MjrDxq|=_y-VUvfG^y@9`^015&(@BPZpOGv#v$ zB*z*W0>Evul+Qv8l~2h4OX5z$I->Fs`_M^53Nf^Q<%G?(WmOvS_RN7F4LK2X<~wbZ z94dc>#)>v1r<(VSO2;hFhdr@i`_@-8%l2ajfCq_hy0?=?IdSUfte2%&DnDUR1MoK8 z-Iq6!sN(Zu8?zMG8Vw^NYUau1#Uk{wPD(&&$+1H6@QRv+m6L#A( zdj!lWXfiFS;byPj6~uuWytZE%+u#b@)LZNS=<2zS_BK=gC6TLf#o$p>a~HY>nZqD zPn370!%!{3k}PYhyC9Pl9{~2Dzd7NRC<<>%JY)_@ETbVf^ zwf)^opTF8d<<{X8yWsj-o-#Uav!$dMuD4t^F@iNzj(P04)C8nle5rg9!I1}Fcc}C! z1yeFg!U5bix9Vg=22b-Kq)|4m@-8*}ZM3V6oZGYv#3;5Q-6du-H#N&;WF#yJteDBD z(GvxgCG+j&tH1y8hit$C#LH|*s`Jg&1uIbNP=rE1QvQ#8t7~GUrM3S(g$^#h(hR;B=!N3I~RkC&~yu=%>x}**Y z`ie$=;ijA@(?Q%wQuJH|Q`1Yr<}H;Kd}2xLlt)}L`_O&wJ>i#RmZ@Bk;b>v$WD=Rd zz)N+9gzq%}w1z|H3`Ong#o*h>g<+>VNl#cU6gsA~oFoSTM*Lf|<>Qpe!$-;4Ytxu7 zFE&kX3w8q@{OEmIX`bFE)B?Q#mujx1hL$cMaR@YzWcZGZ(?FXTB*K;B6AkEDv&=Zhb4!rHtE4f&2bj-yoHTTW;)*~CJyL`6 z>6)Cy+*=yoU50m`->L-W_RH*a@qpi^*2gqi+Q)2FGez&+! z1A!skB&BKOwTW|EH|e55k!@vU*X+~MXl17!(|3Feby^gHmR(YZWrqVm_>H`2stURS zZn%bY85WylKJWmkd6w%|0BEw}jSQQznkNn);~P1z;Dm0z+~woLy7(g(>vU7jm3?O z8ZTI)^O%b~f{8a5`w0GI#5L3rB581N!MJSqM?=jkR`5y?C5I(XV^LB3zC1NKQjX8cDW zKW<$oxM+U}-M6{NExb#ojUIlbwMRC2&k&bx)7r7gWQMA3*O#08P|dV_fBot|{M`>f zzPoDeU@*2Nx?U%obq1Vp#bunIO^Rt%}` z69SPriAGQGMRtWUCBgAp65Tn;7{?V0_0Eom_)o}3bb3*;@=1I|reiz4obCx@A~&ie+8L9B3I8w%l4g=Sp? zq?^)Janm&*UT`F(oat%Jf_nP#3@n5x6c*8ucn?Ba)?5&Z7&L_{JVnaTe7Mnt?yInd z{Km*5y&(m_BPw8tH;WHISJGQDiY)lQ=h}S@?EPt4oP4kaAs2R6~4jr&1 z+n*SONKdgmZ3V!(8wU)|9~Is9f}3zs4f&+L<_ZI3?IEfJMTX~`@2_8f{9v(azN0MK zK^UErR(8hRAnP&xvM7?oQL8VLY$^z?4p* zcmmv8h*SgMylo1rVA?;vW@81plJqVM2J5VNZ6w*5ucfBL!7!lqMSJjqv1%gFjMHtruOc%p&Y-~z{shEIfh_(+K1N$0?xjcuR#rq6VZH*^PR#CGe4hz znmuDldbnq*1U>ch6Fn-|J`HQpfiSKke*(#=#h5~n>B;0kYA7TTEUgA69W$3x>svg4g1$bcoRVQ@EYL@`ZoHkHBOHSv(i&I8AeQO%g^6Yywe6hKr}9o8Cw zbaYmW#))C(E)551;T2FI=06O3|(Jb{3Wu_=jVAVIoq7$I+YmZ_8v`vSex8) zfx=i=Gt1D;LIoV4lPuozeSJLTCP!h{6)w!5vf>cC$-&Gml^AP)1940$ySigLm}TO8 zUnMa2)BuFArlcxfbWwMCAIxQj&iktAtTnCPlwz!_GRw9>jx=Ybi#Fx=4QpEc{#}C( zsC13!a~G`!-Qh8j7@2_f>Tu!bWKwwK_CyLgD0s~Am#n|acd9VeH4)OH?vrJrA>#@F zu!JCWh9LgTn6(Q8&+1{LS*$)_8on`E8ww0)h2E3vAnKPXSN9+XJUku9-}FRaVajVG z6}=9IahcLTAr;-Y=Nh{K@>f{j&|*C$x1__HLZZN1q=6uuDmNYWv=u0j3%Sb3vX}W! zn2BTn9jEzn88SSisnG#`gr(BbKX;G)He^ZCu;ae&%{fmfOZ4(h;pB`;A~L9^UTfjO#>V0ekka8T{Emb?sOa zxZF?Cu|uyx4($E&M%mIFoOuz%ICE2tWh78}wws7k~M3S_Ug=7ZV{ZL8B%!`5z z6@_RhriBIx%*j%p?$&QGjBfsB*TXJS6q8ZOFkYnSJ&jRbp4Zv!ogJRLKI#MKl8y^J z5uBQM{HVTeFDN(DI;6qkpk|S)BHIFPwPjcT`=?!l4k>qIMSt#icnXEk@1MV>;_c?< z+rR$&`(Jzdehx%y5d-dQ5wJyhI1<)WIyN zf!#gq>i=BC!j*McaQ$Z8ZFhOKFsJGcm39YwN~d!-K56h>R-asBqEoBQQusoyHZ!pW zbLAKw21O?p5toAKi&TP>E>_0ef{l^yMWSe?^9^@aM$cYIxqk<_{{essr3S6CRQ>QN?>k- zDZSnyyNNU?n5Ej@n9(Qd1+??eY_Gxpo=&R+i<;5-U4x?4DC(V!q+y6}x^rF+lG?Mv zvUij5D&e8)tFlHFE_A*%0=u>x_^bvVl;Q%cj|LFcazcTfYa|XVC(lnMGFt??PiKsb zihLdFJ*x*;aoF{X|K0yTrru;pl4Dug%Q>^A9)Js+bEjWOk)Nx(3Ojd)2H{OGSVOKd6%#>-7 zOocVSWHmYqOSpWY1TFaybOBxHQB}8X1_(J+jQkp@jdaaxWFw6`3=pO?oJ^(%!agk^ zd`74{gDE(TyjLAbfcj5U`3zB!$W^7a5nlGth1=LvE^jgT=sDwNuJ~ z!{!l%GJVYmKQvm2BDFXLDXT$oA>t1IjOZ96GJer8VJ?JqNC75!8R*ev6bN9{K%Lm! zSIfi*Jh)=X^+^N+HcCQ_{x-w8Ff_)nJ5#cxn7uwtBb%t180?ZPHZPfpy-o(Fy14_e zl;y6^+U%JDGFB$pvD@X7vOG-{YJ+9tsmV|^C?UXB$X89JfJ+?_E4f-LOX&$qhVRS~ zk{{tqf?8efig#b3i0?kaCDw$l=;7_FTe%Vv^TI(dXmDNlpIQJ*(x=L581Wqi?da>5 zsED4bMvO%Pic(~wDf}Efu$mlG8qu_}nL~NC@sb-w#;P9RA+F+&Yh&}7Ha@&)2)F>1 zG)PCwqifp~Zh=sf0UB#Wu|YkL#NN<|)@505xE)en5Ntn#>TxC$(S3x2H(3RXL{I@U z(oNpL941kG@fT)QxiCr*X@R&siHcmo`?I3`V>5CiH8-p!CA#VUU552pfT7v!D%~;| zvWfPhyGQYqUhe|%ltd>_HAm0s4LQ}0>U2wrT&@p)y&Si@43?bq!lb(Zp)IG3@?KID zof-9}Lvua35!}tUJQsVK7(GK=qG|G!W6h*1x_|io02|^%N#8OJ!C;Mz@EeAVFJQvH zm)QqTR0O*;=Yp5iE~HDGJg>YJS|NF+%x}w?;La8~`rd$%TkH%1g}}lwef;kijQ6OA5DMB(LOu^RCt7n`Q@LZ!@0n4W*K zfMFk;1DV2%y~|E#_FiZVuzWX5b~YPjnE3mW*)xfCAMIhk$jhXK-<4G~Z!GzFdMpaP z=d#fpfqnmH<+i*DD!F3hVUxusSW0Guaa8a_=B?0`6bu+EQG2T6@oIy4C9pTQn%(?O3RDS6AG?vc|-9)hH2WQZLgN4`G5d5Oier97l7sv z3_=f`O7Qj@684IC}zk+ow3QWNf^ZC-gFdfgJ zev6B;BSF&VMn|)%8lE^_Cjq2q**fRmUlHKXnD(drYF`ha%xOm-viMDJSFOP%od6)#jkTEBmNX?0y~wf zxEl5@jL)SOi4Wa;qoBZY+%!5MR~IOoLhc!*My_E|nGgQ#0=w|>az`jd=DbK5mYeuLfN^k2_h$fW$kMSjfL6!xqV*}%s#VX#B)l9v3!wvE+f|BdL z@_z|WnIUJR_*7j5vL+XstR)s5po&ZI_*c6+<^=tT(X*d?&$LWUhdE&$gaPrvb*R(A zNTH-1Par=dW8nmV@}|Ki<>57JCStuiYeqnux2T!K`5@8PxPdZ*p~e{uD`_;Gc)G5= z06Ka=p_1t?V{$%b#Od z5~~8MK230H)FoBBI>*eZ5R+wS)bclhdZR+$vP@(<9GgW4^(GjPhG0HJf@dji`2*VETXsbcRwgJ6Fz{ zWl72e4DVsULSqGTn;F1r-8B1>4=LHxKF3Y{__0Jx_2|x|cv+I<%z4)BJjL)X^Ygxi zW|1d*e}!~^))^tCR_tZhFjIa7B1Em(Mw^{N%l?_xMy+_WBb!b@`Rp^Q8LyEv7-XlJ z3*az&Va>P>|7AsBMStcrKv;W-+g?9^efa(J{coS||M~g*|M&aXfBgRKw=aGF&p*C> z{{HmoYZ#pN55dU46tT5$3o)$mLiHJli5os94JtI7(DqoT;s+AlF8U#EUGqwq2x1O- z$+_0nMpUo52d+bl+u^R+h0H z=m#UodCHMcFRK(0x7so1;sp?3Bi-8`cLizvT-G*IxmW|yOv5og>Z6ilkS?c0ONf5B z48#xY{wOxI@X-1m6&T4sO=@Tu=()PN5+jL8pS!}!`|@;X!ktPTRJmNqOLHtjJtrl@ z4H&<67*jw9cTt)@1~*4Hgde# zR@V?rnHdwoY1Y5Qy%W4$$5e@MQV_`%-HRfS1USX0kXR&@ zCfZcX!ig#V)S;Z@92HNF=Wzl|K2cK0RZ2lm_&^3-!9Iq2lsd{8T`f4qTsl^Jg&1EC z3uf5D1GA_~5qA*M@L&l`hC zGLPW)t%u$)fXSiGquF9D3YcXR+nWn+sRPUur*@C2<_0(2@tw?7LgbDPBW1530Z>@0 zS1&%odOf|aR?M<=w?n4IgG|lul6(W!%5LHdF0HJ;z{I=&n_gj=9= zAzW!)y|k1)krIX(;XN~Rck(SBdUK2!*c7v`_pL^JOk?MMmCc5Es`pFL`$W*HRrimNg+|_ge@OLW z>ZD4=sO6lj{rnTbXNT7oiHQ@|BwMGx@I^FKAP>1;H2kcK5r8AjyfzR7rr>0?x(%N= zJxGDyA9!l)OQMZL?E6d!1RE*v;TCYtBbtYeF+VR&n_(F+d&a?~{xO>4VU0muD0oaL z`4#WSl4k2c-9bG#O{FYpm-;4^s&K%hpNDs=RF$El4i z(?@M@uhS=zqvpLzcBT-9X9RbK>t|yM&T+tNd<3nEw^%!`OGO)G7IyXFSLMs3_}bab zw3{h%9XNuFvkC1pL$pq^LsN`^#Y_~#3XDviha&EIBgF%SD#biATOr*5KPzLu%>lCP zT6I+W8xWzR6a_?oUcvx+sLoDkH=ivT3t8pc;WbnQdq6}56+XUXO_q1*AO}F=EleW> zP*X*FiU~DjET7aF=hB*>TtYtTRD!fnjRzOp#?#B^9#00;8J+09@h1<4*@RIJ5G+ed zI$L**73c~F+)z3gcu9KWBH?L@i&uFz=h{7|&fE)$PNIl;HF+53h3A3=N^$zr-Mhbi z{IHG*!80+&wE}mBp86V^|1P33r4pQhq~}%HrmtwI{!QS}~nMor*M+N}+Z$hH$B%9HG?u9ko!JxZ&m%&vJf~ zifcdRPcXm5&}l((07(POtvewMzuLg#%iJ|(2f3DjuZA1K*eeuxdjeQ`(fMdGwTBeb zQKnnGYXUte60EA>J)Ii7rAy?y1_g4(xSDN~VGPr58$nqUZ8G)LR~yj2`#$J(*9JrY zS4)GK=yPGr8yZND&IKd_nA0srX7p?zt>c9!D7(;z-BVI(G^em{lCP@c<2J_yg%YdE zeG4fmRS`b!4bh6$L|(SJ?=$r6lR&(56(j4?8g`J9x914euv4~q!W9QSR8wr48GN52 zSxT)nl5Ao?0OJ9Sq|z9Qg3zHal1tviVa2tYpBQ0}kU!Ki6vi?$n3A(!*t@ox&F81q#pjV_&#)W9CNYWOI@Cj} zv)!`3Sv~MDeC7FQ8O43(eX;z=0Rs;`$pwCwkOx>xxl0aj*4^jmvk8dY>+=C(&|^$Q zm8%AWey7na!4vNYcB7tQ%3WD!EU1B)U_N?$t_;hkPY;Rp1Qqo8%R}_Y{_&4b|M+K_ zvV#};|Y>+{~;f&rYv?NvCMEN=}W zU>tIGbb(J&H>P{Es%{wt`U3a!sU_IRtCu%3k0TFAGM(45T)#?BnL|lTlV>+qhUh%& zYUPF?9);Mswrsgg!&H?tV> zTZ6t@?~PyL2^_FL2n0qN5ZV?D1su}Ch0=@DI|3XD2qpT8vl^zg^mhkt%bNa)+| zpTB>(f6kWs;;r}H|FtH&B{a2rM^czIIA+8pHB)oRfr;PR{i!}Xl#{OWVnzg2S47@( zoXnxDRzRCti2?u<@2_bFS+=q>wdA5N=DY^PaD2}SAcFvQ*UoJyRuN< zyo)yacK!bSO`0q%xm#zf74UUa5~xKMLjli{)gFZ``H>HPhL@Lr8?M=OExNAFd5-9X z`^*~37u*8%K@GUTaAG|&isIn_GFlNr6_Gj$>Zxhy3Yr?a^kIisfsj`K0zIE=PML17 zo5U>mej2GqVO}*Va5N;eFHT5%n(-6+_C$q$34_`R`X)vN=U(66)HeZvx`~?w`Hj2@ zVUof_yZkg(Mn(;JIcqqrJyoZY~9w zl*1Ds!pCBgxB5&zc3%zy8r||DI3{q~HpH{4n=l`Y{n=uDN@n^Ce8Wt&*zX)wada2r zH9tsqktG{|J&OgjeJ9ll@_mFRL4;yKwk-p(kSl{$R6aMj8_=o! zDqh4h(YNe>pegk;M&i05_ceD^uAF{sU=IErTx7^%$;#!!&h!kHXMYzP)CM>07Puih_bF>2Wn{~V#3LLh^dsAfsGe=w&E!_FtZ7aK z2bi^jYn%y0!vOkdvb&{r_+07Ql)uH>C^UUp1Bx;o<4}}PCZU|+rvP?uud`d|74IJ& z!mwCDkOLaP3ZTv94XM24dBnv z@KP}itO~>5oUMT0>9UxYVQt$)VoNhD(O=3wTMT@W&)Jkx@c2osS+UX0_l|Hl@13Q5 z@kXn7K{~0#Z!BJfreee1g&X<4cQKQ2N?X+JmO=B+Fp^D|-|ogS*}}_WP7$+WHavUY z7^mk=ZzmR?QBX)T+YP(8im|fx$Fs;54r6%T>p7bwCy>pjq-sGajw-p11u;Qu{Ujf; z(q=QzM%+tBnFUHi;{%V2wffL6Grqax6&ugGjCNyx3Dk*<&50Wiu!9eRPCH%ViI+ZE zNd#=Q!r{s`%c>)a0XySZn~OV;mRp(+`wuC>8eTOA(RdpAsiVT5We-vFSWzeIwW@+0 z<_jEWYKpyB6TgDW$m@$LJ>-SZ^7{F?@T@OizCAwGat?v5O_ly_@{zRU;aZRM*r zCFjm%zrE}Mkaj_fT2t}AVkIp0AzLu>zQC3jJ*|RO{>}q}j*1ct<}AmNI>f?l6YT4j z(gW}7t5A+)iQE!QO>Q$LHx8j#PU(|QcwB1`^=le{pckU#|=Ll^UoLGhySp;VnCJg!m@PXoOOL^1j!!i2<(>enwcG6G_ zpV7RC`^yg}nTcL^gwnm|vh6Tkdf77zhd1jY#3zVU#Nr{bG(A1MAi0bElO2&s#Mx(y zzip(cQ7uM|SfnM-!d6}3sNFJ6P(R2ne~9eI%@tYE!TDFeOEnaCFzFBlHwHFjM%rkyK+p|6F41X2xGf$ z-(4LKXBEV{0GZdF6Q=+t)KZyK?s$HQx30Go@{BV7S*%^GbWV|h4hN7oc*xQ|i7mCyuq08n zIi6#JZ+BOb8+#Yi1R3bOL~ATkm|OgXE*rCC9%x4^V=6{6$CTFAM2Wt)RGwntorMKP zSZB9gr%C(63ak7EZQzC>a)vBnig5Y)!|h#N`oe|oO4YPYI0K+iuR;2u?3V8VUUQJn zO{}s*$*R|*lBO^DA5@#wTkE%|V=^}3TuIhE#;S#KnQfwwo07gfk*^QWzkT}l+vo3} zzdio(?J?+~KfXSGYs}~+*~jc07j#dl7xqwS_LyqRU4v1}8yg`X&<%*pp?xeVhIJd* z@Jx&5?=?R2mUur(EF19oDPk8%4dLD<4n6$G=U%OioKnW3}^)^z+QUx0W(&ZINKiV!I zOBtn{MqaP|6b4YL~{#o+md2{INm}Wgf+9`9&31~^IZ~0%By#YB& zT^mSSXr}H8n769o+Y*;_V;=N?)KZ|k#^q9~jA!KXz~8m+>}>q6v1pyr}-rgf2aV)dLODq;+9f)9 zSbOSq=823_XU64`M34pNFwbpQFho!%Sa&ve3PbQ#K#e?kbLf7Q$Fp3~#?PUsK(6Ga zWqYwT!H-fFx7eeZmpw7>@=4`51(6olBWH($jW>DqlF*2C1R?m>=BEOm3KS?kRvnf_ zx|y!$yL8~1Z*Zij^U%vwS<+Eh_!!T;l%UI_DHfRJgkFnBTMW9H!d0>x_ddlo*CDXv z3*8@yv_y$9UgijDus`H2>t*J!M$={|_?Vcc&Xn@ORH}Iz2UPnE-<8S;LTN5Nr=rH_ zjYK^R-q|5l_Ele2$yJ%Tau6~6lc*Cj*y*vzDybqIgOa6RMpphZ`>hePf?31`vDZE6 zticC7iRKVq0rPN-mFo>TbtsT5Wvtf5Ln^{b{;)~%G)oTl_1pb#e|-5=-GpX}4@7?s zz$;uo7#%zDhK-|IN>qXI6vG@K@UicMVyxeCA>o!<0AAo%!ORnDkg>>zs3U%flo^w` zsCo@#5#(F~*-V=+2uf;i>t6yHjlu3h`}x4}WE1DNpcMWu6v9(;Ix=KjtItEnO-0y%Omt6GRw$EgNv4*4z3fO)+^_}pwR(L zE@IR`W8T}_bD0sS}@>o(Hmw4xv)2d^r;~p4&aV~`K*}!TO zy*V*2Qj^GD=Ln)Jim&~Xkcc=}1Lz`EHF2XebjeMrf1^J&fdIBQBBb)8FQ|eZE-t}G z&eB`uzr3{ro5}d~*Ps9WZ@;D$lguqr?_3%ScJw*gY$0;sY%$GVG+277(!FLz&Bjf{<5`!o3D>P@Cy&H3J4yT#Tu*L&HYt32A?2 zn`F{KgW~{y#3Z;C8%q+6LSv-OmQt;48-Hor7Wnj*o0E(jlQ=6zJ*}Dyym&euQ>bP_ zqStxts`&r4`~|u1ht?LQvl()p0ZTNP-uVS)VEO=ERIM~IL0XAJ@5D@tfV(`z1+0R3 zU?7H`THPz`x)5}v(Ra(f2Y-&i9 zqh@m+1Ypty==l9YjVqG5)HsNp-30btSeYw1`2o116onW zuC|QQd)UA}8wJ|r#5`%oNEy^00G~C39#L0T(>goVWbu3#3SVct)IV*XgTi@(WHaq) zr0)iKPA6`_r+L-kMDr{mm0no)sDrmI^Au>NeV+T0buYRQz(Xbq+0JNqb&RD%C|;~c zUhg`;H|qif7U#OP0WT`1FLmJ4OXky{Qd;e`0oD;*Pgew^XaL|qqLv^xl|Kh1-D|kL z3#7V=RL2?YZ`qqlx0e#o^dXewexK&AcJn`e|Mc6ZFS&&rA+B&N<&L_=_ZeC@cTH%e z?~#q3x1s8V2K}A1V@=%ge05t&`=FnKz67!tllz#KF>d(qP`nRL_uOz~%|G>bc!Oo4 z>^LaMB5(Hbmh-B-*JJ$VxB0Bf5-`CwT3xha!Dx-IJwLsst5-MZW}9}A2M|2hB(v{^ z&Izqpo%~?9AkOa>VQW0cT#C>Pb+mLs>E; z?3D>V5nI$?-+~dF0j|8iuX33pwz)SitonU#UF|BaI?@SbgJQC?=1-K0#Bqa085D5n zZPHxC3WMvBg|^PH`Dr>sj2_^6;!5IzrJ-~=pxp2YTdhBkE9u-co2PB%SCmb*4-Gn$ z1+ZL!B=4`T?wa=Q3M6p~swJlE0nJd3P=lG?kjZ3A_B)}6t^wJ>2n#&f9iBC1L|O;q zeHZUQX!U@337j|gz#wI4!5wjC79%7yWyXl;*ysD_{(OJ={p$c%K&Zdt?_a+E?w{Yj-oHFmplzR@r;OqP?y9Dhp(^_#rr^x7`t1C-12JoO zH_t6kO;@Bwo_5_A*8(<}q0*;**;N}BxLIA;l_+|+Xb2VT8oanSIJYKpM>z}m!GK3)4^3*saL{69mMjmv21hYBqcx+k(*HHRQ(Q@6Rju~9jfjSSq>FdT{j6e%qh~8N;4W~6R@Cm$|wuG8Q(e%hHvy7V_gbs|$Nm1?b0 zCJ*ClCbbG4*-4l;Q*e}-eLgs5@~zUAw@{IICAn^2hE=d-`8rb(rDoX5IJ9DFG6nAI znhMa7{${-|ps}~ib&*xRQ1EhiwD8(QO^VO~$bn1ke3olzNx3gIr4=<3$05vTRB|aS zNPG6~%pNP$dLBHl7xEoT|18)vzR7yIUihYDC5=@F-V_5K++s?tKfJ#NVLg{OYPIf- zTfky`-TH_hf?2Cp%L5zDCCcCf>~2j0aI_@ss^*yo6av-ZVeu_MfXHShr~3-p9Wi1U z5xM9tTsff3$mI@LpNrMS0LQU9Zh!_YaH`mhN^pp`6 zc2vGC>ePmAi#a_d^9brsPMF4I4Z+wkhz|P|lHuI@(xXWNji4Ko?j?$}L>w2G7UY+? zi#cg?p19Ad0<`fp^J&(TUosmPkt;IiLIri<74l)(|1CFTFpE#|y8GXt?Qs$@?`?it zLL9D^E!;jg?1``jeK~mljB5FrD&%xQkIZhAx46a@W@u9z7Q(i$oP!I@MCe6ROn9b& z9r+Gq=^}g74|tnj?qh_4V^YbL-^ML8n@$AkI^_+p!OErE1+{WM2vhoJu6(c#@u|F8 z>G0`$%yDBx&~&xu_Av`l3;)^HI^sTx(3UZ_2eA|v_qV801O0IJ%N^7E-cZ%GZ7AHK zWILZtOR~rzh=~JNFL1Locn7AV#I6j)o=$Wwm1s+`Vp{_FcI<&Inh3<`5@IDTHpG(W z{>l8f4iGD;PsXQ$W0P#9#GpI(b5e=Vu$(^D8h!^<88nZ$gnO8pE30f!1ec%_?O`wEQ81$)kv{>Is;;7#M!#Y^d=}hYfaEa42YF2hu|p8uC>_O zF_e{nrPM+mmvVuU=FL@=D|$X9X=Z?CM{2eL8frN~)YTD9*r>cGDCxu%Hg+JX>T%Y} z4mFJGnBl0^h%xjGz8hmjrDbptrXge=q!tUMi1iPf!@V=b&)}0f?V$(unJc{Dr7-`7OS8(HijYBfgol|wbb?l8MZXDOYYFvKN8sZy|@MJuMo z)76~tLbPsfxsZ5&4`@12^65DQ&%$q!Fmt?GkX2{3AVd&PMUk|Kb{J0*sKwVyQ^1l67~z7a;qPwO6oWCfIq~ zr@U=9m=euSON1O+S|OEQ6GCuKDXnb2NscA!tN8N?06j9sawW2_Hi1r<-n4P1g+N^z z<(!xQYbZ!cORQ=tx!L&Y0tRz{nnxtMWpSD)rP)Kvt?Da7eueB>j}u@0>(~2#{{AU^ z%(?LnDoRj`aHp0h5hj&?%zBQ%M|<`8Z@>KfZ~yl9wD7*`#iQPZ7K6}ZQLYN$iWv`> zK>1xT6st3tHc4}~kVL6gS+^RW8X35G+I>lIUwqj_rq&Q%p1UBdj0i1cb`S^=i~UkG z3Lspnac!1G!4We4p2HbkA$`#nC{As6B3|?NI z63nq((mM5O)4L2w@CX-XpwqTiOPp92&1(`K=Y)5$fCMj#{yxjna2DK_vegrn_5Qna)6qr#~M- zUjwC|UJs%BJS1!y7Rm&MzI=cFbpQCrmjr|I^F5_xDJaXvFAp#IeIL+JLXEIfCoo!i zjj9d4)&7kV`y=b1tCOIhaqXG?3 zltAwsdWPoRmvB+HLOz48Y=g@n8m`a>OoPEOv`IYfE_Hm{2y6CzfMuOlp#BgatK!q`rS*=$}DoHJhq(^j26vQp+rH>C_2_A zfk%Cj?h)`7@!M*$s17ddQ)-w!*z&wlA*!$YD}z@)6O3c$ z7WM{2YK!@9J&y1Y)uW-5MsARp5$^KfcA8n^1gVnaP|+N27B>#Kprmxh#T6sd86|8u zBrVOe;xV&g!H+RAl8;PLg=B5cp$rx6TL{yiBmLU)@_ElU_JMf&OF*j9G)%X8{>sFr({`jl zbVNHGwQK~oNa9iNcA+_t_GQC3R#Rzdx2J7864nb@`-F!WI>Bz|H$_i4k!{9PACOhz zgW3Z}LHTHuy6a|2V=M$r;WJajj5?kz>*Vw}sy!P6M&qLmwzA~9l!`9^)V$PU5{bP3VjE_s#Tk|Gg^iK z=~6e%ex7&YM1-HnN!0VmHqt$X<4I4Eq4MXLE&6oRkbmq(bjbc5L9&~x+w?f(45pa^ zVc<|G*3A!8xN4{c2iF*DStMqXAA^J;r=hl&pqPt9x)2qeOVKE-ij8W>dL!@EB^SuAg5~2oIfo0zyOK| zJf0c6{`57N?~op6>0+M1R|;TX9FtAYn*F?*hDD|YF+G>9k4)23Vm{62B)6me<4(}4+Z8m&g=2j z5-M?zI3TMb9Kx2O*k^RjC)VmQT#|Wbd-abI29D1lK0+{vEap~!?C?b60_7(uxtnbc zdaCN!<5TizFW`pawDsv=i1uXCj5t#Oh*}(B1+i3eJz$30EZob9sz$T2CsS}5Sf|l9 zjTa#Ge4X0ElgVu=ZL3<9mX^kDbG1J6+;fUJNKnttGu0<;ezR>Nd5%?-fx;@qjJ9?} zR9b>e&4e0(jx$-`w`MGkihHosRAzfp!MbwAs2pP8+j_B+P0j1K>@m&;&6hgx9R>9n zh;{lDOkfZrt-de3fu}cS$#S>=DcvGb_wZQUEPMhpufd{bG7u+4@g!2o=J>?texuaKkwV>mV~3G)Ibkx@Jj*|Xf^?!D$1h?xl4I6 zU8sNVP=hkgB3X~Ik{B&nW|Xqc0|Mf-#6-3y1M;mwuFuU1GmgH4Jxxu5lZ6C3l))5I zt#sn~RQDyTigYo7_I7nbMPm}Ut{nQ3ss)B#E{uG;dIh4Ir(7GdS!c#etrg5cxqvsU zQ!c>1ii1HI_awb{nfpyq6sfVQyn3wkg~qYDhKu$Vq^C}lqHd{-UfE0V?phxJb&CW> z9ZFkNVqf85B=uspK>b7sIF@qm12e44kq|@2=<%Q=*&L)|Hl~%Y0d@(FU}@d^7g!{4 zvh^4(>a3@(A0h_;${`TyA>r%|s`J9|Jmo=Kqbd)B<@Tli#d(vN$mBtqh?@O+4l?ms zrX)xEiGa?%Mj7 zsz0Zb^?edThHe)NmpLc+9HiXRtW5&(Fctj;^(7u-Gquu+$*ox=QE}OriEMm&ddr^F z-4k_USrl?2T+;?(((TX$Y!DL<=VUtQsbKuKGDQ>Ryk!V{_EQ z7GdPNvhX+J#iVlGt;;U#8^nSncCIK5*br(t@#r&dSnd>cDBMA9P*?Z@6z0O3j;>#N z*$TGZ=GLgyD?nDt|6(swzWUglzJpV|%hBD5NEk9(3@NPHw`+$$O7o{VQ;gUm3afKB?&3VC%A~2$QPhO1IRC@ zF61*)B~}inFfIi973BT*G8Hs7^!Yv0-EvcSbyKqDR9({0Ct(C%VZ^7#uCA#EeDo}`LsBV{hIEH|VkcDS94u!*mN{ zADhlZVysB!nn5ijN9Vq6psL(~a8Sd^`H_a>0pvy-G(!%C=~+u~#Q_e7-9m~wVL&rt zU#ctyX;9v_%#P^LO;sCesX7@m_g^7^EojYZ6jRAg9`c+^C1^3W2=Jl$1SUmUW0$@< zsk#mm;jj1a@3OchQgCp}$sM`0Fap|GPcDLJzA?r+&6|P`o`Et@>9!&u`{LGA*j$ZhZ;3`^(h*NbqUzGGx|IZa@eo=IA zl*bN!Vqj@ZR82hdsbpIA6m{&{u!4tk`=pGre-6+s(~yqNpK?PiWV+=8IR9pfou`Cb zzP&ix#xkWthC_5IUPJNboWTWHHnF8P6((JxS1NiCGzmOZr3Qn$D%P=VTvqdMBXl|E zY7^D6E$ZIMA-y1E-YrG+OxB-T&8K?$E5T#6D$|Na2C~lzLK@?+qmT_IS{{Y$`cvCZ zG{#`vug@{@GRBnV1E-DeerjY(={LRA0TuwUa)6{3b&_pnt&F7DzkTbmOJ}&I&FkIb zom1Vp-v3n%V-Z9t3(ka~IMc8Ds(X2lF~# zlKTM8zr$S{OSG(W2&xaQC|cY?hu#}q9sK}qFc%pV?^Ss;yWXc7eLfh<~Vd8VqWeXUkEAfBM+J<3eClTc&6 za8+yw(;1B-k@KOUxgmmKqFbr&m{`}bJs@^fA0yMB1%`I}1Y8c8Ho8WtcUx#EphcLB z1{b)2+S}XYu=@97(s&d~^a?><%$Qsx7|Q;=>nT%7)sE#SzD8cb!spzw)~T(*a>XE; zmsD-0BX~Lp2aqB;rS+O2q8{M~3uMniV{~T&uTI=@j^MLREfk_x?owexUS+Lcp?zMj zs>jEw*ef@>3eLLDTYOVV(B%xy{^C7{RWnkK>`UXMh(&5-EE_My##N{C+{hZ3M*NFs z7X09OXChT~!8V&lUFr($wx$zQqZ$1~}^kfH_mHlc3V6$+@W^PB@`L3tiwt%ujYxwP4>6=wz0$D>n=doa>zeve-$r zQEs+z)ot}jvw&2SNS?}^g&bSC-iyV1dX-LpA~h}*V>)C8t8xjZ#bW^PzXd>Xa($9kHT+{7+jHPN?P;@hJEC<@-hSV)B|7Lyj?ke@>r z1bqRoYiHpc}DunW~%L}?A5S*Wyu7RS`t(=$tZ=Idk~%vh)MDvb|22Yv;KRi6uN z7}>2`<<6YuEe6a|x4cMsfo~E@8Dv&k!-S0?X|1AO=o$=KHqf2tgPC+*a-WY`b%JWN z@pDvD^=Wp~SGmTFEU`JL%Wtq_u(P$Lda|@zx((M4ewl{|>56^1(3PA8b|JW~w(F1Y zZZ<{4SCuFe)K%WByMPM9C>2k)5Kg16RZ=1Myjm~b=YsFH9|L$v!SCHRGM1U!^5;)? zyARj-eHA{U960B>UN7?L`|EXBmsbc-N@i(6lHQ$7eUjI_G1;QD(wNT;`aFMwVCeTR z51|%H`B>!O{-BO5{VN|mb%?zsrWfJ3eCwD)$<#6Han4hQ48RK(XL|}BbxS}s4hU!7 z6I3EnfjP4dqx8(wQd!_SE8Y@Y+BgT9DPGDbbI4kh0}7@DL|9L_-_+xgFswd%plyBjVU|5iq6k=lg4kjFk2d81G@y^tTtN~GyT#@_TE0|W34_5C$ok_n?|Jl zh4V#_z3c6Kc5%mDWB6YGPEMa5g!QT{*7`&G*}~(ex{OVM))uquQ!|Jx-`?uhr#L~) z@pZ#v;6hKWh<`{TDGzvG(Xou891syk;n}^BW_UU(c6oDKm9cFsgA3`KhK=mgWk59UCFLicz0YNMd&Z!Je{_axj_2kG%(Y)|{}?!gQdEJc;Sr>v0%BZn?NrplU zUYr#H99;bey&QuUbXZvH6piLq6;+W7TpHj}B1@{r;EPdU!$ava>eWgs&b?3JdJgdC z%l*UG?@!+zU*8ZrFluQx@X;@T^BC^2^A8A&!@)Vshy%ml=gx5?VjsCg0hl(gaP(Rv zWr%2P4*~^A{crhMeoT#a!lu^6tq_mt78JHE@e!ROReYGl7)p zzCZ>dLsn=u329+e!!dX5`gNp+-m}Xv7i8N7aS>$Y3dZ`DT zW+^BjTTaNGA|5W?3%Zt2F;KIdcjzRfJ!_JroD-B}DKujrt5`>TWa}sH*LH~2wgt@K zrQf+CGMey8DjrF-M2jGIf9ptTVe1yqrNnc&Q-C@(=k=2!#qwCRGTFT(rHVD`zj6n( zzDDu|r}e(tJzNs!_%2K0%yHgk$dw?JG}>}qp;%o6BERLVY#=^!R@Xm>hIN%2BLu#N zQX}g)+6HC!zfCGgV>KNyL_2sAJBg#EVt`REPG$5O5=RbWSpB9sDcl(D?5wJ;5>Xgr zLW+k*4e-2Cv;_H5&A2?ic*$k2v+^ZZ4jXr#KEe@bX!6upO{srsss8@8?eJ&8&bfso zNb~mKu6R|pGCKt8ftfP~)cny=k1@wjyV3|uua(-OGS`gEw`NnlP-WnDm)p|lUDxjAX# zeU|aop}J{F#Z^rl*E8nSKE-U6Nl zbzwulUwf7X^%;uR8N{8vy#UyTgwgJoJ59$=5M9p3?3g%UD>NZ} zhsZLkdN~-X*O6K`R#bp;(cxu=nv*mh5O_xGw52}x?uKrX;j)h5(woBOYqc4AK=26i z0_yQr9yg3+kr_{RZzgTYb7t^riW}wYN5bItM$+CuKxbh%}+P0 zUq0+U-fV6*%MaJ<#Dng(tB*J9zyEao%kB2p4_80mY<{|4|Lx=Mm)p&M`}OwM+s*BE znGo-8)!>~TeqMTcRwL=W&3WnNxoD~p3>2~WvO_qhzdZ;GdJ5t6msXQ~|CBf18Y=qZ zO9=)`D)f4Ic&guUK;-@e;3&_Z$-THOu-KKuV{OT-f&?UV=qQjJvb~I8VV=^QLZ)^m zFxSvq0=sdUfIJ_Y>p5|hsT@Y_X*KT?l|uqZIy$tg>C720n=00`ssu)w#mR1+Ii-!9 zQjfs0Zo>5Rt~^;ELPyx?8$EePeLdEV}l|SeP=;BhjuJq}Oo`O<|UD(OM(#rFM>BTR|gCoy* zU&8w-;c#j|Y0?ESa=dwYJF>KPUr5_bZ;Ey?;uC^29cAnEWMdiO=N^B+l-8K_9P%mq z<0zyxVpWYt0KjJ2Rjz`l?HY4@;T-Xq_D^0^`m8|`a&}tG7=2y9AYH=U$dMD{3iSjg1;w8Zd1Oh0_|?cIN_~S_?*}u z=04ks1;d9+Dnb$~v;c~N5xto!$*E?vo{`))%vOAIpMn7?N~>xtPk4&i!^D2#rAvrY z5TJQYgjN4h2A_Bg>6b-^yuK7Biqu^{#O#_N&4rwKDf~|!MmBdsv?x70oZlo#7Gz4%X#qK9nQkq&{}| ztq8ms84({uA24VlB++HLcC@d*KnRywS`lZi9k0EI?R`+)269xt)01i$Zx96xnIA4P4#TUGvE*LP3+6i=$o;9>~qnl zzub#npikULnc*HLYJavb2_-^XvnXzy--<*IITed);N;cg)J;2JEhRJR*Q( z+u9T$l!02FXZ zF;TEi7z46s%Quua%0DtQY@tR*F0?l7_3fcG6{n=1zdk&EiW`^!H!Ao>39~5sw}1Wh z@4x(aJnNTSiv zNMbB~p&O{3&-DyBL%_>`M~HRGNl(>kuCwm-)p{TYbu-|i=)JF4K{ZQ3kOg&46_=Ph z+FF*l8Ujv>1-zqy1xLA%yMh{*Wj*P*o?CTB;IaW&fgTox1}qe1kc22@%qc@C!}!HX zDMmvZHA9Wa5vz*38rM4JCy%Kd3*|O~XqMh(C{QcJyqSmA(7edaV&JVmZA)9J1kQ!H z2GXv5rC%u#n^R|jo%2|ab|eZphjVHO*W!TYyM%arnkU@frr)R`&8xv9HCfF68OAkV zsAX2KE$g%m(3uVCD|&7L7jgH6fiUx&)3$kUB$0L|ufr%d9{{aaQx|i*Lrw3={-j2s z{E0*vq`+vnB(*96yQmvNZyu5ah}iQ)(hu}kLB?&dMhh^pGMX82)FR~wwG4h;ZYcyzAdtoztWARO_J^YGS#Qc|0*68AgD$zr zkG2oo++F4Q=f<*8Mvpj~(dtb2uZbk6UJX-%Gn(e4v(@=3o|^QtS`et6u60ebCEW~= z#G(o2Z3CW4DCEZToiwqC&I=e*r%qgl*c{3}lGzSW@5Y3ggF-<7jk+9&g(7$?IsuePbh z%lM-7hnb8s8&Y~v{WBrmvn(s{7w2$L{6LtsMV?TEZo??kDVEk!ni&PuT>>8)#Yp?@ zxK>mA#S#56m4MAf0CibGFo4>F?p%&leJ< zK`EzSB*kQs5|dT2+L=L?xty~&rTI-3k~-GBu*=d8cDOATkB={L^}nNe89R2{a6PXj<7u2;eJ++DBV?Sg07 zeuyMiW{ORI7S}C$n!Uf?1Q7IdfI?U6zrEl6@_zU3YV|Hap+t*rtCM5RKh5ljG0HHU zw2MFEfXY?59T%&6plls0$l6?xP(7n*1mk8B=d&=)@dHMd-#bg4W zsZC^hY7zn_lcOiEU6LA~2p=#sSC&h{K$QGvKoJCxEb>gfrD2v61?=jLn2c0jpcy!l zMiWV$Y~V!+@H7Ct@&#umlPV}BPs;xX@RBk;H0cvwFM4Q~EjPP_Kocao&X$`R^jZ)d zTlqc>u(@Jni@6hfeh`McE*_|y1>3j=5U!FS5bnu`l|LpOUQSH(h@bP_9sOVse& zc{tMsyw%>ySiT01aEIg)dz-Q3Vv zo1Z?UlC)st?Yc>WurFl*NYEn<5KwlY=Jq`P9f?V6lAP+ua@2KFV?|m-8v$=hZ&*g# z1_jNIx!998(W5)%Zz$wV)nZ0?GLk3k8iXT2_vv#hUU}a^z1fn}i$&6UdSnu$E<|~) zKrR`0n)g!KlSg9y3Npx*m_z74^NBy_J?Lw5=dQalyGp!rp>&n&$A{~wOKqvqudm#$ z+y`hG;0wzfriv~ZSXYRlP=i)t6sHY_knGoU`GDks0!;?sS?-wWEOx{y4C`kG@~F|! zmE{TcJD4)gogt{>SdzTWpQ1usr9)TA&c;c92-{;QmsVvDKDIf$Zp9wM>%QuQ!FcYW z8d}OrJmIqYNK~9{QuAg;HWwk^(1q;TfNaAeujSxV0?f;x4taKM@$j-wZ4ghw<(z9x z+`2Gncw$euhQ<9(RWuVOW{uPulue#Uek^&-_eDR|tZ#R59wTItXT= z5WsqmE)HkZMS{vQ!hMzz;|1mp3+$UsC9^)`Acl}E7dK?qJC$^j=$q?o%LCWw#Q>0= z88S1PsoGlJ>WH(*^njTNi%mWPd^>@-k^E?mK+=f{vOKa01^V^L?s@efNs?a>wz)tO= zgsfqdpoCpScJz^9hkF)5F$Qr==$&oVG}@xWD%YM>aVEbkjOEnk!Y_>M6K{EchcpC%wEH@-XTRmgN4BeGe)k=KDFK$_l@+@j9Z!;4@_tq}n|!Ih)Kj^#A3>+ywG zw9Kugj)b~+=%jO(6gyNu?AR)mn4Qc;Q@VV8XcVRjX2b=pE59TS0<)IST z$GBzf`u^@tR>e&_!Lm1^g!VKGXP{0<4lC{~W2WK$Ly0G{Tiz4Rr1MiEDyzkeY`L`q z3lMg>&dMoFWz3PDnz_1HpP9y_ah^`pb`0$*2CNye1dNs5iD+!{`m-3=q&-LwPMMOZ zlW0=Z;c}$3zhe!ZiV#=7hO-Y4O0GG@Cem*mNsYINW2rZ?Bz9wFp2R)@%H>>{d3qO3 zQTjh-uk2Z@H@ekQs-N<>kO}JyT8ilK0}{4|EK}sNHo5Ky6)0zFaAc`{Bc6-eMrTz3 zzmxI;83>ksh~OS|j?Cbj_QTVSk?s z6x`;eHEjcN%LEPWtYOO2VZ%$TdUY*(%dJvL>5L8R&2Hbem+RR)D*|81)@ z)V2$m;~U64LJ6sk%MvMcKj~cSu6mZa(Il>N898!p>hZBlq@4Qkp}{ena8%wg)U-?o ztQmz_VI8%2>3-?2&T+YxgfAD6VunD+#;krg zs}DiGq`}a2u}p6U`1Xc0cE)Pj77?BLoGND!Z3l-twYAl_YR0MdIVR+K^tbd+ zO0G`%t^^B(79Q!v@S-LJP@F-c0<($wMM^u-v#Po7s6+*?HKg@@<=x8w3`IP^!XGw^y16am?vhDB_M}O_n}z0v z1>Ir+)p6Actjp}8ykdFjbyS_qXUXutyW0NzZX2lEhe)ljz#EG68FC-c2%5U&rJKh` ze+>+=i12R;1`www&Y(p7TaysMc0D|mdHO3XLSG+Vlk|-^{g>|z41N0Yc>h#timZbl z@}@|)f^-ZBs&|~@YrmWBw0riycuJI|Y&%%sX9n4Ws)Op;)pTeKMf&eKTI>NR6!; zUpQ4;G}Xbax{5cQk&s%kEY*rqK!rNqb@r93#fYpH2FJQ>f=9dj_@N%&-R*UTL?Dp? zNxpx7+h8x+^I>4jNA&)+JgIrZ{V{I|KTs@lOCKf_eo;;8hq$f4tQu3t({(*&fhBZ2 zGc){V-A6tX4BP3Rr9yVBb{NwAW^6n@4E%j^LfHjf$@>Ee!P0Jo%<&gv4%FQcT_D>L zc6c&Xs0{zkFveg$632_~4A5km!gccO5`K$Z(-5&{2gr=Faqvekb|$GXfX|I5PFNeutgMkqsu7zfZLf%_0in7jHzi zD&v6n%GgYo;IV-dNz1F|CisgHcc$6baar@+7Crkq&#!veLq5DaU#gk%saj*?ak*ax zynQSOZ(RnV5ge%+z#Jr{VbbEDP^MbMrb#EVPeulfAtH28-Ybzlssygc(FwijUGOG7 z#MTyWW12qZA~E8&z^T-Rq;sc%_*f3HmF`Pf{#Dgpf(U&~<=3aL_xA}mm!oV{QeHv{ zdI0WMLozD!t#!qr}E_^j(mEzQ2fn`AdwEt%_qM@r3sX=bE4M0szZj z{PKEob|0A&k$c+)HWW{iz>ufri{b+GL^Wa}US$ia={qzMRCxUNc!1Bb@KhYd*FAu| zBg%t|YJ@R2XNbh!CeFeLPR?K|f|farQaG;1QW`OY+G!o)ye#2yY}$*uWg|C7k(k-j zyVx-C0S=!;!#KPbLq7xc>4_lbuuu+GvVK)g9BfOmLO@U_`?E_>ZX9A%jwbv* zBfa8B^X{N?nH;5&xE#Rl4R-_2ds*I`B)QrpIHT%ReMZ!aIU+6`Rq#6)lg#}Vc=+Wj z^KEcj1tE66x{nZYm&HTjI2ZrZPw#*Im!GpJl2a!CPeka$hudnqQm~yu?~sGs6+DyN zX@~tv@JKW2ZSpk`l@vxKT8!7}u*sV+X7x@}Jhm z`6#VwQGBUqnPEv9i-?I?TZcy=H?3^u7JVfK`%FZSsz%)cy~uQK+PMsLP~PNmIA5zR zBjaHf;UF6Jz?_9$?5`UP+SW0J-!&O+^Mp{Y)>#6fJAwZ#vf~2V$^KU3%6~UU9ddyq zYWOTy2if)+w<1ki|3}1-bu_BlF_1Cuc$j8`)QqDu7Yo2phM1YKOMXt!yJVq`yg(IZ z+gIu9D(@)EV1w8A!D+ApGu0afqk&;WQI4@s-B8_nRhi1e^7`75WGT=z1Xv6^cCh37 z8e9fz6J3}(KF)e2WJKpkQgD-YWCTqpLJb3EAvVDvjs;8Upy;we^-9;uXtK!Kl3BBX z_7-po} zG%T@`+GlyzH1e&m*f0tJ?H0?kZDpURk?ay)lqg`7CcN^CLGtERkI@*}lC$Aaw-a!M zL*XbMer!g(4xGwfQnRpBe#xu-^5#l!X2qYOH@OkytNIZTS5$}I%czW>mV*=6nwZ>X zf_9%>GF^AA|nKA618;XzOXXZqG z1Gi2PL#kzN(MOi%-53J zscMu_sOy!pXUp(Y!W!(Psd1wpXO=qjejo-{lF4Fmmk;`aYdujiyyB$=cNr z;yi=EvA!-$njN`-U#5JM_HIt(ecA)OWhR1XD=Kf!?0tAvD|V$ z2F|9yOvX80dhUhFbgQS27g3!e{!Vcx+FD92wYCm>RX&FXG7rRaak+4E(yFz_1;8$4 zOkb5gV!Gad4g<)hMsiwdK?1|os*bAYetB?atQ;9uXb8<4-DWwjp!OWMeP+w6M7xHE zPV&zVTU;CWN0(4vu`wfk#Y*F?nzYE%eRm!Dp{tu*8yGJ6tqhloywiuls)*m@+JKlz z!6pdQ9H+jVr`Kgv+f-Y6Bs`R#68$ucxPPWV?EdMswPW|s_fPvT53gUoKP4oTKfgci zlfp<1WOhzDesfEy5G1i`xGE3rjhe@4@?3+UtxtzF%fR)|xiuwKH>~Mc3F;r4l=Z#< zkudc$%~`u=(FQZoT#@T^0jf-n%qD#Vo7Uy!A0anUePX+INBYBzFQ{d;)lcf1w#pPF$|7C@r>A36?W^lk%c%~ zCT3k|iTZ#jyyo>*;rTsM^szh1B&gXj!I73)`dSyD%O$fyz%I8GEB*1qyMTkPS}#^p z5Q7$@e3LOjVBVmB;D!7}Mr9}u%i>J)6#cHQji`93`!1y-AVg|R?W6s=6(z9uKT%b` z=wqs@cz`vjM^SiHZq7mJ(yueSkvJrpXeElz!f=mBE+J&+Y3MYW&1hjMpr;*fteKv? zGM-IsnE^Wi(*=2=Oa^y}dV;s$Iu4P)x$R?CoIGm}lJES;w2Q6XS_xIdX@w3$CNHbA zh;%?BH`cje-Q`5cV`gTShgmO5;Eaj5YD^HOQI&ZTiUKahh;!a3v1M?lRKd*0sC8b& zkH4m{4j%%ZpnT@tvA`QOal$bs*e+H6#@sTV)ya~B32kQP{~W5N!p%GvyCh#P!g<+| zB^iCv6lFF+8BV$Kx+xT$jF{G&aI+QVYQgsO45A=Aq&&DAdluwHNx|hX87nRevybF( zD>@tgoc(VA+{{VxqA-(-XnKJxAQ~VGJnWDsip_c6!jVSm}`g*pi$5-o7k;l!(F~k^`uAe z929*kI=5m|wc9j^a|-hdjbtf`)m6fHwXTT@NNPX=5IQQAQ}+9uSlE#wea9a-CL^bo zS&MKyRkWgI(E|y~XEWb3HZxLlcLF_(JPI6Tq#MqG?|`l^Bvx0|4&bOE!9th_!UF4g zDJq#EFuWio*on{#(`?Z{3(Pu}i15^jtQ(VWMZKcV1_U&#FtEPAjm4|#9>$iUY%x6jjTZ#bCMQ^kWJNdRkwZXm+Wh26rE2m^^N+76sAyXd`Sh7C*Za>`Tac3?}6J&qfq{RusOBT;N>xqz8@0bZjJ6C5F*i01fa+bQ; z8M?@sTc_gyg9lr*yJ|LPM)}^1?%~og=ZfLiGUsSuUJ8jXmIo4xmq5R6f|&YM%uxJc~HXfHmM$M5KtR4eB- zn?s}(gN6ZA3@gcmv~b!>;76JzqpSu8w)kvO)*vRb4)gAgG&UT}87D{d|idT!=yAB|w?3@Z2YERlX7x*RF;&-^?@p86s4Xdb++*i}R zOc~Z^0ArUtfdrBgy6_O;qO`A?;LrXPG@Q~!9_j#LK%T!P?qi7vtJP629uq)WuC9FA z1;jOumANC|R(`Q-a}_F1lZ4G`O0KERyt!$PGh1{HX8?RU#gjUmD9scuuT?3?U$SMg8QGnx)ugukO5s zI)&wkF0qJz-FuQrryifkdnt{g*cH5)MQoPEKsr_{?TYgV%n%7FF8UpL`q%JGst zcFRx^?gsX8e;$?c0rI5y7}(Al^*kwYX7AA`sQ7#8nB2oopSy0M<6|*fdv&i~-~sWw z;4qOPKh13P;Dlkuo#i03@R3mZ5ZhJYHa{bw1HJt?sc%w~UE@52Nc&R6O?Figu&(RnY%aeVG-Bir z===<31<}y#5VtR14;VkH#%R&*DQi+4L|CE{`jK@n7o@6Xj-%*)_H@nDtmAx^UVV36 zm@V+8UKIU42gS@$Xqoom{@Rm81|9Ipj1j0B)6Nf_A-$y&>Ym$-TMmpi9u&QupEEJ( zfh6IK8M1lysu0QpeFo4gf-DF0dYWiLZO;5m9%U9s>CqV!H@SF;n5SWtluUZQ#Jhq6#Soj1*uIz5 z53P=t7B$qaK;pK0sVfxFW>Dc;dqOrf|N7$kdoaoMhv&!3^q^=jwF;&M4CQDd~qROo36!n)qmJ?zD2=7pb79(cPTIb((%LvawV_FRe7N2H+5pg1 z_Wo90`Dd9pYei2jQ{AjnbF_d7J1x70UH;YvXg`12) zsqmDHY5J%*1UtVHPd(kXfS^El@;l4ITyp}EzrI+B#v;jwk5p1fz!auT=dfIf?>74-ACUN?!1U-79D%`ZuAaK6 zwmDNXe$<5<$jWPQowDATYsrkJRY{7Q6pZt4PY3R`8vTh2tSQWiA6xuCnNIouU$7(! z#gbgPoH(#{wwH>~7y6`fkj60o*JHs3*)mH=gA>F1vEl6!@6=4+O zNeM9b$k`qTWDn)vhDK~hK*?9~U`Bd_CP8@ImF;*zz=a{O5CRiF;g|u7hhu-M^^V+l zIBpM9%h*ep5?!7;A=~T_I{+yshKGftiUUks0oSycpz++@R!NOKR_xW>T1e6KxxQm9 zbnqk1lPc!@^*$`eQc@I-5cwP}tsd}acL*-mwM*~&P%Io(nyDmf~` zi!z;BlA@Z9viepeAx|)O+xxEiDovUTr)<_7KMTWEx(7lBEbGWmNVX$Kd)_5ZfLBAi zfrnCeFISt1#?|sf9Bv47SP?SK@@YuoxTA)ob6rTApW3rbMB&>cHZ-?(g!zReV%rMK zwlN^ZNs1g%D#vyH3T$TDT|Uk1fcc!P0+YC5U8G@;K#u>MS@Y{tVXInXl_mrW<$ur?;d|h9`AdW6^UKb9aOKiwA zrrzz$t?IL|(Ti&imXADwTBnmhCY6!_hB%9ua=^?$W!l~sp}I~D{FYKZAG+C>&-BQ(+ zWgg(C#M;RIi?ylMyb!~mP?>SekcDI)Iwus(!c1#>0KU5BN)-*1Yf80W8gP0~2{6^kY>NS?E zoVm9mH4+z1E?w>(^b(5FLK+V`L)D8070Wa9Zie|@$y?`BsH^LO>wd-B^%6(36M=PUz!@juPPxTH!>EUN~gV1m@NK68dsUwC7g1Bw*VR@ph*vX@Y+uH`L)0< zpnON$#8Bp2M`AG%q%776VFX6Y~&Q< zmYL`B)3Q`dmjVh-U`(q0&}p0Q@+T_9C7BQ_Tpt>odCJ5!6Jn3Auz-ZV-jn+bf_XMM zXI)ZE7Y1(2{p=5RR~HJtH#9c72Qe%$cN(z{8y>nkgFPEKG66yPoqsPfX_cC>QD7OS zteN7*vG9cG01gP->kidz}!;q|7p={k;$&|C8a`>bxv}0MAnI?PnJ=yhI*rFO7l#( zCN1L9B1n2c%bwWib8(%<69m93(V<)C z!1^eZentkA$je)b(Z7FxnxmVW3r(OTw;XoD%mq2c$D8ec{rCU;_rL#~Njh8u|Icrq zLrb0h7R#KLxBU|wPg+{cAc-ypd#(kQ(zGW9*gnZlm~ifU*M?ScsijR+#_kmVP#>(Bvw80bcdlMj zt{b#DS;y{N3W3uaE{i9D8iIF9)1sIaTtPt|F}ePt%4le?0^Gd1%!*4 z<6aMK%AdElJF|qxj;z?LP6TocFM%l0!)FjG;q3#XCIGik{WYC8Em|RV(yrt`P8mvB z9}3$?rU#(P#EYdTS>1tng|>h7Q=ojX1m@A+-FCzj#TMD(mhMvYRNr`xz<)7m(n_r5 zo++a2L<$i46*`YWvz(~9&uC+n;S^e|msf8VC}RF@mB-M-zPj1*u$E_3XV4Qr452rB{_R$zES7`xR5PZ^ddSz3||P{EE#nUUKYZ^D>Z z?d;U1lfq^~=7lwE!-$f{Con%pE*+ZA3|o1N-qJsdmps(n8N-%tQ{`{!5fX%g9mqt~ z&@fFrLXL2XMmK4v*C0|Q18%@)0xONO9&KK2(+R&CWKbQFk%3xZK&IXt=t7n?lqpz3 zH8rNwRw99|^E5HWJqxhDlg^Kl4*9yNxY#Iiv=qS2W?}rfE;^xvipy#yP9jG4HT8Y& z;g(JEuM#2*##~QbZpt&$0x#qR&-ef?8<*&=fJ3Z-+M+7I?nQSN$l`X(Y9VuSGt!;N z;ILmTawXNI12DdZ%q@pa#P8elTaYr3`%_{ikGc5H1PmRiIl+{f!i-%hZQs7keQynq zo-*uJBHD14>e8@I%sTuo%IG)ST{zA&THjs0t5(`PjAyyL_cxntiTYS(i7L>Si@G^~ zZe_mW5m2|+_Xd~K`uGxtb^okk(ybC^F{o@v&FFq$Q7F!$Tp+ES22NwAf-Fmka!%(b zn4kp0zCV9|Ieh;9(h9Pdx5uE zbv8H_b+KkRpVbvToq9XOE0M^2#jTi@$@yHA9p=2uVCz5=#38ME$)7HUo>Y(4p4wP2AfA&6qb7c7Qn8L3_CVrXI)_xzi=Q@8jS#sb4vx0_!T zL)gv)n0ZeHkh+83dH&Z7UVrv+nqzif@~YVUi?V+)8L9t|YaLF2oI$BwNjdZjW$JMO zie|xD#R}D`saDxoXP$q6`i|ZuWld@%N##HcNT-c#F6hm*q7`YS+@0or5AI8!Rkz-1 zOk*GUDwCp+dm{zVTG9?qW5j^V@0g8wDe=abEUFNr>P#^xdoO57u}FepV!h=(F#$E< zrnpS%tj|fk3u>%HUr(gnR^%ZEXUeKJr47dlc9KD6&Gan2iv(ublGY%XVhDfLO9BQA zzeH`|q>2zrA2AmSlWWTrex^zP9HN$nnZaYZrHfV<885$;|1VuoJ>x^DSaCj*L>E$F zF2b&O1tP{J&~6js((i$#bjDGDF29Z11_g+Pu8q>3VI~2Ex{aF-eTO7 z=Wa1tUx43CJV@YeRX|OX0I0PHj)6nWmi|yyI1DG>Jjj}Tz!8S9= zYgt@Q5HKqNBTn)xGLI-B{cD&@MN7?y+JQIlD@il#`Z;IJIFaE${{E==Gow4%$o(xY z?1#F%i)eZB#e6O7w+(dx(>0S>mk5h2K1(>LD}={dUEZHcmWCM^oA{!QZ@F1gV5F)mctykrAB}Z>(HL^yTzFYOM-K2?9V`6c#t*Yg}5E2=-xKOz{pIwka?xr2{ zi!QSTAo-D(WQ~>|&3t(T#{M`L=P>@|H~8EAxg>)uR(^S@%*TegIHz-jcVT;uM5xk}i4SaZqc(qK=Jw?kK%nlSE|Dm2&ztracIfhO zX+ynmcXR=SU=8{>%sXn*bItSmvS2Mhj!YRfdDFU>6car@We7x+w>;AjvN$e~DTA__ zAR|U^khA8{IRXX2hkQ(WpdsBKcZyY%>^~2*DYf1EaOb_dT>;Zu_SKk6MTjX~so?!i zAw$u=OAOZngVtPR|tH!+FNSAM1?G|4=g4*PE26{x?!KmG3++7MF`Lc zTm{Wm|K9flCGiW#bZ;q}j&|_7SVC#-;VYBStlW{__f6A)x|M{#U2V*kT1(*QW&97^uK(xcFb+-Tj zV1Qsb(J?v6iV{VFW!tB2*p&+@;&j6S zZ(wek+Gjz#D0-OA3xm(3>VFd_2@j#RCRQ#l>3&p)Fo2%T39hvSFS;@*iV0+?e9uM2 zze{YA>gfHkgCaMII77RDK9!+iZR`Q8G-d3vbRW{`1%MFdfUbM2NFDVZiQU*yvv=XA z{e!SJIJiE<>`RYpZxoxeVid37l$n_0S1iI;B-Q$iZnh~`QSLz4^}1KJH2a;iuY3H4 z2<5`Gwo&V>^mvB6kdQSGURHRPRp4$lqy|l_+OVkm)XS03rwwai=EbCg4ObLGyu6gp z&NL^UxWsLg*HPXg0~fwo#^W`BIHzDyw-Y`n73~d1xYV@oi5ywLOGOx}jhJ$wUM5GA z`Fonh?Xi66s$1Y&6%Dk4=2mUB-lU9Xk^!y7Ba9Wqt_b5U?6Z$WB1^pPSOF3DY70_W za10s~BsdN{II{TCuc&CZ-GJ{pfxN=Am=mQ2bi1q?m*H1QE%AAnkLVkukQbMHsw#@@ z&xJ^Da(7G4Xzhp#ahg>CL1WuMSAZv7wn~GO!Il@4g#)BK&{RU!GFc7q#_cR;DV?3csl9nUGJ_0 za~%#?<`?ys;YwFG^H_tk-%F#@1GKWKYG3uxY8CN7=&LFlw$keB{bM7i`mQ{zbQD$u zmr^4|`WjdXe0>ZG+ze+H1y$wkL2fE{Ey4XKo~d2;2_D?*gH`$KY^$n1L2Y)43?@-DXFI_5XX+?dw&{O)>_KNBAM zmk-yG8w)fyI$7~n!vCHc!Te;;7^_@rj|N?uinKAd&h>3@{)t=CK58h`)EnL}?}r>B zFQfCan0xODG*pZ%Vc)j{>SNCd41Ilk3Fma)e|vmQvji~|M(R)tWuF8jQbt$T{d8_P zuPdF2D$!UzSH3IUM%F~64~^!^)WbZ&d#zfHl3UQe z`}gQLN$r(#PxwXVobJru&YdIlAQZ?rYmXpNh3>mt102DzcUe3r<|39=SK4dvMZ&+w z1X03^enO+ezCm`vF78iu7PRsTT|7FZr!0@47D~Zh`v04fQsqiL9U4o9HlM*m;zCz! z>QrqqI<992g;IPhm}(<|?0fdioEtf|b=Ox?(q6_Sv&w~BO_m?8Z6zfEO+;3+POWi`Ly^xfXC}p~PVxhb zvFm_ZD-Ug)&R7`p=#hJ=bR8?^+BNw<Tt5roHG5Qz!nXuGfejM$QZQCK8#JOHP(xGLS?gxq5JafQ4$IRa2}j%=1_*wdBb6; zT%)9pyKB>WWW|6k5hyRoxzPBX)_@Ux_TcO-PqqR#3`r3&Y;tEgkH&Vdgu@CIu&UHx zy5?mRfzdeKObgH#Jb-jU*5VC4e%Yoj04vc1S`WiOLY6L%KmjIpFotsWIG2FbC9bDh znWj&TTcLL5PP`-x4-=vrxi6be7C;%DFVBVV8WCm}F46%mU=z42fod#9-kOii#;14; z=#3?*bbtSlw+O*RI`jD{iz?#8n8ziWiu6WM?$qbkek4iKv-DhO%}{g+JLc}}oX+YO zH1R^{O>LXS%f$^@lC}xmUOp1xGUatFhb!63eM3^P=|KR$qCyldTYDWd=>+*}GMin5 z%r7#xl26tk|rzC+MYRq2AQIQ?GY)zdn-&8fKJl9G)}i?jJ%B5C^X7?L)0Z*n)oj^tad>9!49kwKv@i6ND=yRoi`z~Kz(wK;0RHzGpw#T^+_c)7U74Cba>xR znwLx%)i7e{neRCj$-)yyvg&w30|l)CNd|Kxad^@wBH`=zz}8XEl7zv$*@71QmV+kt z9MYDzp?aHLOS77Om5tN|#Vq$MSe1r>Uf~Kg6ShD~yoAJAA`$YYR#8|=Tl*p@)y~RI zF<2U-`T65rF2>M*N+kQO{c)S^Kiw@kERm+!^;Lle*j^QC3jahPTT;70(R6!VmqtwlX16!UO8{Aul~MQ?^CenF zw%U9>Pc)&z=?vKi@D3*jwVc+_nb-STs2p@|uh%|UiZuZ|CrJ~}OtedtJwfW}vMwnQ z*mriD)brAC(I3i_ts7`;$bwdO=oT&K8QpF-B6dOPJ)A5=T1zEUL&4%fT!4wLY-fJy zZYQ`bb#)N^5RKl@k78;~+MQMixQ?Kq#u^_IIYbR$^FETEnea4Nc%RW1J^?#Ivsu>$=5L%s z=d$=1x`G)dvBPr=R2sr6oBU>dzP9A8fh|fSYg(mkTe2LTW?902_)u*c7FLqQl!Ab3 zKF~v!x(%@W?o4iFw?gBP-B}Ty7KA*#{^kEZ%|SVCOk@d8aU#ZCOTEIJczNF z8AYk{sta(|o^K}XUC#oQXuw^N04eaoowo2lC2FRWyHz{VMCPQ`YcJ*?*An|+KBJv2 zcX4yO%S-|e?kMBOI-_r(Yeo0T&r7{f&6*zI&{)qZIG%ztX1s={m%LtQraar9kL=8> zO3%>~wpuV3oMRM2R0~|S@<=3yghFL8`&eBJ826;KdN z{le>abJZ%*M3=93`Dx@Rz28c=thHcLtW6WJt{CE0Ngq+m{6lip4v%bZr7W1+H{{5$5)OXa_%csv| zGhg9I##5KJb0ZY&GuaHW=|P7+$x13pX?zHAmX^NO8J({|>(vJ{>lz%pAUZ>K(>MPec{jNbu7wy?mh3MLC`q~gOT&W?pK9G?TuOewOOCK&VfvYMpxBpQI|LGw*| z_4QCe@l80)dWrbgWdC9{s77H^**Y5Av-LPgOqja+1#(J)%QU2`tbIp9;wIxzwBFz; zc;4w<>Lf&pjbKcA;Q52*E*&BB0%kS4a9#iNh?xxUvEJRW&G2QI_V0-1ikVoi=Gd#n zLH<#8r)(c!iElxan8VVY2x94#M9xF62LW+X8PZEI5^G9T11}-Xje#^e2wIBO9ppi{ z$IZ(lQ0rG`g+JtPpD=QeJB-1&p^K>YbOZ)#+FB*yk98DO&ATXOO-)5xd+I%QY;%`M z@|T4WBsi)Hp%7&}0#A{_CV+Eon1^A61pKZF&8+w|Fr|U5i(fWZnU16bf5M1q&qX35 zXp}e+eIg2Nd7{Wii)H5?(zbW7S?!`%03?DxiUpelx50d-mmVYWpEO`u#FsGm{_x>b ztkyn->E|Z9aAUJh87bhH(90eTS^qG&kT(h$T6mMz_JR}Xf{aTf2-8A^lEsh6PXq2a zVwqW)0V_Sc>x6qHyRC$_Hj<;mgG-9T7>1LyL#-Y~=kcO=lb90V69My|q`ZZrVe1g+ z>U$-A`IVDdBA3~yDBD=iV9>;rS$3Qb;qD8$0dd6x@T~E>KvOg%|)wGTI^g5Lt31k39B&!Z9A$?^p5}# zHX0Gt91{tKKL!q1D)5gKs`o*d)X*D>q?w6Eh3Wf3?BW8^NYT4iEabLq{##baQw(bp z%Zwc!u|@W+0@y(kUi*q1cT*H{5%`afKl<=bWlC%O329H%}v{p2C zPp=Zc68eT$ybk!sJV$)mKw1#peoMHwY#22RAPb?rDAuBNUzK07{3bcGn#vPcZ@P{8i{^5_`|Mnk$_q*?Y z4DGEGPlODh1SL6@*rQChHdRNd!jACf;o;Z6{3hxsU^hk_kY-e60L5lfXRQPR)EJtE zt%Qq3u}uG(CT%gtLm)Jk(f*62D3Q*aygQoL6pG>m^~P!S&KxP*0noM}LsTMvQ(lDp zW}S=?BXPCTWMuxk$^mZok`)s9y{8H4%D6*hiFN`P8PP<^JPpxmGEPl{aXKBuh#(vj zguCu0ABnrl)%+;*fx>V;*_auODN)I?!jOBE8IW*t*r||UeG9D~6g;!NPd8!g_mqkq znRjl{yOpem%%SIu1K%Qp+^$nC;BBK!Ucv*KSO`SN!S_+|4BBdXFTG&v9?f7%+?LHZ zVp?5RSG{{3Qj{VI>t}9tVT*{~M6eKznWI$u=&>Om-CYM-91P}U&!{tardHD>LKa-1{*P3g z9FNgt>_B56Mz`M9)(LR+UM%q1E}D!~Yv3cMNlFpfyQYitv^EXHoB**dJ~A1f#Hmx7 z=vq=&2sJVGID-ik*w4kJ2D)8+BrPTvjol%;wMXHG=#U^j!exYWj|Z@mGBCO~*` z;u>(}GJ1N>j*YIRr@4~JP%i(LK@(pm}F+Rb3SXR#gaMomQ-57*#SRYCe#uM3M1fw zmX9ibT%moG1<6mp8bDFWIy+g#;YA9Yp(h4iQgH}qm=+gb&7KfT^&|G^D=u8QtJ~Bq;>*T^OHeZjeTKJ)%Br6-|hWn~<=5FZ8Qnk1_TqRven7hF)`hfQEz`hLcKT z9FB7n{{2UZONfL#=nl#1Z}svJZN0gJR8p|^fVpQUZ~E@ZX3zt z!i^L~$09MtY%7lNd6Z=9#VFK=iR$tyutL)ipW%6VoE0w?1)kOahiLStDE1Ut?dP~` z8lp%N0xZMf4~h+LMIaqIs4pmdMPXSwZOh6SmHtSbRDo8~+}2$n73D`-!!{(t(DPM% z($C>odJc}EAeMgrH9WgtK0V(8N%ZMu4PNTNsD*jx^K}giQKTo+wX&(*VwiaapeofQ zoo-A(K<>CmqLb$NsGqF7bFi}Hs^pkd@T);Ojk$}fd_FkLT0+p1I0YAXxVR%6Pa);CNW)30KRc>U#crhjrppeGrq5$1! zi3kh{zMxNEU}vw$|n=*o90i8dhbNS900m8?INX*kE<^*& z(*(GB{!OeF;4upz-GUW9z+*Vr5R_m{;#^mkky#ni##_WrF5XnDqt+h1yUYd?8klhR zGP~9_6eKqBB}4>Rgf~E``$$ zxMoJLxK2Q(K+>vncG>$$^Lqgor=CuQ}13{9IUr8TMHuRn}pEzboz~8&ioKb#G zuaMHP-AzlzIy3fgpf%E9;tV-hKm)PDhav>GC+01zv_7>ngbEO^3a>6&B=)C)pu)0X z=ZhT{fCOMxWMcgE{==6b{rQu5e?q(}=JrL5v$^K6*eNjuaDe2y%vkWqK+ujyh4TAW z`eOf~Ey2+gh7{$a40B8$88UVbB$r$Qq1*{n;9e&&DfEyWQDneGP0>7hmlH(vAn?qBMD*zXm|)Q;3n!Cu}H`tK+K|E4rIn;Re4( zqZO24vo|}^1IQg$eU)4A`Kt8xc9K9#w|K&U!?(ASqr$wqHX*~YYKlJm^PhbiR*w*0 zundG)c=bBI+MCzN4gN3(v*V-IKRQjF0t2OdCUI-=^vSE@EVh$DObu-Gub-aYym>8X z($KNG1B8f<-Z}gs&O>NGYrVjdIP@Sy&|G1~ih~FiM`L&q?iR5w)Ziyu7u9?GnZkKD zy+Vt>=nU0tu8X4mLy-tiU7Y68Em0O_6TMOt-2qb|VTUHHLenq4eKQTiN15K%$uTW^ z+|ZteLw%9hjq$+=fHwWq%#*Ct`t_vqZ*@Q>1Ndu|g2yfsD=kNS6(xj07kd*W7qcLA zDx0&AXkL>MVPBk3iS*=}h0k!Rn?M%A1-Dx4neYXOgw+PE^F^7bn{*-h+cs7;hpla+ zS#nyhA9i!HM17j1CP%?`j*U1ju_ngf1zV@An#zNzxSh~+KN-XwT{GOF?&pjQvUWDs zJqSk3VYqHuzzF!`tP`tqasdH=L|%QBM4a<<0Lu2Fh=sKL(niCP?vpi`_&em1-N2Oy z5n%QimTEDs;!!_)^Xl6-uj6($%kF4FvAdhEWV396k{0Udeai-FT(I^8=F639`HAig z9MJz-;>a9c1XIjL@Q$gJd&!8^Dw*BA3F|(NZ=S^Zy?XFBhI=EpSOMY?49rDbM$}A< zKmyI|_flN}KaV#boG=L7bRRv!j=CrY{v>c!8KSZ)&T%yraO@D>iB%DGRJsZfr%tV} z4t&+wvGc_aSyKm+$y++M9jFfQj2ba#mJGQTN5+3SMDeyc;dgU$(g;%ZNB1DUYID0p}cwC zbgIGixOvXF%6+g2=HOJSmGZfF2KooHG0Go6l#M6Qs08vH$lYSh;}r_m>oU%xSV|XZ z`t> zv~_WU`7%R;Gl=DcVtvD?8!$#u=+8;f~ub#(pL$ z*%NiHsVNoyjuo_B?nyM<+0qIzhS__g+Io*`4Z4dpf%u#~&qYC>9t)RCGXul2k}LCSWAMoj(ljy+1LMGHT9zDd|8(nNDnxzivKc ztI)BT8p%10j~82oKEEhl>`X)U^_^3X#h)xhL9}#LoSnWZrfdn5Q2dDlsHqUJ;xzGA znl1_~t1W~Gpng2wlo@kYvGZu(e|VBH59>k}fnfEy7(XXUJZ{ch9+Z!_;r0iW!ev#w z)~ww?|G}d7ZbfgEZ>7^#FLf5)XJMiunjtn4^bjnDJ&1zAsk}>%($ZS1YyZVSy-AEZ zf-E`ApG}A>pHEl}z&&V^-8aBEZbjZot7jZ^qlUplIQPQ0Mnd`+V@lX0$LSmuJ_|@Z zfH{=eMetDxFq;oS+~}WG{A4&L1yYy^XcNItVc22CVA5Gx0nDjB7>oyGCOI(9K$6Yi z-b&REEvdS;A<94r@b8`6_-pYjScoK*k6f}nq(~F_ecKM$|7dh*CRE0D3WrfVh$EQL z8t;er#yxAj4dr2jn>h}W`-$XSESp(y0t5h;_~_gvIdKYoYUOX$ozUr{v1u9ZDc^$d`mvFd7RQqfPaNptLH4 zV(mPSJ6z`BdbMUJLk7G>@o16f3smobwPSzLIZoT(X7D*=Zul$u?Fm=Qa8OmdnrV*Mx%rC*FropMQA& z{`cR%d-wjc=F@Gp->jjKggX_^g@!9zQzAdR42g&FI6E_lAeZ5u9;iMO!F!a+u4W|1>+4-0L5P&N$8vmEc;tH=5A=`mziyjrY|KB|}xFuJm5u`ga7tn(KWd2L*Q~f8E5nN13d|$w8^0@y$%u&Ow%KSo< zF;&W$^u{u;kbvBsfv@1&`T|(_Wp%3UjGWYzu_?o{Tr4w|?o?z~iNiDuh<8pxYrO6S znC0cM(O@&JnnTtVvtH#-G`59~AXODv!4ts;;SR-ISUXfV52aBsQV<-?qz|b)aU5pM zRj%rr@@@oZMaH1#t5PC-QPdo5%r{G91sui)Ur z)p?mFiS(z-Tg5U=qhz4Sp~qo-5DCP?tJhCaV=;#=!hq-!XT)d&iB4WKcxp*S1QWqd zz9jF%<&54I*BV{e4EEeG$05{V?vzln^fqaWj#Pjr(Vgaz5pwpIzx*~rP{W!N-p!%mD;&cYJ;EoT8Y+oo@lhz4Qb-KTq z9R%msX{{9Z$BU9KOXGhq)s7T`{wizK8lRE|Cb?ASYGo-y0^nk`Nt!Hso3RWlpe;P% z>CNl9B)IEZ=+XhiX&GQ{5r*^SQIMHfAmi1DC&E|a9;z-8y*=KmO~#{PDy4AjVD1rcpx23CKlFYHjDj6NCM`QXDYp!(l|Y`mt*f3(JpXBR=`m zquhl?EZrIOVR!}s#ls|&AIJ_$a(NJZ9(SEgDs3k}&@^6OydE}pJM7f4vFPZL$r`i@ z6lH-Bo?UBVjXDx|rAD7lUZ)Wp|I1{!NAw@3%3{zd>0W0joIP#piaejKnO|lqwu3|M zWb9g*rsF1FOEc3P7N2HB0zIL89eb<+7RT@!6e8IhqxdEdjv80;z7I4ap6h;_qn-4G8GGnC#%vS^Y5 zYQr&PI`-1Rm6PD>XkuuF;0BHIvx1m(E9a>kg&h;hzLPy73J=%kXfWftEKWvlDB-A7 zgUv3;42B+az6cT7b+(wxe%Gtruez$U7Hzx zH`rGZ8hv6X)r2v}sJS7|?^3VccC{(F_<&CmXTZ}9_+*M#bHEAUpg;3qc=-3JW^WVu z4Vy+J=PY}4nif79m5PH?P-^T){>jkf^el7XNtZT*-lKpqmR}=^ zZuXOFW~E$Ln|kq!M6E{ip(o3{_^A4iXGBXux!s)^mv>!)Fl}t&zo~P0{U|wa=OOP- z`CC^z*+^Rxx`m{DjQPm=*yQx}Oa!8cx~Svf`%CDtxtw&CxwlDsuj%+?6!lsu3`23- zumN2nE&b2lK13R_*H7XP3Y^xgNVf?(>eo+W=;2dlD~n&%3=djQITg5c7*?IB?6RyA zvQh<6fl-p_&`99@v?AE501E67Q_`}<-)-HW#WAF>FLA^cq976qYuXnju$Q$c%s>fv zhPe7%j~tZ{nx#b zlf$by_T|j6T<+~ZcT;Epu!LanN28=eV-b;)DuE7Yj1P-LsK^}r0?b5J6lZ?=8V*>+ zQn{`afo#r8g4#Okw*%49&W9q}EHm({s5Ze2*mR-{p~_2ndU_($d2Fk|Dbm2~SWAKr z@*>mcT~xFsrD-G*`A|3;fMhMFuyx{c-%gx@edHr97dHV-DV^!In9X6OFY9bgH0CWJ ztJlq{@d{6v`#HEgq5`#JYAPumu?Ydx$0{PC-kLoTbC`2RXSj1cK&J{=LmO*wT>Z`u zpu3T9!~u4MRM_&su-!8h5odB`G{-(g{WLask@JomsK}Y#yreASH``uYvq}?w0}H8I z6EcEnbl{g3bqZ3jv*o)#{rKIFAKrZobx1GmP~>)}W}td0BGPT6uKXt-e_?ijnP496 z4frYuPnuE~nFQ}3g({mEsr`Y>WJD4-)MXsR9G`9t_I(=s)<{U3UC4(eIUHgmR>jfI z!9Vgz{39u5vFZcSPuwN#0M`0E*ctyq@GK+FWhp-XqU$*rWxQm8Jz-SUm33H!1R&N;k!!(ND4eAjF)XoJ=0gwQ%pL$sY+La|KqPXp<|u_dLHIvcu^>*(#% z~K4N$3=PxjRVN z9vw09NOCBY4W85r>um??2i@dxpH7PL({_n<8}mt2~}{ruM+75c{$c} zQ6(Enj03_r7j3(j_jWGI21@8U{7M=Wwu^Oo9@Nf4yS`CejkH;gL|p;9CRWSvD|6`h*G6>LAZ(Tu&PM>nz0Kc0K}$O!Nm-_ zGbqgcQ_DvZ@q~}ozKB;^;!m31jkp9`8egrLi*gayG86nIc8m@2FiU;j?V?y< zai7}$s36~Q#!=xpy2?Rmdgxx`)+a{ zsB#bUE^T&1b+HVI%nkAA$+QWU*dm)>7R95uRiUg^08&7$zq(&zYCOQNlJ@htB$OuO zcN{Q6CGnYZt~HyGN3nCPLczRxHOosPbEin(`%~w(IMJDEO7$HF*_pd4$_bJSltxIu zt07$?M1Nj-&5Rm2PJ6F1$M7NJAr`l1)65ff9LF3QC<`FgaB$NA_FE6|4jaAjKEnCJ zWGc#w7PB^~LJg@l&8&Gc)Wp)1^x65dkNNJ6pcG^LL|4Y88au3ytiYR;&}yv5L=T;= zb)<~oA@Tw6uh%T?MHe>@GN_5s_URIHtJ#HyKKg8ACHwg|kFPJ&+s7!t{K_QLf#m(> z)x+zDF}_CL`uHl&=@7`m4K1fNoyNBsi4;kSgCtYuFZ@lL0|Qm1wE1d z;kFqmc?3MRk64vTnd`ORj;9yeOYU|OR#@1<;NYX=Ajjhh7`ydW=$_g@CWGEbwY~QS z<2pdgPdB(fSx4zlcBo?OqzKwd59`VfnM)GZ7&-z)5M{1KOH*V)sX`a!#95L0E87zl zt2;oCER(2@^NsYe(g&=ESry(e>!LA#{Pa2g!jMm#q@c;v+mY??~tD>#EM=vP2vMvX5|;SNZt-V$Z{Q->3|=D=kg*>ZvdH$k#Ah0wAiil4#F=AD9nbc&4Z|Fmb{L&x^&fh_$m=%& zt9$i;+cOFk(C0sXAJ!j*vP4tbm)HW#2G~;6(OcPiEGI3&kQN|0Q_vv;!MKr)3%FLL z%DThv9NZt!kL%D6EexYKS^-8Rs+U(QHk>${K8D}blSgNizG5iI_`bmUj18x7AzjL0 z-Hn6wzb^N&3DWdMMdagpdKu{JLS!rnN)ZJd+2<+y8zrX&&^sILTHW1U!Q6*4~`+PT?4{8gB2ea0GZwGRDaiVNm7FRe*tf9(Du zIFB48HVM6mP0wbatHQ>?nxKAX(14C){XCE3fB5hJoB#4Z z|IfaB{q+C*_V1&`>`Q83Op8o6@fm+0bFuwR#>QKsw(*NS?W45THFLx`3aQ;)(?E4b zE3YB`<87vafVe1yoV`!VjS_csP@c7c+3GbJvdCt2WN50wZN!8rZ}Vm<4OoOEnIR9A zO;63eoyl>LW3sJpHvhqtuZMMHzlJ5-LqKzfwv){TzGtsu2*a0PL(?F% zTo7)K0IdTrV`Q8yB4xRR9=_^&@TRm@MgVN z9NjHC=V4zooQ6iwNJ(giE*zO&;H{XFqgJ)-GzkhugXtoEz|-fXn(3r42t6GmJUw&F zhsLn5s?=uXeMKV{$%8hh3LVM6LGCBXC5Muk0awG>?I@Z*4VS@T7e-R({JR{EVYw!1 z>^MM8nj&au&44T&ej#(~G{iDnWHeUsB|V(ue6WQG7)$KLnT#6d7YL+<%!uL{?9BQF zH`d5H%Q9r}`EHIj>>AD1M5E1@p>+ZQ@{#pkeTEdmgC(?rCDkNnD(N*EGoU4NFwp?3 z)8U6aSgwo4i({-tlP!V2Mw!u3qt#3?2?@8#FwIsajmrxOgL#frS;C#Z(&g^x^wrCARgV`!L0{dSATuPqwTzu{XI zkr}gCd+0$hs7f*y^4h~KG;-^T?cj!h*#7a+5f3ILo&^jUQ@!dMdydJbm-@!8_$(o1 zMq^a9vJ;~1O6Uooa#_lRwdw3`k$o+mMR-K?=bgSCgVuP=%E1lNa~=g|5pRwVqtRWP z(QBN^=@B6&eK2{y`Pz1t1oS`xkC6Qp{U@1TqOJ%PWEryF zLe!5aEH|qWn!D%89YfDm548j^kZpp4F= zUtQijO$t~ayQfFpX&wbcRZOSK%qY)BDLzUZAz+YGIe~|_SgBKkO$Jz8#)`)Q_*1OU z7=Vjnnc69T7v>;t*&A_K_?a_nOrFwb8eLuJ=k46qC#Q?M)Ozey;6B(;qp=~d2yD_6 zo9D9(;O%Iz#;QDv2N3?L#kMS`D`5>c%juJ!SWKP~9~}xemr#SdH_EoV01PeM$P^e} zH(X(OHbjx|60QTKYXn&k6DlGmWGLhdUoi|l%L={^Xl0qhYk z8o5`eVcZUj%k4lJBB?NxjR0Gq$;4_02P8aG@yfW5gd=rD!4F3yhmgH-$zh`MS;0TF1UViQ~8qC%s_`>JNz=0vF7ppU`Rb=WM6?)7*HDg63p-@Ludm#%M@ zeGf40cR#!j-k(V7>0nyj0ci$d7LRW3GM(#gR#*$Tk)|k<3YKHpF3rK0^eJ~L-Us1^ z7(#KbxYyimJb^YulDIDAT1W07yUW}_=V7c7k0s4!9Kz!fE6}LqkIMISBa3iaB)JNk z3$I5y@Y9IE$SS}NI7-gE&+^WNyqDD_F3JBRa9no%w8LY?bw#d>Jt(%q9~E!TIn5Ni zT$(xDI`HylyQHjEIpgBuE{*fK1cMItL8p}B90y&Vbxw;^4nag2+}^qtGfL4M`GcFg z{z+w&CTLY4f4HFx4P|l|fVeP9q zcL%03=C48?(GlS<2a90{G5?PpvO#AraKUto;t?Yr6EUuBhk?{&Ll(qFQEChV`B`ip zdiD;J9jt9OBoRBKedhJ}B;Fw;On`$T8Q+iZ-oO9&@!gLfG&#mmQx1K2|1t6~fVW*l zO>Jk2tPtU(HBqJAj2}LHjM@m^pROA$A9it2q=400TK10Ky5O!yWyvgKY6IN#MtMwT!hFT0QWpIqJoPM5U@EdDGBKX>yQ3(;CJ=n0FrtonDx`i2;bW!U622VtENsPLv3e5;n7$beW zELUYVyL>#TbxK3t=iw-A3|k{AXpj{$_DfW_0PA7=bGhrEjM%08vp zjjm~*_87)dQOJ;9PSlAolDT7y0!$HQ3=F0qhkHXRXr^`RjYhpWDSkYTTq^Wo4Otx_Csz_> z4E<<1064{QRaOL}Y~p5lxJ0SGez~4rE8=l9$meNb2*f)RHi4DQ4Y7&-=C(|xGhbGM zH_Y&5x8+q*MdmryF1UN6KkJ4euBYBa*X=Z^spGbvGtuQ9-u9~#V37~eX2fB1_$roe z^5uzzXQ%&fPO;EBP-|E=JruJDNckP|1c5|UV@3rS<|DzSQn$wKD%L@b0w5P}7Dn56 zqS_V`qD2^)1{CV*bnN8&bDFcv4lE4L%Nn_aef?`!n)6~G8oztcR&b71^9_EcARUjTiv#T`hm=_X4L9$i91plQRLtuFDb z^eGr+G&T*DB{$z>zcnxgh@42aV8m8$f7j7ZgL)(AY{Rvdo2r^zpHb^TJ2ll#Ly^En zO~=VG@Fn(p=g2qtPK*>g`L}t>q`h(V=K6um+u?OW{dfV>^e%;jr|nJg4;4uAY6H&J+Ee|-HUh}*Ys zE@1%r^)KH3<*&c_<+o3-<{=D5aY8Us$6{Mt)R*Dnkg>-Hzne8rO=c{UGrv~CJ3!l^ zqC@aj9>vn;73~5g14?u3(9iJymk*Zhq;5>Y3r7HD?3I7TRdSHmkZaMieOuih+i+~q zHDP(R(XCHMuCF3;-k7Tq)vz4NxVkZS!TVGG?D9g}1zMb)OnYnkTDcxA+#ByjeKAE< z#K!$bq<}st59YzX=b^}2?W1a=++!I_Lerj=`R)~yoM<_(Xq?{`2|=Y!6r$eQSiq~V zYdAyo4waQ7(P8k~%v4YM$jedw9&0Oq|23nx<#O+HzOJ z=7c7fR^}?w09HWIxxrNVykuh z6d|L#HnZz3x(Z~63h8khH49KM)LH57Ms&^d5YerzrSoDC6G^^WwRj7l+E^KN5!pwq ztBG1K!ZdYro$1(Z)ei#!b4(EmT%8qe$>0cUA@0M|iEqN;(-{2;w+=onQ-o;Q5Dih$ zny9uR=tRm{z8hR&bdlEk@tMaNOJUp%DbcmxwrkK*A_$w!w_WKCMGxZ{bo+9 z*d~SySParX3EAXg(C%0(cr_%lwSmO|+J#)9cwbrH!YQMog|eH$F>uc8dG z-uUD9KYai0{dYgaQZb@pH!w#`)nNz-qFdMNEF~nq- zxyg7g@2_vLJC9Wn)ool@k`)X%7#J@;3UXF&7A0W@L3$JuQ12m88R&Q%mt)@2af_Nt zk>-v_@`TEYP>IQCos({V6KIh)^qEPMWVwXlJ~v96k=ia5lMyjQ)I-^c)^%a+N9wT{ z=^%#Ut7M4XA^J0y4IQRJP~*cT?-YY(DPf5rp%FBtvJJhDkH89jjJUA(?_>Omayk&U z@hO3C{Us*SDAJ=y1*GBZn=VI-5ME~%n5f+adkJ%T$k31vKl}DgBw-M(^0ozSR#a6O znVKULZJJ=42=ldN@oY5Nx=Rv<#j{%R2doOqe}} zf41%iMlsFPhFN~eLN(~*Wb z=cY%^+bpyTwbzGl1PU0?Td+kr+|=peA&rt5i(v@rc4w(Sl7`=u>6b}3EX2F`xoSi#5*egAnXbb1rqOd><7=l=rm-Ofuck$*X%4!PZNFg zXAh!nvaa>Y%%Q}40#qMm6-`6A*$jFpa$y!zJ38%A&F@}xqbC@fY(f*#o;XNqh^qh; z03m?I26oHz7n0NJUu19MK zdEbWydc~?`5+e0CF<1$25ZbI`>*791UPENV!=s)9eVCWf8fa0ghit(j5A}d%&J`*- z&ewQ%zVOv!jo7ydO&4Up+^8DwK!Kxd0Yr+@!)OVcl7|x5RT;d5RkU{K<%TjqkLJhu z`t@p>!(6`avRWpIGSGr(G>2S?UiToROY05wecb`Ac2oqw>P4@a;G@FyM42;9aP#KX zt8c%36I^D|6w*O%i+gD5csZe(f!ol$feM^^^kn7L#sq&_vijAaSsV=Hib4$#eZKQl z?y?0KRn&^5h}^!5yP(|;&8N@Tm>$HQvo#=+UcTO*4YygYD@%8;^0Znp#$46)^eD#9 z_RLDu%gm>`2+t*~Oi41^Go@C_Cn@UciXwEsYWTtxbzM=5Dpkem7xSppCe%ltSHp>HwF{Z7a9yx|rfHu>!!4Un zLW>KE&^3;|aGHPCO^@R02AxWxOT#3gq3A?NCnt?oZ3~JYSQT(su}?mDYql^A$v6w# zMmRxB8-UA>O6iGHvAOvY@vw4W489wBqm#SOmm#$sLll8V66LpU(mH^!tVn(hRccr0 z7(-YXiH6ubXt5_I?0Inb^)L^8tOx^u=@pO)YShKR>tLJy=Jh2o zM6WL6+t>Q(af)(Ia^Wat#Pk%mQvGy;L(Jx>S9Kca1zpk5k+KP(PlkU8LUP+%~Zpo;=%ju35o>^~!?&qSSVM&8eHB;*F2wM8^ zzAmcu2^?RQ?@P}GWK4AibJMd#rzB#9F@u7z=IHai*4zY2gxYuN?O z-I4;!aE7Z*ma8E)BvrMd+!A_iU+EsIPgE=^9svdHiYUG+Uw~0d!E`=&!O1FuoSJ|K z<2VU`P}wm|<5#qAZC|Vs0?V4>`=LGjmCZZ=GEKRui93cMEHdM@ZI;n|L%uB z{rE9b6$_)&th3b zVEEK1=C}(0!*CprF{G_QO$q~$uPaq%IP_GuSUpQgHOyXE4tM>_elU0J4qDH>%_0b z5IH%^RbgX}M;AR%I6Ri+rvEZlw6be$33PJ);8DI-LEptjbdw2q**<;LJn}hgLxBzo zw!@pI&Il#jq`YeWGSc=cT^6se@(47s%YINq56)2#E0)6?dIH;8)SGO6)&Oroog!T& z+ZBp?kw-m%Nl}AVBjdRs8$*tpOGRD30W#t3fQP3*);k5gPT z5GXpz`K(3b9l7CZPMLUCJOr|Q+zhZ;Nw2kVMvFyJ@}srj_plQSwNro}b}z}VZUD}x z=m}MUvdJ)8tr`@4q%k51!Qe1Drqn2s)~EnHZyFadiG-2P4&fcQL0p1mFui`lN_6gf z#7T9|4#j;Ab*g4Z@LpfcL89I(#l%e8iu4hVS4G1Rqb4JYoT*=9N+%B(&fLxQ6>v1R zZMe)ryNJb7Yr-|;JTQT2)T#zTI;kJdk3n#8l!H!XaF)3CkT&KCmL?~p+j7&&4A$gL zUCX=}vnfTc&EA54AstUNg`-hiHWNwgt36DE{NWywDu%fP1~VZDjqA(_r1cbXggF))YIbxlQ4;@){at9@R^j zWVoG2(;(b8S=+i*7d76lgw+bMQl`B96H08oey62(64+ zxQ`_mU*adNfMgkH2t6JRzI3;YHi~A3I5_Ge+85z0@v_?;?#$Cbb&SzlK~Y)QBC9pI zGM71h=ovMP*TAyZ>IbM1R^_%FW&SmyhK)K*PIp~33=(tzLM&=vXA#2L4UCW5OF^a6+h!t9O5z$WQ`bluMJ_uXK1|!&zEJ6CWzT?e)}_?W^qUdOgXyVn^!7M47kYB z82JO9rv96!un;{(;MnUqki`mTfAcU!5Sh>K;w_Y=-pHei5N8k`?SmZ*eJn?d1qYQH zCA;#iZ~!Ytxq4ZOpanKXZcvU%0tMZAEN@DKkIRdH*Bmp!^ES0%omhVifQ_nii4Jd?c?3@iG%3cmc0CfV=5~x2nM2Cj7 z2)W?XdJs}k&V1!F3G`w?&$jQ<8cFss?H3^4We)*=L<*#Tbg~i(!ay z^3@nZmsHkfQZw4UH<}%On1p&9pI$wVO1Styev|m+5&k!Sb%Z2Nn#Rhg(0bGrt6Uf~ zv8%`_XI*W=EIxN^Tiv zi??6V#xm7SnxeKHL!^TRu9c*m2sltqmstp@7@aCZCYBPy5TvvS1)a_#>SVN?m^m0m zA8<5oS=4MHKcC{iNso{!k%QsDy3BNxflY91*)O#1aw`$98})CW8|lo{pXpZoV=3F1 z9YD=7PsdSQFq&(n%yY~Q0_?GG0Lo~xj)B&U^ilYZF=sE%+#Wz1%->=oc-P zv_OBcU-8*rH?Qtc^lO3xJFE~eTNXYAz4WI*3Vn^~GT4M7-XVg>-p6475C$T=(MymD zIgjV971Q$svkWwlK=8znJm_DbH8o$z?nDs2l5akUByN2B=5_ppp}8MrP(yn|5cPwO z&@kj1#=%ZZ$#kOJ|MUZrMS}>-PY>|E#=irB6 zMda6S!fYgcPi#a@Kozk9hc*?V9Z~|-txbNzB!#=v{35Ldt3|p62o+J9|{G`OXE)LcD-3 z+#4;b`HCjvmD(W>d}8^9DH!6duU7|N8p}}m^$&@o(QH9cKPbALxo=??CFm8Miog9t z9!0y5f>sUgHEP=!9}1el7ze^jS$*Kn&?8I$>0u#72SqMZF$^6B4%#cu4DFe4QILA^ za!9=$W03VpXUozO9uballZgJqlY5*gTnw+$OVev1oU`v+u2!q5a4-oUf!SgaMF8(k zZ4fIO7sIL(uVKqepXmravfvP85(n)rebXj9FiO?0R6Kx7#dYZ;(%_(si{KUgNeqFMD(*X**Tafo)s+n!KgTSG|0)fNVB~; zzu4~70bV93mQYJ~tGAQNwIPPzC)EQ1z^brq2>EW{jFp z>7E@$5od>FkPfWA-J=7GNKVO!TXG|+?|5Vy;;um&C*ZdVwOq^iL3kp3W6?h5igMH> z)H(5IeO0Y&)xyDw3hoQbj){$YVC-=n>FTZ{$%5ks5DAGMQY3QU$0fRx?@7YJq7Hz; zYG{R(d-LW=wiI(^RD1v#Sv-FwG)Be@<7Hsv3}st391B=kG+t{WaBq}+05dh3J}KG@ zL|$UyyUYYX&eO9IWZR()&Cgz(G~-Sl$gLnJHRUz~*^0Z_RTQ5gbVCuasRiO$*_y*lb5UOJ z0KLZGbCxlA_ztj*P~Vb#BQ{u#;u!Qv6#}K`+LI4AMh6sZHZAoJqCAV99PpnZ0>q*# zzkM1a4Ov8x1yCqi8#?Mu251Q0gcs{!h$C1c1QN(4WK#FvByavev3BE%-C>G8J1vC2!$`_~T@*r30Z} zCr!v5{FqGCwd^TBbNPW;Ohz^1M@l7ix0B!6JOLVzX%X2({5I<`RsyC>UR!WU2Xqh2 zOlgH}xTk@6l$mUiglgNmPkMhDdR(N0Y$zJmM@*dng^I$CjQ-JN_t^_PQqh0qt`Rf}&G7$wMEH>AHZpj#Q5gl~_{$F&W;d~+JcB1905JyBYiA;6B=%G9S1 zr#q`1T#RRHqGnR`I18+v1zS}dF+y*(Mzay;f|-D@xj3y1sN?9xyhOwJIEN9GxcUPR zF%TOVtaZ%v0g9C~8{7Z|vKLq23&`?&SWHJnz5n?6v#ZqilYb^QXS|XVvyuL^05rve z%JQIZEdpGDmnk;Kd*h_N%1|`<+M+btJd9U+rQo-Bx@E;B8;mV9mguOzl53+Qs~4dM z&X?cfdWtH_d-E?>Fw7Ow{+m%%)rO$JE&Fi2;V&vs{3rrgPL zw?0mGN4sxyCo8j=`A&u%_ZNkv;glwWJAqV)ISdQXW62&QKO&`NQ|KGe|-Pl z_aA=z^!eR;nSV6I>;@;1XSyA{b4H#bf6~EZ@1J%otid@VwY33P#&lBYqc8*m3PZB> z4){VCrq%L%D7_kp2W^er0W1lkReLF$G#C0!oh4x!K*R(r%e+)8XI54wpkZYOihAbl zSOd686Ewv^^qzv@u*;^0d!2-ho&*AQCgA``NFG<=MfM70z-*6PRrikLzL4UkEjV$P z6=IC|#l{H`6+0lcN?TMKGM>kC>y>yT5DnOx5z1tfyk`!&pU!}>u#3Tq4O1@%v<~SAHv@91D>g`NP}hh$rY*P|esB`3(t@?4N~Ub*gy^xE8G?8;io9_?D-F*2 z3a}5H@w?G34w2p#v-Pi=78RlblDAy_TPaaOdRttQj7joe`o75{8X*ni#4!B?fs3F) zFV`6L5jghw)0ZEAeE;LS4`FGNE9GUi)at%`anAeC&j#=`7cE*wqgpOXO5OIa6fZL= zWbEm|cnj&ujkz=Adb9kNt2_g!JN6qVC7DNYsbrG;b^F8j@BXL%?Qeef$3MM#dL8oi zvzGX);T5B^@Q~C?_9j~v8tMTU7MUVedoMx>INAfA8Zu)V%Wyc;N@J(@^(C>!`jymX z^pqC^qX2|DQ|HumYOXaz^o3YiRFEgo;t?%agQvi$LcuD8Hb6^o`GMMLAuqzB$$^1L;gVH8j;s05rmg{76J$=OF7@yi)|@C;+$?Y zFk$P!&kvE!)!|^EKXS&@fZ4SsbLMZ;2q*$8%459Gx?|!pID(wnP?E_~Y9CSv4H+M# zruPQAJ9o7gx|=|S#>y?icX+L;pTZi_d&Ru1;@nb2sVy2U6UdKl9S63}Ws&kmY^L5( zCbQnGnrr-mU3({@HZDIj7An5U@d0vv0xKZuCx&xCPR4Nz^xuG@l1#co>*>|ZG8^f$ zA7%ykkS7kcGef`@Dpm411cy^==>>633Q}YtFb?rI#ruYsBFsP9>RluoRZy06@<6qO zOpA~rpoIj9l5NebE5~Y!mpfo*Y}&BGu;n~&Kre|Fltcq#1ccF#+TjX{duuEoLujJ+rDco!%e8}xAiY^}ZKvEwySFC&Jbl}^c^>~Dz? z*>|W0W7dy%iCC&{!~W6BT1)*zk0Q6d?s>xM7g2RJs)yF1`uu(-$I-$7KsUHP49KCk#LUV~kV`dJT0}1@IH@Zezu98V2J`npZ5i?u1}z24`_p~88t=J+WU~Q5Dgvpj z(3QO}js@i$lLS(P4k2S-d=ivti&4bq>-Qip@SG4?BZ$xwo=uo@3SnWUfWJ8G$0&OY951M$~|>)fY-PiU$SyE(}uC zy*-*|z_H_8>I_N@DfYuVF-Jr#5sVN6@@5=loDkd)?pYnV zW@3ku{1oKS!Zt!5+mh+<2C0hUxi+X$b%D*ji|1AHFOW)q7_jej5=NexTc_kyud_2B zoDr(9YFrw*>M#x%6y0Fh1}r1LrAvr$lSo>87r3CK_M+=m-l*BAAH!)j#)*9~DOb}@i4$DXcR*qLMqe9g!JrE;ZWflWZ%EV{SZPqQD<+ch8_U*ogSQ{K*1s)#A>e^p67oKY}Pw{+|{jo511OMjK8-)b;KRtytHJ^q+tmdU^|?GZ7p ztHRfj{)0uogu<*$WUJVP1fO<`GZ`_mxg$l*+0)pWXHAY@g9$7qf{!0Rg+1uq`;TEA zimBoAXMvE+aFNNLB@rj7t&;Hi>>}8DG_9T-7@izsj*4iq$mc<##xedp!3C}-9L`ZO zQDXl|rT)i%{=?t=-QWN4@iU54;FaXEwx@o=*X|YL0J}|_P%n$tUdD7lC0I@yof&N< zRaFO?v?e?1M8=?14ELc72y1Y?O5Jdx7l+aqsH7fSeC~P-91qAbGM>!yNch#@JZO?s zRvpPUHky;@!6u|aLXBfMnJ+~3$|vD$>w{V6qQ;{6EUw9QC11T=_d48oQEI1rVmVI} zOyk~*#FdU@XUz!0C>{scN14AKCl)FRk#l~}wgJ(`TDQgZ0(k`1pQuKKA&kc5MFD0X z*&P}`_2g!1>^5z9&zMOGGg#XWnH^*|0!8Jt&kPxxl?*G2!?b}xL4@I) z607cHz3VWB$djfaHt3vS5c)Whb~He>W|C58a545!eo$JB7hbzT+)qfV!Pb0Zb#DlS z_?6io^egWYHze_Y-wPLmB8?CxpOm()Az2oyt7pmo|euY_+IhU%qEg82?(xn)` zGSenfxph7%qj{86J6$I9VFh5?;G}i9YiTxfO^5|$Sq>b!O-@Erw*X;G#UdcgYIvYn z7a`fPhfip0f}W0z1S3uevmw**^K6b5G#qjR3$Nzr#3)RMS7A+;6Yk7-QzOTt_Oy~* z@%U|r2&5mRbx($|#OdK<=IUJbfw0Jdb~sBaHd@c^QzTMY^omeDEjuBGuacF(aljOt9Z3p8hAm`?q*dZ zd5dJlJUFMjA^h9n6nI*;Kwv_+0}?PEVdt{{PRHLNnLi*S8RH6la*X7eh_ZWpnnPWe z6MEkR?aM1ieL^@*lCN6Mcb*jDQWO~R0gb?p)c>IqVJP*!be?625>=7vEpA7Y>)rzv zaT@qoiR=!8SMEG*LgR*Lfr?ZkPNM$!@G0Cw@~yVk-@Llf7I^}r@Un`|j#?n>OUtF+ z$woyD)}~$OuoX3!Ixn%R4Xlu6{Ati^ZX3PY*?oyDhgt!N=v#U|;&fd$grU9o)DHm$ zV)x&4{J4bqX&xTupcK^89w()re;B&A0t7kNSOA6IJZK4OxdL$yCC8$nono>qwt~Gf zHTt-ZVFXG02$xuuXxZgbv{i0}=7(hjT`h?xo!y{9!0NfyS#e#alN`E-#`d}6Oc_q` z@rrKVC|g|1R0{Hq`>?zrlB1lTOxz5O^0yNJLgArw@P*pYDN*Wq_eA~pWN2=vtCm}l z&^KSfjvzOt#Hi^ocoMG(MnJ!&rF;XpWym|xH=QPKg1JlseCBZrRo2U##|NxZ6M--q%Cf!^c+qbF~T=wQy4GKBrWN1nE|5 zxvZej{8r1W-ED z0VAGYF#V|F=u!KTxorSU5>6<*=rEcFHHf`mMU(D^h{pmicz=Ej2*5{~Lz#NU814D4#lHqAbA3?MO!aLgH)5s|E5 z{e4*QZ18xZ6?dLXgn-E`#Y1$|igv;Kq&_>l2UwJk5 zA!j*dKA%}jM88^+b48^;FK%b5uA%8Uvo^m0C+q}ab!@SpHI^q>J(YT0dBnI?PEXwJ zbW7w{zb1AGa(N>BaV`~|6aCg6f3p1Ya{DkX;IoTri&iklxuGt=6o?Iw%XB(*$Wu$0l(KyS!Rj+_A$<_pUVnl&@@I$r)X z&fE-K2crsHju(M<1`coRL{u?=F0=?n1m{am`UoYbZ=)MfPO6J25*XiEZC3g*Ngm*z zkV}hXTH1ZgZX~29+G`>BUy=l<8fuu5lAxWe!WC*Z4CnbL<-NWJVkjI05l0p~&$dZ~ z(zoEk23rHcwGsHKf5|1JH`t_?RX0&Mz3~4aU^(M9q%lq56K?nI5WA@{xh)Mgb z$zt37>Gyy7!*@SK={|oEbx}M>laUrRgE)!BXhR*U(QVsWu!EC)3ih8)wiN-CY+0jD zl6N1{2T6AWDuEG!4hHim2=TgI1*kF8c5{U2@WCZ^qLOI^;P<419DCuI-n`bzkwCAf zM^OSpD&`e*JDf2=cF60HXBnjt!bl{-X57wJ8RXr0x-^?siBSw}ez@WwC?w%pZxadn z(JT+3hH$StP$rCFOL=2(Rz6PwSx~FV-}%xGQ=!9 zLDK>c#MgQ4m}hyb+d7+gv~*sF%6j`ErRqhCyejp@kChN)*_=(5^h7c zY@1VCqdN^=JD_pTavTos&Kp4BVKlaV-$LlM#x^#GWNdhkMSLmrL5Cg%N$AvzOFr7P zx8cl!)={h`OZxgEu^E{g-+vJHN8FB1P&iG(98H8!4Fm0XyNX{Lhbugf=+Z3B;zH4U z65Yh8z+1LiHuf@!N-iLIaLq;!C+`(pHc=5O?{+M%DFQ7^y}<;ArWEyr>r@AIQrclr zk2DywL60k*0WIv|NX0H0ZIL|U4x2atAv))m?xRMu>F{C_AW~(;ogJ17pFJcbDiXO> zqs29)ZabOjFw(gxuY=j&T)p!kxg=R8&-lvZYaPb6X5l}w0BLYH!Yqsex#@1(s_8c8CMP1%WtQ}y6&#@y1Mgde=Pf1-Wxt3-ia!HV4WFlk>bQ=-JqJ+Y6DTlRZv z-w|64aouKb9&p)3Q6T|!b7amVs3qa3ric3jYnK|Gob;ZA+6EF|EB+=p6q?erDLB=E zULkLln`Uze7#uNZQ4FCdJ*ui_S-dXfS55*p00N_}+Jn@@B)U5RJ}Omg8K2_K7Brk; z#I^t~m9p|+o;DT(WQf6a=3&XEZ(u7lJ$c6d6bAS_&_yH4&jY|k=;HCO?JyLLTn znhyQqyN#-7e)cUdfX3mhA#MrCl`U(%nerw~Bmy~$#33`FZ7PE>x)^+o(O&UTyF4nU z`@1fIY6?mb=eU`|K@|8k4OZ2pTw#$<`nwSg z6YvaH$Sy~6qZGC!Hh)y~kP9o(N|Y*NpPf^Pm4v~+DmoI0HT%g)vUVQ`TSWLLX$~15 zyU1QQPJ=LLVl=!tgK|nsO2yy^r;#`sQlJ_L?=G`^ zjI6>O!DxU)Z466{FPw?X9XZL337Teb9r;EWr!a2%?Ksh&M-Cipl>S0zu>3>=u_1c% z&MLEy4CRYfBxbyfBS|VGGrGcWFv_#hvOMreq^eZ^5ODzovMorE+IK&`j~jjY^d+#P zvBiDj1c8zgQA>W2cCZ;ekqG9)pUn~%IHT{r{~FDc!JZmc%7CKz^@XdSW*$s;@z0+Yvd$^u|F z7X!%|F(frDy)j2F=@gyqWeoe2+%}#sUOj2rch*I<`IA#g%w}&@hIP-XUFAtB>nR$OLhavfW zP!v1)a1!;r64;9w(bydIb1&neghzUiI(@WbpJ)KkAKQKeY1v2DTi6Cmce z9r}FmltYCn;EzF|OfitDktoCMfx0C^9};V+i!pm1Qe54O8nQdXof$jKo4BdK{@nZ& zkdLw8RAH1Lj4`Opr@{ECcU2K~Y_|P4BuD>!MnjZgeQA)ru8;?t1c!^62ZzKNB^MizYZI_n)BWYrK6z?|i- z*uu5Ma^dkJ)W~I2?j!>DSUnX4m}y@I?tPEYv%XixI=O;Pc0*5Qt>=fRZfEP^Q70s! z@6Gt52;9fHOD+XDt<4LJ9_EC7t<0$q=QAAQ4g!3=EMZ1L!zQ|aP=5LZR42W*gu@`H6>k>?Su83d5Ulx<`j$o#F^7r-2tpPiFpY-Lm8}0Yu5l^uYv4@vHgl zB=#?6aFaFP4BNxl1+JDr#m4wnwD^#mL+5%h9m-4&a8T`91frm$s6oQorpko|>6-wh zE}~PNM!FWFOpiOv`KfKo!GezwoqmHT$1lcB7$nSwjA85@s4qN}laV_~veV_`a2BPT znm(%eUVBUc71EXddGAyx1XHlfpXc{>3Uxf!8y8~U;zDk!G7u7#tg z&NX)Z^a-PiBzPtrlQn(8SP=23yZMPE>%}vDZ5s&%WC2-ZkRix4vdjdrC0M2zqRwMlyexK&dM(t~I-?nPErc7G;G| zCc16s3j?PoN01$Ny;n$t-~o;!m4lTtp`yb4CH_+5>UHGIq6((~={9hTdvUAj+3ZNr zhZB{b97zBc43yjPfT5CF{k1-Ac4sidxT8j^O|Tf4sZfn8d(?7+a|Bnj9?}qDp$aDh zuEkI*r;*KYQr8-#bTK|F3y-;2xKN`@oh)O4Iul)Ov#XY{M^Gl5ubxKACu7G46J3WN z{xVK>l{ay#a8kv3?RWqBr$7Gi?uQQ_4gT7&RapeL1z6Zlm?7Cf!Dh#Rs4fcVf;@Kw z`=s&15R5`tAdZlA>M{HTFc8>!j&Yq`E$vsQX`||a>f~BX)iHdsy}a=(+%|MhFwzHs+i*zX z9dSp+M!;kYZ6_qt(uC}ZBBLVt)VQ`g!9J9ZDnj&;VzNdAFp$%N~j=k-$QDV7pj~53i9CpCgdV9->duIK)+>8mIw4{;W*cw07 zWAT;vDK`o^+1lr;YhWS94H6~2GO29wU2Y_G}R;tg&qPnfoVcZZSi*!_M4D2IM?lqBl$x= z%2^r*pB@EFelZ`oyf(c_f>&MMcqQ47L%hY!a@O4gnizO?#l`CdVSj8$8~WZB{xep~ zH#J{_f(}=Kr+cj>96pv~Z3m|30?6lq6I+5kY3t9W!rHe0W;29pP1a=5k(e8RRc;bU z;!|`h7+lc%XxS?V}nB8Sa1(hBLXWw-NEUXS=%0JjJp$i0e+36=nEXw8YlwT5T2z&0`r@|r+V$Cb&SWx#sH7O$(eoc| z(VQ=8uW6p*%Ng-14aZ3Q75x@R18y;E$Y++qZ{!2sGrzjn#N{|lejga zbM&$wb>l@uMYk32^`2S*!wRs5&YuPr>PEzfCs?&@i*CGxQRp%SMnbM{-oV~NRU8qC z6RVifT-3x7ky#0V&)1ur+>S_4rSB{LgDq@jUNS;#uW^O*EOrP}N^`J7&!hl1hr(I` zqPp;y@S=DK2P{^s4FWHEBYpdeM`3eNQDjf+2S{UgrRcWFH6Cx#u1GN;w2g7+uE{M? zx)^HV4)+>lnmzQbTMJQ9><>SA-k&=q9tRxt%w_Qy}J8 z%0(F*o~-O_ndDA}Y{06lH4cwc({y%9*+xgkX#w|Zr*@Ba#=o)BS}=_K~fD4go)>@ zxYkgwsEPO{%b?Ttt5XrSB9L0VBB{D?k*Z}DNon<9F=>N^LD%oS?6F;qe4?7vQSZoA z2BFqq_%v8-pGGw7j!6j5JnlqN7$7MM=);ubisBIbK4lP59cq(Gu|m&WR1u_ZVPOLw z2lH|HnR!*7gpZLaxBQ%@IUG?hU6>@9X3FHz9VdIAva%e7$P?^6k06X0+Hk!)C+D>k z2JdTIY)336(b4a7!T61}sr^uK{3~ac0nSy(uXzNoI4q|qpit#g0y7!we4JLGEnw}{ z;CC7+2!nv8$B;v*BH4V?X*LSQD2Oz-46zw9bYWKx1Zl3Ly5mI*^O|x*kzh08WB~l@ z@I*Xb%n38X*EKt%Bwc|{MXQlm1`ejnjKiWMh98@1&XuX_ns$t$s9^bOCjUfpP zb4EWT3hvPUteP4agX&Wb`F{QQ^v#=B&Y&z?KE-x=-Afeywle!~s=GCjn_&zz+OV}&JB=WNS4iZMw^M(`NL0}}x+`7+ z9~KPW+NXxwF2rfrxd5#(YqA36CT zRg-eEqQENe3AKYssCcz3-v~e}^biHlVsMwrH_t=4N}rau^j2yzrM-XZ>}tcxe=@SE zB)k_d&Qd@5L~N>{wt<;@l4V0(6YoED&5sR`g~pPc+^`@}|IE4UBu5x+%-t%Q@61^VohqmeijL;M z+5kTUI5bKtGb{!6s6S0(IEu4funINRZM+dA>*Oh(S>T^K(=1T`1cuQKQ0Xv)vEa!S z#eMm`1KkgG;$hXS+C;%9fX@zD^3@@+nj(Pn2utFOV{t0O0uwwpH%NA)^EmtF8iF}a z4qHY{j*);qfV5_q{v3~Zaa#HaT8Ru~?>>C|m*4&IyYGIGU)r1^!7}ux@83uF&1ph} zdV{HO9)(&@Ctc41DS>bDuFu3OVptzW&_J3LoZ?si;xcOT(3Y|YD=Os&sNh8SdVA~jpIP4cqQmoiBNVeaNnw;inEMd6feSoy& zYZ4YwJ-k)m218g4G7RM3Fu9(1F$loN{eZhAIs~H+DkJndFtgjq6{v$)W{ppA>{yce zBMAgI_KAcxOr|M>833_^x+h~607LIbr}RwZq^PcK27>SnQ|cJ44l$351taX0I3r=- z(?~RIY8YYl^2&tL!lEeKA1tITJj%rJt$vHR3Is8ZI&em-4Hl>?1i2*3p^0N0MnDLs z7C)F;^b_-*O=%_JTNG@SL^TdaB)Tpl6!vku8$*wh8X0pvQ;8S`P0jn}>2Vx77S+hu zcnYqpD~6&&(gsVn3vQ~!d0MwbLP0nZw`%QQK`^4Mk}fRvA51(mYuzNx4d>i-5lM4D zNC(zByh}uitl_O78?PTPVZw-P8=mW%&NUCH-%|1Dy+H%Ft%{WYBwF}n0gz7bWpKHp zn9Ho5#U|bIa*^~POdIa}tXAXH$h;9a#?Piuh^qp+_v)2dP8^ZYv%GH`0VZDr$D8Ik z`b1d0BWyk-S)@~pswS-=oag%)xvfEG|EoH-D<>Wop<%@4#y|=Q881wtI+o(`6Zu|@ zVj$s>3F8Mr=WwADrp{O!g@6#=ArMK?>LGu^bG>@{2&r=TEsQ!zI4x-bdZQ!`t!07< z=mjeeETWnbNPaI}d21w5f@)gjwYKlbcO@$njEE)TCZ!@V@-f00R;`GruOXetoZFcF z3e86n(YUij)voY{ z%;v__Z2*AFsgP1cr~%t|1Gv_3WPg4Mk+GFTYg zKwhY!4vGLf9&zSFlp6p;@JX0^zy{%9;kMVDrJ=&x;GXUWJzWjess}>1PhAlz0V{K+ zY9ZQtp70Zqo$Wx0I+DW@&e<48y{QA@6XI?1ExvkXES>>q^O@!lY~$ro83{}bul{mT zN`Ao|dgFb>Y#o2%#+CE|#fB@4S@Lp`AXA>6kyz&@4n!ybIs4!UuZ`8?7&jzO#e^B0( zRKfPdoZWd@0+fgg!G?g!DZrQcVqz1yrsUq5*dK*GUFi1US9{PSd9%t_}#9Pg_J7EI6pnetGIBR+w6Cusj>`$e%^W1d0- zCe=k*40pdK{Szu^S_GIV&`p5-R%hjHBPxOPkX#OA%%My>?HfCVfg~V{RlK3KT~u_; z(;q*72?2p80t;H~T0hw6S8>s-spz1)DxB>_#Q@U*|7HAbo?dKCgU!8*S{D(8e##(- zQrWjnuM-b5pHU)E0Ihgq%u1Cj?~q$T(=6z%ka55Qaoy;i>+bO8jRanCn#-?KR{1~( zAxXchQ^-xu>$bsLJPn$G81?ZW&|WcdBId4%2P!>6y|s+Z%-m4OBfr$<3lDgqHJ z_Bp1I8|YDt)g4n#nR>mx;F8K(m~dGySvisel|77Qxasza>EkJmD-@m`M6MCY+zq+m zbbak$L&H1^9~UncTH3P0jtoMr!`ed$Tg=>Nup3gHDn<4Z7J@l~VxNVnfYzjLMZ#o| zjv>rynX~ewDV?^ZcMoio6*XC&n5{wN6|Q zW)4O+6B2%Jp2%AyohI9pfn|U(nodh4kaDpeS~&`tYgzRHiK?mqpGGveARMB*#i%+6ghk^ssOGm!>q26zYU~ zLO&FVaK`=Hj;Wd;9xg?K z+D7!*pS**>Wzo3mT@rE+dQqu%Z!u=2EZI?Mc>+HU${UKoBHEE{Nws9T>b)`(kbySv zi~{eE+K?b;wAw8Md#-5*Up8Y#gs8QbcJeAcR13nrn@kUKSU7A*(T9s7$N|Iq-6x_| z=AlzA6+_w0Rjn*wiYBvz)DSA|x5k7rXbF(nog?ho3?JwWz;ZD|^n+0e&r6gFd&&-n z>utmK5qBOa1_63(;fK z5UnAQaLagZq3AoK9!}2AE%x2D(x*XGCY+-fv$Sk;pz+nZ4h=g_Jz9Y{jFRW2^BZMH zmRTXjxR=~OqN1@EFI;!S^lajB#v-fA1*A=F2g=)*6}tl#y(q)Yp?R@<3ImX$qMRxP zUv&u^whSR{xCU2}ZQGk@Snfi`PmFKE?w& z1#lc*;rQPU^~n$m?%Fy5LES1mr`Py}`>$*K=!Kyz(~P;s?0pPjEBJZbN2;)FraeGx zmUH-(LGdNgyY;!nCL)T|8YvmQDy#sJuPWB^ednh@{ozFccq1H^JBuI#f5;*?L@{77 z^9%{lbAYO4%V>xYxi%$8KQss+)k4#MAEQlL(X4T;fFK5blHZA*OhQH(AV!Igh!AXu z^N6^Z!9iw@W4;L%E8jZ>$2tv3#1Bgozc#@W~( zNr33I2zJ>N1$R|%ChP#1_E%-Vl+m>Bh(_u_F!<|cOrk9~(rVh-xIaRUqtMPV+Q^>c z9xe?*cMv0(JGk~ekEvAPMbLYN!SvLhX|ip;alGNk5_Ma|G&B*AX;ac}sN>^BEI(ii zq69IbW&5+&WHMLz?1g8@85Tk#xxiv9E3!2xr5}`hVrU&5W@6lEdIwjk`?=0304iTk z7~qo)Ky7gxY&0Jf3~6{{hjk!ra7I>l&S)#$sO%l+(_OKm`jM3cBwgkHl{3+w@K2Rb z5(7@c5RUfrn!~lZqju&)$~&tK^Nlgp7?O%Q0qcUc^Z=J-%AEjo$%g0L9j;|zsd8}= ziimn=Uutz%?p;Gwk z4#$wab|<$HP<8&fEzPyC#Hr;3810BDk;%qIP{j9I65Az3`oz1b+`3{*LJz3`zivT!KC&mB8B zqlz(ItqdE+Ia1*3iP9012n-&VCLW<1nb*YZqo)*O0@^T(QWA6E%Z0Tn3K@ysL;nkR zgv6rRSYieC(wH{N8gp+x z8%V85Y(E_UISj^=>5_M(xHU-;f>D!QY#Hcx##9ixWxtoT>uhiYitTh3 zSu3C5%R@fv1nn&F&Pa@Ts}Z%EA$BLnG-+iWV;w~ZbH|%+UI)=etQi0Br|-iH*E>Op zQ4bo?ZzRN?<}o&?7g>#h6mG20XM&5tZWd?%={GwxLD?{C5ksWUq2xvnmx!2dw1UO& z(&2FhB$ANlPS_BQVe1uMV=xWjsn%Ic0Z~si%yrm_;jzPdDCro$&v<>brF9jTippUT zBj#+;dDt;4EWLEzI5>2zy`_CDOO@Al>_?HC$V`?%)TYpBC)Rz(O{jG#sz|)4Ga6Km zxir|pCawwEsaWI$>cjzoV3;)Dd7hP&2BwiA395a>gmV&^PJ26D5&D_bv1h9#dpae= z6$u|RZCh_F*^2k6<0oE;W*$@=zQGGPtuZM z>ZfVm4#*B!&{8M+a60^9A#~IRl9^|Ll#~o1Bk!hZT|+NEQIyf=7~M|Q>}4BSz&M`1 zKn*nViPyn8Gh-A?u|BdH zEu@8_cx|n@4I^ON4&SXTRbJ&n670lA$|3diD&RGfMu&6MQlIvTt~go27=oJymL7#L zjt1HR)m~=FJgrcz6Iy@!?W+JL97OS)h&Eu|QRQxZQtS=56U0Q}1nQ%}L9@*ewu`uG z!q6P5b^y5nA_1TnplTErY^RTbP>b+VS)LsOVRhZ$J#w}t{QP32;GRm0yU_k0d^9(AgTIM znH=SE(};!*Y9x{|T0$=|!ds+O%;h5eJWhs+%d9l{xJ1Ns{WQz*ylnfY=WDo}G1K2% znOpLT$q^p6btI`I31Ck*4Zw5V899%3hs8k>iEJ+k<(91xDmucDw_RMWINGfkWTgCL z;lAGFZmAF%=SpUn@f6vlP{IcZ;Y@}|3@OVEMv!_Yk*8ax?VF9lyXyYyYEovmPBK`j ztxr}CJ5hkA<5`gprWLpW$V+Mzpn#*IDqyx7q~XU8s`DKKdURJ~z05tb3t^;ZGgBGl zx`)`pRUgeJ!;O|>J^VJK?d>vY8E#M5z=HBy$-OBtYS9$94vDYEmcp>H+Itt>OI1b*0kl*4#NJbBD z_=I^!YJ;Fv1&@j} z!g&suEbt$~@j6r74<3q(i$t(dcTQ2WZAmu+mnd>?kPekV4tN2wrQ_k#wo-WdY9MIP zzKaB@BzAOith&Fods2tUb;u6Z+mdqZHL%c-)p@SWa7nq1 z2abNF!G%}wV*7A=IP--wz0qsnalq}6kTLC(76i{8lm}aPf?RkyL&Nf3S8Xn+2>}PR zu5HWi0j-m&PNJ=_kL_p@0x&PSbML^v^uu>EkTkNwEH4z<;mi;hrs^RQwh z?e`PW$4wwjG;~%w^is5t;~ZIlq!1Jj#(sbM&1-nCSI+}c!4YBc{X4^dKC=L87P6-~ z;aB4966S-aJy$OUY+*zfJP;scMIoW9VHIS_S!2A*+csqRMcKW_2Q}RMq}{D_N#*Kq zIRvD_8?i-Vr0Za0?32uk@pZ=DR>DE7lN5s$6D2GI3P2VkJJP|3z@;@SA7aIe5gx`J zxV|>duS#pnW9f~Fq(}sT{8au#>Jw!Skw_&lW>mZqt%Wwa!=&&I1rI5%A8cXx9wF+o zAXVuLzLbrbn|455`JV6%6MwolG-CeLf=R~D$!x+o2kXO1xngGng*hmIYcF=8Kt>`F zSp)SOYG}MA=vo|z6ozSnS_10HvPx-%G&TCR$R_)GiWPowU-=n`}-u$FX$N)Jyv!p#5?9jF1AgKs8x1Qlzmj*>Jh zN0@^(;@3DH2jbHnh|wWt8&m~t8))lCW4ya}A3y!!58tg`;=&La&kI_#pMUd>0$Wa| zbb?-SNJ3-)3mX)e5QG6s>BxRHFuCuGAuZ&i85|qCdC}Mpa!%UTqedAAnd5cD^RbQq zk0&oGfd;XS3Nn=wLPZeAka=)WODwrro*(TzOQ!|;;i;;R7tj2`%hD=djQYz&(bwk% z)Bm&TQwAn{Q{3Zig#7fOe=4FQYqhM0+x z$0ti%`I&~n06dY%FrO~V4tb9J$tu{2v3?U!r6HZlXr04QR)O~0b)Pd#Pv|G>32Ga% zy%bJa#zfSpbtTLSIHC7fSc=9$#L2eFl9c@*IVKcH$EHrp-O`Y8$Z?IvvY$zaLc1^m z32CMx$xi1<)T(kbn%@Lfc6aQIb39q*SWk+AXmG4a(@p`FWznQBpR;ZbqYz3a{Q$>% zyh!{}8{$&WumCAerW3(ZW(&0~HKa9+kwU;rjDC~sG%z|{9E%5LN_jsG?{W`P#R-b8 zCR>d4mi32#8vK99dTf?pq$PnD859rs)TVxn!kYR(ggAB{k!HIygNs(G@F*!YxXm=O zmqC4C^_9LVebPCq5OZ+^&S?a=EqwRTqo$(xN_B){wrlk!hoqvyd=?Va>Qgu}o5tW_m>qt&?z(!FlAckn z0K|?1qGduIB_tlA!#_TRJfUE4A=!1eGuvVu!~qhiYa~Fgs*+LgvjnoSa&Xo+tny>DfV!2hz z9(yp?ef)e4G>p?el0*7{mfKprB$Yt}lGsfTB&T5&pw=NO*nt9rKtS|=L6$aAp^q;i zy-myn_D;gX%|u9S3$vSh$YkF>vlR=0bxoslG;U)BU5kTEj7Z`g&0@x2T9P-%sB4ea z9hGE!aV7UWRQYS1VEsq1gEWY%^vz&jRCseFAc1pQ+J1dj;!6+`Z6_XUTuOSP$hNF& zHEIHofPg~?ryF~v!UWD{YZ|F2b~U~*afc?OR*dO42OTTN*=h!Wj9F11rgs_btuv#z zGV{4UY>LEOkbW-@{}mk=7l4dA7RVTU;isD&^w%9)1)Hj@O9%Nd$d;somp&X)r0S?B z1xyd+@+Lls5w1?*P3P!XdPT}Fm^d9LATW-GwFj%6V&T!1MLEO*42_4uQ#s>(F!!4b z*UBYIt(v@38DaWLR809<9+U?k6%Z9UOKcxLCFj=;O_VqFgIH(cO~p)@VD+L=@GDnh z7l2W9ki4y&h6k0BvoB?ujhE$#oMlCfTHw(Dr=x5>gAEp;G9+c?F!A6+u7{GMTjg_~@YjTQRiD-y+3>bn+O6aL#;kf-#_SHy?j7Dtj&8;MrSR zV}h^@3dJGLFDX8J%{N2Z z>0>Y*X%4{Lw#QY3RnuuPiY?m)Z3k<9=4e%)n-vy`!yb&dKg|LaFl=-gU5HE_3u;?CPQG00fK2kwh-U8LK%0(CCeov?yu@&GI<=cAF;iTn*8V;Ivos zJ0j+yNZ3hvh0&HBQjZ}Gn8}cL*b(A57&iv5-w6b!8p;sF33AP}H8eX`8y8Y_?gG2g z{8Z?50Z&2q-rMmQ{fdRLp2cT#K>sw4V+6rQ)K>)82LKY4#mlhkyN@4(@A>=q-xsri zo_=W%C&kNC1CNDk+GKOKuX7VdCh1bzn zZ(P26nO!->e=1s2OjRyLkRZ6hf!k=~?mh=h9D>eZTI}*j#>D;*_RGzw?ZUipZT9ez zf!@?3yl}~FXH^w#t(#hd1pxhYIP9!ERQtpz(=2b%ayloHb zP|IlIeJhV!Z{BVwJWtXVIqJ*WSeYd%Lm%wX2zHy0x}ttR`+W8+=AAg3o8XJa9gY87 z;nEUQ*UwHFZ;Q|tJ4_AAYy0`D5kpH%f{_R;2D z1}b`vz8$E5GTWb6n>9;2&_?S1CJo6X;>=CDi8DiyN*pQO^?<`0g4g;J&IuzVPX72R z+LC!XEV1dR@QG|#1R70zwsEXxhaJ83;6inpyMp4Iynx@){F+Se&079hLJU^sRjcu3 zmz`*rx%=hEYUZjsHa)>9Ro=);YCD(U?0X!ud?H0niaJgfn60KY*z0BA&hUI z*y_f~>?fC|HzaDd;YMs40x2`;^=K6Cc)IOiV#LuBp1Hem0{D1GrCv3RYbKkIaAm6b z7@;E>hAchQE}(?qtn48cupb_OyNgN&2q;r688*_hhYk&negOX0w^-js5h<7>Y@SG( z9wViNvvL|x#fd2f7Z=^|W)Y43&Lo^~9@c@`3>tS(X$cfkS8f&6A>r!kp3cNH+Ga%42y7xI9W_KnW_V?evT>32 ztMzthIPr8`mEh5s4kZ*U{jjcrY}H$iJ?Qvpp2$YBsy|ql9MwkTw^g?uT7Vw_uliB5 zlv?D=3u*Px-rfH|p!6o<5tBF6KWnlMFQ^YhDUu&h;uKq9t9q_D3_w6nqDCs*L}I!tv80X8 z^R+jaLHb_N8^p(WbciW=bZy6j8k>rUP9P`@W-g6)Fv3H}jK3MJW(a{2t3kj*US_N( z5(q}e5QN3NPj1H;MYJY1L?d}MW?&)ht5>%4-?>tXb}*oaTO~;Rt>>dLF4TROb-RE||AD}EZA|In= zHDmgnr^|%(N7gPQsyuh=7)F2s{bI!?IfLQ`JbMPt__c_6FY>6IF4GOw?KpKXG~F@^ zARsWuR1_{Ii9+S0F=G3`v1U!FLbV_qO+PuFb089ESFv#wf&O`rSPB1DX_o=cx#Wqm z;)#_k0oxwgj_9M6N}2z29G|~McIl43e&0c)aS6YUo;|n&g;l{gN81_3MW$i+ESao$ zpN4OEDXG;=)5Dqe$o1&K_aR7t9g3$3%QyRJDRO~m0Gi2Vp<<|5m|Rsj^dSHTz)l8I}XycUcVAlp0uWAk&G?k+Hcbd_+fC`fhkY;dS}-|bSLG=%2hxXu64dal z4(ut}y~N8-tSx|&U<5O4Q17J)#!jlj(a=ALTQPVtqCNRxEf(?|k>C%J_~kV&&^4`%cxcst}^|I?3#|Hw069sp2d zg^DXM%ZZ!YA;!jlRp=F#_mvl%^i13bI}Y|B?#7@ddpb)p9?J1En5!$mQ*nwh=21); zkMQ#$SSm-1{ybfT_7K1(P_lGNl;IrsK1j+00PRV!%+Cj)4_Y}@YN~~;(v}q@BtzT0 zC7$KZUUSdjgRq6HiaNW;SXn<#7DFzE0i?i6OoT-T5Ia7bZl;^_tb2N9N<(QAXXh>Z zxeoJd8MoMzw;O^g90t6aF>&d>qedV~XISCG zJp1*-E zK|&r#uU7bwuP=VOCl1tdkyVqE1uZMRFkSX);{q11od##bv!mZU9pgL_Ko5079F8MV zvM2`KoMCNeBbl%~&3Zsl52TL}f9&;Yj@W%YcB50f*kA0Z*nQ_=8lcSBEL1_NCYocA z?yH32X9g~bd9$=c?&H2`6dg0m`V$0jzy8IyKYRQ5i*Mij{Ozl6%%X8Iei#!cUC60D zkJ~1sLsAYWY)ua;qzOP9T-ou07xPV^*F~qy1XV44`-r%dxK#xAMYkXYxT{~92E(q5 zo^fs1IHI)j@d*2{a$6z?+s65`hZx$(X|-b#lA{{}Kpgy{r2(w_;x-Cwh1Q^HI}mYy0rMq|!oopexuTD@tyawa{mI3{qFMkM^<>dPsT*ITZmo6qUb|7D z>h`OgG^->DM2#vW2pz@f_2OV<@KVuI>I{|fDWl>lYq)uxH(*~k&9J>mMRYvIYWyVQzbQVRg>P6lqhGHtD^6L$e#0dY zvRZdg5X@B|CXpzuw)LBa&%xF&UvHV8acwYT-dshSp+M2|S!YCP%$nDR6khR3A4g=C z!|p?#Ydg(*)#}!GDP-yrTQymah`Fg~ZH%ynRK)Zz!|Y(v5LA=dSNc~GpJ~`9e%Fd1 zVE;sppu(2N7lkj;{@$>Fa;%{ol~$P}AO(&SrGnoBU{-1K*fL66EzVS+F^q7Zo9H2Y zfRN)9X8^09ENFq1{7`;kAEMb$hctkyMLQq& z)LL+&6BJ0Yl2ymwa4Aq76i>)hjXb|lwGNN zt6woF^^b{!>N0#L1M&g>ICI`$Pt;0LZO0$RshdWf)3MN60T4H&9;BH({ofAH=y==w z6cX81@SWbOnkr672ilp_L_QotwMVn*c+?pw%OQAvgQr1GL_-53k#vsjy!WGO|HnNrBY)P^k zohukEu?7MBaX9*RoR{QwLYB&E1NNk_V3pj>hda383qMlg7D-$nP=bXJAe57$vRiVj zKaE*j!O%tUA~6d3WXfT14Ldan3gh1P%|%$+5TQB@MiRUp+UrSNUD#Fjxh;queZzc7 zjP~+V@W!(BPsC=<&XwQbkVU(y5nNl=53)-& zpcn9QexZelzt%UGD#^tY#!}O1S5aXq65XSQB(>U|b7Ik!7x<3+rc_{)CMQju5LH6| zK8Lg% zBM`!{|8z_lU{0B2P5sJ85)yeb@}GwcSr?hqrfH&e<6KtS1X2xyj6uYZp7h>@uo6bV zH`Z)RlGZrFbjKZ9BXAkTnY&j=gc;rDw1YJA9`8*!5jV5%-E1!)rbbb>u~2!5D^qhmKYKaawDPdF)pGG5ii(MNsquor+JR^ z=`hX_Bj!G=w$s$lcBywjfGrMSbUI1&WUg{5sL=;C?_=A&Y6{sw8X^bW@ixux6}XD* zZP8nFxmIzu?g2v7!*%oCad89r2N6nYP2meXtBxvOMgcdBEQwb50YEk}{Jp$yu(&>4 zlscV38hsvya=1SxVHt=*g^BOvF`Rl@S!73iw0y%97)$iRRXWFa-tDMhNZ%4v|=0kRwg<2l_ z7+<#22^Z#o6xG#DGDKl7%y*6)@i~c;)q~w+4v`ai%@tc4>tTdsrDV2LQQmqOVT8GG z^d-?60;Ag22e& zm!U<}3n6DK48#d|ld^9o0N|)>8@)+bjM-xL6QLNB$n_Q}Yoe$!{aofz$5rVVo6=FL zeVr*O3lgN@&y(}n^%^1q>t)`z-pO8G^iD9E#jmUaP!E`{ElHeUYc_A!;Jz9oS4GvW zP@=X~*gy?u2UtZ3VbSedQ~YjnEufGq4pE37t$qEp2{R^S!_g( z`*W;Qx@=IwOMe#l>txS~I`6SD*)E^h{FByuJ$sa?qm#V^K@=5A5}TJRGl;Tog$YX` zW*a(tJEU_+p>0f;{a|_r8+1sK#)@N@ zP>3<&b8Xzsk!QMh?y+n(BF9G6x34dWJZ2N`O}psi{lD**_tW%Tcp>yC1-D;ZAZ!}p$G4Nhu%g1n#b{wm`-qq!3FqMuM+IB!g^wdiH%%AN$ z%y4;=B_pj8K4aAr-85Ypi$6PwIl;J1o3BAAe7vnf(g*Fhuy*+M!{_*TUai%BSRCbPK_=x!kWnyXwAgyR(vN1%d$z)_R9oq@x$4R7|T-|y8W zAfSN&m|BfGa_h8k2dD|`e^c#g236%$*9DKDkzb)7zcpbqEp5k+6beEsWpKmO~V-n|Pf@5_paC#^ub z^u4x$V+%M5G`j3iOJ{Tpz@K1~~y zuAAKamGT@>LX?50^)Witm#>)!lXi!27}>>5couiIoiW*z5Q7Ntil3s(S5~YtG2eyd z>a$X|a|yLd9ir9)syYdwOZ+zXM7$*crEK!tGa=Egt)l3yr(*sn^ZFe(9Nq?EF*%qq zu-d=Rf1lPFb_hO2avI>7%+1C31Q;fDEtP z0K2U#^?tTB)k35Ug{Q*rQDbRjGywr3l)6PAScB@BE>DCj+-KS47*ouQ0F=sJLxJf} zR6l$@w2#+±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 pVCW|#OH!9m0#tkYV#=2.18.0,<3.0.0", # Required for tests (locale formatting, parsing) - "pytest>=9.0.2", - "pytest-cov>=7.0.0", - "hypothesis>=6.151.9", - "mypy>=1.19.1", - "ruff>=0.15.7", + "pytest>=9.0.3", + "pytest-cov>=7.1.0", + "hypothesis>=6.152.1", + "mypy>=1.20.2", + "ruff>=0.15.11", "pytest-benchmark>=5.2.3", - "hypofuzz>=25.11.1", "psutil>=7.2.2", - "types-psutil>=7.2.2.20260130", + "types-psutil>=7.2.2.20260408", +] + +fuzz = [ + "hypofuzz>=25.11.1", ] atheris = [ @@ -119,7 +138,7 @@ atheris = [ ] release = [ - "build>=1.4.0", + "build>=1.4.3", "twine>=6.2.0", ] @@ -200,7 +219,7 @@ omit = [ precision = 2 show_missing = true skip_covered = false -fail_under = 95.0 +fail_under = 100.0 exclude_lines = [ "pragma: no cover", "if TYPE_CHECKING:", @@ -313,7 +332,9 @@ ignore = [ # Parser: Inherent complexity from EBNF grammar # C901: Each function implements one EBNF grammar rule; branching is structural, not accidental "src/ftllexengine/syntax/parser/core.py" = ["PLR0912", "C901"] -"src/ftllexengine/syntax/parser/rules.py" = ["PLR0911", "PLR0912", "PLR0915", "C901"] +"src/ftllexengine/syntax/parser/entries.py" = ["PLR0911", "C901"] +"src/ftllexengine/syntax/parser/expressions.py" = ["PLR0911", "PLR0912", "C901"] +"src/ftllexengine/syntax/parser/patterns.py" = ["PLR0911", "PLR0912", "PLR0915", "C901"] "src/ftllexengine/syntax/parser/primitives.py" = ["C901"] # Visitor: Commented example code + inherent complexity from AST node dispatch diff --git a/scripts/fuzz_atheris.sh b/scripts/fuzz_atheris.sh index 04603f3d..f80d8e5e 100755 --- a/scripts/fuzz_atheris.sh +++ b/scripts/fuzz_atheris.sh @@ -162,6 +162,15 @@ discover_plugins # ============================================================================= _find_python313() { + # Prefer uv-managed interpreters in the current workspace. + if command -v uv &>/dev/null; then + local uv_python + uv_python=$(uv python find 3.13 2>/dev/null || echo "") + if [[ -n "$uv_python" ]] && [[ -x "$uv_python" ]]; then + echo "$uv_python" + return 0 + fi + fi # Prefer pyenv (most reliable on macOS dev machines) if command -v pyenv &>/dev/null; then local pyenv_root resolved @@ -181,20 +190,30 @@ _find_python313() { } ensure_atheris_venv() { + if [[ -d "$ATHERIS_VENV" ]] && [[ ! -x "$ATHERIS_PYTHON" ]]; then + echo -e "${YELLOW}[WARN] .venv-atheris exists but its Python is missing or broken. Recreating...${NC}" + rm -rf "$ATHERIS_VENV" + fi + # If venv exists and is already Python 3.13, nothing to do. - if [[ -f "$ATHERIS_PYTHON" ]]; then + if [[ -x "$ATHERIS_PYTHON" ]]; then local venv_mm venv_mm=$("$ATHERIS_PYTHON" --version 2>&1 | grep -oE '[0-9]+\.[0-9]+' | head -1) if [[ "$venv_mm" == "3.13" ]]; then - return 0 + if "$ATHERIS_PYTHON" -c "import atheris, ftllexengine, psutil" &>/dev/null; then + return 0 + fi + echo -e "${YELLOW}[WARN] .venv-atheris is missing required packages. Recreating...${NC}" + rm -rf "$ATHERIS_VENV" + else + echo -e "${YELLOW}[WARN] .venv-atheris has Python $venv_mm (need 3.13). Recreating...${NC}" + rm -rf "$ATHERIS_VENV" fi - echo -e "${YELLOW}[WARN] .venv-atheris has Python $venv_mm (need 3.13). Recreating...${NC}" - rm -rf "$ATHERIS_VENV" fi local python313 if ! python313=$(_find_python313); then - log_error "Python 3.13 not found. Install with: pyenv install 3.13" + log_error "Python 3.13 not found. Install it or make it discoverable via uv/python3.13/pyenv." exit 1 fi @@ -409,7 +428,7 @@ AUTO-HEAL: EXAMPLES: ./scripts/fuzz_atheris.sh currency --time 60 - ./scripts/fuzz_atheris.sh stability --workers 8 + ./scripts/fuzz_atheris.sh runtime --workers 8 ./scripts/fuzz_atheris.sh --setup ./scripts/fuzz_atheris.sh --minimize currency .fuzz_atheris_corpus/crash_abc123 ./scripts/fuzz_atheris.sh --replay structured @@ -499,6 +518,7 @@ run_corpus_health() { log_error "Corpus health script not found: $health_script" exit 1 fi + run_diagnostics echo -e "${BOLD}Checking Corpus Health...${NC}" "$ATHERIS_PYTHON" "$health_script" } diff --git a/scripts/fuzz_atheris_corpus_health.py b/scripts/fuzz_atheris_corpus_health.py index 99dfe4da..4b55f2af 100755 --- a/scripts/fuzz_atheris_corpus_health.py +++ b/scripts/fuzz_atheris_corpus_health.py @@ -25,10 +25,7 @@ from pathlib import Path from typing import TYPE_CHECKING -# Add src to path for imports -sys.path.insert(0, str(Path(__file__).parent.parent / "src")) - -from ftllexengine.syntax.ast import ( # pylint: disable=C0413 +from ftllexengine.syntax.ast import ( Attribute, Comment, FunctionReference, @@ -44,7 +41,7 @@ TextElement, VariableReference, ) -from ftllexengine.syntax.parser import FluentParserV1 # pylint: disable=C0413 +from ftllexengine.syntax.parser import FluentParserV1 if TYPE_CHECKING: from ftllexengine.syntax.ast import Resource diff --git a/scripts/fuzz_hypofuzz.sh b/scripts/fuzz_hypofuzz.sh index 3e2d5e2b..a033bef6 100755 --- a/scripts/fuzz_hypofuzz.sh +++ b/scripts/fuzz_hypofuzz.sh @@ -216,7 +216,7 @@ _run_with_heartbeat() { show_help() { local project_name="Project" if [[ -f "$PROJECT_ROOT/pyproject.toml" ]]; then - project_name=$(python -c 'import sys; sys.path.append(sys.argv[1]); import tomllib; print(tomllib.load(open(sys.argv[2], "rb")).get("project", {}).get("name", "Project").capitalize())' "$PROJECT_ROOT" "$PROJECT_ROOT/pyproject.toml" 2>/dev/null || echo "Project") + project_name=$(python -c 'import pathlib, tomllib; pyproject = pathlib.Path(__import__("sys").argv[1]); print(tomllib.loads(pyproject.read_text(encoding="utf-8")).get("project", {}).get("name", "Project").capitalize())' "$PROJECT_ROOT/pyproject.toml" 2>/dev/null || echo "Project") fi cat << HELPEOF diff --git a/scripts/lint.sh b/scripts/lint.sh index 1856e8e3..8c012e16 100755 --- a/scripts/lint.sh +++ b/scripts/lint.sh @@ -76,13 +76,7 @@ unset _script_src PY_VERSION_NODOT="${PY_VERSION//./}" FAILED_ITEMS_FILE=$(mktemp) -# Auto-configure PYTHONPATH to include 'src' if it exists -# This solves 'Module not found' in examples/tests for 99% of projects -if [[ -d "src" ]]; then - export PYTHONPATH="${PWD}/src:${PYTHONPATH:-}" -else - export PYTHONPATH="${PWD}:${PYTHONPATH:-}" -fi +unset PYTHONPATH while [[ $# -gt 0 ]]; do case "$1" in @@ -118,7 +112,7 @@ pre_flight_diagnostics() { echo "[ INFO ] Environment : System/User ($VIRTUAL_ENV)" fi echo "[ INFO ] Python : $(python --version)" - echo "[ INFO ] PYTHONPATH : ${PYTHONPATH:-}" + echo "[ INFO ] Import Mode : Installed package (PYTHONPATH unset)" # Tool Availability Check for tool in ruff mypy; do @@ -159,6 +153,7 @@ declare -a TARGETS=() for dir in */; do dir=${dir%/} [[ "$dir" == .* ]] && continue # Skip hidden directories (.git, .venv, etc.) + [[ "$dir" == "tmp" ]] && continue # Scratch workspace: intentionally excluded from gates. # Only include if it contains at least one .py file (recursively) if find "$dir" -maxdepth 5 -name "*.py" -print -quit 2>/dev/null | grep -q ".py"; then @@ -268,7 +263,6 @@ run_mypy() { log_info " + Using ${config_source}: ${config}" # Flags: --no-color-output (agent), --no-error-summary (quiet) - # Note: We rely on PYTHONPATH being set correctly above local cmd=(mypy --config-file "$config" --python-version "$PY_VERSION" --no-color-output --no-error-summary) execute_tool "mypy" "$target" "${cmd[@]}" "$target" done @@ -449,4 +443,4 @@ else log_pass "All checks passed in $TARGET_VENV." echo "[EXIT-CODE] 0" >&2 exit 0 -fi \ No newline at end of file +fi diff --git a/scripts/publish-github-release-assets.sh b/scripts/publish-github-release-assets.sh new file mode 100755 index 00000000..b5892643 --- /dev/null +++ b/scripts/publish-github-release-assets.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash + +set -euo pipefail + +die() { + printf 'error: %s\n' "$1" >&2 + exit 1 +} + +resolve_script_dir() { + local source_path="${BASH_SOURCE[0]}" + while [[ -h "${source_path}" ]]; do + local source_dir + source_dir="$(cd -P -- "$(dirname -- "${source_path}")" && pwd)" + source_path="$(readlink "${source_path}")" + if [[ "${source_path}" != /* ]]; then + source_path="${source_dir}/${source_path}" + fi + done + cd -P -- "$(dirname -- "${source_path}")" && pwd +} + +read_pyproject_field() { + local field="$1" + python3 - "${repo_root}/pyproject.toml" "${field}" <<'PY' +from __future__ import annotations + +import sys +import tomllib + +pyproject_path = sys.argv[1] +field = sys.argv[2] + +with open(pyproject_path, "rb") as handle: + project = tomllib.load(handle)["project"] + +if field == "normalized_name": + print(project["name"].replace("-", "_")) +elif field == "version": + print(project["version"]) +else: + raise SystemExit(f"unsupported field: {field}") +PY +} + +release_exists() { + gh release view "${tag_name}" >/dev/null 2>&1 +} + +ensure_release() { + if release_exists; then + return + fi + + if gh release create "${tag_name}" --verify-tag --title "${tag_name}" --generate-notes \ + >/dev/null 2>&1; then + return + fi + + release_exists || die "failed to converge GitHub release ${tag_name}" +} + +release_has_asset() { + local asset_name="$1" + gh release view "${tag_name}" --json assets --jq \ + ".assets | map(.name) | index(\"${asset_name}\") != null" +} + +upload_if_missing() { + local asset_path="$1" + local asset_name + asset_name="$(basename -- "${asset_path}")" + + [[ -f "${asset_path}" ]] || die "missing asset ${asset_path}" + + if [[ "$(release_has_asset "${asset_name}")" == "true" ]]; then + return + fi + + if gh release upload "${tag_name}" "${asset_path}" >/dev/null 2>&1; then + return + fi + + [[ "$(release_has_asset "${asset_name}")" == "true" ]] || die \ + "failed to upload ${asset_name} to release ${tag_name}" +} + +readonly script_dir="$(resolve_script_dir)" +readonly repo_root="$(cd -P -- "${script_dir}/.." && pwd)" +readonly normalized_name="$(read_pyproject_field normalized_name)" +readonly version="$(read_pyproject_field version)" +readonly tag_name="${1:-${RELEASE_TAG:-${GITHUB_REF_NAME:-}}}" +readonly expected_tag="v${version}" + +[[ -n "${GH_TOKEN:-}" ]] || die "GH_TOKEN is required" +[[ -n "${tag_name}" ]] || die "tag name is required" +[[ "${tag_name}" == "${expected_tag}" ]] || die "expected tag ${expected_tag}, got ${tag_name}" + +readonly assets=( + "${repo_root}/dist/${normalized_name}-${version}.tar.gz" + "${repo_root}/dist/${normalized_name}-${version}-py3-none-any.whl" + "${repo_root}/dist/${normalized_name}-${version}.sha256" +) + +ensure_release + +for asset_path in "${assets[@]}"; do + upload_if_missing "${asset_path}" +done + +printf 'GitHub release asset upload converged for %s\n' "${tag_name}" diff --git a/scripts/run_examples.py b/scripts/run_examples.py new file mode 100644 index 00000000..a8359ea9 --- /dev/null +++ b/scripts/run_examples.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +"""Run all shipped example scripts under the current project interpreter. + +This keeps example verification as a first-class repository workflow instead of +an ad-hoc manual step. The runner intentionally clears ``PYTHONPATH`` so +examples execute against the installed package contract, not a local path hack. +""" + +from __future__ import annotations + +import argparse +import os +import subprocess +import sys +from dataclasses import dataclass +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +EXAMPLES_DIR = REPO_ROOT / "examples" + + +@dataclass(slots=True) +class ExampleFailure: + """Captured example-run failure details.""" + + path: Path + returncode: int + stderr: str + + +def _clean_env() -> dict[str, str]: + """Return subprocess environment without legacy path overrides.""" + env = dict(os.environ) + env.pop("PYTHONPATH", None) + return env + + +def _discover_examples(pattern: str) -> list[Path]: + """Return runnable example scripts matching a glob pattern.""" + return sorted( + path + for path in EXAMPLES_DIR.glob(pattern) + if path.is_file() and path.suffix == ".py" + ) + + +def _run_example(path: Path) -> ExampleFailure | None: + """Execute one example script and return failure details if it fails.""" + result = subprocess.run( + [sys.executable, str(path)], + cwd=REPO_ROOT, + env=_clean_env(), + text=True, + capture_output=True, + timeout=60, + check=False, + ) + if result.returncode == 0: + return None + + stderr = result.stderr.strip() or result.stdout.strip() + return ExampleFailure(path=path, returncode=result.returncode, stderr=stderr) + + +def main() -> int: + """Run selected examples and return a process exit code.""" + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--pattern", + default="*.py", + help="Glob pattern inside examples/ (default: %(default)s)", + ) + parser.add_argument( + "--list", + action="store_true", + help="List matching examples without executing them.", + ) + args = parser.parse_args() + + examples = _discover_examples(args.pattern) + if not examples: + print(f"[FAIL] No examples matched pattern: {args.pattern}") + return 1 + + if args.list: + for path in examples: + print(path.relative_to(REPO_ROOT)) + return 0 + + failures: list[ExampleFailure] = [] + for path in examples: + rel_path = path.relative_to(REPO_ROOT) + print(f"[RUN] {rel_path}") + failure = _run_example(path) + if failure is not None: + failures.append(failure) + + if failures: + print("\n[FAIL] Example execution failures:") + for failure in failures: + rel_path = failure.path.relative_to(REPO_ROOT) + print(f" {rel_path} (exit {failure.returncode}): {failure.stderr}") + return 1 + + print(f"[PASS] Executed {len(examples)} example script(s).") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/test.sh b/scripts/test.sh index 3515545a..2b3a13fb 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -57,7 +57,7 @@ else fi # [SECTION: SETUP] -DEFAULT_COV_LIMIT=95 +DEFAULT_COV_LIMIT=100 QUICK_MODE=false CI_MODE=false CLEAN_CACHE=true @@ -261,12 +261,7 @@ if ! [[ "$FAILURE_TAIL_LINES" =~ ^[0-9]+$ ]]; then exit 1 fi -# Auto-configure PYTHONPATH to include 'src' if it exists (Parity with lint.sh) -if [[ -d "src" ]]; then - export PYTHONPATH="${PWD}/src:${PYTHONPATH:-}" -else - export PYTHONPATH="${PWD}:${PYTHONPATH:-}" -fi +unset PYTHONPATH # [SECTION: DIAGNOSTICS] pre_flight_diagnostics() { @@ -280,7 +275,7 @@ pre_flight_diagnostics() { echo "[ INFO ] Environment : System/User ($VIRTUAL_ENV)" fi echo "[ INFO ] Python : $(python --version)" - echo "[ INFO ] PYTHONPATH : ${PYTHONPATH:-}" + echo "[ INFO ] Import Mode : Installed package (PYTHONPATH unset)" if ! command -v pytest >/dev/null 2>&1; then echo "[ FAIL ] Tooling : Pytest missing (uv sync required)" diff --git a/scripts/validate_docs.py b/scripts/validate_docs.py index 156aca2c..40a082c9 100755 --- a/scripts/validate_docs.py +++ b/scripts/validate_docs.py @@ -33,7 +33,9 @@ import importlib import json +import os import re +import subprocess import sys import tomllib from dataclasses import dataclass, field @@ -56,6 +58,7 @@ class CheckConfig: skip_markers: list[str] parser_path: str language: str = "ftl" + python_exec_globs: list[str] = field(default_factory=list) @classmethod def from_pyproject(cls, root: Path) -> Self: @@ -81,6 +84,7 @@ def from_pyproject(cls, root: Path) -> Self: skip_markers=config.get("skip_markers", []), parser_path=config.get("parser_path", ""), language=config.get("language", "ftl"), + python_exec_globs=config.get("python_exec_globs", []), ) @@ -93,6 +97,7 @@ class ExampleFailure: content: str error: str error_type: str = "SyntaxError" + language: str = "ftl" @dataclass @@ -120,6 +125,7 @@ def to_json(self) -> str: { "file": f.file, "line": f.line, + "language": f.language, "error_type": f.error_type, "message": f.error, "snippet": f.content[:100] + "...", @@ -146,6 +152,37 @@ def get_parser(path: str) -> Any: return None +def _python_env(root: Path) -> dict[str, str]: + """Return subprocess environment for installed-package snippet execution.""" + del root + env = dict(**os.environ) + env.pop("PYTHONPATH", None) + return env + + +def validate_python_code(code: str, root: Path) -> str | None: + """Execute a Python documentation block in isolation.""" + try: + result = subprocess.run( + [sys.executable, "-c", code], + cwd=root, + env=_python_env(root), + text=True, + capture_output=True, + timeout=20, + check=False, + ) + except subprocess.TimeoutExpired as exc: + return f"TimeoutExpired: {exc!s}" + + if result.returncode == 0: + return None + + stderr = result.stderr.strip() + stdout = result.stdout.strip() + return stderr or stdout or f"process exited with code {result.returncode}" + + def validate_code(code: str, parser: Any) -> str | None: """Validate a code block using the provided parser. @@ -197,13 +234,16 @@ def process_file( report.files_checked += 1 rel_path = str(md_file.relative_to(root)) + python_enabled = any(md_file.match(pattern) for pattern in config.python_exec_globs) for match in pattern.finditer(content): indent = match.group(1) language = match.group(2).lower() code_block = match.group(3) - if language != config.language: + should_validate_ftl = language == config.language + should_validate_python = python_enabled and language == "python" + if not should_validate_ftl and not should_validate_python: continue report.examples_validated += 1 @@ -218,11 +258,25 @@ def process_file( if any(m in code_block for m in config.skip_markers): continue - error = validate_code(code_block, parser) + if should_validate_python: + error = validate_python_code(code_block, root) + error_type = "PythonRuntimeError" + failure_language = "python" + else: + error = validate_code(code_block, parser) + error_type = "SyntaxError" + failure_language = config.language if error: line_num = content[: match.start()].count("\n") + 2 report.failures.append( - ExampleFailure(file=rel_path, line=line_num, content=code_block, error=error) + ExampleFailure( + file=rel_path, + line=line_num, + content=code_block, + error=error, + error_type=error_type, + language=failure_language, + ) ) diff --git a/scripts/validate_version.py b/scripts/validate_version.py index 00918f22..f4ed1eb4 100755 --- a/scripts/validate_version.py +++ b/scripts/validate_version.py @@ -12,22 +12,21 @@ CHECKS PERFORMED: CRITICAL (exit 1 — fail build): - 1. Runtime __version__ matches pyproject.toml [version_sync] + 1. Installed package version matches pyproject.toml [version_sync] 2. Version follows semantic versioning (MAJOR.MINOR.PATCH) [semver] 3. Version is not a development placeholder [not_placeholder] DOCUMENTATION (exit 2 — fail build): - 4. All docs/DOC_*.md frontmatter has correct project_version [doc_frontmatter] - 5. docs/QUICK_REFERENCE.md footer has correct version [quick_reference] - 6. docs/TERMINOLOGY.md footer has correct version [terminology] + 4. Configured markdown frontmatter declares the current version [configurable_frontmatter] + 5. Configured markdown footers declare the current version [configurable_footers] INFORMATIONAL (exit 0 — warn only): - 7. CHANGELOG.md mentions current version [changelog_entry] - 8. CHANGELOG.md has version link at bottom [changelog_link] + 6. CHANGELOG.md mentions current version [changelog_entry] + 7. CHANGELOG.md has version link at bottom [changelog_link] NOTES ON VACUOUS PASSES: - Checks 4-6 are "if present, must be correct." If a doc file does not - exist, or does not contain the version field/footer, the check passes and + Documentation checks are "if present, must be correct." If a configured doc + file does not exist, or does not contain the configured version field, the check passes and reports "(skipped)". This is intentional: the checks activate as the project grows, without requiring maintenance of this script. @@ -52,14 +51,16 @@ import re import sys import tomllib +from dataclasses import dataclass from pathlib import Path -from typing import Any, NamedTuple +from typing import Any # ============================================================================== # CONFIGURATION # ============================================================================== NO_COLOR = os.environ.get("NO_COLOR", "") == "1" +type PyProjectData = dict[str, Any] class Colors: @@ -80,7 +81,8 @@ class Colors: SEVERITY_WARNING = "warning" # exit 0 (informational) -class CheckResult(NamedTuple): +@dataclass(frozen=True, slots=True) +class CheckResult: """Result of a single validation check.""" name: str @@ -94,7 +96,7 @@ class CheckResult(NamedTuple): # ============================================================================== -def load_pyproject(root: Path) -> dict: # type: ignore[type-arg] +def load_pyproject(root: Path) -> PyProjectData: """Load and return the pyproject.toml data dict. Raises SystemExit(3) if the file is missing or malformed. @@ -117,13 +119,13 @@ def load_pyproject(root: Path) -> dict: # type: ignore[type-arg] sys.exit(3) -def get_pyproject_version(data: dict) -> str | None: # type: ignore[type-arg] +def get_pyproject_version(data: PyProjectData) -> str | None: """Extract version from already-loaded pyproject.toml data.""" raw = data.get("project", {}).get("version") return str(raw) if raw is not None else None -def get_project_name(data: dict) -> str: # type: ignore[type-arg] +def get_project_name(data: PyProjectData) -> str: """Extract [project].name from already-loaded pyproject.toml data.""" return str(data.get("project", {}).get("name", "unknown")) @@ -150,7 +152,7 @@ def get_runtime_version(package_name: str) -> str | None: # ============================================================================== -def check_version_sync(data: dict, package_name: str) -> CheckResult: # type: ignore[type-arg] +def check_version_sync(data: PyProjectData, package_name: str) -> CheckResult: """CRITICAL: installed package version must match pyproject.toml.""" pyproject_version = get_pyproject_version(data) @@ -194,7 +196,7 @@ def check_version_sync(data: dict, package_name: str) -> CheckResult: # type: i ) -def check_semver(data: dict) -> CheckResult: # type: ignore[type-arg] +def check_semver(data: PyProjectData) -> CheckResult: """CRITICAL: version must be valid semantic versioning (MAJOR.MINOR.PATCH) with non-negative integer components. @@ -244,7 +246,7 @@ def check_semver(data: dict) -> CheckResult: # type: ignore[type-arg] ) -def check_not_placeholder(data: dict) -> CheckResult: # type: ignore[type-arg] +def check_not_placeholder(data: PyProjectData) -> CheckResult: """CRITICAL: version must not be a development placeholder.""" version = get_pyproject_version(data) @@ -439,7 +441,7 @@ def check_configurable_footers( return results -def check_changelog_entry(data: dict, root: Path) -> CheckResult: # type: ignore[type-arg] +def check_changelog_entry(data: PyProjectData, root: Path) -> CheckResult: """INFORMATIONAL: CHANGELOG.md should document the current version.""" version = get_pyproject_version(data) if version is None: @@ -497,7 +499,7 @@ def check_changelog_entry(data: dict, root: Path) -> CheckResult: # type: ignor ) -def check_changelog_link(data: dict, root: Path) -> CheckResult: # type: ignore[type-arg] +def check_changelog_link(data: PyProjectData, root: Path) -> CheckResult: """INFORMATIONAL: CHANGELOG.md should have a hyperlink for the current version.""" version = get_pyproject_version(data) if version is None: @@ -629,11 +631,9 @@ def main() -> int: data = load_pyproject(root) # Derive project identity dynamically — no hardcoded strings - package_name = get_project_name(data) # e.g. "ftllexengine" - project_display_name = package_name.capitalize() # e.g. "Ftllexengine" - # Better: if the project name uses title-casing hints, derive it properly - # e.g. "ftllexengine" → "FTLLexEngine" via pyproject [tool.project-display-name] - # Fallback: capitalise first letter only (safe for any project name) + package_name = get_project_name(data) + val_config = data.get("tool", {}).get("validate-version", {}) + project_display_name = str(val_config.get("project_display_name", package_name)) canonical_version = get_pyproject_version(data) or "unknown" print(f"{Colors.BOLD}{Colors.CYAN}=== Version Consistency Check ==={Colors.RESET}") @@ -651,7 +651,6 @@ def main() -> int: ] # Configurable documentation checks - val_config = data.get("tool", {}).get("validate-version", {}) if val_config: frontmatter_globs = val_config.get("frontmatter_globs", []) frontmatter_key = val_config.get("frontmatter_key", "") diff --git a/scripts/verify-github-release.sh b/scripts/verify-github-release.sh new file mode 100755 index 00000000..dc8b790d --- /dev/null +++ b/scripts/verify-github-release.sh @@ -0,0 +1,80 @@ +#!/usr/bin/env bash + +set -euo pipefail + +die() { + printf 'error: %s\n' "$1" >&2 + exit 1 +} + +resolve_script_dir() { + local source_path="${BASH_SOURCE[0]}" + while [[ -h "${source_path}" ]]; do + local source_dir + source_dir="$(cd -P -- "$(dirname -- "${source_path}")" && pwd)" + source_path="$(readlink "${source_path}")" + if [[ "${source_path}" != /* ]]; then + source_path="${source_dir}/${source_path}" + fi + done + cd -P -- "$(dirname -- "${source_path}")" && pwd +} + +read_pyproject_field() { + local field="$1" + python3 - "${repo_root}/pyproject.toml" "${field}" <<'PY' +from __future__ import annotations + +import sys +import tomllib + +pyproject_path = sys.argv[1] +field = sys.argv[2] + +with open(pyproject_path, "rb") as handle: + project = tomllib.load(handle)["project"] + +if field == "normalized_name": + print(project["name"].replace("-", "_")) +elif field == "version": + print(project["version"]) +else: + raise SystemExit(f"unsupported field: {field}") +PY +} + +readonly script_dir="$(resolve_script_dir)" +readonly repo_root="$(cd -P -- "${script_dir}/.." && pwd)" +readonly normalized_name="$(read_pyproject_field normalized_name)" +readonly version="$(read_pyproject_field version)" +readonly tag_name="${1:-${RELEASE_TAG:-${GITHUB_REF_NAME:-}}}" +readonly expected_tag="v${version}" +readonly expected_assets=( + "${normalized_name}-${version}.tar.gz" + "${normalized_name}-${version}-py3-none-any.whl" + "${normalized_name}-${version}.sha256" +) + +[[ -n "${GH_TOKEN:-}" ]] || die "GH_TOKEN is required" +[[ -n "${tag_name}" ]] || die "tag name is required" +[[ "${tag_name}" == "${expected_tag}" ]] || die "expected tag ${expected_tag}, got ${tag_name}" + +release_tag="$(gh release view "${tag_name}" --json tagName --jq '.tagName')" +[[ "${release_tag}" == "${tag_name}" ]] || die \ + "expected release tag ${tag_name}, got ${release_tag}" + +is_draft="$(gh release view "${tag_name}" --json isDraft --jq '.isDraft')" +[[ "${is_draft}" == "false" ]] || die "release ${tag_name} is still a draft" + +is_prerelease="$(gh release view "${tag_name}" --json isPrerelease --jq '.isPrerelease')" +[[ "${is_prerelease}" == "false" ]] || die "release ${tag_name} is marked prerelease" + +for asset_name in "${expected_assets[@]}"; do + has_asset="$(gh release view "${tag_name}" --json assets --jq \ + ".assets | map(.name) | index(\"${asset_name}\") != null")" + [[ "${has_asset}" == "true" ]] || die \ + "release ${tag_name} is missing required asset ${asset_name}" +done + +release_url="$(gh release view "${tag_name}" --json url --jq '.url')" +printf 'Verified GitHub release handoff: %s\n' "${release_url}" diff --git a/src/ftllexengine/__init__.py b/src/ftllexengine/__init__.py index 9ea9d2e1..83e06d3e 100644 --- a/src/ftllexengine/__init__.py +++ b/src/ftllexengine/__init__.py @@ -28,8 +28,11 @@ LocalizationCacheStats - Cache statistics for all locales in a FluentLocalization Locale Utilities (no Babel dependency): - LoadStatus - Enum of resource load statuses (SUCCESS, NOT_FOUND, ERROR, SKIPPED) + LoadStatus - Enum of resource load statuses (SUCCESS, NOT_FOUND, ERROR) LocaleCode - Type alias for BCP-47 / POSIX locale codes (e.g. "en_US", "de") + MessageId - Type alias for Fluent message identifiers + ResourceId - Type alias for loader resource identifiers + FTLSource - Type alias for raw Fluent source text normalize_locale - Convert BCP-47 to canonical lowercase POSIX form get_system_locale - Detect locale from OS environment variables @@ -103,6 +106,7 @@ from .analysis import detect_cycles from .core.locale_utils import get_system_locale, normalize_locale, require_locale_code +from .core.semantic_types import FTLSource, LocaleCode, MessageId, ResourceId # Domain validators - no Babel dependency; no circular import risk from .core.validators import ( @@ -143,7 +147,6 @@ require_territory_code, ) from .introspection.message import MessageVariableValidationResult, validate_message_variables -from .localization.types import LocaleCode from .syntax import parse as parse_ftl from .syntax import parse_stream as parse_stream_ftl from .syntax import serialize as serialize_ftl @@ -288,9 +291,9 @@ def clear_module_caches( ``bundle.clear_cache()``. Example: - >>> import ftllexengine - >>> ftllexengine.clear_module_caches() # Clear all caches - >>> ftllexengine.clear_module_caches( # Clear only ISO + message caches + >>> import ftllexengine # doctest: +SKIP + >>> ftllexengine.clear_module_caches() # Clear all caches # doctest: +SKIP + >>> ftllexengine.clear_module_caches( # Clear only ISO + message caches # doctest: +SKIP ... components=frozenset({'introspection.iso', 'introspection.message'}) ... ) """ @@ -400,7 +403,10 @@ def _want(name: str) -> bool: "SyntaxIntegrityError", "WriteConflictError", # Locale utilities (no Babel dependency) + "FTLSource", "LocaleCode", + "MessageId", + "ResourceId", "get_system_locale", "normalize_locale", # Domain validators (no Babel dependency) diff --git a/src/ftllexengine/__init__.pyi b/src/ftllexengine/__init__.pyi index d98ac4b2..f1af4a18 100644 --- a/src/ftllexengine/__init__.pyi +++ b/src/ftllexengine/__init__.pyi @@ -6,6 +6,10 @@ from .core.babel_compat import get_cldr_version as get_cldr_version from .core.locale_utils import get_system_locale as get_system_locale from .core.locale_utils import normalize_locale as normalize_locale from .core.locale_utils import require_locale_code as require_locale_code +from .core.semantic_types import FTLSource as FTLSource +from .core.semantic_types import LocaleCode as LocaleCode +from .core.semantic_types import MessageId as MessageId +from .core.semantic_types import ResourceId as ResourceId # Domain validators (no Babel dependency) from .core.validators import require_date as require_date @@ -81,7 +85,6 @@ from .localization import LocalizationCacheStats as LocalizationCacheStats from .localization import PathResourceLoader as PathResourceLoader from .localization import ResourceLoader as ResourceLoader from .localization import ResourceLoadResult as ResourceLoadResult -from .localization.types import LocaleCode as LocaleCode from .runtime import AsyncFluentBundle as AsyncFluentBundle from .runtime import FluentBundle as FluentBundle from .runtime import FluentNumber as FluentNumber @@ -143,7 +146,10 @@ __all__: list[str] = [ "SyntaxIntegrityError", "WriteConflictError", # Locale utilities (no Babel dependency) + "FTLSource", "LocaleCode", + "MessageId", + "ResourceId", "get_system_locale", "normalize_locale", # Domain validators (no Babel dependency) diff --git a/src/ftllexengine/analysis/graph.py b/src/ftllexengine/analysis/graph.py index f6400bfd..6793f88f 100644 --- a/src/ftllexengine/analysis/graph.py +++ b/src/ftllexengine/analysis/graph.py @@ -1,208 +1,60 @@ -"""Graph algorithms for dependency analysis. +"""Graph analysis facade for public dependency helpers. -Provides cycle detection using iterative depth-first search and -namespace-prefixed dependency set construction for validating -message/term reference graphs in FTL resources. - -Python 3.13+. +The implementation lives in ``ftllexengine.core.reference_graph`` so lower +layers can use the same algorithms without importing the higher-level analysis +package. This module remains the stable public namespace for callers and keeps +module-level compatibility for monkeypatch-based tests. """ from __future__ import annotations -from typing import TYPE_CHECKING, Final - -if TYPE_CHECKING: - from collections.abc import Mapping, Sequence +import ftllexengine.core.reference_graph as _core_graph +from ftllexengine.constants import ( + MAX_DETECTED_CYCLES as _DEFAULT_MAX_DETECTED_CYCLES, +) +from ftllexengine.constants import ( + MAX_GRAPH_DFS_STACK as _DEFAULT_MAX_GRAPH_DFS_STACK, +) -from ftllexengine.constants import MAX_DETECTED_CYCLES, MAX_GRAPH_DFS_STACK +MAX_DETECTED_CYCLES = _DEFAULT_MAX_DETECTED_CYCLES +MAX_GRAPH_DFS_STACK = _DEFAULT_MAX_GRAPH_DFS_STACK __all__ = [ + "MAX_DETECTED_CYCLES", + "MAX_GRAPH_DFS_STACK", + "_canonicalize_cycle", "detect_cycles", "entry_dependency_set", "make_cycle_key", ] -_ENTERING: Final[bool] = True -_EXITING: Final[bool] = False - def entry_dependency_set( message_refs: frozenset[str], term_refs: frozenset[str], ) -> frozenset[str]: - """Build a namespace-prefixed dependency set from reference sets. - - Combines message and term references into a single frozenset with - ``msg:`` and ``term:`` prefixes. This is the canonical key format - used by ``detect_cycles`` for cross-namespace cycle detection. - - Args: - message_refs: Message IDs referenced by the entry. - term_refs: Term IDs referenced by the entry. - - Returns: - Frozenset of prefixed dependency keys - (e.g., ``frozenset({"msg:welcome", "term:brand"})``). - """ - return frozenset( - f"{prefix}:{r}" - for prefix, refs in (("msg", message_refs), ("term", term_refs)) - for r in refs - ) - - -def _canonicalize_cycle(cycle: Sequence[str]) -> tuple[str, ...]: - """Canonicalize a cycle path by rotating to start with smallest element. - - Preserves directional information (A->B->C vs A->C->B remain distinct) - while normalizing the starting point for deduplication. - - The input cycle has the format ``[A, B, C, A]`` where the last element - repeats the first to close the cycle. - - Args: - cycle: Cycle path with closing repeat - (e.g., ``["A", "B", "C", "A"]``). - - Returns: - Canonicalized cycle as tuple, rotated to start with - lexicographically smallest element. Closing repeat preserved. - """ - if len(cycle) <= 1: - return tuple(cycle) - - nodes = list(cycle[:-1]) - min_idx = nodes.index(min(nodes)) - rotated = nodes[min_idx:] + nodes[:min_idx] - return (*rotated, rotated[0]) - - -def make_cycle_key(cycle: Sequence[str]) -> str: - """Create a canonical string key from a cycle for display. - - Args: - cycle: Cycle path as sequence of node IDs. - - Returns: - Canonical string key in format ``"A -> B -> C -> A"``. - """ - canonical = _canonicalize_cycle(cycle) - return " -> ".join(canonical) - - -def detect_cycles(dependencies: Mapping[str, set[str]]) -> list[list[str]]: - """Detect cycles in a dependency graph using bounded iterative DFS. - - Implements iterative DFS with explicit stack to avoid RecursionError - on deep graphs (>1000 nodes in linear chain). Returns up to - ``MAX_DETECTED_CYCLES`` unique cycles; exits early once that limit is - reached, as FTL validation requires actionable diagnostics rather than - exhaustive cycle enumeration. - - Args: - dependencies: Mapping from node ID to set of referenced node IDs. - Example: ``{"a": {"b", "c"}, "b": {"c"}, "c": {"a"}}`` - - Returns: - List of up to ``MAX_DETECTED_CYCLES`` cycles, where each cycle is - a list of node IDs forming the cycle path (closed: last element - repeats first). Empty list if no cycles detected. Cycles are - deduplicated via canonical tuple form. - - Complexity: - Time: O(V * E) for typical sparse FTL graphs. In adversarial dense - graphs (complete K_n), exploration is bounded by ``MAX_GRAPH_DFS_STACK`` - work-queue entries and ``MAX_DETECTED_CYCLES`` cycle collection. - Space: O(MAX_GRAPH_DFS_STACK) worst case for the DFS work queue; - O(V) for path and rec_stack tracking. - - Correctness: - The ``visited`` guard used in a simple DFS causes false negatives - when a graph has multiple paths to the same intermediate node that - closes a cycle. Example: A→B→D→A and A→C→D→A share node D; the - second cycle is missed if D is marked globally visited after the - first traversal. This implementation avoids that defect by NOT - applying a global visited guard on neighbors. Instead: - - ``rec_stack`` prevents re-entering nodes already on the current - DFS path (back-edge detection and termination guarantee). - - ``globally_visited`` tracks only start nodes whose reachable - subgraphs have been fully explored, safely pruning the outer - for-loop without suppressing intra-DFS re-exploration. - - ``MAX_GRAPH_DFS_STACK`` prevents the O(n!) work-queue growth that - occurs in dense graphs where every node is reachable via - exponentially many distinct paths. - - Security: - Uses iterative DFS to prevent stack overflow attacks via - deeply nested dependency chains in untrusted FTL resources. - ``MAX_DETECTED_CYCLES`` and ``MAX_GRAPH_DFS_STACK`` prevent memory - exhaustion from adversarial complete or near-complete graphs. - """ - globally_visited: set[str] = set() - cycles: list[list[str]] = [] - seen_canonical: set[tuple[str, ...]] = set() - - for start_node in dependencies: - if start_node in globally_visited: - continue - if len(cycles) >= MAX_DETECTED_CYCLES: - break - - path: list[str] = [] - rec_stack: set[str] = set() - - stack: list[tuple[str, bool, list[str]]] = [ - (start_node, _ENTERING, list(dependencies.get(start_node, set()))) - ] - - while stack and len(cycles) < MAX_DETECTED_CYCLES: - node, entering, neighbors = stack.pop() + """Build a namespace-prefixed dependency set from reference sets.""" + return _core_graph.entry_dependency_set(message_refs, term_refs) - if entering: - # Prevent re-entering a node already on the current DFS path. - # Without this guard the same node could be pushed repeatedly, - # creating an infinite exploration loop through the cycle. - # Nodes in rec_stack are caught by the back-edge guard before - # being pushed (ENTERING), so this branch is a permanent safety - # net that cannot be triggered by the current algorithm. - if node in rec_stack: # pragma: no cover - continue - globally_visited.add(node) - rec_stack.add(node) - path.append(node) +def make_cycle_key(cycle: list[str] | tuple[str, ...]) -> str: + """Create a canonical display key from a cycle path.""" + return _core_graph.make_cycle_key(cycle) - stack.append((node, _EXITING, [])) - for neighbor in neighbors: - if neighbor not in rec_stack: - # Forward/cross edge: push for exploration if budget allows. - # No globally_visited guard here: nodes reachable from - # multiple branches of the current path must be explored - # via each branch independently to find all cycles - # (e.g., A→B→D→A and A→C→D→A both require exploring D). - # MAX_GRAPH_DFS_STACK caps the work queue: without it, - # dense graphs cause O(n!) queue growth as every node - # is re-pushed for each distinct incoming path. - if len(stack) < MAX_GRAPH_DFS_STACK: - stack.append(( - neighbor, - _ENTERING, - list(dependencies.get(neighbor, set())), - )) - continue - # Back edge: neighbor is an ancestor in the current path. - cycle_start = path.index(neighbor) - cycle = [*path[cycle_start:], neighbor] - canonical = _canonicalize_cycle(cycle) - if canonical not in seen_canonical: - seen_canonical.add(canonical) - cycles.append(cycle) - if len(cycles) >= MAX_DETECTED_CYCLES: - break +def _canonicalize_cycle(cycle: list[str] | tuple[str, ...]) -> tuple[str, ...]: + """Canonicalize a cycle path for compatibility callers and fuzzers.""" + return _core_graph.canonicalize_cycle(cycle) - else: - path.pop() - rec_stack.discard(node) - return cycles +def detect_cycles(dependencies: dict[str, set[str]]) -> list[list[str]]: + """Detect cycles while honoring monkeypatched module-level limits.""" + original_max_cycles = _core_graph.MAX_DETECTED_CYCLES + original_max_stack = _core_graph.MAX_GRAPH_DFS_STACK + _core_graph.MAX_DETECTED_CYCLES = MAX_DETECTED_CYCLES + _core_graph.MAX_GRAPH_DFS_STACK = MAX_GRAPH_DFS_STACK + try: + return _core_graph.detect_cycles(dependencies) + finally: + _core_graph.MAX_DETECTED_CYCLES = original_max_cycles + _core_graph.MAX_GRAPH_DFS_STACK = original_max_stack diff --git a/src/ftllexengine/core/depth_guard.py b/src/ftllexengine/core/depth_guard.py index e8623f2a..453cf7f3 100644 --- a/src/ftllexengine/core/depth_guard.py +++ b/src/ftllexengine/core/depth_guard.py @@ -13,17 +13,33 @@ import logging import sys +from collections.abc import Callable from dataclasses import dataclass, field from typing import Self from ftllexengine.constants import MAX_DEPTH -from ftllexengine.diagnostics import ErrorCategory, FrozenFluentError -from ftllexengine.diagnostics.templates import ErrorTemplate -__all__ = ["DepthGuard", "depth_clamp"] +__all__ = ["DepthGuard", "DepthLimitExceededError", "depth_clamp"] logger = logging.getLogger(__name__) +type DepthErrorFactory = Callable[[int], BaseException] + + +class DepthLimitExceededError(ValueError): + """Raised when DepthGuard detects recursion beyond the configured limit.""" + + __slots__ = ("max_depth",) + + def __init__(self, max_depth: int) -> None: + self.max_depth = max_depth + super().__init__(f"Depth limit exceeded (max_depth={max_depth})") + + +def _default_depth_error(max_depth: int) -> DepthLimitExceededError: + """Build the default core-layer depth exception.""" + return DepthLimitExceededError(max_depth) + @dataclass(slots=True) class DepthGuard: @@ -41,7 +57,7 @@ class DepthGuard: Explicit check (non-context-manager call sites): guard = DepthGuard() - guard.check() # Raises FrozenFluentError if limit exceeded + guard.check() # Raises DepthLimitExceededError if limit exceeded Mutability Note: Intentionally mutable (not frozen=True) to enable stateful depth @@ -59,24 +75,30 @@ class DepthGuard: max_depth: int = MAX_DEPTH current_depth: int = field(default=0, init=False) + error_factory: DepthErrorFactory = field( + default=_default_depth_error, + repr=False, + compare=False, + ) def __post_init__(self) -> None: """Clamp max_depth against Python recursion limit.""" self.max_depth = depth_clamp(self.max_depth) + def _raise_depth_error(self) -> None: + """Raise the configured exception for a depth-limit breach.""" + raise self.error_factory(self.max_depth) + def __enter__(self) -> Self: """Enter guarded section, increment depth. Validates depth limit BEFORE incrementing to prevent state corruption - if FrozenFluentError is raised. Since __exit__ is not called when + if the configured exception is raised. Since __exit__ is not called when __enter__ raises, incrementing first would leave current_depth permanently elevated, causing all subsequent operations to fail. """ if self.current_depth >= self.max_depth: - diag = ErrorTemplate.depth_exceeded(self.max_depth) - raise FrozenFluentError( - str(diag), ErrorCategory.RESOLUTION, diagnostic=diag, - ) + self._raise_depth_error() self.current_depth += 1 return self @@ -95,13 +117,13 @@ def check(self) -> None: Use when context manager pattern is not convenient. Raises: - FrozenFluentError: If depth limit exceeded (category=RESOLUTION) + DepthLimitExceededError: If depth limit exceeded and the default + core-layer error factory is in use. + BaseException: Any caller-supplied exception produced by + ``error_factory``. """ if self.current_depth >= self.max_depth: - diag = ErrorTemplate.depth_exceeded(self.max_depth) - raise FrozenFluentError( - str(diag), ErrorCategory.RESOLUTION, diagnostic=diag, - ) + self._raise_depth_error() def depth_clamp(requested_depth: int, reserve_frames: int = 50) -> int: @@ -119,11 +141,11 @@ def depth_clamp(requested_depth: int, reserve_frames: int = 50) -> int: Safe depth value, clamped if necessary Example: - >>> import sys - >>> sys.setrecursionlimit(200) - >>> depth_clamp(100) # OK, within limit + >>> import sys # doctest: +SKIP + >>> sys.setrecursionlimit(200) # doctest: +SKIP + >>> depth_clamp(100) # OK, within limit # doctest: +SKIP 100 - >>> depth_clamp(500) # Exceeds limit, clamped to 150 + >>> depth_clamp(500) # Exceeds limit, clamped to 150 # doctest: +SKIP 150 """ max_safe_depth = sys.getrecursionlimit() - reserve_frames diff --git a/src/ftllexengine/core/identifier_validation.py b/src/ftllexengine/core/identifier_validation.py index d27290ae..db0a4c20 100644 --- a/src/ftllexengine/core/identifier_validation.py +++ b/src/ftllexengine/core/identifier_validation.py @@ -61,11 +61,11 @@ def is_identifier_start(ch: str) -> bool: True if character is ASCII letter (a-z, A-Z), False otherwise Example: - >>> is_identifier_start('a') + >>> is_identifier_start('a') # doctest: +SKIP True - >>> is_identifier_start('1') + >>> is_identifier_start('1') # doctest: +SKIP False - >>> is_identifier_start('é') + >>> is_identifier_start('é') # doctest: +SKIP False """ return len(ch) == 1 and ch.isascii() and ch.isalpha() @@ -87,15 +87,15 @@ def is_identifier_char(ch: str) -> bool: True if character is ASCII letter, ASCII digit, hyphen, or underscore Example: - >>> is_identifier_char('a') + >>> is_identifier_char('a') # doctest: +SKIP True - >>> is_identifier_char('5') + >>> is_identifier_char('5') # doctest: +SKIP True - >>> is_identifier_char('-') + >>> is_identifier_char('-') # doctest: +SKIP True - >>> is_identifier_char('_') + >>> is_identifier_char('_') # doctest: +SKIP True - >>> is_identifier_char('é') + >>> is_identifier_char('é') # doctest: +SKIP False """ return len(ch) == 1 and ch.isascii() and (ch.isalnum() or ch in "-_") @@ -121,15 +121,15 @@ def is_valid_identifier(name: str) -> bool: - Length must not exceed MAX_IDENTIFIER_LENGTH (256 characters) Example: - >>> is_valid_identifier("message-id") + >>> is_valid_identifier("message-id") # doctest: +SKIP True - >>> is_valid_identifier("message_id_2") + >>> is_valid_identifier("message_id_2") # doctest: +SKIP True - >>> is_valid_identifier("1message") + >>> is_valid_identifier("1message") # doctest: +SKIP False - >>> is_valid_identifier("") + >>> is_valid_identifier("") # doctest: +SKIP False - >>> is_valid_identifier("a" * 300) + >>> is_valid_identifier("a" * 300) # doctest: +SKIP False """ # Empty check diff --git a/src/ftllexengine/core/locale_utils.py b/src/ftllexengine/core/locale_utils.py index 6b305939..1b5a4fea 100644 --- a/src/ftllexengine/core/locale_utils.py +++ b/src/ftllexengine/core/locale_utils.py @@ -31,7 +31,7 @@ if TYPE_CHECKING: from babel import Locale - from ftllexengine.localization.types import LocaleCode + from ftllexengine.core.semantic_types import LocaleCode __all__ = [ "clear_locale_cache", @@ -90,13 +90,13 @@ def normalize_locale(locale_code: str) -> str: Lowercase POSIX-formatted locale code (e.g., "en_us", "pt_br") Example: - >>> normalize_locale("en-US") + >>> normalize_locale("en-US") # doctest: +SKIP 'en_us' - >>> normalize_locale("EN-US") + >>> normalize_locale("EN-US") # doctest: +SKIP 'en_us' - >>> normalize_locale("pt-BR") + >>> normalize_locale("pt-BR") # doctest: +SKIP 'pt_br' - >>> normalize_locale("en") # Already normalized + >>> normalize_locale("en") # Already normalized # doctest: +SKIP 'en' """ return locale_code.replace("-", "_").lower() @@ -205,10 +205,10 @@ def get_babel_locale(locale_code: str) -> Locale: ValueError: If locale format is invalid Example: - >>> locale = get_babel_locale("en-US") - >>> locale.language + >>> locale = get_babel_locale("en-US") # doctest: +SKIP + >>> locale.language # doctest: +SKIP 'en' - >>> locale.territory + >>> locale.territory # doctest: +SKIP 'US' """ normalized_code = require_locale_code(locale_code, "locale_code") @@ -242,12 +242,12 @@ def get_system_locale(*, raise_on_failure: bool = False) -> str: RuntimeError: If raise_on_failure is True and locale cannot be determined. Example: - >>> import os - >>> os.environ['LANG'] = 'de_DE.UTF-8' - >>> get_system_locale() + >>> import os # doctest: +SKIP + >>> os.environ['LANG'] = 'de_DE.UTF-8' # doctest: +SKIP + >>> get_system_locale() # doctest: +SKIP 'de_de' - >>> get_system_locale(raise_on_failure=True) # May raise if no locale set + >>> get_system_locale(raise_on_failure=True) # May raise if no locale set # doctest: +SKIP 'de_de' """ # stdlib locale module deferred: has significant initialization overhead @@ -303,7 +303,7 @@ def clear_locale_cache() -> None: regardless of whether Babel is installed. Example: - >>> from ftllexengine.core.locale_utils import clear_locale_cache - >>> clear_locale_cache() # Clears all cached Locale objects + >>> from ftllexengine.core.locale_utils import clear_locale_cache # doctest: +SKIP + >>> clear_locale_cache() # Clears all cached Locale objects # doctest: +SKIP """ _get_babel_locale_normalized.cache_clear() diff --git a/src/ftllexengine/core/reference_graph.py b/src/ftllexengine/core/reference_graph.py new file mode 100644 index 00000000..fab324f5 --- /dev/null +++ b/src/ftllexengine/core/reference_graph.py @@ -0,0 +1,188 @@ +"""Reference-graph helpers shared across validation and runtime. + +Provides bounded dependency-graph algorithms plus the canonical namespace +encoding used for mixed message/term graphs. + +Python 3.13+. +""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, Final + +if TYPE_CHECKING: + from collections.abc import Mapping, Sequence + +from ftllexengine.constants import ( + MAX_DETECTED_CYCLES as _DEFAULT_MAX_DETECTED_CYCLES, +) +from ftllexengine.constants import ( + MAX_GRAPH_DFS_STACK as _DEFAULT_MAX_GRAPH_DFS_STACK, +) + +MAX_DETECTED_CYCLES = _DEFAULT_MAX_DETECTED_CYCLES +MAX_GRAPH_DFS_STACK = _DEFAULT_MAX_GRAPH_DFS_STACK + +__all__ = [ + "MAX_DETECTED_CYCLES", + "MAX_GRAPH_DFS_STACK", + "_canonicalize_cycle", + "canonicalize_cycle", + "detect_cycles", + "entry_dependency_set", + "make_cycle_key", +] + +_ENTERING: Final[bool] = True +_EXITING: Final[bool] = False + + +def _append_cycle( + *, + path: list[str], + neighbor: str, + cycles: list[list[str]], + seen_canonical: set[tuple[str, ...]], +) -> None: + """Append a newly discovered cycle if its canonical form is unique.""" + cycle_start = path.index(neighbor) + cycle = [*path[cycle_start:], neighbor] + canonical = canonicalize_cycle(cycle) + if canonical in seen_canonical: + return + seen_canonical.add(canonical) + cycles.append(cycle) + + +def _queue_neighbor( + *, + neighbor: str, + dependencies: Mapping[str, set[str]], + rec_stack: set[str], + stack: list[tuple[str, bool, list[str]]], +) -> None: + """Queue an unvisited neighbor while honoring DFS stack limits.""" + if neighbor in rec_stack or len(stack) >= MAX_GRAPH_DFS_STACK: + return + stack.append((neighbor, _ENTERING, list(dependencies.get(neighbor, set())))) + + +def _visit_entering_node( + *, + node: str, + neighbors: list[str], + dependencies: Mapping[str, set[str]], + globally_visited: set[str], + path: list[str], + rec_stack: set[str], + stack: list[tuple[str, bool, list[str]]], + cycles: list[list[str]], + seen_canonical: set[tuple[str, ...]], +) -> None: + """Process the DFS enter phase for one node.""" + if node in rec_stack: # pragma: no cover + return + + globally_visited.add(node) + rec_stack.add(node) + path.append(node) + stack.append((node, _EXITING, [])) + + for neighbor in neighbors: + if neighbor in rec_stack: + _append_cycle( + path=path, + neighbor=neighbor, + cycles=cycles, + seen_canonical=seen_canonical, + ) + if len(cycles) >= MAX_DETECTED_CYCLES: + return + continue + + _queue_neighbor( + neighbor=neighbor, + dependencies=dependencies, + rec_stack=rec_stack, + stack=stack, + ) + + +def _finish_node(*, node: str, path: list[str], rec_stack: set[str]) -> None: + """Process the DFS exit phase for one node.""" + path.pop() + rec_stack.discard(node) + + +def entry_dependency_set( + message_refs: frozenset[str], + term_refs: frozenset[str], +) -> frozenset[str]: + """Build a namespace-prefixed dependency set from reference sets.""" + return frozenset( + f"{prefix}:{ref}" + for prefix, refs in (("msg", message_refs), ("term", term_refs)) + for ref in refs + ) + + +def _canonicalize_cycle(cycle: Sequence[str]) -> tuple[str, ...]: + """Canonicalize a cycle path by rotating to start with smallest element.""" + if len(cycle) <= 1: + return tuple(cycle) + + nodes = list(cycle[:-1]) + min_idx = nodes.index(min(nodes)) + rotated = nodes[min_idx:] + nodes[:min_idx] + return (*rotated, rotated[0]) + + +def canonicalize_cycle(cycle: Sequence[str]) -> tuple[str, ...]: + """Canonicalize a cycle path into its stable tuple representation.""" + return _canonicalize_cycle(cycle) + + +def make_cycle_key(cycle: Sequence[str]) -> str: + """Create a canonical string key from a cycle for display.""" + canonical = canonicalize_cycle(cycle) + return " -> ".join(canonical) + + +def detect_cycles(dependencies: Mapping[str, set[str]]) -> list[list[str]]: + """Detect cycles in a dependency graph using bounded iterative DFS.""" + globally_visited: set[str] = set() + cycles: list[list[str]] = [] + seen_canonical: set[tuple[str, ...]] = set() + + for start_node in dependencies: + if start_node in globally_visited: + continue + if len(cycles) >= MAX_DETECTED_CYCLES: + break + + path: list[str] = [] + rec_stack: set[str] = set() + stack: list[tuple[str, bool, list[str]]] = [ + (start_node, _ENTERING, list(dependencies.get(start_node, set()))) + ] + + while stack and len(cycles) < MAX_DETECTED_CYCLES: + node, entering, neighbors = stack.pop() + + if not entering: + _finish_node(node=node, path=path, rec_stack=rec_stack) + continue + + _visit_entering_node( + node=node, + neighbors=neighbors, + dependencies=dependencies, + globally_visited=globally_visited, + path=path, + rec_stack=rec_stack, + stack=stack, + cycles=cycles, + seen_canonical=seen_canonical, + ) + + return cycles diff --git a/src/ftllexengine/core/semantic_types.py b/src/ftllexengine/core/semantic_types.py new file mode 100644 index 00000000..a1548e25 --- /dev/null +++ b/src/ftllexengine/core/semantic_types.py @@ -0,0 +1,30 @@ +"""Project-wide semantic type aliases. + +These aliases are the canonical low-layer home for semantic string types used +across runtime, localization, and documentation surfaces. Keeping them in the +core layer prevents lower modules from importing higher-level localization +helpers just to annotate identifiers or locale codes. + +Python 3.13+. Zero external dependencies. +""" + +from __future__ import annotations + +__all__ = [ + "FTLSource", + "LocaleCode", + "MessageId", + "ResourceId", +] + +type MessageId = str +"""Identifier for a Fluent message (for example ``"welcome"``).""" + +type LocaleCode = str +"""Locale identifier in BCP-47 or normalized POSIX form.""" + +type ResourceId = str +"""Logical Fluent resource identifier (for example ``"main.ftl"``).""" + +type FTLSource = str +"""Raw Fluent source text before parsing.""" diff --git a/src/ftllexengine/core/validators.py b/src/ftllexengine/core/validators.py index 5c14004a..28c5882a 100644 --- a/src/ftllexengine/core/validators.py +++ b/src/ftllexengine/core/validators.py @@ -61,17 +61,17 @@ def require_positive_int(value: object, field_name: str) -> int: ValueError: If value is zero or negative. Example: - >>> require_positive_int(42, "size") + >>> require_positive_int(42, "size") # doctest: +SKIP 42 - >>> require_positive_int(0, "size") + >>> require_positive_int(0, "size") # doctest: +SKIP Traceback (most recent call last): ... ValueError: size must be positive - >>> require_positive_int(-1, "size") + >>> require_positive_int(-1, "size") # doctest: +SKIP Traceback (most recent call last): ... ValueError: size must be positive - >>> require_positive_int(True, "size") + >>> require_positive_int(True, "size") # doctest: +SKIP Traceback (most recent call last): ... TypeError: size must be int, got bool @@ -114,14 +114,14 @@ def require_date(value: object, field_name: str) -> _date: TypeError: If value is not a date instance. Example: - >>> from datetime import date, datetime - >>> require_date(date(2024, 1, 15), "effective_date") + >>> from datetime import date, datetime # doctest: +SKIP + >>> require_date(date(2024, 1, 15), "effective_date") # doctest: +SKIP datetime.date(2024, 1, 15) - >>> require_date(datetime(2024, 1, 15, 9, 0), "effective_date") + >>> require_date(datetime(2024, 1, 15, 9, 0), "effective_date") # doctest: +SKIP Traceback (most recent call last): ... TypeError: effective_date must be date, got datetime - >>> require_date("2024-01-15", "effective_date") + >>> require_date("2024-01-15", "effective_date") # doctest: +SKIP Traceback (most recent call last): ... TypeError: effective_date must be date, got str @@ -160,14 +160,14 @@ def require_datetime(value: object, field_name: str) -> _datetime: TypeError: If value is not a datetime instance (including plain date). Example: - >>> from datetime import date, datetime - >>> require_datetime(datetime(2024, 1, 15, 9, 0), "created_at") + >>> from datetime import date, datetime # doctest: +SKIP + >>> require_datetime(datetime(2024, 1, 15, 9, 0), "created_at") # doctest: +SKIP datetime.datetime(2024, 1, 15, 9, 0) - >>> require_datetime(date(2024, 1, 15), "created_at") + >>> require_datetime(date(2024, 1, 15), "created_at") # doctest: +SKIP Traceback (most recent call last): ... TypeError: created_at must be datetime, got date - >>> require_datetime("2024-01-15T09:00:00", "created_at") + >>> require_datetime("2024-01-15T09:00:00", "created_at") # doctest: +SKIP Traceback (most recent call last): ... TypeError: created_at must be datetime, got str @@ -199,12 +199,14 @@ def require_fluent_number(value: object, field_name: str) -> FluentNumber: TypeError: If value is not a FluentNumber instance. Example: - >>> from ftllexengine.core.value_types import FluentNumber - >>> from decimal import Decimal - >>> fn = FluentNumber(value=Decimal("9.99"), formatted="9.99", precision=2) - >>> require_fluent_number(fn, "amount") + >>> from ftllexengine.core.value_types import FluentNumber # doctest: +SKIP + >>> from decimal import Decimal # doctest: +SKIP + >>> fn = FluentNumber( # doctest: +SKIP + ... value=Decimal("9.99"), formatted="9.99", precision=2 + ... ) + >>> require_fluent_number(fn, "amount") # doctest: +SKIP FluentNumber(value=Decimal('9.99'), formatted='9.99', precision=2) - >>> require_fluent_number(9.99, "amount") + >>> require_fluent_number(9.99, "amount") # doctest: +SKIP Traceback (most recent call last): ... TypeError: amount must be FluentNumber, got float @@ -214,4 +216,3 @@ def require_fluent_number(value: object, field_name: str) -> FluentNumber: raise TypeError(msg) return value - diff --git a/src/ftllexengine/core/value_types.py b/src/ftllexengine/core/value_types.py index e15116b7..39c56752 100644 --- a/src/ftllexengine/core/value_types.py +++ b/src/ftllexengine/core/value_types.py @@ -98,12 +98,12 @@ class FluentNumber: Must be >= 0 when set; negative precision has no CLDR meaning. Example: - >>> fn = FluentNumber(value=1, formatted="1.00", precision=2) - >>> str(fn) # Used in output + >>> fn = FluentNumber(value=1, formatted="1.00", precision=2) # doctest: +SKIP + >>> str(fn) # Used in output # doctest: +SKIP '1.00' - >>> fn.value # Used for plural matching + >>> fn.value # Used for plural matching # doctest: +SKIP 1 - >>> fn.precision # CLDR v operand: 2 visible fraction digits + >>> fn.precision # CLDR v operand: 2 visible fraction digits # doctest: +SKIP 2 Precision Semantics: @@ -179,11 +179,13 @@ def decimal_value(self) -> Decimal: returned unchanged. Example: - >>> fn = FluentNumber(value=42, formatted="42", precision=0) - >>> fn.decimal_value + >>> fn = FluentNumber(value=42, formatted="42", precision=0) # doctest: +SKIP + >>> fn.decimal_value # doctest: +SKIP Decimal('42') - >>> fn2 = FluentNumber(value=Decimal("1234.50"), formatted="1,234.50", precision=2) - >>> fn2.decimal_value + >>> fn2 = FluentNumber( # doctest: +SKIP + ... value=Decimal("1234.50"), formatted="1,234.50", precision=2 + ... ) + >>> fn2.decimal_value # doctest: +SKIP Decimal('1234.50') """ if isinstance(self.value, Decimal): @@ -446,9 +448,9 @@ def make_fluent_number( the formatted string, not a valid locale output). Example: - >>> make_fluent_number(Decimal("1234.50"), formatted="1 234,50") + >>> make_fluent_number(Decimal("1234.50"), formatted="1 234,50") # doctest: +SKIP FluentNumber(value=Decimal('1234.50'), formatted='1 234,50', precision=2) - >>> make_fluent_number(42) + >>> make_fluent_number(42) # doctest: +SKIP FluentNumber(value=42, formatted='42', precision=0) """ rendered = str(value) if formatted is None else formatted diff --git a/src/ftllexengine/diagnostics/depth.py b/src/ftllexengine/diagnostics/depth.py new file mode 100644 index 00000000..38cc5576 --- /dev/null +++ b/src/ftllexengine/diagnostics/depth.py @@ -0,0 +1,23 @@ +"""Depth-limit error adapters for higher layers. + +Core depth tracking stays independent of diagnostics; higher layers that want +domain-specific ``FrozenFluentError`` instances opt into them through these +builders. +""" + +from __future__ import annotations + +from ftllexengine.diagnostics.errors import ErrorCategory, FrozenFluentError +from ftllexengine.diagnostics.templates import ErrorTemplate + +__all__ = ["resolution_depth_error"] + + +def resolution_depth_error(max_depth: int) -> FrozenFluentError: + """Build the canonical resolution-category depth error.""" + diagnostic = ErrorTemplate.depth_exceeded(max_depth) + return FrozenFluentError( + str(diagnostic), + ErrorCategory.RESOLUTION, + diagnostic=diagnostic, + ) diff --git a/src/ftllexengine/diagnostics/errors.py b/src/ftllexengine/diagnostics/errors.py index a9da9823..ad9a50e7 100644 --- a/src/ftllexengine/diagnostics/errors.py +++ b/src/ftllexengine/diagnostics/errors.py @@ -43,10 +43,10 @@ The second element is a tuple of errors (empty on success). Example: - >>> from ftllexengine import ParseResult - >>> result: ParseResult[Decimal] - >>> value, errors = result - >>> if not errors and value is not None: + >>> from ftllexengine import ParseResult # doctest: +SKIP + >>> result: ParseResult[Decimal] # doctest: +SKIP + >>> value, errors = result # doctest: +SKIP + >>> if not errors and value is not None: # doctest: +SKIP ... total = value.quantize(Decimal("0.01")) """ @@ -77,17 +77,17 @@ class FrozenFluentError(Exception): context: Additional context for parse/formatting errors (optional) Example: - >>> error = FrozenFluentError( + >>> error = FrozenFluentError( # doctest: +SKIP ... "Message 'hello' not found", ... ErrorCategory.REFERENCE, ... diagnostic=some_diagnostic, ... ) - >>> error.category == ErrorCategory.REFERENCE + >>> error.category == ErrorCategory.REFERENCE # doctest: +SKIP True - >>> error.verify_integrity() + >>> error.verify_integrity() # doctest: +SKIP True - >>> # Attempting mutation raises: - >>> error._message = "modified" # Raises ImmutabilityViolationError + Attempting mutation raises: + >>> error._message = "modified" # Raises ImmutabilityViolationError # doctest: +SKIP """ __slots__ = ( diff --git a/src/ftllexengine/diagnostics/formatter.py b/src/ftllexengine/diagnostics/formatter.py index 1e06dfea..a08116cf 100644 --- a/src/ftllexengine/diagnostics/formatter.py +++ b/src/ftllexengine/diagnostics/formatter.py @@ -70,19 +70,19 @@ class DiagnosticFormatter: max_content_length: Maximum content length when sanitizing Example: - >>> formatter = DiagnosticFormatter() - >>> diagnostic = ErrorTemplate.message_not_found("hello") - >>> print(formatter.format(diagnostic)) + >>> formatter = DiagnosticFormatter() # doctest: +SKIP + >>> diagnostic = ErrorTemplate.message_not_found("hello") # doctest: +SKIP + >>> print(formatter.format(diagnostic)) # doctest: +SKIP error[MESSAGE_NOT_FOUND]: Message 'hello' not found = help: Check that the message is defined in the loaded resources = note: see https://projectfluent.org/fluent/guide/messages.html - >>> formatter = DiagnosticFormatter(output_format=OutputFormat.SIMPLE) - >>> print(formatter.format(diagnostic)) + >>> formatter = DiagnosticFormatter(output_format=OutputFormat.SIMPLE) # doctest: +SKIP + >>> print(formatter.format(diagnostic)) # doctest: +SKIP MESSAGE_NOT_FOUND: Message 'hello' not found - >>> formatter = DiagnosticFormatter(output_format=OutputFormat.JSON) - >>> print(formatter.format(diagnostic)) + >>> formatter = DiagnosticFormatter(output_format=OutputFormat.JSON) # doctest: +SKIP + >>> print(formatter.format(diagnostic)) # doctest: +SKIP {"code": "MESSAGE_NOT_FOUND", "message": "Message 'hello' not found", ...} """ diff --git a/src/ftllexengine/diagnostics/validation.py b/src/ftllexengine/diagnostics/validation.py index 24a8e1e0..0b95c28a 100644 --- a/src/ftllexengine/diagnostics/validation.py +++ b/src/ftllexengine/diagnostics/validation.py @@ -17,11 +17,10 @@ from dataclasses import dataclass from enum import StrEnum -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Protocol if TYPE_CHECKING: from ftllexengine.diagnostics.codes import DiagnosticCode - from ftllexengine.syntax.ast import Annotation from .formatter import DiagnosticFormatter @@ -50,6 +49,30 @@ class WarningSeverity(StrEnum): INFO = "info" # Informational only +class ParserAnnotation(Protocol): + """Structural contract for parser annotations stored in ValidationResult.""" + + @property + def code(self) -> str: + """Machine-readable annotation code.""" + ... # pragma: no cover - typing-only protocol declaration + + @property + def message(self) -> str: + """Human-readable parser annotation message.""" + ... # pragma: no cover - typing-only protocol declaration + + @property + def arguments(self) -> tuple[tuple[str, str], ...] | None: + """Structured parser annotation arguments.""" + ... # pragma: no cover - typing-only protocol declaration + + @property + def span(self) -> object | None: + """Optional source span for the annotation.""" + ... # pragma: no cover - typing-only protocol declaration + + # ============================================================================ # VALIDATION ERROR & WARNING TYPES # ============================================================================ @@ -114,9 +137,13 @@ def format( Formatted error string with optional content sanitization. Examples: - >>> error = ValidationError(DiagnosticCode.PARSE_JUNK, "Syntax error", "bad ftl") - >>> error.format(sanitize=True) # Truncates to 100 chars - >>> error.format(sanitize=True, redact_content=True) # Redacts entirely + >>> error = ValidationError( # doctest: +SKIP + ... DiagnosticCode.PARSE_JUNK, "Syntax error", "bad ftl" + ... ) + >>> error.format(sanitize=True) # Truncates to 100 chars # doctest: +SKIP + >>> error.format( # Redacts entirely # doctest: +SKIP + ... sanitize=True, redact_content=True + ... ) """ formatter = _get_formatter(sanitize=sanitize, redact_content=redact_content) return formatter.format_error(self) @@ -196,14 +223,14 @@ class ValidationResult: annotations: Parser-level AST annotations. Example: - >>> result = ValidationResult.valid() - >>> result.is_valid + >>> result = ValidationResult.valid() # doctest: +SKIP + >>> result.is_valid # doctest: +SKIP True - >>> result.error_count + >>> result.error_count # doctest: +SKIP 0 - >>> # With errors - >>> result = ValidationResult.invalid( + With errors: + >>> result = ValidationResult.invalid( # doctest: +SKIP ... errors=(ValidationError( ... code=DiagnosticCode.PARSE_JUNK, ... message="Expected '=' but found EOF", @@ -212,15 +239,15 @@ class ValidationResult: ... column=4 ... ),) ... ) - >>> result.is_valid + >>> result.is_valid # doctest: +SKIP False - >>> result.error_count + >>> result.error_count # doctest: +SKIP 1 """ errors: tuple[ValidationError, ...] warnings: tuple[ValidationWarning, ...] - annotations: tuple[Annotation, ...] + annotations: tuple[ParserAnnotation, ...] @property def is_valid(self) -> bool: @@ -273,7 +300,7 @@ def valid() -> ValidationResult: def invalid( errors: tuple[ValidationError, ...] = (), warnings: tuple[ValidationWarning, ...] = (), - annotations: tuple[Annotation, ...] = (), + annotations: tuple[ParserAnnotation, ...] = (), ) -> ValidationResult: """Create an invalid result with errors and/or annotations. @@ -290,7 +317,9 @@ def invalid( ) @staticmethod - def from_annotations(annotations: tuple[Annotation, ...]) -> ValidationResult: + def from_annotations( + annotations: tuple[ParserAnnotation, ...] + ) -> ValidationResult: """Create result from parser-level annotations only. Convenience factory for semantic validator usage. @@ -333,9 +362,9 @@ def format( set redact_content=True. Examples: - >>> result.format() # Full output for debugging - >>> result.format(sanitize=True) # Truncated content - >>> result.format(sanitize=True, redact_content=True) # No content + >>> result.format() # Full output for debugging # doctest: +SKIP + >>> result.format(sanitize=True) # Truncated content # doctest: +SKIP + >>> result.format(sanitize=True, redact_content=True) # No content # doctest: +SKIP """ formatter = _get_formatter(sanitize=sanitize, redact_content=redact_content) return formatter.format_validation_result(self, include_warnings=include_warnings) diff --git a/src/ftllexengine/introspection/iso.py b/src/ftllexengine/introspection/iso.py index 775b7f76..962e8d16 100644 --- a/src/ftllexengine/introspection/iso.py +++ b/src/ftllexengine/introspection/iso.py @@ -14,13 +14,12 @@ from __future__ import annotations -from dataclasses import dataclass from functools import lru_cache # TypeIs (PEP 742) is available unconditionally on Python 3.13+, which is the # minimum supported version. The import is placed here at module level so that # typing.get_type_hints() callers resolve the name from this module's globals. -from typing import NewType, TypeIs +from typing import TypeIs from ftllexengine.constants import ( ISO_4217_DECIMAL_DIGITS, @@ -30,14 +29,22 @@ MAX_LOCALE_CACHE_SIZE, MAX_TERRITORY_CACHE_SIZE, ) -from ftllexengine.core.babel_compat import ( - BabelImportError, - get_babel_languages, - get_babel_numbers, - get_locale_class, - get_unknown_locale_error_class, -) +from ftllexengine.core.babel_compat import BabelImportError from ftllexengine.core.locale_utils import normalize_locale +from ftllexengine.introspection.iso_babel import ( + _get_babel_currencies, + _get_babel_currency_name, + _get_babel_currency_symbol, + _get_babel_official_languages, + _get_babel_territories, + _get_babel_territory_currencies, +) +from ftllexengine.introspection.iso_types import ( + CurrencyCode, + CurrencyInfo, + TerritoryCode, + TerritoryInfo, +) # ruff: noqa: RUF022 - __all__ organized by category for readability __all__ = [ @@ -66,201 +73,6 @@ "BabelImportError", ] -_BABEL_FEATURE = "ISO introspection" - - -# ============================================================================ -# NEWTYPES -# ============================================================================ - -TerritoryCode = NewType("TerritoryCode", str) -"""ISO 3166-1 alpha-2 territory code (e.g., 'US', 'LV', 'DE'). - -Nominal subtype of str. Use is_valid_territory_code() to narrow a plain str -to TerritoryCode; both branches are then reachable, preventing false -unreachable diagnostics at validation sites. -""" - -CurrencyCode = NewType("CurrencyCode", str) -"""ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP'). - -Nominal subtype of str. Use is_valid_currency_code() to narrow a plain str -to CurrencyCode; both branches are then reachable, preventing false -unreachable diagnostics at validation sites. -""" - - -# ============================================================================ -# DATA CLASSES -# ============================================================================ - - -@dataclass(frozen=True, slots=True) -class TerritoryInfo: - """ISO 3166-1 territory data with localized name. - - Immutable, thread-safe, hashable. Safe for use as dict key or set member. - - Attributes: - alpha2: ISO 3166-1 alpha-2 code (e.g., 'US', 'DE'). - name: Localized display name (depends on locale used for lookup). - currencies: All active legal tender currencies for this territory. - Multi-currency territories (e.g., Panama: PAB, USD) have multiple entries. - Empty tuple if no currency data available. - official_languages: BCP-47 language codes of official languages for this - territory (e.g., ('en',) for 'US', ('fr', 'nl', 'de') for 'BE'). - Empty tuple if no language data is available in CLDR. - """ - - alpha2: TerritoryCode - name: str - currencies: tuple[CurrencyCode, ...] - official_languages: tuple[str, ...] - - -@dataclass(frozen=True, slots=True) -class CurrencyInfo: - """ISO 4217 currency data with localized presentation. - - Immutable, thread-safe, hashable. Safe for use as dict key or set member. - - Attributes: - code: ISO 4217 currency code (e.g., 'USD', 'EUR'). - name: Localized display name (depends on locale used for lookup). - symbol: Locale-specific symbol (e.g., '$', 'EUR', 'USD'). - decimal_digits: Standard decimal places (0, 2, 3, or 4). - """ - - code: CurrencyCode - name: str - symbol: str - decimal_digits: int - - -# ============================================================================ -# BABEL INTERFACE (LAZY IMPORT) -# ============================================================================ - - -def _get_babel_locale(locale_str: str) -> object: - """Get Babel Locale object, raising BabelImportError if unavailable.""" - locale_class = get_locale_class() - return locale_class.parse(locale_str) - - -def _is_unknown_locale_error(exc: Exception) -> bool: - """Return True if exc is Babel's UnknownLocaleError. - - Babel's UnknownLocaleError inherits directly from Exception (not LookupError), - requiring explicit runtime type checking. Returns False when Babel is unavailable, - allowing the caller to re-raise the original exception via a bare `raise`. - """ - try: - unknown_locale_error_class = get_unknown_locale_error_class() - except BabelImportError: - return False - return isinstance(exc, unknown_locale_error_class) - - -def _get_babel_territories(locale_str: str) -> dict[str, str]: - """Get territory names from Babel for a locale. - - Returns empty dict if locale is invalid or data unavailable. - """ - try: - locale = _get_babel_locale(locale_str) - return locale.territories # type: ignore[attr-defined, no-any-return] - except (ValueError, LookupError, KeyError, AttributeError): - # Standard library exceptions from invalid data - return {} - except Exception as exc: - if _is_unknown_locale_error(exc): - return {} - raise # Re-raise unexpected errors (logic bugs) - - -@lru_cache(maxsize=1) -def _get_babel_currencies() -> dict[str, str]: - """Get English currency names from Babel. Result is invariant; cached once. - - The English CLDR currency map never changes within a process lifetime. - Caching with maxsize=1 avoids redundant Babel round-trips when list_currencies - is called for multiple locales (all calls share the same English source map). - """ - locale = _get_babel_locale("en") - return locale.currencies # type: ignore[attr-defined, no-any-return] - - -def _get_babel_currency_name(code: str, locale_str: str) -> str | None: - """Get localized currency name from Babel. - - Returns None if the currency code is not found in CLDR data. - """ - locale_class = get_locale_class() - babel_numbers = get_babel_numbers() - try: - # Validate code exists in CLDR currency data before getting name - # Babel returns input code if not found, so we check explicitly - locale = locale_class.parse(locale_str) - if code.upper() not in locale.currencies: - return None - return str(babel_numbers.get_currency_name(code, locale=locale_str)) - except (ValueError, LookupError, KeyError, AttributeError): - # Babel raises ValueError/LookupError for invalid locales, - # KeyError/AttributeError for missing data. Logic bugs (NameError, - # TypeError) propagate to fail fast in financial-grade contexts. - return None - except Exception as exc: - if _is_unknown_locale_error(exc): - return None - raise # Re-raise unexpected errors (logic bugs) - - -def _get_babel_currency_symbol(code: str, locale_str: str) -> str: - """Get localized currency symbol from Babel.""" - babel_numbers = get_babel_numbers() - try: - return str(babel_numbers.get_currency_symbol(code, locale=locale_str)) - except (ValueError, LookupError, KeyError, AttributeError): - # Babel raises ValueError/LookupError for invalid locales, - # KeyError/AttributeError for unknown codes. Logic bugs propagate. - return code - except Exception as exc: - if _is_unknown_locale_error(exc): - return code - raise # Re-raise unexpected errors (logic bugs) - - -def _get_babel_territory_currencies(territory: str) -> list[str]: - """Get currencies used by a territory from Babel. - - Returns list of currently active legal tender currencies. - Uses babel.numbers.get_territory_currencies() — the stable public API — - rather than accessing the raw CLDR data table via get_global(). - """ - babel_numbers = get_babel_numbers() - try: - return list(babel_numbers.get_territory_currencies(territory, tender=True)) - except (ValueError, LookupError, KeyError, AttributeError): - return [] - - -def _get_babel_official_languages(territory: str) -> tuple[str, ...]: - """Get official language codes for a territory from Babel CLDR data. - - Returns BCP-47 language codes of officially recognized languages. - Uses babel.languages.get_official_languages() — the stable public API. - - Returns empty tuple if the territory is unknown or no language data exists. - """ - babel_languages = get_babel_languages() - try: - return tuple(babel_languages.get_official_languages(territory)) - except (ValueError, LookupError, KeyError, AttributeError): - return () - - -# ============================================================================ # CACHED LOOKUP FUNCTIONS # ============================================================================ @@ -434,15 +246,15 @@ def get_currency_decimal_digits(code: str) -> int | None: process-immutable tables. Examples: - >>> get_currency_decimal_digits("KWD") + >>> get_currency_decimal_digits("KWD") # doctest: +SKIP 3 - >>> get_currency_decimal_digits("JPY") + >>> get_currency_decimal_digits("JPY") # doctest: +SKIP 0 - >>> get_currency_decimal_digits("EUR") + >>> get_currency_decimal_digits("EUR") # doctest: +SKIP 2 - >>> get_currency_decimal_digits("IQD") + >>> get_currency_decimal_digits("IQD") # doctest: +SKIP 3 - >>> get_currency_decimal_digits("XYZ") is None + >>> get_currency_decimal_digits("XYZ") is None # doctest: +SKIP True """ # ISO 4217 codes are exactly 3 characters before uppercasing. @@ -755,15 +567,15 @@ def require_currency_code(value: object, field_name: str) -> CurrencyCode: BabelImportError: If Babel is not installed. Example: - >>> require_currency_code("usd", "currency") + >>> require_currency_code("usd", "currency") # doctest: +SKIP 'USD' - >>> require_currency_code(" EUR ", "currency") + >>> require_currency_code(" EUR ", "currency") # doctest: +SKIP 'EUR' - >>> require_currency_code("XYZ", "currency") + >>> require_currency_code("XYZ", "currency") # doctest: +SKIP Traceback (most recent call last): ... ValueError: currency must be a valid ISO 4217 currency code, got 'XYZ' - >>> require_currency_code(840, "currency") + >>> require_currency_code(840, "currency") # doctest: +SKIP Traceback (most recent call last): ... TypeError: currency must be str, got int @@ -772,10 +584,14 @@ def require_currency_code(value: object, field_name: str) -> CurrencyCode: msg = f"{field_name} must be str, got {type(value).__name__}" raise TypeError(msg) stripped = value.strip() - if not is_valid_currency_code(stripped): + code = stripped.upper() + if len(stripped) != 3: + msg = f"{field_name} must be a valid ISO 4217 currency code, got {value!r}" + raise ValueError(msg) + if code not in _currency_codes_impl(normalize_locale("en")): msg = f"{field_name} must be a valid ISO 4217 currency code, got {value!r}" raise ValueError(msg) - return CurrencyCode(stripped.upper()) + return CurrencyCode(code) def require_territory_code(value: object, field_name: str) -> TerritoryCode: @@ -805,15 +621,15 @@ def require_territory_code(value: object, field_name: str) -> TerritoryCode: BabelImportError: If Babel is not installed. Example: - >>> require_territory_code("us", "territory") + >>> require_territory_code("us", "territory") # doctest: +SKIP 'US' - >>> require_territory_code(" DE ", "territory") + >>> require_territory_code(" DE ", "territory") # doctest: +SKIP 'DE' - >>> require_territory_code("XX", "territory") + >>> require_territory_code("XX", "territory") # doctest: +SKIP Traceback (most recent call last): ... ValueError: territory must be a valid ISO 3166-1 alpha-2 territory code, got 'XX' - >>> require_territory_code(840, "territory") + >>> require_territory_code(840, "territory") # doctest: +SKIP Traceback (most recent call last): ... TypeError: territory must be str, got int @@ -822,12 +638,18 @@ def require_territory_code(value: object, field_name: str) -> TerritoryCode: msg = f"{field_name} must be str, got {type(value).__name__}" raise TypeError(msg) stripped = value.strip() - if not is_valid_territory_code(stripped): + code = stripped.upper() + if len(stripped) != 2: + msg = ( + f"{field_name} must be a valid ISO 3166-1 alpha-2 territory code, got {value!r}" + ) + raise ValueError(msg) + if code not in _territory_codes_impl(normalize_locale("en")): msg = ( f"{field_name} must be a valid ISO 3166-1 alpha-2 territory code, got {value!r}" ) raise ValueError(msg) - return TerritoryCode(stripped.upper()) + return TerritoryCode(code) def clear_iso_cache() -> None: diff --git a/src/ftllexengine/introspection/iso_babel.py b/src/ftllexengine/introspection/iso_babel.py new file mode 100644 index 00000000..7781630f --- /dev/null +++ b/src/ftllexengine/introspection/iso_babel.py @@ -0,0 +1,107 @@ +"""Lazy Babel bridge helpers for ISO introspection.""" + +from __future__ import annotations + +from functools import lru_cache + +from ftllexengine.core.babel_compat import ( + BabelImportError, + get_babel_languages, + get_babel_numbers, + get_locale_class, + get_unknown_locale_error_class, +) + +__all__ = [ + "_get_babel_currencies", + "_get_babel_currency_name", + "_get_babel_currency_symbol", + "_get_babel_locale", + "_get_babel_official_languages", + "_get_babel_territories", + "_get_babel_territory_currencies", + "_is_unknown_locale_error", +] + + +def _get_babel_locale(locale_str: str) -> object: + """Get Babel Locale object, raising BabelImportError if unavailable.""" + locale_class = get_locale_class() + return locale_class.parse(locale_str) + + +def _is_unknown_locale_error(exc: Exception) -> bool: + """Return True if exc is Babel's UnknownLocaleError.""" + try: + unknown_locale_error_class = get_unknown_locale_error_class() + except BabelImportError: + return False + return isinstance(exc, unknown_locale_error_class) + + +def _get_babel_territories(locale_str: str) -> dict[str, str]: + """Get territory names from Babel for a locale.""" + try: + locale = _get_babel_locale(locale_str) + return locale.territories # type: ignore[attr-defined, no-any-return] + except (ValueError, LookupError, KeyError, AttributeError): + return {} + except Exception as exc: + if _is_unknown_locale_error(exc): + return {} + raise + + +@lru_cache(maxsize=1) +def _get_babel_currencies() -> dict[str, str]: + """Get English currency names from Babel. Result is invariant; cached once.""" + locale = _get_babel_locale("en") + return locale.currencies # type: ignore[attr-defined, no-any-return] + + +def _get_babel_currency_name(code: str, locale_str: str) -> str | None: + """Get localized currency name from Babel.""" + locale_class = get_locale_class() + babel_numbers = get_babel_numbers() + try: + locale = locale_class.parse(locale_str) + if code.upper() not in locale.currencies: + return None + return str(babel_numbers.get_currency_name(code, locale=locale_str)) + except (ValueError, LookupError, KeyError, AttributeError): + return None + except Exception as exc: + if _is_unknown_locale_error(exc): + return None + raise + + +def _get_babel_currency_symbol(code: str, locale_str: str) -> str: + """Get localized currency symbol from Babel.""" + babel_numbers = get_babel_numbers() + try: + return str(babel_numbers.get_currency_symbol(code, locale=locale_str)) + except (ValueError, LookupError, KeyError, AttributeError): + return code + except Exception as exc: + if _is_unknown_locale_error(exc): + return code + raise + + +def _get_babel_territory_currencies(territory: str) -> list[str]: + """Get currencies used by a territory from Babel.""" + babel_numbers = get_babel_numbers() + try: + return list(babel_numbers.get_territory_currencies(territory, tender=True)) + except (ValueError, LookupError, KeyError, AttributeError): + return [] + + +def _get_babel_official_languages(territory: str) -> tuple[str, ...]: + """Get official language codes for a territory from Babel CLDR data.""" + babel_languages = get_babel_languages() + try: + return tuple(babel_languages.get_official_languages(territory)) + except (ValueError, LookupError, KeyError, AttributeError): + return () diff --git a/src/ftllexengine/introspection/iso_types.py b/src/ftllexengine/introspection/iso_types.py new file mode 100644 index 00000000..4e0b0f4d --- /dev/null +++ b/src/ftllexengine/introspection/iso_types.py @@ -0,0 +1,73 @@ +"""Type definitions for ISO territory and currency introspection.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import NewType + +__all__ = [ + "CurrencyCode", + "CurrencyInfo", + "TerritoryCode", + "TerritoryInfo", +] + + +TerritoryCode = NewType("TerritoryCode", str) +"""ISO 3166-1 alpha-2 territory code (e.g., 'US', 'LV', 'DE'). + +Nominal subtype of str. Use is_valid_territory_code() to narrow a plain str +to TerritoryCode; both branches are then reachable, preventing false +unreachable diagnostics at validation sites. +""" + + +CurrencyCode = NewType("CurrencyCode", str) +"""ISO 4217 currency code (e.g., 'USD', 'EUR', 'GBP'). + +Nominal subtype of str. Use is_valid_currency_code() to narrow a plain str +to CurrencyCode; both branches are then reachable, preventing false +unreachable diagnostics at validation sites. +""" + + +@dataclass(frozen=True, slots=True) +class TerritoryInfo: + """ISO 3166-1 territory data with localized name. + + Immutable, thread-safe, hashable. Safe for use as dict key or set member. + + Attributes: + alpha2: ISO 3166-1 alpha-2 code (e.g., 'US', 'DE'). + name: Localized display name (depends on locale used for lookup). + currencies: All active legal tender currencies for this territory. + Multi-currency territories (e.g., Panama: PAB, USD) have multiple entries. + Empty tuple if no currency data available. + official_languages: BCP-47 language codes of official languages for this + territory (e.g., ('en',) for 'US', ('fr', 'nl', 'de') for 'BE'). + Empty tuple if no language data is available in CLDR. + """ + + alpha2: TerritoryCode + name: str + currencies: tuple[CurrencyCode, ...] + official_languages: tuple[str, ...] + + +@dataclass(frozen=True, slots=True) +class CurrencyInfo: + """ISO 4217 currency data with localized presentation. + + Immutable, thread-safe, hashable. Safe for use as dict key or set member. + + Attributes: + code: ISO 4217 currency code (e.g., 'USD', 'EUR'). + name: Localized display name (depends on locale used for lookup). + symbol: Locale-specific symbol (e.g., '$', 'EUR', 'USD'). + decimal_digits: Standard decimal places (0, 2, 3, or 4). + """ + + code: CurrencyCode + name: str + symbol: str + decimal_digits: int diff --git a/src/ftllexengine/introspection/message.py b/src/ftllexengine/introspection/message.py index b6f24574..ad3304a3 100644 --- a/src/ftllexengine/introspection/message.py +++ b/src/ftllexengine/introspection/message.py @@ -36,6 +36,11 @@ VariableReference, Variant, ) +from ftllexengine.syntax.reference_extraction import ( + ReferenceExtractor, + extract_references, + extract_references_by_attribute, +) from ftllexengine.syntax.visitor import ASTVisitor if TYPE_CHECKING: @@ -456,145 +461,6 @@ def _visit_variant(self, variant: Variant) -> None: self._context = old_context -# ============================================================================== -# REFERENCE EXTRACTION (Specialized Visitor) -# ============================================================================== - - -class ReferenceExtractor(ASTVisitor[MessageReference | TermReference]): - """Extract message and term references from AST for validation. - - Specialized visitor that collects only MessageReference and TermReference - nodes. Used by validation tools to build dependency graphs for circular - reference detection. - - This is intentionally simpler than IntrospectionVisitor - it does one thing - well: extract reference IDs for dependency analysis. - - Depth Limiting: - Includes DepthGuard to prevent stack overflow on adversarial or - programmatically constructed deeply nested ASTs. - - Memory Optimization: - Uses __slots__ to restrict attribute creation and reduce memory overhead. - """ - - __slots__ = ("message_refs", "term_refs") - - def __init__(self, *, max_depth: int = MAX_DEPTH) -> None: - """Initialize reference collector. - - Args: - max_depth: Maximum expression nesting depth (default: MAX_DEPTH). - Prevents stack overflow on adversarial ASTs. - """ - super().__init__(max_depth=max_depth) - self.message_refs: set[str] = set() - self.term_refs: set[str] = set() - - def visit_MessageReference(self, node: MessageReference) -> MessageReference: - """Collect message reference ID with optional attribute qualification. - - Stores attribute-qualified references ("msg.attr") when the reference - targets a specific attribute, or unqualified ("msg") for base message - references. This enables attribute-granular cycle detection. - - MessageReference contains only Identifier children (leaf nodes with - just name: str). No nested references are possible, so generic_visit() - is unnecessary and would waste cycles traversing leaf nodes. - """ - if node.attribute is not None: - self.message_refs.add(f"{node.id.name}.{node.attribute.name}") - else: - self.message_refs.add(node.id.name) - return node - - def visit_TermReference(self, node: TermReference) -> TermReference: - """Collect term reference with depth tracking. - - Unlike MessageReference, TermReference has arguments: CallArguments | None - which CAN contain nested expressions (including MessageReference, - TermReference, VariableReference). Must traverse children to find all - nested references. - """ - if node.attribute is not None: - self.term_refs.add(f"{node.id.name}.{node.attribute.name}") - else: - self.term_refs.add(node.id.name) - with self._depth_guard: - self.generic_visit(node) - return node - - -def extract_references(entry: Message | Term) -> tuple[frozenset[str], frozenset[str]]: - """Extract message and term references from an AST entry. - - Traverses the entry's value pattern and all attribute patterns to collect - all referenced message and term IDs. References include attribute - qualification: "msg.attr" for attribute references, "msg" for base - message references. - - Args: - entry: Message or Term AST node to analyze - - Returns: - Tuple of (message_refs, term_refs) as frozen sets of IDs. - - message_refs: Set of referenced message IDs, possibly attribute-qualified - (e.g., {"welcome", "msg.tooltip"}) - - term_refs: Set of referenced term IDs (e.g., {"brand", "app-name"}) - - Example: - >>> from ftllexengine import parse_ftl - >>> resource = parse_ftl("msg = { welcome } uses { -brand }") - >>> message = resource.entries[0] - >>> msg_refs, term_refs = extract_references(message) - >>> assert "welcome" in msg_refs - >>> assert "brand" in term_refs - """ - extractor = ReferenceExtractor() - - # Visit value pattern (Message.value can be None, Term.value is always present) - if entry.value is not None: - extractor.visit(entry.value) - - # Visit all attribute patterns - for attr in entry.attributes: - extractor.visit(attr.value) - - return frozenset(extractor.message_refs), frozenset(extractor.term_refs) - - -def extract_references_by_attribute( - entry: Message | Term, -) -> dict[str | None, tuple[frozenset[str], frozenset[str]]]: - """Extract references per source attribute for attribute-granular cycle detection. - - Returns a mapping from source attribute name (None for value pattern) to - the (message_refs, term_refs) found in that attribute's pattern. - - Args: - entry: Message or Term AST node to analyze - - Returns: - Dict mapping attribute name (or None for value) to (message_refs, term_refs). - """ - result: dict[str | None, tuple[frozenset[str], frozenset[str]]] = {} - - # Extract from value pattern - if entry.value is not None: - extractor = ReferenceExtractor() - extractor.visit(entry.value) - result[None] = (frozenset(extractor.message_refs), frozenset(extractor.term_refs)) - - # Extract from each attribute pattern separately - for attr in entry.attributes: - extractor = ReferenceExtractor() - extractor.visit(attr.value) - result[attr.id.name] = (frozenset(extractor.message_refs), frozenset(extractor.term_refs)) - - return result - - # ============================================================================== # PUBLIC API # ============================================================================== @@ -622,12 +488,12 @@ def introspect_message( TypeError: If message is not a Message or Term AST node Example: - >>> from ftllexengine.syntax.parser import FluentParserV1 - >>> parser = FluentParserV1() - >>> resource = parser.parse("greeting = Hello, { $name }!") - >>> msg = resource.entries[0] - >>> info = introspect_message(msg) - >>> print(info.get_variable_names()) + >>> from ftllexengine.syntax.parser import FluentParserV1 # doctest: +SKIP + >>> parser = FluentParserV1() # doctest: +SKIP + >>> resource = parser.parse("greeting = Hello, { $name }!") # doctest: +SKIP + >>> msg = resource.entries[0] # doctest: +SKIP + >>> info = introspect_message(msg) # doctest: +SKIP + >>> print(info.get_variable_names()) # doctest: +SKIP frozenset({'name'}) """ # Validate input type at API boundary (runtime check for callers ignoring type hints) @@ -691,8 +557,8 @@ def extract_variables(message: Message | Term) -> frozenset[str]: Frozen set of variable names (without $ prefix) Example: - >>> vars = extract_variables(msg) - >>> assert 'name' in vars + >>> vars = extract_variables(msg) # doctest: +SKIP + >>> assert 'name' in vars # doctest: +SKIP """ return introspect_message(message).get_variable_names() @@ -747,16 +613,18 @@ def validate_message_variables( variables exactly match expected_variables (no missing, no extra). Example: - >>> from ftllexengine.syntax import parse - >>> resource = parse("greeting = Hello, { $name }! You have { $count } items.") - >>> msg = resource.body[0] - >>> result = validate_message_variables(msg, {"name", "count"}) - >>> result.is_valid + >>> from ftllexengine.syntax import parse # doctest: +SKIP + >>> resource = parse( # doctest: +SKIP + ... "greeting = Hello, { $name }! You have { $count } items." + ... ) + >>> msg = resource.entries[0] # doctest: +SKIP + >>> result = validate_message_variables(msg, {"name", "count"}) # doctest: +SKIP + >>> result.is_valid # doctest: +SKIP True - >>> result = validate_message_variables(msg, {"name"}) - >>> result.is_valid + >>> result = validate_message_variables(msg, {"name"}) # doctest: +SKIP + >>> result.is_valid # doctest: +SKIP False - >>> result.extra_variables + >>> result.extra_variables # doctest: +SKIP frozenset({'count'}) """ declared = extract_variables(message) diff --git a/src/ftllexengine/localization/__init__.py b/src/ftllexengine/localization/__init__.py index 311bea29..a3bc1873 100644 --- a/src/ftllexengine/localization/__init__.py +++ b/src/ftllexengine/localization/__init__.py @@ -22,6 +22,7 @@ # ruff: noqa: RUF022 - __all__ organized by category for readability +from ftllexengine.core.semantic_types import FTLSource, LocaleCode, MessageId, ResourceId from ftllexengine.enums import LoadStatus from ftllexengine.localization.loading import ( FallbackInfo, @@ -30,7 +31,6 @@ ResourceLoader, ResourceLoadResult, ) -from ftllexengine.localization.types import FTLSource, LocaleCode, MessageId, ResourceId # Babel-optional: orchestrator and boot depend on FluentBundle (runtime → Babel). # On parser-only installs these imports fail; the names are absent from this @@ -48,8 +48,8 @@ from ftllexengine.runtime.cache import ( CacheAuditLogEntry as CacheAuditLogEntry, ) -except ImportError: - pass # Parser-only install; Babel-dependent localization types unavailable +except ImportError: # pragma: no cover - parser-only install; Babel-dependent names unavailable + pass # pragma: no cover - parser-only install; Babel-dependent names unavailable __all__ = [ # Main orchestrator (Babel-optional; absent in parser-only installs) diff --git a/src/ftllexengine/localization/boot.py b/src/ftllexengine/localization/boot.py index ae446cea..cc6530a4 100644 --- a/src/ftllexengine/localization/boot.py +++ b/src/ftllexengine/localization/boot.py @@ -31,8 +31,8 @@ if TYPE_CHECKING: from collections.abc import Callable, Mapping + from ftllexengine.core.semantic_types import MessageId from ftllexengine.introspection import MessageVariableValidationResult - from ftllexengine.localization.types import MessageId from ftllexengine.runtime.cache_config import CacheConfig __all__ = ["LocalizationBootConfig"] @@ -77,14 +77,14 @@ class LocalizationBootConfig: fallback locale (optional). Receives a FallbackInfo instance. Example: - >>> config = LocalizationBootConfig( + >>> config = LocalizationBootConfig( # doctest: +SKIP ... locales=('lv', 'en'), ... resource_ids=('ui.ftl',), ... base_path='locales/{locale}', ... message_schemas={'welcome': frozenset({'name'})}, ... required_messages=frozenset({'welcome', 'farewell'}), ... ) - >>> l10n, summary, schema_results = config.boot() + >>> l10n, summary, schema_results = config.boot() # doctest: +SKIP """ locales: tuple[str, ...] diff --git a/src/ftllexengine/localization/loading.py b/src/ftllexengine/localization/loading.py index 078645aa..19c0194d 100644 --- a/src/ftllexengine/localization/loading.py +++ b/src/ftllexengine/localization/loading.py @@ -24,7 +24,7 @@ from ftllexengine.enums import LoadStatus if TYPE_CHECKING: - from ftllexengine.localization.types import FTLSource, LocaleCode, MessageId, ResourceId + from ftllexengine.core.semantic_types import FTLSource, LocaleCode, MessageId, ResourceId from ftllexengine.syntax.ast import Junk # ruff: noqa: RUF022 - __all__ organized by category for readability @@ -56,15 +56,15 @@ class ResourceLoader(Protocol): description. Example: - >>> class DiskLoader: + >>> class DiskLoader: # doctest: +SKIP ... def load(self, locale: str, resource_id: str) -> str: ... path = Path(f"locales/{locale}/{resource_id}") ... return path.read_text(encoding="utf-8") ... def describe_path(self, locale: str, resource_id: str) -> str: ... return f"locales/{locale}/{resource_id}" ... - >>> loader = DiskLoader() - >>> l10n = FluentLocalization(['en', 'fr'], ['main.ftl'], loader) + >>> loader = DiskLoader() # doctest: +SKIP + >>> l10n = FluentLocalization(['en', 'fr'], ['main.ftl'], loader) # doctest: +SKIP """ def load(self, locale: LocaleCode, resource_id: ResourceId) -> FTLSource: @@ -114,8 +114,8 @@ class PathResourceLoader: All resolved paths are validated against a fixed root directory. Example: - >>> loader = PathResourceLoader("locales/{locale}") - >>> ftl = loader.load("en", "main.ftl") + >>> loader = PathResourceLoader("locales/{locale}") # doctest: +SKIP + >>> ftl = loader.load("en", "main.ftl") # doctest: +SKIP # Loads from: locales/en/main.ftl Attributes: @@ -286,10 +286,10 @@ class FallbackInfo: message_id: The message identifier that was resolved Example: - >>> def log_fallback(info: FallbackInfo) -> None: + >>> def log_fallback(info: FallbackInfo) -> None: # doctest: +SKIP ... print(f"Fallback: {info.message_id} resolved from " ... f"{info.resolved_locale} (requested {info.requested_locale})") - >>> l10n = FluentLocalization(['lv', 'en'], on_fallback=log_fallback) + >>> l10n = FluentLocalization(['lv', 'en'], on_fallback=log_fallback) # doctest: +SKIP """ requested_locale: LocaleCode @@ -353,12 +353,12 @@ class LoadSummary: results: All individual load results (immutable tuple) Example: - >>> l10n = FluentLocalization(['en', 'de'], ['ui.ftl'], loader) - >>> summary = l10n.get_load_summary() - >>> if summary.errors > 0: + >>> l10n = FluentLocalization(['en', 'de'], ['ui.ftl'], loader) # doctest: +SKIP + >>> summary = l10n.get_load_summary() # doctest: +SKIP + >>> if summary.errors > 0: # doctest: +SKIP ... for result in summary.get_errors(): ... print(f"Failed: {result.locale}/{result.resource_id}: {result.error}") - >>> if summary.has_junk: + >>> if summary.has_junk: # doctest: +SKIP ... for result in summary.get_with_junk(): ... print(f"Junk in {result.source_path}: {len(result.junk_entries)} entries") """ diff --git a/src/ftllexengine/localization/orchestrator.py b/src/ftllexengine/localization/orchestrator.py index a48e49e6..98a50fa9 100644 --- a/src/ftllexengine/localization/orchestrator.py +++ b/src/ftllexengine/localization/orchestrator.py @@ -33,43 +33,23 @@ from __future__ import annotations -import time -from collections.abc import Callable, Generator, Iterable, Mapping -from typing import TYPE_CHECKING, NoReturn +from typing import TYPE_CHECKING -from ftllexengine.constants import FALLBACK_INVALID, FALLBACK_MISSING_MESSAGE from ftllexengine.core.locale_utils import require_locale_code -from ftllexengine.diagnostics.codes import Diagnostic, DiagnosticCode -from ftllexengine.diagnostics.errors import ErrorCategory, FrozenFluentError -from ftllexengine.enums import LoadStatus -from ftllexengine.integrity import ( - FormattingIntegrityError, - IntegrityCheckFailedError, - IntegrityContext, -) -from ftllexengine.introspection import ( - MessageVariableValidationResult, -) -from ftllexengine.introspection import ( - validate_message_variables as validate_message_ast_variables, -) -from ftllexengine.localization.loading import ( - FallbackInfo, - LoadSummary, - ResourceLoader, - ResourceLoadResult, -) -from ftllexengine.runtime.bundle import FluentBundle -from ftllexengine.runtime.cache import CacheAuditLogEntry, CacheStats +from ftllexengine.localization.orchestrator_formatting import _LocalizationFormattingMixin +from ftllexengine.localization.orchestrator_loading import _LocalizationLoadingMixin +from ftllexengine.localization.orchestrator_queries import _LocalizationQueryMixin +from ftllexengine.runtime.cache import CacheStats from ftllexengine.runtime.rwlock import RWLock if TYPE_CHECKING: + from collections.abc import Callable, Iterable + + from ftllexengine.core.semantic_types import LocaleCode, ResourceId from ftllexengine.core.value_types import FluentValue - from ftllexengine.diagnostics import ValidationResult - from ftllexengine.introspection import MessageIntrospection - from ftllexengine.localization.types import FTLSource, LocaleCode, MessageId, ResourceId + from ftllexengine.localization.loading import FallbackInfo, ResourceLoader, ResourceLoadResult + from ftllexengine.runtime.bundle import FluentBundle from ftllexengine.runtime.cache_config import CacheConfig - from ftllexengine.syntax import Junk, Message, Term __all__ = ["FluentLocalization", "LocalizationCacheStats"] @@ -85,7 +65,11 @@ class LocalizationCacheStats(CacheStats, total=True): """Number of initialized bundles contributing to these statistics.""" -class FluentLocalization: +class FluentLocalization( + _LocalizationQueryMixin, + _LocalizationFormattingMixin, + _LocalizationLoadingMixin, +): """Multi-locale message formatting with fallback chains. Orchestrates multiple FluentBundle instances (one per locale) and implements @@ -103,16 +87,16 @@ class FluentLocalization: - Match statements for error handling Example - Disk-based resources: - >>> loader = PathResourceLoader("locales/{locale}") - >>> l10n = FluentLocalization(['lv', 'en'], ['ui.ftl'], loader) - >>> result, errors = l10n.format_value('welcome', {'name': 'Anna'}) + >>> loader = PathResourceLoader("locales/{locale}") # doctest: +SKIP + >>> l10n = FluentLocalization(['lv', 'en'], ['ui.ftl'], loader) # doctest: +SKIP + >>> result, errors = l10n.format_value('welcome', {'name': 'Anna'}) # doctest: +SKIP # Tries 'lv' first, falls back to 'en' if message not found Example - Direct resource provision: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> l10n.add_resource('lv', 'welcome = Sveiki, { $name }!') - >>> l10n.add_resource('en', 'welcome = Hello, { $name }!') - >>> result, errors = l10n.format_value('welcome', {'name': 'Anna'}) + >>> l10n = FluentLocalization(['lv', 'en']) # doctest: +SKIP + >>> l10n.add_resource('lv', 'welcome = Sveiki, { $name }!') # doctest: +SKIP + >>> l10n.add_resource('en', 'welcome = Hello, { $name }!') # doctest: +SKIP + >>> result, errors = l10n.format_value('welcome', {'name': 'Anna'}) # doctest: +SKIP # Returns: ('Sveiki, Anna!', ()) Attributes: @@ -224,145 +208,6 @@ def __init__( result = self._load_single_resource(locale, resource_id, resource_loader) self._load_results.append(result) - def _create_bundle(self, locale: LocaleCode) -> FluentBundle: - """Create and register a bundle for locale. Caller must hold write lock. - - Applies any pending functions registered before bundle creation. - - Args: - locale: Locale code (must be in _locales tuple) - - Returns: - Newly created and registered FluentBundle instance - """ - bundle = FluentBundle( - locale, - use_isolating=self._use_isolating, - cache=self._cache_config, - strict=self._strict, - ) - for name, func in self._pending_functions.items(): - bundle.add_function(name, func) - self._bundles[locale] = bundle - return bundle - - def _get_or_create_bundle(self, locale: LocaleCode) -> FluentBundle: - """Get existing bundle or create one lazily. - - Implements lazy bundle initialization to reduce memory usage when - fallback locales are rarely accessed. - - Thread-safe via double-checked locking: read lock for the common - already-initialized case (allows concurrent format operations), write - lock only when a new bundle must be created. - - Must be called WITHOUT holding any lock. Use _create_bundle() directly - when already holding the write lock. - - Args: - locale: Locale code (must be in _locales tuple) - - Returns: - FluentBundle instance for the locale - """ - # Fast path: read lock allows concurrent format operations. - with self._lock.read(): - if locale in self._bundles: - return self._bundles[locale] - - # Slow path: bundle does not exist; acquire write lock and create it. - # Double-check after acquiring write lock: another thread may have - # created the bundle between our read-lock release and write-lock acquire. - with self._lock.write(): - if locale in self._bundles: # pragma: no cover - return self._bundles[locale] - return self._create_bundle(locale) - - def _load_single_resource( - self, - locale: LocaleCode, - resource_id: ResourceId, - resource_loader: ResourceLoader, - ) -> ResourceLoadResult: - """Load a single FTL resource and record the result. - - Encapsulates the logic for loading one resource for one locale, - including path construction, error handling, and result recording. - - Args: - locale: Locale code to load resource for - resource_id: Resource identifier (e.g., 'main.ftl') - resource_loader: Loader implementation to use - - Returns: - ResourceLoadResult indicating success, not_found, or error - """ - # Delegate path description to loader via protocol method. - # ResourceLoader.describe_path() returns a human-readable path string. - # PathResourceLoader overrides this with the actual locale-substituted path. - # Custom loaders use the default "{locale}/{resource_id}" implementation. - source_path = resource_loader.describe_path(locale, resource_id) - - try: - ftl_source = resource_loader.load(locale, resource_id) - bundle = self._get_or_create_bundle(locale) - junk_entries = bundle.add_resource(ftl_source, source_path=source_path) - return ResourceLoadResult( - locale=locale, - resource_id=resource_id, - status=LoadStatus.SUCCESS, - source_path=source_path, - junk_entries=junk_entries, - ) - except FileNotFoundError: - # Resource doesn't exist for this locale - expected for optional locales - return ResourceLoadResult( - locale=locale, - resource_id=resource_id, - status=LoadStatus.NOT_FOUND, - source_path=source_path, - ) - except (OSError, ValueError) as e: - # Permission errors, path traversal errors, etc. - return ResourceLoadResult( - locale=locale, - resource_id=resource_id, - status=LoadStatus.ERROR, - error=e, - source_path=source_path, - ) - - @staticmethod - def _check_mapping_arg( - args: Mapping[str, FluentValue] | None, - errors: list[FrozenFluentError], - ) -> bool: - """Validate that args is None or a Mapping (defensive runtime check). - - Callers annotate args as Mapping | None, but external callers may - violate the contract at runtime. This static method provides the - shared guard used by both format_value() and format_pattern(). - - Args: - args: The args argument from format_value or format_pattern - errors: Mutable error list; an error is appended if args is invalid - - Returns: - True if args is valid (None or Mapping), False otherwise - """ - if args is not None and not isinstance(args, Mapping): - diagnostic = Diagnostic( # type: ignore[unreachable] - code=DiagnosticCode.INVALID_ARGUMENT, - message=f"Invalid args type: expected Mapping or None, got {type(args).__name__}", - ) - errors.append( - FrozenFluentError( - str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic - ) - ) - return False - return True - @property def locales(self) -> tuple[LocaleCode, ...]: """Get immutable locale fallback chain. @@ -372,233 +217,6 @@ def locales(self) -> tuple[LocaleCode, ...]: """ return self._locales - def get_load_summary(self) -> LoadSummary: - """Get summary of resource load attempts during initialization. - - Returns a LoadSummary with information about which resources loaded - successfully, which were not found, and which failed with errors - during the __init__() resource loading phase. - - IMPORTANT: This only reflects resources loaded via the ResourceLoader - during construction. Resources added dynamically via add_resource() - are NOT included in this summary. This maintains a clear semantic - distinction between initialization-time (fail-fast) loading and - runtime (dynamic) resource additions. - - Use this to diagnose loading issues, especially in multi-locale setups - where some locales may have missing or broken resources. - - Returns: - LoadSummary with aggregated load results from initialization - - Example: - >>> loader = PathResourceLoader("locales/{locale}") - >>> l10n = FluentLocalization(['en', 'de', 'fr'], ['ui.ftl'], loader) - >>> summary = l10n.get_load_summary() - >>> print(f"Loaded: {summary.successful}/{summary.total_attempted}") - Loaded: 2/3 - >>> if summary.has_errors: - ... for result in summary.get_errors(): - ... print(f"Error loading {result.source_path}: {result.error}") - >>> for result in summary.get_not_found(): - ... print(f"Missing: {result.locale}/{result.resource_id}") - """ - return LoadSummary(results=tuple(self._load_results)) - - @staticmethod - def _describe_unclean_load_result( - result: ResourceLoadResult, - ) -> tuple[str, str]: - """Describe the first non-clean initialization result.""" - key = result.source_path or f"{result.locale}/{result.resource_id}" - if result.is_error: - error_name = type(result.error).__name__ if result.error is not None else "UnknownError" - return (key, f"load error ({error_name})") - if result.is_not_found: - return (key, "resource not found") - - junk_count = len(result.junk_entries) - noun = "entry" if junk_count == 1 else "entries" - return (key, f"{junk_count} junk {noun}") - - def _raise_integrity_check_failed( - self, - operation: str, - message: str, - *, - key: str | None = None, - expected: str | None = None, - actual: str | None = None, - ) -> NoReturn: - """Raise IntegrityCheckFailedError with localization context.""" - context = IntegrityContext( - component="localization", - operation=operation, - key=key, - expected=expected, - actual=actual, - timestamp=time.monotonic(), - wall_time_unix=time.time(), - ) - raise IntegrityCheckFailedError(message, context=context) - - def require_clean(self) -> LoadSummary: - """Require a clean initialization load summary. - - Returns the immutable initialization LoadSummary when every resource - loaded successfully and produced no junk. Raises IntegrityCheckFailedError - when initialization had missing resources, load errors, or junk entries. - """ - summary = self.get_load_summary() - if summary.all_clean: - return summary - - issue_key: str | None = None - issue_detail: str | None = None - for result in summary.results: # pragma: no branch - if result.is_error or result.is_not_found or result.has_junk: - issue_key, issue_detail = self._describe_unclean_load_result(result) - break - - actual = repr(summary) - detail = ( - f" First issue: {issue_detail} at {issue_key}." - if issue_key and issue_detail - else "" - ) - msg = f"Localization initialization is not clean: {actual}.{detail}" - self._raise_integrity_check_failed( - "require_clean", - msg, - key=issue_key, - expected="LoadSummary(all_clean=True)", - actual=actual, - ) - raise AssertionError # pragma: no cover - - @staticmethod - def _format_schema_difference( - validation: MessageVariableValidationResult, - ) -> str: - """Render a concise schema mismatch description.""" - parts: list[str] = [] - if validation.missing_variables: - missing = ", ".join(sorted(validation.missing_variables)) - parts.append(f"missing {{{missing}}}") - if validation.extra_variables: - extra = ", ".join(sorted(validation.extra_variables)) - parts.append(f"extra {{{extra}}}") - return "; ".join(parts) - - def _resolve_message_schema_validation( - self, - message_id: MessageId, - expected_variables: frozenset[str] | set[str], - ) -> MessageVariableValidationResult | None: - """Resolve a message through the fallback chain and validate its schema.""" - message = self.get_message(message_id) - if message is None: - return None - return validate_message_ast_variables(message, frozenset(expected_variables)) - - def validate_message_variables( - self, - message_id: str, - expected_variables: frozenset[str] | set[str], - ) -> MessageVariableValidationResult: - """Require an exact variable schema match for a single fallback-resolved message. - - Resolves ``message_id`` using the same fallback-chain semantics as - ``get_message()``. Returns the immutable validation result when the - message exists and its declared variables exactly match - ``expected_variables``. Missing messages and exact-schema mismatches - raise ``IntegrityCheckFailedError`` with localization-scoped context. - """ - validation = self._resolve_message_schema_validation(message_id, expected_variables) - if validation is None: - msg = f"Localization message schema validation failed: {message_id}: not found" - self._raise_integrity_check_failed( - "validate_message_variables", - msg, - key=message_id, - expected="1 exact schema match", - actual="missing_messages=1", - ) - - if validation.is_valid: - return validation - - difference = self._format_schema_difference(validation) - msg = f"Localization message schema validation failed: {message_id}: {difference}" - self._raise_integrity_check_failed( - "validate_message_variables", - msg, - key=message_id, - expected="1 exact schema match", - actual="schema_mismatches=1", - ) - raise AssertionError # pragma: no cover - - def validate_message_schemas( - self, - expected_schemas: Mapping[MessageId, frozenset[str] | set[str]], - ) -> tuple[MessageVariableValidationResult, ...]: - """Require exact variable-schema matches for specific messages. - - Validates messages using the existing fallback chain and returns one - MessageVariableValidationResult per requested message when every schema - matches exactly. Raises IntegrityCheckFailedError if any message is - missing or if any declared variable set differs from the expected set. - """ - results: list[MessageVariableValidationResult] = [] - mismatches: list[str] = [] - first_failure: str | None = None - missing_messages = 0 - schema_mismatches = 0 - - for message_id, expected_variables in expected_schemas.items(): - validation = self._resolve_message_schema_validation(message_id, expected_variables) - if validation is None: - first_failure = first_failure or str(message_id) - missing_messages += 1 - mismatches.append(f"{message_id}: not found") - continue - - results.append(validation) - if validation.is_valid: - continue - - first_failure = first_failure or message_id - schema_mismatches += 1 - difference = self._format_schema_difference(validation) - mismatches.append(f"{message_id}: {difference}") - - if missing_messages > 0 or schema_mismatches > 0: - fragments = mismatches[:3] - remaining = len(mismatches) - len(fragments) - if remaining > 0: - noun = "issue" if remaining == 1 else "issues" - fragments.append(f"... {remaining} more {noun}") - - actual_parts: list[str] = [] - if missing_messages > 0: - actual_parts.append(f"missing_messages={missing_messages}") - if schema_mismatches > 0: - actual_parts.append(f"schema_mismatches={schema_mismatches}") - - actual = ", ".join(actual_parts) - summary = "; ".join(fragments) - msg = f"Localization message schema validation failed: {summary}" - self._raise_integrity_check_failed( - "validate_message_schemas", - msg, - key=first_failure, - expected=f"{len(expected_schemas)} exact schema match(es)", - actual=actual, - ) - - return tuple(results) - @property def cache_enabled(self) -> bool: """Get whether format caching is enabled for all bundles (read-only). @@ -607,12 +225,12 @@ def cache_enabled(self) -> bool: bool: True if caching is enabled, False otherwise Example: - >>> from ftllexengine.runtime.cache_config import CacheConfig - >>> l10n = FluentLocalization(['lv', 'en'], cache=CacheConfig()) - >>> l10n.cache_enabled + >>> from ftllexengine.runtime.cache_config import CacheConfig # doctest: +SKIP + >>> l10n = FluentLocalization(['lv', 'en'], cache=CacheConfig()) # doctest: +SKIP + >>> l10n.cache_enabled # doctest: +SKIP True - >>> l10n_no_cache = FluentLocalization(['lv', 'en']) - >>> l10n_no_cache.cache_enabled + >>> l10n_no_cache = FluentLocalization(['lv', 'en']) # doctest: +SKIP + >>> l10n_no_cache.cache_enabled # doctest: +SKIP False """ return self._cache_config is not None @@ -625,9 +243,11 @@ def cache_config(self) -> CacheConfig | None: CacheConfig or None if caching is disabled. Example: - >>> from ftllexengine.runtime.cache_config import CacheConfig - >>> l10n = FluentLocalization(['lv', 'en'], cache=CacheConfig(size=500)) - >>> l10n.cache_config.size + >>> from ftllexengine.runtime.cache_config import CacheConfig # doctest: +SKIP + >>> l10n = FluentLocalization( # doctest: +SKIP + ... ['lv', 'en'], cache=CacheConfig(size=500) + ... ) + >>> l10n.cache_config.size # doctest: +SKIP 500 """ return self._cache_config @@ -651,744 +271,11 @@ def __repr__(self) -> str: String representation showing locales and bundle count Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> repr(l10n) + >>> l10n = FluentLocalization(['lv', 'en']) # doctest: +SKIP + >>> repr(l10n) # doctest: +SKIP "FluentLocalization(locales=('lv', 'en'), bundles=0/2)" """ with self._lock.read(): initialized = len(self._bundles) total = len(self._locales) return f"FluentLocalization(locales={self._locales!r}, bundles={initialized}/{total})" - - def add_resource( - self, locale: LocaleCode, ftl_source: FTLSource - ) -> tuple[Junk, ...]: - """Add FTL resource to specific locale bundle. - - Allows dynamic resource loading without ResourceLoader. - - Thread-safe via internal RWLock. - - Args: - locale: Locale code (must resolve to an entry in the fallback chain) - ftl_source: FTL source code - - Returns: - Tuple of Junk entries encountered during parsing. Empty tuple if - parsing succeeded without errors. - - Raises: - ValueError: If locale does not resolve to a locale in the fallback chain. - """ - normalized_locale = require_locale_code(locale, "locale") - - with self._lock.write(): - if normalized_locale not in self._locales: - msg = ( - f"Locale '{normalized_locale}' not in fallback chain {self._locales}" - ) - raise ValueError(msg) - - # Direct lookup/create under write lock. _get_or_create_bundle cannot - # be used here because it acquires a read lock, and RWLock prohibits - # acquiring a read lock while holding the write lock. - if normalized_locale not in self._bundles: - self._create_bundle(normalized_locale) - return self._bundles[normalized_locale].add_resource(ftl_source) - - def add_resource_stream( - self, locale: LocaleCode, lines: Iterable[str], *, source_path: str | None = None - ) -> tuple[Junk, ...]: - """Add FTL resource to specific locale bundle from a line-oriented stream. - - Semantically identical to add_resource() but accepts any iterable of - lines rather than a pre-assembled source string. Memory usage is - proportional to the largest single FTL entry in the stream, not the - total resource size. - - Thread-safe via internal RWLock. - - Args: - locale: Locale code (must resolve to an entry in the fallback chain) - lines: Iterable of FTL source lines. Trailing newlines are stripped - per line. - source_path: Optional path to source file for better error messages - (e.g., "locales/lv/ui.ftl"). Defaults to "". - - Returns: - Tuple of Junk entries encountered during parsing. Empty tuple if - parsing succeeded without errors. - - Raises: - ValueError: If locale does not resolve to a locale in the fallback chain. - """ - normalized_locale = require_locale_code(locale, "locale") - - with self._lock.write(): - if normalized_locale not in self._locales: - msg = ( - f"Locale '{normalized_locale}' not in fallback chain {self._locales}" - ) - raise ValueError(msg) - - if normalized_locale not in self._bundles: - self._create_bundle(normalized_locale) - return self._bundles[normalized_locale].add_resource_stream( - lines, source_path=source_path - ) - - def _handle_message_not_found( - self, - message_id: MessageId, - errors: list[FrozenFluentError], - ) -> tuple[str, tuple[FrozenFluentError, ...]]: - """Handle message-not-found with consistent validation. - - Uses pattern matching to distinguish between empty/invalid message IDs - and valid IDs that simply weren't found in any locale. - - In strict mode, raises FormattingIntegrityError instead of returning - a fallback value. Financial applications must never silently display - placeholder text like ``{message_id}`` to end users. - - Args: - message_id: The message ID that was not found - errors: Mutable error list to append to - - Returns: - Tuple of (fallback_value, errors_tuple) - - Raises: - FormattingIntegrityError: In strict mode, always raised - """ - match message_id: - case str() if message_id: - # Valid but not found - diagnostic = Diagnostic( - code=DiagnosticCode.MESSAGE_NOT_FOUND, - message=f"Message '{message_id}' not found in any locale", - ) - error = FrozenFluentError( - str(diagnostic), ErrorCategory.REFERENCE, diagnostic=diagnostic - ) - errors.append(error) - fallback = FALLBACK_MISSING_MESSAGE.format(id=message_id) - case _: - # Empty or invalid message ID - diagnostic = Diagnostic( - code=DiagnosticCode.MESSAGE_NOT_FOUND, - message="Empty or invalid message ID", - ) - error = FrozenFluentError( - str(diagnostic), ErrorCategory.REFERENCE, diagnostic=diagnostic - ) - errors.append(error) - fallback = FALLBACK_INVALID - - errors_tuple = tuple(errors) - - if self._strict: - self._raise_strict_error(message_id, fallback, error) - - return (fallback, errors_tuple) - - def _raise_strict_error( - self, - message_id: MessageId, - fallback_value: str, - error: FrozenFluentError, - ) -> NoReturn: - """Raise FormattingIntegrityError for strict mode. - - Called from three single-error paths: - - format_pattern: invalid args type (not a Mapping or None) - - format_pattern: invalid attribute type (not str or None) - - _handle_message_not_found: message not found or invalid message ID - - Each call site produces exactly one error, matching the single-error - signature. The single-error constraint is enforced by the type signature. - - Args: - message_id: The message ID that failed - fallback_value: Value that would be returned in non-strict mode - error: The FrozenFluentError describing the failure - - Raises: - FormattingIntegrityError: Always raised with error details - """ - context = IntegrityContext( - component="localization", - operation="format_pattern", - key=str(message_id), - expected="", - actual="<1 error>", - timestamp=time.monotonic(), - wall_time_unix=time.time(), - ) - - msg = f"Strict mode: '{message_id}' failed: {error}" - raise FormattingIntegrityError( - msg, - context=context, - fluent_errors=(error,), - fallback_value=fallback_value, - message_id=str(message_id), - ) - - def format_value( - self, message_id: MessageId, args: Mapping[str, FluentValue] | None = None - ) -> tuple[str, tuple[FrozenFluentError, ...]]: - """Format message with fallback chain. - - Delegates to format_pattern() with attribute=None. Provided as a - convenience alias that matches Mozilla python-fluent's format_value API. - - Args: - message_id: Message identifier (e.g., 'welcome', 'error-404') - args: Message arguments for variable interpolation - - Returns: - Tuple of (formatted_value, errors) - - If message found: Returns formatted result from first bundle with message - - If not found: Returns ({message_id}, (error,)) - - Raises: - FormattingIntegrityError: In strict mode, raised when formatting - produces errors or when the message is not found in any locale. - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> l10n.add_resource('lv', 'welcome = Sveiki!') - >>> l10n.add_resource('en', 'welcome = Hello!') - >>> result, errors = l10n.format_value('welcome') - >>> result - 'Sveiki!' - """ - return self.format_pattern(message_id, args) - - def has_message(self, message_id: MessageId) -> bool: - """Check if message exists in any locale. - - Args: - message_id: Message identifier - - Returns: - True if message exists in at least one locale - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - if bundle.has_message(message_id): - return True - return False - - def format_pattern( - self, - message_id: MessageId, - args: Mapping[str, FluentValue] | None = None, - *, - attribute: str | None = None, - ) -> tuple[str, tuple[FrozenFluentError, ...]]: - """Format message with attribute support (fallback chain). - - Extends format_value() with attribute access. - - Args: - message_id: Message identifier - args: Variable arguments - attribute: Attribute name (e.g., "tooltip", "aria-label") - - Returns: - Tuple of (formatted_value, errors) - - Raises: - FormattingIntegrityError: In strict mode, raised when formatting - produces errors or when the message is not found in any locale. - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> l10n.add_resource('lv', ''' - ... button = Klikšķināt - ... .tooltip = Klikšķiniet, lai iesniegtu - ... ''') - >>> result, errors = l10n.format_pattern("button", attribute="tooltip") - >>> result - 'Klikšķiniet, lai iesniegtu' - """ - errors: list[FrozenFluentError] = [] - - if not self._check_mapping_arg(args, errors): - if self._strict: - self._raise_strict_error(message_id, FALLBACK_INVALID, errors[-1]) - return (FALLBACK_INVALID, tuple(errors)) - - # Validate attribute is None or a string - if attribute is not None and not isinstance(attribute, str): - attr_type = type(attribute).__name__ # type: ignore[unreachable] - diagnostic = Diagnostic( - code=DiagnosticCode.INVALID_ARGUMENT, - message=f"Invalid attribute type: expected str or None, got {attr_type}", - ) - attr_error = FrozenFluentError( - str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic - ) - errors.append(attr_error) - if self._strict: - self._raise_strict_error(message_id, FALLBACK_INVALID, attr_error) - return (FALLBACK_INVALID, tuple(errors)) - - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - - if bundle.has_message(message_id): - try: - value, bundle_errors = bundle.format_pattern( - message_id, args, attribute=attribute - ) - except FormattingIntegrityError as exc: - # Re-raise with corrected component: the caller invoked - # localization.format_pattern(), not bundle.format_pattern() directly. - old_ctx = exc.context - err_count = len(exc.fluent_errors) - new_ctx = IntegrityContext( - component="localization", - operation=old_ctx.operation if old_ctx else "format_pattern", - key=old_ctx.key if old_ctx else str(message_id), - expected=old_ctx.expected if old_ctx else "", - actual=old_ctx.actual if old_ctx else f"<{err_count} error(s)>", - timestamp=old_ctx.timestamp if old_ctx else time.monotonic(), - wall_time_unix=old_ctx.wall_time_unix if old_ctx else time.time(), - ) - raise FormattingIntegrityError( - str(exc), - context=new_ctx, - fluent_errors=exc.fluent_errors, - fallback_value=exc.fallback_value, - message_id=exc.message_id, - ) from exc - errors.extend(bundle_errors) - - if ( - self._on_fallback is not None - and locale != self._primary_locale - ): - fallback_info = FallbackInfo( - requested_locale=self._primary_locale, - resolved_locale=locale, - message_id=message_id, - ) - self._on_fallback(fallback_info) - - return (value, tuple(errors)) - - return self._handle_message_not_found(message_id, errors) - - def add_function(self, name: str, func: Callable[..., FluentValue]) -> None: - """Register custom function on all bundles. - - Functions are applied immediately to any already-created bundles, - and stored for deferred application to bundles created later. - This preserves lazy bundle initialization. - - Thread-safe via internal RWLock. - - Args: - name: Function name (UPPERCASE by convention) - func: Python function implementation returning FluentValue - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> def CUSTOM(value: str) -> str: - ... return value.upper() - >>> l10n.add_function("CUSTOM", CUSTOM) - >>> l10n.add_resource('en', 'msg = { CUSTOM($text) }') - >>> result, _ = l10n.format_value('msg', {'text': 'hello'}) - >>> result - 'HELLO' - """ - with self._lock.write(): - # Store for future bundle creation (lazy loading support) - self._pending_functions[name] = func - - # Apply to any already-created bundles - for bundle in self._bundles.values(): - bundle.add_function(name, func) - - def introspect_message( - self, - message_id: MessageId, - ) -> MessageIntrospection | None: - """Get message introspection from first bundle with message. - - Args: - message_id: Message identifier - - Returns: - MessageIntrospection or None if not found - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - if bundle.has_message(message_id): - return bundle.introspect_message(message_id) - return None - - def has_attribute( - self, - message_id: MessageId, - attribute: str, - ) -> bool: - """Check if message has specific attribute in any locale. - - Tries bundles in fallback order. Returns True if any bundle - has the message AND the specified attribute. - - Args: - message_id: Message identifier - attribute: Attribute name - - Returns: - True if attribute exists in at least one locale - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - if bundle.has_attribute(message_id, attribute): - return True - return False - - def get_message_ids(self) -> list[str]: - """Get all message IDs across all locales. - - Returns the union of message IDs from all bundles, ordered by - first appearance in locale priority order. Primary locale IDs - appear first. - - Returns: - List of unique message identifiers - """ - seen: set[str] = set() - result: list[str] = [] - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - for msg_id in bundle.get_message_ids(): - if msg_id not in seen: - seen.add(msg_id) - result.append(msg_id) - return result - - def get_message_variables( - self, - message_id: MessageId, - ) -> frozenset[str]: - """Get variables required by a message. - - Delegates to the first bundle in fallback order that has the - message. - - Args: - message_id: Message identifier - - Returns: - Frozen set of variable names (without $ prefix) - - Raises: - KeyError: If message not found in any locale - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - if bundle.has_message(message_id): - return bundle.get_message_variables(message_id) - msg = f"Message '{message_id}' not found in any locale" - raise KeyError(msg) - - def get_all_message_variables(self) -> dict[str, frozenset[str]]: - """Get variables for all messages across all locales. - - Merges variables from all bundles. For messages present in - multiple locales, the primary locale's variables take - precedence (first-wins). - - Returns: - Dictionary mapping message IDs to variable sets - """ - result: dict[str, frozenset[str]] = {} - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - for msg_id, variables in bundle.get_all_message_variables().items(): - if msg_id not in result: - result[msg_id] = variables - return result - - def introspect_term( - self, - term_id: str, - ) -> MessageIntrospection | None: - """Get term introspection from first bundle with term. - - Tries bundles in fallback order. - - Args: - term_id: Term identifier (without leading dash) - - Returns: - MessageIntrospection or None if not found - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - try: - return bundle.introspect_term(term_id) - except KeyError: - continue - return None - - def get_message(self, message_id: MessageId) -> Message | None: - """Return the parsed AST node for a message using the fallback chain. - - Searches bundles in locale priority order and returns the Message from - the first locale that contains it. Returns None if no locale has the - message. - - This enables callers to use validate_message_variables() directly with - the structured MessageVariableValidationResult return type, rather than - performing variable set arithmetic via get_message_variables(). - - Args: - message_id: Message identifier - - Returns: - Message AST node from the highest-priority locale that has it, - or None if not found in any locale - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> l10n.add_resource('lv', 'greeting = Sveiki, { $name }!') - >>> msg = l10n.get_message('greeting') - >>> if msg is not None: - ... from ftllexengine import validate_message_variables - ... result = validate_message_variables(msg, frozenset({'name'})) - ... assert result.is_valid - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - msg = bundle.get_message(message_id) - if msg is not None: - return msg - return None - - def get_term(self, term_id: str) -> Term | None: - """Return the parsed AST node for a term using the fallback chain. - - Searches bundles in locale priority order and returns the Term from - the first locale that contains it. The term_id should be supplied - without the leading dash (e.g., ``"brand"`` for ``-brand``). - - Args: - term_id: Term identifier without leading dash - - Returns: - Term AST node from the highest-priority locale that has it, - or None if not found in any locale - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> l10n.add_resource('lv', '-brand = Firefox') - >>> term = l10n.get_term('brand') - >>> assert term is not None - """ - for locale in self._locales: - bundle = self._get_or_create_bundle(locale) - term = bundle.get_term(term_id) - if term is not None: - return term - return None - - def get_babel_locale(self) -> str: - """Get Babel locale identifier from primary bundle. - - Returns Babel Locale for the first locale in fallback chain. - Useful for integrating with Babel's formatting functions. - - Returns: - Babel locale identifier - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> locale = l10n.get_babel_locale() - >>> locale - 'lv' - """ - primary_locale = self._locales[0] - bundle = self._get_or_create_bundle(primary_locale) - return bundle.get_babel_locale() - - def validate_resource(self, ftl_source: FTLSource) -> ValidationResult: - """Validate FTL resource without adding to bundles. - - Uses primary locale's bundle for validation. - - Args: - ftl_source: FTL source code - - Returns: - ValidationResult with errors and warnings - - Example: - >>> l10n = FluentLocalization(['lv', 'en']) - >>> result = l10n.validate_resource("msg = Hello") - >>> result.is_valid - True - """ - primary_locale = self._locales[0] - bundle = self._get_or_create_bundle(primary_locale) - return bundle.validate_resource(ftl_source) - - def clear_cache(self) -> None: - """Clear format cache on all initialized bundles. - - Calls clear_cache() on each bundle that has been created. - Does not create new bundles. - - Thread-safe via internal RWLock. - """ - with self._lock.write(): - for bundle in self._bundles.values(): - bundle.clear_cache() - - def get_cache_stats(self) -> LocalizationCacheStats | None: - """Get aggregate cache statistics across all initialized bundles. - - Aggregates cache metrics from all bundles that have been created. - Useful for production monitoring of multi-locale deployments. - All fields from IntegrityCache.get_stats() are included so callers - can monitor corruption events, oversize skips, and audit state. - - Returns: - LocalizationCacheStats with aggregated metrics, or None if caching disabled. - Numeric fields are summed across all bundles; boolean fields - (write_once, strict, audit_enabled) reflect the first bundle's - configuration (all bundles share the same CacheConfig). - See LocalizationCacheStats and CacheStats for field definitions. - - Thread-safe via internal RWLock (read lock). - - Example: - >>> l10n = FluentLocalization(['en', 'de'], cache=CacheConfig()) - >>> l10n.add_resource('en', 'msg = Hello') - >>> l10n.add_resource('de', 'msg = Hallo') - >>> l10n.format_value('msg') # Uses 'en' bundle - >>> stats = l10n.get_cache_stats() - >>> stats["bundle_count"] - 2 - >>> stats["size"] # Total entries across all bundles - 1 - >>> stats["corruption_detected"] # Zero for healthy cache - 0 - """ - if self._cache_config is None: - return None - - with self._lock.read(): - total_size = 0 - total_maxsize = 0 - total_hits = 0 - total_misses = 0 - total_unhashable = 0 - total_oversize = 0 - total_error_bloat = 0 - total_combined_weight = 0 - total_corruption = 0 - total_idempotent = 0 - total_write_once_conflicts = 0 - total_sequence = 0 - total_audit_entries = 0 - # Boolean fields: representative from first bundle (all share same CacheConfig) - first_write_once: bool = False - first_strict: bool = False - first_audit_enabled: bool = False - first_max_entry_weight: int = 0 - first_max_errors: int = 0 - is_first = True - - for bundle in self._bundles.values(): - stats = bundle.get_cache_stats() - if stats is not None: - total_size += stats["size"] - total_maxsize += stats["maxsize"] - total_hits += stats["hits"] - total_misses += stats["misses"] - total_unhashable += stats["unhashable_skips"] - total_oversize += stats["oversize_skips"] - total_error_bloat += stats["error_bloat_skips"] - total_combined_weight += stats["combined_weight_skips"] - total_corruption += stats["corruption_detected"] - total_idempotent += stats["idempotent_writes"] - total_write_once_conflicts += stats["write_once_conflicts"] - total_sequence += stats["sequence"] - total_audit_entries += stats["audit_entries"] - if is_first: - first_write_once = stats["write_once"] - first_strict = stats["strict"] - first_audit_enabled = stats["audit_enabled"] - first_max_entry_weight = stats["max_entry_weight"] - first_max_errors = stats["max_errors_per_entry"] - is_first = False - - total_requests = total_hits + total_misses - hit_rate = (total_hits / total_requests * 100) if total_requests > 0 else 0.0 - - return { - "size": total_size, - "maxsize": total_maxsize, - "max_entry_weight": first_max_entry_weight, - "max_errors_per_entry": first_max_errors, - "hits": total_hits, - "misses": total_misses, - "hit_rate": round(hit_rate, 2), - "unhashable_skips": total_unhashable, - "oversize_skips": total_oversize, - "error_bloat_skips": total_error_bloat, - "combined_weight_skips": total_combined_weight, - "corruption_detected": total_corruption, - "idempotent_writes": total_idempotent, - "write_once_conflicts": total_write_once_conflicts, - "sequence": total_sequence, - "write_once": first_write_once, - "strict": first_strict, - "audit_enabled": first_audit_enabled, - "audit_entries": total_audit_entries, - "bundle_count": len(self._bundles), - } - - def get_cache_audit_log(self) -> dict[LocaleCode, tuple[CacheAuditLogEntry, ...]] | None: - """Get per-locale cache audit logs for initialized bundles. - - Returns: - Mapping of initialized locale codes to immutable cache audit-log entry - tuples, or None if caching is disabled. Bundles with audit logging - disabled return empty tuples. Uninitialized bundles are omitted and - this method does not create them. - """ - if self._cache_config is None: - return None - - with self._lock.read(): - audit_logs: dict[LocaleCode, tuple[CacheAuditLogEntry, ...]] = {} - for locale in self._locales: - bundle = self._bundles.get(locale) - if bundle is None: - continue - - audit_log = bundle.get_cache_audit_log() - if audit_log is not None: - audit_logs[locale] = audit_log - - return audit_logs - - def get_bundles(self) -> Generator[FluentBundle]: - """Lazy generator yielding bundles in fallback order. - - Enables advanced use cases where direct bundle access is needed. - Creates bundles lazily if they don't exist yet. - - Yields: - FluentBundle instances in locale priority order - """ - yield from (self._get_or_create_bundle(locale) for locale in self._locales) diff --git a/src/ftllexengine/localization/orchestrator_formatting.py b/src/ftllexengine/localization/orchestrator_formatting.py new file mode 100644 index 00000000..832e044c --- /dev/null +++ b/src/ftllexengine/localization/orchestrator_formatting.py @@ -0,0 +1,216 @@ +"""Formatting and mutation helpers for FluentLocalization.""" + +from __future__ import annotations + +import time +from typing import TYPE_CHECKING, NoReturn + +from ftllexengine.constants import FALLBACK_INVALID, FALLBACK_MISSING_MESSAGE +from ftllexengine.core.locale_utils import require_locale_code +from ftllexengine.diagnostics.codes import Diagnostic, DiagnosticCode +from ftllexengine.diagnostics.errors import ErrorCategory, FrozenFluentError +from ftllexengine.integrity import FormattingIntegrityError, IntegrityContext +from ftllexengine.localization.loading import FallbackInfo + +if TYPE_CHECKING: + from collections.abc import Callable, Iterable, Mapping + + from ftllexengine.core.semantic_types import FTLSource, LocaleCode, MessageId + from ftllexengine.core.value_types import FluentValue + from ftllexengine.localization.orchestrator_protocols import LocalizationStateProtocol + from ftllexengine.syntax import Junk + + +class _LocalizationFormattingMixin: + """Formatting and mutation behavior for FluentLocalization.""" + + def add_resource( + self: LocalizationStateProtocol, locale: LocaleCode, ftl_source: FTLSource + ) -> tuple[Junk, ...]: + """Add FTL resource to a specific locale bundle.""" + normalized_locale = require_locale_code(locale, "locale") + + with self._lock.write(): + if normalized_locale not in self._locales: + msg = f"Locale '{normalized_locale}' not in fallback chain {self._locales}" + raise ValueError(msg) + + if normalized_locale not in self._bundles: + self._create_bundle(normalized_locale) + return self._bundles[normalized_locale].add_resource(ftl_source) + + def add_resource_stream( + self: LocalizationStateProtocol, + locale: LocaleCode, + lines: Iterable[str], + *, + source_path: str | None = None, + ) -> tuple[Junk, ...]: + """Add FTL resource to a locale bundle from a line-oriented stream.""" + normalized_locale = require_locale_code(locale, "locale") + + with self._lock.write(): + if normalized_locale not in self._locales: + msg = f"Locale '{normalized_locale}' not in fallback chain {self._locales}" + raise ValueError(msg) + + if normalized_locale not in self._bundles: + self._create_bundle(normalized_locale) + return self._bundles[normalized_locale].add_resource_stream( + lines, source_path=source_path + ) + + def _handle_message_not_found( + self: LocalizationStateProtocol, + message_id: MessageId, + errors: list[FrozenFluentError], + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + """Handle missing-message fallbacks consistently.""" + match message_id: + case str() if message_id: + diagnostic = Diagnostic( + code=DiagnosticCode.MESSAGE_NOT_FOUND, + message=f"Message '{message_id}' not found in any locale", + ) + error = FrozenFluentError( + str(diagnostic), ErrorCategory.REFERENCE, diagnostic=diagnostic + ) + errors.append(error) + fallback = FALLBACK_MISSING_MESSAGE.format(id=message_id) + case _: + diagnostic = Diagnostic( + code=DiagnosticCode.MESSAGE_NOT_FOUND, + message="Empty or invalid message ID", + ) + error = FrozenFluentError( + str(diagnostic), ErrorCategory.REFERENCE, diagnostic=diagnostic + ) + errors.append(error) + fallback = FALLBACK_INVALID + + errors_tuple = tuple(errors) + if self._strict: + self._raise_strict_error(message_id, fallback, error) + return (fallback, errors_tuple) + + def _raise_strict_error( + self: LocalizationStateProtocol, + message_id: MessageId, + fallback_value: str, + error: FrozenFluentError, + ) -> NoReturn: + """Raise FormattingIntegrityError for localization-level failures.""" + context = IntegrityContext( + component="localization", + operation="format_pattern", + key=str(message_id), + expected="", + actual="<1 error>", + timestamp=time.monotonic(), + wall_time_unix=time.time(), + ) + msg = f"Strict mode: '{message_id}' failed: {error}" + raise FormattingIntegrityError( + msg, + context=context, + fluent_errors=(error,), + fallback_value=fallback_value, + message_id=str(message_id), + ) + + def format_value( + self: LocalizationStateProtocol, + message_id: MessageId, + args: Mapping[str, FluentValue] | None = None, + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + """Format a value by delegating to ``format_pattern``.""" + return self.format_pattern(message_id, args) + + def has_message(self: LocalizationStateProtocol, message_id: MessageId) -> bool: + """Return whether any locale in the chain contains ``message_id``.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + if bundle.has_message(message_id): + return True + return False + + def format_pattern( + self: LocalizationStateProtocol, + message_id: MessageId, + args: Mapping[str, FluentValue] | None = None, + *, + attribute: str | None = None, + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + """Format a message with fallback-chain semantics.""" + errors: list[FrozenFluentError] = [] + + if not self._check_mapping_arg(args, errors): + if self._strict: + self._raise_strict_error(message_id, FALLBACK_INVALID, errors[-1]) + return (FALLBACK_INVALID, tuple(errors)) + + raw_attribute: object = attribute + if raw_attribute is not None and not isinstance(raw_attribute, str): + attr_type = type(raw_attribute).__name__ + diagnostic = Diagnostic( + code=DiagnosticCode.INVALID_ARGUMENT, + message=f"Invalid attribute type: expected str or None, got {attr_type}", + ) + attr_error = FrozenFluentError( + str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic + ) + errors.append(attr_error) + if self._strict: + self._raise_strict_error(message_id, FALLBACK_INVALID, attr_error) + return (FALLBACK_INVALID, tuple(errors)) + + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + if not bundle.has_message(message_id): + continue + + try: + value, bundle_errors = bundle.format_pattern(message_id, args, attribute=attribute) + except FormattingIntegrityError as exc: + old_ctx = exc.context + err_count = len(exc.fluent_errors) + new_ctx = IntegrityContext( + component="localization", + operation=old_ctx.operation if old_ctx else "format_pattern", + key=old_ctx.key if old_ctx else str(message_id), + expected=old_ctx.expected if old_ctx else "", + actual=old_ctx.actual if old_ctx else f"<{err_count} error(s)>", + timestamp=old_ctx.timestamp if old_ctx else time.monotonic(), + wall_time_unix=old_ctx.wall_time_unix if old_ctx else time.time(), + ) + raise FormattingIntegrityError( + str(exc), + context=new_ctx, + fluent_errors=exc.fluent_errors, + fallback_value=exc.fallback_value, + message_id=exc.message_id, + ) from exc + + errors.extend(bundle_errors) + + if self._on_fallback is not None and locale != self._primary_locale: + self._on_fallback( + FallbackInfo( + requested_locale=self._primary_locale, + resolved_locale=locale, + message_id=message_id, + ) + ) + + return (value, tuple(errors)) + + return self._handle_message_not_found(message_id, errors) + + def add_function( + self: LocalizationStateProtocol, name: str, func: Callable[..., FluentValue] + ) -> None: + """Register a custom function on current and future bundles.""" + with self._lock.write(): + self._pending_functions[name] = func + for bundle in self._bundles.values(): + bundle.add_function(name, func) diff --git a/src/ftllexengine/localization/orchestrator_loading.py b/src/ftllexengine/localization/orchestrator_loading.py new file mode 100644 index 00000000..e16a230b --- /dev/null +++ b/src/ftllexengine/localization/orchestrator_loading.py @@ -0,0 +1,294 @@ +"""Loading and validation helpers for FluentLocalization.""" + +from __future__ import annotations + +import time +from collections.abc import Mapping +from typing import TYPE_CHECKING, NoReturn + +from ftllexengine.diagnostics.codes import Diagnostic, DiagnosticCode +from ftllexengine.diagnostics.errors import ErrorCategory, FrozenFluentError +from ftllexengine.enums import LoadStatus +from ftllexengine.integrity import IntegrityCheckFailedError, IntegrityContext +from ftllexengine.introspection import MessageVariableValidationResult +from ftllexengine.introspection import ( + validate_message_variables as validate_message_ast_variables, +) +from ftllexengine.localization.loading import LoadSummary, ResourceLoader, ResourceLoadResult +from ftllexengine.runtime.bundle import FluentBundle + +if TYPE_CHECKING: + from ftllexengine.core.semantic_types import LocaleCode, MessageId, ResourceId + from ftllexengine.core.value_types import FluentValue + from ftllexengine.localization.orchestrator_protocols import LocalizationStateProtocol + + +class _LocalizationLoadingMixin: + """Lifecycle and schema-validation behavior for FluentLocalization.""" + + def _create_bundle( + self: LocalizationStateProtocol, locale: LocaleCode + ) -> FluentBundle: + """Create and register a bundle for ``locale``.""" + bundle = FluentBundle( + locale, + use_isolating=self._use_isolating, + cache=self._cache_config, + strict=self._strict, + ) + for name, func in self._pending_functions.items(): + bundle.add_function(name, func) + self._bundles[locale] = bundle + return bundle + + def _get_or_create_bundle( + self: LocalizationStateProtocol, locale: LocaleCode + ) -> FluentBundle: + """Get an existing bundle or create it lazily.""" + with self._lock.read(): + if locale in self._bundles: + return self._bundles[locale] + + with self._lock.write(): + if locale in self._bundles: # pragma: no cover + return self._bundles[locale] + return self._create_bundle(locale) + + def _load_single_resource( + self: LocalizationStateProtocol, + locale: LocaleCode, + resource_id: ResourceId, + resource_loader: ResourceLoader, + ) -> ResourceLoadResult: + """Load one resource for one locale and capture the outcome.""" + source_path = resource_loader.describe_path(locale, resource_id) + + try: + ftl_source = resource_loader.load(locale, resource_id) + bundle = self._get_or_create_bundle(locale) + junk_entries = bundle.add_resource(ftl_source, source_path=source_path) + return ResourceLoadResult( + locale=locale, + resource_id=resource_id, + status=LoadStatus.SUCCESS, + source_path=source_path, + junk_entries=junk_entries, + ) + except FileNotFoundError: + return ResourceLoadResult( + locale=locale, + resource_id=resource_id, + status=LoadStatus.NOT_FOUND, + source_path=source_path, + ) + except (OSError, ValueError) as error: + return ResourceLoadResult( + locale=locale, + resource_id=resource_id, + status=LoadStatus.ERROR, + error=error, + source_path=source_path, + ) + + @staticmethod + def _check_mapping_arg( + args: Mapping[str, FluentValue] | None, + errors: list[FrozenFluentError], + ) -> bool: + """Validate that ``args`` is ``None`` or a mapping.""" + raw_args: object = args + if raw_args is not None and not isinstance(raw_args, Mapping): + diagnostic = Diagnostic( + code=DiagnosticCode.INVALID_ARGUMENT, + message=( + f"Invalid args type: expected Mapping or None, got " + f"{type(raw_args).__name__}" + ), + ) + errors.append( + FrozenFluentError( + str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic + ) + ) + return False + return True + + def get_load_summary(self: LocalizationStateProtocol) -> LoadSummary: + """Return the immutable initialization load summary.""" + return LoadSummary(results=tuple(self._load_results)) + + @staticmethod + def _describe_unclean_load_result( + result: ResourceLoadResult, + ) -> tuple[str, str]: + """Describe the first non-clean initialization result.""" + key = result.source_path or f"{result.locale}/{result.resource_id}" + if result.is_error: + error_name = type(result.error).__name__ if result.error is not None else "UnknownError" + return (key, f"load error ({error_name})") + if result.is_not_found: + return (key, "resource not found") + + junk_count = len(result.junk_entries) + noun = "entry" if junk_count == 1 else "entries" + return (key, f"{junk_count} junk {noun}") + + def _raise_integrity_check_failed( + self: LocalizationStateProtocol, + operation: str, + message: str, + *, + key: str | None = None, + expected: str | None = None, + actual: str | None = None, + ) -> NoReturn: + """Raise IntegrityCheckFailedError with localization-scoped context.""" + context = IntegrityContext( + component="localization", + operation=operation, + key=key, + expected=expected, + actual=actual, + timestamp=time.monotonic(), + wall_time_unix=time.time(), + ) + raise IntegrityCheckFailedError(message, context=context) + + def require_clean(self: LocalizationStateProtocol) -> LoadSummary: + """Require a clean initialization load summary.""" + summary = self.get_load_summary() + if summary.all_clean: + return summary + + issue_key: str | None = None + issue_detail: str | None = None + for result in summary.results: # pragma: no branch + if result.is_error or result.is_not_found or result.has_junk: + issue_key, issue_detail = self._describe_unclean_load_result(result) + break + + actual = repr(summary) + detail = ( + f" First issue: {issue_detail} at {issue_key}." + if issue_key and issue_detail + else "" + ) + msg = f"Localization initialization is not clean: {actual}.{detail}" + self._raise_integrity_check_failed( + "require_clean", + msg, + key=issue_key, + expected="LoadSummary(all_clean=True)", + actual=actual, + ) + raise AssertionError # pragma: no cover + + @staticmethod + def _format_schema_difference( + validation: MessageVariableValidationResult, + ) -> str: + """Render a concise schema mismatch description.""" + parts: list[str] = [] + if validation.missing_variables: + missing = ", ".join(sorted(validation.missing_variables)) + parts.append(f"missing {{{missing}}}") + if validation.extra_variables: + extra = ", ".join(sorted(validation.extra_variables)) + parts.append(f"extra {{{extra}}}") + return "; ".join(parts) + + def _resolve_message_schema_validation( + self: LocalizationStateProtocol, + message_id: MessageId, + expected_variables: frozenset[str] | set[str], + ) -> MessageVariableValidationResult | None: + """Resolve a message through the fallback chain and validate its schema.""" + message = self.get_message(message_id) + if message is None: + return None + return validate_message_ast_variables(message, frozenset(expected_variables)) + + def validate_message_variables( + self: LocalizationStateProtocol, + message_id: str, + expected_variables: frozenset[str] | set[str], + ) -> MessageVariableValidationResult: + """Require an exact variable schema match for one fallback-resolved message.""" + validation = self._resolve_message_schema_validation(message_id, expected_variables) + if validation is None: + msg = f"Localization message schema validation failed: {message_id}: not found" + self._raise_integrity_check_failed( + "validate_message_variables", + msg, + key=message_id, + expected="1 exact schema match", + actual="missing_messages=1", + ) + + if validation.is_valid: + return validation + + difference = self._format_schema_difference(validation) + msg = f"Localization message schema validation failed: {message_id}: {difference}" + self._raise_integrity_check_failed( + "validate_message_variables", + msg, + key=message_id, + expected="1 exact schema match", + actual="schema_mismatches=1", + ) + raise AssertionError # pragma: no cover + + def validate_message_schemas( + self: LocalizationStateProtocol, + expected_schemas: Mapping[MessageId, frozenset[str] | set[str]], + ) -> tuple[MessageVariableValidationResult, ...]: + """Require exact variable-schema matches for specific messages.""" + results: list[MessageVariableValidationResult] = [] + mismatches: list[str] = [] + first_failure: str | None = None + missing_messages = 0 + schema_mismatches = 0 + + for message_id, expected_variables in expected_schemas.items(): + validation = self._resolve_message_schema_validation(message_id, expected_variables) + if validation is None: + first_failure = first_failure or str(message_id) + missing_messages += 1 + mismatches.append(f"{message_id}: not found") + continue + + results.append(validation) + if validation.is_valid: + continue + + first_failure = first_failure or message_id + schema_mismatches += 1 + difference = self._format_schema_difference(validation) + mismatches.append(f"{message_id}: {difference}") + + if missing_messages > 0 or schema_mismatches > 0: + fragments = mismatches[:3] + remaining = len(mismatches) - len(fragments) + if remaining > 0: + noun = "issue" if remaining == 1 else "issues" + fragments.append(f"... {remaining} more {noun}") + + actual_parts: list[str] = [] + if missing_messages > 0: + actual_parts.append(f"missing_messages={missing_messages}") + if schema_mismatches > 0: + actual_parts.append(f"schema_mismatches={schema_mismatches}") + + actual = ", ".join(actual_parts) + summary = "; ".join(fragments) + msg = f"Localization message schema validation failed: {summary}" + self._raise_integrity_check_failed( + "validate_message_schemas", + msg, + key=first_failure, + expected=f"{len(expected_schemas)} exact schema match(es)", + actual=actual, + ) + + return tuple(results) diff --git a/src/ftllexengine/localization/orchestrator_protocols.py b/src/ftllexengine/localization/orchestrator_protocols.py new file mode 100644 index 00000000..49e83d5b --- /dev/null +++ b/src/ftllexengine/localization/orchestrator_protocols.py @@ -0,0 +1,108 @@ +"""Type-checking protocols for FluentLocalization mixins.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, NoReturn, Protocol + +if TYPE_CHECKING: + from collections.abc import Callable, Mapping + + from ftllexengine.core.semantic_types import LocaleCode, MessageId + from ftllexengine.core.value_types import FluentValue + from ftllexengine.diagnostics import FrozenFluentError + from ftllexengine.introspection import MessageVariableValidationResult + from ftllexengine.localization.loading import ( + FallbackInfo, + LoadSummary, + ResourceLoadResult, + ) + from ftllexengine.runtime.bundle import FluentBundle + from ftllexengine.runtime.cache_config import CacheConfig + from ftllexengine.runtime.rwlock import RWLock + from ftllexengine.syntax import Message + + +class LocalizationStateProtocol(Protocol): + """Structural contract implemented by FluentLocalization for its mixins.""" + + _bundles: dict[LocaleCode, FluentBundle] + _cache_config: CacheConfig | None + _load_results: list[ResourceLoadResult] + _locales: tuple[LocaleCode, ...] + _lock: RWLock + _on_fallback: Callable[[FallbackInfo], None] | None + _pending_functions: dict[str, Callable[..., FluentValue]] + _primary_locale: LocaleCode + _strict: bool + _use_isolating: bool + + def _create_bundle(self, locale: LocaleCode) -> FluentBundle: + ... # pragma: no cover - typing-only protocol declaration + + def _get_or_create_bundle(self, locale: LocaleCode) -> FluentBundle: + ... # pragma: no cover - typing-only protocol declaration + + @staticmethod + def _check_mapping_arg( + args: Mapping[str, FluentValue] | None, + errors: list[FrozenFluentError], + ) -> bool: + ... # pragma: no cover - typing-only protocol declaration + + def get_message(self, message_id: MessageId) -> Message | None: + ... # pragma: no cover - typing-only protocol declaration + + def _handle_message_not_found( + self, + message_id: MessageId, + errors: list[FrozenFluentError], + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + ... # pragma: no cover - typing-only protocol declaration + + def format_pattern( + self, + message_id: MessageId, + args: Mapping[str, FluentValue] | None = None, + *, + attribute: str | None = None, + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + ... # pragma: no cover - typing-only protocol declaration + + def _raise_strict_error( + self, + message_id: MessageId, + fallback_value: str, + error: FrozenFluentError, + ) -> NoReturn: + ... # pragma: no cover - typing-only protocol declaration + + def get_load_summary(self) -> LoadSummary: + ... # pragma: no cover - typing-only protocol declaration + + @staticmethod + def _describe_unclean_load_result(result: ResourceLoadResult) -> tuple[str, str]: + ... # pragma: no cover - typing-only protocol declaration + + def _raise_integrity_check_failed( + self, + operation: str, + message: str, + *, + key: str | None = None, + expected: str | None = None, + actual: str | None = None, + ) -> NoReturn: + ... # pragma: no cover - typing-only protocol declaration + + @staticmethod + def _format_schema_difference( + validation: MessageVariableValidationResult, + ) -> str: + ... # pragma: no cover - typing-only protocol declaration + + def _resolve_message_schema_validation( + self, + message_id: MessageId, + expected_variables: frozenset[str] | set[str], + ) -> MessageVariableValidationResult | None: + ... # pragma: no cover - typing-only protocol declaration diff --git a/src/ftllexengine/localization/orchestrator_queries.py b/src/ftllexengine/localization/orchestrator_queries.py new file mode 100644 index 00000000..f282bf6b --- /dev/null +++ b/src/ftllexengine/localization/orchestrator_queries.py @@ -0,0 +1,240 @@ +"""Query and cache-reporting helpers for FluentLocalization.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, cast + +if TYPE_CHECKING: + from collections.abc import Iterator + + from ftllexengine.core.semantic_types import FTLSource, LocaleCode, MessageId + from ftllexengine.diagnostics import ValidationResult + from ftllexengine.introspection import MessageIntrospection + from ftllexengine.localization.orchestrator import LocalizationCacheStats + from ftllexengine.localization.orchestrator_protocols import LocalizationStateProtocol + from ftllexengine.runtime.bundle import FluentBundle + from ftllexengine.runtime.cache import CacheAuditLogEntry + from ftllexengine.syntax import Message, Term + + +class _LocalizationQueryMixin: + """Read-only query behavior for FluentLocalization.""" + + def introspect_message( + self: LocalizationStateProtocol, + message_id: MessageId, + ) -> MessageIntrospection | None: + """Return introspection for the first locale containing ``message_id``.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + if bundle.has_message(message_id): + return bundle.introspect_message(message_id) + return None + + def has_attribute( + self: LocalizationStateProtocol, + message_id: MessageId, + attribute: str, + ) -> bool: + """Return whether any locale exposes ``attribute`` for ``message_id``.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + if bundle.has_attribute(message_id, attribute): + return True + return False + + def get_message_ids(self: LocalizationStateProtocol) -> list[str]: + """Return the union of message IDs across the fallback chain.""" + seen: set[str] = set() + result: list[str] = [] + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + for msg_id in bundle.get_message_ids(): + if msg_id not in seen: + seen.add(msg_id) + result.append(msg_id) + return result + + def get_message_variables( + self: LocalizationStateProtocol, + message_id: MessageId, + ) -> frozenset[str]: + """Return variables from the first locale that contains ``message_id``.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + if bundle.has_message(message_id): + return bundle.get_message_variables(message_id) + msg = f"Message '{message_id}' not found in any locale" + raise KeyError(msg) + + def get_all_message_variables( + self: LocalizationStateProtocol, + ) -> dict[str, frozenset[str]]: + """Return variables for all messages across the fallback chain.""" + result: dict[str, frozenset[str]] = {} + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + for msg_id, variables in bundle.get_all_message_variables().items(): + if msg_id not in result: + result[msg_id] = variables + return result + + def introspect_term( + self: LocalizationStateProtocol, + term_id: str, + ) -> MessageIntrospection | None: + """Return term introspection from the first locale that contains it.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + try: + return bundle.introspect_term(term_id) + except KeyError: + continue + return None + + def get_message( + self: LocalizationStateProtocol, message_id: MessageId + ) -> Message | None: + """Return the first message AST node found across the fallback chain.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + message = bundle.get_message(message_id) + if message is not None: + return message + return None + + def get_term(self: LocalizationStateProtocol, term_id: str) -> Term | None: + """Return the first term AST node found across the fallback chain.""" + for locale in self._locales: + bundle = self._get_or_create_bundle(locale) + term = bundle.get_term(term_id) + if term is not None: + return term + return None + + def get_babel_locale(self: LocalizationStateProtocol) -> str: + """Return the primary bundle's Babel locale identifier.""" + primary_locale = self._locales[0] + bundle = self._get_or_create_bundle(primary_locale) + return bundle.get_babel_locale() + + def validate_resource( + self: LocalizationStateProtocol, ftl_source: FTLSource + ) -> ValidationResult: + """Validate FTL source using the primary locale bundle.""" + primary_locale = self._locales[0] + bundle = self._get_or_create_bundle(primary_locale) + return bundle.validate_resource(ftl_source) + + def clear_cache(self: LocalizationStateProtocol) -> None: + """Clear caches on all initialized bundles.""" + with self._lock.write(): + for bundle in self._bundles.values(): + bundle.clear_cache() + + def get_cache_stats( + self: LocalizationStateProtocol, + ) -> LocalizationCacheStats | None: + """Aggregate cache statistics across initialized bundles.""" + if self._cache_config is None: + return None + + with self._lock.read(): + total_size = 0 + total_maxsize = 0 + total_hits = 0 + total_misses = 0 + total_unhashable = 0 + total_oversize = 0 + total_error_bloat = 0 + total_combined_weight = 0 + total_corruption = 0 + total_idempotent = 0 + total_write_once_conflicts = 0 + total_sequence = 0 + total_audit_entries = 0 + first_write_once = False + first_strict = False + first_audit_enabled = False + first_max_entry_weight = 0 + first_max_errors = 0 + is_first = True + + for bundle in self._bundles.values(): + stats = bundle.get_cache_stats() + if stats is None: + continue + + total_size += stats["size"] + total_maxsize += stats["maxsize"] + total_hits += stats["hits"] + total_misses += stats["misses"] + total_unhashable += stats["unhashable_skips"] + total_oversize += stats["oversize_skips"] + total_error_bloat += stats["error_bloat_skips"] + total_combined_weight += stats["combined_weight_skips"] + total_corruption += stats["corruption_detected"] + total_idempotent += stats["idempotent_writes"] + total_write_once_conflicts += stats["write_once_conflicts"] + total_sequence += stats["sequence"] + total_audit_entries += stats["audit_entries"] + if is_first: + first_write_once = stats["write_once"] + first_strict = stats["strict"] + first_audit_enabled = stats["audit_enabled"] + first_max_entry_weight = stats["max_entry_weight"] + first_max_errors = stats["max_errors_per_entry"] + is_first = False + + total_requests = total_hits + total_misses + hit_rate = (total_hits / total_requests * 100) if total_requests > 0 else 0.0 + + return cast( + "LocalizationCacheStats", + { + "size": total_size, + "maxsize": total_maxsize, + "max_entry_weight": first_max_entry_weight, + "max_errors_per_entry": first_max_errors, + "hits": total_hits, + "misses": total_misses, + "hit_rate": round(hit_rate, 2), + "unhashable_skips": total_unhashable, + "oversize_skips": total_oversize, + "error_bloat_skips": total_error_bloat, + "combined_weight_skips": total_combined_weight, + "corruption_detected": total_corruption, + "idempotent_writes": total_idempotent, + "write_once_conflicts": total_write_once_conflicts, + "sequence": total_sequence, + "write_once": first_write_once, + "strict": first_strict, + "audit_enabled": first_audit_enabled, + "audit_entries": total_audit_entries, + "bundle_count": len(self._bundles), + }, + ) + + def get_cache_audit_log( + self: LocalizationStateProtocol, + ) -> dict[LocaleCode, tuple[CacheAuditLogEntry, ...]] | None: + """Return per-locale audit logs for initialized bundles.""" + if self._cache_config is None: + return None + + with self._lock.read(): + audit_logs: dict[LocaleCode, tuple[CacheAuditLogEntry, ...]] = {} + for locale in self._locales: + bundle = self._bundles.get(locale) + if bundle is None: + continue + + audit_log = bundle.get_cache_audit_log() + if audit_log is not None: + audit_logs[locale] = audit_log + + return audit_logs + + def get_bundles(self: LocalizationStateProtocol) -> Iterator[FluentBundle]: + """Yield bundles in fallback order, creating them lazily as needed.""" + yield from (self._get_or_create_bundle(locale) for locale in self._locales) diff --git a/src/ftllexengine/localization/types.py b/src/ftllexengine/localization/types.py index 8ebf8c89..028b4b59 100644 --- a/src/ftllexengine/localization/types.py +++ b/src/ftllexengine/localization/types.py @@ -1,28 +1,13 @@ -"""Type aliases for the localization domain. +"""Compatibility re-export facade for localization semantic aliases. -Provides semantic type aliases used throughout the localization package -and by user code when annotating FluentLocalization call sites. - -Python 3.13+. Zero external dependencies. +The canonical definitions live in ``ftllexengine.core.semantic_types`` so lower +layers can annotate locale and resource boundaries without importing the +localization package. This module remains as the stable localization namespace +for callers that prefer ``ftllexengine.localization``-scoped imports. """ +from __future__ import annotations +from ftllexengine.core.semantic_types import FTLSource, LocaleCode, MessageId, ResourceId -__all__ = [ - "FTLSource", - "LocaleCode", - "MessageId", - "ResourceId", -] - -type MessageId = str -"""Identifier for a Fluent message (e.g., 'welcome', 'error-404').""" - -type LocaleCode = str -"""BCP-47 locale code (e.g., 'en', 'lv', 'zh-Hans-CN').""" - -type ResourceId = str -"""FTL resource file identifier (e.g., 'main.ftl', 'errors.ftl').""" - -type FTLSource = str -"""Raw FTL source text as a Python string.""" +__all__ = ["FTLSource", "LocaleCode", "MessageId", "ResourceId"] diff --git a/src/ftllexengine/parsing/__init__.py b/src/ftllexengine/parsing/__init__.py index caa2d85f..ebfcbe7e 100644 --- a/src/ftllexengine/parsing/__init__.py +++ b/src/ftllexengine/parsing/__init__.py @@ -32,9 +32,9 @@ clear_currency_caches - Clear cached CLDR currency data Examples: - >>> from ftllexengine.parsing import parse_decimal, is_valid_decimal - >>> result, errors = parse_decimal("1 234,56", "lv_LV") - >>> if not errors and is_valid_decimal(result): + >>> from ftllexengine.parsing import parse_decimal, is_valid_decimal # doctest: +SKIP + >>> result, errors = parse_decimal("1 234,56", "lv_LV") # doctest: +SKIP + >>> if not errors and is_valid_decimal(result): # doctest: +SKIP ... total = result.quantize(Decimal("0.01")) Python 3.13+. Requires Babel for CLDR patterns. diff --git a/src/ftllexengine/parsing/currency.py b/src/ftllexengine/parsing/currency.py index bcd82e2e..321536d2 100644 --- a/src/ftllexengine/parsing/currency.py +++ b/src/ftllexengine/parsing/currency.py @@ -32,7 +32,6 @@ """ from __future__ import annotations -# ruff: noqa: ERA001 - Section comments in data structures are documentation, not dead code import functools import re from typing import TYPE_CHECKING, Any @@ -41,13 +40,10 @@ from decimal import Decimal from ftllexengine.core.babel_compat import ( - get_babel_numbers, get_locale_class, - get_locale_identifiers_func, get_number_format_error_class, get_parse_decimal_func, get_unknown_locale_error_class, - is_babel_available, require_babel, ) from ftllexengine.core.locale_utils import ( @@ -56,449 +52,37 @@ ) from ftllexengine.diagnostics import ErrorCategory, FrozenErrorContext, FrozenFluentError from ftllexengine.diagnostics.templates import ErrorTemplate - -__all__ = ["clear_currency_caches", "parse_currency"] - -# ISO 4217 currency codes are exactly 3 uppercase ASCII letters. -# This is per the ISO 4217 standard and is guaranteed not to change. -ISO_CURRENCY_CODE_LENGTH: int = 3 - -# ============================================================================= -# FAST TIER: Common currencies with unambiguous symbols (no CLDR scan required) -# ============================================================================= -# These symbols map to exactly one currency worldwide. -# Loaded immediately at import time (zero CLDR overhead). -_FAST_TIER_UNAMBIGUOUS_SYMBOLS: dict[str, str] = { - # European currencies - "\u20ac": "EUR", # Euro sign - # NOTE: Pound sign (U+00A3) is in ambiguous set (GBP, EGP, GIP, etc.) - "\u20a4": "ITL", # Lira sign (historical) - # Asian currencies (truly unambiguous symbols) - # NOTE: Yen sign (U+00A5) is NOT here - it's ambiguous (JPY vs CNY) - "\u20b9": "INR", # Indian Rupee - "\u20a9": "KRW", # Korean Won - "\u20ab": "VND", # Vietnamese Dong - "\u20ae": "MNT", # Mongolian Tugrik - "\u20b1": "PHP", # Philippine Peso - "\u20b4": "UAH", # Ukrainian Hryvnia - "\u20b8": "KZT", # Kazakhstani Tenge - "\u20ba": "TRY", # Turkish Lira - "\u20bd": "RUB", # Russian Ruble - "\u20be": "GEL", # Georgian Lari - "\u20bf": "BTC", # Bitcoin (cryptocurrency) - # Americas (unambiguous) - "\u20b2": "PYG", # Paraguayan Guarani - # Middle East - "\u20aa": "ILS", # Israeli New Shekel - "\u20bc": "AZN", # Azerbaijani Manat - # African currencies - "\u20a6": "NGN", # Nigerian Naira - "\u20b5": "GHS", # Ghanaian Cedi - # Text symbols (less common but unambiguous) - "zl": "PLN", # Polish Zloty (text form) - "Ft": "HUF", # Hungarian Forint - "Ls": "LVL", # Latvian Lats (historical, pre-Euro) - "Lt": "LTL", # Lithuanian Litas (historical, pre-Euro) -} - -# Ambiguous symbols that require locale context or explicit currency code. -# These are NOT in the fast tier unambiguous map - they require context. -_FAST_TIER_AMBIGUOUS_SYMBOLS: frozenset[str] = frozenset({ - "$", # USD, CAD, AUD, NZD, SGD, HKD, MXN, ARS, CLP, COP, etc. - "kr", # SEK, NOK, DKK, ISK - "R", # ZAR, BRL (R$), INR (historical) - "R$", # BRL - "S/", # PEN - "\u00a5", # Yen/Yuan sign - JPY (Japanese) or CNY (Chinese) - "\u00a3", # Pound sign - GBP (British), EGP (Egyptian), GIP (Gibraltar), etc. -}) - -# Locale-aware resolution for ambiguous symbols. -# Maps (symbol, locale_prefix) -> currency_code for context-sensitive resolution. -# Keys use lowercase normalized locale format (BCP-47 is case-insensitive). -_AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION: dict[tuple[str, str], str] = { - # Yen/Yuan sign: CNY for Chinese locales, JPY otherwise - ("\u00a5", "zh"): "CNY", # Chinese locales use Yuan - # Dollar sign: locale-specific resolution - ("$", "en_us"): "USD", - ("$", "en_ca"): "CAD", - ("$", "en_au"): "AUD", - ("$", "en_nz"): "NZD", - ("$", "en_sg"): "SGD", - ("$", "en_hk"): "HKD", - ("$", "es_mx"): "MXN", - ("$", "es_ar"): "ARS", - ("$", "es_cl"): "CLP", - ("$", "es_co"): "COP", - # Pound sign: locale-specific resolution - ("\u00a3", "en_gb"): "GBP", # British Pound - ("\u00a3", "en"): "GBP", # English locales default to British - ("\u00a3", "ar_eg"): "EGP", # Egyptian Pound - ("\u00a3", "ar"): "EGP", # Arabic locales default to Egyptian - ("\u00a3", "en_gi"): "GIP", # Gibraltar Pound - ("\u00a3", "en_fk"): "FKP", # Falkland Islands Pound - ("\u00a3", "en_sh"): "SHP", # Saint Helena Pound - ("\u00a3", "en_ss"): "SSP", # South Sudanese Pound -} - -# Default resolution for ambiguous symbols when locale doesn't match -_AMBIGUOUS_SYMBOL_DEFAULTS: dict[str, str] = { - "\u00a5": "JPY", # Default to JPY for non-Chinese locales - "\u00a3": "GBP", # Default to GBP when locale not recognized - "$": "USD", # Default to USD when locale not recognized - "kr": "SEK", # Default to SEK for Nordic kr - "R": "ZAR", # Default to ZAR for R - "R$": "BRL", # R$ is unambiguous as BRL - "S/": "PEN", # S/ is unambiguous as PEN -} - -# Common locale-to-currency mappings for fast tier (no CLDR scan needed) -# Keys use lowercase normalized locale format (BCP-47 is case-insensitive). -_FAST_TIER_LOCALE_CURRENCIES: dict[str, str] = { - # North America - "en_us": "USD", "es_us": "USD", - "en_ca": "CAD", "fr_ca": "CAD", - "es_mx": "MXN", - # Europe - Eurozone - "de_de": "EUR", "de_at": "EUR", - "fr_fr": "EUR", "it_it": "EUR", - "es_es": "EUR", "pt_pt": "EUR", - "nl_nl": "EUR", "fi_fi": "EUR", - "el_gr": "EUR", "et_ee": "EUR", - "lt_lt": "EUR", "lv_lv": "EUR", - "sk_sk": "EUR", "sl_si": "EUR", - # Europe - Non-Eurozone - "en_gb": "GBP", "de_ch": "CHF", "fr_ch": "CHF", "it_ch": "CHF", - "sv_se": "SEK", "no_no": "NOK", "da_dk": "DKK", - "pl_pl": "PLN", "cs_cz": "CZK", "hu_hu": "HUF", - "ro_ro": "RON", "bg_bg": "BGN", "hr_hr": "HRK", - "uk_ua": "UAH", "ru_ru": "RUB", "is_is": "ISK", - # Asia-Pacific - "ja_jp": "JPY", "zh_cn": "CNY", "zh_tw": "TWD", "zh_hk": "HKD", - "ko_kr": "KRW", "hi_in": "INR", "th_th": "THB", - "vi_vn": "VND", "id_id": "IDR", "ms_my": "MYR", - "fil_ph": "PHP", "en_sg": "SGD", "en_au": "AUD", "en_nz": "NZD", - # Middle East / Africa - "ar_sa": "SAR", "ar_eg": "EGP", "ar_ae": "AED", - "he_il": "ILS", "tr_tr": "TRY", - "en_za": "ZAR", "pt_br": "BRL", - # South America - "es_ar": "ARS", "es_cl": "CLP", "es_co": "COP", "es_pe": "PEN", -} - -# Fast tier valid ISO codes (subset for quick validation before full CLDR) -_FAST_TIER_VALID_CODES: frozenset[str] = frozenset({ - "USD", "EUR", "GBP", "JPY", "CNY", "CHF", "CAD", "AUD", "NZD", - "HKD", "SGD", "SEK", "NOK", "DKK", "ISK", "PLN", "CZK", "HUF", - "RON", "BGN", "HRK", "UAH", "RUB", "TRY", "ILS", "INR", "KRW", - "THB", "VND", "IDR", "MYR", "PHP", "TWD", "SAR", "AED", "EGP", - "ZAR", "BRL", "ARS", "CLP", "COP", "PEN", "MXN", "KZT", "GEL", - "AZN", "NGN", "GHS", "BTC", -}) - -# Curated list of locales for currency symbol lookup. -# Selected to cover major world currencies and regional variants. -# Add locales here to support additional currency symbol mappings. -_SYMBOL_LOOKUP_LOCALE_IDS: tuple[str, ...] = ( - "en_US", "en_GB", "en_CA", "en_AU", "en_NZ", "en_SG", "en_HK", "en_IN", - "de_DE", "de_CH", "de_AT", "fr_FR", "fr_CH", "fr_CA", - "es_ES", "es_MX", "es_AR", "it_IT", "it_CH", "nl_NL", "pt_PT", "pt_BR", - "ja_JP", "zh_CN", "zh_TW", "zh_HK", "ko_KR", - "ru_RU", "pl_PL", "sv_SE", "no_NO", "da_DK", "fi_FI", - "tr_TR", "ar_SA", "ar_EG", "he_IL", "hi_IN", - "th_TH", "vi_VN", "id_ID", "ms_MY", "fil_PH", - "lv_LV", "et_EE", "lt_LT", "cs_CZ", "sk_SK", "hu_HU", - "ro_RO", "bg_BG", "hr_HR", "sl_SI", "sr_RS", - "uk_UA", "ka_GE", "az_AZ", "kk_KZ", "is_IS", +from ftllexengine.parsing.currency_maps import ( + _FAST_TIER_UNAMBIGUOUS_SYMBOLS, + ISO_CURRENCY_CODE_LENGTH, + _build_currency_maps_from_cldr, + _get_currency_maps, + _get_currency_maps_fast, + _get_currency_maps_full, + resolve_ambiguous_symbol, +) +from ftllexengine.parsing.currency_maps import ( + clear_currency_caches as _clear_currency_maps_caches, ) -# ============================================================================= -# Locale-Aware Symbol Resolution -# ============================================================================= - - -def resolve_ambiguous_symbol( - symbol: str, - locale_code: str | None = None, -) -> str | None: - """Resolve ambiguous symbol to currency code with locale context. - - Resolution order: - 1. Exact locale match in _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION - 2. Locale prefix match (e.g., "zh" for "zh_CN", "zh_TW") - 3. Default from _AMBIGUOUS_SYMBOL_DEFAULTS - - Args: - symbol: The currency symbol to resolve - locale_code: Optional locale for context-sensitive resolution - - Returns: - ISO 4217 currency code, or None if symbol not in ambiguous set - """ - if symbol not in _FAST_TIER_AMBIGUOUS_SYMBOLS: - return None - - if locale_code: - # Normalize locale for lookup - normalized = normalize_locale(locale_code) - - # Try exact locale match first - exact_key = (symbol, normalized) - if exact_key in _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION: - return _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION[exact_key] - - # Try locale prefix match (language code only) - # e.g., "zh" matches "zh_CN", "zh_TW", "zh_HK" - if "_" in normalized: - lang_prefix = normalized.split("_")[0] - prefix_key = (symbol, lang_prefix) - if prefix_key in _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION: - return _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION[prefix_key] - - # Fall back to default - return _AMBIGUOUS_SYMBOL_DEFAULTS.get(symbol) - - -def _collect_all_currencies( - locale_ids: list[str], - locale_parse: Any, - unknown_locale_error: type[Exception], -) -> set[str]: - """Collect all currency codes from CLDR by scanning all locales. - - Ensures complete currency coverage (JPY, KRW, CNY, etc.). - - Args: - locale_ids: All available CLDR locale identifiers. - locale_parse: Babel's Locale.parse function. - unknown_locale_error: Babel's UnknownLocaleError class. - - Returns: - Set of all ISO 4217 currency codes found in CLDR. - """ - all_currencies: set[str] = set() - for locale_id in locale_ids: - try: - locale = locale_parse(locale_id) - if hasattr(locale, "currencies") and locale.currencies: - all_currencies.update(locale.currencies.keys()) - except (unknown_locale_error, ValueError, AttributeError, KeyError): - continue - return all_currencies - - -def _build_symbol_mappings( - all_currencies: set[str], - locale_ids: list[str], - locale_parse: Any, - unknown_locale_error: type[Exception], - get_currency_symbol: Any, -) -> tuple[dict[str, str], set[str]]: - """Build symbol-to-currency mappings, separating ambiguous from unambiguous. - - For each currency, finds all symbols it uses across a curated locale sample. - A symbol is ambiguous if multiple currencies use it. - - Args: - all_currencies: All ISO 4217 codes from CLDR. - locale_ids: All available CLDR locale identifiers. - locale_parse: Babel's Locale.parse function. - unknown_locale_error: Babel's UnknownLocaleError class. - get_currency_symbol: Babel's get_currency_symbol function. - - Returns: - Tuple of (unambiguous_map, ambiguous_set): - - unambiguous_map: Symbol -> single ISO 4217 code - - ambiguous_set: Symbols mapping to multiple currencies - """ - symbol_to_codes: dict[str, set[str]] = {} - - symbol_lookup_locales = [ - locale_parse(lid) for lid in _SYMBOL_LOOKUP_LOCALE_IDS - if lid in locale_ids - ] - - for currency_code in all_currencies: - for locale in symbol_lookup_locales: - try: - symbol = get_currency_symbol( - currency_code, locale=locale, - ) - is_iso_format = ( - len(symbol) == ISO_CURRENCY_CODE_LENGTH - and symbol.isupper() - and symbol.isalpha() - ) - if symbol and symbol != currency_code and not is_iso_format: - if symbol not in symbol_to_codes: - symbol_to_codes[symbol] = set() - symbol_to_codes[symbol].add(currency_code) - except ( - unknown_locale_error, ValueError, AttributeError, KeyError, - ): - continue - - unambiguous_map: dict[str, str] = {} - ambiguous_set: set[str] = set() - for symbol, codes in symbol_to_codes.items(): - if len(codes) == 1: - unambiguous_map[symbol] = next(iter(codes)) - else: - ambiguous_set.add(symbol) - - return unambiguous_map, ambiguous_set - - -def _build_locale_currency_map( - locale_ids: list[str], - locale_parse: Any, - unknown_locale_error: type[Exception], - get_territory_currencies: Any, -) -> dict[str, str]: - """Build locale-to-default-currency mapping from CLDR territory data. - - Args: - locale_ids: All available CLDR locale identifiers. - locale_parse: Babel's Locale.parse function. - unknown_locale_error: Babel's UnknownLocaleError class. - get_territory_currencies: Babel's get_territory_currencies function. - - Returns: - Mapping of locale code -> default ISO 4217 currency code. - """ - locale_to_currency: dict[str, str] = {} - for locale_id in locale_ids: - try: - locale = locale_parse(locale_id) - if not locale.territory: - continue - territory_currencies = get_territory_currencies( - locale.territory, - ) - if territory_currencies: - locale_str = str(locale) - if "_" in locale_str: - locale_to_currency[locale_str] = territory_currencies[0] - except ( - unknown_locale_error, ValueError, AttributeError, KeyError, - ): - continue - return locale_to_currency - - -@functools.cache -def _build_currency_maps_from_cldr() -> tuple[ - dict[str, str], set[str], dict[str, str], frozenset[str] -]: - """Build currency maps from Unicode CLDR data via Babel. - - Thread-safe via functools.cache internal locking. - Called once per process lifetime; subsequent calls return cached result. - - Orchestrates three sub-operations: - 1. Collect all currency codes from CLDR locale scan - 2. Build symbol-to-currency mappings (unambiguous vs ambiguous) - 3. Build locale-to-default-currency mapping from territory data - - Returns: - Tuple of (symbol_to_code, ambiguous_symbols, locale_to_currency, valid_codes): - - symbol_to_code: Unambiguous currency symbol -> ISO 4217 code - - ambiguous_symbols: Symbols that map to multiple currencies - - locale_to_currency: Locale code -> default ISO 4217 currency code - - valid_codes: Frozenset of all valid ISO 4217 currency codes from CLDR - Returns empty maps if Babel is not installed (fast tier still available). - """ - if not is_babel_available(): - # Babel not installed - return empty maps, fast tier still available - return ({}, set(), {}, frozenset()) - - locale_class = get_locale_class() - unknown_locale_error_class = get_unknown_locale_error_class() - locale_identifiers_fn = get_locale_identifiers_func() - babel_numbers = get_babel_numbers() - get_currency_symbol = babel_numbers.get_currency_symbol - get_territory_currencies = babel_numbers.get_territory_currencies - - all_locale_ids = list(locale_identifiers_fn()) - - all_currencies = _collect_all_currencies( - all_locale_ids, locale_class.parse, unknown_locale_error_class, - ) - - unambiguous_map, ambiguous_set = _build_symbol_mappings( - all_currencies, all_locale_ids, - locale_class.parse, unknown_locale_error_class, get_currency_symbol, - ) - - locale_to_currency = _build_locale_currency_map( - all_locale_ids, - locale_class.parse, unknown_locale_error_class, get_territory_currencies, - ) - - return ( - unambiguous_map, ambiguous_set, - locale_to_currency, frozenset(all_currencies), - ) - - -def _get_currency_maps_fast() -> tuple[ - dict[str, str], frozenset[str], dict[str, str], frozenset[str] -]: - """Get fast tier currency maps (no CLDR scan, immediate). - - Returns: - Tuple of (symbol_to_code, ambiguous_symbols, locale_to_currency, valid_codes) - from the fast tier (hardcoded common currencies). - """ - return ( - _FAST_TIER_UNAMBIGUOUS_SYMBOLS, - _FAST_TIER_AMBIGUOUS_SYMBOLS, - _FAST_TIER_LOCALE_CURRENCIES, - _FAST_TIER_VALID_CODES, - ) - - -def _get_currency_maps_full() -> tuple[dict[str, str], set[str], dict[str, str], frozenset[str]]: - """Get full CLDR currency maps (lazy-loaded on first call). - - Thread-safe via functools.cache on _build_currency_maps_from_cldr. - - Returns: - Tuple of (symbol_to_code, ambiguous_symbols, locale_to_currency, valid_codes) - from complete CLDR data. - """ - return _build_currency_maps_from_cldr() - - -@functools.cache -def _get_currency_maps() -> tuple[dict[str, str], set[str], dict[str, str], frozenset[str]]: - """Get merged currency maps (fast tier + full CLDR). - - Thread-safe via functools.cache internal locking. - Called once per process lifetime; subsequent calls return cached result. - - Tiered Loading Strategy: - - Fast tier data is always included (zero overhead) - - Full CLDR data is merged in (loaded lazily on first call to this function) - - Returns: - Tuple of (symbol_to_code, ambiguous_symbols, locale_to_currency, valid_codes): - - symbol_to_code: Unambiguous currency symbol → ISO 4217 code - - ambiguous_symbols: Symbols that map to multiple currencies - - locale_to_currency: Locale code → default ISO 4217 currency code - - valid_codes: Frozenset of all valid ISO 4217 currency codes from CLDR - """ - # Get both tiers - fast_symbols, fast_ambiguous, fast_locales, fast_codes = _get_currency_maps_fast() - full_symbols, full_ambiguous, full_locales, full_codes = _get_currency_maps_full() - - # Merge: fast tier has priority for unambiguous symbols - merged_symbols = {**full_symbols, **fast_symbols} # fast overwrites full - merged_ambiguous = full_ambiguous | set(fast_ambiguous) - merged_locales = {**full_locales, **fast_locales} # fast overwrites full - merged_codes = full_codes | fast_codes +__all__ = [ + "_FAST_TIER_UNAMBIGUOUS_SYMBOLS", + "_build_currency_maps_from_cldr", + "_get_currency_maps", + "_get_currency_maps_fast", + "_get_currency_maps_full", + "clear_currency_caches", + "parse_currency", + "resolve_ambiguous_symbol", +] + +_PRIVATE_CURRENCY_EXPORTS = ( + _FAST_TIER_UNAMBIGUOUS_SYMBOLS, + _build_currency_maps_from_cldr, + _get_currency_maps_fast, + _get_currency_maps_full, +) - return merged_symbols, merged_ambiguous, merged_locales, merged_codes def _is_valid_iso_4217_format(code: str) -> bool: @@ -776,36 +360,42 @@ def parse_currency( BabelImportError: If Babel is not installed Examples: - >>> result, errors = parse_currency("EUR100.50", "en_US") - >>> result + >>> result, errors = parse_currency("EUR100.50", "en_US") # doctest: +SKIP + >>> result # doctest: +SKIP (Decimal('100.50'), 'EUR') - >>> errors + >>> errors # doctest: +SKIP () - >>> result, errors = parse_currency("100,50 EUR", "lv_LV") - >>> result + >>> result, errors = parse_currency("100,50 EUR", "lv_LV") # doctest: +SKIP + >>> result # doctest: +SKIP (Decimal('100.50'), 'EUR') - >>> result, errors = parse_currency("USD 1,234.56", "en_US") - >>> result + >>> result, errors = parse_currency("USD 1,234.56", "en_US") # doctest: +SKIP + >>> result # doctest: +SKIP (Decimal('1234.56'), 'USD') - >>> result, errors = parse_currency("$100", "en_US", default_currency="USD") - >>> result + >>> result, errors = parse_currency( # doctest: +SKIP + ... "$100", "en_US", default_currency="USD" + ... ) + >>> result # doctest: +SKIP (Decimal('100'), 'USD') - >>> result, errors = parse_currency("$100", "en_CA", default_currency="CAD") - >>> result + >>> result, errors = parse_currency( # doctest: +SKIP + ... "$100", "en_CA", default_currency="CAD" + ... ) + >>> result # doctest: +SKIP (Decimal('100'), 'CAD') - >>> result, errors = parse_currency("$100", "en_CA", infer_from_locale=True) - >>> result + >>> result, errors = parse_currency( # doctest: +SKIP + ... "$100", "en_CA", infer_from_locale=True + ... ) + >>> result # doctest: +SKIP (Decimal('100'), 'CAD') - >>> result, errors = parse_currency("$100", "en_US") - >>> result is None + >>> result, errors = parse_currency("$100", "en_US") # doctest: +SKIP + >>> result is None # doctest: +SKIP True - >>> len(errors) + >>> len(errors) # doctest: +SKIP 1 Note: @@ -980,9 +570,8 @@ def clear_currency_caches() -> None: clearing; only the full CLDR scan results are invalidated. Example: - >>> from ftllexengine.parsing.currency import clear_currency_caches - >>> clear_currency_caches() # Clears all cached currency data + >>> from ftllexengine.parsing.currency import clear_currency_caches # doctest: +SKIP + >>> clear_currency_caches() # Clears all cached currency data # doctest: +SKIP """ - _build_currency_maps_from_cldr.cache_clear() - _get_currency_maps.cache_clear() + _clear_currency_maps_caches() _get_currency_pattern.cache_clear() diff --git a/src/ftllexengine/parsing/currency_maps.py b/src/ftllexengine/parsing/currency_maps.py new file mode 100644 index 00000000..2ff5a53e --- /dev/null +++ b/src/ftllexengine/parsing/currency_maps.py @@ -0,0 +1,432 @@ +"""Currency map data and CLDR-backed lookup helpers.""" + +from __future__ import annotations + +import functools +from typing import Any + +from ftllexengine.core.babel_compat import ( + get_babel_numbers, + get_locale_class, + get_locale_identifiers_func, + get_unknown_locale_error_class, + is_babel_available, +) +from ftllexengine.core.locale_utils import normalize_locale + +ISO_CURRENCY_CODE_LENGTH: int = 3 + +_FAST_TIER_UNAMBIGUOUS_SYMBOLS: dict[str, str] = { + "\u20ac": "EUR", + "\u20a4": "ITL", + "\u20b9": "INR", + "\u20a9": "KRW", + "\u20ab": "VND", + "\u20ae": "MNT", + "\u20b1": "PHP", + "\u20b4": "UAH", + "\u20b8": "KZT", + "\u20ba": "TRY", + "\u20bd": "RUB", + "\u20be": "GEL", + "\u20bf": "BTC", + "\u20b2": "PYG", + "\u20aa": "ILS", + "\u20bc": "AZN", + "\u20a6": "NGN", + "\u20b5": "GHS", + "zl": "PLN", + "Ft": "HUF", + "Ls": "LVL", + "Lt": "LTL", +} + +_FAST_TIER_AMBIGUOUS_SYMBOLS: frozenset[str] = frozenset( + { + "$", + "kr", + "R", + "R$", + "S/", + "\u00a5", + "\u00a3", + } +) + +_AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION: dict[tuple[str, str], str] = { + ("\u00a5", "zh"): "CNY", + ("$", "en_us"): "USD", + ("$", "en_ca"): "CAD", + ("$", "en_au"): "AUD", + ("$", "en_nz"): "NZD", + ("$", "en_sg"): "SGD", + ("$", "en_hk"): "HKD", + ("$", "es_mx"): "MXN", + ("$", "es_ar"): "ARS", + ("$", "es_cl"): "CLP", + ("$", "es_co"): "COP", + ("\u00a3", "en_gb"): "GBP", + ("\u00a3", "en"): "GBP", + ("\u00a3", "ar_eg"): "EGP", + ("\u00a3", "ar"): "EGP", + ("\u00a3", "en_gi"): "GIP", + ("\u00a3", "en_fk"): "FKP", + ("\u00a3", "en_sh"): "SHP", + ("\u00a3", "en_ss"): "SSP", +} + +_AMBIGUOUS_SYMBOL_DEFAULTS: dict[str, str] = { + "\u00a5": "JPY", + "\u00a3": "GBP", + "$": "USD", + "kr": "SEK", + "R": "ZAR", + "R$": "BRL", + "S/": "PEN", +} + +_FAST_TIER_LOCALE_CURRENCIES: dict[str, str] = { + "en_us": "USD", + "es_us": "USD", + "en_ca": "CAD", + "fr_ca": "CAD", + "es_mx": "MXN", + "de_de": "EUR", + "de_at": "EUR", + "fr_fr": "EUR", + "it_it": "EUR", + "es_es": "EUR", + "pt_pt": "EUR", + "nl_nl": "EUR", + "fi_fi": "EUR", + "el_gr": "EUR", + "et_ee": "EUR", + "lt_lt": "EUR", + "lv_lv": "EUR", + "sk_sk": "EUR", + "sl_si": "EUR", + "en_gb": "GBP", + "de_ch": "CHF", + "fr_ch": "CHF", + "it_ch": "CHF", + "sv_se": "SEK", + "no_no": "NOK", + "da_dk": "DKK", + "pl_pl": "PLN", + "cs_cz": "CZK", + "hu_hu": "HUF", + "ro_ro": "RON", + "bg_bg": "BGN", + "hr_hr": "HRK", + "uk_ua": "UAH", + "ru_ru": "RUB", + "is_is": "ISK", + "ja_jp": "JPY", + "zh_cn": "CNY", + "zh_tw": "TWD", + "zh_hk": "HKD", + "ko_kr": "KRW", + "hi_in": "INR", + "th_th": "THB", + "vi_vn": "VND", + "id_id": "IDR", + "ms_my": "MYR", + "fil_ph": "PHP", + "en_sg": "SGD", + "en_au": "AUD", + "en_nz": "NZD", + "ar_sa": "SAR", + "ar_eg": "EGP", + "ar_ae": "AED", + "he_il": "ILS", + "tr_tr": "TRY", + "en_za": "ZAR", + "pt_br": "BRL", + "es_ar": "ARS", + "es_cl": "CLP", + "es_co": "COP", + "es_pe": "PEN", +} + +_FAST_TIER_VALID_CODES: frozenset[str] = frozenset( + { + "USD", + "EUR", + "GBP", + "JPY", + "CNY", + "CHF", + "CAD", + "AUD", + "NZD", + "HKD", + "SGD", + "SEK", + "NOK", + "DKK", + "ISK", + "PLN", + "CZK", + "HUF", + "RON", + "BGN", + "HRK", + "UAH", + "RUB", + "TRY", + "ILS", + "INR", + "KRW", + "THB", + "VND", + "IDR", + "MYR", + "PHP", + "TWD", + "SAR", + "AED", + "EGP", + "ZAR", + "BRL", + "ARS", + "CLP", + "COP", + "PEN", + "MXN", + "KZT", + "GEL", + "AZN", + "NGN", + "GHS", + "BTC", + } +) + +_SYMBOL_LOOKUP_LOCALE_IDS: tuple[str, ...] = ( + "en_US", + "en_GB", + "en_CA", + "en_AU", + "en_NZ", + "en_SG", + "en_HK", + "en_IN", + "de_DE", + "de_CH", + "de_AT", + "fr_FR", + "fr_CH", + "fr_CA", + "es_ES", + "es_MX", + "es_AR", + "it_IT", + "it_CH", + "nl_NL", + "pt_PT", + "pt_BR", + "ja_JP", + "zh_CN", + "zh_TW", + "zh_HK", + "ko_KR", + "ru_RU", + "pl_PL", + "sv_SE", + "no_NO", + "da_DK", + "fi_FI", + "tr_TR", + "ar_SA", + "ar_EG", + "he_IL", + "hi_IN", + "th_TH", + "vi_VN", + "id_ID", + "ms_MY", + "fil_PH", + "lv_LV", + "et_EE", + "lt_LT", + "cs_CZ", + "sk_SK", + "hu_HU", + "ro_RO", + "bg_BG", + "hr_HR", + "sl_SI", + "sr_RS", + "uk_UA", + "ka_GE", + "az_AZ", + "kk_KZ", + "is_IS", +) + + +def resolve_ambiguous_symbol( + symbol: str, + locale_code: str | None = None, +) -> str | None: + """Resolve ambiguous currency symbols using locale context when available.""" + if symbol not in _FAST_TIER_AMBIGUOUS_SYMBOLS: + return None + + if locale_code: + normalized = normalize_locale(locale_code) + exact_key = (symbol, normalized) + if exact_key in _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION: + return _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION[exact_key] + + if "_" in normalized: + lang_prefix = normalized.split("_")[0] + prefix_key = (symbol, lang_prefix) + if prefix_key in _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION: + return _AMBIGUOUS_SYMBOL_LOCALE_RESOLUTION[prefix_key] + + return _AMBIGUOUS_SYMBOL_DEFAULTS.get(symbol) + + +def _collect_all_currencies( + locale_ids: list[str], + locale_parse: Any, + unknown_locale_error: type[Exception], +) -> set[str]: + all_currencies: set[str] = set() + for locale_id in locale_ids: + try: + locale = locale_parse(locale_id) + if hasattr(locale, "currencies") and locale.currencies: + all_currencies.update(locale.currencies.keys()) + except (unknown_locale_error, ValueError, AttributeError, KeyError): + continue + return all_currencies + + +def _build_symbol_mappings( + all_currencies: set[str], + locale_ids: list[str], + locale_parse: Any, + unknown_locale_error: type[Exception], + get_currency_symbol: Any, +) -> tuple[dict[str, str], set[str]]: + symbol_to_codes: dict[str, set[str]] = {} + symbol_lookup_locales = [ + locale_parse(locale_id) + for locale_id in _SYMBOL_LOOKUP_LOCALE_IDS + if locale_id in locale_ids + ] + + for currency_code in all_currencies: + for locale in symbol_lookup_locales: + try: + symbol = get_currency_symbol(currency_code, locale=locale) + is_iso_format = ( + len(symbol) == ISO_CURRENCY_CODE_LENGTH + and symbol.isupper() + and symbol.isalpha() + ) + if symbol and symbol != currency_code and not is_iso_format: + symbol_to_codes.setdefault(symbol, set()).add(currency_code) + except (unknown_locale_error, ValueError, AttributeError, KeyError): + continue + + unambiguous_map: dict[str, str] = {} + ambiguous_set: set[str] = set() + for symbol, codes in symbol_to_codes.items(): + if len(codes) == 1: + unambiguous_map[symbol] = next(iter(codes)) + else: + ambiguous_set.add(symbol) + + return unambiguous_map, ambiguous_set + + +def _build_locale_currency_map( + locale_ids: list[str], + locale_parse: Any, + unknown_locale_error: type[Exception], + get_territory_currencies: Any, +) -> dict[str, str]: + locale_to_currency: dict[str, str] = {} + for locale_id in locale_ids: + try: + locale = locale_parse(locale_id) + if not locale.territory: + continue + territory_currencies = get_territory_currencies(locale.territory) + if territory_currencies: + locale_str = str(locale) + if "_" in locale_str: + locale_to_currency[locale_str] = territory_currencies[0] + except (unknown_locale_error, ValueError, AttributeError, KeyError): + continue + return locale_to_currency + + +@functools.cache +def _build_currency_maps_from_cldr() -> tuple[ + dict[str, str], set[str], dict[str, str], frozenset[str] +]: + if not is_babel_available(): + return ({}, set(), {}, frozenset()) + + locale_class = get_locale_class() + unknown_locale_error_class = get_unknown_locale_error_class() + locale_identifiers_fn = get_locale_identifiers_func() + babel_numbers = get_babel_numbers() + get_currency_symbol = babel_numbers.get_currency_symbol + get_territory_currencies = babel_numbers.get_territory_currencies + + all_locale_ids = list(locale_identifiers_fn()) + all_currencies = _collect_all_currencies( + all_locale_ids, locale_class.parse, unknown_locale_error_class + ) + unambiguous_map, ambiguous_set = _build_symbol_mappings( + all_currencies, + all_locale_ids, + locale_class.parse, + unknown_locale_error_class, + get_currency_symbol, + ) + locale_to_currency = _build_locale_currency_map( + all_locale_ids, + locale_class.parse, + unknown_locale_error_class, + get_territory_currencies, + ) + return (unambiguous_map, ambiguous_set, locale_to_currency, frozenset(all_currencies)) + + +def _get_currency_maps_fast() -> tuple[ + dict[str, str], frozenset[str], dict[str, str], frozenset[str] +]: + return ( + _FAST_TIER_UNAMBIGUOUS_SYMBOLS, + _FAST_TIER_AMBIGUOUS_SYMBOLS, + _FAST_TIER_LOCALE_CURRENCIES, + _FAST_TIER_VALID_CODES, + ) + + +def _get_currency_maps_full() -> tuple[dict[str, str], set[str], dict[str, str], frozenset[str]]: + return _build_currency_maps_from_cldr() + + +@functools.cache +def _get_currency_maps() -> tuple[dict[str, str], set[str], dict[str, str], frozenset[str]]: + fast_symbols, fast_ambiguous, fast_locales, fast_codes = _get_currency_maps_fast() + full_symbols, full_ambiguous, full_locales, full_codes = _get_currency_maps_full() + return ( + {**full_symbols, **fast_symbols}, + full_ambiguous | set(fast_ambiguous), + {**full_locales, **fast_locales}, + full_codes | fast_codes, + ) + + +def clear_currency_caches() -> None: + """Clear cached currency map data.""" + _get_currency_maps.cache_clear() + _build_currency_maps_from_cldr.cache_clear() diff --git a/src/ftllexengine/parsing/date_patterns.py b/src/ftllexengine/parsing/date_patterns.py new file mode 100644 index 00000000..c453ef4b --- /dev/null +++ b/src/ftllexengine/parsing/date_patterns.py @@ -0,0 +1,375 @@ +"""Cached CLDR pattern extraction and conversion helpers for date parsing.""" + +from __future__ import annotations + +from functools import lru_cache +from typing import Any + +from ftllexengine.constants import MAX_LOCALE_CACHE_SIZE +from ftllexengine.core.babel_compat import ( + get_locale_class, + get_unknown_locale_error_class, + is_babel_available, + require_babel, +) +from ftllexengine.core.locale_utils import normalize_locale + +__all__ = [ + "_babel_to_strptime", + "_get_date_patterns", + "_get_datetime_patterns", + "_is_word_boundary", + "_preprocess_datetime_input", + "_strip_era", + "_tokenize_babel_pattern", + "clear_date_caches", +] + +# CLDR date format styles used for parsing. +# Both date and datetime use the same styles for consistency. +_DATE_PARSE_STYLES: tuple[str, ...] = ("short", "medium", "long", "full") +_DATETIME_PARSE_STYLES: tuple[str, ...] = ("short", "medium", "long", "full") + +# Default separator between date and time components (fallback only). +# Used when locale-specific dateTimeFormat pattern extraction fails. +_DATETIME_SEPARATOR_FALLBACK: str = " " + + +def _extract_cldr_patterns( + format_dict: Any, + styles: tuple[str, ...], +) -> list[tuple[str, bool]]: + """Extract strptime patterns from a Babel CLDR format dictionary.""" + patterns: list[tuple[str, bool]] = [] + for style in styles: + try: + fmt = format_dict[style] + babel_pattern = fmt.pattern if hasattr(fmt, "pattern") else str(fmt) + strptime_pattern, has_era = _babel_to_strptime(babel_pattern) + patterns.append((strptime_pattern, has_era)) + if "%y" in strptime_pattern: + patterns.append((strptime_pattern.replace("%y", "%Y"), has_era)) + except (AttributeError, KeyError): + pass + return patterns + + +@lru_cache(maxsize=MAX_LOCALE_CACHE_SIZE) +def _get_date_patterns(locale_code: str) -> tuple[tuple[str, bool], ...]: + """Get cached strptime date patterns for one locale.""" + require_babel("parse_date") + locale_class = get_locale_class() + unknown_locale_error_class = get_unknown_locale_error_class() + + try: + locale = locale_class.parse(normalize_locale(locale_code)) + return tuple(_extract_cldr_patterns(locale.date_formats, _DATE_PARSE_STYLES)) + except (unknown_locale_error_class, ValueError, RuntimeError, AttributeError): + return () + + +def _extract_datetime_separator(locale: Any, style: str = "medium") -> tuple[str, bool]: + """Extract the locale-specific separator and ordering for date-time formats.""" + try: + datetime_format = locale.datetime_formats.get(style) + if datetime_format is None: + return _DATETIME_SEPARATOR_FALLBACK, False + + pattern = str(datetime_format) + date_placeholder = "{1}" + time_placeholder = "{0}" + + date_idx = pattern.find(date_placeholder) + time_idx = pattern.find(time_placeholder) + + if date_idx == -1 or time_idx == -1: + return _DATETIME_SEPARATOR_FALLBACK, False + + is_time_first = time_idx < date_idx + + if date_idx < time_idx: + sep_start = date_idx + len(date_placeholder) + sep_end = time_idx + else: + sep_start = time_idx + len(time_placeholder) + sep_end = date_idx + + if sep_start < sep_end: + return pattern[sep_start:sep_end], is_time_first + + return _DATETIME_SEPARATOR_FALLBACK, is_time_first + except (AttributeError, TypeError, ValueError): + return _DATETIME_SEPARATOR_FALLBACK, False + + +@lru_cache(maxsize=MAX_LOCALE_CACHE_SIZE) +def _get_datetime_patterns(locale_code: str) -> tuple[tuple[str, bool], ...]: + """Get cached strptime datetime patterns for one locale.""" + require_babel("parse_datetime") + locale_class = get_locale_class() + unknown_locale_error_class = get_unknown_locale_error_class() + + try: + locale = locale_class.parse(normalize_locale(locale_code)) + patterns = _extract_cldr_patterns(locale.datetime_formats, _DATETIME_PARSE_STYLES) + date_patterns = _get_date_patterns(locale_code) + sep, is_time_first = _extract_datetime_separator(locale) + + time_formats = [ + "%H:%M:%S", + "%H:%M", + "%I:%M:%S %p", + "%I:%M %p", + ] + + for date_pat, has_era in date_patterns: + for time_pat in time_formats: + combined = ( + f"{time_pat}{sep}{date_pat}" if is_time_first else f"{date_pat}{sep}{time_pat}" + ) + patterns.append((combined, has_era)) + + return tuple(patterns) + except (unknown_locale_error_class, ValueError, RuntimeError, AttributeError): + return () + + +# ============================================================================== +# TOKEN-BASED BABEL-TO-STRPTIME CONVERTER +# ============================================================================== + + +_BABEL_TOKEN_MAP: dict[str, str | None] = { + "yyyy": "%Y", + "yy": "%y", + "y": "%Y", + "MMMM": "%B", + "MMM": "%b", + "MM": "%m", + "M": "%m", + "LLLL": "%B", + "LLL": "%b", + "LL": "%m", + "L": "%m", + "dd": "%d", + "d": "%d", + "EEEE": "%A", + "EEE": "%a", + "E": "%a", + "cccc": "%A", + "ccc": "%a", + "cc": "%w", + "c": "%w", + "GGGG": None, + "GGG": None, + "GG": None, + "G": None, + "HH": "%H", + "H": "%H", + "hh": "%I", + "h": "%I", + "mm": "%M", + "m": "%M", + "ss": "%S", + "s": "%S", + "SSSSSS": "%f", + "SSSSS": "%f", + "SSSS": "%f", + "SSS": "%f", + "SS": "%f", + "S": "%f", + "a": "%p", + "kk": "%H", + "k": "%H", + "KK": "%I", + "K": "%I", + "ZZZZZ": "%z", + "ZZZZ": None, + "ZZZ": "%z", + "ZZ": "%z", + "Z": "%z", + "xxxxx": "%z", + "xxxx": "%z", + "xxx": "%z", + "xx": "%z", + "x": "%z", + "XXXXX": "%z", + "XXXX": "%z", + "XXX": "%z", + "XX": "%z", + "X": "%z", + "zzzz": None, + "zzz": None, + "zz": None, + "z": None, + "vvvv": None, + "v": None, + "VVVV": None, + "VVV": None, + "VV": None, + "V": None, + "OOOO": None, + "O": None, +} + +_ERA_STRINGS: tuple[str, ...] = ( + "Anno Domini", + "Before Christ", + "Common Era", + "Before Common Era", + "A.D.", + "B.C.", + "C.E.", + "BCE", + "AD", + "BC", + "CE", +) + + +def _is_word_boundary(text: str, idx: int, *, is_start: bool) -> bool: + """Check whether a position is a word boundary.""" + if is_start: + return idx == 0 or not text[idx - 1].isalnum() + return idx >= len(text) or not text[idx].isalnum() + + +def _extract_era_strings_from_babel_locale(babel_locale: Any) -> list[str]: + """Extract localized era strings from one Babel locale.""" + localized_eras: list[str] = [] + if not hasattr(babel_locale, "eras") or not babel_locale.eras: + return localized_eras + + for width_key in ("wide", "abbreviated", "narrow"): + era_dict = babel_locale.eras.get(width_key, {}) + for era_idx in (0, 1): + era_text = era_dict.get(era_idx) + if era_text and era_text not in localized_eras: + localized_eras.append(era_text) + return localized_eras + + +@lru_cache(maxsize=64) +def _get_localized_era_strings(locale_code: str) -> tuple[str, ...]: + """Get cached localized era strings for one locale.""" + if not is_babel_available(): + return () + + locale_class = get_locale_class() + unknown_locale_error_class = get_unknown_locale_error_class() + + try: + babel_locale = locale_class.parse(locale_code) + return tuple(_extract_era_strings_from_babel_locale(babel_locale)) + except (unknown_locale_error_class, ValueError): + return () + + +def _strip_era(value: str, locale_code: str | None = None) -> str: + """Strip era designations from a date string.""" + era_strings: list[str] = list(_ERA_STRINGS) + + if locale_code is not None: + localized = _get_localized_era_strings(locale_code) + for era_text in localized: + if era_text not in era_strings: + era_strings.append(era_text) + + result = value + for era in era_strings: + upper_result = result.upper() + upper_era = era.upper() + idx = upper_result.find(upper_era) + if idx != -1: + end_idx = idx + len(era) + if _is_word_boundary(result, idx, is_start=True) and _is_word_boundary( + result, end_idx, is_start=False + ): + result = result[:idx] + result[end_idx:] + return " ".join(result.split()) + + +def _preprocess_datetime_input( + value: str, locale_code: str | None = None, *, has_era: bool +) -> str: + """Strip era text when a pattern requires era preprocessing.""" + if has_era: + return _strip_era(value, locale_code) + return value + + +def _tokenize_babel_pattern(pattern: str) -> list[str]: + """Tokenize a CLDR pattern into atomic tokens.""" + tokens: list[str] = [] + i = 0 + n = len(pattern) + + while i < n: + char = pattern[i] + + if char == "'": + if i + 1 < n and pattern[i + 1] == "'": + tokens.append("'") + i += 2 + continue + + i += 1 + literal_chars: list[str] = [] + + while i < n: + if pattern[i] == "'": + if i + 1 < n and pattern[i + 1] == "'": + literal_chars.append("'") + i += 2 + else: + i += 1 + break + else: + literal_chars.append(pattern[i]) + i += 1 + + if literal_chars: + tokens.append("".join(literal_chars)) + continue + + if char.isalpha(): + j = i + 1 + while j < n and pattern[j] == char: + j += 1 + tokens.append(pattern[i:j]) + i = j + continue + + tokens.append(char) + i += 1 + + return tokens + + +def _babel_to_strptime(babel_pattern: str) -> tuple[str, bool]: + """Convert one CLDR date/time pattern to a Python strptime pattern.""" + tokens = _tokenize_babel_pattern(babel_pattern) + result_parts: list[str] = [] + has_era = False + + for token in tokens: + if token in _BABEL_TOKEN_MAP: + mapped = _BABEL_TOKEN_MAP[token] + if mapped is None: + if token.startswith("G"): + has_era = True + if result_parts and result_parts[-1].strip() == "": + result_parts.pop() + else: + result_parts.append(mapped) + else: + result_parts.append(token) + + return ("".join(result_parts).strip(), has_era) + + +def clear_date_caches() -> None: + """Clear cached locale-specific date and datetime parsing patterns.""" + _get_date_patterns.cache_clear() + _get_datetime_patterns.cache_clear() + _get_localized_era_strings.cache_clear() diff --git a/src/ftllexengine/parsing/dates.py b/src/ftllexengine/parsing/dates.py index 8d8f0653..b9e8b87d 100644 --- a/src/ftllexengine/parsing/dates.py +++ b/src/ftllexengine/parsing/dates.py @@ -38,30 +38,68 @@ """ from datetime import date, datetime, timezone -from functools import lru_cache -from typing import Any - -from ftllexengine.constants import MAX_LOCALE_CACHE_SIZE -from ftllexengine.core.babel_compat import ( - get_locale_class, - get_unknown_locale_error_class, - is_babel_available, - require_babel, -) -from ftllexengine.core.locale_utils import normalize_locale +from importlib import import_module +from typing import TYPE_CHECKING, cast + from ftllexengine.diagnostics import ErrorCategory, FrozenErrorContext, FrozenFluentError from ftllexengine.diagnostics.templates import ErrorTemplate -__all__ = ["clear_date_caches", "parse_date", "parse_datetime"] +from .date_patterns import ( + _BABEL_TOKEN_MAP, + _extract_datetime_separator, + _extract_era_strings_from_babel_locale, + _get_date_patterns, + _get_datetime_patterns, + _get_localized_era_strings, + _is_word_boundary, + _preprocess_datetime_input, + _strip_era, + _tokenize_babel_pattern, + clear_date_caches, +) -# CLDR date format styles used for parsing. -# Both date and datetime use the same styles for consistency. -_DATE_PARSE_STYLES: tuple[str, ...] = ("short", "medium", "long", "full") -_DATETIME_PARSE_STYLES: tuple[str, ...] = ("short", "medium", "long", "full") +if TYPE_CHECKING: + from collections.abc import Callable + +__all__ = [ + "_BABEL_TOKEN_MAP", + "_babel_to_strptime", + "_extract_datetime_separator", + "_extract_era_strings_from_babel_locale", + "_get_date_patterns", + "_get_datetime_patterns", + "_get_localized_era_strings", + "_is_word_boundary", + "_preprocess_datetime_input", + "_strip_era", + "_tokenize_babel_pattern", + "clear_date_caches", + "parse_date", + "parse_datetime", +] + +_DATE_PATTERNS_MODULE = import_module("ftllexengine.parsing.date_patterns") +_PRIVATE_DATE_EXPORTS = ( + _BABEL_TOKEN_MAP, + _extract_datetime_separator, + _extract_era_strings_from_babel_locale, + _get_localized_era_strings, + _is_word_boundary, + _strip_era, + _tokenize_babel_pattern, +) -# Default separator between date and time components (fallback only). -# Used when locale-specific dateTimeFormat pattern extraction fails. -_DATETIME_SEPARATOR_FALLBACK: str = " " + +def _babel_to_strptime(babel_pattern: str) -> tuple[str, bool]: + """Convert one CLDR pattern using the patchable module-level token map.""" + module_vars = vars(_DATE_PATTERNS_MODULE) + original_map = cast("dict[str, str | None]", module_vars["_BABEL_TOKEN_MAP"]) + module_vars["_BABEL_TOKEN_MAP"] = _BABEL_TOKEN_MAP + try: + converter = cast("Callable[[str], tuple[str, bool]]", module_vars["_babel_to_strptime"]) + return converter(babel_pattern) + finally: + module_vars["_BABEL_TOKEN_MAP"] = original_map def parse_date( @@ -92,20 +130,20 @@ def parse_date( BabelImportError: If Babel is not installed Examples: - >>> result, errors = parse_date("2025-01-28", "en_US") # ISO 8601 - >>> result + >>> result, errors = parse_date("2025-01-28", "en_US") # ISO 8601 # doctest: +SKIP + >>> result # doctest: +SKIP datetime.date(2025, 1, 28) - >>> errors + >>> errors # doctest: +SKIP () - >>> result, errors = parse_date("1/28/25", "en_US") # US locale format - >>> result + >>> result, errors = parse_date("1/28/25", "en_US") # US locale format # doctest: +SKIP + >>> result # doctest: +SKIP datetime.date(2025, 1, 28) - >>> result, errors = parse_date("invalid", "en_US") - >>> result is None + >>> result, errors = parse_date("invalid", "en_US") # doctest: +SKIP + >>> result is None # doctest: +SKIP True - >>> len(errors) + >>> len(errors) # doctest: +SKIP 1 Thread Safety: @@ -205,20 +243,24 @@ def parse_datetime( BabelImportError: If Babel is not installed Examples: - >>> result, errors = parse_datetime("2025-01-28 14:30", "en_US") # ISO 8601 - >>> result + >>> result, errors = parse_datetime( # ISO 8601 # doctest: +SKIP + ... "2025-01-28 14:30", "en_US" + ... ) + >>> result # doctest: +SKIP datetime.datetime(2025, 1, 28, 14, 30) - >>> errors + >>> errors # doctest: +SKIP () - >>> result, errors = parse_datetime("1/28/25 2:30 PM", "en_US") # US locale - >>> result + >>> result, errors = parse_datetime( # US locale # doctest: +SKIP + ... "1/28/25 2:30 PM", "en_US" + ... ) + >>> result # doctest: +SKIP datetime.datetime(2025, 1, 28, 14, 30) - >>> result, errors = parse_datetime("invalid", "en_US") - >>> result is None + >>> result, errors = parse_datetime("invalid", "en_US") # doctest: +SKIP + >>> result is None # doctest: +SKIP True - >>> len(errors) + >>> len(errors) # doctest: +SKIP 1 Thread Safety: @@ -292,725 +334,3 @@ def parse_datetime( ) errors.append(error) return (None, tuple(errors)) - - -def _extract_cldr_patterns( - format_dict: Any, - styles: tuple[str, ...], -) -> list[tuple[str, bool]]: - """Extract strptime patterns from a Babel CLDR format dictionary. - - Iterates CLDR format styles, converting each Babel pattern to a - (strptime_pattern, has_era) pair via _babel_to_strptime. - - Args: - format_dict: Babel locale format dict (e.g., locale.date_formats). - styles: CLDR style names to try (e.g., ("short", "medium", "long", "full")). - - Returns: - List of (strptime_pattern, has_era) tuples for styles that succeeded. - """ - patterns: list[tuple[str, bool]] = [] - for style in styles: - try: - fmt = format_dict[style] - babel_pattern = ( - fmt.pattern if hasattr(fmt, "pattern") else str(fmt) - ) - strptime_pattern, has_era = _babel_to_strptime(babel_pattern) - patterns.append((strptime_pattern, has_era)) - # CLDR short patterns often use 2-digit years (yy -> %y). Real-world - # documents frequently write the year in 4-digit form even when the - # CLDR short style specifies 2 digits (e.g. lv-LV "dd.MM.yy" vs the - # common handwritten form "dd.MM.yyyy"). Generate a 4-digit variant so - # both "15.01.26" (%y) and "15.01.2026" (%Y) are accepted. The 2-digit - # variant is listed first so that an unambiguous 2-digit input matches - # its canonical CLDR interpretation (2000-based expansion via %y) rather - # than being mis-parsed as the year 0026 AD via %Y. - if "%y" in strptime_pattern: - patterns.append((strptime_pattern.replace("%y", "%Y"), has_era)) - except (AttributeError, KeyError): - pass - return patterns - - -@lru_cache(maxsize=MAX_LOCALE_CACHE_SIZE) -def _get_date_patterns(locale_code: str) -> tuple[tuple[str, bool], ...]: - """Get strptime date patterns for locale with era flag. - - Uses ONLY Babel CLDR date format patterns specific to the locale. - No fallback patterns to avoid ambiguous date interpretation. - - Results are cached per locale_code for performance. - - Args: - locale_code: BCP 47 locale identifier - - Returns: - Tuple of (strptime_pattern, has_era) pairs to try. - has_era is True if the pattern contains era tokens requiring preprocessing. - Empty tuple if locale parsing fails. - - Raises: - BabelImportError: If Babel is not installed - """ - require_babel("parse_date") - locale_class = get_locale_class() - unknown_locale_error_class = get_unknown_locale_error_class() - - try: - locale = locale_class.parse(normalize_locale(locale_code)) - return tuple( - _extract_cldr_patterns(locale.date_formats, _DATE_PARSE_STYLES), - ) - except (unknown_locale_error_class, ValueError, RuntimeError, AttributeError): - # AttributeError: locale.date_formats may raise if CLDR data is unavailable - return () - - -def _extract_datetime_separator(locale: Any, style: str = "medium") -> tuple[str, bool]: - """Extract the date-time separator and component order from locale's CLDR dateTimeFormat. - - CLDR dateTimeFormat patterns use {0} for time and {1} for date, e.g.: - - en_US: "{1}, {0}" -> separator is ", ", is_time_first=False - - ja_JP: "{1} {0}" -> separator is " ", is_time_first=False - - Some locales: "{0} {1}" -> separator is " ", is_time_first=True - - Args: - locale: Babel Locale object - style: Format style to extract from ("short" or "medium") - - Returns: - Tuple of (separator, is_time_first): - - separator: The string between date and time components - - is_time_first: True if locale uses time-before-date order (pattern "{0}...{1}") - Falls back to (' ', False) if extraction fails. - """ - try: - datetime_format = locale.datetime_formats.get(style) - if datetime_format is None: - return _DATETIME_SEPARATOR_FALLBACK, False - - # Get the pattern string - may be str or DateTimePattern object - pattern = str(datetime_format) - - # Pattern format: "{1}{0}" where {1}=date, {0}=time - # Find the text between {1} and {0} - date_placeholder = "{1}" - time_placeholder = "{0}" - - date_idx = pattern.find(date_placeholder) - time_idx = pattern.find(time_placeholder) - - if date_idx == -1 or time_idx == -1: - return _DATETIME_SEPARATOR_FALLBACK, False - - # Determine if time comes first: "{0}...{1}" means time first - is_time_first = time_idx < date_idx - - # Handle both "{1}{0}" and "{0}{1}" orderings - if date_idx < time_idx: - # Normal order: date first, then time - sep_start = date_idx + len(date_placeholder) - sep_end = time_idx - else: - # Reversed order: time first, then date - sep_start = time_idx + len(time_placeholder) - sep_end = date_idx - - if sep_start < sep_end: - return pattern[sep_start:sep_end], is_time_first - - return _DATETIME_SEPARATOR_FALLBACK, is_time_first - - except (AttributeError, TypeError, ValueError): - return _DATETIME_SEPARATOR_FALLBACK, False - - -@lru_cache(maxsize=MAX_LOCALE_CACHE_SIZE) -def _get_datetime_patterns(locale_code: str) -> tuple[tuple[str, bool], ...]: - """Get strptime datetime patterns for locale with era flag. - - Uses ONLY Babel CLDR datetime format patterns specific to the locale. - No fallback patterns to avoid ambiguous datetime interpretation. - - Results are cached per locale_code for performance. - - Args: - locale_code: BCP 47 locale identifier - - Returns: - Tuple of (strptime_pattern, has_era) pairs to try. - has_era is True if the pattern contains era tokens requiring preprocessing. - Empty tuple if locale parsing fails. - - Raises: - BabelImportError: If Babel is not installed - """ - require_babel("parse_datetime") - locale_class = get_locale_class() - unknown_locale_error_class = get_unknown_locale_error_class() - - try: - locale = locale_class.parse(normalize_locale(locale_code)) - - patterns = _extract_cldr_patterns( - locale.datetime_formats, _DATETIME_PARSE_STYLES, - ) - - # Get date patterns and add time components for locale - date_patterns = _get_date_patterns(locale_code) - - # Get locale-specific separator and component order from CLDR dateTimeFormat - sep, is_time_first = _extract_datetime_separator(locale) - - # Time format patterns (no era - era is carried by date pattern) - time_formats = [ - "%H:%M:%S", # 24-hour with seconds - "%H:%M", # 24-hour without seconds - "%I:%M:%S %p", # 12-hour with seconds - "%I:%M %p", # 12-hour without seconds - ] - - for date_pat, has_era in date_patterns: - for time_pat in time_formats: - # Respect locale's component order: date-first or time-first - if is_time_first: - combined = f"{time_pat}{sep}{date_pat}" - else: - combined = f"{date_pat}{sep}{time_pat}" - patterns.append((combined, has_era)) - - return tuple(patterns) - - except (unknown_locale_error_class, ValueError, RuntimeError, AttributeError): - # AttributeError: locale.datetime_formats may raise if CLDR data is unavailable - return () - - -# ============================================================================== -# TOKEN-BASED BABEL-TO-STRPTIME CONVERTER -# ============================================================================== -# ruff: noqa: ERA001 - Documentation table is not commented-out code -# -# ARCHITECTURAL OVERVIEW: -# -# The Unicode CLDR (Common Locale Data Repository) defines locale-specific date -# patterns using a standardized format. Babel provides access to CLDR data. -# Python's strptime uses a different directive syntax. This module bridges them. -# -# CLDR Pattern Syntax (subset relevant to parsing): -# Pattern | Meaning | Example -# --------|------------------------|-------- -# y/yy | 2-digit year | 25 -# yyyy | 4-digit year | 2025 -# M/MM | Month (numeric) | 1, 01 -# MMM | Month (short name) | Jan -# MMMM | Month (full name) | January -# d/dd | Day of month | 5, 05 -# E/EEE | Weekday (short) | Mon -# EEEE | Weekday (full) | Monday -# G | Era (AD/BC) | AD (no strptime equivalent) -# H/HH | Hour (0-23) | 14 -# h/hh | Hour (1-12) | 2 -# m/mm | Minute | 30 -# s/ss | Second | 45 -# a | AM/PM marker | PM -# S+ | Fractional seconds | 123 -# -# CONVERSION STRATEGY: -# 1. Tokenize: Split CLDR pattern into tokens (letters, literals, quotes) -# 2. Map: Convert each token using _BABEL_TOKEN_MAP -# 3. Handle special cases: -# - Era tokens (G): Mark pattern for preprocessing, strip era from input -# - Timezone names (z): Cannot be parsed by strptime, marked for skip -# - Stand-alone month/weekday (L/c): Map to format context equivalents -# -# QUOTE ESCAPING (CLDR): -# - Single quotes delimit literal text: 'at' -> "at" -# - Double single quotes escape: '' -> "'" -# - Example: "h 'o''clock' a" -> "2 o'clock PM" -# -# ERA HANDLING: -# Python's strptime has no era support. Patterns containing G tokens are -# marked with has_era=True. At parse time, _strip_era() removes era text -# from input before parsing. See _ERA_STRINGS for supported designations. -# -# KNOWN LIMITATIONS: -# - Fractional seconds: CLDR uses S/SS/SSS for 1-3 digits, strptime %f -# expects 6 digits (microseconds). Best-effort mapping is applied. -# - Timezone names: strptime cannot parse "PST" or "America/Los_Angeles". -# These tokens are marked for skip. -# - Hour 1-24 (k) and 0-11 (K): Mapped to closest strptime equivalent -# with potential off-by-one at midnight/noon boundaries. -# -# ============================================================================== - -# Token mapping: Babel CLDR pattern -> Python strptime directive -# None values indicate tokens that require preprocessing (e.g., era stripping) -_BABEL_TOKEN_MAP: dict[str, str | None] = { - # Year - "yyyy": "%Y", # 4-digit year - "yy": "%y", # 2-digit year - "y": "%Y", # Year (default to 4-digit) - # Month (format context) - "MMMM": "%B", # Full month name - "MMM": "%b", # Short month name - "MM": "%m", # 2-digit month - "M": "%m", # Month - # Month (stand-alone context) - used in some locales for headers/labels - "LLLL": "%B", # Full month name (stand-alone) - "LLL": "%b", # Short month name (stand-alone) - "LL": "%m", # 2-digit month (stand-alone) - "L": "%m", # Month (stand-alone) - # Day - "dd": "%d", # 2-digit day - "d": "%d", # Day - # Weekday (format context) - "EEEE": "%A", # Full weekday name - "EEE": "%a", # Short weekday name - "E": "%a", # Weekday - # Weekday (stand-alone context) - used in some locales for headers/labels - "cccc": "%A", # Full weekday name (stand-alone) - "ccc": "%a", # Short weekday name (stand-alone) - "cc": "%w", # Numeric weekday (stand-alone) - "c": "%w", # Numeric weekday (stand-alone) - # Era (AD/BC) - strptime doesn't support era - # Map to None to signal that era stripping is needed - # See _ERA_STRINGS and _strip_era() for runtime handling - "GGGG": None, # Full era name (Anno Domini) - "GGG": None, # Abbreviated era (AD) - "GG": None, # Abbreviated era (AD) - "G": None, # Era abbreviation (AD) - # Hour - "HH": "%H", # 2-digit hour (0-23) - "H": "%H", # Hour (0-23) - "hh": "%I", # 2-digit hour (1-12) - "h": "%I", # Hour (1-12) - # Minute - "mm": "%M", # 2-digit minute - "m": "%M", # Minute - # Second - "ss": "%S", # 2-digit second - "s": "%S", # Second - # Fractional seconds - # Python's %f expects 6 digits (microseconds); CLDR uses variable precision - # Map to %f and accept precision mismatch as best-effort - "SSSSSS": "%f", # Microseconds (6 digits) - "SSSSS": "%f", # 5 fractional digits - "SSSS": "%f", # 4 fractional digits - "SSS": "%f", # Milliseconds (3 digits) - "SS": "%f", # 2 fractional digits - "S": "%f", # 1 fractional digit - # AM/PM - "a": "%p", # AM/PM marker - # Hour (1-24 and 0-11 variants) - # Python doesn't have direct equivalents; map to closest - "kk": "%H", # Hour 1-24 -> 0-23 (off-by-one at midnight) - "k": "%H", # Hour 1-24 -> 0-23 - "KK": "%I", # Hour 0-11 -> 1-12 (off-by-one at noon) - "K": "%I", # Hour 0-11 -> 1-12 - # Timezone tokens - # Python strptime has limited timezone support; map what's possible - "ZZZZZ": "%z", # Extended offset (e.g., +01:00) -> +HHMM - "ZZZZ": None, # Localized GMT (e.g., GMT+01:00) - strptime cannot parse GMT prefix - "ZZZ": "%z", # RFC 822 offset (e.g., +0100) - "ZZ": "%z", # RFC 822 offset - "Z": "%z", # Basic offset - "xxxxx": "%z", # ISO 8601 extended (+01:00:00) - "xxxx": "%z", # ISO 8601 basic (+0100) - "xxx": "%z", # ISO 8601 extended (+01:00) - "xx": "%z", # ISO 8601 basic (+01) - "x": "%z", # ISO 8601 basic (+01) - "XXXXX": "%z", # ISO 8601 extended with Z - "XXXX": "%z", # ISO 8601 basic with Z - "XXX": "%z", # ISO 8601 extended with Z - "XX": "%z", # ISO 8601 basic with Z - "X": "%z", # ISO 8601 basic with Z - # Timezone names - strptime has limited support - # These often fail in strptime; map to None like era tokens - "zzzz": None, # Full timezone name (e.g., Pacific Standard Time) - "zzz": None, # Abbreviated timezone (e.g., PST) - "zz": None, # Abbreviated timezone - "z": None, # Abbreviated timezone - "vvvv": None, # Generic non-location timezone - "v": None, # Generic non-location timezone short - "VVVV": None, # Generic location timezone - "VVV": None, # City timezone - "VV": None, # Timezone ID (e.g., America/Los_Angeles) - "V": None, # Short timezone ID - "OOOO": None, # Localized GMT long - "O": None, # Localized GMT short -} - -# Era strings to strip from input when pattern contains era tokens -# Sorted by length descending to match longer strings first -# Covers common English and Latin era designations -# Localized era names are dynamically added from Babel when available -_ERA_STRINGS: tuple[str, ...] = ( - "Anno Domini", # GGGG full form - "Before Christ", # GGGG full form (BC) - "Common Era", # CE variant - "Before Common Era", # BCE variant - "A.D.", # With periods - "B.C.", # With periods - "C.E.", # Common Era with periods - "BCE", # Before Common Era - "AD", # Standard abbreviation - "BC", # Standard abbreviation - "CE", # Common Era -) - -# NOTE: Timezone name stripping is not implemented. -# English-only timezone stripping would be incomplete: -# - Only worked for English timezone names (PST, EST, etc.) -# - Failed for localized timezone names (French, Spanish, etc.) -# - Created inconsistent behavior across locales -# -# Timezone tokens mapped to None (silently skipped from pattern): -# - Timezone name tokens (z, zz, zzz, zzzz, v, V, O series) -# - Localized GMT format (ZZZZ) - produces "GMT-08:00" which strptime cannot parse -# - NOT stripped from input (users must pre-strip or use UTC offset patterns) -# -# Supported timezone patterns (mapped to strptime %z): -# - UTC offset patterns: Z, ZZ, ZZZ, ZZZZZ, x, xx, xxx, xxxx, xxxxx, X, XX, XXX, XXXX, XXXXX -# - These are locale-agnostic and parse offset formats like +0100, +01:00 -# -# Unsupported timezone patterns (input must be pre-stripped by caller): -# - Timezone name patterns: z, zz, zzz, zzzz, v, vvvv, V, VV, VVV, VVVV, O, OOOO -# - Localized GMT format: ZZZZ (produces "GMT-08:00" which strptime cannot parse) - - -def _is_word_boundary(text: str, idx: int, *, is_start: bool) -> bool: - """Check if position is at a word boundary. - - A word boundary occurs when the adjacent character is non-alphanumeric - or the position is at the start/end of the string. - - Args: - text: The text to check - idx: Position index - is_start: True to check start boundary, False for end boundary - - Returns: - True if position is at a word boundary - """ - if is_start: - return idx == 0 or not text[idx - 1].isalnum() - return idx >= len(text) or not text[idx].isalnum() - - -def _extract_era_strings_from_babel_locale(babel_locale: Any) -> list[str]: - """Extract era strings from a Babel Locale object. - - Helper for _get_localized_era_strings to reduce nesting. - - Args: - babel_locale: Babel Locale instance with eras attribute. - - Returns: - List of unique era strings from all width variants. - """ - localized_eras: list[str] = [] - if not hasattr(babel_locale, "eras") or not babel_locale.eras: - return localized_eras - - # Babel eras: dict with keys 'wide', 'abbreviated', 'narrow' - # Each key maps to dict {0: 'BCE string', 1: 'CE string'} - for width_key in ("wide", "abbreviated", "narrow"): - era_dict = babel_locale.eras.get(width_key, {}) - for era_idx in (0, 1): - era_text = era_dict.get(era_idx) - if era_text and era_text not in localized_eras: - localized_eras.append(era_text) - return localized_eras - - -@lru_cache(maxsize=64) -def _get_localized_era_strings(locale_code: str) -> tuple[str, ...]: - """Get localized era strings from Babel for a locale. - - Cached per locale to avoid repeated Locale object instantiation. - Returns empty tuple if Babel unavailable or locale has no era data. - - Args: - locale_code: Locale code (e.g., "ja_JP", "zh_Hans"). - - Returns: - Tuple of localized era strings from Babel CLDR data. - Empty tuple if Babel unavailable or locale invalid. - """ - if not is_babel_available(): - return () - - locale_class = get_locale_class() - unknown_locale_error_class = get_unknown_locale_error_class() - - try: - babel_locale = locale_class.parse(locale_code) - return tuple(_extract_era_strings_from_babel_locale(babel_locale)) - except (unknown_locale_error_class, ValueError): - return () - - -def _strip_era(value: str, locale_code: str | None = None) -> str: - """Strip era designations from date string. - - Used when pattern contains era tokens (G/GG/GGG/GGGG) since Python's - strptime doesn't support era parsing. - - Uses word boundary detection to avoid stripping partial matches - (e.g., "bad" should not match "AD", "cereal" should not match "CE"). - - Supports localized era strings via Babel when available. Falls back to - English/Latin era designations if Babel is unavailable or locale has no - era data. - - Args: - value: Date string potentially containing era text - locale_code: Optional locale code for localized era strings - - Returns: - Date string with era text removed and whitespace normalized - """ - # Build era strings list: English defaults + localized from cached Babel lookup - era_strings: list[str] = list(_ERA_STRINGS) - - if locale_code is not None: - # Cached lookup for localized era strings (avoids repeated Locale instantiation) - localized = _get_localized_era_strings(locale_code) - for era_text in localized: - if era_text not in era_strings: - era_strings.append(era_text) - - result = value - for era in era_strings: - # Case-insensitive search with word boundary validation - upper_result = result.upper() - upper_era = era.upper() - idx = upper_result.find(upper_era) - if idx != -1: - end_idx = idx + len(era) - # Only strip if both boundaries are word boundaries - if _is_word_boundary(result, idx, is_start=True) and _is_word_boundary( - result, end_idx, is_start=False - ): - result = result[:idx] + result[end_idx:] - # Normalize whitespace (collapse multiple spaces) - return " ".join(result.split()) - - -def _preprocess_datetime_input( - value: str, locale_code: str | None = None, *, has_era: bool -) -> str: - """Preprocess datetime input by stripping unsupported tokens. - - Currently only handles era tokens. Timezone name tokens (z, zz, zzz, zzzz, - v, V, O series) are stripped from the pattern but NOT from the input. - Users must pre-strip timezone text from input or use UTC offset patterns - (Z, x, X series) which are locale-agnostic. - - Args: - value: Date/datetime string to preprocess - has_era: True if pattern contained era tokens (G/GG/GGG/GGGG) - locale_code: Optional locale code for localized era stripping - - Returns: - Preprocessed string with era text removed (using localized era names - from Babel when available) - """ - if has_era: - return _strip_era(value, locale_code) - return value - - -def _tokenize_babel_pattern(pattern: str) -> list[str]: - """Tokenize Babel CLDR pattern into individual tokens. - - This correctly handles patterns like "d.MM.yyyy" where "d" is adjacent - to punctuation without word boundaries. - - CLDR quote escaping rules: - - Single quotes delimit literal text: 'at' produces "at" - - Two consecutive single quotes '' produce a literal single quote - - '' inside quoted text also produces a literal single quote - - Examples: - "h 'o''clock' a" -> ["h", " ", "o'clock", " ", "a"] - "yyyy-MM-dd" -> ["yyyy", "-", "MM", "-", "dd"] - "d.MM.yyyy" -> ["d", ".", "MM", ".", "yyyy"] - - Args: - pattern: Babel CLDR date pattern (e.g., "d.MM.yyyy") - - Returns: - List of tokens (e.g., ["d", ".", "MM", ".", "yyyy"]) - """ - tokens: list[str] = [] - i = 0 - n = len(pattern) - - while i < n: - char = pattern[i] - - # Check for quoted literal (single quotes in CLDR patterns) - if char == "'": - # Check for escaped quote '' (produces literal single quote) - if i + 1 < n and pattern[i + 1] == "'": - # '' outside quoted section -> literal single quote - tokens.append("'") - i += 2 - continue - - # Start of quoted literal section - i += 1 # Skip opening quote - literal_chars: list[str] = [] - - while i < n: - if pattern[i] == "'": - # Check for escaped quote '' inside quoted section - if i + 1 < n and pattern[i + 1] == "'": - # '' inside quoted section -> literal single quote - literal_chars.append("'") - i += 2 - else: - # Closing quote found - i += 1 - break - else: - literal_chars.append(pattern[i]) - i += 1 - - # Add collected literal as single token - if literal_chars: - tokens.append("".join(literal_chars)) - continue - - # Check for pattern letter sequences (a-zA-Z) - if char.isalpha(): - # Collect consecutive same letters (e.g., "yyyy", "MM", "dd") - j = i + 1 - while j < n and pattern[j] == char: - j += 1 - tokens.append(pattern[i:j]) - i = j - continue - - # Everything else is a literal (punctuation, spaces, etc.) - tokens.append(char) - i += 1 - - return tokens - - -def _babel_to_strptime(babel_pattern: str) -> tuple[str, bool]: - """Convert Babel CLDR pattern to Python strptime format. - - Fixes edge cases with word boundaries in patterns like "d.MM.yyyy". - - Babel uses Unicode CLDR date pattern syntax, Python uses strptime directives. - - Era tokens (G/GG/GGG/GGGG) require preprocessing to strip era text from input - before parsing. Timezone name tokens (z/v/V/O series) are stripped from the - pattern but NOT from input - users must pre-strip timezone names. - - Babel Patterns: - y, yy = 2-digit year - yyyy = 4-digit year - M, MM = month (1-12) - MMM = short month name (Jan, Feb) - MMMM = full month name (January, February) - d, dd = day of month - E, EEE = short weekday (Mon) - EEEE = full weekday (Monday) - H, HH = hour 0-23 - h, hh = hour 1-12 - m, mm = minute - s, ss = second - a = AM/PM - - Python strptime: - %y = 2-digit year - %Y = 4-digit year - %m = month (01-12) - %b = short month name - %B = full month name - %d = day of month - %a = short weekday - %A = full weekday - %H = hour 0-23 - %I = hour 1-12 - %M = minute - %S = second - %p = AM/PM - - Args: - babel_pattern: Babel CLDR date pattern - - Returns: - Tuple of (strptime_pattern, has_era): - - strptime_pattern: Python strptime pattern - - has_era: True if pattern contained era tokens (G/GG/GGG/GGGG) - """ - tokens = _tokenize_babel_pattern(babel_pattern) - result_parts: list[str] = [] - has_era = False - - for token in tokens: - # Check if token is a Babel pattern token - if token in _BABEL_TOKEN_MAP: - mapped = _BABEL_TOKEN_MAP[token] - if mapped is None: - # Token maps to None (era, timezone) - skip it - # Timezone tokens (z/v/V/O/ZZZZ) also map to None but are silently skipped - if token.startswith("G"): - has_era = True - # Don't add to result_parts - this token is skipped - # Adjacent separator cleanup: if previous token was whitespace/separator - # and current token is skipped, remove that separator - if result_parts and result_parts[-1].strip() == "": - result_parts.pop() - else: - result_parts.append(mapped) - else: - # Literal: pass through (punctuation, spaces, etc.) - result_parts.append(token) - - # Join and normalize leading/trailing whitespace from skipped tokens - # Example 1: "HH:mm zzzz" -> tokens ["HH", ":", "mm", " ", "zzzz"] - # Without normalization: "%H:%M " (trailing space causes strptime failure) - # With normalization: "%H:%M" (trailing space removed) - # - # Example 2: "zzzz HH:mm" -> tokens ["zzzz", " ", "HH", ":", "mm"] - # Previous: " %H:%M" (leading space from skipped token, adjacent separator removed) - # Now: "%H:%M" (leading space also stripped) - result = "".join(result_parts).strip() - return (result, has_era) - - -def clear_date_caches() -> None: - """Clear all date pattern caches. - - Clears cached CLDR date and datetime patterns from: - - _get_date_patterns() - locale-specific date format patterns - - _get_datetime_patterns() - locale-specific datetime format patterns - - _get_localized_era_strings() - locale-specific era designations - - Useful for: - - Memory reclamation in long-running applications - - Testing scenarios requiring fresh cache state - - After Babel/CLDR data updates - - Thread-safe via functools.cache internal locking. - - Note: - This function does NOT require Babel. It clears the caches - regardless of whether Babel is installed. - - Example: - >>> from ftllexengine.parsing.dates import clear_date_caches - >>> clear_date_caches() # Clears all cached date patterns - """ - _get_date_patterns.cache_clear() - _get_datetime_patterns.cache_clear() - _get_localized_era_strings.cache_clear() diff --git a/src/ftllexengine/parsing/fiscal.py,cover b/src/ftllexengine/parsing/fiscal.py,cover deleted file mode 100644 index c87ae066..00000000 --- a/src/ftllexengine/parsing/fiscal.py,cover +++ /dev/null @@ -1,615 +0,0 @@ -> """Fiscal calendar arithmetic for financial date calculations. - -> Provides types for fiscal calendar configuration and date arithmetic: -> - FiscalCalendar: Configuration for fiscal year boundaries -> - FiscalDelta: Immutable period delta (years, quarters, months, days) -> - FiscalPeriod: Immutable fiscal period (year, quarter, month) - -> Month-End Policy: -> When adding months to a month-end date (e.g., Jan 31 + 1 month), the target -> month may have fewer days. The month_end_policy parameter controls behavior: - -> - "preserve": Try to preserve the day-of-month; clamp if out of range. -> Jan 31 + 1 month -> Feb 28/29 (clamped to last day) -> This is the default and most common business rule. - -> - "clamp": Always clamp to last day if original was month-end. -> Jan 31 + 1 month -> Feb 28/29 (last day of Feb) -> Mar 15 + 1 month -> Apr 15 (day preserved, not month-end) -> Useful for month-end reporting (always lands on month-end). - -> - "strict": Raise ValueError if day would be out of range. -> Jan 31 + 1 month -> ValueError (no Feb 31) -> Useful for validation where inexact dates are errors. - -> No external dependencies. Thread-safe. Python 3.13+. -> """ - -> from __future__ import annotations - -> import calendar -> from dataclasses import dataclass -> from datetime import date, timedelta -> from enum import StrEnum -> from typing import TYPE_CHECKING, Self - -- if TYPE_CHECKING: -- pass - - # ruff: noqa: RUF022 - __all__ organized by category for readability -> __all__ = [ - # Enums -> "MonthEndPolicy", - # Data classes -> "FiscalCalendar", -> "FiscalDelta", -> "FiscalPeriod", - # Factory functions -> "fiscal_quarter", -> "fiscal_year_start", -> "fiscal_year_end", -> ] - - - # ============================================================================ - # ENUMS - # ============================================================================ - - -> class MonthEndPolicy(StrEnum): -> """Policy for handling month-end dates in date arithmetic. - -> Controls behavior when adding months to a date where the target month -> has fewer days than the source day-of-month. -> """ - -> PRESERVE = "preserve" -> """Try to preserve day-of-month; clamp to last day if out of range.""" - -> CLAMP = "clamp" -> """If original date was month-end, result is also month-end.""" - -> STRICT = "strict" -> """Raise ValueError if resulting day would be out of range.""" - - - # ============================================================================ - # FISCAL PERIOD - # ============================================================================ - - -> @dataclass(frozen=True, slots=True, order=True) -> class FiscalPeriod: -> """Immutable fiscal period identifier. - -> Represents a specific fiscal year, quarter, or month within a fiscal calendar. -> Ordering is by (fiscal_year, quarter, month). - -> Attributes: -> fiscal_year: The fiscal year number. -> quarter: Quarter within fiscal year (1-4). -> month: Month within fiscal year (1-12). -> """ - -> fiscal_year: int -> quarter: int -> month: int - -> def __post_init__(self) -> None: -> """Validate period values.""" -> if not 1 <= self.quarter <= 4: -> msg = f"Quarter must be 1-4, got {self.quarter}" -> raise ValueError(msg) -> if not 1 <= self.month <= 12: -> msg = f"Month must be 1-12, got {self.month}" -> raise ValueError(msg) - - - # ============================================================================ - # FISCAL CALENDAR - # ============================================================================ - - -> @dataclass(frozen=True, slots=True) -> class FiscalCalendar: -> """Configuration for a fiscal calendar. - -> Defines when the fiscal year starts. All fiscal period calculations -> are relative to this configuration. - -> Attributes: -> start_month: Calendar month when fiscal year begins (1-12). -> 1 = Calendar year (Jan-Dec fiscal year) -> 4 = UK/Japan government (Apr-Mar fiscal year) -> 7 = Australia/NZ (Jul-Jun fiscal year) -> 10 = US federal government (Oct-Sep fiscal year) - -> Thread-safe. Immutable. Hashable. -> """ - -> start_month: int = 1 - -> def __post_init__(self) -> None: -> """Validate start_month is 1-12.""" -> if not isinstance(self.start_month, int): -> msg = f"start_month must be int, got {type(self.start_month).__name__}" # type: ignore[unreachable] -> raise TypeError(msg) -> if not 1 <= self.start_month <= 12: -> msg = f"start_month must be 1-12, got {self.start_month}" -> raise ValueError(msg) - -> def fiscal_year(self, d: date) -> int: -> """Get the fiscal year containing a date. - -> Args: -> d: Calendar date. - -> Returns: -> Fiscal year number. For calendars starting in month > 1, -> the fiscal year is typically labeled by the ending calendar year. - -> Examples: -> >>> cal = FiscalCalendar(start_month=4) # Apr-Mar fiscal year -> >>> cal.fiscal_year(date(2024, 3, 15)) # Before fiscal year start -> 2024 -> >>> cal.fiscal_year(date(2024, 4, 1)) # First day of FY2025 -> 2025 -> """ -> if d.month >= self.start_month: - # Date is in first part of fiscal year -> return d.year + (1 if self.start_month > 1 else 0) - # Date is in second part of fiscal year (after calendar year boundary) -> return d.year - -> def fiscal_quarter(self, d: date) -> int: -> """Get the fiscal quarter (1-4) containing a date. - -> Args: -> d: Calendar date. - -> Returns: -> Quarter number (1-4) within the fiscal year. - -> Examples: -> >>> cal = FiscalCalendar(start_month=4) # Apr-Mar fiscal year -> >>> cal.fiscal_quarter(date(2024, 4, 15)) # Apr = Q1 -> 1 -> >>> cal.fiscal_quarter(date(2024, 7, 15)) # Jul = Q2 -> 2 -> """ -> fiscal_month = self.fiscal_month(d) -> return (fiscal_month - 1) // 3 + 1 - -> def fiscal_month(self, d: date) -> int: -> """Get the fiscal month (1-12) of a date. - -> Args: -> d: Calendar date. - -> Returns: -> Month number (1-12) within the fiscal year. -> Month 1 is the first month of the fiscal year. - -> Examples: -> >>> cal = FiscalCalendar(start_month=4) # Apr-Mar fiscal year -> >>> cal.fiscal_month(date(2024, 4, 15)) # Apr = Month 1 -> 1 -> >>> cal.fiscal_month(date(2024, 3, 15)) # Mar = Month 12 -> 12 -> """ - # Calculate months since fiscal year start -> month_offset = d.month - self.start_month -> if month_offset < 0: -> month_offset += 12 -> return month_offset + 1 - -> def fiscal_period(self, d: date) -> FiscalPeriod: -> """Get the full fiscal period for a date. - -> Args: -> d: Calendar date. - -> Returns: -> FiscalPeriod with fiscal year, quarter, and month. -> """ -> return FiscalPeriod( -> fiscal_year=self.fiscal_year(d), -> quarter=self.fiscal_quarter(d), -> month=self.fiscal_month(d), -> ) - -> def fiscal_year_start_date(self, fiscal_year: int) -> date: -> """Get the first day of a fiscal year. - -> Args: -> fiscal_year: The fiscal year number. - -> Returns: -> First date of the fiscal year. - -> Examples: -> >>> cal = FiscalCalendar(start_month=4) # Apr-Mar -> >>> cal.fiscal_year_start_date(2025) -> datetime.date(2024, 4, 1) -> """ -> if self.start_month == 1: -> return date(fiscal_year, 1, 1) - # Fiscal year labeled by end year, so start is in prior calendar year -> return date(fiscal_year - 1, self.start_month, 1) - -> def fiscal_year_end_date(self, fiscal_year: int) -> date: -> """Get the last day of a fiscal year. - -> Args: -> fiscal_year: The fiscal year number. - -> Returns: -> Last date of the fiscal year. - -> Examples: -> >>> cal = FiscalCalendar(start_month=4) # Apr-Mar -> >>> cal.fiscal_year_end_date(2025) -> datetime.date(2025, 3, 31) -> """ -> if self.start_month == 1: -> return date(fiscal_year, 12, 31) - # End month is the month before start_month -> end_month = self.start_month - 1 if self.start_month > 1 else 12 -> end_year = fiscal_year -> last_day = calendar.monthrange(end_year, end_month)[1] -> return date(end_year, end_month, last_day) - -> def quarter_start_date(self, fiscal_year: int, quarter: int) -> date: -> """Get the first day of a fiscal quarter. - -> Args: -> fiscal_year: The fiscal year number. -> quarter: Quarter number (1-4). - -> Returns: -> First date of the quarter. - -> Raises: -> ValueError: If quarter is not 1-4. -> """ -> if not 1 <= quarter <= 4: -> msg = f"Quarter must be 1-4, got {quarter}" -> raise ValueError(msg) - - # Calculate the calendar month for this quarter start -> fiscal_month = (quarter - 1) * 3 + 1 # Fiscal months 1, 4, 7, 10 -> return self._fiscal_month_to_date(fiscal_year, fiscal_month, day=1) - -> def quarter_end_date(self, fiscal_year: int, quarter: int) -> date: -> """Get the last day of a fiscal quarter. - -> Args: -> fiscal_year: The fiscal year number. -> quarter: Quarter number (1-4). - -> Returns: -> Last date of the quarter. - -> Raises: -> ValueError: If quarter is not 1-4. -> """ -> if not 1 <= quarter <= 4: -> msg = f"Quarter must be 1-4, got {quarter}" -> raise ValueError(msg) - - # Calculate the calendar month for this quarter end -> fiscal_month = quarter * 3 # Fiscal months 3, 6, 9, 12 -> cal_year, cal_month = self._fiscal_to_calendar_month(fiscal_year, fiscal_month) -> last_day = calendar.monthrange(cal_year, cal_month)[1] -> return date(cal_year, cal_month, last_day) - -> def _fiscal_to_calendar_month(self, fiscal_year: int, fiscal_month: int) -> tuple[int, int]: -> """Convert fiscal year and month to calendar year and month. - -> Args: -> fiscal_year: The fiscal year number. -> fiscal_month: Month within fiscal year (1-12). - -> Returns: -> Tuple of (calendar_year, calendar_month). -> """ - # Calculate calendar month -> cal_month = (self.start_month + fiscal_month - 2) % 12 + 1 - - # Calculate calendar year -> if self.start_month == 1: -> cal_year = fiscal_year -> elif cal_month >= self.start_month: - # In first part of fiscal year (same calendar year as start) -> cal_year = fiscal_year - 1 -> else: - # In second part of fiscal year (after calendar year boundary) -> cal_year = fiscal_year - -> return (cal_year, cal_month) - -> def _fiscal_month_to_date(self, fiscal_year: int, fiscal_month: int, day: int) -> date: -> """Convert fiscal year, month, and day to calendar date. - -> Args: -> fiscal_year: The fiscal year number. -> fiscal_month: Month within fiscal year (1-12). -> day: Day of month. - -> Returns: -> Calendar date. -> """ -> cal_year, cal_month = self._fiscal_to_calendar_month(fiscal_year, fiscal_month) -> return date(cal_year, cal_month, day) - - - # ============================================================================ - # FISCAL DELTA - # ============================================================================ - - -> @dataclass(frozen=True, slots=True) -> class FiscalDelta: -> """Immutable fiscal period delta for date arithmetic. - -> Represents a duration in fiscal terms: years, quarters, months, and days. -> Can be added to or subtracted from dates. - -> The month_end_policy controls how month-end dates are handled when -> the target month has fewer days. - -> Attributes: -> years: Number of years (positive or negative). -> quarters: Number of quarters (positive or negative). -> months: Number of months (positive or negative). -> days: Number of days (positive or negative). -> month_end_policy: How to handle month-end date edge cases. - -> Thread-safe. Immutable. Hashable. -> """ - -> years: int = 0 -> quarters: int = 0 -> months: int = 0 -> days: int = 0 -> month_end_policy: MonthEndPolicy = MonthEndPolicy.PRESERVE - -> def __post_init__(self) -> None: -> """Validate inputs are integers.""" -> for field in ("years", "quarters", "months", "days"): -> value = getattr(self, field) -> if not isinstance(value, int): -> msg = f"{field} must be int, got {type(value).__name__}" -> raise TypeError(msg) - -> def total_months(self) -> int: -> """Get total delta in months (years + quarters + months). - -> Does not include days (those are applied separately). - -> Returns: -> Total months from years, quarters, and months. -> """ -> return self.years * 12 + self.quarters * 3 + self.months - -> def add_to(self, d: date) -> date: -> """Add this delta to a date. - -> Applies month delta first (years + quarters + months), then days. - -> Args: -> d: Starting date. - -> Returns: -> Resulting date after adding delta. - -> Raises: -> ValueError: If month_end_policy is STRICT and day overflows. -> OverflowError: If resulting date is out of range. -> """ - # First apply months (years + quarters + months combined) -> total_months = self.total_months() -> result = _add_months(d, total_months, self.month_end_policy) - - # Then apply days -> if self.days != 0: -> result = result + timedelta(days=self.days) - -> return result - -> def subtract_from(self, d: date) -> date: -> """Subtract this delta from a date. - -> Equivalent to adding the negation of this delta. - -> Args: -> d: Starting date. - -> Returns: -> Resulting date after subtracting delta. - -> Raises: -> ValueError: If month_end_policy is STRICT and day overflows. -> OverflowError: If resulting date is out of range. -> """ -> return self.negate().add_to(d) - -> def negate(self) -> Self: -> """Return negation of this delta. - -> Returns: -> New FiscalDelta with all values negated. -> """ -> return type(self)( -> years=-self.years, -> quarters=-self.quarters, -> months=-self.months, -> days=-self.days, -> month_end_policy=self.month_end_policy, -> ) - -> def __add__(self, other: FiscalDelta) -> FiscalDelta: -> """Add two FiscalDeltas.""" -> if not isinstance(other, FiscalDelta): -> return NotImplemented -> return FiscalDelta( -> years=self.years + other.years, -> quarters=self.quarters + other.quarters, -> months=self.months + other.months, -> days=self.days + other.days, -> month_end_policy=self.month_end_policy, -> ) - -> def __sub__(self, other: FiscalDelta) -> FiscalDelta: -> """Subtract two FiscalDeltas.""" -> if not isinstance(other, FiscalDelta): -> return NotImplemented -> return FiscalDelta( -> years=self.years - other.years, -> quarters=self.quarters - other.quarters, -> months=self.months - other.months, -> days=self.days - other.days, -> month_end_policy=self.month_end_policy, -> ) - -> def __neg__(self) -> Self: -> """Negate this delta.""" -> return self.negate() - -> def __mul__(self, factor: int) -> FiscalDelta: -> """Multiply delta by an integer factor.""" -> if not isinstance(factor, int): -> return NotImplemented -> return FiscalDelta( -> years=self.years * factor, -> quarters=self.quarters * factor, -> months=self.months * factor, -> days=self.days * factor, -> month_end_policy=self.month_end_policy, -> ) - -> def __rmul__(self, factor: int) -> FiscalDelta: -> """Right multiply delta by an integer factor.""" -> return self.__mul__(factor) - - - # ============================================================================ - # HELPER FUNCTIONS - # ============================================================================ - - -> def _is_last_day_of_month(d: date) -> bool: -> """Check if a date is the last day of its month.""" -> return d.day == calendar.monthrange(d.year, d.month)[1] - - -> def _add_months(d: date, months: int, policy: MonthEndPolicy) -> date: -> """Add months to a date with month-end policy. - -> Args: -> d: Starting date. -> months: Number of months to add (can be negative). -> policy: How to handle month-end dates. - -> Returns: -> Resulting date. - -> Raises: -> ValueError: If policy is STRICT and day overflows. -> """ -> if months == 0: -> return d - - # Calculate target year and month -> total_months = d.year * 12 + d.month - 1 + months -> target_year = total_months // 12 -> target_month = total_months % 12 + 1 - - # Get max day of target month -> max_day = calendar.monthrange(target_year, target_month)[1] - - # Apply month-end policy -> match policy: -> case MonthEndPolicy.PRESERVE: - # Clamp day to max if needed -> target_day = min(d.day, max_day) - -> case MonthEndPolicy.CLAMP: - # If original was month-end, result is month-end -> target_day = max_day if _is_last_day_of_month(d) else min(d.day, max_day) - -> case MonthEndPolicy.STRICT: - # Raise if day would overflow -> if d.day > max_day: -> msg = ( -> f"Day {d.day} does not exist in {target_year}-{target_month:02d} " -> f"(max day: {max_day})" -> ) -> raise ValueError(msg) -> target_day = d.day - -> return date(target_year, target_month, target_day) - - - # ============================================================================ - # CONVENIENCE FACTORIES - # ============================================================================ - - -> def fiscal_quarter(d: date, start_month: int = 1) -> int: -> """Get fiscal quarter for a date with given fiscal year start. - -> Convenience function for one-off lookups without creating FiscalCalendar. - -> Args: -> d: Calendar date. -> start_month: Month when fiscal year begins (1-12). Default 1 (calendar year). - -> Returns: -> Quarter number (1-4) within fiscal year. - -> Examples: -> >>> fiscal_quarter(date(2024, 4, 15), start_month=4) # UK fiscal Q1 -> 1 -> >>> fiscal_quarter(date(2024, 7, 15), start_month=1) # Calendar Q3 -> 3 -> """ -> return FiscalCalendar(start_month=start_month).fiscal_quarter(d) - - -> def fiscal_year_start(fiscal_year: int, start_month: int = 1) -> date: -> """Get first day of a fiscal year. - -> Convenience function for one-off lookups without creating FiscalCalendar. - -> Args: -> fiscal_year: The fiscal year number. -> start_month: Month when fiscal year begins (1-12). Default 1 (calendar year). - -> Returns: -> First date of the fiscal year. - -> Examples: -> >>> fiscal_year_start(2025, start_month=4) # UK FY2025 starts Apr 2024 -> datetime.date(2024, 4, 1) -> """ -> return FiscalCalendar(start_month=start_month).fiscal_year_start_date(fiscal_year) - - -> def fiscal_year_end(fiscal_year: int, start_month: int = 1) -> date: -> """Get last day of a fiscal year. - -> Convenience function for one-off lookups without creating FiscalCalendar. - -> Args: -> fiscal_year: The fiscal year number. -> start_month: Month when fiscal year begins (1-12). Default 1 (calendar year). - -> Returns: -> Last date of the fiscal year. - -> Examples: -> >>> fiscal_year_end(2025, start_month=4) # UK FY2025 ends Mar 2025 -> datetime.date(2025, 3, 31) -> """ -> return FiscalCalendar(start_month=start_month).fiscal_year_end_date(fiscal_year) diff --git a/src/ftllexengine/parsing/guards.py b/src/ftllexengine/parsing/guards.py index d79bfbe8..d65f6ebe 100644 --- a/src/ftllexengine/parsing/guards.py +++ b/src/ftllexengine/parsing/guards.py @@ -17,9 +17,9 @@ `if not errors and is_valid_decimal(result)` to just `if is_valid_decimal(result)`. Example: - >>> from ftllexengine.parsing import parse_decimal, is_valid_decimal - >>> result, errors = parse_decimal("1,234.56", "en_US") - >>> if is_valid_decimal(result): + >>> from ftllexengine.parsing import parse_decimal, is_valid_decimal # doctest: +SKIP + >>> result, errors = parse_decimal("1,234.56", "en_US") # doctest: +SKIP + >>> if is_valid_decimal(result): # doctest: +SKIP ... # mypy knows result is finite Decimal ... amount = result.quantize(Decimal("0.01")) """ @@ -60,8 +60,8 @@ def is_valid_decimal(value: Decimal | None) -> TypeIs[Decimal]: True if value is a finite Decimal, False otherwise Example: - >>> result, errors = parse_decimal("1,234.56", "en_US") - >>> if is_valid_decimal(result): + >>> result, errors = parse_decimal("1,234.56", "en_US") # doctest: +SKIP + >>> if is_valid_decimal(result): # doctest: +SKIP ... # Type-safe: mypy knows result is finite Decimal ... total = result * Decimal("1.21") # Add VAT """ @@ -83,8 +83,8 @@ def is_valid_currency( True if value is (Decimal, str) with finite amount, False otherwise Example: - >>> result, errors = parse_currency("EUR1,234.56", "en_US") - >>> if is_valid_currency(result): + >>> result, errors = parse_currency("EUR1,234.56", "en_US") # doctest: +SKIP + >>> if is_valid_currency(result): # doctest: +SKIP ... # Type-safe: mypy knows result is tuple[Decimal, str] ... amount, currency = result ... total = amount * Decimal("1.21") @@ -104,8 +104,8 @@ def is_valid_date(value: date | None) -> TypeIs[date]: True if value is a date object, False otherwise Example: - >>> result, errors = parse_date("2025-01-28", "en_US") - >>> if is_valid_date(result): + >>> result, errors = parse_date("2025-01-28", "en_US") # doctest: +SKIP + >>> if is_valid_date(result): # doctest: +SKIP ... # Type-safe: mypy knows result is date ... year = result.year """ @@ -124,8 +124,8 @@ def is_valid_datetime(value: datetime | None) -> TypeIs[datetime]: True if value is a datetime object, False otherwise Example: - >>> result, errors = parse_datetime("2025-01-28 14:30", "en_US") - >>> if is_valid_datetime(result): + >>> result, errors = parse_datetime("2025-01-28 14:30", "en_US") # doctest: +SKIP + >>> if is_valid_datetime(result): # doctest: +SKIP ... # Type-safe: mypy knows result is datetime ... timestamp = result.timestamp() """ diff --git a/src/ftllexengine/parsing/numbers.py b/src/ftllexengine/parsing/numbers.py index b6810eb7..6752c4bc 100644 --- a/src/ftllexengine/parsing/numbers.py +++ b/src/ftllexengine/parsing/numbers.py @@ -103,26 +103,26 @@ def parse_decimal( BabelImportError: If Babel is not installed Examples: - >>> result, errors = parse_decimal("1,234.56", "en_US") - >>> result + >>> result, errors = parse_decimal("1,234.56", "en_US") # doctest: +SKIP + >>> result # doctest: +SKIP Decimal('1234.56') - >>> errors + >>> errors # doctest: +SKIP () - >>> result, errors = parse_decimal("1 234,56", "lv_LV") - >>> result + >>> result, errors = parse_decimal("1 234,56", "lv_LV") # doctest: +SKIP + >>> result # doctest: +SKIP Decimal('1234.56') - >>> result, errors = parse_decimal("invalid", "en_US") - >>> result + >>> result, errors = parse_decimal("invalid", "en_US") # doctest: +SKIP + >>> result # doctest: +SKIP None - >>> len(errors) + >>> len(errors) # doctest: +SKIP 1 Financial Use Cases: # VAT calculations (no float precision loss) - >>> amount, errors = parse_decimal("100,50", "lv_LV") - >>> if amount is not None: + >>> amount, errors = parse_decimal("100,50", "lv_LV") # doctest: +SKIP + >>> if amount is not None: # doctest: +SKIP ... vat = amount * Decimal("0.21") ... print(vat) 21.105 @@ -250,12 +250,12 @@ def parse_fluent_number( BabelImportError: If Babel is not installed Examples: - >>> result, errors = parse_fluent_number("1 234,50", "lv_LV") - >>> str(result) + >>> result, errors = parse_fluent_number("1 234,50", "lv_LV") # doctest: +SKIP + >>> str(result) # doctest: +SKIP '1 234,50' - >>> result.value + >>> result.value # doctest: +SKIP Decimal('1234.50') - >>> result.precision + >>> result.precision # doctest: +SKIP 2 """ require_babel("parse_fluent_number") diff --git a/src/ftllexengine/runtime/async_bundle.py b/src/ftllexengine/runtime/async_bundle.py index de2482d8..39ce6b3d 100644 --- a/src/ftllexengine/runtime/async_bundle.py +++ b/src/ftllexengine/runtime/async_bundle.py @@ -21,10 +21,10 @@ from collections.abc import Callable, Iterable, Mapping from types import TracebackType + from ftllexengine.core.semantic_types import LocaleCode from ftllexengine.core.value_types import FluentValue from ftllexengine.diagnostics import FrozenFluentError from ftllexengine.introspection import MessageIntrospection - from ftllexengine.localization.types import LocaleCode from ftllexengine.runtime.cache import CacheAuditLogEntry, CacheStats from ftllexengine.syntax.ast import Junk, Message, Term @@ -48,15 +48,15 @@ class AsyncFluentBundle: Supports the async context manager protocol: Examples: - >>> import asyncio - >>> async def example() -> None: + >>> import asyncio # doctest: +SKIP + >>> async def example() -> None: # doctest: +SKIP ... async with AsyncFluentBundle("en_US") as bundle: ... await bundle.add_resource("greeting = Hello, { $name }!") ... result, errors = await bundle.format_pattern( ... "greeting", {"name": "Alice"} ... ) ... assert errors == () - >>> asyncio.run(example()) + >>> asyncio.run(example()) # doctest: +SKIP """ __slots__ = ("_bundle",) @@ -240,7 +240,7 @@ async def add_resource_stream( SyntaxIntegrityError: In strict mode, if any Junk entries are parsed. Example: - >>> async with AsyncFluentBundle("en_US") as bundle: + >>> async with AsyncFluentBundle("en_US") as bundle: # doctest: +SKIP ... with open("locales/en/ui.ftl") as f: ... await bundle.add_resource_stream(f, source_path="locales/en/ui.ftl") """ diff --git a/src/ftllexengine/runtime/bundle.py b/src/ftllexengine/runtime/bundle.py index 008b7b82..c063dba4 100644 --- a/src/ftllexengine/runtime/bundle.py +++ b/src/ftllexengine/runtime/bundle.py @@ -6,77 +6,42 @@ from __future__ import annotations import logging -import time -from collections.abc import Callable, Iterable, Mapping -from dataclasses import dataclass, field -from typing import TYPE_CHECKING, Literal, NoReturn, assert_never +from typing import TYPE_CHECKING from ftllexengine.constants import ( DEFAULT_MAX_EXPANSION_SIZE, - FALLBACK_INVALID, - FALLBACK_MISSING_MESSAGE, MAX_DEPTH, MAX_SOURCE_SIZE, ) from ftllexengine.core.depth_guard import depth_clamp from ftllexengine.core.locale_utils import get_system_locale, require_locale_code -from ftllexengine.diagnostics import ( - Diagnostic, - DiagnosticCode, - ErrorCategory, - ErrorTemplate, - FrozenFluentError, - ValidationResult, -) -from ftllexengine.integrity import ( - FormattingIntegrityError, - IntegrityContext, - SyntaxIntegrityError, -) -from ftllexengine.introspection import extract_variables, introspect_message +from ftllexengine.runtime.bundle_formatting import _BundleFormattingMixin +from ftllexengine.runtime.bundle_queries import _BundleQueryMixin +from ftllexengine.runtime.bundle_registration import _BundleRegistrationMixin from ftllexengine.runtime.cache import CacheAuditLogEntry, CacheStats, IntegrityCache from ftllexengine.runtime.function_bridge import FunctionRegistry from ftllexengine.runtime.functions import get_shared_registry from ftllexengine.runtime.locale_context import LocaleContext -from ftllexengine.runtime.resolver import FluentResolver from ftllexengine.runtime.rwlock import RWLock -from ftllexengine.syntax import Comment, Entry, Junk, Message, Resource, Term +from ftllexengine.syntax import Entry, Junk, Message, Resource, Term from ftllexengine.syntax.parser import FluentParserV1 from ftllexengine.validation import validate_resource as _validate_resource_impl if TYPE_CHECKING: + from collections.abc import Callable, Iterable, Mapping + + from ftllexengine.core.semantic_types import LocaleCode from ftllexengine.core.value_types import FluentValue - from ftllexengine.introspection import MessageIntrospection - from ftllexengine.localization.types import LocaleCode + from ftllexengine.diagnostics import FrozenFluentError, ValidationResult from ftllexengine.runtime.cache_config import CacheConfig + from ftllexengine.runtime.resolver import FluentResolver __all__ = ["FluentBundle"] logger = logging.getLogger(__name__) -# Logging truncation limit for warning messages (surfaced to users, more context helpful). -_LOG_TRUNCATE_WARNING: int = 100 - - -@dataclass(slots=True) -class _PendingRegistration: - """Collected entries from a parsed resource, prior to bundle state mutation. - - Intermediate result of Phase 1 (collection) in the two-phase commit - protocol used by ``_register_resource``. Separating collection from - mutation makes strict-mode atomicity explicit: if strict validation - rejects the resource, no bundle state has been touched. - """ - - messages: dict[str, Message] = field(default_factory=dict) - terms: dict[str, Term] = field(default_factory=dict) - msg_deps: dict[str, frozenset[str]] = field(default_factory=dict) - term_deps: dict[str, frozenset[str]] = field(default_factory=dict) - junk: list[Junk] = field(default_factory=list) - overwrite_warnings: list[tuple[Literal["message", "term"], str]] = field(default_factory=list) - -class FluentBundle: +class FluentBundle(_BundleQueryMixin, _BundleFormattingMixin, _BundleRegistrationMixin): """Fluent message bundle for specific locale. Main public API for Fluent localization. Aligned with Mozilla python-fluent @@ -111,21 +76,21 @@ class FluentBundle: - max_nesting_depth: Maximum placeable nesting depth (default: 100) Examples: - >>> bundle = FluentBundle("lv_LV") - >>> bundle.add_resource(''' + >>> bundle = FluentBundle("lv_LV") # doctest: +SKIP + >>> bundle.add_resource(''' # doctest: +SKIP ... hello = Sveiki, pasaule! ... welcome = Laipni lūdzam, { $name }! ... ''') - >>> result, errors = bundle.format_pattern("hello") - >>> assert result == 'Sveiki, pasaule!' - >>> assert errors == () - >>> - >>> result, errors = bundle.format_pattern("welcome", {"name": "Jānis"}) - >>> assert result == 'Laipni lūdzam, Jānis!' - >>> assert errors == () - >>> - >>> # Custom security limits for stricter environments - >>> strict_bundle = FluentBundle("en_US", max_source_size=1_000_000) + >>> result, errors = bundle.format_pattern("hello") # doctest: +SKIP + >>> assert result == 'Sveiki, pasaule!' # doctest: +SKIP + >>> assert errors == () # doctest: +SKIP + + >>> result, errors = bundle.format_pattern("welcome", {"name": "Jānis"}) # doctest: +SKIP + >>> assert result == 'Laipni lūdzam, Jānis!' # doctest: +SKIP + >>> assert errors == () # doctest: +SKIP + + Custom security limits for stricter environments: + >>> strict_bundle = FluentBundle("en_US", max_source_size=1_000_000) # doctest: +SKIP """ __slots__ = ( @@ -197,25 +162,25 @@ def __init__( Write operations (add_resource, add_function) acquire exclusive access. Example: - >>> from ftllexengine.runtime.cache_config import CacheConfig - >>> - >>> # Using default registry (standard functions) - >>> bundle = FluentBundle("en") - >>> - >>> # Using custom registry with additional functions - >>> from ftllexengine.runtime.functions import create_default_registry - >>> registry = create_default_registry() - >>> registry.register(my_custom_func, ftl_name="CUSTOM") - >>> bundle = FluentBundle("en", functions=registry) - >>> - >>> # Stricter limits for untrusted input - >>> bundle = FluentBundle("en", max_source_size=100_000, max_nesting_depth=20) - >>> - >>> # Financial-grade: default strict=True with write-once cache - >>> bundle = FluentBundle("en", cache=CacheConfig(write_once=True)) - >>> - >>> # Audit-enabled cache for compliance - >>> bundle = FluentBundle("en", cache=CacheConfig(enable_audit=True)) + >>> from ftllexengine.runtime.cache_config import CacheConfig # doctest: +SKIP + + Using the default registry (standard functions): + >>> bundle = FluentBundle("en") # doctest: +SKIP + + Using a custom registry with additional functions: + >>> from ftllexengine.runtime.functions import create_default_registry # doctest: +SKIP + >>> registry = create_default_registry() # doctest: +SKIP + >>> registry.register(my_custom_func, ftl_name="CUSTOM") # doctest: +SKIP + >>> bundle = FluentBundle("en", functions=registry) # doctest: +SKIP + + Stricter limits for untrusted input: + >>> bundle = FluentBundle("en", max_source_size=100_000, max_nesting_depth=20) # doctest: +SKIP + + Financial-grade default: `strict=True` with a write-once cache: + >>> bundle = FluentBundle("en", cache=CacheConfig(write_once=True)) # doctest: +SKIP + + Audit-enabled cache for compliance: + >>> bundle = FluentBundle("en", cache=CacheConfig(enable_audit=True)) # doctest: +SKIP """ # Canonicalize at the boundary so every runtime-facing locale API uses # the same LocaleCode representation. @@ -304,8 +269,8 @@ def locale(self) -> LocaleCode: LocaleCode: Canonical lowercase POSIX locale code (e.g., "en_us", "lv_lv") Example: - >>> bundle = FluentBundle("lv_LV") - >>> bundle.locale + >>> bundle = FluentBundle("lv_LV") # doctest: +SKIP + >>> bundle.locale # doctest: +SKIP 'lv_lv' """ return self._locale @@ -318,8 +283,8 @@ def use_isolating(self) -> bool: bool: True if bidi isolation is enabled, False otherwise Example: - >>> bundle = FluentBundle("ar_EG", use_isolating=True) - >>> bundle.use_isolating + >>> bundle = FluentBundle("ar_EG", use_isolating=True) # doctest: +SKIP + >>> bundle.use_isolating # doctest: +SKIP True """ return self._use_isolating @@ -336,11 +301,11 @@ def strict(self) -> bool: bool: True if strict mode is enabled, False otherwise Example: - >>> bundle = FluentBundle("en", strict=True) - >>> bundle.strict + >>> bundle = FluentBundle("en", strict=True) # doctest: +SKIP + >>> bundle.strict # doctest: +SKIP True - >>> bundle_normal = FluentBundle("en") - >>> bundle_normal.strict + >>> bundle_normal = FluentBundle("en") # doctest: +SKIP + >>> bundle_normal.strict # doctest: +SKIP True """ return self._strict @@ -353,12 +318,12 @@ def cache_enabled(self) -> bool: bool: True if caching is enabled, False otherwise Example: - >>> from ftllexengine.runtime.cache_config import CacheConfig - >>> bundle = FluentBundle("en", cache=CacheConfig()) - >>> bundle.cache_enabled + >>> from ftllexengine.runtime.cache_config import CacheConfig # doctest: +SKIP + >>> bundle = FluentBundle("en", cache=CacheConfig()) # doctest: +SKIP + >>> bundle.cache_enabled # doctest: +SKIP True - >>> bundle_no_cache = FluentBundle("en") - >>> bundle_no_cache.cache_enabled + >>> bundle_no_cache = FluentBundle("en") # doctest: +SKIP + >>> bundle_no_cache.cache_enabled # doctest: +SKIP False """ return self._cache is not None @@ -371,12 +336,12 @@ def cache_config(self) -> CacheConfig | None: CacheConfig if caching is enabled, None if caching is disabled. Example: - >>> from ftllexengine.runtime.cache_config import CacheConfig - >>> bundle = FluentBundle("en", cache=CacheConfig(size=500)) - >>> bundle.cache_config.size + >>> from ftllexengine.runtime.cache_config import CacheConfig # doctest: +SKIP + >>> bundle = FluentBundle("en", cache=CacheConfig(size=500)) # doctest: +SKIP + >>> bundle.cache_config.size # doctest: +SKIP 500 - >>> bundle_no_cache = FluentBundle("en") - >>> bundle_no_cache.cache_config is None + >>> bundle_no_cache = FluentBundle("en") # doctest: +SKIP + >>> bundle_no_cache.cache_config is None # doctest: +SKIP True """ return self._cache_config @@ -404,8 +369,8 @@ def max_source_size(self) -> int: int: Maximum source size limit for add_resource() Example: - >>> bundle = FluentBundle("en", max_source_size=1_000_000) - >>> bundle.max_source_size + >>> bundle = FluentBundle("en", max_source_size=1_000_000) # doctest: +SKIP + >>> bundle.max_source_size # doctest: +SKIP 1000000 """ return self._max_source_size @@ -418,8 +383,8 @@ def max_nesting_depth(self) -> int: int: Maximum nesting depth limit for parser Example: - >>> bundle = FluentBundle("en", max_nesting_depth=50) - >>> bundle.max_nesting_depth + >>> bundle = FluentBundle("en", max_nesting_depth=50) # doctest: +SKIP + >>> bundle.max_nesting_depth # doctest: +SKIP 50 """ return self._max_nesting_depth @@ -444,9 +409,9 @@ def function_registry(self) -> FunctionRegistry: FunctionRegistry: The function registry for this bundle Example: - >>> bundle = FluentBundle("en") - >>> registry = bundle.function_registry - >>> "NUMBER" in registry + >>> bundle = FluentBundle("en") # doctest: +SKIP + >>> registry = bundle.function_registry # doctest: +SKIP + >>> "NUMBER" in registry # doctest: +SKIP True """ return self._function_registry @@ -486,8 +451,8 @@ def for_system_locale( RuntimeError: If system locale cannot be determined Example: - >>> bundle = FluentBundle.for_system_locale() - >>> bundle.locale # Returns canonical detected system locale + >>> bundle = FluentBundle.for_system_locale() # doctest: +SKIP + >>> bundle.locale # Returns canonical detected system locale # doctest: +SKIP 'en_us' """ # Delegate to unified locale detection (raises RuntimeError on failure) @@ -511,8 +476,8 @@ def __repr__(self) -> str: String representation showing locale and loaded messages count Example: - >>> bundle = FluentBundle("lv_LV") - >>> repr(bundle) + >>> bundle = FluentBundle("lv_LV") # doctest: +SKIP + >>> repr(bundle) # doctest: +SKIP "FluentBundle(locale='lv_lv', messages=0, terms=0)" """ with self._rwlock.read(): @@ -535,11 +500,11 @@ def get_babel_locale(self) -> str: str: Babel locale identifier (e.g., "en_US", "lv_LV", "ar_EG") Example: - >>> bundle = FluentBundle("lv") - >>> bundle.get_babel_locale() + >>> bundle = FluentBundle("lv") # doctest: +SKIP + >>> bundle.get_babel_locale() # doctest: +SKIP 'lv' - >>> bundle_us = FluentBundle("en-US") - >>> bundle_us.get_babel_locale() + >>> bundle_us = FluentBundle("en-US") # doctest: +SKIP + >>> bundle_us.get_babel_locale() # doctest: +SKIP 'en_US' Note: @@ -642,8 +607,8 @@ def add_resource_stream( SyntaxIntegrityError: In strict mode, if any Junk entries are parsed. Example: - >>> bundle = FluentBundle("en") - >>> with open("locales/en/ui.ftl") as f: + >>> bundle = FluentBundle("en") # doctest: +SKIP + >>> with open("locales/en/ui.ftl") as f: # doctest: +SKIP ... bundle.add_resource_stream(f, source_path="locales/en/ui.ftl") """ # Collect parsed entries outside lock (stateless parse, immutable input) @@ -653,159 +618,6 @@ def add_resource_stream( with self._rwlock.write(): return self._register_resource(resource, source_path) - def _collect_pending_entries( - self, resource: Resource - ) -> _PendingRegistration: - """Phase 1: Collect entries from a parsed resource without mutating state. - - Iterates over all resource entries, partitioning them into messages, - terms, and junk. Detects overwrites against both existing bundle state - and entries already collected in this batch. - - Args: - resource: Parsed FTL resource - - Returns: - Collected entries ready for Phase 2 (commit). - """ - from ftllexengine.analysis.graph import entry_dependency_set # noqa: PLC0415 - circular - from ftllexengine.introspection import extract_references # noqa: PLC0415 - circular - - pending = _PendingRegistration() - - for entry in resource.entries: - match entry: - case Message(): - msg_id = entry.id.name - if msg_id in self._messages or msg_id in pending.messages: - pending.overwrite_warnings.append(("message", msg_id)) - pending.messages[msg_id] = entry - pending.msg_deps[msg_id] = entry_dependency_set( - *extract_references(entry) - ) - case Term(): - term_id = entry.id.name - if term_id in self._terms or term_id in pending.terms: - pending.overwrite_warnings.append(("term", term_id)) - pending.terms[term_id] = entry - pending.term_deps[term_id] = entry_dependency_set( - *extract_references(entry) - ) - case Junk(): - pending.junk.append(entry) - case Comment(): - pass # Comments carry no runtime state; silently skip. - case _: # pragma: no cover - Entry union is closed (Message|Term|Comment|Junk) - assert_never(entry) - - return pending - - def _register_resource( - self, resource: Resource, source_path: str | None - ) -> tuple[Junk, ...]: - """Register parsed resource entries via two-phase commit. - - Phase 1 (collection) delegates to ``_collect_pending_entries``. - Phase 2 (commit) applies mutations only after strict-mode validation - passes, ensuring atomicity: a resource with syntax errors never - partially populates the bundle. - - Assumes caller holds write lock. - - Args: - resource: Parsed FTL resource - source_path: Optional path for logging - - Returns: - Tuple of Junk entries from resource - """ - # Phase 1: Collect without mutation - pending = self._collect_pending_entries(resource) - junk_tuple = tuple(pending.junk) - - # Strict mode: fail fast on syntax errors BEFORE any state mutation - if self._strict and junk_tuple: - source_desc = source_path or "" - error_summary = "; ".join( - repr(j.content[:50]) for j in junk_tuple[:3] - ) - if len(junk_tuple) > 3: - error_summary += f" (and {len(junk_tuple) - 3} more)" - - context = IntegrityContext( - component="bundle", - operation="add_resource", - key=source_desc, - expected="", - actual=f"<{len(junk_tuple)} syntax error(s)>", - timestamp=time.monotonic(), - wall_time_unix=time.time(), - ) - - error_msg = ( - f"Strict mode: {len(junk_tuple)} syntax error(s) in " - f"{source_desc}: {error_summary}" - ) - raise SyntaxIntegrityError( - error_msg, - context=context, - junk_entries=junk_tuple, - source_path=source_path, - ) - - # Phase 2: Commit — apply mutations - for entry_type, entry_id in pending.overwrite_warnings: - if entry_type == "message": - logger.warning( - "Overwriting existing message '%s' with new definition", - entry_id, - ) - else: - logger.warning( - "Overwriting existing term '-%s' with new definition", - entry_id, - ) - - self._messages.update(pending.messages) - self._terms.update(pending.terms) - self._msg_deps.update(pending.msg_deps) - self._term_deps.update(pending.term_deps) - - for msg_id in pending.messages: - logger.debug("Registered message: %s", msg_id) - for term_id in pending.terms: - logger.debug("Registered term: %s", term_id) - - source_desc = source_path or "" - for junk in pending.junk: - logger.warning( - "Syntax error in %s: %s", - source_desc, - repr(junk.content[:_LOG_TRUNCATE_WARNING]), - ) - - if source_path: - logger.info( - "Added resource %s: %d messages, %d terms, %d junk entries", - source_path, - len(self._messages), - len(self._terms), - len(pending.junk), - ) - else: - logger.info( - "Added resource: %d messages, %d terms, %d junk entries", - len(self._messages), - len(self._terms), - len(pending.junk), - ) - - if self._cache is not None: - self._cache.clear() - logger.debug("Cache cleared after add_resource") - - return junk_tuple - def validate_resource(self, source: str) -> ValidationResult: """Validate FTL resource without adding to bundle. @@ -827,12 +639,12 @@ def validate_resource(self, source: str) -> ValidationResult: TypeError: If source is not a string (e.g., bytes were passed). Example: - >>> bundle = FluentBundle("lv") - >>> result = bundle.validate_resource(ftl_source) - >>> if not result.is_valid: + >>> bundle = FluentBundle("lv") # doctest: +SKIP + >>> result = bundle.validate_resource(ftl_source) # doctest: +SKIP + >>> if not result.is_valid: # doctest: +SKIP ... for error in result.errors: ... print(f"Error [{error.code}]: {error.message}") - >>> if result.warning_count > 0: + >>> if result.warning_count > 0: # doctest: +SKIP ... for warning in result.warnings: ... print(f"Warning [{warning.code}]: {warning.message}") @@ -904,446 +716,31 @@ def format_pattern( This matches the Fluent specification and Mozilla reference implementation. Examples: - >>> # Successful formatting - >>> result, errors = bundle.format_pattern("hello") - >>> assert result == 'Sveiki, pasaule!' - >>> assert errors == () - - >>> # Missing variable - returns fallback and error (non-strict mode) - >>> bundle.add_resource('msg = Hello { $name }!') - >>> result, errors = bundle.format_pattern("msg", {}) - >>> assert result == 'Hello {$name}!' # Readable fallback - >>> assert len(errors) == 1 - >>> assert errors[0].category == ErrorCategory.REFERENCE - - >>> # Attribute access - >>> result, errors = bundle.format_pattern("button-save", attribute="tooltip") - >>> assert result == 'Saglabā pašreizējo ierakstu datubāzē' - >>> assert errors == () - - >>> # Default strict=True - raises on errors (no missing $name) - >>> bundle_strict = FluentBundle("en") - >>> bundle_strict.add_resource('msg = Hello { $name }!') - >>> bundle_strict.format_pattern("msg", {}) # Raises FormattingIntegrityError + Successful formatting: + >>> result, errors = bundle.format_pattern("hello") # doctest: +SKIP + >>> assert result == 'Sveiki, pasaule!' # doctest: +SKIP + >>> assert errors == () # doctest: +SKIP + + Missing variable returns a fallback plus an error in non-strict mode: + >>> bundle.add_resource('msg = Hello { $name }!') # doctest: +SKIP + >>> result, errors = bundle.format_pattern("msg", {}) # doctest: +SKIP + >>> assert result == 'Hello {$name}!' # Readable fallback # doctest: +SKIP + >>> assert len(errors) == 1 # doctest: +SKIP + >>> assert errors[0].category == ErrorCategory.REFERENCE # doctest: +SKIP + + Attribute access: + >>> result, errors = bundle.format_pattern("button-save", attribute="tooltip") # doctest: +SKIP + >>> assert result == 'Saglabā pašreizējo ierakstu datubāzē' # doctest: +SKIP + >>> assert errors == () # doctest: +SKIP + + Default `strict=True` raises on errors, including missing `$name`: + >>> bundle_strict = FluentBundle("en") # doctest: +SKIP + >>> bundle_strict.add_resource('msg = Hello { $name }!') # doctest: +SKIP + >>> bundle_strict.format_pattern("msg", {}) # Raises FormattingIntegrityError # doctest: +SKIP """ with self._rwlock.read(): return self._format_pattern_impl(message_id, args, attribute) - def _raise_strict_error( - self, - message_id: str, - fallback_value: str, - errors: tuple[FrozenFluentError, ...], - ) -> NoReturn: - """Raise FormattingIntegrityError for strict mode (internal helper). - - Args: - message_id: The message ID that failed to format - fallback_value: The fallback value that would be returned in non-strict mode - errors: Tuple of FrozenFluentError instances - - Raises: - FormattingIntegrityError: Always raised with error details - """ - error_summary = "; ".join(str(e) for e in errors[:3]) - if len(errors) > 3: - error_summary += f" (and {len(errors) - 3} more)" - - context = IntegrityContext( - component="bundle", - operation="format_pattern", - key=message_id, - expected="", - actual=f"<{len(errors)} error(s)>", - timestamp=time.monotonic(), - wall_time_unix=time.time(), - ) - - msg = ( - f"Strict mode: formatting '{message_id}' produced {len(errors)} error(s): " - f"{error_summary}" - ) - raise FormattingIntegrityError( - msg, - context=context, - fluent_errors=errors, - fallback_value=fallback_value, - message_id=message_id, - ) - - def _create_resolver(self) -> FluentResolver: - """Create a new FluentResolver from current bundle state. - - Called once at initialization and again whenever the function_registry - changes (add_function). The resolver holds references to self._messages - and self._terms (not copies), so add_resource() mutations are immediately - visible without re-creation. - """ - return FluentResolver( - locale=self._locale, - messages=self._messages, - terms=self._terms, - function_registry=self._function_registry, - use_isolating=self._use_isolating, - max_nesting_depth=self._max_nesting_depth, - max_expansion_size=self._max_expansion_size, - ) - - def _format_pattern_impl( - self, - message_id: str, - args: Mapping[str, FluentValue] | None, - attribute: str | None, - ) -> tuple[str, tuple[FrozenFluentError, ...]]: - """Internal implementation of format_pattern (no locking).""" - # Validate message_id is non-empty string BEFORE cache lookup. - # Invalid inputs must be rejected immediately; caching invalid-ID results - # would waste entries and could produce misleading cache hits. - if not message_id or not isinstance(message_id, str): - logger.warning("Invalid message ID: empty or non-string") - diagnostic = Diagnostic( - code=DiagnosticCode.MESSAGE_NOT_FOUND, - message="Invalid message ID: empty or non-string", - ) - error = FrozenFluentError( - str(diagnostic), ErrorCategory.REFERENCE, diagnostic=diagnostic - ) - if self._strict: - self._raise_strict_error("", FALLBACK_INVALID, (error,)) - return (FALLBACK_INVALID, (error,)) - - # Validate args is None or a Mapping (defensive check for callers ignoring type hints) - if args is not None and not isinstance(args, Mapping): - logger.warning( # type: ignore[unreachable] - "Invalid args type: expected Mapping or None, got %s", type(args).__name__ - ) - diagnostic = Diagnostic( - code=DiagnosticCode.INVALID_ARGUMENT, - message=f"Invalid args type: expected Mapping or None, got {type(args).__name__}", - ) - error = FrozenFluentError( - str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic - ) - # Strict mode: raise instead of returning fallback - if self._strict: - self._raise_strict_error(message_id, FALLBACK_INVALID, (error,)) - return (FALLBACK_INVALID, (error,)) - - # Validate attribute is None or a string - if attribute is not None and not isinstance(attribute, str): - logger.warning( # type: ignore[unreachable] - "Invalid attribute type: expected str or None, got %s", type(attribute).__name__ - ) - diagnostic = Diagnostic( - code=DiagnosticCode.INVALID_ARGUMENT, - message=f"Invalid attribute type: expected str or None, got {type(attribute).__name__}", - ) - error = FrozenFluentError( - str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic - ) - # Strict mode: raise instead of returning fallback - if self._strict: - self._raise_strict_error(message_id, FALLBACK_INVALID, (error,)) - return (FALLBACK_INVALID, (error,)) - - # Check cache after input validation (validated inputs are safe to use as key). - # Placing cache lookup here — after validation, before the message-exists check — - # ensures invalid inputs are never cached and avoids wasting a cache round-trip - # on inputs that would be rejected anyway. - if self._cache is not None: - cached_entry = self._cache.get( - message_id, args, attribute, self._locale, - use_isolating=self._use_isolating, - ) - if cached_entry is not None: - result, errors_tuple = cached_entry.as_result() - if errors_tuple and self._strict: - self._raise_strict_error(message_id, result, errors_tuple) - return (result, errors_tuple) - - # Check if message exists - if message_id not in self._messages: - # strict=True: missing message is unexpected — WARNING for ops visibility. - # strict=False: caller opted into soft-error return semantics; missing messages - # are a legitimate return path, not an anomaly. Use DEBUG to avoid log noise. - (logger.warning if self._strict else logger.debug)( - "Message '%s' not found", message_id - ) - diag = ErrorTemplate.message_not_found(message_id) - error = FrozenFluentError(str(diag), ErrorCategory.REFERENCE, diagnostic=diag) - # Don't cache missing message errors - fallback = FALLBACK_MISSING_MESSAGE.format(id=message_id) - # Strict mode: raise instead of returning fallback - if self._strict: - self._raise_strict_error(message_id, fallback, (error,)) - return (fallback, (error,)) - - message = self._messages[message_id] - - # The resolver is stateless: all per-call state lives in ResolutionContext. - # It holds references to self._messages and self._terms dicts directly, - # so mutations from add_resource are visible without re-creation. The - # resolver is only re-created when function_registry changes (add_function). - resolver = self._resolver - - # Resolve message (resolver handles all errors internally including cycles) - # Note: No try-except here. The resolver is designed to collect all expected - # errors (missing references, type errors, etc.) and return them in the tuple. - # If a raw KeyError/AttributeError/RuntimeError escapes the resolver, that - # indicates a bug in the resolver implementation that should be exposed, - # not swallowed. This follows the principle of failing fast on internal bugs. - result, errors_tuple = resolver.resolve_message(message, args, attribute) - - if errors_tuple: - # strict=True: errors are unexpected — use WARNING so ops alerts fire. - # strict=False: errors are the explicit return-value API; caller receives - # them in the tuple and handles them. WARNING would fire on every expected - # soft-error call, polluting logs. Use DEBUG instead. - log_fn = logger.warning if self._strict else logger.debug - log_fn( - "Message resolution errors for '%s': %d error(s)", message_id, len(errors_tuple) - ) - for err in errors_tuple: - logger.debug(" - %s: %s", type(err).__name__, err) - else: - logger.debug("Resolved message '%s' successfully", message_id) - - # Cache resolution result (including errors) BEFORE strict mode check. - # This ensures repeated calls for the same erroneous message in strict mode - # hit the cache instead of triggering expensive re-resolution each time. - if self._cache is not None: - self._cache.put( - message_id, args, attribute, self._locale, - use_isolating=self._use_isolating, formatted=result, errors=errors_tuple, - ) - - # Strict mode: raise after caching so subsequent calls can use cached result - if errors_tuple and self._strict: - self._raise_strict_error(message_id, result, errors_tuple) - - return (result, errors_tuple) - - def has_message(self, message_id: str) -> bool: - """Check if message exists. - - Args: - message_id: Message identifier - - Returns: - True if message exists in bundle - """ - with self._rwlock.read(): - return message_id in self._messages - - def has_attribute(self, message_id: str, attribute: str) -> bool: - """Check if message has specific attribute. - - Args: - message_id: Message identifier - attribute: Attribute name - - Returns: - True if message exists AND has the specified attribute - - Note: - This method checks if any attribute with the given name exists. - If duplicate attribute names exist (validation warning), this returns - True without indicating which definition will be used. See format_pattern - for resolution semantics (last-wins for duplicates). - - Example: - >>> bundle.add_resource(''' - ... button = Click - ... .tooltip = Click to save - ... ''') - >>> bundle.has_message("button") - True - >>> bundle.has_attribute("button", "tooltip") - True - >>> bundle.has_attribute("button", "missing") - False - >>> bundle.has_attribute("nonexistent", "tooltip") - False - """ - with self._rwlock.read(): - if message_id not in self._messages: - return False - message = self._messages[message_id] - return any(attr.id.name == attribute for attr in message.attributes) - - def get_message_ids(self) -> list[str]: - """Get all message IDs in bundle. - - Returns: - List of message identifiers - """ - with self._rwlock.read(): - return list(self._messages.keys()) - - def get_message_variables(self, message_id: str) -> frozenset[str]: - """Get all variables required by a message (introspection API). - - This is a value-add feature not present in Mozilla's python-fluent. - Enables FTL file validation in CI/CD pipelines. - - Args: - message_id: Message identifier - - Returns: - Frozen set of variable names (without $ prefix) - - Raises: - KeyError: If message doesn't exist - - Example: - >>> bundle.add_resource("greeting = Hello, { $name }!") - >>> vars = bundle.get_message_variables("greeting") - >>> assert "name" in vars - """ - with self._rwlock.read(): - if message_id not in self._messages: - msg = f"Message '{message_id}' not found" - raise KeyError(msg) - - return extract_variables(self._messages[message_id]) - - def get_all_message_variables(self) -> dict[str, frozenset[str]]: - """Get variables for all messages in bundle (batch introspection API). - - Convenience method for extracting variables from all messages at once. - Useful for CI/CD validation pipelines that need to analyze entire - FTL resources in a single operation. - - This is equivalent to calling get_message_variables() for each message - ID, but provides a cleaner API for batch operations. - - Returns: - Dictionary mapping message IDs to their required variable sets. - Empty dict if bundle has no messages. - - Example: - >>> bundle.add_resource(''' - ... greeting = Hello, { $name }! - ... farewell = Goodbye, { $firstName } { $lastName }! - ... simple = No variables here - ... ''') - >>> all_vars = bundle.get_all_message_variables() - >>> assert all_vars["greeting"] == frozenset({"name"}) - >>> assert all_vars["farewell"] == frozenset({"firstName", "lastName"}) - >>> assert all_vars["simple"] == frozenset() - - See Also: - - get_message_variables(): Get variables for single message - - introspect_message(): Get complete metadata (variables + functions + references) - - Note: - Acquires a single read lock for atomic snapshot of all message variables. - """ - with self._rwlock.read(): - return { - message_id: extract_variables(message) - for message_id, message in self._messages.items() - } - - def introspect_message(self, message_id: str) -> MessageIntrospection: - """Get complete introspection data for a message. - - Returns comprehensive metadata about variables, functions, and references - used in the message. Uses Python 3.13's TypeIs for type-safe results. - - Args: - message_id: Message identifier - - Returns: - MessageIntrospection with complete metadata - - Raises: - KeyError: If message doesn't exist - - Example: - >>> bundle.add_resource("price = { NUMBER($amount, minimumFractionDigits: 2) }") - >>> info = bundle.introspect_message("price") - >>> assert "amount" in info.get_variable_names() - >>> assert "NUMBER" in info.get_function_names() - """ - with self._rwlock.read(): - if message_id not in self._messages: - msg = f"Message '{message_id}' not found" - raise KeyError(msg) - - return introspect_message(self._messages[message_id]) - - def introspect_term(self, term_id: str) -> MessageIntrospection: - """Get complete introspection data for a term. - - Returns comprehensive metadata about variables, functions, and references - used in the term. Mirrors introspect_message() for API symmetry. - - Args: - term_id: Term identifier (without leading dash) - - Returns: - MessageIntrospection with complete metadata - - Raises: - KeyError: If term doesn't exist - - Example: - >>> bundle.add_resource("-brand = { $case -> \\n [nominative] Firefox\\n *[other] Firefox\\n}") - >>> info = bundle.introspect_term("brand") - >>> assert "case" in info.get_variable_names() - """ - with self._rwlock.read(): - if term_id not in self._terms: - msg = f"Term '{term_id}' not found" - raise KeyError(msg) - - return introspect_message(self._terms[term_id]) - - def get_message(self, message_id: str) -> Message | None: - """Return the parsed AST node for a message, or None if not found. - - Provides direct access to the Message AST node, enabling callers to use - structured introspection APIs such as validate_message_variables() without - re-parsing the FTL source. - - Args: - message_id: Message identifier - - Returns: - Message AST node, or None if the message does not exist - - Example: - >>> bundle.add_resource("greeting = Hello, { $name }!") - >>> msg = bundle.get_message("greeting") - >>> if msg is not None: - ... from ftllexengine import validate_message_variables - ... result = validate_message_variables(msg, frozenset({"name"})) - ... assert result.is_valid - """ - with self._rwlock.read(): - return self._messages.get(message_id) - - def get_term(self, term_id: str) -> Term | None: - """Return the parsed AST node for a term, or None if not found. - - Provides direct access to the Term AST node. The term_id should be - supplied without the leading dash (e.g., ``"brand"`` for ``-brand``). - - Args: - term_id: Term identifier without leading dash - - Returns: - Term AST node, or None if the term does not exist - - Example: - >>> bundle.add_resource("-brand = Firefox") - >>> term = bundle.get_term("brand") - >>> assert term is not None - """ - with self._rwlock.read(): - return self._terms.get(term_id) - def add_function(self, name: str, func: Callable[..., FluentValue]) -> None: """Add custom function to bundle. @@ -1352,9 +749,9 @@ def add_function(self, name: str, func: Callable[..., FluentValue]) -> None: func: Callable function that returns a FluentValue Example: - >>> def CUSTOM(value): + >>> def CUSTOM(value): # doctest: +SKIP ... return value.upper() - >>> bundle.add_function("CUSTOM", CUSTOM) + >>> bundle.add_function("CUSTOM", CUSTOM) # doctest: +SKIP """ with self._rwlock.write(): # Copy-on-write: copy the shared registry on first modification @@ -1381,10 +778,10 @@ def clear_cache(self) -> None: Automatically called by add_resource() and add_function(). Example: - >>> bundle = FluentBundle("en", cache=CacheConfig()) - >>> bundle.add_resource("msg = Hello") - >>> bundle.format_pattern("msg") # Caches result - >>> bundle.clear_cache() # Manual invalidation + >>> bundle = FluentBundle("en", cache=CacheConfig()) # doctest: +SKIP + >>> bundle.add_resource("msg = Hello") # doctest: +SKIP + >>> bundle.format_pattern("msg") # Caches result # doctest: +SKIP + >>> bundle.clear_cache() # Manual invalidation # doctest: +SKIP """ with self._rwlock.write(): if self._cache is not None: @@ -1400,16 +797,16 @@ def get_cache_stats(self) -> CacheStats | None: See CacheStats for the complete field specification. Example: - >>> bundle = FluentBundle("en", cache=CacheConfig()) - >>> bundle.add_resource("msg = Hello") - >>> bundle.format_pattern("msg", {}) # Cache miss - >>> bundle.format_pattern("msg", {}) # Cache hit - >>> stats = bundle.get_cache_stats() - >>> stats["hits"] + >>> bundle = FluentBundle("en", cache=CacheConfig()) # doctest: +SKIP + >>> bundle.add_resource("msg = Hello") # doctest: +SKIP + >>> bundle.format_pattern("msg", {}) # Cache miss # doctest: +SKIP + >>> bundle.format_pattern("msg", {}) # Cache hit # doctest: +SKIP + >>> stats = bundle.get_cache_stats() # doctest: +SKIP + >>> stats["hits"] # doctest: +SKIP 1 - >>> stats["misses"] + >>> stats["misses"] # doctest: +SKIP 1 - >>> isinstance(stats["hit_rate"], float) + >>> isinstance(stats["hit_rate"], float) # doctest: +SKIP True """ if self._cache is not None: diff --git a/src/ftllexengine/runtime/bundle.py,cover b/src/ftllexengine/runtime/bundle.py,cover deleted file mode 100644 index 2fdf510e..00000000 --- a/src/ftllexengine/runtime/bundle.py,cover +++ /dev/null @@ -1,1613 +0,0 @@ -> """FluentBundle - Main API for Fluent message formatting. - -> Python 3.13+. External dependency: Babel (CLDR locale data). -> """ - -> from __future__ import annotations - -> import logging -> import re -> import time -> from collections.abc import Callable, Mapping -> from typing import TYPE_CHECKING, NoReturn - -> from ftllexengine.constants import ( -> DEFAULT_CACHE_SIZE, -> DEFAULT_MAX_ENTRY_SIZE, -> DEFAULT_MAX_EXPANSION_SIZE, -> FALLBACK_INVALID, -> FALLBACK_MISSING_MESSAGE, -> MAX_DEPTH, -> MAX_LOCALE_LENGTH_HARD_LIMIT, -> MAX_SOURCE_SIZE, -> ) -> from ftllexengine.core.depth_guard import depth_clamp -> from ftllexengine.diagnostics import ( -> Diagnostic, -> DiagnosticCode, -> ErrorCategory, -> ErrorTemplate, -> FrozenFluentError, -> ValidationResult, -> ) -> from ftllexengine.integrity import ( -> FormattingIntegrityError, -> IntegrityContext, -> SyntaxIntegrityError, -> ) -> from ftllexengine.introspection import extract_variables, introspect_message -> from ftllexengine.locale_utils import get_system_locale -> from ftllexengine.runtime.cache import IntegrityCache -> from ftllexengine.runtime.function_bridge import FluentValue, FunctionRegistry -> from ftllexengine.runtime.functions import get_shared_registry -> from ftllexengine.runtime.locale_context import LocaleContext -> from ftllexengine.runtime.resolver import FluentResolver -> from ftllexengine.runtime.rwlock import RWLock -> from ftllexengine.syntax import Comment, Junk, Message, Resource, Term -> from ftllexengine.syntax.parser import FluentParserV1 -> from ftllexengine.validation import validate_resource as _validate_resource_impl - -- if TYPE_CHECKING: -- from ftllexengine.introspection import MessageIntrospection - -> __all__ = ["FluentBundle"] - -> logger = logging.getLogger(__name__) - - # Logging truncation limits for error messages. - # Warnings show more context (100 chars) as they're surfaced to users. - # Debug messages are high-volume, shorter (50 chars) keeps logs manageable. -> _LOG_TRUNCATE_WARNING: int = 100 -> _LOG_TRUNCATE_DEBUG: int = 50 - - # BCP 47 locale code pattern (ASCII-only alphanumerics with underscore/hyphen separators). - # Rejects non-ASCII characters like accented letters (e.g., "e_FR" with accented e). - # Uses \Z instead of $ to match only at end-of-string, not before trailing newline. -> _LOCALE_PATTERN: re.Pattern[str] = re.compile(r"^[a-zA-Z0-9]+([_-][a-zA-Z0-9]+)*\Z") - - -> class FluentBundle: -> """Fluent message bundle for specific locale. - -> Main public API for Fluent localization. Aligned with Mozilla python-fluent -> error handling that returns (result, errors) tuples. - -> Thread Safety: -> FluentBundle is always thread-safe using a readers-writer lock (RWLock). -> This enables high-concurrency access patterns: - -> - Read operations (format_pattern, format_message, has_message, etc.) -> can execute concurrently without blocking each other. -> - Write operations (add_resource, add_function) acquire exclusive access. -> - Writers have priority to prevent starvation in read-heavy workloads. - -> This design provides superior throughput for multi-threaded applications -> while maintaining full thread safety. Typical web servers with 100+ -> concurrent format requests will see significant performance improvements -> compared to coarse-grained locking. - -> Reentrancy Limitation: -> Modifying the bundle from within format operations is PROHIBITED and -> raises RuntimeError. This includes calling add_resource() or add_function() -> from custom functions invoked during formatting. The RWLock does not -> support read-to-write lock upgrading (deadlock prevention). - -> If you need lazy-loading patterns, load resources before formatting -> or use a separate bundle instance for dynamic content. - -> Parser Security: -> Configurable limits prevent DoS attacks: -> - max_source_size: Maximum FTL source length in characters (default: 10 MiB / 10,485,760 chars) -> - max_nesting_depth: Maximum placeable nesting depth (default: 100) - -> Examples: -> >>> bundle = FluentBundle("lv_LV") -> >>> bundle.add_resource(''' -> ... hello = Sveiki, pasaule! -> ... welcome = Laipni lūdzam, { $name }! -> ... ''') -> >>> result, errors = bundle.format_pattern("hello") -> >>> assert result == 'Sveiki, pasaule!' -> >>> assert errors == () -> >>> -> >>> result, errors = bundle.format_pattern("welcome", {"name": "Jānis"}) -> >>> assert result == 'Laipni lūdzam, Jānis!' -> >>> assert errors == () -> >>> -> >>> # Custom security limits for stricter environments -> >>> strict_bundle = FluentBundle("en_US", max_source_size=1_000_000) -> """ - -> __slots__ = ( -> "_cache", -> "_cache_enable_audit", -> "_cache_max_audit_entries", -> "_cache_max_entry_weight", -> "_cache_max_errors_per_entry", -> "_cache_size", -> "_cache_write_once", -> "_function_registry", -> "_locale", -> "_max_expansion_size", -> "_max_nesting_depth", -> "_max_source_size", -> "_messages", -> "_modified_in_context", -> "_msg_deps", -> "_owns_registry", -> "_parser", -> "_rwlock", -> "_strict", -> "_term_deps", -> "_terms", -> "_use_isolating", -> ) - -> @staticmethod -> def _validate_locale_format(locale: str) -> None: -> """Validate locale code format. - -> Checks that locale is non-empty and contains only ASCII alphanumeric -> characters with optional underscore or hyphen separators. Enforces -> BCP 47 compliance by rejecting non-ASCII characters. - -> Rejects obviously malicious inputs (>1000 characters) to prevent DoS. -> Locale codes exceeding standard BCP 47 length (35 chars) trigger warnings -> in LocaleContext but are accepted here. - -> Args: -> locale: Locale code to validate - -> Raises: -> ValueError: If locale code is empty, excessively long (>1000), -> contains non-ASCII characters, or has invalid format -> """ -> if not locale: -! msg = "Locale code cannot be empty" -! raise ValueError(msg) - - # Reject obviously malicious inputs (DoS prevention) -> if len(locale) > MAX_LOCALE_LENGTH_HARD_LIMIT: -! msg = ( -! f"Locale code exceeds maximum length of {MAX_LOCALE_LENGTH_HARD_LIMIT} characters: " -! f"'{locale[:50]}...' ({len(locale)} characters)" -! ) -! raise ValueError(msg) - -> if not _LOCALE_PATTERN.match(locale): -! msg = f"Invalid locale code format: '{locale}' (must be ASCII alphanumeric)" -! raise ValueError(msg) - -> def __init__( -> self, -> locale: str, -> /, -> *, -> use_isolating: bool = True, -> enable_cache: bool = False, -> cache_size: int = DEFAULT_CACHE_SIZE, -> cache_write_once: bool = False, -> cache_enable_audit: bool = False, -> cache_max_audit_entries: int = 10000, -> cache_max_entry_weight: int = DEFAULT_MAX_ENTRY_SIZE, -> cache_max_errors_per_entry: int = 50, -> functions: FunctionRegistry | None = None, -> max_source_size: int | None = None, -> max_nesting_depth: int | None = None, -> max_expansion_size: int | None = None, -> strict: bool = False, -> ) -> None: -> """Initialize bundle for locale. - -> Args: -> locale: Locale code (lv_LV, en_US, de_DE, pl_PL) [positional-only] -> use_isolating: Wrap interpolated values in Unicode bidi isolation marks (default: True) -> Set to False only if you're certain RTL languages won't be used. -> See Unicode TR9: http://www.unicode.org/reports/tr9/ -> enable_cache: Enable format caching for performance (default: False) -> Cache provides 50x speedup on repeated format calls. -> cache_size: Maximum cache entries when caching enabled (default: 1000) -> cache_write_once: Reject updates to existing cache keys (default: False). -> Enables data race prevention for financial applications. -> When True and strict=True, raises WriteConflictError on overwrite attempt. -> cache_enable_audit: Maintain audit log of all cache operations (default: False). -> Enables post-mortem analysis and compliance logging. -> cache_max_audit_entries: Maximum audit log entries before oldest eviction (default: 10000). -> Only relevant when cache_enable_audit=True. -> cache_max_entry_weight: Maximum memory weight for cached results (default: 10000). -> Weight is calculated as: len(formatted_str) + sum(error_weights). -> Results exceeding this limit are computed but not cached. -> cache_max_errors_per_entry: Maximum errors per cache entry (default: 50). -> Prevents memory exhaustion from pathological error cases. -> functions: Custom FunctionRegistry to use (default: standard registry with -> NUMBER, DATETIME, CURRENCY). Pass a custom registry to: -> - Use pre-registered custom functions -> - Share function registrations between bundles -> - Override default function behavior -> max_source_size: Maximum FTL source length in characters (default: 10 MiB / 10,485,760 chars). -> Set to 0 to disable limit (not recommended for untrusted input). -> max_nesting_depth: Maximum placeable nesting depth (default: 100). -> Prevents DoS via deeply nested { { { ... } } } structures. -> max_expansion_size: Maximum total characters produced during resolution (default: 1,000,000). -> Prevents Billion Laughs attacks via exponentially expanding message references. -> strict: Enable strict mode for financial applications (default: False). -> When True, format_pattern raises FormattingIntegrityError on ANY error -> instead of returning fallback values. Use for monetary/critical data -> where silent fallbacks are unacceptable. Also affects cache corruption -> handling: raises CacheCorruptionError instead of silent eviction. - -> Raises: -> ValueError: If locale code is empty or has invalid format - -> Thread Safety: -> FluentBundle is always thread-safe using a readers-writer lock (RWLock). -> Read operations (format calls) execute concurrently without blocking. -> Write operations (add_resource, add_function) acquire exclusive access. - -> Example: -> >>> # Using default registry (standard functions) -> >>> bundle = FluentBundle("en") -> >>> -> >>> # Using custom registry with additional functions -> >>> from ftllexengine.runtime.functions import create_default_registry -> >>> registry = create_default_registry() -> >>> registry.register(my_custom_func, ftl_name="CUSTOM") -> >>> bundle = FluentBundle("en", functions=registry) -> >>> -> >>> # Stricter limits for untrusted input -> >>> bundle = FluentBundle("en", max_source_size=100_000, max_nesting_depth=20) -> >>> -> >>> # Financial-grade strict mode with write-once cache -> >>> bundle = FluentBundle("en", strict=True, enable_cache=True, cache_write_once=True) -> >>> -> >>> # Audit-enabled cache for compliance -> >>> bundle = FluentBundle("en", enable_cache=True, cache_enable_audit=True) -> """ - # Validate locale format -> FluentBundle._validate_locale_format(locale) - -> self._locale = locale -> self._use_isolating = use_isolating -> self._strict = strict -> self._messages: dict[str, Message] = {} -> self._terms: dict[str, Term] = {} - - # Dependency tracking for cross-resource cycle detection. - # Maps entry ID to set of (type-prefixed) dependencies. - # E.g., {"greeting": {"msg:welcome", "term:brand"}} -> self._msg_deps: dict[str, set[str]] = {} -> self._term_deps: dict[str, set[str]] = {} - - # Parser security configuration -> self._max_source_size = max_source_size if max_source_size is not None else MAX_SOURCE_SIZE -> requested_depth = max_nesting_depth if max_nesting_depth is not None else MAX_DEPTH -> self._max_nesting_depth = depth_clamp(requested_depth) -> self._max_expansion_size = ( -> max_expansion_size if max_expansion_size is not None else DEFAULT_MAX_EXPANSION_SIZE -> ) -> self._parser = FluentParserV1( -> max_source_size=self._max_source_size, -> max_nesting_depth=self._max_nesting_depth, -> ) - - # Thread safety: always enabled via RWLock (readers-writer lock) - # Allows concurrent read operations (format calls) while ensuring - # exclusive write access (add_resource, add_function) -> self._rwlock = RWLock() - - # Function registry: copy-on-write optimization - # Using the shared registry avoids re-registering built-in functions for each bundle. - # Copy is deferred until add_function() is called (copy-on-write pattern). -> if functions is not None: - # Type validation at API boundary: reject non-FunctionRegistry objects early. - # dict, OrderedDict, and other Mapping types have .copy() but lack the - # FunctionRegistry interface (should_inject_locale, call, etc.), causing - # opaque AttributeErrors during format_pattern() if not caught here. -! if not isinstance(functions, FunctionRegistry): -! msg = ( # type: ignore[unreachable] -! f"functions must be FunctionRegistry, not {type(functions).__name__}. " -! "Use create_default_registry() or FunctionRegistry() to create one." -! ) -! raise TypeError(msg) - # User provided a registry - copy it for isolation -! self._function_registry = functions.copy() -! self._owns_registry = True -> else: - # Use shared registry directly (frozen, so safe to share) - # Will be copied on first add_function() call -> self._function_registry = get_shared_registry() -> self._owns_registry = False - - # Format cache (opt-in) with integrity verification - # Store cache configuration for introspection; created eagerly when enable_cache=True -> self._cache: IntegrityCache | None = None -> self._cache_size = cache_size -> self._cache_write_once = cache_write_once -> self._cache_enable_audit = cache_enable_audit -> self._cache_max_audit_entries = cache_max_audit_entries -> self._cache_max_entry_weight = cache_max_entry_weight -> self._cache_max_errors_per_entry = cache_max_errors_per_entry - -> if enable_cache: - # Cache strict mode matches bundle strict mode for consistent error handling. - # When bundle strict=True, cache corruption raises CacheCorruptionError. - # When bundle strict=False, cache corruption silently evicts the entry. -! self._cache = IntegrityCache( -! maxsize=cache_size, -! max_entry_weight=cache_max_entry_weight, -! max_errors_per_entry=cache_max_errors_per_entry, -! write_once=cache_write_once, -! strict=self._strict, -! enable_audit=cache_enable_audit, -! max_audit_entries=cache_max_audit_entries, -! ) - - # Context manager state tracking (cache invalidation optimization) -> self._modified_in_context = False - -> logger.info( -> "FluentBundle initialized for locale: %s (use_isolating=%s, cache=%s, strict=%s)", -> locale, -> use_isolating, -> "enabled" if enable_cache else "disabled", -> strict, -> ) - -> @property -> def locale(self) -> str: -> """Get the locale code for this bundle (read-only). - -> Returns: -> str: Locale code (e.g., "en_US", "lv_LV") - -> Example: -> >>> bundle = FluentBundle("lv_LV") -> >>> bundle.locale -> 'lv_LV' -> """ -! return self._locale - -> @property -> def use_isolating(self) -> bool: -> """Get whether Unicode bidi isolation is enabled (read-only). - -> Returns: -> bool: True if bidi isolation is enabled, False otherwise - -> Example: -> >>> bundle = FluentBundle("ar_EG", use_isolating=True) -> >>> bundle.use_isolating -> True -> """ -! return self._use_isolating - -> @property -> def strict(self) -> bool: -> """Get whether strict mode is enabled (read-only). - -> Strict mode raises FormattingIntegrityError on ANY formatting error -> instead of returning fallback values. Essential for financial applications -> where silent fallbacks are unacceptable. - -> Returns: -> bool: True if strict mode is enabled, False otherwise - -> Example: -> >>> bundle = FluentBundle("en", strict=True) -> >>> bundle.strict -> True -> >>> bundle_normal = FluentBundle("en") -> >>> bundle_normal.strict -> False -> """ -! return self._strict - -> @property -> def cache_enabled(self) -> bool: -> """Get whether format caching is enabled (read-only). - -> Returns: -> bool: True if caching is enabled, False otherwise - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True) -> >>> bundle.cache_enabled -> True -> >>> bundle_no_cache = FluentBundle("en") -> >>> bundle_no_cache.cache_enabled -> False -> """ -! return self._cache is not None - -> @property -> def cache_size(self) -> int: -> """Get maximum cache size configuration (read-only). - -> Returns: -> int: Configured maximum cache entries - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_size=500) -> >>> bundle.cache_size -> 500 -> >>> # Cache size is returned even when caching is disabled -> >>> bundle_no_cache = FluentBundle("en", cache_size=200) -> >>> bundle_no_cache.cache_size -> 200 -> >>> bundle_no_cache.cache_enabled -> False - -> Note: -> Returns configured size regardless of whether caching is enabled. -> Use cache_enabled to check if caching is active. -> """ -! return self._cache_size - -> @property -> def cache_usage(self) -> int: -> """Get current number of cached format results (read-only). - -> Returns: -> int: Number of entries currently in cache (0 if caching disabled) - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_size=500) -> >>> bundle.add_resource("msg = Hello") -> >>> bundle.format_pattern("msg", {}) -> ('Hello', ()) -> >>> bundle.cache_usage # One entry cached -> 1 -> >>> bundle.cache_size # Configured limit -> 500 - -> Note: -> Use with cache_size to calculate utilization: cache_usage / cache_size -> """ -! if self._cache is None: -! return 0 -! return self._cache.size - -> @property -> def cache_write_once(self) -> bool: -> """Get whether cache write-once mode is enabled (read-only). - -> Write-once mode rejects updates to existing cache keys, preventing -> data races in concurrent environments. Essential for financial -> applications where cache overwrites could indicate race conditions. - -> Returns: -> bool: True if write-once mode is configured - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_write_once=True) -> >>> bundle.cache_write_once -> True -> >>> bundle_normal = FluentBundle("en", enable_cache=True) -> >>> bundle_normal.cache_write_once -> False - -> Note: -> Returns configured value regardless of whether caching is enabled. -> """ -! return self._cache_write_once - -> @property -> def cache_enable_audit(self) -> bool: -> """Get whether cache audit logging is enabled (read-only). - -> Audit logging maintains a history of all cache operations for -> compliance and debugging purposes. Each operation (GET, PUT, HIT, -> MISS, EVICT, CORRUPTION) is recorded with timestamps. - -> Returns: -> bool: True if audit logging is configured - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_enable_audit=True) -> >>> bundle.cache_enable_audit -> True - -> Note: -> Returns configured value regardless of whether caching is enabled. -> """ -! return self._cache_enable_audit - -> @property -> def cache_max_audit_entries(self) -> int: -> """Get maximum audit log entries configuration (read-only). - -> The audit log uses a bounded deque with O(1) eviction of oldest -> entries when the limit is reached. - -> Returns: -> int: Configured maximum audit log entries - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_enable_audit=True, cache_max_audit_entries=5000) -> >>> bundle.cache_max_audit_entries -> 5000 - -> Note: -> Returns configured value regardless of whether caching or audit is enabled. -> """ -! return self._cache_max_audit_entries - -> @property -> def cache_max_entry_weight(self) -> int: -> """Get maximum cache entry weight configuration (read-only). - -> Weight is calculated as: len(formatted_str) + sum(error_weights). -> Results exceeding this limit are computed but not cached, protecting -> against memory exhaustion from large formatted outputs. - -> Returns: -> int: Configured maximum entry weight in approximate bytes - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_max_entry_weight=5000) -> >>> bundle.cache_max_entry_weight -> 5000 - -> Note: -> Returns configured value regardless of whether caching is enabled. -> """ -! return self._cache_max_entry_weight - -> @property -> def cache_max_errors_per_entry(self) -> int: -> """Get maximum errors per cache entry configuration (read-only). - -> Entries with more errors than this limit are not cached, preventing -> memory exhaustion from pathological cases where resolution produces -> many errors (e.g., cyclic references, deeply nested validation failures). - -> Returns: -> int: Configured maximum errors per cache entry - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True, cache_max_errors_per_entry=25) -> >>> bundle.cache_max_errors_per_entry -> 25 - -> Note: -> Returns configured value regardless of whether caching is enabled. -> """ -! return self._cache_max_errors_per_entry - -> @property -> def max_source_size(self) -> int: -> """Maximum FTL source size in characters (read-only). - -> Python measures string length in characters (code points), not bytes. -> UTF-8 encoding means 1 character = 1-4 bytes, but this limit counts -> characters as returned by len(source). - -> Returns: -> int: Maximum source size limit for add_resource() - -> Example: -> >>> bundle = FluentBundle("en", max_source_size=1_000_000) -> >>> bundle.max_source_size -> 1000000 -> """ -! return self._max_source_size - -> @property -> def max_nesting_depth(self) -> int: -> """Maximum placeable nesting depth (read-only). - -> Returns: -> int: Maximum nesting depth limit for parser - -> Example: -> >>> bundle = FluentBundle("en", max_nesting_depth=50) -> >>> bundle.max_nesting_depth -> 50 -> """ -! return self._max_nesting_depth - -> @property -> def max_expansion_size(self) -> int: -> """Maximum total characters produced during resolution (read-only). - -> Returns: -> int: Maximum expansion budget for DoS prevention -> """ -! return self._max_expansion_size - -> @property -> def function_registry(self) -> FunctionRegistry: -> """Get the function registry for this bundle (read-only). - -> Provides read access to the registered formatting functions without -> requiring access to private attributes. - -> Returns: -> FunctionRegistry: The function registry for this bundle - -> Example: -> >>> bundle = FluentBundle("en") -> >>> registry = bundle.function_registry -> >>> "NUMBER" in registry -> True -> """ -! return self._function_registry - -> @classmethod -> def for_system_locale( -> cls, -> *, -> use_isolating: bool = True, -> enable_cache: bool = False, -> cache_size: int = DEFAULT_CACHE_SIZE, -> cache_write_once: bool = False, -> cache_enable_audit: bool = False, -> cache_max_audit_entries: int = 10000, -> cache_max_entry_weight: int = DEFAULT_MAX_ENTRY_SIZE, -> cache_max_errors_per_entry: int = 50, -> functions: FunctionRegistry | None = None, -> max_source_size: int | None = None, -> max_nesting_depth: int | None = None, -> max_expansion_size: int | None = None, -> strict: bool = False, -> ) -> FluentBundle: -> """Factory method to create a FluentBundle using the system locale. - -> Detects and uses the current system locale (from locale.getlocale(), -> LC_ALL, LC_MESSAGES, or LANG environment variables). - -> Args: -> use_isolating: Wrap interpolated values in Unicode bidi isolation marks -> enable_cache: Enable format caching for performance -> cache_size: Maximum cache entries when caching enabled -> cache_write_once: Reject updates to existing cache keys (data race prevention) -> cache_enable_audit: Maintain audit log of all cache operations -> cache_max_audit_entries: Maximum audit log entries before oldest eviction -> cache_max_entry_weight: Maximum memory weight for cached results -> cache_max_errors_per_entry: Maximum errors per cache entry -> functions: Custom FunctionRegistry to use (default: standard registry) -> max_source_size: Maximum FTL source size in characters (default: 10 MiB / 10,485,760 chars) -> max_nesting_depth: Maximum placeable nesting depth (default: 100) -> strict: Enable strict mode (fail-fast on errors, strict cache corruption handling) - -> Returns: -> Configured FluentBundle instance for system locale - -> Raises: -> RuntimeError: If system locale cannot be determined - -> Example: -> >>> bundle = FluentBundle.for_system_locale() -> >>> bundle.locale # Returns detected system locale -> 'en_US' -> """ - # Delegate to unified locale detection (raises RuntimeError on failure) -! system_locale = get_system_locale(raise_on_failure=True) - -! return cls( -! system_locale, -! use_isolating=use_isolating, -! enable_cache=enable_cache, -! cache_size=cache_size, -! cache_write_once=cache_write_once, -! cache_enable_audit=cache_enable_audit, -! cache_max_audit_entries=cache_max_audit_entries, -! cache_max_entry_weight=cache_max_entry_weight, -! cache_max_errors_per_entry=cache_max_errors_per_entry, -! functions=functions, -! max_source_size=max_source_size, -! max_nesting_depth=max_nesting_depth, -! max_expansion_size=max_expansion_size, -! strict=strict, -! ) - -> def __repr__(self) -> str: -> """Return string representation for debugging. - - -> Returns: -> String representation showing locale and loaded messages count - -> Example: -> >>> bundle = FluentBundle("lv_LV") -> >>> repr(bundle) -> "FluentBundle(locale='lv_LV', messages=0, terms=0)" -> """ -! return ( -! f"FluentBundle(locale={self._locale!r}, " -! f"messages={len(self._messages)}, " -! f"terms={len(self._terms)})" -! ) - -> def __enter__(self) -> FluentBundle: -> """Enter context manager. - -> Enables use of FluentBundle with 'with' statement. The context manager -> clears the format cache on exit only if the bundle was modified during -> the context (add_resource, add_function, or clear_cache called). For -> read-only operations, the cache is preserved for better performance. - -> Messages and terms are always preserved so the bundle remains usable -> after the with block. - -> Returns: -> Self (the FluentBundle instance) - -> Example: -> >>> with FluentBundle("en_US", enable_cache=True) as bundle: -> ... bundle.add_resource("hello = Hello") # Modifying operation -> ... result = bundle.format_pattern("hello") -> ... # Cache cleared (bundle was modified) -> >>> -> >>> with bundle: # Read-only context -> ... result = bundle.format_pattern("hello") -> ... # Cache preserved (bundle NOT modified) -> """ - # Reset modification tracking for new context -! self._modified_in_context = False -! return self - -> def __exit__( -> self, -> exc_type: type[BaseException] | None, -> exc_val: BaseException | None, -> exc_tb: object | None, -> ) -> None: -> """Exit context manager with conditional cache cleanup. - -> Clears the format cache only if the bundle was modified during the -> context (add_resource, add_function, or clear_cache called). For -> read-only contexts, the cache is preserved to avoid invalidating -> cached results in shared bundle scenarios. - -> Messages and terms are always preserved so the bundle remains usable -> after the with block. Does not suppress exceptions. - -> Args: -> exc_type: Exception type (if any) -> exc_val: Exception value (if any) -> exc_tb: Exception traceback (if any) -> """ - # Clear cache only if bundle was modified during context - # Read-only operations (format_pattern) preserve cache for performance -! if self._modified_in_context and self._cache is not None: -! self._cache.clear() -! logger.debug( -! "FluentBundle cache cleared on context exit (modified): %s", -! self._locale, -! ) -! else: -! logger.debug( -! "FluentBundle cache preserved on context exit (read-only): %s", -! self._locale, -! ) - - # Reset flag for next context (defensive) -! self._modified_in_context = False - -> def get_babel_locale(self) -> str: -> """Get the Babel locale identifier for this bundle (introspection API). - -> This is a debugging/introspection method that returns the actual Babel locale -> identifier being used for NUMBER(), DATETIME(), and CURRENCY() formatting. - -> Useful for troubleshooting locale-related formatting issues, especially when -> verifying which CLDR data is being applied. - -> Returns: -> str: Babel locale identifier (e.g., "en_US", "lv_LV", "ar_EG") - -> Example: -> >>> bundle = FluentBundle("lv") -> >>> bundle.get_babel_locale() -> 'lv' -> >>> bundle_us = FluentBundle("en-US") -> >>> bundle_us.get_babel_locale() -> 'en_US' - -> Note: -> This creates a LocaleContext temporarily to access Babel locale information. -> The return value shows what locale Babel is using for CLDR-based formatting. - -> See Also: -> - bundle.locale: The original locale code passed to FluentBundle -> - LocaleContext.babel_locale: The underlying Babel Locale object -> """ - # create() always returns LocaleContext with en_US fallback for invalid locales -! ctx = LocaleContext.create(self._locale) -! return str(ctx.babel_locale) - -> def add_resource( -> self, source: str, /, *, source_path: str | None = None -> ) -> tuple[Junk, ...]: -> """Add FTL resource to bundle. - -> Parses FTL source and adds messages/terms to registry. -> Thread-safe (uses internal RWLock). - -> Parse operation occurs outside the write lock to minimize reader -> contention. Only registration (dict updates) requires exclusive access. - -> Args: -> source: FTL file content [positional-only] -> source_path: Optional path to source file for better error messages -> (e.g., "locales/lv/ui.ftl"). Used as source identifier -> in warning messages. Defaults to "" if not provided. - -> Returns: -> Tuple of Junk entries encountered during parsing. Empty tuple if -> parsing succeeded without errors. Each Junk entry contains the -> unparseable content and associated annotations. - -> Logging: -> Syntax errors (Junk entries) are logged at WARNING level regardless -> of whether source_path is provided. This ensures syntax errors are -> visible whether loading from files, databases, or in-memory strings. - -> Note: -> Parser continues after errors (robustness principle). Junk entries -> are returned for programmatic error handling. - -> Raises: -> TypeError: If source is not a string (e.g., bytes were passed). -> SyntaxIntegrityError: In strict mode only, if parsing produces any -> Junk entries. Financial applications using strict=True get -> fail-fast behavior on syntax errors. - -> Thread Safety: -> Parser is stateless and thread-safe. Parse operation can occur -> outside write lock without risk. Only registration step requires -> exclusive write access. -> """ - # Type validation at API boundary - type hints are not enforced at runtime. - # Defensive check: users may pass bytes despite str annotation. -> if not isinstance(source, str): -! msg = ( # type: ignore[unreachable] -! f"source must be str, not {type(source).__name__}. " -! "Decode bytes to str (e.g., source.decode('utf-8')) before calling add_resource()." -! ) -! raise TypeError(msg) - - # Parse outside lock (expensive, but safe - parser is stateless, source is immutable) -> resource = self._parser.parse(source) - - # Only hold lock for registration (fast, O(N) where N is entry count) -> with self._rwlock.write(): -> return self._register_resource(resource, source_path) - -> def _register_resource( # noqa: PLR0915 - Two-phase commit requires statement count -> self, resource: Resource, source_path: str | None -> ) -> tuple[Junk, ...]: -> """Register parsed resource entries (messages, terms, junk). - -> Assumes caller holds write lock. Internal method for add_resource. - -> Two-phase commit for strict mode atomicity: -> Phase 1: Collect all entries and validate (no state mutation) -> Phase 2: Apply mutations only if strict mode check passes - -> This ensures that in strict mode, a resource with syntax errors -> does not partially populate the bundle before raising an exception. - -> Args: -> resource: Parsed FTL resource -> source_path: Optional path for logging - -> Returns: -> Tuple of Junk entries from resource -> """ -> from ftllexengine.introspection import extract_references # noqa: PLC0415 - - # Phase 1: Collect entries without mutating bundle state -> pending_messages: dict[str, Message] = {} -> pending_terms: dict[str, Term] = {} -> pending_msg_deps: dict[str, set[str]] = {} -> pending_term_deps: dict[str, set[str]] = {} -> junk_entries: list[Junk] = [] -> overwrite_warnings: list[tuple[str, str]] = [] # (type, id) - -> for entry in resource.entries: -> match entry: -> case Message(): -> msg_id = entry.id.name - # Check for overwrites (log later, after strict check) -> if msg_id in self._messages or msg_id in pending_messages: -! overwrite_warnings.append(("message", msg_id)) -> pending_messages[msg_id] = entry - # Extract dependencies for cross-resource cycle detection -> msg_refs, term_refs = extract_references(entry) -> deps: set[str] = set() -> for ref in msg_refs: -! deps.add(f"msg:{ref}") -> for ref in term_refs: -! deps.add(f"term:{ref}") -> pending_msg_deps[msg_id] = deps -> case Term(): -! term_id = entry.id.name - # Check for overwrites (log later, after strict check) -! if term_id in self._terms or term_id in pending_terms: -! overwrite_warnings.append(("term", term_id)) -! pending_terms[term_id] = entry - # Extract dependencies for cross-resource cycle detection -! msg_refs, term_refs = extract_references(entry) -! deps_term: set[str] = set() -! for ref in msg_refs: -! deps_term.add(f"msg:{ref}") -! for ref in term_refs: -! deps_term.add(f"term:{ref}") -! pending_term_deps[term_id] = deps_term -> case Junk(): -! junk_entries.append(entry) -> case Comment(): - # Comments don't need registration -> logger.debug("Skipping comment entry") - -> junk_tuple = tuple(junk_entries) - - # Strict mode: fail fast on syntax errors BEFORE any state mutation -> if self._strict and junk_tuple: -! source_desc = source_path or "" -! error_summary = "; ".join( -! repr(j.content[:50]) for j in junk_tuple[:3] -! ) -! if len(junk_tuple) > 3: -! error_summary += f" (and {len(junk_tuple) - 3} more)" - -! context = IntegrityContext( -! component="bundle", -! operation="add_resource", -! key=source_desc, -! expected="", -! actual=f"<{len(junk_tuple)} syntax error(s)>", -! timestamp=time.monotonic(), -! ) - -! error_msg = ( -! f"Strict mode: {len(junk_tuple)} syntax error(s) in " -! f"{source_desc}: {error_summary}" -! ) -! raise SyntaxIntegrityError( -! error_msg, -! context=context, -! junk_entries=junk_tuple, -! source_path=source_path, -! ) - - # Phase 2: Apply mutations (only reached if strict check passes or not strict) - # Log overwrite warnings now that we know we'll proceed -> for entry_type, entry_id in overwrite_warnings: -! if entry_type == "message": -! logger.warning( -! "Overwriting existing message '%s' with new definition", -! entry_id, -! ) -! else: -! logger.warning( -! "Overwriting existing term '-%s' with new definition", -! entry_id, -! ) - - # Apply collected entries to bundle state -> self._messages.update(pending_messages) -> self._terms.update(pending_terms) -> self._msg_deps.update(pending_msg_deps) -> self._term_deps.update(pending_term_deps) - - # Log registration of individual entries -> for msg_id in pending_messages: -> logger.debug("Registered message: %s", msg_id) -> for term_id in pending_terms: -! logger.debug("Registered term: %s", term_id) - - # Log junk entries (always WARNING level for syntax errors) -> source_desc = source_path or "" -> for junk in junk_entries: -! logger.warning( -! "Syntax error in %s: %s", -! source_desc, -! repr(junk.content[:_LOG_TRUNCATE_WARNING]), -! ) - - # Log summary with file context -> if source_path: -! logger.info( -! "Added resource %s: %d messages, %d terms, %d junk entries", -! source_path, -! len(self._messages), -! len(self._terms), -! len(junk_entries), -! ) -> else: -> logger.info( -> "Added resource: %d messages, %d terms, %d junk entries", -> len(self._messages), -> len(self._terms), -> len(junk_entries), -> ) - - # Invalidate cache (messages changed) -> if self._cache is not None: -! self._cache.clear() -! logger.debug("Cache cleared after add_resource") - - # Mark bundle as modified for context manager tracking -> self._modified_in_context = True - -> return junk_tuple - -> def validate_resource(self, source: str) -> ValidationResult: -> """Validate FTL resource without adding to bundle. - -> Use this to check FTL files in CI/tooling before adding them. -> Unlike add_resource(), this does not modify the bundle. - -> Performs both syntax validation (errors) and semantic validation (warnings): -> - Errors: Parse failures (Junk entries) -> - Warnings: Duplicate IDs, messages without values, undefined references, -> circular dependencies - -> Args: -> source: FTL file content - -> Returns: -> ValidationResult with parse errors and semantic warnings - -> Raises: -> TypeError: If source is not a string (e.g., bytes were passed). - -> Example: -> >>> bundle = FluentBundle("lv") -> >>> result = bundle.validate_resource(ftl_source) -> >>> if not result.is_valid: -> ... for error in result.errors: -> ... print(f"Error [{error.code}]: {error.message}") -> >>> if result.warning_count > 0: -> ... for warning in result.warnings: -> ... print(f"Warning [{warning.code}]: {warning.message}") - -> See Also: -> ftllexengine.validation.validate_resource: Standalone validation function -> """ - # Type validation at API boundary - type hints are not enforced at runtime. - # Defensive check: users may pass bytes despite str annotation. -! if not isinstance(source, str): -! msg = ( # type: ignore[unreachable] -! f"source must be str, not {type(source).__name__}. " -! "Decode bytes to str (e.g., source.decode('utf-8')) before calling validate_resource()." -! ) -! raise TypeError(msg) - - # Delegate to validation module, reusing bundle's parser for consistency - # Pass existing bundle entries and their dependencies for cross-resource validation -! with self._rwlock.read(): -! return _validate_resource_impl( -! source, -! parser=self._parser, -! known_messages=frozenset(self._messages.keys()), -! known_terms=frozenset(self._terms.keys()), -! known_msg_deps=self._msg_deps, -! known_term_deps=self._term_deps, -! ) - -> def format_pattern( -> self, -> message_id: str, -> /, -> args: Mapping[str, FluentValue] | None = None, -> *, -> attribute: str | None = None, -> ) -> tuple[str, tuple[FrozenFluentError, ...]]: -> """Format message to string with error reporting. - -> Mozilla python-fluent aligned API that returns both the formatted -> string and any errors encountered during resolution. Thread-safe. - -> Args: -> message_id: Message identifier [positional-only] -> args: Variable arguments for interpolation -> attribute: Attribute name (optional, keyword-only) - -> Returns: -> Tuple of (formatted_string, errors) -> - formatted_string: Best-effort formatted output (never empty) -> - errors: Tuple of FrozenFluentError instances encountered during resolution (immutable) - -> Raises: -> FormattingIntegrityError: In strict mode, if ANY error occurs during formatting. -> The exception carries the original errors, fallback value, and message ID. - -> Note: -> In non-strict mode (default), this method handles expected formatting -> errors gracefully. All anticipated errors (missing messages, variables, -> references) are collected and returned in the errors list. The formatted -> string always contains a readable fallback value per Fluent specification. - -> In strict mode (bundle.strict=True), FormattingIntegrityError is raised -> immediately when ANY error occurs. This is required for financial applications -> where silent fallbacks are unacceptable. The exception provides: -> - fluent_errors: The original FrozenFluentError instances -> - fallback_value: What would have been returned in non-strict mode -> - message_id: The message that failed to format - -> If an attribute name is duplicated within a message (validation warning), -> the last definition is used during resolution (last-wins semantics). -> This matches the Fluent specification and Mozilla reference implementation. - -> Examples: -> >>> # Successful formatting -> >>> result, errors = bundle.format_pattern("hello") -> >>> assert result == 'Sveiki, pasaule!' -> >>> assert errors == () - -> >>> # Missing variable - returns fallback and error (non-strict mode) -> >>> bundle.add_resource('msg = Hello { $name }!') -> >>> result, errors = bundle.format_pattern("msg", {}) -> >>> assert result == 'Hello {$name}!' # Readable fallback -> >>> assert len(errors) == 1 -> >>> assert errors[0].category == ErrorCategory.REFERENCE - -> >>> # Attribute access -> >>> result, errors = bundle.format_pattern("button-save", attribute="tooltip") -> >>> assert result == 'Saglabā pašreizējo ierakstu datubāzē' -> >>> assert errors == () - -> >>> # Strict mode - raises on errors -> >>> strict_bundle = FluentBundle("en", strict=True) -> >>> strict_bundle.add_resource('msg = Hello { $name }!') -> >>> strict_bundle.format_pattern("msg", {}) # Raises FormattingIntegrityError -> """ -! with self._rwlock.read(): -! return self._format_pattern_impl(message_id, args, attribute) - -> def _raise_strict_error( -> self, -> message_id: str, -> fallback_value: str, -> errors: tuple[FrozenFluentError, ...], -> ) -> NoReturn: -> """Raise FormattingIntegrityError for strict mode (internal helper). - -> Args: -> message_id: The message ID that failed to format -> fallback_value: The fallback value that would be returned in non-strict mode -> errors: Tuple of FrozenFluentError instances - -> Raises: -> FormattingIntegrityError: Always raised with error details -> """ -! error_summary = "; ".join(str(e) for e in errors[:3]) -! if len(errors) > 3: -! error_summary += f" (and {len(errors) - 3} more)" - -! context = IntegrityContext( -! component="bundle", -! operation="format_pattern", -! key=message_id, -! expected="", -! actual=f"<{len(errors)} error(s)>", -! timestamp=time.monotonic(), -! ) - -! msg = ( -! f"Strict mode: formatting '{message_id}' produced {len(errors)} error(s): " -! f"{error_summary}" -! ) -! raise FormattingIntegrityError( -! msg, -! context=context, -! fluent_errors=errors, -! fallback_value=fallback_value, -! message_id=message_id, -! ) - -> def _format_pattern_impl( -> self, -> message_id: str, -> args: Mapping[str, FluentValue] | None, -> attribute: str | None, -> ) -> tuple[str, tuple[FrozenFluentError, ...]]: -> """Internal implementation of format_pattern (no locking).""" - # Check cache first (if enabled) -! if self._cache is not None: -! cached_entry = self._cache.get( -! message_id, args, attribute, self._locale, self._use_isolating -! ) -! if cached_entry is not None: -! result, errors_tuple = cached_entry.to_tuple() -! if errors_tuple and self._strict: -! self._raise_strict_error(message_id, result, errors_tuple) -! return (result, errors_tuple) - - # Validate message_id is non-empty string -! if not message_id or not isinstance(message_id, str): -! logger.warning("Invalid message ID: empty or non-string") -! diagnostic = Diagnostic( -! code=DiagnosticCode.MESSAGE_NOT_FOUND, -! message="Invalid message ID: empty or non-string", -! ) -! error = FrozenFluentError( -! str(diagnostic), ErrorCategory.REFERENCE, diagnostic=diagnostic -! ) - # Strict mode: raise instead of returning fallback -! if self._strict: -! self._raise_strict_error("", FALLBACK_INVALID, (error,)) - # Don't cache errors -! return (FALLBACK_INVALID, (error,)) - - # Validate args is None or a Mapping (defensive check for callers ignoring type hints) -! if args is not None and not isinstance(args, Mapping): -! logger.warning( # type: ignore[unreachable] -! "Invalid args type: expected Mapping or None, got %s", type(args).__name__ -! ) -! diagnostic = Diagnostic( -! code=DiagnosticCode.INVALID_ARGUMENT, -! message=f"Invalid args type: expected Mapping or None, got {type(args).__name__}", -! ) -! error = FrozenFluentError( -! str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic -! ) - # Strict mode: raise instead of returning fallback -! if self._strict: -! self._raise_strict_error(message_id, FALLBACK_INVALID, (error,)) -! return (FALLBACK_INVALID, (error,)) - - # Validate attribute is None or a string -! if attribute is not None and not isinstance(attribute, str): -! logger.warning( # type: ignore[unreachable] -! "Invalid attribute type: expected str or None, got %s", type(attribute).__name__ -! ) -! diagnostic = Diagnostic( -! code=DiagnosticCode.INVALID_ARGUMENT, -! message=f"Invalid attribute type: expected str or None, got {type(attribute).__name__}", -! ) -! error = FrozenFluentError( -! str(diagnostic), ErrorCategory.RESOLUTION, diagnostic=diagnostic -! ) - # Strict mode: raise instead of returning fallback -! if self._strict: -! self._raise_strict_error(message_id, FALLBACK_INVALID, (error,)) -! return (FALLBACK_INVALID, (error,)) - - # Check if message exists -! if message_id not in self._messages: -! logger.warning("Message '%s' not found", message_id) -! diag = ErrorTemplate.message_not_found(message_id) -! error = FrozenFluentError(str(diag), ErrorCategory.REFERENCE, diagnostic=diag) - # Don't cache missing message errors -! fallback = FALLBACK_MISSING_MESSAGE.format(id=message_id) - # Strict mode: raise instead of returning fallback -! if self._strict: -! self._raise_strict_error(message_id, fallback, (error,)) -! return (fallback, (error,)) - -! message = self._messages[message_id] - - # Create resolver -! resolver = FluentResolver( -! locale=self._locale, -! messages=self._messages, -! terms=self._terms, -! function_registry=self._function_registry, -! use_isolating=self._use_isolating, -! max_nesting_depth=self._max_nesting_depth, -! max_expansion_size=self._max_expansion_size, -! ) - - # Resolve message (resolver handles all errors internally including cycles) - # Note: No try-except here. The resolver is designed to collect all expected - # errors (missing references, type errors, etc.) and return them in the tuple. - # If a raw KeyError/AttributeError/RuntimeError escapes the resolver, that - # indicates a bug in the resolver implementation that should be exposed, - # not swallowed. This follows the principle of failing fast on internal bugs. -! result, errors_tuple = resolver.resolve_message(message, args, attribute) - -! if errors_tuple: -! logger.warning( -! "Message resolution errors for '%s': %d error(s)", message_id, len(errors_tuple) -! ) -! for err in errors_tuple: -! logger.debug(" - %s: %s", type(err).__name__, err) -! else: -! logger.debug("Resolved message '%s': %s", message_id, result[:50]) - - # Cache resolution result (including errors) BEFORE strict mode check. - # This ensures repeated calls for the same erroneous message in strict mode - # hit the cache instead of triggering expensive re-resolution each time. -! if self._cache is not None: -! self._cache.put( -! message_id, args, attribute, self._locale, self._use_isolating, result, errors_tuple -! ) - - # Strict mode: raise after caching so subsequent calls can use cached result -! if errors_tuple and self._strict: -! self._raise_strict_error(message_id, result, errors_tuple) - -! return (result, errors_tuple) - -> def format_value( -> self, message_id: str, args: Mapping[str, FluentValue] | None = None -> ) -> tuple[str, tuple[FrozenFluentError, ...]]: -> """Format message to string (alias for format_pattern without attribute access). - -> This method provides API consistency with FluentLocalization.format_value() -> for users who don't need attribute access. It's an alias for -> format_pattern(message_id, args, attribute=None). - -> Args: -> message_id: Message identifier -> args: Variable arguments for interpolation - -> Returns: -> Tuple of (formatted_string, errors) -> - formatted_string: Best-effort formatted output (never empty) -> - errors: Tuple of FrozenFluentError instances encountered during resolution (immutable) - -> Raises: -> FormattingIntegrityError: In strict mode, if ANY error occurs during formatting - -> Note: -> In non-strict mode, this method never raises exceptions. All errors -> are collected and returned in the errors list. - -> In strict mode (bundle.strict=True), FormattingIntegrityError is raised -> instead of returning fallback values when errors occur. - -> Example: -> >>> bundle.add_resource("welcome = Hello, { $name }!") -> >>> result, errors = bundle.format_value("welcome", {"name": "Alice"}) -> >>> assert result == "Hello, Alice!" -> >>> assert errors == () -> """ -! return self.format_pattern(message_id, args, attribute=None) - -> def has_message(self, message_id: str) -> bool: -> """Check if message exists. - -> Args: -> message_id: Message identifier - -> Returns: -> True if message exists in bundle -> """ -> with self._rwlock.read(): -> return message_id in self._messages - -> def has_attribute(self, message_id: str, attribute: str) -> bool: -> """Check if message has specific attribute. - -> Args: -> message_id: Message identifier -> attribute: Attribute name - -> Returns: -> True if message exists AND has the specified attribute - -> Note: -> This method checks if any attribute with the given name exists. -> If duplicate attribute names exist (validation warning), this returns -> True without indicating which definition will be used. See format_pattern -> for resolution semantics (last-wins for duplicates). - -> Example: -> >>> bundle.add_resource(''' -> ... button = Click -> ... .tooltip = Click to save -> ... ''') -> >>> bundle.has_message("button") -> True -> >>> bundle.has_attribute("button", "tooltip") -> True -> >>> bundle.has_attribute("button", "missing") -> False -> >>> bundle.has_attribute("nonexistent", "tooltip") -> False -> """ -! with self._rwlock.read(): -! if message_id not in self._messages: -! return False -! message = self._messages[message_id] -! return any(attr.id.name == attribute for attr in message.attributes) - -> def get_message_ids(self) -> list[str]: -> """Get all message IDs in bundle. - -> Returns: -> List of message identifiers -> """ -! with self._rwlock.read(): -! return list(self._messages.keys()) - -> def get_message_variables(self, message_id: str) -> frozenset[str]: -> """Get all variables required by a message (introspection API). - -> This is a value-add feature not present in Mozilla's python-fluent. -> Enables FTL file validation in CI/CD pipelines. - -> Args: -> message_id: Message identifier - -> Returns: -> Frozen set of variable names (without $ prefix) - -> Raises: -> KeyError: If message doesn't exist - -> Example: -> >>> bundle.add_resource("greeting = Hello, { $name }!") -> >>> vars = bundle.get_message_variables("greeting") -> >>> assert "name" in vars -> """ -! with self._rwlock.read(): -! if message_id not in self._messages: -! msg = f"Message '{message_id}' not found" -! raise KeyError(msg) - -! return extract_variables(self._messages[message_id]) - -> def get_all_message_variables(self) -> dict[str, frozenset[str]]: -> """Get variables for all messages in bundle (batch introspection API). - -> Convenience method for extracting variables from all messages at once. -> Useful for CI/CD validation pipelines that need to analyze entire -> FTL resources in a single operation. - -> This is equivalent to calling get_message_variables() for each message -> ID, but provides a cleaner API for batch operations. - -> Returns: -> Dictionary mapping message IDs to their required variable sets. -> Empty dict if bundle has no messages. - -> Example: -> >>> bundle.add_resource(''' -> ... greeting = Hello, { $name }! -> ... farewell = Goodbye, { $firstName } { $lastName }! -> ... simple = No variables here -> ... ''') -> >>> all_vars = bundle.get_all_message_variables() -> >>> assert all_vars["greeting"] == frozenset({"name"}) -> >>> assert all_vars["farewell"] == frozenset({"firstName", "lastName"}) -> >>> assert all_vars["simple"] == frozenset() - -> See Also: -> - get_message_variables(): Get variables for single message -> - introspect_message(): Get complete metadata (variables + functions + references) - -> Note: -> Acquires a single read lock for atomic snapshot of all message variables. -> """ -! with self._rwlock.read(): -! return { -! message_id: extract_variables(message) -! for message_id, message in self._messages.items() -! } - -> def introspect_message(self, message_id: str) -> MessageIntrospection: -> """Get complete introspection data for a message. - -> Returns comprehensive metadata about variables, functions, and references -> used in the message. Uses Python 3.13's TypeIs for type-safe results. - -> Args: -> message_id: Message identifier - -> Returns: -> MessageIntrospection with complete metadata - -> Raises: -> KeyError: If message doesn't exist - -> Example: -> >>> bundle.add_resource("price = { NUMBER($amount, minimumFractionDigits: 2) }") -> >>> info = bundle.introspect_message("price") -> >>> assert "amount" in info.get_variable_names() -> >>> assert "NUMBER" in info.get_function_names() -> """ -! with self._rwlock.read(): -! if message_id not in self._messages: -! msg = f"Message '{message_id}' not found" -! raise KeyError(msg) - -! return introspect_message(self._messages[message_id]) - -> def introspect_term(self, term_id: str) -> MessageIntrospection: -> """Get complete introspection data for a term. - -> Returns comprehensive metadata about variables, functions, and references -> used in the term. Mirrors introspect_message() for API symmetry. - -> Args: -> term_id: Term identifier (without leading dash) - -> Returns: -> MessageIntrospection with complete metadata - -> Raises: -> KeyError: If term doesn't exist - -> Example: -> >>> bundle.add_resource("-brand = { $case -> \\n [nominative] Firefox\\n *[other] Firefox\\n}") -> >>> info = bundle.introspect_term("brand") -> >>> assert "case" in info.get_variable_names() -> """ -! with self._rwlock.read(): -! if term_id not in self._terms: -! msg = f"Term '{term_id}' not found" -! raise KeyError(msg) - -! return introspect_message(self._terms[term_id]) - -> def add_function(self, name: str, func: Callable[..., FluentValue]) -> None: -> """Add custom function to bundle. - -> Args: -> name: Function name (UPPERCASE by convention) -> func: Callable function that returns a FluentValue - -> Example: -> >>> def CUSTOM(value): -> ... return value.upper() -> >>> bundle.add_function("CUSTOM", CUSTOM) -> """ -! with self._rwlock.write(): - # Copy-on-write: copy the shared registry on first modification -! if not self._owns_registry: -! self._function_registry = self._function_registry.copy() -! self._owns_registry = True -! logger.debug("Registry copied on first add_function") - -! self._function_registry.register(func, ftl_name=name) -! logger.debug("Added custom function: %s", name) - - # Invalidate cache (functions changed) -! if self._cache is not None: -! self._cache.clear() -! logger.debug("Cache cleared after add_function") - - # Mark bundle as modified for context manager tracking -! self._modified_in_context = True - -> def clear_cache(self) -> None: -> """Clear format cache. - -> Call this when you want to force cache invalidation. -> Automatically called by add_resource() and add_function(). - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True) -> >>> bundle.add_resource("msg = Hello") -> >>> bundle.format_pattern("msg") # Caches result -> >>> bundle.clear_cache() # Manual invalidation -> """ -! with self._rwlock.write(): -! if self._cache is not None: -! self._cache.clear() -! logger.debug("Cache manually cleared") - - # Mark bundle as modified for context manager tracking -! self._modified_in_context = True - -> def get_cache_stats(self) -> dict[str, int | float | bool] | None: -> """Get cache statistics. - -> Returns: -> Dict with cache metrics or None if caching disabled. -> Keys: size (int), maxsize (int), hits (int), misses (int), -> hit_rate (float 0.0-100.0), unhashable_skips (int) - -> Example: -> >>> bundle = FluentBundle("en", enable_cache=True) -> >>> bundle.add_resource("msg = Hello") -> >>> bundle.format_pattern("msg", {}) # Cache miss -> >>> bundle.format_pattern("msg", {}) # Cache hit -> >>> stats = bundle.get_cache_stats() -> >>> stats["hits"] -> 1 -> >>> stats["misses"] -> 1 -> >>> isinstance(stats["hit_rate"], float) -> True -> """ -! if self._cache is not None: -! return self._cache.get_stats() -! return None diff --git a/src/ftllexengine/runtime/bundle_formatting.py b/src/ftllexengine/runtime/bundle_formatting.py new file mode 100644 index 00000000..7be10248 --- /dev/null +++ b/src/ftllexengine/runtime/bundle_formatting.py @@ -0,0 +1,221 @@ +"""Formatting helpers for FluentBundle.""" + +from __future__ import annotations + +import logging +import time +from collections.abc import Mapping +from typing import TYPE_CHECKING, NoReturn + +from ftllexengine.constants import FALLBACK_INVALID, FALLBACK_MISSING_MESSAGE +from ftllexengine.diagnostics import ( + Diagnostic, + DiagnosticCode, + ErrorCategory, + ErrorTemplate, + FrozenFluentError, +) +from ftllexengine.integrity import FormattingIntegrityError, IntegrityContext +from ftllexengine.runtime.resolver import FluentResolver + +if TYPE_CHECKING: + from ftllexengine.core.value_types import FluentValue + from ftllexengine.runtime.bundle_protocols import BundleStateProtocol + +logger = logging.getLogger("ftllexengine.runtime.bundle") + + +class _BundleFormattingMixin: + """Formatting behavior for FluentBundle.""" + + def _invalid_request_result( + self: BundleStateProtocol, + message_id: str, + fallback_value: str, + *, + category: ErrorCategory, + code: DiagnosticCode, + message: str, + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + """Build a one-error failure result for invalid formatting input.""" + diagnostic = Diagnostic(code=code, message=message) + error = FrozenFluentError(str(diagnostic), category, diagnostic=diagnostic) + if self._strict: + self._raise_strict_error(message_id, fallback_value, (error,)) + return (fallback_value, (error,)) + + def _validate_format_request( + self: BundleStateProtocol, + message_id: str, + args: Mapping[str, FluentValue] | None, + attribute: str | None, + ) -> tuple[str, tuple[FrozenFluentError, ...]] | None: + """Validate top-level format_pattern inputs.""" + if not message_id or not isinstance(message_id, str): + logger.warning("Invalid message ID: empty or non-string") + return self._invalid_request_result( + "", + FALLBACK_INVALID, + category=ErrorCategory.REFERENCE, + code=DiagnosticCode.MESSAGE_NOT_FOUND, + message="Invalid message ID: empty or non-string", + ) + + raw_args: object = args + if raw_args is not None and not isinstance(raw_args, Mapping): + arg_type = type(raw_args).__name__ + logger.warning("Invalid args type: expected Mapping or None, got %s", arg_type) + return self._invalid_request_result( + message_id, + FALLBACK_INVALID, + category=ErrorCategory.RESOLUTION, + code=DiagnosticCode.INVALID_ARGUMENT, + message=f"Invalid args type: expected Mapping or None, got {arg_type}", + ) + + raw_attribute: object = attribute + if raw_attribute is not None and not isinstance(raw_attribute, str): + attribute_type = type(raw_attribute).__name__ + logger.warning( + "Invalid attribute type: expected str or None, got %s", + attribute_type, + ) + return self._invalid_request_result( + message_id, + FALLBACK_INVALID, + category=ErrorCategory.RESOLUTION, + code=DiagnosticCode.INVALID_ARGUMENT, + message=( + f"Invalid attribute type: expected str or None, got {attribute_type}" + ), + ) + + return None + + def _lookup_cached_pattern( + self: BundleStateProtocol, + message_id: str, + args: Mapping[str, FluentValue] | None, + attribute: str | None, + ) -> tuple[str, tuple[FrozenFluentError, ...]] | None: + """Return a cached formatting result when available.""" + if self._cache is None: + return None + + cached_entry = self._cache.get( + message_id, + args, + attribute, + self._locale, + use_isolating=self._use_isolating, + ) + if cached_entry is None: + return None + + result, errors_tuple = cached_entry.as_result() + if errors_tuple and self._strict: + self._raise_strict_error(message_id, result, errors_tuple) + return (result, errors_tuple) + + def _raise_strict_error( + self: BundleStateProtocol, + message_id: str, + fallback_value: str, + errors: tuple[FrozenFluentError, ...], + ) -> NoReturn: + """Raise FormattingIntegrityError for strict formatting failures.""" + error_summary = "; ".join(str(error) for error in errors[:3]) + if len(errors) > 3: + error_summary += f" (and {len(errors) - 3} more)" + + context = IntegrityContext( + component="bundle", + operation="format_pattern", + key=message_id, + expected="", + actual=f"<{len(errors)} error(s)>", + timestamp=time.monotonic(), + wall_time_unix=time.time(), + ) + msg = ( + f"Strict mode: formatting '{message_id}' produced {len(errors)} error(s): " + f"{error_summary}" + ) + raise FormattingIntegrityError( + msg, + context=context, + fluent_errors=errors, + fallback_value=fallback_value, + message_id=message_id, + ) + + def _create_resolver(self: BundleStateProtocol) -> FluentResolver: + """Create a resolver bound to the current bundle state.""" + return FluentResolver( + locale=self._locale, + messages=self._messages, + terms=self._terms, + function_registry=self._function_registry, + use_isolating=self._use_isolating, + max_nesting_depth=self._max_nesting_depth, + max_expansion_size=self._max_expansion_size, + ) + + def _format_pattern_impl( + self: BundleStateProtocol, + message_id: str, + args: Mapping[str, FluentValue] | None, + attribute: str | None, + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + """Format a message without acquiring bundle locks.""" + invalid_result = self._validate_format_request(message_id, args, attribute) + if invalid_result is not None: + return invalid_result + + cached_result = self._lookup_cached_pattern(message_id, args, attribute) + if cached_result is not None: + return cached_result + + if message_id not in self._messages: + (logger.warning if self._strict else logger.debug)( + "Message '%s' not found", + message_id, + ) + diag = ErrorTemplate.message_not_found(message_id) + error = FrozenFluentError(str(diag), ErrorCategory.REFERENCE, diagnostic=diag) + fallback = FALLBACK_MISSING_MESSAGE.format(id=message_id) + if self._strict: + self._raise_strict_error(message_id, fallback, (error,)) + return (fallback, (error,)) + + message = self._messages[message_id] + resolver = self._resolver + result, errors_tuple = resolver.resolve_message(message, args, attribute) + + if errors_tuple: + log_fn = logger.warning if self._strict else logger.debug + log_fn( + "Message resolution errors for '%s': %d error(s)", + message_id, + len(errors_tuple), + ) + for error in errors_tuple: + logger.debug(" - %s: %s", type(error).__name__, error) + else: + logger.debug("Resolved message '%s' successfully", message_id) + + if self._cache is not None: + self._cache.put( + message_id, + args, + attribute, + self._locale, + use_isolating=self._use_isolating, + formatted=result, + errors=errors_tuple, + ) + + if errors_tuple and self._strict: + self._raise_strict_error(message_id, result, errors_tuple) + + return (result, errors_tuple) diff --git a/src/ftllexengine/runtime/bundle_protocols.py b/src/ftllexengine/runtime/bundle_protocols.py new file mode 100644 index 00000000..e3d9e163 --- /dev/null +++ b/src/ftllexengine/runtime/bundle_protocols.py @@ -0,0 +1,75 @@ +"""Type-checking protocols for FluentBundle mixins.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, NoReturn, Protocol + +if TYPE_CHECKING: + from collections.abc import Mapping + + from ftllexengine.core.semantic_types import LocaleCode + from ftllexengine.core.value_types import FluentValue + from ftllexengine.diagnostics import ErrorCategory, FrozenFluentError + from ftllexengine.diagnostics.codes import DiagnosticCode + from ftllexengine.runtime.bundle_registration import _PendingRegistration + from ftllexengine.runtime.cache import IntegrityCache + from ftllexengine.runtime.function_bridge import FunctionRegistry + from ftllexengine.runtime.resolver import FluentResolver + from ftllexengine.runtime.rwlock import RWLock + from ftllexengine.syntax import Message, Resource, Term + + +class BundleStateProtocol(Protocol): + """Structural contract implemented by FluentBundle for its mixins.""" + + _cache: IntegrityCache | None + _function_registry: FunctionRegistry + _locale: LocaleCode + _max_expansion_size: int + _max_nesting_depth: int + _messages: dict[str, Message] + _msg_deps: dict[str, frozenset[str]] + _resolver: FluentResolver + _rwlock: RWLock + _strict: bool + _term_deps: dict[str, frozenset[str]] + _terms: dict[str, Term] + _use_isolating: bool + + def _collect_pending_entries(self, resource: Resource) -> _PendingRegistration: + ... # pragma: no cover - typing-only protocol declaration + + def _raise_strict_error( + self, + message_id: str, + fallback_value: str, + errors: tuple[FrozenFluentError, ...], + ) -> NoReturn: + ... # pragma: no cover - typing-only protocol declaration + + def _invalid_request_result( + self, + message_id: str, + fallback_value: str, + *, + category: ErrorCategory, + code: DiagnosticCode, + message: str, + ) -> tuple[str, tuple[FrozenFluentError, ...]]: + ... # pragma: no cover - typing-only protocol declaration + + def _validate_format_request( + self, + message_id: str, + args: Mapping[str, FluentValue] | None, + attribute: str | None, + ) -> tuple[str, tuple[FrozenFluentError, ...]] | None: + ... # pragma: no cover - typing-only protocol declaration + + def _lookup_cached_pattern( + self, + message_id: str, + args: Mapping[str, FluentValue] | None, + attribute: str | None, + ) -> tuple[str, tuple[FrozenFluentError, ...]] | None: + ... # pragma: no cover - typing-only protocol declaration diff --git a/src/ftllexengine/runtime/bundle_queries.py b/src/ftllexengine/runtime/bundle_queries.py new file mode 100644 index 00000000..5f94000b --- /dev/null +++ b/src/ftllexengine/runtime/bundle_queries.py @@ -0,0 +1,88 @@ +"""Query and introspection helpers for FluentBundle.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +from ftllexengine.introspection import extract_variables, introspect_message + +if TYPE_CHECKING: + from ftllexengine.introspection import MessageIntrospection + from ftllexengine.runtime.bundle_protocols import BundleStateProtocol + from ftllexengine.syntax import Message, Term + + +class _BundleQueryMixin: + """Read-only query behavior for FluentBundle.""" + + def has_message(self: BundleStateProtocol, message_id: str) -> bool: + """Return whether the bundle contains ``message_id``.""" + with self._rwlock.read(): + return message_id in self._messages + + def has_attribute( + self: BundleStateProtocol, message_id: str, attribute: str + ) -> bool: + """Return whether ``message_id`` exposes ``attribute``.""" + with self._rwlock.read(): + message = self._messages.get(message_id) + if message is None: + return False + return any(attr.id.name == attribute for attr in message.attributes) + + def get_message_ids(self: BundleStateProtocol) -> list[str]: + """Return message IDs in insertion order.""" + with self._rwlock.read(): + return list(self._messages.keys()) + + def get_message_variables( + self: BundleStateProtocol, message_id: str + ) -> frozenset[str]: + """Return the variables referenced by one message.""" + with self._rwlock.read(): + if message_id not in self._messages: + msg = f"Message '{message_id}' not found" + raise KeyError(msg) + return frozenset(extract_variables(self._messages[message_id])) + + def get_all_message_variables( + self: BundleStateProtocol, + ) -> dict[str, frozenset[str]]: + """Return variables for every registered message.""" + with self._rwlock.read(): + return { + message_id: frozenset(extract_variables(message)) + for message_id, message in self._messages.items() + } + + def introspect_message( + self: BundleStateProtocol, message_id: str + ) -> MessageIntrospection: + """Return structured introspection for ``message_id``.""" + with self._rwlock.read(): + if message_id not in self._messages: + msg = f"Message '{message_id}' not found" + raise KeyError(msg) + return introspect_message(self._messages[message_id]) + + def introspect_term( + self: BundleStateProtocol, term_id: str + ) -> MessageIntrospection: + """Return structured introspection for ``term_id``.""" + with self._rwlock.read(): + if term_id not in self._terms: + msg = f"Term '{term_id}' not found" + raise KeyError(msg) + return introspect_message(self._terms[term_id]) + + def get_message( + self: BundleStateProtocol, message_id: str + ) -> Message | None: + """Return the raw message AST node when present.""" + with self._rwlock.read(): + return self._messages.get(message_id) + + def get_term(self: BundleStateProtocol, term_id: str) -> Term | None: + """Return the raw term AST node when present.""" + with self._rwlock.read(): + return self._terms.get(term_id) diff --git a/src/ftllexengine/runtime/bundle_registration.py b/src/ftllexengine/runtime/bundle_registration.py new file mode 100644 index 00000000..315f9782 --- /dev/null +++ b/src/ftllexengine/runtime/bundle_registration.py @@ -0,0 +1,150 @@ +"""Registration helpers for FluentBundle resource ingestion.""" + +from __future__ import annotations + +import logging +import time +from dataclasses import dataclass, field +from typing import TYPE_CHECKING, Literal, assert_never + +from ftllexengine.core.reference_graph import entry_dependency_set +from ftllexengine.integrity import IntegrityContext, SyntaxIntegrityError +from ftllexengine.introspection import extract_references +from ftllexengine.syntax import Comment, Junk, Message, Resource, Term + +if TYPE_CHECKING: + from ftllexengine.runtime.bundle_protocols import BundleStateProtocol + +logger = logging.getLogger("ftllexengine.runtime.bundle") + +_LOG_TRUNCATE_WARNING: int = 100 + + +@dataclass(slots=True) +class _PendingRegistration: + """Collected resource entries prior to mutating bundle state.""" + + messages: dict[str, Message] = field(default_factory=dict) + terms: dict[str, Term] = field(default_factory=dict) + msg_deps: dict[str, frozenset[str]] = field(default_factory=dict) + term_deps: dict[str, frozenset[str]] = field(default_factory=dict) + junk: list[Junk] = field(default_factory=list) + overwrite_warnings: list[tuple[Literal["message", "term"], str]] = field(default_factory=list) + + +class _BundleRegistrationMixin: + """Resource registration behavior for FluentBundle.""" + + def _collect_pending_entries( + self: BundleStateProtocol, resource: Resource + ) -> _PendingRegistration: + """Collect parsed entries without mutating bundle state.""" + pending = _PendingRegistration() + + for entry in resource.entries: + match entry: + case Message(): + msg_id = entry.id.name + if msg_id in self._messages or msg_id in pending.messages: + pending.overwrite_warnings.append(("message", msg_id)) + pending.messages[msg_id] = entry + pending.msg_deps[msg_id] = entry_dependency_set(*extract_references(entry)) + case Term(): + term_id = entry.id.name + if term_id in self._terms or term_id in pending.terms: + pending.overwrite_warnings.append(("term", term_id)) + pending.terms[term_id] = entry + pending.term_deps[term_id] = entry_dependency_set(*extract_references(entry)) + case Junk(): + pending.junk.append(entry) + case Comment(): + pass + case _ as unreachable: # pragma: no cover + assert_never(unreachable) + + return pending + + def _register_resource( + self: BundleStateProtocol, resource: Resource, source_path: str | None + ) -> tuple[Junk, ...]: + """Register parsed resource entries via a two-phase commit.""" + pending = self._collect_pending_entries(resource) + junk_tuple = tuple(pending.junk) + + if self._strict and junk_tuple: + source_desc = source_path or "" + error_summary = "; ".join(repr(junk.content[:50]) for junk in junk_tuple[:3]) + if len(junk_tuple) > 3: + error_summary += f" (and {len(junk_tuple) - 3} more)" + + context = IntegrityContext( + component="bundle", + operation="add_resource", + key=source_desc, + expected="", + actual=f"<{len(junk_tuple)} syntax error(s)>", + timestamp=time.monotonic(), + wall_time_unix=time.time(), + ) + msg = ( + f"Strict mode: {len(junk_tuple)} syntax error(s) in " + f"{source_desc}: {error_summary}" + ) + raise SyntaxIntegrityError( + msg, + context=context, + junk_entries=junk_tuple, + source_path=source_path, + ) + + for entry_type, entry_id in pending.overwrite_warnings: + if entry_type == "message": + logger.warning( + "Overwriting existing message '%s' with new definition", + entry_id, + ) + else: + logger.warning( + "Overwriting existing term '-%s' with new definition", + entry_id, + ) + + self._messages.update(pending.messages) + self._terms.update(pending.terms) + self._msg_deps.update(pending.msg_deps) + self._term_deps.update(pending.term_deps) + + for msg_id in pending.messages: + logger.debug("Registered message: %s", msg_id) + for term_id in pending.terms: + logger.debug("Registered term: %s", term_id) + + source_desc = source_path or "" + for junk in pending.junk: + logger.warning( + "Syntax error in %s: %s", + source_desc, + repr(junk.content[:_LOG_TRUNCATE_WARNING]), + ) + + if source_path: + logger.info( + "Added resource %s: %d messages, %d terms, %d junk entries", + source_path, + len(self._messages), + len(self._terms), + len(pending.junk), + ) + else: + logger.info( + "Added resource: %d messages, %d terms, %d junk entries", + len(self._messages), + len(self._terms), + len(pending.junk), + ) + + if self._cache is not None: + self._cache.clear() + logger.debug("Cache cleared after add_resource") + + return junk_tuple diff --git a/src/ftllexengine/runtime/cache.py b/src/ftllexengine/runtime/cache.py index 9f21ca51..3d018be0 100644 --- a/src/ftllexengine/runtime/cache.py +++ b/src/ftllexengine/runtime/cache.py @@ -32,24 +32,39 @@ import hashlib import hmac -import struct import time from collections import OrderedDict, deque -from collections.abc import Mapping, Sequence -from dataclasses import dataclass, field -from datetime import date, datetime -from decimal import Decimal from threading import Lock -from typing import TypedDict, final +from typing import TYPE_CHECKING, final from ftllexengine.constants import DEFAULT_CACHE_SIZE, DEFAULT_MAX_ENTRY_WEIGHT, MAX_DEPTH -from ftllexengine.core.value_types import FluentNumber, FluentValue -from ftllexengine.diagnostics import FrozenFluentError from ftllexengine.integrity import ( CacheCorruptionError, IntegrityContext, WriteConflictError, ) +from ftllexengine.runtime.cache_keys import ( + HASHABLE_NODE_BUDGET, + compute_key_hash, + make_hashable, + make_key, +) +from ftllexengine.runtime.cache_types import ( + _DEFAULT_MAX_ERRORS_PER_ENTRY, + CacheAuditLogEntry, + CacheStats, + HashableValue, + IntegrityCacheEntry, + WriteLogEntry, + _CacheKey, + _estimate_error_weight, +) + +if TYPE_CHECKING: + from collections.abc import Mapping + + from ftllexengine.core.value_types import FluentValue + from ftllexengine.diagnostics import FrozenFluentError __all__ = [ "CacheAuditLogEntry", @@ -60,408 +75,6 @@ "WriteLogEntry", ] -class CacheStats(TypedDict): - """Typed statistics snapshot returned by IntegrityCache.get_stats(). - - All fields are point-in-time readings taken under the cache lock. - Use get_stats() (not individual properties) for a consistent snapshot. - - Attributes: - size: Current number of cached entries. - maxsize: Maximum cache capacity. - max_entry_weight: Maximum memory weight for a single cached result. - max_errors_per_entry: Maximum errors stored per cache entry. - hits: Total cache hits since creation (not reset on clear()). - misses: True cache misses since creation: key was hashable, looked up, - but not found (or found corrupted in non-strict mode). Unhashable - bypasses are excluded; those increment unhashable_skips only. Not - reset on clear(). - hit_rate: Hit rate as a percentage (0.0-100.0), rounded to 2 decimal - places. Computed over hashable-key interactions only: - hits / (hits + misses). Unhashable bypasses do not affect this - metric, so the rate reflects true cache efficiency. - unhashable_skips: Puts skipped because the args could not be hashed. - oversize_skips: Puts skipped because the formatted string alone exceeded - max_entry_weight (before errors are considered). - error_bloat_skips: Puts skipped because the number of errors exceeded - max_errors_per_entry. - combined_weight_skips: Puts skipped because len(formatted) + total error - weight exceeded max_entry_weight (formatted alone was within limit but - combined content was not). Distinct from oversize_skips and error_bloat_skips - to enable accurate diagnosis: high combined_weight_skips points to the - combination of message length and error payload, not one alone. - corruption_detected: Number of BLAKE2b checksum mismatches detected. - idempotent_writes: Concurrent puts of identical content (benign races). - write_once_conflicts: True write-once violations: different content attempted - for an existing key under write_once=True. In strict mode these raise - WriteConflictError; in non-strict mode they are silently rejected. This - counter increments for both modes, enabling detection of data races without - requiring the audit log. - sequence: Monotonically increasing total-put counter (audit trail). - write_once: Whether write-once mode is enabled. - strict: Whether strict (fail-fast) mode is enabled. - audit_enabled: Whether the audit log is active. - audit_entries: Current number of entries in the audit log. - """ - - size: int - maxsize: int - max_entry_weight: int - max_errors_per_entry: int - hits: int - misses: int - hit_rate: float - unhashable_skips: int - oversize_skips: int - error_bloat_skips: int - corruption_detected: int - idempotent_writes: int - write_once_conflicts: int - combined_weight_skips: int - sequence: int - write_once: bool - strict: bool - audit_enabled: bool - audit_entries: int - - -# Base overhead per FrozenFluentError object (dataclass, slots, references). -# Dynamic weight calculation adds actual string lengths on top of this. -_ERROR_BASE_OVERHEAD: int = 100 - -# Maximum number of errors allowed per cache entry. -# Prevents memory exhaustion from pathological cases where resolution produces -# many errors (e.g., cyclic references, deeply nested validation failures). -_DEFAULT_MAX_ERRORS_PER_ENTRY: int = 50 - - -def _estimate_error_weight(error: FrozenFluentError) -> int: - """Estimate memory weight of a FrozenFluentError. - - Computes actual weight based on error content rather than using a static - estimate. This provides accurate memory budget enforcement for financial - applications where complex errors with detailed diagnostics may exceed - simple estimates. - - Args: - error: FrozenFluentError to estimate - - Returns: - Estimated byte weight of the error - """ - weight = _ERROR_BASE_OVERHEAD + len(error.message) - - if error.diagnostic is not None: - diag = error.diagnostic - weight += len(diag.message) - # Optional string fields - for attr in ( - diag.hint, - diag.help_url, - diag.function_name, - diag.argument_name, - diag.expected_type, - diag.received_type, - diag.ftl_location, - ): - if attr is not None: - weight += len(attr) - # Resolution path - if diag.resolution_path is not None: - for path_element in diag.resolution_path: - weight += len(path_element) - - if error.context is not None: - ctx = error.context - weight += len(ctx.input_value) - weight += len(ctx.locale_code) - weight += len(ctx.parse_type) - weight += len(ctx.fallback_value) - - return weight - -# Type alias for hashable values produced by _make_hashable(). -# Recursive definition: primitives plus tuple/frozenset of self. -# -# Type-Tagging: _make_hashable never returns primitive types (int, bool, Decimal, -# datetime, date, FluentNumber) directly. Every non-string, non-None value is -# converted to a type-tagged tuple: e.g., 1 -> ("__int__", 1), True -> ("__bool__", -# True), Decimal("1.5") -> ("__decimal__", "1.5"). These primitives appear in the -# union because the tagged tuples contain them as second/subsequent elements, and -# HashableValue is recursive — tuple["HashableValue", ...] must accept int, bool, etc. -# as inner elements. str and None are the only types returned directly (as-is). -# -# Collision Prevention Rationale: -# Python's hash equality means hash(1) == hash(True), causing cache collisions -# when these values produce different formatted outputs. -# To prevent this, _make_hashable() returns type-tagged tuples for bool/int: -# - True -> ("__bool__", True) -# - 1 -> ("__int__", 1) -# - Decimal("1") -> ("__decimal__", "1") -# These are distinct cache keys despite Python's hash equality. -type HashableValue = ( - str - | int - | bool - | Decimal - | datetime - | date - | FluentNumber - | None - | tuple["HashableValue", ...] - | frozenset["HashableValue"] -) - -# Internal type alias for cache keys (prefixed with _ per naming convention) -# 5-tuple: (message_id, args_tuple, attribute, locale_code, use_isolating) -type _CacheKey = tuple[str, tuple[tuple[str, HashableValue], ...], str | None, str, bool] - -# Internal type alias for cache entry values returned by IntegrityCacheEntry.as_result() -type _CacheValue = tuple[str, tuple[FrozenFluentError, ...]] - - -@dataclass(frozen=True, slots=True) -class IntegrityCacheEntry: - """Immutable cache entry with integrity metadata. - - Each entry contains the formatted result, any errors, and two BLAKE2b-128 - hashes: a content-only hash and a full checksum covering content + metadata. - Both enable detection of memory corruption, hardware faults, or tampering. - - Attributes: - formatted: Formatted message string - errors: Tuple of FrozenFluentError instances (immutable) - checksum: BLAKE2b-128 hash of (formatted, errors, created_at, sequence, key_hash) - created_at: Monotonic timestamp when entry was created (time.monotonic()) - sequence: Monotonically increasing sequence number for audit trail - key_hash: BLAKE2b-8 hash of the cache key computed at put() time. Included - in the checksum to make the entry tamper-evident: the key_hash field cannot - be altered without invalidating the checksum. IntegrityCache.get() verifies - entry.key_hash matches the lookup key's hash (key confusion detection). - content_hash: BLAKE2b-128 hash of (formatted, errors) only. Computed once - at construction via __post_init__; not part of the constructor signature. - Used for idempotent write detection without recomputation. Intentionally - key-agnostic: same content under any key has the same content_hash, which - is correct for the thundering-herd idempotency check in write_once mode. - """ - - formatted: str - errors: tuple[FrozenFluentError, ...] - checksum: bytes - created_at: float - sequence: int - key_hash: bytes - # Computed once from (formatted, errors) at construction; not an __init__ parameter. - # Stored to avoid BLAKE2b recomputation on every put() idempotency check. - # Uses object.__setattr__ because frozen=True prevents normal assignment in __post_init__. - content_hash: bytes = field(init=False, repr=False, compare=False, hash=False) - - def __post_init__(self) -> None: - """Compute and store content_hash after field initialization.""" - object.__setattr__( - self, "content_hash", self._compute_content_hash(self.formatted, self.errors) - ) - - @classmethod - def create( - cls, - formatted: str, - errors: tuple[FrozenFluentError, ...], - sequence: int, - key_hash: bytes, - ) -> IntegrityCacheEntry: - """Create entry with computed checksum. - - Factory method that computes the BLAKE2b-128 checksum from the content - and creates an immutable entry with the current monotonic timestamp. - - Args: - formatted: Formatted message string - errors: Tuple of FrozenFluentError instances - sequence: Sequence number for audit trail - key_hash: BLAKE2b-8 hash of the cache key (from IntegrityCache._compute_key_hash). - Binds the entry to its storage position for key confusion detection. - - Returns: - New IntegrityCacheEntry with computed checksum and content_hash - """ - # Capture timestamp BEFORE computing checksum to ensure consistency - created_at = time.monotonic() - checksum = cls._compute_checksum(formatted, errors, created_at, sequence, key_hash) - return cls( - formatted=formatted, - errors=errors, - checksum=checksum, - created_at=created_at, - sequence=sequence, - key_hash=key_hash, - ) - - @staticmethod - def _feed_errors(h: hashlib.blake2b, errors: tuple[FrozenFluentError, ...]) -> None: - """Feed error sequence into hasher via content_hash. - - Shared by both _compute_checksum and _compute_content_hash to eliminate - duplicated hashing logic. FrozenFluentError is @final and always carries - a content_hash (bytes), so direct attribute access is safe and correct. - The b"\\x01" type marker provides structural disambiguation between the - count field and each hash entry. - - Args: - h: Active BLAKE2b hasher to update in-place - errors: Tuple of errors to include in hash - """ - h.update(len(errors).to_bytes(4, "big")) - for error in errors: - # FrozenFluentError is @final; content_hash is always a bytes field. - # Accessing it directly enforces the type contract and eliminates dead code. - h.update(b"\x01") # Type marker: content hash follows - h.update(error.content_hash) - - @staticmethod - def _compute_checksum( - formatted: str, - errors: tuple[FrozenFluentError, ...], - created_at: float, - sequence: int, - key_hash: bytes, - ) -> bytes: - """Compute BLAKE2b-128 hash of cache entry (content + metadata + key binding). - - Uses BLAKE2b with 128-bit (16 byte) digest for fast cryptographic - hashing. This provides collision resistance sufficient for integrity - verification while minimizing memory overhead. - - Hash Composition: - All variable-length fields are length-prefixed to prevent collision - between semantically different values. The checksum covers ALL entry - fields for complete audit trail integrity: - 1. formatted: Message output (length-prefixed UTF-8) - 2. errors: Count + each error as (b"\\x01" + content_hash) using - FrozenFluentError.content_hash (BLAKE2b-128, always present) - 3. created_at: Monotonic timestamp (8-byte IEEE 754 double) - 4. sequence: Entry sequence number (8-byte unsigned big-endian) - 5. key_hash: Cache key binding (8 bytes, BLAKE2b-8 of storage key). - Including key_hash makes it tamper-evident: moving this entry to a - different cache slot and altering key_hash would break the checksum. - - Args: - formatted: Formatted message string - errors: Tuple of errors to include in hash - created_at: Monotonic timestamp when entry was created - sequence: Sequence number for audit trail - key_hash: BLAKE2b-8 hash of cache key (8 bytes, fixed length) - - Returns: - 16-byte BLAKE2b digest - """ - h = hashlib.blake2b(digest_size=16) - # Length-prefix formatted string for collision resistance - encoded = formatted.encode("utf-8", errors="surrogatepass") - h.update(len(encoded).to_bytes(4, "big")) - h.update(encoded) - IntegrityCacheEntry._feed_errors(h, errors) - # Include metadata fields for complete audit trail integrity - h.update(struct.pack(">d", created_at)) # 8-byte big-endian IEEE 754 double - h.update(sequence.to_bytes(8, "big")) # 8-byte unsigned int; sequence is always >= 0 - h.update(key_hash) # 8 bytes, fixed length; no length prefix needed - return h.digest() - - def verify(self) -> bool: - """Verify entry integrity recursively. - - Recomputes both the content hash and the full checksum from current - content, then compares against stored values using constant-time - comparison (defense against timing attacks). Also recursively verifies - each contained error's integrity for defense-in-depth. - - Returns: - True if content_hash matches AND checksum matches AND all errors verify - """ - # Verify stored content_hash matches recomputed (catches field-level corruption) - expected_content = self._compute_content_hash(self.formatted, self.errors) - if not hmac.compare_digest(self.content_hash, expected_content): - return False - # Verify full checksum (includes metadata and key binding) - expected = self._compute_checksum( - self.formatted, self.errors, self.created_at, self.sequence, self.key_hash - ) - if not hmac.compare_digest(self.checksum, expected): - return False - # Recursively verify each error's integrity (defense-in-depth). - # FrozenFluentError is @final, so verify_integrity() is always present. - # Direct call eliminates the duck-typing overhead and clarifies intent. - return all(error.verify_integrity() for error in self.errors) - - def as_result(self) -> _CacheValue: - """Extract formatted result and errors as a tuple. - - Returns: - (formatted, errors) pair for resolver consumption. - """ - return (self.formatted, self.errors) - - @staticmethod - def _compute_content_hash( - formatted: str, - errors: tuple[FrozenFluentError, ...], - ) -> bytes: - """Compute BLAKE2b-128 hash of content only (excludes metadata). - - Used for idempotent write detection: two entries with identical content - should have identical content hashes regardless of created_at/sequence. - - Hash Composition: - 1. formatted: Message output (length-prefixed UTF-8) - 2. errors: Count + each error as (b"\\x01" + content_hash) using - FrozenFluentError.content_hash (BLAKE2b-128, always present) - - Args: - formatted: Formatted message string - errors: Tuple of errors to include in hash - - Returns: - 16-byte BLAKE2b digest of content only - """ - h = hashlib.blake2b(digest_size=16) - # Length-prefix formatted string for collision resistance - encoded = formatted.encode("utf-8", errors="surrogatepass") - h.update(len(encoded).to_bytes(4, "big")) - h.update(encoded) - IntegrityCacheEntry._feed_errors(h, errors) - return h.digest() - - -@dataclass(frozen=True, slots=True) -class WriteLogEntry: - """Immutable audit log entry for cache operations. - - Records cache operations for post-mortem analysis and debugging. - Used when audit logging is enabled on IntegrityCache. - - Attributes: - operation: Operation type (GET, PUT, HIT, MISS, EVICT, CORRUPTION) - key_hash: Hash of cache key (privacy-preserving) - timestamp: Monotonic timestamp of operation (time.monotonic()). - Use for ordering within a single process. - sequence: Cache entry sequence number (for PUT operations) - checksum_hex: Hex representation of entry checksum (for tracing) - wall_time_unix: Unix wall-clock timestamp of operation (time.time()). - Use for cross-system incident correlation and persisting audit - trails as standalone evidence outside the originating process. - """ - - operation: str - key_hash: str - timestamp: float - sequence: int - checksum_hex: str - wall_time_unix: float - - -# Public alias for cache audit-log entries returned by runtime/localization facades. -CacheAuditLogEntry = WriteLogEntry - @final class IntegrityCache: @@ -492,12 +105,20 @@ class IntegrityCache: - Audit log provides complete operation history Example: - >>> cache = IntegrityCache(maxsize=1000, strict=True) - >>> cache.put("msg", None, None, "en_US", use_isolating=False, formatted="Hello", errors=()) - >>> entry = cache.get("msg", None, None, "en_US", use_isolating=False) - >>> assert entry is not None - >>> assert entry.verify() # Integrity check - >>> result, errors = entry.as_result() + >>> cache = IntegrityCache(maxsize=1000, strict=True) # doctest: +SKIP + >>> cache.put( # doctest: +SKIP + ... "msg", + ... None, + ... None, + ... "en_US", + ... use_isolating=False, + ... formatted="Hello", + ... errors=(), + ... ) + >>> entry = cache.get("msg", None, None, "en_US", use_isolating=False) # doctest: +SKIP + >>> assert entry is not None # doctest: +SKIP + >>> assert entry.verify() # Integrity check # doctest: +SKIP + >>> result, errors = entry.as_result() # doctest: +SKIP """ __slots__ = ( @@ -912,208 +533,18 @@ def _audit( # deque with maxlen provides automatic O(1) eviction of oldest entries self._audit_log.append(log_entry) - # Maximum nodes traversed during _make_hashable to prevent exponential - # expansion of DAG structures with shared references. A 25-level binary - # DAG has only 25 nodes but expands to 2^25 during tree flattening. - # 10,000 nodes is generous for legitimate use while blocking abuse. - _MAX_HASHABLE_NODES: int = 10_000 + # Bound recursive cache-key normalization to prevent DAG expansion abuse. + _MAX_HASHABLE_NODES: int = HASHABLE_NODE_BUDGET @staticmethod - def _make_hashable( - value: object, depth: int = MAX_DEPTH - ) -> HashableValue: - """Convert potentially unhashable value to hashable equivalent. - - Converts: - - list -> ("__list__", tuple) - type-tagged for collision prevention - - tuple -> ("__tuple__", tuple) - type-tagged for collision prevention - - dict -> tuple of sorted key-value tuples (recursively) - - set -> frozenset (recursively) - - Decimal -> ("__decimal__", str) - str preserves scale for CLDR rules - - datetime -> ("__datetime__", isoformat, tzinfo_str) - includes timezone - - date -> ("__date__", isoformat) - no timezone - - FluentNumber -> type-tagged with underlying type info - - Mapping ABC -> tuple of sorted key-value tuples (for ChainMap, etc.) - - Sequence ABC -> ("__seq__", tuple) - for UserList, etc. - - Known primitive types -> type-tagged tuples - - Type-Tagging Rationale: - Python's hash equality creates collision risk: - - hash(1) == hash(True) - - Decimal("1.0") == Decimal("1") but produce different plural forms - - datetime objects at same UTC instant with different tzinfo are equal - but format to different local time strings - - list vs tuple: str([1,2]) != str((1,2)) but would hash same - Type-tagging creates distinct cache keys for semantically different values. - - Depth Protection: - Uses explicit depth tracking consistent with codebase pattern - (parser, resolver, serializer all use MAX_DEPTH=100). Raises - TypeError when depth is exhausted, which is caught by _make_key - and results in graceful cache bypass. - - Node Budget Protection: - An integer counter in the enclosing scope, mutated by ``_go`` via - ``nonlocal``, tracks total nodes visited across all recursive calls. - This prevents exponential expansion of DAG structures where shared - references are traversed independently (e.g., l=[l,l] repeated 25 - times creates 2^25 tree traversal despite only 25 depth levels). - The counter is fully encapsulated inside the method body and is not - part of the public signature. - - Args: - value: Value to convert (typically FluentValue or nested collection) - depth: Remaining recursion depth (default: MAX_DEPTH) - - Returns: - Hashable equivalent of the value - - Raises: - TypeError: If depth limit exceeded, node budget exceeded, or unknown type - """ - # Node budget counter shared across all recursive calls via closure. - # nonlocal allows _go to mutate _node_count in the enclosing _make_hashable scope. - _node_count: int = 0 - - def _go(v: object, d: int) -> HashableValue: - nonlocal _node_count - _node_count += 1 - if _node_count > IntegrityCache._MAX_HASHABLE_NODES: - msg = ( - "Node budget exceeded in cache key conversion " - "(possible DAG expansion attack)" - ) - raise TypeError(msg) - if d <= 0: - msg = "Maximum nesting depth exceeded in cache key conversion" - raise TypeError(msg) - - def _recurse(x: object) -> HashableValue: - return _go(x, d - 1) - - match v: - # str and None: return as-is. Must check str before Sequence (str is Sequence). - case str() | None: - return v - # Type-tag list and tuple distinctly: str([1,2])="[1, 2]" vs str((1,2))="(1, 2)" - case list(): - return ( - "__list__", - tuple(_recurse(i) for i in v), - ) - case tuple(): - return ( - "__tuple__", - tuple(_recurse(i) for i in v), - ) - case dict(): - # Type-tag dict to distinguish from Mapping ABC (e.g., ChainMap). - # str(dict({"a": 1})) = "{'a': 1}" vs str(ChainMap({"a": 1})) differs. - # Both must produce distinct cache keys since formatting differs. - return ( - "__dict__", - tuple( - sorted( - (k, _recurse(val)) for k, val in v.items() - ) - ), - ) - case set(): - # Convert mutable set to immutable frozenset for hashability. - # Tag distinguishes from frozenset since str(set) != str(frozenset). - return ( - "__set__", - frozenset(_recurse(i) for i in v), - ) - case frozenset(): - # Explicit frozenset case - already hashable but tag for type distinction. - # str(frozenset({1})) = "frozenset({1})" vs str({1}) = "{1}" - return ( - "__frozenset__", - frozenset(_recurse(i) for i in v), - ) - # Type-tagging for collision prevention: bool MUST be checked before int - # because bool is a subclass of int in Python. Without separate cases, - # True and 1 would hash-collide despite producing different formatted output. - case bool(): - return ("__bool__", v) - case int(): - return ("__int__", v) - # Decimal: use str() to preserve scale (Decimal("1.0") vs Decimal("1")) - # CLDR plural rules use visible fraction digits (v operand) which differs - case Decimal(): - # NaN normalization: Decimal("NaN").is_nan() for IEEE 754 compliance. - # Same rationale as float NaN - prevents cache pollution. - if v.is_nan(): - return ("__decimal__", "__NaN__") - return ("__decimal__", str(v)) - case datetime(): - # Include timezone info to distinguish same-instant different-offset datetimes. - # Two datetimes representing the same UTC instant but with different tzinfo - # compare equal, but they format to different local time strings. - tz_key = str(v.tzinfo) if v.tzinfo else "__naive__" - return ("__datetime__", v.isoformat(), tz_key) - case date(): - # date has no timezone, isoformat is sufficient for unique key - return ("__date__", v.isoformat()) - # FluentNumber: type-tag with underlying value type for financial precision - # Recursively normalize inner value to handle Decimal NaN correctly. - # Without this, FluentNumber(value=Decimal('NaN')...) creates unretrievable keys. - case FluentNumber(): - return ( - "__fluentnumber__", - type(v.value).__name__, - _recurse(v.value), - v.formatted, - v.precision, - ) - case _: - # Handle Mapping and Sequence ABCs for types like ChainMap, UserList. - # This fallback catches any Mapping/Sequence not matched above. - # Must be after specific type checks (dict, list, tuple, str). - if isinstance(v, Mapping): - # Type-tag Mapping ABC to distinguish from dict. - return ( - "__mapping__", - tuple( - sorted( - (k, _recurse(val)) - for k, val in v.items() - ) - ), - ) - if isinstance(v, Sequence): - # Generic Sequence (UserList, etc.) - tag distinctly from list/tuple - return ( - "__seq__", - tuple(_recurse(i) for i in v), - ) - msg = f"Unknown type in cache key: {type(v).__name__}" - raise TypeError(msg) - - return _go(value, depth) + def _make_hashable(value: object, depth: int = MAX_DEPTH) -> HashableValue: + """Convert potentially unhashable cache arguments into a stable hashable form.""" + return make_hashable(value, depth=depth) @staticmethod def _compute_key_hash(key: _CacheKey) -> bytes: - """Compute BLAKE2b-8 hash of a cache key for entry binding. - - Returns an 8-byte digest used to bind an IntegrityCacheEntry to its - storage position. Called by put() to compute the key_hash stored in the - entry, and by get() to verify the stored key_hash matches the lookup key. - - 8-byte (64-bit) digest provides sufficient collision resistance for - integrity binding while keeping per-entry memory overhead minimal. - - Args: - key: Cache key tuple (message_id, args_tuple, attribute, locale_code, use_isolating) - - Returns: - 8-byte BLAKE2b digest - """ - return hashlib.blake2b( - str(key).encode("utf-8", errors="surrogatepass"), - digest_size=8, - ).digest() + """Compute the 8-byte key binding used to detect cache slot confusion.""" + return compute_key_hash(key) @staticmethod def _make_key( @@ -1124,33 +555,14 @@ def _make_key( *, use_isolating: bool, ) -> _CacheKey | None: - """Create immutable cache key from arguments. - - Converts unhashable types (lists, dicts, sets) to hashable equivalents. - - Args: - message_id: Message identifier - args: Message arguments (may contain unhashable values) - attribute: Attribute name - locale_code: Locale code - use_isolating: Whether Unicode isolation marks are used - - Returns: - Immutable cache key tuple, or None if conversion fails - """ - if args is None: - args_tuple: tuple[tuple[str, HashableValue], ...] = () - else: - try: - items: list[tuple[str, HashableValue]] = [] - for k, v in args.items(): - items.append((k, IntegrityCache._make_hashable(v))) - args_tuple = tuple(sorted(items)) - hash(args_tuple) - except (TypeError, RecursionError): - return None - - return (message_id, args_tuple, attribute, locale_code, use_isolating) + """Create the immutable lookup key for a formatting request.""" + return make_key( + message_id, + args, + attribute, + locale_code, + use_isolating=use_isolating, + ) def __len__(self) -> int: """Get current cache size. Thread-safe.""" diff --git a/src/ftllexengine/runtime/cache_config.py b/src/ftllexengine/runtime/cache_config.py index 4e6061a8..79b0f381 100644 --- a/src/ftllexengine/runtime/cache_config.py +++ b/src/ftllexengine/runtime/cache_config.py @@ -45,24 +45,24 @@ class CacheConfig: Prevents memory exhaustion from pathological cases. Example: - >>> from ftllexengine import FluentBundle - >>> from ftllexengine.runtime.cache_config import CacheConfig - >>> config = CacheConfig(size=500, write_once=True) - >>> bundle = FluentBundle("en", cache=config) - >>> bundle.cache_enabled + >>> from ftllexengine import FluentBundle # doctest: +SKIP + >>> from ftllexengine.runtime.cache_config import CacheConfig # doctest: +SKIP + >>> config = CacheConfig(size=500, write_once=True) # doctest: +SKIP + >>> bundle = FluentBundle("en", cache=config) # doctest: +SKIP + >>> bundle.cache_enabled # doctest: +SKIP True - >>> assert bundle.cache_config is not None - >>> bundle.cache_config.size + >>> assert bundle.cache_config is not None # doctest: +SKIP + >>> bundle.cache_config.size # doctest: +SKIP 500 Example - Financial application: - >>> config = CacheConfig( + >>> config = CacheConfig( # doctest: +SKIP ... write_once=True, ... integrity_strict=True, ... enable_audit=True, ... max_audit_entries=50000, ... ) - >>> bundle = FluentBundle("en", cache=config, strict=True) + >>> bundle = FluentBundle("en", cache=config, strict=True) # doctest: +SKIP """ size: int = DEFAULT_CACHE_SIZE diff --git a/src/ftllexengine/runtime/cache_keys.py b/src/ftllexengine/runtime/cache_keys.py new file mode 100644 index 00000000..6fe29975 --- /dev/null +++ b/src/ftllexengine/runtime/cache_keys.py @@ -0,0 +1,177 @@ +"""Hashable-key conversion helpers for IntegrityCache.""" + +from __future__ import annotations + +import hashlib +from collections.abc import Mapping, Sequence +from datetime import date, datetime +from decimal import Decimal +from typing import TYPE_CHECKING, cast + +from ftllexengine.constants import MAX_DEPTH +from ftllexengine.core.value_types import FluentNumber, FluentValue + +if TYPE_CHECKING: + from collections.abc import Callable + + from ftllexengine.runtime.cache_types import HashableValue, _CacheKey + +__all__ = ["HASHABLE_NODE_BUDGET", "compute_key_hash", "make_hashable", "make_key"] + +HASHABLE_NODE_BUDGET: int = 10_000 + + +def _hashable_decimal(value: Decimal) -> HashableValue: + if value.is_nan(): + return ("__decimal__", "__NaN__") + return ("__decimal__", str(value)) + + +def _hashable_datetime(value: datetime) -> HashableValue: + tz_key = str(value.tzinfo) if value.tzinfo else "__naive__" + return ("__datetime__", value.isoformat(), tz_key) + + +def _hashable_mapping( + tag: str, + value: Mapping[object, object], + recurse: Callable[[object], HashableValue], +) -> HashableValue: + return cast( + "HashableValue", + (tag, tuple(sorted((key, recurse(item)) for key, item in value.items()))), + ) + + +def _hashable_sequence( + tag: str, + value: Sequence[object], + recurse: Callable[[object], HashableValue], +) -> HashableValue: + return (tag, tuple(recurse(item) for item in value)) + + +def _hashable_set( + tag: str, + value: set[object] | frozenset[object], + recurse: Callable[[object], HashableValue], +) -> HashableValue: + return (tag, frozenset(recurse(item) for item in value)) + + +def _hashable_scalar_value( + value: object, recurse: Callable[[object], HashableValue] +) -> HashableValue | None: + result: HashableValue | None = None + match value: + case str() | None: + result = value + case bool(): + result = ("__bool__", value) + case int(): + result = ("__int__", value) + case Decimal(): + result = _hashable_decimal(value) + case datetime(): + result = _hashable_datetime(value) + case date(): + result = ("__date__", value.isoformat()) + case FluentNumber(): + result = ( + "__fluentnumber__", + type(value.value).__name__, + recurse(value.value), + value.formatted, + value.precision, + ) + case _: + pass + return result + + +def _hashable_container_value( + value: object, + recurse: Callable[[object], HashableValue], +) -> HashableValue | None: + match value: + case list(): + return _hashable_sequence("__list__", value, recurse) + case tuple(): + return _hashable_sequence("__tuple__", value, recurse) + case dict(): + return _hashable_mapping("__dict__", value, recurse) + case set(): + return _hashable_set("__set__", value, recurse) + case frozenset(): + return _hashable_set("__frozenset__", value, recurse) + case _: + return None + + +def make_hashable(value: object, depth: int = MAX_DEPTH) -> HashableValue: + """Convert potentially unhashable values into a stable hashable form.""" + node_count = 0 + + def go(current: object, remaining_depth: int) -> HashableValue: + nonlocal node_count + node_count += 1 + if node_count > HASHABLE_NODE_BUDGET: + msg = "Node budget exceeded in cache key conversion (possible DAG expansion attack)" + raise TypeError(msg) + if remaining_depth <= 0: + msg = "Maximum nesting depth exceeded in cache key conversion" + raise TypeError(msg) + if current is None: + return None + + def recurse(item: object) -> HashableValue: + return go(item, remaining_depth - 1) + + known_value = _hashable_scalar_value(current, recurse) + if known_value is not None: + return known_value + + known_value = _hashable_container_value(current, recurse) + if known_value is not None: + return known_value + if isinstance(current, Mapping): + return _hashable_mapping("__mapping__", current, recurse) + if isinstance(current, Sequence): + return _hashable_sequence("__seq__", current, recurse) + + msg = f"Unknown type in cache key: {type(current).__name__}" + raise TypeError(msg) + + return go(value, depth) + + +def compute_key_hash(key: _CacheKey) -> bytes: + """Compute the 8-byte BLAKE2b key binding used by cache entries.""" + return hashlib.blake2b( + str(key).encode("utf-8", errors="surrogatepass"), + digest_size=8, + ).digest() + + +def make_key( + message_id: str, + args: Mapping[str, FluentValue] | None, + attribute: str | None, + locale_code: str, + *, + use_isolating: bool, +) -> _CacheKey | None: + """Create an immutable cache key tuple from formatting arguments.""" + if args is None: + args_tuple: tuple[tuple[str, HashableValue], ...] = () + else: + try: + items: list[tuple[str, HashableValue]] = [] + for key, value in args.items(): + items.append((key, make_hashable(value))) + args_tuple = tuple(sorted(items)) + hash(args_tuple) + except (TypeError, RecursionError): + return None + + return (message_id, args_tuple, attribute, locale_code, use_isolating) diff --git a/src/ftllexengine/runtime/cache_types.py b/src/ftllexengine/runtime/cache_types.py new file mode 100644 index 00000000..b62692a2 --- /dev/null +++ b/src/ftllexengine/runtime/cache_types.py @@ -0,0 +1,216 @@ +"""Shared cache types and immutable entry structures.""" + +from __future__ import annotations + +import hashlib +import hmac +import struct +import time +from dataclasses import dataclass, field +from datetime import date, datetime +from decimal import Decimal +from typing import TypedDict + +from ftllexengine.core.value_types import FluentNumber +from ftllexengine.diagnostics import FrozenFluentError + +__all__ = [ + "_DEFAULT_MAX_ERRORS_PER_ENTRY", + "CacheAuditLogEntry", + "CacheStats", + "HashableValue", + "IntegrityCacheEntry", + "WriteLogEntry", + "_CacheKey", + "_CacheValue", + "_estimate_error_weight", +] + + +class CacheStats(TypedDict): + """Typed statistics snapshot returned by IntegrityCache.get_stats().""" + + size: int + maxsize: int + max_entry_weight: int + max_errors_per_entry: int + hits: int + misses: int + hit_rate: float + unhashable_skips: int + oversize_skips: int + error_bloat_skips: int + corruption_detected: int + idempotent_writes: int + write_once_conflicts: int + combined_weight_skips: int + sequence: int + write_once: bool + strict: bool + audit_enabled: bool + audit_entries: int + + +_ERROR_BASE_OVERHEAD: int = 100 +_DEFAULT_MAX_ERRORS_PER_ENTRY: int = 50 + + +def _estimate_error_weight(error: FrozenFluentError) -> int: + """Estimate the memory weight of one FrozenFluentError.""" + weight = _ERROR_BASE_OVERHEAD + len(error.message) + + if error.diagnostic is not None: + diag = error.diagnostic + weight += len(diag.message) + for attr in ( + diag.hint, + diag.help_url, + diag.function_name, + diag.argument_name, + diag.expected_type, + diag.received_type, + diag.ftl_location, + ): + if attr is not None: + weight += len(attr) + if diag.resolution_path is not None: + for path_element in diag.resolution_path: + weight += len(path_element) + + if error.context is not None: + ctx = error.context + weight += len(ctx.input_value) + weight += len(ctx.locale_code) + weight += len(ctx.parse_type) + weight += len(ctx.fallback_value) + + return weight + + +type HashableValue = ( + str + | int + | bool + | Decimal + | datetime + | date + | FluentNumber + | None + | tuple["HashableValue", ...] + | frozenset["HashableValue"] +) + +type _CacheKey = tuple[str, tuple[tuple[str, HashableValue], ...], str | None, str, bool] +type _CacheValue = tuple[str, tuple[FrozenFluentError, ...]] + + +@dataclass(frozen=True, slots=True) +class IntegrityCacheEntry: + """Immutable cache entry with integrity metadata.""" + + formatted: str + errors: tuple[FrozenFluentError, ...] + checksum: bytes + created_at: float + sequence: int + key_hash: bytes + content_hash: bytes = field(init=False, repr=False, compare=False, hash=False) + + def __post_init__(self) -> None: + """Compute and store content_hash after field initialization.""" + object.__setattr__( + self, "content_hash", self._compute_content_hash(self.formatted, self.errors) + ) + + @classmethod + def create( + cls, + formatted: str, + errors: tuple[FrozenFluentError, ...], + sequence: int, + key_hash: bytes, + ) -> IntegrityCacheEntry: + """Create entry with computed checksum.""" + created_at = time.monotonic() + checksum = cls._compute_checksum(formatted, errors, created_at, sequence, key_hash) + return cls( + formatted=formatted, + errors=errors, + checksum=checksum, + created_at=created_at, + sequence=sequence, + key_hash=key_hash, + ) + + @staticmethod + def _feed_errors(h: hashlib.blake2b, errors: tuple[FrozenFluentError, ...]) -> None: + """Feed error sequence into an active hasher.""" + h.update(len(errors).to_bytes(4, "big")) + for error in errors: + h.update(b"\x01") + h.update(error.content_hash) + + @staticmethod + def _compute_checksum( + formatted: str, + errors: tuple[FrozenFluentError, ...], + created_at: float, + sequence: int, + key_hash: bytes, + ) -> bytes: + """Compute a BLAKE2b-128 checksum for content plus metadata.""" + h = hashlib.blake2b(digest_size=16) + encoded = formatted.encode("utf-8", errors="surrogatepass") + h.update(len(encoded).to_bytes(4, "big")) + h.update(encoded) + IntegrityCacheEntry._feed_errors(h, errors) + h.update(struct.pack(">d", created_at)) + h.update(sequence.to_bytes(8, "big")) + h.update(key_hash) + return h.digest() + + def verify(self) -> bool: + """Verify entry integrity recursively.""" + expected_content = self._compute_content_hash(self.formatted, self.errors) + if not hmac.compare_digest(self.content_hash, expected_content): + return False + + expected = self._compute_checksum( + self.formatted, self.errors, self.created_at, self.sequence, self.key_hash + ) + if not hmac.compare_digest(self.checksum, expected): + return False + + return all(error.verify_integrity() for error in self.errors) + + def as_result(self) -> _CacheValue: + """Extract formatted result and errors as a tuple.""" + return (self.formatted, self.errors) + + @staticmethod + def _compute_content_hash( + formatted: str, + errors: tuple[FrozenFluentError, ...], + ) -> bytes: + """Compute a BLAKE2b-128 hash of content only.""" + h = hashlib.blake2b(digest_size=16) + encoded = formatted.encode("utf-8", errors="surrogatepass") + h.update(len(encoded).to_bytes(4, "big")) + h.update(encoded) + IntegrityCacheEntry._feed_errors(h, errors) + return h.digest() + + +@dataclass(frozen=True, slots=True) +class WriteLogEntry: + """Immutable audit log entry for cache operations.""" + + operation: str + key_hash: str + timestamp: float + sequence: int + checksum_hex: str + wall_time_unix: float + + +CacheAuditLogEntry = WriteLogEntry diff --git a/src/ftllexengine/runtime/function_bridge.py b/src/ftllexengine/runtime/function_bridge.py index c5dccbb6..7da1cd7c 100644 --- a/src/ftllexengine/runtime/function_bridge.py +++ b/src/ftllexengine/runtime/function_bridge.py @@ -107,20 +107,20 @@ def my_func(value: T, locale_code: str, *, keyword_args...) -> R your signature matches the expected pattern. Example - Simple function (no locale): - >>> @fluent_function + >>> @fluent_function # doctest: +SKIP ... def my_upper(value: str) -> str: ... return value.upper() - >>> bundle.add_function("MYUPPER", my_upper) - >>> # FTL: { MY_UPPER($name) } + >>> bundle.add_function("MYUPPER", my_upper) # doctest: +SKIP + FTL: `{ MY_UPPER($name) }` Example - Locale-aware function: - >>> @fluent_function(inject_locale=True) + >>> @fluent_function(inject_locale=True) # doctest: +SKIP ... def my_format(value: int, locale_code: str) -> str: ... # Format number according to locale ... return format_for_locale(value, locale_code) - >>> bundle.add_function("MYFORMAT", my_format) - >>> # FTL: { MY_FORMAT($count) } - >>> # Bundle appends locale: my_format(count_value, "en_US") + >>> bundle.add_function("MYFORMAT", my_format) # doctest: +SKIP + FTL: `{ MY_FORMAT($count) }` + Bundle appends locale: `my_format(count_value, "en_US")` """ def decorator(fn: F) -> F: @@ -171,13 +171,13 @@ class FunctionRegistry: Uses __slots__ for memory efficiency (avoids per-instance __dict__). Example: - >>> registry = FunctionRegistry() - >>> registry.register(my_func, ftl_name="CUSTOM") - >>> "CUSTOM" in registry + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> registry.register(my_func, ftl_name="CUSTOM") # doctest: +SKIP + >>> "CUSTOM" in registry # doctest: +SKIP True - >>> len(registry) + >>> len(registry) # doctest: +SKIP 1 - >>> for name in registry: + >>> for name in registry: # doctest: +SKIP ... print(name) CUSTOM """ @@ -210,12 +210,12 @@ def register( 2 positional parameters to receive (value, locale_code). Example: - >>> def number_format(value, *, minimum_fraction_digits=0): + >>> def number_format(value, *, minimum_fraction_digits=0): # doctest: +SKIP ... return str(value) - >>> registry = FunctionRegistry() - >>> registry.register(number_format, ftl_name="NUMBER") - >>> # FTL: { $x NUMBER(minimumFractionDigits: 2) } - >>> # Python: number_format(x, minimum_fraction_digits=2) + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> registry.register(number_format, ftl_name="NUMBER") # doctest: +SKIP + FTL: `{ $x NUMBER(minimumFractionDigits: 2) }` + Python: `number_format(x, minimum_fraction_digits=2)` """ if self._frozen: msg = ( @@ -409,9 +409,9 @@ def list_functions(self) -> list[str]: List of FTL function names (e.g., ["NUMBER", "DATETIME", "CURRENCY"]) Example: - >>> registry = FunctionRegistry() - >>> registry.register(lambda x: str(x), ftl_name="CUSTOM") - >>> registry.list_functions() + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> registry.register(lambda x: str(x), ftl_name="CUSTOM") # doctest: +SKIP + >>> registry.list_functions() # doctest: +SKIP ['CUSTOM'] """ return list(self._functions.keys()) @@ -426,13 +426,13 @@ def get_function_info(self, ftl_name: str) -> FunctionSignature | None: FunctionSignature with metadata, or None if not found Example: - >>> registry = FunctionRegistry() - >>> def my_func(value, *, min_digits=0): return str(value) - >>> registry.register(my_func, ftl_name="MYFUNC") - >>> info = registry.get_function_info("MYFUNC") - >>> info.python_name + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> def my_func(value, *, min_digits=0): return str(value) # doctest: +SKIP + >>> registry.register(my_func, ftl_name="MYFUNC") # doctest: +SKIP + >>> info = registry.get_function_info("MYFUNC") # doctest: +SKIP + >>> info.python_name # doctest: +SKIP 'my_func' - >>> info.ftl_name + >>> info.ftl_name # doctest: +SKIP 'MYFUNC' """ return self._functions.get(ftl_name) @@ -450,11 +450,11 @@ def get_callable(self, ftl_name: str) -> Callable[..., FluentValue] | None: The registered callable, or None if function not found Example: - >>> registry = FunctionRegistry() - >>> def my_func(value): return str(value) - >>> registry.register(my_func, ftl_name="MYFUNC") - >>> callable_func = registry.get_callable("MYFUNC") - >>> callable_func is my_func + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> def my_func(value): return str(value) # doctest: +SKIP + >>> registry.register(my_func, ftl_name="MYFUNC") # doctest: +SKIP + >>> callable_func = registry.get_callable("MYFUNC") # doctest: +SKIP + >>> callable_func is my_func # doctest: +SKIP True """ sig = self._functions.get(ftl_name) @@ -467,10 +467,10 @@ def __iter__(self) -> Iterator[str]: Iterator over FTL function names Example: - >>> registry = FunctionRegistry() - >>> registry.register(lambda x: str(x), ftl_name="FUNC1") - >>> registry.register(lambda x: str(x), ftl_name="FUNC2") - >>> for name in registry: + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> registry.register(lambda x: str(x), ftl_name="FUNC1") # doctest: +SKIP + >>> registry.register(lambda x: str(x), ftl_name="FUNC2") # doctest: +SKIP + >>> for name in registry: # doctest: +SKIP ... print(name) FUNC1 FUNC2 @@ -484,11 +484,11 @@ def __len__(self) -> int: Number of registered functions Example: - >>> registry = FunctionRegistry() - >>> len(registry) + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> len(registry) # doctest: +SKIP 0 - >>> registry.register(lambda x: str(x), ftl_name="FUNC") - >>> len(registry) + >>> registry.register(lambda x: str(x), ftl_name="FUNC") # doctest: +SKIP + >>> len(registry) # doctest: +SKIP 1 """ return len(self._functions) @@ -503,11 +503,11 @@ def __contains__(self, ftl_name: str) -> bool: True if function is registered Example: - >>> registry = FunctionRegistry() - >>> registry.register(lambda x: str(x), ftl_name="CUSTOM") - >>> "CUSTOM" in registry + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> registry.register(lambda x: str(x), ftl_name="CUSTOM") # doctest: +SKIP + >>> "CUSTOM" in registry # doctest: +SKIP True - >>> "MISSING" in registry + >>> "MISSING" in registry # doctest: +SKIP False """ return ftl_name in self._functions @@ -519,8 +519,8 @@ def __repr__(self) -> str: String representation showing registered functions Example: - >>> registry = FunctionRegistry() - >>> repr(registry) + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> repr(registry) # doctest: +SKIP 'FunctionRegistry(functions=0)' """ return f"FunctionRegistry(functions={len(self._functions)})" @@ -540,9 +540,9 @@ def copy(self) -> FunctionRegistry: either copy won't affect the other. Example: - >>> frozen_registry = get_shared_registry() # Frozen - >>> my_registry = frozen_registry.copy() # Unfrozen copy - >>> my_registry.register(my_custom_func) # Works! + >>> frozen_registry = get_shared_registry() # Frozen # doctest: +SKIP + >>> my_registry = frozen_registry.copy() # Unfrozen copy # doctest: +SKIP + >>> my_registry.register(my_custom_func) # Works! # doctest: +SKIP """ new_registry = FunctionRegistry() new_registry._functions = self._functions.copy() @@ -568,11 +568,11 @@ def should_inject_locale(self, ftl_name: str) -> bool: 3. Only inject if the callable has the marker set to True Example: - >>> registry = FunctionRegistry() - >>> @fluent_function(inject_locale=True) + >>> registry = FunctionRegistry() # doctest: +SKIP + >>> @fluent_function(inject_locale=True) # doctest: +SKIP ... def my_format(value, locale_code): return str(value) - >>> registry.register(my_format, ftl_name="MYFORMAT") - >>> registry.should_inject_locale("MYFORMAT") + >>> registry.register(my_format, ftl_name="MYFORMAT") # doctest: +SKIP + >>> registry.should_inject_locale("MYFORMAT") # doctest: +SKIP True """ if ftl_name not in self._functions: @@ -598,10 +598,10 @@ def get_expected_positional_args(self, ftl_name: str) -> int | None: or None if not a built-in function with known arity. Example: - >>> registry = create_default_registry() - >>> registry.get_expected_positional_args("NUMBER") + >>> registry = create_default_registry() # doctest: +SKIP + >>> registry.get_expected_positional_args("NUMBER") # doctest: +SKIP 1 - >>> registry.get_expected_positional_args("CUSTOM") + >>> registry.get_expected_positional_args("CUSTOM") # doctest: +SKIP None """ # Lazy import to avoid circular dependency at module load time @@ -622,9 +622,9 @@ def get_builtin_metadata(self, ftl_name: str) -> FunctionMetadata | None: FunctionMetadata for built-in functions, None for custom functions. Example: - >>> registry = create_default_registry() - >>> meta = registry.get_builtin_metadata("NUMBER") - >>> meta.requires_locale + >>> registry = create_default_registry() # doctest: +SKIP + >>> meta = registry.get_builtin_metadata("NUMBER") # doctest: +SKIP + >>> meta.requires_locale # doctest: +SKIP True """ # Lazy import to avoid circular dependency at module load time @@ -645,11 +645,11 @@ def _to_camel_case(snake_case: str) -> str: FTL parameter name (e.g., "minimumFractionDigits") Examples: - >>> FunctionRegistry._to_camel_case("minimum_fraction_digits") + >>> FunctionRegistry._to_camel_case("minimum_fraction_digits") # doctest: +SKIP 'minimumFractionDigits' - >>> FunctionRegistry._to_camel_case("use_grouping") + >>> FunctionRegistry._to_camel_case("use_grouping") # doctest: +SKIP 'useGrouping' - >>> FunctionRegistry._to_camel_case("value") + >>> FunctionRegistry._to_camel_case("value") # doctest: +SKIP 'value' """ # Split on underscores diff --git a/src/ftllexengine/runtime/function_metadata.py b/src/ftllexengine/runtime/function_metadata.py index 8ad0e7c1..7cfbcf38 100644 --- a/src/ftllexengine/runtime/function_metadata.py +++ b/src/ftllexengine/runtime/function_metadata.py @@ -52,7 +52,7 @@ class FunctionMetadata: category: Function category for documentation Example: - >>> NUMBER_META = FunctionMetadata( + >>> NUMBER_META = FunctionMetadata( # doctest: +SKIP ... python_name="number_format", ... ftl_name="NUMBER", ... requires_locale=True, @@ -108,9 +108,9 @@ def requires_locale_injection(func_name: str) -> bool: True if function requires locale injection, False otherwise Example: - >>> requires_locale_injection("NUMBER") + >>> requires_locale_injection("NUMBER") # doctest: +SKIP True - >>> requires_locale_injection("CUSTOM") + >>> requires_locale_injection("CUSTOM") # doctest: +SKIP False """ metadata = BUILTIN_FUNCTIONS.get(func_name) @@ -127,9 +127,9 @@ def is_builtin_function(func_name: str) -> bool: True if function is built-in, False otherwise Example: - >>> is_builtin_function("NUMBER") + >>> is_builtin_function("NUMBER") # doctest: +SKIP True - >>> is_builtin_function("CUSTOM") + >>> is_builtin_function("CUSTOM") # doctest: +SKIP False """ return func_name in BUILTIN_FUNCTIONS @@ -145,9 +145,9 @@ def get_python_name(ftl_name: str) -> str | None: Python function name (e.g., "number_format") or None if not found Example: - >>> get_python_name("NUMBER") + >>> get_python_name("NUMBER") # doctest: +SKIP 'number_format' - >>> get_python_name("CUSTOM") + >>> get_python_name("CUSTOM") # doctest: +SKIP None """ metadata = BUILTIN_FUNCTIONS.get(ftl_name) diff --git a/src/ftllexengine/runtime/functions.py b/src/ftllexengine/runtime/functions.py index 61dc5bfd..2ff143a6 100644 --- a/src/ftllexengine/runtime/functions.py +++ b/src/ftllexengine/runtime/functions.py @@ -87,16 +87,18 @@ def number_format( FluentNumber with formatted string and computed precision for plural matching Examples: - >>> from decimal import Decimal - >>> number_format(Decimal('1234.5'), "en-US") + >>> from decimal import Decimal # doctest: +SKIP + >>> number_format(Decimal('1234.5'), "en-US") # doctest: +SKIP FluentNumber(value=Decimal('1234.5'), formatted='1,234.5', precision=1) - >>> number_format(Decimal('1234.5'), "de-DE") + >>> number_format(Decimal('1234.5'), "de-DE") # doctest: +SKIP FluentNumber(value=Decimal('1234.5'), formatted='1.234,5', precision=1) - >>> number_format(Decimal('1234.5'), "lv-LV") + >>> number_format(Decimal('1234.5'), "lv-LV") # doctest: +SKIP FluentNumber(value=Decimal('1234.5'), formatted='1 234,5', precision=1) - >>> number_format(42, "en-US", minimum_fraction_digits=2) + >>> number_format(42, "en-US", minimum_fraction_digits=2) # doctest: +SKIP FluentNumber(value=42, formatted='42.00', precision=2) - >>> number_format(Decimal('-1234.56'), "en-US", pattern="#,##0.00;(#,##0.00)") + >>> number_format( # doctest: +SKIP + ... Decimal('-1234.56'), "en-US", pattern="#,##0.00;(#,##0.00)" + ... ) FluentNumber(value=Decimal('-1234.56'), formatted='(1,234.56)', precision=2) FTL Usage: @@ -202,18 +204,20 @@ def datetime_format( Formatted date/datetime string Examples: - >>> from datetime import date, datetime, UTC - >>> dt = datetime(2025, 10, 27, tzinfo=UTC) - >>> datetime_format(dt, "en-US", date_style="short") + >>> from datetime import date, datetime, UTC # doctest: +SKIP + >>> dt = datetime(2025, 10, 27, tzinfo=UTC) # doctest: +SKIP + >>> datetime_format(dt, "en-US", date_style="short") # doctest: +SKIP '10/27/25' - >>> datetime_format(dt, "de-DE", date_style="short") + >>> datetime_format(dt, "de-DE", date_style="short") # doctest: +SKIP '27.10.25' - >>> dt_with_time = datetime(2025, 10, 27, 14, 30, tzinfo=UTC) - >>> datetime_format(dt_with_time, "en-US", date_style="medium", time_style="short") + >>> dt_with_time = datetime(2025, 10, 27, 14, 30, tzinfo=UTC) # doctest: +SKIP + >>> datetime_format( # doctest: +SKIP + ... dt_with_time, "en-US", date_style="medium", time_style="short" + ... ) 'Oct 27, 2025, 2:30 PM' - >>> datetime_format(dt, "en-US", pattern="yyyy-MM-dd") + >>> datetime_format(dt, "en-US", pattern="yyyy-MM-dd") # doctest: +SKIP '2025-10-27' - >>> datetime_format(date(2025, 10, 27), "en-US", date_style="short") + >>> datetime_format(date(2025, 10, 27), "en-US", date_style="short") # doctest: +SKIP '10/27/25' FTL Usage: @@ -284,14 +288,14 @@ def currency_format( in plural/select expressions, matching NUMBER() behavior. Examples: - >>> from decimal import Decimal - >>> currency_format(Decimal('123.45'), "en-US", currency="EUR") + >>> from decimal import Decimal # doctest: +SKIP + >>> currency_format(Decimal('123.45'), "en-US", currency="EUR") # doctest: +SKIP FluentNumber(value=Decimal('123.45'), formatted='€123.45', precision=2) - >>> currency_format(Decimal('123.45'), "lv-LV", currency="EUR") + >>> currency_format(Decimal('123.45'), "lv-LV", currency="EUR") # doctest: +SKIP FluentNumber(value=Decimal('123.45'), formatted='123,45 €', precision=2) - >>> currency_format(12345, "ja-JP", currency="JPY") + >>> currency_format(12345, "ja-JP", currency="JPY") # doctest: +SKIP FluentNumber(value=12345, formatted='¥12,345', precision=0) - >>> currency_format(Decimal('123.456'), "ar-BH", currency="BHD") + >>> currency_format(Decimal('123.456'), "ar-BH", currency="BHD") # doctest: +SKIP FluentNumber(value=Decimal('123.456'), formatted='123.456 د.ب.', precision=3) FTL Usage: @@ -419,21 +423,21 @@ def create_default_registry() -> FunctionRegistry: FunctionRegistry with NUMBER, DATETIME, and CURRENCY functions registered. Example: - >>> registry = create_default_registry() - >>> "NUMBER" in registry + >>> registry = create_default_registry() # doctest: +SKIP + >>> "NUMBER" in registry # doctest: +SKIP True - >>> "DATETIME" in registry + >>> "DATETIME" in registry # doctest: +SKIP True - >>> "CURRENCY" in registry + >>> "CURRENCY" in registry # doctest: +SKIP True Use Case: FluentBundle uses this internally to create isolated function registries. Users who need custom registries can call this and then modify the result: - >>> registry = create_default_registry() - >>> registry.register(my_custom_func, ftl_name="CUSTOM") - >>> bundle = FluentBundle("en", functions=registry) + >>> registry = create_default_registry() # doctest: +SKIP + >>> registry.register(my_custom_func, ftl_name="CUSTOM") # doctest: +SKIP + >>> bundle = FluentBundle("en", functions=registry) # doctest: +SKIP See Also: get_shared_registry: Returns a shared cached registry for performance. @@ -499,18 +503,18 @@ def get_shared_registry() -> FunctionRegistry: TypeError: If you attempt to call register() on the returned registry. Example: - >>> # Efficient: Share registry across multiple bundles - >>> shared = get_shared_registry() - >>> bundle_en = FluentBundle("en", functions=shared) - >>> bundle_de = FluentBundle("de", functions=shared) - >>> bundle_fr = FluentBundle("fr", functions=shared) - >>> - >>> # Registry is frozen - attempting to modify raises TypeError - >>> shared.register(my_func) # Raises TypeError! - >>> - >>> # To add custom functions, use copy() to get unfrozen copy: - >>> my_registry = shared.copy() - >>> my_registry.register(my_custom_func, ftl_name="CUSTOM") + Efficient: share the registry across multiple bundles. + >>> shared = get_shared_registry() # doctest: +SKIP + >>> bundle_en = FluentBundle("en", functions=shared) # doctest: +SKIP + >>> bundle_de = FluentBundle("de", functions=shared) # doctest: +SKIP + >>> bundle_fr = FluentBundle("fr", functions=shared) # doctest: +SKIP + + The registry is frozen, so modification attempts raise `TypeError`. + >>> shared.register(my_func) # Raises TypeError! # doctest: +SKIP + + To add custom functions, use `copy()` to get an unfrozen copy: + >>> my_registry = shared.copy() # doctest: +SKIP + >>> my_registry.register(my_custom_func, ftl_name="CUSTOM") # doctest: +SKIP See Also: create_default_registry: Creates a new unfrozen registry for customization. diff --git a/src/ftllexengine/runtime/locale_context.py b/src/ftllexengine/runtime/locale_context.py index 613105e5..5a5295b7 100644 --- a/src/ftllexengine/runtime/locale_context.py +++ b/src/ftllexengine/runtime/locale_context.py @@ -35,32 +35,33 @@ import logging from collections import OrderedDict from dataclasses import dataclass, field -from datetime import date, datetime -from decimal import Decimal, InvalidOperation from threading import Lock from typing import TYPE_CHECKING, ClassVar, Literal from ftllexengine.constants import ( - FALLBACK_FUNCTION_ERROR, - MAX_FORMAT_DIGITS, MAX_LOCALE_CACHE_SIZE, MAX_LOCALE_CODE_LENGTH, ) from ftllexengine.core.babel_compat import ( - get_babel_dates, - get_babel_numbers, get_locale_class, get_unknown_locale_error_class, require_babel, ) from ftllexengine.core.locale_utils import require_locale_code -from ftllexengine.diagnostics import ErrorCategory, FrozenErrorContext, FrozenFluentError -from ftllexengine.diagnostics.templates import ErrorTemplate +from ftllexengine.runtime.locale_formatting import ( + format_currency_for_locale, + format_datetime_for_locale, + format_number_for_locale, + get_iso_code_pattern_for_locale, +) if TYPE_CHECKING: + from datetime import date, datetime + from decimal import Decimal + from babel import Locale - from ftllexengine.localization.types import LocaleCode + from ftllexengine.core.semantic_types import LocaleCode __all__ = ["LocaleContext"] @@ -89,20 +90,20 @@ class LocaleContext: - LocaleContext.cache_info(): Get detailed cache statistics Examples: - >>> from decimal import Decimal - >>> ctx = LocaleContext.create('en-US') - >>> ctx.format_number(Decimal('1234.5'), use_grouping=True) + >>> from decimal import Decimal # doctest: +SKIP + >>> ctx = LocaleContext.create('en-US') # doctest: +SKIP + >>> ctx.format_number(Decimal('1234.5'), use_grouping=True) # doctest: +SKIP '1,234.5' - >>> ctx = LocaleContext.create('lv-LV') - >>> ctx.format_number(Decimal('1234.5'), use_grouping=True) + >>> ctx = LocaleContext.create('lv-LV') # doctest: +SKIP + >>> ctx.format_number(Decimal('1234.5'), use_grouping=True) # doctest: +SKIP '1 234,5' - >>> # Unknown locales fall back to en_US formatting rules with a warning - >>> ctx = LocaleContext.create('xx-UNKNOWN') - >>> ctx.locale_code + Unknown locales fall back to `en_US` formatting rules with a warning: + >>> ctx = LocaleContext.create('xx-UNKNOWN') # doctest: +SKIP + >>> ctx.locale_code # doctest: +SKIP 'xx_unknown' - >>> ctx.is_fallback # Programmatic detection of fallback + >>> ctx.is_fallback # Programmatic detection of fallback # doctest: +SKIP True Thread Safety: @@ -145,11 +146,11 @@ def clear_cache(cls) -> None: Thread-safe via Lock. Example: - >>> LocaleContext.create('en-US') # Cached - >>> LocaleContext.cache_size() + >>> LocaleContext.create('en-US') # Cached # doctest: +SKIP + >>> LocaleContext.cache_size() # doctest: +SKIP 1 - >>> LocaleContext.clear_cache() - >>> LocaleContext.cache_size() + >>> LocaleContext.clear_cache() # doctest: +SKIP + >>> LocaleContext.cache_size() # doctest: +SKIP 0 """ with cls._cache_lock: @@ -163,10 +164,10 @@ def cache_size(cls) -> int: Number of cached instances Example: - >>> LocaleContext.clear_cache() - >>> LocaleContext.create('en-US') - >>> LocaleContext.create('de-DE') - >>> LocaleContext.cache_size() + >>> LocaleContext.clear_cache() # doctest: +SKIP + >>> LocaleContext.create('en-US') # doctest: +SKIP + >>> LocaleContext.create('de-DE') # doctest: +SKIP + >>> LocaleContext.cache_size() # doctest: +SKIP 2 """ with cls._cache_lock: @@ -183,9 +184,9 @@ def cache_info(cls) -> dict[str, int | tuple[str, ...]]: - locales: Tuple of cached locale codes (LRU order) Example: - >>> LocaleContext.clear_cache() - >>> LocaleContext.create('en-US') - >>> LocaleContext.cache_info() + >>> LocaleContext.clear_cache() # doctest: +SKIP + >>> LocaleContext.create('en-US') # doctest: +SKIP + >>> LocaleContext.cache_info() # doctest: +SKIP {'size': 1, 'max_size': 128, 'locales': ('en_us',)} """ with cls._cache_lock: @@ -217,14 +218,14 @@ def create(cls, locale_code: str) -> LocaleContext: canonical locale_code and setting is_fallback=True. Examples: - >>> ctx = LocaleContext.create('en-US') - >>> ctx.locale_code + >>> ctx = LocaleContext.create('en-US') # doctest: +SKIP + >>> ctx.locale_code # doctest: +SKIP 'en_us' - >>> ctx = LocaleContext.create('xx_UNKNOWN') # Unknown locale - >>> ctx.locale_code + >>> ctx = LocaleContext.create('xx_UNKNOWN') # Unknown locale # doctest: +SKIP + >>> ctx.locale_code # doctest: +SKIP 'xx_unknown' - >>> # But formatting uses en_US rules (with warning logged) + Formatting still uses `en_US` rules, with a warning logged: """ normalized_locale = require_locale_code(locale_code, "locale_code") @@ -328,11 +329,13 @@ def create_or_raise(cls, locale_code: str) -> LocaleContext: ValueError: If locale code is invalid or unknown Examples: - >>> ctx = LocaleContext.create_or_raise('en-US') - >>> ctx.locale_code + >>> ctx = LocaleContext.create_or_raise('en-US') # doctest: +SKIP + >>> ctx.locale_code # doctest: +SKIP 'en_us' - >>> LocaleContext.create_or_raise('invalid-locale') # doctest: +IGNORE_EXCEPTION_DETAIL + >>> LocaleContext.create_or_raise( # doctest: +IGNORE_EXCEPTION_DETAIL, +SKIP + ... 'invalid-locale' + ... ) Traceback (most recent call last): ... ValueError: Unknown locale identifier 'invalid-locale' @@ -386,119 +389,17 @@ def format_number( pattern: str | None = None, numbering_system: str = "latn", ) -> str: - """Format number with locale-specific separators. - - Implements Fluent NUMBER function semantics using Babel. - - Args: - value: Number to format (int or Decimal). float is not accepted; - use Decimal(str(float_val)) to convert at system boundaries. - minimum_fraction_digits: Minimum decimal places (default: 0) - maximum_fraction_digits: Maximum decimal places (default: 3) - use_grouping: Use thousands separator (default: True) - pattern: Custom number pattern (overrides other parameters) - numbering_system: CLDR numbering system identifier (default: "latn"). - Controls which numeral glyphs are used in the output. - Examples: "latn" (0-9), "arab" (Arabic-Indic), "deva" (Devanagari). - - Returns: - Formatted number string according to locale rules - - Examples: - >>> ctx = LocaleContext.create('en-US') - >>> from decimal import Decimal - >>> ctx.format_number(Decimal('1234.5')) - '1,234.5' - - >>> ctx = LocaleContext.create('de-DE') - >>> ctx.format_number(Decimal('1234.5')) - '1.234,5' - - >>> ctx = LocaleContext.create('lv-LV') - >>> ctx.format_number(Decimal('1234.5')) - '1 234,5' - - >>> ctx = LocaleContext.create('en-US') - >>> ctx.format_number(Decimal('-1234.56'), pattern="#,##0.00;(#,##0.00)") - '(1,234.56)' - - CLDR Compliance: - Uses Babel's format_decimal() which implements CLDR rules. - Matches Intl.NumberFormat behavior in JavaScript. - """ - # Validate digit parameters to prevent DoS via unbounded string allocation - if not 0 <= minimum_fraction_digits <= MAX_FORMAT_DIGITS: - msg = ( - f"minimum_fraction_digits must be 0-{MAX_FORMAT_DIGITS}, " - f"got {minimum_fraction_digits}" - ) - raise ValueError(msg) - if not 0 <= maximum_fraction_digits <= MAX_FORMAT_DIGITS: - msg = ( - f"maximum_fraction_digits must be 0-{MAX_FORMAT_DIGITS}, " - f"got {maximum_fraction_digits}" - ) - raise ValueError(msg) - # When minimum exceeds maximum (e.g., minimumFractionDigits: 4 with - # default maximumFractionDigits: 3), clamp maximum up to minimum. - # Matches JavaScript Intl.NumberFormat semantics: specifying only - # minimumFractionDigits=4 should yield 4 decimal places, not an error. - maximum_fraction_digits = max(maximum_fraction_digits, minimum_fraction_digits) - - babel_numbers = get_babel_numbers() - - try: - # Use custom pattern if provided. - if pattern is not None: - return str( - babel_numbers.format_decimal( - value, - format=pattern, - locale=self.babel_locale, - numbering_system=numbering_system, - ) - ) - - # Build format pattern from parameters. - # '#,##0' = integer with grouping; '0' = integer without grouping. - # '#,##0.0##' = 1-3 decimal places with grouping; '0.00' = fixed 2. - integer_part = "#,##0" if use_grouping else "0" - - if maximum_fraction_digits == 0: - format_pattern = integer_part - elif minimum_fraction_digits == maximum_fraction_digits: - decimal_part = "0" * minimum_fraction_digits - format_pattern = f"{integer_part}.{decimal_part}" - else: - required = "0" * minimum_fraction_digits - optional = "#" * (maximum_fraction_digits - minimum_fraction_digits) - format_pattern = f"{integer_part}.{required}{optional}" - - # Babel's decimal_quantization=True (default) applies ROUND_HALF_EVEN, - # which is the IEEE 754 / CLDR-neutral rounding mode. - return str( - babel_numbers.format_decimal( - value, - format=format_pattern, - locale=self.babel_locale, - numbering_system=numbering_system, - ) - ) - - except (ValueError, TypeError, InvalidOperation, AttributeError, KeyError) as e: - # Formatting failed - raise FrozenFluentError with fallback value - # The resolver will catch this error, collect it, and use the fallback - fallback = str(value) - diagnostic = ErrorTemplate.formatting_failed("NUMBER", str(value), str(e)) - context = FrozenErrorContext( - input_value=str(value), - locale_code=self.locale_code, - parse_type="number", - fallback_value=fallback, - ) - raise FrozenFluentError( - str(diagnostic), ErrorCategory.FORMATTING, diagnostic=diagnostic, context=context - ) from e + """Format number with locale-specific separators.""" + return format_number_for_locale( + locale_code=self.locale_code, + babel_locale=self.babel_locale, + value=value, + minimum_fraction_digits=minimum_fraction_digits, + maximum_fraction_digits=maximum_fraction_digits, + use_grouping=use_grouping, + pattern=pattern, + numbering_system=numbering_system, + ) def format_datetime( self, @@ -508,168 +409,15 @@ def format_datetime( time_style: Literal["short", "medium", "long", "full"] | None = None, pattern: str | None = None, ) -> str: - """Format datetime with locale-specific formatting. - - Implements Fluent DATETIME function semantics using Babel. - - Args: - value: date, datetime, or ISO 8601 string. FluentValue includes both - date and datetime, so both are accepted. Strings are converted via - datetime.fromisoformat() which accepts formats like: - - "2025-10-27" (date only, time defaults to 00:00:00) - - "2025-10-27T14:30:00" (date and time) - - "2025-10-27T14:30:00+00:00" (with timezone) - - date objects (without time): for date-only formatting (time_style=None), - formatted directly. When time_style is also requested, the date is - promoted to midnight datetime (00:00:00, no tzinfo) so Babel can - format the time component. This is the natural behavior for a calendar - date with no intrinsic time. - date_style: Date format style (default: "medium") - time_style: Time format style (default: None - date only) - pattern: Custom datetime pattern (overrides style parameters) - - Returns: - Formatted datetime string according to locale rules - - Raises: - FrozenFluentError: If string value is not valid ISO 8601 format - (category=FORMATTING) - - Examples: - >>> from datetime import date, datetime, UTC - >>> ctx = LocaleContext.create('en-US') - >>> dt = datetime(2025, 10, 27, 14, 30, tzinfo=UTC) - >>> ctx.format_datetime(dt, date_style='short') - '10/27/25' - - >>> ctx = LocaleContext.create('de-DE') - >>> ctx.format_datetime(dt, date_style='short') - '27.10.25' - - >>> ctx = LocaleContext.create('en-US') - >>> ctx.format_datetime(dt, pattern='yyyy-MM-dd') - '2025-10-27' - - >>> ctx = LocaleContext.create('en-US') - >>> ctx.format_datetime(date(2025, 10, 27), date_style='short') - '10/27/25' - - CLDR Compliance: - Uses Babel's format_datetime() which implements CLDR rules. - Matches Intl.DateTimeFormat behavior in JavaScript. - """ - babel_dates = get_babel_dates() - - # Type narrowing: produce a datetime for all paths. - # datetime must be checked before date because datetime IS a date subtype; - # isinstance(some_datetime, date) is True, so order matters here. - dt_value: datetime | date - - if isinstance(value, str): - try: - dt_value = datetime.fromisoformat(value) - except ValueError as e: - # Invalid datetime string - raise FrozenFluentError with fallback - # This ensures consistent error handling across all format_* methods - fallback = FALLBACK_FUNCTION_ERROR.format(name="DATETIME") - diagnostic = ErrorTemplate.formatting_failed( - "DATETIME", value, "not ISO 8601 format" - ) - context = FrozenErrorContext( - input_value=value, - locale_code=self.locale_code, - parse_type="datetime", - fallback_value=fallback, - ) - raise FrozenFluentError( - str(diagnostic), ErrorCategory.FORMATTING, - diagnostic=diagnostic, context=context - ) from e - elif isinstance(value, datetime): - # datetime is a subtype of date — must check datetime first - dt_value = value - else: - # Plain date object. - dt_value = value - - # Promote plain date to midnight datetime when a time component is needed. - # babel_dates.format_datetime() and format_time() require a datetime, not - # a bare date. A calendar date with no intrinsic time promotes to 00:00:00 - # (no tzinfo — the date carried no timezone, so none is inferred). - if isinstance(dt_value, date) and not isinstance(dt_value, datetime) and ( - time_style is not None or pattern is not None - ): - dt_value = datetime( # noqa: DTZ001 - date carries no tz; midnight promotion is explicitly naive - dt_value.year, dt_value.month, dt_value.day - ) - - try: - # Use custom pattern if provided - if pattern is not None: - return str( - babel_dates.format_datetime( - dt_value, - format=pattern, - locale=self.babel_locale, - ) - ) - - # Map Fluent styles to Babel format strings - if time_style: - # Both date and time - use locale's dateTimeFormat to combine - date_str = babel_dates.format_date( - dt_value, format=date_style, locale=self.babel_locale - ) - time_str = babel_dates.format_time( - dt_value, format=time_style, locale=self.babel_locale - ) - # Get locale's dateTimeFormat pattern for combining date and time - # Pattern uses {0} for time and {1} for date per CLDR spec - # Use multi-level fallback: requested style -> medium -> short -> hardcoded - # - # Ultimate fallback "{1} {0}" rationale: - # - {1} = date, {0} = time per CLDR convention - # - Space separator is universally acceptable (no locale uses no separator) - # - date-before-time order is most common globally (ISO 8601, CJK, most of Europe) - # - For locales where time-before-date is preferred (e.g., some EN variants), - # Babel should always provide CLDR data, so this fallback rarely triggers - datetime_pattern = ( - self.babel_locale.datetime_formats.get(date_style) - or self.babel_locale.datetime_formats.get("medium") - or self.babel_locale.datetime_formats.get("short") - or "{1} {0}" # Ultimate fallback (Western LTR: date space time) - ) - # DateTimePattern objects have format() method, strings use str.format() - if hasattr(datetime_pattern, "format"): - return str(datetime_pattern.format(time_str, date_str)) - return str(datetime_pattern).format(time_str, date_str) - # Date only - return str( - babel_dates.format_date( - dt_value, - format=date_style, - locale=self.babel_locale, - ) - ) - - except (ValueError, OverflowError, AttributeError, KeyError) as e: - # Formatting failed - raise FrozenFluentError with fallback value - # The resolver will catch this error, collect it, and use the fallback - fallback = dt_value.isoformat() - diagnostic = ErrorTemplate.formatting_failed( - "DATETIME", str(dt_value), str(e) - ) - context = FrozenErrorContext( - input_value=str(dt_value), - locale_code=self.locale_code, - parse_type="datetime", - fallback_value=fallback, - ) - raise FrozenFluentError( - str(diagnostic), ErrorCategory.FORMATTING, - diagnostic=diagnostic, context=context - ) from e + """Format datetime with locale-specific formatting.""" + return format_datetime_for_locale( + locale_code=self.locale_code, + babel_locale=self.babel_locale, + value=value, + date_style=date_style, + time_style=time_style, + pattern=pattern, + ) def format_currency( self, @@ -682,174 +430,24 @@ def format_currency( currency_digits: bool = True, numbering_system: str = "latn", ) -> str: - """Format currency with locale-specific rules. - - Implements Fluent CURRENCY function semantics using Babel. - - Args: - value: Monetary amount (int or Decimal). float is not accepted; - use Decimal(str(float_val)) to convert at system boundaries. - currency: ISO 4217 currency code (EUR, USD, JPY, BHD, etc.) - currency_display: Display style for currency - - "symbol": Use currency symbol (default) - - "code": Use currency code (EUR, USD, JPY) - - "name": Use currency name (euros, dollars, yen) - pattern: Custom currency pattern (overrides currency_display). - CLDR currency pattern placeholders: - - Use double currency sign for ISO code display - - Standard patterns use single currency sign for symbol - use_grouping: Use thousands separator (default: True) - currency_digits: Use ISO 4217 decimal places for the currency - (default: True). When False, no automatic decimal place adjustment - is made and the value is formatted as-is. Has no effect when - ``pattern`` is provided (pattern precision takes precedence). - numbering_system: CLDR numbering system identifier (default: "latn"). - Controls which numeral glyphs are used in the output. - Examples: "latn" (0-9), "arab" (Arabic-Indic), "deva" (Devanagari). - - Returns: - Formatted currency string according to locale rules - - Examples: - >>> from decimal import Decimal - >>> ctx = LocaleContext.create('en-US') - >>> ctx.format_currency(Decimal('123.45'), currency='EUR') - '€123.45' - - >>> ctx = LocaleContext.create('lv-LV') - >>> ctx.format_currency(Decimal('123.45'), currency='EUR') - '123,45 €' - - >>> ctx = LocaleContext.create('ja-JP') - >>> ctx.format_currency(12345, currency='JPY') - '¥12,345' - - >>> ctx = LocaleContext.create('ar-BH') - >>> ctx.format_currency(Decimal('123.456'), currency='BHD') - '123.456 د.ب.' - - >>> # Custom pattern example - >>> ctx = LocaleContext.create('en-US') - >>> ctx.format_currency(Decimal('1234.56'), currency='USD', pattern='#,##0.00 ¤') - '1,234.56 $' - - CLDR Compliance: - Uses Babel's format_currency() which implements CLDR rules. - Matches Intl.NumberFormat with style: 'currency'. - Automatically applies currency-specific decimal places when - currency_digits=True (default): - - JPY: 0 decimals - - BHD, KWD, OMR: 3 decimals - - Most others: 2 decimals - """ - babel_numbers = get_babel_numbers() - - try: - # Custom pattern overrides currency_display. - # currency_digits=False: the pattern explicitly controls decimal places; - # CLDR ISO 4217 defaults must not override the pattern's precision. - if pattern is not None: - return str( - babel_numbers.format_currency( - value, - currency, - format=pattern, - locale=self.babel_locale, - currency_digits=False, - group_separator=use_grouping, - numbering_system=numbering_system, - ) - ) - - # Map currency_display to Babel's format_type parameter. - if currency_display == "name": - format_type: Literal["name", "standard", "accounting"] = "name" - return str( - babel_numbers.format_currency( - value, - currency, - locale=self.babel_locale, - currency_digits=currency_digits, - format_type=format_type, - group_separator=use_grouping, - numbering_system=numbering_system, - ) - ) - - if currency_display == "code": - # Double currency sign (¤¤) per CLDR displays ISO code. - code_pattern = self._get_iso_code_pattern() - if code_pattern is not None: - return str( - babel_numbers.format_currency( - value, - currency, - format=code_pattern, - locale=self.babel_locale, - currency_digits=currency_digits, - group_separator=use_grouping, - numbering_system=numbering_system, - ) - ) - # Fallback: use standard format if pattern extraction fails. - - # Default: symbol display using standard format. - return str( - babel_numbers.format_currency( - value, - currency, - locale=self.babel_locale, - currency_digits=currency_digits, - format_type="standard", - group_separator=use_grouping, - numbering_system=numbering_system, - ) - ) - - except (ValueError, TypeError, InvalidOperation, AttributeError, KeyError) as e: - # Formatting failed - raise FrozenFluentError with fallback value - # The resolver will catch this error, collect it, and use the fallback - fallback = f"{currency} {value}" - diagnostic = ErrorTemplate.formatting_failed( - "CURRENCY", f"{currency} {value}", str(e) - ) - context = FrozenErrorContext( - input_value=f"{currency} {value}", - locale_code=self.locale_code, - parse_type="currency", - fallback_value=fallback, - ) - raise FrozenFluentError( - str(diagnostic), ErrorCategory.FORMATTING, - diagnostic=diagnostic, context=context - ) from e + """Format currency with locale-specific rules.""" + return format_currency_for_locale( + locale_code=self.locale_code, + babel_locale=self.babel_locale, + value=value, + currency=currency, + currency_display=currency_display, + pattern=pattern, + use_grouping=use_grouping, + currency_digits=currency_digits, + numbering_system=numbering_system, + debug_logger=logger, + ) def _get_iso_code_pattern(self) -> str | None: - """Get CLDR pattern for ISO currency code display. - - Per CLDR specification: - - Single currency sign (U+00A4) displays currency symbol - - Double currency sign (U+00A4 U+00A4) displays ISO code - - This helper extracts the standard currency pattern and replaces - single currency signs with double signs for ISO code display. - - Returns: - Modified pattern for ISO code display, or None if extraction fails. - """ - locale_currency_formats = self.babel_locale.currency_formats - standard_pattern = locale_currency_formats.get("standard") - if standard_pattern is None or not hasattr(standard_pattern, "pattern"): - return None - - raw_pattern = standard_pattern.pattern - # Guard: verify currency placeholder exists before replacement - # Single U+00A4 = symbol, Double U+00A4 U+00A4 = ISO code per CLDR - if "\xa4" not in raw_pattern: - logger.debug( - "Currency pattern for locale %s lacks placeholder", - self.locale_code, - ) - return None - - return str(raw_pattern.replace("\xa4", "\xa4\xa4")) + """Get CLDR pattern for ISO currency code display.""" + return get_iso_code_pattern_for_locale( + locale_code=self.locale_code, + babel_locale=self.babel_locale, + debug_logger=logger, + ) diff --git a/src/ftllexengine/runtime/locale_formatting.py b/src/ftllexengine/runtime/locale_formatting.py new file mode 100644 index 00000000..3bc9d4c8 --- /dev/null +++ b/src/ftllexengine/runtime/locale_formatting.py @@ -0,0 +1,330 @@ +"""Locale-scoped formatting helpers used by ``LocaleContext``. + +Keeps the public ``LocaleContext`` facade focused on cache and lifecycle +management while the heavy number/date/currency formatting machinery lives in a +dedicated internal module. +""" + +from __future__ import annotations + +import logging +from datetime import date, datetime +from decimal import Decimal, InvalidOperation +from typing import TYPE_CHECKING, Literal + +from ftllexengine.constants import FALLBACK_FUNCTION_ERROR, MAX_FORMAT_DIGITS +from ftllexengine.core.babel_compat import get_babel_dates, get_babel_numbers +from ftllexengine.diagnostics import ErrorCategory, FrozenErrorContext, FrozenFluentError +from ftllexengine.diagnostics.templates import ErrorTemplate + +if TYPE_CHECKING: + from babel import Locale + + from ftllexengine.core.semantic_types import LocaleCode + +logger = logging.getLogger(__name__) + +__all__ = [ + "format_currency_for_locale", + "format_datetime_for_locale", + "format_number_for_locale", + "get_iso_code_pattern_for_locale", +] + + +def format_number_for_locale( + *, + locale_code: LocaleCode, + babel_locale: Locale, + value: int | Decimal, + minimum_fraction_digits: int = 0, + maximum_fraction_digits: int = 3, + use_grouping: bool = True, + pattern: str | None = None, + numbering_system: str = "latn", +) -> str: + """Format a number using the supplied Babel locale.""" + if not 0 <= minimum_fraction_digits <= MAX_FORMAT_DIGITS: + msg = ( + f"minimum_fraction_digits must be 0-{MAX_FORMAT_DIGITS}, " + f"got {minimum_fraction_digits}" + ) + raise ValueError(msg) + if not 0 <= maximum_fraction_digits <= MAX_FORMAT_DIGITS: + msg = ( + f"maximum_fraction_digits must be 0-{MAX_FORMAT_DIGITS}, " + f"got {maximum_fraction_digits}" + ) + raise ValueError(msg) + maximum_fraction_digits = max(maximum_fraction_digits, minimum_fraction_digits) + + babel_numbers = get_babel_numbers() + + try: + if pattern is not None: + return str( + babel_numbers.format_decimal( + value, + format=pattern, + locale=babel_locale, + numbering_system=numbering_system, + ) + ) + + integer_part = "#,##0" if use_grouping else "0" + + if maximum_fraction_digits == 0: + format_pattern = integer_part + elif minimum_fraction_digits == maximum_fraction_digits: + decimal_part = "0" * minimum_fraction_digits + format_pattern = f"{integer_part}.{decimal_part}" + else: + required = "0" * minimum_fraction_digits + optional = "#" * (maximum_fraction_digits - minimum_fraction_digits) + format_pattern = f"{integer_part}.{required}{optional}" + + return str( + babel_numbers.format_decimal( + value, + format=format_pattern, + locale=babel_locale, + numbering_system=numbering_system, + ) + ) + + except (ValueError, TypeError, InvalidOperation, AttributeError, KeyError) as e: + fallback = str(value) + diagnostic = ErrorTemplate.formatting_failed("NUMBER", str(value), str(e)) + context = FrozenErrorContext( + input_value=str(value), + locale_code=locale_code, + parse_type="number", + fallback_value=fallback, + ) + raise FrozenFluentError( + str(diagnostic), + ErrorCategory.FORMATTING, + diagnostic=diagnostic, + context=context, + ) from e + + +def format_datetime_for_locale( + *, + locale_code: LocaleCode, + babel_locale: Locale, + value: date | datetime | str, + date_style: Literal["short", "medium", "long", "full"] = "medium", + time_style: Literal["short", "medium", "long", "full"] | None = None, + pattern: str | None = None, +) -> str: + """Format a date or datetime using the supplied Babel locale.""" + babel_dates = get_babel_dates() + dt_value: datetime | date + + if isinstance(value, str): + try: + dt_value = datetime.fromisoformat(value) + except ValueError as e: + fallback = FALLBACK_FUNCTION_ERROR.format(name="DATETIME") + diagnostic = ErrorTemplate.formatting_failed( + "DATETIME", value, "not ISO 8601 format" + ) + context = FrozenErrorContext( + input_value=value, + locale_code=locale_code, + parse_type="datetime", + fallback_value=fallback, + ) + raise FrozenFluentError( + str(diagnostic), + ErrorCategory.FORMATTING, + diagnostic=diagnostic, + context=context, + ) from e + elif isinstance(value, datetime): + dt_value = value + else: + dt_value = value + + if isinstance(dt_value, date) and not isinstance(dt_value, datetime) and ( + time_style is not None or pattern is not None + ): + dt_value = datetime( # noqa: DTZ001 - date carries no tz; midnight promotion is explicitly naive + dt_value.year, + dt_value.month, + dt_value.day, + ) + + try: + if pattern is not None: + return str( + babel_dates.format_datetime( + dt_value, + format=pattern, + locale=babel_locale, + ) + ) + + if time_style: + date_str = babel_dates.format_date( + dt_value, + format=date_style, + locale=babel_locale, + ) + time_str = babel_dates.format_time( + dt_value, + format=time_style, + locale=babel_locale, + ) + datetime_pattern = ( + babel_locale.datetime_formats.get(date_style) + or babel_locale.datetime_formats.get("medium") + or babel_locale.datetime_formats.get("short") + or "{1} {0}" + ) + if hasattr(datetime_pattern, "format"): + return str(datetime_pattern.format(time_str, date_str)) + return str(datetime_pattern).format(time_str, date_str) + + return str( + babel_dates.format_date( + dt_value, + format=date_style, + locale=babel_locale, + ) + ) + + except (ValueError, OverflowError, AttributeError, KeyError) as e: + fallback = dt_value.isoformat() + diagnostic = ErrorTemplate.formatting_failed("DATETIME", str(dt_value), str(e)) + context = FrozenErrorContext( + input_value=str(dt_value), + locale_code=locale_code, + parse_type="datetime", + fallback_value=fallback, + ) + raise FrozenFluentError( + str(diagnostic), + ErrorCategory.FORMATTING, + diagnostic=diagnostic, + context=context, + ) from e + + +def format_currency_for_locale( + *, + locale_code: LocaleCode, + babel_locale: Locale, + value: int | Decimal, + currency: str, + currency_display: Literal["symbol", "code", "name"] = "symbol", + pattern: str | None = None, + use_grouping: bool = True, + currency_digits: bool = True, + numbering_system: str = "latn", + debug_logger: logging.Logger | None = None, +) -> str: + """Format a currency value using the supplied Babel locale.""" + babel_numbers = get_babel_numbers() + + try: + if pattern is not None: + return str( + babel_numbers.format_currency( + value, + currency, + format=pattern, + locale=babel_locale, + currency_digits=False, + group_separator=use_grouping, + numbering_system=numbering_system, + ) + ) + + if currency_display == "name": + format_type: Literal["name", "standard", "accounting"] = "name" + return str( + babel_numbers.format_currency( + value, + currency, + locale=babel_locale, + currency_digits=currency_digits, + format_type=format_type, + group_separator=use_grouping, + numbering_system=numbering_system, + ) + ) + + if currency_display == "code": + code_pattern = get_iso_code_pattern_for_locale( + locale_code=locale_code, + babel_locale=babel_locale, + debug_logger=debug_logger, + ) + if code_pattern is not None: + return str( + babel_numbers.format_currency( + value, + currency, + format=code_pattern, + locale=babel_locale, + currency_digits=currency_digits, + group_separator=use_grouping, + numbering_system=numbering_system, + ) + ) + + return str( + babel_numbers.format_currency( + value, + currency, + locale=babel_locale, + currency_digits=currency_digits, + format_type="standard", + group_separator=use_grouping, + numbering_system=numbering_system, + ) + ) + + except (ValueError, TypeError, InvalidOperation, AttributeError, KeyError) as e: + fallback = f"{currency} {value}" + diagnostic = ErrorTemplate.formatting_failed( + "CURRENCY", f"{currency} {value}", str(e) + ) + context = FrozenErrorContext( + input_value=f"{currency} {value}", + locale_code=locale_code, + parse_type="currency", + fallback_value=fallback, + ) + raise FrozenFluentError( + str(diagnostic), + ErrorCategory.FORMATTING, + diagnostic=diagnostic, + context=context, + ) from e + + +def get_iso_code_pattern_for_locale( + *, + locale_code: LocaleCode, + babel_locale: Locale, + debug_logger: logging.Logger | None = None, +) -> str | None: + """Return a CLDR currency pattern rewritten for ISO code display.""" + active_logger = logger if debug_logger is None else debug_logger + locale_currency_formats = babel_locale.currency_formats + standard_pattern = locale_currency_formats.get("standard") + if standard_pattern is None or not hasattr(standard_pattern, "pattern"): + return None + + raw_pattern = standard_pattern.pattern + if "\xa4" not in raw_pattern: + active_logger.debug( + "Currency pattern for locale %s lacks placeholder", + locale_code, + ) + return None + + return str(raw_pattern.replace("\xa4", "\xa4\xa4")) diff --git a/src/ftllexengine/runtime/plural_rules.py b/src/ftllexengine/runtime/plural_rules.py index d971d314..9936f945 100644 --- a/src/ftllexengine/runtime/plural_rules.py +++ b/src/ftllexengine/runtime/plural_rules.py @@ -49,25 +49,25 @@ def select_plural_category( BabelImportError: If Babel is not installed Examples: - >>> select_plural_category(0, "lv_LV") + >>> select_plural_category(0, "lv_LV") # doctest: +SKIP 'zero' - >>> select_plural_category(1, "en_US") + >>> select_plural_category(1, "en_US") # doctest: +SKIP 'one' - >>> select_plural_category(1, "en_US", precision=2) # "1.00" has v=2 + >>> select_plural_category(1, "en_US", precision=2) # "1.00" has v=2 # doctest: +SKIP 'other' - >>> select_plural_category(5, "ru_RU") + >>> select_plural_category(5, "ru_RU") # doctest: +SKIP 'many' - >>> select_plural_category(2, "ar_SA") + >>> select_plural_category(2, "ar_SA") # doctest: +SKIP 'two' - >>> select_plural_category(42, "ja_JP") + >>> select_plural_category(42, "ja_JP") # doctest: +SKIP 'other' - >>> select_plural_category(1, "en_US", ordinal=True) + >>> select_plural_category(1, "en_US", ordinal=True) # doctest: +SKIP 'one' - >>> select_plural_category(2, "en_US", ordinal=True) + >>> select_plural_category(2, "en_US", ordinal=True) # doctest: +SKIP 'two' - >>> select_plural_category(3, "en_US", ordinal=True) + >>> select_plural_category(3, "en_US", ordinal=True) # doctest: +SKIP 'few' - >>> select_plural_category(11, "en_US", ordinal=True) + >>> select_plural_category(11, "en_US", ordinal=True) # doctest: +SKIP 'other' Architecture: diff --git a/src/ftllexengine/runtime/resolution_context.py b/src/ftllexengine/runtime/resolution_context.py index 0d12d794..9bdc998c 100644 --- a/src/ftllexengine/runtime/resolution_context.py +++ b/src/ftllexengine/runtime/resolution_context.py @@ -29,6 +29,7 @@ ErrorTemplate, FrozenFluentError, ) +from ftllexengine.diagnostics.depth import resolution_depth_error from ftllexengine.integrity import DataIntegrityError, IntegrityContext __all__ = ["GlobalDepthGuard", "ResolutionContext"] @@ -149,7 +150,8 @@ class ResolutionContext: def __post_init__(self) -> None: """Initialize the expression depth guard with configured max depth.""" self._expression_guard = DepthGuard( - max_depth=self.max_expression_depth + max_depth=self.max_expression_depth, + error_factory=resolution_depth_error, ) def push(self, key: str) -> None: diff --git a/src/ftllexengine/runtime/resolver.py b/src/ftllexengine/runtime/resolver.py index 0311a4aa..c43e1db7 100644 --- a/src/ftllexengine/runtime/resolver.py +++ b/src/ftllexengine/runtime/resolver.py @@ -16,36 +16,32 @@ from __future__ import annotations import logging -from collections.abc import Mapping, Sequence -from decimal import Decimal from typing import TYPE_CHECKING from ftllexengine.constants import ( DEFAULT_MAX_EXPANSION_SIZE, - FALLBACK_FUNCTION_ERROR, - FALLBACK_INVALID, FALLBACK_MISSING_MESSAGE, FALLBACK_MISSING_TERM, - FALLBACK_MISSING_VARIABLE, MAX_DEPTH, ) from ftllexengine.core import depth_clamp -from ftllexengine.core.babel_compat import BabelImportError -from ftllexengine.core.value_types import FluentNumber from ftllexengine.diagnostics import ( ErrorCategory, ErrorTemplate, FrozenFluentError, ) -from ftllexengine.runtime.plural_rules import select_plural_category +from ftllexengine.runtime.plural_rules import ( + select_plural_category as _select_plural_category, +) from ftllexengine.runtime.resolution_context import ( GlobalDepthGuard, ResolutionContext, ) +from ftllexengine.runtime.resolver_runtime import _ResolverRuntimeMixin +from ftllexengine.runtime.resolver_selection import _ResolverSelectionMixin from ftllexengine.syntax import ( Expression, FunctionReference, - Identifier, Message, MessageReference, NumberLiteral, @@ -57,15 +53,18 @@ TermReference, TextElement, VariableReference, - Variant, ) if TYPE_CHECKING: + from collections.abc import Mapping + from ftllexengine.core.value_types import FluentValue from ftllexengine.runtime.function_bridge import FunctionRegistry __all__ = ["FluentResolver", "GlobalDepthGuard", "ResolutionContext"] +select_plural_category = _select_plural_category + logger = logging.getLogger(__name__) # Unicode bidirectional isolation characters per Unicode TR9. @@ -73,13 +72,8 @@ UNICODE_FSI: str = "\u2068" # U+2068 FIRST STRONG ISOLATE UNICODE_PDI: str = "\u2069" # U+2069 POP DIRECTIONAL ISOLATE -# Maximum recursion depth for fallback string generation in _get_fallback_for_placeable. -# Fallback rendering is purely diagnostic (shown when resolution fails), so a shallow -# depth limit prevents runaway recursion while still capturing meaningful context. -_FALLBACK_MAX_DEPTH: int = 10 - -class FluentResolver: +class FluentResolver(_ResolverRuntimeMixin, _ResolverSelectionMixin): """Resolves Fluent messages to strings. Aligned with Mozilla python-fluent error handling: @@ -525,478 +519,3 @@ def _resolve_term_reference( return self._resolve_pattern(pattern, term_args, errors, context) finally: context.pop() - - def _find_exact_variant( - self, - variants: Sequence[Variant], - selector_value: FluentValue, - selector_str: str, - ) -> Variant | None: - """Pass 1: Find variant with exact string or number match. - - Args: - variants: Sequence of variants to search - selector_value: Resolved selector value (for numeric comparison) - selector_str: String representation of selector (for string comparison) - - Returns: - Matching variant or None if no exact match found. - """ - # Compute numeric selector once before the loop. Only int, Decimal, and FluentNumber - # are valid numeric selector types (float is excluded from FluentValue). - # bool is excluded: isinstance(True, int) is True but str(True) == "True" is not - # a valid Decimal literal. FluentNumber wraps NUMBER()-formatted values while - # preserving the original numeric value for matching (.value attribute). - numeric_for_match: int | Decimal | None = None - if isinstance(selector_value, FluentNumber): - numeric_for_match = selector_value.value - elif isinstance(selector_value, (int, Decimal)) and not isinstance(selector_value, bool): - numeric_for_match = selector_value - - # Pre-convert selector to Decimal once for all NumberLiteral comparisons in the loop. - # Decimal(raw_str) per variant still executes inside the loop since raw_str varies. - # NumberLiteral.__post_init__ guarantees raw is a parseable finite number. - sel_decimal: Decimal | None = None - if numeric_for_match is not None: - sel_decimal = Decimal(str(numeric_for_match)) - - for variant in variants: - match variant.key: - case Identifier(name=key_name): - if key_name == selector_str: - return variant - case NumberLiteral(raw=raw_str): - if sel_decimal is not None and Decimal(raw_str) == sel_decimal: - return variant - return None - - def _find_plural_variant( - self, - variants: Sequence[Variant], - plural_category: str, - ) -> Variant | None: - """Pass 2: Find variant matching plural category. - - Args: - variants: Sequence of variants to search - plural_category: CLDR plural category (zero, one, two, few, many, other) - - Returns: - Matching variant or None if no plural category match found. - """ - for variant in variants: - match variant.key: - case Identifier(name=key_name): - if key_name == plural_category: - return variant - return None - - def _find_default_variant(self, variants: Sequence[Variant]) -> Variant | None: - """Find the default variant (marked with *). - - Args: - variants: Sequence of variants to search - - Returns: - Default variant or None if no default marked. - """ - for variant in variants: - if variant.default: - return variant - return None - - def _resolve_select_expression( - self, - expr: SelectExpression, - args: Mapping[str, FluentValue], - errors: list[FrozenFluentError], - context: ResolutionContext, - ) -> str: - """Resolve select expression by matching variant. - - Matching priority (two-pass linear scan): - 1. Exact string/number match (pass 1) - 2. Plural category match for numeric selectors (pass 2) - 3. Default variant - 4. First variant (fallback) - - For typical FTL files with <5 variants, linear scan is more efficient - than building dictionary indices. Exact matches always take precedence - over plural category matches, regardless of variant order in FTL source. - - Error handling: - If the selector expression fails (e.g., missing variable), the error - is collected and resolution falls back to the default variant. This - ensures robustness and matches the Fluent spec behavior. - """ - # Evaluate selector with error resilience. - # If selector evaluation fails (e.g., missing variable), collect the error - # and fall back to the default variant per Fluent spec. - # Wrap in expression_guard to track depth for DoS protection. - try: - with context.expression_guard: - selector_value = self._resolve_expression( - expr.selector, args, errors, context - ) - except FrozenFluentError as e: - # Collect the error but don't propagate - fall back to default variant - errors.append(e) - return self._resolve_fallback_variant(expr, args, errors, context) - - # Use _format_value for consistent string representation. - # This ensures: - # - None -> "" (falls through to default variant) - # - bool -> "true"/"false" (matches FTL variant keys, not Python "True"/"False") - # - FluentNumber -> formatted string (display representation) - # - Other types -> str() representation - selector_str = self._format_value(selector_value) - - # Pass 1: Exact match (takes priority) - exact_match = self._find_exact_variant(expr.variants, selector_value, selector_str) - if exact_match is not None: - return self._resolve_pattern(exact_match.value, args, errors, context) - - # Pass 2: Plural category match (numeric selectors only) - # FluentValue includes Decimal for currency/financial values. - # FluentNumber wraps formatted numbers while preserving numeric identity. - # float is not in FluentValue: only int and Decimal are valid numeric types. - # Note: Exclude bool since isinstance(True, int) is True in Python, - # but booleans should match [true]/[false] variants, not plural categories. - # - # Extract numeric value and precision from FluentNumber for plural matching. - numeric_value: int | Decimal | None = None - precision: int | None = None - if isinstance(selector_value, FluentNumber): - numeric_value = selector_value.value - precision = selector_value.precision - elif isinstance(selector_value, (int, Decimal)) and not isinstance( - selector_value, bool - ): - numeric_value = selector_value - - if numeric_value is not None: - # Try plural category matching (requires Babel for CLDR data). - # If Babel is not installed (parser-only mode), collect error and - # fall through to default variant. - try: - # Pass precision to ensure CLDR v operand (fraction digit count) is correct. - # Example: NUMBER(1, minimumFractionDigits: 2) creates FluentNumber with - # precision=2, which makes select_plural_category treat it as "1.00" (v=2), - # selecting "other" instead of "one" in English plural rules. - plural_category = select_plural_category(numeric_value, self._locale, precision) - plural_match = self._find_plural_variant(expr.variants, plural_category) - if plural_match is not None: - return self._resolve_pattern( - plural_match.value, args, errors, context - ) - except BabelImportError: - # Babel not installed - collect error, fall through to default - diag = ErrorTemplate.plural_support_unavailable() - errors.append( - FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) - ) - - # Fallback: default variant - default_variant = self._find_default_variant(expr.variants) - if default_variant is not None: - return self._resolve_pattern(default_variant.value, args, errors, context) - - # Fallback: first variant - if expr.variants: - return self._resolve_pattern(expr.variants[0].value, args, errors, context) - - diag = ErrorTemplate.no_variants() - raise FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) - - def _resolve_fallback_variant( - self, - expr: SelectExpression, - args: Mapping[str, FluentValue], - errors: list[FrozenFluentError], - context: ResolutionContext, - ) -> str: - """Resolve fallback variant when selector evaluation fails. - - Attempts to resolve in order: - 1. Default variant (marked with *) - 2. First variant - - Args: - expr: The SelectExpression to resolve - args: Arguments for pattern resolution - errors: Error list for error collection - context: Resolution context - - Returns: - Resolved variant pattern string - - Raises: - FrozenFluentError: If no variants exist (category=RESOLUTION) - """ - # Try default variant first - default_variant = self._find_default_variant(expr.variants) - if default_variant is not None: - return self._resolve_pattern(default_variant.value, args, errors, context) - - # Fall back to first variant - if expr.variants: - return self._resolve_pattern(expr.variants[0].value, args, errors, context) - - diag = ErrorTemplate.no_variants() - raise FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) - - def _resolve_function_call( - self, - func_ref: FunctionReference, - args: Mapping[str, FluentValue], - errors: list[FrozenFluentError], - context: ResolutionContext, - ) -> FluentValue: - """Resolve function call. - - Uses FunctionRegistry to handle camelCase → snake_case parameter conversion. - Uses metadata system to determine if locale injection is needed. - - Exception Handling: - FrozenFluentError from registry (TypeError/ValueError) propagates to - pattern-level handler. Other exceptions (bugs in custom functions) - are caught here to provide graceful degradation per Fluent spec. - This ensures resolution "never fails catastrophically." - - Security: - Wraps argument resolution in expression_guard to prevent DoS via deeply - nested function calls like NUMBER(A(B(C(...)))). Each nested call - consumes stack frames during resolution. - - Returns FluentValue which the resolver will convert to string for final output. - """ - func_name = func_ref.id.name - - # Evaluate arguments within depth guard (DoS prevention) - # Function arguments can contain nested function calls: NUMBER(ABS(FLOOR($x))) - # Without depth tracking, deeply nested calls can exhaust the Python stack. - with context.expression_guard: - positional_values: list[FluentValue] = [ - self._resolve_expression(arg, args, errors, context) - for arg in func_ref.arguments.positional - ] - - # Evaluate named arguments (camelCase from FTL) - named_values: dict[str, FluentValue] = { - arg.name.name: self._resolve_expression(arg.value, args, errors, context) - for arg in func_ref.arguments.named - } - - # Check if locale injection is needed (metadata-driven, not magic tuple) - # This correctly handles custom functions with same name as built-ins - if self._function_registry.should_inject_locale(func_name): - # Validate arity before injection to provide clear error messages - # instead of opaque TypeError from incorrect argument positioning - expected_args = self._function_registry.get_expected_positional_args(func_name) - if expected_args is not None and len(positional_values) != expected_args: - diag = ErrorTemplate.function_arity_mismatch( - func_name, expected_args, len(positional_values) - ) - raise FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) - - # Built-in formatting functions expect signature: func(value, locale, *, ...) - # Append locale after positional args (FTL passes exactly one value arg, - # so this places locale as the second positional argument by contract) - # FunctionRegistry.call() handles camelCase -> snake_case conversion - return self._call_function_safe( - func_name, - [*positional_values, self._locale], - named_values, - errors, - ) - - # Custom function or built-in that doesn't need locale: pass args as-is - return self._call_function_safe( - func_name, - positional_values, - named_values, - errors, - ) - - def _call_function_safe( - self, - func_name: str, - positional: list[FluentValue], - named: dict[str, FluentValue], - errors: list[FrozenFluentError], - ) -> FluentValue: - """Call a registered function with graceful error handling. - - FrozenFluentError from the registry propagates directly (already - structured). Any other exception is caught and converted to a - diagnostic error per Fluent spec requirement that resolution must - "never fail catastrophically." - - Args: - func_name: Function name as it appears in FTL. - positional: Positional argument values (locale may be appended). - named: Named argument values (camelCase keys from FTL). - errors: Mutable error accumulator for the current resolution. - - Returns: - Function result on success, or fallback error string on failure. - """ - try: - return self._function_registry.call(func_name, positional, named) - except FrozenFluentError: - # Already structured error from registry (TypeError/ValueError), - # let it propagate to pattern-level handler - raise - except Exception as e: # noqa: BLE001 - spec requires graceful degradation for custom functions - # Intentionally broad: Fluent spec requires graceful degradation - # for ANY exception from custom functions. - logger.warning( - "Custom function %s raised %s: %s", - func_name, - type(e).__name__, - str(e), - ) - diag = ErrorTemplate.function_failed( - func_name, f"Uncaught exception: {type(e).__name__}: {e}" - ) - errors.append( - FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) - ) - return FALLBACK_FUNCTION_ERROR.format(name=func_name) - - def _format_value(self, value: FluentValue) -> str: - """Format FluentValue to string for final output. - - Handles all types in the FluentValue union: - - str: returned as-is - - bool: "true"/"false" (Fluent convention) - - int: string representation - - Decimal/datetime/date/FluentNumber: string representation via __str__ - - Sequence/Mapping: type name (collections are for function args, not display) - - None: empty string - - float is not in FluentValue and is explicitly rejected here at runtime. - Mypy strict mode catches float misuse at statically typed call sites, but - custom functions registered via FunctionRegistry return Python values through - function_bridge.py without return-type validation — a float return bypasses - mypy entirely. Without this guard, float silently produces IEEE 754 noise - (e.g., "3.1400000000000001") in financial output. Use int for whole amounts - or Decimal for fractional amounts. - - The float case raises FrozenFluentError (not TypeError) so callers' - ``except FrozenFluentError`` handlers catch it and return a graceful - fallback per Fluent spec requirement that resolution never fails - catastrophically. TypeError would escape those handlers entirely. - - Pattern order rationale: - - str before Sequence: str implements Sequence; must match str first to avoid - the collection guard path. - - bool before int: bool is a subclass of int; must match bool first to produce - "true"/"false" rather than "1"/"0". - - float before the wildcard: explicit rejection as FrozenFluentError so the - caller's error handler catches it; float is not in FluentValue but the - wildcard would silently accept it. - - None as explicit case: avoids the collection guard and the str(None) path. - - Sequence | Mapping before the default str() fallback: guards against - exponential str() expansion on deeply shared collection structures. - """ - match value: - case str(): - return value - # bool must precede int: isinstance(True, int) is True. - case bool(): - return "true" if value else "false" - case int(): - return str(value) - case None: - return "" - # Explicit float rejection. Statically unreachable for typed callers - # (FluentValue excludes float), but custom functions registered via - # FunctionRegistry return untyped Python values — a float return bypasses - # mypy and would silently reach str() without this guard, producing IEEE - # 754 noise in financial output (e.g., "3.1400000000000001"). - # FrozenFluentError (not TypeError) ensures callers' except handlers - # catch this and produce a graceful fallback per Fluent spec. - case float(): - msg = ( - f"float value {value!r} is not a valid FluentValue. " - "IEEE 754 float cannot represent most decimal fractions exactly. " - "Use int for whole amounts or decimal.Decimal for fractional amounts." - ) - raise FrozenFluentError(msg, ErrorCategory.RESOLUTION) - # Guard against str() on collections (Sequence/Mapping). These are valid - # FluentValue types for passing structured data to custom functions, but - # str() on deeply nested/shared structures causes exponential expansion - # (e.g., DAG with depth 30 → 2^30 nodes in str() output). - case Sequence() | Mapping(): - return f"[{type(value).__name__}]" - # Handles Decimal, datetime, date, and FluentNumber via __str__. - case _: - return str(value) - - def _get_fallback_for_placeable( - self, expr: Expression, depth: int = _FALLBACK_MAX_DEPTH - ) -> str: - """Get readable fallback for failed placeable per Fluent spec. - - Per Fluent specification, when a placeable fails to resolve, - we return a human-readable representation of what was attempted. - This is superior to {ERROR: ...} as it: - 1. Doesn't expose internal diagnostics - 2. Shows what the translator expected - 3. Makes errors visible but not alarming - - Args: - expr: The expression that failed to resolve - depth: Remaining recursion depth (prevents stack overflow) - - Returns: - Readable fallback string - - Examples: - VariableReference($name) -> "{$name}" - MessageReference(welcome) -> "{welcome}" - TermReference(-brand) -> "{-brand}" - FunctionReference(NUMBER) -> "{NUMBER(...)}" - SelectExpression($count) -> "{{$count} -> ...}" - """ - # Depth protection: prevent recursion overflow on adversarial ASTs - if depth <= 0: - return FALLBACK_INVALID - - match expr: - case VariableReference(): - return FALLBACK_MISSING_VARIABLE.format(name=expr.id.name) - case MessageReference(): - msg_id = expr.id.name - if expr.attribute: - msg_id = f"{msg_id}.{expr.attribute.name}" - return FALLBACK_MISSING_MESSAGE.format(id=msg_id) - case TermReference(): - term_id = expr.id.name - if expr.attribute: - term_id = f"{term_id}.{expr.attribute.name}" - return FALLBACK_MISSING_TERM.format(name=term_id) - case FunctionReference(): - return FALLBACK_FUNCTION_ERROR.format(name=expr.id.name) - case SelectExpression(): - # Provide context by showing the selector expression - selector_fallback = self._get_fallback_for_placeable(expr.selector, depth - 1) - return f"{{{selector_fallback} -> ...}}" - case Placeable(): - # Nested placeable: delegate to the inner expression - return self._get_fallback_for_placeable(expr.expression, depth - 1) - case StringLiteral(): - # Literal string value is the best fallback for a failed string literal - return expr.value - case NumberLiteral(): - # Raw source representation is the best fallback for a failed number literal - return expr.raw - case _: - # Statically unreachable (Expression union is exhaustively covered above), - # but defensively necessary: _get_fallback_for_placeable is an error-recovery - # function whose contract is to ALWAYS return a string. Tests intentionally - # bypass the type system (passing Mock objects) to verify graceful degradation. - # assert_never() would change the contract from "always return" to "may raise", - # breaking the fallback guarantee. This wildcard is the safety net. - return FALLBACK_INVALID # type: ignore[unreachable] diff --git a/src/ftllexengine/runtime/resolver.py,cover b/src/ftllexengine/runtime/resolver.py,cover deleted file mode 100644 index 46aab997..00000000 --- a/src/ftllexengine/runtime/resolver.py,cover +++ /dev/null @@ -1,954 +0,0 @@ -> """Fluent message resolver - converts AST to formatted strings. - -> Resolves patterns by walking AST, interpolating variables, evaluating selectors. -> Python 3.13+. Indirect dependency: Babel (via plural_rules). - -> Thread Safety: -> Resolution state is passed explicitly via ResolutionContext, making the -> resolver fully reentrant and compatible with async frameworks. Each -> resolution operation creates its own isolated context. - -> Global depth tracking uses contextvars for async-safe per-task state, -> preventing custom functions from bypassing depth limits by calling -> back into bundle.format_pattern(). -> """ - -> from __future__ import annotations - -> from collections.abc import Mapping, Sequence -> from contextvars import ContextVar, Token -> from dataclasses import dataclass, field -> from decimal import Decimal, InvalidOperation - -> from ftllexengine.constants import ( -> FALLBACK_FUNCTION_ERROR, -> FALLBACK_INVALID, -> FALLBACK_MISSING_MESSAGE, -> FALLBACK_MISSING_TERM, -> FALLBACK_MISSING_VARIABLE, -> MAX_DEPTH, -> ) -> from ftllexengine.core.babel_compat import BabelImportError -> from ftllexengine.core.depth_guard import DepthGuard, depth_clamp -> from ftllexengine.core.errors import FormattingError -> from ftllexengine.diagnostics import ( -> ErrorTemplate, -> FluentCyclicReferenceError, -> FluentError, -> FluentReferenceError, -> FluentResolutionError, -> ) -> from ftllexengine.runtime.function_bridge import FluentNumber, FluentValue, FunctionRegistry -> from ftllexengine.runtime.plural_rules import select_plural_category -> from ftllexengine.syntax import ( -> Expression, -> FunctionReference, -> Identifier, -> Message, -> MessageReference, -> NumberLiteral, -> Pattern, -> Placeable, -> SelectExpression, -> StringLiteral, -> Term, -> TermReference, -> TextElement, -> VariableReference, -> Variant, -> ) - - # Re-export FluentValue for public API compatibility - # Canonical definition is in function_bridge.py to avoid circular imports -> __all__ = ["FluentResolver", "FluentValue", "ResolutionContext"] - - # Unicode bidirectional isolation characters per Unicode TR9. - # Used to prevent RTL/LTR text interference when interpolating values. -> UNICODE_FSI: str = "\u2068" # U+2068 FIRST STRONG ISOLATE -> UNICODE_PDI: str = "\u2069" # U+2069 POP DIRECTIONAL ISOLATE - - # Global resolution depth tracking via contextvars. - # Prevents custom functions from bypassing depth limits by calling back into - # bundle.format_pattern(). Each async task/thread maintains independent state. - # This tracks the number of nested resolve_message() calls across all contexts. -> _global_resolution_depth: ContextVar[int] = ContextVar( -> "fluent_resolution_depth", default=0 -> ) - - -> class GlobalDepthGuard: -> """Context manager for tracking global resolution depth across format_pattern calls. - -> Uses contextvars for async-safe per-task state. This prevents custom functions -> from bypassing depth limits by creating new ResolutionContext instances. - -> Usage: -> with GlobalDepthGuard(max_depth=100): - # Nested format_pattern calls are tracked globally -> result = resolver.resolve_message(message, args) - -> Security: -> Without global depth tracking, a malicious custom function could: -> 1. Receive control during resolution -> 2. Call bundle.format_pattern() which creates a fresh ResolutionContext -> 3. Repeat step 2 recursively, bypassing per-context depth limits -> 4. Eventually cause stack overflow - -> GlobalDepthGuard prevents this by tracking depth across all contexts. -> """ - -> __slots__ = ("_max_depth", "_token") - -> def __init__(self, max_depth: int = MAX_DEPTH) -> None: -> """Initialize guard with maximum depth limit.""" -> self._max_depth = depth_clamp(max_depth) -> self._token: Token[int] | None = None - -> def __enter__(self) -> GlobalDepthGuard: -> """Enter guarded section, increment global depth.""" -> current = _global_resolution_depth.get() -> if current >= self._max_depth: -> raise FluentResolutionError( -> ErrorTemplate.expression_depth_exceeded(self._max_depth) -> ) -> self._token = _global_resolution_depth.set(current + 1) -> return self - -> def __exit__( -> self, -> exc_type: type[BaseException] | None, -> exc_val: BaseException | None, -> exc_tb: object, -> ) -> None: -> """Exit guarded section, restore previous depth.""" -> if self._token is not None: -> _global_resolution_depth.reset(self._token) - - -> @dataclass(slots=True) -> class ResolutionContext: -> """Explicit context for message resolution. - -> Replaces thread-local state with explicit parameter passing for: -> - Thread safety without global state -> - Async framework compatibility (no thread-local conflicts) -> - Easier testing (no state reset needed) -> - Clear dependency flow - -> Performance: Uses both list (for ordered path) and set (for O(1) lookup) -> to optimize cycle detection while preserving path information for errors. - -> Instance Lifecycle: -> Each resolution operation creates a fresh ResolutionContext instance. -> This ensures complete isolation between concurrent resolutions. -> The per-resolution DepthGuard allocation is intentional for thread safety; -> object pooling is not used to avoid synchronization overhead. - -> Attributes: -> stack: Resolution stack for cycle detection (message keys being resolved) -> _seen: Set for O(1) membership checking (internal) -> max_depth: Maximum resolution depth (prevents stack overflow) -> max_expression_depth: Maximum expression nesting depth -> _expression_guard: DepthGuard for expression depth tracking (internal) -> """ - -> stack: list[str] = field(default_factory=list) -> _seen: set[str] = field(default_factory=set) -> max_depth: int = MAX_DEPTH -> max_expression_depth: int = MAX_DEPTH -> _expression_guard: DepthGuard = field(init=False) - -> def __post_init__(self) -> None: -> """Initialize the expression depth guard with configured max depth.""" -> self._expression_guard = DepthGuard(max_depth=self.max_expression_depth) - -> def push(self, key: str) -> None: -> """Push message key onto resolution stack.""" -> self.stack.append(key) -> self._seen.add(key) - -> def pop(self) -> str: -> """Pop message key from resolution stack.""" -> key = self.stack.pop() -> self._seen.discard(key) -> return key - -> def contains(self, key: str) -> bool: -> """Check if key is in resolution stack (cycle detection). - -> Performance: O(1) set lookup instead of O(N) list scan. -> """ -> return key in self._seen - -> @property -> def depth(self) -> int: -> """Current resolution depth.""" -> return len(self.stack) - -> def is_depth_exceeded(self) -> bool: -> """Check if maximum depth has been exceeded.""" -> return self.depth >= self.max_depth - -> def get_cycle_path(self, key: str) -> list[str]: -> """Get the cycle path for error reporting.""" -> return [*self.stack, key] - -> @property -> def expression_guard(self) -> DepthGuard: -> """Get the expression depth guard for context manager use. - -> Usage: -> with context.expression_guard: -> result = self._resolve_expression(nested_expr, ...) -> """ -> return self._expression_guard - -> @property -> def expression_depth(self) -> int: -> """Current expression nesting depth (read-only, delegates to guard).""" -> return self._expression_guard.current_depth - - -> class FluentResolver: -> """Resolves Fluent messages to strings. - -> Aligned with Mozilla python-fluent error handling: -> - Collects errors instead of embedding them in output -> - Returns (result, errors) tuples -> - Provides readable fallbacks per Fluent specification - -> Thread Safety: -> Uses explicit ResolutionContext instead of thread-local state for -> full reentrancy and async framework compatibility. -> """ - -> __slots__ = ( -> "_max_nesting_depth", -> "function_registry", -> "locale", -> "messages", -> "terms", -> "use_isolating", -> ) - -> def __init__( -> self, -> locale: str, -> messages: dict[str, Message], -> terms: dict[str, Term], -> *, -> function_registry: FunctionRegistry, -> use_isolating: bool = True, -> max_nesting_depth: int = MAX_DEPTH, -> ) -> None: -> """Initialize resolver. - -> Args: -> locale: Locale code for plural selection -> messages: Message registry -> terms: Term registry -> function_registry: Function registry with camelCase conversion (keyword-only) -> use_isolating: Wrap interpolated values in Unicode bidi marks (keyword-only) -> max_nesting_depth: Maximum resolution depth limit (keyword-only) -> """ -> self.locale = locale -> self.use_isolating = use_isolating -> self.messages = messages -> self.terms = terms -> self.function_registry = function_registry -> self._max_nesting_depth = depth_clamp(max_nesting_depth) - -> def resolve_message( -> self, -> message: Message, -> args: Mapping[str, FluentValue] | None = None, -> attribute: str | None = None, -> *, -> context: ResolutionContext | None = None, -> ) -> tuple[str, tuple[FluentError, ...]]: -> """Resolve message to final string with error collection. - -> Mozilla python-fluent aligned API: -> - Returns (result, errors) tuple -> - Collects all errors during resolution -> - Never raises exceptions (graceful degradation) - -> Args: -> message: Message AST -> args: Variable arguments -> attribute: Attribute name (optional) -> context: Resolution context for cycle detection and depth tracking. -> If None, creates a fresh context for this resolution. - -> Typical Usage: Leave as None (default). Each format_pattern() -> call creates a fresh context automatically. - -> Advanced Usage: Provide a custom ResolutionContext when: -> - Batching multiple resolutions with shared cycle detection -> - Implementing custom depth limits via ResolutionContext(max_depth=N) -> - Building resolution pipelines that need cross-call state - -> See ResolutionContext class for configuration options. - -> Returns: -> Tuple of (formatted_string, errors) -> - formatted_string: Best-effort output (never empty) -> - errors: Tuple of FluentError instances encountered (immutable) - -> Note: -> Per Fluent spec, resolution never fails catastrophically. -> Errors are collected and fallback values are used. - -> Attribute resolution uses last-wins semantics for duplicate attribute -> names. If a message contains multiple attributes with the same name -> (which triggers a validation warning), the last definition is used -> during resolution. This matches the Fluent specification and Mozilla -> reference implementation behavior. -> """ -> errors: list[FluentError] = [] -> args = args or {} - - # Create fresh context if not provided (top-level call) -> if context is None: -> context = ResolutionContext( -> max_depth=self._max_nesting_depth, -> max_expression_depth=self._max_nesting_depth, -> ) - - # Select pattern (value or attribute) -> if attribute: -> attr = next((a for a in reversed(message.attributes) if a.id.name == attribute), None) -> if not attr: -> error = FluentReferenceError( -> ErrorTemplate.attribute_not_found(attribute, message.id.name) -> ) -> errors.append(error) -> fallback = FALLBACK_MISSING_MESSAGE.format(id=f"{message.id.name}.{attribute}") -> return (fallback, tuple(errors)) -> pattern = attr.value -> else: -> if message.value is None: -> error = FluentReferenceError(ErrorTemplate.message_no_value(message.id.name)) -> errors.append(error) -> fallback = FALLBACK_MISSING_MESSAGE.format(id=message.id.name) -> return (fallback, tuple(errors)) -> pattern = message.value - - # Check for circular references using explicit context -> msg_key = f"{message.id.name}.{attribute}" if attribute else message.id.name -> if context.contains(msg_key): -> cycle_path = context.get_cycle_path(msg_key) -> error = FluentCyclicReferenceError(ErrorTemplate.cyclic_reference(cycle_path)) -> errors.append(error) -> fallback = FALLBACK_MISSING_MESSAGE.format(id=msg_key) -> return (fallback, tuple(errors)) - - # Check for maximum depth (prevents stack overflow from long non-cyclic chains) -> if context.is_depth_exceeded(): -> error = FluentReferenceError( -> ErrorTemplate.max_depth_exceeded(msg_key, context.max_depth) -> ) -> errors.append(error) -> fallback = FALLBACK_MISSING_MESSAGE.format(id=msg_key) -> return (fallback, tuple(errors)) - - # Use GlobalDepthGuard to track depth across separate format_pattern() calls. - # This prevents custom functions from bypassing depth limits by calling - # back into bundle.format_pattern() which creates a fresh ResolutionContext. -> try: -> with GlobalDepthGuard(max_depth=context.max_depth): -> context.push(msg_key) -> try: -> result = self._resolve_pattern(pattern, args, errors, context) -> return (result, tuple(errors)) -> finally: -> context.pop() -> except FluentResolutionError as e: - # Global depth exceeded - collect error and return fallback -> errors.append(e) -> fallback = FALLBACK_MISSING_MESSAGE.format(id=msg_key) -> return (fallback, tuple(errors)) - -> def _resolve_pattern( -> self, -> pattern: Pattern, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> str: -> """Resolve pattern by walking elements. - -> Uses list accumulation with join() for O(N) performance instead of -> repeated string concatenation which is O(N^2). -> """ -> parts: list[str] = [] - -> for element in pattern.elements: -> match element: -> case TextElement(): -> parts.append(element.value) -> case Placeable(): -> try: - # Track expression depth to prevent stack overflow from deeply - # nested SelectExpressions. The guard must be applied HERE at - # the Pattern->Placeable entry point, not just in _resolve_expression - # for nested Placeables. Without this, the recursion path: - # Pattern -> Placeable -> SelectExpression -> Variant Pattern -> ... - # bypasses depth limiting entirely. -> with context.expression_guard: -> value = self._resolve_expression( -> element.expression, args, errors, context -> ) -> formatted = self._format_value(value) - - # Wrap in Unicode bidi isolation marks (FSI/PDI) - # Per Unicode TR9, prevents RTL/LTR text interference -> if self.use_isolating: -> parts.append(f"{UNICODE_FSI}{formatted}{UNICODE_PDI}") -> else: -> parts.append(formatted) - -> except (FluentReferenceError, FluentResolutionError) as e: - # Mozilla-aligned error handling: - # Collect error, show readable fallback (not {ERROR: ...}) -> errors.append(e) - # Use pattern matching for type-safe fallback extraction -> match e: -> case FormattingError(fallback_value=fallback): - # FormattingError carries the original value as fallback -> parts.append(fallback) -> case _: -> parts.append(self._get_fallback_for_placeable(element.expression)) - -> return "".join(parts) - -> def _resolve_expression( # noqa: PLR0911 # Complex dispatch logic expected -> self, -> expr: Expression, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> FluentValue: -> """Resolve expression to value. - -> Uses pattern matching (PEP 636) to reduce complexity. -> Each case delegates to a specialized resolver method. - -> Note: PLR0911 (too many returns) is acceptable here - each case -> represents a distinct expression type in the Fluent AST. -> """ -> match expr: -> case SelectExpression(): -> return self._resolve_select_expression(expr, args, errors, context) -> case VariableReference(): -> return self._resolve_variable_reference(expr, args, context) -> case MessageReference(): -> return self._resolve_message_reference(expr, args, errors, context) -> case TermReference(): -> return self._resolve_term_reference(expr, args, errors, context) -> case FunctionReference(): -> return self._resolve_function_call(expr, args, errors, context) -> case StringLiteral(): -> return expr.value -> case NumberLiteral(): -> return expr.value -> case Placeable(): - # Track expression depth to prevent stack overflow from deep nesting -> with context.expression_guard: -> return self._resolve_expression(expr.expression, args, errors, context) -> case _: -> raise FluentResolutionError(ErrorTemplate.unknown_expression(type(expr).__name__)) - -> def _resolve_variable_reference( -> self, -> expr: VariableReference, -> args: Mapping[str, FluentValue], -> context: ResolutionContext, -> ) -> FluentValue: -> """Resolve variable reference from args.""" -> var_name = expr.id.name -> if var_name not in args: - # Include resolution path for debugging nested references -> resolution_path = tuple(context.stack) if context.stack else None -> raise FluentReferenceError( -> ErrorTemplate.variable_not_provided( -> var_name, resolution_path=resolution_path -> ) -> ) -> return args[var_name] - -> def _resolve_message_reference( -> self, -> expr: MessageReference, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> str: -> """Resolve message reference.""" -> msg_id = expr.id.name -> if msg_id not in self.messages: -> raise FluentReferenceError(ErrorTemplate.message_not_found(msg_id)) -> message = self.messages[msg_id] - # resolve_message returns (result, errors) tuple - # Pass the same context for proper cycle detection across nested calls -> result, nested_errors = self.resolve_message( -> message, -> args, -> attribute=expr.attribute.name if expr.attribute else None, -> context=context, -> ) - # Add nested errors to our error list -> errors.extend(nested_errors) -> return result - -> def _resolve_term_reference( -> self, -> expr: TermReference, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> str: -> """Resolve term reference with cycle detection and argument handling. - -> Per Fluent spec, terms can be parameterized with arguments: -> -brand(case: "nominative") - -> Term arguments are evaluated and merged into the resolution context, -> allowing term patterns to reference them as variables. -> """ -> term_id = expr.id.name -> if term_id not in self.terms: -> raise FluentReferenceError(ErrorTemplate.term_not_found(term_id)) -> term = self.terms[term_id] - - # Select pattern (value or attribute) -> if expr.attribute: -> attr = next((a for a in term.attributes if a.id.name == expr.attribute.name), None) -> if not attr: -> raise FluentReferenceError( -> ErrorTemplate.term_attribute_not_found(expr.attribute.name, term_id) -> ) -> pattern = attr.value -> else: -> pattern = term.value - - # Build term key for cycle detection (use -prefix to match FTL syntax) -> term_key = f"-{term_id}.{expr.attribute.name}" if expr.attribute else f"-{term_id}" - - # Check for circular references -> if context.contains(term_key): -> cycle_path = context.get_cycle_path(term_key) -> cycle_error = FluentCyclicReferenceError(ErrorTemplate.cyclic_reference(cycle_path)) -> errors.append(cycle_error) - # term_key already has '-' prefix, strip it for the template -> return FALLBACK_MISSING_TERM.format(name=term_key.lstrip("-")) - - # Check for maximum depth -> if context.is_depth_exceeded(): -> depth_error = FluentReferenceError( -> ErrorTemplate.max_depth_exceeded(term_key, context.max_depth) -> ) -> errors.append(depth_error) - # term_key already has '-' prefix, strip it for the template -> return FALLBACK_MISSING_TERM.format(name=term_key.lstrip("-")) - - # Evaluate term arguments - terms are ISOLATED from calling context - # Per Fluent spec: terms can ONLY access explicitly passed arguments - # https://projectfluent.org/fluent/guide/terms.html - # "Terms receive such data from messages in which they are used" - # This means ONLY explicit parameterization like -term(arg: val), NOT - # implicit access to the calling message's $variables. -> term_args: dict[str, FluentValue] = {} -> if expr.arguments is not None: - # Evaluate named arguments (the primary use case for term args) -> for named_arg in expr.arguments.named: -> arg_name = named_arg.name.name -> arg_value = self._resolve_expression(named_arg.value, args, errors, context) -> term_args[arg_name] = arg_value - - # Evaluate positional arguments (per Fluent spec, term arguments section) - # Reference: https://projectfluent.org/fluent/guide/terms.html#parameterized-terms - # The spec defines term arguments as named only (e.g., -term(case: "gen")). - # Positional arguments in term references are technically parsed but have - # no binding semantics - there's no parameter name to assign the value to. - # We evaluate them to catch expression errors but discard the result. -> if expr.arguments.positional: -> for pos_arg in expr.arguments.positional: -> self._resolve_expression(pos_arg, args, errors, context) - - # Emit warning that positional arguments are ignored -> errors.append( -> FluentResolutionError( -> ErrorTemplate.term_positional_args_ignored( -> term_name=term_id, -> count=len(expr.arguments.positional), -> ) -> ) -> ) - -> try: -> context.push(term_key) -> return self._resolve_pattern(pattern, term_args, errors, context) -> finally: -> context.pop() - -> def _find_exact_variant( -> self, -> variants: Sequence[Variant], -> selector_value: FluentValue, -> selector_str: str, -> ) -> Variant | None: -> """Pass 1: Find variant with exact string or number match. - -> Args: -> variants: Sequence of variants to search -> selector_value: Resolved selector value (for numeric comparison) -> selector_str: String representation of selector (for string comparison) - -> Returns: -> Matching variant or None if no exact match found. -> """ -> for variant in variants: -> match variant.key: -> case Identifier(name=key_name): -> if key_name == selector_str: -> return variant -> case NumberLiteral(raw=raw_str): - # Handle int, float, Decimal, and FluentNumber for exact numeric match. - # Use raw string representation for maximum precision. - # Problem: float(1.1) != Decimal("1.1") due to IEEE 754. - # Solution: Use NumberLiteral.raw (exact source string) for key, - # and convert selector to Decimal via str for comparison. - # Edge case: Float arithmetic results (e.g., 0.1 + 0.2) may produce - # values like 0.30000000000000004 that won't match literal "0.3". - # For exact matching with computed values, use Decimal arithmetic. - # Note: Exclude bool since isinstance(True, int) is True in Python, - # but str(True) == "True" which is not a valid Decimal. - # - # FluentNumber wraps formatted numbers (from NUMBER() function) while - # preserving the original numeric value for matching. Extract .value - # for numeric comparison so [1000] matches FluentNumber(1000, "1,000"). -> numeric_for_match: int | float | Decimal | None = None -> if isinstance(selector_value, FluentNumber): -> numeric_for_match = selector_value.value -> elif ( -> isinstance(selector_value, (int, float, Decimal)) -> and not isinstance(selector_value, bool) -> ): -> numeric_for_match = selector_value - -> if numeric_for_match is not None: - # Use raw string for key to preserve exact source precision -> try: -> key_decimal = Decimal(raw_str) -> except InvalidOperation: - # Malformed NumberLiteral.raw from programmatic AST construction. - # Fall through to next variant instead of crashing. -> continue -> sel_decimal = Decimal(str(numeric_for_match)) -> if key_decimal == sel_decimal: -> return variant -> return None - -> def _find_plural_variant( -> self, -> variants: Sequence[Variant], -> plural_category: str, -> ) -> Variant | None: -> """Pass 2: Find variant matching plural category. - -> Args: -> variants: Sequence of variants to search -> plural_category: CLDR plural category (zero, one, two, few, many, other) - -> Returns: -> Matching variant or None if no plural category match found. -> """ -> for variant in variants: -> match variant.key: -> case Identifier(name=key_name): -> if key_name == plural_category: -> return variant -> return None - -> def _find_default_variant(self, variants: Sequence[Variant]) -> Variant | None: -> """Find the default variant (marked with *). - -> Args: -> variants: Sequence of variants to search - -> Returns: -> Default variant or None if no default marked. -> """ -> for variant in variants: -> if variant.default: -> return variant -> return None - -> def _resolve_select_expression( -> self, -> expr: SelectExpression, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> str: -> """Resolve select expression by matching variant. - -> Matching priority (two-pass linear scan): -> 1. Exact string/number match (pass 1) -> 2. Plural category match for numeric selectors (pass 2) -> 3. Default variant -> 4. First variant (fallback) - -> For typical FTL files with <5 variants, linear scan is more efficient -> than building dictionary indices. Exact matches always take precedence -> over plural category matches, regardless of variant order in FTL source. - -> Error handling: -> If the selector expression fails (e.g., missing variable), the error -> is collected and resolution falls back to the default variant. This -> ensures robustness and matches the Fluent spec behavior. -> """ - # Evaluate selector with error resilience. - # If selector evaluation fails (e.g., missing variable), collect the error - # and fall back to the default variant per Fluent spec. - # Wrap in expression_guard to track depth for DoS protection. -> try: -> with context.expression_guard: -> selector_value = self._resolve_expression( -> expr.selector, args, errors, context -> ) -> except (FluentReferenceError, FluentResolutionError) as e: - # Collect the error but don't propagate - fall back to default variant -> errors.append(e) -> return self._resolve_fallback_variant(expr, args, errors, context) - - # Use _format_value for consistent string representation. - # This ensures: - # - None -> "" (falls through to default variant) - # - bool -> "true"/"false" (matches FTL variant keys, not Python "True"/"False") - # - FluentNumber -> formatted string (display representation) - # - Other types -> str() representation -> selector_str = self._format_value(selector_value) - - # Pass 1: Exact match (takes priority) -> exact_match = self._find_exact_variant(expr.variants, selector_value, selector_str) -> if exact_match is not None: -> return self._resolve_pattern(exact_match.value, args, errors, context) - - # Pass 2: Plural category match (numeric selectors only) - # FluentValue includes Decimal for currency/financial values. - # FluentNumber wraps formatted numbers while preserving numeric identity. - # Note: Exclude bool since isinstance(True, int) is True in Python, - # but booleans should match [true]/[false] variants, not plural categories. - # - # Extract numeric value from FluentNumber for plural matching. -> numeric_value: int | float | Decimal | None = None -> if isinstance(selector_value, FluentNumber): -> numeric_value = selector_value.value -> elif isinstance(selector_value, (int, float, Decimal)) and not isinstance( -> selector_value, bool -> ): -> numeric_value = selector_value - -> if numeric_value is not None: - # Try plural category matching (requires Babel for CLDR data). - # If Babel is not installed (parser-only mode), collect error and - # fall through to default variant. -> try: -> plural_category = select_plural_category(numeric_value, self.locale) -> plural_match = self._find_plural_variant(expr.variants, plural_category) -> if plural_match is not None: -> return self._resolve_pattern( -> plural_match.value, args, errors, context -> ) -> except BabelImportError: - # Babel not installed - collect error, fall through to default -> errors.append( -> FluentResolutionError(ErrorTemplate.plural_support_unavailable()) -> ) - - # Fallback: default variant -> default_variant = self._find_default_variant(expr.variants) -> if default_variant is not None: -> return self._resolve_pattern(default_variant.value, args, errors, context) - - # Fallback: first variant -> if expr.variants: -> return self._resolve_pattern(expr.variants[0].value, args, errors, context) - -> raise FluentResolutionError(ErrorTemplate.no_variants()) - -> def _resolve_fallback_variant( -> self, -> expr: SelectExpression, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> str: -> """Resolve fallback variant when selector evaluation fails. - -> Attempts to resolve in order: -> 1. Default variant (marked with *) -> 2. First variant - -> Args: -> expr: The SelectExpression to resolve -> args: Arguments for pattern resolution -> errors: Error list for error collection -> context: Resolution context - -> Returns: -> Resolved variant pattern string - -> Raises: -> FluentResolutionError: If no variants exist -> """ - # Try default variant first -> default_variant = self._find_default_variant(expr.variants) -> if default_variant is not None: -> return self._resolve_pattern(default_variant.value, args, errors, context) - - # Fall back to first variant -> if expr.variants: -> return self._resolve_pattern(expr.variants[0].value, args, errors, context) - -> raise FluentResolutionError(ErrorTemplate.no_variants()) - -> def _resolve_function_call( -> self, -> func_ref: FunctionReference, -> args: Mapping[str, FluentValue], -> errors: list[FluentError], -> context: ResolutionContext, -> ) -> FluentValue: -> """Resolve function call. - -> Uses FunctionRegistry to handle camelCase → snake_case parameter conversion. -> Uses metadata system to determine if locale injection is needed. - -> Security: -> Wraps argument resolution in expression_guard to prevent DoS via deeply -> nested function calls like NUMBER(A(B(C(...)))). Each nested call -> consumes stack frames during resolution. - -> Returns FluentValue which the resolver will convert to string for final output. -> """ -> func_name = func_ref.id.name - - # Evaluate arguments within depth guard (DoS prevention) - # Function arguments can contain nested function calls: NUMBER(ABS(FLOOR($x))) - # Without depth tracking, deeply nested calls can exhaust the Python stack. -> with context.expression_guard: -> positional_values: list[FluentValue] = [ -> self._resolve_expression(arg, args, errors, context) -> for arg in func_ref.arguments.positional -> ] - - # Evaluate named arguments (camelCase from FTL) -> named_values: dict[str, FluentValue] = { -> arg.name.name: self._resolve_expression(arg.value, args, errors, context) -> for arg in func_ref.arguments.named -> } - - # Check if locale injection is needed (metadata-driven, not magic tuple) - # This correctly handles custom functions with same name as built-ins -> if self.function_registry.should_inject_locale(func_name): - # Validate arity before injection to provide clear error messages - # instead of opaque TypeError from incorrect argument positioning -> expected_args = self.function_registry.get_expected_positional_args(func_name) -> if expected_args is not None and len(positional_values) != expected_args: -> raise FluentResolutionError( -> ErrorTemplate.function_arity_mismatch( -> func_name, expected_args, len(positional_values) -> ) -> ) - - # Built-in formatting functions expect signature: func(value, locale, *, ...) - # Append locale after positional args (FTL passes exactly one value arg, - # so this places locale as the second positional argument by contract) - # FunctionRegistry.call() handles camelCase -> snake_case conversion -> return self.function_registry.call( -> func_name, -> [*positional_values, self.locale], -> named_values, -> ) - - # Custom function or built-in that doesn't need locale: pass args as-is -> return self.function_registry.call( -> func_name, -> positional_values, -> named_values, -> ) - -> def _format_value(self, value: FluentValue) -> str: -> """Format FluentValue to string for final output. - -> Handles all types in the FluentValue union: -> - str: returned as-is -> - bool: "true"/"false" (Fluent convention) -> - int/float: string representation -> - Decimal/datetime/date: string representation via __str__ -> - None: empty string -> """ -> if isinstance(value, str): -> return value - # Check bool BEFORE int/float (bool is subclass of int in Python) -> if isinstance(value, bool): -> return "true" if value else "false" -> if isinstance(value, (int, float)): -> return str(value) -> if value is None: -> return "" - # Handles Decimal, datetime, date, and any other types -> return str(value) - -> def _get_fallback_for_placeable(self, expr: Expression, depth: int = MAX_DEPTH) -> str: # noqa: PLR0911 -> """Get readable fallback for failed placeable per Fluent spec. - -> Per Fluent specification, when a placeable fails to resolve, -> we return a human-readable representation of what was attempted. -> This is superior to {ERROR: ...} as it: -> 1. Doesn't expose internal diagnostics -> 2. Shows what the translator expected -> 3. Makes errors visible but not alarming - -> Args: -> expr: The expression that failed to resolve -> depth: Remaining recursion depth (prevents stack overflow) - -> Returns: -> Readable fallback string - -> Examples: -> VariableReference($name) -> "{$name}" -> MessageReference(welcome) -> "{welcome}" -> TermReference(-brand) -> "{-brand}" -> FunctionReference(NUMBER) -> "{NUMBER(...)}" -> SelectExpression($count) -> "{{$count} -> ...}" -> """ - # Depth protection: prevent recursion overflow on adversarial ASTs -> if depth <= 0: -> return FALLBACK_INVALID - -> match expr: -> case VariableReference(): -> return FALLBACK_MISSING_VARIABLE.format(name=expr.id.name) -> case MessageReference(): -> msg_id = expr.id.name -> if expr.attribute: -> msg_id = f"{msg_id}.{expr.attribute.name}" -> return FALLBACK_MISSING_MESSAGE.format(id=msg_id) -> case TermReference(): -> term_id = expr.id.name -> if expr.attribute: -> term_id = f"{term_id}.{expr.attribute.name}" -> return FALLBACK_MISSING_TERM.format(name=term_id) -> case FunctionReference(): -> return FALLBACK_FUNCTION_ERROR.format(name=expr.id.name) -> case SelectExpression(): - # Provide context by showing the selector expression -> selector_fallback = self._get_fallback_for_placeable(expr.selector, depth - 1) -> return f"{{{selector_fallback} -> ...}}" -> case _: -> return FALLBACK_INVALID diff --git a/src/ftllexengine/runtime/resolver_protocols.py b/src/ftllexengine/runtime/resolver_protocols.py new file mode 100644 index 00000000..e578b62e --- /dev/null +++ b/src/ftllexengine/runtime/resolver_protocols.py @@ -0,0 +1,87 @@ +"""Type-checking protocols for FluentResolver mixins.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, Protocol + +if TYPE_CHECKING: + from collections.abc import Mapping, Sequence + + from ftllexengine.core.value_types import FluentValue + from ftllexengine.diagnostics import FrozenFluentError + from ftllexengine.runtime.function_bridge import FunctionRegistry + from ftllexengine.runtime.resolution_context import ResolutionContext + from ftllexengine.syntax import Expression, Pattern, SelectExpression, Variant + + +class ResolverStateProtocol(Protocol): + """Structural contract implemented by FluentResolver for its mixins.""" + + _function_registry: FunctionRegistry + _locale: str + + def _format_value(self, value: object) -> str: + ... # pragma: no cover - typing-only protocol declaration + + def _resolve_expression( + self, + expr: Expression, + args: Mapping[str, object], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> FluentValue: + ... # pragma: no cover - typing-only protocol declaration + + def _resolve_pattern( + self, + pattern: Pattern, + args: Mapping[str, object], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> str: + ... # pragma: no cover - typing-only protocol declaration + + def _call_function_safe( + self, + func_name: str, + positional: Sequence[FluentValue], + named: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + ) -> FluentValue: + ... # pragma: no cover - typing-only protocol declaration + + def _get_fallback_for_placeable( + self, expr: Expression, depth: int = 10 + ) -> str: + ... # pragma: no cover - typing-only protocol declaration + + def _resolve_fallback_variant( + self, + expr: SelectExpression, + args: Mapping[str, object], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> str: + ... # pragma: no cover - typing-only protocol declaration + + def _find_exact_variant( + self, + variants: Sequence[Variant], + selector_value: object, + selector_str: str, + ) -> Variant | None: + ... # pragma: no cover - typing-only protocol declaration + + def _find_plural_variant( + self, variants: Sequence[Variant], plural_category: str + ) -> Variant | None: + ... # pragma: no cover - typing-only protocol declaration + + def _find_default_variant(self, variants: Sequence[Variant]) -> Variant | None: + ... # pragma: no cover - typing-only protocol declaration + + def _get_reference_fallback(self, expr: Expression) -> str | None: + ... # pragma: no cover - typing-only protocol declaration + + def _get_nested_fallback(self, expr: Expression, depth: int) -> str: + ... # pragma: no cover - typing-only protocol declaration diff --git a/src/ftllexengine/runtime/resolver_runtime.py b/src/ftllexengine/runtime/resolver_runtime.py new file mode 100644 index 00000000..1b952136 --- /dev/null +++ b/src/ftllexengine/runtime/resolver_runtime.py @@ -0,0 +1,196 @@ +"""Function-call and fallback helpers for FluentResolver.""" + +from __future__ import annotations + +import logging +from collections.abc import Mapping, Sequence +from typing import TYPE_CHECKING + +from ftllexengine.constants import ( + FALLBACK_FUNCTION_ERROR, + FALLBACK_INVALID, + FALLBACK_MISSING_MESSAGE, + FALLBACK_MISSING_TERM, + FALLBACK_MISSING_VARIABLE, +) +from ftllexengine.diagnostics import ErrorCategory, ErrorTemplate, FrozenFluentError +from ftllexengine.syntax import ( + Expression, + FunctionReference, + MessageReference, + NumberLiteral, + Placeable, + SelectExpression, + StringLiteral, + TermReference, + VariableReference, +) + +if TYPE_CHECKING: + from ftllexengine.core.value_types import FluentValue + from ftllexengine.runtime.function_bridge import FunctionRegistry + from ftllexengine.runtime.resolution_context import ResolutionContext + +logger = logging.getLogger("ftllexengine.runtime.resolver") + +_FALLBACK_MAX_DEPTH: int = 10 + + +class _ResolverRuntimeMixin: + """Function-call, formatting, and fallback behavior for FluentResolver.""" + + _function_registry: FunctionRegistry + _locale: str + + if TYPE_CHECKING: + + def _resolve_expression( + self, + expr: Expression, + args: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> FluentValue: ... + + def _resolve_function_call( + self, + func_ref: FunctionReference, + args: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> FluentValue: + """Resolve a function call with guarded argument evaluation.""" + func_name = func_ref.id.name + + with context.expression_guard: + positional_values = [ + self._resolve_expression(arg, args, errors, context) + for arg in func_ref.arguments.positional + ] + named_values = { + arg.name.name: self._resolve_expression(arg.value, args, errors, context) + for arg in func_ref.arguments.named + } + + if self._function_registry.should_inject_locale(func_name): + expected_args = self._function_registry.get_expected_positional_args(func_name) + if expected_args is not None and len(positional_values) != expected_args: + diag = ErrorTemplate.function_arity_mismatch( + func_name, expected_args, len(positional_values) + ) + raise FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) + + return self._call_function_safe( + func_name, + [*positional_values, self._locale], + named_values, + errors, + ) + + return self._call_function_safe( + func_name, + positional_values, + named_values, + errors, + ) + + def _call_function_safe( + self, + func_name: str, + positional: Sequence[FluentValue], + named: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + ) -> FluentValue: + """Call a registered function and normalize unexpected exceptions.""" + try: + return self._function_registry.call(func_name, positional, named) + except FrozenFluentError: + raise + except Exception as error: # noqa: BLE001 - function adapters may raise arbitrary user exceptions + logger.warning( + "Custom function %s raised %s: %s", + func_name, + type(error).__name__, + str(error), + ) + diag = ErrorTemplate.function_failed( + func_name, f"Uncaught exception: {type(error).__name__}: {error}" + ) + errors.append( + FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) + ) + return FALLBACK_FUNCTION_ERROR.format(name=func_name) + + def _format_value(self, value: object) -> str: + """Format a resolved FluentValue for final output.""" + match value: + case str(): + return value + case bool(): + return "true" if value else "false" + case int(): + return str(value) + case None: + return "" + case float(): + msg = ( + f"float value {value!r} is not a valid FluentValue. " + "IEEE 754 float cannot represent most decimal fractions exactly. " + "Use int for whole amounts or decimal.Decimal for fractional amounts." + ) + raise FrozenFluentError(msg, ErrorCategory.RESOLUTION) + case Sequence() | Mapping(): + return f"[{type(value).__name__}]" + case _: + return str(value) + + def _get_reference_fallback( + self, expr: Expression + ) -> str | None: + """Return direct fallback text for simple reference expressions.""" + match expr: + case VariableReference(): + return FALLBACK_MISSING_VARIABLE.format(name=expr.id.name) + case MessageReference(): + msg_id = expr.id.name + if expr.attribute: + msg_id = f"{msg_id}.{expr.attribute.name}" + return FALLBACK_MISSING_MESSAGE.format(id=msg_id) + case TermReference(): + term_id = expr.id.name + if expr.attribute: + term_id = f"{term_id}.{expr.attribute.name}" + return FALLBACK_MISSING_TERM.format(name=term_id) + case FunctionReference(): + return FALLBACK_FUNCTION_ERROR.format(name=expr.id.name) + case _: + return None + + def _get_nested_fallback( + self, expr: Expression, depth: int + ) -> str: + """Return fallback text for nested or literal expressions.""" + match expr: + case SelectExpression(): + selector_fallback = self._get_fallback_for_placeable(expr.selector, depth - 1) + return f"{{{selector_fallback} -> ...}}" + case Placeable(): + return self._get_fallback_for_placeable(expr.expression, depth - 1) + case StringLiteral(): + return expr.value + case NumberLiteral(): + return expr.raw + case _: + return FALLBACK_INVALID + + def _get_fallback_for_placeable( + self, expr: Expression, depth: int = _FALLBACK_MAX_DEPTH + ) -> str: + """Render a readable fallback string for a failed placeable.""" + if depth <= 0: + return FALLBACK_INVALID + + reference_fallback = self._get_reference_fallback(expr) + if reference_fallback is not None: + return reference_fallback + return self._get_nested_fallback(expr, depth) diff --git a/src/ftllexengine/runtime/resolver_selection.py b/src/ftllexengine/runtime/resolver_selection.py new file mode 100644 index 00000000..3c5189fd --- /dev/null +++ b/src/ftllexengine/runtime/resolver_selection.py @@ -0,0 +1,159 @@ +"""Variant-selection helpers for FluentResolver.""" + +from __future__ import annotations + +from decimal import Decimal +from typing import TYPE_CHECKING + +from ftllexengine.core.babel_compat import BabelImportError +from ftllexengine.core.value_types import FluentNumber +from ftllexengine.diagnostics import ErrorCategory, ErrorTemplate, FrozenFluentError +from ftllexengine.runtime import resolver as _resolver_module +from ftllexengine.syntax import Expression, Identifier, NumberLiteral, SelectExpression, Variant + +if TYPE_CHECKING: + from collections.abc import Mapping, Sequence + + from ftllexengine.core.value_types import FluentValue + from ftllexengine.runtime.resolution_context import ResolutionContext + from ftllexengine.syntax import Pattern + + +class _ResolverSelectionMixin: + """Select-expression behavior for FluentResolver.""" + + _locale: str + + if TYPE_CHECKING: + + def _format_value(self, value: object) -> str: ... + + def _resolve_expression( + self, + expr: Expression, + args: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> FluentValue: ... + + def _resolve_pattern( + self, + pattern: Pattern, + args: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> str: ... + + def _find_exact_variant( + self, + variants: Sequence[Variant], + selector_value: object, + selector_str: str, + ) -> Variant | None: + """Pass 1: find an exact string or numeric variant match.""" + numeric_for_match: int | Decimal | None = None + if isinstance(selector_value, FluentNumber): + numeric_for_match = selector_value.value + elif isinstance(selector_value, (int, Decimal)) and not isinstance(selector_value, bool): + numeric_for_match = selector_value + + sel_decimal: Decimal | None = None + if numeric_for_match is not None: + sel_decimal = Decimal(str(numeric_for_match)) + + for variant in variants: + match variant.key: + case Identifier(name=key_name): + if key_name == selector_str: + return variant + case NumberLiteral(raw=raw_str): + if sel_decimal is not None and Decimal(raw_str) == sel_decimal: + return variant + return None + + def _find_plural_variant( + self, variants: Sequence[Variant], plural_category: str + ) -> Variant | None: + """Pass 2: find a plural-category variant match.""" + for variant in variants: + match variant.key: + case Identifier(name=key_name): + if key_name == plural_category: + return variant + return None + + def _find_default_variant( + self, variants: Sequence[Variant] + ) -> Variant | None: + """Return the default variant, if one exists.""" + for variant in variants: + if variant.default: + return variant + return None + + def _resolve_select_expression( + self, + expr: SelectExpression, + args: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> str: + """Resolve a select expression using Fluent's matching order.""" + try: + with context.expression_guard: + selector_value = self._resolve_expression(expr.selector, args, errors, context) + except FrozenFluentError as error: + errors.append(error) + return self._resolve_fallback_variant(expr, args, errors, context) + + selector_str = self._format_value(selector_value) + + exact_match = self._find_exact_variant(expr.variants, selector_value, selector_str) + if exact_match is not None: + return self._resolve_pattern(exact_match.value, args, errors, context) + + numeric_value: int | Decimal | None = None + precision: int | None = None + if isinstance(selector_value, FluentNumber): + numeric_value = selector_value.value + precision = selector_value.precision + elif isinstance(selector_value, (int, Decimal)) and not isinstance( + selector_value, bool + ): + numeric_value = selector_value + + if numeric_value is not None: + try: + plural_category = _resolver_module.select_plural_category( + numeric_value, + self._locale, + precision, + ) + plural_match = self._find_plural_variant(expr.variants, plural_category) + if plural_match is not None: + return self._resolve_pattern(plural_match.value, args, errors, context) + except BabelImportError: + diag = ErrorTemplate.plural_support_unavailable() + errors.append( + FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) + ) + + return self._resolve_fallback_variant(expr, args, errors, context) + + def _resolve_fallback_variant( + self, + expr: SelectExpression, + args: Mapping[str, FluentValue], + errors: list[FrozenFluentError], + context: ResolutionContext, + ) -> str: + """Resolve the default or first variant after selector failure.""" + default_variant = self._find_default_variant(expr.variants) + if default_variant is not None: + return self._resolve_pattern(default_variant.value, args, errors, context) + + if expr.variants: + return self._resolve_pattern(expr.variants[0].value, args, errors, context) + + diag = ErrorTemplate.no_variants() + raise FrozenFluentError(str(diag), ErrorCategory.RESOLUTION, diagnostic=diag) diff --git a/src/ftllexengine/runtime/rwlock.py b/src/ftllexengine/runtime/rwlock.py index e476669c..3be289ab 100644 --- a/src/ftllexengine/runtime/rwlock.py +++ b/src/ftllexengine/runtime/rwlock.py @@ -62,20 +62,20 @@ class RWLock: Write lock reentrancy is prohibited: raises RuntimeError. Example: - >>> lock = RWLock() - >>> - >>> # Multiple readers can proceed concurrently - >>> with lock.read(): + >>> lock = RWLock() # doctest: +SKIP + + Multiple readers can proceed concurrently: + >>> with lock.read(): # doctest: +SKIP ... # Read data ... pass - >>> - >>> # Writers get exclusive access - >>> with lock.write(): + + Writers get exclusive access: + >>> with lock.write(): # doctest: +SKIP ... # Modify data ... pass - >>> - >>> # Reentrant read locks work - >>> with lock.read(): + + Reentrant read locks work: + >>> with lock.read(): # doctest: +SKIP ... with lock.read(): # Same thread can reacquire ... # Still shared ... pass @@ -128,10 +128,10 @@ def read(self, timeout: float | None = None) -> Generator[None]: None Example: - >>> with lock.read(): + >>> with lock.read(): # doctest: +SKIP ... # Safe to read data ... pass - >>> with lock.read(timeout=1.0): + >>> with lock.read(timeout=1.0): # doctest: +SKIP ... # Acquired within 1 second or TimeoutError raised ... pass """ @@ -164,10 +164,10 @@ def write(self, timeout: float | None = None) -> Generator[None]: None Example: - >>> with lock.write(): + >>> with lock.write(): # doctest: +SKIP ... # Exclusive access to modify data ... pass - >>> with lock.write(timeout=2.0): + >>> with lock.write(timeout=2.0): # doctest: +SKIP ... # Acquired within 2 seconds or TimeoutError raised ... pass """ diff --git a/src/ftllexengine/syntax/__init__.py b/src/ftllexengine/syntax/__init__.py index 5180d133..c78417ba 100644 --- a/src/ftllexengine/syntax/__init__.py +++ b/src/ftllexengine/syntax/__init__.py @@ -104,9 +104,9 @@ def parse(source: str) -> Resource: Resource containing parsed entries Example: - >>> from ftllexengine.syntax import parse - >>> resource = parse("hello = Hello, world!") - >>> resource.entries[0].id.name + >>> from ftllexengine.syntax import parse # doctest: +SKIP + >>> resource = parse("hello = Hello, world!") # doctest: +SKIP + >>> resource.entries[0].id.name # doctest: +SKIP 'hello' """ parser = FluentParserV1() @@ -131,12 +131,12 @@ def parse_stream(lines: Iterable[str]) -> Iterator[Entry]: Message, Term, Comment, or Junk AST nodes in document order. Example: - >>> from ftllexengine.syntax import parse_stream - >>> lines = ["greeting = Hello\\n", "\\n", "farewell = Bye\\n"] - >>> entries = list(parse_stream(lines)) - >>> len(entries) + >>> from ftllexengine.syntax import parse_stream # doctest: +SKIP + >>> lines = ["greeting = Hello\\n", "\\n", "farewell = Bye\\n"] # doctest: +SKIP + >>> entries = list(parse_stream(lines)) # doctest: +SKIP + >>> len(entries) # doctest: +SKIP 2 - >>> entries[0].id.name + >>> entries[0].id.name # doctest: +SKIP 'greeting' """ parser = FluentParserV1() diff --git a/src/ftllexengine/syntax/cursor.py b/src/ftllexengine/syntax/cursor.py index aa0afb16..5e9e9b71 100644 --- a/src/ftllexengine/syntax/cursor.py +++ b/src/ftllexengine/syntax/cursor.py @@ -58,20 +58,20 @@ class Cursor: len(source) is rejected to make the invariant explicit. Example: - >>> cursor = Cursor("hello", 0) - >>> cursor.current # Type: str (not str | None!) + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> cursor.current # Type: str (not str | None!) # doctest: +SKIP 'h' - >>> new_cursor = cursor.advance() - >>> new_cursor.current + >>> new_cursor = cursor.advance() # doctest: +SKIP + >>> new_cursor.current # doctest: +SKIP 'e' - >>> cursor.current # Original unchanged (immutability) + >>> cursor.current # Original unchanged (immutability) # doctest: +SKIP 'h' - >>> cursor.is_eof + >>> cursor.is_eof # doctest: +SKIP False - >>> eof_cursor = Cursor("hi", 2) - >>> eof_cursor.is_eof + >>> eof_cursor = Cursor("hi", 2) # doctest: +SKIP + >>> eof_cursor.is_eof # doctest: +SKIP True - >>> eof_cursor.current # Raises EOFError + >>> eof_cursor.current # Raises EOFError # doctest: +SKIP Traceback (most recent call last): ... EOFError: Unexpected EOF at position 2 @@ -203,14 +203,14 @@ def advance(self, count: int = 1) -> Cursor: The compiler enforces progress! Example: - >>> cursor = Cursor("hello", 0) - >>> cursor2 = cursor.advance() - >>> cursor.pos # Original unchanged + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> cursor2 = cursor.advance() # doctest: +SKIP + >>> cursor.pos # Original unchanged # doctest: +SKIP 0 - >>> cursor2.pos # New cursor advanced + >>> cursor2.pos # New cursor advanced # doctest: +SKIP 1 - >>> cursor.advance(0) # Raises: must advance by at least 1 + >>> cursor.advance(0) # Raises: must advance by at least 1 # doctest: +SKIP Traceback (most recent call last): ... ValueError: advance() count must be >= 1, got 0 @@ -239,11 +239,11 @@ def slice_to(self, end_pos: int) -> str: Source substring from current position to end_pos Example: - >>> cursor = Cursor("hello world", 0) - >>> start_cursor = cursor - >>> while not cursor.is_eof and cursor.current != ' ': + >>> cursor = Cursor("hello world", 0) # doctest: +SKIP + >>> start_cursor = cursor # doctest: +SKIP + >>> while not cursor.is_eof and cursor.current != ' ': # doctest: +SKIP ... cursor = cursor.advance() - >>> start_cursor.slice_to(cursor.pos) + >>> start_cursor.slice_to(cursor.pos) # doctest: +SKIP 'hello' """ return self.source[self.pos : end_pos] @@ -259,16 +259,16 @@ def skip_spaces(self) -> Cursor: This matches Fluent parser specification for inline whitespace. Example: - >>> cursor = Cursor(" hello", 0) - >>> new_cursor = cursor.skip_spaces() - >>> new_cursor.pos + >>> cursor = Cursor(" hello", 0) # doctest: +SKIP + >>> new_cursor = cursor.skip_spaces() # doctest: +SKIP + >>> new_cursor.pos # doctest: +SKIP 3 - >>> new_cursor.current + >>> new_cursor.current # doctest: +SKIP 'h' - >>> cursor = Cursor("hello", 0) - >>> new_cursor = cursor.skip_spaces() - >>> new_cursor.pos # No spaces to skip + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> new_cursor = cursor.skip_spaces() # doctest: +SKIP + >>> new_cursor.pos # No spaces to skip # doctest: +SKIP 0 """ # O(1) cursor allocation: compute final position via integer arithmetic @@ -291,16 +291,16 @@ def skip_whitespace(self) -> Cursor: to LF at parser entry (see FluentParserV1.parse()). Example: - >>> cursor = Cursor(" \\n hello", 0) - >>> new_cursor = cursor.skip_whitespace() - >>> new_cursor.pos + >>> cursor = Cursor(" \\n hello", 0) # doctest: +SKIP + >>> new_cursor = cursor.skip_whitespace() # doctest: +SKIP + >>> new_cursor.pos # doctest: +SKIP 5 - >>> new_cursor.current + >>> new_cursor.current # doctest: +SKIP 'h' - >>> cursor = Cursor("hello", 0) - >>> new_cursor = cursor.skip_whitespace() - >>> new_cursor.pos # No whitespace to skip + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> new_cursor = cursor.skip_whitespace() # doctest: +SKIP + >>> new_cursor.pos # No whitespace to skip # doctest: +SKIP 0 """ # O(1) cursor allocation: compute final position via integer arithmetic @@ -326,17 +326,17 @@ def expect(self, char: str) -> Cursor | None: For required characters, use current property with explicit check. Example: - >>> cursor = Cursor("hello", 0) - >>> new_cursor = cursor.expect('h') - >>> new_cursor.pos if new_cursor else None + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> new_cursor = cursor.expect('h') # doctest: +SKIP + >>> new_cursor.pos if new_cursor else None # doctest: +SKIP 1 - >>> cursor = Cursor("hello", 0) - >>> cursor.expect('x') # No match + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> cursor.expect('x') # No match # doctest: +SKIP None - >>> eof_cursor = Cursor("hi", 2) - >>> eof_cursor.expect('h') # At EOF + >>> eof_cursor = Cursor("hi", 2) # doctest: +SKIP + >>> eof_cursor.expect('h') # At EOF # doctest: +SKIP None """ if not self.is_eof and self.current == char: @@ -358,12 +358,12 @@ def slice_ahead(self, n: int) -> str: Does not advance the cursor position. Example: - >>> cursor = Cursor("hello", 0) - >>> cursor.slice_ahead(3) + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + >>> cursor.slice_ahead(3) # doctest: +SKIP 'hel' - >>> cursor.pos # Unchanged + >>> cursor.pos # Unchanged # doctest: +SKIP 0 - >>> cursor.slice_ahead(10) # More than available + >>> cursor.slice_ahead(10) # More than available # doctest: +SKIP 'hello' """ return self.source[self.pos : self.pos + n] @@ -380,9 +380,9 @@ def skip_line_end(self) -> Cursor: performs this normalization automatically. Example: - >>> cursor = Cursor("hello\\nworld", 5) # At \\n - >>> new_cursor = cursor.skip_line_end() - >>> new_cursor.pos + >>> cursor = Cursor("hello\\nworld", 5) # At \\n # doctest: +SKIP + >>> new_cursor = cursor.skip_line_end() # doctest: +SKIP + >>> new_cursor.pos # doctest: +SKIP 6 """ if not self.is_eof and self.current == "\n": @@ -404,11 +404,11 @@ def skip_to_line_end(self) -> Cursor: performs this normalization automatically. Example: - >>> cursor = Cursor("hello\\nworld", 0) - >>> new_cursor = cursor.skip_to_line_end() - >>> new_cursor.pos + >>> cursor = Cursor("hello\\nworld", 0) # doctest: +SKIP + >>> new_cursor = cursor.skip_to_line_end() # doctest: +SKIP + >>> new_cursor.pos # doctest: +SKIP 5 - >>> new_cursor.current + >>> new_cursor.current # doctest: +SKIP '\\n' """ # C-level str.find() avoids O(N) cursor allocations @@ -429,8 +429,8 @@ def count_newlines_before(self) -> int: More efficient than source[:pos].count() for large files. Example: - >>> cursor = Cursor("a\\nb\\nc", 4) # At 'c' - >>> cursor.count_newlines_before() + >>> cursor = Cursor("a\\nb\\nc", 4) # At 'c' # doctest: +SKIP + >>> cursor.count_newlines_before() # doctest: +SKIP 2 """ return self.source.count("\n", 0, self.pos) @@ -446,15 +446,15 @@ def compute_line_col(self) -> tuple[int, int]: Only call for error reporting, not during normal parsing! Example: - >>> source = "line1\\nline2\\nline3" - >>> cursor = Cursor(source, 0) - >>> cursor.compute_line_col() + >>> source = "line1\\nline2\\nline3" # doctest: +SKIP + >>> cursor = Cursor(source, 0) # doctest: +SKIP + >>> cursor.compute_line_col() # doctest: +SKIP (1, 1) - >>> cursor = Cursor(source, 6) # Start of line2 - >>> cursor.compute_line_col() + >>> cursor = Cursor(source, 6) # Start of line2 # doctest: +SKIP + >>> cursor.compute_line_col() # doctest: +SKIP (2, 1) - >>> cursor = Cursor(source, 8) # Middle of line2 - >>> cursor.compute_line_col() + >>> cursor = Cursor(source, 8) # Middle of line2 # doctest: +SKIP + >>> cursor.compute_line_col() # doctest: +SKIP (2, 3) """ # Count newlines before current position (O(1) memory) @@ -480,13 +480,13 @@ class LineOffsetCache: each position, which is O(n) per call. Example: - >>> source = "line1\\nline2\\nline3" - >>> cache = LineOffsetCache(source) - >>> cache.get_line_col(0) # Start of line 1 + >>> source = "line1\\nline2\\nline3" # doctest: +SKIP + >>> cache = LineOffsetCache(source) # doctest: +SKIP + >>> cache.get_line_col(0) # Start of line 1 # doctest: +SKIP (1, 1) - >>> cache.get_line_col(6) # Start of line 2 + >>> cache.get_line_col(6) # Start of line 2 # doctest: +SKIP (2, 1) - >>> cache.get_line_col(8) # Third char of line 2 + >>> cache.get_line_col(8) # Third char of line 2 # doctest: +SKIP (2, 3) Thread Safety: @@ -531,10 +531,10 @@ def get_line_col(self, pos: int) -> tuple[int, int]: O(log n) where n = number of lines Example: - >>> cache = LineOffsetCache("abc\\ndef\\nghi") - >>> cache.get_line_col(0) + >>> cache = LineOffsetCache("abc\\ndef\\nghi") # doctest: +SKIP + >>> cache.get_line_col(0) # doctest: +SKIP (1, 1) - >>> cache.get_line_col(4) # 'd' in "def" + >>> cache.get_line_col(4) # 'd' in "def" # doctest: +SKIP (2, 1) """ # Clamp position to valid range @@ -580,14 +580,14 @@ def parse_foo(cursor: Cursor) -> Result[ParseResult[Foo], ParseError]: return Success(ParseResult(parsed_value, new_cursor)) Example: - >>> cursor = Cursor("hello", 0) - >>> # Parse single character - >>> result = ParseResult('h', cursor.advance()) - >>> result.value + >>> cursor = Cursor("hello", 0) # doctest: +SKIP + Parse a single character: + >>> result = ParseResult('h', cursor.advance()) # doctest: +SKIP + >>> result.value # doctest: +SKIP 'h' - >>> result.cursor.pos + >>> result.cursor.pos # doctest: +SKIP 1 - >>> result.cursor.current + >>> result.cursor.current # doctest: +SKIP 'e' """ @@ -606,9 +606,9 @@ class ParseError: - Immutable for error chaining Example: - >>> cursor = Cursor("hello", 2) - >>> error = ParseError("Expected '}'", cursor, expected=('}', ']')) - >>> error.format_error() + >>> cursor = Cursor("hello", 2) # doctest: +SKIP + >>> error = ParseError("Expected '}'", cursor, expected=('}', ']')) # doctest: +SKIP + >>> error.format_error() # doctest: +SKIP "1:3: Expected '}' (expected: '}', ']')" """ @@ -623,13 +623,13 @@ def format_error(self) -> str: Formatted error string with location Example: - >>> cursor = Cursor("hello\\nworld", 7) - >>> error = ParseError("Expected ']'", cursor) - >>> error.format_error() + >>> cursor = Cursor("hello\\nworld", 7) # doctest: +SKIP + >>> error = ParseError("Expected ']'", cursor) # doctest: +SKIP + >>> error.format_error() # doctest: +SKIP "2:2: Expected ']'" - >>> error2 = ParseError("Unexpected", cursor, expected=(']', '}')) - >>> error2.format_error() + >>> error2 = ParseError("Unexpected", cursor, expected=(']', '}')) # doctest: +SKIP + >>> error2.format_error() # doctest: +SKIP "2:2: Unexpected (expected: ']', '}')" """ line, col = self.cursor.compute_line_col() @@ -653,10 +653,10 @@ def format_with_context(self, context_lines: int = 2) -> str: Multi-line formatted error with context Example: - >>> source = "hello = Hi\\nworld = { $name\\nfoo = Bar" - >>> cursor = Cursor(source, 26) # After $name - >>> error = ParseError("Expected '}'", cursor) - >>> print(error.format_with_context()) + >>> source = "hello = Hi\\nworld = { $name\\nfoo = Bar" # doctest: +SKIP + >>> cursor = Cursor(source, 26) # After $name # doctest: +SKIP + >>> error = ParseError("Expected '}'", cursor) # doctest: +SKIP + >>> print(error.format_with_context()) # doctest: +SKIP 2:15: Expected '}' 1 | hello = Hi diff --git a/src/ftllexengine/syntax/parser/__init__.py b/src/ftllexengine/syntax/parser/__init__.py index 929a9786..e3027550 100644 --- a/src/ftllexengine/syntax/parser/__init__.py +++ b/src/ftllexengine/syntax/parser/__init__.py @@ -5,16 +5,20 @@ Module Organization: - core.py: Main FluentParserV1 class and parse() entry point +- context.py: ParseContext depth-tracking state +- entries.py: Message, term, and comment parsing +- expressions.py: Inline expressions, calls, and select expressions +- patterns.py: Pattern parsing and multiline continuation handling - primitives.py: Basic parsers (identifiers, numbers, strings) - whitespace.py: Whitespace handling and continuation detection -- rules.py: All grammar rules (patterns, expressions, entries) +- rules.py: Aggregated grammar surface for advanced internal/test usage Public API: FluentParserV1: Main parser class ParseContext: Parse context for depth tracking (advanced usage) """ +from ftllexengine.syntax.parser.context import ParseContext from ftllexengine.syntax.parser.core import FluentParserV1 -from ftllexengine.syntax.parser.rules import ParseContext __all__ = ["FluentParserV1", "ParseContext"] diff --git a/src/ftllexengine/syntax/parser/context.py b/src/ftllexengine/syntax/parser/context.py new file mode 100644 index 00000000..f09cba33 --- /dev/null +++ b/src/ftllexengine/syntax/parser/context.py @@ -0,0 +1,69 @@ +"""Parse-context state shared across Fluent grammar modules.""" + +from __future__ import annotations + +from dataclasses import dataclass + +from ftllexengine.constants import MAX_DEPTH + +__all__ = ["ParseContext"] + + +@dataclass(slots=True) +class ParseContext: + """Explicit context for parsing operations. + + Replaces thread-local state with explicit parameter passing for: + - Thread safety without global state + - Async framework compatibility + - Easier testing (no state reset needed) + - Clear dependency flow + + Security: + Tracks nesting depth for BOTH placeables and function calls to prevent + stack overflow DoS attacks. Deeply nested constructs like: + - { { { ... } } } (nested placeables) + - { A(B(C(D(...)))) } (nested function calls) + Both consume stack frames and must be bounded. + + Attributes: + max_nesting_depth: Maximum allowed nesting depth for placeables and calls + current_depth: Current nesting depth (0 = top level) + _depth_exceeded_flag: Mutable flag (list container) shared across all nested + contexts to track if depth limit was exceeded during parse. Uses list[bool] + as a mutable reference that persists when context objects are copied during + enter_nesting(). Set to [True] when depth exceeded; checked at Junk creation + to emit specific PARSE_NESTING_DEPTH_EXCEEDED diagnostic. + """ + + max_nesting_depth: int = MAX_DEPTH + current_depth: int = 0 + _depth_exceeded_flag: list[bool] | None = None + + def __post_init__(self) -> None: + """Initialize mutable depth exceeded flag if not provided.""" + if self._depth_exceeded_flag is None: + self._depth_exceeded_flag = [False] + + def is_depth_exceeded(self) -> bool: + """Check if maximum nesting depth has been exceeded.""" + return self.current_depth >= self.max_nesting_depth + + def mark_depth_exceeded(self) -> None: + """Mark that depth limit was exceeded during parse.""" + if self._depth_exceeded_flag is not None: + self._depth_exceeded_flag[0] = True + + def was_depth_exceeded(self) -> bool: + """Check if depth limit was exceeded at any point during parse.""" + return bool( + self._depth_exceeded_flag is not None and self._depth_exceeded_flag[0] + ) + + def enter_nesting(self) -> ParseContext: + """Create new context with incremented depth for entering nested construct.""" + return ParseContext( + max_nesting_depth=self.max_nesting_depth, + current_depth=self.current_depth + 1, + _depth_exceeded_flag=self._depth_exceeded_flag, + ) diff --git a/src/ftllexengine/syntax/parser/core.py b/src/ftllexengine/syntax/parser/core.py index b0f75abb..e77ca382 100644 --- a/src/ftllexengine/syntax/parser/core.py +++ b/src/ftllexengine/syntax/parser/core.py @@ -5,7 +5,9 @@ Architecture: The parser uses an immutable cursor pattern (:class:`~ftllexengine.syntax.cursor.Cursor`) - to traverse source text. Each sub-parser (in :mod:`~ftllexengine.syntax.parser.rules`, + to traverse source text. Each sub-parser (in :mod:`~ftllexengine.syntax.parser.entries`, + :mod:`~ftllexengine.syntax.parser.expressions`, + :mod:`~ftllexengine.syntax.parser.patterns`, :mod:`~ftllexengine.syntax.parser.primitives`, etc.) returns either a :class:`~ftllexengine.syntax.cursor.ParseResult` containing the parsed AST node and updated cursor position, or None on parse failure. @@ -25,7 +27,9 @@ See Also: - :mod:`ftllexengine.syntax.ast` - All AST node type definitions - :mod:`ftllexengine.syntax.cursor` - Cursor and ParseResult types - - :mod:`ftllexengine.syntax.parser.rules` - Grammar rules (patterns, expressions, entries) + - :mod:`ftllexengine.syntax.parser.entries` - Top-level entry parsing + - :mod:`ftllexengine.syntax.parser.expressions` - Inline and select expressions + - :mod:`ftllexengine.syntax.parser.patterns` - Pattern parsing and continuation rules """ from __future__ import annotations @@ -49,13 +53,9 @@ Term, ) from ftllexengine.syntax.cursor import Cursor +from ftllexengine.syntax.parser.context import ParseContext +from ftllexengine.syntax.parser.entries import parse_comment, parse_message, parse_term from ftllexengine.syntax.parser.primitives import is_identifier_start -from ftllexengine.syntax.parser.rules import ( - ParseContext, - parse_comment, - parse_message, - parse_term, -) from ftllexengine.syntax.parser.whitespace import skip_blank if TYPE_CHECKING: @@ -296,10 +296,10 @@ def parse(self, source: str) -> Resource: # noqa: PLR0915 - main parser loop parameter in constructor. Example: - >>> parser = FluentParserV1() - >>> resource = parser.parse("hello = World") - >>> message = resource.entries[0] - >>> message.id.name + >>> parser = FluentParserV1() # doctest: +SKIP + >>> resource = parser.parse("hello = World") # doctest: +SKIP + >>> message = resource.entries[0] # doctest: +SKIP + >>> message.id.name # doctest: +SKIP 'hello' See Also: @@ -577,12 +577,12 @@ def parse_stream(self, lines: Iterable[str]) -> Iterator[Entry]: Message, Term, Comment, or Junk AST nodes in document order. Example: - >>> parser = FluentParserV1() - >>> ftl_lines = ["greeting = Hello\\n", "\\n", "farewell = Bye\\n"] - >>> entries = list(parser.parse_stream(ftl_lines)) - >>> len(entries) + >>> parser = FluentParserV1() # doctest: +SKIP + >>> ftl_lines = ["greeting = Hello\\n", "\\n", "farewell = Bye\\n"] # doctest: +SKIP + >>> entries = list(parser.parse_stream(ftl_lines)) # doctest: +SKIP + >>> len(entries) # doctest: +SKIP 2 - >>> entries[0].id.name + >>> entries[0].id.name # doctest: +SKIP 'greeting' """ chunk: list[str] = [] diff --git a/src/ftllexengine/syntax/parser/entries.py b/src/ftllexengine/syntax/parser/entries.py new file mode 100644 index 00000000..cd8991b6 --- /dev/null +++ b/src/ftllexengine/syntax/parser/entries.py @@ -0,0 +1,229 @@ +"""Entry-oriented Fluent grammar rules.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +from ftllexengine.enums import CommentType +from ftllexengine.syntax.ast import Attribute, Comment, Identifier, Message, Pattern, Span, Term +from ftllexengine.syntax.cursor import Cursor, ParseError, ParseResult +from ftllexengine.syntax.parser.patterns import parse_pattern +from ftllexengine.syntax.parser.primitives import parse_identifier +from ftllexengine.syntax.parser.whitespace import skip_blank_inline, skip_multiline_pattern_start + +if TYPE_CHECKING: + from ftllexengine.syntax.parser.context import ParseContext + +__all__ = [ + "parse_comment", + "parse_message", + "parse_message_attributes", + "parse_message_header", + "parse_term", + "validate_message_content", +] + +_COMMENT_TYPE_BY_HASH_COUNT: tuple[CommentType, CommentType, CommentType] = ( + CommentType.COMMENT, + CommentType.GROUP, + CommentType.RESOURCE, +) + + +def parse_message_header(cursor: Cursor) -> ParseResult[tuple[str, int]] | None: + """Parse message header: Identifier "=".""" + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + id_end_pos = id_result.cursor.pos + cursor = skip_blank_inline(id_result.cursor) + if cursor.is_eof or cursor.current != "=": + return None + + cursor = cursor.advance() + return ParseResult((id_result.value, id_end_pos), cursor) + + +def parse_message_attributes( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[list[Attribute]] | None: + """Parse zero or more message attributes.""" + attributes: list[Attribute] = [] + + while not cursor.is_eof: + if cursor.current != "\n": + break + + cursor = cursor.advance() + while not cursor.is_eof and cursor.current == "\n": + cursor = cursor.advance() + + saved_cursor = cursor + cursor = cursor.skip_spaces() + if cursor.is_eof or cursor.current != ".": + cursor = saved_cursor + break + + attr_result = parse_attribute(saved_cursor, context) + if attr_result is None: + cursor = saved_cursor + break + + attributes.append(attr_result.value) + cursor = attr_result.cursor + + return ParseResult(attributes, cursor) + + +def validate_message_content(pattern: Pattern | None, attributes: list[Attribute]) -> bool: + """Validate message has either pattern or attributes.""" + has_pattern = pattern is not None and len(pattern.elements) > 0 + has_attributes = len(attributes) > 0 + return has_pattern or has_attributes + + +def parse_message( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Message] | None: + """Parse message with full support for select expressions.""" + start_pos = cursor.pos + id_result = parse_message_header(cursor) + if id_result is None: + return id_result + + id_name, id_end_pos = id_result.value + cursor = id_result.cursor + cursor, initial_indent = skip_multiline_pattern_start(cursor) + pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) + if pattern_result is None: + return pattern_result + + cursor = pattern_result.cursor + attributes_result = parse_message_attributes(cursor, context) + if attributes_result is None: + return attributes_result + + cursor = attributes_result.cursor + if not validate_message_content(pattern_result.value, attributes_result.value): + return None + + message = Message( + id=Identifier(id_name, span=Span(start=start_pos, end=id_end_pos)), + value=pattern_result.value, + attributes=tuple(attributes_result.value), + span=Span(start=start_pos, end=cursor.pos), + ) + return ParseResult(message, cursor) + + +def parse_attribute( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Attribute] | None: + """Parse message attribute (.attribute = pattern).""" + cursor = skip_blank_inline(cursor) + if cursor.is_eof or cursor.current != ".": + return None + + attr_start_pos = cursor.pos + cursor = cursor.advance() + id_start_pos = cursor.pos + + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + id_end_pos = id_result.cursor.pos + cursor = skip_blank_inline(id_result.cursor) + if cursor.is_eof or cursor.current != "=": + return None + + cursor = cursor.advance() + cursor, initial_indent = skip_multiline_pattern_start(cursor) + pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) + if pattern_result is None: + return pattern_result + + attribute = Attribute( + id=Identifier(id_result.value, span=Span(start=id_start_pos, end=id_end_pos)), + value=pattern_result.value, + span=Span(start=attr_start_pos, end=pattern_result.cursor.pos), + ) + return ParseResult(attribute, pattern_result.cursor) + + +def parse_term( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Term] | None: + """Parse term definition (-term-id = pattern).""" + start_pos = cursor.pos + if cursor.is_eof or cursor.current != "-": + return None + + cursor = cursor.advance() + id_start_pos = cursor.pos + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + id_end_pos = id_result.cursor.pos + cursor = skip_blank_inline(id_result.cursor) + if cursor.is_eof or cursor.current != "=": + return None + + cursor = cursor.advance() + cursor, initial_indent = skip_multiline_pattern_start(cursor) + pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) + if pattern_result is None: + return pattern_result + + cursor = pattern_result.cursor + if not pattern_result.value.elements: + return None + + attributes_result = parse_message_attributes(cursor, context) + if attributes_result is None: + return None + + cursor = attributes_result.cursor + term = Term( + id=Identifier(id_result.value, span=Span(start=id_start_pos, end=id_end_pos)), + value=pattern_result.value, + attributes=tuple(attributes_result.value), + span=Span(start=start_pos, end=cursor.pos), + ) + return ParseResult(term, cursor) + + +def parse_comment(cursor: Cursor) -> ParseResult[Comment] | None: + """Parse comment line per Fluent spec.""" + start_pos = cursor.pos + hash_count = 0 + temp_cursor = cursor + while not temp_cursor.is_eof and temp_cursor.current == "#": + hash_count += 1 + temp_cursor = temp_cursor.advance() + + if hash_count > 3: + return None + + comment_type = _COMMENT_TYPE_BY_HASH_COUNT[hash_count - 1] + cursor = temp_cursor + if not cursor.is_eof and cursor.current == " ": + cursor = cursor.advance() + + content_start = cursor.pos + cursor = cursor.skip_to_line_end() + content = cursor.source[content_start : cursor.pos] + cursor = cursor.skip_line_end() + + comment_node = Comment( + content=content, + type=comment_type, + span=Span(start=start_pos, end=cursor.pos), + ) + return ParseResult(comment_node, cursor) diff --git a/src/ftllexengine/syntax/parser/expressions.py b/src/ftllexengine/syntax/parser/expressions.py new file mode 100644 index 00000000..d0d75cd9 --- /dev/null +++ b/src/ftllexengine/syntax/parser/expressions.py @@ -0,0 +1,594 @@ +"""Expression-oriented Fluent grammar rules.""" + +from __future__ import annotations + +from typing import cast + +from ftllexengine.syntax.ast import ( + CallArguments, + FunctionReference, + Identifier, + InlineExpression, + MessageReference, + NamedArgument, + NumberLiteral, + Placeable, + SelectExpression, + SelectorExpression, + Span, + StringLiteral, + TermReference, + VariableReference, + Variant, +) +from ftllexengine.syntax.cursor import Cursor, ParseError, ParseResult +from ftllexengine.syntax.parser.context import ParseContext +from ftllexengine.syntax.parser.patterns import parse_simple_pattern +from ftllexengine.syntax.parser.primitives import ( + _ASCII_DIGITS, + is_identifier_start, + parse_identifier, + parse_number, + parse_number_value, + parse_string_literal, +) +from ftllexengine.syntax.parser.whitespace import skip_blank, skip_blank_inline + +__all__ = [ + "parse_argument_expression", + "parse_call_arguments", + "parse_function_reference", + "parse_inline_expression", + "parse_placeable", + "parse_select_expression", + "parse_term_reference", + "parse_variable_reference", + "parse_variant", + "parse_variant_key", +] + + +def parse_variable_reference(cursor: Cursor) -> ParseResult[VariableReference] | None: + """Parse variable reference: $variable.""" + start_pos = cursor.pos + + if cursor.is_eof or cursor.current != "$": + return None + + cursor = cursor.advance() + id_start_pos = cursor.pos + + result = parse_identifier(cursor) + if isinstance(result, ParseError): + return None + + var_ref = VariableReference( + id=Identifier( + result.value, + span=Span(start=id_start_pos, end=result.cursor.pos), + ), + span=Span(start=start_pos, end=result.cursor.pos), + ) + return ParseResult(var_ref, result.cursor) + + +def parse_variant_key(cursor: Cursor) -> ParseResult[Identifier | NumberLiteral] | None: + """Parse variant key (identifier or number).""" + start_pos = cursor.pos + + if not cursor.is_eof and (cursor.current in _ASCII_DIGITS or cursor.current == "-"): + num_result = parse_number(cursor) + if not isinstance(num_result, ParseError): + num_str = num_result.value + num_value = parse_number_value(num_str) + return ParseResult( + NumberLiteral(value=num_value, raw=num_str), num_result.cursor + ) + + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + return ParseResult( + Identifier(id_result.value, span=Span(start=start_pos, end=id_result.cursor.pos)), + id_result.cursor, + ) + + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + return ParseResult( + Identifier(id_result.value, span=Span(start=start_pos, end=id_result.cursor.pos)), + id_result.cursor, + ) + + +def parse_variant( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Variant] | None: + """Parse variant: [key] pattern or *[key] pattern.""" + is_default = False + if not cursor.is_eof and cursor.current == "*": + is_default = True + cursor = cursor.advance() + + if cursor.is_eof or cursor.current != "[": + return None + + cursor = cursor.advance() + cursor = skip_blank(cursor) + key_result = parse_variant_key(cursor) + if key_result is None: + return key_result + + cursor = skip_blank(key_result.cursor) + if cursor.is_eof or cursor.current != "]": + return None + + cursor = cursor.advance() + cursor = skip_blank_inline(cursor) + pattern_result = parse_simple_pattern(cursor, context) + if pattern_result is None: + return pattern_result + + variant = Variant(key=key_result.value, value=pattern_result.value, default=is_default) + return ParseResult(variant, pattern_result.cursor) + + +def parse_select_expression( + cursor: Cursor, + selector: SelectorExpression, + start_pos: int, + context: ParseContext | None = None, +) -> ParseResult[SelectExpression] | None: + """Parse select expression after seeing selector and ->.""" + cursor = skip_blank(cursor) + variants: list[Variant] = [] + + while not cursor.is_eof: + cursor = skip_blank(cursor) + + if cursor.is_eof or cursor.current == "}": + break + + variant_result = parse_variant(cursor, context) + if variant_result is None: + return variant_result + + variants.append(variant_result.value) + cursor = variant_result.cursor + + if not variants: + return None + + default_count = sum(1 for variant in variants if variant.default) + if default_count != 1: + return None + + span = Span(start=start_pos, end=cursor.pos) + select_expr = SelectExpression(selector=selector, variants=tuple(variants), span=span) + return ParseResult(select_expr, cursor) + + +def _parse_message_attribute(cursor: Cursor) -> tuple[Identifier | None, Cursor]: + """Parse optional .attribute suffix on message/function references.""" + if cursor.is_eof or cursor.current != ".": + return None, cursor + cursor = cursor.advance() + attr_start = cursor.pos + attr_id_result = parse_identifier(cursor) + if isinstance(attr_id_result, ParseError): + return None, cursor + attr_id = Identifier( + attr_id_result.value, + span=Span(start=attr_start, end=attr_id_result.cursor.pos), + ) + return attr_id, attr_id_result.cursor + + +def parse_argument_expression( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[InlineExpression] | None: + """Parse a single argument expression per FTL spec.""" + if cursor.is_eof: + return None + + start_pos = cursor.pos + ch = cursor.current + + if ch == "$": + var_result = parse_variable_reference(cursor) + if var_result is None: + return None + return ParseResult(var_result.value, var_result.cursor) + + if ch == '"': + str_result = parse_string_literal(cursor) + if isinstance(str_result, ParseError): + return None + return ParseResult(StringLiteral(value=str_result.value), str_result.cursor) + + if ch == "-": + next_cursor = cursor.advance() + if not next_cursor.is_eof and is_identifier_start(next_cursor.current): + term_result = parse_term_reference(cursor, context) + if term_result is None: + return None + return ParseResult(term_result.value, term_result.cursor) + + num_result = parse_number(cursor) + if isinstance(num_result, ParseError): + return None + num_value = parse_number_value(num_result.value) + return ParseResult( + NumberLiteral(value=num_value, raw=num_result.value), num_result.cursor + ) + + if ch in _ASCII_DIGITS: + num_result = parse_number(cursor) + if isinstance(num_result, ParseError): + return None + num_value = parse_number_value(num_result.value) + return ParseResult( + NumberLiteral(value=num_value, raw=num_result.value), num_result.cursor + ) + + if ch == "{": + cursor = cursor.advance() + placeable_result = parse_placeable(cursor, context) + if placeable_result is None: + return None + return ParseResult(placeable_result.value, placeable_result.cursor) + + if is_identifier_start(ch) or ch == "_": + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + name = id_result.value + cursor_after_id = id_result.cursor + lookahead = skip_blank_inline(cursor_after_id) + if not lookahead.is_eof and lookahead.current == "(": + func_result = parse_function_reference(cursor, context) + if func_result is None: + return None + return ParseResult(func_result.value, func_result.cursor) + + attribute, final_cursor = _parse_message_attribute(cursor_after_id) + return ParseResult( + MessageReference( + id=Identifier(name, span=Span(start=start_pos, end=cursor_after_id.pos)), + attribute=attribute, + span=Span(start=start_pos, end=final_cursor.pos), + ), + final_cursor, + ) + + return None + + +def parse_call_arguments( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[CallArguments] | None: + """Parse function call arguments: (pos1, pos2, name1: val1, name2: val2).""" + cursor = skip_blank(cursor) + + positional: list[InlineExpression] = [] + named: list[NamedArgument] = [] + seen_named_arg_names: set[str] = set() + seen_named = False + + while not cursor.is_eof: + cursor = skip_blank(cursor) + if cursor.current == ")": + break + + arg_result = parse_argument_expression(cursor, context) + if arg_result is None: + return arg_result + + arg_expr = arg_result.value + cursor = skip_blank(arg_result.cursor) + + if not cursor.is_eof and cursor.current == ":": + cursor = cursor.advance() + cursor = skip_blank(cursor) + + if not isinstance(arg_expr, MessageReference): + return None + + arg_name = arg_expr.id.name + if arg_name in seen_named_arg_names: + return None + seen_named_arg_names.add(arg_name) + + if cursor.is_eof: + return None + + value_result = parse_argument_expression(cursor, context) + if value_result is None: + return value_result + + value_expr = value_result.value + cursor = value_result.cursor + if not isinstance(value_expr, (StringLiteral, NumberLiteral)): + return None + + named.append( + NamedArgument( + name=Identifier(arg_name, span=arg_expr.id.span), + value=value_expr, + ) + ) + seen_named = True + else: + if seen_named: + return None + positional.append(arg_expr) + + cursor = skip_blank(cursor) + if not cursor.is_eof and cursor.current == ",": + cursor = cursor.advance() + cursor = skip_blank(cursor) + + call_args = CallArguments(positional=tuple(positional), named=tuple(named)) + return ParseResult(call_args, cursor) + + +def parse_function_reference( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[FunctionReference] | None: + """Parse function reference: identifier(args).""" + if context is None: + context = ParseContext() + + if context.is_depth_exceeded(): + return None + + start_pos = cursor.pos + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + func_name = id_result.value + cursor = skip_blank_inline(id_result.cursor) + if cursor.is_eof or cursor.current != "(": + return None + + cursor = cursor.advance() + nested_context = context.enter_nesting() + args_result = parse_call_arguments(cursor, nested_context) + if args_result is None: + return args_result + + cursor = skip_blank_inline(args_result.cursor) + if cursor.is_eof or cursor.current != ")": + return None + + cursor = cursor.advance() + func_ref = FunctionReference( + id=Identifier(func_name, span=Span(start=start_pos, end=id_result.cursor.pos)), + arguments=args_result.value, + span=Span(start=start_pos, end=cursor.pos), + ) + return ParseResult(func_ref, cursor) + + +def parse_term_reference( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[TermReference] | None: + """Parse term reference in inline expression (-term-id or -term.attr).""" + if context is None: + context = ParseContext() + + start_pos = cursor.pos + if cursor.is_eof or cursor.current != "-": + return None + + cursor = cursor.advance() + id_start = cursor.pos + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + cursor = id_result.cursor + attribute: Identifier | None = None + if not cursor.is_eof and cursor.current == ".": + cursor = cursor.advance() + attr_start = cursor.pos + attr_id_result = parse_identifier(cursor) + if isinstance(attr_id_result, ParseError): + return None + attribute = Identifier( + attr_id_result.value, + span=Span(start=attr_start, end=attr_id_result.cursor.pos), + ) + cursor = attr_id_result.cursor + + cursor = skip_blank_inline(cursor) + arguments: CallArguments | None = None + if not cursor.is_eof and cursor.current == "(": + if context.is_depth_exceeded(): + return None + + cursor = cursor.advance() + nested_context = context.enter_nesting() + args_result = parse_call_arguments(cursor, nested_context) + if args_result is None: + return args_result + + cursor = skip_blank_inline(args_result.cursor) + if cursor.is_eof or cursor.current != ")": + return None + + cursor = cursor.advance() + arguments = args_result.value + + term_ref = TermReference( + id=Identifier(id_result.value, span=Span(start=id_start, end=id_result.cursor.pos)), + attribute=attribute, + arguments=arguments, + span=Span(start=start_pos, end=cursor.pos), + ) + return ParseResult(term_ref, cursor) + + +def _parse_inline_string_literal(cursor: Cursor) -> ParseResult[InlineExpression] | None: + """Parse string literal inline expression.""" + str_result = parse_string_literal(cursor) + if isinstance(str_result, ParseError): + return None + return ParseResult(StringLiteral(value=str_result.value), str_result.cursor) + + +def _parse_inline_number_literal(cursor: Cursor) -> ParseResult[InlineExpression] | None: + """Parse number literal inline expression.""" + num_result = parse_number(cursor) + if isinstance(num_result, ParseError): + return None + num_str = num_result.value + num_value = parse_number_value(num_str) + return ParseResult(NumberLiteral(value=num_value, raw=num_str), num_result.cursor) + + +def _parse_inline_hyphen( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[InlineExpression] | None: + """Parse hyphen-prefixed expression.""" + next_cursor = cursor.advance() + if not next_cursor.is_eof and is_identifier_start(next_cursor.current): + term_result = parse_term_reference(cursor, context) + if term_result is None: + return None + return ParseResult(term_result.value, term_result.cursor) + return _parse_inline_number_literal(cursor) + + +def _parse_inline_identifier( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[InlineExpression] | None: + """Parse identifier-based expression: function call or message reference.""" + start_pos = cursor.pos + id_result = parse_identifier(cursor) + if isinstance(id_result, ParseError): + return None + + name = id_result.value + cursor_after_id = id_result.cursor + lookahead = skip_blank_inline(cursor_after_id) + if not lookahead.is_eof and lookahead.current == "(": + func_result = parse_function_reference(cursor, context) + if func_result is None: + return None + return ParseResult(func_result.value, func_result.cursor) + + attribute, final_cursor = _parse_message_attribute(cursor_after_id) + return ParseResult( + MessageReference( + id=Identifier(name, span=Span(start=start_pos, end=cursor_after_id.pos)), + attribute=attribute, + span=Span(start=start_pos, end=final_cursor.pos), + ), + final_cursor, + ) + + +def parse_inline_expression( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[InlineExpression] | None: + """Parse inline expression per Fluent spec.""" + if cursor.is_eof: + return None + + ch = cursor.current + match ch: + case "$": + var_result = parse_variable_reference(cursor) + if var_result is None: + return None + return ParseResult(var_result.value, var_result.cursor) + case '"': + return _parse_inline_string_literal(cursor) + case "-": + return _parse_inline_hyphen(cursor, context) + case "{": + placeable_result = parse_placeable(cursor.advance(), context) + if placeable_result is None: + return None + return ParseResult(placeable_result.value, placeable_result.cursor) + case _ if ch in _ASCII_DIGITS: + return _parse_inline_number_literal(cursor) + case _ if is_identifier_start(ch): + return _parse_inline_identifier(cursor, context) + case _: + return None + + +def parse_placeable( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Placeable] | None: + """Parse placeable expression.""" + if context is None: + context = ParseContext() + + if context.is_depth_exceeded(): + context.mark_depth_exceeded() + return None + + nested_context = context.enter_nesting() + cursor = skip_blank(cursor) + expr_start_pos = cursor.pos + + expr_result = parse_inline_expression(cursor, nested_context) + if expr_result is None: + return expr_result + + expression = expr_result.value + cursor = skip_blank(expr_result.cursor) + + is_valid_selector = isinstance( + expression, + ( + VariableReference, + StringLiteral, + NumberLiteral, + FunctionReference, + MessageReference, + TermReference, + ), + ) + if is_valid_selector and not cursor.is_eof and cursor.current == "-": + next_cursor = cursor.advance() + if not next_cursor.is_eof and next_cursor.current == ">": + cursor = next_cursor.advance() + select_result = parse_select_expression( + cursor, + cast("SelectorExpression", expression), + expr_start_pos, + nested_context, + ) + if select_result is None: + return select_result + + cursor = skip_blank(select_result.cursor) + if cursor.is_eof or cursor.current != "}": + return None + + cursor = cursor.advance() + return ParseResult(Placeable(expression=select_result.value), cursor) + + if cursor.is_eof or cursor.current != "}": + return None + + cursor = cursor.advance() + return ParseResult(Placeable(expression=expression), cursor) diff --git a/src/ftllexengine/syntax/parser/patterns.py b/src/ftllexengine/syntax/parser/patterns.py new file mode 100644 index 00000000..78cb1f88 --- /dev/null +++ b/src/ftllexengine/syntax/parser/patterns.py @@ -0,0 +1,358 @@ +"""Pattern-oriented Fluent grammar rules.""" + +from __future__ import annotations + +import importlib +from dataclasses import dataclass +from typing import TYPE_CHECKING, cast + +from ftllexengine.syntax.ast import Pattern, Placeable, TextElement +from ftllexengine.syntax.cursor import Cursor, ParseResult +from ftllexengine.syntax.parser.primitives import ( + _ASCII_DIGITS, + is_identifier_char, + is_identifier_start, +) +from ftllexengine.syntax.parser.whitespace import is_indented_continuation + +if TYPE_CHECKING: + from ftllexengine.syntax.parser.context import ParseContext + +__all__ = [ + "_MAX_LOOKAHEAD_CHARS", + "parse_pattern", + "parse_simple_pattern", +] + +# Maximum lookahead distance for variant marker detection. +# Must accommodate: '[' + optional_spaces + identifier (up to MAX_IDENTIFIER_LENGTH chars) +# + optional_spaces + ']'. Value of 300 ensures variant keys with maximum-length +# identifiers parse correctly while bounding lookahead on adversarial inputs. +_MAX_LOOKAHEAD_CHARS: int = 300 + + +def _parse_placeable( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Placeable] | None: + """Load the placeable parser lazily to keep grammar modules acyclic.""" + expressions = importlib.import_module("ftllexengine.syntax.parser.expressions") + return cast("ParseResult[Placeable] | None", expressions.parse_placeable(cursor, context)) + + +def _is_valid_variant_key_char(ch: str, *, is_first: bool) -> bool: + """Check if character is valid in a variant key (identifier or number).""" + if is_first: + return is_identifier_start(ch) or ch == "_" or ch in _ASCII_DIGITS + return is_identifier_char(ch) or ch == "." + + +def _is_variant_marker(cursor: Cursor) -> bool: + """Check if cursor is at a variant marker using bounded lookahead.""" + max_lookahead = _MAX_LOOKAHEAD_CHARS + + if cursor.is_eof: + return False + + ch = cursor.current + + if ch == "*": + next_cursor = cursor.advance() + return not next_cursor.is_eof and next_cursor.current == "[" + + if ch == "[": + scan = cursor.advance() + is_first = True + has_content = False + lookahead_count = 0 + + while not scan.is_eof and scan.current == " " and lookahead_count < max_lookahead: + scan = scan.advance() + lookahead_count += 1 + + while not scan.is_eof and lookahead_count < max_lookahead: + current = scan.current + lookahead_count += 1 + + if current == "]": + if not has_content: + return False + + after_bracket = scan.advance() + while ( + not after_bracket.is_eof + and after_bracket.current == " " + and lookahead_count < max_lookahead + ): + after_bracket = after_bracket.advance() + lookahead_count += 1 + + if after_bracket.is_eof: + return True + + return after_bracket.current in ("\n", "}", "[", "*") + + if current in ("\n", "{", "}", " ", "\t", ",", ":", ";", "=", "+", "*", "/"): + return False + if not _is_valid_variant_key_char(current, is_first=is_first): + return False + has_content = True + is_first = False + scan = scan.advance() + + return False + + +def _trim_pattern_blank_lines( + elements: list[TextElement | Placeable], +) -> tuple[TextElement | Placeable, ...]: + """Trim leading and trailing blank lines from pattern elements.""" + if not elements: + return () + + result = list(elements) + + while result and isinstance(result[0], TextElement): + first = result[0] + stripped = first.value.lstrip(" \n") + if stripped: + result[0] = TextElement(value=stripped) + break + result.pop(0) + + while result and isinstance(result[-1], TextElement): + last = result[-1] + text = last.value + last_newline = text.rfind("\n") + + if last_newline == -1: + break + + after_newline = text[last_newline + 1 :] + if after_newline.strip(" "): + break + + trimmed = text[:last_newline] + if trimmed: + result[-1] = TextElement(value=trimmed) + else: + result.pop() + + return tuple(result) + + +class _TextAccumulator: + """Accumulator for building TextElement with efficient string concatenation.""" + + __slots__ = ("fragments",) + + def __init__(self) -> None: + self.fragments: list[str] = [] + + def add(self, text: str) -> None: + """Add text fragment to accumulator.""" + self.fragments.append(text) + + def has_content(self) -> bool: + """Check if accumulator has any content.""" + return len(self.fragments) > 0 + + def finalize(self) -> TextElement: + """Create TextElement from accumulated fragments.""" + return TextElement(value="".join(self.fragments)) + + def clear(self) -> None: + """Clear accumulated fragments.""" + self.fragments.clear() + + +@dataclass(slots=True) +class _ContinuationResult: + """Result of processing a continuation line.""" + + cursor: Cursor + common_indent: int + extra_spaces: str + + +def _count_leading_spaces(cursor: Cursor) -> int: + """Count leading spaces at current position.""" + pos = cursor.pos + source = cursor.source + length = len(source) + start = pos + while pos < length and source[pos] == " ": + pos += 1 + return pos - start + + +def _skip_common_indent(cursor: Cursor, common_indent: int) -> tuple[Cursor, str]: + """Skip common indentation and return any extra spaces.""" + skipped = 0 + while skipped < common_indent and not cursor.is_eof and cursor.current == " ": + cursor = cursor.advance() + skipped += 1 + + extra_spaces: list[str] = [] + while not cursor.is_eof and cursor.current == " ": + extra_spaces.append(" ") + cursor = cursor.advance() + + return cursor, "".join(extra_spaces) + + +def _process_continuation_line( + cursor: Cursor, + common_indent: int | None, +) -> _ContinuationResult: + """Process a continuation line after newline.""" + while not cursor.is_eof and cursor.current == "\n": + cursor = cursor.advance() + + if common_indent is None: + common_indent = _count_leading_spaces(cursor) + cursor = cursor.skip_spaces() + extra_spaces = "" + else: + cursor, extra_spaces = _skip_common_indent(cursor, common_indent) + + return _ContinuationResult( + cursor=cursor, + common_indent=common_indent, + extra_spaces=extra_spaces, + ) + + +def _append_newline_to_elements( + elements: list[TextElement | Placeable], +) -> None: + """Append newline to last element or create new TextElement.""" + if elements and not isinstance(elements[-1], Placeable): + last_elem = elements[-1] + elements[-1] = TextElement(value=last_elem.value + "\n") + else: + elements.append(TextElement(value="\n")) + + +def parse_simple_pattern( + cursor: Cursor, + context: ParseContext | None = None, +) -> ParseResult[Pattern] | None: + """Parse simple pattern (text with optional placeables).""" + elements: list[TextElement | Placeable] = [] + common_indent: int | None = None + text_acc = _TextAccumulator() + + while not cursor.is_eof: + ch = cursor.current + + if ch == "}": + break + + if ch in ("[", "*") and _is_variant_marker(cursor): + break + + if ch == "\n": + if is_indented_continuation(cursor): + cursor = cursor.advance() + result = _process_continuation_line(cursor, common_indent) + cursor = result.cursor + common_indent = result.common_indent + _append_newline_to_elements(elements) + if result.extra_spaces: + text_acc.add(result.extra_spaces) + continue + break + + if ch == "{": + if text_acc.has_content(): + elements.append(text_acc.finalize()) + text_acc.clear() + + cursor = cursor.advance() + placeable_result = _parse_placeable(cursor, context) + if placeable_result is None: + return placeable_result + + cursor = placeable_result.cursor + elements.append(placeable_result.value) + else: + text_start = cursor.pos + while not cursor.is_eof: # pragma: no branch + ch = cursor.current + if ch in ("{", "\n", "}"): + break + if ch in ("[", "*") and _is_variant_marker(cursor): + break + cursor = cursor.advance() + + if cursor.pos > text_start: # pragma: no branch + text = Cursor(cursor.source, text_start).slice_to(cursor.pos) + if text_acc.has_content(): + text = text_acc.finalize().value + text + text_acc.clear() + elements.append(TextElement(value=text)) + + if text_acc.has_content(): + elements.append(text_acc.finalize()) + + return ParseResult(Pattern(elements=_trim_pattern_blank_lines(elements)), cursor) + + +def parse_pattern( + cursor: Cursor, + context: ParseContext | None = None, + *, + initial_common_indent: int | None = None, +) -> ParseResult[Pattern] | None: + """Parse full pattern with multi-line continuation support.""" + elements: list[TextElement | Placeable] = [] + common_indent: int | None = initial_common_indent or None + text_acc = _TextAccumulator() + + while not cursor.is_eof: + ch = cursor.current + + if ch == "\n": + if is_indented_continuation(cursor): + cursor = cursor.advance() + result = _process_continuation_line(cursor, common_indent) + cursor = result.cursor + common_indent = result.common_indent + _append_newline_to_elements(elements) + if result.extra_spaces: + text_acc.add(result.extra_spaces) + continue + break + + if ch == "{": + if text_acc.has_content(): + elements.append(text_acc.finalize()) + text_acc.clear() + + cursor = cursor.advance() + placeable_result = _parse_placeable(cursor, context) + if placeable_result is None: + return placeable_result + + elements.append(placeable_result.value) + cursor = placeable_result.cursor + else: + text_start = cursor.pos + while not cursor.is_eof: + ch = cursor.current + if ch in ("{", "\n"): + break + cursor = cursor.advance() + + if cursor.pos > text_start: # pragma: no branch + text = Cursor(cursor.source, text_start).slice_to(cursor.pos) + if text_acc.has_content(): + text = text_acc.finalize().value + text + text_acc.clear() + elements.append(TextElement(value=text)) + + if text_acc.has_content(): + elements.append(text_acc.finalize()) + + return ParseResult(Pattern(elements=_trim_pattern_blank_lines(elements)), cursor) diff --git a/src/ftllexengine/syntax/parser/rules.py b/src/ftllexengine/syntax/parser/rules.py index 6bf5ddea..834fc8b8 100644 --- a/src/ftllexengine/syntax/parser/rules.py +++ b/src/ftllexengine/syntax/parser/rules.py @@ -1,2144 +1,74 @@ -"""Grammar rules for Fluent FTL parser. - -This module provides all parsing rules for FTL grammar constructs: -- Pattern parsing (variable references, text elements, placeables) -- Expression parsing (inline expressions, select expressions, function calls) -- Entry parsing (messages, terms, attributes, comments) - -All grammar rules are co-located in a single module to: -1. Eliminate circular imports between interdependent parsing functions -2. Simplify the import graph -3. Allow direct function calls instead of function-local imports - -Lookahead Patterns: - The parser uses character-based lookahead for disambiguation: - - `{` starts a Placeable - - `$` starts a VariableReference - - `-` followed by identifier starts a TermReference - - `.` in specific contexts starts an attribute access - - `*[` marks the default variant in SelectExpression - - These single-character or two-character lookaheads are implemented inline - using cursor.peek(n) rather than separate Lookahead helper classes. While - this creates some code duplication, it keeps the parsing logic explicit - and easy to trace. Future refactoring could extract common patterns into - a Lookahead utility class if the grammar expands significantly. - -Security: - Includes configurable nesting depth limit to prevent DoS attacks via - deeply nested placeables (e.g., { { { { ... } } } }). -""" +"""Composable Fluent grammar surface assembled from focused parser modules.""" from __future__ import annotations -from dataclasses import dataclass -from typing import cast - -from ftllexengine.constants import MAX_DEPTH -from ftllexengine.enums import CommentType -from ftllexengine.syntax.ast import ( - Attribute, - CallArguments, - Comment, - FunctionReference, - Identifier, - InlineExpression, - Message, - MessageReference, - NamedArgument, - NumberLiteral, - Pattern, - Placeable, - SelectExpression, - SelectorExpression, - Span, - StringLiteral, - Term, - TermReference, - TextElement, - VariableReference, - Variant, -) -from ftllexengine.syntax.cursor import Cursor, ParseError, ParseResult -from ftllexengine.syntax.parser.primitives import ( - _ASCII_DIGITS, - is_identifier_char, - is_identifier_start, - parse_identifier, - parse_number, - parse_number_value, - parse_string_literal, +from ftllexengine.syntax.parser.context import ParseContext +from ftllexengine.syntax.parser.entries import ( + parse_attribute, + parse_comment, + parse_message, + parse_message_attributes, + parse_message_header, + parse_term, + validate_message_content, ) -from ftllexengine.syntax.parser.whitespace import ( - is_indented_continuation, - skip_blank, - skip_blank_inline, - skip_multiline_pattern_start, +from ftllexengine.syntax.parser.expressions import ( + _parse_inline_hyphen, + _parse_inline_identifier, + _parse_inline_number_literal, + _parse_inline_string_literal, + _parse_message_attribute, + parse_argument_expression, + parse_call_arguments, + parse_function_reference, + parse_inline_expression, + parse_placeable, + parse_select_expression, + parse_term_reference, + parse_variable_reference, + parse_variant, + parse_variant_key, ) - -__all__ = ["ParseContext", "parse_comment", "parse_message", "parse_term"] - -# Maximum lookahead distance for variant marker detection. -# Must accommodate: '[' + optional_spaces + identifier (up to MAX_IDENTIFIER_LENGTH chars) -# + optional_spaces + ']'. Value of 300 ensures variant keys with maximum-length -# identifiers parse correctly while bounding lookahead on adversarial inputs. -_MAX_LOOKAHEAD_CHARS: int = 300 - -# Ordered comment types indexed by hash count minus one (hash_count in [1, 2, 3]). -# Pre-computed tuple eliminates per-call dict allocation in parse_comment(). -_COMMENT_TYPE_BY_HASH_COUNT: tuple[CommentType, CommentType, CommentType] = ( - CommentType.COMMENT, - CommentType.GROUP, - CommentType.RESOURCE, +from ftllexengine.syntax.parser.patterns import ( + _MAX_LOOKAHEAD_CHARS, + _is_valid_variant_key_char, + _is_variant_marker, + _trim_pattern_blank_lines, + parse_pattern, + parse_simple_pattern, ) - - -@dataclass(slots=True) -class ParseContext: - """Explicit context for parsing operations. - - Replaces thread-local state with explicit parameter passing for: - - Thread safety without global state - - Async framework compatibility - - Easier testing (no state reset needed) - - Clear dependency flow - - Security: - Tracks nesting depth for BOTH placeables and function calls to prevent - stack overflow DoS attacks. Deeply nested constructs like: - - { { { ... } } } (nested placeables) - - { A(B(C(D(...)))) } (nested function calls) - Both consume stack frames and must be bounded. - - Attributes: - max_nesting_depth: Maximum allowed nesting depth for placeables and calls - current_depth: Current nesting depth (0 = top level) - _depth_exceeded_flag: Mutable flag (list container) shared across all nested - contexts to track if depth limit was exceeded during parse. Uses list[bool] - as a mutable reference that persists when context objects are copied during - enter_nesting(). Set to [True] when depth exceeded; checked at Junk creation - to emit specific PARSE_NESTING_DEPTH_EXCEEDED diagnostic. - """ - - max_nesting_depth: int = MAX_DEPTH - current_depth: int = 0 - _depth_exceeded_flag: list[bool] | None = None - - def __post_init__(self) -> None: - """Initialize mutable depth exceeded flag if not provided.""" - if self._depth_exceeded_flag is None: - # Create mutable flag container shared across all nested contexts - self._depth_exceeded_flag = [False] - - def is_depth_exceeded(self) -> bool: - """Check if maximum nesting depth has been exceeded.""" - return self.current_depth >= self.max_nesting_depth - - def mark_depth_exceeded(self) -> None: - """Mark that depth limit was exceeded during parse. - - Sets persistent flag that survives context unwinding, allowing Junk creation - sites to detect depth-exceeded failures and emit specific diagnostics. - """ - if self._depth_exceeded_flag is not None: - self._depth_exceeded_flag[0] = True - - def was_depth_exceeded(self) -> bool: - """Check if depth limit was exceeded at any point during parse. - - Returns: - True if depth exceeded, False otherwise - """ - return bool( - self._depth_exceeded_flag is not None and self._depth_exceeded_flag[0] - ) - - def enter_nesting(self) -> ParseContext: - """Create new context with incremented depth for entering nested construct. - - Used for both placeables and function/term calls with arguments. - Each recursive descent into nested syntax increments depth. - Shares depth_exceeded flag across all nested contexts. - """ - return ParseContext( - max_nesting_depth=self.max_nesting_depth, - current_depth=self.current_depth + 1, - _depth_exceeded_flag=self._depth_exceeded_flag, - ) - - -# ============================================================================= -# Pattern Parsing -# ============================================================================= - - -def parse_variable_reference(cursor: Cursor) -> ParseResult[VariableReference] | None: - """Parse variable reference: $variable - - Variables start with $ followed by an identifier. - - Examples: - $name -> VariableReference(Identifier("name")) - $count -> VariableReference(Identifier("count")) - - Args: - cursor: Current position in source - - Returns: - Success(ParseResult(VariableReference, new_cursor)) on success - Failure(ParseError(...)) if not a variable reference - """ - # Capture start position for span - start_pos = cursor.pos - - # Expect $ - if cursor.is_eof or cursor.current != "$": - return None # "Expected variable reference (starts with $)", cursor, expected=["$"] - - cursor = cursor.advance() # Skip $ - id_start_pos = cursor.pos # Start of identifier (after '$') - - # Parse identifier - result = parse_identifier(cursor) - if isinstance(result, ParseError): - return None - - parse_result = result - var_ref = VariableReference( - id=Identifier( - parse_result.value, - span=Span(start=id_start_pos, end=parse_result.cursor.pos), - ), - span=Span(start=start_pos, end=parse_result.cursor.pos), - ) - return ParseResult(var_ref, parse_result.cursor) - - -def _is_valid_variant_key_char(ch: str, *, is_first: bool) -> bool: - """Check if character is valid in a variant key (identifier or number). - - Variant keys are either identifiers or number literals: - - Identifiers: [a-zA-Z_][a-zA-Z0-9_-]* - - Numbers: [0-9]+ or [0-9]+.[0-9]+ - - Note: - This helper permits '.' for number literals (e.g., "1.5") but identifiers - cannot contain '.'. The caller (_is_variant_marker) uses this for lookahead - scanning, not strict grammar validation. A key like "foo.bar" would pass - this check but fail later grammar validation as an invalid identifier. - - Args: - ch: Character to check - is_first: True if this is the first character - - Returns: - True if character is valid for variant key content - """ - if is_first: - # First char: ASCII letter (for identifiers), underscore, or digit (for numbers) - # Note: Uses ASCII-only check per Fluent spec for cross-implementation compatibility - return is_identifier_start(ch) or ch == "_" or ch in _ASCII_DIGITS - # Subsequent chars: ASCII alphanumeric, underscore, hyphen, or dot (for decimals) - # Note: '.' is only valid in number literals, not identifiers - return is_identifier_char(ch) or ch == "." - - -def _is_variant_marker(cursor: Cursor) -> bool: - """Check if cursor is at a variant marker using bounded lookahead. - - Distinguishes actual variant syntax from literal text: - - '*' is a variant marker only if followed by '[' - - '[' is a variant marker only if: - 1. Content is valid identifier/number - 2. Ends with ']' - 3. After ']', no non-whitespace text before newline/variant/end - - Valid variant keys (stop parsing): - - [one] (followed by newline, }, or another variant) - - *[other] (default variant) - - NOT variant keys (literal text): - - [1, 2, 3] - contains comma and spaces - - [INFO] message - has text after ] on same line - - [matrix * vector] - contains spaces and operators - - Security: - Uses bounded lookahead (max 128 chars) to prevent O(N^2) parsing - on adversarial input like `[[[[...` with many unclosed brackets. - Variant keys are identifiers/numbers which are always short. - - Args: - cursor: Current position in source - - Returns: - True if at variant marker syntax, False if literal text - - Note: - PLR0911 waiver: Multiple returns are intentional for early-exit - pattern matching, which is clearer than nested conditionals. - """ - # Use bounded lookahead limit - variant keys are short (identifiers/numbers). - # This prevents O(N^2) worst-case on adversarial input like [[[[... - max_lookahead = _MAX_LOOKAHEAD_CHARS - - if cursor.is_eof: - return False - - ch = cursor.current - - if ch == "*": - # '*' is variant marker only if followed by '[' - next_cursor = cursor.advance() - return not next_cursor.is_eof and next_cursor.current == "[" - - if ch == "[": - # '[' is variant marker only if: - # 1. Content is valid identifier or number (no spaces, commas, etc.) - # 2. Ends with ']' - # 3. After ']', the next thing is whitespace leading to newline, }, [, or *[ - scan = cursor.advance() - is_first = True - has_content = False - lookahead_count = 0 - - # Skip blank? after opening bracket per Fluent spec - # Per Fluent EBNF: VariantKey ::= "[" blank? (NumberLiteral | Identifier) blank? "]" - # blank_inline ::= "\u0020"+ (spaces only, not tabs) - while not scan.is_eof and scan.current == " " and lookahead_count < max_lookahead: - scan = scan.advance() - lookahead_count += 1 - - # Find the closing ] with bounded lookahead - while not scan.is_eof and lookahead_count < max_lookahead: - c = scan.current - lookahead_count += 1 - - if c == "]": - # Found closing bracket - now check what follows - if not has_content: - return False # Empty [] is not a variant key - - # Check what comes after ] - after_bracket = scan.advance() - - # Skip inline whitespace (ONLY space per spec, NOT tab) - # Per Fluent EBNF: blank_inline ::= "\u0020"+ - while ( - not after_bracket.is_eof - and after_bracket.current == " " - and lookahead_count < max_lookahead - ): - after_bracket = after_bracket.advance() - lookahead_count += 1 - - if after_bracket.is_eof: - return True # EOF after ] - valid variant - - # Valid if followed by: newline, }, [, or * (for *[other]) - # Note: Line endings are normalized to LF at parser entry. - return after_bracket.current in ("\n", "}", "[", "*") - - if c in ("\n", "{", "}", " ", "\t", ",", ":", ";", "=", "+", "*", "/"): - # Invalid char for variant key - this is literal text - return False - if not _is_valid_variant_key_char(c, is_first=is_first): - # Character not valid for identifier/number - return False - has_content = True - is_first = False - scan = scan.advance() - - # Exceeded lookahead or EOF before ']' - treat as literal text - return False - - return False - - -def _trim_pattern_blank_lines( - elements: list[TextElement | Placeable], -) -> tuple[TextElement | Placeable, ...]: - """Trim leading and trailing blank lines from pattern elements. - - Per Fluent spec, patterns should not include leading or trailing blank lines. - A blank line is defined as a line containing only ASCII spaces (U+0020), - matching blank_inline ::= "\u0020"+ — NOT arbitrary Unicode whitespace. - Characters like U+00A0 (NO-BREAK SPACE) are valid inline-char values and - must be preserved, not stripped. - - This function: - 1. Strips leading whitespace/blank lines from the first TextElement - 2. Strips trailing blank lines from the last TextElement (but preserves - trailing whitespace on content lines - only removes after last newline) - 3. Removes empty TextElements resulting from stripping - - Args: - elements: List of pattern elements (TextElement or Placeable) - - Returns: - Tuple of trimmed pattern elements - """ - if not elements: - return () - - result = list(elements) - - # Trim leading whitespace from first element if it's a TextElement. - # Per Fluent spec, blank_inline ::= "\u0020"+ (ASCII space only). - # Use lstrip(" \n") — not lstrip() — to avoid stripping valid Unicode - # space separators like U+00A0 (NO-BREAK SPACE) that are legal inline-char - # values per the FTL grammar. - while result and isinstance(result[0], TextElement): - first = result[0] - stripped = first.value.lstrip(" \n") - if stripped: - # Keep non-empty content - result[0] = TextElement(value=stripped) - break - # Element was all whitespace - remove it - result.pop(0) - - # Trim trailing BLANK LINES from last element if it's a TextElement. - # Per Fluent spec, only trailing blank lines should be removed, - # NOT trailing whitespace on content lines. - # Example: "Firefox " should preserve trailing spaces, - # but "Firefox\n \n" should become "Firefox". - # A "blank line" is a line containing only ASCII spaces (U+0020), not - # arbitrary Unicode whitespace — use strip(" ") not strip(). - while result and isinstance(result[-1], TextElement): - last = result[-1] - text = last.value - - # Find the last newline in the text - last_newline = text.rfind("\n") - - if last_newline == -1: - # No newlines - this is a single-line text element. - # Do NOT strip trailing whitespace (it's significant per Fluent spec). - break - - # Check if everything after the last newline is ASCII spaces only (blank line). - # strip(" ") matches Fluent spec blank_inline ::= "\u0020"+ definition. - after_newline = text[last_newline + 1 :] - if after_newline.strip(" "): - # Content after last newline - preserve it all (including trailing spaces) - break - - # Everything after last newline is whitespace - trim this blank line - trimmed = text[:last_newline] - if trimmed: - result[-1] = TextElement(value=trimmed) - # Continue loop to check for more trailing blank lines - else: - # Element was all whitespace - remove it - result.pop() - - return tuple(result) - - -class _TextAccumulator: - """Accumulator for building TextElement with efficient string concatenation. - - Avoids O(N^2) behavior when processing continuation lines by collecting - text fragments in a list and joining once. - """ - - __slots__ = ("fragments",) - - def __init__(self) -> None: - """Initialize empty accumulator.""" - self.fragments: list[str] = [] - - def add(self, text: str) -> None: - """Add text fragment to accumulator. - - Args: - text: Text fragment to add - """ - self.fragments.append(text) - - def has_content(self) -> bool: - """Check if accumulator has any content. - - Returns: - True if accumulator has fragments, False otherwise - """ - return len(self.fragments) > 0 - - def finalize(self) -> TextElement: - """Create TextElement from accumulated fragments. - - Returns: - TextElement with joined content - """ - return TextElement(value="".join(self.fragments)) - - def clear(self) -> None: - """Clear accumulated fragments.""" - self.fragments.clear() - - -def parse_simple_pattern( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[Pattern] | None: - """Parse simple pattern (text with optional placeables). - - Used for parsing variant value patterns within select expressions. - Stops at variant delimiters to allow proper parsing of inline and - multiline select expressions. - - Supports multiline continuation: variant values can span multiple lines when - continuation lines are indented, matching the behavior of top-level patterns. - - Per Fluent spec, common indentation handling: - - The first continuation line's indentation sets the "common indent" baseline - - Subsequent continuation lines have only the common indent stripped - - Extra indentation beyond the common baseline is preserved in the pattern - - Handles: - - Plain text with multi-line continuation (indented lines) - - All placeable types: {$var}, {-term}, {NUMBER(...)}, {"string"}, {42} - - Stop conditions: - - Close brace (}): End of containing select expression - - Open bracket ([): Start of next variant key (with lookahead) - - Asterisk (*): Start of default variant marker (only if followed by '[') - - Newline (\\n): End of variant value UNLESS followed by indented continuation - - Lookahead: - '*' and '[' are only treated as variant markers when they form valid - variant syntax. Standalone '*' or '[' without matching pattern are - treated as literal text, enabling values like "[INFO]" or "3 * 5". - - Examples: - "Hello" -> Pattern([TextElement("Hello")]) - "Hi {$name}" -> Pattern([TextElement("Hi "), Placeable(...)]) - "[INFO] msg" -> Pattern([TextElement("[INFO] msg")]) # [ is literal - "3 * 5" -> Pattern([TextElement("3 * 5")]) # * is literal - "Line 1\\n Line 2" -> Pattern with multiline content - - Args: - cursor: Current position in source - context: Parse context for depth tracking - - Returns: - ParseResult(Pattern, new_cursor) on success, None on parse error - """ - elements: list[TextElement | Placeable] = [] - # Track common indentation (set on first continuation line) - common_indent: int | None = None - # Accumulate text fragments to avoid O(N^2) string concatenation - text_acc = _TextAccumulator() - - while not cursor.is_eof: - ch = cursor.current - - # Stop condition: end of select expression - if ch == "}": - break - - # Check variant markers with lookahead - # - [: start of next variant key (only if followed by text and ]) - # - *: start of default variant marker (only if followed by [) - if ch in ("[", "*") and _is_variant_marker(cursor): - break - - # Handle newline - check for indented continuation. - # Note: Line endings are normalized to LF at parser entry. - if ch == "\n": - if is_indented_continuation(cursor): - # Skip newline and process continuation - cursor = cursor.advance() - result = _process_continuation_line(cursor, common_indent) - cursor = result.cursor - common_indent = result.common_indent - - # Merge newline with previous element - _append_newline_to_elements(elements) - - # Store extra_spaces to prepend to next text element - if result.extra_spaces: - text_acc.add(result.extra_spaces) - continue # Continue parsing on next line - break # Not a continuation, stop parsing pattern - - # Parse placeable expression - if ch == "{": - # Add accumulated extra_spaces as text element before placeable - if text_acc.has_content(): - elements.append(text_acc.finalize()) - text_acc.clear() - - cursor = cursor.advance() # Skip { - - # Use full placeable parser which handles all expression types - # (variables, terms, functions, strings, numbers, select expressions) - placeable_result = parse_placeable(cursor, context) - if placeable_result is None: - return placeable_result - - placeable_parse = placeable_result - cursor = placeable_parse.cursor - elements.append(placeable_parse.value) - - else: - # Parse text until { or stop condition - text_start = cursor.pos - while not cursor.is_eof: # pragma: no branch - ch = cursor.current - # Stop at: placeable start, newline, closing brace - # Note: Line endings are normalized to LF at parser entry. - if ch in ("{", "\n", "}"): - break - # Check variant markers with lookahead - if ch in ("[", "*") and _is_variant_marker(cursor): - break - cursor = cursor.advance() - - if cursor.pos > text_start: # pragma: no branch - # Note: This condition is always True because entering the else block - # at line 355 means ch was not a stop character, so the inner while - # loop at 358 will always advance at least once before breaking. - # The False branch (cursor.pos == text_start) is structurally unreachable. - text = Cursor(cursor.source, text_start).slice_to(cursor.pos) - # Prepend extra_spaces from continuation to new text element - if text_acc.has_content(): - text = text_acc.finalize().value + text - text_acc.clear() - elements.append(TextElement(value=text)) - - # Finalize any remaining accumulated extra_spaces (trailing spaces at end of pattern) - if text_acc.has_content(): - # These are just trailing extra_spaces; add as text element (may be trimmed) - elements.append(text_acc.finalize()) - - # Per Fluent spec, trim leading and trailing blank lines from patterns - trimmed_elements = _trim_pattern_blank_lines(elements) - pattern = Pattern(elements=trimmed_elements) - return ParseResult(pattern, cursor) - - -def _count_leading_spaces(cursor: Cursor) -> int: - """Count leading spaces at current position (for common indentation tracking). - - Args: - cursor: Current position (at start of line content after newline) - - Returns: - Number of leading space characters (U+0020 only, not tabs) - """ - # Integer arithmetic avoids O(N) cursor allocations on hot path - pos = cursor.pos - source = cursor.source - length = len(source) - start = pos - while pos < length and source[pos] == " ": - pos += 1 - return pos - start - - -def _skip_common_indent(cursor: Cursor, common_indent: int) -> tuple[Cursor, str]: - """Skip common indentation and return any extra spaces. - - Per Fluent spec, only the common indentation is stripped from continuation - lines. Extra indentation beyond the common baseline is preserved. - - Args: - cursor: Current position (at start of line content after newline) - common_indent: Number of spaces to strip (common indentation) - - Returns: - Tuple of (new cursor position, extra spaces to preserve) - """ - # Skip common indent spaces - skipped = 0 - while skipped < common_indent and not cursor.is_eof and cursor.current == " ": - cursor = cursor.advance() - skipped += 1 - - # Collect extra spaces beyond common indent - extra_spaces: list[str] = [] - while not cursor.is_eof and cursor.current == " ": - extra_spaces.append(" ") - cursor = cursor.advance() - - return cursor, "".join(extra_spaces) - - -@dataclass(slots=True) -class _ContinuationResult: - """Result of processing a continuation line. - - Encapsulates all state changes from continuation processing to reduce - duplication between parse_simple_pattern and parse_pattern. - """ - - cursor: Cursor - common_indent: int - extra_spaces: str - - -def _process_continuation_line( - cursor: Cursor, - common_indent: int | None, -) -> _ContinuationResult: - """Process a continuation line after newline. - - Shared logic for handling indented continuation lines in patterns. - Skips blank lines, tracks common indentation, and preserves extra spaces. - - Per Fluent spec, common indentation handling: - - The first continuation line's indentation sets the "common indent" baseline - - Subsequent continuation lines have only the common indent stripped - - Extra indentation beyond the common baseline is preserved in the pattern - - Args: - cursor: Position after the newline character (already advanced past newline) - common_indent: Current common indentation (None if not yet set) - - Returns: - ContinuationResult with updated cursor, common_indent, and extra_spaces - """ - # Skip any blank lines (consecutive newlines) before measuring indent. - # This matches is_indented_continuation() which looks past blank lines - # to find indented content. Without this, blank lines before first - # content would set common_indent to 0 (measuring at newline position). - while not cursor.is_eof and cursor.current == "\n": - cursor = cursor.advance() - - # Track common indentation from first continuation line - if common_indent is None: - common_indent = _count_leading_spaces(cursor) - # Skip the common indent - cursor = cursor.skip_spaces() - extra_spaces = "" - else: - # Skip only common indent, preserve extra spaces - cursor, extra_spaces = _skip_common_indent(cursor, common_indent) - - return _ContinuationResult( - cursor=cursor, - common_indent=common_indent, - extra_spaces=extra_spaces, - ) - - -def _append_newline_to_elements( - elements: list[TextElement | Placeable], -) -> None: - """Append newline to last element or create new TextElement. - - Per Fluent spec, continuation lines are joined with newlines. - The newline belongs to the END of the previous element. - - Args: - elements: List of pattern elements (mutated in place) - """ - if elements and not isinstance(elements[-1], Placeable): - last_elem = elements[-1] - elements[-1] = TextElement(value=last_elem.value + "\n") - else: - # No previous text element to merge with - elements.append(TextElement(value="\n")) - - -def parse_pattern( - cursor: Cursor, - context: ParseContext | None = None, - *, - initial_common_indent: int | None = None, -) -> ParseResult[Pattern] | None: - """Parse full pattern with multi-line continuation support. - - Use this for top-level message/attribute patterns. For variant patterns - inside select expressions, use parse_simple_pattern() which has simpler - stop conditions (no multi-line continuation). - - Per Fluent spec, common indentation handling: - - The first continuation line's indentation sets the "common indent" baseline - - Subsequent continuation lines have only the common indent stripped - - Extra indentation beyond the common baseline is preserved in the pattern - - Handles: - - Plain text with multi-line continuation (indented lines) - - All placeable types: {$var}, {-term}, {NUMBER(...)}, {"string"}, {42} - - Select expressions: {$var -> [key] value} - - Args: - cursor: Current position in source - context: Parse context for depth tracking - initial_common_indent: Pre-computed common indent from skip_multiline_pattern_start. - When provided, this is the indentation of the first line of a multiline - pattern (already skipped by skip_multiline_pattern_start). - - Returns: - ParseResult with Pattern on success, None on parse error - """ - elements: list[TextElement | Placeable] = [] - # Track common indentation (set on first continuation line, or from initial_common_indent) - common_indent: int | None = initial_common_indent or None - # Accumulate text fragments to avoid O(N^2) string concatenation - text_acc = _TextAccumulator() - - while not cursor.is_eof: - ch = cursor.current - - # Handle newline - check for indented continuation. - # Note: Line endings are normalized to LF at parser entry. - if ch == "\n": - if is_indented_continuation(cursor): - # Skip newline and process continuation - cursor = cursor.advance() - result = _process_continuation_line(cursor, common_indent) - cursor = result.cursor - common_indent = result.common_indent - - # Merge newline with previous element - _append_newline_to_elements(elements) - - # Store extra_spaces to prepend to next text element - if result.extra_spaces: - text_acc.add(result.extra_spaces) - continue # Continue parsing on next line - break # Not a continuation, stop parsing pattern - - # Note: '.' is removed from stop conditions here. - # Per Fluent spec, '.' only starts an attribute when it appears at the - # beginning of a NEW LINE (after newline + optional indentation). - # A '.' on the same line as '=' is valid text content. - # Attributes are detected in message/term parsing after pattern completes. - - # Placeable: {$var} or {$var -> ...} - if ch == "{": - # Add accumulated extra_spaces as text element before placeable - if text_acc.has_content(): - elements.append(text_acc.finalize()) - text_acc.clear() - - cursor = cursor.advance() # Skip { - - # Use helper method to parse placeable (reduces nesting!) - placeable_result = parse_placeable(cursor, context) - if placeable_result is None: - return placeable_result - - placeable_parse = placeable_result - elements.append(placeable_parse.value) - cursor = placeable_parse.cursor - - else: - # Parse text until { or stop condition - text_start = cursor.pos - while not cursor.is_eof: - ch = cursor.current - # Stop at: placeable start or newline only. - # Note: '}', '[', '*' are valid text in top-level patterns. - # They only have special meaning inside select expressions (handled - # by parse_simple_pattern). An unescaped '}' is technically invalid - # FTL syntax, but treating it as text is more robust than skipping. - # Note: Line endings are normalized to LF at parser entry. - if ch in ("{", "\n"): - break - cursor = cursor.advance() - - if cursor.pos > text_start: # pragma: no branch - # Note: False branch (cursor.pos == text_start) occurs when inner loop - # breaks immediately without consuming text. This happens when cursor - # starts on a stop char ('{', '\n'). However, outer loop checks for '\n' - # before text parsing, and '{' enters placeable parsing, so this condition - # is always True when reached. - text = Cursor(cursor.source, text_start).slice_to(cursor.pos) - # Prepend extra_spaces from continuation to new text element - if text_acc.has_content(): - text = text_acc.finalize().value + text - text_acc.clear() - elements.append(TextElement(value=text)) - - # Finalize any remaining accumulated extra_spaces (trailing spaces at end of pattern) - if text_acc.has_content(): - # These are just trailing extra_spaces; add as text element (may be trimmed) - elements.append(text_acc.finalize()) - - # Per Fluent spec, trim leading and trailing blank lines from patterns - trimmed_elements = _trim_pattern_blank_lines(elements) - pattern = Pattern(elements=trimmed_elements) - return ParseResult(pattern, cursor) - - -# ============================================================================= -# Expression Parsing -# ============================================================================= - - -def parse_variant_key(cursor: Cursor) -> ParseResult[Identifier | NumberLiteral] | None: - """Parse variant key (identifier or number). - - Helper method extracted from parse_variant to reduce complexity. - - Args: - cursor: Current position in source - - Returns: - Success(ParseResult(Identifier | NumberLiteral, cursor)) on success - Failure(ParseError(...)) on parse error - """ - start_pos = cursor.pos - - # Try number first (ASCII digits only, not Unicode like 2) - if not cursor.is_eof and (cursor.current in _ASCII_DIGITS or cursor.current == "-"): - num_result = parse_number(cursor) - if not isinstance(num_result, ParseError): - num_parse = num_result - num_str = num_parse.value - num_value = parse_number_value(num_str) - return ParseResult( - NumberLiteral(value=num_value, raw=num_str), num_parse.cursor - ) - - # Failed to parse as number, try identifier - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - # Both failed - return parse error - return None # "Expected variant key (identifier or number)", cursor - - id_parse = id_result - return ParseResult( - Identifier(id_parse.value, span=Span(start=start_pos, end=id_parse.cursor.pos)), - id_parse.cursor, - ) - - # Parse as identifier - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - id_parse = id_result - return ParseResult( - Identifier(id_parse.value, span=Span(start=start_pos, end=id_parse.cursor.pos)), - id_parse.cursor, - ) - - -def parse_variant( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[Variant] | None: - """Parse variant: [key] pattern or *[key] pattern - - Variants are the cases in a select expression. - - Examples: - [zero] no items - *[other] many items - - Args: - cursor: Current position in source - context: Parse context for depth tracking - - Returns: - Success(ParseResult(Variant, new_cursor)) on success - Failure(ParseError(...)) on parse error - """ - # Check for default marker * - is_default = False - if not cursor.is_eof and cursor.current == "*": - is_default = True - cursor = cursor.advance() - - # Expect [ - if cursor.is_eof or cursor.current != "[": - return None # "Expected '[' at start of variant", cursor - - cursor = cursor.advance() # Skip [ - - # Parse variant key (identifier or number) using extracted helper - # Per spec: VariantKey ::= "[" blank? (NumberLiteral | Identifier) blank? "]" - cursor = skip_blank(cursor) - key_result = parse_variant_key(cursor) - if key_result is None: - return key_result - - key_parse = key_result - variant_key = key_parse.value - cursor = skip_blank(key_parse.cursor) - - # Expect ] - if cursor.is_eof or cursor.current != "]": - return None # "Expected ']' after variant key", cursor - - cursor = cursor.advance() # Skip ] - # After ], before pattern: blank_inline (same line) or newline+indent - cursor = skip_blank_inline(cursor) - - # Parse pattern (on same line or next line with indent) - # Simplified: parse until newline that's not indented - pattern_result = parse_simple_pattern(cursor, context) - if pattern_result is None: - return pattern_result - - pattern_parse = pattern_result - - # Don't skip trailing whitespace - let select expression parser handle it - variant = Variant(key=variant_key, value=pattern_parse.value, default=is_default) - return ParseResult(variant, pattern_parse.cursor) - - -def parse_select_expression( - cursor: Cursor, - selector: SelectorExpression, - start_pos: int, - context: ParseContext | None = None, -) -> ParseResult[SelectExpression] | None: - """Parse select expression after seeing selector and -> - - Format: {$var -> [key1] value1 *[key2] value2} - - The selector has already been parsed. - - Example: - After parsing {$count and seeing ->, we parse: - [zero] {$count} items - [one] {$count} item - *[other] {$count} items - } - - Args: - cursor: Current position (should be after ->) - selector: The selector expression (e.g., VariableReference($count)) - start_pos: Start position of the select expression (for span tracking) - context: Parse context for depth tracking - - Returns: - Success(ParseResult(SelectExpression, new_cursor)) on success - Failure(ParseError(...)) on parse error - """ - # Per spec: SelectExpression ::= InlineExpression blank? "->" blank_inline? variant_list - # After ->, we need blank_inline before variant list starts (could be on next line) - # variant_list allows line_end, so use skip_blank to handle newlines - cursor = skip_blank(cursor) - - # Parse variants - variants: list[Variant] = [] - - while not cursor.is_eof: - # Within variant_list, allow blank (spaces and newlines) - cursor = skip_blank(cursor) - - if cursor.is_eof: - break - - # Check for end of select } - if cursor.current == "}": - break - - # Parse variant (pass context for nested placeable depth tracking) - variant_result = parse_variant(cursor, context) - if variant_result is None: - return variant_result - - variant_parse = variant_result - variants.append(variant_parse.value) - cursor = variant_parse.cursor - - if not variants: - return None # "Select expression must have at least one variant", cursor - - # Validate exactly one default variant (FTL spec requirement) - default_count = sum(1 for v in variants if v.default) - if default_count == 0: - return None # "Select expression must have exactly one default variant (marked with *)" - if default_count > 1: - return None # "Select expression must have exactly one default variant, found multiple" - - # Create span from start position to current position (end of last variant) - span = Span(start=start_pos, end=cursor.pos) - select_expr = SelectExpression(selector=selector, variants=tuple(variants), span=span) - return ParseResult(select_expr, cursor) - - -def _parse_message_attribute(cursor: Cursor) -> tuple[Identifier | None, Cursor]: - """Parse optional .attribute suffix on message/function references.""" - if cursor.is_eof or cursor.current != ".": - return None, cursor - cursor = cursor.advance() # Skip '.' - attr_start = cursor.pos # Start of attribute identifier - attr_id_result = parse_identifier(cursor) - if isinstance(attr_id_result, ParseError): - return None, cursor - attr_id = Identifier( - attr_id_result.value, - span=Span(start=attr_start, end=attr_id_result.cursor.pos), - ) - return attr_id, attr_id_result.cursor - - -def parse_argument_expression( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[InlineExpression] | None: - """Parse a single argument expression per FTL spec. - - FTL Argument Grammar: - InlineExpression ::= StringLiteral | NumberLiteral | FunctionReference - | MessageReference | TermReference | VariableReference - | inline_placeable - - This handles all valid positional argument types including: - - Variable references: $var - - String literals: "text" - - Number literals: 42, -123 - - Term references: -brand - - Function references: NUMBER($val) - - Inline placeables: { expr } - - Message references: identifier - - Args: - cursor: Current position in source - context: Parse context for nested placeable depth tracking - - Returns: - Success(ParseResult(InlineExpression, cursor)) on success - None on parse error - """ - if cursor.is_eof: - return None - - # Capture start position for span (used by identifier-based expressions) - start_pos = cursor.pos - ch = cursor.current - - # Variable reference: $var - if ch == "$": - var_result = parse_variable_reference(cursor) - if var_result is None: - return None - return ParseResult(var_result.value, var_result.cursor) - - # String literal: "text" - if ch == '"': - str_result = parse_string_literal(cursor) - if isinstance(str_result, ParseError): - return None - return ParseResult(StringLiteral(value=str_result.value), str_result.cursor) - - # Hyphen: could be TermReference (-brand) or negative number (-123) - if ch == "-": - next_cursor = cursor.advance() - if not next_cursor.is_eof and is_identifier_start(next_cursor.current): - # Term reference: -brand (ASCII letter after hyphen) - term_result = parse_term_reference(cursor, context) - if term_result is None: - return None - return ParseResult(term_result.value, term_result.cursor) - # Negative number: -123 - num_result = parse_number(cursor) - if isinstance(num_result, ParseError): - return None - num_value = parse_number_value(num_result.value) - return ParseResult( - NumberLiteral(value=num_value, raw=num_result.value), num_result.cursor - ) - - # Positive number: 42 - if ch in _ASCII_DIGITS: - num_result = parse_number(cursor) - if isinstance(num_result, ParseError): - return None - num_value = parse_number_value(num_result.value) - return ParseResult( - NumberLiteral(value=num_value, raw=num_result.value), num_result.cursor - ) - - # Inline placeable: { expr } - if ch == "{": - cursor = cursor.advance() # Skip opening { - placeable_result = parse_placeable(cursor, context) - if placeable_result is None: - return None - return ParseResult(placeable_result.value, placeable_result.cursor) - - # Identifier: function call (any case per spec) or message reference - # Note: ASCII letter check per Fluent spec for identifier start - if is_identifier_start(ch) or ch == "_": - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - name = id_result.value - cursor_after_id = id_result.cursor - - # Check if identifier followed by '(' -> function call (any case per spec) - lookahead = skip_blank_inline(cursor_after_id) - if not lookahead.is_eof and lookahead.current == "(": - func_result = parse_function_reference(cursor, context) - if func_result is None: - return None - return ParseResult(func_result.value, func_result.cursor) - - # Message reference with optional attribute (e.g., msg.attr) - # Per FTL spec: MessageReference can have attribute access - attribute, final_cursor = _parse_message_attribute(cursor_after_id) - return ParseResult( - MessageReference( - id=Identifier(name, span=Span(start=start_pos, end=cursor_after_id.pos)), - attribute=attribute, - span=Span(start=start_pos, end=final_cursor.pos), - ), - final_cursor, - ) - - return None # "Expected argument expression" - - -def parse_call_arguments( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[CallArguments] | None: - """Parse function call arguments: (pos1, pos2, name1: val1, name2: val2) - - Arguments consist of positional arguments followed by named arguments. - Positional arguments must come before named arguments. - Named argument names must be unique. - - Examples: - ($value) -> CallArguments(positional=[$value], named=[]) - ($value, minimumFractionDigits: 2) -> CallArguments with both types - - Args: - cursor: Position AFTER the opening '(' - context: Parse context for nested placeable depth tracking - - Returns: - Success(ParseResult(CallArguments, cursor_after_))) on success - Failure(ParseError(...)) on parse error - """ - # Per spec: CallArguments ::= blank? "(" blank? argument_list blank? ")" - # The spec uses blank (spaces AND newlines), not blank_inline (spaces only). - # This enables multiline formatting of function/term arguments. - cursor = skip_blank(cursor) - - positional: list[InlineExpression] = [] - named: list[NamedArgument] = [] - seen_named_arg_names: set[str] = set() - seen_named = False # Track if we've seen any named args - - # Parse comma-separated arguments - while not cursor.is_eof: - cursor = skip_blank(cursor) - - # Check for end of arguments - if cursor.current == ")": - break - - # Parse the argument expression using extracted helper - arg_result = parse_argument_expression(cursor, context) - if arg_result is None: - return arg_result - - arg_parse = arg_result - arg_expr = arg_parse.value - cursor = skip_blank(arg_parse.cursor) - - # Check if this is a named argument (followed by :) - if not cursor.is_eof and cursor.current == ":": - # This is a named argument - cursor = cursor.advance() # Skip : - cursor = skip_blank(cursor) - - # The argument expression must be an identifier (MessageReference) - if not isinstance(arg_expr, MessageReference): - return None # "Named argument name must be an identifier", cursor - - arg_name = arg_expr.id.name - - # Check for duplicate named argument names - if arg_name in seen_named_arg_names: - return None # f"Duplicate named argument: '{arg_name}'", cursor - seen_named_arg_names.add(arg_name) - - # Parse the value (must be inline expression) - if cursor.is_eof: - return None # "Expected value after ':'", cursor - - # Parse value expression using extracted helper - value_result = parse_argument_expression(cursor, context) - if value_result is None: - return value_result - - value_parse = value_result - value_expr = value_parse.value - cursor = value_parse.cursor - - # Per FTL spec: NamedArgument ::= Identifier ":" (StringLiteral | NumberLiteral) - # Named argument values MUST be literals, NOT references or variables - if not isinstance(value_expr, (StringLiteral, NumberLiteral)): - # Named argument values must be literals per FTL spec - # This restriction enables static analysis by translation tools - return None # f"Named argument '{arg_name}' requires a literal value", cursor - - # Reuse span from original identifier in MessageReference - named.append(NamedArgument( - name=Identifier(arg_name, span=arg_expr.id.span), - value=value_expr, - )) - seen_named = True - - else: - # This is a positional argument - if seen_named: - return None # "Positional arguments must come before named arguments", cursor - positional.append(arg_expr) - - cursor = skip_blank(cursor) - - # Check for comma (optional before closing paren) - if not cursor.is_eof and cursor.current == ",": - cursor = cursor.advance() # Skip comma - cursor = skip_blank(cursor) - - call_args = CallArguments(positional=tuple(positional), named=tuple(named)) - return ParseResult(call_args, cursor) - - -def parse_function_reference( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[FunctionReference] | None: - """Parse function reference: identifier(args) - - Per Fluent 1.0 spec, function names follow the standard Identifier grammar - which allows any case. The convention of uppercase function names (NUMBER, - DATETIME) is stylistic, not syntactic. - - FTL EBNF: FunctionReference ::= Identifier CallArguments - - Security: - Function calls increment nesting depth to prevent DoS via deeply nested - calls like NUMBER(A(B(C(...)))). Each level consumes stack frames. - - Examples: - NUMBER($value) - number($value) - DateTime($date, dateStyle: "full") - - Args: - cursor: Position at start of function name - context: Parse context for nesting depth tracking - - Returns: - Success(ParseResult(FunctionReference, cursor_after_))) on success - None on parse error or nesting depth exceeded - """ - # Create default context if not provided - if context is None: - context = ParseContext() - - # Check nesting depth limit (DoS prevention) - # Function calls can nest arbitrarily: A(B(C(D(...)))) - if context.is_depth_exceeded(): - return None - - # Capture start position for span - start_pos = cursor.pos - - # Parse function name (any case per spec) - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - id_parse = id_result - func_name = id_parse.value - - # Per spec: FunctionReference uses blank? before "(" - cursor = skip_blank_inline(id_parse.cursor) - - # Expect opening parenthesis - if cursor.is_eof or cursor.current != "(": - return None # "Expected '(' after function name", cursor - - cursor = cursor.advance() # Skip ( - - # Create nested context with incremented depth for argument parsing - nested_context = context.enter_nesting() - - # Parse arguments with nested context - args_result = parse_call_arguments(cursor, nested_context) - if args_result is None: - return args_result - - args_parse = args_result - cursor = skip_blank_inline(args_parse.cursor) - - # Expect closing parenthesis - if cursor.is_eof or cursor.current != ")": - return None # "Expected ')' after function arguments" - - cursor = cursor.advance() # Skip ) - - # Identifier span ends at id_parse.cursor.pos (before any whitespace) - func_ref = FunctionReference( - id=Identifier(func_name, span=Span(start=start_pos, end=id_parse.cursor.pos)), - arguments=args_parse.value, - span=Span(start=start_pos, end=cursor.pos), - ) - return ParseResult(func_ref, cursor) - - -def parse_term_reference( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[TermReference] | None: - """Parse term reference in inline expression (-term-id or -term.attr). - - FTL syntax: - { -brand } - { -brand.short } - { -brand(case: "nominative") } - - Term references can have optional attribute access and arguments. - - Security: - Term calls with arguments increment nesting depth to prevent DoS via - deeply nested calls. Arguments can contain nested expressions. - - Args: - cursor: Current position (should be at '-') - context: Parse context for nesting depth tracking - - Returns: - Success(ParseResult(TermReference, new_cursor)) on success - None on parse error or nesting depth exceeded - """ - # Create default context if not provided - if context is None: - context = ParseContext() - - # Capture start position for span - start_pos = cursor.pos - - # Expect '-' prefix - if cursor.is_eof or cursor.current != "-": - return None # "Expected '-' at start of term reference", cursor, expected=["-"] - - cursor = cursor.advance() # Skip '-' - id_start = cursor.pos # Start of identifier (after '-') - - # Parse identifier - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - id_parse = id_result - cursor = id_parse.cursor - - # Check for optional attribute access (.attribute) - attribute: Identifier | None = None - if not cursor.is_eof and cursor.current == ".": - cursor = cursor.advance() # Skip '.' - attr_start = cursor.pos # Start of attribute identifier - - attr_id_result = parse_identifier(cursor) - if isinstance(attr_id_result, ParseError): - return None - - attr_id_parse = attr_id_result - attribute = Identifier( - attr_id_parse.value, - span=Span(start=attr_start, end=attr_id_parse.cursor.pos), - ) - cursor = attr_id_parse.cursor - - # Check for optional arguments (case: "nominative") - # Per spec: TermReference uses blank? before "(" - cursor = skip_blank_inline(cursor) - - arguments: CallArguments | None = None - if not cursor.is_eof and cursor.current == "(": - # Check nesting depth limit (DoS prevention) before parsing arguments - if context.is_depth_exceeded(): - return None - - # Parse call arguments with incremented depth - cursor = cursor.advance() # Skip '(' - nested_context = context.enter_nesting() - args_result = parse_call_arguments(cursor, nested_context) - if args_result is None: - return args_result - - args_parse = args_result - cursor = skip_blank_inline(args_parse.cursor) - - # Expect closing parenthesis - if cursor.is_eof or cursor.current != ")": - return None # "Expected ')' after term arguments" - - cursor = cursor.advance() # Skip ')' - arguments = args_parse.value - - term_ref = TermReference( - id=Identifier(id_parse.value, span=Span(start=id_start, end=id_parse.cursor.pos)), - attribute=attribute, - arguments=arguments, - span=Span(start=start_pos, end=cursor.pos), - ) - - return ParseResult(term_ref, cursor) - - -def _parse_inline_string_literal(cursor: Cursor) -> ParseResult[InlineExpression] | None: - """Parse string literal inline expression.""" - str_result = parse_string_literal(cursor) - if isinstance(str_result, ParseError): - return None - return ParseResult(StringLiteral(value=str_result.value), str_result.cursor) - - -def _parse_inline_number_literal(cursor: Cursor) -> ParseResult[InlineExpression] | None: - """Parse number literal inline expression.""" - num_result = parse_number(cursor) - if isinstance(num_result, ParseError): - return None - num_str = num_result.value - num_value = parse_number_value(num_str) - return ParseResult(NumberLiteral(value=num_value, raw=num_str), num_result.cursor) - - -def _parse_inline_hyphen( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[InlineExpression] | None: - """Parse hyphen-prefixed expression: term reference (-brand) or negative number (-123). - - Args: - cursor: Current position in source - context: Parse context for nested placeable depth tracking - """ - next_cursor = cursor.advance() - if not next_cursor.is_eof and is_identifier_start(next_cursor.current): - # Term reference: -brand (ASCII letter after hyphen) - term_result = parse_term_reference(cursor, context) - if term_result is None: - return None - return ParseResult(term_result.value, term_result.cursor) - # Negative number: -123 - return _parse_inline_number_literal(cursor) - - -def _parse_inline_identifier( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[InlineExpression] | None: - """Parse identifier-based expression: function call or message reference. - - Per Fluent 1.0 spec, function names follow the standard Identifier grammar - which allows any case. The convention of uppercase function names (NUMBER, - DATETIME) is stylistic, not syntactic. - - Args: - cursor: Current position in source - context: Parse context for nested placeable depth tracking - """ - # Capture start position for span - start_pos = cursor.pos - - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - name = id_result.value - cursor_after_id = id_result.cursor - - # Check if identifier followed by '(' -> function call (any case per spec) - # Per Fluent spec: FunctionReference ::= Identifier CallArguments - # Identifier allows any case; uppercase is convention, not requirement - lookahead = skip_blank_inline(cursor_after_id) - if not lookahead.is_eof and lookahead.current == "(": - func_result = parse_function_reference(cursor, context) - if func_result is None: - return None - return ParseResult(func_result.value, func_result.cursor) - - # Message reference with optional attribute - attribute, final_cursor = _parse_message_attribute(cursor_after_id) - return ParseResult( - MessageReference( - id=Identifier(name, span=Span(start=start_pos, end=cursor_after_id.pos)), - attribute=attribute, - span=Span(start=start_pos, end=final_cursor.pos), - ), - final_cursor, - ) - - -def parse_inline_expression( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[InlineExpression] | None: - """Parse inline expression per Fluent spec. - - Uses character-based dispatch for efficient parsing. Each expression type - has a dedicated handler function. - - Per Fluent EBNF: - InlineExpression ::= StringLiteral | NumberLiteral | FunctionReference - | MessageReference | TermReference | VariableReference - | inline_placeable - - Handles: - - Variable references: $var - - String literals: "text" - - Number literals: 42 or -123 - - Function calls: FUNC(args) or func(args) (any case per spec) - - Message references: identifier or identifier.attribute - - Term references: -term-id or -term-id.attribute - - Nested placeables: { expr } (inline_placeable per spec) - - Args: - cursor: Current position in source - context: Parse context for nested placeable depth tracking - - Returns: - ParseResult with InlineExpression on success, None on parse error - """ - if cursor.is_eof: - return None - - ch = cursor.current - - # Dispatch based on first character - match ch: - case "$": - var_result = parse_variable_reference(cursor) - if var_result is None: - return None - return ParseResult(var_result.value, var_result.cursor) - - case '"': - return _parse_inline_string_literal(cursor) - - case "-": - return _parse_inline_hyphen(cursor, context) - - case "{": - # Nested placeable: { expr } per spec (inline_placeable) - # Advance past opening brace and delegate to parse_placeable - placeable_result = parse_placeable(cursor.advance(), context) - if placeable_result is None: - return None - return ParseResult(placeable_result.value, placeable_result.cursor) - - case _ if ch in _ASCII_DIGITS: - return _parse_inline_number_literal(cursor) - - case _ if is_identifier_start(ch): - # ASCII letter [a-zA-Z] check per Fluent spec for identifier start - return _parse_inline_identifier(cursor, context) - - case _: - return None - - -def parse_placeable( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[Placeable] | None: - """Parse placeable expression: {$var}, {"\\n"}, {$var -> [key] value}, or {FUNC()}. - - Parser combinator helper that reduces nesting in parse_pattern(). - - Handles: - - Variable references: {$var} - - String literals: {"\\n"} - - Number literals: {42} - - Select expressions: {$var -> [one] item *[other] items} - - Function calls: {NUMBER($value, minimumFractionDigits: 2)} - - Security: - Enforces maximum nesting depth to prevent DoS attacks via deeply - nested placeables. Configure via max_nesting_depth on FluentParserV1. - - Args: - cursor: Position AFTER the opening '{' - context: Parse context for depth tracking. If None, creates fresh context. - - Returns: - Success(ParseResult(Placeable, cursor_after_})) on success - None on parse error or nesting depth exceeded - - Example: - cursor at: "$var}" -> parses to Placeable(VariableReference("var")) - cursor at: "\"\\n\"}" -> parses to Placeable(StringLiteral("\\n")) - cursor at: "$n -> [one] 1 *[other] N}" -> parses to Placeable(SelectExpression(...)) - cursor at: "NUMBER($val)}" -> parses to Placeable(FunctionReference(...)) - """ - # Create default context if not provided - if context is None: - context = ParseContext() - - # Check nesting depth limit (DoS prevention) - if context.is_depth_exceeded(): - # Nesting depth exceeded - mark flag and return None to signal parse failure - # This prevents stack overflow from deeply nested constructs - # Flag persists through context unwinding so Junk creation sites can - # emit specific PARSE_NESTING_DEPTH_EXCEEDED diagnostic - context.mark_depth_exceeded() - return None - - # Create child context with incremented depth for nested parsing - nested_context = context.enter_nesting() - - # Per spec: inline_placeable ::= "{" blank? (SelectExpression | InlineExpression) blank? "}" - # blank ::= (blank_inline | line_end)+ ; allows newlines inside placeables - cursor = skip_blank(cursor) - - # Capture start position before parsing expression (for select expression span) - expr_start_pos = cursor.pos - - # Parse the inline expression with nested context for depth tracking - expr_result = parse_inline_expression(cursor, nested_context) - if expr_result is None: - return expr_result - - expr_parse = expr_result - expression = expr_parse.value - parse_result_cursor = expr_parse.cursor - - # Per spec: blank allows newlines after expression - cursor = skip_blank(parse_result_cursor) - - # Check for select expression (->) - # Per FTL 1.0 spec: SelectExpression ::= InlineExpression blank? "->" ... - # Valid selectors (any InlineExpression): - # - VariableReference: { $var -> ... } - # - StringLiteral: { "foo" -> ... } - # - NumberLiteral: { 42 -> ... } - # - FunctionReference: { NUMBER($x) -> ... } - # - MessageReference: { msg -> ... } or { msg.attr -> ... } - # - TermReference: { -term -> ... } or { -term.attr -> ... } - is_valid_selector = isinstance( - expression, - ( - VariableReference, - StringLiteral, - NumberLiteral, - FunctionReference, - MessageReference, - TermReference, - ), - ) - - if is_valid_selector and not cursor.is_eof and cursor.current == "-": - # Peek ahead for -> - next_cursor = cursor.advance() - if not next_cursor.is_eof and next_cursor.current == ">": - # It's a select expression! - cursor = next_cursor.advance() # Skip -> - - select_result = parse_select_expression( - cursor, - cast("SelectorExpression", expression), # Narrowed: is_valid_selector passed above - expr_start_pos, - nested_context, - ) - if select_result is None: - return select_result - - select_parse = select_result - # Per spec: blank allows newlines after select expression - cursor = skip_blank(select_parse.cursor) - - # Expect } - if cursor.is_eof or cursor.current != "}": - return None # "Expected '}' after select expression", cursor - - cursor = cursor.advance() # Skip } - return ParseResult(Placeable(expression=select_parse.value), cursor) - - # Just a simple inline expression {$var}, {"\n"}, or {42} - # Expect } - if cursor.is_eof or cursor.current != "}": - return None # "Expected '}'", cursor - - cursor = cursor.advance() # Skip } - return ParseResult(Placeable(expression=expression), cursor) - - -# ============================================================================= -# Entry Parsing -# ============================================================================= - - -def parse_message_header(cursor: Cursor) -> ParseResult[tuple[str, int]] | None: - """Parse message header: Identifier "=" - - Returns tuple of (identifier string, identifier end position) and cursor after '='. - The end position is needed for constructing Identifier spans. - """ - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - id_parse = id_result - id_end_pos = id_parse.cursor.pos # Capture end position before whitespace/equals - - # Per spec: Message ::= Identifier blank_inline? "=" ... - cursor = skip_blank_inline(id_parse.cursor) - - if cursor.is_eof or cursor.current != "=": - return None # "Expected '=' after message ID", cursor - - cursor = cursor.advance() # Skip = - return ParseResult((id_parse.value, id_end_pos), cursor) - - -def parse_message_attributes( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[list[Attribute]] | None: - """Parse zero or more message attributes. - - Attributes must appear on new lines starting with '.'. - Per Fluent spec, blank lines (empty lines) are allowed between attributes: - Attribute ::= line_end blank? "." Identifier blank_inline? "=" ... - blank ::= (blank_inline | line_end)+ - - Args: - cursor: Current position in source - context: Parse context for depth tracking - """ - attributes: list[Attribute] = [] - - while not cursor.is_eof: - # Per spec: Attribute ::= line_end blank? "." ... - # We need at least one line_end to continue looking for attributes - # Note: Line endings are normalized to LF at parser entry. - if cursor.current != "\n": - break # No newline, done with attributes - - # Skip the required line_end - cursor = cursor.advance() - - # Skip optional blank lines (consecutive newlines) - # Per spec: blank ::= (blank_inline | line_end)+ - while not cursor.is_eof and cursor.current == "\n": - cursor = cursor.advance() - - # Now cursor is at the start of a non-blank line (or EOF) - # Save position for restore if not an attribute, and for parse_attribute - saved_cursor = cursor - - # Skip leading spaces on this line (NOT tabs per spec) - cursor = cursor.skip_spaces() - - if cursor.is_eof or cursor.current != ".": - cursor = saved_cursor - break # Not an attribute - - # Parse attribute - attr_result = parse_attribute(saved_cursor, context) - if attr_result is None: - cursor = saved_cursor - break # Invalid attribute syntax - - attr_parse = attr_result - attributes.append(attr_parse.value) - cursor = attr_parse.cursor - - return ParseResult(attributes, cursor) - - -def validate_message_content(pattern: Pattern | None, attributes: list[Attribute]) -> bool: - """Validate message has either pattern or attributes. - - Per Fluent spec: Message ::= ID "=" ((Pattern Attribute*) | (Attribute+)) - - Args: - pattern: Message value pattern (may be None) - attributes: List of message attributes - - Returns: - True if validation passed, False if validation failed - """ - has_pattern = pattern is not None and len(pattern.elements) > 0 - has_attributes = len(attributes) > 0 - - # Message must have either value or attributes - return has_pattern or has_attributes - - -def parse_message( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[Message] | None: - """Parse message with full support for select expressions. - - Examples: - "hello = World" - "welcome = Hello, {$name}!" - "count = {$num -> [one] item *[other] items}" - - Args: - cursor: Current position in source - context: Parse context for depth tracking - - Returns: - Success(ParseResult(Message, new_cursor)) on success - Failure(ParseError(...)) on parse error - """ - start_pos = cursor.pos - - # Parse: Identifier "=" - id_result = parse_message_header(cursor) - if id_result is None: - return id_result - id_parse = id_result - id_name, id_end_pos = id_parse.value # Unpack (name, end_position) - cursor = id_parse.cursor - - # Parse pattern (message value) - cursor, initial_indent = skip_multiline_pattern_start(cursor) - pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) - if pattern_result is None: - return pattern_result - pattern_parse = pattern_result - cursor = pattern_parse.cursor - - # Parse: Attribute* (zero or more attributes) - attributes_result = parse_message_attributes(cursor, context) - if attributes_result is None: - return attributes_result - attributes_parse = attributes_result - cursor = attributes_parse.cursor - - # Validate: Per spec, Message must have Pattern OR Attribute - is_valid = validate_message_content(pattern_parse.value, attributes_parse.value) - if not is_valid: - return None # Validation failed - - # Construct Message node - message = Message( - id=Identifier(id_name, span=Span(start=start_pos, end=id_end_pos)), - value=pattern_parse.value, - attributes=tuple(attributes_parse.value), - span=Span(start=start_pos, end=cursor.pos), - ) - - return ParseResult(message, cursor) - - -def parse_attribute( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[Attribute] | None: - """Parse message attribute (.attribute = pattern). - - FTL syntax: - button = Save - .tooltip = Click to save changes - .aria-label = Save button - - Attributes are indented and start with a dot followed by an identifier. - - Args: - cursor: Current position in source (should be at start of line with '.') - context: Parse context for depth tracking - - Returns: - Success(ParseResult(Attribute, new_cursor)) on success - Failure(ParseError(...)) on parse error - """ - # Skip leading whitespace (ONLY spaces per spec, NOT tabs or newlines) - # Per spec: Attribute ::= line_end blank? "." ... - # blank can contain spaces but NOT tabs - cursor = skip_blank_inline(cursor) - - # Check for '.' at start - if cursor.is_eof or cursor.current != ".": - return None # "Expected '.' at start of attribute", cursor, expected=["."] - - attr_start_pos = cursor.pos # Start of attribute (at '.') - cursor = cursor.advance() # Skip '.' - id_start_pos = cursor.pos # Start of identifier (after '.') - - # Parse identifier after '.' - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - id_parse = id_result - id_end_pos = id_parse.cursor.pos # End of identifier - - # Per spec: Attribute ::= line_end blank? "." Identifier blank_inline? "=" ... - cursor = skip_blank_inline(id_parse.cursor) - - # Expect '=' - if cursor.is_eof or cursor.current != "=": - return None # "Expected '=' after attribute identifier", cursor, expected=["="] - - cursor = cursor.advance() # Skip '=' - # After '=', handle multiline pattern start (same as messages) - # Per spec: Attribute ::= ... blank_inline? "=" blank_inline? Pattern - # Pattern can start on same line or next line with indentation - cursor, initial_indent = skip_multiline_pattern_start(cursor) - - # Parse pattern - pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) - if pattern_result is None: - return pattern_result - - pattern_parse = pattern_result - - attribute = Attribute( - id=Identifier(id_parse.value, span=Span(start=id_start_pos, end=id_end_pos)), - value=pattern_parse.value, - span=Span(start=attr_start_pos, end=pattern_parse.cursor.pos), - ) - - return ParseResult(attribute, pattern_parse.cursor) - - -def parse_term( - cursor: Cursor, - context: ParseContext | None = None, -) -> ParseResult[Term] | None: - """Parse term definition (-term-id = pattern). - - FTL syntax: - -brand = Firefox - -brand-version = 3.0 - .tooltip = Current version - - Terms are private definitions prefixed with '-' and can have attributes. - - Args: - cursor: Current position in source (should be at '-') - context: Parse context for depth tracking - - Returns: - Success(ParseResult(Term, new_cursor)) on success - Failure(ParseError(...)) on parse error - """ - # Capture start position for span - start_pos = cursor.pos - - # Expect '-' prefix - if cursor.is_eof or cursor.current != "-": - return None # "Expected '-' at start of term", cursor, expected=["-"] - - cursor = cursor.advance() # Skip '-' - id_start_pos = cursor.pos # Start of identifier (after '-') - - # Parse identifier - id_result = parse_identifier(cursor) - if isinstance(id_result, ParseError): - return None - - id_parse = id_result - id_end_pos = id_parse.cursor.pos # End of identifier - - # Per spec: Term ::= "-" Identifier blank_inline? "=" ... - cursor = skip_blank_inline(id_parse.cursor) - - # Expect '=' - if cursor.is_eof or cursor.current != "=": - return None # "Expected '=' after term ID", cursor, expected=["="] - - cursor = cursor.advance() # Skip '=' - - # After '=', handle multiline pattern start (same as messages) - # Use skip_multiline_pattern_start to properly track initial indent for common_indent - cursor, initial_indent = skip_multiline_pattern_start(cursor) - - # Parse pattern with initial common indent for proper multiline handling - pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) - if pattern_result is None: - return pattern_result - - pattern_parse = pattern_result - cursor = pattern_parse.cursor - - # Validate term has non-empty value (FTL spec requirement) - if not pattern_parse.value.elements: - return None # f'Expected term "-{id_parse.value}" to have a value' - - # Parse attributes using shared helper - attributes_result = parse_message_attributes(cursor, context) - if attributes_result is None: - return None # Should not happen, but handle defensively - attributes = attributes_result.value - cursor = attributes_result.cursor - - # Create span from start to current position - span = Span(start=start_pos, end=cursor.pos) - - term = Term( - id=Identifier(id_parse.value, span=Span(start=id_start_pos, end=id_end_pos)), - value=pattern_parse.value, - attributes=tuple(attributes), - span=span, - ) - - return ParseResult(term, cursor) - - -def parse_comment(cursor: Cursor) -> ParseResult[Comment] | None: - """Parse comment line per Fluent spec. - - Per spec, comments come in three types: - - # (single-line comment) - - ## (group comment) - - ### (resource comment) - - Adjacent comment lines of the same type are joined during AST construction. - - EBNF: - CommentLine ::= ("###" | "##" | "#") ("\u0020" comment_char*)? line_end - - Args: - cursor: Current parse position (must be at '#') - - Returns: - Success with Comment node or Failure with ParseError - """ - start_pos = cursor.pos - - # Determine comment type by counting '#' characters - hash_count = 0 - temp_cursor = cursor - while not temp_cursor.is_eof and temp_cursor.current == "#": - hash_count += 1 - temp_cursor = temp_cursor.advance() - - # Validate comment type (1, 2, or 3 hashes) - if hash_count > 3: - return None # f"Invalid comment: expected 1-3 '#' characters, found {hash_count}" - - # Map hash count to comment type using module-level lookup (no per-call allocation). - # hash_count is 1/2/3 at this point; the > 3 guard above eliminates other values. - comment_type = _COMMENT_TYPE_BY_HASH_COUNT[hash_count - 1] - - # Advance cursor past the '#' characters - cursor = temp_cursor - - # Per spec: optional space after '#' - if not cursor.is_eof and cursor.current == " ": - cursor = cursor.advance() - - # Collect comment content (everything until line end) - content_start = cursor.pos - cursor = cursor.skip_to_line_end() - - # Extract comment text - content = cursor.source[content_start : cursor.pos] - - # Advance past line ending (handles LF, CRLF, CR) - cursor = cursor.skip_line_end() - - # Create Comment node with span - comment_node = Comment( - content=content, - type=comment_type, - span=Span(start=start_pos, end=cursor.pos), - ) - - return ParseResult(comment_node, cursor) +from ftllexengine.syntax.parser.primitives import parse_identifier, parse_number + +__all__ = [ + "_MAX_LOOKAHEAD_CHARS", + "ParseContext", + "_is_valid_variant_key_char", + "_is_variant_marker", + "_parse_inline_hyphen", + "_parse_inline_identifier", + "_parse_inline_number_literal", + "_parse_inline_string_literal", + "_parse_message_attribute", + "_trim_pattern_blank_lines", + "parse_argument_expression", + "parse_attribute", + "parse_call_arguments", + "parse_comment", + "parse_function_reference", + "parse_identifier", + "parse_inline_expression", + "parse_message", + "parse_message_attributes", + "parse_message_header", + "parse_number", + "parse_pattern", + "parse_placeable", + "parse_select_expression", + "parse_simple_pattern", + "parse_term", + "parse_term_reference", + "parse_variable_reference", + "parse_variant", + "parse_variant_key", + "validate_message_content", +] diff --git a/src/ftllexengine/syntax/parser/rules.py,cover b/src/ftllexengine/syntax/parser/rules.py,cover deleted file mode 100644 index 084f2751..00000000 --- a/src/ftllexengine/syntax/parser/rules.py,cover +++ /dev/null @@ -1,1980 +0,0 @@ -> """Grammar rules for Fluent FTL parser. - -> This module provides all parsing rules for FTL grammar constructs: -> - Pattern parsing (variable references, text elements, placeables) -> - Expression parsing (inline expressions, select expressions, function calls) -> - Entry parsing (messages, terms, attributes, comments) - -> All grammar rules are co-located in a single module to: -> 1. Eliminate circular imports between interdependent parsing functions -> 2. Simplify the import graph -> 3. Allow direct function calls instead of function-local imports - -> Lookahead Patterns: -> The parser uses character-based lookahead for disambiguation: -> - `{` starts a Placeable -> - `$` starts a VariableReference -> - `-` followed by identifier starts a TermReference -> - `.` in specific contexts starts an attribute access -> - `*[` marks the default variant in SelectExpression - -> These single-character or two-character lookaheads are implemented inline -> using cursor.peek(n) rather than separate Lookahead helper classes. While -> this creates some code duplication, it keeps the parsing logic explicit -> and easy to trace. Future refactoring could extract common patterns into -> a Lookahead utility class if the grammar expands significantly. - -> Security: -> Includes configurable nesting depth limit to prevent DoS attacks via -> deeply nested placeables (e.g., { { { { ... } } } }). -> """ - -> from __future__ import annotations - -> from dataclasses import dataclass - -> from ftllexengine.constants import MAX_DEPTH, MAX_LOOKAHEAD_CHARS -> from ftllexengine.enums import CommentType -> from ftllexengine.syntax.ast import ( -> Attribute, -> CallArguments, -> Comment, -> FunctionReference, -> Identifier, -> InlineExpression, -> Message, -> MessageReference, -> NamedArgument, -> NumberLiteral, -> Pattern, -> Placeable, -> SelectExpression, -> Span, -> StringLiteral, -> Term, -> TermReference, -> TextElement, -> VariableReference, -> Variant, -> ) -> from ftllexengine.syntax.cursor import Cursor, ParseResult -> from ftllexengine.syntax.parser.primitives import ( -> _ASCII_DIGITS, -> is_identifier_char, -> is_identifier_start, -> parse_identifier, -> parse_number, -> parse_number_value, -> parse_string_literal, -> ) -> from ftllexengine.syntax.parser.whitespace import ( -> is_indented_continuation, -> skip_blank, -> skip_blank_inline, -> skip_multiline_pattern_start, -> ) - -> __all__ = ["ParseContext", "parse_comment", "parse_message", "parse_term"] - - -> @dataclass(slots=True) -> class ParseContext: -> """Explicit context for parsing operations. - -> Replaces thread-local state with explicit parameter passing for: -> - Thread safety without global state -> - Async framework compatibility -> - Easier testing (no state reset needed) -> - Clear dependency flow - -> Security: -> Tracks nesting depth for BOTH placeables and function calls to prevent -> stack overflow DoS attacks. Deeply nested constructs like: -> - { { { ... } } } (nested placeables) -> - { A(B(C(D(...)))) } (nested function calls) -> Both consume stack frames and must be bounded. - -> Attributes: -> max_nesting_depth: Maximum allowed nesting depth for placeables and calls -> current_depth: Current nesting depth (0 = top level) -> """ - -> max_nesting_depth: int = MAX_DEPTH -> current_depth: int = 0 - -> def is_depth_exceeded(self) -> bool: -> """Check if maximum nesting depth has been exceeded.""" -> return self.current_depth >= self.max_nesting_depth - -> def enter_nesting(self) -> ParseContext: -> """Create new context with incremented depth for entering nested construct. - -> Used for both placeables and function/term calls with arguments. -> Each recursive descent into nested syntax increments depth. -> """ -> return ParseContext( -> max_nesting_depth=self.max_nesting_depth, -> current_depth=self.current_depth + 1, -> ) - - - # ============================================================================= - # Pattern Parsing - # ============================================================================= - - -> def parse_variable_reference(cursor: Cursor) -> ParseResult[VariableReference] | None: -> """Parse variable reference: $variable - -> Variables start with $ followed by an identifier. - -> Examples: -> $name -> VariableReference(Identifier("name")) -> $count -> VariableReference(Identifier("count")) - -> Args: -> cursor: Current position in source - -> Returns: -> Success(ParseResult(VariableReference, new_cursor)) on success -> Failure(ParseError(...)) if not a variable reference -> """ - # Capture start position for span -> start_pos = cursor.pos - - # Expect $ -> if cursor.is_eof or cursor.current != "$": -> return None # "Expected variable reference (starts with $)", cursor, expected=["$"] - -> cursor = cursor.advance() # Skip $ - - # Parse identifier -> result = parse_identifier(cursor) -> if result is None: -> return result - -> parse_result = result -> var_ref = VariableReference( -> id=Identifier(parse_result.value), -> span=Span(start=start_pos, end=parse_result.cursor.pos), -> ) -> return ParseResult(var_ref, parse_result.cursor) - - -> def _is_valid_variant_key_char(ch: str, is_first: bool) -> bool: -> """Check if character is valid in a variant key (identifier or number). - -> Variant keys are either identifiers or number literals: -> - Identifiers: [a-zA-Z_][a-zA-Z0-9_-]* -> - Numbers: [0-9]+ or [0-9]+.[0-9]+ - -> Note: -> This helper permits '.' for number literals (e.g., "1.5") but identifiers -> cannot contain '.'. The caller (_is_variant_marker) uses this for lookahead -> scanning, not strict grammar validation. A key like "foo.bar" would pass -> this check but fail later grammar validation as an invalid identifier. - -> Args: -> ch: Character to check -> is_first: True if this is the first character - -> Returns: -> True if character is valid for variant key content -> """ -> if is_first: - # First char: ASCII letter (for identifiers), underscore, or digit (for numbers) - # Note: Uses ASCII-only check per Fluent spec for cross-implementation compatibility -> return is_identifier_start(ch) or ch == "_" or ch in _ASCII_DIGITS - # Subsequent chars: ASCII alphanumeric, underscore, hyphen, or dot (for decimals) - # Note: '.' is only valid in number literals, not identifiers -> return is_identifier_char(ch) or ch == "." - - -> def _is_variant_marker(cursor: Cursor) -> bool: -> """Check if cursor is at a variant marker using bounded lookahead. - -> Distinguishes actual variant syntax from literal text: -> - '*' is a variant marker only if followed by '[' -> - '[' is a variant marker only if: -> 1. Content is valid identifier/number -> 2. Ends with ']' -> 3. After ']', no non-whitespace text before newline/variant/end - -> Valid variant keys (stop parsing): -> - [one] (followed by newline, }, or another variant) -> - *[other] (default variant) - -> NOT variant keys (literal text): -> - [1, 2, 3] - contains comma and spaces -> - [INFO] message - has text after ] on same line -> - [matrix * vector] - contains spaces and operators - -> Security: -> Uses bounded lookahead (max 128 chars) to prevent O(N^2) parsing -> on adversarial input like `[[[[...` with many unclosed brackets. -> Variant keys are identifiers/numbers which are always short. - -> Args: -> cursor: Current position in source - -> Returns: -> True if at variant marker syntax, False if literal text - -> Note: -> PLR0911 waiver: Multiple returns are intentional for early-exit -> pattern matching, which is clearer than nested conditionals. -> """ - # Use centralized lookahead limit - variant keys are short (identifiers/numbers) - # This prevents O(N^2) worst-case on adversarial input like [[[[... -> max_lookahead = MAX_LOOKAHEAD_CHARS - -> if cursor.is_eof: -> return False - -> ch = cursor.current - -> if ch == "*": - # '*' is variant marker only if followed by '[' -> next_cursor = cursor.advance() -> return not next_cursor.is_eof and next_cursor.current == "[" - -> if ch == "[": - # '[' is variant marker only if: - # 1. Content is valid identifier or number (no spaces, commas, etc.) - # 2. Ends with ']' - # 3. After ']', the next thing is whitespace leading to newline, }, [, or *[ -> scan = cursor.advance() -> is_first = True -> has_content = False -> lookahead_count = 0 - - # Find the closing ] with bounded lookahead -> while not scan.is_eof and lookahead_count < max_lookahead: -> c = scan.current -> lookahead_count += 1 - -> if c == "]": - # Found closing bracket - now check what follows -> if not has_content: -> return False # Empty [] is not a variant key - - # Check what comes after ] -> after_bracket = scan.advance() - - # Skip inline whitespace (ONLY space per spec, NOT tab) - # Per Fluent EBNF: blank_inline ::= "\u0020"+ -> while ( -> not after_bracket.is_eof -> and after_bracket.current == " " -> and lookahead_count < max_lookahead -> ): -> after_bracket = after_bracket.advance() -> lookahead_count += 1 - -> if after_bracket.is_eof: -> return True # EOF after ] - valid variant - - # Valid if followed by: newline, }, [, or * (for *[other]) - # Note: Line endings are normalized to LF at parser entry. -> return after_bracket.current in ("\n", "}", "[", "*") - -> if c in ("\n", "{", "}", " ", "\t", ",", ":", ";", "=", "+", "*", "/"): - # Invalid char for variant key - this is literal text -> return False -> if not _is_valid_variant_key_char(c, is_first): - # Character not valid for identifier/number -> return False -> has_content = True -> is_first = False -> scan = scan.advance() - - # Exceeded lookahead or EOF before ']' - treat as literal text -> return False - -> return False - - -> def _trim_pattern_blank_lines( -> elements: list[TextElement | Placeable], -> ) -> tuple[TextElement | Placeable, ...]: -> """Trim leading and trailing blank lines from pattern elements. - -> Per Fluent spec, patterns should not include leading or trailing blank lines. -> A blank line is defined as a line containing only whitespace. - -> This function: -> 1. Strips leading whitespace/blank lines from the first TextElement -> 2. Strips trailing blank lines from the last TextElement (but preserves -> trailing whitespace on content lines - only removes after last newline) -> 3. Removes empty TextElements resulting from stripping - -> Args: -> elements: List of pattern elements (TextElement or Placeable) - -> Returns: -> Tuple of trimmed pattern elements -> """ -> if not elements: -> return () - -> result = list(elements) - - # Trim leading whitespace from first element if it's a TextElement -> while result and isinstance(result[0], TextElement): -> first = result[0] -> stripped = first.value.lstrip() -> if stripped: - # Keep non-empty content -> result[0] = TextElement(value=stripped) -> break - # Element was all whitespace - remove it -> result.pop(0) - - # Trim trailing BLANK LINES from last element if it's a TextElement. - # Per Fluent spec, only trailing blank lines should be removed, - # NOT trailing whitespace on content lines. - # Example: "Firefox " should preserve trailing spaces, - # but "Firefox\n \n" should become "Firefox". -> while result and isinstance(result[-1], TextElement): -> last = result[-1] -> text = last.value - - # Find the last newline in the text -> last_newline = text.rfind("\n") - -> if last_newline == -1: - # No newlines - this is a single-line text element. - # Do NOT strip trailing whitespace (it's significant per Fluent spec). -> break - - # Check if everything after the last newline is whitespace (blank line) -> after_newline = text[last_newline + 1 :] -> if after_newline.strip(): - # Content after last newline - preserve it all (including trailing spaces) -> break - - # Everything after last newline is whitespace - trim this blank line -> trimmed = text[:last_newline] -> if trimmed: -> result[-1] = TextElement(value=trimmed) - # Continue loop to check for more trailing blank lines -> else: - # Element was all whitespace - remove it -> result.pop() - -> return tuple(result) - - -> class _TextAccumulator: -> """Accumulator for building TextElement with efficient string concatenation. - -> Avoids O(N^2) behavior when processing continuation lines by collecting -> text fragments in a list and joining once. -> """ - -> __slots__ = ("fragments",) - -> def __init__(self) -> None: -> """Initialize empty accumulator.""" -> self.fragments: list[str] = [] - -> def add(self, text: str) -> None: -> """Add text fragment to accumulator. - -> Args: -> text: Text fragment to add -> """ -> self.fragments.append(text) - -> def has_content(self) -> bool: -> """Check if accumulator has any content. - -> Returns: -> True if accumulator has fragments, False otherwise -> """ -> return len(self.fragments) > 0 - -> def finalize(self) -> TextElement: -> """Create TextElement from accumulated fragments. - -> Returns: -> TextElement with joined content -> """ -> return TextElement(value="".join(self.fragments)) - -> def clear(self) -> None: -> """Clear accumulated fragments.""" -> self.fragments.clear() - - -> def parse_simple_pattern( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[Pattern] | None: -> """Parse simple pattern (text with optional placeables). - -> Used for parsing variant value patterns within select expressions. -> Stops at variant delimiters to allow proper parsing of inline and -> multiline select expressions. - -> Supports multiline continuation: variant values can span multiple lines when -> continuation lines are indented, matching the behavior of top-level patterns. - -> Per Fluent spec, common indentation handling: -> - The first continuation line's indentation sets the "common indent" baseline -> - Subsequent continuation lines have only the common indent stripped -> - Extra indentation beyond the common baseline is preserved in the pattern - -> Handles: -> - Plain text with multi-line continuation (indented lines) -> - All placeable types: {$var}, {-term}, {NUMBER(...)}, {"string"}, {42} - -> Stop conditions: -> - Close brace (}): End of containing select expression -> - Open bracket ([): Start of next variant key (with lookahead) -> - Asterisk (*): Start of default variant marker (only if followed by '[') -> - Newline (\\n): End of variant value UNLESS followed by indented continuation - -> Lookahead: -> '*' and '[' are only treated as variant markers when they form valid -> variant syntax. Standalone '*' or '[' without matching pattern are -> treated as literal text, enabling values like "[INFO]" or "3 * 5". - -> Examples: -> "Hello" -> Pattern([TextElement("Hello")]) -> "Hi {$name}" -> Pattern([TextElement("Hi "), Placeable(...)]) -> "[INFO] msg" -> Pattern([TextElement("[INFO] msg")]) # [ is literal -> "3 * 5" -> Pattern([TextElement("3 * 5")]) # * is literal -> "Line 1\\n Line 2" -> Pattern with multiline content - -> Args: -> cursor: Current position in source -> context: Parse context for depth tracking - -> Returns: -> ParseResult(Pattern, new_cursor) on success, None on parse error -> """ -> elements: list[TextElement | Placeable] = [] - # Track common indentation (set on first continuation line) -> common_indent: int | None = None - # Accumulate text fragments to avoid O(N^2) string concatenation -> text_acc = _TextAccumulator() - -> while not cursor.is_eof: -> ch = cursor.current - - # Stop condition: end of select expression -> if ch == "}": -> break - - # Check variant markers with lookahead - # - [: start of next variant key (only if followed by text and ]) - # - *: start of default variant marker (only if followed by [) -> if ch in ("[", "*") and _is_variant_marker(cursor): -> break - - # Handle newline - check for indented continuation. - # Note: Line endings are normalized to LF at parser entry. -> if ch == "\n": -> if is_indented_continuation(cursor): - # Skip newline -> cursor = cursor.advance() - - # Skip any blank lines (consecutive newlines) before measuring indent. - # This matches is_indented_continuation() which looks past blank lines - # to find indented content. Without this, blank lines before first - # content would set common_indent to 0 (measuring at newline position). -> while not cursor.is_eof and cursor.current == "\n": -> cursor = cursor.advance() - - # Track common indentation from first continuation line -> if common_indent is None: -> common_indent = _count_leading_spaces(cursor) - # Skip the common indent -> cursor = cursor.skip_spaces() -> extra_spaces = "" -> else: - # Skip only common indent, preserve extra spaces -> cursor, extra_spaces = _skip_common_indent(cursor, common_indent) - - # Per Fluent spec, continuation lines are joined with newlines. - # IMPORTANT: The newline belongs to the END of the previous element, - # but extra_spaces belong to the START of the next element. - # Merge newline with previous element immediately. -> if elements and not isinstance(elements[-1], Placeable): -> last_elem = elements[-1] -> elements[-1] = TextElement(value=last_elem.value + "\n") -> else: - # No previous text element to merge with -> elements.append(TextElement(value="\n")) - - # Store extra_spaces to prepend to next text element -> if extra_spaces: -> text_acc.add(extra_spaces) -> continue # Continue parsing on next line -> break # Not a continuation, stop parsing pattern - - # Parse placeable expression -> if ch == "{": - # Add accumulated extra_spaces as text element before placeable -> if text_acc.has_content(): -! elements.append(text_acc.finalize()) -! text_acc.clear() - -> cursor = cursor.advance() # Skip { - - # Use full placeable parser which handles all expression types - # (variables, terms, functions, strings, numbers, select expressions) -> placeable_result = parse_placeable(cursor, context) -> if placeable_result is None: -> return placeable_result - -> placeable_parse = placeable_result -> cursor = placeable_parse.cursor -> elements.append(placeable_parse.value) - -> else: - # Parse text until { or stop condition -> text_start = cursor.pos -> while not cursor.is_eof: # pragma: no branch -> ch = cursor.current - # Stop at: placeable start, newline, closing brace - # Note: Line endings are normalized to LF at parser entry. -> if ch in ("{", "\n", "}"): -> break - # Check variant markers with lookahead -> if ch in ("[", "*") and _is_variant_marker(cursor): -> break -> cursor = cursor.advance() - -> if cursor.pos > text_start: # pragma: no branch - # Note: This condition is always True because entering the else block - # at line 355 means ch was not a stop character, so the inner while - # loop at 358 will always advance at least once before breaking. - # The False branch (cursor.pos == text_start) is structurally unreachable. -> text = Cursor(cursor.source, text_start).slice_to(cursor.pos) - # Prepend extra_spaces from continuation to new text element -> if text_acc.has_content(): -> text = text_acc.finalize().value + text -> text_acc.clear() -> elements.append(TextElement(value=text)) - - # Finalize any remaining accumulated extra_spaces (trailing spaces at end of pattern) -> if text_acc.has_content(): - # These are just trailing extra_spaces; add as text element (may be trimmed) -! elements.append(text_acc.finalize()) - - # Per Fluent spec, trim leading and trailing blank lines from patterns -> trimmed_elements = _trim_pattern_blank_lines(elements) -> pattern = Pattern(elements=trimmed_elements) -> return ParseResult(pattern, cursor) - - -> def _count_leading_spaces(cursor: Cursor) -> int: -> """Count leading spaces at current position (for common indentation tracking). - -> Args: -> cursor: Current position (at start of line content after newline) - -> Returns: -> Number of leading space characters (U+0020 only, not tabs) -> """ -> count = 0 -> scan = cursor -> while not scan.is_eof and scan.current == " ": -> count += 1 -> scan = scan.advance() -> return count - - -> def _skip_common_indent(cursor: Cursor, common_indent: int) -> tuple[Cursor, str]: -> """Skip common indentation and return any extra spaces. - -> Per Fluent spec, only the common indentation is stripped from continuation -> lines. Extra indentation beyond the common baseline is preserved. - -> Args: -> cursor: Current position (at start of line content after newline) -> common_indent: Number of spaces to strip (common indentation) - -> Returns: -> Tuple of (new cursor position, extra spaces to preserve) -> """ - # Skip common indent spaces -> skipped = 0 -> while skipped < common_indent and not cursor.is_eof and cursor.current == " ": -> cursor = cursor.advance() -> skipped += 1 - - # Collect extra spaces beyond common indent -> extra_spaces: list[str] = [] -> while not cursor.is_eof and cursor.current == " ": -> extra_spaces.append(" ") -> cursor = cursor.advance() - -> return cursor, "".join(extra_spaces) - - -> def parse_pattern( -> cursor: Cursor, -> context: ParseContext | None = None, -> *, -> initial_common_indent: int | None = None, -> ) -> ParseResult[Pattern] | None: -> """Parse full pattern with multi-line continuation support. - -> Use this for top-level message/attribute patterns. For variant patterns -> inside select expressions, use parse_simple_pattern() which has simpler -> stop conditions (no multi-line continuation). - -> Per Fluent spec, common indentation handling: -> - The first continuation line's indentation sets the "common indent" baseline -> - Subsequent continuation lines have only the common indent stripped -> - Extra indentation beyond the common baseline is preserved in the pattern - -> Handles: -> - Plain text with multi-line continuation (indented lines) -> - All placeable types: {$var}, {-term}, {NUMBER(...)}, {"string"}, {42} -> - Select expressions: {$var -> [key] value} - -> Args: -> cursor: Current position in source -> context: Parse context for depth tracking -> initial_common_indent: Pre-computed common indent from skip_multiline_pattern_start. -> When provided, this is the indentation of the first line of a multiline -> pattern (already skipped by skip_multiline_pattern_start). - -> Returns: -> ParseResult with Pattern on success, None on parse error -> """ -> elements: list[TextElement | Placeable] = [] - # Track common indentation (set on first continuation line, or from initial_common_indent) -> common_indent: int | None = initial_common_indent if initial_common_indent else None - # Accumulate text fragments to avoid O(N^2) string concatenation -> text_acc = _TextAccumulator() - -> while not cursor.is_eof: -> ch = cursor.current - - # Handle newline - check for indented continuation. - # Note: Line endings are normalized to LF at parser entry. -> if ch == "\n": -> if is_indented_continuation(cursor): - # Skip newline -> cursor = cursor.advance() - - # Skip any blank lines (consecutive newlines) before measuring indent. - # This matches is_indented_continuation() which looks past blank lines - # to find indented content. Without this, blank lines before first - # content would set common_indent to 0 (measuring at newline position). -> while not cursor.is_eof and cursor.current == "\n": -! cursor = cursor.advance() - - # Track common indentation from first continuation line -> if common_indent is None: -> common_indent = _count_leading_spaces(cursor) - # Skip the common indent -> cursor = cursor.skip_spaces() -> extra_spaces = "" -> else: - # Skip only common indent, preserve extra spaces -> cursor, extra_spaces = _skip_common_indent(cursor, common_indent) - - # Per Fluent spec, continuation lines are joined with newlines. - # IMPORTANT: The newline belongs to the END of the previous element, - # but extra_spaces belong to the START of the next element. - # Merge newline with previous element immediately. -> if elements and not isinstance(elements[-1], Placeable): -> last_elem = elements[-1] -> elements[-1] = TextElement(value=last_elem.value + "\n") -> else: - # No previous text element to merge with -> elements.append(TextElement(value="\n")) - - # Store extra_spaces to prepend to next text element -> if extra_spaces: -! text_acc.add(extra_spaces) -> continue # Continue parsing on next line -> break # Not a continuation, stop parsing pattern - - # Note: '.' is removed from stop conditions here. - # Per Fluent spec, '.' only starts an attribute when it appears at the - # beginning of a NEW LINE (after newline + optional indentation). - # A '.' on the same line as '=' is valid text content. - # Attributes are detected in message/term parsing after pattern completes. - - # Placeable: {$var} or {$var -> ...} -> if ch == "{": - # Add accumulated extra_spaces as text element before placeable -> if text_acc.has_content(): -! elements.append(text_acc.finalize()) -! text_acc.clear() - -> cursor = cursor.advance() # Skip { - - # Use helper method to parse placeable (reduces nesting!) -> placeable_result = parse_placeable(cursor, context) -> if placeable_result is None: -> return placeable_result - -> placeable_parse = placeable_result -> elements.append(placeable_parse.value) -> cursor = placeable_parse.cursor - -> else: - # Parse text until { or stop condition -> text_start = cursor.pos -> while not cursor.is_eof: -> ch = cursor.current - # Stop at: placeable start or newline only. - # Note: '}', '[', '*' are valid text in top-level patterns. - # They only have special meaning inside select expressions (handled - # by parse_simple_pattern). An unescaped '}' is technically invalid - # FTL syntax, but treating it as text is more robust than skipping. - # Note: Line endings are normalized to LF at parser entry. -> if ch in ("{", "\n"): -> break -> cursor = cursor.advance() - -> if cursor.pos > text_start: # pragma: no branch - # Note: False branch (cursor.pos == text_start) occurs when inner loop - # breaks immediately without consuming text. This happens when cursor - # starts on a stop char ('{', '\n'). However, outer loop checks for '\n' - # before text parsing, and '{' enters placeable parsing, so this condition - # is always True when reached. -> text = Cursor(cursor.source, text_start).slice_to(cursor.pos) - # Prepend extra_spaces from continuation to new text element -> if text_acc.has_content(): -! text = text_acc.finalize().value + text -! text_acc.clear() -> elements.append(TextElement(value=text)) - - # Finalize any remaining accumulated extra_spaces (trailing spaces at end of pattern) -> if text_acc.has_content(): - # These are just trailing extra_spaces; add as text element (may be trimmed) -! elements.append(text_acc.finalize()) - - # Per Fluent spec, trim leading and trailing blank lines from patterns -> trimmed_elements = _trim_pattern_blank_lines(elements) -> pattern = Pattern(elements=trimmed_elements) -> return ParseResult(pattern, cursor) - - - # ============================================================================= - # Expression Parsing - # ============================================================================= - - -> def parse_variant_key(cursor: Cursor) -> ParseResult[Identifier | NumberLiteral] | None: -> """Parse variant key (identifier or number). - -> Helper method extracted from parse_variant to reduce complexity. - -> Args: -> cursor: Current position in source - -> Returns: -> Success(ParseResult(Identifier | NumberLiteral, cursor)) on success -> Failure(ParseError(...)) on parse error -> """ - # Try number first (ASCII digits only, not Unicode like 2) -> if not cursor.is_eof and (cursor.current in _ASCII_DIGITS or cursor.current == "-"): -> num_result = parse_number(cursor) -> if num_result is not None: -> num_parse = num_result -> num_str = num_parse.value -> num_value = parse_number_value(num_str) -> return ParseResult( -> NumberLiteral(value=num_value, raw=num_str), num_parse.cursor -> ) - - # Failed to parse as number, try identifier -> id_result = parse_identifier(cursor) -> if id_result is None: - # Both failed - return parse error -> return None # "Expected variant key (identifier or number)", cursor - -> id_parse = id_result -> return ParseResult(Identifier(id_parse.value), id_parse.cursor) - - # Parse as identifier -> id_result = parse_identifier(cursor) -> if id_result is None: -> return id_result - -> id_parse = id_result -> return ParseResult(Identifier(id_parse.value), id_parse.cursor) - - -> def parse_variant( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[Variant] | None: -> """Parse variant: [key] pattern or *[key] pattern - -> Variants are the cases in a select expression. - -> Examples: -> [zero] no items -> *[other] many items - -> Args: -> cursor: Current position in source -> context: Parse context for depth tracking - -> Returns: -> Success(ParseResult(Variant, new_cursor)) on success -> Failure(ParseError(...)) on parse error -> """ - # Check for default marker * -> is_default = False -> if not cursor.is_eof and cursor.current == "*": -> is_default = True -> cursor = cursor.advance() - - # Expect [ -> if cursor.is_eof or cursor.current != "[": -> return None # "Expected '[' at start of variant", cursor - -> cursor = cursor.advance() # Skip [ - - # Parse variant key (identifier or number) using extracted helper - # Per spec: VariantKey ::= "[" blank? (NumberLiteral | Identifier) blank? "]" -> cursor = skip_blank(cursor) -> key_result = parse_variant_key(cursor) -> if key_result is None: -> return key_result - -> key_parse = key_result -> variant_key = key_parse.value -> cursor = skip_blank(key_parse.cursor) - - # Expect ] -> if cursor.is_eof or cursor.current != "]": -> return None # "Expected ']' after variant key", cursor - -> cursor = cursor.advance() # Skip ] - # After ], before pattern: blank_inline (same line) or newline+indent -> cursor = skip_blank_inline(cursor) - - # Parse pattern (on same line or next line with indent) - # Simplified: parse until newline that's not indented -> pattern_result = parse_simple_pattern(cursor, context) -> if pattern_result is None: -> return pattern_result - -> pattern_parse = pattern_result - - # Don't skip trailing whitespace - let select expression parser handle it -> variant = Variant(key=variant_key, value=pattern_parse.value, default=is_default) -> return ParseResult(variant, pattern_parse.cursor) - - -> def parse_select_expression( -> cursor: Cursor, -> selector: InlineExpression, -> start_pos: int, -> context: ParseContext | None = None, -> ) -> ParseResult[SelectExpression] | None: -> """Parse select expression after seeing selector and -> - -> Format: {$var -> [key1] value1 *[key2] value2} - -> The selector has already been parsed. - -> Example: -> After parsing {$count and seeing ->, we parse: -> [zero] {$count} items -> [one] {$count} item -> *[other] {$count} items -> } - -> Args: -> cursor: Current position (should be after ->) -> selector: The selector expression (e.g., VariableReference($count)) -> start_pos: Start position of the select expression (for span tracking) -> context: Parse context for depth tracking - -> Returns: -> Success(ParseResult(SelectExpression, new_cursor)) on success -> Failure(ParseError(...)) on parse error -> """ - # Per spec: SelectExpression ::= InlineExpression blank? "->" blank_inline? variant_list - # After ->, we need blank_inline before variant list starts (could be on next line) - # variant_list allows line_end, so use skip_blank to handle newlines -> cursor = skip_blank(cursor) - - # Parse variants -> variants: list[Variant] = [] - -> while not cursor.is_eof: - # Within variant_list, allow blank (spaces and newlines) -> cursor = skip_blank(cursor) - - # Check for end of select } -> if cursor.current == "}": -> break - - # Parse variant (pass context for nested placeable depth tracking) -> variant_result = parse_variant(cursor, context) -> if variant_result is None: -> return variant_result - -> variant_parse = variant_result -> variants.append(variant_parse.value) -> cursor = variant_parse.cursor - -> if not variants: -> return None # "Select expression must have at least one variant", cursor - - # Validate exactly one default variant (FTL spec requirement) -> default_count = sum(1 for v in variants if v.default) -> if default_count == 0: -> return None # "Select expression must have exactly one default variant (marked with *)" -> if default_count > 1: -> return None # "Select expression must have exactly one default variant, found multiple" - - # Create span from start position to current position (end of last variant) -> span = Span(start=start_pos, end=cursor.pos) -> select_expr = SelectExpression(selector=selector, variants=tuple(variants), span=span) -> return ParseResult(select_expr, cursor) - - -> def parse_argument_expression( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[InlineExpression] | None: -> """Parse a single argument expression per FTL spec. - -> FTL Argument Grammar: -> InlineExpression ::= StringLiteral | NumberLiteral | FunctionReference -> | MessageReference | TermReference | VariableReference -> | inline_placeable - -> This handles all valid positional argument types including: -> - Variable references: $var -> - String literals: "text" -> - Number literals: 42, -123 -> - Term references: -brand -> - Function references: NUMBER($val) -> - Inline placeables: { expr } -> - Message references: identifier - -> Args: -> cursor: Current position in source -> context: Parse context for nested placeable depth tracking - -> Returns: -> Success(ParseResult(InlineExpression, cursor)) on success -> None on parse error -> """ -> if cursor.is_eof: -> return None - - # Capture start position for span (used by identifier-based expressions) -> start_pos = cursor.pos -> ch = cursor.current - - # Variable reference: $var -> if ch == "$": -> var_result = parse_variable_reference(cursor) -> if var_result is None: -> return None -> return ParseResult(var_result.value, var_result.cursor) - - # String literal: "text" -> if ch == '"': -> str_result = parse_string_literal(cursor) -> if str_result is None: -> return None -> return ParseResult(StringLiteral(value=str_result.value), str_result.cursor) - - # Hyphen: could be TermReference (-brand) or negative number (-123) -> if ch == "-": -> next_cursor = cursor.advance() -> if not next_cursor.is_eof and is_identifier_start(next_cursor.current): - # Term reference: -brand (ASCII letter after hyphen) -> term_result = parse_term_reference(cursor, context) -> if term_result is None: -> return None -> return ParseResult(term_result.value, term_result.cursor) - # Negative number: -123 -> num_result = parse_number(cursor) -> if num_result is None: -> return None -> num_value = parse_number_value(num_result.value) -> return ParseResult( -> NumberLiteral(value=num_value, raw=num_result.value), num_result.cursor -> ) - - # Positive number: 42 -> if ch in _ASCII_DIGITS: -> num_result = parse_number(cursor) -> if num_result is None: -> return None -> num_value = parse_number_value(num_result.value) -> return ParseResult( -> NumberLiteral(value=num_value, raw=num_result.value), num_result.cursor -> ) - - # Inline placeable: { expr } -> if ch == "{": -> cursor = cursor.advance() # Skip opening { -> placeable_result = parse_placeable(cursor, context) -> if placeable_result is None: -> return None -> return ParseResult(placeable_result.value, placeable_result.cursor) - - # Identifier: function call (any case per spec) or message reference - # Note: ASCII letter check per Fluent spec for identifier start -> if is_identifier_start(ch) or ch == "_": -> id_result = parse_identifier(cursor) -> if id_result is None: -> return None - -> name = id_result.value -> cursor_after_id = id_result.cursor - - # Check if identifier followed by '(' -> function call (any case per spec) -> lookahead = skip_blank_inline(cursor_after_id) -> if not lookahead.is_eof and lookahead.current == "(": -> func_result = parse_function_reference(cursor, context) -> if func_result is None: -> return None -> return ParseResult(func_result.value, func_result.cursor) - - # Message reference (or identifier for named argument name) -> return ParseResult( -> MessageReference( -> id=Identifier(name), -> span=Span(start=start_pos, end=cursor_after_id.pos), -> ), -> cursor_after_id, -> ) - -> return None # "Expected argument expression" - - -> def parse_call_arguments( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[CallArguments] | None: -> """Parse function call arguments: (pos1, pos2, name1: val1, name2: val2) - -> Arguments consist of positional arguments followed by named arguments. -> Positional arguments must come before named arguments. -> Named argument names must be unique. - -> Examples: -> ($value) -> CallArguments(positional=[$value], named=[]) -> ($value, minimumFractionDigits: 2) -> CallArguments with both types - -> Args: -> cursor: Position AFTER the opening '(' -> context: Parse context for nested placeable depth tracking - -> Returns: -> Success(ParseResult(CallArguments, cursor_after_))) on success -> Failure(ParseError(...)) on parse error -> """ - # Per spec: CallArguments ::= blank? "(" blank? argument_list blank? ")" -> cursor = skip_blank_inline(cursor) - -> positional: list[InlineExpression] = [] -> named: list[NamedArgument] = [] -> seen_named_arg_names: set[str] = set() -> seen_named = False # Track if we've seen any named args - - # Parse comma-separated arguments -> while not cursor.is_eof: -> cursor = skip_blank_inline(cursor) - - # Check for end of arguments -> if cursor.current == ")": -> break - - # Parse the argument expression using extracted helper -> arg_result = parse_argument_expression(cursor, context) -> if arg_result is None: -> return arg_result - -> arg_parse = arg_result -> arg_expr = arg_parse.value -> cursor = skip_blank_inline(arg_parse.cursor) - - # Check if this is a named argument (followed by :) -> if not cursor.is_eof and cursor.current == ":": - # This is a named argument -> cursor = cursor.advance() # Skip : -> cursor = skip_blank_inline(cursor) - - # The argument expression must be an identifier (MessageReference) -> if not isinstance(arg_expr, MessageReference): -> return None # "Named argument name must be an identifier", cursor - -> arg_name = arg_expr.id.name - - # Check for duplicate named argument names -> if arg_name in seen_named_arg_names: -> return None # f"Duplicate named argument: '{arg_name}'", cursor -> seen_named_arg_names.add(arg_name) - - # Parse the value (must be inline expression) -> if cursor.is_eof: -> return None # "Expected value after ':'", cursor - - # Parse value expression using extracted helper -> value_result = parse_argument_expression(cursor, context) -> if value_result is None: -> return value_result - -> value_parse = value_result -> value_expr = value_parse.value -> cursor = value_parse.cursor - - # Per FTL spec: NamedArgument ::= Identifier ":" (StringLiteral | NumberLiteral) - # Named argument values MUST be literals, NOT references or variables -> if not isinstance(value_expr, (StringLiteral, NumberLiteral)): - # Named argument values must be literals per FTL spec - # This restriction enables static analysis by translation tools -> return None # f"Named argument '{arg_name}' requires a literal value", cursor - -> named.append(NamedArgument(name=Identifier(arg_name), value=value_expr)) -> seen_named = True - -> else: - # This is a positional argument -> if seen_named: -> return None # "Positional arguments must come before named arguments", cursor -> positional.append(arg_expr) - -> cursor = skip_blank_inline(cursor) - - # Check for comma (optional before closing paren) -> if not cursor.is_eof and cursor.current == ",": -> cursor = cursor.advance() # Skip comma -> cursor = skip_blank_inline(cursor) - -> call_args = CallArguments(positional=tuple(positional), named=tuple(named)) -> return ParseResult(call_args, cursor) - - -> def parse_function_reference( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[FunctionReference] | None: -> """Parse function reference: identifier(args) - -> Per Fluent 1.0 spec, function names follow the standard Identifier grammar -> which allows any case. The convention of uppercase function names (NUMBER, -> DATETIME) is stylistic, not syntactic. - -> FTL EBNF: FunctionReference ::= Identifier CallArguments - -> Security: -> Function calls increment nesting depth to prevent DoS via deeply nested -> calls like NUMBER(A(B(C(...)))). Each level consumes stack frames. - -> Examples: -> NUMBER($value) -> number($value) -> DateTime($date, dateStyle: "full") - -> Args: -> cursor: Position at start of function name -> context: Parse context for nesting depth tracking - -> Returns: -> Success(ParseResult(FunctionReference, cursor_after_))) on success -> None on parse error or nesting depth exceeded -> """ - # Create default context if not provided -> if context is None: -> context = ParseContext() - - # Check nesting depth limit (DoS prevention) - # Function calls can nest arbitrarily: A(B(C(D(...)))) -> if context.is_depth_exceeded(): -> return None - - # Capture start position for span -> start_pos = cursor.pos - - # Parse function name (any case per spec) -> id_result = parse_identifier(cursor) -> if id_result is None: -> return id_result - -> id_parse = id_result -> func_name = id_parse.value - - # Per spec: FunctionReference uses blank? before "(" -> cursor = skip_blank_inline(id_parse.cursor) - - # Expect opening parenthesis -> if cursor.is_eof or cursor.current != "(": -> return None # "Expected '(' after function name", cursor - -> cursor = cursor.advance() # Skip ( - - # Create nested context with incremented depth for argument parsing -> nested_context = context.enter_nesting() - - # Parse arguments with nested context -> args_result = parse_call_arguments(cursor, nested_context) -> if args_result is None: -> return args_result - -> args_parse = args_result -> cursor = skip_blank_inline(args_parse.cursor) - - # Expect closing parenthesis -> if cursor.is_eof or cursor.current != ")": -> return None # "Expected ')' after function arguments" - -> cursor = cursor.advance() # Skip ) - -> func_ref = FunctionReference( -> id=Identifier(func_name), -> arguments=args_parse.value, -> span=Span(start=start_pos, end=cursor.pos), -> ) -> return ParseResult(func_ref, cursor) - - -> def parse_term_reference( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[TermReference] | None: -> """Parse term reference in inline expression (-term-id or -term.attr). - -> FTL syntax: -> { -brand } -> { -brand.short } -> { -brand(case: "nominative") } - -> Term references can have optional attribute access and arguments. - -> Security: -> Term calls with arguments increment nesting depth to prevent DoS via -> deeply nested calls. Arguments can contain nested expressions. - -> Args: -> cursor: Current position (should be at '-') -> context: Parse context for nesting depth tracking - -> Returns: -> Success(ParseResult(TermReference, new_cursor)) on success -> None on parse error or nesting depth exceeded -> """ - # Create default context if not provided -> if context is None: -> context = ParseContext() - - # Capture start position for span -> start_pos = cursor.pos - - # Expect '-' prefix -> if cursor.is_eof or cursor.current != "-": -> return None # "Expected '-' at start of term reference", cursor, expected=["-"] - -> cursor = cursor.advance() # Skip '-' - - # Parse identifier -> id_result = parse_identifier(cursor) -> if id_result is None: -> return id_result - -> id_parse = id_result -> cursor = id_parse.cursor - - # Check for optional attribute access (.attribute) -> attribute: Identifier | None = None -> if not cursor.is_eof and cursor.current == ".": -> cursor = cursor.advance() # Skip '.' - -> attr_id_result = parse_identifier(cursor) -> if attr_id_result is None: -> return attr_id_result - -> attr_id_parse = attr_id_result -> attribute = Identifier(attr_id_parse.value) -> cursor = attr_id_parse.cursor - - # Check for optional arguments (case: "nominative") - # Per spec: TermReference uses blank? before "(" -> cursor = skip_blank_inline(cursor) - -> arguments: CallArguments | None = None -> if not cursor.is_eof and cursor.current == "(": - # Check nesting depth limit (DoS prevention) before parsing arguments -> if context.is_depth_exceeded(): -> return None - - # Parse call arguments with incremented depth -> cursor = cursor.advance() # Skip '(' -> nested_context = context.enter_nesting() -> args_result = parse_call_arguments(cursor, nested_context) -> if args_result is None: -> return args_result - -> args_parse = args_result -> cursor = skip_blank_inline(args_parse.cursor) - - # Expect closing parenthesis -> if cursor.is_eof or cursor.current != ")": -> return None # "Expected ')' after term arguments" - -> cursor = cursor.advance() # Skip ')' -> arguments = args_parse.value - -> term_ref = TermReference( -> id=Identifier(id_parse.value), -> attribute=attribute, -> arguments=arguments, -> span=Span(start=start_pos, end=cursor.pos), -> ) - -> return ParseResult(term_ref, cursor) - - -> def _parse_inline_string_literal(cursor: Cursor) -> ParseResult[InlineExpression] | None: -> """Parse string literal inline expression.""" -> str_result = parse_string_literal(cursor) -> if str_result is None: -> return None -> return ParseResult(StringLiteral(value=str_result.value), str_result.cursor) - - -> def _parse_inline_number_literal(cursor: Cursor) -> ParseResult[InlineExpression] | None: -> """Parse number literal inline expression.""" -> num_result = parse_number(cursor) -> if num_result is None: -> return None -> num_str = num_result.value -> num_value = parse_number_value(num_str) -> return ParseResult(NumberLiteral(value=num_value, raw=num_str), num_result.cursor) - - -> def _parse_inline_hyphen( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[InlineExpression] | None: -> """Parse hyphen-prefixed expression: term reference (-brand) or negative number (-123). - -> Args: -> cursor: Current position in source -> context: Parse context for nested placeable depth tracking -> """ -> next_cursor = cursor.advance() -> if not next_cursor.is_eof and is_identifier_start(next_cursor.current): - # Term reference: -brand (ASCII letter after hyphen) -> term_result = parse_term_reference(cursor, context) -> if term_result is None: -> return None -> return ParseResult(term_result.value, term_result.cursor) - # Negative number: -123 -> return _parse_inline_number_literal(cursor) - - -> def _parse_message_attribute(cursor: Cursor) -> tuple[Identifier | None, Cursor]: -> """Parse optional .attribute suffix on message/function references.""" -> if cursor.is_eof or cursor.current != ".": -> return None, cursor -> cursor = cursor.advance() # Skip '.' -> attr_id_result = parse_identifier(cursor) -> if attr_id_result is None: -> return None, cursor -> return Identifier(attr_id_result.value), attr_id_result.cursor - - -> def _parse_inline_identifier( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[InlineExpression] | None: -> """Parse identifier-based expression: function call or message reference. - -> Per Fluent 1.0 spec, function names follow the standard Identifier grammar -> which allows any case. The convention of uppercase function names (NUMBER, -> DATETIME) is stylistic, not syntactic. - -> Args: -> cursor: Current position in source -> context: Parse context for nested placeable depth tracking -> """ - # Capture start position for span -> start_pos = cursor.pos - -> id_result = parse_identifier(cursor) -> if id_result is None: -> return None - -> name = id_result.value -> cursor_after_id = id_result.cursor - - # Check if identifier followed by '(' -> function call (any case per spec) - # Per Fluent spec: FunctionReference ::= Identifier CallArguments - # Identifier allows any case; uppercase is convention, not requirement -> lookahead = skip_blank_inline(cursor_after_id) -> if not lookahead.is_eof and lookahead.current == "(": -> func_result = parse_function_reference(cursor, context) -> if func_result is None: -> return None -> return ParseResult(func_result.value, func_result.cursor) - - # Message reference with optional attribute -> attribute, final_cursor = _parse_message_attribute(cursor_after_id) -> return ParseResult( -> MessageReference( -> id=Identifier(name), -> attribute=attribute, -> span=Span(start=start_pos, end=final_cursor.pos), -> ), -> final_cursor, -> ) - - -> def parse_inline_expression( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[InlineExpression] | None: -> """Parse inline expression per Fluent spec. - -> Uses character-based dispatch for efficient parsing. Each expression type -> has a dedicated handler function. - -> Per Fluent EBNF: -> InlineExpression ::= StringLiteral | NumberLiteral | FunctionReference -> | MessageReference | TermReference | VariableReference -> | inline_placeable - -> Handles: -> - Variable references: $var -> - String literals: "text" -> - Number literals: 42 or -123 -> - Function calls: FUNC(args) or func(args) (any case per spec) -> - Message references: identifier or identifier.attribute -> - Term references: -term-id or -term-id.attribute -> - Nested placeables: { expr } (inline_placeable per spec) - -> Args: -> cursor: Current position in source -> context: Parse context for nested placeable depth tracking - -> Returns: -> ParseResult with InlineExpression on success, None on parse error -> """ -> if cursor.is_eof: -> return None - -> ch = cursor.current - - # Dispatch based on first character -> match ch: -> case "$": -> var_result = parse_variable_reference(cursor) -> if var_result is None: -> return None -> return ParseResult(var_result.value, var_result.cursor) - -> case '"': -> return _parse_inline_string_literal(cursor) - -> case "-": -> return _parse_inline_hyphen(cursor, context) - -> case "{": - # Nested placeable: { expr } per spec (inline_placeable) - # Advance past opening brace and delegate to parse_placeable -> placeable_result = parse_placeable(cursor.advance(), context) -> if placeable_result is None: -> return None -> return ParseResult(placeable_result.value, placeable_result.cursor) - -> case _ if ch in _ASCII_DIGITS: -> return _parse_inline_number_literal(cursor) - -> case _ if is_identifier_start(ch): - # ASCII letter [a-zA-Z] check per Fluent spec for identifier start -> return _parse_inline_identifier(cursor, context) - -> case _: -> return None - - -> def parse_placeable( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[Placeable] | None: -> """Parse placeable expression: {$var}, {"\\n"}, {$var -> [key] value}, or {FUNC()}. - -> Parser combinator helper that reduces nesting in parse_pattern(). - -> Handles: -> - Variable references: {$var} -> - String literals: {"\\n"} -> - Number literals: {42} -> - Select expressions: {$var -> [one] item *[other] items} -> - Function calls: {NUMBER($value, minimumFractionDigits: 2)} - -> Security: -> Enforces maximum nesting depth to prevent DoS attacks via deeply -> nested placeables. Configure via max_nesting_depth on FluentParserV1. - -> Args: -> cursor: Position AFTER the opening '{' -> context: Parse context for depth tracking. If None, creates fresh context. - -> Returns: -> Success(ParseResult(Placeable, cursor_after_})) on success -> None on parse error or nesting depth exceeded - -> Example: -> cursor at: "$var}" -> parses to Placeable(VariableReference("var")) -> cursor at: "\"\\n\"}" -> parses to Placeable(StringLiteral("\\n")) -> cursor at: "$n -> [one] 1 *[other] N}" -> parses to Placeable(SelectExpression(...)) -> cursor at: "NUMBER($val)}" -> parses to Placeable(FunctionReference(...)) -> """ - # Create default context if not provided -> if context is None: -> context = ParseContext() - - # Check nesting depth limit (DoS prevention) -> if context.is_depth_exceeded(): - # Nesting depth exceeded - return None to signal parse failure - # This prevents stack overflow from deeply nested constructs -> return None - - # Create child context with incremented depth for nested parsing -> nested_context = context.enter_nesting() - - # Per spec: inline_placeable ::= "{" blank? (SelectExpression | InlineExpression) blank? "}" - # blank ::= (blank_inline | line_end)+ ; allows newlines inside placeables -> cursor = skip_blank(cursor) - - # Capture start position before parsing expression (for select expression span) -> expr_start_pos = cursor.pos - - # Parse the inline expression with nested context for depth tracking -> expr_result = parse_inline_expression(cursor, nested_context) -> if expr_result is None: -> return expr_result - -> expr_parse = expr_result -> expression = expr_parse.value -> parse_result_cursor = expr_parse.cursor - - # Per spec: blank allows newlines after expression -> cursor = skip_blank(parse_result_cursor) - - # Check for select expression (->) - # Per FTL 1.0 spec: SelectExpression ::= InlineExpression blank? "->" ... - # Valid selectors (any InlineExpression): - # - VariableReference: { $var -> ... } - # - StringLiteral: { "foo" -> ... } - # - NumberLiteral: { 42 -> ... } - # - FunctionReference: { NUMBER($x) -> ... } - # - MessageReference: { msg -> ... } or { msg.attr -> ... } - # - TermReference: { -term -> ... } or { -term.attr -> ... } -> is_valid_selector = isinstance( -> expression, -> ( -> VariableReference, -> StringLiteral, -> NumberLiteral, -> FunctionReference, -> MessageReference, -> TermReference, -> ), -> ) - -> if is_valid_selector and not cursor.is_eof and cursor.current == "-": - # Peek ahead for -> -> next_cursor = cursor.advance() -> if not next_cursor.is_eof and next_cursor.current == ">": - # It's a select expression! -> cursor = next_cursor.advance() # Skip -> - -> select_result = parse_select_expression( -> cursor, expression, expr_start_pos, nested_context -> ) -> if select_result is None: -> return select_result - -> select_parse = select_result - # Per spec: blank allows newlines after select expression -> cursor = skip_blank(select_parse.cursor) - - # Expect } -> if cursor.is_eof or cursor.current != "}": -> return None # "Expected '}' after select expression", cursor - -> cursor = cursor.advance() # Skip } -> return ParseResult(Placeable(expression=select_parse.value), cursor) - - # Just a simple inline expression {$var}, {"\n"}, or {42} - # Expect } -> if cursor.is_eof or cursor.current != "}": -> return None # "Expected '}'", cursor - -> cursor = cursor.advance() # Skip } -> return ParseResult(Placeable(expression=expression), cursor) - - - # ============================================================================= - # Entry Parsing - # ============================================================================= - - -> def parse_message_header(cursor: Cursor) -> ParseResult[str] | None: -> """Parse message header: Identifier "=" - -> Returns identifier string and cursor after '='. -> """ -> id_result = parse_identifier(cursor) -> if id_result is None: -> return id_result - -> id_parse = id_result - # Per spec: Message ::= Identifier blank_inline? "=" ... -> cursor = skip_blank_inline(id_parse.cursor) - -> if cursor.is_eof or cursor.current != "=": -> return None # "Expected '=' after message ID", cursor - -> cursor = cursor.advance() # Skip = -> return ParseResult(id_parse.value, cursor) - - -> def parse_message_attributes( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[list[Attribute]] | None: -> """Parse zero or more message attributes. - -> Attributes must appear on new lines starting with '.'. - -> Args: -> cursor: Current position in source -> context: Parse context for depth tracking -> """ -> attributes: list[Attribute] = [] - -> while not cursor.is_eof: - # Advance to next line. - # Note: Line endings are normalized to LF at parser entry. -> if cursor.current == "\n": -> cursor = cursor.advance() -> else: -> break # No newline, done with attributes - - # Check if line starts with '.' (attribute marker) - # Per spec: Attribute ::= line_end blank? "." ... - # blank allows spaces and newlines, but NOT tabs -> saved_cursor = cursor - # Skip leading spaces on this line (NOT tabs per spec) -> cursor = cursor.skip_spaces() - -> if cursor.is_eof or cursor.current != ".": -> cursor = saved_cursor -> break # Not an attribute - - # Parse attribute -> attr_result = parse_attribute(saved_cursor, context) -> if attr_result is None: -> cursor = saved_cursor -> break # Invalid attribute syntax - -> attr_parse = attr_result -> attributes.append(attr_parse.value) -> cursor = attr_parse.cursor - -> return ParseResult(attributes, cursor) - - -> def validate_message_content(pattern: Pattern | None, attributes: list[Attribute]) -> bool: -> """Validate message has either pattern or attributes. - -> Per Fluent spec: Message ::= ID "=" ((Pattern Attribute*) | (Attribute+)) - -> Args: -> pattern: Message value pattern (may be None) -> attributes: List of message attributes - -> Returns: -> True if validation passed, False if validation failed -> """ -> has_pattern = pattern is not None and len(pattern.elements) > 0 -> has_attributes = len(attributes) > 0 - - # Message must have either value or attributes -> return has_pattern or has_attributes - - -> def parse_message( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[Message] | None: -> """Parse message with full support for select expressions. - -> Examples: -> "hello = World" -> "welcome = Hello, {$name}!" -> "count = {$num -> [one] item *[other] items}" - -> Args: -> cursor: Current position in source -> context: Parse context for depth tracking - -> Returns: -> Success(ParseResult(Message, new_cursor)) on success -> Failure(ParseError(...)) on parse error -> """ -> start_pos = cursor.pos - - # Parse: Identifier "=" -> id_result = parse_message_header(cursor) -> if id_result is None: -> return id_result -> id_parse = id_result -> cursor = id_parse.cursor - - # Parse pattern (message value) -> cursor, initial_indent = skip_multiline_pattern_start(cursor) -> pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) -> if pattern_result is None: -> return pattern_result -> pattern_parse = pattern_result -> cursor = pattern_parse.cursor - - # Parse: Attribute* (zero or more attributes) -> attributes_result = parse_message_attributes(cursor, context) -> if attributes_result is None: -> return attributes_result -> attributes_parse = attributes_result -> cursor = attributes_parse.cursor - - # Validate: Per spec, Message must have Pattern OR Attribute -> is_valid = validate_message_content(pattern_parse.value, attributes_parse.value) -> if not is_valid: -> return None # Validation failed - - # Construct Message node -> message = Message( -> id=Identifier(id_parse.value), -> value=pattern_parse.value, -> attributes=tuple(attributes_parse.value), -> span=Span(start=start_pos, end=cursor.pos), -> ) - -> return ParseResult(message, cursor) - - -> def parse_attribute( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[Attribute] | None: -> """Parse message attribute (.attribute = pattern). - -> FTL syntax: -> button = Save -> .tooltip = Click to save changes -> .aria-label = Save button - -> Attributes are indented and start with a dot followed by an identifier. - -> Args: -> cursor: Current position in source (should be at start of line with '.') -> context: Parse context for depth tracking - -> Returns: -> Success(ParseResult(Attribute, new_cursor)) on success -> Failure(ParseError(...)) on parse error -> """ - # Skip leading whitespace (ONLY spaces per spec, NOT tabs or newlines) - # Per spec: Attribute ::= line_end blank? "." ... - # blank can contain spaces but NOT tabs -> cursor = skip_blank_inline(cursor) - - # Check for '.' at start -> if cursor.is_eof or cursor.current != ".": -> return None # "Expected '.' at start of attribute", cursor, expected=["."] - -> cursor = cursor.advance() # Skip '.' - - # Parse identifier after '.' -> id_result = parse_identifier(cursor) -> if id_result is None: -> return id_result - -> id_parse = id_result - # Per spec: Attribute ::= line_end blank? "." Identifier blank_inline? "=" ... -> cursor = skip_blank_inline(id_parse.cursor) - - # Expect '=' -> if cursor.is_eof or cursor.current != "=": -> return None # "Expected '=' after attribute identifier", cursor, expected=["="] - -> cursor = cursor.advance() # Skip '=' - # After '=', handle multiline pattern start (same as messages) - # Per spec: Attribute ::= ... blank_inline? "=" blank_inline? Pattern - # Pattern can start on same line or next line with indentation -> cursor, initial_indent = skip_multiline_pattern_start(cursor) - - # Parse pattern -> pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) -> if pattern_result is None: -> return pattern_result - -> pattern_parse = pattern_result - -> attribute = Attribute(id=Identifier(id_parse.value), value=pattern_parse.value) - -> return ParseResult(attribute, pattern_parse.cursor) - - -> def parse_term( -> cursor: Cursor, -> context: ParseContext | None = None, -> ) -> ParseResult[Term] | None: -> """Parse term definition (-term-id = pattern). - -> FTL syntax: -> -brand = Firefox -> -brand-version = 3.0 -> .tooltip = Current version - -> Terms are private definitions prefixed with '-' and can have attributes. - -> Args: -> cursor: Current position in source (should be at '-') -> context: Parse context for depth tracking - -> Returns: -> Success(ParseResult(Term, new_cursor)) on success -> Failure(ParseError(...)) on parse error -> """ - # Capture start position for span -> start_pos = cursor.pos - - # Expect '-' prefix -> if cursor.is_eof or cursor.current != "-": -> return None # "Expected '-' at start of term", cursor, expected=["-"] - -> cursor = cursor.advance() # Skip '-' - - # Parse identifier -> id_result = parse_identifier(cursor) -> if id_result is None: -> return id_result - -> id_parse = id_result - # Per spec: Term ::= "-" Identifier blank_inline? "=" ... -> cursor = skip_blank_inline(id_parse.cursor) - - # Expect '=' -> if cursor.is_eof or cursor.current != "=": -> return None # "Expected '=' after term ID", cursor, expected=["="] - -> cursor = cursor.advance() # Skip '=' - - # After '=', handle multiline pattern start (same as messages) - # Use skip_multiline_pattern_start to properly track initial indent for common_indent -> cursor, initial_indent = skip_multiline_pattern_start(cursor) - - # Parse pattern with initial common indent for proper multiline handling -> pattern_result = parse_pattern(cursor, context, initial_common_indent=initial_indent) -> if pattern_result is None: -> return pattern_result - -> pattern_parse = pattern_result -> cursor = pattern_parse.cursor - - # Validate term has non-empty value (FTL spec requirement) -> if not pattern_parse.value.elements: -> return None # f'Expected term "-{id_parse.value}" to have a value' - - # Parse attributes using shared helper -> attributes_result = parse_message_attributes(cursor, context) -> if attributes_result is None: -> return None # Should not happen, but handle defensively -> attributes = attributes_result.value -> cursor = attributes_result.cursor - - # Create span from start to current position -> span = Span(start=start_pos, end=cursor.pos) - -> term = Term( -> id=Identifier(id_parse.value), -> value=pattern_parse.value, -> attributes=tuple(attributes), -> span=span, -> ) - -> return ParseResult(term, cursor) - - -> def parse_comment(cursor: Cursor) -> ParseResult[Comment] | None: -> """Parse comment line per Fluent spec. - -> Per spec, comments come in three types: -> - # (single-line comment) -> - ## (group comment) -> - ### (resource comment) - -> Adjacent comment lines of the same type are joined during AST construction. - -> EBNF: -> CommentLine ::= ("###" | "##" | "#") ("\u0020" comment_char*)? line_end - -> Args: -> cursor: Current parse position (must be at '#') - -> Returns: -> Success with Comment node or Failure with ParseError -> """ -> start_pos = cursor.pos - - # Determine comment type by counting '#' characters -> hash_count = 0 -> temp_cursor = cursor -> while not temp_cursor.is_eof and temp_cursor.current == "#": -> hash_count += 1 -> temp_cursor = temp_cursor.advance() - - # Validate comment type (1, 2, or 3 hashes) -> if hash_count > 3: -> return None # f"Invalid comment: expected 1-3 '#' characters, found {hash_count}" - - # Map hash count to comment type -> comment_type = { -> 1: CommentType.COMMENT, -> 2: CommentType.GROUP, -> 3: CommentType.RESOURCE, -> }.get(hash_count, CommentType.COMMENT) - - # Advance cursor past the '#' characters -> cursor = temp_cursor - - # Per spec: optional space after '#' -> if not cursor.is_eof and cursor.current == " ": -> cursor = cursor.advance() - - # Collect comment content (everything until line end) -> content_start = cursor.pos -> cursor = cursor.skip_to_line_end() - - # Extract comment text -> content = cursor.source[content_start : cursor.pos] - - # Advance past line ending (handles LF, CRLF, CR) -> cursor = cursor.skip_line_end() - - # Create Comment node with span -> comment_node = Comment( -> content=content, -> type=comment_type, -> span=Span(start=start_pos, end=cursor.pos), -> ) - -> return ParseResult(comment_node, cursor) diff --git a/src/ftllexengine/syntax/position.py b/src/ftllexengine/syntax/position.py index 5c8854ac..b5db0cfb 100644 --- a/src/ftllexengine/syntax/position.py +++ b/src/ftllexengine/syntax/position.py @@ -34,12 +34,12 @@ def line_offset(source: str, pos: int) -> int: 0-based line number Example: - >>> source = "line1\\nline2\\nline3" - >>> line_offset(source, 0) # Start of file + >>> source = "line1\\nline2\\nline3" # doctest: +SKIP + >>> line_offset(source, 0) # Start of file # doctest: +SKIP 0 - >>> line_offset(source, 6) # Start of line2 + >>> line_offset(source, 6) # Start of line2 # doctest: +SKIP 1 - >>> line_offset(source, 12) # Start of line3 + >>> line_offset(source, 12) # Start of line3 # doctest: +SKIP 2 Note: @@ -69,14 +69,14 @@ def column_offset(source: str, pos: int) -> int: 0-based column number (characters from line start) Example: - >>> source = "hello\\nworld" - >>> column_offset(source, 0) # 'h' in "hello" + >>> source = "hello\\nworld" # doctest: +SKIP + >>> column_offset(source, 0) # 'h' in "hello" # doctest: +SKIP 0 - >>> column_offset(source, 2) # 'l' in "hello" + >>> column_offset(source, 2) # 'l' in "hello" # doctest: +SKIP 2 - >>> column_offset(source, 6) # 'w' in "world" + >>> column_offset(source, 6) # 'w' in "world" # doctest: +SKIP 0 - >>> column_offset(source, 10) # 'd' in "world" + >>> column_offset(source, 10) # 'd' in "world" # doctest: +SKIP 4 Note: @@ -112,10 +112,10 @@ def format_position(source: str, pos: int, *, zero_based: bool = True) -> str: Position string like "line:col" (e.g., "2:5" or "3:6") Example: - >>> source = "hello\\nworld\\ntest" - >>> format_position(source, 6, zero_based=True) + >>> source = "hello\\nworld\\ntest" # doctest: +SKIP + >>> format_position(source, 6, zero_based=True) # doctest: +SKIP '1:0' - >>> format_position(source, 6, zero_based=False) + >>> format_position(source, 6, zero_based=False) # doctest: +SKIP '2:1' """ line = line_offset(source, pos) @@ -142,10 +142,10 @@ def get_line_content(source: str, line_number: int, *, zero_based: bool = True) Content of the line (without trailing newline) Example: - >>> source = "hello\\nworld\\ntest" - >>> get_line_content(source, 0, zero_based=True) + >>> source = "hello\\nworld\\ntest" # doctest: +SKIP + >>> get_line_content(source, 0, zero_based=True) # doctest: +SKIP 'hello' - >>> get_line_content(source, 2, zero_based=False) + >>> get_line_content(source, 2, zero_based=False) # doctest: +SKIP 'world' """ if not zero_based: @@ -180,8 +180,8 @@ def get_error_context(source: str, pos: int, context_lines: int = 2, marker: str Formatted error context string Example: - >>> source = "line1\\nline2\\nerror here\\nline4\\nline5" - >>> print(get_error_context(source, 12, context_lines=1)) + >>> source = "line1\\nline2\\nerror here\\nline4\\nline5" # doctest: +SKIP + >>> print(get_error_context(source, 12, context_lines=1)) # doctest: +SKIP line2 error here ^ diff --git a/src/ftllexengine/syntax/reference_extraction.py b/src/ftllexengine/syntax/reference_extraction.py new file mode 100644 index 00000000..0d1c27d2 --- /dev/null +++ b/src/ftllexengine/syntax/reference_extraction.py @@ -0,0 +1,84 @@ +"""AST-only reference extraction helpers. + +These helpers operate purely on syntax nodes and therefore live in the syntax +layer, where validation and higher-level introspection code can both depend on +them without introducing upward imports. +""" + +from __future__ import annotations + +from ftllexengine.constants import MAX_DEPTH + +from .ast import Message, MessageReference, Term, TermReference +from .visitor import ASTVisitor + +__all__ = [ + "ReferenceExtractor", + "extract_references", + "extract_references_by_attribute", +] + + +class ReferenceExtractor(ASTVisitor[MessageReference | TermReference]): + """Extract message and term references from AST for dependency analysis.""" + + __slots__ = ("message_refs", "term_refs") + + def __init__(self, *, max_depth: int = MAX_DEPTH) -> None: + super().__init__(max_depth=max_depth) + self.message_refs: set[str] = set() + self.term_refs: set[str] = set() + + def visit_MessageReference( # noqa: N802 - AST visitor dispatch contract + self, node: MessageReference + ) -> MessageReference: + """Collect message reference ID with optional attribute qualification.""" + if node.attribute is not None: + self.message_refs.add(f"{node.id.name}.{node.attribute.name}") + else: + self.message_refs.add(node.id.name) + return node + + def visit_TermReference( # noqa: N802 - AST visitor dispatch contract + self, node: TermReference + ) -> TermReference: + """Collect term reference ID and traverse nested call arguments.""" + if node.attribute is not None: + self.term_refs.add(f"{node.id.name}.{node.attribute.name}") + else: + self.term_refs.add(node.id.name) + with self._depth_guard: + self.generic_visit(node) + return node + + +def extract_references(entry: Message | Term) -> tuple[frozenset[str], frozenset[str]]: + """Extract message and term references from an AST entry.""" + extractor = ReferenceExtractor() + + if entry.value is not None: + extractor.visit(entry.value) + + for attr in entry.attributes: + extractor.visit(attr.value) + + return frozenset(extractor.message_refs), frozenset(extractor.term_refs) + + +def extract_references_by_attribute( + entry: Message | Term, +) -> dict[str | None, tuple[frozenset[str], frozenset[str]]]: + """Extract references per source attribute for attribute-granular analysis.""" + result: dict[str | None, tuple[frozenset[str], frozenset[str]]] = {} + + if entry.value is not None: + extractor = ReferenceExtractor() + extractor.visit(entry.value) + result[None] = (frozenset(extractor.message_refs), frozenset(extractor.term_refs)) + + for attr in entry.attributes: + extractor = ReferenceExtractor() + extractor.visit(attr.value) + result[attr.id.name] = (frozenset(extractor.message_refs), frozenset(extractor.term_refs)) + + return result diff --git a/src/ftllexengine/syntax/serializer.py b/src/ftllexengine/syntax/serializer.py index f4ace5ab..c31b66f1 100644 --- a/src/ftllexengine/syntax/serializer.py +++ b/src/ftllexengine/syntax/serializer.py @@ -15,13 +15,11 @@ from __future__ import annotations -from enum import Enum, auto from typing import assert_never from ftllexengine.constants import MAX_DEPTH -from ftllexengine.core.depth_guard import DepthGuard -from ftllexengine.core.identifier_validation import is_valid_identifier -from ftllexengine.diagnostics import ErrorCategory, FrozenFluentError +from ftllexengine.core.depth_guard import DepthGuard, DepthLimitExceededError +from ftllexengine.diagnostics import FrozenFluentError from ftllexengine.enums import CommentType from .ast import ( @@ -46,6 +44,23 @@ TextElement, VariableReference, ) +from .serializer_lines import ( + _ATTR_INDENT, + _CHAR_PLACEABLE, + _CONT_INDENT, + _VARIANT_INDENT, + _classify_line, + _escape_text, + _LineKind, +) +from .serializer_validation import ( + SerializationDepthError, + SerializationValidationError, + _validate_pattern, +) +from .serializer_validation import ( + validate_resource as _validate_resource_impl, +) from .visitor import ASTVisitor __all__ = [ @@ -55,354 +70,13 @@ ] -class SerializationValidationError(ValueError): - """Raised when AST validation fails during serialization. - - This error indicates the AST structure would produce invalid FTL syntax. - Common causes: - - Duplicate named argument names in function or term calls - - Named argument values that are not StringLiteral or NumberLiteral - - Invalid identifiers in messages, terms, or attributes - """ - - -class SerializationDepthError(ValueError): - """Raised when AST nesting exceeds maximum serialization depth. - - This error indicates the AST is too deeply nested for safe serialization. - Prevents stack overflow from: - - Adversarially constructed ASTs with excessive Placeable nesting - - Malformed programmatic AST construction - - The default limit is 100, matching the parser's maximum nesting depth. - """ - - -def _validate_identifier(identifier: Identifier, context: str) -> None: - """Validate identifier follows FTL grammar rules. - - Uses unified validation module to ensure consistency between parser - and serializer. Validates both syntax and length constraints. - - Args: - identifier: Identifier to validate - context: Context string for error messages - - Raises: - SerializationValidationError: If identifier name is invalid - """ - if not is_valid_identifier(identifier.name): - msg = ( - f"Invalid identifier '{identifier.name}' in {context}. " - f"Identifiers must match [a-zA-Z][a-zA-Z0-9_-]* and be ≤256 characters" - ) - raise SerializationValidationError(msg) - - -def _validate_pattern(pattern: Pattern, context: str, depth_guard: DepthGuard) -> None: - """Validate all expressions within a Pattern. - - Args: - pattern: Pattern AST to validate - context: Context string for error messages - depth_guard: Depth guard for recursion protection - """ - for element in pattern.elements: - if isinstance(element, Placeable): - with depth_guard: - _validate_expression(element.expression, context, depth_guard) - - -def _assert_named_arg_value_is_literal( - value: object, arg_name: str, context: str -) -> None: - """Defense-in-depth check: named argument value must be StringLiteral or NumberLiteral. - - NamedArgument.value is typed FTLLiteral (StringLiteral | NumberLiteral), which - enforces the spec constraint at the type level. However, Python type annotations - are not enforced at runtime: a frozen dataclass field can be bypassed via - object.__setattr__, deserialization, or direct AST construction. - - This function accepts the value as ``object`` (not ``FTLLiteral``) so that the - isinstance check is not redundant from mypy's perspective — mypy cannot see - through the ``object`` parameter to know the value will always be FTLLiteral. - The check is a permanent last-line defense before invalid FTL is emitted. - - Args: - value: The named argument value to check. - arg_name: The argument name (for error messages). - context: The call context (for error messages). - - Raises: - SerializationValidationError: If value is not a literal. - """ - if not isinstance(value, (StringLiteral, NumberLiteral)): - value_type = type(value).__name__ - msg = ( - f"Named argument '{arg_name}' in {context} has invalid value type " - f"'{value_type}'. Named argument values must be StringLiteral or " - f"NumberLiteral per FTL specification " - f'(NamedArgument ::= Identifier ":" (StringLiteral | NumberLiteral)).' - ) - raise SerializationValidationError(msg) - - -def _validate_call_arguments( - args: CallArguments, context: str, depth_guard: DepthGuard -) -> None: - """Validate CallArguments per FTL specification. - - Per FTL EBNF: - NamedArgument ::= Identifier blank? ":" blank? (StringLiteral | NumberLiteral) - - Enforces: - 1. Positional argument expressions are valid - 2. Named argument names must be unique (no duplicates) - 3. Named argument identifiers are valid - 4. Named argument values are StringLiteral or NumberLiteral (defense-in-depth: - type annotation is FTLLiteral, but runtime bypass is possible via - object.__setattr__ on frozen dataclasses) - - The parser enforces these constraints during parsing, but programmatically - constructed ASTs may violate the uniqueness, identifier, and literal-value constraints. - This validation catches such errors before serialization produces invalid FTL. - - Args: - args: CallArguments to validate - context: Context string for error messages - depth_guard: Depth guard for recursion protection - - Raises: - SerializationValidationError: If constraints are violated - """ - # Validate positional arguments - for pos_arg in args.positional: - with depth_guard: - _validate_expression(pos_arg, context, depth_guard) - - # Validate named arguments with duplicate detection - seen_names: set[str] = set() - for named_arg in args.named: - arg_name = named_arg.name.name - - # Check for duplicate named argument names - if arg_name in seen_names: - msg = ( - f"Duplicate named argument '{arg_name}' in {context}. " - "Named argument names must be unique per FTL specification." - ) - raise SerializationValidationError(msg) - seen_names.add(arg_name) - - # Validate the identifier - _validate_identifier(named_arg.name, f"{context}, named argument") - - # Defense-in-depth: verify value is a literal (FTLLiteral type annotation is - # bypassable at runtime; this check is the serializer's last line of defense). - _assert_named_arg_value_is_literal(named_arg.value, arg_name, context) - - -def _validate_expression( # noqa: PLR0912 - validation dispatch over closed Expression union type - expr: Expression, context: str, depth_guard: DepthGuard -) -> None: - """Validate an Expression recursively. - - Args: - expr: Expression AST to validate - context: Context string for error messages - depth_guard: Depth guard for recursion protection - """ - match expr: - case SelectExpression(): - # Defense-in-depth: __post_init__ validates at construction time, but - # programmatically built ASTs (e.g., in tests or external tooling) can - # bypass __post_init__ via object.__new__. Verify the invariant here as - # a last guard before emitting invalid FTL. - n_defaults = sum(1 for v in expr.variants if v.default) - if n_defaults == 0: - msg = ( - f"SelectExpression in {context} has no default variant. " - "Exactly one variant must be marked as default." - ) - raise SerializationValidationError(msg) - if n_defaults > 1: - msg = ( - f"SelectExpression in {context} has {n_defaults} default variants. " - "Exactly one variant must be marked as default." - ) - raise SerializationValidationError(msg) - # Validate selector expression and variant keys - with depth_guard: - _validate_expression(expr.selector, context, depth_guard) - # Validate variant keys (if Identifier) and patterns - for variant in expr.variants: - if isinstance(variant.key, Identifier): - _validate_identifier(variant.key, f"{context}, variant key") - with depth_guard: - _validate_pattern(variant.value, context, depth_guard) - case Placeable(): - with depth_guard: - _validate_expression(expr.expression, context, depth_guard) - case VariableReference(): - _validate_identifier(expr.id, f"{context}, variable reference") - case MessageReference(): - _validate_identifier(expr.id, f"{context}, message reference") - if expr.attribute: - _validate_identifier(expr.attribute, f"{context}, message attribute") - case TermReference(): - _validate_identifier(expr.id, f"{context}, term reference") - if expr.attribute: - _validate_identifier(expr.attribute, f"{context}, term attribute") - if expr.arguments: - _validate_call_arguments(expr.arguments, context, depth_guard) - case FunctionReference(): - _validate_identifier(expr.id, f"{context}, function reference") - _validate_call_arguments(expr.arguments, context, depth_guard) - case _: - pass # Other expressions (NumberLiteral, StringLiteral) don't need validation - - def _validate_resource(resource: Resource, max_depth: int = MAX_DEPTH) -> None: - """Validate a Resource AST for serialization. - - Checks identifiers, call arguments, and nested expression structure. - Enforces depth limits to prevent stack overflow. - - Args: - resource: Resource AST to validate - max_depth: Maximum AST nesting depth (default: MAX_DEPTH) - - Raises: - SerializationValidationError: If validation fails - SerializationDepthError: If AST nesting exceeds max_depth - """ - depth_guard = DepthGuard(max_depth=max_depth) - - try: - for entry in resource.entries: - match entry: - case Message(): - _validate_identifier(entry.id, "message ID") - context = f"message '{entry.id.name}'" - if entry.value: - _validate_pattern(entry.value, context, depth_guard) - for attr in entry.attributes: - _validate_identifier(attr.id, f"{context}, attribute ID") - _validate_pattern(attr.value, f"{context}.{attr.id.name}", depth_guard) - case Term(): - _validate_identifier(entry.id, "term ID") - context = f"term '-{entry.id.name}'" - _validate_pattern(entry.value, context, depth_guard) - for attr in entry.attributes: - _validate_identifier(attr.id, f"{context}, attribute ID") - _validate_pattern(attr.value, f"{context}.{attr.id.name}", depth_guard) - case _: - pass # Comments and Junk don't need validation - except FrozenFluentError as e: - if e.category == ErrorCategory.RESOLUTION: - # Depth limit exceeded - wrap in SerializationDepthError - msg = f"Validation depth limit exceeded (max: {max_depth}): {e}" - raise SerializationDepthError(msg) from e - raise - -# FTL indentation constants per Fluent spec. -# Standard continuation indent: 4 spaces. -_CONT_INDENT: str = " " - -# Attributes use 4 spaces for standard indentation. -_ATTR_INDENT: str = "\n " - -# Select expression variants use 3 spaces to align with the `*[` marker. -# This produces: "\n *[key] value" where the `[` aligns with attribute `.`. -_VARIANT_INDENT: str = "\n " - -# Characters that are syntactically significant at the start of a continuation -# line in FTL: '[' (variant key), '*' (default variant), '.' (attribute). -# The FTL parser strips leading whitespace and checks the first non-whitespace -# character against these markers. Content containing these characters at -# structurally ambiguous positions must be wrapped in StringLiteral placeables. -_LINE_START_SYNTAX_CHARS: frozenset[str] = frozenset(".[*") - -# Precomputed StringLiteral placeable forms for special characters. -# Used by both continuation line dispatch and brace escaping. -_CHAR_PLACEABLE: dict[str, str] = { - "{": '{ "{" }', - "}": '{ "}" }', - "[": '{ "[" }', - "*": '{ "*" }', - ".": '{ "." }', -} - - -class _LineKind(Enum): - """Classification of a continuation line's content for serialization. - - The FTL parser interprets continuation lines structurally: leading - whitespace is syntactic indent, blank lines are stripped, and - characters '.', '*', '[' as the first non-whitespace trigger - attribute/variant parsing. Each kind maps to one unambiguous - emission strategy. - """ - - EMPTY = auto() - WHITESPACE_ONLY = auto() - SYNTAX_LEADING = auto() - NORMAL = auto() - - -def _classify_line(line: str) -> tuple[_LineKind, int]: - """Classify a continuation line for serialization dispatch. - - Returns the line kind and, for SYNTAX_LEADING, the number of - leading whitespace characters before the syntax character. - For all other kinds the second element is 0. - - Pure function with no side effects. - - Args: - line: Text content of a single continuation line (no newlines). - - Returns: - (kind, ws_prefix_len) tuple. - """ - if not line: - return (_LineKind.EMPTY, 0) - - # Scan to first non-space character. - ws_len = 0 - length = len(line) - while ws_len < length and line[ws_len] == " ": - ws_len += 1 - - if ws_len == length: - return (_LineKind.WHITESPACE_ONLY, 0) - - if line[ws_len] in _LINE_START_SYNTAX_CHARS: - return (_LineKind.SYNTAX_LEADING, ws_len) - - return (_LineKind.NORMAL, 0) - - -def _escape_text(text: str, output: list[str]) -> None: - """Escape brace characters in text content. - - Wraps { and } as StringLiteral placeables per Fluent spec. - Character-level escaping only; line-level concerns (whitespace - ambiguity, syntax chars) are handled by _emit_classified_line. - """ - pos = 0 - length = len(text) - while pos < length: - ch = text[pos] - if ch in ("{", "}"): - output.append(_CHAR_PLACEABLE[ch]) - pos += 1 - continue - run_start = pos - pos += 1 - while pos < length and text[pos] not in ("{", "}"): - pos += 1 - output.append(text[run_start:pos]) + """Validate a resource using the serializer module's patchable helpers.""" + _validate_resource_impl( + resource, + max_depth=max_depth, + validate_pattern=_validate_pattern, + ) class FluentSerializer(ASTVisitor): @@ -412,18 +86,18 @@ class FluentSerializer(ASTVisitor): All serialization state is local to the serialize() call. Usage: - >>> from ftllexengine.syntax import parse, serialize - >>> ast = parse("hello = Hello, world!") - >>> ftl = serialize(ast) - >>> print(ftl) + >>> from ftllexengine.syntax import parse, serialize # doctest: +SKIP + >>> ast = parse("hello = Hello, world!") # doctest: +SKIP + >>> ftl = serialize(ast) # doctest: +SKIP + >>> print(ftl) # doctest: +SKIP hello = Hello, world! Advanced usage (direct class instantiation): - >>> from ftllexengine.syntax import parse - >>> from ftllexengine.syntax.serializer import FluentSerializer - >>> ast = parse("hello = Hello, world!") - >>> serializer = FluentSerializer() - >>> ftl = serializer.serialize(ast) + >>> from ftllexengine.syntax import parse # doctest: +SKIP + >>> from ftllexengine.syntax.serializer import FluentSerializer # doctest: +SKIP + >>> ast = parse("hello = Hello, world!") # doctest: +SKIP + >>> serializer = FluentSerializer() # doctest: +SKIP + >>> ftl = serializer.serialize(ast) # doctest: +SKIP """ def serialize( @@ -461,11 +135,10 @@ def serialize( try: self._serialize_resource(resource, output, depth_guard) - except FrozenFluentError as e: - if e.category == ErrorCategory.RESOLUTION: - # Depth limit exceeded - wrap in SerializationDepthError - msg = f"AST nesting exceeds maximum depth ({max_depth})" - raise SerializationDepthError(msg) from e + except DepthLimitExceededError as exc: + msg = f"AST nesting exceeds maximum depth ({max_depth})" + raise SerializationDepthError(msg) from exc + except FrozenFluentError: raise return "".join(output) @@ -961,10 +634,10 @@ def serialize( SerializationDepthError: If AST nesting exceeds max_depth Example: - >>> from ftllexengine.syntax import parse, serialize - >>> ast = parse("hello = Hello, world!") - >>> ftl = serialize(ast) - >>> assert ftl == "hello = Hello, world!\\n" + >>> from ftllexengine.syntax import parse, serialize # doctest: +SKIP + >>> ast = parse("hello = Hello, world!") # doctest: +SKIP + >>> ftl = serialize(ast) # doctest: +SKIP + >>> assert ftl == "hello = Hello, world!\\n" # doctest: +SKIP """ serializer = FluentSerializer() return serializer.serialize(resource, validate=validate, max_depth=max_depth) diff --git a/src/ftllexengine/syntax/serializer.py,cover b/src/ftllexengine/syntax/serializer.py,cover deleted file mode 100644 index 97035dd2..00000000 --- a/src/ftllexengine/syntax/serializer.py,cover +++ /dev/null @@ -1,784 +0,0 @@ -> """Serialize Fluent AST back to FTL syntax. - -> Converts AST nodes to FTL source code. Useful for: -> - Formatters -> - Code generators -> - Property-based testing (roundtrip: parse → serialize → parse) - -> Security: -> - DepthGuard protects against stack overflow from deeply nested ASTs. -> - Maximum nesting depth defaults to 100 (matching parser limit). -> - Raises SerializationDepthError on overflow (not RecursionError). - -> Python 3.13+. -> """ - -> from __future__ import annotations - -> import re - -> from ftllexengine.constants import MAX_DEPTH -> from ftllexengine.core.depth_guard import DepthGuard -> from ftllexengine.core.identifier_validation import is_valid_identifier -> from ftllexengine.diagnostics import ErrorCategory, FrozenFluentError -> from ftllexengine.enums import CommentType - -> from .ast import ( -> Attribute, -> CallArguments, -> Comment, -> Expression, -> FunctionReference, -> Identifier, -> Junk, -> Message, -> MessageReference, -> NamedArgument, -> NumberLiteral, -> Pattern, -> Placeable, -> Resource, -> SelectExpression, -> StringLiteral, -> Term, -> TermReference, -> TextElement, -> VariableReference, -> ) -> from .validation_helpers import count_default_variants -> from .visitor import ASTVisitor - -> __all__ = [ -> "SerializationDepthError", -> "SerializationValidationError", -> "serialize", -> ] - - -> class SerializationValidationError(ValueError): -> """Raised when AST validation fails during serialization. - -> This error indicates the AST structure would produce invalid FTL syntax. -> Common causes: -> - SelectExpression without exactly one default variant -> - Malformed AST nodes from programmatic construction -> """ - - -> class SerializationDepthError(ValueError): -> """Raised when AST nesting exceeds maximum serialization depth. - -> This error indicates the AST is too deeply nested for safe serialization. -> Prevents stack overflow from: -> - Adversarially constructed ASTs with excessive Placeable nesting -> - Malformed programmatic AST construction - -> The default limit is 100, matching the parser's maximum nesting depth. -> """ - - -> def _validate_identifier(identifier: Identifier, context: str) -> None: -> """Validate identifier follows FTL grammar rules. - -> Uses unified validation module to ensure consistency between parser -> and serializer. Validates both syntax and length constraints. - -> Args: -> identifier: Identifier to validate -> context: Context string for error messages - -> Raises: -> SerializationValidationError: If identifier name is invalid -> """ -> if not is_valid_identifier(identifier.name): -> msg = ( -> f"Invalid identifier '{identifier.name}' in {context}. " -> f"Identifiers must match [a-zA-Z][a-zA-Z0-9_-]* and be ≤256 characters" -> ) -> raise SerializationValidationError(msg) - - -> def _validate_select_expression(expr: SelectExpression, context: str) -> None: -> """Validate SelectExpression has exactly one default variant. - -> Per FTL spec, every SelectExpression must have exactly one variant -> marked as default with the * prefix. - -> Args: -> expr: SelectExpression to validate -> context: Description of location for error message - -> Raises: -> SerializationValidationError: If validation fails -> """ -> default_count = count_default_variants(expr) - -> if default_count == 0: -> msg = f"SelectExpression in {context} has no default variant (requires exactly one *[key])" -> raise SerializationValidationError(msg) - -> if default_count > 1: -> msg = ( -> f"SelectExpression in {context} has {default_count} default variants " -> "(requires exactly one)" -> ) -> raise SerializationValidationError(msg) - - -> def _validate_pattern(pattern: Pattern, context: str, depth_guard: DepthGuard) -> None: -> """Validate all expressions within a Pattern. - -> Args: -> pattern: Pattern AST to validate -> context: Context string for error messages -> depth_guard: Depth guard for recursion protection -> """ -> for element in pattern.elements: -> if isinstance(element, Placeable): -> with depth_guard: -> _validate_expression(element.expression, context, depth_guard) - - -> def _validate_call_arguments( -> args: CallArguments, context: str, depth_guard: DepthGuard -> ) -> None: -> """Validate CallArguments per FTL specification. - -> Per FTL EBNF: -> NamedArgument ::= Identifier blank? ":" blank? (StringLiteral | NumberLiteral) - -> Enforces: -> 1. Named argument names must be unique (no duplicates) -> 2. Named argument values must be StringLiteral or NumberLiteral - -> The parser enforces these constraints during parsing, but programmatically -> constructed ASTs may violate them. This validation catches such errors -> before serialization produces invalid FTL. - -> Args: -> args: CallArguments to validate -> context: Context string for error messages -> depth_guard: Depth guard for recursion protection - -> Raises: -> SerializationValidationError: If constraints are violated -> """ - # Validate positional arguments -> for pos_arg in args.positional: -> with depth_guard: -> _validate_expression(pos_arg, context, depth_guard) - - # Validate named arguments with duplicate detection and type enforcement -> seen_names: set[str] = set() -> for named_arg in args.named: -> arg_name = named_arg.name.name - - # Check for duplicate named argument names -> if arg_name in seen_names: -> msg = ( -> f"Duplicate named argument '{arg_name}' in {context}. " -> "Named argument names must be unique per FTL specification." -> ) -> raise SerializationValidationError(msg) -> seen_names.add(arg_name) - - # Validate the identifier -> _validate_identifier(named_arg.name, f"{context}, named argument") - - # Per FTL spec, named argument values must be StringLiteral or NumberLiteral -> if not isinstance(named_arg.value, (StringLiteral, NumberLiteral)): -> value_type = type(named_arg.value).__name__ -> msg = ( -> f"Named argument '{arg_name}' in {context} has invalid value type " -> f"'{value_type}'. Per FTL specification, named argument values must be " -> "StringLiteral or NumberLiteral, not arbitrary expressions." -> ) -> raise SerializationValidationError(msg) - - # No need to recursively validate StringLiteral/NumberLiteral (they have no sub-expressions) - - -> def _validate_expression(expr: Expression, context: str, depth_guard: DepthGuard) -> None: # noqa: PLR0912 -> """Validate an Expression recursively. - -> Args: -> expr: Expression AST to validate -> context: Context string for error messages -> depth_guard: Depth guard for recursion protection -> """ -> match expr: -> case SelectExpression(): -> _validate_select_expression(expr, context) - # Validate selector expression and variant keys -> with depth_guard: -> _validate_expression(expr.selector, context, depth_guard) - # Validate variant keys (if Identifier) and patterns -> for variant in expr.variants: -> if isinstance(variant.key, Identifier): -> _validate_identifier(variant.key, f"{context}, variant key") -> with depth_guard: -> _validate_pattern(variant.value, context, depth_guard) -> case Placeable(): -> with depth_guard: -> _validate_expression(expr.expression, context, depth_guard) -> case VariableReference(): -> _validate_identifier(expr.id, f"{context}, variable reference") -> case MessageReference(): -> _validate_identifier(expr.id, f"{context}, message reference") -> if expr.attribute: -> _validate_identifier(expr.attribute, f"{context}, message attribute") -> case TermReference(): -> _validate_identifier(expr.id, f"{context}, term reference") -> if expr.attribute: -> _validate_identifier(expr.attribute, f"{context}, term attribute") -> if expr.arguments: -> _validate_call_arguments(expr.arguments, context, depth_guard) -> case FunctionReference(): -> _validate_identifier(expr.id, f"{context}, function reference") -> if expr.arguments: -> _validate_call_arguments(expr.arguments, context, depth_guard) -> case _: -> pass # Other expressions (NumberLiteral, StringLiteral) don't need validation - - -> def _validate_resource(resource: Resource, max_depth: int = MAX_DEPTH) -> None: -> """Validate a Resource AST for serialization. - -> Checks all SelectExpressions have exactly one default variant. -> Enforces depth limits to prevent stack overflow. - -> Args: -> resource: Resource AST to validate -> max_depth: Maximum AST nesting depth (default: MAX_DEPTH) - -> Raises: -> SerializationValidationError: If validation fails -> SerializationDepthError: If AST nesting exceeds max_depth -> """ -> depth_guard = DepthGuard(max_depth=max_depth) - -> try: -> for entry in resource.entries: -> match entry: -> case Message(): -> _validate_identifier(entry.id, "message ID") -> context = f"message '{entry.id.name}'" -> if entry.value: -> _validate_pattern(entry.value, context, depth_guard) -> for attr in entry.attributes: -> _validate_identifier(attr.id, f"{context}, attribute ID") -> _validate_pattern(attr.value, f"{context}.{attr.id.name}", depth_guard) -> case Term(): -> _validate_identifier(entry.id, "term ID") -> context = f"term '-{entry.id.name}'" -> _validate_pattern(entry.value, context, depth_guard) -> for attr in entry.attributes: -> _validate_identifier(attr.id, f"{context}, attribute ID") -> _validate_pattern(attr.value, f"{context}.{attr.id.name}", depth_guard) -> case _: -> pass # Comments and Junk don't need validation -> except FrozenFluentError as e: -! if e.category == ErrorCategory.RESOLUTION: - # Depth limit exceeded - wrap in SerializationDepthError -! msg = f"Validation depth limit exceeded (max: {max_depth}): {e}" -! raise SerializationDepthError(msg) from e -! raise - - # FTL indentation constants per Fluent spec. - # Standard continuation indent: 4 spaces. -> _CONT_INDENT: str = " " - - # Attributes use 4 spaces for standard indentation. -> _ATTR_INDENT: str = "\n " - - # Select expression variants use 3 spaces to align with the `*[` marker. - # This produces: "\n *[key] value" where the `[` aligns with attribute `.`. -> _VARIANT_INDENT: str = "\n " - - -> class FluentSerializer(ASTVisitor): -> """Converts AST back to FTL source string. - -> Thread-safe serializer with no mutable instance state. -> All serialization state is local to the serialize() call. - -> Usage: -> >>> from ftllexengine.syntax import parse, serialize -> >>> ast = parse("hello = Hello, world!") -> >>> ftl = serialize(ast) -> >>> print(ftl) -> hello = Hello, world! - -> Advanced usage (direct class instantiation): -> >>> from ftllexengine.syntax import parse -> >>> from ftllexengine.syntax.serializer import FluentSerializer -> >>> ast = parse("hello = Hello, world!") -> >>> serializer = FluentSerializer() -> >>> ftl = serializer.serialize(ast) -> """ - -> def serialize( -> self, -> resource: Resource, -> *, -> validate: bool = True, -> max_depth: int = MAX_DEPTH, -> ) -> str: -> """Serialize Resource to FTL string. - -> Pure function - builds output locally without mutating instance state. -> Thread-safe and reusable. - -> Args: -> resource: Resource AST node -> validate: If True, validate AST before serialization (default: True). -> Checks that SelectExpressions have exactly one default variant. -> Set to False only for trusted ASTs from the parser. -> max_depth: Maximum nesting depth (default: 100). Prevents stack -> overflow from adversarial or malformed ASTs. - -> Returns: -> FTL source code - -> Raises: -> SerializationValidationError: If validate=True and AST is invalid -> SerializationDepthError: If AST nesting exceeds max_depth -> """ -> if validate: -> _validate_resource(resource, max_depth=max_depth) - -> output: list[str] = [] -> depth_guard = DepthGuard(max_depth=max_depth) - -> try: -> self._serialize_resource(resource, output, depth_guard) -> except FrozenFluentError as e: -> if e.category == ErrorCategory.RESOLUTION: - # Depth limit exceeded - wrap in SerializationDepthError -> msg = f"AST nesting exceeds maximum depth ({max_depth})" -> raise SerializationDepthError(msg) from e -! raise - -> return "".join(output) - -> def _serialize_resource( -> self, node: Resource, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize Resource to output list. - -> Handles blank line insertion between entries per Fluent spec: -> - Consecutive standalone comments of the same type require a blank -> line between them to prevent merging during re-parse. -> - Messages and terms get standard single newline separation. -> """ -> prev_entry: Message | Term | Comment | Junk | None = None - -> for entry in node.entries: -> if prev_entry is not None: - # Skip separator if Junk already contains leading whitespace. - # Parser includes preceding whitespace in Junk.content for containment, - # so adding another separator would duplicate newlines on roundtrip. -> if isinstance(entry, Junk) and entry.content and entry.content[0] in "\n ": -> pass # Junk content already has leading whitespace -> else: - # Determine if we need extra blank line to preserve roundtrip. - # Per Fluent spec: - # 1. Adjacent comments of the same type without a blank line - # between them are merged. Insert extra newline to preserve. - # 2. A comment followed by 0-1 blank lines then a message/term - # becomes an attached comment. If the Comment is a standalone - # entry (in entries[], not as entry.comment), we need 2 blank - # lines to prevent attachment during re-parse. -> needs_extra_blank = ( -> isinstance(prev_entry, Comment) -> and isinstance(entry, Comment) -> and prev_entry.type == entry.type -> ) or ( -> isinstance(prev_entry, Comment) -> and isinstance(entry, (Message, Term)) - # Standalone Comment followed by Message/Term needs extra blank - # to prevent the comment from becoming attached on re-parse -> ) -> if needs_extra_blank: -> output.append("\n\n") -> elif isinstance(prev_entry, (Message, Term)) and isinstance( -> entry, (Message, Term) -> ): - # Message/Term already end with \n; no extra separator for compact output -> pass -> else: -> output.append("\n") - -> self._serialize_entry(entry, output, depth_guard) -> prev_entry = entry - -> def _serialize_entry( -> self, -> entry: Message | Term | Comment | Junk, -> output: list[str], -> depth_guard: DepthGuard, -> ) -> None: -> """Serialize a top-level entry.""" -> match entry: -> case Message(): -> self._serialize_message(entry, output, depth_guard) -> case Term(): -> self._serialize_term(entry, output, depth_guard) -> case Comment(): -> self._serialize_comment(entry, output) -> case Junk(): -> self._serialize_junk(entry, output) - -> def _serialize_message( -> self, node: Message, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize Message.""" - # Comment if present (attached comment, no blank line before message) - # Per Fluent spec, attached comments (#) should immediately precede their entry -> if node.comment: -> self._serialize_comment(node.comment, output) - - # Message ID -> output.append(node.id.name) - - # Value -> if node.value: -> output.append(" = ") -> self._serialize_pattern(node.value, output, depth_guard) - - # Attributes -> for attr in node.attributes: -> output.append(_ATTR_INDENT) -> self._serialize_attribute(attr, output, depth_guard) - -> output.append("\n") - -> def _serialize_term( -> self, node: Term, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize Term.""" - # Comment if present (attached comment, no blank line before term) - # Per Fluent spec, attached comments (#) should immediately precede their entry -> if node.comment: -> self._serialize_comment(node.comment, output) - - # Term ID (with leading -) -> output.append(f"-{node.id.name} = ") - - # Value -> self._serialize_pattern(node.value, output, depth_guard) - - # Attributes -> for attr in node.attributes: -> output.append(_ATTR_INDENT) -> self._serialize_attribute(attr, output, depth_guard) - -> output.append("\n") - -> def _serialize_attribute( -> self, node: Attribute, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize Attribute.""" -> output.append(f".{node.id.name} = ") -> self._serialize_pattern(node.value, output, depth_guard) - -> def _serialize_comment(self, node: Comment, output: list[str]) -> None: -> """Serialize Comment. - -> Note: Content should NOT have trailing newlines. The parser produces -> content without trailing newlines (e.g., "Line1\\nLine2", not "Line1\\nLine2\\n"). -> If manually constructed AST nodes include trailing newlines, they will -> produce extra empty comment lines, which is arguably the correct behavior -> for the content provided. -> """ -> if node.type is CommentType.COMMENT: -> prefix = "#" -> elif node.type is CommentType.GROUP: -> prefix = "##" -> else: # CommentType.RESOURCE -> prefix = "###" - -> lines = node.content.split("\n") -> for line in lines: -> if line: -> output.append(f"{prefix} {line}\n") -> else: -> output.append(f"{prefix}\n") - -> def _serialize_junk(self, node: Junk, output: list[str]) -> None: -> """Serialize Junk (keep as-is). - -> Only appends newline if content doesn't already end with one, -> preventing redundant blank lines in parse/serialize cycles. -> """ -> output.append(node.content) -> if not node.content.endswith("\n"): -> output.append("\n") - -> def _pattern_needs_separate_line(self, pattern: Pattern) -> bool: -> """Check if pattern needs separate-line serialization for roundtrip correctness. - -> Returns True if any TextElement starting with whitespace is preceded by -> an element ending with newline. This structure would lose the leading -> whitespace during roundtrip if serialized on the same line, because: - -> 1. Parser sets common_indent from first continuation line's FULL indentation -> 2. Serializer adds 4-space continuation indent after newlines -> 3. Content's leading whitespace becomes part of combined indentation -> 4. On re-parse, common_indent strips ALL indentation including content whitespace - -> By outputting on a separate line, we establish initial_common_indent before -> any content with embedded leading whitespace, so extra whitespace is preserved -> as extra_spaces on subsequent continuation lines. -> """ -> prev_ends_newline = False -> for elem in pattern.elements: -> if isinstance(elem, TextElement): - # Check if this element starts with whitespace and follows a newline -> if prev_ends_newline and elem.value and elem.value[0] == " ": -> return True -> prev_ends_newline = elem.value.endswith("\n") -> else: - # Placeable doesn't end with newline -> prev_ends_newline = False -> return False - -> def _serialize_pattern( -> self, pattern: Pattern, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize Pattern elements. - -> Per Fluent Spec 1.0: Backslash has no escaping power in TextElements. -> Literal braces MUST be expressed as StringLiterals within Placeables: -> - { must be serialized as {"{"} (Placeable containing StringLiteral) -> - } must be serialized as {"}"} (Placeable containing StringLiteral) - -> Multi-line patterns: Newlines in text elements are followed by -> 4-space indentation to create valid continuation lines for roundtrip. - -> Roundtrip Whitespace Preservation: -> If the pattern has TextElements where leading whitespace follows a newline -> in a preceding element, the pattern is output on a separate line. This -> ensures the parser establishes initial_common_indent from a line without -> semantic whitespace, preserving extra whitespace on continuation lines. - -> This ensures output is valid FTL that compliant parsers accept. -> """ - # Check if pattern needs separate-line serialization for roundtrip correctness. - # This handles patterns where leading whitespace follows a newline in separate - # TextElements (e.g., "Line 1\n" followed by " Line 2"). -> if self._pattern_needs_separate_line(pattern): -> output.append("\n" + _CONT_INDENT) - -> for element in pattern.elements: -> if isinstance(element, TextElement): - # Per Fluent spec: no escape sequences in TextElements - # Literal braces must become Placeable(StringLiteral("{"/"}") -> text = element.value - - # Handle newlines: add indentation after each newline for continuation - # Only add indentation if not already present (prevents double-indentation - # in roundtrip scenarios where the parsed AST already contains indented text) -> if "\n" in text: - # Use regex to replace "\n" not followed by 4+ spaces -> text = re.sub(r"\n(?! )", "\n ", text) - -> if "{" in text or "}" in text: - # Split and emit braces as StringLiteral Placeables -> self._serialize_text_with_braces(text, output) -> else: - # No special characters - emit directly -> output.append(text) -> elif isinstance(element, Placeable): -> output.append("{ ") -> with depth_guard: -> self._serialize_expression(element.expression, output, depth_guard) -> output.append(" }") - -> def _serialize_text_with_braces(self, text: str, output: list[str]) -> None: -> """Serialize text containing literal braces per Fluent spec. - -> Converts literal { and } characters to Placeable(StringLiteral) form. -> Example: "a{b}c" becomes: a{"{"}b{"}"}c -> """ - # C-level str.find() outperforms Python-level character iteration. - # Scans for next brace, emits text run, then emits brace placeholder. -> pos = 0 -> length = len(text) - -> while pos < length: - # Find next brace (whichever comes first) -> open_pos = text.find("{", pos) -> close_pos = text.find("}", pos) - - # Determine which brace is next (or neither) -> if open_pos == -1 and close_pos == -1: - # No more braces - emit remaining text -> output.append(text[pos:]) -> break -> if open_pos == -1: -> next_brace_pos = close_pos -> brace_placeholder = '{ "}" }' -> elif close_pos == -1 or open_pos < close_pos: -> next_brace_pos = open_pos -> brace_placeholder = '{ "{" }' -> else: -> next_brace_pos = close_pos -> brace_placeholder = '{ "}" }' - - # Emit text before brace (if any) -> if next_brace_pos > pos: -> output.append(text[pos:next_brace_pos]) - - # Emit brace as StringLiteral Placeable -> output.append(brace_placeholder) -> pos = next_brace_pos + 1 - -> def _serialize_expression( # noqa: PLR0912 # Branches required by Expression union type -> self, expr: Expression, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize Expression nodes using structural pattern matching. - -> Handles all Expression types including nested Placeables (valid per FTL spec). -> """ -> match expr: -> case StringLiteral(): - # Escape special characters per FTL spec - # Uses \uHHHH for ALL control characters (< 0x20 and 0x7F) - # to produce robust output that works in all editors and parsers -> result: list[str] = [] -> for char in expr.value: -> code = ord(char) -> if char == "\\": -> result.append("\\\\") -> elif char == '"': -> result.append('\\"') -> elif code < 0x20 or code == 0x7F: - # All control characters: NUL, BEL, BS, TAB, LF, VT, FF, CR, ESC, DEL, etc. -> result.append(f"\\u{code:04X}") -> else: -> result.append(char) -> output.append(f'"{"".join(result)}"') - -> case NumberLiteral(): -> output.append(expr.raw) - -> case VariableReference(): -> output.append(f"${expr.id.name}") - -> case MessageReference(): -> output.append(expr.id.name) -> if expr.attribute: -> output.append(f".{expr.attribute.name}") - -> case TermReference(): -> output.append(f"-{expr.id.name}") -> if expr.attribute: -> output.append(f".{expr.attribute.name}") -> if expr.arguments: -> self._serialize_call_arguments(expr.arguments, output, depth_guard) - -> case FunctionReference(): -> output.append(expr.id.name) -> self._serialize_call_arguments(expr.arguments, output, depth_guard) - -> case Placeable(): - # Nested Placeable - serialize inner expression with braces - # Valid per FTL spec: { { $var } } is a nested placeable -> output.append("{ ") -> with depth_guard: -> self._serialize_expression(expr.expression, output, depth_guard) -> output.append(" }") - -> case SelectExpression(): -> self._serialize_select_expression(expr, output, depth_guard) - -> def _serialize_call_arguments( -> self, args: CallArguments, output: list[str], depth_guard: DepthGuard -> ) -> None: -> """Serialize CallArguments.""" -> output.append("(") - - # Positional arguments -> for i, arg in enumerate(args.positional): -> if i > 0: -> output.append(", ") -> self._serialize_expression(arg, output, depth_guard) - - # Named arguments -> named_arg: NamedArgument -> for i, named_arg in enumerate(args.named): -> if i > 0 or args.positional: -> output.append(", ") -> output.append(f"{named_arg.name.name}: ") -> self._serialize_expression(named_arg.value, output, depth_guard) - -> output.append(")") - -> def _serialize_select_expression( -> self, -> expr: SelectExpression, -> output: list[str], -> depth_guard: DepthGuard, -> ) -> None: -> """Serialize SelectExpression.""" - # Wrap selector serialization in depth_guard to track depth for DoS protection. - # Without this, a deeply nested selector could bypass depth limits. -> with depth_guard: -> self._serialize_expression(expr.selector, output, depth_guard) -> output.append(" ->") - -> for variant in expr.variants: -> output.append(_VARIANT_INDENT) -> if variant.default: -> output.append("*") -> output.append("[") - - # Variant key (Identifier or NumberLiteral) - explicit match for exhaustiveness -> match variant.key: -> case Identifier(): -> output.append(variant.key.name) -> case NumberLiteral(): -> output.append(variant.key.raw) - -> output.append("] ") -> self._serialize_pattern(variant.value, output, depth_guard) - -> output.append("\n") - - -> def serialize( -> resource: Resource, -> *, -> validate: bool = True, -> max_depth: int = MAX_DEPTH, -> ) -> str: -> """Serialize Resource to FTL string. - -> Convenience function for FluentSerializer.serialize(). - -> Args: -> resource: Resource AST node -> validate: If True, validate AST before serialization (default: True). -> Checks that: -> - SelectExpressions have exactly one default variant -> - Identifiers follow FTL grammar ([a-zA-Z][a-zA-Z0-9_-]*) -> Set to False only for trusted ASTs from the parser. -> max_depth: Maximum nesting depth (default: 100). Prevents stack -> overflow from adversarial or malformed ASTs. - -> Returns: -> FTL source code - -> Raises: -> SerializationValidationError: If validate=True and AST is invalid -> SerializationDepthError: If AST nesting exceeds max_depth - -> Example: -> >>> from ftllexengine.syntax import parse, serialize -> >>> ast = parse("hello = Hello, world!") -> >>> ftl = serialize(ast) -> >>> assert ftl == "hello = Hello, world!\\n" -> """ -> serializer = FluentSerializer() -> return serializer.serialize(resource, validate=validate, max_depth=max_depth) diff --git a/src/ftllexengine/syntax/serializer_lines.py b/src/ftllexengine/syntax/serializer_lines.py new file mode 100644 index 00000000..dbcc7778 --- /dev/null +++ b/src/ftllexengine/syntax/serializer_lines.py @@ -0,0 +1,72 @@ +"""Low-level line and text emission helpers for the serializer.""" + +from __future__ import annotations + +from enum import Enum, auto + +__all__ = [ + "_ATTR_INDENT", + "_CHAR_PLACEABLE", + "_CONT_INDENT", + "_VARIANT_INDENT", + "_LineKind", + "_classify_line", + "_escape_text", +] + +_CONT_INDENT: str = " " +_ATTR_INDENT: str = "\n " +_VARIANT_INDENT: str = "\n " +_LINE_START_SYNTAX_CHARS: frozenset[str] = frozenset(".[*") +_CHAR_PLACEABLE: dict[str, str] = { + "{": '{ "{" }', + "}": '{ "}" }', + "[": '{ "[" }', + "*": '{ "*" }', + ".": '{ "." }', +} + + +class _LineKind(Enum): + """Classification of continuation-line content for serialization.""" + + EMPTY = auto() + WHITESPACE_ONLY = auto() + SYNTAX_LEADING = auto() + NORMAL = auto() + + +def _classify_line(line: str) -> tuple[_LineKind, int]: + """Classify a continuation line for serializer dispatch.""" + if not line: + return (_LineKind.EMPTY, 0) + + ws_len = 0 + length = len(line) + while ws_len < length and line[ws_len] == " ": + ws_len += 1 + + if ws_len == length: + return (_LineKind.WHITESPACE_ONLY, 0) + + if line[ws_len] in _LINE_START_SYNTAX_CHARS: + return (_LineKind.SYNTAX_LEADING, ws_len) + + return (_LineKind.NORMAL, 0) + + +def _escape_text(text: str, output: list[str]) -> None: + """Escape brace characters in text content.""" + pos = 0 + length = len(text) + while pos < length: + ch = text[pos] + if ch in ("{", "}"): + output.append(_CHAR_PLACEABLE[ch]) + pos += 1 + continue + run_start = pos + pos += 1 + while pos < length and text[pos] not in ("{", "}"): + pos += 1 + output.append(text[run_start:pos]) diff --git a/src/ftllexengine/syntax/serializer_validation.py b/src/ftllexengine/syntax/serializer_validation.py new file mode 100644 index 00000000..d0f387be --- /dev/null +++ b/src/ftllexengine/syntax/serializer_validation.py @@ -0,0 +1,210 @@ +"""Validation helpers for serializer-facing AST checks.""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, assert_never + +from ftllexengine.constants import MAX_DEPTH +from ftllexengine.core.depth_guard import DepthGuard, DepthLimitExceededError +from ftllexengine.core.identifier_validation import is_valid_identifier +from ftllexengine.diagnostics import FrozenFluentError + +from .ast import ( + CallArguments, + Expression, + FunctionReference, + Identifier, + Message, + MessageReference, + NumberLiteral, + Pattern, + Placeable, + Resource, + SelectExpression, + StringLiteral, + Term, + TermReference, + VariableReference, +) + +if TYPE_CHECKING: + from collections.abc import Callable + +__all__ = ["SerializationDepthError", "SerializationValidationError", "validate_resource"] + + +class SerializationValidationError(ValueError): + """Raised when AST validation fails during serialization.""" + + +class SerializationDepthError(ValueError): + """Raised when AST nesting exceeds maximum serialization depth.""" + + +def _validate_pattern(pattern: Pattern, context: str, depth_guard: DepthGuard) -> None: + for element in pattern.elements: + if isinstance(element, Placeable): + with depth_guard: + _validate_expression(element.expression, context, depth_guard) + + +def _validate_identifier(identifier: Identifier, context: str) -> None: + if not is_valid_identifier(identifier.name): + msg = ( + f"Invalid identifier '{identifier.name}' in {context}. " + f"Identifiers must match [a-zA-Z][a-zA-Z0-9_-]* and be ≤256 characters" + ) + raise SerializationValidationError(msg) + + +def _require_single_default_variant( + expr: SelectExpression, context: str +) -> None: + n_defaults = sum(1 for variant in expr.variants if variant.default) + if n_defaults == 1: + return + if n_defaults == 0: + msg = ( + f"SelectExpression in {context} has no default variant. " + "Exactly one variant must be marked as default." + ) + else: + msg = ( + f"SelectExpression in {context} has {n_defaults} default variants. " + "Exactly one variant must be marked as default." + ) + raise SerializationValidationError(msg) + + +def _validate_select_expression( + expr: SelectExpression, context: str, depth_guard: DepthGuard +) -> None: + _require_single_default_variant(expr, context) + with depth_guard: + _validate_expression(expr.selector, context, depth_guard) + for variant in expr.variants: + if isinstance(variant.key, Identifier): + _validate_identifier(variant.key, f"{context}, variant key") + with depth_guard: + _validate_pattern(variant.value, context, depth_guard) + + +def _validate_term_reference( + expr: TermReference, context: str, depth_guard: DepthGuard +) -> None: + _validate_identifier(expr.id, f"{context}, term reference") + if expr.attribute: + _validate_identifier(expr.attribute, f"{context}, term attribute") + if expr.arguments: + _validate_call_arguments(expr.arguments, context, depth_guard) + + +def _validate_message_reference(expr: MessageReference, context: str) -> None: + _validate_identifier(expr.id, f"{context}, message reference") + if expr.attribute: + _validate_identifier(expr.attribute, f"{context}, message attribute") + + +def _assert_named_arg_value_is_literal( + value: object, arg_name: str, context: str +) -> None: + if not isinstance(value, (StringLiteral, NumberLiteral)): + value_type = type(value).__name__ + msg = ( + f"Named argument '{arg_name}' in {context} has invalid value type " + f"'{value_type}'. Named argument values must be StringLiteral or " + f"NumberLiteral per FTL specification " + f'(NamedArgument ::= Identifier ":" (StringLiteral | NumberLiteral)).' + ) + raise SerializationValidationError(msg) + + +def _validate_call_arguments( + args: CallArguments, context: str, depth_guard: DepthGuard +) -> None: + for pos_arg in args.positional: + with depth_guard: + _validate_expression(pos_arg, context, depth_guard) + + seen_names: set[str] = set() + for named_arg in args.named: + arg_name = named_arg.name.name + if arg_name in seen_names: + msg = ( + f"Duplicate named argument '{arg_name}' in {context}. " + "Named argument names must be unique per FTL specification." + ) + raise SerializationValidationError(msg) + seen_names.add(arg_name) + + _validate_identifier(named_arg.name, f"{context}, named argument") + _assert_named_arg_value_is_literal(named_arg.value, arg_name, context) + + +def _validate_expression( + expr: Expression, context: str, depth_guard: DepthGuard +) -> None: + match expr: + case SelectExpression(): + _validate_select_expression(expr, context, depth_guard) + case Placeable(): + with depth_guard: + _validate_expression(expr.expression, context, depth_guard) + case VariableReference(): + _validate_identifier(expr.id, f"{context}, variable reference") + case MessageReference(): + _validate_message_reference(expr, context) + case TermReference(): + _validate_term_reference(expr, context, depth_guard) + case FunctionReference(): + _validate_identifier(expr.id, f"{context}, function reference") + _validate_call_arguments(expr.arguments, context, depth_guard) + case StringLiteral() | NumberLiteral(): + return + case _ as unreachable: # pragma: no cover + assert_never(unreachable) + + +def validate_resource( + resource: Resource, + max_depth: int = MAX_DEPTH, + *, + validate_pattern: Callable[[Pattern, str, DepthGuard], None] | None = None, +) -> None: + """Validate a Resource AST for safe serialization.""" + depth_guard = DepthGuard(max_depth=max_depth) + pattern_validator = _validate_pattern if validate_pattern is None else validate_pattern + + try: + for entry in resource.entries: + match entry: + case Message(): + _validate_identifier(entry.id, "message ID") + context = f"message '{entry.id.name}'" + if entry.value: + pattern_validator(entry.value, context, depth_guard) + for attr in entry.attributes: + _validate_identifier(attr.id, f"{context}, attribute ID") + pattern_validator( + attr.value, + f"{context}.{attr.id.name}", + depth_guard, + ) + case Term(): + _validate_identifier(entry.id, "term ID") + context = f"term '-{entry.id.name}'" + pattern_validator(entry.value, context, depth_guard) + for attr in entry.attributes: + _validate_identifier(attr.id, f"{context}, attribute ID") + pattern_validator( + attr.value, + f"{context}.{attr.id.name}", + depth_guard, + ) + case _: + pass + except DepthLimitExceededError as exc: + msg = f"Validation depth limit exceeded (max: {max_depth}): {exc}" + raise SerializationDepthError(msg) from exc + except FrozenFluentError: + raise diff --git a/src/ftllexengine/syntax/validation_helpers.py b/src/ftllexengine/syntax/validation_helpers.py index 15643bd2..6ba3da00 100644 --- a/src/ftllexengine/syntax/validation_helpers.py +++ b/src/ftllexengine/syntax/validation_helpers.py @@ -29,9 +29,9 @@ def count_default_variants(select: SelectExpression) -> int: Number of default variants (should be exactly 1 for valid FTL) Example: - >>> expr = SelectExpression(...) - >>> count = count_default_variants(expr) - >>> if count != 1: + >>> expr = SelectExpression(...) # doctest: +SKIP + >>> count = count_default_variants(expr) # doctest: +SKIP + >>> if count != 1: # doctest: +SKIP ... raise ValidationError(f"Expected 1 default, found {count}") """ return sum(1 for v in select.variants if v.default) diff --git a/src/ftllexengine/syntax/validator.py b/src/ftllexengine/syntax/validator.py index 1d91fe36..41c22ab7 100644 --- a/src/ftllexengine/syntax/validator.py +++ b/src/ftllexengine/syntax/validator.py @@ -20,6 +20,7 @@ from ftllexengine.core.depth_guard import DepthGuard from ftllexengine.diagnostics import ValidationResult from ftllexengine.diagnostics.codes import DiagnosticCode +from ftllexengine.diagnostics.depth import resolution_depth_error from ftllexengine.syntax.ast import ( Annotation, Attribute, @@ -105,7 +106,10 @@ def validate(self, resource: Resource) -> ValidationResult: ValidationResult with errors (if any) """ errors: list[Annotation] = [] - depth_guard = DepthGuard(max_depth=MAX_DEPTH) + depth_guard = DepthGuard( + max_depth=MAX_DEPTH, + error_factory=resolution_depth_error, + ) for entry in resource.entries: self._validate_entry(entry, errors, depth_guard) @@ -501,13 +505,13 @@ def validate(resource: Resource) -> ValidationResult: ValidationResult with any errors found Example: - >>> from ftllexengine.syntax.parser import FluentParserV1 - >>> from ftllexengine.syntax.validator import validate - >>> - >>> parser = FluentParserV1() - >>> resource = parser.parse("msg = value") - >>> result = validate(resource) - >>> assert result.is_valid + >>> from ftllexengine.syntax.parser import FluentParserV1 # doctest: +SKIP + >>> from ftllexengine.syntax.validator import validate # doctest: +SKIP + + >>> parser = FluentParserV1() # doctest: +SKIP + >>> resource = parser.parse("msg = value") # doctest: +SKIP + >>> result = validate(resource) # doctest: +SKIP + >>> assert result.is_valid # doctest: +SKIP """ validator = SemanticValidator() return validator.validate(resource) diff --git a/src/ftllexengine/syntax/visitor.py b/src/ftllexengine/syntax/visitor.py index 3208abd8..93a5b069 100644 --- a/src/ftllexengine/syntax/visitor.py +++ b/src/ftllexengine/syntax/visitor.py @@ -20,6 +20,7 @@ from ftllexengine.constants import MAX_DEPTH from ftllexengine.core.depth_guard import DepthGuard +from ftllexengine.diagnostics.depth import resolution_depth_error from .ast import ( ASTNode, @@ -79,7 +80,7 @@ class ASTVisitor[T = ASTNode]: - Serializers Example: - >>> class CountMessagesVisitor(ASTVisitor): + >>> class CountMessagesVisitor(ASTVisitor): # doctest: +SKIP ... def __init__(self): ... super().__init__() ... self.count = 0 @@ -88,9 +89,9 @@ class ASTVisitor[T = ASTNode]: ... self.count += 1 ... return self.generic_visit(node) # Traverse children ... - >>> visitor = CountMessagesVisitor() - >>> visitor.visit(resource) - >>> print(visitor.count) + >>> visitor = CountMessagesVisitor() # doctest: +SKIP + >>> visitor.visit(resource) # doctest: +SKIP + >>> print(visitor.count) # doctest: +SKIP """ __slots__ = ("_depth_guard",) @@ -134,7 +135,10 @@ def __init__(self, *, max_depth: int | None = None) -> None: # Depth guard prevents stack overflow from adversarial/malformed ASTs. # Uses same MAX_DEPTH (100) as parser, resolver, serializer for consistency. effective_max_depth = max_depth if max_depth is not None else MAX_DEPTH - self._depth_guard = DepthGuard(max_depth=effective_max_depth) + self._depth_guard = DepthGuard( + max_depth=effective_max_depth, + error_factory=resolution_depth_error, + ) def visit(self, node: ASTNode) -> T: """Visit a node (dispatcher with depth protection). @@ -246,15 +250,15 @@ class ASTTransformer(ASTVisitor[TransformerResult]): Uses Python 3.13's pattern matching for elegant node type handling. Example - Remove all comments: - >>> class RemoveCommentsTransformer(ASTTransformer): + >>> class RemoveCommentsTransformer(ASTTransformer): # doctest: +SKIP ... def visit_Comment(self, node: Comment) -> None: ... return None # Remove comments ... - >>> transformer = RemoveCommentsTransformer() - >>> cleaned_resource = transformer.transform(resource) + >>> transformer = RemoveCommentsTransformer() # doctest: +SKIP + >>> cleaned_resource = transformer.transform(resource) # doctest: +SKIP Example - Rename all variables: - >>> class RenameVariablesTransformer(ASTTransformer): + >>> class RenameVariablesTransformer(ASTTransformer): # doctest: +SKIP ... def __init__(self, mapping: dict[str, str]): ... super().__init__() ... self.mapping = mapping @@ -266,17 +270,17 @@ class ASTTransformer(ASTVisitor[TransformerResult]): ... ) ... return node ... - >>> transformer = RenameVariablesTransformer({"old": "new"}) - >>> modified_resource = transformer.transform(resource) + >>> transformer = RenameVariablesTransformer({"old": "new"}) # doctest: +SKIP + >>> modified_resource = transformer.transform(resource) # doctest: +SKIP Example - Expand messages (1 → multiple): - >>> class ExpandPluralsTransformer(ASTTransformer): + >>> class ExpandPluralsTransformer(ASTTransformer): # doctest: +SKIP ... def visit_Message(self, node: Message) -> list[Message]: ... # Generate multiple messages from select expressions ... return [node, expanded_variant_1, expanded_variant_2] ... - >>> transformer = ExpandPluralsTransformer() - >>> expanded_resource = transformer.transform(resource) + >>> transformer = ExpandPluralsTransformer() # doctest: +SKIP + >>> expanded_resource = transformer.transform(resource) # doctest: +SKIP """ def transform(self, node: ASTNode) -> TransformerResult: diff --git a/src/ftllexengine/validation/resource.py b/src/ftllexengine/validation/resource.py index 5cb29650..f06edab3 100644 --- a/src/ftllexengine/validation/resource.py +++ b/src/ftllexengine/validation/resource.py @@ -22,11 +22,8 @@ import re from typing import TYPE_CHECKING -if TYPE_CHECKING: - from collections.abc import Mapping - -from ftllexengine.analysis.graph import detect_cycles, make_cycle_key from ftllexengine.constants import MAX_DEPTH +from ftllexengine.core.reference_graph import detect_cycles, make_cycle_key from ftllexengine.diagnostics import ( ValidationError, ValidationResult, @@ -34,16 +31,33 @@ WarningSeverity, ) from ftllexengine.diagnostics.codes import DiagnosticCode -from ftllexengine.introspection import extract_references, extract_references_by_attribute from ftllexengine.syntax import Attribute, Junk, Message, Resource, Term from ftllexengine.syntax.cursor import LineOffsetCache +from ftllexengine.syntax.reference_extraction import extract_references from ftllexengine.syntax.validator import SemanticValidator +from ftllexengine.validation.resource_graph import ( + _compute_longest_paths as _compute_longest_paths_impl, +) +from ftllexengine.validation.resource_graph import ( + build_dependency_graph, + detect_long_chains, +) +from ftllexengine.validation.resource_graph import ( + detect_circular_references as _detect_circular_references_impl, +) if TYPE_CHECKING: + from collections.abc import Mapping + from ftllexengine.syntax.parser import FluentParserV1 __all__ = ["validate_resource"] +# Backward-compatible private re-exports for existing tests and internal callers. +_build_dependency_graph = build_dependency_graph +_compute_longest_paths = _compute_longest_paths_impl +_detect_long_chains = detect_long_chains + logger = logging.getLogger(__name__) @@ -436,336 +450,13 @@ def _check_undefined_references( return warnings -def _detect_circular_references( - graph: dict[str, set[str]], -) -> list[ValidationWarning]: - """Detect circular dependencies in messages and terms. - - Uses iterative DFS via analysis.graph module to avoid stack overflow - on deep dependency chains. - - Accepts a unified dependency graph with type-prefixed nodes to detect: - - Message-only cycles (msg:A -> msg:B -> msg:A) - - Term-only cycles (term:A -> term:B -> term:A) - - Cross-type cycles (msg:A -> term:B -> msg:A) - - Cross-resource cycles (current resource -> known entry -> current resource) - - Args: - graph: Unified dependency graph with type-prefixed nodes (msg:name, term:name) - - Returns: - List of warnings for circular references - """ - warnings: list[ValidationWarning] = [] - seen_cycle_keys: set[str] = set() - - # Detect all cycles in the unified graph - for cycle in detect_cycles(graph): - cycle_key = make_cycle_key(cycle) - if cycle_key not in seen_cycle_keys: - seen_cycle_keys.add(cycle_key) - - # Format cycle for human-readable output - # Convert "msg:foo" -> "foo", "msg:foo.bar" -> "foo.bar", - # "term:baz" -> "-baz", "term:baz.attr" -> "-baz.attr" - formatted_parts: list[str] = [] - for node in cycle: - if node.startswith("msg:"): - formatted_parts.append(node[4:]) # Strip "msg:" prefix - elif node.startswith("term:"): - formatted_parts.append(f"-{node[5:]}") # Strip "term:", add "-" - - cycle_str = " -> ".join(formatted_parts) - - # Determine cycle type for appropriate message - has_messages = any(n.startswith("msg:") for n in cycle) - has_terms = any(n.startswith("term:") for n in cycle) - - if has_messages and has_terms: - msg = f"Circular cross-reference: {cycle_str}" - elif has_terms: - msg = f"Circular term reference: {cycle_str}" - else: - msg = f"Circular message reference: {cycle_str}" - - warnings.append( - ValidationWarning( - code=DiagnosticCode.VALIDATION_CIRCULAR_REFERENCE, - message=msg, - context=cycle_str, - severity=WarningSeverity.CRITICAL, - ) - ) - - return warnings - - -def _resolve_reference( - ref: str, - prefix: str, - local_entries: dict[str, Message] | dict[str, Term], - known_ids: frozenset[str] | None, -) -> str | None: - """Resolve a reference string to a graph node key. - - Shared logic for both message and term reference resolution. - References may be attribute-qualified ("name.attr") or bare ("name"). - - Args: - ref: Reference string (possibly attribute-qualified) - prefix: Graph node prefix ("msg" or "term") - local_entries: Local entries dict for this namespace - known_ids: Optional set of IDs already in bundle - - Returns: - Prefixed graph node key, or None if reference is unknown - """ - if "." in ref: - base, attr = ref.split(".", 1) - if base in local_entries or (known_ids and base in known_ids): - return f"{prefix}:{base}.{attr}" - elif ref in local_entries or (known_ids and ref in known_ids): - return f"{prefix}:{ref}" - return None - - -def _add_entry_nodes( - entries: dict[str, Message] | dict[str, Term], - prefix: str, - messages_dict: dict[str, Message], - terms_dict: dict[str, Term], - known_messages: frozenset[str] | None, - known_terms: frozenset[str] | None, - graph: dict[str, set[str]], -) -> None: - """Add nodes and edges for a set of entries to the dependency graph. - - Shared logic for both message and term node building. - - Args: - entries: The entries to process (messages or terms) - prefix: Graph node prefix ("msg" or "term") - messages_dict: All local messages (for reference resolution) - terms_dict: All local terms (for reference resolution) - known_messages: Optional set of message IDs already in bundle - known_terms: Optional set of term IDs already in bundle - graph: Mutable graph to add nodes to - """ - for name, entry in entries.items(): - refs_by_attr = extract_references_by_attribute(entry) - - for attr_name, (msg_refs, term_refs) in refs_by_attr.items(): - node_key = ( - f"{prefix}:{name}" - if attr_name is None - else f"{prefix}:{name}.{attr_name}" - ) - deps: set[str] = set() - for ref in msg_refs: - resolved = _resolve_reference( - ref, "msg", messages_dict, known_messages - ) - if resolved is not None: - deps.add(resolved) - for ref in term_refs: - resolved = _resolve_reference( - ref, "term", terms_dict, known_terms - ) - if resolved is not None: - deps.add(resolved) - graph[node_key] = deps - - -def _add_known_entries( - known_ids: frozenset[str] | None, - prefix: str, - known_deps: Mapping[str, frozenset[str]] | None, - graph: dict[str, set[str]], -) -> None: - """Add known (pre-existing) entries to the graph. - - Args: - known_ids: Set of known entry IDs - prefix: Graph node prefix ("msg" or "term") - known_deps: Optional dependency map for known entries - graph: Mutable graph to add nodes to - """ - if not known_ids: - return - for known_id in known_ids: - node_key = f"{prefix}:{known_id}" - if node_key not in graph: - if known_deps and known_id in known_deps: - graph[node_key] = set(known_deps[known_id]) - else: - graph[node_key] = set() - - -def _build_dependency_graph( - messages_dict: dict[str, Message], - terms_dict: dict[str, Term], - *, - known_messages: frozenset[str] | None = None, - known_terms: frozenset[str] | None = None, - known_msg_deps: Mapping[str, frozenset[str]] | None = None, - known_term_deps: Mapping[str, frozenset[str]] | None = None, -) -> dict[str, set[str]]: - """Build unified dependency graph for messages and terms. - - Creates a graph with type-prefixed nodes (msg:name, term:name) for - both cycle detection and chain depth analysis. - - Args: - messages_dict: Map of message IDs to Message nodes from current resource - terms_dict: Map of term IDs to Term nodes from current resource - known_messages: Optional set of message IDs already in bundle - known_terms: Optional set of term IDs already in bundle - known_msg_deps: Optional dependency map for known messages. Maps message ID - to frozenset of prefixed dependencies (e.g., {"msg:foo", "term:bar"}). - known_term_deps: Optional dependency map for known terms. - - Returns: - Graph as adjacency list (node -> set of dependencies) - """ - graph: dict[str, set[str]] = {} - - # Add entry nodes with attribute-granular dependencies. - # Each attribute gets its own node to avoid false positive cycles - # when msg.a references msg.b (non-cyclic intra-entry reference). - _add_entry_nodes( - messages_dict, "msg", - messages_dict, terms_dict, - known_messages, known_terms, graph, +def _detect_circular_references(graph: dict[str, set[str]]) -> list[ValidationWarning]: + """Compatibility wrapper preserving patch points for cycle tests.""" + return _detect_circular_references_impl( + graph, + detect_cycles_fn=detect_cycles, + make_cycle_key_fn=make_cycle_key, ) - _add_entry_nodes( - terms_dict, "term", - messages_dict, terms_dict, - known_messages, known_terms, graph, - ) - - # Add known entries with their dependencies for cross-resource - # cycle detection. - _add_known_entries( - known_messages, "msg", known_msg_deps, graph, - ) - _add_known_entries( - known_terms, "term", known_term_deps, graph, - ) - - return graph - - -def _compute_longest_paths( - graph: dict[str, set[str]], -) -> dict[str, tuple[int, list[str]]]: - """Compute longest path from each node using memoized iterative DFS. - - Args: - graph: Dependency graph as adjacency list - - Returns: - Map from node to (path_length, path_nodes) - """ - longest_path: dict[str, tuple[int, list[str]]] = {} - in_stack: set[str] = set() - - for start in graph: - if start in longest_path: - continue - - # Iterative DFS with two-phase processing - stack: list[tuple[str, int, list[str]]] = [(start, 0, list(graph.get(start, set())))] - - while stack: - node, phase, children = stack.pop() - - if phase == 0: - if node in longest_path: - continue - - in_stack.add(node) - stack.append((node, 1, children)) - - stack.extend( - (child, 0, list(graph.get(child, set()))) - for child in children - if child not in longest_path and child not in in_stack - ) - else: - in_stack.discard(node) - best_depth, best_path = 0, [] - for child in children: - if child in longest_path: - child_depth, child_path = longest_path[child] - if child_depth + 1 > best_depth: - best_depth = child_depth + 1 - best_path = child_path - longest_path[node] = (best_depth, [node, *best_path]) - - return longest_path - - -def _detect_long_chains( - graph: dict[str, set[str]], - max_depth: int = MAX_DEPTH, -) -> list[ValidationWarning]: - """Detect ALL reference chains that exceed maximum depth. - - Computes longest path from each node and reports ALL chains exceeding - max_depth. This allows users to see and fix all depth violations in a - single validation pass rather than iteratively discovering them. - - Args: - graph: Unified dependency graph with type-prefixed nodes (msg:name, term:name) - max_depth: Maximum allowed chain depth (default: MAX_DEPTH) - - Returns: - List of warnings for ALL chains exceeding max_depth, sorted by depth - (deepest first) for prioritized remediation - """ - if not graph: - return [] - - longest_paths = _compute_longest_paths(graph) - - # Collect ALL chains exceeding max_depth - exceeding_chains: list[tuple[int, list[str], str]] = [] - for node, (depth, path) in longest_paths.items(): - # Only report chains starting from their origin (first node in path) - # to avoid duplicate warnings for the same chain from different nodes - if depth > max_depth and path and path[0] == node: - exceeding_chains.append((depth, path, node)) - - if not exceeding_chains: - return [] - - # Sort by depth descending (deepest chains first) for prioritized remediation - exceeding_chains.sort(key=lambda x: x[0], reverse=True) - - warnings: list[ValidationWarning] = [] - for chain_depth, chain_path, _origin in exceeding_chains: - # Format path for human-readable output - formatted = [ - node[4:] if node.startswith("msg:") else f"-{node[5:]}" - for node in chain_path[:10] - ] - chain_str = " -> ".join(formatted) - if len(chain_path) > 10: - chain_str += f" -> ... ({len(chain_path)} total)" - - warnings.append( - ValidationWarning( - code=DiagnosticCode.VALIDATION_CHAIN_DEPTH_EXCEEDED, - message=( - f"Reference chain depth ({chain_depth}) exceeds maximum ({max_depth}); " - f"will fail at runtime with MAX_DEPTH_EXCEEDED" - ), - context=chain_str, - severity=WarningSeverity.WARNING, - ) - ) - - return warnings def validate_resource( @@ -811,12 +502,12 @@ def validate_resource( TypeError: If source is not a string (e.g., bytes were passed). Example: - >>> from ftllexengine.validation import validate_resource - >>> result = validate_resource(ftl_source) - >>> if not result.is_valid: + >>> from ftllexengine.validation import validate_resource # doctest: +SKIP + >>> result = validate_resource(ftl_source) # doctest: +SKIP + >>> if not result.is_valid: # doctest: +SKIP ... for error in result.errors: ... print(f"Error [{error.code}]: {error.message}") - >>> for warning in result.warnings: + >>> for warning in result.warnings: # doctest: +SKIP ... print(f"Warning [{warning.code}]: {warning.message}") Thread Safety: @@ -873,7 +564,7 @@ def validate_resource( # Build unified dependency graph once for both cycle and chain detection # Avoids redundant graph construction (important for large resources) - dependency_graph = _build_dependency_graph( + dependency_graph = build_dependency_graph( messages_dict, terms_dict, known_messages=known_messages, @@ -886,7 +577,7 @@ def validate_resource( cycle_warnings = _detect_circular_references(dependency_graph) # Pass 5: Detect long reference chains (would fail at runtime) - chain_warnings = _detect_long_chains(dependency_graph) + chain_warnings = detect_long_chains(dependency_graph, max_depth=MAX_DEPTH) # Pass 6: Fluent spec compliance (E0001-E0013) semantic_validator = SemanticValidator() diff --git a/src/ftllexengine/validation/resource.py,cover b/src/ftllexengine/validation/resource.py,cover deleted file mode 100644 index f1dde731..00000000 --- a/src/ftllexengine/validation/resource.py,cover +++ /dev/null @@ -1,842 +0,0 @@ -> """FTL resource validation. - -> Provides standalone validation for FTL resources without requiring -> a FluentBundle instance. Useful for CI/CD pipelines, linters, and -> tooling that needs to validate FTL files without runtime resolution. - -> Architecture: -> - validate_resource(): Main entry point, orchestrates validation passes -> - _extract_syntax_errors(): Pass 1 - Convert Junk entries to ValidationError -> - _collect_entries(): Pass 2 - Collect messages/terms, check duplicates -> - _check_undefined_references(): Pass 3 - Validate message/term references -> - _detect_circular_references(): Pass 4 - Check for reference cycles -> - _detect_long_chains(): Pass 5 - Check for chains exceeding MAX_DEPTH -> - SemanticValidator: Pass 6 - Fluent spec compliance - -> Python 3.13+. -> """ - -> from __future__ import annotations - -> import logging -> import re -> from typing import TYPE_CHECKING - -> from ftllexengine.analysis.graph import detect_cycles, make_cycle_key -> from ftllexengine.constants import MAX_DEPTH -> from ftllexengine.diagnostics import ( -> ValidationError, -> ValidationResult, -> ValidationWarning, -> WarningSeverity, -> ) -> from ftllexengine.diagnostics.codes import DiagnosticCode -> from ftllexengine.introspection import extract_references, extract_references_by_attribute -> from ftllexengine.syntax import Junk, Message, Resource, Term -> from ftllexengine.syntax.cursor import LineOffsetCache -> from ftllexengine.syntax.validator import SemanticValidator - -- if TYPE_CHECKING: -- from ftllexengine.syntax.parser import FluentParserV1 - -> __all__ = ["validate_resource"] - -> logger = logging.getLogger(__name__) - - -> def _get_entry_position( -> entry: Message | Term, -> line_cache: LineOffsetCache, -> ) -> tuple[int | None, int | None]: -> """Get line/column from entry's span if available. - -> Args: -> entry: Message or Term with optional span -> line_cache: Line offset cache for position lookup - -> Returns: -> (line, column) tuple, or (None, None) if no span -> """ -> if entry.span: -> return line_cache.get_line_col(entry.span.start) -> return None, None - - -> def _extract_syntax_errors( -> resource: Resource, -> line_cache: LineOffsetCache, -> ) -> list[ValidationError]: -> """Extract syntax errors from Junk entries. - -> Converts Junk AST nodes (unparseable content) to structured -> ValidationError objects with line/column information. - -> Propagates annotations from Junk nodes to preserve specific error codes -> and messages from the parser. If a Junk entry has no annotations, falls -> back to a generic parse error. - -> Args: -> resource: Parsed Resource AST (may contain Junk entries) -> line_cache: Shared line offset cache for position lookups - -> Returns: -> List of ValidationError objects for each Junk entry -> """ -> errors: list[ValidationError] = [] - -> for entry in resource.entries: -> if isinstance(entry, Junk): - # Propagate annotations from Junk to preserve specific parser errors -> if entry.annotations: -> for annotation in entry.annotations: - # Use annotation's span if available, otherwise fall back to Junk span -> ann_line: int | None = None -> ann_column: int | None = None -> if annotation.span: -> ann_line, ann_column = line_cache.get_line_col( -> annotation.span.start -> ) -> elif entry.span: -> ann_line, ann_column = line_cache.get_line_col(entry.span.start) - -> errors.append( -> ValidationError( -> code=annotation.code, -> message=annotation.message, -> content=entry.content, -> line=ann_line, -> column=ann_column, -> ) -> ) -> else: - # Fallback for Junk without annotations (shouldn't happen normally) -> line: int | None = None -> column: int | None = None -> if entry.span: -> line, column = line_cache.get_line_col(entry.span.start) - -> errors.append( -> ValidationError( -> code=DiagnosticCode.VALIDATION_PARSE_ERROR.name, -> message="Failed to parse FTL content", -> content=entry.content, -> line=line, -> column=column, -> ) -> ) - -> return errors - - -> def _collect_entries( -> resource: Resource, -> line_cache: LineOffsetCache, -> *, -> known_messages: frozenset[str] | None = None, -> known_terms: frozenset[str] | None = None, -> ) -> tuple[dict[str, Message], dict[str, Term], list[ValidationWarning]]: -> """Collect message/term entries and check for structural issues. - -> Performs the following checks: -> - Duplicate message IDs (within message namespace) -> - Duplicate term IDs (within term namespace) -> - Messages without values or attributes -> - Duplicate attribute IDs within entries -> - Shadow warnings when entry ID conflicts with known entry - -> Note: Per Fluent spec, messages and terms have separate namespaces. -> A message named "foo" and a term named "foo" are NOT duplicates. - -> Args: -> resource: Parsed Resource AST -> line_cache: Shared line offset cache for position lookups -> known_messages: Optional set of message IDs already in bundle -> known_terms: Optional set of term IDs already in bundle - -> Returns: -> Tuple of (messages_dict, terms_dict, warnings) -> """ -> warnings: list[ValidationWarning] = [] - # Per Fluent spec, messages and terms have separate namespaces. - # A message "foo" and a term "-foo" can coexist without conflict. -> seen_message_ids: set[str] = set() -> seen_term_ids: set[str] = set() -> messages_dict: dict[str, Message] = {} -> terms_dict: dict[str, Term] = {} - -> for entry in resource.entries: -> match entry: -> case Message(id=msg_id, value=value, attributes=attributes): - # Check for duplicate message IDs within message namespace -> if msg_id.name in seen_message_ids: -> line, column = _get_entry_position(entry, line_cache) -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_DUPLICATE_ID.name, -> message=( -> f"Duplicate message ID '{msg_id.name}' " -> f"(later definition will overwrite earlier)" -> ), -> context=msg_id.name, -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) -> seen_message_ids.add(msg_id.name) -> messages_dict[msg_id.name] = entry - - # Check for shadow conflict with known messages -> if known_messages and msg_id.name in known_messages: -> line, column = _get_entry_position(entry, line_cache) -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_SHADOW_WARNING.name, -> message=( -> f"Message '{msg_id.name}' shadows existing message " -> f"(this definition will override the earlier one)" -> ), -> context=msg_id.name, -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) - - # Check for duplicate attribute IDs within this message -> seen_message_attr_ids: set[str] = set() -> for attr in attributes: -> if attr.id.name in seen_message_attr_ids: -> line, column = _get_entry_position(entry, line_cache) -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_DUPLICATE_ATTRIBUTE.name, -> message=( -> f"Message '{msg_id.name}' has duplicate attribute " -> f"'{attr.id.name}' (later will override earlier)" -> ), -> context=f"{msg_id.name}.{attr.id.name}", -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) -> seen_message_attr_ids.add(attr.id.name) - - # Check for messages without values (only attributes) - # NOTE: This check is unreachable due to defense-in-depth: - # 1. Parser validates in validate_message_content() and creates Junk instead - # 2. Message.__post_init__() raises ValueError if value=None and no attributes - # Kept as defensive programming for external AST construction scenarios. -- if value is None and len(attributes) == 0: # pragma: no cover -- line, column = _get_entry_position(entry, line_cache) # pragma: no cover -- warnings.append( # pragma: no cover -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_NO_VALUE_OR_ATTRS.name, -> message=f"Message '{msg_id.name}' has neither value nor attributes", -> context=msg_id.name, -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) - -> case Term(id=term_id, attributes=attributes): - # Check for duplicate term IDs within term namespace -> if term_id.name in seen_term_ids: -> line, column = _get_entry_position(entry, line_cache) -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_DUPLICATE_ID.name, -> message=( -> f"Duplicate term ID '{term_id.name}' " -> f"(later definition will overwrite earlier)" -> ), -> context=term_id.name, -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) -> seen_term_ids.add(term_id.name) -> terms_dict[term_id.name] = entry - - # Check for shadow conflict with known terms -> if known_terms and term_id.name in known_terms: -> line, column = _get_entry_position(entry, line_cache) -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_SHADOW_WARNING.name, -> message=( -> f"Term '{term_id.name}' shadows existing term " -> f"(this definition will override the earlier one)" -> ), -> context=term_id.name, -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) - - # Check for duplicate attribute IDs within this term -> seen_term_attr_ids: set[str] = set() -> for attr in attributes: -> if attr.id.name in seen_term_attr_ids: -> line, column = _get_entry_position(entry, line_cache) -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_DUPLICATE_ATTRIBUTE.name, -> message=( -> f"Term '{term_id.name}' has duplicate attribute " -> f"'{attr.id.name}' (later will override earlier)" -> ), -> context=f"{term_id.name}.{attr.id.name}", -> line=line, -> column=column, -> severity=WarningSeverity.WARNING, -> ) -> ) -> seen_term_attr_ids.add(attr.id.name) - -> return messages_dict, terms_dict, warnings - - -> def _check_undefined_references( -> messages_dict: dict[str, Message], -> terms_dict: dict[str, Term], -> line_cache: LineOffsetCache, -> *, -> known_messages: frozenset[str] | None = None, -> known_terms: frozenset[str] | None = None, -> ) -> list[ValidationWarning]: -> """Check for undefined message and term references. - -> Validates that all message and term references in the resource -> point to defined entries. Optionally considers entries already -> present in a bundle for cross-resource reference validation. - -> Args: -> messages_dict: Map of message IDs to Message nodes from current resource -> terms_dict: Map of term IDs to Term nodes from current resource -> line_cache: Shared line offset cache for position lookups -> known_messages: Optional set of message IDs already in bundle -> known_terms: Optional set of term IDs already in bundle - -> Returns: -> List of warnings for undefined references -> """ -> warnings: list[ValidationWarning] = [] - - # Combine current resource entries with known bundle entries -> all_messages = set(messages_dict.keys()) -> all_terms = set(terms_dict.keys()) -> if known_messages is not None: -> all_messages |= known_messages -> if known_terms is not None: -> all_terms |= known_terms - - # Check message references -> for msg_name, message in messages_dict.items(): -> msg_refs, term_refs = extract_references(message) -> line, column = _get_entry_position(message, line_cache) - -> for ref in msg_refs: - # Strip attribute qualification for existence check - # "msg.tooltip" -> check if "msg" exists -> base_ref = ref.split(".", 1)[0] if "." in ref else ref -> if base_ref not in all_messages: -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_UNDEFINED_REFERENCE.name, -> message=f"Message '{msg_name}' references undefined message '{base_ref}'", -> context=base_ref, -> line=line, -> column=column, -> severity=WarningSeverity.CRITICAL, -> ) -> ) - -> for ref in term_refs: - # Strip attribute qualification for existence check - # "term.attr" -> check if "term" exists -> base_ref = ref.split(".", 1)[0] if "." in ref else ref -> if base_ref not in all_terms: -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_UNDEFINED_REFERENCE.name, -> message=f"Message '{msg_name}' references undefined term '-{base_ref}'", -> context=f"-{base_ref}", -> line=line, -> column=column, -> severity=WarningSeverity.CRITICAL, -> ) -> ) - - # Check term references -> for term_name, term in terms_dict.items(): -> msg_refs, term_refs = extract_references(term) -> line, column = _get_entry_position(term, line_cache) - -> for ref in msg_refs: - # Strip attribute qualification for existence check -> base_ref = ref.split(".", 1)[0] if "." in ref else ref -> if base_ref not in all_messages: -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_UNDEFINED_REFERENCE.name, -> message=f"Term '-{term_name}' references undefined message '{base_ref}'", -> context=base_ref, -> line=line, -> column=column, -> severity=WarningSeverity.CRITICAL, -> ) -> ) - -> for ref in term_refs: - # Strip attribute qualification for existence check -> base_ref = ref.split(".", 1)[0] if "." in ref else ref -> if base_ref not in all_terms: -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_UNDEFINED_REFERENCE.name, -> message=f"Term '-{term_name}' references undefined term '-{base_ref}'", -> context=f"-{base_ref}", -> line=line, -> column=column, -> severity=WarningSeverity.CRITICAL, -> ) -> ) - -> return warnings - - -> def _detect_circular_references( -> graph: dict[str, set[str]], -> ) -> list[ValidationWarning]: -> """Detect circular dependencies in messages and terms. - -> Uses iterative DFS via analysis.graph module to avoid stack overflow -> on deep dependency chains. - -> Accepts a unified dependency graph with type-prefixed nodes to detect: -> - Message-only cycles (msg:A -> msg:B -> msg:A) -> - Term-only cycles (term:A -> term:B -> term:A) -> - Cross-type cycles (msg:A -> term:B -> msg:A) -> - Cross-resource cycles (current resource -> known entry -> current resource) - -> Args: -> graph: Unified dependency graph with type-prefixed nodes (msg:name, term:name) - -> Returns: -> List of warnings for circular references -> """ -> warnings: list[ValidationWarning] = [] -> seen_cycle_keys: set[str] = set() - - # Detect all cycles in the unified graph -> for cycle in detect_cycles(graph): -> cycle_key = make_cycle_key(cycle) -> if cycle_key not in seen_cycle_keys: -> seen_cycle_keys.add(cycle_key) - - # Format cycle for human-readable output - # Convert "msg:foo" -> "foo", "msg:foo.bar" -> "foo.bar", - # "term:baz" -> "-baz", "term:baz.attr" -> "-baz.attr" -> formatted_parts: list[str] = [] -> for node in cycle: -> if node.startswith("msg:"): -> formatted_parts.append(node[4:]) # Strip "msg:" prefix -> elif node.startswith("term:"): -> formatted_parts.append(f"-{node[5:]}") # Strip "term:", add "-" - -> cycle_str = " -> ".join(formatted_parts) - - # Determine cycle type for appropriate message -> has_messages = any(n.startswith("msg:") for n in cycle) -> has_terms = any(n.startswith("term:") for n in cycle) - -> if has_messages and has_terms: -> msg = f"Circular cross-reference: {cycle_str}" -> elif has_terms: -> msg = f"Circular term reference: {cycle_str}" -> else: -> msg = f"Circular message reference: {cycle_str}" - -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_CIRCULAR_REFERENCE.name, -> message=msg, -> context=cycle_str, -> severity=WarningSeverity.CRITICAL, -> ) -> ) - -> return warnings - - -> def _build_dependency_graph( -> messages_dict: dict[str, Message], -> terms_dict: dict[str, Term], -> *, -> known_messages: frozenset[str] | None = None, -> known_terms: frozenset[str] | None = None, -> known_msg_deps: dict[str, set[str]] | None = None, -> known_term_deps: dict[str, set[str]] | None = None, -> ) -> dict[str, set[str]]: -> """Build unified dependency graph for messages and terms. - -> Creates a graph with type-prefixed nodes (msg:name, term:name) for -> both cycle detection and chain depth analysis. - -> Args: -> messages_dict: Map of message IDs to Message nodes from current resource -> terms_dict: Map of term IDs to Term nodes from current resource -> known_messages: Optional set of message IDs already in bundle -> known_terms: Optional set of term IDs already in bundle -> known_msg_deps: Optional dependency map for known messages. Maps message ID -> to set of prefixed dependencies (e.g., {"msg:foo", "term:bar"}). -> known_term_deps: Optional dependency map for known terms. - -> Returns: -> Graph as adjacency list (node -> set of dependencies) -> """ -> graph: dict[str, set[str]] = {} - - # Helper to resolve a reference string to a graph node key. - # References may be attribute-qualified ("msg.attr") or bare ("msg"). -> def _resolve_msg_ref(ref: str) -> str | None: -> """Resolve a message reference to its graph node key, or None if unknown.""" -> if "." in ref: - # Attribute-qualified reference (e.g., "msg.tooltip") -> base, attr = ref.split(".", 1) -> if base in messages_dict or (known_messages and base in known_messages): -> return f"msg:{base}.{attr}" - # Bare message reference -> elif ref in messages_dict or (known_messages and ref in known_messages): -> return f"msg:{ref}" -> return None - -> def _resolve_term_ref(ref: str) -> str | None: -> """Resolve a term reference to its graph node key, or None if unknown.""" -> if "." in ref: - # Attribute-qualified reference (e.g., "-term.attr") -> base, attr = ref.split(".", 1) -> if base in terms_dict or (known_terms and base in known_terms): -> return f"term:{base}.{attr}" -> elif ref in terms_dict or (known_terms and ref in known_terms): -> return f"term:{ref}" -> return None - - # Add message nodes with attribute-granular dependencies. - # Each attribute gets its own node in the graph to avoid false positive - # cycles when msg.a references msg.b (non-cyclic intra-message reference). -> for msg_name, message in messages_dict.items(): -> refs_by_attr = extract_references_by_attribute(message) - -> for attr_name, (msg_refs, term_refs) in refs_by_attr.items(): -> node_key = f"msg:{msg_name}" if attr_name is None else f"msg:{msg_name}.{attr_name}" - -> deps: set[str] = set() -> for ref in msg_refs: -> resolved = _resolve_msg_ref(ref) -> if resolved is not None: -> deps.add(resolved) -> for ref in term_refs: -> resolved = _resolve_term_ref(ref) -> if resolved is not None: -> deps.add(resolved) -> graph[node_key] = deps - - # Add term nodes with all their dependencies (both message and term refs) -> for term_name, term in terms_dict.items(): -> refs_by_attr = extract_references_by_attribute(term) - -> for attr_name, (msg_refs, term_refs) in refs_by_attr.items(): -> node_key = f"term:{term_name}" if attr_name is None else f"term:{term_name}.{attr_name}" - -> term_deps: set[str] = set() -> for ref in msg_refs: -> resolved = _resolve_msg_ref(ref) -> if resolved is not None: -> term_deps.add(resolved) -> for ref in term_refs: -> resolved = _resolve_term_ref(ref) -> if resolved is not None: -> term_deps.add(resolved) -> graph[node_key] = term_deps - - # Add known entries as nodes WITH their actual dependencies if provided. - # This enables detection of cross-resource cycles involving dependencies OF known entries. -> if known_messages: -> for known_msg in known_messages: -> node_key = f"msg:{known_msg}" -> if node_key not in graph: - # Use provided dependencies if available, otherwise empty set -> if known_msg_deps and known_msg in known_msg_deps: -> graph[node_key] = known_msg_deps[known_msg].copy() -> else: -> graph[node_key] = set() - -> if known_terms: -> for known_term in known_terms: -> node_key = f"term:{known_term}" -> if node_key not in graph: - # Use provided dependencies if available, otherwise empty set -> if known_term_deps and known_term in known_term_deps: -> graph[node_key] = known_term_deps[known_term].copy() -> else: -> graph[node_key] = set() - -> return graph - - -> def _compute_longest_paths( -> graph: dict[str, set[str]], -> ) -> dict[str, tuple[int, list[str]]]: -> """Compute longest path from each node using memoized iterative DFS. - -> Args: -> graph: Dependency graph as adjacency list - -> Returns: -> Map from node to (path_length, path_nodes) -> """ -> longest_path: dict[str, tuple[int, list[str]]] = {} -> in_stack: set[str] = set() - -> for start in graph: -> if start in longest_path: -> continue - - # Iterative DFS with two-phase processing -> stack: list[tuple[str, int, list[str]]] = [(start, 0, list(graph.get(start, set())))] - -> while stack: -> node, phase, children = stack.pop() - -> if phase == 0: -> if node in longest_path or node in in_stack: -> continue - -> in_stack.add(node) -> stack.append((node, 1, children)) - -> for child in children: -> if child not in longest_path and child not in in_stack: -> stack.append((child, 0, list(graph.get(child, set())))) -> else: -> in_stack.discard(node) -> best_depth, best_path = 0, [] -> for child in children: -> if child in longest_path: -> child_depth, child_path = longest_path[child] -> if child_depth + 1 > best_depth: -> best_depth = child_depth + 1 -> best_path = child_path -> longest_path[node] = (best_depth, [node, *best_path]) - -> return longest_path - - -> def _detect_long_chains( -> graph: dict[str, set[str]], -> max_depth: int = MAX_DEPTH, -> ) -> list[ValidationWarning]: -> """Detect ALL reference chains that exceed maximum depth. - -> Computes longest path from each node and reports ALL chains exceeding -> max_depth. This allows users to see and fix all depth violations in a -> single validation pass rather than iteratively discovering them. - -> Args: -> graph: Unified dependency graph with type-prefixed nodes (msg:name, term:name) -> max_depth: Maximum allowed chain depth (default: MAX_DEPTH) - -> Returns: -> List of warnings for ALL chains exceeding max_depth, sorted by depth -> (deepest first) for prioritized remediation -> """ -> if not graph: -> return [] - -> longest_paths = _compute_longest_paths(graph) - - # Collect ALL chains exceeding max_depth -> exceeding_chains: list[tuple[int, list[str], str]] = [] -> for node, (depth, path) in longest_paths.items(): - # Only report chains starting from their origin (first node in path) - # to avoid duplicate warnings for the same chain from different nodes -> if depth > max_depth and path and path[0] == node: -> exceeding_chains.append((depth, path, node)) - -> if not exceeding_chains: -> return [] - - # Sort by depth descending (deepest chains first) for prioritized remediation -> exceeding_chains.sort(key=lambda x: x[0], reverse=True) - -> warnings: list[ValidationWarning] = [] -> for chain_depth, chain_path, _origin in exceeding_chains: - # Format path for human-readable output -> formatted = [ -> node[4:] if node.startswith("msg:") else f"-{node[5:]}" -> for node in chain_path[:10] -> ] -> chain_str = " -> ".join(formatted) -> if len(chain_path) > 10: -> chain_str += f" -> ... ({len(chain_path)} total)" - -> warnings.append( -> ValidationWarning( -> code=DiagnosticCode.VALIDATION_CHAIN_DEPTH_EXCEEDED.name, -> message=( -> f"Reference chain depth ({chain_depth}) exceeds maximum ({max_depth}); " -> f"will fail at runtime with MAX_DEPTH_EXCEEDED" -> ), -> context=chain_str, -> severity=WarningSeverity.WARNING, -> ) -> ) - -> return warnings - - -> def validate_resource( -> source: str, -> *, -> parser: FluentParserV1 | None = None, -> known_messages: frozenset[str] | None = None, -> known_terms: frozenset[str] | None = None, -> known_msg_deps: dict[str, set[str]] | None = None, -> known_term_deps: dict[str, set[str]] | None = None, -> ) -> ValidationResult: -> """Validate FTL resource without adding to a bundle. - -> Standalone validation function for CI/CD pipelines and tooling. -> Performs syntax validation (errors) and semantic validation (warnings). - -> Validation passes: -> 1. Syntax errors: Parse failures (Junk entries) -> 2. Structural: Duplicate IDs, messages without values -> 3. References: Undefined message/term references -> 4. Cycles: Circular dependency detection -> 5. Chain depth: Reference chains exceeding MAX_DEPTH -> 6. Semantic: Fluent spec compliance (E0001-E0013) - -> Args: -> source: FTL file content -> parser: Optional parser instance (creates default if not provided) -> known_messages: Optional set of message IDs already in bundle (for -> cross-resource reference validation) -> known_terms: Optional set of term IDs already in bundle (for -> cross-resource reference validation) -> known_msg_deps: Optional dependency graph for known messages. Maps message -> ID to set of dependencies (prefixed: "msg:name", "term:name"). Enables -> detection of cross-resource cycles involving dependencies OF known entries. -> known_term_deps: Optional dependency graph for known terms. Maps term ID -> to set of dependencies (prefixed: "msg:name", "term:name"). - -> Returns: -> ValidationResult with parse errors and semantic warnings - -> Raises: -> TypeError: If source is not a string (e.g., bytes were passed). - -> Example: -> >>> from ftllexengine.validation import validate_resource -> >>> result = validate_resource(ftl_source) -> >>> if not result.is_valid: -> ... for error in result.errors: -> ... print(f"Error [{error.code}]: {error.message}") -> >>> for warning in result.warnings: -> ... print(f"Warning [{warning.code}]: {warning.message}") - -> Thread Safety: -> Thread-safe. Creates isolated parser if not provided. -> """ - # Type validation at API boundary - type hints are not enforced at runtime. - # Defensive check: users may pass bytes despite str annotation. -> if not isinstance(source, str): -! msg = ( # type: ignore[unreachable] -! f"source must be str, not {type(source).__name__}. " -! "Decode bytes to str (e.g., source.decode('utf-8')) before calling validate_resource()." -! ) -! raise TypeError(msg) - -> if parser is None: - # Local import to avoid import-time overhead for callers not providing parser -> from ftllexengine.syntax.parser import ( # noqa: PLC0415 -> FluentParserV1 as ParserClass, -> ) - -> parser = ParserClass() - - # Normalize line endings to match parser behavior (CRLF/CR -> LF). - # The parser normalizes internally before creating AST spans, so we must - # use the same normalized source for LineOffsetCache to ensure position - # lookups match AST span positions correctly. -> normalized_source = re.sub(r"\r\n?", "\n", source) - -> resource = parser.parse(source) - - # Build line offset cache once for all validation passes (O(n)) - # Uses normalized_source to match AST span positions -> line_cache = LineOffsetCache(normalized_source) - - # Pass 1: Extract syntax errors from Junk entries -> errors = _extract_syntax_errors(resource, line_cache) - - # Pass 2: Collect entries and check structural issues -> messages_dict, terms_dict, structure_warnings = _collect_entries( -> resource, -> line_cache, -> known_messages=known_messages, -> known_terms=known_terms, -> ) - - # Pass 3: Check undefined references (with bundle context if provided) -> ref_warnings = _check_undefined_references( -> messages_dict, -> terms_dict, -> line_cache, -> known_messages=known_messages, -> known_terms=known_terms, -> ) - - # Build unified dependency graph once for both cycle and chain detection - # Avoids redundant graph construction (important for large resources) -> dependency_graph = _build_dependency_graph( -> messages_dict, -> terms_dict, -> known_messages=known_messages, -> known_terms=known_terms, -> known_msg_deps=known_msg_deps, -> known_term_deps=known_term_deps, -> ) - - # Pass 4: Detect circular dependencies -> cycle_warnings = _detect_circular_references(dependency_graph) - - # Pass 5: Detect long reference chains (would fail at runtime) -> chain_warnings = _detect_long_chains(dependency_graph) - - # Pass 6: Fluent spec compliance (E0001-E0013) -> semantic_validator = SemanticValidator() -> semantic_result = semantic_validator.validate(resource) -> semantic_annotations = semantic_result.annotations - - # Combine all warnings -> all_warnings = structure_warnings + ref_warnings + cycle_warnings + chain_warnings - -> logger.debug( -> "Validated resource: %d errors, %d warnings, %d annotations", -> len(errors), -> len(all_warnings), -> len(semantic_annotations), -> ) - -> return ValidationResult( -> errors=tuple(errors), -> warnings=tuple(all_warnings), -> annotations=semantic_annotations, -> ) diff --git a/src/ftllexengine/validation/resource_graph.py b/src/ftllexengine/validation/resource_graph.py new file mode 100644 index 00000000..459c18b8 --- /dev/null +++ b/src/ftllexengine/validation/resource_graph.py @@ -0,0 +1,262 @@ +"""Dependency-graph validation helpers for resource validation. + +Split from ``validation.resource`` so the main validation entry point stays +focused on orchestration while graph construction and traversal remain in one +cohesive unit. +""" + +from __future__ import annotations + +from typing import TYPE_CHECKING + +from ftllexengine.constants import MAX_DEPTH +from ftllexengine.core.reference_graph import detect_cycles, make_cycle_key +from ftllexengine.diagnostics import ValidationWarning, WarningSeverity +from ftllexengine.diagnostics.codes import DiagnosticCode +from ftllexengine.syntax.reference_extraction import extract_references_by_attribute + +if TYPE_CHECKING: + from collections.abc import Callable, Mapping + + from ftllexengine.syntax import Message, Term + +__all__ = [ + "_compute_longest_paths", + "build_dependency_graph", + "detect_circular_references", + "detect_long_chains", +] + + +def detect_circular_references( + graph: dict[str, set[str]], + *, + detect_cycles_fn: Callable[[dict[str, set[str]]], list[list[str]]] = detect_cycles, + make_cycle_key_fn: Callable[[list[str]], str] = make_cycle_key, +) -> list[ValidationWarning]: + """Detect circular dependencies in a unified reference graph.""" + warnings: list[ValidationWarning] = [] + seen_cycle_keys: set[str] = set() + + for cycle in detect_cycles_fn(graph): + cycle_key = make_cycle_key_fn(cycle) + if cycle_key in seen_cycle_keys: + continue + seen_cycle_keys.add(cycle_key) + + formatted_parts: list[str] = [] + for node in cycle: + if node.startswith("msg:"): + formatted_parts.append(node[4:]) + elif node.startswith("term:"): + formatted_parts.append(f"-{node[5:]}") + + cycle_str = " -> ".join(formatted_parts) + has_messages = any(node.startswith("msg:") for node in cycle) + has_terms = any(node.startswith("term:") for node in cycle) + + if has_messages and has_terms: + message = f"Circular cross-reference: {cycle_str}" + elif has_terms: + message = f"Circular term reference: {cycle_str}" + else: + message = f"Circular message reference: {cycle_str}" + + warnings.append( + ValidationWarning( + code=DiagnosticCode.VALIDATION_CIRCULAR_REFERENCE, + message=message, + context=cycle_str, + severity=WarningSeverity.CRITICAL, + ) + ) + + return warnings + + +def _resolve_reference( + ref: str, + prefix: str, + local_entries: dict[str, Message] | dict[str, Term], + known_ids: frozenset[str] | None, +) -> str | None: + """Resolve a reference string to a graph node key.""" + if "." in ref: + base, attr = ref.split(".", 1) + if base in local_entries or (known_ids and base in known_ids): + return f"{prefix}:{base}.{attr}" + elif ref in local_entries or (known_ids and ref in known_ids): + return f"{prefix}:{ref}" + return None + + +def _add_entry_nodes( + entries: dict[str, Message] | dict[str, Term], + prefix: str, + messages_dict: dict[str, Message], + terms_dict: dict[str, Term], + known_messages: frozenset[str] | None, + known_terms: frozenset[str] | None, + graph: dict[str, set[str]], +) -> None: + """Add nodes and edges for a set of entries to the dependency graph.""" + for name, entry in entries.items(): + refs_by_attr = extract_references_by_attribute(entry) + + for attr_name, (msg_refs, term_refs) in refs_by_attr.items(): + node_key = f"{prefix}:{name}" if attr_name is None else f"{prefix}:{name}.{attr_name}" + deps: set[str] = set() + + for ref in msg_refs: + resolved = _resolve_reference(ref, "msg", messages_dict, known_messages) + if resolved is not None: + deps.add(resolved) + + for ref in term_refs: + resolved = _resolve_reference(ref, "term", terms_dict, known_terms) + if resolved is not None: + deps.add(resolved) + + graph[node_key] = deps + + +def _add_known_entries( + known_ids: frozenset[str] | None, + prefix: str, + known_deps: Mapping[str, frozenset[str]] | None, + graph: dict[str, set[str]], +) -> None: + """Add pre-existing bundle entries to the graph.""" + if not known_ids: + return + + for known_id in known_ids: + node_key = f"{prefix}:{known_id}" + if node_key not in graph: + if known_deps and known_id in known_deps: + graph[node_key] = set(known_deps[known_id]) + else: + graph[node_key] = set() + + +def build_dependency_graph( + messages_dict: dict[str, Message], + terms_dict: dict[str, Term], + *, + known_messages: frozenset[str] | None = None, + known_terms: frozenset[str] | None = None, + known_msg_deps: Mapping[str, frozenset[str]] | None = None, + known_term_deps: Mapping[str, frozenset[str]] | None = None, +) -> dict[str, set[str]]: + """Build a unified dependency graph for messages and terms.""" + graph: dict[str, set[str]] = {} + + _add_entry_nodes( + messages_dict, + "msg", + messages_dict, + terms_dict, + known_messages, + known_terms, + graph, + ) + _add_entry_nodes( + terms_dict, + "term", + messages_dict, + terms_dict, + known_messages, + known_terms, + graph, + ) + + _add_known_entries(known_messages, "msg", known_msg_deps, graph) + _add_known_entries(known_terms, "term", known_term_deps, graph) + + return graph + + +def _compute_longest_paths( + graph: dict[str, set[str]], +) -> dict[str, tuple[int, list[str]]]: + """Compute the longest path from each node using memoized iterative DFS.""" + longest_path: dict[str, tuple[int, list[str]]] = {} + in_stack: set[str] = set() + + for start in graph: + if start in longest_path: + continue + + stack: list[tuple[str, int, list[str]]] = [(start, 0, list(graph.get(start, set())))] + + while stack: + node, phase, children = stack.pop() + + if phase == 0: + if node in longest_path: + continue + + in_stack.add(node) + stack.append((node, 1, children)) + stack.extend( + (child, 0, list(graph.get(child, set()))) + for child in children + if child not in longest_path and child not in in_stack + ) + else: + in_stack.discard(node) + best_depth, best_path = 0, [] + for child in children: + if child in longest_path: + child_depth, child_path = longest_path[child] + if child_depth + 1 > best_depth: + best_depth = child_depth + 1 + best_path = child_path + longest_path[node] = (best_depth, [node, *best_path]) + + return longest_path + + +def detect_long_chains( + graph: dict[str, set[str]], + max_depth: int = MAX_DEPTH, +) -> list[ValidationWarning]: + """Detect reference chains that exceed the maximum runtime depth.""" + if not graph: + return [] + + longest_paths = _compute_longest_paths(graph) + exceeding_chains: list[tuple[int, list[str], str]] = [] + + for node, (depth, path) in longest_paths.items(): + if depth > max_depth and path and path[0] == node: + exceeding_chains.append((depth, path, node)) + + if not exceeding_chains: + return [] + + exceeding_chains.sort(key=lambda item: item[0], reverse=True) + + warnings: list[ValidationWarning] = [] + for chain_depth, chain_path, _origin in exceeding_chains: + formatted = [ + node[4:] if node.startswith("msg:") else f"-{node[5:]}" + for node in chain_path[:10] + ] + chain_str = " -> ".join(formatted) + if len(chain_path) > 10: + chain_str += f" -> ... ({len(chain_path)} total)" + + warnings.append( + ValidationWarning( + code=DiagnosticCode.VALIDATION_CHAIN_DEPTH_EXCEEDED, + message=( + f"Reference chain depth ({chain_depth}) exceeds maximum ({max_depth}); " + f"will fail at runtime with MAX_DEPTH_EXCEEDED" + ), + context=chain_str, + severity=WarningSeverity.WARNING, + ) + ) + + return warnings diff --git a/tests/helpers/fluentjs_fixtures.py b/tests/helpers/fluentjs_fixtures.py new file mode 100644 index 00000000..241867e3 --- /dev/null +++ b/tests/helpers/fluentjs_fixtures.py @@ -0,0 +1,145 @@ +"""Vendored Fluent.js structure fixtures for offline spec-conformance tests. + +The FTL payloads below are copied from the Fluent.js reference implementation's +``fluent-syntax/test/fixtures_structure`` directory. The expected structural +counts come from the corresponding upstream JSON AST fixtures, so the tests +remain deterministic without depending on live network fetches. +""" + +from __future__ import annotations + +from dataclasses import dataclass + +__all__ = ["SOURCE_BASE_URL", "STRUCTURE_FIXTURES", "StructureFixture"] + +SOURCE_BASE_URL = ( + "https://github.com/projectfluent/fluent.js/tree/main/" + "fluent-syntax/test/fixtures_structure" +) + + +@dataclass(frozen=True, slots=True) +class StructureFixture: + """Vendored Fluent.js structure fixture plus derived reference counts.""" + + description: str + ftl: str + expected_messages: int + expected_terms: int + + +STRUCTURE_FIXTURES: dict[str, StructureFixture] = { + "simple_message": StructureFixture( + description="Basic message", + ftl="foo = Foo\n", + expected_messages=1, + expected_terms=0, + ), + "multiline_pattern": StructureFixture( + description="Multiline pattern", + ftl=( + "key01 = Value\n" + " Continued here.\n\n" + "key02 =\n" + " Value\n" + " Continued here.\n\n" + '# ERROR "Continued" looks like a new message.\n' + '# key03 parses fine with just "Value".\n' + "key03 =\n" + " Value\n" + "Continued here\n" + " and here.\n\n" + '# ERROR "Continued" and "and" look like new messages\n' + '# key04 parses fine with just "Value".\n' + "key04 =\n" + " Value\n" + "Continued here\n" + "and even here.\n" + ), + expected_messages=4, + expected_terms=0, + ), + "multiline_with_placeables": StructureFixture( + description="Pattern with placeables", + ftl=( + "key =\n" + " Foo { bar }\n" + " Baz\n" + ), + expected_messages=1, + expected_terms=0, + ), + "select_expressions": StructureFixture( + description="Select expressions", + ftl=( + "# ERROR No blanks are allowed between * and [.\n" + "err01 = { $sel ->\n" + " * [key] Value\n" + "}\n\n" + "# ERROR Missing default variant.\n" + "err02 = { $sel ->\n" + " [key] Value\n" + "}\n" + ), + expected_messages=0, + expected_terms=0, + ), + "blank_lines": StructureFixture( + description="Blank lines handling", + ftl=( + "### NOTE: Disable final newline insertion and trimming when editing this file.\n\n" + "key01 = Value 01\n\n" + "key02 = Value 02\n\n\n" + "key03 =\n\n" + " Value 03\n\n" + " Continued\n\n" + '# There are four spaces on the line between "Value 04" and "Continued".\n' + "key04 =\n\n" + " Value 04\n" + " \n" + " Continued\n\n" + '# There are four spaces on the line following "Value 05".\n' + "key05 =\n" + " Value 05\n" + " \n" + '# There are four spaces on the line following "Value 06".\n' + "key06 = Value 06\n" + " " + ), + expected_messages=6, + expected_terms=0, + ), + "term": StructureFixture( + description="Simple term", + ftl=( + "-term =\n" + " { $case ->\n" + " *[uppercase] Term\n" + " [lowercase] term\n" + " }\n" + " .attr = a\n\n" + "key01 = {-term}\n" + "key02 = {-term()}\n" + 'key03 = {-term(case: "uppercase")}\n\n\n' + "key04 =\n" + " { -term.attr ->\n" + " [a] { -term } A\n" + " [b] { -term() } B\n" + " *[x] X\n" + " }\n\n" + "-err1 =\n" + "-err2 =\n" + " .attr = Attribute\n" + "--err3 = Error\n" + "err4 = { --err4 }\n" + ), + expected_messages=4, + expected_terms=1, + ), + "empty_resource": StructureFixture( + description="Empty FTL file", + ftl="", + expected_messages=0, + expected_terms=0, + ), +} diff --git a/tests/test_analysis_graph.py b/tests/test_analysis_graph.py index 50ec19d0..70fdfb8c 100644 --- a/tests/test_analysis_graph.py +++ b/tests/test_analysis_graph.py @@ -16,7 +16,9 @@ from hypothesis import strategies as st import ftllexengine.analysis.graph as _graph_mod +import ftllexengine.core.reference_graph as _core_graph_mod from ftllexengine.analysis.graph import ( + _canonicalize_cycle, detect_cycles, entry_dependency_set, make_cycle_key, @@ -134,6 +136,14 @@ def test_property_prefix_preserves_identity( class TestMakeCycleKey: """Tests for make_cycle_key canonical display format.""" + def test_private_canonicalize_cycle_wrapper(self) -> None: + """Compatibility wrapper delegates to the canonical tuple helper.""" + assert _canonicalize_cycle(["term:b", "term:a", "term:b"]) == ( + "term:a", + "term:b", + "term:a", + ) + def test_empty_cycle_yields_empty_string(self) -> None: """Empty input produces empty key.""" assert make_cycle_key([]) == "" @@ -559,3 +569,17 @@ def test_max_graph_dfs_stack_push_guard_fires( # Function must not raise and must return a valid list assert isinstance(cycles, list) assert all(isinstance(c, list) for c in cycles) + + def test_monkeypatched_limits_do_not_leak_into_core_module( + self, monkeypatch: pytest.MonkeyPatch, + ) -> None: + """Compatibility wrapper restores core graph limits after monkeypatch runs.""" + original_max_cycles = _core_graph_mod.MAX_DETECTED_CYCLES + original_max_stack = _core_graph_mod.MAX_GRAPH_DFS_STACK + monkeypatch.setattr(_graph_mod, "MAX_DETECTED_CYCLES", 1) + monkeypatch.setattr(_graph_mod, "MAX_GRAPH_DFS_STACK", 2) + + detect_cycles({"a": {"a"}}) + + assert original_max_cycles == _core_graph_mod.MAX_DETECTED_CYCLES + assert original_max_stack == _core_graph_mod.MAX_GRAPH_DFS_STACK diff --git a/tests/test_architecture_contract.py b/tests/test_architecture_contract.py new file mode 100644 index 00000000..702309d8 --- /dev/null +++ b/tests/test_architecture_contract.py @@ -0,0 +1,254 @@ +"""Architecture contract tests for import direction and workflow hygiene.""" + +from __future__ import annotations + +import ast +import re +import shutil +import subprocess +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent +SRC_ROOT = REPO_ROOT / "src" / "ftllexengine" + +LAYER_ORDER = { + "core": 0, + "diagnostics": 1, + "syntax": 2, + "validation": 3, + "analysis": 4, + "introspection": 4, + "parsing": 5, + "runtime": 6, + "localization": 7, +} + +PATH_HACK_PATTERNS = ( + re.compile(r"\bsys\.path\.(?:insert|append)\("), + re.compile(r"\bPYTHONPATH=src\b"), + re.compile(r'PYTHONPATH"\]\s*='), + re.compile(r"\bexport\s+PYTHONPATH=.*\bsrc\b"), +) +LIVE_NETWORK_TEST_PATTERNS = ( + re.compile(r"\burllib\.request\b"), + re.compile(r"\burlopen\("), + re.compile(r"raw\.githubusercontent\.com"), +) + +VERSION_PROVENANCE_PATTERN = re.compile(r"\b(?:Added|Pre|Post|Prior to)\s+v\d+\.\d+\.\d+\b|v\d+\.\d+\.\d+\+") + +CODE_MODULE_LINE_BUDGETS = { + "src/ftllexengine/runtime/bundle.py": 900, + "src/ftllexengine/runtime/cache.py": 700, + "src/ftllexengine/runtime/locale_context.py": 500, + "src/ftllexengine/runtime/locale_formatting.py": 400, + "src/ftllexengine/runtime/resolver.py": 600, + "src/ftllexengine/introspection/iso.py": 700, + "src/ftllexengine/localization/orchestrator.py": 400, + "src/ftllexengine/parsing/currency.py": 650, + "src/ftllexengine/parsing/dates.py": 350, + "src/ftllexengine/syntax/serializer.py": 700, +} + + +def _module_name(path: Path) -> str: + relative = path.relative_to(REPO_ROOT / "src").with_suffix("") + return ".".join(relative.parts) + + +def _layer_name(module_name: str) -> str | None: + parts = module_name.split(".") + if len(parts) < 2 or parts[0] != "ftllexengine": + return None + return parts[1] if parts[1] in LAYER_ORDER else None + + +def _resolve_import(importer: str, node: ast.ImportFrom) -> str | None: + package_parts = importer.split(".")[:-1] + if node.level: + package_parts = package_parts[: len(package_parts) - node.level + 1] + if node.module: + return ".".join([*package_parts, node.module]) + return ".".join(package_parts) if package_parts else None + + +def _git_visible_repo_files() -> list[Path]: + """List tracked and unignored files that currently exist in the worktree.""" + git = shutil.which("git") + assert git is not None + result = subprocess.run( + [git, "ls-files", "--cached", "--others", "--exclude-standard", "-z"], + check=True, + capture_output=True, + cwd=REPO_ROOT, + ) + files: list[Path] = [] + for raw_path in result.stdout.split(b"\0"): + if not raw_path: + continue + path = REPO_ROOT / raw_path.decode("utf-8") + if path.is_file(): + files.append(path) + return files + + +def test_internal_modules_do_not_reverse_layer_dependencies() -> None: + """Non-facade modules should only import within or below their own layer.""" + violations: list[str] = [] + + for path in sorted(SRC_ROOT.rglob("*.py")): + if path.name == "__init__.py": + continue + + importer = _module_name(path) + importer_layer = _layer_name(importer) + if importer_layer is None: + continue + + tree = ast.parse(path.read_text(encoding="utf-8"), filename=str(path)) + for node in ast.walk(tree): + if isinstance(node, ast.Import): + for alias in node.names: + if not alias.name.startswith("ftllexengine."): + continue + imported_layer = _layer_name(alias.name) + if imported_layer and LAYER_ORDER[imported_layer] > LAYER_ORDER[importer_layer]: + violations.append( + f"{importer} ({importer_layer}) imports {alias.name} ({imported_layer})" + ) + elif isinstance(node, ast.ImportFrom): + imported = _resolve_import(importer, node) + if imported is None or not imported.startswith("ftllexengine."): + continue + imported_layer = _layer_name(imported) + if imported_layer and LAYER_ORDER[imported_layer] > LAYER_ORDER[importer_layer]: + violations.append( + f"{importer} ({importer_layer}) imports {imported} ({imported_layer})" + ) + + assert violations == [] + + +def test_repo_avoids_legacy_import_path_hacks() -> None: + """Code and docs should not rely on sys.path or PYTHONPATH src injection.""" + offenders: list[str] = [] + scan_roots = ( + REPO_ROOT / "src", + REPO_ROOT / "tests", + REPO_ROOT / "scripts", + REPO_ROOT / "docs", + REPO_ROOT / "examples", + REPO_ROOT / "README.md", + ) + + paths: list[Path] = [] + for root in scan_roots: + if root.is_file(): + paths.append(root) + elif root.exists(): + paths.extend(p for p in root.rglob("*") if p.suffix in {".py", ".sh", ".md"}) + + for path in sorted(paths): + if path == Path(__file__).resolve(): + continue + text = path.read_text(encoding="utf-8") + for pattern in PATH_HACK_PATTERNS: + if pattern.search(text): + offenders.append(f"{path.relative_to(REPO_ROOT)}: {pattern.pattern}") + + assert offenders == [] + + +def test_tests_do_not_depend_on_live_network_fixture_fetches() -> None: + """Test fixtures should be vendored instead of fetched over the live network.""" + offenders: list[str] = [] + + for path in sorted((REPO_ROOT / "tests").rglob("*.py")): + if path == Path(__file__).resolve(): + continue + text = path.read_text(encoding="utf-8") + for pattern in LIVE_NETWORK_TEST_PATTERNS: + if pattern.search(text): + offenders.append(f"{path.relative_to(REPO_ROOT)}: {pattern.pattern}") + + assert offenders == [] + + +def test_docs_avoid_deep_localization_types_imports() -> None: + """Public docs should reference stable facades, not helper submodules.""" + offenders: list[str] = [] + doc_paths = [REPO_ROOT / "README.md", *sorted((REPO_ROOT / "docs").glob("*.md"))] + + for path in doc_paths: + text = path.read_text(encoding="utf-8") + if "ftllexengine.localization.types" in text: + offenders.append(str(path.relative_to(REPO_ROOT))) + + assert offenders == [] + + +def test_parser_grammar_modules_stay_split() -> None: + """Parser grammar implementation should remain partitioned instead of collapsing back.""" + parser_root = SRC_ROOT / "syntax" / "parser" + expected_modules = ( + parser_root / "context.py", + parser_root / "patterns.py", + parser_root / "expressions.py", + parser_root / "entries.py", + ) + + missing = [str(path.relative_to(REPO_ROOT)) for path in expected_modules if not path.exists()] + assert missing == [] + + rules_path = parser_root / "rules.py" + assert rules_path.exists() + assert len(rules_path.read_text(encoding="utf-8").splitlines()) <= 80 + + +def test_repo_has_no_generated_cover_artifacts_in_tree() -> None: + """Generated coverage/cache artifacts should not live in the repository tree.""" + offenders = [ + str(path.relative_to(REPO_ROOT)) + for path in _git_visible_repo_files() + if re.search(r"(^|/)__pycache__/|\.pyc$|,cover$|\.cover$", str(path)) + ] + assert offenders == [] + + +def test_repo_avoids_version_provenance_annotations_outside_changelog() -> None: + """Historical version provenance belongs in CHANGELOG.md, not code or examples.""" + offenders: list[str] = [] + for root in (REPO_ROOT / "src", REPO_ROOT / "tests", REPO_ROOT / "examples"): + for path in sorted(root.rglob("*")): + if path.suffix not in {".py", ".md", ".ini", ".pyi"}: + continue + text = path.read_text(encoding="utf-8") + if VERSION_PROVENANCE_PATTERN.search(text): + offenders.append(str(path.relative_to(REPO_ROOT))) + + assert offenders == [] + + +def test_public_examples_avoid_thread_local_storage_patterns() -> None: + """Examples should model explicit ownership instead of threading.local().""" + offenders: list[str] = [] + for path in ( + REPO_ROOT / "examples" / "thread_safety.py", + REPO_ROOT / "examples" / "README_TYPE_CHECKING.md", + ): + if "threading.local" in path.read_text(encoding="utf-8"): + offenders.append(str(path.relative_to(REPO_ROOT))) + + assert offenders == [] + + +def test_core_runtime_modules_stay_under_line_budgets() -> None: + """Large internal modules should remain split by responsibility.""" + offenders: list[str] = [] + for relative_path, max_lines in CODE_MODULE_LINE_BUDGETS.items(): + path = REPO_ROOT / relative_path + line_count = len(path.read_text(encoding="utf-8").splitlines()) + if line_count > max_lines: + offenders.append(f"{relative_path}: {line_count} > {max_lines}") + + assert offenders == [] diff --git a/tests/test_coverage_policy.py b/tests/test_coverage_policy.py new file mode 100644 index 00000000..b08e48ff --- /dev/null +++ b/tests/test_coverage_policy.py @@ -0,0 +1,29 @@ +"""Tests enforcing the repository coverage policy configuration.""" + +from __future__ import annotations + +import re +import tomllib +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parent.parent + + +def test_pyproject_enforces_full_line_and_branch_coverage() -> None: + """Coverage config should require 100% and track branches.""" + pyproject = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8")) + + coverage_run = pyproject["tool"]["coverage"]["run"] + coverage_report = pyproject["tool"]["coverage"]["report"] + + assert coverage_run["branch"] is True + assert coverage_report["fail_under"] == 100.0 + + +def test_scripts_test_sh_uses_same_coverage_threshold() -> None: + """The main test script should match the pyproject coverage policy.""" + content = (REPO_ROOT / "scripts" / "test.sh").read_text(encoding="utf-8") + + match = re.search(r"^DEFAULT_COV_LIMIT=(\d+)$", content, re.MULTILINE) + assert match is not None + assert int(match.group(1)) == 100 diff --git a/tests/test_documentation_tooling.py b/tests/test_documentation_tooling.py new file mode 100644 index 00000000..84342e18 --- /dev/null +++ b/tests/test_documentation_tooling.py @@ -0,0 +1,417 @@ +"""Regression tests for documentation tooling and source docstring policy.""" + +from __future__ import annotations + +import doctest +import importlib +import importlib.util +import inspect +import pkgutil +import re +import subprocess +import sys +import tomllib +from pathlib import Path +from tempfile import TemporaryDirectory +from types import ModuleType + +REPO_ROOT = Path(__file__).resolve().parent.parent +SRC_ROOT = REPO_ROOT / "src" +DOCUMENTED_MODULES = ( + "ftllexengine", + "ftllexengine.runtime", + "ftllexengine.localization", + "ftllexengine.syntax", + "ftllexengine.parsing", + "ftllexengine.diagnostics", + "ftllexengine.introspection", + "ftllexengine.validation", +) +DOCUMENTED_REPO_SCRIPTS = ( + "check.sh", + "scripts/validate_docs.py", + "scripts/validate_version.py", + "scripts/run_examples.py", + "scripts/lint.sh", + "scripts/test.sh", + "scripts/fuzz_hypofuzz.sh", + "scripts/fuzz_atheris.sh", +) +ROUTE_NAME_OVERRIDES: dict[str, dict[str, str]] = { + "ftllexengine.syntax": { + "ParseResult": "ftllexengine.syntax.ParseResult", + }, +} +UNDOCUMENTED_REFERENCE_ALIASES = ("InlineExpression", "VariantKey") +REFERENCE_DOC_LINE_BUDGET = 450 + + +def _load_script_module(name: str, path: Path) -> ModuleType: + """Load a repository script as an importable module for testing.""" + spec = importlib.util.spec_from_file_location(name, path) + assert spec is not None + assert spec.loader is not None + module = importlib.util.module_from_spec(spec) + + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +def _index_routes() -> dict[str, tuple[Path, str]]: + """Parse the API routing table from docs/DOC_00_Index.md.""" + index_path = REPO_ROOT / "docs" / "DOC_00_Index.md" + text = index_path.read_text(encoding="utf-8") + routes: dict[str, tuple[Path, str]] = {} + + row_pattern = re.compile( + r"^\| `([^`]+)` \| \[([^\]]+)\]\(([^)]+)\) \| `([^`]+)` \|$", + re.MULTILINE, + ) + for symbol, _label, rel_target, section in row_pattern.findall(text): + routes[symbol] = ((index_path.parent / rel_target).resolve(), section) + return routes + + +def _symbol_headings(md_path: Path) -> set[str]: + """Return the set of second-level symbol headings in a markdown file.""" + text = md_path.read_text(encoding="utf-8") + return set(re.findall(r"^## `([^`]+)`$", text, re.MULTILINE)) + + +def _extract_signature_block(md_path: Path, section: str) -> str | None: + """Return the python signature block for one AFAD reference entry.""" + text = md_path.read_text(encoding="utf-8") + pattern = re.compile( + rf"^## `{re.escape(section)}`\n\n.*?### Signature\n```python\n(.*?)\n```", + re.MULTILINE | re.DOTALL, + ) + match = pattern.search(text) + return match.group(1).strip() if match else None + + +def test_validate_docs_configuration_tracks_runnable_python_docs() -> None: + """validate_docs should know which markdown files contain runnable Python.""" + validate_docs = _load_script_module( + "validate_docs_script", REPO_ROOT / "scripts" / "validate_docs.py" + ) + + config = validate_docs.CheckConfig.from_pyproject(REPO_ROOT) + + assert "README.md" in config.scan_globs + assert "examples/**/*.md" in config.scan_globs + assert "fuzz_atheris/README.md" in config.scan_globs + assert "README.md" in config.python_exec_globs + assert "docs/CUSTOM_FUNCTIONS_GUIDE.md" in config.python_exec_globs + assert "docs/LOCALE_GUIDE.md" in config.python_exec_globs + assert "docs/MIGRATION.md" in config.python_exec_globs + assert "docs/PARSING_GUIDE.md" in config.python_exec_globs + assert "docs/QUICK_REFERENCE.md" in config.python_exec_globs + assert "docs/TYPE_HINTS_GUIDE.md" in config.python_exec_globs + assert "docs/VALIDATION_GUIDE.md" in config.python_exec_globs + assert ( + validate_docs.validate_python_code("from ftllexengine import __version__", REPO_ROOT) + is None + ) + assert validate_docs.validate_python_code("raise RuntimeError('boom')", REPO_ROOT) is not None + + +def test_validate_version_uses_afad_frontmatter_version_contract() -> None: + """validate_version should enforce the AFAD v3.5 `version:` frontmatter key.""" + pyproject = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8")) + + validate_version = _load_script_module( + "validate_version_script", REPO_ROOT / "scripts" / "validate_version.py" + ) + + assert pyproject["tool"]["validate-version"]["frontmatter_key"] == "version" + + with TemporaryDirectory() as td: + root = Path(td) + (root / "doc.md").write_text( + "---\nversion: 0.0.1\n---\n\nbody\n", + encoding="utf-8", + ) + result = validate_version.check_configurable_frontmatter( + {"project": {"version": "9.9.9"}}, + root, + ["doc.md"], + "version", + ) + + assert result.passed is False + assert result.severity == validate_version.SEVERITY_DOC + assert "(expected '9.9.9')" in result.message + + +def test_source_doctest_prompts_are_explicitly_non_executable() -> None: + """Raw doctest prompts in source docstrings must be explicitly skipped.""" + offenders: list[str] = [] + + for path in sorted((SRC_ROOT / "ftllexengine").rglob("*.py")): + for lineno, line in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + if ">>>" in line and "+SKIP" not in line: + offenders.append(f"{path}:{lineno}:{line}") + + assert offenders == [] + + +def test_doctest_sweep_is_clean_under_repo_docstring_policy() -> None: + """A package-wide doctest sweep should pass under the repository policy.""" + package = importlib.import_module("ftllexengine") + module_names = ["ftllexengine"] + [ + m.name for m in pkgutil.walk_packages(package.__path__, prefix="ftllexengine.") + ] + + failures: list[str] = [] + for name in module_names: + module = importlib.import_module(name) + result = doctest.testmod(module, optionflags=doctest.ELLIPSIS, report=False) + if result.failed: + failures.append(f"{name}: failed={result.failed} attempted={result.attempted}") + + assert failures == [] + + +def test_api_index_covers_public_root_exports_and_existing_sections() -> None: + """Public root exports should always be routed to a real API reference section.""" + package = importlib.import_module("ftllexengine") + routes = _index_routes() + public_exports = set(package.__all__) + + missing = sorted(public_exports - set(routes)) + assert missing == [] + + for symbol, (target_path, section) in routes.items(): + assert target_path.exists(), symbol + assert section in _symbol_headings(target_path), symbol + + +def test_api_index_covers_documented_module_exports() -> None: + """Reference index should cover the exported surfaces the docs claim to cover.""" + routes = _index_routes() + + expected_routes: set[str] = set() + for module_name in DOCUMENTED_MODULES: + module = importlib.import_module(module_name) + overrides = ROUTE_NAME_OVERRIDES.get(module_name, {}) + for symbol in getattr(module, "__all__", []): + expected_routes.add(overrides.get(symbol, symbol)) + + missing = sorted(expected_routes - set(routes)) + assert missing == [] + + for symbol in expected_routes: + target_path, section = routes[symbol] + assert target_path.exists(), symbol + assert section in _symbol_headings(target_path), symbol + + +def test_api_index_covers_documented_repo_scripts() -> None: + """Reference index should route the repo's supported operational scripts.""" + routes = _index_routes() + + missing = sorted(set(DOCUMENTED_REPO_SCRIPTS) - set(routes)) + assert missing == [] + + for symbol in DOCUMENTED_REPO_SCRIPTS: + target_path, section = routes[symbol] + assert target_path.exists(), symbol + assert section in _symbol_headings(target_path), symbol + + +def test_reference_doc_import_statements_resolve() -> None: + """Reference-doc import examples should stay copy-paste correct.""" + import_pattern = re.compile(r"- Import: `([^`]+)`") + doc_paths = sorted((REPO_ROOT / "docs").glob("DOC_*.md")) + + failures: list[str] = [] + for path in doc_paths: + for statement in import_pattern.findall(path.read_text(encoding="utf-8")): + result = subprocess.run( + [sys.executable, "-c", f"{statement}\nprint('OK')\n"], + cwd=SRC_ROOT, + capture_output=True, + text=True, + check=False, + ) + if result.returncode != 0: + stderr = result.stderr.strip() or result.stdout.strip() + failures.append(f"{path.name}: {statement} -> {stderr}") + + assert failures == [] + + +def test_reference_doc_signatures_avoid_undocumented_internal_aliases() -> None: + """Reference docs should not leak undocumented submodule-only alias names.""" + doc_paths = sorted((REPO_ROOT / "docs").glob("DOC_*.md")) + offenders: list[str] = [] + + for path in doc_paths: + text = path.read_text(encoding="utf-8") + for alias in UNDOCUMENTED_REFERENCE_ALIASES: + if alias in text: + offenders.append(f"{path.name}: {alias}") + + assert offenders == [] + + +def test_reference_docs_stay_split_under_line_budget() -> None: + """Reference docs should stay partitioned instead of regressing into god files.""" + offenders: list[str] = [] + + for path in sorted((REPO_ROOT / "docs").glob("DOC_*.md")): + line_count = len(path.read_text(encoding="utf-8").splitlines()) + if line_count > REFERENCE_DOC_LINE_BUDGET: + offenders.append(f"{path.name}: {line_count}") + + assert offenders == [] + + +def test_check_script_covers_full_quality_surface() -> None: + """Top-level check.sh should orchestrate the repo's supported validation gates.""" + text = (REPO_ROOT / "check.sh").read_text(encoding="utf-8") + + required_commands = ( + "scripts/validate_version.py", + "scripts/validate_docs.py", + "scripts/run_examples.py", + "./scripts/lint.sh", + "./scripts/test.sh", + "./scripts/fuzz_hypofuzz.sh --preflight", + "./scripts/fuzz_atheris.sh --corpus", + "./scripts/fuzz_atheris.sh graph --time", + "./scripts/fuzz_atheris.sh introspection --time", + ) + + for command in required_commands: + assert command in text + + +def test_atheris_corpus_health_bootstraps_its_venv() -> None: + """Atheris corpus health should create its dedicated venv before execution.""" + text = (REPO_ROOT / "scripts" / "fuzz_atheris.sh").read_text(encoding="utf-8") + marker = "run_corpus_health() {" + assert marker in text + body = text.split(marker, 1)[1].split("}", 1)[0] + + assert "ensure_atheris_venv" in body or "run_diagnostics" in body + + +def test_atheris_bootstrap_discovers_uv_managed_python_313() -> None: + """Atheris bootstrap should recognize uv-managed Python 3.13 interpreters.""" + text = (REPO_ROOT / "scripts" / "fuzz_atheris.sh").read_text(encoding="utf-8") + + assert "uv python find 3.13" in text + + +def test_atheris_bootstrap_recreates_broken_venv_dirs() -> None: + """Atheris bootstrap should discard stale venv directories with broken Python links.""" + text = (REPO_ROOT / "scripts" / "fuzz_atheris.sh").read_text(encoding="utf-8") + + assert '[[ -d "$ATHERIS_VENV" ]] && [[ ! -x "$ATHERIS_PYTHON" ]]' in text + + +def test_reference_signature_parameter_names_match_live_exports() -> None: + """AFAD reference signatures should keep parameter names aligned with live exports.""" + routes = _index_routes() + issues: list[str] = [] + + for module_name in DOCUMENTED_MODULES: + module = importlib.import_module(module_name) + overrides = ROUTE_NAME_OVERRIDES.get(module_name, {}) + for symbol in getattr(module, "__all__", []): + route_name = overrides.get(symbol, symbol) + if route_name not in routes: + continue + + target_path, section = routes[route_name] + signature_block = _extract_signature_block(target_path, section) + if signature_block is None or ( + "def " not in signature_block and "class " not in signature_block + ): + continue + + obj = getattr(module, symbol) + try: + signature = inspect.signature(obj) + except (TypeError, ValueError): + continue + + if "def __init__(" in signature_block: + params_source = signature_block.split("def __init__(", 1)[1].split(") ->", 1)[0] + elif signature_block.lstrip().startswith("def "): + params_source = signature_block.split("(", 1)[1].rsplit(")", 1)[0] + else: + continue + + doc_params = [ + name + for name in re.findall(r"\b([A-Za-z_][A-Za-z0-9_]*)\s*:", params_source) + if name != "self" + ] + live_params = [ + param.name + for param in signature.parameters.values() + if param.name != "self" + ] + if live_params != doc_params: + issues.append( + f"{route_name}: live={live_params!r} doc={doc_params!r}" + ) + + assert issues == [] + + +def test_sdist_includes_root_frontmatter_docs_and_readme() -> None: + """Root markdown docs with frontmatter should ship in the source distribution.""" + pyproject = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8")) + only_include = set(pyproject["tool"]["hatch"]["build"]["targets"]["sdist"]["only-include"]) + + expected = {"README.md"} + for path in REPO_ROOT.glob("*.md"): + if path.name == "README.md": + continue + text = path.read_text(encoding="utf-8") + if text.startswith("---\n") and "\nafad:" in text: + expected.add(path.name) + + missing = sorted(expected - only_include) + assert missing == [] + + +def test_release_protocol_lives_under_docs_and_repo_links_follow_it() -> None: + """Release protocol should live under docs/ and repo surfaces should link there.""" + release_doc = REPO_ROOT / "docs" / "RELEASE_PROTOCOL.md" + assert release_doc.exists() + assert not (REPO_ROOT / "RELEASE_PROTOCOL.md").exists() + + readme = (REPO_ROOT / "README.md").read_text(encoding="utf-8") + contributing = (REPO_ROOT / "CONTRIBUTING.md").read_text(encoding="utf-8") + pyproject = tomllib.loads((REPO_ROOT / "pyproject.toml").read_text(encoding="utf-8")) + + assert "(docs/RELEASE_PROTOCOL.md)" in readme + assert "(docs/RELEASE_PROTOCOL.md)" in contributing + + frontmatter_globs = set(pyproject["tool"]["validate-version"]["frontmatter_globs"]) + only_include = set(pyproject["tool"]["hatch"]["build"]["targets"]["sdist"]["only-include"]) + + assert "RELEASE_PROTOCOL.md" not in frontmatter_globs + assert "RELEASE_PROTOCOL.md" not in only_include + + +def test_public_docs_and_examples_avoid_fix_later_markers() -> None: + """Public-facing docs and examples should not ship TODO/FIXME/HACK markers.""" + offenders: list[str] = [] + scan_paths = [REPO_ROOT / "README.md", *sorted((REPO_ROOT / "docs").glob("*.md"))] + scan_paths.extend(sorted((REPO_ROOT / "examples").rglob("*.py"))) + scan_paths.extend(sorted((REPO_ROOT / "examples").glob("*.md"))) + + marker_re = re.compile(r"\b(TODO|FIXME|HACK)\b") + + for path in scan_paths: + for lineno, line in enumerate(path.read_text(encoding="utf-8").splitlines(), 1): + if marker_re.search(line): + offenders.append(f"{path.relative_to(REPO_ROOT)}:{lineno}:{line.strip()}") + + assert offenders == [] diff --git a/tests/test_init_module.py b/tests/test_init_module.py index 0bc78bbc..5fe1b6ce 100644 --- a/tests/test_init_module.py +++ b/tests/test_init_module.py @@ -395,7 +395,7 @@ def test_all_exports_count(self) -> None: """ import ftllexengine - assert len(ftllexengine.__all__) == 57 + assert len(ftllexengine.__all__) == 60 def test_babel_optional_exports_are_in_all(self) -> None: """Babel-optional symbols (FluentBundle, etc.) are listed in __all__.""" diff --git a/tests/test_regression_currency_decimal.py b/tests/test_regression_currency_decimal.py index e46cae46..6841cbf4 100644 --- a/tests/test_regression_currency_decimal.py +++ b/tests/test_regression_currency_decimal.py @@ -215,7 +215,7 @@ def test_empty_graph_no_warnings(self) -> None: class TestIntegration: - """Integration tests for v0.94.0 fixes.""" + """Integration tests for currency decimal handling.""" def test_currency_in_fluent_bundle(self) -> None: """Currency formatting in FluentBundle uses ISO decimals.""" diff --git a/tests/test_runtime_bundle_property.py b/tests/test_runtime_bundle_property.py index 60e450f7..230cfe3c 100644 --- a/tests/test_runtime_bundle_property.py +++ b/tests/test_runtime_bundle_property.py @@ -45,6 +45,11 @@ "fr", "fr_FR", ]) +log_source_paths = st.from_regex( + r"[A-Za-z0-9_-][A-Za-z0-9_. /-]{0,31}", + fullmatch=True, +) + # ============================================================================ # PROPERTY TESTS - TERM ATTRIBUTES IN CYCLE DETECTION @@ -168,7 +173,7 @@ def test_parse_error_with_source_path_logging(self, caplog: pytest.LogCaptureFix if log_messages: assert any("error_file.ftl" in msg for msg in log_messages) - @given(locale=locale_codes, filename=st.text(min_size=1)) # Remove arbitrary max + @given(locale=locale_codes, filename=log_source_paths) @settings(suppress_health_check=[HealthCheck.function_scoped_fixture]) def test_source_path_appears_in_logs_property( self, @@ -177,9 +182,6 @@ def test_source_path_appears_in_logs_property( caplog: pytest.LogCaptureFixture, ) -> None: """Property: source_path always appears in error/warning logs when provided.""" - assume(filename.isprintable()) - assume(not filename.startswith(".")) - bundle = FluentBundle(locale) invalid_ftl = "invalid syntax $$$" diff --git a/tests/test_runtime_cache_integrity.py b/tests/test_runtime_cache_integrity.py index 591aed91..4efc9364 100644 --- a/tests/test_runtime_cache_integrity.py +++ b/tests/test_runtime_cache_integrity.py @@ -1023,7 +1023,7 @@ def put_different(i: int) -> None: # ============================================================================ -# CACHE KEY COLLISION PREVENTION TESTS (v0.93.0) +# CACHE KEY COLLISION PREVENTION TESTS # ============================================================================ diff --git a/tests/test_runtime_depth_guard.py b/tests/test_runtime_depth_guard.py index 52294b8a..1010dabd 100644 --- a/tests/test_runtime_depth_guard.py +++ b/tests/test_runtime_depth_guard.py @@ -16,9 +16,7 @@ from hypothesis import strategies as st from ftllexengine.constants import MAX_DEPTH -from ftllexengine.core.depth_guard import DepthGuard, depth_clamp -from ftllexengine.diagnostics import ErrorCategory, FrozenFluentError -from ftllexengine.diagnostics.templates import ErrorTemplate +from ftllexengine.core.depth_guard import DepthGuard, DepthLimitExceededError, depth_clamp # ============================================================================ # Construction @@ -95,15 +93,15 @@ def test_context_manager_nested(self) -> None: assert guard.current_depth == 0 def test_context_manager_raises_on_exceeded(self) -> None: - """Context manager raises FrozenFluentError when depth exceeded.""" + """Context manager raises DepthLimitExceededError when depth exceeded.""" guard = DepthGuard(max_depth=3) with guard, guard, guard: # noqa: SIM117 - nested with - with pytest.raises(FrozenFluentError) as exc_info: + with pytest.raises(DepthLimitExceededError) as exc_info: with guard: pass - assert exc_info.value.category == ErrorCategory.RESOLUTION + assert exc_info.value.max_depth == 3 assert "3" in str(exc_info.value) def test_context_manager_depth_restoration_on_error(self) -> None: @@ -140,7 +138,7 @@ def test_state_not_corrupted_on_enter_failure(self) -> None: with guard, guard: assert guard.current_depth == 2 - with pytest.raises(FrozenFluentError), guard: + with pytest.raises(DepthLimitExceededError), guard: pass # current_depth must still be 2, not 3 assert guard.current_depth == 2 @@ -164,13 +162,13 @@ def test_check_passes_below_limit(self) -> None: guard.check() # Should not raise def test_check_raises_at_limit(self) -> None: - """check() raises FrozenFluentError when depth >= max_depth.""" + """check() raises DepthLimitExceededError when depth >= max_depth.""" guard = DepthGuard(max_depth=2) - with guard, guard, pytest.raises(FrozenFluentError) as exc_info: + with guard, guard, pytest.raises(DepthLimitExceededError) as exc_info: guard.check() - assert exc_info.value.category == ErrorCategory.RESOLUTION + assert exc_info.value.max_depth == 2 assert "2" in str(exc_info.value) def test_check_raises_above_limit(self) -> None: @@ -178,45 +176,40 @@ def test_check_raises_above_limit(self) -> None: guard = DepthGuard(max_depth=2) guard.current_depth = 5 - with pytest.raises(FrozenFluentError) as exc_info: + with pytest.raises(DepthLimitExceededError) as exc_info: guard.check() - assert exc_info.value.category == ErrorCategory.RESOLUTION + assert exc_info.value.max_depth == 2 # ============================================================================ -# FrozenFluentError from DepthGuard +# DepthLimitExceededError from DepthGuard # ============================================================================ class TestDepthGuardError: - """Test FrozenFluentError raised by DepthGuard.""" + """Test DepthLimitExceededError raised by DepthGuard.""" - def test_error_is_frozen_fluent_error(self) -> None: - """DepthGuard raises FrozenFluentError with RESOLUTION category.""" + def test_error_is_depth_limit_error(self) -> None: + """DepthGuard raises DepthLimitExceededError with the configured limit.""" guard = DepthGuard(max_depth=1) - with guard, pytest.raises(FrozenFluentError) as exc_info, guard: + with guard, pytest.raises(DepthLimitExceededError) as exc_info, guard: pass - assert exc_info.value.category == ErrorCategory.RESOLUTION + assert exc_info.value.max_depth == 1 assert isinstance(exc_info.value, Exception) - def test_error_carries_diagnostic(self) -> None: - """DepthGuard error carries diagnostic template data.""" - diagnostic = ErrorTemplate.depth_exceeded(50) - error = FrozenFluentError( - str(diagnostic), - ErrorCategory.RESOLUTION, - diagnostic=diagnostic, - ) - + def test_error_records_max_depth(self) -> None: + """DepthLimitExceededError stores the configured limit.""" + error = DepthLimitExceededError(50) + assert error.max_depth == 50 assert "50" in str(error) def test_error_includes_max_depth_value(self) -> None: """Error message includes the configured max_depth.""" guard = DepthGuard(max_depth=2) - with guard, guard, pytest.raises(FrozenFluentError, match="2"), guard: + with guard, guard, pytest.raises(DepthLimitExceededError, match="2"), guard: pass @@ -276,7 +269,7 @@ def test_property_context_manager_enforces_limit(max_depth: int) -> None: For any max_depth in [1, 100]: - Nesting max_depth times succeeds - - Nesting max_depth + 1 times raises FrozenFluentError + - Nesting max_depth + 1 times raises DepthLimitExceededError """ event(f"max_depth={max_depth}") guard = DepthGuard(max_depth=max_depth) @@ -290,9 +283,9 @@ def nest(remaining: int) -> None: nest(max_depth) assert guard.current_depth == 0 - with pytest.raises(FrozenFluentError) as exc_info: + with pytest.raises(DepthLimitExceededError) as exc_info: nest(max_depth + 1) - assert exc_info.value.category == ErrorCategory.RESOLUTION + assert exc_info.value.max_depth == max_depth @given(max_depth=st.integers(min_value=1, max_value=100)) @@ -336,9 +329,9 @@ def test_property_check_consistent_with_context_manager( guard.current_depth = target_depth if target_depth >= max_depth: - with pytest.raises(FrozenFluentError): + with pytest.raises(DepthLimitExceededError): guard.check() - with pytest.raises(FrozenFluentError), guard: + with pytest.raises(DepthLimitExceededError), guard: pass else: guard.check() # Should not raise diff --git a/tests/test_runtime_locale_context_property.py b/tests/test_runtime_locale_context_property.py index 7072840e..1d751561 100644 --- a/tests/test_runtime_locale_context_property.py +++ b/tests/test_runtime_locale_context_property.py @@ -494,9 +494,8 @@ def test_format_number_min_max_clamping_never_truncates( ) -> None: """When min > max, output has at least min decimal places (clamping, not error). - Pre-v0.145.0: min=3, max=2 would quantize to 2 places but format with - 3 required digits, producing "1.230" — wrong and incoherent. - Post-v0.145.0: max is clamped to max(min, max), output is consistent. + When minimumFractionDigits exceeds maximumFractionDigits, the effective + maximum is clamped upward so quantization and formatting stay coherent. Events emitted: - relation=min_gt_max: min > max (clamping applies) diff --git a/tests/test_runtime_resolver_core.py b/tests/test_runtime_resolver_core.py index 27ea44f7..e494372a 100644 --- a/tests/test_runtime_resolver_core.py +++ b/tests/test_runtime_resolver_core.py @@ -10,6 +10,7 @@ from __future__ import annotations +import importlib from datetime import UTC, datetime from decimal import Decimal from unittest.mock import patch @@ -475,6 +476,15 @@ def _nest_guards(self, guards: list[GlobalDepthGuard]) -> None: class TestResolverModuleExports: """Test resolver module export boundaries.""" + @staticmethod + def _import_fluent_value_from_resolver() -> object: + module = importlib.import_module("ftllexengine.runtime.resolver") + try: + return module.__dict__["FluentValue"] + except KeyError as exc: + msg = "cannot import name 'FluentValue'" + raise ImportError(msg) from exc + def test_fluent_value_available_from_function_bridge(self) -> None: """FluentValue is available from function_bridge module.""" from ftllexengine.runtime.function_bridge import ( @@ -486,11 +496,7 @@ def test_fluent_value_available_from_function_bridge(self) -> None: def test_importing_fluent_value_from_resolver_fails(self) -> None: """FluentValue is not importable from resolver module.""" with pytest.raises(ImportError, match="cannot import name 'FluentValue'"): - # pylint: disable=unused-import - # Intentional ImportError test — FluentValue removed from resolver exports. - from ftllexengine.runtime.resolver import ( # noqa: F401 - lazy import and re-export - FluentValue, - ) + self._import_fluent_value_from_resolver() def test_fluent_resolver_still_exported_from_resolver(self) -> None: """FluentResolver is exported from resolver module.""" @@ -711,7 +717,7 @@ class CustomObj: def __str__(self) -> str: return "custom" - assert resolver._format_value(CustomObj()) == "custom" # type: ignore[arg-type] + assert resolver._format_value(CustomObj()) == "custom" # ============================================================================ diff --git a/tests/test_runtime_security_expansion.py b/tests/test_runtime_security_expansion.py index 4ecd00c7..b0bf4468 100644 --- a/tests/test_runtime_security_expansion.py +++ b/tests/test_runtime_security_expansion.py @@ -6,14 +6,10 @@ from __future__ import annotations -import sys - import pytest from hypothesis import event, given, settings from hypothesis import strategies as st -sys.path.insert(0, "src") - from ftllexengine.constants import DEFAULT_MAX_EXPANSION_SIZE from ftllexengine.diagnostics import DiagnosticCode from ftllexengine.runtime.bundle import FluentBundle diff --git a/tests/test_runtime_survivability.py b/tests/test_runtime_survivability.py index bef12e8b..3ae184f2 100644 --- a/tests/test_runtime_survivability.py +++ b/tests/test_runtime_survivability.py @@ -315,7 +315,7 @@ def test_concurrent(thread_count, operation_count): # ============================================================================= -# INTEGRITY AND CORRECTNESS TESTS (v0.80.0+) +# INTEGRITY AND CORRECTNESS TESTS # ============================================================================= class TestRuntimeIntegrityBehavior: diff --git a/tests/test_rwlock_coverage.py b/tests/test_rwlock_coverage.py index 4d1aab21..490843fb 100644 --- a/tests/test_rwlock_coverage.py +++ b/tests/test_rwlock_coverage.py @@ -9,6 +9,7 @@ import threading import time +from typing import cast import pytest @@ -374,7 +375,8 @@ def test_active_writer_consistency(self) -> None: assert lock._active_writer is None lock._acquire_write() - assert lock._active_writer == current_thread_id + active_writer = cast("int", lock._active_writer) + assert active_writer == current_thread_id lock._release_write() assert lock._active_writer is None diff --git a/tests/test_syntax_parser_attributes.py b/tests/test_syntax_parser_attributes.py index f558c8c3..37239fbc 100644 --- a/tests/test_syntax_parser_attributes.py +++ b/tests/test_syntax_parser_attributes.py @@ -1,7 +1,7 @@ """Parser tests for message attributes (.attribute = pattern). Phase 3B: Attribute Parsing Tests -Coverage Target: +60-80 lines of parser.py (lines 1148-1199 and 1145-1182) +Focus: attribute parsing, multiline patterns, and real-world examples Tests cover: - Basic attribute parsing diff --git a/tests/test_syntax_parser_entries.py b/tests/test_syntax_parser_entries.py index c4cd2a32..b345a8ee 100644 --- a/tests/test_syntax_parser_entries.py +++ b/tests/test_syntax_parser_entries.py @@ -23,18 +23,18 @@ TextElement, ) from ftllexengine.syntax.cursor import Cursor, ParseResult -from ftllexengine.syntax.parser import rules +from ftllexengine.syntax.parser import entries as entry_rules +from ftllexengine.syntax.parser.context import ParseContext from ftllexengine.syntax.parser.core import FluentParserV1 -from ftllexengine.syntax.parser.rules import ( - ParseContext, +from ftllexengine.syntax.parser.entries import ( parse_attribute, parse_comment, parse_message, parse_message_attributes, parse_message_header, - parse_pattern, parse_term, ) +from ftllexengine.syntax.parser.patterns import parse_pattern from ftllexengine.syntax.parser.whitespace import ( skip_multiline_pattern_start, ) @@ -159,7 +159,7 @@ def test_attributes_only(self) -> None: def test_pattern_mock_fails(self) -> None: """Returns None when parse_pattern returns None.""" with patch( - "ftllexengine.syntax.parser.rules.parse_pattern", + "ftllexengine.syntax.parser.entries.parse_pattern", return_value=None, ): assert parse_message( @@ -169,10 +169,10 @@ def test_pattern_mock_fails(self) -> None: def test_attributes_mock_fails(self) -> None: """Returns None when parse_message_attributes returns None.""" with patch.object( - rules, "parse_message_attributes", + entry_rules, "parse_message_attributes", return_value=None, ): - assert rules.parse_message( + assert entry_rules.parse_message( Cursor("msg = Value\n", 0) ) is None @@ -215,7 +215,7 @@ def test_valid_attribute(self) -> None: def test_pattern_mock_fails(self) -> None: """Returns None when parse_pattern returns None.""" with patch( - "ftllexengine.syntax.parser.rules.parse_pattern", + "ftllexengine.syntax.parser.entries.parse_pattern", return_value=None, ): assert parse_attribute( @@ -318,7 +318,7 @@ def test_trailing_space_breaks_attr_loop(self) -> None: def test_pattern_mock_fails(self) -> None: """Returns None when parse_pattern returns None.""" with patch( - "ftllexengine.syntax.parser.rules.parse_pattern", + "ftllexengine.syntax.parser.entries.parse_pattern", return_value=None, ): assert parse_term( @@ -337,7 +337,7 @@ def mock_parse_pattern( return ParseResult(empty_pattern, cursor) with patch( - "ftllexengine.syntax.parser.rules.parse_pattern", + "ftllexengine.syntax.parser.entries.parse_pattern", side_effect=mock_parse_pattern, ): assert parse_term(Cursor(source, 0)) is None @@ -354,7 +354,7 @@ def mock_parse_pattern( return ParseResult(pattern, Cursor(source, 14)) with patch( - "ftllexengine.syntax.parser.rules.parse_pattern", + "ftllexengine.syntax.parser.entries.parse_pattern", side_effect=mock_parse_pattern, ): result = parse_term(Cursor(source, 0)) @@ -364,7 +364,7 @@ def mock_parse_pattern( def test_invalid_attribute_syntax(self) -> None: """Invalid attribute syntax restores cursor and breaks.""" source = "-term = Value\n.invalid" - original = rules.parse_attribute + original = entry_rules.parse_attribute def mock_attr(cursor, context=None): if ".invalid" in cursor.source[cursor.pos:]: @@ -372,7 +372,7 @@ def mock_attr(cursor, context=None): return original(cursor, context) with patch.object( - rules, "parse_attribute", side_effect=mock_attr + entry_rules, "parse_attribute", side_effect=mock_attr ): result = parse_term(Cursor(source, 0)) assert result is not None @@ -428,7 +428,7 @@ def mock_parse_pattern( return ParseResult(Pattern(elements=()), cursor) with patch( - "ftllexengine.syntax.parser.rules.parse_pattern", + "ftllexengine.syntax.parser.entries.parse_pattern", side_effect=mock_parse_pattern, ): assert parse_term(Cursor(source, 0)) is None diff --git a/tests/test_syntax_parser_error_recovery.py b/tests/test_syntax_parser_error_recovery.py index a4bd6c47..0ce64c77 100644 --- a/tests/test_syntax_parser_error_recovery.py +++ b/tests/test_syntax_parser_error_recovery.py @@ -67,10 +67,10 @@ def test_negative_sign_identifier_fallback_via_mock(self) -> None: """ with ( patch( - "ftllexengine.syntax.parser.rules.parse_number" + "ftllexengine.syntax.parser.expressions.parse_number" ) as mock_num, patch( - "ftllexengine.syntax.parser.rules.parse_identifier" + "ftllexengine.syntax.parser.expressions.parse_identifier" ) as mock_id, ): mock_num.return_value = ParseError("forced failure", Cursor("-test", 0)) @@ -138,7 +138,7 @@ def test_number_fails_defensive_line_1120(self) -> None: Requires mocking because parse_number is robust for digit start. """ with patch( - "ftllexengine.syntax.parser.rules.parse_number" + "ftllexengine.syntax.parser.expressions.parse_number" ) as mock: mock.return_value = ParseError("forced failure", Cursor("9)", 0)) assert parse_argument_expression(Cursor("9)", 0)) is None @@ -149,7 +149,7 @@ def test_identifier_fails_defensive_line_1139(self) -> None: Requires mocking because is_identifier_start guarantees success. """ with patch( - "ftllexengine.syntax.parser.rules.parse_identifier" + "ftllexengine.syntax.parser.expressions.parse_identifier" ) as mock: mock.return_value = ParseError("forced failure", Cursor("x)", 0)) assert parse_argument_expression(Cursor("x)", 0)) is None @@ -463,7 +463,7 @@ class TestDefensiveMocking: def test_parse_message_attrs_returns_none(self) -> None: """parse_message_attributes returns None (defensive).""" with patch( - "ftllexengine.syntax.parser.rules" + "ftllexengine.syntax.parser.entries" ".parse_message_attributes" ) as mock: mock.return_value = None @@ -474,7 +474,7 @@ def test_parse_message_attrs_returns_none(self) -> None: def test_parse_attribute_pattern_returns_none(self) -> None: """parse_pattern returns None in parse_attribute (defensive).""" with patch( - "ftllexengine.syntax.parser.rules.parse_pattern" + "ftllexengine.syntax.parser.entries.parse_pattern" ) as mock: mock.return_value = None assert parse_attribute( @@ -484,7 +484,7 @@ def test_parse_attribute_pattern_returns_none(self) -> None: def test_parse_term_pattern_returns_none(self) -> None: """parse_pattern returns None in parse_term (defensive).""" with patch( - "ftllexengine.syntax.parser.rules.parse_pattern" + "ftllexengine.syntax.parser.entries.parse_pattern" ) as mock: mock.return_value = None assert parse_term( @@ -494,7 +494,7 @@ def test_parse_term_pattern_returns_none(self) -> None: def test_parse_term_attrs_returns_none_line_2038(self) -> None: """Line 2038: parse_message_attributes returns None in term.""" with patch( - "ftllexengine.syntax.parser.rules" + "ftllexengine.syntax.parser.entries" ".parse_message_attributes" ) as mock: mock.return_value = None @@ -505,7 +505,7 @@ def test_parse_term_attrs_returns_none_line_2038(self) -> None: def test_parse_message_pattern_returns_none(self) -> None: """parse_pattern returns None in parse_message (defensive).""" with patch( - "ftllexengine.syntax.parser.rules.parse_pattern" + "ftllexengine.syntax.parser.entries.parse_pattern" ) as mock: mock.return_value = None assert parse_message( diff --git a/tests/test_syntax_parser_expression_coverage.py b/tests/test_syntax_parser_expression_coverage.py index 3a268db3..2ed40978 100644 --- a/tests/test_syntax_parser_expression_coverage.py +++ b/tests/test_syntax_parser_expression_coverage.py @@ -1,10 +1,10 @@ -"""Targeted tests for specific uncovered lines in expressions.py. +"""Targeted tests for specific expression-parser edge branches. Focuses on: -- Lines 117-118: Variant key starting with - that becomes identifier -- Line 307: Identifier parsing failure in argument expression -- Line 627: Identifier parsing failure in inline expression -- Line 740: Nesting depth exceeded in parse_placeable +- Variant-key fallback from number parsing to identifier parsing +- Identifier parsing failure in argument expressions +- Identifier parsing failure in inline expressions +- Nesting-depth rejection in parse_placeable """ from __future__ import annotations @@ -32,15 +32,15 @@ # ============================================================================ -class TestLines117To118VariantKeyMinusIdentifier: - """Test lines 117-118: variant key with - prefix that parses as identifier.""" +class TestVariantKeyMinusIdentifierFallback: + """Variant keys can fall back from number parsing to identifier parsing.""" def test_variant_key_minus_then_alpha_becomes_identifier(self) -> None: - """Test parse_variant_key with '-' followed by alpha (lines 117-118). + """parse_variant_key can recover from numeric parse failure. When variant key starts with '-' and next char is alpha, parse_number - fails, so we fall through to parse_identifier (lines 112-118). - To hit lines 117-118, we need parse_number to fail but parse_identifier + fails, so we fall through to parse_identifier. + To hit that fallback, we need parse_number to fail but parse_identifier to succeed. This requires mocking both functions. """ source = "-abc" @@ -51,15 +51,15 @@ def test_variant_key_minus_then_alpha_becomes_identifier(self) -> None: mock_id_result = ParseResult("abc", Cursor(source, 4)) with patch( - "ftllexengine.syntax.parser.rules.parse_number", + "ftllexengine.syntax.parser.expressions.parse_number", return_value=ParseError("forced failure", Cursor("-abc", 0)), ), patch( - "ftllexengine.syntax.parser.rules.parse_identifier", + "ftllexengine.syntax.parser.expressions.parse_identifier", return_value=mock_id_result, ): result = parse_variant_key(cursor) - # Should return Identifier created from string (lines 117-118) + # Should return Identifier created from the fallback parse result assert result is not None assert isinstance(result.value, Identifier) assert result.value.name == "abc" @@ -70,14 +70,14 @@ def test_variant_key_minus_then_alpha_becomes_identifier(self) -> None: # ============================================================================ -class TestLine307ArgumentExpressionIdentifierFailure: - """Test line 307: parse_argument_expression when identifier parsing fails.""" +class TestArgumentExpressionIdentifierFailure: + """parse_argument_expression returns None when identifier parsing fails.""" def test_argument_expression_identifier_fails_line_307(self) -> None: - """Test parse_argument_expression returns None when parse_identifier fails (line 307).""" + """parse_argument_expression returns None when parse_identifier fails.""" # Start with alpha char but have invalid identifier # (e.g., just 'a' followed by invalid char) - # To hit line 307, we need cursor.current.isalpha() to be True + # To hit this branch, we need cursor.current.isalpha() to be True # but parse_identifier to return None # This is hard to trigger naturally since parse_identifier is quite permissive @@ -87,12 +87,12 @@ def test_argument_expression_identifier_fails_line_307(self) -> None: cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_identifier", + "ftllexengine.syntax.parser.expressions.parse_identifier", return_value=ParseError("forced failure", Cursor("a999!!!", 0)), ): result = parse_argument_expression(cursor) - # Should return None when identifier parsing fails (line 307) + # Should return None when identifier parsing fails assert result is None @@ -101,22 +101,22 @@ def test_argument_expression_identifier_fails_line_307(self) -> None: # ============================================================================ -class TestLine627InlineExpressionIdentifierFailure: - """Test line 627: parse_inline_expression when identifier parsing fails.""" +class TestInlineExpressionIdentifierFailure: + """parse_inline_expression returns None when identifier parsing fails.""" def test_inline_expression_identifier_fails_line_627(self) -> None: - """Test parse_inline_expression returns None when parse_identifier fails (line 627).""" + """parse_inline_expression returns None when parse_identifier fails.""" source = "U999" # Starts with uppercase cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_identifier", + "ftllexengine.syntax.parser.expressions.parse_identifier", return_value=ParseError("forced failure", Cursor("U999", 0)), ): result = parse_inline_expression(cursor) - # Should return None when identifier parsing fails (line 627) + # Should return None when identifier parsing fails assert result is None @@ -125,11 +125,11 @@ def test_inline_expression_identifier_fails_line_627(self) -> None: # ============================================================================ -class TestLine740NestingDepthExceeded: - """Test line 740: parse_placeable when nesting depth is exceeded.""" +class TestPlaceableNestingDepthExceeded: + """parse_placeable returns None when nesting depth is exceeded.""" def test_placeable_nesting_depth_exceeded_line_740(self) -> None: - """Test parse_placeable returns None when nesting depth exceeded (line 740).""" + """parse_placeable returns None when nesting depth is exceeded.""" source = "$var}" cursor = Cursor(source, 0) @@ -138,7 +138,7 @@ def test_placeable_nesting_depth_exceeded_line_740(self) -> None: result = parse_placeable(cursor, context) - # Should return None due to depth exceeded (line 740) + # Should return None due to depth exceeded assert result is None def test_bundle_with_excessive_nesting(self) -> None: @@ -167,34 +167,34 @@ class TestAdditionalUncoveredLines: """Tests for other uncovered lines in expressions.py.""" def test_variant_missing_closing_bracket_line_177(self) -> None: - """Test variant missing ] (line 177).""" + """Variant parsing fails when the closing bracket is missing.""" source = "[one text" # Missing ] cursor = Cursor(source, 0) result = parse_variant(cursor) - # Should return None due to missing ] (line 177) + # Should return None due to the missing closing bracket assert result is None def test_variant_pattern_parse_fails_line_187(self) -> None: - """Test variant when pattern parsing fails (line 187).""" + """Variant parsing fails when the variant pattern parser fails.""" source = "[one] pattern" cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_simple_pattern", + "ftllexengine.syntax.parser.expressions.parse_simple_pattern", return_value=None, ): result = parse_variant(cursor) - # Should return None when pattern parsing fails (line 187) + # Should return None when pattern parsing fails assert result is None def test_string_literal_parse_fails_line_289(self) -> None: - """Test argument expression when string literal parsing fails (line 289).""" + """Argument parsing fails when string literal parsing fails.""" source = '"invalid' cursor = Cursor(source, 0) @@ -205,23 +205,23 @@ def test_string_literal_parse_fails_line_289(self) -> None: ): result = parse_argument_expression(cursor) - # Should return None when string parsing fails (line 289) + # Should return None when string parsing fails assert result is None def test_number_parse_fails_line_296(self) -> None: - """Test argument expression when number parsing fails (line 296).""" + """Argument parsing fails when number parsing fails.""" source = "123" cursor = Cursor(source, 0) # Patch in the module where it's used (expressions), not where it's defined with patch( - "ftllexengine.syntax.parser.rules.parse_number", + "ftllexengine.syntax.parser.expressions.parse_number", return_value=ParseError("forced failure", Cursor("123", 0)), ): result = parse_argument_expression(cursor) - # Should return None when number parsing fails (line 296) + # Should return None when number parsing fails assert result is None def test_function_name_lowercase_is_valid(self) -> None: @@ -240,7 +240,7 @@ def test_function_name_lowercase_is_valid(self) -> None: assert result.value.id.name == "lowercase" def test_named_argument_not_identifier_line_367(self) -> None: - """Test named argument when name is not identifier (line 367), soft recovery.""" + """Soft recovery when a named argument name is not an identifier.""" # This is hard to trigger directly, but we can test via function call bundle = FluentBundle("en_US", strict=False) # Try to use a non-identifier as named argument name @@ -265,44 +265,44 @@ def test_named_argument_value_not_literal_line_394(self) -> None: assert result is not None def test_term_reference_missing_dash_line_491(self) -> None: - """Test term reference without - prefix (line 491).""" + """Term references require the leading '-' prefix.""" source = "brand" # No - prefix cursor = Cursor(source, 0) result = parse_term_reference(cursor) - # Should return None without - prefix (line 491) + # Should return None without the required '-' prefix assert result is None def test_term_arguments_missing_closing_paren_line_533(self) -> None: - """Test term reference with arguments missing ) (line 533).""" + """Term-reference parsing fails when the closing ')' is missing.""" source = '-brand(case: "nom"' # Missing ) cursor = Cursor(source, 0) result = parse_term_reference(cursor) - # Should return None due to missing ) (line 533) + # Should return None due to the missing closing parenthesis assert result is None def test_inline_expression_variable_parse_fails_line_576(self) -> None: - """Test inline expression when variable parsing fails (line 576).""" + """Inline-expression parsing fails when variable parsing fails.""" source = "$var" cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_variable_reference", + "ftllexengine.syntax.parser.expressions.parse_variable_reference", return_value=None, ): result = parse_inline_expression(cursor) - # Should return None when variable parsing fails (line 576) + # Should return None when variable parsing fails assert result is None def test_inline_expression_string_parse_fails_line_584(self) -> None: - """Test inline expression when string parsing fails (line 584).""" + """Inline-expression parsing fails when string parsing fails.""" source = '"invalid' cursor = Cursor(source, 0) @@ -313,52 +313,52 @@ def test_inline_expression_string_parse_fails_line_584(self) -> None: ): result = parse_inline_expression(cursor) - # Should return None when string parsing fails (line 584) + # Should return None when string parsing fails assert result is None def test_inline_expression_number_parse_fails_line_602(self) -> None: - """Test inline expression when negative number parsing fails (line 602).""" + """Inline-expression parsing fails when negative-number parsing fails.""" source = "-123" cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_number", + "ftllexengine.syntax.parser.expressions.parse_number", return_value=ParseError("forced failure", Cursor("-123", 0)), ): result = parse_inline_expression(cursor) - # Should return None when number parsing fails (line 602) + # Should return None when number parsing fails assert result is None def test_inline_expression_digit_number_parse_fails_line_614(self) -> None: - """Test inline expression when positive number parsing fails (line 614).""" + """Inline-expression parsing fails when positive-number parsing fails.""" source = "123" cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_number", + "ftllexengine.syntax.parser.expressions.parse_number", return_value=ParseError("forced failure", Cursor("123", 0)), ): result = parse_inline_expression(cursor) - # Should return None when number parsing fails (line 614) + # Should return None when number parsing fails assert result is None def test_inline_expression_lowercase_identifier_fails_line_672(self) -> None: - """Test inline expression when lowercase identifier parsing fails (line 672).""" + """Inline-expression parsing fails when lowercase identifier parsing fails.""" source = "msg" cursor = Cursor(source, 0) with patch( - "ftllexengine.syntax.parser.rules.parse_identifier", + "ftllexengine.syntax.parser.expressions.parse_identifier", return_value=ParseError("forced failure", Cursor("msg", 0)), ): result = parse_inline_expression(cursor) - # Should return None when identifier parsing fails (line 672) + # Should return None when identifier parsing fails assert result is None def test_uppercase_message_reference_with_trailing_dot(self) -> None: @@ -402,8 +402,8 @@ def test_lowercase_message_reference_with_trailing_dot(self) -> None: assert result.cursor.pos == 4 def test_select_expression_missing_closing_brace_line_801(self) -> None: - """Test select expression missing } (line 801).""" - # To hit line 801, parse_placeable needs to successfully parse a select expression + """Select-expression parsing fails when the closing '}' is missing.""" + # To hit this branch, parse_placeable needs to successfully parse a select expression # but then find that cursor is not at } (either EOF or wrong character) # The easiest way is to create FTL that has valid select but no closing } @@ -419,7 +419,7 @@ def test_select_expression_missing_closing_brace_line_801(self) -> None: assert len(resource.entries) >= 1 def test_positional_after_named_argument_line_402(self) -> None: - """Test positional argument after named argument (line 402), soft recovery.""" + """Soft recovery when a positional argument follows a named argument.""" bundle = FluentBundle("en_US", strict=False) # Positional args must come before named args ftl = """msg = {NUMBER(style: "percent", $val)}""" diff --git a/tests/test_syntax_parser_functions.py b/tests/test_syntax_parser_functions.py index 7877aceb..f1bd1f9b 100644 --- a/tests/test_syntax_parser_functions.py +++ b/tests/test_syntax_parser_functions.py @@ -1,7 +1,6 @@ """Parser tests for FunctionReference (NUMBER, DATETIME, custom functions). -These tests cover 193 lines of parser code (lines 689-881) that were previously -at ZERO coverage. Function parsing includes: +These tests exercise function-call parsing, including: - Basic function calls: NUMBER($value) - Positional arguments: CUSTOM($a, $b, $c) - Named arguments: NUMBER($val, minimumFractionDigits: 2) @@ -9,7 +8,7 @@ - String/Number literals as arguments - Error cases: invalid syntax, argument ordering -Phase 3A Coverage Target: +193 lines (54% → 68% parser coverage) +Phase 3A focus: function-call grammar and argument handling """ from __future__ import annotations diff --git a/tests/test_syntax_parser_patterns.py b/tests/test_syntax_parser_patterns.py index 08e0dbde..b616e333 100644 --- a/tests/test_syntax_parser_patterns.py +++ b/tests/test_syntax_parser_patterns.py @@ -386,7 +386,7 @@ def test_placeable_parse_fails(self) -> None: """Returns None when placeable parsing fails.""" cursor = Cursor("Text {invalid", 0) with patch( - "ftllexengine.syntax.parser.rules.parse_placeable", + "ftllexengine.syntax.parser.expressions.parse_placeable", return_value=None, ): result = parse_simple_pattern(cursor) @@ -672,7 +672,7 @@ def test_placeable_parse_fails(self) -> None: """Returns None when parse_placeable fails.""" cursor = Cursor("Text {invalid", 0) with patch( - "ftllexengine.syntax.parser.rules.parse_placeable", + "ftllexengine.syntax.parser.expressions.parse_placeable", return_value=None, ): result = parse_pattern(cursor) diff --git a/tests/test_syntax_parser_systematic.py b/tests/test_syntax_parser_systematic.py index 9a338d38..7c3383d9 100644 --- a/tests/test_syntax_parser_systematic.py +++ b/tests/test_syntax_parser_systematic.py @@ -1,8 +1,8 @@ -"""Systematic error path testing for parser.py. +"""Systematic error path testing for syntax parser primitives. -This module provides comprehensive coverage of all error paths in the parser, -organized by parser method. Each test targets a specific uncovered line that -returns a Failure(ParseError(...)). +This module provides comprehensive coverage of parser error paths, organized +by parser method. Each test targets a specific failure branch that returns +``ParseError``. Testing Philosophy: - Every error path should have at least one test @@ -30,12 +30,12 @@ class TestParseNumberErrorPaths: """Error path tests for _parse_number method. Target coverage: - - Line 222: No digits after minus sign - - Line 234: No digits after decimal point + - No digits after minus sign + - No digits after decimal point """ def test_number_no_digits_after_minus(self): - """Line 222: '-' not followed by digit. + """'-' not followed by a digit fails. Example: test = { - } Trigger: Minus sign followed by non-digit or EOF @@ -48,7 +48,7 @@ def test_number_no_digits_after_minus(self): assert isinstance(result, ParseError) def test_number_no_digits_after_minus_eof(self): - """Line 222: '-' at end of string. + """'-' at end of string fails. Example: test = { - Trigger: Minus sign at EOF @@ -60,7 +60,7 @@ def test_number_no_digits_after_minus_eof(self): assert isinstance(result, ParseError) def test_number_no_digits_after_minus_non_digit(self): - """Line 222: '-' followed by letter. + """'-' followed by a letter fails. Example: test = { -x } Trigger: Minus sign followed by alphabetic character @@ -72,7 +72,7 @@ def test_number_no_digits_after_minus_non_digit(self): assert isinstance(result, ParseError) def test_number_decimal_no_digits(self): - """Line 234: '3.' with no digits after decimal point. + """'3.' with no digits after the decimal point fails. Example: test = { 3. } Trigger: Decimal point followed by non-digit @@ -84,7 +84,7 @@ def test_number_decimal_no_digits(self): assert isinstance(result, ParseError) def test_number_decimal_no_digits_eof(self): - """Line 234: Number ending with decimal at EOF. + """A number ending with a decimal point at EOF fails. Example: test = { 3. Trigger: Decimal point at end of input @@ -96,11 +96,11 @@ def test_number_decimal_no_digits_eof(self): assert isinstance(result, ParseError) def test_number_just_decimal_point(self): - """Line 234: Just a decimal point with no integer part. + """A decimal point without an integer part fails. Example: test = { . } Trigger: Decimal point as first character - Note: This actually triggers line 222 first (no digits before decimal) + Note: This actually fails earlier because there are no digits before the decimal point """ cursor = Cursor("test = { . }", 9) # Position at '.' @@ -114,9 +114,9 @@ class TestParseEscapeSequenceErrorPaths: """Error path tests for _parse_escape_sequence method. Target coverage: - - Line 293: EOF after backslash in string - - Line 298: Escape sequence \" (actually SUCCESS, testing for coverage) - - Line 300: Escape sequence \\ (actually SUCCESS, testing for coverage) + - EOF after backslash in string + - Quote escape sequence + - Backslash escape sequence """ def test_escape_eof_after_backslash(self): @@ -578,7 +578,7 @@ def test_escape_sequence(self, escape, expected, description): """Test all supported escape sequences systematically. This parametrized test ensures all escape sequences work correctly. - Covers lines 298, 300, 302, 304, 307-321. + It covers the supported escape-sequence branches. """ parser = FluentParserV1() ftl = f'test = {{ "text{escape}more" }}' diff --git a/tests/test_syntax_parser_term_references.py b/tests/test_syntax_parser_term_references.py index 92461b10..45f66445 100644 --- a/tests/test_syntax_parser_term_references.py +++ b/tests/test_syntax_parser_term_references.py @@ -1,7 +1,7 @@ """Parser tests for term references in inline expressions ({ -term }). Phase 3D: TermReference Parsing Tests -Coverage Target: +50-60 lines of parser.py (lines 1348-1409 and 937-953) +Focus: term references with attributes, arguments, and integration cases Tests cover: - Basic term reference: { -brand } diff --git a/tests/test_syntax_parser_terms.py b/tests/test_syntax_parser_terms.py index 92c2489c..3b031501 100644 --- a/tests/test_syntax_parser_terms.py +++ b/tests/test_syntax_parser_terms.py @@ -1,7 +1,7 @@ """Parser tests for term definitions (-term-id = pattern). Phase 3C: Term Parsing Tests -Coverage Target: +60-70 lines of parser.py (lines 1237-1318 and 100-108) +Focus: term definitions, attributes, and integration with messages Tests cover: - Basic term parsing diff --git a/tests/test_syntax_parser_validator_branches.py b/tests/test_syntax_parser_validator_branches.py index 46977633..1c10772a 100644 --- a/tests/test_syntax_parser_validator_branches.py +++ b/tests/test_syntax_parser_validator_branches.py @@ -1,7 +1,7 @@ -"""Targeted branch coverage for rules.py and validator.py. +"""Targeted branch coverage for parser grammar modules and validator.py. Addresses specific uncovered lines and branches: -- rules.py line 885: parse_term_reference returning None in parse_argument_expression +- parse_term_reference returning None in parse_argument_expression - NumberLiteral.__post_init__: invariant enforcement for raw/value consistency - validator.py branches 157->exit, 246->exit: Match case exits for Junk and TextElement @@ -40,7 +40,7 @@ class TestRulesLine885TermReferenceFailure: - """Test rules.py line 885: parse_term_reference returning None. + """Test parse_term_reference returning None inside parse_argument_expression. Line 885 is triggered when parse_term_reference fails after we've already verified the character after '-' is an identifier start. @@ -48,13 +48,13 @@ class TestRulesLine885TermReferenceFailure: """ def test_term_reference_with_invalid_attribute_name(self) -> None: - """Term reference with dot but invalid attribute triggers line 885. + """Term reference with dot but invalid attribute returns None. Input: -brand.123 - '-' followed by 'b' (identifier start) -> tries parse_term_reference - parse_term_reference parses '-brand', sees '.', tries attribute - Attribute identifier fails (starts with digit) -> returns None - - Back in parse_argument_expression, line 885 returns None + - Back in parse_argument_expression, the defensive branch returns None """ cursor = Cursor("-brand.123", 0) context = ParseContext() @@ -64,7 +64,7 @@ def test_term_reference_with_invalid_attribute_name(self) -> None: assert result is None def test_term_reference_with_dot_at_eof(self) -> None: - """Term reference with trailing dot at EOF triggers line 885. + """Term reference with trailing dot at EOF returns None. Input: -brand. - parse_term_reference tries to parse attribute after '.' @@ -78,7 +78,7 @@ def test_term_reference_with_dot_at_eof(self) -> None: assert result is None def test_term_reference_with_dot_followed_by_space(self) -> None: - """Term reference with dot followed by space triggers line 885. + """Term reference with dot followed by space returns None. Input: -brand. x - parse_term_reference sees '.', tries to parse attribute @@ -92,7 +92,7 @@ def test_term_reference_with_dot_followed_by_space(self) -> None: assert result is None def test_term_reference_with_dot_followed_by_special_char(self) -> None: - """Term reference with dot followed by special char triggers line 885.""" + """Term reference with dot followed by special char returns None.""" cursor = Cursor("-brand.@", 0) context = ParseContext() result = parse_argument_expression(cursor, context) @@ -305,7 +305,7 @@ def test_empty_text_element(self) -> None: class TestValidatorCommentEntry: - """Comprehensive tests for Comment entry validation (line 156).""" + """Comprehensive tests for comment-entry validation.""" def test_single_line_comment(self) -> None: """Single-line comment passes validation.""" diff --git a/tests/test_syntax_parser_variant.py b/tests/test_syntax_parser_variant.py index 250157ad..c27561f7 100644 --- a/tests/test_syntax_parser_variant.py +++ b/tests/test_syntax_parser_variant.py @@ -246,11 +246,10 @@ def test_variant_keys_with_arbitrary_blank_count( class TestLongIdentifierVariantKeys: - """Tests for variant keys with long identifiers (v0.89.0 fix). + """Tests for variant keys with long identifiers. - Prior to v0.89.0, MAX_LOOKAHEAD_CHARS (128) was smaller than - _MAX_IDENTIFIER_LENGTH (256), causing variant keys with 129-256 char - identifiers to be misparsed as literal text. + A previous parser lookahead mismatch caused 129-256 character identifiers + to be misparsed as literal text instead of variant keys. """ def test_variant_key_with_max_length_identifier(self) -> None: diff --git a/tests/test_syntax_spec_conformance.py b/tests/test_syntax_spec_conformance.py index 20506164..a70cc82e 100644 --- a/tests/test_syntax_spec_conformance.py +++ b/tests/test_syntax_spec_conformance.py @@ -1,13 +1,14 @@ -"""Spec conformance tests using official Fluent.js test fixtures. +"""Spec conformance tests using vendored official Fluent.js test fixtures. This module implements SYSTEM 8 from the testing strategy: Spec Conformance Testing. -We import official test fixtures from the Fluent.js reference implementation to ensure -our parser conforms to the Fluent specification. +We vendor selected official test fixtures from the Fluent.js reference +implementation to ensure our parser conforms to the Fluent specification +without depending on live network fetches at test time. Strategy: -1. Fetch official .ftl/.json test fixtures from projectfluent/fluent.js +1. Load vendored official .ftl fixtures from projectfluent/fluent.js 2. Parse .ftl files with our parser -3. Compare structural properties with reference JSON AST +3. Compare structural properties with counts derived from the reference JSON AST 4. Focus on semantic equivalence (not exact AST match since schemas differ) Official fixtures: @@ -20,70 +21,21 @@ from __future__ import annotations -import json -from typing import Any -from urllib.error import URLError -from urllib.request import urlopen - import pytest from ftllexengine.syntax.ast import Comment, Junk, Message, Resource, Term from ftllexengine.syntax.parser import FluentParserV1 +from tests.helpers.fluentjs_fixtures import STRUCTURE_FIXTURES -# ============================================================================== -# FIXTURE FETCHING -# ============================================================================== - -FIXTURES_BASE_URL = "https://raw.githubusercontent.com/projectfluent/fluent.js/main/fluent-syntax/test/fixtures_structure" # pylint: disable=line-too-long - -# Selected fixtures covering core functionality -# Format: (name, description) - expected counts read from reference JSON -# Note: Only includes fixtures that exist in Fluent.js repository -CORE_FIXTURES = [ - ("simple_message", "Basic message"), - ("multiline_pattern", "Multiline pattern"), - ("multiline_with_placeables", "Pattern with placeables"), - ("select_expressions", "Select expressions"), - ("blank_lines", "Blank lines handling"), - ("term", "Simple term"), -] - -# Error handling fixtures -ERROR_FIXTURES = [ - ("empty_resource", "Empty FTL file"), -] - - -def fetch_fixture(name: str, extension: str) -> str: - """Fetch fixture content from GitHub. - - Args: - name: Fixture name (without extension) - extension: File extension (.ftl or .json) - - Returns: - File content as string - - Raises: - Exception: If fetch fails (test will be skipped) - """ - url = f"{FIXTURES_BASE_URL}/{name}.{extension}" - try: - with urlopen(url, timeout=10) as response: - return response.read().decode("utf-8") - except (URLError, OSError, UnicodeDecodeError) as e: - pytest.skip(f"Could not fetch fixture from {url}: {e}") - - -def fetch_ftl_fixture(name: str) -> str: - """Fetch .ftl fixture.""" - return fetch_fixture(name, "ftl") - - -def fetch_json_fixture(name: str) -> dict[str, Any]: - """Fetch and parse .json fixture.""" - content = fetch_fixture(name, "json") - return json.loads(content) +CORE_FIXTURES = ( + "simple_message", + "multiline_pattern", + "multiline_with_placeables", + "select_expressions", + "blank_lines", + "term", +) +ERROR_FIXTURES = ("empty_resource",) # ============================================================================== @@ -120,31 +72,6 @@ def count_ast_nodes_by_type(resource: Resource) -> dict[str, int]: return counts -def count_reference_nodes_by_type(json_ast: dict[str, Any]) -> dict[str, int]: - """Count nodes by type in reference JSON AST. - - Args: - json_ast: Reference AST from Fluent.js - - Returns: - Dictionary mapping node type names to counts - """ - counts: dict[str, int] = { - "Message": 0, - "Term": 0, - "Comment": 0, - "Junk": 0, - } - - body = json_ast.get("body", ()) - for entry in body: - entry_type = entry.get("type", "") - if entry_type in counts: - counts[entry_type] += 1 - - return counts - - # ============================================================================== # SPEC CONFORMANCE TESTS # ============================================================================== @@ -154,14 +81,13 @@ class TestSpecConformanceCoreFeatures: """Test parser conformance with official Fluent.js fixtures for core features.""" @pytest.mark.parametrize( - ("fixture_name", "description"), + "fixture_name", CORE_FIXTURES, - ids=[f[0] for f in CORE_FIXTURES], + ids=CORE_FIXTURES, ) def test_core_fixture_structural_conformance( self, fixture_name: str, - description: str, ) -> None: """Test structural conformance with official fixtures. @@ -170,13 +96,11 @@ def test_core_fixture_structural_conformance( Note: Some fixtures show spec discrepancies where our parser behavior differs from Fluent.js reference. These are marked for investigation. """ - # Fetch fixtures - ftl_content = fetch_ftl_fixture(fixture_name) - reference_ast = fetch_json_fixture(fixture_name) + fixture = STRUCTURE_FIXTURES[fixture_name] # Parse with our parser parser = FluentParserV1() - resource = parser.parse(ftl_content) + resource = parser.parse(fixture.ftl) # Verify resource type assert isinstance(resource, Resource) @@ -184,32 +108,34 @@ def test_core_fixture_structural_conformance( # Count nodes in our AST our_counts = count_ast_nodes_by_type(resource) - # Count nodes in reference AST - ref_counts = count_reference_nodes_by_type(reference_ast) - # Verify structural equivalence assert ( - our_counts["Message"] == ref_counts["Message"] - ), f"Message count mismatch for {fixture_name}: expected {ref_counts['Message']}, got {our_counts['Message']}" + our_counts["Message"] == fixture.expected_messages + ), ( + f"Message count mismatch for {fixture_name}: expected " + f"{fixture.expected_messages}, got {our_counts['Message']}" + ) assert ( - our_counts["Term"] == ref_counts["Term"] - ), f"Term count mismatch for {fixture_name}: expected {ref_counts['Term']}, got {our_counts['Term']}" + our_counts["Term"] == fixture.expected_terms + ), ( + f"Term count mismatch for {fixture_name}: expected " + f"{fixture.expected_terms}, got {our_counts['Term']}" + ) @pytest.mark.parametrize( - ("fixture_name", "description"), + "fixture_name", CORE_FIXTURES[:5], # First 5 fixtures for detailed testing - ids=[f[0] for f in CORE_FIXTURES[:5]], + ids=CORE_FIXTURES[:5], ) def test_parse_determinism_on_fixtures( self, fixture_name: str, - description: str, ) -> None: """Test parser determinism on official fixtures. Property: Parsing same fixture twice yields identical results. """ - ftl_content = fetch_ftl_fixture(fixture_name) + ftl_content = STRUCTURE_FIXTURES[fixture_name].ftl parser = FluentParserV1() # Parse twice @@ -229,21 +155,19 @@ class TestSpecConformanceErrorHandling: """Test parser error handling conformance with official fixtures.""" @pytest.mark.parametrize( - ("fixture_name", "description"), + "fixture_name", ERROR_FIXTURES, - ids=[f[0] for f in ERROR_FIXTURES], + ids=ERROR_FIXTURES, ) def test_error_fixture_robustness( self, fixture_name: str, - description: str, ) -> None: """Test parser robustness on error fixtures. Property: Parser never crashes on invalid input. """ - # Fetch fixture - ftl_content = fetch_ftl_fixture(fixture_name) + ftl_content = STRUCTURE_FIXTURES[fixture_name].ftl # Parse (should not crash) parser = FluentParserV1() @@ -267,14 +191,13 @@ class TestSpecConformanceRoundtrip: """Test roundtrip property on official fixtures.""" @pytest.mark.parametrize( - ("fixture_name", "description"), + "fixture_name", CORE_FIXTURES[:5], # First 5 fixtures for roundtrip - ids=[f[0] for f in CORE_FIXTURES[:5]], + ids=CORE_FIXTURES[:5], ) def test_parse_serialize_parse_converges( self, fixture_name: str, - description: str, ) -> None: """Test parse→serialize→parse convergence on official fixtures. @@ -282,7 +205,7 @@ def test_parse_serialize_parse_converges( """ from ftllexengine.syntax.serializer import serialize - ftl_content = fetch_ftl_fixture(fixture_name) + ftl_content = STRUCTURE_FIXTURES[fixture_name].ftl parser = FluentParserV1() # Parse original @@ -308,9 +231,9 @@ def test_parse_serialize_parse_converges( class TestSpecConformanceEdgeCases: """Test parser behavior on edge cases from official fixtures.""" - def test_empty_resource(self): + def test_empty_resource(self) -> None: """Test empty FTL resource.""" - ftl = fetch_ftl_fixture("empty_resource") + ftl = STRUCTURE_FIXTURES["empty_resource"].ftl parser = FluentParserV1() resource = parser.parse(ftl) @@ -318,9 +241,9 @@ def test_empty_resource(self): # Empty resource should have no entries or only whitespace/comments assert len(resource.entries) >= 0 - def test_blank_lines_handling(self): + def test_blank_lines_handling(self) -> None: """Test blank lines don't affect parsing.""" - ftl = fetch_ftl_fixture("blank_lines") + ftl = STRUCTURE_FIXTURES["blank_lines"].ftl parser = FluentParserV1() resource = parser.parse(ftl) diff --git a/uv.lock b/uv.lock index 46ff028a..f7b32f4e 100644 --- a/uv.lock +++ b/uv.lock @@ -2,7 +2,8 @@ version = 1 revision = 3 requires-python = ">=3.13" resolution-markers = [ - "python_full_version >= '3.14'", + "python_full_version >= '3.15'", + "python_full_version == '3.14.*'", "python_full_version < '3.14'", ] @@ -74,16 +75,16 @@ wheels = [ [[package]] name = "build" -version = "1.4.0" +version = "1.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "os_name == 'nt'" }, { name = "packaging" }, { name = "pyproject-hooks" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/42/18/94eaffda7b329535d91f00fe605ab1f1e5cd68b2074d03f255c7d250687d/build-1.4.0.tar.gz", hash = "sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936", size = 50054, upload-time = "2026-01-08T16:41:47.696Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/16/4b272700dea44c1d2e8ca963ebb3c684efe22b3eba8cfa31c5fdb60de707/build-1.4.3.tar.gz", hash = "sha256:5aa4231ae0e807efdf1fd0623e07366eca2ab215921345a2e38acdd5d0fa0a74", size = 89314, upload-time = "2026-04-10T21:25:40.857Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/0d/84a4380f930db0010168e0aa7b7a8fed9ba1835a8fbb1472bc6d0201d529/build-1.4.0-py3-none-any.whl", hash = "sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596", size = 24141, upload-time = "2026-01-08T16:41:46.453Z" }, + { url = "https://files.pythonhosted.org/packages/b2/30/f169e1d8b2071beaf8b97088787e30662b1d8fb82f8c0941d14678c0cbf1/build-1.4.3-py3-none-any.whl", hash = "sha256:1bc22b19b383303de8f2c8554c9a32894a58d3f185fe3756b0b20d255bee9a38", size = 26171, upload-time = "2026-04-10T21:25:39.671Z" }, ] [[package]] @@ -300,7 +301,7 @@ wheels = [ [[package]] name = "ftllexengine" -version = "0.162.0" +version = "0.163.0" source = { editable = "." } [package.optional-dependencies] @@ -314,7 +315,6 @@ atheris = [ ] dev = [ { name = "babel" }, - { name = "hypofuzz" }, { name = "hypothesis" }, { name = "mypy" }, { name = "psutil" }, @@ -324,6 +324,9 @@ dev = [ { name = "ruff" }, { name = "types-psutil" }, ] +fuzz = [ + { name = "hypofuzz" }, +] release = [ { name = "build" }, { name = "twine" }, @@ -337,18 +340,18 @@ provides-extras = ["babel"] atheris = [{ name = "atheris", marker = "python_full_version < '3.14'", specifier = ">=3.0.0" }] dev = [ { name = "babel", specifier = ">=2.18.0,<3.0.0" }, - { name = "hypofuzz", specifier = ">=25.11.1" }, - { name = "hypothesis", specifier = ">=6.151.9" }, - { name = "mypy", specifier = ">=1.19.1" }, + { name = "hypothesis", specifier = ">=6.152.1" }, + { name = "mypy", specifier = ">=1.20.2" }, { name = "psutil", specifier = ">=7.2.2" }, - { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest", specifier = ">=9.0.3" }, { name = "pytest-benchmark", specifier = ">=5.2.3" }, - { name = "pytest-cov", specifier = ">=7.0.0" }, - { name = "ruff", specifier = ">=0.15.7" }, - { name = "types-psutil", specifier = ">=7.2.2.20260130" }, + { name = "pytest-cov", specifier = ">=7.1.0" }, + { name = "ruff", specifier = ">=0.15.11" }, + { name = "types-psutil", specifier = ">=7.2.2.20260408" }, ] +fuzz = [{ name = "hypofuzz", specifier = ">=25.11.1" }] release = [ - { name = "build", specifier = ">=1.4.0" }, + { name = "build", specifier = ">=1.4.3" }, { name = "twine", specifier = ">=6.2.0" }, ] @@ -429,14 +432,14 @@ wheels = [ [[package]] name = "hypothesis" -version = "6.151.9" +version = "6.152.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sortedcontainers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/e1/ef365ff480903b929d28e057f57b76cae51a30375943e33374ec9a165d9c/hypothesis-6.151.9.tar.gz", hash = "sha256:2f284428dda6c3c48c580de0e18470ff9c7f5ef628a647ee8002f38c3f9097ca", size = 463534, upload-time = "2026-02-16T22:59:23.09Z" } +sdist = { url = "https://files.pythonhosted.org/packages/64/b1/c32bcddb9aab9e3abc700f1f56faf14e7655c64a16ca47701a57362276ea/hypothesis-6.152.1.tar.gz", hash = "sha256:4f4ed934eee295dd84ee97592477d23e8dc03e9f12ae0ee30a4e7c9ef3fca3b0", size = 465029, upload-time = "2026-04-14T22:29:24.062Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/f7/5cc291d701094754a1d327b44d80a44971e13962881d9a400235726171da/hypothesis-6.151.9-py3-none-any.whl", hash = "sha256:7b7220585c67759b1b1ef839b1e6e9e3d82ed468cfc1ece43c67184848d7edd9", size = 529307, upload-time = "2026-02-16T22:59:20.443Z" }, + { url = "https://files.pythonhosted.org/packages/5d/83/860fb3075e00b0fc19a22a2301bc3c96f00437558c3911bdd0a3573a4a53/hypothesis-6.152.1-py3-none-any.whl", hash = "sha256:40a3619d9e0cb97b018857c7986f75cf5de2e5ec0fa8a0b172d00747758f749e", size = 530752, upload-time = "2026-04-14T22:29:20.893Z" }, ] [package.optional-dependencies] @@ -584,43 +587,49 @@ wheels = [ [[package]] name = "librt" -version = "0.7.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/93/e4/b59bdf1197fdf9888452ea4d2048cdad61aef85eb83e99dc52551d7fdc04/librt-0.7.4.tar.gz", hash = "sha256:3871af56c59864d5fd21d1ac001eb2fb3b140d52ba0454720f2e4a19812404ba", size = 145862, upload-time = "2025-12-15T16:52:43.862Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/4d/46a53ccfbb39fd0b493fd4496eb76f3ebc15bb3e45d8c2e695a27587edf5/librt-0.7.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d44a1b1ba44cbd2fc3cb77992bef6d6fdb1028849824e1dd5e4d746e1f7f7f0b", size = 55745, upload-time = "2025-12-15T16:51:46.636Z" }, - { url = "https://files.pythonhosted.org/packages/7f/2b/3ac7f5212b1828bf4f979cf87f547db948d3e28421d7a430d4db23346ce4/librt-0.7.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c9cab4b3de1f55e6c30a84c8cee20e4d3b2476f4d547256694a1b0163da4fe32", size = 57166, upload-time = "2025-12-15T16:51:48.219Z" }, - { url = "https://files.pythonhosted.org/packages/e8/99/6523509097cbe25f363795f0c0d1c6a3746e30c2994e25b5aefdab119b21/librt-0.7.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2857c875f1edd1feef3c371fbf830a61b632fb4d1e57160bb1e6a3206e6abe67", size = 165833, upload-time = "2025-12-15T16:51:49.443Z" }, - { url = "https://files.pythonhosted.org/packages/fe/35/323611e59f8fe032649b4fb7e77f746f96eb7588fcbb31af26bae9630571/librt-0.7.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b370a77be0a16e1ad0270822c12c21462dc40496e891d3b0caf1617c8cc57e20", size = 174818, upload-time = "2025-12-15T16:51:51.015Z" }, - { url = "https://files.pythonhosted.org/packages/41/e6/40fb2bb21616c6e06b6a64022802228066e9a31618f493e03f6b9661548a/librt-0.7.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d05acd46b9a52087bfc50c59dfdf96a2c480a601e8898a44821c7fd676598f74", size = 189607, upload-time = "2025-12-15T16:51:52.671Z" }, - { url = "https://files.pythonhosted.org/packages/32/48/1b47c7d5d28b775941e739ed2bfe564b091c49201b9503514d69e4ed96d7/librt-0.7.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:70969229cb23d9c1a80e14225838d56e464dc71fa34c8342c954fc50e7516dee", size = 184585, upload-time = "2025-12-15T16:51:54.027Z" }, - { url = "https://files.pythonhosted.org/packages/75/a6/ee135dfb5d3b54d5d9001dbe483806229c6beac3ee2ba1092582b7efeb1b/librt-0.7.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4450c354b89dbb266730893862dbff06006c9ed5b06b6016d529b2bf644fc681", size = 178249, upload-time = "2025-12-15T16:51:55.248Z" }, - { url = "https://files.pythonhosted.org/packages/04/87/d5b84ec997338be26af982bcd6679be0c1db9a32faadab1cf4bb24f9e992/librt-0.7.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:adefe0d48ad35b90b6f361f6ff5a1bd95af80c17d18619c093c60a20e7a5b60c", size = 199851, upload-time = "2025-12-15T16:51:56.933Z" }, - { url = "https://files.pythonhosted.org/packages/86/63/ba1333bf48306fe398e3392a7427ce527f81b0b79d0d91618c4610ce9d15/librt-0.7.4-cp313-cp313-win32.whl", hash = "sha256:21ea710e96c1e050635700695095962a22ea420d4b3755a25e4909f2172b4ff2", size = 43249, upload-time = "2025-12-15T16:51:58.498Z" }, - { url = "https://files.pythonhosted.org/packages/f9/8a/de2c6df06cdfa9308c080e6b060fe192790b6a48a47320b215e860f0e98c/librt-0.7.4-cp313-cp313-win_amd64.whl", hash = "sha256:772e18696cf5a64afee908662fbcb1f907460ddc851336ee3a848ef7684c8e1e", size = 49417, upload-time = "2025-12-15T16:51:59.618Z" }, - { url = "https://files.pythonhosted.org/packages/31/66/8ee0949efc389691381ed686185e43536c20e7ad880c122dd1f31e65c658/librt-0.7.4-cp313-cp313-win_arm64.whl", hash = "sha256:52e34c6af84e12921748c8354aa6acf1912ca98ba60cdaa6920e34793f1a0788", size = 42824, upload-time = "2025-12-15T16:52:00.784Z" }, - { url = "https://files.pythonhosted.org/packages/74/81/6921e65c8708eb6636bbf383aa77e6c7dad33a598ed3b50c313306a2da9d/librt-0.7.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4f1ee004942eaaed6e06c087d93ebc1c67e9a293e5f6b9b5da558df6bf23dc5d", size = 55191, upload-time = "2025-12-15T16:52:01.97Z" }, - { url = "https://files.pythonhosted.org/packages/0d/d6/3eb864af8a8de8b39cc8dd2e9ded1823979a27795d72c4eea0afa8c26c9f/librt-0.7.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d854c6dc0f689bad7ed452d2a3ecff58029d80612d336a45b62c35e917f42d23", size = 56898, upload-time = "2025-12-15T16:52:03.356Z" }, - { url = "https://files.pythonhosted.org/packages/49/bc/b1d4c0711fdf79646225d576faee8747b8528a6ec1ceb6accfd89ade7102/librt-0.7.4-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a4f7339d9e445280f23d63dea842c0c77379c4a47471c538fc8feedab9d8d063", size = 163725, upload-time = "2025-12-15T16:52:04.572Z" }, - { url = "https://files.pythonhosted.org/packages/2c/08/61c41cd8f0a6a41fc99ea78a2205b88187e45ba9800792410ed62f033584/librt-0.7.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39003fc73f925e684f8521b2dbf34f61a5deb8a20a15dcf53e0d823190ce8848", size = 172469, upload-time = "2025-12-15T16:52:05.863Z" }, - { url = "https://files.pythonhosted.org/packages/8b/c7/4ee18b4d57f01444230bc18cf59103aeab8f8c0f45e84e0e540094df1df1/librt-0.7.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6bb15ee29d95875ad697d449fe6071b67f730f15a6961913a2b0205015ca0843", size = 186804, upload-time = "2025-12-15T16:52:07.192Z" }, - { url = "https://files.pythonhosted.org/packages/a1/af/009e8ba3fbf830c936842da048eda1b34b99329f402e49d88fafff6525d1/librt-0.7.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:02a69369862099e37d00765583052a99d6a68af7e19b887e1b78fee0146b755a", size = 181807, upload-time = "2025-12-15T16:52:08.554Z" }, - { url = "https://files.pythonhosted.org/packages/85/26/51ae25f813656a8b117c27a974f25e8c1e90abcd5a791ac685bf5b489a1b/librt-0.7.4-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ec72342cc4d62f38b25a94e28b9efefce41839aecdecf5e9627473ed04b7be16", size = 175595, upload-time = "2025-12-15T16:52:10.186Z" }, - { url = "https://files.pythonhosted.org/packages/48/93/36d6c71f830305f88996b15c8e017aa8d1e03e2e947b40b55bbf1a34cf24/librt-0.7.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:776dbb9bfa0fc5ce64234b446995d8d9f04badf64f544ca036bd6cff6f0732ce", size = 196504, upload-time = "2025-12-15T16:52:11.472Z" }, - { url = "https://files.pythonhosted.org/packages/08/11/8299e70862bb9d704735bf132c6be09c17b00fbc7cda0429a9df222fdc1b/librt-0.7.4-cp314-cp314-win32.whl", hash = "sha256:0f8cac84196d0ffcadf8469d9ded4d4e3a8b1c666095c2a291e22bf58e1e8a9f", size = 39738, upload-time = "2025-12-15T16:52:12.962Z" }, - { url = "https://files.pythonhosted.org/packages/54/d5/656b0126e4e0f8e2725cd2d2a1ec40f71f37f6f03f135a26b663c0e1a737/librt-0.7.4-cp314-cp314-win_amd64.whl", hash = "sha256:037f5cb6fe5abe23f1dc058054d50e9699fcc90d0677eee4e4f74a8677636a1a", size = 45976, upload-time = "2025-12-15T16:52:14.441Z" }, - { url = "https://files.pythonhosted.org/packages/60/86/465ff07b75c1067da8fa7f02913c4ead096ef106cfac97a977f763783bfb/librt-0.7.4-cp314-cp314-win_arm64.whl", hash = "sha256:a5deebb53d7a4d7e2e758a96befcd8edaaca0633ae71857995a0f16033289e44", size = 39073, upload-time = "2025-12-15T16:52:15.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a0/24941f85960774a80d4b3c2aec651d7d980466da8101cae89e8b032a3e21/librt-0.7.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b4c25312c7f4e6ab35ab16211bdf819e6e4eddcba3b2ea632fb51c9a2a97e105", size = 57369, upload-time = "2025-12-15T16:52:16.782Z" }, - { url = "https://files.pythonhosted.org/packages/77/a0/ddb259cae86ab415786c1547d0fe1b40f04a7b089f564fd5c0242a3fafb2/librt-0.7.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:618b7459bb392bdf373f2327e477597fff8f9e6a1878fffc1b711c013d1b0da4", size = 59230, upload-time = "2025-12-15T16:52:18.259Z" }, - { url = "https://files.pythonhosted.org/packages/31/11/77823cb530ab8a0c6fac848ac65b745be446f6f301753b8990e8809080c9/librt-0.7.4-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1437c3f72a30c7047f16fd3e972ea58b90172c3c6ca309645c1c68984f05526a", size = 183869, upload-time = "2025-12-15T16:52:19.457Z" }, - { url = "https://files.pythonhosted.org/packages/a4/ce/157db3614cf3034b3f702ae5ba4fefda4686f11eea4b7b96542324a7a0e7/librt-0.7.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c96cb76f055b33308f6858b9b594618f1b46e147a4d03a4d7f0c449e304b9b95", size = 194606, upload-time = "2025-12-15T16:52:20.795Z" }, - { url = "https://files.pythonhosted.org/packages/30/ef/6ec4c7e3d6490f69a4fd2803516fa5334a848a4173eac26d8ee6507bff6e/librt-0.7.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28f990e6821204f516d09dc39966ef8b84556ffd648d5926c9a3f681e8de8906", size = 206776, upload-time = "2025-12-15T16:52:22.229Z" }, - { url = "https://files.pythonhosted.org/packages/ad/22/750b37bf549f60a4782ab80e9d1e9c44981374ab79a7ea68670159905918/librt-0.7.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc4aebecc79781a1b77d7d4e7d9fe080385a439e198d993b557b60f9117addaf", size = 203205, upload-time = "2025-12-15T16:52:23.603Z" }, - { url = "https://files.pythonhosted.org/packages/7a/87/2e8a0f584412a93df5faad46c5fa0a6825fdb5eba2ce482074b114877f44/librt-0.7.4-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:022cc673e69283a42621dd453e2407cf1647e77f8bd857d7ad7499901e62376f", size = 196696, upload-time = "2025-12-15T16:52:24.951Z" }, - { url = "https://files.pythonhosted.org/packages/e5/ca/7bf78fa950e43b564b7de52ceeb477fb211a11f5733227efa1591d05a307/librt-0.7.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2b3ca211ae8ea540569e9c513da052699b7b06928dcda61247cb4f318122bdb5", size = 217191, upload-time = "2025-12-15T16:52:26.194Z" }, - { url = "https://files.pythonhosted.org/packages/d6/49/3732b0e8424ae35ad5c3166d9dd5bcdae43ce98775e0867a716ff5868064/librt-0.7.4-cp314-cp314t-win32.whl", hash = "sha256:8a461f6456981d8c8e971ff5a55f2e34f4e60871e665d2f5fde23ee74dea4eeb", size = 40276, upload-time = "2025-12-15T16:52:27.54Z" }, - { url = "https://files.pythonhosted.org/packages/35/d6/d8823e01bd069934525fddb343189c008b39828a429b473fb20d67d5cd36/librt-0.7.4-cp314-cp314t-win_amd64.whl", hash = "sha256:721a7b125a817d60bf4924e1eec2a7867bfcf64cfc333045de1df7a0629e4481", size = 46772, upload-time = "2025-12-15T16:52:28.653Z" }, - { url = "https://files.pythonhosted.org/packages/36/e9/a0aa60f5322814dd084a89614e9e31139702e342f8459ad8af1984a18168/librt-0.7.4-cp314-cp314t-win_arm64.whl", hash = "sha256:76b2ba71265c0102d11458879b4d53ccd0b32b0164d14deb8d2b598a018e502f", size = 39724, upload-time = "2025-12-15T16:52:29.836Z" }, +version = "0.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/6b/3d5c13fb3e3c4f43206c8f9dfed13778c2ed4f000bacaa0b7ce3c402a265/librt-0.9.0.tar.gz", hash = "sha256:a0951822531e7aee6e0dfb556b30d5ee36bbe234faf60c20a16c01be3530869d", size = 184368, upload-time = "2026-04-09T16:06:26.173Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/d7/1b3e26fffde1452d82f5666164858a81c26ebe808e7ae8c9c88628981540/librt-0.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29b68cd9714531672db62cc54f6e8ff981900f824d13fa0e00749189e13778e", size = 68367, upload-time = "2026-04-09T16:05:17.243Z" }, + { url = "https://files.pythonhosted.org/packages/a5/5b/c61b043ad2e091fbe1f2d35d14795e545d0b56b03edaa390fa1dcee3d160/librt-0.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d5c8a5929ac325729f6119802070b561f4db793dffc45e9ac750992a4ed4d22", size = 70595, upload-time = "2026-04-09T16:05:18.471Z" }, + { url = "https://files.pythonhosted.org/packages/a3/22/2448471196d8a73370aa2f23445455dc42712c21404081fcd7a03b9e0749/librt-0.9.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:756775d25ec8345b837ab52effee3ad2f3b2dfd6bbee3e3f029c517bd5d8f05a", size = 204354, upload-time = "2026-04-09T16:05:19.593Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5e/39fc4b153c78cfd2c8a2dcb32700f2d41d2312aa1050513183be4540930d/librt-0.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b8f5d00b49818f4e2b1667db994488b045835e0ac16fe2f924f3871bd2b8ac5", size = 216238, upload-time = "2026-04-09T16:05:20.868Z" }, + { url = "https://files.pythonhosted.org/packages/d7/42/bc2d02d0fa7badfa63aa8d6dcd8793a9f7ef5a94396801684a51ed8d8287/librt-0.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c81aef782380f0f13ead670aae01825eb653b44b046aa0e5ebbb79f76ed4aa11", size = 230589, upload-time = "2026-04-09T16:05:22.305Z" }, + { url = "https://files.pythonhosted.org/packages/c8/7b/e2d95cc513866373692aa5edf98080d5602dd07cabfb9e5d2f70df2f25f7/librt-0.9.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66b58fed90a545328e80d575467244de3741e088c1af928f0b489ebec3ef3858", size = 224610, upload-time = "2026-04-09T16:05:23.647Z" }, + { url = "https://files.pythonhosted.org/packages/31/d5/6cec4607e998eaba57564d06a1295c21b0a0c8de76e4e74d699e627bd98c/librt-0.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e78fb7419e07d98c2af4b8567b72b3eaf8cb05caad642e9963465569c8b2d87e", size = 232558, upload-time = "2026-04-09T16:05:25.025Z" }, + { url = "https://files.pythonhosted.org/packages/95/8c/27f1d8d3aaf079d3eb26439bf0b32f1482340c3552e324f7db9dca858671/librt-0.9.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c3786f0f4490a5cd87f1ed6cefae833ad6b1060d52044ce0434a2e85893afd0", size = 225521, upload-time = "2026-04-09T16:05:26.311Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d8/1e0d43b1c329b416017619469b3c3801a25a6a4ef4a1c68332aeaa6f72ca/librt-0.9.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8494cfc61e03542f2d381e71804990b3931175a29b9278fdb4a5459948778dc2", size = 227789, upload-time = "2026-04-09T16:05:27.624Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/d3d842e88610fcd4c8eec7067b0c23ef2d7d3bff31496eded6a83b0f99be/librt-0.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:07cf11f769831186eeac424376e6189f20ace4f7263e2134bdb9757340d84d4d", size = 248616, upload-time = "2026-04-09T16:05:29.181Z" }, + { url = "https://files.pythonhosted.org/packages/ec/28/527df8ad0d1eb6c8bdfa82fc190f1f7c4cca5a1b6d7b36aeabf95b52d74d/librt-0.9.0-cp313-cp313-win32.whl", hash = "sha256:850d6d03177e52700af605fd60db7f37dcb89782049a149674d1a9649c2138fd", size = 56039, upload-time = "2026-04-09T16:05:30.709Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a7/413652ad0d92273ee5e30c000fc494b361171177c83e57c060ecd3c21538/librt-0.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:a5af136bfba820d592f86c67affcef9b3ff4d4360ac3255e341e964489b48519", size = 63264, upload-time = "2026-04-09T16:05:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0a/92c244309b774e290ddb15e93363846ae7aa753d9586b8aad511c5e6145b/librt-0.9.0-cp313-cp313-win_arm64.whl", hash = "sha256:4c4d0440a3a8e31d962340c3e1cc3fc9ee7febd34c8d8f770d06adb947779ea5", size = 53728, upload-time = "2026-04-09T16:05:33.31Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c1/184e539543f06ea2912f4b92a5ffaede4f9b392689e3f00acbf8134bee92/librt-0.9.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:3f05d145df35dca5056a8bc3838e940efebd893a54b3e19b2dda39ceaa299bcb", size = 67830, upload-time = "2026-04-09T16:05:34.517Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ad/23399bdcb7afca819acacdef31b37ee59de261bd66b503a7995c03c4b0dc/librt-0.9.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1c587494461ebd42229d0f1739f3aa34237dd9980623ecf1be8d3bcba79f4499", size = 70280, upload-time = "2026-04-09T16:05:35.649Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0b/4542dc5a2b8772dbf92cafb9194701230157e73c14b017b6961a23598b03/librt-0.9.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b0a2040f801406b93657a70b72fa12311063a319fee72ce98e1524da7200171f", size = 201925, upload-time = "2026-04-09T16:05:36.739Z" }, + { url = "https://files.pythonhosted.org/packages/31/d4/8ee7358b08fd0cfce051ef96695380f09b3c2c11b77c9bfbc367c921cce5/librt-0.9.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f38bc489037eca88d6ebefc9c4d41a4e07c8e8b4de5188a9e6d290273ad7ebb1", size = 212381, upload-time = "2026-04-09T16:05:38.043Z" }, + { url = "https://files.pythonhosted.org/packages/f2/94/a2025fe442abedf8b038038dab3dba942009ad42b38ea064a1a9e6094241/librt-0.9.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3fd278f5e6bf7c75ccd6d12344eb686cc020712683363b66f46ac79d37c799f", size = 227065, upload-time = "2026-04-09T16:05:39.394Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e9/b9fcf6afa909f957cfbbf918802f9dada1bd5d3c1da43d722fd6a310dc3f/librt-0.9.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fcbdf2a9ca24e87bbebb47f1fe34e531ef06f104f98c9ccfc953a3f3344c567a", size = 221333, upload-time = "2026-04-09T16:05:40.999Z" }, + { url = "https://files.pythonhosted.org/packages/ac/7c/ba54cd6aa6a3c8cd12757a6870e0c79a64b1e6327f5248dcff98423f4d43/librt-0.9.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e306d956cfa027fe041585f02a1602c32bfa6bb8ebea4899d373383295a6c62f", size = 229051, upload-time = "2026-04-09T16:05:42.605Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4b/8cfdbad314c8677a0148bf0b70591d6d18587f9884d930276098a235461b/librt-0.9.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:465814ab157986acb9dfa5ccd7df944be5eefc0d08d31ec6e8d88bc71251d845", size = 222492, upload-time = "2026-04-09T16:05:43.842Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d1/2eda69563a1a88706808decdce035e4b32755dbfbb0d05e1a65db9547ed1/librt-0.9.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:703f4ae36d6240bfe24f542bac784c7e4194ec49c3ba5a994d02891649e2d85b", size = 223849, upload-time = "2026-04-09T16:05:45.054Z" }, + { url = "https://files.pythonhosted.org/packages/04/44/b2ed37df6be5b3d42cfe36318e0598e80843d5c6308dd63d0bf4e0ce5028/librt-0.9.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3be322a15ee5e70b93b7a59cfd074614f22cc8c9ff18bd27f474e79137ea8d3b", size = 245001, upload-time = "2026-04-09T16:05:46.34Z" }, + { url = "https://files.pythonhosted.org/packages/47/e7/617e412426df89169dd2a9ed0cc8752d5763336252c65dbf945199915119/librt-0.9.0-cp314-cp314-win32.whl", hash = "sha256:b8da9f8035bb417770b1e1610526d87ad4fc58a2804dc4d79c53f6d2cf5a6eb9", size = 51799, upload-time = "2026-04-09T16:05:47.738Z" }, + { url = "https://files.pythonhosted.org/packages/24/ed/c22ca4db0ca3cbc285e4d9206108746beda561a9792289c3c31281d7e9df/librt-0.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:b8bd70d5d816566a580d193326912f4a76ec2d28a97dc4cd4cc831c0af8e330e", size = 59165, upload-time = "2026-04-09T16:05:49.198Z" }, + { url = "https://files.pythonhosted.org/packages/24/56/875398fafa4cbc8f15b89366fc3287304ddd3314d861f182a4b87595ace0/librt-0.9.0-cp314-cp314-win_arm64.whl", hash = "sha256:fc5758e2b7a56532dc33e3c544d78cbaa9ecf0a0f2a2da2df882c1d6b99a317f", size = 49292, upload-time = "2026-04-09T16:05:50.362Z" }, + { url = "https://files.pythonhosted.org/packages/4c/61/bc448ecbf9b2d69c5cff88fe41496b19ab2a1cbda0065e47d4d0d51c0867/librt-0.9.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:f24b90b0e0c8cc9491fb1693ae91fe17cb7963153a1946395acdbdd5818429a4", size = 70175, upload-time = "2026-04-09T16:05:51.564Z" }, + { url = "https://files.pythonhosted.org/packages/60/f2/c47bb71069a73e2f04e70acbd196c1e5cc411578ac99039a224b98920fd4/librt-0.9.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3fe56e80badb66fdcde06bef81bbaa5bfcf6fbd7aefb86222d9e369c38c6b228", size = 72951, upload-time = "2026-04-09T16:05:52.699Z" }, + { url = "https://files.pythonhosted.org/packages/29/19/0549df59060631732df758e8886d92088da5fdbedb35b80e4643664e8412/librt-0.9.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:527b5b820b47a09e09829051452bb0d1dd2122261254e2a6f674d12f1d793d54", size = 225864, upload-time = "2026-04-09T16:05:53.895Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f8/3b144396d302ac08e50f89e64452c38db84bc7b23f6c60479c5d3abd303c/librt-0.9.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d429bdd4ac0ab17c8e4a8af0ed2a7440b16eba474909ab357131018fe8c7e71", size = 241155, upload-time = "2026-04-09T16:05:55.191Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ce/ee67ec14581de4043e61d05786d2aed6c9b5338816b7859bcf07455c6a9f/librt-0.9.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7202bdcac47d3a708271c4304a474a8605a4a9a4a709e954bf2d3241140aa938", size = 252235, upload-time = "2026-04-09T16:05:56.549Z" }, + { url = "https://files.pythonhosted.org/packages/8a/fa/0ead15daa2b293a54101550b08d4bafe387b7d4a9fc6d2b985602bae69b6/librt-0.9.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0d620e74897f8c2613b3c4e2e9c1e422eb46d2ddd07df540784d44117836af3", size = 244963, upload-time = "2026-04-09T16:05:57.858Z" }, + { url = "https://files.pythonhosted.org/packages/29/68/9fbf9a9aa704ba87689e40017e720aced8d9a4d2b46b82451d8142f91ec9/librt-0.9.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d69fc39e627908f4c03297d5a88d9284b73f4d90b424461e32e8c2485e21c283", size = 257364, upload-time = "2026-04-09T16:05:59.686Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8d/9d60869f1b6716c762e45f66ed945b1e5dd649f7377684c3b176ae424648/librt-0.9.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:c2640e23d2b7c98796f123ffd95cf2022c7777aa8a4a3b98b36c570d37e85eee", size = 247661, upload-time = "2026-04-09T16:06:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/a5c365093962310bfdb4f6af256f191085078ffb529b3f0cbebb5b33ebe2/librt-0.9.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:451daa98463b7695b0a30aa56bf637831ea559e7b8101ac2ef6382e8eb15e29c", size = 248238, upload-time = "2026-04-09T16:06:02.537Z" }, + { url = "https://files.pythonhosted.org/packages/a0/3c/2d34365177f412c9e19c0a29f969d70f5343f27634b76b765a54d8b27705/librt-0.9.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:928bd06eca2c2bbf4349e5b817f837509b0604342e65a502de1d50a7570afd15", size = 269457, upload-time = "2026-04-09T16:06:03.833Z" }, + { url = "https://files.pythonhosted.org/packages/bc/cd/de45b239ea3bdf626f982a00c14bfcf2e12d261c510ba7db62c5969a27cd/librt-0.9.0-cp314-cp314t-win32.whl", hash = "sha256:a9c63e04d003bc0fb6a03b348018b9a3002f98268200e22cc80f146beac5dc40", size = 52453, upload-time = "2026-04-09T16:06:05.229Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f9/bfb32ae428aa75c0c533915622176f0a17d6da7b72b5a3c6363685914f70/librt-0.9.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f162af66a2ed3f7d1d161a82ca584efd15acd9c1cff190a373458c32f7d42118", size = 60044, upload-time = "2026-04-09T16:06:06.398Z" }, + { url = "https://files.pythonhosted.org/packages/aa/47/7d70414bcdbb3bc1f458a8d10558f00bbfdb24e5a11740fc8197e12c3255/librt-0.9.0-cp314-cp314t-win_arm64.whl", hash = "sha256:a4b25c6c25cac5d0d9d6d6da855195b254e0021e513e0249f0e3b444dc6e0e61", size = 50009, upload-time = "2026-04-09T16:06:07.995Z" }, ] [[package]] @@ -655,7 +664,7 @@ wheels = [ [[package]] name = "mypy" -version = "1.19.1" +version = "1.20.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, @@ -663,21 +672,30 @@ dependencies = [ { name = "pathspec" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f5/db/4efed9504bc01309ab9c2da7e352cc223569f05478012b5d9ece38fd44d2/mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba", size = 3582404, upload-time = "2025-12-15T05:03:48.42Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, - { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, - { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, - { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, - { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, - { url = "https://files.pythonhosted.org/packages/de/eb/b83e75f4c820c4247a58580ef86fcd35165028f191e7e1ba57128c52782d/mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1", size = 13199744, upload-time = "2025-12-15T05:03:30.823Z" }, - { url = "https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718", size = 12215815, upload-time = "2025-12-15T05:02:42.323Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c6/bdd60774a0dbfb05122e3e925f2e9e846c009e479dcec4821dad881f5b52/mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b", size = 12740047, upload-time = "2025-12-15T05:03:33.168Z" }, - { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, - { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, - { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/04/af/e3d4b3e9ec91a0ff9aabfdb38692952acf49bbb899c2e4c29acb3a6da3ae/mypy-1.20.2.tar.gz", hash = "sha256:e8222c26daaafd9e8626dec58ae36029f82585890589576f769a650dd20fd665", size = 3817349, upload-time = "2026-04-21T17:12:28.473Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5b/c4/b93812d3a192c9bcf5df405bd2f30277cd0e48106a14d1023c7f6ed6e39b/mypy-1.20.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:edfbfca868cdd6bd8d974a60f8a3682f5565d3f5c99b327640cedd24c4264026", size = 14524670, upload-time = "2026-04-21T17:10:30.737Z" }, + { url = "https://files.pythonhosted.org/packages/f3/47/42c122501bff18eaf1e8f457f5c017933452d8acdc52918a9f59f6812955/mypy-1.20.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e2877a02380adfcdbc69071a0f74d6e9dbbf593c0dc9d174e1f223ffd5281943", size = 13336218, upload-time = "2026-04-21T17:08:44.069Z" }, + { url = "https://files.pythonhosted.org/packages/92/8f/75bbc92f41725fbd585fb17b440b1119b576105df1013622983e18640a93/mypy-1.20.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7488448de6007cd5177c6cea0517ac33b4c0f5ee9b5e9f2be51ce75511a85517", size = 13724906, upload-time = "2026-04-21T17:08:01.02Z" }, + { url = "https://files.pythonhosted.org/packages/a1/32/4c49da27a606167391ff0c39aa955707a00edc500572e562f7c36c08a71f/mypy-1.20.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb9c2fa06887e21d6a3a868762acb82aec34e2c6fd0174064f27c93ede68ad15", size = 14726046, upload-time = "2026-04-21T17:11:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/7f/fc/4e354a1bd70216359deb0c9c54847ee6b32ef78dfb09f5131ff99b494078/mypy-1.20.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d56a78b646f2e3daa865bc70cd5ec5a46c50045801ca8ff17a0c43abc97e3ee", size = 14955587, upload-time = "2026-04-21T17:12:16.033Z" }, + { url = "https://files.pythonhosted.org/packages/62/b2/c0f2056e9eb8f08c62cafd9715e4584b89132bdc832fcf85d27d07b5f3e5/mypy-1.20.2-cp313-cp313-win_amd64.whl", hash = "sha256:2a4102b03bb7481d9a91a6da8d174740c9c8c4401024684b9ca3b7cc5e49852f", size = 10922681, upload-time = "2026-04-21T17:06:35.842Z" }, + { url = "https://files.pythonhosted.org/packages/e5/14/065e333721f05de8ef683d0aa804c23026bcc287446b61cac657b902ccac/mypy-1.20.2-cp313-cp313-win_arm64.whl", hash = "sha256:a95a9248b0c6fd933a442c03c3b113c3b61320086b88e2c444676d3fd1ca3330", size = 9830560, upload-time = "2026-04-21T17:07:51.023Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d1/b4ec96b0ecc620a4443570c6e95c867903428cfcde4206518eafdd5880c3/mypy-1.20.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:419413398fe250aae057fd2fe50166b61077083c9b82754c341cf4fd73038f30", size = 14524561, upload-time = "2026-04-21T17:06:27.325Z" }, + { url = "https://files.pythonhosted.org/packages/3a/63/d2c2ff4fa66bc49477d32dfa26e8a167ba803ea6a69c5efb416036909d30/mypy-1.20.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e73c07f23009962885c197ccb9b41356a30cc0e5a1d0c2ea8fd8fb1362d7f924", size = 13363883, upload-time = "2026-04-21T17:11:11.239Z" }, + { url = "https://files.pythonhosted.org/packages/2a/56/983916806bf4eddeaaa2c9230903c3669c6718552a921154e1c5182c701f/mypy-1.20.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c64e5973df366b747646fc98da921f9d6eba9716d57d1db94a83c026a08e0fb", size = 13742945, upload-time = "2026-04-21T17:08:34.181Z" }, + { url = "https://files.pythonhosted.org/packages/19/65/0cd9285ab010ee8214c83d67c6b49417c40d86ce46f1aa109457b5a9b8d7/mypy-1.20.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a65aa591af023864fd08a97da9974e919452cfe19cb146c8a5dc692626445dc", size = 14706163, upload-time = "2026-04-21T17:05:15.51Z" }, + { url = "https://files.pythonhosted.org/packages/94/97/48ff3b297cafcc94d185243a9190836fb1b01c1b0918fff64e941e973cc9/mypy-1.20.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4fef51b01e638974a6e69885687e9bd40c8d1e09a6cd291cca0619625cf1f558", size = 14938677, upload-time = "2026-04-21T17:05:39.562Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a1/1b4233d255bdd0b38a1f284feeb1c143ca508c19184964e22f8d837ec851/mypy-1.20.2-cp314-cp314-win_amd64.whl", hash = "sha256:913485a03f1bcf5d279409a9d2b9ed565c151f61c09f29991e5faa14033da4c8", size = 11089322, upload-time = "2026-04-21T17:06:44.29Z" }, + { url = "https://files.pythonhosted.org/packages/78/c2/ce7ee2ba36aeb954ba50f18fa25d9c1188578654b97d02a66a15b6f09531/mypy-1.20.2-cp314-cp314-win_arm64.whl", hash = "sha256:c3bae4f855d965b5453784300c12ffc63a548304ac7f99e55d4dc7c898673aa3", size = 10017775, upload-time = "2026-04-21T17:07:20.732Z" }, + { url = "https://files.pythonhosted.org/packages/4e/a1/9d93a7d0b5859af0ead82b4888b46df6c8797e1bc5e1e262a08518c6d48e/mypy-1.20.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2de3dcea53babc1c3237a19002bc3d228ce1833278f093b8d619e06e7cc79609", size = 15549002, upload-time = "2026-04-21T17:08:23.107Z" }, + { url = "https://files.pythonhosted.org/packages/00/d2/09a6a10ee1bf0008f6c144d9676f2ca6a12512151b4e0ad0ff6c4fac5337/mypy-1.20.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:52b176444e2e5054dfcbcb8c75b0b719865c96247b37407184bbfca5c353f2c2", size = 14401942, upload-time = "2026-04-21T17:07:31.837Z" }, + { url = "https://files.pythonhosted.org/packages/57/da/9594b75c3c019e805250bed3583bdf4443ff9e6ef08f97e39ae308cb06f2/mypy-1.20.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:688c3312e5dadb573a2c69c82af3a298d43ecf9e6d264e0f95df960b5f6ac19c", size = 15041649, upload-time = "2026-04-21T17:09:34.653Z" }, + { url = "https://files.pythonhosted.org/packages/97/77/f75a65c278e6e8eba2071f7f5a90481891053ecc39878cc444634d892abe/mypy-1.20.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29752dbbf8cc53f89f6ac096d363314333045c257c9c75cbd189ca2de0455744", size = 15864588, upload-time = "2026-04-21T17:11:44.936Z" }, + { url = "https://files.pythonhosted.org/packages/d7/46/1a4e1c66e96c1a3246ddf5403d122ac9b0a8d2b7e65730b9d6533ba7a6d3/mypy-1.20.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:803203d2b6ea644982c644895c2f78b28d0e208bba7b27d9b921e0ec5eb207c6", size = 16093956, upload-time = "2026-04-21T17:10:17.683Z" }, + { url = "https://files.pythonhosted.org/packages/5a/2c/78a8851264dec38cd736ca5b8bc9380674df0dd0be7792f538916157716c/mypy-1.20.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9bcb8aa397ff0093c824182fd76a935a9ba7ad097fcbef80ae89bf6c1731d8ec", size = 12568661, upload-time = "2026-04-21T17:11:54.473Z" }, + { url = "https://files.pythonhosted.org/packages/83/01/cd7318aa03493322ce275a0e14f4f52b8896335e4e79d4fb8153a7ad2b77/mypy-1.20.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e061b58443f1736f8a37c48978d7ab581636d6ab03e3d4f99e3fa90463bb9382", size = 10389240, upload-time = "2026-04-21T17:09:42.719Z" }, + { url = "https://files.pythonhosted.org/packages/28/9a/f23c163e25b11074188251b0b5a0342625fc1cdb6af604757174fa9acc9b/mypy-1.20.2-py3-none-any.whl", hash = "sha256:a94c5a76ab46c5e6257c7972b6c8cff0574201ca7dc05647e33e795d78680563", size = 2637314, upload-time = "2026-04-21T17:05:54.5Z" }, ] [[package]] @@ -745,11 +763,11 @@ wheels = [ [[package]] name = "pathspec" -version = "0.12.1" +version = "1.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, ] [[package]] @@ -845,7 +863,7 @@ wheels = [ [[package]] name = "pytest" -version = "9.0.2" +version = "9.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -854,9 +872,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, + { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" }, ] [[package]] @@ -874,16 +892,16 @@ wheels = [ [[package]] name = "pytest-cov" -version = "7.0.0" +version = "7.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coverage" }, { name = "pluggy" }, { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5e/f7/c933acc76f5208b3b00089573cf6a2bc26dc80a8aece8f52bb7d6b1855ca/pytest_cov-7.0.0.tar.gz", hash = "sha256:33c97eda2e049a0c5298e91f519302a1334c26ac65c1a483d6206fd458361af1", size = 54328, upload-time = "2025-09-09T10:57:02.113Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/51/a849f96e117386044471c8ec2bd6cfebacda285da9525c9106aeb28da671/pytest_cov-7.1.0.tar.gz", hash = "sha256:30674f2b5f6351aa09702a9c8c364f6a01c27aae0c1366ae8016160d1efc56b2", size = 55592, upload-time = "2026-03-21T20:11:16.284Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/49/1377b49de7d0c1ce41292161ea0f721913fa8722c19fb9c1e3aa0367eecb/pytest_cov-7.0.0-py3-none-any.whl", hash = "sha256:3b8e9558b16cc1479da72058bdecf8073661c7f57f7d3c5f22a1c23507f2d861", size = 22424, upload-time = "2025-09-09T10:57:00.695Z" }, + { url = "https://files.pythonhosted.org/packages/9d/7a/d968e294073affff457b041c2be9868a40c1c71f4a35fcc1e45e5493067b/pytest_cov-7.1.0-py3-none-any.whl", hash = "sha256:a0461110b7865f9a271aa1b51e516c9a95de9d696734a2f71e3e78f46e1d4678", size = 22876, upload-time = "2026-03-21T20:11:14.438Z" }, ] [[package]] @@ -1029,27 +1047,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/22/9e4f66ee588588dc6c9af6a994e12d26e19efbe874d1a909d09a6dac7a59/ruff-0.15.7.tar.gz", hash = "sha256:04f1ae61fc20fe0b148617c324d9d009b5f63412c0b16474f3d5f1a1a665f7ac", size = 4601277, upload-time = "2026-03-19T16:26:22.605Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/2f/0b08ced94412af091807b6119ca03755d651d3d93a242682bf020189db94/ruff-0.15.7-py3-none-linux_armv6l.whl", hash = "sha256:a81cc5b6910fb7dfc7c32d20652e50fa05963f6e13ead3c5915c41ac5d16668e", size = 10489037, upload-time = "2026-03-19T16:26:32.47Z" }, - { url = "https://files.pythonhosted.org/packages/91/4a/82e0fa632e5c8b1eba5ee86ecd929e8ff327bbdbfb3c6ac5d81631bef605/ruff-0.15.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:722d165bd52403f3bdabc0ce9e41fc47070ac56d7a91b4e0d097b516a53a3477", size = 10955433, upload-time = "2026-03-19T16:27:00.205Z" }, - { url = "https://files.pythonhosted.org/packages/ab/10/12586735d0ff42526ad78c049bf51d7428618c8b5c467e72508c694119df/ruff-0.15.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7fbc2448094262552146cbe1b9643a92f66559d3761f1ad0656d4991491af49e", size = 10269302, upload-time = "2026-03-19T16:26:26.183Z" }, - { url = "https://files.pythonhosted.org/packages/eb/5d/32b5c44ccf149a26623671df49cbfbd0a0ae511ff3df9d9d2426966a8d57/ruff-0.15.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b39329b60eba44156d138275323cc726bbfbddcec3063da57caa8a8b1d50adf", size = 10607625, upload-time = "2026-03-19T16:27:03.263Z" }, - { url = "https://files.pythonhosted.org/packages/5d/f1/f0001cabe86173aaacb6eb9bb734aa0605f9a6aa6fa7d43cb49cbc4af9c9/ruff-0.15.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87768c151808505f2bfc93ae44e5f9e7c8518943e5074f76ac21558ef5627c85", size = 10324743, upload-time = "2026-03-19T16:27:09.791Z" }, - { url = "https://files.pythonhosted.org/packages/7a/87/b8a8f3d56b8d848008559e7c9d8bf367934d5367f6d932ba779456e2f73b/ruff-0.15.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb0511670002c6c529ec66c0e30641c976c8963de26a113f3a30456b702468b0", size = 11138536, upload-time = "2026-03-19T16:27:06.101Z" }, - { url = "https://files.pythonhosted.org/packages/e4/f2/4fd0d05aab0c5934b2e1464784f85ba2eab9d54bffc53fb5430d1ed8b829/ruff-0.15.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0d19644f801849229db8345180a71bee5407b429dd217f853ec515e968a6912", size = 11994292, upload-time = "2026-03-19T16:26:48.718Z" }, - { url = "https://files.pythonhosted.org/packages/64/22/fc4483871e767e5e95d1622ad83dad5ebb830f762ed0420fde7dfa9d9b08/ruff-0.15.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4806d8e09ef5e84eb19ba833d0442f7e300b23fe3f0981cae159a248a10f0036", size = 11398981, upload-time = "2026-03-19T16:26:54.513Z" }, - { url = "https://files.pythonhosted.org/packages/b0/99/66f0343176d5eab02c3f7fcd2de7a8e0dd7a41f0d982bee56cd1c24db62b/ruff-0.15.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dce0896488562f09a27b9c91b1f58a097457143931f3c4d519690dea54e624c5", size = 11242422, upload-time = "2026-03-19T16:26:29.277Z" }, - { url = "https://files.pythonhosted.org/packages/5d/3a/a7060f145bfdcce4c987ea27788b30c60e2c81d6e9a65157ca8afe646328/ruff-0.15.7-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:1852ce241d2bc89e5dc823e03cff4ce73d816b5c6cdadd27dbfe7b03217d2a12", size = 11232158, upload-time = "2026-03-19T16:26:42.321Z" }, - { url = "https://files.pythonhosted.org/packages/a7/53/90fbb9e08b29c048c403558d3cdd0adf2668b02ce9d50602452e187cd4af/ruff-0.15.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5f3e4b221fb4bd293f79912fc5e93a9063ebd6d0dcbd528f91b89172a9b8436c", size = 10577861, upload-time = "2026-03-19T16:26:57.459Z" }, - { url = "https://files.pythonhosted.org/packages/2f/aa/5f486226538fe4d0f0439e2da1716e1acf895e2a232b26f2459c55f8ddad/ruff-0.15.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b15e48602c9c1d9bdc504b472e90b90c97dc7d46c7028011ae67f3861ceba7b4", size = 10327310, upload-time = "2026-03-19T16:26:35.909Z" }, - { url = "https://files.pythonhosted.org/packages/99/9e/271afdffb81fe7bfc8c43ba079e9d96238f674380099457a74ccb3863857/ruff-0.15.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1b4705e0e85cedc74b0a23cf6a179dbb3df184cb227761979cc76c0440b5ab0d", size = 10840752, upload-time = "2026-03-19T16:26:45.723Z" }, - { url = "https://files.pythonhosted.org/packages/bf/29/a4ae78394f76c7759953c47884eb44de271b03a66634148d9f7d11e721bd/ruff-0.15.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:112c1fa316a558bb34319282c1200a8bf0495f1b735aeb78bfcb2991e6087580", size = 11336961, upload-time = "2026-03-19T16:26:39.076Z" }, - { url = "https://files.pythonhosted.org/packages/26/6b/8786ba5736562220d588a2f6653e6c17e90c59ced34a2d7b512ef8956103/ruff-0.15.7-py3-none-win32.whl", hash = "sha256:6d39e2d3505b082323352f733599f28169d12e891f7dd407f2d4f54b4c2886de", size = 10582538, upload-time = "2026-03-19T16:26:15.992Z" }, - { url = "https://files.pythonhosted.org/packages/2b/e9/346d4d3fffc6871125e877dae8d9a1966b254fbd92a50f8561078b88b099/ruff-0.15.7-py3-none-win_amd64.whl", hash = "sha256:4d53d712ddebcd7dace1bc395367aec12c057aacfe9adbb6d832302575f4d3a1", size = 11755839, upload-time = "2026-03-19T16:26:19.897Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e8/726643a3ea68c727da31570bde48c7a10f1aa60eddd628d94078fec586ff/ruff-0.15.7-py3-none-win_arm64.whl", hash = "sha256:18e8d73f1c3fdf27931497972250340f92e8c861722161a9caeb89a58ead6ed2", size = 11023304, upload-time = "2026-03-19T16:26:51.669Z" }, +version = "0.15.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/8d/192f3d7103816158dfd5ea50d098ef2aec19194e6cbccd4b3485bdb2eb2d/ruff-0.15.11.tar.gz", hash = "sha256:f092b21708bf0e7437ce9ada249dfe688ff9a0954fc94abab05dcea7dcd29c33", size = 4637264, upload-time = "2026-04-16T18:46:26.58Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/1e/6aca3427f751295ab011828e15e9bf452200ac74484f1db4be0197b8170b/ruff-0.15.11-py3-none-linux_armv6l.whl", hash = "sha256:e927cfff503135c558eb581a0c9792264aae9507904eb27809cdcff2f2c847b7", size = 10607943, upload-time = "2026-04-16T18:46:05.967Z" }, + { url = "https://files.pythonhosted.org/packages/e7/26/1341c262e74f36d4e84f3d6f4df0ac68cd53331a66bfc5080daa17c84c0b/ruff-0.15.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7a1b5b2938d8f890b76084d4fa843604d787a912541eae85fd7e233398bbb73e", size = 10988592, upload-time = "2026-04-16T18:46:00.742Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/850b1d6ffa9564fbb6740429bad53df1094082fe515c8c1e74b6d8d05f18/ruff-0.15.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d4176f3d194afbdaee6e41b9ccb1a2c287dba8700047df474abfbe773825d1cb", size = 10338501, upload-time = "2026-04-16T18:46:03.723Z" }, + { url = "https://files.pythonhosted.org/packages/f2/11/cc1284d3e298c45a817a6aadb6c3e1d70b45c9b36d8d9cce3387b495a03a/ruff-0.15.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b17c886fb88203ced3afe7f14e8d5ae96e9d2f4ccc0ee66aa19f2c2675a27e4", size = 10670693, upload-time = "2026-04-16T18:46:41.941Z" }, + { url = "https://files.pythonhosted.org/packages/ce/9e/f8288b034ab72b371513c13f9a41d9ba3effac54e24bfb467b007daee2ca/ruff-0.15.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:49fafa220220afe7758a487b048de4c8f9f767f37dfefad46b9dd06759d003eb", size = 10416177, upload-time = "2026-04-16T18:46:21.717Z" }, + { url = "https://files.pythonhosted.org/packages/85/71/504d79abfd3d92532ba6bbe3d1c19fada03e494332a59e37c7c2dabae427/ruff-0.15.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2ab8427e74a00d93b8bda1307b1e60970d40f304af38bccb218e056c220120d", size = 11221886, upload-time = "2026-04-16T18:46:15.086Z" }, + { url = "https://files.pythonhosted.org/packages/43/5a/947e6ab7a5ad603d65b474be15a4cbc6d29832db5d762cd142e4e3a74164/ruff-0.15.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:195072c0c8e1fc8f940652073df082e37a5d9cb43b4ab1e4d0566ab8977a13b7", size = 12075183, upload-time = "2026-04-16T18:46:07.944Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a1/0b7bb6268775fdd3a0818aee8efd8f5b4e231d24dd4d528ced2534023182/ruff-0.15.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3a0996d486af3920dec930a2e7daed4847dfc12649b537a9335585ada163e9e", size = 11516575, upload-time = "2026-04-16T18:46:31.687Z" }, + { url = "https://files.pythonhosted.org/packages/30/c3/bb5168fc4d233cc06e95f482770d0f3c87945a0cd9f614b90ea8dc2f2833/ruff-0.15.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bef2cb556d509259f1fe440bb9cd33c756222cf0a7afe90d15edf0866702431", size = 11306537, upload-time = "2026-04-16T18:46:36.988Z" }, + { url = "https://files.pythonhosted.org/packages/e4/92/4cfae6441f3967317946f3b788136eecf093729b94d6561f963ed810c82e/ruff-0.15.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:030d921a836d7d4a12cf6e8d984a88b66094ccb0e0f17ddd55067c331191bf19", size = 11296813, upload-time = "2026-04-16T18:46:24.182Z" }, + { url = "https://files.pythonhosted.org/packages/43/26/972784c5dde8313acde8ac71ba8ac65475b85db4a2352a76c9934361f9bc/ruff-0.15.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0e783b599b4577788dbbb66b9addcef87e9a8832f4ce0c19e34bf55543a2f890", size = 10633136, upload-time = "2026-04-16T18:46:39.802Z" }, + { url = "https://files.pythonhosted.org/packages/5b/53/3985a4f185020c2f367f2e08a103032e12564829742a1b417980ce1514a0/ruff-0.15.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ae90592246625ba4a34349d68ec28d4400d75182b71baa196ddb9f82db025ef5", size = 10424701, upload-time = "2026-04-16T18:46:10.381Z" }, + { url = "https://files.pythonhosted.org/packages/d3/57/bf0dfb32241b56c83bb663a826133da4bf17f682ba8c096973065f6e6a68/ruff-0.15.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1f111d62e3c983ed20e0ca2e800f8d77433a5b1161947df99a5c2a3fb60514f0", size = 10873887, upload-time = "2026-04-16T18:46:29.157Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/e48076b2a57dc33ee8c7a957296f97c744ca891a8ffb4ffb1aaa3b3f517d/ruff-0.15.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:06f483d6646f59eaffba9ae30956370d3a886625f511a3108994000480621d1c", size = 11404316, upload-time = "2026-04-16T18:46:19.462Z" }, + { url = "https://files.pythonhosted.org/packages/88/27/0195d15fe7a897cbcba0904792c4b7c9fdd958456c3a17d2ea6093716a9a/ruff-0.15.11-py3-none-win32.whl", hash = "sha256:476a2aa56b7da0b73a3ee80b6b2f0e19cce544245479adde7baa65466664d5f3", size = 10655535, upload-time = "2026-04-16T18:46:12.47Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5e/c927b325bd4c1d3620211a4b96f47864633199feed60fa936025ab27e090/ruff-0.15.11-py3-none-win_amd64.whl", hash = "sha256:8b6756d88d7e234fb0c98c91511aae3cd519d5e3ed271cae31b20f39cb2a12a3", size = 11779692, upload-time = "2026-04-16T18:46:17.268Z" }, + { url = "https://files.pythonhosted.org/packages/63/b6/aeadee5443e49baa2facd51131159fd6301cc4ccfc1541e4df7b021c37dd/ruff-0.15.11-py3-none-win_arm64.whl", hash = "sha256:063fed18cc1bbe0ee7393957284a6fe8b588c6a406a285af3ee3f46da2391ee4", size = 11032614, upload-time = "2026-04-16T18:46:34.487Z" }, ] [[package]] @@ -1134,11 +1152,11 @@ wheels = [ [[package]] name = "types-psutil" -version = "7.2.2.20260130" +version = "7.2.2.20260408" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/69/14/fc5fb0a6ddfadf68c27e254a02ececd4d5c7fdb0efcb7e7e917a183497fb/types_psutil-7.2.2.20260130.tar.gz", hash = "sha256:15b0ab69c52841cf9ce3c383e8480c620a4d13d6a8e22b16978ebddac5590950", size = 26535, upload-time = "2026-01-30T03:58:14.116Z" } +sdist = { url = "https://files.pythonhosted.org/packages/44/14/279fd5defebbd560ede04aecd38f7651cccee7336f2264d0889d8c9a9d43/types_psutil-7.2.2.20260408.tar.gz", hash = "sha256:e8053450685965b8cd52afb62569073d00ea9967ae78bb45dff5f606847f97f2", size = 26556, upload-time = "2026-04-08T04:27:44.349Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/d7/60974b7e31545d3768d1770c5fe6e093182c3bfd819429b33133ba6b3e89/types_psutil-7.2.2.20260130-py3-none-any.whl", hash = "sha256:15523a3caa7b3ff03ac7f9b78a6470a59f88f48df1d74a39e70e06d2a99107da", size = 32876, upload-time = "2026-01-30T03:58:13.172Z" }, + { url = "https://files.pythonhosted.org/packages/af/40/2fd92a4a1ee088c4dbcc44c977908d9869838d9cd2a2fa2e001352f56694/types_psutil-7.2.2.20260408-py3-none-any.whl", hash = "sha256:0c334f6f6bc9e9c24fca5c7d1f0b6971c961a0a2e3956dc5ce704722c01f9762", size = 32861, upload-time = "2026-04-08T04:27:42.929Z" }, ] [[package]] From 0f88d00bef5f4b0fe6fb46e173bdd482c07e1a1b Mon Sep 17 00:00:00 2001 From: Ervins Strauhmanis <17160191+resoltico@users.noreply.github.com> Date: Wed, 22 Apr 2026 16:48:30 +0300 Subject: [PATCH 2/2] docs: harden release protocol PR diff fallback --- docs/RELEASE_PROTOCOL.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/RELEASE_PROTOCOL.md b/docs/RELEASE_PROTOCOL.md index 7bf67b72..878cc83f 100644 --- a/docs/RELEASE_PROTOCOL.md +++ b/docs/RELEASE_PROTOCOL.md @@ -161,6 +161,15 @@ gh pr checks Rules: - `gh pr diff --name-only` must still match the intended release file set. +- If `gh pr diff --name-only` fails with HTTP 406 because the PR diff is too large, fall back + to GitHub's paginated file list API and the local branch comparison: + +```bash +REPO="$(gh repo view --json nameWithOwner -q .nameWithOwner)" +gh api "repos/$REPO/pulls//files" --paginate --jq '.[].filename' +git diff --name-only origin/main...HEAD +``` + - If you push another commit, reopen both the staging checkpoint and this PR diff checkpoint. - Do not continue until the required PR checks are green.

    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

  3. !zG??wdvG}748X-LUa>V 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%0DX`C9G7D_3WgdzLrxuE!GP78)vcA=j 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 Mwb`yQQjTo2scoOIts7!Q8 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%0D|gmc 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�Uv= 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