1
0
mirror of git://f0xx.org/android_cast synced 2026-07-29 04:18:09 +03:00

docs sync

This commit is contained in:
Anton Afanasyeu
2026-06-23 12:12:55 +02:00
parent 2adfb2fe2a
commit 0a3b1c346e
42 changed files with 826 additions and 122 deletions

File diff suppressed because one or more lines are too long

View File

@@ -483,7 +483,7 @@ endobj
endobj endobj
81 0 obj 81 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103621+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103621+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115602+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115602+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 On-Demand Remote Access \(Reverse Tunnel\) Proposals) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 On-Demand Remote Access \(Reverse Tunnel\) Proposals) /Trapped /False
>> >>
endobj endobj
@@ -1052,7 +1052,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<f661f3d31db877cde66dc5c3877f072a><f661f3d31db877cde66dc5c3877f072a>] [<11e0c9648d0e34b6b5fc15e51a46b34d><11e0c9648d0e34b6b5fc15e51a46b34d>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 81 0 R /Info 81 0 R

View File

@@ -265,7 +265,7 @@ endobj
endobj endobj
42 0 obj 42 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103621+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103621+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115602+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115602+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 Email agent config & 2FA / mobile auth flow) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 Email agent config & 2FA / mobile auth flow) /Trapped /False
>> >>
endobj endobj
@@ -537,7 +537,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<0781db1091e119408594de96d3ab2a27><0781db1091e119408594de96d3ab2a27>] [<9ce023989e289f6819633476a5f8acf9><9ce023989e289f6819633476a5f8acf9>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 42 0 R /Info 42 0 R

View File

@@ -208,7 +208,7 @@ endobj
endobj endobj
33 0 obj 33 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103621+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103621+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha priorities \(2026-06-08 renumber\)) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 alpha priorities \(2026-06-08 renumber\)) /Trapped /False
>> >>
endobj endobj
@@ -418,7 +418,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<a3cc5b4e2ffe782a6de46cae27a9a929><a3cc5b4e2ffe782a6de46cae27a9a929>] [<c9bbbceb6da4cf0561df83389636ce40><c9bbbceb6da4cf0561df83389636ce40>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 33 0 R /Info 33 0 R

View File

@@ -203,7 +203,7 @@ endobj
endobj endobj
31 0 obj 31 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (BE services & infrastructure \204 validation map) /Trapped /False /Subject (\(unspecified\)) /Title (BE services & infrastructure \204 validation map) /Trapped /False
>> >>
endobj endobj
@@ -385,7 +385,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<fb9bfca085b4cc71dbd16a6ec3c9802f><fb9bfca085b4cc71dbd16a6ec3c9802f>] [<8dbfa9f2eeb85b942477caa11fa4018a><8dbfa9f2eeb85b942477caa11fa4018a>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 31 0 R /Info 31 0 R

View File

@@ -137,7 +137,7 @@ endobj
endobj endobj
22 0 obj 22 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Stream dump \204 developer debug recording \(FR 0.1\)) /Trapped /False /Subject (\(unspecified\)) /Title (Stream dump \204 developer debug recording \(FR 0.1\)) /Trapped /False
>> >>
endobj endobj
@@ -277,7 +277,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<5414717d95a706704816768ef651c305><5414717d95a706704816768ef651c305>] [<cc05b2c62200d6b1af79eff88bcbad38><cc05b2c62200d6b1af79eff88bcbad38>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 22 0 R /Info 22 0 R

View File

@@ -275,7 +275,7 @@ endobj
endobj endobj
47 0 obj 47 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 exposed services catalog) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 exposed services catalog) /Trapped /False
>> >>
endobj endobj
@@ -589,7 +589,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<821a3e74e00ad5b4b9fe220c5add2f64><821a3e74e00ad5b4b9fe220c5add2f64>] [<82e09bcb7eb13164861aeba124022201><82e09bcb7eb13164861aeba124022201>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 47 0 R /Info 47 0 R

View File

@@ -0,0 +1,258 @@
# PostgreSQL, TimescaleDB, and platform DB adapters — comparison
<!-- doc-meta:start -->
| Field | Value |
|---|---|
| Author | Anton Afanasyeu |
| Revision | R0 |
| Creation date | 2026-06-20 |
| Last modification date | 2026-06-20 |
| Co-authored | Cursor Agent (project assistant) |
| Severity | medium |
| State | advisory |
| Document type | technical |
| Supersedes | — |
| Design review | — |
<!-- doc-meta:end -->
---
**Document type:** Technical advisory (not a DR/SPEC)
**Context:** [repos reorganizing SPEC R1](specs/20260618_repos_reorganizing.md) approved; `ac-platform-db` planned as migration-only repo; production today is **MariaDB on Alpine BE** ([INFRA.md](INFRA.md)) with **SQLite** for local dev.
**PDF:** [20260620_postgres_timescale_db_platform.pdf](20260620_postgres_timescale_db_platform.pdf) · Regenerate: `bash scripts/build-all-docs-pdf.sh`
**Related:** [GRAFANA_vs_others_graphvis_pivot.md](GRAFANA_vs_others_graphvis_pivot.md) · [specs/20100612_1_scaling.md](specs/20100612_1_scaling.md)
**Documentation index:** [README.md](README.md)
---
## Table of contents
<!-- toc -->
- [1. Executive summary](#1-executive-summary)
- [2. When SPEC implementation can start](#2-when-spec-implementation-can-start)
- [3. TimescaleDB fit for AndroidCast](#3-timescaledb-fit-for-androidcast)
- [4. Platform DB adapter layout](#4-platform-db-adapter-layout)
- [5. MariaDB vs PostgreSQL comparison](#5-mariadb-vs-postgresql-comparison)
- [6. PostgreSQL vs PostgreSQL + TimescaleDB](#6-postgresql-vs-postgresql--timescaledb)
- [7. Migration effort (MariaDB → PostgreSQL)](#7-migration-effort-mariadb--postgresql)
- [8. Verdict and recommended path](#8-verdict-and-recommended-path)
- [9. Changelog](#9-changelog)
<!-- /toc -->
---
## 1. Executive summary
| Question | Short answer |
|----------|--------------|
| **TimescaleDB worth it?** | **Yes, selectively** — for high-frequency cast/WebRTC telemetry and rollups, not for tickets/users/RBAC. |
| **Split `ac-platform-db` + dialect adapters?** | **Moderate effort** — clean architecture for SPEC Step 3; **do not** run two production engines long-term. |
| **Pick one engine forever?** | **PostgreSQL (+ Timescale on hypertables)** is the better long-term bet for analytics, cloud, and schema rigor; MariaDB is fine to **keep through alpha** while adapters are designed. |
| **Verdict** | Design **`ac-platform-db`** as dialect-neutral migrations + runner; ship **`ac-platform-db-postgres`** as primary target; keep **`ac-platform-db-mariadb`** as a **transition shim** (alpha + parity tests), then retire. Enable Timescale only on **stats hypertables** in the same Postgres instance. |
---
## 2. When SPEC implementation can start
**Green light** once all of the following are true:
| Gate | Owner | Notes |
|------|-------|-------|
| SPEC R1 **approved** | PO | Done |
| `git://f0xx.org/ac/*` bare repos exist and ACLs work | PO | Done (per PO) |
| Monolith `android_cast` **read-only** for day-to-day dev | PO | You are setting this — avoids drift while extracts land in `ac-*` |
| Step 1 verify: push/pull smoke test to `ac/ac-docs`, `ac/ac-scripts` | Agent/PO | 5-minute git check |
| Write path agreed: feature branches on `ac-*` repos, not monolith | Team | After R/O freeze |
**Recommended first implementation slices** (SPEC §9 order):
1. **Step 2** — push `ac-docs`, `ac-scripts`, `ac-platform-web` from monolith history (no runtime coupling).
2. **Step 3** — extract `ac-platform-php` + **`ac-platform-db`** skeleton (this document informs dialect choice).
3. **Defer** domain MS splits (Step 6+) until platform Composer packages publish and BE can `composer require` them.
Monolith can stay **deployable** for production until Step 8+ per SPEC; R/O on the legacy repo does **not** block new work on `ac-*` repos.
---
## 3. TimescaleDB fit for AndroidCast
[TimescaleDB](https://github.com/timescale/timescaledb) is a **PostgreSQL extension** (Apache-2.0 core; some features under Timescale License). It adds:
- **Hypertables** — automatic time partitioning (chunks) for fast range scans
- **Compression / columnstore** — large retention with less disk
- **`time_bucket()`** — idiomatic rollups (hourly/daily session stats)
- **Continuous aggregates** — incremental materialized rollups (better than plain PG materialized views for append-heavy series)
- **Retention policies** — drop or tier old chunks
### 3.1 Where it helps in this project
| Workload | Current shape | Timescale benefit |
|----------|---------------|-------------------|
| **Cast session graphs** (`graph_sessions`) | One row per session; dashboards aggregate by day | **Low today** — row count is modest; MariaDB indexes suffice |
| **Live cast heartbeats / WebRTC stats** (growing) | Sub-minute samples per peer/session | **High** — append-heavy, range + `GROUP BY time_bucket` |
| **Remote access events** | Event log, time-ordered | **Medium** — compression + retention if volume grows |
| **Tickets, users, RBAC, reports** | OLTP | **None** — keep normal relational tables |
**Founder pitch (accurate):** the win is **fast analytical queries over large time-series** with **compression** and **incremental aggregates**, not replacing your OLTP database.
### 3.2 Practical adoption pattern
Use **one PostgreSQL instance**:
- **Regular tables** — identity, tickets, devices, reports (standard Postgres)
- **Hypertables** — e.g. `cast_stats_samples (time, session_id, metric, value)` after live/WebRTC stats land at scale
- **Continuous aggregates** — e.g. hourly `avg_kbps`, `packet_loss` per company for graphs UI
Do **not** run a separate Timescale-only cluster until traffic proves it; extension install on the primary BE Postgres is enough for alpha/beta scale.
### 3.3 Risks
| Risk | Mitigation |
|------|------------|
| Extension not on Alpine/Alpine PHP image path | Use official `timescale/timescaledb-ha` Docker on `be-data-1` or managed Tiger Cloud later |
| License on advanced features | Core hypertables/compression sufficient; read [Timescale licensing](https://www.timescale.com/legal/licenses) before depending on TSL features |
| PO single-engine ops | Same backup/replica story as Postgres; not a second DB product |
---
## 4. Platform DB adapter layout
Proposed repos (extends SPEC §6 P1):
```text
ac-platform-db # Contracts: MigrationInterface, SchemaVersion, portable types
ac-platform-db-postgres # Postgres + Timescale DDL, pgsql migrations, pg_dump helpers
ac-platform-db-mariadb # MariaDB DDL (transition), mysql migrations
ac-platform-db-sqlite # Optional: dev-only adapter (today's sqlite path)
```
### 4.1 What `ac-platform-db` owns (core)
- Migration runner (ordered files, `schema_migrations` table)
- **Portable** migration IDs and naming (`001_users`, not engine-specific paths only)
- Dialect hooks: `boolean`, `json`, `enum`, `autoIncrement`, `timestampMs`, `upsert`
- **Duplication wire** (switching engines): export/import interface
### 4.2 What dialect repos own
| Concern | MariaDB adapter | Postgres adapter |
|---------|-----------------|------------------|
| DDL syntax | `AUTO_INCREMENT`, `ENGINE=InnoDB`, `ENUM(...)` | `SERIAL`/`GENERATED`, native `ENUM` or `CHECK` |
| Upsert | `ON DUPLICATE KEY UPDATE` | `ON CONFLICT … DO UPDATE` |
| Migrations | `.mariadb.sql` or PHP builder | `.pgsql.sql` + optional `CREATE EXTENSION timescaledb` |
| Index DDL | `CREATE INDEX IF NOT EXISTS` (10.1.1+) | `CREATE INDEX CONCURRENTLY` for prod |
| Time helpers | `FROM_UNIXTIME(ms/1000)` | `to_timestamp(ms/1000.0)` |
### 4.3 Effort to maintain two adapters
| Aspect | Assessment |
|--------|------------|
| **Mechanical** | **Medium** — you already branch on `sqlite` vs `mysql` in `Database.php`, `GraphRepository.php`, `LiveCastRepository.php` |
| **Ongoing cost** | **High if 100% parity forever** — every migration written twice + CI matrix |
| **Sustainable pattern** | **Single source of truth** migrations in PHP/DSL that emit dialect SQL, *or* one canonical Postgres migration + MariaDB shim only until cutover |
| **Duplication while switching** | **Hard across engines** — use one-time **pgloader** / custom ETL + dual-write window (days), not perpetual sync |
**Recommendation:** treat MariaDB adapter as **legacy bridge**; Postgres adapter as **canonical** after cutover date. CI runs integration tests on **Postgres**; MariaDB optional until retired.
---
## 5. MariaDB vs PostgreSQL comparison
Scores are for **AndroidCast** (PHP PDO microservices, session OLTP, growing stats, VM-first → managed cloud).
| Criterion | MariaDB | PostgreSQL | Notes for us |
|-----------|---------|------------|--------------|
| **Maintainability (ops)** | ●●●○ | ●●●● | MariaDB already on Alpine BE; Postgres is one `apk`/Docker change |
| **Maintainability (schema)** | ●●○○ | ●●●● | Less `ENUM`/engine-specific drift; stricter types help multi-repo migrations |
| **App code (PHP PDO)** | ●●●● | ●●●● | Both first-class; rewrite mostly SQL strings, not driver |
| **Flexibility (SQL/features)** | ●●●○ | ●●●● | PG: richer JSON, window functions, CTEs, partial indexes |
| **OLTP query speed** | ●●●● | ●●●● | Comparable at our row counts; tuning matters more than brand |
| **Analytics / time-range** | ●●○○ | ●●●○ | PG better planners on complex aggregates; **Timescale** tips this further |
| **Vertical scale** | ●●●● | ●●●● | Single BE VM — both fine to 100GB class with tuning |
| **Horizontal scale** | ●●●○ | ●●●● | PG: read replicas, logical replication, Citus/Timescale multi-node later; MariaDB Galera/GTID (cluster0) works but ops-heavy |
| **Cloud managed availability** | ●●●● | ●●●●● | RDS/Aurora MySQL vs RDS/Aurora PG/AlloyDB/Timescale Cloud — PG slightly broader for analytics extensions |
| **SQLite dev parity** | ●●●○ | ●●●○ | Keep `ac-platform-db-sqlite` for laptop; neither matches prod perfectly |
| **Existing investment** | ●●●●● | ●○○○○ | All prod migrations, `schema.mariadb.sql`, cluster0 GTID docs |
| **Timescale / time-series** | ●○○○ | ●●●●● | MariaDB has no equivalent extension in-tree |
| **Licensing / vendor** | GPL / BSL nuances | PostgreSQL License | Both acceptable; Timescale has dual license on some features |
### 5.1 Other bonuses from PostgreSQL
- **Same DB for OLTP + stats** with Timescale on selected tables (no Flink/ETL for dashboards)
- **`pgvector` / AI extensions** — optional later (Tiger Data stack); not alpha scope
- **Logical replication** — easier blue/green DB upgrades than MySQL dump cuts
- **Stricter constraints** — catches migration bugs earlier when `ac-platform-db` fans out to many MS repos
### 5.2 Reasons to stay on MariaDB longer
- Production already stable; **alpha must not hinge on DB migration**
- `orchestration/sim/cluster0` GTID MariaDB story is documented
- Team familiarity; zero new extension packaging on Alpine until you choose Docker for `be-data-1`
---
## 6. PostgreSQL vs PostgreSQL + TimescaleDB
| Layer | Plain PostgreSQL | + TimescaleDB |
|-------|------------------|---------------|
| **OLTP** | Full | Unchanged (regular tables) |
| **Session-level graphs** (current) | Indexed `BIGINT` ms timestamps — adequate | Optional; benefit small until row counts > ~1M |
| **High-frequency samples** | Partition manually or suffer sequential scans | Hypertables + compression — **large win** |
| **Dashboard rollups** | Materialized views (full refresh) | Continuous aggregates — **incremental** |
| **Ops** | Standard Postgres backup | + extension version pin; use `timescale/timescaledb-ha` images |
| **Query speed (simple)** | Baseline | Same for non-hypertable tables |
| **Query speed (time aggregates)** | Good with indexes | **Much better** at scale (`time_bucket`, chunk exclusion) |
**Rule of thumb:** adopt **Postgres first**; add **Timescale** when (a) live/WebRTC stats storage is defined, and (b) you expect **sustained append rate** or **90+ day retention** of sub-session samples.
---
## 7. Migration effort (MariaDB → PostgreSQL)
| Area | Effort | Examples in repo |
|------|--------|------------------|
| Schema DDL | Medium | `ENUM`, `AUTO_INCREMENT`, `ENGINE=InnoDB`, `LONGTEXT` |
| Repository SQL | MediumHigh | `GraphRepository`, `LiveCastRepository`, `Database::tableExists` introspection |
| Migrations | Medium | 9+ migration files; idempotent `ALTER` patterns differ |
| Config / deploy | Low | `pdo_pgsql`, DSN in config, Docker compose for `be-data-1` |
| Data cutover | Medium | `pgloader` or CSV per table; schedule maintenance window |
| Tests | Medium | PHPUnit against Postgres in CI |
**Estimated engineering (order of magnitude):** 12 weeks focused for schema + repos + CI, **not** blocking SPEC Steps 25 if Postgres is chosen before `ac-platform-db` migrations are copied out of the monolith.
**Duplication window:** dual-write (application writes both) for 2472h *or* read-only monolith + one-shot migration — dual-write across MariaDB↔Postgres is **error-prone**; prefer freeze + migrate + verify.
---
## 8. Verdict and recommended path
### 8.1 Decision
1. **Approve PostgreSQL as the long-term platform database** (managed or VM/Docker).
2. **Use TimescaleDB as an extension on that Postgres** for **telemetry hypertables only** — align with cast stats / live session analytics roadmap.
3. **Structure `ac-platform-db`** as core + **`ac-platform-db-postgres`** (primary) + **`ac-platform-db-mariadb`** (temporary parity for current BE until cutover).
4. **Do not** invest in keeping two production engines in sync indefinitely; MariaDB adapter exists to **de-risk alpha**, not to double every feature forever.
### 8.2 Phasing
| Phase | Database | Action |
|-------|----------|--------|
| **Alpha (now)** | MariaDB on Alpine | No forced migration; extract `ac-platform-db` with both adapters sketched |
| **Platform extract (SPEC Step 3)** | CI on Postgres + Timescale Docker | New migrations authored **Postgres-first**; MariaDB shim generated or hand-ported for prod continuity |
| **Pre-beta** | Postgres (+ Timescale) on `be-data-1` | One cutover; hypertable for stats; retire MariaDB adapter from CI |
| **Cloud (scaling SPEC)** | RDS / Aurora PG / Timescale Cloud | Same `ac-platform-db-postgres` migrations as job |
### 8.3 What to prototype first (low cost)
1. Docker Compose: Postgres 16 + Timescale — import anonymized `graph_sessions` + fake 1Hz stats table as hypertable.
2. Re-run graphs dashboard queries with `time_bucket` vs current MariaDB `GROUP BY day` — measure at 100k / 1M / 10M rows.
3. Spike `ac-platform-db` migration interface with one table (`schema_migrations`) emitted to both dialects.
---
## 9. Changelog
| Rev | Date | Change |
|-----|------|--------|
| R0 | 2026-06-20 | Initial advisory: Timescale fit, adapter layout, MariaDB vs Postgres, verdict |

View File

@@ -0,0 +1,444 @@
%PDF-1.4
%“Œ‹ž ReportLab Generated PDF document (opensource)
1 0 obj
<<
/F1 2 0 R /F2 3 0 R /F3 18 0 R /F4 25 0 R /F5 26 0 R /F6 27 0 R
>>
endobj
2 0 obj
<<
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
>>
endobj
3 0 obj
<<
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
>>
endobj
4 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 762.0394 124.373 773.0394 ] /Subtype /Link /Type /Annot
>>
endobj
5 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 751.0394 188.853 762.0394 ] /Subtype /Link /Type /Annot
>>
endobj
6 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 740.0394 168.389 751.0394 ] /Subtype /Link /Type /Annot
>>
endobj
7 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 729.6019 166.395 739.6019 ] /Subtype /Link /Type /Annot
>>
endobj
8 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 719.6019 157.2375 729.6019 ] /Subtype /Link /Type /Annot
>>
endobj
9 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 709.6019 90.52504 719.6019 ] /Subtype /Link /Type /Annot
>>
endobj
10 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 699.0394 150.621 710.0394 ] /Subtype /Link /Type /Annot
>>
endobj
11 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 688.6019 181.3875 698.6019 ] /Subtype /Link /Type /Annot
>>
endobj
12 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 678.6019 150.1425 688.6019 ] /Subtype /Link /Type /Annot
>>
endobj
13 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 668.6019 173.91 678.6019 ] /Subtype /Link /Type /Annot
>>
endobj
14 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 658.0394 185.285 669.0394 ] /Subtype /Link /Type /Annot
>>
endobj
15 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 647.6019 181.41 657.6019 ] /Subtype /Link /Type /Annot
>>
endobj
16 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 637.6019 190.575 647.6019 ] /Subtype /Link /Type /Annot
>>
endobj
17 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 627.0394 210.861 638.0394 ] /Subtype /Link /Type /Annot
>>
endobj
18 0 obj
<<
/BaseFont /Symbol /Name /F3 /Subtype /Type1 /Type /Font
>>
endobj
19 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 616.0394 202.517 627.0394 ] /Subtype /Link /Type /Annot
>>
endobj
20 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 605.0394 166.189 616.0394 ] /Subtype /Link /Type /Annot
>>
endobj
21 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 594.6019 100.95 604.6019 ] /Subtype /Link /Type /Annot
>>
endobj
22 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 584.6019 99.29254 594.6019 ] /Subtype /Link /Type /Annot
>>
endobj
23 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 59.68504 574.6019 179.73 584.6019 ] /Subtype /Link /Type /Annot
>>
endobj
24 0 obj
<<
/Border [ 0 0 0 ] /Contents () /Dest [ 28 0 R /Fit ] /Rect [ 45.68504 564.0394 93.26904 575.0394 ] /Subtype /Link /Type /Annot
>>
endobj
25 0 obj
<<
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font
>>
endobj
26 0 obj
<<
/BaseFont /Courier /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
>>
endobj
27 0 obj
<<
/BaseFont /ZapfDingbats /Name /F6 /Subtype /Type1 /Type /Font
>>
endobj
28 0 obj
<<
/Contents 58 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 57 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
29 0 obj
<<
/Annots [ 4 0 R 5 0 R 6 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R
14 0 R 15 0 R 16 0 R 17 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R ] /Contents 59 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 57 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0
/Trans <<
>> /Type /Page
>>
endobj
30 0 obj
<<
/Contents 60 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 57 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
31 0 obj
<<
/Contents 61 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 57 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
32 0 obj
<<
/Contents 62 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 57 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
33 0 obj
<<
/Contents 63 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 57 0 R /Resources <<
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
>> /Rotate 0 /Trans <<
>>
/Type /Page
>>
endobj
34 0 obj
<<
/Outlines 36 0 R /PageMode /UseNone /Pages 57 0 R /Type /Catalog
>>
endobj
35 0 obj
<<
/Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (PostgreSQL, TimescaleDB, and platform DB adapters \204 comparison) /Trapped /False
>>
endobj
36 0 obj
<<
/Count 24 /First 37 0 R /Last 56 0 R /Type /Outlines
>>
endobj
37 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 38 0 R /Parent 36 0 R /Title (1. Executive summary)
>>
endobj
38 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 39 0 R /Parent 36 0 R /Prev 37 0 R /Title (2. When SPEC implementation can start)
>>
endobj
39 0 obj
<<
/Count 3 /Dest [ 28 0 R /Fit ] /First 40 0 R /Last 42 0 R /Next 43 0 R /Parent 36 0 R
/Prev 38 0 R /Title (3. TimescaleDB fit for AndroidCast)
>>
endobj
40 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 41 0 R /Parent 39 0 R /Title (3.1 Where it helps in this project)
>>
endobj
41 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 42 0 R /Parent 39 0 R /Prev 40 0 R /Title (3.2 Practical adoption pattern)
>>
endobj
42 0 obj
<<
/Dest [ 28 0 R /Fit ] /Parent 39 0 R /Prev 41 0 R /Title (3.3 Risks)
>>
endobj
43 0 obj
<<
/Count 3 /Dest [ 28 0 R /Fit ] /First 44 0 R /Last 46 0 R /Next 47 0 R /Parent 36 0 R
/Prev 39 0 R /Title (4. Platform DB adapter layout)
>>
endobj
44 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 45 0 R /Parent 43 0 R /Title (4.1 What ac-platform-db owns \(core\))
>>
endobj
45 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 46 0 R /Parent 43 0 R /Prev 44 0 R /Title (4.2 What dialect repos own)
>>
endobj
46 0 obj
<<
/Dest [ 28 0 R /Fit ] /Parent 43 0 R /Prev 45 0 R /Title (4.3 Effort to maintain two adapters)
>>
endobj
47 0 obj
<<
/Count 2 /Dest [ 28 0 R /Fit ] /First 48 0 R /Last 49 0 R /Next 50 0 R /Parent 36 0 R
/Prev 43 0 R /Title (5. MariaDB vs PostgreSQL comparison)
>>
endobj
48 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 49 0 R /Parent 47 0 R /Title (5.1 Other bonuses from PostgreSQL)
>>
endobj
49 0 obj
<<
/Dest [ 28 0 R /Fit ] /Parent 47 0 R /Prev 48 0 R /Title (5.2 Reasons to stay on MariaDB longer)
>>
endobj
50 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 51 0 R /Parent 36 0 R /Prev 47 0 R /Title (6. PostgreSQL vs PostgreSQL + TimescaleDB)
>>
endobj
51 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 52 0 R /Parent 36 0 R /Prev 50 0 R /Title (\376\377\0007\000.\000 \000M\000i\000g\000r\000a\000t\000i\000o\000n\000 \000e\000f\000f\000o\000r\000t\000 \000\(\000M\000a\000r\000i\000a\000D\000B\000 !\222\000 \000P\000o\000s\000t\000g\000r\000e\000S\000Q\000L\000\))
>>
endobj
52 0 obj
<<
/Count 3 /Dest [ 28 0 R /Fit ] /First 53 0 R /Last 55 0 R /Next 56 0 R /Parent 36 0 R
/Prev 51 0 R /Title (8. Verdict and recommended path)
>>
endobj
53 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 54 0 R /Parent 52 0 R /Title (8.1 Decision)
>>
endobj
54 0 obj
<<
/Dest [ 28 0 R /Fit ] /Next 55 0 R /Parent 52 0 R /Prev 53 0 R /Title (8.2 Phasing)
>>
endobj
55 0 obj
<<
/Dest [ 28 0 R /Fit ] /Parent 52 0 R /Prev 54 0 R /Title (8.3 What to prototype first \(low cost\))
>>
endobj
56 0 obj
<<
/Dest [ 28 0 R /Fit ] /Parent 36 0 R /Prev 52 0 R /Title (9. Changelog)
>>
endobj
57 0 obj
<<
/Count 6 /Kids [ 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R ] /Type /Pages
>>
endobj
58 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 961
>>
stream
Gatm;9i'e'&A@g>bRkCDrcW=8AQ``d@A2)?\6+_pJsrL)\01eL3e9129@Gk(7;^Q,n'.?bYqm\Vh*pVtAI<Ai_:9P,66TM5iJ9jC&)X/8T,IHpaT[iY^`8S:#d]USS/XpWTM.%)/<j6?J<Z]M-W$mWNftI".#:b;JcZNa#YM,t$8I.3OD[1<iTsWPg3$g>&,2D%-)i>[H=Li2/jX,)CcC(NnfieB)pkkH>#U[T7&bcLSo/\5P^.E^d0i>Y0^fXd4<E;N<A'FWdGuK*#pk0%]q5["iZfC?V<.WleV!aM"HJDlnZ,Sp]^M[-BGCm%5h0&m'4g$e_mq6`H5I`/Q`Pd1iKuu#$'d2gkeb.#_JrW.IZD3Nbs=31L]2^_@O%9),\DFm3LiF;:@lUW]_jT>Rq0GkDnVJd"EeG,IlF[NZ]?<HoqQt]e,<=LM`\!jq^sUmph5X"5nM():1=.(2`oJuDPO7<2NS7R7Kb"(JCcm[S/3DjR6[=r4G2sbc?/l"G/s?a94j,[*V)_\:5Yi-j9CiE+NHiYZ*tD($DX^:$aI/=ebr+FIftY.S7=RW6cqc7,OT\g+jK%XPq7>=n;fCU!Tict51aq2Rh>O?!r]9@Y:I+hS'8aufs\t/bgM(qbG;L+ZVT`dfgp%F(?X-]M*:ia4J^u_SXMOkV#tbK[lXsZW`]1U:U^YG]FDBqQb0V.8,L"@U"V_]29Y1,mA%qQiSneHDX6"(':X$\_;`^GF_*omH^eioA=^8ToP7pm7[X+Go_rs)QPg./ikfiD^&-h#fBgB/TbU7jL8+OTJOM_TgB4tW(q1j#VApbZ>06K"BZR3&Ys$$/.,%,;((,7_\3Yfh:tT/T#GN,ill]hki#Mr=&?LLl/R;XbHN`<m@sKT[iQ'fKLLVpN#UGQY+T%HH.8G\^d(f<9V%Cbp<iK(^Jgj(hGMlDN"<g)0(Zp[l(!'/G_!E_]3"n@~>endstream
endobj
59 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1027
>>
stream
Gatn&bAQ>u'Sc@-MLV%.0oSZZ]BeO`R\HC1cu'6pN'uEj8>8`)EV&leP3mfV';S;E#d=KuEk_.;X#V@bq".^5^o%MU2]Q(q>(J%P61l,Ie_*0"r,?;3ZE-Tl"F6TF-nZ0ZN\7Z:&9/V@`FThH"^%@R1?#J'1O:GKDMCZ[3jKn=2M;o!S6,9q<A5rQVY@+bmK9J-W.#V$J"bmKqcWP$qsiN*7ko;1-gR;]qHm6@]m`q"gTHb6.0(J>k5l2'IrA;IgVrh3F>pS,,8$a'VFN4b3%qBE+Gu)fLgl*2GKSIA<EGfsdN0oKnU'.qUROp@6?'ltEHhQ$dN_UQT!"rdR@*atP>r`oNG8\'h8=0<_dL_J<JN9u\X<R9<n:T@;NQkUVP"CHHY*'SSnN#5(gj[t#Ul@IHqsdXQn8W^U6V<*U]Y1dCudkLUQnVe)\A78GWX#_+s^*]8.SjQ*"H3qRsUN.n$"pXNE+.4!EegSE3Ec.4]\>WWbN'F#3/1Q!1%G=Q5J4('#qg.FAc&L)2i3ANmS6VTJW,gK2RFgUt(X6kL!^HS6oKCqrKUCKPmFjc@h"<]Ue4CO]'>s5<X-/gm`cYPf(Y4mY!1m.@qJMi2`"dLDp=cKAd-dDiWPZVI(hmJ0iXS,+#R`E'4`gYGX`5J;Q7FRAb/K-bZtc&ZYP]^-"X&1ne10`6TK-MDRD"GlFiZO+Q(T'[Pl0_=3esNM^#*qhFqN<<I(BNG?H>Zh]*:[!XsYC["ns79lfq3uq4[Bed)>)R^ULFMA;>T$M79hKNlf4'FSUnP=e3`Q5VFZWa]1<on^"Ju"g%.mZd^bDi<dDbZ$5e?@mpihPJ!DkOGrE!)6!&MGr#+2<:L4%`!.b[.OD#GSgf>?e/c+<lq:R>C9cI3H-_Ir#L:c2HI<7'j&4;MZ<QL>uCFXmR8NG/c_)Mr*IY#*2sTBJe,b7tGX6@2S=!Af'i<j8.<X)e0oc8I:\1SECc=r8)ek?.>$KL]9F`rhXV[GX6nSQC2c"9YR)+>TeB*#A=&;GC:Ds~>endstream
endobj
60 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4285
>>
stream
Gau0GD/\/g')nJ0_2iIQbBfN1HoRongY5*LUe19;"UkO@6sJHfU+0&9]YFH#Zm8;MABVMh'\cS!71Nsb1XA2$238;t%/"hK6KllCRX?iO@A:dG12P3)O#Q:oj4UUlUDR],Rd3&HNP)6kRC_e%G@s-$#Pa>A'a&oU_9>BVR&N+0EJ4g,rk*e.:#sJ4FnI+dU<th+neF_!&t>,5I"rdC<._)H,P4NY.%p[%&J!EWZYY8+UP&r,dImJ!iU6<fm%+"8n\(1d7ur2'h'\k(*KffJ-%`de4ioIB1(Jf?Cl&i%(JU2dMM(=+K[VbfCD'sHiZe\Rl6@:-dhmuHb?!YBhOY<c,makik%I2M)&AG_A!Y%P[FPM58]*ZP^I<a.G_7Ct(FZ(#IDZrAf:NT_\VsIUOA\$4:S6CbbsoHrs)NUgXhraQoKl!rT'YFV%2G];)$l:4-7ojn[5L;ENa6qVaj+mMrFJdpVJ`uVC[+]gJ$I3'IhHil3(QH/_YI-0?nDg(BP+gs\gL.6&C;g#fJ^ejo*Fk/UT*18Gu!C=N8o.&Z@J"pH]:Mt2J?<5p\oL@if\8!P@*c3^Kc6&Hs6+h-6eWC-ZFkuJg9cLdPV\G[I*+$8ch12F[Obd_gF52Ua!Sl@DEH%Fj9Z&U]4k/^8>+ph*4/KWr_UOA]VQSB"<!Y>i3,dU!Knfa9>i_`:MLdB:E4i>q(Qf+NJV>lY3qK>)n:nC[12VO#50;VmZWTT-`c=HQ_QP1C_f%@lW]j6&YIkVu0JR1%![3OEN]T;\Rl`rNlDo2nQe=bj=Z'+dOj!@XD;U#Td1@Wi0cPS_#Ri6FMU/G=j`hSm)[R9iB4iPnT+*jFk^Ld]7`D1,V%2DjpSI@Mo=7KYNVM[6T-Ql1kQB"f=A$h8_8r5VRQd&L'W^^BX%$n+YmWl,[2[O8g@#*,uUT5^II`WK+8c`*(R]<7Hlj1)_f$ngc(ZYX&<P@e,`,miS`pJBq:b5^(%:F`'\eMrQpRfk&$a1C+m]'8TUJLPRXps)`P:++Pq"27c-&TrgGQ0bo>(Q<EYD!t$KCH\V``;ZUnJ:pY)3XQ=@O<$<6D"\9guPoR^F-O=?N"F2L/\NE!I23jIL"A+_uJQhW"9IdM7>F%X6I:8BaC71D691Z*';IHdM_ff+:/Ds9!p"MR40P#*"X<ZgSCQ].RWRGQurK'eC[L!Z=4FhtnW&c^I5"'q@14eUCi<@)ukm)_D,UG8p!]7,[L&=B91T>Yii-5?!$SEF;/.^('HUGN,a9n]$/m3@K9#q'T0'&#rCYS'@JE]IdZ$]]Nit7=##e/oAM'to%3[/eM!Kb1_&l@+%1Kj^VB)41&65k[?<p=XH=DhacUMZ62-1F1\=R6t<@rVjr$->U?i2f8,*0)HB1B='U`$:_:1AB$V/n%c#,&'MXQ::pg9-Q!M[*6qn<mndS1?5g>61T\-Fj<8%e_VJ,=rfMc_OR>e$R5Zi%,CJ[H=[.<;p^I'\k&Xo2V]4T1eZQ'Ee+Ct48b\^-Z\3]23(`@'k`<>9DC[W8=+u-#QFVl9_2!)L?$tdH2mOGE8aFn<E?`]0-=]rTO-mU(OG,nH>R&,8C'[:lI91WA+^2u9`5\gQEU5+I/Zk@5UWrUn?dUPRa\D)bO;Hd;N;iI:t0JZc#^St,1D+.VO#bn<?9Ph#+Prf9b%&cSte%E?)9:o-UJgq8CQLUi:-]#I4'SSBm-rga")_E)$(%Q^^.Po<"oECg^?DRK%NE/h$)^<p*)"^)<!uL(No<mi+u,c2;*ujB>ZnCS9:TBbRo6gqaYY4lb3C]gRTb,0s>j>Z6+kQqT1/X.i+r4155n-PG_461@aa)ZA5>nZKbB5YRU%Q1Oj&3#_6hZl;RWejP3CP-"kY`aX)X]>^PRq#IeA'0\5W2c(.&a2,!d_%8bD9#'lcJC6hhHS4j^pl`8%2jTGgPp[-0]QN:L;7$1Qn7AG7?]Xm(-pj#'+7*k`XP^*&+;MgLt+VUW_gB5ZkKl$LN55/=L)bX:<j1-YPP(X^JiKGh6g'V`.AO^X;.(T%2!'?J&6bF9E2O4bW8CkhHml:?#o&$+55?P'D$3sfhZ\sV>PcMq6Y<bGS1,HKQ>EiF\QFm96$NNH2'&1kfjSJk+*R1>_pO:2FV4<+0/>A'I8!N-uR\Vs>8%rHYO:M@#65@n%9Ap:.DQdWbo6m%gaFY3jDEqu.P\h9,EXDMM1;o-Lcg?Zm1s)FhLA6=me-c&uIs6<]=Sk;`GnU29E/lUP?kRoV$\DB`4U:`l$h>4UhXc>6`\#(O6e@X]=;@`T5e]'M<QQK%Wr^oEjEWBpZMqP0gnFsciifN[ImOHL1uYuR%kIa]JNY<0;9/K%'B^;rSF8CU^0ePR4B?e0:K7GBOOr?k@Q')MZ`GG]a4_G.MH;t-`3XQ0CC'aMH77\F<Y!^1dgYsN7rA()k.7*'oal^=?n8/[65$!rbojC#l2r*VTN3gKbnUCuAu=ri&^*M(c//,GoUVqP>OCO>W('uj6egqba@L%5aX/7DN1(cBZk4>W^?F2TNJC#)9Y_%hCNqEd[]7V9Jn-+KrgmXOA60!>/5Kh=A+je*X3#CQ_1pgqT%U5/X&F@6dQ=hn1eQMpIQ4GOaIc$t"M!*#UbZplG"QHm^Sj+6#kACOE0uM&kNrakmA]<</;cKa-?mO3(i[:"#K.p\biN8pWcUJLhB?Ub(mV^&=)8$X!.nmAK4hiMgl^ajR"B6K2"Bh:._f1k$d*B5Ptn[!%OI@\#?]ZM.W#"LhGRe(Jf`RO2%u-0AfF;hFZ!!2K^r.e8jWF],a#9h*#C**0L\*tQn36]m/ho\a^3T.c<qHHb[VDNUP-:Y!oR0IY.(bCC!P(Q9CM%YA4eEYS4LVLO4AS9$bG_Q>]):m<=.%`b%FHic0AX7\7P!,dfr=QeP_A`LF>D#?FJ,tdJjjW3?hs3K0#0,j8s<*dB!=?*/k@FTuKd__"g^74Mp;@fguMGJ7N*bG.3d21dA_#R/uDPCN'7@i'?U:&*F#>[\*Y!_)]K&:i*6b(1s<ab*-HJB3Z?k!L?'&#FA7^^_uB,dC\djG.6#Y]H%kp5hj^RBEE@5o2QuUbheI]Ru8Sl/]hK.Z189F,m#nHj"0Z>co_&/lYeOKGt+WnTB<]Nq9;C:/kfPc)UcJJ7CNg:&[=HV2j4g%GQYq?<WS*>*cbE'"D%4MgAs."j=H)H["Pcl`1k;gBG+i[C_\2I'i]E;VLJX=g24!+3f++D0;K1N1j<;rA(QsXE92a49`_ea,D+NF&K)n41glf&o>/#A]IJWB&^[-:6]=[#lLVk&=WF1'OW#@IiV*L\^C]$N,OSP1U)@t\8Uj).#Ji;BEQYa2%k8M^lq_YpcW.9oL0=9L,OG!N4A%5Qdl26]Nd$]i[[ag3p95%LH^$M`LX_Ru')!^6m$Q`4m-!VS?fbE;5pVM1H@W4NMrN2%fO_HN8I-U22m^VsSE[it$kaX]&Pq5Mg2#iq7]e)>L-67n[>,h0(H_Wa@$c?NGacRe=P%ZH0mn4j6)30;dLLV$fWPkH!em"3F,%$*(,O@NC3f+0b7OF*R&V]>MKcpKM]7aI>qt]YAg(`>\kEk`*6PaPE)F%5.pA#9_Kc<\_t1hK^s/S@HTt3jPtt^(PB8C0/&39K+re$*<*Z:tRBD0YRXqG<gMD[Cm3,Q%)J%2^4ti<_N[732PsnV<Z:SKU!Hd5`b4mnIY!o_b<6p$V"W#iC6,2:6rdKVdrNY[bmm+nng3.^C\0id2WkgtD+Ve-I$lVC5%U,c=L<jmP'XQo3!i]Zu^)Uf3mH?dtoLhb$V"t!I"a(W\L-7cN:aKD?[033c!aRiu^EtFfp65QYDMao/F\V3Baa7L[Wjp4VWVf_ThqgKP*ER.qdsNj8IkMaUD:PZ`5RGV7!"q)5IhqY`s/aa&Dl$j>%H;DC%O5A^ES^P.D&TTtA\sp;0:^&L%qg*!!ru!]"[#dYY1:2IEKF\47-LLMMq>WNX'lp8j''.X^7jlSqbqFbIpq)032IgTj9;.uaQ5:oOtCP!3`)"d*Ojm*X]aL<"&J]W/#\N]>2E"QAXs/3gBsT:DqEP6g?EGbQb6:5FM2GR/TB"9MhX[\,K>;9Rl=0F+aJ_`jb!qNhKb<`V/afbKq$PobWZ0uS*3VqQc8u+_:!13Jn8B@T;/F*U!D28(-c+GrQ[u=IBr$?@o^YZ<A".Y+@I3U7k=U0h6tPDJ^=EmKSD7fMp6Nm483!'I:Z3IMRhZsE_@RK\a&$R#6rR<gFt`+[=@V;Z<DIP\HQ$:mEi+#c1%FX1*+Uo$t!jpA-"*!)sa0'rrKHeaYs~>endstream
endobj
61 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4261
>>
stream
GauHN>BAN>&q801kc1be6P:Vc6_L7#K**B-(Lu%S]i7kj)G:0G,:'BJZK$FaH?;Le&e[0:2jJOHRH^=-mcj_^HR'0mNthQMfE6M)61;,_OpnB#8?/?"C'KmPRt'9ca\9)qBZ%Q__I,>;qMMH83ZQ.nkmUfJ$[l.E5na">=[[;O.>lLpIg_gT1`4#4=T+53E]i"MqVkAEO[klFa[i_=")D$\!#;q/\u$!jBZ)"oHO(Hs_*^K]*\N.hLKStM"T]&6bB4jWo*Y2Uq3H"(:W*b-qJDW_feD]DD*?;'+8#)@21gW0fYfLq0F/(rdqI.o*>cb7pnp_0K:sFe:m$]ALKRC9L&mD'eu)`h:'kRrL;*UaQ4\Dr5(%_Lb3Q4Qo/pK0U[5g?K-M/1(bjaY8":CJ\3=_Wip?fWT=,;g2Q4%t0pP=3'LYMiL)R.b:C1_$QGqmoXLqIrFF^%P4lW6<@"kHhBs6h`-lKo4"0Uo#`G,MHa_#$#i;)dS)NMd#!r^EC_p&B:#Aq8b!WU8b'^&SFikN:,#qXk^Te::M!7Z#+m4OP.Z+V1B4]4aYHP'0/M#:L*"JdMi!ZECT1Q3V(K?et/Q\cn7E+]@3Jm(TVga8j]BEL!07M(?\dT8\1FA3_`5oB6*?'UN6)[D]=7,4CeaHEVj=&Qi3Y^)!Lq4D1iIup-DbK1GA,,[d'B<k(m="PoK7;f#*7ik9_/XF#JP'^*"YK&"aAQ1EF0$fK,cI[9Mr+a1u/$bh)g*LiZ/8!jp7:RfEc]d:a>CRJiCV`um1S&%\N0f/9n$VOc%dh5"@.A@?BZOC7BYnr;VcF!:Agp<AZ(>:N6.$tH!t$Zq<u/'a/r$4SZ'YF4I-g8lG)PBp0QthYq0`&c!fs^(&k9H1H%kR^L["/^K*O7'mVe6-aEBoa4ZQjGg>aY*X60h9Af3"1b4eHN-fPuaEC1$?I9M+<1V)M!4M`ZdE/EPp`N-4)`5j!DaF5,i+:'3K;[7`<:Pj@9Hl1H07P/8B$0[Lh3%^>?e1krnT4,-t2/aSuFKUuH\%m9a"/aA0>G1;i&C9$GQ=NeM&Hc/!omH&`RF)Bu(EGC?15Gf_\e@1e(bQ$dnL*c#c-Ti5)u9a<rr#;'aof%)62B^"QT+,bT2T+-5I`9BZ=+U['RjEe[<S(*Ro)la*GoZo^X<.)VRZa*8dE^Yjp(<**fsqrQ7h?bI3b>3Ws_]A"qZ&&7=LnA6=3QS'B=t5N`Z&h=\b_2s3>s(<Ib6Z>Vt"p<u*NI(Z@4AieCGo.l3KGJt=a#0r6kFB)!N<+.\,SH>\77)NDl#Qne^IAcU#nA;#b3*GD[=eo*c0DkfPHdV\opnG1Vh'?6u]5_N%EXa[i7N8&?nO!$]C(gSeW8Cr6B_LFcN7uKPc=RZ?//;.\!oLp8>fnL=LLmQ,Am`FqIk8rXj4?%F/^sJuiGI#/]l_Ru:As$MopGia?*m]r'2Yb=IIEFM,^NhNN]a$W6UXQ7)J?[0?l!]$m)ub]J7\UmFqZM<`-b+V`0`IoiUQ-VFZ4Qr1,]>h0S(Jh0jZURJ0XW4fi0r`g563$FGZ[WPKN,";3`Q>Xe!4+3mqZAjiG;>g$539A_n;`Qj9qm0Y]-lhA)O]2:";Ml?91FG*n>fa<UI&>\rrI!a5'K9:Y.P)cXWZ&1$U1-#U148.&enUh]n>$[<k?CQLMl8efqX9jXk&5L$9HG0T6t]g%2GYmZ^HoMUFj/Upcjj[<UVd"(4(WW*r,/#F\frg`0Oh=4U]YXYD"TC+r<ph/DL%b0\:RD+^=q/Fi2ED4EtaE8NL-KZouJL/7OL>+-d.BTZ_TJ('e(L)qh;7<I`dr?#i?j"S=jOek0ErfJ5'42J8BN#ajJfG4Ms+II1i:Y`;Mr!0*iM8*plJZ;AHnM,(NA'Dk>i]r8OUbS'4F?.CN+d:E``_:EO>`_Nl;BoIiGQD*\H,$Q-:kpF'IoRhPJ_cuJ]k4(S-AVb$^OUDEDNfTQ&,eq&OApmakHi5`6T'qug$mqd["*dbi5K-cHaE(GWf'hIFo19"p\K>]q_4S%mNslVq5T[B*dOX)r6'1Gq<ugQh!q<5jE,nIl1[.&NZ\TTU-kfC<&DW.WS@;jE]:\'Q+#'jD>D@c5.S:39u]\9F3r5rdGlJ.h]-:kj]S@^PL6Q]P0CXbY+G)X48hjnXXNr8P],_=^0f*],Er9-3r'0O(M!AUZUQQV27f?.7U@Uh0Z6/6D]?5Q6[hrWX.(@/>VE;'[-aYl#mm+<&5QA0!j=gOL6c\bEAd=Vll.BABh0!1pY[B4^l^Y69t53kJ$(-ijn*_fAJM`oeHl\T0'-&H@-X-O4&9ga'p'&HYCP[je+n7Z-VQbBr-!caRk@dcZ:*7a"?;Pe]l2q=?F^Y)m*Ydf*I>i\?fc_*i]/[1r5c/W:JT)iB>'PaO=skhcZciW&,5\[T<%5$ADPoD4\6@,2KCpL'ltHPoUBh5Wd2!*=s5H?Q&+q1<RE:c='`2UOVnp,:dZNJ5hqYE^oqh[d9:Df^X<.nYZ4hA.W\10-.XR'>P=3H9bFd8'7;e:8;:o\@#?QDW[MSh$,<3Kfn9aK\,ql=L?!dG_Ob-JJ:E,5].%?,mdJ5cSD-:2.[S(cpcQd<B16P?T*nqu)Ha.K!mB\hNMAteXga/,"k7kCoCR?"Od2q"U!-`i=k\37&oJBUM`@=I45sXoC:A,('o@f.B.oUBr=(Wd>gAs2(uC[0EC1j,Db@[XUJDk>=4,WVX)I+m:I084;unOGZa.g=0QBc'GpED*]UdXWbeNXbp)VJ//`&7]>&qhpL@BCT!`lS/3ek'-jV;l\lYKj5/2/c/C=\hWja6&e9)E@?G@9s@\+hb(Ltc%]h5=$T3%Jd-&%puG@F)H8;=:>5K-J)L:!n/>hl9J\&?dSH8mrSAg`&_ZC6)HA:F*f4##\G_]`9(6Up5m4<"QR5Dt"5`0L&67UcC^\.[Ogl*7"8tb8E!?8YLLs:ek0m2Tq&Vo?R$dU!ZdmLuUskn5)Y?M"?$qq[Rf#4t6sf%i(%b\PFUMQ[#kn`EK3@m4<_WZoZaK5Bhj(^CoE,@eagPUrBN0)[iF,.d_9#F""7=%og!G9?^o+m%Jq2k3d6,1O,N`h$f.rjYf`iflBd\)%j&D?38tTi:U3jL)sncM3eL,=2?=,:\.[VPhH/<_o-:XPp\C>!2SSX\Nu%62@le:"/M(fO@h^i+ADN+MiD6Vdg/CiCU'#'kh1Wpd3ut#X'@9ahGM2HA#qL39DrhZ0#5!6TN&kh4l9.SetuY\nG$L]gN$`r,Es]X'a1h3>Q&^r\Y4Q.U]PanIMd>97ap,:&An$RrumOFq@57SUMZjJaqE=Y)u,Y#4uJ&JCRPpL-HNbNf5!iTZO(8&BDY$(^Se0PNa=Af-g"XLdBf/HrmFUZ#1`X@C[b!RkX(h[/9iQuV,G!M9]*6O*hn]'n[o:8(uM(ZjW99T:Dgm!m)^C*c;oiRf_Y"l&&6Lr^ao3YVRs,2+R@0!V3^XTmV>6dfasrT;@NOAAc9&DFX`b\LQPi;G%b3!7e;dj$(TTP<Jq3;2=1H)?_%95ke7i&9?Pr'I)KNKJ,EV'=##d@_@RH($2*Af[!3O354-8\X2bM2!:rQ`]nH==7ILssZETjT[a/)%l27>'ab7d2ATMh%m^QSBU<7LQ:FfcIMG`iKQKN)=Z(pbI7BdA`T%;a/?u<A`Rd!dibh.rIl")S*8^4Q=K(*LF0uHi`\#p^dQCGD@[rM]sI_(jXi*#6O^6sgQo^&sKfIGl^"`4[C't9CL8^-11]6HL%o?BV&.\NClM]%8b(1!J;q([Nd>8qaiRt/8_kJ/Kl>SL1I@3=4IlLI,[2XU8g:K9L?m#L,6k916gkonKaZ&Me3IZ0!kV3ZUlB4_mV$P?BW:\bBH9R:ZmX(UXDEnLpH.+C+j&d8-OBq/f&d9C#,RL;L1g\8c-S8Ah8?"b[bF4p.X"J9Q-h9*A2ZL=Vc=ki/R'u0cAXS;gdcdr*[Qd1jLNu).e!++h/?KY[]\+?XGS^)-C-?P4-c/31li@k4echQgEM`84B^*c+ZDS`S<r"JWn'KR=>h_iQ-JUd]+s,/uMR_@WN3D\2"ar4m>DWh2"4Qnd[cO:;tS:qGKK;)GJIXmb)TfBro*`[9^jF9YT6nQta<2j+F;&]ifC1F)oB0Q,+ntC)u(Fgg/TlQkBH;9oPECiT^eCY&%AlSVHfQBp1,o]ob2-+VEX\(h+n['Pd$rjTW%E^mGYWU&uOa;W&F/I>d#(e\MUlmr'QD@rRFa$gKJQ>T!]_NWO=`&T~>endstream
endobj
62 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 4017
>>
stream
GauHNgN)%.&q0LUoV40u,_?h0MJK]D[s5Q$-]Y=QmXqR;+;0hsTh'n<j`hj?gUG!\.>f<\c]lV=.=c*)]?u''!!F#6+n8oT")pGZnL"B+L%u@;513kg$Wlq`+"&?$3LPmAN>Q'e.fM6Qn[5l,re.<c%m-bF$+_i1WC3;m:rD`>/:TYtbpJ<.eY2u1]nN#8[o>55X#dP\QhopPDBfh4BR6^71/TAgbh4hA?E+F8lV4E@W/IO>Ph6,k-+/mR)bJj?OTqgL8aK?(L#f\^=#N$iRZ&qa!t<I;lFmPEi\1SqCtLG;hMT"!q&_<j7?7B_IgR'HR%l)k6:XnK,\m6k;ASW1Z&jP"`Lk\p9qkW^*DMbif2]8:c=D,5Xm+t==4$23Fde,h8lVV-<)PbX2E)K.?c.I%_*SE4l?OrAi-Sl-S%rT"1IVi<C)+#h'o\bO3igb*K/oBS>L[67facA8!=,lQGWs8*$H8HfHd.>g_`cf(7=J_i3XBl%QpeQ%F:uu=+1J^Xr/F#NG>MI+OcWkJK1Esd\I?cei3tdm;H4AG^0&;$nJDNr[j4h8lZ9:8auMRGfKhnH^=csu1=Q)'p/aJ#rq&A$h6u-m]]J"n/c6BYHWukF:2:HA9cGX2J,Ks(2mr0Oi8Vc8+2IPNEX1^W9j<;2HQV1_&J6*dGId(IM-T!J4l9l0@UKI;iJrX&]faVf>\!MiNj%V)Qgci9gk]H!jlmdJqr)`/Mb)o7rI>F1N,E"V4@n*$HI.B37lG1^7p!n=\ttE[(QRg;rGi6Pl6PeWj2@DmmI*Ne['pu;>X"1oU<jE"gq>h!]nL;8kDQeHX8D5QRHs]&Qfj&Q6"1lQAP2oO]?Y.Cg_X(G5.*+"/c?5o"pFLgm&+547i18=4u;Mq:2hYB?sp;m"R+0;4Je7'^Ei%@m?2OW1!SQGj55e!)0di5O?fok_@D,4h@/ejOT3,0=T]9CE^1F[Bd!?3'KkMK'S5"B=DPo"#^nf/ML^CRAtet+35q\;*4bq1E.Rfo*,j$1fJ$)@G)K+)hInG&*q=!=)=6`!HukXqE,Q8R^lT+s%lV]_N:RMYO=@VW&rpS\d*Y=[(OIl'-`KDV&!/*(,590SA,B;2E6rnUOs5"EjToLm_tM9pIA)k':1ibV&?hCI'_6)5_FEIOJd5CV%\=3t8*"J`dD\R*!^?%hTa9>#4K(g`4\^:h=E8N=j($^sch@+".0W-',,MTfl[)SbS3Pk^(K&LnELd.DoG2K9F+NGA9ZkJW=u;LKXLH$kAR.PQMZn\b>]pInk!0mJ<jO$(mqsli=]ocp_dLTbLr.0^rsO>V3#PFj;`>!359I%(7KtuqFG']788'"[*q>_iRue*T6d`&9)jL89fk&JKP5ZmhiG[SKk`mKBbaKfb;ehJVH';,D:d/JcB&t>FGXnqCde2&TWfp'p#gj=cPj?R9MIidP/9*8pSj*qVR]\#5+kuUDXSlqZKlgf]R2WS]6^s'/PJk80\H=SW%^e,J7B</@O_GGZ<1(c\b,N5p&bm"%rIs]/*:s.boJ]VAqHb6sj=BLdD3@[o:t#_!nh\Bfe*7(-#\'BqqhQ0rNte-&K9h0<?Z,'$n/f*4K'2YZl'@RT`VttRJ@PqaYUG>e&'+MPKAJ!-n\1'f:qdprVL6)HBk[+9GD@!4cUbB_HS7!E]>86?;bZ4ZZ"Ar%B/`XShkda#Uk'W/A1i)?/.HTAF(^3!QW-e\+m]$S3s9T<!9sc(r6"S_rB[Gcj-73]!H41E(J5E\j*DR(Nc[EC@UjL=k"2UD!J2)V8Wo!XBbb/KRfKN\ljrI%C/!`K/=*oC#TZS'gHrN.O?27$/&oc;;WsXg/hG"D**4#hEgb6h>[T'[YE-8j*X=nB+FI=0^VJ[#e>_=o%Jo-C;*fm@1_-ZiMFQ3DOh3+G'<^f+>56*H%\!)pa1=bX)d0EuW@Re0(HIsE1"NFj\GQO3CV0c#LcOIVJFh%Qd:(1tqSrEg&#E'XA--9/CrR2h?*\V^Xtq)>$kY/NE/D"J=W&s+_sGLG6h-\o%Jno#ELjU75D;=)k[Sc1>QcE*iN;Qj,uG[HS@O3H0dBIR0"grk=DQea<-%5-hc#u;VNM*%g).,MUr/(Sfgs`g-U5j4Zh>J8kXni2-^W0@eP8T1/-fBcIX5@3Q%F88R:LJ%VAc7t_ap2qR\@PgMbeV+A/a`,092VRV`dF`5+\3#of6uM1n,I)GcDc=Y,NB\[rMW(p"2nn%Z]:k17!-@:WCnMP;.)G]g?(0+r`6`,K3(B*&7#tMi"2:YgUn[M2n)##U+&F>99X>6ugf#>;jTg..+7i3fR@CL-A&/HWX/Da8P.'CO+uT,DHQY.WT6j6H0d;W56tsiaPMZN*<,g*Z::VF6Kn]Erj`dYV*.IHD:-jYbEhi&DnZnfAXOpm'&c7T$;`D8o$`fr9!k<o=R8R%?DADbd!Xf-`@6SfT1iGQ>/@b6iX]F8HJ3-/==JDNW?eeY+$c%d!nO/L&Z5h-iB%\[91FbXgB%._49&%\.!@obd.j\:jFnP_Du03kTm-"*7.MA0n_h$LNU4e?n):#/XMhGGru,d,c>X!XF$i+C]`G#r9I"k_R(M5+!3h)M-D;2Y+7]8?9mTDm-I58)AofplFtKb0!qYE7R78RG7me`]+A&;.\/fOhmX)BQ5/<j@gJqA1c8XLmI!Z_RFps(^$sF"?K=TrMA,qXh)_,B15Y.,93?iG(HT9Pd:_ne'Nk0-c^$I^dh[]B,/5NcXMblF[SMhM9)s%V_?=O5hC1hrdoM,TOla,nrh$k@Y%^%l3?,PEg"+jX;RK*L?R(<PS-LT?+,K,8E-)EBSKq4W5g#LQi;0[lqi;b]//"J"R%DlSKLjSMS!(QeKh6WVp.6(F*Pi$Y^7Fa\:7V;E`7:`h>4L79jF.nJlh$WAh<h.3/m$tWCO&u6s7\s8[?9*)DcoTepC]88.n/4tN@O5=k`REh8TI:!Y+q,j9fV(*@l"?p*_=j5'`rQE2pEi%m&XT,YoG2Mi)<D(<lCBE]W-p2M,;bQ,d1f"jDk\]nZ8,$boV`GC!%]@MO:Hh*jYLQ>ck$$027T[/'T*aC#5QOC0J#-=6nuD6R4\;-&?]N=a[<7#LrGL;<L@<Ye>-F/o%S[i]D>^NSSA_):p@[X/>uHH3^UZA`Nfp`P_TtiFQN)!lJhJ="np!ao2:-3O&Mbqb'\7r=#($1Hur>qm&<1+CJMqhAfFu1P:9LaBkJfn%kkSR,!CK:qIttC5YT?+]$K\MXa/kBa7Wq7[fVgbf1-'VWAhE&eF+1mW*o@/MRA9<)gm7UeB(_f90PH:T?.k(LLl*<Ko(t1r%,$bhD:#<G7.:"eoa%eG_iZ#I"/rZQfZlAg/_b<d9DF'5h>UH8#qGmi+&q+ep&5A,h+`@[HCG59)EMcX_f>dZ&P;UDX>(H<471nT>&G]\Li7Pjh*0iU<0$7%4Zi;]::8)+PNd*-(ZIgYE>TW544pDt>WshgE._\@T<+.GK&m?[]rRrotRaT'*"6:oX%=R(iOiq0IM_hg*tA0;Ykl*ooV@'@YTNFB?9gop1]l"RE.G/ET%`';W*OXsIRVXQ5K"D_X+U:bMIVZ)`7tHFH/4s7'S-^#Ma_3ujCCM9tE@LUJ45BGfr[.l"d`FP&uON8AR/1`"p7p#>=dl(DnX\FL9GA$\nf9/NlZIr=FN%s=uY<+:'TFKNEBUs*UIo83`)HuJ8jlRt.(>efCWj7-^WXoJ;7(&<m]#IaYZY\L`dG5:o9`cs"?gP>-o7l!_d;61:g3r8)CO]N5.++RRXn@)]Equ5W"%fT0*kQ)^-h"WpJh)/&P(QZ<3QK=4"GKTf/G#Z1*/l/40-SISR]$>3bK(b[)9l$=VhK%CX..aXjAUg0AfDBKX,Clpn03f3]'ftX!c0HimXa7ZORrka)o8\/IkgD^/8QUdbX]/PhC2lt*;Ro\KS$Q1\b+pLoCG1tERI;Sie+WalR`J$fPY1&"W=r`9T`/)e`OMe7N@$)Z/GXplR3OK+!X>\`K90epcoj':k"[C<LQh`?cUM_7~>endstream
endobj
63 0 obj
<<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2435
>>
stream
Gau0D>BAQ-&q9SYfLIs,(kPg<IZ!ML-_9DLZ/'RaUR;NY65!aj?i\QRo'=VR'Iep&/4uHh)I''>ln6#cI7jW"IRs8r8c`h$i8$$hL]^F/+J.]2dr4aGl/K_e=mu!1.iA)j#@TTtCj57)3F'RVUle)NGY3P>Q>_euqo+,KO_:"&3JYF@V0PZjMh,G\ShVR;2M]C>aI#O11J$amj1:'"jRW6q4FJlb.YS:]9H5F!@*.'-JshE%KlUclJr1<pV=56GbD!h%gWrs*5.rj_O9sa.2bc^4D"KsKJ%UJ*c#NuJdGY2"_7`Zk/sudDb(EK.?k=oC@MqiWC1XdW+2UnsNJ;^F2(k`CGhQ/`o!tQbMbF/jZ]W<h=t^5"DQO]`;NZfhl\/>S6hJ.QB:fG,n8&Wj'm[ZkdLo[Q//HDLSE#2J_klF_TkA&qg2Htg?n1eXE`jUTGQt@u=hkt"h]VnT*f;LO27GkaLl;en6Kej]J;;"M)B)2@2DBWSP1.%4[9[Z]=+.!_`:;Z#PFJD7cas*g;@5G.-!Jd.mks0hbqT'-P-LVf/ZoL>J%]6?c;qV`i`V</KuPG92`OR=U$FLDI-*Dra38VZAKqT^A2<;0#+EL:E[9(tAMM2#:A*VVEPZmA8GC1JLB032Q&j0S[^?dY@hDf+\/qY>Se^ZpjfDH>Yt;O38Z])H531q4(KMpDj4E1=W\RimOj/ZMaV=$9K:$C7V5iig%-!L`FDfN$_Ok2lh-o"n3P"M8ef\oB?)O0+41B3QDY&WmnAJ8&,+>aJ)fla_!W,Bnbb0l^Jle_Y.6ZLFR#L?ee1>#WdrGVM<R)ikOC7jQ'\l!jj;^nhguLUFAjhmgV5[Mb%MFdE/#Gop&?KE=H*g.6.;57"]FSDAF#IFo%Ub?$(6L4EXgNt#A.%t`f8gC4"#s'\\\pBP='4REa[f..g,3;jSk3uH;$\Kt(:dH0]r7$UAK#GM2V8e5jp<YRN:WW,l&`5+p3&.('<nAno'D'=I..Q9)9Ya<e4Y@H;T.c1'-pTX<b@+jAJ'C3CrW`(ZXe1flO"+YVE#tP`].$:BNfMca)!07HH*bE(UR\jPqgLQM+)u(%1E8((`>1CdGSY@0eW+6bo_^rE9gF,*OoHQKhrc='Gt:II.4S%TOj0(f6>&Oa+57k^^>L&lk,J.Od4JS7MEh.6_".2kWfR3fc-/i53kAlYdFWR7CC)aja#5O?69OQefgCHPO!L,aMiRS%Q/9"-L"LO6C]&7l,%[MiDO1?kn:uHNIZ$!ee`I/hhO8_"3V2AnJQrIg)X[qCtB_4`$=4YZ9OS!dZN<KD?Bbj8u(<TKdMMXn75ug\NGmQ0*S/RTMB7GIal?C*jC?Rq9HLQ:uQSlrE#@Y).C!lpu8^GOcgpgl.6-^`NhIfS^-`T\e6GgcV3B3&0EeOS(Pgp>'#eZd)hpu._tH3Na=cUgi<5EGbUnED`?/I.Y`$"4^P@RVqJ8bLFouIR6iR2!6:S???rD+CH1?Pl#"`TY.I@Le:OSPB,QopE/:'*JQ*F)[+*Wbf:4NH#eN/Vc)e^`qMH(ppLGpL2OlNsO*dpn]drXbDN188K9iEs@%\#l;*AJX6Y2&6\-&:'US^Yj:>#K9Z'oN7[n(!d8/jU7N>5aj<ep'#o9g:ANnCO#O,?_dr\b?WN7\tHlB/_Tg@Wh#FoR6/7jP_h$60:"gjd2U2gJ>*d0''*MqTCMO)W`W1:jGom<hk%>tk![pac>k^T^1&kkP@mh[c>3OO,Nt_NA_>\9Ud+Z!?!df`&A9g=Y,"5S+Qoed=Uk$V3ln$i![S+;JTBi)@=>%&:4\:XoO:h'rJb%F)f1#1j>7B:8GTTjIbFLa.3ja7A$'A%^uclLcq]U^M[?q+d8M=pp>C#A&J)aA9_el^H8*7/b+4ca1W<XlqWQ=7$$+"\pJ'^#/Gn&o=t<Eb+6CN%o5l7(,_`cV:CBitu8^?[Q&gO#s\t>F<fN#38!5f>D3#D(pu/[AO7RpK[.em`07)KD5P/)+=b+W=!+7(/mM1$pP(G3F9AZ$(ZEW`8TIX5cAk'UDMHSEclBg*<,U"q]GQOo/Gsg5Dc:s.Po^d3"Xhn`\KrrQs]P'OCG3c5iT:d#6Bk=O#_\RpDkSUHe8U91h%2?!ddQ$f?'[1Z$JA+D,\;46EpWuP\\b10eH"t(39nu8GC#P=N%ARi8+q2B\[D`n[7-(Jm2b/F-_XB,G4;V/NlTn51`"[nbq2clZH[@Y6."nQfIK,FKmf7op?CfQWq#_m.'?LhI-@JfSF$!_9`[Hc=,sCg2R2Gqj_Ycab7n*Ke"<Jmp!bZ`q<>!kn:Q?Ktc97Hs#Utk&=m<L7=OVs,)36>Q*IPqb`DdhgX_8&p"[iB[5um$gZo,>f$)"CZJMPPhBGu*[+qlh="'#Q6gHc"m^\T3RDt;Mi=l>354Jf1+E\,+Ma!KCuGg>rrZ.Oen+~>endstream
endobj
xref
0 64
0000000000 65535 f
0000000061 00000 n
0000000146 00000 n
0000000253 00000 n
0000000365 00000 n
0000000512 00000 n
0000000659 00000 n
0000000806 00000 n
0000000953 00000 n
0000001101 00000 n
0000001249 00000 n
0000001397 00000 n
0000001546 00000 n
0000001695 00000 n
0000001842 00000 n
0000001990 00000 n
0000002137 00000 n
0000002285 00000 n
0000002433 00000 n
0000002511 00000 n
0000002659 00000 n
0000002807 00000 n
0000002954 00000 n
0000003103 00000 n
0000003250 00000 n
0000003399 00000 n
0000003515 00000 n
0000003621 00000 n
0000003705 00000 n
0000003911 00000 n
0000004266 00000 n
0000004472 00000 n
0000004678 00000 n
0000004884 00000 n
0000005090 00000 n
0000005177 00000 n
0000005517 00000 n
0000005592 00000 n
0000005694 00000 n
0000005826 00000 n
0000005994 00000 n
0000006110 00000 n
0000006235 00000 n
0000006326 00000 n
0000006489 00000 n
0000006608 00000 n
0000006729 00000 n
0000006846 00000 n
0000007015 00000 n
0000007130 00000 n
0000007249 00000 n
0000007385 00000 n
0000007700 00000 n
0000007865 00000 n
0000007959 00000 n
0000008065 00000 n
0000008187 00000 n
0000008281 00000 n
0000008377 00000 n
0000009429 00000 n
0000010548 00000 n
0000014925 00000 n
0000019278 00000 n
0000023387 00000 n
trailer
<<
/ID
[<b40b5ca66a7183c90ac1aea1bb523033><b40b5ca66a7183c90ac1aea1bb523033>]
% ReportLab generated PDF document -- digest (opensource)
/Info 35 0 R
/Root 34 0 R
/Size 64
>>
startxref
25914
%%EOF

View File

@@ -183,7 +183,7 @@ endobj
endobj endobj
30 0 obj 30 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 alpha release & QA) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 alpha release & QA) /Trapped /False
>> >>
endobj endobj
@@ -377,7 +377,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<9e958e14022981bf5a40e5727c09a87f><9e958e14022981bf5a40e5727c09a87f>] [<b351513c4424db373b9ab2ba803fc31a><b351513c4424db373b9ab2ba803fc31a>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 30 0 R /Info 30 0 R

View File

@@ -122,7 +122,7 @@ endobj
endobj endobj
20 0 obj 20 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Alpha soak checklist \(LAN demo\)) /Trapped /False /Subject (\(unspecified\)) /Title (Alpha soak checklist \(LAN demo\)) /Trapped /False
>> >>
endobj endobj
@@ -240,7 +240,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<da88c70ac5260df544a5bef670fb64c3><da88c70ac5260df544a5bef670fb64c3>] [<62ff1d8c69f4e2aa7b4e34c69a669dbd><62ff1d8c69f4e2aa7b4e34c69a669dbd>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 20 0 R /Info 20 0 R

View File

@@ -244,7 +244,7 @@ endobj
endobj endobj
40 0 obj 40 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (AV quality enhancement \204 Q&A session notes) /Trapped /False /Subject (\(unspecified\)) /Title (AV quality enhancement \204 Q&A session notes) /Trapped /False
>> >>
endobj endobj
@@ -512,7 +512,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<d92cdd33b95bf41f24a49cb9e3df4341><d92cdd33b95bf41f24a49cb9e3df4341>] [<8790530eb11d5413e4389657b86cbd98><8790530eb11d5413e4389657b86cbd98>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 40 0 R /Info 40 0 R

View File

@@ -137,7 +137,7 @@ endobj
endobj endobj
22 0 obj 22 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115603+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115603+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast build ecosystem) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast build ecosystem) /Trapped /False
>> >>
endobj endobj
@@ -278,7 +278,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<b59c8931b799160e290e481e14299f1f><b59c8931b799160e290e481e14299f1f>] [<bea06f961b571b40c7cf4c938ad3324f><bea06f961b571b40c7cf4c938ad3324f>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 22 0 R /Info 22 0 R

View File

@@ -97,7 +97,7 @@ endobj
endobj endobj
15 0 obj 15 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Commercial features \(developer-gated\)) /Trapped /False /Subject (\(unspecified\)) /Title (Commercial features \(developer-gated\)) /Trapped /False
>> >>
endobj endobj
@@ -192,7 +192,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<fb238f534e35c75275910d5c14862078><fb238f534e35c75275910d5c14862078>] [<d086ae4cb3335d3ad3b7f0baa24fd954><d086ae4cb3335d3ad3b7f0baa24fd954>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 15 0 R /Info 15 0 R

View File

@@ -102,7 +102,7 @@ endobj
endobj endobj
16 0 obj 16 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Anonymous crash reporter) /Trapped /False /Subject (\(unspecified\)) /Title (Anonymous crash reporter) /Trapped /False
>> >>
endobj endobj
@@ -198,7 +198,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<22d958c84565d9778bc748babddf22d8><22d958c84565d9778bc748babddf22d8>] [<8fa35525e151cb86fcb8749d7347816b><8fa35525e151cb86fcb8749d7347816b>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 16 0 R /Info 16 0 R

View File

@@ -279,7 +279,7 @@ endobj
endobj endobj
46 0 obj 46 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103622+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103622+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (URL shortener service \204 design review \(DR\)) /Trapped /False /Subject (\(unspecified\)) /Title (URL shortener service \204 design review \(DR\)) /Trapped /False
>> >>
endobj endobj
@@ -553,7 +553,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<0c13123401870dc3636a59ca6043fbfa><0c13123401870dc3636a59ca6043fbfa>] [<875c6f1c7edbf45055101437d8ba9dff><875c6f1c7edbf45055101437d8ba9dff>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 46 0 R /Info 46 0 R

View File

@@ -498,7 +498,7 @@ endobj
endobj endobj
79 0 obj 79 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103623+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103623+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 design review \(DR\)) /Trapped /False /Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 design review \(DR\)) /Trapped /False
>> >>
endobj endobj
@@ -933,7 +933,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<633c08311ac4fc3baffc5b7f2ceda12e><633c08311ac4fc3baffc5b7f2ceda12e>] [<b9840886073ac09ffa3aaf04613fddc4><b9840886073ac09ffa3aaf04613fddc4>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 79 0 R /Info 79 0 R

View File

@@ -324,7 +324,7 @@ endobj
endobj endobj
51 0 obj 51 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103623+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103623+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115604+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115604+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (RSSH routed egress \(dev-only\) \204 design review \(DR\)) /Trapped /False /Subject (\(unspecified\)) /Title (RSSH routed egress \(dev-only\) \204 design review \(DR\)) /Trapped /False
>> >>
endobj endobj
@@ -663,7 +663,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<007c0311bfb71c5beb7d2970ce25523e><007c0311bfb71c5beb7d2970ce25523e>] [<8bb82ad74cbc70e21b326c36bdc6d400><8bb82ad74cbc70e21b326c36bdc6d400>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 51 0 R /Info 51 0 R

View File

@@ -319,7 +319,7 @@ endobj
endobj endobj
51 0 obj 51 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103623+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103623+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115605+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115605+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Codec2 / ultra-low-bandwidth voice \204 design review \(DR\)) /Trapped /False /Subject (\(unspecified\)) /Title (Codec2 / ultra-low-bandwidth voice \204 design review \(DR\)) /Trapped /False
>> >>
endobj endobj
@@ -657,7 +657,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<c9beadc7d306c78320e68b037811d0b8><c9beadc7d306c78320e68b037811d0b8>] [<46cf1dfdb90851c909d86a9cdac2e0a3><46cf1dfdb90851c909d86a9cdac2e0a3>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 51 0 R /Info 51 0 R

View File

@@ -520,7 +520,7 @@ endobj
endobj endobj
85 0 obj 85 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103624+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103624+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115605+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115605+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 design review \(DR\)) /Trapped /False /Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 design review \(DR\)) /Trapped /False
>> >>
endobj endobj
@@ -1072,7 +1072,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<3073a799183ee9db61421d66d854b31f><3073a799183ee9db61421d66d854b31f>] [<d2f7142333d712b3c1c2561068c30494><d2f7142333d712b3c1c2561068c30494>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 85 0 R /Info 85 0 R

View File

@@ -82,7 +82,7 @@ endobj
endobj endobj
14 0 obj 14 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103624+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103624+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Live Cast Control Plane \(P0-P2 kickoff\)) /Trapped /False /Subject (\(unspecified\)) /Title (Live Cast Control Plane \(P0-P2 kickoff\)) /Trapped /False
>> >>
endobj endobj
@@ -166,7 +166,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<dab4f5eab97be7c79d196b8cb2e530e9><dab4f5eab97be7c79d196b8cb2e530e9>] [<c4fec4b99072874c8420e5c9ea80366d><c4fec4b99072874c8420e5c9ea80366d>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 14 0 R /Info 14 0 R

View File

@@ -314,7 +314,7 @@ endobj
endobj endobj
48 0 obj 48 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103624+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103624+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 Git flow \(green `master`\)) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 Git flow \(green `master`\)) /Trapped /False
>> >>
endobj endobj
@@ -615,7 +615,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<8f8a0b879c915b3676e3731de73457d3><8f8a0b879c915b3676e3731de73457d3>] [<e92ab2784f1d9b47bd66d5dd1205e8ba><e92ab2784f1d9b47bd66d5dd1205e8ba>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 48 0 R /Info 48 0 R

View File

@@ -153,7 +153,7 @@ endobj
endobj endobj
25 0 obj 25 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 Graph Visualization Pivot) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 Graph Visualization Pivot) /Trapped /False
>> >>
endobj endobj
@@ -315,7 +315,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<1220a3b30f173e67e1de9b17fb8764b7><1220a3b30f173e67e1de9b17fb8764b7>] [<1a9859941ac21a0ffe6521926edbbd6f><1a9859941ac21a0ffe6521926edbbd6f>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 25 0 R /Info 25 0 R

View File

@@ -183,7 +183,7 @@ endobj
endobj endobj
30 0 obj 30 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 production infrastructure) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 production infrastructure) /Trapped /False
>> >>
endobj endobj
@@ -376,7 +376,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<3987d7e5e7c49c9d6c3d21b5ad2336d3><3987d7e5e7c49c9d6c3d21b5ad2336d3>] [<6a21447e613b14d0d348f555435c2451><6a21447e613b14d0d348f555435c2451>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 30 0 R /Info 30 0 R

View File

@@ -142,7 +142,7 @@ endobj
endobj endobj
23 0 obj 23 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Crash console \204 open ingest API \(design\)) /Trapped /False /Subject (\(unspecified\)) /Title (Crash console \204 open ingest API \(design\)) /Trapped /False
>> >>
endobj endobj
@@ -289,7 +289,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<107f393aba3f78a44c74cf3a4f0feb42><107f393aba3f78a44c74cf3a4f0feb42>] [<17f9a5b944b42ce125306ff3734bcaaa><17f9a5b944b42ce125306ff3734bcaaa>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 23 0 R /Info 23 0 R

View File

@@ -152,7 +152,7 @@ endobj
endobj endobj
24 0 obj 24 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Open tasks \204 dependency graph) /Trapped /False /Subject (\(unspecified\)) /Title (Open tasks \204 dependency graph) /Trapped /False
>> >>
endobj endobj
@@ -294,7 +294,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<08187b5269d829047bd7f5065873f151><08187b5269d829047bd7f5065873f151>] [<ec45184a6869623d65b73cee381b9d72><ec45184a6869623d65b73cee381b9d72>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 24 0 R /Info 24 0 R

View File

@@ -163,7 +163,7 @@ endobj
endobj endobj
27 0 obj 27 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Opus / Speex / stream protection \204 validation checklist \(task 3\)) /Trapped /False /Subject (\(unspecified\)) /Title (Opus / Speex / stream protection \204 validation checklist \(task 3\)) /Trapped /False
>> >>
endobj endobj
@@ -333,7 +333,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<4b48bb56a60d820ab881edafab813382><4b48bb56a60d820ab881edafab813382>] [<1cd619210883038fac0702297f0173e6><1cd619210883038fac0702297f0173e6>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 27 0 R /Info 27 0 R

View File

@@ -142,7 +142,7 @@ endobj
endobj endobj
23 0 obj 23 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Over-the-air \(OTA\) updates \204 deployment schema **v0**) /Trapped /False /Subject (\(unspecified\)) /Title (Over-the-air \(OTA\) updates \204 deployment schema **v0**) /Trapped /False
>> >>
endobj endobj
@@ -290,7 +290,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<7ee18bc160ebf9dc1046423de38ba744><7ee18bc160ebf9dc1046423de38ba744>] [<bfaafcc416205de30349560cb8ea8f8f><bfaafcc416205de30349560cb8ea8f8f>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 23 0 R /Info 23 0 R

View File

@@ -127,7 +127,7 @@ endobj
endobj endobj
20 0 obj 20 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Pro / OSS split \(cast-core + cast-pro AAR\)) /Trapped /False /Subject (\(unspecified\)) /Title (Pro / OSS split \(cast-core + cast-pro AAR\)) /Trapped /False
>> >>
endobj endobj
@@ -259,7 +259,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<ac2722b644e5539ca34adb5d4cb5cbfe><ac2722b644e5539ca34adb5d4cb5cbfe>] [<a4eb65ee35e6b29ba7d315a4876585ed><a4eb65ee35e6b29ba7d315a4876585ed>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 20 0 R /Info 20 0 R

View File

@@ -49,6 +49,7 @@ Click a link to open a guide. Section links jump within the document (GitHub, Cu
| [20260608_BE_SERVICES_and_infra.md](20260608_BE_SERVICES_and_infra.md) | BE service map, validation status, SFU preview (gray). | | [20260608_BE_SERVICES_and_infra.md](20260608_BE_SERVICES_and_infra.md) | BE service map, validation status, SFU preview (gray). |
| [20260608_STREAM_DUMP_DEBUG.md](20260608_STREAM_DUMP_DEBUG.md) | FR 0.1 stream dump spec. | | [20260608_STREAM_DUMP_DEBUG.md](20260608_STREAM_DUMP_DEBUG.md) | FR 0.1 stream dump spec. |
| [20260610_SERVICES.md](20260610_SERVICES.md) | Exposed services catalog — web UI, APIs, curl, validation (2026-06-10). | | [20260610_SERVICES.md](20260610_SERVICES.md) | Exposed services catalog — web UI, APIs, curl, validation (2026-06-10). |
| [20260620_postgres_timescale_db_platform.md](20260620_postgres_timescale_db_platform.md) | PostgreSQL vs MariaDB, TimescaleDB fit, `ac-platform-db` adapters — advisory. |
| [ALPHA.md](ALPHA.md) | Alpha feature freeze, QA sign-off, defaults. | | [ALPHA.md](ALPHA.md) | Alpha feature freeze, QA sign-off, defaults. |
| [ALPHA_SOAK.md](ALPHA_SOAK.md) | Short LAN soak checklist for demo validation. | | [ALPHA_SOAK.md](ALPHA_SOAK.md) | Short LAN soak checklist for demo validation. |
| [AV_QUALITY_QA_SESSION.md](AV_QUALITY_QA_SESSION.md) | AV enhancement Q&A: sender vs receiver pipelines. | | [AV_QUALITY_QA_SESSION.md](AV_QUALITY_QA_SESSION.md) | AV enhancement Q&A: sender vs receiver pipelines. |

View File

@@ -153,7 +153,7 @@ endobj
endobj endobj
25 0 obj 25 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 documentation index) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 documentation index) /Trapped /False
>> >>
endobj endobj
@@ -253,10 +253,10 @@ GarnQ4`>s,'\rL!2j,Y2Gf7VIg8H)\3`Pd>,m?5I#W;ibrdKEq;-TkXak$(>48Fnu%%uk//)XH<EDN5A
endobj endobj
43 0 obj 43 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3510 /Filter [ /ASCII85Decode /FlateDecode ] /Length 3687
>> >>
stream stream
Gb"/)>BAN>&q801kbhA)0$'L/4`<*A*Hk/mJ<R<>Y#<AN!,[D-l@SF%oqt:]JZo`LP-$dCl4atsTr#KKFFQG0"@W0Lm'"#&\=1:r%08e(3X6i:1/./PRXY%t"5,je.tXcOU(!Kf$)1tOp`>Ug78iV!"K!]BPeVTk6aQ;FUP]U7i55,7R"]Fh@R1WVK^#*_rImnTa3S(TW[!"fJ5#3Y+@4MVUduV!L+6q!#b"'hR3:At!PTm0>X_#QKW<BF&k!/j^E?>Off^SEml_n+$tVEthRu@Co:43JbrJ_?36R`TC)bHeFIofg[c&cQk;c1U)p\)'"KC$#K#BVj6)(iF+ApHTO=4ri8EB@S,Z:*;&op0f6u3N&j*Uj72Xs_lLJMUt4fQHlCDFJHct0bRJsN6:qBjT^+N\)ao6-P.S7O-FZ3:Jc1UssOB%<):PtG"P7C<m%8\/(cdH_D5_tSHDW3D%l2+3TpO]99kUl*YC>@4N&`3LbSch9C,f4"%@YoW!G$*.2<K:>LU#2L/$3Pc+k[gEcQNpEu1L<#3j\!O&8jkTGFR%sZ@7jsT7:9&n,&@nVBZnB$H];U\OG?<`:b3_6(ZL#m8n@>.dbsbiA)U-+_fnj<IY^g*.%gt$c+t)oti"@n6=#g2*l+ed.PO?lPYfDfi%M23)#O&UA2u7@EUN(cCmSE`2Un67$JT'We4*[KbdE01\',G"A]eK#?='5>pO9mBN]0N\kJNQi1)SukC,tM*5/F#Lq*3^jZ5jjiDP:Wcj6$9lK40ENW=Q?U`Si*cmMV;AjO.9B;Bd*/lJs\tGcXj>$efEC&^,O5I!Q9hYUhKA\joKnM2BI37pFINOoo/:,db=E:FDR?Iqta_TZELC2LYI,u2j\bF"q3?B(boY,ZZNU0Gg5#9]2[M0/g;&3X_1C=6![>!M($44)&N#TVCORZKf'(d8K9s"!7#<gT%Oc>oK,1E@;+IRnk1]ebZ+"fC6s_];&21TpKSm]9jNo6p3LUi_)tqnF+t?pfAqam^KCg09o-JOcjf10%a<S\8c>G?Ro;mqAX5IsR_RI\Xgs,,15ljU1VZ0p3o@bZ1AADA3Lf2OZt^<s`3I`M.Q'-PX*t"UhY!drf_9'T24=)l?g?=T'6Z-(PN+32IK^K<S\SeVn%a>ujPjPBQh^sNFYL]a^54R-]?K%!N:*g9mffdRW2'nU.OW8lrnTHoU!_]cO*]qHQ[us?4.=O622MW`_5m*FC3JMaomCYT)[:;<?t@:.Ie[)X+>FepT\aWAYf=AjGur2%()!e'LABes7GWZ]?rh;[0jI'&*'k2i(4LDILu'!&oYr3Zag!]ANi1I<SlO%3QpDS%Y/1m:CZNE,823$JN+8aX)SspeK/!gIeRanWN=jWVIqmlr%DUFL903B?hCQ@@#aaA1E?)X17Ih31XYT*^%$iO)kcoZO,Y&A.IdGuZopHJ'-=2GKgj?j_S3$WbH<7[KBoH\Ba6&BW`O%S/*@=FtCc2?\olB*3p=e8S8NkZ_QeOlp*3LCt(A$U/)`_seE,aXE?Hc(.$I,\0<c/=TqHn-[okJ1Kk+a>pV/D"p''t,[6+hYu>>3.I#WL<eo#foAO&T!"iQluYXNR!&iQCH$)QO]!NrUsV:4tT5cDsloe/39:8(JIqnP)0e2!<c>Q96L/L;atj@#-hUkWfc+c@Q(/EAVXVdKln[k>n'B)Io;]]W!peI:D5I++:;)Ad^V7L66]>mkM"/]]]RfCHfQh57CYI:#ri!-T4FS_pQB?Sr>5dhtC,>*7s>[0%=PZCn8S4P;Qi'R'[s<8%WpE>Q0<;;r=>#*bn^.C,AC[=QXB:equ75m0!I]_095'1kCY=_$2R^ju@'pFq3r<;d>7F':Q=^Cp0PL2SCiF)3'E[C"B?"c+1GgNOj"`&H<BKs'rhE`F0/;HO91iSIsQb=.YJWE)C28g)/4rXheskfk(cL\V],aN9XiLk(:<m&\Cc.BEfCWhJ2H<,X%1iQ,[4/Cf&#Lf3I+%(Si_2]B_hSH3ls6nng$^4+(,,au6db@N#d%l[_'rAP.%3I1/a!V<#mBKGZDt7*0Y0Yg`4GO&N?eP=6)Chrc]i?G1@.</G>(pU`;RfM,%V+iQf>S&Dp^U]\(C3sSJS'$"9ikC#<ln;cn>Pbi##>uTtuP:QP%oq66tbfR4=KPN\Mo'!p_V=b/)0Q<VSLgaAAQD"B9KQ086<Se$kNaaKUfMq_!d2-UU#=JC>*)5ee^6)C$[W>k;kr8P7k6F;NR]I&[rZ9sG&/9@Ac;RgA@gkQn@?Qbk6\8G:=Zgrui/n\3pj)3L$&8\@.O>];$PK-Z&e9+2I\;!PikpADX!JAg$^)j%82r.kC.W\7/4d'I,2oaK8TKZ@_h(9LDWScf,aQ*ZLH?,5^cWb0@6r=7hVc;'UmA[0LBU6uH%QV8P$IP^*u6-$j:+:(8>P;U4tK66aW#W;,8he?(jfV'-!+c,:T,R0W-^`W,r[6!01[B:8-^rF4<Y1s:j0Y"IS,TI6#e7dKACph5?`NTFU=HQJu0,s^Bi^ZTF-EqRP*jqNo'9:"[Z;BRsT$RIa6i[OCYX5FRH`ZJ*G?pXif2bjKpr9+$DT#?DXSk7'$g8QL$I!m?hf!@uZ?a'ug#264`*<-tF#>7G1662JKk6)b%"c(LLL%0NoI`"7aYYOa74kcC>uaoEhp^*P5($q#A1AGq.WL=&#I$B`@Y*AQ1$/8\t__]X'`jJ1BcGXIal+P`#bbVQK0#^BF*P`Udf%MT14C1O8<d=&aWDSupP-\'22'H2hQLD;K[?:nDMVY+0.2r&QoE-2_F"9pQfUrH*VhjWa&%HZT"3>]i5IhP.JQW9Tjod\a##p-,Js`UVB:_DG[WRk5iN_u?>fIQX$GL0P;NK$`>d>-5\mS_<"=hFVYQdqgt50pgUns7C,G6EI6f;!Zu]jM8[heMkS1FMknDbr3l*fBdZN^_UA<jdR+10`57jA_lp##LVppTi^b;U&ue4riTP*)oIt-(kfVi/=W2./A)*^[GsV+a*i##Lp,.lO4ud>0os2d=TI(6j+kZC+?p\0r0TEWdq_l"cl80mS\TBhG?m;`Xf*j:l$XEC40\8kq/*G(RM@HR+H0@r"2@D#Nfs&9fZB_j&qCkM],(F1Xf6<;1Spfm.#@Fh@Q95^:6XmU'M(&a4O=Z#?+of=6dInU+nn<6rKIj6UQ/6.^6<$q*tH9^q;o+GM,H:Eo#%s9o0)X_E[=/I;UoV$`"FoYJBrR*K,5a3JS,RhBs9[Lbnn9WFa7O5LS_s-B6N9k$fI/i)EMS*IWlMHCImOhca;-ikR'tckeWgRh)1C$]n0'R4!O^'s7.D=>Ub,8[1RWG<Ok:5(?Id1;90<Z5.^mLE$B-PWap=6eksMl".tpYWB<B58DIF`1Uuqi?=`2MK0(*M\oQfmKjNs)Ktb1Bb'cfhGHIX#%or;LLTQ0>5D[Ai>'W;i'808q7:7/WO1_6STZMk#.NEs,_1!^J'B'_o+"4'YRQtsggf+k"6M*t'$O(sUQK5i:rr@GT2&$~>endstream Gb!;&CNJ3#np>gSJ%BZD!Gb.kJp\4S4'Wn9^r^GYX&QAA5T:lOH=/hLrd#h$&dH%T>BO#MfGT#!k=e+;Rt-#R,l2@q!I>-`]d#cj/65$3Q3<*XBT!CNI3=<9;S+6!g4BHbU9k'./)g46N*dh:/j`sN"\STWDsqAH?:@Zk]J\KC[LGm]%(FFer/\)W',J?&.M);qU*Opo5A>`q#Ur(lTgQf-#VE;3$VCY-8t0uMJp9L>pbbn\Oi;3r&h684Lu:!irJ!<-cZ,!s>h[Ya&5$p@p\6=3.E3o2FYH`lN*5Ao^eDB-6Hlf(;gZl)jY1&m@2AHGN>5m9XMZUOb8MnJHs)4BbiH(L$8@[&%^09+]6,g:j^QH^`A:kS=Y.!(+a#>,KOP=4lPNGI[\$gFI-kD/M04bI9@tlS>t+a[JeGV(qT]t:kf[Z+(Q[E1l\R'7`!M/N7rU7DGi#K]Q\r-r$Z[i[o5M<!]XK]Pl0n6=Os?%;/O>Pq8Q#S[OXs=WVL?p*F%r:Q5O1DWh7:7.qmmkjeClNJ#[Eqs`+^jWeo6pg\uco*0MI]+5!7YK^V<34DHE.K5b/CW5!m+clRFF+K.,@$JC:6;C(m#?m,llI7_2;=$oZ@qmCneu^H-(g;hLA$]boVSEn9_Al="Q*JS,+OleE[SW!^H!D%,'OIaHjeHhR(d<rl:%WIU#3Ni&FKI6&<BB#DSaS!Ofc8FSd5mP0DmZ5Lm=n,qgH5qU]pJiD?8L(b.k(qW)=Kbes.<:72$;(58MI:cdfg_Y`kIKO&Mm#5=NTFN0q<_!ZRK/WTblt^Y_O/QqV/'fWAPNl+o)YhP2>:,!)Z"q/3YcVJY$G[12+@MX\GE8[Y[^XlsWb:]:Du$]fY#8Ktq-p5#@t!i+T'?E[pNU%;mMZf.Aq5V*)*MSJ@2Ws,i:!&$.p#6@-Pm@-K9d1K18-$AgI)T]nUd,)(#9U/*mNu&B`s1XXoV>+!\`mX*et3mgX*<>kh-iC5=I+^"h@3XPa)E4q3">a;GST<d#lLZm4hrYX=a$<_e/c9=iWTATOZ]A;q*PO>ps4n:4SirJS@f$r\/r;%qEM`N'XWJM^&mf*iuH9!=-Xf*?9]?2NOpsQd=i$_cRg=F=g'eF;*om=RIcu`@.$rW2^*+aBb+\:CZBIK3L(CqE1hK)#MDnn=YAOXdu?$=uB^0<^pa-\abb^%n^gUQqu3bj^bDe@D6`p!(Q6Tn6P&ZQlBZ:YVGG58;L/\h:,0?'s;ka;nqQ-O6UDgpd9Nr+gq,n3;H`QcGDR8mYIq$J2nRd0cA:Si?9Cco<7qMq?]<;Zc"hZa5:ARZh?L.>!$>#%a-eGNUZKu*"C8Y:IgU5b)'>n#,]C):kV#Y2%3W'T$L(GC'1%pbN<i6Y2d-]c7R_pG&o;]W?+S+POVbEonVh2P^#&6%+q0)mZ)S;[1T'=2jQY__GHdii3([T^<&q=R+7h.R#94sl"%6LB'#hg:.9;1kABO>(nNk-ha!"+0pXrfh!Hd9I5]HLc8%W3+P!75rG\IfN@*Q+M06aDrp'/=]QP76.uCS4ZAk$no>#?m*bQJd)OtYjqUiTAC,<at:V:\"Q1^#03&KthnWKrIG,MX'B'Pr`<RpiXmKOU=C-&5>]+'KMI:qs'TUb;Ie*UY=iGKe_k&]^-mhmXn1%=%gQHtbY/W-#JXOOCFFSPNH<\B]h5X+krAS=PY<IcqPk$W,"i#Z10lb]39[!Xt6Ppb:OZf[<5#E6jiStW&>@#%SfF#O=e*?G@@hlQBSJ6:qs+Bom_[BDW'Luf=L*Ig;bo'!"i#%+0Y-KaP]!s6]dedTo`UOX:!H5N2)1LE7B^&$pO/_'T_\W2GnqRN,`2<aBD>2JaupcS9>T^.t`nGu/[0P2AliC,@oW1;sCVN5eH51R%?khe)S(oW@uWC@n;]?n<`mhgC?Vu8TB*Xf!=LQ3fIqARmZWE,Ulh9&k8LA=`!e\[8=)ihgPY`1S#$t(_FYXEZ9'cpO@S`>LE!q0UnN+-WHHEG;OX]%6\REd.jWg8RXeZkS\NLH`&.K1nes$q\BP/AKr[K>A?@oJU2HBsP)iAsak\T1.qe&IT*VQ5+rM!+VR4=um]<@@Fpo%8A(GY?[&YdQV4%r$#!fWLagA-JuXl`--f=\e`!rQu2ScjCTs'gE\TcJ\.pH*U#,1T&hn*K8N_.8d*T+/2W,.OBOmn1Y*+StY.f2QS_ea5W2Zl=?KAq<s7-rQ'JcWQN.gf`.Ztk'@b>CJ_8iV%*?43RWG)[%2cB#(^3#U95suf">Jh.qE'S>$%!cj1M:>*fPl#?_&iBVJqf]8o-X-ghNI3'*I:6n/,2k-lFee$lDbg1!1Gqca0!D1KL@OD>FtTc1+3:=/U-<nF@olN:!-;%/Mp^qt!1U6PZRpi;E'1r^3^q01jcAHYN]RV%*#%,btH-k$oRB0t$*M,2VufKB*\$hV(_WE1)5E.0IFu!hpqB_IWc]3Z/J]O!*;B:4`0q!Hi&[KZaL_AY,cdVci.rMKtY%Su.mQ=lsFUH(&<9VO/`6k"1GUP%C5\R-1$t1^KESW%DXI\4f.ck"P8U!YR<Ci6)6k1>:[0"=.Nb_3[Yg2ku?"8Jaug(!9)]E^gZ38It3I)VQPjL`%Lph3;c_VG2o8Q1=pJZl@m[Y(U>*4R*Gi2`$k'&\CY.;2B8(TC4[/Xfe#nQg#)gES^l*>16YXAe^Yj#@9gH4V904GIc@mc43KPlp;L`#Q.b4\l;M,fp8e$qcCDXeH6X'Lk%dDkb9,E[dNb]@LQUMV0H/BZ060cJqQVAL5T4?=MOOd^ENETQ14Y(EkV/!'+o^.^a)+dRL5L)20D6.U@\?i0*_ElOF#1-j9O1PIQ[S`]iMVXBb@0fbAkpTAV8LtLm!.."%L[K6UeIALn7Kemai5d/^dKoPR@?>jnYO-hmtr;;rG,;ci7PF?Cpj>RaM!Sos:L[opU?<3ppAJZdnC4?h1PRa^tEejBn8<>Jdu^@BaHrDhi*Z4kFQrHFAa(lLOmfp$05f6^?Q>P</C1Te)@LchBB0kCs"AlAW42rI:c_T?ZPk+XR=H+]LC]<]eoA"g=QKMsQ(DMJg!uAl:e!T3q6(MfJD3Wp9Hn*I&Rs^-b;dkrSNBoVMi-8#%jM>J#G$^MdpnpIG3uG)`"<P.796%(1u-0fq'/lY#HI>rca>]8gZ2_5:B<@r2C"XM(7,GW12mn)rZIK:f_XH1"Jj^gM?"Gt(uun'-$)9q.L3;0$<tU-roh/h2GD&3n5oU62c/DZW/KL(2d=lZcA^RUO)Ajga._5N#Id(RQbGJ6f9+EtbcghrP"-s0=IE0RYh#,Fs"YNEP,g*0+D:V];QJ05kM3abG[E?LNkt'J8qAJNOO<nhhU3ZoV).SKjCPrub$Ja<qMs^^JD#)MiS@iofnGFG\YE\O3'X9@0%.IdT9pH6Mbg\/-<G!ls/6Hl;@ZgRa`';3U]de-s;(n3eQ+Q#m"5]ERI<$8eTI=ra,.\&=6&`_ha0-o$&TTF?$Mb12gpNs`FU]43Qo]UuSJNifCM+.a7e+-^1>$\f?_'bA`$L*[a.g3G<C[4\?/QFM>q:cq<u'KFLUM.EE6e@8!qY$;jek`ct-kSsh]\IL&.-U,]::m-:\W2C\*/C;tRR3,fdFh@kB=m+iI?S+\j7$6I+mjZqN#brV,AG[e[gS3-5R]ur/h&ep1aEbI5UX%p/*Vf,2WMc%,~>endstream
endobj endobj
44 0 obj 44 0 obj
<< <<
@@ -311,11 +311,11 @@ xref
0000007001 00000 n 0000007001 00000 n
0000007229 00000 n 0000007229 00000 n
0000007642 00000 n 0000007642 00000 n
0000011244 00000 n 0000011421 00000 n
trailer trailer
<< <<
/ID /ID
[<92c26b5f54e3746e1385e7de7d418327><92c26b5f54e3746e1385e7de7d418327>] [<21bd418253115595219f2239810885ec><21bd418253115595219f2239810885ec>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 25 0 R /Info 25 0 R
@@ -323,5 +323,5 @@ trailer
/Size 45 /Size 45
>> >>
startxref startxref
12832 13009
%%EOF %%EOF

View File

@@ -183,7 +183,7 @@ endobj
endobj endobj
30 0 obj 30 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Remote access \204 implementation notes \(v1 WireGuard\)) /Trapped /False /Subject (\(unspecified\)) /Title (Remote access \204 implementation notes \(v1 WireGuard\)) /Trapped /False
>> >>
endobj endobj
@@ -383,7 +383,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<2e5e258f86156f4a4896ff7a73d11ff3><2e5e258f86156f4a4896ff7a73d11ff3>] [<73cdfebcff903d1566b9858951833b52><73cdfebcff903d1566b9858951833b52>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 30 0 R /Info 30 0 R

View File

@@ -137,7 +137,7 @@ endobj
endobj endobj
22 0 obj 22 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Remote access \204 validation \(Linux CLI + mobile parity\)) /Trapped /False /Subject (\(unspecified\)) /Title (Remote access \204 validation \(Linux CLI + mobile parity\)) /Trapped /False
>> >>
endobj endobj
@@ -277,7 +277,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<273a5779660ef1c3a1fa0fe8ac555dc5><273a5779660ef1c3a1fa0fe8ac555dc5>] [<1627e3f70ce4b1d1228423dc24c605e0><1627e3f70ce4b1d1228423dc24c605e0>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 22 0 R /Info 22 0 R

View File

@@ -198,7 +198,7 @@ endobj
endobj endobj
32 0 obj 32 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Android Cast \204 implementation roadmap) /Trapped /False /Subject (\(unspecified\)) /Title (Android Cast \204 implementation roadmap) /Trapped /False
>> >>
endobj endobj
@@ -407,7 +407,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<64cfdfbd492de96b1f420ef3af29dc90><64cfdfbd492de96b1f420ef3af29dc90>] [<fc9a6eea06a9e2d4a6457f8f52705b23><fc9a6eea06a9e2d4a6457f8f52705b23>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 32 0 R /Info 32 0 R

View File

@@ -132,7 +132,7 @@ endobj
endobj endobj
21 0 obj 21 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115606+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115606+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Tickets, Gitea, and alpha smoke delegation) /Trapped /False /Subject (\(unspecified\)) /Title (Tickets, Gitea, and alpha smoke delegation) /Trapped /False
>> >>
endobj endobj
@@ -266,7 +266,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<b7da7c1b75a9d967c8f3f16fe99a3c06><b7da7c1b75a9d967c8f3f16fe99a3c06>] [<2691acc5e8ef1ad05f5101edc8066bb6><2691acc5e8ef1ad05f5101edc8066bb6>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 21 0 R /Info 21 0 R

View File

@@ -112,7 +112,7 @@ endobj
endobj endobj
18 0 obj 18 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (USB-C / HDMI and USB-tether cast \(roadmap D & E\)) /Trapped /False /Subject (\(unspecified\)) /Title (USB-C / HDMI and USB-tether cast \(roadmap D & E\)) /Trapped /False
>> >>
endobj endobj
@@ -216,7 +216,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<9cd4cb0630e7ead9ac0a5ad348fb7971><9cd4cb0630e7ead9ac0a5ad348fb7971>] [<b5d8df8d7d570acdede8840905e28dc4><b5d8df8d7d570acdede8840905e28dc4>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 18 0 R /Info 18 0 R

View File

@@ -102,7 +102,7 @@ endobj
endobj endobj
16 0 obj 16 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (VPN / Remote Access demo \204 gap report \(2026-06-13\)) /Trapped /False /Subject (\(unspecified\)) /Title (VPN / Remote Access demo \204 gap report \(2026-06-13\)) /Trapped /False
>> >>
endobj endobj
@@ -204,7 +204,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<6ac300ed6bdcf096c05d1a9c2cf22e1c><6ac300ed6bdcf096c05d1a9c2cf22e1c>] [<b2cd8347e0a4b196bec35dc8a81f419b><b2cd8347e0a4b196bec35dc8a81f419b>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 16 0 R /Info 16 0 R

View File

@@ -32,6 +32,7 @@ SUBTITLE_BY_REL = {
"DRs/20100612_1_scaling.md": "Platform scaling — DR (architecture, bandwidth, GEO policy, task graph)", "DRs/20100612_1_scaling.md": "Platform scaling — DR (architecture, bandwidth, GEO policy, task graph)",
"DRs/20260618_repos_reorganizing.md": "Repository & microservice split — frozen DR R1.1", "DRs/20260618_repos_reorganizing.md": "Repository & microservice split — frozen DR R1.1",
"specs/20260618_repos_reorganizing.md": "Repository & microservice split — SPEC R1 (normative)", "specs/20260618_repos_reorganizing.md": "Repository & microservice split — SPEC R1 (normative)",
"20260620_postgres_timescale_db_platform.md": "PostgreSQL, TimescaleDB, platform DB adapters — advisory",
} }

View File

@@ -305,7 +305,7 @@ endobj
endobj endobj
51 0 obj 51 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (URL shortener service \204 specification) /Trapped /False /Subject (\(unspecified\)) /Title (URL shortener service \204 specification) /Trapped /False
>> >>
endobj endobj
@@ -647,7 +647,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<d16e01c48b634c03f8ff4cf540cab7ad><d16e01c48b634c03f8ff4cf540cab7ad>] [<dfb56bfa7fa29c8df90718f7ff48e788><dfb56bfa7fa29c8df90718f7ff48e788>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 51 0 R /Info 51 0 R

View File

@@ -425,7 +425,7 @@ endobj
endobj endobj
67 0 obj 67 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103625+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103625+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 specification) /Trapped /False /Subject (\(unspecified\)) /Title (Platform scaling and multi-environment architecture \204 specification) /Trapped /False
>> >>
endobj endobj
@@ -862,7 +862,7 @@ xref
trailer trailer
<< <<
/ID /ID
[<f609b527db1b307c43f0903cc372abaa><f609b527db1b307c43f0903cc372abaa>] [<c407e2764e1e7d4d181ff71ff66c0bf4><c407e2764e1e7d4d181ff71ff66c0bf4>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 67 0 R /Info 67 0 R

View File

@@ -9,7 +9,7 @@
| Last modification date | 2026-06-22 | | Last modification date | 2026-06-22 |
| Co-authored | Cursor Agent (project assistant) | | Co-authored | Cursor Agent (project assistant) |
| Severity | high | | Severity | high |
| State | scheduled | | State | accepted |
| Document type | spec | | Document type | spec |
| Supersedes | — | | Supersedes | — |
| Design review | [docs/DRs/20260618_repos_reorganizing.md](../DRs/20260618_repos_reorganizing.md) (frozen R1.1) | | Design review | [docs/DRs/20260618_repos_reorganizing.md](../DRs/20260618_repos_reorganizing.md) (frozen R1.1) |
@@ -21,7 +21,7 @@
**Source draft:** [docs/drafts/20260618_repos_reorganizing.txt](../drafts/20260618_repos_reorganizing.txt) **Source draft:** [docs/drafts/20260618_repos_reorganizing.txt](../drafts/20260618_repos_reorganizing.txt)
**Design review:** [docs/DRs/20260618_repos_reorganizing.md](../DRs/20260618_repos_reorganizing.md) (frozen) **Design review:** [docs/DRs/20260618_repos_reorganizing.md](../DRs/20260618_repos_reorganizing.md) (frozen)
**PDF:** [20260618_repos_reorganizing.pdf](20260618_repos_reorganizing.pdf) · Regenerate: `bash scripts/build-all-docs-pdf.sh` **PDF:** [20260618_repos_reorganizing.pdf](20260618_repos_reorganizing.pdf) · Regenerate: `bash scripts/build-all-docs-pdf.sh`
**Status:** Accepted from frozen DR R1.1 — implementation phased; monolith remains deployable until each migration step completes **Status:** **Accepted** — implementation phased per §9; monolith remains deployable until each migration step completes
**Scope:** Split `git://f0xx.org/android_cast` monolith into git org **`ac`** on the **f0xx.org git server** — full microservice end-state, VM-first cloud path **Scope:** Split `git://f0xx.org/android_cast` monolith into git org **`ac`** on the **f0xx.org git server** — full microservice end-state, VM-first cloud path
**Related:** [INFRA.md](../INFRA.md) · [BUILD_DEPLOY.md](../BUILD_DEPLOY.md) · [specs/20100612_1_scaling.md](20100612_1_scaling.md) · [orchestration/sim/cluster0/ARCHITECTURE.md](../../orchestration/sim/cluster0/ARCHITECTURE.md) **Related:** [INFRA.md](../INFRA.md) · [BUILD_DEPLOY.md](../BUILD_DEPLOY.md) · [specs/20100612_1_scaling.md](20100612_1_scaling.md) · [orchestration/sim/cluster0/ARCHITECTURE.md](../../orchestration/sim/cluster0/ARCHITECTURE.md)

View File

@@ -530,7 +530,7 @@ endobj
endobj endobj
87 0 obj 87 0 obj
<< <<
/Author (Android Cast project) /CreationDate (D:20260623103626+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623103626+02'00') /Producer (ReportLab PDF Library - \(opensource\)) /Author (Android Cast project) /CreationDate (D:20260623115607+02'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260623115607+02'00') /Producer (ReportLab PDF Library - \(opensource\))
/Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 specification) /Trapped /False /Subject (\(unspecified\)) /Title (Repository and microservice reorganization \204 specification) /Trapped /False
>> >>
endobj endobj
@@ -839,10 +839,10 @@ endobj
endobj endobj
147 0 obj 147 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1030 /Filter [ /ASCII85Decode /FlateDecode ] /Length 1027
>> >>
stream stream
Gat=+9lHd\&A@7.b\<>CMIRTA_m.sWPu^%a'==Z0'`obV8g%o5<9^SnS!4'(KE+>q"nm<7AisQ-!n^bRplAGU56D`e&Khd>)%[Up&3Rj?0_dRL?RoE:\Atf]63r5bh_dALNNbnnjoBFLNeI^/0^?7Qe9kX`ah`pd?tE#.+O$:Ie/E9/&sN`@k(=M*'=lD1P%SM7@2d$5M,^@Kg*Vpb,r7Che)W=/P:VDh!s?6&;)1e=imA2<mh"9kW(q)TGVRf15<(sqi($MCK:%osYT9?oa9\gb0hcsi^5Zl6'E=g[?*BSd^/mGqo6:cZ!jBKu;_+Vi.pm3ejUG+U5h$I$eER,'R@Q#4ANi9$2f;3%@@S3I+&P?bN!rl]R,&ZUH^/@`5.:_2KJ&dT--Br<9RAMSlcaf"@W@s*pYg7uo/aPddEGgZ0a4bZ@f!cm%Gobc#qd9i<[fW$Zq,Du&e(BF\Vr3(-t*7hR.*;`J&CA;ShO6n[dG&=EP*%k8_)bT-=:;`KeGTfe(bp9GI&t4ohKBWf<fOp9qZ7^'=ghZjc!tOhLh=TM8c#1ENeI&N/kgRFEc%[mV[Sbb"%h[LtA<Tmi7/H;!5(*ikm:CV$Gg.Pn$XEi.1#4q.p`\)(o.CCCg9$d[>^!\P196Cq*O!]8Ub9[8(fbVKpX[%!^qX:$#EU,i;mOV*"DqR4fJs\t*=ec!.#:G@DREA@u&'m&1:eBE''ZBX>#!R.&TXA9Tt?>I12:V0d_OCT4\"V/C:KFCr#,=]9i4a&hP:Ssm.[2N](5inK__c6>E#R-:e<8MDOKS$MGEgS%88dQ(LMVFkJNqin)E3>"8UT>/Y>I=OF0>\4o.PB$//?s;KL6f5C7Fs$F$$.E>j=!qtS0s3(//@e#Vqp+I@4-J:ZZ9%)H:pc7W'bmgGn.Fd65lM??C(PAQn/?m#&T/':*YD-ViDapLAX*P\ML@rrgu5,hd*&9S"6OT6P(8eS#=u@XQnP,]nYE;X&c_-s.LF-8MM1#:5T+$aGf?#rOMKMIXQ9s$rWCm%,"D~>endstream Gat=+9lHd\&A@7.b\<>CMIRTT^p2XTPu^%a'==Z0'`obZ$BR+j<Vl%5-7+5M+b3BuJc4H<):+\$!&bWBs2+utV[q5]!ec0?!5]9Lrt4\tdD$:h>fer<0#nBrPR'>l1H71MYY-#)!-12QV$fh7l7i?d3AR,c?q,a?(_[Sh[jEN2"rrIFV,E\+5D&E!Xg:,B1;/;_N?F'FS`NI^j%t;-R9g)3r"0W_QGTtZ6,$B.]SOJrd1uFpi*XBt8SWWt1=p`!#_MifO+paAE@[A`4$JsmO]F@!R!=41)>19Yr^Tn5^0\dt?Lds>r@Q5!4HIrb-V!i24^V43>GQ:rW%1N?o``2i4(/354aNK6h3-:)"?4OGU4`l@(pm>J\2KlNWn).eh&96*1,p:)Pgb2O%V!GERCsc^nhRBc_TOS'3eIL]c<HSh"h1RBqR)%ehUs7_/g$Wb.BTVW9R"eqN#uN:MU(?4i<1l/`";(G_.o`?R-SEiG:fsWD?kfiDX_7:]Ona-0*A0%_Al3-M]`K"S_BU;C#_mR5W-VqC)c?D1Tj1B!-6L7(AEj-X]G<T3XUbnh>L)gIgZrh0u7<cg_T!Xmm&u>Gl^JP*F:084m6g`Ee)RR#A!kUB9T"4E7LXg#LIC2SnY];Wmn],`bV-YWN^mqcf;YDd\?,'#,6='k%^r=>jO)Td\$Co?G<k(A\DS0005q%J)VRZe[fGI:^0[5p[>D,PLs.lG3]X<q\uc1=kfq(5JEVpd^b67hVglec#.m7[K-&^YKGm:C0o3?=M8p7DdWJl$hNW=/>(XK":O5'B\RsL*1GqJ?(rT"7Cpk!LIt:aM9*0fq:ki(7`_EhERW7*N3ck9dfI3*g;`4+I+[0gbf_G?T>6H,\@/WMj:%/f46oiC87m4lqNOoGd3ab%:q2A!8!MU*Gt3g05i`M#)@1=NYQf\"&P`Gee9!QZ<=$J&4sMWHE)T3hl.kG&G6K`n5cW-4,T.cf"6ahhl)Hik523)@_Jt>Tl$+gWN]82"q&qRA0Jt=!q#dDlNoqS3~>endstream
endobj endobj
148 0 obj 148 0 obj
<< <<
@@ -853,10 +853,10 @@ Gau11gJZcs&;KY!MS:??=D2g-hAJWmWcDLPZ[:`4Xg'^k-V,.e1]fa7^HEh#!$U4(9.m6[#2B*U%tF>\
endobj endobj
149 0 obj 149 0 obj
<< <<
/Filter [ /ASCII85Decode /FlateDecode ] /Length 3864 /Filter [ /ASCII85Decode /FlateDecode ] /Length 3856
>> >>
stream stream
Gatm>>BAQ-&q9SY^n[)_'FEW[EuDr?;YShO,KZA<N+OgZ"\EMYOo`YVm]Sh_n1%a4;XHHK9EEcbFr.b4W#ut,'_0p@+S9Z1VOnQu@'n]57?]R8]L+X$M]Wa-2H/'N_pW**RC48I=YjLB`L#-^Q7eTYKHD!q=Xf_H8Opr+;IocP#:qU83(I-LclK^1%c-22Jf)J1&UFB\/cQN:M-60YnT]+$^0A>5dXC?k^si_u7glO,'C$4;U!>Q6nDAmORu/@I`A0>^6a=@&&qpaCLNM\^hHsTnPN%pRJ=))b2s`r"[gN`n5<\Sm0'Dp*[#g%P>$Z#[p_O6;D[)#uCZeppnbQ0OaA]B5Rk7fP_aJRO,6=K59\uP'J<!;h@-t0]@P7<tfSt%5q4!6$q\-.0"P-4^5<pYl4b!tXYnJLdU"@M28JI?t!o"bmC1)-H7rq*s5UgLnmh#;JHasf:@=Y)c_oUsB3eTf_Hgr/#p#(&q6Q6[6iN'<Y#tfg%o+>ut4Z[gLRP&,*M3&ZsC,'-![)KOJ>=IpXed^@81'3$m)mf.qpXAA-IX.&`9;bOhTqSskjuP&rY:ilKJiH0&&Aa5b4iaZX"5W!#ald6@?KN42*Cf6g6L,#5q6u4LK,%Z1njslj3sdeY#.m1XTs+3SX[cNQ>X(n?\P4_%-Q_8B$9g[Dk/7K22@UV_rr-Uq'@Fr)ioAMTh=\8CS&`-r5Dh*s6sLf"M@9N>^FA'-lhGaao*HR_pOpMbhb9G^R(@_JmR-+#Cju'CmIKCSq)#j;q>Eo([aM!_Y8;W#>!ULB6@&W'IZi6NL:1/Y&-a23c_DTc[mgiRI3.NG`IuEaV&qgnUjr?@eH&(TWRB$SaJFQ.61/*@&#WY=&eIkN[,.L)(k.7$g!q*I]od=[QBXU\0lcJ(S4;_DYcLWOkHmG'"*s4\Y%d[T#^X(!KEm;@%Sg_/)<g(p9'@GX3tGBjFh)m)JCMkV_FLo5.`iH,FVRKJD9/T.,ZDalVMIC)71mInpOYSdWT@_a"+8(n,h8-Ec=-g'9=h-=h%On<Qr*N8KmOcY\ZbPdWj=,eH;#`'%iHLgC.iS/RmuHgc,4el"f*^r'qSahU*AV?8<<FD+l*\:DHLHGqW_og+m'qf`Xq3_mjq2==--q8Uq4-"4#=(sLm7gdJE=#c^-PRhp7#rrQmTBRi1pI5n@Gf8$6F[@`4S(*??XCi/<R^t3pP'?:5K`]Pt4-AZXU=hbAa"fh!_;adHpD3U$1e4!DEV@YVRj`'CWU7XW@-tQk;*jJ78N<r9s&X9nin/JLF[uSr93&[tocIN$=C@5duQ(IhK4f!2TKngUhkR7gpBfM'=:3hAShna)Zt6Q;O1GX/aq:5J19_U1AlXc%jrKYB?t=+o9&$L6N.0lGCKI\!sH>Lt,3dH,r$1'R^&d[u@KNf3_>/np'`b=1%#<F'Z^R\4dBKiakcOc;tdP$XRoni.^o$Me,b6U,;sOGrC"<+bU_e*eY?7a*!]h=TaZnh;W"VCiu<V\ul_\7\0rh6DBe5Peu@`Xlr;SjU.(:'Cm=Y>YU=*QEYrM1k@[nCpABr2#0p2#6\t5,7/r?WdeW]Co*IPLbkX*U%d!cnJQFK]9b./N2I'T:=0d^##;j7_%$0+"m[,l:?J]UM^RpM"U1A/\@dM2l_LRh'hcokSjiPXnjBo])*i^<!bVSlB_::aOut)'<OC9W67>hWk&@[Of81M4gq?&oO*sO2dt(+L4a>E_Hr\aJZP-/$@?'etr6JhcMXiTD+H.*i@:$;2^5/@gX<L:YbOH1oSA=AGWLck(DV_"='*7\>ekC.@ZK#(@5!;UNAE,ZU)R9>_?it6KDt":m&O%Z!;:66!pK6.0poc'q2pAN^.-a3n#A%5&Hmd#-[YO'0T')V+;bpAoLN)YV"ED[l"D+h7rIf4enMaoq_-u7Y3e71[gj?6_OQ'ma**V#MFh^JnU4+u?Eu1r"EgYKH"J5;8@pi]IGLie%l_u=C3H[3%,'YV(qf0]+Nb<i;k`0FYm6,^U"%=5)Ym_es5%J-O_%N6UNOqh^'k(mZ$rFDqL\*Zd*1f*Z^tTK`iYV6kS=r=0a505N_W'0M2rDITj4QWt6]ZG+cuKF^!f)H[#uq-jTeY%7,?]K/#IiR0'8LdnHh`LHX@Vu7+j+brdm/2XDkl]Sn(MMN/r#p`a6%A)oi,aN5Zkb`0dUdVZkiDs`Si*f.j5BY0/<Xd0Vi$,=L(-+?SHJUo-tK.iA^Q3kCmGT;puI\s."SQJ;X05.,#/B<P]c*Zk,TFF[/.e>-:Q#9^*\<Mn\Hf4Q]"-fi:N".3F(dXtfuQq#Jo\PlZ-P#G=tq%)>e*!7b1_!1r`^GcD1f^Hu?$87".m^t;CVbr%'oE_X;j<Uq':,Y_:N!?b)k,s.SM]#FL3<?6e&.67$_3L?2;a@X23VAmRX>VVHa#VCjC*LqZ`gXAh^/Oqa`aJ&.ioPI5SQ(EFD'!^J/^:`,1IJbpq5(n/O@t"SZUGJR$d\+M0c8G!JGGksT4JpNJl\55h+)l`teIj,Qa&WQ=Vq2ZkVU>6/^]@T'pE@5p&64O"-%4eN,S9ts#IiXGlM\aGD)FnoX_oC]2/t?ZAC%2HBMO"%*Yl.B"2GXOZatBaRH^iDRE`K+k,+gKKQS(YH&&E@EeR.^LPiM=L(EihAIc_t3]!kYD6&\D?gF4'<AF/qb'Ii5fLK'`+L?*Sb]:Ihm;j1]ZbNb'N&.n<ds<Ts>MWb5mu>j@<V1;"I6F6P),I[R`b2d6(lp;7kEE)NMhs2S-)I^D9Cl(`"]iAnCYY/HEF"k_r4oMOdRu<LpiTYX+.Do$OP'lSk"mDWp3@Fk"%kd^*c80`72p4EAes!:l"sYY?_qs^+-<hha$G$!rVj#PS%Y8]TH>R8!'<kbNpikn:\21A:0#X^?I_9;3<%W?r(&/=n"nuCirOFe`#.<*VcjRM"C3,:#YTs@Lk'n']9ohBL%Efj%bnHL/RbEhq(I4BkMOPH`[<jgI7:0;#X%9UGt4r:eQlTN4^OY-%u^3o1DEE>SA^!n%A.9BFb#=hdh\9:%Y(ISm5cX#g*D&L-[\D_i&YQSFMd)0a".7F*7:hp/\#]Cq!c1l(XsG`?/)G7M0l-tZK#=8m@>(YLQek#`aN@ll#F[Q8DE"pFi*#pnk[qG4sN)X(J=sDVt%\iFhba;>`AQE^;AO\Ii'OIZd2046E^FcaDS]"X14F$GH6`s\1E@'CV1Y%bV%N8(Po`Be4Da-eRa1gG7#c`UNR4f%nI43CTH-`EV9TD?!BdkIg1ls[+nWXI:7O-1nuT^5bW3"elADf)R'2>mH5XQ4J)3DdAqXgpoP!09&,(EBs>M7<KI`#mjfd8RNV=[M^$UJ\sA6GdEpm#Z?Z4*6rV>ISMKYTBV<:ZhNuTHfn<DM&^X-.(Q+>eNp?mJg<HLT^I/`I)itYN2tkU0[bo!h3kYTt<Y-qRO;ot!.e6%ldK$!L/ttVU1%S>J]Q-Ke=PbTpK,U=[Uf6$tB\sN.OZ:%InIZ?9VF\U[")@`ekbLV^6k3^PhW,eZ!%CjJ08aj23,#>nL-s'&?)ch_RQ_-P/gn(pa]1YISZ**u--XOUR-Kc2o&7Y_(!s?\317Z7eKM9[`DMocOKOm:g+h6^<Hot5]T`aVq3[LRo!4>+Z:h=D,OjD<_/&':]J`CO=uuf?[1[8qa/6a%;=30&SZ&u68ZF80h5Ic]PnVHYs"IXC_o2#hm_q7;HBh8J!ndA'`A-HHG@.WmEor>#H,`e]7pqq[+H$8Cdc`d$cAQ#\LUN;<T:XM`q+PJlnm&LAmC=2XOnlR@P-P4'SBc%B?_/6[+-hu3"'7687556Ns"(WdghX^bD#Z"iU;Ll:Wbio\90-T=&[drTRY!UB)%9gK+63dTE<~>endstream Gatm>>BAQ-&q9SY^n]@J'FEW[EuDs%;tnqP/'44DN+OgZ"\DB9Oo`YVm]Sh_n1%a4;X$0G9EEcbFr.b4W#ut,'_0p@+S9*!VDei[0Nr@VU.H8,hP'8s`V0`dS#PY8@Hk(P9\YZ5XI6<\im60^Q7eTYK^T^B=Xf_H8Opr+;IocP#:qU83(I-LclK^q(qRh?">Pd@,P(73>(.3<M-60YnT]I.^0CTRV>ISd!)kNr*%erM9W1V2L-")!_1*-0Cat1l'[,-j%E8018JErT*R^JlG^k(V:5WE<!Fcu$:Y:LXD\jNgIX'qa?-\N&dm>*6BQ^k^iSPn_]bqrqY+9L]a,`.g+]$2qD74,3%27".NWb"r0mSO0!]i(?J[NDhLq2#n?oQYnkAM]-mn^I]'3Homr;`ZNp&$sT`(li,L0iPS2Z7[Y\g30TVESjNZ&-+\j:gtM:@*Z8MY7N))\`kk_jY;S7u&c(I4sHp:*1H/?t_nO5C@V)5!_aOHTiX6]13*E7oL$O-4t8c:,aM9J-@XpZ@J\C)8H^9Ji!O[l^P<Ricil9<do=V@%4&hYb@c"q;OFdY-0KXp4>7lYRnX.3^(Nc0*C%j4fMXMk:#OJ6@TR#\e3]8pVD_>%J_7[1&qV='*e>#hP/?jPH@>XN*JS@2RuO8,:=Pl@L>:`DW\kB#rW53hu7UOT8<j961X"!p?pt-O4TG:%t>=$ZA?"Q!@T]+)?-@X@BSYRER-"ceD1cRVg^F5hI5^G$+LM2VmH3LDn!pUX6%h.)WpcEC"Q%EP.b2oq.]qe-j]&<,l'`,D]7>93C+L,+?kj<&DS0aPk96g3u&D]s-8'&,a86#T2l1.8Z56?pE5e8^'2&s4[,BV,tLWn6-sq9p0m_*5%[l?D"U9?NEB*XjMf':PAhG6Zbj"3"eO3><"J&l9=q([1F),J[LjQ'/iYhe+_@=)s!j^tM!mH.osa&RE</s!RgC1Y19Dg+=OgCsWO<t>(6V?3gR9>[C_fGN+5RD%+JtHo.1Pb]bE>h'<]UTopata1Y'!OeeRCl$gD''m)!AWQT<$878E_e%YWZNITW0Tcm;*]'X#(@NXV[)-PZ2mRI>`uAK-3>.=+t``.(E]Jl0GCZ+bc;=`#1q($bir(a^.8n/X,Jbo'FT5H6Z>Y])e58<r3(eJ_=tQQ"$3G2Lpu$/Ac2=RONLZM%K:<OF#S'=0Y-pX6?KLUGsQ'3)q1$[*FQZmOc>!Y&V4[*_3QWgP2H'b6K^5N53`G\4jR0!jm.+DdZ&U#QoqbM"@7p\!d^9&-Ge8p,s3Tc#41'_cW-^ii%iMpm&@K![-=6g>;5W3+CgE:)#F^o[YG54dJ1rQ]0q2?WGo?s5E?k9T-@hnKG@*CL*uRLqYR"+_=$:\hJ-km3ZTR@Wdl2*jUe:jkg'S/Yailp"'kd4J'4\(%$67h,1_KiA*EtM3ff.3aZ$3/pPcXJ/@',/XAiuM:Mf/jk8u8Kb.i1q@[,Q*nOO=B+6gYFGlLNZIO4MkdjYc(jRT=$&Mio;[S/t[\>!@Pq+u.:WSGZE&BpB>J^_*ciiVVYf6;PTZM]S3?WRi*(^^k;#N1SALkHI6(IIe%DA+2NmFB!g:_T:A3=.bGD`Og2/qj*$>r*I.TkS!G;=Ar>!-f..4Ei=^u[/T==7AXX&stfp+526O<;>VaoDJO&i^Pl8#&;PP2n@NXeMp-&43?'0o)M=\PDMdiU/;OGjHC/SISW)l+riii2a-fS=P0@$>YTej*qh3;j=2:"(Aie$1jUNpI4]W@hi/;=H8H8joeGW8bI1WF6a;VS-YMRT%k<[m!.*>S#>M%Cchqg6Pb1SCnQdG%K:o?_MuDQ-#HM,O/;6"s*@Rk_]11ZU.ti;;!.GlGCiM,H\gP=H-XMfogHcF#hPYD&D,]+:^4Ph:+2GNIj=Y&*!T05"5%P:^%VjD.=MK;Tp6WspP\Ypl;r$hGL>\!LP\/^i)r9,"pX49B<>@LSshF#;ccmFK!uB"+,9.FGkUlbm^Q<JhLeln:t3l,b7K9l6RF]3/?qe%\@XRt&[o^%!-QJ+8ADFNiH`<I]Ia.5IROdj)*0$llqPDN/:O(2o.<WiT)B<VoQ[8</XKijYXrN!:fX_5)FL&MP3(kRE9h@'EHh`!LVJ)NMF8O'U($cV%A&p_2VN'DY-$:9@b>sOC`_2,:W6oNK]RP%;Zc,OCN3-V**tD+'&kV:+uA-d6g>tR-0k[2"VZYNY>RY'IY[r10-gppR]`=[kPWd4<6WZWd<6q=$NB7aKc#uR"7jjkEb/]k8d?MGoMp\)0cu"iXtg&Sq#JocPlZ-P#G>\0%)>e*!0p`!!1r`^W5^:hn<=I!;e5t.'`tF+nuC@C`cc*3Y%dEfC\h[F-*L`MdT!Un!7DQ[ZEjk4>F\JqePUR\P!^=ZF/eD]S-5@"\oHNJ'gq5:d"4g>_&5eJ4j=\jEca*o*#cReIqe/DdaN,%,'MbcQa\!0O.RcKLCau1bcaHMF9Zha)Kbc.\Ybqf%^f`'a##i&]l645$P%-S>(VFgfLfTOoX^dJ1g7X$3$>9mhP[h#U'_L7UedL&"QJ>!i"g]E^&JqFXX<;@eVtiS-8$X(lkre0c,o^uUZ28b!4\b<<YmD>1VK&0ZhYEXg_=k&YjUKrmnaa%Y&NXi:pJU/n3K7?be\O+B8./3D:NXpCRrqL.]2&u=`8-cq^?4^A6.!==mic*I849hp,CQWEQ7]d>-B5kX'6#$]s0VoME^IA57XW!`fmNXn_%b;`hQ2gq;h.t@\O9-8SK]jdeqTpJ^psJ)RnmB>aM8pht&A&oMUVkIbe#ZLSk#!AG-&.3KsiYI@eFIJC;c07p@N[d0<jjRDni'HJ=bZ=6\PpHfXPgEKD5KIlo:*B!5eokQf6<^^_$Gj88)_e,4*>;\cZp=7qV'Nk]`S5Ea.>HYI`TGX*;q0h/Y$WKomk6.\Ug_U>,>,%.%c/gdZ>iB27^_tGZV9A&HHrla3Iq000Un]B'r?]cfg!mc-rh@ZegF][3lNu+_O_]jQ_$q1dR-a=d__rmFi*FRms[)Jl'_d@.m]+2u72@6#,$(m>E\5(`XSacFP0hXbT7l785$a*\i55]B_"Z8epgGUQUineC6lo5hQHRHhZiFM8aES-X^H<`0Bd^HW5SacB5r)<<UcU^h/`KEO?BftpTmPfBJ(TR*B`WlI\32)^f7QM0.%EM%_la:$;Xn92/F^2dp.>2'gjnND1\TY_Qj<^Zug6&Kio=MP38GO.2MpQ]6HE^RWboVkN\,,CD1'7D1B`,U+VD@NHlRSVGA]Xr[PnUC)$GFo5rU4Yh%<:J!V!j@Nj^[P5J?Ylg9fS:?4"O\AGq\m*E^Hl7@c+gH,2KG<WCS*?/^>`%V[l-OeVqm)o0.p69"a:l$*BRhBZ1qlX^lLH(hr-BDD7pCD!Ldg1h!fn)$+qk%p`fE,L!=>/)Y.GnH'6C!Rn+oDq$!@+M-JT$Ig%O56]4\BB5$5ojTq[iAj=f[7uYSFTEG<dgI'9&OBf^1jh9U`rCWc8d%iK0UClr%T3Il1<'*a8;DhM[MiO5Pg%O?.\<[)_k?(2@QTfZ-,e3!lB#2d]GuO&%Oi\GNkA<l?)rXB3P8611.tpn<N-JmC,r(1KAB^bQZC;CWUQ(3H-%?cqa`<NeB0lTYK[]m2NGRgUBId.,HtH(Z$(M23d_RjcAg\;C>5&MWj:<;C7ABei=,VpUW#Djr9ioX]VD3&q=Gh\Xfl"M6XE"SP/WM=B/ImiT'ANAo:-%g%&f@Zhm%<1oX[5nKadqLS/0=]6Aq2nRdFe7jm\)Mf6*4?,rjq,IP^ikjJ_sSN*IF6P,TmfBqY<8\c(Mo!u>PH?eH&4G0<j%$Xm>h+d7b]]i<Anh!rHnki2Uds3c/~>endstream
endobj endobj
150 0 obj 150 0 obj
<< <<
@@ -1092,24 +1092,24 @@ xref
0000714832 00000 n 0000714832 00000 n
0000714929 00000 n 0000714929 00000 n
0000715093 00000 n 0000715093 00000 n
0000716216 00000 n 0000716213 00000 n
0000718415 00000 n 0000718412 00000 n
0000722372 00000 n 0000722361 00000 n
0000725926 00000 n 0000725915 00000 n
0000729503 00000 n 0000729492 00000 n
0000733391 00000 n 0000733380 00000 n
0000734953 00000 n 0000734942 00000 n
0000736448 00000 n 0000736437 00000 n
0000740097 00000 n 0000740086 00000 n
0000743096 00000 n 0000743085 00000 n
0000746504 00000 n 0000746493 00000 n
0000750244 00000 n 0000750233 00000 n
0000753669 00000 n 0000753658 00000 n
0000756676 00000 n 0000756665 00000 n
trailer trailer
<< <<
/ID /ID
[<53c74cd87848b8b637e106b62ed0d828><53c74cd87848b8b637e106b62ed0d828>] [<a464cb1b9faafc78e6e7faee8af46142><a464cb1b9faafc78e6e7faee8af46142>]
% ReportLab generated PDF document -- digest (opensource) % ReportLab generated PDF document -- digest (opensource)
/Info 87 0 R /Info 87 0 R
@@ -1117,5 +1117,5 @@ trailer
/Size 162 /Size 162
>> >>
startxref startxref
759193 759182
%%EOF %%EOF