From e99079abf85825c6f6ddec9fdb42121a69d5a1b2 Mon Sep 17 00:00:00 2001 From: RXWatcher Date: Wed, 17 Jun 2026 19:09:55 +0200 Subject: [PATCH] =?UTF-8?q?Server-side=20Kindle=E2=86=92EPUB=20conversion?= =?UTF-8?q?=20(mobi/azw/azw3)=20for=20in-app=20reading=20(#171)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Kindle->EPUB conversion: design + proven wasm build pipeline Server-side MOBI/AZW/AZW3 -> EPUB conversion so the Android in-app reader can render Kindle-family ebooks. Conversion runs in-process via libmobi's mobitool compiled to wasm32-wasi, executed by wazero (pure Go) -- no cgo, no external binary, arch-independent, sandboxed untrusted input. This commit lands the design + the validated build artifact (spike done): - docs/.../2026-06-17-kindle-epub-conversion-design.md (Codex-reviewed; 9 review fixes folded in: failure contract, strong cache key + negative cache, wazero command-module specifics, FS-sandbox tightening, double-gated capability, serve headers, .wasm guardrails). - tools/mobitool-wasm/{Dockerfile,README.md}: reproducible build of mobitool.wasm (wasi-sdk 25, libmobi 9062742, zlib 1.3.1->wasm), with a smoke-conversion gate. Build proven on native amd64. - internal/ebookconvert/mobitool.wasm (+ .sha256): canonical artifact, built on amd64. go:embed target for the converter package (next). Spike proven on amd64: -e EPUB path works with --with-libxml2=no (internal xmlwriter); converts MOBI6/KF8/HUFF-CDIC/unicode -> well-formed EPUB; verified end-to-end under wazero (WASI preopen + argv + _start). Build gotcha: link libmobi against real (wasm) zlib, not --with-zlib=no, to avoid miniz duplicate-symbol clash with mobitool's zip miniz. DRM gotcha: mobitool prints "Document is encrypted" to stdout but exits 0 -> detect via stdout + output validation, not exit code. Not yet implemented: internal/ebookconvert Go package (wazero harness + cache + singleflight), read-handler wiring, admin flag, client capability. v1-scope proposal required before PR. Co-Authored-By: Claude Opus 4.8 (1M context) * ebookconvert: converter core + cache (Codex-reviewed) internal/ebookconvert: in-process MOBI/AZW/AZW3 -> EPUB via the embedded mobitool.wasm on wazero. Converter compiles the module once and instantiates per conversion (isolated). Cache adds on-disk, singleflighted, size-bounded, negative-cached conversion keyed by file identity + module fingerprint. 18 tests pass (DRM-free->valid EPUB, DRM->ErrDRMProtected + no output, oversize/corrupt/missing/timeout/cancel/after-close, 6/8-way concurrent, EPUB structural validation incl. stored-mimetype + container rootfile, cache miss/hit/key-change/singleflight/eviction/negative-cache). Codex review fixes folded in: - timeout/cancel classified before generic nonzero exit (WithCloseOnContextDone surfaces sys.ExitError special codes); no more bogus "exit ". - DRM detection scoped to known mobitool diagnostic LINES (Document is encrypted / DRM key not found / Invalid DRM pid / DRM expired / DRM support not included) -> no false-positive on book text; Print Replica -> clear fail. - WithMemoryLimitPages cap; capped stdout/stderr writers; MaxOutputBytes. - read-only fs.FS input mount + dedicated writable out dir; documented that FS isolation ultimately relies on running as a non-root user (memory-safety is the WASM boundary). validateEpub now requires STORED mimetype + verifies the container.xml OPF rootfile exists. Atomic moveFile. Closed-guard. Co-Authored-By: Claude Opus 4.8 (1M context) * ebookconvert: wire Kindle->EPUB into the read handler + capability endpoint Server now transparently serves Kindle-family ebooks as EPUB when the admin flag ebook.kindle_conversion_enabled is on and the WASM converter initialized. - handlers.EbookConversion (converter + per-request flag predicate) on the read handler; HandleReadFile -> h.serveEbook. Kindle + enabled -> cached EPUB with X-Silo-Ebook-Conversion: converted, epub MIME, ETag = exact conversion cache key, must-revalidate. Failure (DRM/corrupt/oversize/unservable) -> raw original + X-Silo-Ebook-Conversion: failed + no-store, so the client opens externally. Context cancel propagates (not a conversion verdict). - GET /api/v1/ebooks/capability advertises {enabled, source_formats, served_format, header contract}; enabled only when flag on AND converter wired (double gate) so the Android client can decide whether to flip mobi/azw/azw3 to in-app. - router: buildEbookConversion compiles the module once at startup (feature off if it fails), cache dir is a sibling of TranscodeDir, flag read per request. Codex review fixes folded in: ETag derived from the exact SourceKey cache key (id+size+mtime+oshash+module version), not a weaker hash; no-store on the raw fallback; open/stat failure of a produced EPUB falls back to raw per the contract instead of 500. 10 handler tests pass. Co-Authored-By: Claude Opus 4.8 (1M context) * fix(ebookconvert): harden conversion cache, HEAD path, and artifact verification Addresses adversarial review + CodeRabbit findings on the Kindle->EPUB feature. Correctness: - Stop poisoning the negative cache on transient timeouts. Introduce ErrConversionTimedOut (distinct, non-wrapping ErrConversionFailed); classify the per-call timeout as transient and propagate a caller's cancel/deadline verbatim instead of reclassifying it as a conversion failure. remember() now only caches deterministic verdicts (DRM / failed), so a one-off timeout under load no longer wedges a convertible book onto raw-fallback for 6h. - Detach the singleflight conversion from any single caller's context (DoChan + context.WithoutCancel), so one caller cancelling no longer aborts the shared work for the others; the cache is still populated for the next reader. - enforceBudget never evicts the entry it is about to return, and skips other conversions' in-flight "converting-*" temp files. - Cache hits refresh mtime so the mtime-ordered budget eviction is a real LRU, not FIFO. Read path: - HEAD is now cache-only via Cache.Lookup: a hit serves real converted headers, a negatively-cached source serves the failed contract, a miss advertises the converted representation cheaply without triggering a (minute-long, ~1 GiB) conversion. The GET still delivers the body + authoritative verdict. - The admin flag is read through a short-TTL predicate so the read path and the capability endpoint no longer hit the DB per request. Artifact / build: - Add an in-code provenance test (embedded mobitool.wasm matches its recorded sha256) and a self-hosted CI job that runs the ebookconvert smoke conversions + provenance check, so the committed wasm can't silently rot. - Pin + checksum-verify wasmtime in the build Dockerfile (drop curl|bash). Docs: correct the design doc cache-key + setting-name descriptions, document the HEAD/timeout/LRU semantics and resource limits, note DRM-marker brittleness, and fix the README markdown table. Co-Authored-By: Claude Opus 4.8 * ci: remove ebookconvert workflow --------- Co-authored-by: Claude Code Co-authored-by: Quick <31828688+Quick104@users.noreply.github.com> --- ...026-06-17-kindle-epub-conversion-design.md | 96 ++++ go.mod | 1 + go.sum | 2 + internal/api/ebook_conversion.go | 103 ++++ internal/api/ebook_conversion_test.go | 39 ++ internal/api/handlers/ebook_convert_serve.go | 184 +++++++ .../api/handlers/ebook_convert_serve_test.go | 271 ++++++++++ internal/api/handlers/ebook_reader.go | 5 +- internal/api/router.go | 4 + internal/ebookconvert/cache.go | 284 +++++++++++ internal/ebookconvert/cache_test.go | 297 +++++++++++ internal/ebookconvert/converter.go | 468 ++++++++++++++++++ internal/ebookconvert/converter_test.go | 247 +++++++++ internal/ebookconvert/errors.go | 35 ++ internal/ebookconvert/mobitool.wasm | Bin 0 -> 541347 bytes internal/ebookconvert/mobitool.wasm.sha256 | 1 + internal/ebookconvert/provenance_test.go | 33 ++ internal/ebookconvert/testdata/README.md | 12 + .../ebookconvert/testdata/sample-cp1252.mobi | Bin 0 -> 108476 bytes .../ebookconvert/testdata/sample-drm-v1.mobi | Bin 0 -> 86580 bytes .../ebookconvert/testdata/sample-ncx.mobi | Bin 0 -> 28999 bytes tools/mobitool-wasm/Dockerfile | 84 ++++ tools/mobitool-wasm/README.md | 64 +++ 23 files changed, 2229 insertions(+), 1 deletion(-) create mode 100644 docs/superpowers/specs/2026-06-17-kindle-epub-conversion-design.md create mode 100644 internal/api/ebook_conversion.go create mode 100644 internal/api/ebook_conversion_test.go create mode 100644 internal/api/handlers/ebook_convert_serve.go create mode 100644 internal/api/handlers/ebook_convert_serve_test.go create mode 100644 internal/ebookconvert/cache.go create mode 100644 internal/ebookconvert/cache_test.go create mode 100644 internal/ebookconvert/converter.go create mode 100644 internal/ebookconvert/converter_test.go create mode 100644 internal/ebookconvert/errors.go create mode 100755 internal/ebookconvert/mobitool.wasm create mode 100644 internal/ebookconvert/mobitool.wasm.sha256 create mode 100644 internal/ebookconvert/provenance_test.go create mode 100644 internal/ebookconvert/testdata/README.md create mode 100644 internal/ebookconvert/testdata/sample-cp1252.mobi create mode 100644 internal/ebookconvert/testdata/sample-drm-v1.mobi create mode 100644 internal/ebookconvert/testdata/sample-ncx.mobi create mode 100644 tools/mobitool-wasm/Dockerfile create mode 100644 tools/mobitool-wasm/README.md diff --git a/docs/superpowers/specs/2026-06-17-kindle-epub-conversion-design.md b/docs/superpowers/specs/2026-06-17-kindle-epub-conversion-design.md new file mode 100644 index 00000000..7b14ee96 --- /dev/null +++ b/docs/superpowers/specs/2026-06-17-kindle-epub-conversion-design.md @@ -0,0 +1,96 @@ +# Server-side Kindle→EPUB conversion (MOBI / AZW / AZW3) — design + +**Goal:** Let the silo-server render Kindle-family ebooks (mobi, azw, azw3) in the Android in-app reader by converting them to EPUB **server-side, in-process, on demand**, served transparently through the existing read endpoint. No external converter binary, no cgo. + +**Status:** Approach approved by the user: convert via **libmobi**, run **built-in** to the server as **WASM executed by `wazero`** (a pure-Go runtime). On-demand + cached, admin-gated, DRM-free only. This is the MOBI half of the "all 9 server formats in-app" goal; the CBR (client-side) half is a separate Android spec. + +> **Linchpin PROVEN (build spike, 2026-06-17, linux/amd64).** libmobi + `mobitool` cross-compile to `wasm32-wasi` (wasi-sdk 25, libmobi `9062742`, zlib 1.3.1 built to wasm); `-e` (create EPUB) is present; the module converts real MOBI6 / KF8-hybrid / HUFF-CDIC / unicode samples to **well-formed EPUB** (`mimetype`=`application/epub+zip` first, `META-INF/container.xml`, `OEBPS/*`). Verified end-to-end under **wazero** (the prod runtime) with WASI preopen + argv + `_start` + exit handling. Reproducible build stage committed at `tools/mobitool-wasm/Dockerfile` (with a smoke-conversion gate). Build-config gotcha resolved: build libmobi against a **wasm-compiled zlib** — `--with-zlib=no` makes libmobi vendor miniz that collides with mobitool's own miniz at `wasm-ld`. **DRM finding:** `mobitool` prints `Document is encrypted` to **stdout** but still **exits 0** and writes a (garbage) EPUB — so detect failure by capturing stdout + validating output, never by exit code alone. + +## Why this shape + +- Pure-Go MOBI/KF8 *parsers* don't exist at usable quality (the Go MOBI packages only *write*). Calibre is the gold standard but ~300MB+ of Python/Qt — rejected as too heavy. **libmobi** (mature C library behind the `mobitool` CLI) handles MOBI6 + KF8/AZW3 + AZW, decompression, and EPUB generation. +- Rather than shell out to an external `mobitool` binary (a deploy moving part) or bind via cgo (forces `CGO_ENABLED=1`, a C toolchain, painful cross-compile, and an LGPLv3 static-link obligation), we compile **`mobitool` to a WASI `.wasm`** once and **run it in-process with `wazero`**. +- This keeps the main Go build **`CGO_ENABLED=0`** and pure; one **architecture-independent** `.wasm` runs on amd64/arm64 servers alike; the `.wasm` is `go:embed`-ed into the binary (self-contained); libmobi's LGPL is cleanly isolated as a separate embedded artifact; and — a real bonus — **untrusted ebook bytes are parsed inside the WASM sandbox**, so a memory-safety bug in libmobi on a malicious file cannot reach the host (only the mapped temp dir). + +## Components + +### 1. The WASM module (build-time artifact) +- Compile libmobi + its `mobitool` tool to `wasm32-wasi` using the **wasi-sdk** (clang). Output: `mobitool.wasm`. +- Build libmobi **without libxml2** (`--with-libxml2=no` / `--disable-xmlwriter` as available) so the module has no external native deps; mobitool's EPUB writer uses a bundled miniz, which is portable C and compiles to WASI cleanly. (Feasibility of the no-libxml2 build for the `-e` path is the #1 thing to verify in the build spike — see Risks.) +- Build it in a **dedicated Docker build stage** (or a committed `Makefile`/script under `tools/mobitool-wasm/`). **Commit the resulting `mobitool.wasm`** into the repo so the normal Go build does not need the wasi-sdk — it only `go:embed`s the prebuilt artifact. Rebuild the `.wasm` only when bumping libmobi; record the libmobi version + build flags next to it. + +### 2. `internal/ebookconvert` (new package) — the in-process converter +```go +// Converter converts a Kindle-family ebook file to EPUB bytes, in-process via wazero. +type Converter interface { + // Convert reads srcPath (mobi/azw/azw3) and returns the path to a converted .epub. + // Returns ErrDRMProtected / ErrUnsupported / ErrConversionFailed as appropriate. + Convert(ctx context.Context, srcPath string) (epubPath string, err error) +} +``` +- `//go:embed mobitool.wasm` → compile the module **once** at startup with `wazero.NewRuntime` + `CompileModule` (the compiled module is cached and reused; only cheap instantiation happens per conversion). +- **wazero command-module specifics** (from Codex review): `wasi_snapshot_preview1.MustInstantiate` the host module once; `Runtime.CompileModule` once at startup; per conversion instantiate with `ModuleConfig.WithArgs(...)` (argv ≈ `mobitool -e -o `), `WithFSConfig`, `WithStdout`+`WithStderr` (capture **both** — `mobitool.c` prints many failures with `printf` to stdout, not stderr), and the default `_start`. Use `WithName("")` (or a unique name) for repeated instantiation. Non-zero exits surface as `*sys.ExitError`. Honor ctx timeout via `RuntimeConfig.WithCloseOnContextDone(true)`. +- **Filesystem sandboxing** (from Codex review): wazero's `WithDirMount`/`WithReadOnlyDirMount` still permit relative `../../` traversal *within host permissions*, so **never preopen the library directory or the cache root**. Per conversion: copy the source into a private scratch tree, mount input **read-only via an `fs.FS`** (`WithFSMount(os.DirFS(in), …)` — confined, no `..` escape) and a dedicated empty **writable** output dir (`WithDirMount`). **The WASM sandbox is a memory-safety boundary, not a hard filesystem jail** — a writable dir mount can still be traversed by a compromised guest within the server user's reach. Filesystem isolation therefore depends on a **deployment requirement: run silo-server as a constrained, non-root service user (the container already does), so the converter's blast radius is minimal.** This is documented here and in `internal/ebookconvert/converter.go`. +- Enforce a wall-clock **timeout** (ctx), a **max source size**, and a **concurrency semaphore** (N simultaneous conversions). WASM memory is bounded by wazero config. **Resource note:** the defaults are `DefaultMaxMemoryPages` = 1 GiB linear memory per conversion × `DefaultConcurrency` = 2, i.e. up to ~2 GiB of wasm memory under saturation (plus the 256 MiB source / 512 MiB output caps). Generous for a small server; tune `ebookconvert.Options` for tight deployments. +- Map mobitool's exit code / captured stdout+stderr to typed errors. **Deterministic** verdicts (cacheable): DRM-protected input → `ErrDRMProtected`; corrupt / unconvertible layout / oversize-output → `ErrConversionFailed`. **Transient** verdicts (never negatively cached, retried next read): the per-call timeout firing → `ErrConversionTimedOut`; source over the size cap → `ErrSourceTooLarge`; caller cancellation/deadline → the context error propagated verbatim. + +### 3. Conversion cache (on-demand, keyed) +- Cache converted EPUBs on disk under a configured cache root, keyed by **strong source identity + converter identity** — `file_id + size + mtime_ns + content hash` (use the scanner checksum if one exists) **plus** the converter **module fingerprint** (`moduleVersion`: a sha256 of the embedded `mobitool.wasm`, which already pins the libmobi commit, build flags, and wasi-sdk used to produce it). (Plain `path|size|mtime` can false-hit when a file is replaced with preserved mtime/size — Codex.) A stale key misses and reconverts. +- **Singleflight** per key so concurrent reads of the same just-opened book convert once. The shared conversion runs on a **detached context** (decoupled from any one caller), so a single caller cancelling its request never aborts the work for the others. +- **Negative caching**: remember only **deterministic-bad** sources — DRM (`ErrDRMProtected`) and conversion failures (`ErrConversionFailed`) — so every reader open does not reconvert a known-bad file. Transient outcomes (timeout, cancellation, oversize source) are **not** cached so they retry. +- A cache **hit refreshes the entry's mtime**, so the mtime-ordered budget eviction acts as a real LRU; eviction never deletes the entry it is handing back or another conversion's in-flight temp. +- Bounded by an LRU / total-size budget with opportunistic eviction (mirrors the existing reader-file/image cache conventions in the codebase). + +### 4. Wiring into the read path +- `serveEbookInline` (`internal/api/handlers/ebook_reader.go:602`) currently `os.Open`s `file.FilePath` and `http.ServeContent`s it with `ebookMimeType(...)`. +- Change: when the source format is **kindle-family AND conversion is enabled**, resolve the converted EPUB via the cache (convert-on-miss), then serve **that** file with `Content-Type: application/epub+zip`. All other formats are served exactly as today (raw, byte-range, unchanged). +- Byte-range/`http.ServeContent` semantics are preserved — we serve the cached EPUB `*os.File` the same way, so resume/range still works. +- **Response headers** (from Codex review): `Content-Type: application/epub+zip`, `Content-Disposition` with an `.epub` filename, a strong `ETag` derived from the conversion cache key, and — because the *same URL* can return raw or converted bytes depending on the setting/failure — `Cache-Control: private, max-age=0, must-revalidate` (or `no-store`) to prevent stale client/proxy caching of the wrong representation. +- **HEAD is cache-only.** A `HEAD /read` must never trigger a (possibly minute-long, ~1 GiB) conversion. It answers from the cache: a hit serves the real converted headers + `Content-Length`; a negatively-cached source serves the `failed` contract; a miss advertises the converted headers (`Content-Type`, the cache-key `ETag`, `X-Silo-Ebook-Conversion: converted`) **optimistically with no body and no conversion** — the subsequent `GET` produces the body and the authoritative DRM/failure verdict, which then populates the cache that later HEADs read. *(Client note: a HEAD miss intentionally omits `Content-Length`; coordinate with the Android/Apple clients if any relies on it.)* + +### 5. Admin gate + client capability +- An **admin-toggleable setting** (`ebook.kindle_conversion_enabled`, default off) gates the whole feature, via the existing server settings mechanism (`internal/api/handlers/settings.go` / `admin.go` `HandleUpdateSetting`). The flag is read with a short TTL cache so the hot read path (and the capability endpoint clients poll) does not hit the DB per request, while toggles still apply within seconds without a restart. When off: kindle-family files serve raw as today and the capability is not advertised. +- **Two gates to advertise the capability** (from Codex review): advertise conversion availability to clients **only when** (a) the admin flag is on **and** (b) the embedded WASM module compiled + instantiated successfully at startup. The Android client flips mobi/azw/azw3 from `ExternalOnly`→`InApp` **only when the flag is advertised**; otherwise it keeps today's external-open fallback. (Android-side change is small and tracked separately; this spec is server-side.) +- **Capability endpoint (implemented):** `GET /api/v1/ebooks/capability` → `{enabled, source_formats:["mobi","azw","azw3"], served_format:"epub", header:"X-Silo-Ebook-Conversion", header_failed_value:"failed"}`. `enabled` is true only when both gates hold (`EbookConversion.active`). The read response carries `X-Silo-Ebook-Conversion: converted|failed` so the client knows whether the body is EPUB or the raw original (→ external-open). ETag on the converted response is derived from the **exact conversion cache key** (`SourceKey.CacheKey()`) so a validator can never disagree with the cache; the failed/raw fallback is `Cache-Control: no-store` since the same URL flips representations with the flag. + +## Data flow (read of a `.azw3`, conversion enabled) +1. `GET /api/v1/ebooks/{cid}/files/{fid}/read` → authorize → `file` is `azw3`, conversion enabled. +2. Cache lookup by source identity+version. Hit → serve cached `.epub`. Miss → singleflight: `Converter.Convert` (wazero runs `mobitool.wasm` on a temp copy) → store under key. +3. `http.ServeContent` the `.epub` with `application/epub+zip`, byte-range supported. +4. Client sees EPUB → existing reflow `EpubReader` renders it. Reader progress stays keyed to the **source** `fileId` (the EPUB is a derived view of the same file), so progress/annotations are unaffected. + +## Error handling — explicit client failure contract +Transparent raw fallback is **not** safe on its own: once the server advertises conversion and the Android in-app EPUB path opens `/read`, returning raw MOBI/AZW bytes hands the EPUB reader a non-EPUB body (Codex). So failures need a contract the client can detect: +- On conversion failure (DRM, corrupt, timeout, oversize) the read endpoint returns a **structured signal** the Android client maps to its external-open fallback — preferred: a distinct status (e.g. `422 Unprocessable` / `415`) with an error code, **or** serve raw bytes **plus** an explicit `X-Silo-Ebook-Conversion: failed` (with the original MIME) header that the client checks. Pick one and make both sides honor it. Never silently hand raw bytes to the EPUB path. +- `ErrDRMProtected` vs `ErrConversionFailed` are distinguished in logs + (optionally) the error code, so DRM books get the "open externally" message and transient failures can be retried. +- Module compile/instantiate failure at startup (corrupt embed) → capability **not advertised** (gate b), kindle files serve raw as today, logged loudly. + +## Testing +- `internal/ebookconvert` unit tests with **small DRM-free MOBI6, AZW, and KF8/AZW3 fixtures**: `Convert` produces a valid EPUB (zip with `mimetype` first + `META-INF/container.xml` + OPF + at least one content doc), deterministic across runs; corrupt input → `ErrConversionFailed`; oversize → rejected before invocation; timeout honored (ctx cancel). +- Cache tests: miss→convert→hit; key changes on source mtime/size and on module-version bump; singleflight collapses concurrent conversions. +- Handler tests: enabled+kindle → `application/epub+zip` body is a valid EPUB; disabled → raw bytes + original MIME; non-kindle → unchanged; DRM/failed → graceful fallback path. +- A build-stage check (CI) that the committed `mobitool.wasm` matches a rebuild from the pinned libmobi (or at least that it instantiates + converts a fixture), so the artifact can't silently rot. + +## Sequencing — spike first (Codex-recommended) +**The first PR is only the build spike + a tiny Go harness that converts fixtures** — no handler/cache/wiring until the linchpin is proven. Codex confirmed libmobi documents both deps as optional (`--with-zlib=no` → bundled `miniz.c`; `--with-libxml2=no` → internal xmlwriter) and that `mobitool.c` gates `-e` behind `USE_XMLWRITER`, not `HAVE_LIBXML2` — so the no-libxml2 wasm build is *plausible*, but the spike must **assert** `mobitool -h` exposes `-e` and a fixture actually converts. Only then design the handler/cache/wiring PR. + +## Risks / spike-first items +1. **libmobi+mobitool compiles to `wasm32-wasi` with the `-e` (EPUB) path working without libxml2.** The linchpin. If libxml2 turns out mandatory for `-e`, fall back to compiling libxml2 to wasm too (heavier) or assembling the EPUB in Go from libmobi's `MOBIRawml` parts. +2. **wazero WASI preopen file IO** for the file sizes involved (tens of MB) — confirm mapping + memory/time limits. +3. mobitool CLI surface as a wasm **command module** (argv + preopens) — confirm wazero runs it via `_start` and we capture exit status + stdout + stderr. + +## Committed `mobitool.wasm` — guardrails (Codex) +Commit the artifact (so normal Go builds need no wasi-sdk) **with**: the pinned libmobi source commit, the Dockerfile/build script that produced it, its SHA256, the build flags, and the LGPL license notice. Add a **CI smoke test** that instantiates the embedded module and converts a fixture. Do not gate CI on byte-for-byte rebuild reproducibility — `mobitool -v` embeds `__DATE__`/`__TIME__`, so a rebuild won't match byte-for-byte unless normalized; rely on the fixture-conversion smoke + metadata hash instead. + +## Process gate (Codex) +`docs/architecture/v1-scope.md` indicates v1 scope is not locked and new user-facing capabilities may need a proposal / project-tracking entry **before** a feature PR. Confirm this process step with the maintainer before opening the conversion PR. *(Decision deferred to the user.)* + +## Out of scope +- CBR (separate Android client-side spec). +- DRM removal (never). +- Converting at scan/ingest time (on-demand only). +- Surfacing a separate "EPUB version" in the catalog (we serve transparently through `/read`). +- Reusing the WASM converter for other formats (later, if useful). + +## Commit / deploy rules (project) +- silo-server changes go on a **feature branch, committed locally, PR-ready — NOT pushed** (per standing rule; server changes land via PR). diff --git a/go.mod b/go.mod index 6a6e3397..2012f0ca 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,7 @@ require ( github.com/oklog/ulid/v2 v2.1.0 github.com/pgvector/pgvector-go v0.3.0 github.com/pressly/goose/v3 v3.27.1 + github.com/tetratelabs/wazero v1.12.0 github.com/wneessen/go-mail v0.7.3 github.com/zishang520/socket.io/v2 v2.5.0 go.n16f.net/thumbhash v1.1.0 diff --git a/go.sum b/go.sum index 369ce3df..f9f7069c 100644 --- a/go.sum +++ b/go.sum @@ -197,6 +197,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/tetratelabs/wazero v1.12.0 h1:DuWcpNu/FzgEXgGBDp8J1Spc+CWOvvtvVyjKlaZopYU= +github.com/tetratelabs/wazero v1.12.0/go.mod h1:LvKtzl2RqO4gyF27BiXU+nKAjcV8f38U+kP/q2vgxh0= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= github.com/uptrace/bun v1.1.12 h1:sOjDVHxNTuM6dNGaba0wUuz7KvDE1BmNu9Gqs2gJSXQ= diff --git a/internal/api/ebook_conversion.go b/internal/api/ebook_conversion.go new file mode 100644 index 00000000..57bad66c --- /dev/null +++ b/internal/api/ebook_conversion.go @@ -0,0 +1,103 @@ +package api + +import ( + "context" + "log/slog" + "os" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/Silo-Server/silo-server/internal/api/handlers" + "github.com/Silo-Server/silo-server/internal/catalog" + "github.com/Silo-Server/silo-server/internal/config" + "github.com/Silo-Server/silo-server/internal/ebookconvert" +) + +// ebookKindleConversionSettingKey is the admin flag that gates Kindle->EPUB +// conversion. Off by default; toggled via PUT /admin/settings/{key}. +const ebookKindleConversionSettingKey = "ebook.kindle_conversion_enabled" + +// buildEbookConversion wires the in-process Kindle->EPUB converter for the read +// handler. It compiles the embedded WASM module once at startup; if that fails +// the feature stays off (returns nil) and the raw original is served as before. +// The admin flag is read with a short TTL (see ebookFlagPredicate), so it can be +// toggled without a restart yet does not hit the DB on every read. +// +// The Converter (a wazero runtime, ~no external resources — per-conversion +// scratch dirs are cleaned as they go) is intentionally owned for the process +// lifetime: it is not Close()d on shutdown because process exit reclaims it and +// there is nothing to flush. Memory is bounded per conversion by +// ebookconvert.DefaultMaxMemoryPages × DefaultConcurrency (see the design doc's +// resource notes); tune via ebookconvert.Options if the deployment is tight. +func buildEbookConversion(deps Dependencies, settings catalog.SettingsStore) *handlers.EbookConversion { + if settings == nil { + return nil + } + converter, err := ebookconvert.NewConverter(context.Background(), ebookconvert.Options{}) + if err != nil { + slog.Warn("ebook Kindle->EPUB conversion unavailable: converter init failed", "error", err) + return nil + } + cache, err := ebookconvert.NewCache(converter, ebookconvert.CacheOptions{Dir: ebookConversionCacheDir(deps.CurrentConfig())}) + if err != nil { + slog.Warn("ebook Kindle->EPUB conversion unavailable: cache init failed", "error", err) + _ = converter.Close(context.Background()) + return nil + } + slog.Info("ebook Kindle->EPUB conversion ready (admin-flag gated)", "setting", ebookKindleConversionSettingKey) + return &handlers.EbookConversion{ + Converter: cache, + Enabled: ebookFlagPredicate(settings, ebookKindleConversionSettingKey), + } +} + +// ebookFlagPredicate returns a cached boolean reader for a server setting. The +// read path (every ebook read + the capability endpoint, which clients may +// poll) would otherwise issue a DB query per request; a short TTL collapses +// bursts to one query while keeping admin toggles effectively instant. On a read +// error it keeps the last known value rather than flapping the feature off. +func ebookFlagPredicate(settings catalog.SettingsStore, key string) func(context.Context) bool { + const ttl = 3 * time.Second + var ( + mu sync.Mutex + value bool + fetched time.Time + hasVal bool + ) + return func(ctx context.Context) bool { + mu.Lock() + defer mu.Unlock() + if hasVal && time.Since(fetched) < ttl { + return value + } + v, err := settings.Get(ctx, key) + if err != nil { + return value // keep last known (false until the first successful read) + } + value = isTruthySetting(v) + fetched = time.Now() + hasVal = true + return value + } +} + +// ebookConversionCacheDir derives the converted-EPUB cache directory, a sibling +// of the transcode dir so it lives alongside other derived media. +func ebookConversionCacheDir(cfg *config.Config) string { + base := os.TempDir() + if cfg != nil && strings.TrimSpace(cfg.Playback.TranscodeDir) != "" { + base = filepath.Dir(cfg.Playback.TranscodeDir) + } + return filepath.Join(base, "silo-ebook-epub") +} + +func isTruthySetting(v string) bool { + switch strings.ToLower(strings.TrimSpace(v)) { + case "true", "1", "yes", "on", "enabled": + return true + default: + return false + } +} diff --git a/internal/api/ebook_conversion_test.go b/internal/api/ebook_conversion_test.go new file mode 100644 index 00000000..317392be --- /dev/null +++ b/internal/api/ebook_conversion_test.go @@ -0,0 +1,39 @@ +package api + +import ( + "context" + "sync/atomic" + "testing" +) + +// stubSettings counts Get calls so we can assert the flag predicate caches. +type stubSettings struct { + value string + gets int64 +} + +func (s *stubSettings) Get(_ context.Context, _ string) (string, error) { + atomic.AddInt64(&s.gets, 1) + return s.value, nil +} +func (s *stubSettings) Set(context.Context, string, string) error { return nil } +func (s *stubSettings) GetAll(context.Context) (map[string]string, error) { + return map[string]string{}, nil +} + +// The flag predicate must not hit the settings store on every call: the read +// path (every ebook read + capability poll) would otherwise issue a DB query +// per request. +func TestEbookFlagPredicate_CachesWithinTTL(t *testing.T) { + s := &stubSettings{value: "true"} + pred := ebookFlagPredicate(s, "ebook.kindle_conversion_enabled") + + for i := 0; i < 50; i++ { + if !pred(context.Background()) { + t.Fatalf("call %d: predicate returned false for a truthy flag", i) + } + } + if got := atomic.LoadInt64(&s.gets); got > 2 { + t.Fatalf("settings.Get called %d times across 50 predicate calls; expected it to be cached", got) + } +} diff --git a/internal/api/handlers/ebook_convert_serve.go b/internal/api/handlers/ebook_convert_serve.go new file mode 100644 index 00000000..6bff9da7 --- /dev/null +++ b/internal/api/handlers/ebook_convert_serve.go @@ -0,0 +1,184 @@ +package handlers + +import ( + "context" + "errors" + "fmt" + "net/http" + "os" + "path/filepath" + "strings" + + "github.com/Silo-Server/silo-server/internal/ebookconvert" + "github.com/Silo-Server/silo-server/internal/models" +) + +// ConversionHeader tells the client how a kindle-family read was served. +// "converted" => body is EPUB; "failed" => body is the raw original and the +// client should fall back to opening it externally. Absent => no conversion +// was attempted (feature off or non-kindle format), serve/behave as before. +const ConversionHeader = "X-Silo-Ebook-Conversion" + +// EbookConverter produces (and caches) a converted EPUB for a source file. +// Implemented by *ebookconvert.Cache; an interface here for testability. +type EbookConverter interface { + GetOrConvert(ctx context.Context, srcPath string, key ebookconvert.SourceKey) (string, error) + // Lookup reports a cached conversion WITHOUT converting (used by HEAD so a + // metadata probe never kicks off a full conversion): a path on hit, a + // non-nil error for a negatively-cached source, else a miss. + Lookup(key ebookconvert.SourceKey) (string, error, bool) +} + +// EbookConversion bundles the converter with the admin-flag predicate. A nil +// *EbookConversion (or nil Converter) means the feature is off. +type EbookConversion struct { + Converter EbookConverter + // Enabled reports whether the admin flag is on for this request. + Enabled func(ctx context.Context) bool +} + +func (c *EbookConversion) active(ctx context.Context) bool { + return c != nil && c.Converter != nil && c.Enabled != nil && c.Enabled(ctx) +} + +// kindleReaderFormats are the Kindle-family formats the converter handles. +var kindleReaderFormats = map[string]bool{"mobi": true, "azw": true, "azw3": true} + +func isKindleReaderFile(file *models.MediaFile) bool { + return file != nil && kindleReaderFormats[ebookReaderFormat(file.FilePath, file.Container)] +} + +// serveEbook serves an ebook file, converting Kindle-family formats to EPUB +// when the feature is enabled. On conversion failure it serves the raw original +// with the ConversionHeader=failed contract so the client opens it externally. +func (h *EbookReaderHandler) serveEbook(w http.ResponseWriter, r *http.Request, file *models.MediaFile) error { + if h.Conversion.active(r.Context()) && isKindleReaderFile(file) { + // Strong identity for both the conversion cache and the response ETag: + // id + size + mtime (stat) + content hash + module version. + key, statErr := ebookconvert.SourceKeyFromStat(file.ID, file.FilePath) + if statErr != nil { + return h.serveRawKindleFallback(w, r, file) + } + key.Checksum = file.FileHash + + // HEAD must not trigger a (possibly minute-long, 1 GiB) conversion. Answer + // from cache only; on a miss, advertise the converted representation + // cheaply and let the GET produce the body + authoritative verdict. + if r.Method == http.MethodHead { + return h.serveKindleHead(w, r, file, key) + } + + epubPath, err := h.Conversion.Converter.GetOrConvert(r.Context(), file.FilePath, key) + switch { + case err == nil: + if serveErr := serveConvertedEpub(w, r, file, epubPath, key); serveErr != nil { + // Produced but unservable (open/stat) — honor the contract, not a 500. + return h.serveRawKindleFallback(w, r, file) + } + return nil + case errors.Is(err, context.Canceled), errors.Is(err, context.DeadlineExceeded): + // Caller went away / request cancelled — not a conversion verdict. + return err + default: + // DRM, corrupt, oversize, timed out, unavailable: fall back to the raw + // original and tell the client so it can open externally. + return h.serveRawKindleFallback(w, r, file) + } + } + // Feature off or non-kindle format: serve the raw original with its native + // MIME and no conversion header. This path deliberately omits the failed + // contract — when conversion is disabled the capability endpoint already + // reports `enabled:false`, so clients keep their external-open path and never + // expect an EPUB here. (No representation flip to guard against.) + return serveEbookInline(w, r, file) +} + +// serveRawKindleFallback serves the raw original with the failed-conversion +// contract. no-store because the same URL flips raw/converted with the flag. +func (h *EbookReaderHandler) serveRawKindleFallback(w http.ResponseWriter, r *http.Request, file *models.MediaFile) error { + w.Header().Set(ConversionHeader, "failed") + w.Header().Set("Cache-Control", "no-store") + return serveEbookInline(w, r, file) +} + +// serveKindleHead answers a HEAD for a kindle-family file without converting: +// - cache hit → real converted headers (and ServeContent's Content-Length); +// - neg-cached → the failed contract (raw original headers); +// - miss → converted headers advertised optimistically (no body, no +// Content-Length, no conversion). A HEAD is only a hint; the GET delivers +// the body and the authoritative DRM/failure verdict, which then populates +// the (positive or negative) cache that subsequent HEADs read. +func (h *EbookReaderHandler) serveKindleHead(w http.ResponseWriter, r *http.Request, file *models.MediaFile, key ebookconvert.SourceKey) error { + path, lookupErr, ok := h.Conversion.Converter.Lookup(key) + switch { + case ok: + if serveErr := serveConvertedEpub(w, r, file, path, key); serveErr != nil { + return h.serveRawKindleFallback(w, r, file) + } + return nil + case lookupErr != nil: + return h.serveRawKindleFallback(w, r, file) + default: + setConvertedEpubHeaders(w, file, key) + w.WriteHeader(http.StatusOK) + return nil + } +} + +// setConvertedEpubHeaders writes the headers for a converted-EPUB response. +// Because the same URL can return raw or converted bytes depending on the +// flag/outcome, the ETag is derived from the exact conversion cache key (so a +// validator can never disagree with the cache) with a revalidate policy that +// keeps clients/proxies from serving a stale representation. +func setConvertedEpubHeaders(w http.ResponseWriter, file *models.MediaFile, key ebookconvert.SourceKey) { + name := strings.TrimSuffix(filepath.Base(file.FilePath), filepath.Ext(file.FilePath)) + ".epub" + w.Header().Set("Content-Type", "application/epub+zip") + w.Header().Set("Content-Disposition", inlineContentDisposition(name)) + w.Header().Set("X-Content-Type-Options", "nosniff") + w.Header().Set(ConversionHeader, "converted") + w.Header().Set("ETag", fmt.Sprintf("%q", "epubconv-"+key.CacheKey())) + w.Header().Set("Cache-Control", "private, max-age=0, must-revalidate") +} + +// serveConvertedEpub serves the cached EPUB with EPUB headers (see +// setConvertedEpubHeaders). For a HEAD, ServeContent emits the headers and +// Content-Length without a body. +func serveConvertedEpub(w http.ResponseWriter, r *http.Request, file *models.MediaFile, epubPath string, key ebookconvert.SourceKey) error { + f, err := os.Open(epubPath) + if err != nil { + return fmt.Errorf("opening converted epub: %w", err) + } + defer f.Close() + stat, err := f.Stat() + if err != nil { + return fmt.Errorf("stat converted epub: %w", err) + } + + name := strings.TrimSuffix(filepath.Base(file.FilePath), filepath.Ext(file.FilePath)) + ".epub" + setConvertedEpubHeaders(w, file, key) + http.ServeContent(w, r, name, stat.ModTime(), f) + return nil +} + +// ebookConversionCapability is the client-facing advertisement for the +// Kindle->EPUB feature. Clients flip mobi/azw/azw3 to in-app reading only when +// Enabled is true; otherwise they keep the external-open path. +type ebookConversionCapability struct { + Enabled bool `json:"enabled"` + SourceFormats []string `json:"source_formats"` + ServedFormat string `json:"served_format"` + Header string `json:"header"` + HeaderOnFailed string `json:"header_failed_value"` +} + +// HandleConversionCapability reports whether Kindle->EPUB conversion is active +// (admin flag on AND the converter initialized). GET /api/v1/ebooks/capability. +func (h *EbookReaderHandler) HandleConversionCapability(w http.ResponseWriter, r *http.Request) { + writeJSON(w, http.StatusOK, ebookConversionCapability{ + Enabled: h.Conversion.active(r.Context()), + SourceFormats: []string{"mobi", "azw", "azw3"}, + ServedFormat: "epub", + Header: ConversionHeader, + HeaderOnFailed: "failed", + }) +} diff --git a/internal/api/handlers/ebook_convert_serve_test.go b/internal/api/handlers/ebook_convert_serve_test.go new file mode 100644 index 00000000..f33451c1 --- /dev/null +++ b/internal/api/handlers/ebook_convert_serve_test.go @@ -0,0 +1,271 @@ +package handlers + +import ( + "context" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/Silo-Server/silo-server/internal/ebookconvert" + "github.com/Silo-Server/silo-server/internal/models" +) + +type fakeConverter struct { + epubPath string + err error + calls int + + lookupPath string + lookupErr error + lookupOK bool +} + +func (f *fakeConverter) GetOrConvert(_ context.Context, _ string, _ ebookconvert.SourceKey) (string, error) { + f.calls++ + return f.epubPath, f.err +} + +func (f *fakeConverter) Lookup(_ ebookconvert.SourceKey) (string, error, bool) { + return f.lookupPath, f.lookupErr, f.lookupOK +} + +func writeTemp(t *testing.T, name, content string) string { + t.Helper() + p := filepath.Join(t.TempDir(), name) + if err := os.WriteFile(p, []byte(content), 0o644); err != nil { + t.Fatal(err) + } + return p +} + +func serveAndRecord(t *testing.T, h *EbookReaderHandler, file *models.MediaFile) *httptest.ResponseRecorder { + t.Helper() + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodGet, "/read", nil) + if err := h.serveEbook(rec, req, file); err != nil { + t.Fatalf("serveEbook: %v", err) + } + return rec +} + +func enabledConversion(conv EbookConverter, on bool) *EbookConversion { + return &EbookConversion{Converter: conv, Enabled: func(context.Context) bool { return on }} +} + +func TestServeEbook_ConvertsKindleWhenEnabled(t *testing.T) { + epub := writeTemp(t, "out.epub", "PK\x03\x04 fake-epub-bytes") + src := writeTemp(t, "book.azw3", "raw-azw3-source") + conv := &fakeConverter{epubPath: epub} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + + file := &models.MediaFile{ID: 1, FilePath: src, Container: "azw3", FileHash: "abc123"} + rec := serveAndRecord(t, h, file) + + if got := rec.Header().Get("Content-Type"); got != "application/epub+zip" { + t.Fatalf("Content-Type = %q, want application/epub+zip", got) + } + if got := rec.Header().Get(ConversionHeader); got != "converted" { + t.Fatalf("%s = %q, want converted", ConversionHeader, got) + } + if rec.Header().Get("ETag") == "" { + t.Fatal("expected an ETag on converted response") + } + if rec.Body.String() != "PK\x03\x04 fake-epub-bytes" { + t.Fatalf("body = %q, want the epub bytes", rec.Body.String()) + } + if conv.calls != 1 { + t.Fatalf("converter called %d times, want 1", conv.calls) + } +} + +func TestServeEbook_ConversionFailureFallsBackToRawWithHeader(t *testing.T) { + raw := writeTemp(t, "book.mobi", "raw-mobi-bytes") + conv := &fakeConverter{err: ebookconvert.ErrDRMProtected} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + + file := &models.MediaFile{ID: 2, FilePath: raw, Container: "mobi"} + rec := serveAndRecord(t, h, file) + + if got := rec.Header().Get(ConversionHeader); got != "failed" { + t.Fatalf("%s = %q, want failed", ConversionHeader, got) + } + if got := rec.Header().Get("Content-Type"); got != "application/x-mobipocket-ebook" { + t.Fatalf("Content-Type = %q, want raw mobi mime", got) + } + if rec.Body.String() != "raw-mobi-bytes" { + t.Fatalf("body = %q, want raw mobi bytes", rec.Body.String()) + } +} + +func TestServeEbook_DisabledServesRaw(t *testing.T) { + raw := writeTemp(t, "book.mobi", "raw-mobi-bytes") + conv := &fakeConverter{epubPath: "should-not-be-used"} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, false)} + + file := &models.MediaFile{ID: 3, FilePath: raw, Container: "mobi"} + rec := serveAndRecord(t, h, file) + + if got := rec.Header().Get(ConversionHeader); got != "" { + t.Fatalf("%s = %q, want empty (no conversion attempted)", ConversionHeader, got) + } + if got := rec.Header().Get("Content-Type"); got != "application/x-mobipocket-ebook" { + t.Fatalf("Content-Type = %q, want raw mobi mime", got) + } + if conv.calls != 0 { + t.Fatalf("converter called %d times while disabled, want 0", conv.calls) + } +} + +func TestServeEbook_NonKindleUntouched(t *testing.T) { + raw := writeTemp(t, "book.epub", "epub-bytes") + conv := &fakeConverter{epubPath: "should-not-be-used"} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + + file := &models.MediaFile{ID: 4, FilePath: raw, Container: "epub"} + rec := serveAndRecord(t, h, file) + + if rec.Header().Get(ConversionHeader) != "" { + t.Fatal("non-kindle file must not trigger conversion") + } + if conv.calls != 0 { + t.Fatalf("converter called %d times for epub, want 0", conv.calls) + } + if got := rec.Header().Get("Content-Type"); got != "application/epub+zip" { + t.Fatalf("Content-Type = %q, want epub", got) + } +} + +func TestServeEbook_NilConversionServesRaw(t *testing.T) { + raw := writeTemp(t, "book.mobi", "raw") + h := &EbookReaderHandler{} // Conversion nil + file := &models.MediaFile{ID: 5, FilePath: raw, Container: "mobi"} + rec := serveAndRecord(t, h, file) + if rec.Header().Get(ConversionHeader) != "" { + t.Fatal("nil Conversion must not set the conversion header") + } +} + +func TestHandleConversionCapability(t *testing.T) { + for _, tc := range []struct { + name string + conv *EbookConversion + want bool + }{ + {"enabled", enabledConversion(&fakeConverter{}, true), true}, + {"flag-off", enabledConversion(&fakeConverter{}, false), false}, + {"not-wired", nil, false}, + } { + t.Run(tc.name, func(t *testing.T) { + h := &EbookReaderHandler{Conversion: tc.conv} + rec := httptest.NewRecorder() + h.HandleConversionCapability(rec, httptest.NewRequest(http.MethodGet, "/ebooks/capability", nil)) + if rec.Code != http.StatusOK { + t.Fatalf("status = %d", rec.Code) + } + body := rec.Body.String() + wantField := `"enabled":false` + if tc.want { + wantField = `"enabled":true` + } + if !strings.Contains(body, wantField) { + t.Fatalf("body %q missing %s", body, wantField) + } + if !strings.Contains(body, `"served_format":"epub"`) || !strings.Contains(body, "mobi") { + t.Fatalf("capability body incomplete: %s", body) + } + }) + } +} + +// A HEAD on a cache miss must NOT trigger a (possibly minute-long) conversion; +// it advertises the converted representation cheaply and lets the GET do the work. +func TestServeEbook_HeadDoesNotConvertOnMiss(t *testing.T) { + src := writeTemp(t, "book.azw3", "raw-azw3-source") + conv := &fakeConverter{lookupOK: false} // cache miss + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + file := &models.MediaFile{ID: 1, FilePath: src, Container: "azw3"} + + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodHead, "/read", nil) + if err := h.serveEbook(rec, req, file); err != nil { + t.Fatalf("serveEbook HEAD: %v", err) + } + if conv.calls != 0 { + t.Fatalf("HEAD on a cache miss triggered %d conversions, want 0", conv.calls) + } + if got := rec.Header().Get(ConversionHeader); got != "converted" { + t.Fatalf("%s = %q, want converted (advertised on HEAD miss)", ConversionHeader, got) + } + if got := rec.Header().Get("Content-Type"); got != "application/epub+zip" { + t.Fatalf("Content-Type = %q, want application/epub+zip", got) + } + if rec.Header().Get("ETag") == "" { + t.Fatal("HEAD miss should still carry the conversion ETag") + } +} + +// A HEAD that hits the cache serves the converted headers from the cached file, +// without converting. +func TestServeEbook_HeadServesCachedConverted(t *testing.T) { + epub := writeTemp(t, "out.epub", "PK\x03\x04 cached-epub") + src := writeTemp(t, "book.mobi", "raw-mobi-source") + conv := &fakeConverter{lookupPath: epub, lookupOK: true} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + file := &models.MediaFile{ID: 2, FilePath: src, Container: "mobi"} + + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodHead, "/read", nil) + if err := h.serveEbook(rec, req, file); err != nil { + t.Fatalf("serveEbook HEAD: %v", err) + } + if conv.calls != 0 { + t.Fatalf("HEAD on a cache hit triggered %d conversions, want 0", conv.calls) + } + if got := rec.Header().Get(ConversionHeader); got != "converted" { + t.Fatalf("%s = %q, want converted", ConversionHeader, got) + } + if got := rec.Header().Get("Content-Type"); got != "application/epub+zip" { + t.Fatalf("Content-Type = %q, want application/epub+zip", got) + } +} + +// A HEAD on a negatively-cached (DRM/failed) source reports the failed contract +// without converting. +func TestServeEbook_HeadDRMReturnsFailed(t *testing.T) { + src := writeTemp(t, "book.mobi", "raw-mobi-source") + conv := &fakeConverter{lookupErr: ebookconvert.ErrDRMProtected} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + file := &models.MediaFile{ID: 3, FilePath: src, Container: "mobi"} + + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodHead, "/read", nil) + if err := h.serveEbook(rec, req, file); err != nil { + t.Fatalf("serveEbook HEAD: %v", err) + } + if conv.calls != 0 { + t.Fatalf("HEAD on a negatively-cached source triggered %d conversions, want 0", conv.calls) + } + if got := rec.Header().Get(ConversionHeader); got != "failed" { + t.Fatalf("%s = %q, want failed", ConversionHeader, got) + } +} + +func TestServeEbook_ContextCancelPropagates(t *testing.T) { + src := writeTemp(t, "book.mobi", "raw-mobi-source") + conv := &fakeConverter{err: context.Canceled} + h := &EbookReaderHandler{Conversion: enabledConversion(conv, true)} + file := &models.MediaFile{ID: 6, FilePath: src, Container: "mobi"} + + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodGet, "/read", nil) + err := h.serveEbook(rec, req, file) + if err == nil { + t.Fatal("expected context cancellation to propagate, not fall back") + } + if rec.Header().Get(ConversionHeader) == "failed" { + t.Fatal("cancellation must not be reported as a conversion failure") + } +} diff --git a/internal/api/handlers/ebook_reader.go b/internal/api/handlers/ebook_reader.go index 6360239d..9082a80c 100644 --- a/internal/api/handlers/ebook_reader.go +++ b/internal/api/handlers/ebook_reader.go @@ -96,6 +96,9 @@ type EbookReaderHandler struct { ProgressStore EbookReaderProgressStore ConfigStore EbookReaderConfigStore AnnotationStore EbookReaderAnnotationStore + // Conversion, when set and enabled, transparently converts Kindle-family + // files to EPUB on read. Nil means the feature is off. + Conversion *EbookConversion } func NewEbookReaderHandler(authorizer *MediaFileAuthorizer) *EbookReaderHandler { @@ -130,7 +133,7 @@ func (h *EbookReaderHandler) HandleReadFile(w http.ResponseWriter, r *http.Reque return } - if err := serveEbookInline(w, r, file); err != nil { + if err := h.serveEbook(w, r, file); err != nil { if errors.Is(err, catalog.ErrItemNotFound) { writeError(w, http.StatusNotFound, "not_found", "Ebook file not found") return diff --git a/internal/api/router.go b/internal/api/router.go index cb05336c..f770bda3 100644 --- a/internal/api/router.go +++ b/internal/api/router.go @@ -515,6 +515,9 @@ func NewRouter(deps Dependencies) chi.Router { if ebookAnnotationStore != nil { ebookReaderHandler.AnnotationStore = ebookAnnotationStore } + if conv := buildEbookConversion(deps, settingsRepo); conv != nil { + ebookReaderHandler.Conversion = conv + } } catalogResourceHandler = handlers.NewCatalogResourceHandler(itemsHandler) catalogHandler = handlers.NewCatalogHandler( @@ -1993,6 +1996,7 @@ func NewRouter(deps Dependencies) chi.Router { if ebookReaderHandler != nil { r.Route("/ebooks", func(r chi.Router) { r.Use(apimw.RequireProfile) + r.Get("/capability", ebookReaderHandler.HandleConversionCapability) r.Get("/{content_id}/files/{file_id}/read", ebookReaderHandler.HandleReadFile) r.Head("/{content_id}/files/{file_id}/read", ebookReaderHandler.HandleReadFile) r.Get("/{content_id}/progress", ebookReaderHandler.HandleGetProgress) diff --git a/internal/ebookconvert/cache.go b/internal/ebookconvert/cache.go new file mode 100644 index 00000000..15d79f28 --- /dev/null +++ b/internal/ebookconvert/cache.go @@ -0,0 +1,284 @@ +package ebookconvert + +import ( + "context" + "crypto/sha256" + "encoding/hex" + "errors" + "fmt" + "os" + "path/filepath" + "sort" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/sync/singleflight" +) + +// moduleVersion is a short fingerprint of the embedded wasm, mixed into every +// cache key so bumping mobitool.wasm transparently invalidates old conversions. +var moduleVersion = func() string { + sum := sha256.Sum256(mobitoolWasm) + return hex.EncodeToString(sum[:])[:16] +}() + +// ModuleVersion returns the embedded converter's fingerprint. Callers can mix +// it into HTTP ETags so a converter bump invalidates client/proxy caches. +func ModuleVersion() string { return moduleVersion } + +// SourceKey identifies a source file for caching. Built by the caller from the +// catalog/file metadata. Size+ModTimeNano are cheap and computed on every read; +// Checksum (the scanner's content hash, if available) hardens against a replace +// that preserves size+mtime — set it when you have it. +type SourceKey struct { + FileID int + Size int64 + ModTimeNano int64 + Checksum string // optional; scanner checksum +} + +func (k SourceKey) hash() string { + h := sha256.New() + fmt.Fprintf(h, "v1|mod=%s|id=%d|sz=%d|mt=%d|ck=%s", + moduleVersion, k.FileID, k.Size, k.ModTimeNano, k.Checksum) + return hex.EncodeToString(h.Sum(nil)) +} + +// CacheKey returns the exact identity used to cache this source's conversion +// (source identity + converter module version). Use it to derive an HTTP ETag +// so the validator and the cache entry can never disagree. +func (k SourceKey) CacheKey() string { return k.hash() } + +// CacheOptions configures a Cache. +type CacheOptions struct { + // Dir is the on-disk cache root for converted EPUBs (required). + Dir string + // MaxBytes bounds total cached EPUB size; oldest are evicted past it. + // Zero uses DefaultCacheMaxBytes. + MaxBytes int64 + // NegativeTTL is how long a DRM/failed result is remembered to avoid + // reconverting a known-bad source. Zero uses DefaultNegativeTTL. + NegativeTTL time.Duration +} + +const ( + DefaultCacheMaxBytes = 2 << 30 // 2 GiB + DefaultNegativeTTL = 6 * time.Hour +) + +// Cache wraps a Converter with an on-disk, size-bounded, singleflighted cache +// and an in-memory negative cache for DRM/failed sources. +type Cache struct { + conv *Converter + opts CacheOptions + + group singleflight.Group + + mu sync.Mutex + neg map[string]negEntry // key hash -> negative result +} + +type negEntry struct { + err error + expiry time.Time +} + +// NewCache creates the cache dir and returns a ready Cache. +func NewCache(conv *Converter, opts CacheOptions) (*Cache, error) { + if conv == nil { + return nil, ErrUnavailable + } + if opts.Dir == "" { + return nil, errors.New("ebookconvert: cache Dir is required") + } + if opts.MaxBytes <= 0 { + opts.MaxBytes = DefaultCacheMaxBytes + } + if opts.NegativeTTL <= 0 { + opts.NegativeTTL = DefaultNegativeTTL + } + if err := os.MkdirAll(opts.Dir, 0o755); err != nil { + return nil, fmt.Errorf("ebookconvert: create cache dir: %w", err) + } + return &Cache{conv: conv, opts: opts, neg: make(map[string]negEntry)}, nil +} + +// GetOrConvert returns the path to a cached EPUB for srcPath/key, converting on +// miss. Concurrent calls for the same key collapse to a single conversion. +// Returns ErrDRMProtected / ErrConversionFailed (also served from the negative +// cache), ErrConversionTimedOut, ErrSourceTooLarge, or the caller's context +// error if it cancels while waiting. +func (c *Cache) GetOrConvert(ctx context.Context, srcPath string, key SourceKey) (string, error) { + kh := key.hash() + dst := filepath.Join(c.opts.Dir, kh+".epub") + + // Fast path: already converted. Refresh mtime so the mtime-ordered budget + // eviction behaves as a real LRU — recently-read entries sort newest and + // survive eviction. + if fi, err := os.Stat(dst); err == nil && fi.Size() > 0 { + now := time.Now() + _ = os.Chtimes(dst, now, now) + return dst, nil + } + + // Negative cache: known DRM/deterministically-bad source. + if err := c.negativeLookup(kh); err != nil { + return "", err + } + + // Singleflight via DoChan with a *detached* context: coalesced callers share + // one conversion, so a single caller canceling its request must not abort + // the shared work for the others (golang.org/x/sync/singleflight.Do has no + // per-caller context, and binding it to the first caller would propagate that + // caller's cancellation to all). The conversion stays bounded by the + // Converter's own timeout + concurrency semaphore; the caller's context only + // governs how long *this* caller waits (the select below). A caller that + // gives up still leaves the conversion running to populate the cache. + ch := c.group.DoChan(kh, func() (interface{}, error) { + // Re-check after acquiring the singleflight slot (another caller may + // have just produced it). + if fi, statErr := os.Stat(dst); statErr == nil && fi.Size() > 0 { + return dst, nil + } + // Convert to a temp file in the cache dir, then atomically rename in. + tmp, tmpErr := os.CreateTemp(c.opts.Dir, "converting-*.epub") + if tmpErr != nil { + return "", fmt.Errorf("%w: cache temp: %v", ErrConversionFailed, tmpErr) + } + tmpPath := tmp.Name() + _ = tmp.Close() + _ = os.Remove(tmpPath) // Convert recreates it + + if convErr := c.conv.Convert(context.WithoutCancel(ctx), srcPath, tmpPath); convErr != nil { + _ = os.Remove(tmpPath) + c.remember(kh, convErr) + return "", convErr + } + if renErr := os.Rename(tmpPath, dst); renErr != nil { + _ = os.Remove(tmpPath) + return "", fmt.Errorf("%w: cache rename: %v", ErrConversionFailed, renErr) + } + c.enforceBudget(dst) + return dst, nil + }) + + select { + case res := <-ch: + if res.Err != nil { + return "", res.Err + } + return res.Val.(string), nil + case <-ctx.Done(): + return "", ctx.Err() + } +} + +// Lookup returns a cached conversion result WITHOUT converting on miss. It lets +// cheap callers (e.g. HEAD requests) avoid kicking off a full conversion: +// - ok == true, err == nil: a ready EPUB exists at path. +// - err != nil: the source is negatively cached (DRM/failed); path is empty. +// - ok == false, err == nil: cache miss — caller must decide whether to convert. +func (c *Cache) Lookup(key SourceKey) (path string, err error, ok bool) { + kh := key.hash() + dst := filepath.Join(c.opts.Dir, kh+".epub") + if fi, statErr := os.Stat(dst); statErr == nil && fi.Size() > 0 { + now := time.Now() + _ = os.Chtimes(dst, now, now) // a HEAD hit counts as access for LRU + return dst, nil, true + } + if negErr := c.negativeLookup(kh); negErr != nil { + return "", negErr, false + } + return "", nil, false +} + +func (c *Cache) negativeLookup(kh string) error { + c.mu.Lock() + defer c.mu.Unlock() + e, ok := c.neg[kh] + if !ok { + return nil + } + if time.Now().After(e.expiry) { + delete(c.neg, kh) + return nil + } + return e.err +} + +// remember negatively caches only *deterministic* bad outcomes — DRM +// (ErrDRMProtected) and conversion failures (ErrConversionFailed: corrupt +// source, unconvertible layout, oversize output) — so repeat reads of a +// known-bad file skip reconversion for NegativeTTL. Transient outcomes +// (ErrConversionTimedOut, context cancellation/deadline, ErrSourceTooLarge) are +// deliberately NOT cached so the next read can retry — a one-off timeout under +// load must not wedge a convertible book onto the raw-fallback path. +func (c *Cache) remember(kh string, err error) { + if !errors.Is(err, ErrDRMProtected) && !errors.Is(err, ErrConversionFailed) { + return + } + c.mu.Lock() + c.neg[kh] = negEntry{err: err, expiry: time.Now().Add(c.opts.NegativeTTL)} + c.mu.Unlock() +} + +// enforceBudget evicts the oldest (by mtime) finished cache entries until the +// total is within MaxBytes. It never evicts keep (the entry the caller is about +// to return) and ignores in-flight "converting-*" temp files, since deleting +// either would hand back a vanished path or corrupt a concurrent conversion. +// Best-effort; logs nothing (caller has no logger here). +func (c *Cache) enforceBudget(keep string) { + entries, err := os.ReadDir(c.opts.Dir) + if err != nil { + return + } + type item struct { + path string + size int64 + mod time.Time + } + var items []item + var total int64 + for _, e := range entries { + name := e.Name() + if e.IsDir() || filepath.Ext(name) != ".epub" || strings.HasPrefix(name, "converting-") { + continue // skip dirs, non-epubs, and other conversions' in-flight temps + } + fi, statErr := e.Info() + if statErr != nil { + continue + } + items = append(items, item{filepath.Join(c.opts.Dir, name), fi.Size(), fi.ModTime()}) + total += fi.Size() + } + if total <= c.opts.MaxBytes { + return + } + sort.Slice(items, func(i, j int) bool { return items[i].mod.Before(items[j].mod) }) + for _, it := range items { + if total <= c.opts.MaxBytes { + break + } + if it.path == keep { + continue // never evict the entry we're about to return + } + if os.Remove(it.path) == nil { + total -= it.size + } + } +} + +// SourceKeyFromStat builds a SourceKey from a file path + fileID, reading +// size/mtime via stat. Checksum is left empty (pass one explicitly if known). +func SourceKeyFromStat(fileID int, path string) (SourceKey, error) { + fi, err := os.Stat(path) + if err != nil { + return SourceKey{}, err + } + return SourceKey{FileID: fileID, Size: fi.Size(), ModTimeNano: fi.ModTime().UnixNano()}, nil +} + +// for tests / diagnostics +func (k SourceKey) String() string { return strconv.Itoa(k.FileID) + ":" + k.hash()[:8] } diff --git a/internal/ebookconvert/cache_test.go b/internal/ebookconvert/cache_test.go new file mode 100644 index 00000000..ac5ded7e --- /dev/null +++ b/internal/ebookconvert/cache_test.go @@ -0,0 +1,297 @@ +package ebookconvert + +import ( + "context" + "errors" + "os" + "path/filepath" + "sync" + "sync/atomic" + "testing" + "time" +) + +func newTestCache(t *testing.T, opts CacheOptions) *Cache { + t.Helper() + conv := newTestConverter(t) + if opts.Dir == "" { + opts.Dir = t.TempDir() + } + c, err := NewCache(conv, opts) + if err != nil { + t.Fatalf("NewCache: %v", err) + } + return c +} + +func keyFor(t *testing.T, fileID int, path string) SourceKey { + t.Helper() + k, err := SourceKeyFromStat(fileID, path) + if err != nil { + t.Fatal(err) + } + return k +} + +func TestCache_MissThenHit(t *testing.T) { + c := newTestCache(t, CacheOptions{}) + src := filepath.Join("testdata", "sample-ncx.mobi") + key := keyFor(t, 1, src) + + p1, err := c.GetOrConvert(context.Background(), src, key) + if err != nil { + t.Fatalf("first GetOrConvert: %v", err) + } + assertValidEpub(t, p1) + fi1, _ := os.Stat(p1) + + p2, err := c.GetOrConvert(context.Background(), src, key) + if err != nil { + t.Fatalf("second GetOrConvert: %v", err) + } + if p1 != p2 { + t.Fatalf("hit returned different path: %s vs %s", p1, p2) + } + fi2, _ := os.Stat(p2) + // A hit refreshes mtime for LRU but must NOT reconvert: the cached entry is + // the same underlying file, not a freshly converted+renamed replacement. + if !os.SameFile(fi1, fi2) { + t.Fatal("cache hit reconverted the file (replaced the cached entry)") + } +} + +func TestCache_KeyChangesOnModTime(t *testing.T) { + c := newTestCache(t, CacheOptions{}) + src := filepath.Join("testdata", "sample-ncx.mobi") + k1 := keyFor(t, 1, src) + k2 := k1 + k2.ModTimeNano = k1.ModTimeNano + 1 // simulate a re-scanned/replaced file + if k1.hash() == k2.hash() { + t.Fatal("expected different cache keys for different mtime") + } + p1, err := c.GetOrConvert(context.Background(), src, k1) + if err != nil { + t.Fatalf("convert k1: %v", err) + } + p2, err := c.GetOrConvert(context.Background(), src, k2) + if err != nil { + t.Fatalf("convert k2: %v", err) + } + if p1 == p2 { + t.Fatal("different keys must map to different cache files") + } +} + +// A transient timeout is NOT negatively cached: it would otherwise wedge a +// slow-but-convertible book onto the raw-fallback path for the whole TTL. +func TestCache_TimeoutNotNegativelyCached(t *testing.T) { + conv, err := NewConverter(context.Background(), Options{Timeout: time.Nanosecond}) + if err != nil { + t.Fatalf("NewConverter: %v", err) + } + t.Cleanup(func() { _ = conv.Close(context.Background()) }) + c, err := NewCache(conv, CacheOptions{Dir: t.TempDir()}) + if err != nil { + t.Fatalf("NewCache: %v", err) + } + src := filepath.Join("testdata", "sample-ncx.mobi") + key := keyFor(t, 1, src) + + _, err = c.GetOrConvert(context.Background(), src, key) + if !errors.Is(err, ErrConversionTimedOut) { + t.Fatalf("got %v, want ErrConversionTimedOut", err) + } + c.mu.Lock() + _, cached := c.neg[key.hash()] + c.mu.Unlock() + if cached { + t.Fatal("a transient timeout must not be negatively cached") + } +} + +// Eviction must never delete the EPUB it is about to hand back, even when the +// configured budget is smaller than a single converted file. +func TestCache_EvictionKeepsJustConverted(t *testing.T) { + c := newTestCache(t, CacheOptions{Dir: t.TempDir(), MaxBytes: 1}) + src := filepath.Join("testdata", "sample-ncx.mobi") + p, err := c.GetOrConvert(context.Background(), src, keyFor(t, 1, src)) + if err != nil { + t.Fatalf("convert: %v", err) + } + if fi, statErr := os.Stat(p); statErr != nil || fi.Size() == 0 { + t.Fatalf("returned path must exist and be non-empty (eviction deleted it): stat=%v", statErr) + } +} + +// Eviction must ignore other conversions' in-flight temp files; deleting one +// would corrupt a concurrent conversion mid-flight. +func TestCache_EvictionSkipsInFlightTemps(t *testing.T) { + dir := t.TempDir() + c := newTestCache(t, CacheOptions{Dir: dir, MaxBytes: 1}) + tmp := filepath.Join(dir, "converting-inflight.epub") + if err := os.WriteFile(tmp, make([]byte, 4096), 0o644); err != nil { + t.Fatal(err) + } + old := time.Now().Add(-time.Hour) // make the temp the "oldest" candidate + _ = os.Chtimes(tmp, old, old) + + src := filepath.Join("testdata", "sample-ncx.mobi") + if _, err := c.GetOrConvert(context.Background(), src, keyFor(t, 1, src)); err != nil { + t.Fatalf("convert: %v", err) + } + if _, err := os.Stat(tmp); err != nil { + t.Fatalf("eviction deleted an in-flight temp file: %v", err) + } +} + +// A cache hit refreshes mtime so the mtime-ordered budget eviction behaves as a +// real LRU (most-recently-read entries survive). +func TestCache_HitTouchesModTimeForLRU(t *testing.T) { + c := newTestCache(t, CacheOptions{}) + src := filepath.Join("testdata", "sample-ncx.mobi") + key := keyFor(t, 1, src) + p, err := c.GetOrConvert(context.Background(), src, key) + if err != nil { + t.Fatalf("convert: %v", err) + } + old := time.Now().Add(-time.Hour) + _ = os.Chtimes(p, old, old) + + if _, err := c.GetOrConvert(context.Background(), src, key); err != nil { + t.Fatalf("hit: %v", err) + } + fi, _ := os.Stat(p) + if time.Since(fi.ModTime()) > time.Minute { + t.Fatalf("cache hit did not refresh mtime for LRU; mtime is %v old", time.Since(fi.ModTime())) + } +} + +// A single caller abandoning its request (cancellation) must not abort the +// shared conversion for everyone else: the detached work still completes and +// populates the cache. +func TestCache_CallerCancelDoesNotAbortSharedWork(t *testing.T) { + c := newTestCache(t, CacheOptions{}) + src := filepath.Join("testdata", "sample-ncx.mobi") + key := keyFor(t, 1, src) + + ctx, cancel := context.WithCancel(context.Background()) + cancel() // caller bails before the conversion can finish + _, _ = c.GetOrConvert(ctx, src, key) + + dst := filepath.Join(c.opts.Dir, key.hash()+".epub") + deadline := time.Now().Add(10 * time.Second) + for time.Now().Before(deadline) { + if fi, err := os.Stat(dst); err == nil && fi.Size() > 0 { + return // shared work completed despite the caller canceling — good + } + time.Sleep(20 * time.Millisecond) + } + t.Fatal("detached conversion did not populate the cache after the caller canceled") +} + +func TestCache_NegativeCachesDRM(t *testing.T) { + c := newTestCache(t, CacheOptions{}) + src := filepath.Join("testdata", "sample-drm-v1.mobi") + key := keyFor(t, 7, src) + + err1 := mustConvertErr(t, c, src, key) + if !errors.Is(err1, ErrDRMProtected) { + t.Fatalf("got %v, want ErrDRMProtected", err1) + } + // Second call should be served from the negative cache (still DRM error). + err2 := mustConvertErr(t, c, src, key) + if !errors.Is(err2, ErrDRMProtected) { + t.Fatalf("negative-cached call: got %v, want ErrDRMProtected", err2) + } + c.mu.Lock() + _, cached := c.neg[key.hash()] + c.mu.Unlock() + if !cached { + t.Fatal("DRM result was not negatively cached") + } +} + +func TestCache_Singleflight(t *testing.T) { + c := newTestCache(t, CacheOptions{}) + src := filepath.Join("testdata", "sample-ncx.mobi") + key := keyFor(t, 3, src) + + const n = 8 + var wg sync.WaitGroup + var firstPath atomic.Value + errs := make(chan error, n) + for i := 0; i < n; i++ { + wg.Add(1) + go func() { + defer wg.Done() + p, err := c.GetOrConvert(context.Background(), src, key) + if err != nil { + errs <- err + return + } + firstPath.Store(p) + }() + } + wg.Wait() + close(errs) + for err := range errs { + t.Fatalf("concurrent GetOrConvert: %v", err) + } + if p, _ := firstPath.Load().(string); p == "" { + t.Fatal("no path produced") + } +} + +func TestCache_BudgetEviction(t *testing.T) { + dir := t.TempDir() + // Budget fits one converted EPUB (~2.4 KiB) but not two, so converting a + // second entry evicts the older one — while never evicting the entry just + // handed back. + const budget = 3000 + c := newTestCache(t, CacheOptions{Dir: dir, MaxBytes: budget}) + src := filepath.Join("testdata", "sample-ncx.mobi") + + p1, err := c.GetOrConvert(context.Background(), src, keyFor(t, 1, src)) + if err != nil { + t.Fatalf("convert 1: %v", err) + } + // Force the first entry to be the oldest (the eviction victim). + old := time.Now().Add(-time.Hour) + _ = os.Chtimes(p1, old, old) + + k2 := keyFor(t, 2, src) + k2.FileID = 2 + p2, err := c.GetOrConvert(context.Background(), src, k2) + if err != nil { + t.Fatalf("convert 2: %v", err) + } + + if _, err := os.Stat(p2); err != nil { + t.Fatalf("just-converted entry must survive eviction: %v", err) + } + if _, err := os.Stat(p1); !os.IsNotExist(err) { + t.Fatalf("older entry should have been evicted, stat err = %v", err) + } + + epubs, _ := filepath.Glob(filepath.Join(dir, "*.epub")) + var total int64 + for _, e := range epubs { + fi, _ := os.Stat(e) + total += fi.Size() + } + if total > budget { + t.Fatalf("budget not enforced: total=%d > %d (%d files)", total, budget, len(epubs)) + } +} + +func TestModuleVersion_Stable(t *testing.T) { + if len(moduleVersion) != 16 { + t.Fatalf("moduleVersion len = %d, want 16", len(moduleVersion)) + } +} + +func mustConvertErr(t *testing.T, c *Cache, src string, key SourceKey) error { + t.Helper() + _, err := c.GetOrConvert(context.Background(), src, key) + return err +} diff --git a/internal/ebookconvert/converter.go b/internal/ebookconvert/converter.go new file mode 100644 index 00000000..3435ef89 --- /dev/null +++ b/internal/ebookconvert/converter.go @@ -0,0 +1,468 @@ +package ebookconvert + +import ( + "archive/zip" + "bytes" + "context" + _ "embed" + "encoding/xml" + "errors" + "fmt" + "io" + "os" + "path/filepath" + "strings" + "sync/atomic" + "time" + + "github.com/tetratelabs/wazero" + "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" + "github.com/tetratelabs/wazero/sys" +) + +// mobitoolWasm is libmobi's mobitool compiled to wasm32-wasi. +// Built by tools/mobitool-wasm/Dockerfile; provenance in mobitool.wasm.sha256. +// +//go:embed mobitool.wasm +var mobitoolWasm []byte + +// Guest layout. Input is mounted READ-ONLY (confined fs.FS, no `..` escape); +// output is a dedicated writable dir. NOTE: a writable wazero dir mount is not +// a hard jail (`..` traversal is possible within the server user's reach), so +// the WASM sandbox is a *memory-safety* boundary — filesystem isolation relies +// on running the server as a constrained, non-root user/container. See the +// design doc's "Filesystem sandboxing" section. +const ( + guestInDir = "/in" + guestOutDir = "/out" + guestInputName = "in.mobi" // mobitool sniffs content; extension is cosmetic + guestEpubName = "in.epub" // mobitool derives this from the input basename +) + +// mobitool diagnostic lines that mean the source is encrypted/DRM'd. Matched as +// substrings against individual output lines (not the whole blob) so book +// metadata/text containing "DRM" cannot false-positive. "Document is encrypted" +// is distinct from mobitool's "Document is not encrypted, ignoring PID/serial". +var drmMarkers = []string{ + "Document is encrypted", + "DRM key not found", + "Invalid DRM pid", + "DRM expired", + "DRM support not included", +} + +// Print Replica = fixed-layout (image) Kindle book; mobitool ignores -e and +// produces no EPUB. Detected for a clear failure message. +const printReplicaMarker = "Print Replica" + +// Options configures a Converter. Zero values fall back to sane defaults. +type Options struct { + MaxSourceBytes int64 // reject larger sources before invoking the converter + MaxOutputBytes int64 // reject a produced EPUB larger than this + Timeout time.Duration // bounds a single conversion + MaxConcurrent int // caps simultaneous conversions + MaxMemoryPages uint32 // wasm linear-memory cap (64 KiB/page) + MaxLogBytes int // cap on captured stdout+stderr each + WorkRoot string // parent for per-conversion scratch dirs ("" = os.TempDir) +} + +const ( + DefaultMaxSourceBytes = 256 << 20 // 256 MiB + DefaultMaxOutputBytes = 512 << 20 // 512 MiB + DefaultTimeout = 60 * time.Second + DefaultConcurrency = 2 + DefaultMaxMemoryPages = 16384 // 1 GiB + DefaultMaxLogBytes = 64 << 10 +) + +func (o *Options) applyDefaults() { + if o.MaxSourceBytes <= 0 { + o.MaxSourceBytes = DefaultMaxSourceBytes + } + if o.MaxOutputBytes <= 0 { + o.MaxOutputBytes = DefaultMaxOutputBytes + } + if o.Timeout <= 0 { + o.Timeout = DefaultTimeout + } + if o.MaxConcurrent <= 0 { + o.MaxConcurrent = DefaultConcurrency + } + if o.MaxMemoryPages == 0 { + o.MaxMemoryPages = DefaultMaxMemoryPages + } + if o.MaxLogBytes <= 0 { + o.MaxLogBytes = DefaultMaxLogBytes + } +} + +// Converter converts Kindle-family ebooks to EPUB in-process via wazero. +// Safe for concurrent use. The WASM module is compiled once; each conversion +// instantiates a fresh, isolated module. +type Converter struct { + runtime wazero.Runtime + compiled wazero.CompiledModule + opts Options + sem chan struct{} + closed atomic.Bool +} + +// NewConverter compiles the embedded module and returns a ready Converter. +// On failure it returns ErrUnavailable; callers must not advertise the +// conversion capability when this fails. +func NewConverter(ctx context.Context, opts Options) (*Converter, error) { + opts.applyDefaults() + + cfg := wazero.NewRuntimeConfig(). + WithCloseOnContextDone(true). + WithMemoryLimitPages(opts.MaxMemoryPages) + r := wazero.NewRuntimeWithConfig(ctx, cfg) + if _, err := wasi_snapshot_preview1.Instantiate(ctx, r); err != nil { + _ = r.Close(ctx) + return nil, fmt.Errorf("%w: instantiate wasi: %v", ErrUnavailable, err) + } + compiled, err := r.CompileModule(ctx, mobitoolWasm) + if err != nil { + _ = r.Close(ctx) + return nil, fmt.Errorf("%w: compile module: %v", ErrUnavailable, err) + } + return &Converter{ + runtime: r, + compiled: compiled, + opts: opts, + sem: make(chan struct{}, opts.MaxConcurrent), + }, nil +} + +// Close releases the runtime. Convert returns ErrUnavailable afterward. +func (c *Converter) Close(ctx context.Context) error { + if c == nil || c.runtime == nil { + return nil + } + c.closed.Store(true) + return c.runtime.Close(ctx) +} + +// Convert reads the MOBI/AZW/AZW3 at srcPath and writes a validated EPUB to +// dstPath. Returns ErrDRMProtected, ErrConversionFailed (deterministic), +// ErrConversionTimedOut (transient — the per-call timeout fired), +// ErrSourceTooLarge, ErrUnavailable, or the caller's context error on +// cancellation/deadline. +func (c *Converter) Convert(ctx context.Context, srcPath, dstPath string) error { + if c.closed.Load() { + return ErrUnavailable + } + info, statErr := os.Stat(srcPath) + if statErr != nil { + return fmt.Errorf("%w: stat source: %v", ErrConversionFailed, statErr) + } + if info.Size() > c.opts.MaxSourceBytes { + return ErrSourceTooLarge + } + + select { + case c.sem <- struct{}{}: + defer func() { <-c.sem }() + case <-ctx.Done(): + return ctx.Err() + } + + // Per-conversion scratch: in/ (read-only mount) and out/ (writable mount). + scratch, err := os.MkdirTemp(c.opts.WorkRoot, "ebookconvert-") + if err != nil { + return fmt.Errorf("%w: scratch: %v", ErrConversionFailed, err) + } + defer os.RemoveAll(scratch) + + inDir := filepath.Join(scratch, "in") + outDir := filepath.Join(scratch, "out") + if err := os.MkdirAll(inDir, 0o755); err != nil { + return fmt.Errorf("%w: in dir: %v", ErrConversionFailed, err) + } + if err := os.MkdirAll(outDir, 0o755); err != nil { + return fmt.Errorf("%w: out dir: %v", ErrConversionFailed, err) + } + if err := copyFile(srcPath, filepath.Join(inDir, guestInputName)); err != nil { + return fmt.Errorf("%w: stage input: %v", ErrConversionFailed, err) + } + + runCtx, cancel := context.WithTimeout(ctx, c.opts.Timeout) + defer cancel() + + stdout := &cappedWriter{max: c.opts.MaxLogBytes} + stderr := &cappedWriter{max: c.opts.MaxLogBytes} + fsConfig := wazero.NewFSConfig(). + WithFSMount(os.DirFS(inDir), guestInDir). // read-only, confined + WithDirMount(outDir, guestOutDir) // writable + modConfig := wazero.NewModuleConfig(). + WithArgs("mobitool", "-e", "-o", guestOutDir, guestInDir+"/"+guestInputName). + WithFSConfig(fsConfig). + WithStdout(stdout). + WithStderr(stderr). + WithSysWalltime(). + WithName("") + + mod, instErr := c.runtime.InstantiateModule(runCtx, c.compiled, modConfig) + if mod != nil { + _ = mod.Close(runCtx) + } + combined := stdout.String() + "\n" + stderr.String() + + if err := classifyRunError(ctx, runCtx, instErr, c.opts.Timeout, combined); err != nil { + return err + } + // DRM and unconvertible layouts are reported on stdout with exit 0. + if matchesAnyLine(combined, drmMarkers) { + return ErrDRMProtected + } + if lineContains(combined, printReplicaMarker) { + return fmt.Errorf("%w: print-replica (fixed-layout) book is not convertible", ErrConversionFailed) + } + + producedEpub := filepath.Join(outDir, guestEpubName) + if fi, err := os.Stat(producedEpub); err != nil { + return fmt.Errorf("%w: no EPUB produced: %s", ErrConversionFailed, trim(combined)) + } else if fi.Size() > c.opts.MaxOutputBytes { + return fmt.Errorf("%w: output EPUB exceeds %d bytes", ErrConversionFailed, c.opts.MaxOutputBytes) + } + if err := validateEpub(producedEpub); err != nil { + return fmt.Errorf("%w: %v", ErrConversionFailed, err) + } + if err := moveFile(producedEpub, dstPath); err != nil { + return fmt.Errorf("%w: deliver output: %v", ErrConversionFailed, err) + } + return nil +} + +// classifyRunError maps a wazero run error to our error taxonomy. Context +// errors (timeout/cancel) MUST be checked before a generic nonzero exit code, +// because WithCloseOnContextDone surfaces them as *sys.ExitError with special +// codes that would otherwise read as an absurd "exit code". +// +// Ordering matters: the *caller's* context is checked first so a request-level +// cancel OR deadline is propagated verbatim (never reclassified as a conversion +// verdict — that would both mislead upstream cancellation and poison the +// negative cache). Only once the caller's context is healthy do we attribute a +// deadline to our own per-call timeout, which is a transient ErrConversionTimedOut. +func classifyRunError(parent, run context.Context, instErr error, timeout time.Duration, combined string) error { + if instErr == nil { + return nil + } + // Caller's context ended (cancel or deadline) → propagate it verbatim. + if parent.Err() != nil { + return parent.Err() + } + // Our per-call timeout fired (caller's context is still healthy). + if errors.Is(run.Err(), context.DeadlineExceeded) || + errors.Is(instErr, context.DeadlineExceeded) { + return fmt.Errorf("%w: after %s", ErrConversionTimedOut, timeout) + } + if errors.Is(instErr, context.Canceled) { + return context.Canceled + } + var exitErr *sys.ExitError + if errors.As(instErr, &exitErr) { + switch exitErr.ExitCode() { + case sys.ExitCodeDeadlineExceeded: + return fmt.Errorf("%w: after %s", ErrConversionTimedOut, timeout) + case sys.ExitCodeContextCanceled: + return context.Canceled + case 0: + return nil // normal exit; output checks follow + default: + return fmt.Errorf("%w: mobitool exit %d: %s", ErrConversionFailed, exitErr.ExitCode(), trim(combined)) + } + } + return fmt.Errorf("%w: run: %v", ErrConversionFailed, instErr) +} + +// validateEpub confirms a well-formed EPUB OCF container: a zip whose first +// entry is a STORED (uncompressed) "mimetype" holding exactly +// application/epub+zip, with a META-INF/container.xml that names an OPF +// rootfile present in the archive. +func validateEpub(path string) error { + zr, err := zip.OpenReader(path) + if err != nil { + return fmt.Errorf("open epub: %w", err) + } + defer zr.Close() + + if len(zr.File) == 0 { + return errors.New("empty epub") + } + first := zr.File[0] + if first.Name != "mimetype" { + return fmt.Errorf("first entry is %q, want mimetype", first.Name) + } + if first.Method != zip.Store { + return errors.New("mimetype is not stored (uncompressed)") + } + rc, err := first.Open() + if err != nil { + return fmt.Errorf("read mimetype: %w", err) + } + mt, err := io.ReadAll(io.LimitReader(rc, 64)) + rc.Close() + if err != nil { + return fmt.Errorf("read mimetype: %w", err) + } + if string(mt) != "application/epub+zip" { + return fmt.Errorf("mimetype is %q", string(mt)) + } + + names := make(map[string]bool, len(zr.File)) + for _, f := range zr.File { + names[f.Name] = true + } + if !names["META-INF/container.xml"] { + return errors.New("missing META-INF/container.xml") + } + rootfile, err := opfRootfile(zr) + if err != nil { + return err + } + if !names[rootfile] { + return fmt.Errorf("OPF rootfile %q missing from archive", rootfile) + } + return nil +} + +func opfRootfile(zr *zip.ReadCloser) (string, error) { + for _, f := range zr.File { + if f.Name != "META-INF/container.xml" { + continue + } + rc, err := f.Open() + if err != nil { + return "", fmt.Errorf("open container.xml: %w", err) + } + data, err := io.ReadAll(io.LimitReader(rc, 64<<10)) + rc.Close() + if err != nil { + return "", fmt.Errorf("read container.xml: %w", err) + } + var c struct { + Rootfiles []struct { + FullPath string `xml:"full-path,attr"` + } `xml:"rootfiles>rootfile"` + } + if err := xml.Unmarshal(data, &c); err != nil { + return "", fmt.Errorf("parse container.xml: %w", err) + } + if len(c.Rootfiles) == 0 || c.Rootfiles[0].FullPath == "" { + return "", errors.New("container.xml has no rootfile") + } + return c.Rootfiles[0].FullPath, nil + } + return "", errors.New("missing META-INF/container.xml") +} + +// matchesAnyLine reports whether any line of s contains any of the markers. +func matchesAnyLine(s string, markers []string) bool { + for _, line := range strings.Split(s, "\n") { + for _, m := range markers { + if strings.Contains(line, m) { + return true + } + } + } + return false +} + +func lineContains(s, marker string) bool { + for _, line := range strings.Split(s, "\n") { + if strings.Contains(line, marker) { + return true + } + } + return false +} + +// cappedWriter buffers up to max bytes and silently drops the rest, always +// reporting a full write so the guest is never blocked on a full pipe. +type cappedWriter struct { + buf bytes.Buffer + max int + truncated bool +} + +func (w *cappedWriter) Write(p []byte) (int, error) { + if room := w.max - w.buf.Len(); room > 0 { + if room >= len(p) { + w.buf.Write(p) + } else { + w.buf.Write(p[:room]) + w.truncated = true + } + } else if len(p) > 0 { + w.truncated = true + } + return len(p), nil +} + +func (w *cappedWriter) String() string { return w.buf.String() } + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + out, err := os.Create(dst) + if err != nil { + return err + } + if _, err := io.Copy(out, in); err != nil { + out.Close() + return err + } + return out.Close() +} + +// moveFile delivers src to dst atomically: rename when possible, else copy to a +// temp file in dst's directory, fsync, and rename — never leaving a partial dst. +func moveFile(src, dst string) error { + if err := os.MkdirAll(filepath.Dir(dst), 0o755); err != nil { + return err + } + if err := os.Rename(src, dst); err == nil { + return nil + } + tmp, err := os.CreateTemp(filepath.Dir(dst), ".move-*") + if err != nil { + return err + } + tmpName := tmp.Name() + in, err := os.Open(src) + if err != nil { + tmp.Close() + os.Remove(tmpName) + return err + } + _, copyErr := io.Copy(tmp, in) + in.Close() + if copyErr == nil { + copyErr = tmp.Sync() + } + if cerr := tmp.Close(); copyErr == nil { + copyErr = cerr + } + if copyErr != nil { + os.Remove(tmpName) + return copyErr + } + if err := os.Rename(tmpName, dst); err != nil { + os.Remove(tmpName) + return err + } + return os.Remove(src) +} + +func trim(s string) string { + const max = 500 + s = strings.TrimSpace(s) + if len(s) > max { + return s[:max] + "…" + } + return s +} diff --git a/internal/ebookconvert/converter_test.go b/internal/ebookconvert/converter_test.go new file mode 100644 index 00000000..ce535e74 --- /dev/null +++ b/internal/ebookconvert/converter_test.go @@ -0,0 +1,247 @@ +package ebookconvert + +import ( + "archive/zip" + "context" + "errors" + "io" + "os" + "path/filepath" + "strings" + "testing" + "time" +) + +func newTestConverter(t *testing.T) *Converter { + t.Helper() + c, err := NewConverter(context.Background(), Options{}) + if err != nil { + t.Fatalf("NewConverter: %v", err) + } + t.Cleanup(func() { _ = c.Close(context.Background()) }) + return c +} + +func TestConvert_DRMFreeProducesValidEpub(t *testing.T) { + for _, fixture := range []string{"sample-ncx.mobi", "sample-cp1252.mobi"} { + t.Run(fixture, func(t *testing.T) { + c := newTestConverter(t) + dst := filepath.Join(t.TempDir(), "out.epub") + if err := c.Convert(context.Background(), filepath.Join("testdata", fixture), dst); err != nil { + t.Fatalf("Convert: %v", err) + } + // Independently re-validate the delivered file is a real EPUB. + assertValidEpub(t, dst) + }) + } +} + +func TestConvert_DRMProtectedRejected(t *testing.T) { + c := newTestConverter(t) + dst := filepath.Join(t.TempDir(), "out.epub") + err := c.Convert(context.Background(), filepath.Join("testdata", "sample-drm-v1.mobi"), dst) + if !errors.Is(err, ErrDRMProtected) { + t.Fatalf("got %v, want ErrDRMProtected", err) + } + if _, statErr := os.Stat(dst); !os.IsNotExist(statErr) { + t.Fatalf("DRM source must not produce an output file, but %s exists", dst) + } +} + +func TestConvert_OversizeRejected(t *testing.T) { + c, err := NewConverter(context.Background(), Options{MaxSourceBytes: 1024}) + if err != nil { + t.Fatalf("NewConverter: %v", err) + } + t.Cleanup(func() { _ = c.Close(context.Background()) }) + dst := filepath.Join(t.TempDir(), "out.epub") + if err := c.Convert(context.Background(), filepath.Join("testdata", "sample-ncx.mobi"), dst); !errors.Is(err, ErrSourceTooLarge) { + t.Fatalf("got %v, want ErrSourceTooLarge", err) + } +} + +func TestConvert_CorruptSourceFails(t *testing.T) { + c := newTestConverter(t) + bad := filepath.Join(t.TempDir(), "bad.mobi") + if err := os.WriteFile(bad, []byte("not a mobi file at all"), 0o644); err != nil { + t.Fatal(err) + } + dst := filepath.Join(t.TempDir(), "out.epub") + if err := c.Convert(context.Background(), bad, dst); !errors.Is(err, ErrConversionFailed) { + t.Fatalf("got %v, want ErrConversionFailed", err) + } +} + +func TestConvert_MissingSourceFails(t *testing.T) { + c := newTestConverter(t) + dst := filepath.Join(t.TempDir(), "out.epub") + if err := c.Convert(context.Background(), "testdata/does-not-exist.mobi", dst); !errors.Is(err, ErrConversionFailed) { + t.Fatalf("got %v, want ErrConversionFailed", err) + } +} + +func TestConvert_Concurrent(t *testing.T) { + c := newTestConverter(t) + const n = 6 + errs := make(chan error, n) + for i := 0; i < n; i++ { + go func(i int) { + dst := filepath.Join(t.TempDir(), "c.epub") + errs <- c.Convert(context.Background(), filepath.Join("testdata", "sample-ncx.mobi"), dst) + }(i) + } + for i := 0; i < n; i++ { + if err := <-errs; err != nil { + t.Fatalf("concurrent Convert: %v", err) + } + } +} + +func TestConvert_ContextCancelled(t *testing.T) { + c := newTestConverter(t) + ctx, cancel := context.WithCancel(context.Background()) + cancel() // already canceled before the conversion starts + dst := filepath.Join(t.TempDir(), "out.epub") + if err := c.Convert(ctx, filepath.Join("testdata", "sample-ncx.mobi"), dst); err == nil { + t.Fatal("expected error on canceled context") + } +} + +func TestValidateEpub_RejectsNonEpubZip(t *testing.T) { + // A zip that is not an EPUB (no mimetype-first) must be rejected. + p := filepath.Join(t.TempDir(), "plain.zip") + f, err := os.Create(p) + if err != nil { + t.Fatal(err) + } + zw := zip.NewWriter(f) + w, _ := zw.Create("hello.txt") + _, _ = w.Write([]byte("hi")) + _ = zw.Close() + _ = f.Close() + if err := validateEpub(p); err == nil { + t.Fatal("expected validateEpub to reject a non-EPUB zip") + } +} + +func TestValidateEpub_RejectsDeflatedMimetype(t *testing.T) { + // mimetype present + correct content but DEFLATED (not stored) -> reject. + p := filepath.Join(t.TempDir(), "bad.epub") + f, err := os.Create(p) + if err != nil { + t.Fatal(err) + } + zw := zip.NewWriter(f) + w, _ := zw.CreateHeader(&zip.FileHeader{Name: "mimetype", Method: zip.Deflate}) + _, _ = w.Write([]byte("application/epub+zip")) + _ = zw.Close() + _ = f.Close() + if err := validateEpub(p); err == nil { + t.Fatal("expected rejection of deflated mimetype") + } +} + +func TestConvert_AfterCloseReturnsUnavailable(t *testing.T) { + c, err := NewConverter(context.Background(), Options{}) + if err != nil { + t.Fatalf("NewConverter: %v", err) + } + _ = c.Close(context.Background()) + dst := filepath.Join(t.TempDir(), "out.epub") + if err := c.Convert(context.Background(), filepath.Join("testdata", "sample-ncx.mobi"), dst); !errors.Is(err, ErrUnavailable) { + t.Fatalf("got %v, want ErrUnavailable", err) + } +} + +func TestConvert_TimeoutClassifiedNotRawExit(t *testing.T) { + // A 1ns timeout must surface as ErrConversionTimedOut (a transient verdict, + // distinct from a deterministic failure), never as a bogus "mobitool exit + // " code. + c, err := NewConverter(context.Background(), Options{Timeout: time.Nanosecond}) + if err != nil { + t.Fatalf("NewConverter: %v", err) + } + t.Cleanup(func() { _ = c.Close(context.Background()) }) + dst := filepath.Join(t.TempDir(), "out.epub") + err = c.Convert(context.Background(), filepath.Join("testdata", "sample-ncx.mobi"), dst) + if !errors.Is(err, ErrConversionTimedOut) { + t.Fatalf("got %v, want ErrConversionTimedOut", err) + } + if errors.Is(err, ErrConversionFailed) { + t.Fatalf("a timeout must not also satisfy ErrConversionFailed (it would be negatively cached): %v", err) + } + if strings.Contains(err.Error(), "exit ") { + t.Fatalf("timeout leaked a raw exit code: %v", err) + } +} + +// classifyRunError must propagate a caller's deadline as context.DeadlineExceeded +// (CR review): reclassifying it as a conversion failure breaks upstream +// cancellation handling and would poison the negative cache. +func TestClassifyRunError_ParentDeadlinePropagates(t *testing.T) { + parent, cancel := context.WithDeadline(context.Background(), time.Now().Add(-time.Hour)) + defer cancel() + run := parent // run derives from parent, so it is also past-deadline + err := classifyRunError(parent, run, context.DeadlineExceeded, time.Minute, "mobitool output") + if !errors.Is(err, context.DeadlineExceeded) { + t.Fatalf("got %v, want context.DeadlineExceeded propagated", err) + } + if errors.Is(err, ErrConversionFailed) || errors.Is(err, ErrConversionTimedOut) { + t.Fatalf("a caller deadline must not be reclassified as a conversion verdict: %v", err) + } +} + +// When the caller's context is healthy but our own per-call timeout fired, the +// result is the transient ErrConversionTimedOut sentinel (not ErrConversionFailed). +func TestClassifyRunError_OwnTimeoutIsTimedOutSentinel(t *testing.T) { + parent := context.Background() // caller healthy + run, cancel := context.WithDeadline(context.Background(), time.Now().Add(-time.Hour)) + defer cancel() + err := classifyRunError(parent, run, context.DeadlineExceeded, time.Minute, "mobitool output") + if !errors.Is(err, ErrConversionTimedOut) { + t.Fatalf("got %v, want ErrConversionTimedOut", err) + } + if errors.Is(err, ErrConversionFailed) { + t.Fatalf("own timeout must not satisfy ErrConversionFailed: %v", err) + } +} + +func assertValidEpub(t *testing.T, path string) { + t.Helper() + zr, err := zip.OpenReader(path) + if err != nil { + t.Fatalf("open epub: %v", err) + } + defer zr.Close() + if len(zr.File) == 0 || zr.File[0].Name != "mimetype" { + t.Fatalf("first entry not mimetype") + } + rc, _ := zr.File[0].Open() + mt, _ := io.ReadAll(rc) + rc.Close() + if strings.TrimSpace(string(mt)) != "application/epub+zip" { + t.Fatalf("bad mimetype %q", mt) + } + var hasContainer, hasContent bool + for _, fl := range zr.File { + if fl.Name == "META-INF/container.xml" { + hasContainer = true + } + if strings.HasPrefix(fl.Name, "OEBPS/") { + hasContent = true + } + } + if !hasContainer { + t.Fatal("missing META-INF/container.xml") + } + if !hasContent { + t.Fatal("no OEBPS content") + } +} + +// Guard so the default timeout constant stays sane if edited. +func TestDefaults(t *testing.T) { + if DefaultTimeout < time.Second { + t.Fatal("DefaultTimeout too small") + } +} diff --git a/internal/ebookconvert/errors.go b/internal/ebookconvert/errors.go new file mode 100644 index 00000000..437f0310 --- /dev/null +++ b/internal/ebookconvert/errors.go @@ -0,0 +1,35 @@ +// Package ebookconvert converts Kindle-family ebooks (MOBI/AZW/AZW3) to EPUB +// in-process, by running libmobi's mobitool compiled to wasm32-wasi on the +// wazero runtime. No cgo, no external binary; untrusted input is parsed inside +// the WASM sandbox. See docs/.../2026-06-17-kindle-epub-conversion-design.md. +package ebookconvert + +import "errors" + +var ( + // ErrDRMProtected means the source is encrypted/DRM'd and cannot be + // converted without a device key. Callers should surface the + // "open externally" path; the source is never usable in-app. + ErrDRMProtected = errors.New("ebookconvert: source is DRM-protected") + + // ErrConversionFailed means mobitool failed or produced output that is + // not a valid EPUB (corrupt source, unexpected format, internal error). + // It is a *deterministic* verdict for a given input — the same bytes will + // fail the same way — so the cache may remember it negatively. + ErrConversionFailed = errors.New("ebookconvert: conversion failed") + + // ErrConversionTimedOut means the converter's own per-call timeout fired. + // Unlike ErrConversionFailed it is *transient* (it reflects load/size, not + // the input being unconvertible), so it is NOT negatively cached and the + // next read may retry. It deliberately does not wrap ErrConversionFailed. + ErrConversionTimedOut = errors.New("ebookconvert: conversion timed out") + + // ErrSourceTooLarge means the source exceeds the configured size cap and + // was rejected before invoking the converter. + ErrSourceTooLarge = errors.New("ebookconvert: source exceeds max size") + + // ErrUnavailable means the converter could not be initialized (the + // embedded module failed to compile/instantiate). The capability must + // not be advertised in this state. + ErrUnavailable = errors.New("ebookconvert: converter unavailable") +) diff --git a/internal/ebookconvert/mobitool.wasm b/internal/ebookconvert/mobitool.wasm new file mode 100755 index 0000000000000000000000000000000000000000..a56eb87c333d655f4a543ee595a54a2f2df5a389 GIT binary patch literal 541347 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�WB+2jo9c;S4{O2fX%E z0aVYhKn_Q61Z`RaEk6OZ^1+sXF8%{~nnQst3)F%I#Q`XIz>AeY*+792bX1JMc~CDH zRAxX;0#(BdkZv%jXaF5(3~IB3-2qxIjYAn|v=el&17!0E_>>WJlR%@;U@IYM1hmlz ztPVO)t^hR|WGkq$Q9zu@*$rA1=?HDLg0e3YIGuwUgrMOj2FHdD(4CIVunWl?A)6`~ zK!w=xNiz?DW-mbN{Tw+!4PQv|hBQ-IF5J26%E6{yu0USUP5}l6SVCoVyVdYJRAYKMXA#m3SY~#zh+b)3SMId6Jpmqc;dQo7|XJBwV zGz&aK4{8@PFuC(GI&va3!YXP<0hq0@>d8?MyZ{W`u=K!e!tp>GZp3v(VGZjCpq2+L zR3TjrNGA}&#^?cp3N|bqTX25>)CL6gL^vR|4rsVii3!rhWd!9!m^_0LBe={4hYF;N z%jn1i?cy>)ySR+dE-s@ZIKMK1I&=z*@GdUcLU79yJfsI=fxHAxZlJA-jG#&r98@## z`Vic~JOH|t3%Q?*&6kj#HQLY@XcH|7OE=@)z}ksG8(CjdGj7cz_lY3Tj|HCWKP zScq{D=mk9tkYPpz<{VHa0=aVtjD~;;3()8Xg90OX=)R?AaT$Z0mASBE{;lu5Xne-v6IY31b z!~zW_7SI)dkTEyNat?5`F&Acm=3W^T7@;fGz(p9ynXq%0K#|7-T0a6=VnA9J2ZcOx zCI|HcE_4K+5YE8Q?Pv_1nrDQLgS$b7 z_`t~r;&9N)29VQRkoxSPc_k)pSMU-Rh)psOkAXKOftCY;77T!z_uw9;2uP9}w2%+9 z`tLupw=`%z4Lq7s$Sn%%;eroM0?#2iGH`$7W#j{IQ$tSX0-#U_xkUkVzyo*(2B^SQ zWCpeUHJC&|XCs4Fl7J4F0mZols3itD!W`1g7f=ANnE@S31v*EF8??d>;(kbZ;aIQ8 z3e6VGpnL;vq=9mSB4|DpWHamt8Bm~sZo3Bc$p69;91kL=fUIW$ZQTNm|AL0Z!1)B! znNnbNWC3AMX(e`0uZIJiPgp@C$PAz>>Opro*MUxP2jvphB1MD@lL9*^mw+`WpvW*Q zu)`LEfW*Orj-cKelO~ghIg<#;;R1^6kWc~#8#EXg9Kma7nZWyTK<6}q0}K@TAfG$d zgYLxml*(vuTXJb|iGkS;_Cf*dZcyx^N%AV#o&=09N*WuUbS;J^Xh zY7J_fgD~i3El}Wag98V2YB49|Y;88sY8hrwF#?uS;3`t&g3B-|FoOaJiwx*keP}TP z(g9lC$DqjMSg*(h8jfQGRn4%y;_S#AR%8wrGKT}Sj|!>>8~~tZgd>9@csfJ|)VpH> zhXlAR1mDmOYC3~F&cgyaufS0x3sQhGILc%xf;NkRo2j7otP&3>=P80NmIaN^f;phu z*g*oI={E%)P%Q_t6jUTBaf9LuYy&IwlrlF+V1s#zAf2EYanSj*BA`l^8FX11$W{er zX~@1SZqPy=a4O*e9qbP(DngVPLFaHXDzJJ=TQi1$QWS>*YqkV9$ANB$f@CuuB^G_g5YT=LK2U)JT8IhWM-Q5E zQeZCz2e1M!cr;9b9dxZDYc{A9K_4UloeT*nQ$XtzLASqwjvocx^$EIxQvo#30=mEo zR35M>@L4m4DDZ;nK5!-mxm$r7w6hen@5-?rbV?bhUk;8fW{88qBN3n(8OAIn7FcMq zKqh`cfM8Sf}oivCTUQTfjEcK1p zDzZT0puQ!j-KfvV0qSLg7JqF54J=53$}S1exF|Cyupp@je7;W!v||BMzyR9u<=7xl zWX1#z0<`gU1y<0774@LuECz6j2L%(82Gbm*Dh-#KB}AyXgI5ix4+*Lca=;BN5Q_n1 z8EniSw6h&_nKXAWBMWRZp8~jXOiC@s1o9VJ_2$UH{g;E0gZ9-ZELK3fa>2DYXs;%C zVIU}SWI%-;r~w5nbwNoVRCR(fHuxwfc=G_X+VMZQdB6zTl?rYboI_>|=g`mss zz^MaNWU_+_K+t+WaQVmts$;>~mIaitpw%;?@P!X6f_9mMIN&4&YJReT)_oUeffsKm zuqm))E3$#RY~Z^|KqovXf$nEk0&mm>Ef@!F8Ue35p<&|LG?K3-eOP@!UA#?$Y9XGB_u4s;S35l)Z&pb3$#rSR2qY}`b$Gr zCqvKG1cwM{VGtvzm}FF7%La|{z(NEZA>h$aScpKkL@O|Y3M*dF+Fnpa!U`H%2JOxP zjW&a05L9-8md}9(vO&3;6{Ud!YVU%A2pj@nPk|P3DKdf=XG0PP?BYjoV;Phlz(e1x zkg0A)Q1=u(yaF->%)8We7Ig3rq$&YjQV1HO0@X#JK^z4pM;1_74#|z&pu7(0guqfA zsDTJtF$OQ|!G$&0WlW$F8XQBQHUPBy#R%GN&IlO|2aRDs>jY5Q>{xFGy0J-vNdg>g z;7z@tXaZTv;MfQr%3)Ao5&##Yko97q&Ky`VG(aI+5J2WaI)9*Gfwa&-27tT_(E-X^ zpxxn6qqxCo6f|A{8Y%*v^jre!VS@UyV5k4*F9emt3QXLPW%!WE1xO(Q+9d+Yu;7s; za8=A8@BmcMgNBs^?txg`JfQJJMu7#OkcDv;fjL~D(SbQ&rUs~pWB^Ub<6i^E{S7n= z06B&Od?6^vyP!r3$UVFaj^Ksih_j5Ln{z=YV}b7OItHqeL6+a0!NVKHJEhJ_y%Zv6EwaB8s7$m4;oh!fI1WGAkZ)vihu@_4~h;A zrT{3PQQ!_Jz(Fk_4JIB17Hh^3=;R!@1ppeuhI$RO-I>9W!I2MC@^CnUhkjWU7$6I3 zKw_Yge9+1d$dE5+CHx{mM)rEp0kNP~1t?>I2Qa{84%l?i-U!g5I|UY~Yrz7bV^P^a zdsZM$1Se>a9#B32#SLiVIA|#!$W8{B8j!z5KpB{j3K3{k#0*N&kWv)Q3<&}%K$E~S zN}%J}p)LW9!-LwEpo_0T#SEHx3IxmpEjc9QY7K&B=nzz4Kv0DVK@}DRRoDaY6WhoHMpfV;Fj8gTWSYxsXe%*4q%gFaAZP? z6VOe_@E}7E=@Z!WgCYSVCNF?hqQ)dNIo)7XVuvieVh3He46+Oyt)L^TAoV54L=C1Z zU?adqJ|Z%ldHoDPYYAJEH1K&B|LW;qIguhdh3UbCmfB_ z94rYsAP*AHphhZ~1@VvwsEYLfwWvV@fzSoxjAl$8p#8JpMmG3Vc+jXZGw5tz(9vw5 zqfjB|Lou2$`5-9-9Sa2-yJCmTSv!ITYCs_mJqW4+bowe<+fV}1mSu3<0bX4JXYumeCgF+;ouT6Lkolm)kh6)p@* zNucZO!Ql@Y)d#iGezGvKf?8?d`<+0p0Jqd2%h|Z=U@kddtGdh1}k)b zD5y6E3IH|*27wni6oE_x1r$=&V_*c|h{hnW4AeD&^tC`nEQN5nA)ES=3ZM%& z__82ofOa1-LsJV#H)vlI{OD;0$i2p(%`Qqzu#5)UZvqJuXkG)|q@)1dRR^Ab0iVtY z^$av1K#m7xW9Vik@E{xL_GQpyBY2k+crgVikQJaB9hteOFf$?_SOia8)0KOYTiN%q@13X~`QVH5l06I1W)Mp0WF2Y=r<;au;zV?tE z)U$=(FalX2#0=V%09sxHNoTB}F)I!Q76n#a1`fzkPoOm;pjDDA3ha&oWuTJ+pyD6_ z(4H7r5>o)}kN}-L3cf-G#Dn*ZAe#|bK*#DrLREoNfyIYc@0~+NK0l6PE zjD=Wy0$COcx=O{Gkq_)~CP%(3M@C1`os!_a450N1ppp>me~`Z*y%Nx{l?Ic5BXkud zte*xtpA@v)l?61G0vePDHK{>Us_?~=%-mIs%-{h-1xA5qkQ@M7bpRSqQ(zQW0TKaa z5b&@JXod;2ff#f)5%~NUB^GHV@U5Jnf=l2fNU;(VFX%opMg2HpT~I)*4@OO40^kuf&_E(+=o>VI2?;~c0kq(v7vx{W0feB- zxIhQPf``XI(=(uhLRhk(*$1?-i4C$s2~;nbF@ff6KqUq!Q7C|lPRJeIpnG#TL4%;6 zt8b4efb0({nH!mZ|b?~hvppu3M)j^;Ye@<-XOgj`5m_Wm42NXaK1Yrdx#{*Cccfc%!%tahf z0ByDhb;8-8>(7{+n9Z5iD1cqL1*8e&d}h%7*9uIIYhb!TamE1Ow*#tqp>E-Z(hQ(k z6dus#A1=t~3OM(33A_O%3((dSNA@fw*gbn}yzuQpSp3BfYMX#|OhDrTba5GUe-2jF z3Tz5o3e1p=JqpZ_T|J=5NT}05OeWA#f&!qE_#6*S0c}ZV0-cNv-jxozNE;OVTNFSG z>X<->&@?JI?gXvtR)DP@2i;`mDfo?Aa->?n}JkU586Ax$x7qlf99@eO- z5R{lf?Kr64AW4MD@dA7y8#DK6Rzz+&z>uxP23ZCUP8ZAy;4|UDYXL!LdT{4B@@FY> zfJ#+R=696I0pHooqrl`2I{Ok-oG~bIfsdeJ00lGX>|QoU(=11B$3@+saAb2-$bv4h zcVt)OR^Wif8ILP3vjUIfmwUa;X5bs>nZe`Q3Ot~Vz`P2~pflYR7!~+HHi8CxxD@!@ zcp1TNgwD<~fR8nE1Pw-VK~#w-@hk8<*1Jh7f~q0~J_UZzoFZuXCYz%cvXca|piW|P zP~e3`n-XaMA2k2)uz_k*KG66sn*vBHDAsrsI2?~o273vrS%D9lw7C>Pn=0!;a|NK3 z$>7-616uSy8I%Mdrx-#FcH~mz2G{A1-K#++@d!)nqaBSiK#D-Y z2~h_VKLtvA0ubXFJV46@9XEpl8$}4T3y(!$D#(1OK7k3iIF56X91Jz_J!nfU$Pf+` z%aIHLO<;oR7cNN5ae~$b@Ilz1NMTptQs7fy6?g~A;7Z)QEZiXPD=A+7=C&7^&H2e-}sDTe&0nMd>kAMZ$wO7C!vrsOp12=WR zO(a-N1=?(ntP6awm3Y65D9a%xS@4+))AD<8^E;A`5_;ZVC*J+m?bV?FHaF zO2O$KlrBN*^}(r6fd!GyKphTvVg;$dY1-}uAZxIg2J! zoCv@Kx~K&C8c1F~R2ebs?xg1a+J=m{>HJBtV`- zRsdS`CGZhc-hetcj*Di35(m7TWB?62fZKTBp=B0GUxo#Aurv>75edkZpoUTwc<(Z# z+~NhV<7HA{6X-{Bp+FCa1FrlO7z93mEClT}R$zljfU*j=0;@n5NEN7RhqtA;8dz?{SAD3hbWkmZ<>1s+vka%2IW*95IwK%Rv$9aBJK1+dvn@a!VEaN_1Z$cs34 zVF44o0St~G(4I2LWe^}P2!k3)kY#Y7$rVsz6|^oN)F_5^ELgcg4F?4lN0}UGea-61 z%L3}3m@&-(ovQ=7FNWQbK@n7R05q!hru2Is*8cpXUHw8H^%fv7o?1*j(#pvVU*XU&*E(dGzC$`;Vza^!I1 zWmRBu5;JEqfG7jUD=euQpeYkK2VMUQ>fU}~1WiIKFo6>XCEwDG7iYw@eBGFey)7CeZ37W^VKZufVFn zA@CVgEr7Zbd1-U#LX13I zyuzF;-0Z9h3JMB*BBBZkV&W1Cl2XzN3JNkHF$yuiJm{cP$IhB8J~>u-EPzo)US3vS zo?k#7eBU4_*|9i^WC?r&MJtaSlAr`kP!>s01|}$jB&YxrltvO%feC`H;8Or!+REan z0TYx&QmF$Ilz>*UETG{j@cMTJX2%B5J=le?~G;)U5kffckc z7(5)!?h5MFgJ)|&O*1w}mMqW&7z1dUkQpirx(kZ~bT(oGha0af4O`V6TJrT(W>BDz<`jf;M6*DuDVrphIyOcqBl@FL<9NSj}dT8c0s%c7$}H z;G;xfO(6I2h$9Cd1E@)j5q!`qWfYlt6sZ_|G9(3`5_<5x!5w^xn863SAq14KI6wr8 z06h5Qk%CVgYw!suFgwD74>1%6(FYDeG2{>g-<^XIf;`~MS3n6+fr=q0jVlB>uq8l6 z^bmZBI|Su1LlBb5F%zIHBqTuNi9BLhLr?)F1mS~l5Pjef6eT4D<%tPF@NzFuenZW| zETFyvGiX{AboZVcFQ~7?t-ywvg|UX90(uC(!ySUMm>~!${4hgM8WIw0W=t$RqF6)F z03`$sU}J_5eV}XQctnsxkOONj=76U`Ig}6tum7Z=7-Ykh3b7W07-9GVcNofGh9RV` zzzjnvNLYYVAtTl>bU+D1P>T~XrVh~vN`@o{A@t-jXaKThL2f|;tyG5eV!?YA*x~gE zGiachS%ZlKln5bn^Nyf;L=qf;?65@0hQA(>=T-n2393h!9p{7B3xJ0TK{rf*N_9{z z$iXYD09)V90UodiwR3o6k$otDHIYDWi2@Z=vh+zLSTmYDdPaMNJCR6XCK5<90W*(;KzXp1VhJb-^Z}Lx$^#k>0>>0FK`2U05Q38^;mTA1oJ5JOOvTWH@H_4x7k#F>%AcP>YWGa-q$ zPe6!+CWj!Ilfm)FG`Ki7s8P%VI)xpa8bCASph5yNa;E^PKtKmmVhXZ>m;b>ALZK>I zu?ezZ6J*9F2w75yW+o#Rm7som10$l}z6rGJ0&$QKbSeqdwE}gl7(o65ZDmCC48e14 zpiNewu@hF1LJ)>5WC0&!zycWncLm)+4Y^(bRE2}i6V+g10M+84JDWgzgFtmWt79{0 zDw>BCbh@`=E$GrACT;~*&}rJBvxXHwXX}E_0|%c41YV~H?*4(Sgfr|p-BVVO8(Ba~p%%m4$m+=Fcpo%Dr@#W8 zw*#M<1X=VVf#y|Q#t0~|!o3O#YlKOlb%&tb54uwh+MQzsolD}_P@xDOVS~6C+%{uU zU;u5#Y~TRRW`NhFI<`RBpnFC-plr~&4?R#eXyQ;H3$)#njfa67bWBtO2k4A*P>us> zh8*6_=-2@k1?4Np9uO0BYbtDE0q9~}==L84W=Q=DI^PL2Bh3osg4*t&p;}kavJ=pu z(y*<%4B%E9XzB($-2j@pfvub1Ud@H`lq%5C3mo9tXwb0~j<6OuDB3{*51thR%~dO~ zppB4#W~3lvBv5HaM+0al5;T4ST6Bc0nbA=NDhs+d9yGBAmj%rwX)sBEe8i%_DDV|j za4NCzLQc3;0u4-nHyMIV1fA9eS~0`y$e_WndPQRcgBgRk0<$B7Cc_dC&zxBR5{sbp zB?21lV1S-T4Kke>#0KrbQvgjG!k2l#as;RfWB}U-+CazwTKNsijYtDS?4TwyXw(N( z>On8Vh1ds9HK4uV;FVFJMRJVbDK^kq!Jv8&v|kaNWLcr*00*c`30iRM#tTU=AkB)P zo)Kiw2ega>X)zA?u1;27@Ty9Xd7wRvpgWTUpeuJkgErtXDbPMkP=W>3L@0g%ZTrOH z6(%&VfNwwsEdqwR80-xeY~BF3H<7%-2~PGzdIPi+6?C~W8z_XAfTz`=eG(RMB!Qg{ ziZhTu6j?yyWzf4qLHBxqHts~ciXtjG%13%W`jbZjiBj$#2Bqybv>h?aacK*H008iR#fQv(LIsq-jgjphi#e4}g^C5{`1Uv)` za##SI#UQW*l;Rb^Lzm#&c6lLz4%#%y3JRZt;EEmW95W^cP{GXtDGfjs3D{v0V26RC z5|o23fy{#}C5AYi1C*da7Y>6K#lv$&2%H6T0(dPijVRCE$ zZHVFq+2qK@y@?UBL;zH)fLv7%S``2aNYK(iCddD<^L#)K*I)w8?n93KVQ@UY0@S!f ztanggaC`=8FM|qlP$EXS4Ya1_HfTi&R0?(NjpJQVYZofTfvgL3YY!+*Ko^kId+{=I zb31Zz??!3_8o-wyfM$I_t^}1q;M4`~(!h3ys(^DBC|Q6GOlAe0LB#@E=?9v50*%gt z@+cE1n=^n`@G&_mWjXRWwnAq%;VbwYxxkZB-$4FET^{op+zbNgL-GO0IiQ`GAeVra zjzP_502>3k9Ltf*@i%B)3Swy|gX2|Da3Bn4Qebd=1QG(B#*u|E9JGE661NPXnPa$T zKsPf(#32iAKt~Wd8X#KGOV}7$VXK!LSmB`usT4u6pa5B1%M1z~&~ga{CdY>ipw*&G zj&~Tc6hU`3F*)8~0G|QLBCr%xa)DATgCZN~T1zvg5XgZ)0ibp`a~7zacnDs|2%ZXt zHts-6XEc}?%)kk)ff20gBP1X|>+xW!7#tsf3sQI@0|f?TF(Z>>10!l^K+_SEV*@jq z#9~l%A+PvC3pt#!fu^Sf5OF>SZGnRnJjy|r{XnA}n!j*H zH>gm<8r>iXNU?zy-5?1_bh9F|3ZfWf@BnQa0HF zS7bBn-5wd3q7U=I#A96T5=9*$be2e0{2@%vl9fY26Zd3*p4g=yK53^8bmcN zcY!n_ISu4g7Rd31py3&`KmiQ_fX*kv6)qroh;=AIgDi~dI2MR%JdR_*={V379a_k7 z5O5p^#5#1x!G%#B2NlNSIPfNAXr!Ws9C&XoQgQ-q`6J*s9_)^T3gdAF56&P0-7bL^ zL;?g{A%NW#P+>f-5WwjQ5%3ymxI0ku6*dz=XUv1g&QQY?a_SJ}=0J~ug~blp?optU zzf`DXjs}&?(V^HJ*gd+SrN^L=LQo-&R+NAyB=99gkUW;8h!Dn>a6st=qyjA|f{tE; zG|V8&^~p^_2y-BZgHvt}2bChAX*)FU*2gL7*`LaJf0i9oGiB z2Md%}83bBDT^taTMW7YLgajl9cx)0a%R)|dWl~@Uw?07gV+ye57ieBi3A8K>v~U?- zdw`GgfkqcB`oL!;@(8qn?BagR&d35AGZBCfnSc&T&2nNeXJ$}f0#l&T3AoyT)CI{$FC(wCa?BK(DL4z@%ITGkjC(r;l zL_&cDd8ZQ#Xb+Ji%1$Sc&|=UmvEw9A9}%frqQK$^+37R^eWw$P<85&F6f!Q4w8IHx z*yMHSy#xgo$K{~wr=a~f2B=N&UL5GyM2G@#htQG1aSzx=6a|psK+tw0&_Fl1fvX|# z6BH)kk@>H)KwAnxW8X-EdzV24C6EN)f}9TOCd(iRHh|m*5>!AE+zIZ3F={ZWAPK@p zEOiiqAdMUX|6z^+aakOXfvyf0XaFS#kPAVA436tC1$hJ-k<|zYG{L!`!Fg~?UZ5E! z=C}gXu>u*!BJc}lp<@qtBn)(v3zFb&P=6Vuk_Sof4lGCnkOYsx1VxYp|ACeQfV4{> z3xd`?fCOcb1aHA?S3n4YW)K(ze#2Y{9gqcY7G!a}0Wt+KUW)SQWS}$Xy7sxgNY}8{}bF^nvzrL57Jy(+Blg zj!d8nd7-<@!G}ph`k&B2WCmRZ(BvJ1%P@oq&^e{uh7_`R? zWF^R@(B>!D9iYkpl3PGqW%!sG8JNIh`i!8Y$Kdz{6sFJs1zqLC1l}V7ihiV_2-reV z1_jV5JD~J83FHEh@4y!%fkF;^XulvRWlTdvoGbV&HB@!F41(axS3oTo&>_B{1P3}- z0(^QW2WY?yw3ed2*pU%*gN1aKA~WcSU(kFKXxS|29s~u@`GMdtaODME!w#~P(TYJ3 zDz_6{Ux1?qw59+wYsdigA!vMeI>LFp;H^}k(1y6E9yDEq7U+=h1eK=Ht@_a94$a7* z0XQ=z(D|UC6&~Crp!i2md8mo*5K_V-E75^{j-2SaK$rG_0vX%~0uLF2lQg*a0j+`& zm;#C}(1tM3zH27vI49)fanLX$IBS5$VZaCXC@_L{8H1L$ASDhdaEk`sUIeW@;Q$2< z^ehPIu`=A;??IDmpvzuB?g2RkVzw>=C~bnoK=y$$AVdvhWEz|@AxFhAW3d}_XEcKV zILRq6IHJTK$V8+hh@4+Q=e|0ER?mQD$(fiOkQP^f><68t3z-#GLacp(t#$=X=RsY< ztO#B$04^WF`oLQhMZi)JqZ-~kiZ0&<6DmXw}0YN1L$U4yRZEry* zHb87cxCv4afg%h&2_U(MnSlv(Y8m#}W>a8>L?|ebVaCB|$Wc$sj>TDgMl5Vt05cmK z8xt0BHZ}$}M$mPCj_(nHt;h`849Vd51w{y~YQYwGpeQm!4oJCyqKX+*9_`ny3*^*q&^6qk^<$u7h?j|nnHyA5zrO1ZN^_aoJVk7xo_%80_w zu^wcA0&;-|N`H_cB4}*~I)NV4hGoHB_JJ1-)`MKi%)N~n(U(K4h6LTv12q|XSPLZo zfl@Z85M*(b$#P`SXIKsDSy(fI`Zx?44B&2#853yb5TulZoHYeHTZ#?ZkYjfREi47C zXAw~VU3Vdo1zKOguE6Ga6*QlvfVAQfWWNRz2Pkub&&38E*9k4)U@P!IP64Gr@X8{{ zjhLWtgq_X=T66_HnhI0^g4%Y-rm;9mKo_4W!Pmussz0bD%%DT*Kvgt1DA7WTA&8F@ zm>@Lh*;`YlWftg!S5 zk2g?K1ov!sAdN6+Dq%Ha0$l;k3i2l+DYAmn4lAghhYm6EFoUu=EBH7)urELn%M5Zg zBOzCVlP!|XAV)$iX96wfWCEo-gw;$St3hI*BoDP6)M5ZHgR2Lv#%6JZFBW43-!2A9 zE}--QO-GPfc~GJONr2{(ks4T#Ivd*k1fBK;P95@~DM!#ee?91e0nl|L0vnD9Q4jX@XRoa5~xK5T1gCQ zpFoxmK~*U*IWm=iN47wX8BqCzX)LU{4{8yDx;2anOiIk4efHqI%FN3E9`WJ;7l@FQ z1$7FzMW_N1g0u)#xVeo%IgbO}2LxFOTIUSvUqccA=t5U!4JH*(S92c7Q;-haWoAYp zq!Badu|AF*;46DUElEi6!lJ;e$p9WfgY3Enb3ogxMIcL$LASU<%3~H?27b`ZPr3|z zpetu}8F&>r6j*c_ct9s%>N0SHPQuh>;8NrU334j(fG7?{UJ%8u$Ood>6!}3EtD*pi zVo?+XQOt@$Ac{#*7(_8Dihw8vMN!b)F6h=4f%zamDX}WBI&zeO>+s@YC06jYwhGJ& zti?*qRt)?KETH>ti)-Suwr0U zU{MeRu?4LdK$%$x#1^t*U{+vJ5C*Y@tr(aTSQJD+Y!NF4(4dMah%E|oKlsEl&~ima z(7Bh8+gm`rSI|kzAU}hSg9a7Bux$hitlZOB83pSVK$mZV8l?)1`V62W3^+;@m>oIF zij-I!Z!zU4F@tJHQ2n@d4r30e)5l`X$O0+`KpL4GL81!GSy@U<){LM7yczWwn3Px@ zIZD7GT%^EKti%R3hZSND8(0U(95!o4&@sDEBS4#3vp{lLARD13u_&>FOkxK)M}e(a zi34mBJH#XokZQ1tIII~#*D5fB1wc`km8Hb#_-aR8mJ%1-Rcy$v;wV<)2Ac(S6*pKb z$W`3dj9dx~3Y=g8@PQjyjuSVY>#569Vuzc>p~MMt7bnfV6!+O?&1M!1)0TT z%?P^TnjI_vN;+9tO1zF&J~Ct}@xjgFLUtEVu@XPnEU3Hq!CFCP@mn+UDKIGTf&~;< z6*#l99N!*&-^G}v#0fWxM~N5YE?%&^_=}YUz-IA6+$8|k3NlN;no$7ZM_vWitSlu~ z$9=2nvy=qkX7MR8g3MwBnhXCZ2lcI_S0_q~kn5buz3HRAP4209`%9>?q*I%izcjKJ^zguA;ywun?5sK?|Ee z=~MuGCk%)O>JEZ8v?#DR@`EmjVu5M`9e`Wn*sy`A5HuDH76h$(GGkze&jf%*!AreCTY5n&|HN%{BvQ@C|f*H|+95&^}3l6Cl-!pvoGwXzCP*2Q?aWLmlX}3l=4A zP$|w1S~bq&$e_pzS{)8*tAmbkTMTjqNSaB3+mRWPam<)hKuVwuK+rK%T+qsb6>`}- zX!{(G09p$CL1PKaHaLW=DDlk3+w*r?U zy8=9sg99icSV4CWLR*JQ+@OQoA;-&e@*+;Ng;w5R z8yLA2I29NbxFH?}k4l0YUW^Ldpp(s5A>vY?bwZ$3E+C~@3anY6I}Tw|u)YCoWJH0< zQ6)=Y1t_?|OwfH<0xJ<*(3rTuDli{5LdFETKU7qS(b2xp@d0Sl4(Q@{P`w0}5K>}B zlVDb0QeZM<5LV)IV(M6qtc3+4BcQ~OF2ewk5m6FwGHX-dbFyn|ak4_y%nDH==w#NW z#HYZIO$n$q!noGSq)kD<$p+H|&+zzCu_%9NNL|1%akD&;A$g6e)prJU?ykcblK7SOmX1!hMjPie;uumFOThEN^M z;PY(ZIzZ=5$7LxnqUtEJW(1vZ2flU|QVM}PB>W1@paRHE8q{6`uN#KWSuk@?W5;&Z zxdMX|gE{CDFGuz)M+WeLw@Aeiq#ShQ2JJ9_6i1Lk3%WZBUS5LBD$qE-mK6g#_!4PW zc(^FCL6aw@IH+g??J{FfWCu0KSsfV*!RPjY8nUd8jG!Wz)v>NnkrTR2gUOL2OMyj! zxgbl4U4dPf0kn0FB})m!Dh9PvAo7lkSzskx3S1y1?2e3}GzeC}sQ|h`QwembC3sh+ zfSV#a=)5z~I%Bxe%nFdZq!n0T`aoN+nRFSrLG1(qiT#5oh3L3J7U zKpBPw)D|WxT-cZ#6xcz>frCmJerR;?6K5lM=&N17%d$8Ml!2O&ERM)omK{_U z6O(0GKv^1;$wAF%W`qvV;7uIpuuharUS!Px%Cexd&k?7ZvT!fuXOx3=e-1FfR}4V6 zsDS%Fpv3^-_1vI(ABMrbB5+FqT1hx^x%0At#!3_z9Xa6HPYK~iX!!!_3$P*_3+k`L zWhtNepo0j(;R5$1nnvutv|8c|(`*DD_ zvvMmiLR&SU!6?u{qXLdHpk3B((pjKxE@%=OeCr8#A{lfVw7@w~D+{I#l=U11vK$2* z--A|B2tfMBpzB^3!Kc837L8bd&PoP%dqEpV46+oM91TD^T0pCp1(tw9REZh9cgrBl zk+BH0$p)l=sYp=-qLjHvQ5eEvDN+=Iuvm)}1tBc9B1O=q41+93_98`oh!{r^_(Vj5 zEJw~FMP7&)SCJwQgvDK?2-DPKYdDks_#7XOQK{U!({+vfUs{ z5q7eZ2x#YK18CY_Nz9R{1lqU~2k!+0-HhkR10LZO1GOnxAU6RiNjQRrT|oPyT0j~V zB|&3#GN3gf0-)9#tjP-+0bz1bkW`S!0t5tKlCaX~F*P-`8cOF;rOh$IfaR2sCh8QO{k9R{Gtq96epE0KUsO|mMm2!I>U zpq3#LheZL2!vW@iTioEzz9X~1HE>d3RbX*c5I7HFn=uJMHcf!m{3@`(90Hm;WmUlC z6wrwRpi_Lnm#IpEHsDGsh$%>bx@8ieMNDvWK&T!e=g6Qa&+MQet{?{*L{gN1)WJ*+j^N~`AgaJ34W4LH03CL$#H!1{(D2PL*-9h7WkR>3XwQq{d3NZJAhDafI)qv6xWKf)2K@P-` zQxF3uEy70dJMt*VJ2Do6o2KHBOvJ6g3<^n5l?KYpDxd`c3Jl1Tw`NQ#3a~Q|L3?dM z1DGrzuQ0>AWS|*c1<1NLP|*PzFbDaI0o0=4$Wma^Waa?3a6v0K7$76kuu6f+A9N8c zq*D$W--6dnkmmCN2G}kyX6^>?TsITAMqpB4_6E5d;$~LRya|$ng7 zK{qQim1Kc01_xz)ZUq)@;>KwaMX4fa01|Y#9>`8+&?qHz02efp0&?%58K+fZEe3ZF zKbfmR_af~ISrH8Z3>1!ZDTN(9YffHvoVa~2~H zc!CamC_7|BHR!e}P{{|r7m5MYLI5>wI3O)PNEQLr?vR3%2|nfz>Te4`svdYthZWQd zU<45iSs;=LOfrK>7BI;QCfUFwJD3C&2)YcMU^W++Ly;XU z4q0gh3T(*L*q~)&5Ect8R0N@IYgkK}L4jR?ElUX$U`k*I!NUx+{)GvWtRW%5%>6=% zF%;}=0nmho1``jYC&8cyKG}l@2l5LPD&nrZ;4H6g5402~HlU{V}RN)#)wD{vJn@E0oxEAWD5FBBxe5|Ut2 zs#t+fLA+Q&5~NJ5SV5v#K|n#c7$gKf!9p4oj?##5l!k|+G$b5l6aVruGFlh)TjTBTA^okV>KsM?YE9ir4)F}oDDJp0eE9io3R4Z1{0okZp z3=+}+>oW$ECScMOOqzj7b1-R9te^!l)2LWM6J(}gv4RCy!V*kc6)PAjm=`Np7AqJi zn1SRJ^c75tK|*>8CdD8jT?OM}kdO{2j7*9Zv_auvT&$o4HozK8+JH%0Flh%S?ZKo2 zm~;e_PM{SOj0(0Ov+au&Y(Qq)6)RYS%(ex&(xh0y2INZPVg>7B1tYK~XE5mkCSAd# z8<=zlH7gkvY!r-&6CLIvjHEYOq@E9i_81&{z+ah8HemI4p54mM;C=;%(lawS#;9*|`$#f1ti z#aRkM5SOtiFcudoFcxQlCgix0wV{~73DU}_zzw26!>M2=7Z)n97H5Gb!Z?vNa)2hH zKnh`231)$&twB=*Q1{DbDR3a`5Jcv%DF}izvnp_aD3A|9UX}q(EeL{E3PYXCo27u_ zLSAGuz$QRL7u0P4E#P2f-th_EXW)#1s0HI zRs~@YB~VYsv@(LM;))z*T^GgBjTXR%8x8NFV4dM!9k&F;KlE2QryafxWm;fxS3Ofgf2hC<4V5 z*s~P)6~y340mV2*u=0i1pML|LnGG_VFH1o}K>#%AC0DM*ufPftV+FMWvJ~V&&SV8u zO`s&jj;s~a903JJkXA8JRl%ACx_7Y{oDxyB6=x|ZDDY<~h=FPwko!>#f;bh;b&4R@ zft|$(;(4x zde9I9`4|#}#R@98T_#qXrC<#55WfO6kj0QA9VLtz71%-X&03@&2BHND6&Mv*3yZQ8 zG(m0@z#6|01Md8M_oE_9i4UZWKTE+B?nZr()$9t4MGCBi3hWAuAk+B34uEPAP~Zo( z?&Zpr*b6}mQa}o{KojeH3hYG+jD-q(3hW>;0c1^(6b3bc6=E4*k%9oodVxX(Rs}wg z76VYWVN?((Qs4*qL;xfPNk&keD8_)j&Yz`V1I;g43T7a;Gb*qaDe!^xgF^zvyI{A2 zvj`*H?S=|`phW>F9!7CHiVN5wmLa*F9pZL#P@-Xlx}8-4>~<8pQQQtm2U!ZvkO*YY zQm}=%ogM0Sa1f%{jLq#9Ah)xEB8wdqh~UT~!|irtx!oRWIVcXr5J`enK@1dcE`R*20|4%i$%NGcF0R&WFb9Y3gHjVQ^WDnV}a1i4WF z)bdA^vruVFQ~9$Ld_bjFt~ z9cYL|0K9>KK_L|E9#Fc(9%SHRM+~HcCkxbwW>5%$`-~M<>O%4nG_pXk4pPsN1?nR( zCDsQC}RCz?Sa47~103|lGyo&0G8T1dhGYK=2E{oDEa z=*zyTGX>0mHR%=tcq1P8!giXEIq}9iUcxHq;L8*UU_;^-OgTSBoft*0X@RKVXkZ zfIU|34e|i!hPEu>jxtaeIWj1+IWmG5xUU5d zn8{=*u_&;Crv0aaX172L#$u>5U=!S|jz5?S9S<N z1uNJUprvh~RpAhaut37akr8yVF$*Yo*&G+HY;0fvHL>CLf)bR763kZ6v=VqE5)_7r zP*7lX++Pm~1O^4BwMraL7HtX~P7VKIP=qPPsS@CY<*0-jz1O`$@B*c=726xl#406+_1ML@m*g@@xE27$AnjTTbe z$C(*9>OmvsybO+v;H?4w|1%eYh7}zJ${_PhpwV_F#|_#AprbTFE&_)$2PmboI{vUP zRD=zzgVv0(XDKo0GBAMBFAJ!V4_dVi;X`;#pyfD5L07OdfQB}+l)&S#kn7lF=Q!mfOe9BmM?>7rYt2k5X}rSmQ8_EfkS~MD=Q0hOeyFNS4EHqKoug` zbVda(kkdiOlV&S|HqCte&s+e?zm8xAv*QMBMOFnSuv!*Jff5DgBJN7a7Jkse5y*kJ z;Efv$j`hWmTMZQ$bwR7&iyiq3LDPI2zzH9;{FK3wrL0&9L@F>i@)s&FgZL;)iWNcA zlBmn>6(A;aD==__mqIZ@Z^Gr~VgN130~Jx+D?#NW@*E*()&MlT0@}UFSLVoA2+2{* zj{oIB>6j_YkvY$i5nB2)IWmp*D$bXFe=$QKNbb)b9-+K^QN3D5!v)xroWILw%8 zAWkWPW>s)H03BQcD)zwP&;wG)X2#S3qFK$D8W=$~LojIRW|1RA_4%bpcLt7zFgrInbVRSQI252FGTxPAr)2ZIJv zgaRmrBOtOdAgyd>OfevL)IiQY2Qd>sVZ-KH2)@S~R7VMH1f_LI0Ojz5{0G`S1yai4 z*zka%5adKi)d@O%LxZV>QGqdAU^PgS858)LNLH{C4JHMMAswL5WYA!W0Vf2|O88A6 z#o)ufLB{5QW1roODM5kNkr`6gGJwYYK$gwUB=w|LKv1kOmSpKOGAM!b zgRlahfX#o6`(0VAS+7=v_wup6qJ^vAyz0zg3NOR&C#Qp$E<*6 z9%wo1fSD!*S_viv+6=@9UVF$3ibqCJ0U!-ph6_5uK|x$W6clI*(h%C6mr;R7K@_AB zIB0p#)FQbB}f?!sb5F0Hr?#en&P>P&f;L z3NHo?CJjaKZQ3@9!V3HfLcZXA&BEZ^2bz)*0JAh8H*SY0fwCtkiR&l{CFgP-T zy9MCN#{yimfLcOApvVN57y_XB#*qUg2v(z^BmimbK+OfM#}b0%O$AWybY#r3W&{<1 z{EiKvr5lin(nf(l3p_)l!K9(U?^v6qBmnA+fE=#?N~0iWfqUN?3PPX-?joQ)o)G&S znX^EXSPU9WI!eL{!Vo7rHZT@}4FGus>}+8(CJQD91z`;53PYR=2@nm?s#+n(|ICGs z3s!+Ubs~=c844X2tOIj|92;0XK}j3KL!b_k8B>4)tAcSGAM|cG5LU+T?&Gr1ZBn)!UH<50wu;kkq9a-g%yNgA>^aTuOOfx1PUc#uqPpb zR-dKBZ^Zx&C4M}i1dmwEP!fQI65&W?QQ*fJO8h9H#IL{)4hLwo3qeYH&=e3xI3X(q zpW73l$PWuxP##g_2UR;FpahH@M&RH9r()Ff3@Y+q^$;i>=qT|kfN~s0lIDl_nja%= z@I%rDs17k>(f}>+=T~3_RkS5pNSM`1N?dRRpyQ z6i}2qGIC!QWn=^0w*x-34rVaer81zz<&X^`ReZt6E!r)p zh*DVtWVnSRhg-H86X>=m23-bDM*(n6z@WjD0&)aMg^Ln1=qfK(GbR^EXnQ#RU{GK# zDNTL*TI2WZ?6)bXzX_m@GYv4X5)HDmHnU`ANSpuq(4FC*Mh3>r)x3XF~{ZeSlX zLwwBY2pWGPDA*hYz{v#^-^`#B6>JpPO2FxfU;;vT4eWKO z*YL(3IJpXd^99I4a4h}*&s+>Tm;_YAfJWs(v|Wz#H74K~+eh2^!5}cH}^g zeGic35}+aSGH~eu3rkR5)?k7al%P_b4eDg1@)8mE;Ix5UfI+hswz!8!CzGQ<8K|ud zjzmzQ3i3V7VsMH!0a?rpzWxrJa6u!V1`4eB3Tmk7h=Lkga)R`OBMCIv1zL0o8g+ox z5XcsTy#ltF71PIv8Um~gT0<~{3KMAMgRmG{LqO6BD6@ffeS&PIUH!nr#0@G^m>ofb z=-^@!bdU=u5J7bWXm$b?yj062+^{qaN=P1x%#H%ceibzgun8^uGISNh32pbV)7-*giRL_H=7F>XV z(=p6qkk4^d{CMocI$pV!A zK#p<90^Q99E_zeIm17DlHkcK_v=IQTwgRLVG;prLRFDmxnt%)* zgVR5Y0;^ynXd`3;hye9n9P7=PazFQ3*7msQ@;h z1~k9ImaPO@Mu=ko+Kj1(5wvy^(zj10J|3)bP)=m@(R@A1r1g!Fv4711Dcs&fLfja8ae}cL4zsAmHUx4BQI>1Ioefz z;Em)8433lLF=aV&I8I=Mj9`P}*>TZ)rYuKJ#}BYcO9ckUMGKg+oZ9>5?D+8DU^6>- zXPx6LEMk)|#hhBZrmVQI;9wK0Ipd}UpbPp|ffRL2Sa6`Bv8e^JP0w)`NDN6OXbR^L z7O_+4VxWy`3QUd%z*9UeP;W?q@1r{a4tN&Owa*}Lg2p?TO0qy_b%BQaK%ogb0s^Fp z(Q)!T@JuOaED*bbDTEYEMN$AhqYX3_3rgakJ;O>Yjtf8+gM-FWK?OJHY;Dl)Zw;m+ zOpc5tN{pZt6-=O`WKS?DFlIr8cpys7APIps=rd_BT|g2NfvCEIBqRY5x`8Al0};A| zB%}ZldVnOP0ug$GB%}cmdVwUQ0}*)`hX+^y6=!lgXs&B5NIEO0hRk4 zj(=dMh=4YnIWm_hFoLF3Sqh6l3Br@$1H@CP9n!*q3~3;Gzl`t> zK6nG12k6oSP-?0GPwaxs1s(4OGZ8eT0ck@zGFmfEYG(qM)eMddjtiI^`5hSq4uQJy zppATv3MhO~X$?9E6673EgAmlTPymmhLh9>!;MTnFPRFgmVcC8bD@ooCjvIa4WDl&H*!-LCo1;CTMouu^Kcl z%jmcoVkCF~jKy(2NFLOP0%c-F@BuHN`3{I%5w1NC(FAqvIT%lY(eW&l4RY-nC>!Kj zsVqmZTNxF(AWoIdQsjcTR1U-fJ5&b50=rWh#6ouFX^2@+XUb=R2I#<*BWSAxtbG9y z-~>&Xa>2wH95?hZfmTc~f@{$r56N5S9q#jU|f|?#&phMcg$5t>nPU>OG zQUq0Wpl|`LRRW!i20Bj$)M{5?Rb+<*6QqPx-~bo+tl%&LtyBQD^dOffa4WEb`g5RC zR*6}GS)Y+Xfdw=)4%(suTC5CPi2~ZQAa8VcFe z1G>Z0nsHMPlLDI~Qo&Mn z@VS4Ggz(BiLvLIbSup2;Up|NEtfhrL2@p_Do zT%fTkHb+5_yLlBDk$tcQ>WnQtOrX(FHb?Lr6i87i!kb8L1^JH^5{yb9|A7J*a%TVw z%%zOr@MTnB1i2U%zRW1$%dEfxbusA9Bqc^j_=3U>cla`c!WVQ6g#vSy0=Q=ny7r#2 z1ibSWKFa~_{ezj9b*Gk&Wu^0B2WRE9#|mh0kmrXDMh2D2NpNY&Y0#9-vbkQ7a}6(BL=7Oa&H%-7Fxxp`Bzd$NDSg zjfPr{@HV1O1lO6+IuUu;6j3Ka2N*y#$E8J}r9Yse5HzCpa1m%>m!ps(2P73S=rUY} z2niwyJ%9)aAPHT82=OBc-G>PAAqicD2=O8b-Gd16APHTA2yr6`-GvBoAqicF2yr3_ z-GK;kAPL=o2(cpx-G&IUAqm}t2(cmw-GT_Qz=S{t3W1JkXNCzd=rTNks9{19dJGX_ z1Pg%<8v}*vqeV>8kd(mc2x{;`5*ddhvjT@BvzN3In`3R30%%DRJjz+Y{RvRJ1C%ce zl)zC6jdDtwLENA+iUT|d%>o)ugQhue?1IiuVkuEzgt-Qs1X)3CFjhtI z>=!HOI4V%{f|@NfZtzLEZi=9tk&Ic2915WIaoh^vgI^gOFU@4iQUo3S3Uxea?K`y2 zhAt6?dW8ox<_2E+0?I^iKY&hc_5}5(V9usuCIT-X2Dc_aE3={DqyR~BpaEJ1HpdH~ z>y@%}KntW)1X`2~nwxDnL_)93_gJpzblKr+^ep*b8J9c!3NKMi0<&c%T_K#N;RBm_g8NB)nAQRA2`k z8poi(s=)0yVGA^0C~;H%Jgva)IAI&eTMEpM z6Lx_aV7;IPoV3g-Y>v#}b*7+zg?H7sQ3DgSc@AFq(6~Q{NQuxL3D80Wl=PU9lO7`| zeSq7>ptWx3v(Qv5OISe(l*5s+OcAsn0hBkv85Xp{8&s2k#x-H1^9=fom!^Q)M~IS| zmT||R!DONcPN@cppz+EER@nJu3<`{%-29;PaG4dDav&#UbDv^lWvpkc17Rl6A`H+d z8RS-mwF-D>Qdvc?2{e)q9?nHNoqY!Tw{=U=nexD}-F~173G;0jk3_K!d6b3e1AdaHoJya0YdCnIQMF zg7zVR)`c-?Fo9S9DWEEqKvoJ?05(zqWH_2q4P>PXp!M^hiW)q1%P7zS-T(v{X)^%V z1R6{Rjx8WpfhIJVG?+}_GY6oPCO|$zbqNDF%s^=qbVIBL6N>F%AB#9Lf`()mxt}sK zG1oJ}PrO&iR$_*p3C-Zx3bGQ^Y-RwR^kxF;^Fk_T3(x`>4JOdKEYPv@pmA`=`m91w zvH*Ej26W7%V;e{}XhjQzWyT}}^$U18y<~sKO220>TVF!VYvR zE`t*&X(*U8gKiH1`O6Wq0S{>w2$bn8z)cbbR>;;4R!0kHFta)uz*(@MXLVG7i@{=! z)lmR0#sOu476vJ?IIw*21 zG?)woW`P_G-bBXe#1ILY3Ig{qSQHooL0nM0X)uA*Dlj@S2+RPf2d#f)as*9^fqVus zW*$fww0ww_TMBe27U*wnKF)FZw%Qt>d zamMb%5TwB7*uYV!#P14PcL?64#pb9F+G4}!s=)8aRR%f{7u2&<6a zb`^1JFo6!JWy@0F)?i}Ea@5OG;sUo#6}T0+92o`ng4_?$4e6h9YcNTG)PlAqz?C`* zfKDSpR}G3u(4u|?fg(_0puwa8%H{inK^~Mr&gopp7BDFADhN5sWhrqB?1NYiQm>)F z1)`7(K9KPcH-Rcj&?bzvHAhB}D@3K~9lU-~=sc(_wN@;8I{x z;B?dhZAW5oWD(c^k_N5KX8wk$f3vt8dL)nwm8C)3AAT|y-blwL0Ex# zt&(VsqA)o9;RrPaQFyvj5QZ~Bu>#5NG76juocfF!po@@rAZ#rq@Wn=)pv(R^L8?Gk zMS#i%237@5#|zVX6+rWRoS?-fWuRMVSL=S{Gx*Ag#cuz;44J z2BMrKI&2su!7PCe8wLq5i=)GaL0o}TLDYsp2t=~pi`mQ6+{&{6hPOefEUMsmwOZ{@G1xj900`|DBm)G(gTAdc#9Xv zOvoMq0d56OM*~>f!mQ0bQdZ!%*PE#tr})fd^mz?S;qziPig341{P2O4r+#hHe16JKIj}S z(EKc1HDvuRa>fPi_Elg8?FD93U|w6J$Ot-`*$s4YEBHc67Dq%S%)}kR#8l5%2Rbqm zWEJ?VVo=2oI)WIyV}V733E6B=We>jUL6ez7fpLuzYYix}m_SDs3n+j%0*;KJg|p1u z?VOCPFwcT63E+iPt_r-M1Yx1X2fAgI-;Bw|kwFo(TbCQ2`xKbgDzL1rQQ%)&!6GYQUSVkhy!$`8m|H*Lvt(ef^#y5H0a_qUIi8_1_cFPP~W%Aia}9< zSAi8&knk$7f?XyJ5^w^!ObW~bxl9t2_?a9O_(0h~K!G1rbFzb0B=CWbyX673eFPjC zL3M?#NFB6f1*ry^0TM>f3p}8H6Q60G%!b zI$DDVtVc;efj=ipfmcDmQ7;GDkpejjB*_8Vs0m6Z9H7m&AR9rV42pDf8AlH2#0vpX z|MWDdAd*4^7C8N~gPIw%3nFkh2q>_FW{*K_? z;>D2>oK^Wi%_lw$CJ`m@`MluGhztsRpav8Vthoi+f~^3Ka1oHJ1we$15|0ANOkPKu zECn8DT!ULb&|p>I2ZblNc1NTseo%RV(iaziq$z$#ngZo%@McdlCKk{*wE!qzAdW#7 z;6B033ToYQcl6El|TA(H#dZc>-B3pu_@g^MaeJp!<

1tv#E5AgjW%+QlZK(!ornnZ!g@egR=s1UR-U4hYY z0aH#E_}V7WsT^PvL5(obTqbBi2WHniK1CJ< zHc-!u4bm@nWCRV`f`SPg9*iEK1`y~jE6_zKp#Hog133NiKyHEKQDAkPAPoxQ1_4Ox zL<-cQ2erkS9RI;WkHPyj7cRAf;A1s7A65+t~o96(11fX4tp zF3WNREgA-$DGr|K0pCsp3OBe@*dR_}11~~SfI0=_PfXu~x`g0n8K}eoS4TYH&;$7y zBnO%2-~rtP2FmcDBj*}8v!F3GK{^X`eGmhvE6oTxUnNTkEm43}usO1oIsRcU%yMkt z038RzhMev|3P4^42NI}@4-HF{#0gS_#}pPv4$$f#tU(5jZfM}JgUkk51X=|HaV|>o zf~aLdaV~Ni=2qZwRRmuvF+o|8h1-$Q5p-=UkDIh2uL3xP_&{M@sK~Ft<5-`i2s&aC z6jq!Htl;8P5EA;}bxJ~@kz3GZwu+pN4HaN%F3@F=juV8lK$RprD6Bv``alQdv~Ymd z2(f@xr!;VYt`t__%7R>g$nMy|0XoL11zorYEZhMXW(O6PY>qt;0ro7=HN1`jS)ki9 zL1`2+1_U~pLI6~K2*ctRcJ zR>?7dnvCEcGXtpG3|^1}QmMe>$P6lCI6*i3fOa&oI5H`6IWmDZk|}_eE+}#+fG@f$ z$x`CeX9SM`f%UN|@c8jEC+Vmbt@h7YU;>Kt&1uE?&y0~(ylQsM#yrvfJ^D`Y8w;}+bRabyN50qy;U zT#U<43-~tk~e53}Hz1bb>K!+E5zuMMjG)6>SkMf2|rz&uef-5sN(CTUhP=tWmSL}{8An$@x9~bC4UeE$AHc(_Z)+=%;a6s1A z2`jMqKwEXf3T)ZnNZ@5q5LV;^r88mBDPDXEf*=YsL?Z|aAkb=XP@5f;0-=_0fT~{5 z3T*`;ML})_HU(kmF<{&ZShRqyb%bcpxrx-}B#10B4b_GF@;{_G?Kr6rb6xh5# zi@!l@zCmFKTG_2A4BDCp3NKLe2ShU$Lc)N_K|uf%-wX;ojx~_GE7=q{p(R&?5Ts@T zc>}#p0?RqFfNF8v(j54ud9X{ffDWDmRo-mi0uU4jpyHJsRH#DpJT?bH%2a5%2&xUi z$FJ3ADY1itgU6A{0~&SAjtZb+1kzq(c4R710^Pw0>g0mA?K(0jFvFvk88Yb40;>Il zva&!W7K;M2BB-7L-$cRyTBXSbDl?&0f>Roo0z8gEPG@#Zh8}gp<(L2}MnS0%W+JHC zWp)515yu*Ey#!i82{I7Pe0FfF2HZu+0&U&~UH$K4fr|r3tI?4W zw80y+Kv99YM2Qc4ybIV&VTh*`z-B6elO?E<7E}-fHCO7hK;9BoWLFRZP3(X?4ay1Z zpqPQ)rUSaRsU}N_3)DabFZ|_lWC7L95UpIGJ+IKl1n9gi22jOR4>~Q651dM%t4*NI zcktS5Nc$AD16KjuAk6}A(QssNJOE!M$qecgfMz&~vOr_Ypc0Y~G#>_TsX`J7=&li_ z5>V`bCW>L{2()`c33N0S2jq?&9tEy!MM2O8j6y|DP09XqXoNqy6(4hWa7CiGfGM0eGmEb)YN6;Njkj-JxgaJBo z44e$0NkUN&9MzoAwP0KbOF;P)baEyrM}WqD!3mfPv}p&l797;nCwKt(qfsGtHh zOyHY#K)M)9AnF)F>LB?Kqz+WgfL51)dMV(1zzE6*pg{`o#lRD^p(E?uxA_=3L7V-c zr#nIqUjzq_IQTkH1x80^@DeM~{GkE^_?lL03J4J9*3wpfL^s@U6m*V&Kl3O90$H{9<(9_blS2a6KJ{zYB5Kd0>ThjrUAK# zbO~5=!%P8P9R<1{tr&C|Dfp;W(#^!F1H&?Q@HI&s^sx+bEf^1dEaL+EOn@eqVGm#M zxwj&qqj8@-O2z8F7Q?t5W|rXw6KKpX&G3Mq2k0&ZH2^DpM&kls0cdwjtR1aff<|zvXmGc`x|P&$Id!__|NPutpwT; zro`$fP@)7ns@MiJ*}@8uQeY^89}WxZ+d?qtq;7Ei4GyOb+TfMx3QUd{Lb4P=lMJk& z3J7$42z^i02Ay8u2;K+>KaCr@m>7C)Hy0=>;Bwq3JRTGtFA9$jg$F(-6J!c#76dd1 z$LhF28`KFOyRjJga=SxO90CNqM`f?%>Dm~03p=qz)nHV%X+CxXd^U~(gvJP0N)g2{(q z@uz@HINLGfBu!Fmy zV>29}n1l2#m_TDQ;D)6FBY5b6%~2ssfeSQj2HJ(ltpM7R2OUs@NI5cr$5wF3g1d{L z-h&c0y=>U^f_mSIT;R1tELln%pv(pu+yIZufQ}ttEXl&+I1U94usgwHo?M`vl%TB# zp#CHz0f2^GxIn{+c1obt0gj;EU!YyUU~y2N6ts$!O`p*Qv~dc)4~$Kp(F!C0-v!2| z&u9S>fbRig(`PgT3BY%NvFS6KfCRX}+p0j_EPX~JkN|x57n?q#0Z0J8_lr%RQ4b^l z*@gqrq5~3u@B3oYXVd}-z;}JI=`(781mJtV*z_6IKmzbRUu^n}Dj)&)jxRQSMkUa~ zTX0iW2{h;h8YW?LJir7R_G1H$|1v2sqsuZ_GlEucf)zP3D)RC$g93{aH16rH2pYct zbwYR?85P+50J4~tk}yb}0-i zEy-nYRp2b*Wdf~EVD|>^Lj#RwLgG<@+nNz{yCJ^DH6v&tupoGb%9@cwflWaO z%H{%%7DL%Q3T&WdLSXfL3Tz4@P;mhTHU&{ATS$RTK@7?kQD9RLhqA>K*c2q7YzYN6 z1xYAdN`Xy53d)vIU{jD*;L5UQlmit-pivPf&=?SCeHNr?1?tNef*Tv0kb()ccvGK| zK?%I!jtz9Qc}W(uh*1Kaa}G+-p#4ywGtN0dhmC+VK*}oO^gs$Z&_Z4o(DWOV0w-vY zh!b2EDS)Tl7!^1{1sli};DH=A(7Z|scuo~81~EZ_6(Xzvb_Hk+k^+ykBCn%}qOc=_ zqO=05qPPO9BIuqSDQMx$z{kYIzz90TluLovk<*)(8FUDPu;YctjSUQn5{?tVv^Yq& zBcq}eDAO@GGPx;&4v-dhyzm673QUWGmY9GiZyXuGN)Hdfrh~q7(g56xIo8fb185u@MM9O$%FjH z?pU8y0@lY3n#n9v0J?q&sp6{7QsM@s8_;;E0%xHD=G3NkKA8Nz(BOn|C2Evx2mOq~iq^ zFq0Xy@)ESB7PNYUOMw@3z%v&tI7JkMKvAG1qQI2x$W#WZ2e=hQc^J7twJ~^vR0NbQ zN z0#X&AC<>w+6vaT4jUoq#GEfu;rG5o5M?TPL6Fi`vo)~EMLV-t@fl)!skt3@FH0dJd zC{Uy*21>VCpaFL=@WN&AjW$_I61ohGN|M=%VhS7zl4XhmlHg@f;82uQ-~nfOu(+6l z1ZaV!7+e(WS`ZJk@Aw8x$t+ zKm}cX0h&~jghYfCDA>UZc)(%A15(SVAPGuLiX5Qe%TkmCP1V#xLtar<0Xb4Q6l4`- zvXtZ$*cG_5l_Y$5nHA&|B(jy{6~ujcnLugvh`B2-ljGC*VCRBPjF14`=5`U}7tmoD z5@t*+JS^ai&!C}aUeF?DK?V8jEJaBs2L)*bc~AmpSCjyU9g~BCyd!&|k`yn40=uGw zf;>1~IWj0pFoUKOC9*(n19ike2^Dm+17ntw1gNG2iz`Yh$b-_8lmfegM3$liXn{JX zf^3$8Ojfo6dzNE`H!mZzgMx&Dq%H%f*nqGYK?Mm|j0tp1Ihe(4#lQ@aWdUs>0E@9& zF|b0!*g(sX!D8&7tq~HS*&PW5Nf0HeAO#xuk%BBj19@0M9#rlMCOlC=42Jkr<5{^t+pwIyq1QL$SU=H{I zO9{}VrKBzccz3phBP&=2d~l3}BO90lJ}p(kksZuo2SpI}fB~23(h3UMO416$5C})C7a3~*?ITa;9wAsKwGS#vGDp@dMOJW8=~$5kEQUL8T z24BzzT7)41>Lh}0E(4vy#Q+k~aO?u@qy!zH0AZo;P45Otn=z??q6ZYlj*N~M%oP}s zH>QGC0o3q=hKfMr;tZe*d>A47G#Nk}!DSQ}9k=`gpXkcq$S-gbG^zBJPIt19~iO}L3^dPaDmROVbNf6P~=x&0i6{s0P1gp9KfO^qzK;UE1)Ez zC<;pK5X|i0SgR-oVGkUs00}NWd3H7~UIA+xTRT=!F>wh=DHd5Kbqz)>1|4|?W+xX{ zH*S!(d=$lbwBRgtFe^tf!~oGG*lp|$gUu+D6Aj`zHW`lK|!3CK|vC{z6mU-AgCzDV+VF_ zks`l>uwxylzse5obU_0KQbT}pB&#D6c$tlWNk)MQq`{hjM}bv=$q_XE0+9qK^{wEf4q63e#ssP+!O50Ik(I|1 zWF-se0z@%TJ`)2SKMp#o12jkkJyJ=)5p=f$9yIp#q?5U^ze|n#d|wHZ*{*yoRe(5O8EEQv&zEKK_~#1zDRK`XiWL92E66_Ct-y$EW)Bq)qDm>^zsWB}z;P}wM=z~b1z zq`+DNaxDWW1RWU!j={pv02)9FERK8sF@TB-1p&u~0}O@IW=x>d76m{q0~u)n3NsX5jnAI6zCwK*Kj+>l#?VX^TadfyWWTWOC#HZP;Q0M=ogVIe6hDC^aFH5a`4c z1s2C`;P?gwCTRODs22^oOAr(h!mhmLkeq@w=Yn&JI4GyU@-8DNoH()+K|`FN4vH8w zvxqD5gTv7h)GlSp0v7~zS&HC-fKfpl5{_WwK-cHNivqB50tAd>h8R~1HI50zIB-5j zah*gKc+e2)Ivxvd1z}Kf69$z5%V=F;B3p2<;VibtI&YnjwPV^y`ceZLMWgyy~2U&6;qH`5JeEIY(^A8C|+^oC#tKVCpd2Lvx*n6Gke8816B>{(5e5Z*MOGe7 zZUq5FRt0`Xa2P=D>4WAv0dQ(D2Bj8o-xXZvAc|?$Eb!h_)M6TvaG_xWDrF=U*?Elc zh6yCcx`1L7R8+z;ml=}?sENc69v;GywG;&K1P3?|sT0Tth9I9&FCT!7qbwg7fC8!p zT7O~W0|gexec(7&U{DZnlqdm}pZ}N(9XU#hzy*wB1Ee02C@TWr*#s+bL4g5E643Yu zUoi-}01?!^VFM*U1_fcz_HPCS@a`%W&>e{mkXW&C1g-lq1RXF6F3_8FfxG;u0HUz5mfaBD6lwnHZ(L`U@&Kj05w9tf`vmA zSR9Xo9jUq7uS_2jF=&dzf)MPFOsd*d~6#2pXY9K{E_Uane$>7*>fhBuLoP(xTAl08Xs8ezntP&I} zEE-HMpe8D)W5cQ-tiY-u>?y6psvx4ksvrVl@iKs8OB=LHh+TmdvP)i(O#xgIyC|?` zgAM{^Q(y&6$%rVhW-E#)u!DH)Aj7gjdm|xDB{h(}kh}tOv?|B}*qS<;pd=-L-kyb~ z2}svIY&q@kHL&72b5!2G?;RfSV7)OP?GfLWd|ig z#uCQ~plq3?CNTL4B=2 z!=u10a2(t}1Rqt06#h%l`d-o?^NxXo4b(da-QvZdCEQlGPC$KNW@ylse^6B= z463Sx6~sY1x5Pm!ZR8atKxtSCvcwde9AG*ee}T3SLUjE=Fux&~Ul2?VP?rHTZ!?6l7wVM1qpCgghii(f($s`L4~Y7;}_78mq>Z;_B?28L+e2)P@dz&$iqya1y39b zpwp{x=id&r{0laV&5S7qQXdqUF@-QWI5H`4fU;)_IN`HsFlB(&(%~!^Z*cXrm)L>^(;8&2!0>y=bBywrX z@Cq5w z*eEoEfs?~Ys09kFpmj3hW=uZZ3hbbc8>m45DmOtzvIdijqL>1-y9O@qKrJ@~(B4s) zD0najG*kzwloW*(q`-BTFsR`R9=8#Oq!L&c0#u7BfvP=F1+K&jHi{b*LM$4f1S<{+ z8E6*=ls?5lkz1Grnk02mU{w&$26dkm#LE-~K#BSk%ok#2OlLp?rC|55XfTB!k~etS z8R^NJ3*vBa!T`A%QTKuq1}GunPu}39Ee}q#;G`|?C;+PS!5&qFr)vc%aKZ#DlY-UN z(6lY3AP!I4Qb=hVw7ds3ZG$^DpcXhv+UA0!ZT=EP323hdmbO8YI!d5%St-y;AXxK3 z0nHL|NZJP1){+XKDhg5$pDB z5~vMGQ%(u$zgdVQ7>xV6sYpdjT4I>r%IwE`=6eHA0b z1n@F5Hjo&2i3*qnUSG(|XJ$S&IBTLZDWdBt%To5h5lCT1LqV z5(BjnF1dD7!6~n+c`kV3)IaAO<6)ln?Q|!P%=<~^m@fW z6J-LRm16uL6L&&VCa6IMI=xXGbdorDrx-|!ixOfy3e;tWs8Ugq1Z7}J4JH94@G>Py z4JHXC2?a?FCeY{;B=Jcpu!62!lTcvI1|>fQu`C4%Z)wQTl@!Qq5%8>^g195*$U3;t zmr-C>5QB8SA@e36O)j8}!3wH9*%ib<;VrBnmJK@289ZhWnup~Cd1@EfQ;>d|3nXK( zfaYpAz!jpfD=%nU45$|h8YTnP&|)y3f&0DU8cZ?}KY~(-l9YnD29pA4=9mS%z6fN! zq=HnIf|wNp19+SXatk90`N+BWQIaIE}%)iI}SZMX3zPmX)H;0p&3 z!&C6aBBUh=S}Y1WG!+zHuAn_iOrQl1(D6msGzkl2d=VN_(Ai%sAq5{_L>b6OpY~+~ zhZJZ?2^>-&;}GME(2xSV0vunU0YQ}UMVN7*)(t4&!Ny5|)}nyt1wh6T7+-|D4m7?9 zGY%GyVB-+uiy-3=@ov*OPENuz!^}7k{5hwhXAD8$O0-u85D#RgtI}tNRBMfIlACGX+%JVXDfkjj)xDW zf;b8w+Yu=mI+hCB5CU4&3m)l~fgYX$NnxNnu-FusAq5^}D?h6ONB}aN$_yI1Wdg;=?hfE1-dU8ueOot2_L3~nS`QY`l#81qM+szx%}qKBbODN( zW3_@9Xg57%Pl1S=w1ODOcW%-OjE*dB(u&NWVwJ`55;PuaKr7dn;Ag@sFmtbAVq~rd zg)%5SWR#deOBz{tLFdkJA^p3+JzP`#j4gW#j=L8>i42ly(mWGgXcD=)wpoOT6Ad5kn17#s96I4V7vLqF>uL-gcl^HZr0bjHU2`dZ8%1%%SgWQd> z%n&q0&kTwX70@}rU?t27Oh`%`LD#G@fWl3NTY-`LArm7DY$f6WhHNDk$Wla*pBSKt z6SRU9e6kNCXyn9^Jqxlao)KgQ11PI9fYT%>>NFq?3eeIHCNn0`;!)6HRgTTu8yXlK zEd)-1auw*DIfya|1s2efN)gafRM6P30u!jI30l|++E55Off7{l@_+?FOJYHR4@wMR zGZ_R-NQ|I~3DCitj^GBg zG-wCDW3`*KA{)p@99aTqL8gPw>jhsn2-+0r$eP8+!N3Rt%uI}+EqDwd_eo^CgBGSR zftNQs)`B+Bu{a`5(q`wjVT2!`Er1AMa31CX9iyPYq`>0HlO=EtWFzR(1msKxI$>CW zF-PDMNRpcibf@rD7?VNZGMM>8laU)1hXU{;x%sewU>3DlPYaer(D zaluzGIMtgowQOr@U~mLo)dae*=m3K`(;tum(28eAjx5K5LdP4cuC8J&R$?||0&4{= zBr{{`foKCIj5{Fp+>Q+m9SsbQ7xuR`FnIEU?u2GS7Rq+K$>7Ng8V+P}gsL)QdH~Xi z;BEjp6m-;}8PgF66Eu=@0Lnx%KO5wjClJk`^6?6Sc>%-(pEq^~qz`n?+66EJqy==E z1B>Gc2%i<4U>vW2dEg|Xz~cA>!eeo~0cL<^IYC7=Geqqhu%H5q;{z}QW+c?47hpk< zdq8PV0dz2S187krENFbP94)|m3PG{Z0SZ4erad4%un=&pfCOJQsDICrrNm?gi91II zl#ogjQus|h_;~UUfgrIpH4W=Kkr{O83N)xd2ZumH5wr=D8FU!} zXqmYqXd`Hy0&97p8N?#cNFq3&gRTH$F=OHZU1$Y5%n@{o2FOHKM`n;iLEJ3RrQe_u z5A1Z%0#{a0xU2v>7_@d3RHcIZULb}7bBQAp=ww9}M+OC!?4rU9C1#L;@YnD0 zMr74s;!xz|hTQQ3TFA-_auPErCGsdRgKp3RweCTyj6r_pFk=E+;0V6e4ID~5eB7WA zTLQ9Ii3`+v<;nmZQg>lXQv(C!U`9~*RuqEzOUw!!pd)v{WiJD$uL_!N08I{qwnIQx z2D3PVl`4U934;Q&rxJrSsE7jH^(U>!p}?ZZ0NSspzyU6SL3fpc=Hyuvz$-dAz-dAO z6z7nVo`Z)M($(Yub)>=T+&LUYvLIgP06Bocm6t_<19WB!CuqAgCuoDL5(`)jsH_!H z0<{vrr+0FK_yQn4w*oh)#9`p!0iC_Ts=(m5zaG?B03~iE7RQ1@NL0XsguziBbRWF} zgX5e3|Jgw*Ssm5D7l5QIv1Eh#37|w@lI>`h1v<_F)P8`(AUHpO&h>UggeGV!0t5I| zP|$^m&|}XT93?>=r?PAXc1L+P=@LayXPOfh%&;J3Q(y+Q64*coASrT!PM!tbC!@ds zI(AW!1+?D>eAlH2=oD-P&~&V9nIlVKmZJbT8oAx1L7PCNLC3d)?quXp;8tW%;0Dbp zf%67u5x8LGbYxOsFHr)e7MAQH1+GF+)G{lupe71M7H&vm3{*(M(}xn90<$M*k1sr^ zK@1Vli7spk%nBTkl)wpMa4Ik;vVitwaC1XWk7ov@LU4*yV9f@3lM|FeK(#j~B!zH- zYGF>y6apHH0UbdPPa&M3*yjLcP)>LX;RK}+4p0i=03BHhNg?2QDx?$w=0j5m8zhBr zaYIT#u)~yC6j;Hvj|L94^A?HEN6kVUzuUX zfpQbL?uJx}U=0dP@S=(dTr_~qgZLC&JA;lQs=(@aoFPkzJ4=ZJTOcOwE0J{(5-y5Kc8I&R! zAg%>h)Jn_>oLNfj3e2DpT6P5%&`Nhu#&TppHo%cVmjT?!aAYauWd&tTP#X>8Q*Z+U zbet?GAAsv7NaukW94}cQ4ro0hDCx0)vWp{wzztp?~=XEumyz-=BS7SK#E zvjSvbj1#omo>_q-3tZzAW`UZEY@p}@-A4$%(!rY-svF@qkWXPg108(@@)}1Ju0~M8upk2_QAz;T7 z3|XLj#scyLXq_B4=-_QwtSd2tT+EzZsKg906co0gvvR$v1!v{K~Y z0S%QZuw_GJrFd9D8)88x9oM__vhlERgHp933s{vR3up-!hhx1vFB3PYF{r@=jhrGg z2n)3I6dFK`3Y-ulLFFQp1uFIH!98@4D?oS2viS2dDzGSUWGjKj#4WNQ$p9Xfp!1|z z%$UI83W{iu1h~luo(lzK6EF{4-+)pFNFJPVz&$KScp`yJZ!>@nH3MBw!fxWN<@EfdzCreinE)3Mf+0tY z6}X|+gVyILaDcRd;|#P43Ebub^SD8W*=H#-z)}V%&48i=RDf_QFo2ULELAXpW??}i zJD@^=nH!-6T*ZSn=z-cxpq2$Rt3tSt78Qpg_=pG8@CEfIJ+hQIL1PfmszZT8ffM3z z@KJ&03Jjpg$Z~W9DFa=UD3IkTt;Ff5j4Lo$5P`uBiwjW2>BykT^a7OP%$Y!^c{6B2 zx?JW=pc0$Y5j3&|mIk#@u_k9&idEorRDm45&Eg1ImF@_x{yU52TJ{*VF*zB*^x()!x3`!xT8GiM0JpD(54@UqZ;^P zILxLW3n;O&fcBL!gN8OhJITwV^>H1F~g`pe>n;Vg?fx-X^6;Mk86dDT9 zkq2f_W(74&SsW!GT0kD=%z`y=K=&ztwoQQ|0Gt;=?Im#G3L8BDw~oMFp=?B<05TP< z927yYWXB9|pfE!kDBwHCK%IVglK@mDgF0X!^FX7t3T&WU4$1@ytO8d+^|KJs(9J@iBncjmRA5oyHe&+qDu%T;K~7>Y16>pjGF5^bl%hqHz}**c#};%0 z7mFDaXyFNHfDW>5kQ3COEdq6=L1`Rxdk6G@bZGVl#S15>g$KHK08+Mb!b6Ee0dxqc z855`;XNKks(D6dBz9m}DU*M0M8N}pl+>%0tZNr144nfy@T$ZmIU>|kTVD?=%7Oe(B+;A3`(rfECRl3m&H-G zOcB)82WJsb{}0kjf@BfU`I!pfE9e;%kS*kaSP1g80;t!m!~${#sLKrr7*K}+ZpK!*u|f}UFebf7DA zjGBde4hJJU=p5k+XyvHHtiS~AiZMD?C@_L+OeGf3P=1yYYc{0V1`R$#i!jh;c<>T+ za8m)&q5&6P3Jl+LbXHKaP6Rd$yo|aW=srF zgFp>V(4_*96OS1|OG3cYLOh`3D!`Z0gDXW)#|G3?;sD>!2C)Vlu8wsIjE>A@pfm;M zg9Ue_>>H-Z4f~sUtQJ};KR-nKHI?aFs>>hAp2F*l4rWe4Y zF5p8kSwKmU5j2(r9(iF0^}E>>ITaX{m_U7VcF=)MB1)j+7eMnvieSC~h!4szpmrt? zcu5Zvw*m)Z><%<4uY@$1q6C^|02SR}hcPHHfr@TWNP}~WW1Rv!$eUme$eSGCtiu7y zIxL{90}548mShAS55)n=Ixu&GCVv<~I@>_vTfguZ2 zlz^I@ph^gIj6I72qhlSo^}?zEI^h^pQGf~=aEbsAt%4&-fdOgkj|mi(AjgBFMTrqK z0R}FgL4_e`6kP#S3W6m;hxdZYXC_b`4Q{!BOB^Op*$BFyoe7jTSV5IC2PhcjK}iF2 zj6Sse!r-U|K6^V|i3u`v1v*#{Jaomx4N7mI_6sYdd}cxvP>PI@9xgaILARMHfG!CE z71WS<5l7Gwfh_QXniUjE5(=y^H-TITax(+CCBp=6$uL1$GLZBBLE~$nB^01Y1rK+D z+s{m(f|?z6^dG3efELu?7BlGjAxK#O8eC@tE!+ZI2r80U&6q&G2i+yWp#%;Z9?*&1 zps`U_NI?yDB1kD{-U%|o44N%r5V!_vI&i<`VPpqg?g6f}89>XNAjd0%TK7zj6`)=R zX!r-@Hc%)qf%hykf{rTzsbI-gVg$t|xTD|+?v{em2`G|57<38>bPNfUy+G%sfMW@C z^B<@a01gulC02LPxiKJfz!C3Q2O2g)%Dk-HApc1yvVrqEBh)AkB^FptWdVf(sJ{;? z8bC=Hd>#lRC=arNqJt5XPgz`fK_`|7fL5-7_8NdzNS@FT!xfr%%J25y5Af+{0%yS8kROd=@oMQB@_7O zO$JB^fxIT8#EM9QN}xyw<#(|6u;h2}3<5ZTg7P~XIKQ)j@;f6&erJQ^cbNY{`JDxn z-@!(MPHck*789t-0nO5bYFE%vZr~wUu%B5Vr#*n23&G&)Xh0KWpb1};3WE{au7woE zkV=9f3p6nRVS~~ZxOhNH8ScDnAmz~d48jCg8{i}B!Na9sE~HLjgbomb)M-GfKv12+ z0M!nf28WCYf>@9yJ80$`G*}NxnV{)ga3!JuO@rVh1)ie;?YV=PiZd00GZ?Jw;Q{r7 zKvf7NSu%r?CDwyYV1~VoOer`vS>K1TaDx&~CI!ZtRxo%;G zWFO=j2INMj5+znh?}SBx6;`!4awsx5N`UVa0vBOeYZTCG2=M9lte`>zR-Z5_fa?=* z>#9T%bU7+$*%4@Z1hf=|0kk&&)ER~t&jQ+v$f(Go06pg$+ysKu8IBwv&7f{6vm@yG zUJ20r1~aI}1C?-0S)hUq!~!>2!HEwv)&a>vkWsz*EG0(AdId&l=rA8QcQzB~-fU1f zfaXL%>l;AjGs9X1#gj&`rwVNm)ND1N9&*AVB`i@ZM>kx0pJw@;H1Oo=m0VtF=!529OEdU zzzCZ2EhtoA1WoxWGC^(`00prUC}bfECBOr!puVI6lVbxDsKx^YGfNSal?|%Iz_SUC zj3vIjOkmG}Dpl|fYtVIHtP0>=Jgf>#psG{AlNWR{J7_e6v9QRIsR-1DVguby&jf0~ zf;-6In^mFR5>TsD;3lZzR$u`8g&kz!4$zz?xOjvO4zgw`u_`cujx+)p z)(Qux*k=U|3xWfkQ-LWPbi}X*6A!4J2bz?H3?YD;4Iqu+rU)pfF+kS>fW}AA`w`%V zAgB@ml^7srvx6!D@Nl{UqXIjq8ej*Fhk`u`Dny`dG*F@kO^1VuK=6`dc2GqCZoRRC zDgsteKY|@;{*Fh1RSDdN;Q$4J2q@ozJ9&y=z5s|1x``9fk6`3R3;}^tjSMItU_*1D zu>sIJ1O>3e7!(-M`w<){{RpISAa+nW&j?DIpuP^MaR40$g1H-13b2CO6=0(!xItkl z0$FAY4lU4W1fX^+XqJ-;G71EZYfeO5bE3vII5N>vFK8_iNEH{fE6WC&4+9^I3r!#j zj0#*R`GXN!Trhz~f55FV2FDuEh&rhC%Ie5mD6PQiSWyVdE}%2N89kxP%t1%wL0ZTP zjG$tVfqNzoBU?RaRZhXC7|Y!2&mx;ZIOWZ7!6@2h{r)2WMQ0oPpg+bjnSThV< zk%F%_f|MrwpdnOHMgWb#fevv5O@@I+-Pm9qU$9qjHB7)OikQ(8EY5~711P~l^neyp zf@ba@4PgeT|3SqRv?0t4?%yH;3mk}`hA>zH6oU{9>LY*_kTMm5TfR)F1uv-G4=#ow z)gQDh%~E27PBnlM4kRQ%)f6--;BWbYZ9tT~ARE9uhz*be4|KZ@EXWx^_kMwE3!8e2Ee$BSBU_ zfxO770BZbzd$phv6Ew&HUb_Wa8^>VA#KR97-~>$%F@pzHm?48I;FSyD<+z|8J-iXj z2%3~+1`VpPf|g8|fEQ-L8^KKAvL7@-#01Jzpi&AnNudC?59D`HNPs$xpduL>Jm8UJ z(5g1jR1(C2AeD@u!Ef#uaHCckynfpevCb6S1z_d?trnf~`VMI9fg?-cKB(~~rNF4k z%;D4k5^exhCkl|^7X>DBW(JT)1)z7YDll<#Gbk_!yawrF;Jyl4Dvhv*0W#bRDW5#5 zM~I0+ZBt+t=)fupI;RV22a;Ow>ADb`B_Sp-3S4b&XkZWkAFKF;i)<}rd+B!bpOF(@!O z))zZUfL9lSuA}2AbNnw~sKBhrECE{I(hO?zK|~x`vIJg%O$2QUaAW|D{y|nvL5edL z&|*DiM+I2kVc}lR%*0gB1`C=8h*kWK^^ooysJsJN&seCysK6rd5^Op%Xsr~uAcULF z1iEWY0yLzf$t+>cEC69~m@{)gSPbUO3<_XH4xqL83QV9;LkozUf;qE+0*m7XhAdFI z2%3(&0b?>bDu4t*dL1=jECm)#W(y@YXz8HDZqA$mF~~p(R%9q~nlnd01T~bnU@E!I znLQMkKuHB6QdeuoRG*Q3AA* z64c;la%=$$USY`6WMTlVi(qp6!vIot1|g!rqRHf9&QtH?bQw4x^(l`Mvm;{` zq8qp7#Tq=1aPkjl+fmYJgEfkE35!9!Rb+hX#t20YVA96fTnIr z99a~YKwG>ZwLR!)xO#rjG#F?WgSiB`wKQkff-U`bA#3xfL+3< z#0(mC3j#TZff+QZ1ojW87zSso+87QFL(r~94h2quQ=qT|4ZK0tlXHNMQs7qL1nFUR zP~cVoUylpcp#Zw^Oo@vZyd0Gaq#rD&2)d*TWULaGBgh{LT%c`QjG$E>3<~UyH6S-C zf>!&2Rvv-Y_<|M#gPaN4&gIAeFYFvaNeHwS0^|bFRVWOgh9)R@lvuz9gSu!8j!Sno zG%zTzNQ0^qHf}#~Nzcn*&)_If0`AX1no*#vI%Q z85tb!fGZ~O7@NR9P-5U_V&LXu5cmaR3rqzCH@7$nR{`GUWnoZY;N}6h*#!QA)N@-9 z?;=o-PlHJWsxcW<|NRG<0VZZv#^K0l z#spRX8h_aAK0lZpi`7UJuS!xj{+Mg+vtK)Iun@X4jRn? zZE3s!Hi;2Z`hd#;ur;8nlnqpjfL7Rm#!Ve{L6f3vx(wj4JkTnrEU1gXi!?wU06Pja ze1&i_SO_%k$n40I1v*6&bfR_>C^$f?+Py$qYaRdo2MwP&GAe?Wbt9Rhz>x*o2L(0) zG(-%N0=o^oJOh+XlvowO7np-a7eO0aU@n3L3|J#%U>NM@&@4V?21W+ZN(@jj30{Z5 zlBEc`mlw2?3e@cc6|taYWm%vC3*l5Y&}K|WMlWdvmMqXsdY}<(c1RbVRe=rEwPRIa z2i;2ru?@meV0W~FWLeP4mn-04wpV0T0K3J?4HW(wOg*4D2N?ibW#Twr4^pa8mRgH4eI zv_=E81C9~A7Y`hapaDY#HfTBlAF>HG7}Rb`%t_As-WPlFIMhfknPzD&{ih65C-)qKv4|3ppW?gXjhO2q$mPqE^uD} zvZ2=+H6=<+Mc{?NOdz`$9GMXsSwPNahG=94Yh(gzbYy|3VN?K5_d2qbfM&5ASwI!L zqa?Ip>{t&TYXX(5vl$s#>lGLTT0tocq!rv;5(M}D!31PL1eD@HqgM(H0?i~44@t5;F%QgdN~tNE{C)^Kr@q|t13V_gaNu;9MrO5;1*Z_G6iH~0Hjf) zzyP5^broX~_YY{=0L2>vs2p|#?Ms;0)Bx%>z}YajLpMz|AjyN-5P1d0B1O>3dWg$G zMIp!#aH|tE+zfJr1gJa&RdL|aZv~`#b|8l%fzo6?SKV#=pU%d&o|5WZ+H(odVF%(69h>Wm1Cz zxb?;eZVf3hI(}ksQ(}@rNRwGWiN)yvLo?`-Q+-A*Q1Ve=acXK{Yz_byCaeLVni1r)1)!t>+BO97Y>^@( z#14dt2CxbiP+y^;q2T}nNC~K=t-$06IynJ!f&c?(5S{@vHX`r{)NBAZei#%P!9(Bh zo-?@Ib%YJ(fU0S5GaWuk!pNP5=r1dvY?23u9())FlqIYc89=2Eha+gGHi#wQr~>L= zF@h5)XlfR+8VcMO2e}f7vfeF+gg@o`kuxCIevLl1zF;EI;ay$b* zMFMQBQ@tW1sA6K)WCjmlgVxSKo9&F?fkO=@3-C~8Cn%+G7b1Ko03RCzjcI|SnhAV& znIi){fWU1Dh>H|JO$LGINUnj8IDzzo-2keHLF<4J!=o(RyP2>xvOr61A(JDZL1R$D z1)Y2ao>c`OOCh4bm<>AogT;{vHZ}$F2(u%TKsU%EN}xSoOj$~7pdy1Ax{Hqy>U>Z! z3aT_Ez*(FbbUY|%D$-E_R1||wM|R@{Po-)wv1Ef2hytib1zO0d#O|%c0q$sVf>!T? zGA=u4laMsz2y9T5#pB4Lz#$D?q|czh4n8}AQxSCAI3s8e8Ux6koC>U<9cipE$ATLp zpdob)CJoRmm;@+HK}TwXY+%q}(#ZnN7c+rs1(XP+G`gOW99;$2(j{tafs+bkOcUJB zX2}vjwg=S5RzOLk&=MO||FD3L8$t3S6Zaob1qdCkMI=cD=*k*!V$cDl1n{H`DEPqh zrr`KldsMW7EN0ICewz`kH{WB@gK z!SxM;qk^M=0*f>#kwDTt3)sau>Zlsu%LZ39~dA@g1}7%Mn`A` z0y;Xyk;4(x?Eb{yCJjEh0@QwBbbJb}O+X%F0(E*ohe1H*DFxa=Zjb_%dkl)8*-Zt| z7L-EAhoEH@pxW7y*^vRF2(+>pv;qY*#{!yq1Jz6{3QQ15(0RfNtd0$g;EPVc4a<7a zWsWS44IH2oh`^IgpqmU?9DgumnK5aA+LDmnfD8g1AUA*<$KuFk#^eAxlm$F}V8*1P zz~Ts=BQRr9P+)NcPY-}rIkPzSgGM$%g%69sLXdXQKsjja8CqmGL02DliJPfs7LP0E$N?25@r`l*a`of`mZ_s3}Ili0*Di@dp z)`B#HR=pt#R3>f}Mn+JB5j>Nk$mCcL8u|x~#ei2sfqT2|(%g%g!G|u9*VqC@J!p3s z@r@V_CTPnEGWu`>)Vl&NN&^KB=rBXjLJd$+jlFdTzTTYZHWS2-AE0I?jqLz8Uuk9s zcPD5}8B#0QfR+Ykf#;=dhz>L4Iu4?VL5UH1T^VTo1Gv6}3=@G`s2U(b2fSegG>^;# zE}|TzOC04(xle%RQXvOq*?_mQD}a{u+knzk4zvP>tbPU+i5yC7puq=LaM1#q{sk3; zpt=uq3>mAZv=SS12o*f``KNVh9HH3_xKB?mK~c6)ceEEvWneO-L|0ihvtQpt2P-b z9B3Me>h2)VCE&YlIf6m8v!gAvO9V=M3e3y7W59(sD6BAZJSg*mc8Y_?Pa%y}ur}}t z5@?FS-FkFn;Qj)d{sFZXKwTjL@Pq>BxD_UWIp9pi2o{D`)gZQr5^J^sBj_{;CQx{S zgpfPkpdkxz1_f2QkQxn~>Okv@K+O(NngnfqS6~LUazG;#T%eUEpy`eJEG6bF$VfXI zsAm8%pE*m34c!tY76mrYa$(4pD$scV*@|F?ih!14vx3|ODNLjkz)O}y6hLz$A_{Dv zWrZx<3M||!m_Q>aObU!SphgX-5CJWx0!`{LD1uH!gn1sc3?DKd&k8EUM3mUG6<9!? zXNDCu$esr`_dv(8fWs5C83uHUD0qV!XkeFF15^uv#&#jXAS1Fsfdx5y86`kiz?WAj zu|fj`bQ%(P*%!oK@X0aEXvZG1DR6)Sg#*0L3^e%!x>pCZT>x}!9Oz6C=+#wHkRn?| z0d%Xi2x#Lf=%^9UAyNw9BP$`LEI;VFE5Enk3-Gcs~- z2GuZ#c0Q73D+YdWAcL19GJ{G01qMix1r-4GkP{|Bl8~eeD&s(F>%h$kP-76Z1gsD? z0K@_wGY73$WVB*n05^z1BXN%WS&&g71y$XZ6wB0gr&=&Asi3tCnMz9ETO0X)qK9#B+Z5?BlhUG4~EL%5Av1+fX#La;=Md)WDp z&_e>i%~b_vflVL}gVvWJ8m!FRL^N~{g7tyc&cag+6Sp;}n*eLVgNkBM5pw{vH4;>Q zT0q+Vpbix1q(28xYXCI8+ygR-`z90Uif~3y5d~gN1{%$F{LcUy*=0}wr3^>#;2vlU z6Eb!Untg>#m4UXEgIS2NYe=EO08W~Wjt%vNjt%=k1CF45jnD!fwD}C#WCcdY|NKzv z9PJB1-5VUxJtpp%6D^SgnA z4w|=J7@!~tJOBth1(?g^ z^dAD+8|s_E)ow#W!w378{h$^m1NQ__CkR^PTwsI`cR@xo&VbBWz?cPJbj0kqgAuyw zh}m%ioCzA3UBRdTI^2VK0jRCWWX5!Y5maD-TCfVtjwcvFOL{IafXD@mSpw@o4tE62 z`#IJ_*U!MFFc>tLY+xe}EROM@wjX$k3S=56O@mG#W^lX!I?WcfZ3dFmPz2S6%w|j) z;6Y3fPlHK-7rb_i307i)+Q*>Gh{IW+(H9m+g+lOPEO@d2dxs2SyAJ43G0?rz4A7p2 z29pTLT2PRH_HxxLu!351kRA*JXdeq`?8FhYPYHCfiZmz|m>n-L!d5mhaCf`0OVu;g zG1jowGuAQHGuA+3=L1`|5-Y6Kb!?~woh-%b2wHo^13H_Y)$s#E7U)u84h2?6^DITs z2^b(rZqW7ftf0kYphz6nPXNqMSvFyb2J5z*o_;I$C5Y@QCLApK@haI_dk2F7cV1-m!&8OQGiS;2!rOugh2JAup%R*=fdQmAOx-? zz`{a~s_wi@3XF;(3XF>GG!?-Dherx zf)(+Ajt*i}6aihZAe^m)aF>#Z7cUQ}ECksOT3q0$02){UIh{dZE-2+maVrS%f(Dxz zvlN9K>%r&JGwLufDv3J=WGRU{g4Q~M#%!1zRY08yM$kQ9LJEvJ49tq+j*N-|3ZjZ) zpaC+_$tL2C37|b|@{r|`j3r8pj-405$H6NIft)W2x&)5dL4i?0qDWCfK~zZyG(H8@ zr2smZ3#yD!0j?Qzlp5$R97ip8P@w<{I2{H?klPp`ZW98{#DU!g+EUL{k_8&sVNehP zITUmVuMkK%a|x*RuP6y}F{ptlz{>`468PL?P~oHqI_O;zble!Y-N>LM1fD8jP!Iy; zMoCZ_;8u_XjTnOtf}hNIG)mC^0ICW+{k*3VqPp@M3QzacMeqM@&q0I zzyhB2V1)FUm>oI5XIl%b2c-+pL^P;Z1)Aq&f+-NdP{0E=ff=Si0z(1##0JnTCn(rK z>q|l1U1Tf3M?5&P!c5S>FhK%r1shC(0fqt@umX0N0t*ZU3Sb2sFa-w~kW_$zK}Cs? zm(h_E)Kg@1WGVq=QqT}TD9P}GR-UtfQndzXP~MSI5fp-;VjS5JurN0$8-NQ4P<~-> z)C0An>J`Nu85E@;4NGvo5{0H@P#$6erDH@MV}|5076nnzv_2#qGwLvaGCZRrOO_%i zIg5g(8$i>c;*RxRic+9sXw5CUDr%j_l%@|U!doa6rb zEItbXAzmQ?0RbTd-~ln2K?Dd32yw82Bm@_l* zNWpm4j0`-IFb=4XBmv`qOb~~0z?#Ik6~rAmKp2z?6l6hltE}S>21PlL%i!(>jmU$R zY0C$IswI9!VbEy+a-epGr~*Ia)@&g1i$; zhoZcK5NI!otRrY7gjqq(k);$8Dp`tRj!cTupt)s!MPY=EybKstuopTSKn-Sx7|aYa z7{%Ej{}h6jqJZwB168w*j9Cie3PN7eisF!j#R~S7Q++5eg957)gMxgmlDs*yg(IUP z-0zT*K-RGVd@~GKW+fyRLCv&PAST2E3bKxjg-X)WiqPAtWa z@M-Y;wZKo%jESN!$nUJ6t09CO&+YZqg7|0Nt?(@-e#t=)%AM|JgmI1#W^W zG$jd80|&_p1yBjf%MNN%F}U)wgD&+2nW!kNAP!pHr6>d{4Ol@avtXAY0);4Fpuh z3L*;d#v!PX1r4h(D2gyUC5nu17{l8AzkH+W$!veh8}BMegz26|5}K ziwy@r6M!I34U`{2c7w2&w4xB`pj=2QR}w1ZfJ3vgw%^(tz!Ih*HRTPw56_r7=Xo|2dZGAE? zgMt#M2`j?n08R?vaSTZX5ojQ>WI2Kof=ITK5GWyl2qF>!3;5<1c;qSwffE9#Cjz-< z5IO2Tuz)H?xLQyr0u=i~kRF7Jf)YGlLA^}|MIn#}AhM2U=YVeJSh60JF+t_Jl906H z#YG^oLtrr>X$3_E#UyD*X1F0B-H;>?YE^@}8UyHA1rY^F5Qe4*P`ooaD1ef|8-^^% zP=k`9g5m-tScEY!B!V(1sA|no0$nW+y4P9GQK3jl6+FQWK7bj{cjIMuWCN80(uz`G zEzt5zLBugRO9^y`HbNR^!v@Diii)5vE2s=$a9qHoAneHCp`<3Ar6dN*n;hVK4QlU#id1lEr2uL-yMlTLBA`$N?>+_H zfhyxzuK>P)Qc)Uwo0KRhG89Ap_ziVhW-lHIAG)pb8z7k%hrsMn^8NdnG_2A)x?r99NE#2q^GD z8B)rTK|ul%KGN9=QjQGn3aXCJ8Qhel3$sC9P!NL}>R6ryN*<89rX|5~Ns@w^w32F; zf{0_o35F~sVMoqfCD5J0N@`h(G9XJqaiJjY$eEL^B<{%W#mfL{H)bnoIIb;MBn*mq$A&}K^>Y+O6p(I~1ce@0jte9Ky7yK|7!(W&GN3v~1Dri% z!2SmLGEYfUK?GzqFN1=Hf{+_8XsIcagMudbL<(?LU|?`?R#XIe0JPB;N+%AmZ(Mgb6Zm7No_E5$L7~_XM*cNH1_z!ypaRm`a#xf-hH)#cN1r1MW zMJ*-=1!Z0a1r<K@~6LKvxk* zaGC^VJq`s`1+}a!aLj_TIH(N+8if^60A(u$QBZ~v1q*@(j6f+B)I9?yJWvh>=a~PK zU*7>OpymdrS4A1nWtk)=A#mV>6N-?6h_^H-MGGm2Wy2aupdmCRP^c=2^D-(3gGTH` z6hOhN1R8V!XJ>G{N%Jy*+un*Apn^vNwCA)QbRndIl(dqNf`pfXgk!Z=p^}KSf>4&C zlw-YPoq~w8f?SrO99Wx@1}}qSIcV$-+$;rI07?j;ix)vddJ5u>Tm`%gpu`2@g32q< z@F1w2Dgx@?iWGodq9E+ZR0_&Jpc+}uF}~387^vam$e^g9AO$K=vmDE_l!P2XMHqt@ z$YD|nLLSoKzCTovgn~$xf)Fls+zL{Te?h}RkfZb!q!cuYlvJg?csUfL6jU7<+_ONL zR1+K`F#DC%ctJT-6Fv;dr62*yvyKd)vH;v10X4FC85GzRg%#KpL1h=X8!KO`Bvh;* zl&vTPlL2R*dT={V0o)T1N9qZH@)IbwKpg^5k6uVY8kD&}J4+OVvmF^hWvYk*pMr2U zs9kBGAPgBr&2}uyg0@XT>8LJCNm)V8ih)4^R7E=KI%mdyiVOLNF4O}98!pW^5 zq@W3^3zXo#<4_P%P|8x2hPH`V3YBER&0}fQR*^JHt4IW?c`Smhc}!ue2$W&LEp6mB z5vcT(1)anNX~`ft&_F>_fqo8DP~&9=R~w=VV&2k95{lxW?g1zbfd*AU*#I;G?Z^Qx zE5L)`;4}(J0mywpP>d;xD1f_!!V02_LJFYb6;z64DTzXc&$A#|OaZ)_M8uIP%aO^0 z7kuN4h$DwPFEgm#rXrKTy zUqL7vmYP7#QFy=$Dex)?f$r~vb#TNTS+YPEEBk_*FAA!lnibx*h3u&VP45ao)q{cq zRGxsUFe$KWK!Kwm11d`)d|04?E~I5p65?f0;8he+;Dxk=cojuKT#O7PjFf>yK}8B^ z+#cMc7KZky6+|H323Y9Sbui@(yAs27J$16Y`a0OXK83l1g z32p@m&|Qw%O5zF<3gTYUN>U2a@Vv)s3^!lda^R$tSSo4 zstlkGj1a`H4NRbFmdR5|7AdRBV#}%wXdM{Rdb02&pdhAz6l_cmASX6}S3pQAAUV(g zG*$05sf!V!H&A?Gn_t9T7aj3gSqq3KV|~?z}7t;J^Vb zPXYBo6fgpZYU2=4E0D$^AR9cSK!YO;3ZUU+mMjqEEe#r5hLvg1%n8cuyx{T-RAxb1 zAE1#f0L!VcoCy&J*R3eU zk_d7c11>2+4Ic#!UItKM;{l#~g_U8Lg^~iVf=D*FL`B4lh=P!U6bPf{dQd$M8ngfx zdeB^75AN}RbGwwIP?n<*EVqMq1wlIT$_k)b7b&Je9dHIvQ&&fz|N?bfAGo zH5Swg1tGX2KrK8K1vy74&^l8`&cZD4jHI|Dw>M<^&yhz#98|rt7b=PH!j=FSI4Ej? zG>SWxWGM;_gBn4g>RQ~fIt$#}V0J)OjnGF4 zOHoTf2y~PsXtWw+nHVVIAM}%?BFQmm-Y2M+paRft3-DkdNx_b3tTr=)B{Ks*x4=eF^PK@(tZFcU*2!^m z&jW35fUcTqV1loj0xjHCU}e-&w^3B zflhHo%2&+b*#yw8F7(+1&@s*MnFP@0EhcEP=9Xb_{CpNPF#tJz1AJbG6zqJGO-O5i z8$cU8p-a9%i`!Wo|AAIufH$9&fL6|d?q31Vxq~k@W%QOdW2yj&Il}g^f%d7GftIy6 zPK4~}Qcz$~U~&8c+9c)zX8s2;Awz|*y`k_d396e}A*T|tfWis7*$TY>tO04s+BVSs zM9_?g3;4Wn&>C~l@^Ka=R*)cMQ-cy)wi3Gns{*^Hv=Zom4$zIO3hc0T>)=D?85G#T zM?HYH#DI3vD6nTMu|n=$1|1j&!k*HQLxMq@QBl`-Gbpg4YG%y_X$6G_sCI{LN(3Fz z3Od3Kw6By2yy_U5P7sGMf_7qpnzZn3HlP)vu%*$+J8i)AHE7ujKWNDy(q%eK-0t9& z;|h$RL)RcSg93s@i79)HIdcMt%>iC^%Ltm1W(IB0P+$y)+)utd3$(%-e1Jp<_ajDT z&`Euu&1{+web60X8X%);KxTl7MFj>;<_IMgh+!;|;6}E<7EnG>0&iDl1lb5abU}kj z1LRoHou$kXparsKOd+7~04-3@UQ=VvoB-ZV!R*9X135SWs*3}(!3k=O6GI?qGo%7@ zE$A9E1;*?(k)TDY3M|XBK>HEE$3Q_0WdQF*1*rg;3|hnszP=QkVilMm+da9j^RP14 zGuMGnc}F^F2D*A0!FRs1FtJ(cbc{N8E9?f8Oab(P6aRNWOd{MpXdO#REa}@ajg=kQ+;a$ zXnzn$2DCN{K3W9|QXcSLHb!t(0!?*7LkcDImAF9b+87j>kOK@)LPkk<3S6KvAtwu5 z4PqLrz~p%R@ka|turYyyjZuLMG&RY%R*?gAVUYqyof4-4*IK9ljLk~iPW7!}yx_Z> zNK3y8oC@4EitL~(iX7pI800a~EfpM23<~T{3<57e$q{r4CI@IS4io6mI0Z&W@f=6i zGDr48$AjIVwNyF`42nEhgNX?eOk89I6Xtxcle-ZaA78Xb~2-+V4sw_b}L>SwYm_hYAqXHvnD+t40B^LOu5mv|l{NPCi1_j1N zpldG{gZHhzPW^>1-uCj6uV$^L6?{? zfy`wCrvXse05X?dfemCX8_ZnLfpqL3bD2Q#3g5QEj%+S?B`d1}yALGkf_ACYDnX1@ zU{hpPU<2iU1_fBaGcYUy9h&9D*ro`&HnkpfX#;55om+t&vdfWKfr+4ga1LRHdou#G z@fy7I5jlVwAb=%AksT6TAlHDdVdGX{0k2^M%hxwUT5O;e3MfUg!K5l`6j(v2papEO z0_gBI*6g(%prbI@6qsA~b6-*AVyS1W0c|2?uLtcQ0&NXphHVXLV1aMkaeQ5;2)c!q z)saDw4IcTBcm|~@K4wM+1}1LDbLEOGj;4yNj*QUO3Uc8`bfpUFbi*1`j5r%ppjryl zm;xU`1S-|=m=DT?(6$e#1_vLp2Z{lZ+a2Qzl{g(wqBex^n1xiIfirG=q2oEwNH54d zNG(K~X3*R>cvlkv&77bF3~PFDa)XXU16#>Skq5v=FoK$b=NLe%>><0p!J^;>C9!^i zhNR<3uqlu|2;`e`1#AjrqXOxsD1iNQlfjLb$&npYA~L!1f*UrV8bgT-TwXw%rmzMh z=#(b~cq&l9s)i9Xs$C5pJjbP=D$5bSf=Y-2?D{!2IWsUc)KA&1$PQX;%}H6hI!I}X zhSYN;rUGy}0B!JaWK;z0T>zz8Xo2ygUXdN%Hvnyl1Q`v903K%W_8wUKgxEx9PeNb`&3HyVZ#@wLAAE2908M72Y&I7e2 z7#%g;d0_=S$f1yyFwO)6wh@$Qm>d*1Q8luHj0RZ@l5&Jx3C8WnT&TzmI>QZAAYzYw zP+teMTM4u|MuAg-Fu1OrO7pdB}$H~`hs-~z?57Sz`Q z`w<}q?v8=nS(636q8!-*aBT?kIF@{Z)SW`I8nWUG6eJ+5z=+l-B{nue&IT1k;65p6 z1Ed0r0*3;Vz-~}GT#+5rF$AR;@D563_knhYfR6S8?HyBK$yVeAUAd^i6aqRD0n`=( z9b3Qx8c_kANeAlkDDr`>0mxS3Rbb6l?Jr_-Vo>A)ZA}Ahpn#RKjNA$kHK5h# zVCNZt#sU}}^*|?cGb-{yQwf3E2f4-o^&&vlID<0uCHakQ0B1=yJlH0o{NHayKYZ zk(_t9Ky6?yP;7zEkY-fmLoyMRRs})VYJ!HgK{*RDi3W;a5C(@CDCIaYC<-ZXL$*3G zDDr^TZSpXJdh|jdrXxg15b8co*ae=T9drspidoMa5zVob)dsRL0(}1 zt+NH)(Z%S<>88XetthO(13I_@eB&~sBRC$x!-F4~9YF_UePDLH!=Wh14fY)k>&RHPHXPJ`NA$N8IJUchwwe6@|Gs_^f`!n;;yA57YYpfWALJe( z$9AY|1Q-?}STJ3n!~&Z1bmRc_s-Ve8i5s*56yCf}rpcRABQ0_fff=I6(o&u^k-D;LrjW!CX!pAa!tY zM-BzHZ1DBG;DHAXCWh^cArS|<8xq|2WL02utj)=Clm-n8$$@;%pukuLs`DTb0Y2o| zaRppIBxV$NAQd7gt0^#NIkIFaf=*HA26d;nLAPc@!lNcji3fBlfCdxj_*ifO0nRLJ zj-2_R#No&Qu1ysf967TT7{GO$w4x|j2{$Ol!RJeJgN8D}t7{!O!0V_>9529}qa>WG z$O|eP6_^znKy@X^M9^vXpaPOXiAg~?Pl-=KAWKOAR48#eGG;mcXD9?!l?t403IeW$ zN&?b~oC<7?<)8z$1wbPO3}DYFFoD)n=431I<|qm%pwzPhpnS=r05%cQE&!d_BAV^U z2|CV&*+GF>ffHN;@hPx53VDErtw4pD0uwLj3~3?IUUNPTCI-iQ50bWF}t6jWeT$Y~X-`g^~gfXd@#dH~5AI1!izy6oT|9ih_Cda5EM8zygpcRN@7z z5rfpS;AYc*hC(F<1#al+6`(68z}wE17##0ESjqxw-9cEO2!N#oB}T9Y(Aiud^FYz^ zfAXH64Bosq;p6*?duD>q1q8!r>LBc~&y0-K|>m$ae) zB#DGEYXhARk^DGEE*D+rW0))y->fzql1CpgnEL!7F_qrd}N5z3<=P^JKC z)S;zVP@E|+x)y>eCU}Zv1f^IW1*Sp;;T-Tms?gA3P~ZkfAtPwRB(DM|s9ggJTc#4| zg>Afw+@Q(;;z9*(#|B1E&<1BmAvZ-%1zrViH$@&$q6M`aK*=3cA1H7ua`Lc3YCF(& z46Fgm!^@x`h7ydNuDnd(7=RqF0WygjWE3n!1r-Fc6a_(T90fiFaK-@DtqdRmP}YEY z2(&XCRM6C9fmhChQvwq>enIC}Fzf)0D=5HYl|cb~Y#gT}6FBuKq3PyUU01i$g6bV+ux~-CnYb0ip>|xbU!=gk z09MHfI5wQx`VO3PVG3TLDByI2nF3ln4O8;~p$2X+Odq!bI|xFp`(VES#GAWNfqfZN zh=CzVT7lcq*jpMjry-%hzCb~8p(5zW3LeP%)j|b+$GR-gd^jxNLH0=~NWfM%IXI_* zl08U^ASiDLIvQmu@PjHVHc-v!4w`%@E-HjZD=6NQ3c=SuAl3fd3K9x}kZ1rogW0ix z1v(9`z|P&u%>kPBV+I{`Qo{^B^aLE1AjNp0|bbT+_X(V|PJck5o z3WEm36xhM_H^`&V(t;$j6rlYHh`&Hxe-4n_AiV)DL>5wnF+me2jtt-$pAQr!3arrl z37(hZ2REV>SRECLK*9>FpiUa-TA2CuS&ppUyey!(H$70Y=HO)pJD*LF3siZrJFcwH zQs7r$b+q)728}+0&SZ092Q{Tw6?h$4O0pDrAq`hHCtlECHtTi;n3FcxFH+)Oq`%`uyBmh1(fK5>l6mo2eg3JyIf}lQ_AULEHc@+el>T8q)z~kTCAb-}^IDuxB z6a<|rYM{zFYLo;a3P7<5u2MjDD6oS1@)tn89ncYd(7ui!N?!+b)CA}ZQbifF1H8!L2lXfgA*vXHLCq|1lY|A@A#!2>cia?sk;-kjuelW16gZ@vnA#KsYn&2l zlt42{OxYNn5N52M5Jc)=^DnH@lVnGz*d1sqL<20D)ryqXvsLTn05YigYoYLvK^E3tyk8U*b%QeafzQea#g zEUm=qXbKw6XWovSWk4HGp*DW7cf7)&zzVC5n71o&FN5qIMv8nMkUI-qK^e&d?l1<1 zq{2caR_R3w+@JxDq8*DAgcdAN5L&1N^9=(-5~xLr=%sNh@F=h?hZMQ|+>S_Pu>v#J zo*4IK7A6)@5$pgf)xc+wLPt0t7j3bC?|^|!`M}0pAVn%Dd_e7HNBCVeAQ4bUfJF(X zIp8TCm^nICfJ z=d>#@JO0?$)WD#?EDgG97rN{OoIn^s^Jt*q4t{ROI?x3@uAqYyKq(2-@?`?s3u*_0 z&cIDloY6f=0HP9seWU zufqzyUx(Sz2$b}|*AXM`*8yF8SD&TC2GR#wX#$$A0If7pVs&ILQ(_0*tHbOlRjR-a zy;lb^KEV#U1}zIT0s*eV|AQ`7tp^>02fAwq;wjJ)HOO{W28iE4_tt^dH!@~}?#_YO zR}bpivx644u!66RQe;|u!q$f=KwJblcOAT>5mpv~G7G3i z16{em!VSs~2?`uFpqr^Rm^46VEyLP)Aa5$LfDXC?UxLD@#Nrs8#mB|~T5rY(n(2fs zr2;Dig(6rjBxJw=tVDskA&C^yf&!O##F_<)6YwZJq*IUVZIC&TA{ev~px%p@M}d`> zhX-_?iY7BS6hJCKPKN}90;3`)sHMONKB~)+K@l{p1Tr7AqKgGmx-r5JvttHbm$C-5 za29m=BIsDV8pvf;jNZ~pEa0=eRxp7MFJn*yjSVqF*I7V33O?~m5p-`VOO_&d@&G#9 z1WG+DjsaQVv2T!r92vk3P!PrJpupwGm7~A{9;N02`I-@&xEQmPI29Qc!1^EucY))G z#qlk8hKdv1GzE8kA?;!XZbt@pMIHrCT?X*wcZ&Snp!ytiR~s{AXbGergcVpohf{&3 z!}zRNxLLSaSXj8Zxw)A^1UEOB%>tz%vMekNEUes&5QQvEU`f!~hrEtVSqhvAyr5GP zUof~Su}CX&I@USXE3imI){-GBcmq?w?8pdFzzk~nGx9KTgYNnQ4fZi8GAi&Ya&kK| zf(Gv)p{8Hx$n2)X3msvBI$xnkfklB=T8Y*bD*C#iVQuj7&^y%xs`xSPmNo1|C*0%a)M=G)BU$z+uP407^UD z3LK!rxsdY0xvk7Sg>+(aIJrg z#&i_H{g4DFNDl;BCe;Rl4~FD*`~dFnaD!@GZUsS5QUfJFS6&uSh=DL@%m-9hGcqx8 zFmr&CrXVPhvV&QmL<&y0aGeT*phOC)4ip3&83cBLT_6OCa7-6)DR6^N?}Jzay5f-u zY?#nC3npkb5VB+jWdnf&AafYNSrs<%&dA5az{m(He;KnBSsWoJS%QrMRcK0#kRWAr z1zZQ3*8Zq96*c$W#Kol84cimxEgYbeJ&H0?>#p3wX?dQ4wW* zCb3i13J8bkGBAL;;>@74twBvk9#Auk8+7J5v*QA$EP=hCpjKjZtOK<}7#-`~ctH!6 zxIig{O96D*VisuL2Q+XFzDgA2Yp~N<6hy$IzFeT~t|g9)MM_}L+yEWg2A*efWKiT& z;8NswWK`tg;RK~$FjoO$?LLsTyr2{fnob4TCV~hE(5M!u2}GvvK@DgHP&Nfcj4lHM zsHdpNufV0q2P$H@6j-uAfx)040``#-Xg4@$GE@X~-7Ux;0w|sUYXp0O1JvpR;((CS8TGT>I= z0^d^)O6rh?6F(?2`5{RM+$0Bu8Xq_g_&|jkAE?;@It(Ath6L3m(2}Y~5p?h#s96Et zRskAiS7Zbix1f7mc-TR0enmcRP{IP$-i+WmeXy@U18()80WVhY6cVEXALPbL1%3z( zQeF?*3&HHT0k$bgfffI@qzJ^(_8%DFT?0^Mf!J%r44O@K0gdc~4#Z}5oCMi&Bmqf*MofQq6oSbof%}J0%(s_mJ;*^FC|t5=4=HP1y*S# z&?Y1n1tw2vB_`O$A<$$O3wYy?3uy4lj0tpY53>RjXeo^X6ZZsmMo!qK643GHumiMN zofyrTLD?I0CkCib#{k-0WX2=_p+rCzMrDKhSOVa~vN;r(6gd@`KxL2u2WV-0mI9{| zSC$edXu604GBv|DAK+GCRREpa%j+obt;8d( zz~LC5rNFDeBdx?y;>e)D31V?NDkyMd!*wfgfOLZ{R90XGH5rOP>x94|ovp~Fzy?|z zrpO6$bQWl~5mNEM+=#^sD1pn#h1Y34}q4AT#}->DCO; zR5@r!IztK4FLzYPQse<&l?fUp1Vr;{z^TAcRs>4@911)N99fDSplX91bksar zK!X-!fX<45?H1%-$;`+B%aI?Lvz6GO`y1Ing$HPSg2j;$a(^=;CCHt}=ALP`mA10oaBZCId&H>kVL1zIYOEMD&g8k`2Xo=bs8 z0gJQ}ue1`VKv#g~ZgBa_sQ~KtgT`V({ZY^fP~4!kc}$?j5*sK3mSib`=BGb^R6?s8vx)3xZp#WOiqQC~4bLIeTO#t2Z*8nQgxL`#Zn<9$>FK8kdoZ~^= zUhu9;B_;)^5(O^shFZ`)R4k4hS>Ta1B@Q%M9#FvWK+Xc<1XV zD1wx@G?*B&l|Zd@W(AZ;0_~Lt-4u}xS|AGA0s^{#6f~mFbl4QA0S^f!&<)_+kZ=Mm+CT~7deA&CNFy^Sr?O-#;8wxJt-z_k2Og0G zMXLg@V|`WzsLcT>48hYtETGWghJ*sQ0-GY20xx(LmIWlFpa|-mD1i3XuqeW1LA44u zsBmF{g%(ShBCi5JXh{>l0w<^r4rX#t05=I4K(ptLETEK)subi~mTVgSJdVYJ6^xm*AOG z3{S`D5Hw2+n$TfVWCi6mCQuuk6|5I@dnf4TduGrI z0|i#l6f3B=3(@Ar3%YK#E(CUhu*v@TFUhjZG~aIiMv+jtxyM9N+>{fuUH5DO-W5$g!cZ zsimS2LV;FDfeL6v&{0re+rVd0a)W&U8t?qiSP0q639$}*qc#g@d>@pBK$<`soIq*E zk%8M2bU8YBzC{5N%AiCH>a;`FS1YlC)>Aw%>+FdiUqXd8hn@0J9b8v zdQh~1&QEYufNa5rL<4k}FlgW!G&TS-037{p%N2hRv*+=29;XO;LFKDb5V{3SxQWf0-z1tEDEfeObq5s z44|f%CKHD_6Ndt5zacof1V9Bp6KD$}6KIDug90-srXVWO^?=L~FlQ2g$V!+qNr0vr zK#pbwm8z@?OrR@em>fY@V}U2>m>fa(KR}d&4Ffgg6hUntjx0qMP^+8?dZQ@|s67Wd z1VaII3_Dl}C^R5Sm_Yl4L8j<4FjzBystqQHrJ!BWpmB5X;jSPBx(uLRDJZ-k@eU#t zm>m^B%^ZjoO3YRa;N`jCRKv&2%)rRZ4en}llz}1`lp5KxG#MGpnb<%kYA~@l3Y37t z7t}rljqVF&DKaUrItpbeGCJ~sxE!^OOt`YoQV}?gapV4 z4v-O`p?N`w5rQBic)>>SW@#{hjNk`v8HGAq02HMxAlo3Tham?8fD$aoFAR)k44{kB zSv470%^AQp=`-+JGw_1!)MeneVgU8v1t3-lfVXWjgKky^FMt3QngV5@bP8f2yv`1B zH#^7-kk>gt?v?<#n^}RyQ5a&FFv#8fV0ZIF-OUS1K`aVvSqiM+u>>XsMo<7SfHEfs zNEhft8ORN+%+M$Y-MGiVUpcW?+)FYrM2X&*M zS(saafqOqEa(-6?1s(%d0Ov1IxyY!%Pz>5Z z18#7E`@o>PGeOx5)C7f;nxNPPNjWluvK35>i5pZ}kZULt((6S&%(a#J~4k@xg z9Tis4#3)*k0=jmR0aWKw5Vdun zdq9;y2bwSwR9j1e+L|mSCh(m`x2(b)Y@IoskD)Qk*fMzZgK=}q*D1s6o`07a*AG|UKRGKh@j+kcV1&s-SM&O`f%?c7_frd4E zA?Si$@K}>0Q%SZWD4fA}WP;0VNX`X^iXx~!tIq;eOyDiopkrCVYup*(LB*)S!~&Yd z2J7blx7W0JFf^5zGQ-H86|Cih%{>N?it4D+X2wi_MCG4Z>o#VqjMQB_+^^ zp(6)qVFU~4m_ZhBqGaIiU}gfZD0NU^a#RE*P)G}a8{7Z@rG8LqhulL68BhYH6393> zlOytU9Z=H)6!S0xIKehLGAJ-)JA#rbXwNxP zLr@8{6a$no6j-tyZ3>kbL5Zy<3%o)@fzc7Hn-#0xHeqSOR4+I!c19 z0V|YH08=6m3N(Pp3`zn_-~}m=yp#jg#^jg*XQe<{pwS?fLPv=rC8lg8Mo1mcyw<6) zp`k&b4pcdT4ozVKEo)L>GiR1iU;DKztIHJ}zP=!7)}1(=oKMS-B!Ev$rRhOCBX2I&SZUIE>B2AYj`1Fby* zZ3uwZ1%y;0Y7IOp6~Gk-WH=bo`UiIqnX?s`QJemt87Brvy}$(RFtC6|x*(dE62>sx)`*T27G`jq@DnkO#h)>HBhz(X#-_@&>e@M1vN}?wT$4J8?+M%qz-&9C?v2! z7xY1m$>wfnW&~Xz42f$<^8u7WAvS|ouYe|tptV1A1tPfMQ39PH1GHwjw2%8aVuuY0{fW-bdnd712hgn z;|5F^eLhgcGlQF@p#B+X`3vYmU$6n7?zJMQz6IUH2d)pmams`>P8q<*X@LR*6vEH| z0fhs&y93F-;1FN{7rdbO07U>JDAzK8%S|S3en_Ug1j>}4OsWTt7g%Njom9#QotOmm zC_z^)D=_9~c$XlS219T5E12iRqLK0N|)q@iVsGdJ7zzkaL?G9NmrT{9Ym|%q&18A+IKndInAO;i2;R?(}pu4p-7#Nfo z93@IXyS@K07lLIN968D$A;#b+QC3u>1m2_wF%s0Qh2%&kP;@bXhMHMGOT!sK19+g@ z4oegmz$QamMUJ&uprDrKe#Xuy2%E-SzyZ&43QUeOIN*6{0-OoTOdZhN)WG3b59-T8 zvL_^j7(m@qP$2*wL;*R8&5;4LgdKdA9)ki0s1pwwT>uT8ffkX2wv=*!N@vhO5oo~# zM;2&+0i3IpI3Z^*Fe

awZ#Sik3xzRgnWcatyKy)I((g9kK#C0Lrl*e8K~0Z7#@Z z;GJ}!-D-^Bty18YD9D+h&NU0jAxd1J6{27kXu~UL97KT)GDvmu5ma4LeX_V|_8GDCJXN@s5|O@MbFtfX4k9LED)b75G6H z7l97w1Yg~5Uj#m;hD(6~G(iO}j@YslSU~~B06M+LkwJkQT2Fw+nYgn+t9}_k%@NQ5 zHb|)_FK7}GR31AvaDX=A^MGTN#Sv1zgUV(WP}vOb`GYR90Y!xZC;>8+fJStbSU{~; zR?zlb76mQ^76mSEX>dkW-~;7d1x5va1uhWwmR5q4ARHiH3o0;!7V?9JY7|)%gg`vd z&`)ey6zp*Js!;{>P(6WkndUkB7MVg|KPm>e(kf%Smq z10ba{DBXaDDOkY+lWd@sVW8B*0_sD8(iNzH1qD5*Hc|qKa)6IhsLxVlQvh+LTZ=Ij7*@d#Tcz4(4sR5$A$)uEXNO^gDnIe zf#Mg`AlG0LaO^`DXHj6#Wa0n~IBGJ1X8u8KCXf*#j&JxtGoK2erjr7jlR~FCGiXE| zJT}J!8p#3iSi$0;1!s(oQjTjur++Ij2`mTM=qTmE%K$ph+!5ZwVT2^RIpAdX9HfZb z3DlK>^t<3o2|-Z^S}zBhDgc$i;81|eg4!Mmtd5UCQ4UhU{fU{Gv7Wh(qaJp`wbTF3 zuKtD%>)Y#VAj}8%`szUUPBJ((9PQgxQ=`P7z~I!dn6+LBOx4vYF+16}D=t;7)n++v<@S^YFMm>CcYMN-ljR7i9!{4)6~1Kx zDLhk><@gq~ZiX{!O^qU}qr4)Q0)rECjT3t#_%xWw5OcY~%OXKr0=XUKJwPo%MK%R) z@ah^i#}}Zm$x`G69k>We(L4%V*-AVLyr32zmmfHlftGP`dMk0Qtx;lideYF)P*DTk z=~e&=Cq@Ns1x{B5c302>I`^W&EJy1s1#ZW4wIFg6lZUh!lMJZ0wp@wVksY)GjsX-B zpdnaB1s?EW#h^NhdASmgW5Z(BECn9Ws^?&7B_78KGI^j8T}B1g<&IB4C$x(wfV9}; zDe*em6o7^WK}TPdfJ$vHX-Cj%M*)xm1zty+oNUm^N(`X>4ik44BV!$?5CN@2XHa5- zL^GBcX99IA92K$@7#&qWEgVKijVytupp*w%uxP@hQlr2q@C?KU-4xHr4O-vr$N)bm zo?C&DyOfc!4zvVQfw2y>V6Co3f!Rr+Ly1X&5k#?o`JmH-_?wlO6`;!snw1#qlvte< zIza2w>S~lgIzaj$>OfZ4)hL1V*O)Vd7Irc^DYPlDLY5>nx0o|CaC0|wF)=YXHgIr% zZe#j?<3B@@h4F?hpB|sO&&hc0(F6Nw3=IsWRl22B48>Ipsd>72RSbzmx+!3GQWZmD z6+>#VZfPY*u(*;TJtx1oII*ab!6h@fBr`t`#7r&LEvRHj%1p}1%ug>$EXb&2NULN> zE-flb%}cIiaE398D?mo&Rxo7drKDCcxTK~fmgbcB@&m{yfC6eJdvKv+eo#rdU0$*B;YZ+=pyLRo52ab|v=m4a$j zDML{yLt2q;PANl5Du~P|Wk@e&NG%1~n+P$-00i_hN^*0QRSgUcN*Po^L~edkW( zc4~=2a#3nxNq&)nYN;L=F(Anmr6#7NqDiHv<{{Lo7RN&zs8>=^!cdZ0QNoaxS&^Ee zo0C|XUs}T82I43{IjMQNB_#~GiFui6sl_D>1tq!#B@8+FB@8JgNmeEKC5br!iRr1% z`K5U!44JtFMVWae44zOrFR?5jA0&`kmYP?>ker`a0-|$E7!p%Tb4nN-!K4BN=w?7@ z1%={_{BnhojLc$%(&EJQRE6Tw+}y;XN`=I{6ou4^%n}BuLftYb1EK>O#t3BrrAaxN z#TltZ3OSj%nI#O)Ihh3onR)3@ZgD|QW(h-PiEd^IDBYx&FnC)iB;}XprGPBUPfIIK zEnx^QNh~T+fO4Gk%TkMAoREyt+@!q3%p90NkZZ6rjGdWRmY9>7qL7nWl3J9Qqo0$S zmtK-ltN=0+CYPL_lB$3#QJR;XmtUTzkO7Inw4B6rR2?aq#U+V($*B<0;?kt7)Z`L| zU??4$S6o_9kY7}inxc@BpIn-onpdKbmS2>cSi%6aGbytKYNbL^YC&pZ2`CLFmN104 zMwBpwB<2>R7AX`I<>#j7e_3h~NK^qLssIs9Oa}QnCp9HK735;L zb>*2Q8Tq9p3W-JOV6PM_fD>0S!f&~$C5b7CC5iADFJ>spOwTAOW(a~%!KKN`sl~*UNJ*%F+)jyzCvzdUL`D0@{1H;fviwmnVXcKQ_PTA3=h8I zlKi676osUm{N!w?mSTpy{E}3-t96TEfs|63TcA*s3eKsiDGHDr2M(=bP(n)vI8h%ZV_&M!(qSW|>*O=3C7DzJ)Vh&Oc; ziy54ur3A>^3W>!GhztP}3CS$UNd-F!B(GWwf(#}3$+}>MYO!jvYB7Uqv6X5ugTJd& zK(Ic%ywigVfubB-)PaORT3|kc3qrJF2!rgQIv zwG>(=7Bg5Ws1_^O+9{|OGvt?pH~87gX0V&1_?igpwzsQ#2kgpyp+sjP_fJ4RGOBSTBML#RFq%D z5DLw<5T0jVW=UpZPG(gisQQ8`@lDOm2NhsBIr+)R;_j(=sYRK|P*oAWK2TO}5kp21 zsFFx4g6FzbRCnv#;50xqW*s#1&cb<;~rN>Ym$qEd_U z6`*YA{L-8hg}nR{g|y5(kV{h)sxk`{%8Ni{6+?JYeqOplT4^4*`UU0Z#N1Sn5v6&V zg{7&wnJKAxC7EfNsYMJ0u<{j=uowz*5-a_SQc@A_&R0mu1gF;G#IjU{{L+$w(h`Ld zh-g}V4oGPjq;^!uE6q(xErKW8q|!`~Lm`5o>Lxd_0#w=fK}1rEb(4!g6;cv7J`;-= ziVGRya}$fQOA8o^iwYPL3kq^T5tf;sr=MC-nxtKoS-_B&Smv8pz)+OWkeAPpoe!$r zv+^0z@4MU8PAMps8T_GQ;LHpagGQHb zfI@Ltp$550D3ikY5P*s$b%aB=;n#)j}!%&dJke8#Im&4%e z8sezy>F1^oYFs2{=A{QEGAtteKIVk(vxL z9VQHEktm=GgDYB?Af#~vuPH&bXj)>CLQ-OKHbYq^Lr#7sDA@8cL9L6NOooh1hT<~a zv`la-l>t(f#j9qXapv|G=qGXVt za}!IFGeE7jF^|9oS#-wo>-KsP+S6vZcuB&Dkm{79pr}8 zbcUpKh9Yp5(#=gwXUHfiDX`MlFE20G%SlsEGaEYWl+d3QbEN~*$QA5ytN8Su@E88JW#a( zE%3mKLMjVVL8+`Dm7%yGGcT3FC$YFhp|k+xZUs>F&rqD4k(!&z;0w(tpf(RE){(lF zppHXPi2|BvSZYyaa7KPniCA9oL^80 zZuIIFB&Me_fE@{8dRr*uCKi`~a*sZ^c>rlwG87~xXM>amr6#6;x(5nwMX9L_1x1;l zK9(-16_A;iuA7^mlFASO5d=34Kwbk2Lc1FZpmGSF2vPevsB-XP0<6QyG1$}D8Dx5T zX=X|)DEFqMGC(_|48h=zGec2oS}Le>4|YN_$aSe{iOH#;44;$=D*2PZX+1HOAuYcs zwLHHl1>Q^oSDc{A6Vm<$748b4E-tiv46D=?lJj#5VD(~dYDq?Z3WH0KFR0rCF4ogP z{XhnALkfkT2kT|#Kkg^8U)&d&{YQ>ahrZ9Ly`-dPa3o=tMODt$v z1TJV95;Id6T#9l*%?3~h6v}f2<*B5^;#36?Ljfw9oS&PUT9lj$<|EZr@OldD&D4s5 z%%ap32A9%YaE}<&h6gnzGjmc?7%*F_X^CKoa8MIb0m=b)E4xxyhiyAvKvHC7B^4$0eDeJc&UM)Cy!M zPGTrZ0u_}xNes!Ay6H)v+zKJ95*doh6B$4qOL&6H1tlgB26sQ9$*5QXqy|(c!qsJh z)POKVT}o;RIM5IZo%4%|N(;cf^Td)wkOPXrWMLx6r3GMiZX!c=B12XpLwX`ZS|USA zA}9~$l_&(If}66S43L}%a&K}XLwr0#po?>uYk+U4nYn3Ds8ethLx`h$1cQ&KdkBNG zuWJZ{e~?QEq~pfm80_iC;2G@X$KdDa$Kd4e@6F&C?Cj~u;Op16h;sI|`9&oe3T25orKz?`s>Mons>L??ASEDiI|vh^n!(1tA~y%tO0-on z)H6_0NX<*mPsz+nw^a%aanrR>vbW>10abF~_8OX6aM#>cskA81DnGF}v)Bq$I2T)$ zBwOVdq~^iKHLSqOtl)+y*>Nc-*c9dGmw-}ZF^Gr6S4b<($s<~;NVe!G}J*U z-&UzIwOEOW&}FbmRLD%RRRRwLD%siSC&DZOjqRuwBSniovJ9$tQED=HRMeJ1wb&Ld zk{FaA12R^i&b^hYfk{=VJ*eWgWw2pT1645A3~Gg?`6bp2YPp#yDPTr&Y95H610vEv zL~&{|h)OKTFSce-OG!*mPc5=$P;-GX@{)=RtQpi2b3tTAYEDijh>=rVSekFmpjMOu zp>v>g5|l1Zf`}I-Lg*YQomyH1(pHdDTAZ6_&7hW4nv-MApq7`CSeyZJCX_BpO$Rv! zOoD2-RBHw`P^AW*VhQ`(mYH3A@$%aN?u7NcJa^Ns@2f&p9vY8uScg8X8uw9FJM7(W%%g|}ibFf=kY zF*P%{uw(#d8HVJP)QrsBe5(Sh0IQ zB*?t+aDjZ9S6ot5nha_z!^XQ%)xdQk#;d@3 z!%~Yf(<(ugNr0z|f-1y7B*nQoU}eFeaYwM}NMny+nE=qZGe|$AbAc$H!LsnG3REG1 zL?DrXJSeW9k&~HMTA|6HpaC@-H2w%Hn?S?%nhel3uYv}6$X!phR1;qKSAYtB5KgTq zDN0N(0d+ZHEd^+!6*PJcYBXqMrYV409;taHn$TEBbqJ(EU#!WXkyo0NgRmnNWIhOk zho@2%K%RjN-D!Z`s#~m3o|%)Q0B-nzB_TE=OfU!O2H}FlqT*BqZ#Q$$_zq}z8`|Z8 z8kbb5kOG-JQSf%NfT+nV2GPZ-DcBvIo0tp=yV8<03r*O7iGqfSfw?BQ=26fvH84Sz zFf~Tz8KCe?jX*{v7Z@6WSg_$W4HHvCWId(^n&AFqNq&Bg0(iW^O2Ml%Pr=Yk!N|bK zOu@+5%EZFT$XG!m8Pu>=a0ZixmU@PIrn=>c#hJRrDcK4dp#E90mA-y@W=TeAl3sFt zu6|BV8HCU+D9Q&7u`47dnIxGe8l@zeS{PZHS|p|!rluMjSR|TT8YHKsB$*f`r5Kr* z8yRRKB@%FV%~lCAfuqEr1S(u%Bce*6mW!snm zRI!x;M*q!9fq@H=8zF-jkPNB75Rh1sp#ZA>6`-xtMCgc8eo-YC1E>QEp5NkPNGyR2 zrKT2JDX3;-l%k82axp+N2S~n@3yUjYc@37;xERthi;7DiO?hxlW~HE7%Egca>hyuz z_eg?y`FR)$(~1()LGufsQQXuDh-T0n2QnYr)Ib&}&Q8rqEy>SA76aAk$b3)}2$>IY zCwPzvSs2{gK^AcH@eD@cJEQW0gPc+1T^vIKkkx}r8dD4r6ATe!3=ty?5km|S17wk+ z)Z}>ZgastrGD_3Zauf4l)t~~B6xfxZgjSSNj4Yl~l#9#-#~4Hzvap*=a0m(?6h=s< zyMe+8i4P7VBz|#zQAuWAT7Eoa!VcovM9`!kni$AA$Z9|hL~u@nPT)awqWTj>3dx@+ z;(pE%D15MwkZl6l44&D8SOJbjXh13;iG!ONNPOs6G(=NwW?p7)BD|Fi5d<}SVf7V6 zBsV`LKCd(v!U2akWNZ&202&woO^t$QCLuzIP(W4))(LCELllBM0nP8FT;S<7m=_SD z&<2nCj88*NJ;X+4WARMGQD~JHNWsqM4 z;W(C-WWd;nSsREPtk(@yiZp8gk0S~P~n4tbDgazufLRg3>FXmzZuMGf+D@5x;TE~!f zajZhLE_ikc!~jpFfEch@m{@QV2UO5=F{tVp7b}1WRpS%|RXw8=D>$K`n!?3kZ^y;p z52;mkRgkXMpAca`F>F!xNx>9C)b#R0$$| zgN7c!2?rd@&@obI=ph+alnIXdl6+sN0lUq>vC(p<1EN1@A*Z6(s1YCaZHXFfp@(Zn=SD&@ct4I6)q^ z0S)qjr+W1n7!Ex6@Z%2y14Fkc1H(2U28KsXYZw?99yQE5Hi_X;!@Nfg%N{i>c+{}) zbQ{B?h7Cs-Fg$A5d2|xU_@jG4Bv|o`M-4L{HOzU`F!xczqDKvrA2m!lJ%`~@%c7$T z86Gw4IyxDo^5{N>qdOQF85kHqO?Q;J=L(PrX#5DI4uY8&7#KhcQowa5cxehm9Gzrl zU|=XNOJ`sJwEUKzU?@RX zR{>r>q+3!{3Ykk{U|`^3U|`5CFlJy#EKSMG*U!b}UtX}fbOwg9%#>6->i9tZO+j;C z0Z0JkDg4OJbqa75UOU=>4| zuY?#FN}%kEYzz#QQ1(7H28LQFTb+}Ep&82l!^XgH63V{E#=vk2%6`qpz;GJM&gW)e zI0I#W6l7pH3uV9JWnef5WnbZCU^owDyYetFOavu(1_p+?Yzz#OpzK~Y28Jn6wv-qH z!&E4HwJ-xXe}K4Aq6`e6JOEp zU`T_q+1MBuKq(!hw~?2DAp(T7_y=4hb#;XIZ*a4E(V5N zD7&45fgumdek{zukPl^N3o$ShK-mr=3=D-(_AGG*h9W52jE8}t6w20PV_+zQvI9jJ z7|NmS5*7xADk%FXD+5C{lx-u#z)%BaPvmD{sDrY<^Dr>fL)kO985kO%Y<)fkhDIp6 zTbO~N1$H~CJ17&9jGcfQ%+2@2A82F*=US0+U0VrFRgMmR1 z%1-5FU=W6~b%YrhM4)UzVFm^qXPjzZb;a?k{i zg}NaL+V2LDP>^C^P=hcT-b*qt*g)A|BpDd&plk*y1_pH~TT+UF;m`sI=b|J7!=aTB zb{|N59fbV?B)$m3-UJd~3}OESi7$t+<3Zx9A?$DvdpCqV1;pL}VdsI^8zJobAidim z?4uxYXiZlq1*#drl^H`Dm^}roNFU6e0cQJy*|WfGdoX(rm~9Sb&jqvH!R&cpHanON z@uUEly$~#34rW6JUEfBp7jEqc-Oiaum z%*4#h0;54}W)>D!bUsWRB*((a%0@^YT|G=6NG~fJ8#|@?37L;>AIx5m-E8da95+D~ z7dV8dM^y7LFldW2Fo5WP0uWk_g@M6VoPpsk4+BF89|J?ZAOnLn3j@O@9tMV0Vhjvd zSQr?xMHm>W1Q-|$#WCH&B8VwQsYoUkdnh&2RDgluGz$ZR3m*eRC_e*3g8-!_GB7lQ z8cCEJgJOa|E&MLRz+fc8z)&Kfx(uQ zfgw#Cbd(+g1BWmJ!yYjPhA2J;29O#Z76yh(tPBiCSr{1n2>2tElYzm9lYyaug@FOY z-oeJeki)~kU@p$Uu$za0;iw=3!$BSfh5{i5h6)}AhF&oShRb{m45lFUEDQ|Cc^DX8 zurM%K^D!`R2{16M;9_8qAz&v;gc8XK;AUX(6JTJ_U}a!v7bDUD zEXw$Vu?SKqWCCgcQ)mXd_A8)H3A!MK{H<&Z44c>(7&53BS8g=Oo9jUx9t!=6u04;B zfgziZfgx1{U50%A8XCAWg9c^D6IKR>A|3{Yhg3|bfi!UEN*aWxDi!?G&T12aKmbyRX5 z+!#w5q@@fhmYXn#rqZAc$pj7h!7QK>{SGt`MkTXg#u$PIF=3oRO#9HFerKjZeov)A z92wETOe-4HM@uMZ593OD{xm2#E~iu>JC{NF7ikdhl(+|%UMUs^ z1`rmfqI<8>pse$vL7Uc!2KmUG27Y$|O=#naKr+QOXyEs=G^mdhXb|s5Xkg}U8jR1o z(;(jUXb|sYCPBJut72hb*g)kr{c%19h9DZmJ>3ImkXYzBMC$iJ5?rIs7!3ieAy6rV zRhS~d3@Ww};SSMeV9?NJUi8M3=?!17SI&Ue zo`Jfb3JeSkpsp>52CdNoFLnbha${y-xC3ijGBSadbg;6qv9YnUv$JzR0Vfo2p#g3* zz(WA=5&(P@0)7gCzyJfm0R{{VLc$^2!H6G9GExSm7%79&jFdqcMoOS8qky0g0|z@N8y71#3lB3d z6CWdHqYYG^f!5=Krj0okYHOy8=09N*>8&@BfljV7fH<<>IL+ z^Nc!f^DWtNr&8|a)dw9nFHP6>*~YoIW@8<@?vCdZW%o}2wT(V0Y{>E`-1+&Q3(()QwNP@Bw(;a*@v;Pn$?i5K>7{jx<-`N-z5nNxS2=U=*a$Gja(8XO(0 z@tbb)98-D8y|KL}UtiECBVx5|;z3*8v~8gF99!XS#ytv`W@rgqec#!-u~2^NHnyct z_RlxIvg5^~lk62HKNeh_#&8_(goLACz&VQ14j_>Ea zxEUvJYAVgRuwl!J>&L}yH%B(|Zqc)j*}Hvh&aMNX_UpFI`)Bby+QvNV(#8@?_p7hg zmtUGIs&<>DS?o@+5O?z97VDHLc3HW+E26ThxX<%Fnfsq}vidp(u8s59Ye8+_ON%+$ zGd?lO{X4{#85^GT{d9V2L!nuY;ZhHRxoj-rR-`D57 zZ@c)_z6}YWc5~h2iwln&x?vIY>AwHR^xYTJ!}lz^%eK|t+ia7^Ep6T#KGIz4zj-m6 zB~-CE9)6#2KlFb3iuZkahL!s=-9T+_sphmj3ohlWnmx)0np)0thS{Ba_f9b;C4Dv4 z(0$gsj%sl4-83m`i#AKv=9uOGuOBize_?C)yqh|*>+VH^+UshclHbf(oK?y-IhScA z8|NH*GrrfY>FhDukNU*7KdVYfguykd5d(Q8|?%WK&Jx21dkkW?&~ zU!%JE*n{K=3tLy-<Zu5VW}x^Pf7bZgLV!4Q##GQ)dk@6Vg@ZO8AO zZR+j+_c}Z>{qWMa_;jDfgWOXmmxZlelOxT-tfi2gruWN!IO+t&^Uk`!M~MSR0c-wEo(#1dkI(kMU?W|IPOC+;HeIfA`Whu?0U& z17^<;n03wU|DCsiv;4h9t2qmbV+$1Kd|UWpHB9g*mmma^}TBwT%=znGAZ=2 zoXAyQ-52I?ZoS(5O)q74TvrYdtVqo+ll^wq=+B04p);#?|1q;^m>p~pedv5$!qQb+ zba_}miDf4wZqRR3@Ai1|_Si%3)qmUcx_Tvp&TOkQXZwA9hQomke=nzfk(nAhxiVhB z>YAi>>}DN@kJ(w()A$yc*)M#?8*!v`wT!CqgldPMcQ3u)|7>g5ylGnBZmjj4EcD=s zO~~!$$m6xgcQm>!xa-Z$S;T9QC(ilWyxadmz`NGDKOGM*o2L@MaOf9vxpb5t3SF+Pnf18?|pt>WWkEtlWiGGuCk>Gx-C%p zz%bi&>ZxmQta{#d$FH3$qWpSUv76%STQAcu?Ctqd_A_^r?>vqQ2J_{1)&YkMH+*#| z@1CT%_n39x@4qpxGomH9^b+dxpXgpYut;p<(&jY1n@3|k_wWlm5cbq=FT2%yc>0`e zOFo7D=8Y9NkYynvZM-B%A>`nU+`oDE!e(*%ez^CF`}EHKgKYu|?R(2zmz{lK`QTfB zjMi?o&p8c_)BdZmmhY5J5-JWjz1K8*%?(igk7#&w{Uh6!l9g>?iy!f3yxi5>Whcyi zXRdd*omZ>uLe9H$o$r-Mi`MGQ{=O<*;N%1Q3EJk<#A>IUn>OE>%i2jeX!n96ziq#z zFWxJ%;f0yjuMOKy=t>&Q>vP;t6WOo!SnB#R#!Co7&JO1ykoQc`0`X^r>|B;Y8G1}s7 zaZhoY?=kIX>jj$TpPn%7kHfk=3S9>fQv*O;J zdYG_eQesoF_46wilGDxD*M3~-^0m-=a?E#G1D5jt&;9=#Tq|CqT($34>CIO`x0JTeh&qs9cxT$-%$O39<)>bU|M%i-2s;z6%;&TBi|g^` zeX{O}nOhE;pL*kXRn}%!Pj-q_-k!5_Eaa!k+&Xb@`je(MakfzXi2>ir1ve?~Y}ZYC z$bNpSN8?N}0mkZs(Os_H%v{T3R`q=R|A|Lf!))QXiabS~^~aZ2@yu7Bar?@eWfOaJ zT-;Pw2|caV`e3wqPk!NRo8DzkyKb{eSy^5R+{iwI)9|VPg6*5%{4fu+4!9vWizDK* z@4|aa-~Ehpx7>8KviMc#>?O{Z&$3Gg>tDEfbi?Fc*B}>_!z|BhoSzw(pSV$#?_ss} z*ts0Od47F2qaFu$G9_<}TmAI;-_NP6T07oZCp^fzx!v8s0mQCiEQfSq8=u#4&0;^`LoPQzfpBXorS6MeO zd%USIk-V<3K^x&ORiu1NbZBvT)qmO9y?-Xw4e81s#CvW-$CS%@tt4r`H7@jz@C{$+H;)del$5$uQu03v-Rka(?Nay zUnQ=c7e8O`>6oK_a`En$@isp;-oK|W5!un>a5F2KJ19gj_|mpxzd|0QF1o_BDXsGU zBfForrqk=Qr=9=b>DW@To%_z0&^x6?%=NmT9^qPyF?ybx#dn3YXqPo^^rZZzY(2 z^dD^%$}7J9m#gxp%3KX(f0N@gsn|0WT$Snubnj|XR)mupuwsveQ+=2rc08+mH( zgZm0KVZG-?K7F$M>ayV4^qFclW%?zTg;b-AK2PSjJJGMtyx_;38wNYvVlVQEY}$Nz zQbbVdf$e7b@4~L%+_Q5li&b#Qri?u{V&YzR7q~9nUwha;?)1b3RtNVx-Y$Q;Zs)3O zmk1fl)f!Kp7M~2-K4*2mVVRd@@=QHr--`3C^3&Hw%&hf!cY2bF*Oru{f1Y(OS4>EB zn{L#nG*>47u(n^r!fz+C92{n~CKUAUYCLv7^s#j0ex|kD0cp!sH?|9w$2~psaSKb; z;^>@vch>f1^f|rX%CUlvIm$hYvt(KKel^dRNedQpT>0cvp`$lt=B%3P-|oLAN_|{W zSNFSZ{(Rpn1%D?5&5}`LC@pEKZ=PzRoAdqU>Nc_XpP5CW*E=RZZcYDa$J{H>5ttNk z;`H;4bu&3GFP48~BCZGIf`$|LRt0miCnjCt{7LzvX!`=%g$fiLhKHA? zwNLb7i4tG%^o^^3uZPvnoPQZ%e9G_kyq~%!xO@JjO<9@;VmZFJZGY(`5;1eviG~WE zS@}{IWmZImLzwx#dyhG&UWMP^PfS#-KWtloFh_mlFqlMfrtDJo4a z7Fh9g=0~~hWgFvkKL@<1moYN^`R#J^YRT=Ltv|x-uZx>J3jBLDgjs0shngobZhG8y zvsXO4ultK{xB8X$Q4`x3EPNPV-TW2Ax{|5yuE&-;Mp~IsH%{N@FkgRF?V4Y5iKWiI zPnXYfEU;O+=Kd)csa{pJ9t}Z|5bXHYQL16KbgUdc@Kb-bVgh64;@1(y* zg3aCu|DHSg$+LZz`H-SDOR9CwiLY-hwlnkeJ$;iGoXpn$)bQo&_wpQEk-pC}T2AwJ z8qIw4^OUQVM2+~>s)ZBnXNw=c@L%?=q1@{I_iD;4P39iRzWp^tL|5dJ+o3Z40~*tJ zPCEX1^By%J)^{fhZe%D=%(FUkQE!2#!HiGKf?P{{Hh)%IeElbflbL_i+K@?i+_$Rq zt+?CpG0w(p@y58oYG($D+Xa1}u!}SI@Xtf1T{i8DO!-*)|8c2a>ISo?hs_^fbNskK z_Ia6#Tdit(@9jl8A3dA$t=_Y~PAm;uvFh^0Uq*}dcK&2tX}f6tuewajT2s;0v1Rvo zZ+&W=-nr4wkT0cn^9l8BqW+8D_RBm_)119JYWMCJ6J>33PPOOjGb+AlU;WAQNJ7Xy z2kUchnLlJ?dG!49;&zWY+b?r$-kIwOl9Epz-H+0DiMUsCk9+R^ik@qSU#*$S;iD}W ze61pAM#29tscx~`*FCsp{I#mH!0ry8wUeJ-Mdyo^e=ZgM+An#fHcKmPx8}nSHfwif z<-aRD^I|D)+=*w$e)uQNO_EUzJ2JcTkGR(<^NnZyaU@r^UW=oWGnresg&j zPrbsyg0~D!yS>}l9$dWQs$CvDLE`Jw%a?Y49(xkvoJlGKFi%7()ho77z1HZEye=f%XTB{(B2^OoI3 zrDbbACgyULJvE!4y6msnq8F!ocCBX6vel2?ke4$-?4|mfmXj&!N`4P&cE~Q?E;p;J zWloH#zt!!HA`3b`-Dl(9xp<2HuMDFVb;c`x+y3CInHqF=?X{WJT0w^%Rtj>u|BEWU zdQWm+apc^mFS+jN`S)_mp7r*)mVM?-@5lN5Zs8I~td3f=e@x!byz1v0hs5}7p`ZFw z0*yL_uVxB6Ok1?|_}zQz&*zCYCP?{78%MV8-O{tozUX}I%&*>R%*#05E>(1%XwJwG zHLc{%bka&OmIpO z7Lokt5Pm7*c+p(~iws`{4J>ip!Py))Mzu?00tk z{iow`&Gs*aF<dntwK{#l0Kn=0(O#W#N*KThtq(WUyBJZM`f*4VfI&@GWSje?u9Pvt6jcP?u?!~0iezMt7H31$Ws237_(26hGx22KVp z25tsk27U%X24Mzq25AO)24x0q24eMZ% zBV!|MN{WqTG7Pc|vJ4Ik4h#Yef()SPbPfiP{cH?e46F>?3@i*h49pC?3``7s z42%q*IS!CrAe;c2^xz0!VBip75aB3h5Mq~SVBjcVVBj!dVBkE!Ai&PWz`&8fz`&uv zz`(hHfdRBmmZO1zfy04;f%5@_06QB414je{1BV0y1Lp(=VRmZ<2962_1`Z1b2F?o% zg6x6}3>+B@3>+E^44fN4!@~>=932b{93Bh|oF5nj*jX4DI6@d0I7ApkIUX|zvuiUj zaFj4GaF{SKaGqcgWanjI;7DO$;80;;;9SALzyVU!@9SjT{JPZsRJq!#SJ`4<; zKNtkqnHd;3f*2S$gcw9Q7BdL5D>E=~6frPx7%?z#9$^q<=VoBwNMc~%P-0- z!NkD8(Zs;O;l#ke`Gi4$ot=S!BZ`56LyCcca|(k9yE6j=M->ADhZO?@=M@Gac3}nv zjw}WS4lM=-&MgcK9H8**VqoC#VqoC>!XUuT%D})8#=yWK#^Augz#zpMilRje&tfje&u44FdxQD7@Pk7&zP*7&zZB2(WW9FmS{%FmT8*FmTRc z5MfVdVBn}@VBoN0VBoyNAjB@sz`&8mz`&u$z`(hOfq{dMfq|osfq}!1fr0Z610?=CK44jJ?7&sUi7&sak7&sgm7&sq6<3Eyt zfkTpkfpZcx{wo<6I4l_$I4?otKa+uhLz97la}xst2gtph3=ABe3=Eu~pz$Bdz`!BO zAi%-I2#Nnv1_lmO1_sVk(D+YfVBkvE{ILsLsIL|@jKb?Vr zL!E(va~%T%2PnO@Gca(tGca(zgT{Y60|SRV0|VzgX#CeRFmTv2FmT?3#(zEo1BX5X z1Lr;l1`beq>Sti!@MmD){0EJHT>1YXH2z`ve<51_e+Z3#SpJ^~jel7FzX*+gSpMIL zmj6FO;~!W4KM9S0SpHv$mj7Qu;~$p)XF}s2mj7=;;~$p)ccSJ0pV0WnmH&@I;~$p) zm!jqWr_lI^<^QSB_=n~HtI+s|<^Qc{`Tr|4{&D61v(Wg5<^Q#4`Ts36{$crlE;RmO z`Ts67{$crlFIxWp3yptV`TsC9{$crlF(D;Yt|Mh73|2;JRVflYPH2z`v|2{PS zVflYQTK@mfAi&DVAkNCjD9kFzAkE4sAjrzfAj!(eBFgH>Aj`_=Ai&DZAi>JWB*Lo5 zAj8V2AjHbaAjQhaA;#Ls-~c)=g_VgxoVAfrm{k&_UqXi`1-0|+l*V1V6b>6w$0nx2@WkW^Wc zs!*I-SelxboXX&mpPQJO2faTqD7CmWrv!Y9N>M8Gu=&KKoKyzC{1Sykg_4p=hJe%} z@C{=5c?v11d6}sx4E_bFMUcx0L3aZdfaFU`Qd1cG@)e3plQSSEJ%VnmgI%iymnkU9 z2j8;^J}5S|BD1)pm?11NrxbeUR$@_lD)`{c6wqaz;G_OPW)>tSgYG{~D^UQu0dz4Q z=pG!`BhgcNk3i>FdRr>~+aPAe@=O=0lJFD?O{0t-5d zJux{0>^R4i6woz93YmEdrNyZXPDT0Isd)+onFXl~p8EdK_yh$PC<>s?&M#6(glL0D z0YnBGzwm=M89a*>kPc~Q0AIobI(`%qqOKLG$)JeIO)P<01PdzIrK=2%(A!rPaxy`u zujl70fR3YO2nOGcnwbnai8d!czW{uzS|0Kt!3-g=%T+-qJc0wa801Z80Q*5sNmYQ| zUYK80tbm9!r$p$@vIuFAUz0OHS3<(l8%Pl>Ai!x4e8n3mxgqQZMR74mE9fpUWEOn_Fm!%egBP#%OqhWq&u|j@%UTTp-3Tn1V z2HnjIy3@!Fc6%l$BV~f_2?L!x56Mcosm0(+jq}q$J_lXG1U~ti!7~MRuciX{)Y{Y( z1|QHVzZr?e3Q4J{c?!j;WvQSmn*xgROY)QRbD%K>3InK_(AX~qUlGmVl3HAnnFq=YBV#J72~!W#c_v+EAC||g^O=6I$gpy- zZe;Ri6=kYm2x78f{>c1<;V^S8%Nd4M%$2MvOnHpC%t|b)SzH)?Gp=K3W=>#u%E-<# zg(Z$fn<0YHl5rBlA=cT9&P;BM-=OQAnHU%jFf%Y5U}0c5z{kMphuIhy4zn{b9OhtPILyhwaF~mM;V?G?!(ko18#D;O#?8RM&A@ay$8Z?vw69MlS1QVPPVIc<4 zP>U1;1A~+lh=eIbr9m=qd2ryN%46_EkVL>c;J^eYL|BA@0m4911ZN`e7ZU}Ef(cHD zuowe_7z5HhOOTxi|49W5j7-cdtZeKYoKT%y+&sK|`~reP!Xlz#;u4Zl(lWAg@(PMd z$`A#FHiLoT;a8Y4 zP~f6qJt!}@G>^eIKaU}#G?gJdHH9H0qm;p|D3c*L5p-{TUP@vmNE$?il%^Jg=MDJ=pqyb|*m+)|Smd=rZp91DsVd=o1fyh`&Jyh?Kz981#~ zf>R3^{F6%<{PN2fTvC%6yb|+D6N@TAdWygdU(h{`Ag!4>FwLnT-IXBirNt#66G~FS zcTxK%m*j))r1r}%g9x~!CPNsGz6=4r462C=s!0l}sS2tg3aXI|s=4~ADf+6F45}Vh zs=ijL!3?UN5Qc&(=Onii)E-x1>H5z5E|mlATK8` zCl4WH85|q>nYjNj^>HvT=yNkL9O7nRkP&BK5ENx#=o4jNs9|Sd5a(uKVB%(Ac+SPZ zV9U+Gpdre@uvdhE!A6XM;hrc1!xB*jh6>Qp!omy;#bOK$Z7d87jw}oe#vBX`(JTxM z;(QDYg~ALBCwUndTm={y3Pl(g*aR3Dp0hGAeBoeV2p3^s*bGe!ppjz`hH^o^0GBdg z1`@#wJ;pm@Hj*F%sPu#IL0JI8B8~(V&mfhA>;)BbphB_&WG~XTD3F^$`aww^L=%fU zIv5xjjvr^{(o0EADou~i$xpUqU|?`zU|?Wjc+0>r-;IHRArQ`k84L2>1x3*IAO?nR zCYahAObiTq%rG7g3j>1<3ycRE8m(o8@k+TE7|OX|Jakhl7$9d%voO46Vw?{;ZF)M? z1!=&eo3=A)!YMJJPSTMDio&^nOgU+^w zgd2#3Tdf-t1A_;|Rwl;zAQmhhS?7b|aWga?S?7b|5fpo%^uRh_nw5b;0W?;?@Ror^ z-~%WjfH0%fd{BJWLF1Hlet|Fp!$c9V9~oFNeC5r=z~BqF9mEQQ@EDlqr!p}xq(gX2 z4D&%Okb5AugIKT>#te2DEQMjF3_m6Yh5)!ZAQsGrEMOnP%wa(>2QyTQnLzDSuuqs6 z=9e-tFo0YEau253MkWS^W~iNv^Fb__T1@w~F)=W7z}13SYau)a%oKAC#a1pB1_n^9 zK-{pOoq^#XJJ@{;Ec5w6XOwfmczMDM44{~Rs63>8qd4D&%Om|9G8r!q4zyn(32lIlUS=W)ue zWoBSl2a#pMEC&`KnT#2xa)`1POH6`f6(J=t7Flf;1_oWYEQkfmQylXHSQr?B;Bp{V zD1^trGQW<6fnh3~haMZ4raC~?a?Gz_VPF912Bk{OFtlJ{V1TJ*Mp29D??e^`hGdAj zObqiuESR~N@d�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 literal 0 HcmV?d00001 diff --git a/internal/ebookconvert/mobitool.wasm.sha256 b/internal/ebookconvert/mobitool.wasm.sha256 new file mode 100644 index 00000000..2ef3ea59 --- /dev/null +++ b/internal/ebookconvert/mobitool.wasm.sha256 @@ -0,0 +1 @@ +38a544c5f516a6b51c9eba21f7f06e964de55aabdd05c3bbe7825f08e6f88303 /out/mobitool.wasm diff --git a/internal/ebookconvert/provenance_test.go b/internal/ebookconvert/provenance_test.go new file mode 100644 index 00000000..d9b85ca0 --- /dev/null +++ b/internal/ebookconvert/provenance_test.go @@ -0,0 +1,33 @@ +package ebookconvert + +import ( + "crypto/sha256" + "encoding/hex" + "os" + "strings" + "testing" +) + +// The committed mobitool.wasm must match the sha256 recorded next to it. This +// is the cheap half of the artifact guardrail: together with the real fixture +// conversions in converter_test.go (the "smoke test"), it ensures a careless +// artifact swap or a corrupted checkout is caught in CI instead of shipping a +// mystery binary. The sidecar is sha256sum format (` `); we compare +// only the hash, since the recorded path is build-environment specific. +func TestEmbeddedWasmMatchesRecordedSHA256(t *testing.T) { + raw, err := os.ReadFile("mobitool.wasm.sha256") + if err != nil { + t.Fatalf("read sha256 sidecar: %v", err) + } + fields := strings.Fields(string(raw)) + if len(fields) == 0 { + t.Fatal("mobitool.wasm.sha256 is empty") + } + want := strings.ToLower(fields[0]) + + sum := sha256.Sum256(mobitoolWasm) + got := hex.EncodeToString(sum[:]) + if got != want { + t.Fatalf("embedded mobitool.wasm sha256 = %s, recorded = %s — artifact and provenance disagree", got, want) + } +} diff --git a/internal/ebookconvert/testdata/README.md b/internal/ebookconvert/testdata/README.md new file mode 100644 index 00000000..abb421b1 --- /dev/null +++ b/internal/ebookconvert/testdata/README.md @@ -0,0 +1,12 @@ +# Test fixtures + +These are libmobi's own test sample files, vendored for converter unit tests. + +Source: https://github.com/bfabiszewski/libmobi `tests/samples/` (LGPL-3.0; the +samples are project test data authored by the libmobi project). + +| File | Purpose | +|------|---------| +| `sample-ncx.mobi` | DRM-free KF8/MOBI6 hybrid — happy-path conversion | +| `sample-cp1252.mobi` | DRM-free cp1252-encoded — second happy-path encoding | +| `sample-drm-v1.mobi` | Encrypted source — exercises the DRM rejection path | diff --git a/internal/ebookconvert/testdata/sample-cp1252.mobi b/internal/ebookconvert/testdata/sample-cp1252.mobi new file mode 100644 index 0000000000000000000000000000000000000000..621a551459fe2b8d1a4f983e9d2cc51e18db695f GIT binary patch literal 108476 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

o!^s4k73>8V)Xv-jb zw%WeYMv$$aDfZPyce^Dw64o&5?&EWif156ucbB~=X{jq~S=oaEQ^Uzm+dA`p%jmU! z_#JiSYU(`G4GkMk?l@6o&`Zs6P|NM4m{m;O)+x0)g{I%}?{;B_G5On{e^;Y~}-B$VEKj!~&E#DIOHvNwM zW`p^k-^%$uwr6?r3 z!EI@UY3YT@Q}WJFKlkCwi}1iDYu5hSu&7Hr`8YhZ-q*?hFgkrCD)#8puSZYi%s%DP zvg%8Kr%LnuJ+@Zm=Ve5z^$)K9Df({z>yP`tu&i0_dCc5><&?nX@j?p&Vi21CVAd`)UPH&x&@NkL&`<-;j_kC9<#`+(5|5MIX|99$thDDQhX1#CT6P$kd z(SwC?1$`&?pV3&Txf;0AQ<=45-&hI;ww77ZM^!&3kx9bW1Ax^qkKfBMUFx6XXpG1X4V8?mv!NXzk{n_lLQMJw9n>XKoRy$9myUuWTR^yzqmtiXw z{fe*@H@6R1Kle|1zV7yJ(~Re_>+<3pjQCF-FPdlT$hNOzJ=>4D{~45zE&b1sv;Rv_ zxSQnfGao9tG%xh*`Oo0~&t2D5Bs}pGqpL^&6#rOUxzuBk+a&jdRb56A^BVY`HQf1X z-x4Pm((rn^vXSR5?NS8+af|fx0YzNj9@`ej%?$nWJ7nXAZCg4v_Hj&8)xFZn!1McK zY<$BWt9@$MTjy*x32>L36&AlIM8LrI)1f^t&4b)uSX704kjS>3wEOF;;wj;qe{?@= zn>5Sz$gY&>0(YIIJ$BzO+Q(K<@$HrNF-^bOZBG+EZrM1oXz2xwMP1DsK+*MdpL+d? z{+0E&_5VsueQ@=?z3~1g?pOA|o&K-a>qFMt!!_#13;BPasXw&eOeD~?M2;iSRfGYA z!#Dkr`p+;i?)AU@(*GG8ygsh_7LOFS5s&PcZ=TqH@A_ivTN;aY@Na|XD~&}BHqwvE z|MW{u|GViw!$r@St)(DaE5NpPc|BcyY59l6pVyTCKI{L{9+bE?PXW0UhEc4EeOnOE zw*N`^uKx_{kNs!3Ahi3|=T(1l{xa+QXDC_zLL|^Nt-Mtv(18_%E6kCT@!n^9P@EAf zk>By5qW$kJ`$zGUEweNh?e_13JNn9p^?!P$?Els||7Td(b$azL)+1rFzRfNyxUJas z%u;rPpNN6VgX*AZ$EHMuD%~%sRga33ySCnh*H?ebw?M6?r4gyI{sHbw(=Ns(m0guz za!zngOv<{M_g>Ez-Wu!gJMElyb+x0`lu0fs+b&<>`Ld3yOY@Xp^vr<6L5J5x1#aTf zShVC0$p53U1xqw|V@qREgI(K)xOJubd2inHI+bTOYXM`_cNJORe|6oAocQtY=$a2`Vm>>>$NO zR(NxGp7cXI>yG++$^S%uf~uMYADm!q)VsPcJ^t&D`@fjNd(pGjalsFA=Uo4N z+benRqO0hE+6|!m2gQsJ?hEgKg2+27LDnKlDc!iK_O0@BllR}ts_*=l=qeIAXCc(V zpkj(0Efc@bZu(*RpFwHw^}luI{~D&=yFNGkarz6%^xsSE9Ts(I8}9+7LJ-zI2r4)} zf(s6jsqaluoblptjeGME`*#=rGYI{ec{6nVjy3@tdv6)Xd z37APK`K#8t$4~F8?khfiF<4`zwsDr|tHfukg3Hn`Rk>|k{#rn?m zw0z5rr>dJ3~98%?`Av*}dv*8)F_ zmob+P+iyC*Wbu)}?e7<^pZ?SSvt8q&J<|V#-wXX`xZwStLBaJu!;y>s892Xp*1u5w z&oDvhKf|M}y0yynU)y>AZ2CR@=e*CZ73P1`@2UQ0STOycL-&7%&c*2Zzh<)kI^6az zvi9_!^8uj9KuQB)&(=QLn;*W}Y**`N@4N^@hpxtsmva}SRM*;S^X<}fJY<&MI4fDP zXU(c$UzN4%SN~@)Sk$E*d=_2|p_F}brg5h~WdC!mUjOS){$ECI8TSL#mg2u}eMzr& z6$xkjb`UwDn``|3GfaFO^q*l{{4Y)IY3r6hLMei)LjH-=mG=E-s9gC^{b#F4U|12n z+!P6PkVCO)?>cVe1X~?f8s9sALF)W>Q~ok_X{&3h z{|vj`|9F2&2i2jOACcV+N~Cx(Y7iV-eY1|Y{>1vy{|xcH{}~pjCU^YcPgnZSP#xFv zK4VeW1G^ib#0$e8@;mQ;vdIEB30+l-u3q_r8c6HC<{#=mxAFdaQ~M*}xX?Nm0P+?T zGox8nzV%=YN}c#V``qe}o4@dE{(EWufEBq*wR zKU)8D?*$iROV&m0nvWVrFN1#s{=8=W_u29v^Ph3zvs$-2H`)4 zx-?c>!i)4SjRpLu_T0P9ikw^buD4o$?ED3z^WVMd8eK)g(koyEWH?$LxtD#?rt~3i zamdHeuTOjXXXmP&?SHoDImdzz5poNz{V1EV)h6cKlvfWQOBLpRE(w2e-eS?N`9B$(cDuWkmdFrMIF zkgfHpyLYl}%yizUd754YnUU{iS-sL&w4;9mys{d&hCZ|;BUmsHP$!2{3el$|gq4UC z()?(>RbBKh{Fjw~H2%Dn{r5TekN;;bjYVsoBFCF8N`tgIMjUCRW8Jqsul7sZJDj$^ ztNDvnBrtOBL!^cV-pZOtb?j&bAe|a3Naa4L>?apfR%dwrNPRR{-R z%=h*m=2v9@Yl{EL6#q}HA47}()kV4gHax1IW?%fD!T4VNL%R>x|FZ1=#Ipa7uROBW zJyKnEYX$x@L=@VemfuN)$?{s;)f}Ubf**^tK;qj!I@6 zrzTD)s9pU`>zDbV{hzd7{Ac+3oc~{gw$_y?LK|N_jhq{k^Hi!+TW|V*2D7Y-uA=9v z8;MLm;4~N+b#MQ&j5_~sOV3Yyp7-fLL)qCm$@V4kfl*tZ-k0A0jQc-B?*4CcGySxJ zJm*xlDMjSitU6qp`!~o6Ex_FWsNa)l$JK1%O?KVw_1*T)VO<*Qj9()+e+bUN?AiUe{LjJqx7+_+ULUw#@5kN$ z3lwPtY7?};rbl=UkvN#tVR=Am*aQhm!9lDoxi+M z8jE(EUyBiU$Rq#g>`(7|?|)|f&#>+OZ@;~6ND;AiMNP)1&-1@){@HI*St=43`}`2e zwP>yM!}y<~U+RB-ZvW5VAo_VKn!wr4oAR!Q_aB|VaJ8#Qxa3#l0SQLe%JM(D{lA+2 zGd#KepCQp5nG;>j`ORkk+d1N&|MCCn4_vfo_dl`Ye;w;TW&dZ`uo#(r!+%44&V&8) zKh!^|>J@!@|HC%>SKR*@CddD6l}BRB9ja~qozD8_KST3>2IVUm>-GLKv~K**5D@=o z)_;aK8mPQ)!f)hnTj)RkBmYxwv1{Qxo{#(gsO(y@t^VeJhP0cU)9dH%w@8&ZcJc4~ zOS`Sk1s0a2m-4vUxLCflUa+W3%eM(ur6UFRAWQd*pWccD#;yF>fRqOq?}5j87rp+s z=k|XFXRmKjAJ;d>e=>=!zdpPEMP}UT7>oX%-#OiXFIIs@wU}?h6XKvvWbCK61iDr& ze+I56KxKuiNC12FhwOiD-RpmS&i~7+eKY&mKHmBh7fb&$#O3~HSh%!Wx8RYT@!L)M z-(6oF>e5)lp90IS+NbxK*Pjvpcf0>zk`g8H=l|a|>`5drr zGO@Jim;BcHC*c?WGrT@0|Cb^BTqv4=nR-gCINyH;vAVXkB7rgK*N_Kor(tNv9hqePxcoV_7gJ=M*#ch}s!6zE!9 zr}NQwd;9XskEcFPpO>KOJn1AKhf(3YcKH|qTZhS$H*sxU=w|a(cH*T#pDveKD$~>> zl}mZnEmv%O;rLEl`dHPaj5zt7yYx<4uk5YZICdw!gO;k;VwFH0upozM#HwXm90 zrTl!B#-hE>pB-RfzNkxsc`sW0JO)j7WPqkS%>FZ6xU_fLjzW3KZ#Tt%FZ!D3DiX%N z36``(k?W+Y-pcZ0?|(M^XSkjJcX@QckBd*A+rJC`S(owYmBymo=Ud>J7QLpx#oxN@ zm3UR^r8}A5g`&^cck&q-@o~H}VrTDK?JC`8R9N1<*-H99gXHV)-->SC&C`hyxytW z`8e0NY1dTMq+UP%h1?Trj}}il@!9LsskbV9M`zx6veDMl_N-BtNYG8brBz$&JJtTi zo||<2*gxfMjY<6>6DJloE2;Eex7p0(|0tX9->1g`d#1hm6gKNo*qwKGJ^wY|-WtBB zRb;D&dfZx<#g=B%%knbqw6A^XHq2gr-z4l|H;cwPk$F4r@Ud^der;veuVV|>_^Dob zw`51*cV`)`4~&QU*b0mr&ju{&3$4DP8n+LMvtNE^6$$h?0V^Fq^zJ3Ertfln zuFR>$bN8Z zPq6-@N&TVPNAbTn>z{D!|1s<7iluKJ-?;qx#{8c@_4m&8M>P!83`HK;zOL&kch0t% zDyrA?W=CHs-I+W&WLM@bQ?2HVfCXO4l$b1S!r1iA(y zS0_Z3282qBK`zhu|0cr_So6kg$aH&j%^P?v-;iJP_Q76B{^wKqzn?TdDgI}e7xHiG2@&A6AMDWyO8oSNrXZ`cl{~7MP_1ne&eD$B<`^7~El79;P zXE?9%pW*#P_lf*}KK1|mDY_AEPUWZn4CllDGwkaXW0pVB{;$&gKSNEIO-KFnDfQn^ ztc9Di`26&LRr~*b$=D$A59+EwghO)>#>my||9tg7!~4aq4aX54?uR;7I~iuq=coS} z=B@wFP%EXwW)F3jNG05<(QtFzVSZ0A`~!8?Vz@(ZAdG?gy_<0~2tlzu8ib>%a5N*2 zmW9KmI$56hpFv*v@Adx-7kndDeUtzA$^LHrUzV#~Nn9Gt>db4)qV~52-HC{fI+?Gt z@x+Aq(=tovS*GNPtan(vKzZf4Y6iw*7vnlt{7CluyjCEpcADeL@T5oTErt)y7rR0|ffeAZL1qMg? zY>3h6=LueM{@v4amyg#7)JMHY-LR?q_;)eKY4zP)r*B3g+ZFc9W;@vs>?r1ex&zrgWS{(1RNB0_%ru|ThQOW2;m zn-SUD(lnE=yy@09$T&4EsNmG;bJFXbss*yvZOzzKx4Ay8Co=c>BnAH<(T;yp7(JM( zcrFGxen09x6=Ny(64~qMCF5naD+Pd_}hXN&-Cg$Q$TsQ86DQx=*#%$d3+mp|6R*dWI~f=co_HO7tH1NTe!@hX?&!+2 ziK_D|1XiDUePO$W%$yJGrp>MlCBZ*-{qvrYr`UGsR>+Ru(K7=2tzwdkpUgY*!N4y0 zbx5gin)hpuwL#aeox5f!6)3uE1M3Nfjdwg>Fud+My{KWM>70}K1(QzZi=J9nEV6ss zcG+(e>Z7htKav(({X6o@S(`i4K6Cy1o;bPe?T`C&{#krmqou(d^g6Qg-#z86+qQdO z*q3!gUXpjWa-I&5)sOAlY&%M%X@BR=i+Rz9hCdZ&*6N|Rd}Okd|MNVvRy z%{F6=jS4`bK#b^FHD@1&b~J3 zqJy;mBkks8dsp4Md0b_J?w0AEl0tj3do(SNCvYC~v%38Lk8f#penEeJ#^gJTju#en zxJ=f1(DUR$(P9f`i#1vrj3d^f$i6oFmDHE%8*d-FW)^Vku(AKQim6v+ z`;6z$RuC|3Rp7g^CQF04s$SSvZDD3LZ*T9OYacu6%hrW?9Ll+IaK@9|$31dYm!pqt zkI&sUOS{@5aeLnq4D z`F!%E%CBpsXD-Fu@wR!pFEVEL#&@14O=U$GRpe{_Gwizmi*v;bmcDk80Jgi!JEZQr z#_E2#&H467ThJv=X5$i;sfBZx8;@Gr_?B!dJo>HLxlnfJ7Vk~%XCpe4GoI%=xfRYS zU!$eL^f-QZrr`~V+(RnI5;gk2w@mC2`|@qA^nV87*tpwwlyBcs`L40?PRt@fl~X&E zEiGhLoMSkr&DF&)?ONKlooy8d^o834s#0V=M~nSa-`nPK=Xkzm*XOqzE4%!sJbBvm z;P2&Q?i=1mgaok7TfXLWZKmj==;){@w`YO8yC!f?U`&dbb>xv z;e5%T*?+X{y0D6_jk&eP?4!qKoz{~=9a9?d%iQ*%2H)Z@BEY=&O0LMlFaV~`!pD5FZ|Ci@8wVPAA!5%f4-YPxxQ8F z#ja*f&aE@OcpfY~U30L&;>pu?Q74y-Cn*!Xc1>EtAK=Omhv5>fr|ViayK-&0q|HXU^0}$r^2B`6ZS!rL{gv*r9Xi4GW_9vb23MGirD1*uHs#g& z>=&ASqD)(8K^u>eRdZ88?J8|)%lGS8%vSDm;!fBQ$F4s4C_@B>&03K)_A8GTituN- zY|6W3zVi2;IddMA%GPFi`!cCCV zH?w)xd=_*%wOHEmoTto_FKgPv+*1oer#xuBae?(OEWK#J9KQL*0$$!x(LKt=V)-8sen{I~~@*Hg|PkAm~&S#s=d+)}XjV`?+2fwrTD@GO`eDHj7#P#sP(@SpLT9K&2t8J*?p+yXLR((9SQ|9X_`9rJMtzF(ZOG)qF$#47{+ZpoJ>)zftXL!Bmx}{&Q zoTsRASb1`5sHDm-M%P2f9d@nl|8{roMRV=^RGGpfELmq2;@{UC;J>!%ZT;q;PySnG zuUuOu+Zr19J-Mf6V&C5X42M>k1Zhq%$>T}qkkz)>>dq_i;A0$~sp$b#4W2evtAf^u7zT+vVeaG8VANQ?#K^{9%k8a9 z#l44~-1BDIZuWuhWuD}b+N)ftT;j*)!-vYPKm!sQHxMO`I@dwM%A&UtJRIEx`yR4NI7>aEG}SA)q4*OVWX#nra_XNbE0_3VF!FTw#=t|7G{Ks^fWpl6wGbHX04 z+3i!BRn^U}%rE->ZsUgV0Pp5c zZ=bw9=5}xQuHu-pma>mk78^YgwXis0>&oD};@E`y{xZ&js|6OH;XnTSaC7L3MGe-y z_NTj~OC~*W&f0ciTI&+7N!sn7C7QqY6$ZrLijIwF)Lpz}V`ib>_ULn*TnqH9iZ5T= zIl10Ck~{p$lk$GBkLew0Q5od;9iX&5pMvxAi@}DI4aN8u%<(xzOV4n(FS? zyJt+(?q2z{*U!mQF@gWW<>gn_uTwI-6L;sdu&AU=VdDOVVsmO`#*!Lsj*Y2Z`vj6*+q{$1sT#(w5Q1% zC^SzDNthK~85Ug`rzyU8v8eJ#(d6Gj{~68+*Y0|KmV0ykoZH);Tb!#3VEZ;_<5BTW z=i8=NGG5uNJv;44`%0OQ*FUW8Uz%BVvfxvM@!T_~`n8!Q#2&@AvtL*KxGp4XSHp}` z`s?;wV$grK%|n*0_+6IS-d(x3*QHx`rk!b@L1bqseP(mHoHxoGiv)uqjS; z*Mf=dQ`U6de7y3s+`cIrB5v2tJ9jEtQ(yUa&9z4XPb!nO%nR@Ld_K;$Gh(auizO2u z@7du#f#J=j4Z3|ZEtfP0?A_jRJiok9B;7J(LgV>3#zha4{WKm}v8`Isd}jM3!{;i! zosMNs)|GvEc{DL}hpF}pMM1~vVi{)(m#IxXznMcddEUM+nX9XtcgR3&rChz>iJ^jCmHhOj#b;~FZf}qED^Ita@OfhM z`~!?%mV2+bcb20odUtzAGRGw$Hmkx}<)XcniQ9M0Km4Qlblbyidz{=;na^rDoK&e3 zne}vO$K@qEHf=L|%lkNL;xn;(3@6lW`DIt@#RdmV(U|t@<)IA;QfU^-3twMbz2~z{ zPQOl1&%eZ=BTe`39bdm!aaNq@4bv5WuIkE9HG9CvDHoi!HP_^>-KT8ni41L$xyz>9 z{@HhMCZ}v=Ue(9*qNk54ANl>L%n7Gs>Ot)wK>AmgCudf$XJvKcxy?Twors^fz3_2d%J1m!Q@=5V= z|6@BZuDI7dZHIU{)5EsQ3KQNbU$&c~wy;|E@VV*b+{V3Y6(+n(eBo;t@%k&bwq|K> z+@nvXlTT0LIAl42m8W_B1mSrG)?ukzx6Nd+x_mY*FYH|Cr|r9s9WfRVZI?J^eA%>J zZgI8Ddz12VZsQ)~PQGVy&-V(vGT)%R#(cWr>Wyif+6+g&s?YNk=N9le_1W63$s|oR zK&Y(WXV!}?r@w6auw|2bj?Lksjl0*ZYyB6dFlkB2%f6{+ga6#LnJo70Q+M9Y`O|HU z`=gvqp9-9O7&=w)(-QBcy2Kkq0b3jBi8s zZ&|*R%f&zc^Q9W&3|!`=24^{(lBXQ(nl%rqVYTqHHdni8;Q#{A8=;8@|e;L2Ehn z7KjBo3(ja~&dG1uIOoZP;;&y`J4k*BbY&1NJMOc4U+gL0 zZ=#c)Gk<=z2wGbX-V;CwwEi^KW}o(nVCa|hV4Ab0tK2wcLXTZgJ|A$fgMrDJi8Q@74UFZGyVX+sll5eq9fGonD%|JnBxg_|96}yXv1gZiJsn zJnnqLwl>@BVdCUN7tYGq1+Tq6?RH9%^b__%mIuObU7Mciie7wWRlDj%UFq5lLPsV_ z&b)icCGGXp#HQsNMbEpO+N5m79^k0u$=JSJghAqtn~KK0NDJOR zHyLV9kzw*HbdU^k`)KJYI`MdDVw2|9>vwNCRzKF>y8Guu1)(>pZJ(5a`z*gdo~JE* zL?G&LDd)zZjVHNwN)+tgxs!s1>IJ{E1Ei&|$ z#ocR$J5Q}tbYJ;p`Te6$;$xgQr%zW_yL)@vgU6EZzpmw#KQ-C^%Hxbet>~F7tCgAR zQlvfDS&HYmGNc5?+RaX0em--#qv}d?^MW(a>J8ftE&VoO=fU4wW%td`)^9(3JV)wd zLgkzj@1+@}+x*NnJznwJwduK~Yf03UZO;$=N{p8HZa!=GVe=D?lD1Xz>kloz`lUNN zSE^h<#k_2-K<*^#$vcW9CWzbepT5-1dM+=za#5*g(nQ%^+L|nv)4Dw3b1v@5?Rj{m zIqKGt&z{R(T=vxIHJ_?@?~Hef*Ntae@)BabBR~8JpJW)hR{7r1oq5qczvj*F72}?> z)?%^NYEi}Lh01G7-F+{o?cek%_r_|Kw<>}^7p7*Mktq%L(GI(7PJ*{>q!JwFp{n!>}v56d)hya@?R*m*qYZEoYXxl10%6wd#YU4N*b z!`D}3i|36f>nEF;9F(6v__sIf+@zdkmvfVLZ4y#Fw&da>PDvNXsq8XO9`|jD&?~wU zvc0fUJlKiPCGX_?7@4rQd$v73_%7<0Wn^B{G@Y9#o!czz+pGfEZBCu;Jr%C3tSl+F zW$KN42Q$kvWsIWdZ*g6+^w9Y|PehrY-o7mVICQJ7xnHwqqE!77-95oNtDj9ex^d2* z-Ar>PSiaKO5cBkaN&}ncO0~8K37w03a@-1DIUY3-S|X|B*VrCYl~gw@(SW zePix_hCOwhuN@?F^Nn^XJ1b<07%?poV_zt@XwkZ3=Pa%tou%y5D(0P1JNxFgr_v1( zll!w)>Aacu*kj_B%X!;_w+K0WvOK}FxWMvUU6S46rDEK3j*4D9&f0r#qlwwAD%HJ< zJT6J9*I2}vn=#rq{kl4FS?0$dv$P|14@cdJ{<*u{!fQ=Rv9P3T16X!p@+kVb}G4p>0#x<{ZCzh|gyKXA8>7LY?p`1BN{~5&X=RbxN z^{|zR)TDhg|83p>diH;Y7itSvBD&Qk;ALh(Z3#=A1(vh)e8|*#`*gy#4r7y}9WpaE zv`n1CcK*u(t`N{>+$ZHdlX^~12zl^W;j754-O0;h@4J19K5|y7&3Z$DSI<bRQu3Kh2FK7C*Oc_#Q=^y!u9DmZnRMe5?l%WKz}>|VW7Z)xw^ZSNd8 za^6`;Shs&#z{T{a;KZR!MpupHg+D`{D^&6M%RO6WHTC26PrPr>Pu!k9{n@s=dkuRY ziyFO{)g1A6WA5kt4JUV3Jz4RpaLz~HTBV;ltgjthcLx04u2(j>q3pTE_oEDsx^J&+ zgH-*!8#hl{ENh^(H{+Grw2PVF!o&IvKXAzRbGjs&r;~*LRKt>jkBK4jd}R zGK|;fOuW^g{dZBKk(b)!vp%`C$F=)r*lrBow{nH`;=NxlTgfbzoH5nb;(6Ep@`tZi z`&wD1JLxUiDWKwY>gI{BET1R#gz~!k?!G*e^+{aZpSOz5%zb;BDn%G3Wrbhzme~{+ zvuEOy#U^XKp0DGpSdo{fwsXqqVx37Rsy1&-{yD2|e$MssOd*D%BDb$j?loc-XXCeA zy!AVF)*+_Ekh0)so2CVD$~<^5e|CdB*X;Ffy?Z2buI#wB#`$%OE4TcW`p*#1aypZJrbO=S?p1&8 z6rPk@w8CnWwRY2*1=e4fC*?Q*C?SGZ| z*0oh7E0r$iJvDn|vH4qTde1wFgq?TKRUG4ws(SJLZQ{3sdA|ED{oc;=mYwD8xx)8d z4C`g@9w~dzQhaKIy{^9-n%uD9-zt zPgz0WZtZc|tfSZ3S47>CUimO|JA>?_5QV0~WBm55432s$S9mc@`}OjGVngPP2Yv19 zqddQAziwDmeR`&oK`Fns8OIAZ|ETpW{x%;E3%#4<#x6X z=sD4F_d3pVjK40hW|nfFO!s`cYwolDch(->`WL<}i;cZ=cSH8-&SlycPCVWCpdSVUSC=?-D7Xp%iO2ELgBHmcZF~rzG7BTZ^f`&WRvUu zQxh*&P03y3_SDw#t7wv~*DuSIY1XHwPV&hwo!XdFa`L=s)@zTMTPxqZSujQ7ie+Sq z&x!*o)7bMY|GK)$_1CLDxwbmbcPLX}Ccs}gc2g|kEvP|z@d7rqUVic{Zv+fmVVxOh0~O{>6BQtolH18-S+(m8KqnMr=0rlx!E9^JI-_IVv|g~KgHyW96!UHS0R{Ibg? zSH_ftH5`c-XDs^u?}O4ZtB{GA)62yL?Ox1L(9{xGUdX#6-FC+UF8iz<=YRdIzxp%2 z=I{A;e{ENutuFbt=;pdKv&TzZ&t3dcvU<~t>4q-@?&ozZX`HcsMnfxuK-DL|Dn2*O zU)!3ClX|Tbs~sk8pAlL7nen#eF;7_yX2r;f&5BwFo(L2;t`2%t{yFFK`n)AK4qh)= zQ?}uSyN!I+%IK@mtC@_qSCDW z3@4tK&6Ez>S9vLI&rV~7Lp!H#*Z9J2x^i_z+GGES^E1|^Og|Mf)uAq+c+#EX9rXul zkB08NlvW$NCMRLai51c*lN9Ysgo^kK&x^3N8m@?|UH#TRd&h4#!)HI+%WRFW%`w$} zXgMS9PG{F!BhKhTxtZs^rf$jpy3gB~{rz2=ql{OY_I%!Lah!dxZ|c%jSsx=_tv1os z40RT}_OyfHxrOq)D~!C;R+_H4e24MbU9Y7smyE@HnmA=XRlW~-I4^=*BDLbQrklo* z6uAYDw|c5BY0OJ;y~`uSadVS}y2axUrd8J+uBh*x#LO74c~#Z=`qT5vZRV7TFiv*O z-qu>F`}9d!pvlJQa~Iy}tlrU7A*rm+ykJcigU0HzS*2&s?zzsTFTQ`fmh`H+XoJ9V>qZ5+nG8?T z@2$)+bcZ(`e=`X<>p-Y@BRFlXXa?c05S zE@ezp4!ZJatIp|XY){?%oF@O(VCofJa!d6~`NU{%DR-S!KGjQN*Y_Q4JXU;6%i7m0 zvQ%vI4&HpN#hcmU+^*>MR6qW@fXgKGY|`=H=0Wo=pZRRFi0$u=^9*19WX%Ql$tbCC z@m8>5J>Ms6-Eyk8;JncaZN(EY3183KYFj~;2WaQx9F-Qj>!rS9QlQlFz1=x659(^J z&6``E%-36+ZGES6U0LmkE34kB^m+5`_d33mVS;0N@XroOb<1PyKBa4-G`OXg%-S zy7a_!B4&iWlzRHa6sdm+;q*TttkmKiC8{b@8UcG|gh^KRq2dmglwhV~iUytA~( zGqERabBDqNN0tJ|B@1|0=X%|`b?M$cW9yFm)^m>_Vxdc_W!NYyY2PcqKLIKV^?nwV7NQy`G&WzL$Zm`@7v33x<_ZL@3U(*?e?D~sW5f%Jo7%+SA9zae@HRBTvwW%QTo?o z`e)teok^dSds7&v=v(ATr22;E#$77EqPR1A{^pn^UYj^BSiO1qsfVZj>*{%nx?6i^ z+d5s6b^AFpukK_aw*#l*lYqjeA_rTmv`s1;Dv6S5K6970amsG8JZd&QJBNSETXlxV zJ--6j0~c0Iz-TiF!g3()&vEGg40hwRlfW*|J=rm1x#x*Cm+vV5q;JsDPrQm5-n-% z`_1t&-tV}Ey644AkFKcyO+f|%f)^*$dthJ^4 z&v%%lJoHN1m3Ly1O&TtO$2u%rW!YE$$(ky{nC@q`x>E3p zSlCvU_kziVk9*SZi^hI?XKlRQCVibI<%3!T2A^*3Z!*ldaQvD6&A^yBHS3}!?c?ed zBd%)4_fM* z+4S!dhZKk2@;BEt@pj0vv_Lm!!z419W$`G{A{I6y9z7IS84yXMN?D1av%4Y`0ja1 zN3(>HjG`>Z7o`cZd>a=>-@fkp-o%_3lb{dI#+$o;Zzt1&wmFlv+i%zG?OiOy< za-O58aHfHqzl8-m+om;JyH7`|P4HFTGjUU1c~Zy*=7Q(zndc`4{Ab9x&pmC2_;jW+ zX`d!H9`|L%m%3YfS8H2)_j*Uq`k>rhmKIX<&@Y~4Zo@YA?Q2tBZ*a_AbzXEqX+y$_ z(ge2AMelmQyBK;X40iKUmuDv-n$jrT%rf z#@XVq?c2j<|2ti5V*T&?w5P>ikGgC+vGJtTiH9o3zVZ~@cscQ2cWcYkKPO{9_8ys& zGXHt3)JwBB8&7O7?EbC0F0#?$GechSSLUu~t4_t=Q{8^^(yP*DmdYe2arX7HmM0hR zuKe=b`Qd*CvwL@HmnwLsW=dXioObL1$E{PqghN`)29RdX}7LsS?5ij0vS*`Y2 zP$y;c&AMref|X@Y6i+^1*M50v$Vbz@`MHc{g+GIi7hKp7s2OB0VezNrFrc=pxA~aPS586ELy7*yjYwsPM z{MR-#Njub&uyRzEH*IYb8DNfkazovgF-QmNE}| zKHg{PKh|KCwsAw3X5Mwb>UPpr{RY`C#^@jb`CD?Y5` zbDzewTwV6~(}U~WxPPCJ*&`l&?5UH`CV{fX2D_$dyl&s_7&Lu)WN>6N%fvR%SN^sY z%L^keM=a>~zqX*yX6sJIv`7hYxvW07vU#?vqAPQcH{aRXQ?%(Wt4`$RN$orZ^*kkO zx@*0D-BOg@`}9m;pVM(|jX#Ym-oAU6+tPIJQASHMpWvx?zaFnuyz%1P)RdC{3_4LB zDpK{g?XK_n`zAflDtY@_v)?|Oy}frV+M1GGo$);S&>NSf+nyvZ<9pmw6>k6S_WDh= z)887`&IWb(tDZ0S+hY6n@~yR-@0_{z`jXO<6@N5adwr84)joXd`t0$^E?s)gq`FU6 zwSDcJS7d&;d+eiY$;+)B#{y?dipu<&`sKrn<$HHdQ@$z}mTKQ<$};(^{`6<3m49Z5 znj2a>ykK9jgl*Yg9uDLD<=*L=(z{hpYd7}CJ-*$SZT9X~wP#OwpiNK%XPAVA$@cK+ z=Bd6{k6ad&fTWz1&!-C&Cp`+E=6oG)?8Mp^LG0qvFz5}Fb!xb1Ll(pi~LvNI$y z4zSES@Xqe}hgGFXl~>m;Xi{)m7Ww&)U;VEeB8+jM6B5?lcsafN;+|apxBw$Z}rER7>d=Ma%+lITDRO} z@fnjVcVEswt(~XP{_S?(vIa{n?G@WD>)g9^OE}})=Ubiy`OMptQ|}(LO2}pSoB26& zn!10gn7>H(a@G5{_8dD{!)H)&&~nki;wg)E>H7O^ZuXiS&}ZXbG?6=%&%^!s8QIEX zmn^?7xwe0EuEOSsk}JagEag1U(hoiPv><&s`~E5&af8&hh_cF!yYd5G@ASB{e4*Up zd$YRE-466NUm&?|R_C#(rspi@*-`Q#GQEN$ymi>9SnFz`&uC`~DI4_dRFMX-rCyCOh%okO6r$4X^4 zj(-Y0?ytM*`dN6B%gYPXu7A?mcua}!u=M6>7SHD-RL^2K5%Hv?JS5HK*fVCu;>&hZ zPTjjCeEOQHgiF5c_K8-f`cEsds-)i$*x#FQfw8&gaaW8?I=kG~%bDik0U7-|&vTpH zRSX?g|7VcryLmG4j$YMo2J35EoJ1}rwb=BE%u3$b>Hh9QgSUr&+1&bbBj6dDSLesSf2$bx99hvT z_g;Pzy!T?0YreE|*;|>3t50tDbFhdzara+~WzKr@#k=0-zTNV~rR#yrsq;hyQaspTtQ>Dw+TSh~gMo@b^(bRD;u(GAHLT2EVB zyYIf*wkT}-rb!l@IufF%S01>-_~ZkpEQd*iUg4F{wShKk-5wd{e@o~KKY1rQ&-Q%$ z+Wd^~Ot%lMd-mZO!i#i<|ilu9xEEL#wr%pL$I9mKL4ZQ9ohMRCUQ;T$?KsGi>bCw{4dzDRlX? zd-Ia6h{x6*w@y_HI>bEJSl9LG-qD;li>95kjy^p-C^Dt^shfY;NoDnQw%Ts5y)Ov| zGzl`s#QvSyG_$}lh%qgJ?ahM+G6~;BBJ>KUtmt{WRb+D&cnfXZ(-!%- z&7pN>-`ztojCUs3FZE1M&1df@IjNh}rCoWcc9XmEh8%6a(6*4i$Fp>_=VU2+yqdT& z9kQ^EOU13v%~N#Zl?kT~vk2bkdZDNLHmAlhJzsXkw7V_Uszw$@@07ncG#S2OUz+lo zL;33aiN#yfOC?q2u-TqhYn<`|>3nz40xfFdS(pE2*IzdW?YVLeMp|D0TEM2kurlsZ zdWYL*kBfa>5fkjWy4K%`&4B{wyut@|JCW!B`An~@^<350{|xDC#jRwINQH6Eq=|Y)&a0DcjTld?x^8AJcJ12bGqaO+ur9V_FOaR9!f5pB z`mv0Z9Xn?|ae3tGxg3K8WZtv==&U+HDuXP;_MSZF#TtrD@ZC#V$E_ z_FH$;8DSfph=vQmtUHhtLx)9>*<5)l>rl&T=-A9?_;!|%8>r^)7#FPn`TEm zd-5!tDlNV&kGXTcRH1t1(wPTtNxAD3zMLE$?|5ax38@>+(j7PQW7@0>to}1>+do(T z8{g9Hkui(75>RUAQlyAfcF)G^_2LEaf-y$pfH8NH8kh9SABFS=@GKPsi=dm&b_PwjP zRO-ng+`CC`XHN667)8Zg|AF#WO{4mBV;90^{L)!S4sEz4O^d2m)su8 zcSg<0!Pdxl{$Y{t7ru&kM6T@++O+7;={ei)vZOyfzfXhN&OGC8oLOqA!fMTfEajp} zv2Need!OyuIq|Xe#93jg{wtn$P4ZRxXW_Fx=aIp}&l4|fyLkNiR=-)QSHiy)#2tTn zywK|K&e&*n1;K+B%C@`=p|xJWJSU~^-I*C|EpzH-%-4hGMMb`c3!mBSZ?oytj>EgB zCHBpkwc%InrPEwfLWSRb>fW{Nf%T^f`MA9+cOBhy^HuQeMcz^i8FbdHIox<uwJO3ttMn(lvj-Bz}VIgdW` zWbfQ`&_Qm`#9+1V6}C^VtwvzA1dgg5V6a#Ae8$DU^M{BPLV_vP-uSd!v-=`ZLsakyMjJ;Ck z<}C5am2st4-anOD_LB2ft^3ljMGflNyQin5?U*@JV%MZ6Quee zV(*xoGFv^9Gr^YePu5lu#x&{QC(0_#!v)_2t={Bh)>P#1ym40Q*)!jR*muo~oWr|t zNzrk+nWnsuOBra?%q7@F4PUmu{PLyS#fIl%HpsF&*t%a^aS?LoLhg_1xLP^OYZlXu zv}J#s)a{=lSJ+Vbb&Zz>Q}jxg??PV65#KlFcF*BIKkL@ztuu6IyBVn*iR7#~yP$Z_ zoaFiSSqBz1m^|3MEtkt%^3T&LKIy#^oterWv#TU8kIR_$?pCePt!u$XG110TZZ%Fl zEKq65Qu4)grYl2fo$|g7o?BJ7S1#STt54%bk3<8bpCkLchLXp#4$ish$vep@tuKJ< z+^3?&>P-uZ`?h*@F&$gBv^c+Zt^T>>4NemlC(PZbFL^v}rhTu!+s0o@bWTkp)RK53Hx*!*XOQN*kew(b}>6Wu+ z?+%I2-}CNYUsf;mRAbS@? zbRSgRd;89U-f-SY9PH{h>b9P_=z8eb)vaGAUS9ub=cI?}drHebJq%hA+WA<|c+T(S zdrR6wHc3ftotrw(QCKBYCBr4puUz}@1KSPRY+ZU{W_o&W{5pA;?!I&E@%Ks1LKAi7 zz1?jg%Pv|U{86NwbwF^&6mredp} zVAMm|DosIF8Rp5&JA?!7Wt$nr-H6fh*4c2UbIII=9(N}QIL%$oQ}L=W=B`MLPR^@a zt?Skn=Gz{h%X351*j*yQ;r9~W!*dGUz4Eq}C)cj6UCVp2DLh!qNNYo2L)qNp>I}ca zTt!%W9V@eWqSl11Hac1)ns~RTLB{;-`32wCa_5%at-C1GZORel`dg6d2gI6h=&95i;o6tmb#=FiYP}nMboB z`z|P%KqFNzz6m$RMW6QU(z~=uR4ssMoqfyacUk`yZ-|O@k(?{4oFac%UV*{(gv#WI zL+_rrZ;0^`mM(j5aeSF(zs-7~BcFD=?G@R0;16_t|I0n<%U^z<_Fcd3wKQuf%MN?J zdwzFPa$oOWZhGeO#Ct|w#(Ivy%{|Rm0$6VKWb%Ibc*Ia@BbUvAKlOVoOyi)Z`-6so z2PtOCMqZhU9H!v)q1-`HS`ljx%#7`3)mZ%QiSYI7eN!;EBhK3t)oZ&@-|W*N|F6lC z3_Z2)>$Z5SuH57?@tI!FIb#WiN$m2~w;D7-rEchLS)+Hq%qQJb%eZ2Ax49`KWySa7 zSxckq)mwUPZ{t?3(+ zHoa*&`}R&k(HWVP;>*wEryAUi_|I_2PN!wNUB&eC=O^th&t=Xle=hgqj|S70U!iZr zoL+epGIABkdNS^NsUXu(do;LH%2UYX*fT{p4`%f{U)G-f8+7WiyV&p4SxfHh=%>TbnkRvmv+mJK6%~9 z4=3If8BbO2sj3dCYCU5pKijkmaYSBOk7KJOnGR_giX_s+MGYP&-ER9a6q z7PrQv)ckoaYq5akib=a~k+0nWnis(BoAJ-^z&AB)GEE$|9Li1F zm0wq@USG1e`z^2N5jDxshdv8#hzM{C+%<0gbuDar#q{llCPAJ`?gBmHy~-~sNA}4(2Id~F zv$I~^+#->4DZ1avQYvVf;>J!ct9R!a?Pk&eYSLc`Dc8)WZ&&IZakoQs03p13= z4Jwn|1y}0r;HhFhfBMIxHLtCVUQP?JK5^dqt!|s|V(mFRhROXgN%L1{l?6w~t(~yL zDDIs4mmOZT;$f*6w?Z z`D)!uZcmIg8$DSV8|>%BFx>utI}_=TDB^u(9heOF$7ZLRwwZHwpq zIpu5;QHF9Mc^Vt7iqFSvf9mg;m3(x;tDrk)nWCS0Y}EKPCT@{ZwsP8`gzotB(p2tEE`UhP@CXK4G!Oc8YrJMAzII^~Zn+oa9iGRXY$Um zK`l?IPdzgDOz!WElWs~gSUzUo{?L1M=C9)VjN_SUAGXdtQuxk2J(F38)CxY zC&eedNwV@!=K`Kr+G}df4xPGG`A)~DUv%!CHnWM-pBJ~C=2#qSj0otIsr>tmPJY&*)({|BSL@#uq?K!*6L`+O%ceiAIr0PR(-{ zU!Ha4%Hy(2TiQaB7O|gXZv1_H0nZxQod=KmTnaBO*}O-5+sCt;j@jDAX+#NK+?B&# zkke!K=JQ$iN55YLnreIIOI4<1{8_=1E+D|DUiejR-j+Aob9_a&KIXVn(f0F{LD1tl zg%`qN&u+PPFMM9B%@v_#)hl0Q^0ZAAoqILV+gOHy&C_)8!`&YFTUS?CPl!^x6T#$G zu;g)H0KjP>oDtKRqDyeP5O z4EGN%EtP(HWPOX)QD??^o_}^MI#|rKWSV3WM{4f{t9MSP+#bHNbuF=4+qxtwV&0`I zX~N>OQp!C;CY~s<5%70f5)vNvA@)_3Od^lLoud*dLdL9TdN^1+k9&bO1ZZ#EdTEWm zUe4V$au=mud6&1GI9|cwVX3areDJtv_ZruXTeYos=Wf5b=h@UagQv$&x$*g5>t;RE zc=A!#r3-P7w0Ej(6{?vitbAsIE@d1u$BR4>{7>FUigCga_G&zIYPj}f}|ZC2@; zs)su_|MtI;&Mj%QX&P(SgU5Y0U&cH+v)*`1hO%2yD5HADmy-+F0%P6gF1dAj;fe18 z3Omd;-BD?B*DIUc+>^`PQ&g1sDf3rxkHxRhTvVQWc zuUx1yd-mqQCcF-Ff`lnyhKl%z`t`1EXD%r#=bq@lpd#v18oj->Pl8Tb5I{L*!6+f2Rv$s7%)ThFNMYS!R7TzIE- zgU8R>Bl$mUo@B2z$=lUibce9^#)PFJwRf7Teto<& z?^}khT*foKP4_Ob% zlg!seJeS;ePtccR(mmC7cSm}r1-s-q{&gBmlKOc|wnbO!rDd1?-Z)*={h@F6>NcZy z^MapExRiSSoV!zPmeiF^7njet?6Dtg>q62NEcSFl{R zPxJdP*0al2O^be1tehx+CU6depIgQ2`|Gn9&h6T>bGKIBJGB|>3ZGf#q+d3lS=4^UTFpPUHM6EnD_G?7Dq>}%@YLX*iSw)rvNpdo-}p)}(#AS3^`Pq= zj)W?K;+_B&&zyB2*w7^Z_Cy$ zIrb;=?a_miPu-sX=$zrttLNXmSpJd!TkYiCuFrnfB_~_RSMHl5{AB^xhF9VnPU=jI zy`wVe)0<5K(XXm6IoDUR=!%G!3m&-e@e>3DgPP7?j66@V61hes`pLUKbP?7nrs}Ou7z9`^-rTC4a@Q|+|MO{|w|`oZHqG;CrrN|O z6L)Q%7I<_1wMVl4o`AwXTdjCim!e);rF_D-YTlF+Mh7 zjC&lkZ)eBx!pdTu^i?)%4u4Xcy&~>pZGq|(tqI*ytC&PX9T@meO^Vj;XgxW}hP#p_ z=#yQT<>UMB=FOWbyGJPIyo`ZjWz5@9*|Q90mU5b+kIUSHC!8v9{AQZ+D*V{A?&mvg?XTzWD8(e9>O9!#h0YWCmLyLLQ4+T#4S%ug9obIJ{)_ij_0V664C z`+%(H^S-?=nC5K1UUY8q=~C-6^UK^OOp9OmN>g?B&Kajtcg#Gql1)aJH(I~6_InJq02F5vplkh|-*`pvq_<~PCdd40K8Wd3`# z21nDYM<(*EUy@!<*WP19e>c3U-TAgyAoO<-m(%@o-Zi&amRW&#NFfQOw zy^^0g%`#=rj>_cUeJLvIFFfyRTsm>F$ITnZTBZh7#C$#Qht<0_wJ_0sYPqo6j}zye zY#m>?Us`>EW!rV(XfM@mQy)zzNlD_3+;UZK?N^okMw08oEiyav7WBtgEp}xPwO#u3 z?9AlMLKD_D>C;6!|E%KDU^*k!`gE63^xZoyJ>Eu3dKOH+^WbWh#sY55`ig1y)4f+- zyAN5dwc@y6QRaNKO%to6G?<>g{e3s;R&-^ijMynBttU_BMRwYrT-9}^N0Kv)U7@*& zS5<^DFW2v1LR0qbl}rYu_qAo$SP7nwO1=8@>cimjLX+Rc{f4KLZ42iwSoI}nzvb_u z{4HNUm(TqR+FsHy$y4RYELtzc)LS!cv44j5**zO3|BX22pe$c~f32PO3f3tTj-)9b zxGnu)O}eFu%->q8YqgM}e_T7Jk1T3X-8IF(P-T&6f3?_+od^E>Tzi*2Y}4fhJ-g%B zV-IBr^NJp;N)bN3@WGdLbsF~~#VjVyz41V+XHspeS%Z~^=?-zvHZ`NAXAJfzs0eN- zDDI!z=J1?_Z%a(}1ka^99%-KcPHj8WB=OI^e|!Vy{xx(&HB7|kJE!X{xhV8N#>qC zpuU}9@>fy0nZ=?@m;Pzpe`!ho$myTem|V6{~j!;3xk>u$fi#&+)!`}C6K zg$(j{4H%Ed?bmp;KJ%YWoBWR-eL+(1JR>yN4L2l-PrhDw{$Wh5NQ_SDwK$!KoJF3K zBGm;?$Zjx*FMDx5u6fRNv$g4eXPr82etXY>&_-#qWPy@97+4`e2f$c5Hs&v zxcsQzR1vlpx1+o+8}HJ4rqbN7dt?6;zP%?`emUKpJ-6=9;u9C{yJ~HmoRh~b^RVcM z@a2_~>$1A^#H{W*y*hO~blXJLd)LAkm4e&4}+cncdB;>$t3P-7M3vkR#mF?zDQ^+e@6^SGy|P`mCwW zzLQ1Q=f#BEXY@V_So5DjgGF%nQ=8J0YpgVwms~czk+8AN(&wUgzVa@ULU+Z4yW1^P z{i+);t$z7ykJzV7H`gg^mjo*}u&bVaEc2gXi#8uzp?E%(2aF)3N!x za&O+*#6Mf&pG=*p>c8!*=VqN~3)xX2B<{$P=yxY&`mskA56Wy`&jl_0|LY&TY0u?p zGTyq!lDSPjuE?0eBM@6z_*FDGZ1=WZSCel)ljdM@nq84B^;W9sh*S?_8O$ zYnZ@fld8Z~v`O>M*-6LOZ(x2I!g}{af5MI#YG!Zm754jtD9+FfIHGw_*+z=N3v}WS z@iPT%U*}{l_g;D5&1~%sgWLZ;*uR%o5IEf2dZ%9N`K#b!%`MSM&rk5BaQ?f!oqneNhRhEkEW(m3xcx6tR z+}2xvj4r=jcWlvj@0@3jvWs*kZ^@l0!^Fm3diO_9`HHk%o3Ge-J~HpSXZ-AFu}Se^ zn>mRRADbA1Di6xt)k^!BTpVQ(sUQ5lu+JU`cG(o-{Hem zcMsjt_UE6()2-8SX3dXdAx(yTH_lgWUGnl)=-Yk$vS%B!*9OE)n}5FMSm^9bW((V0 zzrupnp1OOj`_H=4%LjgY9G~X(Hh%r*qIGl6$qFvXU9sjk%LASdZ2m8O*Zp?hxMj=s zEru`On|yvb`Oel4Wru{;?JoO!kBxnu$ExeM>?ZTKPv|&xPnzT1kyUDCIt3mIdI$DQ zob#b@mhG;+YwX{={8ao|cl{6b-0jydpLranDP=Y>@Ra(!1Pl3KA7*vt$+6S6uX3Bm zdnxzrn`<2JlBZ0Ve6m$3M!5Gz&f_1O`>q~WHnQ3zw1&@-oki-BP*Hf+aWkc!OiwqX zeVu<_J=$fHyUjJ#uE)@S*1ZaqkXe$-WdRRkJybnTSlD(vH@)yT)Yk)X2S&$UH?-a>^ZndfPptDaZyS|z$} z>SEJ1QFG7reAJHiICgZM3UkqUp2UOa-Uur5l$@Fs{g&Uo>)*2qlbfk+m#&rnR+!m8 z=i;58(Vee*mlrb2YHW!4e1Vgtp}^|$+Xu6r`A+-jsoko(Rb=Av+-oH=I+obf)>+RL(py?M!Zz z)65{_lefy55B$2Au=DUm#|ICtS3Z1e?~==REBdYeTXSB)xl4XKFRQ;4Ca{BDR^Gm0 z0UzI#Cc_DCm7*^Mf0X;Www<`)uN`x|T>V@7tOE{7nM^(W)8%)wZa#nZn8ort5mE6O zzjDH*a*iJB_|9FYlAvt(vqxOMoTW$R^Jkvqoe4V+NLRLQ*kS1Tt>|CG^vqk)lDFs0 zJjgC8T4LTUvyXerEbU}w)yFQsQ;IeTO3i)hsbKh3VvTkDkDu*-KmK{aWW+UzL!pnu zWa{l7&t&ah#S6qn-Q2qO?y^;hll)D#&)sv%Q{e+&@?+Wlx~)eBwCuoJCJ1-$o+x*) z(7-46_MXRbGnQ>Vavm`stre*&suT9WXWh}JDS_XMIA6a$?p3(0ajohs%O})yLZH%4mC9e|Km6%;M(bg_E1#Wku`y{W~hDvp#R_#lFbI zsS|`>6=Z#Hx3Mo@Z+c^k{Kxl#6FylcA6lgRlWUkervY(!(ON8yH2)NZ1cFIJ9Q6F3)Kmk$Doq(Af4INynT=9--XLh z*OqE}mnsG(P0~H%_vU$Z?~dE|C(qN8^-wK4`?&3hSItW6*FW;tuYZ($cvbwt>~9(Q z>lSZ+{@qiX_4#^+@5|=8eO=Q!bN3Fj=6?}C+tXwI-kY0s>t#wsU96MG67@5oy_Ygh zH574_o_kR7_~W8_{;Ua^i~dE&M7@bD|Jmht?AWzie1#|8`hD2%WIMMyvpV{G{-?_q z&Q&g*r15x?d&VOcrD-Z^etztEmCKI3mFfDpS$QQ7X#Mkr<|y+hv89>I*S3Q5Wy&kvcq5EeX zc@**I^z__5D}$2{`lHmZmsWQsO?w==f0~D<;qE)uA}0=cAIoDp;+U3t(0W_{?(3#i_FUZaC2nN|u06YDa&)_0vb(1Klj%RbWS4r%6koVD zXU)8@;_FuH7M5yz7uT1Y^fZ}Os->wq@`y~TN@4B~oaJ)m{iSEtEqixGcbpcP;&pJ! zM%4|)6DN7v?KIsokL{!IEAEtCWqDG<1^f5)XF448i!&;F{`BRQz*C2(&b;>P zV7%eFH*58uPdvTldt9=m`js}x{|v9MreD$X-al1mf?E+wpf!u@{rwq|FLyBa2k=L& zj1`;sV7)-rH^I1<*W^mqENQ8?GCjw4`CvlT$N9_Gs?5IOX})pNu4N0hUB12c>xJ!e zyS*i5Zad*0bl5`uwO47b%ZDo}Kbb zBlceOo!_Qg%DHfcZ=q$#)U?irhHqGyM5cwGJjpJTyf^u_`|}uAvBJGg&o8UB%@SQ> z6}`K&=DpdY@XzYH`wVZnDjwz?xO|K1vwIPq|JEcc2=?!Ne{Ipc z((DX{4uO@^YW_0_&;PfLHGC2HTu`fiwjW*Bojj+#I;&@M^P!H9*YQ(fcMhxc6|L-F zRvo}~gms(}a*yxrjM7RMHBHNQTeITyEcM*{N2_hW z^D6Fa>HeAbFyrmQiCsI-8U4I*pz*}{$483;?=QHxer;^@xp|K)8yRvLouAu(zwkEl zN{HK(pY+L!N2I@&YO8_Rs@%^c{dgBUdLwp>ioB_ z+kQ6%6{%bbI_SpE$HY|i_s+`i-_~Vy<;}`_<1K2jWYMJUf8;->N3W}xbU*O2dc>`g z9XtC}rYYtNEen=Z^T|*A)Wc`^<VxGaJREyVgBoFJg1^f227jxJ5*CqUq~% zdv-40dG*J%-ws#8-J`wdhH!f*Z<%sBQ{qg*M!g+Vp6<)vRbcx%(8hB?)Q`<>S95QN zPLuWy-7?F($>K&!^C_Ms9+kG$$@g|}X~&iCoNsuqUo_)eR8CdiY`Mj%Yr@`j>mFKA ztbE5=@qrz+_}Gh0vFun^*Z*-Hptd2TRK`or8jWd5goqgtPM~48fNv~KT;(!PjBbdyuRh4 zn{NH>yJhjvQ+D#3XT0aUd&~^(q+d2Y6zFcvSC)G_BeVXwck+serJGI!+TAUb-LuBl zOU&Z+tL&oVN2bk+o69%X=(NhV3$x2Ay!PZA`eeCj?e2+NInJ-ME{<^(nX-1nl(idQ zbU)UWT$gkuwK?$Lh0W1B-YyE5=hJQMaVqAymisJ62AK!N0s37gE|+yv1z)9yZ@(n( z6Qan%6Jw#{_x1*p^D#?>l672NHE(L(yo&nml+Sv6>C$6MzkRgabvoKj>0W@Q@4d9L zC$(?tM1x}ad`-hXdH>Z)X}#K0_I=}t=g(wCWM&;)wCua+xy8{RMYk;!?+i29ac=1< z)i>4$eg;VH$g8lJSd~&xxh}3tBkxh(LsyX?fk4`Kys_;lBe^ra`c|WS^3E1+SI^q%P%Dwf4#z&MZmt-7w)$x#TWpEv!Qiz;hDc+JxY{{08jnR!pyT!Ny z-S3`IU%y^fE4rJt%W|V(=0dJZdT00wFFc>OXcm_BcbnsPzkHdybH;PM2)^b8a*JO( zh=5k1-2Cvo{oU7RyTzLS**-FobJwW|ebTqQ=jzECqi?g8ZOpZ(?pPz{KTk5*O*LF` z+eVdjmKG=fWd7s*D7vm?vhLMcF_oJSMa-DmKV|LCHcy$S!SX)eR^3Wlnf~ps)Ayjt z#j{>nF20$Yx72;c65-Q5$+q@UUDE?E7w1@YubA@f-|nef-t%Scnz~@;rmde7)3l_| zI8L%^;5=z^T9!R%|EBES-oYwd5$RP;x83}%s_Qns;EmgQEjPD*qmXgI#T#*Z-W_$C z?sUS9?eRI0kMsU!goxoP8bRqs>JtZ~waTs#nH% zQ_;1%*M3!&?0#P@qP$`A?8B4q9aTNBd;27lsS$dI_iQu!{$lT|?caRg#Z<~H-LX4= zW<^JXbLoGEjKb@)_9m7tJGvk)@~rKHc~2J?Z@L>9uigSIFNYmiclFc3fW>9S^UC_}ZL#z;Ppz$Ae??TwxF=?o-`&6UvR&?n#V2Hx@9O=M z%XL(y$i-Y!ckh*&12XH`Z62-6vJzXm?6&IBw;Q|E6pLa#S$Y}{$gDh`+;!)gjpMSo z$gJ~RaolgcESwi>{VbfK<;Pd#E>r0H(Y#Z4t9A6moXbn5=S!dD+}h zS*R^DT3s9db@?A*uPX&z`qQG8E?XU5ng3~9clJ-2>2Xun7d|{2bkCb(+18Yu`*Ixf zJU;t7aQdy{t2k%e9Qn<>I3n&~dDd?|g+i6whO!No?Cf1HQa_3=y|#Dxt4~pPBIB0a zOTDwLsQ;c!ldR}LuDeBij^EbpSh02G6VH>j9J)5jt9;kp%q(^n5sJ-Cop7dSHg~R$ zgqbwE4f8y!5amO^Hotnm>~Ox!cCWS|p^8(hn46An&y7FQcXj#7AKiZWf-iPWZCx## z^it=OgwUNkMkjY$3ruB~kbEC_^Hr7Xx`nHbtX*k0eZ}n=Gyg1!T$FDZlaQy_ev0u) zy4sefZAXej?##52)`?T!eCfI8a$T0-JFX%d-8J-fYPH_Z7N}U`EADV*>+u@_eUmAG% zt1Oqc_F28RU)?Uxd!)T0y-OvsTx-+RR6RGo$4$~be3nP~4EEns)x3S)Z+_*OJI<vNoQpyHm%;C;AA-Yv+&LxGJm$p zzFWC0YuCG-E3(S2E5xqZ6tzUh&eQX!`STTDkNPkE(RA;aJ+Dr;<-fC6;OYNqPa?(WHZ4|Qp*)IeWh zMsGgy;2Gwww?$i7E-jmJuki2f<~oAUcg2z^i>4=ZMRQqA?mK*KcYIq^?baJt;$G&?IibA8by8XHX5|Kl z1Mhb47wr4Wb3Lr8z0=0+R0ma-8rR}a)Z%!?()G)2ZIt~xYp3RPHULA2O^Ok(aT3sDEMHaIK zcg2&`PcJ;j&ph92`J=z`o*TC8>N{mDdvwjj6{W(46AYeLrrzK$-17OXPxeaN{cG*d zTw51wmANl<(e?L}HeHTy{nsw)>Ypeg9C!O@x&6(x_go{@Zp5Dss?1$Hx$)L+TYuLL z&G8p?7GGAYm5TJ!*Ii;R6tCy@$n1jw`yFOw^_8ZVB`me)#VlL&reI6>qN9n+U*0qS zaAsoWw*KU5l_X=CPg``9c9ts90R7#hucip)C(pOpG z!&SLYyFJV8=9ir;QA_<)cG6l;q@Xf*&NtI3yL@}@@&C?S&h*k;Q_yTO``vG!_?-ox zROL&=N7bGDlJYxrv%9>jNLbp!0d5N6ZQcmiu6umy)1RL;d!Qp;dp_;)7C!Y>>PygZ z<`1hmGo^3uR{1$q`7>ARPlxk9&)3^cxjj3y?VhGs>V%zIPJJRha(jPWV2#pP)S$L~ z_l|86+jq=T+!_BpFZ@}|gO7Jo9{ip)?R4<|jc(rBw^x@WPm4%RVfi&jYVX7I{C8iU zEz@QHQ+*`GrZ3{d>XWkmlB*~ENPTPSn{=z-yI_RQd>f-jVMvEmmwVpIZ$Q_wr`E6-?;NGTt5sJHa^l=tHbK4}a ze%?;mSI_1?JR2UgMcgcGUyjaE=gJNv_W(vqwVBBaUWI@2EzitKY4qlK9}t~!^45~4 z8*CX@7PXgTtbAmWXgCTCh@NC~`2th$s^)pdJrAy(G~ama zR`ithrQEk)Pu;P1_l_Mq0vM)cM&4k&JgGR?Z2PLMpW?PHugMoI(|K0@S+tfpU7@Jr z`&wy#j#rbjw?)NVJjyaXIx@vrS?$nmZ#LexgXbBZ_f6&auy4(;-7h!XKCXLd;gptn zMynbgY|OnK{!w{rxXzyw&)TlLW_*2{q`iD+f9QVi=>ff3cPz>RF9^?>_%2?8u_M%jgL6yc;&(mOZqcG3DjnV7C&hrGLcFSF?V- zQr_p8c_~fE(6;EnlV^*fPcIQ?)JqF2Ff>z9KKtC>e7()*sH*(duWLQmg`GR(mYr#{ z(s|Rd(4Rl;l8o-uUOcNeb7^#3X4U4?x@V$Vd)$fzdvdg7g;|~}Zu&QOWzmUs8Hj$KxsKl7hsd){Ho7j{!7oy^Laq*B?v*tq8y zgG%G^d*4=tfF~5#10UQMjC$c|bT@M8@!2-2ot+Usy>8D)nRqVL@XPtEwac=m)#qQ) zFIAsqxo+_++iBNcg;aJq+Uz)HeEI7du4&wr>m*zE1bGE|Z*bLZmGwNH_&Qj%G%eH1 zPdKP+x4CZV?CAJ6EHDLmn${ZC8eP*qST*^k$uU7j z1`nAhshg)BeBDs7F0HHGOaIru-LrLKU6)P!&(QXtK_xFDHgjW!__SjG3iX{CciwCd z3(?%ota{M$?saCluZ#cgURv9fezW@9&yuSfw71r52+_DZ=lR^l+t(Jo&9yqPd5aN8 z!~>6zxAy&BUG2W!(R~&xFMFzN+y4At{(Gyx$w#D8pH5rzVd;Z?R~ENe8Lgi#>9pj* zbCts5BKL(WCfyF+x>M||m1o(s_7s#hiDzKf&-w%Z8I+dy zuT{DH`ac8vpPRP5cdm(Vh`qJ%bcc+mbb{;}KF5QPc1hN_W|pqc{IzG=cCql4<}=H6 z=Pdr-uF&pU;Iuuac|z^#>5F!W%(^JU$NB2q?%AXXlHa#t$yHkL*t(wn_ccD?Kp79nSToNiF3Y1FM5?%xhs1xUbcItKV{lEw_$LVz_ZrS-!L`ao(R$S@Xz? z_u>U&UiH`W{8};5W_N~=OK()jWXtp*zi^4;k7MRt-d@Ic=ds0OlPT3<-{m)T-MG-Y zW#iJgB_~U6b(Z|r=?ZZZw>SHE-QvsnAMeyVb*DwAX%=p?74tRe;s4sRiJ|K6ogH?2 zE7tjSO*Px5dC>M;;~%GOx0qjAxvsytXs65XoJ;mIK5ux=ylI6kgXCA!^A}y!)xJx0 z^&NB-36dC~VJ6Vf6Qk+!Ux+)yFb@o3TQDo+vh+Fo-6fwMb@1`q?EKFl_a)}6#^tU% zrPDL}3@m!xKUSx$_>0;|S@>?9O3!hXPn+Z)rmNJ2F!G87I>=r>tZR4cO_qMiwsR?h zx0Fs=yWO04Kp~+#_I}6ls~3Rx@|a-1go3F09KpAjc1l<8 z?oRBk?p!22^*=+|)4J4i{IbXV_;;?%*=qe;BxTdyUEAF(Q`^EE{8t`aIjg95;#SU8 zr6NnW-z%BLJ8x2sN$S4KXOH~qy?uM8%bD2>8jK7w>3a52I$w5clvE3=%`{tR``B-- zj^C*ZZyqG@S?4|9TC87N_DQ9`)Y?;~EhJe{HD-c0^NmUDc2_pMGT#t=n#H_a@StAJ ziEB=xpRX(LO?i2G|JRjQWkOX`9&Xxp`t&0D|&$qBrhCx8t^M(fd ziUStQ{xf8~l27@qe|z1&v)l8hKHGMtD%s-rR&&nS+m7yn-cvP~y;*zt{D8dxrMw3(C3=Uo(2Wvoebd{AoJT2%F|eZKI$8!yDZhYK8QN_7@)54j=n#DKSP z4wJjG+}5dVt5-zdakUY@9_TML#ZxGar^{1?iJw_zPW7y$_@>iGk0yR5QCZY?t--;hS>T+~M+* z_ONYN7m1aLl?NS{+mv#cEsiD4_}}&g7BPbJ_FNa69xixf;&GeRQl8INt)3wI<7dO0 z3Yp)*X|p0{&dQW?OVjh-sIu`@-Ln3SExY75mzPyfoVO>?RdnKt0W6R}g%Su8DwtT0 zZ0UV_cT&x%i9cJN{wzpeR(yTFSNLYfjL+_d#d3G=tBE|{VEJ5RS$5*`j^xaV=g<6S zP&m9jan2WcuafBj+?t9VXPg_inIDWeSL9*&>sRRlo?oC9YC{C$zwb_Ct)t1xW#)70 z%U(V`Dj*|QS^UrT<@ISZHZaN=O<=W*6nU3+GWq%q#xDzaW`R6hvT;w4Nzr2El?THl z6n=MI`tZi%R{Je=$)=0EN1CtaJO0?l{y6HM^p;Imj=nv&QfbY(6xD9cbKyF-3ny-0 z_ioO`gq^1@#^$^m}G$6g-JDwTo30lKYjl6U@y=`CBE+<}k%Tra= zy?TcCG@*SrJ{)0UR9AVt*Y4fDd#`xebJA{EPfsb0l$`25v#0mS<7-pfi{~wuxEmO= zm?f{roo$zI-DTg+Oy1RryR;_@AG5jJx1c_KsdiUI(_mtwg2yUGh6jCrH8#W?{-i3<+2j9I&it)) zy%mem44*^hpPX~`x4dP)Y`1me^3%#c;=_BFl=VuV~-T7hPjId+2XP>S6aQ2gcn}6K$`yZBGGkI+tYvz4p z5tH?P?Kj=egp#F;ettdp7`$QelvZ>^&-Z{st0I>aG%)u}D!jh6r0Q;O@6;{gfwx>g z#n=eBZ1M`-V87>vCA&?Z2J`eqyXJ;PmwcSHI>K#Xp23mLyg!wBD&Jo3)3Tg)?eQ_S zTd{Vgz3-ybW8ayl{`(%sf4NIX-15fa$|Vtx+$tp=hPrv$9cq^D{plvnC*8lR_OEu) zv0A&>x=Y%*HY#eN9fmW%7ahnyq0IhewUj}x$=mufTeG)BD*e6oO!DXLl`|QxiOP1ihcM`(qzp#q0U! zx>?WJb-mh>Ywk1Kcl)$=w&#m=I=p_ax%i+!L_=ZTe+KicX1~jC)h~SKF8IDwwdT}$ zIj1j%6U??*H~$Ju*m*8^nt5tkNYd)>9WwlD&30A)e$swuS4qHaj%yFRq;uA>IWtZ& z{+xc_gz-#ZY})!|5w~x@V$xQ3PPmvmbxD#skAuRu?~g_2KjMG$f+_mujgDs-kEcHQ z9Pw6X!CQuTbH0CFbg-DOYx6Rf$ysI>&rGuMRcenos1t7UfUhdt*=%+~sWpp$%e3v? zDupLy*17$8=y&ajKmmuP2j z^iEkOc8lp#@5mKXOK_g8IIo1T;-%G$lA-B-LmOUV2_v&C^AdC<*Ss;;G0`=+O} zF8xz*%gT06!LGacD&9L9iuh&E8NLkty8g{=51nhWhAf*8${seK^CMA`NO&;FSPLCYU6q)f)pWMSAwY-b<=V zPFGlY@R;K(?fAp<D^} zcamIw%%bNWEcw7GVVb5I-Tj*2rLLx1s~;98Kb%qOy}I$aANO&QTw#sa+m&`{p05wB zJYG}WHLI^vcT;A-5+Ui+d-}g#JSo$=KkJQ_pEdL3YYoPE>+{wf;$GdkjPuaXzG!)$ zE5Y6>pCr{LKAG?}U1jo*Yx5R9yc_L5>7Mm&_3$0_TBboV(;q)MG`a0bLFKb)uMf}K zy7lkYIooo-bx*s^wOG4dxrv#{&AqPTeHX(i_l&!-60299NGNdpDryqGJ>cBu!^I}W zcI6(M1kO&LJo(D!sHp!8?e9#ytvU5MgkvjP7HA!Gn!w1jqLWw`+~(O_`WwzF|*4@6$8+il;Z7I-9IST^T{w~3JYVBv@6qC8h4)2y8DjcFt|+Hxyk9qE=ba;7hYMd$J|D+wc0X|M zHm7OdryD9-cOBQ(P`}H76jc=Fb?1WQYs zw27tKPq%*(`}V|fd;T=l+#O$z6?Wa}K0J->+TC@gQ?~Ee%Uu(@?zv66d-OotHKvs<8Qq(ODh}^zm67v&zO6c_+v`6=SKaHt zX_gY~E}f5O8Lggl;Ai*T!xoSGqZm#s-?GUjQ~JbPsq~~t9x-1Jyp5Xlqd2VHN2+C7 zjxJBO-rrY#$Bs$o75BMYtaxW4>v!MV*Dc#U+MVm*Cr+;WrCrYznU11D;|6Zj_ zW8SN>J|!;A2@{r-9C+K6d-dtnd-u2AIcs<4?dKHTp0CI1rfxNF)qh)}z1HiWao$87 zpDwSBxzB$zSOz!G5sdlDUg+Wy*bXKVP3U zJO1+GOYatJjg);Z_VJ{h8`JJ}Zx`Rt*7)^ovj)?Z>)(y;o-ar%nU;Rid1d z*2D?9T;1X={rh|4SMQRUT#oxsmlv(-G3WQ0eB)!^7shkPSH!s&d_G=YuzAN}4;97P zuc|MyEv{xPW_@}l^>*=_snZL;TG-6G)_!<(_0rekzfv#z^Ub^1yUBIq(=eXMhC7AZ zGcBI?%rorTa!-8g*67Zyu_3o^EjgJly>#cqC1noJpWZPLF*teh^`!>OO4+9qmrR^_ z7krb!D_>vUw^syg4DOtj(f>X%rZs=X+V1}h+;<(tXQt|ue_RuET4#blV3?&(O7r{~ z@)LJF=e^vuXP@A0G(~_R%fd>(e8= zwU$(#C_jJdh^9iqSDBvc_6}kydv{H{srzK-%m@Cvr7gAWxuRG9KD~vrw6xHOdBP@- z2<9KN)<#v$n=89-`m*@w6K6$l?b@|HWGV-b-HcS_*KZv}p6uQ^?XJS4N9m1xVP-|4 zbAG}M;Yj4tMxWO-_t-ORV4Th0cZfBUQT-ICAlrdNvHH{H7H)oUgVRj+bBu|$5HI@?Jzb)PSF+|)>K05XDquswn%6z(W*{+4$J~^dXjU%A! z*Y~$Evu>Zc_TK8KVk1Y`1kGDZzOZ}|6%9R6xb4}rrS+oMrZ0(hTPJr(Q@Q9s!nCP# zl0PIy`>x8E;J#pXLXEYa|@Tf46_QqEoE(}k-jrD=;#e|2E(I4AD%7P6}CIIT1mW1(%GYVwYnSg2er*B z7Vv6pIl6oIE^qDA@k;87Dm!K-eim0}VN>4lr0lH6ESd8v9r`8*0vbH`_ApPJ$5**# zmIm|kO}j27UG|%}zII7>_ToaBYpkk#k|9PZ8zg>;vk2c?74=%+*3m~CYm;Z);&sy3 zlL$P`aeUSqW}zYnhtu=??VfFTv4HQk(?`Gg$!zlr3#RYCC1&P8T-#ISkz#3 z+ARJ@)JC(1+kdCXJnyNzdUD>fCEJ>^S3YjKrKvX0jcekur87HUFvv{yxVURNPY;)j znfqP4_Dc=sCbsT={a!mRe=V%oXnLePaPNws+f$6DS}He5uTQ>l?eG4cH%G56IHQ-? z`_~ zg0C;bzU|!?=DLUPdG-4{Acq94V&Q}`D%j^^yPDQNwUB8KK z9vl1pTWnQ-?|lBNb#3*d?&`ZNw~s$RUaGprY?GVr0uGnzN~6bT63Upj_sBir377X5 z^hh*n$=5Il`td+`5?gJB{Zw&o*}CnIWYxYMj;v1EAN@D<(Il4%`cs89Pct~D^!XXF zS%pjce_A5Q>1948Vnt1Xe@y!Ii9QQ>@8(66o=v(}9l5wKy1U}fLu-y}mVsv5&r}?| zy`z3_SK}7TX(|10XC>-!p4i*7;+WN(kJmOY-#+Wkf*oBR-3ul%uZ%raWpF;AHcNq1 zfpJoG0K50nd!7%IOAbX>u1o7P=4=X?$*gkXiQVN3t;({W!*&1orWdb&v1{I%yyhG4 zra7{B-F{-uuMx`HCeGiVlPvps^1OT5l}p+xmULyDla=+_G~bEeD@WjTp^-C7zRo6r z6&>LCl=WpOF_U_`uV3WlGRdd^8GPFw8QWwnd>rv4+?}yM-dIBN#Cfk9vyVo(-hF$q z^h(YH@uXLmqEp=_GWI5?D9)B?m9R8D%&|nZq4%W!9)pTsmkzRA=Q*7(GHKJwGLEGi z7Nkt>J5avpVeAKxws^0;)X>bevU!D}%x zOA@=AR?ZPV=J|^;vi`=Uzx{9JvoCM^S(kQx>+$^(=ggj4etRAHQlxK^m9mi=V;Qre zqs7TDPa1s|@Otl+iq0;dx$etzF5_+5JMQ*hV4m!MH9z;h%cYXvVR{KdzQz+9pLw{2 zRI|EDem$Ggnk3QS5$DOgRFy#_cpGd4?W|b?m*&M|pLTd$oO|9ia8jmZq{Ql`HGCY( zECEb`u67nnCfHBw`7K_YD|yS-e=CDgSCy;sv3DJ3I-B0GIX!uh^6gopNUyNRiesh< z#*GKmEm(d(_!q)(3N-$z0lHa(rSbZ$2B9v^5HSS}m3a)ZFBmnJTNxRK2d%LdZ1x48 zG|JRfW9VtJT1MlN$8oL|pkc-tmKGumf&QQFC)W0EkrD1=RiF0A;J0+*<1&jsFBrFg z?j#0dzg{W#kX~df>P!C}xP`~nGjxN87{-G?^%Tt&1 zcdF>g5HX(><=9T16@TJ z@75Sy#<@dxbzRu}%GL2%uM_lV)y5_`@|@phP?v8Y*z;tbkzow$-n&OP9Nl~5BJZjH z47-c=8$D<5d#uiW=gPFG)~6j4B4h7Fce2T!ny~KuIxQ{NQ)cdNQcE&Jp3mC<_4&fP z{~1zV2H$%n{7SI$eBr7)4j!Mo-55`BCA8E7 z`?SMq&Alf3&$=fqEPE#^B>dU)vq|0)THEeCW-nZqB^w{qbSL`oia2)$7LH40T#T;_ z__X-9#XRl5rFPm)(cbczVUPOnJ$zP$AumtvJ@dG8*`mq4U$&h-|L6OC=XD>&`jE_ZU+spa0 z=9h_0m?AerR!h3_*|vF>ZnbsF9(DVOeb+2rd2q!hA+F;p8_y+g&;K4}c>H&$^I`L-{Y0Xwrp1Gor1F} z)oGtvH;XYOq_Dqy;VBc|?_65QlBzf_;^N#Ctv&~xowsg)rh0Q`?Ka!L#=n~P$*r}2 zrWY_N&0Qz6C*kX@na8E_>OIePobM<%505jw=KE&TiIe3zna_mE7L;+ZRWn}NJUiy<>;Ug?SM_^8F^N66 zV?Sd-kASqLjBv2?`k1Y6rbjI)eD!%3%iR@QCQW6&@Q!U!&@EdkjZM%G*zT3WL-^Aj-yY6QPa(g~YGCdRR=Ei2g z_?T(_lKXM}Kirpmn7i0@>8q-(CwI45G;3?lVC{=xV(RGko1yaUY^CkJ#kCbOad9zs z*y{~jHf?_TvG=(8ItIxvqN;uCS7v_u?3lPBF521r*NKNSC&q7Akjwn-_}lr$o3!ms zhpye?b@J3v+Hgfx%IfG|eZllOJcbr0By2ekeT<3S-)TDKN3zkfz9vIk93XJBtkSo9w*jacvdbc)8s>-UaWnc*5SqXIXsk82?7o zSqi5wzn%B#->q9FdY`>Eu4?0+Kg}8UotrF@_i4RKnV|D{n8Zs(V(fA2FoT9@~C z^@RSoYf4vC_w|Qf5&9L%se0(nj)_;28MYOY~1O=49kwNv^qcZ+gFx5t(p(;o3UT{7trdM{FR=uJT5i{Ihu^X#@R*!C-K z=6?pxyFF1d;oYfL9f!U3-s|{?==09u+bQ$w`uyA3QghdQ7rvckKH+TPd@GOVshP#s z3)$5_F4=x{t9JHJ{k31YPpnTlS>5q0b>ilerx9q&~ zIDOWyXBp*gdU76ST2lqrcpTVnY5lw8eOzvMZfUODCFzdb{C5w#9{(+JH`Y4&?*se% zW9x3do^U(LojGHc&r>#@O~)0>zN=WsFZIs6;kzv9y7THu^Y||a=_yWJr!rZVXW@b8 zcNF~3EwFkLpZMGSo7&{vr$7Dq&!FdTY;o+(`(y9^T76q{ew+U{`HhwBZ}z3nefo{R zC#92^K6#gm!ECD@7PyK z8~G}?Yo+Gr#on`_erMj%0gcOpPADJI}c>m)H8>NZfYK!w#H)irqJ-p_$@?y6z@tm3^Oq>h?j;jn` z|2k7HbY5=l3YE_cDiiZ!j2|!aD=M6)sc?O3h3c#b)94>dXS7Yd^zh0F_cDb~bz2xW zKCILYKfLS1e6O}o8I#QKym`3oXBWp$j{~wrhSz6JcfMru`>vF2SVVns;`6_IZ4Q~w z-P!(fXWu#d-7$BhrheV~`d;+CJ4eeERiArC#&$k=+IaG;uiSc@DBW|jh1@3IIkoA$ z#@&6sJ8vzYlOW{JZ28_nio>Ulal+x_vsbjv>3iTl-J50oU^5N{lT$$E{9k-t?PrFsbf2Hd8{HUf`lcPD0dKX_Y z%{4pi{o#67&YLeg6F=$ZGVafmY(4ifDXE}B(x!KBYw*W?jSDly!kLaK<>@T%G-oV0 zRFY8q%rKzKk5O8B;;cuh*Gw&QT&L{neSEW(OCj^dF$RUk?H0!z>|2eV2k+apwe8lc zZ_lzb>aQMES#x5(gCA?I*2e7o*TEc@CROc!?Y!rs?v1PK{+KR^y79BXmv{CW&vK>p z=XPo_s=D8^H@j4~Rrh`Cmg!e(>=d?z_Wg)G_R&@4sN|yf2`eXPr>ijcams|xHNAV< zS7dFW;WUBO($lRc=-*}dc8twd>*%%3tKxilu2)Tc^Xbs-MV0Ak8RunIsy82a`9iZg zV;+B z6lG~`yX1M8!RlA>#IptO*Jr&im%aRI``co%nw`Cer~CBC$UI3237@rXadn~S(Wig! z9{E_mdQ#-fo0jKU=JaK19?gAX?&n``f8@%BYmYB&&A$2Q(lypuH{bp{r;>kn8uOfO z{&`c&4^Kb4>W{m4lJ3O#yIz-F{2nMxE-Y1-X;|{@ZOqZPPp|$x>|a}Kdgcv-k&FL!oj+4?HyhjDRy{1Hd9OPSx}>LsOJ zd`{J~hbZ3{*(a>JcI%5J{~7wzF3)|!zU*nLM&0fW_QDa{z8BvcFf2;fH2&c~q z^L_GIdfz|e`%4*8uP=$u{8lE#->LI<%S**ixobt&-*QW|gQl&XGSQ>^RtrZ-xJ_QJ zEpqc&>*NZs&L1H{S+{zoIi2(Vy?ry6h{I*W9tKC|yuzM_dM<`He}W&LmAVzWb+g*N zi1m**XEMxebYs_5Ea8xDaJ$@O{BqW@k1ht0cZ8Q`ibo~ij@_eeKkJD{xWtn$h1Z{2 zJSmI_k7|8;N8oU2d7+6xkJ}`#Gb`+GvV8mz{OoF}m(NSGKj=?9*YDGPQHL<&6A`3eQJvnI+nseR{5)ZxcO>%9@Z!@OR*ceyQp+|-k?*;Q-rOgLG(^1iQ%?k=@S4{sc+4VirK@mAl=N4#G5 z{$*b-HMw4N=tAYC6K7sYBr9&7;GV_sD(8!=+T)PE%C)>pc$aMbxp|r=SG$nNK`oxy z9@0Nf{?Xzr=~cV+K5Tc>+4pbXzI`yw+Rf+~<7DaCD%w+I9y~}fx~_I>?(g{SXZv=U zFJ5|Z>Yj5me&0OrrF_+tWBsge)~}cB$=_>r=8*H(oM#PIvSNzaYhFLQb*tL*!N$1@ z+LC7~SunO0UQw*8`WR*-nwa@5TKeXeo28u3u3Wp4GjaL}2JO7ZD^>gB?1E$FuKjy; z?T0;0<$In@%i#q$vdgjlX9k6Ax?Vh0MDNaXLrOvmIWlg*F`qt4!Mp3V} ze^B077V$3DG5N|Ix#ia;-Hy4sHkWnnww1NK8(26N?{&{!(jB!K9iKeota@gI}?+ zvFC6xytDCK@UmdpTHbwg_2%VBF-`Z^HkjcNBH;LVp^o8AzpU+@C3CG#asO1fl)B9- zZNapL)7l&MILTY@O8C?8XGy_*=a_dp*T1s5vMxVwX@>Xv=t5(`~2w=vbGw`3qBTJEIFI}Cd^9fZR6D^m3b;^KFhq4mASY} zUmuSv45)F;So|^dPuVrjl%yT?vy5&|p3`>FLT+&$yJ_c&tngct7r!!}Zl2f7b@|jK zQMqQdX|aC4(zY4jJ#T(<s~Fb6)rAkUB_bEI`bn>NEJX{;76S+aTi{@q=d9GnkK zHd>sL@YM0(i3NO%?)zU--LP?6u5Ihndov5GzfH8R>1#_`pzmZT##it6C)96yxmL1v zp@HGCi;8@8A(p559m>tzf4g5>03N}?e*m?f>XQ7tHHn9B2cb+jXkL#xl`=RfBBXZX57gK4iwpo6rX%!j}C z_FPZ8P=9=noAZgM{akw{Uimm{-s?kElU_@;w$4d<{-)@suijIKo4|a`B<38_JiJ*BaP+?Mz;o`LArF?UV2Ka(|taKh0#vY_;!ExrTaQ z1LOIJK9}B`?5>p#+B~oN!uQ#1PqsM;D8FN$$yQ{qUv+k;{@(h7Rw0_!xm$Lv{kru( z1OH3mmv$1r-8$8lmup6JY74olM5?nq?Y21ZczJx*v+UsCPWnGw|1)eZ+du!?`7L<| zZf{S!Q+lrWZDeV|v)#`O*1e3MSDDS**8bL8ewJe?m+8xt`R$Z)BV--;aQ5wL@6{{TM=V|Ybj!5!3ewxs zS)*kSq{jSCYcPDB@uTXUH+S@I)9j9=+kU&WFzgF|KTD_d`2>Esy%uLfFMnC7pJ=r7 zY>$K4-OYEFUu?x}#fIQ?22DPm?Af$5Qxi;qd?6A1;^XG?<<^!uIyxvv1zJ1-A zwdWQ+dv?R+TG52u$J4cZP8HAjvy(aFSmB(Is(*_YonI7noL?FgJ4*ZOzzQvd1|{wrLc+a6n8$f$fySAtzZq1QwATwT8Z+SClI zB~|flrQ&T@qe6FdnNL-lW~^YB$nrM9&G16F#qIJrbNmmvEJ>v}Lqqb&bAu&*h%Le(n6HXIU;ZE1mk!u;=dn_j+X?`z+Q*ez~jV zYnNS-<5OOk85lo%zGY&Tx-I{Txb@bOuWzUzhm8LUXT+*L&FJN2J0Un-)zqXvpT`#`HrPZB3^RY|&YK?Pw>9_qXS-WbF{=Vap z()>2u@Mn3@BgfqZlBeF*Fi$>K9Fu;;diLt|Qm@s%MW&?eo@Vly(>lPKmD#r8WuV55 znQq6eUCZTp^`b6aKC*e~*|)1zr&P>3$$Vz#Ji|{-ZngZ%P1)54&&zFJnJw_6t@6D| zu!+!`U(??$F^|_eww!h2PRHQuPbE(rHRZk`qMv*!V}1O^t+Q{(s(tz%eJ$Q&=fAu8 zTUWF$`D`flOn0#|vjoG(M*mCs>)rn-U#jrCxaiVX+o&gZ56d`CopOfhxE>>;i~DjP zq3X2xn`4ikd{*&R^qrY;^ufgJT(*TO(*z^3gnDI@?oIF5e2z_GP704)%fpIwdiRga zI#pvhGdOs6Xx~5WP$uV3ho7AM#Q&{AraIuk^nilx!A*<0w2cjx-nwm`YhB#)xaaD7 z{+sSAUf;^?d6(Sv?3qRE@eivFSpIE&rR;urt2D2*kCn?W(>ePTe_Jp1dXvIrWW-&> z`SQ5r%TS48af#1z_WoVwQxCcHysK|@^R03{-u6X%yvvuaV_j6XJs6RW%%p!b6Do>1ET4uAR zo7REV%%IFMX)l{MH~0F^c^Xn@glzW|$9nDb^vSxHC%V+I_n_q~>xp6Fhi}!kUhjIc z>w@pY%V$?RX7b+YS+(h_^#Pu67Qu-V57@qVl6d00*`mEcw-3!?UAOX)*shk7tV^zK zJf3fTre>m%Sb~q%nMnUrMurp5`37vgU^3ffZ|TMLrCV#`eC;5AI7q`tjWzyxU3Ru6!}i?P2ThDhswDfty9f%<@F2}TRzvZn<{2(^K)^j z!Dod{GT()!e0iDgBCKFv(C>@jRG`~iu|F=DoPK@Q zq&__+v+GyOw0vf-$Yr4cH(7U?)dlw%xrX=qTwZ>~#?(6FZ8qP+vTu_k_iPeyNQr&r zd58a8^<(WHfeAa01V8HXoS))x?uI&-Q30Fh9|pDEwqmvN|AhaV-MZ}Vx;1)fL*-{{ zfDzPHJw^GUqK%k_zAI?Kcj7adsheC`2(a-qr>t_%r*;igO4Y?FRj z$JEYEpO}37yR%H)R6p=hc3j~3*F{uit8Mwu5Ox3S+5Ze*gafW1op21U*k->imkXc% z{Pfeud3T>nd^xIo$LAx*y-X>?i{3))4}+Itb^(Il>4<4OJ92bci?+vZ1Iy#i^QyWS zK!;YaT>D-wc3AAYu#36&zqhCUoSq|R-7`nNI4Ckpe43JDYI$LvibTDZ)9!scR{tZp zAFwRU``(R9ljbbVD&IftS&G%Vg^Y6!*Op4onKot38uQ6l=2e=8cq<*csMDvEBsoF2 z$*sWS+sQw#qx~=E=INLkTE`q+ar4-vDOzR;M(g-%p7uJXF3J+$mRp*ezfbh;xv#9- zdbU9hu<|zvJsYca?quxC*RS09)~|HT(|veFU%7#aCDWRf;j09@DEn=_qT_FcQx^-& zpYvJbnDF0w?6MZCC%lN7ax3wQ(l*@;(fM^>Pli71hQO)$JHlqVVv*SwbWHSu`Fu$mHhS0-KS5_Zg~I9U|Lws zKEoYPz8+wQ`O6dl@>W+@~|r{xd|%7#nGSd%}D+aM9EoF6)c-ezS?aS*fAqox=?3+x}J(*p0ziFLr%##PRZ{pRxEm;VWIFq zJ~_JF>WlHw4H;23?nQGi9#^mtC_Fun&!Dz*jg^Mq!D?x#zOAxPH+I>|dvD2UQr+&! z+*2j=q;4wfyPd1!*JRhOydTqX!-#X8?6-**dgk$_2l~CyJH5SX+tSK%(X00smfN0* z`1EXATDnikVd05E^?9%E-?GpDcV++Yg4p?)zny>1t~F1$So2CVw)N(+dkWX${_4*U zzY_IT_;hr0(KFY$-OlM2Pdz?0q@w3vWOH>QZ0wx(ecs}>I<=G^# zo!55lTbfyJdUf5xO5Q6sKdbenh1Yy4I`HID9@?Txu0+4ay~IVJmXtm zb6#O%7MuPWlc;{8n?oOS<0 zof#KudFQaryggr^e2%;lz_*uQ@fPxkEHIrq_jhOm^WvrqqLC|B=4H0Rg372i)* z{hInZPU)@ZnKvnc=NUIou(Y2Wu&6;NHtz1-yMI@`dRDov!mebJSe;eP@p)Q>YqIQb zao1hnE)=(FYUGomcZ@6re$~QX-iAQ) z+dReIW$yOIf13I3wiREf)tL47zQ1?wnd6p42TEiazRE`}hFrH?Du?e}zLh5Pg7dfU=J|rv=h3n?XEUx%mHd3Tc;Ut?TmCax zN6hr{cGgu>-TpeoLAPw#auqbymCtt+<_mMUGHw(FnOzx3eTN7gA9 z-abg1XT3xB$#zEFg$WP0CqGY!bdzS`+jr->deGWEXY)R<36cK5Txe;Kiho+h6RLi$W~&iFepJelRz zdu2yTLcqgKb}zr!P2ouu33O-z$Cluoa4^If}ViV1PhTLZ=X%#OzV@BlPG*?iGzLN@hC3_jpbHGGFDS<3*0ofFa-L0q*mO#WS$bg=b$I^ ztIR13fvz^k9;r@P%yDCCm~xYw5#zTLe_k+73BIQ(WK!-HQZpsVK$@MMeJ{WCu@$kB z&b_BRjy;@YWb5YmX9eRFQ16dK?3?*->;BiX|1-Q$TZnN*#OAz9rY#>%?-68s;E&aBH zz4;7|V@3Xw66=_7oS5#d>-6b}ht9fpx<{J%pL&FsUl$csdMd5Fm^a8|Rq@&QU!O0$ z`_HhcWaax(&aWJMp6|Gtr=U`KbTPvd7QvOQJI|ke`E|`&_K<$>59bzrxV74AyP(^r zC6|t+u%A(wyN2VK6;JhbOTN`B9MTQ$$GWAfF4flNeezX(o^Pnoi49x4l{;p%rLa7h zI7i5KQ@z#6z_Km#lh;MOSgCor%RjDr{qw)ddACo@J|zA$_s`A+vjkEibd-EK5u8=J6$d9&&AI+s-AE$6_VI_Mk9KOfu z?Av@}XUAVt-`n;nH|(GH4n{%0>wIwrRc~{i)QMhNHS@Rgg*}w?oFmV!%R0M4^>^0v zV?P}QeS>MUs<1q!*`qpH%^vG04n_$s?@zWkM=zsf-?qx3kolBcLj>~AMHy(KTGR%Ja*ZEtImi}G4 zqIQ+ar^mD3>hBf*y>Rmc+f_TS9zV0L3##!EFnOLUb@TGS3p%|8EjYp>t6>dv=YrB9^oI6qgVc+-}huXi+0{&6Y#)vc*p|4hI3tMy6v zrj)%$ij7X(1g~DPOTA$^J$cWE`gRlP`@FYeUKMUWTU%^my;z)IMOxIWRFisVV;%Dwxkd4$t{|B6qEF;}&1FqGq_0rlqrvPJqE{?7g_?0NU;&${~Q z>NDpgmz6&*ubW#PmVR6PH~)=2hrh)epZoNi{g{!h#Xsi@L8^<>kGM{E`f#W4`I}>x zJgo{+jXh-k7Ob#q2)7TL^ed5dkC5oBTbw>Cd78B+_a5#mDC=p+y7Oy`(a(xYCO5uW zByUXlx$(x+UqOOw?ceO*b{no-nJqRoEXR;V(L!DM^7@C-R?lX#x4kp@?Y-M{=N0j@ zlU_>R&}8j8wqKK_VE2#Ld&2A%u5d3GT9kP$Y>8R<0U6;p<%W+I`}+OWZ+#VaSNDO0 zaA$-Eo7v;C;>-QZMHnxgUmp3N;n1P0y6YG3m~>7uPkO$Q4=eB1IqTx{3MW|}^~_Do zP5sF1za^Vv-}#bnzgf(UCNw$C-{U47Q>w!Da$fPZohwV%21TD(_w>s8xOa*j&oXc9 z;&-@t;#H>NHB*cH)IIHid-~o5Zu7iU#`n07J6(OjpB2o@KHPGfC;w4!=VjF^)2w#~ zKVeTj`1iwU(dYZ@mINJL9u-+JJ^r%d_HvK6>!LJku16}}<~BRLrQyz>B?84=&xPZz z2|e;|xtf2i((L_&7>o1+3MtRk8RpbxPOCb%GUd|Nc}uJFE}Q-23Em`bx14?Q`6`C1 zAC_FVPrSZ%n&-ZAIV!~h$=l1GJeM{0y)?~okNR51oYN-S!j&hLdw)*gF?ybPtm4t; zw_D#PT{-HqST@`QhmN!{mPgyC`>eBt@rt$4y-|`2Gp>7FPEwb*$yR%Ke)p{0cPmBD?sl0KHb3ud z|2?NoY%*_;`8yo}9)h#{!{NC2Y{o6mT@80qvZ_PXl zk-Hujmh8+d`gBe}h9_l%|Fs=A-#wpq?;ht8ebHT0I|S?k{5;Mt^R(|=@o<`lnrFhq z$5S~{ODwe9oj6`(Ew-)_)F`f+x5(tIefWQd7BB8zGhe%lkM_;DC8=WFRda)#^+VY= zmaoUNRxgdp_+~Hg$L3mCwvM@1|I_XBR*LLCCugh>miVb}r{wvi1=Fq0EiWw;J$i0& zrOAi67f-6ZIn#dC(^8h*E9KVGKi6MZn|{4~ZzXGbX2c1@%e-^0?Ym}u#`6;BR6FSa#m>YFF?cYU#r$er)~QNO!nHM31sOjO8sihHuB?vgdFA$hJA>($;IkW06#=rmL`etdiz5an47x(y? z+~>dZa(?pXn)mkK_obQroVcpwc<#>E=d!GY;t%}VbjE+W?9<)O^DY^kkd_Z+wtv_4 z{8icRxod*XoT@uBNz$cu`vgY2=L}(fzVC7tOBHHFF?Jd=M;s$613&PXTzk<4AwGQO=>^6_4jpSby{%$K|K_O}{6 zyPCMY%XMaop4WuMt;+1{>$cj22e@XuSe6uLyG*%h_Wr%se}xpCL_Z;N0ar+%D?`qY z;=|voKF4-D{%4T;D9Nup%|`2!d+@QWqsLpe+P|IacIcS?*4i$A-6eNcNZXf7TAX~d zU~=#ee9IM#+w8o)(gK5A(TMKe-?^(@akCn*Q5c z)zRV=S8o|l3$?z&6v9*#J+C2s{le99(jS)o+m%eJq7ISx3<_n6gR9$ zEUn(%yH@WrPv90Gt`))4)EtV+lQV+cELW`2`_l2purjsK_Q#%`lPvdnr(|4REW}`x z!qU8da-ZRatJ1rFEW2RxS~Ohfwy#Z}hqOnboZ)|l8u?2N#-J+>26BcKpWU-A|IMzy zZvLO)g0C}{W6ZbZ-g4V8PqMs8;Z8@m;M)i9{xejsbuBho?5ACLEq0m3fk&qDN8iq3 zIE}WU34MdpVB!k6Np<){HPwse8*YB;tI9hc zf2e)4Bia#Yj9%cOn~lqF?fv>i>|*W97`?(dRr3$8jgHld-uW)tug_CgIsK+GQ#q^T zF^AtrlDinrEZP$8dPTy+cg?AQbXLCTXWWg))paaZ2`RfPt8|54nVL}5q=B@(3^LRP zp7JJf(1VtG@D8Xf7QG@EWu-Y|dVglegJtjEm;ReFDb_(}Nt?1EAKQ)ltjU%q6`sF- zd2RCx@WL%#S+!@{7Wrwq-HXMiGCla3C%O4H_xy8fE2`sa^sUICmhINv)&ywI`nRh?t*$-2d`bJOh*L!P5;>C1w)b*Xd+aHTLoQ>$qodMhZ)dabd;U|OoqSqfTzLFxU|YgcXMyD`Js&a{LBXcI^n&@iDK_10TPJy{*(L4hFJ6+B z>~y?G=_@+(2=$hLmpZ5Pva?A#Q+Q)%ZX(Ie{?9%Om);CI=#HPy9FpKd9O?!9{? zaL%7j#lZ7%tV;3s+;egt@7@tz#9^q@qRGDESfSsejdk)`@qBTj?WZScCb3>~`}ukQ zs^>Dvm$u}6IcudWY0wfg+hm6jqqbpklOsb8_c`Nvya`8F#=A1KY2TjG!ow07p=UR9 zne^?&S-QSwj@_s~t@}KGz2B6!{H*OS_DNn|*mlEZ@{*R8sUJ8dU$(G3UUMzHog=p1 zPvt@FLi;a@A#ss%Chp}a{fZ)UT2G!l@YaW=iNivvVdEv&w2v?QWuF+c)cTpEhFZ^H ztv%>od^WmP?U-+}zsK6eV$%Ldz`uEAcGMi)lJ{|uqyF_LEg>TEm%yYg}^sbw(Gi|}@$1d*JkD#n~R?BFpFOvb>3A%j+&LIa^(HX<6CMshu%j51tok4%#RD z^U=5G=WcI4^EtZg&U49gg|qaurKNl}xj)X`c;dzSvQq~=rQ04K{JQF%{N==}Nwe-S z=}q&v8zDSjXWRA1%O%-AtWplS!m=!|wnSAyv)*!(!wchiQ+3y^FJ!*!&~27lJI!mUQ1g;kJRjMjq8`2b#A&}`RTgK!{Xy{RpFiwelBZWn>_t3XRgT_mTi5LjxIfFbvNHaMXO=Q%k%zGC$H8tFUb@ajP5wRW%nW>Yki)*Mt;U` zBiGkge7m1sz4F$5hRQUjaOMTa{R}iOzY4#6C~4leXA%7&m622av0UB}aqVNsge_48 zU1yc_vxPfFXMAk_^r`U2*EMss-~4B|6?W(=^KEf%1)Xq)k8}F{_P4rx59iOB_TFYK zlgygblc9Epmlp?IVqR7&rk(5UcX>&RcS+4j^)s!aQ-rsqq|0d9@O%!;ns9vitEik? zg$A6D!|j4C5PM`vsnikLI0YO)7!uKlT6{$M%3o5?Qurm>AVCl<4$vlPFK zlFIFyZ@X+R%d{nT?jAOt`RAB4*YsOX&)MHylijzpHdmnU-lu08#}$*OPN{Ra;#peI zW;FTKG6N@pC%NpF%$F_g=Q23QZd+@!8%$|8Nr|nGpoCdzS9g@Ge7+%MFZEAWK+H}by?pSs0=IQF^?i`S5K3?-N)W)54 z`>)vh->RKe%>PB_m1!67J*t~)e9R*2`MiH0A9b1Un!C88S!yPqNMB1;(zIN+Z^e?c zK0R`lywkcQDdbmQg~>Z@@fxp*OTPJXiA3ruO-?LJ*eT1Hlb@Zbqaw_I0qKX&%Q zqP*qi%uALzMbz15y8gYf%iQTz{g!!~-dp!Sc8IvsckUwV-_x1F_R}t`iZbcpsXnMO z$Z}*`H8S~rTRf$|yI{A+uX&!& zH!QNXyYw>ebDqlH%H`V6HXq-i|L1dp*(B@cn7eDg-d(im)?I(D?JDkyG5R z85~V{!R?1w%yw({X~kTDw9IY+OT$D?WeeW`*%s27-{ghpc@h6{o-(HWvE`}AeY%V(1Trb#>A#CB9d}_PQrspb&?OxuwLeHLi znQz<@UEa!dN$E+#lTQ^dFRwfs>FajNdu`aGXWmP*FT7Z_Q9C#2VB^Wcmpye`gDyS0 z{M+o=si(_BGs7a5^fJpd9OmJa?N4?PI=|pfuO0X46eFh#m6r@tr3?HDj3+TL{4?#3 z4t#ZC%{QH}*a?w)clYo`Huv;Z)g1n`CW>LF+3a%8okGt2n_Dye9yqlfyH|X!$SP#I zmG9jtg}$}S?#u>3&YFo6=Oo+6lv%6}|8=BXN_Oiax6?&TYd)3mt(?$&zxn)y(6!NF zm-BMuu3fTBbe}1o(J11!K){_{r}Di0Qih-_B}=1kOPJg@i{E-^)1s3NH&uG7%2t_u z6F2APY*KoZ$>Z5%nZT(0NqN?d>7kqYetYiPo;}?xTgGR-(7LBVo(gR?pD%x1e(SYV z-CWg%jovGTIG;>&)>@%r)%uv_6T>n#-M_78n-|3%->~D(5`zTyjVxW0y*5T)pK)5V zOCs6GTI-$q1P10lPleKzUr+ydckPyj%GAd#X6A=w9E6GwE%+wuAMX{qJ7d_HgHdE3kvx}IxF7)vY5e;?Ym?eF(vvHdc&Z^~cKsWZvkCoi5` zseK~s+TBwO>*c;#Z@k+eAM@bb*|dmQ)xCSab(goYwz zk9&5f=S+&Ii>+PNboZEv`R2owYl}9g%j+>s{Q21{U)f41GV#yFqRZ*>dR&b^KRTRV zxiIIV-TgwvyGongIzB#NU_70=`CJu)$6w97E%KW(ISWl@?wG(N7-!UFp8Mq8$*&I* z%HN0Rt$RG(bK};4LmpCLN$%{0G0C5n-Mg#uZJVG%!UdPW%@-!Uxl_jyz}B{MA+Nbl zSLPDkf>-ODHi-mO*S?wjj!j$Z)V1u}Q?_sQ{cKmTli7l0p8p2Z^zglXpWnmq3gxDFiXE!g**TEi3=Y0ts1v{u{_7I zDty}J$e6u*Pf0xU-?NilCVgw(t6fjGo(bnwc_6YE*tS%pSp2T|L)znpIE-i8qaF}ZT57g&5F~D&*ffh zlsEo(JkF|btKYUQvWX_ItEWtrz5O?Jr-Y*Fty7$GGx9G4utu0<|9m{nBjMi0&Dx3A zC+(TQR+oR+HD{#tSHY&fAOIA^zt#xn;u z_A`Fra?NXlF27robn(4z`m`tBMFEp0tk%j^`Ko6;=NC`)Wx?RzM(-^?RerL&{Js6x zp7iqg%WJK2)qY8f?wQ22?TL2Y9V5mU9_JkFcC0PAmScA!^4jyaX$NlRa_zQCFe{$# zcjffoJnp%s6M0q^d{EJA;y5&S$4UL(BZUXvRA1ut;YhAr>akdQ?hUQ}psLWNy2O1Dgp-xB>0GrJde z4?bV7)Ho&2#QS&VqOOWisURm|tz4B->CFvw%O*!%dU|QyEy+mPa)C8#I2Fnjgxnv8 znR>rgyFBf@|8Hl-9ocP_2Uvs*7!F!~H|5)3oLyb7dUxR*$GBPRLft$4&Vw?U3t~J!8q-#0pt~2b_#|ZoJ~NSiWpM9lpfu4$i%#)@^tGvxySDPne#E=)j{n$_bjX~O;_rE{Ufiq zBy82ol#04oCyyoSXF_`~Wt?g#;wU}$pyKhzMfLny6EYY5i;jtU6IuSV%kS8+Yq$6c zPrUV?XM5(~`k?E9)$!>Yr@Cg|&4`-1Y~J?mVoP;rXy@Ho(r~|ID!a1XqsfP>(!X8X zo4D-fJ@;G7BKF+fy)EVIF}HfF6757s|AG&v-bo)c?(e zb#nwnXD&Tg_kyeNxXtIIW|t3!MfDz=_bY7Mb*s`dmu{c5+^q4@Qzp%)GId|VDGN*a zrSU4wlic}TOQ+ux-MnT0MV47h9vuz|3JTkN+a$#>ewNZ-&g0g*QogOJ7tXx)%WZr4 z@>{Vd%eGxI(bqowH1*1a8`86T`gSgPbnQ`L#_2`7`1vZ*YO6i3t$Ulslxt-&#c{h@ zLb({j^A(}$5|&3Zmp89@`{v)>HLul99i4VVr86rvZBj;9&~9fw5p#8$U&UQnysx-) zUlmRX&(42vTjYvqH*avntXuDWBGn2-XH1n-z1S9C2^K0K?$PHxkc^;^AXJl!1`WwBu6 z=kO;*d-i?od33%=KQ&B`0Pz2Z{?@mj&b#AJHtDST<{hyY&py4Uz3yVJoRO-!%{u1vWgN!~9b%rp zSg9vwvSVt(#3e0;9B+1e>s6?vJhqz&8y5u)zS15Om`vc6Sht|-;zge$d#ZihSK3ytRaYrR1NAby?P5 zq)flAUR`TCr|8icJo)?OKWtH+;+HbnJ;gLy4bRUJBN>(}9`^GM?@tED5F!xqdjgo$$ z%w4UgPJFoSx5?@lV-n-rNvtUsL;bksAM(v{d41Ba`agru7g^;;CKs3P|F%W#;o4i* zOgxS;AC~gzioascJ0LE^qwW!!fwto zxrch>_V8JU&$;Ms9mPL)E#J0!k%PsL_yu1XMW2+Z>Rqz!!m$~4ab+!c&pU|E3GHXD znCx>Qsmt@()dxHKl0Lg;g)Z3J-=orXhT)xY^FiC!U5i@HtGj33dtUjUfitvapTxGy z*8{GXZ10F++rE)2VS>k-gVEo+JQyBNjJcInu)am@QrF3E?fbkJ+>kC?leZ+@@?1pO znktQ=9GTf7G6L>_v3Z-=SdZ*LG}D zqT#oeJhx;$XS;9e*^3U+-)AkGU;8L^@2;-bZ`?EDuQ}A^`qs{Ox%!8v1)Tf- z%sQ`CO0f@8o3d!z=Gt?)9ANDE7v( z)4-1}vajOz%J(t8A~8Ci1xn&V-9>NN9zUJQz!Pqh!sKA_eZ>pvZgV2EpaB2kft%Yi zr4Ci3-s5O4QjBrm-n{$oyRBvm+;6-~WIcUcCUwexhShQNi~sz(rhiNAQ_Xraf9>D1 z`|P#k9;J7oi;I(!ON5V~M?hReLPA_b zOiW5vRbEP3Sw>7uK}SJZOv zGcywlGb<|#3j+gVEh7^%1B)Q5kfNa@n{Z$vyHcTuQRBpg9Li1`4~hm|{Gei-RMf=D zB_=K*DW$5WuA!-AVrph?VQJ;;;_Bw^;pr6|5*ijB5gC=7lA4yDk(pIoQd(ACQCZd8 z(%RPE(b+X=@|3C5rq7r;YtiB*OP4KQv2xX>&0Dr^+rDGxu0w~996fgY#K}{aE?>EN z?fQ+Iw;n!v{N(Ag=PzEq`uOSdm#^Qx|M>X}PTMRtRj0{YI%z_N|3?F{1eXOz5!E&JYJ4m0zAnUFTa{@oH*m!igtd!%kL*T-8%N1lkf2hqwFx- zsCVYN60RywdS|jvs{Xxk1?$%XJB@odIRYo__`O8%Kf{79h9%#;n)Mk2Upb0g&Xr)8 z(ZD|O`mD>lue^J=_K2}SGLJMP!xJX<&&&TaWZ%mxlV-L&EikuI{nspplV%s2n+4cE zE;Y*%F>L3m65=HB2%Oy({3fj11yUqo}aYA?cgw=8}9fT8Qj-q&skQ<&`=*7dE0;CpA}5 zJ1_p{bCeyJoSpf_eyTJbjqd{6D8lIYtAD{#iBGeiTAp|=t0}+Y7grIx!3j6Bp0oz} zY!$+Cm8P zaW7rHXIs)TB(!CU`@I;ZpW9|=_q)hbg0+I{#(xHz;D^&LiiSmtXNu$|@9CLWUG|^h zbui!ZlJaMcpL>@#UY2-#X;JjamQ9{J#LMm->G^#A$1H|o8~eTfirpI+%5FJ)`E@mj zOKznh&|IbY_>uPbJ2gi6y| zeAw!o=T&@LZFWwGoiD4UN}CdvB%7+*4TfZwxhH} zdRpPdvUzpM_j?Na&n@eECLr0{KBI8E>JFLYOEX$JRg_M=Ejtlp5!hsS;`?6>CiA{4 zHrDAnYi`s}`LnpM_V>S#kF3)!_}$7ebC}Ou?%b-3vamV^wv-9fy9V-65JNfUuzh{-4lky~^ULJAKlRm9p_}Jd> zi_XSl>X|y5ckc6f!XoqW{eOmQD|s$z29*3~*i#WR|65hn7yG#kVKa57i5Q+btLFCf z_A$frul;v+olGv$)iDyl0m+&%H_ zZTYoK?{2G`d4=~+udiQc>>x6O;Rq84`-=CTVb6EAc}~1^RWRH#_I~x{Pb+)>u5*mF zGksA}?^7MXRw|mBrxd|cpB|PoNw!~ES^oU2rf|Na+gjCC8V{VS=DWgh3pDG6hGqV` zUkIMEebNInab@Lev;MkY2wFe=sok5OGo@>7Uod&go4@t^R_PM-xm|y|Ox5KD`*t=m zxoU>8D==6+x4*P#yP)Lsx2#8EPchEgm@~~+iu1`t`5zs>{@U8FWpI~$dnD`BqzMw! zl>0m-OtoK4?^|MXyV3HgtM%#2hZ$6-G+*s_d3>2|?aS%iDJu@$e3H&CsorE;Rja{d zSY4!AS#$ZBozb1*zWJvnN$-5nvm_`t$Wxi&b5HORv3-$-)AhG6{QCGm!}?&2%lppl zo)u_jmt<9Y|KkFVcc#*-J9>&vPPN&_Al+9y*~ff4>*IWrXZAZA*t9al4s3apJ~O=F zQ-{pk=PUlKaJ~Hb^PUIHx99ZPw*L-cl$q6frE}v`oqa9*KJ`(-EA9$5>$w&8aOobM z$l`a2e`a4ux-v8K=d-qx4i_Go^!Dxhli$AFb`XuKlrrdXyLdp_UH-YKY(~qa!+L2u zm6h!^UQYaL9I}qZ@%SXq7`}abUocsrMF4V>7#tY~Cg$FL@{^A<-*3zDS9VQHa}V9A z`>uWbJpMu(pA6s$RWPFZ`0oUK-be$9%DH679UWdWW)o9lf-!V+gaW%Aju z-D2WwhQilDx1)~RWci*c+?cyGzK759{NrB%jHm1Kp{N5i`^Q~JX=XD|X+s7Gs{%71Jex-k0z#bjX z5gKy)$gAbb1?TwXAO5e!oboxM+3%uYK$Z)#=y2EZ~}MTzQG@M&|*Ez{aDl;Y%(bDa`*JyIHO- zv}WGS{|v7~)mS5%dz$+6@5CLKQeJElIZ!&~1v zVBLd?FDn=Cn{`!4SVTwsne_GY7%2whWp95^k36ofeO>;s@5D7c8*`#tyLI+iCXx zbM)%t{|-Li`Tl3f!!IA63;LbDA!Pi=ZvF@TGr@Lu?q!`wXfAsGqry_+N!k*t*^i7i zx~%J+dm!1SiT$O6V9abA{hN~tij1ELp7^8XbSs}h^_uZX)vDtE3^)F5x$%|Vl}oYV zW6!4N+pI6QEmx5Eq(&24s`4v!f)*{tS0DfXFH zHbWydKztc{p2hj)qM{7ZYNy`{K1}~qdH-_Z>z=y#YlWm0b##SJ1(%;&S5)@#Wq;L5 zSB6;LU$;r?a8+Pkoj+yhqKCxs=(aZptZ)>j*##3mMN}sb%#Dsbu)M z(?VXa_N?1q_X{B{%O@Vm-Ov2&?Unxw^A9yBu{2NcushbK+NtBIKFRZSxQ@zpkF?0Q zQJE6!jh2Pg7Li>yPAppYbAxAr zSF~tnl5$q>af{!_=f`C|nJyLdXH({7_B%!8Qy;7Mq`&-Gmn(2}ZcmoBU!@N3p&eVN zSvXHh`uCmt({sz$^UuxuoOzx@;HFpq=bE4Tf9#%bJh)6*t!rb+g(;nhy%Sa(Hhf&a z@L0vFFL-^;zCHLq!?gw6Qe`Vk zm#^*)=aOm5Sz)Pc@h@%8t*y5$iyo^_Y;52^eM0_&pwFhROCD+F;kqIXD|(%Tq}O@c zZfyK{Wo>Q(CwE=6a#NCa^TaE~^Em&kQq6wVyWsihjNSS{mZq9dc7A?x<5Fds;-?1; zjF#2oVVkj zp#S_M;ok**25%{HKYuD%^3+>f+g_({yQ=oEmNK0?+}3~lwFaHcO) z_@^_N)uleR_5`*THiUM`xiz5U5d|G;_dZHi(ubT>HOi|u=OUUv6?2Cc36#re6NxbwLG^Kb><%%%OO_O_f@Q{ZQ? z+$d#|n^oI?hJEd8Gu?CT&wn;NnyFiV`jhd}Y3g=fFLfpfD61IW->rS(F~hf)e_~&4 zy)*G_rexO<*A1+hA(JE;o8L~J;QyZ?e(to{G1Z;Q)7~k(2!Ee@>*lQri-QM_)yqd6 zG5=n8?1Rq2WR<4@44lfDFJD=#PBYZJ=qk!e%sL{zy2URvpSV7Gu72jY|FIdMjJziL z&EfCP`SSLUGMKou-p$$cc9O?hmlrMhIy(a_AN*&qKeXmRp3t{|T}4}Fi_DnH$z@=9 z+_ru$^X9E*W@*P>D_B3*ye+0d_+3xwF?+czrR#!cm3`Bjt%aD??j&0>UzWerD7htU z?UM7BsoOWYD>OH-v-c$5d9+mQdUM9V^T`t%cQEmv{_?u7o{Qn=qV=n1yj$M?CQGIG z(_+44nGeQqGB4g0*jIitS;JCAgSlznegAWyJzzCH7n^oPaGZ#dZI?LsM1H}t!?Ks| zoDlcbQ{#b*-inT3UcYCU(UoQXIzavl9c;39l^PdLHzEYOnc1o1PTz-lS@9FFP zhd(ahxuta|hNboL$)1fW?aI$2C5~TOjdco@dH#xDTvMBCr^p*5_fOs*9B3c-MdVTP zrv|R_?ZvD9elfs=>YepbG!zy0T^^WHD! z?fPo_XD&|7E>!&;?Ya8a?P)z;X-0pRJYm?qxBk%lRX6Ua1fJP7>E79S%Kbc#%Zev( zzOg*!o_Ez@-z42fw`Fg~X}(-WDw%WvmP{@m5}{H5QE@YvSvTlel1 z_AWFrJ2T_wI=1V@=kGpNUuLgWBNe@=QaNz5pyBa*wr6VQ^v&u2{p4Ee=V+6go5Lf1 zKHT;9ao_W8T3e;q+8uSLzT75gwmRdrlvqT|&j&A#RrImX!k?e-wq39)-ZH1;NwD(ee;4yMsVz>J==o`bf^u?E zpM&J<^ABeoUNo!r$mJJVW_@9*6YfPx+$`ta#B}(nj*)fA@hgpiwk_Gpi|!tIDzRFC z@7~%A^A#OYA$hPzSZ|* zw%JBq&Zg5{%I>&6oe38+qpYmp1*W{$;zl(oqF*2X+=wW^Xl_;k>%GWw8nySmJIbTRe0Ad*@f3GT~e#X??{WZU;5mdT+>ECRY+;n(JeJ?}C3#0hsqK6}H9xrN~u(oZ>i*666a?AXXBsdcQQSNH|vc}b0U?|udZ&Vt-Ir&SCL9V zYo)VVKOX$K&!=YI@_Ea9>Uq<(V_q#id*bcSg}SCU-|GLn&LYm9*LhvwglP92v#=BaL9y)SdxtkgNv|GA!9&0<(tedM6`x;Ks6e_sB| zt8|UKG~3qAdS@r|selE2J5S!JO5RrWuj<&h%gK_(v3I8b6Po>?Xya|Y=)yyCRfTh& z@Ui@|C+^ zVQ6VIw{^gx^MTRFllJITJDe*%=kH`|eYsqCM?}_P|H#&@bNEyl%x{Hw_oOfPe|;fj zV)mN;X&X0|-rb$-R$%wuah~0Sm#?z8V@<5Qu7?{&=lovvMCfl-@hkS{!LCbhSvQnw zG)*$_yVyA8$)Edg+b!DyIw{2VP-)s`v zfAq$jdda_<=a(EZ9^5s({elKR4pPRbRC&pufp1WSvlg8uE=P%1j zxxCO|x9Jh~qM=YjZvu3vQkG?XAr7 z*YoVP=D)RyV9uR0lZTV%=801u=X^YnfBw_L+-%*`qOIlTKIxM7PvlR{w$abm>tn+eY)&i`ST{PU^)ZwSLl z#cjf?mL7k1?#<4)8S3&eJ$0oDTes+}{&tnwLU+r=9=`iQ?hk!`hwv6lpG=qREYItW zSodafpZhZRr{1Qn$r31@{ zs5LJ(#=PsD&-(4})yH${)ITl#ZMy7&>x*-D9-p=?yuALQr|Hqni#ygF$#G-+%z4~D ze&L@N;%0{g7M-b_T@Z7^-{M%|*Jlmf-PIutTg>ZH8aHlPC@HzBT}^L0i1ieFq4*4U??d-i#+bpY#Gv16~Exy?Ei z@wj4!UgUD^aKeMeXUjOXhCkr$snI*qIUuqrv;qSG%S$b-d#GM=%&BdPEIx@?bd_9_cdEzZI zo}N>O7qYXh%w4H_e37}@hrM@Y!_YDfiSvwh-*YikgH<~TwIEQfl*TV2Hfnz`&r!z!1CJfq_ATfgy3V z0|SE=14C+=0|SE&14E{>0|SE|14HgD2L=WM28P^s4h#%N3}8PnFcye1NC+@6FqYn* zx#0D$*;*X27dxB$Q?@*@J`s4XOnlu8OJlX=r_*bimh3l_D?YH?-eqUS^2=2W8y{z| z@f9R)`{?fLp=Z*m)_KXv{q&c6j4|uIHT;`%zPVY?1obMFpL0AC8^-C}PLrDVb+#`by$n$mP)BZEyO| zO4&}x_;9bn;I{R|n_3%;o5bX=KYcIrDb0ST$gAi|M*Yy}zn5)0ib7ZXafpa~K8OEf z^oJP_Eqr;D`Thk3z4$J$!kH(p&i?f#Cv~km*Lp6U3e;d)7$f2JHBlGD|_~K_4DGw z?>5N?G-e!PazC!8!ewwOSy27+*>jipBH~VOw%;==ctZa1Pob~bKFlk+(95I7Rx5N? zR-7xnC3xN^Sv}Di34inRG!sv`DTp6jmwqtiqwRdF$J=+U&N0pkVtHD%He~%iFh@=Y~j_ z{aJ=*TXWP^ZY*18aXPzs$%{>UX4O^v)(n0ZVsdDI9#gO5<;o4&;vXzU1v-8B_DJo% zu*7Bm+IJbLQ`*!3cIjGt+4d(g};G9a>Aa0 zesgF3Q<@!oqe;qBO>sy0_6o5Yt8?J-T?FKg#&4cbtE_>W_acSV;r{)5D_q3U+VvD}XuFScaeVAjr)Dxwc<@L``h9p&0 zy?fHD$#R;#hUvqRqmv?M+8N)u8~rn5uCu02W2M{ihf75)Mc)=Za$|kAL_egQZ^vA1 z_tZoY7n6lodjyV6`S9vW+MW7SMHi;8{&K+V(5mGDGrwJ1e)yn(o}$uu0sC{>xuU6U zKWrL~t+ds;GEFol>20#X+C86x3^RSMc&&OGW;JDrd)CK8ee2^dSluzo+oY}I|Ege1 zjrp=H)|a!juJ1Zx*yy9VX`|qiwOe;q-~G>E@hd`b*UfKVHb1I)ZhHIviXBU{uY8l} z+9oD^XqVljiYF7_N&H(Rx|M1B9YM?d zy|C=gJW)r6=6%=qB(L?z`S*L7_=3H=p8v2+dpx}>dljdjt(xKMpv;;HJv*AOt*J9y zUE%ifgha~w6x}nAJ_f9x8m09$*CBU#-iJeHU$8`MEuFB+uOK^nuHljJ$ua#0mK(+t zgkV@7i>2Y44xYE_haIzN#*C2bgI@m{&G^cE*CvGX~v@m zJJs!$nZLUIX~FBriSy>(+sW57JKXGlw#?4Gj;*(!`P_eMR>$p8vAXGN&6K-;H=aLi z)niwFWa;LYTP!#1PAxgY@^-;2gF~B7+V6h(<$^fh+*|ANB~-26CK>;@w|(bHomq18 znA`=z6mmn|3T%Ew{OUSaYu>a!j>TUtQ~Ze1^y(WQEw+~R?D}fYSZ=)hr@f!iiBkr# zx(T-%9tdf6tkH55=6jtp&vZN2dLGx(-R}Q{m)_rf>4D<8pwPf$UA_zNnQ%=vvoy)> zD0`#7Xw6Iyo_`xPR-Clk5v5|E-*wP2^#0TNsm2d)Y&yF^C+fv{X<^oftC~~uYw;@)Qcp-@>rvN%!z^aIwj{CgzEIHLzB+itrdinl**?+;EX20!=7+vog|6K6q<;QoTGml<) z^}mJX>tvAwzDi*^Dr_&({NLVrQ#*ZW%*G>iX>f60@ z)?41|=zqS)p}5LH>R*DSv_ykn$XU3EJ3l2*bTjZ)PdXQ^fex|F4XVDDS z`JQKWfA%-OJEMI#K~tbs`D}5?v4 zy6Ko+5&H|PsE+~Dcv~YHx{mQm2}iQ^G%Z0xA|eK)=d0k zmF>OzyGrKY2=0~ly0=y>*Qq!^x#Hi!2r1XqWdYOjmb~70duFtfp~GFF6|xsi`g*5H z$`=)$KNH4N?#?XIcz5p8i!wjbBHuOd-t4mS^Tr3Wc210r_5C=#u%&oISAh7M@Aq%I zZ8YrEtNj&uM=32S!JmXb-8O!#Bhd`ji_ z-lsEnshypdXgTp!<*yk`l}1a>MCM&QcxB?tUS~6%&u4ZE`JVY={33I6_zoks{69uA zXP-FuZFqW=PhQ(@p5w$f<=emYY|0Jpd>9-(J!sdFq>UGAmZ}5jI;mTB)sE5TAzGK^iTI* zhDE`JtGk6$g4a&PP9I4yPCw0!}E|2ol3id5(e#biXo4sON|G87$ ztDdd+?CWGAV_)u-S^aWL1xMvRW5FNqU#R?h=Dq*$S#uemX*p-hIAuDyK3>kv!)XCn~JO^V(SwWmU3gPt}Ud&Z$hC$+Icuk<6~Tx;p)CpI1M**TgHb?|=V1eEt~| z^NbByhdge~mYX<*?ai)|si|8urY5vT7M=*4_GZD+n}$Aoew$a{?+mnCQTeXeKrBUa zbK=yEw`2s4%HR9Nv$9nwPipJ49D}rZ3!WFe?rSKuf74$swWeU@1jQXP;VtVHH>`P6 z_H=1x_x3)X>bsmRF&Fei?_YJ;E^*@m50~Cc$JLs4^*ovj{6D!|i(~0t%(tac{@Lz? z@KedZUaN==FFJep0V-1!g5k!JAb6C$=2!+kiA<{D>-4xZ{e$|(#mW;^AsM-D4PB) zP=3dxnIq#YGdqGs^VQ$&Gp^ZpJe22QSUy#J{w>$j+y8Z$zbi{M)SSZSmR%aVaMp$g z&&2xv85?{t@PGAFr2KG8>wN9s-xZs4thZfZtERSDJ3jG0-+0yfLS)jnZMToqpB`Xl{W(dp{VCSjomx~^* zxifpE*C|0>*Vhbz>t9^lt*a-w{A=U-wIQslPp(QixzpgTM1cIyH^&*Y*ETNA*riG&^^plBcv+609&E?S9Kmt4U0Eo z*pbIrR4lY7Y^l$LqQX_nb~f~dadNm%6FPP)eXhr`o^F4w)@}O(Y_IRUXLx(BMOx^@ zKzENw$%nDVk@xORn)Gq=Up>z)k7TpvMzhq)Y+t4#zL2%Sg~e=B`@v1&N1l}g-i+T; zX!QKcgldLXP9uknHO~YN3VfY*m)nSG^)|_gJaYT~Cfal?kr?q&Bm}(QcL}=RNDQ(k&tjD<}3UZ9ie+5u=qYsFFFASEq8y`CayJpT_=L z<1A1mb74v3G_TLal^IOF>*A9++F}DkPpp4h^)N2Yb<-053>o)zqF%=YtrAwUv8{My zD|Fyaf zmG$($c;;3S9;!E$`=`#lU()ir5jR7cJYIA+9y)todawBje%8; zOFim+aDrOVd5>VdK;=HoH?EJ*rAK^Dogc9E)0&6NuHRo#!0%CbF(WH7y~$RW-C|$T z*|dJ!sQBjDTTKF(dNyo%WRlkUdwnqL%I#NqGD_8yZYMfS_ewsmJ4Kx9;`fgy3ZL^# z$ylnl(bAyy;MaeT*p8iuH~DOMi!EZpM2DyP`{m|-74wQ@;LS+;GoSI$YY+;kx`~^#9 z{`&6~l@oX9@uqOiZh5zI2*2t9go_X z^JH;}X3Xwy$?G52e9r7+yT-iz)jfqU!Pd=gu}ls-w!hglx3X)Qo#)|;XYaAb>IL7d zT(DF1Zl2-R?(fGRxgI|qr_K6Ux|KQ9@%5_{BD@RTyYi&C^aJ$PY~!CT(*L*N*zJ_r zBK&`wc|2r3u%77o=i2H#&E)9W4Gt4B^KVEr*v)ru4(-`+Ra^32#QgkUr#lb3KGz9t zQB!6YKhiu!t2!WQty@+5La%85-*&eZ(?itfn95wd`NrW%h3lWvo{$-C2?A$csJO;d zeyrC%W3Vj4uPsB`amLDqhKlpMW^gT^8y?K{`LNonRF;zrg_nvLm$U6TrlzmY^+>zb zYH@R7*~=wKDN(n5w5&6eKgq9AK3uo$N622c(Bj1xEl$i*E&cf8;G*5{9|qLuZ4iHw zQE{ee>Z7GLEHhP=4(xx_<+bv9NVP-%z8Ei+_inR7&d*ylU9oM=+iQ&8zSE`GUb%Pi z#!UBFx>M{`=2c0)x5#vFoZvD;RUy#tw7B7e4<`E_3GBMNUL)|A?vK+azp%3_OQ!8@ zDn4VW_dsmHKjS&ZC0vQK1N;uJZ)DRs!eIL4!gmAD=*uQ1h2?Bt*Z5sCD-ug{*;dYd?%DjtZPN@Hf$bmU z8JG$}gdR>wjggPb_nejL`NP$1g4V40`-Mb4?K|Oi|6rlWgcEZlT2~6)U(dW_|Dm@p zPesVpoV@cOP-V-9uorsLXCu32<^JWiN^WSpZ0Gog<)eFC(uS%t9*4LBckNI4Kjsrpt{AblR<#C*T_)D|A`|^87oX|cE2MeLE_&sf8G45!dK4GD*4ysom!>4pmgX$Fy7~4$nWsw* zxlR{~eEY87@KbBA!Bp0nHjUwx@(Y(+>jc=QS153LSIDM^Oo)3L{Y{K7eKSLM)B=lr z(NkA5E-^TtM!~FuU`3DpyRO3y2UAW)4snt#Nw63dE#Sy zQJ&khZ)-WeJgR4}ebOmqq_Hl$Mc^=l*O6)V3Oviq6+7i~Ene`Q&WZMKKU(-a>5_2i zv#;$_tM_rQIdlBwz4*WKUON`9V4UnZwR(s1HReyotf$IPNo%(GcRDpMlm3yY{7m4{ zj1B)HuZ0yA^8V#}#%Ah%|QXhD>??tr8&y zOtb!lI&PBw^HIUxJa*Z#!{Og={FYm}?&&!Wm#>J$_xt?g%{Bl0?4Y>1j?4AumG7C>AF5!upB|I)li|yaCJ)(X zi>tGZPgJZ_bv}Ay>neez5>sx++ih^*R zhIF~j({}&hNZ%rLN29DgAepOhTh9JjT2q4lo3))yJI(o;L#dwCFrqByr$V{mN44Gl z&L@41)%12U?s~Psuxv^f|I2d8zgL2-(mOblmhc7dWMJ3Z`Rd3XHoGIWVqr3(A?=5n zzIz$0^R4OITNNBRXZsEQifs#+S@OO+FsfavIKAIif5*eN`5!nEO4n|?HcRkD(vHi` z1?ROE?l}+}^CQowEX0p_FMIgO?+Gn7Wj%}BRX;cJe&c*JQ)<$yuI_?5@1K3&+7d(8 zOi?m8_}uK3!1gOvnN@bP_lm4P)xdi7_}06omg}q5|I___Q)Tu9zLi_**95kQyyZ_{ zGB3XU;D(Dg%ygG)#w~c~&?ww~pV=>?B8ZiFdZBjXa-S?`ww{DtR-f-W_8g2hoOH_8 zQvUkQJDivN)xJG6`S5G=;kc4phxSdWuGfkCapO3D?3!;DwmEL?t4^^#YT0eA*R+zm zzm;8iVpLGTsS6Cx=55;a6Yr$Uzx@OFmJE>pdc^`LCBio~DLlz(z3B^{)km7@--UY`H%{1^Muj@t^a zg_=KaU;cBIXU&7A1$R%z&5ipuCsMa_Uad`&`L=%#d4-?uzZeu~op)ioV%&M%hDkdL zw^=((zWn1|f9T%e$CtBnZ%X{zv*Yneb1U;3@i|Y#i@pccPva=5_;^Qb^{r2RA+E*z zHOfw}75^%9s=AxbT=_xAKT%QRj7irDp+7BdDQ*uI$@RO>sXxVHc=Y|`8nJDg?w=IB ze<1fsNkR3T{Nn73 zRns(XuBLHowB8Tr9X}bb7Cw1&?YZOQ9)sj3cEMA^JSAT%{BH3LC=Swj71_2+ho?LI z%<-Q43wYMa2|vAI$?@sOwcexO4m!jriRrmT?Gs^tq9b^n?dH~?`59>^k4NJ`dsVXdVr8rJ1ie_FXY_hC;=+^OtyGXIs+_p2B%ub#f;zVOR6 z)d{Q-)~sUB@^5{7?OftvA5-%{`R6mC$BkSY?j7&?cFFViG2^sE=9kS5D<(PSYO?yA z?AV*Om;dJZPtFQLL6MPFs_uf<_fL~y%bU5rIy?`( z^ri&ZgxlPFDNqfcr$Dfyb61Q?`W!mQQ zi9Ab{3q>l8wlBVYS>yB7mx0W8`VwMH<*$6zvle>du{*x^Mv^_Vw4HfSA^8ApG7NS#+YxiCJu(XKShpc(qsg(W zN7(%CF8fw!^3NbxrS{VNSE)M|MC@Vq{IKKqG2;W}0pYQ7t($JOnOgrn5OPx_%eutc zO*qTQzPV}!%T(d-x?A2JPmJCcf7qO0V~9PW&kBef;>w z$okti>=M7e7j`mLi8JVU!Fc8H$;$k;(7Uq)0*#v(`88^Jc~3W{meyZ!dN5^Shh{tP zwBAU~RLy)B#RVOK^-5d*tUVJZoMK}UdH>tGn*}k|juuaPRRfl8ePF|Q*unpZjcxJ4 zxhaM(g3H&<=i$A0ZHmD~f#rOwwZkTdG?baFlH9dxe@Oo3FAwZx?W2xM&JAby(I$}G z=d@efZ1uDCNzSX9Wtp=(&W8S8yJKoFb8}Joqkiw1v9X7&1S1|@ST9oK<9F`lOH=&Wa^%`cXyv()X-|VINPN=dPdPzWmhkSx1rK2zr?+|^}OrBU-q3R z-zDF^@$=K|wbLG|FUjA0HKgOCPS2ys-@8-qAJkuTb!$9xzVgpc5etJpeB5g6x=KlZ znWy%Ls8YVS3xzDrwg^;e+58X`%geI9z+AWag7x)px}ER#Je}}x?)76A=iFNmXD`FK zHdy<$>h`Sa+k){y9bQ zj{}{JjPr|yd^+COz!d!|&$zgJ(B%J#(F zH0!!m+*Y#b*0a;z%G!r}46g}HJtM17u+XvaJlDspp9S5G-%iQ3-P;g!%OJqeIW*EZ zy6Kk4^-VXJ&jlpSnJ$$3ei`?E(T5Y|rfN!i-n!wMUgCQ&VXK4m>FYCXUJE*>UyjyL zdiO6j-=*k+|2HA!NXE%Clh2%rKX_uT`kQUXQkPWeg@@+%6vggwa}u1s^gd^Pz}Zu0 z)P>x&4;1LH^m6NJy?_+!u`)Q;_}ugGkJ>C{$^C}QTscsEq75w+51}whvqfO zF73Vi>vB$Jc;O9^qVmw1?>3HERejpIFDHs#J)0Wgk!-eyKVFY%&Ps+3SAC^+6{{1*GLJ)tkzmmd1es~G%L`oD#(<$d-rBdbEKob75}lnF)E*R znInGbhVH)8A<1;gB1m69Z(C`An5yt$>&WTH6uVU0rrepl>y_Z@cGaazuL)``=Y74% zFYoE@wp#6SagW(I_pR{S{N{Yal}+k3wkC~=!0hj+{n*7Eh4W>=F8b1ukWxGbUa^GUu5|?qocRMf9})d)Wx^|dOu-IzW(Rl>vyuAAw>GHn zslJ+EY?k;Z`)A(juWxot{N%X&(=Uln(n2r8IjeP7LV-3_6efjkIT;-;r<=ASFB@h8_qpj9TZ+O`#zWDWpD%Gq$|QYx*W7y| zg5m#~{%^^uf9Bi^cp7c`-dJKvqVKM@120r(N=C2oZM!*r+jLpET!*=t&djNK^Yyn& z#XngSYW{cMnWgWNT?FR^=^kpwBGn*dx91@XV`Q{CyP0h9519C1^K1aIOtNX<&RJcF>so1H})g$Xr zm*JbkR$Myi$S!xa^TH2YQ?AZ<_q=`O5vkWvsfSMNns-K2+FRyk^ri(L&WOvqF?IYX z;uH0iO*~>R&Utao-~Wu(wx01SM`z6YwB!C$myn7z4_%X+$aQMTjQ!ysm)TQ&_DfxR|A4XHJa@U`syccV|o#uIL+R@yRUN5 zl#9tRtBO0WPCEJ^Q0GU|{Gx+~vBwL7OONf`l~q3F*xQdU{z%H+e5A;6>wJx5qTJ=U z{dd=YG?$w8rAacZ>G!RL#Y<+XYbXoMPZC^k-hWkC)pe(w+;f}vn7Nz&(fFqAZYnLt z^*nuU#M>3|6B8em-D)_kbyo0B)<+KQ!&!GD7QfoQBf;{W>lc}ZRz?li`A=sgOFnF= zF5AzV*5U1^a$0WJ`SsTKCBmQXzUBP6UE=a*6OBTyi{dIBxoZU9$t4&By{)^;C+OtB zy1gq{%xJgl{r>CXJz2~=BL4-&6p~v_4E2}U1vZ%eI3xM{`ir00)wA~A$at}~)?;qo z^|?#ev}`(avf-TZ=Q}r|Y8m(4t4|Gc2sTV`G+fE?W5WA?u@jEJE8J=q7_q^|(VVgA z=54-{^I4Z@Z|6^}f8W9PBl^H2b&36}HneNX^WV*W_9TC8PaVTojU`W}+i)%Wq}jVB zGj^iVpC^8<2c#F9#mub9NQhAS{3y%zwEvdvhhqbzkGs0;%UJqh>8u}bbDL*wO8+VA z_HN08xAWQU)Q<3;`|Kt*w^cYe>1qAXjSCD-S-g5yA2@tO?8(IMJSuk{MQg8IynBkt z=CFTSuhgw4KAkEee|_fa^mW~{9*8_$nz%6aLWfa(^upiSez!e3CA!@73*TBZuKVfo zbIYC88xuGr_D7v*UMs?)9_AyzR%CL`lhVQ&`z|OayVmA}_wVAGbZpM*plx|iI6ekg z$R?#k#5_^ z&ys^r?aGh4{_l(6-J)cJts8k)a%`S2@9HIK8DrKmGi_V>Yr%!I&%{6W74!@68i#;=b@x-2! z;m=~}+4o#>i*37K4bvgJ*7nOfYxj#b^4`}s>0M%^uqn%X=adJH=hksdyt6ZMrF*H! zmFbQBF?w3kELzeT#jFk1agAkMt0q=(23Kr+){>jV63m&Qc~PGJ?GY+f5_%^T~(>2r{&0lo!$;L znVwbai+^%|ekEcTwq&-JU+l#8`||xO{{K(<UGDAe;>DduAR`jmZ(_CuyASh{ck=`1?3)p% zbVUB(``t$l&XbvUK1}nyevhQsf|J6@zMb=f)VCd;`2D}QV9@W{aGNW^-|pZ1(EoGY zksa^d;}-0?JU^^pTKFNo|3UL}*)Md&YF{{U^w9A$db;A?UWu<`PxP#iKB3p}@qctv ze``6DZd2t|K5mJH`{Vv^X5E~vz_iTa$QrBfHydkLx4u-@+oU<&?3Kyy+sciPnWd`c z{+_jKW%Gj7cRjB&6@Oo`BCF2LTZ8#X)0$@IgvK}i8+z9q_uTiWyYXB_y5#(>mM7vd zf6vczoLlor{laVMm^PcA6Xb4)KWLn|Aau^w9sN7lg0h$VT^h1iY~y#<{m`^YF>k3(@;0o)SK{x9*qhG1a}Qg%hpp=cVXQ`GpK2lt zew?~$WfYweo?9n#VZD*-dy56iHH>c?wH~eHKueYLnY5X~9S5xs% z#(P)w{&{}Vl6o5asOHOw0qAu0}2;fNeOdj7VG+n7J1%z=$>qJJ$l|D zRklp0D{lPnPNgUEPHQ;t-pcjk!q?n;pSv{!^=^o!tv2rv%C?vis`S^y!IJOR1&O!^ z-R`F^EH-ykS#fv5GZy_eTMmAwKew3s=S<@8`}%5MZ{LjUh|s*dtsk0nGwKz7Dz4ge zJ-q#um$0&Kzs1soO$|qStlDp?DaF4yucQ00`j2Shc9*}ByIoXQ@+My0bgKDn{S1aF zj~1-Dv%>72t-or_X3K(=r+Aard$_;8R({^KQ{Mf&b%mdV_#N*h?gr`76Su@nG?|lQ zzU#d1Y}2oqLT}|+qpqDWR&e0r>=bPtA<*vZLT~j{=NAXT6xw1K^ec~<~Z_aa%f5%%dP1*K9 zVfW2cQ)ThGv&-(UeO0T$EPnN&)4lt%R5^CHN0O;r#zy+h=hm%YM_GR;IqN@>IxK zHIZQVX^$Jv{%CYL=_z6;p1^chcfpy?@~wht?_OVIj+!p=?RbNL$cOi>MxSryC#?Tk z(7F2db^b|9_-63Tu~Av9cWWc7=5@El8uxRoA~&|?+p%Y|v@BYkuKh1(PVM_0rsleH zZff}QZw`E0cSHTVmg6}FkN2_1q*?n$RZ*^sS{^7DU>msLrRi}@C+%2ao%DzWf zcKbBZlaD>bEen0OUbddmzA@_U`K5N>1E-vlKb9T&&_Lhh=M5$46O}1kURt-?J2jt( zw60k^@n%g$+JUe+*&!!5RyihL_*l83r~8#kjxa~Mywm2l?s1Emjg(f;k3{&W50@L|H5os3G& zf2_>kKB!w(bK$mL%8yf1bFQq=+Fzl6ZryD;*XQLk-pGGG_E^k=Z?{u<(CRG>H)U5c zFt7aK@Jhu@U*OtiPLcfz-K)9PSLucA-X*}Hna1R^;Nq?ZH@ns%){_cCZ|n0t4nSmaFlzh)3-{pnlIk=J}nS^^HN74d-|C*}9(b6c!2FVYhNW!&)buDA7m1 zDm{B=cv!n+NN<`rdBWr;A8iFTyJUFiu6a|IJL}_Z|8vtf2O4QM|Mxr0?E5J_%Jm-W z>>X}u_4PYKTsYsnWqIE1waxA3w%F6bx4SvtB}JcG@1+vkXlyS3`|r7hGq=QMJ$`b2 zMrYY_yXDunY}n4fp6Sx0Z|4-W?_03i+G^zdU@LgL>Q7jo&eEWJ6k6YcI=ewSKRw-hQf2-W>`=CI={P4#I(8E7MJlKy^+ZZo$^!nt$Z7nQd$R<#xeWx3FaX1Enn@ z<){2_i3!C*8D`+P?K!`dOiU zyBC%_%zpY-XlMSVdv;kb<2A46-_rA2bB8TyQlGhw-~O(f(i;WcwHJ!{Y~uVhpF6K5 zZD#gjzWJKvyS8Xp1^+2{a^q>b=*1Qev+JzCuf+DxTc#}`^+{;0>y-PEKa?b*KW7u`lStu4i`PxpOp*M9c0v?0E3T0gZ2-f?=_p zcvmRj4U7DERxjq#&$BNpb<}>=Nc?E{fA$*xDno7cR~j4mYC5L#m7lYZTV?kt#rs3? zlzG2j<^KC9`>B2A^QLWv&o}Eu>}w5aldL@$enV^VnxiTEcAdGtwtZ{=J-+_<^C!HO z_D26Xd|562Gt;lPvtBDsO;>wsI^p=)g%(;j^-PzR+i)bjI~gE(C3K(D>V+~Jgc+ar)%Zr?VVy@!*xj8 z^S^#as+H#HMVA~Zu9V+le{8cyY-y-yNAc{+nfY6mIcWD^5Vm4nBP(1G$@Y*fH?v~t zuMOM1&sUl2yqq-iA@61L-(OvCsJ$d3;{KOAvCl70`=mZ6 zZ0CwXHlOehd|#Id+UQSnJDl+2-gdbSkJVLI*jz|)(~DubYJEywtvzP)G=T#Zn;+d@ z5n5Px_2QYf8@vwxPHQ;V_f;O}mXLV+^-}car+K`Zk!;Mxo=lnMdN=oVm&H!{dU5}j z*~=F)Z?GvT^3CtMwaD#h(#8B|Qmd1>?sxE>`_{=?Rk&v11JS2*TAVbeo$Ogx-o4?x zixgYb`Ah-X+bbO3RJD}vpL^+WZNAEWrSGh{?5lqy9-6z9qiFMq!f?eM5A}I=#}y^< z)c#no_SJO9i5qws3|uGO3XQIKC-e1p-O-n4Zd>)Ae$ubO`{T;XzP%+6PrXf>wCI9mPGD#F}fA)+L`YS{5whl=t1djb$xvGxnSLiPt)7Kx}Kb7Rd?|4&1UY) zvt%dmt^3Z%>L%c{#c@jXr<^$TFK1WH-4}IB)@aYq;(HRZibvx7m-Ad&CR)=Y>wj&= znM&3e!LZAcEGa>IrY=})^~MCVO#S|~76ZJ~xujQRI~ooZ91k}i}l zK7Y7NtNGv6ynX@BHk(g3_Z^-oASNSHu;bCSW2QQix(C+>Ftc_n&)WFN|JY^IGmQ~f zcc=QlwZ5qQxKaHP*H`C7%N3b?7uucUJ|66NbKxE}#Z-@ub9%?!Rl^u3zJ2v{*8Fc3 z9jdaoD~gN5Lw)tDnAY!mdZc>Fmw9|D5hs(HdU@VCyea(DW^_i*E%=wM_Uf3qQD?Qv zj$fG}-0(i(S8&`4G53ubspZAHSG+X{J!W^pao$0$hcBZok4NlJe_vP6a$EF;>tUO| zi7yomGupl7q#I{s$(yOym;X3{m3YGIO z2M%$cz}!l`m(STUr*E!~ou8(8e9Fv4=f4!XOcMRe*L_s=N`&#X#w&SkJD7j^d|A%K zdF|7F`^lacuk21tbMH#eT>kxfR*~0U$;qc@b6aKcEd3ec=NO(pZ3W*q%dM;_ye0Ez ze$afpK%j)RCh0r(kK@nksz*$$Qqv{yIHco)OjI z<1)jt*Q`qB?D;w2p&9SAnLUp1PweRaKe1n4KawxM>v_`rs_9nspW^sxc@O;mwt|_} zo2UD1OJrZ+-@MC=s|@CRIyL1Q3q!-41TU%0c9(BF_6?o%XWsH1&9TdOFyCFiquo?Z z$oTl_iO{r_>p%y?MKS;!d9U*}`i)FR!v@mgaL6tgK2` zPt{>qym`+NjfG0e-+K-jX_=ij>}?XbIzKA#i<|Gvjnf34zMHFZ?!83iy2}}DUA%hd zJj+iRa*3|7nY`nA?Hh*AM@638-x=oeB|-0tz*pOScFU#LY;HW&pWdw3v?a8>?ECA` zz!Q_*k`y)u@t;w;WkdXq$#ySnoc{if{dMBZ8bNE(kVds@d_Pj3<@Gc?IC9yvv+!<< z^BK{EpR8_6Hie$q8Eg^0J@W(Qe#A<}^m9kI?)dmGH2erdY3+UASCbpMwDSY{?KhoTgxV+3j;cWHqP3)UfPqCk#G{GUJZi8pITG?slod#bd zg0Frw-(l)%xXq$6#rx&^4~&~5@6RvP%-j>xEHb-xf^o&exok56c5ts#NxvnPSM6+c zBi8SgU%=I$d*&>R*5&&aZeiO~XEnc(X_ox7S*DZMH1FH0m7{H7q4fF8sg%c25_-v( zE?FL3CvvBid0s%roT3}|=BrE+HD8n>WAs?zTAJ|D_NWb$e&yTyDBZoor|P3>+jO46 zF-%QXeuGb7#|*|T6-U@mh1J*zg&9$byRj7VZa+KGCq+ zn6vJHpKeH$$A#|iLFs%=*B;rPo)9Lsakk#IHFKQo{{IV9GUwj$L(!O5=&l zZ_V*v_CRrY^AwG5P0OBpe12E5&S`DTD&<7oV{*o!cCGR}#X-$1s%LCUo?nuvzr5v} zSJ9*8FP}Sp)U#gm{gL9dg;JaurA0=Mn0M7l*0@|yZfi}HRexOH$SibD&+Q`T@rArB zi+P_KKK3}as$!l*m~HX%!)wZ=;)RVatWGr$Fsv3jHMwwh!)CSj$!n)CTu|0O>9y~w zAN~=$U4BN+i(B_r%w9%Aaz~O|xaln`*P!%OhxR?%ddz1P^OSju_iB9nZ`Y)9X%m-Q ze2B_Hduc7Nu#KlToVs^n(NtI2PX-N_UFymir(LD?9H(jsus90RD8l)4zbw;Ri(d8*@zK&*^m+Dnho<%8#{CK}R_Tx^$ z!(Vnz`R#pf!`Bzj1(SNL4&FGsC~MlZ&?^^1c-zEor|;evcv17&BeQp(?6wwcHs7aQ zmM{38%f0Q=e*0PPq)shpdZ@TNNcpag;Tb!+U zCs{Ae=S?+l**&*cXsUA_*MtL_P9H95tnA!UGG9xHe{NsU@fe|{Z7V}RP1BpN!O^<* zpo{8-%*f113odsq*4+AG)%8Bb#+i>rCi`aDuUfluy576p!im3qB(_|0;jd7$6OR=2 zDf-rS_Q{vS8y<4!Suo6rEHn*i-=V_IbwSz6!S?0rLz^Fb2t3biagfnm-usz#ag5`R`THDnXFl6*oXaq zdFhzmS?8rn@{!d$dF<KQ0?+7F-RxX* z#!aGZuF^JLtvlQD9C+gHcifvDqixO=#QIcO;KcoPtUJ@!$t!10dpbGv#Gd60yYyIo zy;HWI>m<8%)(7Fjx7rJO*4L@Lei?ammrnPuXP%Ge=ih&AWpAt+%kLG`bV`Rc=88>p z#D{GRB4-M;Zifdi5zLHKIaS5)%_ZK#c)g~&v0tWT8BbY=^ol5fR(YySI$L?L2sCF41d?&usj?|rKAjMId9tpD%+d)wk~ z_jhUEomnhwPHV$8xHCm7YlPbMTuyZq)J$12X~CDq2ch!MBagiN=3>|Q^Y6r^Ud#?V zVrM_v_-4Yv3x!e&X}(^I+e%*7OSFELRbyYz@8jBIzb>salP$IMwd*U@EpL>ripW;Y z7t0Vmw8u7=Gnsdp=TmjVMEO|p>YiqcQxC(oXPNl_T-$9lXGu)4CnbJ= zbh2)5!mX`4UOasxb1Be}#crv;U{~?1&LzCxWVV*)b=H4~Whv8e_~Mf5xKM_V^Y zGxfNAdl~Ig%{$M>(t+pZ?1~k>rAqrURWHxY@K#$DG$-%R_ZfP8q4(7nibt4wNWaMZ zzu-p>=cE(G`o$^Hd!_Cx=v>c=zc%^VksTLj|6r*PTk=aRljCZVwTHIfpRMd{S6tqe z@!Xg%eyeolmN)A|U+^r8t`FI{n!7bmT>8KD+?xI3OtID{YoFVSTwk~$e)lH16)ne9 z(yyB5-1O}ECccKDFa5?+zG;8?KVA247SMY&OD}Ndf(3oK%o0h$cW>`iyXew2ajW#2 zS-Mdc&lf#ucx4^D?%i4rk%m*VUQX7ye>}=1W`X7N4fXCu+ixUgUu9L!FMKRILvPhr z{Xoq{yw|NRWdb{--$!;ErImN{dZS%!`*&O4S{Zyr zeuq#i`|?$XY-a4+rlfpW?)sy<0+H^FrI%I)%IYe-kqPTC+?%g{y!FnO@^*FM^DJg- zq9@PIKbfd~_*Z!w*Ys(1o0gQ-eR4O*IUjG#_|4i_IHQkux6r%!UuU^YRQwqz+ZwV? zY16-iil^5EK0ElTUDaj@^XDXWfgusVIlJ&th~Uap~d7yL3h)~M}OaY z-ClHhCl{CHeva$KtCziSI@io7zVcoHYfhI_mj5M&=-^P^2GQizZA-5+e%mzPh3Sio zv)m2G*)xwWGM{ttmGe?Yt7!S7np$-)wyz1}%ThdH9;udPo;7Fd&1t5(6I5fDt@^`P zy4$g4lX65$Ja4>La8CjE$!e)>0Um10Mch0Y|GriW-kqdYy-H)ti+n9+miueU|IE{I zN#rkNdsJrU`{(_=*EKGRn>AG*X@p8%*FLf>?`d^0$9V-I#`N`d5B3VhCANMrPAigK zzHgf9d!ZXC*V7xema%aja_a6kOn&h+>a7#&v69s`*qrOxr^&Fc9g&$_BMC%n?)SaxL1 zCAJLbt|snY|2*rXrH1XHzAyTO;@Y36ZI6$?<#*BM=`s%mbAh+>>O9NEuCcC_nS4n9 ziW2)udF7JT2PZz!aJbHK;83C7G#%bUVPEnMEQAbJuXrAM_CR*;hTE1E8{BgZ7^XPO z8MB*7rZe`Dr)H!(HE{&p!JkbDvk^h@n=Q$5ob1FLt)S=k+Kl_u9nWoW6L^ zPd+8>m}A+FpWS4ZnY#hzab+BEI@5}wP%4t#CbNn`) zV3K3^v$nh)ZXG}6|NcGigPwP@2!Fpbf0ER;GcSUIu700*L05R3n~YN$1Lr zA8MUvekXU;--kU7zWNnE6F%SSJ9bX}!k1ezZ}XONL~r6-aA|7Iq~{AJia*}h^1F9} zvEHWn2NfpYf0%5rtbbRCMX$bRkbyX-(TSBs9kJ^)Zwu`Gwpp)uqr>{($4MuzJzTae zSXlJxwDSg!VvQz02ol_+QmOdF`@P7bm{8s~H2uiR~X5tH&};oZagYwnpmytQ{{ zNBC-ag-LDI2bH**oEQ{K(wE-9`m!n^DaMMEJvL@%kRxMau31l5wZqETH7jGR_nItM z6N?Rq`RAuBklN?_=Hs#KbygOqxm{Bmk`!`1oZqA~dd+_MevP=nBeh4%lWZ&+g;xB{ zaXfKLS=}YGdqdm~jfx`cnqL#Le>hw^yY#%#xeM9Sv)Y2&Cx@Awc7FL_>C|UkX@~zT zQ!W4b>vnFqru8JlZft#fqbmD*^Swjo-z)Sk57Ym{%le-+&%vO+pH**Fo&Eg1 z_IEGqFI|jzn`Oa;dDUnxF==dwP zS9eU5D4J=>nB~xAdQNzgFMkT)oGB-dlb> zQa(q-Do zDa!KaufI2L7 z>Ji@CdrVU~v@ge;&w0ih_351T*O|5l3iHK{v!ldUE$MAu{w!!tcYl1Mz1{RTZ@BjA z{wua{bgzAJ(PhW_yT`Zm1-)-nS>l;gb|o?G-NMY{v**wJ>%`LFQ^~#Gi%l_AKHOsdzSUbZ_vK~F0F zx*xh8`sTK7*>T>*MV0XlOZI2$Jo0@m_JU8QZ!7a5#+!2{?h;++7u4uyz3cD01OKEF z0-Mq@G){77E80&zfBX5uNnaTLrnHJA--wBNe`40bc}MvTbA{%ppK6WvJ{8?~V9o9L zzGuse=PE^~|5E3PvY4H9#la+|a{6pP<*>yovwBSI%Xcw*-fR7}JlXL{-%7DbZ#FLU zTAj|dl>cF`R>b=>KDpp|6P_Gy-fC#@uEO=es_9Pm&WJfbk3G-!Zr?^fn-{oCi%A9|~|XESG?z)S1I3iHiJ7Kr9AOt_(UyV$~5 z9>~ARU3PhcbEDe&6Unuby-&UOFL+XG`C@mT%k7lOOl9xHVw?3pDfW7Jvw z>bh|Fv&?t0(U~8l*G!+#Al1M#;alV38`n-0{(WpPOCggm2FJ5&jMNp+>pf*AYp_nVZWV-*t2iSr}RGZSBNH>c$WGt!1`f@nXtf7v&-YJyBBJ|2qa}5HkCKsn)1RN` zCuRkn4{(|ooA8ct{+7JN@SC|ScePiptKG%K82dr)gb=e?(5g=+80+%dv4|zap1wzFV(9IV>!Dge(Rlgb8B)@;gS0C z{_{DGJFobhKRD@|Mzhi;$BP0oYb7pT1o5pJcRz?f2hRx%EM?R9A>W7?h^Im`4V4KlVBP6^-H z4YpO5Z}qw1)RhGF-%KO5!!NR* zia-8yG%^`gw=cTns**Xs;ZWlPv*Oj)79ST*FxmX$ke{!4Rb+%&MABP<)7DWFw08$h z)^_c(y%N*bu*77e&tLncF0B4@iqpSczg{916o&6Y_PJWd;4 z8SOa2tu=?+*Qw25;$%CGr4GAIHqZMb7OHS{GUwOD^Dn5WdRASWWvKPg>YjpjN7AbP z%LaF5ui2R(AF^V_bpHPe7j?Kws~#=gd$w__f4Jy(&r8MWFa2Un3<@79P1%?&Ed8X$ z>`ds9q*hyf$-X8R-YdnYoq}G@sx;o|pzD2Q$J41wClapl7i@?z-?`6CanF;Nrx|3X z3Ymz9J`%~C)HEd~X3+uHvZVWtei2tAvm$QsdBk3?(idyrI5lqXyh-Q3#rvo-gr}_S z)^y&?aU$1bRi69VgLeWRJPkY=_en(W%<&a#47lCcJ+`LyNn7+y4vFQtBePZ@_>Y$h z%XL;}!9|7h``&&38=iaT_n(5t$DLBVW-(o=$k?aRt;h1a&Sv(F29t5Iu@dFsw0e)p1`(>uxMd7S_6z4&xT^X=bt9STQMlr}$U-mtLR z#>gS}*UYC<3Q^J9*0t83YSC$|2o>*ewZ_B*O_-|N0xZK|E_=oAvIn2;pa zx=4e`RFV|6$7h zN~r}bo=%5t+|=~7v%d82QwyKt#g{7IomgM7HpKS8!nHeQ-Cq2;w0xUo-(&G>*_PA3 zr#|=MmAVkjVa0!m^RP#^L}PCBQYp52+o@HvZhk$n;adGueW|@>tM^_x>U~1y;{KrA z`sqjH`X@6Uu)I6*PS~@E`QMBgRoE`e^Evyx+4soBS!-u`vtU8|EBBR6Q>Udblvrys z-_m{V*%xvJFLgVPh?|^A%94HkHt_Les58t>*j~I?@4+8zvg~J z!01WUTF;r>#hWwMOn7~D`jpJmABqA_OyKNeR937uV|~^8@4R~GD|LCU6W(*huY~Wr zyeEw@opEMudQ9Yv;->3f4;Ot8K6j=0zvWh$eHP7+?3XmR#6RNyx-D|b!=1l3Y&viK z-JpNM@dmNvDUWs@a?E(J>+Exb_bWekh?hGaWB=@DxhU|5XeD=l&fY`T_nywm`pn{x z+rH*~7gK;?nVtL6t=bxO3q4GNZa92BS#_vM?#%*)$fl^X3+t;*R-S*x8`3CvZd=%~ z|MH@$n^x>vbV)!+&D1-shx@g|>^p4ddu`o!@o(b)pPVKVvfpcO{zk{r>#I+x%y55d zDZ7S$%8w}@=Q7RzrpzB=^yr4=1^X1=9dFyWKAyjE;)Lm9l3MvsqkrUFh&-oq`~5w2 zzlprLpDr?;Rk3^j$NMR7#pejl)VY53Khhi;u3X8O_th^^Hl($Lz2-y`uY0Qh5vHq7 z6~)ZwbPR*VlNg0AMp#}tSDZd|i`kRjO>?i`ygp&qfw*<|LbFaOy-07>3!gL5e)1wI zc8zmV94jO*Nc^$Z=FvR1R!%iw%@dEl{d{*cLrSS|@vrHMnz?5l_WnAzPIR@~j&#pwcHW|%M||!0zWo=x_kSzf z9(MORE=iULx0jf(%?~m)f3RTfd9joG_7oPTtXnC$VBxLJt5+_ymr4~_s-N0sY{WVx z>sj5akIarKGY==ZY2~FZJ-q*G@r?&xBCoy8=VJ+WG^l5e-uo=NsU>@YA%FVp@>O>% z4!Nuj*w!UJPmKNHk1hL>-7$-u zO3$1nTb(z`%T8&Y$=4L+=aC|A`}I}(uDrs_w~OqLXy)$D&DO^`KM_nJlhr)iU( z{VhJUbG7U9%%xV_FN9j{hRUm(TaDfg8z0r-*cm=f8ObG|3@l3&r|q#{A>2K3ZK=JKK*OI)%7p_lhZo$69;cD zJTg~;tGhl|@{&uH$c2eXncpkcg}$07(R{6eHLz|Lw~;2Vg0TI@$h7ObFIfClD|ZMm zSovA&tmN8#OD<+=oBDj+aQld5Rrs6_Efq4BZxcPDygo?1wiT>x%IR=wYMF3SR*~=8 zN_LN}JJ+u~_v)|z2XC{AD22rffBa7?=NHWD`s}=0pz5u{x%Mk%9T`WbITUS_bo`(* zZwbp1ks~S&(!UlM%$%0O#CU)5-xv29dU8{Y>qAnmE&HKovY6-Ag!#_}#1ukaKUD8i z?(voTd$85#pvxYH1m^oKHEmMME3TigHe~wb=~(l}XR}Zn{~sML0Va!o>*o|qP|%eB z^!B^Y>+&$cEjv>h#3SxCA6%}qWqwu7!E1Nlwh6?XI``E((l;UL&w~^0*BAL2{bt$N zS?77A=Gvoc6a1=HOLI?tH97A1+gB=!Ug;K?c$%D2YPQ*TtmR=)chcd#%O_udXd3lz zrN$2?mK#ZCOB26NfAC0tj?AGIu_q>F`tEj#wdFnM>zw_}m+v!apV9JZxsYD;IQ*mM0`pD5@oSepKh8d(u5*X` zC*3nQrX1IvK6R?qS(7%6r(RL(#q*{vPCQaKt#iRTr`hGp)L!&+{){&cZV6n%7^a)h z5@a9sQ?+-&$sO19qn(4Dgf}f&S8(Uvtj&VfOD#Oxwzj-ZUbNz(*Dtm7Ui(bx*7Na-$ikPv&lUz*qE@KSir+|I+=l1I=`Iz5o4!d4+G)zlSw*jI;I} z>wVs_;g{jZX*Z`gnQD8!T5;*@$jsJ#@5n zSDRsIEhm(0_Rh44W6IA-b!D-~ejF$iOADx6zTftxUr|F)=CjTtN?`*rzGx>`1%8WF7gN_B6 z3rmu0dJ?zRyh>%9#j)|wY$3D4}1bzC)r$QNVavFS;5r{tcx~S zCY}uOG`qyH@o}h%X1)9R%-26S%e6(cSkK&Y({?gqir@UpuDj{3z|SeaHioTua+u?Q z)yfplm#NP~XRVy{wWev$ET{Tz@uZ4BE6x7AUC49Db$a2J>Aw5^TF$-Vr10f)x?V>? z;JY2F>l4{-Ev?_!rTsbfW0`{TEgR#iVy*8Ay&wO@th3zzwe3Hv5s&Tv%o3HG^AG4* zC@=dh$eA>YzyIG21L=D4z3CeBP8a9o=L;0phvv8JJA2RS&V!gE3{oc;yc3l+wXWxW>fx)pCCPgrOsNebB=)ZE*`7YnWh%~O5VI9*K z9rr(U+e3e=fz!@)b=(?ShHtk9rmo&o$nSP0Ojlc;WoyLG7blt4JP8r_={Kn-M`}~5 zgyvPQlQku3TAP@Bbk~-BnfWxSs6s5)LEYzLnRUs+_2Iv-tjx+hsl_4j@7Ce9Oy@lI9$2xvSfI?7ZKh1*BpWd{zO?P1HKk%D zY%2;%+b6pUdH8&_{Kf0C=8LfCB)e4s-P-SM;(6bfnCB~3UvU$d6Txzcm!MU>{)PPbLyvTC)PQlHaogZzD3Ss*E#v~{-4MNBCHC3ip+K|fBJB)_1~qJ zr46^rx7A&j3)#O^JomZS$=gP6j69F+_;lslo5^xtUDK?3rhIka=~23wVIZ=@rrGx5 zbC>hRfvy%wEOC;|{n=-yYX1E#GHt1XbclMVOh%)d-J68-meuWrry9P+JbCb&;q0TT zzjf+!H{AWsT))|E`MRP_ho7DJzf-g3bW~)a=c>4(JqlHKnQI@kyRYv_Y1y|dW>tr{ z@IL-y7c0L^lx!}1wBguyR#z7T-}=e_I(H@2d6Bw?E!URQAHIHg_G(+{kP27ZOD{j9n-g@ZeYeVJW zWcgHOmPNUq8|@=LvV7lC&35qq+}->BvY1D%&0@T*YtXCYs<=Nxgx#2L#$@;HX6t?C z#XaLLJ36uD)Pz6Ef#O@PRQdk>@@6ONO5xSBtTyzW&#(Ft6xdfW(_QY&e}mVPGz1Fl z;=6j*mi_d<^1yR;%8l1^b7IiGgy}bx&o`@Wd74u7$aB@i&sOz1(~o&He%#4jkaI)A@4`pNB&*pT3haOC zmx=7$?&tBxAvK!KCn0N1lz@otk-2v3mb!jFv9K*n@yMS^wrHb{`A$nAXz2jKz88SJMUcTSB5&2euuw62J4vV*Zh6-vPd2WNKH2-TlV)V&5g_WQmUPuIZIMvmoXqSy>m1Tr-W+Q>?y~&nw41%{dNY@vdspLO)oQ4G z!&<|PF(9#J!|shM1Ppt&vaeojb<6N_$?{}3pXYLw;VI7BzDrfT_@TC80mHGVb$^-u zRqgtr<0-$mF09x)f6Fb=N~L*zj4^7)^B>O9TP44Z{p9YR-Ooi;^R}30?e8l!3gq$U z(!H&>H~iHGZOeOEsx#N+tbJD%#{axSyzbD^yEBaiPaAcf=Kr%dIpH(2W~Ad(UGpjd z>vxTerwS$JmvOG>zR(dIwWSsNa2f8e=s@$>BV>nX9v znOF{ebm&Ur`=c>aOlMhwqR!E{xJlERRV%#rJ^8V{^Rw886^7a+!rA_eWgPde%P*Tb zQK0xi+y0+^Mi~CxyYHv7marqZ^4fUQsiC(QUTkl?4 zv458BM4cIHl8SCR&rSBe8hN0bal<0jQ=gPCeva9_NLv5D;*%)WwQHX9JbxC&b!y|R z{41X(PxzaD$o%4g+jpmKIV0N=rtjx}HF%PrLc??R$QcvU7u)e4y|SJ|(f(3CTi>4q z?$`tBnc=0S)=SI%n`MSzfE=JU{ApQ0>2F zAOEV$yCOctmQCb)u6d)_^r%aP=(j-e+O86Z7vFwfS+IvGsJ*7x@!Si(GX<}z-?ZQO z6n5-bgE&GYSvh~&7bIS+zxe5ivqpd4TK3C~FBLytt^Ggqtix@+?EmXl>8K<}3H;Z4 zEatW3grw15F0*%aT-IhPdV#!G-bTG~yCSx)G*tTgvKOm(*39r&rFTZVQT%6l#+KOh zz)e#M&L6qV^zv}ZWB%28)59m3%n{T2BBk)%>DOB>J2lOwy|ZFj0^E;j74LIzY-0bE z&blG~aGv(x-m@%%vx;U3eBX5_ch%DrrsnkrRVtcI>t7YW-S_pV=%guuJFkD6uvIa8 z_v()`rj<;;7!mM-vvQhI;Eug-e@tU;+u|;}C{%QbS%OEvvRsp4FdItA&E5wTX!zKlxTax82|RLfo!Ne9Y_A)~=i;IDf*5z1++%_coNd7WfoQ z?YJUgny_aBn_7y(gVgH4C&#|)Y^_{kS@3vHuh09U)K8-8uJHalnV-DImG#2;KU)u^ zSwEfG<>Nl5>UFgC^S1suFN9xvRXHXdo@eN8;dg89wius4O%*dWp8tD1|DIca&-I|} zABkv|r|fW;-nDT> z@kjR`&W+(GE`K_D_Z_Q>jDCGx>=q_}-5z@lo!Z}xA?A}eKCAw6<7Ere;wW*C90n!T z)~VNyt?{zwKeO1oBkXkPvH2Xbk3NY0IH>HiI_cq-{!Uf%EbFuP3|=u_bKb*!dw1eJ z|Fc=_=Ik~`iE6vgeA->N$wREcqPkl*%_1^-zV68hC2N@E_)DH%(-+v%QJy;|i(L*f(zob>G<1 z+%WTXO6zO6UOs!KSHD9)sD0s=Vwxo^a52z7lqDfUFGthg=*ZmdVOMtF`M1o)*^akk zTbj|FP2ahSv~I5Q^0^csxUT1hSy%l1rc-~_#Vol!Ux#<^X0|>2^Tk>3zYecfg)qEi zS#m@)uIZT7?;y1;x35Z{Pvff!ejT!B+UNWS3*PX}wK(n?y3u#v8=ElZfar(-J`v*s zrQcRd`Ye`wqOh@Nb;rUjFRsmG+ZCifWy8F(mHt+V{nOPmRSheJjgLeb zsWUlz%PKWHGec~{j$K~oro7N%%ZscqZx2}*^+`$l>CPQnBis&F%sAG1(Y8XavUTfp zxlE5psh+xu5W`!SzOnAOZXMEWcTD@0a!~HK{@9PNOHIm`9iPFLen`c1s+ba+xyR&; zWq-Ik{mpi{rmf7s*O5En)Tb+&Ns5ySzRXW~Bys1mSLea&8ZE)B51y~fzBl!xZXLGfU#Y!)q5i=) zufAHjx}MxubuLA<>7(|aSGOmMA2Pn3AacchW+(Tp?4J6<>@#>^<`f z*3)yoFuksmtk8CRP$fQn&at^hLU-jfTCX>R{@c4r{(8qF{r5lS3BQ;4$6aw}RbIdb z6@l_b=lm?Gw$&yHd+SANErUawTX&?Km7O87uF`4ItZUEe0-Hk5%-N9R*W{7Ddz;*w z;5Ew=+CILFV39Em?N}@R;S{?tpO3Ufx<+B{xB9#K@xrQGxKnC)tt%%utMAnCJQa3w z@w(@Er#!NmkN9dHR@yk>&-@vOm>1MeUFHA(jsGo0{Y5I$>)y{13An^9dRqL&HnUv? zJA=LjNpNo|)UjK4{5H3N+qy$%!ghJSo7SXu{psorD)VN$GVOcurcsF9^RFNK%(iT% z$?r6aS;MMYFT8sn^)EQNQBL?4Klk*dfveKZXWHZ?`)hRl4;MB~+G{!S&;qN=7A$k$ zw=I6S`b1T1ke)`=i|=c<2<+w5+Izjhs>q`@uBLTei9vB~=nj#$xqo@jy1o6et?*CY zsb?y$HD_HBefZ8TIFWsW=+8f&W`sTqTl>|ye9l%2EeEYFt61%l<1DyOT|4;ydfXE)fU|vTg`mRfduK|g*(G}S-kosn?e1cWCMRFFC*bSZ7|d9}*Pt=H zXJ7zhM$n~f5GicrGX@66XVLz*8WTcqHO`vyobS`e-w*!%`^WJ2?_Y+$fB!N3{{5HX z%Ed42&z}5z@b=BG2M_Ljf3RoAJNC0DKeKOM|Ar$r=vjVD;N!;FpeK#7flnF}!yh&_ zR6JD7OS#(^?f>363w((i6#q~GnvNZ;Fy5q`HCBS5t8 z&BjO&_Pf~_=5xI%((guNgzt?;b*02L)+Uo@v9j}ByV1#N$*d^9JBj@CwCF->bnh?u#xo&({i1*@=B zGB+pWT@!P21q%j5)d$u{C&EI)+|@`%DDM-xR#KhcMo!Im@=>02g3W^U< zss%+f*uNkSBn*t8V%AEwM27#M_pcN<{eip)W`JTE#DVx1;$0JSbH(A|Uq%KCX{a|% zOhEAr%6jG|5FwBNM9kb=dD!?@7V0^WPjTVl6u-pzS7n67@2G!ql-Gm1d}d^@7){TZ zrIxw*XnGz^&)^Uk&A*u0W8nG=qvaKr*Z}n*M$0R3Zp9=<^DmYZGhqGw(fo@gHb(O= zX10ZkjOJe~DP}bP!qW$B8KdPDmee;|Ug1e}qvaKr6f;_0;Yl&nlo~Csu%y1x@(NE9 z8!fM}q?kcpURf&;J-?u64ViPo;!U{Fp!cu2vMmv-sz6GHM|!qav}Ir$Y7~F zEaF$s+LkzAtw+>+;{dH^AiDlFR~IA>fY!Xg^C>RI;LpFXX@AhvKYk3GEXUbd35JPYacrQbd-|_~MEjxzYHgW+dV< zYczhzNuDI@8BNc4(jYaZM$6w~|7LQq@>6x75NwS{N z^o%DBQd4R)J(HX^$+yE?wqWJq=*4Tt(T%CF0tt~H#b)&#&L==M4yvop>7R6 z{09GGDTpjKC(%?4Vl83P+FFy?bZ?8v$Gw5mG$BoDfc zhER}E-@oSC@&f`Cw24^;MScI8SUV03upW^3wN`bp8W`ZHZcQjPgU(ShvLouAGh)kU zb0te~c}{o2%0-ok0*mVD*;>_&?p_63Xyr06@jGz-9gz4nAN4OdxzU^$p!_=;zci0o zhy|nZi>)@MdVMsSo*~JN=HzI4#s)^yGmeBubo+U|tUuT0Y}UGSrnA zEuXO^z|rv>9I0%yyuy}TM$0Q4$%XpDqvaL01UOn=;Yewt}{>B)m7D$F@T!72$APE4ITel*;`sGsu*KkRcQ^ncN2Sr zqKOU}|618vi<(>GSo~;iE=A-$vO~qcPA;k@kaN?p6@Xy>5_5hN!_e?AqrJ5%*tgg` zYXTa7k+mgiz2ngEFU-3*d^_y?>twA0id~%EH8D3IPVsAHsfgdZ!_2=HTBhbW3T9}O z53BgKvDPug@7-Y)zgD)O%nOZ39Mo`%UmI&ZLeV>{;@3i%pm&Fpf2}NK2_Kw1jMB4> zH4!_8hLL~mjd67nkjk!M8t=4WmND z46Us-K`ayEDmuhin)J`PUlib0ceOEs!tGO|`A9 z^}y-TTAj%8Vg?2WSCA*oO_{{RK)Dx^M+T37ovgJXezUfO_|4p0)6$v=w29o@T-(yx z735!YQ{w$=1s>ioH#3LUzaZ1mygP9HK?VjZYdw&Q%+0NBtyLj@GqjZ) z*8rKD8abd%?BM2FS*wG(NT9L~gK1peoo@ z)tbopT2QouwPP)(27!MWEObEihqaWY6{IO>tzyYw2X1XyE4x`a=zx4~Eo*57@(GdH z$`V{B!F-2FlN7(8?1pIsiU`r`RTvl;?5)A&i;4w<6Q~9T7fnv!F-B7bTPr7Pkk_r1 zh^~&nL1N>m3NEuy9EHRo$-kiD6iF{OCMo{4vQ{!TH#M@hXRxwXH#Ijk2eUx#1&g^T zSeu($8{32ZK{R1ysS0kj;BYHR{-tvKGT16xn_H_}TQOSMikg~RD_dJJFxaYEo122f z7%XH=&8>Aw$-dw~v9dK+0_789tUe~ezt%*aH$r^cht)#98%KsP+w3a5;zi!~UMhpW`1x(HLh>u?eCu>z}h;kci zC2I%pIs+SPMW~pSwW_rR$yU|pQp zz`!8Kz>w|Dz`&ruz>ou?l^7UuK3%fiRItjsRpHHa5&^Y;p{YpipOE zgoHYnW@lgk(=g>AH!vZY!3=UEjE_u%G=TUZ+BG7?gMk4Y4*U!Z3|R~e3_?Z*h8DU8 z7PhA>U;@Q4S85&u0~0R;1A}Nreo0h^4H+#EZbjMT&wJDc><%#>6+8~p~?hRsR&DV2=^hIS#T#U+n35(`RFixdnS zei+&**c3GEE=WvIZCF@fr=Vbyn^a)c(3w<}nwYKM_`LC{QRDN*XAKJ)pEo|Y$uLrA zK3!az)WoLS{L!fSd-Esb=1-0Njs1-s%`+SOTdPf4>s#wvEA-nZ>v!C=V`yt&X<=aS z^mB<|U|=|a6mXzb5FbFxDHs_3zJ#vjU_p`xF+nRFK=eRixO+n!-9hdLt^8nQWMpJu zVq{`qW@KStVdP*CWfWi#V^m-eX9O)6Vqj!6W?=Dji3nkMgW+$Of1ZF=B7yu2!UN?w zV(eu!;9s$)p@Gpb{|V#X{)VPzMk9H~1smrzHZmH^GhV!~sj-m(?AHSf#~Cg%-0B0R zErn!Q;zH#bO$N&rmnOj!80i{f5i??72yzVut$G5jO9F+NL~&+Ss;#q&T3KpQab|v= zt)W^;WkIT~p^be-ZjJ&>RLM}!KuIArFF8LYGcVm%sk9_b*FwqO&L%gtBrzqiBvGLv zHz%*yD!(AjRw<*Tq`*pFzr4I$FEgbeO)tMFUEj#Sz+6ASAWaFXFeMqTuAsCi2dpL~ zSwA%=H8(Y{q*&ij&rlz#7OoJxfe<$+tItx{fcg_503W=U#pQEHk(W=c_NnypfBYH~?tejaF@ zl3oQU>nkY~XQ$?5rr0Whjl!wi2wk}$$Y$Kiumh$8T~2_tC#5*Rar_-@W% zH6ozhGLSt{AhnE&AQH0U3e3^~?>}OM>^lk$at4_T8fP#7jYS1`GqZpUU|={|!tR@& zxLOCq17XlMtK7`oRM5CXVnIPpW^y8^+pV8kP@1G&m01AM$;80{)~Wts`K&FV%}b07 z3}Orn48E=*j=G+HZu+3Ueqv@`YLQ+=Zcc39!K}ju0xs|Wac#Vwq`g;E@uq;sI?XMA z8A9WBD_vT*;mM>wwV~oZxA&ek%1`@J(Ct|BXp-&Z#^di8m`;9tk!kkfTUFltgcs6p zXLNmSIc=Z6R8u-aJSb=L`L3KJYr2BxOmHj9cG1e(ywaBCm)n)g+{H6%4*XgC|Id*v zZ5Py{?RaARjz1Uw*?WCM-(?o1M=x@t-*NKZn9@|f?MmdNkG4;{cCMcLapAY7JBPOZ z30?NoZfX8L22_78F}(BdG$RAUY!(IvK?Vi}e^;k~V6Z1s^Gfvc3)0qxoXwkKAhG9t zaKyf_1ZVSB1%;rg-se2eP26Z7p`D;HL#Oh0jl`~;%k%F#tG49W%#%DHv7|gWc(VBm z_Peus*zA_G^yEx63w3jkt}@(vx;#_;$?6pe&TYm;Cclnz%nM6cqi6a>^6$NE>-oEc zmY6!b@n0+BOg{ej;`LS9f48lVI8k}z*19D>`zCB*)Sj{->E^@--??{(EtsSpWBzUH zVU3du+Su;$=zL&)CKBL$a*5b7sgEp{Gp5Wv@6WM1m$!0l_cC1*!y+Xyw$}$vU*ha6 zdswymht~sM+te)wW4v`+k8)(neNy;lVK-5DW~6zqZt$Y3Vy}J7PB70iTzvjK|92Dl z>d8He!#pc@-@kw4_W^F#HG67B*y99U4t0lAF5V|*^DC@KeM{i_qGHw~9Wy@%hW{#& z*O<6=<2lRk`F|Ot)7Ke)+q`9|V`52X;M$y9PLFMpTc*fV9canXt~Jkf$b5M7JKt89 z>sPZSaz0Jb75K=Sy!4InW#to+M=kmPyi5?>^vUjE%1!yO|60cS@s~LMuN3?z-#fj# z{ikTrQmL@wYi?F0w-^q7nQnIO&jO{WqFwu+AJ=0%yt+|;erE79pPh-V-^(O7md@Dp z)qnDPJG7Yh=TcsJ60{ML5xn^k8uKBk6(#x@BT~722mKBk@U*?J zl?iM<8W{yT-q*sUa<52P-J93aC#@d6f8YDihF9b?;t%2R(uBrD|ci{o>I=DldGhI7tiDH);4ie*rNUVc67?# zhnZ@||Gz(dKKpVycYM{BW$%NW7JD=8T3wa8%SzS#yI|bpUXCBG|E8S${#Q)u`RCu$ zZ{MwDQ*o*3H9iva>_eHle3^rC*N$2hMuyBe(s=^QGrN{qygDxR)OcPR<5J^K+ucuT zDm69y-&H&R+%jzg-$^NsH8ae2h16L*j?%TzGk#F9PrmA_?Q#i;sY2OVm&Mkt=UU9= z)pF%pqpjSkWioT*8e6YSKEr(Ylk}-5=QD*rjvu@xlXJ9itHp;q?9YEaVn+=oKKl|| z(Dp|Od?^Jw7@6C5Fz*l~rRbL@8R?aHHM?|g@$6ZsdHF$vM~3!Bv#hgR`TJ8+x6jS_ z`)l9*uR2NPyQW;4LTClZmo0q+;=@fAvNS*S>nl}von6Z z<@;|^`>S7PvWnzXhSjG;&3IP5e6!_Hp;7DiKNoIAFIi%?PTeA`RsH(GWQLRzef`S#iH2qTeS7-vU75t*2~Y1H z?wZiLKf_$-@Qe&K#qHiUP8Lij(puhpubyihY4bXBpR)b&>*qu>Tb7h%%yoW#V59qN zG52YC?2DxWMBlm35`5DuuxMh!p2`*S!i+qvE14E9=$pJcGSbWLcHHf6M>hJNP2#)$ zW@U0#qh;!?Df#L(G7^_p=i0I#6?&M&cW}+Ogim?iuS1TxvR!0-xIli%fk&pdJ1e8K zesm}&hAxhu=Be=MoP($QlussKRF6Em!0y6&FL`&9(!_50DOs6iT z?y@P_7@vKznPcHT#cF+)4YDsRgN zI;S3VteV^V-S*CX#{9VFe|Ao=mdsb+HJ_A!X0kwf^L~lbaz{4(H=FiVJ~?uFGVkkc zS^N2J{fXHl9^lQ$1l}snfV~|7Zim2$TxhETtczQO0aqIWqyaP;!oXmKvqgb!273LB zFhhwEOKpv=9lel8XqRDzX-6yX3?Z`$=q90;l?apMS#X$yTymlthhC;2jB{hfWgK>g zq32A5NnUI)lc4!Dz?&7cF`j{)ft}$xBLjmQs7=V=?CTl=*^te;&ClQ2$B`?{NY9eX zH!+#ZfXg#4EnlOcC^Ho>Eil57={S(1~g00m0u`?!^O zxrj8!C9woWixm_Mz`z)bb%v%^3Qnb&IiP7Z zg@7PuunsKh49u()f>Mj~bIL%*W>glW7Ug8-Wfx;nYGR3GWJzLDPO3tF8f+>I92B8J zK31T4FHjN5%f%I*Sd^EUmktlja6=OVLo+J{=lrtNB89yC5{2S|)a1;x%+wUPb&2Vz zxrqguR-P6H1_o9Ne)$RkiRq~dxrqe|Y5ApjDGHf+3MCn-3Q76-*>Furv1JM}KDVH> z1mvAiKTl_W7gvR%#Ju#>VujM;RD$}=tQ6e9_MqssQgBKv&P-PDNi50CQ;0S)(9<(_ zjm2WWp*d0*!Gc{!p(r&uzbHi^IlnZo#7Y4cZ-!V5Ft)T(aLdd~%uy&VNh~Q=&{Zf& ztte4Q&d)6GBQsAy6%_dSMVaXk#hF#9npO%5CKh_;7OGgxH8HSK2+2rQ zNXbtw1N&%LJ;b(bZOMxba5JNzzPa!S8C^xYLHj}H6S*#Fd zhQ(rILo0>gL~!bYg$FiO##Z1|npB#ZQ=(9wS(2d;?il3f>E|A-h($Rl6~R+?YFnJKsux}l+!LU>UoI0+F@YG8?ME_msN0%$%KTmGRm zY7O+v46sHmfmpG?5+25&vLwh^0TSNDrOC;u#l>l*IXRV>icP^eQNgjGpeVm0GZ$21 z1(zh|r6d-mDEQ_lWh%I&=46(o7J*9yQ1~l==KdAn>D;btGMnl=4BUV7iuz;51u!8C_kT?j#)PZQo z5i1OTAP3_NmLpa^?Ax=R#z(9$j2^23ivLkO8UmvsFd71*Aut*OqaiRF0;3@?8Umvs zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O!!ZQF z$4-2Mo<#vZb>b=Jp%aQO{>~wh0j@7f8Y==qoqRl<6_j-K^}~&w_4QpsTyA)T`1&Y- zPLR-d^;6z zkIwm%-s6K)jw8tmg&3Ml=AX=Oq%iqrG3bDd_>%nO_{@}eL#4*~lg}2HCUvFhPX1^# z`FqpNDdJNEjHd`UJ#Tt$)b!lM7{ureY{AFZh!r#!)(69$4U}|K_KcTU);Sfx~!q}L9aZ^(R<4&;O z4=`M0c*MZaAE2wRuNCc(n3-a$ZlE4J37H@2?rESNI~iHXFvQTrKs^@MF-316YpLMJ z6rraVQoKeBwdmfdrBckGbOOS( za5S~dMD?2iS7T!Xk zHFBUl#5jbGtO9Rq#CK#B8x#2MGQ_b}A29q5D-S`(b+Lfb0|EPUB converter (internal/ebookconvert) via wazero. +# +# The output is architecture-independent wasm32 bytecode: build it on any host +# (CI is amd64), run it on any server arch through wazero (pure Go). +# +# Build + extract the artifact: +# docker build --platform linux/amd64 -t mobitool-wasm tools/mobitool-wasm +# id=$(docker create mobitool-wasm); docker cp "$id:/out/mobitool.wasm" \ +# internal/ebookconvert/mobitool.wasm; docker rm "$id" +# +# Pins (bump deliberately; the converter cache key includes these): +# wasi-sdk 25.0 · libmobi 906274205c11944b628da1c553b255acb1af7c55 · zlib 1.3.1 +# +# Proven build config (see ../../docs/superpowers/specs/2026-06-17-kindle-epub-conversion-design.md): +# --with-libxml2=no -> internal xmlwriter provides OPF/EPUB support (-e) +# zlib built to wasm -> avoids libmobi's bundled-miniz duplicate-symbol clash +# with mobitool's own miniz (EPUB zip) at wasm-ld time. + +FROM debian:bookworm-slim AS build + +ARG WASI_SDK_VERSION=25 +ARG LIBMOBI_COMMIT=906274205c11944b628da1c553b255acb1af7c55 +ARG ZLIB_VERSION=1.3.1 + +RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends \ + build-essential autoconf automake libtool pkg-config git curl ca-certificates xz-utils \ + && rm -rf /var/lib/apt/lists/* + +# --- wasi-sdk (clang + wasm32-wasi sysroot) --- +RUN cd /opt \ + && curl -fsSL -o wasi-sdk.tar.gz \ + "https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VERSION}/wasi-sdk-${WASI_SDK_VERSION}.0-x86_64-linux.tar.gz" \ + && tar xzf wasi-sdk.tar.gz && mv "wasi-sdk-${WASI_SDK_VERSION}.0-x86_64-linux" wasi-sdk && rm wasi-sdk.tar.gz +ENV WASI=/opt/wasi-sdk +ENV SYSROOT=/opt/wasi-sdk/share/wasi-sysroot + +# --- zlib -> wasm (compile sources directly; zlib's configure runs target binaries) --- +RUN cd /opt \ + && curl -fsSL -o zlib.tar.gz "https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz" \ + && tar xzf zlib.tar.gz && cd "zlib-${ZLIB_VERSION}" \ + && for s in adler32 compress crc32 deflate gzclose gzlib gzread gzwrite infback inffast inflate inftrees trees uncompr zutil; do \ + "$WASI/bin/clang" -O2 --sysroot="$SYSROOT" -DHAVE_UNISTD_H -c "$s.c" -o "$s.o"; done \ + && "$WASI/bin/llvm-ar" rcs libz.a *.o \ + && mkdir -p /opt/zlibwasm/lib /opt/zlibwasm/include \ + && cp libz.a /opt/zlibwasm/lib/ && cp zlib.h zconf.h /opt/zlibwasm/include/ + +# --- libmobi + mobitool -> wasm --- +RUN mkdir -p /work && cd /work \ + && git clone https://github.com/bfabiszewski/libmobi.git && cd libmobi \ + && git checkout "${LIBMOBI_COMMIT}" \ + && ./autogen.sh \ + && ./configure --host=wasm32-wasi \ + --with-libxml2=no --disable-shared --enable-static \ + CC="$WASI/bin/clang" AR="$WASI/bin/llvm-ar" RANLIB="$WASI/bin/llvm-ranlib" \ + CFLAGS="-O2 --sysroot=$SYSROOT -I/opt/zlibwasm/include" \ + CPPFLAGS="-I/opt/zlibwasm/include" \ + LDFLAGS="--sysroot=$SYSROOT -L/opt/zlibwasm/lib" \ + LIBS="-lz" \ + && make -j"$(nproc)" \ + && mkdir -p /out && cp tools/mobitool /out/mobitool.wasm \ + && sha256sum /out/mobitool.wasm | tee /out/mobitool.wasm.sha256 + +# Smoke test: convert a bundled libmobi sample to EPUB using a pinned, +# checksum-verified wasmtime — NOT the `curl | bash` convenience installer, which +# is documented as interactive-only and unsafe/non-deterministic for builds — so +# the build fails loudly if the wasm can't actually convert. +ARG WASMTIME_VERSION=27.0.0 +ARG WASMTIME_SHA256=74678f6ec49d8b858ca5181d5492b967245f6c072b5763ea14a75eee1ad3c2d7 +RUN cd /opt \ + && curl -fsSL -o wasmtime.tar.xz \ + "https://github.com/bytecodealliance/wasmtime/releases/download/v${WASMTIME_VERSION}/wasmtime-v${WASMTIME_VERSION}-x86_64-linux.tar.xz" \ + && echo "${WASMTIME_SHA256} wasmtime.tar.xz" | sha256sum -c - \ + && tar xJf wasmtime.tar.xz && rm wasmtime.tar.xz \ + && WASMTIME="/opt/wasmtime-v${WASMTIME_VERSION}-x86_64-linux/wasmtime" \ + && mkdir -p /smoke/out \ + && cp /work/libmobi/tests/samples/sample-ncx.mobi /smoke/in.mobi \ + && "$WASMTIME" run --dir=/smoke::/smoke /out/mobitool.wasm -e -o /smoke/out /smoke/in.mobi \ + && test -f /smoke/out/in.epub \ + && echo "SMOKE OK: $(wc -c < /smoke/out/in.epub) byte EPUB produced" + +FROM scratch AS artifact +COPY --from=build /out/mobitool.wasm /mobitool.wasm +COPY --from=build /out/mobitool.wasm.sha256 /mobitool.wasm.sha256 diff --git a/tools/mobitool-wasm/README.md b/tools/mobitool-wasm/README.md new file mode 100644 index 00000000..100dcfa9 --- /dev/null +++ b/tools/mobitool-wasm/README.md @@ -0,0 +1,64 @@ +# mobitool.wasm — Kindle→EPUB converter module + +`mobitool.wasm` is [libmobi](https://github.com/bfabiszewski/libmobi)'s `mobitool` +compiled to `wasm32-wasi`. The server runs it **in-process** via +[`wazero`](https://github.com/tetratelabs/wazero) (pure Go) to convert +MOBI/AZW/AZW3 ebooks to EPUB on demand. See the design doc: +`docs/superpowers/specs/2026-06-17-kindle-epub-conversion-design.md`. + +## Why this shape +- **No cgo, no external binary.** The `.wasm` is `go:embed`-ed; the Go build stays + `CGO_ENABLED=0` and cross-compiles trivially. +- **Architecture-independent.** wasm32 bytecode runs identically on amd64/arm64 + servers through wazero. Build once (CI, amd64), run anywhere. +- **Sandboxed.** Untrusted ebook bytes are parsed inside the WASM sandbox with + only a per-conversion scratch dir mounted — a libmobi memory bug on a malicious + file cannot reach the host. + +## Pinned versions + +| Component | Version / commit | +|-------------------|--------------------------------------------| +| wasi-sdk | 25.0 | +| libmobi | `906274205c11944b628da1c553b255acb1af7c55` | +| zlib | 1.3.1 (compiled to wasm) | +| wasmtime (smoke) | 27.0.0 (build-time smoke test only) | + +License: libmobi is **LGPL-3.0-or-later**; shipping the unmodified compiled +artifact + this build recipe satisfies the relink obligation. zlib is zlib-license. + +## Build config notes (validated by spike, 2026-06-17 on linux/amd64) +- `--with-libxml2=no` → libmobi's **internal xmlwriter** provides OPF/EPUB output, + so the `-e` (create EPUB) path works with no libxml2 dependency. +- libmobi is built **against a wasm-compiled zlib** (not `--with-zlib=no`). Forcing + `--with-zlib=no` makes libmobi vendor its own miniz, which then collides with + `mobitool`'s separate miniz (used for EPUB zip creation) — `wasm-ld` rejects the + duplicate symbols. Real zlib for the library + the tool's miniz for zip = no clash. + +## Rebuild + install the artifact +```sh +docker build --platform linux/amd64 -t mobitool-wasm tools/mobitool-wasm +id=$(docker create mobitool-wasm) +docker cp "$id:/mobitool.wasm" internal/ebookconvert/mobitool.wasm +docker cp "$id:/mobitool.wasm.sha256" internal/ebookconvert/mobitool.wasm.sha256 +docker rm "$id" +``` +The build runs a **smoke conversion** of a bundled libmobi sample and fails if no +EPUB is produced. `mobitool -v` embeds `__DATE__`/`__TIME__`, so rebuilds are not +byte-for-byte reproducible — rely on the smoke test + recorded sha256, not a +bit-identical rebuild check. + +## Runtime behavior characterized by the spike +- Converts MOBI6, KF8/AZW3 hybrids, HUFF/CDIC-compressed, and unicode samples to + well-formed EPUB (`mimetype` first = `application/epub+zip`, `META-INF/container.xml`, + `OEBPS/*`). +- **DRM:** `mobitool` prints `Document is encrypted` to **stdout** but still **exits 0** + and writes an EPUB (garbage content when it lacks the key). So the converter must + capture stdout and validate the output is a usable EPUB — exit code alone is not a + reliable DRM/failure signal. + - ⚠️ **Brittleness note:** DRM/print-replica detection matches the **English + stdout strings** mobitool emits (`drmMarkers` / `printReplicaMarker` in + `internal/ebookconvert/converter.go`). When bumping the pinned libmobi commit, + re-check those messages still match — a wording change silently downgrades a + DRM book to a generic "no EPUB produced" failure (it still falls back to the raw + original safely, just without the explicit DRM signal).