From c585210573d04c5434fb4d23220e9b77c2f5a48d Mon Sep 17 00:00:00 2001 From: dark Date: Fri, 18 Sep 2026 05:33:43 +0800 Subject: [PATCH 01/39] feat(site): stage OINK A+B+C candidate - integrate reviewed OINK core, Community and ASF downloads\n- include fixed staging push workflow targeting asf-staging-oink\n- preserve five-version aggregate and click-gated AI contracts\n- publish only after local and independent review evidence --- .github/workflows/hugo.yml | 437 +++- .gitignore | 4 + README.md | 20 +- assets/js/hugegraph-shell.js | 461 ++++ assets/js/kapa-adapter.js | 432 ++++ assets/scss/_styles_project.scss | 227 +- assets/scss/_variables_project.scss | 49 + assets/scss/community-members.scss | 62 + content/cn/docs/_index.md | 1 + content/cn/docs/clients/_index.md | 3 + content/cn/docs/clients/restful-api/_index.md | 2 + content/cn/docs/clients/restful-api/vertex.md | 9 +- .../cn/docs/config/config-authentication.md | 2 + content/cn/docs/config/config-guide.md | 4 +- content/cn/docs/download/download.md | 95 +- content/cn/docs/introduction/_index.md | 2 + .../computing/hugegraph-computer.md | 2 + .../quickstart/hugegraph/hugegraph-hstore.md | 6 +- .../docs/quickstart/hugegraph/hugegraph-pd.md | 2 + .../quickstart/hugegraph/hugegraph-server.md | 17 +- .../quickstart/toolchain/hugegraph-hubble.md | 3 + .../quickstart/toolchain/hugegraph-loader.md | 2 + content/en/docs/_index.md | 1 + content/en/docs/clients/_index.md | 3 + content/en/docs/clients/restful-api/_index.md | 2 + content/en/docs/clients/restful-api/vertex.md | 9 +- .../en/docs/config/config-authentication.md | 2 + content/en/docs/config/config-guide.md | 4 +- content/en/docs/download/download.md | 90 +- content/en/docs/introduction/_index.md | 2 + .../computing/hugegraph-computer.md | 2 + .../quickstart/hugegraph/hugegraph-hstore.md | 6 +- .../docs/quickstart/hugegraph/hugegraph-pd.md | 2 + .../quickstart/hugegraph/hugegraph-server.md | 17 +- .../quickstart/toolchain/hugegraph-hubble.md | 3 + .../quickstart/toolchain/hugegraph-loader.md | 2 + contribution.md | 25 +- data/community/github-map.json | 4 + data/community/roster.json | 209 ++ data/downloads/asf.json | 53 + data/landing/community/cn.yaml | 5 + data/landing/community/en.yaml | 5 + data/version_routes.json | 1513 +++++++++++++ dist/validate-site-output.py | 692 +++++- hugo.yaml | 31 +- i18n/en.yaml | 27 + i18n/{cn.yaml => zh-CN.yaml} | 26 + layouts/_partials/actions/manifest.html | 23 + layouts/_partials/ai/config.html | 33 + layouts/_partials/asf-downloads.html | 101 + layouts/_partials/backlinks-sources.html | 21 + layouts/_partials/backlinks.html | 50 + layouts/_partials/community/members.html | 37 + layouts/_partials/community/members.md | 23 + .../_partials/content/image-zoom-config.html | 9 + layouts/_partials/content/render.html | 5 + layouts/_partials/hooks/body-end.html | 59 + layouts/_partials/hooks/head-end.html | 5 + .../landing/sections/community-members.html | 1 + layouts/_partials/navbar-item.html | 16 +- layouts/_partials/navbar.html | 33 +- layouts/_partials/print/page-content.html | 8 + layouts/_partials/share/bar.html | 13 + layouts/_partials/shell/sidebar-panel.html | 10 +- layouts/_partials/version-link.html | 15 + layouts/_partials/version-menu-links.html | 17 + layouts/_partials/version-options.html | 22 + layouts/_partials/version-target.html | 68 + layouts/_shortcodes/asf-downloads.html | 8 + layouts/community/landing.md | 29 + layouts/landing.html | 6 + layouts/landing.print.html | 6 + scripts/community_roster.md | 41 + scripts/community_roster.py | 710 ++++++ .../fixtures/community_search_queries.json | 26 + scripts/hugo.sh | 111 + scripts/test_community_roster.py | 785 +++++++ scripts/test_download_data.py | 198 ++ scripts/test_hugo_wrapper.py | 204 ++ scripts/test_validate_site_output.py | 635 ++++++ scripts/test_versioning.py | 1535 ++++++++++++- scripts/versioning.py | 2008 +++++++++++++++-- .../accordion-active-dark.svg | 3 + .../bootstrap-controls/accordion-active.svg | 3 + .../img/bootstrap-controls/accordion-dark.svg | 3 + static/img/bootstrap-controls/accordion.svg | 3 + .../img/bootstrap-controls/carousel-next.svg | 3 + .../img/bootstrap-controls/carousel-prev.svg | 3 + .../img/bootstrap-controls/check-checked.svg | 3 + .../check-indeterminate.svg | 3 + static/img/bootstrap-controls/close.svg | 3 + static/img/bootstrap-controls/navbar-dark.svg | 3 + .../img/bootstrap-controls/navbar-light.svg | 3 + .../img/bootstrap-controls/radio-checked.svg | 3 + static/img/bootstrap-controls/select-dark.svg | 3 + static/img/bootstrap-controls/select.svg | 3 + .../img/bootstrap-controls/switch-checked.svg | 3 + static/img/bootstrap-controls/switch-dark.svg | 3 + .../img/bootstrap-controls/switch-focus.svg | 3 + static/img/bootstrap-controls/switch.svg | 3 + .../bootstrap-controls/validation-invalid.svg | 7 + .../bootstrap-controls/validation-valid.svg | 3 + static/img/social/hugegraph-default.png | Bin 0 -> 984595 bytes tests/e2e/accessibility.spec.js | 45 + tests/e2e/ai-enabled.yaml | 8 + tests/e2e/ai.spec.js | 163 ++ tests/e2e/artifact-test.js | 31 + tests/e2e/package-lock.json | 103 + tests/e2e/package.json | 16 + tests/e2e/platform.spec.js | 222 ++ tests/e2e/playwright.config.js | 44 + tests/e2e/search-ranking.spec.js | 103 + tests/e2e/versioning.spec.js | 305 +++ tests/e2e/visual.spec.js | 43 + tests/e2e/workflow-contract.test.cjs | 99 + tests/ui-ai/ai-enabled.yaml | 8 + tests/ui-ai/ai-invalid.yaml | 8 + tests/ui-ai/backlinks-render.test.cjs | 54 + tests/ui-ai/fixtures/backlinks.yaml | 5 + .../backlinks/content/en/docs/_index.md | 3 + .../backlinks/content/en/docs/source-1.md | 5 + .../backlinks/content/en/docs/source-2.md | 5 + .../backlinks/content/en/docs/source-3.md | 5 + .../backlinks/content/en/docs/source-4.md | 5 + .../backlinks/content/en/docs/source-5.md | 5 + .../backlinks/content/en/docs/source-6.md | 5 + .../backlinks/content/en/docs/target.md | 6 + tests/ui-ai/kapa-adapter.test.cjs | 287 +++ tests/ui-ai/ui-contract.test.cjs | 126 ++ tests/ui-ai/version-manifest.test.cjs | 158 ++ tests/ui-ai/version-switch.test.cjs | 194 ++ versions.json | 16 + 132 files changed, 12994 insertions(+), 595 deletions(-) create mode 100644 assets/js/hugegraph-shell.js create mode 100644 assets/js/kapa-adapter.js create mode 100644 assets/scss/_variables_project.scss create mode 100644 assets/scss/community-members.scss create mode 100644 data/community/github-map.json create mode 100644 data/community/roster.json create mode 100644 data/downloads/asf.json create mode 100644 data/version_routes.json create mode 100644 i18n/en.yaml rename i18n/{cn.yaml => zh-CN.yaml} (86%) create mode 100644 layouts/_partials/actions/manifest.html create mode 100644 layouts/_partials/ai/config.html create mode 100644 layouts/_partials/asf-downloads.html create mode 100644 layouts/_partials/backlinks-sources.html create mode 100644 layouts/_partials/backlinks.html create mode 100644 layouts/_partials/community/members.html create mode 100644 layouts/_partials/community/members.md create mode 100644 layouts/_partials/content/image-zoom-config.html create mode 100644 layouts/_partials/content/render.html create mode 100644 layouts/_partials/hooks/body-end.html create mode 100644 layouts/_partials/hooks/head-end.html create mode 100644 layouts/_partials/landing/sections/community-members.html create mode 100644 layouts/_partials/print/page-content.html create mode 100644 layouts/_partials/share/bar.html create mode 100644 layouts/_partials/version-link.html create mode 100644 layouts/_partials/version-menu-links.html create mode 100644 layouts/_partials/version-options.html create mode 100644 layouts/_partials/version-target.html create mode 100644 layouts/_shortcodes/asf-downloads.html create mode 100644 layouts/community/landing.md create mode 100644 layouts/landing.html create mode 100644 layouts/landing.print.html create mode 100644 scripts/community_roster.md create mode 100644 scripts/community_roster.py create mode 100644 scripts/fixtures/community_search_queries.json create mode 100755 scripts/hugo.sh create mode 100644 scripts/test_community_roster.py create mode 100644 scripts/test_download_data.py create mode 100644 scripts/test_hugo_wrapper.py create mode 100644 static/img/bootstrap-controls/accordion-active-dark.svg create mode 100644 static/img/bootstrap-controls/accordion-active.svg create mode 100644 static/img/bootstrap-controls/accordion-dark.svg create mode 100644 static/img/bootstrap-controls/accordion.svg create mode 100644 static/img/bootstrap-controls/carousel-next.svg create mode 100644 static/img/bootstrap-controls/carousel-prev.svg create mode 100644 static/img/bootstrap-controls/check-checked.svg create mode 100644 static/img/bootstrap-controls/check-indeterminate.svg create mode 100644 static/img/bootstrap-controls/close.svg create mode 100644 static/img/bootstrap-controls/navbar-dark.svg create mode 100644 static/img/bootstrap-controls/navbar-light.svg create mode 100644 static/img/bootstrap-controls/radio-checked.svg create mode 100644 static/img/bootstrap-controls/select-dark.svg create mode 100644 static/img/bootstrap-controls/select.svg create mode 100644 static/img/bootstrap-controls/switch-checked.svg create mode 100644 static/img/bootstrap-controls/switch-dark.svg create mode 100644 static/img/bootstrap-controls/switch-focus.svg create mode 100644 static/img/bootstrap-controls/switch.svg create mode 100644 static/img/bootstrap-controls/validation-invalid.svg create mode 100644 static/img/bootstrap-controls/validation-valid.svg create mode 100644 static/img/social/hugegraph-default.png create mode 100644 tests/e2e/accessibility.spec.js create mode 100644 tests/e2e/ai-enabled.yaml create mode 100644 tests/e2e/ai.spec.js create mode 100644 tests/e2e/artifact-test.js create mode 100644 tests/e2e/package-lock.json create mode 100644 tests/e2e/package.json create mode 100644 tests/e2e/platform.spec.js create mode 100644 tests/e2e/playwright.config.js create mode 100644 tests/e2e/search-ranking.spec.js create mode 100644 tests/e2e/versioning.spec.js create mode 100644 tests/e2e/visual.spec.js create mode 100644 tests/e2e/workflow-contract.test.cjs create mode 100644 tests/ui-ai/ai-enabled.yaml create mode 100644 tests/ui-ai/ai-invalid.yaml create mode 100644 tests/ui-ai/backlinks-render.test.cjs create mode 100644 tests/ui-ai/fixtures/backlinks.yaml create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/_index.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/source-1.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/source-2.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/source-3.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/source-4.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/source-5.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/source-6.md create mode 100644 tests/ui-ai/fixtures/backlinks/content/en/docs/target.md create mode 100644 tests/ui-ai/kapa-adapter.test.cjs create mode 100644 tests/ui-ai/ui-contract.test.cjs create mode 100644 tests/ui-ai/version-manifest.test.cjs create mode 100644 tests/ui-ai/version-switch.test.cjs diff --git a/.github/workflows/hugo.yml b/.github/workflows/hugo.yml index ecc3c46643..e93fa797f4 100644 --- a/.github/workflows/hugo.yml +++ b/.github/workflows/hugo.yml @@ -3,231 +3,462 @@ name: Build and deploy site on: pull_request: push: - branches: [master] + branches: [master, staging/oink-reviewed] + workflow_dispatch: + inputs: + operation: + description: Fixed deployment operation + required: true + type: choice + options: [staging-next, production-history-refresh] + scope: + description: Versions to build + required: true + default: latest + type: choice + options: [latest, full] + candidate_branch: + description: ASF repository branch used for latest + required: true + type: string + confirmation: + description: Fixed target confirmation from the runbook + required: true + type: string concurrency: - group: ${{ github.workflow }}-${{ github.ref }} + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number) || ((inputs.operation == 'staging-next' || github.ref == 'refs/heads/staging/oink-reviewed') && 'asf-staging-oink' || 'asf-site') }} cancel-in-progress: true env: HUGO_VERSION: 0.165.0 HUGO_ENVIRONMENT: production - HUGO_CACHEDIR: /tmp/hugo_cache + PRODUCTION_ORIGIN: https://hugegraph.apache.org/ + STAGING_ORIGIN: https://hugegraph-oink.staged.apache.org/ jobs: prepare: runs-on: ubuntu-latest - permissions: - contents: read + timeout-minutes: 10 + permissions: { contents: read } + env: + HUGO_CACHEDIR: /tmp/hugo-cache-${{ github.run_id }}-${{ github.run_attempt }}-prepare outputs: versions: ${{ steps.matrix.outputs.versions }} + selection: ${{ steps.plan.outputs.selection }} + site_origin: ${{ steps.plan.outputs.site_origin }} + historical_origin: ${{ steps.plan.outputs.historical_origin }} + artifact_prefix: ${{ steps.plan.outputs.artifact_prefix }} + publish_branch: ${{ steps.plan.outputs.publish_branch }} + latest_sha: ${{ steps.plan.outputs.latest_sha }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 persist-credentials: false - - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.13" + - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 + with: + go-version-file: go.mod + cache: true + - name: Setup Hugo Extended + uses: peaceiris/actions-hugo@2752ce1d29631191ea3f27c23495fa06139a5b78 # v3.2.1 + with: + hugo-version: ${{ env.HUGO_VERSION }} + extended: true + - name: Install WebP validators + run: | + sudo apt-get update + sudo apt-get install --yes --no-install-recommends webp + command -v cwebp + command -v dwebp + + - name: Resolve trusted event plan + id: plan + env: + EVENT_NAME: ${{ github.event_name }} + EVENT_SHA: ${{ github.event.pull_request.head.sha || github.sha }} + OPERATION: ${{ inputs.operation }} + SCOPE: ${{ inputs.scope }} + CANDIDATE_BRANCH: ${{ inputs.candidate_branch }} + CONFIRMATION: ${{ inputs.confirmation }} + run: | + set -euo pipefail + all_selection="$(jq -er '[.versions[].id] | join(",")' versions.json)" + latest_selection="$(jq -er '[.versions[] | select(.archived == false) | .id] | join(",")' versions.json)" + latest_ref="$(jq -er '[.versions[] | select(.archived == false) | .ref] | join(",")' versions.json)" + test -n "$all_selection" + test -n "$latest_selection" + test "${latest_selection#*,}" = "$latest_selection" + test -n "$latest_ref" + test "${latest_ref#*,}" = "$latest_ref" + selection="$all_selection" + site_origin="$PRODUCTION_ORIGIN" + historical_origin="$PRODUCTION_ORIGIN" + artifact_prefix="production" + publish_branch="" + latest_sha="$EVENT_SHA" + + if [[ "$EVENT_NAME" == workflow_dispatch ]]; then + test "$GITHUB_REF" = refs/heads/master + candidate="$CANDIDATE_BRANCH" + test -n "$candidate" + [[ "$candidate" =~ ^[A-Za-z0-9][A-Za-z0-9._/-]*$ ]] + [[ "$candidate" != refs/* && "$candidate" != */ && "$candidate" != *//* ]] + [[ "$candidate" != *..* ]] + [[ ! "$candidate" =~ ^[0-9a-fA-F]{40}$ ]] + [[ "$candidate" != asf-site && "$candidate" != asf-staging-oink ]] + resolved="$(git ls-remote --heads origin "refs/heads/$candidate")" + test "$(wc -l <<<"$resolved" | tr -d ' ')" = 1 + latest_sha="$(awk '{print $1}' <<<"$resolved")" + [[ "$latest_sha" =~ ^[0-9a-f]{40}$ ]] + git fetch --no-tags origin "$latest_sha" + + case "$OPERATION" in + staging-next) + test "$CONFIRMATION" = "publish asf-staging-oink" + site_origin="$STAGING_ORIGIN" + artifact_prefix="staging" + publish_branch="asf-staging-oink" + if [[ "$SCOPE" == latest ]]; then + selection="$latest_selection" + else + test "$SCOPE" = full + historical_origin="$STAGING_ORIGIN" + fi + ;; + production-history-refresh) + test "$CONFIRMATION" = "publish asf-site" + test "$candidate" = "$latest_ref" + test "$SCOPE" = full + publish_branch="asf-site" + ;; + *) exit 1 ;; + esac + elif [[ "$EVENT_NAME" == push ]]; then + case "$GITHUB_REF" in + refs/heads/staging/oink-reviewed) + # Reviewed candidate branch: staging can precede master merges. + test "$GITHUB_REPOSITORY" = apache/hugegraph-doc + site_origin="$STAGING_ORIGIN" + historical_origin="$STAGING_ORIGIN" + artifact_prefix="staging" + publish_branch="asf-staging-oink" + ;; + refs/heads/master) + publish_branch="asf-site" + ;; + *) exit 1 ;; + esac + else + test "$EVENT_NAME" = pull_request + fi + + { + echo "selection=$selection" + echo "site_origin=$site_origin" + echo "historical_origin=$historical_origin" + echo "artifact_prefix=$artifact_prefix" + echo "publish_branch=$publish_branch" + echo "latest_sha=$latest_sha" + } >> "$GITHUB_OUTPUT" - name: Validate source and version tooling run: | bash dist/validate-links.sh - python3 -m unittest discover -s scripts -p 'test_*.py' -v - + PYTHONDONTWRITEBYTECODE=1 \ + python3 -m unittest discover -s scripts -p 'test_*.py' -v - name: Resolve immutable version matrix id: matrix env: - LATEST_SHA: ${{ github.event.pull_request.head.sha || github.sha }} + LATEST_SHA: ${{ steps.plan.outputs.latest_sha }} + SELECTION: ${{ steps.plan.outputs.selection }} run: | python3 scripts/versioning.py prepare \ - --latest-sha "$LATEST_SHA" \ + --latest-sha "$LATEST_SHA" --select "$SELECTION" \ --output resolved-versions.json echo "versions=$(jq -c '.include' resolved-versions.json)" >> "$GITHUB_OUTPUT" - - name: Upload resolved version manifest uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: resolved-versions-${{ github.sha }} + name: resolved-versions-${{ github.run_id }}-${{ github.run_attempt }} path: resolved-versions.json + retention-days: 7 if-no-files-found: error build: needs: prepare runs-on: ubuntu-latest - permissions: - contents: read + timeout-minutes: 20 + permissions: { contents: read } + env: + HUGO_CACHEDIR: /tmp/hugo-cache-${{ github.run_id }}-${{ github.run_attempt }}-${{ matrix.version.id }} strategy: fail-fast: false + max-parallel: 5 matrix: version: ${{ fromJSON(needs.prepare.outputs.versions) }} - site: - - name: production - origin: https://hugegraph.apache.org/ - - name: staging - origin: https://hugegraph-oink.staged.apache.org/ - name: Build ${{ matrix.site.name }} / ${{ matrix.version.id }} + name: Build ${{ matrix.version.id }} steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} fetch-depth: 0 persist-credentials: false - - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.13" - + - name: Fetch immutable resolved source + env: + RESOLVED_SHA: ${{ matrix.version.sha }} + run: | + [[ "$RESOLVED_SHA" =~ ^[0-9a-f]{40}$ ]] + git fetch --no-tags origin "$RESOLVED_SHA" + git cat-file -e "$RESOLVED_SHA^{commit}" - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 with: go-version-file: go.mod cache: true - - name: Setup Hugo Extended uses: peaceiris/actions-hugo@2752ce1d29631191ea3f27c23495fa06139a5b78 # v3.2.1 with: hugo-version: ${{ env.HUGO_VERSION }} extended: true - - name: Cache Hugo resources uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 with: path: ${{ env.HUGO_CACHEDIR }} key: ${{ runner.os }}-hugo-${{ env.HUGO_VERSION }}-${{ matrix.version.id }}-${{ hashFiles('go.sum') }} - restore-keys: | - ${{ runner.os }}-hugo-${{ env.HUGO_VERSION }}-${{ matrix.version.id }}- - + restore-keys: ${{ runner.os }}-hugo-${{ env.HUGO_VERSION }}-${{ matrix.version.id }}- - name: Verify pinned OINK module run: | go mod verify - go list -m all test "$(go list -m -f '{{ .Path }}')" = "github.com/apache/hugegraph-doc" test "$(go list -m all | wc -l)" -eq 2 test "$(go list -m -f '{{ .Path }}@{{ .Version }}' github.com/pgsty/oink)" = "github.com/pgsty/oink@v1.0.0" test -z "$(go list -m -f '{{ with .Replace }}{{ .Path }}@{{ .Version }}{{ end }}' github.com/pgsty/oink)" - - name: Build isolated version artifact env: OINK_PYTHON: python3 + SITE_ORIGIN: ${{ needs.prepare.outputs.site_origin }} + HISTORICAL_ORIGIN: ${{ needs.prepare.outputs.historical_origin }} run: | python3 scripts/versioning.py build \ - --version "${{ matrix.version.id }}" \ - --sha "${{ matrix.version.sha }}" \ - --site-origin "${{ matrix.site.origin }}" \ + --version "${{ matrix.version.id }}" --sha "${{ matrix.version.sha }}" \ + --site-origin "$SITE_ORIGIN" --historical-origin "$HISTORICAL_ORIGIN" \ --output "${RUNNER_TEMP}/version-public" python3 scripts/versioning.py validate \ - --version "${{ matrix.version.id }}" \ - --sha "${{ matrix.version.sha }}" \ - --site-origin "${{ matrix.site.origin }}" \ + --version "${{ matrix.version.id }}" --sha "${{ matrix.version.sha }}" \ + --site-origin "$SITE_ORIGIN" --historical-origin "$HISTORICAL_ORIGIN" \ --artifact "${RUNNER_TEMP}/version-public" - - name: Upload isolated version artifact uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: ${{ matrix.site.name }}-${{ matrix.version.id }} + name: ${{ needs.prepare.outputs.artifact_prefix }}-${{ matrix.version.id }}-${{ github.run_id }}-${{ github.run_attempt }} path: ${{ runner.temp }}/version-public include-hidden-files: true + retention-days: 1 if-no-files-found: error - # Keep this job id aligned with the required `deploy` status in .asf.yaml. - # It produces deployable artifacts but does not publish untrusted PR code. - deploy: - if: always() + aggregate: needs: [prepare, build] runs-on: ubuntu-latest - permissions: - contents: read + timeout-minutes: 15 + permissions: { contents: read } steps: - - name: Require every version build to succeed - env: - PREPARE_RESULT: ${{ needs.prepare.result }} - BUILD_RESULT: ${{ needs.build.result }} - run: | - test "$PREPARE_RESULT" = success - test "$BUILD_RESULT" = success - - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ github.event.pull_request.head.sha || github.sha }} - fetch-depth: 0 persist-credentials: false - - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.13" - - - name: Download resolved version manifest - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: - name: resolved-versions-${{ github.sha }} + name: resolved-versions-${{ github.run_id }}-${{ github.run_attempt }} path: resolved - - - name: Download production versions - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 - with: - pattern: production-* - path: version-artifacts - - - name: Download staging versions - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: - pattern: staging-* + pattern: ${{ needs.prepare.outputs.artifact_prefix }}-*-${{ github.run_id }}-${{ github.run_attempt }} path: version-artifacts - - - name: Aggregate production and staging sites + - name: Assemble publishable site + env: + PREFIX: ${{ needs.prepare.outputs.artifact_prefix }} + SITE_ORIGIN: ${{ needs.prepare.outputs.site_origin }} + HISTORICAL_ORIGIN: ${{ needs.prepare.outputs.historical_origin }} + SELECTION: ${{ needs.prepare.outputs.selection }} run: | + extra=() + if [[ "$PREFIX" == staging ]]; then + extra+=(--asf-profile oink --asf-whoami asf-staging-oink) + fi python3 scripts/versioning.py aggregate \ - --artifacts version-artifacts \ - --artifact-prefix production- \ + --artifacts version-artifacts --artifact-prefix "$PREFIX-" \ + --artifact-suffix="-${GITHUB_RUN_ID}-${GITHUB_RUN_ATTEMPT}" \ --resolved-manifest resolved/resolved-versions.json \ - --site-origin https://hugegraph.apache.org/ \ - --output "${RUNNER_TEMP}/public-production" - python3 scripts/versioning.py aggregate \ - --artifacts version-artifacts \ - --artifact-prefix staging- \ - --resolved-manifest resolved/resolved-versions.json \ - --site-origin https://hugegraph-oink.staged.apache.org/ \ - --asf-profile oink \ - --asf-whoami asf-staging-oink \ - --output "${RUNNER_TEMP}/public-staging" - - - name: Upload production aggregate + --site-origin "$SITE_ORIGIN" --historical-origin "$HISTORICAL_ORIGIN" \ + --select "$SELECTION" \ + --output "${RUNNER_TEMP}/public-site" "${extra[@]}" + - name: Upload publishable aggregate uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: hugegraph-site-production-${{ github.sha }} - path: ${{ runner.temp }}/public-production + name: hugegraph-site-${{ needs.prepare.outputs.artifact_prefix }}-${{ github.run_id }}-${{ github.run_attempt }} + path: ${{ runner.temp }}/public-site include-hidden-files: true + retention-days: ${{ github.event_name == 'pull_request' && 1 || 7 }} if-no-files-found: error - - name: Upload ASF staging aggregate + e2e: + needs: [prepare, aggregate] + runs-on: ubuntu-latest + timeout-minutes: 20 + permissions: { contents: read } + env: + HUGO_CACHEDIR: /tmp/hugo-cache-${{ github.run_id }}-${{ github.run_attempt }}-e2e + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + ref: ${{ github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "24" + cache: npm + cache-dependency-path: tests/e2e/package-lock.json + - uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 + with: + go-version-file: go.mod + cache: true + - name: Setup Hugo Extended + uses: peaceiris/actions-hugo@2752ce1d29631191ea3f27c23495fa06139a5b78 # v3.2.1 + with: + hugo-version: ${{ env.HUGO_VERSION }} + extended: true + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + with: + name: hugegraph-site-${{ needs.prepare.outputs.artifact_prefix }}-${{ github.run_id }}-${{ github.run_attempt }} + path: public-site + - name: Install Chromium test workspace + working-directory: tests/e2e + run: | + npm ci + npx playwright install --with-deps chromium + - name: Build manifest-derived AI fixture + run: | + python3 scripts/versioning.py config \ + --version latest \ + --site-origin http://127.0.0.1:4174/ \ + --historical-origin "$PRODUCTION_ORIGIN" \ + --output "${RUNNER_TEMP}/ai-version-config.json" + hugo \ + --config "hugo.yaml,${RUNNER_TEMP}/ai-version-config.json,tests/e2e/ai-enabled.yaml" \ + --destination "${RUNNER_TEMP}/ai-site" \ + --cleanDestinationDir --gc --minify --environment production + - name: Run blocking Chromium contracts + working-directory: tests/e2e + env: + SITE_ROOT: ${{ github.workspace }}/public-site + AI_SITE_ROOT: ${{ runner.temp }}/ai-site + EXPECTED_VERSIONS: ${{ needs.prepare.outputs.selection }} + run: npm run test:ci + - name: Upload E2E report + if: always() uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: - name: hugegraph-site-staging-${{ github.sha }} - path: ${{ runner.temp }}/public-staging - include-hidden-files: true - if-no-files-found: error + name: playwright-report-${{ github.run_id }}-${{ github.run_attempt }} + path: | + tests/e2e/playwright-report + tests/e2e/test-results + retention-days: 7 + if-no-files-found: warn - publish: - if: github.event_name == 'push' && github.ref == 'refs/heads/master' - needs: deploy + visual: + needs: [prepare, aggregate] runs-on: ubuntu-latest - permissions: - contents: write + timeout-minutes: 15 + continue-on-error: true + permissions: { contents: read } steps: - - name: Download reviewed production aggregate - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: - name: hugegraph-site-production-${{ github.sha }} - path: public-production + ref: ${{ github.event.pull_request.head.sha || github.sha }} + persist-credentials: false + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: "24" + cache: npm + cache-dependency-path: tests/e2e/package-lock.json + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + with: + name: hugegraph-site-${{ needs.prepare.outputs.artifact_prefix }}-${{ github.run_id }}-${{ github.run_attempt }} + path: public-site + - name: Capture advisory visual states + working-directory: tests/e2e + env: + SITE_ROOT: ${{ github.workspace }}/public-site + run: | + npm ci + npx playwright install --with-deps chromium + npm run test:visual + - name: Upload advisory visual evidence + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: visual-evidence-${{ github.run_id }}-${{ github.run_attempt }} + path: tests/e2e/visual-results + retention-days: 7 + if-no-files-found: warn + + # Required check name in .asf.yaml. It gates artifacts without write access. + deploy: + if: always() + needs: [prepare, build, aggregate, e2e] + runs-on: ubuntu-latest + timeout-minutes: 5 + permissions: { contents: read } + steps: + - name: Require all blocking jobs to succeed + env: + PREPARE_RESULT: ${{ needs.prepare.result }} + BUILD_RESULT: ${{ needs.build.result }} + AGGREGATE_RESULT: ${{ needs.aggregate.result }} + E2E_RESULT: ${{ needs.e2e.result }} + run: | + test "$PREPARE_RESULT" = success + test "$BUILD_RESULT" = success + test "$AGGREGATE_RESULT" = success + test "$E2E_RESULT" = success - - name: Publish clean aggregate to asf-site + publish: + if: needs.prepare.outputs.publish_branch != '' + needs: [prepare, deploy] + runs-on: ubuntu-latest + timeout-minutes: 10 + permissions: { contents: write } + steps: + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + with: + name: hugegraph-site-${{ needs.prepare.outputs.artifact_prefix }}-${{ github.run_id }}-${{ github.run_attempt }} + path: public-site + - name: Verify fixed publication target + env: + TARGET: ${{ needs.prepare.outputs.publish_branch }} + PREFIX: ${{ needs.prepare.outputs.artifact_prefix }} + run: | + case "$PREFIX:$TARGET" in + production:asf-site|staging:asf-staging-oink) ;; + *) exit 1 ;; + esac + test -f public-site/build-metadata/versions.json + - name: Publish clean aggregate uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4.1.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./public-production - publish_branch: asf-site + publish_dir: ./public-site + publish_branch: ${{ needs.prepare.outputs.publish_branch }} keep_files: false force_orphan: false - commit_message: ${{ github.event.head_commit.message }} + commit_message: Deploy ${{ needs.prepare.outputs.artifact_prefix }} site from run ${{ github.run_id }} attempt ${{ github.run_attempt }} diff --git a/.gitignore b/.gitignore index 2e76301fcf..cc2d3a9949 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,10 @@ public-staging/ resources/ node_modules/ package-lock.json +!/tests/e2e/package-lock.json +/tests/e2e/playwright-report/ +/tests/e2e/test-results/ +/tests/e2e/visual-results/ .hugo_build.lock nohup.out *.log diff --git a/README.md b/README.md index 0d2cda9000..6b2b71db2c 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ cd hugegraph-doc hugo mod graph # 3. Start the development server (auto-reload) -hugo server +scripts/hugo.sh server ``` Open http://localhost:1313 to preview. @@ -51,7 +51,7 @@ hugegraph-doc/ โ”‚ โ””โ”€โ”€ en/ # ๐Ÿ‡บ๐Ÿ‡ธ English documentation (mirrors cn/ structure) โ”‚ โ”œโ”€โ”€ data/ # ๐Ÿงญ Landing-page and footer data -โ”œโ”€โ”€ i18n/cn.yaml # ๐ŸŒ OINK interface strings for the /cn/ locale +โ”œโ”€โ”€ i18n/zh-CN.yaml # ๐ŸŒ OINK interface strings for the /cn/ locale โ”œโ”€โ”€ assets/ # ๐Ÿ–ผ๏ธ Project brand assets โ”œโ”€โ”€ layouts/ # ๐Ÿ“ Hugo template overrides โ”œโ”€โ”€ static/ # ๐Ÿ“ Static files @@ -84,9 +84,9 @@ See [contribution.md](./contribution.md) for the pinned toolchain, strict build, | Command | Description | |---------|-------------| -| `hugo server` | Start dev server (hot reload) | -| `hugo --cleanDestinationDir --gc --minify --environment production --printPathWarnings --printI18nWarnings --panicOnWarning` | Strict production build to `./public/` | -| `hugo server -p 8080` | Custom port | +| `scripts/hugo.sh server` | Start the manifest-aware dev server (hot reload) | +| `scripts/hugo.sh build` | Strict, production-equivalent build to `./public/` | +| `scripts/hugo.sh server -p 8080` | Start the dev server on a custom port | --- @@ -111,7 +111,7 @@ cd hugegraph-doc hugo mod graph # 3. ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ๏ผˆๆ”ฏๆŒ็ƒญ้‡่ฝฝ๏ผ‰ -hugo server +scripts/hugo.sh server ``` ๆ‰“ๅผ€ http://localhost:1313 ้ข„่งˆ็ฝ‘็ซ™ใ€‚ @@ -135,7 +135,7 @@ hugegraph-doc/ โ”‚ โ””โ”€โ”€ en/ # ๐Ÿ‡บ๐Ÿ‡ธ ่‹ฑๆ–‡ๆ–‡ๆกฃ๏ผˆไธŽ cn/ ็ป“ๆž„ไธ€่‡ด๏ผ‰ โ”‚ โ”œโ”€โ”€ data/ # ๐Ÿงญ ้ฆ–้กตไธŽ้กตๅฐพๆ•ฐๆฎ -โ”œโ”€โ”€ i18n/cn.yaml # ๐ŸŒ /cn/ ่ฏญ่จ€็š„ OINK ็•Œ้ขๆ–‡ๆกˆ +โ”œโ”€โ”€ i18n/zh-CN.yaml # ๐ŸŒ /cn/ ่ฏญ่จ€็š„ OINK ็•Œ้ขๆ–‡ๆกˆ โ”œโ”€โ”€ assets/ # ๐Ÿ–ผ๏ธ ้กน็›ฎๅ“็‰Œ่ต„ๆบ โ”œโ”€โ”€ layouts/ # ๐Ÿ“ Hugo ๆจกๆฟ่ฆ†็›– โ”œโ”€โ”€ static/ # ๐Ÿ“ ้™ๆ€ๆ–‡ไปถ @@ -168,9 +168,9 @@ hugegraph-doc/ | ๅ‘ฝไปค | ่ฏดๆ˜Ž | |------|------| -| `hugo server` | ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ๏ผˆ็ƒญ้‡่ฝฝ๏ผ‰ | -| `hugo --cleanDestinationDir --gc --minify --environment production --printPathWarnings --printI18nWarnings --panicOnWarning` | ไธฅๆ ผๆž„ๅปบ็”Ÿไบง็‰ˆๆœฌๅˆฐ `./public/` | -| `hugo server -p 8080` | ๆŒ‡ๅฎš็ซฏๅฃ | +| `scripts/hugo.sh server` | ๅฏๅŠจ่ฏปๅ–็‰ˆๆœฌๆธ…ๅ•็š„ๅผ€ๅ‘ๆœๅŠกๅ™จ๏ผˆๆ”ฏๆŒ็ƒญ้‡่ฝฝ๏ผ‰ | +| `scripts/hugo.sh build` | ไธฅๆ ผๆž„ๅปบไธŽ็”Ÿไบง็ญ‰ไปท็š„็ซ™็‚นๅˆฐ `./public/` | +| `scripts/hugo.sh server -p 8080` | ๅœจๆŒ‡ๅฎš็ซฏๅฃๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ | --- diff --git a/assets/js/hugegraph-shell.js b/assets/js/hugegraph-shell.js new file mode 100644 index 0000000000..1f496169cd --- /dev/null +++ b/assets/js/hugegraph-shell.js @@ -0,0 +1,461 @@ +/** + * HugeGraph additions around OINK's shell. + * + * This file deliberately does not replace OINK's command palette. It only + * persists authored tree disclosures, makes a collapsed/dismissed sidebar + * inert, and adds an explicit retry control to the existing search error. + */ +(function (global) { + 'use strict'; + + var versionExecutorRegistries = new WeakSet(); + + function readConfig(documentObject) { + var node = documentObject.getElementById('hg-shell-config'); + if (!node) return { version: 'latest', locale: 'en' }; + try { + return JSON.parse(node.textContent || '{}'); + } catch (_) { + return { version: 'latest', locale: 'en' }; + } + } + + function safeStorage(windowObject) { + try { + var storage = windowObject.localStorage; + var probe = '__hg_sidebar_probe__'; + storage.setItem(probe, '1'); + storage.removeItem(probe); + return storage; + } catch (_) { + return null; + } + } + + function setTreeExpanded(button, expanded, documentObject) { + var target = documentObject.getElementById( + button.getAttribute('aria-controls'), + ); + if (!target) return; + button.setAttribute('aria-expanded', expanded ? 'true' : 'false'); + target.classList.toggle('td-is-open', expanded); + var label = expanded + ? button.dataset.tdLabelCollapse + : button.dataset.tdLabelExpand; + if (label) button.setAttribute('aria-label', label); + } + + function initTreePersistence(windowObject, documentObject, config) { + var buttons = Array.prototype.slice.call( + documentObject.querySelectorAll('[data-td-shell-tree-toggle][aria-controls]'), + ); + if (!buttons.length) return; + var storage = safeStorage(windowObject); + var key = + 'oink.sidebar.v1.' + + String(config.version || 'latest') + + '.' + + String(config.locale || 'en'); + var valid = new Set( + buttons.map(function (button) { + return button.getAttribute('aria-controls'); + }), + ); + var saved = []; + if (storage) { + try { + var parsed = JSON.parse(storage.getItem(key) || '[]'); + if (Array.isArray(parsed)) { + saved = parsed.filter(function (id) { + return typeof id === 'string' && valid.has(id); + }); + } + } catch (_) { + saved = []; + } + } + var remembered = new Set(saved); + + buttons.forEach(function (button) { + var item = button.closest('li'); + var activePath = item && item.classList.contains('td-active-path'); + setTreeExpanded( + button, + Boolean(activePath || remembered.has(button.getAttribute('aria-controls'))), + documentObject, + ); + button.addEventListener('click', function () { + global.setTimeout(function () { + if (!storage) return; + var expanded = buttons + .filter(function (candidate) { + var candidateItem = candidate.closest('li'); + return ( + candidate.getAttribute('aria-expanded') === 'true' && + !(candidateItem && + candidateItem.classList.contains('td-active-path')) + ); + }) + .map(function (candidate) { + return candidate.getAttribute('aria-controls'); + }); + try { + storage.setItem(key, JSON.stringify(expanded)); + } catch (_) { + /* Active-path expansion remains the storage-free fallback. */ + } + }, 0); + }); + }); + + // Rewriting the filtered set removes stale node IDs after navigation + // changes without retaining a second schema/version marker. + if (storage) { + try { + storage.setItem(key, JSON.stringify(saved)); + } catch (_) { + /* Ignore storage becoming unavailable after the probe. */ + } + } + } + + function initSidebarIsolation(windowObject, documentObject) { + var html = documentObject.documentElement; + var sidebar = documentObject.getElementById('td-shell-sidebar'); + if (!sidebar) return; + var restore = documentObject.querySelector('.hg-sidebar-restore'); + var desktop = windowObject.matchMedia('(min-width: 768px)'); + + var panel = sidebar.querySelector('.td-shell-sidebar__panel'); + // The native 16px panel edge cannot receive pointers while the sidebar is + // inert. Keep an equivalent pointer-only strip outside the inert subtree; + // the labelled navbar button remains the keyboard/touch equivalent. + var edge = documentObject.createElement('div'); + edge.className = 'hg-sidebar-edge d-print-none'; + edge.setAttribute('aria-hidden', 'true'); + documentObject.body.appendChild(edge); + var closeTimer; + var pointerLockUntil = 0; + function dynamic() { + return desktop.matches && + html.getAttribute('data-td-shell-sidebar') === 'collapsed'; + } + function preview() { + if (!dynamic()) return; + windowObject.clearTimeout(closeTimer); + sidebar.classList.add('td-shell-sidebar--overlay'); + sync(); + } + function closePreview() { + windowObject.clearTimeout(closeTimer); + closeTimer = windowObject.setTimeout(function () { + if (!sidebar.contains(documentObject.activeElement)) { + sidebar.classList.remove('td-shell-sidebar--overlay'); + sync(); + } + }, 350); + } + edge.addEventListener('pointerenter', function (event) { + if (event.pointerType !== 'touch' && Date.now() >= pointerLockUntil) preview(); + }); + edge.addEventListener('pointerleave', closePreview); + if (restore) { + restore.addEventListener('pointerenter', function (event) { + if (event.pointerType !== 'touch' && Date.now() >= pointerLockUntil) preview(); + }); + restore.addEventListener('pointerleave', closePreview); + restore.addEventListener('keydown', function (event) { + if (event.key !== 'ArrowRight' || !dynamic()) return; + event.preventDefault(); + preview(); + var first = sidebar.querySelector('a[href], button'); + if (first) first.focus(); + }); + } + if (panel) { + panel.addEventListener('pointerenter', function () { + windowObject.clearTimeout(closeTimer); + }); + panel.addEventListener('focusout', closePreview); + panel.addEventListener('keydown', function (event) { + if (event.key !== 'Escape' || !dynamic()) return; + event.preventDefault(); + if (restore) restore.focus(); + sidebar.classList.remove('td-shell-sidebar--overlay'); + sync(); + }); + } + + function sync() { + var collapsed = + html.getAttribute('data-td-shell-sidebar') === 'collapsed'; + var drawerOpen = + html.getAttribute('data-td-shell-drawer') === 'open'; + // OINK owns the persistent collapsed mode and pointer overlay. Keep + // focus inside an open preview safe when its native pointerleave fires. + if (desktop.matches && collapsed && + !sidebar.classList.contains('td-shell-sidebar--overlay') && + sidebar.contains(documentObject.activeElement)) { + sidebar.classList.add('td-shell-sidebar--overlay'); + } + var overlay = sidebar.classList.contains('td-shell-sidebar--overlay'); + var isolated = desktop.matches ? collapsed && !overlay : !drawerOpen; + edge.hidden = !desktop.matches || !collapsed; + if (restore) restore.setAttribute('aria-expanded', String(!isolated)); + if (restore) restore.hidden = !desktop.matches || !collapsed; + sidebar.inert = isolated; + if (isolated) sidebar.setAttribute('aria-hidden', 'true'); + else sidebar.removeAttribute('aria-hidden'); + if ( + isolated && + sidebar.contains(documentObject.activeElement) && + restore && + restore.offsetParent !== null + ) { + restore.focus(); + } + } + + new MutationObserver(sync).observe(html, { + attributes: true, + attributeFilter: ['data-td-shell-sidebar', 'data-td-shell-drawer'], + }); + new MutationObserver(sync).observe(sidebar, { attributes: true, attributeFilter: ['class'] }); + desktop.addEventListener('change', sync); + documentObject + .querySelectorAll('[data-td-shell-sidebar-toggle], [data-td-shell-drawer-close]') + .forEach(function (button) { + button.addEventListener('click', function () { + var hadFocus = documentObject.activeElement === button; + // Match OINK's cooldown so a newly visible trigger under the pointer + // does not immediately undo an explicit keyboard collapse. + pointerLockUntil = Date.now() + 150; + // Run after OINK's native click listener regardless of chunk order. + global.setTimeout(function () { + if (dynamic() && sidebar.contains(button) && restore) { + restore.hidden = false; + restore.focus(); + sidebar.classList.remove('td-shell-sidebar--overlay'); + } + sync(); + // Both external restore controls disappear when pinned. Transfer + // their focus after making the sidebar operable; hover and clicks + // that did not focus a trigger must not steal unrelated focus. + if (hadFocus && desktop.matches && !dynamic() && + !sidebar.contains(button) && button.offsetParent === null) { + var collapse = sidebar.querySelector('.td-shell-sidebar__collapse'); + if (collapse) collapse.focus(); + } + }, 0); + }, true); + }); + sync(); + } + + function initScrollableTables(documentObject) { + documentObject.querySelectorAll('[data-td-asset-table-scroll]').forEach(function (region) { + if (region.dataset.hgTableScrollBound !== undefined) return; + region.dataset.hgTableScrollBound = ''; + region.addEventListener('keydown', function (event) { + if (region.scrollWidth <= region.clientWidth) return; + var delta = 0; + if (event.key === 'ArrowRight') delta = 80; + else if (event.key === 'ArrowLeft') delta = -80; + else if (event.key === 'Home') delta = -region.scrollLeft; + else if (event.key === 'End') delta = region.scrollWidth - region.clientWidth - region.scrollLeft; + else return; + event.preventDefault(); + region.scrollBy({ left: delta, behavior: 'smooth' }); + }); + }); + } + + function initSearchRetry(windowObject, documentObject) { + var root = documentObject.getElementById('td-shell-search'); + if (!root) return; + var list = root.querySelector('.td-shell-search__list'); + var input = root.querySelector('.td-shell-search__input'); + var status = root.querySelector('[data-td-shell-search-status]'); + if (!list || !input || !status) return; + var scheduled = false; + + function sync() { + scheduled = false; + var existing = list.querySelector('[data-hg-search-retry]'); + var failure = root.dataset.tdTIndexUnavailable || ''; + var failed = + failure && + (status.textContent.trim() === failure || + Array.prototype.some.call( + list.querySelectorAll('.td-shell-search__empty'), + function (node) { + return node.textContent.trim() === failure; + }, + )); + if (failed && existing) return existing; + if (existing) existing.remove(); + if (!failed) return null; + + var notice = documentObject.createElement('div'); + notice.className = 'hg-search-retry'; + notice.dataset.hgSearchRetry = ''; + var text = documentObject.createElement('span'); + text.textContent = failure; + var button = documentObject.createElement('button'); + button.type = 'button'; + button.className = 'btn btn-sm btn-outline-primary'; + button.textContent = + documentObject.documentElement.lang === 'cn' || + documentObject.documentElement.lang.indexOf('zh') === 0 + ? '้‡่ฏ•' + : 'Retry'; + button.addEventListener('click', function () { + input.dispatchEvent(new Event('input', { bubbles: true })); + input.focus(); + }); + notice.appendChild(text); + notice.appendChild(button); + list.appendChild(notice); + return notice; + } + + function schedule() { + if (scheduled) return; + scheduled = true; + global.requestAnimationFrame(sync); + } + new MutationObserver(schedule).observe(list, { + childList: true, + subtree: true, + characterData: true, + }); + new MutationObserver(schedule).observe(status, { + childList: true, + subtree: true, + characterData: true, + }); + schedule(); + } + + function versionTarget(option, locationObject) { + if (!option || !option.url) return ''; + try { + var target = new URL(option.url, locationObject.href); + if (target.protocol !== 'http:' && target.protocol !== 'https:') + return ''; + if (option.equivalent === true && option.fallback !== true) { + target.search = locationObject.search || ''; + target.hash = locationObject.hash || ''; + } + return target.href; + } catch (_) { + return ''; + } + } + + function boolData(value) { + return value === true || value === 'true'; + } + + function initVersionSwitching(windowObject, documentObject) { + Array.prototype.forEach.call( + documentObject.querySelectorAll('a[data-hg-version-id]'), + function (anchor) { + var target = versionTarget( + { + url: anchor.getAttribute('href'), + equivalent: boolData(anchor.dataset.hgVersionEquivalent), + fallback: boolData(anchor.dataset.hgVersionFallback), + }, + windowObject.location, + ); + if (target) anchor.setAttribute('href', target); + }, + ); + + var registry = windowObject.OinkActions; + if ( + !registry || + typeof registry.registerExecutor !== 'function' || + versionExecutorRegistries.has(registry) + ) { + return; + } + registry.registerExecutor('switch_version', function (context) { + var target = versionTarget( + context && context.value, + windowObject.location, + ); + if (target) windowObject.location.assign(target); + return { action: 'switch_version', url: target }; + }); + versionExecutorRegistries.add(registry); + } + + function consumeVersionFallback(windowObject, documentObject, config) { + var locationObject = windowObject.location; + if (locationObject.hash !== '#hg-version-fallback' || !config.docsRoot) + return null; + var docsPath; + try { + docsPath = new URL(config.docsRoot, locationObject.href).pathname; + } catch (_) { + return null; + } + if (locationObject.pathname !== docsPath) return null; + + windowObject.history.replaceState( + windowObject.history.state, + '', + locationObject.pathname + locationObject.search, + ); + var notice = documentObject.createElement('div'); + ['alert', 'alert-info', 'hg-version-fallback', 'd-print-none'].forEach( + function (name) { + notice.classList.add(name); + }, + ); + notice.dataset.hgVersionFallbackNotice = ''; + notice.setAttribute('role', 'status'); + notice.setAttribute('aria-live', 'polite'); + notice.setAttribute('aria-atomic', 'true'); + notice.textContent = config.versionFallbackMessage || ''; + var container = + (documentObject.querySelector && documentObject.querySelector('main')) || + documentObject.body; + if (container) container.prepend(notice); + return notice; + } + + function init(windowObject, documentObject) { + var config = readConfig(documentObject); + consumeVersionFallback(windowObject, documentObject, config); + initVersionSwitching(windowObject, documentObject); + initTreePersistence(windowObject, documentObject, config); + initSidebarIsolation(windowObject, documentObject); + initScrollableTables(documentObject); + initSearchRetry(windowObject, documentObject); + } + + var api = { + init: init, + readConfig: readConfig, + safeStorage: safeStorage, + setTreeExpanded: setTreeExpanded, + versionTarget: versionTarget, + initVersionSwitching: initVersionSwitching, + consumeVersionFallback: consumeVersionFallback, + }; + global.HugeGraphShell = api; + if (typeof module === 'object' && module.exports) module.exports = api; + + if (global.document) { + if (global.document.readyState === 'loading') { + global.document.addEventListener('DOMContentLoaded', function () { + init(global, global.document); + }); + } else { + init(global, global.document); + } + } +})(typeof window === 'object' ? window : globalThis); diff --git a/assets/js/kapa-adapter.js b/assets/js/kapa-adapter.js new file mode 100644 index 0000000000..2c1035296e --- /dev/null +++ b/assets/js/kapa-adapter.js @@ -0,0 +1,432 @@ +/** + * Click-gated Kapa adapter for OINK. + * + * The third-party bundle URL and privacy posture are fixed here. The page + * supplies only reviewed public identifiers and localized labels. + */ +(function (global) { + 'use strict'; + + var BUNDLE_URL = 'https://widget.kapa.ai/kapa-widget.bundle.js'; + var TIMEOUT_MS = 5000; + + function trimmedQuery(value) { + return String(value || '').trim(); + } + + function mixWithWhite(color, percentage) { + var match = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color); + if (!match) throw new Error('Kapa theme color must be a six-digit hexadecimal color'); + var weight = percentage / 100; + return '#' + match.slice(1).map(function (channel) { + var mixed = Math.round(parseInt(channel, 16) * (1 - weight) + 255 * weight); + return mixed.toString(16).padStart(2, '0'); + }).join(''); + } + + function readConfig(documentObject) { + var node = documentObject.getElementById('hg-ai-config'); + if (!node) return null; + try { + var config = JSON.parse(node.textContent || '{}'); + return config.websiteId && config.sourceGroupId ? config : null; + } catch (_) { + return null; + } + } + + function invokeKapa(windowObject, method, value) { + var api = windowObject.Kapa; + if (typeof api === 'function') return api(method, value); + if (api && typeof api[method] === 'function') return api[method](value); + throw new Error('Kapa API is unavailable'); + } + + function preinitialize(windowObject, force) { + if (!force && windowObject.Kapa) return windowObject.Kapa; + if ( + force && + windowObject.Kapa && + windowObject.Kapa.hgKapaPreinitialized && + Array.isArray(windowObject.Kapa.q) + ) { + windowObject.Kapa.q.length = 0; + } + var queue = function () { + queue.c(arguments); + }; + queue.q = []; + queue.hgKapaPreinitialized = true; + queue.c = function (args) { + queue.q.push(args); + }; + windowObject.Kapa = queue; + return queue; + } + + function scriptAttributes(config) { + return { + 'data-website-id': config.websiteId, + 'data-source-group-ids-include': config.sourceGroupId, + 'data-language': config.locale, + 'data-project-name': 'Apache HugeGraph', + 'data-project-color': config.themeColor, + 'data-project-color-dark': mixWithWhite(config.themeColor, 48), + 'data-surface-color': '#ffffff', + 'data-surface-elevated-color': '#f6f4fb', + 'data-surface-hover-color': '#eeeafd', + 'data-text-color': '#24212d', + 'data-text-muted-color': '#686275', + 'data-border-color': '#d9d4e4', + 'data-anchor-color': config.themeColor, + 'data-surface-color-dark': '#17151d', + 'data-surface-elevated-color-dark': '#221f2b', + 'data-surface-hover-color-dark': '#302b3d', + 'data-text-color-dark': '#f0edf7', + 'data-text-muted-color-dark': '#b6afc2', + 'data-border-color-dark': '#494254', + 'data-anchor-color-dark': mixWithWhite(config.themeColor, 60), + 'data-color-scheme-selector': "[data-bs-theme='dark']", + 'data-font-family': + '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif', + 'data-modal-content-border-radius': '12px', + 'data-modal-content-border': '1px solid #d9d4e4', + 'data-modal-content-border-dark': '1px solid #494254', + 'data-launcher-button-hidden': 'true', + 'data-render-on-load': 'false', + 'data-search-mode-enabled': 'false', + 'data-modal-open-on-command-k': 'false', + 'data-consent-required': 'false', + 'data-user-analytics-cookie-enabled': 'false', + 'data-user-analytics-fingerprint-enabled': 'false', + 'data-exit-feedback-enabled': 'false', + 'data-user-satisfaction-feedback-enabled': 'false', + 'data-bot-protection-mechanism': 'hcaptcha', + }; + } + + function createController(windowObject, documentObject, config) { + var state = 'idle'; + var consented = false; + var pending = null; + var consent = documentObject.querySelector('[data-hg-ai-consent]'); + var attempt = 0; + var timer = 0; + var lastTrigger = null; + var activeScript = null; + var activeQueue = null; + var status = documentObject.querySelector('[data-hg-ai-status]'); + + function renderState(next, message) { + state = next; + documentObject.querySelectorAll('[data-hg-ask-ai]').forEach(function (button) { + button.dataset.hgAiState = next; + button.disabled = next === 'loading'; + if (next === 'loading') button.setAttribute('aria-busy', 'true'); + else button.removeAttribute('aria-busy'); + if (message) button.setAttribute('title', message); + else button.removeAttribute('title'); + }); + if (status) { + status.textContent = message || ''; + status.classList.toggle('visually-hidden', !message); + } + } + + function openWidget(query, submit) { + invokeKapa(windowObject, 'setSourceGroupIDs', [config.sourceGroupId]); + invokeKapa(windowObject, 'open', { + mode: 'ai', + query: query, + submit: submit, + }); + } + + function discardAttempt(serial) { + if ( + activeScript && + activeScript.dataset.hgKapaAttempt === String(serial) + ) { + activeScript.remove(); + activeScript = null; + } + if ( + activeQueue && + activeQueue.hgKapaPreinitialized && + Array.isArray(activeQueue.q) + ) { + activeQueue.q.length = 0; + if (windowObject.Kapa === activeQueue) { + try { + delete windowObject.Kapa; + } catch (_) { + windowObject.Kapa = undefined; + } + } + } + activeQueue = null; + } + + function fail(serial) { + if (serial !== attempt || state !== 'loading') return; + windowObject.clearTimeout(timer); + discardAttempt(serial); + renderState('error', config.labels.error); + } + + function ready(serial, query, submit) { + if (serial !== attempt || state !== 'loading') return; + windowObject.clearTimeout(timer); + renderState('ready', ''); + openWidget(query, submit); + } + + function ensureScript(serial, query, submit, retrying) { + var loaded = false; + var rendered = false; + activeQueue = preinitialize(windowObject, retrying); + if (retrying) { + invokeKapa(windowObject, 'onModalClose', restoreFocus); + } + var script = documentObject.createElement('script'); + activeScript = script; + script.async = true; + script.src = + BUNDLE_URL + (retrying ? '?hg-retry=' + encodeURIComponent(serial) : ''); + script.dataset.hgKapaWidget = ''; + script.dataset.hgKapaAttempt = String(serial); + var attrs = scriptAttributes(config); + Object.keys(attrs).forEach(function (name) { + script.setAttribute(name, attrs[name]); + }); + function finish() { + if (loaded && rendered) ready(serial, query, submit); + } + script.addEventListener('load', function () { + loaded = true; + finish(); + }, { once: true }); + script.addEventListener('error', function () { + fail(serial); + }, { once: true }); + try { + invokeKapa(windowObject, 'render', { + onRender: function () { + rendered = true; + finish(); + }, + }); + } catch (_) { + fail(serial); + return; + } + documentObject.head.appendChild(script); + } + + function load(query, submit) { + query = trimmedQuery(query); + if (state === 'loading') return; + if (state === 'ready') { + openWidget(query, Boolean(submit && query)); + return; + } + var retrying = state === 'error'; + var serial = ++attempt; + renderState('loading', ''); + timer = windowObject.setTimeout(function () { + fail(serial); + }, TIMEOUT_MS); + ensureScript(serial, query, Boolean(submit && query), retrying); + } + + function cancelConsent() { + pending = null; + renderState('idle', ''); + if (consent && consent.open) consent.close(); + restoreFocus(); + } + + function activate(query, submit, trigger) { + if (state === 'loading' || state === 'consent') return; + lastTrigger = trigger || documentObject.activeElement; + if (consented) { + load(query, submit); + return; + } + // Fail closed if the local consent panel is unavailable. + if (!consent || typeof consent.showModal !== 'function') { + renderState('error', config.labels.error); + return; + } + pending = { query: trimmedQuery(query), submit: submit }; + renderState('consent', ''); + consent.showModal(); + } + + if (consent) { + // Keep the underlying search palette from consuming modal keyboard events. + consent.addEventListener('keydown', function (event) { + event.stopPropagation(); + if (event.key === 'Escape') { + event.preventDefault(); + cancelConsent(); + } + }); + consent.querySelector('[data-hg-ai-continue]').addEventListener('click', function () { + if (!pending) return; + var request = pending; + pending = null; + consented = true; + consent.close(); + load(request.query, request.submit); + }); + consent.querySelector('[data-hg-ai-cancel]').addEventListener('click', cancelConsent); + consent.addEventListener('cancel', function (event) { + event.preventDefault(); + cancelConsent(); + }); + } + + function restoreFocus() { + if (lastTrigger && typeof lastTrigger.focus === 'function') { + lastTrigger.focus(); + } + } + + activeQueue = preinitialize(windowObject); + invokeKapa(windowObject, 'onModalClose', restoreFocus); + + return { + activate: activate, + getState: function () { return state; }, + }; + } + + function init(windowObject, documentObject) { + var config = readConfig(documentObject); + if (!config) return null; + var controller = createController(windowObject, documentObject, config); + var root = documentObject.getElementById('td-shell-search'); + var input = root && root.querySelector('.td-shell-search__input'); + var list = root && root.querySelector('.td-shell-search__list'); + var syncing = false; + + function bind(button) { + if (button.dataset.hgAiBound !== undefined) return; + button.dataset.hgAiBound = ''; + button.addEventListener('click', function () { + controller.activate( + button.dataset.hgAiQuery || '', + button.dataset.hgAiSubmit === 'true', + button, + ); + }); + } + documentObject.querySelectorAll('[data-hg-ask-ai]').forEach(bind); + + function syncTail() { + syncing = false; + if (!root || !input || !list || root.hidden) return; + var old = list.querySelector('[data-hg-ai-search-tail]'); + var query = trimmedQuery(input.value); + if (!query || query.charAt(0) === '>') { + if (old) old.remove(); + return; + } + var choiceLabel = root.dataset.tdTChoice || ''; + if ( + choiceLabel && + Array.prototype.some.call( + list.querySelectorAll('.td-shell-search__group-label'), + function (label) { return label.textContent.trim() === choiceLabel; }, + ) + ) { + if (old) old.remove(); + return; + } + var loading = root.dataset.tdTLoading || ''; + if ( + loading && + Array.prototype.some.call( + list.querySelectorAll('.td-shell-search__empty'), + function (node) { return node.textContent.trim() === loading; }, + ) + ) { + if (old) old.remove(); + return; + } + var oldButton = old && old.querySelector('[data-hg-ask-ai]'); + if (oldButton && oldButton.dataset.hgAiQuery === query) return; + if (old) old.remove(); + + var group = documentObject.createElement('div'); + group.className = 'td-shell-search__group hg-ai-search-tail'; + group.dataset.hgAiSearchTail = ''; + group.setAttribute('role', 'group'); + var label = documentObject.createElement('div'); + label.className = 'td-shell-search__group-label'; + label.textContent = config.labels.ask; + var row = documentObject.createElement('button'); + row.type = 'button'; + row.className = 'td-shell-search__item hg-ai-search-tail__button'; + row.dataset.hgAskAi = ''; + row.dataset.hgAiQuery = query; + row.dataset.hgAiSubmit = 'true'; + var icon = documentObject.createElement('i'); + icon.className = + 'fa-solid fa-wand-magic-sparkles td-shell-search__item-icon'; + icon.setAttribute('aria-hidden', 'true'); + var meta = documentObject.createElement('span'); + meta.className = 'td-shell-search__item-meta'; + var title = documentObject.createElement('span'); + title.className = 'td-shell-search__item-title'; + title.textContent = config.labels.ask + ': โ€œ' + query + 'โ€'; + var detail = documentObject.createElement('span'); + detail.className = 'td-shell-search__item-ref'; + detail.textContent = config.historical ? config.labels.latest + '.' : ''; + meta.appendChild(title); + meta.appendChild(detail); + row.appendChild(icon); + row.appendChild(meta); + group.appendChild(label); + group.appendChild(row); + list.appendChild(group); + bind(row); + } + + if (list) { + new MutationObserver(function () { + if (syncing) return; + syncing = true; + windowObject.requestAnimationFrame(syncTail); + }).observe(list, { childList: true, subtree: true }); + input.addEventListener('input', syncTail); + syncTail(); + } + return controller; + } + + var api = { + BUNDLE_URL: BUNDLE_URL, + TIMEOUT_MS: TIMEOUT_MS, + createController: createController, + init: init, + invokeKapa: invokeKapa, + preinitialize: preinitialize, + readConfig: readConfig, + scriptAttributes: scriptAttributes, + trimmedQuery: trimmedQuery, + }; + global.HugeGraphKapa = api; + if (typeof module === 'object' && module.exports) module.exports = api; + + if (global.document) { + if (global.document.readyState === 'loading') { + global.document.addEventListener('DOMContentLoaded', function () { + init(global, global.document); + }); + } else { + init(global, global.document); + } + } +})(typeof window === 'object' ? window : globalThis); diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss index e0941c5d59..2cf610cfd6 100644 --- a/assets/scss/_styles_project.scss +++ b/assets/scss/_styles_project.scss @@ -1,6 +1,28 @@ // HugeGraph homepage: preserve the original product copy and isometric brand // artwork while using OINK's accessible navigation and landing primitives. -$hg-navbar-purple: #532fc9; +// `params.ui.theme_color` publishes the project accent as this CSS custom +// property in hooks/head-end.html. + +:root { + --hg-theme-color-soft: color-mix( + in srgb, + var(--hg-theme-color) 12%, + var(--bs-body-bg) + ); + --hg-theme-color-hover: color-mix( + in srgb, + var(--hg-theme-color) 18%, + var(--bs-body-bg) + ); +} + +:where(a, button, input, summary):focus-visible { + outline-color: var(--hg-theme-color); +} + +::selection { + background: var(--hg-theme-color-soft); +} .td-home { // Keep OINK's display face for headings, but restore the original site's @@ -39,7 +61,7 @@ $hg-navbar-purple: #532fc9; } &.td-scrolled { - background: rgba($hg-navbar-purple, 0.96); + background: color-mix(in srgb, var(--hg-theme-color) 96%, transparent); box-shadow: 0 6px 22px rgba(20, 17, 73, 0.24); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); @@ -248,7 +270,7 @@ $hg-navbar-purple: #532fc9; // OINK's sticky header, search, version, language, theme, and help controls. .td-shell-chrome .td-site-header { border-block-end-color: rgba(255, 255, 255, 0.22); - background: $hg-navbar-purple; + background: var(--hg-theme-color); color: #fff; -webkit-backdrop-filter: none; backdrop-filter: none; @@ -310,9 +332,9 @@ $hg-navbar-purple: #532fc9; margin: calc(-1 * #{$spacer}) calc(-1 * #{$spacer}) 0; padding-inline: $spacer; border-block-end: 1px solid rgba(255, 255, 255, 0.22); - background: $hg-navbar-purple; + background: var(--hg-theme-color); color: #fff; - box-shadow: 1px 0 $hg-navbar-purple; + box-shadow: 1px 0 var(--hg-theme-color); .td-shell-wordmark { background: none; @@ -465,7 +487,140 @@ $hg-navbar-purple: #532fc9; display: none; } +.td-nav-util.hg-sidebar-restore { + display: none; +} + +.hg-sidebar-edge { + position: fixed; + inset-inline-start: 0; + top: 64px; + bottom: 0; + width: 16px; + z-index: 121; + border-inline-start: 3px solid var(--bs-border-color); + + &:hover { border-inline-start-color: var(--bs-primary); } +} + +@media (min-width: 768px) { + [data-td-shell-sidebar='collapsed'] { + .td-nav-util.hg-sidebar-restore:not([hidden]) { + display: inline-flex; + } + } +} + +.hg-version-overflow { + color: var(--bs-body-color); + summary { + cursor: pointer; + padding: .5rem .75rem; + list-style: none; + &::-webkit-details-marker { display: none; } + &:focus-visible { outline: 2px solid var(--bs-primary); } + } +} + +.hg-search-retry { + display: flex; + align-items: center; + justify-content: space-between; + gap: 0.75rem; + margin: 0.5rem 0.75rem 0.75rem; + padding: 0.7rem 0.8rem; + border: 1px solid var(--bs-border-color); + border-radius: 0.6rem; + background: var(--bs-tertiary-bg); + color: var(--bs-secondary-color); + font-size: 0.84rem; +} + +.hg-ai-search-tail { + border-block-start: 1px solid var(--bs-border-color); + + &__button { + width: 100%; + border: 0; + background: transparent; + color: inherit; + text-align: start; + + &:hover, + &:focus-visible { + background: var(--hg-theme-color-soft); + color: inherit; + } + } +} + +.hg-ask-ai-launcher { + position: fixed; + z-index: 1040; + inset-inline-end: unquote('max(1rem, env(safe-area-inset-right))'); + inset-block-end: unquote('max(1rem, env(safe-area-inset-bottom))'); + display: inline-flex; + align-items: center; + gap: 0.45rem; + min-height: 44px; + padding: 0.65rem 0.9rem; + border: 1px solid color-mix(in srgb, var(--hg-theme-color) 72%, #fff); + border-radius: 999px; + background: var(--hg-theme-color); + box-shadow: 0 8px 24px rgba(20, 17, 73, 0.24); + color: #fff; + font: 600 0.86rem/1 var(--td-ui-font-family); + + &:hover, + &:focus-visible { + background: color-mix(in srgb, var(--hg-theme-color) 86%, #000); + color: #fff; + } + + &[data-hg-ai-state='error'] { + border-style: dashed; + } + + &[aria-busy='true'] { + cursor: wait; + opacity: 0.72; + } +} + +.hg-ai-status:not(:empty) { + position: fixed; + z-index: 1039; + inset-inline-end: unquote('max(1rem, env(safe-area-inset-right))'); + inset-block-end: unquote( + 'calc(max(1rem, env(safe-area-inset-bottom)) + 3.4rem)' + ); + width: unquote('min(18rem, calc(100vw - 2rem))'); + padding: 0.55rem 0.7rem; + border: 1px solid var(--bs-border-color); + border-radius: 0.55rem; + background: var(--bs-body-bg); + box-shadow: 0 6px 18px rgba(0, 0, 0, 0.14); + color: var(--bs-body-color); + font-size: 0.78rem; +} + @media (max-width: 767.98px) { + .td-shell-chrome .td-site-nav__menu-toggle { + border: 1px solid rgba(255, 255, 255, 0.42); + background: rgba(20, 17, 73, 0.22); + color: #fff; + } + + .hg-ask-ai-launcher { + min-width: 44px; + min-height: 44px; + padding: 0.65rem; + + span { + @include visually-hidden; + } + } + .hg-shell-mobile-utils, .hg-landing-mobile-utils { display: grid; @@ -499,7 +654,8 @@ $hg-navbar-purple: #532fc9; gap: 0.35rem; > a, - > button { + > button, + > .hg-version-overflow > a { display: inline-flex; align-items: center; gap: 0.4rem; @@ -514,12 +670,18 @@ $hg-navbar-purple: #532fc9; } > a[aria-current='page'], + > .hg-version-overflow > a[aria-current='page'], > button[aria-pressed='true'] { background: var(--bs-primary-bg-subtle); color: var(--bs-primary-text-emphasis); } } + .hg-shell-mobile-utils__links > .hg-version-overflow > a { + margin-inline-end: 0.35rem; + margin-block-start: 0.35rem; + } + .hg-shell-mobile-utils__github { display: inline-flex; align-items: center; @@ -688,3 +850,56 @@ $hg-navbar-purple: #532fc9; } } } + +// ASF download tables (layouts/_partials/asf-downloads.html): keep the cells +// on one line so the wide table scrolls inside td-asset-list__table-wrap +// instead of squeezing every column, and lay the release meta out inline. +.hg-asf-release { + // The focusable wrapper owns horizontal scrolling, not td-content's table. + .td-asset-list__table-wrap { + overflow-x: auto !important; + overflow-y: hidden; + } + + .td-asset-list__table { + display: table !important; + width: max-content; + min-width: 100%; + overflow: visible !important; + } + + .td-asset-list__table th, + .td-asset-list__table td { + white-space: nowrap; + } +} + +.hg-asf-release__meta { + list-style: none; + padding-left: 0; + display: flex; + flex-wrap: wrap; + gap: 0.25rem 1.5rem; +} + + +// Local disclosure renders before any third-party AI resource is requested. +.hg-ai-consent { + width: calc(100% - 2rem); + max-width: 28rem; + padding: 1.5rem; + border: 1px solid var(--bs-border-color); + border-radius: .75rem; + background: var(--bs-body-bg); + color: var(--bs-body-color); + box-shadow: 0 .75rem 3rem rgba(0, 0, 0, .2); + &::backdrop { background: rgba(0, 0, 0, .4); } + h2 { font-size: 1.25rem; } + .hg-ai-consent-actions { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + gap: .75rem; + margin-top: 1.25rem; + } +} diff --git a/assets/scss/_variables_project.scss b/assets/scss/_variables_project.scss new file mode 100644 index 0000000000..42543db59b --- /dev/null +++ b/assets/scss/_variables_project.scss @@ -0,0 +1,49 @@ +// Keep Bootstrap's built-in controls compatible with the site's no-data-URL +// policy. The stylesheet is emitted under /scss/, while static assets are +// published under /img/ for every version artifact. +$form-check-input-checked-bg-image: + url("../img/bootstrap-controls/check-checked.svg"); +$form-check-radio-checked-bg-image: + url("../img/bootstrap-controls/radio-checked.svg"); +$form-check-input-indeterminate-bg-image: + url("../img/bootstrap-controls/check-indeterminate.svg"); + +$form-switch-bg-image: + url("../img/bootstrap-controls/switch.svg"); +$form-switch-focus-bg-image: + url("../img/bootstrap-controls/switch-focus.svg"); +$form-switch-checked-bg-image: + url("../img/bootstrap-controls/switch-checked.svg"); + +$form-select-indicator: + url("../img/bootstrap-controls/select.svg"); +$form-feedback-icon-valid: + url("../img/bootstrap-controls/validation-valid.svg"); +$form-feedback-icon-invalid: + url("../img/bootstrap-controls/validation-invalid.svg"); + +$navbar-light-toggler-icon-bg: + url("../img/bootstrap-controls/navbar-light.svg"); +$navbar-dark-toggler-icon-bg: + url("../img/bootstrap-controls/navbar-dark.svg"); + +$accordion-button-icon: + url("../img/bootstrap-controls/accordion.svg"); +$accordion-button-active-icon: + url("../img/bootstrap-controls/accordion-active.svg"); + +$carousel-control-prev-icon-bg: + url("../img/bootstrap-controls/carousel-prev.svg"); +$carousel-control-next-icon-bg: + url("../img/bootstrap-controls/carousel-next.svg"); +$btn-close-bg: + url("../img/bootstrap-controls/close.svg"); + +$form-select-indicator-dark: + url("../img/bootstrap-controls/select-dark.svg"); +$form-switch-bg-image-dark: + url("../img/bootstrap-controls/switch-dark.svg"); +$accordion-button-icon-dark: + url("../img/bootstrap-controls/accordion-dark.svg"); +$accordion-button-active-icon-dark: + url("../img/bootstrap-controls/accordion-active-dark.svg"); diff --git a/assets/scss/community-members.scss b/assets/scss/community-members.scss new file mode 100644 index 0000000000..f5cfa240c4 --- /dev/null +++ b/assets/scss/community-members.scss @@ -0,0 +1,62 @@ +.hg-community-members { + --hg-community-columns: 5; + &__role + &__role { margin-top: 2.5rem; } + &__grid { + display: grid; + grid-template-columns: repeat(var(--hg-community-columns), minmax(0, 1fr)); + gap: 1rem; + padding: 0; + margin: 1rem 0 0; + list-style: none; + } +} +.hg-community-member { + min-width: 0; + padding: 0; + &__link { + display: flex; + min-height: 100%; + flex-direction: column; + align-items: center; + gap: .65rem; + padding: 1rem .75rem; + color: inherit; + text-align: center; + text-decoration: none; + border: 1px solid var(--td-border-color); + border-radius: var(--td-card-border-radius, .75rem); + background: var(--td-card-bg, var(--bs-body-bg)); + &:hover, &:focus-visible { + color: var(--td-link-color, var(--bs-link-color)); + border-color: currentColor; + } + } + &__avatar { + position: relative; + display: grid; + width: 8rem; + height: 8rem; + overflow: hidden; + place-items: center; + border-radius: 50%; + background: var(--td-secondary-bg, var(--bs-secondary-bg)); + img, .hg-community-member__initials { position: absolute; inset: 0; width: 100%; height: 100%; } + img { object-fit: cover; } + } + &__initials { + display: grid; + place-items: center; + font-size: 1.65rem; + font-weight: 700; + color: var(--td-body-color, var(--bs-body-color)); + } + &__identity { max-width: 100%; overflow-wrap: anywhere; font-weight: 650; } + &__role-label { font-size: .8rem; color: var(--td-secondary-color, var(--bs-secondary-color)); } +} +@media (max-width: 1199.98px) { + .hg-community-members { --hg-community-columns: 3; } +} +@media (max-width: 767.98px) { + .hg-community-members { --hg-community-columns: 2; } + .hg-community-member__avatar { width: 6rem; height: 6rem; } +} diff --git a/content/cn/docs/_index.md b/content/cn/docs/_index.md index 2e35034182..e75800bb37 100755 --- a/content/cn/docs/_index.md +++ b/content/cn/docs/_index.md @@ -2,6 +2,7 @@ title: "Documentation" linkTitle: "Documentation" weight: 20 +outputs: [HTML, RSS, print, markdown, LLMSFULL] --- ## Apache HugeGraph ๆ–‡ๆกฃ diff --git a/content/cn/docs/clients/_index.md b/content/cn/docs/clients/_index.md index b31bade126..5fd06188dc 100644 --- a/content/cn/docs/clients/_index.md +++ b/content/cn/docs/clients/_index.md @@ -1,7 +1,10 @@ --- title: "ๅฎขๆˆท็ซฏไธŽ API" +description: "้€š่ฟ‡ Java ๅฎขๆˆท็ซฏใ€REST APIใ€Gremlin Console ๅ’Œๅ…ถไป–ๅฎขๆˆท็ซฏๅบ“่ฟžๆŽฅ HugeGraphใ€‚" linkTitle: "ๅฎขๆˆท็ซฏไธŽ API" weight: 5 +search_keywords: [HugeGraph ๅฎขๆˆท็ซฏ, Java ๅฎขๆˆท็ซฏ, ๅฎขๆˆท็ซฏๅบ“] +search_boost: 1.5 --- ๆœฌ่Š‚ๅŒ…ๅซ REST APIใ€Gremlin Console ๅ’Œๅฎขๆˆท็ซฏ่ฏดๆ˜Žใ€‚ๅฝ“ๅ‰ Server REST API ไฝฟ็”จๅ›พ็ฉบ้—ดๅ’Œๅ›พๅ็งฐ็ป„ๆˆ่ต„ๆบ่ทฏๅพ„๏ผ›ๅ…ทไฝ“่ทฏๅพ„ไปฅๅ„ API ้กต้ขๅ’Œ Server ็š„ OpenAPI ้กต้ขไธบๅ‡†ใ€‚ diff --git a/content/cn/docs/clients/restful-api/_index.md b/content/cn/docs/clients/restful-api/_index.md index 6094321b29..ab79ed10b8 100644 --- a/content/cn/docs/clients/restful-api/_index.md +++ b/content/cn/docs/clients/restful-api/_index.md @@ -2,6 +2,8 @@ title: "HugeGraph RESTful API" linkTitle: "RESTful API" weight: 1 +search_keywords: [HugeGraph REST API, RESTful API, OpenAPI] +search_boost: 1.7 --- > โš ๏ธ **็‰ˆๆœฌๅ…ผๅฎนๆ€ง่ฏดๆ˜Ž** diff --git a/content/cn/docs/clients/restful-api/vertex.md b/content/cn/docs/clients/restful-api/vertex.md index 1318da72f2..1d1158b281 100644 --- a/content/cn/docs/clients/restful-api/vertex.md +++ b/content/cn/docs/clients/restful-api/vertex.md @@ -5,7 +5,7 @@ weight: 7 description: "Vertex๏ผˆ้กถ็‚น๏ผ‰REST ๆŽฅๅฃ:ๅˆ›ๅปบใ€ๆŸฅ่ฏขใ€ๆ›ดๆ–ฐๅ’Œๅˆ ้™คๅ›พไธญ็š„้กถ็‚นๆ•ฐๆฎ,ๆ”ฏๆŒๆ‰น้‡ๆ“ไฝœๅ’Œๆกไปถ่ฟ‡ๆปคใ€‚" --- -### 2.1 Vertex +### 2.1 Vertex {#vertex-api} ้กถ็‚น็ฑปๅž‹ไธญ็š„ `Id` ็ญ–็•ฅๅ†ณๅฎšไบ†้กถ็‚น็š„ `Id` ็ฑปๅž‹๏ผŒๅ…ถๅฏนๅบ”็š„ `id` ็ฑปๅž‹ๅฆ‚ไธ‹๏ผš @@ -16,6 +16,7 @@ description: "Vertex๏ผˆ้กถ็‚น๏ผ‰REST ๆŽฅๅฃ:ๅˆ›ๅปบใ€ๆŸฅ่ฏขใ€ๆ›ดๆ–ฐๅ’Œๅˆ ้™คๅ›พ | CUSTOMIZE_STRING | string | | CUSTOMIZE_NUMBER | number | | CUSTOMIZE_UUID | uuid | +{#vertex-id-strategy .full-width caption="้กถ็‚น ID ็ญ–็•ฅ"} ้กถ็‚น็š„ `GET/PUT/DELETE` API ไธญ url ็š„ id ้ƒจๅˆ†ๅบ”่ฏฅไผ ๅ…ฅๅธฆๆœ‰็ฑปๅž‹ไฟกๆฏ็š„ id ๅ€ผ๏ผŒ่ฟ™ไธช็ฑปๅž‹ไฟกๆฏ้€š่ฟ‡ json ไธฒๆ˜ฏๅฆๅธฆๅผ•ๅทๆฅ่กจ็คบ๏ผŒไนŸๅฐฑๆ˜ฏ่ฏด๏ผš @@ -41,7 +42,7 @@ schema.vertexLabel("software").properties("name", "lang", "price").primaryKeys(" schema.indexLabel("personByAge").onV("person").by("age").range().ifNotExist().create(); ``` -#### 2.1.1 ๅˆ›ๅปบไธ€ไธช้กถ็‚น +#### 2.1.1 ๅˆ›ๅปบไธ€ไธช้กถ็‚น {#create-vertex} ##### Params @@ -58,7 +59,7 @@ POST http://localhost:8080/graphspaces/DEFAULT/graphs/hugegraph/graph/vertices ##### Request Body -```json +```json {filename="request.json" wrap=true} { "label": "person", "properties": { @@ -76,7 +77,7 @@ POST http://localhost:8080/graphspaces/DEFAULT/graphs/hugegraph/graph/vertices ##### Response Body -```json +```json {filename="response.json" wrap=true} { "id": "1:marko", "label": "person", diff --git a/content/cn/docs/config/config-authentication.md b/content/cn/docs/config/config-authentication.md index a6b67d1b5c..481edd5038 100644 --- a/content/cn/docs/config/config-authentication.md +++ b/content/cn/docs/config/config-authentication.md @@ -2,6 +2,8 @@ title: "HugeGraph ๅ†…็ฝฎ็”จๆˆทๆƒ้™ไธŽๆ‰ฉๅฑ•ๆƒ้™้…็ฝฎๅŠไฝฟ็”จ" linkTitle: "ๆƒ้™้…็ฝฎ" weight: 3 +search_keywords: [HugeGraph ่ฎค่ฏ, ๆƒ้™้…็ฝฎ, StandardAuthenticator] +search_boost: 1.7 --- ### ๆฆ‚่ฟฐ diff --git a/content/cn/docs/config/config-guide.md b/content/cn/docs/config/config-guide.md index c8d8d3c942..7d76a80f6f 100644 --- a/content/cn/docs/config/config-guide.md +++ b/content/cn/docs/config/config-guide.md @@ -2,6 +2,8 @@ title: "Server ๅฏๅŠจๆŒ‡ๅ—" linkTitle: "Server ๅฏๅŠจๆŒ‡ๅ—" weight: 1 +search_keywords: [HugeGraph ้…็ฝฎ, Server ้…็ฝฎ, ้…็ฝฎๆŒ‡ๅ—] +search_boost: 1.6 --- ### 1 ๆฆ‚่ฟฐ @@ -21,7 +23,7 @@ HugeGraphServer ๅ†…้ƒจ้›†ๆˆไบ† GremlinServer ๅ’Œ RestServer๏ผŒ่€Œ gremlin-serve `gremlin-server.yaml` ็š„ไธป่ฆ็ป“ๆž„ๅฆ‚ไธ‹ใ€‚็คบไพ‹็œ็•ฅไบ†้ƒจๅˆ†ๅฏผๅ…ฅ้กน๏ผ›ๅฎŒๆ•ดๅ†…ๅฎนไปฅๅ‘ๅธƒๅŒ…ไธญ็š„ๆ–‡ไปถไธบๅ‡†ใ€‚ -```yaml +```yaml {filename="conf/gremlin-server.yaml" wrap=true collapse=18} # host and port of gremlin server, need to be consistent with host and port in rest-server.properties #host: 127.0.0.1 #port: 8182 diff --git a/content/cn/docs/download/download.md b/content/cn/docs/download/download.md index 831c22faaa..a37a6c96c9 100644 --- a/content/cn/docs/download/download.md +++ b/content/cn/docs/download/download.md @@ -2,6 +2,8 @@ title: "ไธ‹่ฝฝ Apache HugeGraph" linkTitle: "Download" weight: 2 +search_keywords: [HugeGraph ไธ‹่ฝฝ, ๅ‘ๅธƒๅŒ…, SHA512] +search_boost: 3 --- > ๆŒ‡ๅ—: @@ -11,25 +13,11 @@ weight: 2 > - ๆฃ€ๆŸฅๅ“ˆๅธŒ (SHA512)ใ€็ญพๅ็š„่ฏดๆ˜Žๅœจ [็‰ˆๆœฌ้ชŒ่ฏ](/docs/contribution-guidelines/validate-release/) ้กต้ข, ไนŸๅฏๅ‚่€ƒ [ASF ้ชŒ่ฏ่ฏดๆ˜Ž](https://www.apache.org/dyn/closer.cgi#verify) > - ๆณจ: HugeGraph ๆ‰€ๆœ‰็ป„ไปถ็‰ˆๆœฌๅทๅทฒไฟๆŒไธ€่‡ด, `client/loader/hubble/common` ็ญ‰ maven ไป“ๅบ“็‰ˆๆœฌๅทๅŒ็†, ไพ่ต–ๅผ•็”จๅฏๅ‚่€ƒ [maven ็คบไพ‹](https://github.com/apache/hugegraph-toolchain#maven-dependencies) > - ๅ…ผๅฎน่ฏดๆ˜Ž: HugeGraph ไบŽ 2026 ๅนด 1 ๆœˆๆฏ•ไธšๅŽ๏ผŒไธ‹่ฝฝ่ทฏๅพ„ๅทฒไปŽ `/incubator/hugegraph` ่ฟ็งปๅˆฐ `/hugegraph`ใ€‚ๅކๅฒ็‰ˆๆœฌ็š„ๅ‘ๅธƒๆ–‡ไปถๅๅฏ่ƒฝไปๅŒ…ๅซ `-incubating-`ใ€‚ +> - ไปŽๆบ็ ๆž„ๅปบ่ฏทๅ‚่€ƒ [็ผ–่ฏ‘ๆž„ๅปบ่ฏดๆ˜Ž](/docs/quickstart/hugegraph/hugegraph-server/) -### ๆœ€ๆ–ฐ็‰ˆๆœฌ 1.7.0 +### ๆœ€ๆ–ฐ็‰ˆๆœฌ -- Release Date: 2025-11-28 -- [Release Notes](/docs/changelog/hugegraph-1.7.0-release-notes/) - -#### ไบŒ่ฟ›ๅˆถๅŒ… - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0.tar.gz.sha512)] | - -#### ๆบ็ ๅŒ… - -Please refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server/). - -| Server | Toolchain | AI | Computer | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-ai-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-ai-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-ai-incubating-1.7.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-computer-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-computer-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-computer-incubating-1.7.0-src.tar.gz.sha512)] | +{{< asf-downloads latest >}} --- @@ -41,75 +29,4 @@ Please refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server/ > 2. `1.3.0` ๆ˜ฏๆœ€ๅŽไธ€ไธชๅ…ผๅฎน Java8 ็š„ไธป็‰ˆๆœฌ, ่ฏทๅฐฝๆ—ฉไฝฟ็”จ/่ฟ็งป่ฟ่กŒๆ—ถไธบ Java11 (ไฝŽ็‰ˆๆœฌ Java ๆœ‰ๆฝœๅœจๆ›ดๅคš็š„ SEC ้ฃŽ้™ฉๅ’Œๆ€ง่ƒฝๅฝฑๅ“) > 3. ไปŽ็‰ˆๆœฌ `1.5.0` ๅผ€ๅง‹๏ผŒ้œ€่ฆ Java11 ่ฟ่กŒๆ—ถ็Žฏๅขƒ -#### 1.5.0 - -- Release Date: 2024-12-10 -- [Release Notes](/docs/changelog/hugegraph-1.5.0-release-notes/) - -##### ไบŒ่ฟ›ๅˆถๅŒ… - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0.tar.gz.sha512)] | - -##### ๆบ็ ๅŒ… - -Please refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server/). - -| Server | Toolchain | AI | Computer | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-ai-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-ai-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-ai-incubating-1.5.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-computer-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-computer-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-computer-incubating-1.5.0-src.tar.gz.sha512)] | - -#### 1.3.0 - -- Release Date: 2024-04-01 -- [Release Notes](/docs/changelog/hugegraph-1.3.0-release-notes/) - -##### ไบŒ่ฟ›ๅˆถๅŒ… - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0.tar.gz.sha512)] | - -##### ๆบ็ ๅŒ… - -Please refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server/). - -| Server | Toolchain | AI | Common | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-ai-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-ai-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-ai-incubating-1.3.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-commons-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-commons-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-commons-incubating-1.3.0-src.tar.gz.sha512)] | - - -#### 1.2.0 - -- Release Date: 2023-12-28 -- [Release Notes](/docs/changelog/hugegraph-1.2.0-release-notes/) - -##### ไบŒ่ฟ›ๅˆถๅŒ… - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0.tar.gz.sha512)] | - -##### ๆบ็ ๅŒ… - -| Server | Toolchain | Computer | Common | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-computer-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-computer-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-computer-incubating-1.2.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-commons-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-commons-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-commons-incubating-1.2.0-src.tar.gz.sha512)] | - -#### 1.0.0 - -- Release Date: 2023-02-22 -- [Release Notes](/docs/changelog/hugegraph-1.0.0-release-notes/) - -##### ไบŒ่ฟ›ๅˆถๅŒ… - -| Server | Toolchain | Computer | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0.tar.gz.sha512)] | - -##### ๆบ็ ๅŒ… - -| Server | Toolchain | Computer | Common | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-commons-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-commons-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-commons-incubating-1.0.0-src.tar.gz.sha512)] | +{{< asf-downloads archived >}} diff --git a/content/cn/docs/introduction/_index.md b/content/cn/docs/introduction/_index.md index d57559c4dc..72a07c23de 100644 --- a/content/cn/docs/introduction/_index.md +++ b/content/cn/docs/introduction/_index.md @@ -2,6 +2,8 @@ title: "Apache HugeGraph ไป‹็ป" linkTitle: "็ณป็ปŸไป‹็ป" weight: 1 +search_keywords: [HugeGraph ไป‹็ป, ๅ›พๆ•ฐๆฎๅบ“็ฎ€ไป‹, ็ณป็ปŸๆžถๆž„] +search_boost: 3 aliases: # Hugo 0.165 prefixes aliases with the current language path. - /docs/introduction/readme/ diff --git a/content/cn/docs/quickstart/computing/hugegraph-computer.md b/content/cn/docs/quickstart/computing/hugegraph-computer.md index 297d0f7fc4..134e9f3b1a 100644 --- a/content/cn/docs/quickstart/computing/hugegraph-computer.md +++ b/content/cn/docs/quickstart/computing/hugegraph-computer.md @@ -2,6 +2,8 @@ title: "HugeGraph-Computer Quick Start" linkTitle: "ไฝฟ็”จ Computer ่ฟ›่กŒ OLAP ๅˆ†ๆž" weight: 2 +search_keywords: [HugeGraph Computer, ๅ›พ่ฎก็ฎ—, OLAP] +search_boost: 1.6 --- ## 1 HugeGraph-Computer ๆฆ‚่ฟฐ diff --git a/content/cn/docs/quickstart/hugegraph/hugegraph-hstore.md b/content/cn/docs/quickstart/hugegraph/hugegraph-hstore.md index 34d5db1f01..3ab0ab64fd 100644 --- a/content/cn/docs/quickstart/hugegraph/hugegraph-hstore.md +++ b/content/cn/docs/quickstart/hugegraph/hugegraph-hstore.md @@ -3,10 +3,10 @@ title: "HugeGraph-Store Quick Start" linkTitle: "ๅฎ‰่ฃ…/ๆž„ๅปบ HugeGraph-Store" weight: 3 search_keywords: + - HugeGraph HStore + - ๅˆ†ๅธƒๅผๅญ˜ๅ‚จ - server.port - - REST ็ซฏๅฃ - - Store REST ็ซฏๅฃ -search_boost: 1.5 +search_boost: 1.6 --- ### 1 HugeGraph-Store ๆฆ‚่ฟฐ diff --git a/content/cn/docs/quickstart/hugegraph/hugegraph-pd.md b/content/cn/docs/quickstart/hugegraph/hugegraph-pd.md index 532d11f893..403283cb3c 100644 --- a/content/cn/docs/quickstart/hugegraph/hugegraph-pd.md +++ b/content/cn/docs/quickstart/hugegraph/hugegraph-pd.md @@ -2,6 +2,8 @@ title: "HugeGraph-PD Quick Start" linkTitle: "ๅฎ‰่ฃ…/ๆž„ๅปบ HugeGraph-PD" weight: 2 +search_keywords: [HugeGraph PD, ๅ…ƒๆ•ฐๆฎ็ฎก็†, ้›†็พค่ฐƒๅบฆ] +search_boost: 1.6 --- ### 1 HugeGraph-PD ๆฆ‚่ฟฐ diff --git a/content/cn/docs/quickstart/hugegraph/hugegraph-server.md b/content/cn/docs/quickstart/hugegraph/hugegraph-server.md index 1e08171ff7..390a137d72 100644 --- a/content/cn/docs/quickstart/hugegraph/hugegraph-server.md +++ b/content/cn/docs/quickstart/hugegraph/hugegraph-server.md @@ -2,6 +2,8 @@ title: "HugeGraph Server ๅฟซ้€Ÿๅผ€ๅง‹" linkTitle: "ๅฎ‰่ฃ…/ๆž„ๅปบ HugeGraph Server" weight: 1 +search_keywords: [HugeGraph Server, Server ๅฟซ้€Ÿๅผ€ๅง‹, ๅ›พๆ•ฐๆฎๅบ“ๆœๅŠก] +search_boost: 1.7 aliases: - /docs/quickstart/hugegraph-server/ --- @@ -34,10 +36,11 @@ HugeGraph 1.7.0 ไธญ็š„ `hugegraph-server` ๆจกๅ—ไฝฟ็”จ Java 11 ็ผ–่ฏ‘๏ผŒ่ฟ่กŒ ๆœ‰ๅ››็งๆ–นๅผๅฏไปฅ้ƒจ็ฝฒ Server ๆœๅŠก๏ผš -- ๆ–นๅผ 1๏ผšไฝฟ็”จ Docker ๅฎนๅ™จ (ไพฟไบŽ**ๆต‹่ฏ•**) -- ๆ–นๅผ 2๏ผšไธ‹่ฝฝ tar ๅŒ… -- ๆ–นๅผ 3๏ผšๆบ็ ็ผ–่ฏ‘ -- ๆ–นๅผ 4๏ผšไฝฟ็”จ tools ๅทฅๅ…ท้ƒจ็ฝฒ (Outdated) +1. ไฝฟ็”จ Docker ๅฎนๅ™จ่ฟ›่กŒๆต‹่ฏ•ๆˆ–ๅผ€ๅ‘ใ€‚ +1. ไธ‹่ฝฝไบŒ่ฟ›ๅˆถ tar ๅŒ…ใ€‚ +1. ไปŽๆบ็ ็ผ–่ฏ‘ใ€‚ +1. ไฝฟ็”จๅทฒ่ฟ‡ๆ—ถ็š„ไธ€้”ฎ้ƒจ็ฝฒๅทฅๅ…ทใ€‚ +{.steps} > ไธ่ฆๆŠŠ Gremlinใ€Cypher ็ญ‰ๆŸฅ่ฏขๆŽฅๅฃ็›ดๆŽฅๆšด้œฒๅˆฐๅ…ฌ็ฝ‘ใ€‚็”Ÿไบง็Žฏๅขƒๅบ”ๅฏ็”จ[่ฎค่ฏไธŽๆŽˆๆƒ](/cn/docs/config/config-authentication/)๏ผŒ้™ๅˆถ็ฝ‘็ปœ่ฎฟ้—ฎๅนถไฟ็•™ๅฎก่ฎกๆ—ฅๅฟ—๏ผ›้ƒจ็ฝฒๅปบ่ฎฎ่ง[ๅฎ‰ๅ…จๆŒ‡ๅ—](/cn/docs/guides/security/)ใ€‚ @@ -72,7 +75,7 @@ HugeGraph 1.7.0 ไธญ็š„ `hugegraph-server` ๆจกๅ—ไฝฟ็”จ Java 11 ็ผ–่ฏ‘๏ผŒ่ฟ่กŒ | HA ๅ‚่€ƒ | `docker-compose-3pd-3store-3server.yml` | 3 PD + 3 Store + 3 Server + 1 Hubble | | ๆœ€ๅฐ HStore ๆ‹“ๆ‰‘็š„ๆบ็ ๆž„ๅปบ่ฆ†็›–ๆ–‡ไปถ | `docker-compose.dev.yml` | ๏ผˆ้œ€ไธŽ `docker-compose-hstore.yml` ไธ€่ตทไฝฟ็”จ๏ผ‰ | -```bash +```bash {filename="docker/docker-compose.yml" wrap=true} cd hugegraph/docker # ๆณจๆ„็‰ˆๆœฌๅท่ฏท้šๆ—ถไฟๆŒๆ›ดๆ–ฐ โ†’ 1.x.0 HUGEGRAPH_VERSION=1.7.0 docker compose -f docker-compose.yml up -d --wait @@ -92,7 +95,7 @@ compose ๆ–‡ไปถไปŽ `HUGEGRAPH_ADMIN_PASSWORD` ่ฏปๅ–็ฎก็†ๅ‘˜ๅฏ†็ ๏ผŒไปŽ `HUGEGR ### 3.2 ไธ‹่ฝฝ tar ๅŒ… -```bash +```bash {filename="download-release.sh" wrap=true collapse=2} # 1.7.0 ๆ˜ฏ้กน็›ฎๅญตๅŒ–ๆœŸๅ‘ๅธƒ็š„ๅކๅฒ็‰ˆๆœฌ๏ผŒๅ› ๆญคๆ–‡ไปถๅไปๅธฆ incubating wget https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz tar zxf apache-hugegraph-incubating-1.7.0.tar.gz @@ -104,7 +107,7 @@ tar zxf apache-hugegraph-incubating-1.7.0.tar.gz ไธ‹่ฝฝ HugeGraph ๆบไปฃ็  -```bash +```bash {filename="build-from-source.sh" wrap=true collapse=2} git clone https://github.com/apache/hugegraph.git ``` diff --git a/content/cn/docs/quickstart/toolchain/hugegraph-hubble.md b/content/cn/docs/quickstart/toolchain/hugegraph-hubble.md index 92f2ac76e8..313e5173cd 100644 --- a/content/cn/docs/quickstart/toolchain/hugegraph-hubble.md +++ b/content/cn/docs/quickstart/toolchain/hugegraph-hubble.md @@ -1,7 +1,10 @@ --- title: "HugeGraph-Hubble Quick Start" +description: "้ƒจ็ฝฒ HugeGraph-Hubble๏ผŒ่ฟ›่กŒๅ›พๅฏ่ง†ๅŒ–ใ€ๅ…ƒๆ•ฐๆฎ็ฎก็†ใ€ๆ•ฐๆฎๅฏผๅ…ฅ๏ผŒไปฅๅŠ Gremlin ๆˆ– Cypher ๆŸฅ่ฏขใ€‚" linkTitle: "ไฝฟ็”จ Hubble ๅฎž็Žฐๅ›พๅฏ่ง†ๅŒ–" weight: 1 +search_keywords: [HugeGraph Hubble, ๅ›พๅฏ่ง†ๅŒ–, Web ็ฎก็†็•Œ้ข] +search_boost: 1.6 --- ### 1 HugeGraph-Hubble ๆฆ‚่ฟฐ diff --git a/content/cn/docs/quickstart/toolchain/hugegraph-loader.md b/content/cn/docs/quickstart/toolchain/hugegraph-loader.md index d58ff7785c..5a9916bdc1 100644 --- a/content/cn/docs/quickstart/toolchain/hugegraph-loader.md +++ b/content/cn/docs/quickstart/toolchain/hugegraph-loader.md @@ -2,6 +2,8 @@ title: "HugeGraph-Loader Quick Start" linkTitle: "ไฝฟ็”จ Loader ๅฎžๆ—ถ/ๆตๅผๅฏผๅ…ฅๆ•ฐๆฎ" weight: 2 +search_keywords: [HugeGraph Loader, ๆ‰น้‡ๅฏผๅ…ฅ, ๆ•ฐๆฎๅฏผๅ…ฅ] +search_boost: 1.6 --- ### 1 HugeGraph-Loader ๆฆ‚่ฟฐ diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md index a9cd5fbca4..7b1c7b8ee8 100755 --- a/content/en/docs/_index.md +++ b/content/en/docs/_index.md @@ -2,6 +2,7 @@ title: "Documentation" linkTitle: "Documentation" weight: 20 +outputs: [HTML, RSS, print, markdown, LLMSFULL] --- ## Apache HugeGraph Documentation diff --git a/content/en/docs/clients/_index.md b/content/en/docs/clients/_index.md index 48a709f4f2..3ac8c6fc20 100644 --- a/content/en/docs/clients/_index.md +++ b/content/en/docs/clients/_index.md @@ -1,7 +1,10 @@ --- title: "Clients and APIs" +description: "Connect to HugeGraph with the Java client, REST API, Gremlin Console, and other client libraries." linkTitle: "Clients and APIs" weight: 5 +search_keywords: [HugeGraph clients, Java client, client libraries] +search_boost: 1.5 --- This section covers the REST API, Gremlin Console, and client libraries. The current Server REST API identifies graph resources with both a graph space and a graph name. Refer to each API page and the Server OpenAPI page for the exact paths. diff --git a/content/en/docs/clients/restful-api/_index.md b/content/en/docs/clients/restful-api/_index.md index 7c35ce9e30..3b651a5e8b 100644 --- a/content/en/docs/clients/restful-api/_index.md +++ b/content/en/docs/clients/restful-api/_index.md @@ -2,6 +2,8 @@ title: "HugeGraph RESTful API" linkTitle: "RESTful API" weight: 1 +search_keywords: [HugeGraph REST API, RESTful API, OpenAPI] +search_boost: 1.7 --- > โš ๏ธ **Version compatibility notes** diff --git a/content/en/docs/clients/restful-api/vertex.md b/content/en/docs/clients/restful-api/vertex.md index 52d604c4ee..207d9ac506 100644 --- a/content/en/docs/clients/restful-api/vertex.md +++ b/content/en/docs/clients/restful-api/vertex.md @@ -5,7 +5,7 @@ weight: 7 description: "Vertex REST API: Create, query, update, and delete vertex data in the graph with support for batch operations and conditional filtering." --- -### 2.1 Vertex +### 2.1 Vertex {#vertex-api} In vertex types, the `Id` strategy determines the type of the vertex `Id`, with the corresponding relationships as follows: @@ -16,6 +16,7 @@ In vertex types, the `Id` strategy determines the type of the vertex `Id`, with | CUSTOMIZE_STRING | string | | CUSTOMIZE_NUMBER | number | | CUSTOMIZE_UUID | uuid | +{#vertex-id-strategy .full-width caption="Vertex ID strategies"} For the `GET/PUT/DELETE` API of a vertex, the id part in the URL should be passed as the id value with type information. This type information is indicated by whether the JSON string is enclosed in quotes, meaning: @@ -41,7 +42,7 @@ schema.vertexLabel("software").properties("name", "lang", "price").primaryKeys(" schema.indexLabel("personByAge").onV("person").by("age").range().ifNotExist().create(); ``` -#### 2.1.1 Create a vertex +#### 2.1.1 Create a vertex {#create-vertex} ##### Method & Url @@ -51,7 +52,7 @@ POST http://localhost:8080/graphspaces/DEFAULT/graphs/hugegraph/graph/vertices ##### Request Body -```json +```json {filename="request.json" wrap=true} { "label": "person", "properties": { @@ -69,7 +70,7 @@ POST http://localhost:8080/graphspaces/DEFAULT/graphs/hugegraph/graph/vertices ##### Response Body -```json +```json {filename="response.json" wrap=true} { "id": "1:marko", "label": "person", diff --git a/content/en/docs/config/config-authentication.md b/content/en/docs/config/config-authentication.md index f5de712c55..2461c43ea5 100644 --- a/content/en/docs/config/config-authentication.md +++ b/content/en/docs/config/config-authentication.md @@ -2,6 +2,8 @@ title: "Built-in User Authentication and Authorization Configuration and Usage in HugeGraph" linkTitle: "Config Authentication" weight: 3 +search_keywords: [HugeGraph authentication, authorization, StandardAuthenticator] +search_boost: 1.7 --- ### Overview diff --git a/content/en/docs/config/config-guide.md b/content/en/docs/config/config-guide.md index 3e24f49ed9..d8a583f422 100644 --- a/content/en/docs/config/config-guide.md +++ b/content/en/docs/config/config-guide.md @@ -2,6 +2,8 @@ title: "Server Startup Guide" linkTitle: "Server Startup Guide" weight: 1 +search_keywords: [HugeGraph configuration, server config, configuration guide] +search_boost: 1.6 --- ### 1 Overview @@ -21,7 +23,7 @@ Now let's introduce these three configuration files one by one. The main structure of `gremlin-server.yaml` is shown below. Some imports are omitted from this example; refer to the file included in the release package for the complete content. -```yaml +```yaml {filename="conf/gremlin-server.yaml" wrap=true collapse=18} # host and port of gremlin server, need to be consistent with host and port in rest-server.properties #host: 127.0.0.1 #port: 8182 diff --git a/content/en/docs/download/download.md b/content/en/docs/download/download.md index a23907c5c9..46e5f31038 100644 --- a/content/en/docs/download/download.md +++ b/content/en/docs/download/download.md @@ -2,6 +2,8 @@ title: "Download Apache HugeGraph" linkTitle: "Download" weight: 2 +search_keywords: [HugeGraph download, release artifacts, SHA512] +search_boost: 3 --- @@ -12,25 +14,11 @@ weight: 2 > - Instructions for checking hash (SHA512) and signatures are on the [Validate Release](/docs/contribution-guidelines/validate-release) page, and you can also refer to [ASF official instructions](https://www.apache.org/dyn/closer.cgi#verify). > - Note: The version numbers of all components of HugeGraph have been kept consistent, and the version numbers of Maven repositories such as `client/loader/hubble/common` are the same. You can refer to these for dependency references [maven example](https://github.com/apache/hugegraph-toolchain#maven-dependencies). > - Compatibility note: after HugeGraph graduated in January 2026, download paths moved from `/incubator/hugegraph` to `/hugegraph`. Historical release file names may still include `-incubating-`. +> - To build from source, refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server). -### Latest Version 1.7.0 +### Latest Version -- Release Date: 2025-11-28 -- [Release Notes](/docs/changelog/hugegraph-1.7.0-release-notes) - -#### Binary Packages - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0.tar.gz.sha512)] | - -#### Source Packages - -Please refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server). - -| Server | Toolchain | AI | Computer | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-ai-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-ai-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-ai-incubating-1.7.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.7.0/apache-hugegraph-computer-incubating-1.7.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-computer-incubating-1.7.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-computer-incubating-1.7.0-src.tar.gz.sha512)] | +{{< asf-downloads latest >}} --- @@ -38,70 +26,4 @@ Please refer to [build from source](/docs/quickstart/hugegraph/hugegraph-server) > Note: `1.3.0` is the last major version compatible with Java8, please switch to or migrate to Java11 as soon as possible (lower versions of Java have potentially more SEC risks and performance impacts). Starting from version `1.5.0`, a Java11 runtime environment is required. -#### 1.5.0 - -- Release Date: 2024-12-10 -- [Release Notes](/docs/changelog/hugegraph-1.5.0-release-notes) - -##### Binary Packages - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0.tar.gz.sha512)] | - -##### Source Packages - -| Server | Toolchain | AI | Computer | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-incubating-1.5.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-ai-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-ai-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-ai-incubating-1.5.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.5.0/apache-hugegraph-computer-incubating-1.5.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-computer-incubating-1.5.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.5.0/apache-hugegraph-computer-incubating-1.5.0-src.tar.gz.sha512)] | - -#### 1.3.0 - -- Release Date: 2024-04-01 -- [Release Notes](/docs/changelog/hugegraph-1.3.0-release-notes) - -##### Binary Packages - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0.tar.gz.sha512)] | - -##### Source Packages - -| Server | Toolchain | AI | Common | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-incubating-1.3.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-ai-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-ai-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-ai-incubating-1.3.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.3.0/apache-hugegraph-commons-incubating-1.3.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-commons-incubating-1.3.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.3.0/apache-hugegraph-commons-incubating-1.3.0-src.tar.gz.sha512)] | - -#### 1.2.0 - -- Release Date: 2023-12-28 -- [Release Notes](/docs/changelog/hugegraph-1.2.0-release-notes) - -##### Binary Packages - -| Server | Toolchain | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0.tar.gz.sha512)] | - -##### Source Packages - -| Server | Toolchain | Computer | Common | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-incubating-1.2.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-computer-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-computer-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-computer-incubating-1.2.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.2.0/apache-hugegraph-commons-incubating-1.2.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-commons-incubating-1.2.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.2.0/apache-hugegraph-commons-incubating-1.2.0-src.tar.gz.sha512)] | - -#### 1.0.0 - -- Release Date: 2023-02-22 -- [Release Notes](/docs/changelog/hugegraph-1.0.0-release-notes) - -##### Binary Packages - -| Server | Toolchain | Computer | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0.tar.gz.sha512)] | [[Binary](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0.tar.gz.sha512)] | - -##### Source Packages - -| Server | Toolchain | Computer | Common | -|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-incubating-1.0.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-computer-incubating-1.0.0-src.tar.gz.sha512)] | [[Source](https://www.apache.org/dyn/closer.lua/hugegraph/1.0.0/apache-hugegraph-commons-incubating-1.0.0-src.tar.gz?action=download)] [[Sign](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-commons-incubating-1.0.0-src.tar.gz.asc)] [[SHA512](https://downloads.apache.org/hugegraph/1.0.0/apache-hugegraph-commons-incubating-1.0.0-src.tar.gz.sha512)] | +{{< asf-downloads archived >}} diff --git a/content/en/docs/introduction/_index.md b/content/en/docs/introduction/_index.md index e83b690e18..87b87f30d8 100644 --- a/content/en/docs/introduction/_index.md +++ b/content/en/docs/introduction/_index.md @@ -2,6 +2,8 @@ title: "Apache HugeGraph Introduction" linkTitle: "System Introduction" weight: 1 +search_keywords: [HugeGraph overview, graph database introduction, architecture] +search_boost: 3 aliases: # Hugo 0.165 prefixes aliases with the current language path. - /docs/introduction/readme/ diff --git a/content/en/docs/quickstart/computing/hugegraph-computer.md b/content/en/docs/quickstart/computing/hugegraph-computer.md index a153e6b437..8c445841e4 100644 --- a/content/en/docs/quickstart/computing/hugegraph-computer.md +++ b/content/en/docs/quickstart/computing/hugegraph-computer.md @@ -2,6 +2,8 @@ title: "HugeGraph-Computer Quick Start" linkTitle: "Analysis with HugeGraph-Computer" weight: 2 +search_keywords: [HugeGraph Computer, graph computing, OLAP] +search_boost: 1.6 --- ## 1 HugeGraph-Computer Overview diff --git a/content/en/docs/quickstart/hugegraph/hugegraph-hstore.md b/content/en/docs/quickstart/hugegraph/hugegraph-hstore.md index cabd39d74d..abdc14dfde 100644 --- a/content/en/docs/quickstart/hugegraph/hugegraph-hstore.md +++ b/content/en/docs/quickstart/hugegraph/hugegraph-hstore.md @@ -3,10 +3,10 @@ title: "HugeGraph-Store Quick Start" linkTitle: "Install/Build HugeGraph-Store" weight: 3 search_keywords: + - HugeGraph HStore + - distributed storage - server.port - - REST port - - Store REST port -search_boost: 1.5 +search_boost: 1.6 --- ### 1 HugeGraph-Store Overview diff --git a/content/en/docs/quickstart/hugegraph/hugegraph-pd.md b/content/en/docs/quickstart/hugegraph/hugegraph-pd.md index 2a8cefd7a8..8a5d56afa3 100644 --- a/content/en/docs/quickstart/hugegraph/hugegraph-pd.md +++ b/content/en/docs/quickstart/hugegraph/hugegraph-pd.md @@ -2,6 +2,8 @@ title: "HugeGraph-PD Quick Start" linkTitle: "Install/Build HugeGraph-PD" weight: 2 +search_keywords: [HugeGraph PD, placement driver, cluster metadata] +search_boost: 1.6 --- ### 1 HugeGraph-PD Overview diff --git a/content/en/docs/quickstart/hugegraph/hugegraph-server.md b/content/en/docs/quickstart/hugegraph/hugegraph-server.md index 5288908f5f..ec50175f73 100644 --- a/content/en/docs/quickstart/hugegraph/hugegraph-server.md +++ b/content/en/docs/quickstart/hugegraph/hugegraph-server.md @@ -2,6 +2,8 @@ title: "HugeGraph Server Quick Start" linkTitle: "Install/Build HugeGraph Server" weight: 1 +search_keywords: [HugeGraph Server, server quickstart, graph database] +search_boost: 1.7 aliases: - /docs/quickstart/hugegraph-server/ --- @@ -34,10 +36,11 @@ The `hugegraph-server` module in HugeGraph 1.7.0 is compiled with Java 11. Runni There are four ways to deploy the Server service: -- Method 1: Use Docker container (Convenient for Test/Dev) -- Method 2: Download the binary tarball -- Method 3: Source code compilation -- Method 4: One-click deployment +1. Use a Docker container for test or development. +1. Download the binary tarball. +1. Compile the source code. +1. Use the legacy one-click deployment tool. +{.steps} > Do not expose Gremlin, Cypher, or other query endpoints directly to the public Internet. In production, enable [authentication and authorization](/docs/config/config-authentication/), restrict network access, and retain audit logs. See the [Security Guide](/docs/guides/security/) for deployment guidance. @@ -70,7 +73,7 @@ Four compose files are available in the [`docker/`](https://github.com/apache/hu | HA reference | `docker-compose-3pd-3store-3server.yml` | 3 PD + 3 Store + 3 Server + 1 Hubble | | Source build override for the minimal HStore topology | `docker-compose.dev.yml` | (used together with `docker-compose-hstore.yml`) | -```bash +```bash {filename="docker/docker-compose.yml" wrap=true} cd hugegraph/docker # Keep the version aligned with the latest release, for example 1.x.0 HUGEGRAPH_VERSION=1.7.0 docker compose -f docker-compose.yml up -d --wait @@ -91,7 +94,7 @@ See [docker/README.md](https://github.com/apache/hugegraph/blob/master/docker/RE ### 3.2 Download the binary tarball You could download the binary tarball from the download page of the ASF site like this: -```bash +```bash {filename="download-and-verify.sh" wrap=true collapse=5} # 1.7.0 is a historical release from the incubation period, so its file name still includes "incubating" wget https://downloads.apache.org/hugegraph/1.7.0/apache-hugegraph-incubating-1.7.0.tar.gz tar zxf apache-hugegraph-incubating-1.7.0.tar.gz @@ -109,7 +112,7 @@ Download HugeGraph **source code** in either of the following 2 ways (so as the - download the stable/release version from the ASF site - clone the unstable/latest version by GitBox(ASF) or GitHub -```bash +```bash {filename="build-from-source.sh" wrap=true collapse=5} # Way 1. download release package from the ASF site wget https://downloads.apache.org/hugegraph/{version}/apache-hugegraph-incubating-src-{version}.tar.gz tar zxf *hugegraph*.tar.gz diff --git a/content/en/docs/quickstart/toolchain/hugegraph-hubble.md b/content/en/docs/quickstart/toolchain/hugegraph-hubble.md index da7bb23e62..fcac006c69 100644 --- a/content/en/docs/quickstart/toolchain/hugegraph-hubble.md +++ b/content/en/docs/quickstart/toolchain/hugegraph-hubble.md @@ -1,7 +1,10 @@ --- title: "HugeGraph-Hubble Quick Start" +description: "Deploy HugeGraph-Hubble for graph visualization, schema management, data import, and Gremlin or Cypher queries." linkTitle: "Visual with HugeGraph-Hubble" weight: 1 +search_keywords: [HugeGraph Hubble, graph visualization, web console] +search_boost: 1.6 --- ### 1 HugeGraph-Hubble Overview diff --git a/content/en/docs/quickstart/toolchain/hugegraph-loader.md b/content/en/docs/quickstart/toolchain/hugegraph-loader.md index 5cf06bd120..ce448b5a7f 100644 --- a/content/en/docs/quickstart/toolchain/hugegraph-loader.md +++ b/content/en/docs/quickstart/toolchain/hugegraph-loader.md @@ -2,6 +2,8 @@ title: "HugeGraph-Loader Quick Start" linkTitle: "Load data with HugeGraph-Loader" weight: 2 +search_keywords: [HugeGraph Loader, bulk import, data loading] +search_boost: 1.6 --- ### 1 HugeGraph-Loader Overview diff --git a/contribution.md b/contribution.md index 864c4a6750..cd95f7ce47 100644 --- a/contribution.md +++ b/contribution.md @@ -37,7 +37,7 @@ The module graph must contain exactly the pinned `github.com/pgsty/oink@v1.0.0` ```bash git clone https://github.com/apache/hugegraph-doc.git cd hugegraph-doc -hugo server +scripts/hugo.sh server ``` Open . The local preview includes the language-aware search index so search behavior can be checked before publication. @@ -47,14 +47,22 @@ Open . The local preview includes the language-aware sea Run the same warning-strict build used by CI: ```bash -hugo --cleanDestinationDir --gc --minify \ - --environment production \ - --printPathWarnings \ - --printI18nWarnings \ - --panicOnWarning \ - --logLevel info +scripts/hugo.sh build ``` +The wrapper derives the complete version menu from `versions.json` before +starting Hugo. Additional Hugo arguments are passed through unchanged, for +example `scripts/hugo.sh server -p 8080`. Set `HG_DOC_VERSION`, +`HG_DOC_SITE_ORIGIN`, or `HG_DOC_HISTORICAL_ORIGIN` only when validating a +specific version or publication origin. + +The wrapper applies Hugo's configuration, environment, strict-warning, +cleanup, and minification flags before your arguments; Hugo's last-wins flag +handling means anything you append (for example `--logLevel debug`) takes +effect. Use `--baseURL` or `HG_DOC_SITE_ORIGIN` when changing the rendered +origin (the flag wins when both are set); a server `--port` is reflected in +the generated local origin. + A successful command proves that Hugo rendered the configured outputs. It does not replace browser checks for navigation, search, language switching, accessibility, mobile layout, print, or Content Security Policy behavior. ## Repository structure @@ -63,7 +71,7 @@ A successful command proves that Hugo rendered the configured outputs. It does n - `hugo.yaml` owns routing, languages, outputs, search, navigation, and OINK parameters. - `data/home/.yaml` owns the bilingual homepage. - `data/footer/.yaml` owns the bilingual footer. -- `i18n/cn.yaml` maps the preserved `cn` URL language key to the Simplified Chinese OINK interface catalogue. +- `i18n/zh-CN.yaml` carries the Simplified Chinese OINK interface catalogue for the preserved `cn` URL language key; the file is named after the `zh-CN` locale because Hugo resolves translations by locale, not by the URL key. - `assets/` and `static/` contain site-owned brand and compatibility assets. OINK is a module dependency. Do not copy or edit generated module-cache files. Site-specific overrides belong in the corresponding root `layouts/`, `assets/`, or data path and require focused regression evidence. @@ -71,4 +79,3 @@ OINK is a module dependency. Do not copy or edit generated module-cache files. S ## ไธญๆ–‡่ฏดๆ˜Ž ๆไบคๅ‰่ฏทๅŒๆ—ถๆฃ€ๆŸฅไธญ่‹ฑๆ–‡้กต้ขใ€ๅ…ฌๅผ€ URLใ€ๆœ็ดข็ป“ๆžœๅ’Œ่ฏญ่จ€ๅˆ‡ๆขใ€‚่ง†่ง‰ๆˆ–ๅฏผ่ˆชๅ˜ๆ›ดๅฟ…้กปๆไพ›ไฟฎๆ”นๅ‰ๅŽ็š„ๆกŒ้ขไธŽ็งปๅŠจ็ซฏๆˆชๅ›พใ€‚ๆž„ๅปบๆˆๅŠŸๅช่ฏๆ˜ŽๆจกๆฟๅฏไปฅๆธฒๆŸ“๏ผŒไธ่ƒฝๆ›ฟไปฃ็œŸๅฎžๆต่งˆๅ™จใ€ๆ— ้šœ็ขใ€ๆ‰“ๅฐๅ’Œ CSP ๆฃ€ๆŸฅใ€‚ - diff --git a/data/community/github-map.json b/data/community/github-map.json new file mode 100644 index 0000000000..7529e5a32d --- /dev/null +++ b/data/community/github-map.json @@ -0,0 +1,4 @@ +{ + "schema_version": 1, + "mappings": {} +} diff --git a/data/community/roster.json b/data/community/roster.json new file mode 100644 index 0000000000..413853d88f --- /dev/null +++ b/data/community/roster.json @@ -0,0 +1,209 @@ +{ + "schema_version": 1, + "project": "hugegraph", + "retrieved_at": "2026-09-04T12:12:42Z", + "source": { + "committee": "https://whimsy.apache.org/public/committee-info.json", + "projects": "https://whimsy.apache.org/public/public_ldap_projects.json", + "people": "https://whimsy.apache.org/public/public_ldap_people.json", + "chair": "jermy", + "owners": [ + "hxd", + "jermy", + "jin", + "lidongdai", + "linary", + "liyu", + "ming", + "ningjiang", + "panjuan", + "vaughn", + "vgalaxies", + "zhaocong" + ], + "members": [ + "guoshoujing", + "hxd", + "jermy", + "jin", + "jsong010123", + "leizou", + "lidongdai", + "linary", + "liuxiaocs", + "liyu", + "ming", + "ningjiang", + "panjuan", + "pengjunzhi", + "spica", + "vaughn", + "vgalaxies", + "vichayturen", + "wangjing", + "yangjiaqi", + "zhangyi89817", + "zhaocong" + ] + }, + "roles": { + "pmc": [ + { + "asf_id": "jermy", + "name": "Jermy Li", + "initials": "JL", + "chair": true, + "profile_url": "https://people.apache.org/phonebook.html?uid=jermy" + }, + { + "asf_id": "zhaocong", + "name": "Cong Zhao", + "initials": "CZ", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=zhaocong" + }, + { + "asf_id": "jin", + "name": "Imba Jin", + "initials": "IJ", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=jin" + }, + { + "asf_id": "panjuan", + "name": "Juan Pan", + "initials": "JP", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=panjuan" + }, + { + "asf_id": "lidongdai", + "name": "Lidong Dai", + "initials": "LD", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=lidongdai" + }, + { + "asf_id": "linary", + "name": "NingRui Li", + "initials": "NL", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=linary" + }, + { + "asf_id": "ming", + "name": "Simon", + "initials": "S", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=ming" + }, + { + "asf_id": "ningjiang", + "name": "Willem Ning Jiang", + "initials": "WN", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=ningjiang" + }, + { + "asf_id": "hxd", + "name": "Xiangdong Huang", + "initials": "XH", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=hxd" + }, + { + "asf_id": "vaughn", + "name": "Yan Zhang", + "initials": "YZ", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=vaughn" + }, + { + "asf_id": "liyu", + "name": "Yu Li", + "initials": "YL", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=liyu" + }, + { + "asf_id": "vgalaxies", + "name": "Yuchen Ding", + "initials": "YD", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=vgalaxies" + } + ], + "committers": [ + { + "asf_id": "yangjiaqi", + "name": "Jacky Yang", + "initials": "JY", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=yangjiaqi" + }, + { + "asf_id": "jsong010123", + "name": "Jason", + "initials": "J", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=jsong010123" + }, + { + "asf_id": "wangjing", + "name": "Jing Wang", + "initials": "JW", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=wangjing" + }, + { + "asf_id": "pengjunzhi", + "name": "Junzhi Peng", + "initials": "JP", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=pengjunzhi" + }, + { + "asf_id": "vichayturen", + "name": "Kaiyichen Wei", + "initials": "KW", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=vichayturen" + }, + { + "asf_id": "leizou", + "name": "Lei Zou", + "initials": "LZ", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=leizou" + }, + { + "asf_id": "guoshoujing", + "name": "Shoujing Guo", + "initials": "SG", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=guoshoujing" + }, + { + "asf_id": "liuxiaocs", + "name": "Xiao Liu", + "initials": "XL", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=liuxiaocs" + }, + { + "asf_id": "zhangyi89817", + "name": "Yi Zhang", + "initials": "YZ", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=zhangyi89817" + }, + { + "asf_id": "spica", + "name": "Zhe Wang", + "initials": "ZW", + "chair": false, + "profile_url": "https://people.apache.org/phonebook.html?uid=spica" + } + ] + } +} diff --git a/data/downloads/asf.json b/data/downloads/asf.json new file mode 100644 index 0000000000..af81244a6f --- /dev/null +++ b/data/downloads/asf.json @@ -0,0 +1,53 @@ +{ + "$comment": "Single source of truth for the ASF release download facts. Both language download pages render from this file through layouts/_partials/asf-downloads.html; do not edit the page tables by hand. Every filename was verified against https://downloads.apache.org/hugegraph// on 2026-09-13. file = [-incubating]-[-src].tar.gz where -incubating applies when the release has incubating: true; mirror = https://www.apache.org/dyn/closer.lua///?action=download ; asc/sha512 = https://downloads.apache.org///.asc|.sha512", + "dist_path": "hugegraph", + "components": { + "server": { "prefix": "apache-hugegraph", "label_key": "download_component_server" }, + "toolchain": { "prefix": "apache-hugegraph-toolchain", "label_key": "download_component_toolchain" }, + "ai": { "prefix": "apache-hugegraph-ai", "label_key": "download_component_ai" }, + "computer": { "prefix": "apache-hugegraph-computer", "label_key": "download_component_computer" }, + "commons": { "prefix": "apache-hugegraph-commons", "label_key": "download_component_commons" } + }, + "releases": [ + { + "version": "1.7.0", + "date": "2025-11-28", + "latest": true, + "incubating": true, + "binary": ["server", "toolchain"], + "source": ["server", "toolchain", "ai", "computer"] + }, + { + "version": "1.5.0", + "date": "2024-12-10", + "latest": false, + "incubating": true, + "binary": ["server", "toolchain"], + "source": ["server", "toolchain", "ai", "computer"] + }, + { + "version": "1.3.0", + "date": "2024-04-01", + "latest": false, + "incubating": true, + "binary": ["server", "toolchain"], + "source": ["server", "toolchain", "ai", "commons"] + }, + { + "version": "1.2.0", + "date": "2023-12-28", + "latest": false, + "incubating": true, + "binary": ["server", "toolchain"], + "source": ["server", "toolchain", "computer", "commons"] + }, + { + "version": "1.0.0", + "date": "2023-02-22", + "latest": false, + "incubating": true, + "binary": ["server", "toolchain", "computer"], + "source": ["server", "toolchain", "computer", "commons"] + } + ] +} diff --git a/data/landing/community/cn.yaml b/data/landing/community/cn.yaml index 9bf9f66f4c..ec95ae75a2 100644 --- a/data/landing/community/cn.yaml +++ b/data/landing/community/cn.yaml @@ -34,6 +34,11 @@ sections: - [ๅฎ‰ๅ…จ็ญ–็•ฅ](/cn/docs/guides/security/) โ€” ไบ†่งฃ้กน็›ฎ็š„ๅฎ‰ๅ…จ้—ฎ้ข˜ๆŠฅๅ‘Šๆต็จ‹ใ€‚ - [่ดก็ŒฎๆŒ‡ๅ—](/cn/docs/contribution-guidelines/) โ€” ไบ†่งฃๅฆ‚ไฝ•่ดก็Œฎไปฃ็ ๅ’Œๆ–‡ๆกฃใ€‚ + - type: community-members + partial: landing/sections/community-members.html + data: + id: project-members + - type: markdown data: title: ไบ†่งฃ้กน็›ฎ่ฟไฝœๆ–นๅผ diff --git a/data/landing/community/en.yaml b/data/landing/community/en.yaml index 9f54604f72..d5b34325e2 100644 --- a/data/landing/community/en.yaml +++ b/data/landing/community/en.yaml @@ -34,6 +34,11 @@ sections: - [Security policy](/docs/guides/security/) โ€” follow the project's security reporting process. - [Contribution guidelines](/docs/contribution-guidelines/) โ€” learn how to contribute code and documentation. + - type: community-members + partial: landing/sections/community-members.html + data: + id: project-members + - type: cta data: title: Learn how the project works diff --git a/data/version_routes.json b/data/version_routes.json new file mode 100644 index 0000000000..bd7e4351ef --- /dev/null +++ b/data/version_routes.json @@ -0,0 +1,1513 @@ +{ + "schemaVersion": 1, + "versions": [ + "latest", + "1.7", + "1.5", + "1.3", + "1.0" + ], + "pages": { + "cn:": { + "latest": "cn/docs/", + "1.7": "cn/docs/", + "1.5": "cn/docs/", + "1.3": "cn/docs/", + "1.0": "cn/docs/" + }, + "cn:changelog": { + "latest": "cn/docs/changelog/", + "1.7": "cn/docs/changelog/", + "1.5": "cn/docs/changelog/", + "1.3": "cn/docs/changelog/", + "1.0": "cn/docs/changelog/" + }, + "cn:changelog/hugegraph-0.10.4-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.10.4-release-notes/" + }, + "cn:changelog/hugegraph-0.11.2-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.11.2-release-notes/" + }, + "cn:changelog/hugegraph-0.12.0-release-notes": { + "latest": "cn/docs/changelog/hugegraph-0.12.0-release-notes/", + "1.7": "cn/docs/changelog/hugegraph-0.12.0-release-notes/", + "1.5": "cn/docs/changelog/hugegraph-0.12.0-release-notes/", + "1.3": "cn/docs/changelog/hugegraph-0.12.0-release-notes/", + "1.0": "cn/docs/changelog/hugegraph-0.12.0-release-notes/" + }, + "cn:changelog/hugegraph-0.2-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.2-release-notes/" + }, + "cn:changelog/hugegraph-0.2.4-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.2.4-release-notes/" + }, + "cn:changelog/hugegraph-0.3.3-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.3.3-release-notes/" + }, + "cn:changelog/hugegraph-0.4.4-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.4.4-release-notes/" + }, + "cn:changelog/hugegraph-0.5.6-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.5.6-release-notes/" + }, + "cn:changelog/hugegraph-0.6.1-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.6.1-release-notes/" + }, + "cn:changelog/hugegraph-0.7.4-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.7.4-release-notes/" + }, + "cn:changelog/hugegraph-0.8.0-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.8.0-release-notes/" + }, + "cn:changelog/hugegraph-0.9.2-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/changelog/hugegraph-0.9.2-release-notes/" + }, + "cn:changelog/hugegraph-1.0.0-release-notes": { + "latest": "cn/docs/changelog/hugegraph-1.0.0-release-notes/", + "1.7": "cn/docs/changelog/hugegraph-1.0.0-release-notes/", + "1.5": "cn/docs/changelog/hugegraph-1.0.0-release-notes/", + "1.3": "cn/docs/changelog/hugegraph-1.0.0-release-notes/", + "1.0": "cn/docs/changelog/hugegraph-1.0.0-release-notes/" + }, + "cn:changelog/hugegraph-1.2.0-release-notes": { + "latest": "cn/docs/changelog/hugegraph-1.2.0-release-notes/", + "1.7": "cn/docs/changelog/hugegraph-1.2.0-release-notes/", + "1.5": "cn/docs/changelog/hugegraph-1.2.0-release-notes/", + "1.3": "cn/docs/changelog/hugegraph-1.2.0-release-notes/", + "1.0": null + }, + "cn:changelog/hugegraph-1.3.0-release-notes": { + "latest": "cn/docs/changelog/hugegraph-1.3.0-release-notes/", + "1.7": "cn/docs/changelog/hugegraph-1.3.0-release-notes/", + "1.5": "cn/docs/changelog/hugegraph-1.3.0-release-notes/", + "1.3": null, + "1.0": null + }, + "cn:changelog/hugegraph-1.5.0-release-notes": { + "latest": "cn/docs/changelog/hugegraph-1.5.0-release-notes/", + "1.7": "cn/docs/changelog/hugegraph-1.5.0-release-notes/", + "1.5": "cn/docs/changelog/hugegraph-1.5.0-release-notes/", + "1.3": null, + "1.0": null + }, + "cn:changelog/hugegraph-1.7.0-release-notes": { + "latest": "cn/docs/changelog/hugegraph-1.7.0-release-notes/", + "1.7": "cn/docs/changelog/hugegraph-1.7.0-release-notes/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:cla": { + "latest": "cn/docs/cla/", + "1.7": "cn/docs/cla/", + "1.5": "cn/docs/cla/", + "1.3": "cn/docs/cla/", + "1.0": "cn/docs/cla/" + }, + "cn:clients": { + "latest": "cn/docs/clients/", + "1.7": "cn/docs/clients/", + "1.5": "cn/docs/clients/", + "1.3": "cn/docs/clients/", + "1.0": "cn/docs/clients/" + }, + "cn:clients/gremlin-console": { + "latest": "cn/docs/clients/gremlin-console/", + "1.7": "cn/docs/clients/gremlin-console/", + "1.5": "cn/docs/clients/gremlin-console/", + "1.3": "cn/docs/clients/gremlin-console/", + "1.0": "cn/docs/clients/gremlin-console/" + }, + "cn:clients/hugegraph-client": { + "latest": "cn/docs/clients/hugegraph-client/", + "1.7": "cn/docs/clients/hugegraph-client/", + "1.5": "cn/docs/clients/hugegraph-client/", + "1.3": "cn/docs/clients/hugegraph-client/", + "1.0": "cn/docs/clients/hugegraph-client/" + }, + "cn:clients/restful-api": { + "latest": "cn/docs/clients/restful-api/", + "1.7": "cn/docs/clients/restful-api/", + "1.5": "cn/docs/clients/restful-api/", + "1.3": "cn/docs/clients/restful-api/", + "1.0": "cn/docs/clients/restful-api/" + }, + "cn:clients/restful-api/auth": { + "latest": "cn/docs/clients/restful-api/auth/", + "1.7": "cn/docs/clients/restful-api/auth/", + "1.5": "cn/docs/clients/restful-api/auth/", + "1.3": "cn/docs/clients/restful-api/auth/", + "1.0": "cn/docs/clients/restful-api/auth/" + }, + "cn:clients/restful-api/cypher": { + "latest": "cn/docs/clients/restful-api/cypher/", + "1.7": "cn/docs/clients/restful-api/cypher/", + "1.5": "cn/docs/clients/restful-api/cypher/", + "1.3": "cn/docs/clients/restful-api/cypher/", + "1.0": null + }, + "cn:clients/restful-api/edge": { + "latest": "cn/docs/clients/restful-api/edge/", + "1.7": "cn/docs/clients/restful-api/edge/", + "1.5": "cn/docs/clients/restful-api/edge/", + "1.3": "cn/docs/clients/restful-api/edge/", + "1.0": "cn/docs/clients/restful-api/edge/" + }, + "cn:clients/restful-api/edgelabel": { + "latest": "cn/docs/clients/restful-api/edgelabel/", + "1.7": "cn/docs/clients/restful-api/edgelabel/", + "1.5": "cn/docs/clients/restful-api/edgelabel/", + "1.3": "cn/docs/clients/restful-api/edgelabel/", + "1.0": "cn/docs/clients/restful-api/edgelabel/" + }, + "cn:clients/restful-api/graphs": { + "latest": "cn/docs/clients/restful-api/graphs/", + "1.7": "cn/docs/clients/restful-api/graphs/", + "1.5": "cn/docs/clients/restful-api/graphs/", + "1.3": "cn/docs/clients/restful-api/graphs/", + "1.0": "cn/docs/clients/restful-api/graphs/" + }, + "cn:clients/restful-api/graphspace": { + "latest": "cn/docs/clients/restful-api/graphspace/", + "1.7": "cn/docs/clients/restful-api/graphspace/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:clients/restful-api/gremlin": { + "latest": "cn/docs/clients/restful-api/gremlin/", + "1.7": "cn/docs/clients/restful-api/gremlin/", + "1.5": "cn/docs/clients/restful-api/gremlin/", + "1.3": "cn/docs/clients/restful-api/gremlin/", + "1.0": "cn/docs/clients/restful-api/gremlin/" + }, + "cn:clients/restful-api/indexlabel": { + "latest": "cn/docs/clients/restful-api/indexlabel/", + "1.7": "cn/docs/clients/restful-api/indexlabel/", + "1.5": "cn/docs/clients/restful-api/indexlabel/", + "1.3": "cn/docs/clients/restful-api/indexlabel/", + "1.0": "cn/docs/clients/restful-api/indexlabel/" + }, + "cn:clients/restful-api/metrics": { + "latest": "cn/docs/clients/restful-api/metrics/", + "1.7": "cn/docs/clients/restful-api/metrics/", + "1.5": "cn/docs/clients/restful-api/metrics/", + "1.3": "cn/docs/clients/restful-api/metrics/", + "1.0": null + }, + "cn:clients/restful-api/other": { + "latest": "cn/docs/clients/restful-api/other/", + "1.7": "cn/docs/clients/restful-api/other/", + "1.5": "cn/docs/clients/restful-api/other/", + "1.3": "cn/docs/clients/restful-api/other/", + "1.0": "cn/docs/clients/restful-api/other/" + }, + "cn:clients/restful-api/propertykey": { + "latest": "cn/docs/clients/restful-api/propertykey/", + "1.7": "cn/docs/clients/restful-api/propertykey/", + "1.5": "cn/docs/clients/restful-api/propertykey/", + "1.3": "cn/docs/clients/restful-api/propertykey/", + "1.0": "cn/docs/clients/restful-api/propertykey/" + }, + "cn:clients/restful-api/rank": { + "latest": "cn/docs/clients/restful-api/rank/", + "1.7": "cn/docs/clients/restful-api/rank/", + "1.5": "cn/docs/clients/restful-api/rank/", + "1.3": "cn/docs/clients/restful-api/rank/", + "1.0": "cn/docs/clients/restful-api/rank/" + }, + "cn:clients/restful-api/rebuild": { + "latest": "cn/docs/clients/restful-api/rebuild/", + "1.7": "cn/docs/clients/restful-api/rebuild/", + "1.5": "cn/docs/clients/restful-api/rebuild/", + "1.3": "cn/docs/clients/restful-api/rebuild/", + "1.0": "cn/docs/clients/restful-api/rebuild/" + }, + "cn:clients/restful-api/schema": { + "latest": "cn/docs/clients/restful-api/schema/", + "1.7": "cn/docs/clients/restful-api/schema/", + "1.5": "cn/docs/clients/restful-api/schema/", + "1.3": "cn/docs/clients/restful-api/schema/", + "1.0": "cn/docs/clients/restful-api/schema/" + }, + "cn:clients/restful-api/task": { + "latest": "cn/docs/clients/restful-api/task/", + "1.7": "cn/docs/clients/restful-api/task/", + "1.5": "cn/docs/clients/restful-api/task/", + "1.3": "cn/docs/clients/restful-api/task/", + "1.0": "cn/docs/clients/restful-api/task/" + }, + "cn:clients/restful-api/traverser": { + "latest": "cn/docs/clients/restful-api/traverser/", + "1.7": "cn/docs/clients/restful-api/traverser/", + "1.5": "cn/docs/clients/restful-api/traverser/", + "1.3": "cn/docs/clients/restful-api/traverser/", + "1.0": "cn/docs/clients/restful-api/traverser/" + }, + "cn:clients/restful-api/variable": { + "latest": "cn/docs/clients/restful-api/variable/", + "1.7": "cn/docs/clients/restful-api/variable/", + "1.5": "cn/docs/clients/restful-api/variable/", + "1.3": "cn/docs/clients/restful-api/variable/", + "1.0": "cn/docs/clients/restful-api/variable/" + }, + "cn:clients/restful-api/vertex": { + "latest": "cn/docs/clients/restful-api/vertex/", + "1.7": "cn/docs/clients/restful-api/vertex/", + "1.5": "cn/docs/clients/restful-api/vertex/", + "1.3": "cn/docs/clients/restful-api/vertex/", + "1.0": "cn/docs/clients/restful-api/vertex/" + }, + "cn:clients/restful-api/vertexlabel": { + "latest": "cn/docs/clients/restful-api/vertexlabel/", + "1.7": "cn/docs/clients/restful-api/vertexlabel/", + "1.5": "cn/docs/clients/restful-api/vertexlabel/", + "1.3": "cn/docs/clients/restful-api/vertexlabel/", + "1.0": "cn/docs/clients/restful-api/vertexlabel/" + }, + "cn:config": { + "latest": "cn/docs/config/", + "1.7": "cn/docs/config/", + "1.5": "cn/docs/config/", + "1.3": "cn/docs/config/", + "1.0": "cn/docs/config/" + }, + "cn:config/config-authentication": { + "latest": "cn/docs/config/config-authentication/", + "1.7": "cn/docs/config/config-authentication/", + "1.5": "cn/docs/config/config-authentication/", + "1.3": "cn/docs/config/config-authentication/", + "1.0": "cn/docs/config/config-authentication/" + }, + "cn:config/config-backend-hbase": { + "latest": "cn/docs/config/config-backend-hbase/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:config/config-backend-hstore": { + "latest": "cn/docs/config/config-backend-hstore/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:config/config-backend-rocksdb": { + "latest": "cn/docs/config/config-backend-rocksdb/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:config/config-computer": { + "latest": null, + "1.7": "cn/docs/config/config-computer/", + "1.5": "cn/docs/config/config-computer/", + "1.3": "cn/docs/config/config-computer/", + "1.0": "cn/docs/config/config-computer/" + }, + "cn:config/config-guide": { + "latest": "cn/docs/config/config-guide/", + "1.7": "cn/docs/config/config-guide/", + "1.5": "cn/docs/config/config-guide/", + "1.3": "cn/docs/config/config-guide/", + "1.0": "cn/docs/config/config-guide/" + }, + "cn:config/config-https": { + "latest": "cn/docs/config/config-https/", + "1.7": "cn/docs/config/config-https/", + "1.5": "cn/docs/config/config-https/", + "1.3": "cn/docs/config/config-https/", + "1.0": "cn/docs/config/config-https/" + }, + "cn:config/config-option": { + "latest": "cn/docs/config/config-option/", + "1.7": "cn/docs/config/config-option/", + "1.5": "cn/docs/config/config-option/", + "1.3": "cn/docs/config/config-option/", + "1.0": "cn/docs/config/config-option/" + }, + "cn:contribution-guidelines": { + "latest": "cn/docs/contribution-guidelines/", + "1.7": "cn/docs/contribution-guidelines/", + "1.5": "cn/docs/contribution-guidelines/", + "1.3": "cn/docs/contribution-guidelines/", + "1.0": null + }, + "cn:contribution-guidelines/committer-guidelines": { + "latest": "cn/docs/contribution-guidelines/committer-guidelines/", + "1.7": "cn/docs/contribution-guidelines/committer-guidelines/", + "1.5": "cn/docs/contribution-guidelines/committer-guidelines/", + "1.3": "cn/docs/contribution-guidelines/committer-guidelines/", + "1.0": null + }, + "cn:contribution-guidelines/contribute": { + "latest": "cn/docs/contribution-guidelines/contribute/", + "1.7": "cn/docs/contribution-guidelines/contribute/", + "1.5": "cn/docs/contribution-guidelines/contribute/", + "1.3": "cn/docs/contribution-guidelines/contribute/", + "1.0": null + }, + "cn:contribution-guidelines/hugegraph-server-idea-setup": { + "latest": "cn/docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.7": "cn/docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.5": "cn/docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.3": "cn/docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.0": null + }, + "cn:contribution-guidelines/subscribe": { + "latest": "cn/docs/contribution-guidelines/subscribe/", + "1.7": "cn/docs/contribution-guidelines/subscribe/", + "1.5": "cn/docs/contribution-guidelines/subscribe/", + "1.3": "cn/docs/contribution-guidelines/subscribe/", + "1.0": null + }, + "cn:contribution-guidelines/validate-release": { + "latest": "cn/docs/contribution-guidelines/validate-release/", + "1.7": "cn/docs/contribution-guidelines/validate-release/", + "1.5": "cn/docs/contribution-guidelines/validate-release/", + "1.3": "cn/docs/contribution-guidelines/validate-release/", + "1.0": null + }, + "cn:download/download": { + "latest": "cn/docs/download/download/", + "1.7": "cn/docs/download/download/", + "1.5": "cn/docs/download/download/", + "1.3": "cn/docs/download/download/", + "1.0": "cn/docs/download/download/" + }, + "cn:guides": { + "latest": "cn/docs/guides/", + "1.7": "cn/docs/guides/", + "1.5": "cn/docs/guides/", + "1.3": "cn/docs/guides/", + "1.0": "cn/docs/guides/" + }, + "cn:guides/architectural": { + "latest": "cn/docs/guides/architectural/", + "1.7": "cn/docs/guides/architectural/", + "1.5": "cn/docs/guides/architectural/", + "1.3": "cn/docs/guides/architectural/", + "1.0": "cn/docs/guides/architectural/" + }, + "cn:guides/backup-restore": { + "latest": "cn/docs/guides/backup-restore/", + "1.7": "cn/docs/guides/backup-restore/", + "1.5": "cn/docs/guides/backup-restore/", + "1.3": "cn/docs/guides/backup-restore/", + "1.0": "cn/docs/guides/backup-restore/" + }, + "cn:guides/custom-plugin": { + "latest": "cn/docs/guides/custom-plugin/", + "1.7": "cn/docs/guides/custom-plugin/", + "1.5": "cn/docs/guides/custom-plugin/", + "1.3": "cn/docs/guides/custom-plugin/", + "1.0": "cn/docs/guides/custom-plugin/" + }, + "cn:guides/desgin-concept": { + "latest": "cn/docs/guides/desgin-concept/", + "1.7": "cn/docs/guides/desgin-concept/", + "1.5": "cn/docs/guides/desgin-concept/", + "1.3": "cn/docs/guides/desgin-concept/", + "1.0": "cn/docs/guides/desgin-concept/" + }, + "cn:guides/faq": { + "latest": "cn/docs/guides/faq/", + "1.7": "cn/docs/guides/faq/", + "1.5": "cn/docs/guides/faq/", + "1.3": "cn/docs/guides/faq/", + "1.0": "cn/docs/guides/faq/" + }, + "cn:guides/hugegraph-docker-cluster": { + "latest": "cn/docs/guides/hugegraph-docker-cluster/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:guides/security": { + "latest": "cn/docs/guides/security/", + "1.7": "cn/docs/guides/security/", + "1.5": "cn/docs/guides/security/", + "1.3": "cn/docs/guides/security/", + "1.0": null + }, + "cn:guides/toolchain-local-test": { + "latest": "cn/docs/guides/toolchain-local-test/", + "1.7": "cn/docs/guides/toolchain-local-test/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:introduction": { + "latest": "cn/docs/introduction/", + "1.7": "cn/docs/introduction/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:introduction/readme": { + "latest": null, + "1.7": "cn/docs/introduction/readme/", + "1.5": "cn/docs/introduction/readme/", + "1.3": "cn/docs/introduction/readme/", + "1.0": "cn/docs/introduction/readme/" + }, + "cn:language": { + "latest": "cn/docs/language/", + "1.7": "cn/docs/language/", + "1.5": "cn/docs/language/", + "1.3": "cn/docs/language/", + "1.0": "cn/docs/language/" + }, + "cn:language/hugegraph-example": { + "latest": "cn/docs/language/hugegraph-example/", + "1.7": "cn/docs/language/hugegraph-example/", + "1.5": "cn/docs/language/hugegraph-example/", + "1.3": "cn/docs/language/hugegraph-example/", + "1.0": "cn/docs/language/hugegraph-example/" + }, + "cn:language/hugegraph-gremlin": { + "latest": "cn/docs/language/hugegraph-gremlin/", + "1.7": "cn/docs/language/hugegraph-gremlin/", + "1.5": "cn/docs/language/hugegraph-gremlin/", + "1.3": "cn/docs/language/hugegraph-gremlin/", + "1.0": "cn/docs/language/hugegraph-gremlin/" + }, + "cn:performance": { + "latest": "cn/docs/performance/", + "1.7": "cn/docs/performance/", + "1.5": "cn/docs/performance/", + "1.3": "cn/docs/performance/", + "1.0": "cn/docs/performance/" + }, + "cn:performance/api-performance": { + "latest": "cn/docs/performance/api-performance/", + "1.7": "cn/docs/performance/api-preformance/", + "1.5": "cn/docs/performance/api-preformance/", + "1.3": "cn/docs/performance/api-preformance/", + "1.0": "cn/docs/performance/api-preformance/" + }, + "cn:performance/api-performance/hugegraph-api-0.2": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/performance/api-preformance/hugegraph-api-0.2/" + }, + "cn:performance/api-performance/hugegraph-api-0.4.4": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "cn/docs/performance/api-preformance/hugegraph-api-0.4.4/" + }, + "cn:performance/api-performance/hugegraph-api-0.5.6-cassandra": { + "latest": "cn/docs/performance/api-performance/hugegraph-api-0.5.6-cassandra/", + "1.7": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/", + "1.5": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/", + "1.3": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/", + "1.0": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/" + }, + "cn:performance/api-performance/hugegraph-api-0.5.6-rocksdb": { + "latest": "cn/docs/performance/api-performance/hugegraph-api-0.5.6-rocksdb/", + "1.7": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/", + "1.5": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/", + "1.3": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/", + "1.0": "cn/docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/" + }, + "cn:performance/hugegraph-benchmark-0.4.4": { + "latest": "cn/docs/performance/hugegraph-benchmark-0.4.4/", + "1.7": "cn/docs/performance/hugegraph-benchmark-0.4.4/", + "1.5": "cn/docs/performance/hugegraph-benchmark-0.4.4/", + "1.3": "cn/docs/performance/hugegraph-benchmark-0.4.4/", + "1.0": "cn/docs/performance/hugegraph-benchmark-0.4.4/" + }, + "cn:performance/hugegraph-benchmark-0.5.6": { + "latest": "cn/docs/performance/hugegraph-benchmark-0.5.6/", + "1.7": "cn/docs/performance/hugegraph-benchmark-0.5.6/", + "1.5": "cn/docs/performance/hugegraph-benchmark-0.5.6/", + "1.3": "cn/docs/performance/hugegraph-benchmark-0.5.6/", + "1.0": "cn/docs/performance/hugegraph-benchmark-0.5.6/" + }, + "cn:performance/hugegraph-loader-performance": { + "latest": "cn/docs/performance/hugegraph-loader-performance/", + "1.7": "cn/docs/performance/hugegraph-loader-performance/", + "1.5": "cn/docs/performance/hugegraph-loader-performance/", + "1.3": "cn/docs/performance/hugegraph-loader-performance/", + "1.0": "cn/docs/performance/hugegraph-loader-performance/" + }, + "cn:quickstart": { + "latest": "cn/docs/quickstart/", + "1.7": "cn/docs/quickstart/", + "1.5": "cn/docs/quickstart/", + "1.3": "cn/docs/quickstart/", + "1.0": "cn/docs/quickstart/" + }, + "cn:quickstart/client": { + "latest": "cn/docs/quickstart/client/", + "1.7": "cn/docs/quickstart/client/", + "1.5": "cn/docs/quickstart/client/", + "1.3": "cn/docs/quickstart/client/", + "1.0": "cn/docs/quickstart/client/" + }, + "cn:quickstart/client/hugegraph-client": { + "latest": "cn/docs/quickstart/client/hugegraph-client/", + "1.7": "cn/docs/quickstart/client/hugegraph-client/", + "1.5": "cn/docs/quickstart/client/hugegraph-client/", + "1.3": "cn/docs/quickstart/client/hugegraph-client/", + "1.0": "cn/docs/quickstart/client/hugegraph-client/" + }, + "cn:quickstart/client/hugegraph-client-go": { + "latest": "cn/docs/quickstart/client/hugegraph-client-go/", + "1.7": "cn/docs/quickstart/client/hugegraph-client-go/", + "1.5": "cn/docs/quickstart/client/hugegraph-client-go/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/client/hugegraph-client-python": { + "latest": "cn/docs/quickstart/client/hugegraph-client-python/", + "1.7": "cn/docs/quickstart/client/hugegraph-client-python/", + "1.5": "cn/docs/quickstart/client/hugegraph-client-python/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/computing": { + "latest": "cn/docs/quickstart/computing/", + "1.7": "cn/docs/quickstart/computing/", + "1.5": "cn/docs/quickstart/computing/", + "1.3": "cn/docs/quickstart/computing/", + "1.0": "cn/docs/quickstart/computing/" + }, + "cn:quickstart/computing/hugegraph-computer": { + "latest": "cn/docs/quickstart/computing/hugegraph-computer/", + "1.7": "cn/docs/quickstart/computing/hugegraph-computer/", + "1.5": "cn/docs/quickstart/computing/hugegraph-computer/", + "1.3": "cn/docs/quickstart/computing/hugegraph-computer/", + "1.0": "cn/docs/quickstart/computing/hugegraph-computer/" + }, + "cn:quickstart/computing/hugegraph-computer-config": { + "latest": "cn/docs/quickstart/computing/hugegraph-computer-config/", + "1.7": "cn/docs/quickstart/computing/hugegraph-computer-config/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/computing/hugegraph-vermeer": { + "latest": "cn/docs/quickstart/computing/hugegraph-vermeer/", + "1.7": "cn/docs/quickstart/computing/hugegraph-vermeer/", + "1.5": "cn/docs/quickstart/computing/hugegraph-vermeer/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph": { + "latest": "cn/docs/quickstart/hugegraph/", + "1.7": "cn/docs/quickstart/hugegraph/", + "1.5": "cn/docs/quickstart/hugegraph/", + "1.3": "cn/docs/quickstart/hugegraph/", + "1.0": "cn/docs/quickstart/hugegraph/" + }, + "cn:quickstart/hugegraph-ai": { + "latest": "cn/docs/quickstart/hugegraph-ai/", + "1.7": "cn/docs/quickstart/hugegraph-ai/", + "1.5": "cn/docs/quickstart/hugegraph-ai/", + "1.3": "cn/docs/quickstart/hugegraph-ai/", + "1.0": null + }, + "cn:quickstart/hugegraph-ai/config-reference": { + "latest": "cn/docs/quickstart/hugegraph-ai/config-reference/", + "1.7": "cn/docs/quickstart/hugegraph-ai/config-reference/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph-ai/hugegraph-llm": { + "latest": "cn/docs/quickstart/hugegraph-ai/hugegraph-llm/", + "1.7": "cn/docs/quickstart/hugegraph-ai/hugegraph-llm/", + "1.5": "cn/docs/quickstart/hugegraph-ai/hugegraph-llm/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph-ai/hugegraph-ml": { + "latest": "cn/docs/quickstart/hugegraph-ai/hugegraph-ml/", + "1.7": "cn/docs/quickstart/hugegraph-ai/hugegraph-ml/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph-ai/quick_start": { + "latest": "cn/docs/quickstart/hugegraph-ai/quick_start/", + "1.7": "cn/docs/quickstart/hugegraph-ai/quick_start/", + "1.5": "cn/docs/quickstart/hugegraph-ai/quick_start/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph-ai/rest-api": { + "latest": "cn/docs/quickstart/hugegraph-ai/rest-api/", + "1.7": "cn/docs/quickstart/hugegraph-ai/rest-api/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph-ai/vermeer-python-client": { + "latest": "cn/docs/quickstart/hugegraph-ai/vermeer-python-client/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph/hugegraph-hstore": { + "latest": "cn/docs/quickstart/hugegraph/hugegraph-hstore/", + "1.7": "cn/docs/quickstart/hugegraph/hugegraph-hstore/", + "1.5": "cn/docs/quickstart/hugegraph/hugegraph-hstore/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph/hugegraph-pd": { + "latest": "cn/docs/quickstart/hugegraph/hugegraph-pd/", + "1.7": "cn/docs/quickstart/hugegraph/hugegraph-pd/", + "1.5": "cn/docs/quickstart/hugegraph/hugegraph-pd/", + "1.3": null, + "1.0": null + }, + "cn:quickstart/hugegraph/hugegraph-server": { + "latest": "cn/docs/quickstart/hugegraph/hugegraph-server/", + "1.7": "cn/docs/quickstart/hugegraph/hugegraph-server/", + "1.5": "cn/docs/quickstart/hugegraph/hugegraph-server/", + "1.3": "cn/docs/quickstart/hugegraph/hugegraph-server/", + "1.0": "cn/docs/quickstart/hugegraph/hugegraph-server/" + }, + "cn:quickstart/toolchain": { + "latest": "cn/docs/quickstart/toolchain/", + "1.7": "cn/docs/quickstart/toolchain/", + "1.5": "cn/docs/quickstart/toolchain/", + "1.3": "cn/docs/quickstart/toolchain/", + "1.0": "cn/docs/quickstart/toolchain/" + }, + "cn:quickstart/toolchain/export-migration": { + "latest": "cn/docs/quickstart/toolchain/export-migration/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/toolchain/export-migration/hugegraph-seatunnel-source": { + "latest": "cn/docs/quickstart/toolchain/export-migration/hugegraph-seatunnel-source/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/toolchain/hugegraph-hubble": { + "latest": "cn/docs/quickstart/toolchain/hugegraph-hubble/", + "1.7": "cn/docs/quickstart/toolchain/hugegraph-hubble/", + "1.5": "cn/docs/quickstart/toolchain/hugegraph-hubble/", + "1.3": "cn/docs/quickstart/toolchain/hugegraph-hubble/", + "1.0": "cn/docs/quickstart/toolchain/hugegraph-hubble/" + }, + "cn:quickstart/toolchain/hugegraph-loader": { + "latest": "cn/docs/quickstart/toolchain/hugegraph-loader/", + "1.7": "cn/docs/quickstart/toolchain/hugegraph-loader/", + "1.5": "cn/docs/quickstart/toolchain/hugegraph-loader/", + "1.3": "cn/docs/quickstart/toolchain/hugegraph-loader/", + "1.0": "cn/docs/quickstart/toolchain/hugegraph-loader/" + }, + "cn:quickstart/toolchain/hugegraph-spark-connector": { + "latest": "cn/docs/quickstart/toolchain/hugegraph-spark-connector/", + "1.7": "cn/docs/quickstart/toolchain/hugegraph-spark-connector/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/toolchain/hugegraph-tools": { + "latest": "cn/docs/quickstart/toolchain/hugegraph-tools/", + "1.7": "cn/docs/quickstart/toolchain/hugegraph-tools/", + "1.5": "cn/docs/quickstart/toolchain/hugegraph-tools/", + "1.3": "cn/docs/quickstart/toolchain/hugegraph-tools/", + "1.0": "cn/docs/quickstart/toolchain/hugegraph-tools/" + }, + "cn:quickstart/toolchain/import": { + "latest": "cn/docs/quickstart/toolchain/import/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/toolchain/import/hugegraph-seatunnel-connector": { + "latest": "cn/docs/quickstart/toolchain/import/hugegraph-seatunnel-connector/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "cn:quickstart/toolchain/visualization": { + "latest": "cn/docs/quickstart/toolchain/visualization/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:": { + "latest": "docs/", + "1.7": "docs/", + "1.5": "docs/", + "1.3": "docs/", + "1.0": "docs/" + }, + "en:changelog": { + "latest": "docs/changelog/", + "1.7": "docs/changelog/", + "1.5": "docs/changelog/", + "1.3": "docs/changelog/", + "1.0": "docs/changelog/" + }, + "en:changelog/hugegraph-0.12.0-release-notes": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "docs/changelog/hugegraph-0.12.0-release-notes/" + }, + "en:changelog/hugegraph-1.0.0-release-notes": { + "latest": "docs/changelog/hugegraph-1.0.0-release-notes/", + "1.7": "docs/changelog/hugegraph-1.0.0-release-notes/", + "1.5": "docs/changelog/hugegraph-1.0.0-release-notes/", + "1.3": "docs/changelog/hugegraph-1.0.0-release-notes/", + "1.0": "docs/changelog/hugegraph-1.0.0-release-notes/" + }, + "en:changelog/hugegraph-1.2.0-release-notes": { + "latest": "docs/changelog/hugegraph-1.2.0-release-notes/", + "1.7": "docs/changelog/hugegraph-1.2.0-release-notes/", + "1.5": "docs/changelog/hugegraph-1.2.0-release-notes/", + "1.3": "docs/changelog/hugegraph-1.2.0-release-notes/", + "1.0": null + }, + "en:changelog/hugegraph-1.3.0-release-notes": { + "latest": "docs/changelog/hugegraph-1.3.0-release-notes/", + "1.7": "docs/changelog/hugegraph-1.3.0-release-notes/", + "1.5": "docs/changelog/hugegraph-1.3.0-release-notes/", + "1.3": null, + "1.0": null + }, + "en:changelog/hugegraph-1.5.0-release-notes": { + "latest": "docs/changelog/hugegraph-1.5.0-release-notes/", + "1.7": "docs/changelog/hugegraph-1.5.0-release-notes/", + "1.5": "docs/changelog/hugegraph-1.5.0-release-notes/", + "1.3": null, + "1.0": null + }, + "en:changelog/hugegraph-1.7.0-release-notes": { + "latest": "docs/changelog/hugegraph-1.7.0-release-notes/", + "1.7": "docs/changelog/hugegraph-1.7.0-release-notes/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:cla": { + "latest": "docs/cla/", + "1.7": "docs/cla/", + "1.5": "docs/cla/", + "1.3": "docs/cla/", + "1.0": "docs/cla/" + }, + "en:clients": { + "latest": "docs/clients/", + "1.7": "docs/clients/", + "1.5": "docs/clients/", + "1.3": "docs/clients/", + "1.0": "docs/clients/" + }, + "en:clients/gremlin-console": { + "latest": "docs/clients/gremlin-console/", + "1.7": "docs/clients/gremlin-console/", + "1.5": "docs/clients/gremlin-console/", + "1.3": "docs/clients/gremlin-console/", + "1.0": "docs/clients/gremlin-console/" + }, + "en:clients/hugegraph-client": { + "latest": "docs/clients/hugegraph-client/", + "1.7": "docs/clients/hugegraph-client/", + "1.5": "docs/clients/hugegraph-client/", + "1.3": "docs/clients/hugegraph-client/", + "1.0": "docs/clients/hugegraph-client/" + }, + "en:clients/restful-api": { + "latest": "docs/clients/restful-api/", + "1.7": "docs/clients/restful-api/", + "1.5": "docs/clients/restful-api/", + "1.3": "docs/clients/restful-api/", + "1.0": "docs/clients/restful-api/" + }, + "en:clients/restful-api/auth": { + "latest": "docs/clients/restful-api/auth/", + "1.7": "docs/clients/restful-api/auth/", + "1.5": "docs/clients/restful-api/auth/", + "1.3": "docs/clients/restful-api/auth/", + "1.0": "docs/clients/restful-api/auth/" + }, + "en:clients/restful-api/cypher": { + "latest": "docs/clients/restful-api/cypher/", + "1.7": "docs/clients/restful-api/cypher/", + "1.5": "docs/clients/restful-api/cypher/", + "1.3": "docs/clients/restful-api/cypher/", + "1.0": null + }, + "en:clients/restful-api/edge": { + "latest": "docs/clients/restful-api/edge/", + "1.7": "docs/clients/restful-api/edge/", + "1.5": "docs/clients/restful-api/edge/", + "1.3": "docs/clients/restful-api/edge/", + "1.0": "docs/clients/restful-api/edge/" + }, + "en:clients/restful-api/edgelabel": { + "latest": "docs/clients/restful-api/edgelabel/", + "1.7": "docs/clients/restful-api/edgelabel/", + "1.5": "docs/clients/restful-api/edgelabel/", + "1.3": "docs/clients/restful-api/edgelabel/", + "1.0": "docs/clients/restful-api/edgelabel/" + }, + "en:clients/restful-api/graphs": { + "latest": "docs/clients/restful-api/graphs/", + "1.7": "docs/clients/restful-api/graphs/", + "1.5": "docs/clients/restful-api/graphs/", + "1.3": "docs/clients/restful-api/graphs/", + "1.0": "docs/clients/restful-api/graphs/" + }, + "en:clients/restful-api/graphspace": { + "latest": "docs/clients/restful-api/graphspace/", + "1.7": "docs/clients/restful-api/graphspace/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:clients/restful-api/gremlin": { + "latest": "docs/clients/restful-api/gremlin/", + "1.7": "docs/clients/restful-api/gremlin/", + "1.5": "docs/clients/restful-api/gremlin/", + "1.3": "docs/clients/restful-api/gremlin/", + "1.0": "docs/clients/restful-api/gremlin/" + }, + "en:clients/restful-api/indexlabel": { + "latest": "docs/clients/restful-api/indexlabel/", + "1.7": "docs/clients/restful-api/indexlabel/", + "1.5": "docs/clients/restful-api/indexlabel/", + "1.3": "docs/clients/restful-api/indexlabel/", + "1.0": "docs/clients/restful-api/indexlabel/" + }, + "en:clients/restful-api/metrics": { + "latest": "docs/clients/restful-api/metrics/", + "1.7": "docs/clients/restful-api/metrics/", + "1.5": "docs/clients/restful-api/metrics/", + "1.3": "docs/clients/restful-api/metrics/", + "1.0": null + }, + "en:clients/restful-api/other": { + "latest": "docs/clients/restful-api/other/", + "1.7": "docs/clients/restful-api/other/", + "1.5": "docs/clients/restful-api/other/", + "1.3": "docs/clients/restful-api/other/", + "1.0": "docs/clients/restful-api/other/" + }, + "en:clients/restful-api/propertykey": { + "latest": "docs/clients/restful-api/propertykey/", + "1.7": "docs/clients/restful-api/propertykey/", + "1.5": "docs/clients/restful-api/propertykey/", + "1.3": "docs/clients/restful-api/propertykey/", + "1.0": "docs/clients/restful-api/propertykey/" + }, + "en:clients/restful-api/rank": { + "latest": "docs/clients/restful-api/rank/", + "1.7": "docs/clients/restful-api/rank/", + "1.5": "docs/clients/restful-api/rank/", + "1.3": "docs/clients/restful-api/rank/", + "1.0": "docs/clients/restful-api/rank/" + }, + "en:clients/restful-api/rebuild": { + "latest": "docs/clients/restful-api/rebuild/", + "1.7": "docs/clients/restful-api/rebuild/", + "1.5": "docs/clients/restful-api/rebuild/", + "1.3": "docs/clients/restful-api/rebuild/", + "1.0": "docs/clients/restful-api/rebuild/" + }, + "en:clients/restful-api/schema": { + "latest": "docs/clients/restful-api/schema/", + "1.7": "docs/clients/restful-api/schema/", + "1.5": "docs/clients/restful-api/schema/", + "1.3": "docs/clients/restful-api/schema/", + "1.0": "docs/clients/restful-api/schema/" + }, + "en:clients/restful-api/task": { + "latest": "docs/clients/restful-api/task/", + "1.7": "docs/clients/restful-api/task/", + "1.5": "docs/clients/restful-api/task/", + "1.3": "docs/clients/restful-api/task/", + "1.0": "docs/clients/restful-api/task/" + }, + "en:clients/restful-api/traverser": { + "latest": "docs/clients/restful-api/traverser/", + "1.7": "docs/clients/restful-api/traverser/", + "1.5": "docs/clients/restful-api/traverser/", + "1.3": "docs/clients/restful-api/traverser/", + "1.0": "docs/clients/restful-api/traverser/" + }, + "en:clients/restful-api/variable": { + "latest": "docs/clients/restful-api/variable/", + "1.7": "docs/clients/restful-api/variable/", + "1.5": "docs/clients/restful-api/variable/", + "1.3": "docs/clients/restful-api/variable/", + "1.0": "docs/clients/restful-api/variable/" + }, + "en:clients/restful-api/vertex": { + "latest": "docs/clients/restful-api/vertex/", + "1.7": "docs/clients/restful-api/vertex/", + "1.5": "docs/clients/restful-api/vertex/", + "1.3": "docs/clients/restful-api/vertex/", + "1.0": "docs/clients/restful-api/vertex/" + }, + "en:clients/restful-api/vertexlabel": { + "latest": "docs/clients/restful-api/vertexlabel/", + "1.7": "docs/clients/restful-api/vertexlabel/", + "1.5": "docs/clients/restful-api/vertexlabel/", + "1.3": "docs/clients/restful-api/vertexlabel/", + "1.0": "docs/clients/restful-api/vertexlabel/" + }, + "en:config": { + "latest": "docs/config/", + "1.7": "docs/config/", + "1.5": "docs/config/", + "1.3": "docs/config/", + "1.0": "docs/config/" + }, + "en:config/config-authentication": { + "latest": "docs/config/config-authentication/", + "1.7": "docs/config/config-authentication/", + "1.5": "docs/config/config-authentication/", + "1.3": "docs/config/config-authentication/", + "1.0": "docs/config/config-authentication/" + }, + "en:config/config-backend-hbase": { + "latest": "docs/config/config-backend-hbase/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:config/config-backend-hstore": { + "latest": "docs/config/config-backend-hstore/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:config/config-backend-rocksdb": { + "latest": "docs/config/config-backend-rocksdb/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:config/config-computer": { + "latest": null, + "1.7": "docs/config/config-computer/", + "1.5": "docs/config/config-computer/", + "1.3": "docs/config/config-computer/", + "1.0": "docs/config/config-computer/" + }, + "en:config/config-guide": { + "latest": "docs/config/config-guide/", + "1.7": "docs/config/config-guide/", + "1.5": "docs/config/config-guide/", + "1.3": "docs/config/config-guide/", + "1.0": "docs/config/config-guide/" + }, + "en:config/config-https": { + "latest": "docs/config/config-https/", + "1.7": "docs/config/config-https/", + "1.5": "docs/config/config-https/", + "1.3": "docs/config/config-https/", + "1.0": "docs/config/config-https/" + }, + "en:config/config-option": { + "latest": "docs/config/config-option/", + "1.7": "docs/config/config-option/", + "1.5": "docs/config/config-option/", + "1.3": "docs/config/config-option/", + "1.0": "docs/config/config-option/" + }, + "en:contribution-guidelines": { + "latest": "docs/contribution-guidelines/", + "1.7": "docs/contribution-guidelines/", + "1.5": "docs/contribution-guidelines/", + "1.3": "docs/contribution-guidelines/", + "1.0": "docs/contribution-guidelines/" + }, + "en:contribution-guidelines/committer-guidelines": { + "latest": "docs/contribution-guidelines/committer-guidelines/", + "1.7": "docs/contribution-guidelines/committer-guidelines/", + "1.5": "docs/contribution-guidelines/committer-guidelines/", + "1.3": "docs/contribution-guidelines/committer-guidelines/", + "1.0": null + }, + "en:contribution-guidelines/contribute": { + "latest": "docs/contribution-guidelines/contribute/", + "1.7": "docs/contribution-guidelines/contribute/", + "1.5": "docs/contribution-guidelines/contribute/", + "1.3": "docs/contribution-guidelines/contribute/", + "1.0": "docs/contribution-guidelines/contribute/" + }, + "en:contribution-guidelines/hugegraph-server-idea-setup": { + "latest": "docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.7": "docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.5": "docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.3": "docs/contribution-guidelines/hugegraph-server-idea-setup/", + "1.0": null + }, + "en:contribution-guidelines/subscribe": { + "latest": "docs/contribution-guidelines/subscribe/", + "1.7": "docs/contribution-guidelines/subscribe/", + "1.5": "docs/contribution-guidelines/subscribe/", + "1.3": "docs/contribution-guidelines/subscribe/", + "1.0": "docs/contribution-guidelines/subscribe/" + }, + "en:contribution-guidelines/validate-release": { + "latest": "docs/contribution-guidelines/validate-release/", + "1.7": "docs/contribution-guidelines/validate-release/", + "1.5": "docs/contribution-guidelines/validate-release/", + "1.3": "docs/contribution-guidelines/validate-release/", + "1.0": "docs/contribution-guidelines/validate-release/" + }, + "en:download/download": { + "latest": "docs/download/download/", + "1.7": "docs/download/download/", + "1.5": "docs/download/download/", + "1.3": "docs/download/download/", + "1.0": "docs/download/download/" + }, + "en:guides": { + "latest": "docs/guides/", + "1.7": "docs/guides/", + "1.5": "docs/guides/", + "1.3": "docs/guides/", + "1.0": "docs/guides/" + }, + "en:guides/architectural": { + "latest": "docs/guides/architectural/", + "1.7": "docs/guides/architectural/", + "1.5": "docs/guides/architectural/", + "1.3": "docs/guides/architectural/", + "1.0": "docs/guides/architectural/" + }, + "en:guides/backup-restore": { + "latest": "docs/guides/backup-restore/", + "1.7": "docs/guides/backup-restore/", + "1.5": "docs/guides/backup-restore/", + "1.3": "docs/guides/backup-restore/", + "1.0": "docs/guides/backup-restore/" + }, + "en:guides/custom-plugin": { + "latest": "docs/guides/custom-plugin/", + "1.7": "docs/guides/custom-plugin/", + "1.5": "docs/guides/custom-plugin/", + "1.3": "docs/guides/custom-plugin/", + "1.0": "docs/guides/custom-plugin/" + }, + "en:guides/desgin-concept": { + "latest": "docs/guides/desgin-concept/", + "1.7": "docs/guides/desgin-concept/", + "1.5": "docs/guides/desgin-concept/", + "1.3": "docs/guides/desgin-concept/", + "1.0": "docs/guides/desgin-concept/" + }, + "en:guides/faq": { + "latest": "docs/guides/faq/", + "1.7": "docs/guides/faq/", + "1.5": "docs/guides/faq/", + "1.3": "docs/guides/faq/", + "1.0": "docs/guides/faq/" + }, + "en:guides/hugegraph-docker-cluster": { + "latest": "docs/guides/hugegraph-docker-cluster/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:guides/security": { + "latest": "docs/guides/security/", + "1.7": "docs/guides/security/", + "1.5": "docs/guides/security/", + "1.3": "docs/guides/security/", + "1.0": null + }, + "en:guides/toolchain-local-test": { + "latest": "docs/guides/toolchain-local-test/", + "1.7": "docs/guides/toolchain-local-test/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:introduction": { + "latest": "docs/introduction/", + "1.7": "docs/introduction/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:introduction/readme": { + "latest": null, + "1.7": "docs/introduction/readme/", + "1.5": "docs/introduction/readme/", + "1.3": "docs/introduction/readme/", + "1.0": "docs/introduction/readme/" + }, + "en:language": { + "latest": "docs/language/", + "1.7": "docs/language/", + "1.5": "docs/language/", + "1.3": "docs/language/", + "1.0": "docs/language/" + }, + "en:language/hugegraph-example": { + "latest": "docs/language/hugegraph-example/", + "1.7": "docs/language/hugegraph-example/", + "1.5": "docs/language/hugegraph-example/", + "1.3": "docs/language/hugegraph-example/", + "1.0": "docs/language/hugegraph-example/" + }, + "en:language/hugegraph-gremlin": { + "latest": "docs/language/hugegraph-gremlin/", + "1.7": "docs/language/hugegraph-gremlin/", + "1.5": "docs/language/hugegraph-gremlin/", + "1.3": "docs/language/hugegraph-gremlin/", + "1.0": "docs/language/hugegraph-gremlin/" + }, + "en:performance": { + "latest": "docs/performance/", + "1.7": "docs/performance/", + "1.5": "docs/performance/", + "1.3": "docs/performance/", + "1.0": "docs/performance/" + }, + "en:performance/api-performance": { + "latest": "docs/performance/api-performance/", + "1.7": "docs/performance/api-preformance/", + "1.5": "docs/performance/api-preformance/", + "1.3": "docs/performance/api-preformance/", + "1.0": "docs/performance/api-preformance/" + }, + "en:performance/api-performance/hugegraph-api-0.2": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "docs/performance/api-preformance/hugegraph-api-0.2/" + }, + "en:performance/api-performance/hugegraph-api-0.4.4": { + "latest": null, + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": "docs/performance/api-preformance/hugegraph-api-0.4.4/" + }, + "en:performance/api-performance/hugegraph-api-0.5.6-cassandra": { + "latest": "docs/performance/api-performance/hugegraph-api-0.5.6-cassandra/", + "1.7": "docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/", + "1.5": "docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/", + "1.3": "docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/", + "1.0": "docs/performance/api-preformance/hugegraph-api-0.5.6-cassandra/" + }, + "en:performance/api-performance/hugegraph-api-0.5.6-rocksdb": { + "latest": "docs/performance/api-performance/hugegraph-api-0.5.6-rocksdb/", + "1.7": "docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/", + "1.5": "docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/", + "1.3": "docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/", + "1.0": "docs/performance/api-preformance/hugegraph-api-0.5.6-rocksdb/" + }, + "en:performance/hugegraph-benchmark-0.4.4": { + "latest": "docs/performance/hugegraph-benchmark-0.4.4/", + "1.7": "docs/performance/hugegraph-benchmark-0.4.4/", + "1.5": "docs/performance/hugegraph-benchmark-0.4.4/", + "1.3": "docs/performance/hugegraph-benchmark-0.4.4/", + "1.0": "docs/performance/hugegraph-benchmark-0.4.4/" + }, + "en:performance/hugegraph-benchmark-0.5.6": { + "latest": "docs/performance/hugegraph-benchmark-0.5.6/", + "1.7": "docs/performance/hugegraph-benchmark-0.5.6/", + "1.5": "docs/performance/hugegraph-benchmark-0.5.6/", + "1.3": "docs/performance/hugegraph-benchmark-0.5.6/", + "1.0": "docs/performance/hugegraph-benchmark-0.5.6/" + }, + "en:performance/hugegraph-loader-performance": { + "latest": "docs/performance/hugegraph-loader-performance/", + "1.7": "docs/performance/hugegraph-loader-performance/", + "1.5": "docs/performance/hugegraph-loader-performance/", + "1.3": "docs/performance/hugegraph-loader-performance/", + "1.0": "docs/performance/hugegraph-loader-performance/" + }, + "en:quickstart": { + "latest": "docs/quickstart/", + "1.7": "docs/quickstart/", + "1.5": "docs/quickstart/", + "1.3": "docs/quickstart/", + "1.0": "docs/quickstart/" + }, + "en:quickstart/client": { + "latest": "docs/quickstart/client/", + "1.7": "docs/quickstart/client/", + "1.5": "docs/quickstart/client/", + "1.3": "docs/quickstart/client/", + "1.0": "docs/quickstart/client/" + }, + "en:quickstart/client/hugegraph-client": { + "latest": "docs/quickstart/client/hugegraph-client/", + "1.7": "docs/quickstart/client/hugegraph-client/", + "1.5": "docs/quickstart/client/hugegraph-client/", + "1.3": "docs/quickstart/client/hugegraph-client/", + "1.0": "docs/quickstart/client/hugegraph-client/" + }, + "en:quickstart/client/hugegraph-client-go": { + "latest": "docs/quickstart/client/hugegraph-client-go/", + "1.7": "docs/quickstart/client/hugegraph-client-go/", + "1.5": "docs/quickstart/client/hugegraph-client-go/", + "1.3": null, + "1.0": null + }, + "en:quickstart/client/hugegraph-client-python": { + "latest": "docs/quickstart/client/hugegraph-client-python/", + "1.7": "docs/quickstart/client/hugegraph-client-python/", + "1.5": "docs/quickstart/client/hugegraph-client-python/", + "1.3": null, + "1.0": null + }, + "en:quickstart/computing": { + "latest": "docs/quickstart/computing/", + "1.7": "docs/quickstart/computing/", + "1.5": "docs/quickstart/computing/", + "1.3": "docs/quickstart/computing/", + "1.0": "docs/quickstart/computing/" + }, + "en:quickstart/computing/hugegraph-computer": { + "latest": "docs/quickstart/computing/hugegraph-computer/", + "1.7": "docs/quickstart/computing/hugegraph-computer/", + "1.5": "docs/quickstart/computing/hugegraph-computer/", + "1.3": "docs/quickstart/computing/hugegraph-computer/", + "1.0": "docs/quickstart/computing/hugegraph-computer/" + }, + "en:quickstart/computing/hugegraph-computer-config": { + "latest": "docs/quickstart/computing/hugegraph-computer-config/", + "1.7": "docs/quickstart/computing/hugegraph-computer-config/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/computing/hugegraph-vermeer": { + "latest": "docs/quickstart/computing/hugegraph-vermeer/", + "1.7": "docs/quickstart/computing/hugegraph-vermeer/", + "1.5": "docs/quickstart/computing/hugegraph-vermeer/", + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph": { + "latest": "docs/quickstart/hugegraph/", + "1.7": "docs/quickstart/hugegraph/", + "1.5": "docs/quickstart/hugegraph/", + "1.3": "docs/quickstart/hugegraph/", + "1.0": "docs/quickstart/hugegraph/" + }, + "en:quickstart/hugegraph-ai": { + "latest": "docs/quickstart/hugegraph-ai/", + "1.7": "docs/quickstart/hugegraph-ai/", + "1.5": "docs/quickstart/hugegraph-ai/", + "1.3": "docs/quickstart/hugegraph-ai/", + "1.0": null + }, + "en:quickstart/hugegraph-ai/config-reference": { + "latest": "docs/quickstart/hugegraph-ai/config-reference/", + "1.7": "docs/quickstart/hugegraph-ai/config-reference/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph-ai/hugegraph-llm": { + "latest": "docs/quickstart/hugegraph-ai/hugegraph-llm/", + "1.7": "docs/quickstart/hugegraph-ai/hugegraph-llm/", + "1.5": "docs/quickstart/hugegraph-ai/hugegraph-llm/", + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph-ai/hugegraph-ml": { + "latest": "docs/quickstart/hugegraph-ai/hugegraph-ml/", + "1.7": "docs/quickstart/hugegraph-ai/hugegraph-ml/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph-ai/quick_start": { + "latest": "docs/quickstart/hugegraph-ai/quick_start/", + "1.7": "docs/quickstart/hugegraph-ai/quick_start/", + "1.5": "docs/quickstart/hugegraph-ai/quick_start/", + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph-ai/rest-api": { + "latest": "docs/quickstart/hugegraph-ai/rest-api/", + "1.7": "docs/quickstart/hugegraph-ai/rest-api/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph-ai/vermeer-python-client": { + "latest": "docs/quickstart/hugegraph-ai/vermeer-python-client/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph/hugegraph-hstore": { + "latest": "docs/quickstart/hugegraph/hugegraph-hstore/", + "1.7": "docs/quickstart/hugegraph/hugegraph-hstore/", + "1.5": "docs/quickstart/hugegraph/hugegraph-hstore/", + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph/hugegraph-pd": { + "latest": "docs/quickstart/hugegraph/hugegraph-pd/", + "1.7": "docs/quickstart/hugegraph/hugegraph-pd/", + "1.5": "docs/quickstart/hugegraph/hugegraph-pd/", + "1.3": null, + "1.0": null + }, + "en:quickstart/hugegraph/hugegraph-server": { + "latest": "docs/quickstart/hugegraph/hugegraph-server/", + "1.7": "docs/quickstart/hugegraph/hugegraph-server/", + "1.5": "docs/quickstart/hugegraph/hugegraph-server/", + "1.3": "docs/quickstart/hugegraph/hugegraph-server/", + "1.0": "docs/quickstart/hugegraph/hugegraph-server/" + }, + "en:quickstart/toolchain": { + "latest": "docs/quickstart/toolchain/", + "1.7": "docs/quickstart/toolchain/", + "1.5": "docs/quickstart/toolchain/", + "1.3": "docs/quickstart/toolchain/", + "1.0": "docs/quickstart/toolchain/" + }, + "en:quickstart/toolchain/export-migration": { + "latest": "docs/quickstart/toolchain/export-migration/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/toolchain/export-migration/hugegraph-seatunnel-source": { + "latest": "docs/quickstart/toolchain/export-migration/hugegraph-seatunnel-source/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/toolchain/hugegraph-hubble": { + "latest": "docs/quickstart/toolchain/hugegraph-hubble/", + "1.7": "docs/quickstart/toolchain/hugegraph-hubble/", + "1.5": "docs/quickstart/toolchain/hugegraph-hubble/", + "1.3": "docs/quickstart/toolchain/hugegraph-hubble/", + "1.0": "docs/quickstart/toolchain/hugegraph-hubble/" + }, + "en:quickstart/toolchain/hugegraph-loader": { + "latest": "docs/quickstart/toolchain/hugegraph-loader/", + "1.7": "docs/quickstart/toolchain/hugegraph-loader/", + "1.5": "docs/quickstart/toolchain/hugegraph-loader/", + "1.3": "docs/quickstart/toolchain/hugegraph-loader/", + "1.0": "docs/quickstart/toolchain/hugegraph-loader/" + }, + "en:quickstart/toolchain/hugegraph-spark-connector": { + "latest": "docs/quickstart/toolchain/hugegraph-spark-connector/", + "1.7": "docs/quickstart/toolchain/hugegraph-spark-connector/", + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/toolchain/hugegraph-tools": { + "latest": "docs/quickstart/toolchain/hugegraph-tools/", + "1.7": "docs/quickstart/toolchain/hugegraph-tools/", + "1.5": "docs/quickstart/toolchain/hugegraph-tools/", + "1.3": "docs/quickstart/toolchain/hugegraph-tools/", + "1.0": "docs/quickstart/toolchain/hugegraph-tools/" + }, + "en:quickstart/toolchain/import": { + "latest": "docs/quickstart/toolchain/import/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/toolchain/import/hugegraph-seatunnel-connector": { + "latest": "docs/quickstart/toolchain/import/hugegraph-seatunnel-connector/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + }, + "en:quickstart/toolchain/visualization": { + "latest": "docs/quickstart/toolchain/visualization/", + "1.7": null, + "1.5": null, + "1.3": null, + "1.0": null + } + }, + "equivalents": [ + [ + "cn:introduction", + "cn:introduction/readme" + ], + [ + "en:introduction", + "en:introduction/readme" + ] + ] +} diff --git a/dist/validate-site-output.py b/dist/validate-site-output.py index d9949f5966..28a5b82e16 100644 --- a/dist/validate-site-output.py +++ b/dist/validate-site-output.py @@ -67,14 +67,10 @@ "www.communityovercode.org", } ASF_CSP_IMAGE_SUFFIXES = (".apache.org", ".scarf.sh") -UNSAFE_AUTHORED_ELEMENTS = {"script", "iframe", "object", "embed"} +UNSAFE_AUTHORED_ELEMENTS = {"script", "iframe", "frame", "object", "embed"} ERROR_DOCUMENT_PATHS = { "404.html", "cn/404.html", - "versions/1.7/404.html", - "versions/1.7/cn/404.html", - "versions/1.5/404.html", - "versions/1.5/cn/404.html", } DOCS_NAV_GROUP_TITLES = { "en": ("Get Started", "Components", "Develop", "Operate", "Reference"), @@ -84,12 +80,85 @@ ("script", "src"), ("link", "href"), ("iframe", "src"), + ("frame", "src"), ("object", "data"), ("embed", "src"), ("audio", "src"), ("video", "src"), ("track", "src"), + ("media-source", "src"), + ("media-source", "srcset"), + ("form", "action"), + ("button", "formaction"), + ("input", "formaction"), + ("use", "href"), + ("use", "xlink:href"), + ("mpath", "href"), + ("mpath", "xlink:href"), + ("textpath", "href"), + ("textpath", "xlink:href"), + ("tref", "href"), + ("tref", "xlink:href"), + ("cursor", "href"), + ("cursor", "xlink:href"), + ("animate", "href"), + ("animate", "xlink:href"), + ("animatemotion", "href"), + ("animatemotion", "xlink:href"), + ("animatetransform", "href"), + ("animatetransform", "xlink:href"), + ("set", "href"), + ("set", "xlink:href"), + ("script", "href"), + ("script", "xlink:href"), + ("link", "imagesrcset"), } +LINK_RESOURCE_RELS = { + "stylesheet", + "preload", + "modulepreload", + "icon", + "apple-touch-icon", + "mask-icon", + "apple-touch-startup-image", + "manifest", + "prefetch", + "prerender", + "preconnect", + "dns-prefetch", +} +LINK_METADATA_RELS = {"canonical"} +SVG_ACTIVE_IRI_ELEMENTS = { + "use", + "script", + "mpath", + "textpath", + "tref", + "cursor", + "animate", + "animatemotion", + "animatetransform", + "set", +} +CSS_PRESENTATION_ATTRIBUTES = { + "clip-path", + "color-profile", + "cursor", + "fill", + "filter", + "marker", + "marker-start", + "marker-mid", + "marker-end", + "mask", + "stroke", +} +RUNTIME_ACTIVE_URL_ATTRIBUTES = { + "data-td-index-src", + "data-td-url", + "data-td-action-url", +} +RUNTIME_IMAGE_URL_ATTRIBUTES = {"data-td-image-zoom"} def is_inert_oink_diagram_source(tag: str, values: dict[str, str]) -> bool: @@ -151,17 +220,195 @@ def css_http_resources(value: str) -> list[str]: def css_resource_urls(value: str) -> list[str]: - """Extract CSS url() and quoted @import resources in source order.""" - pattern = re.compile( - r"url\(\s*(?P['\"]?)(?P[^'\"\s)]+)(?P=quote)\s*\)" - r"|@import\s+(?P['\"])(?P[^'\"]+)" - r"(?P=import_quote)", - re.IGNORECASE, - ) - return [ - match.group("url") or match.group("import_url") - for match in pattern.finditer(value) - ] + """Extract browser request URLs from CSS without regex token ambiguity.""" + + def consume_escape(source: str, position: int) -> tuple[str, int]: + position += 1 + if position >= len(source): + return "", position + if source[position] in "\r\n\f": + if source[position] == "\r" and position + 1 < len(source): + position += source[position + 1] == "\n" + return "", position + 1 + end = position + while ( + end < len(source) + and end - position < 6 + and source[end] in "0123456789abcdefABCDEF" + ): + end += 1 + if end > position: + codepoint = int(source[position:end], 16) + if end < len(source) and source[end].isspace(): + end += 1 + if codepoint == 0 or codepoint > 0x10FFFF or 0xD800 <= codepoint <= 0xDFFF: + return "\N{REPLACEMENT CHARACTER}", end + return chr(codepoint), end + return source[position], position + 1 + + def skip_space_and_comments(source: str, position: int) -> int: + while position < len(source): + if source[position].isspace(): + position += 1 + elif source.startswith("/*", position): + closing = source.find("*/", position + 2) + position = len(source) if closing < 0 else closing + 2 + else: + break + return position + + def consume_name(source: str, position: int) -> tuple[str, int]: + decoded: list[str] = [] + while position < len(source): + char = source[position] + if char == "\\": + escaped, position = consume_escape(source, position) + decoded.append(escaped) + elif char.isalnum() or char in "_-" or ord(char) >= 0x80: + decoded.append(char) + position += 1 + else: + break + return "".join(decoded), position + + def consume_string(source: str, position: int) -> tuple[str, int]: + quote = source[position] + position += 1 + decoded: list[str] = [] + while position < len(source): + char = source[position] + if char == quote: + return "".join(decoded), position + 1 + if char == "\\": + escaped, position = consume_escape(source, position) + decoded.append(escaped) + continue + decoded.append(char) + position += 1 + return "".join(decoded), position + + def matching_paren(source: str, position: int) -> int: + depth = 1 + while position < len(source): + if source.startswith("/*", position): + position = skip_space_and_comments(source, position) + continue + char = source[position] + if char in "'\"": + _string, position = consume_string(source, position) + elif char == "\\": + _escaped, position = consume_escape(source, position) + else: + depth += char == "(" + depth -= char == ")" + position += 1 + if depth == 0: + return position - 1 + return len(source) + + def consume_url_function(source: str, position: int) -> tuple[str, int]: + position = skip_space_and_comments(source, position) + if position < len(source) and source[position] in "'\"": + resource, position = consume_string(source, position) + position = skip_space_and_comments(source, position) + closed = position < len(source) and source[position] == ")" + return resource, position + closed + + decoded: list[str] = [] + while position < len(source): + if source.startswith("/*", position): + position = skip_space_and_comments(source, position) + continue + char = source[position] + if char == ")": + return "".join(decoded).strip(), position + 1 + if char.isspace(): + position = skip_space_and_comments(source, position) + while position < len(source) and source[position] != ")": + position += 1 + return "".join(decoded), position + (position < len(source)) + if char == "\\": + escaped, position = consume_escape(source, position) + decoded.append(escaped) + continue + decoded.append(char) + position += 1 + return "".join(decoded).strip(), position + + def scan(source: str) -> list[str]: + resources: list[str] = [] + position = 0 + while position < len(source): + if source.startswith("/*", position) or source[position].isspace(): + position = skip_space_and_comments(source, position) + continue + if source[position] in "'\"": + _string, position = consume_string(source, position) + continue + if source[position] == "@": + name, after_name = consume_name(source, position + 1) + if name.lower() == "import": + candidate = skip_space_and_comments(source, after_name) + if candidate < len(source) and source[candidate] in "'\"": + resource, position = consume_string(source, candidate) + resources.append(resource) + continue + position = max(after_name, position + 1) + continue + if ( + source[position].isalnum() + or source[position] in "_-\\" + or ord(source[position]) >= 0x80 + ): + name, after_name = consume_name(source, position) + opening = skip_space_and_comments(source, after_name) + if opening >= len(source) or source[opening] != "(": + position = max(after_name, position + 1) + continue + lowered = name.lower() + if lowered == "url": + resource, position = consume_url_function(source, opening + 1) + if resource: + resources.append(resource) + continue + if lowered in {"image-set", "-webkit-image-set"}: + closing = matching_paren(source, opening + 1) + body = source[opening + 1 : closing] + candidate_start = 0 + depth = 0 + cursor = 0 + while cursor <= len(body): + at_end = cursor == len(body) + if not at_end and body.startswith("/*", cursor): + cursor = skip_space_and_comments(body, cursor) + continue + if not at_end and body[cursor] in "'\"": + _string, cursor = consume_string(body, cursor) + continue + if not at_end and body[cursor] == "\\": + _escaped, cursor = consume_escape(body, cursor) + continue + if not at_end: + depth += body[cursor] == "(" + depth -= body[cursor] == ")" + if at_end or (body[cursor] == "," and depth == 0): + candidate = body[candidate_start:cursor] + first = skip_space_and_comments(candidate, 0) + if first < len(candidate) and candidate[first] in "'\"": + resource, _end = consume_string(candidate, first) + resources.append(resource) + else: + resources.extend(scan(candidate)) + candidate_start = cursor + 1 + cursor += 1 + position = closing + (closing < len(source)) + continue + position = opening + 1 + continue + position += 1 + return resources + + return scan(value) def css_external_resources( @@ -199,10 +446,59 @@ def image_url_allowed_by_asf_csp( return hostname in ASF_CSP_IMAGE_HOSTS or hostname.endswith(ASF_CSP_IMAGE_SUFFIXES) -def error_document_seo_errors(parser: DocumentParser, page_name: str) -> list[str]: +def error_document_paths(root: pathlib.Path | None = None) -> set[str]: + """Return root and version-scoped error documents from the active manifest.""" + + manifest_paths = [] + if root is not None: + manifest_paths.append(root / "build-metadata/versions.json") + manifest_paths.append(pathlib.Path(__file__).resolve().parents[1] / "versions.json") + manifest_path = next((path for path in manifest_paths if path.is_file()), None) + if manifest_path is None: + return set(ERROR_DOCUMENT_PATHS) + + try: + manifest = json.loads(manifest_path.read_text(encoding="utf-8")) + except (OSError, UnicodeError, json.JSONDecodeError) as exc: + raise ValueError(f"cannot parse version manifest {manifest_path}: {exc}") from exc + versions = manifest.get("versions") + if not isinstance(versions, list): + raise ValueError(f"version manifest {manifest_path} has no versions list") + + paths = set(ERROR_DOCUMENT_PATHS) + for entry in versions: + publish_path = entry.get("publishPath") if isinstance(entry, dict) else None + if not isinstance(publish_path, str): + raise ValueError( + f"version manifest {manifest_path} has invalid publishPath" + ) + if not publish_path: + continue + pure_path = pathlib.PurePosixPath(publish_path) + if ( + pure_path.is_absolute() + or ".." in pure_path.parts + or pure_path.as_posix() != publish_path + ): + raise ValueError( + f"version manifest {manifest_path} has unsafe publishPath " + f"{publish_path!r}" + ) + paths.add(f"{publish_path}/404.html") + paths.add(f"{publish_path}/cn/404.html") + return paths + + +def error_document_seo_errors( + parser: DocumentParser, + page_name: str, + error_paths: set[str] | None = None, +) -> list[str]: """Require error documents to stay out of indexes and canonical clusters.""" - if page_name not in ERROR_DOCUMENT_PATHS: + if page_name not in ( + error_paths if error_paths is not None else error_document_paths() + ): return [] errors: list[str] = [] @@ -304,6 +600,10 @@ def document_security_errors( f"{page_name}: unsafe content markup: {violation}" for violation in parser.authored_violations ] + if parser._content_markers[0] != parser._content_markers[1]: + errors.append( + f"{page_name}: unsafe content markup: unbalanced authored-content markers" + ) errors.extend( f"{page_name}: mixed-content CSS resource: {resource}" for resource in parser.inline_css_http_resources @@ -323,7 +623,14 @@ def document_security_errors( f"{page_name}: external active resource is forbidden <{tag}> " f"{attribute}: {resource}" for tag, attribute, resource in parser.resources - if (tag, attribute) in EXTERNAL_ACTIVE_RESOURCE_ATTRIBUTES + if ( + (tag, attribute) in EXTERNAL_ACTIVE_RESOURCE_ATTRIBUTES + or attribute in RUNTIME_ACTIVE_URL_ATTRIBUTES + or ( + attribute in {"href", "xlink:href"} + and tag not in {"a", "image", "feimage"} + ) + ) and urllib.parse.urlsplit(resource.strip()).netloc and urllib.parse.urlsplit(resource.strip()).netloc != base_parts.netloc and urllib.parse.urlsplit(resource.strip()).scheme.lower() != "http" @@ -346,6 +653,7 @@ class DocumentParser(html.parser.HTMLParser): def __init__(self) -> None: super().__init__(convert_charrefs=True) self.urls: list[tuple[str, str]] = [] + self.navigation_urls: list[tuple[str, str, str]] = [] self.canonical: list[str] = [] self.hreflang: list[tuple[str, str]] = [] self.meta: list[dict[str, str]] = [] @@ -358,11 +666,49 @@ def __init__(self) -> None: self.action_manifest = "" self._in_action_manifest = False self._content_depth = 0 + self._content_markers = [0, 0] + self._in_content_marker = False self._in_style = False + self._svg_depth = 0 + self._media_elements: list[str] = [] def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: tag = tag.lower() + if tag in {"audio", "video"}: + self._media_elements.append(tag) + in_svg = bool(self._svg_depth) or tag == "svg" + if tag == "svg": + self._svg_depth += 1 + seen_attributes: set[str] = set() + duplicate_attributes: set[str] = set() + for key, _value in attrs: + attribute = key.lower() + if attribute in seen_attributes and attribute not in duplicate_attributes: + self.authored_violations.append( + f"duplicate {attribute} attribute on <{tag}>" + ) + duplicate_attributes.add(attribute) + seen_attributes.add(attribute) values = {key.lower(): value or "" for key, value in attrs} + content_marker = ( + values.get("data-hg-authored-content") + if tag == "template" + else None + ) + if content_marker == "start": + self._content_markers[0] += 1 + if self._in_content_marker: + self.authored_violations.append( + "nested authored-content start marker" + ) + self._in_content_marker = True + elif content_marker == "end": + self._content_markers[1] += 1 + if not self._in_content_marker: + self.authored_violations.append( + "unexpected authored-content end marker" + ) + self._in_content_marker = False if tag == "nav" and "TableOfContents" in [ value or "" for key, value in attrs if key.lower() == "id" ]: @@ -371,7 +717,7 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None ) if tag in {"main", "article"}: self._content_depth += 1 - if self._content_depth: + if self._content_depth or self._in_content_marker: if tag in UNSAFE_AUTHORED_ELEMENTS and not is_inert_oink_diagram_source( tag, values ): @@ -382,7 +728,10 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None f"authored {attribute} event attribute on <{tag}>" ) - if tag in {"a", "link"} and values.get("href"): + if tag in {"a", "area"} and values.get("href"): + self.urls.append(("href", values["href"])) + self.navigation_urls.append((tag, "href", values["href"])) + if tag == "link" and values.get("href"): self.urls.append(("href", values["href"])) if tag in {"img", "script", "source"} and values.get("src"): self.urls.append(("src", values["src"])) @@ -394,32 +743,100 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None resource_attributes.append(("poster", values["poster"])) if tag == "object" and values.get("data"): resource_attributes.append(("data", values["data"])) + self.urls.append(("data", values["data"])) + if tag == "form" and values.get("action"): + resource_attributes.append(("action", values["action"])) + self.urls.append(("action", values["action"])) + if tag in {"button", "input"} and values.get("formaction"): + resource_attributes.append(("formaction", values["formaction"])) + self.urls.append(("formaction", values["formaction"])) + if tag in SVG_ACTIVE_IRI_ELEMENTS | {"image", "feimage"}: + for attribute in ("href", "xlink:href"): + if not values.get(attribute): + continue + if (attribute, values[attribute]) not in resource_attributes: + resource_attributes.append((attribute, values[attribute])) + if (attribute, values[attribute]) not in self.urls: + self.urls.append((attribute, values[attribute])) + if ( + in_svg + and tag not in {"a", "image", "feimage", "link"} + and values.get("href") + ): + if ("href", values["href"]) not in resource_attributes: + resource_attributes.append(("href", values["href"])) + if ("href", values["href"]) not in self.urls: + self.urls.append(("href", values["href"])) + if tag == "a" and values.get("xlink:href"): + self.urls.append(("xlink:href", values["xlink:href"])) + self.navigation_urls.append((tag, "xlink:href", values["xlink:href"])) + elif ( + values.get("xlink:href") + and tag not in SVG_ACTIVE_IRI_ELEMENTS | {"image", "feimage"} + ): + resource_attributes.append(("xlink:href", values["xlink:href"])) + self.urls.append(("xlink:href", values["xlink:href"])) if tag == "iframe" and values.get("src"): resource_attributes.append(("src", values["src"])) + if tag == "frame" and values.get("src"): + resource_attributes.append(("src", values["src"])) + self.urls.append(("src", values["src"])) if ( tag == "input" and values.get("type", "").lower() == "image" and values.get("src") ): resource_attributes.append(("src", values["src"])) - if tag == "image" and values.get("href"): - resource_attributes.append(("href", values["href"])) if tag == "link" and values.get("href"): rel = set(values.get("rel", "").lower().split()) - if rel & { - "stylesheet", - "preload", - "modulepreload", - "icon", - "apple-touch-icon", - "manifest", - }: + is_metadata = rel == LINK_METADATA_RELS or ( + rel == {"alternate"} and bool(values.get("hreflang")) + ) + if rel & LINK_RESOURCE_RELS or not is_metadata: resource_attributes.append(("href", values["href"])) + else: + self.navigation_urls.append((tag, "href", values["href"])) + if tag == "link" and values.get("imagesrcset"): + urls = srcset_urls(values["imagesrcset"]) + resource_attributes.extend( + ("imagesrcset", url) for url in urls + ) + self.urls.extend(("imagesrcset", url) for url in urls) + self.image_urls.extend( + (tag, "imagesrcset", url) for url in urls + ) + if tag in {"a", "area"} and "ping" in values: + self.authored_violations.append(f"forbidden ping attribute on <{tag}>") + if tag == "base" and "href" in values: + self.authored_violations.append("forbidden base[href]") + if tag == "iframe" and "srcdoc" in values: + self.authored_violations.append("forbidden iframe[srcdoc]") + if "attributionsrc" in values: + self.authored_violations.append( + f"forbidden attributionsrc attribute on <{tag}>" + ) + if tag in {"body", "table", "td", "th"} and values.get("background"): + resource_attributes.append(("background", values["background"])) + self.urls.append(("background", values["background"])) + self.image_urls.append((tag, "background", values["background"])) + for attribute in RUNTIME_ACTIVE_URL_ATTRIBUTES | RUNTIME_IMAGE_URL_ATTRIBUTES: + if not values.get(attribute): + continue + resource_attributes.append((attribute, values[attribute])) + self.urls.append((attribute, values[attribute])) + if attribute in RUNTIME_IMAGE_URL_ATTRIBUTES: + self.image_urls.append((tag, attribute, values[attribute])) + resource_tag = ( + "media-source" + if tag == "source" and self._media_elements + else tag + ) self.resources.extend( - (tag, attribute, url) for attribute, url in resource_attributes + (resource_tag, attribute, url) + for attribute, url in resource_attributes ) - if tag in {"img", "source"}: + if tag == "img" or (tag == "source" and not self._media_elements): for attribute in ("src", "srcset"): if not values.get(attribute): continue @@ -430,7 +847,16 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None ) self.image_urls.extend((tag, attribute, url) for url in urls) if attribute == "srcset": - self.resources.extend((tag, attribute, url) for url in urls) + self.resources.extend( + (resource_tag, attribute, url) for url in urls + ) + self.urls.extend((attribute, url) for url in urls) + elif tag == "source" and values.get("srcset"): + urls = srcset_urls(values["srcset"]) + self.resources.extend( + (resource_tag, "srcset", url) for url in urls + ) + self.urls.extend(("srcset", url) for url in urls) if tag == "video" and values.get("poster"): self.image_urls.append((tag, "poster", values["poster"])) if ( @@ -439,12 +865,20 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None and values.get("src") ): self.image_urls.append((tag, "src", values["src"])) - if tag == "image" and values.get("href"): - self.image_urls.append((tag, "href", values["href"])) + if tag in {"image", "feimage"}: + for attribute in ("href", "xlink:href"): + if values.get(attribute): + self.image_urls.append((tag, attribute, values[attribute])) if values.get("style"): self.inline_css_sources.append(values["style"]) self.inline_css_http_resources.extend(css_http_resources(values["style"])) + for attribute in CSS_PRESENTATION_ATTRIBUTES: + if values.get(attribute): + self.inline_css_sources.append(values[attribute]) + self.inline_css_http_resources.extend( + css_http_resources(values[attribute]) + ) if tag == "link" and values.get("rel", "").lower() == "canonical": self.canonical.append(values.get("href", "")) if ( @@ -468,10 +902,24 @@ def handle_data(self, data: str) -> None: self.inline_css_http_resources.extend(css_http_resources(data)) def handle_endtag(self, tag: str) -> None: + tag = tag.lower() if tag == "script" and self._in_action_manifest: self._in_action_manifest = False if tag == "style": self._in_style = False + if tag == "svg" and self._svg_depth: + self._svg_depth -= 1 + if tag in {"audio", "video"}: + if self._media_elements and self._media_elements[-1] == tag: + self._media_elements.pop() + elif self._media_elements: + self.authored_violations.append( + f"mismatched inside <{self._media_elements[-1]}>" + ) + else: + self.authored_violations.append( + f"unmatched " + ) if tag in {"main", "article"} and self._content_depth: self._content_depth -= 1 @@ -514,6 +962,44 @@ def internal_output_target( return output_path(root, parts.path or "/") +def css_internal_output_target( + root: pathlib.Path, + stylesheet: pathlib.Path, + base_parts: urllib.parse.SplitResult, + url: str, +) -> pathlib.Path | None: + """Resolve one same-origin CSS request against its emitted stylesheet.""" + + parts = urllib.parse.urlsplit(url) + if parts.netloc and parts.netloc != base_parts.netloc: + return None + decoded = urllib.parse.unquote(parts.path) + if not decoded: + return None if parts.fragment else stylesheet + if "\x00" in decoded or "\\" in decoded: + raise ValueError("contains a NUL or backslash") + + if decoded.startswith("/"): + artifact_base = urllib.parse.unquote(base_parts.path).rstrip("/") + if artifact_base and ( + decoded == artifact_base or decoded.startswith(artifact_base + "/") + ): + decoded = decoded[len(artifact_base) :] or "/" + candidate = root / decoded.lstrip("/") + else: + candidate = stylesheet.parent / decoded + candidate = candidate.resolve() + try: + candidate.relative_to(root) + except ValueError as exc: + raise ValueError("escapes output directory") from exc + if decoded.endswith("/") or ( + not candidate.is_file() and not pathlib.PurePosixPath(decoded).suffix + ): + candidate /= "index.html" + return candidate + + def refresh_target(parser: DocumentParser) -> str | None: refresh = [ item.get("content", "") @@ -530,6 +1016,81 @@ def refresh_target(parser: DocumentParser) -> str | None: return match.group(1).strip(" \"'") +def rendered_url_shape_error( + value: str, + page_name: str, + attribute: str, + *, + allow_contact: bool = False, +) -> str | None: + """Reject URL spellings that browsers and RFC parsers interpret differently.""" + if any( + char.isspace() or ord(char) < 0x20 or ord(char) == 0x7F for char in value + ): + return ( + f"{page_name}: unsafe whitespace/control URL in {attribute}: {value}" + ) + if "\\" in value: + return f"{page_name}: unsafe backslash URL in {attribute}: {value}" + if value.startswith("//"): + return f"{page_name}: protocol-relative {attribute} is forbidden: {value}" + try: + parts = urllib.parse.urlsplit(value) + except ValueError as exc: + return f"{page_name}: malformed URL in {attribute}: {value}: {exc}" + if parts.scheme.lower() in {"http", "https"} and not parts.netloc: + return f"{page_name}: HTTP(S) URL has no authority in {attribute}: {value}" + allowed_schemes = {"", "http", "https"} + if allow_contact: + allowed_schemes.update({"mailto", "tel"}) + if parts.scheme.lower() not in allowed_schemes: + return f"{page_name}: forbidden URL scheme in {attribute}: {value}" + return None + + +def document_url_shape_errors( + parser: DocumentParser, + page_name: str, +) -> list[str]: + """Apply the browser-safe URL shape contract to every rendered URL token.""" + tokens: list[tuple[str, str, bool]] = [ + (f"{tag}[{attribute}]", value, tag in {"a", "area"}) + for tag, attribute, value in parser.navigation_urls + ] + tokens.extend( + (f"{tag}[{attribute}]", value, False) + for tag, attribute, value in parser.resources + ) + tokens.extend( + ("inline CSS", value, False) + for source in parser.inline_css_sources + for value in css_resource_urls(source) + ) + try: + alias_target = refresh_target(parser) + except ValueError as exc: + return [f"{page_name}: {exc}"] + if alias_target: + tokens.append(("meta refresh", alias_target, False)) + + errors = [] + seen: set[tuple[str, str, bool]] = set() + for attribute, value, allow_contact in tokens: + key = (attribute, value, allow_contact) + if key in seen: + continue + seen.add(key) + error = rendered_url_shape_error( + value, + page_name, + attribute, + allow_contact=allow_contact, + ) + if error: + errors.append(error) + return errors + + def main() -> int: argument_parser = argparse.ArgumentParser( description="Validate a generated HugeGraph documentation artifact." @@ -550,6 +1111,11 @@ def main() -> int: base = args.expected_base_url.rstrip("/") + "/" base_parts = urllib.parse.urlsplit(base) errors: list[str] = [] + try: + error_paths = error_document_paths(root) + except ValueError as exc: + errors.append(str(exc)) + error_paths = set(ERROR_DOCUMENT_PATHS) if not root.is_dir(): errors.append(f"missing output directory: {root}") @@ -591,8 +1157,12 @@ def main() -> int: continue page_name = page.relative_to(root).as_posix() + shape_errors = document_url_shape_errors(parser, page_name) + errors.extend(shape_errors) + if shape_errors: + continue errors.extend(document_security_errors(parser, page_name, base_parts)) - errors.extend(error_document_seo_errors(parser, page_name)) + errors.extend(error_document_seo_errors(parser, page_name, error_paths)) if args.security_only: continue errors.extend(toc_accessibility_errors(parser, page_name)) @@ -601,7 +1171,7 @@ def main() -> int: except ValueError as exc: errors.append(f"{page_name}: {exc}") alias_target = None - is_error_document = page_name in ERROR_DOCUMENT_PATHS + is_error_document = page_name in error_paths if not is_error_document and page_name != "client-go/index.html": if len(parser.canonical) != 1: errors.append( @@ -708,7 +1278,14 @@ def main() -> int: ) for attribute, raw_url in parser.urls: - url = raw_url.strip() + if rendered_url_shape_error( + raw_url, + page_name, + attribute, + allow_contact=True, + ): + continue + url = raw_url lower_url = url.lower() if "/_nav/" in lower_url: errors.append( @@ -721,12 +1298,6 @@ def main() -> int: or lower_url.startswith(("mailto:", "tel:")) ): continue - if url.startswith("//"): - errors.append( - f"{page_name}: protocol-relative {attribute} is forbidden: {url}" - ) - continue - parts = urllib.parse.urlsplit(url) if parts.scheme and parts.scheme.lower() not in {"http", "https"}: errors.append( @@ -761,6 +1332,21 @@ def main() -> int: except (OSError, UnicodeError) as exc: errors.append(f"cannot parse {stylesheet.relative_to(root)}: {exc}") continue + stylesheet_name = stylesheet.relative_to(root).as_posix() + shape_errors = [ + error + for resource in css_resource_urls(stylesheet_text) + if ( + error := rendered_url_shape_error( + resource, + stylesheet_name, + "CSS resource", + ) + ) + ] + errors.extend(shape_errors) + if shape_errors: + continue for resource in css_http_resources(stylesheet_text): errors.append( f"{stylesheet.relative_to(root)}: mixed-content CSS resource: {resource}" @@ -770,6 +1356,22 @@ def main() -> int: f"{stylesheet.relative_to(root)}: external CSS resource is forbidden: " f"{resource}" ) + for resource in css_resource_urls(stylesheet_text): + try: + target = css_internal_output_target( + root, stylesheet, base_parts, resource + ) + except ValueError as exc: + errors.append( + f"{stylesheet_name}: unsafe internal CSS resource " + f"{resource}: {exc}" + ) + continue + if target is not None and not target.is_file(): + errors.append( + f"{stylesheet_name}: broken internal CSS resource {resource} -> " + f"{target.relative_to(root)}" + ) if args.security_only: if errors: diff --git a/hugo.yaml b/hugo.yaml index 8b0afe361f..d276b93c56 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -17,13 +17,14 @@ languages: params: description: Apache HugeGraph documentation and project updates. version_menu: Releases - versions: - - { version: latest, name: latest, url: 'https://hugegraph.apache.org/docs/', pagelinks: false } - - { version: '1.7', name: '1.7', url: 'https://hugegraph.apache.org/versions/1.7/docs/', pagelinks: false } - - { version: '1.5', name: '1.5', url: 'https://hugegraph.apache.org/versions/1.5/docs/', pagelinks: false } menus: main: - { identifier: docs, name: Documentation, pageRef: /docs, weight: 10 } + - { identifier: docs-start, parent: docs, name: Get Started, pageRef: /docs/quickstart, weight: 11, params: { icon: 'fa-solid fa-rocket' } } + - { identifier: docs-components, parent: docs, name: Components, pageRef: /docs/quickstart/hugegraph, weight: 12, params: { icon: 'fa-solid fa-cubes' } } + - { identifier: docs-develop, parent: docs, name: Develop, pageRef: /docs/clients, weight: 13, params: { icon: 'fa-solid fa-code' } } + - { identifier: docs-operate, parent: docs, name: Operate, pageRef: /docs/config, weight: 14, params: { icon: 'fa-solid fa-screwdriver-wrench' } } + - { identifier: docs-reference, parent: docs, name: Reference, pageRef: /docs/changelog, weight: 15, params: { icon: 'fa-solid fa-book-open' } } - { identifier: download, name: Download, pageRef: /docs/download/download, weight: 20 } - { identifier: blog, name: Blog, pageRef: /blog, weight: 30 } - { identifier: community, name: Community, pageRef: /community, weight: 40 } @@ -38,13 +39,14 @@ languages: params: description: Apache HugeGraph ไธญๆ–‡ๆ–‡ๆกฃไธŽ้กน็›ฎๅŠจๆ€ใ€‚ version_menu: ็‰ˆๆœฌ - versions: - - { version: latest, name: latest, url: 'https://hugegraph.apache.org/cn/docs/', pagelinks: false } - - { version: '1.7', name: '1.7', url: 'https://hugegraph.apache.org/versions/1.7/cn/docs/', pagelinks: false } - - { version: '1.5', name: '1.5', url: 'https://hugegraph.apache.org/versions/1.5/cn/docs/', pagelinks: false } menus: main: - { identifier: docs, name: ๆ–‡ๆกฃ, pageRef: /docs, weight: 10 } + - { identifier: docs-start, parent: docs, name: ๅผ€ๅง‹, pageRef: /docs/quickstart, weight: 11, params: { icon: 'fa-solid fa-rocket' } } + - { identifier: docs-components, parent: docs, name: ็ป„ไปถ, pageRef: /docs/quickstart/hugegraph, weight: 12, params: { icon: 'fa-solid fa-cubes' } } + - { identifier: docs-develop, parent: docs, name: ๅผ€ๅ‘, pageRef: /docs/clients, weight: 13, params: { icon: 'fa-solid fa-code' } } + - { identifier: docs-operate, parent: docs, name: ่ฟ็ปด, pageRef: /docs/config, weight: 14, params: { icon: 'fa-solid fa-screwdriver-wrench' } } + - { identifier: docs-reference, parent: docs, name: ๅ‚่€ƒ, pageRef: /docs/changelog, weight: 15, params: { icon: 'fa-solid fa-book-open' } } - { identifier: download, name: ไธ‹่ฝฝ, pageRef: /docs/download/download, weight: 20 } - { identifier: blog, name: ๅšๅฎข, pageRef: /blog, weight: 30 } - { identifier: community, name: ็คพๅŒบ, pageRef: /community, weight: 40 } @@ -86,6 +88,7 @@ outputs: params: description: Apache HugeGraph is a full-stack graph database ecosystem for OLTP, OLAP, and graph AI. + images: [/img/social/hugegraph-default.png] github_repo: https://github.com/apache/hugegraph-doc github_project_repo: https://github.com/apache/hugegraph github_branch: master @@ -102,12 +105,22 @@ params: offline_search_index: summary offline_search_summary_length: 70 offline_search_max_results: 10 + # Optional enhancement: keep disabled until both reviewed latest-only Kapa + # source groups and the staging CSP/corpus acceptance gates pass. + ai_search: + enabled: false + provider: kapa + website_id: 0b277570-4740-451e-96fa-1e4ac1ac5e88 + source_groups: + en: '' + cn: '' footer_center_info: '' # The compact ASF footer owns the legal line; global controls stay in header. copyright: false print: toc: true ui: + theme_color: '#532fc9' dark_mode: enable: true show_menu: true @@ -120,6 +133,8 @@ params: wide_nav_sections: [community] sidebar_icon_policy: groups sidebar_item_overflow: wrap + backlinks: true + image_zoom: true page_context_menu: enable: true assistant_links: false diff --git a/i18n/en.yaml b/i18n/en.yaml new file mode 100644 index 0000000000..a7cea091c3 --- /dev/null +++ b/i18n/en.yaml @@ -0,0 +1,27 @@ +ui_version_fallback: This page is not available in the selected version. You have been redirected to that version's documentation home. +ui_ask_ai: Ask AI +ui_ask_ai_description: Powered by Kapa; only your question is sent. +ui_ask_ai_latest: Answers use the latest documentation +ui_retry: Retry +ui_ai_error: AI is temporarily unavailable. Local search is unaffected. +download_release_version: Version +download_release_date: Release Date +download_release_notes: Release Notes +download_table_component: Component +download_table_type: Type +download_table_mirror: Download (ASF mirror) +download_type_binary: Binary +download_type_source: Source +download_component_server: Server +download_component_toolchain: Toolchain +download_component_ai: AI +download_component_computer: Computer +download_component_commons: Common +download_asf_note: All packages on this page are official Apache Software Foundation releases served from ASF mirrors, with signatures and checksums hosted on downloads.apache.org. Source archives generated automatically by GitHub are not ASF releases. +ui_assets_download: Download asset + +ui_more_versions: More versions +ui_ai_consent_description: "Continuing loads Kapa, a third-party service. Your question will be sent to Kapa to generate an answer." +ui_ai_consent_continue: "Continue to Ask AI" +ui_ai_consent_cancel: "Cancel" +ui_ai_privacy: "Privacy policy" diff --git a/i18n/cn.yaml b/i18n/zh-CN.yaml similarity index 86% rename from i18n/cn.yaml rename to i18n/zh-CN.yaml index d1c584ea58..1c9f814e2d 100644 --- a/i18n/cn.yaml +++ b/i18n/zh-CN.yaml @@ -234,3 +234,29 @@ ui_diagram_zoom_in: ๆ”พๅคง ui_diagram_zoom_out: ็ผฉๅฐ ui_diagram_zoom_reset: ๅคไฝ่ง†ๅ›พ ui_diagram_error: ๅ›พ่กจๆ— ๆณ•ๆธฒๆŸ“ +ui_version_fallback: ็›ฎๆ ‡็‰ˆๆœฌๆฒกๆœ‰ๆญค้กต้ข๏ผŒๅทฒ่ฝฌๅˆฐ่ฏฅ็‰ˆๆœฌ็š„ๆ–‡ๆกฃ้ฆ–้กตใ€‚ +ui_ask_ai: ่ฏข้—ฎ AI +ui_ask_ai_description: ็”ฑ Kapa ๆไพ›๏ผ›ไป…ๅ‘้€ไฝ ็š„้—ฎ้ข˜ใ€‚ +ui_ask_ai_latest: ๅ›ž็ญ”ๅŸบไบŽ latest ๆ–‡ๆกฃ +ui_retry: ้‡่ฏ• +ui_ai_error: AI ๆš‚ๆ—ถไธๅฏ็”จ๏ผŒๆœฌๅœฐๆœ็ดขไธๅ—ๅฝฑๅ“ใ€‚ +download_release_version: ็‰ˆๆœฌ +download_release_date: ๅ‘ๅธƒๆ—ฅๆœŸ +download_release_notes: ๅ‘ๅธƒ่ฏดๆ˜Ž +download_table_component: ็ป„ไปถ +download_table_type: ็ฑปๅž‹ +download_table_mirror: ไธ‹่ฝฝ (ASF ้•œๅƒ) +download_type_binary: ไบŒ่ฟ›ๅˆถ +download_type_source: ๆบ็  +download_component_server: Server +download_component_toolchain: Toolchain +download_component_ai: AI +download_component_computer: Computer +download_component_commons: Common +download_asf_note: ๆœฌ้กตๆ‰€ๅˆ—่ฝฏไปถๅŒ…ๅ‡ไธบ Apache ่ฝฏไปถๅŸบ้‡‘ไผšๆญฃๅผๅ‘ๅธƒ็‰ˆๆœฌ๏ผŒ้€š่ฟ‡ ASF ้•œๅƒๅˆ†ๅ‘๏ผŒ็ญพๅไธŽๆ ก้ชŒๅ’Œๆ‰˜็ฎกๅœจ downloads.apache.orgใ€‚GitHub ่‡ชๅŠจ็”Ÿๆˆ็š„ๆบ็ ๅฝ’ๆกฃไธๆ˜ฏ ASF ๆญฃๅผๅ‘ๅธƒ็‰ˆๆœฌใ€‚ + +ui_more_versions: ๆ›ดๅคš็‰ˆๆœฌ +ui_ai_consent_description: "็ปง็ปญๅŽๅฐ†ๅŠ ่ฝฝ็ฌฌไธ‰ๆ–นๆœๅŠก Kapa๏ผŒๅนถๅฐ†ไฝ ็š„้—ฎ้ข˜ๅ‘้€็ป™ Kapa ็”Ÿๆˆๅ›ž็ญ”ใ€‚" +ui_ai_consent_continue: "็ปง็ปญไฝฟ็”จ Ask AI" +ui_ai_consent_cancel: "ๅ–ๆถˆ" +ui_ai_privacy: "้š็งๆ”ฟ็ญ–" diff --git a/layouts/_partials/actions/manifest.html b/layouts/_partials/actions/manifest.html new file mode 100644 index 0000000000..3029720f3b --- /dev/null +++ b/layouts/_partials/actions/manifest.html @@ -0,0 +1,23 @@ +{{- $outputFormat := lower (.Store.Get "tdOutputFormat" | default "html") -}} +{{- $context := partialCached "actions/context.html" . .Site.BaseURL .Site.Language.Lang .RelPermalink $outputFormat -}} +{{- $versionOptions := partial "version-options.html" . -}} +{{- $actions := slice -}} +{{- range $context.actions -}} + {{- $action := . -}} + {{- if eq .id "switch_version" -}} + {{- $action = merge . (dict + "options" $versionOptions + "available" (gt (len $versionOptions) 0) + "disabledReason" (cond (gt (len $versionOptions) 0) "" (printf "%s: %s" .title (T "ui_action_unavailable"))) + ) -}} + {{- end -}} + {{- $actions = $actions | append $action -}} +{{- end -}} +{{- return (dict + "version" 1 + "language" .Site.Language.Lang + "actions" $actions + "commands" (partialCached "actions/site-commands.html" . .Site.Language.Lang .Site.BaseURL) + "quickLinks" (partialCached "actions/quick-links.html" . .Site.Language.Lang .Site.BaseURL) + "rootOrder" (partialCached "actions/root-order.html" . .Site.Language.Lang .Site.BaseURL) +) -}} diff --git a/layouts/_partials/ai/config.html b/layouts/_partials/ai/config.html new file mode 100644 index 0000000000..4a0217381c --- /dev/null +++ b/layouts/_partials/ai/config.html @@ -0,0 +1,33 @@ +{{- $raw := .Site.Params.ai_search | default dict -}} +{{- $enabled := false -}} +{{- $provider := "" -}} +{{- $websiteID := "" -}} +{{- $sourceGroups := dict -}} +{{- if reflect.IsMap $raw -}} + {{- $enabled = index $raw "enabled" | default false -}} + {{- if ne (printf "%T" $enabled) "bool" -}} + {{- errorf "params.ai_search.enabled must be a boolean" -}} + {{- end -}} + {{- $provider = index $raw "provider" | default "" -}} + {{- $websiteID = index $raw "website_id" | default "" -}} + {{- $sourceGroups = index $raw "source_groups" | default dict -}} +{{- else -}} + {{- errorf "params.ai_search must be a map" -}} +{{- end -}} +{{- $enGroup := "" -}} +{{- $cnGroup := "" -}} +{{- if reflect.IsMap $sourceGroups -}} + {{- $enGroup = index $sourceGroups "en" | default "" -}} + {{- $cnGroup = index $sourceGroups "cn" | default "" -}} +{{- end -}} +{{- if $enabled -}} + {{- if ne $provider "kapa" }}{{ errorf "params.ai_search.provider must be kapa when AI search is enabled" }}{{ end -}} + {{- if not $websiteID }}{{ errorf "params.ai_search.website_id is required when AI search is enabled" }}{{ end -}} + {{- if or (not $enGroup) (not $cnGroup) }}{{ errorf "params.ai_search.source_groups.en and .cn are required when AI search is enabled" }}{{ end -}} +{{- end -}} +{{- return (dict + "enabled" $enabled + "provider" $provider + "websiteID" $websiteID + "sourceGroups" (dict "en" $enGroup "cn" $cnGroup) +) -}} diff --git a/layouts/_partials/asf-downloads.html b/layouts/_partials/asf-downloads.html new file mode 100644 index 0000000000..05cda83e5c --- /dev/null +++ b/layouts/_partials/asf-downloads.html @@ -0,0 +1,101 @@ +{{- /* Render ASF release download tables from data/downloads/asf.json. + + The data file is the single source of truth for both languages; this + partial only derives presentation. Malformed site-owned data fails the + build via errorf so a broken table can never publish silently. + + mode: "latest" renders the one latest release, "archived" renders the + rest. The mode is required so a page cannot render duplicate sections + (and duplicate element ids) by accident. */ -}} +{{- $page := .page -}} +{{- $mode := .mode -}} +{{- $position := .position | default $page.Path -}} +{{- if not (in (slice "latest" "archived") $mode) -}} + {{- errorf "%s: asf-downloads mode must be latest or archived; got %q" $position $mode -}} +{{- end -}} +{{- $data := index (index hugo.Data "downloads" | default dict) "asf" | default dict -}} +{{- $dist := $data.dist_path | default "" -}} +{{- $components := $data.components | default dict -}} +{{- $releases := $data.releases | default slice -}} +{{- if not (and $dist $components $releases) -}} + {{- errorf "%s: data/downloads/asf.json must define dist_path, components, and releases" $position -}} +{{- end -}} +{{- $selected := slice -}} +{{- range $releases -}} + {{- $isLatest := .latest | default false -}} + {{- if or (and (eq $mode "latest") $isLatest) (and (eq $mode "archived") (not $isLatest)) -}} + {{- $selected = $selected | append . -}} + {{- end -}} +{{- end -}} +{{- range $release := $selected -}} +{{- $version := $release.version -}} +{{- if not $version -}}{{- errorf "%s: asf-downloads release without a version" $position -}}{{- end -}} +{{- $infix := cond ($release.incubating | default false) "-incubating" "" -}} +{{- $rows := slice -}} +{{- range $kind := slice "binary" "source" -}} + {{- range $componentID := index $release $kind | default slice -}} + {{- $component := index $components $componentID -}} + {{- if not $component -}} + {{- errorf "%s: asf-downloads release %s references unknown component %q" $position $version $componentID -}} + {{- end -}} + {{- if not (and $component.prefix $component.label_key) -}} + {{- errorf "%s: asf-downloads component %q must define prefix and label_key" $position $componentID -}} + {{- end -}} + {{- $suffix := cond (eq $kind "source") "-src" "" -}} + {{- $file := printf "%s%s-%s%s.tar.gz" $component.prefix $infix $version $suffix -}} + {{- $rows = $rows | append (dict + "label" (T $component.label_key) + "kind" $kind + "file" $file + "mirror" (printf "https://www.apache.org/dyn/closer.lua/%s/%s/%s?action=download" $dist $version $file) + "asc" (printf "https://downloads.apache.org/%s/%s/%s.asc" $dist $version $file) + "sha512" (printf "https://downloads.apache.org/%s/%s/%s.sha512" $dist $version $file) + ) -}} + {{- end -}} +{{- end -}} +{{- if not $rows -}}{{- errorf "%s: asf-downloads release %s has no artifacts" $position $version -}}{{- end -}} +
+ {{- if ne $mode "latest" }} +

{{ $version }}

+ {{- end }} + +
+
+ + + + + + + + + + + + + {{- range $row := $rows }} + + + + + + + + {{- end }} + +
{{ T "ui_assets_download" }} ยท Apache HugeGraph {{ $version }}
{{ T "download_table_component" }}{{ T "download_table_type" }}{{ T "download_table_mirror" }}ASCSHA512
{{ $row.label }}{{ T (printf "download_type_%s" $row.kind) }} + {{ $row.file }} + ASCSHA512
+
+
+
+{{- end -}} +{{- if eq $mode "latest" }} +

{{ T "download_asf_note" }}

+{{- end -}} diff --git a/layouts/_partials/backlinks-sources.html b/layouts/_partials/backlinks-sources.html new file mode 100644 index 0000000000..f76a18b1f2 --- /dev/null +++ b/layouts/_partials/backlinks-sources.html @@ -0,0 +1,21 @@ +{{- /* HugeGraph exposes backlinks only for latest documentation. Historical + builds and non-doc sections retain their original, uncluttered output. */ -}} +{{- $page := . -}} +{{- $enabled := and + (eq ($page.Site.Params.version | default "latest") "latest") + (eq $page.Section "docs") +-}} +{{- if isset $page.Params "backlinks" -}} + {{- $enabled = partial "validate.html" (dict + "value" (index $page.Params "backlinks") "kind" "bool" + "fallback" $enabled "key" "front matter backlinks" + "where" $page.Path) -}} +{{- end -}} +{{- $sources := slice -}} +{{- if $enabled -}} + {{- $backlinkIndex := partialCached "backlinks-index.html" $page.Site $page.Site.Language.Lang -}} + {{- range sort (index $backlinkIndex $page.Path | default (slice)) "Path" -}} + {{- $sources = $sources | append . -}} + {{- end -}} +{{- end -}} +{{- return $sources -}} diff --git a/layouts/_partials/backlinks.html b/layouts/_partials/backlinks.html new file mode 100644 index 0000000000..4c0917334b --- /dev/null +++ b/layouts/_partials/backlinks.html @@ -0,0 +1,50 @@ +{{- /* Keep the right rail compact: five backlinks remain immediately visible + and any additional sources use a native, keyboard-accessible disclosure. + Input: dict "page" . "sources" (from backlinks-sources.html). */ -}} +{{- $p := .page -}} +{{- $sources := .sources -}} +{{- with $sources -}} +{{- $shown := first 5 . -}} +{{- $rest := after 5 . -}} + +{{- end -}} diff --git a/layouts/_partials/community/members.html b/layouts/_partials/community/members.html new file mode 100644 index 0000000000..459604b1a8 --- /dev/null +++ b/layouts/_partials/community/members.html @@ -0,0 +1,37 @@ +{{- $page := .page -}} +{{- $data := hugo.Data.community.roster -}} +{{- $labels := dict + "en" (dict "title" "Project members" "lead" "Current Apache HugeGraph PMC members and Committers, sourced from public ASF records." "chair" "Chair" "pmc" "PMC" "committers" "Committers") + "cn" (dict "title" "้กน็›ฎๆˆๅ‘˜" "lead" "Apache HugeGraph ๅฝ“ๅ‰็š„ PMC ๆˆๅ‘˜ไธŽ Committers๏ผŒๆ•ฐๆฎๆฅ่‡ช ASF ๅ…ฌๅผ€่ฎฐๅฝ•ใ€‚" "chair" "ไธปๅธญ" "pmc" "PMC" "committers" "Committers") +-}} +{{- $copy := index $labels $page.Language.Lang | default (index $labels "en") -}} +{{- $style := resources.Get "scss/community-members.scss" | toCSS | minify | fingerprint -}} + +
+
+
+

{{ $copy.title }}

+

{{ $copy.lead }}

+
+ {{- range $role := slice "pmc" "committers" }} + {{- $members := index $data.roles $role }} +
+

{{ index $copy $role }}

+ +
+ {{- end }} +
+
diff --git a/layouts/_partials/community/members.md b/layouts/_partials/community/members.md new file mode 100644 index 0000000000..955aaee81a --- /dev/null +++ b/layouts/_partials/community/members.md @@ -0,0 +1,23 @@ +{{- $page := .page -}} +{{- $data := hugo.Data.community.roster -}} +{{- $labels := dict + "en" (dict "title" "Project members" "lead" "Current Apache HugeGraph PMC members and Committers, sourced from public ASF records." "chair" "Chair") + "cn" (dict "title" "้กน็›ฎๆˆๅ‘˜" "lead" "Apache HugeGraph ๅฝ“ๅ‰็š„ PMC ๆˆๅ‘˜ไธŽ Committers๏ผŒๆ•ฐๆฎๆฅ่‡ช ASF ๅ…ฌๅผ€่ฎฐๅฝ•ใ€‚" "chair" "ไธปๅธญ") +-}} +{{- $copy := index $labels $page.Language.Lang | default (index $labels "en") -}} +## {{ $copy.title }} + +{{ $copy.lead }} + +{{ range $role := slice "pmc" "committers" -}} +### {{ if eq $role "pmc" }}PMC{{ else }}Committers{{ end }} + +{{ range (index $data.roles $role) -}} +{{- $label := .asf_id -}} +{{- with .github }}{{ $label = printf "@%s" .login }}{{ end -}} +{{- $label = partial "content/markdown-escape.html" $label -}} +{{- $url := partial "content/markdown-url.html" .profile_url -}} +- [{{ $label }}]({{ $url }}){{ if .chair }} โ€” {{ $copy.chair }}{{ end }} +{{ end }} + +{{ end -}} diff --git a/layouts/_partials/content/image-zoom-config.html b/layouts/_partials/content/image-zoom-config.html new file mode 100644 index 0000000000..d6421621b8 --- /dev/null +++ b/layouts/_partials/content/image-zoom-config.html @@ -0,0 +1,9 @@ +{{- /* Docs and Blog use OINK's on-demand image preview in every version. */ -}} +{{- $enabled := in (slice "docs" "blog") .Section -}} +{{- if isset .Params "image_zoom" -}} + {{- $enabled = partial "validate.html" (dict + "value" (index .Params "image_zoom") "kind" "bool" + "fallback" $enabled "key" "front matter image_zoom" + "where" .Path) -}} +{{- end -}} +{{- return (dict "enable" $enabled) -}} diff --git a/layouts/_partials/content/render.html b/layouts/_partials/content/render.html new file mode 100644 index 0000000000..77763cc285 --- /dev/null +++ b/layouts/_partials/content/render.html @@ -0,0 +1,5 @@ +{{- /* Mark the exact authored-content boundary for the publication scanner. */ -}} +{{- $content := .Content -}} +{{- partial "code/register-rendered-ids.html" (dict "page" . "content" $content) -}} +{{- partial "content/register-derived.html" (dict "page" . "html" $content "raw" .RawContent) -}} +{{- return (printf "%s" $content | safeHTML) -}} diff --git a/layouts/_partials/hooks/body-end.html b/layouts/_partials/hooks/body-end.html new file mode 100644 index 0000000000..c57acf63f3 --- /dev/null +++ b/layouts/_partials/hooks/body-end.html @@ -0,0 +1,59 @@ +{{- $basePath := (urls.Parse .Site.BaseURL).Path | default "/" -}} +{{- $localePrefix := cond (eq .Site.Language.Lang "cn") "cn/" "" -}} +{{- $docsRoot := printf "%s%sdocs/" $basePath $localePrefix -}} +{{- $fallbackMessage := T "ui_version_fallback" -}} +{{- $shellConfig := dict + "version" (.Site.Params.version | default "latest") + "locale" .Site.Language.Lang + "docsRoot" $docsRoot + "versionFallbackMessage" $fallbackMessage +-}} + +{{- $shell := resources.Get "js/hugegraph-shell.js" -}} +{{- if hugo.IsProduction }}{{ $shell = $shell | minify | fingerprint }}{{ end }} + + +{{- $ai := partial "ai/config.html" . -}} +{{- if $ai.enabled -}} + {{- $lang := .Site.Language.Lang -}} + {{- $sourceGroup := index $ai.sourceGroups $lang -}} + {{- $themeColor := index .Site.Params.ui "theme_color" -}} + {{- $historical := ne (.Site.Params.version | default "latest") "latest" -}} + {{- $labels := dict + "ask" (T "ui_ask_ai") + "description" (T "ui_ask_ai_description") + "latest" (T "ui_ask_ai_latest") + "retry" (T "ui_retry") + "error" (T "ui_ai_error") + -}} + {{- $clientConfig := dict + "websiteId" $ai.websiteID + "sourceGroupId" $sourceGroup + "locale" (cond (eq $lang "cn") "zh" "en") + "themeColor" $themeColor + "historical" $historical + "labels" $labels + -}} + + + + +

{{ T "ui_ai_consent_description" }}

+ {{ if $historical }}

{{ index $labels "latest" }}.

{{ end }} +

{{ T "ui_ai_privacy" }}

+ +
+
+ {{- $adapter := resources.Get "js/kapa-adapter.js" -}} + {{- if hugo.IsProduction }}{{ $adapter = $adapter | minify | fingerprint }}{{ end }} + +{{- end -}} diff --git a/layouts/_partials/hooks/head-end.html b/layouts/_partials/hooks/head-end.html new file mode 100644 index 0000000000..43baeb1fbb --- /dev/null +++ b/layouts/_partials/hooks/head-end.html @@ -0,0 +1,5 @@ +{{- $themeColor := index .Site.Params.ui "theme_color" | default "" -}} +{{- if not (findRE `^#[0-9a-fA-F]{6}$` $themeColor) -}} + {{- errorf "params.ui.theme_color must be a six-digit hexadecimal color" -}} +{{- end }} + diff --git a/layouts/_partials/landing/sections/community-members.html b/layouts/_partials/landing/sections/community-members.html new file mode 100644 index 0000000000..2e1abd08b0 --- /dev/null +++ b/layouts/_partials/landing/sections/community-members.html @@ -0,0 +1 @@ +{{- partial "community/members.html" (dict "page" .page) -}} diff --git a/layouts/_partials/navbar-item.html b/layouts/_partials/navbar-item.html index a3f2dec9df..d07dd32d2e 100644 --- a/layouts/_partials/navbar-item.html +++ b/layouts/_partials/navbar-item.html @@ -6,7 +6,6 @@ {{- $mode := .mode -}} {{- $index := .index -}} {{- $hasChildren := $entry.HasChildren -}} -{{- $hasVersionLinks := and (eq $entry.Identifier "docs") (gt (len ($page.Site.Params.versions | default slice)) 0) -}} {{- $taxonomyPage := false -}} {{- with $entry.Page -}} {{- if eq .Kind "taxonomy" }}{{ $taxonomyPage = . }}{{ end -}} @@ -28,7 +27,7 @@ {{- end -}} {{- end -}} {{- end -}} -{{- $hasPanel := or $hasChildren $taxonomyPage $hasVersionLinks -}} +{{- $hasPanel := or $hasChildren $taxonomyPage -}} {{- $key := $entry.Identifier | default $entry.Name | urlize -}} {{- $panelID := printf "td-navbar-%s-%s-%d" $mode $key $index -}} @@ -53,19 +52,6 @@ {{ partialCached "navbar-taxonomy-tags.html" (dict "page" $page "taxonomyPage" $taxonomyPage) $page.Site.Language.Lang $taxonomyPage.RelPermalink }} - {{- else if $hasVersionLinks -}} - {{- range $page.Site.Params.versions -}} - {{- $url := strings.TrimSuffix "/" (.url | default "") -}} - {{- if $url -}} - {{- $isActive := eq .version $page.Site.Params.version -}} - - - - - {{- end -}} - {{- end -}} {{- else -}} {{ partial "navbar-group-items.html" (dict "page" $page "items" $entry.Children "mode" "desktop" "top" $entry "depth" 1) }} {{- end }} diff --git a/layouts/_partials/navbar.html b/layouts/_partials/navbar.html index bfcfca10e6..9eeb35de01 100644 --- a/layouts/_partials/navbar.html +++ b/layouts/_partials/navbar.html @@ -53,6 +53,13 @@ {{- /* Right zone: the search box leads as the elastic boundary before the fixed controls โ€” version, language, theme, GitHub. */ -}} {{- end }} @@ -159,15 +152,7 @@ {{- else if and (eq .Identifier "docs") $.Site.Params.versions }}
- {{- range $.Site.Params.versions }} - {{- $url := strings.TrimSuffix "/" (.url | default "") -}} - {{- if $url }} - - - {{ .name | default .version }} - - {{- end }} - {{- end }} + {{ partial "version-menu-links.html" (dict "page" $ "versions" $.Site.Params.versions "class" "td-site-nav__menu-link td-site-nav__menu-child" "key" "landing-mobile") }}
{{- end }} {{- end }} diff --git a/layouts/_partials/print/page-content.html b/layouts/_partials/print/page-content.html new file mode 100644 index 0000000000..2234924f8e --- /dev/null +++ b/layouts/_partials/print/page-content.html @@ -0,0 +1,8 @@ +{{- $page := .page -}} +{{- $page.Store.Set "tdOutputFormat" "print" -}} +{{- if .book }}{{ $page.Store.Set "tdBookAggregate" true }}{{ end -}} +{{- $content := $page.RenderString (dict "display" "block") $page.RawContent -}} +{{- $content = partial "content/static-image-output.html" $content -}} +{{- partial "code/register-rendered-ids.html" (dict "page" $page "content" $content) -}} +{{- if .book }}{{ $page.Store.Delete "tdBookAggregate" }}{{ end -}} +{{- return (printf "%s" $content | safeHTML) -}} diff --git a/layouts/_partials/share/bar.html b/layouts/_partials/share/bar.html new file mode 100644 index 0000000000..39e0820faf --- /dev/null +++ b/layouts/_partials/share/bar.html @@ -0,0 +1,13 @@ +{{- if and .IsPage (eq .Section "blog") -}} +
+
+ +
+
+{{- end -}} diff --git a/layouts/_partials/shell/sidebar-panel.html b/layouts/_partials/shell/sidebar-panel.html index ae86925258..e4a57af25e 100644 --- a/layouts/_partials/shell/sidebar-panel.html +++ b/layouts/_partials/shell/sidebar-panel.html @@ -63,15 +63,7 @@
{{ $.Site.Params.version_menu | default "Version" }}
{{- end }} diff --git a/layouts/_partials/version-link.html b/layouts/_partials/version-link.html new file mode 100644 index 0000000000..3b95544a83 --- /dev/null +++ b/layouts/_partials/version-link.html @@ -0,0 +1,15 @@ +{{- $p := .page -}} +{{- $version := .version -}} +{{- $versionID := $version.version | default ($version.name | urlize) -}} +{{- $target := partial "version-target.html" (dict "page" $p "version" $version) -}} + + {{- if ne .icon false -}} + {{- partialCached "shell/icon.html" "code-branch" .iconKey -}} + {{- end -}} + {{ $version.name | default $version.version | markdownify }} + diff --git a/layouts/_partials/version-menu-links.html b/layouts/_partials/version-menu-links.html new file mode 100644 index 0000000000..6f3bf8117b --- /dev/null +++ b/layouts/_partials/version-menu-links.html @@ -0,0 +1,17 @@ +{{- /* Presentation only: all version targets remain in the document. Native + details provides pointer, touch and keyboard access without a JS dependency. */ -}} +{{- $p := .page -}} +{{- $links := where .versions "url" "ne" "" -}} +{{- range $index, $version := $links -}} + {{- if eq $index 3 }} +
+ โ€ฆ + {{- end }} + {{- $active := eq $version.version $p.Site.Params.version -}} + {{- partial "version-link.html" (dict + "page" $p "version" $version "active" $active "icon" $.icon + "class" (printf "%s%s" $.class (cond $active " td-is-active" "")) + "iconKey" (printf "%s-version-%s" $.key $version.version) + ) -}} +{{- end -}} +{{- if gt (len $links) 3 }}
{{ end -}} diff --git a/layouts/_partials/version-options.html b/layouts/_partials/version-options.html new file mode 100644 index 0000000000..e8c40362c5 --- /dev/null +++ b/layouts/_partials/version-options.html @@ -0,0 +1,22 @@ +{{- $p := . -}} +{{- $options := slice -}} +{{- $baseURL := strings.TrimSuffix "/" $p.Site.BaseURL -}} +{{- range $p.Site.Params.versions -}} + {{- if ne .name "---" -}} + {{- $versionID := .version | default (.name | urlize) -}} + {{- $rawURL := .url | default "" -}} + {{- $available := ne $rawURL "" -}} + {{- $target := partial "version-target.html" (dict "page" $p "version" .) -}} + {{- $options = $options | append (dict + "id" $versionID + "title" (.name | default .version | plainify) + "url" $target.url + "active" (or (eq .version $p.Site.Params.version) (eq $baseURL (strings.TrimSuffix "/" $rawURL))) + "available" $available + "disabledReason" (cond $available "" (printf "URL %s" (T "ui_field_required"))) + "equivalent" $target.equivalent + "fallback" $target.fallback + ) -}} + {{- end -}} +{{- end -}} +{{- return $options -}} diff --git a/layouts/_partials/version-target.html b/layouts/_partials/version-target.html new file mode 100644 index 0000000000..7a989bc5f9 --- /dev/null +++ b/layouts/_partials/version-target.html @@ -0,0 +1,68 @@ +{{- $p := .page -}} +{{- $version := .version -}} +{{- $versionID := $version.version | default ($version.name | urlize) -}} +{{- $rawURL := $version.url | default "" -}} +{{- $versionURL := "" -}} +{{- if $rawURL }}{{ $versionURL = printf "%s/" (strings.TrimSuffix "/" $rawURL) }}{{ end -}} +{{- $target := $versionURL -}} +{{- $equivalent := false -}} +{{- $fallback := false -}} +{{- $relative := strings.TrimPrefix "/" $p.RelPermalink -}} +{{- $locale := $p.Site.Language.Lang -}} +{{- $docsPrefix := cond (eq $locale "cn") "cn/docs/" "docs/" -}} +{{- $docsSuffix := cond (eq $locale "cn") "/cn/docs" "/docs" -}} +{{- $root := strings.TrimSuffix $docsSuffix (strings.TrimSuffix "/" $versionURL) -}} +{{- if and $rawURL (strings.HasPrefix $relative $docsPrefix) -}} + {{- $pages := hugo.Data.version_routes.pages | default dict -}} + {{- $currentVersion := $p.Site.Params.version | default "latest" -}} + {{- $logicalID := $p.Store.Get "hgVersionLogicalID" -}} + {{- if eq $logicalID nil -}} + {{- $logicalID = "" -}} + {{- range $candidateID, $candidateRoutes := $pages -}} + {{- if eq (index $candidateRoutes $currentVersion) $relative -}} + {{- $logicalID = $candidateID -}} + {{- break -}} + {{- end -}} + {{- end -}} + {{- $p.Store.Set "hgVersionLogicalID" $logicalID -}} + {{- end -}} + {{- $routes := cond (ne $logicalID "") (index $pages $logicalID) nil -}} + {{- $path := false -}} + {{- with $routes -}} + {{- $path = index . $versionID -}} + {{- end -}} + {{- if and (not $path) (ne $logicalID "") -}} + {{- $alternates := slice -}} + {{- range hugo.Data.version_routes.equivalents | default (slice) -}} + {{- if in . $logicalID -}} + {{- range . -}} + {{- if ne . $logicalID -}} + {{- $alternateRoutes := index $pages . -}} + {{- with $alternateRoutes -}} + {{- $alternatePath := index . $versionID -}} + {{- with $alternatePath -}} + {{- $alternates = $alternates | append . -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- end -}} + {{- if eq (len $alternates) 1 -}} + {{- $path = index $alternates 0 -}} + {{- end -}} + {{- end -}} + {{- if $path -}} + {{- $target = printf "%s/%s" $root $path -}} + {{- $equivalent = true -}} + {{- else -}} + {{- $docsRoot := cond (eq $locale "cn") "cn/docs/" "docs/" -}} + {{- $target = printf "%s/%s#hg-version-fallback" $root $docsRoot -}} + {{- $fallback = true -}} + {{- end -}} +{{- end -}} +{{- return (dict + "url" $target + "equivalent" $equivalent + "fallback" $fallback +) -}} diff --git a/layouts/_shortcodes/asf-downloads.html b/layouts/_shortcodes/asf-downloads.html new file mode 100644 index 0000000000..f12b800481 --- /dev/null +++ b/layouts/_shortcodes/asf-downloads.html @@ -0,0 +1,8 @@ +{{- /* {{< asf-downloads latest >}} or {{< asf-downloads archived >}}: + ASF release download tables driven by data/downloads/asf.json. The + positional mode is required; a missing mode fails the build instead of + rendering duplicate sections. */ -}} +{{- if or .IsNamedParams (ne (len .Params) 1) -}} + {{- errorf "asf-downloads requires exactly one positional mode (latest or archived) at %s" .Position -}} +{{- end -}} +{{- partial "asf-downloads.html" (dict "page" .Page "mode" (.Get 0) "position" .Position) -}} diff --git a/layouts/community/landing.md b/layouts/community/landing.md new file mode 100644 index 0000000000..e884af8fe5 --- /dev/null +++ b/layouts/community/landing.md @@ -0,0 +1,29 @@ +{{- /* + Community Markdown follows the landing data order. Native OINK sections use + its text renderer unchanged; only the nested roster uses the site partial. +*/ -}} +{{- .Store.Set "tdOutputFormat" "markdown" -}} +# {{ .Title }} + +{{ with .Description }} +> {{ . }} + +{{ end }} + +{{ $page := . -}} +{{- $landing := partial "landing/data.html" . -}} +{{- $chunks := slice -}} +{{- range $entry := ($landing.sections | default slice) -}} + {{- $resolved := partial "landing/entry.html" (dict "home" $landing "entry" $entry) -}} + {{- if and $resolved.enabled $resolved.data -}} + {{- if eq $resolved.type "community-members" -}} + {{- $chunks = $chunks | append (partial "community/members.md" (dict "page" $page) | strings.TrimSpace) -}} + {{- else -}} + {{- $text := partial "landing/text.html" (dict "page" $page "data" (dict "sections" (slice $entry))) | strings.TrimSpace -}} + {{- with $text }} + {{- $chunks = $chunks | append . -}} + {{- end -}} + {{- end -}} + {{- end -}} +{{- end -}} +{{ delimit $chunks "\n\n" | safeHTML }} diff --git a/layouts/landing.html b/layouts/landing.html new file mode 100644 index 0000000000..87dec71594 --- /dev/null +++ b/layouts/landing.html @@ -0,0 +1,6 @@ +{{ define "main" -}} + +{{- $landing := partial "landing/data.html" . -}} +{{- partial "landing/render.html" (dict "page" . "data" $landing) -}} + +{{- end }} diff --git a/layouts/landing.print.html b/layouts/landing.print.html new file mode 100644 index 0000000000..87dec71594 --- /dev/null +++ b/layouts/landing.print.html @@ -0,0 +1,6 @@ +{{ define "main" -}} + +{{- $landing := partial "landing/data.html" . -}} +{{- partial "landing/render.html" (dict "page" . "data" $landing) -}} + +{{- end }} diff --git a/scripts/community_roster.md b/scripts/community_roster.md new file mode 100644 index 0000000000..d317dbc724 --- /dev/null +++ b/scripts/community_roster.md @@ -0,0 +1,41 @@ +# Community roster data + +`roster.json` is the checked-in, visitor-facing snapshot of current Apache +HugeGraph PMC members and Committers. It is generated from the three ASF public +sources recorded in the file: + +```bash +python3 scripts/community_roster.py refresh +python3 scripts/community_roster.py validate --warn-after-days 90 +``` + +`refresh` is a maintainer-run operation. It finishes all source, role, mapping, +and avatar checks before atomically replacing the last-good roster. It never +pushes or opens a pull request. + +`github-map.json` is deliberately maintained by human review. A mapping must +record both the exact GitHub login and the account's numeric GitHub user ID. +Do not derive mappings from a person's name, email address, employer, or commit +history. Leave an ASF ID unmapped until a maintainer has confirmed the account. + +Mapped avatars are downloaded during refresh, converted with `cwebp` when +needed, stripped of metadata, checked as 128 by 128 WebP, and stored under a +SHA-256 content-addressed filename. Unmapped members render initials and link +to the ASF phonebook without requiring JavaScript. + +The fixed `validate` command is fully offline and checks checked-in data, +identity rules, and local avatar files. Render the site separately, then opt in +to artifact checks: + +```bash +hugo --destination /safe/prebuilt/site +python3 scripts/community_roster.py validate \ + --warn-after-days 90 \ + --artifact /safe/prebuilt/site +``` + +The artifact option never invokes Hugo or downloads modules itself. + +Once the verified assets and roster are published, removal of an unreferenced +old avatar is best effort. A cleanup failure emits an Actions warning but does +not invalidate or roll back the complete new bundle. diff --git a/scripts/community_roster.py b/scripts/community_roster.py new file mode 100644 index 0000000000..c72f885fe1 --- /dev/null +++ b/scripts/community_roster.py @@ -0,0 +1,710 @@ +#!/usr/bin/env python3 +"""Refresh and validate the offline Apache HugeGraph community roster.""" + +from __future__ import annotations + +import argparse +import datetime as dt +import hashlib +import html.parser +import json +import os +import pathlib +import re +import shutil +import struct +import subprocess +import sys +import tempfile +import urllib.error +import urllib.parse +import urllib.request + +ROOT = pathlib.Path(__file__).resolve().parents[1] +DATA_DIR = ROOT / "data" / "community" +ROSTER_PATH = DATA_DIR / "roster.json" +MAP_PATH = DATA_DIR / "github-map.json" +AVATAR_DIR = ROOT / "static" / "img" / "community" / "avatars" +PROJECT = "hugegraph" +SCHEMA_VERSION = 1 +SOURCES = { + "committee": "https://whimsy.apache.org/public/committee-info.json", + "projects": "https://whimsy.apache.org/public/public_ldap_projects.json", + "people": "https://whimsy.apache.org/public/public_ldap_people.json", +} +JSON_LIMIT = 16 * 1024 * 1024 +AVATAR_LIMIT = 5 * 1024 * 1024 +ASF_ID_PATTERN = re.compile(r"^[a-z][a-z0-9._-]*$") +GITHUB_LOGIN_PATTERN = re.compile(r"^[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$") +AVATAR_PATH_PATTERN = re.compile(r"^/img/community/avatars/([0-9a-f]{64})\.webp$") + + +class RosterError(ValueError): + pass + + +def _read_json(path: pathlib.Path) -> dict: + try: + result = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as exc: + raise RosterError(f"{path}: invalid JSON: {exc}") from exc + if not isinstance(result, dict): + raise RosterError(f"{path}: JSON root must be an object") + return result + + +def _validate_remote_url(url: str, expected_hosts: set[str], kind: str) -> None: + try: + parsed = urllib.parse.urlparse(url) + port = parsed.port + except ValueError as exc: + raise RosterError(f"{kind}: malformed URL: {url}") from exc + if ( + parsed.scheme != "https" + or parsed.hostname not in expected_hosts + or port not in (None, 443) + or parsed.username is not None + or parsed.password is not None + ): + raise RosterError(f"{kind}: URL is not allowlisted: {url}") + + +class _AllowlistedRedirectHandler(urllib.request.HTTPRedirectHandler): + def __init__(self, expected_hosts: set[str], kind: str): + super().__init__() + self.expected_hosts = expected_hosts + self.kind = kind + + def redirect_request(self, request, fp, code, msg, headers, newurl): + _validate_remote_url(newurl, self.expected_hosts, self.kind) + return super().redirect_request(request, fp, code, msg, headers, newurl) + + +def _open_allowlisted(request: urllib.request.Request, expected_hosts: set[str], kind: str): + _validate_remote_url(request.full_url, expected_hosts, kind) + opener = urllib.request.build_opener(_AllowlistedRedirectHandler(expected_hosts, kind)) + return opener.open(request, timeout=30) + + +def _read_bounded_response(response, *, expected_hosts: set[str], content_types: set[str], limit: int, kind: str) -> bytes: + final_url = response.geturl() + _validate_remote_url(final_url, expected_hosts, kind) + content_type = response.headers.get("Content-Type", "").split(";", 1)[0].strip().lower() + if content_type not in content_types and not (kind == "JSON source" and content_type.endswith("+json")): + raise RosterError(f"{kind}: unsupported Content-Type {content_type!r}") + raw = response.read(limit + 1) + if len(raw) > limit: + raise RosterError(f"{kind}: response exceeds {limit} bytes") + return raw + + +def _fetch_json(url: str) -> dict: + request = urllib.request.Request(url, headers={"User-Agent": "apache-hugegraph-doc-community-roster/1"}) + with _open_allowlisted(request, {"whimsy.apache.org"}, "JSON source") as response: + if response.status != 200: + raise RosterError(f"{url}: HTTP {response.status}") + raw = _read_bounded_response( + response, + expected_hosts={"whimsy.apache.org"}, + content_types={"application/json"}, + limit=JSON_LIMIT, + kind="JSON source", + ) + try: + result = json.loads(raw.decode("utf-8")) + except (UnicodeDecodeError, json.JSONDecodeError) as exc: + raise RosterError(f"{url}: malformed JSON: {exc}") from exc + if not isinstance(result, dict): + raise RosterError(f"{url}: JSON root must be an object") + return result + + +def _person_name(people: dict, asf_id: str) -> str: + if not ASF_ID_PATTERN.fullmatch(asf_id): + raise RosterError(f"invalid ASF ID {asf_id!r}") + records = people.get("people") + if not isinstance(records, dict): + raise RosterError("people source must contain a people object") + record = records.get(asf_id) + name = record.get("name") if isinstance(record, dict) else None + if isinstance(name, list): + name = name[0] if name else "" + if not isinstance(name, str) or not name.strip(): + raise RosterError(f"people source has no public name for ASF ID {asf_id!r}") + return name.strip() + + +def _initials(name: str) -> str: + parts = [part for part in name.replace("-", " ").split() if part] + return "".join(part[0].upper() for part in parts[:2]) or "?" + + +def _sort_key(asf_id: str, names: dict[str, str]) -> tuple[str, str]: + return names[asf_id].casefold(), asf_id.casefold() + + +def _validate_mapping(data: dict, roster_ids: set[str] | None = None) -> dict: + if data.get("schema_version") != SCHEMA_VERSION: + raise RosterError("github-map.json: schema_version must be 1") + mappings = data.get("mappings") + if not isinstance(mappings, dict): + raise RosterError("github-map.json: mappings must be an object") + logins: set[str] = set() + user_ids: set[int] = set() + for asf_id, mapping in mappings.items(): + if not ASF_ID_PATTERN.fullmatch(asf_id): + raise RosterError(f"github-map.json: invalid ASF ID {asf_id!r}") + if roster_ids is not None and asf_id not in roster_ids: + raise RosterError(f"github-map.json: unknown ASF ID {asf_id!r}") + if not isinstance(mapping, dict): + raise RosterError(f"github-map.json: mapping for {asf_id!r} must be an object") + login, user_id = mapping.get("login"), mapping.get("user_id") + if not isinstance(login, str) or not login.strip() or login != login.strip(): + raise RosterError(f"github-map.json: {asf_id!r} needs a reviewed login") + if not GITHUB_LOGIN_PATTERN.fullmatch(login) or "--" in login: + raise RosterError(f"github-map.json: invalid GitHub login {login!r}") + if not isinstance(user_id, int) or isinstance(user_id, bool) or user_id <= 0: + raise RosterError(f"github-map.json: {asf_id!r} needs a positive numeric user_id") + if login.casefold() in logins: + raise RosterError(f"github-map.json: duplicate GitHub login {login!r}") + if user_id in user_ids: + raise RosterError(f"github-map.json: duplicate GitHub user_id {user_id}") + logins.add(login.casefold()) + user_ids.add(user_id) + return mappings + + +def _webp_dimensions(raw: bytes) -> tuple[int, int]: + if len(raw) < 30 or raw[:4] != b"RIFF" or raw[8:12] != b"WEBP": + raise RosterError("avatar is not a WebP image") + chunk = raw[12:16] + if chunk == b"VP8X": + return 1 + int.from_bytes(raw[24:27], "little"), 1 + int.from_bytes(raw[27:30], "little") + if chunk == b"VP8L": + bits = int.from_bytes(raw[21:25], "little") + return 1 + (bits & 0x3FFF), 1 + ((bits >> 14) & 0x3FFF) + if chunk == b"VP8 ": + marker = raw.find(b"\x9d\x01\x2a", 20) + if marker < 0 or marker + 7 > len(raw): + raise RosterError("avatar has an invalid VP8 frame") + width, height = struct.unpack_from(" list[bytes]: + if len(raw) < 20 or raw[:4] != b"RIFF" or raw[8:12] != b"WEBP": + raise RosterError("avatar is not a WebP image") + if int.from_bytes(raw[4:8], "little") != len(raw) - 8: + raise RosterError("avatar has an invalid RIFF length") + kinds: list[bytes] = [] + cursor = 12 + while cursor + 8 <= len(raw): + kind = raw[cursor : cursor + 4] + size = int.from_bytes(raw[cursor + 4 : cursor + 8], "little") + cursor += 8 + size + (size % 2) + if cursor > len(raw): + raise RosterError("avatar has a truncated WebP chunk") + kinds.append(kind) + if cursor != len(raw): + raise RosterError("avatar has trailing WebP data") + return kinds + + +def _validate_webp(raw: bytes, expected_dimensions: tuple[int, int] | None = None) -> tuple[int, int]: + dimensions = _webp_dimensions(raw) + kinds = _webp_chunk_kinds(raw) + if not any(kind in {b"VP8 ", b"VP8L"} for kind in kinds): + raise RosterError("avatar has no decodable WebP image bitstream") + if any(kind in {b"EXIF", b"XMP ", b"ICCP"} for kind in kinds): + raise RosterError("avatar contains metadata") + if expected_dimensions and dimensions != expected_dimensions: + raise RosterError(f"avatar dimensions are {dimensions}, expected {expected_dimensions}") + decoder = shutil.which("dwebp") + if not decoder: + raise RosterError("validating mapped avatars requires dwebp") + with tempfile.TemporaryDirectory(prefix="hugegraph-avatar-decode-") as work: + source = pathlib.Path(work) / "avatar.webp" + target = pathlib.Path(work) / "avatar.ppm" + source.write_bytes(raw) + try: + result = subprocess.run( + [decoder, str(source), "-o", str(target)], + text=True, + capture_output=True, + timeout=20, + ) + except (OSError, subprocess.TimeoutExpired) as exc: + raise RosterError(f"dwebp could not decode avatar: {exc}") from exc + if result.returncode or not target.is_file(): + raise RosterError(f"dwebp rejected avatar: {result.stderr.strip()}") + return dimensions + + +def _strip_webp_metadata(raw: bytes) -> bytes: + """Remove optional metadata chunks while preserving the image bitstream.""" + _webp_dimensions(raw) + chunks: list[bytes] = [] + cursor = 12 + while cursor + 8 <= len(raw): + kind = raw[cursor : cursor + 4] + size = int.from_bytes(raw[cursor + 4 : cursor + 8], "little") + end = cursor + 8 + size + (size % 2) + if end > len(raw): + raise RosterError("avatar has a truncated WebP chunk") + chunk = bytearray(raw[cursor:end]) + if kind not in {b"EXIF", b"XMP ", b"ICCP"}: + if kind == b"VP8X": + chunk[8] &= ~0x2D + chunks.append(bytes(chunk)) + cursor = end + if cursor != len(raw): + raise RosterError("avatar has trailing WebP data") + payload = b"WEBP" + b"".join(chunks) + return b"RIFF" + len(payload).to_bytes(4, "little") + payload + + +def _avatar_bytes(user_id: int) -> bytes: + request = urllib.request.Request( + f"https://avatars.githubusercontent.com/u/{user_id}?s=128&v=4", + headers={"Accept": "image/webp", "User-Agent": "apache-hugegraph-doc-community-roster/1"}, + ) + with _open_allowlisted(request, {"avatars.githubusercontent.com"}, "GitHub avatar") as response: + raw = _read_bounded_response( + response, + expected_hosts={"avatars.githubusercontent.com"}, + content_types={"image/png", "image/jpeg", "image/webp"}, + limit=AVATAR_LIMIT, + kind="GitHub avatar", + ) + try: + raw = _strip_webp_metadata(raw) + except RosterError: + converter = shutil.which("cwebp") + if not converter: + raise RosterError("mapped avatars require cwebp when GitHub does not return WebP") + with tempfile.TemporaryDirectory(prefix="hugegraph-avatar-") as work: + source = pathlib.Path(work) / "source" + target = pathlib.Path(work) / "avatar.webp" + source.write_bytes(raw) + try: + result = subprocess.run( + [converter, "-quiet", "-resize", "128", "128", "-metadata", "none", str(source), "-o", str(target)], + text=True, + capture_output=True, + timeout=20, + ) + except (OSError, subprocess.TimeoutExpired) as exc: + raise RosterError(f"cwebp failed for numeric GitHub user ID {user_id}: {exc}") from exc + if result.returncode: + raise RosterError(f"cwebp failed for numeric GitHub user ID {user_id}: {result.stderr.strip()}") + raw = _strip_webp_metadata(target.read_bytes()) + _validate_webp(raw, expected_dimensions=(128, 128)) + return raw + + +def _member(asf_id: str, name: str, chair: bool, mapping: dict | None) -> dict: + member = { + "asf_id": asf_id, + "name": name, + "initials": _initials(name), + "chair": chair, + "profile_url": f"https://people.apache.org/phonebook.html?uid={asf_id}", + } + if mapping: + member["github"] = {"login": mapping["login"], "user_id": mapping["user_id"]} + return member + + +def build_roster(committee_data: dict, projects_data: dict, people_data: dict, mapping_data: dict) -> dict: + projects = projects_data.get("projects") + committees = committee_data.get("committees") + if not isinstance(projects, dict) or not isinstance(committees, dict): + raise RosterError("ASF sources must contain projects and committees objects") + project = projects.get(PROJECT) + committee = committees.get(PROJECT) + if not isinstance(project, dict) or not isinstance(committee, dict): + raise RosterError("ASF sources do not contain the HugeGraph project") + owners, members = project.get("owners"), project.get("members") + chair_map, committee_roster = committee.get("chair"), committee.get("roster") + if not isinstance(owners, list) or not isinstance(members, list): + raise RosterError("LDAP project owners/members must be arrays") + if any(not isinstance(item, str) or not ASF_ID_PATTERN.fullmatch(item) for item in owners + members): + raise RosterError("LDAP project owners/members contain an invalid ASF ID") + for field, asf_ids in (("owners", owners), ("members", members)): + if len(asf_ids) != len(set(asf_ids)): + raise RosterError(f"LDAP project {field} contains duplicate ASF IDs") + if not isinstance(chair_map, dict) or len(chair_map) != 1: + raise RosterError("committee source must name exactly one Chair") + if not isinstance(committee_roster, dict): + raise RosterError("committee roster must be an object") + if any(not isinstance(item, str) or not ASF_ID_PATTERN.fullmatch(item) for item in [*chair_map, *committee_roster]): + raise RosterError("committee source contains an invalid ASF ID") + owner_ids, member_ids = set(owners), set(members) + chair = next(iter(chair_map)) + if not owner_ids <= member_ids: + raise RosterError("LDAP owners must be a subset of members") + if chair not in owner_ids: + raise RosterError("Chair must be an LDAP owner") + if owner_ids != set(committee_roster): + raise RosterError("committee roster and LDAP owners disagree") + mappings = _validate_mapping(mapping_data, member_ids) + names = {asf_id: _person_name(people_data, asf_id) for asf_id in member_ids} + pmc_ids = [chair] + sorted(owner_ids - {chair}, key=lambda item: _sort_key(item, names)) + committer_ids = sorted(member_ids - owner_ids, key=lambda item: _sort_key(item, names)) + return { + "schema_version": SCHEMA_VERSION, + "project": PROJECT, + "retrieved_at": dt.datetime.now(dt.timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z"), + "source": { + **SOURCES, + "chair": chair, + "owners": sorted(owner_ids), + "members": sorted(member_ids), + }, + "roles": { + "pmc": [_member(i, names[i], i == chair, mappings.get(i)) for i in pmc_ids], + "committers": [_member(i, names[i], False, mappings.get(i)) for i in committer_ids], + }, + } + + +def _install_avatars(candidate: dict, target: pathlib.Path) -> None: + target.mkdir(parents=True, exist_ok=True) + for role in ("pmc", "committers"): + for member in candidate["roles"][role]: + github = member.get("github") + if not github: + continue + raw = _avatar_bytes(github["user_id"]) + digest = hashlib.sha256(raw).hexdigest() + path = target / f"{digest}.webp" + if not path.exists(): + path.write_bytes(raw) + member["avatar"] = f"/img/community/avatars/{path.name}" + member["profile_url"] = f"https://github.com/{github['login']}" + + +def validate_bundle(warn_after_days: int) -> list[str]: + _validate_repo_paths() + roster, mapping = _read_json(ROSTER_PATH), _read_json(MAP_PATH) + if roster.get("schema_version") != SCHEMA_VERSION or roster.get("project") != PROJECT: + raise RosterError("roster.json: unsupported schema_version or project") + roles, source = roster.get("roles"), roster.get("source") + if not isinstance(roles, dict) or set(roles) != {"pmc", "committers"}: + raise RosterError("roster.json: roles must contain only pmc and committers") + if not isinstance(source, dict): + raise RosterError("roster.json: source must be an object") + for key, url in SOURCES.items(): + if source.get(key) != url: + raise RosterError(f"roster.json: source.{key} is not authoritative") + owners, members, chair = source.get("owners"), source.get("members"), source.get("chair") + if not isinstance(owners, list) or not isinstance(members, list): + raise RosterError("roster.json: source owners/members must be arrays") + if any(not isinstance(asf_id, str) or not ASF_ID_PATTERN.fullmatch(asf_id) for asf_id in owners + members): + raise RosterError("roster.json: source owners/members contain an invalid ASF ID") + if owners != sorted(set(owners)) or members != sorted(set(members)): + raise RosterError("roster.json: source owners/members must be sorted and unique") + if not set(owners) <= set(members) or chair not in owners: + raise RosterError("roster.json: invalid owners/members/Chair relationship") + if not isinstance(chair, str) or not ASF_ID_PATTERN.fullmatch(chair): + raise RosterError("roster.json: source Chair must be a valid ASF ID") + pmc, committers = roles["pmc"], roles["committers"] + if not isinstance(pmc, list) or not isinstance(committers, list) or not pmc: + raise RosterError("roster.json: invalid role arrays") + people = pmc + committers + for person in people: + if not isinstance(person, dict): + raise RosterError("roster.json: every role entry must be an object") + asf_id = person.get("asf_id") + if not isinstance(asf_id, str) or not ASF_ID_PATTERN.fullmatch(asf_id): + raise RosterError("roster.json: role entry has an invalid ASF ID") + name = person.get("name") + if not isinstance(name, str) or not name.strip(): + raise RosterError(f"roster.json: member name must be non-empty for {asf_id!r}") + if person.get("initials") != _initials(name): + raise RosterError(f"roster.json: member initials mismatch for {asf_id!r}") + if not isinstance(person.get("profile_url"), str): + raise RosterError(f"roster.json: member profile URL must be a string for {asf_id!r}") + if type(person.get("chair")) is not bool: + raise RosterError(f"roster.json: chair must be boolean for {asf_id!r}") + ids = [person["asf_id"] for person in people] + if len(ids) != len(set(ids)) or set(ids) != set(members): + raise RosterError("roster.json: members must match unique source ASF IDs") + if {p["asf_id"] for p in pmc} != set(owners): + raise RosterError("roster.json: PMC must equal owners") + if {p["asf_id"] for p in committers} != set(members) - set(owners): + raise RosterError("roster.json: Committers must equal members minus owners") + chairs = [person for person in people if person.get("chair") is True] + if len(chairs) != 1 or chairs[0].get("asf_id") != chair or pmc[0] != chairs[0]: + raise RosterError("roster.json: unique Chair must be first in PMC") + for role, entries in roles.items(): + tail = entries[1:] if role == "pmc" else entries + actual_order = [(p["name"].casefold(), p["asf_id"].casefold()) for p in tail] + if actual_order != sorted(actual_order): + raise RosterError(f"roster.json: {role} must be sorted by public name and ASF ID casefold") + mappings = _validate_mapping(mapping, set(ids)) + for person in people: + expected, avatar = mappings.get(person["asf_id"]), person.get("avatar") + if expected != person.get("github"): + raise RosterError(f"roster.json: GitHub mapping drift for {person['asf_id']!r}") + if expected: + match = AVATAR_PATH_PATTERN.fullmatch(avatar) if isinstance(avatar, str) else None + if not match: + raise RosterError(f"roster.json: mapped member {person['asf_id']!r} needs a local avatar") + filename = f"{match.group(1)}.webp" + path = AVATAR_DIR / filename + if path.is_symlink(): + raise RosterError(f"roster.json: avatar must not be a symlink {avatar}") + raw = path.read_bytes() + if hashlib.sha256(raw).hexdigest() != match.group(1): + raise RosterError(f"roster.json: invalid avatar {avatar}") + _validate_webp(raw, expected_dimensions=(128, 128)) + if person["profile_url"] != f"https://github.com/{expected['login']}": + raise RosterError(f"roster.json: mapped profile URL mismatch") + elif avatar: + raise RosterError(f"roster.json: unmapped member has an avatar") + elif person["profile_url"] != f"https://people.apache.org/phonebook.html?uid={person['asf_id']}": + raise RosterError(f"roster.json: unmapped profile URL mismatch for {person['asf_id']!r}") + retrieved_at = roster.get("retrieved_at") + if not isinstance(retrieved_at, str): + raise RosterError("roster.json: retrieved_at must be an ISO-8601 UTC string") + try: + retrieved = dt.datetime.fromisoformat(retrieved_at.replace("Z", "+00:00")) + except (KeyError, TypeError, ValueError) as exc: + raise RosterError("roster.json: retrieved_at must be ISO-8601 UTC") from exc + now = dt.datetime.now(dt.timezone.utc) + if retrieved.tzinfo is None or retrieved > now + dt.timedelta(minutes=5): + raise RosterError("roster.json: retrieved_at is in the future or lacks a timezone") + age = now - retrieved + return [f"community roster is {age.days} days old (threshold: {warn_after_days})"] if age > dt.timedelta(days=warn_after_days) else [] + + +class _CommunityLinkParser(html.parser.HTMLParser): + def __init__(self): + super().__init__(convert_charrefs=True) + self.role_stack: list[str | None] = [] + self.section_order: list[str] = [] + self.links = {"pmc": [], "committers": []} + + def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: + attributes = dict(attrs) + if tag == "section": + role = attributes.get("data-community-role") + if role in self.links: + self.section_order.append(role) + self.role_stack.append(role if role in self.links else None) + elif tag == "a" and self.role_stack and self.role_stack[-1]: + href = attributes.get("href") + if href: + self.links[self.role_stack[-1]].append(href) + + def handle_endtag(self, tag: str) -> None: + if tag == "section" and self.role_stack: + self.role_stack.pop() + + +def _rendered_role_links(rendered: str, html_output: bool) -> dict[str, list[str]]: + if html_output: + parser = _CommunityLinkParser() + parser.feed(rendered) + if parser.section_order != ["pmc", "committers"]: + raise RosterError("Community role section order drift") + return parser.links + starts = {} + for role, heading in (("pmc", "PMC"), ("committers", "Committers")): + match = re.search(rf"(?m)^### {heading}\s*$", rendered) + if not match: + return {"pmc": [], "committers": []} + starts[role] = match.end() + if starts["pmc"] >= starts["committers"]: + return {"pmc": [], "committers": []} + segments = { + "pmc": rendered[starts["pmc"] : starts["committers"]], + "committers": rendered[starts["committers"] :], + } + return { + role: re.findall(r"(?m)^-\s+\[[^\]]+\]\(([^)\s]+)\)", segment) + for role, segment in segments.items() + } + + +def validate_rendered_outputs(destination: pathlib.Path) -> None: + expected = { + "community/index.html": ('data-community-role="pmc"', 'data-community-role="committers"'), + "_print/community/index.html": ('data-community-role="pmc"', 'data-community-role="committers"'), + "community/index.md": ("## Project members", "### PMC", "### Committers"), + "cn/community/index.html": ('data-community-role="pmc"', 'data-community-role="committers"'), + "cn/_print/community/index.html": ('data-community-role="pmc"', 'data-community-role="committers"'), + "cn/community/index.md": ("## ้กน็›ฎๆˆๅ‘˜", "### PMC", "### Committers"), + } + roster_roles = _read_json(ROSTER_PATH)["roles"] + for relative, markers in expected.items(): + path = destination / relative + if not path.is_file(): + raise RosterError(f"rendered output is missing {relative}") + rendered = path.read_text(encoding="utf-8") + if relative.endswith(".html"): + has_markers = all( + re.search(rf'data-community-role=(?:"{role}"|{role})(?:\s|>)', rendered) + for role in ("pmc", "committers") + ) + else: + has_markers = all(marker in rendered for marker in markers) + if not has_markers: + raise RosterError(f"rendered output {relative} is missing Community markers") + rendered_links = _rendered_role_links(rendered, relative.endswith(".html")) + for role, entries in roster_roles.items(): + expected_links = [person["profile_url"] for person in entries] + if rendered_links[role] != expected_links: + raise RosterError(f"rendered output {relative} has {role} link parity drift") + + +def _atomic_write(path: pathlib.Path, raw: bytes) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + descriptor, temporary = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent) + temporary_path = pathlib.Path(temporary) + try: + with os.fdopen(descriptor, "wb") as stream: + stream.write(raw) + stream.flush() + os.fsync(stream.fileno()) + os.replace(temporary_path, path) + finally: + if temporary_path.exists(): + temporary_path.unlink() + + +def _unlink(path: pathlib.Path) -> None: + path.unlink() + + +def _copy_candidate(raw: bytes, destination: pathlib.Path) -> None: + with destination.open("xb") as stream: + stream.write(raw) + stream.flush() + os.fsync(stream.fileno()) + + +def _validate_avatar_blob(name: str, raw: bytes) -> None: + match = re.fullmatch(r"([0-9a-f]{64})\.webp", name) + if not match or hashlib.sha256(raw).hexdigest() != match.group(1): + raise RosterError(f"candidate avatar name/hash mismatch: {name}") + _validate_webp(raw, expected_dimensions=(128, 128)) + + +def _assert_repo_path(path: pathlib.Path, label: str) -> None: + root = ROOT.absolute() + candidate = path.absolute() + try: + relative = candidate.relative_to(root) + except ValueError as exc: + raise RosterError(f"{label} must stay inside the repository") from exc + current = root + if current.is_symlink(): + raise RosterError("repository root must not be a symlink") + for part in relative.parts: + current /= part + if current.is_symlink(): + raise RosterError(f"{label} must not contain symlink path components") + try: + candidate.resolve(strict=False).relative_to(root.resolve(strict=True)) + except (OSError, ValueError) as exc: + raise RosterError(f"{label} resolves outside the repository") from exc + + +def _validate_repo_paths() -> None: + _assert_repo_path(DATA_DIR, "community data directory") + _assert_repo_path(ROSTER_PATH, "community roster") + _assert_repo_path(MAP_PATH, "GitHub mapping") + _assert_repo_path(AVATAR_DIR, "community avatar directory") + + +def _commit_bundle(candidate: dict, candidate_avatars: dict[str, bytes]) -> None: + """Install verified immutable assets, then atomically publish the roster.""" + _validate_repo_paths() + AVATAR_DIR.mkdir(parents=True, exist_ok=True) + referenced = { + pathlib.PurePosixPath(person["avatar"]).name + for role in candidate["roles"].values() + for person in role + if person.get("avatar") + } + existing = {path.name: path for path in AVATAR_DIR.glob("*.webp")} + for name, avatar in sorted(candidate_avatars.items()): + _validate_avatar_blob(name, avatar) + destination = AVATAR_DIR / name + if destination.exists() or destination.is_symlink(): + try: + if destination.is_symlink(): + raise RosterError(f"candidate destination is a symlink: {destination}") + _validate_avatar_blob(name, destination.read_bytes()) + continue + except RosterError: + pass + staged = AVATAR_DIR / f".{name}.candidate" + try: + _copy_candidate(avatar, staged) + os.replace(staged, destination) + finally: + if staged.exists(): + _unlink(staged) + raw = (json.dumps(candidate, indent=2, ensure_ascii=False) + "\n").encode() + # This atomic replace is the commit point. Failures before it leave the + # last-good roster selected; installed content-addressed assets are safe + # unreferenced candidates. + _atomic_write(ROSTER_PATH, raw) + for name in sorted(set(existing) - referenced): + try: + _unlink(AVATAR_DIR / name) + except OSError as exc: + print( + f"::warning file=static/img/community/avatars/{name}::" + f"could not remove unreferenced avatar: {exc}", + file=sys.stderr, + ) + + +def refresh() -> None: + _validate_repo_paths() + DATA_DIR.mkdir(parents=True, exist_ok=True) + source_data = {key: _fetch_json(url) for key, url in SOURCES.items()} + candidate = build_roster(source_data["committee"], source_data["projects"], source_data["people"], _read_json(MAP_PATH)) + work = pathlib.Path(tempfile.mkdtemp(prefix=".community-refresh-", dir=DATA_DIR)) + try: + candidate_avatars = work / "avatars" + _install_avatars(candidate, candidate_avatars) + avatar_bytes = {path.name: path.read_bytes() for path in candidate_avatars.glob("*.webp")} + finally: + # Candidate cleanup is deliberately completed before the checked-in + # bundle changes, so cleanup failure cannot publish a new roster. + shutil.rmtree(work) + _commit_bundle(candidate, avatar_bytes) + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__) + commands = parser.add_subparsers(dest="command", required=True) + commands.add_parser("refresh") + validate = commands.add_parser("validate") + validate.add_argument("--warn-after-days", type=int, default=90) + validate.add_argument("--artifact", type=pathlib.Path, help="validate a prebuilt Hugo artifact") + args = parser.parse_args() + try: + if args.command == "refresh": + refresh() + else: + if args.warn_after_days < 0: + raise RosterError("--warn-after-days must be non-negative") + for warning in validate_bundle(args.warn_after_days): + print(f"::warning file=data/community/roster.json::{warning}") + if args.artifact: + validate_rendered_outputs(args.artifact.resolve()) + except (OSError, RosterError, urllib.error.URLError) as exc: + print(f"community roster: {exc}", file=sys.stderr) + return 1 + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/scripts/fixtures/community_search_queries.json b/scripts/fixtures/community_search_queries.json new file mode 100644 index 0000000000..a65cfdcb3c --- /dev/null +++ b/scripts/fixtures/community_search_queries.json @@ -0,0 +1,26 @@ +[ + {"locale": "en", "query": "HugeGraph overview", "expected_ref": "/docs/introduction/"}, + {"locale": "en", "query": "server quickstart", "expected_ref": "/docs/quickstart/hugegraph/hugegraph-server/"}, + {"locale": "en", "query": "distributed storage", "expected_ref": "/docs/quickstart/hugegraph/hugegraph-hstore/"}, + {"locale": "en", "query": "placement driver", "expected_ref": "/docs/quickstart/hugegraph/hugegraph-pd/"}, + {"locale": "en", "query": "graph computing", "expected_ref": "/docs/quickstart/computing/hugegraph-computer/"}, + {"locale": "en", "query": "bulk import", "expected_ref": "/docs/quickstart/toolchain/hugegraph-loader/"}, + {"locale": "en", "query": "graph visualization", "expected_ref": "/docs/quickstart/toolchain/hugegraph-hubble/"}, + {"locale": "en", "query": "Java client", "expected_ref": "/docs/clients/"}, + {"locale": "en", "query": "HugeGraph REST API", "expected_ref": "/docs/clients/restful-api/"}, + {"locale": "en", "query": "server config", "expected_ref": "/docs/config/config-guide/"}, + {"locale": "en", "query": "StandardAuthenticator", "expected_ref": "/docs/config/config-authentication/"}, + {"locale": "en", "query": "release artifacts", "expected_ref": "/docs/download/download/"}, + {"locale": "cn", "query": "HugeGraph ไป‹็ป", "expected_ref": "/cn/docs/introduction/"}, + {"locale": "cn", "query": "Server ๅฟซ้€Ÿๅผ€ๅง‹", "expected_ref": "/cn/docs/quickstart/hugegraph/hugegraph-server/"}, + {"locale": "cn", "query": "ๅˆ†ๅธƒๅผๅญ˜ๅ‚จ", "expected_ref": "/cn/docs/quickstart/hugegraph/hugegraph-hstore/"}, + {"locale": "cn", "query": "ๅ…ƒๆ•ฐๆฎ็ฎก็†", "expected_ref": "/cn/docs/quickstart/hugegraph/hugegraph-pd/"}, + {"locale": "cn", "query": "ๅ›พ่ฎก็ฎ—", "expected_ref": "/cn/docs/quickstart/computing/hugegraph-computer/"}, + {"locale": "cn", "query": "ๆ‰น้‡ๅฏผๅ…ฅ", "expected_ref": "/cn/docs/quickstart/toolchain/hugegraph-loader/"}, + {"locale": "cn", "query": "ๅ›พๅฏ่ง†ๅŒ–", "expected_ref": "/cn/docs/quickstart/toolchain/hugegraph-hubble/"}, + {"locale": "cn", "query": "Java ๅฎขๆˆท็ซฏ", "expected_ref": "/cn/docs/clients/"}, + {"locale": "cn", "query": "HugeGraph REST API", "expected_ref": "/cn/docs/clients/restful-api/"}, + {"locale": "cn", "query": "Server ้…็ฝฎ", "expected_ref": "/cn/docs/config/config-guide/"}, + {"locale": "cn", "query": "ๆƒ้™้…็ฝฎ", "expected_ref": "/cn/docs/config/config-authentication/"}, + {"locale": "cn", "query": "ๅ‘ๅธƒๅŒ…", "expected_ref": "/cn/docs/download/download/"} +] diff --git a/scripts/hugo.sh b/scripts/hugo.sh new file mode 100755 index 0000000000..6b1b4c8ed7 --- /dev/null +++ b/scripts/hugo.sh @@ -0,0 +1,111 @@ +#!/bin/sh +set -eu + +usage() { + printf '%s\n' \ + "Usage: scripts/hugo.sh server [Hugo arguments...]" \ + " scripts/hugo.sh build [Hugo arguments...]" +} + +if [ "$#" -eq 0 ]; then + usage >&2 + exit 2 +fi + +mode=$1 +shift +case "$mode" in + server|build) ;; + *) + usage >&2 + exit 2 + ;; +esac + +script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +repo_dir=$(dirname "$script_dir") +cd "$repo_dir" + +# Sniff the documented origin/port spellings so the generated version config +# stays aligned with the origin Hugo itself will use. Every argument is still +# forwarded to Hugo unchanged; pflag's last-wins handling resolves overrides. +port= +base_url= +previous= +for argument in "$@"; do + case "$previous" in + --baseURL|-b) base_url=$argument ;; + --port|-p) port=$argument ;; + esac + case "$argument" in + --baseURL=*) base_url=${argument#*=} ;; + -b=*) base_url=${argument#-b=} ;; + -b?*) base_url=${argument#-b} ;; + --port=*) port=${argument#*=} ;; + -p=*) port=${argument#-p=} ;; + -p?*) port=${argument#-p} ;; + esac + previous=$argument +done + +if [ -n "$base_url" ]; then + site_origin=$base_url +elif [ -n "${HG_DOC_SITE_ORIGIN:-}" ]; then + site_origin=$HG_DOC_SITE_ORIGIN +elif [ "$mode" = "server" ]; then + site_origin="http://localhost:${port:-1313}/" +else + site_origin="https://hugegraph.apache.org/" +fi +case "$site_origin" in + http://*|https://*) ;; + *) printf 'scripts/hugo.sh: invalid site origin: %s\n' "$site_origin" >&2; exit 2 ;; +esac + +temp_dir=$(mktemp -d "${TMPDIR:-/tmp}/hugegraph-hugo.XXXXXX") +config_file=$temp_dir/version-config.json +cleanup() { + if [ -d "$temp_dir" ]; then + rm -f -- "$config_file" + rmdir -- "$temp_dir" + fi +} +trap cleanup 0 HUP INT TERM + +python_bin=${PYTHON_BIN:-python3} +hugo_bin=${HUGO_BIN:-hugo} +( + set -- scripts/versioning.py config \ + --site-origin "$site_origin" \ + --output "$config_file" + if [ -n "${HG_DOC_VERSION:-}" ]; then + set -- "$@" --version "$HG_DOC_VERSION" + fi + if [ -n "${HG_DOC_HISTORICAL_ORIGIN:-}" ]; then + set -- "$@" --historical-origin "$HG_DOC_HISTORICAL_ORIGIN" + fi + exec "$python_bin" "$@" +) + +if [ "$mode" = "server" ]; then + if [ -n "$base_url" ] || [ -n "${HG_DOC_SITE_ORIGIN:-}" ]; then + "$hugo_bin" server \ + --config "hugo.yaml,$config_file" \ + --appendPort=false \ + "$@" + else + "$hugo_bin" server --config "hugo.yaml,$config_file" "$@" + fi +else + "$hugo_bin" \ + --config "hugo.yaml,$config_file" \ + --cleanDestinationDir \ + --gc \ + --minify \ + --environment production \ + --printPathWarnings \ + --printI18nWarnings \ + --panicOnWarning \ + --logLevel info \ + "$@" +fi diff --git a/scripts/test_community_roster.py b/scripts/test_community_roster.py new file mode 100644 index 0000000000..c50c0fcc7f --- /dev/null +++ b/scripts/test_community_roster.py @@ -0,0 +1,785 @@ +import hashlib +import importlib.util +import json +import os +import pathlib +import re +import shutil +import subprocess +import sys +import tempfile +import unittest +from unittest import mock + +ROOT = pathlib.Path(__file__).resolve().parents[1] +SPEC = importlib.util.spec_from_file_location("community_roster", ROOT / "scripts" / "community_roster.py") +roster = importlib.util.module_from_spec(SPEC) +assert SPEC.loader +SPEC.loader.exec_module(roster) + + +class FakeResponse: + def __init__(self, raw, *, url, content_type, status=200): + self.raw = raw + self.url = url + self.headers = {"Content-Type": content_type} + self.status = status + + def __enter__(self): + return self + + def __exit__(self, *_args): + return False + + def geturl(self): + return self.url + + def read(self, limit=-1): + return self.raw if limit < 0 else self.raw[:limit] + + +class CommunityRosterTests(unittest.TestCase): + def fixture(self): + return ( + {"committees": {"hugegraph": {"chair": {"chair": {"name": "Chair Person"}}, "roster": {"chair": {}, "zeta": {}}}}}, + {"projects": {"hugegraph": {"owners": ["zeta", "chair"], "members": ["other", "zeta", "chair"]}}}, + {"people": {"chair": {"name": "Chair Person"}, "zeta": {"name": "Alpha Owner"}, "other": {"name": "Beta Committer"}}}, + {"schema_version": 1, "mappings": {}}, + ) + + def test_build_roster_derives_roles_and_order(self): + candidate = roster.build_roster(*self.fixture()) + self.assertEqual(["chair", "zeta"], [p["asf_id"] for p in candidate["roles"]["pmc"]]) + self.assertEqual(["other"], [p["asf_id"] for p in candidate["roles"]["committers"]]) + self.assertTrue(candidate["roles"]["pmc"][0]["chair"]) + + def test_same_names_use_asf_id_tiebreaker_across_hash_seeds(self): + program = f""" +import importlib.util, json +spec = importlib.util.spec_from_file_location("community_roster", {str(ROOT / "scripts/community_roster.py")!r}) +module = importlib.util.module_from_spec(spec) +spec.loader.exec_module(module) +committee = {{"committees": {{"hugegraph": {{"chair": {{"chair": {{}}}}, "roster": {{"chair": {{}}, "zeta": {{}}, "alpha": {{}}}}}}}}}} +projects = {{"projects": {{"hugegraph": {{"owners": ["zeta", "chair", "alpha"], "members": ["zeta", "chair", "alpha"]}}}}}} +people = {{"people": {{"chair": {{"name": "Chair"}}, "zeta": {{"name": "Same Name"}}, "alpha": {{"name": "Same Name"}}}}}} +result = module.build_roster(committee, projects, people, {{"schema_version": 1, "mappings": {{}}}}) +print(json.dumps([person["asf_id"] for person in result["roles"]["pmc"]])) +""" + outputs = [] + for seed in ("1", "777"): + environment = {**os.environ, "PYTHONHASHSEED": seed} + outputs.append(subprocess.check_output([sys.executable, "-c", program], env=environment, text=True)) + self.assertEqual(outputs[0], outputs[1]) + self.assertEqual(["chair", "alpha", "zeta"], json.loads(outputs[0])) + + def test_build_roster_rejects_committee_ldap_drift(self): + committee, projects, people, mapping = self.fixture() + committee["committees"]["hugegraph"]["roster"].pop("zeta") + with self.assertRaisesRegex(roster.RosterError, "disagree"): + roster.build_roster(committee, projects, people, mapping) + + def test_build_roster_rejects_duplicate_ldap_ids(self): + for field in ("owners", "members"): + with self.subTest(field=field): + committee, projects, people, mapping = self.fixture() + projects["projects"]["hugegraph"][field].append( + projects["projects"]["hugegraph"][field][0] + ) + with self.assertRaisesRegex( + roster.RosterError, + rf"LDAP project {field} contains duplicate ASF IDs", + ): + roster.build_roster(committee, projects, people, mapping) + + def test_mapping_requires_unique_numeric_ids(self): + mapping = {"schema_version": 1, "mappings": {"one": {"login": "same", "user_id": 1}, "two": {"login": "other", "user_id": 1}}} + with self.assertRaisesRegex(roster.RosterError, "duplicate GitHub user_id"): + roster._validate_mapping(mapping, {"one", "two"}) + + def test_mapping_rejects_invalid_identity_characters(self): + with self.assertRaisesRegex(roster.RosterError, "invalid ASF ID"): + roster._validate_mapping( + {"schema_version": 1, "mappings": {"Bad ID": {"login": "valid", "user_id": 1}}}, + {"Bad ID"}, + ) + with self.assertRaisesRegex(roster.RosterError, "invalid GitHub login"): + roster._validate_mapping( + {"schema_version": 1, "mappings": {"valid": {"login": "bad/login", "user_id": 1}}}, + {"valid"}, + ) + + def test_avatar_metadata_is_stripped(self): + vp8x = b"VP8X" + (10).to_bytes(4, "little") + bytes([0x2D]) + b"\0" * 9 + exif = b"EXIF" + (4).to_bytes(4, "little") + b"meta" + iccp = b"ICCP" + (4).to_bytes(4, "little") + b"icc!" + payload = b"WEBP" + vp8x + exif + iccp + raw = b"RIFF" + len(payload).to_bytes(4, "little") + payload + stripped = roster._strip_webp_metadata(raw) + self.assertNotIn(b"EXIF", stripped) + self.assertNotIn(b"ICCP", stripped) + self.assertEqual(0, stripped[20] & 0x2D) + + def test_truncated_vp8x_without_image_bitstream_is_rejected(self): + vp8x = b"VP8X" + (10).to_bytes(4, "little") + b"\0" * 10 + payload = b"WEBP" + vp8x + raw = b"RIFF" + len(payload).to_bytes(4, "little") + payload + with self.assertRaisesRegex(roster.RosterError, "no decodable"): + roster._validate_webp(raw) + + def test_network_response_contracts_are_bounded_and_allowlisted(self): + with self.assertRaisesRegex(roster.RosterError, "not allowlisted"): + roster._read_bounded_response( + FakeResponse(b"{}", url="https://evil.example/data", content_type="application/json"), + expected_hosts={"whimsy.apache.org"}, + content_types={"application/json"}, + limit=10, + kind="JSON source", + ) + with self.assertRaisesRegex(roster.RosterError, "Content-Type"): + roster._read_bounded_response( + FakeResponse(b"{}", url="https://whimsy.apache.org/data", content_type="text/html"), + expected_hosts={"whimsy.apache.org"}, + content_types={"application/json"}, + limit=10, + kind="JSON source", + ) + with self.assertRaisesRegex(roster.RosterError, "exceeds"): + roster._read_bounded_response( + FakeResponse(b"x" * 11, url="https://whimsy.apache.org/data", content_type="application/json"), + expected_hosts={"whimsy.apache.org"}, + content_types={"application/json"}, + limit=10, + kind="JSON source", + ) + + def test_redirect_is_rejected_before_following_disallowed_host(self): + handler = roster._AllowlistedRedirectHandler({"whimsy.apache.org"}, "JSON source") + with self.assertRaisesRegex(roster.RosterError, "not allowlisted"): + handler.redirect_request( + mock.Mock(), + None, + 302, + "Found", + {}, + "http://127.0.0.1/private", + ) + + def test_malformed_json_and_encoder_timeout_are_roster_errors(self): + response = FakeResponse( + b"{bad", + url="https://whimsy.apache.org/public/committee-info.json", + content_type="application/json", + ) + with mock.patch.object(roster, "_open_allowlisted", return_value=response): + with self.assertRaisesRegex(roster.RosterError, "malformed JSON"): + roster._fetch_json(roster.SOURCES["committee"]) + avatar = FakeResponse( + b"not-an-image", + url="https://avatars.githubusercontent.com/u/1?s=128&v=4", + content_type="image/png", + ) + with mock.patch.object(roster, "_open_allowlisted", return_value=avatar), \ + mock.patch.object(roster.shutil, "which", return_value="/fake/cwebp"), \ + mock.patch.object(roster.subprocess, "run", side_effect=subprocess.TimeoutExpired("cwebp", 20)): + with self.assertRaisesRegex(roster.RosterError, "cwebp failed"): + roster._avatar_bytes(1) + + def test_nested_source_schema_errors_are_roster_errors(self): + committee, projects, people, mapping = self.fixture() + projects["projects"] = [] + with self.assertRaisesRegex(roster.RosterError, "projects and committees objects"): + roster.build_roster(committee, projects, people, mapping) + committee, projects, people, mapping = self.fixture() + projects["projects"]["hugegraph"]["owners"] = [[]] + with self.assertRaisesRegex(roster.RosterError, "invalid ASF ID"): + roster.build_roster(committee, projects, people, mapping) + with tempfile.TemporaryDirectory(prefix="community-json-root-") as directory: + path = pathlib.Path(directory) / "array.json" + path.write_text("[]") + with self.assertRaisesRegex(roster.RosterError, "JSON root must be an object"): + roster._read_json(path) + + def test_checked_in_bundle_validates(self): + self.assertEqual([], roster.validate_bundle(90)) + + def test_unmapped_profile_must_be_exact_phonebook_url(self): + with tempfile.TemporaryDirectory(prefix="community-profile-test-") as directory: + root = pathlib.Path(directory) + candidate = json.loads(roster.ROSTER_PATH.read_text()) + candidate["roles"]["committers"][0]["profile_url"] = "https://example.invalid/profile" + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(roster.MAP_PATH.read_text()) + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"): + with self.assertRaisesRegex(roster.RosterError, "unmapped profile URL mismatch"): + roster.validate_bundle(90) + + def test_chair_values_must_be_strict_booleans(self): + with tempfile.TemporaryDirectory(prefix="community-chair-test-") as directory: + root = pathlib.Path(directory) + candidate = json.loads(roster.ROSTER_PATH.read_text()) + candidate["roles"]["committers"][0]["chair"] = 0 + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(roster.MAP_PATH.read_text()) + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"): + with self.assertRaisesRegex(roster.RosterError, "chair must be boolean"): + roster.validate_bundle(90) + + def test_avatar_path_rejects_extra_segments_and_symlinks(self): + base = json.loads(roster.ROSTER_PATH.read_text()) + asf_id = base["roles"]["committers"][0]["asf_id"] + mapping = {"schema_version": 1, "mappings": {asf_id: {"login": "valid-user", "user_id": 1}}} + for avatar in ( + "/img/community/avatars/extra/" + "a" * 64 + ".webp", + "/img/community/avatars/../" + "a" * 64 + ".webp", + ): + with self.subTest(avatar=avatar), tempfile.TemporaryDirectory(prefix="community-avatar-path-") as directory: + root = pathlib.Path(directory) + candidate = json.loads(json.dumps(base)) + member = next(p for p in candidate["roles"]["committers"] if p["asf_id"] == asf_id) + member.update(github=mapping["mappings"][asf_id], avatar=avatar, profile_url="https://github.com/valid-user") + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(json.dumps(mapping)) + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"): + with self.assertRaisesRegex(roster.RosterError, "needs a local avatar"): + roster.validate_bundle(90) + with tempfile.TemporaryDirectory(prefix="community-avatar-link-") as directory: + root = pathlib.Path(directory) + avatar_dir = root / "avatars" + avatar_dir.mkdir() + raw = b"target" + digest = hashlib.sha256(raw).hexdigest() + target = root / "target.webp" + target.write_bytes(raw) + (avatar_dir / f"{digest}.webp").symlink_to(target) + candidate = json.loads(json.dumps(base)) + member = next(p for p in candidate["roles"]["committers"] if p["asf_id"] == asf_id) + member.update( + github=mapping["mappings"][asf_id], + avatar=f"/img/community/avatars/{digest}.webp", + profile_url="https://github.com/valid-user", + ) + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(json.dumps(mapping)) + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "AVATAR_DIR", avatar_dir): + with self.assertRaisesRegex(roster.RosterError, "must not be a symlink"): + roster.validate_bundle(90) + + def test_avatar_directory_parent_symlink_is_rejected(self): + with tempfile.TemporaryDirectory(prefix="community-avatar-parent-") as directory: + root = pathlib.Path(directory) + outside = root / "outside" + outside.mkdir() + avatar_link = root / "static" / "img" / "community" / "avatars" + avatar_link.parent.mkdir(parents=True) + avatar_link.symlink_to(outside, target_is_directory=True) + with mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root / "data" / "community"), \ + mock.patch.object(roster, "ROSTER_PATH", root / "data" / "community" / "roster.json"), \ + mock.patch.object(roster, "MAP_PATH", root / "data" / "community" / "github-map.json"), \ + mock.patch.object(roster, "AVATAR_DIR", avatar_link): + with self.assertRaisesRegex(roster.RosterError, "symlink path components"): + roster._validate_repo_paths() + + def test_member_name_and_initials_must_be_non_empty_and_derived(self): + base = json.loads(roster.ROSTER_PATH.read_text()) + mapping = json.loads(roster.MAP_PATH.read_text()) + for field, value, message in ( + ("name", "", "name must be non-empty"), + ("initials", "", "initials mismatch"), + ): + with self.subTest(field=field), tempfile.TemporaryDirectory(prefix="community-identity-") as directory: + root = pathlib.Path(directory) + candidate = json.loads(json.dumps(base)) + candidate["roles"]["committers"][0][field] = value + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(json.dumps(mapping)) + with mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"): + with self.assertRaisesRegex(roster.RosterError, message): + roster.validate_bundle(90) + + def test_local_roster_schema_errors_are_roster_errors(self): + base = json.loads(roster.ROSTER_PATH.read_text()) + mapping = json.loads(roster.MAP_PATH.read_text()) + mutations = ( + ("asf_id", [], "invalid ASF ID"), + ("name", 123, "name must be non-empty"), + ("retrieved_at", None, "ISO-8601 UTC string"), + ) + for field, value, message in mutations: + with self.subTest(field=field), tempfile.TemporaryDirectory(prefix="community-schema-") as directory: + root = pathlib.Path(directory) + candidate = json.loads(json.dumps(base)) + if field == "retrieved_at": + candidate[field] = value + else: + candidate["roles"]["committers"][0][field] = value + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(json.dumps(mapping)) + with mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"): + with self.assertRaisesRegex(roster.RosterError, message): + roster.validate_bundle(90) + + def test_refresh_validates_paths_before_creating_data_directory(self): + with tempfile.TemporaryDirectory(prefix="community-refresh-path-") as directory: + root = pathlib.Path(directory) + outside = root / "outside" + outside.mkdir() + (root / "data").symlink_to(outside, target_is_directory=True) + data_dir = root / "data" / "community" + with mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", data_dir), \ + mock.patch.object(roster, "ROSTER_PATH", data_dir / "roster.json"), \ + mock.patch.object(roster, "MAP_PATH", data_dir / "github-map.json"), \ + mock.patch.object(roster, "AVATAR_DIR", root / "static" / "img" / "community" / "avatars"): + with self.assertRaisesRegex(roster.RosterError, "symlink path components"): + roster.refresh() + self.assertFalse((outside / "community").exists()) + + def test_validator_rejects_same_name_out_of_asf_id_order(self): + committee, projects, people, mapping = self.fixture() + committee["committees"]["hugegraph"]["roster"]["alpha"] = {} + projects["projects"]["hugegraph"]["owners"].append("alpha") + projects["projects"]["hugegraph"]["members"].append("alpha") + people["people"]["zeta"]["name"] = "Same Name" + people["people"]["alpha"] = {"name": "Same Name"} + candidate = roster.build_roster(committee, projects, people, mapping) + candidate["roles"]["pmc"][1:] = reversed(candidate["roles"]["pmc"][1:]) + with tempfile.TemporaryDirectory(prefix="community-order-test-") as directory: + root = pathlib.Path(directory) + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_text(json.dumps(candidate)) + map_path.write_text(json.dumps(mapping)) + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"): + with self.assertRaisesRegex(roster.RosterError, "sorted by public name"): + roster.validate_bundle(90) + + def test_fetch_failure_preserves_last_good(self): + original, old_fetch = roster.ROSTER_PATH.read_bytes(), roster._fetch_json + try: + roster._fetch_json = lambda _url: (_ for _ in ()).throw(OSError("network down")) + with self.assertRaises(OSError): + roster.refresh() + finally: + roster._fetch_json = old_fetch + self.assertEqual(original, roster.ROSTER_PATH.read_bytes()) + + def test_refresh_duplicate_ldap_ids_preserves_last_good(self): + for field in ("owners", "members"): + with self.subTest(field=field), tempfile.TemporaryDirectory( + prefix="community-duplicate-test-" + ) as directory: + root = pathlib.Path(directory) + data_dir = root / "data" + roster_path, map_path = data_dir / "roster.json", data_dir / "github-map.json" + data_dir.mkdir() + roster_path.write_bytes(b"last-good\n") + committee, projects, people, mapping = self.fixture() + projects["projects"]["hugegraph"][field].append( + projects["projects"]["hugegraph"][field][0] + ) + sources = { + roster.SOURCES["committee"]: committee, + roster.SOURCES["projects"]: projects, + roster.SOURCES["people"]: people, + } + map_path.write_text(json.dumps(mapping)) + with mock.patch.object(roster, "ROOT", root), \ + mock.patch.object(roster, "DATA_DIR", data_dir), \ + mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "AVATAR_DIR", root / "avatars"), \ + mock.patch.object(roster, "_fetch_json", side_effect=sources.__getitem__), \ + mock.patch.object(roster, "_commit_bundle") as commit: + with self.assertRaisesRegex( + roster.RosterError, + rf"LDAP project {field} contains duplicate ASF IDs", + ): + roster.refresh() + commit.assert_not_called() + self.assertEqual(b"last-good\n", roster_path.read_bytes()) + + def test_copy_failure_preserves_last_good_bundle(self): + with tempfile.TemporaryDirectory(prefix="community-copy-test-") as directory: + root = pathlib.Path(directory) + roster_path, avatar_dir = root / "roster.json", root / "avatars" + avatar_dir.mkdir() + roster_path.write_bytes(b"last-good\n") + (avatar_dir / "old.webp").write_bytes(b"old") + candidate = {"roles": {"pmc": [{"avatar": "/img/community/avatars/new.webp"}], "committers": []}} + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "AVATAR_DIR", avatar_dir), \ + mock.patch.object(roster, "_validate_repo_paths"), \ + mock.patch.object(roster, "_validate_avatar_blob"), \ + mock.patch.object(roster, "_copy_candidate", side_effect=OSError("copy failed")): + with self.assertRaisesRegex(OSError, "copy failed"): + roster._commit_bundle(candidate, {"new.webp": b"new"}) + self.assertEqual(b"last-good\n", roster_path.read_bytes()) + self.assertEqual(b"old", (avatar_dir / "old.webp").read_bytes()) + + def test_candidate_cleanup_failure_does_not_publish_roster(self): + with tempfile.TemporaryDirectory(prefix="community-cleanup-test-") as directory: + root = pathlib.Path(directory) + roster_path, map_path = root / "roster.json", root / "github-map.json" + roster_path.write_bytes(b"last-good\n") + map_path.write_text('{"schema_version": 1, "mappings": {}}') + candidate = {"roles": {"pmc": [], "committers": []}} + with mock.patch.object(roster, "DATA_DIR", root), \ + mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "MAP_PATH", map_path), \ + mock.patch.object(roster, "_validate_repo_paths"), \ + mock.patch.object(roster, "_fetch_json", return_value={}), \ + mock.patch.object(roster, "build_roster", return_value=candidate), \ + mock.patch.object(roster, "_install_avatars"), \ + mock.patch.object(roster.shutil, "rmtree", side_effect=OSError("cleanup failed")): + with self.assertRaisesRegex(OSError, "cleanup failed"): + roster.refresh() + self.assertEqual(b"last-good\n", roster_path.read_bytes()) + + def test_atomic_roster_write_failure_keeps_last_good_selected(self): + with tempfile.TemporaryDirectory(prefix="community-write-test-") as directory: + root = pathlib.Path(directory) + roster_path, avatar_dir = root / "roster.json", root / "avatars" + avatar_dir.mkdir() + roster_path.write_bytes(b"last-good\n") + candidate = {"roles": {"pmc": [{"avatar": "/img/community/avatars/new.webp"}], "committers": []}} + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "AVATAR_DIR", avatar_dir), \ + mock.patch.object(roster, "_validate_repo_paths"), \ + mock.patch.object(roster, "_validate_avatar_blob"), \ + mock.patch.object(roster, "_atomic_write", side_effect=OSError("write failed")): + with self.assertRaisesRegex(OSError, "write failed"): + roster._commit_bundle(candidate, {"new.webp": b"new"}) + self.assertEqual(b"last-good\n", roster_path.read_bytes()) + + def test_orphan_unlink_failure_is_a_successful_commit_warning(self): + with tempfile.TemporaryDirectory(prefix="community-unlink-test-") as directory: + root = pathlib.Path(directory) + roster_path, avatar_dir = root / "roster.json", root / "avatars" + avatar_dir.mkdir() + roster_path.write_bytes(b"last-good\n") + (avatar_dir / "old.webp").write_bytes(b"old") + candidate = {"roles": {"pmc": [{"avatar": "/img/community/avatars/new.webp"}], "committers": []}} + real_unlink, failed = roster._unlink, False + + def fail_once(path): + nonlocal failed + if path.name == "old.webp" and not failed: + failed = True + raise OSError("unlink failed") + real_unlink(path) + + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "AVATAR_DIR", avatar_dir), \ + mock.patch.object(roster, "_validate_repo_paths"), \ + mock.patch.object(roster, "_validate_avatar_blob"), \ + mock.patch.object(roster, "_unlink", side_effect=fail_once): + roster._commit_bundle(candidate, {"new.webp": b"new"}) + self.assertNotEqual(b"last-good\n", roster_path.read_bytes()) + self.assertEqual(b"old", (avatar_dir / "old.webp").read_bytes()) + self.assertEqual(b"new", (avatar_dir / "new.webp").read_bytes()) + + def test_corrupt_existing_candidate_destination_is_replaced(self): + with tempfile.TemporaryDirectory(prefix="community-replace-test-") as directory: + root = pathlib.Path(directory) + roster_path, avatar_dir = root / "roster.json", root / "avatars" + avatar_dir.mkdir() + roster_path.write_bytes(b"last-good\n") + raw = b"new" + name = f"{__import__('hashlib').sha256(raw).hexdigest()}.webp" + destination = avatar_dir / name + destination.write_bytes(b"corrupt") + candidate = {"roles": {"pmc": [{"avatar": f"/img/community/avatars/{name}"}], "committers": []}} + with mock.patch.object(roster, "ROSTER_PATH", roster_path), \ + mock.patch.object(roster, "AVATAR_DIR", avatar_dir), \ + mock.patch.object(roster, "_validate_repo_paths"), \ + mock.patch.object(roster, "_validate_webp"): + roster._commit_bundle(candidate, {name: raw}) + self.assertEqual(raw, destination.read_bytes()) + + +class CommunityContentContractTests(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls._site = tempfile.TemporaryDirectory(prefix="community-content-site-") + hugo_version = subprocess.check_output(["hugo", "version"], text=True) + if not hugo_version.startswith("hugo v0.165.0") or "+extended" not in hugo_version: + raise RuntimeError( + f"Community render contracts require Hugo v0.165.0 Extended: {hugo_version.strip()}" + ) + environment = {**os.environ, "GOPROXY": "off"} + subprocess.run( + ["hugo", "--quiet", "--destination", cls._site.name], + cwd=ROOT, + env=environment, + text=True, + capture_output=True, + check=True, + ) + cls.site = pathlib.Path(cls._site.name) + + @classmethod + def tearDownClass(cls): + cls._site.cleanup() + + def test_search_metadata_covers_fixed_bilingual_entries(self): + entries = [ + "docs/introduction/_index.md", + "docs/quickstart/hugegraph/hugegraph-server.md", + "docs/quickstart/hugegraph/hugegraph-hstore.md", + "docs/quickstart/hugegraph/hugegraph-pd.md", + "docs/quickstart/computing/hugegraph-computer.md", + "docs/quickstart/toolchain/hugegraph-loader.md", + "docs/quickstart/toolchain/hugegraph-hubble.md", + "docs/clients/_index.md", + "docs/clients/restful-api/_index.md", + "docs/config/config-guide.md", + "docs/config/config-authentication.md", + "docs/download/download.md", + ] + for language in ("en", "cn"): + for relative in entries: + text = (ROOT / "content" / language / relative).read_text(encoding="utf-8") + self.assertIn("search_keywords:", text, f"{language}/{relative}") + self.assertIn("search_boost:", text, f"{language}/{relative}") + + def test_docs_roots_respect_core_platform_llmsfull_ownership(self): + versions = { + entry["id"] + for entry in json.loads((ROOT / "versions.json").read_text(encoding="utf-8"))["versions"] + } + core_platform_integrated = {"1.3", "1.0"} <= versions + for language in ("en", "cn"): + text = (ROOT / "content" / language / "docs/_index.md").read_text(encoding="utf-8") + frontmatter = text.split("---", 2)[1] + if core_platform_integrated: + self.assertIn("outputs: [HTML, RSS, print, markdown, LLMSFULL]", frontmatter) + else: + self.assertNotIn("LLMSFULL", frontmatter) + + def test_component_pilots_are_bilingual_and_scoped(self): + for language in ("en", "cn"): + server = (ROOT / "content" / language / "docs/quickstart/hugegraph/hugegraph-server.md").read_text() + config = (ROOT / "content" / language / "docs/config/config-guide.md").read_text() + vertex = (ROOT / "content" / language / "docs/clients/restful-api/vertex.md").read_text() + self.assertIn("{.steps}", server) + self.assertIn('filename="conf/gremlin-server.yaml"', config) + self.assertIn(".full-width", vertex) + self.assertIn("{#vertex-id-strategy", vertex) + + def test_component_pilots_render_in_html_print_and_markdown(self): + for prefix in ("", "cn/"): + outputs = { + "server_html": self.site / prefix / "docs/quickstart/hugegraph/hugegraph-server/index.html", + "server_print": self.site / prefix / "_print/docs/quickstart/hugegraph/index.html", + "server_md": self.site / prefix / "docs/quickstart/hugegraph/hugegraph-server/index.md", + "config_html": self.site / prefix / "docs/config/config-guide/index.html", + "config_print": self.site / prefix / "_print/docs/config/index.html", + "config_md": self.site / prefix / "docs/config/config-guide/index.md", + "vertex_html": self.site / prefix / "docs/clients/restful-api/vertex/index.html", + "vertex_print": self.site / prefix / "_print/docs/clients/restful-api/index.html", + "vertex_md": self.site / prefix / "docs/clients/restful-api/vertex/index.md", + } + rendered = {key: path.read_text(encoding="utf-8") for key, path in outputs.items()} + self.assertIn('class="steps"', rendered["server_html"]) + self.assertIn('class="steps"', rendered["server_print"]) + self.assertIn("{.steps}", rendered["server_md"]) + for key in ("config_html", "config_print", "config_md"): + self.assertIn("conf/gremlin-server.yaml", rendered[key]) + self.assertIn('id="vertex-id-strategy"', rendered["vertex_html"]) + self.assertIn('id="vertex-id-strategy"', rendered["vertex_print"]) + self.assertIn("{#vertex-id-strategy .full-width", rendered["vertex_md"]) + + def test_community_markdown_follows_section_order_and_about_is_unchanged(self): + expected = { + "community/index.md": ( + "## Join the Apache HugeGraph community", + "## Get involved", + "## Project members", + "## Learn how the project works", + ), + "cn/community/index.md": ( + "## ๅŠ ๅ…ฅ Apache HugeGraph ็คพๅŒบ", + "## ๅ‚ไธŽ็คพๅŒบ", + "## ้กน็›ฎๆˆๅ‘˜", + "## ไบ†่งฃ้กน็›ฎ่ฟไฝœๆ–นๅผ", + ), + } + for relative, markers in expected.items(): + rendered = (self.site / relative).read_text(encoding="utf-8") + expected_title = "# ็คพๅŒบ" if relative.startswith("cn/") else "# Community" + self.assertTrue(rendered.startswith(expected_title + "\n")) + self.assertNotIn("td-page-meta__footer", rendered) + positions = [rendered.index(marker) for marker in markers] + self.assertEqual(positions, sorted(positions)) + member_heading = "้กน็›ฎๆˆๅ‘˜" if relative.startswith("cn/") else "Project members" + self.assertRegex(rendered, rf"(?m)^## {member_heading}$") + about = { + "about/index.md": ( + "## One ecosystem for graph data and graph intelligence", + "HugeGraph is an Apache top-level project", + ), + "cn/about/index.md": ( + "## ่ฟžๆŽฅๅ›พๆ•ฐๆฎไธŽๅ›พๆ™บ่ƒฝ็š„ไธ€ไฝ“ๅŒ–็”Ÿๆ€", + "HugeGraph ๆ˜ฏ Apache ้กถ็บง้กน็›ฎ", + ), + } + for relative, markers in about.items(): + rendered = (self.site / relative).read_text(encoding="utf-8") + self.assertNotIn("Project members", rendered) + for marker in markers: + self.assertIn(marker, rendered) + + def test_explicit_artifact_validator_accepts_prebuilt_site(self): + roster.validate_rendered_outputs(self.site) + result = subprocess.run( + [ + sys.executable, + "scripts/community_roster.py", + "validate", + "--warn-after-days", + "90", + "--artifact", + str(self.site), + ], + cwd=ROOT, + text=True, + capture_output=True, + ) + self.assertEqual(0, result.returncode, result.stderr) + + def test_artifact_validator_rejects_swapped_role_sections(self): + outputs = ( + "community/index.html", + "_print/community/index.html", + "community/index.md", + "cn/community/index.html", + "cn/_print/community/index.html", + "cn/community/index.md", + ) + for swapped_relative in ( + "community/index.html", + "_print/community/index.html", + "cn/community/index.html", + "cn/_print/community/index.html", + ): + with self.subTest(output=swapped_relative), tempfile.TemporaryDirectory( + prefix="community-role-output-" + ) as directory: + destination = pathlib.Path(directory) + for relative in outputs: + target = destination / relative + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(self.site / relative, target) + path = destination / swapped_relative + rendered = path.read_text(encoding="utf-8") + match = re.search( + r'(]*data-community-role=(?:"pmc"|pmc)[^>]*>.*?)' + r"(\s*)" + r'(]*data-community-role=(?:"committers"|committers)[^>]*>.*?)', + rendered, + flags=re.DOTALL, + ) + self.assertIsNotNone(match) + rendered = ( + rendered[: match.start()] + + match.group(3) + + match.group(2) + + match.group(1) + + rendered[match.end() :] + ) + path.write_text(rendered, encoding="utf-8") + with self.assertRaisesRegex(roster.RosterError, "role section order drift"): + roster.validate_rendered_outputs(destination) + + def test_artifact_validator_rejects_plain_text_profile_urls(self): + with tempfile.TemporaryDirectory(prefix="community-fake-output-") as directory: + destination = pathlib.Path(directory) + roles = json.loads(roster.ROSTER_PATH.read_text())["roles"] + for relative in ( + "community/index.html", + "_print/community/index.html", + "cn/community/index.html", + "cn/_print/community/index.html", + ): + path = destination / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text( + '
' + + " ".join(person["profile_url"] for person in roles["pmc"]) + + '
' + + " ".join(person["profile_url"] for person in roles["committers"]) + + "
" + ) + for relative, title in ( + ("community/index.md", "Project members"), + ("cn/community/index.md", "้กน็›ฎๆˆๅ‘˜"), + ): + path = destination / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text( + f"## {title}\n\n### PMC\n" + + "\n".join(person["profile_url"] for person in roles["pmc"]) + + "\n\n### Committers\n" + + "\n".join(person["profile_url"] for person in roles["committers"]) + ) + with self.assertRaisesRegex(roster.RosterError, "link parity drift"): + roster.validate_rendered_outputs(destination) + + def test_fixed_metadata_is_present_in_actual_offline_indexes(self): + fixture = json.loads( + (ROOT / "scripts/fixtures/community_search_queries.json").read_text(encoding="utf-8") + ) + self.assertEqual(24, len(fixture)) + self.assertEqual(24, len({(item["locale"], item["query"]) for item in fixture})) + for language in ("en", "cn"): + indexes = list(self.site.glob(f"offline-search-index.{language}.*.json")) + self.assertEqual(1, len(indexes)) + records = {record["ref"]: record for record in json.loads(indexes[0].read_text())} + for item in (entry for entry in fixture if entry["locale"] == language): + ref = item["expected_ref"] + self.assertIn(ref, records) + self.assertTrue(records[ref]["keywords"], ref) + self.assertGreater(records[ref]["boost"], 1, ref) + normalized_query = item["query"].casefold() + searchable = " ".join( + [records[ref]["title"], *records[ref]["keywords"]] + ).casefold() + self.assertIn(normalized_query, searchable, ref) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_download_data.py b/scripts/test_download_data.py new file mode 100644 index 0000000000..b763c7d5dd --- /dev/null +++ b/scripts/test_download_data.py @@ -0,0 +1,198 @@ +import json +import pathlib +import re +import unittest + + +ROOT = pathlib.Path(__file__).resolve().parents[1] +DATA = ROOT / "data" / "downloads" / "asf.json" +PARTIAL = ROOT / "layouts" / "_partials" / "asf-downloads.html" +PAGES = ( + ROOT / "content" / "en" / "docs" / "download" / "download.md", + ROOT / "content" / "cn" / "docs" / "download" / "download.md", +) +I18N = (ROOT / "i18n" / "en.yaml", ROOT / "i18n" / "zh-CN.yaml") + +# Exact dist state, verified against +# https://downloads.apache.org/hugegraph// on 2026-09-13. The data +# file must derive exactly these artifacts; a new release edits both the data +# file and this expectation with a fresh dist listing. +EXPECTED_ARTIFACTS = { + "1.7.0": { + "apache-hugegraph-incubating-1.7.0.tar.gz", + "apache-hugegraph-toolchain-incubating-1.7.0.tar.gz", + "apache-hugegraph-incubating-1.7.0-src.tar.gz", + "apache-hugegraph-toolchain-incubating-1.7.0-src.tar.gz", + "apache-hugegraph-ai-incubating-1.7.0-src.tar.gz", + "apache-hugegraph-computer-incubating-1.7.0-src.tar.gz", + }, + "1.5.0": { + "apache-hugegraph-incubating-1.5.0.tar.gz", + "apache-hugegraph-toolchain-incubating-1.5.0.tar.gz", + "apache-hugegraph-incubating-1.5.0-src.tar.gz", + "apache-hugegraph-toolchain-incubating-1.5.0-src.tar.gz", + "apache-hugegraph-ai-incubating-1.5.0-src.tar.gz", + "apache-hugegraph-computer-incubating-1.5.0-src.tar.gz", + }, + "1.3.0": { + "apache-hugegraph-incubating-1.3.0.tar.gz", + "apache-hugegraph-toolchain-incubating-1.3.0.tar.gz", + "apache-hugegraph-incubating-1.3.0-src.tar.gz", + "apache-hugegraph-toolchain-incubating-1.3.0-src.tar.gz", + "apache-hugegraph-ai-incubating-1.3.0-src.tar.gz", + "apache-hugegraph-commons-incubating-1.3.0-src.tar.gz", + }, + "1.2.0": { + "apache-hugegraph-incubating-1.2.0.tar.gz", + "apache-hugegraph-toolchain-incubating-1.2.0.tar.gz", + "apache-hugegraph-incubating-1.2.0-src.tar.gz", + "apache-hugegraph-toolchain-incubating-1.2.0-src.tar.gz", + "apache-hugegraph-computer-incubating-1.2.0-src.tar.gz", + "apache-hugegraph-commons-incubating-1.2.0-src.tar.gz", + }, + "1.0.0": { + "apache-hugegraph-incubating-1.0.0.tar.gz", + "apache-hugegraph-toolchain-incubating-1.0.0.tar.gz", + "apache-hugegraph-computer-incubating-1.0.0.tar.gz", + "apache-hugegraph-incubating-1.0.0-src.tar.gz", + "apache-hugegraph-toolchain-incubating-1.0.0-src.tar.gz", + "apache-hugegraph-computer-incubating-1.0.0-src.tar.gz", + "apache-hugegraph-commons-incubating-1.0.0-src.tar.gz", + }, +} + +FIXED_I18N_KEYS = ( + "ui_assets_download", + "download_release_version", + "download_release_date", + "download_release_notes", + "download_table_component", + "download_table_type", + "download_table_mirror", + "download_type_binary", + "download_type_source", + "download_asf_note", +) + + +def load_data() -> dict: + with DATA.open(encoding="utf-8") as handle: + return json.load(handle) + + +def derive_files(release: dict, components: dict) -> set[str]: + files = set() + infix = "-incubating" if release["incubating"] else "" + for kind, suffix in (("binary", ""), ("source", "-src")): + for component_id in release.get(kind, []): + prefix = components[component_id]["prefix"] + files.add(f"{prefix}{infix}-{release['version']}{suffix}.tar.gz") + return files + + +def i18n_keys(path: pathlib.Path) -> set[str]: + keys = set() + for line in path.read_text(encoding="utf-8").splitlines(): + if line and not line.startswith(("#", " ")) and ":" in line: + keys.add(line.split(":", 1)[0].strip()) + return keys + + +class DownloadDataTest(unittest.TestCase): + def setUp(self) -> None: + self.data = load_data() + + def test_schema_and_release_ordering(self) -> None: + data = self.data + self.assertEqual( + set(data), {"$comment", "dist_path", "components", "releases"} + ) + self.assertEqual(data["dist_path"], "hugegraph") + label_keys = [c["label_key"] for c in data["components"].values()] + self.assertEqual(len(label_keys), len(set(label_keys))) + for component_id, component in data["components"].items(): + self.assertRegex(component_id, r"^[a-z][a-z0-9]*\Z") + self.assertRegex(component["prefix"], r"^apache-hugegraph(-[a-z]+)?\Z") + self.assertRegex(component["label_key"], r"^download_component_[a-z]+\Z") + releases = data["releases"] + versions = [release["version"] for release in releases] + self.assertEqual(versions, sorted(versions, key=lambda v: tuple(map(int, v.split("."))), reverse=True)) + self.assertEqual(len(versions), len(set(versions))) + self.assertEqual(sum(1 for release in releases if release.get("latest")), 1) + self.assertTrue(releases[0].get("latest"), "the newest release must be the latest") + for release in releases: + self.assertRegex(release["version"], r"^\d+\.\d+\.\d+\Z") + self.assertRegex(release["date"], r"^\d{4}-\d{2}-\d{2}\Z") + self.assertIsInstance(release["incubating"], bool) + for kind in ("binary", "source"): + ids = release.get(kind, []) + self.assertTrue(ids, f"{release['version']} has no {kind} artifacts") + self.assertEqual(len(ids), len(set(ids))) + for component_id in ids: + self.assertIn(component_id, data["components"]) + + def test_derived_artifacts_match_the_verified_dist_listing(self) -> None: + data = self.data + derived = { + release["version"]: derive_files(release, data["components"]) + for release in data["releases"] + } + self.assertEqual(derived, EXPECTED_ARTIFACTS) + total = sum(len(files) for files in derived.values()) + self.assertEqual(total, 31) + + def test_derived_urls_are_well_formed(self) -> None: + data = self.data + pattern = re.compile(r"^https://[a-z.]+/[A-Za-z0-9./?=_-]+$") + for release in data["releases"]: + for file in derive_files(release, data["components"]): + urls = ( + f"https://www.apache.org/dyn/closer.lua/{data['dist_path']}/" + f"{release['version']}/{file}?action=download", + f"https://downloads.apache.org/{data['dist_path']}/" + f"{release['version']}/{file}.asc", + f"https://downloads.apache.org/{data['dist_path']}/" + f"{release['version']}/{file}.sha512", + ) + for url in urls: + self.assertRegex(url, pattern) + + def test_pages_render_from_data_not_hardcoded_tables(self) -> None: + for page in PAGES: + text = page.read_text(encoding="utf-8") + self.assertIn("{{< asf-downloads latest >}}", text, page) + self.assertIn("{{< asf-downloads archived >}}", text, page) + self.assertNotIn("closer.lua", text, page) + self.assertNotIn(".tar.gz", text, page) + artifact_links = re.findall( + r"downloads\.apache\.org/hugegraph/\d", text + ) + self.assertEqual(artifact_links, [], page) + + def test_partial_derives_urls_with_the_same_tokens(self) -> None: + # The partial re-derives the same filenames and URLs in Go templates; + # lock its literal format tokens to this module's derivation so the + # two cannot drift apart silently. + template = PARTIAL.read_text(encoding="utf-8") + for token in ( + '"-incubating" ""', + '"-src" ""', + '"%s%s-%s%s.tar.gz" $component.prefix $infix $version $suffix', + 'https://www.apache.org/dyn/closer.lua/%s/%s/%s?action=download', + 'https://downloads.apache.org/%s/%s/%s.asc', + 'https://downloads.apache.org/%s/%s/%s.sha512', + ): + self.assertIn(token, template) + + def test_i18n_catalogues_carry_every_label(self) -> None: + data = self.data + required = set(FIXED_I18N_KEYS) + for component in data["components"].values(): + required.add(component["label_key"]) + for catalogue in I18N: + missing = required - i18n_keys(catalogue) + self.assertEqual(missing, set(), catalogue) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_hugo_wrapper.py b/scripts/test_hugo_wrapper.py new file mode 100644 index 0000000000..256930653b --- /dev/null +++ b/scripts/test_hugo_wrapper.py @@ -0,0 +1,204 @@ +import json +import os +import pathlib +import stat +import subprocess +import tempfile +import unittest + + +ROOT = pathlib.Path(__file__).resolve().parents[1] +WRAPPER = ROOT / "scripts" / "hugo.sh" + + +class HugoWrapperTest(unittest.TestCase): + def setUp(self) -> None: + self.temp = tempfile.TemporaryDirectory() + self.root = pathlib.Path(self.temp.name) + self.bin = self.root / "bin" + self.bin.mkdir() + self.log = self.root / "calls.jsonl" + self._write_executable( + "python3", + """#!/bin/sh +printf '{"tool":"python3","args":[' >> "$HG_WRAPPER_TEST_LOG" +first=1 +output= +previous= +for arg in "$@"; do + if [ "$first" -eq 0 ]; then printf ',' >> "$HG_WRAPPER_TEST_LOG"; fi + first=0 + printf '"%s"' "$arg" >> "$HG_WRAPPER_TEST_LOG" + if [ "$previous" = "--output" ]; then output=$arg; fi + previous=$arg +done +printf ']}\\n' >> "$HG_WRAPPER_TEST_LOG" +printf '%s\\n' '{"params":{"versions":[1,2,3,4,5]}}' > "$output" +""", + ) + self._write_executable( + "hugo", + """#!/bin/sh +printf '{"tool":"hugo","args":[' >> "$HG_WRAPPER_TEST_LOG" +first=1 +config= +previous= +for arg in "$@"; do + if [ "$first" -eq 0 ]; then printf ',' >> "$HG_WRAPPER_TEST_LOG"; fi + first=0 + printf '"%s"' "$arg" >> "$HG_WRAPPER_TEST_LOG" + if [ "$previous" = "--config" ]; then config=$arg; fi + previous=$arg +done +printf ']}\\n' >> "$HG_WRAPPER_TEST_LOG" +generated=${config#*,} +test -f "$generated" +grep -q '"versions":\\[1,2,3,4,5\\]' "$generated" +""", + ) + + def tearDown(self) -> None: + self.temp.cleanup() + + def _write_executable(self, name: str, source: str) -> None: + path = self.bin / name + path.write_text(source, encoding="utf-8") + path.chmod(path.stat().st_mode | stat.S_IXUSR) + + def invoke_wrapper( + self, *args: str, environment_overrides: dict[str, str] | None = None + ) -> subprocess.CompletedProcess[str]: + environment = os.environ.copy() + environment["PATH"] = f"{self.bin}{os.pathsep}{environment['PATH']}" + environment["HG_WRAPPER_TEST_LOG"] = str(self.log) + environment.pop("HG_DOC_VERSION", None) + environment.pop("HG_DOC_SITE_ORIGIN", None) + if environment_overrides: + environment.update(environment_overrides) + return subprocess.run( + [str(WRAPPER), *args], + cwd=ROOT, + env=environment, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + def calls(self) -> list[dict]: + if not self.log.exists(): + return [] + return [ + json.loads(line) + for line in self.log.read_text(encoding="utf-8").splitlines() + ] + + def run_wrapper( + self, *args: str, environment_overrides: dict[str, str] | None = None + ) -> list[dict]: + result = self.invoke_wrapper( + *args, environment_overrides=environment_overrides + ) + self.assertEqual(result.returncode, 0, result.stderr) + return self.calls() + + def test_server_derives_manifest_config_and_safely_forwards_arguments(self) -> None: + calls = self.run_wrapper("server", "--port", "1414", "--bind", "127.0.0.1") + self.assertEqual(calls[0]["tool"], "python3") + self.assertEqual( + calls[0]["args"][0:2], ["scripts/versioning.py", "config"] + ) + self.assertNotIn("--version", calls[0]["args"]) + self.assertIn("--site-origin", calls[0]["args"]) + origin_index = calls[0]["args"].index("--site-origin") + 1 + self.assertEqual(calls[0]["args"][origin_index], "http://localhost:1414/") + self.assertEqual(calls[1]["args"][0], "server") + self.assertEqual( + calls[1]["args"][-4:], + ["--port", "1414", "--bind", "127.0.0.1"], + ) + + def test_explicit_version_is_forwarded_only_when_requested(self) -> None: + calls = self.run_wrapper( + "build", environment_overrides={"HG_DOC_VERSION": "1.7"} + ) + args = calls[0]["args"] + self.assertEqual(args[args.index("--version") + 1], "1.7") + + def test_base_url_flag_wins_over_environment_and_pins_the_origin(self) -> None: + calls = self.run_wrapper( + "server", + "--baseURL=https://preview.example/docs/", + environment_overrides={ + "HG_DOC_SITE_ORIGIN": "https://other.example/" + }, + ) + config_args = calls[0]["args"] + self.assertEqual( + config_args[config_args.index("--site-origin") + 1], + "https://preview.example/docs/", + ) + hugo_args = calls[1]["args"] + self.assertIn("--appendPort=false", hugo_args) + self.assertEqual(hugo_args[-1], "--baseURL=https://preview.example/docs/") + + def test_documented_origin_and_port_spellings_drive_generated_config(self) -> None: + cases = ( + (("--baseURL", "https://long.example/"), "https://long.example/", True), + (("-b", "https://short.example/"), "https://short.example/", True), + (("-b=https://equals.example/",), "https://equals.example/", True), + (("-bhttps://cluster.example/",), "https://cluster.example/", True), + (("--port", "1414"), "http://localhost:1414/", False), + (("--port=1515",), "http://localhost:1515/", False), + (("-p=1616",), "http://localhost:1616/", False), + (("-p1717",), "http://localhost:1717/", False), + ) + for args, expected_origin, environment_set in cases: + with self.subTest(args=args): + self.log.unlink(missing_ok=True) + environment_overrides = ( + {"HG_DOC_SITE_ORIGIN": "https://environment.example/"} + if environment_set + else None + ) + calls = self.run_wrapper( + "server", + *args, + environment_overrides=environment_overrides, + ) + config_args = calls[0]["args"] + self.assertEqual( + config_args[config_args.index("--site-origin") + 1], + expected_origin, + ) + + def test_build_enforces_the_warning_strict_production_contract(self) -> None: + calls = self.run_wrapper("build", "--destination", "custom-public") + args = calls[1]["args"] + self.assertNotIn("build", args) + for required in ( + "--cleanDestinationDir", + "--gc", + "--minify", + "--environment", + "production", + "--printPathWarnings", + "--printI18nWarnings", + "--panicOnWarning", + ): + self.assertIn(required, args) + self.assertEqual(args[-2:], ["--destination", "custom-public"]) + + def test_documented_preview_and_build_use_the_wrapper(self) -> None: + for relative in ("README.md", "contribution.md"): + text = (ROOT / relative).read_text(encoding="utf-8") + self.assertNotIn("hugo server", text) + readme = (ROOT / "README.md").read_text(encoding="utf-8") + contribution = (ROOT / "contribution.md").read_text(encoding="utf-8") + self.assertGreaterEqual(readme.count("scripts/hugo.sh server"), 4) + self.assertGreaterEqual(readme.count("scripts/hugo.sh build"), 2) + self.assertIn("scripts/hugo.sh server", contribution) + self.assertIn("scripts/hugo.sh build", contribution) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/test_validate_site_output.py b/scripts/test_validate_site_output.py index 55348d3691..7a71ae696c 100644 --- a/scripts/test_validate_site_output.py +++ b/scripts/test_validate_site_output.py @@ -8,6 +8,7 @@ from __future__ import annotations import importlib.util +import json import pathlib import subprocess import sys @@ -150,6 +151,98 @@ def test_error_document_seo_rejects_indexing_and_url_claims(self) -> None: ], ) + def test_error_document_paths_follow_all_manifest_versions(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + manifest = { + "versions": [ + {"id": "latest", "publishPath": ""}, + {"id": "1.7", "publishPath": "versions/1.7"}, + {"id": "1.5", "publishPath": "versions/1.5"}, + {"id": "1.3", "publishPath": "versions/1.3"}, + {"id": "1.0", "publishPath": "versions/1.0"}, + ] + } + metadata = root / "build-metadata" + metadata.mkdir() + (metadata / "versions.json").write_text( + json.dumps(manifest), encoding="utf-8" + ) + + self.assertEqual( + VALIDATOR.error_document_paths(root), + { + "404.html", + "cn/404.html", + "versions/1.7/404.html", + "versions/1.7/cn/404.html", + "versions/1.5/404.html", + "versions/1.5/cn/404.html", + "versions/1.3/404.html", + "versions/1.3/cn/404.html", + "versions/1.0/404.html", + "versions/1.0/cn/404.html", + }, + ) + + def test_all_modes_reject_old_version_error_page_seo(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + manifest = { + "versions": [ + {"id": "latest", "publishPath": ""}, + {"id": "1.3", "publishPath": "versions/1.3"}, + {"id": "1.0", "publishPath": "versions/1.0"}, + ] + } + metadata = root / "build-metadata" + metadata.mkdir() + (metadata / "versions.json").write_text( + json.dumps(manifest), encoding="utf-8" + ) + unsafe = ( + '' + '' + '' + ) + for version in ("1.3", "1.0"): + for language in ("", "cn/"): + page = root / f"versions/{version}/{language}404.html" + page.parent.mkdir(parents=True, exist_ok=True) + page.write_text(unsafe, encoding="utf-8") + + for extra_args in (["--security-only"], []): + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + *extra_args, + ], + check=False, + capture_output=True, + text=True, + ) + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + for version in ("1.3", "1.0"): + for language in ("", "cn/"): + page_name = f"versions/{version}/{language}404.html" + with self.subTest(mode=extra_args, page_name=page_name): + self.assertIn( + f"{page_name}: expected one robots noindex,nofollow", + result.stdout, + ) + self.assertIn( + f"{page_name}: error document must not declare canonical", + result.stdout, + ) + self.assertIn( + f"{page_name}: error document must not declare hreflang", + result.stdout, + ) + def test_nested_content_404_is_not_an_error_document_exception(self) -> None: parser = parse( '' @@ -264,6 +357,30 @@ def test_active_markup_and_event_handlers_inside_content_are_rejected(self) -> N ], ) + def test_duplicate_attributes_are_rejected_case_insensitively(self) -> None: + parser = parse( + '' + '' + "" + ) + self.assertEqual( + parser.authored_violations, + [ + "duplicate src attribute on ", + "duplicate xlink:href attribute on ", + ], + ) + errors = VALIDATOR.document_security_errors(parser, "index.html", BASE) + self.assertIn( + "index.html: unsafe content markup: duplicate src attribute on ", + errors, + ) + self.assertIn( + "index.html: unsafe content markup: duplicate xlink:href attribute " + "on ", + errors, + ) + def test_exact_oink_diagram_source_is_allowed_inside_content(self) -> None: parser = parse( '
' + '' + '' + 'allowed contact' + ), + encoding="utf-8", + ) + (root / "boundary.html").write_text( + ( + '
' + '' + '' + "
" + 'ping' + '' + '' + ), + encoding="utf-8", + ) + (root / "site.css").write_text( + ".hero{background:url(https:///docs/introduction/)}", + encoding="utf-8", + ) + + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + "--security-only", + ], + check=False, + capture_output=True, + text=True, + ) + + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + self.assertIn("HTTP(S) URL has no authority", result.stdout) + self.assertGreaterEqual( + result.stdout.count("HTTP(S) URL has no authority"), + 6, + result.stdout, + ) + self.assertIn("unsafe whitespace/control URL", result.stdout) + self.assertIn("unsafe backslash URL", result.stdout) + self.assertIn("forbidden URL scheme", result.stdout) + self.assertIn("site.css", result.stdout) + + def test_security_only_rejects_unreviewed_request_attributes(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + (root / "index.html").write_text( + ( + '
' + '' + '' + "
" + 'ping' + '' + '' + '' + ), + encoding="utf-8", + ) + (root / "external-boundary.html").write_text( + ( + '
' + '' + '' + "
" + 'ping' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + ), + encoding="utf-8", + ) + + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + "--security-only", + ], + check=False, + capture_output=True, + text=True, + ) + + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + self.assertIn("forbidden ping attribute", result.stdout) + self.assertIn("forbidden base[href]", result.stdout) + self.assertIn("forbidden URL scheme in form[action]", result.stdout) + self.assertIn("forbidden URL scheme in button[formaction]", result.stdout) + self.assertIn("external active resource", result.stdout) + self.assertIn( + "external active resource is forbidden href: " + "https://evil.example/payload", + result.stdout, + ) + self.assertIn( + "external active resource is forbidden href: " + "https://evil.example/page", + result.stdout, + ) + self.assertIn( + "external active resource is forbidden xlink:href", + result.stdout, + ) + self.assertIn( + "external active resource is forbidden imagesrcset", + result.stdout, + ) + self.assertIn("forbidden attributionsrc attribute", result.stdout) + self.assertIn("forbidden URL scheme in use[href]", result.stdout) + + def test_runtime_url_attributes_enter_security_and_target_validation(self) -> None: + fragment = ( + '
' + ) + parser = parse(fragment) + for attribute, url in ( + ("data-td-index-src", "/missing-index.json"), + ("data-td-url", "/missing-runtime/"), + ("data-td-action-url", "/missing-action/"), + ("data-td-image-zoom", "https://images.example.com/zoom.png"), + ): + self.assertIn((attribute, url), parser.urls) + errors = VALIDATOR.document_security_errors(parser, "index.html", BASE) + self.assertIn( + "index.html: image URL is outside ASF CSP
" + "data-td-image-zoom: https://images.example.com/zoom.png", + errors, + ) + + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + (root / "index.html").write_text(fragment, encoding="utf-8") + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + ], + check=False, + capture_output=True, + text=True, + ) + self.assertEqual(result.returncode, 1) + self.assertIn( + "broken internal data-td-index-src /missing-index.json", + result.stdout, + ) + self.assertIn( + "broken internal data-td-url /missing-runtime/", + result.stdout, + ) + self.assertIn( + "broken internal data-td-action-url /missing-action/", + result.stdout, + ) + + def test_security_only_rejects_data_resource_schemes(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + data_image = "data:image/png;base64,AAAA" + (root / "index.html").write_text( + ( + f'' + f'' + f'' + f'' + ), + encoding="utf-8", + ) + (root / "site.css").write_text( + f".hero{{background:url({data_image})}}", + encoding="utf-8", + ) + + passive = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + "--security-only", + ], + check=False, + capture_output=True, + text=True, + ) + self.assertEqual(passive.returncode, 1) + self.assertIn("forbidden URL scheme in img[src]", passive.stdout) + self.assertIn("forbidden URL scheme in inline CSS", passive.stdout) + self.assertIn("forbidden URL scheme in CSS resource", passive.stdout) + + (root / "active.html").write_text( + f'', + encoding="utf-8", + ) + rejected = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + "--security-only", + ], + check=False, + capture_output=True, + text=True, + ) + self.assertEqual(rejected.returncode, 1) + self.assertIn("forbidden URL scheme in script[src]", rejected.stdout) + def test_css_http_resources_are_detected(self) -> None: parser = parse( '" + ), + encoding="utf-8", + ) + (root / "site.css").write_text( + f".hero{{background:-webkit-image-set(\"{escaped}\" 1x)}}", + encoding="utf-8", + ) + + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + "--security-only", + ], + check=False, + capture_output=True, + text=True, + ) + + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + self.assertGreaterEqual( + result.stdout.count("external CSS resource is forbidden"), + 3, + result.stdout, + ) + + def test_css_internal_resources_resolve_from_stylesheet_directory(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + (root / "index.html").write_text("
safe
", encoding="utf-8") + (root / "scss").mkdir() + (root / "img").mkdir() + (root / "img/present.svg").write_text("", encoding="utf-8") + (root / "scss/site.css").write_text( + ( + '.present{background:url("../img/present.svg")}' + '.scoped{background:url("https://hugegraph.apache.org/' + 'versions/1.7/img/present.svg")}' + '.missing{background:url("../img/missing.svg")}' + '@import "./missing.css";' + '.escape{background:url("../../escape.svg")}' + '.fragment{filter:url("#local-filter")}' + ), + encoding="utf-8", + ) + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/versions/1.7/", + "--security-only", + ], + check=False, + capture_output=True, + text=True, + ) + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + self.assertNotIn("present.svg", result.stdout) + self.assertIn( + "broken internal CSS resource ../img/missing.svg -> img/missing.svg", + result.stdout, + ) + self.assertIn( + "broken internal CSS resource ./missing.css -> scss/missing.css", + result.stdout, + ) + self.assertIn( + "unsafe internal CSS resource ../../escape.svg: " + "escapes output directory", + result.stdout, + ) + self.assertNotIn("local-filter", result.stdout) + + def test_parser_covers_legacy_and_svg_request_surfaces(self) -> None: + parser = parse( + '' + '' + '' + '' + '' + '
hc
' + '' + 'docs' + '' + '' + '' + '' + '' + "" + ) + self.assertIn("forbidden iframe[srcdoc]", parser.authored_violations) + self.assertIn( + ("a", "xlink:href", "https://example.com/docs"), + parser.navigation_urls, + ) + self.assertIn( + ("mpath", "xlink:href", "https://evil.example/path.svg#p"), + parser.resources, + ) + self.assertIn( + ("pattern", "href", "https://evil.example/pattern.svg#p"), + parser.resources, + ) + self.assertIn( + ("image", "xlink:href", "https://www.apache.org/image.svg"), + parser.image_urls, + ) + self.assertIn( + ("feimage", "href", "https://www.apache.org/filter.svg"), + parser.image_urls, + ) + self.assertIn( + "https://evil.example/paint.svg#gradient", + [ + url + for source in parser.inline_css_sources + for url in VALIDATOR.css_resource_urls(source) + ], + ) + self.assertIn( + "external active resource is forbidden src", + "\n".join( + VALIDATOR.document_security_errors(parser, "index.html", BASE) + ), + ) + + def test_media_sources_are_not_treated_as_csp_images(self) -> None: + parser = parse( + '' + '' + '' + '' + '' + ) + errors = VALIDATOR.document_security_errors(parser, "index.html", BASE) + self.assertEqual( + sum("external active resource" in error for error in errors), + 4, + errors, + ) + self.assertFalse( + any("image.webp" in error or "image.png" in error for error in errors), + errors, + ) + + def test_authored_content_markers_survive_premature_container_closures( + self, + ) -> None: + parser = parse( + '
' + '
' + '' + ) + self.assertIn("authored ' + '' + ) + self.assertIn( + "unexpected authored-content end marker", + spoofed.authored_violations, + ) + self.assertTrue( + VALIDATOR.document_security_errors(spoofed, "index.html", BASE) + ) + + sequential = parse( + '' + "

one

" + '' + '' + "

two

" + '' + ) + self.assertEqual( + VALIDATOR.document_security_errors(sequential, "print.html", BASE), + [], + ) + + def test_link_rel_is_fail_closed_for_request_capable_and_unknown_values(self) -> None: + parser = parse( + '' + '' + '' + '' + '' + ) + errors = VALIDATOR.document_security_errors(parser, "index.html", BASE) + self.assertEqual(len(errors), 3, errors) + self.assertTrue(all("external active resource" in error for error in errors)) + + def test_srcset_and_imagesrcset_candidates_are_internal_targets(self) -> None: + fragment = ( + '' + '' + ) + parser = parse(fragment) + self.assertIn(("srcset", "/missing.png"), parser.urls) + self.assertIn(("imagesrcset", "/missing-link.png"), parser.urls) + with tempfile.TemporaryDirectory() as temp_name: + root = pathlib.Path(temp_name) + (root / "index.html").write_text(fragment, encoding="utf-8") + (root / "present.png").write_bytes(b"present") + (root / "present-link.png").write_bytes(b"present") + result = subprocess.run( + [ + sys.executable, + str(VALIDATOR_PATH), + str(root), + "https://hugegraph.apache.org/", + ], + check=False, + capture_output=True, + text=True, + ) + self.assertEqual(result.returncode, 1) + self.assertIn( + "broken internal srcset /missing.png -> missing.png", + result.stdout, + ) + self.assertIn( + "broken internal imagesrcset /missing-link.png -> missing-link.png", + result.stdout, + ) + def test_asf_csp_image_sources_are_allowed(self) -> None: allowed = [ "/img/local.svg", diff --git a/scripts/test_versioning.py b/scripts/test_versioning.py index 0e47f6836e..f39e768816 100644 --- a/scripts/test_versioning.py +++ b/scripts/test_versioning.py @@ -26,6 +26,10 @@ "/versions/1.7/cn/docs", "/versions/1.5/docs", "/versions/1.5/cn/docs", + "/versions/1.3/docs", + "/versions/1.3/cn/docs", + "/versions/1.0/docs", + "/versions/1.0/cn/docs", } @@ -154,8 +158,36 @@ def test_validate_artifact_rejects_missing_toc_accessible_name(self) -> None: (artifact / ".version.json").write_text( json.dumps(metadata), encoding="utf-8" ) + social = artifact / "img/social/fallback.png" + social.parent.mkdir(parents=True) + social.write_bytes(b"png") (artifact / "index.html").write_text( - '', encoding="utf-8" + '' + '' + '', + encoding="utf-8", + ) + en_llms = artifact / "docs/llms-full.txt" + cn_llms = artifact / "cn/docs/llms-full.txt" + en_llms.parent.mkdir(parents=True) + cn_llms.parent.mkdir(parents=True) + en_llms.write_text( + ( + f"Source: {ORIGIN}docs/index.md\n\n" + "LLMS index: [llms.txt](/llms.txt)\n" + ), + encoding="utf-8", + ) + cn_llms.write_text( + ( + f"Source: {ORIGIN}cn/docs/index.md\n\n" + "LLMS ็ดขๅผ•๏ผš [llms.txt](/cn/llms.txt)\n" + ), + encoding="utf-8", + ) + (artifact / "llms.txt").write_text("English index\n", encoding="utf-8") + (artifact / "cn/llms.txt").write_text( + "ไธญๆ–‡็ดขๅผ•\n", encoding="utf-8" ) contract = temp / "url-contract.json" contract.write_text( @@ -177,9 +209,36 @@ def test_validate_artifact_rejects_missing_toc_accessible_name(self) -> None: def test_version_urls_preserve_language_and_order(self) -> None: manifest = { "versions": [ - {"id": "latest", "name": "latest", "publishPath": ""}, - {"id": "1.7", "name": "1.7", "publishPath": "versions/1.7"}, - {"id": "1.5", "name": "1.5", "publishPath": "versions/1.5"}, + { + "id": "latest", + "name": "latest", + "publishPath": "", + "archived": False, + }, + { + "id": "1.7", + "name": "1.7", + "publishPath": "versions/1.7", + "archived": True, + }, + { + "id": "1.5", + "name": "1.5", + "publishPath": "versions/1.5", + "archived": True, + }, + { + "id": "1.3", + "name": "1.3", + "publishPath": "versions/1.3", + "archived": True, + }, + { + "id": "1.0", + "name": "1.0", + "publishPath": "versions/1.0", + "archived": True, + }, ] } self.assertEqual( @@ -188,6 +247,8 @@ def test_version_urls_preserve_language_and_order(self) -> None: f"{ORIGIN}docs/", f"{ORIGIN}versions/1.7/docs/", f"{ORIGIN}versions/1.5/docs/", + f"{ORIGIN}versions/1.3/docs/", + f"{ORIGIN}versions/1.0/docs/", ], ) self.assertEqual( @@ -196,6 +257,8 @@ def test_version_urls_preserve_language_and_order(self) -> None: f"{ORIGIN}cn/docs/", f"{ORIGIN}versions/1.7/cn/docs/", f"{ORIGIN}versions/1.5/cn/docs/", + f"{ORIGIN}versions/1.3/cn/docs/", + f"{ORIGIN}versions/1.0/cn/docs/", ], ) self.assertEqual( @@ -213,6 +276,401 @@ def test_version_urls_preserve_language_and_order(self) -> None: f"{ORIGIN}cn/docs/", ) + def test_direct_hugo_config_is_derived_from_five_version_manifest(self) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + latest = manifest["versions"][0] + config = versioning.derived_version_config(manifest, latest, ORIGIN) + expected = ["latest", "1.7", "1.5", "1.3", "1.0"] + self.assertEqual( + [item["version"] for item in config["params"]["versions"]], expected + ) + for language in ("en", "cn"): + self.assertEqual( + [ + item["version"] + for item in config["languages"][language]["params"]["versions"] + ], + expected, + ) + self.assertNotIn("1.2", json.dumps(config)) + + def test_shell_static_assets_include_all_shared_resources(self) -> None: + self.assertIn( + "img/social/hugegraph-default.png", + versioning.SHELL_STATIC_FILES, + ) + self.assertTrue( + ( + versioning.ROOT + / "static/img/social/hugegraph-default.png" + ).is_file() + ) + self.assertIn("img/bootstrap-controls", versioning.SHELL_STATIC_DIRS) + self.assertIn("img/home", versioning.SHELL_STATIC_DIRS) + controls = ( + versioning.ROOT / "static/img/bootstrap-controls" + ) + self.assertEqual(len(list(controls.glob("*.svg"))), 20) + + with tempfile.TemporaryDirectory() as temp_name: + assembly = Path(temp_name) + versioning.overlay_shell( + assembly, + historical=True, + origin=ORIGIN, + ) + copied = assembly / "static/img/bootstrap-controls" + self.assertEqual( + sorted(path.name for path in copied.glob("*.svg")), + sorted(path.name for path in controls.glob("*.svg")), + ) + self.assertEqual( + sorted( + path.name + for path in (assembly / "static/img/home").glob("*.jpg") + ), + ["hugegraph-hero-1920.jpg", "hugegraph-hero-960.jpg"], + ) + + def test_llms_full_contract_requires_latest_locales_and_forbids_history( + self, + ) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + latest = manifest["versions"][0] + archived = manifest["versions"][-1] + with tempfile.TemporaryDirectory() as temp_name: + root = Path(temp_name) + en = root / "docs/llms-full.txt" + cn = root / "cn/docs/llms-full.txt" + en.parent.mkdir(parents=True) + cn.parent.mkdir(parents=True) + en.write_text( + ( + "Source: https://hugegraph.apache.org/docs/index.md\n\n" + "LLMS index: [llms.txt](/llms.txt)\n" + ), + encoding="utf-8", + ) + cn.write_text( + ( + "Source: https://hugegraph.apache.org/cn/docs/index.md\n\n" + "LLMS ็ดขๅผ•๏ผš [llms.txt](/cn/llms.txt)\n" + ), + encoding="utf-8", + ) + versioning.validate_llms_full_outputs(root, latest, ORIGIN) + + cn.unlink() + with self.assertRaisesRegex(SystemExit, "Chinese LLMSFULL"): + versioning.validate_llms_full_outputs(root, latest, ORIGIN) + cn.write_text( + ( + "Source: https://hugegraph.apache.org/cn/docs/index.md\n\n" + "LLMS index: [llms.txt](/llms.txt)\n" + ), + encoding="utf-8", + ) + with self.assertRaisesRegex(SystemExit, "locale contract"): + versioning.validate_llms_full_outputs(root, latest, ORIGIN) + + with self.assertRaisesRegex(SystemExit, "historical artifact"): + versioning.validate_llms_full_outputs(root, archived, ORIGIN) + + def test_llms_full_contract_validates_every_source_line(self) -> None: + latest = versioning.load_manifest( + versioning.ROOT / "versions.json" + )["versions"][0] + invalid_sources = ( + "https://hugegraph.apache.org/cn/docs/config/index.md", + "https://example.com/docs/config/index.md", + "https://hugegraph.apache.org/versions/1.7/docs/config/index.md", + "javascript:alert(1)", + "https://hugegraph.apache.org/docs/config/index.md?", + "https://hugegraph.apache.org/docs/config/index.md#", + "https://hugegraph.apache.org/docs/%63onfig/index.md", + "https://hugegraph.apache.org/docs/./config/index.md", + "https://[invalid/docs/config/index.md", + "", + "https://hugegraph.apache.org/docs/index.md", + ) + with tempfile.TemporaryDirectory() as temp_name: + root = Path(temp_name) + en = root / "docs/llms-full.txt" + cn = root / "cn/docs/llms-full.txt" + en.parent.mkdir(parents=True) + cn.parent.mkdir(parents=True) + cn.write_text( + ( + "Source: https://hugegraph.apache.org/cn/docs/index.md\n\n" + "LLMS ็ดขๅผ•๏ผš [llms.txt](/cn/llms.txt)\n" + ), + encoding="utf-8", + ) + for invalid in invalid_sources: + with self.subTest(source=invalid): + en.write_text( + ( + "Source: https://hugegraph.apache.org/docs/index.md\n" + f"Source: {invalid}\n\n" + "LLMS index: [llms.txt](/llms.txt)\n" + ), + encoding="utf-8", + ) + with self.assertRaisesRegex( + SystemExit, "English LLMSFULL source" + ): + versioning.validate_llms_full_outputs( + root, latest, ORIGIN + ) + + def test_llms_full_contract_requires_canonical_source_first(self) -> None: + latest = versioning.load_manifest( + versioning.ROOT / "versions.json" + )["versions"][0] + with tempfile.TemporaryDirectory() as temp_name: + root = Path(temp_name) + en = root / "docs/llms-full.txt" + cn = root / "cn/docs/llms-full.txt" + en.parent.mkdir(parents=True) + cn.parent.mkdir(parents=True) + en.write_text( + ( + "Source: https://hugegraph.apache.org/docs/config/index.md\n" + "Source: https://hugegraph.apache.org/docs/index.md\n\n" + "LLMS index: [llms.txt](/llms.txt)\n" + ), + encoding="utf-8", + ) + cn.write_text( + ( + "Source: https://hugegraph.apache.org/cn/docs/index.md\n\n" + "LLMS ็ดขๅผ•๏ผš [llms.txt](/cn/llms.txt)\n" + ), + encoding="utf-8", + ) + with self.assertRaisesRegex( + SystemExit, "English LLMSFULL canonical source" + ): + versioning.validate_llms_full_outputs(root, latest, ORIGIN) + + def test_social_image_metadata_requires_safe_matching_local_images( + self, + ) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = Path(temp_name) + image = root / "img/social/fallback.png" + image.parent.mkdir(parents=True) + image.write_bytes(b"png") + non_image = root / "img/social/not-image.html" + non_image.write_text("not an image", encoding="utf-8") + + def document(og: str, twitter: str) -> versioning.DocumentParser: + parser = versioning.DocumentParser() + parser.feed( + f'' + f'' + ) + return parser + + for value in ( + "https://hugegraph.apache.org/img/social/fallback.png", + "/img/social/fallback.png", + ): + versioning.validate_social_image_metadata( + document(value, value), + "docs/index.html", + root, + ORIGIN, + ) + + invalid_pairs = ( + ("mailto:test@example.com", "mailto:test@example.com"), + ("tel:+123", "tel:+123"), + ("javascript:alert(1)", "javascript:alert(1)"), + ("?image=/img/social/fallback.png", "?image=/img/social/fallback.png"), + ("#fallback.png", "#fallback.png"), + ( + "http://hugegraph.apache.org/img/social/fallback.png", + "http://hugegraph.apache.org/img/social/fallback.png", + ), + ( + "https://example.com/img/social/fallback.png", + "https://example.com/img/social/fallback.png", + ), + ("/img/social/missing.png", "/img/social/missing.png"), + ("/img/social/not-image.html", "/img/social/not-image.html"), + ( + "/img/social/fallback.png", + "https://hugegraph.apache.org/img/social/fallback.png", + ), + ) + for og, twitter in invalid_pairs: + with self.subTest(og=og, twitter=twitter), self.assertRaises( + SystemExit + ): + versioning.validate_social_image_metadata( + document(og, twitter), + "docs/index.html", + root, + ORIGIN, + ) + + def test_social_image_metadata_allows_only_redirects_to_omit_both_tags( + self, + ) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = Path(temp_name) + empty = versioning.DocumentParser() + empty.feed('') + + versioning.validate_social_image_metadata( + empty, + "docs/alias/index.html", + root, + ORIGIN, + allow_missing=True, + ) + + with self.assertRaisesRegex( + SystemExit, "social image metadata is missing or duplicated" + ): + versioning.validate_social_image_metadata( + empty, + "docs/index.html", + root, + ORIGIN, + ) + + partial = versioning.DocumentParser() + partial.feed( + '' + '' + ) + with self.assertRaisesRegex( + SystemExit, "social image metadata is missing or duplicated" + ): + versioning.validate_social_image_metadata( + partial, + "docs/alias/index.html", + root, + ORIGIN, + allow_missing=True, + ) + + def test_temporary_manifest_drives_prepare_config_and_route_order(self) -> None: + manifest_data = { + "schemaVersion": 1, + "repository": "https://github.com/apache/hugegraph-doc.git", + "versions": [ + { + "id": "latest", + "name": "Next", + "ref": "main-docs", + "publishPath": "", + "archived": False, + "githubBranch": "main-docs", + }, + { + "id": "2.0", + "name": "2.0", + "ref": "release-2-docs", + "publishPath": "versions/stable-two", + "archived": True, + "githubBranch": "release-2-docs", + }, + { + "id": "1.9", + "name": "1.9", + "ref": "release-19-docs", + "publishPath": "versions/stable-nineteen", + "archived": True, + "githubBranch": "release-19-docs", + }, + ], + } + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + manifest_path = temp / "versions.json" + manifest_path.write_text(json.dumps(manifest_data), encoding="utf-8") + manifest = versioning.load_manifest(manifest_path) + resolved_path = temp / "resolved.json" + args = argparse.Namespace( + manifest=manifest_path, + local=False, + latest_sha="a" * 40, + select=None, + output=resolved_path, + ) + remote_shas = { + "release-2-docs": "b" * 40, + "release-19-docs": "c" * 40, + } + with ( + mock.patch.object(versioning, "run", return_value="a" * 40), + mock.patch.object( + versioning, + "resolve_remote", + side_effect=lambda _repository, ref: remote_shas[ref], + ), + ): + versioning.prepare(args) + resolved = json.loads(resolved_path.read_text(encoding="utf-8")) + self.assertEqual( + [entry["id"] for entry in resolved["include"]], + ["latest", "2.0", "1.9"], + ) + self.assertEqual( + [entry["ref"] for entry in resolved["versions"]], + ["main-docs", "release-2-docs", "release-19-docs"], + ) + + config = versioning.derived_version_config( + manifest, manifest["versions"][0], ORIGIN + ) + self.assertEqual( + [entry["version"] for entry in config["params"]["versions"]], + ["latest", "2.0", "1.9"], + ) + self.assertEqual( + [entry["url"] for entry in config["params"]["versions"]], + [ + f"{ORIGIN}docs/", + f"{ORIGIN}versions/stable-two/docs/", + f"{ORIGIN}versions/stable-nineteen/docs/", + ], + ) + config_path = temp / "version-config.json" + versioning.render_config( + argparse.Namespace( + manifest=manifest_path, + version=None, + site_origin=ORIGIN, + historical_origin=None, + output=config_path, + ) + ) + rendered_config = json.loads(config_path.read_text(encoding="utf-8")) + self.assertEqual(rendered_config["params"]["version"], "latest") + self.assertEqual( + rendered_config["params"]["github_branch"], "main-docs" + ) + + roots = {} + for entry in manifest["versions"]: + root = temp / entry["id"] + roots[entry["id"]] = root + for relative in ("docs/guide", "cn/docs/guide"): + page = root / relative / "index.html" + page.parent.mkdir(parents=True, exist_ok=True) + page.write_text("", encoding="utf-8") + routes = versioning.generate_version_routes(roots, manifest) + self.assertEqual(routes["versions"], ["latest", "2.0", "1.9"]) + self.assertEqual( + list(routes["pages"]["en:guide"]), + ["latest", "2.0", "1.9"], + ) + versioning.validate_version_routes(routes, manifest) + def test_write_error_documents_keeps_localized_404_status_targets(self) -> None: with tempfile.TemporaryDirectory() as temp_name: output = Path(temp_name) @@ -583,6 +1041,51 @@ def test_exact_legacy_content_fixes_cover_every_bound_mapping(self) -> None: self.assertNotIn(old, rendered) self.assertEqual(rendered.count(new), expected_count) + def test_historical_pages_are_noindex_and_aliases_are_locale_aware(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + output = Path(temp_name) + for index, language_prefix in enumerate(("", "cn/")): + target = ( + output + / language_prefix + / "docs/quickstart/hugegraph/hugegraph-server/index.html" + ) + target.parent.mkdir(parents=True) + target.write_text( + '' + if index == 0 + else '', + encoding="utf-8", + ) + error_page = output / "404.html" + error_page.write_text( + '', encoding="utf-8" + ) + self.assertEqual(versioning.mark_historical_pages_noindex(output), 2) + self.assertIn( + "noindex,nofollow", error_page.read_text(encoding="utf-8") + ) + self.assertEqual( + versioning.write_historical_route_aliases( + output, ORIGIN, "versions/1.0" + ), + 2, + ) + for language_prefix in ("", "cn/"): + alias = ( + output + / language_prefix + / "docs/quickstart/hugegraph-server/index.html" + ) + body = alias.read_text(encoding="utf-8") + self.assertIn('content="noindex,follow"', body) + self.assertIn( + f"{ORIGIN}versions/1.0/{language_prefix}" + "docs/quickstart/hugegraph/hugegraph-server/", + body, + ) + self.assertFalse((output / "cn/cn").exists()) + def test_exact_legacy_content_fixes_fail_closed_on_count_drift(self) -> None: language, relative, old, _, _ = versioning.LEGACY_EXACT_CONTENT_FIXES["1.5"][0] for source in ("no expected anchor", f"{old}\n{old}"): @@ -754,6 +1257,70 @@ def test_rewrites_production_origin_for_staging(self) -> None: allowed_paths=ALLOWED_PATHS, ) + def test_latest_staging_scope_preserves_production_history_selector(self) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + latest = manifest["versions"][0] + with tempfile.TemporaryDirectory() as temp_name: + output = Path(temp_name) + history_url = f"{ORIGIN}versions/1.7/docs/" + page = output / "index.html" + page.write_text( + f'latest' + f'1.7', + encoding="utf-8", + ) + llms = output / "llms-full.txt" + llms.write_text( + f"# Corpus\n\n- [Latest]({ORIGIN}docs/)\n" + f"- [1.7]({history_url})\n", + encoding="utf-8", + ) + + versioning.scope_version_artifact( + output, + manifest, + latest, + STAGING_ORIGIN, + historical_origin=ORIGIN, + ) + + rendered = page.read_text(encoding="utf-8") + self.assertIn(f'href="{STAGING_ORIGIN}docs/"', rendered) + self.assertIn(f'href="{history_url}"', rendered) + rendered_llms = llms.read_text(encoding="utf-8") + self.assertIn(f"]({STAGING_ORIGIN}docs/)", rendered_llms) + self.assertIn(f"]({history_url})", rendered_llms) + + def test_full_staging_missing_latest_shared_route_uses_staging_origin( + self, + ) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + oldest = next(entry for entry in manifest["versions"] if entry["id"] == "1.0") + with tempfile.TemporaryDirectory() as temp_name: + output = Path(temp_name) + page = output / "docs/index.html" + page.parent.mkdir(parents=True) + page.write_text( + 'Security', + encoding="utf-8", + ) + + versioning.scope_version_artifact( + output, + manifest, + oldest, + STAGING_ORIGIN, + historical_origin=STAGING_ORIGIN, + ) + + self.assertIn( + ( + f'href="{STAGING_ORIGIN}' + 'docs/guides/security/?from=archive#report"' + ), + page.read_text(encoding="utf-8"), + ) + def test_rejects_non_selector_cross_version_url(self) -> None: with self.assertRaises(SystemExit): rewrite("/versions/1.5/docs/config/") @@ -769,6 +1336,7 @@ def test_maps_known_historical_routes(self) -> None: origin=ORIGIN, publish_path="versions/1.5", allowed_paths=ALLOWED_PATHS, + version_id="1.5", ), "https://hugegraph.apache.org/versions/1.5/docs/introduction/readme/", ) @@ -791,14 +1359,61 @@ def test_markdown_rewrite_skips_fenced_code(self) -> None: self.assertIn('example', rendered) self.assertIn('Blog', rendered) + def test_rewrites_each_srcset_and_imagesrcset_candidate(self) -> None: + source = ( + '' + '' + '' + '' + '' + ) + rendered, count = versioning.rewrite_text_urls( + source, + rewrite, + markdown=False, + ) + self.assertEqual(count, 7) + for name in ("one", "two", "three", "four", "five"): + self.assertIn( + f"/versions/1.7/images/{name}.png", + rendered, + ) + self.assertIn(" 1x,", rendered) + self.assertIn(" 800w", rendered) + self.assertIn( + 'xlink:href="/versions/1.7/images/sprite.svg#icon"', + rendered, + ) + self.assertIn( + 'data-td-action-url="/versions/1.7/docs/action/"', + rendered, + ) + + def test_markdown_rewrites_multiline_srcset_outside_fences(self) -> None: + source = ( + "\n' + "```html\n" + "\n' + "```\n" + ) + rendered, count = versioning.rewrite_text_urls( + source, + rewrite, + markdown=True, + ) + self.assertEqual(count, 2) + self.assertIn("/versions/1.7/images/one.png 1x", rendered) + self.assertIn("/versions/1.7/images/two.png 2x", rendered) + self.assertIn('srcset="/images/example.png 1x,', rendered) + self.assertIn("/images/example-2x.png 2x", rendered) + def test_language_fallback_scopes_to_each_artifact_base(self) -> None: - manifest = { - "versions": [ - {"publishPath": ""}, - {"publishPath": "versions/1.7"}, - {"publishPath": "versions/1.5"}, - ] - } + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") relative = "cn/docs/changelog/hugegraph-0.12.0-release-notes/index.html" for publish_path, expected_url in ( ("", "/"), @@ -840,7 +1455,11 @@ def test_language_fallback_scopes_to_each_artifact_base(self) -> None: versioning.scope_version_artifact( output, manifest, - {"publishPath": publish_path}, + next( + entry + for entry in manifest["versions"] + if entry["publishPath"] == publish_path + ), STAGING_ORIGIN, ) @@ -1024,6 +1643,37 @@ def test_validate_command_rejects_artifact_sha_drift(self) -> None: with self.assertRaises(SystemExit): versioning.validate_artifact(args) + def test_validate_command_runs_complete_rendered_security_scan(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + artifact = Path(temp_name) / "artifact" + artifact.mkdir() + entry = json.loads( + (versioning.ROOT / "versions.json").read_text(encoding="utf-8") + )["versions"][0] + sha = "a" * 40 + metadata = dict(entry) + metadata.update({"sha": sha, "baseURL": ORIGIN}) + (artifact / ".version.json").write_text( + json.dumps(metadata), encoding="utf-8" + ) + args = argparse.Namespace( + manifest=versioning.ROOT / "versions.json", + version="latest", + sha=sha, + site_origin=ORIGIN, + artifact=artifact, + ) + with ( + mock.patch.object( + versioning, + "validate_output_security", + side_effect=SystemExit("unsafe rendered resource"), + ) as scan, + self.assertRaisesRegex(SystemExit, "unsafe rendered resource"), + ): + versioning.validate_artifact(args) + scan.assert_called_once_with(artifact.resolve(), ORIGIN) + def test_rejects_active_and_ambiguous_url_schemes(self) -> None: for value in ( "javascript:alert(1)", @@ -1031,6 +1681,10 @@ def test_rejects_active_and_ambiguous_url_schemes(self) -> None: "file:///etc/passwd", "ftp://example.org/file", "//example.org/path", + "https:///docs/introduction/", + "https:////docs/introduction/", + "http:docs/introduction/", + "/docs/introduction/\t", ): with self.subTest(value=value), self.assertRaises(SystemExit): versioning.require_safe_url_scheme(value, "fixture.html") @@ -1038,6 +1692,43 @@ def test_rejects_active_and_ambiguous_url_schemes(self) -> None: self.assertFalse(versioning.require_safe_url_scheme("tel:+1", "x")) self.assertTrue(versioning.require_safe_url_scheme("/docs/", "x")) + def test_document_parser_captures_active_navigation_urls(self) -> None: + parser = versioning.DocumentParser() + parser.feed( + '
' + '' + '' + "
" + '' + '' + '' + '' + '' + 'legacy' + '' + '' + '' + ) + self.assertEqual( + parser.urls, + [ + ("action", "/submit"), + ("formaction", "/button-submit"), + ("formaction", "/input-submit"), + ("data", "/payload"), + ("href", "/map"), + ("href", "/sprite.svg#icon"), + ("xlink:href", "/legacy.svg#icon"), + ("xlink:href", "/legacy-image.svg"), + ("xlink:href", "/legacy-link"), + ("srcset", "/one.png"), + ("srcset", "/two.png"), + ("imagesrcset", "/three.png"), + ("imagesrcset", "/four.png"), + ("data-td-action-url", "/action"), + ], + ) + def test_rejects_resolved_manifest_drift(self) -> None: with tempfile.TemporaryDirectory() as temp_name: manifest = json.loads( @@ -1050,6 +1741,15 @@ def test_rejects_resolved_manifest_drift(self) -> None: path.write_text(json.dumps(manifest), encoding="utf-8") with self.assertRaises(SystemExit): versioning.load_resolved_manifest(path) + manifest = json.loads( + (versioning.ROOT / "versions.json").read_text(encoding="utf-8") + ) + for entry in manifest["versions"]: + entry["sha"] = "a" * 40 + manifest["versions"].pop() + path.write_text(json.dumps(manifest), encoding="utf-8") + with self.assertRaisesRegex(SystemExit, "version order"): + versioning.load_resolved_manifest(path) def test_aggregate_rejects_metadata_sha_before_copy(self) -> None: with tempfile.TemporaryDirectory() as temp_name: @@ -1093,6 +1793,7 @@ def test_aggregate_security_scan_runs_after_metadata_is_written(self) -> None: artifacts=temp / "artifacts", artifact_prefix="", site_origin=ORIGIN, + historical_origin="https://hugegraph.apache.org", output=output, asf_profile="oink", asf_whoami="asf-staging-oink", @@ -1108,6 +1809,9 @@ def assert_complete_aggregate(path: Path, origin: str) -> None: asf_text, ) self.assertTrue((path / "build-metadata/versions.json").is_file()) + self.assertTrue( + (path / "build-metadata/version-routes.json").is_file() + ) with ( mock.patch.object( @@ -1115,10 +1819,25 @@ def assert_complete_aggregate(path: Path, origin: str) -> None: "load_resolved_manifest", return_value={"versions": [entry]}, ), + mock.patch.object( + versioning, + "load_version_routes", + return_value={ + "schemaVersion": 1, + "versions": ["latest"], + "pages": {"en:": {"latest": "docs/"}}, + "equivalents": [], + }, + ), mock.patch.object(versioning, "require_metadata_matches"), - mock.patch.object(versioning, "validate_artifact"), + mock.patch.object( + versioning, "validate_artifact" + ) as validate_artifact, mock.patch.object(versioning, "write_error_documents", return_value=1), mock.patch.object(versioning, "sitemap_locations", return_value=[]), + mock.patch.object( + versioning, "validate_aggregate_version_routes" + ) as validate_routes, mock.patch.object( versioning, "validate_output_security", @@ -1128,6 +1847,12 @@ def assert_complete_aggregate(path: Path, origin: str) -> None: versioning.aggregate(args) security_scan.assert_called_once_with(output.resolve(), ORIGIN) + validate_routes.assert_called_once() + validate_args = validate_artifact.call_args.args[0] + self.assertEqual( + validate_args.historical_origin, + "https://hugegraph.apache.org", + ) def test_output_cleanup_is_limited_to_temporary_descendants(self) -> None: with tempfile.TemporaryDirectory() as temp_name: @@ -1146,6 +1871,790 @@ def test_output_cleanup_is_limited_to_temporary_descendants(self) -> None: versioning.prepare_output_directory(symlink, "fixture") with self.assertRaises(SystemExit): versioning.prepare_output_directory(versioning.ROOT, "fixture") + with self.assertRaises(SystemExit): + versioning.prepare_output_directory(versioning.ROOT.parent, "fixture") + checkout_child = versioning.ROOT / ".test-output-must-not-be-deleted" + checkout_child.mkdir(exist_ok=True) + try: + with self.assertRaises(SystemExit): + versioning.prepare_output_directory(checkout_child, "fixture") + self.assertTrue(checkout_child.is_dir()) + finally: + checkout_child.rmdir() + + def test_output_cleanup_rejects_sibling_checkout_marker(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + sibling = Path(temp_name) / "sibling-worktree" + sibling.mkdir() + (sibling / ".git").write_text( + "gitdir: /tmp/fixture.git/worktrees/sibling\n", + encoding="utf-8", + ) + with ( + mock.patch.object(versioning.shutil, "rmtree") as remove, + self.assertRaisesRegex(SystemExit, "Git checkout"), + ): + versioning.prepare_output_directory(sibling, "fixture") + remove.assert_not_called() + + def test_output_cleanup_rejects_existing_parent_symlink_before_resolve( + self, + ) -> None: + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + target = temp / "target" + target.mkdir() + linked_parent = temp / "linked-parent" + linked_parent.symlink_to(target, target_is_directory=True) + output = linked_parent / "output" + output.mkdir() + sentinel = output / "sentinel" + sentinel.write_text("keep", encoding="utf-8") + + with self.assertRaisesRegex(SystemExit, "symbolic link"): + versioning.prepare_output_directory(output, "fixture") + + self.assertEqual(sentinel.read_text(encoding="utf-8"), "keep") + self.assertTrue(output.is_dir()) + + def test_output_cleanup_rejects_symlinked_runner_temp_before_resolve( + self, + ) -> None: + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + target = temp / "target" + output = target / "output" + output.mkdir(parents=True) + sentinel = output / "sentinel" + sentinel.write_text("keep", encoding="utf-8") + runner_temp = temp / "runner-temp" + runner_temp.symlink_to(target, target_is_directory=True) + + with ( + mock.patch.dict( + versioning.os.environ, + {"RUNNER_TEMP": str(runner_temp)}, + ), + self.assertRaisesRegex(SystemExit, "symbolic link"), + ): + versioning.prepare_output_directory( + runner_temp / "output", + "fixture", + ) + + self.assertEqual(sentinel.read_text(encoding="utf-8"), "keep") + self.assertTrue(output.is_dir()) + + def test_output_cleanup_rejects_symlink_above_runner_temp_before_resolve( + self, + ) -> None: + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + target = temp / "target" + runner_temp_target = target / "runner-temp" + output = runner_temp_target / "output" + output.mkdir(parents=True) + sentinel = output / "sentinel" + sentinel.write_text("keep", encoding="utf-8") + linked_parent = temp / "linked-parent" + linked_parent.symlink_to(target, target_is_directory=True) + runner_temp = linked_parent / "runner-temp" + + with ( + mock.patch.dict( + versioning.os.environ, + {"RUNNER_TEMP": str(runner_temp)}, + ), + self.assertRaisesRegex(SystemExit, "symbolic link"), + ): + versioning.prepare_output_directory( + runner_temp / "output", + "fixture", + ) + + self.assertEqual(sentinel.read_text(encoding="utf-8"), "keep") + self.assertTrue(output.is_dir()) + + def test_output_cleanup_accepts_real_runner_temp_below_tmp_alias( + self, + ) -> None: + with tempfile.TemporaryDirectory(dir="/tmp") as temp_name: + runner_temp = Path(temp_name) / "runner-temp" + output = runner_temp / "output" + output.mkdir(parents=True) + (output / "stale").write_text("remove", encoding="utf-8") + + with mock.patch.dict( + versioning.os.environ, + {"RUNNER_TEMP": str(runner_temp)}, + ): + self.assertEqual( + versioning.prepare_output_directory(output, "fixture"), + output.resolve(), + ) + + self.assertFalse(output.exists()) + + def test_output_cleanup_rejects_registered_sibling_worktree(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + sibling = Path(temp_name) / "registered-sibling" + sibling.mkdir() + with ( + mock.patch.object( + versioning, + "registered_worktree_roots", + return_value=(versioning.ROOT.resolve(), sibling.resolve()), + ), + mock.patch.object(versioning.shutil, "rmtree") as remove, + self.assertRaisesRegex(SystemExit, "Git checkout"), + ): + versioning.prepare_output_directory(sibling, "fixture") + remove.assert_not_called() + + def test_output_cleanup_fails_closed_when_worktrees_cannot_be_enumerated( + self, + ) -> None: + with tempfile.TemporaryDirectory() as temp_name: + output = Path(temp_name) / "output" + output.mkdir() + with ( + mock.patch.object( + versioning, + "registered_worktree_roots", + side_effect=SystemExit("cannot enumerate protected Git worktrees"), + ), + mock.patch.object(versioning.shutil, "rmtree") as remove, + self.assertRaisesRegex(SystemExit, "cannot enumerate"), + ): + versioning.prepare_output_directory(output, "fixture") + remove.assert_not_called() + + def test_version_routes_generate_canonical_pages_and_known_equivalents( + self, + ) -> None: + def page(root: Path, relative: str, *, redirect: str | None = None) -> None: + target = root / relative / "index.html" + target.parent.mkdir(parents=True, exist_ok=True) + refresh = ( + f'' + if redirect + else "" + ) + target.write_text(f"{refresh}", encoding="utf-8") + + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + roots = {} + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + version_ids = [entry["id"] for entry in manifest["versions"]] + for version in version_ids: + roots[version] = temp / version + page(roots[version], "docs") + page(roots[version], "cn/docs") + spelling = ( + "api-performance" if version == "latest" else "api-preformance" + ) + page(roots[version], f"docs/performance/{spelling}") + page(roots["latest"], "docs/introduction") + page(roots["latest"], "cn/docs/introduction") + page( + roots["latest"], + "docs/introduction/readme", + redirect="/docs/introduction/", + ) + page( + roots["latest"], + "cn/docs/introduction/readme", + redirect="/cn/docs/introduction/", + ) + for version in ("1.7", "1.5", "1.3", "1.0"): + page(roots[version], "docs/introduction/readme") + page(roots[version], "cn/docs/introduction/readme") + + routes = versioning.generate_version_routes(roots, manifest) + + self.assertEqual(routes["versions"], version_ids) + self.assertEqual( + routes["equivalents"], + [ + ["cn:introduction", "cn:introduction/readme"], + ["en:introduction", "en:introduction/readme"], + ], + ) + self.assertEqual( + routes["pages"]["en:performance/api-performance"]["latest"], + "docs/performance/api-performance/", + ) + self.assertEqual( + routes["pages"]["en:performance/api-performance"]["1.7"], + "docs/performance/api-preformance/", + ) + self.assertEqual( + routes["pages"]["en:introduction/readme"]["1.5"], + "docs/introduction/readme/", + ) + self.assertIsNone(routes["pages"]["en:introduction"]["1.5"]) + self.assertEqual( + routes["pages"]["en:introduction/readme"]["1.7"], + "docs/introduction/readme/", + ) + self.assertEqual( + routes["pages"]["en:introduction/readme"]["1.3"], + "docs/introduction/readme/", + ) + versioning.validate_version_routes(routes, manifest) + + def test_version_switch_resolves_unique_equivalent_logical_page(self) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + routes = json.loads( + (versioning.ROOT / "data/version_routes.json").read_text( + encoding="utf-8" + ) + ) + for language, prefix in (("en", ""), ("cn", "cn/")): + with self.subTest(language=language, direction="latest-to-history"): + options = versioning.version_switch_options( + manifest, + routes, + "latest", + f"{prefix}docs/introduction/", + ORIGIN, + language=language, + ) + for version in ("1.5", "1.3", "1.0"): + option = next(item for item in options if item["id"] == version) + self.assertEqual( + option["url"], + ( + f"{ORIGIN}versions/{version}/{prefix}" + "docs/introduction/readme/" + ), + ) + self.assertTrue(option["equivalent"]) + self.assertFalse(option["fallback"]) + + with self.subTest(language=language, direction="history-to-latest"): + options = versioning.version_switch_options( + manifest, + routes, + "1.7", + f"{prefix}docs/introduction/readme/", + ORIGIN, + language=language, + ) + latest = next(item for item in options if item["id"] == "latest") + self.assertEqual( + latest["url"], f"{ORIGIN}{prefix}docs/introduction/" + ) + self.assertTrue(latest["equivalent"]) + self.assertFalse(latest["fallback"]) + + with self.subTest(language=language, direction="direct-wins"): + options = versioning.version_switch_options( + manifest, + routes, + "1.7", + f"{prefix}docs/introduction/", + ORIGIN, + language=language, + ) + latest = next(item for item in options if item["id"] == "latest") + self.assertEqual( + latest["url"], f"{ORIGIN}{prefix}docs/introduction/" + ) + self.assertTrue(latest["equivalent"]) + self.assertFalse(latest["fallback"]) + + def test_version_route_equivalents_reject_unsafe_or_ambiguous_groups( + self, + ) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + versions = list(versioning.manifest_version_ids(manifest)) + targets = {version: None for version in versions} + fixtures = ( + [ + ["en:introduction", "cn:introduction"], + ], + [ + ["en:introduction", "en:introduction/readme"], + ["en:introduction/readme", "en:config"], + ], + [ + [ + "en:introduction", + "en:introduction/readme", + "en:config", + ], + ], + ) + pages = { + "en:introduction": dict(targets, latest="docs/introduction/"), + "en:introduction/readme": dict( + targets, **{"1.7": "docs/introduction/readme/"} + ), + "en:config": dict(targets, **{"1.7": "docs/config/"}), + "cn:introduction": dict(targets, latest="cn/docs/introduction/"), + } + for equivalents in fixtures: + with self.subTest(equivalents=equivalents), self.assertRaises(SystemExit): + versioning.validate_version_routes( + { + "schemaVersion": 1, + "versions": versions, + "pages": pages, + "equivalents": equivalents, + }, + manifest, + ) + + def test_version_routes_reject_alias_target_missing_from_its_artifact( + self, + ) -> None: + def page(root: Path, relative: str, *, redirect: str | None = None) -> None: + target = root / relative / "index.html" + target.parent.mkdir(parents=True, exist_ok=True) + refresh = ( + f'' + if redirect + else "" + ) + target.write_text( + f"{refresh}", encoding="utf-8" + ) + + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + roots = {} + for entry in manifest["versions"]: + version = entry["id"] + roots[version] = temp / version + page(roots[version], "docs") + page(roots[version], "cn/docs") + page( + roots["latest"], + "docs/introduction", + redirect="/docs/renamed/", + ) + page(roots["1.5"], "docs/introduction") + page(roots["1.5"], "docs/renamed") + + with self.assertRaisesRegex( + SystemExit, "alias target is missing" + ): + versioning.generate_version_routes(roots, manifest) + + def test_artifact_alias_targets_are_local_scoped_and_present(self) -> None: + with tempfile.TemporaryDirectory() as temp_name: + root = Path(temp_name) + target = root / "docs/current/index.html" + target.parent.mkdir(parents=True) + target.write_text("current", encoding="utf-8") + latest = versioning.load_manifest( + versioning.ROOT / "versions.json" + )["versions"][0] + + for value in ( + "/docs/current/", + f"{ORIGIN}docs/current/", + ): + self.assertEqual( + versioning.validate_artifact_alias_target( + value, + root, + latest, + ORIGIN, + "docs/old/index.html", + ), + "/docs/current/", + ) + + invalid = ( + "https://evil.example/docs/current/", + "https:///docs/current/", + "http:///docs/current/", + "mailto:dev@example.com", + "tel:+123", + "docs/current/", + "/docs/missing/", + "/docs/current/?next=1", + "/docs/current/#next", + "/docs/%63urrent/", + "/docs/./current/", + "/docs//current/", + "/docs/current/\t", + ) + for value in invalid: + with self.subTest(value=value), self.assertRaises(SystemExit): + versioning.validate_artifact_alias_target( + value, + root, + latest, + ORIGIN, + "docs/old/index.html", + ) + + archived = next( + entry + for entry in versioning.load_manifest( + versioning.ROOT / "versions.json" + )["versions"] + if entry["id"] == "1.7" + ) + archived_base = f"{ORIGIN}versions/1.7/" + self.assertEqual( + versioning.validate_artifact_alias_target( + f"{archived_base}docs/current/", + root, + archived, + archived_base, + "docs/old/index.html", + ), + "/versions/1.7/docs/current/", + ) + with self.assertRaisesRegex(SystemExit, "escapes version"): + versioning.validate_artifact_alias_target( + "/docs/current/", + root, + archived, + archived_base, + "docs/old/index.html", + ) + + def test_historical_home_aliases_allow_only_exact_shared_roots(self) -> None: + for origin in (ORIGIN, STAGING_ORIGIN): + with self.subTest(origin=origin): + versioning.validate_historical_home_alias_target( + origin, + "index.html", + origin, + ) + versioning.validate_historical_home_alias_target( + f"{origin}cn/", + "cn/index.html", + origin, + ) + + invalid = ( + ("https://evil.example/", "index.html"), + (f"{ORIGIN}cn/", "index.html"), + (ORIGIN, "cn/index.html"), + (f"{ORIGIN}docs/", "index.html"), + ("mailto:dev@example.com", "index.html"), + ) + for value, relative in invalid: + with self.subTest(value=value, relative=relative), self.assertRaises( + SystemExit + ): + versioning.validate_historical_home_alias_target( + value, + relative, + ORIGIN, + ) + + def test_version_routes_reject_external_and_protocol_aliases(self) -> None: + def page(root: Path, relative: str, *, redirect: str | None = None) -> None: + target = root / relative / "index.html" + target.parent.mkdir(parents=True, exist_ok=True) + refresh = ( + f'' + if redirect + else "" + ) + target.write_text( + f"{refresh}", encoding="utf-8" + ) + + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + for redirect in ( + "https://evil.example/docs/current/", + "mailto:dev@example.com", + "tel:+123", + ): + with self.subTest(redirect=redirect), tempfile.TemporaryDirectory() as name: + temp = Path(name) + roots = {} + for entry in manifest["versions"]: + roots[entry["id"]] = temp / entry["id"] + page(roots[entry["id"]], "docs") + page(roots[entry["id"]], "cn/docs") + page(roots["latest"], "docs/old", redirect=redirect) + page(roots["latest"], "docs/current") + with self.assertRaises(SystemExit): + versioning.generate_version_routes(roots, manifest) + + def test_version_routes_accept_alias_chain_to_same_version_canonical( + self, + ) -> None: + def page(root: Path, relative: str, *, redirect: str | None = None) -> None: + target = root / relative / "index.html" + target.parent.mkdir(parents=True, exist_ok=True) + refresh = ( + f'' + if redirect + else "" + ) + target.write_text( + f"{refresh}", encoding="utf-8" + ) + + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + with tempfile.TemporaryDirectory() as temp_name: + temp = Path(temp_name) + roots = {} + for entry in manifest["versions"]: + version = entry["id"] + roots[version] = temp / version + page(roots[version], "docs") + page(roots[version], "cn/docs") + page(roots["latest"], "docs/old", redirect="/docs/middle/") + page(roots["latest"], "docs/middle", redirect="/docs/current/") + page(roots["latest"], "docs/current") + page(roots["1.7"], "docs/old") + + routes = versioning.generate_version_routes(roots, manifest) + + self.assertEqual( + routes["equivalents"], + [["en:current", "en:old"]], + ) + + def test_version_route_equivalents_reject_mixed_types_cleanly(self) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + versions = list(versioning.manifest_version_ids(manifest)) + routes = { + "schemaVersion": 1, + "versions": versions, + "pages": { + "en:": { + version: "docs/" for version in versions + }, + }, + "equivalents": [["en:", 7]], + } + with self.assertRaisesRegex( + SystemExit, "invalid version route-map equivalent group" + ): + versioning.validate_version_routes(routes, manifest) + + def test_version_switch_options_use_equivalent_page_or_explicit_fallback( + self, + ) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + version_ids = versioning.manifest_version_ids(manifest) + routes = { + "schemaVersion": 1, + "versions": list(version_ids), + "pages": { + "en:config": { + "latest": "docs/config/", + "1.7": "docs/config/", + "1.5": None, + "1.3": "docs/config/", + "1.0": None, + } + }, + "equivalents": [], + } + options = versioning.version_switch_options( + manifest, + routes, + "latest", + "docs/config/", + STAGING_ORIGIN, + historical_origin=ORIGIN, + ) + self.assertEqual( + set(options[0]), + { + "id", + "title", + "url", + "active", + "available", + "disabledReason", + "equivalent", + "fallback", + }, + ) + self.assertEqual(options[0]["url"], f"{STAGING_ORIGIN}docs/config/") + self.assertTrue(options[0]["equivalent"]) + self.assertFalse(options[0]["fallback"]) + self.assertEqual(options[1]["url"], f"{ORIGIN}versions/1.7/docs/config/") + self.assertEqual( + options[2]["url"], + f"{ORIGIN}versions/1.5/docs/#hg-version-fallback", + ) + self.assertFalse(options[2]["equivalent"]) + self.assertTrue(options[2]["fallback"]) + + non_docs = versioning.version_switch_options( + manifest, + routes, + "latest", + None, + STAGING_ORIGIN, + historical_origin=ORIGIN, + language="cn", + ) + self.assertEqual(non_docs[1]["url"], f"{ORIGIN}versions/1.7/cn/docs/") + self.assertFalse(non_docs[1]["equivalent"]) + self.assertFalse(non_docs[1]["fallback"]) + + def test_scope_preserves_hugo_version_options_instead_of_rebuilding_them( + self, + ) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + latest = manifest["versions"][0] + authored_options = [ + { + "id": entry["id"], + "title": entry["name"], + "url": ( + f"{ORIGIN}{entry['publishPath'].rstrip('/')}/docs/" + if entry["publishPath"] + else f"{ORIGIN}docs/" + ), + "active": entry["id"] == latest["id"], + "available": True, + "disabledReason": "", + "equivalent": True, + "fallback": False, + } + for entry in manifest["versions"] + ] + action_data = { + "actions": [{"id": "switch_version", "options": authored_options}] + } + with tempfile.TemporaryDirectory() as temp_name: + output = Path(temp_name) + page = output / "docs/index.html" + page.parent.mkdir(parents=True) + page.write_text( + '' + '", + encoding="utf-8", + ) + with ( + mock.patch.object( + versioning, + "version_switch_options", + side_effect=AssertionError( + "scope must not rebuild Hugo-authored version options" + ), + ), + mock.patch.object( + versioning, + "load_version_routes", + return_value=json.loads( + (versioning.ROOT / "data/version_routes.json").read_text( + encoding="utf-8" + ) + ), + ), + ): + versioning.scope_version_artifact( + output, + manifest, + latest, + ORIGIN, + historical_origin=ORIGIN, + ) + + rendered = page.read_text(encoding="utf-8") + scoped = json.loads( + versioning.ACTION_MANIFEST_RE.search(rendered).group("body") + ) + self.assertEqual(scoped["actions"][0]["options"], authored_options) + + def test_version_validator_compares_palette_with_every_native_anchor( + self, + ) -> None: + option = { + "id": "1.7", + "title": "1.7", + "url": f"{ORIGIN}versions/1.7/docs/config/", + "active": False, + "available": True, + "disabledReason": "", + "equivalent": True, + "fallback": False, + } + parser = versioning.DocumentParser() + parser.feed( + '1.7' + '1.7' + ) + + with self.assertRaisesRegex(SystemExit, "native version link mismatch"): + versioning.require_version_switch_matches_native( + parser, [option], "docs/config/index.html" + ) + + active = dict(option, active=True) + parser.version_links[0]["aria-current"] = "page" + versioning.require_version_switch_matches_native( + parser, [active], "docs/config/index.html" + ) + + parser.version_links[1]["href"] = f"{ORIGIN}docs/" + with self.assertRaisesRegex(SystemExit, "native version link mismatch"): + versioning.require_version_switch_matches_native( + parser, [active], "docs/config/index.html" + ) + + def test_aggregate_version_routes_reject_missing_targets_and_false_nulls( + self, + ) -> None: + manifest = versioning.load_manifest(versioning.ROOT / "versions.json") + version_ids = versioning.manifest_version_ids(manifest) + routes = { + "schemaVersion": 1, + "versions": list(version_ids), + "pages": { + "en:config": { + "latest": "docs/config/", + "1.7": None, + "1.5": None, + "1.3": None, + "1.0": None, + } + }, + "equivalents": [], + } + with tempfile.TemporaryDirectory() as temp_name: + output = Path(temp_name) + (output / "cn/docs").mkdir(parents=True) + target = output / "docs/config/index.html" + target.parent.mkdir(parents=True) + target.write_text("", encoding="utf-8") + versioning.validate_aggregate_version_routes( + output, routes, {"latest"}, manifest + ) + target.unlink() + with self.assertRaisesRegex(SystemExit, "route-map target is missing"): + versioning.validate_aggregate_version_routes( + output, routes, {"latest"}, manifest + ) + + target.write_text("", encoding="utf-8") + hidden = output / "versions/1.7/docs/config/index.html" + hidden.parent.mkdir(parents=True) + hidden.write_text("", encoding="utf-8") + (output / "versions/1.7/cn/docs").mkdir(parents=True) + with self.assertRaisesRegex(SystemExit, "route-map null target exists"): + versioning.validate_aggregate_version_routes( + output, + routes, + {"latest", "1.7"}, + manifest, + ) if __name__ == "__main__": diff --git a/scripts/versioning.py b/scripts/versioning.py index 1b6fcbfc50..1b30f3beb2 100644 --- a/scripts/versioning.py +++ b/scripts/versioning.py @@ -37,6 +37,7 @@ ROOT = pathlib.Path(__file__).resolve().parents[1] URL_CONTRACT = ROOT / "dist/url-contract.json" +VERSION_ROUTES = ROOT / "data/version_routes.json" CANONICAL_ORIGIN = "https://hugegraph.apache.org/" SHELL_FILES = ("go.mod", "go.sum", "hugo.yaml") SHELL_DIRS = ("assets", "data", "i18n", "layouts") @@ -44,7 +45,14 @@ "content/en/docs/_nav", "content/cn/docs/_nav", ) -SHELL_STATIC_FILES = ("favicon.svg",) +SHELL_STATIC_FILES = ( + "favicon.svg", + "img/social/hugegraph-default.png", +) +SHELL_STATIC_DIRS = ( + "img/bootstrap-controls", + "img/home", +) SHELL_CONTENT = ( "content/en/_index.md", "content/cn/_index.md", @@ -60,32 +68,50 @@ ) SHA_RE = re.compile(r"^[0-9a-f]{40}$") REPOSITORY_URL = "https://github.com/apache/hugegraph-doc.git" -VERSION_REFS = { - "latest": "master", - "1.7": "release-1.7.0", - "1.5": "release-1.5.0", -} KNOWN_HISTORICAL_ROUTES = { "/docs/quickstart/hugegraph-loader": "/docs/quickstart/toolchain/hugegraph-loader/", "/cn/docs/quickstart/hugegraph-loader": "/cn/docs/quickstart/toolchain/hugegraph-loader/", } -KNOWN_HISTORICAL_ROUTES_BY_PUBLISH_PATH = { - "versions/1.5": { +KNOWN_HISTORICAL_ROUTES_BY_VERSION = { + "1.5": { "/docs/introduction": "/docs/introduction/readme/", "/cn/docs/introduction": "/cn/docs/introduction/readme/", }, } +LATEST_SHARED_DOC_ROUTES = { + "/docs/guides/security/", + "/cn/docs/guides/security/", +} URL_ATTRIBUTE_RE = re.compile( - r"(?P[\s<](?:href|src|action|poster|data-td-index-src|data-td-url|data-td-image-zoom)=)" + r"(?P[\s<](?:href|xlink:href|src|action|formaction|data|poster|data-td-index-src|data-td-url|data-td-action-url|data-td-image-zoom)=)" r"(?P[\"']?)(?P[^\s\"'<>`]+)(?P=quote)", re.IGNORECASE, ) +URL_LIST_ATTRIBUTE_RE = re.compile( + r"(?P[\s<](?:srcset|imagesrcset)=)" + r"(?P[\"'])(?P.*?)(?P=quote)", + re.IGNORECASE | re.DOTALL, +) +URL_LIST_UNQUOTED_ATTRIBUTE_RE = re.compile( + r"(?P[\s<](?:srcset|imagesrcset)=)" + r"(?P[^\s\"'<>`]+)", + re.IGNORECASE, +) ACTION_MANIFEST_RE = re.compile( r"(?P]*\bid=[\"']?td-action-manifest[\"']?[^>]*>)" r"(?P.*?)" r"(?P)", re.IGNORECASE | re.DOTALL, ) +HREFLANG_LINK_RE = re.compile( + r"]*\brel=[\"']?alternate(?:[\"'\s>]|$))" + r"(?=[^>]*\bhreflang=)[^>]*>", + re.IGNORECASE, +) +ROBOTS_META_RE = re.compile( + r"]*\bname=[\"']?robots(?:[\"'\s>]|$))[^>]*>", + re.IGNORECASE, +) MARKDOWN_DESTINATION_RE = re.compile( r"(?P\]\(\s*(?:https?://[^\s)>]+|/[^\s)>]+))(?P>?[^)]*\))" ) @@ -121,9 +147,73 @@ "scopedLinks": 10, "treeSha256": "ac29ab8f0e7020496a3a1afe480687043d751e32c93ffb848e2210e3500cd483", }, + "1.3": { + "groups": 5, + "pages": 68, + "removed": 22, + "scopedLinks": 10, + "treeSha256": "e8c9b0a64dac6dd3e47827ec5072697eb7d3ed79659e0b5c4a9c5df8e1408d38", + }, + "1.0": { + "groups": 5, + "pages": 59, + "removed": 21, + "scopedLinks": 10, + "treeSha256": "bd45db511d9b6728e1523bd3c5ebd9d18912ee85aeabf79c77bcca7e511f977a", + }, +} +LEGACY_IA_ROUTE_MAP = { + "introduction/README.md": "introduction/readme.md", + "quickstart/hugegraph-server.md": "quickstart/hugegraph/hugegraph-server.md", + "quickstart/hugegraph-hubble.md": "quickstart/toolchain/hugegraph-hubble.md", + "quickstart/hugegraph-loader.md": "quickstart/toolchain/hugegraph-loader.md", + "quickstart/hugegraph-tools.md": "quickstart/toolchain/hugegraph-tools.md", + "quickstart/hugegraph-computer.md": "quickstart/computing/hugegraph-computer.md", + "quickstart/hugegraph-client.md": "quickstart/client/hugegraph-client.md", +} +LEGACY_IA_SECTIONS = { + "quickstart/hugegraph": ("HugeGraph", "HugeGraph"), + "quickstart/toolchain": ("Toolchain", "Toolchain"), + "quickstart/computing": ("Graph computing", "ๅ›พ่ฎก็ฎ—"), + "quickstart/client": ("Clients", "ๅฎขๆˆท็ซฏ"), } +def srcset_urls(value: str) -> list[str]: + """Return each URL candidate without treating data-URL commas as separators.""" + urls: list[str] = [] + position = 0 + while position < len(value): + while position < len(value) and ( + value[position].isspace() or value[position] == "," + ): + position += 1 + if position == len(value): + break + + start = position + is_data_url = value[start:].lower().startswith("data:") + while position < len(value) and not value[position].isspace(): + if value[position] == "," and not is_data_url: + break + position += 1 + token = value[start:position] + trailing_commas = len(token) - len(token.rstrip(",")) + token = token.rstrip(",") + if token: + urls.append(token) + if position < len(value) and value[position] == ",": + position += 1 + continue + if trailing_commas: + continue + while position < len(value) and value[position] != ",": + position += 1 + if position < len(value): + position += 1 + return urls + + class DocumentParser(html.parser.HTMLParser): def __init__(self) -> None: super().__init__(convert_charrefs=True) @@ -132,6 +222,7 @@ def __init__(self) -> None: self.hreflang: list[tuple[str, str]] = [] self.meta: list[dict[str, str]] = [] self.toc_nav_labels: list[list[str]] = [] + self.version_links: list[dict[str, str]] = [] def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None: values = {key.lower(): value or "" for key, value in attrs} @@ -143,15 +234,27 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None ) for attribute in ( "href", + "xlink:href", "src", "action", "poster", "data-td-index-src", "data-td-url", + "data-td-action-url", "data-td-image-zoom", ): if values.get(attribute): self.urls.append((attribute, values[attribute])) + if tag.lower() in {"button", "input"} and values.get("formaction"): + self.urls.append(("formaction", values["formaction"])) + if tag.lower() == "object" and values.get("data"): + self.urls.append(("data", values["data"])) + for attribute in ("srcset", "imagesrcset"): + if values.get(attribute): + self.urls.extend( + (attribute, value) + for value in srcset_urls(values[attribute]) + ) if tag == "link" and values.get("rel", "").lower() == "canonical": self.canonical.append(values.get("href", "")) if ( @@ -162,6 +265,8 @@ def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None self.hreflang.append((values["hreflang"], values.get("href", ""))) if tag == "meta": self.meta.append(values) + if tag == "a" and "data-hg-version-id" in values: + self.version_links.append(values) def refresh_target(parser: DocumentParser) -> str | None: @@ -209,15 +314,80 @@ def require_toc_accessible_name(parser: DocumentParser, relative: str) -> None: ) +def require_version_switch_matches_native( + parser: DocumentParser, options: list[dict], relative: str +) -> None: + """Require every native version link to match its Palette option.""" + if not isinstance(options, list): + fail(f"version switch options are invalid in {relative}") + by_id: dict[str, dict] = {} + for option in options: + version_id = option.get("id") if isinstance(option, dict) else None + if ( + not isinstance(version_id, str) + or not version_id + or version_id in by_id + or not isinstance(option.get("url"), str) + or not isinstance(option.get("available"), bool) + or not isinstance(option.get("active"), bool) + or not isinstance(option.get("equivalent"), bool) + or not isinstance(option.get("fallback"), bool) + ): + fail(f"version switch options are invalid in {relative}") + by_id[version_id] = option + + expected_ids = { + version_id + for version_id, option in by_id.items() + if option["available"] + } + observed_ids = { + link.get("data-hg-version-id", "") for link in parser.version_links + } + if observed_ids != expected_ids: + fail( + f"native version link set mismatch in {relative}: " + f"{sorted(observed_ids)!r} != {sorted(expected_ids)!r}" + ) + + for link in parser.version_links: + version_id = link["data-hg-version-id"] + option = by_id[version_id] + observed = { + "url": link.get("href", ""), + "equivalent": link.get("data-hg-version-equivalent") == "true", + "fallback": link.get("data-hg-version-fallback") == "true", + "active": link.get("aria-current") == "page", + } + expected = { + "url": option["url"], + "equivalent": option["equivalent"], + "fallback": option["fallback"], + "active": option["active"], + } + if observed != expected: + fail( + f"native version link mismatch in {relative} for " + f"{version_id}: {observed!r} != {expected!r}" + ) + + def require_safe_url_scheme(value: str, source: str) -> bool: """Reject active or ambiguous schemes; return whether target validation applies.""" if value.startswith("//"): fail(f"protocol-relative URL in {source}: {value}") - scheme = urllib.parse.urlsplit(value).scheme.lower() + if any( + char.isspace() or ord(char) < 0x20 or ord(char) == 0x7F for char in value + ): + fail(f"whitespace/control URL in {source}: {value}") + parts = urllib.parse.urlsplit(value) + scheme = parts.scheme.lower() if scheme in {"mailto", "tel"}: return False if scheme not in {"", "http", "https"}: fail(f"forbidden URL scheme in {source}: {value}") + if scheme in {"http", "https"} and not parts.netloc: + fail(f"HTTP(S) URL has no authority in {source}: {value}") return True @@ -225,20 +395,99 @@ def fail(message: str) -> NoReturn: raise SystemExit(message) +def registered_worktree_roots() -> tuple[pathlib.Path, ...]: + """Enumerate every checkout sharing this repository, failing closed.""" + try: + result = subprocess.run( + ["git", "worktree", "list", "--porcelain", "-z"], + cwd=ROOT, + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + except OSError as exc: + fail(f"cannot enumerate protected Git worktrees: {exc}") + if result.returncode != 0: + detail = os.fsdecode(result.stderr).strip() + fail(f"cannot enumerate protected Git worktrees: {detail or result.returncode}") + roots = [] + for field in result.stdout.split(b"\0"): + if not field.startswith(b"worktree "): + continue + raw = os.fsdecode(field.removeprefix(b"worktree ")) + path = pathlib.Path(raw) + if not raw or not path.is_absolute(): + fail(f"invalid Git worktree path: {raw!r}") + roots.append(path.resolve()) + if not roots: + fail("cannot enumerate protected Git worktrees: no checkout paths") + return tuple(roots) + + +def require_output_outside_git_checkouts(output: pathlib.Path, label: str) -> None: + """Reject registered, prunable, and unregistered checkout paths.""" + protected = set(registered_worktree_roots()) + protected.add(ROOT.resolve()) + for checkout in protected: + if ( + output == checkout + or output in checkout.parents + or checkout in output.parents + ): + fail(f"{label} must be outside every Git checkout: {output}") + for candidate in (output, *output.parents): + marker = candidate / ".git" + if marker.exists() or marker.is_symlink(): + fail(f"{label} must be outside every Git checkout: {output}") + + +def require_no_symlinked_output_components( + path: pathlib.Path, + label: str, + controlled_roots: set[pathlib.Path], +) -> pathlib.Path: + """Reject existing symlinks below a trusted temp root before resolution.""" + absolute = pathlib.Path(os.path.abspath(os.fspath(path))) + lexical_roots = { + pathlib.Path(os.path.abspath(os.fspath(root))) for root in controlled_roots + } + lexical_roots.update(root.resolve() for root in controlled_roots) + anchors = [ + root + for root in lexical_roots + if absolute == root or root in absolute.parents + ] + anchor = max(anchors, key=lambda item: len(item.parts)) if anchors else None + candidate = absolute + while candidate != anchor and candidate != candidate.parent: + if candidate.is_symlink(): + fail(f"{label} must not contain a symbolic link: {candidate}") + candidate = candidate.parent + return absolute + + def prepare_output_directory(path: pathlib.Path, label: str) -> pathlib.Path: raw = path.expanduser() - if raw.is_symlink(): - fail(f"{label} must not be a symbolic link: {raw}") - output = raw.resolve() - allowed_roots = { - pathlib.Path(tempfile.gettempdir()).resolve(), - pathlib.Path("/tmp").resolve(), + controlled_roots = { + pathlib.Path(tempfile.gettempdir()), + pathlib.Path("/tmp"), } runner_temp = os.environ.get("RUNNER_TEMP") if runner_temp: - allowed_roots.add(pathlib.Path(runner_temp).resolve()) + runner_temp_root = require_no_symlinked_output_components( + pathlib.Path(runner_temp).expanduser(), + "RUNNER_TEMP", + controlled_roots, + ) + controlled_roots.add(runner_temp_root) + raw_absolute = require_no_symlinked_output_components( + raw, label, controlled_roots + ) + output = raw_absolute.resolve() + allowed_roots = {root.resolve() for root in controlled_roots} if not any(root != output and root in output.parents for root in allowed_roots): fail(f"{label} must be below a controlled temporary directory: {output}") + require_output_outside_git_checkouts(output, label) if output.exists(): if output.is_symlink() or not output.is_dir(): fail(f"{label} is not a removable directory: {output}") @@ -267,35 +516,61 @@ def load_manifest(path: pathlib.Path) -> dict: if not isinstance(versions, list) or not versions: fail("versions manifest must contain a non-empty versions array") ids: set[str] = set() + refs: set[str] = set() paths: set[str] = set() - for entry in versions: + unarchived = [] + for index, entry in enumerate(versions): required = {"id", "name", "ref", "publishPath", "archived", "githubBranch"} if not isinstance(entry, dict) or not required.issubset(entry): fail(f"invalid version entry: {entry!r}") version_id = entry["id"] - expected_ref = VERSION_REFS.get(version_id) - if entry["ref"] != expected_ref: - fail(f"unexpected source ref for {version_id}: {entry['ref']}") - if entry["githubBranch"] != expected_ref: - fail(f"unexpected GitHub branch for {version_id}: {entry['githubBranch']}") - if entry["name"] != version_id: - fail(f"unexpected display name for {version_id}: {entry['name']}") - if entry["archived"] is not (version_id != "latest"): - fail(f"unexpected archive state for {version_id}: {entry['archived']}") + values = { + "id": version_id, + "name": entry["name"], + "ref": entry["ref"], + "githubBranch": entry["githubBranch"], + } + if not all(isinstance(value, str) and value for value in values.values()): + fail(f"version string fields must be non-empty: {entry!r}") + if not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._-]*", version_id): + fail(f"unsafe version id: {version_id!r}") + for field in ("ref", "githubBranch"): + value = entry[field] + if ( + not re.fullmatch(r"[A-Za-z0-9][A-Za-z0-9._/-]*", value) + or value.endswith("/") + or "//" in value + or ".." in value + ): + fail(f"unsafe version {field}: {value!r}") + if not isinstance(entry["archived"], bool): + fail(f"version archived state must be boolean: {entry!r}") + if not isinstance(entry["publishPath"], str): + fail(f"version publishPath must be a string: {entry!r}") publish_path = entry["publishPath"].strip("/") - if version_id in ids or publish_path in paths: + if ( + entry["publishPath"] != publish_path + or "\\" in publish_path + or "?" in publish_path + or "#" in publish_path + ): + fail(f"unsafe publish path for {version_id}: {entry['publishPath']!r}") + if version_id in ids or entry["ref"] in refs or publish_path in paths: fail(f"duplicate version id or publish path: {version_id}") - if version_id == "latest" and publish_path: - fail("latest must publish at the site root") - if version_id != "latest" and not publish_path.startswith("versions/"): - fail(f"historical version {version_id} must publish below versions/") + if not entry["archived"]: + unarchived.append(version_id) + if index != 0 or publish_path: + fail("the first manifest version must be the unarchived site root") + elif not publish_path.startswith("versions/"): + fail(f"archived version {version_id} must publish below versions/") if ".." in pathlib.PurePosixPath(publish_path).parts: fail(f"unsafe publish path for {version_id}: {publish_path}") entry["publishPath"] = publish_path ids.add(version_id) + refs.add(entry["ref"]) paths.add(publish_path) - if [entry["id"] for entry in versions] != ["latest", "1.7", "1.5"]: - fail("version order must be latest, 1.7, 1.5") + if len(unarchived) != 1: + fail("versions manifest must contain exactly one unarchived version") if data.get("repository") != REPOSITORY_URL: fail(f"versions manifest repository must be {REPOSITORY_URL}") return data @@ -306,6 +581,8 @@ def load_resolved_manifest(path: pathlib.Path) -> dict: expected = load_manifest(ROOT / "versions.json") if resolved.get("repository") != expected.get("repository"): fail("resolved manifest repository does not match versions.json") + if manifest_version_ids(resolved) != manifest_version_ids(expected): + fail("resolved manifest version order does not match versions.json") fields = ("id", "name", "ref", "publishPath", "archived", "githubBranch") for expected_entry, resolved_entry in zip( expected["versions"], resolved["versions"] @@ -344,12 +621,30 @@ def resolve_remote(repository: str, ref: str) -> str: return rows[0][0] +def manifest_version_ids(manifest: dict) -> tuple[str, ...]: + return tuple(entry["id"] for entry in manifest["versions"]) + + +def selected_version_ids(raw: str | None, manifest: dict) -> tuple[str, ...]: + version_ids = manifest_version_ids(manifest) + if raw is None: + return version_ids + selected = tuple(part.strip() for part in raw.split(",") if part.strip()) + if not selected or len(set(selected)) != len(selected): + fail("selected versions must be a non-empty unique comma-separated list") + unknown = set(selected) - set(version_ids) + if unknown: + fail(f"unknown selected versions: {', '.join(sorted(unknown))}") + return tuple(version for version in version_ids if version in selected) + + def prepare(args: argparse.Namespace) -> None: manifest = load_manifest(args.manifest) + selected = selected_version_ids(args.select, manifest) resolved = [] for entry in manifest["versions"]: item = dict(entry) - if entry["id"] == "latest": + if not entry["archived"]: sha = run(["git", "rev-parse", f"{args.latest_sha}^{{commit}}"]) elif args.local: sha = run( @@ -365,7 +660,7 @@ def prepare(args: argparse.Namespace) -> None: "schemaVersion": 1, "repository": manifest["repository"], "versions": resolved, - "include": resolved, + "include": [item for item in resolved if item["id"] in selected], } rendered = json.dumps( result, ensure_ascii=False, sort_keys=True, separators=(",", ":") @@ -401,6 +696,12 @@ def overlay_shell(assembly: pathlib.Path, *, historical: bool, origin: str) -> N target = assembly / "static" / relative target.parent.mkdir(parents=True, exist_ok=True) shutil.copy2(source, target) + for relative in SHELL_STATIC_DIRS: + source = ROOT / "static" / relative + target = assembly / "static" / relative + if target.exists(): + shutil.rmtree(target) + shutil.copytree(source, target) client_go_target = assembly / "static/client-go" if historical: if client_go_target.exists(): @@ -485,16 +786,21 @@ def strip_menu_frontmatter(path: pathlib.Path) -> None: if not path.is_file(): return lines = path.read_text(encoding="utf-8").splitlines(keepends=True) - if not lines or lines[0].strip() != "---": + opening_index = next( + (index for index, line in enumerate(lines) if line.strip()), None + ) + if opening_index is None or lines[opening_index].strip() != "---": fail(f"cannot remove menu from non-YAML front matter: {path}") try: closing_index = next( - index for index, line in enumerate(lines[1:], 1) if line.strip() == "---" + index + for index, line in enumerate(lines[opening_index + 1 :], opening_index + 1) + if line.strip() == "---" ) except StopIteration: fail(f"unterminated YAML front matter: {path}") - frontmatter = lines[1:closing_index] - output = [lines[0]] + frontmatter = lines[opening_index + 1 : closing_index] + output = lines[: opening_index + 1] index = 0 while index < len(frontmatter): line = frontmatter[index] @@ -539,6 +845,62 @@ def ensure_frontmatter( return 1 +def add_frontmatter_alias(path: pathlib.Path, alias: str) -> None: + source = path.read_text(encoding="utf-8") + opening = source.find("---") + if opening < 0 or source[:opening].strip(): + fail(f"cannot add route alias without YAML front matter: {path}") + closing = source.find("\n---", opening + 3) + if closing < 0: + fail(f"unterminated YAML front matter: {path}") + frontmatter = source[opening + 3 : closing] + if re.search(r"(?m)^aliases\s*:", frontmatter): + fail(f"historical page already declares aliases: {path}") + source = source[:closing] + f"\naliases:\n - {alias}\n" + source[closing:] + path.write_text(source, encoding="utf-8") + + +def migrate_legacy_information_architecture( + assembly: pathlib.Path, version: str +) -> int: + """Move 1.3/1.0 flat pages into the current five-group route hierarchy.""" + if version not in {"1.3", "1.0"}: + return 0 + changed = 0 + for language in ("en", "cn"): + docs = assembly / "content" / language / "docs" + for section, titles in LEGACY_IA_SECTIONS.items(): + index = docs / section / "_index.md" + if not index.exists(): + index.parent.mkdir(parents=True, exist_ok=True) + title = titles[0] if language == "en" else titles[1] + index.write_text( + f'---\ntitle: "{title}"\nlinkTitle: "{title}"\n---\n', + encoding="utf-8", + ) + changed += 1 + for old_relative, new_relative in LEGACY_IA_ROUTE_MAP.items(): + source = docs / old_relative + if not source.is_file(): + continue + target = docs / new_relative + if target.exists(): + if not source.samefile(target): + fail(f"historical route migration target already exists: {target}") + intermediate = source.with_name(source.name + ".route-migration-tmp") + source.rename(intermediate) + source = intermediate + target.parent.mkdir(parents=True, exist_ok=True) + source.rename(target) + changed += 1 + summary = docs / "SUMMARY.md" + text = summary.read_text(encoding="utf-8") + for old_relative, new_relative in LEGACY_IA_ROUTE_MAP.items(): + text = text.replace(old_relative, new_relative) + summary.write_text(text, encoding="utf-8") + return changed + + def ensure_search_metadata( path: pathlib.Path, *, keywords: tuple[str, ...], boost: float ) -> int: @@ -830,9 +1192,9 @@ def index_node(node: dict, ancestors: list[str]) -> None: LEGACY_WECHAT_IMAGE_RE = re.compile( - r']*\bsrc="(?:https://github\.com/apache/hugegraph-doc/' + r']*\bsrc="(?:https://github\.com/apache/(?:incubator-)?hugegraph-doc/' r"blob/master/assets/images/wechat\.png\?raw=true|https://raw\.githubusercontent\.com/" - r'apache/hugegraph-doc/master/assets/images/wechat\.png)")' + r'apache/(?:incubator-)?hugegraph-doc/master/assets/images/wechat\.png)")' r'(?=[^>]*\bwidth="(?P200|300)")[^>]*?/?>', re.IGNORECASE, ) @@ -1124,10 +1486,19 @@ def apply_exact_legacy_content_fixes(assembly: pathlib.Path, version: str) -> in return fixed +def first_existing_path(assembly: pathlib.Path, candidates: tuple[str, ...]) -> pathlib.Path: + """Resolve one version-specific content path without guessing missing files.""" + matches = [assembly / candidate for candidate in candidates if (assembly / candidate).is_file()] + if len(matches) != 1: + fail(f"expected exactly one historical path, found {len(matches)}: {candidates!r}") + return matches[0] + + def apply_known_legacy_fixes(assembly: pathlib.Path, version: str) -> int: fixed = 0 - if version in {"1.7", "1.5"}: - fixed += apply_exact_legacy_content_fixes(assembly, version) + if version in {"1.7", "1.5", "1.3", "1.0"}: + if version in LEGACY_EXACT_CONTENT_FIXES: + fixed += apply_exact_legacy_content_fixes(assembly, version) for language in ("en", "cn"): language_prefix = "/cn" if language == "cn" else "" legacy_metadata = ( @@ -1143,15 +1514,14 @@ def apply_known_legacy_fixes(assembly: pathlib.Path, version: str) -> int: ), ) for relative, title, link_title in legacy_metadata: - fixed += ensure_frontmatter( - assembly / f"content/{language}/docs/{relative}", - title=title, - link_title=link_title, - weight=100, - ) - fixed += ensure_search_excluded( - assembly / f"content/{language}/docs/CLA.md" - ) + page = assembly / f"content/{language}/docs/{relative}" + if page.is_file(): + fixed += ensure_frontmatter( + page, title=title, link_title=link_title, weight=100 + ) + cla = assembly / f"content/{language}/docs/CLA.md" + if cla.is_file(): + fixed += ensure_search_excluded(cla) search_metadata = ( ( "config/config-option.md", @@ -1167,16 +1537,20 @@ def apply_known_legacy_fixes(assembly: pathlib.Path, version: str) -> int: ), ) for relative, keywords in search_metadata: - fixed += ensure_search_metadata( - assembly / f"content/{language}/docs/{relative}", - keywords=keywords, - boost=1.5, - ) + page = assembly / f"content/{language}/docs/{relative}" + if page.is_file(): + fixed += ensure_search_metadata(page, keywords=keywords, boost=1.5) summary_path = assembly / f"content/{language}/docs/SUMMARY.md" - fixed += repair_historical_performance_routes(summary_path) + if version in {"1.7", "1.5"}: + fixed += repair_historical_performance_routes(summary_path) fixed += normalize_historical_server_headings( - assembly - / f"content/{language}/docs/quickstart/hugegraph/hugegraph-server.md" + first_existing_path( + assembly, + ( + f"content/{language}/docs/quickstart/hugegraph/hugegraph-server.md", + f"content/{language}/docs/quickstart/hugegraph-server.md", + ), + ) ) replacements = [] if language == "cn": @@ -1188,6 +1562,15 @@ def apply_known_legacy_fixes(assembly: pathlib.Path, version: str) -> int: ) replacements.extend( [ + ("/en/docs/", "/docs/"), + ( + "/dcos/clients/restful-api", + f"{language_prefix}/docs/clients/restful-api/", + ), + ( + "/docs/quickstart/hugegraph-studio", + f"{language_prefix}/docs/quickstart/toolchain/hugegraph-hubble", + ), ( "/docs/quickstart/hugegraph-server", f"{language_prefix}/docs/quickstart/hugegraph/hugegraph-server", @@ -1196,6 +1579,10 @@ def apply_known_legacy_fixes(assembly: pathlib.Path, version: str) -> int: "/clients/gremlin-console.html", f"{language_prefix}/docs/clients/gremlin-console/", ), + ( + "/clients/hugegraph-api.html", + f"{language_prefix}/docs/clients/restful-api/", + ), ( "./hugegraph-style.xml", "https://github.com/apache/hugegraph/blob/" @@ -1284,12 +1671,22 @@ def apply_known_legacy_fixes(assembly: pathlib.Path, version: str) -> int: return fixed -def version_urls(manifest: dict, origin: str, language: str = "en") -> list[dict]: +def version_urls( + manifest: dict, + origin: str, + language: str = "en", + historical_origin: str | None = None, +) -> list[dict]: if language not in {"en", "cn"}: fail(f"unsupported version-menu language: {language}") language_prefix = "cn/" if language == "cn" else "" urls = [] for entry in manifest["versions"]: + entry_origin = ( + historical_origin + if entry["archived"] and historical_origin is not None + else origin + ) path = ( f"{entry['publishPath']}/{language_prefix}docs/" if entry["publishPath"] @@ -1299,20 +1696,25 @@ def version_urls(manifest: dict, origin: str, language: str = "en") -> list[dict { "version": entry["id"], "name": entry["name"], - "url": urllib.parse.urljoin(origin.rstrip("/") + "/", path), + "url": urllib.parse.urljoin(entry_origin.rstrip("/") + "/", path), "pagelinks": False, } ) return urls -def language_version_params(manifest: dict, origin: str, language: str) -> dict: +def language_version_params( + manifest: dict, + origin: str, + language: str, + historical_origin: str | None = None, +) -> dict: """Build language-preserving version selector and archive-banner params.""" if language not in {"en", "cn"}: fail(f"unsupported version-menu language: {language}") return { "version_menu": "Releases" if language == "en" else "็‰ˆๆœฌ", - "versions": version_urls(manifest, origin, language), + "versions": version_urls(manifest, origin, language, historical_origin), "url_latest_version": urllib.parse.urljoin( origin.rstrip("/") + "/", "cn/docs/" if language == "cn" else "docs/", @@ -1443,6 +1845,7 @@ def rewrite_internal_url( origin: str, publish_path: str, allowed_paths: set[str], + version_id: str | None = None, ) -> str: """Scope a same-site absolute/root URL to one historical artifact.""" if not value or value.startswith(("#", "?")): @@ -1493,8 +1896,8 @@ def rewrite_internal_url( else path ) normalized_internal = internal_path.rstrip("/") or "/" - mapped_path = KNOWN_HISTORICAL_ROUTES_BY_PUBLISH_PATH.get( - publish_path.strip("/"), {} + mapped_path = KNOWN_HISTORICAL_ROUTES_BY_VERSION.get( + version_id or "", {} ).get(normalized_internal) if mapped_path is None: mapped_path = KNOWN_HISTORICAL_ROUTES.get(normalized_internal) @@ -1626,6 +2029,51 @@ def scope_language_fallback_urls( return changed +def normalize_language_switch_urls( + action_data: dict, + relative: str, + artifact_base: str, + output: pathlib.Path, +) -> int: + """Keep language choices on an equivalent page or the same-version locale root.""" + actions = action_data.get("actions") + if not isinstance(actions, list): + return 0 + switches = [ + action + for action in actions + if isinstance(action, dict) and action.get("id") == "switch_language" + ] + if len(switches) != 1 or not isinstance(switches[0].get("options"), list): + return 0 + english_relative = relative.removeprefix("cn/") + chinese_relative = "cn/" + english_relative + candidates = {"en-US": english_relative, "zh-CN": chinese_relative} + roots = {"en-US": "", "zh-CN": "cn/"} + changed = 0 + for option in switches[0]["options"]: + language = option.get("id") + candidate = candidates.get(language) + if candidate is None: + continue + target = output / candidate + route = candidate + if not target.is_file(): + route = roots[language] + elif route.endswith("index.html"): + route = route[: -len("index.html")] + new_url = ( + "/" + route + if not target.is_file() + and urllib.parse.urlsplit(artifact_base).path == "/" + else urllib.parse.urljoin(artifact_base, route) + ) + if option.get("url") != new_url: + option["url"] = new_url + changed += 1 + return changed + + def validate_language_switch_contract( action_data: dict, relative: str, @@ -1683,6 +2131,47 @@ def validate_language_switch_contract( fail(f"language switch metadata mismatch in {relative}: {language}") +def rewrite_srcset_urls(value: str, rewrite) -> tuple[str, int]: + """Rewrite each URL in a srcset-like list while preserving its descriptors.""" + output: list[str] = [] + cursor = 0 + count = 0 + for old in srcset_urls(value): + start = value.find(old, cursor) + if start < 0: + fail(f"cannot locate srcset URL candidate: {old}") + new = rewrite(old) + output.extend((value[cursor:start], new)) + cursor = start + len(old) + count += old != new + output.append(value[cursor:]) + return "".join(output), count + + +def rewrite_url_list_attributes(text: str, rewrite) -> tuple[str, int]: + """Rewrite quoted and unquoted srcset/imagesrcset attribute candidates.""" + count = 0 + + def replace_quoted(match: re.Match) -> str: + nonlocal count + value, changed = rewrite_srcset_urls(match.group("value"), rewrite) + count += changed + return ( + f"{match.group('prefix')}{match.group('quote')}" + f"{value}{match.group('quote')}" + ) + + def replace_unquoted(match: re.Match) -> str: + nonlocal count + value, changed = rewrite_srcset_urls(match.group("value"), rewrite) + count += changed + return f"{match.group('prefix')}{value}" + + text = URL_LIST_ATTRIBUTE_RE.sub(replace_quoted, text) + text = URL_LIST_UNQUOTED_ATTRIBUTE_RE.sub(replace_unquoted, text) + return text, count + + def rewrite_text_urls(text: str, rewrite, *, markdown: bool) -> tuple[str, int]: count = 0 @@ -1695,51 +2184,670 @@ def replace_attribute(match: re.Match) -> str: f"{match.group('prefix')}{match.group('quote')}{new}{match.group('quote')}" ) + def replace_destination(match: re.Match) -> str: + nonlocal count + old = match.group("url") + new = rewrite(old) + count += old != new + return f"{match.group('open')}{new}{match.group('close')}" + + def rewrite_unfenced(source: str) -> str: + nonlocal count + source = URL_ATTRIBUTE_RE.sub(replace_attribute, source) + source, list_count = rewrite_url_list_attributes(source, rewrite) + count += list_count + return MARKDOWN_DESTINATION_RE.sub(replace_destination, source) + if markdown: in_fence = False - lines = [] + pending: list[str] = [] + chunks: list[str] = [] for line in text.splitlines(keepends=True): if re.match(r"^\s*(```|~~~)", line): + if pending: + chunks.append( + "".join(pending) + if in_fence + else rewrite_unfenced("".join(pending)) + ) + pending = [] + chunks.append(line) in_fence = not in_fence - lines.append(line) - continue - if not in_fence: - - def replace_destination(match: re.Match) -> str: - nonlocal count - old = match.group("url") - new = rewrite(old) - count += old != new - return f"{match.group('open')}{new}{match.group('close')}" - - line = URL_ATTRIBUTE_RE.sub(replace_attribute, line) - line = MARKDOWN_DESTINATION_RE.sub(replace_destination, line) - lines.append(line) - text = "".join(lines) + else: + pending.append(line) + if pending: + chunks.append( + "".join(pending) + if in_fence + else rewrite_unfenced("".join(pending)) + ) + text = "".join(chunks) else: - text = URL_ATTRIBUTE_RE.sub(replace_attribute, text) + text = rewrite_unfenced(text) return text, count +def normalize_logical_docs_route(_version: str, relative: str) -> str: + """Normalize reviewed route moves without treating aliases as pages.""" + normalized = relative.strip("/") + normalized = normalized.replace( + "performance/api-preformance", "performance/api-performance" + ) + return normalized + + +def docs_target_parts(target: str) -> tuple[str, str]: + """Return locale and relative Docs path for one route-map target.""" + normalized = target.strip("/") + if normalized == "docs": + return "en", "" + if normalized.startswith("docs/"): + return "en", normalized.removeprefix("docs/") + if normalized == "cn/docs": + return "cn", "" + if normalized.startswith("cn/docs/"): + return "cn", normalized.removeprefix("cn/docs/") + fail(f"route-map target is outside Docs: {target}") + + +def canonical_docs_pages(root: pathlib.Path, version: str) -> dict[str, str]: + """Inventory canonical Docs pages, excluding redirect aliases and print views.""" + pages: dict[str, str] = {} + for language, docs_root in ( + ("en", root / "docs"), + ("cn", root / "cn/docs"), + ): + if not docs_root.is_dir(): + fail(f"route-map Docs root is missing for {version}: {docs_root}") + for path in sorted(docs_root.rglob("index.html")): + document = DocumentParser() + document.feed(path.read_text(encoding="utf-8")) + if refresh_target(document): + continue + relative = path.parent.relative_to(docs_root).as_posix() + relative = "" if relative == "." else relative + logical_relative = normalize_logical_docs_route(version, relative) + logical_id = f"{language}:{logical_relative}" + target = ( + ("cn/docs/" if language == "cn" else "docs/") + + (relative.rstrip("/") + "/" if relative else "") + ) + previous = pages.get(logical_id) + if previous is not None and previous != target: + fail( + f"ambiguous canonical route for {version} {logical_id}: " + f"{previous} and {target}" + ) + pages[logical_id] = target + return pages + + +def docs_alias_equivalence_edges( + root: pathlib.Path, entry: dict, canonical_pages: dict[str, str] +) -> set[tuple[str, str]]: + """Return locale-preserving logical edges declared by static Docs aliases.""" + version = entry["id"] + prefix = "/" + entry["publishPath"].strip("/") if entry["publishPath"] else "" + metadata_path = root / ".version.json" + if metadata_path.is_file(): + metadata = json.loads(metadata_path.read_text(encoding="utf-8")) + expected_base = metadata.get("baseURL") + if not isinstance(expected_base, str) or not expected_base: + fail(f"route-map artifact baseURL is missing for {version}") + else: + expected_base = base_url("https://artifact.invalid/", entry["publishPath"]) + aliases: dict[str, tuple[str, str, pathlib.Path]] = {} + for language, docs_root in ( + ("en", root / "docs"), + ("cn", root / "cn/docs"), + ): + if not docs_root.is_dir(): + fail(f"route-map Docs root is missing for {version}: {docs_root}") + for path in sorted(docs_root.rglob("index.html")): + document = DocumentParser() + document.feed(path.read_text(encoding="utf-8")) + redirect = refresh_target(document) + if redirect is None: + continue + target_path = validate_artifact_alias_target( + redirect, + root, + entry, + expected_base, + path.relative_to(root).as_posix(), + ) + if prefix and ( + target_path == prefix or target_path.startswith(prefix + "/") + ): + target_path = target_path[len(prefix) :] or "/" + try: + target_language, target_relative = docs_target_parts(target_path) + except SystemExit: + continue + if target_language != language: + fail( + f"route-map alias changes locale for {version}: " + f"{path.relative_to(root)} -> {redirect}" + ) + source_relative = path.parent.relative_to(docs_root).as_posix() + source_relative = "" if source_relative == "." else source_relative + source_route = ( + ("cn/docs/" if language == "cn" else "docs/") + + (source_relative.rstrip("/") + "/" if source_relative else "") + ) + target_route = ( + ("cn/docs/" if target_language == "cn" else "docs/") + + (target_relative.rstrip("/") + "/" if target_relative else "") + ) + source_id = ( + f"{language}:" + f"{normalize_logical_docs_route(version, source_relative)}" + ) + previous = aliases.get(source_route) + alias = (source_id, target_route, path) + if previous is not None and previous != alias: + fail( + f"route-map alias is ambiguous for {version}: " + f"{source_route}" + ) + aliases[source_route] = alias + + canonical_ids_by_target = { + target: logical_id for logical_id, target in canonical_pages.items() + } + canonical_targets = set(canonical_ids_by_target) + edges: set[tuple[str, str]] = set() + for source_route, (source_id, target_route, path) in aliases.items(): + visited = {source_route} + candidate = target_route + while candidate not in canonical_targets: + if candidate in visited: + fail( + f"route-map alias cycle for {version}: " + f"{path.relative_to(root)} -> {candidate}" + ) + visited.add(candidate) + chained = aliases.get(candidate) + if chained is None: + fail( + f"route-map alias target is missing for {version}: " + f"{path.relative_to(root)} -> {candidate}" + ) + candidate = chained[1] + target_id = canonical_ids_by_target[candidate] + if source_id != target_id: + edges.add(tuple(sorted((source_id, target_id)))) + return edges + + +def equivalence_groups( + edges: set[tuple[str, str]], logical_ids: set[str] +) -> list[list[str]]: + """Build deterministic disjoint components from reviewed alias edges.""" + graph: dict[str, set[str]] = {} + for left, right in edges: + if left not in logical_ids or right not in logical_ids: + continue + graph.setdefault(left, set()).add(right) + graph.setdefault(right, set()).add(left) + groups = [] + unseen = set(graph) + while unseen: + pending = [min(unseen)] + component = set() + while pending: + logical_id = pending.pop() + if logical_id in component: + continue + component.add(logical_id) + pending.extend(sorted(graph.get(logical_id, ()), reverse=True)) + unseen.difference_update(component) + if len(component) > 1: + groups.append(sorted(component)) + return sorted(groups) + + +def generate_version_routes( + artifact_roots: dict[str, pathlib.Path], manifest: dict +) -> dict: + """Generate the reviewed cross-version logical page map deterministically.""" + version_ids = manifest_version_ids(manifest) + if set(artifact_roots) != set(version_ids): + fail( + "route-map artifacts must contain exactly: " + + ", ".join(version_ids) + ) + inventories = { + version: canonical_docs_pages(artifact_roots[version], version) + for version in version_ids + } + logical_ids = sorted( + {logical_id for pages in inventories.values() for logical_id in pages} + ) + entries = {entry["id"]: entry for entry in manifest["versions"]} + alias_edges = set().union( + *( + docs_alias_equivalence_edges( + artifact_roots[version], + entries[version], + inventories[version], + ) + for version in version_ids + ) + ) + result = { + "schemaVersion": 1, + "versions": list(version_ids), + "pages": { + logical_id: { + version: inventories[version].get(logical_id) + for version in version_ids + } + for logical_id in logical_ids + }, + "equivalents": equivalence_groups(alias_edges, set(logical_ids)), + } + validate_version_routes(result, manifest) + return result + + +def validate_version_routes(data: dict, manifest: dict) -> dict: + """Fail closed on route-map shape, ordering, locale, and target syntax.""" + version_ids = manifest_version_ids(manifest) + if not isinstance(data, dict) or set(data) != { + "schemaVersion", + "versions", + "pages", + "equivalents", + }: + fail("invalid version route-map top-level fields") + if data["schemaVersion"] != 1 or data["versions"] != list(version_ids): + fail("invalid version route-map schema or version order") + pages = data["pages"] + if not isinstance(pages, dict) or not pages: + fail("version route-map pages must be a non-empty object") + for logical_id, targets in pages.items(): + if ( + not isinstance(logical_id, str) + or ":" not in logical_id + or logical_id.split(":", 1)[0] not in {"en", "cn"} + ): + fail(f"invalid version route-map logical ID: {logical_id!r}") + language, relative = logical_id.split(":", 1) + if ( + relative.startswith("/") + or relative.endswith("/") + or ".." in pathlib.PurePosixPath(relative).parts + ): + fail(f"invalid version route-map logical path: {logical_id}") + if not isinstance(targets, dict) or list(targets) != list(version_ids): + fail(f"invalid version route-map target order: {logical_id}") + for version, target in targets.items(): + if target is None: + continue + if ( + not isinstance(target, str) + or target.startswith("/") + or not target.endswith("/") + or "?" in target + or "#" in target + or ".." in pathlib.PurePosixPath(target).parts + or target.startswith("versions/") + ): + fail( + f"invalid version route-map target for " + f"{logical_id} {version}: {target!r}" + ) + target_language, target_relative = docs_target_parts(target) + if target_language != language: + fail( + f"version route-map target changes locale: " + f"{logical_id} -> {target}" + ) + if normalize_logical_docs_route(version, target_relative) != relative: + fail( + f"version route-map target/logical mismatch for " + f"{logical_id} {version}: {target}" + ) + equivalents = data["equivalents"] + if not isinstance(equivalents, list): + fail("version route-map equivalents must be an array") + if not all( + isinstance(group, list) + and all(isinstance(logical_id, str) for logical_id in group) + for group in equivalents + ): + fail("invalid version route-map equivalent group types") + if equivalents != sorted(equivalents): + fail("version route-map equivalent groups must be ordered") + seen_equivalents: set[str] = set() + for group in equivalents: + if ( + not isinstance(group, list) + or len(group) < 2 + or group != sorted(group) + or len(group) != len(set(group)) + ): + fail(f"invalid version route-map equivalent group: {group!r}") + missing = set(group).difference(pages) + if missing: + fail( + "version route-map equivalent IDs are missing: " + + ", ".join(sorted(missing)) + ) + locales = {logical_id.split(":", 1)[0] for logical_id in group} + if len(locales) != 1: + fail(f"version route-map equivalent group changes locale: {group!r}") + overlap = seen_equivalents.intersection(group) + if overlap: + fail( + "version route-map equivalent ID is ambiguous: " + + ", ".join(sorted(overlap)) + ) + seen_equivalents.update(group) + for source_id in group: + for version in version_ids: + if pages[source_id][version] is not None: + continue + candidates = [ + pages[candidate_id][version] + for candidate_id in group + if candidate_id != source_id + and pages[candidate_id][version] is not None + ] + if len(candidates) > 1: + fail( + f"version route-map equivalent target is ambiguous for " + f"{source_id} {version}: {candidates!r}" + ) + return data + + +def load_version_routes( + path: pathlib.Path = VERSION_ROUTES, manifest: dict | None = None +) -> dict: + manifest = manifest or load_manifest(ROOT / "versions.json") + if not path.is_file(): + fail(f"version route-map is missing: {path}") + try: + data = json.loads(path.read_text(encoding="utf-8")) + except (OSError, json.JSONDecodeError) as error: + fail(f"cannot load version route-map {path}: {error}") + return validate_version_routes(data, manifest) + + +def canonical_docs_target(text: str, entry: dict) -> str | None: + """Resolve the current canonical page to an unscoped route-map target.""" + document = DocumentParser() + document.feed(text) + if len(document.canonical) != 1: + return None + path = urllib.parse.urlsplit(document.canonical[0]).path + prefix = "/" + entry["publishPath"].strip("/") if entry["publishPath"] else "" + if prefix and (path == prefix or path.startswith(prefix + "/")): + path = path[len(prefix) :] or "/" + normalized = path.strip("/") + if normalized == "docs" or normalized.startswith("docs/"): + return normalized + "/" + if normalized == "cn/docs" or normalized.startswith("cn/docs/"): + return normalized + "/" + return None + + +def logical_id_for_target( + route_map: dict, version: str, target: str +) -> str | None: + matches = [ + logical_id + for logical_id, targets in route_map["pages"].items() + if targets[version] == target + ] + if len(matches) > 1: + fail(f"ambiguous route-map target for {version}: {target}") + return matches[0] if matches else None + + +def resolved_logical_target( + route_map: dict, logical_id: str, version: str +) -> str | None: + """Prefer the canonical logical ID, then its unique reviewed equivalent.""" + direct = route_map["pages"][logical_id][version] + if direct is not None: + return direct + group = next( + ( + candidates + for candidates in route_map["equivalents"] + if logical_id in candidates + ), + (), + ) + alternatives = [ + route_map["pages"][candidate_id][version] + for candidate_id in group + if candidate_id != logical_id + and route_map["pages"][candidate_id][version] is not None + ] + if len(alternatives) > 1: + fail( + f"version route-map equivalent target is ambiguous for " + f"{logical_id} {version}: {alternatives!r}" + ) + return alternatives[0] if alternatives else None + + +def version_switch_options( + manifest: dict, + route_map: dict, + current_version: str, + current_target: str | None, + origin: str, + historical_origin: str | None = None, + *, + language: str | None = None, +) -> list[dict]: + """Return page-aware version choices with explicit missing-page fallbacks.""" + validate_version_routes(route_map, manifest) + logical_id = None + if current_target is not None: + target_language, _ = docs_target_parts(current_target) + language = target_language + logical_id = logical_id_for_target(route_map, current_version, current_target) + if logical_id is None: + fail( + f"current canonical Docs page is absent from route-map: " + f"{current_version} {current_target}" + ) + if language not in {"en", "cn"}: + fail(f"version switch locale is unavailable: {language!r}") + options = [] + for entry in manifest["versions"]: + entry_origin = ( + historical_origin + if entry["archived"] and historical_origin is not None + else origin + ) + equivalent = False + fallback = False + if logical_id is not None: + target = resolved_logical_target( + route_map, logical_id, entry["id"] + ) + if target is not None: + equivalent = True + url = urllib.parse.urljoin(entry_origin.rstrip("/") + "/", ( + f"{entry['publishPath'].rstrip('/')}/{target}" + if entry["publishPath"] + else target + )) + else: + fallback = True + root = "cn/docs/" if language == "cn" else "docs/" + path = ( + f"{entry['publishPath'].rstrip('/')}/{root}" + if entry["publishPath"] + else root + ) + url = ( + urllib.parse.urljoin(entry_origin.rstrip("/") + "/", path) + + "#hg-version-fallback" + ) + else: + root = "cn/docs/" if language == "cn" else "docs/" + path = ( + f"{entry['publishPath'].rstrip('/')}/{root}" + if entry["publishPath"] + else root + ) + url = urllib.parse.urljoin(entry_origin.rstrip("/") + "/", path) + options.append( + { + "id": entry["id"], + "title": entry["name"], + "url": url, + "active": entry["id"] == current_version, + "available": True, + "disabledReason": "", + "equivalent": equivalent, + "fallback": fallback, + } + ) + return options + + +def reviewed_version_route_urls( + manifest: dict, + route_map: dict, + origin: str, + historical_origin: str | None, +) -> set[str]: + """Return only cross-version destinations authorized by the route-map.""" + validate_version_routes(route_map, manifest) + urls: set[str] = set() + for logical_id, targets in route_map["pages"].items(): + language = logical_id.split(":", 1)[0] + if not any(target is not None for target in targets.values()): + fail(f"route-map page has no targets: {logical_id}") + for entry in manifest["versions"]: + entry_origin = ( + historical_origin + if entry["archived"] and historical_origin is not None + else origin + ) + target = resolved_logical_target( + route_map, logical_id, entry["id"] + ) + if target is None: + target = "cn/docs/" if language == "cn" else "docs/" + fragment = "#hg-version-fallback" + else: + fragment = "" + path = ( + f"{entry['publishPath'].rstrip('/')}/{target}" + if entry["publishPath"] + else target + ) + urls.add( + urllib.parse.urljoin(entry_origin.rstrip("/") + "/", path) + fragment + ) + return urls + + def scope_version_artifact( output: pathlib.Path, manifest: dict, entry: dict, origin: str, + historical_origin: str | None = None, ) -> dict: """Repair URL fields Hugo cannot canonify, then return auditable counts.""" - if not entry["publishPath"] and origin.rstrip("/") == CANONICAL_ORIGIN.rstrip("/"): - return {"files": 0, "urls": 0, "manifests": 0, "searchRefs": 0} + route_map = load_version_routes(manifest=manifest) allowed_paths = allowed_version_paths(manifest) artifact_base = base_url(origin, entry["publishPath"]) + reviewed_selector_urls = reviewed_version_route_urls( + manifest, route_map, origin, historical_origin + ) + historical_selector_urls: set[str] = set() + if historical_origin is not None: + archived_ids = { + item["id"] for item in manifest["versions"] if item["archived"] + } + for language in ("en", "cn"): + for item in version_urls( + manifest, origin, language, historical_origin + ): + if item["version"] in archived_ids: + historical_selector_urls.update( + (item["url"], item["url"].rstrip("/")) + ) def rewrite(value: str) -> str: - return rewrite_internal_url( + if value in reviewed_selector_urls or value in historical_selector_urls: + return value + rewritten = rewrite_internal_url( value, origin=origin, publish_path=entry["publishPath"], allowed_paths=allowed_paths, + version_id=entry["id"], ) + if entry.get("archived", bool(entry.get("publishPath"))): + original = urllib.parse.urlsplit(value) + original_path = original.path.rstrip("/") + "/" + version_prefix = "/" + entry["publishPath"] + if original_path.startswith(version_prefix + "/"): + original_path = original_path[len(version_prefix) :] + rewritten_parts = urllib.parse.urlsplit(rewritten) + scoped_relative = ( + rewritten_parts.path[len("/" + entry["publishPath"]) :] + if rewritten_parts.path.startswith("/" + entry["publishPath"]) + else rewritten_parts.path + ) + if ( + original_path in LATEST_SHARED_DOC_ROUTES + and not target_exists(output, scoped_relative) + ): + shared_origin = urllib.parse.urlsplit(origin.rstrip("/") + "/") + return urllib.parse.urlunsplit( + ( + shared_origin.scheme, + shared_origin.netloc, + original_path, + original.query, + original.fragment, + ) + ) + if not target_exists(output, scoped_relative): + counterpart = ( + "/cn" + scoped_relative + if scoped_relative.startswith("/docs/") + else scoped_relative.removeprefix("/cn") + if scoped_relative.startswith("/cn/docs/") + else "" + ) + if counterpart and target_exists(output, counterpart): + counterpart_path = "/" + entry["publishPath"] + counterpart + return urllib.parse.urlunsplit( + ( + urllib.parse.urlsplit(origin).scheme, + urllib.parse.urlsplit(origin).netloc, + counterpart_path, + original.query, + original.fragment, + ) + ) + if re.match( + r"^/(?:cn/)?docs/changelog/hugegraph-0\.[^/]+-release-notes/?$", + scoped_relative, + ): + language_prefix = "/cn" if scoped_relative.startswith("/cn/") else "" + changelog = f"{language_prefix}/docs/changelog/" + if target_exists(output, changelog): + return urllib.parse.urljoin( + base_url(origin, entry["publishPath"]), + changelog.lstrip("/"), + ) + return rewritten stats = {"files": 0, "urls": 0, "manifests": 0, "searchRefs": 0} for path in sorted(output.rglob("*")): @@ -1767,20 +2875,24 @@ def rewrite(value: str) -> str: ) stats["files"] += 1 continue - if path.suffix not in {".html", ".md", ".xml"}: + if path.suffix not in {".html", ".md", ".xml", ".txt"}: continue original = path.read_text(encoding="utf-8") rendered, changed = rewrite_text_urls( original, rewrite, - markdown=path.suffix == ".md", + markdown=path.suffix in {".md", ".txt"}, ) + relative = path.relative_to(output).as_posix() def replace_manifest(match: re.Match) -> str: data = json.loads(match.group("body")) rewritten = rewrite_json_urls(data, rewrite) - scope_language_fallback_urls( - rewritten, path.relative_to(output).as_posix(), artifact_base + normalize_language_switch_urls( + rewritten, + relative, + artifact_base, + output, ) stats["manifests"] += 1 return ( @@ -1856,6 +2968,134 @@ def write_historical_home_redirects(output: pathlib.Path, origin: str) -> int: return len(targets) +def exclude_historical_sitemaps(output: pathlib.Path) -> int: + """Keep archived pages directly reachable without advertising them for indexing.""" + removed = 0 + for path in sorted(output.rglob("sitemap.xml")): + path.unlink() + removed += 1 + robots = output / "robots.txt" + if robots.is_file(): + robots.write_text("User-agent: *\nAllow: /\n", encoding="utf-8") + return removed + + +def mark_historical_pages_noindex(output: pathlib.Path) -> int: + """Apply the archive indexing policy to every rendered historical page.""" + changed = 0 + for path in sorted(output.rglob("*.html")): + if path.name == "404.html": + continue + source = path.read_text(encoding="utf-8") + rendered, count = ROBOTS_META_RE.subn( + '', source + ) + if count == 0: + rendered, count = re.subn( + r"", + '', + rendered, + count=1, + flags=re.IGNORECASE, + ) + if count != 1: + fail(f"historical page must contain one head/robots marker: {path}") + if count: + path.write_text(rendered, encoding="utf-8") + changed += count + return changed + + +def write_historical_route_aliases( + output: pathlib.Path, origin: str, publish_path: str +) -> int: + """Create deterministic locale-aware redirects for migrated flat routes.""" + written = 0 + site_base = base_url(origin, publish_path) + for language_prefix in ("", "cn/"): + for old_relative, new_relative in LEGACY_IA_ROUTE_MAP.items(): + old_route = language_prefix + "docs/" + old_relative.removesuffix(".md") + old_route = old_route.replace("/README", "") + new_route = language_prefix + "docs/" + new_relative.removesuffix(".md") + target = output / new_route / "index.html" + if not target.is_file(): + continue + alias = output / old_route / "index.html" + if alias.exists(): + fail(f"historical alias collides with rendered output: {alias}") + alias.parent.mkdir(parents=True, exist_ok=True) + target_url = urllib.parse.urljoin(site_base, new_route.rstrip("/") + "/") + escaped = html.escape(target_url, quote=True) + alias.write_text( + "\n" + '\n' + '\n' + f'\n' + f'\n' + f'Continue\n', + encoding="utf-8", + ) + written += 1 + return written + + +def remove_non_equivalent_hreflang( + output: pathlib.Path, origin: str, publish_path: str +) -> int: + """Remove Hugo language fallbacks from hreflang while keeping real translations.""" + removed = 0 + prefix = "/" + publish_path.strip("/") if publish_path else "" + origin_parts = urllib.parse.urlsplit(origin.rstrip("/") + "/") + for path in sorted(output.rglob("*.html")): + relative = path.relative_to(output).as_posix() + if relative in {"404.html", "cn/404.html"} or "_print/" in relative: + continue + current_url = public_url_for_file(path, output, origin, publish_path) + current_path = urllib.parse.urlsplit(current_url).path + cn_prefix = prefix + "/cn/" + if current_path.startswith(cn_prefix): + english_path = prefix + current_path[len(prefix + "/cn") :] + else: + english_path = current_path + chinese_path = ( + prefix + "/cn/" + if english_path.rstrip("/") == prefix + else prefix + "/cn" + english_path[len(prefix) :] + ) + expected_paths = {"en-US": english_path, "zh-CN": chinese_path} + + def keep_equivalent(match: re.Match) -> str: + nonlocal removed + parser = DocumentParser() + parser.feed(match.group(0)) + if len(parser.hreflang) != 1: + fail(f"cannot parse hreflang link in {relative}: {match.group(0)}") + language, href = parser.hreflang[0] + expected_path = expected_paths.get(language) + href_parts = urllib.parse.urlsplit( + urllib.parse.urljoin(current_url, href) + ) + local_relative = ( + expected_path[len(prefix) :] if prefix and expected_path else expected_path + ) + if ( + expected_path is not None + and href_parts.scheme == origin_parts.scheme + and href_parts.netloc == origin_parts.netloc + and href_parts.path == expected_path + and target_exists(output, local_relative or "/") + ): + return match.group(0) + removed += 1 + return "" + + source = path.read_text(encoding="utf-8") + rendered = HREFLANG_LINK_RE.sub(keep_equivalent, source) + if rendered != source: + path.write_text(rendered, encoding="utf-8") + return removed + + def public_url_for_file( path: pathlib.Path, root: pathlib.Path, @@ -1880,6 +3120,87 @@ def target_exists(root: pathlib.Path, relative: str) -> bool: return candidate.is_file() or (candidate / "index.html").is_file() +def validate_artifact_alias_target( + value: str, + root: pathlib.Path, + entry: dict, + expected_base: str, + source: str, +) -> str: + """Require an ordinary refresh alias to resolve inside its version artifact.""" + if ( + not value + or not value.startswith(("http://", "https://", "/")) + or any(char in value for char in ("?", "#", "%", "\\")) + or any( + char.isspace() or ord(char) < 0x20 or ord(char) == 0x7F + for char in value + ) + ): + fail(f"alias target is not canonical in {source}: {value}") + absolute_http = value.startswith(("http://", "https://")) + require_safe_url_syntax(value) + if not require_safe_url_scheme(value, source): + fail(f"alias target uses a non-HTTP protocol in {source}: {value}") + try: + target = urllib.parse.urlsplit(value) + base = urllib.parse.urlsplit(expected_base) + require_safe_http_authority(target, value) + require_safe_http_authority(base, expected_base) + except (TypeError, ValueError) as exc: + fail(f"alias target is malformed in {source}: {value}: {exc}") + if ( + base.scheme.lower() not in {"http", "https"} + or not base.netloc + or base.query + or base.fragment + ): + fail(f"artifact baseURL is malformed for {entry['id']}: {expected_base}") + if absolute_http and (not target.scheme or not target.netloc): + fail(f"absolute alias target has no authority in {source}: {value}") + if target.netloc and ( + target.scheme.lower() != base.scheme.lower() + or target.netloc.lower() != base.netloc.lower() + ): + fail(f"alias target leaves the configured origin in {source}: {value}") + path = target.path + segments = path.split("/") + if ( + not path.startswith("/") + or "//" in path + or any(segment in {".", ".."} for segment in segments) + ): + fail(f"alias target path is unsafe in {source}: {value}") + prefix = "/" + entry["publishPath"].strip("/") if entry["publishPath"] else "" + if prefix and not (path == prefix or path.startswith(prefix + "/")): + fail(f"alias target escapes version {entry['id']} in {source}: {value}") + relative = path[len(prefix) :] if prefix else path + if not target_exists(root, relative): + fail(f"alias target is missing in {source}: {value}") + return path + + +def validate_historical_home_alias_target( + value: str, + relative: str, + site_origin: str, +) -> None: + """Allow only the two reviewed archive-home redirects to shared latest pages.""" + suffixes = { + "index.html": "", + "cn/index.html": "cn/", + } + suffix = suffixes.get(relative) + if suffix is None: + fail(f"unexpected historical home alias path: {relative}") + expected = urllib.parse.urljoin(site_origin.rstrip("/") + "/", suffix) + if value != expected: + fail( + f"historical home alias target changed in {relative}: " + f"{value} != {expected}" + ) + + def iter_json_strings(value): if isinstance(value, dict): for item in value.values(): @@ -1935,8 +3256,170 @@ def require_docs_navigation_json(data: dict, source: str, language: str) -> None fail(f"private Docs navigation route leaked into {source}") +def validate_llms_full_outputs( + root: pathlib.Path, entry: dict, expected_base: str +) -> None: + """Require locale-bound latest corpora and prohibit them in archives.""" + outputs = { + "en": root / "docs/llms-full.txt", + "cn": root / "cn/docs/llms-full.txt", + } + if entry["archived"]: + leaked = [ + path.relative_to(root).as_posix() + for path in outputs.values() + if path.exists() + ] + if leaked: + fail( + "historical artifact must not contain LLMSFULL output: " + + ", ".join(leaked) + ) + return + contracts = { + "en": ( + urllib.parse.urljoin(expected_base, "docs/index.md"), + "LLMS index:", + "](/llms.txt)", + "LLMS ็ดขๅผ•๏ผš", + ), + "cn": ( + urllib.parse.urljoin(expected_base, "cn/docs/index.md"), + "LLMS ็ดขๅผ•๏ผš", + "](/cn/llms.txt)", + "LLMS index:", + ), + } + for language, path in outputs.items(): + label = "English" if language == "en" else "Chinese" + if not path.is_file(): + fail(f"{label} LLMSFULL output is missing: {path.relative_to(root)}") + text = path.read_text(encoding="utf-8") + canonical_source, marker, index_link, forbidden = contracts[language] + if ( + marker not in text + or index_link not in text + or forbidden in text + ): + fail(f"{label} LLMSFULL locale contract is invalid") + source_rows = [ + line for line in text.splitlines() if line.startswith("Source:") + ] + sources = [line.removeprefix("Source:").strip() for line in source_rows] + if ( + not sources + or any(not line.startswith("Source: ") for line in source_rows) + or any(not value for value in sources) + ): + fail(f"{label} LLMSFULL source is missing or malformed") + if sources[0] != canonical_source: + fail(f"{label} LLMSFULL canonical source is not first") + expected_parts = urllib.parse.urlsplit(expected_base) + locale_root = "cn/docs/" if language == "cn" else "docs/" + expected_path_prefix = urllib.parse.urlsplit( + urllib.parse.urljoin(expected_base, locale_root) + ).path + canonical_sources: set[str] = set() + for value in sources: + if "?" in value or "#" in value or "%" in value: + fail(f"{label} LLMSFULL source is not canonical: {value}") + try: + require_safe_url_syntax(value) + parts = urllib.parse.urlsplit(value) + require_safe_http_authority(parts, value) + except (TypeError, ValueError) as exc: + fail(f"{label} LLMSFULL source is malformed: {value}: {exc}") + decoded_path = urllib.parse.unquote(parts.path) + path_segments = parts.path.split("/") + if ( + any(char.isspace() for char in value) + or parts.scheme.lower() != expected_parts.scheme.lower() + or parts.netloc != expected_parts.netloc + or parts.query + or parts.fragment + or "\\" in decoded_path + or "//" in parts.path + or any(segment in {".", ".."} for segment in path_segments) + or not decoded_path.startswith(expected_path_prefix) + or not decoded_path.endswith(".md") + or ".." in pathlib.PurePosixPath(decoded_path).parts + ): + fail(f"{label} LLMSFULL source is outside its artifact: {value}") + canonical = urllib.parse.urlunsplit( + ( + parts.scheme.lower(), + parts.netloc.lower(), + decoded_path, + "", + "", + ) + ) + if canonical in canonical_sources: + fail(f"{label} LLMSFULL source is duplicated: {value}") + canonical_sources.add(canonical) + + +def validate_social_image_metadata( + document: DocumentParser, + relative: str, + root: pathlib.Path, + expected_base: str, + *, + allow_missing: bool = False, +) -> None: + """Require matching same-artifact Open Graph and Twitter image targets.""" + values: dict[str, list[str]] = {"og:image": [], "twitter:image": []} + for item in document.meta: + if item.get("property", "").lower() == "og:image": + values["og:image"].append(item.get("content", "")) + if item.get("name", "").lower() == "twitter:image": + values["twitter:image"].append(item.get("content", "")) + if allow_missing and not values["og:image"] and not values["twitter:image"]: + return + if any(len(items) != 1 or not items[0] for items in values.values()): + fail(f"social image metadata is missing or duplicated in {relative}") + og_image = values["og:image"][0] + twitter_image = values["twitter:image"][0] + if og_image != twitter_image: + fail(f"social image metadata differs in {relative}") + value = og_image + if "?" in value or "#" in value or "%" in value or "\\" in value: + fail(f"social image URL is not canonical in {relative}: {value}") + try: + parts = urllib.parse.urlsplit(value) + base = urllib.parse.urlsplit(expected_base) + require_safe_http_authority(parts, value) + except (TypeError, ValueError) as exc: + fail(f"social image URL is malformed in {relative}: {value}: {exc}") + if parts.scheme: + if ( + parts.scheme.lower() != "https" + or parts.netloc.lower() != base.netloc.lower() + ): + fail(f"social image URL is outside the artifact in {relative}: {value}") + elif parts.netloc or not value.startswith("/"): + fail(f"social image URL must be absolute in {relative}: {value}") + base_path = base.path.rstrip("/") + "/" + image_path = parts.path + if not image_path.startswith(base_path): + fail(f"social image URL is outside the artifact in {relative}: {value}") + artifact_relative = image_path[len(base_path) :] + suffix = pathlib.PurePosixPath(artifact_relative).suffix.lower() + if ( + not artifact_relative + or artifact_relative.startswith("/") + or ".." in pathlib.PurePosixPath(artifact_relative).parts + or suffix not in {".gif", ".jpeg", ".jpg", ".png", ".svg", ".webp"} + ): + fail(f"social image URL is not an image in {relative}: {value}") + target = root / pathlib.PurePosixPath(artifact_relative) + if not target.is_file(): + fail(f"social image target is missing in {relative}: {value}") + + def validate_artifact(args: argparse.Namespace) -> None: manifest = load_manifest(args.manifest) + route_map = load_version_routes(manifest=manifest) entry = next( (item for item in manifest["versions"] if item["id"] == args.version), None ) @@ -1953,6 +3436,8 @@ def validate_artifact(args: argparse.Namespace) -> None: require_metadata_matches(expected_entry, metadata, metadata_path) if metadata.get("baseURL") != expected_base: fail(f"version metadata does not match {entry['id']} at {expected_base}") + validate_output_security(root, expected_base) + validate_llms_full_outputs(root, entry, expected_base) docs_navigation = metadata.get("docsNavigation") expected_docs_navigation = DOCS_NAV_EXPECTED_STATS[entry["id"]] if docs_navigation != expected_docs_navigation: @@ -1979,6 +3464,12 @@ def validate_artifact(args: argparse.Namespace) -> None: canonical_host = same_site_host(canonical_parts) prefix = "/" + entry["publishPath"].strip("/") if entry["publishPath"] else "" allowed_paths = allowed_version_paths(manifest) + reviewed_route_urls = reviewed_version_route_urls( + manifest, + route_map, + args.site_origin, + getattr(args, "historical_origin", None), + ) current_docs = (prefix + "/docs").rstrip("/") or "/docs" checked_urls = 0 canonical_pages = 0 @@ -2027,6 +3518,9 @@ def validate_url(value: str, source: pathlib.Path) -> None: nonlocal checked_urls if not value or value.startswith(("#", "?")): return + if value in reviewed_route_urls: + checked_urls += 1 + return source_name = source.relative_to(root).as_posix() require_safe_url_syntax(value) if not require_safe_url_scheme(value, source_name): @@ -2041,6 +3535,18 @@ def validate_url(value: str, source: pathlib.Path) -> None: ): fail(f"unsafe same-site URL authority in {source_name}: {value}") if parsed_host == canonical_host and parsed_host != origin_host: + historical_docs_prefixes = tuple( + "/" + item["publishPath"] + suffix + for item in manifest["versions"] + if item["archived"] + for suffix in ("/docs", "/cn/docs") + ) + if any( + parsed.path == prefix or parsed.path.startswith(prefix + "/") + for prefix in historical_docs_prefixes + ): + checked_urls += 1 + return fail(f"production-origin URL leaked into staging {source_name}: {value}") if parsed.netloc and parsed_host != origin_host: return @@ -2067,6 +3573,10 @@ def validate_url(value: str, source: pathlib.Path) -> None: ) path = parsed.path or "/" normalized = path.rstrip("/") or "/" + normalized_with_slash = normalized.rstrip("/") + "/" + if normalized_with_slash in LATEST_SHARED_DOC_ROUTES: + checked_urls += 1 + return if ( parsed.netloc and (normalized in allowed_paths or is_latest_shared_path(normalized)) @@ -2195,10 +3705,40 @@ def validate_url(value: str, source: pathlib.Path) -> None: fail(f"404 page does not use the interactive OINK shell: {relative}") document = DocumentParser() document.feed(text) - require_toc_accessible_name(document, relative) alias_target = refresh_target(document) + validate_social_image_metadata( + document, + relative, + root, + expected_base, + allow_missing=alias_target is not None, + ) + require_toc_accessible_name(document, relative) + if entry["archived"] and relative not in {"404.html", "cn/404.html"}: + robots = [ + re.sub(r"\s+", "", item.get("content", "").lower()) + for item in document.meta + if item.get("name", "").lower() == "robots" + ] + if robots != ["noindex,follow"]: + fail(f"historical page must be noindex,follow: {relative}: {robots!r}") if alias_target: - validate_url(alias_target, path) + if relative != "client-go/index.html": + if entry["archived"] and relative in {"index.html", "cn/index.html"}: + validate_historical_home_alias_target( + alias_target, + relative, + args.site_origin, + ) + else: + validate_artifact_alias_target( + alias_target, + root, + entry, + expected_base, + relative, + ) + checked_urls += 1 action_data = {} manifests = list(ACTION_MANIFEST_RE.finditer(text)) if manifests: @@ -2236,25 +3776,22 @@ def validate_url(value: str, source: pathlib.Path) -> None: None, ) language = "cn" if relative.startswith("cn/") else "en" - expected_options = version_urls(manifest, args.site_origin, language) - if switch is None or [ - ( - item.get("id"), - item.get("title"), - str(item.get("url", "")).rstrip("/"), - item.get("active"), - ) - for item in switch.get("options", []) - ] != [ - ( - item["version"], - item["name"], - item["url"].rstrip("/"), - item["version"] == entry["id"], - ) - for item in expected_options - ]: + current_target = canonical_docs_target(text, entry) + expected_options = version_switch_options( + manifest, + route_map, + entry["id"], + current_target, + args.site_origin, + getattr(args, "historical_origin", None), + language=language, + ) + if switch is None or switch.get("options") != expected_options: fail(f"version switch contract mismatch in {path.relative_to(root)}") + if not relative.startswith(("_print/", "cn/_print/")): + require_version_switch_matches_native( + document, expected_options, relative + ) if ( entry["archived"] and relative not in archive_exceptions @@ -2341,7 +3878,7 @@ def validate_url(value: str, source: pathlib.Path) -> None: if english_path.rstrip("/") == prefix else prefix + "/cn" + english_path[len(prefix) :] ) - expected_hreflang = { + equivalent_urls = { "en-US": urllib.parse.urlunsplit( (origin_parts.scheme, origin_parts.netloc, english_path, "", "") ), @@ -2349,10 +3886,15 @@ def validate_url(value: str, source: pathlib.Path) -> None: (origin_parts.scheme, origin_parts.netloc, chinese_path, "", "") ), } - for language, fallback_path in HREFLANG_FALLBACKS.get(relative, {}).items(): - expected_hreflang[language] = urllib.parse.urljoin( - expected_base, fallback_path.lstrip("/") - ) + equivalent_paths = { + "en-US": english_path[len(prefix) :] if prefix else english_path, + "zh-CN": chinese_path[len(prefix) :] if prefix else chinese_path, + } + expected_hreflang = { + language: url + for language, url in equivalent_urls.items() + if target_exists(root, equivalent_paths[language]) + } if actual_hreflang != expected_hreflang: fail( f"hreflang mismatch in {relative}: " @@ -2361,7 +3903,12 @@ def validate_url(value: str, source: pathlib.Path) -> None: validate_language_switch_contract( action_data, relative, - expected_hreflang, + { + "en-US": expected_hreflang.get("en-US", expected_base), + "zh-CN": expected_hreflang.get( + "zh-CN", urllib.parse.urljoin(expected_base, "cn/") + ), + }, current_path, "zh-CN" if relative.startswith("cn/") else "en-US", ) @@ -2413,6 +3960,64 @@ def validate_url(value: str, source: pathlib.Path) -> None: ) +def derived_version_config( + manifest: dict, + entry: dict, + site_origin: str, + historical_origin: str | None = None, +) -> dict: + """Derive every Hugo version-menu value from versions.json.""" + override = { + "baseURL": base_url(site_origin, entry["publishPath"]), + "canonifyURLs": True, + "params": { + "version": entry["id"], + "version_menu": "Releases", + "version_menu_pagelinks": False, + "versions": version_urls( + manifest, site_origin, "en", historical_origin + ), + "archived_version": bool(entry["archived"]), + "url_latest_version": urllib.parse.urljoin( + site_origin.rstrip("/") + "/", "docs/" + ), + "github_repo": "https://github.com/apache/hugegraph-doc", + "github_branch": entry["githubBranch"], + }, + } + language_overrides = ( + historical_language_menus(site_origin) + if entry["archived"] + else {"en": {}, "cn": {}} + ) + for language in ("en", "cn"): + language_overrides[language]["params"] = language_version_params( + manifest, + site_origin, + language, + historical_origin, + ) + override["languages"] = language_overrides + return override + + +def render_config(args: argparse.Namespace) -> None: + """Write the manifest-derived override used by direct Hugo commands.""" + manifest = load_manifest(args.manifest) + version_id = args.version or manifest["versions"][0]["id"] + entry = next( + (item for item in manifest["versions"] if item["id"] == version_id), None + ) + if entry is None: + fail(f"unknown version {version_id}") + override = derived_version_config( + manifest, entry, args.site_origin, args.historical_origin + ) + rendered = json.dumps(override, ensure_ascii=False, sort_keys=True, indent=2) + "\n" + args.output.write_text(rendered, encoding="utf-8") + print(f"rendered Hugo config for {entry['id']} -> {args.output}") + + def build(args: argparse.Namespace) -> None: manifest = load_manifest(args.manifest) entry = next( @@ -2455,32 +4060,9 @@ def build(args: argparse.Namespace) -> None: origin=args.site_origin, ) site_base = base_url(args.site_origin, entry["publishPath"]) - override = { - "baseURL": site_base, - "canonifyURLs": True, - "params": { - "version": entry["id"], - "version_menu": "Releases", - "version_menu_pagelinks": False, - "versions": version_urls(manifest, args.site_origin, "en"), - "archived_version": bool(entry["archived"]), - "url_latest_version": urllib.parse.urljoin( - args.site_origin.rstrip("/") + "/", "docs/" - ), - "github_repo": "https://github.com/apache/hugegraph-doc", - "github_branch": entry["githubBranch"], - }, - } - language_overrides = ( - historical_language_menus(args.site_origin) - if entry["archived"] - else {"en": {}, "cn": {}} + override = derived_version_config( + manifest, entry, args.site_origin, args.historical_origin ) - for language in ("en", "cn"): - language_overrides[language]["params"] = language_version_params( - manifest, args.site_origin, language - ) - override["languages"] = language_overrides override_path = assembly / "version-config.json" override_path.write_text( json.dumps(override, ensure_ascii=False), encoding="utf-8" @@ -2532,6 +4114,9 @@ def build(args: argparse.Namespace) -> None: cwd=assembly, check=True, ) + route_migrations = migrate_legacy_information_architecture( + assembly, entry["id"] + ) known_fixes = apply_known_legacy_fixes(assembly, entry["id"]) docs_navigation = materialize_docs_navigation(assembly, entry["publishPath"]) subprocess.run( @@ -2570,11 +4155,28 @@ def build(args: argparse.Namespace) -> None: go_directory + os.pathsep + build_environment.get("PATH", "") ) subprocess.run(command, cwd=assembly, check=True, env=build_environment) + route_aliases = ( + write_historical_route_aliases( + output, args.site_origin, entry["publishPath"] + ) + if entry["id"] in {"1.3", "1.0"} + else 0 + ) + archived_noindex = ( + mark_historical_pages_noindex(output) if entry["archived"] else 0 + ) + non_equivalent_hreflang = remove_non_equivalent_hreflang( + output, args.site_origin, entry["publishPath"] + ) + historical_sitemaps = ( + exclude_historical_sitemaps(output) if entry["archived"] else 0 + ) url_scoping = scope_version_artifact( output, manifest, entry, args.site_origin, + args.historical_origin, ) url_scoping["historicalHomeRedirects"] = ( write_historical_home_redirects(output, args.site_origin) @@ -2610,10 +4212,15 @@ def build(args: argparse.Namespace) -> None: for item in migration_data.get("files", []) ), "knownFixes": known_fixes, + "routeMigrations": route_migrations, "residual": 0, }, "docsNavigation": docs_navigation, "urlScoping": url_scoping, + "historicalSitemapsRemoved": historical_sitemaps, + "historicalNoindexPages": archived_noindex, + "historicalRouteAliases": route_aliases, + "nonEquivalentHreflangRemoved": non_equivalent_hreflang, } ) (output / ".version.json").write_text( @@ -2634,13 +4241,6 @@ def write_aggregate_sitemap(output: pathlib.Path, origin: str, manifest: dict) - urllib.parse.urljoin(origin.rstrip("/") + "/", "en/sitemap.xml"), urllib.parse.urljoin(origin.rstrip("/") + "/", "cn/sitemap.xml"), ] - for entry in manifest["versions"]: - if entry["publishPath"]: - locations.append( - urllib.parse.urljoin( - origin.rstrip("/") + "/", entry["publishPath"] + "/sitemap.xml" - ) - ) root = ET.Element( "sitemapindex", xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ) @@ -2714,14 +4314,71 @@ def validate_output_security(output: pathlib.Path, site_origin: str) -> None: ) +def validate_aggregate_version_routes( + output: pathlib.Path, + route_map: dict, + selected: set[str], + manifest: dict, +) -> None: + """Prove every selected route target exists and every selected null is real.""" + validate_version_routes(route_map, manifest) + version_ids = manifest_version_ids(manifest) + publish_paths = { + entry["id"]: entry["publishPath"] for entry in manifest["versions"] + } + selected = set(selected) + unknown = selected.difference(version_ids) + if unknown: + fail(f"cannot validate unknown route-map versions: {sorted(unknown)!r}") + for version in version_ids: + if version not in selected: + continue + if version not in publish_paths: + fail(f"route-map publish path is missing for {version}") + version_root = output / publish_paths[version] + actual = canonical_docs_pages(version_root, version) + for logical_id, targets in route_map["pages"].items(): + expected = targets[version] + observed = actual.get(logical_id) + if expected is None: + if observed is not None: + fail( + f"route-map null target exists for " + f"{version} {logical_id}: {observed}" + ) + continue + if observed is None: + fail( + f"route-map target is missing for " + f"{version} {logical_id}: {expected}" + ) + if observed != expected: + fail( + f"route-map target drift for {version} {logical_id}: " + f"{observed} != {expected}" + ) + extras = sorted(set(actual).difference(route_map["pages"])) + if extras: + fail( + f"canonical Docs pages are absent from route-map for " + f"{version}: {extras}" + ) + + def aggregate(args: argparse.Namespace) -> None: manifest = load_resolved_manifest(args.resolved_manifest) + selected = selected_version_ids(getattr(args, "select", None), manifest) output = prepare_output_directory(args.output, "aggregate output") output.mkdir(parents=True) seen: set[str] = set() resolved = [] for entry in manifest["versions"]: - source = args.artifacts / f"{args.artifact_prefix}{entry['id']}" + if entry["id"] not in selected: + continue + source = args.artifacts / ( + f"{args.artifact_prefix}{entry['id']}" + f"{getattr(args, 'artifact_suffix', '')}" + ) metadata_path = source / ".version.json" if not metadata_path.is_file(): fail(f"missing version metadata: {metadata_path}") @@ -2733,6 +4390,7 @@ def aggregate(args: argparse.Namespace) -> None: version=entry["id"], sha=entry["sha"], site_origin=args.site_origin, + historical_origin=getattr(args, "historical_origin", None), artifact=source, ) ) @@ -2774,6 +4432,17 @@ def aggregate(args: argparse.Namespace) -> None: + "\n", encoding="utf-8", ) + route_map = load_version_routes(manifest=manifest) + (metadata_dir / "version-routes.json").write_text( + json.dumps(route_map, ensure_ascii=False, sort_keys=False, indent=2) + "\n", + encoding="utf-8", + ) + validate_aggregate_version_routes( + output, + route_map, + selected, + manifest, + ) validate_output_security(output, args.site_origin) print( f"aggregated {len(resolved)} versions and {len(seen)} files " @@ -2781,6 +4450,23 @@ def aggregate(args: argparse.Namespace) -> None: ) +def generate_routes(args: argparse.Namespace) -> None: + manifest = load_manifest(args.manifest) + version_ids = manifest_version_ids(manifest) + roots = { + version: args.artifacts + / f"{args.artifact_prefix}{version}{args.artifact_suffix}" + for version in version_ids + } + data = generate_version_routes(roots, manifest) + args.output.parent.mkdir(parents=True, exist_ok=True) + args.output.write_text( + json.dumps(data, ensure_ascii=False, sort_keys=False, indent=2) + "\n", + encoding="utf-8", + ) + print(f"generated {len(data['pages'])} logical version routes -> {args.output}") + + def parser() -> argparse.ArgumentParser: result = argparse.ArgumentParser(description=__doc__) result.add_argument("--manifest", type=pathlib.Path, default=ROOT / "versions.json") @@ -2789,13 +4475,22 @@ def parser() -> argparse.ArgumentParser: prepare_parser = commands.add_parser("prepare") prepare_parser.add_argument("--local", action="store_true") prepare_parser.add_argument("--latest-sha", default="HEAD") + prepare_parser.add_argument("--select") prepare_parser.add_argument("--output", type=pathlib.Path) prepare_parser.set_defaults(func=prepare) + config_parser = commands.add_parser("config") + config_parser.add_argument("--version") + config_parser.add_argument("--site-origin", default=CANONICAL_ORIGIN) + config_parser.add_argument("--historical-origin") + config_parser.add_argument("--output", type=pathlib.Path, required=True) + config_parser.set_defaults(func=render_config) + build_parser = commands.add_parser("build") build_parser.add_argument("--version", required=True) build_parser.add_argument("--sha", required=True) build_parser.add_argument("--site-origin", required=True) + build_parser.add_argument("--historical-origin") build_parser.add_argument("--output", type=pathlib.Path, required=True) build_parser.set_defaults(func=build) @@ -2803,20 +4498,33 @@ def parser() -> argparse.ArgumentParser: validate_parser.add_argument("--version", required=True) validate_parser.add_argument("--sha", required=True) validate_parser.add_argument("--site-origin", required=True) + validate_parser.add_argument("--historical-origin") validate_parser.add_argument("--artifact", type=pathlib.Path, required=True) validate_parser.set_defaults(func=validate_artifact) aggregate_parser = commands.add_parser("aggregate") aggregate_parser.add_argument("--artifacts", type=pathlib.Path, required=True) aggregate_parser.add_argument("--artifact-prefix", default="") + aggregate_parser.add_argument("--artifact-suffix", default="") aggregate_parser.add_argument( "--resolved-manifest", type=pathlib.Path, required=True ) aggregate_parser.add_argument("--site-origin", required=True) + aggregate_parser.add_argument("--historical-origin") + aggregate_parser.add_argument("--select") aggregate_parser.add_argument("--output", type=pathlib.Path, required=True) aggregate_parser.add_argument("--asf-profile") aggregate_parser.add_argument("--asf-whoami") aggregate_parser.set_defaults(func=aggregate) + + routes_parser = commands.add_parser("routes") + routes_parser.add_argument("--artifacts", type=pathlib.Path, required=True) + routes_parser.add_argument("--artifact-prefix", default="") + routes_parser.add_argument("--artifact-suffix", default="") + routes_parser.add_argument( + "--output", type=pathlib.Path, default=VERSION_ROUTES + ) + routes_parser.set_defaults(func=generate_routes) return result diff --git a/static/img/bootstrap-controls/accordion-active-dark.svg b/static/img/bootstrap-controls/accordion-active-dark.svg new file mode 100644 index 0000000000..3d4bc8f717 --- /dev/null +++ b/static/img/bootstrap-controls/accordion-active-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/accordion-active.svg b/static/img/bootstrap-controls/accordion-active.svg new file mode 100644 index 0000000000..84298341e3 --- /dev/null +++ b/static/img/bootstrap-controls/accordion-active.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/accordion-dark.svg b/static/img/bootstrap-controls/accordion-dark.svg new file mode 100644 index 0000000000..3d4bc8f717 --- /dev/null +++ b/static/img/bootstrap-controls/accordion-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/accordion.svg b/static/img/bootstrap-controls/accordion.svg new file mode 100644 index 0000000000..1c53db8c3e --- /dev/null +++ b/static/img/bootstrap-controls/accordion.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/carousel-next.svg b/static/img/bootstrap-controls/carousel-next.svg new file mode 100644 index 0000000000..75822e3842 --- /dev/null +++ b/static/img/bootstrap-controls/carousel-next.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/carousel-prev.svg b/static/img/bootstrap-controls/carousel-prev.svg new file mode 100644 index 0000000000..27a6b32a61 --- /dev/null +++ b/static/img/bootstrap-controls/carousel-prev.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/check-checked.svg b/static/img/bootstrap-controls/check-checked.svg new file mode 100644 index 0000000000..55c82bbbcf --- /dev/null +++ b/static/img/bootstrap-controls/check-checked.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/check-indeterminate.svg b/static/img/bootstrap-controls/check-indeterminate.svg new file mode 100644 index 0000000000..8769f308d6 --- /dev/null +++ b/static/img/bootstrap-controls/check-indeterminate.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/close.svg b/static/img/bootstrap-controls/close.svg new file mode 100644 index 0000000000..fca539ec74 --- /dev/null +++ b/static/img/bootstrap-controls/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/navbar-dark.svg b/static/img/bootstrap-controls/navbar-dark.svg new file mode 100644 index 0000000000..d18a64367b --- /dev/null +++ b/static/img/bootstrap-controls/navbar-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/navbar-light.svg b/static/img/bootstrap-controls/navbar-light.svg new file mode 100644 index 0000000000..7dc3ddfb35 --- /dev/null +++ b/static/img/bootstrap-controls/navbar-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/radio-checked.svg b/static/img/bootstrap-controls/radio-checked.svg new file mode 100644 index 0000000000..59849bd2a9 --- /dev/null +++ b/static/img/bootstrap-controls/radio-checked.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/select-dark.svg b/static/img/bootstrap-controls/select-dark.svg new file mode 100644 index 0000000000..e1f5fbecef --- /dev/null +++ b/static/img/bootstrap-controls/select-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/select.svg b/static/img/bootstrap-controls/select.svg new file mode 100644 index 0000000000..4107eebb4f --- /dev/null +++ b/static/img/bootstrap-controls/select.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/switch-checked.svg b/static/img/bootstrap-controls/switch-checked.svg new file mode 100644 index 0000000000..cccc6235d1 --- /dev/null +++ b/static/img/bootstrap-controls/switch-checked.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/switch-dark.svg b/static/img/bootstrap-controls/switch-dark.svg new file mode 100644 index 0000000000..55217871ed --- /dev/null +++ b/static/img/bootstrap-controls/switch-dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/switch-focus.svg b/static/img/bootstrap-controls/switch-focus.svg new file mode 100644 index 0000000000..7a77205563 --- /dev/null +++ b/static/img/bootstrap-controls/switch-focus.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/switch.svg b/static/img/bootstrap-controls/switch.svg new file mode 100644 index 0000000000..29ed779d0a --- /dev/null +++ b/static/img/bootstrap-controls/switch.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/bootstrap-controls/validation-invalid.svg b/static/img/bootstrap-controls/validation-invalid.svg new file mode 100644 index 0000000000..e55dd71a59 --- /dev/null +++ b/static/img/bootstrap-controls/validation-invalid.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/static/img/bootstrap-controls/validation-valid.svg b/static/img/bootstrap-controls/validation-valid.svg new file mode 100644 index 0000000000..fae2d7d604 --- /dev/null +++ b/static/img/bootstrap-controls/validation-valid.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/social/hugegraph-default.png b/static/img/social/hugegraph-default.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3e3a0c141b6670e6e401c534493630f7c1f265 GIT binary patch literal 984595 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 u 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 z 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
4AWLz&bmvp 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

HLTWU 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

H( zqCojOB<*NG&6)- zML{THgrwPqZ>C(_!VxE(k-|}3#!90wPKZo)lmE>p8tVhHHb+EgMoP(&Ko0f_Fk?;| zni_=_qnsWzGg8rOq*YXQ>}`oq`ja!NhOi_Dr7hQ4AM{Z%ghZxkgybn=rl(+2LB^k8 z0fmxP7Yr&526>}X^+A9P6$e-iQB=0_l9Mod)0IilMApQPEVS`ec%J$kI28oz(3q(q1WYm=URlIwj`mB#1+?MOoY>PKIW6Par(^BnN+!sMRHDJB!|c0K zafpxs!}KIzxGl36%Blg)t}o({oIiHLfDwsq4czmx%Qjm0e$V-Uw1j3;}$Y*LwU`|*XGh#2X%Fz(PRJl+u$v##onOz+ zHavS~{%Ey%crkx;F?)Emczm_E;0K5NJcl^Qk~CA9>V#Xⅆrp7ywA?xIpbY+0*)j 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
-}IOINM~YHcR2AffQ8! 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 i*}lFolm+s9#{UOKe8{-)2okpd0000 { + await page.emulateMedia({ reducedMotion: "reduce" }); + await page.goto(route); + await page.addStyleTag({ + content: "*,*::before,*::after{animation:none!important;transition:none!important}" + }); + await page.evaluate(() => document.fonts.ready); + await page.waitForTimeout(250); + const results = await new AxeBuilder({ page }) + .withTags(["wcag2a", "wcag2aa", "wcag21aa", "wcag22aa"]) + .analyze(); + const knownOinkBaseline = new Set(["list", "target-size"]); + const blocking = results.violations.filter( + (item) => + ["critical", "serious"].includes(item.impact) && + !knownOinkBaseline.has(item.id) + ); + expect(blocking).toEqual([]); + }); +} + +for (const locale of ["en", "cn"]) { + test(`download table scrolls with the keyboard on mobile ${locale}`, async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto(`${locale === "cn" ? "/cn" : ""}/docs/download/download/`); + const region = page.locator(".hg-asf-release .td-asset-list__table-wrap").first(); + await region.scrollIntoViewIfNeeded(); + await region.focus(); + await expect(region).toBeFocused(); + await region.press("ArrowRight"); + await expect.poll(() => region.evaluate((element) => element.scrollLeft)).toBeGreaterThan(0); + await expect.poll(() => page.evaluate(() => document.documentElement.scrollWidth <= innerWidth)).toBe(true); + }); +} diff --git a/tests/e2e/ai-enabled.yaml b/tests/e2e/ai-enabled.yaml new file mode 100644 index 0000000000..a0a12d188b --- /dev/null +++ b/tests/e2e/ai-enabled.yaml @@ -0,0 +1,8 @@ +params: + ai_search: + enabled: true + provider: kapa + website_id: 0b277570-4740-451e-96fa-1e4ac1ac5e88 + source_groups: + en: e2e-source-en + cn: e2e-source-cn diff --git a/tests/e2e/ai.spec.js b/tests/e2e/ai.spec.js new file mode 100644 index 0000000000..746bc35379 --- /dev/null +++ b/tests/e2e/ai.spec.js @@ -0,0 +1,163 @@ +const { test, expect } = require("./artifact-test"); + +const AI_ORIGIN = "http://127.0.0.1:4174"; +const mockBundle = ` +(function () { + var queued = window.Kapa && window.Kapa.q ? window.Kapa.q.slice() : []; + window.__kapaCalls = window.__kapaCalls || []; + window.Kapa = function (method, value) { + window.__kapaCalls.push([method, value]); + if (method === 'render' && value && value.onRender) value.onRender(); + }; + queued.forEach(function (args) { window.Kapa.apply(null, Array.from(args)); }); +})();`; + +test.beforeEach(async ({}, testInfo) => { + testInfo.skip(!process.env.AI_SITE_ROOT, "AI-enabled fixture was not built"); +}); + +for (const [locale, route, source, language] of [ + ["en", "/docs/", "e2e-source-en", "en"], + ["cn", "/cn/docs/", "e2e-source-cn", "zh"] +]) { + test(`AI tail is click-gated and locale-bound for ${locale}`, async ({ page }) => { + const requests = []; + await page.route("https://widget.kapa.ai/kapa-widget.bundle.js*", async (route) => { + requests.push(route.request().url()); + await route.fulfill({ status: 200, contentType: "text/javascript", body: mockBundle }); + }); + await page.goto(AI_ORIGIN + route); + expect(requests).toEqual([]); + await page.evaluate(() => + document.documentElement.setAttribute("data-bs-theme", "dark") + ); + const launcher = page.locator(".hg-ask-ai-launcher"); + await expect(launcher).toBeVisible(); + + await page.locator("[data-td-shell-search-open]").first().click(); + const input = page.locator(".td-shell-search__input"); + await input.fill(" server auth "); + const tail = page.locator("[data-hg-ai-search-tail]"); + await expect(tail).toBeVisible(); + await expect(tail.locator("[data-hg-ask-ai]")).toHaveAttribute( + "data-hg-ai-query", "server auth" + ); + await input.fill(""); + await expect(tail).toHaveCount(0); + await input.fill(">theme"); + await expect(tail).toHaveCount(0); + await input.fill("server auth"); + await tail.locator("[data-hg-ask-ai]").click(); + await expect(page.locator("[data-hg-ai-consent]")).toBeVisible(); + expect(requests).toEqual([]); + await page.locator("[data-hg-ai-continue]").click(); + await expect.poll(() => requests.length).toBe(1); + await expect.poll(() => page.evaluate(() => window.__kapaCalls || [])).toContainEqual([ + "setSourceGroupIDs", [source] + ]); + const script = page.locator("script[data-hg-kapa-widget]"); + await expect(script).toHaveAttribute("data-language", language); + await expect(script).toHaveAttribute("data-source-group-ids-include", source); + await expect(script).toHaveAttribute("data-project-color", "#532fc9"); + await expect(script).toHaveAttribute("data-project-color-dark", "#a693e3"); + await expect(script).toHaveAttribute("data-anchor-color-dark", "#baace9"); + await expect(script).toHaveAttribute( + "data-color-scheme-selector", "[data-bs-theme='dark']" + ); + const calls = await page.evaluate(() => window.__kapaCalls); + expect(calls).toContainEqual([ + "open", { mode: "ai", query: "server auth", submit: true } + ]); + }); +} + +test("AI 500 remains non-blocking and retry issues one fresh request", async ({ page }) => { + let attempts = 0; + await page.route("https://widget.kapa.ai/kapa-widget.bundle.js*", async (route) => { + attempts += 1; + if (attempts === 1) await route.fulfill({ status: 500, body: "failed" }); + else await route.fulfill({ status: 200, contentType: "text/javascript", body: mockBundle }); + }); + await page.goto(AI_ORIGIN + "/docs/"); + const launcher = page.locator(".hg-ask-ai-launcher"); + await launcher.click(); + await page.locator("[data-hg-ai-continue]").evaluate(button => { button.click(); button.click(); }); + await expect.poll(() => attempts).toBe(1); + await expect(launcher).toHaveAttribute("data-hg-ai-state", "error"); + await expect(launcher).toHaveAttribute("title", /unavailable/i); + await launcher.click(); + await expect.poll(() => attempts).toBe(2); + await expect(launcher).toHaveAttribute("data-hg-ai-state", "ready"); + await expect(launcher).not.toHaveAttribute("title", /unavailable/i); +}); + +test("AI pending timeout discards stale state and retry waits for a fresh bundle", async ({ + page +}) => { + let attempts = 0; + let releaseStale; + const staleGate = new Promise((resolve) => { releaseStale = resolve; }); + await page.route("https://widget.kapa.ai/kapa-widget.bundle.js*", async (route) => { + attempts += 1; + if (attempts === 1) { + await staleGate; + } + await route.fulfill({ + status: 200, + contentType: "text/javascript", + body: mockBundle + }); + }); + await page.goto(AI_ORIGIN + "/docs/"); + const launcher = page.locator(".hg-ask-ai-launcher"); + await launcher.click(); + await page.locator("[data-hg-ai-continue]").click(); + await expect.poll(() => attempts).toBe(1); + await expect(launcher).toHaveAttribute("data-hg-ai-state", "error", { + timeout: 7_000 + }); + await launcher.click(); + await expect.poll(() => attempts).toBe(2); + await expect(launcher).toHaveAttribute("data-hg-ai-state", "ready"); + expect( + await page.locator("script[data-hg-kapa-widget]").getAttribute("src") + ).toContain("?hg-retry=2"); + expect( + await page.evaluate(() => + (window.__kapaCalls || []).filter(([method]) => method === "open").length + ) + ).toBe(1); + + releaseStale(); + await page.waitForTimeout(250); + expect( + await page.evaluate(() => + (window.__kapaCalls || []).filter(([method]) => method === "open").length + ) + ).toBe(1); +}); + +for (const dismiss of ['cancel', 'Escape']) { + test(`local AI consent ${dismiss} keeps queries local and restores search focus`, async ({ page }) => { + const external = []; + page.on('request', request => { if (!new URL(request.url()).hostname.match(/^(127\.0\.0\.1|hugegraph\.apache\.org)$/)) external.push(request.url()); }); + await page.goto(AI_ORIGIN + '/docs/'); + await page.locator('[data-td-shell-search-open]').first().click(); + await page.locator('.td-shell-search__input').fill('private query'); + const tail = page.locator('[data-hg-ai-search-tail] [data-hg-ask-ai]'); + await tail.click(); + const dialog = page.locator('[data-hg-ai-consent]'); + await expect(dialog).toBeVisible(); + await expect(dialog).toContainText('third-party'); + await expect(page.locator('[data-hg-ai-cancel]')).toBeFocused(); + expect(external).toEqual([]); + if (dismiss === 'cancel') await page.locator('[data-hg-ai-cancel]').click(); + else await page.keyboard.press('Escape'); + await expect(dialog).not.toBeVisible(); + await expect(tail).toBeFocused(); + expect(external).toEqual([]); + await expect(page.locator('script[data-hg-kapa-widget]')).toHaveCount(0); + await page.locator('.td-shell-search__input').fill('server'); + await expect(page.locator('[role="option"]').first()).toBeVisible(); + }); +} diff --git a/tests/e2e/artifact-test.js b/tests/e2e/artifact-test.js new file mode 100644 index 0000000000..564a26f860 --- /dev/null +++ b/tests/e2e/artifact-test.js @@ -0,0 +1,31 @@ +const base = require("@playwright/test"); + +const LOCAL_ARTIFACT_ORIGIN = "http://127.0.0.1:4173"; +const PUBLISHED_ORIGINS = new Set([ + "https://hugegraph.apache.org", + "https://hugegraph-oink.staged.apache.org" +]); + +const test = base.test.extend({ + page: async ({ page }, use) => { + await page.route("**/*", async (route) => { + const requested = new URL(route.request().url()); + if (!PUBLISHED_ORIGINS.has(requested.origin)) { + await route.continue(); + return; + } + const local = new URL(requested.pathname + requested.search, LOCAL_ARTIFACT_ORIGIN); + const response = await route.fetch({ url: local.href }); + await route.fulfill({ + response, + headers: { + ...response.headers(), + "access-control-allow-origin": "*" + } + }); + }); + await use(page); + } +}); + +module.exports = { test, expect: base.expect }; diff --git a/tests/e2e/package-lock.json b/tests/e2e/package-lock.json new file mode 100644 index 0000000000..569ab07092 --- /dev/null +++ b/tests/e2e/package-lock.json @@ -0,0 +1,103 @@ +{ + "name": "hugegraph-doc-e2e", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "hugegraph-doc-e2e", + "devDependencies": { + "@axe-core/playwright": "4.13.0", + "@playwright/test": "1.62.1" + }, + "engines": { + "node": ">=24" + } + }, + "node_modules/@axe-core/playwright": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@axe-core/playwright/-/playwright-4.13.0.tgz", + "integrity": "sha512-6YLx+kxXu5GJceG4ozFg+33a2EMTdjYwWGloJ3sb9Kta5pp+ZNS53uxGVog5JetIY8s++P5UrtX+cri+u0VAVg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "axe-core": "~4.13.0" + }, + "peerDependencies": { + "playwright-core": ">= 1.0.0" + } + }, + "node_modules/@playwright/test": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz", + "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/axe-core": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.13.0.tgz", + "integrity": "sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + } + } +} diff --git a/tests/e2e/package.json b/tests/e2e/package.json new file mode 100644 index 0000000000..36ef845b88 --- /dev/null +++ b/tests/e2e/package.json @@ -0,0 +1,16 @@ +{ + "name": "hugegraph-doc-e2e", + "private": true, + "engines": { + "node": ">=24" + }, + "scripts": { + "test": "playwright test", + "test:ci": "node --test ../ui-ai/*.test.cjs && node --test workflow-contract.test.cjs && playwright test versioning.spec.js search-ranking.spec.js platform.spec.js ai.spec.js accessibility.spec.js --reporter=line,html", + "test:visual": "playwright test visual.spec.js --reporter=line" + }, + "devDependencies": { + "@axe-core/playwright": "4.13.0", + "@playwright/test": "1.62.1" + } +} diff --git a/tests/e2e/platform.spec.js b/tests/e2e/platform.spec.js new file mode 100644 index 0000000000..9af0407d03 --- /dev/null +++ b/tests/e2e/platform.spec.js @@ -0,0 +1,222 @@ +const { test, expect } = require("./artifact-test"); + +for (const locale of ["en", "cn"]) { + const prefix = locale === "cn" ? "/cn" : ""; + test(`latest ${locale} sidebar persists and isolates collapse`, async ({ page }) => { + await page.goto(`${prefix}/docs/introduction/`); + const key = `oink.sidebar.v1.latest.${locale}`; + await expect.poll(() => page.evaluate((name) => localStorage.getItem(name), key)) + .not.toBeNull(); + const toggle = page + .locator('#td-shell-sidebar [data-td-shell-tree-toggle][aria-controls$="_navdevelop-children"]') + .first(); + await expect(toggle).toHaveAttribute("aria-expanded", "false"); + await toggle.click(); + const target = await toggle.getAttribute("aria-controls"); + await expect.poll(() => page.evaluate((name) => localStorage.getItem(name), key)) + .toContain(target); + await page.reload(); + await expect(page.locator(`[aria-controls="${target}"]`)).toHaveAttribute( + "aria-expanded", "true" + ); + + await page.locator(".td-shell-sidebar__collapse").click(); + await expect(page.locator("#td-shell-sidebar")).toHaveAttribute("aria-hidden", "true"); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + const restore = page.locator(".hg-sidebar-restore"); + await expect(restore).toBeVisible(); + // Dynamic mode keeps the persistent preference while exposing an operable + // preview. Assert pixels/geometry as well as inert state to catch CSS hiding it. + await page.mouse.move(900, 500); + // OINK suppresses pointer-open for 150ms after explicit mode changes. + await page.waitForTimeout(160); + await page.mouse.move(4, 200); + const panel = page.locator(".td-shell-sidebar__panel"); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", false); + await expect(panel).toHaveCSS("opacity", "1"); + await expect(restore).toBeFocused(); // Pointer preview must not steal focus. + await expect.poll(async () => (await panel.boundingBox()).x).toBeGreaterThanOrEqual(0); + await panel.locator("a[href]").first().hover(); + await page.mouse.move(900, 500); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + await expect.poll(() => page.evaluate(() => localStorage.getItem("td-shell-sidebar-collapsed"))).toBe("1"); + await page.reload(); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + // The separate edge is repeatable after navigation without changing mode. + await page.mouse.move(10, 200); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", false); + await panel.locator("a[href]").first().hover(); + await page.mouse.move(900, 500); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + await restore.focus(); + await restore.press("ArrowRight"); + await expect(panel.locator("a[href]").first()).toBeFocused(); + await restore.hover(); + await panel.locator("a[href]").first().hover(); + await page.mouse.move(900, 500); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", false); + await page.keyboard.press("Escape"); + await expect(restore).toBeFocused(); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + await restore.click(); + await page.locator(".td-shell-sidebar__collapse").focus(); + await page.keyboard.press("Enter"); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + await restore.click(); + await expect(page.locator("#td-shell-sidebar")).not.toHaveAttribute( + "aria-hidden", "true" + ); + }); + + test(`latest ${locale} mobile drawer restores focus and unlocks scroll`, async ({ page }) => { + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto(`${prefix}/docs/`); + const opener = page.locator("[data-td-shell-drawer-open]"); + await opener.click(); + await expect(page.locator("html")).toHaveAttribute("data-td-shell-drawer", "open"); + await page.locator("button[data-td-shell-drawer-close]").click(); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + await expect(opener).toBeFocused(); + await expect(page.locator("html")).not.toHaveAttribute("data-td-shell-lock", ""); + }); +} + +test("disabled AI emits no UI or Kapa request", async ({ page }) => { + const kapaRequests = []; + page.on("request", (request) => { + if (request.url().includes("kapa.ai")) kapaRequests.push(request.url()); + }); + await page.goto("/docs/"); + await page.locator("[data-td-shell-search-open]").first().click(); + await page.locator(".td-shell-search__input").fill("server"); + await expect(page.locator('[role="option"]').first()).toBeVisible(); + expect(kapaRequests).toEqual([]); + await expect(page.locator("[data-hg-ask-ai]")).toHaveCount(0); +}); + +test("search index failure keeps one stable, focusable retry control", async ({ + page +}) => { + let attempts = 0; + await page.route("**/offline-search-index.en.*.json", async (route) => { + attempts += 1; + if (attempts === 1) await route.abort("failed"); + else await route.fallback(); + }); + await page.goto("/docs/"); + await page.locator("[data-td-shell-search-open]").first().click(); + await page.locator(".td-shell-search__input").fill("server"); + const retry = page.locator("[data-hg-search-retry]"); + await expect(retry).toHaveCount(1); + const mutations = await retry.evaluate((node) => { + window.__hgRetryNode = node; + window.__hgRetryMutations = 0; + new MutationObserver(() => { window.__hgRetryMutations += 1; }) + .observe(node.parentNode, { childList: true, subtree: true }); + return window.__hgRetryMutations; + }); + expect(mutations).toBe(0); + await page.waitForTimeout(250); + expect(await page.evaluate(() => window.__hgRetryMutations)).toBe(0); + expect( + await retry.evaluate((node) => node === window.__hgRetryNode) + ).toBe(true); + + const button = retry.locator("button"); + await button.focus(); + await expect(button).toBeFocused(); + await button.click(); + await expect.poll(() => attempts).toBe(2); + await expect(page.locator('[role="option"]').first()).toBeVisible(); + await expect(page.locator(".td-shell-search__input")).toBeFocused(); + await expect(retry).toHaveCount(0); +}); + +test("Community grid and HTML/Print/Markdown profiles stay in parity", async ({ + page, + request +}) => { + await page.goto("/community/"); + test.skip( + (await page.locator(".hg-community-members__grid").count()) === 0, + "PR-B Community section is not integrated in this artifact" + ); + for (const [width, columns] of [[1440, 5], [900, 3], [390, 2], [320, 2]]) { + await page.setViewportSize({ width, height: 900 }); + await page.goto("/community/"); + const grid = page.locator(".hg-community-members__grid").first(); + await expect(grid).toBeVisible(); + expect( + await grid.evaluate((node) => getComputedStyle(node).gridTemplateColumns.split(" ").length) + ).toBe(columns); + } + await page.evaluate(() => localStorage.setItem("td-color-theme", "dark")); + await page.reload(); + await expect(page.locator(".hg-community-member__link").first()).toBeVisible(); + await expect(page.locator(".hg-community-member__initials").first()).toBeAttached(); + + const htmlProfiles = await page + .locator("#project-members .hg-community-member__link") + .evaluateAll((links) => links.map((link) => link.href).sort()); + const print = await (await request.get("/_print/community/")).text(); + const markdown = await (await request.get("/community/index.md")).text(); + for (const profile of htmlProfiles) { + expect(print).toContain(profile); + expect(markdown).toContain(profile); + } +}); + +for (const locale of ["en", "cn"]) { + for (const mobile of [false, true]) { + test(`latest ${locale} ${mobile ? "mobile" : "desktop"} versions reveal archives with keyboard`, async ({ page }) => { + if (mobile) await page.setViewportSize({ width: 390, height: 844 }); + await page.goto(locale === "cn" ? "/cn/docs/" : "/docs/"); + if (mobile) { + await page.locator("[data-td-shell-drawer-open]").click(); + await expect(page.locator('button[data-td-shell-drawer-close]')).toBeFocused(); + } + else await page.locator(".td-nav-version-menu [data-td-nav-hover-trigger]").click(); + const menu = page.locator(mobile ? ".hg-shell-mobile-utils__group" : ".td-nav-version-menu").first(); + for (const id of ["latest", "1.7", "1.5"]) { + await expect(menu.locator(`[data-hg-version-id="${id}"]`)).toBeVisible(); + } + for (const id of ["1.3", "1.0"]) { + await expect(menu.locator(`[data-hg-version-id="${id}"]`)).toBeHidden(); + } + const more = menu.locator("summary"); + await more.focus(); + await more.press("Enter"); + await expect(menu.locator('[data-hg-version-id="1.0"]')).toBeVisible(); + if (mobile) { + for (const id of ["1.3", "1.0"]) { + const box = await menu.locator(`[data-hg-version-id="${id}"]`).boundingBox(); + expect(box.height).toBeGreaterThanOrEqual(36); + expect(box.width).toBeGreaterThanOrEqual(36); + } + } + await more.press("Tab"); + await expect(menu.locator('[data-hg-version-id="1.3"]')).toBeFocused(); + await more.click(); + await expect(menu.locator('[data-hg-version-id="1.0"]')).toBeHidden(); + }); + } +} + +for (const locale of ["en", "cn"]) { + for (const trigger of [".hg-sidebar-restore", ".td-shell-float [data-td-shell-sidebar-toggle]"]) { + test(`latest ${locale} pinning with ${trigger} preserves keyboard focus`, async ({ page }) => { + await page.addInitScript(() => localStorage.setItem("td-shell-sidebar-collapsed", "1")); + await page.goto(`${locale === "cn" ? "/cn" : ""}/docs/introduction/`); + const opener = page.locator(trigger); + await expect(opener).toBeVisible(); + await opener.focus(); + await page.keyboard.press("Enter"); + await expect(opener).toBeHidden(); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", false); + await expect(page.locator(".td-shell-sidebar__collapse")).toBeFocused(); + await page.keyboard.press("Enter"); + await expect(page.locator("#td-shell-sidebar")).toHaveJSProperty("inert", true); + await expect(page.locator(".hg-sidebar-restore")).toBeFocused(); + }); + } +} diff --git a/tests/e2e/playwright.config.js b/tests/e2e/playwright.config.js new file mode 100644 index 0000000000..7eef0aceb6 --- /dev/null +++ b/tests/e2e/playwright.config.js @@ -0,0 +1,44 @@ +const { defineConfig } = require("@playwright/test"); + +const siteRoot = process.env.SITE_ROOT; +const aiSiteRoot = process.env.AI_SITE_ROOT; +if (!siteRoot) { + throw new Error("SITE_ROOT must point to an aggregate site artifact"); +} + +module.exports = defineConfig({ + testDir: ".", + testMatch: "*.spec.js", + outputDir: "test-results", + timeout: 30_000, + expect: { timeout: 5_000 }, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 2 : undefined, + reporter: [["line"], ["html", { outputFolder: "playwright-report", open: "never" }]], + use: { + baseURL: "http://127.0.0.1:4173", + browserName: "chromium", + trace: "retain-on-failure", + screenshot: "only-on-failure" + }, + webServer: [ + { + command: `python3 -m http.server 4173 --bind 127.0.0.1 --directory ${JSON.stringify(siteRoot)}`, + url: "http://127.0.0.1:4173/", + reuseExistingServer: false, + timeout: 30_000, + stdout: "ignore", + stderr: "ignore" + }, + ...(aiSiteRoot + ? [{ + command: `python3 -m http.server 4174 --bind 127.0.0.1 --directory ${JSON.stringify(aiSiteRoot)}`, + url: "http://127.0.0.1:4174/", + reuseExistingServer: false, + timeout: 30_000, + stdout: "ignore", + stderr: "ignore" + }] + : []) + ] +}); diff --git a/tests/e2e/search-ranking.spec.js b/tests/e2e/search-ranking.spec.js new file mode 100644 index 0000000000..06f79a4a6b --- /dev/null +++ b/tests/e2e/search-ranking.spec.js @@ -0,0 +1,103 @@ +const { test, expect } = require("./artifact-test"); +const fs = require("node:fs"); +const path = require("node:path"); + +const FALLBACK_CASES = { + en: [ + ["introduction", "/docs/introduction/"], + ["server", "/docs/quickstart/hugegraph/hugegraph-server/"], + ["hstore", "/docs/quickstart/hugegraph/hugegraph-hstore/"], + ["placement driver", "/docs/quickstart/hugegraph/hugegraph-pd/"], + ["computer", "/docs/quickstart/computing/hugegraph-computer/"], + ["loader", "/docs/quickstart/toolchain/hugegraph-loader/"], + ["hubble", "/docs/quickstart/toolchain/hugegraph-hubble/"], + ["clients", "/docs/clients/"], + ["rest api", "/docs/clients/restful-api/"], + ["configuration", "/docs/config/"], + ["authentication", "/docs/config/config-authentication/"], + ["download", "/docs/download/download/"] + ], + cn: [ + ["ไป‹็ป", "/cn/docs/introduction/"], + ["ๆœๅŠก็ซฏ", "/cn/docs/quickstart/hugegraph/hugegraph-server/"], + ["HStore", "/cn/docs/quickstart/hugegraph/hugegraph-hstore/"], + ["PD", "/cn/docs/quickstart/hugegraph/hugegraph-pd/"], + ["ๅ›พ่ฎก็ฎ—", "/cn/docs/quickstart/computing/hugegraph-computer/"], + ["ๆ•ฐๆฎๅฏผๅ…ฅ", "/cn/docs/quickstart/toolchain/hugegraph-loader/"], + ["ๅ›พๅฝขๅŒ–็•Œ้ข", "/cn/docs/quickstart/toolchain/hugegraph-hubble/"], + ["ๅฎขๆˆท็ซฏ", "/cn/docs/clients/"], + ["REST API", "/cn/docs/clients/restful-api/"], + ["้…็ฝฎ", "/cn/docs/config/"], + ["่ฎค่ฏ", "/cn/docs/config/config-authentication/"], + ["ไธ‹่ฝฝ", "/cn/docs/download/download/"] + ] +}; + +const metadataFixture = path.resolve(__dirname, "../../scripts/fixtures/community_search_queries.json"); +const metadataIntegrated = fs.existsSync(metadataFixture); +const siteRoot = process.env.SITE_ROOT; +const rawCases = metadataIntegrated + ? Object.groupBy( + JSON.parse(fs.readFileSync(metadataFixture, "utf8")).map((entry) => [ + entry.query, + entry.expected_ref + ]), + ([query, expectedRef]) => (expectedRef.startsWith("/cn/") ? "cn" : "en") + ) + : FALLBACK_CASES; +const cases = Object.fromEntries( + Object.entries(rawCases).map(([locale, localeCases]) => { + const indexName = fs + .readdirSync(siteRoot) + .find((name) => name.startsWith(`offline-search-index.${locale}.`) && name.endsWith(".json")); + if (!indexName) throw new Error(`missing ${locale} offline search index`); + const records = JSON.parse(fs.readFileSync(path.join(siteRoot, indexName), "utf8")); + const titles = new Map(records.map((record) => [record.ref, record.title])); + return [ + locale, + localeCases.map(([query, expectedRef]) => { + const expectedTitle = titles.get(expectedRef); + if (!expectedTitle) throw new Error(`missing search record ${expectedRef}`); + return [query, expectedRef, expectedTitle]; + }) + ]; + }) +); + +for (const [locale, localeCases] of Object.entries(cases)) { + test(`summary Lunr ranks fixed ${locale} entry queries`, async ({ page }) => { + test.skip(!metadataIntegrated, "PR-B search metadata fixture is not integrated"); + for (const [query, expectedRef, expectedTitle] of localeCases) { + await page.goto(locale === "cn" ? "/cn/docs/" : "/docs/"); + await page.locator("[data-td-shell-search-open]").first().click(); + const input = page.locator(".td-shell-search__input"); + await input.fill(query); + const pageResults = page + .locator("#td-shell-search-results .td-shell-search__group") + .first() + .locator('[role="option"]'); + await expect(pageResults.first(), `no Lunr results for ${query}`).toBeVisible(); + await expect + .poll(() => + pageResults.evaluateAll((rows) => + rows + .slice(0, 3) + .map((row) => row.querySelector(".td-shell-search__item-title")?.textContent.trim()) + ) + ) + .toContain(expectedTitle); + const titles = await pageResults.evaluateAll((rows) => + rows.slice(0, 3).map((row) => + row.querySelector(".td-shell-search__item-title")?.textContent.trim() + ) + ); + expect( + titles.includes(expectedTitle), + `${query} must rank ${expectedRef} in the top three` + ).toBe(true); + const target = pageResults.filter({ hasText: expectedTitle }).first(); + await target.click(); + await expect(page).toHaveURL((url) => url.pathname === expectedRef); + } + }); +} diff --git a/tests/e2e/versioning.spec.js b/tests/e2e/versioning.spec.js new file mode 100644 index 0000000000..fc5b5707ad --- /dev/null +++ b/tests/e2e/versioning.spec.js @@ -0,0 +1,305 @@ +const { test, expect } = require("./artifact-test"); + +const VERSION_IDS = ["latest", "1.7", "1.5", "1.3", "1.0"]; +const EXPECTED_IDS = (process.env.EXPECTED_VERSIONS || VERSION_IDS.join(",")).split(","); + +async function actionManifest(page) { + return page.locator("#td-action-manifest").evaluate((node) => JSON.parse(node.textContent)); +} + +async function versionOption(page, id) { + const manifest = await actionManifest(page); + return manifest.actions + .find((item) => item.id === "switch_version") + .options.find((item) => item.id === id); +} + +test("aggregate records the immutable five-version manifest", async ({ request }) => { + const response = await request.get("/build-metadata/versions.json"); + expect(response.ok()).toBeTruthy(); + const manifest = await response.json(); + expect(manifest.schemaVersion).toBe(1); + expect(manifest.versions.map((entry) => entry.id)).toEqual(EXPECTED_IDS); + for (const entry of manifest.versions) { + expect(entry.sha).toMatch(/^[0-9a-f]{40}$/); + } +}); + +for (const locale of ["en", "cn"]) { + test(`latest ${locale} exposes the fixed version order`, async ({ page }) => { + await page.goto(locale === "cn" ? "/cn/docs/" : "/docs/"); + const manifest = await actionManifest(page); + const action = manifest.actions.find((item) => item.id === "switch_version"); + expect(action.options.map((item) => item.id)).toEqual(VERSION_IDS); + }); +} + +for (const version of VERSION_IDS.slice(1)) { + for (const locale of ["en", "cn"]) { + test(`${version} ${locale} is archived and directly reachable`, async ({ page }) => { + test.skip(!EXPECTED_IDS.includes(version), "latest-only staging artifact"); + const prefix = `/versions/${version}${locale === "cn" ? "/cn" : ""}`; + await page.goto(`${prefix}/docs/`); + await expect(page.locator('meta[name="robots"]')).toHaveAttribute( + "content", + /noindex\s*,?\s*follow/i + ); + await expect(page.locator(".td-page-notice--primary")).toBeVisible(); + const manifest = await actionManifest(page); + const action = manifest.actions.find((item) => item.id === "switch_version"); + expect(action.options.map((item) => item.id)).toEqual(VERSION_IDS); + }); + } +} + +test("1.0 flat Server URL remains a static alias", async ({ request }) => { + test.skip(!EXPECTED_IDS.includes("1.0"), "latest-only staging artifact"); + const response = await request.get( + "/versions/1.0/docs/quickstart/hugegraph-server/" + ); + expect(response.ok()).toBeTruthy(); + const body = await response.text(); + expect(body).toMatch( + /http-equiv="refresh"[^>]+quickstart\/hugegraph\/hugegraph-server/ + ); + expect(body).toMatch( + /rel="canonical"[^>]+versions\/1\.0\/docs\/quickstart\/hugegraph\/hugegraph-server\// + ); +}); + +test("desktop and mobile selectors preserve query and hash for an equivalent page", async ({ + page +}) => { + test.skip(!EXPECTED_IDS.includes("1.7"), "latest-only staging artifact"); + await page.goto("/docs/quickstart/hugegraph/?query=server#server"); + const option = await versionOption(page, "1.7"); + expect(option.equivalent).toBe(true); + expect(option.fallback).toBe(false); + + const desktop = page.locator( + ".td-nav-version-menu a[data-hg-version-id='1.7']" + ); + const href = await desktop.getAttribute("href"); + expect(new URL(href).search).toBe("?query=server"); + expect(new URL(href).hash).toBe("#server"); + expect(new URL(href).pathname).toBe(new URL(option.url).pathname); + await page.locator(".td-nav-version-menu [data-td-nav-hover-trigger]").hover(); + await expect(desktop).toBeVisible(); + await desktop.click(); + await expect(page).toHaveURL((url) => + url.pathname === new URL(option.url).pathname && + url.search === "?query=server" && + url.hash === "#server" + ); + + await page.goto("/docs/quickstart/hugegraph/?query=server#server"); + await page.setViewportSize({ width: 390, height: 844 }); + await page.locator("[data-td-shell-drawer-open]").click(); + const drawer = page.locator( + "#td-shell-sidebar a[data-hg-version-id='1.7']" + ); + await expect(drawer).toHaveAttribute("href", href); + await drawer.click(); + await expect(page).toHaveURL((url) => + url.pathname === new URL(option.url).pathname && + url.search === "?query=server" && + url.hash === "#server" + ); +}); + +test("Palette version choice uses the same equivalent target", async ({ page }) => { + test.skip(!EXPECTED_IDS.includes("1.7"), "latest-only staging artifact"); + await page.goto("/docs/quickstart/hugegraph/?query=server#server"); + const option = await versionOption(page, "1.7"); + await page.locator("[data-td-shell-search-open]").first().click(); + const input = page.locator(".td-shell-search__input"); + await input.fill("Releases"); + await page + .locator('[role="option"]') + .filter({ hasText: /^Releases$/ }) + .first() + .click(); + await page + .locator('[role="option"]') + .filter({ hasText: /^1\.7$/ }) + .click(); + await expect(page).toHaveURL((url) => + url.pathname === new URL(option.url).pathname && + url.search === "?query=server" && + url.hash === "#server" + ); +}); + +test("historical selectors preserve the readme route across desktop, mobile, and Palette", async ({ + page +}) => { + test.skip( + !["1.7", "1.5", "1.3"].every((version) => EXPECTED_IDS.includes(version)), + "latest-only staging artifact" + ); + + await page.goto( + "/versions/1.7/docs/introduction/readme/?query=history#overview" + ); + let option = await versionOption(page, "1.5"); + expect(option.equivalent).toBe(true); + expect(option.fallback).toBe(false); + expect(new URL(option.url).pathname).toBe( + "/versions/1.5/docs/introduction/readme/" + ); + const desktop = page.locator( + ".td-nav-version-menu a[data-hg-version-id='1.5']" + ); + await page.locator(".td-nav-version-menu [data-td-nav-hover-trigger]").hover(); + await desktop.click(); + await expect(page).toHaveURL((url) => + url.pathname === "/versions/1.5/docs/introduction/readme/" && + url.search === "?query=history" && + url.hash === "#overview" + ); + + await page.goto( + "/versions/1.7/cn/docs/introduction/readme/?query=history#overview" + ); + await page.setViewportSize({ width: 390, height: 844 }); + await page.locator("[data-td-shell-drawer-open]").click(); + const mobile = page.locator( + "#td-shell-sidebar a[data-hg-version-id='1.3']" + ); + await page.locator("#td-shell-sidebar .hg-version-overflow summary").click(); + await mobile.click(); + await expect(page).toHaveURL((url) => + url.pathname === "/versions/1.3/cn/docs/introduction/readme/" && + url.search === "?query=history" && + url.hash === "#overview" + ); + + await page.setViewportSize({ width: 1440, height: 900 }); + await page.goto( + "/versions/1.3/docs/introduction/readme/?query=history#overview" + ); + option = await versionOption(page, "1.5"); + expect(new URL(option.url).pathname).toBe( + "/versions/1.5/docs/introduction/readme/" + ); + await page.locator("[data-td-shell-search-open]").first().click(); + const input = page.locator(".td-shell-search__input"); + await input.fill("Releases"); + await page + .locator('[role="option"]') + .filter({ hasText: /^Releases$/ }) + .first() + .click(); + await page + .locator('[role="option"]') + .filter({ hasText: /^1\.5$/ }) + .click(); + await expect(page).toHaveURL((url) => + url.pathname === "/versions/1.5/docs/introduction/readme/" && + url.search === "?query=history" && + url.hash === "#overview" + ); +}); + +test("introduction aliases resolve bidirectionally without merging canonical pages", async ({ + page +}) => { + test.skip( + !["1.7", "1.5", "1.3", "1.0"].every((version) => + EXPECTED_IDS.includes(version) + ), + "latest-only staging artifact" + ); + + await page.goto("/docs/introduction/?query=history#overview"); + let option = await versionOption(page, "1.5"); + expect(option.equivalent).toBe(true); + expect(option.fallback).toBe(false); + expect(new URL(option.url).pathname).toBe( + "/versions/1.5/docs/introduction/readme/" + ); + await page.locator(".td-nav-version-menu [data-td-nav-hover-trigger]").hover(); + await page + .locator(".td-nav-version-menu a[data-hg-version-id='1.5']") + .click(); + await expect(page).toHaveURL((url) => + url.pathname === "/versions/1.5/docs/introduction/readme/" && + url.search === "?query=history" && + url.hash === "#overview" + ); + + await page.setViewportSize({ width: 390, height: 844 }); + await page.goto("/cn/docs/introduction/?query=history#overview"); + await page.locator("[data-td-shell-drawer-open]").click(); + await page.locator("#td-shell-sidebar .hg-version-overflow summary").click(); + await page + .locator("#td-shell-sidebar a[data-hg-version-id='1.3']") + .click(); + await expect(page).toHaveURL((url) => + url.pathname === "/versions/1.3/cn/docs/introduction/readme/" && + url.search === "?query=history" && + url.hash === "#overview" + ); + + await page.setViewportSize({ width: 1440, height: 900 }); + await page.goto( + "/versions/1.7/docs/introduction/readme/?query=history#overview" + ); + option = await versionOption(page, "latest"); + expect(new URL(option.url).pathname).toBe("/docs/introduction/"); + await page.locator("[data-td-shell-search-open]").first().click(); + await page.locator(".td-shell-search__input").fill("Releases"); + await page + .locator('[role="option"]') + .filter({ hasText: /^Releases$/ }) + .first() + .click(); + await page + .locator('[role="option"]') + .filter({ hasText: /^latest$/ }) + .click(); + await expect(page).toHaveURL((url) => + url.pathname === "/docs/introduction/" && + url.search === "?query=history" && + url.hash === "#overview" + ); + + for (const locale of ["en", "cn"]) { + const prefix = locale === "cn" ? "/cn" : ""; + await page.goto(`/versions/1.7${prefix}/docs/introduction/`); + option = await versionOption(page, "latest"); + expect(new URL(option.url).pathname).toBe( + `${prefix}/docs/introduction/` + ); + expect(option.equivalent).toBe(true); + expect(option.fallback).toBe(false); + } +}); + +for (const locale of ["en", "cn"]) { + test(`${locale} missing page falls back to its docs root once`, async ({ page }) => { + test.skip(!EXPECTED_IDS.includes("1.0"), "latest-only staging artifact"); + const prefix = locale === "cn" ? "/cn" : ""; + await page.goto(`${prefix}/docs/guides/security/?query=discard#discard`); + const option = await versionOption(page, "1.0"); + expect(option.fallback).toBe(true); + expect(option.equivalent).toBe(false); + expect(new URL(option.url).pathname).toBe(`/versions/1.0${prefix}/docs/`); + expect(new URL(option.url).search).toBe(""); + expect(new URL(option.url).hash).toBe("#hg-version-fallback"); + + await page.evaluate((target) => { + window.OinkActions.run("switch_version", { value: target }); + }, option); + await page.waitForURL((url) => url.pathname === `/versions/1.0${prefix}/docs/`); + await expect( + page.locator("[data-hg-version-fallback-notice]") + ).toHaveCount(1); + expect(new URL(page.url()).search).toBe(""); + expect(new URL(page.url()).hash).toBe(""); + await page.reload(); + await expect( + page.locator("[data-hg-version-fallback-notice]") + ).toHaveCount(0); + }); +} diff --git a/tests/e2e/visual.spec.js b/tests/e2e/visual.spec.js new file mode 100644 index 0000000000..a2d4534ac8 --- /dev/null +++ b/tests/e2e/visual.spec.js @@ -0,0 +1,43 @@ +const { test, expect } = require("./artifact-test"); +const fs = require("node:fs"); +const path = require("node:path"); + +const states = [ + ["en-docs-desktop-light", "/docs/", { width: 1440, height: 900 }, "light", "default"], + ["cn-docs-desktop-dark", "/cn/docs/", { width: 1440, height: 900 }, "dark", "default"], + ["en-search-desktop-light", "/docs/", { width: 1440, height: 900 }, "light", "search"], + ["cn-search-mobile-dark", "/cn/docs/", { width: 390, height: 844 }, "dark", "search"], + ["en-sidebar-desktop-light", "/docs/introduction/", { width: 1440, height: 900 }, "light", "collapse"], + ["cn-sidebar-mobile-dark", "/cn/docs/", { width: 390, height: 844 }, "dark", "drawer"], + ["en-community-desktop-light", "/community/", { width: 1440, height: 900 }, "light", "default"], + ["cn-community-mobile-dark", "/cn/community/", { width: 320, height: 720 }, "dark", "default"] +]; + +for (const [name, url, viewport, theme, state] of states) { + test(`capture advisory ${name}`, async ({ page }) => { + await page.setViewportSize(viewport); + await page.addInitScript( + (value) => localStorage.setItem("td-color-theme", value), + theme + ); + await page.goto(url); + await expect(page.locator("body")).toBeVisible(); + if (state === "search") { + await page.locator("[data-td-shell-search-open]").first().click(); + await page.locator(".td-shell-search__input").fill(url.startsWith("/cn/") ? "ๆœๅŠก็ซฏ" : "server"); + await expect(page.locator('[role="option"]').first()).toBeVisible(); + } else if (state === "collapse") { + await page.locator(".td-shell-sidebar__collapse").click(); + await expect(page.locator("#td-shell-sidebar")).toHaveAttribute("aria-hidden", "true"); + } else if (state === "drawer") { + await page.locator("[data-td-shell-drawer-open]").click(); + await expect(page.locator("html")).toHaveAttribute("data-td-shell-drawer", "open"); + } + const directory = path.join(__dirname, "visual-results"); + fs.mkdirSync(directory, { recursive: true }); + await page.screenshot({ + path: path.join(directory, `${name}.png`), + fullPage: true + }); + }); +} diff --git a/tests/e2e/workflow-contract.test.cjs b/tests/e2e/workflow-contract.test.cjs new file mode 100644 index 0000000000..71fca9bfdc --- /dev/null +++ b/tests/e2e/workflow-contract.test.cjs @@ -0,0 +1,99 @@ +const assert = require("node:assert/strict"); +const fs = require("node:fs"); +const path = require("node:path"); +const test = require("node:test"); + +const workflow = fs.readFileSync( + path.resolve(__dirname, "../../.github/workflows/hugo.yml"), + "utf8" +); + +test("only publish receives write permission", () => { + const jobsStart = workflow.indexOf("\njobs:\n"); + const jobsSource = jobsStart < 0 ? "" : workflow.slice(jobsStart + 7); + const jobs = [ + ...jobsSource.matchAll( + /^ ([A-Za-z0-9_-]+):\s*\n((?:(?!^ [A-Za-z0-9_-]+:)[\s\S])*)/gm + ) + ]; + const permissions = jobs.flatMap(([, job, body]) => { + const inline = body.match(/^ permissions:\s*\{([^}]*)\}/m); + const block = body.match( + /^ permissions:\s*\n((?:^ [^\n]+\n?)+)/m + ); + return [...(inline?.[1] ?? block?.[1] ?? "").matchAll( + /\b([A-Za-z0-9_-]+):\s*(read|write)\b/g + )].map(([, scope, level]) => ({ job, scope, level })); + }); + assert.ok(jobs.length > 0); + assert.ok(permissions.length > 0); + assert.equal( + permissions.filter((permission) => permission.level === "write").length, + 1 + ); + assert.deepEqual( + permissions.filter((permission) => permission.level === "write"), + [{ job: "publish", scope: "contents", level: "write" }] + ); + assert.doesNotMatch(workflow, /write-all/); +}); + +// Execute the actual event planner: publication targets must not depend on +// arbitrary branch names or a fork running the reviewed staging workflow. +const os = require("node:os"); +const { spawnSync } = require("node:child_process"); +const plan = workflow.match(/ - name: Resolve trusted event plan[\s\S]*? run: \|\n([\s\S]*?)(?=\n - name:)/)[1] + .split("\n").map((line) => line.replace(/^ /, "")).join("\n"); + +function runPlan(event, ref, repository) { + const directory = fs.mkdtempSync(path.join(os.tmpdir(), "oink-event-plan-")); + const output = path.join(directory, "outputs"); + try { + const result = spawnSync("bash", ["-c", plan], { + cwd: path.resolve(__dirname, "../.."), + encoding: "utf8", + env: { ...process.env, EVENT_NAME: event, EVENT_SHA: "a".repeat(40), + GITHUB_REF: ref, GITHUB_REPOSITORY: repository, GITHUB_OUTPUT: output, + PRODUCTION_ORIGIN: "https://hugegraph.apache.org/", + STAGING_ORIGIN: "https://hugegraph-oink.staged.apache.org/" }, + }); + return { status: result.status, stderr: result.stderr, + values: fs.existsSync(output) ? Object.fromEntries(fs.readFileSync(output, "utf8") + .trim().split("\n").map((line) => line.split("="))) : {} }; + } finally { + fs.rmSync(directory, { recursive: true, force: true }); + } +} + +test("reviewed Apache staging push targets only the complete staging site", () => { + const result = runPlan("push", "refs/heads/staging/oink-reviewed", "apache/hugegraph-doc"); + assert.equal(result.status, 0, result.stderr); + assert.equal(result.values.publish_branch, "asf-staging-oink"); + assert.equal(result.values.artifact_prefix, "staging"); + assert.equal(result.values.site_origin, "https://hugegraph-oink.staged.apache.org/"); + assert.equal(result.values.historical_origin, result.values.site_origin); + assert.equal(result.values.selection, "latest,1.7,1.5,1.3,1.0"); + assert.equal(result.values.latest_sha, "a".repeat(40)); +}); + +test("untrusted repository and unrelated branch cannot publish staging", () => { + for (const [ref, repository] of [ + ["refs/heads/staging/oink-reviewed", "hugegraph/hugegraph-doc"], + ["refs/heads/staging/oink-other", "apache/hugegraph-doc"], + ["refs/tags/staging/oink-reviewed", "apache/hugegraph-doc"], + ]) { + const result = runPlan("push", ref, repository); + assert.notEqual(result.status, 0); + assert.equal(result.values.publish_branch, undefined); + } +}); + +test("PRs remain unpublished and master retains the production target", () => { + const pr = runPlan("pull_request", "refs/pull/472/merge", "apache/hugegraph-doc"); + assert.equal(pr.status, 0, pr.stderr); + assert.equal(pr.values.publish_branch, ""); + const master = runPlan("push", "refs/heads/master", "apache/hugegraph-doc"); + assert.equal(master.status, 0, master.stderr); + assert.equal(master.values.publish_branch, "asf-site"); + assert.equal(master.values.site_origin, "https://hugegraph.apache.org/"); +}); diff --git a/tests/ui-ai/ai-enabled.yaml b/tests/ui-ai/ai-enabled.yaml new file mode 100644 index 0000000000..4ed54da7e5 --- /dev/null +++ b/tests/ui-ai/ai-enabled.yaml @@ -0,0 +1,8 @@ +params: + ai_search: + enabled: true + provider: kapa + website_id: test-website-id + source_groups: + en: test-latest-en + cn: test-latest-cn diff --git a/tests/ui-ai/ai-invalid.yaml b/tests/ui-ai/ai-invalid.yaml new file mode 100644 index 0000000000..48dc01a27d --- /dev/null +++ b/tests/ui-ai/ai-invalid.yaml @@ -0,0 +1,8 @@ +params: + ai_search: + enabled: true + provider: kapa + website_id: test-website-id + source_groups: + en: test-latest-en + cn: '' diff --git a/tests/ui-ai/backlinks-render.test.cjs b/tests/ui-ai/backlinks-render.test.cjs new file mode 100644 index 0000000000..4cf6add55c --- /dev/null +++ b/tests/ui-ai/backlinks-render.test.cjs @@ -0,0 +1,54 @@ +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const os = require('node:os'); +const path = require('node:path'); +const { spawnSync } = require('node:child_process'); +const test = require('node:test'); + +const root = path.resolve(__dirname, '../..'); + +test('six backlink fixture renders five rows and one expandable row', () => { + const destination = fs.mkdtempSync( + path.join(os.tmpdir(), 'hg-backlinks-fixture-'), + ); + try { + const result = spawnSync( + 'hugo', + [ + '--config', + 'hugo.yaml,tests/ui-ai/fixtures/backlinks.yaml', + '--destination', + destination, + '--quiet', + ], + { + cwd: root, + encoding: 'utf8', + env: { + ...process.env, + HUGO_CACHEDIR: path.join(destination, '.hugo-cache'), + }, + }, + ); + assert.equal(result.status, 0, result.stderr || result.stdout); + const html = fs.readFileSync( + path.join(destination, 'docs/target/index.html'), + 'utf8', + ); + const block = html.match( + /

v=vfM`fvPSF@KHOF{Q`ut&0mLH!zJo@b$ z_y5Vg{??1*kH*udUYvIlB0mtIlf-iLAUax}t%M5B9M9^I%hc8#m8HCCWf)n&O;(yx zwlYT%j3UF3`3uf8mU_TcN)WV~4rqp1G*V~(@pYXkZ;Y8bQ=mPBtAc_tN1-m+aI%%L zZ{-?QXVJd;dim+EI^X+A>z(he&YpHIpL@wTIF#kGi)tDNzPQ;Hz2KL5nIsV0NkuOI z^-?zYsHD57>R}<$Z>pw~H)94mYMd6pkZB8^l)TC zVjTp{pxxfxX%7b&h$&ZnU4X^P_Mq1t@LCaKUT}kWp?sjMSVC(9a&}s%0!9CeWsn`c* z=vRqaG^aYH?3eR6tIj3XX-UWGIkJ?SrJ!xbcqvdB*;|YP6v3}jdqN`;7viq*3O!lT z@VN#TerZ$EDOx}p%JWOdz-=IS0*~m%juqBSDhZK-dUm%>iwak}80#VVloo ziUa|$A#5n|A?Z$$qM>`28)U&T|4abhVm?CyJ#M#a?^`8=M1#QkKw>5}fiuq{}4i<>tSbU0PUs05AJVw4#&&OXVcHm7f;5^ zlck@Oz-})4N+imT!ouNy@{K52E2aT zZ)sM~4I+&fcOg;RC|A2-mFnb)U#_C<;+E0$jBgdL+bjycoXt+J7BBoXMein@8~qx5 zu~XSgojv7DA9(C(WMV>pld`d8QV_3sLn;24jGez>;gJ;5h}0`NTTI5svx_O85?YU! z``y;fgT;%>E;mW&JtCjE9$huveW1Xij0^%lQMl8^GJFrI%WJdg2f!nNSOd-d@5L7g zb#o)Dj-<{UMDT1#QdUFIq&ci7P26k^^OP5lNq~g4;T6*)k#?cV$0%AU#Ojjas7lJy zIE`3E7xRV-+#oJQicneaXF4*vi(s>ED}ZDqLe+FyHlFsNWO@;V z){0h9&ekyR%!R4-k+PUZc&bH`?Tvk#`wW=4bmoi<2F!xEj>m`cEEK6sB>1|OiqK*+ z!e(&BZ8NqXRS79n%3JvrLA7EzfF}%j3*f>&jkzRE9Nnd+izu32#$iBrGQfZj9*m*M za~O{lSm+4odB7u+B?ig(%rxGP2etg!)Qtv__lI{De!NsWXa&0$Zs&>p648JWIgiX~ zow`h#NlOf(F2HaY=FO|>txiU5B1qt*z+4?|Bb}HUCuw~#9)7T&upAcPdM2nUAV7)r zbQ^6qd6*SiNHrXe!;tj@Wb+~&uQ?rZAR{ivi+HBXvbu-F7ozY4B@$9PB2Hfo-joL zwleI&u)p7W?={ZQ2_a-8U= zoqm3K_J~&+I!cf@@~|ctGaR(6;SXyQZL45djjAdVCBz<8i$y4AP@0kK@QKT!2^_*v zR?*&FlqSLXm`#m>pvv+IhiKymgh`;m(IWb#HX_h9g;#qGr2xAv*ueM|skm8bLjZq9 z71$nqyt;O~`}*76H$PZ@dhWNO)i3QzRclnD`S4Lxnz$HExG@4!G)>uwBV@6~_Q+Jc zc~P>VQ%&8P|7ZmtE0q6;Sc%9aMFcW%-|h1Lcb@0t<8G4+roF4}S!e4YV<$RHZ`6=H z0u+S^juoK|yV@eac5(3Wgh*#pzs1yd&-l=CT8wxLu~7`Z;`Omy;gX0(YA>fK0tJ`0c}`d6dOH#_ zmI!@z@vGU=Fae&kvi{nK-~PjY`J)g2*}L<8?>B$*l!|-inI$3ZqV@ z8SW7Vr4+2I?IT z7V;6!3%*e?TRu4*T}%dd_XqcfoqaD{Fz6|P#S3OKOd3Bidf*EPydE1WrCQ?hM-Y~DPm`ber3|GtRMDjLAXODgw@uj; zw!Z_EH)ED!Xe$G`*lm@FDvK{LviOC--sb zo$>--;(~5ii;+*FMmFgCa{ z3`S&w!zgsBLy5!$lR~flHR5aqWt=7|&-*zjOA8JX07)lSZKsKxEnspO%2DAk@A3I7 zp7(R)sMd6A5a-E2KPV45X@L*5rq0w(=rANfInh1Mj-w$sWdzTas$ToQ9t5g%(|_8EXuih&^uYF*x7gXzExhZ$+at0(Wc%&f?2+^O(5tMRXs zMnVBFb|3ly!i?vDQJ-gEL|CdZLnmagnmrGEo#jAf^Xh*%XU3@R0FD89tfzseNi{h1 z5>P^wIOU9&BvBk+Ig>P3Yr{hunGtiJRaz0jxmCKf-mrd zl{P$>HKHB3kg};D1SkUU$gr$s>PMyy^i&CV9 zt?N`fE1_FT6eAp>joDd{Apzg`VytNe=6^s)?w{aNSQc(DvlxG71%#(Xrw)}_`4EJU z*{bc%H%;-nOZ+>UWY}1WL$ML0+;f-1D8>G>38G93$( zBUup`LkTe`xf_d1(S$1_zYM6$oUt(P7hUx(U%dS5`TFwuoevK0ez<*b|KjMY(dEZ=6jjS)NxJSentc4nITN^MyK zASMa2CKvaZhG-Uy31svc~NVYX;T|HgS&f3fgclNmlA7gk4Kup{i z0Xt-6*o+~Y7=a}@>}i3x+Q`SeCd-S9+1dHU%=>JiTVAe?W}Qne$uWNmfG8C-RZ<3` zQ+rpdGS0xHq(l>1bEPRsce4mcGeA$qO`p1iFT|Cp5-hZX>A`pzQ)_*$#yC}`8bToel*K`pg+mv#pO#v{N^BN3NwOfRKfwo;8M-#S4_@LERykj0U#Ko?dj;evX5 zz5n{Hw}1Bi5C6pv@4k8PyHB6}hd=$~^S}CZ{QQU~&VA>A5>xBssg)>R_vvt4Y-Js+ zb$~$3Cv0g$B5DOgl?3NSh!%`+$W=j!LSwjumvB?Y9vCS3qy(1)_xd;b>)~WEI$J)z zT0WhvPk3BV)|8L(zi-VeRXIuv|5w}_Y_H^cU~QC5m)rU+L-WUhDLi)8jAO)2nss z{AzkRogeKEUfb>88E{9C4zYOL#IcMDxC8UdXwq#bUmVdc8pi^^g(wy1Y@Ave-l1Uw$Wbg_!40xu&?^BIeZ z1w^!=c)A&OfDB2l&f7o>qy9O{5w#Tok;#^TCe;B=bragRh#Wql1QyAqCtt(il1c2< zAVhULU;V|F=j$N$SmdG-Fg%#G(sMboh+R}T%&}ur7;w&TEU9BuxM(qxQz91T0O=%4 z`|z<{jakaYBYx))C>cA#UPo&(D8LY$LUBtKM~uN%6Au&l;~rWxmCSI^!KmheHP54X zTma-i&&4o!iz@mnnrWdop}9DTX4oPv0Vbi7CM>;#B2%TuOstY>I*bT=96%A?S_7p^ z6h;ryaU$iAf*j(FB-Rgj7L;uMkVawIX*Vsx1`?N6ZBeu@jUe2#DZvjHIe=4Fc@HY; zSjYgTLvX6e(kxVD`R+%`H*BDb08m51g^xZ_pcJH% ziPMk^6JP}$hK?6tB*Ro*vSICcn`&Y$reH0Ts>sbUdaNYAeZK%*dlzgCugj6pDng<{Z{7i)!;NPxl*c?KE( z3pQ!Q6psedNbyp+$WzscGfdi$e2)vsZo6**2Cpeb{R4&eeTpkoAOF8~3 z*tV^6@nZGGZ`R-b&suMPxH>;>Pp(9&r-(NjI_juRhOA-*ZC&ah%7z-eFjO1>&c5% zf2%#*>G170ic^J%Z5w881|e3^0M{YFfb#y7>4dwOm*df5ay6gMc?z5xPH0NF-S+5w z{eXAofEC<;|lff8O<+rhlI;uV!M=;5; zhm`PGaTc}=NJdx75g(%D6#>|THisI=#WFrmr{9Rd^pc_>AZ1DfTUuQF(N`808RPZ{ zExC%fX;U5J9_SXb{mG_MDSaR#wPiSlbV&29?Sn<13a_C+F&@ zn!gP4=!swtiAynXGNe*>Uo{XBNP3sbH~I4G@!?OdZNIjkahy$|wOoA>#ypTFF#Rt) zU}ql`aOE`B*TS&^C!T74{|kWws!xTVb5sn1*HTMLN!uex)r#WQ0=gK60^4^EUjM@n z-}$2-UVr1}@x!xU{!f4X#b16jdj71lp3@;$0ZMM{6#Worl7S5y(P&zuTYwwV9IIQi z#qP?ND@BL~Z#+J5g^x3jfaPL7w4FIG>+>t{T( zoA8xi@l--V^Y;}l>uOjBDg^l#MK*dwV5}8rrG^nBg1|4wh*uvbLq`CU(Lr}O=pGI_ z2fTQb1st4DH-e?0&Q7{;5fg=p(Dv>&^C%*$#X6A!@DBBt_Krw!cDU^C4BmccJsi#+ zebJ%k;=#hzi?hl3X!i7A_|{JE7MEe*+SJE*px{!Re-Wg34pjlMIUvtt(b%VJuqvxs zoD^U)gPsxEfM$t1SI4XKWpC+|aEvpd<j2RTy6y69?^!0{k!8} zO4OAKNw`**xwa1qX7iGXX0nNpYwQt3)lzt0U)-Rngl(XEza@k0YNUiimDdj9^wJ=N zA&<>`YKvx$ep*c+!jFk=)pZe*WEb<8LQ&IU8iQsYq$Zw92{xsoAPqD{?CW_f!WYA6 zENp0?!-0K^Ni4U93c|*NWJsJyr0v7}temns#zfKkMx69=)tuz$jq$zThjt`-6y}F@t9Ka#kfy%(;j|o5-jed%WGZ(wTl!xxb2o}vt zn(ZLOi2#F%f0bj9G^R7%3<#NBQ>E>xl!iL?90-DW5GS%>pjk-_9)B~z#&W!jsYi1S zIjkry5C@hRLt`ckOBLO$3hJq7p$4UZ!IKR=@jjM^GsMx`2&53K!V}$n)DWX1E5k|D zVG|Tp-MeO@TjqrzaZIE8bS8KhFU7DL46%kB(@U3z$=8A8*P6dwoqk05sKy#c;sL54 zwhgqr_EMwpd9-l178z zQLaXj!UOlI5*(WDTsJmAH~lJHMyV=Kt~DqYXZlM?;YSdJkx?Z|TJ(d$BGwCOGfE%< zogII+cqcn!WI7c1qoOJyJnc(%99s~!eALPpa`^ZE--1FcMpclEPM0fC2ncw#@6ZN^P|V7lgW3l-F|=P z;P%epjmg>3>GKCyBOWZAMPjg&_X?>@!ifXb;Mk+cO9*&Ks!7>olM`?zfoL%V!9qO9 zLwXP9G+ean+=`Z~V5F#k!VOb}v0*-=k)2QFW;#HF&udP@%4jtvL@8B(B|+KF7%)82 zX@p*UwZ3+LeebRH{dd=2{)Su3nI?q~#SPR16ind~u>QD3(@68IjL)fLVoX|OTM|8! z#-Z@pS9u^9-&FIm20t!4(i`$X>Oh#o0aKyV^<&!Wt?rIXPl)1L7NeqMu^6pd#wPy z?SV8gz3FBD)IY6ZmG|z9L?&IG)s`fR80?w^P*@;Li+^J)ipVSxPuHf75NRfbX+LVa zjLe{YwOShN)G^*k??;GubV9S*$@0r|lNjO}<+6SH%x~Il^BGcXqDcZt5F802{QVIh zyI09cf~v>_gJ8;ws4Qctn8;s}1J`N^@2_5}vBXyH>4 zI!b0-x8<2vGI+`m30jcJ7%UyFXfsMVKu2dd$XUxpw)P@Ph=~UFq|gD#nOM=;me8ss z0WJ|<_@lOXC8Asyml_tgWUVnmsCWZ}n-S~Sk(Gbpf-GlwtfBemN{`kYg_g=p`nf~&B`Sln7$H${b&${ag5f;l( zMnlM)zlbjRbqqVR$P|*yQ^22BTS$WR_jx!t^a2VfIcylqOQD%+8zE9K_2zNG_1=E> z_MpAXP2gv%r&r4tbWFlvfxY~#L&a29V&#;N19zAAZo;DV zxwnyL@!Wv5p@yxo!(f*5S}k zBOrl_%bgR7QoG3FAXpS#sG0=rr75)n{|Q`XDp-nnKKG+Csh%z_7Hbx5%fiJIE^=D$q#XMTfWMFAoGCL5J)!c&F~XIm#@i3HJsR~6XE z$Qi?7@^~ZEjP(q};sr6Kxr0f=r;gYojm1GP{=;xn?TQGN6wIGWgpW96s>y|sQ;j3w z>_`=e@HY8DDydm0DP9y7Cn4Eiw5JIfq!AS1XbHvG3Q_OgDvP0tB{f(DLSylc(+Wz19|Yj3+A6 z_#qI&_)^XhZ*DZnDdvTy5DUIZ#5k5L_<;66S)@dT$jwd%kzKl3VZ#eLP}7voxu1-$ znA*hRZ>U=A_7Cpv(aRO=IMF0|a$2Ye z{tB92Yx(r^v){dFopABmE|^}aR0|ND0js)0TF2R};dI9da^j2%QA2^Kf}~j8Vi4f9 zc)rmxnt^2F%plbOq*0qX!=3vdzWt4V{=xMhzd4@GKl#P)zWm>RbMfiJ_I$#H2^dqy zVjb#A^gvolheNUy-~6-lt6XTsmB@%Wqm~MyL1<7}B5<*(q6PWy4{Wrn6hbEu%){`^ zgw_Xp-RnD@edsS%yzJ)jXnn*RI9nZ`4W|D~5s&!87TLxluuh7ZiM!hJ6rEQ5k=0DEzu);`$oT#&jTC$JC9&a0(&t6WJCoArO9d0u> zrQ6~?LjVME8Ptnc^tlX2t$LQOAa7btRK~8cn#_p-#alQmEI_8s09SZAd!4~xzTBEG z{WL`)N@~mJ$3qVSl0&RlXBAT+s{$$`DdJ-lQU$?3%_`Cyu?qvTX{prQ@FXoLa|*nQ zVR=cRpPGD1OBniCO^KE=1sRDY(Pr~IgpBQM63O4##i1hX0awc+p85Sq4rSF_`WU z(OWlp^-#irwD}!sE^LJdr8~MFV zhgO;o*mkq9VFu0@7Uu?tQ`T}knM@^Blhjz70}-O74v7&}nXzmv>Y5w9xb!w+7)N_# zRu+2(K7&6PQ#|Veat>O^F^5QEN?HO~S!Vz$JN5Sv6LE$Lx<@r)8JJKbneia?jamvTVGk9HIrJ)&dH3Kt{<8fQ3@n_lMa zeBi`tqM?X2YzwngBmh-Fs=vk3M8JWqixS9FN`Mhe$Od-8vy6f#jAs&4X~LC{fcY2= z1_M7h;GZ$E_O2j}dYFrJOTZ9%2N_XKTaip)1O_%h1VQ0yoVGDwNYJ!Z&4hvzxu)Ty zS2I#G{RwxwaQ#3cwTvx+3Zoq7SDQwt=9PjIx9q{Buc23cxT&d^afIAvy$$>D)I)}hN^6X86doLcLzsHmVw)LIf>o_5k< zLc=2ZxAxQ<-=)GUQ#xC`hLd!&xHvRgpYWx>>FUP8a({cxbEoQs2#qUO1*@)?Rp{U5 z)D62tE$z*u(m+C8?9ON1tJ&ae);)98ZMlV=`t2bi_@o>6mf9ypL-?z0+C_?+D0n?r z8Yvc$o2~3rt7#HcfCx_wG`xRobx_B#iXcfvQ)t0S2)A4(_+6Ie%aSiqKf1)o6H0)S525W ziC~X`VW_j2=Rd=s>IntZsj{W;PrjDs$N!aFg(=xt@le|Se)kS*NYmBj`Re)Q>czBm zvVQeZv4Egtw&)#J3YI0if~kGvuPh8je_>cFmknBNx7i9wWm$?%6;ilp>d?-p*WDZR z4tsp-Y0Y(o#9hQ#3|-5tcITcWRG(r>s+r?c3Xj`^&FC<;%27p5<#z&gK`B<>}twHSQqglZ?iQ5-lHwrFg-1nAm6( ztwJTO*^QHtrgD7vXf{1rEUuP3;CFw>{IJbkbbMV{h4c?o5X(8wU9BfmUJt1MtpQ55 zZd0GtC{ZB)oSEX5m?b6F=a(fg7_$bzI&OELZ#FU~Tr5XRK3qfDz^-!WCoA0I)Bt%& z-mom?Q=$n&8w1-A=(UTSYU9-5E9^sHhP;efjtS@t?LZ&H*svnlOo~YSA88be1141f zLI~g)K7rBz;Py}0V<7%p{}`H;&g)K8mm7*{dd({y;=yeF7o-DvIV(VXvqneJ_v zND`8)g$k|1Yg9&xQv=55nG^|29xR3jU1c1M_5EytV+`jrJo4m1JEIwveowin|JZ zcc_gZo3?Xuf$iDsIju1)6;OV)?)Sw5SP(jRat!G;Pd+2%g1etX^e$7}hb+<)k%=xQ zmCI$Hr4HAaGk*YlLWUl9F(b8RDH;&146wQ!S6bRif=$>OkozZj_Y)POW+G^7#H$~E zbb{l{f0$)eJyA7IV{aZdaJ8JKlvV+^VWP5T{*A`bjV|_1$N%X03e4w0uD5gk%Gc_5h?zsrfM1(Q8qa$z_DpiWGtfA zwpw73g%!hjIES38g0 z1A0e)IV~ieRnhUPGoAa{3FsLo=^6l+^b|Kd@N?jVV^U?DzX%2#C#0kt8KjCS|M0BA zMN-k$uU%yt#q6~R*_5Nw$XQi9G>kN01Xxlr`oUVuf+S!7$@(sRU`&B- zL9HFgHWe?r?m+C~cp6RlXcCpy2B?7^pygk2At}M^jgPLdc_{_g6F=dO=^G$0l9xC* ziWvpGbhCGQ%u?q6AL6$kVsQ7%c-rMWkxZk?{_WJS1*ic*$%Q&TVWd0>3 zl7JB)(GZq8tDr||!DU2czA=R_G#^OrsBQV;YTs(qR&D z_F_Icoo($b2YaoZZLSt}x7MxxVw)E(c3Qp(2p6Ccx1i8ZaYutyk$ab!_Bj~wd$H3+ zZ#3hIBQLr)COh)$FsBA2 z3C1JFiqiaetc}bw+g$CJA4-R?91kUJnY|eQj0V{jwKD;%A$Mi7XUCHpSsc{(z=aph z9nGk1H3LTeaXF6H1|3{$?O)>(f@}1&V0Oy}m@vYPJ<`|<%bn~^S}*!Q(}rnv1Q;-c&L|#1$s_wX*tMA7j8s?uP_I=v6ugmZg6YjlAQlf){`rd4P(ioqeUQmjaSDO6=Bi;CzCL3{_hpcw=ZbZp?*?s=9v&Sb! zC_|-%0UbeFCU{y4So`5_u-v!V-zG`!+&??K-rIlE8-&J3OP;;ne!Nql|*q;7w>xVN|eU;XIf|NeUx z+`NM{}=0gBQ6O0V4=L!DL!{;*mLb={8&a!_>r^!D$905&q&Q?zU_+i=`=&HTW#jp zsw&BZx)#IO^F~+r@LN>=kdD`oU9d?2Rb>ZIb1YLk!2t7OlyOz8h+#)jxqgL=90nre z7EhSf5KQ1iOTl3vwc;Py+~b&5PTy&7lu!?H9En3%`Y9m4OH9{j9MzD>2(zr3*!d6b7yprRz&c_)rDZQgJ4hw+BHK;}-8zf)dtzDyyu59f5>PsPr1mQKqxs z;DjA;V^yJQZYWKJ9veX>WPGFXV=H@Yx=dz4Bq)`=2H{MD!dbN(^lPqUIg()P=%5+B zNQ5VI6-olsA!!T_4~2nOr!q9uvbuy{u7OYmLMJpZu!I9Dt!;)qkuy2LYZrQ9ZZTof z6)Q(ur(3=;mbbv9jI(-3u(RDy&=VQ?wNX}K75C~QahT7f07Cw-*D+3ktR5I2qgn}c zvcp-!I3Cwo!K2B*i7+GF$&i<5IdtxaFZq&+q=dcmJZz%Vv zWm(b&30B%)*yacV z-h{B-6?bBu&N}zExjznmC8fGKWZIZX9_Rotd$YxGqE&iwq{^1xoWX(3d>tfhEQ*im%?5#HLv>%d?d>q~rS|2Y0S5tlRj~-vnI&Q^0HGEK z@{UN{t4xtvCpgF`B^Z(Hq7Joy$0>K)`#07+z)VO_xqW5IWRd4hy}Np_&9}wovvGUK zH_=Ap$=9>#@#V$i>o?xMas9P7-u%JgwfjfU9$Z{J=UtUXSD8h`_Eh}BU+wS=64L^R zo*{@8k*Y_J24UR^X6dpPN3oph+ohB@%*N61q%WbM?QfPZX#4pR0Wu5(O6VV@AVNFk zgt}SD6wSa-GYc{J2xymGM50lV!ee@i)sx@0b`QJv-&>tNYhN9~A+~SWBMFn6rV$lb zdwzpn*W=9W)jU8VvNSS)Dtawgp3;OI#&LQL1!$mnCl)hynjIS$#DRh$-n2{mz_4%D zK4uH(-J~{vF-~QFt|JSdl&yMIasUKQ~|7!0}%f~+Q$fiYL>K_!w zMvV%!Km`D#Wk>m#YP^PAol-k2Eg2bF)V)lrdYEdi>==G9!WizfZVuaf%%exElhOLc zWX1PvuQCHi!N9Uefr4u)lMLXgOwJ=DvP@6Mp&bPjS(JU%Btt>!D>kJ}_(v3SQl=E3 zdme7}4+q`74wEhdA!1{HJMH4&rX&X)Berf{w?mk z^yOWEQY4!?Mz+RbixaR7$&Sz#%kgYEnk~oFE-M&IZ(Q}>+G`DW+PANFzV&A7?|w`F z;>fw8kQP-w{Ac>PyYBI|9Io5&EnGk|`m)J2cB#RFP_j-*1Xw5lc#D?fK1@uA3nesC zR=~glYxDiqt=VFu%DBHtMX; zWjj4oP$&{BI`sA9t>HjX=`*OHhB|Dqw=*|YmR$zc_Qh}~(!4UEm+W2ST#cj#;y?M? z)B5SvEnA(;WZ2t}8h>)C)$AIE1ga{inkHk-*2{LJn3|CZ%}X)Nbu(`8^MOF*6DE#= zto;Oy7kQjfh^a$wEeInC8tycah^)M!1g(^W5dOHi)Y*dO)N;HGpUEjHr13zY{&jgK z?KsDnMro`k*Vh+Q3>yi*xd}GJC=MR0trl`9k2M0JlN%jn?_#Bbz1~H4fG5~&bFA;M zY-TIQc<7Xk9NGqLm1BBD5c*;X5#ZU>TeQdm11TEH)&x6fVieGn&4dc;I!nZEn#?9g zH-XkEPn3!eK(3MTs}WCVd2E3BN1aVYB@XR1ppdzOM6J@%Nb`_|ZjO!3tl4Ool1Dzd zbYRqgM7W(d+9e9a1{^k=i4zkjnINUx@|HP7Qa$Z48>_+1(N03D#=3qUnk5o+u}T;X z@{}E@ZEd(N%`u75PLGJ_z-Xke)ewU zS`pL;OHr=yr~{{x7M->TEeMK%^;H)%IpLJqASKx_uO(A;h!X|`TqFHz)qPhk`T{#? z#t1NGj89InsiH|P$!X}4;;um>p|tLbN62k2NUL1Z6Pr>rtR)YDUNT>jDsS~-T7GT+YVaOUn1*m{sr<@fqLz9iL7gA6=Z@ zyLt1y>$mP5?%z0m`S`_)FUO-(O|EQBLQEJ8Y#SiT=fvoyIi+S&5q;weTcc&!L&L@g zYOnI_IMfQB_+l`NXd1=&sGB#DW|B#$(3fL7LER2qi}8 z6*A!NoIhPZ`LzAk_d9prTYYiPO9?2Xx3d!sPAr4hFs`r?{Z+i zWciP5(YlF^BCH^@?9EHV(9u>ETnaRwa+uE;@J0igFJ8Mtx4&qe&HMd-`u*O&><^wV zkN*7euzkk$LhmwQ^x$>lh38}Cap^z8P{Aw zL?H?Ti*t@QX)tpv#i_bQBfBlNwmRmQyu?TfRdF;ST2iVwHY~#yOYoaR#R>qCqJ@9i zy)qj-q2?H(#`Ty9om}qVQAwMBAZb!yv|GGi^>WPUzqPx^OX*0g_QnG%LjEZ*f=hG7 zmDMPz_wW|9n zRY%51#9?Uzz>O4#1T^Lh_UON6dLTRUB8c(@V68va#E> zBg%zku%sa<+|Z${f^9(LA-#L8$-e@}g=ubX*@E59oSBUD;&Xe8vRr(6Pqq@0nMEjbWxVk5b68h{-C&~I(e*5j+ylgrk##rnc`)Vo=cOOA|nOVlox1*WTP$&#E+w3gA* zy3-cRl%Q*16(t$L6gIM`;`|h1Sae&1L2qx+z1HK+F@hnJm@EwNjUw6~UfI)xKCBvp2`vyDl5`+JNI9gEHECNw))+LvX| zy}{ssAX{7=uNMAk&PXPbsE;}QC;3^}T>#Thd5*ch*9B0L#TOr0oafD^lhKTKSlI;&Ieof~&+E9*xT^ zL(-;>$Fd|e+)Hp=Up|IhM-cY5s5vGB4^?Lrv4^p(sA4b(feVzFALs zyqj^GB7y}fAkxcb0f0pNb)`~_>t3uK_`Lu)XJSK&BV-@?qR%I&6hdKNI6;&nH`7!q z1Ag4%4V% z+|+9OZc6ZBA-EWZHp&qU8|I_l8UYq3iu^+&a&Q5BO+-;Lp@q97GyJ%+$1xZ4w4MHvlC3u9$KViy`k!#JLZVAr91OO+QY!>^fE zM1+2Ym6J)G&taJhBUOM)0Es&Y*pvr)@u`(kRYn!T<*b!VPVouJEai$RZ-O!3BAp@dw)_IHhtlP=vCDUb2d^5t|dqRa7L>!lu?%K(G6mw%`M+xU<2; z3=|YmBAacbH_Lk~JWo0>$)B%hTL(Koy?L>-p8Uh<=-KD9_62X&w3PZ_B8~-Xm9!0_ zoy?>P>7el+ywfyOLrKf*nqTTxe*k-06^1El$YD@(Abg4W->~qM^ccZ54#?_~L=UlJ zO4)>S8nG2E6w@HZET##Q2x!=w?YTi*WkbTD8I)%i4zZD(tX*B2;R&zLWpKx1vNu{c z-e~dV>azzto6%+=bTnQwiepa5b4h&{kio3872yBiB2@t<)`398B1y9gG$F(;g_V7j zH@v7xeC^|MwB*`g)5$Xw!SVCcplET~TX2|LEoj zd7X|BBNl1vtL5^Pdlp)|cXpTFxv#8j5fa5oR0lPtB+OD+o`^_N(}$&NAPj5+V=%o&QOcz> z4Hvd&{O(YOi4wD+sLHFA?Tla>m{k;{dnqQqR9(}95a)+wx z9+tc7WAIle?ZuU^Szetj=I7%%13U)VT)3mPpeY`3!7VykS>{U~s~#`c?78QH7R9MS zr?a*0?659PzK)-}}+K@BH`g4e$4VyEC}_ zcZ=nthYX3lf4$vjgwD&o=rEy=g{q9E(}47!UOZqc)07c4HybA#yAtx&kpYj0b$AEq z6>ElE{YbzUt@}8|LYBq8`IWJp8u9)}$L7Tn)6GxC$&o(AHfb|b1uP6j{7u1B!Q!S0 znJ$GwlA@KKO3DVGh^ph}aLp$K=$lOg38SAx3&(iUv5*ky@x9{+63%mtE=P3oyrd7Q zHhT7aV6}i7zd|R?P7Y=@T+k9`Yj^$_kHejLOXhUmc?fLo!QjIuaPl&pRFr|0OC27S zs~mYzp3xJ~m|`IU_2f)r1$fzeo1z*S{u$UYCSlIQ1A8QBJL@1wZQpnR(vasmo*|`I zN+T@>0Yd>eIQ>JCQjm&){31t(JCk{Kj(~=lgC6II4$T2h6{naQaCOr9PD6?qofF$g z#}Q*kr{xQ8b<`#pR#l3|#x3}3O7Q`^myvkw+3O^X^&4)){#Csl&1OHQL9l#?%X2_Ke&w4L0F#IQ0rmu6@$jwtZKx|3w0?;@Pt9VHg&WW8X z6DIaqF7RtA?~nkD(On99Wb=*A@|y8-Md#Sg?0DOQS9ml4CNN@jA!fE^bYkW67|yAY zr1p|{oe=!`!qK?z=+YEfgaB#u5tu4CRCK~7JeLKcxfxYcksMaWFxWJTwGw;DJSMfE zr742)2y)C3@c|@^nh#Kc2>wV#TdTI_qNGWhl3!6eM2>Mm6_~}#=MFNx=lI#n<5m0d@-9{uKL`>n<55{vq4>N`wMP^4l7g2CPha2 zG;*BG$P6+V$Yc;DjK@*b(8L9Dvo&h$BnF8`nU6t0>%-mw*t<;XPi9;GL z*F0P}ivX+2hD_}#tXKflHSj{Bwj`4tX*~WryIOtyN$*=f>%8{f^6GhK#$zYSEi(s~ zJV0NU&{0dBSaSVBvAlMyaePbx?BGLo!nRvYHPSd3*( z76IE+ULD4pz*^sZd;R|Y{AhXde?AyaPv*Sfz-EL$an(@3DA2TehDf0U5K(MzGKp%W z*KJSCCYctxzx4Xr#&=aHR#i8*s6u+q&96<<$kVXYPV79APLoxVKmLM#%aK zP>c#NBNpeFBT$=3Q=1^ulG>PLJ5u#9I5d5oLXC!skSrO+!DCZ&nR&5;KyoJ6`WGq> z;glxICXRnpNv7p{gPnuz!@aGo?Ou1*y7kR#@BOO}coKl?^wUcQ?bF%iY(APTCiB*m zS4+@v+G~jnCef)RMl}})1teHZ&H<;<67goOR{i1jo!75_?}NKP`A+{}@ae~2fAJT; zdHIi@(QMioGM6cxK?%TYI!_bagXTns?A;EjM||smQgc|6^Qc;U(U5fr4-+WIXNV| z1)p4UT8T{-0)H={(S|Hir4Iv|jLu-#-5+-Nw8N0Gq(YM~Z+kjD(vP%uPumd+4)ke8}#wffw3LcA{8!(sQ{-uiC8y}z^g`=j3ZiO*c` zBbO_8F2N(v(Q0R~X2!(KP|J*{qganwQ)@l7rAyCDo$&TfWZ6uT%pdT$&l@H-%SDy9#Vgq8!|T6^kumw5TZ0Duw#J_f8{I~Zj74*Z4(t!`9Z(k?GNTF z+MX*e7#bmxLnC1}V`Iau5;L;WP*SF)M)8zt!ay}r<0wcvyH_!jEYGDV1`;T&Vd&YW z+cn)`43rTaA)$Rm&xK&A6=0<0PEKsh#K{KBi+emk!l1Vqu?CJ+NLGx|y?u_ja`BBV zO$CwT*wj(J6Ej;xD4pyj4yBP9b4eytJszwg7#v*TLOV;d5a(!vDwY{jfddaz7EJVn z)Qeh7;TC+@$z~s|FfQ6+P~^Z+j;O*{=P&_d7cb~(I)^ms0NI*+JO6OEraE_yJzR`-(Y=*<2K_?j(aN1dU$p!4e{x)mS}gcS=OIA)$) zn&WvboKQ1#VeX(SH;C#TWPu6+-bYNJazCo>z@FX*uMAJEr<{RB-9e{ZF9i9G5ypus z#XkZy_0fPuIf!CDgr|NmM_}U<-eMMvo7R!HB@xe|<@El>o{S&0n`Vd3aCB;iJBY)W zN+yIQbtXR0d(K5zUY)e^z;f>%|nqc9_H+1sVp% z1+op{N{Lx0C)#iIe5p3bj#*wlu z0w${f8yety)p6Vl>rQv?=Bm59JmXVxRQ#EDghJHY4pd@oo2T8|bKbMHXm9yO7MHZR zB$!oI^|-re0h9)arJO?`N8cs z-g^Io@1MQ)jYnU6_VW2x>)iP28ZkGU5_1c_e8)EoZ9p_6s$t?7RC6`z=?5E^jpt)q zh?Az)@mFILEDa%+fTb3vx7LwXC0aECh^Ozom@jXs{K3|i;V?{Xi*4pfvZU#C$Potw z)Y+rev)^^@e|vrR-Q~kycbP3GF5+Y78YgPN~PCp$vjBiyTrs2PRusmga?xb|ds5D0;?A7>mA$eigfM zckHmUKiGYD_zutM{nzbxU&m&xZ9ZSW&wW&_KK>6k0*CviuSUw~cUL@u)F1MYg?Caj zIoCx+h;VIymVzUl2*M}g!+d&?K7q#A>w%0T{OY5B)wV?$05+^>3SgbmYd$-1dNO@7 zT}{tlZhi6B>+zUplcrQfqT-pR@g2Z^R_%Jff4kqiIq2U#*u8!8+8?}j{lnK+Q(luX z8=sCZU!06yo=lEUCuirgi%Y(9zviA1ng@rlY&PH^O&dh~fI~%$YCW4qM7v6)Im<(_ zH>p;ZxHs9^;WRt~9X~>Ba+*jmgxTv{N1inH)APu65vsF&Z|CN>Zru9d_O)-^ z+PSma-|M%oZOzB)o9`do{U3fz|7T}8T`sSd^Q*=5bTT@+Jp20e+2<#xzq^>XX z0~;6^;c&1@6zcqPme${jpfp2*|BZdH)vGYoj%M>;Lp2nhiU!+P?3bZ5xne{dJ9!XF ziDAG9gQ(nPy2V6fw!FHSA5B{?mn|L_^hODZ6%s56;7}nH_BQ~7Gx{XgtT-c9Q7FlR zP#(t?WaAe~yT%+uYg0lO0Wty}AIa(N4~W#(b_QAyU<|UPlqRgimnL0yh_R<87Ob#7 z_ZT`2Zmwmr*}6(k>(0{+);)$$e0gWP!zvDM-m(=OJMiEeIuFj5S4Z>#z281-J$TH* z4<9edWX~au?KIM(ixJ3_lJ5p~c!Y}ExEUNc?v2-xMi?>Jwq^$vu0gJ@ap2qA?(s#~ z{{C|J+I-mO3GLQ;Vx!6PW{bgq6(C+4#hc!hMOQCiM0Xdni~sQG^FP1Uy}xz-$@%Q` z+!1@L-#R#4a*KYyy*e5(_!gapjm}!lfTbc0_xG1P-hVCzP)KCv#z+F^SaT)`8h*Qj z?k?{j<%vgLAWkhJnjx^5Jr8!3o`l~s($dzT#0ukg^7c|fRA~FfgrKjrJG?cVL^Ax9N9rMknjeBPBtb&t~C2+MW+C@mO+gw zmu)14Cs()NM+{KjsKJ(+jzXms2Sh6)SGh9;_l1o%O@8E;nTfU`>Xfbt7})2=#kmis zQcxvn<7#4}PEhMOv>=y7Tey-YQC+5^Pk@J?%VomA`mYmF2jT<=QW%k$;u{2JGlCj0 zHlQF#$a22$6`Nb@`Hp}f{V~ZsvQ@l zHQJ^Z0)_SxYh2}|)Mh0i4H=}kQFRD@0ejSVnnE6_HKI+mKF7Co&#+-nKFmRiDIleY zoUxB=k&;Mc9+Cw6^-_cxGHCTLgm4BNa@#hPxod&#ar)!Vx5|NTu^eBp%qf5e+!e8knDos!B*hDc}KBC5Ok}}2k01+ z3_TbI3JC(s!q>(KyW7OHdEqLgsfSq0*&5OQD$Z3<7EU%Sta%U;zI2TE5%SQ$V>5e9 zHeeVoWbr})gf%}3S7#6Tu~n^OjKYDDq%>>@rL8a^sjB=Z8FN`Ay1HVbZd%)LcDk&# zatY^fVx`%;99RA2Z>PM}y2A>bCe`2U5umL2RJqiH+9XLtU=@zxVTz1Xj6<=$+F%Ae z5@2Q`RK|fvnyg_ZCu4zMS{Fu|yu8CSsb#0jC=wY-o-bMOKNYJzhrDTCyuDnbQ7LtX zV$1v-ZV<{2rMg?){rjE0TdT`cF9EamxwpUSFIwXZ9^$aoxty)HcH0NnTUTeT$tAww z6*9h4)EN|P@hhzjW3C}r2(j?0v&#^T;9N{jnOkuy%xc0_#AUnZ_t2?UObzGlOAI#~ zT|E5q^5xN&x88W?_M7i~^TQwRT)Xw+@x#gZM2}0#bL}o*#j(bes+9FO;#37{BTF4M zW30R+2?jxs5@7ia7Lw9(l3rWEjt!s!wAECrgv<&+LMpkj zXF5;&)hZdE2jp&8<~&07X3^9(+H>k$j5lAd_xA?hySpB*FaG^!{fpx@i{+4lL6|BJ z2rwVwQ9efkh_^t|u^fGGH(i^FQO33_m57M(V)^`WPs zb8v#GZ73)N3s6pn(71Xf5YNyTar2o&(>OA8pE(|11q*mCX37UBOeM~^QLfakvrJizOlb`ZFg|Ew{z=o>-xdr`)}OX zerL_C5{udR;(Yx4bbNHSJR8qW&L_`~mKP%)fD+}}_X7AAeHuK`DP|R0X&LX32CZ5| zyFgTHb)L=Huiyzx&$#pT2eXN3UIb`})=)Uw`36 zvG&)jwtDY6Zr|ZAWQf2X~>d-nL*_^Dst23nq^^WB=$$FNg`PzW>X%JYNV0VX-d##KTv{AgWl zN*L$4cf8}eJ4*m-)>3)+$m%O{qAdu}RY+169jpt8`5a*cyeYLc7O9lH5VcS26fHh4Ui_|D$ph z5fn-oG#Rphs$2ktGl(QnSQ8lq5$tXguUa`|<=#Y5l1xS+Hx41k@cVPyl+3^g$QZ8~s1Ma_t!%G=aRCchmbN8tDmq zEuOB{FqY)lh;fS;FlgVD4~0}-#-x$ReUqFCShHt2P;`aqVJg6%J9Zpe&OG!Z{gWw{=$AaZWssg-%D7n;ZF#^FxDbQmxcsY@F z7QoyRgK$bwb`;i&sw*Gc9LxxEEu>g5(<%`dX&Z?dwb2QL3BSZGSr#{$La;+MeS|{1 zVAKhr1!yTWJND4lnt^GrV?iXTI$|LrthJa7ae9oPlt_}f4tCCI=+X=lNTAebu#|aF zsDU;~yqb)atu`=FHHaymf6^O)-1;v@Hq>=0NKw+L8Img)oN(nAC0P7tP&nzV{&vFL zuls|oC2N0Z2?<=u4`P9F3MQT7GEjxBlu3srthHzU95(~d;-xVE ze9~aGi17GdUFA-W6-bH2&-fgVCeL|DkBM~5K(~~Zji!wes?4;ccm!mz$WM4s<#%uP z_ipmk{Osk^)#!r9j=e&`GZpWDi%%f6j!xP~&slY7&3L4NtE0Tx@CxO$>Ho*nd;Qv$ z_u>KtzO%_oPQlRuwtt#fDgIeYE3s($s$^{c8?wQ6Y_Yg$nUbml7?^C7*C zB{nMKZS}S3rHe>W;h>N7s2B==|*L zqpuI1KG?ti?%vJY+t+VCfA;k7;TNOcAqyH%pSDzsg>x=Nr}bQ;EiZh`1&j=}!#R!- zcr{nP1rMgs7ln~~&MXEqN~Ab~bNA=U!(p5Rt9Z;LAwc4l77G^nqZUgEb!aWsy%-$N z9)8e#?R(8TZ%;2-dc^E2HIPy^)SQGc*sA#UJFYbI3#W@5VF1Y}XxW5pTV*v7F~NyR zz00RG0tEYf?44)sf2DeelbhBmz<=rw3q~4C@4USF#>UAH4`#o3u+reo@^oK746v9r zuqXishbN@Nv4P6CWlUhmLmV)C;d1H*HmJwLv2UJWF%|7wsU9K@dl8Cc3QMJ6MYdS2 zx+=z$CVvQL|3u&SZf^>i0TcRTPNG)%%Pmlo$S~BY>Qr<^FbTFzw=s0Emf(&oM1l6a zxw3wH{q8r`-uT1S*ZyE>^;WYtS$zH3D|1gtxhAa=7fh91z;(#`kpzW$f5-u?cq z&UH3jq^IX_)xI}c7PU-CR~orxXoV?Pz~H!-gueEfq?AOFXX zhlgjh7DW{MPFM~OXe3-RHJh(*wqAd;{mnP)8*7u^#qfte9Dn%XqIb@0GK{kI0tF#1 zok~J!X)+TyRX_RBEkdOLM;m0Tr~q0@G+_0FPjp8ms7_?dJa{#D#VvqJ$4~IkC!^S) z)oHHq7(j1)GMKPH^pXK}EEaYkAXgy6_rg9`#g<|U$MS=j!0MTYN)*%O&^$t)bnUb>!3P;rTsGNQ>hem7##(*B441_eMt#YQa7^TV|OUZD$KQKpu& z=uG4?#Wh)Sz}GbHPBHTav`Or$vsByLXx!iGt~AGwYO`U#&Kuwldu=9-?O&o;XBt}9 z*6028`Nf&eD?+I7*7{DJDZQ&}@d3H$Fc}?I*?+HFTiZeOd5?mHjba`mkL*wcA?sAJ z)i&FEl_@4toS8qrWRbvvx4F9fjT=j7$>@rAce<_GW|#YX=!YIWtLs$6WXhcH{Op1i zhG`cN-nsnp7tsw_Oj+5hj6#Y^U_t#IAm#xU@gbu^DU=Rp#XvE)p5!OMqD}RnAW$?n`J{%2UI7!Y z6@sL&LuaUPMv^u)vpjH>;>@)L+-m2HR#cNv?1Y=WV4u~|Tkr!QWt1RgZ&kD$giCK* zJ%N+HgSly!I6C8m`fSnxU=b<545q-TT-FyjwI7o{z48|CAnGz$V`XO0qkPzg4B)b3 zgHftS#)MqBDGQzejMBq+yf7X5@MQ-DVc{6|bOM55dchff5LDTTt9l2cJX9+j955H5 zA&NeWXmpMckKhQAjN;%0WZwLju2Vl66%M#^$f&QXIf!OJ-sp5#{Z*Tcs6dDm#U{== zf1yM~e)Yl-CGP5Y9#l#m!R*aLf^IxbjSs@fCh+=-OxUbzUQ)8;3&L_QE$yc%vsTuz zJJXfQ17sO0qiS&lkS;52N?{QB?RYShGbn_96iZ{P*#*)zh#dC`H}DDC7?~V(fT4kf zWz1^r2dhsQ!V+1kI!_W7=dlE&pyIEMIvqYBGyjY{q=ap>RI=4i=s*J8s*#fRvS5QF zsd5UhYQVxpAC6-QFAN|lCQ7#z0H@ELF@gsSaFhhM6vd0w7YraQ+RCs@ve4q%uCiqK zM${{909lM;#|w6F67{9Ygaj7$ovc$z6<{Nt93dQ+D-uVFXmNZgH;Lg%@uet$SVV}H zNXR;8Rh|K2KqTdOyFkJK`lXr245TO^?#eKRI4&1xuF0g-PuPpE(R#NtXYFXDi-Uwa z{EGGj!KvsNgzlE-;S+nSqZk2>;gKv)NY5p?S0Cjk)1Hne{3`|@iqrF;UNbOOOrboK zFS(NN0_G>&Asin~YkdvOKackD6tuTG;UQgcs%65J;m0TipQ)KNFe_{I?gnc?N2A`f zf65-(6haZtdXN;*wzu&%pQGXupg$jDpPfqJ>z2hOfgtBYv9m&0T5C zd-cKd+VH}@v28CQ7i}}6IIhiEu)un_DS-;Pyv;;*XO(%Rv$MtQ!Swv-`o_-f{TsJ7 zw>KVt@$uQw!^O0(R+L{0TdNH?@dVhmFmmLj0WUq>G3PIWI}tCYKg3 zcqs#7{*o2%qhgpJ1_H<#zuZBf3dSK}E&vcf!%9c?{OHTt_N~UX`;EQV7LR_FhCx8{ ztP9oAf~JYVEROPRF6#5FBoqY*K(^r#u;eBij&Tni2+p}?>2+Wm)bE_W8sfAn~HG-e+GFpJg56_F**7fw7;TrUVxKsX4L5wxJUQq7@m zW5oPR84ad)qN^0Y14$8w9|?&TDT>H?rjRkGl|0vqD>or80AC=eE>W@p(<+$^17~bV zY0Jd`UO=J0Y5<#@z%JE*%6+0@#Xn8+q}E)!wesD+xc=Vvw_bj`v%cRv9L>M@VDRg| z9enx2;pIoQ+EJ}DW9YQD#70W!ml_5WhA$(xwZDiIg%vfCzzJEplY_ou!W;u^1&N?? zi&em-Xkr30!pgcFD>EnRD&dE1AybXeQh*4eXl^lVjs4eu%A_ZKSX^vUiu>?OI zAeTi>z_2R;k`EZ+7w>D(PhY!#{oQ~1_M3n8>dO5U?zl5mIHQv z4FM@rSHhYd3Yv%gl^c8aZhU+1_J6$d$^ZH5r$76=&igg%yhBBK091o(Ov3E8UU{u~ z?VSV{ZB9AAiK!+BJMjvtk7niqtZKJ+-$EtEyyAc%4K& z1u_=rGW?6kVsd|#0$5d2+#(2Kj$8zxo=!2kPD~s#x>&Gd{B+*p#t;r6Hi?Q;W@OZB z%je&soDx}z63dm4z@+=ZnGBTzB8)V@!&!1LYb*#rAqg05cBj)^XJU|%s*?r5p+uZ` zhz5&Tztd%uW+LEz__be6kAXKa;4zHJb*Bmp7Ig7)yfx++_^~ZF#@g=?ylJ8`Rq+}u>cXX z_^MMtWG+_@XN(4rxS~jw<|0vQe$4U3V)YjTK!Y8r8G7@Z&ThgYTF7phBDpGWI2DDx zm^2k|OgqP5(D7Wl%;`kZjsRtNbC^YQ1ed8<{Gvon2UcLP9*b4!Dv^P5`A?IKCh!>l z(rHr_AYl?&Dm11lfSdA!Y;ltag9+vKhw-EgXE>v@opy=lrcmJo2@;oNjDjGc*98tX zwUr`w=XpvUN$JkIdX5_ppt7x?m`B1Rp-mj99uH#H98R2lAQ3^Cv$TlJ)2>i?P!Kzp zWNM4&i0mT+rD8Y&u0oxAbgvr6OYo(#MCGOi;n7BwGsdnCbE$<`4foG0B~^j6?9jBD z6CMOdCY3^0EX^wfy$)4*t{fyVN+C1?Vk@vPD2_(q0ThB;>4}U8<(xk3(9?|qWe5Nv zY_U+J)`xGH2hQmZwIvU72q7{co(QDPbO5bkplBhBW9SgbNSf7NtCrT z;!yP2KN2|5WElY+@R7}%urzi$b`0jqEe!k~PVqG%=$w~e2168u5w(C4C?*xTF$=lu zUPpQItnvXxFpREtDrp!%g4>~Pdh#L^2&wTU23RIQ*8J!JPZb2EI+9lTAXQ8vmF7n* z*@!kHV)#?tawKXEge;_+#F<9|Kc$k8#Ar-7{`?ek31gx{la|VnQxeHzG{`z?-qy|d znU1m>sLbo@Yc-a{Qqk!qxjjm){!16sG~e#lxW}imLPL9oBdJA0NW*O<+}xF!@f3g& zH~JOIqChGtAB6K$kd%um#o$kmilLy#h#!%q6FFqT`i~PUC~tc?>5mWC8-eq>_1soAy45ix5?k7awhwkGR99^ubOU z_#}%|xeJbpH>F0EXvTU7JaIrBQN!%{U|x3#;wezZg|P;~lm7-!r!IeMfBpOWi-*I; zXGdL@Fd$s|_2DUXO>R`GBS2#r49cQMQq7Pix=RG0NuqtB!^}XGxk21QprSzvah5Nq z%0O-migpE39A&I>q@w_)O2#%wx`DExQ9;(0I1}ngLGwAu5zaWbq4J-KLs1LyR}Gvz zXM^QAiw`&6-usJxe(S&f%XQua_WXSQcR%j`_-`&B|8&s%eA?(OI=*$)igeUJA9Yq) zYT0fru`WPG&X<2c?QYkySZj+$7719%B|!4Hqi6aWr-0BOB4h;3xPH!iI}y z4EyXjF+J|rPUnpQqdQ^(vV#wy+%#5AirboOI)bYlD0wAWl$LxGL7R?Abj75^>~gfY zI9+^Q8#J3|M1Hns+2TcOTiu&Gof~V-?Ul~X+U7ei?f$_lsAJL_43Eyn&rZijXQL-a zqbCRRv)*Df<_RboR)n*qLUPTfH2fmf3*jRi2UyBSg%l-miTj!Zw56;$EJttO`Qul< z|1aOW_x|2wnb%?xbu1bRIxqSul0^yR6gvQ8x<5r^f4~_i_2)a+TH8yv{`1%NzIpRE zfBnnf{`KEC&grr6w0v#8x>~z;w|VzYZF9Xg91TDCX!hvg{Mq9=ODdq?(j?GP`?Qms zURhAKB%FgkI%?9CD2$L&I3!s?6*GkZG|#dX-=!cmLP#Y6PLiC6%Tpc6f?l9_$x&Dc zoFMNHpyKm{zS_JY%Eh{{BzMrl`~hGNBe z7zo<1YB@f{BzKPKv^Sb{-k|9&8)B;v1g}CD!K52+)^EU)C@pz8N|i!V^W+GA2*{cx z+zT#N*;F--8(qfDvR>ZaR~}THw+7SkljG^(VWW4p=+g7?cDVTPUVey*o9m0!RTf;< zCIcSWC*Ewmd8_~Eu=ntRUANqj5;;Z)kuVo^AQ+Dys6cCIcq&2xjmWVWueCWicQum+ zH^LIN<`?G-FGN@HQk5{Fl-P1+I6a-rd4ieu1sUGd9QSkQ;|p%umZm7~0g0%jFr_0w zQ=-8s9XS>T+~ClbxiIPKUtkE6!Po9zKJGZjI=*ImG`V!MnM4>-L_!b693*g3NQFYs z5{JZBi0im%5;eDpg$W4RR}{=Rz%eXcv7B`3t=DE*Nd7!>`nyk^hdb%uVs|iN^n%M0 zfwogiyOrKQ70-xkH$g)})M1%gafw};cy6}Q){zH6I@7+@(T{yvK4jVBWp@^6I^ci= zLoDu4I5VkyEOV!Ubk|UL0n#O`zSPA22RKNPEDX)&Ee75!j4x>9n$j{Ye|QSdkCDYn zHXbY_OXtx+bfNeJOj;@Id)rIn(LtxAiiJIMj>ORm_hFndU;*ru6^v-W0(c3xS6D-f z9Aow}L(M9fp)8E6%%DOE>V{qH6uU9uE%J6FZKN49JFMVSN~$rn5y3fQntm8}4>nf$ zXJSxj5CE!g_?p3jAZ*74NP)Ld2aLTI!DZ)E>}b!IAlv@ojw&G*2a|&tbPzO=8e5XW zwFUWP9*G&wSltv9l5Fk`$u`KzBGtsqi(=TqUWu`oi6YuUj5b*!w-{e5HE9?ZR6eB{ zreR1|)dGN<#u=~<9obHaMm1)eC{F&I5PjLQlJnbRN_vzSRS zDW?V*%EEkT(}#)%;9tVVPQ~KSrE9vGnDwHhside!VdB$}v^oG#wFeZ*zq#RrFedCQx}ABqUFV6Ro$cCMYr$F}mi+k8kEuTh?%QVtpEXe`b06RE(GErj0=&VPxzICR5LH)1Sk+@ zqZ^~JP{Cueeub$h!%5LeIWfb(LM5OaQb3b)&tQ zdSm|O1+g%ZssO8!Ad)!cqOzpHwtOaZU3F#(u)ZxBvs0Lpa7=8rNyC1rk%V!^?--ui zi_`GXmAB&v-i!+4Hqb(@%)@IB8z$r3F6a0(vdS0_@=UPN*W$) zdU!C?=5NlH`y*~((~Nj4kRVfWW(ka~IC_9Mqf^ia2MJ0Kc!+SO-Et)ZV98~e0RdQo zBJ9Wks*+WURm!2T9Dxq^m5M_*eo%0Q4tFJJ@|ezSsk!pX&Aor{+U_6it$m~Y+2QyX zAND@@cY`Ot9!#E3nnUWRb$r6elj!IQ+<9+!vNSo}?C!2MH)+)6l&`c4O^-?xUotHp zuZ!s65<}4^^^RcI4uE`uBVwn3@!NYC^V#{u^zwY}0)%2qom^Ip zE0tLhFT4}INiC) z$$~3q5{ntMfhi#7gi!$(HgA+?Uc0vFytMk>fB(nL-KF3BuYWsZ6OEhq>u-Hyv44Gj zc`^Iqlj$d)%nuKFx-9)L;~;3jT!caY;ECr+#jB7)>ju5pM^2Sd>WPFV*dJ6>c#ksV zADa{F0i^*hzyK5w?DIS9avnui^lWN{q!0&nBf&yZQu5-%bDeg3m37^d+1Z3=Orb)k zfKK!%DoG%UB1%9E@?8NajbxKlG$6~#_F(z)k#}I_0o5?7=amxO_IA6zMx%uW$t_&^ zD_!}MU?C?BM@wQ1O3%bEurQXPdN5fvW^Wj36|)5a^q>%!7`@^Z^bb~6YHMt)!X003 zjkTNo%f+uh9emPWoc9(NEEDDKsxRE8WdkMLQk&+!A)--VS?4*iM&0>0GNw*V&>g3) z;X@T)(2)0vPfqmVaywb4kn6A%=G2Y8OFwGP0&HFtV2?3Ps>U5NsVMLAU6rz)J64#C zYW*>Bi8ZB4pIh{_{;d9|8XF8tjYnJ2XUGPTO3){QPx=%u)hxWpEGOz-O)H0H0K6aq zTtPu0N`82KWwX=ak<{_@EPIfqHWUOw4v-=kO;T25NC6G5aV;r$8agsp@W#6Zt00T> z2xi>?%JHXV^O0jO(?u;wL`vyKj24S2tq}M!A(38nQe~e)ad^7W#5_8EMh#H~*j0SA zmDWB%qkK|I^93AQaI8f(?QEGtW04f`%Q2W;aN1q{L)O4UM@sG4Eb*a7&Dv2s$AO|$ z@m^UPxQB0M22`$Vrhhf5{(!3K;SA({eW(OJdmjckyR>~)J50WXep(tMq z$qq$`#0msqrKrFdC~`8~QYmRCbR&Bt&_EkliOPZ}246I>aDqlcS+DfRYFo7kY!tl{jMB3=Wn+`g>+<-b&fFTFi!j7;?f$0hFXga>2 z(TfTo&#ArvPJE7Ev}_XGYE>7vGBUfE0bxWanuyKOigh1)S`0+E1Ju|$>S#EA z#nsKrb(&K4I3v}_(AEo464962hf^l^ybKCb(*>Xf zTi&W~?A3VP)A_U7ym{~L8@pRKo;?2K@ZgK- z_{4ciG~vJ@nE9Ar;1G`M;ylBs0DRAk9_ndGD<-c zyb^=78e z5djHO6a?g?hdw!4LSV%ZM`}t8WtAaE)7BZlFfMc&)3(6KZdCCZdTaUqX6LP4ZY-Sr z{nHkknGi_AdBF$X!i2Sy2be!1G**=TL9 zG*{SC)Q4k{(eNZO_|~OzA{TNjKMEAKa9)1bU#@-guUen|Z2IUw;MWWZj_E@mwYO+ZzIr(S`Og-Q9@Iwzn^j5#C%VG|;Ww)D%y_BC0L3@# z1zH`;TlE7LdOJV>Pced8_!eCl`n?bnlaLXy%(iy{t~AD8SAs;P`d2_m3`#Q#5I?e0 zin>sV$Jbc2xjda+4%upU#>?3g-%2-4I2o1@r96N@fM6!Wo}OF?SU$peUQtT2#7!aU zwCc;<<|fNT+1sXQMiwn$a~`dVT{ii8=4FDS+4>1=@O$-5qHyxTIxq4qYTqNB5a2{! zX{@=l*x0M@Z98aW&zSMBaXD(9c<(B;*7*?j$EH@LHB#TYaoUe8WSLGh&$=@wkar-(FgN=idCs7xg}&&NuYv^!T?L zKx@L~prX8_-+R&Xq--|R8c#0R=bRM^xj&P-C8}^CYV~IPwssZN{E!;8MJxl9 zygK#|y)Y4PGQ|@krdfVC7AZJQ6JbJlBQv7QF!u(C9ge7gDktWp!vdx(iK|NAHd3P1Mxq?ELz09hT+{lrWZl1T5%nG+Fcjxj{e(4z$ppHNW#fa`%?%NcTL6qJ}TvjPG6##U7HK0aDIbz_Wl2IebEyA-% zs*UqRL!{P1GF*Dj7LlJ!&56z0421A0h2T(O*jC2vu{IRI&EQnUIEP$4I z05!6c4H%xL1rr)P*m?$?=d$8$0hwocs#~gRJ`rnImq+0h0I3v!lLePr37}kB7Ph=p zs4x~;0Lz>?jRytzv!&L;D9WyX3|hp=-3ox1Z^So5Z`D9&@dZv|Er&S@DhiYUC5(=6 z$OAz*w`#$sf1II4hfHO8Gv&AiW?7vqP7|)fcC4gcq96!^KspL-5w$Mo{IDFCSB9;v z*LJq+yX&vLzjOaq=l{K^O^#iP4+bn`FBby5H~C0j8FIpZnIk=Bq$v;;Z#GUSqXc=tw= z!RhRPBJ5PS*5ci6U3y5)#!?906cIIgE_?D-{;;i!D`4eM{#ol!{=3%h-!}e_PbQPE z=nV+RqyMoFP~1)Fk7{TA#nGsC&d$GVB%?f_)P3blp|vp#!Zv}Qx<)Xd+rVvI9#xpvQd5s%P18VA`|Iw@m z*`;=CeWkUz(car?U*GBOZ?Ep{Y<%bSjX!(a0>l2`*;()NXN#w2jpK{av%}Hp>2x$^ zH${kY=axvN<#Q>;KOR5K`(g$oTH@^8_y*=LTee`!vhaY@8|NPVD#UUJe8%pbY06KJ} zuAj)Tn3BUOC`&#+5+GBB2Atm@l1EOhGhhP)C`&{LGrDR>M3adpa z7ixuK#FBJT4tcUJMkA!e*i)$8+Gg697g4YnaXM%Bun>_iN?KU_6M~SGD}_A(ol2XOT$*nq&yQ%KWq-+h5+I|-z2bs) zCEa&f4HG5PD9D!%a(mv{So!Y#weRen{9SkS%g4=8pBDoVE~pp81?OAX3}Dfv2bqS9 z?hRBLO*R_+@GrRe=U1WBAOkX5>1@;D!pn-inqhSxCOD;S78%cvS{SGyIVR zC!Cf-maB>eL11!YU+=&oWD;8(-VuB4W!l17@u19A(N;MTG#;k1ant;X-b8PyCV^+z zC{K6-#^Ic~_S}mEfw95G_h87LR%Ov}$$?Y{R08USw7$H+#HF3gq=7?UQ-78+OYLyx zy)b%yg;7#Ue;El`_i2v-u=sS8!)rJ4jt5J@eu@ zBPf+}K&BJsu{0Ae@?;~<<HXU-3)Imet6jzb?v8c|I5-#gf52S)zo-M8W86PsR5T}YH->$YpX26g~ zA9h{7Hj{d^=|%7aD*{_AYSa^ep_JooQ?VgKU-}gc!Qo1wK<^Rs;6!M3Do5B8si6&8 z6015Kgk+-@AtSKd66^r6idhXTqFN)PcHu0lLPI&_LZ#qgX%*l^b*V(*_*hh7^(sy) zf@A>|@}ktW#4T2e_@8wv?QVT}t+Bb)zD0Ls^-uR3KmVxqY(zeY@NI_Z8Jy^6^~KSm zb~LGdUaQ^iH1D<++iWK$eWidGu}h;m=Ms_$XBt1O0IFl@52pChAdCyw|yj=KA)%o44Ly-`GEV{?TA?=z=>Y5)Lsc$X{1*a9r*}pTq*?F z3uroLe9SMUau(-|;6WH~71Uya2@Kib)OI2hO|T`~bKtdN?c(YD>8H)xZ`OD3 zEgpY}Cz2jyFeWcy0WPg+AT4&$Cz2UFz(`to%E!zku5QMtI|SSG5O>IUB#=@f1+9f%pA9Yqts|b(Wy#_ zl*xI~$?qi>O~+fBm3#+{fWox;vc?kB#XI-u|%9j5k+OaBi$q zL)^DOdNe>|&>yneY<99VCYr3RwKh8S}KH^~Zp2C>Dxp zt_@vg#cbLL91#ejJjN>eoG2n z_1I~G`NJoDu6fF++itF{wXa|6+`ZYkzu&&K+1lOM+TCT7#7#PMFm+!8>w9@O_C4d`UEgmD&P?lW}+8w6QuRZ|3 zsgW|SRsx_z{P{2Z)iIYI(2P$}EZS?0?e)Rs-~5Nha3H;jPLP%!e1#^D5VfCNlB%bu1Gj2UVakEa!raP0O1pPa!xIX zg~*Ghq9okEO(mP$-hcI9+ht|G|VcC(iHA@cC_fW;b7b^%6Iv$W{ws0fv(%C4b z>0RReHi`LEKj6SvKBV2hoSh!)I1C()sqK3Vys6Ac=wtSisv?YbX~HWNa^9GuZy&>$RRNhW7X;`wPx*uUF8gQz{SwQr+Y#j zK#6f1{zU>f4Gd&+!;dYJ$uJ~q@wkOy#hJXWHzr6?!N3^C7*j<^7x}?qQ4H;lp$Mt$ z>*vOw5AI7>i{hTfWm^EWSq5VWnp{G;3dl%-0S4@3P-L{BA{f@;+%|${h+PMyt=of% z5ga_gq5IJ1rlgGB1b;rKDCLc*nkC zc1$Ri_z+A(*rzUiKvZ+uH;a&#OJU1ehIBttaX&ybpe-DzDkg|PnXX8* zh#{@xAs}+ffkNT<6$yFOSu#V!^4gGTXZE{ZSzc+qyIjA0ck$>U3S^wWSlVrFZY~Z! zoXpR-Aw+M0X_ZFpxK=;vFFt83t~D1ox{bYNebuQtwXFJe20oC}{`^8v?hsll0|`g` z>KH0XNxjU85}T`E2*+Jc>38!`vV*fgn0#JhdkuzBI_gJIq5|UD6nlcrKd+V_6`!8sIn}U9T3(o2VXR1gNtV$oF3lT zTzhM4@1^^9|MdLg>Cy4$!_kr53%jI6m8d`Nngc?pQvC_h{E3mwOJW6CU=*1%!O7Oo z`QZ~?XgUDIp&xXwje{6OQNS#xJI`m&KbvpgY}|frdU;%9p3o9}OV|M# zuu?eKxi0K@g-3*PQEB`sps6HskU9oG(#*Fc%4}iKh=;K;1x+FDLI`NT@#gfM&C!GL z=oeqC@F==L~{tkna@*p_O5Nc`O40>-dK9+ z274u)J~%%6>F47Qzo?&`w3$X{Zi-6Ij+JaLVudCMqKy)4!zY~J-fk$&q^Qvg0xHu; zLew4&=Dc$8@??C}VI%nld(tm0HI|s8a}LM1VdXId908$V%-)`{`S1Sq;KrY9wzeB9 zug#zTY}lC%*zJQIM8^!RYL~P6h&i}40Xl#jX(3~|s>qk?qFXQduf&F&&0V=NXN&)X z-tgJ;!EZiZblUah<<`ntdv&$7x_-2^w{v6v)}6gOuiRQ%;YpwR#b9_k7@QoQ9X>g} zcy>HJ?Js&GG%>#DZN0Mp`k&urpBjh|hHZ92KI}p$44UW%W>9ausT}1phBQb0m5;8a z$Q83Fn2Uhmb$0ir^SxI#wzeC+F9*ERAU6g8jv~;Fl~N2T&N0m?wibzBdk(6@ijD_oB4}@1}a%8VyN|Go|j@Sj3Q~0p4;G+XlfE4v?N_Z;T3aYFs36w?&E!Dh47VocbdOfP0Ue@R+uibXiL zSiueh>PNMh!k`QgG;Df7XgXEhTpe5Vek#B4Bpf9RpnSr2m`pA&g9XmSpdna6FFhN( ztrX8qGn`J=FiyJKj%`4et~N%X5F!-b-AaeaB8Czux*A}Dg^n|JN$U##&Vo6g14h}W zB;!Zfc1*?+5*c;OWI21ue%u();S2-K7^?_L5!x1=1_l!S5!S|6g_uT<-_{M~IQ2`i zb8EmP@N>?J20Q8uKhhM^DMujsvjA8&Yh57WBZ(9ydOLm=Im0jPZ?D^$o5-SobnD4S zJGO;LgQT>7P8q69SVAzANR8s(+Yd%XyU4(mY8LJkn#UheKOZ&kI2?VbcJBas1~@uW z|Jof==K823MXmg?OktH=FUfY&4`hyKY$PZHk{~F#xLahGbs9kGuvUoSREX=v)r54t zroUu`y(|6p--Dy#r3L z6h2_DoWYgta$$mEF1=Gg&Opu$c&1G0tY`xHG>Z=nI$F_GjzuL4Fv8MbA+DFjv63ll zU~$ain4j?^i3SZ8kNJKZO2xtea&A9QwW3dxrBu15;@j#YMXanh+mld%AS6#u(1Udh zT}LhGTEMGD^^PSqMRivqkdTptRHRK=Qw&6?FWjgTL826S;uN$1Ry9}r;CAUk)TTB> z1O|$#Mv?*(Iv2mVtbM*$yR%pOA)8``)9z|*_oe2^m$SjC4rKxF z`G{cN<26o;`PZ}BdZV%1YHYXa8?D81dFVjKtwD+sX2QGl;l)9?ov*?jAi4>lA~yP3 z38%cdZ8#rX%m!y{@xGWatp`frC`5IuEtZ#?-@4iU_TKoXU(J7Y(B={SDH{~8?7zQz z_di?x=yG=W^~LPbS^ddrqM{c3#(Q9Xz@06yGa*rfs1I75q3x3;|5*x2O_ev8p@y~cBoY><39?i~*<9`5eE zxwCb5^VYS)lP{0YznIQ1EhW1;teW;L>WweP9uW%83Wt@$@gu{5C4=lzwkX3Cm=Y^l ze$ZU3QC$h|SB0uG&I4)9DJ6?4v3_HCzIgiC;??)-x8I!id(GJpqifR_oaofDV!^6d zXcg)@tvF>zJHdEqZ6vF?|v zqDyJy$9x&Es8~>@q+SS?HWh^A8qKVB{L7V7!dAgV{`FtY8XsvON?w zpaFpp!m)~56cq?lP>UzuXhod)C@ZZHoY8q|u%znx_S>)Qy!XcX-Rmr7KlVj*p!PY-in6_EZ**L|{5=tSun+ zyL?o85xKy|;vi$ASCk}>(D*jn&;D+H=Lfa_paO-Ej`Ya3hFHg@)}ZQa@3yu03gZMV~X{dhP!?@#+jgT>>c#itMNy?1lv&dS)=no3zU z%B$g2w=dTfZ%QiHNiWr<0LZF2S26@D+(x@{t0ZbcUDy~d?RU3d-#h!sZ<{PlA`U~& zQuJ{ooU)ceQkWvai}Do=fH3HZ!09&nYi}$m0ti`vEewt{=Lms8$pZt4%2c7GG9+*S zO?s)I1;-T!)%0ExG=bDi)?X97_o zzzHT*f6?&M4qVG^ScSw-uIn?PY`aQk=8dK`6pLxi)rUDpX9N7OoW&BA5V8l^lNyWx+hl0d^yWQ=%l4E;#1H<`_ZM>lE=5!(&)VfhwIHADGEu@jg4a zxDBsLYxz809uZWJR-c#)KZ-t6*@^7&oX`nc4u}F1=*C!^!2sv<#dTwd5)ka25!`j4 zxUcBbfL8@od&(QbQ8(|((GTNHq*yIftO5asd5Gt*;DBh#YAbGuKo{!N1HE3?rzvEn z5ibZ)1_lmfnYVO&2^L`(4unNGGj4#-PI=;Bdj%2Bu17dQs>p;T%|;?P>_Kq}o47%KQXIO<067?Tg)NupMpJ_! zp5%zy!L2F8LEyBP;iMP}5)PG#Ty6AVKtXi=7|Ww}b)F|!L?K3blzGWWjX!`QM7oFG zUsmCy$N_X6U~@@Rp`PUwtzcSRQ_rR}7*JY-6{Au@#!4RCq(RqgP+CvLLy|m1Fe62H zkR5d>2oJz`Pp;g#0xl(>n1L8V1f%*4^8iW#u05b(E=k~w`hw##7VHnkr{muocK_A2 zMdx~bW50HEjDyZEo=?8In9uq=3`t!8n@CdF=agw0xXI`{z@CkK!f&NjTd&vGIALW9 zo2t;=lIfV#Ldxbn1N~Gh7Kw-h4AjT-20NAw*#n$$;DFU5v;^6flNBkhl~r9(7u}3k z$93PkUi*_sHitJviDqrvd`dGqA5(Hqo8V^=;g)@!GgF5Ot#V*i@PM_(>J{H%6ySs$Jv0pe-e564tj!o0UjRDi`Ig4yVsJTmbkI9`X?O39d%NG*Uf+9q^znKBiGHqY6+^?F zB1iWeDs#jMNhMt_^=D7YWs;O#6(k+5z*5QzMy3PziiM;yNGo0fy_~*4NTy}1 zpP@x@%tzI4+`L_T_xkK&G5ztUoymwzXRg#`%uz3jTWJvFqAeIa$})Js002M$NklfIN3|TuQMAIppnN!>|Dw%O_kmViOY6Xr@myFD z#EVGqglNU>$Ik8jwYOf|`PS=ecdp~z&wumm^p_9MKY6e?J!Qogp^MQo-+Q190C_%R{o0!Wc0diJJVZA99Pk)Cz*F(-HouB;c z$v6JV+U-B+G;fXuCnq&VgQ6muf`btqNVrr!QA=AIp_AIBj&OUVIa)iWz}Kx&qJfMOo>H>vvhf8rhR-p(yYw3J|xw z&#G4GrTN6^?6`k?+&ij0{g_C$)LmIy+TL#NZ_RIQjc;#GZmdn&#`VU%)pzdP_{Q?M zlZTW;PF*A>hJtkXgc${U;Y}tMdG#ZWB24^~UtOvyl`O7Ol4NYp6)iUV@-6MIlc4e} zi2|bmU_G_Gj`8Bm6R#4tg)R(;+CMYNwPY>;O^I@8Qej@l^fdO>F18*o%77yN1~|$r zh=k@Fn1Y=`+MN_8#e9HRi+a(aG%Oq{ZN{yzLM@*<}D; zNnpCN6zXfYd@BvT6Gt@OfwjffIvl;?P#isSduq14SM)`yXmaCk4i@vg$^-=ib>3&n z8!so#O=qrXkDu`nzYK47qOAG)wQl%ca@JkknzgNS< z1w8oYj#bD=Oj8PYpwsT2jUdBD9H3>F!KPY9=%$03Fi$2*q#x&t_X5f0oS^e%501GN z05uylGn&hUnNwkWY&jVBF%t7eBL<`ACpA4vE`+iyeR1QpeNk-8?Lj{2Rnv2afKmvM|Aa91I7KM0E2!VXA>q=MkV+~^ zm&Wq`H45lk#b^~jrqI-4aEhY_{lZbZL4+X|_NLbWIKFkWlx)NTj8H11l}b zXV0<+8e-X2$ZoXB;e4Mz}_%ZA|Kpx>u!0M-Bc5=WLNj&E(4Q4o`$W+ zWV6JOlDiCO!Tz`5CdK0@KpS91XcGo;5PNA*Ge^l34T2C5&JQvvwdMmq$DG)6@J@&R z$GKva9=}2S>H``~23ae1IKjU(L3ltBPzfCcQ+9AWHivm?`e;z^UDl4yj}KS=UBA7z zQM>-_#qn2*#W~v?_%5yn`*_Jwx^SSBr3LTX@D%C5N1bL>7kB2KQ-@RU=w`Cqkv-Vi zq}tmMs7M{bq=GPY!14iH)y)`2GZtQsU0Agk59jRs>8snFMSbPmr>dJ2G1i;pFCqd zJyvE_Dm!R2zV(g9we9)OKA1iDLise!yuP&Ae(C}e4|?R@ z(3p2cxTxlmI*Ue#w1@z+I;GxA_j>DA?dI!^v*X3HFB;6)l;X5zE`r6Nsz#$DqRQ>o zSGF6ww`XiMarC+GGvsx4Y(1*VF)_}^TMZ5-_10V_X`;oY#|B6Q<%ASadCXtD z4uo;~3W{6{1F!wan~mm=Kdf!;)o;JCxHxKD9@un>0lkSfEXu8A{Kz6XK~z$$dBGOy z${^}eZUX{^8enGB8y82#vD=mndWjjSeQs zgi;Pd6qI;{xrO-(0!nc^sFOm0{02uQR|=DbuHaD4qA0yDl7?1Q5?UtOHpzs+Rxp1< zSB8q4<8Wjl%9NLFcJAKY_|7-hzx!%;Z+m(%eE6f!&wugd^ue>m4qamzPHW^1HP+?>eyco?0=y z#ULql5tr7c5=@;`ANj!u<04*q4UQU28e~-;Yzen517K5 zKxxgLD-Q-7P>>e`S|l>6a_g1FL2Wloh#(NF{0gIL2=zfJBJr8$hieEyrHCLS`Y@<; zU{3%@K)1ie;YTG^wU{!bRt4$Q)uKS<9f=)S${tr% z9;K$ogj9KCgd+6|oDgfZmv|2q%{})x;Smy7)|9jG@1b%|law8i%u~wp%Lz7OIN5D` z>p2>r5O?vL`y2Bmw#L9;tc;Weo2)90-P%aR1&Kp?%&Jiqy_Nz2s`PxMq{E;9Yj;+; zdSpjw;}D=CQP&m(M)%T?W|kCKFDWGlU@nDM5CuzVXzBqZQYw--RmhE=bw=ug$?0^~ zS4oy8@`jpvC^S+KJ&Btf|<)o!kRHQ@M5 zIjm+qIEk&i9rEcyc8e< zMc7DBg$7XWDCtnd^@>cMfr)u+4h-_37WOrhBRV{y&2xQh>IEi7amj|s=@d^<2Z95u z#Ci+%C~Tk(-l>TEv{g}>OL2g4zK$0^f+r%PXe|U5SaoIQFYLF=%7>IeSSMj$nnLt+!)!iww#$`ry%;?T%C!AA#>ZArWD(%NIevVdz(U0>sdk#2U%u5F=AK_b)g-6 z@{#Q#yJ9eGlnO7S1A~@Cy)0@iJmR6YUD79yy8~FC;wVqlkd|ubmg)w5hv|tN_B<4Y z5?R4qLOu}GG+EY4;Fhn5>U9PtCd#@>M8Xz}EHOkSbWlc{3T_nyA$7xnA`TNzfWs)9 zL-eSTfR5~lLkPflMYX0`zx?$C?WhKBWyyd=#A#@w00biwX0?T~?j&C+ugas9AcK1+ zo?rm^!KidH$)XFEUJQqfRfb=$Jbr2Cv{T>W<-^~pA0H8BTPTo!jbCaob7`B+X16vz znAZl_*{X+-t|BcbFvg?Qd0nib4~F>005FaDR00Ra^Zau&#buV<4Iv1kF>XxS_d;MO zYNn_~X(AC?;WZn}wb9f~D@3=b?cbc=yU!EJt)1QG$r;w-9)Y7__K#gz?{0Mmzxg1s zMfLG#Y=W%aL<|7inn5G-$^osTx>T>6;a#1@+Ku}DD~q$k+Vd}&fh33j*x%7$j7cvK zA@!fy(spC>2Cen%{K>q3!d#-atMqy*i(~R8&mVIC2w7^gK9ei#9e#Fl-uwF6wYPTn z?rq%Netz=B@x>!{QP=O}P=j-(V&y(=WSe7791&SGq9E|^uRofKbWcs@Qxz?Ug2wD3 zixn$LA!f2=lLA`MCrCtrjmE{%{K+Tvd*78OjzJ7#KMAxvU*wP%q>JP5c}(X^UnBuG5hzQwECCy6M_i>(MlMPOx8Sg zL1|UvCpZcmDM}~j=9T=MQ9_D(U(sJQW#L>3Z)N1C(lNhMP-#L`v?8ZO{ZwUR8|9UU z{2K{yJgSeCiN4y+8|&|XbM24b>fGF(oc9m@{?oG`eK`8`VY5Ht7LDC{32+1{SPI*s zC7nphlRP!wn*#G1LVm)U2aDm^mee7oTi5`+#HfNVr~%P0QX{MnDNQ08m4ixT!ceU@ z|K$HZy#1$pcmHhblYiBoUktemrQYp)7her=4xsb{4w+CA{Q@3uX1gET7}&OU0vPy|Q8rH^hyr=VH#qdv zfX2b13IY8yKSimtrG9H$&Y&Yq$tx#nutHTdDbDB3< zm6R%5K+@3A-m(q_t+>L5{)~-sP^&-c3LU|fRkj}W=@gkQ%pCo2~8FZk-P% zy^|wq6wk^4RD{cq?3EJ}`Hyv8IH4%j8S+OKy3Na-+NmjKS^L-$j^~;&o>MhG+DzXs z)l9tB=~z+=(0>CNHJi5F^16 z4o6FXE0IKlU{75zdsC7N@4U{54M^~1>zG|2$^^O3UVyC0E4ferZHbPhIZ_NndO05k zU6EWv5qb*%j|+*c+bmGL9m9FynX zYAC|O9d|?VFw{(gNo-fU25@`$$lBoE0uy}>%;*9}J!Grk5@b@_ig_F$!58jDcgz`v zN=ya{QsH%En3FR~LtSQ_IHmW7PRxQiN3%o|m6Lw3ftCC`WDo;eSRETRT*S+Ryh2lu zpTatVcxg@66y#}c7D2Ip52I@<4E=l>b=in4auIeCOpqG%YRXngBPJX%pqF7ZLq}FN z91V&B5AaDvgCKON{4(h1EZ}&IgL8GMbL!Bcs%?bil3bK!=qU{+Snc#H4t?AbSVMmz1w-32v7h8@gPIL9A;u|$ z07gE2110%qNynxzO+}{7QNNnkW zGx?4-fKb3$iyhlF23yB?Gpe<`)LHFJdKa@(Mi;gEUEccJt_^A|h+E88s0sSsy*&r= zpFQHf(qb}fZm#q8DZ0))z~KFrpZ>DeyPTdJ)`piXunxvR2)RpKW8*dbjXl0wOSQG#`qJv+!H2c+g(G2&Z&fuK*+8KV zq()%>8%x{u{g-)oa&h)G4YpoI0hI%n`XSqbu*%GE5o63|7p%3NH3swf<>=Yb+4+O( zH(tAQ-8U9KJ^13R&vS7DbO<5MP>5Jiuku&z7DqH2xgcj?QNB2hXA&bFK9bCll9ii^ zr#hvCw&W+6W3ki(E3%FusBQrn?9P*f>(}agHy4L{wUcM&m@Q8#wV0gqv^9D_DJ_hi zh3@#IMB-H-inqjHM8ip9&x_udNpJ)Po`PHZ?l+omU!VTuN%NN<(r%$3n+`*+xTOp; zo^VDcmj!3|2s=cXEA6R}@D6_d(*slQn2&_0wXiG81!=`yNI(P<${+Bf&tzVr6lci(E=-Wi|v4}b7M?jFr?5|Ev!sO^aR+Bhx?L{(v+6wNW&_rs{)3qQo{mb6%Z@moP`$9 zpbotvCgladk5V^Pft(2@gMlpyi58KV z?|YU~9F@aLiEOqzp#mKpz3|BJi=h}+rf);@3M2Y!RmCI^TL3qgyWN+swfoch$6xSj zC9US_QF!;}X3)tcz-mvS_)nPPB*}`PBshI*-d&$;?aa@6^NVvDPH55@Kl}8UNm=fI zS`A^saK@T_AGW41H_$z4eVhx;=c_>pxj$6DLA} zW7$M_BZR!d9cK|pBM|zMR)p|W%$0j7ozl>?jVt9U-Y71T=$(Kpe6?yz%bjhE!X&e5 z41~=-JOFI|~KrebZ0EJHZ*Q zs)|ZUkrA0eWm7|7gBe|-)Ke&OYJW<8IEQC*(lY}FCy9{q!b)ht(mQuNAX2oKk5p8n zGC?L|F_mWuUCoIT%`6O8595g}>6)})$!I^e0iVmC5QEt_ke`_u8p{CFa?~z>|YjPyXN9Qz`*X-IDi9Jek z9Ej-L^l--2VJMgIUOW=6Br4abGU45FNW`}|I@sY_oD{9>A@8uQ(TeP(V^+{Q{!tv8 z1twHM!$XtC)S|HbsLObWij%svf>W&&U8+q-fJPt0Iz@oC^oWAcpg&lfu z@C>HN4ZP)$9$~eVt7G-3XdrP(kB4V4a)Sxg2C>ePY9t?e4H`lc^sGifK9YY`HUfsIT@J7_Zh;jfVU0IhVzuyO z(z@tPK0TYQZw}vDs_)dgf9hy%`hyu;9}q6mhoUHtuPvs$27yJ3sBXL2z1f*O7|owg z@P;C)nyGk(Q&=c6Y6UKx^G0~Rh>zl0jthOpddg;KCQo?f37Lpm0E2RCFm-CKB3$}V^MThT^g9NqQ$XV;34lj?WUW6TwbP9PWQNzNshqIZ!FPAle!d zsc;DKE}HY@?ZwXZdcRjYd{`gx9_><36rWoyh8mk>J~&z8*XmYdb!U2dSRe2rNZxO* zQg8|tgxBiaNeApjrxO!hui0`?(egL^gD;APo5opHkci; z{iEI&GS&!*dQkZ}%93Xu`D#56P~nW!@@rxRqz_p~tAaw8EOi!2K^97!MP#8V!@=4< z=}#YiSbO8U^_#COE>G)|fyNI3$mFAwh#>0BSv$FH8iS`7&whDv`=71ue(%=F zPam>g1*pJ9>+%UU2=d$k%3)+n-QY`&llc;5gy5Tk!h>GMh?c=7JDwP&9sZ~ibbloi z@Wq2*Ouiz92bHs+kp(ebWOf0diJ~65pfvxGf)ly5Op@f+3sTfTY?%WWTnQys&p3g9 z16=?;pl!jd>n_Ig#@G40%|mQUIEoEn3d*HqOO>Vol2Fc~9MnWk%ArV8<%tsF1zbMz zDIltYJng;UCRmR*ikxtJl=&|H^&n&~0#IQn7iPk+eg);^iaT|oaC#+e)KQ3sJFmr| zP31=xioH3BBY{Uvf*=7$0#RFdm%b$-653u~ktkvr8_c%TA9g_p1Zl~aFPtzWsvI@v zS0hLnh(MW04olY9NUh5fjPd+}`>Eyw1nywsO?14WPygc5FN6XhL0IL2U(*91Basx< z=CmpX0LjTAxe}RTam%o8E`q=&eeY&x%4qQZ`u;!KIX_)Gt_`Liu=5ih>Rn3__)|Q; zL^4MQprIe8`-BTI(V|eH)DLxwijRjSF3POTa8N0DWw$+F%d5^hPGsriR>4ZNNC`Z? zDYBG}p0t%fvW_fTu2I|Ax&4>lZhv#{!C$u*zxp^cEp>JVJo)5kemP663svnOH-QvW zK`d}9IxpRvN>DLNE67<%d(0nEHkicv=r6loz=Vj9~*ZiPa{<720r>6e@sG z$>t7%l81Rx=WJYHqDs7<>KP+bz&0O*a|O^}BrU82^!y;fUm%|5;C^cii?(e zO`q+$&O5z*=5q&J%m6_WAV`7|MUj$4OLSY3B~^FXWmi|FtJ9TyP9Uf|Bdna|Gi{MNoyXWw(r*?X;bz3=ZG*0?7lg%*Je z&Usd_=A`;igi3E6*B}NrO6e`G+SzEWU#SibtD|Smx>>>1doZFx=@STvOeN6o_Sf2L zXE4Zof3xDz{W_eCOzE8pa))G=*h)wn9-0Gtz!PBbq@m+Yjh*fZcPUKvjt)m#*Dikf z>bV!rubh9pbARXf-gJ3jQ;o?RoEp=z@*qhdZZK`|i44|JJ--}E&VG~V$k0FOnxeo4 zR|p`@U-~hzhEwXC0SWT`t@`sj)r((lUA?}1bh{z2J#$ydeiK50lz@S;@~vND5N+Cv zB2XyGbb${h5{HwBsrZE@*MrRFgSX#U{mzS>&yOG6eUOWzl1FW@iHzJ7FMf^4h-FVS za5J!p5)&E`suz``p@|$qV~H39jZ+h3N1j1rzJ9P-Y$6 z8l6RNb>)?pHoo=x@U54t^K0YHgWVs#ckh_+^UXHE3gSu}Yy5E2SL9j|-7%N#wBe%@ah$@yMyuIQ_y_=~ zqnZJ4J6|}-(Xu&25f2p?+2I{?ML-&O^3sy4mO2S6XF?B0?XBJFl{Hr%&GJ9S#0HTD z>v&l$bb+D(q9Ks!p*#NjrNCFc4M&UW;r(iSjPt!-w7A%E(aFN> z`W5B|wZX}498>;L-V>wnRIJnE0f^S!%!eIDA0K7?lq%LoP{gCU&!Wh@b9;E9E7S~=U1 zM{zRavVJNnjrox1N8l_rLAWKfArvo$_cm8Y~`6z@QGri$MfPA?@Mn7R#elLw4aLZ~i!> zdQ0PGx0wowl`w&W>+aPH7ytZv_eSgH_4WSr%fGz+q<2iW2!k{W;jIK4H+e^#HdC@9 znkdkd8byVa?QdlIr6VcMA3{+Zhf!AEwvL@)du`gvLu<99h;5V{Nu&gXM4VjJL_XmU zOA{!fzv7dI91FumiJ^xaG38oQrMkJSEUB)s zG(wr1W%ww4B1o`_+r%v3X)#D}3QGJC2e>+|bF|evs?zE3gipvc2};qwcx5J8@Rf!k z6H_4MdeSx*k-`b!zMw*5GP>o7y^tq%v;uPm7|RN-Mx}qsMDZ-Fm_?rca9)KcU66=- zZA3I%<|?w$%0#gE(#;sYl+t|4Oxzeua@S;zbYQN9`PYGrRhdi2J8*}2=3`_!G!0Kf z8=yoNgICXDHtzPlhlp_O&D;>@*k8dO*)}N&XK>Fm{Xn|L6bR7(HFTzA1ON-Y1Qw?y z;Db_yi?X&goNkMKW;PtD8z3}H^gf2jku}aJb6nw6F6|CHH6EvZU@9E1J!X`kHS8ie z^jV|8LQDYw6dgdYkz0%#f8gI@F%&Resr(8oVXsh*6Q$n8sRhu>%V+shJvRM-)>dgp z`C!%Ty2ABrrmC@!T%(}H;;yhzpvn3YcKns7c68<;=7@(yg>aCOYI%y}yrgqxhhHSC zm>CkdBM^+~q0E9bgmRKMi1|tMASi8;7D$a&zO_KYaESK}iDjP)MF#cOWd4g|&w#(R zG9Om`Z*>M6{pH`x>W{sq$$^z1R8`;Y&d0~x|HJuhdpdHgE@V^XJm*b>L_w54J6!!Y z>%AAd$N#QX|9GSw1*>sDq8_-FWtx>W9{R%d;Puf7vo(48Av=^DfS=0Coq4T|e&@MP zy+KgTrw6l>$E|v#S7zhMgWamfc|TrY#=BveAWoOli4Pw`08JcCAEE2TpSf%`$FUk1 zvb53Z7vDNr1wrE5=ki+>sD^|!4TnvfgG}s^Nmx&V4tYxxlS}K}tuE1iq_)*Vr z^*tBIjyv5c&*qswJ32ak`rP?jFJ5?UV|e!I;b#Yv&1HRzt>br)$F`?-Ev$+=MCzXP zO#3I+l1M{l;Np>l09j^-7o-+R2_2T5;@KP}wxun>hk$xoKfPCiT{p{iV^JhH2 z4DXPKXDuK0He8KGf~QDeH;IMDUItVOjMmwMLT=QJ5a;_8g#^NhC9muysukYbsJ?C^%K)KSv%m zMiYoR%CJ>Jj0X4L3OVPD`}XfPw?BEc|HjJ7o6jBH-x@IW!D#gV_EOe6hvIaye9>H| zu~9==WK%@>Ltk*C78eC&HpqZgyIXBEXOQp(5^HF%{r@mWgQ#Hdow5ag3TGF=qJpir zvuj4}7ZD0D9b)Z@4E7b{p(*5v{FFfYk{7R-QzF8NXHe3oFFT)YS6BM2OFcUiG;AzL zr;aQK5npV@xk=HHjksc(U@5UEE`6s2%lf6aF>%G&VN7;!Yw>iy&7(^4+z)#mbyPQk zpOAHyCw99vS8_*3GF^J!0GI0 z&P5`PPaJDSv<%s$Ae$`JiWC8xC$Df-=@6P`(Hxc-38e`d+%b3butXqchf!RQI|wJf zuXi@yTO2+(!Vzd~hL$?lLxzHB9tAwLW)sB4UGSUseh({@@nurVb>{8RH5 zv)Rek@#OQT_2ih&zVwC42||^zR>IuV9vsqM*qufM8BpfMq;vicYB*(m{JJc>o(Mi%r5cYtqWG9y%Q7)it(YELbmitLKxSK6`2P z5|0i|vcfe4c>&qkW8gD72|N{sC08_ zQ{d9}L?}__03}0YR!Z!oRmu|DIwb`}Q2I7MP$!A1%f)z}B8xRN8WZMn;~9}mGYlbi z=R>+vS-u&S$(i#EoUKx7u>pjdQ66Z9e4V0>{G@qIHoVG-9kh!$v4~$nzmVaM2vv@G zHMXM&DF$r@+3XYO+;xeOiyhP^g?;OaQ>)mMzEfX1u`*MheoAP^+`wV+%NbB&knu5o zRhE|Y?4r7Pp)5n&oTCUhxzJ0X6?qtyTUD*GBwBBkg+Wme#oz@GOA$*bWaDI$P8LXD zK-*(o(62?VtT7+)nyOBS5eAKcU_^5wS5zyV3XpBCID&=NYs4WOh{lQLL=FNt3rMrn zWA17Kgjw$l_aYtDwFmCTuUcDpAaFiU?GP(km?|Ph=K#{0-jjp+1%M`o78xn;zLJau z0muZ==dIy zh@l9pO(ULXmZ2Fyf(#T^0T2lZyYZNr#r%42`cAiXzUu!$|M(v&UM(*`H)5jHAK>u1 zn`O0s#JiZeEdjJ45_h1Ys`b0qT3zMMx~+@t(%+0fQoF4*T1KJp1J+BzXkm$uR zQ*3WSV2--%u2j9DrD$VjJn@XDL3r;tF+}nBhi?_;AIs>6)>`}Q3-nS@)(4O4*>Rx8 zgnkhx+=Mu!j@3Mt(?`+72ywBFw$2oG?4&x$9{X@B^laG~Gff{K?H-MuUR-39FZ8DW~nj1 zDNvZm!X$sw^0axa@Z&qxjknvEZ!Jdu)MBMsiv^R+DV(s)ZVD>o6qkF&3=k?fh)z?~ zE7THwu>q-d=G^?HE8CBjlmF-A)@W3D-BStF#G&AX5XT9I%~)>u%eGMD7t1S9Yq6;@ zOsL3;P7&FJvPseI5pjysGsQ9_BtjS5rF5DLxRf$}r)j12;lYQm+!(&~<<+mh+PS(m z;U(t(=dX@`^-2BYS!Xt7@!ZQQ!_+S~djxj*3lkC{h<{zxh)gw!6)oeXBJFy{q6NQD z()vUnwSfbzDO9wLY5A38bjDjpPkz30=^HO> zeD~Vk-+wURDsD!8UhTpNm9rMk32Esm7S8arIgUu`ZJG-_;J_1hH1Awf!^Hqjmqf_s zj+Ld@Tw90_B#_X~t6MRWs3ndZ_u_=`QO_KiY(5Dz6prl~ISED#w#KwIX>tu>$ih<; zN;KhAh8#~h6`l>}Bukd@U#Gn@uI@go)-Si#yFR4ZNtoPZ?50$y-OY!TFN7vJP7)*X zl+Hg%5c^{xlMyy-`7}yo-F@owCCX(tw~`Hk_oF^is*kr<%>92!+73OsK)O?M+O znkq_-(@&Rbrg)+X>2R{j1Ze^^C?pn9#zjS9223W0m-eJ21p{17CjU+g^l`LjF<2QaSN@~V2C!J<7R z6m%>Q1JTzz4JmjOD1i_pP65qj35>uwbzks1t)A^|{;%(k-@7tDneG01vwOtbiLFDj zE~UePQeqQh6CJYR&!}Sah#b)v0h)_V628hl?A-UrVkQ=R+BXNK5)^tp=om60Qi?AZ zy}}d8`N$nkNfcW?WhXL%&89RktXhc^Sk+xdz(OL4Wdaf`1}k`#jR6vo>^(wS!f_L` zL)>3x2*M+aZiT1FP$Ovl-GPBVKoApedAh+j7l<;r)nplhnFud0QG!iwJd0@~iB5!h zIog^<*XG5I#GRvVD;XjP1#IIvE{65K7yw2G&rqr*UolJm5%c z8e3YSj31DLNmaSPGeV1uM2Jq8S^06!<&4O9Rv)aJI?f1LcqGaP=?;(CRo@~R-!;o! z@`D1SS=`uwG(k+^A}(baWpkdEkm>t)8$Mo{>M3mbvY`|>MWCG(2wOEJ&|GG9CXDhV zYi-S`p`8eb$k!pV-k}E@(AW;9n3Sc;&@u#IvSM3dct@hr*hQGrts>NxP6KI{WE%&n zPq6tAWs4Hh;zNS|<1w3H2d*VT?N#gs0}~9jpnwk3f*MqnN#hG1mSBRL2F3&Q&D}W0 zirExNDSX5%gUVVB%=Ll` z0W{fXS5~eKtCQ|%$Fqag&V2a~v(8Dk`%ZVUUd>;qTK}rmd#zvncu{}2sGjA%BIlMd zqpX02#)dFTjG#C> z%(FQOV_FJm0D+@hVc^vg4aJ^b>~1fI@TNJK%Pq z_L7?kJuw)a)Cw}9t%OJH7e6Nk5-O4a5c`i8ox{cQ@MQn#-tkMNUGRTHspF(+l9 zl~J{Ge|hFw=lsjuNmy@xB!Y%e^6)RQ%8}(vE4(6F%OpNhdp)ADBqfBX7%a*$mPp3u zom)4mE9Xb=?N2{?%q+vILVA(ZR3#Wt-!KYn5ZPFdBneMoVvssQA(98k>J$Sga+s5@#(BuTOYjq+S*%h^xu4?K09P8IQsWL z8NYXXvGtTkU^6z)70%Z7@Pv~(5LV(WhIQR7mMJD7R}m73)ZYZ5G_>DT!>nm}778j< zBPwY&sAfK@$wgJUXQMXB!p22?5-KVOr=o@0tFrn*LQ$k84Y`g67WLDgK3f0ppFi`h zGo2e37au6W3RP){ z{R2+ml@?Z@u|Dail%z;)V5UN+P(ehtTPE9k>VWld9LA|dz`lhWmiB@cBlq!bbn8;6OCfZ&L_)1Hsp4|eyT9nmwb z%x2t#uReSXK#O?fpIbQS5xMf6I_(b!#v6fvPI;pn!bt$9u6HL;yzOgoII71p4H4Es z9Zh8`F*%(J8yo-Z7T5Y5{NrI~Z`WbnsSXj&Ah2G3`e^s>&Q=%BEbcz*&L-AVt134# zpYUh{bW;mmVg&-0e~j3@hmg@=Kv^$~ju6DAYALJ|tZ^u#gI4v~KPkKh-CKxy=lwbH;+I>gsuxsj`TmzL~$Gs^78KX_J zj5KV{fWRU)AcaRzMZr*M{)DMG72R_6 z?aBCt(4AF2uM765?p;U`%gHD@7$GoC%cDf-dsqfza3-h{or%?AX%wS<)aeQ#Je4DvD54!@Ks1fjP*;7Tp=aI+-Cw1CZ$@aM^{k$~fl( zth0guRdwu_N~D@aif%<5@k8}RJf{;g`L<-iROWY>GN?%O{zGQN6h!^_41nsQ{L3)6^f50I5V#2Q$q)E^ylKg;m0GT0qH! zI5cS`HI$p8utPQw!dc9^gViZ>?T++2$@U6<$#co&4f84Q?25;+V%7}239{qqD z8;5VPw+PIHk>OExZ9=F~BukXg5lE;AbbcuooI>Q-iss@-G|&Jkmex(BAqkc#nu z`Y(P^om;K`<4;;owp-(4Pd{pAoW*dE-2ez08+;YC18ASQTAjUC&3M|&-FnIkq3{z$ zfX|&4>5{!Cgmb9WxG}aMLu-mdb^PVuUk&Ak&|+y>A+#8i#)gaLXNwj$(DR5I>l97J zptDA+%hd!aLAg{6aTn&Yk}bbTFjsNz^6#Gc%~AHu45j!~M!LX*%9Mr}1~zVPP#7q- zMA&v*KmBBR=4$)7FD;IrRy?% z=H1@P+h5^c_T_tzTZf1E7Xd}5Fqf=RFg~-LV=G#uLWLO#206MY(V35GCB;ZlUUY2$ zg+;?w?UJ1Or}M-OkW$A5+K7V#p4XW)o2~Zx`pPTUSHJPb@GGy>!{O+&CntaZ%kghN zSw4BvSuDh`Pdrj>9B&z?#9(`k`P(+aBQkFB9c?rJ2Zd#wG~^UpH$Xzk;VcE-OuT>19K znLoUC%>BkZVk-R$-;fn9{8%td)WdW?P2{^iJDc;`7#eT|LyL#BOq`~y6fuu7CZi~6 zfutrONDg1g3gkvSNnZd6{uGtca^|X+*0XWX#GKKDK(HBRaRwJr=~XBIbyyc>I?h9z zC?bF#7OJ(*@d*UnulC8lZ#@0dh3YbwZ=|nNsC*n)G|_jOk__2JWKlBQ;SD?S@+D&K z7)0Q7Sv}mXKHI9EauYXF2|nHpw14CZUD#kVwS%FVei&85BLIjH&KWW@qeNwp zVKgw?NAZj+ykSFIp{AXNyoA9|FvYm!Cw>Evd}YU|kTnHLR``^{7!pUrmL0tq_l8OX zheP9N<=A6`Uxawd-GW8#2#dS|B@!`h5nbdrYzrCRH2s`T?{&|^i`%)iLvX@|9g&Cu z4&Xp!*-BEuluUS=7dq-PusljYy6;ZDY%WUB0?Rg{j2DsZ13hwC6GmqEM>OO=1}y$k z*Ko{FtOXMp+xgfH`C(M<_=>s|Ji^zsWi$mbtxfmxg*o@m9!AVQ@Ukx(t7x?y}z;KDc|$4uc5NN^Hws}=1ZkERvL5Q zSsr<4b4P;|r@;&a}yG;XOxi9ChsU_@W!P#84_r6N|xY> zG!6|6iIpt!Y}j3YCO%V2Z9*W4JLKx6l#!z0L7pSrK8>JwwV81k$1^a{`nHdv&zR84 zMe)dxOSFVJRH~TG0A`FrsvyGAaI>6JOKD~`w!r!p%QlJDc10?WDGP(^&?qP3!y-dp zW=dYqDFb^cgk8!y$^ZaB07*naRFp*$=){?()w&vp4#GnSOS=wXLxOB(KXRr%v{}0Z zvWa0~6De0N4;-=}<;g&cu```{H6~38bWHHL_Q@;`yoIzN(bs4}VXK1s=z?NK1i|Y7 zj*p;7j&3nbY|DTkf^i286WtHZDctGXDC&hJtgCpfnuBRV4iqsJ*#;<$GSV;%XboK_9S877ufzlgn%9eD?JNv*isKCRaF;?xn_?Sd zYG02M6p0+9;15hhhD7AS7KV(OmG8elGA21IC8~nJoWG4gN~V>Gi;H~%ODiIhTZb7; z7eHYa6N%P(OYK6mal&=G7|LD($eF=qjz~6V-WYCh6|o_R$_&NfXY&yEMg7wAdFB?G zJUf&#f4)AhsH_cC&3Ro>G8$o29|*)PvYt8AN)F|f!6kw=kDOT6D{lBvSl}Z%d^jrr zmn_BV867HQi@7^YJmMynB9x^qRmuq0UJ1D3Pq5-3jI1k5 zU}mu81cM}>)T%E$`zp2o)n$om!9o^y%g$6?XS&Qh!0?8XzRze3pA;^JUx^U4qEz`t z>FnEKb3;y__cpZGSKfHJ*PFFJqW+->brak1*7~2!>&LU+xBK<0ofEF;T(8=H*zVjK zv_9Qpv7tilNcLK>dpvu)Bf?bhnKYV~Y=@N{|j zxV7ZbqhKM#bdUAG3*?4+jn^~MQIQx|qn9vZsl+aO#c&3KJTzg5o3?_VQoAPJVp&y( zi!+~(nMltjJQ=S&HSRTg#8TWfKaYzLBmo%~xD`P%j|8N;6^}{UlrQqhG0Y{x2K>8M z3Yx+ZGW;eFanhK?-|^OR`?Joq*Sc3;TReCd#mgLn(M{@%WEKrPv6x!8YuX|Zq9B$i zxRiv{jL5;6!^NzBCKEf zbHr`|=r}YT6WmA%%Ro)GSjApYM+3!)*UK5mNWO7Yh_diew=Z5=d;Qk%YqtikU2pX} zqffVwe)-GsuRf@Eo^lZjjTo1$0WZ}}Y(mm&?iwZegTH@5VoN|v035_wb?tJQUsx0Q zSd3w2nl&0ncj$wulg>KRBx-{Q18NY{f*Pf45ey>NAWHNoQ#D1QDHkAC>1nmAW2D1)4~A3j=21?3gZ^b*qyY8*Y$l-G*T_^Z8@5?V=h zOlfljA(RqDr@oVhW(St!DWkBrASiWr6f^cLC}V!8x=}`@V)drHA~aEoX;lbtGrD?1 z3ge+zAx=*gUPa=v0iO-Ju3_n5aA~! zsT_EMIEs)~5=|4C;Q6M31HVH-F7)KekE8m*cD1?VMG`*7iVycLZXQe?Z01pbzR@aH zk-43nuA}S0_}G+q;e3F%M=6{;G;;rQyEE)~quroAphNc|M@%63@bKrw!qLBAgGLas zaZHhjre()cTJIDzim9xKk!s9JK$In9iwTvVpm7K0TU^QZzb%E=5=@XHZcbvrC>|Acml*RE!qh3T6Ar`P0NAU+mHKu~Ygqs;y8(C$=ydTvPdtW5+s- zW_pA6aD_oRqXHgbouzod0Dvboq&5S9xE>4!ufMS58QPyc&KTUvF7Jp)$ANCcMR#?0 zw%0q`zf zv;oLb(zTJ+ghs2z2F3_NxL5!p0+p4uFqBH;@U16e8GW26gB#%@KCKj{nhb`;UG8(B zs&T(QlU9I18&?WJ*%AuKJeCPo2j})jdN7RfRPq_^gq-4u2!|bUD?c!nbHw>$trZ?S zPVNMc4=JC-=nXy92Le7aC^y$75_Gtn5ffKvJlSj3s9+?7u~TlISz;7Hp|WI%g;BZE z!rOrjxwIfT{Y4_Y0g~El8HTt1g*7U=s>sBOhKiQOnr996be6kJqMSe}2{w7~3Gj3V zc7a6U6thY6pH7pP1*YOeUd*IGLe)1lGkljlAz&qB+T(=6vwvFGsIiVf96Pv{4=^pp zFO-}^rVcO_L3Pd-_I=U}Pon?<$6Pt%5I)x>GDp;W!m_!RHUHXE3GQhQr@=5c=9auk z+lNWG>>9f`^iKp(gu>BP6;Ye$pJD=D?u}V)2PUV5g;v8i~!Fd&oM~~ z;NQm%agBS{%vi>fn-Qfgb*3>OT6+NuXklZ6BM8~hP4g*-Iun)_Rywp;(1#B(#bJ>n zAz(4RqfQhF3Ydsh)k$L??$%e^c)nq*VugmKKeNY~|?* zHKT&W?COc~G>n_T11X_{X09|dyAUN=i6)HC^_a)Ii%;%PYF_8ptGhEaQ!MH)$DQ$S z7R(7dU#q)cZ!fR3IjcTht9Vgi_qAblzrTEcQQesUNtutKj_s{p*E4|sUo_HlW3i7-eZW_>@boobMwL+z)0(KUQ>o=xHVPq{m#PeVgNpz-nmx_Xy#!2=X&Ar| zd}2LUx*FdD$cz1H=TDk_(%^1(GZ!wHr%x`a?n5=;hP9%Z)4D zb1$|JK40$M*KUSyG!DQbCEtY$Y-5QqSD2VBL*2}gDbNH@Xo<3_-gx8n&bi+F=bN*; z_Z>zB?a^=UET3_K=+yPBv~NXru}3hH z0Iw{wHY)Pt5C&fxKm#EQk_NsuGavj z;>ucoQJ-Jq#RAp4&+2;zt?TR6i>uYSe#PswdN%D`Y-LMoE1Ri6SivJ|rG>+IFx5CL zJuR!_Nws@ieZE^g-m6Y*+qjskzIcuXsXp1B@BaMGbZe7`)_bQ8&+|$%4ltHP;lNrj zuUul_q~hSkjIh-nGnSvY|GBD8xWG8K8uq%Kb>4d3?w{#(22d^Lwjc*G$85O1$aI#_f2=gbq z9vTjY8l{jP*hrQl79*v}mc8+$ zqNPYwR1s1jDrHg@;4Z``g;5KunHY>KYD5X>Fa9cy=0bln;UengKv~612Qo=ee}`i zKJ6Y?I7E~}`6|ikDth@K83wXxq{(qu>?$Z6ea|NTNy52VT=UvZCo^q=e$ zlT8))W60Q9?Vsl~vIAh5S%@L7$^xvR4`T~M5Kiou9a7wfrh7-@ybKJpkPCD;jYaD>6Ib(8~^ErW9h-8JqCKF{0GL$^ocu zUJVC-QcFXwGFZ{mJN{+z!dfDI0VJtxTu(7-w~is*uUmCaXl0S*hOT!!Uycf7+b*Q)mVeddeI@kB}up(%~iVjcr0=`py` ztOsdB<(pwShLx?4gsFLzRHiP}8R(p*QWkn+nr5lFr_p1W>u&Pdp@qg!*-2E0gbelK zo!tzA2{{G_S}oVGL@C(DHsMubm_?>W8X9Q6@X?@H*aw_i4^$*J)h%&crgO0*5LBJY z>AD!UGC_RsK%C|x+|@4O6mEuBJSYZax)iF-jUggXi{TQ}riQS#WT*ErrHaf{OV$=qy(8uY9C=!V@ZGtis%{qdYI0FWM%UXfK z#~$^QFY%COd{NN-(;sjfyw#xA~?hFdW=rQvlX6 z3v-k|VL=&Mttw7blLjWX3Is2Ad~|)$u2rVPtbsFZt5=3+o?m(RYbJzpMxhM+Fj#B8 zSI_QFm-lC_lLePNR4asQi#Jg$FSn~(o$B>o{c68@q1U?9ZJpufw}cM9!UJ*M06{`}r%~%h$SRF1Oojtwq1Z(?)SJ4~kjr zj^__Y^9R#<&-Z~@g*waO%HV4^2bV4^9?w~e>c6$Ie0^~E`4K1kyXV$gyhUqkd--r@ zdHZ2&n+Ne9a;INw%H^FbPIGQ>-kzS!uit3>tM64S>(wR~a8d<3)nLG-3f1`wt^e)^ z%RhUo9xbNo$&zDu$sT1Wp499aXeK1j zUyJx(Xbi6~jnqu>L!t!!iWbsCrLmCB8z7nRpS#xWuhu+n)Ny2qc=Af+ur-Jj`WIt4 z(gfx%|Hii5wGO+{ggm*EK{l~B+*tp?pDc%~3e}Dxk*^)Yf2^~BDTsQ!iN-_7^))%g=e)n5z|MGi- z@4o2;qPHI&{O}h?fBm1Q?|;-jK7gL~Dd6Rmf9jIq2ctAAHXVG5h{y~+iL+y^1CW74 zh#HMWK^rE!n?R3(VG=!xVPQ+{wYA zJV}7T9TkD}!Qyb%d->eW@2?NXt;av!_Ze@fQHGJqqBC|+c?LZ zIa@4qrKpz(F~Ir0xbtN67jo-vfsch)j94fjoOVVNi2y+nil3fC> zkyWBZZt$T%99{Uv6@W@zPNguiG#vWIUM{>ltg+9lXwUkKmv3BpedEU2<>mF((WKfw zYVGr+jFW2Xu-YEAj%brqSOByRc~K*cNZ`|HBsgs~Qj>V7EKDty7(FGWl-NpdyWqa~_~p>H)6611#bY`&F&(y{0U{J5$fEElVnc>66y(0JzW5R!S&qPiC=66YK1D*lNuX9(--4T8yHz7U zzZtP)ra-G=;nW(LL=v1dBtEo{qGEE+t=;eQ%&qR#D~_d!FoxWonNhJuyf75bh?lEm zmYYwj!#%oDRF!LtWDFK-5gC*DY`3$2dw2f$e!I@=rU0X2j>_%Y^$T^iuf4*WqCI+~vXZFHU!P^Y9*P8ZnD3fFSS2N`WDAliA?Ffi5s9BM_^6 z$yO_Np*gLjaBK23daNa5Lxn?q++b?S^P}nB!Ss=j=0le3 zGk=Ce@Kk(2@S%;eoTE^rC1BOdRD=sm5pXS89#A&ur7sP5!3Qy?`gr_fX2N2m_ds`w zid&YMq$$X8xyB*O0W>~_fR@@6OL3&&luk+Uir8GFJ1WsWx#p8=CP`=gkac&Xt6&Bk zGbowlO%K|DIUR#hWb+&=+7=nJI^bYYXW5iEP=o_j0+z%#^@==7LYwKUhBSeziG4JV zvn9^lFfNOFu#~F{nbL{V8q@HjGGD*mx(UhxEkg0(;IAA{Ot7X*}I!;CERygR_0N1?Q z2q~B(9HEFdUS{f*)*MUW+AZBVSgo#loCmR@sJ0D4usWfJ&hrmorhL>6=_}&D@suLjZI*vyPbB*E&9V#e01;36?kjooU_i*c%p*PcCJS@AFl1BERK_( zP8YqKR*Gy5ZWPdqc#9?ynTSgzND9aMT$|z~(}qC31wj#HXsi5EfY3ptrl8}strRw+ z9~8m?6tNPLgVVFj$#ByY6-5fQl?xbHS%9-5JmcczzXSy-&i{Q{5hV~}olzysNxj7r z*)Jn|C|vjuBY?D_Zj+@2V?Zrn#FA`$rlNtvUPDrU*jz>lVpEe053!b#q!mg{s$0n- z%w(Cmpg{kSiq*JaayF?(2g~->qS{$hyYuDltU8>x#xovTXY+zkRUpc& z={Ul1VfrB^r(7dUKY+w)(yC8*i-aw+4&Y^i^TWw#b2@ukFAuFyyylcKkBV{vj7M>H z$6LqTnB433<{yj?k9NAVeePJTo@_69M9pMcZy)ib(-x-=yyVpJr`69#+swTv z42UwWXJMqcRV+ByGxwYb>s@VidA%VOjd~$c2@6)~l9G^;n*pEF4Y4sIQBx%H^;=6gQjw5w;%hsr_c?cHk8c)1wx2|33f8&kbAAPm= z;+1+b8UOCH@lQXP-o97w>=GhWmxedeH3IFkQf!6nUBXjX!N8#yrBefS^U!+7N<`7r zGHxQIZ3(&}BKEVb2^Z4n+PTcnR^9i2`KSVH#V4#4Vn{276v4zU#yPEVWB{v)(1a7I zS_4zj(%42dZQZ;+eD7&>a{0CIUAX-}uTLHxab}&SEQa;$7tNNg{vIe)#g#X#YG0x zZM0q1JG0i_q`rSxt?+=bZflJfU^4>kW^j=Kq#iLu6w3nLbjF#$`h+_ICao#Gs5cY~ z9J|mf;v0xhp3b&@^Q3cj(R=4g>-*PQ@4Ynp5AQF2_Gx`I5^k5-;6Q5DOjR5XT0lmA z;HE9q7h->jHZK{9ad~OVbTK>P(r_4c`h(tZb+C43uy(e8=Bx`MGcGBe&Zm2AN|2MIcZx+(j7)ms)Q60 z=ill|wioE0GAmf5D%?u&2PJ_^-#PE{yd9SQB`hCVNuLs-H!MvPh;gG#p^~XxV@DEG z+;Sw95`=&wJ9`65StSF^p+*L35v$SU7P?AWby}>uU=i}M4XB2MxQbcX6K?6Jcpum`LB_m3( zLot)-7Kz~A(u;t&@&|iRoFRlhVboTy^aydv@;FTGARE_+Vo=4nDXfVVcd%!Y(*h_| z^HSDS{>6JrkfV@*MJmghUk<}bjxnZX%@lVDu2V+p$_;O;tG#o*dVRK-9?y9zy({je zplv3M^%yEq>J$&23>=5DqASALqh)Xo>3Xl*7r2~^sDTQQFPhU*J{iS`-qLth3$O)+8*V;SQjfC;iuL+-^?&O^unqH`w+i~+WcqsvsmqL!u*h|3hz zBSzsg_I$(N_a(rbHqu#-7cT;gu1SPG*fV2j%h(06G2h|MS_sKvN#U*~&Y|-O>Dv%jfORqL8mM~CB zc4md!9FE3NPKQ}bV@01s?3WQ9JZUR3hcW({;4xy0xtv=X(@_nM&K5MG0Re9HEzj6R z7lSw*3C2}2WW{&Db<#lz0|6?O4#3z{7MHY%TPAO$mx?qJvcs8o>g9VTw zW6I$%i6g``*s%1=D#~Y%>dt5zLedOnOEX}#io3X3Z^s8{hCA>P9`;fo_1TNn^~?3{ zNsC$WY{YFCJn9;cGuC9uz5c)dzV*TL_3cNk`LWP7YT7}{raBa#Y2DrcLscH^*>jWS$?&5aNP-809si72!5qtR*A!4jqB8bwB)PBg+) zCSk#`z*L7NH0u3EuYaN2yTrT1j7EJIRmGa_$H1a^DO7$ERyMmxK|1BsCqn#@S^>#w zGWapT$Ua3SeL@ZP&TCV~q9T)w9XVqbiZndUmfnl7x9_z!&UP=n&^p+v4|%!_Wvq`D zju6F5&o|tQ5+3V|a-<9@E*zt}tZjBtkMJE_zd5h^vkyM4_qUjpr$L5~oC21@RB0JT zvO;7mg?LT$BR#)Skdh!YAzA#$Nm@Sc1%1I{Cs7C^A#mT)sSC~;5ZDAFoYLVnVK!OFnM6VFTRX+A; zb}sUk(!6wY3mTDh0NhCU>#e;zFI|0W?ZR8JOfuuIS|-(p^Ll?|T-agL8M~{$1r|)FF=DV73N%>AO*R&#t>GJk@ha2h zyLXQM_GioK(e&+?+W+EK{~Om=zVd_ik8Vx=@$Tefs;5^)+4nVmR>=THo*GB1hA}xz z$Tgo1715Z+QdMlmY+F<1@6^mw*aS``EGeulDjU3aF z;Cb~?KN!hQf%Fa@r;Ty1^ps+NNPlG$ou*A0zRbwK{wlz*m-WI@gadowk#ZDBy_Xea z>LDrLwrZg_1p%?61tZCE)zr4ptIR~0Z@Eymk&xDveN*_coRH!;BU>^uRp2y)p-Q%- zs!Luo5Dm33AYgnTG=yp^$`BMp1%qJ~&WgIH2U}bv*Y8(n*6Ix|1fB5wF>X($Pl8$l zi3>T7U}Vmk_sOwKGs^ z#KW=Gg=J^g^4jf)HSkjEnnwbB9(Ae;<1EkB* zL8dbyi!#aK+a?-U*o-*!bH0NkBdElm@EioII0eCcn(mAR-`HpuR%l0(EdXx>@Y+$D z4u)BrQSr({ShuI!Kr->{Q--nT+2>y zGs|TJ=sORYtGK{`5YI2Q7*#R^^!*l$jWTt!Eew8eO3Vwec)+NaZlZ%Pn?w_BrM|@&&YILEtrn$G6#bNmELh_z zufK-}3=3CXLRru=$J3_{u5d8q>f`xFJ?iigM)*@_I${8ZLs^W$=%0KJEbYlL`(>ol zjVDD}iUwPOS}Gx8iggniwi{x#1nE|~Tn?&lv;`7HY)BXx`a=SJometP6pDth(IbL^ zoo+-$N-|p(My9WnHM$!B^7gtY^n@9j`PiP*=;Gc^9IlRP0Z3yi0n8Bx$W#!J3@t>9 z4Jt&+R=X>f#~0C0u^$41j%)z)9b<#s7%Idtl(h#X1_Kw%01lS`ulPK^5)>1F;IQJU z0z7fF7}U&@Q~-^C6@j2Y&!|x$Y8X;mQ^DdXOsyp)HJ~W3?L=zMe^{> zmBF&TvRsUL9u;@@xpqnK!7_(y%wCsmHK2i{#bAY7JG6#t%lGb8AKh_r?!W zjTUsMTer9CJ9o8NhMTbd%Tz&Ef>c;pig(? z>NrbSvk6e1-ZRLch=$P>3ZoTv<xNns;wP{+nU0O1uqIYMf189kPSjU@s?mXN~IG!7gV*}Fua zQWo@(5UY`E$%v3s_DL2ZT2?39i|vQ4D=&2}-CS^GFHfETD7*t3ZW>96Y}8!Eo`Ox9 zhr%%ap-g?X&9DJlRBPu~-u}{r*ALzOsJ$E!84{?j3h|e+qH-_3Fe`@~C)MW06zRzn zc7%}Ne!*!@VTKtX7k}BTmRj31f9zlBG6#ds^DlJYy4C*Xm+KqPRmaoWFYe5K{=4}n z53Bt>##7*=u`4{SD&ZP4Xy%4HfC&J&s(F6=RgIv;Sa6^Ykz`RylCB!i>UX|vJ@~P3 zi7tWaUHMoiQdcR#tii=K&bf1{u-~ftHnxr?vfdH7GEhV7kghPUU|fVpl~~XeA!Ase z(oqsSc&s~pJih;S1c@XSvB!ZWng8SCs|WnX(SP$ zJH?M+?NBr^5g6o%U6r(n%93V*P#04a3e#0X6+)OWLwyb6h^*))du2!?WvnP4?U&N- z$jknz5iUppXjaM>Lg2|LiL@;4Bc{9BdH#C+mDgLZU0Zf0%O8I@z4NH`(UVEP*ZJVp z!FOM&Zd_;$yd4PJ(cMQ5fg)FgrtuRQgCt~w%0ZGs6o$trU2ZOD>>ASm|e|zWTcMrM1#D%@^(FoQy zKgtUZ4B^;|K?tjcYD+GLLMnUCer+E#6SMmX=L3l&CbnKT!EysH`D1?AA9T6xaOfpq zT*k$lpt<5=?ll)hk_cmbfmFKk*cE9Bt#Y2>g-lZ#v2lvqQU%^WhzjB z7b8O<-b4gm#a=06$EQeZ8z~w)8b%7ca?KEI#<-8(Cl^9XD63*B7`PiiGO^C2YHCZt znC2&qfc3Yenr!WZm*)paG!R`{vCTy+c8eJKs~n7}JoLW~TUpX^65j6d+@HaGZN0vJ zVfE|l^QWEpvthLtO=zc(4cG8vCzu&>$`-s@);8b3*1QF)!aM|=Mbyr0)7Z1d7lM$K zfXtZ3#sqxy(fwgPoVR;NoGQsp%~%&8C^lSu^|`gLZHz|GPfvEM%_p1Ql8aA-^)`2*O6~=m}w`CScF3bkB3D z-f4;F;}3SncNX=&Q7Bjo3NS2kY=qHfN6_(SkT-5k>yj}*5R06g z@*_QUsSIANdHA0EEEBYO*W3IkncEiNTc@MdqmR3#Mh!jB)Pl@QL zoMTf(G>4(e!4b^%Le6Hnjs+o3+giS;piDABlU6Tq)lRFx$_u8|UMH3)XAS@xRO1t& zjupr@{)t5JFfpc2(-g>toQod4ibY$&SG$Q>3IUpdQpq8Z$Py~_;6p1#8-k`$1hUY8 zHZcbw94R6ic}tVYbH+BRTwDh=3@GkRiHw-Leb0a)4VZ{Gwzxm0pVhq4u^17}DAcN(J#F zAWPLFCHCUW5*P$ZaH}2UTEq{3YATI!5D%M)L!)YOf%}m19nUBtMhFwD4|&>BNphl; zyp$~{!3DS+bQ3j)7~!D+^L}Tedon!SUk+}z1~==I_p8wsxBSnmF@}PiqC9e!UoC@S z)qt9D(5m+ri#v5am{+_K;!3xDrPDgs>a6op2T7Uu(dJ|Zh~f#&*p&!lC4;Be^d@z8 zyzHFJ+XwUI-m==6%y*CK!{hmQ#FDCyP2+wR$0-CBp4L^%)hnGBZ(*eA@wh!bP=+x@ zG!mYxp7~!ayKUBHn0;y{ht$4B#wH9(nh9OaNMgcJvThw8bsld4(c2Yxl&%GklSKhd z$O{a8IBKGuz|{CyvqU`?P2nv@#oP+h=?{qnY5*^>SWXU>Q}AC5!*bNSz zR^b6N?B+d7`Uo0~r3C$^FV)I#5BXwG@0HyAmVv2Y8DVhuUAKF_-R2RimUB5BrEw&XOtNI;OSNxY<%f;1veO9`J%jkIFw zqsQT7*yFjKNAs19_L)nqv(ME#53Db;DD+w&43I(^C0t{&(*QCX2OfhBgM>t5t00X+ z_vXv3S1&GqvsFKR7?!DVDPPQC2{!6z(ZJm(p-xt)WUA&VB?&P@(I|qO6kVkUJ(T*3 zy%_F{94wTUpN5^` zIRo4o&woG?&n2XGnd@5?NT6}0tg(`a5&>-j;-d({!&muq0jXl7K~?jJ;Q6B;-n;tW z+*tdAjp6m)=))79XqE{fHI!zElY~|lYpW;zY0KCVbP|QgAqi@)X8hXtaCE9^^fRx) zV^;KT%4no?4xvbZrL>AAAY`Q~O3;vUw_?eYoCIV@N`i^f(!5CMVamZF(OT*T&7Arz zTf^$Y)$VI=c5dCAt#oJi?o=QArn|M>p7Pq1UN!2@e)PM=r_Xxdx;1$FdiS{%mfLVf zh75KuDiR#39YF<^@)g^BlL)OesDuV|HG3nT#Wnr;M~e?{_s1u-gPbJ~s_E{}>;LlE zB?Mq?~V$tJSI6Z=6RY%_`NBq@%)@WC+-(=<6o zwmZ%`g2Qxq@Wn`nn1J3;%PBz zY5(&blOSt3ql~=pl*}^Vs}}O5tz(st{4lbKBc1Yu$7G);fdD z(eik*JQy$cMzgKya?jYY0OH_?gV;%^kW$j+4HwxZ(u!VGPAHRT>73ZZAkHj8c&d-V z9xX)-xolZ1ca+Rv&jC6c-b$P(-!ZU^8%&s)Q}I?oDHLjGX?%yy5Hj}7I4(X@2?gcq zL>l{Wve8GE5`6HF8ZL54X?of~x)#96->Rbd5a;L|meBfz9HcQfV|j>qBLx{wX)M|T zr(P(`r`N#i|MZJPQ zk(o>>Pp5g-a065CH%2U$Lly}NLgBIq;=(G)@eOj&5u?VQ;ufbVIg?Wik5N>BOsfVA zwNS_uDPw(1LDJ;R`bZK5WzCkM(*0l%nAJQPdbmD#akYPKG+IC0T=ZY+t^QGG@@O&N z3KuBtnh8SR+)kaC9yxP?71s93e%f)I&uOszMT_+>dTmah58Hfr**miyS9t9B>>8b@ zkiY{Jd5|g1&S=>_;{CHct7g97juPJ!%V|}|e8?yZCzJ%WRYD+)9Q)m?*V^Y+=8v~K zvtypHD@W|fz@^n&>911lX9wV0a(ORt$0-;`t%S65HP7%Hl=I1aK4Pkh-)wwSMGPhV zjlq$q_qCzzfOVWwI>`8;(lGs7 z`y$}-Nh|M3djwNUu#w11uFi5paleIU`-UYr1|I1)S=gu78FE&z+u?RWPdh`6gF}v= z)yf2fL+if1Yog{fjU#=jI|YYu9Etn=RHY=hnCft-PKu$raiOD4z z`-XLjd)H95u$V8qa=rwuCQi<(x*mJ4lSdXhpZKW$>F0%I}uJS0a*a`>+-(IQy{SFb*q!#?LGME=B+<} zY2%MC?R@Zw?;f=c=3Kgs15JdTt7F7ypvL?a+@z>uQHmt%2}f2fipbymhDv{Es9hyc$ofu^Y=? zJizsX$Gi8ArayXk@@F?*`jeNw^KZX4{%>FV;BP+t^sjG^KDyr-9Xo4dux9T}F?w09 zX!6Q=$55&my)}W1W4}PrS*n%p&%m)!l`2h~21_%Jq3CHxyyx5s;D~`Y|8X9*KkRe| zh~bfPKCXtvJ|7p)B!RAZlt3B&p z#x4{m!`8~tvl{U!0ivdC1duzJ$WUbp&%m4UMj0zhT7dFHSrpaspjV!|LdY>G5F@@= z$!z&M-t}S#VL)jY79H46iqhTF$TWa{@Cl^x4{si1-hOHAJKtRU?#1eN=enQ2vGMFb z^*m>gYjmxZ@(fF4#9HVc>yl{aXkKg`K{A#%|JoyhN=D$gi&CW1Y}iV~?+o>G@oK%c z%9~fkw?1BsPTCW0W#pZK!X=sy?(Iz4- z_$etVQQ)#0bXZu#xFS3?xQ9t&&;1-k1Nab-itJQ89{uu4`y687BbvzOr*EdAP?m$A7E{|~#u23BEdVyqG7T9sw0he*I zE+|m6h6$Y!=Aun-{^Jb7KaLPVJ}?-3a#4%+M+HNHLIgtAI$;7FZ9%&tSIM}r)%g)@ z;p02nV5PyM0rSDq6twqeq(V`4upXY`RGX?%4%>QFCxR70d!|MlXf9!3 z2lQXCqHHtB5z%B3xC6yMWk$NKA;`SY&^an@6`6nwdl0bPVHJuZ%HWx5=IR83R$po! z2J^Nv>1_dKbP6N=B>6(+-*e`~1k5PHwH(%L**mdSEE(ie7DI!amo2eVa+E0xvfMMm zjb632K0v8v>Q5wFk5Wuh%jJ+1OoiTwH(jLRVzO8XUBaT2D5zi_V{nv7MIjIe$qjEU zsp;h%Mt)0R62D8Xyp6}dRT|URE^K`F$^l3eLv+BIs9{zE4__xc}zQs!sY}r5C zUOU%)cBkA`Xb+z-wsEj42Qk*B7v|M>yPQ}fcj0}2=)%5^iAe!WnEOB%vfL+&{G20m z_T_UDDB^;MSB06PH9(A)m^Rg|lfCNm>dPPw<+A@ge$_v+Wu&97^ z7U}FlCes`vg`RZS?Vjm$&vJ(F3q=wFkV1z}{#hiuvf?P4fe=pdO)PA>f+CFHLW(qF zN-R>DEhc}%nhbt%Z=wrAXi}zNEle7oqUVEL7vKVmL!;8apj=i*&#L3g%d=NnSFYC& zPkdWoILl5pR6TfTQpI3r#0O9`5=I)tz_D%O?C-4o>Z|QHUsxWF=l36$>pc``Yvo_V z*qx@r2ofn-*^;9aMTXMFYO#XIA|cMNc8*;drpmVs;>SxatNQGE=e3sx?|h~A_A9-O zmGP6^(f{@C!T!E)V#2XGa&}xc!@d|_EctnFqCX#pn`dEWfZfT8; z@^G--mMig9N&(EmF~7Q#DXXA|jcpvVBG5W++(MrJ(!$vYrk*n*Cd11loUqXb0uX40 zg**J)ox?H`mF5S$js)g44-!08GO7sX_~7y1eRTfMZfyME#rpr~%=Y%J{GhPKqoKhT zXoT?vT+E@)ijuWJ$#C(*{S+iF&>mw+Lt1`vC@O2B%u0cx0F)&|586|uoIE0f0;r@x z$s#j)g`}`?Eib|V*hsag(u8CQ)xc0LD7Gr@ntS19_vY)>`HS=E!SvU^T|Bs3?LFzR z?8U<%AXhSeu#xo2N*+;h`|k0l_eVcI*S>zf_v(f2ix*oLR@as&5LVo zaTe$LSY`9FI~rW>5K-Dj`-iyOE8^!nTX&dLgpo>SrX&m}Xqu7wh7t9*v zZ6@PCgTldzG=vD^W3*ySh$&IZU^K2e#iOvMzxJ^YTqRO(;{Y#R<{CY&GaRnFq;K;+ zuaoEOzH>T)JYFw0fWDoBYubc)){8`*8gi}ZWlv>l+yV~hH;EXsq zGTP&;@PJYh_N^f7VpulpObzv;H~?9cT18ydot@dEk51n24)0I7k9#_w&3VXMGa(G7 zGM3N42&f=)SQs3!0ZCEPJgp)aU?sVs6VDfV68Mbph!*g8V^i+t7z|p2mBpF!^Rskq z!#eZyi4t}jx@>mKzC?N6Y;)6gS$wL;Q}&HjW&{O@lS)fsEU8dY1%zVA?eaEC*(8~ zmv3_>hmskyi355TP^hdBv!p^arjMXx;+Vj)wpcZdCqQQ8$0IiJoMT*hF`ToGacMa0 zh-+9G(|I*QPK85+schxYOYorOm}iaJw93kHp(vf=@qSTu%yYLHC8*L{u3IhTfeynOb2SV}>q;>7_D^2%0K@W>Su4uu{S6{dhk6)bTaaZHhNRf&D!T$kL?|7FfvhrQR107c2qVW z1H#!=27sAQYiU#K#(IHsec>jr;3sq)rg%0|+mNX?>{&>2mYoozS=xTHv0fGya0hl# z`=%=DfjAhhjs(KPNVYT7PH@FQks)GBn+x3FRHSak?JWQRKmbWZK~!+^!5J!frMwoUpO7 zFfLOTzE2DTPrIhUvHIBCL8OCt9wA}l>a_9Y4lW0|;Ykrg%JGfnA{iZws8kcgq?LC> zMG7bPAZDY6%@P*_2ROn10;aix1^J{up;wtGCTel}y?&a>zd!Q}x=E_tQ1 zBTu+%CyWk0LKhIJ;fTgYyvm6Pc4Y(Sv(UuAhP5)z-7y-&QKIKAm+{FyYk#i7m(?+c z+ZN^%qlcAveSjVe)y}@37Z}>?s7O&h-s1@U2?f1xDJb}+6c*svzZ4+ZD3V$V7LGQ0 z-E%E2Da5n>}C*iKDkkDtS;w0R9% zl@vjYTnr--)ReVkY(-Mz#6k|W_0+zz-MVz4{pQP^cV6#)`Fge5o88+Q{pBwv?|xiA zddj77_JlMn#movb0)PTe5T^OTBdS(pk_n9s07=S@nNN)%Qmw=Fi!cj^payeCYQX?;Z%WypW?#FzSd;vcs zaWWi_xJIeUC6~%psU(#|H57XgBmtstE^yn^=lA>1eIO_M0{iT}*6in8b2YmQgj^&O zVIdy}!C!DW$bc;jwNChoNuA&ZR>llecy4PAQ+xOnMQkK=IadVn)B`8lE6rNGDTJnK zYSRU_7(Kl6_aEH(@QpKH*;sq!%;Ueg$-Re$t0VwRz>BL|h$XISs~SHPz#sxj)V8T9 z?ckydVgxLp(VbJdYj$#qZ91YAoH&c45SHc>4q=p28Ap!TCZyzByyReYfaHR}Sr?nn zxZ~i=^GpTjCr-|WJL7l%VS4kU*5d~(BF2CC!Y(@^LJa%5q=nh(KzifR{086RxiR^9 zyR}AMU+o@U?=UUgT<$CnuvKUCQ2T{*rjrl&$mb*O$e22f+M93f@UO+kB*whu&rFLn zE}S{fE>;Rm2$8<@mmdS?aXucv?(uS;(R;Vv`}m7b|NM8Szw^wQx6Zx%&n{m2#}}^u z@YCymb!Gpfd-J_v=6H_vB@**NG+~YA8p73bHk!N)lXufSl_doc9+A=ta3Re=xv1xl zw9K_ow4#vk+2^iNMl%dSe5nNUL+CB74pz8tf@jc1+!exWoYTdp^Co^mUM5oWyx|)^ z>qQSJwIWPCbvzkS-8trDNX!t$R;#6 zfln+`*d$4HLM2C34DHB}4BVFp+U3^zYWvwEN8UKTdvDr$cUfY-nT8(S9-LcyI$Sw_ zaF^Sa{M;qtsa!D*FIx+YkuAQn-6#I6jDh1^g$k0!Qpx~BOIS%#kY8w7M0xCJspLTu zj-~C+a(i>Nf1<}dqLcRid}n8VYiD$AIDOz-xI$H87$lJp^%X@n#x}gN*DTn9o8x0} z7X6%Lbgk=nFLo?vq>`J))*X{9&1LrxYgx&3W zY52Tpfq^?RMd5{aaB(5x>7^we@lrUv&nXKAszJXMZ6pZa42y88evQ!(3ML`KVFrju zPF;r8UV`jE*13U3b(Mwrs)OWiKVOFj7D^zXpGq^Z%7r$=x$irPy|R?&*Fk1R3Mz!u z&S$;g>lFvEQPYc(-b;x=5DETVNpez4UQ%rvmSi?p?hT)L4+Zfetx+ zHsUN3GeB_D7rivLqh4%m<4z5N84t9lP=Oug z)DSk3OUW(*iX|z3I%xUJmLeNNowh5|nK>=y}si`f) zbk2(tc#2>+p6zX`E`Xt`9;{iCG;}4@`01| zog8qj$yA|OjyE~5kSJ;17arxtrw}z% zbSjP_1@jC|L2sk`mjloug2 zP%30&7F3roMJxbNK(D_Ka~##xTxd%K3mFX#B?>JCoux6ty>s$d=aq|{Z(MG_^mKcr zJG*js{PPbdKmBla{U%p0xeJDszmQiOcu2;~00jd$^x{7ykbE)qH{k_fPA280?1fPu9K2H|BFou#mK@? zG~P^G=4)kU5tN5%UA{qh!6~Jay0f+Y(`%<+edYL@&usnZZFQ4y$m{lWKs0py$zHQH z!UAUFXID99Ax&9R!=M4mDt2vPTD%Yx;*F7tWq?$+v6a4w&T>?w>>K}qBBc^b@jMeF zV8MuhWJOhI9XmC+_!XXurezOre>S@E+xhL!d81MWIgSVXhm|6%bm>4$+Ds(KD#}No z<8y*-#s}u_-nPH-{jW@#7}HGV=gxP}oSYv_M*sFFv)eb2)c(#(0wyq8mMS<}F+?Fj;Ir$K40yfINB6IMa_`f>{@~=dpSk$oy?FW0E-rC`ZoR|HNXOhDK}ti&q-1{N13$b4eSSGJBFSy80-_7GK-r)K6%!$WkTXS| z#G>5G!@EZSbXAo~;)7n8X#)=)NSKm-mm5lZE4=WTuO_zU8+PY@&4L989v~;)us|F8^0^j|y6m*=~bFIzGh8dAZ64&EF3vEe4#GY8%?*p>tV zJ&jwXqf8u*2p{y)sxePF6yZUF78F7&I2ebQV4mJsdTy66DuqMa1oAd9?-HqC%V z5E7d#b*G28!Z+#O+s^C4FbIlhC@{f__E-`NUG^FoT2P_~Aa^ohLB0j5Li|&{&C8j%A{TcN8Sak^%7c66jfJVXU*v=x!tvL$gw$gr|xa3uMxeV># z(g83|(x+f#6#yxX3I3v>6exNURLD-8Q;4(_f`T1+qr!Th*I4@=QOG$6XA6}^=~xrX zYA;=}=xYR44uAo%Rmcu7Md!Z-h3iSxDUxMXY1_0!mnDeB6w*zi`jekPFHTZmb&}u$ zHa*P(5(HCxVM>uZKU$A&w>FQ=R@Ym{&dzUrs+4G77)Ynq#W^inBR1z^3xHv01>IqL z+WUh`)8oC)$2-GMKCOfl!zeS7sssN(F`Z#(G6UzPDK|$SsHJ9Z!3at;wWvW4JIRQH zx}*+L{pnNv*Dm(nd}(&^G%GT#&+bfq{?Y6o-k)8+%{3Mlviw?H(P)g0qvcq;;t`r0 zCI$gk9Db}!Cq@sK!6GHvcu`BT6HJ1Jr<)`+bB?o*xG|nKH7FEbNab-9AwAEaV}7oB zVPX+k6oxnwC<>J}g;7ZN{@1sH1=X8P*~E}UhHe~(BIWdvB$vIPTp9n_%cs9~>eFLK zT3ZhmeS{JfDRHramIyKVgJISa+GA}eeh?LT{I>A4qMD@R9L567Qf3cF;kEGY;)Xn_PSJ#sB{6J3qO4_S?^2{Ql)j zfAakE-+bz`AK$tDqc67KzdPL?GG_u@N9))6CEXRP!X+=teEWhW|A_dl$7G0B|5IEP11k_a9-f z+)=`HREDgyZQj@BCo`x>KFY03s%2~;J2Q6Iwh46Z;&mX);5QR;A^4{-2*9QkT27BU z5>%e%e+&_WveU+?5rVC;cxpE2?RcMU>o23 z22*uIkbNUA(4LswxeUFw(LcG=K7^O|W_NZb*SE(v#*>E`2SBVwDhVifNFFBWT^)L) z#xTZp+FH0X>dzbxmly`g!D;5o7uP#(FQIgW8QwRFM`-onm~v1!wrTU@awEUq80m;H z3PTP=TM419ACq5%2 zLXVpOE9;UmY(7H4HkZ6OL07%22bf~flKJi}fRl2D2$Yv*Hso@7vLjsFy$np+UTID{NWMgR&<2Y^BJPZ5!De#7$;@+f$9KR z5+l5vrzuWd^^R~6%f$pLa1_sUf}h7JK@m{_h!UwfD^qvu6QAK{u5%fo+9M58D|?Ap zG%Tc*nfg&kXhH*_V6b3{=f$e5OtH7F{&pbh$eN?VdNl6NeEEd zjLIVqxInqQS2nb5YaPYVJUU1#fgS0}o{hm}q!bAnA&|l*Mln4KR*603A5!KRCbym^ zf#-3-?xD@W#r6I(-TA6H2RShY)sl%Nc-oHNNA1zyjhBw~=9fDA%k9CN-N9;m_*e7R zb>~G$jED*eC(`qlmsoX_%9?|sECuPdD5D$|crue4H(%Twy}UHvpN;-{I=IW@iI9-7 zt-}NN{zT--?mjPzuxMtazlcNdA83dlK1%F!Dx>M0(r2;2M+5#awWpBuv10Z zvO{;hruCvV{xhQ!-bNMguj;M>&a*2Mzfh`A1&{a+m=Q>iOC*FOC0QZx1Z4>${cD-0 zHWiKE>ntzv949l|+Z z!z&lwu&KridPE0Mugq#-n~xl2hiC&a$fcgav1?ddm^pQ(_tlqr-+8I?%<&n0(Z~1Z zKmB0-_WQHjcj<2J1bHd6)HN7s3)&>3_!I8xDZALZv<9d=6j#MW%9STn$<;`ZxC(`w zDJ%z&@HDmjxP(_Fl;!{`Mp)S)7inye0MTxYJWwNndbv(;XOBwB)EJ@dVF z!s@K1!e4n>Zd%l%*zZYjq(R|>esAwrpHJSo_x$T8K7Z}p=l|gj%OT)mDd>@dBugR( zoU(=uMP^HMfQJ%W$DtS{r&T4Dbbz#1P`V--i)nxqP$ny>2%+whf*zjJHia1z1(eJn z(d1o-%1mN~1BpDE(w?tw44%Eba`~m!;bX(Ct>HWWFuC^eeCw`X=J75jhF%ybfdvsl z-^Z98a@0JqE)yx0+!V0FFFIC2aW%wHWu0r%o$bw9E6ekx^?7?scsq8iW-dde7(>)Z z4i-cckapvlhL-hEgqn0jWkL!xJDgZer$Juby7u`y_x|?Yh5zc(bKgGw-1nZk^w!xM zzr6qHk8VEr?XAhZJx4i^v>V6dt;2_w&YnMf@x^0jFKiw=wSM@>@-nZ-ax$m25o@&H zx^-jk<`;X{uI_w#_1?{E56KF&8HRQGHg|D(rVY@9k%~I$YfY|Xad4gm8V%>8gGpz* zlQ%;5`YZjxk^cP1d^(&?nf8nsYM_C9rKRWWn9>FyWX5y&<;)m=I2&})+G!}u<2+Vy z{P@ySPj8$(w|V^d8Z+DF0i)d3&i>@)jopv0+`sX~<2_!V=4*E9z7OYr4y*`yrnFNQ zM{@THgF6Q#X$uAbzCfXvUBx0?vsX^GXj>TxG(iFu<*Pn1L586`eIcGjA4y>x#zFjN ze5lQsF1T?4fI02bWdC5wYAjbBumVEZmeK+M5gURK&{ojZVitPHf$TXou(Tt`skFof zL|oe{0+0jO(HSxO(g22p)AqyB`#*gA@Ap@?cE)?}-*4@2^EjyTq9T#0SHi}zi{>d_ z5)Fe;m%JMs*(rDlk1%0vam=9T65yY8?EDiar74zoM!f>i@_U2!+FI|(a_7)&x|Fw~ zGZp;wU~-RpMAKoArb0Ee={KR~x$P}XAiWT~1`U`byfC};F#>KC4k%mQfArYm$r z3Y|!;z-|Q}3OYy(M(0u@g+w)fSf>b{#Eb$W4ZAoYgS!l9&o~6JaaIPc($?Xoqv8~! zax9)V!dM9|1#t>Tj`=eW^eMIohzt~=9Ao!Xsw^C74kiX)2F36_vtjU|Wvsx##sdJ_ zI`U%gJW6I7$Z07BD#)~lYI`21a87$H&xIN$nJALEmWwpNB)64SeD#bZGR7y_LYWuO zJFcLmbMKtQNrp8n&{8%i!4!?vA>iSL4k)Acn8jAZT!dz#lc1pK=)mNyS@fhT#H?xt zG_ysQ>!?fXf)8hUhUoQnC)b?3KuRMqfoC8XBe+IpiYnM}hl0c*?A22%fI&VKQLxNV zQJ#9rgmY#e7jVa>{VK}h7jAE}Cl*Yp(E>s+upNLTTQ8)AvsdC^W(2_j5VET7F0)~b zRH`}ESdeG)oXkgM;6oO#p@)6kgB5pOCrZtd_&v8?}@$SH!U)K$%3?F|OU2K`f=X+GsQAMWh)PUpQ) zW7J_zhz$&Uj_{ctAXul|0mB0`L(Dv$ZXJyI*u~>1U!~(wgbd0Vpa)WXBMKzQu~7=0 zrhO7r=tV&~S1@d3-Xn^?S$pQfU`0aX1porgj;Ih%e_0e`;dx5PIpMkZ(S&X&Pm){d z_ttpAzCGu{BZZ1o#A6c!K~N>c0UUQqIQwt@K2vf#}xW#%o zH04>JKjMvtIk0TQORBt&L%p0aL-7KDs4UHNZTyqP#QFMjO=LZ)B`c-wNIRAf9Zwpw_j^r zILSk;?O%O1``MMryPvl2-tnclCI3M zeKAA3LdZI0431J(rFI1;B6(n5iuTx2*?9tFc5iF%$Dcp<-IK%bzj*yWy~7tqi&Pkp zK4=K`O%g{b^#d_l=9nrW1z32|qDBHL7zvdg4absD+cZ*X-Xf*VWw9WoeQGO%%LrNv z1Wurjsuai~lu6gErRDy)XP007^5DXS$yMmWR0Q4bEX%UPr{R17hCKvuSy>GYOc{Z(%$QZmOW3YbVBdx;KV zh2_vnNO>9vdmCDmT`;i(<#5$kG6cBxEQir3J9i#k|F`em{PFcemyf*g*4gL3dGh?X zPF#Qc+~6JJSuth- z@bcv&uYdLAE3Y0ue}3)oVdj}Uv6Ya~TP?nbap%tN)vLRoTzPoq!v~*#w!Oog7FJAq z7^w1^1RqOsI0u#@V`P5hPF~2|Kwt1zhSt;^*9m3uR|QyQC)C#*U|5OzK^MNc5Gqnq znNBCzgoYi$n1!h0Q{G%2MD$@N182C!tdRhVh*hx?>YT>pB}th*Tq6mZ7$y9H9%RxH zTuMIWgf*e%=cy2UhGV#*`{2RWPp1Fr%JOt{(7C?d+JEFnp|Dcah`=fd6$v1WR!Ipv zY0FTxJOO~(lvioPyJ}JtFrXF^3gKCPt5OwV;awer)!xyy-ihvf`CziQJH5F(`D|}= zeKOxkiUE`MTj*dA%1wK5s4P)z8AX(cDt`1eUMK79^(FW^xc532Q#(3kn;!zep&aV%sg$y5 zMWyG?Ot1A}CwM3U=w8WmxJNmbg2V>cQzt(yOS zt-@t}pRo)v*i)%suoK5D1sDDiYvyM!rek>YK~nNUtcejZZ2U^KhLe zVXdK`RGusgJsXd7{a~h7Hq^xSMwSIy9^?t1;)7^BPl0_Q8nI#e@JSkSqHGM6^VC4C zSoJc@5CVHEQ^hU;!yEtX@8pj`c#SBZnn^+olw{OH0ZEoX835r1UCIm(J;EVY6o^?? zChH*y9}4~FRcb^|*it3`T)_!_S!fWH(#TYU$2zJ;!HbrFC^EA+1A}t+X$hRvY%oP~ zR8*I9AmhXizK8@qK?)~mm!&ud2GQL~5R!192e1q}s-{n4ZJ}ZbcOI*KP|(Fz+-y}F z3hYo{`pD00YTBDGZS*c2TE4v6J;Mi5>0fYj0CZXo9Y1r3#Pm*v4t8R+aCP4L^V#6P z?T%jXd-APIouy-)>Cd{;pG=+0VRD06d(k|}0#01nmsILoLc2$7EYDL4txt!`Yb&$8 z>GbiQ<5)_8Gjy~O=qM*Jw6!ToGp>{d6_`bbapiNVzqz`6ve!P$$~VBgI%eW zY^oBFLV3xGsnudRxp2sAb2fTB=jKvi=G-qtppdn^>q0T4XsAaLO-yp5m{w4>RTPQ4 z=~gY#@Ap^uCLsxCGTbGYRVr2v1Uw^3b}81y&{Ze?TpQN0!YMC1O{olo755bO)_dJm z6pwWkQM=_gz@gJ{pekn23aVWKB+`%w9DoJ2S(H?ONKM$7H%QhY0e@PYq6iqNWvTo| zwG~B45|XC?+EhlfV&CwoO8Mp=B;9Oc(rwCcf&xJ#Zw7149^P-Q9i1OLJKNiB4Y%ee zH(F;m+o#q$hnD9neeMS7EU$1+3k_4|P6%Pm*wwqW+K=~I_xIY*oMFLfetmoPcsO5L z;g%5OVL<^?Xa?1Z#LCQBnj&6sdS^?ikZA-|cw1?_q>G)K0x^PSYku@_=i-I->(9+z zI5$0Ycy@n({-bwVzxc3y^+xM4uf1h$51KB8qn~zlL7rd6`B|RVWo|Kf7-@&tQPWw$ zjw65lGf6=aIjM_R;~1+b(5S)7QQ%b(e0`-14S>ID!H*b1sI)@bT^Iu%2Q>j9|FjVk zyM$3mG_WcqOTTEzB($V$3kN_@Hb_Ax8dAo2`uR{w`%)|sIBUON7fNjvEcv~{UeVecl!fKm{l?*p}hH_1^NzfY+Hom*+DXSNJ_Mt{h@{9fP)Be{ksNy`H1V?D(mb zfAT+Edh4yHPn}+7fXa{qSRO_}BO4_f;`Q23o!vNlcJs||pL(=4dgq;ofAxb;Km7Os z&oMZ-RONh-3_bYJ62loyinI_wE05H`nM1Zlokf@kpiNbOlSW?W2i|Sw&$Y}NdgaW5qP%GJrvXK{{DP;;CF*{1kyqZvYBXvzvmpt4E9Mz z9wC9!Hvgk>W2;8qASjr|lt7HCOiC@SrjAOr#XP;`&e65*X+GM_Ok{UHc0>#6mphIb~1*$QF!ikf3Cb^OV8003?H^u+c?m3Az>%I?=M& zz`D^Qz*4AMN|_LnC^eG0LLzxpFF+=bb%ld3*c8BJ7CU!;4Sgb;i)2Z)GIm}BZG?!& zw3>q>#qicp?~rWH1t2C7Tlv|*=5u2rKwZnI3&6QxCDV*eV~Vgy<7X=3e9iczx$r0s zoE*D5U}KImh8j-@!$Ev96!9brn=NB;7yK}LMS)>qqvn@aty0F_8tjn)M4lF6V#B?T zteJV=sDowiFGa3WfNO=cZn!(F*L5&tI?63!I7_W%%B&BVe7_g=>aff^&8Sh*rkT{8xPcOEVI& zbI$HqN1}SezDw)q8YeKeqI5avW#576v3KKUua%N>eSs@|5>%*R2!XkH z_k|(I&J`h)gCtg^0^cDZ3Xn*Z!poiZ!L)1LOi$-55nN!A36k8xVe-{N$%V>SC{$`d z3Lws4+Ig%&uT$U^6377}e03JH7vfyGAeWrtY**r3ONS}Qu@71^BSJ`-YOXXqfJCPl zat$Y=&Y(~?6vTRI)!a1`!GyKt`J)%*M5@yU{`0`d^c)x%ClW15YzOu zx=8}StMl1k%ovPJp63P~UYFnMf3Gumj%nd^`WrrBthM7TKn-Ix(QdV=)RRN`(Uv~k zY2W5;Z=>$EFGeD2Vwg&{xY8D`PKw74nwnKA(9g|0o!;uo%Bi*Gr+U+6nKv95WG_+`U4usv{LMk4YTz`07AML~;DmDF)0hmsz;DGEnPh%c*(=@0}U=fMbn@gWdF8+=7d z0ecm1He4QDBP)=_P=Jy_tQ;qsL`Zi2^JcVUGt3og;zX&cC7^gM^y95g_woGI=Q?k^ zHs74h&u-3+uC|t3x=9%B82wsW+^$rA-B}&K->MHsl8%UjOY+?>+auGbdiV@Zh5l z6-2>pH*|fmfCM5h)D3@GxiX+1cTOA{-MF{^_Iu+GuFSU|@u9a?ZvYaV z3mR2}f{0@R-j?a3epwM!Q+}8 zsWg_Vs+D1&(Av;IRV|Jf6C`{cX-Lmd0J_#;h4FtGlEnqnElVLgq{))VlpcUnm!&gTPnW%(n0a8Ji%I6c_oN^F0y zLMPK-UG6O}^O%FWA_uLU!3F~irKNA}@i~iUE^hwwfAQsSed`oMOD+{==7=iR>nR2I zz!*n>&YW9ePoG>q^G9bcUflTC|Jz4D|HaMDh+dIP67;$~)L?i=Gna%xrFSBC89QD{ zV~Up6KpzM-i2W$nDKdp^6Ax5NFK_|3x+IHu)j%l#NbQ<=)+j4$ylKV>Yhjc;qAQjx z6CVpXQb2{{00mNgvx}6C9R#sK+2oa*nkNT%*Ejuml4Wb^CF)Sm}hCKMsGflv& z77f+hDJ|K=N&tr;ds$_#Jp*OklTEt*&sKI(7I8v>lcHM86c|Fz)O)Rswce?v4lj@C z?T#Mrjj!*HuMVd-c|&q2u#=(s=7Ai-((X)xAud}aR-}}qH2O5GldCXG48;jsawh~! zLV6`BTM;QUU63IFW*+T_N-{M|C6hE>>UP)vSl;3Z?%-DsP#uw(bfqJ#yObmWcBUPa zv)SI0DVUJRP?3mu?$~jffeglQd(KrgCwR0+oo(ML)6i0A_=C>6m;-A-P|GP80F2|v zGU4fgp#={xBCr9(0iA(w?Q}*2I`>U5ae$9gIHp*DqzXnAY(6J99>EKFBqqBI^if{H zVmT%r-qz43qIg{=(G}v%PkbCDeXPc^86XyPun9NEdZE&(3uXBhA~O@&Gna`QG_4BA z6;$)RKg1IV!D#5mY(tt4wc5pbV4a6!A={%fk z;f`3sTJyFGJ($UCEF0t`Ynxxmn9wW(W1FgiiCa3u5Le=u%N|S%+Vm{J_)@WdaS=nhS3rSb^`ay#09LPEg1U}f%iBMB7fz$RU?x`n5fVg{`J0-=|AN-{jwkz1+)XqgpT=Os1?#&fP^~%?A~Uh4(xOz zaLPe6Y9bHd?_ZdZ%A+a;sA7r@t_VhmrVvGrU_gKr&=4uYQVUb*b1Wcubqpx=5|O&< z3!wHwLX;Ag+`5PQmrkvJYrX$mcQ&xFY#ez7l~XV<6WGoJTho=^-l>%t@9XxGfmY}| zZneI^r1Q?v&cx?7TCJn4-lb0e>27PO?Z?CT!XM#=h13FZ{1-)S5tJAY2xZW_p3~YJ zcJ{_uFA-iLVt*x99Ya({Lk*d=E7bYd=0os<^`}-gFAR8SaJK9f0oDvg_a7fzJD5G< zp?uPBpSQ_*ck}^YP;RUmX>y^P7R?EQ>cHZxVNF`B594MkNC-L|b_&K8k839n3W;MN zIps(h)P4<8P>{RdQCVqj=%l*ve5|D_P>h~BujX_7X4w{Q_r;+>Vj(vhX! z2Gc?XLOzJ;HjU=58$V5aDptg{N*M$XoE6E>g&}%v7W==^QmHG<)gagnv-*)5^63^o)Fi!(oU4E-hwNh3CO{?Wi(n$b8!VfH32a{qi|rG5G2;JX)kfAnnY zjid9+ho%<}jSnwR`n(s{;hD24B=t%H2b$DV|JmmJ=ekXn2M8!0EI+Z)xp1QU;#0kg z&vZ_l;vrJ64ZEI?2E_aSXU<=eqIsjGs;Iu2ntT`|<~ie&M>f9q`ue~8qxS#!`uLgS z<7*G6|K=Cd|KmTm{{EfroqOESLcgUQG-$=P0bsY3E<8r`ECNZg;s!6cv^B_p#zcb6vM2RGVs&{gigKh2*=!9SDKj#ODs3$q(bQa;5@hor zRTekrGUm{nM$rP2qq1aE0;ULTa&f)KJ88(@6vrlDYh--G7e#l64`ypi-+h(~U0?j| z?>f^Vcf5pO(ph?Z;E|*eEg=xf?9_Epj+o79B^Sz3I7!MD7L_A-N#BSU6F^CY4OEUi zh|XHef;8bWOzn|{zJ(xR3H#8|wKv{4^8G(td+pMAe}Cuiesl15zixg01)qzcn@(Hc z^ESNAo9D|MDUqNUX!tHYma!QdFro=Vb!=pThXTaJ=!7xQi%8JU)+lXU!U5tjlX>Z4 z_t_(}UtgPl_8B8>JHbRw0hewx$kL2<#71ItMBy7!{Hmdi7gK96DTik<))n<%>mV#F z0R;smnCoywcQV_%vG>`}ZmoCv-~QS$mbhGgY5GY-jL9Md0w{wnF&Z3yvF8!^Ts-8M zkt40@=<${F&m8^Yi=BJ7ACNx)c0&q#6Qq|+2rUj993?K!s415*M`m%Gy<<;@L`_%dMfAz0k|N0vzxS%!mNrxn#QU$uQgS57{ zNny2cll^>t^7!D=3r9Y_zJ2QsHx4w$quf@IQ&o|MC()t|lxm~|%2H}&B21#312+}7 zssi0TLKJ{x5umK=aYz8c;L4VfEk9HujVtxOm?#Vv_3<^@fDEMtVQj9{@{eHr2to!T zfLAt6S^K-J&4*_kB!8rdMCL>`DAMGm&iwS=PnE`NSHYR(Ewqmzkg4N zuE44&S&|_ka)e6+l8prxE2!9<^XES*EU#Zd)qp2%c#r7GweH#8{17)2?@q37jefg5 zdUrhIlU&3xob-P9$~)W?GHFopntuqp;1JsG?Cl+D>4G{prP~lWYs8WgMY_61S=1$H zOZWycC>jMTG<^-4AQ%-)F>;HbhQ&mVUlQ&SlAEf04?5omx52{%Pr9fBcfd&j(ahZJ zdIcm2>Smf@$mZ21pup5S#-U)|!_!Jn@cDHvULoUD#oI+QvDZ)LcE(*?g`)uhjN}^L ztA5_U&Bl2O8P-!raPTtArPJPv9|0WEujJXOLmoWme!lAUyk|7R{n3jX^eq zw^KhMbLV%aHyW7YSPU4bJ6UwXVIeuoOG}`r4zeh1qoY{4)TAP`X>BYlw}f!_sbBMO zX2N_D3@AVf-b}*1$F*i~Grs&2f{TF>z%B~OLA&ErCejRy91W|h9z=GR=rjz@K}Ra! zT0Af?u$ek)1GkrGB(rRMZKgwv@GKc9fozpyJ&tiDTnHxU!!iKGJRu@RGXbz1k@$(+PehBH z4EzlTtiT8qxpfU}?NmM0cq+>#YXs9ix`Zv>p_s@pD7iy-0jpG$7NS%<4K?wkRit5? zGr~+xoQAKxxn$WO0W$GHji)YWtoF~HT>nO%nD;)AfTXG*q$H{okXXqS1s~Cv$xb*z zCD<`}xzV2fCGQ2Dw!YS%9P{&jESL3PXm_9LwZGJvzSo;w8FSsQy~o3WMwjy+enY-w zSEMkMO%dh*5RDqm^}e>JL_|tWJ_^+Ct@V~x`^$&<;9jS@?&`J;f_{5AJh-I>I1HBfe*q=UPt|64-MUqIBMQBS9 z4@R^gUL;EJazl|XwDk=%QlX93pREoegbKxQ{IcPa}swiVcLq7jn_Dyvi)KTJm*N1`W3YYXI^ikh%x9EEB{SRGbC{dQZqn zz1ch{nACb0N2gI&rEDxNq1YS5SkLB0vLRMzkeG#1-H!+C7pEJ8&daCU-+a3D>dEQx z)oGt6S!l^*@1S>eFz;t6PQ=stz{I=o1sB*NPye{r&H#n_CV5J#}j7>o2c<=Y_#n&+i}UjjlW# z{pI`PAAQjN>_&$tNKufr2}R={zqVrAnn9?n5>rx0vXijIG(rnlg2T_|YGnc>Uz^g|ox=KcsO) zP(<}0QABT8rieiH0iY9FWpJe^Tga(NNJ3WDPMyx9>AJ6E{6F3P7>q%p{;P^u%`J zwv>`XM)c2))(B(;(3~=o3^8t$CR`z~urf!U;3oR-?OoDSXQR)zbbyQA{3N&}5jNT= zUXq=Ktd%iIMIIfI%JMlS^z4a1;NrVrfYabPokam*v>9%q~@;-1)_Xt!B~sBtF4-+$5{MeG=J*U%Afwp^B-S*IC{XnISlFyp~k5nv#gaEsdxTGa2a+`8G0V zHfXWz&7Q`xEr)QlC>ywtt!(8u11N=#QTTyih!gFm1z1Bo*WoCh%~;OyzE1|SI6z0( z*qS6Kd6?NzDlw^tFCNu<(P6T_}THOCmuTP%xSYM2m3Vfr-@`W)ze9F)EwO=gJGIjQE{r z%9VKz=71bitmv3%HjEI+ctJe0;~e8Tzm;LqdO8uziK1G?n6s(c235*y^irWG(qKB1 zRgk=I)2pUvrn$5TQc$n^aH}TKNGao2$Ln*|M7|g#tibR=P$AR3!O)93GPQkSUpi7& zMxn0wr4heIiz^D6LPi+e`zr_srRUToPh3ij(*I=^N?E3GxBr zrAk|@f|VlJ7sLc$nA)U}O3aGh$l(YN@~EmEu~o1!Dq?61{Vpq}-=_TPwm8JP1tcnh{y1+>)e+^o2 z*{MH43Jg;rzVhlf1?MeNH^K~Qr|r&z&g?%C9F;ynuzoGLvzw#&BR+*6<9@d43#4%265S1~x@qib!8cl$ylnF(ZA}4PwrZIYZ z&2qoXBPN5*UT3v8TjEo+I9aRlVff+pc>C`DLmw2`1*jY!VDhKE5xNfaInjE{~=y*nXA> zQC|QEnhFt(;g+T)mgmqt^BV1%VytMH$7t zAtt1_p@T%jYiv#)TYB}<+8@5uzI=uk(>(srXfSr`HaD`_j#iuG%|^Pdyz}B~9{;Ldy;U znu~peFJ_`Jx`=7iwOBm)rGn*7#Rmyk3>~PVMKM%UC*Ou5@G7AgVa+l3-ou!er!mqv z^UTH@UtN3cVtb{%^WoKk?1)QYK#Rm2G?ui(LTU8DBMe|Tu*UICF*O01 zLG0YYl{s7FiOEu;bk?OLjI=RtY$m^Kc(+JK<|bX4gnZ%_|{24xms_39$dxeUq&}NC(I+1 zf+|vp*eDg)2+IKS^2Zk`qL}~ao z?v5yGWn344*8!8PQ2`{(V(i=7dJqFjTI#YdA!I~pC`r=_5HLa`sI@UKYpvY&jey*< z#vS}XN)ilk9huY-tl~6>B8E2e2re6qA%c;82M0ZFBMht}3{chrE(Hv8DPMz8ziNdwp}Jrv04(uC znYYUG3?Z1DC8vmlSrI7H5Er1NKo5nf86hDG!(GNUIq*B+*jD+xq!X(-vtlquOUD*Q z0fhXtgV*|WHoZI)t&k&k3wZxkh|m`Md~P0^%<^$I)fv_c$&fHFhKWC-l^4KRH5zAA)_RHNmd_>hXHdpbzIEAi=OP<9Z z@*wI6d0rU|eeNQ6a8Hr5BR8jxsDyDflwYwEoOzV5pv36WH5c3nZwLI&XI=og zlM;0Nb+$}$5;+F-0P8`Vs0WhCjru$5!#y6!on|JMPRDdefI1N4Rds}A;s-JmW89i0 z!qf|ZVNHdw$SPZX)AV&%6p?7AO$3rfjRq;;c+vHiRszr~Y#Hnt^01lsE*`l<+o*zz z-h{Ez>tw|@Mw*Tk2^?hON{6{lbg>C40O@mJB{{JOwu^}l5jYM4V3FL<$fiY*A6zkD zy+d=V27ZINP#O$fIkFX@iHB5TJw|ER8Tt;+u{r$34z4V0EUp(YH_ZLR(Hm41(Vjez z1fuB*L+N{M4_kc8FU(-;sss!xe2obUjRD0-(hZIzv@1jsF8MJ>MpbF?4;BJM_xMcf z!jM9_RzTD#m$Fk*u{2mdzBV|+{hT3QWHEH;fmy!ES;+uu8X7O7<9_|wbj9~x^bWOo z@NoKY)_ue!^;Ub>X}>d@eL8MmXm>C7I?r||K9-oy^HjTYyx;v&uk~=Hb$`~rJ#O8e zcJ7b)@>Tm_);=Ju+Y1st>0?w3{~9!Si@5=Jd$w41r5(2B%Y2WXn^F1L#h}w2@G41O zyw~AlqI?|JQ4n8+cr@O9Fx`7RpYKn55QP>5jU_BX14b1B0Qq&gjC2aR;so2WW~WTE zQY%(mLpg`E(Lra8s_~2~Jj5x|8Fzn)UX6f}7HJQGXaOrQ<(eb}S-|osOy&$` zO%s>KN6q$t(Gbdl3p4T(trr2Oll>`Aw%HJv9q|~;wAW<@yxM8`(o`C=GD2M$RZ#~e zkQCk$i>c)x{zNO=fTaj18pTl+&x2w^rV<+1omx?)Uq_)?MiAOSrH&{TEPnt>8={U_ zpPV!nP9!TzxXVrU;Mx=PS2&`Lqk?lo+Xi%!W!#hO$!WN^J2|t_`{PUP@0}l?9-xdL zxxrnKOfpap*qNI!x8f^BBr$Sq&hqyFn35nZ&e)R-dZaXhVTdFf79!`J^P9a>uXdk3 zHTuchv+JLmGo+yIxgV9ZV<$OXTJAi3eCeAPd*6Ja{p@kRkT!Yy+T>?f#=p5byZ(Ut z7{x&nnZy@L`*AD&$P}h=ZeoUd+p4j%`*<7-Z1940$J>A0kcwrQp-92 zL4rb9mya#c1`!9u$k=!pM&>W9*3eV{Norzn#I%|Q0|sJP$d;X?0#LN6&OuC9&5)v^ zEKQq$v=k;5RuanbkSl$LJ_x`;LWpvw=hfK5DmkK3@ew$QH$y*2De18gp^1yr0|DRkaMVpIS%pcAP#GBgYRC9 zT>5D7^!(=O!E-MTUU;#0a(VBI8~eX`fB62@?*4d*+X`H#hM?|>XcE_$L=O;i|k-JdOo?53MowW6?QG|^>W^e6}`_Eh2( zx;*Nv7NgOK&$%tN`^!W#PXqH(4qj@?ZTeiY4iTimHT;3%J`4Y0$M}>Br33rbfFT2-yan~xTMA%;0Oqgyp3Saae@S;%9{n2+ozV>$2#++>6}lW z+}s|0v^TynZ!xGc?UV;pQBlgk**9`PPNK0voJWDPI}C%Npipx>aB+2pF|HSDgz~lM zG*`wwLP9w)Oe<KbSX#0TQAQ4DL%>^Y(m-JVM?kp0 zURSQH<|>VM2G~r6MGtG^RwOfb=@G049WFHS3?9{fyiNh^{Su*>E-E6^NIH75bA^wY zPASNjJOtoF(pt(iPd0HxrPI+HbMVh0b^LDUpOq(qR7tQn4Bgb-Js56s*mop$l)0&tWIsniW8F1zl$`Rf>B1ldkagZ5^aiD!nuEtNa zAVsAobIg&2Ax{3vw2mfSWp%d z7$3$QazahgBwaVtbsb4r)=5~gbfjRJ$G8U)J&On@R5@2*4#J6#OrTdJhc-8r@F;hb z5ib!--eD-^yelD7JN=8}RF!y;DEh=@Mz2aI&E`P*$bjroAke5znE}Uy*((7-2ZUZH zlVN2deByfLAwv9yEJEp0@L~{!BzS;CR8+KD*CU<{-fB&zDYX?rYoSG+210Q>(PHeS zPX*e^JABZ~sU{lP)&LJ(JsPojJ0owTTw=^3yo|C1h@B=9QW>IO6rh6h$*i|OZLcSS zc9|aK1;{8?L@?1#Yx>*P?88a#sY&;_cJF*|dfe|mVDZ^ft9`oDI@Rf1>hX+Edw1S` zJZJ}%ql-3q*9iq|mJWCO}}FDRh}D_6R%LBr)0)5BJO#NrK^VcMD; z?C(4p?cSRmJkDEc>0Q$H4TZL!t5tf{*OYA9&c;!jzp7fQV^8DDs#q>|vJ15BPq|LG z)?VK1boq+CcE}4*;5HkCd;D}v6=GTAm^kDtXgTGy#eeiCcmem0)CDP_w z8_Vg{YXtnb|@l&9%C5?h0 zYa~&>ROhT@Wv}mS@TT-9Tk<01>K4Kp1H6T5!Iqpn32~)r0=;o=8Lajcfvj{T0g$Fp zPLq@3q>2Fc0r|a~i>b_mU5quh8kR_nfI?r%sYz~lxk7G#YeA?oDq zL5>`f0)em4>f|Y&xTeYhL`E${DW@V)Y?_l?vllRe;e-sWqL8Y?N{_HH#MsrzmxXI9mi<9}$k_#M;c89F=9}H{R4kV4+URvUNhun%WSmFi6(Bl3$t^%$f8XP`~ zB$MTp{`!EgE!h$I$RZM^EnA(7=T za}w#)*kfSr>untg8`fYKc@(tCI!98Fm_1CjfkVW^NLd=u91+2YUD>__i!2b0xm0yQ zor9DL5Lx+6t7roWz!eiLQ!)Pki5p_((_XXU3PV36S8;$B?~a*@nv$V^MG^XUQegCByC?j>uZ7J6xzC4%^qY;|$Q-tK{<>3!+ zqmNhPsGW(1mY`!0&inOEcRt9cz$yV|*&&I{oWrbuc@uZYVG0L0u+iRN#?w$U7Tjfe z6cg2ZE6k`6MFJ41j0K!-jgOAgQDDVBFpkB!W zS%}bMJ_2Sy_P5SoZ^S8vS>GB#lPsQl;q)vXGv^>U>ZjlP-6$>;Q(MA zA5?e?07dDFA#u(mCVoyi^Ry`ya60SnjJt<GZ=) zj~;PDMtjI~kq^SR+WRgw_I==_)g2F8+j|FFk0#rEHGYR_qVn6LlAt=n!-J)lPxK$| z&ECCF|3Vlkq2dWxg?W8rJC!ZdHVzdfDoGFSo3S}Z_+*<0=PmisH4vr#S>da0jG zLWn9;2@`h3RL_*BIO0G?dXOWyTgm@Aq{Pr&2*U}okpL(TlEkC8XhF;=M*Z8I3jnwyJfUwwM; zKfgM@yk>S{Rdhi?`o%>K@+h4f5faTR#y{Eu93w-Rqr4 zd-f=_50~?_n;6nA-zX`ki!Cy6qF9jwWe_NmfypnWfQN|TWE-y{3F-iO@K+wAGI}iB zsb6y(h9Mmefmf)wor4@LM37&IYCtKAjsF3YUAS>-8d`t`!3zGT#RbY8_>s|`1TvgR zt;hggahP*gdHWmRIJ*Dezx40^{Fn2CgLa?G z%UCo@vFAiN7P>YPmt^kQa+Oox>bb-_&>)2dAe84%&TeKKHFZ;S&BwmZEaXtLL2m8n z^4S+V&s>^pZVtC@jo<(2^!nBIaKyyU>5p23j_e>&s@E9Acgwj+R?E{U6etnEk8Ie0 zp$OhuigWrUGR;y}thqNLQ!mPm!Rkn*0Jy?ImByPyo+=l z=ZOV0LphEw{)#T6WQl5#m`S@PEvbp|X~fh&tR2Q^C}-sn-yh^*mtsYWp=4$u`#KLS za#GLE2<1(p{no}xm#+)*ssio`-Pxahu`~K`G`pQ~omVnSMimz+Jf&F&o=dDMVn*yx z)3CsZ6%iO$Fb?3a*8A#m5!jFtKVIV)A>jR( z*vNn672=c)Xp#qrp>8+Bx)uU+?$x(sA0vku4{ZRKFa+0WWn<@yR3eH@px9J!g5LikSE*z1+DVI_Abs&iPX&SlCJ-j1Tk<=nTni zna+4IX9RI%1p>~az>BNO7G)r0dba|4$>vm;d9A_y(y$YOXdJDFVlhQf-ux#*h$I`j zDr*~b;(kuzl@`KrVj%2^2~&}h1CB0?^L_GA5xsb63uK{`o`9u6ZdGS2uUJfDiXlMY z%9mRd_#vjTW@1X6xK~ZFwE%{qp)rw5gQ7pCK5ECF4q1GaSz=2tZ3c5S<-cObUMOo! zy0B6aXAhSPs5(VAu^D)(q*&@^gU%tR8p?pQ#(gQz9$;gK2BJft;*}7Ixzk2&R6>e3 zaE!R$qL(YKuqv)V`6o%ZI6t-U(Y@28N9-aTeDCKIhIO^ ze#tVOel(eH?avdd};dhjp5JiNpW%EX*~AW`n7 z9!kPlNha<5qr8-iv@)uHf&oDRAw@H3#ED3aIaOaGg#s+cxD!mqd}NhlYyIzjZTvSA zzKFg2`nm4cPS3u4a(JXayFHrz@Z-r3emDKqmG)!48pqJrwqY(s*G96Cl|AGXMQMsT zR`Y6i3K}Vu#J`|JD1cC__HQGnNE9nLYzT22ydY54xFc}VSa8;M(GJd95rBfxHnmw8 zw&)TF;N(f*$dy_mnth}UIq(+9g$Y_TC^g6@uuOZRJiU1$z@S-#W5e4Y*=LX4Nx6&- zI8dJ`$j(FCBnJ*1ru+Z!`3u9#N8UXCHy4lY{_1nS01m!ngwfeWF~bxUATrHC9vKf| zhA|w6JuwP6(br5EVg)9Ih!&xdv7}d1ii;#@Itr=&>fpqM)l09oPo3S{-`#uvSL4s$ zZSUM8I=rco#x4~$&b3J$5;^ofX7k_Y@KixrQ2E9_*@d^(Dzy|W5h4__pnJM{6A)GU zTQa01j?#NhcXr$N512uwCo>gB48qOmcO<|buBsI~%E~c=S0HU|>6oHF7`bRjAhD|L zrGAD)F%K&i}<*??I z0|GeOv8Tss9Xh`<;x5#E-vZO-1`gg(pgO%tk9BcEie^1-^ThYTWVAD!?@thV|7Q2` zCoE8DIZXg)zN;W=_WK(fpTBtI_H&!7`@PF2`p;c( zo{Xe;LTA`qw4Xv#S{5$ns$~8FLr~(bcKgaFd$+FdYj4M(i@!kX?GS0Gfg1X%?LmNv zJ&fKOaB~CSyl_n2Y=&C{&Ou>FVNu*1B)DT&d9hI-2>u}xa~)FWvg(bjVpz`>3FHsb z0?l$%VoNYGG_m{jiz&RG^Z0-L;@bDm?C#Dx>#e*0=0SV7-&m{28FT!@D#350wJa*9 z!_atbt#5I!cTD-Db#uub(BHP;6QFP;fNuV8OJaI5sTmxec? zl=3w!&VE@GB=Ko1`6*_+u1wi567F?v)mbr5xqJBz;(A#Nd+)9O_eft@8zmLOshEYp zqDtzhcgU;c=;O2&d$T%T)^>_#@}2QUR%T{mVF~~c4Pz2rI#Ghm5?B==Ye39PyTI#w zXJOcz`|6B04)7Kfa2z!TDcmc2HUfJK z5*?%{#Wwf@Svblglz7vu)8>_xP)24Dv=Whww@61+>rB0fps1iy4EM2#iYumkOdbv0 z=q(u_!7(H_uzhhLDAXvAb*$n%X~;tmq>sgbsdjFmehIv)#ISLHTs7vk*|R?sQqd!t8utrW&%3M};8Kbtm2@AQ2vnX^=ABrTvB2^2jQ zw;MJ3f`U|d1W8R$_UC-gKmY>CjsPqt==?+tJ2g+EmcOR| z=mg6+Pe8?iPjwB7L`MQW|0E+(2q+}5mco)>T68LS;pDNi%NJf+KKBgW*7m0#?Oy%e z^!|-53s`gqbZJtMlpG|Y-gZ_VRJRU&-K`|Die(sUA+DlnWi}AxZs+A$F}D(UI#;j4 ziL5>3D1heIuUYiz!h%SZODmi;*NCAVo)eE<bC*%M7e|`7f{ug{k-+p`Z-HnaI8=HUjr{|6xUOjqP z<;mdK#|c_Uss#r|j0gV8LoGOPI5e4G`(pmyd*l5*rgF&Sjg+pnE1O=k!DY={3kBB@ zkc2T|2>?3U1=m4mo%N|4&dYol1^1Dc6Gonys)CgMB!Y@&F>WV;TQ8J z<5VL{5dIaK==ZX{)!a=XU**Uz%q@4%F{P+ML!*qeh4lx;2|7#&7 zl3FPVokm2PceB|{j0_ptfoqUP07WRtEkp+O_CSgyctO^AxWEC9e9mk>SneEIX`gJ* zmvO{F>(1`v>i+2JWd2Yo97jeerBKdAS13mXkcq{z4dI26v{<-OU%6cf3l)hSKeeYA zo3IC7xt-cM81V=Y>H0qysSYnnAPW~FgeUZ}@D$2oxdj3HC4_2fr}S(FTj-WKi9Y3@ z^R5?O{Z!K@v2B+n4`&3fSAJ~csj^9!J9MN)5dMF;daobJ(lkFWeEQ6C-PNYrO?S^s z&n&sST*K8Yc1a3^1OkGf8v(i?K#8FAFA2~kZ*)aaBBX@`i3T#<-64nLc3hk4>Mn1x z(r09t6GzYUdrwp^6jd2<&iB3M_nOZgiz^Z#(CWErVKg7(O$WpKom`~R_Of~uqF$qo zVHxYGtQ0IDPp}s{gx6xMd*R{0*9@Qx(Wuq|?7CPm<7nRivzc<;h))60e=H#+l}!IS zB+%CV#azJJx?D_BXWlaZ0*E&yLSedbExC5Z>mfpw@K~;mhF*o~B9W^f*{m)YBJHUU zLNt=ThFNl4?;MEprKlHAecQvZK1&&EgRG!5NCv6x5FkYg6I>Q8kmQP1LyP!y8En;I zv?x|C&$OT)gqG!^Lz)?6xV=C^(>P^=^)6B43rh+TkhRO>2RR^UkhDT?*c?^6_9qDK zPfdSG_=pJC3JM~=G2b?%SIWSlGZ zG_smJC`$xME7rG~2?j2r#bqTkD=ka;SDj284=TvGKaEF}@Xp+cI-H9u!%bI-E_4}l zfgJ~`F5%QL+)Mv~-q52qt73QLCw&!#wL(&;P-!b@#E_g36}!QQfWgD~0WtZeg)mXY zn58shxb$?Rj!Al!BkddwLQzVH={D^kn`qvJU-yTEaVC0se+RF%;+=z7tDwd zJXE4vv|Gk}$$@rg6jTh=~tZEf8B5og4|Fj0M0|)4SpYRZYWV$S<4K<&wk5oXhnlPULrB z69w@F38vUta(m&d`OB~7Jk;@gMia$bw3yZ4ayEZXlHy66MmIM^mBxt^ehg$+uiK8a zjBnhML?LrorTP{syePTOS8G1_-CkQzeC&s-t_Z#TeK6YU4R|`v7S|Wg7OaxF_R%)M zJR*;+8qVkQX2!jhyuESB6{X|x7R-rrVAPl2supnRPk~=T3Vh}AXTa1D0%~oJ;tOY} zBR}O48orQAVj_w!7L`0Vv9YAH9j;eSK;gQmD$wMdI}9Zjtul)|Xx3s;0|5y$cT&J3 z40_uSKGyPl+hxh&*@7 zVNpU^aX=6;P>vp@T@FaGHL-=BQ>Pf6f9Lf#w=Slu*KhH_vCb`V1 z(6$4Pz;iEEJL3`6=uWVuWWy;_@E{|gx*vAfLN33mL23Z2fltX$5S0mxOK&gYi4-J3 zMAwg3#I^=ju$T#v_8bbK9qP`7Nl?n?Qb0#*Kj_X=AWIxIbi>*R~%}pZ3_11gaecm;Htz9wnUtFy2pUr-= zSU%y-7BV=FhE2gyincT_QvrU(QxOV(JH>8vyq%Gepom~4)BGRk9gEETRm#OS-L4=} zcbv6vQL5OjD$HR+d(y>~j*#&cgZcHU9H#DA&k}+8D7z9SJBou94vm)48Cg&z-%(^3 z@fePGMH0J_%5*t1W+Y2t+A?n==3FIA)3gD4kOhn$^pqr1TXFKoQ9n{gJe962%*^^` zm0L>erYUg!$xKr33YJ~<+Cv#aKK#-v`@>R2)GX-Kq;;xcm!+>qp@D=dMvBU81j1c5 zQpNw+h?yKrT0{r8>M?sI!|fvU8;We1n1ug0N5Pc{%=qXfyvPs?9yKB%TukZ`LP0Ii z*r~Z98ev3=J&V#DAE<^1F+R5|P@Ele8M{V#4ocT@w-v5W0f$*~6Q)9Sg=Y~d!k6Mg zR!mFk=pPF0D=WUj($pc&0-mmb&3d|jDREic3LGoSKib8|0OLW!Afqt_ww^Ik_%kk5 zLf2?C5QSVmYGe(xjYgSJh{@SDQ}irVv6IEWuF-SqHh4U)gAMEx3!cx0o&ShOP4b|4 zm*uF}7jZh8ksn~(|E&x?Y?myjX`q?BFoV<@;a!E>Jj7yE5NnhrdO%ayvo0YpB(OlI zZK>AdZX}hp89Ze-p*e*Hr-bo=$*T%&&yOOt6`&gzTsD8! zyty~s%(Xt$lQE0loaebbZF3C;O_ic_tJR6YC`P4a?CkrtfXhYi<*M()d+maBbUKMd z!DAnwRU-xhO60U^T+g3y`R9Kfg=GHlHv1Gt^L##ddYp9~ez3{+2HcSMgp-Q>0W(Ds z%=F-}Yj~1ofQ#9DktC5WW*tXg>=B>Ebk1XN>atihp|F_bw4D)OSo{s6VAygFJLYuX z4i|_nW|xck1$RRNcr+YuZ0?bl^X1k2il_9D38n}=;&`|-;K4sh;It>i@SkopPE5H7 zf}R?I>w>P#&1!?Pr5Mr0-0{Rf7$X-pf$G$XJZ2;-A+DyXWF;v}2l0R1EFwOv%6Mga z=MagbOHmz8h53mbc_J)!LW`gAvDF>RY?fVJ zMJ0y*V@oRk>(A&^Z#H79^3V`0B2#4gE)_?ULSJE!po-;Duvj4FH(N-LL6J!f40e4T zfq1&jH4DS8ykhgG6DLd75jdB7O(UIV?Jr{(&bMo%;}{J7=YRg$y&rsM`1|i~efU=U z#UoDY*zbA#)X`1{rB_JNC4>WT${#f);h9Q%vdBkrsbeL4b(D0P^0Q z>%-f3ChvY{aP!vu@@nymA1xkyx;lM|ZblA_ibv7LfiuSnW*SZd7?0}!I>YzL?st++BZo9=?0e@c&qQrc|wVJ<5wHjL$xpYpoyBCcKw!$D1u zaxc!w1$ckkZw>Df7f<_;`^=>N>s%}g2nijY`L8e|6>0OSNo+sHVR$}3(Q-VHVOoxOt% zZG@OFTafI0VOZ?J{M1sYUj@j=GD)qH`kN2M$zWZ;!G2GACpJ(pC`)Oe6u^&8656V!^!n z%4QiPxsfD59FksbZ4GYl@EEQnVi~}?^?dQg#o{hEI;J0YT9d&ZZ*(9PjmNCOT7Ff_ zzuKzWa)=~UR$b_=O-Ve2aB{0sgp47SG&(2l#TL)l3}XqzNHrbwF*|;_{_(%zqn6yD z_b`(!=m1k*^mc&GfTNQvQ-&FY-te2~?C|PGpA7@IZGajl<>_CPN&mqhNYRk=$CcJ3 z(s=@J)TS>*Xw`W;FNrNYa4_c|4_B_XSY&1TY?s0+(rZ9b>g1hfgAJ_ee6BGIE!6@S z(+9kh5KfYq1)jGr+pD^QmDMbeOHVNO<{t!fgfsD@q<&0 z7|8J?uUEta9JS`eV`!+-UATzxo)sp53s@}04TzF}PkESKy=fS9AnIs1XoobE0;L>i z(1}t2sthn(!Bt4{ZDPiS2}l+L3rZhP;;LJvT8}RoCo(*mL*`Vz>2H);>Zs?MG^knS z>O}esf*@K@rDKh8LcugOm`Fq^S%93FuZQ8)oq08g2C$z+j+1-jQ;9Ak!gf}%$Pk|9 zVv$vv197|oy;&b`$cbjJF}5#eHK?lvC@Nt&w$d2TtI(_#kd3c7xPqTu`J3YFU`1yL zS$+f<-&uJg0&SeM%5!nCs$;=s)o7&dMOU4vHw)l}PIgVg5I+eW0MgU(stj6bHB?}@ zkj6Vm)Qxc9k#Y=L(qbb*)lN+m7B`E4I~>f-n657~t3 zI6m-bRKwdjFvnvyw3^9egF6y0xiH9Q>7*kP0Ue094ifsPu(=~l2iZOdD&Q!j(vYyN zzL01Dwor}~N=ytY>z69M?_WyUh`sUztpqUoWxkc(WT6u~fvH*RN}&+42@ec`VTqI_ zGOFNVe6kayxZngdf`TmqEe8ZN6nemp?)PHyhi@$29`(7YBt}BwucXmXr6N{D(1^&^ zpTsYiuj;g2_yGYA+3u`EjMkK8{Kl7jA=4z}H)&r=h_n(Y<5r`S<>2I)UXw7`q1p4Z zg~t%96VzmpLS+%Eq^Z$Q7DRstQcUd7XqN~(s*=j3R9YoaZvb@!YCM)osRfF(K2-9! z9|`J>Nfu}sq{=UOep?tsCcgwSDuOK_*^gVOkV*+bgb)x0CEIdPzJ{V>B0|teC#)qh zqPj0R3cgC$1j5PS0TsL=LO82CIv_v7rymY-Tc0@F(Z=xT?(?7j`P0|_;YSC5_d6$F zz2pHQ85$FX2qc$bQW(FEQ@RA{e!Cqs^sAoVpsCV*RCix4ie>b8@`B0@IqkU^gn8TO zZvW;x-e1AtqZkBD&59>_A~9LS4e> zVCv#&(+lXFGV&?JOm;kks_T<}v8;my89+5A_94tLDW>pRYY&M>oQ&{Zo4x+#-fH?> zqYXuzUkKz|3u40>w20ln+I$&ba0=%D*yN7=2{%i7IGdweqs_r&!li}U3o#usvqn34 zE;|G{%o;GgxOi~C`O&{wefw|ruDwb8ZO0598o+SB2|=M77q22_NtG=nA*0$u-VMN*9B8pAY>jg(P~x5UVFGX8XAa2QNR zgtH<80TbpC^Rjj{UcA0Jd#AtK^j|({kH2nrxC?Ek-P+1(}b&O@A8rp zgR7I1_VT>9m~(bv_1Tw?KL7Nd&wFLCU`^;TQ^$`=7+@sz6+%b_n?wmB;3hJ_w+XQt zU(Hr0+!wiA@(`S>)p(D`p=NQbm2k#1H}g@R2InuGa!PP-+}!b$?G=1tVGICC#!!)K zwG`)HBEt_=H9xmR@tA-){rOLuNSvto>?s8P1%{%Ud8 zGN6wuERS!b5Qs|saYK(~BlrlXB9cb*A?;|Zy|Fd8Jy>lrYhLt^xJLAHes{4tcA=%Q zh(uV7M@}FpE`lRjgjHZ+pkowyqbob?)JIMz+!3D*ht-L|b!KGp1*^Lzjl$$3QT4WM zfYMHq+qMh&3s#JF6JnSdg~8@<98r-Y9#>BuE#VAcM8%;P;r!crx)v@LCHdfE2}bV# zgP?7k_K60eVlAbRVd9%!NFXxl94nE+*mUVZ{y?;(-F|fd!R47TPh+qj+A0f?-_lnqOlg zFkGxm))%YQaID|F902x;Mq+IUB@;S)uwcuGXWr61M6=maReDHwn?ruU!?ywAR3nS* zq@X%eN+=ss}lpL8n8Y@S&M0T;soXS4=QCElE-CW=CvFS9>_(IsbS{naW8+@eOO6;mYIV!M`P3#A&@YM12U zgr1Y_K-2(FYa1p}!Kq07tZ;lom4Bs+?ZBX~l27-+&4kY`wt3{| z&23%?kBK7=%pB6%HH+x0Tn;^;ZX%ok)NSFDE=EvP!gI={6ZnXoX63E~nuRzwpymfL z{WrHa|IQmcB7OOjqxOhrIl3T>PDR5R6-v~b1Fm|%TJkpe_LMB)Ci{$qCQ>l+9VCeo z^7)ut<}$6A$qiS=E@!I?{`>mbLhp}gJ4I}3@!Gb;6U%*${9x0}W@<_I#g(r7r|+0- z#|O=9#)YuXRCJ0e)eo?t&tT1I5X%*db=1&EwTUk{%FEQIN?Wi<(`5i$_T{1|e{QoO zjhbq+L>H}f35hb|4{8$+$@y2xDuS{UUG$q~u$cWq#Dg)ZC}bvV%9klh*lVNxndphlndGAd+G)R<>hKM0gxSU2Cf{hlduWXJ;bkPS_ zd0k)27q*m%Oe@nSHHGU;`UkHK?|eLZ<6Tl^{_x)N!Dr2jM}x(T!8t9Q=4(eRt9f8c zVN`c7Med?o?L{K6YBvJcFaG(ZZ)GyFEBb7Pc`wLvafRC)o{K^S5;M=}*z8Spqhg$P z03bs9!y9k(Z@k`Y?{2+)=k(=soQosEA624MP?Ad!X!Z!H2Lo{kXKi=9^q(70h8w<< zm6yv6Hf%HK(o_eYb~bGmm)sq*#iOQAp0{89dhzA27w0EbE?-gki!RKN%yc+Hif3eR$G#8!l=j*+O;DkNnsML zqlALi|A z6Y>U5Xbqe0=(LLriKIJ{VuzO(@DT(#k@A?RT5`xq9X`sOD8SgYQ6rXGd9ZEitDl^G zLm9-LkffZq$sn9loz+QM?>k&M)TR`#D5TXPfY8U{rp%9f+d!U_xO(?>b|#QiMK^##_-;vb|yg|6@r2F^2BoX$`Zr9yz= zn#R90B38wD=K)W}RJAp>Po$V7xPWtm@Q8*}s1$k{r2DXkckqH9C_fu*f~h*0`3o|@ z;cO(?r%P<9_KTK&fiZFoow8&ZKhOpa6uRBKlH9(X3SEyFWm$#*R{q{C$rJzvlc3{A z2?3WW3r=hYd2%3G48Ogn2P{Rw$CGLZRVH6rL81_H4qZWl#Ry8F!yaKpBlbX>hDY|` zc`r;wa(Mu4rno6j50)jg;3A%jV#s0ANo#V4A;i{X6f~9C;RAhIRt_atiYS6;E4AsV z4mV|$Wtrep$5wRt#ioU(99$7;G*PQYe}TZqoh}oXr}OhKR;%;g&RaZ^lVhmkc4IQx zpKNZ7W{csh$wLc}S*9B*S)C)O#>;Ni002M$NklaUQxq;N=4K>f=k^aZloygUY3u;$80cyUC+&n)Yx?cx+-KN3#;NmoLs_ z9&C-@-d*wh(z7eC*3;r74E5DiqKHK4BBG?KUPqJwU0oVGGJXQUZ-L8cA6oh1w>qp; zU+_alu!5#TDS6-sI?5p|g{lb~a#IImQNffL_{(SAKX;5l>;S4K;Ow%ZhE&@spLC4; zMh8WLR0pkjbGZ8I+5GWr^u6n&zwu7<|NPpyH^OL8Y%s|1Q-0x62MTejzxD}y&=)`n zqPD^#Se;}H#S~qYE}mp=`lELL_2HZE4qtzlw`?yCA1@w!&XZ$!GYx$KjoJQ5ZpY8` z?dZ(Jw`7-BRPP@+Y{Yy=O_zAJqjn@g04iibFVj@5;@3OfPDE;P zK2ChdR2Oo??eVQU&F-#;if_Jdx_d-b9R4%vX&HKgk;RLPIGxCmU~abW^DNiN{%~WP zeh!CuMJ%f?20k7a+3-M4j@Geg(|0}uJfL(Z@pbZ)8KI*jfAs#B_dfsf`tFUZW_g6)I9op`Rwb4ZAZ+0 zdptXOeEc;JQH!s-)u0oRggLe)o%CruOStrShf>=UdFv`Xah+>AY|zIrrYPw*+~3*x z_FK39=;O)v-Z*-B@qhmJzdHHZ(e7&F+wb50@cmoYZ|-hxZSblrLt^C<(BrwQn5jeuJGHTdp=&7vT5ze4<~Es<Pja zaO%=-_C`F_jg=>}$g4%Ou`%A^;Vz1C5-B2NYH=CmZj@AEbftSJ0?9=aOG4>340foV zaCYVEzRf@uTbk{Uyk$z~bRZcUhdb8$650$CCN?uFZL~ok1qo)2$1k*7RBBXve)HXh zgG!-Ar(4nOFA_S=K!(RU$$1WDe|vk#3kLUiuGwWf%~J6GeEFo|-O6OY5$}j28qWHJ zzta*(+NrYO&0r1q>Z+njrTQuDl5MPlC67&zkyfPDc6!#?`|({5ppNar2o!w_D?Y3& z0cCycwxf!T!02!#a}dk494-~5+XyKa85%LBULdn^8a1z=2@a>#%2uzZ(h#3c#L;@Cmdk%1D%s{_hjXdvJMrcnHgJ3OZ2)^El4&n<@G$WGL0XZqC|kXoBzzhU5$EK z1am*{-bts;3NH7Td*LKqE)v8m5KPfA!H7dL{ablJN$aTqM8QTWH;>Ugc$NbO`(#w1 zLla+VD3s#C_?%4=zJd%`;peQKCm1bELy7ymf`bjFxAe561*ouCL+~?mL63#$8)c(I zjjYFvmJ2AI11RhDr*egjZMcDFy5iQj4sspskQU3hqE#n){iNUgn2b2pb4h4&F+>G_ z;7guGP3L(#1aGx~K_d;2yyyap4sn7*F6dp$^$MLzQdz`mqeyic6=#SWO5qh8g2L)c z&!7%s63L0XLl0b{>fEJ9@t}qV0%oo^cI7QHXnnY-xd)9L3gmw!R1SFHa&3r@QN<}Q zL@_WUQytXNlo&`n8*D6qM;OSF6 zfokFgLF9u+1ZmWBrEbGb66(hOcq_n!r+9d>ub&IH5)l;_D}=vlp?bVRB}>-|bd%k# zWc*nnkn|sVkdG6g%lYMl)$(+*^Ui8~v*~YN@kFhi+Z)^4lj&@HvG4_On4|P)?)coZ zfYe=M^X=jfuK=&z1X>Fg!jsEJqy?Ziva7?VMh({#hFP3_)vvsl!263Uca?ViOp6& z@!xv>NGss#v$!mgvMO{EhB5-#3O-n)A#$q3dUwO=cO_TKXg@xr!3+4)Gth@fSV~}m z4aocgCws4iun|#W;3HF<+vPyf$-fpBeqk64iN%lm5}TB0Y3XKHvBeCrPKb_}?5^W) zl|ZDV{J8cd>*70N6y0fB9rhrGGR6e8nqoqP*q?Ti3O2imLCm2>OwpCEbwBA2p!^DG z>69J-^lb4BU3XR5_oiF(B#VP-XyHkpDFOz>ac}kfu=nLr@4dIS|M;WXi7&sIOL}*ELN7`8GV25T@&G~CL4~B1j zGJNNw;nvpj_-OI@&zl$b2Uq7_87_V$Xn7(RfQ(Si`4C?2(|rHwq4=iu%8L~ny`%3t zj?RyP;TK#~QHl^Gd-6pSObFd%>xsKU1|d@+bo6-rVhN^B4t8&T|DD@E_;~Wc>lZJlPyXeX z(_cIozBuE0+4Irtr$3wC{o?VBo4eO<>>XU&-r1gvC*DShUJl1I{k*uGzkGRq`26Vj z_+mEmAT{e_`U5l?R_ORcyJL=MsYy{rMlGmMoSUfPO^)#Hk8bnmh2z~s5HX89f?oD3ygG8l98b(EHr;aicFlMve)rDFP(@2jmsXuzD7 zONXOS5&J_eOH*Yr0Li5U=!sj}or?KS5$(sbI1#4;%dH5H4NAHEn6Ao@#jm0iQ$GGi z9_k2PNq{O6nBfll8{526qJKadFE~=$dwJ2^pUoez6vXL&-L#04Uq$)tzEv85aY5}- zP<8~R`2t@VMwPY`PDQb9@(wr_2A+Xn*FuLzh1q(PC!-CSpK96`;dct6*jx&MB^J7z zE*FqV=win}q|Vd-nvdJo&hZ{PN?p3>WKM5ndQBcMXGan9wo)Wg|2g}&*Ks08PXSb~ z-UOXy^vUn#f@iDHJHQ8RZUsz-j$+P_SmG;p;uKWcO*lt)lm9vEl@bWdH$Se&IEuv7 z%B6@UfG+B+W;HH8arxtxzS3*~$Ki1UDJV!?K!vTFi@aU5ag-};z{oY7OxrmB#zQU` zG(7a=KtSh8U&REa)(WZ<9wou-4o@_3Y|@ii_4&$;IMy?7K@xNt3j{18>c|AAPS8eV z8f3Z}jJChAZBU3`35{z-PzP(Xobi?jYM^q!qC-(gI#}149P?xsVp!;96L+%AGhGBt z9GI$jgReqqbJZ)spn@v(mc+ObbY4bFxrgSmmPNBleXtbWelCqQg=}rmQH70ojArUi zI*Yho459)$x^#|?#RYJ)Bqn~Y@iJJt4)V;cS!)h3rFKCpF?{4L7LhY76ur4rH2Q+L zAscwEA>l)hhNG-jZd9>>LyZ)+NZ`UK&fz3PVO~HkFx;1e4L-gI4Y}42Qs^_4~Iblh5{=rzdnmo*e4>Z~-9B_WkH=ddN|{`H<^u=Pnm>zX1?BNpaV;#tSFZjniM7ft-XM)uYYLt;A z#+*Rw(72vsnfB?1muA9*l=^yJ6iQj<5^<(VNF(_;oN4Z)6x}cq@e4Bnj*3zh9wezy z_`t9O`$67 z!3)yUFNGHQrUf5WRC`~Sgg{$UnQw?X1!|U{{=^>g(y7C>oPQK(lKT*JT-lDNs~;7l z@ za=ckaNfI*9Rcw<+V&z}HUr{7z5ouMpkcuXfhdeRSGU9`o+nR4}58t`I@!IBMXLEYe zj(+d$@w?ZSydd06v(eZma~1Lhi-~r1JX<|}F?f8qdU4cyb~-pd9njfg9L<>bm}+Dc zX_P>5jZ;t3(*d#RO~&nwH;3>1&B2Ygo2#?=XFqQq-|JnTcu_G!PIW1-EUkz*cu>?i zN_XKTe*C<0x^ad|f6}-*iXbS@q`n+q_}ErTIj4lh&wdHpv_upXq#y?3FF3foGws3W zMD#dHb@rS)*xH>9Z-JXI9(cQEZ@AgtJ>ZrQh2&C4dMB4F`5w$Kxzxcc9T`>W%yWiE zszgRkjF zc`i$DJZ3eDcUC^``KmXcwxD2RIafbO46Ee4~ZGmrRP2SI}i z+|QRkT|ZX+iQY+Tg--B_tS}i7$oj?7p-S6C<9?l>Bn|sGUd$4+P zJZTp^)Pk;B-Glkj+2!&1(dYql8BRTT^^hs$yxKDaq@`|mP6QIM@;|o>vSCA_-{ZTK z7i=l@n_uyFc|1GKU~{#z(|dE=+j@5K!|Cc7w$KyIu$9ons;R4{@Ff%8a@*UMuul#nGd)WnbZg*tu> zSMoi5hBlc8CCk$wHUZkLZAZmuL{oNzU`eT712tw&`k)Ku^#(hRI|U1Vu00uT4E9+K z4p&>aVb*^+Z68nP_ZQ0}A3&hjI@3CJ2rM^5JB55ohki)LBv~l!;O8ea5=&c5meV~- zW^5{@82H19bjlrL(z)4M!W*;Yku5e;VMmn@M%S7mrzK)Mc_S?>gadJO26~G!ydZ15 zL;;tK=Huf)G6jJ)CtgHh@2LiVNmH1ii5E>sK2~vX2-%#daR^tXBf6cBq*-TL2oi(r zc}U4@2K1Ls<7}T0j=l334sWGV2)7mTL5}@>Ii$eQORHLu96@FrR<9XoyP?Hp>Q6^S zxfWAiFj&vHrsGCU8zDSsipG#&8dG#vFJ>|AWjy3kI9G!~&os~ZS(XI6k6@YG2fb;~ z9uXcrfV*5>vO|leoa;orDhzk)b%P*CCX!4Y_`n!*^Zpi0(Q#UZATJ?{%tXpW2}UH; zT7{EJ&Oi8|STXe1hz6<=iK7wcs)m2L4Ax0E(_O#;ObS*bm3*d}$7)o_A3&7B59=8o z@5dC)6o87=AjL#k|CE<#>D$XMjXC&8d^(`nliPml z7eP31gDNEYK_|(LD9V5cxgSW`Ex&hrC59r!1sEh!)V2&NvoPP~I-1qUtDOcs)Xn>+ zdsp+`>W~%D;9z6H)O?Srz(((6Iykx-PSvg*B$Ha!g2}eYc)Vx^yglmq^WN3vdWv3 zef3rE%6_ywq~*pvna%4cdY4U~(|YHy5OKRKLEAx*HXRg%AhR4yJ=Gk{V)oOY(12U+ zyw`nPZA{_8pq(t*Da>CnG#UK|jcD z!K4oP0u!Brjj4a>!PC0ptXGmCKm;W6`D2LLD0VoN6{FM}nGqYIBB3^EP~Mb)_~5wE zs>YRpn3Qe<5u(ylQnD%uOea{aqSzhxRe*I0h<>VVj_egtWwlEALq1&@d;};P`F7%t zi^W8hS8oJ$2Rve&W^{VpF9d;+-L6cVw9_BeciW*Zc8UQaM2YwlRW^#3O-k3>%1OyL zc)~47Dk8KaDXktAlgaLx-hhMRYb}B)(m>N5_f1WR1eSetQx$8?3sq%L>Y%5pqm7(S zW=VzwPg-Q%+BEj7tRj?PQESIl|J7EiUg_!zV6DKeg(h9*k@|;M+xFcxDJ|#EVKuscSLo2b8GOy&G!4Rx8J_iyt%*F z7;`v{%i$S225%g6YSEv57Zy5TVRDS-yRWY<=I!xx@aV9;`($Wx?6w;5!`t8Ww}rQVXljqJNgNwldI=eegZ*^?yP#b$xAl4`um1)ob6 zQcMc4bobhV$39S z=r$z_G)kj9Xze0HUI-u{zM-uzqNTFiQ1|Eq_`KYF-&ax~;N!dxrEJQnll1@r=0 zH0&=pg$g1*O3s%@7-KokazWS)bS}D?|1h})ya~5vz(pN5ju2iP%$9B@?KptDwK~{m zHQ4N4EFYb(zOo1%G#NNT)$3ohAm#ySqy52P3k|b5r$OeE$@Yj_Kt0ffI=rC=*iw4F z*FXBkvN%&R8H$h}X$8zd0)578AWc}j5$vdsJE9^}fXKEm@-lZ)giRdZFaxVau{!;z zDCu6`Dk`O_P1N*wAW9l=^0~zaS|-H3ac^^LaBDKW#^U3$Ih*y4E*JM_iw7$f%+>9z z^C29F%&bN+O4XKZlJsVBixn;$T^TlXpPR{Cu_w?mr zN$NC3-9c#Ah89O)bZM6-OhoGiM=bB=<~bj8d8T{dgPrvr z$VG!#YTz@^(o1mdFw+q_q!2q^U@i8N!-%7M2Ztk?R?c{vGYCflHxy=_W!ITAoqC$E`6W5sEbN%33C6&DVkW_E98L|Fp8*E2FzIR7 zJcGKhBcU3XySOzKutXnYwa#;aqt&?A!8#_n0Wd*`Q8x<=0wl4S&`=o|{8;NZAEz!p zBgJDV@W*?If+CL9&&st(RN{?K9O1AYP`bq`rD+Qp1ZE?}(#+x@1F&za_KaLkBS$KM_PCq-$7(D%on3sq#B3FE4<}uH*@%hB3T=%E0m;r7t>NnVbZ|c7VKe{#kEU^?WrAxs_cuH_Z?2}x-P2}ozuDgLviQPf z(EQ_{P15M|oiAN$hKco}Y5(of;K77zQ2X~!NK(<`5;^sWsaZuD6EDH-3lH%%(<$0N z&!gmx4!p^pt5G4)==a8h zEpD@1FfsDsM!bP$n-ld;QV@|bTWJJcZ3IniLiG?2?oI>H(Da`s5fm64uV@%`0Y*uF zITX%9{fY;#8BxmYghNyWW?3lJ7ydY=q)?|vI`UAMLZR=Z0TM=?+i{y0CXmXo-M-nV zgsAf*^pPR(+K@vSq!cAsD?{gRMVrhi3J31AIp}ORvTaPbS(Ssp_E5ICG#O7B!Vd`} zjCW7)-;dePPP~+Yd{wEn0IFiOu6-E{6n9k}3qSEpO3OW+k`RDV54{p7xk6K*-$G3H z;F;~9lE6~aQo`u7Yv&q;hM5G=f++n5_0Yy)(3Y$SFfR*Ir@NC5w`5kCIjQV6EQ#;a z`=CdENDHeBqU8%BC{v;k>;0*cwQOqgv5wk^>PjH3Qh`KC(I|*!8A%E>i;C870TfQR z{HtN#?Xai<3?lKD)X29bY$Zv=s0Cyhf051?at0i#T;19o{m$EyKX`Nbt?SF{9?7zI zp`Foj($E-J$V&M5LK7wAcUPW)387mXy{*l`?ft>`-yJ?b9sG=!75uvQ@R3I@?SleS zJRBxwFlc-G*ZOaN(7*E`qsH>+d3*2k-m^#jhP%|bOu*?%%tjen1x`woOV;g(LD_@h zm|Oiq`~+wn0Z&q2HjFE03c7hDgqKFE3TmRPh_s6$2H8}U1^CjdvU%XASFm%6 zjR%VC-0DrX`|}yIPjhE9o*i(6F9)_cX-Bxga(9uL*>P3~&uzYG0u;#4sc zodCt7ukkY?b$1X3IW+?7pyE(F4Az!RPY5)$0(L3QvT1)j`u)A}?~Pvm=;h-FCvWat z<4HA4)?ijf;^>UdkrOu8P4m@!Iy*nQc=Gb%@yYb*Y(;H`{_xiCyf@h0dia-*j(+rT@#td083oP-jJc9V zbpUkEg#`P1EktNZR==_^#rsyO*Qha3d)5ZJ=ynpIKZ!U$Fe%06LwnF;Isoa`4o0i- zcK=|n|JJzKp0&p(t50YBGdL=65SL!t5v%>?tmXNm+*LT->-8tR?e}WB;N`cI30IKv z9_HYMr*`Ls2x~@Q(2|!`VMHt-9 ziO6G}$$k-qGc42>qDWPaO!-+uQ5t&OwJPr8oWf|cx4SvI!Ex~UoD+kGSF1|6&wYZSUl?VNk(--sH ztJEs#IN?TCl86k|PKxc*>|JpeH%>5ubD)EP&ht?SdA6%4^j>2%Q1u?=wtb^dL76Eci zb(eJ!3p2V2UdhSqjSIg#mzDKKPNybp80>IOvSQ=hxtCp7at80lU~`dT&lWLd$y@1N z%&-(u6AMos5y5IO`0Ro~i9_u0UGI9XD{IljGI*)?s%R=mC9D8Ga!|qR@CrFnF@vfR zuh!sfif0Y8&u{z$bsAd`(m@z#v&m%Q+x|yJY%zM`A&i{rWcgx~(_J<^k5vl5%OO2B z*-6EnSgK6^+pn>&X!43@;kr5k35H)!mJ@9vk8E7)>It zfylH;X0)*BPS^RSClRx8NJ5`pVA3w-6^0pyOpXMIDjpTJMkGu+qS`YB0L~wxJtUv7 z!xY~~Z_t+ObcwSnd^l`5G5Gq%@VZCYSq*ynizx8=gGKY=^X299@f+Xj@7d3)|)wiwM{G-ofDyL-*<{%T`~ivUm_N~}@2 z{HAJ!Afp@(v%DQXyK0|vG9p8G~7_b z+3UuM6djnYM2w15D#7DzE^IYC>l~akMjyNe0CGvA?HX;8=7KIX5A>xa?viBG?oZz4 ztRyEd$QREq>7Ig}97>2|kiIedN&s3_SP!eYqmDEoXstvhv{YKv$(DesLee#p z_)tn^K&gT?hqDs@QdrJbVu%rm+X9Supo@JYp(|*WUQfjdSX|45FtahTlkOcF7ld?7 zEYF+Owsoa4dWG9T5PbgPP6elmpIGWIcCp>@-~@b$EX8Sb36PJyG^#R@8YP7?-!ZAu zkl;bfHf5I#h>mB#MUh{{NSN7GN`TlWumfMGIPSwada+VL)0i@apunj`T!M_#C{A8W z8LX*d$F7L&SSGLDia$josFomFZ;c<`vK3jiCGvg2Ze{sZy+a(ryqy!YDVjq9WDzt{Zvua`gh zw10HW;z@%V-j_Y-9o!h+d9QuvTbx>Go<45B{Iq@cpnr8~lW`)HoQTd+91ol9@ig|C zC-&>~2HI;*=wW@!N0_wZ{BxJ$9{SRopRKO)vOA7flgir%&CzM|{0T3XrAH3{RxQkq(Cp|IB&bge zX}2n8n_esZE56VIKORHZdJuzFLRY=e%90{@=)56t0M`kSEtadTx8C^Rzx=`NzyI#T z-yHt@fBNC{-tn`&z1^*y&B@LNmo<)f-H?YGxgg5}w%kRtm|o2*7rS3IHm!iVO#`hr^S3BC#MvAtk5SXXeI1QLciy@i#tv{SUq~oD5(7 z=E>ntziu9%Zg>UpkVl4jQbBg6Fr1LVCv;=zGD6X}PQtWWiVc`wQAYB*@0jB+T>~zn z8)W)K6U{zwoInO_QCDX~`cC@$+gt$IyT&Cgm%XPi7C%32zUXr=z2Z9s`ob*p6G$8a z=1#)P{&259+<|VfxMUokjCls>CQG=W6S_XZ1(BscMOiZaReaExvk+^y-i+r>jHHL} z>kcJ;$Dib(#6l9zdIXikwn22$SX?+nPAV#Sv?wal5mVbCla+{yT523GS>d<9H)gfl zn}ch-1cb+sOnr{%)62z|%f-{QN}EkM1e7)wb`dC!KhbudN*ohB>iM;0S^0`Y--OH3 z2sbamXF8dUayUP<4HRMgr-baAIb?bHD!q5PEQ1GLO<BFU}}Me#RIQF_xUXL2F`$z0`v`X zF~r+-vUIYQBF!`iHq}e&GvwJ{tc>xR}uk?I`h7@|R^vAka z{}MNxLnMnX++?u*5*lG~{SXZrSBV|O*6J&KfNRKkQUP=69AXk$tOqt+3`2yf}XiM3^$jB&oV*G%3ja`r_DK z9lbKJ7*2o_W{(|!+5E{ck3gsY$SnCJfQFPK$%jhxFq?j)E+GaxiX84l6uXg%cXI|@ zFUG?r1Ip9HsCV`ZJVT_jbfcrNf#`x^Aat^wm6jlY5_L#{PNL_`AWCD0brSnAnaZDB z8uG?w|GKnZW9fm`fJQh;$IDkAPwyQ~uH6~mdat*At>M|A*ET1N5l7SZ>|(&Bo;4$| zmq9Fg3Dkti6D4M)B4s|Q_hTvjc-)tBc{F!@AXG9+~IHwtW(Bq3&b$pa4Dkgp;*Au2% zP@$C4T7^eG<+NE2-f)u*T{P_rpT!gDscB)bbEDRZV+(_uKB*N6=6!U>MHo}RLF9G^ zY)xainN^m$tpOE$VXpZ=Y0I`GjY?Ies7S0TdbhG|t7gWBO(#__BXsmCQqehL}LsT5@(~nvny=ngGOPf3#v#?fzXRjz{&`jokwcE@pGg`Xi*B0 zPxY|~Ax091!M3|<-+yiMKl|Om5AIwYOdJ7cCa*(^-pY@fWdQ%VRC~ zNy6x=^o*Hm&{ks@O9fRux(>17m}-uDj_@KCKpJwvL1N%%&z>RnLsX^u8Hvbp$Y#8x z*)T2fyx*|T!jHF`g39sKzDQ+cCKqDzk{fPj=6ZW?XilzD#h8T#MA1vV-0I(ckM}x* zhdBk8T4e^sBlirMsRW_E(~I$;uCti#PLvvwTu(BKUc2~7X8-FQw>`+R=?aI)m>jT0u0Jh+CgL=o~jaZ$D=Cst`lKnXOk`=7d0OHjcrywXtM zkz<#FT)*Q}&C*X9I8lehZ(PjjyxpC_&5d?{)N--(?09we<@}dd?Gr|0ZCgh{;n61| zH_A02<0Zng-s-YHI_M2|Ijl09pL1>Sc*GT?+|uQQtfS9w+$0G8Iza-~Q|{X;tSy2n z!x12VHH_J$`JaA2WBPdEi7rQAH zc2s}{IY8E8840W0(JsAJ`juZRVyzZ+DDs1}P_Yx$Iquw%peR_`bz-l(!mU1}%ZhJR zN^QVExbi8ZEPg~LH2mI$q-Mzkh1p%2R6s|N@zZv00-Bfm?KZe>o3$7soSO6Nz^HvZ zNYDuob3oT@HV?4b{CP&O=NUM+#=4Xzd~zQl#*?~`(877)p}DZ|N#ijLAknHv{eabF zYTh@v;Lc+7WxB%gd-^u>2|z3}xNg;HhhA@Zr=kaxG$XW1aPIE(%DaF3f`HkK3C-V9SCw3r=<;JbuPcR0tSJ zeEBh6u(%0fZK>8MYB&8|iYb#ryY!1|Cq;RJP7~9WGS`z!EzXI^hP2}ds^*{!xS7O{ zxCAc-0H@AzVWr(?dC8D<7rXidGnd4k)^z#>I8FtNO<;JZap`BiL>@z(>tqG!Jsrs0 zGhK`=fmFm%5>Tr~P?CGTx{}=U+=VgQ}v0!Vz2OfehS6>q6h zTsi_ucTr&#zgRE7n@)w5D24f8{~PZ_iGeXB;k8@|5sPGl8)a~sCzX>*WwYwkq^EI$ zT6Im2dmlDO*ZPZq2^#@7OR9N`jXBo&?Ad4YvuEQQZ%wYh%@fNOCA076h#^5E$IYY zNt!1#sBXa!s51M{z`I05iXyV-H#b+Fp3R=Tw)Nqy{ z7*kMFm6P;BK?y4d2vJ)0QUDjK*EFCkr)gCHLz&cwnD7*%w)0;X3Y;C|5;=kIqhM&N z{1+By@u{L~D{=NJp+&SUh-;R66OKWTdc1Sd!#|v%u!^abh4i{R8`CGN$vZygkS?YS z5Q3YDfN%rAFNIqHCjT-{(0KKj1@>N~sEF8cvL$*-@Qs@~$Y1Lqqi#)$?;8!pfm2~c7!{@wx?8aq6CiQthzeYYE^Ai^K0kn zKMCN8UF->uvf_($s&qLhg>4_S{@6*GeThi~hgr%JD|yNMYh01usnwsRw4y<$9-()7 zrBs&5#c#ogeX>NM1gV!IbYbt*`O`Hhg-e-VWw0#=+U>$MfzvLl-uK?$_(wnJfB&@w z=lJH{524gBp-ShH-P#TRH-?nilIaZtDn~km>{ZVp6Ed2u;ox`gY~I+u`WJuEe>v-a z^2zY_Tm9L^;_erVU;V82^lL64VPJ?IX~hvs`1OtE>buTt<$=UR6b~x3(2mVkY(u1+ zkO?@XTJYCI#E#tcfftz8^foqnlb!zNj`utxkxN&{8@@*>>EaTJsSd}Z=d*S`?JZ`@ zIS&z8aF#D)T+**|vJ)`oKFlVWb}@9W=2y#e9@9zlpLi%5ZH~NIV#Svt4Kna+LYbJZ zPs`Z1v`cShCkdTSao(ci<9vuhO}XveCWRY(c*OM&-}|lq?oYSBedFnWc>2qK`orm` z_s1KMrrkQUE_kCLcLoq2$4);wEPZG8=@8IvhZ`^jS4d#6OQRT_8TZScL_#>WL~BD6 zl!7x=kjRxsySw}EzkBoh9}o6-jvhWc{eOQkfADlPUutu-28aIg~;eAjkWh@ZeN{W1loJ7^z7SmV&FT&HmnY|N5xiVpV+6 zJ~^I!cDA_7Tl9k7{O;871BUpitW3G01nJuIthc)A4QKty9FmFp% zC$?mpY@H%_Xi|vEpSmPT*Fujl8ggRrVAyWaY0TRfSIdXf`NJjG6+;e+kP4*y<8J9i zcbQ=c;jQRcndCODB!H9OB(l66ckBW|cBPD5r`>`~HlR6Bt#jI4a}-sHB$+IG@`lC| zP*DiwS`FI$*bdXZ=l~!^8fCZ|cAB{$GgQS~;E;~pT84}AFrCST;5g-D%U7ypgoK$f z^Lyo|fFt{W^|_kP(bE{26$9AIL>=f!e~%(*AqIJeq0JXATP{WH$CX~k9xwrCCm})} z9AX7}k>MhZ$$|b*y_|^3!3EIr2po#Nm>9GYyeC8nIA8 z&agndGTx}yC3GiTpw);q&Dj?79L&^jFeVo%z;Z8X< z3WK=!P8u)_G2db}l;DSr=(rw`nG!?nJd`ic;v@qHUoO5CA3OUpIaewowWm!1m$c{nkBw-FxbR6GYJi~nmGbSQ^-n={K z^$&+G19=GNhzEynF`H?7K8rPcPGH-b!e0$}K3%Rt_H6cf9 zd4>?Li8nor4(>H#erZ*l<8KMemFkj`;5=A;$YqE-% zxSdQi?{cv^r)T4I^03_<4G*>^H@62owTDog&1Mg0O-{KX4aVlywfSPyeAV0e(AhNF z(WQB71KD8+W-mCkK42^sFBSYzjJvS2vqWa285<>ZbS+HzdWWk- zIiCKTi~jQ~?iZpDrQ`IpwnwS*AWN<+bKtX!C{=4b6zaNin=sH9S9n@;P)DTNbZ^v(C441MY4I$9 zuaeT*>5*2(=vbi^Pl|5;;#pcd%Z+CETZFuv>aQ`|F|Kx3Hy^Hzs@VGg6UCZzz(zu}_Me7D zUxZ_Y0gA5~yx4%h!r@Q000ldbcU|m#_wDch*MGYA{sL34mL$%LIcP$pEpjj|SVlHozmTR36_!)9B#Z z?uYO0e*FH%jf1m?&yW7yFJ=#)4(5w7(=R6~BGY?fr1zu?$Y|?Krd+L9HqH3x&%BI4 zM-|%OXEQGKqO+8w!K0pOAP-UCf)s#=OTQN<=YKsgut)DX=@G2{tao~}ynDL%V$r^& zVPqy8eX>+939C}jVDz#<(RxGcx#*^CUV0VuXpjF~)UyDBrwVy?9IpW4?FjlSD7&vX zO}U*xn(1a#M5A@3%(5_-9qYqm?osuM4wAC8gvcSEQjs1B_1&3c+wo&EQ;|S+9g$2YzFIDhTc#Gq-L%K5h^Vi^7|W6zg~0aRsV_2ElFu5OSVO0n zk`{qUC0hYKm{LeQZ-){o2?>ctg+mlI^HZ!L6B5U3AR#R}(UD&arWaClUF0c>DU-Kb zF|{+>J#k`xQtYWm4jh6J0=VFXA6-tGnLqI%g_Ex|DcYOG%1Vo4B4b0NnyHQrgz2?! z2grjTor2Ly>5Mo}#fQhqL+OeF7Up+p#7KhG+u<0;Vv!{?T-z!fB!|kerh6<^fJdvgG3`O>}CVi7Oxfxvzk4z|gZGTI<-* z+sssRz?ae83GB#=JP{xFW_n83qbKN&Fo7j2*l-slSb_}J$VgF;B6TzDG#}A|1Gg{@ z2bgZ5#(ts(0|0@C@>-8-l5=rm#FuLb50O}!P~;F@H}jJM8W*p|47FYI=__YVevrT} z7*!ij7M^ZZ0D;RY@TpE;D3pU-8XI|0#wOwR3>#wX+}JH^K?W(dYB{cBK9uG_DPeFF z@szPF1VOxfz+ymIkLj@P%NC(~$rVT`*K72E#ET0R6vw$`R(Npxj8=Uws=$sAWZ46& zB+yX7g(HLj{T#Z(BXOne1D&A43bMmlFCkE=1Ry0ZU76sOEKQ)#NoKnM)7$cdKC$s= z1%j$wsX9q-LgNb&nrJMu$ax$@15j2xNwF2E(}n6%X~@uxST>D6M_S;6fC9s0tI--Z z5eXQ~!{vy<9{#BYbEu8S*@X@^TZ!MKDmFk&g)-pqzhs!`G1_c$6xypkQN=s}Gdzaj zz_MJOKfRj192`FwU4L)2`^Iv#v%SB=t>?YtQ{JG&ds>i+BIF=1ayg(x224h)4KI3W zX=z+{G+Q>))pFX-cm!w-ab8}lWnQ|4Pv|=$0Zu3NSU(35XT&#{;A1Q{6m>W&mMmQ;AO$92jpv)Ei-(KeiSN{+_fQ1kfhp0p@#@DQRCpA)r|zy41+Sv6GCA|7Fvv64pCRd2$544+-CeseYALK~W}os|?J;#Lc8W#gan6%8Y4-t|2cBoPu5 z)GAx#**7Puf**D)rNnB9FglnkL=Pi zveYS%+^*E8tb;(cqY)k_5mXriBON|I3IsrDkF=y?3dF{S-)eDFYEcA;vP?eAvD{C} zJ2H1t!x6&|UfcL@{&?}pjoz&B5VC$x)*~5Kyt!6VLi8CFX)S?Zo77vKPeN6lh?|;N z81)V5O0VsYqtYa`lh!tgN?V1>c!=ES#1bYZrf>H#* zjj~tp#0`mm&Qz&NCv5&>3!lMgcYptb4|c!vt>OOG#o^0m|MG{kufHDVtRNTVrt>fU zw0)v!7vVV1`iGR_lZ}G} zJ`<&Xu-V(;+M8vM7co9KnSVKLpL*ofv0jVxeDnxHM-#+^Lv5OAZJu!|m5x~BSY5Sq zj^tkSNBi7cNbB*{6wS;lNV)X`7MbHraIsZtY->V9t>O|fwlKF`Eumc9cj-@Az623r zX~yygQUtBpjEoZ08h;qz@~tY>>U6G?#MFg2Y>xUneZ9o9%b#D(@6G0qd|ttMooSO5S(07*na zRP(w3h$wjMBKQUYGMOJDlvNo-E*X@`nT&i&5Bs*PaK{xk<8`B zx*~g`k|t>VLN60Grit7W$aKvxI&-Et%d^bRp>kp1xjW8lB`leND4x|C2?7H)QUw`v zaJoU3RpO6pGgo(I<9yV6Re1&jD>ahI6w$wuB^X56b7fSs)nO)!IMZmKg3HFxQCYHKRYiN5kp(m#Rx!s4kRheM5O<8HlSo@HHg(gh@=rC-IW+7(ZZnND_oxM za;1qyu<}nBxQFU=eVD*HiV#v@7V%U^+BIuw$lzirF1?t|q^`e#TfFJUg#&*5fOU%1 z5lR!2;Nmj#)kJXuZ>T7CSpqX#dW;wo5|vQKlF6)NPEM7{8Iz*H84xg&Zcd{8Buy2o zf$R}9pd*qy!PvnduQ-j94FJOIRtaBBBieB-%@}iu3sP}nH5In0Yz7=o1eig~h^RmL zm~TK=tJ$g>W3gPZBTs6IO4yATWCqn|S`V1!f*ezElubw>SgK>$i!BuCoXRM)=^cKA z1X|Tl!VwB&GG@yYQeB3VSl212L>rGt2ZUZo6-2sQ)j%^U&dbapx|<@TEQcx`ytTxE zJ3uf*ut>TtMsdwk>l z%gx)1$Nk*LqdAfrpGNG`R}rm6Mg9= z;8L6aOAgitp7P>uzN}3kY;CblEk&SaZPVXu7ok|}yvUpF$>{o^zv0zX%d=T?v}$?r zy^qe*WpXHh5ELhp5@`g%j|BW@Ck#cLPi}fh$ctpXotVR@SF06WoLACDKQL5Y=wLSQ z^68{?3ZtBGXsxM1twlbbn9Fw_yqI3h7KaC0@9b^fo{V?SuO3gE7fpYfk)^tRI7OSV&E?!=DlYaM|1zy+uT+(yU*kC2cy>jC+d7Om``kr zg;g9U=*ntprh`m|H$ITb?XK(_fsyPN%uw1zyPaZr*@%;RlVxx8#ccV@vjJ;eP7m5y zN?@y}L*lrp{jlRi630Rg9nfK$V0P@2q@pd^N(^K{A-9x5FjrA4CGqD7}yfT-7@ zGNerMvfM3v1YMVk?mAF~7(O%vV14054)>1!!SAeo`!=UcxaeF#>o4(JQXeI(KcRtH zhk>&2QE7P!)`ZzlLr4kK2@Czf=oa_paRc;Xu(d^BC5@v4gF@Y`K}%)as6mi8kaJ4t zehD}B+WKP{>Ed7%(UdV{O*Xk4ktclh_`kP50R4t zHW~5f84{9+!5)7_B{~e0jz}`7W5!;T_j9Ap^Hrr#N*VCUT6!T0Zc?;ro& zYwzFu#XtM$7yshNy^C`m{lVyCdhpw|F-6z~+bq%%7Z!UKYOMW6uZ1x%xsb0ixEuMz z0%;j-}~Uh;kEtClcTer{MGc)HyO=IS}e~;dKu9H zI#YpUpj%+9HU*%`KqeInO-Yv8q_CVin0ES)`g)TT;udhSY39l4U?1;17lY3$Q==qy1z2 zA8bIj1wpVZ!)@4V8Ma#LLCu-0DpuVp-tnAs@0oLqOh3=NB5x7SlP7Y=j3N+*m<23BA7rcrM%=Q`Y$DLeY@Y?8ZmKR^Bgz^M%VMji`o3qvbiu89ii1n&SKF~ zaE#ytPvrfkTr%20N6JJkF>E*qf;4da$pD&Q8$KVy5ltK=ywk7?p; zlUL6SU)3>=HDm^y`UTC1B!efI8Mzau4wn`{C z8POLX0voeqz}Q7qe7p+NHQOnO1x-$Dstjr)GhTw8QC`N*VB#xOYKij}Z`T&keCFkg zn%*E$AzVuwU?pc~@Is^L7zG^s^U+qiFI(8coW10P0N~!xNYCSV-7#V;%oKp%0gJgQ z2@AagJq1M^*J1(&S(!u;u9VdXwpJ)(=y9D!>*_u2W&-&*1tBUbLoI~_(!`AMpnmQ# z+2@3cjhyp06#}&IinuL=Rlu85`!sg@>>g2SsIMP905<7VA86T!r;WrGABcx&Z~V+rk?eq zNkb|gPqK|Qm$xpocjy5RTduj??&5keIT;_lv)cdKs&|Lk!T9J-|N3S*z2=I4=8p0! zjBpndmB8Wz4)uGyVjkF?@l;Q~%nY0Lv|(i_ItKzV5gjmqY&1DKN4pScm{O7=5?D&~ ztw?sDP$z{mv+Z|wdi||l&#P3dUY*WQXU#cpE7qD40}nfw9Vl8-u|G%SpfU>-o}%b% z54VYk>9XOueYv@m#*Aq#R|PQ?Q|JIfK)t`zSpaI}*jresKxXQah$4t8<}{D4)V6q6 z)!fZ5=;z%R7t5R3^~u5Zd;42oxx4eto7scw85i1KabrBQ4oXDb1a{Q6P0P?A^3ca< zja2O@f6>Ko1_)h&kJnjmjk*sGdvDxX9c}e_%f<*#x!ltQpC~q;FK%W``&W|%H&1o1 zm!sX)?5EFrFK@e-H{ENl`m)xDhPBrpkJf+wtnSz*_4+e?RK5jSHU86v5*@f)OPjV%(Kd-}`;bh(Wbhi58Re!SNw5Z1x)Af=E z8o6*rWNC`6=~UsevQE|fI;vb1goqWDA^~C2Uxex|K8W-TOR9T7qz-#Du>o$GO1J?k zR^(a|dy}s&#VbYJQ%EUULTz@;k%z%Vq2Ta$!@*-4;5n``mP@#%sF;e(;_TU0$Vj8q zfh1eFP)BRFe5}Qgstv?RS=Ra?z5m1jRBzuO{NC5OpznPrWCm=@sdOrSGRppD6B?Mw zU+43wY9rxqU=gTTvdtN?DAU;+c0YV~_2kJIo$P5CAb^L?(es9OT7bcjH2rCZseptj z-A4@DdIVbTjOEN23o<+Vd)?!s?%~0DXJ>u)sCRV03l&zk^Um$e8Q|GDcMx~x^Uid- zzPRkN3Y4ItaiE1E5u>zbiJ8ENI4f7Ir&$u>8X?MALY<<2670U-u@6&ezN_`*qPe|Z z91houTOZikMiDj&Nihkjmea^>3mFkwuH5&Vgb}TklPI~iLxq7>lIN7oYs&KS67+R@&lQ?NHkQY5@c%Soo#9A=V0YN2x%zb@4FA;^m}`mwW6$>wzsS~{7f1RVeo!w8ar8Y9o#D`^qRLcpMN#dXQ85nWKnGq%&t`OWhA z)#A~-`;sOqT2Sp|2)4*;l@(ik6vuyiIC%~!Jl_%aG9g2}>j^wr$RmLI_ZhmXj*NGgobOdmi zUnR+gw5J#-!V1K$cZKwMQ~|T<&ScSC%$AQAi&GZFR#nhnkgIaJAPmeaP8^VvsQuJ| z`q9j0aYQDnv7rD;6+mS*(*0fmiZPs`LmF$_a?3yt`H6^>GBW`$*ZM>Nlt@#U97xk9 zQbAa+oS-$!Hi7pkhmmz=RY5-9o3ck~BBt37Ur2yI&+L#g&*@Or|27 ztYG*k$|#h%3Kh=jlnXwYfXKZK{6HY2iD%}GAc3b2be`tKBasV+)3qphHJvW48%+q z2@d$tTxux2S&Eai8$^+O#Ff*Snv=bUM!sezkKxhQC#{7DhUyib1R3;QgMF2UCM4I*n5_cTJ&E5w7R3U6f zCmjn%1|4qOtztc;v&ujX({yNIjqhbWizC8N5U%#*gZgTLKz!@iyH3~;)XI!OQwxw~ zOMeQu#H6- zlrzrXn-JkF!py`ZVoE>FQ+#7pLN^NZ!>)8)Z?oo(J&cr-dZ80?JJ z*Vm1g3Izr!`l$|kq@%KN@BD+S$80&#h*el=z#{^A?K@j88#)mv99jl)i}Qr45*RXwBFZZaMj&@y z9`R^m=*LsZ@YhdyEwU8JYTLZ*L|vO>vL5}jiaejJ}|-( zMJljqAzehn^*C0haZ?{xA-1=>dpq6jG4CYqeC4qF<{rVcKEGN&KVP1mEw1OhvADw< zgC_IUl*f0?<<#^hAMq4zfMyx(Ibd7vTXutK0bHeFoPP&KpJb|W-tY6^{7u6&kI~IGkIcnU-4*dEd z(=906*WD>4N;;HqiXUK}a{`HC%5omA|EgL4Y`Xe%GT>d6G-ZSdJWz!t({{=5qvB9q zXg#?mi0)iOvhD{7E`oF}B?+hsi$BpnH7M<}UR=F>*XQ}OJl<7HTtugfWVnJkX{+t) z5kZU^m-^NpFMtn6-QAtuF6%#cJ9iFy_wMjWlJ)jhvpwQH5VWJs)h%_cdH(D5$@%)l z%g*KPnpd#$rg(3X7npk51Xg1~vyEPX3#1AO#AzhL&#)~`ejQCWnZmn4pYvL|Vp=&dXozY46~-CnE++W~hxZ z85+Iw<^1kn`Sy4J>)+pcxc7^H^lv}?pZ;V$ zGMQ3wdkf+3_$0At!O|gQNKFH*sY{(m&sZYC0$aGnW&kTk78EIS0IV<2lskmL2cPBbhEaNaX7? zQA9=3fi+Vg2fwn92!#tJT_nhKuUZrBN|CdtR!P!wdN<&J2eIUC8b*n5q5|>QEYFYu z$>x`7WPiy$0}k}H5}Lt;Ia$RPV~LEh3?Hb zsP&BR%80AL9_LwJb_h|p2Gs&6ow!1@p-}2ULg}j(t%nq#GkOrvovhfBc)~Q5_7q#A0fvOPzxBqhsUqwyXS@|)?2!E8X~6Jk;knKE9V9Kn#~D;p9PN%Dm4Wpn+snY>!=K56#9!K`m4@!AC2Ukt~N;FI&+_ zayF0VbZcj@v+t7$hpg)Nx$V|U%W$1|zP{jHWYg6zzd*9%QKoZ7x6M0ewnew4lh(5~8XmQ+OBWEqkr%lI z-OfXa0%*aSro0~SLqej=1F=BO97WqzbBP8@GbnLvz!$@IU{l~5IcQc7~wlAL1%0^!9GI~l1y&9-DC&>aqkfmwd{FN1b`N&Dhr8Sg*ymN@&47iG%LxnBuU5|< zv+Z8-{vN(poh$CarctaDVa9;9%+Z&o;E%D1wh)a6O%O^LBFeDu5w_&UxuGD#BYfJF z)Kwx`9FVRILowyZrny})A?$wOn(f#T%f@&VfB=)lbyZe?5n)V(40i<#JDXnKW6H9n zFk#KqwH;nSee}Wm-}^8A=GMJ~kN?r1KKjRhvYudGq|)bGSu7<)iq%G89FFk%Avok8 zFOg504B|r)cO#rqra*3?G-26m5Au|=t=*kF4|d*oYy0@#d_Fn(?4#@F&lcC`o!Jb3 zFdH0jHH_CeDlBzbaGCMRIs!=mO@L(qtU&!|#KE2O&duC#OruZ$@zBXzqrD_Pr_J6L;>RFzkWn!|Z26kLiS%^xQT z$sk(-V;dNVv+;HxFg6~FO>nJS^UQqW85kq=PqjI%?yb6$~ZEebC`LIG~T=Lo101!RKbd&l< zRUoP{NXRh2SzzG%3by(@mc8T9G1sbiT)IvI3nN z7dRnhBh?y#`pYC01hcMxJ)6Da^zgyf`@36j-W`8^GP`@pjfIO-x@xXf@k$YHbMg6e zJKO7>z4g}Cdd!n5cse@kXBa|EyOZg9db8qAq{V_~1+aXdrAb(hB@>#1i4OZ8a4tHDMz0-X9ID!n~SY3L}CRpG` zu*J!gJ**6y`e;}YdNe^3fB~Z-JOg#U{pQ2p`p`X_(v8!{YY5pVR2 z@GGVXU6QI{jtHV;9Z&P9$~laz9G1XSUQtOTVwMCz#J>5(jpq*R9N*vj%3G{(p#r{o z^2x=MFP7Jr+-7bJSyQ+$xXrMj0zwu_sM7AWJ19wR%uK)FDM%j;I%kZB6<8Ew0ZO77 zKWyCE=$WZ`8B0(HIG>&~j0$7Gi8ELrx-;msFNnWgUtTxQC(9S!L+&FQ9D@V^X)#&< zT1y33p+oWVOk@RmwWk}8QFa4E3t`MK5?xGg5kC5n0q)g`6{N#mpF!H=Lfm@3;KsB0 zus`Nz5ZgUf1CAUkNwFBLG=*s#!?74F!ebKYl@|bHV;0@k`mJ=3DId?56z0$~q8bmm zx3lBrnK`!$Hry`wYn~tOGXmhPRV*NJv8&ydTUfQCLnc7>+uC7qDf2HJ6SXIeFq31Y z7+ReXQ*|Z^mP(xEG!eGhrq)|l7v_kV#Hq9}+2CzE2SE|V1tvoyafE#=4wLdxY%fp2 zc%g+Pg&p1|7ygV$lcO5>(y@8LB=FPZWzIu+T_!p)6V5P)-kf$hBNqlnA=EB204vu z`OtxUH7jMr&geYw=#?GT#nsMy(A63x8siqzI2pvX6frzY1(A}6$|&W4-d@-d0qq0^ z0XDbFfrmFo*!ys~iSlsmx5A zT^AJ=a3tkLvos|d325~Ul}yx86{Fak!5XIQ>NE_ZEO+A=y{T@Rmvcni+lf8XoY?e1 zDS=h+bx((3Re{r9>XIv&%vvD^EC_H3xj^gk)FR*em#6f~K%d26noe?L;tS+x^aw#B z=MHk(3}=ufUwCjTE5^cH^5pt3rLmsD5o|e^uV0w0az+8e(WujBy@$%s|YZX`5x5ec|DA(k2l(iA!>p7(dRPZ#~k@ur#)DiWGkK>{b^hYaIw5NyZU(R&Ykh-9(Qg{CNHMTiw@6m zm&eAIkzzq|odfV@N#2jXTs3+5LCniB+k)l!XG&r8)(rYD3!p&0TBvTft#u{`y7##8f zJ7^l#I5w}Q%M)(5bH->PT*Hr!mQ6k}4qR<3%aBrXNMA7&9gmm_cE+q7W`)UOHKu+ZG(wXI$@%u;t%Kn^JA*s-cfNkHI=bncEJsau|8D2*@!CgIWYRvLb#AXZFVA^21=Gnc z&yM3+6!6lfV2++vU6c88q=l6%a3%<~HXo|9)dxS=phhjZ1t8!?J0k zHLxPCR?`z6{o`zq@?JuBDoEVQRF1$Y^&u|Rw1`4Vmuxu#iU6xzi&@TY!~<^4GDSfS zWUmzANVJLsb`sYT^Vw+1ulmbZp42FhXi8CSgeyyF3Mm=3pfZV2c_=I;g9l1;iaGDz zNGn4oETVf`T8^@om0bvF!L+$#%N38&=v(!j0opfNjD~?zD%3&-9z3Ns!b^9hx-T4I zx1Yir2`x4W{nz4k)I!3xQ0i%sL=&^2sjR-%V(F%lUM8Kr_Hmo=HjY5ozb1JK**MmTI0CmHDW;N z5%%K?6XFG~8&ZKC4TNc{%Wr9*0jkQGFt;3K(&C%4Xap&H{aX*9UkzDIBH z)Tlc*|Hg+=7{y9gbXca_4lg*0(0n(=SY6C*D|n7TXKoINYq?mAj*h?e_kVEo)rY_Q zCqMf1fBrZ9+3kA3by9F(bnOjU@S=zaD&mtXFLL~su2ggDA2||L^GXO6WqT0QXL*u+ zG|SRPd;8n>?rq<>!^!=tm(Q-BKV9(H9^cOnXZ_S4avqIo27$M+LabQQl^vy(!j6(@ zftU*VXiz#uc5M)H1e#bMoQ~;%MH82Tq>F*Y$=0Eqa$AjtE3OLiAm%MH7d&QXd3v)x zS*|aA%Cr(?qWUQ(3qcAkW=YC@Gsxl>LicQ%_$3h@v0##rK?A}TpX~Xhm<9cE94em6 zcEP!@-f+)p;dwQVVY0*Y70iD>=Y>=p=alO2uCD@qsD}0$e@3*V3j|k4>i?e($WaT zwc)H2_@~3QJ)^~s7(DJBiG(g%#R9O@?L5(uIVS@tpaoqD)DA)s!~`BPpO&j`*e13o zOK?~t!KOkIYn&{vm6wel=h-njmrb#WGboHzHlgSBOjgxkXUOVFA#zALP%nlq-Bc#h zHc<)#dp5)YoA!X?5D**zsP&beBDP1xNuX2^mA72NmtmDxhM0GH>5O@>t36#l#t92@ z2wQd?f#C}XY@gGtYcR}`?piAgJDxD57i_z7H4o2ua}(mMaMa#ZGC}LI_{-7~511ahRI!Ed6oy$AwwuXl@EII7K5{6|ogrNl;nLx&F!j85m z1GV#fOPJ4YWRrrIAwwc_7zjjKxHLijC=ezVM2^l-Au{1$9a>-B{+uAVckrFjV1IA> z?ZIq+I(xoY-{4G3yoMVFVM8T@3)PW1AS+=AMYuI;=z729a`x={muRpafeSn#8p3LzKlF5*(GJzIrcq=8eGp3lQzCTr z1k}!8xW{Ar2qD&H&6X##`N_I-t5FebWx;Ayniwdv+0In-v{pneAEzTcHD+(r->2Tp zo9WDlyI)ME&sII2e}ld{9WtY9gg37aQy8z_TRnfTwn3{nQk-ZMPz4Z>*-~GGVRPJ zJV4yV$ywQsT1X*&1h4V^7h{mShip5RYy~9=3edh{Jk00C+c)p7?;fnrE;`T7m|=Qz zvHcf?q>ckIcT&L~rX>Npa;G*LP;@RTzqub{3 zW#@cqML779ElvX3c>w@N2Xfrn!d466xtonY zAOoo$E$@cJ4Vvos(BydFhlkV~W#Ax9>`h*FA|NI43_EQ;IeLU{n8hH2?%i(h!7h$q z#N^Ce7F8a}4yA~#GPWIbObVY00BCix=-860S{a?h?3_wpHd{w`Klr;pc=+LaKl`UY z{N?}h$0J@uG^EbtcKsF;CF^5T39sUo1T_Wd#u2`0iDD@22Z#^_jdFoQ%jMt@P3*6S z-NAV4=#DqN?{fd!`s)1o?dkLR^(!uQsSDDwG@>^gv3v%rMFRwtUl16*_(}CvRgO^S zX=GVO&ss%>q2jS*slnvXIw~->n8zw1BcmzVv94M&?&ek2o$YaF&kJt6M4~&tZccBP zPZynYp8PGB+$#m^3^EV{6PZ;Tl3{{-`RKTfjgo2X3AZ*Ttlt)I$z&UDX&*GG1!C6h zaM(yTkJ}1fb(gm^zTG}A_2m{MKD?S@i;H!%n8t-cr?V(i>PHG`@xela7gkLci`fp^ z>R6PG1qzy!QUncvvy_mjAa|N@GwNi%K3^0sn8+_`3IrZ4Bz_?C zkVpAITLgm3p(yg2pkTA>Ls$x*u)2K5n&UQUB=p(^&J^uXqT_=yKgVgWuG>e)CKEo{lm8D3jtW1T`Oxc2qkX{sS` zUSnemjn`%v5;9%^0;f^9lH+X6^(@HB6$Y=EIZ&o&W&$OI*1S+l0V{{x7{`vWqTgo4 zF_7&J1AR~ohC>@#;AdH*8xax>={8`QE|Q=h^zGzD#jHbB)89r)Y{w!!O~Az;%hFoV zMrk~{6EAJqpk+h}2}?PQDebCKwlzAH*;9NYcKUUsX$En6kDtXIWq7UBi<}x)Ya)dl zE}ya=Ema#NXb0!lHO=d5>ZV>f6{Ks4++i^9QE#s|YmmMG;05Hdp!whJ0kA9X#`IJfd0d<&I$M zsssqMCW_jJyF%tiJ2;7^pbJ9MDROy$TVAmWtH>afQV}FJ*4H)kHd=*KAK)pkgg8Jb zjW!k)GNulw7+i~}iO2jwRdb3ozwBa1^R$#%Y_Ny(|4k@_Py=`f9M|X9f3}#P9PfX) zzxB@c_`$HZHC>#{=P!ApxrHKf^P@sqBjQsDau$Q9jOa^Pd(?GQx1TPiC-c1*i~a9z zZ@o3%I~EA8}+`zefx%PF1Ok9hrycpiG zt5hW*LlY~(E&Eh;1*5x1mCS~=u6Xc62ao0FtD~dNfB4td@84NJK41UwuZF*RvVQsk zY?hL>GNN%M;leIG596FIMIep=4`*j`N>NFwZwbvRfPCZwaldnRzWmpp_J8p0?uaTA zqscEHAY<=IcXicSKBZaU(gur|*8QDse|z2Aa{UfxB+C~TNYI$T2e6wEvvR_Cp5=l<&Af8(iswC~gA_VH@P2^9Fk zkybbJ2;r-RiYQXl$kYsNT`q&C99gzmiDogC){xrESf>3Xf&H_au;6g^_$A?=h0Ecl zJXk(Xngi9gz%B&11`JHJ^xy}bGSru$?zyq zO*fEh`Sz0xvOHp6k|NZ5=Due#Gq-o3%O zYK#VRuqmRfALmdo`6!@CA}o!l2f$X+61?i{7Z6o{Nbp!Hntgwv<^Jj2!|nU``@1{5 zRd0I!V)F8Id2`X>svt6~zLaJ#$PJ@go|VvwKrf+%Lo;YCrAL-EpH6~xlRPxLPLj6y zh2=FJtso_G=7^dF4Q8PlXnF02dRTnD!xd+iiE`^8z3}zw<;~*R?dpU_ib_Rep>ZgP zEi$$N2A{TzueAHHt7wSjadsR~ZU~hdqbS=pr_?0ND$lp#uu8rr&!H5k1I>g>3akFi z7uol?U7u++S05JR!8YS|G^%CwJPL$zQP~76V&f#-)h_(Sj2?+e6)pw!HS%IS0Z8ki0t#*M z;bazZrTaKfNs$`)LmAHW=2jO<(X9srv1J+;Y6uQc(U>=S_CbXVg8&d2!x1BBEn3C01#Fw6j&$(FoA6>x>x&$$N3_-H zcS)iJfDr>5<_R$p3^~PjfA0cIA;W|(f*=WsW5FaEbt=k_hI5HrjzMZ?e{vko+H z6l6p6`r25F7@piZl4gr~!sCp%E(bq8w6V;}AoJ!R7Ikjlj&#N)9F(EuqW1aXxO8U>VEkk$>5L}dd837S z%Y*M%(?S;28<^26SJ=O*KS-65*3cPcY(*!>>RFZ)!iO^20ii-lTnG$1qOZEf5i~mb zPBA_xMy7^V8W|(fq%$QyTGb!6ne{51<+$Rp)gj?U9t-qVtSIxeEGInyMh2(8bM^u{ z%iHGX;vgFNE)A8WsC^zuO{TplNH~d2d5|bQRU#&VfpcI&fliT$oS7|tfa4y`=Wth@ z;6?%tc#sffN*2>HW5?0CRSct4hnk!yNpwif; zEbs`tA@{4mjVNjDl~{sGopG6*h(kkzYYLoxu;PeA7a&wy6`qKLiV-DoNH}o}12Xe= zK7uvW7g9lxGB*5^Ta;kS*N(KUI_z=SX$3_|N+zyE8%3kNLOf{M+Pcd}bAVEv0T0vO z&DHd$)A^Izo$nm&etUa(yx0HgvbTS`IGuMcUHQfsE&NM6IPm;80CL70(W*hfP`UIS z!l2?Hp?W^M_{nm5K0o;8&fa@FJBP#Zz2S6caedLSWYNoOcqSSF3Ty?B(s6}AO(cpo z9a~XFA(TsCss~ma(#iL@Hss?2xfb?nGJ7)PhPuuqv4A5>20s{Gb>LpZg;sKc5hArS zghr$O-k`fr&0KV*^X~O*dBNQXjn_`W9MAAp91Q74ERK(}qj{32jSXrM!qz{_YDx(L zX>-hdJ}~09<)cMXQoAy1;ZiwItKaYK-R~ZKwYPt-!|SSfw+)Y)d-eJJ>gwWZ(wW?j zR)=@CKRE0iF1ts(rf{;pSn&WlaMG<1$N?Jh>{b(6Kt$Xc9ZUgnbe6E|S{z^QHP&A27F zQc}ahE$sP48PXcgzE?){85@w~k(JX&k;5L+BCyAu$xH%CYbEDSj3TJOv~qkY$Knod zsO9b0x9j0fyqSU=QuanU%|*Jt#Th_CYV97ylLaAUxCy_t8Awk_E2$!)jQv9AqUnD0 z^7&t!4!XRyhSM(d-tCOUi1B}vw*BKwtXJVVgY3Ii(|y1VC8)b}DD=Pd0zQeu8w8-o zxLS>Wq$P$mEuS`*MCEVd+g%}s${r%|63`+Ju@w#_Jk~O6f9i1RwZ{;g!6Q7gOGB=a z(6!&czWo|^6x`dn`|zGN_M~adgM6Di%7G?UbdTafSKS0!k1zTe|ftDO90RnoVpHCQ%WxP)vz1QTA)W zs3XY$^H2!v z@VZ9kPMN?*mUBW0sFo<0F_epXaA)W^nuaV|0SeA7ep(k+QKVQ(! z)}mHz%7-^vQR8UTK%z#<)JFE_2{ahE7?f$4cQQ|tPqYz`Y@ddJH==xi3U zErKHOLdVvL?%97Uq2}iZVZEzu5h(a$J^(9BgvMxN+!7>|tD22|3$Nhm$03ViIqL== zr@2O6S~$T+933itGE*crXK`!rAPFIQL#PhF)SaSy<0^V&WFmp78s}y`QA?yTrXZIR zjxZ47u6x!)<6Hx<+FzR*pPm;nl&KdKMrm-G30ay*)Q&vwZY8wQTmpcoGWHb%%>xe< z;M4G|#m$|I5WvXpEF1)5?8S=7(wZ1rDKKn9!a=jfAqOK^fpuLVloEn0H>4QUAwUXZ z42e`aJk(lP*5y)>0MYXioD=Aro?iX&_2kj; zsHYm>BV!jHkz9wdgCWP=2)1yn5#8gCG)5>>)_(B-&*qYsVeoVj9FAr>#1GL$s2H*t z$ZAzTUV$_u;%MZM7QLN*oM63>!pK*3!@-hqE2z|(tx?NK1a2T?o%sIU?wyDI!#CFZ z_gOo)nl762m+Pk=uWw#-C#;xcPUCtcWG#6ZY;$qA{o(HT&BMWcUS52&IGZAiC(fz+^YZzD*cDuxIEsN83x@3I2O;uO7`hm$SjqV8E*wfBbm$ zi%)q~aonDuQxo;)pI`XMFfu!HuH`L>MxSKk!U4o3det~lfR{{Ad#MV>104vl*Qbj9 z#m^fahx7fn*ZbDcK!gAQKmbWZK~!VgL*fh%K#Xy1u9bv9nnTZ5(EKw^yT-B358-B; z3O~l`Xho%5a+a~nojA<3#qb%P;NF(xuwRC%#=O-&gd*q!ol*q^M^EL=%H!QZLv8wd@dRundC5p zk8)H**eYMvNw!68W)&TXkZ23NWF~13YMrW2}o=?EZ*GZ@IB({$hd) z7ys;!78j@e5f4Z9f$j9A2_cM2G#ejnM9ETT#dECyYJr6i5XpwiCW{+QbXIcUGk z%{a8~gVAXBXmoJQZK#vWv+3noGvO`3_ zdwW95`=;hRM-+YaNm(XfV+M3LjO&x+hM$6A1ady0TZ9B)9P4;oBGCso#B9Ie+^r8H7g}Gy;8$dekPS1 z&e7Pq!@e0x%21in9dD~5+!xJ+j(*v^Sk7Pg9MRN_sMI>5trPH#QZ~j>#jXDeHzVxT z#(j_FsGEpRv(}O_rrjXPIGS7$s;Cq<-!>;DjxTIFfHUM`Gj>XYAkt zTjH35V#Y9Ce_|Qi#@tpx<6KnyTUmlsu(q~AE-U#Eo9Pmf?!ZGm$fsZcXn3o$d)6We z0wd=VJY-XDKE*AAJslOZmnkCn3Oj9F*f2^)j#ejM5dw<9m>}?guT5eVIhK62_B@$W zGL6VSs&PDnHK!{ys&<(fm)OiRtK{rj2pQZmmMD>0oa>DYQ`!tGKQ<>5^Kmg(>8yx_ zlS6h2;Yjc@YKO{!JDfaJmeDY|U`Rr3yaWU}Jn{xVMt^gb1I)36tXNk*?DJS9wW383 zFs8zW!qf!pw%+Hwxi>Xx2#7iE4^ObP}gJNN1T>n67BS!t(joL zaR?@ioktAh;)PQw4Si@rP;6O?ik@+kJwB=|=e(=hQL^+k_9g8fifBw#s~VSxaDyie zAmAX3?uNA3K?M#5J#fkgT_I96_1%0nhbyZprUm@hS(uu@z|=}GSN{@Vq;q0v(3z~B z%`Y!+r_b-~efMDd?Y-@=RIvrq%rRs$_OYhyU;Vq48ps9dfP#nVIR z+yrdk6-XheqCEle%RLy!$GzhR{X6%&dwa<1TwXL!K3ZMASY4lYXH!}pV!90&+frCD zH=W!xA1|)2XN&jtcfY!~^Kf^xcR4?~UYsx1E+36)742wOHxhz&8JYpyECJZ(#-UE< z>dHtYFa}%R&%#1X=(on}yNB!1pm%!O`N-C?1(!ZK;QX!Sd=u&qLgT)v~ zqDi71$qW~m2O=*pv4NyWf4g^WYE}%4*|+ zRMXf$#xtzGNfZgaU_{Ly4}z_*7L^;9!j+w>@NE+XkSvjtXj2Iu&ng@jN0!0o2mUY*JmUn-IrV!5qZ` zezS>T*l7boOGVRCqUhmRA5^KNy;Y2ANnx<5(QWM@R)D?v?Cz@BIv9?(`m=NO*bs{* ztk~#7_8=#-bPF84@1evr{4flHcumdl_};_c`@#0txiWL1%&D&#~2nIZL1Wry@jaC2_SPa!Xkdrsd#RRwlg`lH-v?56+Tw_oPsro$q{2MylJ3~VC79Ks=u`a# zZUNl_nH>tmWnL*ERSSwhX$JJKnGkZal7)Im&JG!ZBWZk^DSCo4#6^}&j?#2gv=vXP zQ`(c37v&grlvK4ycLT@NJMv}7>!DdxX_swLRYP^2ISOqIh?AK>ZTQx3qrEa^znsY=R%!D~mzC($&#)x=Xf zK(%<}ac1A+jM|x##55e`Jvms$*3`KNqBB5+2m%DT(3H#h@L}f2*>k{1#;9<><14w8 z=b+M2fKxm*vXSuqV{dT zk@VsOMbIB2UC#)WT@UC+3*dS1%ZKKP1j1d|#U)$=A4E}+m8fcsj}1a^NmaD0z^!cq zAH~40rQw{3N~)7By1>A0IEjZd1grrwhmf~BWU$Zad{`3_{?d)RHE<0-)n;A|PG^4> zVGe*?JQR;Z2u={w20>$#DGN%c#1vMNufSoti)gA7c_IY2I#}OZ%pA}qq0mm)LL>#s z(-;b8qeT&s_>MiHBC~2;3PfnCFhrEsl9pme9W|dpl-ww4GKb-cg~@}`?W#AwTz+!< z>g3?|z2n1g?Qg%eKinIS4z6d6~cD;@25 z(!%)Vn5`&lYDqRSXTv0962%etJB>ByF1Rv3Y0(VIt|U&2ZS;AM}rT+1ZK* zTETGfV!k|gowHMaP33hYxQmOLOduIc9wV0&+30PU8g$fN4G&-sLA3EQCxCKRi9(vu zqSgn2cpk^ML3Vc!2M^vHzWH8fywyx6&E>1+@h7XRlMe5j;PnPv7?p1V8?G9k(y$dH zb&X}S^VQSy$>q)b>EZnS!~OS;w(o6k?OaVSCi5ExF*ZcD51bl98=i)T@nN!R4tATr z`i;d~$LrOw_mgMCPo7W*J#9y0$E(SjdH1I2{PVx){^UXL=U?=n@a6|Dwei4BOjH9A zbWw9*SZ}Z~P_Z3S;!l-TS3?t`{1YWs3#|a9pHw=2?TS(`kql(7*euqM9<9z!JMVp^ z_ugCUBNol_wA|>e71T<;a!FAnSMLTW87hVtMeicpU=uONL`OkddVC@iwbA*y(U9rB zy5erh_2siQ1HoS$bpO^nz2APj_YZ$}^`m#2Kl<_dXP6Hz{iYbHghkL%Pb~Z;v1-mQLwNs3H;}MDD6!=Eey&;2}~^ z4`RI}0uLYg7v}OHld6rNaFLpfa5L>E@}ZM!q7e0!TC^Mon|$~Q*AxkBDo$E6?}3Me zmP*W)l&AGXTJ{nXo;jp#z2P08o$>uX=PTd|1w#p8@QJFF1Z<2SqnI7Kgruf~EL(F! zsXU7Zr&R-7z22;|d^BG^UhoRi&Ku3`8SAi@!%X}*U&&A*Ei4@YFNdQh@n%kz!yv=r z@H2%1Irw&4P^Mp||k{fUFgy;#z>*`PKCN)pEc+T6s=^y?HAYdg_n1hB)vdSGHsU zAS^_LsA`=&=5srTgS)@|JKNv<+VhV-d;EX=i{-25Jg~<8LMKtpN*j79&(naI+AoL{QfuvpuQMUcg*70a}#7d&%EoL__r{~XCyyTG6lqpi>m4Yyzk}%rZ zIigiv&Zd9}noWbS(KCa57l=0N8Cx3^Mn+mNl7-bqAt^rbmp^e(wn=+T{b(sh+ug&R z?%i=`7qZFfO5!`N>;$T5) z83eJJFr?CuB8?J?(42};6S}ze$#NTvHk~hh z*vt;AJ+ZTAY^7AFQr*NSayNiH5EvZ64pa|D`@;16$xX97UCvL}ECq64UMz&>r!;{> zfS4gCYFuhM#1>FJeykIG924lED6%Qx0R&ymle zGLAaPOe;VpwJCbiO7Q2{NM5l)woo$?;7|X zm>=qR;Y=_(fT!)Ej9rzbWYy^pkNyFrDI=#O82Hj6=o^|P<_}zzMibAMXh!%z=JgP# z6Bg4}d`L!puiDwO0LU?c|FA%!pKv5EQxuz(h_xYvE4hx>F=2H>wo>lrNG_zYu(Y+E zvV^0d`2Z{Cf&pl}MNsJI=V(LW8T7c&5yN47vohs#1(|3GHQmFlNK6Us`Dmt?2aHCv zSgvjjlh_2o`K#WJEtbd!1JbW$F5S8%a?+d$7bC+Iw)`@Bb6yGxjYF0w7=0xzZa!#_ z3Yjn2-~dWY2+s`4vfzlHG`)M2O1Y^3#L58qx8&jj+ve;v`^Xs)Avt zaV;O284c(QAe6bFM0*&fOsWSeNKJ$@4RGwkCuN+v$=Q+)mXKhR#J>zd=*KW|)I|8X zt}obB*Pzqc))}|a8yH46KS2;!a;M&sld!UoQ~!3B2ApvkJTh*(2>g*F#F>Y$|Y;4zT2_Ad5m z_O-j1GO3Ocb!!O7&8LK!)Fu+6M%)U+ur)LGC6uEu6&A|yR!TUKqgf*^Rn1*Jxav%K zRRfbiZjI>ocSobc@o<-AEu5rqO$c*f#rS#6LVVR0RISy3tWstqfw)+JhNQWfPfq94 zSFSnl@!a;E{?0CsgIRJbKC5nAjIBSyIesbK+(!rdUn&VNhaL`(sjTzPbhf^@T|T~@ zGi37>y%XlZb9Nswn6^F+J55Bu+Z zIQr&a>OXj^xjbJy`o;XyA2*LbU0-osf+wHA2cBGsRRNoFL!4}#;IG>f$#I4(SCiR` z31|3u8{=?yZ~I`>+o83jZ`M$D3B47Qz&DOpW1f(-Z2sVTtN-?QR^PwB9&Pu2aoT@+ z>Zz0YoOPZZw#zwpJg;9~cRoAqy?V(aeilF2xKI((B@4zTOKh=+ZB_zAU~RY<$yg%h zl#oRHg0;*pD}_LdYNd*%Xhzh=hg==y>82+<%74Mlo}JOy7LWSPDHZM}fQoTL+8ah| zLLgfG(pPw4(5?)~oWCNb$N>-lsbI3-e3gu>GB6-m1#-!A%$K)ctR~O9TrGEz^~=@A zPdg{K-TQ~#@4emq)>k|G$K1Z!Ilp1dLSb0O9Y~?6wY7y`6xc{9_9&`(G=MU(N#Kx+ z;BsmX6$M~9o`20}VatVOkx^tL#v|I>|DwcW2C=4Pn|~`r8m5+!DCJ-zS*}f1BnOWz ziu_*lA(g{vUzG2D4o8Kevw)o4BqagNaXpLQI4xMg5DJJSqej}Nyr#mP&BHs(58eV9 zHpU4|rnpTMT8Y#R-hSF&e^g%s`_-T#%Wn3oIxK zZ}^SBH|k7Sw!B=@I`TF+njfD=zF2YkZ!vEcQ?_|YOvF?O78HYCR4^86cA}z9g!}dm zb~+@~8I`q)cO|4BFF2{Q(afNgVKksT;MrF-Q&ELF!L!im{=(TvkqK*Ea?+a(ANooK zrJQ_Y89C6~edF(af3>~y=l|@d^H*1Wo|2$>TbW3L7u0N`R_ZFPNveJHGIXM>Qh9gO z=-$Bx|MBnL`FFl^`jbbG|Ihzx@$#wFl`7{6vZ@+T$`&S8c?opPoHk&$!9WMJsw(eC?0-%=E_FTX*_{(Q3ww(HUvW zwE{{Mlwkb0SgdAzT`XMfMHm$vlEP~LYp;yzwotZKgZ*l-wcg+Fzq!|Y$U`!ho#}b= z=xp}0+tuS0FBsH*H5iazip$!1XNI-d{nXru{8DxbK!uK#X^cfa5U3^DC5ON06;Yew z6i!kRAqfvs@mxTkEt;EVakKOuMIz>EIs2kn@E9{6eo@pG@sGXw(*W(KrBPBrOrRM9kzFM> z)DrWl%v3{-<_Qsv*s2e)4idOMGJEltsqi$gZN1z^YD=DdGo-#(MK(&skCck}0>-)%im{#FA=jdvBCIeaWS zq~&s4C071WH1sk_i)JJ(SeFkchbnPd1qIv)NnqQha~3eJ3{)>0Is?I^lwvj*L4t=f zBLKkEw1F&{GdvzblgS{=R8wXBC{-(~iqEn1(ivFWc^&I#kYn5+7q>%=Y8p;1oO|<1 z6b*f1&`@{i6DzTW0(ShVw@fG|TrK5)2uW~wO4K?Jl*(QPJ?+29 zH?{&yg90|1m46k80Jx+GD#WkYhiEAy0KfwFf~kHYW8e9SkM+USUWl_KvNG=#ycPfq zu@tS6r3efxp;u^W!%2rm3`CtGM5~Q87pYLfU;Kg)iYIOY4g}uE#RQLhdkRFpj#YT3 zA`*O#uqoY&K)PqNv>QC-2y+$Us+Mfx4h^EAfQRPbfKUmThw2dHIPMoA8<=J2FIgP$ z8mk2Guy41Xa}XK)gfjgr2I83V`BzAegF@PX(1c|3M=6a=s9xPpp59JRxmAXDIc$&a zj0U;YzM19jd7~@zO44Xay1fGSKpi%Gm6s_<8uPvjY!C6iS zu}};msZB8Oe0Tft&hXx7xXW`yubm1$;-*1vanmf?NX(c!wkz!%wCNO=pd-x`^;5%b zOe%!79KYFtMh{i(^@o`#1q_%~Guqr5?PwW2gV5nFhs+OoexWNrsX^3hum^tB z(NeS^bXu(pkQF`^WUPNNpZ!#X7Ah-$)(!m+)E3BZHng6zg ziu>mm1C$Bu(Za<;qRm0J)($lZc$LR+oC}jBCQB!3?O>chgG|ptmu=;PM%MC*sQg&j zslea(Pk#IEJ9{7fzh9hx`g}O@`C-t9ui!N#it z_wJ7O?l2X+dGhJx^z&wNj!xPKGK#|>JEUT$t*xy)tVLW*Z^ctmLPJ_bYZ&3H1?~7a z>1()XaIrw%;u1p3Ir&DPC`H>!1t3NouXp$RUpeT%HR|l~6tt_=>ra@fKgbLBiTd$iDaf*JLa^OejDd1oMRJmY*YUvg%?w~h2_wrp;f z%?t8o#9tD&=KAQlJl^6%7~y z<|_sVu102f$~-tFAcrl#HF}K1l3_kvD42jDGq{SUN1~uSts2pS`N!z!A5hQ<9+$|R zfd~d#-p!CY4>K7vo&yqQ%s2oSZ*$f3gqlGio!L88qhJTn*M&T;-?1Bg`=wj{h{6fHLKMq$8UeG?YpinwRs z+IEh@fn}MrCV_x?3M+g`+V(kz34HhYXDj2_k(3xyO7K!RuK-u*DuZ@5MawnHQ=_n= zmm;m3!UtzD1yV|>lM;$D2sNP@0T?DoX9*;#aR`&knU5n3X#9U&GN%%7SC|MiX9)}i zib!R=Q(Po`E$#^dv+$64vUZac1)W3@+(uEIONQERtIqR>Dz<^OqkqD}P_)a5Wn>rj zrBN>Cf|miaVa{zu@=<~s!7Y~#@C`2L{AW3siULAOamn&ywl^d zWPhhW-0Khb`=kAJKM#6Y-Aq@fx3fo+*%wRRLzi1vQ6~xlL-d9bt(%arl#q-LXi`O_ zS$Br({k`FvyW@MHn=~&jXPcsP-zm;pQ6Xnr}sO{7N+nOSFNo98t=a*#r|D ziX>|zSf*se*o-UsTib`nZ+zqU?eDD*?oY4J=AZv!@x{mMmnS?b6)A1+qO*X7AZH;b+P$>H7E?x=Zixcb@~^S2%@-+s{l;I00H zgYL^&_g9zQ7mGCua6X!K{?+sTk6w&!rlo^?5Qj72Y!)+F?wI0v7@oZ~z-)Rwr%tC4 z|Bo1tdxO=tK3M;Ie{D6|>b^MRr869@z-XarAT6x@Ou6HikFH7a-D zb_qn?WY&Fo**&@Hykrrfk6{L@cL2c4=^xWVE1U_yQp-sL#+;Z`&9q!Z$seG6xdV2& zyk0C$7SqS`+2dyUqO;@yH8U5+=Tf$vsAole183*es< zJG1Wk;%Ys;Wp0e0#0y{lbY3)6sOsxk_41?sp{!(pnUjLnSr2Bf5+r4std`gvKjD_6 z;T0l^H=PQ_!n`gch*A(?rO=r2F$4Qt2hBv|pBr1oCVqp7G3Ra5J)18-n>1fceEe*V3WSw}yl-vX*?x0p|62zK-@8Bh`h(TOqh^;g zAgkqM(r^N0!SnZ7LG3%}>(|Z#&P1vV#9Opfam$s7 z@~f~4uINDQhuUt*PLR1U&{1rXstO{TDkWD*5UaM4qB_#;=-QBC;y@IU*5-}x`UclFuJfAQb_;pL~F)3cS~ zRUWQhA4oC5q(P%N`2`W8s7hW^iZ5eCfEs%Sz-D7O+&n3T|xL{3|@n8?Ggnc0SE zL|DjAyR$)3bPo3HoC884IkR;@=%FwqzicUY`Ka86cO>d>m2>PDuSvjvOGZ-6UluYc z!G@J`JTIn&NyE&_=iG1AFbSMCJRYWT+cdZNCb63Gv|gV8Mtkfk%K3VElT&hB7%a}p z6q?do4v_}i@HCjdx;+O&wsoJOr}uQxTn$F7(1(l( zoa1N7opTjqqNW>2B8wptC6MSmKd{)z z7}7~{T6KMZ<-G%*9R3vGFqBZ%tC|j!z==kvkl+w3PKmi7VXDUHOP3`E9k7yiN{&8~ghU0i!b3Q`F0enlyjQI7|QBnkzBZoIg@`SEOadbs!D z(eBr`wjK-yyOZh3WX{{WX`KlO>#HGv>KVY3B~Y!0OsX2!j%d}Uyw6!cwjMXj>+9Ru z#c=YxH@e$po;lbZ4t97DRB8?LVOIbWd$|_Yysq$K{`n0LtzPlM0Z3o+&pzI=cI{y*qFIe`LMck7e0) zr+0^ld*jBK5jj>?R%X^*#hOSKDT)$BNffD;T5_w6Mt1`Zv?suie)5z53fr%K5g^#G zjW!w(Aj9fbw@gwL#~P@bi&>eK^APhKcfS6<-##~s4WGDihP~Ik)?Rz>Gtw${x9;z6 z-yQZg31)r4=NUrMpnB|H4XM8?xo8oDF1(;9@r;Q8Aj%jAn!jxqd>)E-<#8dj`O?MF zSDxKn=o}tl_(AK`8eeRjZ0!%&qE;K|HUt+va1vqnwEw7zG^TYU@%$!iby zp$cmU6LOF$A=u~u56_ODnq9_`RJ(0AsxJ|j1&{#lXDbglX1B5Cw``yW%-R6a5 zo?a!R+g3*2Pu=Af?*@l{u#l5I1_mZIE3hAru@6(b%2)>SW&VLb>A$${dpP2|)}!tI zWREF8G%^X5`+#Qme|q!1zrEdlva|ZanT0D0?X~vu`IWinpE)|Ye029@|D$_@PagKK zJs92JZ0sNT!efHOlTn@}p;NJYf_=1B85@u)X)iY}iptL&xLX@%uxnOLjR4dazgOf! zAl0Qgh^HeQ5ZSNWwV9_vG7iEnmHlN>Y>sIu6Ahugdc#0{rZ%^>fI-DADNk2IzQ|q) z4_?TWut=!cr`V8r#OKO)zxmQXef{CbyMO;b|Lyh%H+d+>1Omn2l)QzuoVlVPgi;q_ z5@{3`m6ZWC#iK}B?eL-t6S~FD(z)5rDr1;FZ;m&@rA|NHn$dlB5<<3(mHd{4rj+RRUl)Nlax9!1v2PW15ck|0x51+DSA znD*RcrPDaG)Hu)Qce>;4?cueZ;jjARJttbl)0iI-%RN5qNWE}~xN;3=R_-E|8>K*& z7)Ew15tR0jib5oiky&FWLIMdXU6qitph6Zinp%>effv6b0_(@xD{^EI^8dFKwu+6- zX=yx?JK(i*+!Pq`60sR!JT_POqEmE>QYKzzgPd6_I#yTAB``_CkRv@y zH8K>OqJY?6lu#uls#s~F3Pl+HL-a8`b;3+JN!CV(Fu^VGvJ8Fcs$dDQO5!4e>W0pA z$|nqtgR~g7{gMeSVn4vLGf;xdZVow6;>SN(Cqj@j3B=xqS_7GQ&VE)>E58~qW#J2? zq>Fq(PWdGbS-NRw9Rw=l<7kOC8MAmnOfHxUE2ar6 zu5+h|E)^e=j3jD;%Rte|T9|5GY;y1|5g1f|8i2{i6riKsf|JB@`B8K03%~2AJq1r< zE@HsC*db2L7ae`aW~`vBWK?ei!y~*?I3pq`WWJGLMf=35wg_cH#Jd5NT!oa-`FY0r z+>C=JbeJk@|0M~)N{k_udKtR}f&l;t<496o`%OQ`=>UZ@Xwb#3Hy*P;F6gm`0Maqk zF%^eOLTqMW?Pn@1gdn652M&NJXHHmXW$Y@Nno}s)m{R~y;M5`ak7*ewN@2)Dr^sg0 zfDYFyh#dAbvs_$oAPkHxsOmfaO10q-5$#9dRUA)A0v8zmFeZoQAa`RELntapQ?iHx zAZ?XM5CtC<4xn-d*d-xn921W=?Sz-=M^bR)Dk&H>Ny+!N_O_2sZk}3xd1>MD(&Cl5 z!KuTObuJznNRHpbwy?K@kBr8HnnHq)h2s@mm+y4JlRkI9zt^qLZt|AuMsu#$=rnk? z!dwhvWMVEsT!YR%irvZJU^v(xjhNHW1ds|>vW2YypL|dzL*x`2sUR@+hXxRF95y>z z?985DoLgmpzumpQ-@i2&@5=>fKNbWv&8W9Dh;F1#&8SI$rqp*>_-9L^@sP?qB}4#- zEjYkManAl|iRk3zqE>tL)Y;3Y&OU{8cDC;wZQmL64*aYIn8_8g!$Q!k!kG;e49H3r zeX8qA(4u$(ml&&0UVPRQuXk>fjJaX9v3RE0S(vOnIsWGB!=+aJV6VP=Ft>g@bCY?~ z*~R|Kc)PjZWro-#t28IQ24g_f^P;QXR2!8n(ZVq@5cbTD9MD!;Mlr5I82L_|)W1HN zZCt-!zx9awMY%kfRv8?L#+*?n#8s1=8-sgy9?m2d9W}~LEUj0Pg2b~VK0K06@eRzm zL~~Tz+weSr>4Fcvwz-SdTScUvpHoB|eZD_o4hkz;u}^>TE@?j>hcAdx*`p305}@33 zQYvn@hrqTp0E{W7+`b2k&Zx3D-D zUI)Ns@jo=1>(6cFFb|=%1)6g0sw$S#S{uy zED*IwxFC5FB%De%sL$Z5_ii`Oug*Td_{7@e;)-{7esr^Tv}+P#V9)qnU41evuNx;b zoB3$T5gS_YiDPlKr>9Q%1m$Ra!0UuLyT#;^Y>6P|9sG`B1U7TL`rX^(gNH{q$47sE zjXNZ2v!l7wbDbB?&%X3j>$!_(zk8+ey%+ks!{LpM{>PgqpFQf|TpvH$8J(Q?<%}6l zo7#Ul@b}(iu>zmzr*X!!D z{*qB0d#H$OG1Ed4DGg5qBG=AKkqTB}2V9zjt-;ZYeSpj)6+)u8m!qf_-5ys*0#=H~ zS|LQ9t}QDDqy*L;D{}!LPWV++4Z(;JWpPh|E!4zGs!a5TMj;ks!j^C<@alz1g$YFD z8_K1}Ec}(BnA+q6rs^v*|7uEoDRGaXQQit8tu&~rnFAK92n-$+VU+f6iS(4hRSwE7 zYp}TLLN(*qjK4)?@<0jmfxJbT$&Ukl$|>YpT2#U$KhX9QsRXQCZOi;M zCU7Mj#$?D9=kUC^!f@S5IvQ9G5mupSLzZhALqn;Mf@;z)aM19Ya8bv|W1nO7bEou7 zxJE*l5+eeFJgmK*M+J&{TP!3stY;09ARM^sB48+#ej+mCFA$|~Pk<2^_Hk1(d-lGZ z#GmnPF8IREQp3i0Qji~`I><`b9@^cwA?}VD6Cr45SLF$W^p!A=ZHON#R2g9jvKfuW z>=8Z8L<&rJumg0OjSjKJ;{EWgO5-Z&l$+nc70Sh49+4t0Wt?4TK{J!;Sb_9M;3KXE z5C>SJLIVX2h13)P4}}9>pi+wmv>ql7M}b02;#$H5aKo|~4A7DakYDkD1``W#l{Iv| z4I^GxcRAAlVXHE#sm75mggKHWQyGPwkK6aNm zAy$=N#Z+p9m^xu-M1HBp|)gm1{M8 zz$;|b5v8?D%*26D3~IA7Sdt_9K%c<1yKj#9s>G?z+>^~_`*84Z_xSqZXoD`~pY%tBP7{_U z^uX7O8gnu?#|P$yy&mU~>^dMy-r^up1p|TQ1Sl({;s*@>lJJMnIDw0DN(dEBZzUA~ zr!?{1G`~~?r6)e50p(|tQy|&}XCmlXGAOY=Ke-ELuIAmaj*#IhF;7Px9uI%?&e7-h z+TVU-;rG6@@~^(R@bVK!|KZ)^Uw$&?V;tCu^^oLP9|sWslkwQ)TB zbm#b^yGI{CI9}fw?;nqPJi1%DU|66RNk_+c_Pe;g*efO~Q@?4svbZ38ad^CxgD*To zeJq5U{-qC2Hkrl^rjGu`slZY+81JcCjK|Kr_S!4|^4pA|-uYjC^x)?oG9#vaR-T0y!b(!CNE|ur;v$uG z7IWxc6sL?lN_cP<i4l-d-B>;+*CjU2V_r3LfZknzk5p_pz2uM*^Tq8*1#)Rq$oJ z<_fn?j0U_9obT}aE(AKl&Re{e9m&U5b!#&S+cKxe7OWmzP{B5^5u7&D|a#YG}z;LnBi zukEUC5G7Ht$_~V)#LHIO2yL8`8oe`=cDa6dQ6GDb<_Wl_eB7~If$K_P0i5U)MhpGZl@*d%AWxA)>Ls{6-+EzHmm0CvA z5i$xD+bKp=BHGOr3S60&21gD_t-T^7plQs@FM1VwhMn~~$x7Jr3w$CiBSyF*i5#rr zRS~79EyE}}L0UeeMz8!-kHC4`CEX*zYES0r9P%hzkj2MPCKTryG^e~eg0W4K2F7!o zjgfp#Pd>nt{1A^>3A+$cXK9+Cf6`kttFp zPiY+l<|YNpkcu1I%u;$Arp#f0=S(FpGm}UA*|v!~Q`fJ`tIh&n}Fc%m}J4rus< zAVv9_1s1IaJ@RD^!}rI$Amkgi;6;g!x3-Sg411^06Cm>|ueIWD#^d-mv z7erMUg#f0s3Xe)zat~xZLtEpnODt%WG7~QDbA=XssBluz_|u`z9wD7zi2H+tY6zmf zndxC(uQ_922=IjxUN$j1?w&vxK_U=w1D!Myj?uxh9_iKaOs+PgJ!d93bs;l-rL)|r z!j-dn#8Ak1Wjz->Ngo1da)@P$XlkoglAn4jtrrw8&ie&zGm$*tqWWsbfsz3!fvAjy z^}AezhgeV^la8ENK}#!eF*$NXYfUO?h9Cy8ZPml*=gk{QZ;qE^V+< zk&Q7MAS`WEjAvI?FQ31{XBbzv9^T!2^!cEB*kme*XS6aLiPJfrurG}uO$#?+0At>? zUG&wAprEPOtN@$T=j!t-^|^)G8(*3HH@`c1eHrsN?hWfd`*?J)KYZ{xUoRZ`h%|i!YC#xlt4>$)U6&8 z_)OH;)$(lpZ_SKWSD4J#c6J*M!Ob}_6(A-n!3$((zP7wH+1{=Xe6R;{7)Ro;AqiOI zP5)lx{elz0c>r_m#!3KeP7y zlbs*Gxc?vC?SIA{q&@O%$tK9Dq*{P=q_PAaN)*AYqJSgV1fpzGA`XgS77t^c$2+Nj zhV?ir)|N`NkO_1PUm!J=Hn5C6R?-Y(B~3B4Si>f!9mM6Qn4tn2!DHsBQh-q!kl0<^ z065YX2ZJ&y$Q&? zPxnMv^67K>#cr>E`+o1{gZ&?V*jQPfxpaR1xyy^MTv&Q;?ey7T*@aNX zJM4NAkRe^6C_vmQAgt4XH8{yNRj@&;Xx*6Y?e*HV+TudXw>8;cC}V;`6Bb(;pE^a` z20(+#buc>f%BwH^=ii-ex8M2mAKd=iU(7Zc6bi|LFQKDPUA$R^a=oTNHYLFnx?-rN z(T~i-XGYqc`I&`N_0|d*aByYj8p1^etqy4W_g0!LmU zvqX#{OGTOg#wqiIXE_#7M^O6<~H7J@Sc*!s}Aj39x24#AeCA&-zKqfiJ z)p>S)P?DSixIl!a%_$fd(57s+f>CR8g92B)BAeLB6=}2tYLurDSxQ-?QbVPyRAbN9 ztVT$Q(!{uItA9X+2o!qAmP5u^Gb?`rY+R|CX!^{loJE)znD)7(o|`ItvV}80+()Me zNVaA60wfBU+LB|WD|OkRnKTkLNQDg8IwU!A!09Ih+5aL=QQX?f`EZK5HrXy!=o zfQ>4U2Nm5h zqMMFVsRRi^6jj4L(-l>r3@$Y1+>{x+dact5gEiV)X*E*TngpT|fO%iJl>$2CJyi}0 z(9%^?=5m@HT{SG#0BA9;7#TC!jtbhz(I@u79mFGQ@<1s*)P|mwz_7Wg)isIp%q znw%>p7-H(c%b(kNl@0LpS&HdoJiL^aQxG;|rf?ASQCL(=2WTX4pm9LbR?`)GD%X<_d4Y-0gi z@vgAkt^;TV9izlJ@v4G(`bgu-8omj=2u$7r3+s6@-f0h~q6AWQ{}LnRNQ)&VSTl`q zU!l`x5Y{Z@Jqqpm^2*%RmCj`>v(vl1dGPL0|K_-Uq`u)RHF%ewF5nLZ!Dq*a)G>Yv zC9N{m1w#}mq~%J0j3p&^QG&R}d3-Hx?$r6Kubsa7Qonz4_p^_7w{DNeOu7IQISZcF z{>BL&2`P_@ED9l%^|DL{;O)1IjkTxhPd;B?KG!&ZsrJOvqqR#%;LX^iUG1ox7DESLhKh+=YtsTS7|ofrqjQ=XMT}sqkeB6xN+WBW z;h{$s6s?4%eSz*&(2ye~O3>J2D#+SVk&;NzKPkgEPaAR@hKJB79%JocoQ^O!i?;A! zz5D*H{zkuXYH9A(D|26Zy4G14ZSIW^57P2ECocQ zk|KgAy0z1^0d)&vO$ew@Ih3H%M*7O!Mt=-fP|ApsqQXfNh~yHYg_C7LN@bv@((5=| zsqn$6gqvDSx+SHS;P(DZeR%fy zQD)K3E`H@w{pu6r(~G=D%XcmEmQy6#ac@4i6&(>muY1VN=Q3% zG9(->q*(4O915?e3Nb)Twe&tf$ErY8uw~gp>m{OKRIR~J9|zkhz``#)*cxs4Zu%E}QqVjH8# z8IdEEP#j5o8e>I2hTAip`Ni||r_Rr|m-u$_$;r{l-lP7}qgwya2@G^pnuV1K*{vo> zX>8@iSq6XJL(a9&xn^r|rrqZ9;FuSgjJpHgXi~j7hR{KTikt#TH$f$RMa(+f+$%1z zoITKZvUP5KL;cwJO9w>l=U zq)=kd5;Z8K^gln#Ei6mHqo}|*z7Yz)3yUXhVnn?3AV65+ZaTc7y~61&mytG_Bw!^dedqmJMr*rG&Q@w< z<9d`g+_fcY~&L@2#R0T|FhM>fjCh{qkQ<{!XCefAaDXe$-Miyzk`uZLd0KtV@N zY5?6h)vg+mePfEO?b9R^U&u^c|2(q?pd5jy=Fhy#hhe4k4JO8d0Lvl6GW~%(3>q`e zLwB`xhKZ=@i7}pizV@)4gqI`oN&=YE4xkA^#1CJZw1JYKQaHpCjq#uJNj1VKijh)w z6o3WO>2UR;3I=qbXe}wF4Lo@83!-6>Lg?ueR@y|BU_vcxN#Xq*2SmCig0RCHPDCjq z4CDF$T7XE38L`BWCIkWoGk*FO6H#XHL@POfVopO2cPN2cwbh15Sdt_A5EnoK`B~(F z82qTq9@{#1*KD7h+&k`W!ECOzHs3zeY<6gpv^Y=8OIlknp8!d0nHy=+aUepP@WyrN z%d}`GQpy5_j^2}yX#zS>mT-k5^FS>nIRUJJk1MfxBjNn)xwZM{JI%HI?!!li|FGZv z)v(4x{GL5hXWnoqAF~a(q0BanFcsd%lKebLZo6g-sQe}AMLr#k+zE2Ivco@7gvi4o zuVX!X<&_IBeT}!Otl#`(``)$T@EERvia|gL9g&m)w1}<(m_Sub_Q|GuaI6m30?cSSg-JjgJRr};Y?H4!d|L*Pjr=RnlQt~w|O0xX57HgbV=l+G{ z0f^GF_^&res(Z&L4-XF3IXk|zuy%Uo+}v!3`&S3t#LG0vF(Mg0Gh`Gcq81m%XO>4# ztd1|AX`Ege9rCVrPk_~S_nL>tJ|S8)6WA7Ql!0#;j`?QbH@-T2;gaES^8jH$p1&54 z7phVcRQ!e^xSq&t5Xbn7TM^W908N(WKv2*kmqsWu12gRp(~z=h6xA%$KSma-?3h*D z3kqa`$$q(z)dV|d^=Hn_((~JHn3b_&vI^X@oR>};95^O@K5&xyY zJrjkTtq6R<6aqCV3_~nsNy<2o`B+IPQcnG+?G1 z!@eRM5i6eHW{CvCet}~0CgkW1J%diVFfT8>^wfX*Km6A3e*N^ras4MdwV(do!Nb42 zUHf>wzSZ>(LGBgeR5g4c&zumac@dohCU0>xQDI^>XC zH)=ONtnY1jMV*fgdIycS@EEa%2ePNNVj6pEwBXPY5F4H>^tQ$tIkU30V;xdiHsmz6R^*3GTIZKu{MK_@ zcbO1=(y}X#ZJ;a^`_d|~(_;)llc}%0^yZa6{)6U1``Tas_}-6y+Nk+-v=L~y+T3iq z$cFHSbVy0itQ*46rC(P3*mG{SJ%5$nYY%g?t>s30o)?MrdOL%`fzKS)_-Y741&N7>bYfvs=@g0; zEvvM!P~n~fCFZC#AyE_ zpn_3aj;B_kxDtas(r*qlg$R$?XD`?S{F;zO*@{Fd7c)XDR;WK-7agaE0+pW_p^jeu zs?mb-#5jc#P!($!g-HCH-5ge3TTo&V2M>vuAlg{NB{5k<+0MZm1|2Ih9dV>+>%MNtg!X$EXbJ#7hOLMnM#p9|z@UPuFa% z{s~7(xu!b@z)Ar~NlBQ_F>xV6adjAwjC+;WMdB%ldCIYp(EQ8H5JlZeL^wFUe%8aU=_U7kgHW?0~rEmAW#@_L|oQ)wW? zC;b&FQW)LN?=Dl8eD#_&_K8x>eW3>VC(bz~rx=7Nf*QVnR>$pHgxfi$vo9VSdE zP@=FwlR8u7Si?w@Ng0(Op3~znMN#LmvU{w17+?ekNpK7%V49aDSHOyt(X{k2l_ru^ z8eZ*cJSiZ`IM=cqQZbmta)c2>Px}r4FnILjSk_8YWY7S>Cm4((j^zfDDsYReq+*NM zjTlLgndO-t8$40nlN~A>(ptuWg;y$M6y`B2)S*X>L5SFL!HSv@y>J04C@A5jmnA`E zCb0>}9Lu|?0C5+BLkfzXDpjDE;}U#oM1|t!<0x!2eherOUGW=Dx*QOI5PqgtgPc;r4O&;b3?&Gqc!fpXS5yb>6zb z``P$3g+sGoR{W%xzp{hhNDvsDFvDt)PJNmK(>#q+-kWJTrU@i=cLd|D3N9tyHJA#z z;rg?HK*`^8!@B&*@1vwY_A8^5)B>BY?lcOKpNpntp#?SRF1uyOpX8AGdbO%A8z zkt9RU`d7cy{KIcBl;L9rjWZYOt%b?pc(k`M+PPobU$1qK>cei0D}lRP_1pJrySrdH z3ic8f-$m$6IxF=*{?q!`U#s1?RX^rSdQ~G*U)3Of@E|Xe-8?uttT&fe*Dju3xzL$i z==FI`3Ley8#QJb?Vf56KlUJ^eo_%8UaPs4$(+S zJQ}LqJYm)to;l-tA@4n?-@V1B?e$ok2SB9qRenZ*fnX9KtaS?#=v#sG0j(I)#2%TJ z*!HlD(Op*^C!hwNm~c@|j}j<~6$^k>V%S+I1T_~q#;GUJNeF6E&=HD#9$e4O;grU9 z*@S$Iq$`!TJa$Nn1J|@W9v|!vKEFM<{t%7YuU>9{<%Rn4>f~rV-rJ`GgEm0LYSIls zNGHl*m0b&q$C7XaQiLfG`{kDy6HyM9_-b2yF4ySw~^rS6sH6cKquf$W_|7x zhOBW2c`p+agGbpA3w!hj^}U_?gWI)R*J|sxYyEttoF0k`gPAub0;?EP%u0nwEs=@` z49L@lFwL;n?LFMx{qWBEFK%r7{Mx~LcTeu^kh+#$ICJ*Rr_TM>3unLa^zzdex!ttJ zjl|yL+2Zo%=$Kok;hm8mP?ezG5`+x^Pc=MA}L6FS=QD0J)aHNu~AZ(SHoeP6=O=p9xMzb@+*|A2W*Wc+L zJsJ&sTeUGDUNFl}5ik_kO>2;*mE}M7P0%n@HJ{9Ik7(`O>BiO7=A~An-J9$@8ou|a z`_}R3)}+D9i!#3gx41Rj3ax6b{8RBOCNWN7n+8}h7uWU}af&oWF!x1ObKMiDQka^m zHlhodo%Fh*WC0n}N>AOUR32wr#a61VN@;e4Ql3J`gY13*36zT%Um#jIWgKdvPeox{ zI1~offSSnrg18WpeGDr3@&huBgUTu{3a-^r1d0iHDL8tph$sMuhHRdy{X(fJj5S#Z zt~jDvr(02&h@PMcN;E1$3h62AX?Z9BuS8)=RwC8tnh;^wV4CRJ+8P8>v=va^E- z>Tn~c7#e{}^`y!rRtn9EGJ~IpDs)+RZG%%6sM$9VKj1iBqVG0$Ah{t`&Aw=Q(U2?v zABP;uCvVe2m}*0$F{F@<$I^Htk0d9x8HTnTifClCS^yE7*A#61+4KruWa zc|jH?AQ$1H)Gm8Z~H9HmjCb#yCn zqUh3qIf%J>W(m5%pX)`+44-0cyJXD?X?SEF&hvpfTH2a4GlU8v?19rJ@g{`DmL3dw zkb}JF+*dphh)&lH&g2v8#>hHq#}N5!uq`4!yznh0pQNwganA7 zdlHe86hwAj&+8SV$ffQ&J>D-`g5ZwA!G(c={j!C5MFx@;(`o|ui*2zG$569@i3thK z25C@P;bM)zK5H*Z8moq<++A#n23^c1A)|qx5o{?94+Du1qSz;n(@^Zmg17xLVDd&L z>%<<$QL7vgcAvzt=*%yPWty&7GGWHJl|Qk)NC(xPwo$Ru#m3_Nhto8V5k); zl!ql@nJ0b_6n_xLJnsr=>%u);va1k96e+2n_S44}vzo2VFSO1t%%0(v@}us?&e5lb zqle>07jXS0Ng9!_)p24VhK0Jo?tv8t#v+A9Z{z_u4x;C0FJYk8fcfTI>mgahBg|^e zl}pcFeEsX>rO*H2=ZD+(@i}){>IH?6XYxqM%a_F}W${3#H(K2N&ZB-ulc%pX|GR%W z`trH@|M?HK|Lq5p{?TY>W70h|egGC0y6ojE5wvuucq<1bm}J=C&6%^U#@Ta|rRI2f zskV-I435buf~c~h6KJ@6cYp7*9+y!2`)ezg&z`xubpDAOkFM_=Yz=q|@5<7cG3)bJ zYNvVVlqcx;nB;hJJg)QLunojZ%5!@v7@v?7#*bQ?<%7A60h7bY4xhZOH ze0KEU!SGi%7ry(o&Uap)d*y2P??3GQJ|gZD(BeFQPC4~Ds6Q_=|#IlG6#9A%X zJ)#u|Q=h=3RQm*&R5{c__UzuG-D|CfJt@9*xd@9%UU z+}@iU9@m*DI?is?wvX#OJGJX`wY8=C>eBesLVa<5GB=B$<|Yj59s0cPzSfzaFv}Yr z!WOXp+koxA+q=brwf7Y5ti!y9|; z#Kk8ZQi1C?{D7Te&?-5gXe^Wfxhia;gzk@19>%8c*;CBRW6F{a!nRW-r{-8HF zJ{}MF5{$2Y@&193F>Bg3LX_Pp(U7AM)2k3e0X@e@k81Oc+Cp=dOSBC>dDlDH;}jTI za?LOiN;!j2Xc^~Fu#|eKvzpT6peh^l%rw_kMveApd8NTCZ!fm$3xmnQ*67Yw|D(g< zZO$=xlSNuYB$AR0LvuXS5eKJ)BiyIF zD(;2aV?=gF`7t`CgGj&v zL&!UT1FS4+VL~$}P^LhIZ~){E1)F1Kh^g#iQ)M|FjYd!sekI>W5L=35AY$7tgu|`~ zDTygl@+2x3rsOL#mBb&nwFu^TxYAVqQg)HM=|iJAFb*%?sl}GmVSX0?zmp8uAtN|* z$ozpy&KOamh7Lx(BF1H*T&&9l5bK;6U>@G$Xgu&Au5`Uj9LjeBO97)N$dDrx(#!*z zLtR9KH{e*mq%Deoak4~6Iyf-;xJRwuJ>kUzWCp_17X&jbfGyKSy*uL02uN~OP?af~ z&07t5MXTAmuwp!)0R;5Wl@S#BaJMR*OD1U=*t5^}0$K(`C>}z`_RLs3^^VbW7%#Y@ zGG3t?y|~$(TkyFiX_@x4$FMKVyx$O!CMEbuhiZAY3^mjivY8;2Yg{EHGV{eF4r0(0 z+}sGNN0EbhonmGP;EP`El$l}rR$r!(xr&9qP=}072@z0TK*RLKcfdYJ0-I%sq z&2=9(M0Tg4x*fAY1I1zCfJsyH3#5TT?*-$MI>7b;PUA<)+CsytD#X-XJpN+`z?3@V zvg3iU5Qwt?W6|o&mO*9LBX#j*q(n#7LnLl~zWO zFrPsy1w>AUePM(rN|}@b5D#cYG~!k>?u(pTKKJTZPhEL&wm8;wj2AKWYElPsZ}M!*BEHdz=@2`qfNt&%?CT{ z_dnTs=4&th&Tl^b^y$S%yPN&~{$Ovid#}FPsn4IA^oEVzpnlM;KRV!IEFokNCL0+U zSdm-e7f;pCpXbZ$lY{O0nA^s<&vV?|T%T;MoB#ENKF}Zvtom%6s_||yPxGm zL=z9Xj51TX>4G)r<_(WQj&Wm3NL8_BG32AJjP!#%g+)@Hp~GgI`^r`@P?o|JLiv|KhjD zUwP)_`@cMT`~Au8jyVJRB5I<-6vmlDDUEc(7w%fiL-kXDawMj#6_0I!7s&&mG^t2t zG@BDPm}X<@%u66Dfk?q}?~B6JQB76S4$OrW2M&dNj;hkYD+q2f==JGia)v>KQ3g&4 zvtPufQ{t4{WODUV?T@}v|JHN0_5JQ&{A~XhpFKS3HQL+^?y0)bF!z8ciu%?$dvdT_ zyW=AnwGN+nvS48w8l_yND@NZt>c4xi z`R=Xl)_XV3EG<2I=FDqPo`3n`h3C$ly|mn!dFJVV_Ug?K*Vo@$-~QW_+ z6C*@v3_-d1Z*Hc!I@?;}gGM8!g1xPNe`n&GMU{Tqdfc}uD=jn?7?!2|s&f$+m$K`T zDzK1r+vB;#$=T)l<+=I_XWe(kw>JA9><@2_CI{wTT7Qu;G+fCjbPCZz&T<=N^pP+k z$VDpfEwj->)c zBq$jTRFf#!h)k954{!?%oi*#?1*!`Lc91gyh@}Kr(&0C-?pq=SAD_V5;MITc@JFXVJ~k zQ63>ZVm?S7;*6tnDxGa_Nz&zYpN`LfFnn0ZezIU7#tm^A34(@_;u1=XguKQ|F(zZQ zPPuYmMnJU#6`TcE1*3#%rvn=8m>E>+^{cFqR_8JEl7QzX!IPC_y^k(}a)wR|InC2p zm{3K^JQi~Fl+RD0<&T7^1JVThUemcr0&fyK+a#d4s-kz5R(h{}#;^0qYO zfvj+eqUvO<9O1zDP82Yq;lxa@u@ljq{4pF?K;OseNB?}ZLoFx*HDf&aFhzk56<9F* zeEtx_5+@MR=_v-w>6|u?qxFeZF$UV1OwkE7aRFuzCk<)iWKtuAD z4NrE2xUlN%CnY0|00=0v2u~;}nfqE0c{Cb&3&e^LGc;^3-ui+Y%nSCnkTpu6BW588 zb>m4Yp)UpO#z_qzG^c4#5RXw7BioRvf*NIj6iSvz!v!K(00`@ea4kzUD(8fb?v@Sk z4&u@zMdwJOte}8V_jSV8y8e9cyE-uZi&bQ9s<*lO|yWQ(2BR}*c zqPjsLG^7m$(Yz1BOYQ_Ij`Zpus%Vt)P{&F-7F54T5zOFQZL26#RK*8rGPiR6(pSFO zT%5o4&Rd7~?$qje1rauqyJAQFK!-399-%1Fs!BOC-&{M}Ts<{De~#oZ*|=Z()&1IE z^lDpslOKIdluYU^harWcJH$+aCnBh!;Se)n991A^9Zxnst!<wT<23?hf~M+~qa>T+go`4r==+lcPgE z2JRVTCscm=jYqjAd{D+2b#uZyIgWN31Kz2~`33!GvqVq$!2hT=E`Nr8SrB);rt z4UpW4=GWw0)QuJEQkU3EY?~qsjq(G)9qDQL;DVhU4yD4TstBU{+Qh;F2X19XDOp9j z_SBCT8|wX;Ntch0lM$?R_yi^?C8nP`RQ|+=o9UtmWNX4{bMyEw|Ks4Jo6Fz%`uv;E zE&S_0oPX(=-S5BM`|MZFHa#O#njZ8$kq2JnrNKeZe+#6Ywc)KG6lUdaG&h{X9K>iQ z??NeJDUfO#|FM{L#R6;#Pj@JifXFhKDpuGEAXeyFDXCH>LdXaqv#L0}3Sl5gdvr3S zAZwMB+g?Vzy0-DgbM-&_=J3+m@aMNDfAx#n^;>-7wK3o3d;?qF?ahm&B_d(3NSnLN zMR{*9*8#a1aFS=&y}O+E><*rIph|ojvoy*;B7Qx%}nT&etxTKYsP(&fd<48wa1>?q7e{y|XboJn%MS zEyW-LcCnj22`3pLuY)`_FkX;?B2T6_2g6otj?RY?d!Ptn9db%B`AB7({bMg~wfIa> zdk$0M6pPcBfke*_JBCHvDbVMs@h`u=@V&3q))tQ5zxU`r{0lJP@c!|Bf3R;)0$en3n{1(Pv}mQA6mozHRGo?V%pU8KI>-|qHy_~N8Jm*yi<70L z`dL0V&&@@Lll9%+=X--|{o0l(ns^REq?vL-GJ~p^Ag+OWu}5L!K8wCgc{r!YLlq-X z-6$lh!os7n&(Hb__ zX}1wd-Vt18S!@Lna4MuCYjZaRD$*CAf&+O8hqpV>2xzn|bpT4)0{{vgswKsNd*M*D zo&rdQDgdgBE)~6(cKamjBpu_I_0oa(?&!~0i%)+QSeE1KKjDBG7U&V;ldnOhcIv+T%+-F zPgIL)-Wn>ZT&UsRLhV4vc~Q7$tisURtnRNmu(>&a|~ zS6QkYx1lh zIL!uE2}VOuUnKFiQ+$Y0_836Kj-X+=jO%d*n10Jt=9&&6kq}1whzTjhVT_jC0wS)n z9(3n0Et!!OLo|@-DKxDqSQ5Y?m2)?W3I{l$sHv;?TcM0O&FiqXlQ1|!06w{@0cU52+(CLGT3J+4jxv?LLQ2D;ctKYq*W=>ISdfHt z*wAXW7h2~QTc`QP$bNrg=kT+m{=LcMgiC1Pk#Z!*RxVOfY0ZdIif@TCLpA^vo8z2; z%`k}(2@9NkA(-00fp&t65P=3^&{(?o?3tHdJ3ctreCHQ~lS4_y!_bFQwXYZ!XgTc) znUEvV6Wgs$^Q&JQz5e2OZDI6ifAaTl&pg_0Jlq+*1sbn2>G^ILCJek)5017byv7|7 ziGQR|&n|go%0`XYB_w!lCRl_MRbAw>o@Oam)we z`$ycE#f@aj34cPx;bR<;z|wUoL`=m+h6I#xi@y{ZnYlO+HE9%{^5Y@ec-&ag#N@`2JYoth09jp4iIL?%$wU6Mi6sD=F2xmwg?3>v%{+nVt>Yy|>T@0H zMqE>3Tu#FRRvGNziWZgq)kLJ9&ozaRhj!^ZY5FA^rqpuzV6us3)0=q?!eBYEN`ZXji?F6mOSmi;C-Q`>60 z{pVZbuhweU8I_RgeQpK!ITBFk{2*(OfS?MQC^8@^K~CehKGRkgShJ2vG+!~Os%nuy zXBEw2V5@TS$Re^x219WGE2pbEdc4=&*}1#@!QDHY;a=&qudFRT_r%gm7v`QmbN=_9 zzVuIC81D~uK7Dxf@!jrcj}C8day$H(S32=NbNjXQZRteRr3f7RCQWN2tUTxsc!-CW zU7-sm(sl~uig6M@cIeg?=3DJyW42psH|v+qFCAT6ooNhCPR4y&J&}%m(^=80@mbjU zH(#rN`}LF7T>qDM*8l2fqlXV+!D$_cbM8}Uaj@oeWeGpjo@K%|)0%HITAXL^clUX@ z3uo~0pwC`b9ZIpXD&ZVR_={6w_AoJ^Ac$3qw>V~!x!h{6&CbqK)gK-W`dh=n0Utgt z{wcI221y-k$ZG{Xn8CUZrc?`6vU6Ag6F<$l`qEO9n`+mZwN|gTzccuJuYbKeVJev0 zP&K4P5lAOIrVi1vgjU$6sA5K)d|fP2s%lXb7e%ess8Y%TMX~|DXHYk*{!{(w^D~JbB_? zx<65XPokr=m|app;Y7HHlqgXFx>8LoJ3u0>D_IxorB)sIXO+=1d#dB$-eb;43eR7T zi_(FQim8B6ne0#w^Nd*$Cxb58bA`$??uk-3$s2o=)@9D)%nwhwkhcs|vt!-~hK>%p zVpDdsx3decvSqkqTHqQGX`Y+lRgFXgjMIWxO}flp92ul&}CkT zGDZZGkTy<71!H!BQC&inOzb34c~mWmpaZId6LSNPLSY@Oh)0dwDk%kkNufL~1zTYe z#RRQnLMx2i*f_yc7DZ8JnD7K$83G9hBW`{q{X5$N4%ZZ=lv94l2qGLfw2~k;fFnS~ z$5+nquvIlZQv^hU7&Mv3JM&@e3_=8;bA&2>@>-w78?Cm{RpbMKd*bB9WGo}F7y;j? zCZWTC0HcMTuAoU|O{KRZ`)QDzP0;b$mk!jCCA^Tw;D9oQ!bYacNXRuquG?@f+Upzf zEV9Hb94Rds0y<7vDbPmRTjoV6{A$b5bnKzG6~*46XZh56aC8(XEHn!ROr;lDTjol; zVHOn19eqDw*mbKlPBjf<+EH7{VzV zso2UxAs6qJ4@R_lww$h+tRJ21_Xc<7J69Ikms;(!Gc$9&{-dD}pZT)&2p7d7Tww?W zStb1Ctl(@RDyxE0xHkMO^wM&BZEj|%J3Lw6|7gE^W5lc7NR$vEEYqA+7K9?3dy>;i zv9qHaT~aJl0Kp(K0i)R0C4_*A*&qZ|b0v`$!P8i~`ts^CFKyqwzIXF;LMW-sIw>1x zzz0^-VeYIca7LHgfSax6?EK8)YXAJ%9?w2)?$+LZzj^;QqhrEd)7t=WDi_jQ-1UhR zoL?{*%7k+0YetSD8`V}2*mWP^OuxbmaK2MpK3zX`zP^06&eMH!9WPe%5oS0rhC4c` z9dcjjPVH#BcCa-*I_B2UaeaQX&QpIcFRfi^ubw@#@Kn3DzO!?SFIA{T1JVuVfsJ;H zug8uDz1qoMqkl+7Ll6dN%HR?MYXii~Fs0Zdq2(Ew606MjiVnc>2sKkmlZIdXjjascl4!LyAW%&aqA2T$F$l#$*i(A}|&< znN+!xs~SALOqWKwgk#L^DwHE%G%>8C>EaGYZjyN*Puv~vAOG;j{m(vM{?=FKzwxED z|Lhz6*RLM@?OVrhzc)GD1+s*t*bz=;6+XU(6#NRKL{%jT<(knzsA58{K;%f7h$=K< zvAi-y!aee*ra(vjsHcqp4rgf>D#WpIJSZ^Pm6aKf8MHyQjOy z!>z5s&0G8T@9f;WyT84A?9DW_=G+_4H-7ike!DgPhnrh}{nO#2N1PgxJDOA`EJ0t~ zoGXp0$yAVU%G0wq{Q~rGhtEGSdqf%>pq>1aOcq?gkAv#Catbl5N?26ba^@thsy*9Y zYtNnMwG)H>0r!Xw2Ky5}kXwuq`kDjrUBt~6apRN3Xq7+XT0l(0Fi-MokLMSgXFK&X zvy%>=q1+x_+wOmSJbYk}megTBP%vr3#iQt?UQ?c7`D?2vC#XxoobH!xXh5(sf^^V3 zN+{WsGU190)Jmh!VW;TIA$o*@C?))GlY<{c1mZl1T3$>c6=npLP=h!4rC(1$fY>SWF=N$^i+1kO`?o- zOqw{<4pobDi#x^0QZj|$CQ`{Wku!Ocd%Z4a)Ag!Oavt#1GArYH9oY!_x%xq2p6lZv zb2hFhdd&`gu*$h8T`gG`Px%sRARA4bU-n)OZZ0LbxF^(sJAI*Nu?*jtHV+R#1#x&E z6?qp}_V}yt`TPUGNN&!9h%-j3M!f4BE~NEbfw3c?3euS+#$b+59Q2y96*RB60g9B} z;55En3x#Ghp3p;65)Q7nw^a-fFU1_ohdPb#MX z4q6F2a+1A_svyZ7S&-K{*1^V5(nB^1Lz%7s9$tg;rxet%ibr_s2PfUdg{eUX5Y8gr z;(aKHBOzvg7#t4H*2K>&&j<+?NzrZ#6?1!S#Pq_QqgK>VAkXBhI1Y%y1`fAAflrj1 z^#QF)Ma}oA{819WzdJb?C#QOk%T=VpS=r5)K;J=fM<`?355RPl+D-5@#T* z<-q6sJogzM9B%fy_d4y%^X+r<^G|WIwl~}wj1PHKNDBZP%~*L9wv09kJ$qs0LhrBx z0)@uS_RP{^>r8v5Gn#bQ4?o@O-s+7uAZT<0s2(Cp7>cZOC~Z{_r%VO)P!LiTl?r2y zX_j1HXc|`~atXgss?`*#>tPP#olhQ@nF&4ecm zE1AyqxWP&-px!vz86TbW?=K%cIe+|IYwfw#>eVE6G0ymm_^!Z= zb63oP;@L49^24sQSdDCkm4PXTAA#t?juzBtE*?dWL|R$^Gi|A2XcG*AE4&D4K;rO& zpcgz%@_wV76HIgf<`c>U=Vu$rk)*POne_@+7@GwoXd_gP(Y-s{|91WGtxs2e|INiW zpPT#>o;3ZpW6L@J~{mJA2zvI3PVrlc|J~D=7dN-XXMXvvV7^$dh-wLCc2r2cEGglKgdSR=ywr1XH)kj~yRE8<QD<)U#g{L9<2Rpr<&AUa&UNPIXJ>slf_sA$eD$e?nalH-gAve4Z**`l zxO4mXop2tfqppPx!q2B2ISiQ5r8?d5VNE< zY$~$K8zLqnMoOev2l2^G;B$y`0U-!sT1wqCi)5?k8i2BV3vQlCcPBb}a_6vZ5{vgeww9BMNi}Ty6d? zm3Z_W*wA5Q6c3m1kwj^QRQaQz{KHqb<~XXUm_17xGQAia4RQf=S}CUl;cY~cvT8~V zfbyftRKQX!0Yn*laENUYvO1X+BI2v2niiTA7cM5`@Q#73EtIucUgEu(C)1Q%8uDm&RC6Zte510ip5=QT`2&vqA033$!s<5yb5M8-@YGY~4A>_r5y z9Dwr+aSk$OCO;+bqepmQRahYqf3h^=h$uQE9`0h~{aT2_B`n``#Dx&w=)_54K1WXr z%ZL_OK5IXJW}D znJ-(QuV%tg5HJ9kA)>BlaJlh;gT#%7aYB`6xUq@iaa5+wdJXZ!z$9>o8$<|Ycxzd` z0!?ZVH*y-I@gg-s__mM0gqxw6o};8JERt4=5FqhT9-aaXVYDneI!NroMNB$dfDLJc zfW6#!!3;QrL$A3J9f?*-9R4&X; zIbGt3m0~?xTCU-#i-Sn`g-Ds|mxz-*p4II>amx-#8Ay9{&nyt&r8z4ZQo&IGm_%}o zfM1Lm;SkSGQ=O0^Aq_wgkQAnj)sf9677Z^vqo$sGfsZlfA}|5KUR-0^k}4IfOyAne z2mv9Im%LWw0Tv+;&&zpL%spEH=cAk?-361b=ZWO)WMHN zz>ok$002M$Nkld@r!WE^7~JpPIvzaai*JU6%!slCl9Ekjix4Iy z?rF4DMx7W?4*V-V?VEXTru1@)(#YD(QcL9Pr;13R@C2T%n-DK4HKGrH{a2=qK}Lh9{pa%m0~8k;y9SdyOYgF<9mxKw?blbn{LK7w7x#Yf!R}9fIlO;c{}Nl!L$cD;Lf9h+5NayK zB2_kF7xrr8k^1PJY@k0H|LD%}f84IUbAL2G?#+0UHZ@kefnsD!6QZOf z?+C92V+g6|AL1zsrYrseWk7Mv!X`xJz*QA(mRPGmwNNpqU+3)K^9YP}) zJ)~VIGTDjpb&SsPYn^AGKlRnGAAN9t{Hyu)wa>P8|Ms2H#)d;G2O6k>;I=x@br)r} zcZPCp+V5b%qnpRP>ND3sa!NVLe``=~eGG&NyZaVlKYFYa`d0_l*`gz;n4OHts%z0xv}cDhz8urlPwPPU<<)`f#T zbZiz&;`(6<3Y6~Ls~jHq@9Io@hR%HgxEe zA0kXy*%(s=l$8AsDRwx|7!l2085UN=V+6UxalkkliC!tRrD*{+C^B^r;MOV=b#eh4 zb_hlQ#3*`Mj@+5I{3lLN7=|PT#I%NxV4iGciD)u*aXd|a2ys>{Wq?~SFrW4&e0W(u zHFopVFaSUlP~pnfn@bUe!ji4&4!ynvzaln5BuX=Q%k0Wr5>-Gbc7{0Lv~Y&Ns7dE> zy^cyAFQmJ+&jy2WLkI#P@#vB+Jeq^cP=pYVi^b%YB(zhZgasoP-eu}#K%S>#Ll0s7xwJaCb#UM~)Wp=D=Ss^F+ zbb+Y{M9S#EolBgUH%wV*!0d=5O#=YIwS1&e;czUxgsKoNS5zlpjGv%m9VF!rLAQ)u zxPj;KM3$*Lc8)^>qkHU=6Kar?KNK=o#4K8j`j9N72^K8sIad}_tCP!s87mOik5~z4 zn-FU~X|9rZNEPCm4jcH67RHOpDr?k%xi=COT+kC3tTRv6m_h)nQ1}pOcp8wK!9aix zh%teQgB~wLl|o$Be})XLr&lbtPlZH5@A$Z`3##fVN+xM4nKQwr}~-w##TTvH-MBX z`UB3qV00!Nc+X`sjE!*`FB>;}2iWEG9P74B=TBL?$_w zlXGBTaKRk!+&@=)?wR_FugtvqTH}qEYv(VFclJh~el~vZmy=(jenu)BvO z_Cpa)@d#1#GkJ~_G3#%(?R5$7bA~GUlY17pEa{I3fUWBI)9w0(mg0{Pil)Y)W(SyN zkewLW;hHTs?JE=@5ylWArZG6d?97@}!wze*ipORi!(PP|+yyRB^Hg65(s&gBj$RL} z^Ugz_&)-V%&M%dyQ=pUjb4DpPJjkMEJKhSY8h!l)EXK|VMj=z zFJSwX{R#ZW5&i;pg#AKcTaJ)MA&1AF7%8aXHXMQ=279A{1{%Gu)m2@4RaP$k{r=C* z0_~esH}5^?S^m#*&OPUDnO-PJ!)#P^7yntMCbk4rYEfWGsd6W~))PZ!%RE+b_ul5^ z>%GOz=_igJc=h7k(`Pt0ySu!>>q#@5N(#zYl4`Am6wx7>EXqeiMcGZ!EG8}!p#sqzngyQwU{+p+^bYfX;T*MWu&ZlDLxSuOcV*htq8L*(yV7MJbUav z|62=x{iU6okCy(IpKko=uR9wnoc5BI0AaMz*Qn$wzv3d?JvWv#BNBC$C*Q2Sy4dI3 z_R`t2AHI0v>PL?UzqvXw;ztp%#Z;2gr9{R>(WO@Qs87#gJqg7uiUfc~d+;2qu}K=% z_(sQN8zIoS8skHpdwgVNC#@#C0TKU{k4hk=B>?Na-8232#`fl|r3W9~xbe=_umAGe ztqmGgK_{rb9aQyqv?R)Wj=hVSA_n&iSiHo8rVMyW|BN*r8sM_hg_WG&+ z`oDVZZ~wu$g@aQJXB;TS$O2rJ>mtv;r+NF*w^1*np%X`@&Y$dZd&Wn9cIozSKbi7~ z6#wfwEz&h^H_kyaN9Wz$_5SWUFZpzkldLm#3FX-0Ab?LO0Lcm|7O>Q}`JO7i?6{_< z4lNwKFuVWM?x4T1etT>4&S0>?+wqG&#A8m`6cqo9AlntBC~K59=Ql8FraynEb^iF| z)653>nVsdq)qC5&Ug~|)Z?EKtkikX?jjzZp7nS`o#S0L$~qK= z2LKU+{!}%T>_wC^5F1fg)W9!SKmaQXfK!4<2ph8UKvp=yjv9P^XJK_ zDrZ9y1=2gXZP!45>t(b;&QUUAV+mCdaf*(I%5sLq2xmB(84HvGp%7mAkelflZzyJn zxyz|3${^tl(NV28fe5^_VC{3%OiFf9eD=;06`Jl_uxMb;&O!4z-a@HP;56zG46~ zGf!rl6ihxdE-#mRT0YrR@)(@(8Q@jeJ(AIkxCp6*j++x+KU+65K$qIF7Z zox9-64Y^*{i1(b4vJs^P2lb*$o|zoxv!gRb0YPjuWOjh0Lp_)xgiW8)(S>BELZnQu zZ4?xQ7NC&5nSNj{B~F8JLArmvL@wbNo@<{XTOtHOWIRe-w83kkIU9jZN-n=AIaxWk z3~^zged#kYBqMv_<4=1ciaCzue1u7W1$dS%uOYLC->^C-R2{?Ve=K&|*Ua#3s)!S? zps<}jA2MvjNT+EiCAgE^;VhzRw7LW*rMrR5P{ZtqIpy@ExylL|n7pVCN|fpeh^ghU z#1vZR_>U+v)@!zLg;3?B94k29A|X9O6e%R(tR&IfUEUi`x|$%MG8Wc}ile;b*cd&j ziYu#-kQweG;W7(C2(FjDsfQ&p%RyWTnZlM})>_aSv!tZLH9m?YA$e@rO>Mwye9`9% zqe}&{TAiK2;P(2)N^j@U?A)2T*<&-)C%O~!z1?;0{AB7*0#=9(rZFiSv6U$WFA(Py zdENeSXKC~5cJI#aaFribZy?$K=z(Y-8(yBF%35)YA<>a6RK}%vi;0S)iNw^fEvZu@ z-KD)6+wRO9y!h6{^vr`#|FXZmjsUaNc$@RKKG@T`t0C&Z_`&amL#-dZIe76*>(*ME zD|Jh^RfV494UzEM#$w{BIVU(wCEEr`gu{JZt0TC{nf8;X+ZWFCPaGOe&GQ=l*4;<_ z&psRd)%wU6fv&W;1+>rb3yFZjLrmaFW4DEb3bIx6)nzu?258+Bu)->?yH1a$4{$@a zcG!Z^}aBB6~BdhtJFCq{bvy4{3L+(>FT-$oQa&zgkTi5<lXoA5sW4TX_8Q zz2_@;BdDyCP*+JIU9|(fR8&RoIwg|IVKaoZ6iFH>DHnZ&K?z@p4MCHfjmWX&Y5)?% zd*BTa#du=Gvw@{DGD^Rr=$twX&Q$Bnf~j{XHz*=-)W;G`1z)Dp4h`E-v8zQ5C0}S( zOu9kC6n0Y(B0DGrM6b@)(`9ogVTUrPBUy2JTUE5mMk80n7&praFBi#VB1-%_ieVhW z9p@QO1I-gt<_1FOJQ$=4G~hk)nkv{4x;`!>VPAWrl;h7SJW|`b8r(MQe*xi2(*BN zIA&sm#*^|6mpz@WjkFlw14jqQ$S>~FfoK|fe_%q$%t6=q_$A&{2LGCFRPa%bHgM_c zcvwvyLRhrcgIp?7i6raOg`G^oa)o z>Edc)fk#D9Q#%cm)(CO}kJ#f2g`k70qdqx~tI-eU2}|Jy(g18oCF?NDu0;MXbB}w-qgS^ zP;u-+5M|8wI2FNLXC*=#+%ZjfQO+*y0XC{UP$33Qa7KNX7&>7FyE8+*hl=!!8s$@? zBC;Pu98p6KxL{Veuo5OMhl05`kD_Jpnw#GuM~V6b7TSTMUT^PFOsr~Z{jvwqUsfO) z0AA2bzEGpdah^&wM^_LLHb^v@ZED%CBQa)sS(3(rM5Kz=HH%VAEyGk15g+n$yX%j3`cKYIpXzdEduD!O zG>->(6W(yRJs5I@7Bh1}C#SRvWuHfCdiS<>9`d%*5wA;$aKIQ!AlbFC*bA3o!Y6zV zb;RyDlK84IS$D&TXUHG@;etA?h!gx$R6LkuW(&)@`wm|CF3-d~y7JDj$L~$0#Zg5B zG!{?GVVCo57tWza;u(V=bh z08X?f+djd|rIZLKJLV3KE2XWy#O`Q&X?5qpqluNTw;nxp z__-HPeecx+cTO&TalQ9=#qk7vG$#o;h|v57JG^YhhlS|!=undl8fK1QheHj}q<|y= z5C1L}v6K(Vd0%QpI@urk8bSict)v6*1J^}H(n7s&O!d5?3?6^}^D*4%&`b}sTi0yi zE4K_(VCb?8gz0l=n@nXn>1GS?d>_dva|A@AevBO^t(y^>LX?)Cl!*r&GMA;07FM-~ z8!jR@xPAS>A1|$ce)ZVjdSm|8bFLn(Eo9moVIhk7aFq9=1;Ra+Xk-t|E%lNe zCm2qgJMyFNo%rGNyh!}+zxu`MZ$9d5Jf^py2Wed9={&T+WN?iLSEu`vttp>&8A}&q z0oAW;!9jD;Fg`90cu7kq_Hny6TN7VHZ75^yo=SHq&eC{QIoRe8q6~T9mJ~vs#^Ohk zjh(c3H8(yfY$~Htx(H23l-?ANU92u~7FE9Gi4GLdb0Uw*ChwF`h?Gsc=6&%X zhbccWsBU=_#h0j~Q+XB^9=s_P9~BA*c%i4`nwV`JI@Eb`zI}pw8#Y^u4|<<0_b&AY z+#@P&onO*^1(xt{zARBmI_-!KAg%fxmViOuo&;+HG|&~&EGewo5J&5ts8CBn33~Z1 zSnOy}{$Qg*A2ti{D5Eb$tlM$C!`}q0p;TEwJDf=OgbcQlzUqoT1t9|MxiF*`D}~E6 zz)+RQ2Sp*$JsMl9;s|VY#t?zh>RC(6VyQvOo|?-d00OVHNG%JeB1)J~b+OBT4in$- zhD_=#h{P@hYiIuAtI|wCg-N?fZ4Ry|#aL1yCkIVceF!9FNY7dt!_7W=^&2dd)_hy} zmGjVrB_Q<)yE$2Jy`zUL*ba+_B!y7wu65M~g@!`dDaPA?Vc-e@vx(R)5JSm?%A+E$Ain*4T<9r;0pxPO@i?3vJKov?SG}bc)=WS6DO($R%8-0}f?bRD6 z1`t%YPIxPY5FRriGQ%JSLxdZ0=6n>{Wos3CTyz8vgZmorG0U@B33>)bXXlJz&|hn=xUc>79K%!^3<-i=YcbT;C)VxYQBHBcI8p_Y(?@MIVuR|)vo4`&2rOradl>iJ4b8=k7=7iUCM5=E?HiWl3`u=Pl^aeQ^c%n?Zn z$ejTq)1#xvxF2lX(K{t@P*tN4+=r5!?{^E6h3!F?V}|e1=FS-AW}Jx;kMZRg?9&Xn z34}lsWz5Q%f_TY}1BFUSvcl!r2b+_jsc0#IqP*UgY=t&K!BNQ+8B-DmX53iiIrqa@ zR-MSg*~u=MQ=n0z;UfrP$DJwze0&>UVxEHuf3>jUmjdW5=ZBRl1eHa0^cH() z@f#K$S6pzjfjIkFrgU5z?9MJMfAQ-<&tJVa$0{gBP^|{E#N;?2GbMzQ7khSRz3uSk z-S*|1qsw2lw>FGDwX&&Mtv04;7tc(K^VGcOyfei}SwXxk^!&N*8?R41^)&Zj^*;D? z@ZN{5&n|Z!-0ScY+W<(9ilp?P99pm>c+4)kdO&jHgl##y=<2ri9UHy!#^~kmjEGT^VgH^PbGDM_aAd+>!IA z4?p!}cm5D>gYKGMNd$70fX~LjoIsxY-72AWd8vN<8mgJ~CjMmdeD(h>z3P*t_IA zK_oc6-Fx@fKfA^qq}|g;7QXxJ+{LFxy>4%5rR5!@(DJVsvLrazWH%+IESaw(U6O%R zu~ih~h7&jz*J8a8a16W1j+U|p}YVA8~#DUnkWWk_Cw+pdB|_iUHsO; zfA-_~??1D3?f%Vw{gd_gKI-(h>AlpTDgv#yv#qwVMnTxAR_70jXe^$FS)M|nclfho zrfYfnO#7`TN7t4|zxis!GrG}Y-f0zN#!J>1Dg2U=63?mZa>MYJ8NzmASaFPo0AveI z5rME;+;>|8ketlm+YL(muCJn&peRF(sexC$Q{&2#k61Q>vRDn6x+)UWI#Xx2Q$o88 z1k)dA;{;cATxDzJ$)F2Q&F^fE-hJnqrw(aK3M>2lju#te26P-|skUmLmGMGyH7ulV zxhDQ#^LPE@)rW#Iv8~xsLo4Z9=BFWTKLKtNZ3YAIFBu&%@2W6P< zA%L*Vj`kn!oITokW}(fAu&syvPj2u0a;5j_pv{FrNSY?ARKfc{Hi1oxn+%dNl}%B= z@xx}9M%Z|2|5?Cx5 zUoBK1f9MQy_#Dv@_Lv;zagP;GmXjevhy`j=!d|yQL4zz+>@*D|rKW7LG-yI?RY8x~ zVk}SYxhoW!2#F`7$6iu@gwPZ79sd*p*1DxpSAHn|J*DAI@+vneTsX2P(#H2xVMqx_ z4W$`Kb7)X$@m6#qQbf^fCru-ZdqYXFpePD~n-H3%X@RWSwu}nNp?h)?Ij#`CBy4i!Lk*&+3d2#n398?7Xj%-u$>JiJf8T6%lq+$yiGG)&FIix z+OC@U-N4sxLRqAlsxc06oQ+V?0Gt^d5B2(vZZ;9g+)nL2HbqCr$ln+BdS5$huKV$; zHi5w%42+wTwKPuy=nbmooJ(q)J+jVmA&m5&)% z0EOO}kq0uWQB}{XC1Q1{u(6l;+TIj7rmy+{(yJ}b;>U8GiTR99pzzQy@=SOMk)nwn z6;7n1gf#I2l-j%l&_qg#crqH2@xT6{_jej#5t!{=A^~YQmQYw?9=K7k4XTqmp~U*Y ziPaFrWS{O+I1eatC^3lw8W6smR+Bgsae@k1UP(hc>Ei?vC7uY-CsZOGKJ?>SY+w&} zdvO>6TJ67OPXC43y8vO5shX&~lhSf^VCY(X(K< zAh$7@w3r7lTJZ)dfSka_x&i#5*&D z7go`+&po-k9$bw4i~&k(I8KdrLWBqT#@(7D=$IsH31E#fi7BAAHyA$L+FI%PCQt4< zo@P)JS;9kz<8QAGkNMFUhDJ@1#MaFG`R`23%r7|`TnP2d@C9a-p{Io5fw z*4o${?yUKiW++ycS^4^1*Sb^=m71lxj!pWR$(hb`&yUU=>fc&!Z?Crw%(RXl<0|X! zy}QFN|7!5)UT0@hy{0Siv3)7r3(>)>JWB#K7TJM9TUR-l|MMdK{p}zAu>D8h8}6SQ z-QI5f$${4ApSEV_Tc3U0x^mfHpXa&)OFh--XPdul>1G#m!H;c?CT8<-+v#8YXcek8M~P^aOG(9N zaR$j2Ynz19$lZjNeaq7n!#Vbf#A9K}O<2?Kz%g2SwDO<+V)OIs3va)2_>JdJ|Fgfb z_N}KM|NNcJFTWaX`z!VuBAp7=t*m%kocW|o5-C8CRY*%IMU4Y0N+Opw0;sAD#RfmS zF}Ys*WZ}=>))L?HNX6uFINB0|J1v4n?pbK<>9n? zM;Y>X1fxZ$LZ9IlCj1O5DDl@Ra~NSe=+v4FXw()?cla~YSst3)7 zFKnzl4DlOCo&_FoY9Nrn0b^-&oh?=hC{9>SZWgmA(5-NZwsK^n!ZI|w3Po1qO}f~I z%MK#P4y|#c%4MS?471@wbX4)$DaRhXC%D(zeDulxzWT+&+`_4Y$Il)-|J;dx{^JYt zCwPS|vc1q3<%z98=!!(yps#f#6s;z@MeS&En%@~(IKvOwZ)`4Zt=%3B*1_PR4Jua>^S!sB zEhVeqxGStcltWtBhwbiYX1;U$VCU>?`!J4Q9e(*>=flT?uLi9RCfhkSm87sBC1Nxd z!|-G2*$XsEvmKLzNtdcIX~Jf3x~2lshDPa%Qf#BiFP8Ah6kay8NGdgr8@mpaHTKbc z1)nSmpidib$_fwBF$1V{XhAcq!(XT=a#tQ!xJ)nGD~8pTR;w%}9IW+79i8Pucp{$d zqJiENDY52;IALjo#2Mqpld{NUMJG^}m|pOQ35q}xR>|j^YPKVm`dXB$gVf_z8W6iI zag0?+lt6oxrIzHTH1a5OZ=-mrf{Qj(LmCddO}W(axU&0l!wwA>WfH`0c}5NFxY*jX zO0~spcgLm^nUo7P_R21yUlfKWB0yrP*{#%ARJ0{i4h-Yy2Ah_KOa@9OJ@7e&<65Tt zPVp2^SujPP{voO0&UB7!g9fu0)yC!UF%eNQqY-*eM`X5ce|&(`>D<2w#6ho@7G)+) zw0Xir03Z_vCvSn5u9md`fdmrn-wTkKrCJaC_OCMV#usoxKrs_KW)+m1{Oo%vi(!^S za8)3awB-s<-Z{zq0?JG_qTf1&qJROurkbL9ilhI;6sNo#^gEvcl0Uh@KuTZL;5t_O z%Ng2(=CYiL0rkeCVs1dZ=?FfA)3e|ap!$OuPDm_?-N-L*u+04 zwYmE0seTiZ{tOh1-PMk&#F`lBrt~8g;S?b&SQ_4}lQZSMQ6tF#I$q4f4+KY_HPJvV$zu|BVKqCp_VE||`KH7|6hOIUXL!c7L!Y-R$i}R`E zL@aP~$1GJeIG>q7nBLcWMo4G~N@sxwKmivR1KJy_&`A1G5AHN7?ANtUo*^dpoYisF zHxfO2K#Qdo)12*vR_mDDIdc|ULdgan#TaofFF3wN8oFUjfN5@Qq$cee$c{2OA)+WM zN+%^611y5y`+-!Q3aB`PCAr=OVZ4D0rXE6vj zO@?WzUUKoY1yiFs9#!ndY-d zq|CPJw88%W*{4VU_>Jz<$6Ei#uXlg(UZ5F8aryy`K(nP1Le46)RWhMHn%>{}!*31V zI6An#%G|$meQER`-W`4QWow0p1IY@zJdZ{|HKhURCEOU71m(UFHK-;owf_?)z0aY; z46a6N8=ZqkCjZ{cqZhjE-f%cOJ=|Gut=w%rywcj)AX@?sV}`tnMtqa|+mkaH9CI%v z=5FpYx!P#$g~hwBmt`73n(GewYrIw zP6(_N;fxT$Sja7fCu`lMlfxjsimlH;kq=IPO$j|<0E~Nf%|Z*K+ahTaSVbw1OwfV2 z52^OL6spL2KM~|caZ?lV5Nm?O=l;4Uo4qY?xz zjn$T^JS`~r#M6{e6H^;x0xI&c6MrXK$T07tKz3zRi%%0{Pc3w7_;mL9XAb`OM-$JT zTU%V+{NH}s`^$Gb>q~Se#!)sL71i!&f=(-wh=>Iid)Ts_a7_1(1_uV=PG=y$O_8N~ zxoXm$5T^TR^Medb^3w3jD6mVb5FLh=$OaI7BL|dvqpaE}LT+QG+cLr;n>&8^jsX3s zi-2oAYjyaANfiKhC69KM)@Ec{4rw(6OB5zaP5}cpCnnQhc{>t+Y4dE9^pIB;_)=a5 zU4zc%#@f~G)ob@Y{n^!5kI%ey;VIrJnlOP+yR}#>?D&_`rl}#$o>8cREJviL6f_6F zeRGrD>F#!a*AwCnYJy3NkyS=lU&3zWBTIZ7((o83sZUKt*Cq0v2wY$yXQWGU6c zv8#*H7B6Kv!!P+Y&#!_lt2-s9j6+K3su(ry#n5cnAfn4cmz&)mYM7%j~v@6yfIni>Yt4^Gbngzd+6fYBb!t)oOL`+i!)7$ z#gK;{xu6Ln#@a&z3=K>?>F8}L2xs=fI9(HTBOtm6@hVbgh9*vWcIxQxAp>BISnQ7& ze&?1#=tsPk#^HVi14(&dJ=$T>e*op%bV04K6AwIL$Du`x6MV;S=FUptpQAfIWw7UT z(s9So3#~RJAFT3dn7AZQOe+1~9J)MQIh0cip2x`^y1Z&BTiqSg^tE{k9YR zmm4b8qa*Hx6dn#*o+q&DtE=4cJcNkO&mm@jk}IM{2GjUW6kGrnF7JrTS25uXfdNe& z`HC`4;EIi|L}E@sq~6|ns2@1XZGRzx;5JdQuZuWuc#FHpW9Wb(|gtgjoIaC>1uerG}iep7XUQrHDStSs(+XrSaplA`8#w0TD zbD^I6@rphTJKA)wxR|}M>C8~y6LM(Dx`GddhDcd38+;y(%=1bI`LV^`z`RpCe>hR& z+_aQ0$0z2Wr7Wo<1d)V+h8r^DQB`c0C`!5qbpy% zH`rRTGte!H4MB)0iRa`(E$4vdk9Pji4|d-?)xZ9z#bbWl6i44hoqZ<_HfRM#EaQ`e z57vYm*F!on;#I73qtVoM>+-GPpS;`t^2=PQ$YZV=iHWo$#KHt*O%VrX5o;$oj+v4R zt@e>a?W6lzTRX$M51G#M%9&PwYqWf8_{$Gk3$Kli9vEGH)Vlt8>+#*3%S4VaUE9L+ zu!;b?y+cdT;mB7NuaaLMEG_rf@9sXldicUi3(vlE{>`@^UBCYL+GqVWUIS}4m_Q&+ zDGC-R67(Y5l&P;`pH1~9Q8Y57VbjJ8!V>q$qm~x{`c5VzjkV=Z3P}qJak2XHhp_A> z@r0s;%FKj27>KJnkt9J0HQq{4l>dDA8W&km`M#9|avD3M2JelL4&p>y&;=hRGlp2yc8>|T1* z`($%)Yt-SVWf-0%)FtejwL+B=YpPfo#OAl4K@Wo%)?aZ=kfhB%tmGY3Y+AB&b1!p9b zmN1S*#yW(TEt=&gcp|bnUl|i5qcF)+qJ)DEJfL}5pz%P%Zq7$b;a{1iD?+F%J^bY` z-HaB>BCGi?4C;!~gn)6C+%jS!T1o|^p`tNj>ew5`2SKL21kyyXTaMIg2ViW~uA;4l zlK8@IcgiVlba5cb`5fdUGVR4P&2+NfcEmLWCT5IomFA-sG$5#A1ri__Hy4K`G*EG} zp;yuc@NyR>5WW{gP81dn8zW;0EI|a40h$_waLs`iJmF2=JBlkj;f+jhx5G00pf%)LB2R+b^Z~B%EE(W~ir)~-&nMwE61rWF%fGZ@Gzt&7$xf?hla+1Rfw>$ zm;wP2M8|7!Rq_Gt=9--Vh~0C{+>6ckxL$`LC6#c!$pXA6(LjIh#@YCpYQC6 z$6zt+EY1cqkxsV71+o`Y93MfRo5)mD>9Y7*S~56kV*ri5;Q5~H3O#AV`3Hn?-oObk z7x#3A5i|_I^W+Cx<}(1r3Qca$v*DN@P$#J%!6X%F8lHeMDNY3@kVQzyqz<2!9{>Q2 z@ldRw>nT|a!K#ONU%$MODS+5U$Tgqp$}TsR&d1zl8G{W=auey5-io4oh7{zWl*b(! za-LU=S_P!aU{RYu=~mR5aH4Hk?Mj%+(tdN+hFH^%0v+-CQGp4UvNAbId^Aonc9i64 z6kAl8qF3OIRXSLZ>_Qkg;%y2V_Uz+NBpL`x6Bc5mAr+fg6q%X?tf&_t;UF|AbvM%8 za1$=R+tY`ioH=%8?Z!v_jr%mT=+gp`#rF|n#<^=Z!U=8O`*Oa|4VG6P^#7mtTAyF@ z{mbM65Yr50MKmhZkZ-bdnS8r=IHm)3-)1pO{$O-ufT@&5-*-yF7I>(b`(; z|GPhJUA{3of1-8ycI)Psbp43W1RgD#6sT&l-S`Y%PG=YmyrW}n6TI4gcX4~Iw|IGF z?f%1~&%bu^{Dt{rM;?83dHv3{QGdfYI5L3VwhgyS9IfC0PKH&vqLptfwH15(S6O(B z49I{N|4C(!irW-wA+-GDs}4>9e6$WMBH1-B0@WIQt|K|LmdZ(~5Zq9!lmb~Tj#lNDh|C}l%{Hy>?%)GnFwiO{`Ke%&@zFt@)2P^qxpu zv5vVFAF1?7Mb9k=(hI1B?r!qX!9zd#z4^cW2A7o|{+pj}{hIg3Y|xXoCZ@?zbG9TH z#DD}$ot&R-ZBDnhyR(uo zo8n~-po&L@2O|bMcQ4HO{P{FTJ-A4ESgWfX!H?#-(X8kY|wwr(zr5SD#uk$ zK~R5kB_V1fd&z#)L=Rfx5dB-&UlmXpTG-cs zZPF@T$Tt>E47>Z<#}+!L<~oNFusXQ4xbw;C?v+7j-9b)`kP{=AB30%HWDikBr4(d8 zcDSWs)|nphfhDGSG#71Qr8XN4YXApb42q}{B9j$EYJYf<%tRhVy5JYT) z$D(K%mrJ4kJWIwHb{Db5wL%&PL&2Pn`zILET4sBu5oE3w5IHHp`;Ad={WcxyCWf_HVQQH<#&%v90pMK98L^Cw(f@nb~8 zwigw_g5LlICo8vmGH{m^7sq(@jaQJEW6;YnJkw2j$|0$2NKiiIT%X+K0VLxQ zffRTbYky}amj}HK&x?=&#%xV4z#&(|vKFkP7*96SN3eE|%5j7v2T}3)cqAhpW^Cue zrtkYo{175)Y{;QSB7op>AISkI12`mkWw|gTMn*8edZ_V{OI^ysb(WY%abeh~2b59B77f}0Rv^%`{K2IM zf(JkZ$krDb(jb+4P?%v#A3Zsxfy6kq!j-fu{f-Tokpza2P1;zOxM>di+T@(iz$()# z$?QcKc}oyYfT$xW49bKzF%P}pRiQAE%pM5gkIxWdz!4Hy$W>{wl?_wD{DfFxW)$@C z781PHZTbm^3R4ItX$U1+Ek-=Y&$c2*xyF=lWH@|h)Xuyob5wO1l_n@qaY951CV&LBf{AhAT;#q)AoYk~wY?h^})MXGF>g$t3}35?5A9W6r6QCkR(*nTjmL zb4o~a6l8Yk3yS6B<2h7YfjKcoY*aKDFiAL*&3aDc=gN}tQwt7Bq?JVxEdocRcb8Rp z;802Ev+rg~bZI`)M0i!j9TA@#Fc+bh6x_-*g|IQD%0QfMNj;k##`Ww7xBkyNBlw&A#+}`}DDmU%ofG@xzk6?eXX)O;+2`kOHd4MJR&uHuNLm@HRJei~I=;*&wq=4_GFT-Jk#(rbKWviZkcf*khNObr zNU2%XvMH?`soF@43Lsk(Y*2BJL92h~`qI6J>+gSY;O!R=y!!mU3#V7!|9tt^zwO_@ zOJl~1utQ3tk7=SQw64{i{4c3Wr(ZBSM6GNS*+YR zTt*K{?4Xjq$8*Fv80l;Xx#PxK&V&fW-iyZ|W+q#w_qQH)T1)&ad*7lF@7Uz6p#x?! z1J5SXWPGJkgct*tq^C0VnVbN6p387M8Bv48faQQ2A z&0cgwXu_h>Ce|5_#kGb^Qx4a510^MZy9Ufzwcql;Ty#q8RcU|OB7?+u#-Q_Nj7)f zO;v5_;wqFzQjyHe?mIO%cYJrSxxV~WZ+8VdJ?L2*wqRgKo?0u!QuXU(zQ%e~oBoj> zsTgqM`@sVfXZE*`ciK}M!-tP|KVR-$?v1#e0VbRWoG2+L;R0h7hyhx9RP3&nq0;}o zjU+=AHZ<-irAXmyHc}pKRiz-yoNQEzuuqkH;TE3zvAb%lO-xcALM4y~`n#cy3<)Vg zLNzRRaaAlVbZL4FQygw(fEtqWMrku6l%k9Ggf?>dia}bDI!M6bS>6Vq(XlcCDvK~I z@ltAV!z#HdBF5cRHO53H{;8}CwN~k|XiKaFbn&<4R+#=;oEr986{ zVoY-8%(urVz3bnuPu6))q62+wCRUk3q5uFu07*naRA-#53f2-9Cyn@wC2ld*%_^wz zsjk3&RxwaIbIIu@%&g2t*dtth7MTu==W#DLK^b0;PNW$tfl@Ahw&x1Oa znukKNjo5Ucl}KU(Y+OiD@D_Gc2RIMzKSbePR$E{>nK70hZuBgyD z8^;dAC9q<(R>~sF@rnB*CKnb?zSvt^-g$V#>?%LV7Kh2{5?93^ST)g|I=~z1CUzfw z-P+>E66pazQYnY{N+d*ZjMO7WfenP{OTsZXdE(sMQ%{XL+Z(_9>EPa7o?YfWG3t~u zhtVk2OgKo=>AB9rk->+?0qX9)`|MYXbwXytg z?)3SCPhU9m-S02myuR|)XS*8@bH$QoB{gfUssxRGcT!>)C1|tk^>SpzmxH9D<&q_7VAh)g_Z_~b&3zAn=V>k0^G^p7*Zh=naQ1Ow+&F7 z>`fkoM(uDz7)@^0cI^h(H&)^Yd-~C4|Mrzf|JR-ED>sk){%c3S|H|CiCzgNp(dOkZ zhHH;d7h!vzau2;qA%8^eK3cM*-;e}g_B-QZ(0NRvZyi(0Zi8~spEBtXmXzro%iJU1 zd9v*JXHNc;zc%~q$%lXO+0wuN)$ry$UR3ArmuNE|L8QTFP8uh`?^A^yEY+Q`*^^Kn z7?#;+t!nw(SvFbD^1$pN00gw7X7RF2tlJ&T4*I93c|FLewY@Xyablv^+S%boTn_4- zmJ1dT%cNi3wG2&1InMELlO@m`VN+5tUPAKLOf>y5h%Wti2Y)76X`XU-&RbD!O zi)%roPKT1(U=Us?Wk{7m$tfXoOh6bE^jA2;<4xIQ_r@8mrPaaxrO}bu(abdE(N0V- zzKo0(R_G{fQLc190WM@%+O6%a_T5{p2X}M4im=!s*_bz|!qu>*YR^gPFR^_ON+Z7Z4PepQ%3m5xZ~2eyu?M+xEyIgTV(c-EY94bOosed(zr=gBSy6D zU~ZL+*L+)4yN!UcSyWJ-Dh*=VAWRt{mPXJ z#Kg3?AaxBzV3TG5EDWwg#k%QzBS!Eg5Cj~*@o)uNL8Xl575t)Th+(Nk6WxiGp4PYP zQz_OUA%9`A3MysWTuOjC_)ieru3aWHbh(HqQbvS21&Mk_$9sWA$Fi$H}wEVaGm3<3oK?9_-75E|VySiqHa!iJ7pT)3*k8T~3J6rK)+ z$HdNb0{I>Y@FrEvivX#zv;il)m1QQ7GfJeJG0H)si9nVb4u%3^$c|93!yG}TF5#N6 zl^&fvekb3;ric8MOIY+wFssyZElVCyV0)v;L9N=kB4;j{ln94X)Gk6ae-P*bm!k&l zh03Q2g$kD=7yEQYLL~#+5fnx6%0RrFZ8j$xsiBLc>+=eUIjY%2gqwBkFi>ZY!%K1f zJq&6!*qnsGqpi2OCQ&`4Vy}l**l9kIYJ1Nli7GL1!zxkEL|xf2Rcx}vEf!%y)AisG zEw)TBp_7N!n7q`T%GX}S=R^L$fE=)j*NX(KfG-6z2V61R%4aia!eD(n$jA%e2 zo+V{&Dczzp5c5rc6hW$}@h*c{ky_dUS}2mr_8nnramH?muU%_>`{L-+uWkOFDO`{v9N1z?8l$3Vr* zvr?TL!f`vinx-OnBQ&nGKnQ*{+etICI_^*@73J5EHWGr@I!vRS@5uHW@(hpoYCLK? zF#J$rN5wPxa50)hM4~jv#E6&K3a$BU<6uBU!WN9S3 z1+Dx7QCLW58APDBvGw7HcW&J}@SSfT{O$|Ke*A;AXD+V(_QT%SU$*!e_ULZJ1z6gJ zhO%cR(IVJU%8rR8h2amxaa+|8EHD%7WM!`fCMjK6&^XU+(skdyg&(|j=HVtZua5KF1@vfy@*j1 zoZ%N3{g5^7&TfBlecRKV#CoUiyLm^vIF!RQ7uM)$i9r$o+@XmaH%lOE!6G(}V_i!% z6)iA;VKvef<`^dYG^d!GG)OrTT?%O=$FHoM2`fvTIHjmLrb(L^6q^Fr*G6^=SD~i(k5@xA)K>xv=H;5aX~!b`2F?AZj2R5(!)aDD2KCz^CoG>HWth zr}y`ItG)HxL*64wXA%-2=@f0pc<7ZG*{-6YYOPQuMP`X-i ztPZX|>V390_ka7jOtE7@&gxQxwm4IzJcn2LApKQLk@TAGIAu(p9=>#%w)ol4XatQ zmP`ntVHF95Q0;LZ^$HV?#EzHQzz_P)?$I$Qnv(|n1T~xV4vcC2l>*ZMPKKRa(Lx{t zdkGQY1WcbhG>i->Glb>F6EBxd@K_PG!2l058sc4*4640t&%VR)G!#x*IB%5)@Ib;9 zvL2JV1S(0&mRHQ2+c1uIVp)PUiX`wpRxS@>5uylM-SmN6?|)OP4S+t+>1*BmMn4rx z=n=66*Mh~#4fj)^pMwO19A=8uO&sH0i^{V<<&v*AtYQ}SJG*l_>i9e=c*KU8Y+8aL zkpnQ^lE=^S`kT?bLf`8JLW|eukJA7=s>7|Xv_XzjXdcAa1(lW=PQi19 z)Oi=_h#d~Kl0|UpXR0_nFtkx+a@q)tb5)-;37JWV?l3E0LLhpYGZ1Zu_;s5oS69-O zFv92BAq@ zP%?S5wJR42A@jjYe1VdQB@uTX$jmTTM;U{N)TZGl&csDAI({=fz!+)z#(tO(+t7Ha zo#}#XdX|`6lRfQHpN)tpCrCsA10pv;M;SUXBwhfcwN73#G>{pQ;Ne>$e5&qrUR0LH zq|!Vp>;aMP4gzhh5~&niBGh$yKoi_oYQxj@u2&Kj0{uxTo7&4JG8)Q&i`Zm_zD1=$ zP%w+8XdrA9fP@W0KsBc6W$HX}q(qsLvJ{;V;=}B=;K+x?-C@*f78DS(p^!ui#Pd_m+ zx4*x&J6e4_!B4=GgfBiddhX=J_K^3H^70s*%?s6G>F}!O%U=(_yydUYGiA54r0wJu zS7nix3Klq^X3pjQz4Al=4Q9 zYUBwi+jjG+HA@X}1jwH5CoI~mTda)GZ)8Ud)k3jfUwZiX&wsY{<<2X7pH`^C+Bi+BG0JL?}^nWPuZoe^rQ4iK?vgkn)BA6jNMUB_tZ z07hqS=g&uwMb6o|F27I@p~eV>ucU5CrNo0L<`Fv1Ppz&EFR!&0w?}P%TauqoVU)vh z9E}|2N~r=ggwooIOvPIo`ROt!i9YPc@`_#6hBgq#JP@$B7HM{}D}8z1Z>#wNu!+qk zQllgcI)%V^uu>K~>XpdvB#^@8WSW%6cerPi4uw$` zJ#JD&cy^Z#MHC}!(PyP`z!|3@r7=ZS-RYTw-MQlc-rTs`+g@ybT~G`#l+|pc^ zn~@L7$4>!J=kSYwIP!rYa!8#VdBbP!5HaM_)k71|lInLoTZ|+M?U#0t!zhIYH}rfN zSgS-^wj+P6E~V0z2ZU#3)+uT{neqr_I_-$5*N>bJX0@rp`eM;r z1ue}(iVPAcHk)jeJyvF0dPNA84gVntU{b%jaK)66^a#xk5+d6JjT??M;0?durJOM; zPkL*nVP!-mO0U9A=A953A$e?wjcRcuVvplhGrAVWz4Tp9F_2_;Lt@eAm~G5=wtXat zUwp?1ra!Dh1%8)csMwmG_Cp%jIEKj=10-f;PI&A`zzZ>VA;l5qs;&XJy1?vMTpO{& zE{x*^PIdsHx6%f%%*iI`oKwUbWQvD4gb0lhKO1~|xl#&jLrPFN6-1fyP>i)mS3<-F z4#*WGOx6HAWFK0yLMBtK$!Q;x@Sz~8n6q+;$qaziMJ?dxDN1)V%P1Hax@e*ojX7|- zr`5Pl>0rYmn1nFXQ|Cbi_nm%mcVlg5J)@v0SsN9dzn0abo$xzqh5dK#;xHxKgPu`9`4d5(IvKyA8M`dj5gLg{7jCi zXcN*K_-coRQ#LHYvtw)k@RC9U0X}0S0NDLvhf4La3R#fzJ_l~A zZB5ON_U&u$pYP1gwdZD+mo|R>)0;2-i;Gjcqn&MjM5Z;>ZO=@39v*)q8?YV}OPUgq z<&z)$^vv2?>+$mF@uSfiuPE+~x>FN(A1r--`AdJL8L--j!Ja%5yoks-@1jdNR)|gH ziWg#lb5LM7Jc#Eo_a}9`-IR_TJwf-pSjKfh5Y{iMXgp7!sQXaq6QM*;ogBz7oueN%2-Q zMx0_(r1TI&3r~_6RyMU>U#MMgE77%7l+vO?kd~{`*hFox5+4cWmoMA8HaqrA*69PK z*e#PUuv)Anb1wkF!&2KG$b@SAv#5(YNsSvzgO+$X*p9v`FZk;5xDXX+*Iv1U#xFKP zuP6>56gXJ5&>E^@w@IdCYRXvUmOikTSuP0WI72FEQg}S_fg@duWnpq7lr3Y|`>fDm#%FX@6L(W7G zgXk&ZtwD zluQiRB^Wvaf5^(Ktkvn|T*jUG0d!T0-`v%=wPE0rEyxs4iGWuzU{CI`r+J!Vl8JH_F3M~#v0T#=dYI>0x@8JQ@Rz@KihrJAM46?wN0GeEgFEKjoJ*&d};nVd_$p zC_5=G#xx+jJeoV$e)YA9(@*w3_%PQxSyYJz~M3U0;KCa0g&1d$On zaluLmd9gD;0zNg@o|$K4=__hFJbOfw@k!dw#Pq1keHlG2JlcZ7?>M_jMNiGBk;l46 zz0P21{l??1yEo@gU08VX?80lum+xF#x^bz$@hB%o$XXL!maHSqV3Mi|jx)zm)bD^K z^@AE6)ns%nA6;Fsb?u&#%R*V%s(?_VFRG^4zEMS~@b?75Qk3$_(#T}j^HBm$Dq0*V z5_qao)qwT?-CV&wP7)r^P zO0#&G0_)P_#YOPsm_p#>mSgNYY2CwDo;hmG%#HRf3}^RuW;o^7X>DwER@Y{F{SW{2 z(L2w~{lVL(I=xnJmtUgcsb5hN{zywqXmxb!8930jY^)F0*V-Fvqphu0-iPh6?&0Id zzxnNlkJnZvC#QT5g*|JU3;4}6&BHCW4!abwrjbMob_Q!_a&B(^IM)Vuw%0cvU+?d% z@cIbt(z^P_B=_TAnX(m0Y(ZqN=C__QuThDIcr0pafBV?6=?e#2Cz<{&?S6S@`-9c~ zm%|oaG*q;Rv9Pd4SxH2Yd(o7}n9Ue71|vZO5K6(uR0#`A6}mI-UMx|l((zN8p1hVu znIaKHpJwmCUlOXZ%!CDjm&&$J)0RnI#3KELvdrv{x|{CbFuDYS)6SeYW`6AvpjmQ6*g4k}%mV1KBhL zV=`fQ@;%Zbubkk%-K01raYJ-;a_+`g!jRE*Sfyhbv$zpX88k>z{bjamV<`1`=*lOO z#3I@PRYFKq;3&_lK`{!;gfQa(=XD+opz`TJr)ThTSq&mPV^sQ3UZ0_>*lUL2IFfW$ z4fk`BQar)Jj@t+#7oB1mE9XLygDfxONJ+Ayi|cWkq){l((5@T z67f*w)>%{#QYSxjv$(^qkh}XlBj25JSZs%vJV3jXTkoMlBU*Xa1_A{gOOeA8K+;nV zwAjkDl;bAW@`DYi$()2%qe?LQz?0twID*(@%FOft5>wEjw})h1Ng0Mys0-o349Jz` zP!FAsU9g7|$`D6M$dImX9U8ufAyarJj5#jyiIkKigfHy&^=_ed7Z&fN6)SM8jq(bnosG%lGk>Isr_r@q5Q-uHor5JzfDwPehAd&kOsJ7S0+6?w zCJAfkXh7O)q8K#gn6@yKhpYQ*yn;G2jUSnSKDpdXxtWoAjP*(&#hNW(W+RT?*oNLA zoP}b}n(ZJ!BNpLI+S!l^1Ecgod*FQ4G!h{W_lSWIfg@dbYzo^OQ-fFE*wD>>US;VI z4-%~|Z*avZ@ykaWa5Ibfo(5qI>_fbbTa0+ZhRI?UbLLh*g9GSk_65RGpgKjONL0hE z(AxJ)q@^9QfYl3PI>Ag2?C&)ga%y=7FXWNzwgKs6W!U>dzW~sm?RLe zBs3Z5*ykZ$Z;Do+7x<-=!?R^cytH=r`e2t|u@{}5_KR-HQ@@DQpGwJ2kjH^iRUILuGW293A8T03 zdx|WXlBdoBL?Y0*n9>neEKw?1>9sxqP3!`#gsZhM$eobu0W4Og?6pLR6r#}ksgO4t z0!j7;r^CEr1Y96SQfwy)f*L;i@T%7G=+WPFcPooq@4eHzb!Ym;XJ;;+pFVSJ=km$z z5C3Yoyhu-Hcc)r2g@tx*e}P;+2q*XvMy*{v^cgsF%8J>A-L+jRz>}VyQNvtHFnQQH zd}RLnuOI&#uWYYu-2CJB*5CWYNA>s}V5E3hlEsC%swG z<9URN7C7w*MNJn=5UM;WBHZmKcRI0@cdWU~-vUGl3s#|Xh%2rG%;cnn$k->$r=2zjlF%oxNsq{O&8 z(MT6~QiYtdA22x*r9km&fL3d5)s58@#3KH^rNF8i|C#)wT#zW^waY4qy#-Nf&5SW+ z5@nGR$?n9XQ5pl~R)vyP&sq#@(&Q;oXDDQKaH0)tuz&P)Ju0z&n2 zLyqX^t9iOTOT|$z7))KYEiLCy$-L&7T94eKGD$*=-0V?G1e(c}ZPnSjGiv2G3B(0n zp1}hokiCpmnd8XZo6chhH-Z{f4<9B7O1u-3J2T<(336Rek*D(egZW|z`88zYe z;vPog6S71X0SB458D6m23iKl;IDS>E(+|}H0IfD7re+RY0BlQ+;}I`$3WcpfSY#BO zp7HH)M;b){N|_`vKZIOa>ur;e!%IC2co<^AOOio|S2^%Hfpa><5Q_`2+)qj^;Q;xh z6Ga+pnvjhOrM?u$J4iDv)D;MGJm(ZqkK41Og10MqRHrC6HtS16N(PLE0|(|vqBr0q1g()TG)6o%<}iks z+w6eS6!V*i2n9qSA-?gu$Rd#n{pXJE6SAc2Td3stUe)YaDZM0>Dgi}-8Bp}>BqWfN z8=9$n|A(#a?9thSPpsYhiYW@Ult!xXqErnkO$HF2?!i;-*~7himj>IbT%+b9o?gL< z+~$D7;0Z`!nTsYQrtUvHeD$sVvlm;JzZ(7I=basXX0T4A(~~q%^#^CNk>NwCTm$Dc z|9bEGjnPY|TdzLZn)o)aifM1II_KB@coSG*C$UT?U|?e$r$2JGPjT@bX`j&0UOH2A zotb$q1Gc%rY;tOV&OSG~Z;u$I?QHsD#+@zRQlmhZ2nb4Ck;^?8=w0RImykF*VOWR( zM3*g2>CqSMc4np~*EW|{@4UCTaOdLD7oUInJ3m~!fAis&pKm<6*B)%85g^|#tD@bg z(~tIVhNP(}uezIDu~*c`DM-Gdml7bdvcljACSjqRZ)`DZWJFzN8@obNs8_z@7U(kgq(u{P1 zMbk{{bS(^3@KL;3OZP&JhR0{%8}>MB+kWQx`L|!6d;a9|r`I0-$9HeKqsXlNRf-w(k8L> z@?n=>79^}uNqngnN)ZW$BE@BK+vA~W35j2nPmH>AbY47&=NqIc;e}G$%N|WQ#Y2oZ zCUS0{MCo=p8vh?oqPJ}WBcc32r1Fp>2QqQ;7mN z=5T)C|K;jUyCgZ!^t{Zh%&dLss$S3ypceul0S-xcI5S5Yk40%{$vQqq`l2uTd-@CZ z7wdz3M(4=3W@rv+bHPpky;gTuS9Mj_mV5fT?kBPUIl4MC;(edxewKHOh>SSD96o=3 z^zFlEPxcQ^&yNG&3;b9jK=Q;~W#}a6&c`qW{zYuSWycNtrS9g+=I!O>?a|=m;`GUQ zoQKEAt4N)w+J(#Fj>a4Mpkx+l{327lI%};=H?}+PUhBQP(cYWP2G2*o-5>nweEx)n zVdmpGeOcn&i4*~%y%An>teL2QM?ljRm?^FWLixKlo0UqRVQt~3%AZ0VI>bQZIx zh*--3PGfve%eS>jK>nwe_8Ly*0;Z&}qo2#$5f$H2sMH3bgO^70FA+$~REs^C+<{>$ zYw$QniTp^6DpDcM5PGCa;NTznVsk$cOsPBogBTq$>UcRJk}B>9dDs+HvIJ;Ss~*VZ zVOgapje%SH3YXIQTp$%#crD7V8m;y?B?3v!fAfVm@Vt=YI^Wbyr;+nV^2QcFk;dUd zgozOrcCa!BetABW4jeL~mdw$9M`Uf5g>M`fhcx1-1!E*jkkZNo87N;c>Pt#E40TQ6 zq$G2s^uJ;X>J=}#faCAT{FAcL!Ba+&mTGJKM?N85J%l}T{gAt?VkDqXRs~~*D_(7a zo{bj(c&!M7aTt^)E^V&tbn2}5ny8Q$bQGo(${N&7y9A`m2`4PwzK^9=lP#B30a-|( z3AsZTYYMNAbT~Kd%P_=&EC&pGI*#mOlkt9Kqwg_cn8b(7=`NHR+Gz5c5YJ&EGC4g@ z=f`G`md8;d2NIi4o$~@cgGw5P7IL zF4*MK3XVPPV3qUlm_sFil6d(b0MMeti_)Ap0SpU2h4{xj3<=1jg!}irmY8=BW_9OP zYs!f=1f|F8tL^!S)`GPqhtTKDac|j7(+zPf8o`5c0OR!ec)~*$_^AyKWS1^$ed}=oWPW+z^$J{Mj^Vic29=f=YDQ&A}m@I=@2V27z(z35|$UGuOZkF)B(^=Wr zyFWaAH9UQp=A&M=v{EQWnbk^d8oF_+2?6{PS(GtwyIJ@zseH&KSSzlXQ;daXj zHv)3@s;_H?+EhzYJ25oPHzk-|gR;)>A20=JSHZIhyupXU3P@a}nyZ*9ve;B@7o5DM zF&39SFoUvdn22bo7a|O+o>y=pKvaxJdWkC5EYPUaaa;zDtV5O`-`~_~$S7_S0tyX? zf@lq5OQY13iZGu{D?fYYiA_`cZ368} z7r9jEaO5;eMkMf%+KcnQ|1W?1&ov1AOhXh3hffmg3<%zXo6@eN|Xr7|H!h5N=0QHEvvwr zOXR?cO)!%ui8Hcs9Z(xhA%-EklxDfwQsyK|9f~F+Lq!D=Qtb|+M6TXQ&5jc) zHW?$y*+rR6dZ`6^Dj;J&q0~$d*Z{b|Lsg?(wq`$KCGZP{G55V)!g>l z9x2pmnTuHJCmqhr!Gk3kon*=ls0v9R#{$AVbHiq=Z>x?Ozkbf8n@Q%@DA1Y8<4P&Q z(aHw711FnloC`{Jl6FvWC+;$ublht3%3H29;&dDc7ZREIad#j5!lVqr6mV-U4p)f( zxi$zt&mb`|Iv~_(v98AxT_$5`N1{GY6klM{qy6|0(dewnv7m^ zPrvl(rUijNBOxw;9dGd;L22hUNJrlYR;`=W6i1h4r%$l877LLYa?2U-o9=hlXJ>Cl zpS*nY{OjHKescTm``2#0b@0uXub=*DGCayT5*4OrD>nuOHbqmEY7c5lnXMg$28RZV zCXj+z$}q^vfn1W;Q6ZPa=1U+-0LSW!N%F`NX{or9uF=VM6+~z-Sr(BNQKPo2-G(v} zjShVNQ*Y@=SY-@r1_#Xz?m*GDzyot=GF}ET!yKc)Er{+||SD-tZVXb?esJg9q2%|KQgBdwbXSRyMc$E6cqxqXdJEw_nVUj)srE zJ^uQeXP z=?;{@$P5qv9Td~jlu=sXE0;!Pg;rrYIOrPmkn8Hu7C?_0qf~DK2t8Yl4OT2!C{4W< z3KCIedf6YDr7^XN(L9WhGFHV&I&#iBkW-@kve!p~rK9B@-SGwI@;WnaUlKfg0R%lE z;l7?R5l!#PG(~6dcXD*{j|V5e|IIhob~bjeZ}GXhzTW4ZVPppPi%#Z);o$Vm+2PUg z$?2O59-76oW$cS*=V$ybX1u(z#yF+TK(ybs1J6UpfXHY73?U0&-*xz{;PU1j&T?H` zyd0h%%;vlk(r&@Z*tl?)3>4s`g$r{aku`p$zoQ=h_O!D;+uds4yVkwiZ*N@A4quLb zb2R*ahw}rU*qz=S@_1jc&3~ojKzTXPac<>6Ar!2FVGIN+dy^dO79)j4Y86GP;KM;x z@+v@{M~Y2p$&ZYMpF*2TK1eEsA%<8*JD--H7fq$VYzkv%9=o=#i7+KCWsAQ7UQ z;%JEC>^cw3ELWPqS1m2f0fd27UfmH5aY76Lm1A!MQofSQo@KB|pc=X-+47IFrdR^c zdNy8>HqoUtTuoDTvSJ=kra(nUT;zl!_|j`PF@ivae(?d$V&}l_M>*na>K9*Wm*!(Q z82Tl!o3W_~wc0W5(W`%vn32#)0=1bmPzjeakVpr*9ZrsLWtt?8jmb7o^0zVH$q6iM z01FZs?ffj&mNG4P47h{~tKukW*!Ya(3V>zyfJ$(hBmrun!i_nip5MSID^91>xj2R+ z+`ebRPewS2=xg`11UA|d_YW~!F|IB@QcnA~Yr|FMB_1Fzm{np5g6Mio6c>=ZT;9ni zLkr!y?#+!$uy8RDova(_uDnHE8?nSw%ZOGv>5BqiKTCn~F~Cs@z=B1$PyT2w#AThP zp*WqZZcLF8t3d3?SnByRm$Kyx&G)1kGF%~;`Y7o3u*qv>(&gu2dceL;eI_P8g#_Us zdbvCt$%dNV1|LN+!FxS zh*mdpWLOOf9sV3gdFH}2PUH6*CmM7Lgzp|-cCx?{8r1B%h}G8>GQCV8r|B^Rg!&mv zn5Vj4;_ksbNeBurO(-zrhBb{%P_?-RW8cPOEJG;^wxoUIR;!#quo+G0*uxl~Z)cS4 zaUh|{fI_76S^v@Ypz?}y3W+x`3J=7(Kxmj4gB8nESsF|E$EWx`aF@}K|CnYcxY%^8 z*o5J_E=k}i*g7j=AQ7c6t&JG0qd=LArJPuS1S_bv+dk)myIkGz!XwK<9>2cQo%8r`2E>guf8BS{p7Rc7bWS`A zKx*hopb8|tVU+WsA=&5CZ%g7FPL+{Kz5cAb-df$G@pB(qdvLxqIGJA@&qrsR6Y8{i z{fUmjdKfF{jvi>_4Wgdp<&-(DLTj@ z6Q9Mh7+ng&?mm9EGtiq9Mkl0Dsy&j7th-1yo#P;|L$4^RmU*_p=FQWWU(9(hy-zoerZw7bXiN8hv` zecn3v<@IE&8iWcnX(@kaWvlh>z4^-e?D9$59w{g9V|aUifBwI{;!Sic*S%7mOcot; zF);_JR%xdI^evqIUVmeC`>pQE21zj58087T@UQAIiiqnH=?5a1`?~pi@{(x>0S0ZgUP|^#p|b=w|;ozM?b&+ z(O>S~y8q(aPu?7SGvj@FCW|_ZbU`W)L>0S%6^)djqEzHi?{#BU%d0+-qz;kGAk~6adM5`%fOY&R{Nd1?VtSg_F(w_{)@9ee0KPs z|DU60H?GhB;_d13>g3tw$>05E^yQxjxT_TJ0&;}rY$E;vbQ7Y$G=KpsW+3}jZuKxH zCp||giJd>hWfpg4`>X$kN4aQ=Qz&v%I{$?n9g(jXr9s-Bb3K&TMDZitn!#C>b}NVV z2uY5yYk{WwpFN_KY@)nTpvLO@WGdE%p~5e4|CIm{d7yyskr>cjkxEQ~s@%(e3M>f& zMOCXf&H(Zxr`#Rd?JJP`JLw0wyPGr9={jN!`rtNG9KX=)X;x?a^yQ=we;NGDQDz{M z(eU~HaDV@ZnU=#Va2G^bP*aI;i_V#7leEUm^G9)`sqc}-#b5x?@DA~ zLz$e35IgFEN*FCJb6^Wi+F}`)dm|xMMgEk-e<(xUK(;P5l^ha;tW=sS!A|nv^P*KG zdc|ohjHyFtGOG?H^mqX-LSqcXwytUg3epLbA-}+Rq{b*&5F~A^cR?acX!BWI2oYy^ z^TmgfQ%;5MC!mz_m)V-%Mc`OUdD;RD$cI{-a$_C9>RyC2aa$`AM8sr>?K?D(+YzZ( z8>5}i$cf;%%huV{N*GhCR!M@y=>ZuDKvR^Ik|qL_iQa~uJ~ORYsJgvSN}rd#qKn_t zW!lPb^OWP-J4vK**Cwp9dZ$|(CKmbWZ zK~!90^m1cvdT>#f+dIt)rZJ!bxNT1fr0Salj2-W;=U}MNk7b`Le?={ z=ZRui=zP4L)hLj=>4_lMd=m?HW8pG{QoCHKI1t~l!*aI~ zhyPveWbK;eC6f}CH%y%4C83#%TnhFU({yYmrKyEhnvXFfk+Lwu*5tC`z(CfONEQQm zfK6H&D`5c)^AF)+nliiwMb6?nUCK9H>~L;^0ZyM;K~+XX)uNTzOsE9}0j97qQ^$uM zTVS>$+&69JA{kFabFlO*!h#=BYOd;Iw|vPPb2KwQ8uXGNV?PVO zKI_0a>%isZd4IXJy2>-c=gYlzpT{dK@iMyB#>#AUeb!l?O}q2c)|`9sxY$2xq{kB7 z7XwhPxAh3F)w0;je)3-TQtJnQb{PeV9--CSocFetHg0yt!};*EeR({;IGXc(krvme z4QYjna3zH`ko+XqIMntVYpUGsc=8K{q6M|@1Gw%9i1I<_0?2|g$jdM3>aZj zc@l$rIPd;&cI(dct8Z8ZY5|V5KVgs#7$qCyD542)af4?X_d2cKd@!+54WCb6e$yVG z;qK~hG)uU!2&uEa)7jV?&-$|;J?Q-P`}63h@>ulLyD?pltwRtClL{`9_}zCoK4#UUVPG>U5psS^NZWR z_^az%D<;%%H0PdBvY2yY1erv@vFIRB*dL;R-H5JeC}CpQk_10IIknZLWy8f`4SW`RtQj0d!h|5RhsMiw7R2r9(} zec_7W)YLI9lDsz9gdui>860_Ou0oQ;kL;w}gB)Gipv_i?WN__?VBs>JJZSN&C#R5 z1^w6vt)&B=+HAauKZo%mDwLCO=zJSj#5yMa+d(=A9-6c!tfg%c(fBEOz8fxyWFt}$MWwhEALH4fybeQXOQITG_E=WvuM%Q;`a@Y2 z(5Q2_f$GGukb^Cn_*NbN8P|%k)WwP6OeuTOSoCrvj?~4z#t9`{#r)BmtJn`wYKVFQ zIV2@3;LT*}0AqiYo#Hg8*%HvC$ATahPzS49=;Up7HCc83w@|6*<`^jzWeDO8tFtw_ z;&U0|N4ZNv1R5+{ff)YyE*MvCw8mys38gND`qgyhVrYOBT0R|ZOWFcQV@Lq8526Zq z)%yt-izSqSDlRBF!4xXzNh()(xq{mn1>9j`?F4|U5HYNBiSk(K%v%~RBiMhU7Vt3+2D@-#-k0)wy z!d1SPy)jK4nupUlb*>d!X4?T_#l4PwsD>9R^(`>r&k~e`@HH(IkRgh-{is({JteO= zFGME=P~?IhW{831Vw>r|`h=MowrH@?!eo~D$n1y4!>ZUzg3ImxN@sO>wzAS%Tjd&H zdu6$^-s^1imo``Dy_Lzl%L687+{nWs&_yVJ`o)YQ6y`Q`d zKH5i371v4+a*@sR2`OOz$gHP7o+w)uZr<|p^b7TI=lbFUCbdt)m5~a~h z5G<=f``VoRS?esVbD?jEhqN3#<##>?!%KRVW@w6Zy049$_VW7llJ^IO5eh+l&3U%C{$gbq*B z@brb;t_hKx6@Gd*)7wrJkaiL+&U&Cxs%#eN{g_!EEv+Ilv8dKtY**>!j?sq|UCDo} zm~%r453L_8bylVqm(M?ceR25o<_90&dWZWL-+uAvi-U)sj4xl;`#%(xw9pA67juGw zNDTlVU)0c?f*-Qn6;io`HB^d9^sulaXMI`37SYYFomx5?I+WB%S$hjI^EF&m5Lp^3 zc_B(aM0r7rlBFb_G&Jl9MT+0*m2{# z$03(wfB((N;hX+n{rF%0vwQ#gf8Kqt<4WstNY6xvs*pHNlf{54(^?<#N4Mv-^G@sS zjn19!eB;gZ(_ejY{N*#=H0Y4;jRa;rWD6JT1O9^rbg@>8jgk;4wQtmY?81d7;iQZb zO|1`%ggBGPlv&ddB<-cr-SI90vdr|G`|Eq$89N#f68&f)euGj6$$*D6N% z$nz;Gj?v0;LWPrcfF4kmVBBw9jal~mRY6nIyeq^cdG!K86&fhN`xdL>{8Vw-qqLYp zF&61A+8|K7%kAEJht;5`Y-ZEZ01K8&F^3HWG z&JIpqTpT~0a*v5qBrUH^fY~d^fg5PTstQdM5XAuVngjr3K%2iG+-|+`j^iXO1?aHEV=40`zHs3@bCiEnG?XRK z<|qx`OiC4Rh!WEhpu?`BWDzp7hhqMh8cI_xrM0S3W{R6$p}=8e_=D0tQng8g${huo zzPKXQe7IR0(K=Iy<5T0BuX2;wsa_LOf%HBSD9b;gMqG^3Gm&8z(+ouli2TBXkj9UVjU`IPf~$Dj zff`6%PIyor8~r4m%dilb+s3OQkly}Is7j$2-PsD4y9-fbVqTZ~7HI-f3V>c(4>XL> zD5Xg!T_KIEe19iXNP(?4B%l@yA!^Ji;&6u`P5>rEiYjXM;s{R$Yo}<^bR?mxu{MJ2 zD!jw9kZ=rZ5 zhmHmIQ1%{95oA!Cmv{JPyikTSLqIrxoJ}ub*JTQ9U zjy+9@@0|3EcpGANILaCWdR+>UgFS`Z zyx~MagwBOL%}a1_Be${fi$UJr0dnZDT{p0p2XkC#ypZN9PKQ#?!eU1MKF+P75fZWH z0D!$T1_q{xUKvBA&J@1TnjNMGsd8xqDpVmjGX;OJ2RWveOXY}E=xg~3?1YDSl2tMi z4(9`Sl_;Q$i81{JoFL-ix42IW$V4SktUPA6^+*ilni;4wlwP=F3sB<3w=s{elpq)h z^f^&~DR37F3_PSW!-!C4Ri;fkVGINZ|EY>$1_G`|JV}+yXE~OXo}zf2 z#&LO&nLG=^UVE9Vf-9}{)zF%ygddpmTpIq{T5uYKNWJugW9q92B zs*PtXTEsSv3=P?X;faqfk5|ZBcJ!wI-PIm;s5cSwk40X$)8A=#H`>eBXBRJ9gXgW; zDb2#Mo{W_#9@bl#my_2vXh0#-Y_}^&Cm07s6Atwfx7R1og$UIXQ~9!N1xK2R`G7d% z+CYQ?#jr~&=K4T+X$8Y~WmdXH51+I4#*H5=Ew8_M^al*cjQ|F&p~;t+l^>S1-PW~t z=Eo{QvbksiYk(UL^Fw9J8Ltl};MWJK9ai;7C}A(@kC z!TFurwWz!r+w6F=qcnGtn&QqTP)%vt;+Ru~vo=?^$0x4_gVX0b`ybtS|0j3f`^on1 zt(Ol!ef|8K`P6kRyy{3I>0fb|K(oyrQAHNnsyXMma1dz7nlS3Pm@joa*<7*h8Qi zq?p{u)GfvQh4fz6zyro{D+0{!0+s~^__zi)~0Bx!k-{wvMMX|J{)W&5Ct6H>y zu?}5l)pF2fAnX|(h&O+h_j;V>+dt`kzWOsu!L-dYip==o$zrNvwI0%^?ks%FQR5}{*yhX>m<)_Zy_KbM2Jzs!t>4wuK>%|<8l(FH3)&XG$gJqGiI3d0q&+Gd@_0a>|+sWh)> zbM~Swva%yJ+&O*CG5b0;<*8T1hWpTtgxY@Kn-?-Mkf35R=zr8b^UpycG z>Tvw)v)QA0n?p^h8ei1yVZNncCtnuU*s5_1*3sEiIX{<9oqET#vD?E=*qT2GOmf2;X9k&-|IHTH zH3Uj*DkI$^xQLPPVpN(X{Wms7}Y;wV?Vw4Y>vGJL3|(9lLmmv}&{7djE^ zqiMX0m12h$m}}G{G3-OJAXyDB09=WnJ)8c(Mwd5KF3!O~My?==rGiThjq-Azq8!&X z3Kiy1Vr91@5w4qYO=uZj=Ns<;fE!Thz7kT&z^tzsLe(Mw7?{5jo}{0tCI!n(e=KTJ!V4rbXdwrF zXh4c-wR|EzVCDx594b}^@LznA>KCdU>b%R;68HqCa>|Fr`Ndhpq;3 zh*{^VO{X_76IIuIpjAF+l}SGjtnoSK-UrK+E3b}ph|Q$gkhy*cj`=9%DIYwexQ&W)|!JDW>eE5pmB@#%biNoYia z9Z1VhHSr#KX+RK$4tEkuv0$X(lLUo!L1@GKUSX9H3ii1br*@ zkXxON^>+Wp{PJ0Ac+l!_6KVeGjS>iNvrv~&KoP-rIwm|~Ks+>`qe7>IJErLtcvNjJ zd4|N1h=zQ{LN&^asv^V-V@uS0&7hhd_`=hr$`uK;un&R2L{jYv^{`wi0!U2N}gaX5F4bdbZ z#{*i%LEPaSOB2j6#~{JURy6XvD{({?X9;caHsT!tlBQwNM6^PvO!u`d5Oh&^D0K^E zK5|%u;eb&I=53)+Lj6Gs{6JG5A~|3Ssk`(OFvarPx5H<6qNk?!u-}9tUzG8n+9mGL zv5G}eYyNNk_Rdf5bw@*cXZm|w13tU;fNgNAQ~;vT$L^CRAc!&aQ}ciOuO2-9`o;hH zzx>Y5i*;pQ4a9p6OlW@qU?0=~k7&DVds8x5W!h*x+{%U?&$|L1&JMr1JbFBzFfQO0kwkMP zhWjFEGAb^y$kN8Tq&Ua+{Iki@q_@?6_h#?UHs|ka4zcC^1 zTu2DEgfX_HSz(rXDX{UWFaKqS7YiuNKVeIweU6T{I>B>HVUyt{LWVd|DLCg!CfTM~ zi?!H4Kqx>mQbpyKe>kl8tYAr(n1--gW4_U4D-_>9j6+z^gXj>m> z>$4Jvg7BitSpm%UW95rTX0}k$D3(!c(;^~D)X6HoM9qODRa)uzJrZdlQ%2E;Sbrcn zJbcKF3TYMXF7)O>Dmjj~qmL4|(g=YDTnR@|_92LjI53J#ypm2;*$NR6iL9EL*cB8p z3PTequ&J2_T|0#`@|7tP0h;p-s#41sq@OK}7Q<1dMWS2^L?e=+fzTaO4|!I>#-H=; za$pf554DU@HN&!<%3ds?tlhGgec0n7zgJCVx(fu+7g-u!1= zakZs7c7bGp3o!i7xK6i$h-w-tp;u@0rOL$=_X9PP71 zB2biLkS>xeY7IZ!6goMi*qFLzHV^c5pwf4%&=NBw#=@d>R&|K=z>yWhxlF2}{Hi}9 zf(kPeWjw1gS6nzMA;KS6NLrwgrJ_LLHkM2aMS)=fA2(?Y(@=e)J7S1m@wI7cbPz4r z66+9R`e+efWi|!W3KPub0x~0nUd@x0irgv0jt@FuZR}Zuau(>a2Xx+{3qXHiuLT+8{SSb8{xQjIJ!V*H`De8$DjF^k8SU z)W0}pCBj*lcmmik=~u4_8+}yP#bM9aqn?L@%z{1JGhRp0+1XRr@qxFVuB^>(z3r7@9`yS9ReQ*b z)J*Nn$IyX$?MO}dh#<-~Is7y0Y^`nGynbhOedqAx;E-QMPJA>=TAB6G8D@+#KJX=n zX=3(Bwvd#0c7&dekI<6;%QQf5RLfGoQVLqNn_)FRQ4sH?r5lK(QdEhZbBys=8i>}2 zLY{a|%~COIJs60+kyLz;m_}3R9?Z2AWhiK@(2=()bf#)EmNJz7CA?WDin8ngP-4vZCe~zi# z!_(!`Agg_EwAj0`_CNfycj*2Z-f2KKMf+++N52{xAPt;_R%vYVu9CbjK@b1(pMUVb z|EEvS&V6$L%1uH0MQ@XdN#y_!D)+brpnTxiMG;CJefUCnhK5Qi4+Ro_`qU}E%pixg z)6o+~dCO_+HI4?MT7ywH#wLj zMtNj22~)vRRoq5l(#tHsR@@*lrsZ1}F-M2xsxN|)2B76l?r1|DS>_e&$fEBer&gAiSD8`8%#b3fySBW()9SBtYx>3E!^!z8=74H}Z6QUqdMDs5 zFN}hTu0osggotvUnXo$FyT0_^_3jUP?Tt6%=lg?ycs>5zu=R>uXH_!h*gv0XqATpa@&}K6A(Kgrq5*nj!*_99ww8v0H#QG5@okr>~zrZpwWpa+NDB@ z>oIL38Dz_hxFeizsMZ zzE>(j>1s?=NjO+Q5(vuTg-fhV^bzQsvoXZv3Wfgg{JrIRsYwV2FxBcwb1Bn2R46q{ zsRa_y;l~3RT_X$gb)h2;pL$Y{z^HSeP>H7&`6L90Bu)&fx}YYJIyoMc6z?$VX3b%Q z*sb|{T}CtFDsZ|07m{NJetj~e<*6)7e&gf)l?uNFk*EdCJ?EnQJ7|^C57;YuU=L~v-Gmr823n^ z3KlijPRui_EGc7Asc&(f0l;Y-<6FeS=zD~_tOmI}*xFw2-`(xJzdM>NjbF}ZthVgm z#qYdPP1*NBJiK0tP^Pe&1kPhK<>N(&<)o=M&KH9a6Zg<+ltRHzu}c-{l|ms!22l}3 zgj@ugXgu@atxjjXJ$N!7KApGDWNi9UGPdcclx_I38iFy$9O=>cC2`06L^cFT61qVb z`8teG|C=rz2@ROk1eUgh%I{KNEzzi3V(W^@=2&TE)NH~XuY{;GcO!oa4V%&*{jf4JhjFFSQ9&& zqVb$^MY8|a?%mzp>u2N3Z=Qa6&M!Q@1>HdeSZM$VHs$D1bstg-jjcjqUQVw?C(jw9 z>!y$Od=siLf`o^D7)Kd+1SG#KHWc7NjJgbxU&hD<08i~fBXZbVEGhMuA}XSMQ4kJu zY(C`86qEM(Qs;d7`t1D8`|o0#WW1u$}(dD?|;)@~-)u4!g zoD#FBHeHj*DJ*#$O7bz^a@knPs03w!#qc37Ore3?68>i)=n$D@p}jnk=t*2BautUg zMSDb(2fB6X8*bj-+1l=&^DL6;s}g{cjP)G(x3I{{GPMGW=VAn3?4DoF_in83Y;T>M zyz2FRdlg`l8Q9{kZNv6ZiNP%+_D!)p{z(|rW?uoJF2W$qc0ch5J>^b55YGuq&J0#Q z(qqRPahu9yw}_LL(QP#Sk&8c59Wi6EXJrlT56+XNDu|kfH36WC&IX70=(1#r%S6or zmI1JVAhQXNDPX_=oM`HKfy7ZpFiepwtMNt>6hP#60X#Eot+TS-S=nKU&C3C2qrq%+ z#O>nTgyMwE_=Zg}s6tb1rhxua7drh844~RGq_DWzM=PI<+T1_IUA;UekShV45yno3 zox~w>@N;vJFliA|8^4GgYSNB;>aFx#yV8xAfN1BAvd+q8dv$X(^hD0^BO+{E>bLCrg~DJ^ zi^pJyyC6tF8b)<0w8ToG%ek1HimI|1mZC_EFc_36posMb40VVM>Y$3!K%)7SnQE6Q z{iFyzAbsQWMhjvrjv=7nps`5t0wqaY{CGrN!Ep+dCd*-MAci2VS1!vDMUiao2vUAU zvI{|ZPu;1xa+pWy0U{*WWJs6-D$*mfkrm+!b)jtlC>y^lhNT>pdYhI|m{~XdP0&f~ zG?J?CnN~(L=3u$TM~yVtOs+C(Rldu%!9E~E2lR`X@z{GFG zM@hUvEd><-cPdg&V$(@b85og<+H{C`&&&ZKpJIUoK0!H;VQIv>hG@))%|#5=IwQq6 zXC7$ra$8Ot!|Uk5A%hAc;Z#sH89hS{Z#06r&&zDp5QTOXbihu7p@yIJo)dQKg#(j) zE?57d=+5$d#RLg?oD&3s>RcIu$c1YJVH9_3a>5WE)*Jp~-<~r!%IL^UFw;-jX3RR> zX9w%rrtuOm7(}%i7S5&e#c5CN%E?ZR0$xT}3jOvvVSE)wYLgII0_j&5hls0oC>+j1 zY90#(`x`H8HX$$&)*=kMa9Zvy7MJDP<6XMd_LDcx(qdx#3>!S96ym%Qn+yaxNv~cb z!|Dikjqp;Ft}b0fsZIfi(Cfom&oKpLjTji{;*$_amJEy(#p6|DCwi~IY6y35;ns;K ziSdTv)iW_ieE7|^GC?eUq2eVIO+uBS-mafhi3F>{%dISY*1m+u>i?mLWdNO_+P}>z}8U3U161gry_3N>#p5+^Yr&L93t%gSxhy5KKwqd7InAw)gyX(3?Zrqw_+Blgsng^QUA2plf-NfD%^DvY@JQ zqJ{2ruXtyzzj^z{57yVN9UMP7IC;Wa&VHo{m0DwrpZb7fvmO6jWdnxbaGD_-JBfQ) zXYkU4@#>2nX-2~Vq)*U69L|jIVW;n+og|TxK*lS<;M0ge=YQN3k3mUyWUQ@@tFtQ; z<#fNJ@pL%toOh?ElNX1Vub%F_{qgM||Kz=&{>{!i@9ux~`!@$qpkdg7J>3JK3lice ziL+IvY)#Shns|8zLUaJJ*#|)AMF5p0Zn~>#tFVEod#t8UjRBaI?^636!-A>E!lHj9 z3m9dXJf%8(36Pc1Q7nAg;Y-|nQ`;mS-IWVLx(@#NDFw9d`pZFk=qwCb2hlvZf4R%K zTyvb@t5Hj0V?n|~3sa|@#!*#}3JEYbpPnYn7eeO;V?aEdXi{UqoB%B21;Lq&nT(6NGO6UWa5lR z{K~wnzt&pap$}?tYbax~uaG(6b+6nb>LepJ!OGS+=!zX}6%<8>AfJNZAN!`0JM|YL z{EtHHH^Q+RdSsU&sLND{Dy8MWbjoI{Z!)&o4O3EPQ6gBKnA9xr zRdwb06fO)ycA}1;C~GPeU#L)8WkI2bQP(I5%R)K_K@)*~EEocHAs3=Xo?nRbGnMWr zut9JROYsMr9};SjVv4w0p+bv_^3;0-MNVwzyo?j$L_<=a2ZI1! zL&!j%w-l(4Nn6Bw6DOlBQxrOPO1Sh_6LMr%B*sIgAdEkbIx40ZSh=L9kLVq}y^#~f zxW&0^26C@gWhC>4mePkA$e^$0E*J3eumLtsuDcHM9T<=~m@v=cir;uRst}qVR&hqV zE+(K86pV#D7Lx9PBfeulzVL=e&z~+vC1;{!J*e;$+FcUUZ*xBck9gsijyymm7ohMA zBE(rP;HPwo;J+n~F1W{TlXZ~;Kj+!;7CsEOVK7zbf{g-?d#Q7cK*LkkI?N|Th|hqJ zIsAxRnO1p~jCQK6s`b*3kw99a$bN2&go+ydk!NobO&;-z5&|MCKuIW0gnA1O0r%lC znJNT<1z{Ie$V>Wv0JD zFm+JpnSK;;6EnXA04C4L=O?Nfhho3%O32IsIpJ9Vc+id!Tsq|v4>?54miowW4xRQR z0@sMuW(`SH;1}+wNw}b(EZT6nFl;0U2Z5KorB{1gW()MkIZTC>Kph?+fe5JG3qvKQ z83fK&7)AoYSq!i>Dj-BULO3=Ox(z0JYOf7q9l`Zip!kCM3MW^18l_K^xqW^9?jAoH zobwz}ouG+sXc8S-i7vrHYOYsPY*pw`;eqLHYPy$($*yS#TCa~@mf<#usL&8wm>zQ%?}x>J#ld{?Cq4rwrFuk`5{*UH((29Cz4y)!znKhgF_+mo^`JcPFtIAwI2L@a`>wCa-U0NZQcPbg9<{R3IeP8*`|6JQEA@tYIv?X4o_#V_suBRV->MU)|`DV6x##CtG=YGsTgA^ z)HzJOy4zcK?%cdfSNZL;&(4Og7<;PKK?f7<1yeX@AfH{UJ(Aur8x>K`ap_>7xY3$_ z+>Jqth^wW+?@lNL&Ph6#ps~ZzK`$Fn8v>h}6iA^!t??M^;AjdVfgbsxQBB~aT?7n# zvAONCb39{Y;jxON!-vPGFTTG1;HP)~yN|B_&D$>?fA#e1KMsyrcoR|A_4-9o09J)z zGLw>hNwZ+E*dAUL3qrL8e$>h*rZBQsaP%FrWy*hx*{Ptarx8(RTWP5Dj5SS9hG6j( zumy)H4D@7r8W==A`Ym~gj3}}Jkk7E%?a)e+>RL>xId2q1o^t)*U&_#Dy}`H~PR@t3 z-m+)zD5IXb3Ik}ONK3R*Tdm@&PJpX7he)$KZ?^^)vjJxUxf#_50zrwXrV~QbKc_cs zTpe98#`dTt1oLGY7%=xWCRtGJz}`|jp#v(Ugl#%?W$Sq}ZIdO&TknB#G|O*Krc9Tn zoA2(lueFx;*7$AP()rlm7m$0#jla?gxnLYvbh<4?7`#cn&}2tL zK(IP4n+3Il+Z9H1e2ZXbnU}lrE5UW*!42ed9v{Wq-g$zQkBTAR!WD~<%7FmPk>gZGu3{to$gBV;{E-}u@md&N+ zYzc_~2V;(xbP|;C3Z;)a*=26!_*&MH|Ni2Pr0ts zT=K{%5N|aax}OgA|1#w8R+ByaS{~p<6QlK z*~VAYLJglj*4s{tjdPY@-a=+?43D;n6;@Wt*l4?Ad4{w2Kw+FIW#WQZ-*stUCKg^f zz>=F^fOzMv5=?TwbMFzQ0P!RR*TB*=sM9U{x3vc^ST%%@yC#H#r81|nxA^h=jq#*A zzXV}$7NfibH>pA~4O!J#W2~hVypuS0>W^agsMm|OPaKOF8&8p#suXIYO!0VN2EQtG zGXGu6;LI8{WiAP%Q;fmE-KFKb-Pz^%@*%H8H0yu^k1``xkD8ELN)>U&J%N`nmB8Q) zv?PGM`bsp=^64n2XghJ(jj^_)#Z3zktuZPupCdrHo%ZJ1-VaBYC!>=mJ}+H*{H1Mj zDkSZ_AS|u4-u>zHV%&Q9v^_lKWWK-B!4+Z=1ZzTbku}o#Ui;R)+2Ql~`LT6~nQ)GS z^&rpxA^9U)U1;%yOlxJmvvXrQ9IzVXeG;J80)S+5kia!Iy+n#)kfk7^{Gf_U$-CF? z@9o_`y*M~{{bV#f=M00+B4^cvE_R)qJBw@Vqn1+@%>~5x96Z#igTsO-H|@xNAg4mS zMW54ogbjA+5y(_+iK_wO(to8x2Xf@OKO0a`&>r-Xt8CjA%|>8peuYYh8N+lq07w-4 zrkX0=gFR}$=HX>H^XaEAPG5cd&Y%7K-48z8d*}9(FF$$pr>{m_lyH(Wv$g;z8nqD4UxjC(~GM>1qGD_NUu z>~-F|-n+lKbYn8RcsTg={@^!fYz0+h*q3{ruPX^u;u^|D@3$f$=i zegsl%*5f)^anPnhK~cn4z9}uYMhoP&P<+_1#Y3jH8cfTOClqEzBRWdpON);nDo{=~ z!j?Y@(4%_(tXY&QqS*?FEzd%WgRUV68GJnAm4Q10q9CPQ2y1XyqTxm`B+h0SBSIXh zjSnoKw4BrcQLzGzO&Bal1R72&@klHSO<4_7VAuvinJ@V!(i;Y@w^lR(eGg&XmPog1Z+p6+SMB` zDY%S?MkG*6p?}^x!p5R5D;D6f!ejQ20j_kA8%iK>O~{Kva;lbjzf$;#w`%Dc3>YHq zS2Om8Xvzy&>{g%h48M+p*5-62|`{_(-a97CCWJ74fl4_^S5 zs>~ui!62ffTF!4lL@se=o%`i|H3EEzLDC&yn#O5HI4hJTs#xR~eqnC*#9E#ire_mQF>-26kh{{?_e3=+)AFoNi+5GQG` z9`z7I!{Ho#hcw4s#l%L z*xD&KwM-9Dc%2P@NJlv+_ybb@LK8COsWD`HxZY7P8MM$yDgT=M(Q|An@-M3o9{Jv1 zzR&xz#$$d@i0hOVgS8C1v9MuC4c01w1OT5)8G`6JAS41zR`_hN=rWC!M(b#r3S|pF zLy5q`BPcoZnbZ&-RxGdW{t)q(M_;wL042GhL{%)xj1a1baYWp{Jzv?HKYP^n&6zIF zQe$U@3EU5>3Y@-jt@Gi>^TBX_%JXT!oCzm42#^c}z8v6ZV|-_2qs?lN6Dub#6CpAH z!Re{Y0LXN#=EweGEZyZ&=)3dPz3U%rZNL5M^`n#1Co`VC;24Ua7;eJAO=oK>pf|SH z#X}U91`6q)Au4m7jOABe>2r+*EyC5H?F+a2GdvRBE)k@dhSxY56OZ_b788tnJ@R%| z^PFSk>)m+GoJ%uo9Dz6Vec9NQ#a^fhbV`zyh~;wYXm--+aMR%B>sKe2fB)?C<;QnE z{_umJ{pH@Rx1W6e$?^VU){V&yuV5saieW>B5*4NYE!9Kb&th8Y1UGDn*Co-(6@pZx zp29*?o|VXcz($QoO+*5W7OPR6$=jGOrubed3ROxpNzT7O6QSa`IHd%WAZPz0KJ8Lo zJ91@f3FP&iohTO)r#gr>{SKo%(D-N1@AHYC9nNoTwzigoDjBT+|FZ=~xhGP^X!{M= z#Dsp}BmIUowW5%(6DpHBL>MrU>-qpi)H3%5O%( zNre#opr`kPa1me1uJ1auJ(7dwR*RadDM`l99rnzV3ED=_{yX+mJ) z+9*Ya68JOG$knD)OhttwXeKoLRN@eCxb3!AR(MzHWIh=lzZ{%A=Q&TDmyNH~3@|f~ zEs0cKS~yy3bZi_cO{~EJuy%QlXzRwU?uXZw?#(-sgV7f+2ERQTe>!QM+9zc)qqO1) zqetb3g($vDqqb?62`o!Ire&JEKo-{}8=y&C^}OCFT(D&yk#QEEWr3wu@gI3QH=e8^ zLZ%2UDGIS`FV;$x22ZJM!k}yVrKE|G04yy?RcX~iwaj9Xi;p^rfEI9&O z!jt~h+;3D+)sR)QUGPF*19u8yLJ5FX-S98$f|AbAR@+#?7|qxT3GsuJU{yy-k%iDP zIg~iv3ws5Rp-^0omCi;=0|il7IkU+LbMYWfL zdJC`sz??E_=3lw1hUU&SomjbH20cQE6 zgfVx~V;2CN5M%<;9*;-vIFNev4>|0|t@fT3F;}agpwz3HPFOk5j1%;pQ!C}WH%>%h zN^h)zy&f|ss`xzvbX;^q1m`IcwbaKRtj5*g%sB23JQ+E-YY{wVEeNP$W|?n#WRn$$ z_)wLQ=kYeIw)8oRQe<~KyhKv?HQxUq*CNXJ(a_}4nM~$gE&2>MdsjT^WG1mvCPZ06Yb+Z}wMPY^OUEoOy=C|34zO}L`o+E z-%k-DTLaO;q5q`~xX|Dn#BVOI+?$SHv&K*mJod6~_{?)fMAhXzjl`URJAqOTL5Ug) z)nb$*oX@xm9IQ>$950>{?PE6|v-A=R&xR^phQh%lg)AHkv^n^ppiGP)nO^cmH4G$N5*aFrQ!eo~oC z!ZLURO&N9XI@VG;;g-?)vsbOz_Warg_vRaYL>Qd3Yh|G{vVg5nkjKb$102sU&gV~` zw7z^kd+Wd7{h$8&FTQMSvpSlP!VDEitD2@Na7{#xnck4scmZ}OIW^21E3W&x64H|C z1iU^Z4Fr|B{N!M9+C{IC$X43K`NyJ~ciX4O4`g7w5w&b0=g2R8lTF#)^WW#z&`nlN zGy%Gf+1YVx@P_unWCfhnAKD_CK$k~2vf&^nH2O@}n=kr?8iQ?KNmD+x-V#wMSQ2-% zLM+}*CcyB~TJ>TK;j)FfoIo;0LDAG@-CJ=75#Q0k${h*Kc;;+w0!v$=WB==g%*HdpP{# zsCCG#dfcNPY4XO>SgC6Q72h`%N`?r$_Gz&TU)snL(>OHFYIq4ZAj*C5UnpQfP;fRr zja*7_4xh0~V^tx7(w=6U94cnL4h8=uP#pVd@0P%5HypbNIz=3aC6u*SoCTQTh$=DR z=L5QcFy7RtLMJUeqd1OIRov018Z%a236z#@%0o+(mJ<7grYsFPZY`4RMsm?;t*RR& zI$tm*0t1j61SX+8ju(+^J*~iul|-+|AVNrT&{%1G1WJGeDczHoBED6VEUYSV#|S`3 zkWz%;XXUU*C$E;P!<5l#yeeQ~kV8t;$sn@Cc4@kTUz6 zHk|;fd6%<>EKZzuM}CG5M?mIj2<1c!JBUD@=NFyjvQ8k9yhXz2%CO#WSOgj?lcnx- z?33}l&kZ%eM1zk5E$DFvJ){p7iGQ?=g;|H|lX1Pe#Lv0rI7So7wOGWs<87#5!*Q8g(EZB9V{agk#hE_wb9Q16s9E-faOf87;c5@>XX4J1V9uy0 zf%n*`*Wa==ej+IF7*x}O{|vRR)65EW@n!1pN9>whVvzL>E`WsB7;;|$+VjZ1`q`xO zDl>_hE1cvALL89GB6~8^0tKX`Gg1>n+maZGv&xyN)|!UZEbR%GI*p@IIVK7Yr6_WB z4G%*7K_-MwSiSSpF5DY*lfJGSZ4AZ^*xV}20y5_ZH~~yy_0GD_YBn6JL)ph$7O2D> zC18u0hIt?-+xY}MBNH=h)76P5I4ut+UnqwlU5E2BA26pwlnKJLNvXWN#bHJ^W<7C< zNDyP(MXxN(%t48_(1|_RVRm`uB*VBkPX%W#n@6|{EoC9aR1uRW3$g&C0+$*rtSs>c zU)QOZ5)q>SdI>y2DM%>G6%5*o%k1(LZt?enO0tbDwSVx=e7V;e=GsMLvXa0DNhWo)j5nRjWAZ$)`~ZB6^1IUbp}DY``z>kPf?IG#@t*Dx9M? zsK}?Y6GP&rSmicGHEgt+I2;=LmUOQK#ngqdiMzDGP>!nHGlnXqL9A`vUEaQZ`s(xP zD0g+DNnB8X2>OIuV(*uj-+H(6%U{mEdfeLooN1Lw?l4A>@Y`gTJC04!|Sz|AumrJLp0qE-L*X=ofMY)(`aXh=;8g1^dSx_Y(AsHE(KxS0f91p@k<{KVzUhm zX%1R~Pi&W^Gmsnof}lma9`O86h~!OELMzA_hPVZ4JmW1zCuiUO{CLuGR@nHwaMpk9hM*ku%}{psP{9QvQo#9dukAnGHf6Gk&%^sboDr%n287xigbp; zCLhOg=i3Hu4+k@a(o6?~>0mS(_YYpRCd1bDMr*ZiKjcykZs?kNWM}>_-aG!}aQx-|=*#D=CoiYRr_&35`AG}4 zTZsSo1T{c(qJYpzqoz=;=vSwkQ0z;x2Z>8UI&IT}PqNSqvD$LjGs=rGjdx>!AJSG_8Av#f!&1Ltq8XwyMZ5 zC-XS)n8NA`1)--xR~4y6p?0gdsb){9^N-02^SlY^5r7278l~(m>aZz4->QhotpSC$-<5b+dgBeX;&3nIV#42^9mB}z>QR0(%| zQW+5PQ)>4U>IF*-0u6N{E2oikP+h68D$;a#fL~R`8If4LWr@NvLYcX$l`S1y;VR_~ z1PREASkc6#;u>CvQWboPvLNX!KwP;{L3z3O)!q!NDyf354S3^A%+cI7DRYR{s+`Ar^N#-g{_ETXT0VL6oPG9Q^ICg66GKNRj7F%hqJW?b`DsMZ zg#;pj?10aC0vLe#g&(D7W|mq&Hhq|4L78Dv9B(FcqTXb{V>X1h6cQHLzl-DuMMtMi zb+A|b6yIsE@(RqcA)_5t(O?sX<@zI;k46BbD)sX2(41e z$hxKhVgP7&hnEOeOmg(@G5}?YwDNa$4HZ4>j0;2|R8<);0+KPs!pZcM=xzrIoMi@~ z?Xb{>hkY1lPK8kc^Enif45aJmIe8 z`0Rk;Xh-k{1KjK{~YAjz7 z;7ic{-@W%m}y?EiLZ?%5<&iH6J**==SI2bEPw)!&kju9t^+mJ)-)Z z<}qyrL_h_ZoxDt-1levFk1Pt5riuerEo*=y2B4V2z>8!gih`U#;7@AmB+1ay`+`L) zvxSH#rsOD&-m?X*984J;L8}}9G2t3;$&kn_%j}Sf&5LqCl}%?!MFllnrGu*hLeWD* z5GawFeT9ISQN|*P1usb16`AO&Y+=aJ00?V)7o4hdEiOqaisVK7QxZsO1}G&Yx%>%j zu>wRhX(S_w!jh^mW=U}dV`H9=7f;e!CXM4Wu95~BO-O6!$YpL5 z?a(O|%#ua)4P53R)PhohGSOp}u#<@ThA2c-Hg1Z9HrIL&Wc*OAM08P$@{u++K%3#8bdaSfN;#ZnAZ0pGV9GOuKIXyD-^vCz zYZg;JFZXdNsGCRcgpR0W-2VQZoM{r0zFgw5X2%H-{iqpo1$DG;bdq@giLXb z2@p#nqa@Nmdk!iwEOA+hkYqCKgww*JoCc2;jMg7YWGfIwAQe&N;6^PBzyt{xLEs&G zI?w0oDo;WpR+>REMbZ#t0Es*aynv~X-M`FqYo2&95>$*#I}MG1M#{(i zW4MDHtAJ7{mhR*n@4-S6QBWTl2F4xk;M6cq9>=`a2(b<7xK*orRmZZlAgIG_a~UEL z*yUs@?Sv1z`J{E!4NaIJfrDg9;iF_w%eNzSjqQ{WF|1=aklm6(=eb z!osvqoTxhg>}&|5kU2=;-cs$vP`=wYoV(8SbFfO@7k1Vh)sg%piZg;KQ zSs#s#0YPOl6Rfh11=9KyI=V}v*+NF!K~PgM8*!F{yNiVr6U(ed&@x$OI6DOu7JS)h{Kc{cL2j=wWpR``S^eTtZhP$yG zuntaH0BWyX=-j{0RCE0JS*z!yx5X{FHtgdGuey&=fRnI6WbR6^t=*i=Ee^N7n)-$M zM3LoUstxSt*IJ8flhZ>Q%``8X%*MnHhIvru(&~e&m+$W%ZtopGn|9BvHuS+B(sCf3 zr({qO@I1bUPZ?Jo5ycn-#QB{qhAII>1aT7wrJ&G^dfg9rJ_Ur`#ZVYpUFsH_Yb9am z8TfpembXrDSH*w|!m6C@tlw$$zIWRebh8=9a5Wx){#C5DAqr{otvNH((NQ(I`3Y6)g@)zN55Dzu9< z%oE)dRAmXdIIzR|kW=qsb`& z<_+-y=ryu-@o|NKfLp&Ke_$z z{`%?~FT+GxRp7aZbX;11R**1VS)JZrS^Uo3i+}Lrdt0yG_}$05fARl*{+ECA+0NDh zvtn9t$17mPdNZDyx7;XYe{=~nKD-W^$@H?f+hj;LJw2KX`KCPIdCXJ#K;wsUL=i*` z!M!nU+SJB>2q8|PG?=kUk$z1 z0zBzX=2jYE6d+A{GWV8Rb+k+2=(><)}Z3xH|7Ghy+X*Hx3P&yc*scD>5 z1u!!lW-ws;CsPZ66Ipcg(l}N==LN+ z*7<vo!zncm8J^dvu^ha{)Dqp{wD_mLa${HCSXw7WckeOb?{Y4kWTU zU&=Y)$i zu@0iD0(U$T(44XS$8zEPkYSwT#R$gAI6NJ-uv*Q%j$H0z36CD6GvvY)&Alqo>@ckJ zlM;aO-QMWoj1c;K@Ti&!jjIUUhDZ0qH99}7QO-qslfn=u5F zSo*C6PVDAk%0m(MsTpB2Zvabz{LzbHUL-|OZ={yHn=X)+m&jrwiTI{X+>pz;lsXZz zIl%Hb(*BxD2cQrhEG6nNlyYi?bn*%pWaPO@&iF$gnCf3x8G0m}YNiZAl=BS>V}{bY zm2?66n4L{4S4|5^NonCM>zZo9S9rX^9A3vkC(Doy^9ibm!KlbkO$K*OqeYB?HPIp{ z*pS5$z#SqnnpR@1=R$+h%7QIxx@AWIQj^sW0L@zk8S*d?wQqa7Y?nMu(Va*qU2!ufNq^{tk}|>iOK<=g<)pf+jW*8Cf(b`mv|LYqXpu z^w5N~mJJuv;Sx=FEUt6dntnE(d~(*__IApU=21C~h|lFg8k!}T)O0l=c6Rc+v)-ri ze1a#_3#H^fQZ0>?X}&?NxYg)rscq~^Y@^8WIpK&K8&HU(RB$KQ4r}a&;@^TnD}P?@ zW6CgHT)T7O`g=U_(%btycT1Js4Rj^eN8y4vFuQ(hdhac-O>I7I^HrPUgI2#!<)R^X zk4|iGTV3rudWT!+#$SHY;>&KnfR`x3`-m{4S&0Rs3{uea(ZDTl@aW)pe{+2FN|QC} zsc6Jzj=4NtyUd-UZAM+T2I^@dzv+1H()xodmmY5Ke0kX0H)XR**duFI7S1E*u7N~GU z3=s;9gF)iYOs;Ov&8>FZE8XeZ+WLbVZ~y4>TW^i#Tbo~g{_3;e4i2^-sZKix@XWpbtcfpkxl@ z`ZAA!r1zmIU0vX9zDt)bUbwq)@%0-Uk8UqrTHzju(a)BKmXJF|MZ{Sd-K7CxrOdv z#N8)0_?lJ2>XrNm;519FDB|-tBepy~8vgpXum1gi_}$<9^(UiY&vg$QN%~N$1UlO? z#T?cE{6N@q8GL@RJ-_THo#;0EC)2?(*TcC7CJkD+$BQsW7n$L>nMak*s7?-<5wzeq zF>K5v6?c=cw-ZN77Fa_pCoGBxJVf&6CReas<8Dk4tOyaC0>csxh6cr;;;2FG@Ho-% zJWoicmiwMs)3g53+40U~cw!ZT3K$&Zu2BBTNTy*2g@~zqm63)~cd_EuSsq`$+Ii#Z z{Oc?8m->^fmuJ6x+5dTOvgum_j4|bj+|gGSZ16&5vSFsy$(yAzUJ5VeXbW9h zmUclAH^7awf|fz0fG#PHxE93o1wh`c!JM%bLP;nB(a=hQLqWo*N+sGT8$lZtM92m@ zutu414YhDV^hOwAVlhDp^=P5IMV!z3^X=MmqHIx{oh0$aK4La80l4dS^aVk?`__yb-^#fSObVhE}q*j`d~ebjSMq! z_!r$x3PSpHYmtNB%pj4^9n@7muzElTz)&+-Ds7D0T*MUiKz_-~`LP7@;W^YQrD|p*5Ktj|N*-OQjEr(2kgarA@K@HU~sff|<7L zJWepRc2)%o1ZgZOk-)26lhA`IjzBI?EM5A}>W#PhyDxgX%m$f?WJ)B7NUSX+Prc`L zudPSloBqi^ntt!i*2|sNm!I)Wpo2U)#@%waap6wU_TAT6H6MTRS(|Hp&L}AGy-ggc zN~#ZwQUzfs>MVCJ-QY#@ll>Plw@lrX2icj?aCOmEs5LlkkB5mpCBu}4=6GRa{q>E@ z_qKLEJL)}Yck8J<(3H+yQXIfY#fgcaVx=o(4RouIVN8Ptpy&>(X{JWQ@t|+mL>^bo zgl>YI1X#+Zk->Kg(&;X8zo?@~E`C<0>8w}38O(-2*g?~UBnakGp$SWDoir1t@vrHK zZ?P%?0IM*yBsr8+A^XA#3Z*`Se#Sx`ujd?{9iD7$_VEG!8WPSi+2cA>EkD~hl>_k442h(TzS+T7s`PHk|kX=!?3!{qJ7%Y&CM4tu8~ zJ47A>VR?t^fy@SnUL$8k6r+)&f4Ik&MS{_I|M2+n^OwK=`16lH{r&L?Pp%Rsbn-5^ zxcYNB}kUmSW9AJMgxiD27+-#FGRR8CFJhTc^=cnQjZ>8{_p?I5B}9Z ze|Z1y5~ko4V7b_-1Ij`)&!mk;H*JiVF&#au(>HYFW}thot^e@*x2b@?|NX1cV3fv< zzBb;8;n?Y&?!t88LVNjQdwGrZJBUsOCzDgwj1IXfNM(zI;zA7}M!Af=0+FMG{Yw}~ z)9ko5g|gJgMuMuFVBc7l6CECiKm{^2OIR=>bC^h(f8$Ec&1*u-lo?ISpiRI_yo4zJ z!_Zt6T*TU=QNMTeYH+;G)54lX-b$npVZiR2KMO31ro}y31iQv+bw`VrC-?7m{C;mKo)}X2!WmjW_D!-DvmS@IN9=F)MhXofe|AA ze~-1u3}W-2A_XW>gJ_5sZceLP z5k43ms4NUPs>^7Hn_3~8S7(h1!=lW8jG2kgxOX}TWoTq6e6gg zY+t^txCSu@u3%7ddOxP>iP>NRT-v5CR}k6rAw zZ0sOn=bBsXF*11+a`}?!*Klx#Im11HL&v2>a5nqQpm^zMV+)Q9q0)QDhYoPVM#&Mt zDkl-eRiup7bXn$;6uL-BDL+JGYPNvIT)VAxaIiFo22}lUGZc^oO)144g18bOah>Ph zw@MUGcqw*97+!)(Cq%z$H3OFQ0E5`U1!AaWZsQ~#j1(#5N17Ct(A#mZ>G{ zFq&)5$l}o6s8k#XAUKRvBU4k&kZVLNXcE<48uQu-2b9-MwHb*3rW6qY@H`4fAHCty zvDvW#ko;i_uI3SzBC0iDqCpf${#C%Sby?R_k26vlXxsnj?~} z1avVP-%V!v&8Af%eBk7UrPJP8MkZg}xHP@-4?3$iFt$adDwH&Y1eKJXDYwW|Nnk5m zI_L||c|j4U*lf7Siwlp;cX&W?bzyR$GybsWLxyz&k`w|3w5l|eWMCwDX_|CZBOp=@ z<&~>y*aSWKWob=7ZL8im5#xwSFeC=CaFb8<#E#fP=UD1Jnb;lwHc#%EJ!vmpdvoc^ zz5e#I-p*qlNRelm5#`iR@}#VTSn$TZ_D}wFa_@HM?2PZLP6tF0G`(RVGpO)_0+sy6 zU9J+0zxa~LTP_PH0Q9>x4Gkld_rJvi2tVJxc-=*pJ!XUGCEK`M?mQ~pnqM-$hkYJ8 ziaz>20T6>u<}a>2Si5+4d*}Cur%&OGp1i+82zhzm?99Gi%dqA2-hND)OW#x*1%fFF zSLqE-+HR(=K=V#8T*6yg$YpV!6)uFvm|XNG)-@_*@~RlHxdg*Fos~ZBho`NhhPr~s z(}afgWZ(^Y%&Yk3bi=B5k)bQq4U@huv#m#YuwAy7_pJt(FL@T z$Y9Y~haqC7vIW&hux?L#Jf_BHtx;w7>(i61oy*UEu<_kT_kQ$~y_@%6{r;oVttTx% z)uF*=_= z-hJ|P@6yJ~wJVn|uC1-CEY0)UYo0u2a;V?*^I$OO^-m9uPWBECw|2I65BB?K-l&Ym z1ci!eb_WY^i3`jD00Yy2^EPWDnc8&v_0!|8zUH%l-6dYCw6S#a((0Y-E4QyK-o0}5 zt-BlJ*5Kga^!cm)lUL(c`_tn?-c~w3;}av?s50T&CiR<;@J44p(nEmFQ#J42S^J;< zhadgPA6_SLd-*c1F4ap_RjWg5e1;kP#biny6C1Y5%a#7g<&A}Z{V(6=tp)$~-~Q!r z#N>xwN8{N#A;itG88UU8Gau7`&>7$iqf@nMAmHELh6| zq7?;T1G1r0(ItQqas(~#f=LR%0yUC@X$f1(ifJOY)Rr4|F?0eH!d$D@Pxz6VPNS;J zoDK3wWM=`Zo}KOud%NRt-|8yjtQCigGAM7coQYPt$SiymI@0-qn3V|^24BB9|Hfi_ z?O^hBv;TM7XTKV>Ugho^uRR#%V#JIfDx=uV&ZK9ve+znX!b9U57qi)gV)xPvIcLYJFKx700;!HprvOPd{DQK4`nkPS2m6>NlRh){o3*?nzt zl%9-gAFSY3CM+qaz-3PfUM69~DE+b?_%o8iSOg%Dc2a+jT}U)A9Ey3USc?^}L=nUd z=I-Ss3x7}~1LC1iDd+i*sIzow>KW9t=g`EkT#B%G@qZEpELaG_l(Yi_5TYv_i#`Cc zNy#URLIE#?OA9MJgc(U_`LvM;?h(qf001Pk&5Di^fLgTUsHWgLZ=wJwP5_-L#eL_t z8x%yAh{0(iPBV&zni|_k+u_!lveeW<<ln1I1L{e_bp@@Wb|C6iZpx-J)71{wmYmal%|k1>L4 z;ga%2pxV`rpT5}91ALg2(V{Z7aTww%BXdjJSmsE8G4Bg?1}^x<;W2oP<}lGk4AQ*0 z2)e-A071$-on)ag;Q<_Ddq??{#~$!dj)Mv)c`2OU|z-?cFY2KWD*IgNDBD?C^M+W zpbjF5GyJN%`HEV%#(Bd=DI{ABpbUr>HOb4z!PsM42V{8|4wlgsT0nE+5Uc0EU-VB{$p8UlM=~;d zp#ah#0O!4bh6)2qGCRCzam+0~%$m^`wn!0l{bn4d;u;>gY%MN7$2Ank^41yoM*$l< z*s4mDlA(gyh@dZpUaXKVOspFEPB{&JK*U6N;3aA>7$Kl>Lm*JqQ}`UCWodC#5ME7d zti@~&c&0`Ri283{&QlFh(5OrJkZ-FYk}J6SQ>hTqNFKMk z7g{&o=c%;m0RK}EEfL2C)1Zn`2xRqAEr9fgJ+7o8KD8e0LOF9<(f~GEtBQcZ7spzC zskQK9hMld!-<{6&MhK!{8qVNSW2lFLNjF!^Ffw{*^eLt)G8S_qB`=$x1-Gl+_|9ayFnRvOK_QP=vRxcZ%o7w>Lue{$S=%9l`6VY#G3l<-ud@sE7QugzM;D?voL!9&$c1R{iIaAe0^ zPGldt=BYovo6SrCayF`5o57ey1)-=VnNhfesG}vpk>-f8BSC^FylRZs{D4c`FcW4a zZk|;FZXnd}EN$?%XRz`>g)xA%R)So`BARr2ItN3{2*JS#K4izDG({i-K&}w_%uS~o zjL}BrCBjiBcm;oSd^#R1bo=9z;oyU<{jWZ~^41S8zJ71*k8kgN_0`T7zdGG}(rR*VumQ}+%mY0fV%CVYWsMpd!*eQ(F%Sdt`EOtt%krJ&+9--O!XEr|@h*`e6S>0eK zk*cxkC_L<~(;-hzq6Sn=Z3vkmdwNtoq}QlEzAt-z!Hc)}5UkF4+#LYQVj;HV0cDyB zYZ%R`jU4wxPY#ZbzWV9~Z9BJ;F3&H{b0?&zL;|m18=v)hy|a@(v%tY{G+`=O!r4Hn zE&onH34wI_gq*qgD@cWmtn(}+WUz61&_6opeKFlfjOE4oi|b3*uP)xXx^Vy6;=Nl- zKYU~1a_8zw|K!7+y$@fWz1kbT*qt2qI=qdHw!un{__hGtvi(2)n|J^0kFK2!>HmC2 z6iXtMmWw|;CXJNZ%1vJ@98wFVi{gD721XxC3-kZ_U;Suv^Z4KY$DjK_4wl7P^jcn; zFb~XUqPTT(+S_lRo!b7`I_W#S5ZY2Ehf~Hfu+X36ks&v@%98@X&4s(}REqp5yz)fm zI!KSd3Kw~hfemKJsAXxg?Mu`vo8B=$5lOauob-{c2yzruc~E5988YAPb{3cfw!1tJ zY3&}K9i5%*jfcEP)RBPDjRuk+sXB6&xO4)-p#cV50RW~2X)jDyH#!e)&V6rf?(*66 z)#J0j**yD2Z}LLF;mwF8!C0o`DpFx<5?--ZNEU?P=E0+6GFw^FBsQ7VGT2%vnH}dh z6k@#q$D*ZH(4#Pv*x*u$P{*VZ1y~Z+&qjD)8X=G;7|oHij1z)NoKh1~bvB-aCt|6L z$xtYZOTZHI8(37J^~>TiIw(YxibR6=9}0$hsF5HudD?kKD2Z4Gf{F%-@X$2nUeOF4 zK&>j$3#kw(=etKg>nU?IJkBo<18R3STwA zhL?x@!b&<0iRlp4EKFk!#6vK3$y@+|loO7OEwd>#mZo=$cqZ7$6@I2Q=;Waeo6Vqd z@H01?Ea0Orl3DpiQgRw7P%1}pSdmWOjND`z*LMH4p@%~^Wv%-&Aj3kS&6L9pfuZHd zmhP0#43yKo3mv$8sNFUW1-&D^!wsD3;Ke#7KK4v`!zYarg9$A~Q2-E0 z12=j^XElXS6a)`QRrK8NMtJ>73}6zw+;hdiVPV0WSr8ct>I8_-C9sz5jE;O{;Hh*( zVf2HX(IX~~=P;sNV>6Ck6=c&ExJ=XGbF^pBn2t~*GIPo$1#@sH3h{n6hPk>YHP?X- zW3)Nc)kcbh68HeJ@S~?@sHa8c6mu&;aB&UUEZ*xr;ntt+{|;dI*fEg%npF762@HUV4o_&9E6rsX$Oo^nuSspP)!%Pn1`q#w6M9M zpbwP}x&&qh!O&4?nB+<+s$eqP9TI8ENhO4p$V`}m;bJup=CqczypA_BCPH5_$STII z_WGmN#k*~WY2j{^7)fczK+>oYSR!m-g^x+}NGm5bHVjtngJq(*S%ggC77+>-z~RDl z>D{^U{=($LL7b}e02e@#^5Vx|*s3)!0wm;Yk#SLX-X$A(1dve44cL;xx(2xdP>-#8 zc`6UL8i5Xh4G%{%ipePvLJ~JKhvDMYg{3=h&#hlM`Rb$5(My)5N_k@mZLRx_gi1;C zbm`{w{hv;sznuQdRBAxafq+J)(Z#c- zLjppK&}|&HvfjRYZF+dnVjSrjnXM^cl^DvoA`}7_Zm#%!D#{H2yRXMY+T$F=dk~c{XrkTH(>a0lcExAf!vm z{esMCGbcwMn}uL^=lz5^7ejnSGY_6}sf6g_1r=Dp+Rce?^V0J6g3bxOFi6$(dJeBA zBJA}t^fV54WWE`VgTg7Kte&mlr&UOUo0CO&8qW4POpV(!6n)$0k1Z(YIsy+P`O+T zJKFdL5<3jLi{170kfzNmn|Q`-=T0+)^ z#m>L@Z@>TZk9MEEI_$3S0Uuhp4s9}TftvP?d9O})d=_r{O=9Ud)EH!QOwDRBoWfg1 z8PHfxI%j2}l$&P+cp^akr^=*=9P^@906eRbnX(u_cY+VV>}Na52|@;2RQ_Y2P>`t& z>SAYptB zo7R5^zr5ah3Ak<`4&{ZNekY}aQ0?5h%()uGv zcIStj!ji2ZNmrXztN|oHXdpJ}VC((lpO?-I7hVMBQQfRQA5s_rJ&Nv z*fc7S8~N!(IIXrp%4y_DnQ~cO`%V{rj9ZZIZ6=)F=}7Hc_-^NMxJh zigiYZ3d2pNd2)}j7dM}9ErX+9_7js{rlxXEVHh3h201ZYX8eu*UY1Nd>yU;|x-+L@ z(Oro2jR{`|AHuL_p6QEe9DfsqNCs7gAZm%o%=cIbHy0*emqKbFoJGX!`qDr07<_=n zOo?I=3@hmjbasV;C{PtaqX5RtKBmBBg+e|Ktf>X7rrI{lWPmbJ-X1qmXX~AN?i2;- zzy&;)4H@XFE>trWS7Pagxr$SY5o^HbEHPLZ%CQsXtKl!k0l_a}XwXb09py16?9MGH zaxAKZw7R@QKtn_dMTn1ckuLF##Ic@}?dYy$aSUW+f^1C4@fvAFu#6;|1}t*5K~=Rb(=lQAIR`)mhb|e-TVAJ-4R;9QGQhMk2)rOqDhS~S*v4JA zVBL~2(PF85xYao?*f19B<~Lw{W6(mxq@`eLiUF02*);@7E12<1_;PtOA<8v9TZ+6< z%KBpqrQOaglteM0d=y1`1T z`^Nm>NtZ8DBsv2YV!@DKk;!}*t>b?K04Mn#DZ$X(7)h1Tb5TEPM_vRkvcw=Z$)lS( zyQvF>DH)Z?1#R8UYXomB-F=(t?`-g7pD#Tqit=Q9gh~~d2$PUwMTvV$r~AjPSDWnv zUZ`K7pjgjrfAvdi{?UWEn-6*)d^|ng;x<@Ehs5xFJq(=q7_zFx`Vi_MlD&~SuU_oD z_kQcB-`agbZP&_a_cS#0mzLX?F2Q2D^%eJvYGK<*_2K)dyrN}!@$%IxukY=DeQ@$M zPscR^Yna?;0Yxg23k}ZeQk4KvO=o3#&v?RNP65z?)jL+m2wE#CoAt#w^x}$2+SiDP zf!cG+K9n^YF#P3-GcE(78YI|Za%k2dTm}TvOkF42KFAlKSl!oF+ELJ2I=N#C4L(4? z=sN33Ik{OdB2W9rWt1wv<`6b+lUWelC#T5=fUH@W>d-13^+rA3W3tdX8Nb}^?>;@g z`OcL$-+uVsA78%t+S5;eeZ0-L&Q4u!iV~1ko9H>C7S5KNL7k@&LqPoqd5r-^l}5@G z3apIcSd8d~t)hEseYHF#C2$HIpM+WzRt$+qF|c684nTowF0BcZq3LRC?dIC+H`c$q zx_r6aUKvmNJ4a9E$E%kw-W)I9Ihtpem+oQ<|wP?;qKnw?jl19iYI%)JluyD16 zII0;Q%!nL9Eo)m*!4MDw9jrt+f*sZ&fY?(KiVB)0QIkep3X~tVwA;XXyF{!=B{-Yz zY>l>ec0c_3=s&E^udgiKy|MD(>iqpno$D7@-?+K3ys$VK{$O=-ZQ6SLWbn`4zp}X4 zJ>j`gWRXz`9{TV?W(_7Uvt+_~&SKa`#^|dt(A{@}TM>Tn_QpT_FTeZ0{O^x>b#r89t`WSUV#;~F!|Cb6O-AqDI$ph(LaK2_?emQcP(A3H=8GdPRz z5)qxe!h~2N{~L5!ls_m+HvVlWG?W7p$zu{*Cy4ma>D+R6Zn@Q7p~0jVAD!+D&ko0v zQyVBb`zJ^D5tU;SC7qmSdJ1i!DuXgN?yhyNU0;0jQuo2!Wa(u12A6*H; z+!~XuNJBh*jB#@AH90AISe$b%b9u^7=QV$k&=X17I8e@CiOm`3#gSZ%t%W7x866X= zd!?E>R7z(By7fz`SAVMY%^lJP(&b7;)Sc`0SNq6!|NgipefOcoSC zzS<$8#WV<0pd3k*n+k^Xtf+hxCJinJJWkgpN#ZBW+<_ba7O5=m$XD8ls78jQC7(o5 z#@d_}5y=V)NVZBgSxsgXiGwI*OCKjq*kz<-z!&RaRFRP1s3zTS)ch8AjVUPm&yA9e>ACJ?Cr!)c(4ve2FJwqvr89vYR_#q=>T4mJ&hQWy) z1ZnTABT^iS1jXw!4y2J(&am(y1PUSHBRoTdu%(cVeG!8iC?L{|v0O8+N;wo5X&@lI zkdn9oq2-t)&?GSbOqkj@`hrj{NU#9TH9YQ`G2qHJF)f4ixDA6lqfzZtZaoRrkkuWg zdN{-g z8`X=BWjC*ecrgvt7^-1}5$u3OP7-*K(2bLrWDBB^2xw+Lz(5VpuwxkQO?~>AezB&oT3hTY6Jd-#11_01A=66k>-$j{FMZZT8mfPOY2;bs(jEaK|qj#H-itl27|Oj z1oLNw^^~O9o{-ErX|l*vU5XoeGaeA~1*N=WW_oL3d_3uRabEE3L#+XYDn>dBF+*7! zdQ~*HCSr_+uvQ7W_q<7jeBI~lLP-=NZA!H~$xD7Cb_BE`V|=-A>CVcX*9ZMx@7YJw z0Z)r@{a=y@l0(G635@39!qN$>Sq0#8c^`k+?w@E`vc%yKzU)Wsxtq5y{NtaTeDr*J z@S?M_(mG=q{j{~bEF^yAgC)ESV={;dpsr@7X`xF|^ZTU0h~P)Y`a zLHlICm0M3`XH5?x&EUAb*tvN9%EOc1?(V@C?RhT8Ar({sq}lZD3~Gm_W0)>MufzLX zAPdv*?d2Ul@1Do5>$V5Vh{`1og7Yy^d65SeOlmP05)M1q( zX6fX4?b51?si-N4p`cP194K+xIMZASje$jjB%F^BY7k_+V`Q~x|=<(ji zy+OY-ch({09{0vhSVW@b_m1%so0LVr%d#w^ZN@$2Yx zFgY3ZH;)g0{Z(g`YoE)DH!dta+PLuU%?tnJ{<}AqfAq)gcUrB}5g$OX8_i!0(;|UQ zOEu35h8z(x9?^RdzKp5d_QVJRf7)Yct*x}*d;Q}7HaHxd9<_P(DjzX4XhRBWk=>o^ zEXGX~jpAa5p*#phq4-N&#KslDHhsz&XaS^ZH4;>EO2xidid}>(Da3OMNY5szh@mMl zpr_Hc2uU`Gpp!EE0Gpd%>2fPUl7rmdq9Q^Ic^r>r4)MdBQL|qZp5Ry&=wiK}Rq+w%7 zonru00yTo5ljlXwBl-D$3H4H%!HkfBEVyD7-h{0Ikyg`;+A1nNkdl}S#L$6Mynr8Qgw!-q3yg8<21=zQ7+iDDhafY`6jj3jUFr;=5kq#N z8op$sRvP&tE~$|J#(*K%a4hZx)JQ?ejAfB%_Hfg`ZuTbfmlvmG+b|d}$VE21YPe8Z zC~#2)3rJBSZRt>zFga@CJOwy`%o8(G+JFb^8(eF4v-$v68dF4wlqD$Xkdda8BUs3l z>?JC>LN(eo8U|4*qcZ@3N+A-7QG1JLTzDOV7e!a&StFQJf5M36A5Jxd8z8&> zIObIv4gw72F!17z;|(W`&KZ%4z@n6vTQMb=Zi=I!ZzM-hNGS$#S)3UK;`o(0#wxsX zA}zJnfE3qfn7BH(Z~bfGQ3m=qmsa zh-h%q3k6-1n2;1Vy>aEuxj)2hjItThNXvxJs9_q+B7|D$EQdE3J}*Eh*CH)p78z9! z2++aS96;c^%>6QZ#Fc!$0^_Lwd<`2-fw)Fw!la~iRBSy;DOr{xk>1gIWfSR~qII;y zh>gF^(56kB)0$s*knD%w%FvoJ&6_|%L54ph5CfSZ83GWpYN`cE6|zET0nVaABnHbP zpyZ01+*pJHGNwGHv@thXUTE_OV~>ktRkx*3oht!@-6q3hS(F&+M!BmxMlu%7WG1vF zs$?d`(qHN!tzybKeyo2T){ll-*mFNHs#*9Uw_crdgZlx=wUmw$X?TPm)@tps5?*eRVEeyZ*-6@OXRY^XZ%)0jOAQyyBax=4o|(2#~O{@o6RFFt&^|NQeCkA8IbJ8xaR zasByMA8x<+Vw{)F1XYu0&oU#-qJUhrnw5ffDEC}&p1L7)NkS6~Zk>>WiIkxs=9wEg z`ns^qNc)up#67W!0%Aufq+H#Xel%;{>EgA8oA)ohb$RjLQE&45y$`l}zwJ*p8AD9@ zfa&z8(^}X)y|L1{wX%P8ZS~Ijg`0OSyuIJwJUn}GHaeKhaW@1MsSBMcS2eD%WITyJl3$_s=ssNGh)l7>=>VG=7C&+>7RE7?** zljejo)k;pNlq(w=mNZ5XFb0^}0RjM4K&ijU0Y-VP7Yz$j{FjGpggA=@qnA{yE|9iF z$<421A(BB8+-WaOT8juvO&<-oA^g}kOHtQgNL=V9xqRDmIR)cfd}zyC>TEEj;TkWl zb#L8Vc>B^k-L%^0UM7=i|kkieK7wMj+I?f1+5WKOyy~?ih1D*7Tqny86Ij^MhH`~zHQ`&T5MtL zgHY5pzmTnal*WHy5?Nd$=+ZK9+;#(Wv0qYxVT`G=-OC4+j3pB(zD7x^&~ z(UP~|u+XfPD3-e>)~JMlED0ipxHW&%s3`C9IF!^M0hC??l!$n@i!*|FZL;y%Bp|T~&3>fJbN2Wo_9x-&fvl^x~kz(?)C(cLa0pxkGFk{H*ztl{nGhs!2i#4z z$c+(|T(f6>o?D50(5!B@6pum#!zEneRtB*NNLW}kl-TJmBlOG$ZRKUIDPrWHIEj>o zv|=bMsR)|O`h^oQYyhw(qzweJ9nJfM8|Nl;QNXOpdPEhZVz$k_57xpJra=pTRkokwp+fPNE+sF3{OdVQUe-!So1wY?NmB)WGfUbm53yK z)Y-jF7CCh;wG@!3Oin8&03d?Jzlw8kAS{ZeqEY3&3%ux_XOelf3TCklh^!(Y0(Wcg zkNZ2k2Sv{rIb~3z$Z1*(Oo6g0kes}Bt_C@fkwWcexor<|qQ8ZSE3L>2^Ox=}Uw=R} zp1k~Wc(Ma~$8I_Wx(-iC@MkcN$Mf&Jv+ytfcsQLK{I9=k?d^LZx8Jvx8a((M4YTa8 zscdmNH|~tO3#b40&!*d(+%4;J3ZrSru?n`h*jk)#9iJwE$kRxwL6S%BE?sHuZcTSz zWu9p?CH7QA!B8JX`bQXtO@bO$Q*>HO8yjyBfIK=lZReYQNTwQW0z${@UYRc#NH~M) zndr8d*{L<$8@ZV=nuG_Hy}Q(zTN)30)Mcq*V;k%R+B9Wh(e147JWw8(FyDp+jHS9I z-n|mr7 zNsy%D#RNhy){4<0n?Tx6AxUa6t5PEh@{nsRN@KnpqbI}BNx!>&I$b{+ez|{gcjLl6riH63mk$Te`5eTkbIMbN*dJSII!!H0MO0j6 zCFYDxj|hgaG~gOq1xx*?6$u6C`jS%K6yV1Rky?$>tq96P7?c31+@dkEC2N+1Kj%ch z11=Xb2pf44swcg@zy50L=PKN|n%8{LJpWo1OIq=<5yZ5l24ln6x{*6ah<$WU&y z#c9xpn}r2>M3$6*1`BYEK_o+4V}ww{2ubTy4niV3kSYqfZ|NCYvL-*~Q<`Ea5C2oZ z-YttENmrwhh?aU`=V;nyIILqKh#-$9j(Ao9q^h(WEOp>5ri~cGpW*3fcs!-nThYQ$ z6jJslMMv9*28S7p?SJyvXWT<9j@s+(8&?+}U0!&NFM=M7p1nN%>OhFEfuF3pXY1|M6;^837U@ALS zn_*}W_-Kw|TRcDmq7lTz?7WHts{%TRpul1dD&*r7E>WLuwxH{{w z0lV-3BT<7c>G7Yjf|UhqnVKmKMMP=RB+i2diAq5;Lyl;s{Zi7Ih*{(=(gmRkje%+ zJaV3FcVQqf)U#$U6R?Qnpov1FNHnIfa*^MlBV6bd@yJ9n{4uq0)2JK(PJKPU<0`5= zW9oDVnBA_PtA`nHWl>N(nq!_1K zqDU${gB?&E9@TXvXG$u=6Fzdokf1UOYK9tmgj_~NzI2VG8pVciwr7A|6NsE42@ZFK zzNUhZa%<1~N^~kZVmkGd2Z{jIs^#-bIwDBceoMh2?EJRKWG?#oCB$RfT1$} z&dUoBx|S5|lkyB?giR#KOB=&BELFYK!HLdqVaixjZxmk$V;AiUifS5BCd`47zLv7> zPgFnO*L z8E(?Z>3FVv*lJx7*Gvdjc^%wO{a76jCu%*;k`ZvOq1UbY@9azi1DoAEsOt!ytKSaRJz{<3GfL98Zj$yqNkpN@G*0R?B7kA2V}( zUW+%js7TP*3Z{*46;eS<`&XaL{4Lkm0Yk(2)hi3v9?Y#==^yS6_BW?|xuLwQ+@WG6 zAp9KE@m|pO#?{6D?$1Vlau08|f3q|FzcyRkS&D5tWMulwMc+Ja?J5Mwdd0=W31F6g#LP=V4 zwMMMY)Vh1=(u0M?3$M05=GtrCo@jlEc;c#-w_a#w)~YlSNhJad+wkQDKM5iun96}P zQuFGOv(DlLBA&$>BZorboCIJX@^I{k*`T>NLV=j((Tot$-W81bfJ6WlRd}B&1Wj{s z5z)Ki!Ss?~$ib4D6)y6US)pqNqoeMX;AT9$9Ge(|-c8L=e8|o1^4HcjWqMx`A)~q; zq^C`S3nrU{1t|G6c>DpRG6%)i-JJ3?+}zyR{ILJ(37=DVe(T(80S)Kq}QZHJXz6A9^}d*Tm{gS*eW7f@J%8Lol}cR#0_ZNAsGcdV2Kn-r(!ubZ62!oN(i@kyawdMxD{wcyBa4U|QH~ zZTEJcT|9ksY4zTf)z?25uzxokOLSaiT!mr^}rkoYY4D!t;C!2CMP1Y z^H@O^cJhK%N<&=*LZuSnVNMi-UxkH!HM0@9N=rZhB4JRX1tAY`ahV}VMhX^$QvAhv zX;*u7BTF|484Dy{vJ*80CZryaC@7Le!7q$TCMSpzMV+u0IARCKT@4A69VRpZMUcJy zcj8X|Gv5`j2&_I)&t0hy=^6>nZ3tL4j}otQK$GOCQs&2H@aLo=wF2I<+5!;RoLf+~ z;#dua+G-P4%s5UEGK5Ib zQ*iEC=~wX+UrF7rIraoYnll^B!1ZSEOGU@*6bZ;b%})G;9m0-FE-nny&3iWpFdAUO zTS@2=&=f%W5*}ot^)!+3wY@j2m=rM}z?LK=z+0SoTbXYJ^GXpg+ztY9s5^VBDus8Y z!_^_ajmtnG0;_g3VQAn(fXq%^*F-A7xJ|{Er#q9>hL^6~JK+Szf7S=Ei8Taz=)hG7e*sL=eR7aZ+5f?8SBe^1A#BgCs`ua0t z<h+H}%i+6$Twg&rCo^V-N(^25Dqukr;fOal}JZuj1EHT(c1SWuK zG~h*~W1VoejD%dWmxzc2gZ8W+vOon#@;huzj;UEnh&8c-Qx|8)DrfEH{RAh^HA(3f zyQGiLB+x|@iU5v>qPfgiO0aG!u*DePil!h)WIn?eBd60{Ub}GP!QA?d-pTRN(~o_q z591m+V4}W`P$644t>=N&nTHPtZ{8m4jyi)$`=r+%a$}?~(@XQ~>XMDJcN>rxckeyy zeCPGy^XJpeFPKbL_{Cqo>afMbguSCS_nJap#ZqF-kJ}e6wJuy~z5Ke(&8S2+)D%T; z7(D8RS>3C>nVMOzOy<|uxsr3|EqQ59-mL#|^%emK-Wh97OeQ#%gg{a7m7=_JB2|DZ zdj?H3_7j z|MJ}qQC$lw>mC)rg z`>K@^+C~6bz+#9J8I@HJ8}@v|ZE`rd^njf z6-+-Ox&{iN#F#gNP+R)L@$qnO@2t0X)PJ^q^4iAwy&EfUtPHR2ojvb!8NbV1%SftV zD{)F!Bu-lrlI-*=|K6*gwKOK~@}#~+Y>OBp@FXfODZf}K>`@Q#5KMao=q1Kqe4rX|58j!Lb7Q{3vwc$%E-|TD04iO zlxOUc3brXpYJz}BRs_WXA`O8hZ4L{v+C6*Q{q7gL~O%0Jse&VI zAsTAtrq@UinGGP(C~Z>wlI3xhutbj+fVIsM{`sZKBU0mEsUS>@Vy;Bg2=od7LI8B* zKnfB8$}rOffK$qkm=CtjmzXe>Q#IK$xCf?T0*OGH*N7({y;hKMDJJ8bE!ng7NHMaB z7>#^hpYeqkcmRr`=`~}Mcr=X;-8xejI+M(xpvg!*t35SbQyp3-ZO24KdL(PqZiSLC4XMWR%0ew=RoVNde)m zBWDz~;7v!wQhm8nS=_*4CV-)NPSKHsmxHi`x;l(?te~{ePN(CGaIhc6O&oIHX=A+% z!5XXUFvZqx_#YJI!9G?AB+#nDV~_aOu#lx{%9MkfkLxfDV%%ZAX+RuZ`HUZ%*%>#3 zB3b^O=|F$p^_bofSge_tYhqvdr%{%Ml zOTms9qC-=bB>1PT-XFJ@+AUsai99N+Y2A@xZRK=&usK;+H8db&pDRT6F@{OOo1CO` z0ugL)gupqa@q7R*QYd~^M0t}&Z4`?Pez>O9elczPo|IP0PwOEdS?J@`Il#hTdLw3M8&`Ige(MXCZyw)G>o}4JsMB`-3P5@-jCXwe*Czmms-IJA0#gK zGaTh%nEMar|BIjWKmKa+{F&FRVz7X4onmFmT>R{GdU`^Yl)k2pO+Tt}iy1CWym9C0vyYCBzNXYh%y1--bX|!7iKIiW zG*lk5%|adp2`kVV3BuOcZ;F6}9{-V=BuAZOPQc(vYtfl3U75f2;Nm;iSMMC3o&4_A z2b;Z5Pk3?vcy}^BPGCf+(#)jv8gZ=TXo}5-{n5dw!<&>(`@Nl$v(1gQhZooGEU&$F z(BIh~Y@LmcoK|Zy1qym}(b`Z{AInTzNKVCj(&EibYqXKcTCF|nq&pg&5hXEV!Lk=b zAXqgKqR{a!xv;b)VevPWGQi$t%P-jwytfomltHKbc&>i+Ab|fsy$w_ zZ1$hnu{kP5II5YP+50$4`}BDF$AA*G0V-k@m13;qv_|;iOj>|qDj$6lxL`ZGrcU}* z3Ev{q<)-oJh?@v(Kqx4{;sJ?dh8r7{O3KTggc0)c>?8O#P+f=J7bOEFg zBV!o276Zy+_VSa~PMkufp_xDds=#4dEcJnAj93n#Bp&w{Xrz#HYPu2$95W>s*~Cz| zNSw^b*`z8TnBu5pwFM>Wm+qlsQBEalA{?9C!YpP{K#~B3NMJ zEHe{~5=k~z5m1;^2$48xtd#Z804L`hFa(>OXmYeW51sQiqZn7LkeRI!6L^RbsMG;j zN`Zvo54B{tOTF?GcUz;~lsqtvH^~BmhQ%^VBZQE~QgII^G_3pV;YohFo(2GYBY$Wp zNQh=n?`Df(hC(VpMH3Wk$2g}@4pgTKuT;PQX=BE*!8@0$p`+LhW~i_WopauDj6xP@ zWY6UnNzjzD0*w_5I#rirxcWUE23D|Uow~mvhYvZ<>U-S#}qS_Vt`G7 z_OeJ=x>yFx+)(74%}JZ>gs&K}`DW_k1V;9ZS~3t;xJbftgGv<#s&D2+=)&xcTmSOj zLdOqk$IO){xH9zu-6dfsA<NRWNDd_!7FzKN@Cj;f*}?cxN#fQwPU0+V%=lgkQcuSc z%GgiDAPYd|QqxGapB47Z4vOS>4SVxECBx$>7iQxu+Hff~>e zU213+HjEI^J%dg{Mi&{?>G^6dobKUlpLON+$=`~bEJ`cY@;n?C$pGN zM;V7u<_>2s>?)WdK@AonY8QElq{^m&Hy8T=IyoJ8w#V)3bKDt)IN}S!Kq-8ut=^02 z-b!oZuC`T{7@ngd$5!To*N9}=EvIBQX;}pj*TJ{p5?6Yu_1 zTx<^))K_fuK%U8P_sh}AtAvJmsplM}ud;#CaBdLMHB9~?V*o~1;Y?*d6HuX+`PSN< zm1{Slc=GDS$&0V~KAzESSSp3qBT8_+eTJNPvt|4GWv4tn9~5lAc+vWIFa6*ll!+7W zDYqJG_iQSJ6myRr&i})o47c~kpMTaK^>l~LdVqKd&H9zr;Iwse2y{YJlxX8(*xc1S zKD@X4)SGCox7PzX7(5-?%`++ z!zQx`*L+m7(PWT|bxfRqU@X44JRQ$X2FE@_7{sUuN20@s*WhQ|)R#|0D50J({+ZO_ z2uJX2RDVBLKI&)ULB-+gcFQX?9kei$0dHSCW1WT@KX^kAOcB`j2YIl2a~d3IEO2olu4f{B0DNfz)V*xC1wz`iW@i^3!TbCS>5%yjn~%Sd~Nmh z>3IH&?Z;1!eseN;G8}DjVG#dGGuTlGF(QfFl*uzC(GIzThCZ;@C@nCZTui~4c3}e= z*Lem;87lY|Hq_0QnB^Qf!|$Ask$53&Ai=wc2p7JQu)w{Jiw;iaI{j&D`*?c<hDF ze3viSj3r5PkYI=_Pq;^ZNXt%@sFcM{TyJ{WKWu&R#q{8~!!l%INO4soF=Wkah)M&R zVUV`RP7F5W7YeW>B8`D~9*ThwO1%*)k`N|pEt}9Jks?(w!!ub0!*hk_n5-}&m2-+n z&C0AOx*tm}@bEC*R^Hxs;!W&UFW@3_@h$@LC@K^>9En)U-*B*yD&JaaUA{j5=IzDr zue7fmPo6#Q{ng9UU!07e+fuqjTdIIGlSc)^FnW~4;Z~+Bj|IqF<(ny@J!aBzq}yR1 zaf(R@2cW=W1kO=Cm@zAvDP@NMGi9V!K#^1;4UKRwz80ZW@iYozqnJ)y*(o<{NY#j; zh(xBKHF`yyfR_ZRNs$vm=TcQ|Ne&d0&;JMzT;y+LXc*YiSZsDeqlD*_8W^%g+@^q{ zpbM?cp-);-LL|L-C2KEu5sw&TVuMISfF})+YJL@fO>;CA(R!2<=u=h#fL(A!rm?Ii z%2WFQgji_iRCg335)3=-FLbK}`1j1s@@(fmI;T+ijW1{F zTZ+Hgo5BJREIU{bB4mriY0PLoT$l{b`;eX>lrcH1Aw6RO8bu~fdq60k}LLYJ=;3QGpVAP1#JgOF@A({@w=MszICQZy`i zy+SU4GG(PqMH#wgHVYzCMY=bhY@{m+Q-=*W_}pUj<&e4F_M!vEEKI&6*_1vOF)f#rN=7J@$;qh}jL6tM!gqIbb8}nx{r*SIBYM=$ zRj=NA_H*v0dQ}zZh-(oEq%j;YS7y=JV{$s`F0jOiv8D5N5eXX3Q8`Mn%9ghjI4p3` zi4mM=im%^dun6PK#CbKUamy5cBb(ag77YVX-^55r#ttrlc8sViQq_qef?wr0RZ88h zp~~!x?7>4E<x4z-_V25E9Dtdp3g|d`u zI4@w3L57ZP&`IYrcxC9}%G32Zd}{h@oZw{{5w&{0F1Q zo8!-Z+dbUVN07H^<4$A0%WUxUWOm4cE7gZgJVw%J>0Y_jtX-KrebiymI~Ztfaa2Sh zoeY+veY2q(>mo(3S-EoI{^@wMbMT1OR(4uO8)88N$Wo1#iD|P|0?~R%Jm(Uap90}3 zm0GZHg0EJrbQTtSOKZ(|!RIQeKGt70ZYN>{?6$0UV$eLrIoQLRWthM-eFl|~N@v3^ z82V2}T&JiyqVwxw5OYr2RSiDhpo*p-`f`!9y0#9{JuOKBfD9;k`632_IymVpxXX%O zHWLaa9Ng6uv7|@XAR<_5q#4N+M9U}=EdWr!qXoG5MM!@_0!U_y&iIvSEzidD?X`aQ znD5R#d9btp>dB3FzxVFVA6~kA|Jn1ufBou<>0}SuZirytrDRglwM9#oZk$@jQqPhl zFCeXda`wNJkXjm8k={sW)}*u6y>$EhyLT>r(3`El+pKq)M9 z&{as)JXN|J+e6}3R+L~t-a0#&_D)W_!_$+&;PuX><9pXH-GBGO2NxEvy*PMsc=C$r zG1XWaElv7!$ZF>_8f~`DBg6KOl{&1WATmk&hd^<$C%KR;b}MIu4e@}B^41pFv7#3N z=m59~L$}T|Dho@!rKRrDQiuKG0uPPQMDhWR&HdS>wPuYE>Cu+^umV3g6-mQ}YQ{o( zLI5LGt~vo>SSSGU!IK{2^=|X{o7v9JZ24Swe}BN6acqTXi|9a7bs${s6+H^Y)PRs} z7(_u7E^Be7U-``uBLJ9Yg|%r-B`W_Vk$44Q6OoegZkt_5#$l*PUfi~-%=1G}dFdKh zBgzX!d57o`i^Cn}1QEt1MtILzg_QM1#s)VO^e3A;l;!T=Dyu_pFaL;_$M8zqXM>+T z9sJGS_z%;D2cCf<-Y}5RNSyjnxY0BUQKrnor1vb)Hdn-I9V0@e3qmZRphQn5k@AR# za3eg^XoP;M8KMwLk_@#u`!*xM=0)L>S2ztmcY_fXWPB`hwF4ykSgi^vA#2V`lgU*T zi@P*xi$(1_%C0G97pm?hQzsE51pOr!0-h zX%Hw*rn^dl70O5+OJe5|K*dPQE0h@;wIqT|x_;K77$Hz%#O6vX-$IT9Vw)01ZPUrh zv;>S4@M!&__vI*!$WJQ#nK+eWXvTe>*g6ACz-Znzu5*l<;E@)~+iUc-4&$w$1^}(J zpReG&x5%fT8K36zFd{pNWVFg)OfS+pMjtLld)2uGlfHuYnF#>n4Y!QcZE$3v1+Zs3 zSD`2Z8!pvKV`Kb=pkB3AcBnb;=dr@v5>#Ven3o}`lO=6b)DX!vC$RBVkeaS_Uf7|y z=8FXom11uTA(R~h%TqKcRehI zA49*a6L9<6>Uc`ZA}X%n(#fW#`{8QM6K19SH^ppYdC!uhrla5snhAe0~=W zl?mDfACUqYnrxa{)wn2NHdgX-W`?ZNw=~=ljYr^IV@%3C_H&DSWW=ctneU-Kp~3Y6 zObAHb4FW{hSmb(2Dgca(t{OB`b+8ZIbE@~ zfHMm@4I6@<^HF#2+u6ymId`?`bETZPwn4KdAQ$3mLQv$VehMiW%}_C8ZX6Pe1X|dD z8UbmFE%V+|k0%=+Pn$=+&QK!tht{yv0yuYY`uf|+>#v(B50J$3R)6FJK=BUh4aIQ6 z*8-=!Q=a*pLbkdNc;bq4~9Bcs!AkIILeB`GqoM(o$9KlOPSE)XC zfz-mwIk+_AARTjpX}az_uEIm+1Yu-J!Lg>o?ytfo2tQt-rc}X zHgX#Hl8zkVE!RS-NJlaw$Sm=+0;dePXN%WY@4SEMhv)hiUmtEi+W!5{=+S9slbg;{ z7IylYGD!oi^l`;osu|Q#8kzv88-@_l>V*Ud$=6D_!^@(J(MfN3e7L_qe6g|i-t~*` zoxk#f&B4qe2V@IAC1ZO<)#;{=Uvq&;DvPOg^u@x=mrCh>G`teD$Y6jm#1+IiXmI2wc0;tfDb;y9*}ASoTaq3tFU- zL&}JQz-Gtr1rfc?(hB8^fNG~~6r}x;j@CgdgS5&cV~im6s2U_-JOQT!Nn@2fd1y2> zjfj!OT>>g514m&LwKYNrDP*$Tg-&>#?Fy(Uv~-}Ppfc12fta&MZjhBjY1*x&6GNZT zQ5PW6Fak$@TSPv>*nLG(sc07^V#8?R{wB~?-Z1xRa&wI#q`q?#YJ1{exlZF~~u z7IrZW(PUJRdTt6dHetz#emPP`iEfvdS?=0Fts410mves(80!ZZ-#dzD_)Ch5d|V-> z<>Rt2V;5%&hCVB5u#Q4<;K=~4k<;SIl2S$$@UfGWk%A#~)f7M?A%0WEx#oYg~_kcCICbS2Yx0-j>VD)`c1!Za|Z_~r3&76EH8iiH}WkiC=;2Z-WgpnrY z7I~VXYt%#t7mkLVBNuU#qYk{k`;<%REW`ppXRB<>+B5!|jJ}kq zoz&ogxFx?}AYxb^X`AG2l}~66XUXw6u_j*puWB8CJAgSrRU1rj|_x{pPelmLS&FOD` z*~P4Yrn!*e;%aB@65O2)(ySYxcs2oUG0kSbfBmlSs^8(e7hFW-Lx^FAD{wp2=Q4M4 zyF8zyfJ%wLF~h90zIf8@)3}I= zo)`>^!Pz;G-t)cG)<%>BvT!1Ulbjn+~Z`)6Q@>cy+k_ zycsqd8+WhWet&6c_2lH_bTmSLbq|gXYDLRIvqIiN^ajcwC)y=D60Iy211!FwWDVu< zh>HtXKic@C4=#TH&|dE9M5=>5^wY5(wJ*E3@$cB#{W#A zxviSp#p+x9w5hhwrYV$F&5M2OYgIL;J)A*k4?@FGbWp-$E!-Yl;4;c$e{qq0CWP)8 zwJfbJ+<)&9;vAneN5kfTnIVtO61H%&Ugjrf?VVF+fHt@(C4RZhzrWkOc-B1rcJ}h+ zY{c`nTvA(Xe({Un|LxCyMQ5Nmnm70gYYN%tTa~t&w2+p`JFo@L2@Xyqh-*npRX8>a z$rmSh?$v?6R3E_&_<12mbqZL>1+^`%@S;O;ZS5kCns`-<2Xw9JlJrlC!S{$ei+8a| zxiJbD?@uQ(nL+m^%}R6O=HjRCt^LW>{@vmD^~0n8^Xr5EWAF5fDKC$)eFp;^BSB1# z>|5HE3V<+_rkF&4EKp_kX#MXMnJWMrFtAb90GmS2;*?@4TP!JtIsq0#6>c&!*zi0* z{1UPfv?_+0Nm;(}blDp_y=|&OJYyyG(9GU55*0HLY!i|uQxFmkA;O76B|Mr_V5CB$ zwRvITM*sjo07*naR0-)frIkv~KTMkSHrYBaPVxyak7SWX7(&Yvt8UvKk_edkTIjw- zZA~M9nE?~LPK7qlfm2FT9wNfLfier51em>8XB4V!mthf0swfxtDhP^1>NEgv5Q@G` zgIxE?~<7g7zLE!)V^sMGRuhfCMqmY*c1`BUOuFr4*KM z?vf7K619!-{Ptkv3>v)?+0Lmb$9HlmM~S0NTiG14F`Cd&kwe0q#bk? zK2OPhi%QC>${dtkaRVlR2G_cB z@Y=%3tasG(Hk;m)rg=K+?y}-6+Jg!pEKX+K;iS*g!uzjAFTR)@y!0-Uo5Zn~cXSM# z7^>_Psf_9Zv*zY93i9?By31?53mg4wHy5tm?r}Sg8O+w}(aR^3y=}Z4N2p0;4-+p) zIhG8n>u3{tEhLq>~xjQ+H@a~rH0&wttY z(gmY2@Dsl3eJwM6AGDV!CS=*6$t;wvUFdT#^eT(%6umqKz3M zTHLTEVMDF(!YYb_GyP_74b=f19&he4#9vjPTz|AevEf|IN-m89x=`jT-Qa<|;yUhL5-E-Z4Dy5W|cR}y_n zc583gUs<|-Z3St#WX;9f!EtB6Yo3l-8{UjYEZJ^GW1c;ypW#aqp7Nq48UwyIzqdQv zdNq0ZV*30k?-Xs0j|~R8cP@B-`G?1U`IrCi;OK}TErHLBhDvBxKaVPzfFVm=2z|B~ z#GF8*Nokz?0Du=qu(L>en3(6b;AUbJC*kt4Ypy^7Ftab=)7d4~i$rK~O@~Xj%ObPD zdooPqAe9bLK(=C=s^eMEDl>J0EV;6W2DNl)x^|`a!JXAVzP0q}LbLF4_}PQ~zj!hH z*|@VCA?eFnG79CU{*{@6wx*d+c`Ot#U}WwgzqYifl~@1-qJaX~d z8A2RvMJkhHWrivUNYv&5K`MHa5Nf`eCf}kK+eEoT?3`7CuAztoxLO-ZS_&KrT#Wpe zEl3Bk;3+cD$c(v)Z($S@_eGQa8S$!rWJECF*&r_;z;l@I&hQQ3R+Pdjz9IxI30aVD zsJHnoRJfb>RwMyKsp65U0f@M7iIG!*>_!7tLW(A29fN>OYVbyQPU2R%6wNBjX%Q<< z^HRA$P^idLi1N+9)DXiUAQZezT$VRtLLWLPUge^&MLw%_X&o)do7*7KMq3>VfGPK& zglA}^Nr+zAK|i)Va~6=rOEF00q_RA-B6G%%#=)jj-iT55gjWa!vV<*LA#i}_DyTDQ z8(l_}On!PSmQyR{2#8I-Yvnz%GJu|%Yq;LHi>&I)$_=~e>ZhXudb;|;K{?|9t{L+F z0s8umdM3-fvP71Zf0FQCW0=-a*m!!0WF)-A#n^ITayKfx{i5%Oh}5oPMO<@ z&c*sYZgJXXI<;{01|N1viEDjk4CC>SGR2yKl!MB0#{@B(V>NAo8uVm{{W+6Gq3~y5#+@i1Z-bgfBA?Ya zh{d=Ft0*--;S29vvnJssc$h#j(-;YAS)iN&Vjy(DoZO8x)R=S`*+_z1-kosv)sDH9 zA#*|}*j)K#HqPjo+XYb30#I|vWpw}&Q2J&-oV%)I;m#&>)f&}+u*2{cZdhSfa)Av) z2E=$R?t?Dt)4aE1BmvA3iZD}P$58+(04%IS&eEbFFvN!BxYj_XV+AoCpE!qsAJS$l`%{ zpjD5vYHR48i4{ib*bqRu8WKhUx2~WG9nhq$L&znV2~?PBYN{izjbS#p*evnfSFc%J zmJOSVX9FLL@qO~A!`V)+b7i5q((|+RdaD3@V;pw~wI42JxgtVAn}v?t?^(=RR0Pzv z2(Dp?TqMxa2!=Y8k%NCIB{sQO4z-h6!-pk!c#3suEMsJc4rOYJN~Xh6c}j_@znnU>Xk^-_Q3T(jhY-sv$*PhU-; zJUnq4gLAAHf2n;4LoIiLr|H#0zd#&p+W%ZwK^ks% zClqv?OJuDF+*XQC)>G=0!9uPViD)Rmw+XW`q4ueg+!dH=;)m~@W82!0r!}gQXhXFx z_;O9sMwt{6D&)jULJC?(KoX8-VhuLz6X(K%h1jQ)QE#x=9h~kDj(+!S_thtN-~Ztc zKlw*n`*$8b`t0S-+`=`%FofoI95uH%+Y-7bkPT52Q{lXuDiZJp6ZUzZ` z1p$q24jz;mRFGvn9v_dp+oS2L!SUwy@q_E@-@mo-olCcV`t0z=v)$hhPM*!W`HFz| zjHDy&&}$hMTP-jzQ9%V(@W5LZsbx>p8Hm|(E~xFat+b6MxC8@DB|&aG$=y?*n|5e2 z9d{?Qy}j|j`pd5eC*vP|cz~8_PeqvhW_HcTXNZIsAV% zhrc>)_WaV5pEa`k5Ho%*R171}mH~_+fiTIp;u1v)m6Bja9ZaSyK zEu2CTQdLVnxhiBJS~*(51Jg=r8mYup0n?y(j43Rzxi-h5fG0Umm4x#%5ko7iA~G4~ zdYPaEFDgkZu*5@`91}o>LU~CGaGJcceG9;OO@z<|M2QGm@Wk?&22w4WLcm0t{7O+! zimeHiw@(y|7NhlP=u-Qvq#<8aQe#4{B_W;GdJYxB$F>O?5TXCOx~wrc}tnvV0Y{YUU97_ zRwB@;5*gW_%?7Jp1rbmhNMHFlW5GQ`UC4V=K!vPbT8rnnXi{+=)F!+_#vTO}2FA2p zz7i&|3hn4FMp3a=6&kjf$o_+k$(W-W9gHi48doHCPHJJxL_o#6ow4&b zJDPN=0-?UNyp73d10V;RQ1qz^M+o3~`-m|$*CQ*R_pBmtXhU8mk|xzY4y3vo3?yd7 zw5Hx}QhldPj=?a1TpU8#r7?a=D4GfobkXI_g$%C9}&*dnk$nP8KTq6!)$Om9B?a1W#G!UI&4fxRs@z7Xc<+Z!xDu1*E;|0f8M!!srjG&X7<1S zyzx0bmVjcycu2vGH1AVt*SI0E?r87cN4~Ujaw*A`msC$Ek`w_g~1-$eK zhT)`l{^D)s!}~iAy!YxoS+k*T_4a6QgvX@Gsm_zN^-C8LQOuv6K1C#?^KrY>30l{s zEX(A9F}z?4iTTwCnnV|iAYcL>p>8dMEcE&0pdYn2Xpn=Nm%!Fk!XP*PJDmn||gEOaC`G|MFl7FM(aQ1%H!HDWWDOACClkk?O- za#5-50M|q_Vnahx@Q!=1j4}bHU6N*(=9*KjK#BR$IwqAQ3Gy+GuGa`i&jkryIKww9 zXTuk-kB$yszw_>ouiw6N{^LJ=y7|qs7hmliygVJV2H0D#;#)P&Mr@MdU-^?#I;CPE zulcxkrN4UV{Ehn?yr1Lt{?_4_Pe0o}{`$D{`n1^|k9V1r0*^_RwB155=g>&K4Lccl zo`RLlYWnUIR$4fIt5RFed)V6U##>;>TBfT~j zTbL7QeI7y};e$N5`MNIQpBx?6J)#H66QT zQ(+iEmyDLU3CL35mdq+C-j&vVwG{#V6M@vZEeLXu^dDzu=4v6qX|1B+G?p1HI*9h8 zRG60- zv9`Tr7%2wwL9sfhs-#sE9j)ToiUQ=Nqhz7T0c`%}n~gjm&@7b$Z$=P|LpTRlwqTJi zm{fUbX+z6sl4^WK8Wb@Lr33&skP?wbypR(p&uLb|BJvcX=!B`V1QR-yoF9Y~p>fSw z#`MZ8y4pjNEA2IRvTBiq<0$mjAn^9n0FoA%Jrwkc`~s){*qA(`q9caUh+7OHu5+!M z3{o6iVhhIa-oM}yAa{Fc=f#vMgT8Ri@In#HWqJS(Gedsf#+0aa8k*?n=*nfNakbb^ zyXi$Fr-k@RbBGfzIM5M4gDWR6-l|f3rajyhR15gCWi})SAelb^WUGPz39ra19Wed( z56#FnJV+pqpZ`KgIno_SAU0&EhWU&Hi9}~kTmXh0!WHoqAXbK77FfoDP63(1;tUdw z%$&_J7!6a0I4GTN8a7#OJSKk!&zLYPiR3nRYnN!XGED&s#caRT7DHcdr!HuR!S znxHN zGXNlgINU94#6MUDnw;f4y*_SzDd$4?CNCGu|I#YXCey zVg@`X)_O8D{#Vt!wXbTkrMG)6MN~ zcaEM6M|-|zli0L-Q4=LD;AB)n8a$T06hGaq-;sjrAML3me0o$=^Txa&zww z$2=?8*%_Vg`K@_qDZeBlsRa0UGs`HpP^CTR=swUGfn$Ze&>Eo%%x#@3M1;f?rmUQ@ z!{PnOY5(=k>Cxfymm3G~-@Ea{AKm$r*B9@9wfW2K!J~19d*BKNk|=YjB2MK~gwIXYP754vuzU_jl=;hE9e^UU@S2d}pGzIw3v`InD3U%qA@ zrB#(wrfhbdG+B;|G@u=XI@2=&1Z4K=Rtd1g6_1*rhHbyeIS>*F=$YCAhMQ#NZ4E+L zd6_Q>j$tjo%1&7oD3)um7goTX@C5UOwmz5O6f!W7C>osc7g4lLgn@FX&v^*I8qw8D zy}Q>IKVI+M98U+22mkiP@vjai52xMZbjaSoj6ULOQ?`<=WmGYV*K%%=aP4W!k+K-k z0;Fl1JR}5G(Mri^P{Ia~o!mSG&X!#Gn65OEn`NbT0-K5~P~nv;+Pwx1e+$n5NQf|( z!DR3q)mS2O+nCE+x@7xTN}bUZHsvVa;z_B9v}n}y;@nDTb|7qgNECV5#bp{kAlj&e zQHF3yw1lUkh#0oTvd|)>JBK2oN3IgT=%#&05rxudTYQO2TZ6MjBhK?v(69?bsEeq8 zX2%+w%Pg4LhgNEkQr4M}QW98J;$R#~=^iStP6MX;<=N~dfs9-s1vEmsqsYFGq7V-e zxp7vC0A2RC-h?&%tV2yr6u^iPnSo8WJ~u-3CWvACz#-ZL?pBS1!hkAvs*EtoXLYv> zK6CGLW)a!pWf}jZ9rFa(;uc#4J#!auVf}XtnGzm6^h(=TWq=nv`6N8)bXM;D51i25 ztA;~dCR)ym>}Ua_a)zh_bu6#U45`hghqvOwByxdb11%@Qi#41ye@eiVkjV@yZd^3Q zjYn=tE-c$X@}En~wD*}Kxj2>elTg%LSccnc2*${%l%oe_w(3@FJ07fGCw#%Yd@A;JJltAUD84D2$*@!SpeSb#aLR!nFTIR*h6^9R34fEm$0 z@?uDODqbtu>aRdFY4$6y<&G#fUce$g*d(siB#?ouQgNMkj5Fc~ND71Xb$)II0IRKI zL7vdi3d)aQN}6@HgdY>6*rEpLPWzd%GP!aX?TrQ*sb7LYeV~I#SguN>7WwQgY}YvP z$}ZwShid`GnMNZcv0lCcz{$Le1`!wf%$HQKEDJ+mv8!lk?Rb}%Gxh|e5}El|5t4H)ng?T6SDN+n-AfmntCy#j&-XvLc>TwhH~;l$^n!lf&qb<& zS|Ggf!;DLVI8mH6i{0kpVsn+>LTA0<<52pxBmq2#7{fbH931&$I;ovq_a@C+!kCk( zL0rW^l!t0~cLs9@42~*t?sP_z?$K%I|($`NGfiEJv9k_b%;ZI=2_ z1^T_o`bFNs(;FU67ADhA-s$WgHNSh*8Rn57CDQu#2)YacoIB{^z*)QC8>hjXg~Cbq#+ zAumzkA*+lr$+L^((%SmouZ78IkbCBONNVDHnar-_%%sLc0@+Aq5eG%k6jV7C7Yqyl zPWZ!=3IYlRsW|NO{2LvUy4- zha@z(F@?53Wzz-LL@h%l1v24n8aeGgGbhwdQBP?}&v9XjhMZ}IMs@5o{={2ky_AXiV~7h%gnQcjU)b|AywIhg*De3a(|5q)?4Y$*3R{B z-M{+dJJ&y+_7|V*e*5tCulI*fXFXOCRHe`~Ato>6%89!$G%*+JEw<4>Jle$;z?CUD znmD05qbKr3GJMx(ak;m|1BARRm-gJonci7Qh7Ek7iibUk8iyGTGr^lTF5bC&<<8x! zS1zqDfzI*-K5I1cO0q3FH_HjZ@#KgHcDHw5zS@5J^!2N)-M#%|3T;&#W6%V7J=Dfu z!H9E+pZb)C9Y4HikQo`p+__?++5N*OJ+PL&d{Kgi zWo{e+G?+D|2mb1W){I(p-3b)OJAX(P$l=i2K=epOf z^*_Gcy~p5YXY_|>$G_M){XLJErlKib#4jpJR57R{qmm*jynV6EN|<(^!d5X4>e7Ow z@1CDnU|hUK(i07)UEQ*;Xh-rOYT_z{aog+!HcGcxEdbQOfr;ewPK#Mkby}dwiPEMb zLvVpfgsJd}d)p%O+~&Ge3p{5;euODpX@+0{6Z9b`cK*VP zGh4RS8fV<;Ak5`F1fh`Qd|zaNA;ybp#hGV8bnKZ0rMM>5@`2VG(?Y8_J-VBrcCE|rOu%=g4>PQ+r%3G|ll{r5_NpJ?j> zT>}Ln1+bCpq;fgPIAL^_DnXhs{xO>0CudrHzNN0>M)8Szy*XfrJ6jQRF4vkO`+ zA2ZXLLh(xu;($&zZTj5Q4q4PyDYE>D>$<$jQ&8LBRs|yr7SYGm5ek$yEJI3Zqb-p^ zAI_j0X^@&wXlHsrLn##x3O4aTD4BFLvA2ehiSZV;Mx_#o(T2L)R{1^#c``S1C6&@L zTmj71nZATejWo^SLsLyR#$5UoQ+OeaXtUaBdUPmn8rc*u7Q|>?*B8sljAn^okuO6` zd{ibw7;C6KXloeMM13cIx&IksRToPEi)qvrYxuncjilFD?weVjmk0C|X3Th0gPtD6>3`UISa z_)BcPUkNOnfEU&(tqWw9&Yc`cNk=jo14nxkSqj3-CYYfaFDYnWh<)g;X*^^&l&b+~7q8st0=}*nBBs zX{q6j=@%|^dD!g6)!Dln>)&7d{*RVF`-{o`&zXfXgL0HCDMVzk9-1=D9?rVnZqok< z@;iL&T@Cg5HuSD7<`D}*-JrD_?gKmI@RQ*?ipek9v7Uk;*?cG z%n7*+-#Z-5c8_N-cW0a1-L2i;aKQ3hj465b#eYT7^X~FeZ((I}z=Mq5TN&TGHNDy8 zoh~*b41xLf17l5U2NbA89e69g z;bRrb){a$hd|CqptLILUhIfoyys~in-IJ%!XM3B*nsE|qfarJ;?rFt|9g0;+^_F{U z*RFrGe{`_B|Jb*<4<1HoX!GIe*l<~+JCHIxJ>X=iu`DHCjdAsBjc z1WvBj-w+g0-)Ex~+R%(-n5hLSL@Z7RydVG*P9XD5mv-okQN8pQ2^mA@MWYg{8ml`} z1!xj61u8Jx&y3M4TpCKw3Z|w`1>+#q6bvdZWWX?CKwG5yket|45myI#iG(eNHJW7& zda0avAg^2tSnLV8sA#as8tUxZO;((SWr1Zshfz|dBTEb2bBoP+W`=9aS1z2pabf+| zxwVV^WgfGlf)j9DXyhqLswh`Wy9@m#9;UTFA#23jJ4ZZ|czC>faJ)GfY>%76)6UN6 zY z(3T2twvnquDIzmPww3(BPf48Y!IY;4oB{ee8NWHfdu5mt(!Kg-azJ1)Ja$4j=F)(b z7LtrlcyBt9v9i2yZgpvOb>-aZ@-inZU#Go19S?aO(D88pXt2M>t-*uQh)KIK=f7<6 z5nUE9AfPHSBWa8YahQoOZ_dZ}wpNk`0b8%EMn8b(V| zQYY%70b@k6Vy&VwH)1dYuc`EV2rB1_B|iJmIs-FNC=hKa7gTU43_|FrV7sNi7S7E)$si&WGX3DZ2#Z}z(a2WC zKXB3+S)@Qw$CI>j)dX1-%=iz=%+mu)cG)7~CV`@2zr$Iu!Xxe%4SO*Z zF`lK&%M9k)k_a0LWpD}Ugtn*9B~(ROOIApJpjU?l5lPu6isOV(ooP}fUorzv9+`0B zm+BC%Kx76eR(d`30tFaFEHCCv-fs3XUVkhLr~>&=&W(zBj}t~_LOZ>-yh;Wul~`=# z6-^I96sb^b3tE|l6h@?oCk$P|83i(}KLsNtB#79wyI~Yu0JH(cmgndh@N+_CB#I)A zfGio6u$27|cU;)#a0aHY3R!cNj`C+_a$`#oHRr42S##1a*pByKTqa zJPD4!oC%-?E$E0TN}p?f(BvCg%1kpxxUrT}L1=9g23{BUTB;K{MtI)c^4^!@3H5G$ zWc1J!s-*P|9qls}zD8_`7AU53HdwKT*S{T_$<9e5l#$=(*}#IinrbX>@j)N%vQ7ag zRjPJ`6Z!fEVa|fav6j|C=L9S%O)PPKjDCS65iCe>mkf$5mj%Uv5mG23W>Iw0ndF#^ zeENeVCU$1xO*R|psvT*qiyalCwjH=7i-M9&(~uZI5xBU4 zYB-@z1eT$80FyYR9`IhoV331pG@Otvx~*T^wuuG>wD2HfVcn6`xEhmF&Y;dwFwA17 z-u3BHZWx|lUb(ffusl2WQSb1ZX7*C0&PA#9*k#uK%{sHhZfAwztIbyK@hFU2jAVi+bVx+1#MRWD;k3saP5B*+I{PQh)=_8s zptFBCJ3Q)~o=~f`p*0CA6}J%d%xFO$?oFMHaXD3JwsOhZw7YLOV{Jz88A}m$1cfXK zKd;cCL*hb#V)?Qp)YNXqAbjD|+udsyP9JPHFAjT)%+iS(#5HGH=|I;52pLd!spN{_a*WRV1Jw!g`5rkE{$iu{ShTkKiWN{vHvAeX< z{lO=ly`9PLznUE#EnL2`eE-AYvnSJ?=L(vcof1@7f{8)hNwS1tzYUp{oHCDM-y z2Q`5;2JvqZ)QqAOSe74vq_Zgnkk z+2KPVE{&y$5CzJKK9g#s6xJ}C8ECp0DwIOZnMn_)Flx8m;7Rq|SB+AwwNwLMn!AKA z9T7hXB?2Oblr&7$J*Jr3L49NTfaU}kN(HxsJ5zpc;rO(7H0tgTPqufDpDu1bSXn&3 zyu|N9e_@$POO|ZF!%h^A^n;_*lhK&(Rvhu(&f(-}+C7+cd4cC>JUtrExb9$=1cNtH zm4xza8-FbZjJ`9sbOxjJ31*UHX<~u~$e^@-L0t>vA`wZ^rp$QOlzz~PnO4`)8~OGx zJ^@b;&X@T*qvy<|9=^P>`|16=fBeJu{^Z)#+YcW9_Vw5SnaFBQSxcA%> z5)q}Wepb+`q(;FBygT8^ME3e(kt9*+1Fd-b>U0iZ(4m zaPWsNN$A<;8eP1TjjM>h?aNEIxC~J$I3qMd@vFKSp*V|F(3w{QbE1%LiE+hI{?_C< zL>XO!BU+#{pCE^fTH7cF1$zLB%zU87IwM+sam+&FwuBA(U7!>sq zKgB{+W-B~2A`jF`l2)z~Co*bdd1w-R^= zvE+d^H>Yw+vE9@HrK)vO5K9CgQ|d)ebu0)GDONsNQd1<4`J+T!p{wczniFs#3tW-% zBrJq9-(g?~aT;{<*;@QM5eMk}DoW>aQXWck`Yn874)Svo><1IY^;b|o}>!jF7F%u!&w2OIO?gj7q9 zLjnmHt8@{G9psqNc~NZzc&lNI2rx;diGIaTT_SMWhzM1b?X2mT+-Gpz22!gvgh~Tg z08uBTj1wB4cwE$W6D!*sa2{6%xD?cyLs==73`PWvWjt*G@CqmKO*o%nkuRzIvqKbP zttG_09S6xaeDP1Ljpd=^)Q&!Y6iLV5w8E+cwX_|+KgMT@fnf+GNktM$%g|giTUzMy z>KC$Te-qG{0^>;%Ik;5_HLkab%YfEF7AFDjjoj1Kd}y${i8PmRMQ%Ilz# zl8g(_fGu2xWO!LrES}i$@gC)gXf2RaI5GfocB?hClDPKA>{BYRmvamyd`i%m16yJU z3iQ~gTw-(aN8h?9Yl1SCjg`uva5OB~SXX8jjEnDTX|YAGovpYf&A z!Kf~IKm!)+lK`)1DXqeIhw7AfzaP&IPWE?~zP{Y)-<_@gpmX?d`J%dkAqzMR(0YQA zB%nD$PrlL-j(|Mil{2bq*ihAYo6j=e(Cc>ihT&q*3p+YoF@mOr1ZIKgh=+ri2c9;E z!|vX&IXdYKMxEgazwVfK>N)=M`ia4HCI;$KmXbEcfaoPq?V5&veEYG?&iwI z(x3k0(XYOoJ$jU|z*v+c7WGB2=A#d0|HYqn7EZhW%U?I2eYNu5-O=mK@k{RV@%=&I zjIZe7i4?HSTnf$sAjB_UdbhK%w*BG{uFCbY8I3K(RhvVqSa?>RN@*|aGUNfpeKgVJ z8t{r$7UPatnrrNkta!*C7lFJmXRdZ=f0?R@p2Y~ZEhT8EoiQ!?%)LtnDkJy3Z0JQK z;nf)e!rb?;Xjt3j!1BwBh($anOK3)l7j`Hm@alf?BqX5f?cL73^3a zK_$|1JxEi9e##O%?k(|y_(^{w53`GFlAu=RIX^tRD`XBqwV6_iVqHmXo)EDlW!`N znatk3=XtnFGGeth-QfAa9zg9n?x8Vp~-r7Rg)4Tg{^UZfQ+F_7$% z5z$B((kT`S6WJX^RDmpy?U?n^!qAsF{Uevmnh>(Mm1mVfR0DFgNqC_KeJ#2h6`>4q zm%~6^5UDdvQ7Y32!;9mlEO%mz!S!gLdzX~f$2z45fSiHgXeViRl6SL%(B9Gp3;|-u z`5C=Nn;}C1MG^&Cq>F_plv%=mm6&ok0*pi%4W#xNIcf(GWi18R`)5WGw4@{oQ}aC~ z*ItovTmM4y&W)uXY%JaL zA?`?yz*WjA#Wu~HE6zMrG)W5++H(n%K`Fx0UFlF-I~0K_zoKrbosN_s9~re?5+xkD zX0)Qt?LY>BDxR)a6p|I8P!pvD4{o67FU$ho|KgTXsf$}I0?>j;R*hS2L=#ka_Q_Ql zyit%XK+0ifyA+!RE!-($;8DJV$r-6gZWky6VOmnw>DGs>0V$vcF+SIZ!kVaSSiw~h z>!4<_JTeHU{x(o#V(bXm3LC$>e?I6jS9u-Ex(lDzy%MKU$)~ZnmKwaM< z-`)ZjGNwUs6=2xKQA2x(ohi#Pnz9XsySHW0@)c98Kud;h?Q zQ_%{(02p1UoO_9sS_9An8-R&k@ttN$1>npA_9}&WT%j5cdO5~PpembfUR5VvSHnV<1-Z1}xMVqr;MHt<0Rr zW!6sh`9)~umwot_yB8J+17*e_m|Dx=M}}yy&d33=c$AbWZz1d(q5 zAe{EMgnA^&fUA+=!WwHnaOY!n2TPsjJA=;`AD^tA|6bGlpy_V)W`F0zRWU)=ORUy3 zW-%)yNmyjVECh5>!ZJ?zptRo)qbe!2MgBWFR0JjG90Br-8=hiZ#Y)kf z2nKdDviSk70_J%DSgBYfKrlxTDZ`J^GtH?6VhmKdB^~$Fw=@v z7a*tX2qB(>enL=PfRL64iPPe+N*qVn`l6}vVX?M^UHqc&=n81Bd0iGTMOAO%bts1# zFkS(&HHHB4tVo{gLL2l?>j}6ffELX$_zhm`v!x?`S+4 zcDo0(di~B)ue;h~iluVG}q&F4Sh>Sp}l0*1_S}uwdktLqepa8q7!URQNbD0&TGHE};hemR)zxJXL=*63auYF& zgxX)JUc}f3g2I%R55(0^*g(H4Ez09Qw6dW{y+bISW&}jPV2A}Y+>)*7IR}rpl}CVh z>rU@nvvFnVV?H;}dqnrfkDna=_2%#wycSuWi~vOkFX5wrGQ+nqSLl%gkOjiZESxk# zxQj7YLzrk%K?XTb=K>kn06;&%7IHZ&(F;>X4vYe6LA7BN%G(UAZgXOrR>T_V z1tlT_tBmrWZ%|?bKJjO=GCTqc+X!y1y892m+9QU#lQ~CIHq>%rDM)3jspg5;#VBAF zm$U&@<>Z@?ZM(GzON(fDLM&j42%vchJi?f$C(DLQvld_WoNIYwyk&1*7?~5=Mqi|A z&kc^01WSA5CQ4`-o3_Wr-!3Dd0KG-Oq%x48kQyt&2opKteS}q33QE8*MRutxu$LaN zC2I^=%)qVAf=o08XwFU~#gK%XrjSnikETEp7~~*>=mCpQwM;N6lt6fuwUUfA0-@BD zOQghuRQX0~EiR87UHEfwTyCKdWYd7lmX?)HS9=vF^}^k>LJsj`Ng8G*g`pWH1q`^0 zWEiB=MM94;8qFzhuyoGAhQk6g;U5TrlX~fJ;+n(DRm@kb{ zHRVz$m1xQB;Y#7MGV_77=Vi+HKqK10L|{FkP&zx;q(LsLIixY)^UPy2_*aK`rKAmT z^5CKnjHfLjU4FGn>k620%du)Bbdi!B_Cq=(L7ti_gG^_K0emuz4o^`TQge_#bcI%3 zHce+5cPOGNINha70+;5Jwivur71<+){~|CfMvKrf57Kn`K699Umi3B^%dvL)z7{c& zU>bSy94Qp(wUInz()*c`g|(63@i9o}Jq$+Mpfw)+EF`LtVhcI3j4Q0;x2nChtWKy; zvGv>-QW14_LI|!hYj#)}y18uORRap5YSgKk6GS2XNB=0UA(T`pq-a4~Ma_Vq_pHft zE7oXc!@-6lNTylZ2`73EnQc}yD~LpZ0@_KoQUibo$CndOPoLfSba~GxU|wO+5_RN+~T~NUc#nCDh;?sEs^{$Doe8S-wZ~ zlmtJ&+1wqSa$SdCE~ulUlLtddx`s4#Ft}_u=evBo+tcA1V5*K93a5MtPB7N4EPwRr zWOzI|*lISGr;GJHF(3i5a?$ki2w!*O!uW9H%T&qor}>);*JpqBC*6PX{qAIK_F_+G z^9avwcl`ftj{ntfXAi&ajCj!tDAAhAg@Q_G4K4a~6^t0Yn8am;#ijnc@AQB40|t4c zzx(a*uRfc-+!7X%Ie@@-+j%8b+P&G*`PuSH^Xm2V!J~LnwWFBo5nj#S7VG=EJJZFj zlkuakM~}Y92Re{E;Ze>(8CxhdirjO+9Ko%)rqz6@j z)|j=*sRDX;jxLalXS@$W~J+Z^0!jBvJ*LCrUZq2Fv_8 zmjaP-dUx3YK&)1kw7(EuT%1Z1ge>WM$>F3TCuUYPYczSeVW?fp5U+(h z<-%_BcYT`e@k6Fk8Qpa(~!_nw?=snN5#mYx>1Ij&-V}^9K zrqx3>Hq)B5_PCF>lpT*|KtvdP7J+oXB2(3!2IjS{c6ON@l0(7YS~XJNl{Ko0ZH!4IS65IR zG@LNcSC{~>^RGydB_w+?s53t8LIucG8+_X|{fA z=|}fgetK=`!)Y^oa{M=6@BhoK(_c-yht@s?1@q2G zh3VPZ89X@!Y&m2C_6AG-Q7V)KPEMhaEMeyP8lz1YTuf)OxR)h4#fEw&v`X?8t<9+- zsTql38enpi5EOoe63R)7M5#rhh#-YZhE8E6v&dS_1Na6y;)F#735a(6ZEV<_foge6Ep!IKVT4pBVl z^IDzaw;)@r@OF%yax;r>PRl;63dOI5)4zpdB9gqlKa)W#m46LRgig(*=RE(|+cFU%2fFq~#ly~w zEEypLc2M}hc&$Abi;YyZfdWTngBcE+;rvijIOXxk*xcR>0T2qhF^<6l^}zWm6h%f$ zCM~`{CbGsHkdtBHFqdK!6`|uogoCT=wX~;}7KIHe4lzR$?ug+SRGTZf@<1#rSb#AG zkWT_^71~0=89sJ1X4mk})1rcLDom|cnLa@uGe!n&!SoUtpkfY^XF!rbr89=EGb<&O zBeF$PLsTO46kb#c{>Uu4%`T0>DaB=Am;wFdT( zQNRESR|OLnfbbTnrKZv5t&%|kEmR|Z^m4;QXs|fD-JMCsyFog-NQ-Ixj7j-w^R;(#EQ zqbzG^Z{O;C_tWO^q;og`yV=>F{QZ;Jx6gUoO)P+MoEuXiyi_6CglW!i5 zzHv6F?=o4^&N!MqIwBg*(l*H?G3%UPyS{Pxz3uI1hlA%lvMqg~@vN<6%%}?df{7vk z7%^6{{-Ob+v(h-U?^EHtvdBd^uEltJN?#}g6k-+%AzwkLlsT=0CncqvJOK-ie2@l$ zR1I{N1=fWcHpdhJV?RG82c86HY7=|X@~MU*1OjB+AkDNwZ{GPFLP%|8t@=WWBxWF> zfhX=T7ZnZrP{buRTA_NBS1VCTX~q)qqGA6iBDEyQq_s&J5kq?p5Z0}Z=GBHNw3mee zU|+_u;Py7N+A`6#@bd z#Zp%W!gCR{jhzKjlfvQrSYcuJN?b8PG|MK`fA(qnV$INGh!b^1mO@U7ALm3?ug|M% zmc1Nf9VXuNB-1f4uXl0Gfb-3 zv>gXRdC{cmf(qtRLMwa-7z47%NnGcdS{J7jA};==5{>(lrAz(y@1Ofm?kxRisk88E z^t->`|Ci4Oe|6Gq#$_~)V8jEMdQP~AMLs)$IqmSo8p@u$7NGz&#GDwqq#<6uv9U3ieN zJw;}UGP{+6gKq;-5ai6DB%?RR?vNqJZh{&o2AVUwps#UFCbMgGvMqIlq|!=V-I-*w zlvL|z4j4IuiblB;8__J(;u4k&FL&h%A{h23W9giR(hsF``BW8{t?Ts#!E(WI=?u zp3X?)@L@*920kN8BSwOWF3ly4^v$t3X5qO_+ihtH=$OG%G5`aS-Z~U;AF~Am0K;d= zs4)VpU@|}o?s6a;6G9xqDYgSbL{Bs)|BzL2DF+7C6j*bi;apnu6P}_V1|~xsDR?P@ zA_Pg5mzA2UiYY(?NADR@0obp1RbJ=f+-qLzoMLvN`@%q z&Nq~|AU(T_All^8 zjoHWFZ7yGKwq8&9vfrg%?_Yd0{d9fl-rDT^>SVwbpfPdKy>X@Y&)y&X(WU8VrTP3- z=Y&_Ggb8ehliB8e^Y!c5FTd#QZhN6&GU^V8ol_=hygxJV(RF$Tx3XZ2XT;{7K)=`F z&7Yrqy8PoG_pV$Wz1TeY{qJWlUhqnrgn_k^$lzw_?9RK*fB9$4`Af}jzv4TADodyw z4_U#hvPK%iOAw!MeOpQ)Os!Z|QQ$Qk(^$12*Ht|yXL@(0j zTVrDok~T85P5KB}CY;7^L<+KC7P*YS6$wr8scZ#pEy>zZ0}VSHs#35|sP-WoZDSX` zvZm(1sB+cfs5j39m!t+Sl{u~24e0=CK}iS@kN~8p06?`6A_3CooTaaUtbjI0tu=~} zIZ=hv`h`hLzm)~dq})ll-OFX(uA0jhnZwC5nTin4mvAXF55D|DRsrJz+lj)mk=GJ# zF@k_Ji792@f<@C(Ek(|Fo6+fHcW3AE?$*{)Z~f-Y53gRo$2&`p2ZyJp$HpO-e-waU z{@a9A(2VSHkKRynGgN|qewlDe$IjH%zbu9#SnXINy!+?}VM4uCCXAv( ziY*9V0R&e$uiOW0yuLMwE|R!BnN16wa@n$v*34j zvAKR{^&h>v^3#j`Yx|?G9~}OhhX?=qaQY1|VZ{Q_Bmhc|w~Rxs^kAX2WhKKm0L5Ed z&Lt8^DFqYW8fdv0kx61X5uz}GCy#Ui>M$W9kIdOX(LD1X8Rn4@8nLXWq9u0P(iS1W z5D%#^32LnQ20l_~W+C4IkdE%Hgi=;Gpi2H$1`xvL-#=)u)cw*bw$(&O2Ym4TEqun&l-)ca zgoFZHMUw~9wgyTtCq){WZBOPF2nx7ww2QW37^-Cg=@j|MQ1l>7X6aR>pn*P5>w;`5 z70qI@WTglIi_U~MnXDEMEVKx-%88sR2V7CG+_Jg5CFf9J?i!KJ^R-b9r-%keupD`u zjB&8NE5jg0dr;uzFwmorew;@+tkj(PrU)7swp1Fg%K4rES}KXaOPy=jou2P)VFS*Y ztV>j}F9Ipy zE(PO{xMIl~LzGaKv2wCmCrwkNUx3shRPS#8^6G>Knzjc7mN|x12Iz&zn1)TOmHnb7 zhM|&dZL`OEjN^2IUeHY3_?z$+nRh>!U0ClO?oA&(?D8qRlfIG-o5|sDw#U>s_}+4*{giy;d#jbTh}V2EMlha62MUsctr{-Is2M_3bEryH(rFsg*( zck)%YzPBcV%8+v|IgKX_E?f+X?lKT zL}a9vm8x`Am*{D^9FjwjAoyWH?h*^|r}2mID+NG+%OQd3?%k>G+3KFsm6@GdM@EK@ zEB1NbV}7%CJ#P3lH#_1z$Brp?zwV@)M)fAJ$${TPdSSXOUT833x z@*Iz?YZMZ29@p*e=@t^DRiWNl3Q^Uvq7-5mMLxV43p~~Y&rpyF0wky3rmyHmz#!-u zK7z8GE4jCU1f8%Lxa38SZd8bA3rM3q-=Stlb_h%gJ|y^E7$qY_VT`P}O*f!2b!tDa zkkSPsLZU3zszIp`RDz^(bf-9r$gm1NiWvCf<-!m|#+MTEFOOI60ohtp@p`fVKX}rC zLC6c34&16zGjZZ+FM}|?jx3`Ze^M?UaM9~520Qc7!PA}X?SH<1>B;BU-}}|4@BJ5V zU3uruy?=iE3Jqh}wK`^1mi1w2tPUOSFa77iRK;MZYjDy1IfuWv6xa1)DoO~6#(g2iVwG;tcQhaw?N;)Wi6HovAE*pDLkXRtv@nBk@^Ml4y}9S~|41p_oNB!_ zofTNDS#-QS7cPsaCVQ&1;}D4~o1Fga2au`DQcZD29lA_29Al~=*0UI(&j>v)DrC_~ zS_qC(Zu(Dm#{k;BX;wJWFi~J9nf)?8L^2Q~9E54}mVy*^i_i!=BV87YbKbElouQfM zj46j&^A|6@zN{V6F+_%OmishhiEsE$-DxwZ7%*~Mri)<^XlyQ;2^UkqiK+ULk6?5? z`39nv;u#xxIa#Nesh{Gr;M4;(B+DEpaGzL4&hjlDRf+L!J^H*jj$CN*&1v$$HRSqp zy=vA!zLdiDMr%Wu=A?kg}LVj4p zVy#7ua*XNbZP}%QB&T!*ShavGp4-8ish$s^G?9Zw`r4q>V_}c=*p$uLFfhtCuX_+~ ziq;us7I?n7e-h}xfjz#mkUK+pqu}*!yxH+k`tA9ETSiX}yUlKVV>sI26%NaehikUD zwG#9mULxg%<%%@iRSD6?#W1jh%VCIV+r!hm#(vrD9PtPlFWuJJn$%9!H9)Zg)ck2X z-g8rU2B^3W`6*m(Y|P(zfBw$9JojbFiwb}Ee(>xG^O^a0emq%QJltK}+Fm?--EHp; z^W@TQcYpR^Z}A_VEWf-p+}p`Aj};MpB8xp%jJy-_kkz>zkrxArY9=l?mL)GU*PtcM z^LRKM9xva&+5Ip7-QYK$4NjgP9Ud=l-I@LQtHteG%YEJ|foli=7Vxxan*5|2Z*-si zs{8C0-Nt73*Js^dzTq{ARB*&%s{SMbhig8+iprx>)^2`u;*(z=ym-F*)gR~Ek9<+1 z0T<8fed|^awFHhzY|t#`%jx*kl}n!;9KL?~;v1gxlliQEEGGjGKU$C35y{@PR;yDw z((34yT^^7vpWu~+!`RgXD9AQQi5?Rg6lsr~wnK=)X)GGjsa4XonO|XJrM8WB$4CG--tS4|P5i z5%v!8a@qSS4GxS}zI&b3U>LfHOcPfaRODE5ZpuV>`!bs*YAdDJ+uhrJ_UgqW-a2#f z{PpYCKHNOX9i+#+{Ey(U`wVMDSIYad6i>pia`d+u#={MUISyFvA;A^| zP}lL2oMH`wP?e;tm=fr!!b0v-nyd}iPK+ieSPeQF#U6(qK3*8i6Pt?Dhllfe`U6fh zl`rCtNGh-@5x4n74TFY-{$T_tgjG=73(N+{w1L5k4>@vTf`;V6Abn46h$!;NAsN<^ zmjf+SuipxZWMrAt4(<`XIQ-!KjsNoM^jF^toAA=RT#v@EthhQhe{`wO*iYx zSD}%Vtyr?x?I!R?GVC5DY zN(|CB-VU)+8<)0}_MVjzS)6N1;|76UhkC=PaYn_P3|aIPdq#@BpbRlH64MRxci zOHQ1^SX{-FqP-QY6oiv_T=i*WfC5%1<9^YW1MN7J9!%*u%k^oMy^>ZKBMMVg1Yelr z!#=ORRYCBV2!`g;j;{1h&CHZGN-E=?E_op}>>V?Db9( zacc;G5}!J;$oV!+*C>B`ZOB^9%pTFA&7Om(Fs@^ntOh;KJ|1?y0&gkOqY}g-&CnKm z3NOKw<@$l7XwC82eVArldZ?e$0Bi=F3ycw9b{ysGrf49`#2V;78RorqR@zv72?H~r z%L_bm!>V>@yl3CRWsN{G;iRcCp(jzTXLVgx*Jd~kwfY>4ywt37lH)4XFtZlq@@JG( zDQT+*MNU+77gi`%I@^Ze@SzJi!LWI`11{cF>6Dkz)Fuu+f>K<<04#cdp#=eOyVl?q zAf)4e^Gtj1S-Np@YT7{wWf&EA0N{TC?OdD1<;sQ~498o0*G0e4@ z;9%K&;e2=H+Wg$PIm?;Dz0r?9E*{*~!%#96Hp8+DRKaEC^-P`HLmLnSAG3_tur=_HOs?JKdEt-S_vFfB1Uw z;AwYoq(M$~i0!lv_ErTQ^k^_W>C5yUJ@5ARx`&Sjdn_99R0R>=cy&HlTOXc2Gv_g< zYlHP0HzsfYZ1>UA!*Bnz+Ke zo#H*kLJ@UjM;8pLX0uAusQDHHVx_mIa$}#))^^N%KG9YAWpZevCFh&0k&;G%7%@$6 zldap`T${1cd0-D8#L~dMP*07^k#!46^x`AcD#_lSLJy*jG{WqQa^)}URkiDqYzP9d zok=lSLULJmWS}e85{m;i=;Xve$>KE1lwZesBL7NLi9~UuzAYL9om7fiqDsoi<`-co ztk=j;QnAIGjignxMU@jUuta&XVAr?uMj|^pb`H4)9+`%-c4Z4@yJh=Tn*#;*c?lSa zV6WisO`tg1h#AFsD*%ZShqTxh_Zoj@(`X&37sD5egM))x&tJW~fBoh!u3dfS{O4Ei zJox7B!>{)bUvN8!GPG5tn%8^K%2owg5r;80qw+6(DldNI$8YoDWX`Wmcw7{*p3v`tFAvMfuDaZ(w5sRB5 zc##&b`?D7cX*nZW!=nH`WC(=~G)f~8*O96WzG(#r;SaCo?4%b!tQb9j0lvYND8-+Q z_{i{|0#kw`t?4RZQ;U0xNhDjXRxo$kk53LSy|w=FTWcRq1{*Jrc#h~Fo*n*qHrPr` z`SgdfI3i^3{cm#+y2r)}hZF~kMA1ZmIsBAm<^ealR|HBlheAcksSWO9Qg~yVLupWvIES6qWlTHEFLy>VZhr>WIRb8j7p0#_8O@y5f*DeK_?JIWv}}1 zvTxv%qZ}#Z=_NFr5{5-c*=(NHIk_!|gv~alnAIr#;y-vo8?NXGWANK++wn?gr4(-f zhv-edJ!h3iZwO<4br(^Sk~hE%d1Uq(<*af{$!cIqJN-h5($%O6BN9lu*Oho@rB~}b zu*%s%%}!Fk=)^*bX}02I(RPvGaHy=vky15CVITACopK?e`JnJeKuD1vjgGe&Wg|Va z<&0brsK{oEOpa)L)A~wTXgElZW)_v8{_5UK4eFx`ph^RV-5)87)$PTzR$oo7g3=0P zkj8K938OwOEfk3-xI-y6Geu+p$fI=SqsEx#9Fj;jH5lLcUzr!#RWfU3c?gdY#e~i0 zRSJ_efY9xG(n-;2`Zqgfrp02wiAz>rR0_{;_qBt$%!q7^frKuUrHQra+#Nlv2az=# zy9_}cLcGV)7cES9%HNQCl+{Ws@1nLWY$q`r8+bI<gYm#A z4en;(P_xSx<*<~}TR4)QoPq!bMTlKgCj$SzFe3^!^k(LlOKRq(7V(ME;40T4u<|n~0;<-rdXfn`@_7uSFN=@c)sSm7 zuu!qIJr~t6P8hB>Vb2EeETtTD4JoRb+d%=tCtlE~*%24n5NTb&j*Yf!YtM5AGj8NV z8u=WrHVnq)xm}aRJdOarKe;4wIFM3NRsr$j+Ml~O$;HbmGW3pIk+Dj#az(Afi6LE?^7!3cP|a_i5{FcVFP`R0--cmALX zz##Njk*F3MaYZ%ZPo6`|PpZ}?-E`Vb*9NCHyLW!QT)T)jwU<|8T^@}7#oF+bad*N_ zZt%LB|MUF#pN{7bc~L|hj%m1^2;s@JSV`Recop<=dxQ?G9Uz7_WDW`s3!-*27?o)hF32y zc|z&CZ!OK4+Q1${iT| zT+ov!UWBAO!bWZ)zN$kj8Hn_*k7euF^tg0G}+T(+Py;T zJ=jE`7U>el0^r${5R$egJnK2Y5_boFp!QDh<1E(#Q>xlZyb2^OZe-D z+w{m1F|2_mJpN-uN(EA$Pp&bWx(SxWcw?}6dHTua>BpPn)30ZbAME|{$^Jj?FP?a} ztz#Ubl^!>x>(IJp2Sv6-2q19_WmBim*a{Rz#B&7_^IAgjZ1w>CKDv@?S=EM;m6uLF zxkV5uXpmh;v&G!BQL>Pb4uNk6Xr!fQXwFfPV8fPua*`{n!Dgoy(Fixo3_BNdtI7hg z4-k!1VxTk*6(mddS<-0KSW=Q7|A@X4x;9-?EP|;-ma8MgjDn$!If5(}aeyicZQ!NU z?~surZNaxJrkdl#vP#3HZ0Y1Q!PX0~h(01YDd;IVC|+tR9gZ-fBS<5r+>pgg8C84X z+2V>`srsJ`m@4?2cF5u+Dm)kxW|D_K{Iyadj|KwNYC+WjwlGn$8|3LH3FA_y11q0B z6LtnoCOLF^=}4`4@*@O`z$ONY7?QFn#IR{~Cjn&eFgB5fopf?w;A6KOR`c1Cc1L&0 z5v?`(QgT@AJ)tEfJZ2gNt+^yZOPXw9wonm~Q99oUw50rlkcjOmRMzK=#^?Su<>})X zTk$OR(E~zJc9x?XN>9egt;w3sc|fxK-F0PKWdF>ZkM5HppI%rHdW2m1ZI@@V6HHV( zN!*Vyd@RQAxy!V2f)YhcjBr{F{IChq$+X3`e!eV4i1ltlY^rvWQS?&gLz#swz|15d z=m6}7bY%Masv$-io$nGuUAmf&%VRri4neGL*A*p}FB1Y*4u{CMEjlq$Rhp3INXUkS zKFN`?EK-yDM1%=gYL^9nK-gL7Pl#0OA}y*og2U;%Ltm&vk5|Q2%p{WX9!R}iwc`Yl znnh7+N{2uOSB+e{lzt~uvA|=PboPegK&4bLYE?^cp@(C=Brci+JLo<2;2pLQi_s4R zh+=Yrw+)A^GozeH@|h4$AJG`7RlgNEdcaQwM)^SVtV*#3fom&BF3ZMNK)bk{E~KYnNN z;k)y*XNZj9d@2CcnyLXqT7wA)KW86*0gOi?Tp$1%hvSg*uyK0@g^J+2Wb0&T= z_EAGD6zlm1tU1Mo^Id=$rJPxqZgl6a4d4H4_z^!-JiXjIT>RtL-M|0K;Nj!J&hB96 zz@Nj6r_1r0&g3;JOdPEUsyr3pty!$kZQF<)a7(JEw_F?eP$HHJ{x~hGK`vX}d~f4?|<>{7Y}ZC^L@Rn8wfTMNycS5M~4w(deD-^aD(3sUiq9$3s0YYGhgnQ zZ|vDqg~p)b#KdrVLJpV9dPYZ+?~Yt!-rzzX4y_Y37)X`T$-J1Lynl>vt(>M#uX)T0`_Z&Ke>F|h(msaV@hu56wZPfuwM6J$nNz(+BqdgE_ zY9xi^!~s?T(=2WSSPZxyV0UN#>8odtj&={vpS*JQ+D9ig&vE7Z=zxyQ)3wNmoS0Dp zteR%2iQe}l+z_Aj89U>FA5Nm@bAIT|YS8O-6$GNt`0_wS2B>s;Fb2E|1rKQVsgWGSS7~!)dTX{iLP8q_ zt5DABHPi?|vEtDf8r91i^CDX{*r@R-@-*k#V)Nqo{r5Nj_Uig4^X};0-oN{C`~P}+ z@C6qJaXa-JYa$cLWe#!_tTZ(hq{=WS#|=VgVvr?nVKJLe^F)}E1N?&#Ivne#6LIi1#$%<)p$jR%z9qmB%~G%G~~0ddPdG$aU$3Ip@VOi?Kk z8i#O2g=D15pC&Est02b|rTMR57JH$RK@HiLz$Env3=yvU0vSbBZplw7Cn^hPzz2qk zth9(%8bmJPRJhK%?SIxqvciLhF60a{|qAy`9ErfvmJ0Hh?tI{qDu`)6R ziQW=}l_0@59m79loZd!lCI{skC!tJr*#|P2N{Bz8M7;hbM=0rnH97?{Skjy*O-&tL zo+-p#F0Ww^(LmpgEO8<#HJI**_#nsin1hp7`CQm|0jkv!_3A|!ZAj>&M{5KV_2!ds z?uCaL?{K&Sma5zezeFxg@sL9SO2NnP2903r4%c{JC5N^$c-04iGPyLzkb{dMW7)&W zLh$JEXm;){g6V`=J2Q3tfq39?A|NZA=0xVssKB9m8>2b%p@-OOoJwP{70uNbe{+>s z3+$#VE0i{agxBkz`XuaekyRrYyoa}wB3uN3N-4sSN{vRW$OI^~R#2n#ic?r(h$+FM z2{#mc>&wgcxRiy27U>WrLmP7-_frM6*IdfYr=sBvlgFt|ZcTDtt2@}TFHxj*RajgN zjt4wMWSx5xc{ju6kax15y3o!1ohLrF`p|l?Ts}BnKAR8Lhoe)Y<=UV-+l}8HPu?95 zPSHGvgWcuwkSq8;Zbs2Ygc_}9>Yf4Uw$zE(!g%?^CpS4ad#5gQO6#Q)!xwv z2Gnpf-{#5F|MG7)e)Zw;i^IjM*Lsv-_PYaUl~ zue)`x`|fsk?}=|v)Z4ZNG`i%2kqN}`!xKt98H!dHdudhw}T(A3eszN zZ$=^vLn&*CrLsW0)2TY}IE)pdrGC8*;8O{0_R zS1w)VcZ0jno_#f&@9-9NT?w%!%MA5kIQ0jOI)rzW<6&b$J6FlHokFAGRY7F3MQlq_M!l4aC=o_fga%5! z^-ZWPRlQr}kZzF?KS^5aWXp>LiU^N`(-?bcg`^}wES0hwV-GW80>c!xFiqi1R$${L zGqE}#)vl>l7Wq{Rt*9gjA~B5X$&n_Uy#zyLmAOI?n-yEeLxD-Itaw7y(R};W>-$^J z9uJR3H?Mqn?X90pCua{2j*fZU)QFpgbda&5-r9qWggf_^#dcbm-bJ*dm1988O!=%} ze^-)IvBnpl3}@-tI50;!RrTqAO#8_VO5j8UZIH`=%x4hgCBfP3XwK8c7%M3%G=7OO z)t>{7>mUZ82}=yxMwB4e0&%+uLl*YwEwnSYDcO#=O`HKpAvqBe&;n{6m>cbA?zjQqZ(6rI9RIxJdA^C^i*n2 zd2GoOX36XYCI{kTu{Z>ww=A34z+>O%B&lw+t;kjoDz9kW%ijw^3R{6B(MwEh^knA$ zL|v)w3wucc9m!2b`Ks3?+UTlMxysDekeUjzo311PR+dU!PLng1CC6M6*_-WP6uPoY z+P-EhS;R@p3lEelmIPASUJbDKM_{b*!`OQ)GQOvh$qddctsCq$k7sXLxTRPGd zh$tYDs12eB=O}%LQdGSvHzNnh1Z3NiF9M2Vqhfkd%2)}3rguW)rs$_Z$l;P-Rjqt# z-^2+vydQe{s#^Feot!ZtbQvki`Pr-c3}V0TtqT`l44Lc^aZq1d)33SY@15MyabNr=Z?* z<+Km7geQ~?9G>u#8a1-$d22)(A_PRJ;#L&A?IO8RX8qudC*!FT5+%J6f(TbqqU6il z)pQ?AfC;NNuY2eK+-&E`)K(MKx&o8vRc7*uPhe0B^z+zJ${dVbCokrnTXM8z!y71d z;)|>dYG~!60XMnWfO9#{g}OgLqC^a=(p?Ig(pY@wj}+#EsV^#b0vB&9mrD?8 z$>Oe51inQ*D*bswOx0IDeH2~>R)uRD9Pu#B-gM@YOTPn{2|8eTpG4Mkh=PH-R7bt& zf-HZznp+2%u6Z#e6h@MDnK>l^n2=K`j5STfCsvbxp=1XG8#|JT?UWhgI0Z!D6<3Va zv0BHPllw8PR_e8#fi9B?n1B#$1o4F!>M6%obk@L3ylf@bY*2d*P6iE;6}rYQ3Ucvh z?i!tpyS1sSmy;*DGbaaE&J0ga=MR-0eei10fS>z)J3oH9H~9H<^7(XdZP2YRyX(X8 zmBH{gqs8sX;``a+yQA*uQMbn#Zhj>gFp7!0Vg_#WJOT|FYn)YyP+YcF&o1P2K+x%z z+&x9t$*T1e8Txofv%g~!|Y2WKk8PLtbZ({|vu z5&&U!SS#uQk_lF@WZIK*6apH%!AQ2{ezJ*@Y>sTBIZMT{%;ut*eFiKJiQcqyDxTH^ zyH{G$Isl{;SEg4!H>miw*h4E(NWDZUpp3c*gv8QxI!fh3C(LczaJ5>~y?Q`O0m#mW8dPd6 zQq-42LfvbOcHbNa2MGw-qA6K2=BSt?6cYUi7O}Ki431`lz1jZG&aKBUx9+|3_HTZ6 z?Xzo_ul;cM&v&2xZ#K!=Y{lCEF^xThX^b555i@ZsIfg3$-2tQk7&x#WYvLf(CrA~TgfM6d1j?{1 z)J%p*Llg#O0@cot45WGoc-m=HHNKWsT9lYwdKHCu^=Zm-F`5t04Bomh{p7;*-SyGw z-TD28um9o6{uc+!7kanju}{G#PfNZLrIga8TuoFXnd;DzC<;}8n*oKM^J4=LAaaeX z$}f3szmgzeIT2GXRE?QBP+`$sIVCtH(!#R>rWbn!)VZt?Vx9#eQfBY2n9+(XhDds4 zRw7@$$N*GVltMrvJfV-6U{yqlpi`P#0witABeF>gFI#HAda`gtY%43VO_IJ;Z}G0k z=UQ<{;371iq!zv3wDlzPZQ%0v9kVLS9M6uM_~#@x=_PUZ8FxTOtTUt zl%$Ai0-!CgCru?)Zy+z&gx5@fx+qJs0O%_qsPg2hB7-c63{1^Hs3;GKcE)w`S|eo% zrKH_LqEaM&GhO^}_TFS} zyRZv&N2tuM@EH(UT#24J+g!YM98?p(+RTlqs>)gt|MEL7ikz@| z;}3$ZYc3u8v!&9Xwwpmyy(;(gL9C?G^p{5H6)MM{FB(6f&|a%M(E>}v5gowL(ilON z`$JRjJ;Q^tW@e|^oNoY$K1?<1KyJ#z8XYJm^1aeXpcsnQl??+KxI$RoKm|E2LbHqr z%XMi1cpIS(;hn$w%(vd@fASRodVuF?4FwAqrBW;vxW+`CppylKh-|-fWUeBhsZwdf z?)4R~D{?7}9}rHb!_5sAUCWE7H$OSEadGLxI63aA1&|kKKJ8pH_KEaA1B~NoC7jEBs_$I z*s5`%j|1^fTBbYRg19ziX*#@ka&YEY-ncc)&VuG2Gf4{`h!t`~L9N z7V>?t5MhUS)@if^eL9(qM)Nb+$ituXq0=_*=iHd`lu_>UTD`+kU3X1*eCz&vXK(p@d+=&&aInK!Bx6!<7&fU{yQ5YiIF}gUTGKB-p8rq3 z;d!mot2gGiUo2m2Wf{!6blkoD_VWFAyC=`Od-r+Cp*2Nxo;p3badqR`buO?T-2U+XwJKP(4yM^G3c zCSbCsB33y?vf6o zpLmAdB^hlddju;SI=>vxY)xuZ1=&jQh?LS&LfR&lQn@G)z-nhKAt?;r$jT5PX2%gy zQl^WeS=j)UtSMI5cx}ngM_Gn4$}j}*B1&};Bzjv*`BQX|)nd^kZ81MbwBib=CL6jg z7xA!Y#Dg<&rvif3dK9e3#yPDJoZhPvgs`TMN}XEDhAzn?))u2Nw1Or=~;%yOSGdfXMY3WoT zEt8A^@1<}~!eoH}NQD{g6_m;;zVsHWSWvF~Sj3lm*OsmWy?5#$eA}F^C^~_lu-WqynI}CQ68IZL&gEyEw^75pNJY zF}QeX`q5kC&(_E1_m)rY?ETxvd%xeE-K9)L!dIv@q8hy;{1`)q_EmW)3UUqhAGY!( zhcb~<<|dqiBKDN%(m+O_Q(D;?9M$SkU8D+(O)dF`x%^%*P-aQ}vxm4rNv&aqnZc-< zSS2~>o`BqjHggoD<-)2&B3GShVYK@4xc@h$)MSKSag~Uc@CHV&z89vr7?*;Q2w@qd zT=^qev)W-x*aT}+RY^=|>bWof+-h&kSL#2Pri(?EZ}f@=$_8FkY;OPrm^sY=ph`h+ zW^Bfm-tf3C0@N&hi4nH*D^$=PZ3AkT#2gtoN`{$sBk5P|9MdaST@)GRh=>pqh_DMK zw_wR%mc;lHTB^bD6KqNojMv^BkU}m9xW(5z&~RaD5k!2_9%H>dpD2o6U}gg*?ovPa z*t-mg*JOhtW~yCY1)*8G5c{pbCN>UJDhAktiO(XjhEmjWq-#Y9@Gp@ycp#nceHq;UzS z4n!(f@54($zJ0QUR~=K9QW1+%8=abvREe4pt5=alz#&YSF%d>mK+r(0kD2W?yEd+P z^PdwJwV*s3-5M29KWgAr^~zBy<=*it_ym!X{ig_r;WVp@`#+ro3V<&!hQW`+unjrk z1FdUpF2s4Cs@016ntl}!tf0V#qiaN3{|G=jChH(JPS_d&Y>7>-1sS{ga!fsEO2?AB z@B`7Qo9&sUk*z@`0zw$O*v@jrl>nTOmNFEPkkCE5qBI2pf6m0|X+p>Z8;Pm_06+jq zL_t&%?>`J)#048ZM}f;!QSi5MiwM(0!pR0M)lV|{(x{Y>DJc=XEwWQ=Pv*3#I;L7q2Tj0nmgXQJP;M2)qdu{OI#PY$cdwkq&9WP(b z7O&>R{f-|ZE)Hh{&fVYu?k}~U6dtw3DUc<%1FVm_6QjZAv^&2(xO8%GdfIKS%{V#2 zsTE!w&s|_VZ{=_~dh)uv{j9tFxO?(y$XOVwl6qCtV!F98J$Z(Bo^9{XUeA~7)5Tk7 z2{V?M%(sTK#q`Rl&38}jee-<(yID6r;@wqdY%mOd~n zlu1ZwmU~I`LUNjI6j)^r0Wr2HWk`idS^y+8TY;p=FMe~R0SILqLfi~$3$1) z83@oGV0J@MB*-Wt$5VDh5%t14!A#tSzOp;VcruHBt)Roy$(q@WK`$~nmdl<0WsV1Z zk@;~onXwE#wBgzOkb4D|`v(tSZoPbP*5)hFt1v5oasLEoc*u$o<{Bv01 zMIn&VM`Pn&{qE%D$$Qt%u!K~OYgrL-U^s&XWShNBuy%wItz`4euLR>6$yc(fNE zHmQp_Y{6Zs499W^3?ypv8!O@gMAQFNqarPVo{GR&s>p(!M2|8g5b}w=vc^#<5KyG3 zCoFZ;qt}cCOSoVWOhUS>GbcdoOz7KF3!x=EQX{Hy3t1dMDw~S=WVozBKLAvX3Vn%o zWFSZ8{=;{?X9t@+_A=(vToNCaLz=FzXI>W`a*@*fD8F`@8FKw2)Qqcr6K)mJho4O0 z18UOHlVJ@+NMEldx60@y5+GEi{&MPWPS83{FBK|Q`di76-Zo6vI;u=+y$v(ZR+ptGhf;mF2VT7M$1) zi8Ho157WF_$f}7k1}@}@DpP!9#dRK%?{qH{M;I|~#Z zEI7+bB?B)oG01|-WpJxyozIXAta`j*YDBU6Ia*YNTPmmkJi)Pf42-w?VzHvsq6Qe^ z8KeS^OK|w17NvLuhj5v z3h}ezxpyv?#e~k5UID_yp({gR@S%2SEM7NTA70u#cX9mDneLD0SrB?fPgk-;;Qro2 z#FY%9jaL{f=0DC3?i>xjJRW^G?mpxu(&2D(I4Ar8d1AO+8+Ml`!`Vj1?>7&Z+~K*{ zUyk+{gZ=s7V1|J1aKRhHs60kn8zQqxFz}PV2|q^Vmv}gVcSS5apYyUDaKh(+mlnk%(ED*+WGRt`tZgDmVAquzcw5mFDB=w zYiqOPwZ*|0gN~QS`!o=g5m81afiYvvw(kOT#`1}2qE~}6zabU?PW4zPIMVvypQ`fArPSV!QXhJZW1B5?z$W zMPx*UO7bsqdJQ@dYfuI@DnmY5C4wYh9O8q3!GR)0}(=*hw6e>ts!&?wcUvdtqBl&%zW)oe4erPINj8C}1+ z@%dYmkJg48uVxSK?)>iY&KHL~N7OT|OufS4R~Zw36e6`)oSiYyNRpv-1tbdPC}J@P z!T5wlVpa6SSY%dq;V&AwvsnUd2m-^T$NbafN|R8ILp*F9ms(`vUz}+j6x)d1{Gk67YM#)(#zUOvkVhes* zO3r`E7!+l^eYGQ;n1H@=Qj|C**=&h_iwlp*9xK8t9jkMonAH{&-c+`yw4g*<#+O(b z@W|6+;bosOf*b}KpdqmO|CnfLNO~nTbQTO~p;t#rX{ykgb~>$6I5TN<5R4RP&4??d z{)vs0OT||bB}szFZaWV0i2$?1$<@9=yfR$L6^|;^3Q*$(F zuUwHJjz&Bt4j^3mpwM&e-kHy#ccy8r6LEeMh+=1RlL;#UGC_q>@U-Y+SgKI;K^Z{J zG=c=oOxnD1$Qb8xQHjW>1M&5;%s_mfEC&K`iqG{t%qZgp$fLs;oj|4;R&y-YmHYI&Uf^%!!efY9C{FhBN;px zR6Uu)HYo^FPf&18jXPgido1}0hQl-cyZxS&%pGkHkY`OX9?g%aGOC30uuR)2R<-Q7 z!h2|m2xy({kak7|J3h&#`M|^gMDj!pyJmL!(7^`|{WRg#6pKS|q-=4Ix_BN3S~d1d zsRe%R$%Qx871lYygI&V44A+1I?NHXj582cq%QNGgOMe+)D~yqdF6J(Z)vHE=+H;*# z#4L0(!y{jx;7@$43+$foxB~R~aEkW?qk(Q|jZ}mZZC5U~fm*)Rl8i%?I=#zD1jEbt zl*MXdW?!NrtpHj;rN8nKW{~7kZ537rM2>uJ<*V$;K@cI7`9T!{z}Oz{c3ij`oW8Mq zeJek@WwFL8>%{PgW%MCN>AfIF?sCbGE`L0j-x&=4a4@(s8r+-?uMfKmJo<&pec~0< z8lS=7tO~*-Bs&})r+47e!#>v4O73)~2~&pz-OL*v{qS4C-C6f^ue<%Kd+>buaBHx= zH=sdL9bUx7^7LMO3w3a~y*EGfMKr#YeY`$f+gLt)*74iFLoQApEtw5|b+mhQu;2%W zhcjMDKR7-h4(tU9k@A!&BfzML2{x_C=5l?5y9ovdzUSJQp<%h64=t5~TcF0S#nJHL z{^Eaou{=3hZf_6w_7vvbjN@*7IygO9o}Kz6p0#uHAMPA|@#XTt{qB&LRiMpyfiw*S z&*?6!&oEA~TG!yTt+hg4+R~l8aQL{}V<0+;j=;t}zLj$*8_0C)I z8!{wHg%}*0unw6F2b?d-OIGv-bWv$aHwg)`j#&83%V=h@MPj6)rq3`_|43r4=yJp{ zhXhT_&zCkuos_-Aph`hh=Mw9{()+n|=r7iM%`$31-C*T_CQ| zS(koLL8;&)xgZy1#3@gay+$)*5!|q73vE+DhM(PF(oLkoRmZO6Yf*J6k;6{Llm>)k z92OoDMNp<$WTCtC50!Fn8&^^(Nxr)#O8G03iq0IvGVyFhE3;rE!cC^bDaP`W)*+_} zRv97;%K&bMSej6c3(RCIF474mzAKocR%1oaR{oSc!V0#;5=dPCIVe*#8T~cxRId{& z6ezZcE%l^Vikb?zqpOig5yN``at9f;Mt@Ct@Y7pl$hL>kGYziPfhwU5*uzYSNzk8j z`?>`gp`DX37|SS2>^Y*i1#ix{AhZ1LHy^RrAd;3F zsD(&A7u$7W0H%mSl|5{Dp{pv3c(mx-RJrGx8`7t_0Pi*}h!rCisr;Bl^xJ?-+2DaI0im=jd^)AbUf zS&X5_$UuOA`7sc8h8)YzTzwzxWqH)u?S8~vio3*RiaDH^3C!EKEXPy zGBB+`N&=s8rW^b*o~T%Am61qsNy(RUAg}}?L^dUcd#0mp6{H2;*$k;}cbxWYzN`GQ zSMO2?6*tYMuXIGQTJuXMxqX5;MnRRS6mD4E zLcVknVIhZ*;+v!qlQ%IO91ory+`qg2&H3@E_XnddyY8iJolD>Q+rG@bPV*rz8l#%> zDHO{kH)n3mmp>d0*1PW1cz9tnyvRdY#@*R*cZQ#~b^O$j+7YJ6Scbdm6TVL3Lfv9W zDAhC14;QXVU-OjmgYMbk^3nd_$@cQu_Ht`?cz8sU*EqXJL|E-wugHkzQsM!tOzYOl z-Q;G`;p~s!4(43(@7?Fc0+>e)?)FZ;k0OWFb;nL_=zZjf6 zJ^Sj%#rNNsg-(OAp1?_UcveFe@~x&tx4SpkKIDvuY1-!LGlMgiyPG$N*$lumFXL6ErNYv}&pwZ4S#m0esGAw9lHp)uHN7PMRZ5&-JEa6nfn}w{ z4+sV>KCBWbN={D0X-Va4niynet4zLiJYW0=r$+>jk*#7x#XDK!X{LQQq+UN)l6>xE zk|Bs}kKE8Z@(y8W@oG+)g&I-@3pzSB+j|m};AIfPsJJGUrK4E%qQHv;@73xh+N9@@ zB04%7F9Ai!A|!5Xm|)S3;K#EtSYDNmQj5$~Z~Kr&q5Z!0*lhZ(97v{=(pa#{tUUK{ zxz9I2%OOPB%9tcAPBW;Z-p)8tc86DK*mQ8ZN0oWZfBG_NIcbf`Ko#RD6kE{w1Rz&K zz%Wdt&pFnl3uhrL>QWa0O_VI6wp~PngIi&McI#Mt^$Y$DeekMbg&a`-t0CkW_?5FL7mLus`Vwx)`2v(`ta;T8n(#cq3s|qAPy3|@K zph+lFV((-R7ln>AN^#HFfsI8Uu-d@Jp3p0Jq?0J^%CD5!{1K^x2{&i{Ea#LhTb4aEC1~h=xd5gGNSH5N zySZsc(CDg~j!^MlQq;2sijR<#3}O7jnOSQ*j3_Sy@~aunL^6qVxhS;;*KDT78+uTt z0(wLvGNzPPUt-}IaMm-L%o5YS)_Hv9H0&}x!Um*z=an{aV%}J*$pL30V+0pAMIIG6 z2eW;2st>&snR7}cWTjD2h}KvSQqF_pM|~BK`Mev}eZ&fJMOTG6@h--4OJ8QCH7q7q z2kRJY*86dPn?gCKf)f6!PQdFdDRn<)>JK)4U8ci?&vYJ^h{E5@6|>;sqMTY(IOKVi zdJ)_5%5P*-sfdP$a?rZEv+Gp5>vn#{z`T~0~@$K5q%TJSAMzb9muhi(7+r=d7i~niZ}s znHe5haDs`LB`DMpLPVQq3UCxyy%edZvSv;da~eYntTnL+&d!DB9pFF@l0Ay&nKNN9 ze^vF$fgl2DROld0|Ds`<32UWrpm@S4I+Ip2UCu7$sFdbLJwJ0u7SguG>27ZgI_%_r!PIiEeOe zzzYnQr$&R5Q*I?4Ob6YR=E$OuyGD79A*y*^=<(u!NyU7)ciippv%{motE1ue!C>!r zaCqdB!`VEig{*ZyB8da|iuDO8tRi@@jL_i}$NKX0Tg&4^Z&Gzwrvw)m#o^GOY&yDD z5u*)Vd$^lk0!u951i)ZzWAfks*NcDgIh@nMc=yiT5f{Wn*b6C7onpUsW z#d2*t*gQA9e135D{E~YI_7CT;pD%y+UHAOOh*c|5YNe#+ObNzHvgyU27?Mh3XY&)a zErZIUIZVc9&RzKQ)TwLxdru!e{q|tCRo#+5&O{iC5KnEAwu=Z#!@(HHvFbRsH&d@o z1AZqNWJCf&s9d52)1+N78g-J86JS&_E(D$f4I{TVcP>`h>|1=(y-LLbv8s(pnIe-f1m}{J=1|UM<#+`Z7SiIh)B~KM zap_|r)<7;crumcIHmIwgM6P{>;RY`|@|90$5O2T;0DB7Ctf6O2r5(u;kjRt{XH>f` z*q&Ev!EL=@V~rH$6FU)2uCu}glS4AxftinTG|ui?iZ?ZAZosP1bhfaN(quQ$!iPrz z3}uN!LE%&ahM+?_Ba_2Q%7hSmT1r~0v`FI6lon3N4VNw<=m)rc6mv6x!dS4%QO=?w zSv2vyImkh$l}$R@;U}YtMBlqYEa2cTTZ0Qfp5eY7-p@Jr@devEw;n!y`r~^a|N4{n zKYRQ7`(OR=r+fGRvUm7WD|CteV;4C(w25m`s=U&mg~Wh%$LD4n0b~_R_6j5aCppb% zRn%5iX`IeQU-o{hj4!{59NlFVm}SWFt&tvvB^)`~0Yhp$!XgBw5>_0FOqRT*#1Xmb zliqYTIW@X@WBuosHa_5?2wO+D@4ou|)BS(q2jV!>lf{uN9L)t1aLNf$Q!Y|rBo=iJ z%2rgCr5Kf(MI1RARNr`3U>wBljmsQW1u%OIE`Q(|O2nW5`68{HQ+u;*r7bu)#6yY_ zi9S_Qq{+__GZuxCR3!)+wD`Xjm8LQe?ZIqOVn7xSkN`aPfv3D+ONM$B-#}9&8HeUm zqGMg4o5Ln^5~ZN0suBt@u#s5HRV@X-@kV?}P*U}KvM9DiMoE>Mz6S_)Wb$c5;K*OT zi$&qocBga75^R&nm&G|IL04S%CKF+nW`jq#MT^+dWy_6BD3zF6V4qTm9dY=o-YJL$vpQ0{|IRt5&3HAR^}Ja}a}ho;^_u+Rb8U_E@>*M7|vql$dY7tz^B1$#v!{ zZqW`oqZdig=SaEGa-sp{dBE5z+u=OH30IlGzWF55*onb*fHtLb?000Ms?x0u1}^M; z;~@l#Cl+bD67q`!vY=?k(d@XZc>WAwwYhl!t?`IIi$sBL?9C~bI97V`R5@QsG$(rf zh>L8Vep450bfI3@GT4esEpdP+L3KbB&i=xn-n}2|`8q|U98X$FTaL1h-vi^kK-_&YB&=%SOPrWI@ng>9=tiIB4+bcqE>6aQW3+y2Z-g{pi{V-Z1(KA zp6V1oi!?GoVa-OMHL!CX9 z05q^6Q0bIpIYvS^VLPmp)+Ufj>l!;RDxPm$M-l(vP&)D@fZ3U`VTp8UqR6m3nso<< z-8Of5z8(xWw;paBTp12OU3NdtyL(J+0BN7q)ae{*DwFIZ!%ShK!d*(`4htdRpM4gY zizP3$*J<(NklI|`sm#SCu4!@Aj?1(>Xq2@vOPyoiM#6`M#WmlUPmHfFgkx_apLq~|L#O#Bh&gx3 z@c=-1B{ia`C1RjDE_;Xk$?L}q2vNj$ZlFb){cy?G^W~FLrz$^|vM*Pl3GL(|qB2A5 z0g`Q6VxiP6UdkHRBZEy4O$((>NXZXpaukh#2(f*XG<{WCM5J(Knic+hyMrTZWBZx# z5*JntV6x;RQ!=n{zXRmp$!`$EPMGB;2nL9XF7?=^ol#NV`Yt2{p`I+|93~pY#3m_3 zE0_(ih9sMWjR71big2i2>X6=NK0JK(dS~aK9z1{giw{2j&2NAHcQ>!T^UV)mK6=c% zbhrl_zGyE!TGHnrEOHeb48mih@p@vid|z3~w@j9zHzt)N@)X3hz5*IqOzK(mqZ|g5 ztuLG4%;li{LvAX$P{p5tS9S=9PnvI&SdyA_1u5JBU=}qzF*tX5?c>X9pKeah9W1vW zZvXM&&hPhTcYWOiQbHPu3R6<4F%?M3t7OVrW`VT>X?ji4sg{g42End5mbt0Vt}*HC z$(OS+CT1#HA}?TsU?M_1;6HLoS?k%-6|_=Rgjl6fT=GpyA&gYl3RpA5veFJI64)1g zsg7ATfoLyVY9GGvhEh4%z%1?tl(G`nN>>GFN`09xMdY)GK*QOLv+`;TqM)cOEgJLX z>xG6SyI!W0O?K=Rdf4L&Nt2*$6=ms=C|iM22is4j$7C~LtXX16iZZxE-m@UQs**1i z^5^jDUOxa$j}Zw@_0$%(k+9JRu#}m#W(;Xgl>-?GBndO>sQ~t*1(8E?6orti67^UP zRi4qD5-^B}RDB?*u}qbLq*{{j#5yts=Tci?J!WY+{?E3O0Ht_TWOoW>R7g*zl^!;9 z^s#NjDM}I`kxZKOhe0Tq{0SmZ1skSP7d%a%+AWQU`Vy^Hg+(OLP*PeNtXM>jL-}ZY z?q5?C&P~Ch8H|x0u*8GgUjUK|Q0pt>83zu;`N)JihJMD9px^)_?d~)AN1Ts#@VbV_ z3h>q)BtV`2z>Un@UrNyE6&Dqb>#f#IqscQOAcV!+|9FF$Mv!-WF!Z_*^ulqkg9N7v zy&-m8ohf53A~_Wp^2`i{agi!>N>!*+zVJpCc*gny=QwYr+FS;y3TkfGbfuc#6T-yU z!+Kau!BQ?oDTnw8UPC5i$XB2qCz(~W_j9@~v^s*Dk~j6DKILZFqCo+PP^%3Gl3kWhn_5v1O4ooqe0I^ zEL;Mj(77PN;}IL)lO9nqpXoQVHgmnWs+-)|Qf#`m4`V||rN)z^jbVvf0RSHTn5d9L zx7%*53l0jia{Y;>*dPin@?15AEYl<98W@HXUuw|?$*dVtfm9P&?`+g3T16oQ`I3PT z|8jbu6d02qb1E0#f-{5(Z=sUoaxNFp^}A5HV{7;M7v0`sus7#3WPdp0HqId*+rGce zV`ZKIEElRw{90~DOD2heK=V-x0buL_9JldW8+dp)#UTBL=k`J-T z&kLu6&CSvIOQWkd#y8#`T)onrItkjv){Dho|2q5X+xd?_EMIRKd#M7W6G!o}&NL}8 zo8K{#wvQ&ib&nMcTD{~Er949Q`q>M=SUY)T@8Ic+=U*QjKl3gvxgtf#8K%-y)7Gr9 zR1TrymP1)g#2rZ#4O$37%;yScYxU)d3O?u~L5@@kFk_3yWL8yiV55kCgsq7d+e~EF z`KhzgA8;XHN0x%zYfF+v-6X)BW?l|NH~=`wf@WWyL4+V&x%|sFUgM06uPpMmOg7wZ zyM7b8=t5MhO+!m7xWwo6)xv9S+jyyHiIpBvh0`!hW#y!mSBB%;LeCo8BWnZ)+T%qQ z{gEuT*7R&(Mi{{xSR_|U%rQ<@IgL(3Y*&hlOF64mOmM_@^a?zlNF#(Zf(v_q$Z0iN zUnZ5OKrNEMj(4=?iaG_FpC%UV0ZWdG=uEihrHl=$m;q?FDNbl)MlgqbhZmU0(+L48 zgcxfL$`DG5U=O94FvufIMRAu>6Cff>6u#%Mk-l?jBM#l_^p3rtFICPLuIy=9kL>#<;HM0gjAA@b*jNoYqAVV58MevMUaye z=c1b~HhHDQdz*iIdHthqIDdTj<*n`i`_b+{9Cl9(FhoHpD-z-Y^;Jp%s*!*M`_x)u zBS0$CGC#W1O-X)-jU+SwMG7u$ z^%5i$13^C_s;uwrG$$;jgwm=&(ds2x+Q&ojsI=JG+sUU5lHcU$pYU*8D3l^Ms;h)_ zwW8!JAFYIe(!+yDCNDWuYq47x9Wv-SOQ4}N>FTeVB1jR4SZ@)M1`!Qw~}bBYBjR1|rNGMP@98!~i2Bw&@>YLs5x25)5|K zMdUY-l)F%>thP5qWmaC{u&*mgaW%Orkt-zb8m$$oezwu*^uIzp2&x$ z@H_w{n3Dv9H8+e&Eh#G#+dm0AS(gztAx{nQtQQD)^e6(cDGXUJDZH!$y6QZle);Ja>l4p6a|Odk$*V+BS#?n2eTM2Zi|?9eM7z!z4ki;; zCK5BbjsKh`Go|sV`aIE*LR=CFF7Q}c)x`%ea|T++DOq(4G0fY5g`9+uHKKbwFs2<- zorkboVej^;J%#6(514se{fLo%8#RTqpnW1OX4!dxFnmsn5{0)?=sL3 zMmj|@O8rWOM*(EI+3K@2GC61=Nan!1zo4+(|JI`PlvM^n{cy2N6R!fLrO-ROcqkp0 z<5U|VmTS53Wj2#|W%G|TJVmM6qR$Hp1fBIH2J(eQld$g7T@f$HbwwAdwhUHO$&e+> zOBZz&X%rwyKTt%u3H~rMrz%{a2+Mp6@wrPDsTFC!bH&Vy55$l$Q)G$=i^r=>^4ug5 zFch|-Iwc=bi4$4*7;D)}!Bw%*Y_!pxJvF|zzPzyP){ZvTmTwK0CkNd*d^=n|Voiwa zBB8*d0DGcAzaWHkYTRA~i$$yPLUER!OoOkFit=fEEnUS4f>Nb4Ltif6*dqw}9E&~{ z1~?$>1Js|&a!<}|c;@oxtq)i|4R&9%Ae<~`Bkwk)MR6fx%rjNN!_`UU@sJo^Fu1qF z%jkR$*!GKV#!nDk7Xg(^X6PZb=8vCtJM-oJt>s_;sy*Wg58fG`J3qYn-tfauhBw|F zojx}luk*Xs#rBKY!@n->-(K9iy?pejd$rXa@U{({ogd;FsWHKd2z-r032w9MeG6y| zA_ZOiLMJfeB+!YqD`(DqdgAmuN5=siPz3xG04#dof*v~e`L~!Nt5G*vWeVdz9XN1{ zB}$2?6uC#I&LNd8hh(t-?@b)yvb2;UA{Gf4 zF8cEfA5k7k^L3yxQuxD5j%HFrumop0zf_YG#o}i(Fz_&ylWB)EfUg?#W`Oq5Gq43o z8jfktjOeb=gi(D;H-~*3#ewN8Ym&0o%#^tKkXlYfz{Q7b7KFTl<>27x#f#?;ww^wp z4o+OX^zNk#?+u63z5U%|o;-~9CdZfnkM@-EO0X9*nW-u~qF>)sji3bd6Br)L9JVTg z+gMM5r0|4=R1(n|5k03=sg5Scu2#~Xxnu?08yPwainxv3NTn9}=FBX8=J@pZ`r8|S zdvpC)>!bCpQzN)W;#dpAQwfhG zRjNs;{P5r6lXS@mPD=xa1lfv`x)IkgdP`6@gH_&8*LR4_@lg3ySXy$d zUjNg&d-4K^J52nqnCsNOPYLcjY+`; z%p6AQwxUA_Tm_6I>2O(p^4cAmbPj1>TDh&X#-lPJC4^c*meGHO7mF~^68Yq6Fv zieKrEK&}w}&rDgkag-U95){Km7sKG4p`70Z))fpoC{npg(@~m2s}q4%WAVjPvXimk z*%v(eZS@FBU|>(Cs&KN=;A-#PmC$>cQOE^CpF8?9xs?)VwFK2aK-Fn_nY)YlXFZ9T zx%7wfeyLzix(aB`)GapI32&=sA?bZu5~VMt1W_JY9q3NZY=WfndnQ<8OOGgdh`Eq1w!bu3e* zR7G@19@Elkk(GxE#&bdG5XmNk%NXm&e7z>8C3;^EYGTHkeJZ@gA%>CagGdi%;6<}B}K|^C^rY!z0QFj3bG(LV1FO2AYP zu&6qYl8XwA@`sVNbPOp~6DIf84!k9SZ-ofY&@wP&SGIm9D;s|F60?~sp?PIqcV=^X zV{`oOba{SwFq{p?N2jLCjpg9NfVaaBFAj(N-tq-+Z$^`qn)(wgB8?41u?}Yvj1Tp* zJ_wE0QqgQQY{Cyx=o=Sw8p2^hUL!0@Y4!>My99ixsIgG$l|ME_a-XlPdH`(PcRCxM zyfD803C~;MN5hM!_q&5vL!Ka;%SRCNrU}lq5NwOt0Z)AC_V-4++t%0QBrgo?_Fs9C zka@rD)aSwI>*JEVJyQm?E-tnNrk)fY0aSwZ!8u(ne@c^`LpLf+Bp3# zS6H`S-Fv-rXTEsNn^hGT7kM55FOp&N?b-RZ-g9N!T8YH8Z`n|;mKNxgMO5{AToD4Z zsPRC#){Y>u<#JPTHozKninpE83jQNkZ`LG9l4a-l5?e-OW@YXB+Dmm0y4j7v3?U>1 zeBuKMitxYjg+GMC7YH9HAOHa|Y;dMA&1RvOsjf9^$;_%;Vs#I9e&0E2p4nsJVXn(v z&b@k7P1VfYEQ)M3BCTYIqBiA5xX1>7xhu0x458Tgiy$Oet91LgGGtXoh>}bp1?i_C z&1gem07$BYA<1wnT8gQYT7fhK-PvQ11fA}>Vo|lRYDmxx+2BB$!;V$32a&6bWC=rV zk#HT5ExN>@3mnum3r?_Azp*Sa1b!r){FZF!6%}&9s8=Erd^fAqY$}3Ob$*+0sv&9R zQ;y7$wjwek#zTOFf|e1(0h|sPI;tYI@xxlNfTIiIfkB_d%;q_!=ZHbQeVljUPy#Df zBbidhJy__?X+dMf#!v{5V}yztx~LEO;6#gpf-1-~q6vhWF$O{u*b%2dYG||!l|vqB zIOy=)w$5u(PtVV}0)O}X@zu%E^KZQR!JXT$uCA^xF3zqQG=_#+2WS;(p;8rXMC3cF zrz+S|Rb10PHY!5~>q$kV1PBdQl6*@_Z&$_L(oWD=j8X1QZyk%88ZDo!KESblvb)EEEKh`Ss7|0AeruL zAo4VDi${YNZ5kIzv`K6TOY|sW$6zs~d?;3!`{D`yr-iA|{++mTgscdtE%Yf{+Suf9 zt#?(DEv3H?Z!n*M35=OE1e%wXGA?S0fAD)_3maD> z{n>^BGDJA#)n+iWP6H=3&R`H&E3grcyfF_$Tn1wn2-BQ=<1*2@CU<_k$NMw9n=}&G zb$MeGxLCyv2!`IKKvXSt5r}O4Gz2D)4DKv*U}Sl1oz*x-Jh%(HnOyNxPiA4>{gpL> zmK&vNqJgq5r^KZuEKJmBS*P8uZtziBTv9!2C|gsMxFjV4b5-0QO>vD5q9u(2RgUrW zwa!t1=&iN<=xi-Q3u9tD)E;SPptN&+o$RxZJe3rI7BOCHa|GfB7f(J6Jk?DBMICJ)N;NIck*e96qB~O4QWWAp+PC~>;g`v zn795dZXX}KeSG-V-r}|od5^~~UOasGm(N|^SucLEn0-i#QZPx$xa`UG=Pm+Kl zwCFD`dvPdAdG^N29|Qu4)})LiYcnfpS(-R&MHY?tsu5yabPZ{hLB)q!TaVwYGHV2l z3p`fqM28pUy|SuCL}QJU?{7wOL^}FRny!hstCx3Q4r7_`F5vxJRZd*BLC@6Hy#c>qT z+|=-D4TEHK2<7h|(2a9lU4I5^BglaQkowtUC+IVD_~=~}XqTF-Qlfi1l7#k3HmY0^ zX<4dZ35}3!g7B54!l_TW@*}5$<VnA!q5zw)&t_YI#{1_vl~Cs( z0Qz`Of1)` zLFgtytPAyEZ%x|3gM~UgG|16^m6*5Xl#fLbMN|uqipC7oq}iv%t%5!c?F%HRbVV(L zV&gqhq&*UGV8=Nfxz$r{4>veR2C68J6UYuJq79_#qPzmd>7XQPY@%<*vC%F^(A46L z`Qo-A6i0C}@s_H?{mly}M{mFR+Rxv9_h$!32VZ{o@gG0?Pxl{vzMfw&QE~8j##0!s zIvW(TD@<)Ij9Ah^s9&r=nULc~6UZCoaexG=4--X0s9zGMLakMs=lxF4XC3!4x`NH$jw!Q4wBK z*(u1(v;{`^EZ6Jo;c#r!tBMM%QmAO3ijWNZ##`)?Z--8ndMbLNacVDWrYaf3Bvo{^ zAWZQAK*9_jgT!%3B~O_gUW2)4VXB{E$xi&BukR|bno&B~wXd=z=3jyV(2PYxv2KB@ zazZJAu5w-=9ean1);WjCfzQI6atjTO3&*5lYU?3ZPAz*zk)|<|sRE%5HU*BeQBk20dEX_cSQ9*0?!yjU21>fKoIx z?us6Xr3pPWIx0VdXE@cdQ;R@HT0@|(y0XCE4N6r@VXL>WP*j~dDifdfLqM?gJL8MU za?CQYW3;uMqQG7GqR&SyIj*tawSGV$l$Rl9>6HK8GzXplvn4-aTx?h(Ce6}>U}~djg_wNtW?#p#M;caIM6ud z@;U$-?T=ZN=>t0~#E_+9SOAUo<#{j>z}lvoU6 z20p*H=_1mZ#YmW9Hpm2%y%mDAcNo#6Ki(c35xQQ9 z=9j%(60{$9X2e@ppPbGfKbSo}opbi*>Vlz4<(*z=1Ni8w6c9Yopaa_uwRDFQsn9Qw zYg-o)sE7(JCaiGj-v08&jiWm^j$gfT^gJE!?DFxG?|*lG_SNQC1rIFS@yNo3^K}v01tUz_xt3pH4>}HLD6ofz+Fa}ld=RQUeCJHoYlAJ>k zVs!{g8BcI)*6NIO2oVFy`-3-zZU|z7$^s{Mt&efr9!mJ?3tE_66vZKU0o@K4h2`nJ z4yvj^BwE-!o5C%um`!uQ-|k60)nP<}N4$!GpbjZzN+CoDp;#y2Ons>6fJu|Zv8^92 zg=RD#2^7cG>Ir@L$pqxC#GW?9N|>D511}aSHT^ZJ74Vc^*047rBPn3h%Q*Dl0DR>P zL*SIuQfX4=;Q}*=Oa|_Vl`F>j?h`&ZDkd8?Q45ual6nsz;iJw2Pn6eFgWfUF34=#r zC`*idm6_E`!+Dx+bTZ4}sLvVZCug7W#==iNc>kZj`^Jx6zVp@}KmY9~cmMwM>RTSE zhRoU>kx?Cd2oX{PQSRufc>ElM;g zgW!-B6(!gupE^hWDo~=cI`-(I!%iKIw50~zumL%WYLrw$Z6O_bepOjrL7L5xK{{)Y z)-fSuDSmpegMtRMivcD5ZphOKb_kDF0#FtLBGD2yeZ?35&`_6ovIL=gdfZe&$n;lO z8b?H?`2;QFPe4YnM9{jcD9A`KLQ=ypRoki>byPk>W*&M9+my*cr3^M}(xoRxvq|?r zQ;krQ9sbx!YeKw3gkZx@D7RWzp*a*o!+KB(Om~--dup`J$pc!bF95YU@8=Y|>of;G4nRI2-n0`bi**l2 z?gR()I>nV9Tuht1uZ+q)7Iw~YolY^Ipdr1`!h(}3O>>onqhcPAQOYF+R+7x;0>an0 zd;S9<>Filaru8uoz?mMPm{|m`P-jjeVB1$+AaHQOLBwIK7qFgEI0wwV!;I<18o+$X z6?0SgT`T9pV0;A_=PMk)d4XdVX>dhnyv%uGHrHTIn50ApICXy}m$3xXAYiH!7kUX5 z9{#qj>`cZvX=|-ww%}?INkK*=aKOeOjOJ<{(=wNQF64!qaxwy-4bbNus-%_6LB$oV zN}$7&PTy$-+gAyCCi8p^)bqAmZmd;(kkfR9q?yo#K3LG?kdyLGOlWc=f-I!2cRZ zu2pWfK`UwvP@+#uP&Gy&VT&UVSKiizom#@wC|EI&nuNJGnx!it> zGi)W44Y0;zK*fz6e1`jIUF}7MeOxyJ!z<`ZTPKWAXrw=a6^9(;Z5VcH$*Ly!G?>z; zrZMf*YaSN5_xgLASKhsz9rApdeO7~Ce6+oMge*>$c=3~7z!`tE;u^sDWa1U$(EclT z7I%&}#4T4ZF1X@%xxKu&e)wQ^@pyLeh%A%QEO+@8p8+B`=d2kqKt_AmM~%NUJ-}2! zso2p)JjaV78=Vp8U1W+jz zU-0miK^XT!sf}8vk;vEhG!@@&NC$=uVQb+XY{3iuCtBUxifJi)ZqiN3)h4awEfhmo zEXbl)?ZGxUn?@4^IJ^l85t6pi^Pu2rziTiWg2GCaZ)E}O2!JfhD>$IKo(CsKv9K24`3K&c_doW&Fj+Ws?8LVNLx@# zCzVXKy50U2FY#Nx_G|UlgBq#$kR~KZBb7qSDn#QIFKr6d=3g4eR#pZD;X?Ij6J~U zDlm(Adl2kNqZdl@L5Z@+wa^l3+5}`;qp@!4VyC%;m$eqg;c){^CINrKv2XF?>D6}c z;+xaQryt$>_M4x*|L)I!`TjqD^X2zG`sDw)d;j;mxI%S7jZ_({B3@8I9jJ$GgG3=Z z>`s#NALy}OR+RP&5XRK>U(j+;!G^{lk4^3n9z#&+m@}kXnp%p&%ooWN(H;$!&3wJQ zy?E!Hn}7MnjSmm^4j-*P|I?#?|HYI4>wNRIZk``VuMSCnmA5R~2RI$Lolh{q?jErNZQdJanhD)V{Qc(d7jwBSxC|Wu7UA4#4kjqSK2dO%7o4X8O z!ogjZ#*~22qFSkO#Wlh~Q9(AOiW36eNEK-~)ozzZ?+$o`piF7viH3X+yVIBxy=anF zP~;;S&KRjTRGPX9Q_yIUw7lH1MYgucm@?7 zVM&H8hnEPk336I0&4fY(W`OlrrVNiAQCpLT`BtH0h&BaR^gd&wa^y7_1eBDJJRG1% zu$KBkk|w4ktw74SmY_Z_S)f2bxrdSjfa5JCJ?6@1U`Q?K;ATm~ znuIk2e-2T^K@OkJ%i$o47$>Q=pU3LFgb*4}sPp5(PT#%Qm1uBr;FYxK!Y&)bp#%IB zy5@n^+cov6(`Y8*il*7(IxQxE2(21v`&z+)-X)VU#0(6(@<1A(1s~r|%ZfEoh{!r= z9N#sf-axQ^V!5=>HHl2x66hW-^`~G{?vzIxE#El5!=2cFg+m&#gus{wCh90jog*&y z&AI}l5;lAdRO48`p)GA{Z=sbV2TK0pS(^a8V3wGVUX77D(H4LJ;aF1S0T?OuGRN9r zfeA&T(#2vn9RVqV2wVv;NtG)MQ*>P%Z%AbLi1W2NBu?uS5)=?KdX%-FELarJd2mvK z(lT3R1tJ}bJ&Li8UFcN?jb>VcYh2m-q)JH4>NQh-dDK*7ur^^SGJ_firVe6>B(>em znlo^(M{arl-*dN*e)QbQ&ySX`5IDAD=W0p~EPC3};_R)XHNP7~`{UW1hpyjQ z%#Lip*~x70z2)9(d-IF=^+R78p%Ro)RYwGvXoVTD?E09={b5n) zGj_>Nxl?wfj53I88$&ofan0*W7caj)|KU%sUw(6w-|6l>{%-y8Z#PfwHIRH_>8->0 z!Cr3{&vkiTtH5gj*9(4jdwRBcaBss4;_rSr`{vW_x1Vnx@FbWA+jCw-ap{_YmEth3 zK#LPJ3`BgG*=syF1t~OkF~|7tmZl*xF$bSKJSpo*S?0)Gs7 z<%62IC6$|pd(uZnhA+=kwCO~Q2!}zKCdkT(`>oV6?TT$S%g$1SXsj*l0LZ0mxe&sC zK#ng&kfkbXS1OHLw@AykIxHIy6qr0DZlpP##PGsqC|Ebfii}+z*X>GC?T*oH^tiSZ z62=y64z|0S1yW(ZW@JlG*Rg1TCjC95qG5n9-qX+-%SLgrtYVnW>PofbG8NA>O&f!*d`>{B>Z9ahS=B8k`E?=RQ zY+xa|+t7j#$ZVaM`)5+s$`&Ek9{@NcSs7aZDQ$(TZzaf7(jYExRsQl%qRXGTLN znPCV;D}#XMRhUxz7CkJfN=ZaiDRNTY`jQXYQ4~-SGlWz`bo?W+6MTy+%9b54S~PK_ zxup?H`A8#F)@lZr_9kQ6mKee!%k0j4_)6AxVo_6RS;xuVxO+RU*HQ zSZ_6j90VD(x+R*UrruRll-F+&gutLU(w!u1rV&)o2%9A zDEBDpeQ(?GOutx}W9LEhdR8p1vV_RT!?UJGjx)Nv7>$J`n)GP?D5Xgwh&eXUj0ygG z)sJ$C@-)DC6F z&oT;y1y~!8;vQCWYb`a-?_otFJgk$opi>JX@`lQT|t{yaaahz5JwqK!$bbwPyCVRr9x$U3SYmWiZyXo>Apq` zr>Ga4{B{htfYE?51M|6na=^(6EJ(Yk= zz@RE2f(}>vTtFk`dlx~c!QmE?vu-$2;B`C-WTy&y@N^8v?c95V+r2i3@i@RV!VsPS zQ&i!g%-0(zG=b|6=Q$IS*M_&;MdEdz;&c=GQl7hkvoS@z&wq z-z`_aqISK#a8>CkHh{tJ)EsOY5JPoR9E4**o{leeV$Hb1IMfEX%xJKwtni~qM*u6F zauFI3+Xc|L-9G=^?49@5FTB2;-{3Om5!YtF{rc+D-)|n>r{&QfvAo&h)EL;Tu5A$) zc+uo7AhR><jjLswDHmx@B*NDhU$isL}2kZZy=9#28#U)F;;nI zN3Yuo=@cfh0W}asr~L=7kmD~+X$9P4l~TV}eA9ze8Emc)nc``b? zRi(E!bzsX0Fr!nR-gl6}i@w$_i8iF;G~8h$s+0{0)H`e#KVlHME#zq+!po&He-7m% zj8iG|ppOuMhf|pupj_Y?#90&Q7Uk9~MI@H1MMdF~fPb?|8Y0x-d;Lk7O;u12ZD@hAyZh^XL-BYB+sI~x;tx4sCvE_)+8Mddr z$4%q-tC6&k7K7OiuE~h8j6cvNV#36C_;rLtU!=h*EaP$Z$&EZU15Vgb&+K~0gfH03x9L@ctjL}F#AOqvks z9&61?Ordjw>V!0@oYj)0B9!BwApC27CoqjSbpZVba%i9my9tnMjx6?HQl;Q4#DXbH z_d>L4n2cL8$W$KE+>((?3*7_=auTFkVNrs_rc47?olG`viv>3LHQ!7C3e<#U$ZI0< z;BJe@A`eDU8nPh?OJjjxs08mCSc$%=9oHX?%E;Goi<*~ysJpvss{ zAB9^il;n%!oGT?z#s#)3=?GBX_~$wUR@n$1B%DF1)XiJeO7FO;SkzFdA5mKK11We| zIH|j@@em&quXMgiEypu_?vf9&BGq)VN|f4b5ph>6W98%)jRXbC6nR;I zsS7;fX_1B}XUA+oR>{cW(dU_Q^jvSiV3(u%(t1DzQN8C^5M{ z-amcg_?j+YpxG!}UM~MF%fi{>WWME2Snl<_HQRfCvH#xw;?{C|x!7`7BXc3{_Y{=q z^rXuBL8TqdtoFE(X3{H}1!5LeZv;%CC<7=}v5t1(Tn8=61E^koe*2^MHb4B~>ZRAW z%fo}s{P_H0^XVs-pZsof#xGuwk3g`{xmNSd`C@%JpIx%RtyO^$m-67zz|vK9f>3SE z=%*DRLvcN%qeO2>ZLyz{Hwv7|#sy07REtYQ$aqNW-tqp87Y}Z|c6jTJsU@P5SoMqXK)B< zY%zZHxmmba&up%IhOM>-;10Hr+M+pQtW~yz7ML)2vWeD`=9R2zWNlHm2ASPcoaLm7 z<|Vo*8?PuJfuHQBvQRs5M{-+y8ZhmWQ;EKcA!tq$|3qb#jfMPX9ps1<~1%jHj_6r@7s4e%0> zw_&9VeK?cJC=D1J3nB$+PDVxPNl-&qXj-CYaB7;y4)EfM1Vu?2Y?b+E5!et4T*4_X zt?gkNJ}ejoQVIya(i}A;y~83wDiApck!pA(#Dgz*qR7Uyfh8M_2on}^&ggP8e{yzt zmuHZk-hcAk$*Zrw_Tio9-r8O-FU}ubU!Qr{4o}QeP%x=8sX!f}MH%X{mq?A~LKxkV z(QL~@i>&xdkd6RQVOI)CcauCth7JkS5zbBav(@r?erNIS4{!cAAKd&epF4Qz;rjF6 zJ^bH)_wZjmy!zdC$sv18B_jkNMO0PE)HOQ1TL?`G!rdsSfCM2$nq+-!EU%?dc?mZ6NAHl~`XPl+1f3ia4WW(mS6vE=+`3!uSn*-$rXAsg7N3s2#- zK2}j~oCq@ljAYTsT3tKi!)1j$6H5RWH08234tE}&z(&29CR8DVJfkW#D9xO@RSK*L z<{K)OiJ_a!l#7W1{tJB&?X`z2768^VT2y_(S@F+VhhvIIlcKayCq zNVAdjT0}k-m9iiRtcVH-`fJCN2yD4f1QzznL~I#DhL?0yfS0&FDYmLkeX*$5D(wot z`FJvj#xOV?xg=5P;8IQ^6OBeffG9<2p^+kq7M2(AQ&g0gO6Ws4z{nGUiAjZsJT&SG z{U}VBQPjg>G{&0F=|8@aQCR?XA}ch`TIZa7R)ah?!g*!2K@@9U^Ki7Ln3DLVVj&!1 z0RopX3_ILqhAs~Fj4)il;q4TVczqHSiiL%Ht2Bl+4#cL=l19t3SD=asacZ5&Bs}*p zK1?9*QfdNs>;wP&6e>B^AXOLLg%Kn-@(vEtROqIK_g%<)==5W(;nIcdQmjetA zGy)LMjx`Lw#_=$gMz?LSNhh>K72t$av23Np7N0yGF?ykDl!*Xzgd0+wNk;FusYEYT zjLim4BIKM@2!R(oS7BESlUNVAI?2^>KcZOp(AC-ZrTJ82-qbDc_EN^`=G zAb2TZqm`KXw94$ql9Rzh*Ch2-m@%WAmD@Ft7 zA==p8gJUrIEqcl+16D8_(%dgV8qc$0zOi?3YkB?Y`?!0sO!aMu7Ut1nNhx>S3 z*5#A?r{8_?fMbt1+Uf40ih~Wd;e6!OpjvIc^!nbwgY^Ri`0GZ|u zo6tz1Vq~MfOeF%C=B1eaUlz z&}8&0RrkVVtiYvlk+=ezFB8&}NMK|z5kqa|yPbU?5gg6kjtL`_crT~A2FNZui4Hw# zjHoFCl-Ne(PzJKXX5X`r>Z)PIWy3|q1O-arxD}P)pUILIdAw6m&1H6|rLN>hb-<8O zqcshduuFpADQza+87vsY*rk$q#)v38WLX^QPmA1>?)a~K`ePU=hZO-PlG03w!&SX{ zHC1C`H{lj)(vU&F%hurt2%5M_x&{W>cq%LYSGSfPTBYoA@mq4K_pxl-%hmSL zlhd!hzyIy#a`D2g*I#|@gX0@7u6Rl4UbBAfR%O=s*47_vheX4EisGg`}8}?1iHWakA1$ixxaCWw03jt$-++Zy*N&~QrI<(znLKYrL|BNwB zH?>ae8bTwh5R_1CFq5eHlxBxu;4k=NcGmehwv6v}G}x>Tp2Y^l(Nij%D0wM$Ar zY>BoQXkj-s$C(jkS*peXy0C|V5uqf51k=KqJ>yK&n_={aCJrN4MdSoq=X6ijDPQKO zq1QhiIU=7#Bq)o7QwU{`E%Unc&D2_|byDyNWA%3bv{1TGm#>iQG7~qo>5YohGZDxR z10inbqA>8t$_B8M$B~nbVJ$*v%!Sf#1ckmHrZ}{bQy<1sCGWOMARE_>;=+SCg&G~k zDjJ29Zs+@N{m&dHXh~&y81}jjM{Doia$?O2hc#55!f!bX7B27Y*^EpNS3LfUV+>TR zMwl#dM=6vXqWG!I(qAMx$>X@gn+(02z=BhiagEmiF%~b3regBOs>}r#2W;5+QI9_l z)0=T+$QlrZ2dR;!$1?NC99MI74*y6tfF$Oz`%v-QFn(0GV$PQ*&Ka=YL89IM@id() zJp5R=gEH1Mmlv3nbqGr0Fvzlwa>6YeR~Q<- z);fK)*u^S{NwY=*xpQ|`O~{tW|Au8con^ z?rd-_did~_eHXYmnG&7IoS&R+<%Ljvk~y3>(g!-RD5U6RUIM4S(n0713k|1Zm`hp2 zA4YlAW#J9RlsjDms2U-JhjR)9Ms(3it^ftBx0%_a7lRzBjVpL~9IZClVKz8Q9sGN& z<`M)6?#+XYX*(fHQ;N%fn+XP;qb)|4FjH-lH;^zYjb#nK&|zu%gmlsdpCak2wbWqJ zYm~Xg$1$7I<(=Dq_58^%X4iOW%q$@>29RI%G`gmEIHqWCvpIeF=-z+z`ud2AmQW?~ zM9l}7*Rz}3`FqQQpYAU|SZohQmz#U*`T2V8U5c`e zd99~8DDjq}2<$4+i1)NLWcrzPj`5>K6mkbCz5K@h{DqUn>vyhSyS0Aq=7zI27u)&e zX76-%aQ|}gr>{1jeL6d3WraYd^@yr(9W7>@3}13%Go4!1X$X5K8J$3pw^njm->@+z z_}=myiOZEQc%Zc+Q(hdXqwKy~WQ*sF82y?hoWIkXAKqLZ+??$laf>GJspotNH5iZ?MYHqMPOmzzx#UMw$>*#tY4fd%eghy#zE*V@Be(dun4cEs{u3mkjI^a+t2YjuM8e8~Gt} zWGjsf7U?>BmSnmg+RD+bLvm|d1sMQ`MhHX;;Z&#qx3uQaj3E;7U&(w2q=k@Dn=6Fc zYu;_plR#I(9;lY*WSpl0X$8gt5;zcV^hW2npyC`(HqliAhs7TXALUb!{ zRkc>+)(ktU-zv({K59!5N+TrngDD+^BFk-F&1ID1R0To-37kk7PKGQYp@zUV0cTVR z6%ig>+>3Syu{@c0gC-!Dsf9RNYlE06+%bx(%Fz`|02ld?DNw&hEIX>$M~hXEhhtP1 zNibUyvO2XK1;D{-ey~43KAOM${LP=d_0G>hg4oK z`_kciZ{PUYiwEzmH>n0Z8Hp`BLaUDs~zx(=7cxwV`-w>3~|XGRGG7yAK6+x7cSFN)*QlF*PQ4 zII0V*3iUKB)a?L3CU^#BVXd6Q9Y3gMo;sRP(NuS+MnG@Ly6UqS6xD|gbF$9oD@jd7_dfPxrGZ=QGo~5 z8;OHQBmxdGX>5dQ($Zq_H}wo93`CAqK~irI!4gihUGF&$ zVrcni7S5@~!wKC}7Blwsb;& z@EmBhbyt6O240ME$%pY8sfxBU-z$9XEueZs5v)cKN@(%|HyAS)*E%0IgL;YFTLqm8 z5$OdS=Z+MM1R?^^c@hPAh>kZyYLelu=kq5eZAN_ZW$Q{pVstqzRiF}Ojjv2=uS6L- z0iaJh&DF6mXyx_#@bHa0Cx0<#HORsh^^ra)+GQ!#S?WpiO<4TaAE;KFl{kOqxskC`9G|;pIywqyqtZv-ac9JE5rrQ zIr1$#U`8f!!zXKBfdkqy*6j`jIFzRcpByY%2R?T=d+~(T;QZ#%`f%TiWveagOooQ# z_vgz`zT5o6*PHLYoAawVe4zWm3Qog|j5}eYp!5CV0##C}GDuL4qhoJ?kmdQKL@>X` z3p@M-0E-QtOv45L{lz|afgTZf#`yl>@_-9^YB!p%R@ax`Zy%rYYrXC2YO_AyaJMQp zv3X$`lD)-^6ZFkEaXHV|{$uL7$|KF;v1Sf$KN2XqTo^1vV%eR4|5RVoMxCgY*ny8NDMp zj5;t#fZ-U&765#MN;PeQIK)~@!f6H;W0`M>pV<$J2p4FiXr@%jvS+|ddF&olJ3SCr zmFD;?Wls8#pgwR>$TuH-rbzG$rS;ycLb=Xov=LW8)0&=rBhM=>d3Ok7NKB?P%E-oP z2vzuyTS}D2KuyFu6kDac1g0}PLI8p+ZJL9ZJ4sZ&F#p;lW2>L&fPpK26^;nFg6BN7!ce8+;`Tp)EI(cl`Z zc*BoPogQW;Etr}0Ar%--l@x50!|yTCc^HL?LOq)5W60>uHj!JjQI+q66jY-wQYF$6 z`GTw-gc%be&?>Ukj{C(vvMQ|`Ie47%yYuzw+3A1&{K2Y+n<{Bn(~n!K$H-TFNM~T{Va=N1=w6Rc>*a6u}t43XK>F_2>r&%l-RTfB5|IufIP3_0{IS&y@B#q8{GFhL8vydW=#*1oKe- z6s<&pg|Yhz$X*tqhk6nj3B;R6Z8gONHL4^zcUD+7ebGR8iKc1k#Hdi!vsVd?)J(fo z2NPv0Ch~P3%>GGZm48Opvoa~+6Wq#{*}Wtw$FiYms;ZdC2)*3Tu*elfQ#p0crAxy% zVD$6T>Pi048ThIPHbil)V4AD0aF3m&5$>*jD}pGsmQGm}HuQ*{;P{rXTP&)llwQpF-(kpPYR;L0&K6Jcn7A z^KIsc9(Hlk^=7&6tH8KgX#43h$hdgOF(LyO?j<1-57q5S=s=D$Jd|UNDRA|qmjDzP z-)N$*mG$VtYlhI^T#ZQ;6*3Vp+Mqd5IdDaVi>?sJrx%^ub0B1MMw};uV6=BY*!*1l zGak@NqkAW+Nj8_bcqS8L+@?Ng1q@=N(^{1x3R#&58o*AbbKJ#t#uC-)=vWOq3l|)R zZj|7A2NyjdWc5agjY|$gR0D-dS&)!G1Km=Lw1r1^9ywFbv&RXTiBbcNEKjZQXwCX9 zBd~Ia61XALxpA|70Usa|32~Gc9)0R&m3Tdk1B1HZv`kxsjN1}D>=X)pLe&ex%z*P^ zcT`{sCC)bRVVG2-y$S;_i%-RPIZDGrl-Za7(r{Gca7=eo8}=mxvp&RPH7g-6ZTBtq zxC=SMQHn`JCPD&30umsw?PV7XHx(z5wO?#O7t2L}VQE$c;TAuPmfBm?<^7k63`7sv zS|~+}oR1RrQP#jK7VU}_UiuPFOTMrwzKc9=l8E>_pWB& zujk)i&3GaF6>^!5dv<{Sib%&90v^VLz3t&*c4NM|c{DpdyguBY?Qy%OSE`*tGY`Dp z?pci`}D zXx)9?} znHaPEm6M`&x&>hC0VAw7ru7CGDY`!y|A*x`g<_pjHe(`ISXjo9hsVIP7#R7Ib|{CI zs8_RHF*5N61obw|p^P<#IHH;st!)}Et(FA=;3+A= zLEg4htZqCoyflY@Rftvcd`c#-_vxk6#3Jwc$Nxl>gmzxySpjjBLxKFR=TYHlGUOuw zmvFj4K1u{98bx(QOIG%b9SVn!lNgtEN+42EgKA{ z#4s#4Btb&Tcfj(vINS>*cyJ50H@Z^mSvG1=6EA2KH0ByM@ty=wiO}-YHr~l9R#Sn~ z40~)3@-{&RCF>x|5h|w2CuRPmmYwTvtIhc}uR7kGpWnOp;NfR)zVwT?-udvK{pi2D z`~8Q1{Nh&+9)G-^aW{CzDAmTXiV6U1$~Ytf1%gt^qj{fd7hVyENVkeEn<4@V;TjOz z=~JXZ1pW&GpFX$l(>vBN0I6gpfc(H zr~=Q};*uhSkOcqnGFr=_fG`MyR3vGa!bR5|iXAW(G;X7#EW+aa!c!BnQTX2?Y-Sz{(lah{x1 zHvULT9B(ATt%W!-EKd|`qW12_E0^!-PdLWvFLFNWB+{k*f~b zg=%64P@I@HD0d8H0>HF{3wyu;#c~QNQD{m8O|{?z6S~u~G;$h6PTghA)A2b*)@~&# z+-f$iz33x0u3Le`36>7Qdpus!S5SDg#E-o^s9-^P$uAByRKU+ZfE8kBFzCW%p&?@D zWitX&>3PQ(1Z(VZ$>5EV9GqgH4cC?f($s`DE|<23g*6%Rp2>HxL6OA0`V_CiNI`Ci zMm~PfNYWF53JjOLr zDg6mtfiWROR3Q_P{LIfQ4LDOd}peq-;ZbR5CKULE zYL;`J-4GtpV9(R1z%k|2#iq42Ia1;-YVm;A-#q0B9eb6sQ7$Zx$|{!;KuE;{Og*C) z%aQJYfL}e$0D)dG#Rd&5kt|wDa(EUU3}*F7)tBqVuUGST_m)3cY~R@1-d=K9 z%P7KfUW~_^)t_I^-rZkZpYYl|eqp%1x?bcZmJaW^ExJRrCl~M$dqmrCv#l>p;N-h* zAZQmv{-dkex2LmD@6A5FKfm{Qaj|v~aTE{|obZ{%_QkSy7Q`}|qfa%|Sp=eO0UaQF z$gqW!Q17In0)i{6+>gMU9yZ*DO`~0M^>4f7vL3b(KAhcP{RU9=BRWnZ<(=UcqQq;4 zt)`rdjwfl{_3ZMTI>Qn+UJ$?FuJW~)J_&WYGcItX;Di+?&Nj1sZ=m%`pb(iTgN>fW zH7*_;wVYiVjkXfuN5WJ!8Y&40gD*u04uK@85#0bNfkrl4a*Db&1}4FkU!~TgJq{$| zs=4G57R=;Rw8Pe%4i8J6)GQ(t!avRlB)`b=kH84O% z%ZjUw3m@tYA^t2D6-~oFswp9DEO1tWN-1NL<&kMVMkbWalqRB-=>OPuS-p-r{YW%T z)e%L8Qavdq39RlH`$XC(MbV_)#!4_d`oUIC2UW*9dc?G%3)Cp2zjC0_!|IW}Iz5Y* zMntyIQiV~)gtWTIy)yv0rIB>nBClkTZmpP8PTE9TQ$J5FQ{P98bkZmjif9;}tICEp zGnL746fmogxR!q>Ly^c^cOB{BV2orNbY*dHl1N4&Pp_ zpM1e{M4$Y-2baIw%rA|0N7gVa7lq1i&#EqcU_D>%by!NI=>VGI^hjWgI$c)|Ys)RK z3aBzd5X;%X9G28bfp)e+2FQXdA|qA+6_t^}bVa)lISIDflPU?ww?9IKf@*Ld@%b7? zQAn2m`gvdw6kBAQR)UQfl|dbusgF9T6|XQQS4D(tC=%2VfyfCT3?a2J+N#u~Lrpj8 zQeByrO^W@lvQQ2JN|^pvpx@GrHC2X=`b@pqc4CD$U{GQA(BA=V^Jm+^j&+{FiFE4( zJh@K#$l^e&VS%yZwWP=gm2QD1szN?Bbd}1UX}NX7uiBJc^cT54c2iqQJZQFx$Qu=* zcLZa`W?46kg+j&>B%}{QX;nJ9^dU|NL<3n44U;-_ zNk5I`ofzTU8c9txN~QXU4q8RzlZFVgoelui2{OmDus|OnF@&_zf@G+PT~Mk7eTXyR zmV{JwsU=fUrL?=1F;LYNJVSPbm5IG7_@xpr0b}Bh0UVN%Ooi7la+eHCBgnG;&e281 zsKnzPce?(GROfa`)XxlT9K(7N^HV zND7^yi#rEq7HAyF$g`+Wq)RV_XohmoalPUfXuic>BrbCJrkLrR4@qP#p@RU(%oSn& zY7ZeKkAb@2#@|a`!yjDxd za*-3Iz;bwsr!aN}Lh{^al_~&RlheSodyvXY3Xmx9eopeW!F#lXqnCO|mH^dn=fPSr z>TbNtCCYdZ?Z4IGlZ4x@Yow3+O>-Wtl$w6k*r#bs$A0g-dMuheGA7{i*W z;K+BPW3}L2UIIp$nbk4lVaACAST^gUS|xJlPgsHueX2_wNFA{Bj(hFm-(+^lq=0P9 z^1IcVr3k#xjsuTr3Ec6IWXD8=hb$H_Q$4>vynA}};-SRp6aF%bVBsN`yqu7eITzrs z2$y5qd#la2tNE{I+ZXrdZ!P9;?#*A`;~92b@k6mwI2wSMI-G3|(8$V8wMTksTCUi{IqlA5 zH<2?=uHzNz5DX&I*dJG;{qQ!Ip|)2Kx9jsnIs*5AN`(6$9P~RJa(ak6Vh?9WCq5yD z&()=UhfYKnAZuJPuGx+OsQD%3Qry`YdF6Bap*N+BMXS^=RE zxB}fwvP;K|n< z%jGs?g&cUu&tENQPY|=CpyW0jsNv#lpyqk`4laZbEfrb71*1fJan1AoVUoC%1$ksT zR3hIn?4O=hPj$t^xQXG7Qwi`;;IEOrZtOWePXVY-W{)pvI~@{vw7%Evp+Q=jhHv%q z(czM@!AL`3U8)k^+GGPsQ9AY}t1j)*s*tH45hbA$`X`OSGpXtEtB%rSL*P*NC8^Y3)R4e<T73gRbVY8;J%oVU zQgNq|_^uI@f(AQu3!*$byth7jaqnF&48DBy9w(dcoqzPn!~gKr>2I!P-(~#aRJD3z zXXLu`Qe%XT5UO1E9r{MCd5PVlFXno*fIgBm zuUT0&(Z1j6e5XGWe$i0Op&aamgoIWl{31J$NGVfIwslpgGHA`RrCh@P%bgH$r|ko$ zo={GxrhrOWh&0cbq_xW)Hm8o2tawuSirDmp3Xf>3ki;fWwg5~+R7&X@SrEiE6*$Nv zBDi&-K93J84Q`2n9QhS)!6=tl0l|+y-9}l3scQh=PQS*sorwu zsIBo^weZ7EXkj=F-!oQF_Gl{)_44!pVRmY0D~h@R;(SOggn_s&fhA+iu{ee(5&*bD z>%{_XGxA#(-T!D;MJX ic2FAgJ`|DbWxy0i*aNlp(^Mf+QwZ{lK4)280nav0OL%O(B8GKzB}vC2Gs_-@fEU0VbaGkGBL=ep z)#@2*LFDs(YKPWY=qXxmneq2jw4-9sXI!M+0pv ztyHWFR9v1Ti0de;b&z}hJZ{;{HiYY_gfH;xF`nN8jimY@@g)*$av{n+UwTT{+mBGl zi3v~%f+}D{t9LZw9R05$q;Wg0SUBnJ%pB`1A5hFC4vgdcN0flXOJsn&^Z$% zi(Z@FyKt$XHZ3Kuk%O^eELTf9*2pBiG>KuGH6>Vpc5W4ArNKoe3hOy!rmLlhLj0CL zA&|8Va0=I0kMCYyy|=zN;aaN#U9edzfo+O9fLN7_s9wUF&v<^!r&rrgyk&Iz+ez?bW4?#cOJ=*KIA$bLuUNXa@@p$GaLeN;F^V zCoAI*UIS+5z#jUvW-N_VpEJbT&tKtgPG{Q{{mio*+$MT> z)9ZeOD^PF_SNPL+)B@)96K?+Gp`^L?iE6I%^J7hf;H(AH&Mns`>rdoch&C)r!gMSP z9*w5NP##@0Sxc>I@Mw}-FjLx)NZy^k!W)XQQfg0~7#4L+m@5GIazBHiY)?^zSk?UR z6vL4;yb%wuN`H!0`g|N~2Hj3^TCmcfp))|SqiKSDG`8(ROH24#yo96OQ*$7LyP~2n z=O{BMvHa_}L@fbO7#JKB3JJUVaSjf5P|YZ9u*aZCt}9slW1GVZhb;ys`)qr)O+18F zCcL&?umzZQFKEgRl(D&3Np*a4pFvv=>2MxA+ej18OK-G7n{ZU zdcMAT{P^MTKYiu?&)<6cpZ)v?|Kg>GZ+!a2-`#)or`6&#euq!*$*e-72oK`U7FZ!F z#b&Gt40Tc?A@$QgNx%|CKCo)OUff>3_V&roUO)cn@hRjf5dZ){07*naRO0z3tFQm? z=x;uK`0r1z@2bfGXy+Cgt2I)!Fr7T2RiTC`u20OiKvL6`_-z=6*s`RQLy0FutqyU# zXEs#X%T1#DxFeK9>N8bkQ|Plzr(_u9@joK7tR+{7ax~qhXKz6^%{2=~p*=$&duckf zCJu23(iB?@LsLbf5`bKi={xiM_e+*AlBcAotfZXg6@)pJwzncAyoR&~+#pl~