From 8e5c792b50fd73030591535a338664b1947d2c38 Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Thu, 30 Jul 2026 10:18:24 +0800 Subject: [PATCH 01/18] round 1: project the web transcript from append-origin events Replace the surface-ordered fold with a log-ordered human transcript: append-origin surface events at their own log positions plus one marker per landed compaction checkpoint. Command folding, the tool-call index, and the rev-keyed memo carry over unchanged. Removes foldDegraded, the padding sentinels, baseSeq, and degradedSeqs() -- they existed only to satisfy the core fold's seq === index assertion. That also closes the pagination hole A1 exposed: a page can carry a checkpoint whose shadowed range fell outside the window, and nothing resolves surfaceOp.start anymore. --- ...7-19-gui-web-client-architecture.i18n.yaml | 6 +- .../2026-07-19-gui-web-client-architecture.md | 10 +- ...26-07-19-gui-web-client-architecture.zh.md | 6 +- ...9-human-transcript-append-origin.i18n.yaml | 4 +- ...26-07-29-human-transcript-append-origin.md | 4 +- ...07-29-human-transcript-append-origin.zh.md | 4 +- ...ranscript-log-ordered-projection.i18n.yaml | 6 + ...0-web-transcript-log-ordered-projection.md | 66 +++ ...eb-transcript-log-ordered-projection.zh.md | 66 +++ apps/web/tests/seeded-history.e2e.ts | 97 +++- .../snapshots/seeded-history/ui.expected.md | 6 +- packages/client/runtime/README.i18n.yaml | 4 +- packages/client/runtime/README.md | 8 +- packages/client/runtime/README.zh.md | 8 +- packages/client/runtime/package.json | 1 + packages/client/runtime/src/client/index.ts | 4 +- .../src/client/sessions/conversation.ts | 27 +- .../src/client/sessions/fold-adapter.ts | 275 ------------ .../runtime/src/client/sessions/session.ts | 37 +- .../src/client/sessions/transcript-adapter.ts | 325 ++++++++++++++ .../tests/compact-checkpoint-pin.spec.ts | 52 +++ packages/client/runtime/tests/event-script.ts | 21 + .../client/runtime/tests/fold-adapter.spec.ts | 251 ----------- packages/client/runtime/tests/session.spec.ts | 63 +++ .../runtime/tests/transcript-adapter.spec.ts | 415 ++++++++++++++++++ packages/client/test-runtime/src/fixtures.ts | 1 - .../src/client/chat/CompactionItem.tsx | 49 +++ .../src/client/chat/MessageItem.module.css | 75 ++++ .../src/client/chat/MessageItem.tsx | 15 +- .../src/client/chat/chat-flow.ts | 2 +- .../tests/chat-branch-tails.spec.tsx | 28 ++ .../tests/chat-code-subcalls.spec.tsx | 2 +- .../tests/chat-stats-bash-sample.spec.tsx | 2 +- .../ui-conversation/tests/chat-view.spec.tsx | 2 +- .../tests/gate-branch-tails.spec.tsx | 2 +- .../ui-conversation/tests/input-bar.spec.tsx | 2 +- .../tests/input-matrix.spec.tsx | 2 +- .../tests/input-scenarios.spec.tsx | 2 +- .../ui-conversation/tests/queue-dock.spec.tsx | 2 +- .../ui-conversation/tests/skeleton.spec.tsx | 2 +- .../client/ui-trajectory/src/client/layout.ts | 4 +- .../client/ui-trajectory/src/client/spans.ts | 2 +- .../ui-trajectory/tests/layout.spec.tsx | 18 +- pnpm-lock.yaml | 3 + tsconfig.client.json | 6 + 45 files changed, 1385 insertions(+), 602 deletions(-) create mode 100644 .agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml create mode 100644 .agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md create mode 100644 .agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md delete mode 100644 packages/client/runtime/src/client/sessions/fold-adapter.ts create mode 100644 packages/client/runtime/src/client/sessions/transcript-adapter.ts create mode 100644 packages/client/runtime/tests/compact-checkpoint-pin.spec.ts delete mode 100644 packages/client/runtime/tests/fold-adapter.spec.ts create mode 100644 packages/client/runtime/tests/transcript-adapter.spec.ts create mode 100644 packages/client/ui-conversation/src/client/chat/CompactionItem.tsx diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml index e4b0447cdd..6e1b952682 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml @@ -1,6 +1,6 @@ # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write -2026-07-19-gui-web-client-architecture.md: cfc2a7e62358e6282148b2d024ef3b162a903642 -2026-07-19-gui-web-client-architecture.zh.md: b5b082c25f664cfcb0ddd3fcc6c4cd3d58472218 +# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md +2026-07-19-gui-web-client-architecture.md: abe28b00638b4f01c7a50efe9ece5148e959a5ee +2026-07-19-gui-web-client-architecture.zh.md: 560015191fd8d99e2983a19d0b23aeb4dedff837 diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md index cfc2a7e623..abe28b0063 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md @@ -50,7 +50,7 @@ There is no registration model besides slots — the former view and tool rings ## The data object layer (`packages/client/runtime/src/client/sessions/`) -Frames enter, snapshots exit, the fold sits between — React-free (zero React imports, grep-assertable): +Frames enter, snapshots exit, the projection sits between — React-free (zero React imports, grep-assertable): ``` mux/host 帧(ConnectionController 泵入,sinks 注入) @@ -62,17 +62,17 @@ SessionManager.handleMuxEnvelope / handleHostEnvelope Session.handleMuxEnvelope ──► events 窗口(seq 连续升序) │ │ 定稿事件 │ chunk │ ▼ ▼ - │ FoldAdapter PartialAccumulator + │ TranscriptAdapter PartialAccumulator │ (→ nodes) (→ partial) ▼ Notifier 微任务合批 ──► ConversationSnapshot 缓存 ──uSES──► 组件 ``` -- **Session** (session.ts): lazily built, resident — once created it keeps eating frames in the background, so switching away and back renders instantly. Operations: `prompt`/`cancel` (RPC passthrough; failures land in the snapshot's `promptError`), `open` (pull the tail history page, idempotent), `loadOlder` (upward paging, reentry-guarded), `resync` (reconnect = clear the window and rerun open). Subscription: `subscribe`/`getSnapshot` (always the cached reference) — `implements ObservableSnapshot`, with `useSelector = bindSnapshotSelector(this)` attached at construction, so a Session is directly a uSES source. Frame dispatch is one switch: `session/event` frames dedup by seq (the only dedup key), buffer while open is in flight, otherwise append + incremental fold; open/stitch merges the live buffer by seq and backfills once if `subscribed.lastSeq` outruns the window tail. -- **ConversationSnapshot** (conversation.ts): the immutable snapshot contract — `nodes` (folded, surface-ordered), `partial`, `runningCalls`, `pending`, `running`, `removed`, `openState`, `hasMore`, `promptError` and kin. **Reference discipline** (the premise of memo and uSES): the top-level object is fresh on every change; the nodes array is rebuilt but element references come from the cache; unchanged substructures reuse the previous snapshot's references. +- **Session** (session.ts): lazily built, resident — once created it keeps eating frames in the background, so switching away and back renders instantly. Operations: `prompt`/`cancel` (RPC passthrough; failures land in the snapshot's `promptError`), `open` (pull the tail history page, idempotent), `loadOlder` (upward paging, reentry-guarded), `resync` (reconnect = clear the window and rerun open). Subscription: `subscribe`/`getSnapshot` (always the cached reference) — `implements ObservableSnapshot`, with `useSelector = bindSnapshotSelector(this)` attached at construction, so a Session is directly a uSES source. Frame dispatch is one switch: `session/event` frames dedup by seq (the only dedup key), buffer while open is in flight, otherwise append + incremental projection; open/stitch merges the live buffer by seq and backfills once if `subscribed.lastSeq` outruns the window tail. +- **ConversationSnapshot** (conversation.ts): the immutable snapshot contract — `nodes` (the human transcript, log-ordered), `partial`, `runningCalls`, `pending`, `running`, `removed`, `openState`, `hasMore`, `promptError` and kin. **Reference discipline** (the premise of memo and uSES): the top-level object is fresh on every change; the nodes array is rebuilt but element references come from the cache; unchanged substructures reuse the previous snapshot's references. - **SessionManager** (manager.ts): instance cluster + frame entry + the session list. sessionId-bearing frames go only to existing instances (a mux broadcast must not instantiate every session); approval/question `requested` frames are the exception — they never land in history, so they buffer in `pendingBuffers` and replay on instantiation. - **Notifier** (notifier.ts): two channels chosen by change source. `markDirty()` (default; frame-driven changes always) batches per microtask — N changes, one notification, one re-render; the flush rebuilds the snapshot cache before notifying. `notifyNow()` (only direct echoes of user gestures) rebuilds and notifies in the same tick — controlled inputs roll the DOM back and jump the caret if their echo defers to a microtask. Frame-driven code using notifyNow collapses batching back to per-frame renders; banned. -- **FoldAdapter / PartialAccumulator**: the fold reuses the core SurfaceManager (`@deepseek-ai/dsh-session/surface`), padding sentinel events so a paged window starting at seq > 0 satisfies the core's `seq === index` assertion; a cross-window replace degrades to a tolerant linear scan and sets `foldDegraded`. Chunks stay out of the fold entirely (O(1) skip): the accumulator folds StreamChunks into `AssistantBlock[]`, a delta swapping only that block's reference, and the finalizing message discards the accumulator in the same batch (no flicker on promotion). Cost model: one chunk = one string concatenation + a dirty mark; an unsubscribed Session under a frame storm costs only the mark. +- **TranscriptAdapter / PartialAccumulator**: the transcript is the append-origin surface projected in log order (`isAppendSurfaceEvent` from `@deepseek-ai/dsh-session/surface`) plus one marker per landed compaction checkpoint — never the model surface, which shadows replaced ranges and would erase conversation the reader already saw. Node order is seq-monotonic by construction, so there is no core `seq === index` assertion to satisfy and no degradation branch. Chunks contribute no node (O(1) skip): the accumulator folds StreamChunks into `AssistantBlock[]`, a delta swapping only that block's reference, and the finalizing message discards the accumulator in the same batch (no flicker on promotion). Cost model: one chunk = one string concatenation + a dirty mark; an unsubscribed Session under a frame storm costs only the mark. - **ConnectionController** (in `packages/client/connection`): opens the mux/host streams, pumps with for-await, reconnects with exponential backoff (500ms doubling to 10s, jitter, unlimited) behind a generation fence; sinks are injected one-way (the Controller does not know Session). Reconnect = rebuild: `onConnected` → list refresh + per-open-session resync. The object layer faces only `IApiClient`; the Web carriage (HTTP POST for the two client→server quadrants, SSE for the two server→client) and the client class family are the layering RFC's territory. ## The React face (`packages/client/web-react`) diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md index b5b082c25f..560015191f 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md @@ -62,17 +62,17 @@ SessionManager.handleMuxEnvelope / handleHostEnvelope Session.handleMuxEnvelope ──► events 窗口(seq 连续升序) │ │ 定稿事件 │ chunk │ ▼ ▼ - │ FoldAdapter PartialAccumulator + │ TranscriptAdapter PartialAccumulator │ (→ nodes) (→ partial) ▼ Notifier 微任务合批 ──► ConversationSnapshot 缓存 ──uSES──► 组件 ``` - **Session**(session.ts):懒建、常驻——建成后在后台持续吃帧,切走切回秒显。操作面:`prompt`/`cancel`(RPC 透传;失败落进快照的 `promptError`)、`open`(拉尾页 history,幂等)、`loadOlder`(向上翻页,防重入)、`resync`(重连 = 清窗口重跑 open)。订阅面:`subscribe`/`getSnapshot`(恒返缓存引用)——`implements ObservableSnapshot`,构造时挂 `useSelector = bindSnapshotSelector(this)`,Session 本身就是 uSES 源。帧分发是一个 switch:`session/event` 帧按 seq 去重(唯一去重键),open 在途时缓冲,否则追加 + 增量 fold;open/缝合按 seq 合并 live 缓冲并去重,`subscribed.lastSeq` 超出窗口尾则回补一次。 -- **ConversationSnapshot**(conversation.ts):不可变快照契约——`nodes`(fold 产物,surface 序)、`partial`、`runningCalls`、`pending`、`running`、`removed`、`openState`、`hasMore`、`promptError` 等。**引用纪律**(memo 与 uSES 的前提):顶层对象每变必新;nodes 数组重建但元素引用来自缓存;未变的子结构复用上一快照的引用。 +- **ConversationSnapshot**(conversation.ts):不可变快照契约——`nodes`(人类对话记录,日志序)、`partial`、`runningCalls`、`pending`、`running`、`removed`、`openState`、`hasMore`、`promptError` 等。**引用纪律**(memo 与 uSES 的前提):顶层对象每变必新;nodes 数组重建但元素引用来自缓存;未变的子结构复用上一快照的引用。 - **SessionManager**(manager.ts):实例簇 + 帧总入口 + 会话列表。带 sessionId 的帧只投已存在实例(mux 广播不得把每个会话都实例化);例外是审批/问答 `requested` 帧——它们不落 history、open 无法回补,故缓冲进 `pendingBuffers`,实例化时回放。 - **Notifier**(notifier.ts):两条通知通道,按变更来源取用。`markDirty()`(默认;帧驱动一律用它)按微任务合批——N 次变更、一次通知、一次重渲染;flush 先重建快照缓存再通知。`notifyNow()`(仅用户手势的直接回响)同 tick 重建并通知——受控输入的回响若延到微任务,DOM 会回滚、光标跳尾。帧驱动代码用 notifyNow 会让合批塌回逐帧渲染;禁。 -- **FoldAdapter / PartialAccumulator**:fold 复用核心 SurfaceManager(`@deepseek-ai/dsh-session/surface`),垫哨兵事件使 seq > 0 起头的分页窗口满足核心的 `seq === index` 断言;跨窗口 replace 时降级为容错线性扫描并置 `foldDegraded`。分片完全不进 fold(O(1) 跳过):累积器把 StreamChunk 折叠成 `AssistantBlock[]`,一次增量只换该块引用;定稿消息到达即在同一批内弃掉累积器(提升无闪烁)。成本模型:一个分片 = 一次字符串拼接 + 一个脏标记;帧风暴下未订阅的 Session 只花那个标记。 +- **TranscriptAdapter / PartialAccumulator**:对话记录是按日志顺序投影的 append 来源 surface(`@deepseek-ai/dsh-session/surface` 的 `isAppendSurfaceEvent`),外加每次落地的压缩检查点一个标记——绝不用模型 surface,后者遮蔽被替换的范围,会抹掉读者已经看过的对话。节点顺序天然按 seq 单调,因此既无核心 `seq === index` 断言需要满足,也没有降级分支。分片不贡献任何节点(O(1) 跳过):累积器把 StreamChunk 折叠成 `AssistantBlock[]`,一次增量只换该块引用;定稿消息到达即在同一批内弃掉累积器(提升无闪烁)。成本模型:一个分片 = 一次字符串拼接 + 一个脏标记;帧风暴下未订阅的 Session 只花那个标记。 - **ConnectionController**(在 `packages/client/connection`):开 mux/host 双流、for-await 泵入,代际围栏之内指数退避重连(500ms 翻倍至 10s 封顶、抖动、无限重试);sinks 单向注入(Controller 不认识 Session)。重连 = 重建:`onConnected` → 列表刷新 + 各已打开会话 resync。对象层只面向 `IApiClient`;Web 承载(HTTP POST 载两个 client→server 象限、SSE 载两个 server→client 象限)与客户端类族归分层 RFC 属地。 ## React 面(`packages/client/web-react`) diff --git a/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.i18n.yaml index edb6ac6e4a..7ee4b1fac8 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.md -2026-07-29-human-transcript-append-origin.md: a296b93d538d9c28bd61ee8fd0530863b4bfd878 -2026-07-29-human-transcript-append-origin.zh.md: 96e0cd1038fe8904dfd4c1eceaae9b25339c5dca +2026-07-29-human-transcript-append-origin.md: dcc4a786c6f1926f06dce03124ec1d8ca805d7ae +2026-07-29-human-transcript-append-origin.zh.md: 0fefc52afa52e99cdec2bcea1a86b9c28711dd67 diff --git a/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.md b/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.md index a296b93d53..dcc4a786c6 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.md +++ b/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.md @@ -24,9 +24,9 @@ No persisted event, RPC envelope, compaction transaction, or model-visible surfa ## Deferred -The browser client still builds its conversation from the model surface through `FoldAdapter`, so compaction still collapses web history to a single context row. The same predicate is the fix there, together with an append-order transcript projection and a marker component; that work is a separate change against `packages/client/runtime` and `packages/client/ui-conversation`. +The browser client is fixed separately, in [the web transcript projection note](2026-07-30-web-transcript-log-ordered-projection.md): it projects the same append-origin transcript in log order and renders a marker component, and it closes the pagination hole this change opened — because `session.history` no longer spends quota on the checkpoint, it never cuts on the checkpoint's provenance group, so a page can carry a checkpoint citing a `surfaceOp.start` outside the window, which the browser's surface fold rejected. That hole predates this change (counting could already run past a checkpoint into the range it shadows), but the old rule accidentally covered the case where the checkpoint was the oldest counted message and pulled the whole shadowed range onto its page. -That work must handle a page whose checkpoint cites a `surfaceOp.start` outside the window: pagination no longer spends quota on the checkpoint, so it never cuts on the checkpoint's provenance group, and `FoldAdapter` pads absent events with a non-surface sentinel — so `SurfaceManager` rejects the range and `nodes()` falls back to `degradedSeqs()` with a logged error. The hole predates this change (counting could already run past a checkpoint into the range it shadows), but the old rule accidentally covered the case where the checkpoint was the oldest counted message and pulled the whole shadowed range onto its page. `degradedSeqs()` — every surface-eligible event in append order — is already close to the transcript projection A2 needs, which is the shape to build deliberately rather than reach as a degradation. Rendering compaction *progress* — a terminal indicator while a compaction runs — needs the bracket-first ordering that the queued manual `/compact` work introduces, and is likewise out of scope here. The marker also carries no scale: the checkpoint's `sourceEventSeqs` already hold the shadowed count, so a count or range would tell a reader how much each row folded. That belongs with progress, where the reader meets the other half of the same information. Whoever takes it should fold the terminal's two replacement branches — replay and the live listener, textually identical and 600 lines apart — into one `renderReplacement(event)` first, so the marker's content has a single home. +Rendering compaction *progress* — a terminal indicator while a compaction runs — needs the bracket-first ordering that the queued manual `/compact` work introduces, and is out of scope here. The marker also carries no scale: the checkpoint's `sourceEventSeqs` already hold the shadowed count, so a count or range would tell a reader how much each row folded. That belongs with progress, where the reader meets the other half of the same information. Whoever takes it should fold the terminal's two replacement branches — replay and the live listener, textually identical and 600 lines apart — into one `renderReplacement(event)` first, so the marker's content has a single home. ## Alternatives considered diff --git a/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.zh.md b/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.zh.md index 96e0cd1038..0fefc52afa 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-07-29-human-transcript-append-origin.zh.md @@ -24,9 +24,9 @@ Status: implemented ## Deferred -浏览器客户端仍通过 `FoldAdapter` 从模型 surface 构建会话,因此压缩在 Web 端仍会把历史折叠成一行上下文。那里的修复用的是同一个谓词,另需按追加顺序的记录投影与一个标记组件;该工作是针对 `packages/client/runtime` 与 `packages/client/ui-conversation` 的独立变更。 +浏览器客户端在[Web 记录投影笔记](2026-07-30-web-transcript-log-ordered-projection.md)中单独修复:它按日志顺序投影同一份 append 来源记录并渲染一个标记组件,同时闭合本次变更打开的分页缺口——因为 `session.history` 不再为检查点消耗额度,它永远不会按检查点的溯源分组切分,于是一页可以携带一个引用了窗口之外 `surfaceOp.start` 的检查点,而浏览器的 surface fold 会拒绝该范围。这个缺口早于本次变更(此前计数就可能越过检查点进入它所遮蔽的范围),但旧规则恰好覆盖了这样一种情形:检查点是最旧的被计数消息,其溯源分组把整段被遮蔽的范围一起拉到该页。 -该工作必须处理这样一页:其检查点引用的 `surfaceOp.start` 落在窗口之外。分页不再为检查点消耗额度,因此永远不会按检查点的溯源分组切分;而 `FoldAdapter` 会用一个非 surface 的哨兵事件填补缺失事件——于是 `SurfaceManager` 拒绝该范围,`nodes()` 退化为 `degradedSeqs()` 并记录一条错误。这个缺口早于本次变更(此前计数就可能越过检查点进入它所遮蔽的范围),但旧规则恰好覆盖了这样一种情形:检查点是最旧的被计数消息,其溯源分组把整段被遮蔽的范围一起拉到该页。`degradedSeqs()`——按追加顺序的每个 surface 可入事件——已经很接近 A2 所需的记录投影,因此那正是应当刻意构建的形态,而不是作为退化路径被动落到的结果。渲染压缩*进度*——压缩运行期间的终端指示——需要排队式手动 `/compact` 工作引入的“先开括号”顺序,同样不在本次范围内。标记同样不携带规模信息:检查点的 `sourceEventSeqs` 已经包含被遮蔽的数量,因此一个计数或区间可以告诉读者每一行折叠了多少内容。这件事属于进度那一侧,读者正是在那里遇到同一份信息的另一半。接手者应当先把终端里两处替换分支——回放与实时监听器,文本完全相同却相隔 600 行——合并为一个 `renderReplacement(event)`,让标记的内容只有一个归处。 +渲染压缩*进度*——压缩运行期间的终端指示——需要排队式手动 `/compact` 工作引入的“先开括号”顺序,不在本次范围内。标记同样不携带规模信息:检查点的 `sourceEventSeqs` 已经包含被遮蔽的数量,因此一个计数或区间可以告诉读者每一行折叠了多少内容。这件事属于进度那一侧,读者正是在那里遇到同一份信息的另一半。接手者应当先把终端里两处替换分支——回放与实时监听器,文本完全相同却相隔 600 行——合并为一个 `renderReplacement(event)`,让标记的内容只有一个归处。 ## Alternatives considered diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml new file mode 100644 index 0000000000..5f80a9b7c9 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md +2026-07-30-web-transcript-log-ordered-projection.md: 22e687ebc0a323a28eb554a9ad36749a0b6f3da6 +2026-07-30-web-transcript-log-ordered-projection.zh.md: 97004f7384aed8f9e43b0949b2fcd4b8c185ca65 diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md new file mode 100644 index 0000000000..22e687ebc0 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md @@ -0,0 +1,66 @@ +# Agent Note: The browser conversation is a log-ordered human transcript + +Status: implemented + +English | [中文](2026-07-30-web-transcript-log-ordered-projection.zh.md) + +## Problem + +The browser client built its conversation from the model-visible surface: `FoldAdapter` ran the core `SurfaceManager` over the history window and read `surface.nodes`. A successful compaction replaces a surface range with one checkpoint node, so the moment that replacement landed the web flow collapsed every message it shadowed into a single dim context row — conversation the user had already read. Nothing was lost from the log; the defect was entirely in the projection, and [the terminal and the host gateway were fixed the same way](2026-07-29-human-transcript-append-origin.md) while the browser was left for this change. + +Surface order made two further problems structural. It is not seq-ascending after a replacement — `SurfaceManager` splices the high-seq checkpoint into the position of the range it shadows — so log-only nodes merged into that array by numeric seq (slash-command rows, interrupted frozen nodes) could be flushed ahead of the checkpoint and never interleave into the retained tail again. And because pagination no longer spends `maxMessages` quota on replacement copies, a page can now carry a checkpoint whose `surfaceOp.start` lies outside the window; the core fold rejects that range, so `nodes()` fell back to a lenient linear scan behind a `console.error` and published a `foldDegraded` flag describing the failure. + +## Decision + +`TranscriptAdapter` replaces `FoldAdapter` and never consults surface order. It projects the raw window in log order: every append-origin surface event (`isAppendSurfaceEvent`) at its own log position, plus one `CompactionSummaryNode` marker per landed compaction checkpoint. A landed compaction therefore keeps the conversation it shadowed on the model side, and the marker reports where the model stopped seeing that history instead of erasing it. Model-only replacement copies stay out of the transcript: a pruned `tool/result` and a regenerated `assistant/message` rewrite one node for the model and mark no boundary in the conversation. Everything that must send exactly what the model sees keeps reading the surface; this is the human projection, and the two are now separate on both frontends. + +Node order is seq-monotonic by construction, and three things follow. The log-only `command/run` / `command/done` pair folds into `CommandNode`s that splice into an already-monotonic array by seq — no anchors, no reordering. `Session` keeps ownership of interrupted frozen nodes and merges them by their fractional seqs with a plain sort, which is now exactly flow order. And a window whose checkpoint cites a shadowed range outside it has no range to resolve, so the marker renders and nothing is logged. + +`foldDegraded` is gone from `ConversationSnapshot`, and with it the padding sentinels, the `baseSeq` arithmetic they needed, and `degradedSeqs()`. They existed only to satisfy the core fold's `seq === index` assertion and to survive its throw; the fold they describe is no longer run. Deleting the flag is part of the fix, not cleanup after it — `degradedSeqs()` was already almost the log-ordered projection, reached after a thrown error instead of intended. + +The marker's summary text comes from the checkpoint's own `compact/summary` provenance, never from the framed checkpoint payload, which is an instruction envelope written for the model. A window cut that left the provenance outside makes the row non-expandable rather than empty, the same soft-fall as a call-less tool result, and a later page supplying the provenance resolves the text. + +No persisted event, RPC envelope, compaction transaction, or model-visible surface changed, and no migration is required. + +## Recognizing a checkpoint: the local literal and its drift trap + +Recognition needs all three conditions, as in the terminal: `event.type === 'user/message'`, the compaction seam's checkpoint plugin source, **and** `isReplacementSurfaceEvent(event)`. A plugin-sourced `user/message` that *appends* is injected context — a session-reference card — not a compaction. + +The client restates that plugin source as a local literal, because `dsh-compact` is unreachable from `packages/client/runtime`'s program in **both** directions: + +- a **value** import fails the client purity gate (`packages/client/tsdown.client.ts`), and `dsh-compact`'s root value-imports cordis, so admitting it would pull `CompactService` into the browser bundle; +- a **type-only** import fails typecheck. `dsh-compact`'s root reaches `dsh-session`'s root, whose cordis `Context` merge declares the host `sessions: SessionStore` against this program's `sessions: ISessions` — `TS2717`, the one-program-per-side rule in [development.md](../../../../docs/development.md#typescript-project-layout). This was expected to work and does not; `import type` is erased before the *bundler* runs, but not before the *compiler* does, and the collision is a compiler fact. + +The drift protection therefore lives in a test, not in a type: `packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` runs in the client **test** program, which carries no such collision, and drives the adapter with a checkpoint built from the canonical `COMPACT_CHECKPOINT_SOURCE` itself. Renaming the seam's plugin fails there instead of silently deleting every compaction marker from the web transcript. `dsh-compact` is a `devDependency` of `dsh-client-runtime` and a reference of `tsconfig.client.json` only — never of a `packages/client/*` package project. + +That is a deliberate divergence from the terminal, which value-imports `isCompactCheckpointSource` directly because no gate applies host-side. + +## What #835's positional anchors were for, and why they are dissolved rather than lost + +The unmerged manual-compaction-queueing branch fixes the same interleaving bug by recording a per-event anchor — the surface tail at append time — and retargeting shadowed anchors onto the checkpoint. That mechanism exists to make positional anchors survive surface **reordering**. The human transcript is never re-ordered, so anchors have nothing to retarget: the precondition is removed, not the fix discarded. The mechanism is absent from this base and is not authored here. + +## Alternatives considered + +**Add `dsh-compact` to the client `INLINE_SAFE` allowlist** and move the predicate to a cordis-free subpath. Rejected: `INLINE_SAFE` matches on specifier *prefix*, so admitting the package admits its cordis-importing root too; the allowlist is a reviewer promise about client-facing subpaths, not a purity proof. It also needs a new export and a `files` fix, and it would not have helped — the blocking collision turned out to be in the compiler, which an allowlist does not touch. + +**A bare shape rule** — any replacement `user/message` is a compaction. Rejected: correct today only because compaction is the sole producer of replacement `user/message`s, with nothing to catch it if that changes. The pinning spec costs one file and removes exactly that risk. + +**Tag the checkpoint host-side** through the projection or wire contract. Rejected: most aligned with the "collaborate through cordis services" rule, but the client folds raw `SessionEvent`s today, so it means a wire contract change out of proportion to one pure predicate. + +**Move frozen-node ownership into the adapter** (`nodes(extraNodes)`), as the unmerged branch does. Rejected: the interrupted nodes come from the `turn/end` sweep `Session` already runs over the window, and with a seq-monotonic transcript the simple shape is correct — the adapter returns nodes, the session merges frozen ones by seq. Widening the adapter's signature would buy nothing and split the sweep from its product. + +**Keep `foldDegraded` as a defensive flag.** Rejected: it described a specific failure of a fold that no longer runs. A flag no consumer can act on, reachable only through a `console.error`, is a false contract. + +## Consequences + +Compaction no longer erases web history; a session compacted several times shows one marker per landed compaction, in log order, and the same window renders identically live and after a cold resume. The pagination hole is closed by construction rather than defended against, and `ConversationSnapshot` loses a published field, which touched thirteen files. + +`ConversationNode` gains an eighth arm, so every exhaustive consumer grew one case: `MessageItem` renders the marker through the new `CompactionItem`, and the trajectory layout widens its no-cell arm so a marker contributes no cell but still advances the duration cursor. + +The performance contract is unchanged and now simpler to state: one append materializes one node, an event that changes no node keeps the previous array reference — so a chunk storm costs nothing and `nodes()` is not even recomputed — and unchanged nodes keep their object identity. The window still grows with session length rather than with the surface, which is the trade the fix exists to make; a compaction used to bound the projection for exactly the long sessions compaction serves. + +The web e2e scenario now seeds a real compaction transaction over its recorded turn, so the aria golden pins both halves of the fix through the real host and a real browser: the recorded prompt and full tool output are still on screen, and one marker sits after them. The seed recording itself is untouched and stays model-authentic — replay derives the compacted turn from the recording's own surface. + +## Deferred + +Compaction **progress** — an indicator while a compaction runs — needs the bracket-first ordering the queued manual-compaction work introduces, and stays out of scope here as it did in the terminal. The marker also carries no **scale**: the checkpoint's `sourceEventSeqs` already hold the shadowed count, so a count or range would tell a reader how much each row folded. Both belong together, where the reader meets the two halves of the same information. diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md new file mode 100644 index 0000000000..97004f7384 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md @@ -0,0 +1,66 @@ +# Agent Note: 浏览器会话是按日志顺序投影的人类对话记录 + +Status: implemented + +[English](2026-07-30-web-transcript-log-ordered-projection.md) | 中文 + +## Problem + +浏览器客户端从模型可见的 surface 构建会话:`FoldAdapter` 在历史窗口上运行核心 `SurfaceManager` 并读取 `surface.nodes`。一次成功的压缩会用一个检查点节点替换一段 surface 范围,因此该替换一落地,Web 流就把它所遮蔽的每条消息折叠成一行灰暗的上下文——那是用户已经读过的对话。日志中什么都没丢失;缺陷完全在投影层,而[终端与宿主历史网关已按同一方式修复](2026-07-29-human-transcript-append-origin.md),浏览器留给了本次变更。 + +surface 顺序还让另外两个问题成为结构性的。一次替换之后它并非按 seq 升序——`SurfaceManager` 把高 seq 的检查点拼接到它所遮蔽范围的位置上——因此按数值 seq 归并进该数组的仅日志节点(斜杠命令行、被打断的冻结节点)可能被冲刷到检查点之前,再也无法交错回保留下来的尾部。而且由于分页不再为 replacement 副本消耗 `maxMessages` 额度,一页现在可以携带一个 `surfaceOp.start` 落在窗口之外的检查点;核心 fold 拒绝该范围,于是 `nodes()` 退回到一次宽容的线性扫描、打印一条 `console.error`,并发布一个描述该失败的 `foldDegraded` 标志。 + +## Decision + +`TranscriptAdapter` 取代 `FoldAdapter`,并且从不查询 surface 顺序。它按日志顺序投影原始窗口:每个 append 来源的 surface 事件(`isAppendSurfaceEvent`)落在它自己的日志位置上,外加每次落地的压缩检查点一个 `CompactionSummaryNode` 标记。于是一次落地的压缩会保留它在模型侧遮蔽掉的对话,标记报告模型从哪里开始看不见那段历史,而不是把它抹掉。仅模型可见的 replacement 副本不进入记录:被裁剪的 `tool/result` 和重新生成的 `assistant/message` 只为模型重写一个节点,不在对话中标记任何边界。凡必须发送模型所见内容的一切仍读 surface;这是人类投影,两者现在在两个前端上都已分离。 + +节点顺序天然按 seq 单调,由此有三个结果。仅日志的 `command/run` / `command/done` 对折叠成 `CommandNode`,按 seq 插入一个本已单调的数组——无锚点,无重排。`Session` 保留被打断的冻结节点的归属,用一次普通排序按其分数 seq 归并,而这现在恰好就是流顺序。检查点所引被遮蔽范围落在窗口之外的窗口没有范围需要解析,因此标记正常渲染且不打印任何日志。 + +`foldDegraded` 从 `ConversationSnapshot` 消失,随之消失的是哨兵填充、它们所需的 `baseSeq` 算术,以及 `degradedSeqs()`。它们的存在只为满足核心 fold 的 `seq === index` 断言并在其抛错时存活;它们所描述的 fold 已不再运行。删除该标志是修复的一部分,而非修复之后的清理——`degradedSeqs()` 本身已几乎就是按日志顺序的投影,只是作为抛错后的落点而非本意到达。 + +标记的摘要文本来自检查点自己的 `compact/summary` 溯源,绝不取自成框的检查点载荷——那是为模型撰写的指令信封。窗口切分把溯源留在窗口外时该行不可展开而非空白,与无调用的工具结果同一种软退让;后续补上溯源的分页会解析出文本。 + +没有任何持久化事件、RPC 信封、压缩事务或模型可见 surface 发生变化,也不需要迁移。 + +## 识别检查点:本地字面量与它的漂移陷阱 + +识别需要三个条件同时成立,与终端一致:`event.type === 'user/message'`、压缩缝隙的检查点插件来源,**以及** `isReplacementSurfaceEvent(event)`。一条 append 的插件来源 `user/message` 是注入上下文——跨会话引用卡片——不是压缩。 + +客户端把该插件来源重述为一个本地字面量,因为 `dsh-compact` 在**两个**方向上都无法从 `packages/client/runtime` 的程序到达: + +- **值**导入会失败于客户端纯度门禁(`packages/client/tsdown.client.ts`),而 `dsh-compact` 的根部会值导入 cordis,因此放行它就会把 `CompactService` 拉进浏览器产物; +- **仅类型**导入会失败于类型检查。`dsh-compact` 的根部会到达 `dsh-session` 的根部,后者的 cordis `Context` 合并声明了宿主侧 `sessions: SessionStore`,与本程序的 `sessions: ISessions` 冲突——`TS2717`,即 [development.md](../../../../docs/development.md#typescript-project-layout) 中每侧一个 program 的规则。这一点原本预期可行,实际不可行:`import type` 在**打包器**运行前被擦除,但不在**编译器**运行前被擦除,而该冲突是编译器事实。 + +因此漂移保护住在一个测试里,而不是一个类型里:`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` 运行在客户端**测试**程序中——那里不存在这一冲突——并用由权威 `COMPACT_CHECKPOINT_SOURCE` 本身构造的检查点驱动适配器。重命名缝隙的插件会在那里失败,而不是无声地把每个压缩标记从 Web 记录中删除。`dsh-compact` 只是 `dsh-client-runtime` 的 `devDependency` 以及 `tsconfig.client.json` 的一条引用——绝不是任何 `packages/client/*` 包工程的引用。 + +这是与终端的一次刻意分歧:终端直接值导入 `isCompactCheckpointSource`,因为宿主侧不适用任何门禁。 + +## #835 的位置锚点是为什么而存在,以及为什么它是被溶解而非丢失 + +尚未合并的排队式手动压缩分支用另一种方式修同一个交错缺陷:为每个事件记录一个锚点——追加时的 surface 尾部——并把被遮蔽的锚点重定向到检查点上。该机制的存在是为了让位置锚点在 surface **重排**中存活。人类对话记录永不被重排,因此锚点没有任何东西需要重定向:前提被移除,修复并未被丢弃。该机制在本基线上并不存在,本次也不撰写它。 + +## Alternatives considered + +**把 `dsh-compact` 加入客户端 `INLINE_SAFE` 白名单**,并把谓词搬到一个不含 cordis 的子路径。已拒绝:`INLINE_SAFE` 按标识符*前缀*匹配,因此放行该包也就放行了它那个会导入 cordis 的根部;该白名单是对面向客户端子路径的评审承诺,不是纯度证明。它还需要一个新导出与一处 `files` 修正,而且本来也帮不上忙——真正阻塞的冲突出在编译器,白名单碰不到那里。 + +**一条纯形状规则**——任何 replacement `user/message` 都是压缩。已拒绝:它今天正确只因为压缩是 replacement `user/message` 的唯一生产者,一旦这点改变便无任何机制能捕获。那个 pin 测试只花一个文件,就精确消除了这一风险。 + +**在宿主侧给检查点打标**,经投影或线协议。已拒绝:这最贴合“经 cordis 服务协作”的规则,但客户端今天折叠的是原始 `SessionEvent`,因此这意味着一次线协议契约变更——为一个纯谓词付出的代价不成比例。 + +**把冻结节点的归属移进适配器**(`nodes(extraNodes)`),像那个未合并分支所做的那样。已拒绝:被打断的节点来自 `Session` 已经在窗口上运行的 `turn/end` 清扫,而在按 seq 单调的记录之上,简单形态就是正确的——适配器返回节点,会话按 seq 归并冻结节点。加宽适配器签名什么也换不到,还会把清扫与它的产物拆开。 + +**把 `foldDegraded` 留作一个防御性标志。** 已拒绝:它描述的是一个已不再运行的 fold 的特定失败。一个消费方无法据以行动、只能通过 `console.error` 到达的标志,是一份虚假契约。 + +## Consequences + +压缩不再抹掉 Web 历史;一个被压缩多次的会话按日志顺序显示每次落地压缩一个标记,而同一窗口在实时与冷恢复之后渲染完全相同。分页缺口是被构造性闭合而非被防御,`ConversationSnapshot` 少了一个已发布字段,这触及十三个文件。 + +`ConversationNode` 增加第八个分支,因此每个穷尽消费方都多一个分支:`MessageItem` 通过新的 `CompactionItem` 渲染标记,trajectory 布局加宽它的“无单元格”分支,使标记不贡献单元格但仍推进耗时游标。 + +性能契约未变,且现在更易表述:一次追加物化一个节点,不改变任何节点的事件保持上一次的数组引用——因此分片风暴零成本、`nodes()` 甚至不会重算——未变化的节点保持其对象标识。窗口仍随会话长度而非随 surface 增长,这正是本修复存在所要做的交换;一次压缩过去恰好为压缩所服务的长会话限制了投影规模。 + +Web e2e 场景现在在它录制的那一轮之上播种一次真实的压缩事务,因此 aria 基准经真实宿主与真实浏览器钉住修复的两半:录制的提问与完整工具输出仍在屏幕上,其后坐着一个标记。录制本身未被触碰、保持模型真实——回放从录制自身的 surface 派生出被压缩的那一轮。 + +## Deferred + +压缩**进度**——压缩运行期间的指示——需要排队式手动压缩工作引入的“先开括号”顺序,与终端一样不在本次范围内。标记同样不携带**规模**信息:检查点的 `sourceEventSeqs` 已经包含被遮蔽的数量,因此一个计数或区间可以告诉读者每一行折叠了多少内容。两者应当放在一起,读者正是在那里遇到同一份信息的两半。 diff --git a/apps/web/tests/seeded-history.e2e.ts b/apps/web/tests/seeded-history.e2e.ts index d30b3d7c39..30e824324b 100644 --- a/apps/web/tests/seeded-history.e2e.ts +++ b/apps/web/tests/seeded-history.e2e.ts @@ -1,8 +1,8 @@ // Web e2e scenario: seeded history. A recorded session seeded cold through // the REAL persistence API renders purely from the log — the surface nothing // else covers: sidebar cold listing, the implicit resume/attach inside the -// history RPC, history-page tool views, and the client fold of historical -// events — with ZERO model calls in replay (no replay fixture; a stray stream +// history RPC, history-page tool views, and the client's log-ordered transcript +// of historical events — with ZERO model calls in replay (no replay fixture; a stray stream // fails loud on the open llm seam). The seed is a recorded fixture under the // same record discipline as every other: DSH_SNAPSHOT=record drives the turn // live through the composer (real read tool against seeded workspace files) @@ -27,6 +27,77 @@ const SEED_ID = 'seeded-history-web-e2e' const PROMPT = 'Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop.' +/** + * Append a complete, valid compaction transaction over the recorded turn's own + * surface. The recording stays model-authentic and reusable; replay adds this + * deterministic condition before seeding it cold, so the scenario pins the bug + * this change fixes — a landed compaction must not erase history the reader + * already saw — through the real host and the real browser. + * @param raw - the committed seed fixture text. + * @returns the fixture with a compacted turn appended. + */ +function withCompaction(raw: string): string { + const lines = raw.trimEnd().split('\n') + const events = lines.slice(1).map(line => JSON.parse(line) as { + type: string + seq: number + time: number + surfaceOp?: unknown + }) + const surfaceSeqs = events + .filter(event => event.surfaceOp === 'append' + && (event.type === 'user/message' + || event.type === 'assistant/message' + || event.type === 'tool/result' + || event.type === 'steering/message')) + .map(event => event.seq) + const first = surfaceSeqs[0] + const last = surfaceSeqs.at(-1) + const tail = events.at(-1) + if (first === undefined || last === undefined || tail === undefined) { + throw new Error('seeded-history compaction requires a non-empty closed surface') + } + let seq = tail.seq + 1 + let time = tail.time + 1 + const at = (event: Record): string => JSON.stringify({ ...event, seq: seq++, time: time++ }) + // The checkpoint's provenance names the two events appended before it. + const startSeq = seq + 1 + const summarySeq = seq + 2 + lines.push( + at({ type: 'turn/start', data: { turn: 2, trigger: { kind: 'injection', source: { kind: 'plugin', plugin: 'compact' } } } }), + at({ type: 'compact/start', data: { turn: 2 } }), + at({ + type: 'compact/summary', + data: { + summary: [{ + type: 'text', + text: '## Cold resume compact summary\n\n- The exact summary remains available.', + }], + shadowedRange: { start: first, end: last }, + shadowedSeqs: surfaceSeqs, + shadowedTokenCount: 10_000, + provider: 'snapshot', + model: 'snapshot-compactor', + }, + }), + at({ + type: 'user/message', + data: { + content: [{ + type: 'text', + text: 'Model-only compact checkpoint.', + }], + source: { kind: 'plugin', plugin: 'compact' }, + }, + surfaceOp: { op: 'replace', start: first, end: last }, + sourceEventSeqs: [startSeq, summarySeq, ...surfaceSeqs], + }), + at({ type: 'compact/end', data: { turn: 2 } }), + at({ type: 'turn/end', data: { turn: 2, reason: { kind: 'completed' } } }), + ) + return `${lines.join('\n')}\n` +} + describe('web e2e: seeded history renders through cold resume', () => { let scaffold: WebScaffold let browser: Browser @@ -46,7 +117,7 @@ describe('web e2e: seeded history renders through cold resume', () => { if (MODE !== 'record') { const raw = await readFile(SEED, 'utf8') expect(fixtureUserPrompts(raw), 'seed fixture must carry exactly the drive prompt').toEqual([PROMPT]) - await seedSession(scaffold, raw, SEED_ID) + await seedSession(scaffold, withCompaction(raw), SEED_ID) } browser = await chromium.launch() page = await browser.newPage({ viewport: { width: 1680, height: 1000 } }) @@ -112,11 +183,15 @@ describe('web e2e: seeded history renders through cold resume', () => { await sessionRow.click() // Settled barrier for history: the recorded final assistant text renders. await expect.poll(() => page.getByText('DONE', { exact: true }).count(), { timeout: 15_000 }).toBe(1) + await expect.poll(() => page.getByText('上下文已压缩', { exact: true }).count(), { timeout: 10_000 }).toBe(1) // Tool cards render from logged tool/call + tool/result alone (views are // host-recomputed per page; the generic card is the documented default). const toolRows = page.locator('[data-variant], [data-sample]') await expect.poll(() => toolRows.count(), { timeout: 10_000 }).toBeGreaterThanOrEqual(2) expect(await page.getByText('a.txt', { exact: false }).count()).toBeGreaterThan(0) + // The bug this fixes: the compaction shadowed the whole recorded surface on + // the model side, and the prompt and full tool output are still on screen. + expect(await page.getByText(PROMPT, { exact: true }).count()).toBe(1) }, 60_000) it.skipIf(MODE === 'record')('matches the historical conversation aria golden', async () => { @@ -147,6 +222,22 @@ describe('web e2e: seeded history renders through cold resume', () => { await expect.poll(() => page.getByText('a.txt', { exact: false }).count(), { timeout: 5_000 }).toBeGreaterThan(0) }) + it.skipIf(MODE === 'record')('expands the cold-resumed compact summary', async () => { + onTestFailed(() => saveFailureShot(page, 'web-e2e-seeded-compaction')) + const marker = page.getByRole('button', { name: /上下文已压缩/ }) + await marker.waitFor({ timeout: 10_000 }) + expect(await marker.getAttribute('aria-expanded')).toBe('false') + await marker.click() + await expect.poll(() => marker.getAttribute('aria-expanded'), { timeout: 5_000 }).toBe('true') + await expect.poll(() => page.getByRole('heading', { name: 'Cold resume compact summary' }).count(), { + timeout: 5_000, + }).toBe(1) + expect(await page.getByText('The exact summary remains available.', { exact: false }).count()).toBeGreaterThan(0) + // Collapse again so the aria golden captured after this case is unaffected. + await marker.click() + await expect.poll(() => marker.getAttribute('aria-expanded'), { timeout: 5_000 }).toBe('false') + }) + it.skipIf(MODE === 'record')('issued zero model calls and stayed clean', async () => { // No replay fixture was installed and the llm seam is open — any stray // stream would have failed the turn loudly. Cleanliness pins the wire. diff --git a/apps/web/tests/snapshots/seeded-history/ui.expected.md b/apps/web/tests/snapshots/seeded-history/ui.expected.md index db71bd6696..28252224f1 100644 --- a/apps/web/tests/snapshots/seeded-history/ui.expected.md +++ b/apps/web/tests/snapshots/seeded-history/ui.expected.md @@ -36,7 +36,11 @@ - img - button "在新对话中分支": - img -- text: {{clock}} cache hit 98% · 15,962 tokens · 1 turns · 2 steps +- text: {{clock}} +- button "上下文已压缩 点击查看压缩摘要": + - img + - text: 上下文已压缩 点击查看压缩摘要 +- text: cache hit 98% · 15,962 tokens · 1 turns · 2 steps - textbox "Message the agent" - button "Add attachment": - img diff --git a/packages/client/runtime/README.i18n.yaml b/packages/client/runtime/README.i18n.yaml index 429ae8f0a9..ec2fb497e6 100644 --- a/packages/client/runtime/README.i18n.yaml +++ b/packages/client/runtime/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/runtime/README.md -README.md: 25eb60e2c95059ae918669c9f5169b6b8e9c6816 -README.zh.md: e3085f91750503aeaffda41d86c40c62943b4ba9 +README.md: 7bf8050ea988945bead491d02528906863b129a6 +README.zh.md: ff3c91dee956b2c65f0029c97c73d73f5a627b05 diff --git a/packages/client/runtime/README.md b/packages/client/runtime/README.md index 25eb60e2c9..7bf8050ea9 100644 --- a/packages/client/runtime/README.md +++ b/packages/client/runtime/README.md @@ -16,9 +16,15 @@ SlotsService gives the renderer separate bare observables for `useSessions` and `WorkspacesService.connectWorkspace(workspaceId)` resolves the session a New Session flow lands in: it reuses the workspace's existing blank session from the list mirror (`blank && cwd == workspace.path`) or calls `session.create({workspaceId})`, returning the session id for the caller to open. `SessionSummary.blank` mirrors the host's derived empty-log bit and only ever lowers on the client: seeded by `session.list` / the `host/session-added` frame, flipped false by the first ACCEPTED local `prompt()` (on the RPC success response — acceptance proves the user message is in the host log; a rejected first prompt keeps the session blank and reusable) and by any `running: true` status frame, re-aligned by every list re-pull. List surfaces hide blank rows; the store carries every row. `SessionsService.create` accepts an optional caller-preallocated SessionId and throws `SessionCreateError` (carrying `requestedSessionId`) on failure. +## The human transcript + +`ConversationSnapshot.nodes` is the human transcript, not the model surface. `TranscriptAdapter` projects the raw window in log order — every append-origin surface event (`isAppendSurfaceEvent`) at its own log position, plus one `CompactionSummaryNode` marker per landed compaction checkpoint — and never consults surface order. A landed compaction therefore keeps the conversation it shadowed on the model side: the marker reports where the model stopped seeing that history instead of erasing it. Model-only replacement copies stay out: a pruned `tool/result` and a regenerated `assistant/message` rewrite one node for the model and mark no boundary. A checkpoint is a `user/message` carrying the compaction seam's plugin source that **replaced** a surface range; an appending plugin-sourced `user/message` is injected context, not a compaction. That source literal is restated locally because `dsh-compact` is unreachable from this program in both directions (the client purity gate rejects a value import; a type-only import collides the host `Context.sessions` merge) — `tests/compact-checkpoint-pin.spec.ts` is the drift trap. + +Because the projection is log-ordered, the node array is seq-monotonic by construction: log-only `command/run` / `command/done` nodes splice in by seq, `Session` merges interrupted frozen nodes by their fractional seqs, and a window whose checkpoint cites a shadowed range outside it renders the marker with nothing logged. The marker's summary text comes from the checkpoint's `compact/summary` provenance; a window cut that left the provenance outside makes the row non-expandable rather than empty, and a later page that supplies it resolves the text. Performance contract: one append materializes one node, an event that changes no node keeps the previous array reference (a chunk storm costs nothing), and unchanged nodes keep their object identity. + ## Code Mode sub-dispatch index -`ConversationSnapshot.codeDispatches` groups a `run_code` call's sub-dispatches under their parent callId, in start order, using the native call-block shapes: a `tool/code-dispatch-start` event lands the `RunningToolCall` form (rows derive the running ring from the shape) and its `tool/code-dispatch` settlement replaces it in place with the `ToolResultNode` form, `callTime` carrying the paired start's time. A settle whose start fell outside the replay window appends directly with `callTime: null` (duration unknown — never a fabricated zero). Live mux frames and history replay build the identical index; sub-calls never join the surface `nodes` flow; per-parent array and map references are memo-stable across unrelated snapshot swaps. +`ConversationSnapshot.codeDispatches` groups a `run_code` call's sub-dispatches under their parent callId, in start order, using the native call-block shapes: a `tool/code-dispatch-start` event lands the `RunningToolCall` form (rows derive the running ring from the shape) and its `tool/code-dispatch` settlement replaces it in place with the `ToolResultNode` form, `callTime` carrying the paired start's time. A settle whose start fell outside the replay window appends directly with `callTime: null` (duration unknown — never a fabricated zero). Live mux frames and history replay build the identical index; sub-calls never join the transcript `nodes` flow; per-parent array and map references are memo-stable across unrelated snapshot swaps. ## Session title projection diff --git a/packages/client/runtime/README.zh.md b/packages/client/runtime/README.zh.md index e3085f9175..ff3c91dee9 100644 --- a/packages/client/runtime/README.zh.md +++ b/packages/client/runtime/README.zh.md @@ -16,9 +16,15 @@ SlotsService 分别为 renderer 提供 `useSessions` 与 `useWorkspaces` 的裸 `WorkspacesService.connectWorkspace(workspaceId)` 解析 New Session 流程最终落入的会话:先在列表镜像中复用该 workspace 的既有空会话(`blank && cwd == workspace.path`),未命中则调用 `session.create({workspaceId})`,返回会话 id 由调用方 open。`SessionSummary.blank` 镜像主机派生的空日志位,在客户端只降不升:由 `session.list`/`host/session-added` 帧播种,本地首次**受理成功**的 `prompt()`(RPC 成功响应时——受理即证明用户消息已入主机日志;首讯被拒则会话保持 blank、保持可复用)与任何 `running: true` 状态帧翻为 false,每次列表重拉重新对齐。列表表面隐藏 blank 行;store 保留全部行。`SessionsService.create` 接受可选的、由调用方预先分配的 SessionId,失败时抛出 `SessionCreateError`(携带 `requestedSessionId`)。 +## 人类对话记录 + +`ConversationSnapshot.nodes` 是人类对话记录,不是模型 surface。`TranscriptAdapter` 按日志顺序投影原始窗口——每个 append 来源的 surface 事件(`isAppendSurfaceEvent`)落在它自己的日志位置上,外加每次落地的压缩检查点贡献一个 `CompactionSummaryNode` 标记——且从不查询 surface 顺序。于是一次落地的压缩会保留它在模型侧遮蔽掉的对话:标记报告模型从哪里开始看不见那段历史,而不是把它抹掉。仅模型可见的 replacement 副本不进入记录:被裁剪的 `tool/result` 和重新生成的 `assistant/message` 只为模型重写一个节点,不标记任何边界。检查点是携带压缩缝隙插件来源、且**替换**了一段 surface 范围的 `user/message`;一条 append 的插件来源 `user/message` 是注入上下文,不是压缩。该来源字面量在本地重述,因为 `dsh-compact` 在两个方向上都无法从本程序到达(客户端纯度门禁拒绝值导入;仅类型导入会与 host 的 `Context.sessions` 合并冲突)——`tests/compact-checkpoint-pin.spec.ts` 是漂移陷阱。 + +由于投影按日志顺序,节点数组天然按 seq 单调:仅日志的 `command/run` / `command/done` 节点按 seq 插入,`Session` 按分数 seq 归并被打断的冻结节点,而检查点所引范围落在窗口之外的窗口会渲染出标记且不打印任何日志。标记的摘要文本来自检查点的 `compact/summary` 溯源;窗口切分把溯源留在窗口外时该行不可展开而非空白,后续补上溯源的分页会解析出文本。性能契约:一次追加物化一个节点,不改变任何节点的事件保持上一次的数组引用(分片风暴零成本),未变化的节点保持其对象标识。 + ## Code Mode 子调用索引 -`ConversationSnapshot.codeDispatches` 按父调用的 callId 和启动顺序,用原生调用块形状组织一个 `run_code` 调用的子调用:`tool/code-dispatch-start` 事件落成 `RunningToolCall` 形状(行组件从该形状推导运行中的转圈状态),其 `tool/code-dispatch` 完结事件原位替换为 `ToolResultNode` 形状,`callTime` 携带成对 start 事件的时间。start 落在回放窗口之外的完结事件则直接追加,`callTime: null`(耗时未知——绝不伪造零耗时)。live mux 帧与历史回放构建相同的索引;子调用永不进入 surface `nodes` 流;无关快照交换不会改变每个父调用对应的数组引用和映射引用,两者均保持 memo 稳定。 +`ConversationSnapshot.codeDispatches` 按父调用的 callId 和启动顺序,用原生调用块形状组织一个 `run_code` 调用的子调用:`tool/code-dispatch-start` 事件落成 `RunningToolCall` 形状(行组件从该形状推导运行中的转圈状态),其 `tool/code-dispatch` 完结事件原位替换为 `ToolResultNode` 形状,`callTime` 携带成对 start 事件的时间。start 落在回放窗口之外的完结事件则直接追加,`callTime: null`(耗时未知——绝不伪造零耗时)。live mux 帧与历史回放构建相同的索引;子调用永不进入对话记录 `nodes` 流;无关快照交换不会改变每个父调用对应的数组引用和映射引用,两者均保持 memo 稳定。 ## Session 标题投影 diff --git a/packages/client/runtime/package.json b/packages/client/runtime/package.json index 60e2eddf09..3868ab8d8c 100644 --- a/packages/client/runtime/package.json +++ b/packages/client/runtime/package.json @@ -48,6 +48,7 @@ "cordis": "^4.0.0-rc.7" }, "devDependencies": { + "@deepseek-ai/dsh-compact": "workspace:^", "@deepseek-ai/dsh-invariants": "workspace:^", "@types/react": "~18.3.1", "cordis": "^4.0.0-rc.7" diff --git a/packages/client/runtime/src/client/index.ts b/packages/client/runtime/src/client/index.ts index 3b8e02b5a9..c548c03502 100644 --- a/packages/client/runtime/src/client/index.ts +++ b/packages/client/runtime/src/client/index.ts @@ -38,8 +38,8 @@ export type { EngineStoreHandle, EngineStoreInstance, ObservableSnapshot, SnapshotStore, } from './contract/store.ts' export type { - AssistantBlock, AssistantMessageNode, CodeSubCall, CommandNode, ComposerPhase, ContextMessageNode, ConversationNode, - ConversationSnapshot, QueuedMessage, RunningToolCall, + AssistantBlock, AssistantMessageNode, CodeSubCall, CommandNode, CompactionSummaryNode, ComposerPhase, + ContextMessageNode, ConversationNode, ConversationSnapshot, QueuedMessage, RunningToolCall, SteeringMessageNode, TodoItem, ToolResultNode, UnknownSurfaceNode, UserMessageNode, } from './sessions/conversation.ts' export { PendingWait } from './sessions/pending.ts' diff --git a/packages/client/runtime/src/client/sessions/conversation.ts b/packages/client/runtime/src/client/sessions/conversation.ts index f5f0717236..fc9a9d6bcd 100644 --- a/packages/client/runtime/src/client/sessions/conversation.ts +++ b/packages/client/runtime/src/client/sessions/conversation.ts @@ -111,6 +111,24 @@ export interface ToolResultNode { resultView: ToolResultView | null } +/** + * One landed compaction, marked at the checkpoint's own log position. The + * conversation it shadowed on the model surface stays in the transcript above + * it: the marker reports where the model stopped seeing that history, it does + * not replace it. The framed checkpoint payload is an instruction envelope + * written for the model and never renders. + */ +export interface CompactionSummaryNode { + kind: 'compaction' + /** Seq of the replacement `user/message` that landed the checkpoint. */ + seq: number + /** Unix epoch ms of the checkpoint event. */ + time: number + /** Summary text from the checkpoint's `compact/summary` provenance; null when + * the window cut left that provenance outside (the marker is then not expandable). */ + summary: string | null +} + /** Fallback for surface events this UI version does not know. */ export interface UnknownSurfaceNode { kind: 'unknown' @@ -124,7 +142,7 @@ export interface UnknownSurfaceNode { /** * One slash-command lifecycle folded from the log-only `command/run` / * `command/done` pair (paired by commandId, mirroring tool call↔result). - * Log-only events never enter the surface fold, so the FoldAdapter indexes + * Log-only events are not surface events, so the TranscriptAdapter indexes * them separately and merges the nodes into the flow by seq. A window cut * between the pair soft-falls like tool pairs: a done with no in-window run * still builds a node (name/args null), and a run with no done renders as @@ -154,6 +172,7 @@ export type ConversationNode = | ContextMessageNode | ToolResultNode | CommandNode + | CompactionSummaryNode | UnknownSurfaceNode /** @@ -163,7 +182,7 @@ export type ConversationNode = * {@link RunningToolCall} (rows derive the running state from the shape, * exactly as for native calls) and its `tool/code-dispatch` settlement * replaces it in place with the {@link ToolResultNode} form. Never part of - * the surface `nodes` flow — sub-calls live under their parent via + * the transcript `nodes` flow — sub-calls live under their parent via * {@link ConversationSnapshot.codeDispatches}. `callId` is the deterministic * sub-call id (`:code:`); the call side carries the sub-tool name * and its JSON-stringified logged arguments; `content`/`isError` are the @@ -232,10 +251,8 @@ export interface PromptError { /** The immutable snapshot contract Session hands to uSES (see the web client architecture RFC). */ export interface ConversationSnapshot { sessionId: SessionId - /** Surface fold product (finalized conversation nodes in surface order). */ + /** Human transcript (finalized conversation nodes in log order). */ nodes: readonly ConversationNode[] - /** Fold degradation flag (cross-window replace defense): when true, nodes come from the lenient linear scan. */ - foldDegraded: boolean partial: PartialAssistant | null runningCalls: readonly RunningToolCall[] /** diff --git a/packages/client/runtime/src/client/sessions/fold-adapter.ts b/packages/client/runtime/src/client/sessions/fold-adapter.ts deleted file mode 100644 index 039c36056b..0000000000 --- a/packages/client/runtime/src/client/sessions/fold-adapter.ts +++ /dev/null @@ -1,275 +0,0 @@ -// FoldAdapter: core SurfaceManager wiring + node materialization cache. -// Padding sentinels solve the paged-window seq offset (core fold asserts seq === index); -// a cross-window replace throw degrades to a lenient linear scan (foldDegraded — -// the degradation lives in one branch function in this file, zero scattered removal points). - -import type { SessionEvent } from '@deepseek-ai/dsh-session/types' -// Subpath export (package.json exports "./surface", alias added for this): all value imports -// go through it — the package root points at lib/index.js (needs a build) which the vite -// browser bundle cannot resolve; surface.ts has no Node dependencies. -import { SurfaceManager, isSurfaceEligibleType } from '@deepseek-ai/dsh-session/surface' -import type { CommandId } from '@deepseek-ai/dsh-commands/brand' -import type { ToolCallView, ToolEventView, ToolResultView } from '@deepseek-ai/dsh-client-connection/client' -import type { CommandNode, ConversationNode } from './conversation.ts' -import { toAssistantBlocks } from './conversation.ts' - -/** In-window tool/call index entry (result-card backfill + runningCalls material). */ -export interface CallIndexEntry { - name: string - argsRaw: string - turn: number - step: number - /** Unix epoch ms of the tool/call event. */ - time: number - /** Wire view riding the tool/call (envelope-level; never inside the event). */ - callView: ToolCallView | null -} - -/** Non-surface sentinel used to preserve paged-window sequence offsets. - * `noop/padding` is deliberately not a real event type, so it cannot acquire - * surface behavior; this cast is the only synthetic event entry point. - */ -function paddingEvent(seq: number): SessionEvent { - return { type: 'noop/padding', seq, time: 0, data: {} } as unknown as SessionEvent -} - -/** One event -> UI node (pure function; the six-variant ConversationNode union). */ -function materializeNode( - event: SessionEvent, - callIndex: ReadonlyMap, - resultView: ToolResultView | null, -): ConversationNode { - switch (event.type) { - case 'user/message': - // Injected context (plugin/goal source) folds to a context node, not a - // user message; only a direct human prompt is a user node. - if (event.data.source.kind !== 'user') { - return { - kind: 'context', seq: event.seq, time: event.time, - content: event.data.content, source: event.data.source, - } - } - return { - kind: 'user', seq: event.seq, time: event.time, - content: event.data.content, source: event.data.source, - } - case 'assistant/message': - return { - kind: 'assistant', seq: event.seq, time: event.time, - turn: event.data.turn, step: event.data.step, - blocks: toAssistantBlocks(event.data.message.content), usage: event.data.usage, - } - case 'steering/message': - return { - kind: 'steering', seq: event.seq, time: event.time, turn: event.data.turn, - content: event.data.message.content, source: event.data.message.source, - } - case 'tool/result': { - const result = event.data.message.content[0] - const callId = String(event.data.message.source.callId) - const call = callIndex.get(callId) - return { - kind: 'tool-result', seq: event.seq, time: event.time, - callId, - call: call ? { name: call.name, argsRaw: call.argsRaw } : null, - callTime: call?.time ?? null, - content: result.content, isError: result.isError === true, - ...(event.data.error !== undefined ? { error: event.data.error } : {}), - meta: event.data.meta, - callView: call?.callView ?? null, - resultView, - } - } - /* v8 ignore next 2 -- defensive arm: fold output only carries the four - surface-eligible types, and each has a case above; reachable only if core - adds an eligible type. */ - default: - return { - kind: 'unknown', seq: event.seq, time: event.time, - type: event.type, data: (event as { data?: unknown }).data, - } - } -} - -/** Window fold over the core SurfaceManager (sentinel padding for the seq offset; degrades to a linear scan on cross-window replace). */ -export class FoldAdapter { - /** padded = [sentinel x baseSeq, ...window events]; SurfaceManager borrows this reference for lazy incremental folding. */ - private padded: SessionEvent[] = [] - private baseSeq = 0 - private surface = new SurfaceManager(this.padded) - private nodeCache = new Map() - private degraded = false - private callIdx = new Map() - /** Wire result views keyed by the tool/result event's seq (views ride the envelope, not the event). */ - private resultViews = new Map() - /** - * Command lifecycle nodes by commandId (insertion = run order). The - * `command/run`/`command/done` pair is log-only, so the surface fold never - * emits it; this index folds the pair (done settles its run's node in - * place) and nodes() merges the products into the flow by seq. Window cuts - * soft-fall like tool pairs: a done with no in-window run still builds a - * node. - */ - private commandIdx = new Map() - /** Window revision (bumped on reset/append) keying the nodes() result cache: an unchanged - * window returns the previous ARRAY reference, not just cached elements — the snapshot's - * reference-stability contract (§A.9.4) starts here. */ - private rev = 0 - private nodesResult: { rev: number; value: { nodes: ConversationNode[]; degraded: boolean } } | null = null - - /** In-window tool/call index (Session uses it for runningCalls and result-card backfill). */ - get callIndex(): ReadonlyMap { - return this.callIdx - } - - /** - * Window rebuild (after open/resync/page prepend): new padded array, new - * SurfaceManager, cleared cache, rebuilt callIndex. - * @param events - the new window contents (seq-ascending). - * @param baseSeq - seq of the window head (sentinels pad below it). - * @param views - per-event wire views aligned with `events` by index (undefined slots for view-less events). - */ - reset(events: readonly SessionEvent[], baseSeq: number, views?: readonly (ToolEventView | undefined)[]): void { - this.rev++ - this.baseSeq = baseSeq - this.padded = [] - for (let i = 0; i < baseSeq; i++) this.padded.push(paddingEvent(i)) - for (const event of events) this.padded.push(event) - this.surface = new SurfaceManager(this.padded) - this.nodeCache.clear() - this.degraded = false - this.callIdx = new Map() - this.resultViews.clear() - this.commandIdx = new Map() - for (let i = 0; i < events.length; i++) { - const event = events[i] - /* v8 ignore next -- dense-array guard: i stays within events.length, so the undefined arm needs a sparse array no caller builds. */ - if (event !== undefined) { - this.indexCall(event, views?.[i]) - this.indexCommand(event) - } - } - } - - /** - * Tail append (live session/event): push into the same array (incremental - * lazy fold applies) + incremental callIndex upkeep. - * @param event - the live event (seq = window tail + 1). - * @param view - host-computed tool view paired with the event when it is a tool call/result; indexed for card rendering. - */ - append(event: SessionEvent, view?: ToolEventView): void { - this.rev++ - this.padded.push(event) - this.indexCall(event, view) - this.indexCommand(event) - } - - /** - * Current node array + degradation flag. Same revision -> same array - * reference (memo boundary); node object references always come from the per-seq cache. - * @returns the fold projection for the current window revision. - */ - nodes(): { nodes: ConversationNode[]; degraded: boolean } { - if (this.nodesResult !== null && this.nodesResult.rev === this.rev) return this.nodesResult.value - let seqs: readonly number[] - if (this.degraded) { - seqs = this.degradedSeqs() - } else { - try { - seqs = this.surface.nodes - } catch (error) { - console.error('[web-runtime] surface fold failed, degrading to linear scan:', error) - this.degraded = true - seqs = this.degradedSeqs() - } - } - const out: ConversationNode[] = [] - for (const seq of seqs) { - const cached = this.nodeCache.get(seq) - if (cached !== undefined) { - out.push(cached) - continue - } - const event = this.padded[seq] - /* v8 ignore next -- sparse guard: both seq sources (surface fold and degradedSeqs) only emit indexes present in padded. */ - if (event === undefined) continue - const node = materializeNode(event, this.callIdx, this.resultViews.get(seq) ?? null) - this.nodeCache.set(seq, node) - out.push(node) - } - // Command nodes fold outside the surface (log-only events); merge by seq. - // Both inputs are seq-ascending (surface order and run-index insertion - // order share the log order), so one linear merge keeps flow order. - let nodes = out - if (this.commandIdx.size > 0) { - nodes = [] - const commands = [...this.commandIdx.values()] - let next = 0 - for (const node of out) { - for (let cmd = commands[next]; cmd !== undefined && cmd.seq < node.seq; cmd = commands[++next]) { - nodes.push(cmd) - } - nodes.push(node) - } - for (let cmd = commands[next]; cmd !== undefined; cmd = commands[++next]) nodes.push(cmd) - } - const value = { nodes, degraded: this.degraded } - this.nodesResult = { rev: this.rev, value } - return value - } - - /** Degradation branch: lenient linear scan ignoring surfaceOp/replace (all surface-eligible events in append order). */ - private degradedSeqs(): number[] { - const seqs: number[] = [] - for (let i = this.baseSeq; i < this.padded.length; i++) { - const event = this.padded[i] - if (event !== undefined && isSurfaceEligibleType(event.type)) seqs.push(event.seq) - } - return seqs - } - - /** Fold one command lifecycle event into its node (run mints, done settles in place; done-only soft-falls). */ - private indexCommand(event: SessionEvent): void { - // Log-only plugin events: the host-side dsh-commands declaration cannot - // enter the client program, so this wire consumer narrows structurally - // (the same posture as tool/code-dispatch in session.ts). - if ((event.type as string) === 'command/run') { - const data = event.data as unknown as { commandId: CommandId; name: string; args: string } - this.commandIdx.set(data.commandId, { - kind: 'command', seq: event.seq, time: event.time, - commandId: data.commandId, name: data.name, args: data.args, outcome: null, - }) - return - } - if ((event.type as string) !== 'command/done') return - const data = event.data as unknown as { commandId: CommandId; kind: 'success' | 'error'; text?: string } - const run = this.commandIdx.get(data.commandId) - const outcome = { kind: data.kind, ...data.text === undefined ? {} : { text: data.text } } - if (run === undefined) { - // Cross-window cut: the run page fell out of the window — build the - // node from the done alone (same soft-fall as a call-less tool result). - this.commandIdx.set(data.commandId, { - kind: 'command', seq: event.seq, time: event.time, - commandId: data.commandId, name: null, args: null, outcome, - }) - return - } - // Settle in place: a fresh node object (published references stay immutable). - this.commandIdx.set(data.commandId, { ...run, outcome }) - } - - private indexCall(event: SessionEvent, view?: ToolEventView): void { - if (event.type === 'tool/result') { - if (view?.for === 'result') this.resultViews.set(event.seq, view.view) - return - } - if (event.type !== 'tool/call') return - this.callIdx.set(String(event.data.callId), { - name: event.data.name, argsRaw: event.data.arguments, turn: event.data.turn, step: event.data.step, - time: event.time, - callView: view?.for === 'call' ? view.view : null, - }) - // No backfill into already-materialized tool-result nodes for this callId - // (window order puts the call before its result; cannot happen on the normal path). - } -} diff --git a/packages/client/runtime/src/client/sessions/session.ts b/packages/client/runtime/src/client/sessions/session.ts index 0f5d39ac8e..9927f0e171 100644 --- a/packages/client/runtime/src/client/sessions/session.ts +++ b/packages/client/runtime/src/client/sessions/session.ts @@ -17,7 +17,7 @@ import type { } from './conversation.ts' import type { PendingInteraction } from './pending.ts' import { PendingWait } from './pending.ts' -import { FoldAdapter } from './fold-adapter.ts' +import { TranscriptAdapter } from './transcript-adapter.ts' import { Notifier } from './notifier.ts' import { PartialAccumulator } from './partial.ts' import { ProjectionValueStore } from './projection-store.ts' @@ -87,11 +87,13 @@ export class Session implements SessionFace { * passes drop all writes once the generation moves on. */ private openGeneration = 0 private loadingOlder = false - private readonly foldAdapter = new FoldAdapter() + private readonly transcript = new TranscriptAdapter() private partial: PartialAccumulator | null = null private openCalls = new Map() /** Interrupted-turn terminal nodes (frozen partial text / aborted tool cards), merged into the flow by seq. - * Derived from window events (turn/end sweep) — rebuilt by rebuildDerivedFromWindow like partial/openCalls. */ + * Derived from window events (turn/end sweep) — rebuilt by rebuildDerivedFromWindow like partial/openCalls. + * Owned here rather than by the adapter: these nodes come from the turn/end sweep this class already + * runs over the window, and the transcript array is seq-monotonic, so a plain seq merge is correct. */ private frozenNodes: ConversationNode[] = [] private pending = new Map() // Revision counters preserve array identity when derived content is unchanged, so @@ -108,7 +110,7 @@ export class Session implements SessionFace { private queueRev = 0 private queueCache: { rev: number; value: QueuedMessage[] } | null = null private frozenRev = 0 - private nodesCache: { folded: readonly ConversationNode[]; frozenRev: number; value: readonly ConversationNode[] } | null = null + private nodesCache: { projected: readonly ConversationNode[]; frozenRev: number; value: readonly ConversationNode[] } | null = null /** `run_code` sub-dispatches by parent callId (window-derived, like openCalls). Appends * copy-on-write the per-parent array so published snapshot references never mutate. */ private codeDispatches = new Map() @@ -306,7 +308,7 @@ export class Session implements SessionFace { /* v8 ignore next -- the ?? arm needs older[0] undefined, but the empty-page branch above already returned. */ this.baseSeq = older[0]?.event.seq ?? this.baseSeq this.hasMore = result.value.hasMore - this.foldAdapter.reset(this.events, this.baseSeq, this.views) // prepend forces a rebuild (sentinel count changed) + this.transcript.reset(this.events, this.views) // prepend forces a rebuild (the window grew at the head) this.rebuildDerivedFromWindow() } catch (error) { console.error('[web-runtime] loadOlder failed:', error) @@ -553,7 +555,7 @@ export class Session implements SessionFace { this.views = entries.map(e => e.view) this.baseSeq = this.events[0]?.seq ?? 0 this.hasMore = hasMore - this.foldAdapter.reset(this.events, this.baseSeq, this.views) + this.transcript.reset(this.events, this.views) this.rebuildDerivedFromWindow() if (projections !== undefined) this.projections.seed(projections) const buffered = this.liveBuffer @@ -568,14 +570,15 @@ export class Session implements SessionFace { if (tailSeq !== null && event.seq <= tailSeq) return // replay overlap, drop this.events.push(event) this.views.push(view) - this.foldAdapter.append(event, view) + this.transcript.append(event, view) this.applyEventSideEffects(event, view) } /** Land a live session/event (open/repair in flight -> buffer; overlapping seq -> drop; * a seq gap -> buffer + tail-page repull instead of appending a hole (audit S3: a gap is an - * expected reconnect-window artifact, repaired by refetch — never fed to the fold to trip - * its continuity assertion into the degraded view). */ + * expected reconnect-window artifact, repaired by refetch). The window stays one contiguous + * raw range, which is what lets the transcript render every event between its ends and lets a + * compaction checkpoint find its own provenance. */ private acceptLiveEvent(event: SessionEvent, view?: ToolEventView): void { if (this.openState === 'loading' || this.stitching) { this.liveBuffer.push({ event, view }) @@ -790,18 +793,19 @@ export class Session implements SessionFace { } private buildSnapshot(): ConversationSnapshot { - const { nodes: folded, degraded } = this.foldAdapter.nodes() + const projected = this.transcript.nodes() // Frozen interrupted nodes ride fractional seqs: a stable merge keeps them in flow order. - // The merged array is cached on (folded reference, frozenRev) so an unchanged flow keeps its - // reference across snapshot swaps (§A.9.4). + // The transcript is seq-monotonic (log order), so sorting the union by seq is exactly the + // flow order. The merged array is cached on (projected reference, frozenRev) so an unchanged + // flow keeps its reference across snapshot swaps (§A.9.4). let nodes: readonly ConversationNode[] - if (this.nodesCache !== null && this.nodesCache.folded === folded && this.nodesCache.frozenRev === this.frozenRev) { + if (this.nodesCache !== null && this.nodesCache.projected === projected && this.nodesCache.frozenRev === this.frozenRev) { nodes = this.nodesCache.value } else { nodes = this.frozenNodes.length === 0 - ? folded - : [...folded, ...this.frozenNodes].sort((a, b) => a.seq - b.seq) - this.nodesCache = { folded, frozenRev: this.frozenRev, value: nodes } + ? projected + : [...projected, ...this.frozenNodes].sort((a, b) => a.seq - b.seq) + this.nodesCache = { projected, frozenRev: this.frozenRev, value: nodes } } if (this.callsCache === null || this.callsCache.rev !== this.callsRev) { this.callsCache = { rev: this.callsRev, value: [...this.openCalls.values()] } @@ -819,7 +823,6 @@ export class Session implements SessionFace { return { sessionId: this.sessionId, nodes, - foldDegraded: degraded, partial, runningCalls: this.callsCache.value, pending: this.pendingCache.value, diff --git a/packages/client/runtime/src/client/sessions/transcript-adapter.ts b/packages/client/runtime/src/client/sessions/transcript-adapter.ts new file mode 100644 index 0000000000..b79e6ee2fe --- /dev/null +++ b/packages/client/runtime/src/client/sessions/transcript-adapter.ts @@ -0,0 +1,325 @@ +// TranscriptAdapter: the human transcript projected from the raw event window +// in LOG order. The model-visible surface deliberately shadows replaced ranges, +// so it is the wrong source for conversation a reader already saw; this adapter +// keeps every append-origin event at its own log position and contributes one +// marker node per landed compaction checkpoint. Node order is therefore +// seq-monotonic by construction — no surface fold, no padding sentinels, no +// seq === index assertion to satisfy, and no degradation branch. + +import type { SessionEvent } from '@deepseek-ai/dsh-session/types' +// Subpath export (package.json exports "./surface", alias added for this): all value imports +// go through it — the package root points at lib/index.js (needs a build) which the vite +// browser bundle cannot resolve; surface.ts has no Node dependencies. +import { isAppendSurfaceEvent, isReplacementSurfaceEvent } from '@deepseek-ai/dsh-session/surface' +import type { CommandId } from '@deepseek-ai/dsh-commands/brand' +import type { ToolCallView, ToolEventView, ToolResultView } from '@deepseek-ai/dsh-client-connection/client' +import type { CommandNode, CompactionSummaryNode, ConversationNode } from './conversation.ts' +import { toAssistantBlocks } from './conversation.ts' + +/** + * The compaction seam's checkpoint plugin, restated locally. + * + * `dsh-compact` cannot be reached from this program in any form. A VALUE import + * fails the client purity gate (`packages/client/tsdown.client.ts`) and would + * pull the cordis `Service` base into the browser bundle; a TYPE-ONLY import of + * its `COMPACT_CHECKPOINT_SOURCE` fails typecheck, because `dsh-compact`'s root + * reaches `dsh-session`'s root, whose `Context` merge declares the HOST + * `sessions: SessionStore` against this program's `sessions: ISessions` + * (`TS2717` — the one-program-per-side rule in docs/development.md). The + * literal is pinned to the canonical const by + * `tests/compact-checkpoint-pin.spec.ts`, which runs in the client TEST program + * where that collision does not apply. + */ +const COMPACT_PLUGIN = 'compact' + +/** In-window tool/call index entry (result-card backfill + runningCalls material). */ +export interface CallIndexEntry { + name: string + argsRaw: string + turn: number + step: number + /** Unix epoch ms of the tool/call event. */ + time: number + /** Wire view riding the tool/call (envelope-level; never inside the event). */ + callView: ToolCallView | null +} + +/** One event -> UI node (pure function; the eight-variant ConversationNode union). */ +function materializeNode( + event: SessionEvent, + callIndex: ReadonlyMap, + resultView: ToolResultView | null, +): ConversationNode { + switch (event.type) { + case 'user/message': + // Injected context (plugin/goal source) folds to a context node, not a + // user message; only a direct human prompt is a user node. A compaction + // checkpoint never reaches here (isCompactCheckpoint routes it away). + if (event.data.source.kind !== 'user') { + return { + kind: 'context', seq: event.seq, time: event.time, + content: event.data.content, source: event.data.source, + } + } + return { + kind: 'user', seq: event.seq, time: event.time, + content: event.data.content, source: event.data.source, + } + case 'assistant/message': + return { + kind: 'assistant', seq: event.seq, time: event.time, + turn: event.data.turn, step: event.data.step, + blocks: toAssistantBlocks(event.data.message.content), usage: event.data.usage, + } + case 'steering/message': + return { + kind: 'steering', seq: event.seq, time: event.time, turn: event.data.turn, + content: event.data.message.content, source: event.data.message.source, + } + case 'tool/result': { + const result = event.data.message.content[0] + const callId = String(event.data.message.source.callId) + const call = callIndex.get(callId) + return { + kind: 'tool-result', seq: event.seq, time: event.time, + callId, + call: call ? { name: call.name, argsRaw: call.argsRaw } : null, + callTime: call?.time ?? null, + content: result.content, isError: result.isError === true, + ...(event.data.error !== undefined ? { error: event.data.error } : {}), + meta: event.data.meta, + callView: call?.callView ?? null, + resultView, + } + } + /* v8 ignore next 2 -- defensive arm: only the four surface-eligible types + can be append-origin, and each has a case above; reachable only if core + adds an eligible type. */ + default: + return { + kind: 'unknown', seq: event.seq, time: event.time, + type: event.type, data: (event as { data?: unknown }).data, + } + } +} + +/** + * Whether an event is a landed compaction checkpoint — all three conditions, + * matching the terminal's `isCompactCheckpoint`: a `user/message`, carrying the + * compaction seam's checkpoint plugin source, that REPLACED a surface range. A + * plugin-sourced `user/message` that appends is injected context (a + * session-reference card), not a compaction; a replacement `tool/result` is an + * in-place prune and a replacement `assistant/message` a generic rewrite, and + * both mark no boundary in the conversation. + * @param event - the raw window event. + * @returns true when the event compacted a surface range. + */ +function isCompactCheckpoint(event: SessionEvent): boolean { + if (event.type !== 'user/message') return false + const source = event.data.source + return source.kind === 'plugin' && source.plugin === COMPACT_PLUGIN + && isReplacementSurfaceEvent(event) +} + +/** Whether an event contributes a node to the human transcript. */ +function isTranscriptEvent(event: SessionEvent): boolean { + return isAppendSurfaceEvent(event) || isCompactCheckpoint(event) +} + +/** Concatenated text of a `compact/summary` payload, or null when it carries no usable text. */ +function compactSummaryText(event: SessionEvent): string | null { + const summary = (event.data as unknown as { summary?: unknown }).summary + if (!Array.isArray(summary) || summary.length === 0) return null + let text = '' + for (const block of summary as readonly unknown[]) { + const candidate = block as { type?: unknown; text?: unknown } + if (candidate.type !== 'text' || typeof candidate.text !== 'string') return null + text += candidate.text + } + return text.trim() === '' ? null : text +} + +/** + * One landed checkpoint -> the human-facing compaction marker. The summary text + * comes from the checkpoint's own provenance (`sourceEventSeqs` names the + * `compact/summary` event), never from the framed checkpoint payload, which is + * an instruction envelope written for the model. A window cut that left the + * provenance outside soft-falls to `summary: null` (a non-expandable marker), + * the same posture as a call-less tool result. + */ +function materializeCompaction( + checkpoint: SessionEvent, + eventIndex: ReadonlyMap, +): CompactionSummaryNode { + const sources = (checkpoint as SessionEvent & { sourceEventSeqs?: number[] }).sourceEventSeqs + let summary: string | null = null + for (const seq of sources ?? []) { + const candidate = eventIndex.get(seq) + if (candidate === undefined || (candidate.type as string) !== 'compact/summary') continue + summary = compactSummaryText(candidate) + break + } + return { kind: 'compaction', seq: checkpoint.seq, time: checkpoint.time, summary } +} + +/** Log-ordered human transcript over a paged raw event window (never consults surface order). */ +export class TranscriptAdapter { + /** Window events by seq: provenance lookup for a checkpoint's summary. */ + private eventIndex = new Map() + /** Transcript nodes in log order; copy-on-write so a published array never mutates. */ + private projected: ConversationNode[] = [] + private callIdx = new Map() + /** Wire result views keyed by the tool/result event's seq (views ride the envelope, not the event). */ + private resultViews = new Map() + /** + * Command lifecycle nodes by commandId (insertion = run order). The + * `command/run`/`command/done` pair is log-only, so it is not a surface + * event and never joins the transcript projection; this index folds the pair + * (done settles its run's node in place) and nodes() merges the products in + * by seq. Window cuts soft-fall like tool pairs: a done with no in-window + * run still builds a node. + */ + private commandIdx = new Map() + /** Projection revision, bumped only when a transcript node or a command node actually + * changed, keying the nodes() result cache: an unchanged projection returns the previous + * ARRAY reference, not just cached elements — the snapshot's reference-stability contract + * (§A.9.4) starts here, and a chunk storm bumps nothing at all. */ + private rev = 0 + private nodesResult: { rev: number; value: readonly ConversationNode[] } | null = null + + /** In-window tool/call index (Session uses it for runningCalls and result-card backfill). */ + get callIndex(): ReadonlyMap { + return this.callIdx + } + + /** + * Window rebuild (after open/resync/page prepend): re-index the raw window + * and re-project the transcript. + * @param events - the new window contents (seq-ascending). + * @param views - per-event wire views aligned with `events` by index (undefined slots for view-less events). + */ + reset(events: readonly SessionEvent[], views?: readonly (ToolEventView | undefined)[]): void { + this.rev++ + this.eventIndex = new Map() + this.callIdx = new Map() + this.resultViews.clear() + this.commandIdx = new Map() + for (let i = 0; i < events.length; i++) { + const event = events[i] + /* v8 ignore next -- dense-array guard: i stays within events.length, so the undefined arm needs a sparse array no caller builds. */ + if (event === undefined) continue + this.eventIndex.set(event.seq, event) + this.indexCall(event, views?.[i]) + this.indexCommand(event) + } + // Indexes first, then project: a tool/result materializes against the + // complete call index, and a checkpoint against the complete event index. + const projected: ConversationNode[] = [] + for (const event of events) { + if (isTranscriptEvent(event)) projected.push(this.materialize(event)) + } + this.projected = projected + } + + /** + * Tail append (live session/event): index the event and, when it belongs to + * the transcript, extend the projection by one node — O(1) per append. An + * event that changes no node (a chunk storm) bumps no revision, so nodes() + * keeps returning the same array reference. + * @param event - the live event (seq = window tail + 1). + * @param view - host-computed tool view paired with the event when it is a tool call/result; indexed for card rendering. + */ + append(event: SessionEvent, view?: ToolEventView): void { + this.eventIndex.set(event.seq, event) + this.indexCall(event, view) + if (this.indexCommand(event)) this.rev++ + if (!isTranscriptEvent(event)) return + this.projected = [...this.projected, this.materialize(event)] + this.rev++ + } + + /** + * The current transcript node array. Same revision -> same array reference + * (memo boundary); node objects are materialized once, so an unchanged node + * keeps its identity across appends. + * @returns transcript nodes in log order, command nodes merged in by seq. + */ + nodes(): readonly ConversationNode[] { + if (this.nodesResult !== null && this.nodesResult.rev === this.rev) return this.nodesResult.value + // Command nodes fold outside the transcript (log-only events); merge by + // seq. Both inputs are seq-ascending (log order and run-index insertion + // order are the same order), so one linear merge keeps flow order. + let nodes = this.projected + if (this.commandIdx.size > 0) { + nodes = [] + const commands = [...this.commandIdx.values()] + let next = 0 + for (const node of this.projected) { + for (let cmd = commands[next]; cmd !== undefined && cmd.seq < node.seq; cmd = commands[++next]) { + nodes.push(cmd) + } + nodes.push(node) + } + for (let cmd = commands[next]; cmd !== undefined; cmd = commands[++next]) nodes.push(cmd) + } + this.nodesResult = { rev: this.rev, value: nodes } + return nodes + } + + /** Materialize one transcript event against the complete current indexes. */ + private materialize(event: SessionEvent): ConversationNode { + return isCompactCheckpoint(event) + ? materializeCompaction(event, this.eventIndex) + : materializeNode(event, this.callIdx, this.resultViews.get(event.seq) ?? null) + } + + /** + * Fold one command lifecycle event into its node (run mints, done settles in + * place; done-only soft-falls). + * @returns whether the command index changed, so callers can bump the revision. + */ + private indexCommand(event: SessionEvent): boolean { + // Log-only plugin events: the host-side dsh-commands declaration cannot + // enter the client program, so this wire consumer narrows structurally + // (the same posture as tool/code-dispatch in session.ts). + if ((event.type as string) === 'command/run') { + const data = event.data as unknown as { commandId: CommandId; name: string; args: string } + this.commandIdx.set(data.commandId, { + kind: 'command', seq: event.seq, time: event.time, + commandId: data.commandId, name: data.name, args: data.args, outcome: null, + }) + return true + } + if ((event.type as string) !== 'command/done') return false + const data = event.data as unknown as { commandId: CommandId; kind: 'success' | 'error'; text?: string } + const run = this.commandIdx.get(data.commandId) + const outcome = { kind: data.kind, ...data.text === undefined ? {} : { text: data.text } } + if (run === undefined) { + // Cross-window cut: the run page fell out of the window — build the + // node from the done alone (same soft-fall as a call-less tool result). + this.commandIdx.set(data.commandId, { + kind: 'command', seq: event.seq, time: event.time, + commandId: data.commandId, name: null, args: null, outcome, + }) + return true + } + // Settle in place: a fresh node object (published references stay immutable). + this.commandIdx.set(data.commandId, { ...run, outcome }) + return true + } + + private indexCall(event: SessionEvent, view?: ToolEventView): void { + if (event.type === 'tool/result') { + if (view?.for === 'result') this.resultViews.set(event.seq, view.view) + return + } + if (event.type !== 'tool/call') return + this.callIdx.set(String(event.data.callId), { + name: event.data.name, argsRaw: event.data.arguments, turn: event.data.turn, step: event.data.step, + time: event.time, + callView: view?.for === 'call' ? view.view : null, + }) + // No backfill into already-materialized tool-result nodes for this callId + // (window order puts the call before its result; cannot happen on the normal path). + } +} diff --git a/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts b/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts new file mode 100644 index 0000000000..c657ebd036 --- /dev/null +++ b/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts @@ -0,0 +1,52 @@ +/** + * Drift trap for the compaction-checkpoint recognition rule. + * + * `TranscriptAdapter` restates the compaction seam's checkpoint source as a + * local literal because it cannot import `dsh-compact` in any form: a VALUE + * import fails the client purity gate, and a TYPE-ONLY import fails typecheck — + * `dsh-compact`'s root reaches `dsh-session`'s root, whose cordis `Context` + * merge declares the HOST `sessions: SessionStore` against the client program's + * `sessions: ISessions` (`TS2717`). This spec runs in the client TEST program, + * which does not carry that collision, and it is the only thing keeping the two + * implementations from drifting: it drives the adapter with a checkpoint built + * from the canonical `COMPACT_CHECKPOINT_SOURCE` itself, so renaming the seam's + * plugin fails HERE instead of silently deleting every compaction marker from + * the web transcript. + */ + +import { COMPACT_CHECKPOINT_SOURCE, isCompactCheckpointSource } from '@deepseek-ai/dsh-compact' +import { createUserMessage } from '@deepseek-ai/dsh-llm' +import { describe, expect, it } from 'vitest' +import type { SessionEvent } from '@deepseek-ai/dsh-session/types' +import { TranscriptAdapter } from '../src/client/sessions/transcript-adapter.ts' + +/** A replacement user message stamped with the seam's own canonical source. */ +function canonicalCheckpoint(seq: number): SessionEvent { + return { + type: 'user/message', + seq, + time: 1_700_000_000_000 + seq, + surfaceOp: { op: 'replace', start: 0, end: 0 }, + sourceEventSeqs: [0], + data: createUserMessage({ + content: [{ type: 'text', text: 'model only' }], + source: COMPACT_CHECKPOINT_SOURCE, + }), + } as unknown as SessionEvent +} + +describe('compaction checkpoint recognition', () => { + it('recognizes a checkpoint carrying the seam-canonical source', () => { + const adapter = new TranscriptAdapter() + adapter.reset([canonicalCheckpoint(1)]) + expect(adapter.nodes()).toEqual([{ kind: 'compaction', seq: 1, time: 1_700_000_000_001, summary: null }]) + }) + + it('agrees with the seam s own predicate on the source it recognizes', () => { + // Both sides answer the same question about the same value: if the seam + // renames its plugin, this equality is what breaks. + const checkpoint = canonicalCheckpoint(1) + expect(checkpoint.type === 'user/message' && isCompactCheckpointSource(checkpoint.data.source)).toBe(true) + expect(COMPACT_CHECKPOINT_SOURCE).toEqual({ kind: 'plugin', plugin: 'compact' }) + }) +}) diff --git a/packages/client/runtime/tests/event-script.ts b/packages/client/runtime/tests/event-script.ts index 53f80e0e69..f92ee787f4 100644 --- a/packages/client/runtime/tests/event-script.ts +++ b/packages/client/runtime/tests/event-script.ts @@ -69,6 +69,27 @@ export const ev = { at(seq, { type: 'command/run', data: { commandId, name, args, source: { kind: 'user' } } }), commandDone: (seq: number, commandId: string, kind: 'success' | 'error' = 'success', text?: string): SessionEvent => at(seq, { type: 'command/done', data: { commandId, kind, ...text === undefined ? {} : { text } } }), + /** A compaction's log-only `compact/summary` provenance record. */ + compactSummary: (seq: number, summary: string, start: number, end: number): SessionEvent => + at(seq, { type: 'compact/summary', data: { + summary: text(summary), + shadowedRange: { start, end }, + shadowedSeqs: [start, end], + shadowedTokenCount: 100, + provider: 'fake', + model: 'compact-1', + } }), + /** The replacement user message a compaction backend lands (the checkpoint). */ + compactCheckpoint: (seq: number, summarySeq: number, start: number, end: number): SessionEvent => + at(seq, { + type: 'user/message', + surfaceOp: { op: 'replace', start, end }, + sourceEventSeqs: [summarySeq, start, end], + data: createUserMessage({ + content: text('model only'), + source: { kind: 'plugin', plugin: 'compact' }, + }), + }), } /** One complete plain turn (turn/start → user → step → assistant → turn/end), 6 events from startSeq. */ diff --git a/packages/client/runtime/tests/fold-adapter.spec.ts b/packages/client/runtime/tests/fold-adapter.spec.ts deleted file mode 100644 index b40bdb4111..0000000000 --- a/packages/client/runtime/tests/fold-adapter.spec.ts +++ /dev/null @@ -1,251 +0,0 @@ -import { createUserMessage, CallId, createMessage, createToolResultMessage } from '@deepseek-ai/dsh-llm' -/** - * FoldAdapter over the real core SurfaceManager: padding sentinels for paged - * windows, incremental append with node-cache identity, six-variant - * materialization, call-index backfill, and the degraded linear-scan branch. - */ - -import { describe, expect, it, vi } from 'vitest' -import type { SessionEvent } from '@deepseek-ai/dsh-session/types' -import { FoldAdapter } from '../src/client/sessions/fold-adapter.ts' -import { ev, plainTurn } from './event-script.ts' - -const at = (seq: number, e: Record): SessionEvent => - ({ seq, time: 1_700_000_000_000 + seq, ...e }) as unknown as SessionEvent - -describe('FoldAdapter', () => { - it('folds a baseSeq>0 window through padding sentinels with correct seqs', () => { - const adapter = new FoldAdapter() - const window = plainTurn(100, 5, '偏移问', '偏移答') - adapter.reset(window, 100) - const { nodes, degraded } = adapter.nodes() - expect(degraded).toBe(false) - expect(nodes.map(n => [n.kind, n.seq])).toEqual([['user', 101], ['assistant', 103]]) - }) - - it('appends incrementally keeping old node references (cache identity)', () => { - const adapter = new FoldAdapter() - adapter.reset(plainTurn(0, 0, 'a', 'b'), 0) - const first = adapter.nodes() - adapter.append(ev.user(6, '追加')) - const second = adapter.nodes() - expect(second.nodes).toHaveLength(3) - expect(second.nodes[0]).toBe(first.nodes[0]) - expect(second.nodes[1]).toBe(first.nodes[1]) - expect(second.nodes).not.toBe(first.nodes) // array itself fresh per call - }) - - it('materializes all six node variants with field mapping', () => { - const adapter = new FoldAdapter() - const events = [ - ev.user(0, '用户'), - ev.assistant(1, 0, '助手'), - at(2, { type: 'steering/message', surfaceOp: 'append', data: { - turn: 0, - message: createUserMessage({ - content: [{ type: 'text', text: '插话' }], - source: { kind: 'user' }, - }), - } }), - at(3, { type: 'user/message', surfaceOp: 'append', data: createUserMessage({ - content: [{ type: 'text', text: '上下文' }], source: { kind: 'plugin', plugin: 'p' }, - }) }), - ev.toolCall(4, 0, 'c1', 'echo', '{"x":1}'), - ev.toolResult(5, 0, 'c1', '结果'), - ] - adapter.reset(events, 0) - const { nodes } = adapter.nodes() - const kinds = nodes.map(n => n.kind) - expect(kinds).toContain('user') - expect(kinds).toContain('assistant') - expect(kinds).toContain('steering') - expect(kinds).toContain('context') - const result = nodes.find(n => n.kind === 'tool-result') - expect(result).toMatchObject({ callId: 'c1', call: { name: 'echo', argsRaw: '{"x":1}' }, isError: false }) - }) - - it('returns call:null for a tool-result whose call fell outside the window', () => { - const adapter = new FoldAdapter() - adapter.reset([ev.toolResult(50, 3, 'outside-call', '孤儿结果')], 50) - const { nodes } = adapter.nodes() - expect(nodes[0]).toMatchObject({ kind: 'tool-result', callId: 'outside-call', call: null }) - }) - - it('materializes surface-eligible types it does not know as unknown nodes', () => { - const adapter = new FoldAdapter() - adapter.reset([at(0, { type: 'notice/message', surfaceOp: 'append', data: { note: 1 } })], 0) - const { nodes } = adapter.nodes() - // Either the fold surfaces it (unknown node) or skips it as non-eligible — both are valid - // shapes; what matters is no throw and no misclassification into a known kind. - for (const node of nodes) expect(node.kind).toBe('unknown') - }) - - it('degrades to the lenient linear scan when the fold throws, and stays degraded', () => { - const adapter = new FoldAdapter() - // An invalid surfaceOp on a surface-eligible event deterministically throws in the core fold. - const window = [ - ev.user(10, '正常'), - at(11, { type: 'assistant/message', surfaceOp: 'bogus-op', data: { - turn: 0, step: 0, - message: createMessage({ - role: 'assistant', - content: [{ type: 'text', text: '坏 op' }], - source: { - kind: 'model', - ...{ provider: 'x', model: 'y' }, - }, - }), - } }), - ] - const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined) - try { - adapter.reset(window, 10) - const first = adapter.nodes() - expect(first.degraded).toBe(true) - expect(errorSpy).toHaveBeenCalled() - expect(first.nodes.map(n => n.seq)).toEqual([10, 11]) // linear scan: append order, bad op ignored - adapter.append(ev.user(12, '降级后追加')) // bump rev so the cached result is not reused - const second = adapter.nodes() - expect(second.degraded).toBe(true) // sticky: no re-throw loop, straight to the linear scan - expect(second.nodes[0]).toBe(first.nodes[0]) // cache still serves node identity - expect(second.nodes.map(n => n.seq)).toEqual([10, 11, 12]) - } finally { - errorSpy.mockRestore() - } - }) - - it('materializes a tool-result error field when present', () => { - const adapter = new FoldAdapter() - adapter.reset([ - at(0, { type: 'tool/result', surfaceOp: 'append', data: { - turn: 0, step: 0, - message: createToolResultMessage({ - callId: CallId('c1'), - content: [], - isError: true, - }), - error: { name: 'Boom', code: 'boom' }, - } }), - ], 0) - expect(adapter.nodes().nodes[0]).toMatchObject({ kind: 'tool-result', isError: true, error: { code: 'boom' } }) - }) - - it('exposes the in-window call index for runningCalls material', () => { - const adapter = new FoldAdapter() - adapter.reset([ev.toolCall(0, 1, 'c9', 'slow', '{}')], 0) - expect(adapter.callIndex.get('c9')).toMatchObject({ name: 'slow', turn: 1 }) - adapter.append(ev.toolCall(1, 1, 'c10', 'fast', '{}')) - expect(adapter.callIndex.size).toBe(2) - }) - - it('attaches wire views: callView into the call index, resultView onto the node by seq', () => { - const adapter = new FoldAdapter() - const events = [ - ev.toolCall(0, 1, 'c1', 'bash', '{"cmd":"ls"}'), - ev.toolResult(1, 1, 'c1', 'listing'), - ] - const callView = { for: 'call' as const, view: { card: 'terminal' as const, command: 'ls' } } - const resultView = { for: 'result' as const, view: { card: 'generic' as const, title: '完成' } } - adapter.reset(events, 0, [callView, resultView] as never) - expect(adapter.callIndex.get('c1')).toMatchObject({ callView: { card: 'terminal' } }) - const node = adapter.nodes().nodes.find(n => n.kind === 'tool-result') - expect(node).toMatchObject({ callView: { card: 'terminal' }, resultView: { card: 'generic', title: '完成' } }) - }) - - it('attaches views on the live append path and defaults to null without views', () => { - const adapter = new FoldAdapter() - adapter.reset(plainTurn(0, 0, 'a', 'b'), 0) // no views argument: legacy-shaped call - adapter.append(ev.toolCall(6, 1, 'c2', 'echo', '{}'), { for: 'call', view: { card: 'generic', title: '回声' } } as never) - adapter.append(ev.toolResult(7, 1, 'c2', 'ok')) // no view on the result - expect(adapter.callIndex.get('c2')).toMatchObject({ callView: { title: '回声' } }) - const node = adapter.nodes().nodes.find(n => n.kind === 'tool-result') - expect(node).toMatchObject({ callView: { title: '回声' }, resultView: null }) - }) - - it('leaves callView null when the paired call fell outside the window (cross-page break)', () => { - const adapter = new FoldAdapter() - const resultView = { for: 'result' as const, view: { card: 'generic' as const, title: '孤儿' } } - adapter.reset([ev.toolResult(50, 3, 'outside', '窗外配对')], 50, [resultView] as never) - const node = adapter.nodes().nodes[0] - expect(node).toMatchObject({ kind: 'tool-result', call: null, callView: null, resultView: { title: '孤儿' } }) - }) - - describe('command lifecycle nodes', () => { - it('folds a run/done pair into one settled node merged into flow order by seq', () => { - const adapter = new FoldAdapter() - adapter.reset([ - ev.user(0, '先说话'), - ev.commandRun(1, 'cmd-1', 'plan'), - ev.commandDone(2, 'cmd-1', 'success', '已进入 plan mode'), - ev.assistant(3, 0, '然后回答'), - ], 0) - const { nodes } = adapter.nodes() - expect(nodes.map(n => [n.kind, n.seq])).toEqual([['user', 0], ['command', 1], ['assistant', 3]]) - expect(nodes[1]).toMatchObject({ - kind: 'command', commandId: 'cmd-1', name: 'plan', args: '', - outcome: { kind: 'success', text: '已进入 plan mode' }, - }) - }) - - it('renders a run with no done as still executing (outcome null)', () => { - const adapter = new FoldAdapter() - adapter.reset([ev.commandRun(0, 'cmd-2', 'goal', ' ship it')], 0) - expect(adapter.nodes().nodes[0]).toMatchObject({ - kind: 'command', name: 'goal', args: ' ship it', outcome: null, - }) - }) - - it('soft-falls a done-only window into a node built from the done (cross-window cut)', () => { - const adapter = new FoldAdapter() - adapter.reset([ev.commandDone(80, 'cmd-3', 'error', '失败了')], 80) - expect(adapter.nodes().nodes[0]).toMatchObject({ - kind: 'command', seq: 80, commandId: 'cmd-3', name: null, args: null, - outcome: { kind: 'error', text: '失败了' }, - }) - }) - - it('settles a live-appended done in place, keeping the node at the run seq', () => { - const adapter = new FoldAdapter() - adapter.reset(plainTurn(0, 0, 'q', 'a'), 0) - adapter.append(ev.commandRun(6, 'cmd-4', 'clear')) - const running = adapter.nodes().nodes.find(n => n.kind === 'command') - expect(running).toMatchObject({ outcome: null }) - adapter.append(ev.commandDone(7, 'cmd-4')) - const settled = adapter.nodes().nodes.find(n => n.kind === 'command') - expect(settled).toMatchObject({ seq: 6, outcome: { kind: 'success' } }) - // Settlement replaced the node object rather than mutating the published one. - expect(settled).not.toBe(running) - }) - - it('tails command nodes whose seq is past every surface node', () => { - const adapter = new FoldAdapter() - adapter.reset([ev.user(0, '问'), ev.commandRun(1, 'cmd-tail', 'plan')], 0) - expect(adapter.nodes().nodes.map(n => n.kind)).toEqual(['user', 'command']) - }) - - it('command nodes survive the degraded linear-scan branch', () => { - const adapter = new FoldAdapter() - const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined) - try { - adapter.reset([ - ev.commandRun(0, 'cmd-5', 'plan'), - ev.commandDone(1, 'cmd-5'), - at(2, { type: 'assistant/message', surfaceOp: 'bogus-op', data: { - turn: 0, - step: 0, - message: createMessage({ - role: 'assistant', - content: [{ type: 'text', text: '坏 op' }], - source: { kind: 'model', provider: 'x', model: 'y' }, - }), - } }), - ], 0) - const { nodes, degraded } = adapter.nodes() - expect(degraded).toBe(true) - expect(nodes.some(n => n.kind === 'command')).toBe(true) - } finally { - errorSpy.mockRestore() - } - }) - }) -}) diff --git a/packages/client/runtime/tests/session.spec.ts b/packages/client/runtime/tests/session.spec.ts index c7be330d55..8d09798b8e 100644 --- a/packages/client/runtime/tests/session.spec.ts +++ b/packages/client/runtime/tests/session.spec.ts @@ -195,6 +195,45 @@ describe('live event path', () => { }) }) + it('keeps compacted history and adds one marker, live and on replay alike', async () => { + // A landed compaction must not erase conversation the reader already saw: + // the shadowed messages stay at their own log positions and the checkpoint + // contributes one marker after them. + const { session } = await opened() + const feed = (event: SessionEvent) => { session.handleMuxEnvelope('r' as never, { type: 'session/event', sessionId: SID, event }) } + feed(ev.compactSummary(6, '压缩摘要', 1, 3)) + feed(ev.compactCheckpoint(7, 6, 1, 3)) + const live = session.getSnapshot().nodes + expect(live.map(n => [n.kind, n.seq])).toEqual([['user', 1], ['assistant', 3], ['compaction', 7]]) + expect(live.at(-1)).toMatchObject({ kind: 'compaction', summary: '压缩摘要' }) + + const replayed = await opened([ + ...plainTurn(0, 0, 'a', 'b'), + ev.compactSummary(6, '压缩摘要', 1, 3), + ev.compactCheckpoint(7, 6, 1, 3), + ]) + expect(replayed.session.getSnapshot().nodes).toEqual(live) + }) + + it('merges an interrupted frozen node by seq into the log-ordered transcript', async () => { + // The transcript array is seq-monotonic, so the frozen node's fractional + // seq lands it exactly where it happened — including after a compaction + // checkpoint whose own seq is higher than the range it shadowed. + const { session } = await opened() + const feed = (event: SessionEvent) => { session.handleMuxEnvelope('r' as never, { type: 'session/event', sessionId: SID, event }) } + feed(ev.compactSummary(6, '压缩摘要', 1, 3)) + feed(ev.compactCheckpoint(7, 6, 1, 3)) + feed(ev.turnStart(8, 1)) + feed(ev.user(9, '压缩后的提问')) + feed(ev.chunkStart(10, 1)) + feed(ev.chunkText(11, 1, '说到一半')) + feed(ev.turnEnd(12, 1, 'cancelled')) + expect(session.getSnapshot().nodes.map(n => n.kind)).toEqual([ + 'user', 'assistant', 'compaction', 'user', 'assistant', + ]) + expect(session.getSnapshot().nodes.at(-1)).toMatchObject({ interrupted: true }) + }) + it('repairs a seq gap by repulling the tail page instead of appending a hole', async () => { const { api, session } = await opened(plainTurn(0, 0, 'a', 'b')) // tail seq = 5 const repaired = [...plainTurn(0, 0, 'a', 'b'), ...plainTurn(6, 1, 'c', 'd')] @@ -226,6 +265,30 @@ describe('paging', () => { expect(snapshot.nodes.map(n => n.seq)).toEqual([1, 3, 7, 9]) }) + it('renders a page whose checkpoint shadows seqs below the window head, logging nothing', async () => { + // Pagination no longer spends maxMessages quota on replacement copies, so a + // page can carry a compaction checkpoint whose surfaceOp.start lies outside + // the window. The old surface fold rejected that range and degraded with a + // console error; the log-ordered transcript has no range to resolve. + const { api, session } = makeSession() + api.onHistory = () => histResponse([ + ev.compactSummary(80, '窗外范围的摘要', 3, 40), + ev.compactCheckpoint(81, 80, 3, 40), + ev.user(82, '压缩后的新问题'), + ], true) + const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined) + try { + await session.open() + const snapshot = session.getSnapshot() + expect(snapshot.openState).toBe('open') + expect(snapshot.nodes.map(n => [n.kind, n.seq])).toEqual([['compaction', 81], ['user', 82]]) + expect(snapshot.nodes[0]).toMatchObject({ summary: '窗外范围的摘要' }) + expect(errorSpy).not.toHaveBeenCalled() + } finally { + errorSpy.mockRestore() + } + }) + it('drops a discontinuous older page fail-soft (window unchanged, hasMore cleared)', async () => { const { api, session } = makeSession() api.onHistory = payload => payload.beforeSeq === undefined diff --git a/packages/client/runtime/tests/transcript-adapter.spec.ts b/packages/client/runtime/tests/transcript-adapter.spec.ts new file mode 100644 index 0000000000..b53fcb0117 --- /dev/null +++ b/packages/client/runtime/tests/transcript-adapter.spec.ts @@ -0,0 +1,415 @@ +/** + * TranscriptAdapter over the raw append-only window: log-ordered projection of + * append-origin events, one marker per landed compaction, replacement copies + * hidden, command-lifecycle folding, node/array identity, call pairing, and + * host-provided wire views. + */ + +import { createUserMessage, CallId, createMessage, createToolResultMessage } from '@deepseek-ai/dsh-llm' +import { describe, expect, it } from 'vitest' +import type { SessionEvent } from '@deepseek-ai/dsh-session/types' +import { TranscriptAdapter } from '../src/client/sessions/transcript-adapter.ts' +import { ev, plainTurn } from './event-script.ts' + +const at = (seq: number, e: Record): SessionEvent => + ({ seq, time: 1_700_000_000_000 + seq, ...e }) as unknown as SessionEvent + +/** A `compact/summary` provenance event (log-only, no surfaceOp). */ +function compactSummary(seq: number, summary: unknown = [{ type: 'text', text: '# 摘要\n\n保留事实' }]): SessionEvent { + return at(seq, { + type: 'compact/summary', + data: { + summary, + shadowedRange: { start: 1, end: 3 }, + shadowedSeqs: [1, 3], + shadowedTokenCount: 100, + provider: 'fake', + model: 'compact-1', + }, + }) +} + +/** The replacement user message a compaction backend lands (the checkpoint). */ +function checkpoint( + seq: number, + summarySeq: number, + { start = 1, end = 3, sourceEventSeqs = [summarySeq, start, end] }: { + start?: number + end?: number + sourceEventSeqs?: number[] + } = {}, +): SessionEvent { + return at(seq, { + type: 'user/message', + surfaceOp: { op: 'replace', start, end }, + sourceEventSeqs, + data: createUserMessage({ + content: [{ type: 'text', text: 'model only' }], + source: { kind: 'plugin', plugin: 'compact' }, + }), + }) +} + +describe('TranscriptAdapter', () => { + it('projects a window starting past seq 0 at its own log positions', () => { + const adapter = new TranscriptAdapter() + adapter.reset(plainTurn(100, 5, '偏移问', '偏移答')) + expect(adapter.nodes().map(n => [n.kind, n.seq])).toEqual([['user', 101], ['assistant', 103]]) + }) + + it('appends incrementally keeping old node references (materialize-once identity)', () => { + const adapter = new TranscriptAdapter() + adapter.reset(plainTurn(0, 0, 'a', 'b')) + const first = adapter.nodes() + adapter.append(ev.user(6, '追加')) + const second = adapter.nodes() + expect(second).toHaveLength(3) + expect(second[0]).toBe(first[0]) + expect(second[1]).toBe(first[1]) + expect(second).not.toBe(first) // a real change swaps the array + }) + + it('keeps the array reference across a chunk storm and swaps it when a node lands', () => { + const adapter = new TranscriptAdapter() + adapter.reset(plainTurn(0, 0, 'a', 'b')) + const settled = adapter.nodes() + adapter.append(ev.chunkStart(6, 1)) + expect(adapter.nodes()).toBe(settled) + adapter.append(ev.chunkText(7, 1, '流式')) + expect(adapter.nodes()).toBe(settled) + adapter.append(ev.assistant(8, 1, '流式完成')) + const finalized = adapter.nodes() + expect(finalized).not.toBe(settled) + expect(finalized.at(-1)).toMatchObject({ kind: 'assistant', seq: 8 }) + }) + + it('materializes every append-origin variant with field mapping', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, '用户'), + ev.assistant(1, 0, '助手'), + at(2, { type: 'steering/message', surfaceOp: 'append', data: { + turn: 0, + message: createUserMessage({ + content: [{ type: 'text', text: '插话' }], + source: { kind: 'user' }, + }), + } }), + at(3, { type: 'user/message', surfaceOp: 'append', data: createUserMessage({ + content: [{ type: 'text', text: '上下文' }], source: { kind: 'plugin', plugin: 'p' }, + }) }), + ev.toolCall(4, 0, 'c1', 'echo', '{"x":1}'), + ev.toolResult(5, 0, 'c1', '结果'), + ]) + const nodes = adapter.nodes() + expect(nodes.map(n => n.kind)).toEqual(['user', 'assistant', 'steering', 'context', 'tool-result']) + expect(nodes.find(n => n.kind === 'tool-result')).toMatchObject({ + callId: 'c1', call: { name: 'echo', argsRaw: '{"x":1}' }, isError: false, + }) + }) + + it('skips events core does not call surface-eligible, marker or not', () => { + // The transcript is the append-origin surface, so log-only events (a chunk, + // a turn boundary, a compact/* provenance record) and a future type core + // has not admitted contribute no node. + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.turnStart(0, 1), + at(1, { type: 'notice/message', surfaceOp: 'append', data: { note: 1 } }), + compactSummary(2), + ev.user(3, '唯一的一条'), + ev.turnEnd(4, 1), + ]) + expect(adapter.nodes().map(n => [n.kind, n.seq])).toEqual([['user', 3]]) + }) + + describe('compaction markers', () => { + it('keeps the original messages and full tool output, hiding replacement copies', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, '原始问题'), + ev.assistant(1, 0, '原始回答'), + ev.toolCall(4, 0, 'c1', 'echo', '{}'), + ev.toolResult(5, 0, 'c1', '完整工具输出'), + // A pruned tool/result copy: rewrites one node for the model, marks nothing. + at(6, { type: 'tool/result', surfaceOp: { op: 'replace', start: 5, end: 5 }, sourceEventSeqs: [5], data: { + turn: 0, step: 0, + message: createToolResultMessage({ callId: CallId('c1'), content: [{ type: 'text', text: '已裁剪' }], isError: false }), + } }), + compactSummary(7), + checkpoint(8, 7, { start: 1, end: 5, sourceEventSeqs: [7, 1, 5] }), + // A regenerated assistant/message: also a silent model-only rewrite. + at(9, { type: 'assistant/message', surfaceOp: { op: 'replace', start: 8, end: 8 }, sourceEventSeqs: [8], data: { + turn: 0, step: 0, + message: createMessage({ + role: 'assistant', + content: [{ type: 'text', text: '通用 replacement 副本' }], + source: { kind: 'model', ...{ provider: 'x', model: 'copy' } }, + }), + } }), + ]) + const nodes = adapter.nodes() + expect(nodes.map(n => [n.kind, n.seq])).toEqual([ + ['user', 0], ['assistant', 1], ['tool-result', 5], ['compaction', 8], + ]) + expect(nodes[2]).toMatchObject({ kind: 'tool-result', content: [{ type: 'text', text: '完整工具输出' }] }) + expect(nodes[3]).toMatchObject({ kind: 'compaction', summary: '# 摘要\n\n保留事实' }) + }) + + it('adds one marker per landed compaction, in log order', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, 'a'), + compactSummary(1, [{ type: 'text', text: 'first' }]), + checkpoint(2, 1, { start: 0, end: 0, sourceEventSeqs: [1, 0] }), + ev.user(3, 'b'), + compactSummary(4, [{ type: 'text', text: 'second' }]), + checkpoint(5, 4, { start: 2, end: 3, sourceEventSeqs: [4, 2, 3] }), + ]) + expect(adapter.nodes().filter(n => n.kind === 'compaction')).toEqual([ + { kind: 'compaction', seq: 2, time: 1_700_000_000_002, summary: 'first' }, + { kind: 'compaction', seq: 5, time: 1_700_000_000_005, summary: 'second' }, + ]) + }) + + it('renders the marker when the shadowed range is outside the window and logs nothing', () => { + // The pagination hole A1 left open: quota is no longer spent on + // replacement copies, so a page can carry a checkpoint whose + // surfaceOp.start lies below the window head. The old surface fold threw + // on the missing range and degraded with a console error; a log-ordered + // projection has no range to resolve. + const adapter = new TranscriptAdapter() + const noise = { error: console.error, warn: console.warn } + const logged: unknown[] = [] + console.error = (...args: unknown[]) => logged.push(args) + console.warn = (...args: unknown[]) => logged.push(args) + try { + adapter.reset([ + compactSummary(80, [{ type: 'text', text: '窗外范围' }]), + checkpoint(81, 80, { start: 3, end: 40, sourceEventSeqs: [80, 3, 40] }), + ev.user(82, '压缩后的新问题'), + ]) + expect(adapter.nodes().map(n => [n.kind, n.seq])).toEqual([['compaction', 81], ['user', 82]]) + expect(adapter.nodes()[0]).toMatchObject({ summary: '窗外范围' }) + } finally { + console.error = noise.error + console.warn = noise.warn + } + expect(logged).toEqual([]) + }) + + it('treats an APPENDING plugin-sourced user/message as injected context, not a compaction', () => { + // A session-reference card carries the same plugin source shape; only the + // replacement marker makes an event a checkpoint. + const adapter = new TranscriptAdapter() + adapter.reset([ + at(0, { type: 'user/message', surfaceOp: 'append', data: createUserMessage({ + content: [{ type: 'text', text: '注入的上下文' }], + source: { kind: 'plugin', plugin: 'compact' }, + }) }), + ]) + expect(adapter.nodes()).toMatchObject([{ kind: 'context', seq: 0 }]) + }) + + it('ignores a foreign plugin s replacement user/message', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, '保留'), + at(1, { type: 'user/message', surfaceOp: { op: 'replace', start: 0, end: 0 }, sourceEventSeqs: [0], data: createUserMessage({ + content: [{ type: 'text', text: '别的插件重写' }], + source: { kind: 'plugin', plugin: 'not-compact' }, + }) }), + ]) + expect(adapter.nodes().map(n => [n.kind, n.seq])).toEqual([['user', 0]]) + }) + + it.each([ + ['absent provenance', undefined], + ['malformed summary blocks', compactSummary(1, [{ type: 'image', data: 'nope' }])], + ['a whitespace-only summary', compactSummary(1, [{ type: 'text', text: ' ' }])], + ['an empty summary array', compactSummary(1, [])], + ['a non-array summary', compactSummary(1, 'plain string')], + ])('degrades %s to a non-expandable marker', (_label, summary) => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ...(summary === undefined ? [] : [summary]), + checkpoint(2, 1, { start: 0, end: 0, sourceEventSeqs: [1, 0] }), + ]) + expect(adapter.nodes()).toEqual([ + { kind: 'compaction', seq: 2, time: 1_700_000_000_002, summary: null }, + ]) + }) + + it('leaves the summary null when the checkpoint records no provenance at all', () => { + const adapter = new TranscriptAdapter() + adapter.reset([at(2, { + type: 'user/message', + surfaceOp: { op: 'replace', start: 0, end: 0 }, + data: createUserMessage({ + content: [{ type: 'text', text: 'x' }], + source: { kind: 'plugin', plugin: 'compact' }, + }), + })]) + expect(adapter.nodes()).toEqual([{ kind: 'compaction', seq: 2, time: 1_700_000_000_002, summary: null }]) + }) + + it('skips a non-summary provenance seq before reaching the real one', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, '被压缩的问题'), + at(1, { type: 'compact/start', data: { turn: 0 } }), + compactSummary(2, [{ type: 'text', text: '第三个来源才是摘要' }]), + checkpoint(3, 2, { start: 0, end: 0, sourceEventSeqs: [1, 2, 0] }), + ]) + expect(adapter.nodes().at(-1)).toMatchObject({ kind: 'compaction', summary: '第三个来源才是摘要' }) + }) + + it('resolves the summary once an older page supplies the provenance', () => { + const adapter = new TranscriptAdapter() + const landed = checkpoint(8, 7, { start: 0, end: 0, sourceEventSeqs: [7, 0] }) + adapter.reset([landed]) + expect(adapter.nodes()[0]).toMatchObject({ kind: 'compaction', summary: null }) + adapter.reset([compactSummary(7, [{ type: 'text', text: '分页补齐的摘要' }]), landed]) + expect(adapter.nodes()[0]).toMatchObject({ kind: 'compaction', summary: '分页补齐的摘要' }) + }) + + it('creates the marker on the live append path', () => { + const adapter = new TranscriptAdapter() + adapter.reset(plainTurn(0, 0, 'a', 'b')) + adapter.append(compactSummary(6, [{ type: 'text', text: '直播摘要' }])) + adapter.append(checkpoint(7, 6, { start: 1, end: 3, sourceEventSeqs: [6, 1, 3] })) + const nodes = adapter.nodes() + // The compacted history is still there; the marker is one more row after it. + expect(nodes.map(n => [n.kind, n.seq])).toEqual([['user', 1], ['assistant', 3], ['compaction', 7]]) + expect(nodes.at(-1)).toMatchObject({ kind: 'compaction', seq: 7, summary: '直播摘要' }) + }) + }) + + it('returns call:null for a tool-result whose call fell outside the window', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ev.toolResult(50, 3, 'outside-call', '孤儿结果')]) + expect(adapter.nodes()[0]).toMatchObject({ kind: 'tool-result', callId: 'outside-call', call: null }) + }) + + it('materializes a tool-result error field when present', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + at(0, { type: 'tool/result', surfaceOp: 'append', data: { + turn: 0, step: 0, + message: createToolResultMessage({ callId: CallId('c1'), content: [], isError: true }), + error: { name: 'Boom', code: 'boom' }, + } }), + ]) + expect(adapter.nodes()[0]).toMatchObject({ kind: 'tool-result', isError: true, error: { code: 'boom' } }) + }) + + it('exposes the in-window call index for runningCalls material', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ev.toolCall(0, 1, 'c9', 'slow', '{}')]) + expect(adapter.callIndex.get('c9')).toMatchObject({ name: 'slow', turn: 1 }) + adapter.append(ev.toolCall(1, 1, 'c10', 'fast', '{}')) + expect(adapter.callIndex.size).toBe(2) + }) + + it('attaches wire views: callView into the call index, resultView onto the node by seq', () => { + const adapter = new TranscriptAdapter() + const callView = { for: 'call' as const, view: { card: 'terminal' as const, command: 'ls' } } + const resultView = { for: 'result' as const, view: { card: 'generic' as const, title: '完成' } } + adapter.reset([ + ev.toolCall(0, 1, 'c1', 'bash', '{"cmd":"ls"}'), + ev.toolResult(1, 1, 'c1', 'listing'), + ], [callView, resultView] as never) + expect(adapter.callIndex.get('c1')).toMatchObject({ callView: { card: 'terminal' } }) + expect(adapter.nodes().find(n => n.kind === 'tool-result')).toMatchObject({ + callView: { card: 'terminal' }, resultView: { card: 'generic', title: '完成' }, + }) + }) + + it('attaches views on the live append path and defaults to null without views', () => { + const adapter = new TranscriptAdapter() + adapter.reset(plainTurn(0, 0, 'a', 'b')) // no views argument + adapter.append(ev.toolCall(6, 1, 'c2', 'echo', '{}'), { for: 'call', view: { card: 'generic', title: '回声' } } as never) + adapter.append(ev.toolResult(7, 1, 'c2', 'ok')) // no view on the result + expect(adapter.callIndex.get('c2')).toMatchObject({ callView: { title: '回声' } }) + expect(adapter.nodes().find(n => n.kind === 'tool-result')).toMatchObject({ + callView: { title: '回声' }, resultView: null, + }) + }) + + it('leaves callView null when the paired call fell outside the window (cross-page break)', () => { + const adapter = new TranscriptAdapter() + const resultView = { for: 'result' as const, view: { card: 'generic' as const, title: '孤儿' } } + adapter.reset([ev.toolResult(50, 3, 'outside', '窗外配对')], [resultView] as never) + expect(adapter.nodes()[0]).toMatchObject({ + kind: 'tool-result', call: null, callView: null, resultView: { title: '孤儿' }, + }) + }) + + describe('command lifecycle nodes', () => { + it('folds a run/done pair into one settled node merged into flow order by seq', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, '先说话'), + ev.commandRun(1, 'cmd-1', 'plan'), + ev.commandDone(2, 'cmd-1', 'success', '已进入 plan mode'), + ev.assistant(3, 0, '然后回答'), + ]) + const nodes = adapter.nodes() + expect(nodes.map(n => [n.kind, n.seq])).toEqual([['user', 0], ['command', 1], ['assistant', 3]]) + expect(nodes[1]).toMatchObject({ + kind: 'command', commandId: 'cmd-1', name: 'plan', args: '', + outcome: { kind: 'success', text: '已进入 plan mode' }, + }) + }) + + it('renders a run with no done as still executing (outcome null)', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ev.commandRun(0, 'cmd-2', 'goal', ' ship it')]) + expect(adapter.nodes()[0]).toMatchObject({ kind: 'command', name: 'goal', args: ' ship it', outcome: null }) + }) + + it('soft-falls a done-only window into a node built from the done (cross-window cut)', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ev.commandDone(80, 'cmd-3', 'error', '失败了')]) + expect(adapter.nodes()[0]).toMatchObject({ + kind: 'command', seq: 80, commandId: 'cmd-3', name: null, args: null, + outcome: { kind: 'error', text: '失败了' }, + }) + }) + + it('settles a live-appended done in place, keeping the node at the run seq', () => { + const adapter = new TranscriptAdapter() + adapter.reset(plainTurn(0, 0, 'q', 'a')) + adapter.append(ev.commandRun(6, 'cmd-4', 'clear')) + const running = adapter.nodes().find(n => n.kind === 'command') + expect(running).toMatchObject({ outcome: null }) + adapter.append(ev.commandDone(7, 'cmd-4')) + const settled = adapter.nodes().find(n => n.kind === 'command') + expect(settled).toMatchObject({ seq: 6, outcome: { kind: 'success' } }) + // Settlement replaced the node object rather than mutating the published one. + expect(settled).not.toBe(running) + }) + + it('tails command nodes whose seq is past every transcript node', () => { + const adapter = new TranscriptAdapter() + adapter.reset([ev.user(0, '问'), ev.commandRun(1, 'cmd-tail', 'plan')]) + expect(adapter.nodes().map(n => n.kind)).toEqual(['user', 'command']) + }) + + it('renders the /compact row alongside the marker its own command produced', () => { + // The row that reports the compaction is a command node; dropping command + // folding would delete it together with every other slash-command row. + const adapter = new TranscriptAdapter() + adapter.reset([ + ev.user(0, '压缩前的问题'), + ev.commandRun(1, 'cmd-compact', 'compact'), + compactSummary(2, [{ type: 'text', text: '手动压缩摘要' }]), + checkpoint(3, 2, { start: 0, end: 0, sourceEventSeqs: [2, 0] }), + ev.commandDone(4, 'cmd-compact', 'success', '已压缩'), + ]) + const nodes = adapter.nodes() + expect(nodes.map(n => [n.kind, n.seq])).toEqual([['user', 0], ['command', 1], ['compaction', 3]]) + expect(nodes[1]).toMatchObject({ name: 'compact', outcome: { kind: 'success', text: '已压缩' } }) + }) + }) +}) diff --git a/packages/client/test-runtime/src/fixtures.ts b/packages/client/test-runtime/src/fixtures.ts index 4219d233e2..6c2f8e077b 100644 --- a/packages/client/test-runtime/src/fixtures.ts +++ b/packages/client/test-runtime/src/fixtures.ts @@ -46,7 +46,6 @@ export function conversationSnapshot(sessionId: SessionId): ConversationSnapshot return { sessionId, nodes: [], - foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), diff --git a/packages/client/ui-conversation/src/client/chat/CompactionItem.tsx b/packages/client/ui-conversation/src/client/chat/CompactionItem.tsx new file mode 100644 index 0000000000..604f504aac --- /dev/null +++ b/packages/client/ui-conversation/src/client/chat/CompactionItem.tsx @@ -0,0 +1,49 @@ +// CompactionItem: the one row a landed compaction contributes to the flow. +// The conversation it shadowed on the model surface stays above it, so this +// marker reports where the model stopped seeing that history — it never +// replaces it. The framed checkpoint payload is written for the model and is +// not rendered; the disclosure shows the summary from the checkpoint's own +// provenance, and a window cut that left that provenance outside makes the row +// non-expandable rather than empty. + +import { memo, useState } from 'react' +import type { CompactionSummaryNode } from '@deepseek-ai/dsh-client-runtime/client' +import { + IconChevronDownOutline14, + IconChevronRightOutline14, + MarkdownText, +} from '@deepseek-ai/dsh-client-ui-primitives' +import css from './MessageItem.module.css' + +/** + * The collapsed-by-default compaction marker. + * @param props - the marker node off the snapshot cache. + * @returns the marker row, with the summary disclosure when one is available. + */ +export const CompactionItem = memo(function CompactionItem({ node }: { node: CompactionSummaryNode }) { + const [expanded, setExpanded] = useState(false) + const expandable = node.summary !== null + const open = expandable && expanded + return ( +
+ + {open && node.summary !== null + &&
} +
+ ) +}) diff --git a/packages/client/ui-conversation/src/client/chat/MessageItem.module.css b/packages/client/ui-conversation/src/client/chat/MessageItem.module.css index 260382d530..be6ddf897e 100644 --- a/packages/client/ui-conversation/src/client/chat/MessageItem.module.css +++ b/packages/client/ui-conversation/src/client/chat/MessageItem.module.css @@ -42,6 +42,81 @@ padding: 2px 0; } +/* Compaction marker: one dim 24px row with a chevron disclosure for the + summary body. Dimmed title (not label-primary) — the row is a boundary + notice, not conversation content. */ +.compactionRow { + padding: 2px 0; +} + +.compactionButton { + display: flex; + align-items: center; + width: 100%; + height: 24px; + min-width: 0; + padding: 0; + border: none; + border-radius: 6px; + background: none; + color: inherit; + font: inherit; + text-align: left; +} + +.compactionButton:not(:disabled) { + cursor: pointer; +} + +.compactionButton:not(:disabled):hover { + background: var(--dsw-alias-interactive-bg-hover); +} + +.compactionLeading { + flex: none; + display: inline-flex; + align-items: center; + justify-content: center; + width: 16px; + height: 16px; + margin-right: 6px; + color: var(--dsw-alias-label-secondary); +} + +.compactionTitle { + flex: none; + font-size: 14px; + line-height: 24px; + color: var(--dsw-alias-label-primary-dimmed); +} + +.compactionSep { + flex: none; + width: 2px; + height: 2px; + margin: 0 8px; + border-radius: 1px; + background: var(--dsw-alias-label-caption); +} + +.compactionSummary { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + color: var(--dsw-alias-label-tertiary); + font-size: 14px; + line-height: 24px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.compactionBody { + padding: 4px 0 4px 22px; + color: var(--dsw-alias-label-tertiary); + font-size: 14px; + line-height: 24px; +} + /* Reference chip projection inside a user bubble (`name` model spans render as chips; free geometry — no textarea pairing here). */ .refChip { diff --git a/packages/client/ui-conversation/src/client/chat/MessageItem.tsx b/packages/client/ui-conversation/src/client/chat/MessageItem.tsx index a149d37337..b7a75262d7 100644 --- a/packages/client/ui-conversation/src/client/chat/MessageItem.tsx +++ b/packages/client/ui-conversation/src/client/chat/MessageItem.tsx @@ -1,20 +1,21 @@ -// MessageItem: the four simple node kinds — user bubble (right-aligned, with +// MessageItem: the five simple node kinds — user bubble (right-aligned, with // clock + copy / branch / edit IconActions), steering (badged bubble), context -// injection and unknown-surface JSON rows. Props are frozen node slices off -// the snapshot cache; memo holds across streaming because unchanged nodes -// keep their references. +// injection, the compaction marker, and unknown-surface JSON rows. Props are +// frozen node slices off the snapshot cache; memo holds across streaming +// because unchanged nodes keep their references. import { memo } from 'react' import type { ReactNode } from 'react' import type { - ContextMessageNode, SteeringMessageNode, UnknownSurfaceNode, UserMessageNode, + CompactionSummaryNode, ContextMessageNode, SteeringMessageNode, UnknownSurfaceNode, UserMessageNode, } from '@deepseek-ai/dsh-client-runtime/client' import { JsonBlock, MessageText } from '@deepseek-ai/dsh-client-ui-primitives' +import { CompactionItem } from './CompactionItem.tsx' import { MessageIconActions } from './MessageIconActions.tsx' import css from './MessageItem.module.css' export interface MessageItemProps { - node: UserMessageNode | SteeringMessageNode | ContextMessageNode | UnknownSurfaceNode + node: UserMessageNode | SteeringMessageNode | ContextMessageNode | CompactionSummaryNode | UnknownSurfaceNode } function contentText(content: readonly unknown[]): { text: string; rest: unknown[] } { @@ -98,6 +99,8 @@ export const MessageItem = memo(function MessageItem({ node }: MessageItemProps) ) + case 'compaction': + return default: return (
diff --git a/packages/client/ui-conversation/src/client/chat/chat-flow.ts b/packages/client/ui-conversation/src/client/chat/chat-flow.ts index f1ce061af8..fb2ee42cf2 100644 --- a/packages/client/ui-conversation/src/client/chat/chat-flow.ts +++ b/packages/client/ui-conversation/src/client/chat/chat-flow.ts @@ -24,7 +24,7 @@ function rendersNothing(node: ConversationNode): boolean { /** * Group finalized nodes into the step-summary flow. - * @param nodes - snapshot nodes (surface order). + * @param nodes - snapshot nodes (human transcript order). * @returns flow items; consecutive tool-results merged into one group keyed by the first seq. */ export function deriveChatFlow(nodes: readonly ConversationNode[]): ChatFlowItem[] { diff --git a/packages/client/ui-conversation/tests/chat-branch-tails.spec.tsx b/packages/client/ui-conversation/tests/chat-branch-tails.spec.tsx index 9bb6ba539a..73d746fc7c 100644 --- a/packages/client/ui-conversation/tests/chat-branch-tails.spec.tsx +++ b/packages/client/ui-conversation/tests/chat-branch-tails.spec.tsx @@ -117,6 +117,34 @@ describe('MessageItem arms', () => { ) expect(unknownView.getByText(/未知 surface 事件:surface\/next/)).toBeTruthy() }) + + it('a compaction marker discloses its summary and never shows the framed checkpoint', () => { + const view = render( + , + ) + const row = view.getByRole('button', { name: /上下文已压缩/ }) + expect(row.getAttribute('aria-expanded')).toBe('false') + expect(view.queryByText(/保留的事实/)).toBeNull() + fireEvent.click(row) + expect(row.getAttribute('aria-expanded')).toBe('true') + expect(view.getByRole('heading', { name: '摘要标题' })).toBeTruthy() + fireEvent.click(row) + expect(row.getAttribute('aria-expanded')).toBe('false') + }) + + it('a marker whose provenance fell outside the window is not expandable', () => { + const view = render() + const row = view.getByRole('button', { name: /上下文已压缩/ }) + expect(row).toHaveProperty('disabled', true) + expect(row.getAttribute('aria-expanded')).toBeNull() + expect(view.getByText('压缩摘要不可用')).toBeTruthy() + fireEvent.click(row) // a disabled control stays collapsed + expect(row.getAttribute('aria-expanded')).toBeNull() + }) }) describe('formatMessageClock', () => { diff --git a/packages/client/ui-conversation/tests/chat-code-subcalls.spec.tsx b/packages/client/ui-conversation/tests/chat-code-subcalls.spec.tsx index 1b4d1ee158..65dde74764 100644 --- a/packages/client/ui-conversation/tests/chat-code-subcalls.spec.tsx +++ b/packages/client/ui-conversation/tests/chat-code-subcalls.spec.tsx @@ -55,7 +55,7 @@ function snapshotWith( runningCalls: RunningToolCall[] = [], ): ConversationSnapshot { return { - sessionId: SID, nodes, foldDegraded: false, partial: null, runningCalls, codeDispatches, + sessionId: SID, nodes, partial: null, runningCalls, codeDispatches, pending: [], queue: [], running: runningCalls.length > 0, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, diff --git a/packages/client/ui-conversation/tests/chat-stats-bash-sample.spec.tsx b/packages/client/ui-conversation/tests/chat-stats-bash-sample.spec.tsx index 6985991074..8213a82a3c 100644 --- a/packages/client/ui-conversation/tests/chat-stats-bash-sample.spec.tsx +++ b/packages/client/ui-conversation/tests/chat-stats-bash-sample.spec.tsx @@ -26,7 +26,7 @@ const assistant = (seq: number, turn: number, usage?: unknown): AssistantMessage function snapshotBase(): ConversationSnapshot { return { - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: false, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, } diff --git a/packages/client/ui-conversation/tests/chat-view.spec.tsx b/packages/client/ui-conversation/tests/chat-view.spec.tsx index 328ba38340..5514f2504a 100644 --- a/packages/client/ui-conversation/tests/chat-view.spec.tsx +++ b/packages/client/ui-conversation/tests/chat-view.spec.tsx @@ -29,7 +29,7 @@ const SID = 's1' as SessionId function snapshotBase(): ConversationSnapshot { return { - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: false, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, } diff --git a/packages/client/ui-conversation/tests/gate-branch-tails.spec.tsx b/packages/client/ui-conversation/tests/gate-branch-tails.spec.tsx index 6d58932ece..26171d4040 100644 --- a/packages/client/ui-conversation/tests/gate-branch-tails.spec.tsx +++ b/packages/client/ui-conversation/tests/gate-branch-tails.spec.tsx @@ -18,7 +18,7 @@ const SID = 's1' as SessionId function snapshotBase(): ConversationSnapshot { return { - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: false, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, } diff --git a/packages/client/ui-conversation/tests/input-bar.spec.tsx b/packages/client/ui-conversation/tests/input-bar.spec.tsx index 23d853dd1a..7d8012d413 100644 --- a/packages/client/ui-conversation/tests/input-bar.spec.tsx +++ b/packages/client/ui-conversation/tests/input-bar.spec.tsx @@ -20,7 +20,7 @@ const SID = 's1' as SessionId function snapshotOf(overrides: Partial = {}): ConversationSnapshot { return { - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: false, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, diff --git a/packages/client/ui-conversation/tests/input-matrix.spec.tsx b/packages/client/ui-conversation/tests/input-matrix.spec.tsx index f6694f8cb4..b35b2fe06f 100644 --- a/packages/client/ui-conversation/tests/input-matrix.spec.tsx +++ b/packages/client/ui-conversation/tests/input-matrix.spec.tsx @@ -23,7 +23,7 @@ const SID = 's1' as SessionId /** Standard-props InputBar mount over a real shell (the composer-bar entry shape). */ function mountBar(shell: SessionInputShell, over?: { running?: boolean; disabled?: boolean }) { const session = createSnapshotStore({ - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: over?.running ?? false, composerPhase: 'active', removed: over?.disabled ?? false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, diff --git a/packages/client/ui-conversation/tests/input-scenarios.spec.tsx b/packages/client/ui-conversation/tests/input-scenarios.spec.tsx index 9d9ace032c..7dbc254ebb 100644 --- a/packages/client/ui-conversation/tests/input-scenarios.spec.tsx +++ b/packages/client/ui-conversation/tests/input-scenarios.spec.tsx @@ -109,7 +109,7 @@ async function scopedBench(register?: (slash: SlashService) => void) { actx.on('slash/input-consume-token', req => shell.consumeToken(req.guard) ? true : undefined) const wiring = shell const sessionStore = createSnapshotStore({ - sessionId, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: false, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, diff --git a/packages/client/ui-conversation/tests/queue-dock.spec.tsx b/packages/client/ui-conversation/tests/queue-dock.spec.tsx index c63d3628e5..7f7bae6d9f 100644 --- a/packages/client/ui-conversation/tests/queue-dock.spec.tsx +++ b/packages/client/ui-conversation/tests/queue-dock.spec.tsx @@ -18,7 +18,7 @@ const SID = 's1' as SessionId function snapshotWith(queue: QueuedMessage[]): ConversationSnapshot { return { - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue, running: true, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, } diff --git a/packages/client/ui-conversation/tests/skeleton.spec.tsx b/packages/client/ui-conversation/tests/skeleton.spec.tsx index 0d32e2edea..d00ba84718 100644 --- a/packages/client/ui-conversation/tests/skeleton.spec.tsx +++ b/packages/client/ui-conversation/tests/skeleton.spec.tsx @@ -47,7 +47,7 @@ const workspaceState = (items: readonly WorkspaceView[]): WorkspaceListState => function conversationSnapshot(overrides: Partial = {}): ConversationSnapshot { return { - sessionId: SID, nodes: [], foldDegraded: false, partial: null, runningCalls: [], codeDispatches: new Map(), + sessionId: SID, nodes: [], partial: null, runningCalls: [], codeDispatches: new Map(), pending: [], queue: [], running: false, composerPhase: 'active', removed: false, openState: 'open', openError: null, hasMore: false, loadingOlder: false, promptError: null, blank: false, lastAgentError: null, diff --git a/packages/client/ui-trajectory/src/client/layout.ts b/packages/client/ui-trajectory/src/client/layout.ts index 37c86f6eb4..d714a3b42f 100644 --- a/packages/client/ui-trajectory/src/client/layout.ts +++ b/packages/client/ui-trajectory/src/client/layout.ts @@ -110,8 +110,8 @@ export function deriveTrajectoryLayout(input: TrajectoryLayoutInput): readonly T lastAssistantTurn = node.turn continue } - if (node.kind === 'context') { - // No trajectory cell, but the surface still advances the duration cursor. + if (node.kind === 'context' || node.kind === 'compaction') { + // No trajectory cell, but transcript metadata still advances the duration cursor. prevAbsTime = finiteTime(node.time) ?? prevAbsTime continue } diff --git a/packages/client/ui-trajectory/src/client/spans.ts b/packages/client/ui-trajectory/src/client/spans.ts index 585a336333..de91e4382e 100644 --- a/packages/client/ui-trajectory/src/client/spans.ts +++ b/packages/client/ui-trajectory/src/client/spans.ts @@ -45,7 +45,7 @@ export interface SpanStats { * Fold snapshot nodes into per-turn spans. Only assistant nodes carry a turn * number; user/steering/context/tool nodes attach to the turn last seen in * sequence order (turn 0 collects the pre-assistant prologue). - * @param nodes - snapshot nodes in surface order. + * @param nodes - snapshot nodes in human transcript order. * @returns spans ordered by first appearance. */ export function deriveSpans(nodes: ConversationSnapshot['nodes']): readonly TurnSpan[] { diff --git a/packages/client/ui-trajectory/tests/layout.spec.tsx b/packages/client/ui-trajectory/tests/layout.spec.tsx index 5394d6ab09..c55a939808 100644 --- a/packages/client/ui-trajectory/tests/layout.spec.tsx +++ b/packages/client/ui-trajectory/tests/layout.spec.tsx @@ -176,7 +176,7 @@ describe('deriveTrajectoryLayout', () => { }) }) - it('advances the duration cursor over context nodes', () => { + it('advances the duration cursor over context and compaction nodes', () => { const nodes = [ { kind: 'user', seq: 1, time: 1_000, content: [{ type: 'text', text: 'hi' }], source: null }, { @@ -192,17 +192,21 @@ describe('deriveTrajectoryLayout', () => { kind: 'context', seq: 4, time: 9_000, content: [{ type: 'text', text: 'extra' }], source: null, }, + // A landed compaction renders no cell either, but is still a real log + // position, so it moves the cursor the same way a context row does. + { kind: 'compaction', seq: 5, time: 9_500, summary: 'checkpoint facts' }, { - kind: 'assistant', seq: 5, time: 10_000, turn: 1, step: 0, + kind: 'assistant', seq: 6, time: 10_000, turn: 1, step: 0, blocks: [{ kind: 'text', text: 'done' }], }, ] as unknown as ConversationSnapshot['nodes'] const turns = deriveTrajectoryLayout({ codeDispatches: new Map(), nodes, partial: null, runningCalls: [] }) - const message = turns[0]?.groups - .flatMap(g => g.cells) - .find(c => c.kind === 'message' && c.text === 'done') - // From context at 9s, not from the earlier user/tool surfaces. - expect(message?.timeSeconds).toBe(1) + const cells = turns[0]?.groups.flatMap(g => g.cells) ?? [] + const message = cells.find(c => c.kind === 'message' && c.text === 'done') + // From the compaction marker at 9.5s, not from context at 9s or the earlier surfaces. + expect(message?.timeSeconds).toBe(0.5) + // Neither the context row nor the marker contributed a cell. + expect(cells).toHaveLength(3) }) }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6dac9263d..1102cd603e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -956,6 +956,9 @@ importers: specifier: ~4.4.7 version: 4.4.7(@types/react@18.3.31)(immer@10.2.0)(react@18.3.1) devDependencies: + '@deepseek-ai/dsh-compact': + specifier: workspace:^ + version: link:../../compact/compact '@deepseek-ai/dsh-invariants': specifier: workspace:^ version: link:../../support/invariants diff --git a/tsconfig.client.json b/tsconfig.client.json index 5a52f59bb0..81681df038 100644 --- a/tsconfig.client.json +++ b/tsconfig.client.json @@ -36,6 +36,12 @@ // client-side Context merges keep it out of the host program. { "path": "./packages/host/directory-picker-native" }, { "path": "./packages/host/directory-picker-browse" }, + // Test-only leaf: the client-runtime drift trap for the compaction + // checkpoint source reads the seam's canonical const. It may appear HERE + // but never in a packages/client/* package project — dsh-compact's root + // reaches dsh-session's root, whose Context merge declares the host + // `sessions: SessionStore` and collides with the client's `ISessions`. + { "path": "./packages/compact/compact" }, { "path": "./packages/client/ui-slots" }, { "path": "./packages/client/ui-primitives" }, { "path": "./packages/client/web-react" }, From 91ee264e16ffda88d2b5b6975417cef24a9283b8 Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Thu, 30 Jul 2026 14:07:08 +0800 Subject: [PATCH 02/18] round 2: pin checkpoint recognition at compile time Move COMPACT_CHECKPOINT_SOURCE and isCompactCheckpointSource into a cordis-free src/checkpoint.ts leaf, re-exported from the root so every host-side consumer keeps its import. The client can then type-import the leaf without reaching dsh-session's root, whose Context merge declares the host sessions service and collides with the client's -- the dsh-commands/brand shape. Renaming the plugin id now fails the client typecheck. Also: keep recoverable summary text when a compact/summary mixes text with other block types, and capture the seeded-history provenance seqs from the pushes that produce them instead of deriving them by arithmetic. --- ...ranscript-log-ordered-projection.i18n.yaml | 4 +- ...0-web-transcript-log-ordered-projection.md | 20 +++-- ...eb-transcript-log-ordered-projection.zh.md | 20 +++-- apps/web/tests/seeded-history.e2e.ts | 85 +++++++++++-------- docs/cordis-catalog/services.md | 2 +- packages/client/runtime/README.i18n.yaml | 4 +- packages/client/runtime/README.md | 2 +- packages/client/runtime/README.zh.md | 2 +- .../src/client/sessions/conversation.ts | 9 +- .../src/client/sessions/transcript-adapter.ts | 39 +++++---- .../tests/compact-checkpoint-pin.spec.ts | 22 +++-- .../runtime/tests/transcript-adapter.spec.ts | 15 +++- packages/client/runtime/tsconfig.json | 3 + packages/compact/compact/README.i18n.yaml | 6 +- packages/compact/compact/README.md | 4 + packages/compact/compact/README.zh.md | 4 + packages/compact/compact/package.json | 5 ++ packages/compact/compact/src/checkpoint.ts | 27 ++++++ packages/compact/compact/src/index.ts | 17 +--- tsconfig.base.json | 1 + tsconfig.client.json | 14 +-- 21 files changed, 197 insertions(+), 108 deletions(-) create mode 100644 packages/compact/compact/src/checkpoint.ts diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml index 5f80a9b7c9..4c078446f1 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md -2026-07-30-web-transcript-log-ordered-projection.md: 22e687ebc0a323a28eb554a9ad36749a0b6f3da6 -2026-07-30-web-transcript-log-ordered-projection.zh.md: 97004f7384aed8f9e43b0949b2fcd4b8c185ca65 +2026-07-30-web-transcript-log-ordered-projection.md: 0c58373d58e08fbfe260f16f2104b3f7d1ccc3fd +2026-07-30-web-transcript-log-ordered-projection.zh.md: 49de0a9ecbbf2da92113f8ad63afe6478caedadd diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md index 22e687ebc0..0c58373d58 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md @@ -22,18 +22,24 @@ The marker's summary text comes from the checkpoint's own `compact/summary` prov No persisted event, RPC envelope, compaction transaction, or model-visible surface changed, and no migration is required. -## Recognizing a checkpoint: the local literal and its drift trap +## Recognizing a checkpoint: one declaration, pinned at compile time Recognition needs all three conditions, as in the terminal: `event.type === 'user/message'`, the compaction seam's checkpoint plugin source, **and** `isReplacementSurfaceEvent(event)`. A plugin-sourced `user/message` that *appends* is injected context — a session-reference card — not a compaction. -The client restates that plugin source as a local literal, because `dsh-compact` is unreachable from `packages/client/runtime`'s program in **both** directions: +What is unreachable from a `packages/client/*` program is `dsh-compact`'s **root**, not the package. The root reaches `dsh-session`'s root, whose cordis `Context` merge declares the host `sessions: SessionStore` against the client's `sessions: ISessions` — `TS2717`, the one-program-per-side rule in [development.md](../../../../docs/development.md#typescript-project-layout) — and that holds for a type-only import too, because the collision is a compiler fact rather than a bundler one. -- a **value** import fails the client purity gate (`packages/client/tsdown.client.ts`), and `dsh-compact`'s root value-imports cordis, so admitting it would pull `CompactService` into the browser bundle; -- a **type-only** import fails typecheck. `dsh-compact`'s root reaches `dsh-session`'s root, whose cordis `Context` merge declares the host `sessions: SessionStore` against this program's `sessions: ISessions` — `TS2717`, the one-program-per-side rule in [development.md](../../../../docs/development.md#typescript-project-layout). This was expected to work and does not; `import type` is erased before the *bundler* runs, but not before the *compiler* does, and the collision is a compiler fact. +The repo's answer to exactly this is a cordis-free leaf subpath, and this change adds one: `COMPACT_CHECKPOINT_SOURCE` and `isCompactCheckpointSource` now live in `packages/compact/compact/src/checkpoint.ts`, which imports no cordis and augments no module (the `dsh-commands/brand` / `dsh-llm/message` shape), and the root re-exports both so every host-side consumer — the terminal's chat helpers, `dsh-session-reference`'s projection — is unchanged. The adapter pins its literal to that declaration with a type-only import: -The drift protection therefore lives in a test, not in a type: `packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` runs in the client **test** program, which carries no such collision, and drives the adapter with a checkpoint built from the canonical `COMPACT_CHECKPOINT_SOURCE` itself. Renaming the seam's plugin fails there instead of silently deleting every compaction marker from the web transcript. `dsh-compact` is a `devDependency` of `dsh-client-runtime` and a reference of `tsconfig.client.json` only — never of a `packages/client/*` package project. +```ts +import type { COMPACT_CHECKPOINT_SOURCE } from '@deepseek-ai/dsh-compact/checkpoint' +const COMPACT_PLUGIN: typeof COMPACT_CHECKPOINT_SOURCE.plugin = 'compact' +``` -That is a deliberate divergence from the terminal, which value-imports `isCompactCheckpointSource` directly because no gate applies host-side. +Renaming the seam's plugin id is now a compile error in the client: `TS2322: Type '"compact"' is not assignable to type '"compaction"'`. The import must stay **type-only** — a value import of any `@deepseek-ai` package that is neither a platform module nor an inline-safe wire layer is rejected by the client purity gate (`packages/client/tsdown.client.ts`), whose own message records that type-only imports are erased and never reach it. A type-only leaf import needs both a `tsconfig.base.json` `paths` entry and `{"path": "../../compact/compact"}` in `packages/client/runtime/tsconfig.json` `references`: composite `rootDir` rules apply to erased imports as well, and without the reference the diagnostic is `TS6059`/`TS6307`. + +`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` stays as the behavioral half, driving the adapter with a checkpoint built from the canonical **value**. It runs in the client **test** program, which may value-import the root; a `packages/client/*` package program may not. + +The divergence from the terminal is therefore narrow: both frontends recognize a checkpoint from the same declaration — the terminal value-imports `isCompactCheckpointSource` host-side, where no gate applies, and the client pins the type. ## What #835's positional anchors were for, and why they are dissolved rather than lost @@ -41,7 +47,7 @@ The unmerged manual-compaction-queueing branch fixes the same interleaving bug b ## Alternatives considered -**Add `dsh-compact` to the client `INLINE_SAFE` allowlist** and move the predicate to a cordis-free subpath. Rejected: `INLINE_SAFE` matches on specifier *prefix*, so admitting the package admits its cordis-importing root too; the allowlist is a reviewer promise about client-facing subpaths, not a purity proof. It also needs a new export and a `files` fix, and it would not have helped — the blocking collision turned out to be in the compiler, which an allowlist does not touch. +**Value-import the predicate** from the new leaf and add `dsh-compact` to the client `INLINE_SAFE` allowlist. Rejected: the client needs the plugin id, not the predicate — a type is enough, and an erased import never reaches the purity gate, so nothing has to be admitted to it. The allowlist would only matter for a value import, and there it is a poor trade: `INLINE_SAFE` matches on specifier *prefix*, so admitting the package admits its cordis-importing root along with the leaf. **A bare shape rule** — any replacement `user/message` is a compaction. Rejected: correct today only because compaction is the sole producer of replacement `user/message`s, with nothing to catch it if that changes. The pinning spec costs one file and removes exactly that risk. diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md index 97004f7384..49de0a9ecb 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md @@ -22,18 +22,24 @@ surface 顺序还让另外两个问题成为结构性的。一次替换之后它 没有任何持久化事件、RPC 信封、压缩事务或模型可见 surface 发生变化,也不需要迁移。 -## 识别检查点:本地字面量与它的漂移陷阱 +## 识别检查点:同一份声明,在编译期钉住 识别需要三个条件同时成立,与终端一致:`event.type === 'user/message'`、压缩缝隙的检查点插件来源,**以及** `isReplacementSurfaceEvent(event)`。一条 append 的插件来源 `user/message` 是注入上下文——跨会话引用卡片——不是压缩。 -客户端把该插件来源重述为一个本地字面量,因为 `dsh-compact` 在**两个**方向上都无法从 `packages/client/runtime` 的程序到达: +从 `packages/client/*` 程序无法到达的是 `dsh-compact` 的**根部**,而不是这个包。根部会到达 `dsh-session` 的根部,后者的 cordis `Context` 合并声明了宿主侧 `sessions: SessionStore`,与客户端的 `sessions: ISessions` 冲突——`TS2717`,即 [development.md](../../../../docs/development.md#typescript-project-layout) 中每侧一个 program 的规则;这一点对仅类型导入同样成立,因为该冲突是编译器事实而非打包器事实。 -- **值**导入会失败于客户端纯度门禁(`packages/client/tsdown.client.ts`),而 `dsh-compact` 的根部会值导入 cordis,因此放行它就会把 `CompactService` 拉进浏览器产物; -- **仅类型**导入会失败于类型检查。`dsh-compact` 的根部会到达 `dsh-session` 的根部,后者的 cordis `Context` 合并声明了宿主侧 `sessions: SessionStore`,与本程序的 `sessions: ISessions` 冲突——`TS2717`,即 [development.md](../../../../docs/development.md#typescript-project-layout) 中每侧一个 program 的规则。这一点原本预期可行,实际不可行:`import type` 在**打包器**运行前被擦除,但不在**编译器**运行前被擦除,而该冲突是编译器事实。 +本仓库对这一情形的既有答案是不含 cordis 的叶子子路径,本次变更就新增了一个:`COMPACT_CHECKPOINT_SOURCE` 与 `isCompactCheckpointSource` 现在住在 `packages/compact/compact/src/checkpoint.ts`,它不导入 cordis、也不增强任何模块(即 `dsh-commands/brand` / `dsh-llm/message` 的形状),而包根重新导出两者,因此每个宿主侧消费方——终端的 chat helper、`dsh-session-reference` 的投影——都不需改动。适配器用仅类型导入把它的字面量钉在该声明上: -因此漂移保护住在一个测试里,而不是一个类型里:`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` 运行在客户端**测试**程序中——那里不存在这一冲突——并用由权威 `COMPACT_CHECKPOINT_SOURCE` 本身构造的检查点驱动适配器。重命名缝隙的插件会在那里失败,而不是无声地把每个压缩标记从 Web 记录中删除。`dsh-compact` 只是 `dsh-client-runtime` 的 `devDependency` 以及 `tsconfig.client.json` 的一条引用——绝不是任何 `packages/client/*` 包工程的引用。 +```ts +import type { COMPACT_CHECKPOINT_SOURCE } from '@deepseek-ai/dsh-compact/checkpoint' +const COMPACT_PLUGIN: typeof COMPACT_CHECKPOINT_SOURCE.plugin = 'compact' +``` -这是与终端的一次刻意分歧:终端直接值导入 `isCompactCheckpointSource`,因为宿主侧不适用任何门禁。 +重命名缝隙的插件 id 现在会在客户端产生编译错误:`TS2322: Type '"compact"' is not assignable to type '"compaction"'`。该导入必须保持**仅类型**——任何既非平台模块又非 inline-safe wire 层的 `@deepseek-ai` 包值导入都会被客户端纯度门禁(`packages/client/tsdown.client.ts`)拒绝,而它自己的报错信息就记录着仅类型导入会被擦除、永不抵达该门禁。仅类型的叶子导入同时需要 `tsconfig.base.json` 的一条 `paths` 条目和 `packages/client/runtime/tsconfig.json` `references` 中的 `{"path": "../../compact/compact"}`:composite 的 `rootDir` 规则同样适用于被擦除的导入,缺少该引用时的诊断是 `TS6059`/`TS6307`。 + +`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` 作为行为侧的另一半保留,用由权威**值**构造的检查点驱动适配器。它运行在客户端**测试**程序中,那里可以值导入包根;`packages/client/*` 包工程不可以。 + +因此与终端的分歧很窄:两个前端都从同一份声明识别检查点——终端在宿主侧值导入 `isCompactCheckpointSource`(那里不适用任何门禁),客户端钉住类型。 ## #835 的位置锚点是为什么而存在,以及为什么它是被溶解而非丢失 @@ -41,7 +47,7 @@ surface 顺序还让另外两个问题成为结构性的。一次替换之后它 ## Alternatives considered -**把 `dsh-compact` 加入客户端 `INLINE_SAFE` 白名单**,并把谓词搬到一个不含 cordis 的子路径。已拒绝:`INLINE_SAFE` 按标识符*前缀*匹配,因此放行该包也就放行了它那个会导入 cordis 的根部;该白名单是对面向客户端子路径的评审承诺,不是纯度证明。它还需要一个新导出与一处 `files` 修正,而且本来也帮不上忙——真正阻塞的冲突出在编译器,白名单碰不到那里。 +**从新叶子值导入该谓词**,并把 `dsh-compact` 加入客户端 `INLINE_SAFE` 白名单。已拒绝:客户端需要的是插件 id,不是谓词——一个类型就够了,而被擦除的导入根本不会抵达纯度门禁,因此无需向它放行任何东西。白名单只在值导入时才有意义,而在那里它是笔糟糕的交换:`INLINE_SAFE` 按标识符*前缀*匹配,因此放行该包会连它那个会导入 cordis 的根部一起放行。 **一条纯形状规则**——任何 replacement `user/message` 都是压缩。已拒绝:它今天正确只因为压缩是 replacement `user/message` 的唯一生产者,一旦这点改变便无任何机制能捕获。那个 pin 测试只花一个文件,就精确消除了这一风险。 diff --git a/apps/web/tests/seeded-history.e2e.ts b/apps/web/tests/seeded-history.e2e.ts index 30e824324b..f673f43631 100644 --- a/apps/web/tests/seeded-history.e2e.ts +++ b/apps/web/tests/seeded-history.e2e.ts @@ -43,6 +43,7 @@ function withCompaction(raw: string): string { seq: number time: number surfaceOp?: unknown + data?: { turn?: unknown } }) const surfaceSeqs = events .filter(event => event.surfaceOp === 'append' @@ -57,44 +58,56 @@ function withCompaction(raw: string): string { if (first === undefined || last === undefined || tail === undefined) { throw new Error('seeded-history compaction requires a non-empty closed surface') } + // The transaction opens the turn after the recording's last closed one; read + // it from the fixture so a re-recording with a different turn count stays + // valid instead of appending a duplicate turn number. + const lastTurn = events.filter(event => event.type === 'turn/end').at(-1)?.data?.turn + if (typeof lastTurn !== 'number') { + throw new Error('seeded-history compaction requires a recording ending on a closed turn') + } + const turn = lastTurn + 1 let seq = tail.seq + 1 let time = tail.time + 1 - const at = (event: Record): string => JSON.stringify({ ...event, seq: seq++, time: time++ }) - // The checkpoint's provenance names the two events appended before it. - const startSeq = seq + 1 - const summarySeq = seq + 2 - lines.push( - at({ type: 'turn/start', data: { turn: 2, trigger: { kind: 'injection', source: { kind: 'plugin', plugin: 'compact' } } } }), - at({ type: 'compact/start', data: { turn: 2 } }), - at({ - type: 'compact/summary', - data: { - summary: [{ - type: 'text', - text: '## Cold resume compact summary\n\n- The exact summary remains available.', - }], - shadowedRange: { start: first, end: last }, - shadowedSeqs: surfaceSeqs, - shadowedTokenCount: 10_000, - provider: 'snapshot', - model: 'snapshot-compactor', - }, - }), - at({ - type: 'user/message', - data: { - content: [{ - type: 'text', - text: 'Model-only compact checkpoint.', - }], - source: { kind: 'plugin', plugin: 'compact' }, - }, - surfaceOp: { op: 'replace', start: first, end: last }, - sourceEventSeqs: [startSeq, summarySeq, ...surfaceSeqs], - }), - at({ type: 'compact/end', data: { turn: 2 } }), - at({ type: 'turn/end', data: { turn: 2, reason: { kind: 'completed' } } }), - ) + /** + * Append one event at the next seq/time. + * @param event - the event body, without seq/time. + * @returns the seq it took, so provenance cites the push instead of arithmetic over the push order below. + */ + const at = (event: Record): number => { + const taken = seq++ + lines.push(JSON.stringify({ ...event, seq: taken, time: time++ })) + return taken + } + at({ type: 'turn/start', data: { turn, trigger: { kind: 'injection', source: { kind: 'plugin', plugin: 'compact' } } } }) + const startSeq = at({ type: 'compact/start', data: { turn } }) + const summarySeq = at({ + type: 'compact/summary', + data: { + summary: [{ + type: 'text', + text: '## Cold resume compact summary\n\n- The exact summary remains available.', + }], + shadowedRange: { start: first, end: last }, + shadowedSeqs: surfaceSeqs, + shadowedTokenCount: 10_000, + provider: 'snapshot', + model: 'snapshot-compactor', + }, + }) + at({ + type: 'user/message', + data: { + content: [{ + type: 'text', + text: 'Model-only compact checkpoint.', + }], + source: { kind: 'plugin', plugin: 'compact' }, + }, + surfaceOp: { op: 'replace', start: first, end: last }, + sourceEventSeqs: [startSeq, summarySeq, ...surfaceSeqs], + }) + at({ type: 'compact/end', data: { turn } }) + at({ type: 'turn/end', data: { turn, reason: { kind: 'completed' } } }) return `${lines.join('\n')}\n` } diff --git a/docs/cordis-catalog/services.md b/docs/cordis-catalog/services.md index 1f27744341..fe45b5b78b 100644 --- a/docs/cordis-catalog/services.md +++ b/docs/cordis-catalog/services.md @@ -486,7 +486,7 @@ abstract compactRegion( start: number, end: number, agent: CompactAgentContext, Types: [CompactionResult](../core-data-structures/compaction.md) · [CompactionTrigger](../core-data-structures/compaction.md) -Source: [`packages/compact/compact/src/index.ts:54`](../../packages/compact/compact/src/index.ts) +Source: [`packages/compact/compact/src/index.ts:45`](../../packages/compact/compact/src/index.ts) ## `ctx.directoryPicker` — `DirectoryPicker` (abstract seam) diff --git a/packages/client/runtime/README.i18n.yaml b/packages/client/runtime/README.i18n.yaml index ec2fb497e6..e70060f5ac 100644 --- a/packages/client/runtime/README.i18n.yaml +++ b/packages/client/runtime/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/runtime/README.md -README.md: 7bf8050ea988945bead491d02528906863b129a6 -README.zh.md: ff3c91dee956b2c65f0029c97c73d73f5a627b05 +README.md: 69576f1e23a34b83915d075c4120d04368c49f43 +README.zh.md: 7243a9119d9c669c76e8490bd271b2669568bff0 diff --git a/packages/client/runtime/README.md b/packages/client/runtime/README.md index 7bf8050ea9..69576f1e23 100644 --- a/packages/client/runtime/README.md +++ b/packages/client/runtime/README.md @@ -18,7 +18,7 @@ SlotsService gives the renderer separate bare observables for `useSessions` and ## The human transcript -`ConversationSnapshot.nodes` is the human transcript, not the model surface. `TranscriptAdapter` projects the raw window in log order — every append-origin surface event (`isAppendSurfaceEvent`) at its own log position, plus one `CompactionSummaryNode` marker per landed compaction checkpoint — and never consults surface order. A landed compaction therefore keeps the conversation it shadowed on the model side: the marker reports where the model stopped seeing that history instead of erasing it. Model-only replacement copies stay out: a pruned `tool/result` and a regenerated `assistant/message` rewrite one node for the model and mark no boundary. A checkpoint is a `user/message` carrying the compaction seam's plugin source that **replaced** a surface range; an appending plugin-sourced `user/message` is injected context, not a compaction. That source literal is restated locally because `dsh-compact` is unreachable from this program in both directions (the client purity gate rejects a value import; a type-only import collides the host `Context.sessions` merge) — `tests/compact-checkpoint-pin.spec.ts` is the drift trap. +`ConversationSnapshot.nodes` is the human transcript, not the model surface. `TranscriptAdapter` projects the raw window in log order — every append-origin surface event (`isAppendSurfaceEvent`) at its own log position, plus one `CompactionSummaryNode` marker per landed compaction checkpoint — and never consults surface order. A landed compaction therefore keeps the conversation it shadowed on the model side: the marker reports where the model stopped seeing that history instead of erasing it. Model-only replacement copies stay out: a pruned `tool/result` and a regenerated `assistant/message` rewrite one node for the model and mark no boundary. A checkpoint is a `user/message` carrying the compaction seam's plugin source that **replaced** a surface range; an appending plugin-sourced `user/message` is injected context, not a compaction. The adapter's plugin literal is pinned to the seam's own declaration by a type-only import of the cordis-free [`dsh-compact/checkpoint`](../../compact/compact/README.md) leaf, so renaming it there fails `tsc` here; a **value** import of the package would fail the client purity gate, and the package **root** is unreachable even as a type (it reaches `dsh-session`'s root, whose `Context` merge collides the host `sessions` with this program's). `tests/compact-checkpoint-pin.spec.ts` covers the same drift behaviorally. Because the projection is log-ordered, the node array is seq-monotonic by construction: log-only `command/run` / `command/done` nodes splice in by seq, `Session` merges interrupted frozen nodes by their fractional seqs, and a window whose checkpoint cites a shadowed range outside it renders the marker with nothing logged. The marker's summary text comes from the checkpoint's `compact/summary` provenance; a window cut that left the provenance outside makes the row non-expandable rather than empty, and a later page that supplies it resolves the text. Performance contract: one append materializes one node, an event that changes no node keeps the previous array reference (a chunk storm costs nothing), and unchanged nodes keep their object identity. diff --git a/packages/client/runtime/README.zh.md b/packages/client/runtime/README.zh.md index ff3c91dee9..7243a9119d 100644 --- a/packages/client/runtime/README.zh.md +++ b/packages/client/runtime/README.zh.md @@ -18,7 +18,7 @@ SlotsService 分别为 renderer 提供 `useSessions` 与 `useWorkspaces` 的裸 ## 人类对话记录 -`ConversationSnapshot.nodes` 是人类对话记录,不是模型 surface。`TranscriptAdapter` 按日志顺序投影原始窗口——每个 append 来源的 surface 事件(`isAppendSurfaceEvent`)落在它自己的日志位置上,外加每次落地的压缩检查点贡献一个 `CompactionSummaryNode` 标记——且从不查询 surface 顺序。于是一次落地的压缩会保留它在模型侧遮蔽掉的对话:标记报告模型从哪里开始看不见那段历史,而不是把它抹掉。仅模型可见的 replacement 副本不进入记录:被裁剪的 `tool/result` 和重新生成的 `assistant/message` 只为模型重写一个节点,不标记任何边界。检查点是携带压缩缝隙插件来源、且**替换**了一段 surface 范围的 `user/message`;一条 append 的插件来源 `user/message` 是注入上下文,不是压缩。该来源字面量在本地重述,因为 `dsh-compact` 在两个方向上都无法从本程序到达(客户端纯度门禁拒绝值导入;仅类型导入会与 host 的 `Context.sessions` 合并冲突)——`tests/compact-checkpoint-pin.spec.ts` 是漂移陷阱。 +`ConversationSnapshot.nodes` 是人类对话记录,不是模型 surface。`TranscriptAdapter` 按日志顺序投影原始窗口——每个 append 来源的 surface 事件(`isAppendSurfaceEvent`)落在它自己的日志位置上,外加每次落地的压缩检查点贡献一个 `CompactionSummaryNode` 标记——且从不查询 surface 顺序。于是一次落地的压缩会保留它在模型侧遮蔽掉的对话:标记报告模型从哪里开始看不见那段历史,而不是把它抹掉。仅模型可见的 replacement 副本不进入记录:被裁剪的 `tool/result` 和重新生成的 `assistant/message` 只为模型重写一个节点,不标记任何边界。检查点是携带压缩缝隙插件来源、且**替换**了一段 surface 范围的 `user/message`;一条 append 的插件来源 `user/message` 是注入上下文,不是压缩。适配器的插件字面量通过对无 cordis 的 [`dsh-compact/checkpoint`](../../compact/compact/README.md) 叶子做仅类型导入,钉在压缩缝隙自己的声明上:在那里改名会让此处 `tsc` 失败;而对该包做**值**导入会被客户端纯度门禁拒绝,包的**根**即便作为类型也无法到达(它会到达 `dsh-session` 的根,其 `Context` 合并会让 host 的 `sessions` 与本程序的冲突)。`tests/compact-checkpoint-pin.spec.ts` 从行为侧覆盖同一漂移。 由于投影按日志顺序,节点数组天然按 seq 单调:仅日志的 `command/run` / `command/done` 节点按 seq 插入,`Session` 按分数 seq 归并被打断的冻结节点,而检查点所引范围落在窗口之外的窗口会渲染出标记且不打印任何日志。标记的摘要文本来自检查点的 `compact/summary` 溯源;窗口切分把溯源留在窗口外时该行不可展开而非空白,后续补上溯源的分页会解析出文本。性能契约:一次追加物化一个节点,不改变任何节点的事件保持上一次的数组引用(分片风暴零成本),未变化的节点保持其对象标识。 diff --git a/packages/client/runtime/src/client/sessions/conversation.ts b/packages/client/runtime/src/client/sessions/conversation.ts index fc9a9d6bcd..0e98eb8ae5 100644 --- a/packages/client/runtime/src/client/sessions/conversation.ts +++ b/packages/client/runtime/src/client/sessions/conversation.ts @@ -129,7 +129,14 @@ export interface CompactionSummaryNode { summary: string | null } -/** Fallback for surface events this UI version does not know. */ +/** + * Fallback for surface events this UI version does not know: the documented + * default arm of `SessionEventMap`, which is merge-extensible, so the + * projection's switch cannot end in `assertNever`. No event produces this node + * today — `isAppendSurfaceEvent` admits only the four types in core's + * `SurfaceEventType`, and each has its own arm — and it exists so widening that + * set core-side degrades to a raw row instead of dropping the event silently. + */ export interface UnknownSurfaceNode { kind: 'unknown' seq: number diff --git a/packages/client/runtime/src/client/sessions/transcript-adapter.ts b/packages/client/runtime/src/client/sessions/transcript-adapter.ts index b79e6ee2fe..4985f263f4 100644 --- a/packages/client/runtime/src/client/sessions/transcript-adapter.ts +++ b/packages/client/runtime/src/client/sessions/transcript-adapter.ts @@ -12,25 +12,26 @@ import type { SessionEvent } from '@deepseek-ai/dsh-session/types' // browser bundle cannot resolve; surface.ts has no Node dependencies. import { isAppendSurfaceEvent, isReplacementSurfaceEvent } from '@deepseek-ai/dsh-session/surface' import type { CommandId } from '@deepseek-ai/dsh-commands/brand' +// Cordis-free leaf subpath (the dsh-commands/brand shape): the seam's own +// declaration of the checkpoint source, reachable as a TYPE from this program. +// The package ROOT is not — it reaches dsh-session's root, whose Context merge +// declares the HOST `sessions: SessionStore` against this program's +// `sessions: ISessions` (TS2717, the one-program-per-side rule in +// docs/development.md). +import type { COMPACT_CHECKPOINT_SOURCE } from '@deepseek-ai/dsh-compact/checkpoint' import type { ToolCallView, ToolEventView, ToolResultView } from '@deepseek-ai/dsh-client-connection/client' import type { CommandNode, CompactionSummaryNode, ConversationNode } from './conversation.ts' import { toAssistantBlocks } from './conversation.ts' /** - * The compaction seam's checkpoint plugin, restated locally. - * - * `dsh-compact` cannot be reached from this program in any form. A VALUE import - * fails the client purity gate (`packages/client/tsdown.client.ts`) and would - * pull the cordis `Service` base into the browser bundle; a TYPE-ONLY import of - * its `COMPACT_CHECKPOINT_SOURCE` fails typecheck, because `dsh-compact`'s root - * reaches `dsh-session`'s root, whose `Context` merge declares the HOST - * `sessions: SessionStore` against this program's `sessions: ISessions` - * (`TS2717` — the one-program-per-side rule in docs/development.md). The - * literal is pinned to the canonical const by - * `tests/compact-checkpoint-pin.spec.ts`, which runs in the client TEST program - * where that collision does not apply. + * The compaction seam's checkpoint plugin, pinned to the seam's own declaration + * at COMPILE time: renaming it there fails this annotation (`TS2322`). The + * import stays type-only because a value import would fail the client purity + * gate (`packages/client/tsdown.client.ts`) — cross-plugin value imports are + * forbidden in a browser bundle — while an erased type never reaches it. + * `tests/compact-checkpoint-pin.spec.ts` covers the same drift behaviorally. */ -const COMPACT_PLUGIN = 'compact' +const COMPACT_PLUGIN: typeof COMPACT_CHECKPOINT_SOURCE.plugin = 'compact' /** In-window tool/call index entry (result-card backfill + runningCalls material). */ export interface CallIndexEntry { @@ -126,14 +127,20 @@ function isTranscriptEvent(event: SessionEvent): boolean { return isAppendSurfaceEvent(event) || isCompactCheckpoint(event) } -/** Concatenated text of a `compact/summary` payload, or null when it carries no usable text. */ +/** + * Concatenated text of a `compact/summary` payload, or null when it carries no + * usable text. The payload is a `ContentBlock[]` whose union is + * merge-extensible, so a non-text block is skipped rather than discarding the + * text beside it; a payload with no text block at all falls to null through the + * empty check. + */ function compactSummaryText(event: SessionEvent): string | null { const summary = (event.data as unknown as { summary?: unknown }).summary - if (!Array.isArray(summary) || summary.length === 0) return null + if (!Array.isArray(summary)) return null let text = '' for (const block of summary as readonly unknown[]) { const candidate = block as { type?: unknown; text?: unknown } - if (candidate.type !== 'text' || typeof candidate.text !== 'string') return null + if (candidate.type !== 'text' || typeof candidate.text !== 'string') continue text += candidate.text } return text.trim() === '' ? null : text diff --git a/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts b/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts index c657ebd036..f7f345d931 100644 --- a/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts +++ b/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts @@ -1,17 +1,15 @@ /** - * Drift trap for the compaction-checkpoint recognition rule. + * Behavioral half of the compaction-checkpoint drift trap. * - * `TranscriptAdapter` restates the compaction seam's checkpoint source as a - * local literal because it cannot import `dsh-compact` in any form: a VALUE - * import fails the client purity gate, and a TYPE-ONLY import fails typecheck — - * `dsh-compact`'s root reaches `dsh-session`'s root, whose cordis `Context` - * merge declares the HOST `sessions: SessionStore` against the client program's - * `sessions: ISessions` (`TS2717`). This spec runs in the client TEST program, - * which does not carry that collision, and it is the only thing keeping the two - * implementations from drifting: it drives the adapter with a checkpoint built - * from the canonical `COMPACT_CHECKPOINT_SOURCE` itself, so renaming the seam's - * plugin fails HERE instead of silently deleting every compaction marker from - * the web transcript. + * `TranscriptAdapter` pins its plugin literal to the seam's own declaration at + * compile time through a type-only import of `dsh-compact/checkpoint`, so + * renaming the seam's plugin already fails `tsc`. This spec covers the same + * drift from the other side — end to end through the adapter, driving it with a + * checkpoint built from the canonical `COMPACT_CHECKPOINT_SOURCE` **value** and + * checking the seam's own predicate agrees. It runs in the client TEST program, + * which can value-import the package root; a `packages/client/*` package + * program cannot, because that root reaches `dsh-session`'s root and collides + * the host `Context.sessions` merge (`TS2717`). */ import { COMPACT_CHECKPOINT_SOURCE, isCompactCheckpointSource } from '@deepseek-ai/dsh-compact' diff --git a/packages/client/runtime/tests/transcript-adapter.spec.ts b/packages/client/runtime/tests/transcript-adapter.spec.ts index b53fcb0117..0c8aa9e12b 100644 --- a/packages/client/runtime/tests/transcript-adapter.spec.ts +++ b/packages/client/runtime/tests/transcript-adapter.spec.ts @@ -225,7 +225,7 @@ describe('TranscriptAdapter', () => { it.each([ ['absent provenance', undefined], - ['malformed summary blocks', compactSummary(1, [{ type: 'image', data: 'nope' }])], + ['text-less summary blocks', compactSummary(1, [{ type: 'image', data: 'nope' }])], ['a whitespace-only summary', compactSummary(1, [{ type: 'text', text: ' ' }])], ['an empty summary array', compactSummary(1, [])], ['a non-array summary', compactSummary(1, 'plain string')], @@ -240,6 +240,19 @@ describe('TranscriptAdapter', () => { ]) }) + it('keeps the text of a mixed-block summary, skipping the blocks it cannot render', () => { + // ContentBlock is merge-extensible and the payload type is ContentBlock[], + // so a non-text block must not discard recoverable text beside it. + const adapter = new TranscriptAdapter() + adapter.reset([ + compactSummary(1, [{ type: 'text', text: '可用摘要' }, { type: 'image', data: 'nope' }]), + checkpoint(2, 1, { start: 0, end: 0, sourceEventSeqs: [1, 0] }), + ]) + expect(adapter.nodes()).toEqual([ + { kind: 'compaction', seq: 2, time: 1_700_000_000_002, summary: '可用摘要' }, + ]) + }) + it('leaves the summary null when the checkpoint records no provenance at all', () => { const adapter = new TranscriptAdapter() adapter.reset([at(2, { diff --git a/packages/client/runtime/tsconfig.json b/packages/client/runtime/tsconfig.json index 7d3f05e6c7..d7968cce84 100644 --- a/packages/client/runtime/tsconfig.json +++ b/packages/client/runtime/tsconfig.json @@ -26,6 +26,9 @@ { "path": "../../ui/commands" }, + { + "path": "../../compact/compact" + }, { "path": "../../session-projection/session-projection" }, diff --git a/packages/compact/compact/README.i18n.yaml b/packages/compact/compact/README.i18n.yaml index 921ee62a6d..5996c3b801 100644 --- a/packages/compact/compact/README.i18n.yaml +++ b/packages/compact/compact/README.i18n.yaml @@ -1,6 +1,6 @@ # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: -# pnpm run verify-translation-pairing --write -README.md: 17a5420ae9fa23ce4021b4d4927ae5b95962f979 -README.zh.md: d98251649cfdcf6b12e89a192a43b08b0f071f38 +# pnpm run verify-translation-pairing --write packages/compact/compact/README.md +README.md: b6386e8fed9c10cf072683fbdf78c85fb8ac8866 +README.zh.md: b59e03ccf846e88d328dfecdd76a2a490a966a0e diff --git a/packages/compact/compact/README.md b/packages/compact/compact/README.md index 17a5420ae9..b6386e8fed 100644 --- a/packages/compact/compact/README.md +++ b/packages/compact/compact/README.md @@ -59,6 +59,10 @@ The `compact/*` events extend `SessionEventMap` (merge-extensible) via declarati Subclass `CompactService`, implement `compactIfNeeded` and `compactRegion`, and load the subclass as a plugin — it registers as `ctx.compact`. Every successful backend uses `COMPACT_CHECKPOINT_SOURCE` on its replacement user message; `isCompactCheckpointSource()` recognizes the marker after persistence or cloning without depending on backend identity. A template- or model-backed implementation can live as a sibling package without changing callers or the shared token meter. +## Recognizing a checkpoint outside the host program (`./checkpoint`) + +`COMPACT_CHECKPOINT_SOURCE` and `isCompactCheckpointSource()` are declared on the `@deepseek-ai/dsh-compact/checkpoint` subpath and re-exported from the root, so host-side consumers keep reading them from the root. The leaf imports no cordis and declares no module augmentation (the [`dsh-commands/brand`](../../ui/commands/README.md) shape), which is what lets a client or wire program name the checkpoint source: the package **root** cannot enter such a program at all, because it reaches `dsh-session`'s root and that `Context` merge declares the host `sessions` service against the client's own (`TS2717` — one program per side, per [development.md](../../../docs/development.md#typescript-project-layout)). The web client's transcript adapter pins its plugin literal to this leaf with a type-only import, so renaming the plugin id here is a compile error there. + ## Model Experience ### Conversation history, when a backend is invoked diff --git a/packages/compact/compact/README.zh.md b/packages/compact/compact/README.zh.md index d98251649c..b59e03ccf8 100644 --- a/packages/compact/compact/README.zh.md +++ b/packages/compact/compact/README.zh.md @@ -59,6 +59,10 @@ 继承 `CompactService`,实现 `compactIfNeeded` 与 `compactRegion`,再将子类作为插件加载:它会注册为 `ctx.compact`。每个成功后端都在替换 user 消息上使用 `COMPACT_CHECKPOINT_SOURCE`;`isCompactCheckpointSource()` 可在持久化或克隆后识别该标记,无需依赖后端身份。基于模板或模型的实现可以放在同级包中,不需更改调用方或共享 token meter。 +## 在 host 程序之外识别检查点(`./checkpoint`) + +`COMPACT_CHECKPOINT_SOURCE` 与 `isCompactCheckpointSource()` 声明在 `@deepseek-ai/dsh-compact/checkpoint` 子路径上,并由包根重新导出,因此 host 侧消费方仍从根读取它们。该叶子不导入 cordis、也不声明任何模块增强(即 [`dsh-commands/brand`](../../ui/commands/README.md) 的形状),这正是客户端或 wire 程序能够命名该检查点来源的原因:包的**根**根本无法进入这类程序,因为它会到达 `dsh-session` 的根,而那处 `Context` 合并会让 host 的 `sessions` 服务与客户端自己的冲突(`TS2717`——每侧一个程序,见 [development.md](../../../docs/development.md#typescript-project-layout))。Web 客户端的对话记录适配器用仅类型导入把它的插件字面量钉在该叶子上,因此在此处改插件 id 会让那边编译失败。 + ## 模型体验 ### 调用后端时的会话历史 diff --git a/packages/compact/compact/package.json b/packages/compact/compact/package.json index 135c688507..f0874990a3 100644 --- a/packages/compact/compact/package.json +++ b/packages/compact/compact/package.json @@ -15,12 +15,17 @@ "types": "./lib/types/invariant.d.ts", "default": "./lib/invariant.js" }, + "./checkpoint": { + "types": "./lib/types/checkpoint.d.ts", + "default": "./lib/types/checkpoint.js" + }, "./src/*": "./src/*", "./package.json": "./package.json" }, "files": [ "lib/index.js", "lib/invariant.js", + "lib/types/**/*.js", "lib/types/**/*.d.ts", "lib/types/**/*.d.ts.map", "src" diff --git a/packages/compact/compact/src/checkpoint.ts b/packages/compact/compact/src/checkpoint.ts new file mode 100644 index 0000000000..9d8b98e4d6 --- /dev/null +++ b/packages/compact/compact/src/checkpoint.ts @@ -0,0 +1,27 @@ +/** + * The compaction seam's canonical checkpoint source: the plugin marker every + * backend stamps on the replacement user message that lands a checkpoint, plus + * the predicate that recognizes it. + * + * The seam itself lives in `@deepseek-ai/dsh-compact`, which re-exports both of + * these; this module is a pure value/predicate outlet (no cordis imports, no + * module augmentation) so client and wire programs can name the checkpoint + * source without loading the host plugin's Context merges — the + * `dsh-commands/brand` shape. + * + * @module @deepseek-ai/dsh-compact/checkpoint + */ + +import type { MessageSource } from '@deepseek-ai/dsh-llm/message' + +/** Canonical source for the replacement user message produced by every compaction backend. */ +export const COMPACT_CHECKPOINT_SOURCE = Object.freeze({ kind: 'plugin', plugin: 'compact' } as const) + +/** + * Test whether a persisted message source identifies a compaction checkpoint. + * @param source - source restored from a surface user message. + * @returns whether the source carries the backend-independent checkpoint marker. + */ +export function isCompactCheckpointSource(source: MessageSource): boolean { + return source.kind === 'plugin' && source.plugin === COMPACT_CHECKPOINT_SOURCE.plugin +} diff --git a/packages/compact/compact/src/index.ts b/packages/compact/compact/src/index.ts index 2988a0b780..dd105ca5fb 100644 --- a/packages/compact/compact/src/index.ts +++ b/packages/compact/compact/src/index.ts @@ -8,24 +8,15 @@ */ import { Context, Service } from 'cordis' -import type { MessageSource } from '@deepseek-ai/dsh-llm' import type { Session } from '@deepseek-ai/dsh-session' import type { CompactionResult } from './types.ts' export type { CompactionResult } from './types.ts' export { toolPairingBalancedAfter, toolPairingBalancedBefore } from './tool-pairing.ts' - -/** Canonical source for the replacement user message produced by every compaction backend. */ -export const COMPACT_CHECKPOINT_SOURCE = Object.freeze({ kind: 'plugin', plugin: 'compact' } as const) - -/** - * Test whether a persisted message source identifies a compaction checkpoint. - * @param source - source restored from a surface user message. - * @returns whether the source carries the backend-independent checkpoint marker. - */ -export function isCompactCheckpointSource(source: MessageSource): boolean { - return source.kind === 'plugin' && source.plugin === COMPACT_CHECKPOINT_SOURCE.plugin -} +// The checkpoint source and its predicate are declared on the cordis-free +// `./checkpoint` leaf so client and wire programs can name them without this +// root's Context merge; the root stays the host-side entry point for both. +export { COMPACT_CHECKPOINT_SOURCE, isCompactCheckpointSource } from './checkpoint.ts' /** Why automatic policy is asking a backend to consider compaction. */ export type CompactionTrigger = 'pressure' | 'context-overflow' diff --git a/tsconfig.base.json b/tsconfig.base.json index 00c19c4b8c..a8dd18d660 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -54,6 +54,7 @@ "@deepseek-ai/dsh-llm/brand": ["./packages/llm/llm/src/brand.ts"], "@deepseek-ai/dsh-llm/message": ["./packages/llm/llm/src/message.ts"], "@deepseek-ai/dsh-commands/brand": ["./packages/ui/commands/src/brand.ts"], + "@deepseek-ai/dsh-compact/checkpoint": ["./packages/compact/compact/src/checkpoint.ts"], "@deepseek-ai/dsh-tools/presentation": ["./packages/core/tools/src/presentation.ts"], "@deepseek-ai/dsh-user-approval/types": ["./packages/ui/user-approval/src/types.ts"], "@deepseek-ai/dsh-user-interaction/types": ["./packages/ui/user-interaction/src/types.ts"], diff --git a/tsconfig.client.json b/tsconfig.client.json index 81681df038..43f1d635ba 100644 --- a/tsconfig.client.json +++ b/tsconfig.client.json @@ -36,11 +36,15 @@ // client-side Context merges keep it out of the host program. { "path": "./packages/host/directory-picker-native" }, { "path": "./packages/host/directory-picker-browse" }, - // Test-only leaf: the client-runtime drift trap for the compaction - // checkpoint source reads the seam's canonical const. It may appear HERE - // but never in a packages/client/* package project — dsh-compact's root - // reaches dsh-session's root, whose Context merge declares the host - // `sessions: SessionStore` and collides with the client's `ISessions`. + // Compaction seam: the client-runtime drift trap value-imports the seam's + // canonical checkpoint const from the package ROOT, which may be reached + // from this TEST program but never from a packages/client/* package + // program — the root reaches dsh-session's root, whose Context merge + // declares the host `sessions: SessionStore` and collides with the + // client's `ISessions`. Package programs use the cordis-free + // dsh-compact/checkpoint leaf instead (a type-only import in + // transcript-adapter.ts), which needs this reference on the runtime + // package project itself. { "path": "./packages/compact/compact" }, { "path": "./packages/client/ui-slots" }, { "path": "./packages/client/ui-primitives" }, From da41677049e0530a696ac335fb359e5d4117a4b8 Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Thu, 30 Jul 2026 17:10:45 +0800 Subject: [PATCH 03/18] fix(web): address transcript review follow-ups --- ...6-07-19-gui-web-client-architecture.i18n.yaml | 4 ++-- .../2026-07-19-gui-web-client-architecture.md | 2 +- .../2026-07-19-gui-web-client-architecture.zh.md | 4 ++-- .../2026-07-20-gui-testing-system.i18n.yaml | 4 ++-- .../process/2026-07-20-gui-testing-system.md | 2 +- .../process/2026-07-20-gui-testing-system.zh.md | 2 +- apps/web/tests/seeded-history.e2e.ts | 2 +- docs/core-data-structures/compaction.i18n.yaml | 4 ++-- docs/core-data-structures/compaction.md | 2 +- docs/core-data-structures/compaction.zh.md | 2 +- packages/client/runtime/README.i18n.yaml | 4 ++-- packages/client/runtime/README.md | 2 +- packages/client/runtime/README.zh.md | 2 +- packages/client/runtime/package.json | 2 +- .../src/client/sessions/transcript-adapter.ts | 16 ++++++---------- .../runtime/tests/compact-checkpoint-pin.spec.ts | 13 ++++++------- .../runtime/tests/transcript-adapter.spec.ts | 12 +----------- packages/client/test-runtime/README.i18n.yaml | 4 ++-- packages/client/test-runtime/README.md | 2 +- packages/client/test-runtime/README.zh.md | 2 +- packages/client/ui-conversation/README.i18n.yaml | 4 ++-- packages/client/ui-conversation/README.md | 3 +++ packages/client/ui-conversation/README.zh.md | 3 +++ pnpm-lock.yaml | 6 +++--- 24 files changed, 47 insertions(+), 56 deletions(-) diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml index 6e1b952682..4530d5ee57 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md -2026-07-19-gui-web-client-architecture.md: abe28b00638b4f01c7a50efe9ece5148e959a5ee -2026-07-19-gui-web-client-architecture.zh.md: 560015191fd8d99e2983a19d0b23aeb4dedff837 +2026-07-19-gui-web-client-architecture.md: 63b6f5795c3d49f25cd964cf04a0c9d41a667bfb +2026-07-19-gui-web-client-architecture.zh.md: 2d57c12ebae38aafa4e606da95af954990761b3c diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md index abe28b0063..63b6f5795c 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md @@ -69,7 +69,7 @@ Notifier 微任务合批 ──► ConversationSnapshot 缓存 ──uSES── ``` - **Session** (session.ts): lazily built, resident — once created it keeps eating frames in the background, so switching away and back renders instantly. Operations: `prompt`/`cancel` (RPC passthrough; failures land in the snapshot's `promptError`), `open` (pull the tail history page, idempotent), `loadOlder` (upward paging, reentry-guarded), `resync` (reconnect = clear the window and rerun open). Subscription: `subscribe`/`getSnapshot` (always the cached reference) — `implements ObservableSnapshot`, with `useSelector = bindSnapshotSelector(this)` attached at construction, so a Session is directly a uSES source. Frame dispatch is one switch: `session/event` frames dedup by seq (the only dedup key), buffer while open is in flight, otherwise append + incremental projection; open/stitch merges the live buffer by seq and backfills once if `subscribed.lastSeq` outruns the window tail. -- **ConversationSnapshot** (conversation.ts): the immutable snapshot contract — `nodes` (the human transcript, log-ordered), `partial`, `runningCalls`, `pending`, `running`, `removed`, `openState`, `hasMore`, `promptError` and kin. **Reference discipline** (the premise of memo and uSES): the top-level object is fresh on every change; the nodes array is rebuilt but element references come from the cache; unchanged substructures reuse the previous snapshot's references. +- **ConversationSnapshot** (conversation.ts): the immutable snapshot contract — `nodes` (the human transcript, log-ordered), `partial`, `runningCalls`, `pending`, `running`, `removed`, `openState`, `hasMore`, `promptError` and kin. **Reference discipline** (the premise of memo and uSES): the top-level object is fresh on every change; an unchanged nodes projection keeps the same array reference, while a changed flow returns a new array that reuses unchanged element references; unchanged substructures reuse the previous snapshot's references. - **SessionManager** (manager.ts): instance cluster + frame entry + the session list. sessionId-bearing frames go only to existing instances (a mux broadcast must not instantiate every session); approval/question `requested` frames are the exception — they never land in history, so they buffer in `pendingBuffers` and replay on instantiation. - **Notifier** (notifier.ts): two channels chosen by change source. `markDirty()` (default; frame-driven changes always) batches per microtask — N changes, one notification, one re-render; the flush rebuilds the snapshot cache before notifying. `notifyNow()` (only direct echoes of user gestures) rebuilds and notifies in the same tick — controlled inputs roll the DOM back and jump the caret if their echo defers to a microtask. Frame-driven code using notifyNow collapses batching back to per-frame renders; banned. - **TranscriptAdapter / PartialAccumulator**: the transcript is the append-origin surface projected in log order (`isAppendSurfaceEvent` from `@deepseek-ai/dsh-session/surface`) plus one marker per landed compaction checkpoint — never the model surface, which shadows replaced ranges and would erase conversation the reader already saw. Node order is seq-monotonic by construction, so there is no core `seq === index` assertion to satisfy and no degradation branch. Chunks contribute no node (O(1) skip): the accumulator folds StreamChunks into `AssistantBlock[]`, a delta swapping only that block's reference, and the finalizing message discards the accumulator in the same batch (no flicker on promotion). Cost model: one chunk = one string concatenation + a dirty mark; an unsubscribed Session under a frame storm costs only the mark. diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md index 560015191f..2d57c12eba 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.zh.md @@ -68,8 +68,8 @@ Session.handleMuxEnvelope ──► events 窗口(seq 连续升序) Notifier 微任务合批 ──► ConversationSnapshot 缓存 ──uSES──► 组件 ``` -- **Session**(session.ts):懒建、常驻——建成后在后台持续吃帧,切走切回秒显。操作面:`prompt`/`cancel`(RPC 透传;失败落进快照的 `promptError`)、`open`(拉尾页 history,幂等)、`loadOlder`(向上翻页,防重入)、`resync`(重连 = 清窗口重跑 open)。订阅面:`subscribe`/`getSnapshot`(恒返缓存引用)——`implements ObservableSnapshot`,构造时挂 `useSelector = bindSnapshotSelector(this)`,Session 本身就是 uSES 源。帧分发是一个 switch:`session/event` 帧按 seq 去重(唯一去重键),open 在途时缓冲,否则追加 + 增量 fold;open/缝合按 seq 合并 live 缓冲并去重,`subscribed.lastSeq` 超出窗口尾则回补一次。 -- **ConversationSnapshot**(conversation.ts):不可变快照契约——`nodes`(人类对话记录,日志序)、`partial`、`runningCalls`、`pending`、`running`、`removed`、`openState`、`hasMore`、`promptError` 等。**引用纪律**(memo 与 uSES 的前提):顶层对象每变必新;nodes 数组重建但元素引用来自缓存;未变的子结构复用上一快照的引用。 +- **Session**(session.ts):懒建、常驻——建成后在后台持续吃帧,切走切回秒显。操作面:`prompt`/`cancel`(RPC 透传;失败落进快照的 `promptError`)、`open`(拉尾页 history,幂等)、`loadOlder`(向上翻页,防重入)、`resync`(重连 = 清窗口重跑 open)。订阅面:`subscribe`/`getSnapshot`(恒返缓存引用)——`implements ObservableSnapshot`,构造时挂 `useSelector = bindSnapshotSelector(this)`,Session 本身就是 uSES 源。帧分发是一个 switch:`session/event` 帧按 seq 去重(唯一去重键),open 在途时缓冲,否则追加 + 增量投影;open/缝合按 seq 合并 live 缓冲并去重,`subscribed.lastSeq` 超出窗口尾则回补一次。 +- **ConversationSnapshot**(conversation.ts):不可变快照契约——`nodes`(人类对话记录,日志序)、`partial`、`runningCalls`、`pending`、`running`、`removed`、`openState`、`hasMore`、`promptError` 等。**引用纪律**(memo 与 uSES 的前提):顶层对象每变必新;未变化的 nodes 投影保持同一数组引用,消息流变化时返回新数组并复用未变化的元素引用;未变的子结构复用上一快照的引用。 - **SessionManager**(manager.ts):实例簇 + 帧总入口 + 会话列表。带 sessionId 的帧只投已存在实例(mux 广播不得把每个会话都实例化);例外是审批/问答 `requested` 帧——它们不落 history、open 无法回补,故缓冲进 `pendingBuffers`,实例化时回放。 - **Notifier**(notifier.ts):两条通知通道,按变更来源取用。`markDirty()`(默认;帧驱动一律用它)按微任务合批——N 次变更、一次通知、一次重渲染;flush 先重建快照缓存再通知。`notifyNow()`(仅用户手势的直接回响)同 tick 重建并通知——受控输入的回响若延到微任务,DOM 会回滚、光标跳尾。帧驱动代码用 notifyNow 会让合批塌回逐帧渲染;禁。 - **TranscriptAdapter / PartialAccumulator**:对话记录是按日志顺序投影的 append 来源 surface(`@deepseek-ai/dsh-session/surface` 的 `isAppendSurfaceEvent`),外加每次落地的压缩检查点一个标记——绝不用模型 surface,后者遮蔽被替换的范围,会抹掉读者已经看过的对话。节点顺序天然按 seq 单调,因此既无核心 `seq === index` 断言需要满足,也没有降级分支。分片不贡献任何节点(O(1) 跳过):累积器把 StreamChunk 折叠成 `AssistantBlock[]`,一次增量只换该块引用;定稿消息到达即在同一批内弃掉累积器(提升无闪烁)。成本模型:一个分片 = 一次字符串拼接 + 一个脏标记;帧风暴下未订阅的 Session 只花那个标记。 diff --git a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml index 05d448c79b..deafb47f70 100644 --- a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/process/2026-07-20-gui-testing-system.md -2026-07-20-gui-testing-system.md: 8c6dafb18fc207fc4eac780ba18e108267bc28b1 -2026-07-20-gui-testing-system.zh.md: 9a0de4bfa8fa2f8de55beef53bedde51649c5d9c +2026-07-20-gui-testing-system.md: 4a1600bbef7ef795677a446228fcc279a4b53f39 +2026-07-20-gui-testing-system.zh.md: 2aa5d7f66783c69964cabf7eb18a018b54528a33 diff --git a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.md b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.md index 8c6dafb18f..4a1600bbef 100644 --- a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.md +++ b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.md @@ -22,7 +22,7 @@ Cut along the architecture's natural test seams into three tiers, bottom-up: | 2 Object-layer orchestration | `Session`/`SessionManager`/`ConnectionController` (state machines and timing: stitching / dedup / paging / optimistic draft clearing / pendingBuffers / reconnect / backoff) | **The "event sequence in → snapshot out" golden path**: programmable fakes + deferreds controlling timing + fake timers controlling backoff | `packages/client/{runtime,connection}/tests/` | | 3 Assembled presentation | Built artifacts × the real client loader and plugin composition | App-owned semantic snapshots boot all eight built client plugins under jsdom for deterministic cross-plugin state changes; bare Playwright smoke separately proves the real browser/carrier boundary, with real-host cases self-skipping without a key; the keyless browser e2e lane disables the shipped model-adapter row and replays recorded session fixtures through `dsh-llm-replay` in the real in-process web assembly against conversation aria goldens ([web e2e lane](../testing/2026-07-24-web-gui-browser-e2e-lane.md), [required CI gate](../testing/2026-07-30-web-browser-snapshot-ci-gate.md)) | `apps/web/tests/*.snapshot.ts`, `apps/web/tests/smoke-{fixture,real}.e2e.ts`, `apps/web/tests/{replay-round-trip,seeded-history}.e2e.ts` | -Inter-tier discipline: **each tier tests its own layer, upper tiers never re-test lower ones** — an app semantic snapshot pins only user-visible projection across the assembled plugin boundary, while Playwright smoke proves browser and carrier liveness; wire semantics belong to tier 1 and data semantics to tier 2. Pure-function layers (lineage/partial/notifier/fold-adapter) are tested directly with zero fakes in the same package's tests/ alongside tier 2. +Inter-tier discipline: **each tier tests its own layer, upper tiers never re-test lower ones** — an app semantic snapshot pins only user-visible projection across the assembled plugin boundary, while Playwright smoke proves browser and carrier liveness; wire semantics belong to tier 1 and data semantics to tier 2. Pure-function layers (lineage/partial/notifier/transcript-adapter) are tested directly with zero fakes in the same package's tests/ alongside tier 2. - **Host and client source** are under the repo-wide per-file 100% coverage gate except the narrow browser-grade exclusions annotated in `vitest.config.ts`; component suites use per-file jsdom pragmas and Testing Library without changing Node suites. - **App-owned semantic snapshots** read built client bundles, execute them through the real loader, and drive only deterministic fixture hooks. They own stable visible state such as sidebar labels, breadcrumbs, and `document.title`, not CSS pixels or lower-layer state-machine details. diff --git a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.zh.md b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.zh.md index 9a0de4bfa8..2aa5d7f667 100644 --- a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.zh.md +++ b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.zh.md @@ -22,7 +22,7 @@ GUI 栈需要考虑多种应用形态,同应用形态内的不同运行环境 | 2 对象层编排 | `Session`/`SessionManager`/`ConnectionController`(状态机与时序:缝合/去重/翻页/乐观清稿/pendingBuffers/重连/退避) | **「事件序列进→快照出」黄金路径**:可编程假体 + deferred 控时序 + fake timers 控退避 | `packages/client/{runtime,connection}/tests/` | | 3 组装呈现层 | 构建产物 × 真实 client loader 与插件组合 | 归应用所有的语义快照会在 jsdom 下启动全部 8 个已构建的 client 插件,以固定确定性的跨插件状态变化;独立使用 Playwright 裸库的冒烟测试负责验证真实浏览器/承载层边界,真 host 用例在无密钥时自行跳过;无密钥浏览器 e2e 车道会禁用交付配置中的模型适配器行,并通过 `dsh-llm-replay` 在真实进程内 web 组装中回放录制的会话 fixture,与会话区 aria 期望输出比对([web e2e 车道](../testing/2026-07-24-web-gui-browser-e2e-lane.md)、[必需 CI 门禁](../testing/2026-07-30-web-browser-snapshot-ci-gate.md)) | `apps/web/tests/*.snapshot.ts`、`apps/web/tests/smoke-{fixture,real}.e2e.ts`、`apps/web/tests/{replay-round-trip,seeded-history}.e2e.ts` | -层间纪律:**下层各测各的,上层不重测下层**:应用语义快照只固定组装后插件边界上的用户可见投影,Playwright 冒烟测试负责验证浏览器与承载层是否存活;wire 语义归 1 层,数据语义归 2 层。纯函数层(lineage/partial/notifier/fold-adapter)随 2 层同包 tests/ 零假体直测。 +层间纪律:**下层各测各的,上层不重测下层**:应用语义快照只固定组装后插件边界上的用户可见投影,Playwright 冒烟测试负责验证浏览器与承载层是否存活;wire 语义归 1 层,数据语义归 2 层。纯函数层(lineage/partial/notifier/transcript-adapter)随 2 层同包 tests/ 零假体直测。 - **host 与 client 源码**均纳入全仓 per-file 100% 覆盖率门禁,仅排除 `vitest.config.ts` 中带注释的少量浏览器级例外;组件套件通过逐文件 jsdom pragma 和 Testing Library 运行,不会改变 Node 套件。 - **归应用所有的语义快照**读取已构建的 client bundle,通过真实 loader 执行它们,并且只驱动确定性的 fixture 钩子。它们负责固定侧边栏标签、面包屑和 `document.title` 等稳定可见状态,而不固定 CSS 像素或下层状态机细节。 diff --git a/apps/web/tests/seeded-history.e2e.ts b/apps/web/tests/seeded-history.e2e.ts index 485c2bc05b..fb3b266625 100644 --- a/apps/web/tests/seeded-history.e2e.ts +++ b/apps/web/tests/seeded-history.e2e.ts @@ -246,7 +246,7 @@ describe('web e2e: seeded history renders through cold resume', () => { timeout: 5_000, }).toBe(1) expect(await page.getByText('The exact summary remains available.', { exact: false }).count()).toBeGreaterThan(0) - // Collapse again so the aria golden captured after this case is unaffected. + // Restore the shared page state for any later case. await marker.click() await expect.poll(() => marker.getAttribute('aria-expanded'), { timeout: 5_000 }).toBe('false') }) diff --git a/docs/core-data-structures/compaction.i18n.yaml b/docs/core-data-structures/compaction.i18n.yaml index 89783b5d16..a933e793c4 100644 --- a/docs/core-data-structures/compaction.i18n.yaml +++ b/docs/core-data-structures/compaction.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write docs/core-data-structures/compaction.md -compaction.md: 911b71d00fa4b42e9cdfa67f67d4e9b29e354a4a -compaction.zh.md: 643a116ff2edbbb53d300b4f5ff0ad36d401130b +compaction.md: 3ae4d7e50452b549654b7a7162141a4be505d784 +compaction.zh.md: 448c3aaf298b65ebe88565190c5b3978b975f5f3 diff --git a/docs/core-data-structures/compaction.md b/docs/core-data-structures/compaction.md index 911b71d00f..3ae4d7e504 100644 --- a/docs/core-data-structures/compaction.md +++ b/docs/core-data-structures/compaction.md @@ -60,7 +60,7 @@ Automatic callers state why policy is running; implementations may treat confirm type CompactionTrigger = 'pressure' | 'context-overflow' ``` -`CompactService` exposes `compactIfNeeded(agent, trigger, signal)` for automatic `pressure` or `context-overflow` policy, returning `null` when no safe work exists, and `compactRegion(...)` for an explicit inclusive surface range. Every backend marks its replacement `user/message` with the package-exported `COMPACT_CHECKPOINT_SOURCE`; consumers call `isCompactCheckpointSource()` instead of coupling checkpoint recognition to one backend. Implementations must forward the supplied signal to summarization. The seam owns no pricing API: the singleton [`ctx.tokenMeter`](token-meter.md) directly owns estimation and replay, while `dsh-compact-basic` owns retention, event sequencing, routed summarization calls, and their configuration. +`CompactService` exposes `compactIfNeeded(agent, trigger, signal)` for automatic `pressure` or `context-overflow` policy, returning `null` when no safe work exists, and `compactRegion(...)` for an explicit inclusive surface range. Every backend marks its replacement `user/message` with `COMPACT_CHECKPOINT_SOURCE`; client and wire consumers import that value and `isCompactCheckpointSource()` from the cordis-free `@deepseek-ai/dsh-compact/checkpoint` subpath, while the package root re-exports both for host consumers. Implementations must forward the supplied signal to summarization. The seam owns no pricing API: the singleton [`ctx.tokenMeter`](token-meter.md) directly owns estimation and replay, while `dsh-compact-basic` owns retention, event sequencing, routed summarization calls, and their configuration. Pressure compaction runs at serial `agent/step` before request derivation. Once pressure or canonical overflow qualifies, compact-basic invokes optional [`ctx.toolResultPrune`](../../packages/compact/compact-tool-result-prune/README.md) before range selection, remeasures through `ctx.tokenMeter`, and can advance the surface without a summary. Failed-request recovery runs through `agent/request-error` after the failed step closes and returns a retry action only when the surface replacement generation advances, even if later summary work throws after pruning; cancellation still wins. Region boundaries preserve tool-call/result pairing but not whole turns, allowing early closed steps of one oversized turn to compact. `dsh-compact-basic` owns thresholds, retained-tail policy, overflow caps, and failure handling. diff --git a/docs/core-data-structures/compaction.zh.md b/docs/core-data-structures/compaction.zh.md index 643a116ff2..448c3aaf29 100644 --- a/docs/core-data-structures/compaction.zh.md +++ b/docs/core-data-structures/compaction.zh.md @@ -60,7 +60,7 @@ interface CompactionResult { type CompactionTrigger = 'pressure' | 'context-overflow' ``` -`CompactService` 暴露 `compactIfNeeded(agent, trigger, signal)` 以执行自动 `pressure` 或 `context-overflow` 策略;没有可安全执行的工作时返回 `null`。它还针对显式、两端均包含的 surface 范围暴露 `compactRegion(...)`。每个后端都使用包导出的 `COMPACT_CHECKPOINT_SOURCE` 标记其替换用的 `user/message`;消费方调用 `isCompactCheckpointSource()`,而不是把检查点识别逻辑耦合到某一个后端。实现必须把传入的 signal 转发给摘要流程。该 seam 不拥有计价 API:单例 [`ctx.tokenMeter`](token-meter.md) 直接拥有估算与回放,而 `dsh-compact-basic` 拥有保留策略、事件排序、按路由执行的摘要调用及其配置。 +`CompactService` 暴露 `compactIfNeeded(agent, trigger, signal)` 以执行自动 `pressure` 或 `context-overflow` 策略;没有可安全执行的工作时返回 `null`。它还针对显式、两端均包含的 surface 范围暴露 `compactRegion(...)`。每个后端都使用 `COMPACT_CHECKPOINT_SOURCE` 标记其替换用的 `user/message`;client 与 wire 消费方从无 cordis 的 `@deepseek-ai/dsh-compact/checkpoint` 子路径导入该值和 `isCompactCheckpointSource()`,包根则为 host 消费方重新导出两者。实现必须把传入的 signal 转发给摘要流程。该 seam 不拥有计价 API:单例 [`ctx.tokenMeter`](token-meter.md) 直接拥有估算与回放,而 `dsh-compact-basic` 拥有保留策略、事件排序、按路由执行的摘要调用及其配置。 压力压缩在串行 `agent/step` 中运行,先于请求推导。一旦压力或规范化溢出满足条件,compact-basic 会在选择范围前调用可选的 [`ctx.toolResultPrune`](../../packages/compact/compact-tool-result-prune/README.md),再通过 `ctx.tokenMeter` 重新测量,并且可以在不生成摘要的情况下推进 surface。失败请求的恢复在失败的步骤关闭后通过 `agent/request-error` 运行;仅当 surface replacement generation 前进时才返回重试动作,即便后续摘要工作在剪枝后抛异常亦如此;取消仍然优先。区域边界保持工具调用/结果配对,但不保持整个轮次,因此一个过大轮次中较早关闭的步骤可以被压缩。`dsh-compact-basic` 拥有阈值、保留尾部策略、溢出上限与失败处理。 diff --git a/packages/client/runtime/README.i18n.yaml b/packages/client/runtime/README.i18n.yaml index 483d34e8d3..3b19ab54c4 100644 --- a/packages/client/runtime/README.i18n.yaml +++ b/packages/client/runtime/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/runtime/README.md -README.md: 51e13d2c68dce3c0c12e04ad0940af8a1e76a4bc -README.zh.md: 9cebc6e7489da65d18d6b308a4991aad06fc1193 +README.md: 63876e2f2c762c5eeff95e065338413017e0a333 +README.zh.md: efa5e841efad1e5ce0f8c3af63eba00bcae1a363 diff --git a/packages/client/runtime/README.md b/packages/client/runtime/README.md index 51e13d2c68..63876e2f2c 100644 --- a/packages/client/runtime/README.md +++ b/packages/client/runtime/README.md @@ -24,7 +24,7 @@ SlotsService gives the renderer separate bare observables for `useSessions` and `ConversationSnapshot.nodes` is the human transcript, not the model surface. `TranscriptAdapter` projects the raw window in log order — every append-origin surface event (`isAppendSurfaceEvent`) at its own log position, plus one `CompactionSummaryNode` marker per landed compaction checkpoint — and never consults surface order. A landed compaction therefore keeps the conversation it shadowed on the model side: the marker reports where the model stopped seeing that history instead of erasing it. Model-only replacement copies stay out: a pruned `tool/result` and a regenerated `assistant/message` rewrite one node for the model and mark no boundary. A checkpoint is a `user/message` carrying the compaction seam's plugin source that **replaced** a surface range; an appending plugin-sourced `user/message` is injected context, not a compaction. The adapter's plugin literal is pinned to the seam's own declaration by a type-only import of the cordis-free [`dsh-compact/checkpoint`](../../compact/compact/README.md) leaf, so renaming it there fails `tsc` here; a **value** import of the package would fail the client purity gate, and the package **root** is unreachable even as a type (it reaches `dsh-session`'s root, whose `Context` merge collides the host `sessions` with this program's). `tests/compact-checkpoint-pin.spec.ts` covers the same drift behaviorally. -Because the projection is log-ordered, the node array is seq-monotonic by construction: log-only `command/run` / `command/done` nodes splice in by seq, `Session` merges interrupted frozen nodes by their fractional seqs, and a window whose checkpoint cites a shadowed range outside it renders the marker with nothing logged. The marker's summary text comes from the checkpoint's `compact/summary` provenance; a window cut that left the provenance outside makes the row non-expandable rather than empty, and a later page that supplies it resolves the text. Performance contract: one append materializes one node, an event that changes no node keeps the previous array reference (a chunk storm costs nothing), and unchanged nodes keep their object identity. +Because the projection is log-ordered, the node array is seq-monotonic by construction: log-only `command/run` / `command/done` nodes splice in by seq, `Session` merges interrupted frozen nodes by their fractional seqs, and a window whose checkpoint cites a shadowed range outside it renders the marker with nothing logged. The marker's summary text comes from the checkpoint's `compact/summary` provenance; a window cut that left the provenance outside makes the row non-expandable rather than empty, and a later page that supplies it resolves the text. Performance contract: one append materializes at most one node and copies the projection only when it adds that node; an event that changes no node keeps the previous array reference (a chunk storm costs nothing), and unchanged nodes keep their object identity. ## Code Mode sub-dispatch index diff --git a/packages/client/runtime/README.zh.md b/packages/client/runtime/README.zh.md index 9cebc6e748..efa5e841ef 100644 --- a/packages/client/runtime/README.zh.md +++ b/packages/client/runtime/README.zh.md @@ -24,7 +24,7 @@ SlotsService 分别为 renderer 提供 `useSessions` 与 `useWorkspaces` 的裸 `ConversationSnapshot.nodes` 是人类对话记录,不是模型 surface。`TranscriptAdapter` 按日志顺序投影原始窗口——每个 append 来源的 surface 事件(`isAppendSurfaceEvent`)落在它自己的日志位置上,外加每次落地的压缩检查点贡献一个 `CompactionSummaryNode` 标记——且从不查询 surface 顺序。于是一次落地的压缩会保留它在模型侧遮蔽掉的对话:标记报告模型从哪里开始看不见那段历史,而不是把它抹掉。仅模型可见的 replacement 副本不进入记录:被裁剪的 `tool/result` 和重新生成的 `assistant/message` 只为模型重写一个节点,不标记任何边界。检查点是携带压缩缝隙插件来源、且**替换**了一段 surface 范围的 `user/message`;一条 append 的插件来源 `user/message` 是注入上下文,不是压缩。适配器的插件字面量通过对无 cordis 的 [`dsh-compact/checkpoint`](../../compact/compact/README.md) 叶子做仅类型导入,钉在压缩缝隙自己的声明上:在那里改名会让此处 `tsc` 失败;而对该包做**值**导入会被客户端纯度门禁拒绝,包的**根**即便作为类型也无法到达(它会到达 `dsh-session` 的根,其 `Context` 合并会让 host 的 `sessions` 与本程序的冲突)。`tests/compact-checkpoint-pin.spec.ts` 从行为侧覆盖同一漂移。 -由于投影按日志顺序,节点数组天然按 seq 单调:仅日志的 `command/run` / `command/done` 节点按 seq 插入,`Session` 按分数 seq 归并被打断的冻结节点,而检查点所引范围落在窗口之外的窗口会渲染出标记且不打印任何日志。标记的摘要文本来自检查点的 `compact/summary` 溯源;窗口切分把溯源留在窗口外时该行不可展开而非空白,后续补上溯源的分页会解析出文本。性能契约:一次追加物化一个节点,不改变任何节点的事件保持上一次的数组引用(分片风暴零成本),未变化的节点保持其对象标识。 +由于投影按日志顺序,节点数组天然按 seq 单调:仅日志的 `command/run` / `command/done` 节点按 seq 插入,`Session` 按分数 seq 归并被打断的冻结节点,而检查点所引范围落在窗口之外的窗口会渲染出标记且不打印任何日志。标记的摘要文本来自检查点的 `compact/summary` 溯源;窗口切分把溯源留在窗口外时该行不可展开而非空白,后续补上溯源的分页会解析出文本。性能契约:一次追加最多物化一个节点,并且仅在加入该节点时复制投影;不改变任何节点的事件保持上一次的数组引用(分片风暴零成本),未变化的节点保持其对象标识。 ## Code Mode 子调用索引 diff --git a/packages/client/runtime/package.json b/packages/client/runtime/package.json index 3868ab8d8c..a6f96b9d47 100644 --- a/packages/client/runtime/package.json +++ b/packages/client/runtime/package.json @@ -32,6 +32,7 @@ "license": "BSD-3-Clause", "dependencies": { "@deepseek-ai/dsh-client-connection": "workspace:^", + "@deepseek-ai/dsh-compact": "workspace:^", "@deepseek-ai/dsh-commands": "workspace:^", "@deepseek-ai/dsh-client-ui-slots": "workspace:^", "@deepseek-ai/dsh-host-apiproxy": "workspace:^", @@ -48,7 +49,6 @@ "cordis": "^4.0.0-rc.7" }, "devDependencies": { - "@deepseek-ai/dsh-compact": "workspace:^", "@deepseek-ai/dsh-invariants": "workspace:^", "@types/react": "~18.3.1", "cordis": "^4.0.0-rc.7" diff --git a/packages/client/runtime/src/client/sessions/transcript-adapter.ts b/packages/client/runtime/src/client/sessions/transcript-adapter.ts index 4985f263f4..6fae44ede4 100644 --- a/packages/client/runtime/src/client/sessions/transcript-adapter.ts +++ b/packages/client/runtime/src/client/sessions/transcript-adapter.ts @@ -33,8 +33,8 @@ import { toAssistantBlocks } from './conversation.ts' */ const COMPACT_PLUGIN: typeof COMPACT_CHECKPOINT_SOURCE.plugin = 'compact' -/** In-window tool/call index entry (result-card backfill + runningCalls material). */ -export interface CallIndexEntry { +/** In-window tool/call index entry used to materialize result cards. */ +interface CallIndexEntry { name: string argsRaw: string turn: number @@ -194,11 +194,6 @@ export class TranscriptAdapter { private rev = 0 private nodesResult: { rev: number; value: readonly ConversationNode[] } | null = null - /** In-window tool/call index (Session uses it for runningCalls and result-card backfill). */ - get callIndex(): ReadonlyMap { - return this.callIdx - } - /** * Window rebuild (after open/resync/page prepend): re-index the raw window * and re-project the transcript. @@ -230,9 +225,10 @@ export class TranscriptAdapter { /** * Tail append (live session/event): index the event and, when it belongs to - * the transcript, extend the projection by one node — O(1) per append. An - * event that changes no node (a chunk storm) bumps no revision, so nodes() - * keeps returning the same array reference. + * the transcript, extend the projection by one copy-on-write node so a + * published array never mutates. An event that changes no node (a chunk + * storm) bumps no revision, so nodes() keeps returning the same array + * reference. * @param event - the live event (seq = window tail + 1). * @param view - host-computed tool view paired with the event when it is a tool call/result; indexed for card rendering. */ diff --git a/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts b/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts index f7f345d931..ddc6c8adc5 100644 --- a/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts +++ b/packages/client/runtime/tests/compact-checkpoint-pin.spec.ts @@ -5,14 +5,13 @@ * compile time through a type-only import of `dsh-compact/checkpoint`, so * renaming the seam's plugin already fails `tsc`. This spec covers the same * drift from the other side — end to end through the adapter, driving it with a - * checkpoint built from the canonical `COMPACT_CHECKPOINT_SOURCE` **value** and - * checking the seam's own predicate agrees. It runs in the client TEST program, - * which can value-import the package root; a `packages/client/*` package - * program cannot, because that root reaches `dsh-session`'s root and collides - * the host `Context.sessions` merge (`TS2717`). + * checkpoint built from the canonical `COMPACT_CHECKPOINT_SOURCE` value and + * checking the seam's own predicate agrees. Both values come from the + * cordis-free checkpoint leaf, so the client test program never loads the host + * package root or its `Context` merges. */ -import { COMPACT_CHECKPOINT_SOURCE, isCompactCheckpointSource } from '@deepseek-ai/dsh-compact' +import { COMPACT_CHECKPOINT_SOURCE, isCompactCheckpointSource } from '@deepseek-ai/dsh-compact/checkpoint' import { createUserMessage } from '@deepseek-ai/dsh-llm' import { describe, expect, it } from 'vitest' import type { SessionEvent } from '@deepseek-ai/dsh-session/types' @@ -40,7 +39,7 @@ describe('compaction checkpoint recognition', () => { expect(adapter.nodes()).toEqual([{ kind: 'compaction', seq: 1, time: 1_700_000_000_001, summary: null }]) }) - it('agrees with the seam s own predicate on the source it recognizes', () => { + it("agrees with the seam's own predicate on the source it recognizes", () => { // Both sides answer the same question about the same value: if the seam // renames its plugin, this equality is what breaks. const checkpoint = canonicalCheckpoint(1) diff --git a/packages/client/runtime/tests/transcript-adapter.spec.ts b/packages/client/runtime/tests/transcript-adapter.spec.ts index 0c8aa9e12b..cc03d349b8 100644 --- a/packages/client/runtime/tests/transcript-adapter.spec.ts +++ b/packages/client/runtime/tests/transcript-adapter.spec.ts @@ -316,15 +316,7 @@ describe('TranscriptAdapter', () => { expect(adapter.nodes()[0]).toMatchObject({ kind: 'tool-result', isError: true, error: { code: 'boom' } }) }) - it('exposes the in-window call index for runningCalls material', () => { - const adapter = new TranscriptAdapter() - adapter.reset([ev.toolCall(0, 1, 'c9', 'slow', '{}')]) - expect(adapter.callIndex.get('c9')).toMatchObject({ name: 'slow', turn: 1 }) - adapter.append(ev.toolCall(1, 1, 'c10', 'fast', '{}')) - expect(adapter.callIndex.size).toBe(2) - }) - - it('attaches wire views: callView into the call index, resultView onto the node by seq', () => { + it('attaches wire views to the materialized result node', () => { const adapter = new TranscriptAdapter() const callView = { for: 'call' as const, view: { card: 'terminal' as const, command: 'ls' } } const resultView = { for: 'result' as const, view: { card: 'generic' as const, title: '完成' } } @@ -332,7 +324,6 @@ describe('TranscriptAdapter', () => { ev.toolCall(0, 1, 'c1', 'bash', '{"cmd":"ls"}'), ev.toolResult(1, 1, 'c1', 'listing'), ], [callView, resultView] as never) - expect(adapter.callIndex.get('c1')).toMatchObject({ callView: { card: 'terminal' } }) expect(adapter.nodes().find(n => n.kind === 'tool-result')).toMatchObject({ callView: { card: 'terminal' }, resultView: { card: 'generic', title: '完成' }, }) @@ -343,7 +334,6 @@ describe('TranscriptAdapter', () => { adapter.reset(plainTurn(0, 0, 'a', 'b')) // no views argument adapter.append(ev.toolCall(6, 1, 'c2', 'echo', '{}'), { for: 'call', view: { card: 'generic', title: '回声' } } as never) adapter.append(ev.toolResult(7, 1, 'c2', 'ok')) // no view on the result - expect(adapter.callIndex.get('c2')).toMatchObject({ callView: { title: '回声' } }) expect(adapter.nodes().find(n => n.kind === 'tool-result')).toMatchObject({ callView: { title: '回声' }, resultView: null, }) diff --git a/packages/client/test-runtime/README.i18n.yaml b/packages/client/test-runtime/README.i18n.yaml index 73a4705b1b..fe40088b11 100644 --- a/packages/client/test-runtime/README.i18n.yaml +++ b/packages/client/test-runtime/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/test-runtime/README.md -README.md: 883d71224139dc409229fdfb35362d040e810cc7 -README.zh.md: a3daf112940b03b585d44bc5fd1317e43ebd35fe +README.md: dc8ee8cadf5e61af15f04b1b9842af1eb658c031 +README.zh.md: a4c889d8a0291b52c8509403748df6b93567788e diff --git a/packages/client/test-runtime/README.md b/packages/client/test-runtime/README.md index 883d712241..dc8ee8cadf 100644 --- a/packages/client/test-runtime/README.md +++ b/packages/client/test-runtime/README.md @@ -21,4 +21,4 @@ None; this package neither assembles nor sends a provider request. ## Known Limitations and Deferred Work - **Consumed through repository source aliases only.** Specs resolve the package through tsconfig `paths` to `src`; the built `lib/` artifact re-exports `@deepseek-ai/dsh-client-runtime/client`, whose bundle is a browser loader script with no Node ESM exports, so `lib/index.js` is not importable under plain Node. Acceptable while every consumer is an in-repo Vitest suite; a Node-compatible runtime entry is deferred until an out-of-repo consumer exists. -- **Conversation snapshots are fixture data, not replayed history.** `updateSnapshot` writes the snapshot store directly; the wire-to-snapshot computation stays covered by the runtime package's own tests and the replay e2e. A fixture can therefore express states the production fold would never produce. +- **Conversation snapshots are fixture data, not replayed history.** `updateSnapshot` writes the snapshot store directly; the wire-to-snapshot computation stays covered by the runtime package's own tests and the replay e2e. A fixture can therefore express states the production projection would never produce. diff --git a/packages/client/test-runtime/README.zh.md b/packages/client/test-runtime/README.zh.md index a3daf11294..a4c889d8a0 100644 --- a/packages/client/test-runtime/README.zh.md +++ b/packages/client/test-runtime/README.zh.md @@ -21,4 +21,4 @@ ## Known Limitations and Deferred Work - **仅可经仓内源码别名消费。** spec 通过 tsconfig `paths` 解析到 `src`;构建产物 `lib/` 再导出 `@deepseek-ai/dsh-client-runtime/client`,而该 bundle 是无 Node ESM 导出的浏览器 loader 脚本,故 `lib/index.js` 在纯 Node 下不可导入。当前所有消费方都是仓内 Vitest 套件,可接受;Node 兼容的运行时入口待出现仓外消费方再补。 -- **会话快照是 fixture 数据,不是重放历史。** `updateSnapshot` 直写快照 store;wire 到快照的运算仍由 runtime 包自身测试与 replay e2e 把守。因此 fixture 可以表达生产折叠永不产出的状态。 +- **会话快照是 fixture 数据,不是重放历史。** `updateSnapshot` 直写快照 store;wire 到快照的运算仍由 runtime 包自身测试与 replay e2e 把守。因此 fixture 可以表达生产投影永不产出的状态。 diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index 654722b589..d4ea0caf53 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/ui-conversation/README.md -README.md: 3973c14f2b8fe746549bb74af85a7a60a7d66aea -README.zh.md: a6bb15c4cdd53d05bf28147b97d9d64d1c59da2b +README.md: b9a4fd7de61ed8ce01417cc97ebfd80c312d37bf +README.zh.md: 3a79336f3cb40bf5682aabeb6503d71a1ee36746 diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index 3973c14f2b..b9a4fd7de6 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -4,6 +4,8 @@ English | [中文](README.zh.md) Conversation domain: skeleton (header/tabs/composer/empty state), chat view (grouped step-summary flow, streaming tail isolation, per-tool row slot with a bash sample registrant and the todo row), composer dock (session stats sticky with the input), input dock (queue rows plus the todo plan strip), minimal details panel, scope-addressed ConversationService. Contract: api-contracts v3 §7 plus the slot terminal design (store seat / props shares). +Compaction renders as one collapsed row at the checkpoint's flow position without replacing the transcript above it. The disclosure renders the checkpoint's `compact/summary` provenance; when that event is outside the loaded window, the row remains visible but non-expandable. The framed checkpoint payload is model-facing and never renders. + The resident conversation shell survives no-session and session transitions. Without a current session it renders a disabled input bar; its root-scoped `conversation.hero.workspace` slot hosts the Workspace picker. Selecting a Workspace connects or reuses its Host-owned blank session and opens that session without replacing the shell. Blank sessions render the same composer body as active sessions, while the InputHub carries drafts across Workspace switches and mirrors them into the session store. In the active phase the session header occupies the top as ordinary column chrome; beneath it a scrollport (`data-conversation-scroll`) holds the flowing views and the sticky composer stack (stats dock + input docks + bar). Wheel over the textarea chains: the capped draft scrolls locally until its edge, then forwards to that host. The view ring IS a slot: the conversation registration declares the `'conversation.view'` list slot (session scope) in its `children` table, ConversationRoot renders the active entry through its renderSlot share (`only: `), and view tabs project from the ring ledger's registration options (`id`/`order`/`label`). The chat view is this package's own ring entry; other plugins (ui-trajectory) contribute tabs through plain `ctx.slots.register` — the former package-local view registry (`registerView`/`ViewEntry`/`ConversationViewMap` and the chrome attachment table) is retired, with per-view chrome dissolved into the view components themselves. @@ -34,6 +36,7 @@ None; this package neither assembles nor sends a provider request. ## Known Limitations and Deferred Work +- **Compaction markers show no scale** — the row does not yet report how many messages or which range the checkpoint replaced. - **Stats-line durations cover the in-window flow only** — LLM and tool wall times fold the snapshot's assistant `timing` and tool call/result pairs, so nodes outside the loaded event window (older history) are not counted. - **Details panel is the minimal form and currently has no entry point** — selected call args/result raw display; the Input/Output/Metadata switch, Prev/Next stepping, and See-in-trajectory deep link are deferred. Tool rows stopped being details-panel click targets and nothing replaced that gesture, so `ChatViewInjected.openDetails` is implemented but uncalled and the panel (including its terminal card) is unreachable in the assembled application; its rendering stays covered by mounting it with a selection directly. - **Assistant per-message paging is a reserved slot** — drawn in the design, not implemented. The finalized content IconActions row (copy / branch / clock) ships under text output only; branch remains a chrome stub. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index a6bb15c4cd..3a79336f3c 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -4,6 +4,8 @@ 会话领域:骨架(标题栏/标签页/编辑器/空状态)、聊天视图(分组步骤摘要流、流式尾部隔离、逐工具行 slot 及一个 bash 示例注册方与 todo 行)、编辑器 dock(与输入区一同 sticky 的会话统计行)、输入区 dock(队列行加 todo 计划条)、最小详情面板、按 scope 寻址的 ConversationService。契约:api-contracts v3 §7 加 slot 终端设计(store seat/props share)。 +压缩在检查点自身的消息流位置渲染为一行折叠标记,不替换其上方的对话记录。展开内容来自检查点溯源的 `compact/summary`;该事件位于已加载窗口之外时,标记仍然可见但不可展开。面向模型的带框检查点载荷绝不渲染。 + 常驻会话壳会跨无会话与会话状态切换而保留。没有当前会话时,它会渲染禁用输入栏;其根作用域的 `conversation.hero.workspace` slot 承载 Workspace 选择器。选择 Workspace 会连接或复用由 Host 拥有的空白会话,并在不替换会话壳的情况下打开该会话。空白会话与活跃会话渲染相同的输入区主体;InputHub 则在 Workspace 切换间携带草稿,并将草稿镜像到会话 store。活跃阶段会话标题栏以普通列 chrome 占据顶部;其下滚动容器(`data-conversation-scroll`)承载流动排版的各视图与 sticky 编辑器栈(统计 dock+输入区 dock+输入栏)。textarea 上的滚轮会链式处理:限高草稿先在本地滚动,到达边缘后再转交给该宿主。 视图环本身就是 slot:会话注册声明 `'conversation.view'` 列表 slot(Session scope),并将其列在 `children` 表中;ConversationRoot 通过 renderSlot share 渲染活跃配置项(`only: `);视图标签页从环账本的注册选项(`id`/`order`/`label`)投影而来。聊天视图是该包自身的环配置项;其他插件(ui-trajectory)通过普通的 `ctx.slots.register` 贡献标签页。先前包内的视图注册表(`registerView`/`ViewEntry`/`ConversationViewMap` 及 chrome 附加表)已退役,逐视图 chrome 则被拆入视图组件自身。 @@ -34,6 +36,7 @@ todo 两个面就是在该形状上的两个注册项,都是普通注册方插 ## 已知限制与暂缓事项 +- **压缩标记不显示规模**:该行尚不报告检查点替换了多少条消息或哪段范围。 - **统计行的耗时只覆盖窗口内消息流**:LLM 与工具墙钟时间由快照的 assistant `timing` 与工具 call/result 配对折算,落在已加载事件窗口之外的节点(更早的历史)不计入。 - **详情面板是最小形态,且当前没有入口**:以原始形式显示已选择调用的参数/结果;Input/Output/Metadata 切换、Prev/Next 步进与 See-in-trajectory 深链接暂缓实现。工具行已不再是详情面板的点击目标,且没有任何手势接替它,因此 `ChatViewInjected.openDetails` 虽已实现却无人调用,该面板(含其终端卡片)在组装后的应用中不可达;其渲染仍由直接以选中态挂载它来覆盖。 - **assistant 逐消息分页是预留 slot**:设计中已有图稿,尚未实现。已定稿的内容 IconActions 行(复制/分支/时钟)只挂在 text 输出下;分支仍是 chrome stub。 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f1cf3d328..ea8592962e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -938,6 +938,9 @@ importers: '@deepseek-ai/dsh-client-connection': specifier: workspace:^ version: link:../connection + '@deepseek-ai/dsh-compact': + specifier: workspace:^ + version: link:../../compact/compact '@deepseek-ai/dsh-client-ui-slots': specifier: workspace:^ version: link:../ui-slots @@ -969,9 +972,6 @@ importers: specifier: ~4.4.7 version: 4.4.7(@types/react@18.3.31)(immer@10.2.0)(react@18.3.1) devDependencies: - '@deepseek-ai/dsh-compact': - specifier: workspace:^ - version: link:../../compact/compact '@deepseek-ai/dsh-invariants': specifier: workspace:^ version: link:../../support/invariants From e3ece4b22c3000f74774e8d34f9cc0615a324b6d Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Thu, 30 Jul 2026 18:11:00 +0800 Subject: [PATCH 04/18] test(web): isolate snapshots from user skills --- apps/web/tests/scaffold.ts | 12 ++++++++++++ .../tests/snapshots/code-mode-round/ui.expected.md | 1 - .../tests/snapshots/cordis-tool-round/ui.expected.md | 1 - .../tests/snapshots/fresh-round-trip/ui.expected.md | 1 - .../snapshots/lifecycle-chrome/reloaded.expected.md | 1 - .../snapshots/live-interactions/cancel.expected.md | 1 - .../live-interactions/error-auth.expected.md | 1 - .../snapshots/live-interactions/retry.expected.md | 1 - .../snapshots/question-composer/answered.expected.md | 1 - .../snapshots/queue-actions/editing.expected.md | 1 - .../web/tests/snapshots/queue-actions/ui.expected.md | 1 - .../tests/snapshots/steering/mid-steer.expected.md | 1 - .../web/tests/snapshots/steering/settled.expected.md | 1 - 13 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/web/tests/scaffold.ts b/apps/web/tests/scaffold.ts index 753cdc2953..4ede8ca908 100644 --- a/apps/web/tests/scaffold.ts +++ b/apps/web/tests/scaffold.ts @@ -10,6 +10,8 @@ // // Composition divergences from `dsh web`, all deliberate, all via include // patches over the SAME tree (never a second yml): temp persistenceRoot; +// user skill roots redirected to empty temp directories (project skill +// discovery remains real); // workspace-context disabled (recorded fixtures must not embed this repo's // AGENTS.md); session-title-llm disabled (its fire-and-forget title call // would race the loop for the session's replay cursor); webserver pinned to @@ -169,6 +171,16 @@ export async function launchWebScaffold(options: LaunchOptions = {}): Promise Date: Thu, 30 Jul 2026 23:43:53 +0800 Subject: [PATCH 05/18] Fix invariant startup gate after CI sync --- .github/workflows/ci.yml | 9 +- .../client/connection/tests/node-half.spec.ts | 20 +-- .../runtime/tests/slots-service.spec.ts | 4 +- scripts/test-invariants.spec.ts | 166 +++++++++++++++++- scripts/test-invariants.ts | 61 +++++-- vitest.config.ts | 23 +-- 6 files changed, 235 insertions(+), 48 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1f6ec52f0a..e607d83bdc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -105,11 +105,10 @@ jobs: || 'dsh-ubuntu-24-04-16core' }} name: node 24 / coverage env: - # Failover shrinks the worker bound: the hosted 32-core runner is - # exclusive to one job, but the failover pool shares one 64-core VM - # across six always-on runner instances, and the timing-sensitive - # process suites have documented aggregate-contention failures. - # 8 × 6 instances = 48 workers worst case on 64 cores. + # The hosted 16-core runner uses six coverage workers. The failover pool + # shares one 64-core VM across six always-on runner instances, so each + # instance may use eight while keeping the worst case at 8 × 6 = 48 + # workers; process-bound suites remain isolated in forks. DSH_COVERAGE_MAX_WORKERS: ${{ vars.DSH_CI_FAILOVER == 'selfhosted' && github.event.pull_request.user.login != 'dependabot[bot]' && '8' || '6' }} DSH_GATE_CONCURRENCY: '3' steps: diff --git a/packages/client/connection/tests/node-half.spec.ts b/packages/client/connection/tests/node-half.spec.ts index 2c7fd0b281..9efa9cbd51 100644 --- a/packages/client/connection/tests/node-half.spec.ts +++ b/packages/client/connection/tests/node-half.spec.ts @@ -59,23 +59,9 @@ describe('connection node half', () => { const ctx = new Context() ctx.provide('httpServer', fakeHttpServer(routes) as HttpServerService) ctx.provide('apiProxy', {} as unknown as ApiProxy) - // The apply throw also escapes cordis as a late rejection — the shape the - // boot's installFailLoud is contracted to catch. Capture it so the run - // stays clean, same pattern as the webserver bind-failure test. - const rejections: unknown[] = [] - const onUnhandled = (err: unknown): void => { rejections.push(err) } - process.on('unhandledRejection', onUnhandled) - try { - const fiber = ctx.plugin({ inject: [...inject], apply }, { trustedHosts: ['harness.internal/path'] }) - await expect(fiber.await()).rejects.toThrow(/not a bare host\[:port\] authority/) - expect(routes).toHaveLength(0) - for (let i = 0; i < 100 && rejections.length === 0; i++) { - await new Promise(resolve => setTimeout(resolve, 10)) - } - expect(rejections.map(String).join('\n')).toContain('not a bare host[:port] authority') - } finally { - process.off('unhandledRejection', onUnhandled) - } + const fiber = ctx.plugin({ inject: [...inject], apply }, { trustedHosts: ['harness.internal/path'] }) + await expect(fiber).rejects.toThrow(/not a bare host\[:port\] authority/) + expect(routes).toHaveLength(0) }) it('registers the /api prefix route and removes it with the fiber', async () => { diff --git a/packages/client/runtime/tests/slots-service.spec.ts b/packages/client/runtime/tests/slots-service.spec.ts index 07e03b6e9d..b2e510a26f 100644 --- a/packages/client/runtime/tests/slots-service.spec.ts +++ b/packages/client/runtime/tests/slots-service.spec.ts @@ -41,8 +41,8 @@ interface Bench { async function boot(): Promise { const ctx = new Context() - ctx.plugin(SlotsService) - await ctx.fiber.await() + const fiber = ctx.plugin(SlotsService) + await fiber // Service accessor (ctx.get reads the reflect store, which Service-class // plugins do not write; the accessor is the product path). const svc = ctx.slots diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index 0fb6aeb201..e2406837ca 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -1,11 +1,14 @@ import { describe, expect, it, vi } from 'vitest' -import { Context, Service } from 'cordis' +import { Context, FiberState, Service } from 'cordis' import Loader from '@cordisjs/plugin-loader' +import InvariantService from '@deepseek-ai/dsh-invariants' import type { InvariantInstaller } from '@deepseek-ai/dsh-invariants' import { packageInvariantOwners } from './package-invariants.ts' import { + TEST_INVARIANT_READY_SERVICE, testInvariantCompanionPaths, testInvariantCompanions, + type TestInvariantCompanion, usesManualInvariantTree, } from './test-invariants.ts' @@ -21,6 +24,32 @@ class TestInvariantProbe extends Service { } } +function deferred(): { readonly promise: Promise; readonly resolve: () => void } { + let resolve!: () => void + const promise = new Promise((done) => { + resolve = done + }) + return { promise, resolve } +} + +async function withFakeCompanions( + create: (path: string, index: number) => () => Promise, + run: () => Promise, +): Promise { + const mutable = testInvariantCompanions as Record Promise> + const originals = Object.entries(mutable) + for (const [index, [path]] of originals.entries()) { + mutable[path] = create(path, index) + } + try { + await run() + } finally { + for (const [path, load] of originals) { + mutable[path] = load + } + } +} + describe('global test invariant host', () => { it('uses one exhaustive topology to reserve every package name with enabled checks', async () => { const ctx = new Context() @@ -85,4 +114,139 @@ describe('global test invariant host', () => { expect(usesManualInvariantTree('/repo/packages/examples/agent-spine-demo/tests/agent-core.spec.ts')).toBe(true) expect(usesManualInvariantTree('/repo/packages/core/session/tests/session.spec.ts')).toBe(false) }) + + it('holds a root plugin until every lazy companion is active, then permits nested startup', async () => { + const delayedStarted = deferred() + const releaseDelayed = deferred() + const order: string[] = [] + let delayedCompanion: TestInvariantCompanion | undefined + + await withFakeCompanions( + (path, index) => async () => { + const companion: TestInvariantCompanion = { + name: `test-invariant-${index}`, + inject: ['invariants'], + async apply() { + order.push(`companion-start:${path}`) + if (index === 0) { + delayedStarted.resolve() + await releaseDelayed.promise + } + order.push(`companion-active:${path}`) + return () => {} + }, + } + if (index === 0) delayedCompanion = companion + return companion + }, + async () => { + const ctx = new Context() + ctx.provide('testInvariantTargetDependency', true) + let nestedFiber: ReturnType | undefined + const nestedApply = vi.fn(function nestedApply() { + order.push('nested') + }) + const targetApply = Object.assign(vi.fn(function targetApply(targetCtx: Context) { + order.push('target') + nestedFiber = targetCtx.plugin(nestedApply) + }), { + inject: ['testInvariantTargetDependency'], + }) + + const targetFiber = ctx.plugin(targetApply) + expect(ctx.registry.get(targetApply)?.callback).toBe(targetApply) + expect(targetFiber.inject).toEqual({ + testInvariantTargetDependency: null, + [TEST_INVARIANT_READY_SERVICE]: null, + }) + + await delayedStarted.promise + await Promise.resolve() + await Promise.resolve() + expect(targetApply).not.toHaveBeenCalled() + + releaseDelayed.resolve() + await targetFiber + if (nestedFiber === undefined) throw new Error('target did not register its nested plugin') + await nestedFiber + + expect(targetFiber.state).toBe(FiberState.ACTIVE) + expect(targetApply).toHaveBeenCalledOnce() + expect(nestedApply).toHaveBeenCalledOnce() + const targetIndex = order.indexOf('target') + expect(targetIndex).toBeGreaterThan(-1) + expect(order.slice(0, targetIndex)).toHaveLength(Object.keys(testInvariantCompanions).length * 2) + expect(order.at(-1)).toBe('nested') + + if (delayedCompanion === undefined) throw new Error('delayed companion did not load') + await ctx.plugin(InvariantService, { enabled: true }) + await ctx.plugin(delayedCompanion) + expect(ctx.registry.get(InvariantService)?.fibers).toHaveLength(1) + expect(ctx.registry.get(delayedCompanion)?.fibers).toHaveLength(1) + }, + ) + }) + + it.each(['load', 'startup'] as const)( + 'rejects a target when a lazy companion fails during %s without starting the target', + async (phase) => { + const failure = new Error(`test invariant companion ${phase} failed`) + await withFakeCompanions( + (_path, index) => phase === 'load' && index === 0 + ? async () => { throw failure } + : async () => ({ + name: `test-invariant-${index}`, + inject: ['invariants'], + async apply() { + if (phase === 'startup' && index === 0) throw failure + return () => {} + }, + }), + async () => { + const ctx = new Context() + const targetApply = vi.fn(function targetApply() {}) + const targetFiber = ctx.plugin(targetApply) + + await expect(targetFiber).rejects.toBe(failure) + expect(targetApply).not.toHaveBeenCalled() + expect(targetFiber.state).toBe(FiberState.PENDING) + await expect(targetFiber.dispose()).resolves.toBeUndefined() + expect(targetFiber.state).toBe(FiberState.DISPOSED) + }, + ) + }, + ) + + it('disposes a pending target without waiting for companion readiness', async () => { + const delayedStarted = deferred() + const releaseDelayed = deferred() + + await withFakeCompanions( + (_path, index) => async () => ({ + name: `test-invariant-${index}`, + inject: ['invariants'], + async apply() { + if (index === 0) { + delayedStarted.resolve() + await releaseDelayed.promise + } + return () => {} + }, + }), + async () => { + const ctx = new Context() + const targetApply = vi.fn(function targetApply() {}) + const targetFiber = ctx.plugin(targetApply) + + await delayedStarted.promise + await expect(targetFiber.dispose()).resolves.toBeUndefined() + expect(targetFiber.state).toBe(FiberState.DISPOSED) + expect(targetApply).not.toHaveBeenCalled() + + releaseDelayed.resolve() + await targetFiber + expect(targetApply).not.toHaveBeenCalled() + }, + ) + }) }) diff --git a/scripts/test-invariants.ts b/scripts/test-invariants.ts index 62c0102588..00f24e6d2f 100644 --- a/scripts/test-invariants.ts +++ b/scripts/test-invariants.ts @@ -6,7 +6,7 @@ */ import { expect } from 'vitest' -import { RegistryService } from 'cordis' +import { FiberState, Inject, RegistryService } from 'cordis' import type { Context, Plugin } from 'cordis' import InvariantService from '@deepseek-ai/dsh-invariants' @@ -25,6 +25,9 @@ export interface TestInvariantCompanion { apply(ctx: Context): Promise<() => void> } +/** Private service dependency that holds ordinary root plugins until invariant startup completes. */ +export const TEST_INVARIANT_READY_SERVICE = 'testInvariantReady' + /** * Every package companion as a lazy loader keyed by glob path. Ordinary tests * load only their owner's module; the exhaustive topology test loads and @@ -47,6 +50,7 @@ interface InvariantHost { } type PluginFiber = ReturnType +type PluginCallback = Plugin.Function | Plugin.Constructor const hosts = new WeakMap() // oxlint-disable-next-line typescript/unbound-method -- every call below supplies its RegistryService receiver explicitly. @@ -64,10 +68,18 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge return this.ctx === root ? joinInvariantStartup(existing, host.ready) : existing } - const fiber = originalPlugin.call(this, plugin, config, getOuterStack) - // A root-level await is the test's composition boundary. Nested plugin - // fibers must not await their own companion parent through the global host. - if (this.ctx !== root) return fiber + // Nested plugins run inside a target that already crossed the root barrier. + // Adding the same root-owned dependency there would make child lifecycle + // depend on an unrelated isolation scope and can deadlock companion startup. + if (this.ctx !== root) return originalPlugin.call(this, plugin, config, getOuterStack) + if (callback === undefined) return originalPlugin.call(this, plugin, config, getOuterStack) + + const fiber = originalPlugin.call( + this, + withInvariantReadiness(plugin, callback as PluginCallback), + config, + getOuterStack, + ) return joinInvariantStartup(fiber, host.ready) } @@ -126,8 +138,8 @@ function startInvariantHost(root: Context): InvariantHost { const serviceFiber = mount(InvariantService, { enabled: true }) const testPath = expect.getState().testPath ?? '' const companionPaths = testInvariantCompanionPaths(testPath) - const ready = serviceFiber.await().then(async () => { - const companionFibers = await Promise.all(companionPaths.map(async (path) => { + const ready = requireActive(serviceFiber, 'invariant service').then(async () => { + const companions = await Promise.all(companionPaths.map(async (path) => { const load = testInvariantCompanions[path] if (load === undefined) { throw new Error(`test invariants: selected companion vanished at ${path}`) @@ -136,20 +148,43 @@ function startInvariantHost(root: Context): InvariantHost { if (!companion.inject.includes('invariants')) { throw new Error(`test invariants: ${path} must inject the invariant service`) } - return mount(companion) + return { companion, path } })) - await Promise.all(companionFibers.map(fiber => fiber.await())) + const companionFibers = companions.map(({ companion, path }) => ({ + fiber: mount(companion), + path, + })) + await Promise.all(companionFibers.map(({ fiber, path }) => requireActive(fiber, path))) + root.provide(TEST_INVARIANT_READY_SERVICE, true) }) const host = { byCallback, ready } hosts.set(root, host) return host } +async function requireActive(fiber: PluginFiber, label: string): Promise { + await fiber.await() + if (fiber.state !== FiberState.ACTIVE) { + throw new Error(`test invariants: ${label} settled without becoming active`) + } +} + +function withInvariantReadiness(plugin: Plugin, callback: PluginCallback): Plugin.Object { + return { + apply: callback as Plugin.Function, + inject: { + ...Inject.resolve(plugin.inject), + [TEST_INVARIANT_READY_SERVICE]: null, + }, + ...(plugin.name === undefined ? {} : { name: plugin.name }), + ...(plugin.Config === undefined ? {} : { Config: plugin.Config }), + ...(plugin.provide === undefined ? {} : { provide: plugin.provide }), + ...(plugin.intercept === undefined ? {} : { intercept: plugin.intercept }), + } +} + function joinInvariantStartup(fiber: PluginFiber, invariantReady: Promise): PluginFiber { - const readiness = fiber.await().then(async (loaded) => { - await invariantReady - return loaded - }) + const readiness = invariantReady.then(() => fiber.await()) const joined = Object.create(fiber) as PluginFiber joined.then = readiness.then.bind(readiness) return joined diff --git a/vitest.config.ts b/vitest.config.ts index aa3e2b441b..0f4aac1e31 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -37,9 +37,9 @@ const testIncludes = [ 'scripts/**/*.spec.ts', ] -// These suites exercise process-global state, process APIs, or timing-sensitive process I/O -// that worker threads cannot isolate reliably under aggregate gate contention. -// Keep the narrow exception in forks while the rest of the inventory avoids per-file processes. +// These suites exercise process-global state, process APIs, or timing-sensitive process I/O. +// Keep them in a separate project so Windows, whose main pool uses threads, +// still contains them in forks; POSIX uses forks for both projects. const processBoundTests = [ 'packages/subprocess/subprocess-local/tests/spawn.spec.ts', 'packages/context/time-context/tests/time-context.spec.ts', @@ -55,8 +55,9 @@ export default defineConfig({ // .tsx: client component specs (jsdom via per-file @vitest-environment pragma). include: testIncludes, exclude: windowsUnsupportedPackages.map(path => `${path}/tests/**/*.spec.ts`), - // One coverage invocation aggregates both projects. Most suites use threads - // for lower startup/IPC overhead; only explicit process-bound suites fork. + // One coverage invocation aggregates both projects. POSIX uses forks to + // contain the Node CJS-lexer abort; Windows keeps threads for the main + // inventory and forks only the explicit process-bound project. projects: [ { plugins: [pathsPlugin()], @@ -156,11 +157,13 @@ export default defineConfig({ 'packages/client/ui-sidebar/src/client/index.ts', 'packages/client/ui-skill/src/client/index.ts', 'packages/client/ui-workspace/src/client/index.ts', - // Typert generator: correctness is pinned by its fixture suites and - // the byte-for-byte catalog reproduction test; per-file coverage - // would put whole-workspace compiler analysis under v8 - // instrumentation — the coverage lane's longest tail. - 'packages/typert/generator/src/*.ts', + // These three whole-workspace Typert passes are pinned by fixture and + // byte-for-byte catalog tests; v8 instrumentation makes them the + // coverage lane's longest tail. The generator's lighter modules and + // future source files retain the 100% per-file threshold. + 'packages/typert/generator/src/analyzer.ts', + 'packages/typert/generator/src/renderer.ts', + 'packages/typert/generator/src/cordis-catalog.ts', 'packages/host/apiproxy/src/index.ts', 'packages/host/apiproxy/src/invariant.ts', 'packages/host/apiproxy/src/api-proxy.ts', From 573a062afd85569f8fa892e78de543750f41a6bd Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Thu, 30 Jul 2026 23:54:21 +0800 Subject: [PATCH 06/18] Gate derived test contexts on invariant readiness --- scripts/test-invariants.spec.ts | 51 ++++++++++++++++++++++++++++++++- scripts/test-invariants.ts | 28 ++++++++++++++---- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index e2406837ca..40c93fe9ad 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -120,18 +120,20 @@ describe('global test invariant host', () => { const releaseDelayed = deferred() const order: string[] = [] let delayedCompanion: TestInvariantCompanion | undefined + const companionNestedApply = vi.fn(function companionNestedApply() {}) await withFakeCompanions( (path, index) => async () => { const companion: TestInvariantCompanion = { name: `test-invariant-${index}`, inject: ['invariants'], - async apply() { + async apply(companionCtx) { order.push(`companion-start:${path}`) if (index === 0) { delayedStarted.resolve() await releaseDelayed.promise } + if (index === 1) await companionCtx.plugin(companionNestedApply) order.push(`companion-active:${path}`) return () => {} }, @@ -173,6 +175,7 @@ describe('global test invariant host', () => { expect(targetFiber.state).toBe(FiberState.ACTIVE) expect(targetApply).toHaveBeenCalledOnce() expect(nestedApply).toHaveBeenCalledOnce() + expect(companionNestedApply).toHaveBeenCalledOnce() const targetIndex = order.indexOf('target') expect(targetIndex).toBeGreaterThan(-1) expect(order.slice(0, targetIndex)).toHaveLength(Object.keys(testInvariantCompanions).length * 2) @@ -187,6 +190,52 @@ describe('global test invariant host', () => { ) }) + it('holds plugins registered on a root-derived context until companion readiness', async () => { + const delayedStarted = deferred() + const releaseDelayed = deferred() + + await withFakeCompanions( + (_path, index) => async () => ({ + name: `test-invariant-${index}`, + inject: ['invariants'], + async apply() { + if (index === 0) { + delayedStarted.resolve() + await releaseDelayed.promise + } + return () => {} + }, + }), + async () => { + const ctx = new Context() + const rootApply = vi.fn(function rootApply() {}) + const derivedApply = vi.fn(function derivedApply() {}) + const derived = ctx.extend() + .isolate('testInvariantDerived') + .intercept('testInvariantDerived', {}) + + const rootFiber = ctx.plugin(rootApply) + const derivedFiber = derived.plugin(derivedApply) + + await delayedStarted.promise + await Promise.resolve() + await Promise.resolve() + expect(rootApply).not.toHaveBeenCalled() + expect(derivedApply).not.toHaveBeenCalled() + expect(derivedFiber.inject).toEqual({ + [TEST_INVARIANT_READY_SERVICE]: null, + }) + + releaseDelayed.resolve() + await Promise.all([rootFiber, derivedFiber]) + expect(rootFiber.state).toBe(FiberState.ACTIVE) + expect(derivedFiber.state).toBe(FiberState.ACTIVE) + expect(rootApply).toHaveBeenCalledOnce() + expect(derivedApply).toHaveBeenCalledOnce() + }, + ) + }) + it.each(['load', 'startup'] as const)( 'rejects a target when a lazy companion fails during %s without starting the target', async (phase) => { diff --git a/scripts/test-invariants.ts b/scripts/test-invariants.ts index 00f24e6d2f..2ba460a9da 100644 --- a/scripts/test-invariants.ts +++ b/scripts/test-invariants.ts @@ -46,6 +46,7 @@ const MANUAL_INVARIANT_TEST_EXCEPTIONS = [ interface InvariantHost { readonly byCallback: ReadonlyMap + readonly barrierOwners: WeakSet readonly ready: Promise } @@ -65,13 +66,15 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge const callback = this.resolve(plugin) const existing = callback === undefined ? undefined : host.byCallback.get(callback) if (existing !== undefined) { - return this.ctx === root ? joinInvariantStartup(existing, host.ready) : existing + return hasBarrierOwner(host, this.ctx) ? existing : joinInvariantStartup(existing, host.ready) } - // Nested plugins run inside a target that already crossed the root barrier. - // Adding the same root-owned dependency there would make child lifecycle - // depend on an unrelated isolation scope and can deadlock companion startup. - if (this.ctx !== root) return originalPlugin.call(this, plugin, config, getOuterStack) + // Causal descendants of a gated target have already crossed the barrier. + // Host service and companion descendants also bypass it so their own startup + // cannot depend on the readiness they are responsible for providing. + if (hasBarrierOwner(host, this.ctx)) { + return originalPlugin.call(this, plugin, config, getOuterStack) + } if (callback === undefined) return originalPlugin.call(this, plugin, config, getOuterStack) const fiber = originalPlugin.call( @@ -80,6 +83,7 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge config, getOuterStack, ) + host.barrierOwners.add(fiber.ctx.fiber) return joinInvariantStartup(fiber, host.ready) } @@ -120,11 +124,13 @@ export function testInvariantCompanionPaths(testPath: string): string[] { function startInvariantHost(root: Context): InvariantHost { const byCallback = new Map() + const barrierOwners = new WeakSet() const mount = (plugin: Plugin, config?: unknown): PluginFiber => { const fiber = originalPlugin.call(root.registry, plugin, config) const callback = root.registry.resolve(plugin) if (callback === undefined) throw new Error('test invariants: companion is not a valid Cordis plugin') byCallback.set(callback, fiber) + barrierOwners.add(fiber.ctx.fiber) return fiber } @@ -157,11 +163,21 @@ function startInvariantHost(root: Context): InvariantHost { await Promise.all(companionFibers.map(({ fiber, path }) => requireActive(fiber, path))) root.provide(TEST_INVARIANT_READY_SERVICE, true) }) - const host = { byCallback, ready } + const host = { byCallback, barrierOwners, ready } hosts.set(root, host) return host } +function hasBarrierOwner(host: InvariantHost, ctx: Context): boolean { + let fiber = ctx.fiber + while (true) { + if (host.barrierOwners.has(fiber)) return true + const parent = fiber.parent.fiber + if (parent === fiber) return false + fiber = parent + } +} + async function requireActive(fiber: PluginFiber, label: string): Promise { await fiber.await() if (fiber.state !== FiberState.ACTIVE) { From ed41269e04e706cba15ae463f451a8c657b9bbaf Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Thu, 30 Jul 2026 23:57:58 +0800 Subject: [PATCH 07/18] Keep pending invariant children behind readiness --- scripts/test-invariants.spec.ts | 45 +++++++++++++++++++++++++++++++++ scripts/test-invariants.ts | 7 ++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index 40c93fe9ad..18c3a7f860 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -236,6 +236,51 @@ describe('global test invariant host', () => { ) }) + it('holds a child registered externally on a pending target context', async () => { + const delayedStarted = deferred() + const releaseDelayed = deferred() + + await withFakeCompanions( + (_path, index) => async () => ({ + name: `test-invariant-${index}`, + inject: ['invariants'], + async apply() { + if (index === 0) { + delayedStarted.resolve() + await releaseDelayed.promise + } + return () => {} + }, + }), + async () => { + const ctx = new Context() + const targetApply = vi.fn(function targetApply() {}) + const childApply = vi.fn(function childApply() {}) + + const targetFiber = ctx.plugin(targetApply) + const childFiber = targetFiber.ctx.plugin(childApply) + + await delayedStarted.promise + await Promise.resolve() + await Promise.resolve() + expect(targetFiber.state).toBe(FiberState.PENDING) + expect(childFiber.state).toBe(FiberState.PENDING) + expect(targetApply).not.toHaveBeenCalled() + expect(childApply).not.toHaveBeenCalled() + expect(childFiber.inject).toEqual({ + [TEST_INVARIANT_READY_SERVICE]: null, + }) + + releaseDelayed.resolve() + await Promise.all([targetFiber, childFiber]) + expect(targetFiber.state).toBe(FiberState.ACTIVE) + expect(childFiber.state).toBe(FiberState.ACTIVE) + expect(targetApply).toHaveBeenCalledOnce() + expect(childApply).toHaveBeenCalledOnce() + }, + ) + }) + it.each(['load', 'startup'] as const)( 'rejects a target when a lazy companion fails during %s without starting the target', async (phase) => { diff --git a/scripts/test-invariants.ts b/scripts/test-invariants.ts index 2ba460a9da..8ebf7a6243 100644 --- a/scripts/test-invariants.ts +++ b/scripts/test-invariants.ts @@ -171,7 +171,12 @@ function startInvariantHost(root: Context): InvariantHost { function hasBarrierOwner(host: InvariantHost, ctx: Context): boolean { let fiber = ctx.fiber while (true) { - if (host.barrierOwners.has(fiber)) return true + if ( + host.barrierOwners.has(fiber) + && (fiber.state === FiberState.LOADING || fiber.state === FiberState.ACTIVE) + ) { + return true + } const parent = fiber.parent.fiber if (parent === fiber) return false fiber = parent From 096fe8b6d7f13794e41ef70a9b3e2f090cebd68e Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Fri, 31 Jul 2026 00:41:48 +0800 Subject: [PATCH 08/18] Deduplicate invariant barrier fixtures --- scripts/test-invariants.spec.ts | 87 +++++++++++++-------------------- 1 file changed, 33 insertions(+), 54 deletions(-) diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index 18c3a7f860..edea360095 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -50,6 +50,27 @@ async function withFakeCompanions( } } +async function withDelayedFirstCompanion( + run: (control: { readonly started: Promise; readonly release: () => void }) => Promise, +): Promise { + const started = deferred() + const release = deferred() + await withFakeCompanions( + (_path, index) => async () => ({ + name: `test-invariant-${index}`, + inject: ['invariants'], + async apply() { + if (index === 0) { + started.resolve() + await release.promise + } + return () => {} + }, + }), + () => run({ started: started.promise, release: release.resolve }), + ) +} + describe('global test invariant host', () => { it('uses one exhaustive topology to reserve every package name with enabled checks', async () => { const ctx = new Context() @@ -191,22 +212,8 @@ describe('global test invariant host', () => { }) it('holds plugins registered on a root-derived context until companion readiness', async () => { - const delayedStarted = deferred() - const releaseDelayed = deferred() - - await withFakeCompanions( - (_path, index) => async () => ({ - name: `test-invariant-${index}`, - inject: ['invariants'], - async apply() { - if (index === 0) { - delayedStarted.resolve() - await releaseDelayed.promise - } - return () => {} - }, - }), - async () => { + await withDelayedFirstCompanion( + async ({ started, release }) => { const ctx = new Context() const rootApply = vi.fn(function rootApply() {}) const derivedApply = vi.fn(function derivedApply() {}) @@ -217,7 +224,7 @@ describe('global test invariant host', () => { const rootFiber = ctx.plugin(rootApply) const derivedFiber = derived.plugin(derivedApply) - await delayedStarted.promise + await started await Promise.resolve() await Promise.resolve() expect(rootApply).not.toHaveBeenCalled() @@ -226,7 +233,7 @@ describe('global test invariant host', () => { [TEST_INVARIANT_READY_SERVICE]: null, }) - releaseDelayed.resolve() + release() await Promise.all([rootFiber, derivedFiber]) expect(rootFiber.state).toBe(FiberState.ACTIVE) expect(derivedFiber.state).toBe(FiberState.ACTIVE) @@ -237,22 +244,8 @@ describe('global test invariant host', () => { }) it('holds a child registered externally on a pending target context', async () => { - const delayedStarted = deferred() - const releaseDelayed = deferred() - - await withFakeCompanions( - (_path, index) => async () => ({ - name: `test-invariant-${index}`, - inject: ['invariants'], - async apply() { - if (index === 0) { - delayedStarted.resolve() - await releaseDelayed.promise - } - return () => {} - }, - }), - async () => { + await withDelayedFirstCompanion( + async ({ started, release }) => { const ctx = new Context() const targetApply = vi.fn(function targetApply() {}) const childApply = vi.fn(function childApply() {}) @@ -260,7 +253,7 @@ describe('global test invariant host', () => { const targetFiber = ctx.plugin(targetApply) const childFiber = targetFiber.ctx.plugin(childApply) - await delayedStarted.promise + await started await Promise.resolve() await Promise.resolve() expect(targetFiber.state).toBe(FiberState.PENDING) @@ -271,7 +264,7 @@ describe('global test invariant host', () => { [TEST_INVARIANT_READY_SERVICE]: null, }) - releaseDelayed.resolve() + release() await Promise.all([targetFiber, childFiber]) expect(targetFiber.state).toBe(FiberState.ACTIVE) expect(childFiber.state).toBe(FiberState.ACTIVE) @@ -312,32 +305,18 @@ describe('global test invariant host', () => { ) it('disposes a pending target without waiting for companion readiness', async () => { - const delayedStarted = deferred() - const releaseDelayed = deferred() - - await withFakeCompanions( - (_path, index) => async () => ({ - name: `test-invariant-${index}`, - inject: ['invariants'], - async apply() { - if (index === 0) { - delayedStarted.resolve() - await releaseDelayed.promise - } - return () => {} - }, - }), - async () => { + await withDelayedFirstCompanion( + async ({ started, release }) => { const ctx = new Context() const targetApply = vi.fn(function targetApply() {}) const targetFiber = ctx.plugin(targetApply) - await delayedStarted.promise + await started await expect(targetFiber.dispose()).resolves.toBeUndefined() expect(targetFiber.state).toBe(FiberState.DISPOSED) expect(targetApply).not.toHaveBeenCalled() - releaseDelayed.resolve() + release() await targetFiber expect(targetApply).not.toHaveBeenCalled() }, From ed5a82f93072da451f4d187fcaf61a9aed8476b8 Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Fri, 31 Jul 2026 01:04:21 +0800 Subject: [PATCH 09/18] Fix invariant config validation readiness --- scripts/test-invariants.spec.ts | 32 +++++++++++++++++++++++++++++++- scripts/test-invariants.ts | 23 +++++++++++++++++++---- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index edea360095..d2582d3c68 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -1,6 +1,7 @@ import { describe, expect, it, vi } from 'vitest' -import { Context, FiberState, Service } from 'cordis' +import { Context, FiberState, Service, ValidationError } from 'cordis' import Loader from '@cordisjs/plugin-loader' +import z from 'schemastery' import InvariantService from '@deepseek-ai/dsh-invariants' import type { InvariantInstaller } from '@deepseek-ai/dsh-invariants' import { packageInvariantOwners } from './package-invariants.ts' @@ -136,6 +137,35 @@ describe('global test invariant host', () => { expect(usesManualInvariantTree('/repo/packages/core/session/tests/session.spec.ts')).toBe(false) }) + it('preserves config validation failures without starting the rejected plugin', async () => { + const ctx = new Context() + const apply = vi.fn(function invalidConfigApply() { + throw new Error('invalid plugin apply executed') + }) + const plugin = { + apply, + Config: z.object({ + requiredValue: z.string().required(), + }), + } + + const fiber = ctx.plugin(plugin, {}) + const firstError: unknown = await fiber.then( + () => undefined, + (error: unknown) => error, + ) + expect(firstError).toBeInstanceOf(ValidationError) + expect(firstError).toHaveProperty('message', expect.stringMatching(/requiredValue/)) + await ctx.plugin(TestInvariantProbe) + const secondError: unknown = await fiber.then( + () => undefined, + (error: unknown) => error, + ) + expect(secondError).toBe(firstError) + expect(fiber.state).toBe(FiberState.DISPOSED) + expect(apply).not.toHaveBeenCalled() + }) + it('holds a root plugin until every lazy companion is active, then permits nested startup', async () => { const delayedStarted = deferred() const releaseDelayed = deferred() diff --git a/scripts/test-invariants.ts b/scripts/test-invariants.ts index 8ebf7a6243..a0fc6f295e 100644 --- a/scripts/test-invariants.ts +++ b/scripts/test-invariants.ts @@ -75,7 +75,9 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge if (hasBarrierOwner(host, this.ctx)) { return originalPlugin.call(this, plugin, config, getOuterStack) } - if (callback === undefined) return originalPlugin.call(this, plugin, config, getOuterStack) + if (callback === undefined) { + return originalPlugin.call(this, plugin, config, getOuterStack) + } const fiber = originalPlugin.call( this, @@ -84,7 +86,7 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge getOuterStack, ) host.barrierOwners.add(fiber.ctx.fiber) - return joinInvariantStartup(fiber, host.ready) + return joinInvariantStartup(fiber, host.ready, true) } /** @@ -204,8 +206,21 @@ function withInvariantReadiness(plugin: Plugin, callback: PluginCallback): Plugi } } -function joinInvariantStartup(fiber: PluginFiber, invariantReady: Promise): PluginFiber { - const readiness = invariantReady.then(() => fiber.await()) +function joinInvariantStartup( + fiber: PluginFiber, + invariantReady: Promise, + disposePendingFailure = false, +): PluginFiber { + const initialized = disposePendingFailure + ? fiber.await().catch(async (error: unknown) => { + // Config validation is the only failure recorded while a gated fiber + // is still PENDING. Dispose it before readiness publication can + // refresh the rejected fiber with its uninitialized config. + if (fiber.state === FiberState.PENDING) await fiber.dispose() + throw error + }) + : Promise.resolve() + const readiness = initialized.then(() => invariantReady).then(() => fiber.await()) const joined = Object.create(fiber) as PluginFiber joined.then = readiness.then.bind(readiness) return joined From 9853e74d0e2111f621430757ca1778d5d6ec7a13 Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Fri, 31 Jul 2026 01:18:10 +0800 Subject: [PATCH 10/18] Close invariant readiness validation race --- scripts/test-invariants.spec.ts | 82 ++++++++++++++++++++++++++------- scripts/test-invariants.ts | 13 +++--- 2 files changed, 73 insertions(+), 22 deletions(-) diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index d2582d3c68..b119f9657b 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -33,6 +33,28 @@ function deferred(): { readonly promise: Promise; readonly resolve: () => return { promise, resolve } } +function requiredConfig() { + return z.object({ + requiredValue: z.string().required(), + }) +} + +function invalidConfigApply(): never { + throw new Error('invalid plugin apply executed') +} + +async function rejectionOf(fiber: ReturnType): Promise { + return fiber.then( + () => undefined, + (error: unknown) => error, + ) +} + +function expectRequiredConfigValidation(error: unknown): void { + expect(error).toBeInstanceOf(ValidationError) + expect(error).toHaveProperty('message', expect.stringMatching(/requiredValue/)) +} + async function withFakeCompanions( create: (path: string, index: number) => () => Promise, run: () => Promise, @@ -139,33 +161,61 @@ describe('global test invariant host', () => { it('preserves config validation failures without starting the rejected plugin', async () => { const ctx = new Context() - const apply = vi.fn(function invalidConfigApply() { - throw new Error('invalid plugin apply executed') - }) + const apply = vi.fn(invalidConfigApply) const plugin = { apply, - Config: z.object({ - requiredValue: z.string().required(), - }), + Config: requiredConfig(), } const fiber = ctx.plugin(plugin, {}) - const firstError: unknown = await fiber.then( - () => undefined, - (error: unknown) => error, - ) - expect(firstError).toBeInstanceOf(ValidationError) - expect(firstError).toHaveProperty('message', expect.stringMatching(/requiredValue/)) + const firstError = await rejectionOf(fiber) + expectRequiredConfigValidation(firstError) await ctx.plugin(TestInvariantProbe) - const secondError: unknown = await fiber.then( - () => undefined, - (error: unknown) => error, - ) + const secondError = await rejectionOf(fiber) expect(secondError).toBe(firstError) expect(fiber.state).toBe(FiberState.DISPOSED) expect(apply).not.toHaveBeenCalled() }) + it('disposes invalid config when readiness refresh wins the rejection-handler race', async () => { + await withDelayedFirstCompanion( + async ({ started, release }) => { + const ctx = new Context() + const apply = vi.fn(invalidConfigApply) + let disposeQueuedReadiness: (() => void) | undefined + const plugin = { + apply, + Config: z.intersect([ + z.transform(z.any(), () => { + queueMicrotask(() => { + disposeQueuedReadiness = ctx.provide(TEST_INVARIANT_READY_SERVICE, true) + }) + return {} + }, true), + requiredConfig(), + ]), + } + + const fiber = ctx.plugin(plugin, {}) + const firstError = await rejectionOf(fiber) + expectRequiredConfigValidation(firstError) + expect(fiber.state).toBe(FiberState.DISPOSED) + expect(apply).not.toHaveBeenCalled() + + await started + if (disposeQueuedReadiness === undefined) throw new Error('queued readiness was not published') + disposeQueuedReadiness() + release() + await ctx.plugin(TestInvariantProbe) + + const secondError = await rejectionOf(fiber) + expect(secondError).toBe(firstError) + expect(fiber.state).toBe(FiberState.DISPOSED) + expect(apply).not.toHaveBeenCalled() + }, + ) + }) + it('holds a root plugin until every lazy companion is active, then permits nested startup', async () => { const delayedStarted = deferred() const releaseDelayed = deferred() diff --git a/scripts/test-invariants.ts b/scripts/test-invariants.ts index a0fc6f295e..649e680cc2 100644 --- a/scripts/test-invariants.ts +++ b/scripts/test-invariants.ts @@ -85,8 +85,9 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge config, getOuterStack, ) + const initiallyPending = fiber.state === FiberState.PENDING host.barrierOwners.add(fiber.ctx.fiber) - return joinInvariantStartup(fiber, host.ready, true) + return joinInvariantStartup(fiber, host.ready, initiallyPending) } /** @@ -209,14 +210,14 @@ function withInvariantReadiness(plugin: Plugin, callback: PluginCallback): Plugi function joinInvariantStartup( fiber: PluginFiber, invariantReady: Promise, - disposePendingFailure = false, + disposeInitialFailure = false, ): PluginFiber { - const initialized = disposePendingFailure + const initialized = disposeInitialFailure ? fiber.await().catch(async (error: unknown) => { // Config validation is the only failure recorded while a gated fiber - // is still PENDING. Dispose it before readiness publication can - // refresh the rejected fiber with its uninitialized config. - if (fiber.state === FiberState.PENDING) await fiber.dispose() + // is initially PENDING. Dispose it even if queued readiness publication + // changes its state before this rejection handler runs. + await fiber.dispose() throw error }) : Promise.resolve() From a4747f43bdda74955771a2e3cb236d5db74c1aaa Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Fri, 31 Jul 2026 01:28:34 +0800 Subject: [PATCH 11/18] Probe invariant readiness on raw fibers --- scripts/test-invariants.spec.ts | 67 ++++++++++++++++++++++++++++++--- scripts/test-invariants.ts | 12 ++++-- 2 files changed, 69 insertions(+), 10 deletions(-) diff --git a/scripts/test-invariants.spec.ts b/scripts/test-invariants.spec.ts index b119f9657b..2c00bc7439 100644 --- a/scripts/test-invariants.spec.ts +++ b/scripts/test-invariants.spec.ts @@ -39,6 +39,18 @@ function requiredConfig() { }) } +function queuedReadinessConfig( + ctx: Context, + onPublished: (dispose: () => void) => void, +) { + return z.transform(z.any(), () => { + queueMicrotask(() => { + onPublished(ctx.provide(TEST_INVARIANT_READY_SERVICE, true)) + }) + return {} + }, true) +} + function invalidConfigApply(): never { throw new Error('invalid plugin apply executed') } @@ -186,12 +198,9 @@ describe('global test invariant host', () => { const plugin = { apply, Config: z.intersect([ - z.transform(z.any(), () => { - queueMicrotask(() => { - disposeQueuedReadiness = ctx.provide(TEST_INVARIANT_READY_SERVICE, true) - }) - return {} - }, true), + queuedReadinessConfig(ctx, (dispose) => { + disposeQueuedReadiness = dispose + }), requiredConfig(), ]), } @@ -216,6 +225,52 @@ describe('global test invariant host', () => { ) }) + it('retains a valid plugin failure when readiness wins the initial-probe race', async () => { + await withDelayedFirstCompanion( + async ({ started, release }) => { + const ctx = new Context() + const failure = new Error('valid plugin apply failed') + const applied = deferred() + const apply = vi.fn(function validConfigApply() { + applied.resolve() + throw failure + }) + let disposeQueuedReadiness: (() => void) | undefined + const plugin = { + apply, + Config: queuedReadinessConfig(ctx, (dispose) => { + disposeQueuedReadiness = dispose + }), + } + + const fiber = ctx.plugin(plugin, {}) + const returnedError = rejectionOf(fiber) + try { + await Promise.all([started, applied.promise]) + expect(fiber.state).toBe(FiberState.FAILED) + expect(apply).toHaveBeenCalledOnce() + expect(ctx.registry.has(plugin)).toBe(true) + expect(ctx.registry.get(plugin)?.fibers).toHaveLength(1) + + if (disposeQueuedReadiness === undefined) throw new Error('queued readiness was not published') + Reflect.deleteProperty(fiber.inject, TEST_INVARIANT_READY_SERVICE) + disposeQueuedReadiness() + release() + + expect(await returnedError).toBe(failure) + expect(fiber.state).toBe(FiberState.FAILED) + expect(apply).toHaveBeenCalledOnce() + expect(ctx.registry.has(plugin)).toBe(true) + expect(ctx.registry.get(plugin)?.fibers).toHaveLength(1) + } finally { + Reflect.deleteProperty(fiber.inject, TEST_INVARIANT_READY_SERVICE) + disposeQueuedReadiness?.() + release() + } + }, + ) + }) + it('holds a root plugin until every lazy companion is active, then permits nested startup', async () => { const delayedStarted = deferred() const releaseDelayed = deferred() diff --git a/scripts/test-invariants.ts b/scripts/test-invariants.ts index 649e680cc2..9705f590de 100644 --- a/scripts/test-invariants.ts +++ b/scripts/test-invariants.ts @@ -85,7 +85,7 @@ RegistryService.prototype.plugin = function(plugin: Plugin, config?: unknown, ge config, getOuterStack, ) - const initiallyPending = fiber.state === FiberState.PENDING + const initiallyPending = fiber.ctx.fiber.state === FiberState.PENDING host.barrierOwners.add(fiber.ctx.fiber) return joinInvariantStartup(fiber, host.ready, initiallyPending) } @@ -212,16 +212,20 @@ function joinInvariantStartup( invariantReady: Promise, disposeInitialFailure = false, ): PluginFiber { + // RegistryService returns a thenable wrapper whose context still points to + // the raw Fiber. Calling inherited await() on the wrapper would return and + // assimilate that thenable, accidentally following later plugin startup. + const rawFiber = fiber.ctx.fiber const initialized = disposeInitialFailure - ? fiber.await().catch(async (error: unknown) => { + ? rawFiber.await().catch(async (error: unknown) => { // Config validation is the only failure recorded while a gated fiber // is initially PENDING. Dispose it even if queued readiness publication // changes its state before this rejection handler runs. - await fiber.dispose() + await rawFiber.dispose() throw error }) : Promise.resolve() - const readiness = initialized.then(() => invariantReady).then(() => fiber.await()) + const readiness = initialized.then(() => invariantReady).then(() => rawFiber.await()) const joined = Object.create(fiber) as PluginFiber joined.then = readiness.then.bind(readiness) return joined From cc0d13872f8933d7cbc6ff9989f61b67b87c1466 Mon Sep 17 00:00:00 2001 From: Hypatia May Date: Fri, 31 Jul 2026 09:29:19 +0800 Subject: [PATCH 12/18] docs(client): correct checkpoint pin contract --- ...eb-transcript-log-ordered-projection.i18n.yaml | 4 ++-- ...07-30-web-transcript-log-ordered-projection.md | 2 +- ...30-web-transcript-log-ordered-projection.zh.md | 2 +- tsconfig.client.json | 15 ++++++--------- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml index 4c078446f1..ff33e2219c 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md -2026-07-30-web-transcript-log-ordered-projection.md: 0c58373d58e08fbfe260f16f2104b3f7d1ccc3fd -2026-07-30-web-transcript-log-ordered-projection.zh.md: 49de0a9ecbbf2da92113f8ad63afe6478caedadd +2026-07-30-web-transcript-log-ordered-projection.md: 9fb338643774efaeb9deab6f66920a9f4276ce67 +2026-07-30-web-transcript-log-ordered-projection.zh.md: 7962dd432b8bbf115acde9dd480eba9c91f35bfc diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md index 0c58373d58..9fb3386437 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.md @@ -37,7 +37,7 @@ const COMPACT_PLUGIN: typeof COMPACT_CHECKPOINT_SOURCE.plugin = 'compact' Renaming the seam's plugin id is now a compile error in the client: `TS2322: Type '"compact"' is not assignable to type '"compaction"'`. The import must stay **type-only** — a value import of any `@deepseek-ai` package that is neither a platform module nor an inline-safe wire layer is rejected by the client purity gate (`packages/client/tsdown.client.ts`), whose own message records that type-only imports are erased and never reach it. A type-only leaf import needs both a `tsconfig.base.json` `paths` entry and `{"path": "../../compact/compact"}` in `packages/client/runtime/tsconfig.json` `references`: composite `rootDir` rules apply to erased imports as well, and without the reference the diagnostic is `TS6059`/`TS6307`. -`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` stays as the behavioral half, driving the adapter with a checkpoint built from the canonical **value**. It runs in the client **test** program, which may value-import the root; a `packages/client/*` package program may not. +`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` stays as the behavioral half, driving the adapter with a checkpoint built from the canonical **value**. The test value-imports the cordis-free `@deepseek-ai/dsh-compact/checkpoint` leaf and deliberately never loads the compact package root or the host-side `Context` merges reachable through it. The divergence from the terminal is therefore narrow: both frontends recognize a checkpoint from the same declaration — the terminal value-imports `isCompactCheckpointSource` host-side, where no gate applies, and the client pins the type. diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md index 49de0a9ecb..7962dd432b 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-07-30-web-transcript-log-ordered-projection.zh.md @@ -37,7 +37,7 @@ const COMPACT_PLUGIN: typeof COMPACT_CHECKPOINT_SOURCE.plugin = 'compact' 重命名缝隙的插件 id 现在会在客户端产生编译错误:`TS2322: Type '"compact"' is not assignable to type '"compaction"'`。该导入必须保持**仅类型**——任何既非平台模块又非 inline-safe wire 层的 `@deepseek-ai` 包值导入都会被客户端纯度门禁(`packages/client/tsdown.client.ts`)拒绝,而它自己的报错信息就记录着仅类型导入会被擦除、永不抵达该门禁。仅类型的叶子导入同时需要 `tsconfig.base.json` 的一条 `paths` 条目和 `packages/client/runtime/tsconfig.json` `references` 中的 `{"path": "../../compact/compact"}`:composite 的 `rootDir` 规则同样适用于被擦除的导入,缺少该引用时的诊断是 `TS6059`/`TS6307`。 -`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` 作为行为侧的另一半保留,用由权威**值**构造的检查点驱动适配器。它运行在客户端**测试**程序中,那里可以值导入包根;`packages/client/*` 包工程不可以。 +`packages/client/runtime/tests/compact-checkpoint-pin.spec.ts` 作为行为侧的另一半保留,用由权威**值**构造的检查点驱动适配器。该测试以值导入方式从不含 cordis 的 `@deepseek-ai/dsh-compact/checkpoint` 叶子路径取得该值,并刻意不加载 compact 包根或经由它可达的宿主侧 `Context` 合并。 因此与终端的分歧很窄:两个前端都从同一份声明识别检查点——终端在宿主侧值导入 `isCompactCheckpointSource`(那里不适用任何门禁),客户端钉住类型。 diff --git a/tsconfig.client.json b/tsconfig.client.json index 7f072e3c21..e1d4088061 100644 --- a/tsconfig.client.json +++ b/tsconfig.client.json @@ -37,15 +37,12 @@ // client-side Context merges keep it out of the host program. { "path": "./packages/host/directory-picker-native" }, { "path": "./packages/host/directory-picker-browse" }, - // Compaction seam: the client-runtime drift trap value-imports the seam's - // canonical checkpoint const from the package ROOT, which may be reached - // from this TEST program but never from a packages/client/* package - // program — the root reaches dsh-session's root, whose Context merge - // declares the host `sessions: SessionStore` and collides with the - // client's `ISessions`. Package programs use the cordis-free - // dsh-compact/checkpoint leaf instead (a type-only import in - // transcript-adapter.ts), which needs this reference on the runtime - // package project itself. + // Compaction seam: the client-runtime pin test value-imports the canonical + // checkpoint const from the cordis-free dsh-compact/checkpoint leaf and + // deliberately never loads the dsh-compact package root or the host-side + // Context merges reachable through it. The client package pins the same + // leaf through a type-only import in transcript-adapter.ts; composite + // rootDir rules make both paths depend on this runtime project reference. { "path": "./packages/compact/compact" }, { "path": "./packages/client/ui-slots" }, { "path": "./packages/client/schema-form" }, From 235390031a5d4ac3741cc4fd20ecb1e367f0c8ad Mon Sep 17 00:00:00 2001 From: ZiyaZhang <199893125+ZiyaZhang@users.noreply.github.com> Date: Thu, 30 Jul 2026 22:39:08 -0700 Subject: [PATCH 13/18] docs: refine internal testing notice --- README.i18n.yaml | 4 ++-- README.md | 4 ++-- README.zh.md | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.i18n.yaml b/README.i18n.yaml index 66400262db..cc594881b0 100644 --- a/README.i18n.yaml +++ b/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write README.md -README.md: baf5d79b157ae845cc837261452853afd48dbe46 -README.zh.md: 57d7bcf44cda36b37ae233754dbfba4ead2204fd +README.md: e45c7ffb408a4a21c79f655d8bfde6101430f06b +README.zh.md: 9a17f76608e23719d27e9eb43d01582987adb3bf diff --git a/README.md b/README.md index baf5d79b15..e45c7ffb40 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ It uses an architecture where **everything is a plugin**. Thank you for making time to try DeepSeek Harness. -This version is still in internal testing. Some features remain unfinished, and parts of the experience may feel rough. +This version is still in internal testing. Features still need work, and the experience may feel a little rough. “As one cuts and files, as one carves and polishes.” Products grow through repeated encounters with real use and candid feedback. The problems you uncover in practice may lead us to re-examine, or even discard, existing designs. -We especially want to hear about moments of failure, confusion, or friction. If DeepSeek Harness does not help—or instead makes your work harder—please leave a message in our WeCom group and tell us about your experience. Every report will help us refine it. +We especially want to hear about moments of failure, confusion, or friction. If you have any feedback or suggestions, please leave a message in our WeCom group and let us know. Every piece of feedback will help us refine it. ## Install diff --git a/README.zh.md b/README.zh.md index 57d7bcf44c..9a17f76608 100644 --- a/README.zh.md +++ b/README.zh.md @@ -10,11 +10,11 @@ DeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 感谢您愿意拨冗试用 DeepSeek Harness。 -目前的版本仍处于内部测试阶段,有些功能仍待完善,有些体验难免粗粝。 +目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 -“如切如磋,如琢如磨。”产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中暴露的问题,也可能促使我们重新审视,甚至推翻已有的设计。 +“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 -我们尤其希望听见那些失败、困惑与不顺手的时刻——如果它未能帮到您,甚至反而为工作平添了麻烦,请在企业微信群中留言,将使用感受告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 +我们尤其希望听见那些失败、困惑与不顺手的时刻——如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 ## 安装 From d3ff2c3653b3e48eda729a8f89d68ea1c0f6fddb Mon Sep 17 00:00:00 2001 From: NI0317 Date: Fri, 31 Jul 2026 14:56:55 +0800 Subject: [PATCH 14/18] docs(onboarding): update internal testing notice --- ...versioned-gui-welcome-onboarding.i18n.yaml | 4 ++-- ...-07-30-versioned-gui-welcome-onboarding.md | 2 +- ...-30-versioned-gui-welcome-onboarding.zh.md | 2 +- README.i18n.yaml | 4 ++-- README.md | 8 +++----- README.zh.md | 6 ++---- .../welcome.expected.md | 5 ++--- .../ui-settings-general/README.i18n.yaml | 4 ++-- packages/client/ui-settings-general/README.md | 2 +- .../client/ui-settings-general/README.zh.md | 2 +- .../src/client/WelcomeNotice.module.css | 15 +++----------- .../src/client/WelcomeNotice.tsx | 5 ++--- .../ui-settings-general/src/client/locales.ts | 2 -- .../src/onboarding-copy.ts | 20 +++++++++---------- .../tests/welcome-notice.spec.tsx | 4 ++++ .../request-response.expected.json | 4 ++-- 16 files changed, 37 insertions(+), 52 deletions(-) diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml index cdf0c3a817..c9cc58a56a 100644 --- a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md -2026-07-30-versioned-gui-welcome-onboarding.md: 0705469e02ddb9068722ae5d500c151f077c83fd -2026-07-30-versioned-gui-welcome-onboarding.zh.md: bdd21d635f824b8c4a4813e6bff7798b34ec9677 +2026-07-30-versioned-gui-welcome-onboarding.md: 8b40621e9bc09fce330fb7f4a9971951c650181a +2026-07-30-versioned-gui-welcome-onboarding.zh.md: c3feebd4d7e650055e496a81a7938203ee32763a diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md index 0705469e02..8b40621e9b 100644 --- a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md @@ -12,7 +12,7 @@ The GUI's credential onboarding begins with a DeepSeek-specific readiness check, **The Settings shell coordinates ordered steps.** `settings.onboarding` remains a root-scoped list, but `ui-settings` projects its entry ids and order into one coordinator and mounts only the first incomplete step. The active registrant receives `complete()` and `openSection(id)`; no later step mounts until ownership transfers. The product welcome registers at order `-100`, while `ui-models` retains only the conditional DeepSeek readiness and credential-routing step at order `0`. -**Ownerless product onboarding belongs to `ui-settings-general`.** `src/onboarding-copy.ts` is the single editable source for the complete Chinese notice, its faithful English counterpart, the Continue labels, and `WELCOME_NOTICE_VERSION`. Runtime locale dictionaries derive their welcome values from that file, and tests import the same owner instead of repeating paragraph text. The notice is browser UI only: it creates no Session event and contributes no model-visible content. +**Ownerless product onboarding belongs to `ui-settings-general`.** `src/onboarding-copy.ts` is the single editable source for the complete notice, the Continue label, and `WELCOME_NOTICE_VERSION`; both supported GUI locales intentionally render the same Chinese owner copy. Runtime locale dictionaries derive their welcome values from that file, and tests import the same owner instead of repeating paragraph text. The notice is browser UI only: it creates no Session event and contributes no model-visible content. The current Draft retains a visible `【关闭方式待补充】` placeholder and is not release-ready until that instruction is supplied. **Acknowledgement is durable per Harness profile.** The Host half registers a `ui-onboarding` section in the user-settings seam, stored under the active `$DSH_HOME/settings.yaml`. The browser shows the notice unless `welcomeNoticeVersion` equals the owner constant exactly. Continue applies one path mutation with the current version and calls `complete()` only after the Host commits it; a failed write leaves the notice open, and closing the page or process writes nothing. Bumping the constant intentionally makes every profile acknowledge the revised copy once. diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md index bdd21d635f..c3feebd4d7 100644 --- a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md @@ -12,7 +12,7 @@ GUI 的凭据引导从 DeepSeek 专用的就绪状态检查开始,但内部测 **设置外壳协调有序步骤。** `settings.onboarding` 仍是根作用域 list,但 `ui-settings` 会把其中各条目的 id 和顺序投影到一个协调器中,并且只挂载第一个未完成的步骤。当前注册方会收到 `complete()` 和 `openSection(id)`;所有权转移前,不会挂载后续步骤。产品欢迎步骤的顺序为 `-100`,`ui-models` 则只保留顺序为 `0` 的 DeepSeek 条件式就绪状态与凭据跳转步骤。 -**不属于单一功能的产品引导由 `ui-settings-general` 持有。** `src/onboarding-copy.ts` 是完整中文通知、忠实英文对侧文案、两种语言的「继续」按钮文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源。运行时 locale 字典从该文件派生欢迎文案,测试也导入同一个所有者,而不重复段落文本。该通知只存在于浏览器 UI:它不会创建会话事件,也不会贡献任何模型可见内容。 +**不属于单一功能的产品引导由 `ui-settings-general` 持有。** `src/onboarding-copy.ts` 是完整通知、「继续」按钮文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源;GUI 支持的两种 locale 都有意渲染同一份中文所有者文案。运行时 locale 字典从该文件派生欢迎文案,测试也导入同一个所有者,而不重复段落文本。该通知只存在于浏览器 UI:它不会创建会话事件,也不会贡献任何模型可见内容。当前 Draft 保留了醒目的 `【关闭方式待补充】` 占位符;关闭说明补齐前不可发布。 **确认状态按 Harness profile 持久化。** 宿主端在 user-settings seam 中注册 `ui-onboarding` 分节,并存入当前 `$DSH_HOME/settings.yaml`。除非 `welcomeNoticeVersion` 与文案所有者文件中的常量精确相等,否则浏览器会显示通知。「继续」会以当前版本执行一次路径变更,并且仅在宿主端提交成功后调用 `complete()`;写入失败时通知保持打开,关闭页面或进程则不会写入任何内容。提升该常量会有意要求每个 profile 对修订后的文案重新确认一次。 diff --git a/README.i18n.yaml b/README.i18n.yaml index afdb75f1aa..28380602d0 100644 --- a/README.i18n.yaml +++ b/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write README.md -README.md: b17098a4fee2354dfb2015afe34582f725b59df1 -README.zh.md: 9a17f76608e23719d27e9eb43d01582987adb3bf +README.md: edfde303ae744ef5b8da3a8aa4c47a8ae69c85d5 +README.zh.md: 1b49a6c5a9ee276bd566a5caec1700c1766a0c32 diff --git a/README.md b/README.md index b17098a4fe..edfde303ae 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,11 @@ It uses an architecture where **everything is a plugin**. ## Internal testing notice -Thank you for taking the time to try DeepSeek Harness. +感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 -This version is still in internal testing. Its functionality still needs improvement, and the experience may feel a little rough. +“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 -“As one cuts and files, as one chisels and polishes.” A product grows through real encounters and candid feedback. Problems you discover in real use may prompt us to reconsider—or even overturn—our existing designs. - -We especially want to hear about failures, confusion, and friction. If you have any feedback or suggestions, please leave us a message in our WeCom group. Every piece of feedback helps us refine it. +为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 ## Install diff --git a/README.zh.md b/README.zh.md index 9a17f76608..1b49a6c5a9 100644 --- a/README.zh.md +++ b/README.zh.md @@ -8,13 +8,11 @@ DeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 ## 内测声明 -感谢您愿意拨冗试用 DeepSeek Harness。 - -目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 +感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 “如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 -我们尤其希望听见那些失败、困惑与不顺手的时刻——如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 +为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 ## 安装 diff --git a/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md b/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md index 765c07c4b7..a8c2de86d3 100644 --- a/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md +++ b/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md @@ -1,10 +1,9 @@ - region "内测声明": - heading "内测声明" [level=2] - - paragraph: 感谢您愿意拨冗试用 DeepSeek Harness。 - - paragraph: 目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 + - paragraph: 感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 - blockquote: “如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 - paragraph: - - text: 我们尤其希望听见那些失败、困惑与不顺手的时刻—— + - text: 为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外, - strong: 如果您有任何反馈与建议,请在企业微信群中留言告诉我们 - text: 。每一条反馈,都会帮助我们把它打磨得更好。 - button "继续" diff --git a/packages/client/ui-settings-general/README.i18n.yaml b/packages/client/ui-settings-general/README.i18n.yaml index c92c2554ec..4c06061809 100644 --- a/packages/client/ui-settings-general/README.i18n.yaml +++ b/packages/client/ui-settings-general/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/ui-settings-general/README.md -README.md: 3e191b501e69062b671df0f237f2128a4ad086d1 -README.zh.md: 44ba3eba8bfc756a7d68e43a3d34056349f7eaaa +README.md: 96161cbef4962c5e66035d2c3e7998b6185fc7f8 +README.zh.md: bf1c9af19a3586daf5c7ba71f9205f9e031fc3a3 diff --git a/packages/client/ui-settings-general/README.md b/packages/client/ui-settings-general/README.md index 3e191b501e..96161cbef4 100644 --- a/packages/client/ui-settings-general/README.md +++ b/packages/client/ui-settings-general/README.md @@ -4,7 +4,7 @@ English | [中文](README.zh.md) Settings ownerless-copy and product-onboarding plugin: registers everything on the Settings surface that belongs to no single feature — the shell's trigger/header/close chrome content, the General section and its `settings.general.item` slot, the `settings` dictionaries, and the first ordered welcome step. Feature-owned rows (Permission, Language, Appearance), sections (Models), and conditional onboarding steps stay with their feature packages. -`src/onboarding-copy.ts` is the single editable owner of the complete Chinese and English notice plus `WELCOME_NOTICE_VERSION`. The Host half registers `ui-onboarding` in the user-settings seam; the browser compares `welcomeNoticeVersion` for exact equality and writes the current value only after Continue succeeds. The path mutation is idempotent across tabs and preserves sibling settings, while `host/settings-changed` makes an externally acknowledged notice advance without a reload. A different version deliberately presents the notice again. The welcome page preserves every authored paragraph, gives the requested clause in the final paragraph the sole emphasis, initially focuses the title, and has no close, Escape, mask-click, or secondary path. None of its copy or acknowledgement enters a Session log or model request. +`src/onboarding-copy.ts` is the single editable owner of the complete notice plus `WELCOME_NOTICE_VERSION`; both supported GUI locales intentionally render the same Chinese copy. The Host half registers `ui-onboarding` in the user-settings seam; the browser compares `welcomeNoticeVersion` for exact equality and writes the current value only after Continue succeeds. The path mutation is idempotent across tabs and preserves sibling settings, while `host/settings-changed` makes an externally acknowledged notice advance without a reload. A different version deliberately presents the notice again. The welcome page preserves every authored paragraph, gives the requested clause in the final paragraph the sole emphasis, initially focuses the title, and has no close, Escape, mask-click, or secondary path. None of its copy or acknowledgement enters a Session log or model request. The current draft copy retains the visible `【关闭方式待补充】` placeholder and is not release-ready until that instruction is supplied. ## Model Experience diff --git a/packages/client/ui-settings-general/README.zh.md b/packages/client/ui-settings-general/README.zh.md index 44ba3eba8b..bf1c9af19a 100644 --- a/packages/client/ui-settings-general/README.zh.md +++ b/packages/client/ui-settings-general/README.zh.md @@ -4,7 +4,7 @@ 设置界面无特定功能归属的文案与产品引导插件:在设置界面注册所有不属于单一功能的内容,包括外壳的触发器、标题栏与关闭控件内容,「通用」分区及其 `settings.general.item` slot、`settings` 字典,以及第一个有序欢迎步骤。归具体功能所有的行(「权限」、「语言」、「外观」)、分区(「模型」)和条件式首次使用引导步骤仍由各自的功能包提供。 -`src/onboarding-copy.ts` 是完整中英文通知文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源。宿主端在 user-settings seam 中注册 `ui-onboarding`;浏览器比较 `welcomeNoticeVersion` 是否精确相等,仅在「继续」操作成功后写入当前值。该路径变更在不同标签页间幂等,并会保留同级设置;`host/settings-changed` 则让页面在通知被外部确认后,无需重新加载即可推进。版本不同时,系统会有意重新显示通知。欢迎页保留原文的每个段落,仅强调最后一段中指定的句段,初始焦点落在标题上,并且没有关闭操作、Escape、点击遮罩或次要操作路径。其文案和确认状态均不会进入会话日志或模型请求。 +`src/onboarding-copy.ts` 是完整通知文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源;GUI 支持的两种 locale 都有意渲染同一份中文文案。宿主端在 user-settings seam 中注册 `ui-onboarding`;浏览器比较 `welcomeNoticeVersion` 是否精确相等,仅在「继续」操作成功后写入当前值。该路径变更在不同标签页间幂等,并会保留同级设置;`host/settings-changed` 则让页面在通知被外部确认后,无需重新加载即可推进。版本不同时,系统会有意重新显示通知。欢迎页保留原文的每个段落,仅强调最后一段中指定的句段,初始焦点落在标题上,并且没有关闭操作、Escape、点击遮罩或次要操作路径。其文案和确认状态均不会进入会话日志或模型请求。当前 Draft 文案保留了醒目的 `【关闭方式待补充】` 占位符;关闭说明补齐前不可发布。 ## 模型体验 diff --git a/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css b/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css index 843606605e..a1727b8033 100644 --- a/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css +++ b/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css @@ -27,7 +27,6 @@ } .opening, -.status, .reflection, .feedback, .error { @@ -38,10 +37,6 @@ margin-top: 30px; } -.status { - margin-top: 18px; -} - .reflection { margin-top: 36px; padding: 0; @@ -52,7 +47,6 @@ } .opening, -.status, .reflection, .feedback { font-size: 16px; @@ -90,7 +84,6 @@ .brand, .title, .opening, -.status, .reflection, .feedback, .footer { @@ -99,10 +92,9 @@ .title { animation-delay: 40ms; } .opening { animation-delay: 80ms; } -.status { animation-delay: 120ms; } -.reflection { animation-delay: 160ms; } -.feedback { animation-delay: 200ms; } -.footer { animation-delay: 240ms; } +.reflection { animation-delay: 120ms; } +.feedback { animation-delay: 160ms; } +.footer { animation-delay: 200ms; } @keyframes welcome-enter { from { @@ -120,7 +112,6 @@ .brand, .title, .opening, - .status, .reflection, .feedback, .footer { diff --git a/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx b/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx index 32d454e771..0c381e02c9 100644 --- a/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx +++ b/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx @@ -66,10 +66,9 @@ export function WelcomeNotice(props: WelcomeNoticeProps): ReactNode {

{t('welcome.title')}

{t('welcome.paragraph.0')}

-

{t('welcome.paragraph.1')}

-
{t('welcome.paragraph.2')}
+
{t('welcome.paragraph.1')}

- {emphasizedFeedback(t('welcome.paragraph.3'), t('welcome.feedbackEmphasis'))} + {emphasizedFeedback(t('welcome.paragraph.2'), t('welcome.feedbackEmphasis'))}

{state.error === null ? null :

{t('welcome.error')}

}
diff --git a/packages/client/ui-settings-general/src/client/locales.ts b/packages/client/ui-settings-general/src/client/locales.ts index e4359b3f10..ef300e8e1f 100644 --- a/packages/client/ui-settings-general/src/client/locales.ts +++ b/packages/client/ui-settings-general/src/client/locales.ts @@ -11,7 +11,6 @@ export const zh = { 'welcome.paragraph.0': WELCOME_NOTICE_COPY.zh.paragraphs[0], 'welcome.paragraph.1': WELCOME_NOTICE_COPY.zh.paragraphs[1], 'welcome.paragraph.2': WELCOME_NOTICE_COPY.zh.paragraphs[2], - 'welcome.paragraph.3': WELCOME_NOTICE_COPY.zh.paragraphs[3], 'welcome.feedbackEmphasis': WELCOME_NOTICE_COPY.zh.feedbackEmphasis, 'welcome.continue': WELCOME_NOTICE_COPY.zh.continueLabel, 'welcome.error': '暂时无法保存确认状态,请重试。', @@ -30,7 +29,6 @@ export const en = { 'welcome.paragraph.0': WELCOME_NOTICE_COPY.en.paragraphs[0], 'welcome.paragraph.1': WELCOME_NOTICE_COPY.en.paragraphs[1], 'welcome.paragraph.2': WELCOME_NOTICE_COPY.en.paragraphs[2], - 'welcome.paragraph.3': WELCOME_NOTICE_COPY.en.paragraphs[3], 'welcome.feedbackEmphasis': WELCOME_NOTICE_COPY.en.feedbackEmphasis, 'welcome.continue': WELCOME_NOTICE_COPY.en.continueLabel, 'welcome.error': 'The acknowledgement could not be saved. Please try again.', diff --git a/packages/client/ui-settings-general/src/onboarding-copy.ts b/packages/client/ui-settings-general/src/onboarding-copy.ts index edb3249f5a..20bda0f17a 100644 --- a/packages/client/ui-settings-general/src/onboarding-copy.ts +++ b/packages/client/ui-settings-general/src/onboarding-copy.ts @@ -8,30 +8,28 @@ export const WELCOME_NOTICE_ACK_FIELD = 'welcomeNoticeVersion' * Bump only when the notice changes materially and every user should see it * again. The acknowledgement is compared for exact equality. */ -export const WELCOME_NOTICE_VERSION = '2026-07-30.5' +export const WELCOME_NOTICE_VERSION = '2026-07-30.6' /** The complete editable welcome notice in both supported GUI locales. */ export const WELCOME_NOTICE_COPY = { zh: { title: '内测声明', paragraphs: [ - '感谢您愿意拨冗试用 DeepSeek Harness。', - '目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。', + '感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。', '“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。', - '我们尤其希望听见那些失败、困惑与不顺手的时刻——如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', + '为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', ], feedbackEmphasis: '如果您有任何反馈与建议,请在企业微信群中留言告诉我们', continueLabel: '继续', }, en: { - title: 'Internal Testing Notice', + title: '内测声明', paragraphs: [ - 'Thank you for taking the time to try DeepSeek Harness.', - 'This version is still in internal testing. Its functionality still needs improvement, and the experience may feel a little rough.', - '“As one cuts and files, as one chisels and polishes.” A product grows through real encounters and candid feedback. Problems you discover in real use may prompt us to reconsider—or even overturn—our existing designs.', - 'We especially want to hear about failures, confusion, and friction. If you have any feedback or suggestions, please leave us a message in the company WeChat group. Every piece of feedback helps us refine it.', + '感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。', + '“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。', + '为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', ], - feedbackEmphasis: 'If you have any feedback or suggestions, please leave us a message in the company WeChat group', - continueLabel: 'Continue', + feedbackEmphasis: '如果您有任何反馈与建议,请在企业微信群中留言告诉我们', + continueLabel: '继续', }, } as const diff --git a/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx b/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx index 889fa1026d..9ede91859b 100644 --- a/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx +++ b/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx @@ -52,6 +52,10 @@ function mount(version?: string, mutateImpl: () => Promise = () => Prom } describe('WelcomeNotice', () => { + it('uses the same Chinese owner copy in both GUI locales', () => { + expect(WELCOME_NOTICE_COPY.en).toEqual(WELCOME_NOTICE_COPY.zh) + }) + it('renders the owner copy with one primary action and no dismissal control', async () => { const h = mount() const page = await screen.findByRole('region', { name: WELCOME_NOTICE_COPY.zh.title }) diff --git a/scripts/snapshots/translation-prompt-v4/request-response.expected.json b/scripts/snapshots/translation-prompt-v4/request-response.expected.json index ecdfab081b..f063c8a3f1 100644 --- a/scripts/snapshots/translation-prompt-v4/request-response.expected.json +++ b/scripts/snapshots/translation-prompt-v4/request-response.expected.json @@ -8,11 +8,11 @@ }, { "role": "user", - "content": "# DeepSeek Harness\n\nEnglish | [中文](README.zh.md)\n\nDeepSeek Harness (`dsh`) is an open-source coding agent built on the DeepSeek Harness SDK.\n\nIt uses an architecture where **everything is a plugin**.\n\n## Internal testing notice\n\nThank you for taking the time to try DeepSeek Harness.\n\nThis version is still in internal testing. Its functionality still needs improvement, and the experience may feel a little rough.\n\n“As one cuts and files, as one chisels and polishes.” A product grows through real encounters and candid feedback. Problems you discover in real use may prompt us to reconsider—or even overturn—our existing designs.\n\nWe especially want to hear about failures, confusion, and friction. If you have any feedback or suggestions, please leave us a message in our WeCom group. Every piece of feedback helps us refine it.\n\n## Install\n\nInstall `dsh` with one command:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\nThe installer requires `git` and Node `^22.19 || >=24`, offers to install `pnpm` when it is missing, and prompts for a DeepSeek API key.\n\nThe installer keeps every checkout under `~/.dsh/source`: the master clone at `~/.dsh/source/master` and each install's staging checkout as a git worktree `~/.dsh/source/staging-`. The stable symlink `~/.dsh/source/current` points at the active staging worktree, and `dsh` in `~/.local/bin` links to `current/bin/dsh`, so an upgrade repoints one symlink and the `dsh` on PATH never moves. Re-running the command adds a fresh staging worktree from an updated master and repoints `current` at it. See [`scripts/install.sh`](scripts/install.sh) for alternate install locations and other options.\n\n## Use DeepSeek Harness\n\n### Web UI\n\nFor the recommended local interface, build the active checkout after installation and after each update, then start the Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\nThe full build produces the library and client bundles plus the frontend dist. The path above is the installer's default. If you set `DSH_SOURCE` or `DSH_CURRENT`, or reused an existing checkout, replace `~/.dsh/source/current` with that checkout path; see [`scripts/install.sh`](scripts/install.sh) for details. The Web UI is served at `http://127.0.0.1:3080` by default.\n\n### TUI\n\nStart the full-screen terminal interface:\n\n```sh\ndsh\n```\n\n### Headless\n\nRun one task, print the final answer, and exit:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### Automation and SDKs\n\nFrom a source checkout with `DEEPSEEK_API_KEY` in the environment or its root `.env`, start the ACP automation server:\n\n```sh\npnpm run demo:acp\n```\n\nThe [Python SDK](python/README.md) drives a bundled JSON-RPC runtime. The [examples](examples/README.md) cover the runnable headless, ACP, JSON-RPC, Code Mode, and self-referential compositions.\n\n## Why DeepSeek Harness\n\nBuilt-in capabilities cover file reading, editing, and search; shell and persistent PTY execution; reusable skills; task tracking, goals, plans, todos, and background tasks; subagents and workflows; sandboxing and approvals; settings and credentials; persistent, resumable, forkable, and queryable sessions; LSP and web access; context compaction; and telemetry. Each composition selects the subset appropriate to its surface. The TUI and Web UI both include Plan Mode.\n\n- **Everything is a plugin.** Models, tools, policies, storage, context management, and interfaces are composable [Cordis plugins](docs/user/develop/basic/index.md), so deployments can extend or replace behavior without forking the agent loop. See the [architecture](docs/architecture.md) for the underlying design.\n- **Runs are reconstructable.** Anything visible to the model is logged in the authoritative session stream; persistence, resume/fork/query, replay, telemetry, and UIs derive from the same events. See the [session-log architecture](docs/architecture.md#session-log).\n- **Code Mode (opt-in).** It exposes a `run_code` tool and a generated TypeScript SDK; only program output re-enters model context. See [Code Mode](packages/core/tools/README.md#code-mode).\n- **Self-referential Cordis tools are opt-in.** They let the agent inspect its live runtime and mount or unmount plugins while it runs. See the [Cordis tools](packages/cordis/tool-cordis/README.md).\n\n## Community\n\nFollow DeepSeek Harness on Twitter for project updates.\n\n## Development\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\nStart with the [development guide](docs/development.md) and read the [architecture](docs/architecture.md) before changing packages.\n\nFor agents, follow [AGENTS.md](AGENTS.md).\n\nDeepSeek Harness is currently in internal testing.\n\n## License\n\n[BSD 3-Clause](LICENSE)\n" + "content": "# DeepSeek Harness\n\nEnglish | [中文](README.zh.md)\n\nDeepSeek Harness (`dsh`) is an open-source coding agent built on the DeepSeek Harness SDK.\n\nIt uses an architecture where **everything is a plugin**.\n\n## Internal testing notice\n\n感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## Install\n\nInstall `dsh` with one command:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\nThe installer requires `git` and Node `^22.19 || >=24`, offers to install `pnpm` when it is missing, and prompts for a DeepSeek API key.\n\nThe installer keeps every checkout under `~/.dsh/source`: the master clone at `~/.dsh/source/master` and each install's staging checkout as a git worktree `~/.dsh/source/staging-`. The stable symlink `~/.dsh/source/current` points at the active staging worktree, and `dsh` in `~/.local/bin` links to `current/bin/dsh`, so an upgrade repoints one symlink and the `dsh` on PATH never moves. Re-running the command adds a fresh staging worktree from an updated master and repoints `current` at it. See [`scripts/install.sh`](scripts/install.sh) for alternate install locations and other options.\n\n## Use DeepSeek Harness\n\n### Web UI\n\nFor the recommended local interface, build the active checkout after installation and after each update, then start the Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\nThe full build produces the library and client bundles plus the frontend dist. The path above is the installer's default. If you set `DSH_SOURCE` or `DSH_CURRENT`, or reused an existing checkout, replace `~/.dsh/source/current` with that checkout path; see [`scripts/install.sh`](scripts/install.sh) for details. The Web UI is served at `http://127.0.0.1:3080` by default.\n\n### TUI\n\nStart the full-screen terminal interface:\n\n```sh\ndsh\n```\n\n### Headless\n\nRun one task, print the final answer, and exit:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### Automation and SDKs\n\nFrom a source checkout with `DEEPSEEK_API_KEY` in the environment or its root `.env`, start the ACP automation server:\n\n```sh\npnpm run demo:acp\n```\n\nThe [Python SDK](python/README.md) drives a bundled JSON-RPC runtime. The [examples](examples/README.md) cover the runnable headless, ACP, JSON-RPC, Code Mode, and self-referential compositions.\n\n## Why DeepSeek Harness\n\nBuilt-in capabilities cover file reading, editing, and search; shell and persistent PTY execution; reusable skills; task tracking, goals, plans, todos, and background tasks; subagents and workflows; sandboxing and approvals; settings and credentials; persistent, resumable, forkable, and queryable sessions; LSP and web access; context compaction; and telemetry. Each composition selects the subset appropriate to its surface. The TUI and Web UI both include Plan Mode.\n\n- **Everything is a plugin.** Models, tools, policies, storage, context management, and interfaces are composable [Cordis plugins](docs/user/develop/basic/index.md), so deployments can extend or replace behavior without forking the agent loop. See the [architecture](docs/architecture.md) for the underlying design.\n- **Runs are reconstructable.** Anything visible to the model is logged in the authoritative session stream; persistence, resume/fork/query, replay, telemetry, and UIs derive from the same events. See the [session-log architecture](docs/architecture.md#session-log).\n- **Code Mode (opt-in).** It exposes a `run_code` tool and a generated TypeScript SDK; only program output re-enters model context. See [Code Mode](packages/core/tools/README.md#code-mode).\n- **Self-referential Cordis tools are opt-in.** They let the agent inspect its live runtime and mount or unmount plugins while it runs. See the [Cordis tools](packages/cordis/tool-cordis/README.md).\n\n## Community\n\nFollow DeepSeek Harness on Twitter for project updates.\n\n## Development\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\nStart with the [development guide](docs/development.md) and read the [architecture](docs/architecture.md) before changing packages.\n\nFor agents, follow [AGENTS.md](AGENTS.md).\n\nDeepSeek Harness is currently in internal testing.\n\n## License\n\n[BSD 3-Clause](LICENSE)\n" }, { "role": "assistant", - "content": "# DeepSeek Harness\n\n[English](README.md) | 中文\n\nDeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 coding agent(编程智能体)。\n\n它采用了**一切皆插件**的架构。\n\n## 内测声明\n\n感谢您愿意拨冗试用 DeepSeek Harness。\n\n目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n我们尤其希望听见那些失败、困惑与不顺手的时刻——如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## 安装\n\n使用一条命令安装 `dsh`:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\n安装器要求系统已安装 `git` 和 Node `^22.19 || >=24`,缺少 `pnpm` 时可代为安装,并会提示输入 DeepSeek API 密钥。\n\n安装器会把所有检出都放在 `~/.dsh/source` 下:master 克隆位于 `~/.dsh/source/master`,每次安装的 staging 检出是一个 git worktree `~/.dsh/source/staging-<时间戳>`。稳定符号链接 `~/.dsh/source/current` 指向当前生效的 staging worktree,`~/.local/bin` 中的 `dsh` 链接到 `current/bin/dsh`,因此升级只需重指一个符号链接,PATH 上的 `dsh` 从不移动。再次运行该命令会基于更新后的 master 新增一个 staging worktree,并把 `current` 重指到它。其他安装位置和选项见 [`scripts/install.sh`](scripts/install.sh)。\n\n## 使用 DeepSeek Harness\n\n### Web UI\n\n推荐在本地使用 Web UI。安装完成后以及每次更新后,请先构建当前生效的检出,再启动 Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\n完整构建会生成库与客户端 bundle,以及前端 dist。上述路径是安装器的默认位置。如果你设置过 `DSH_SOURCE` 或 `DSH_CURRENT`,或者复用了已有检出,请把 `~/.dsh/source/current` 换成该检出路径;详情见 [`scripts/install.sh`](scripts/install.sh)。Web UI 默认通过 `http://127.0.0.1:3080` 提供服务。\n\n### TUI\n\n启动全屏终端界面:\n\n```sh\ndsh\n```\n\n### Headless\n\n运行一项任务,打印最终答案后退出:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### 自动化与 SDK\n\n在源码检出中通过环境变量或根目录 `.env` 设置 `DEEPSEEK_API_KEY`,然后启动 ACP(Agent Client Protocol)自动化服务器:\n\n```sh\npnpm run demo:acp\n```\n\n[Python SDK](python/README.md) 驱动随附的 JSON-RPC 运行时。[示例](examples/README.md)涵盖可运行的 headless、ACP、JSON-RPC、Code Mode 和自指组合。\n\n## 为什么选择 DeepSeek Harness\n\n内置功能涵盖文件读取、编辑与搜索、shell 和持久 PTY 执行、可复用 skill(技能)、任务跟踪、目标、计划、待办事项与后台任务、subagent 与工作流、沙箱与审批、设置与凭据、可持久化、恢复、fork 与查询的会话、LSP 与 Web 访问、上下文压缩(context compaction),以及遥测。每个组合只选用适合其使用方式的能力子集。TUI 与 Web UI 均包含 Plan Mode。\n\n- **一切皆插件。** 模型、工具、策略、存储、上下文管理和界面均可组合为 [Cordis 插件](docs/user/develop/basic/index.md),部署方无需 fork agent loop(智能体循环)即可扩展或替换行为。底层设计见[架构文档](docs/architecture.md)。\n- **运行可重建。** 凡是模型可见的内容,都会记录在权威会话流中;持久化、恢复/fork/查询、回放、遥测和 UI 均从同一组事件派生。参见[会话日志架构](docs/architecture.md#session-log)。\n- **Code Mode(需显式启用)。** 它会提供 `run_code` 工具和生成的 TypeScript SDK,只有程序输出会重新进入模型上下文。参见 [Code Mode](packages/core/tools/README.md#code-mode)。\n- **自指 Cordis 工具需显式启用。** 这些工具可让 agent 检查自身的实时运行时,并在运行中挂载或卸载插件。参见 [Cordis 工具](packages/cordis/tool-cordis/README.md)。\n\n## 社区\n\n扫描二维码,或打开 DeepSeek Harness 微信社区申请页面 申请加入。\n\n

\n \"DeepSeek\n

\n\n## 开发\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\n请先阅读[开发指南](docs/development.md);修改包之前,请阅读[架构文档](docs/architecture.md)。\n\n面向 agent:遵循 [AGENTS.md](AGENTS.md)。\n\nDeepSeek Harness 目前处于内测阶段。\n\n## 许可证\n\n[BSD 3-Clause](LICENSE)\n" + "content": "# DeepSeek Harness\n\n[English](README.md) | 中文\n\nDeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 coding agent(编程智能体)。\n\n它采用了**一切皆插件**的架构。\n\n## 内测声明\n\n感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## 安装\n\n使用一条命令安装 `dsh`:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\n安装器要求系统已安装 `git` 和 Node `^22.19 || >=24`,缺少 `pnpm` 时可代为安装,并会提示输入 DeepSeek API 密钥。\n\n安装器会把所有检出都放在 `~/.dsh/source` 下:master 克隆位于 `~/.dsh/source/master`,每次安装的 staging 检出是一个 git worktree `~/.dsh/source/staging-<时间戳>`。稳定符号链接 `~/.dsh/source/current` 指向当前生效的 staging worktree,`~/.local/bin` 中的 `dsh` 链接到 `current/bin/dsh`,因此升级只需重指一个符号链接,PATH 上的 `dsh` 从不移动。再次运行该命令会基于更新后的 master 新增一个 staging worktree,并把 `current` 重指到它。其他安装位置和选项见 [`scripts/install.sh`](scripts/install.sh)。\n\n## 使用 DeepSeek Harness\n\n### Web UI\n\n推荐在本地使用 Web UI。安装完成后以及每次更新后,请先构建当前生效的检出,再启动 Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\n完整构建会生成库与客户端 bundle,以及前端 dist。上述路径是安装器的默认位置。如果你设置过 `DSH_SOURCE` 或 `DSH_CURRENT`,或者复用了已有检出,请把 `~/.dsh/source/current` 换成该检出路径;详情见 [`scripts/install.sh`](scripts/install.sh)。Web UI 默认通过 `http://127.0.0.1:3080` 提供服务。\n\n### TUI\n\n启动全屏终端界面:\n\n```sh\ndsh\n```\n\n### Headless\n\n运行一项任务,打印最终答案后退出:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### 自动化与 SDK\n\n在源码检出中通过环境变量或根目录 `.env` 设置 `DEEPSEEK_API_KEY`,然后启动 ACP(Agent Client Protocol)自动化服务器:\n\n```sh\npnpm run demo:acp\n```\n\n[Python SDK](python/README.md) 驱动随附的 JSON-RPC 运行时。[示例](examples/README.md)涵盖可运行的 headless、ACP、JSON-RPC、Code Mode 和自指组合。\n\n## 为什么选择 DeepSeek Harness\n\n内置功能涵盖文件读取、编辑与搜索、shell 和持久 PTY 执行、可复用 skill(技能)、任务跟踪、目标、计划、待办事项与后台任务、subagent 与工作流、沙箱与审批、设置与凭据、可持久化、恢复、fork 与查询的会话、LSP 与 Web 访问、上下文压缩(context compaction),以及遥测。每个组合只选用适合其使用方式的能力子集。TUI 与 Web UI 均包含 Plan Mode。\n\n- **一切皆插件。** 模型、工具、策略、存储、上下文管理和界面均可组合为 [Cordis 插件](docs/user/develop/basic/index.md),部署方无需 fork agent loop(智能体循环)即可扩展或替换行为。底层设计见[架构文档](docs/architecture.md)。\n- **运行可重建。** 凡是模型可见的内容,都会记录在权威会话流中;持久化、恢复/fork/查询、回放、遥测和 UI 均从同一组事件派生。参见[会话日志架构](docs/architecture.md#session-log)。\n- **Code Mode(需显式启用)。** 它会提供 `run_code` 工具和生成的 TypeScript SDK,只有程序输出会重新进入模型上下文。参见 [Code Mode](packages/core/tools/README.md#code-mode)。\n- **自指 Cordis 工具需显式启用。** 这些工具可让 agent 检查自身的实时运行时,并在运行中挂载或卸载插件。参见 [Cordis 工具](packages/cordis/tool-cordis/README.md)。\n\n## 社区\n\n扫描二维码,或打开 DeepSeek Harness 微信社区申请页面 申请加入。\n\n

\n \"DeepSeek\n

\n\n## 开发\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\n请先阅读[开发指南](docs/development.md);修改包之前,请阅读[架构文档](docs/architecture.md)。\n\n面向 agent:遵循 [AGENTS.md](AGENTS.md)。\n\nDeepSeek Harness 目前处于内测阶段。\n\n## 许可证\n\n[BSD 3-Clause](LICENSE)\n" }, { "role": "user", From cb754a0319fd9d0cbc363c73617b70cc652a2ac0 Mon Sep 17 00:00:00 2001 From: creatixchu Date: Fri, 31 Jul 2026 15:26:46 +0800 Subject: [PATCH 15/18] feat(locale): derive the initial Settings language from the browser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A first visit resolved to Chinese regardless of the browser: LocaleService read `dsh.locale` and fell straight back to `zh` when nothing was stored, ignoring the languages the browser already states it reads. The initial locale now resolves through three ordered sources — the persisted preference, then `navigator` (first entry of the ordered language list whose primary subtag names a shipped locale, so `zh-Hans-CN` -> zh and `en-GB` -> en), then `FALLBACK_LOCALE`. An explicit choice still wins and nothing writes the detected locale back to storage, so "has the user chosen?" stays a question only the stored value answers. Specs asserting the shipped Chinese copy now state the browser they assume: the web e2e scenarios open their page with `locale: ZH_BROWSER_LOCALE`, and package specs pin it through the new `pinBrowserLanguages` test helper. `settings-chrome.e2e.ts` gains an English-browser scenario as the assembled-app proof. --- ...07-30-client-locale-full-rollout.i18n.yaml | 4 +- .../2026-07-30-client-locale-full-rollout.md | 2 +- ...026-07-30-client-locale-full-rollout.zh.md | 2 +- ...1-browser-derived-initial-locale.i18n.yaml | 6 ++ ...26-07-31-browser-derived-initial-locale.md | 34 ++++++++++++ ...07-31-browser-derived-initial-locale.zh.md | 34 ++++++++++++ ...6-07-24-web-gui-browser-e2e-lane.i18n.yaml | 4 +- .../2026-07-24-web-gui-browser-e2e-lane.md | 2 +- .../2026-07-24-web-gui-browser-e2e-lane.zh.md | 2 +- apps/web/tests/access-confirmation.e2e.ts | 4 +- apps/web/tests/models-settings.e2e.ts | 5 +- .../tests/onboarding-deepseek-config.e2e.ts | 5 +- apps/web/tests/settings-chrome.e2e.ts | 27 ++++++++- apps/web/tests/support.ts | 11 +++- packages/client/locale/README.i18n.yaml | 4 +- packages/client/locale/README.md | 2 +- packages/client/locale/README.zh.md | 2 +- packages/client/locale/src/client/index.ts | 42 +++++++++++--- packages/client/locale/tests/apply.spec.ts | 12 +++- packages/client/locale/tests/locale.spec.ts | 55 +++++++++++++++---- packages/client/test-runtime/src/index.ts | 1 + .../client/test-runtime/src/locale-env.ts | 25 +++++++++ packages/client/ui-conversation/package.json | 1 + .../tests/apply-inject.spec.tsx | 10 +++- .../tests/assembly-surfaces.spec.tsx | 8 ++- .../ui-conversation/tests/chat-apply.spec.tsx | 10 +++- packages/client/ui-models/package.json | 1 + packages/client/ui-models/tests/apply.spec.ts | 9 ++- .../client/ui-settings-general/package.json | 1 + .../ui-settings-general/tests/apply.spec.ts | 9 ++- .../tests/sidebar-snapshot.spec.tsx | 10 +++- packages/client/ui-slash/tests/apply.spec.ts | 9 ++- packages/client/ui-theme/package.json | 1 + packages/client/ui-theme/tests/apply.spec.ts | 9 ++- .../client/ui-workspace/tests/apply.spec.ts | 9 ++- .../tests/rename-assembly.spec.tsx | 8 ++- .../host/directory-picker-browse/package.json | 1 + .../tests/client-flow.spec.tsx | 9 ++- pnpm-lock.yaml | 15 +++++ 39 files changed, 350 insertions(+), 55 deletions(-) create mode 100644 .agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml create mode 100644 .agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md create mode 100644 .agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md create mode 100644 packages/client/test-runtime/src/locale-env.ts diff --git a/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.i18n.yaml index a56a91c980..bca3fb39ad 100644 --- a/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.md -2026-07-30-client-locale-full-rollout.md: c080d9f240d4533ecd9694ceecfada8662c46425 -2026-07-30-client-locale-full-rollout.zh.md: 062d982e3d7ea62f3ca4c8fedb842e8336f0852c +2026-07-30-client-locale-full-rollout.md: a357f20734d1aa8df60efbf28fd5b8a1a814d63e +2026-07-30-client-locale-full-rollout.zh.md: d22b743f0597405e7f42374ec2caed5523e85595 diff --git a/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.md b/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.md index c080d9f240..a357f20734 100644 --- a/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.md +++ b/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.md @@ -25,7 +25,7 @@ After the typed locale standard seat landed (`locale:` on register → framework **Derivation layers stay pure; localization happens at render.** ui-workspace's `relativeTime` returns structured `{unit, n}` composed with dictionary templates by the renderer; blank sessions and the Ungrouped bucket keep their stored titles, with the renderer substituting localized copy off the `blank` flag / absent `workspaceId`; **blank rows are excluded from search entirely** (a bilingual display title cannot match a single-language query stably). Dates use no Intl: format templates live in the dictionaries (message clock `clock.md`/`clock.ymd`, workspace hover `date.ymd`) and the formatters take `t` as a parameter, staying pure. -**Test and e2e doctrine**: `makeTranslate(...dicts)` (dsh-client-test-runtime) mirrors the service lookup chain (first-dict-wins, key fallback, `{name}` interpolation); component specs stub the `t` seat with it, typed against real props seats. Web e2e uniformly opens through `newEnglishPage` (pins `dsh.locale=en` before boot) and the built-boot snapshot pins the same — goldens are immune to localization migrations; the settings language-switch scenario deliberately bypasses the helper to cover the zh default. +**Test and e2e doctrine**: `makeTranslate(...dicts)` (dsh-client-test-runtime) mirrors the service lookup chain (first-dict-wins, key fallback, `{name}` interpolation); component specs stub the `t` seat with it, typed against real props seats. Web e2e uniformly opens through `newEnglishPage` (pins `dsh.locale=en` before boot) and the built-boot snapshot pins the same — goldens are immune to localization migrations; the settings language-switch scenario bypasses the helper and opens a `zh-CN` browser, since the initial locale follows `navigator` ([browser-derived initial locale](../feature/2026-07-31-browser-derived-initial-locale.md)). The "apply layer subscribes to `locale/change` and re-registers for fresh labels" mechanism in the [settings/locale/theme layering note](../../proposed/architecture/2026-07-25-client-settings-locale-theme.md) is superseded by this decision (thunk + revision lifecycle). diff --git a/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.zh.md b/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.zh.md index 062d982e3d..d22b743f05 100644 --- a/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.zh.md +++ b/.agents/notes/implemented/architecture/2026-07-30-client-locale-full-rollout.zh.md @@ -25,7 +25,7 @@ typed locale 标准席位(`locale:` 注册声明 → 框架注入强类型 `t` **派生层保持纯函数,本地化只在渲染层**:ui-workspace 的 `relativeTime` 返回结构化 `{unit, n}` 由渲染组合字典模板;blank 会话/未分组桶的存储标题不变,渲染按 `blank` 标志/`workspaceId` 缺席替换本地化文案;**搜索态 blank 行一律排除**(双语标题无法与单语查询稳定匹配)。日期不引 Intl:格式模板进字典(消息时钟 `clock.md`/`clock.ymd`,workspace hover `date.ymd`),格式化函数吃 `t` 参数保持纯。 -**测试与 e2e 口径**:`makeTranslate(...dicts)`(dsh-client-test-runtime)镜像服务查找链(首个命中字典胜出、key 兜底、`{name}` 插值),组件测试的 `t` 桩统一用它并以真实 props 席位定型。web e2e 统一 `newEnglishPage`(boot 前钉 `dsh.locale=en`),built-boot snapshot 同样钉 en——golden 对语言迁移免疫;settings 语言切换用例刻意绕开该 helper 覆盖 zh 默认态。 +**测试与 e2e 口径**:`makeTranslate(...dicts)`(dsh-client-test-runtime)镜像服务查找链(首个命中字典胜出、key 兜底、`{name}` 插值),组件测试的 `t` 桩统一用它并以真实 props 席位定型。web e2e 统一 `newEnglishPage`(boot 前钉 `dsh.locale=en`),built-boot snapshot 同样钉 en——golden 对语言迁移免疫;settings 语言切换用例绕开该 helper 并开启 `zh-CN` 浏览器,因为初始 locale 跟随 `navigator`([由浏览器推导初始 locale](../feature/2026-07-31-browser-derived-initial-locale.md))。 [settings/locale/theme 分层 Note](../../proposed/architecture/2026-07-25-client-settings-locale-theme.md) 中"apply 层订阅 `locale/change` 重注册刷新 label"的机制已被本决定取代(thunk + revision 生命周期)。 diff --git a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml new file mode 100644 index 0000000000..65fdff8572 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md +2026-07-31-browser-derived-initial-locale.md: 7668171f32642248cc0be92741eb3dc90e0669cc +2026-07-31-browser-derived-initial-locale.zh.md: 568737285e3c00d6c9792a0e6e79e38428db18c3 diff --git a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md new file mode 100644 index 0000000000..7668171f32 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md @@ -0,0 +1,34 @@ +# Agent Note: The Settings language a fresh browser opens in comes from the browser + +Status: implemented + +English | [中文](2026-07-31-browser-derived-initial-locale.zh.md) + +## Problem + +The Settings Language row opened every first visit in Chinese: `LocaleService` read `dsh.locale` from localStorage and fell straight back to `zh` when nothing was stored. The browser already states which languages its user reads — `navigator.languages` is that statement — and the app ignored it, so an English reader met a Chinese product and had to find a Chinese-labelled settings row to escape it. The fallback was doing two jobs at once: the last resort for an unresolvable locale, and the answer for every user who had simply never chosen. + +## Decision + +**The initial locale resolves through three ordered sources: the persisted preference, then the browser, then `FALLBACK_LOCALE`.** `resolveInitialLocale()` in `packages/client/locale/src/client/index.ts` runs at service construction and is the only place the order is expressed; `restorePreference()` now returns `LocaleId | undefined` (an absent, unparseable, or unreachable store reads as *no preference*) so the next source can speak. + +**Browser matching is on the primary subtag, over the ordered list.** `detectBrowserLocale()` walks `[...navigator.languages, navigator.language]` and returns the first entry whose primary subtag names a shipped locale, so `zh-Hans-CN` and `zh-TW` both land on `zh` and `en-GB` on `en`, while a browser asking only for languages this app does not ship (`fr`, `de`) yields nothing and leaves `FALLBACK_LOCALE` in charge. `navigator.language` trails the list because a browser may expose only the former; a runtime without `navigator` at all (node booting the client tree) resolves to the fallback like any unresolvable case. + +**An explicit choice is permanent.** `setLocale` persistence is untouched, and the persisted value is consulted first, so a user who picked a language keeps it even when travelling between browser profiles or system languages. Nothing writes the detected locale back to storage: detection is re-derived every boot and stays invisible to the "has the user chosen?" question. + +**The browser e2e lane now pins the browser language, not just storage.** Scenarios asserting Chinese copy (`access-confirmation`, `models-settings`, `onboarding-deepseek-config`, `settings-chrome`) open their page with `locale: ZH_BROWSER_LOCALE` from `apps/web/tests/support.ts`; `newEnglishPage` keeps pinning `dsh.locale=en`, which still wins over any browser language. `settings-chrome.e2e.ts` gained a scenario opening a second `en-US` page with empty storage and asserting the settings surface comes up English — the assembled-app proof of this feature. + +## Alternatives considered + +- **`Intl.DateTimeFormat().resolvedOptions().locale` or a single `navigator.language` read**: both collapse the user's ordered preference list to one tag, so a `['de', 'en', 'zh']` reader gets zh instead of en. The list is the part of the browser statement worth reading. +- **Persisting the detected locale on first boot**: it would make detection a one-time event and let a stale first visit outlive a changed browser language, and it destroys the distinction the resolution order rests on — a stored value would no longer mean "the user chose this". +- **Full BCP 47 negotiation (`Intl.LocaleMatcher`-style lookup, region and script weighting)**: with exactly two shipped locales that differ in language, primary-subtag matching is the whole of the correct answer; a negotiation layer would be untestable surface with no behavior to justify it. +- **A cordis config key for the default locale**: the deployment does not vary here — the fallback is the product's answer for "no signal at all", not a knob. Repo policy reserves `Config` fields for deployment-varying choices with a current consumer. +- **Keeping the e2e lane's zh scenarios on storage pinning (`dsh.locale=zh`)**: it would keep the suite green while removing the only place the browser-derived path runs in an assembled app; pinning the browser language instead exercises the new resolution end to end. + +## Consequences + +- A first visit from an English browser lands in English, and the Language row still shows the same two self-described options, so the escape hatch is unchanged in either direction. +- `FALLBACK_LOCALE` narrows to its real job — the dictionary fallback and the no-signal answer — and stops standing in for "the user has not chosen". +- Tests that construct a `LocaleService` under jsdom now depend on the environment's `navigator`: the package specs stub it (`zh-CN` as the baseline; the detection spec varies it), and any future spec asserting a default must pin one too. +- Detection cost is one array walk per service construction, and no storage write, so boot behavior and the persisted-state surface are unchanged. diff --git a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md new file mode 100644 index 0000000000..568737285e --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md @@ -0,0 +1,34 @@ +# Agent Note: 全新浏览器打开的设置语言由浏览器决定 + +Status: implemented + +[English](2026-07-31-browser-derived-initial-locale.md) | 中文 + +## Problem + +设置里的语言行在每一次首访时都以中文开场:`LocaleService` 从 localStorage 读取 `dsh.locale`,读不到就直接回落到 `zh`。浏览器本已声明其使用者阅读哪些语言——`navigator.languages` 就是这份声明——而应用对此视而不见,于是英文读者迎面撞上一个中文产品,还得先找到一行中文标签的设置项才能脱身。回落值当时同时承担两份职责:既是无法解析出 locale 时的最后兜底,也是所有从未做过选择的用户拿到的答案。 + +## Decision + +**初始 locale 依次经三个来源解析:已持久化的偏好、浏览器、`FALLBACK_LOCALE`。** `packages/client/locale/src/client/index.ts` 中的 `resolveInitialLocale()` 在服务构造时运行,是这一顺序的唯一表达处;`restorePreference()` 现在返回 `LocaleId | undefined`(存储项缺失、无法解析或不可访问,一律读作*没有偏好*),后一个来源才有开口的机会。 + +**浏览器匹配按主子标签进行,且遍历有序列表。** `detectBrowserLocale()` 遍历 `[...navigator.languages, navigator.language]`,返回主子标签命中已提供 locale 的首个条目,因此 `zh-Hans-CN` 与 `zh-TW` 同归 `zh`、`en-GB` 归 `en`;而只请求本应用不提供的语言(`fr`、`de`)的浏览器则什么都匹配不到,交由 `FALLBACK_LOCALE` 接管。`navigator.language` 排在列表之后,因为有的浏览器只暴露前者;完全没有 `navigator` 的运行环境(node 启动客户端树)与任何无法解析的情形一样落到回落值。 + +**显式选择是永久的。** `setLocale` 的持久化未作改动,且持久化值最先被查询,因此选过语言的用户即便在不同浏览器配置或系统语言之间辗转也保留原选择。没有任何代码把探测到的 locale 写回存储:探测在每次启动时重新推导,对"用户是否做过选择"这一问题始终不可见。 + +**浏览器 e2e 车道现在钉住浏览器语言,而不只是存储项。** 断言中文文案的场景(`access-confirmation`、`models-settings`、`onboarding-deepseek-config`、`settings-chrome`)以 `apps/web/tests/support.ts` 的 `locale: ZH_BROWSER_LOCALE` 打开页面;`newEnglishPage` 仍然钉 `dsh.locale=en`,它依旧压过任何浏览器语言。`settings-chrome.e2e.ts` 新增一个场景:另开一个存储项为空的 `en-US` 页面,断言设置界面以英文呈现——这是本功能在组装后应用中的证据。 + +## Alternatives considered + +- **`Intl.DateTimeFormat().resolvedOptions().locale` 或单读 `navigator.language`**:两者都把用户的有序偏好列表塌缩成一个标签,于是 `['de', 'en', 'zh']` 的读者拿到的是 zh 而非 en。列表恰恰是浏览器这份声明里最值得读的部分。 +- **首次启动即持久化探测结果**:那会把探测变成一次性事件,让一次陈旧的首访凌驾于此后改变的浏览器语言之上,也摧毁了整个解析顺序所依赖的区分——存储值将不再意味着"用户选了它"。 +- **完整的 BCP 47 协商(`Intl.LocaleMatcher` 式查找、地区与文字权重)**:在只提供两个语言互异的 locale 时,主子标签匹配就是正确答案的全部;协商层只会带来无行为支撑、也无从测试的表面积。 +- **为默认 locale 增加一个 cordis config key**:此处部署之间并无差异——回落值是产品对"完全没有信号"给出的答案,不是旋钮。仓库策略把 `Config` 字段留给有当前消费者、且随部署变化的选择。 +- **让 e2e 车道的中文场景继续钉存储项(`dsh.locale=zh`)**:那会让套件保持绿色,却抹掉浏览器推导路径在组装后应用中唯一的运行处;改钉浏览器语言才能端到端地演练新的解析过程。 + +## Consequences + +- 来自英文浏览器的首访落在英文界面,而语言行依然呈现同样两个以自身语言自述的选项,两个方向的脱身通道都未改变。 +- `FALLBACK_LOCALE` 收窄回它真正的职责——字典回落与无信号时的答案——不再兼职充当"用户尚未选择"。 +- 在 jsdom 下构造 `LocaleService` 的测试现在依赖环境的 `navigator`:包内测试对其打桩(以 `zh-CN` 为基线,探测用例则逐个变换),今后任何断言默认值的用例同样必须钉住它。 +- 探测的代价是每次服务构造遍历一次数组,且不写存储,因此启动行为与持久化状态面均无变化。 diff --git a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml index ada8ff7a3e..91d77fb803 100644 --- a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md -2026-07-24-web-gui-browser-e2e-lane.md: 107dbddbfde8ad29e22d9cba04ce2b83c1d01383 -2026-07-24-web-gui-browser-e2e-lane.zh.md: e4132b2ebb3f30a9d540f47cf9416a13bc4aa9f3 +2026-07-24-web-gui-browser-e2e-lane.md: cdb7de52c50733d6650202ee2117916319940738 +2026-07-24-web-gui-browser-e2e-lane.zh.md: b850acf026502d054a9d8b2168f0b4f47f58f39b diff --git a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md index 107dbddbfd..cdb7de52c5 100644 --- a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md +++ b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md @@ -28,7 +28,7 @@ The barrier stack for replay-mode browser assertions is, in order: (1) host-side No single-shot transient-DOM assertions: every hop from replay yield to React commit can coalesce chunks, so sampling `[data-streaming]` is a race by construction. Streaming incrementality is asserted from the persisted `assistant/chunk` events (model-visible ⟺ logged makes the log the authoritative proof). `dsh-llm-replay`'s opt-in `paceMs` (default absent = burst) is a realism knob so the browser observes genuinely incremental SSE; correctness never leans on it, and abort during a pace wait cancels promptly. -Every scenario fails on any pageerror and on the client's connection-loss/gap-repair console warnings: the reconnect machine plus history resync would otherwise self-heal a dead SSE path and the suite would certify a broken wire. Scaffold `close()` calls the `ReplayHandle.assertConsumed()` teardown check (every recorded script bound, every cursor drained), converting silent underruns and shifted bindings into crisp diagnostics. No vitest retry on the lane; one chromium per file, fresh context per scenario, one host per scenario; viewport pinned; interaction selectors anchor on roles, `data-*` attributes, and visible text, while the frame and conversation-region captures use the existing CSS-module local-name anchors. Standard scenarios set `dsh.locale=en` before client boot so localized role locators and goldens use one explicit language; `settings-chrome.e2e.ts` alone leaves storage unset to cover the default Chinese state and both switch directions. +Every scenario fails on any pageerror and on the client's connection-loss/gap-repair console warnings: the reconnect machine plus history resync would otherwise self-heal a dead SSE path and the suite would certify a broken wire. Scaffold `close()` calls the `ReplayHandle.assertConsumed()` teardown check (every recorded script bound, every cursor drained), converting silent underruns and shifted bindings into crisp diagnostics. No vitest retry on the lane; one chromium per file, fresh context per scenario, one host per scenario; viewport pinned; interaction selectors anchor on roles, `data-*` attributes, and visible text, while the frame and conversation-region captures use the existing CSS-module local-name anchors. Standard scenarios set `dsh.locale=en` before client boot so localized role locators and goldens use one explicit language; the scenarios asserting Chinese copy leave storage unset and open a `zh-CN` browser instead, because the client derives its initial locale from `navigator` ([browser-derived initial locale](../feature/2026-07-31-browser-derived-initial-locale.md)), and `settings-chrome.e2e.ts` additionally covers both switch directions and the English-browser default. ### Expected outputs diff --git a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md index e4132b2ebb..b850acf026 100644 --- a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md +++ b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md @@ -28,7 +28,7 @@ Web GUI 以一条真实组装链交付——chromium 页面 → client 插件 bu 不做单次瞬态 DOM 断言:从回放产出到 React 提交的每一跳都可能合并分片,采样 `[data-streaming]` 天然就是竞态。流式输出的增量性由持久化的 `assistant/chunk` 事件断言(模型可见 ⟺ 已记录,使日志成为权威证据)。`dsh-llm-replay` 的可选 `paceMs`(默认缺省 = 突发)只是让浏览器观察到真正增量 SSE 的真实感旋钮;正确性绝不依赖它,且节奏等待期间中止会即时取消。 -每个场景都会因任何 pageerror 或客户端的连接丢失/间隙修复控制台警告而失败:否则重连机制加历史重同步会把一条死掉的 SSE 通路自愈掉,套件反而认证了坏 wire。Scaffold 的 `close()` 调用 `ReplayHandle.assertConsumed()` 收尾检查(每个已录脚本都被绑定、每个游标都耗尽),把静默的少放与错绑变成清晰诊断。车道不设 vitest 重试;每文件一个 chromium、每场景一个新 context、每场景一个 host;视口固定;交互选择器锚定 role、`data-*` 属性和可见文本,而 frame 与会话区采集则使用既有的 CSS 模块局部类名锚点。常规场景在客户端启动前设置 `dsh.locale=en`,使本地化的 role 定位器和预期输出统一采用明确指定的语言;只有 `settings-chrome.e2e.ts` 不预设该存储项,以覆盖默认中文状态及双向切换。 +每个场景都会因任何 pageerror 或客户端的连接丢失/间隙修复控制台警告而失败:否则重连机制加历史重同步会把一条死掉的 SSE 通路自愈掉,套件反而认证了坏 wire。Scaffold 的 `close()` 调用 `ReplayHandle.assertConsumed()` 收尾检查(每个已录脚本都被绑定、每个游标都耗尽),把静默的少放与错绑变成清晰诊断。车道不设 vitest 重试;每文件一个 chromium、每场景一个新 context、每场景一个 host;视口固定;交互选择器锚定 role、`data-*` 属性和可见文本,而 frame 与会话区采集则使用既有的 CSS 模块局部类名锚点。常规场景在客户端启动前设置 `dsh.locale=en`,使本地化的 role 定位器和预期输出统一采用明确指定的语言;断言中文文案的场景则不预设该存储项,改为开启 `zh-CN` 浏览器,因为客户端的初始 locale 由 `navigator` 推导([由浏览器推导初始 locale](../feature/2026-07-31-browser-derived-initial-locale.md)),而 `settings-chrome.e2e.ts` 还额外覆盖双向切换与英文浏览器默认态。 ### 预期输出 diff --git a/apps/web/tests/access-confirmation.e2e.ts b/apps/web/tests/access-confirmation.e2e.ts index 89b383da85..d4669bc142 100644 --- a/apps/web/tests/access-confirmation.e2e.ts +++ b/apps/web/tests/access-confirmation.e2e.ts @@ -11,7 +11,7 @@ import { assertFixtureInventory, captureStableAria, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { saveFailureShot } from './support.ts' +import { ZH_BROWSER_LOCALE, saveFailureShot } from './support.ts' /** * connectFreshWorkspace twin over the product default Chinese locale (the @@ -49,7 +49,7 @@ describe('web e2e: Full access confirmation', () => { browser = await chromium.launch(executablePath === undefined ? {} : { executablePath }) // Keep the product default Chinese locale: the golden pins the actual // registered dictionary rather than a test-local translation callback. - page = await browser.newPage({ viewport: { width: 1680, height: 1000 } }) + page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: ZH_BROWSER_LOCALE }) tripwire = watchConsole(page) await page.goto(scaffold.baseUrl, { waitUntil: 'load' }) await page.waitForSelector('[class*="frame"]', { timeout: 30_000 }) diff --git a/apps/web/tests/models-settings.e2e.ts b/apps/web/tests/models-settings.e2e.ts index 9c2215ed7f..c46127c9db 100644 --- a/apps/web/tests/models-settings.e2e.ts +++ b/apps/web/tests/models-settings.e2e.ts @@ -20,7 +20,7 @@ import { assertFixtureInventory, captureStableAria, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { saveFailureShot } from './support.ts' +import { ZH_BROWSER_LOCALE, saveFailureShot } from './support.ts' const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/models-settings', import.meta.url)) const EMPTY_EXPECTED = join(SNAPSHOT_DIR, 'empty.expected.md') @@ -37,7 +37,8 @@ describe('web e2e: Models settings page configures a dormant provider', () => { beforeAll(async () => { scaffold = await launchWebScaffold({}) browser = await chromium.launch() - page = await browser.newPage({ viewport: { width: 1680, height: 1000 } }) + // The scenario asserts the shipped Chinese copy, so the browser asks for it. + page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: ZH_BROWSER_LOCALE }) tripwire = watchConsole(page) await page.goto(scaffold.baseUrl, { waitUntil: 'load' }) await page.waitForSelector('[class*="frame"]', { timeout: 30_000 }) diff --git a/apps/web/tests/onboarding-deepseek-config.e2e.ts b/apps/web/tests/onboarding-deepseek-config.e2e.ts index 62dd129982..f1cbc77581 100644 --- a/apps/web/tests/onboarding-deepseek-config.e2e.ts +++ b/apps/web/tests/onboarding-deepseek-config.e2e.ts @@ -12,7 +12,7 @@ import { assertFixtureInventory, captureStableAria, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { saveFailureShot } from './support.ts' +import { ZH_BROWSER_LOCALE, saveFailureShot } from './support.ts' const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/onboarding-deepseek-config', import.meta.url)) const MISSING_EXPECTED = join(SNAPSHOT_DIR, 'missing.expected.md') @@ -28,7 +28,8 @@ describe.skipIf(MODE === 'record')('web e2e: first-run DeepSeek credential setup beforeAll(async () => { scaffold = await launchWebScaffold({ deepSeekMissingCredential: true }) browser = await chromium.launch() - page = await browser.newPage({ viewport: { width: 1440, height: 960 } }) + // The scenario asserts the shipped Chinese copy, so the browser asks for it. + page = await browser.newPage({ viewport: { width: 1440, height: 960 }, locale: ZH_BROWSER_LOCALE }) tripwire = watchConsole(page) page.on('console', message => browserConsole.push(message.text())) await page.goto(scaffold.baseUrl, { waitUntil: 'load' }) diff --git a/apps/web/tests/settings-chrome.e2e.ts b/apps/web/tests/settings-chrome.e2e.ts index a5aced7de2..c9d6bc3367 100644 --- a/apps/web/tests/settings-chrome.e2e.ts +++ b/apps/web/tests/settings-chrome.e2e.ts @@ -18,7 +18,7 @@ import { acknowledgeReloadConnectionLoss, assertFixtureInventory, captureStableAria, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { saveFailureShot } from './support.ts' +import { ZH_BROWSER_LOCALE, saveFailureShot } from './support.ts' const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/settings-chrome', import.meta.url)) const DIALOG_EXPECTED = join(SNAPSHOT_DIR, 'dialog.expected.md') @@ -33,7 +33,9 @@ describe('web e2e: settings modal and General preferences', () => { beforeAll(async () => { scaffold = await launchWebScaffold({}) browser = await chromium.launch() - page = await browser.newPage({ viewport: { width: 1680, height: 1000 } }) + // Chinese browser: the shared page asserts the localized settings surface + // the client derives from it (the English default has its own spec below). + page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: ZH_BROWSER_LOCALE }) tripwire = watchConsole(page) await page.goto(scaffold.baseUrl, { waitUntil: 'load' }) await page.waitForSelector('[class*="frame"]', { timeout: 30_000 }) @@ -215,6 +217,27 @@ describe('web e2e: settings modal and General preferences', () => { expect(tripwire.pageErrors).toEqual([]) }, 90_000) + it('opens an English browser in English without any stored preference', async () => { + // A second page under a different browser language: nothing is persisted + // for it, so the settings surface must follow the browser rather than the + // product fallback the shared zh page shows. + const enPage = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: 'en-US' }) + const enTripwire = watchConsole(enPage) + onTestFailed(() => saveFailureShot(enPage, 'web-e2e-settings-browser-language')) + try { + await enPage.goto(scaffold.baseUrl, { waitUntil: 'load' }) + await enPage.waitForSelector('[class*="frame"]', { timeout: 30_000 }) + expect(await enPage.evaluate(() => localStorage.getItem('dsh.locale'))).toBeNull() + await enPage.getByRole('button', { name: 'Settings', exact: true }).click() + const dialog = enPage.getByRole('dialog', { name: 'Settings' }) + await dialog.waitFor({ timeout: 10_000 }) + await dialog.getByRole('button', { name: 'English' }).waitFor({ timeout: 10_000 }) + expect(enTripwire.pageErrors).toEqual([]) + } finally { + await enPage.close() + } + }, 90_000) + it.skipIf(MODE === 'record')('keeps the fixture inventory closed', async () => { expect(tripwire.warnings).toEqual([]) await assertFixtureInventory(SNAPSHOT_DIR, ['dialog.expected.md']) diff --git a/apps/web/tests/support.ts b/apps/web/tests/support.ts index aded1aa406..d03915f851 100644 --- a/apps/web/tests/support.ts +++ b/apps/web/tests/support.ts @@ -9,11 +9,18 @@ export const DIST_INDEX = fileURLToPath(new URL('../dist/index.html', import.met export const REPO_ROOT = fileURLToPath(new URL('../../..', import.meta.url)) +/** + * Browser language a page must advertise to boot into the product's Chinese + * surface: with no stored preference the client derives its initial locale + * from the browser, and Playwright's default browser asks for English. + */ +export const ZH_BROWSER_LOCALE = 'zh-CN' + /** * Open the standard browser-test page with English selected before client * boot. This keeps role locators and goldens deterministic across localized - * component migrations; the settings locale scenario deliberately bypasses - * this helper to cover the product's default Chinese state. + * component migrations; the scenarios asserting the Chinese surface bypass + * this helper and advertise {@link ZH_BROWSER_LOCALE} instead. * @param browser - Playwright browser owning the page. * @param height - Viewport height; width is fixed to the lane baseline. * @returns the initialized page. diff --git a/packages/client/locale/README.i18n.yaml b/packages/client/locale/README.i18n.yaml index 05f332a9a1..0f4dd20268 100644 --- a/packages/client/locale/README.i18n.yaml +++ b/packages/client/locale/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/locale/README.md -README.md: c2adbcabc77def740094288da4643032873aa5b8 -README.zh.md: c6ecb31e21d7513a4e7d579b17588107ccd7ea59 +README.md: 7f780092af9bc7079cc5080c06e986bef2dfdbce +README.zh.md: 62c037977115d33b834fe60b042431e44d208524 diff --git a/packages/client/locale/README.md b/packages/client/locale/README.md index c2adbcabc7..7f780092af 100644 --- a/packages/client/locale/README.md +++ b/packages/client/locale/README.md @@ -2,7 +2,7 @@ English | [中文](README.zh.md) -Locale plugin: LocaleService — the browser locale preference (`zh`/`en`, persisted under `dsh.locale`; `locale/change` fires on switches only) plus the ns×locale dictionary registry (typed `register(ns, {zh, en})` checked against `LocaleNamespaceMap`, `bind(ns)`→`TranslateNS`; lookup chain ns → common → zh → key). The service implements the slot system's `LocaleFace` and installs itself through `ctx.slots.installLocale`, backing the framework-injected `t` standard seat (`Translate`/`TranslateNS` are ui-slots types; import them from there — this package only re-exports for dictionary owners' convenience). +Locale plugin: LocaleService — the browser locale preference (`zh`/`en`, persisted under `dsh.locale`; with nothing persisted a fresh browser opens in the language `navigator` asks for — matched on the primary subtag, `zh` when it asks for none this app ships; `locale/change` fires on switches only) plus the ns×locale dictionary registry (typed `register(ns, {zh, en})` checked against `LocaleNamespaceMap`, `bind(ns)`→`TranslateNS`; lookup chain ns → common → zh → key). The service implements the slot system's `LocaleFace` and installs itself through `ctx.slots.installLocale`, backing the framework-injected `t` standard seat (`Translate`/`TranslateNS` are ui-slots types; import them from there — this package only re-exports for dictionary owners' convenience). ## Model Experience diff --git a/packages/client/locale/README.zh.md b/packages/client/locale/README.zh.md index c6ecb31e21..62c0379771 100644 --- a/packages/client/locale/README.zh.md +++ b/packages/client/locale/README.zh.md @@ -2,7 +2,7 @@ [English](README.md) | 中文 -locale 插件:LocaleService——浏览器 locale 偏好(`zh`/`en`,以 `dsh.locale` 持久化;`locale/change` 仅在切换语言时触发),加上 ns×locale 字典注册表(类型化 `register(ns, {zh, en})` 按 `LocaleNamespaceMap` 校验,`bind(ns)`→`TranslateNS`;查找链 ns → common → zh → key)。该服务实现 slot 系统的 `LocaleFace` 并经 `ctx.slots.installLocale` 自行安装,支撑框架注入的 `t` 标准席位(`Translate`/`TranslateNS` 是 ui-slots 的类型;请从那里导入——本包的再导出仅为字典所有者提供便利)。 +locale 插件:LocaleService——浏览器 locale 偏好(`zh`/`en`,以 `dsh.locale` 持久化;未持久化偏好时,全新浏览器以 `navigator` 请求的语言开场——按主子标签匹配,若其请求的语言本应用都不提供则为 `zh`;`locale/change` 仅在切换语言时触发),加上 ns×locale 字典注册表(类型化 `register(ns, {zh, en})` 按 `LocaleNamespaceMap` 校验,`bind(ns)`→`TranslateNS`;查找链 ns → common → zh → key)。该服务实现 slot 系统的 `LocaleFace` 并经 `ctx.slots.installLocale` 自行安装,支撑框架注入的 `t` 标准席位(`Translate`/`TranslateNS` 是 ui-slots 的类型;请从那里导入——本包的再导出仅为字典所有者提供便利)。 ## 模型体验 diff --git a/packages/client/locale/src/client/index.ts b/packages/client/locale/src/client/index.ts index 65eeddb9e2..83fa3a48a9 100644 --- a/packages/client/locale/src/client/index.ts +++ b/packages/client/locale/src/client/index.ts @@ -83,7 +83,7 @@ declare module 'cordis' { } } -/** Fallback locale consulted after the active locale misses (also the default). */ +/** Fallback locale consulted after the active locale misses (also the last-resort initial locale). */ export const FALLBACK_LOCALE: LocaleId = 'zh' /** Shared namespace for shell-level texts. */ @@ -123,7 +123,7 @@ export class LocaleService { */ constructor(ctx: Context) { this.ctx = ctx - this.snapshot = Object.freeze({ active: restorePreference(), locales: LOCALES, revision: 0 }) + this.snapshot = Object.freeze({ active: resolveInitialLocale(), locales: LOCALES, revision: 0 }) } /** @@ -288,17 +288,45 @@ export class LocaleService { } } -/** Read the persisted locale id; unknown or unreadable values fall back to zh. */ -function restorePreference(): LocaleId { +/** + * The locale a fresh service opens with: an explicit preference the user + * already chose wins over the browser's own language, which in turn wins over + * {@link FALLBACK_LOCALE} (non-browser boots and browsers set to a language + * this app does not ship). + */ +function resolveInitialLocale(): LocaleId { + return restorePreference() ?? detectBrowserLocale() ?? FALLBACK_LOCALE +} + +/** Read the persisted locale id; unknown or unreadable values read as no preference. */ +function restorePreference(): LocaleId | undefined { // Non-browser runs (node e2e booting the client tree) have no localStorage. - if (typeof localStorage === 'undefined') return FALLBACK_LOCALE + if (typeof localStorage === 'undefined') return undefined try { const stored = localStorage.getItem(STORAGE_KEY) if (stored === 'zh' || stored === 'en') return stored } catch { - // Storage access can throw (privacy mode); the default below covers it. + // Storage access can throw (privacy mode); an unreadable store simply + // records no preference, and the browser language decides instead. } - return FALLBACK_LOCALE + return undefined +} + +/** + * The first shipped locale the browser asks for, matched on the primary + * subtag so every regional variant lands on its language (`zh-Hans-CN` -> zh, + * `en-GB` -> en). `navigator.language` trails the ordered `languages` list + * because a browser may expose only the former. + */ +function detectBrowserLocale(): LocaleId | undefined { + // Non-browser runs (node e2e booting the client tree) have no navigator. + if (typeof navigator === 'undefined') return undefined + for (const tag of [...navigator.languages, navigator.language]) { + const primary = tag.toLowerCase().split('-')[0] + const match = LOCALES.find(locale => locale.id === primary) + if (match) return match.id + } + return undefined } /** Persist the locale id; storage failures are non-fatal (preference resets next boot). */ diff --git a/packages/client/locale/tests/apply.spec.ts b/packages/client/locale/tests/apply.spec.ts index c603cbc5f0..a3007f8c78 100644 --- a/packages/client/locale/tests/apply.spec.ts +++ b/packages/client/locale/tests/apply.spec.ts @@ -2,7 +2,7 @@ * Language row registration, snapshot projection into the row store, and * recovery after an HMR collapse of the declaring entry. */ import { Context } from 'cordis' -import { describe, expect, it } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { apply, inject, SETTINGS_NS } from '@deepseek-ai/dsh-client-locale/client' import type { LanguageRowInjected, LocaleService } from '@deepseek-ai/dsh-client-locale/client' @@ -36,6 +36,16 @@ function faceOf(slots: SlotsService) { } describe('locale apply', () => { + // A fresh service opens in the browser's language, so these wiring specs + // pin one to keep their zh baseline independent of the test environment. + beforeEach(() => { + vi.stubGlobal('navigator', { languages: ['zh-CN'], language: 'zh-CN' }) + }) + + afterEach(() => { + vi.unstubAllGlobals() + }) + it('declares the slot service', () => { expect(inject).toEqual(['slots']) }) diff --git a/packages/client/locale/tests/locale.spec.ts b/packages/client/locale/tests/locale.spec.ts index 80fe699e34..fcab3683bc 100644 --- a/packages/client/locale/tests/locale.spec.ts +++ b/packages/client/locale/tests/locale.spec.ts @@ -1,5 +1,5 @@ // @vitest-environment jsdom -import { beforeEach, describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { Context } from 'cordis' import type { LocaleSnapshot } from '@deepseek-ai/dsh-client-locale/client' import { LocaleService, STORAGE_KEY } from '@deepseek-ai/dsh-client-locale/client' @@ -11,9 +11,20 @@ const make = (): { ctx: Context; svc: LocaleService; events: LocaleSnapshot[] } return { ctx, svc: new LocaleService(ctx), events } } +/** Pin the browser environment a fresh service reads its initial locale from. */ +const stubLanguages = (...tags: string[]): void => { + vi.stubGlobal('navigator', { languages: tags, language: tags[0] ?? '' }) +} + describe('LocaleService', () => { beforeEach(() => { localStorage.clear() + // A Chinese browser is the baseline these specs assert their zh state on. + stubLanguages('zh-CN') + }) + + afterEach(() => { + vi.unstubAllGlobals() }) it('translates through the active-locale -> zh -> key chain', () => { @@ -132,23 +143,45 @@ describe('LocaleService', () => { expect(() => { svc.setLocale('fr') }).toThrow('not registered') }) - it('restores a persisted locale and falls back to zh on garbage', () => { + it('restores a persisted locale over the browser language, and garbage reads as no preference', () => { localStorage.setItem(STORAGE_KEY, 'en') expect(make().svc.getLocale().active).toBe('en') localStorage.setItem(STORAGE_KEY, 'fr') expect(make().svc.getLocale().active).toBe('zh') }) - it('runs without localStorage (node boots): defaults on read, no-op on write', () => { + it('opens in the browser language when nothing is persisted, matching regional variants on their primary subtag', () => { + stubLanguages('en-GB', 'zh-CN') + expect(make().svc.getLocale().active).toBe('en') + stubLanguages('zh-Hant-TW') + expect(make().svc.getLocale().active).toBe('zh') + // An unshipped language walks the list to the first one this app ships. + stubLanguages('fr-FR', 'en-US') + expect(make().svc.getLocale().active).toBe('en') + // Only `language` populated (browsers that expose no ordered list). + vi.stubGlobal('navigator', { languages: [], language: 'en-US' }) + expect(make().svc.getLocale().active).toBe('en') + // No shipped language anywhere in the browser's preferences: zh remains + // the product default rather than an arbitrary near-match. + stubLanguages('fr-FR', 'de') + expect(make().svc.getLocale().active).toBe('zh') + }) + + it('runs without localStorage or navigator (node boots): defaults on read, no-op on write', () => { vi.stubGlobal('localStorage', undefined) - try { - const { svc } = make() - expect(svc.getLocale().active).toBe('zh') - svc.setLocale('en') - expect(svc.getLocale().active).toBe('en') - } finally { - vi.unstubAllGlobals() - } + vi.stubGlobal('navigator', undefined) + const { svc } = make() + expect(svc.getLocale().active).toBe('zh') + svc.setLocale('en') + expect(svc.getLocale().active).toBe('en') + }) + + it('keeps the browser language out of the way once a preference exists', () => { + stubLanguages('en-US') + const { svc } = make() + svc.setLocale('zh') + expect(localStorage.getItem(STORAGE_KEY)).toBe('zh') + expect(make().svc.getLocale().active).toBe('zh') }) it('exposes the two shipped locales with self-described labels', () => { diff --git a/packages/client/test-runtime/src/index.ts b/packages/client/test-runtime/src/index.ts index 7100e1595e..6e227539cd 100644 --- a/packages/client/test-runtime/src/index.ts +++ b/packages/client/test-runtime/src/index.ts @@ -38,6 +38,7 @@ export { TestWorkspaces } from './workspaces.ts' export { conversationSnapshot, workspaceListState } from './fixtures.ts' export type { SessionBehaviorOverrides, SessionFixture, Stabilizer } from './fixtures.ts' export { makeTranslate } from './translate.ts' +export { pinBrowserLanguages } from './locale-env.ts' /** Erased register face for the internal root call (the public declare seam holds the typing). */ type ErasedRegister = (options: object, component: unknown) => () => void diff --git a/packages/client/test-runtime/src/locale-env.ts b/packages/client/test-runtime/src/locale-env.ts new file mode 100644 index 0000000000..ff961e3888 --- /dev/null +++ b/packages/client/test-runtime/src/locale-env.ts @@ -0,0 +1,25 @@ +/** + * Browser-language pin for specs that assert localized copy. A fresh + * LocaleService with no stored preference opens in the language `navigator` + * asks for, and jsdom reports the runner's own (`en-US`) — so a spec asserting + * the product's Chinese copy states the browser it assumes instead of + * inheriting the machine's. + */ + +/** + * Override `navigator.languages`/`navigator.language` for the current spec. + * @param primary - most preferred BCP 47 tag; also becomes `navigator.language`. + * @param rest - further tags in preference order. + * @returns restore function handing the properties back to the environment. + */ +export function pinBrowserLanguages(primary: string, ...rest: string[]): () => void { + Object.defineProperty(navigator, 'languages', { value: [primary, ...rest], configurable: true }) + Object.defineProperty(navigator, 'language', { value: primary, configurable: true }) + return () => { + // Deleting the own properties uncovers the environment's own accessors + // again (Navigator declares both readonly, hence the erased receiver). + const own = navigator as unknown as Record + delete own.languages + delete own.language + } +} diff --git a/packages/client/ui-conversation/package.json b/packages/client/ui-conversation/package.json index 8a9173982b..22da06fb9c 100644 --- a/packages/client/ui-conversation/package.json +++ b/packages/client/ui-conversation/package.json @@ -51,6 +51,7 @@ "devDependencies": { "@deepseek-ai/dsh-client-locale": "workspace:^", "@deepseek-ai/dsh-client-runtime": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:^", "@deepseek-ai/dsh-goal": "workspace:^", "@deepseek-ai/dsh-plan-mode": "workspace:^", "@deepseek-ai/dsh-client-ui-layout": "workspace:^", diff --git a/packages/client/ui-conversation/tests/apply-inject.spec.tsx b/packages/client/ui-conversation/tests/apply-inject.spec.tsx index 9806850db2..bb0b1ce6f3 100644 --- a/packages/client/ui-conversation/tests/apply-inject.spec.tsx +++ b/packages/client/ui-conversation/tests/apply-inject.spec.tsx @@ -14,8 +14,8 @@ // guards would mask. Rendering-path acceptance lives in // chat-toolview-slot.spec.tsx. -import { describe, expect, it, vi } from 'vitest' -import { SlotTestRuntime } from '@deepseek-ai/dsh-client-test-runtime' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import type { SessionBehaviorOverrides } from '@deepseek-ai/dsh-client-test-runtime' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import type { ISession, SessionId } from '@deepseek-ai/dsh-client-runtime/client' @@ -25,6 +25,12 @@ import type { } from '@deepseek-ai/dsh-client-ui-conversation/client' import type { createChatStore } from '../src/client/stores.ts' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + const ROOT = 'root-1' as SessionId type ChatInstance = ReturnType['create']> diff --git a/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx b/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx index a6c48e5ab8..9c00621809 100644 --- a/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx +++ b/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx @@ -24,9 +24,15 @@ import { cleanup, fireEvent, waitFor, within } from '@testing-library/react' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import type { ISession, SessionId, TodoItem, ToolResultNode } from '@deepseek-ai/dsh-client-runtime/client' import type { PropsRenderSlots } from '@deepseek-ai/dsh-client-ui-slots' -import { SlotTestRuntime } from '@deepseek-ai/dsh-client-test-runtime' +import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject } from '@deepseek-ai/dsh-client-ui-conversation/client' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + const SID = 's1' as SessionId /** jsdom has no ResizeObserver; the composer seat publishes its height through one. */ diff --git a/packages/client/ui-conversation/tests/chat-apply.spec.tsx b/packages/client/ui-conversation/tests/chat-apply.spec.tsx index 239f690998..d17c6a022a 100644 --- a/packages/client/ui-conversation/tests/chat-apply.spec.tsx +++ b/packages/client/ui-conversation/tests/chat-apply.spec.tsx @@ -8,13 +8,19 @@ // machinery spec (chat-toolview-slot.spec.tsx) and the shell e2e; this spec // stops at the assembly surface. -import { describe, expect, it, vi } from 'vitest' -import { SlotTestRuntime } from '@deepseek-ai/dsh-client-test-runtime' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { resolveSlotLabel } from '@deepseek-ai/dsh-client-ui-slots' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import type { SessionId } from '@deepseek-ai/dsh-client-runtime/client' import { apply, inject } from '@deepseek-ai/dsh-client-ui-conversation/client' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + const ROOT = 'root-1' as SessionId const CHILD = 'child-1' as SessionId diff --git a/packages/client/ui-models/package.json b/packages/client/ui-models/package.json index a649e1308f..025cc4c440 100644 --- a/packages/client/ui-models/package.json +++ b/packages/client/ui-models/package.json @@ -51,6 +51,7 @@ "@deepseek-ai/dsh-client-locale": "workspace:^", "@deepseek-ai/dsh-client-runtime": "workspace:^", "@deepseek-ai/dsh-client-schema-form": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:^", "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", "@deepseek-ai/dsh-client-ui-settings": "workspace:^", "@deepseek-ai/dsh-client-ui-slots": "workspace:^", diff --git a/packages/client/ui-models/tests/apply.spec.ts b/packages/client/ui-models/tests/apply.spec.ts index 6c64a93058..e4e7287502 100644 --- a/packages/client/ui-models/tests/apply.spec.ts +++ b/packages/client/ui-models/tests/apply.spec.ts @@ -1,13 +1,20 @@ /** Models section registration: declaration-aware deferral, the locale-following label thunk, and HMR recovery. */ import { Context } from 'cordis' -import { describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { resolveSlotLabel } from '@deepseek-ai/dsh-client-ui-slots' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' +import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject, refreshIfLoaded } from '@deepseek-ai/dsh-client-ui-models/client' import { ModelsSection } from '../src/client/ModelsSection.tsx' import { DeepSeekOnboardingDialog } from '../src/client/DeepSeekOnboardingDialog.tsx' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + async function bench() { const ctx = new Context() await ctx.plugin(SlotsService).await() diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index af85a9954f..a5f78c9256 100644 --- a/packages/client/ui-settings-general/package.json +++ b/packages/client/ui-settings-general/package.json @@ -48,6 +48,7 @@ "devDependencies": { "@deepseek-ai/dsh-client-locale": "workspace:^", "@deepseek-ai/dsh-client-runtime": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:^", "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", "@deepseek-ai/dsh-client-ui-settings": "workspace:^", "@deepseek-ai/dsh-client-ui-slots": "workspace:^", diff --git a/packages/client/ui-settings-general/tests/apply.spec.ts b/packages/client/ui-settings-general/tests/apply.spec.ts index 506a69699a..0089bc3467 100644 --- a/packages/client/ui-settings-general/tests/apply.spec.ts +++ b/packages/client/ui-settings-general/tests/apply.spec.ts @@ -1,13 +1,20 @@ /** Ownerless-copy registrations: the four seats, the dictionaries, thunked labels, and HMR recovery. */ import { Context } from 'cordis' -import { describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { resolveSlotLabel } from '@deepseek-ai/dsh-client-ui-slots' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' +import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject } from '@deepseek-ai/dsh-client-ui-settings-general/client' import { CloseLabel, HeaderContent, TriggerContent } from '../src/client/chrome.tsx' import { GeneralSection } from '../src/client/GeneralSection.tsx' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + /** The four seats this plugin fills (slot name → expected component). */ const SEATS = [ ['settings.trigger', TriggerContent], diff --git a/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx b/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx index 5755882071..dece40302b 100644 --- a/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx +++ b/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx @@ -8,12 +8,18 @@ * holes (sidebar.workspaces / sidebar.settings) have no registrant here, so * the snapshots pin the shell chrome itself. */ -import { afterEach, describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { act, cleanup, waitFor } from '@testing-library/react' -import { SlotTestRuntime } from '@deepseek-ai/dsh-client-test-runtime' +import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import { apply, inject } from '@deepseek-ai/dsh-client-ui-sidebar/client' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + afterEach(cleanup) /** diff --git a/packages/client/ui-slash/tests/apply.spec.ts b/packages/client/ui-slash/tests/apply.spec.ts index a0f42c6a22..eb15feaa54 100644 --- a/packages/client/ui-slash/tests/apply.spec.ts +++ b/packages/client/ui-slash/tests/apply.spec.ts @@ -6,13 +6,20 @@ * sessionId, and unregisters on fiber teardown. */ import { Context } from 'cordis' -import { describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' +import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { createScope, scopeOf, SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import type { SessionId } from '@deepseek-ai/dsh-client-runtime/client' import { apply, inject, SlashService } from '@deepseek-ai/dsh-client-ui-slash/client' import type { MenuViewInjected } from '@deepseek-ai/dsh-client-ui-slash/client' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + const sid = (k: string): SessionId => k as SessionId async function bench() { diff --git a/packages/client/ui-theme/package.json b/packages/client/ui-theme/package.json index e60289b52d..7046f3391b 100644 --- a/packages/client/ui-theme/package.json +++ b/packages/client/ui-theme/package.json @@ -44,6 +44,7 @@ "devDependencies": { "@deepseek-ai/dsh-client-locale": "workspace:^", "@deepseek-ai/dsh-client-runtime": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:^", "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", "@deepseek-ai/dsh-client-ui-slots": "workspace:^", "@deepseek-ai/dsh-invariants": "workspace:^", diff --git a/packages/client/ui-theme/tests/apply.spec.ts b/packages/client/ui-theme/tests/apply.spec.ts index ea9da5cfde..59e6e8924e 100644 --- a/packages/client/ui-theme/tests/apply.spec.ts +++ b/packages/client/ui-theme/tests/apply.spec.ts @@ -2,14 +2,21 @@ * locale service, declaration-aware Appearance row registration, snapshot * projection into the row store, and HMR collapse recovery. */ import { Context } from 'cordis' -import { describe, expect, it } from 'vitest' +import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' +import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject, SETTINGS_NS } from '@deepseek-ai/dsh-client-ui-theme/client' import type { AppearanceRowInjected, ThemeService } from '@deepseek-ai/dsh-client-ui-theme/client' import { AppearanceRow } from '../src/client/AppearanceRow.tsx' import type { createAppearanceRowStore } from '../src/client/settings-store.ts' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + const SLOT = 'settings.general.item' async function bench() { diff --git a/packages/client/ui-workspace/tests/apply.spec.ts b/packages/client/ui-workspace/tests/apply.spec.ts index 976bff655f..28153e607d 100644 --- a/packages/client/ui-workspace/tests/apply.spec.ts +++ b/packages/client/ui-workspace/tests/apply.spec.ts @@ -1,12 +1,19 @@ import { Context } from 'cordis' -import { describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' +import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject } from '@deepseek-ai/dsh-client-ui-workspace/client' import type { WorkspaceBrowserInjected, WorkspacePickerInjected } from '@deepseek-ai/dsh-client-ui-workspace/client' import { WorkspaceBrowser } from '../src/client/WorkspaceBrowser.tsx' import { WorkspacePicker } from '../src/client/WorkspacePicker.tsx' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + async function bench() { const ctx = new Context() await ctx.plugin(SlotsService).await() diff --git a/packages/client/ui-workspace/tests/rename-assembly.spec.tsx b/packages/client/ui-workspace/tests/rename-assembly.spec.tsx index 200e3bbd21..9138b88a6c 100644 --- a/packages/client/ui-workspace/tests/rename-assembly.spec.tsx +++ b/packages/client/ui-workspace/tests/rename-assembly.spec.tsx @@ -14,10 +14,16 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { cleanup, fireEvent, waitFor, within } from '@testing-library/react' import type { ISession, SessionId, WorkspaceId } from '@deepseek-ai/dsh-client-runtime/client' import type { PropsRenderSlots } from '@deepseek-ai/dsh-client-ui-slots' -import { SlotTestRuntime } from '@deepseek-ai/dsh-client-test-runtime' +import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import { apply, inject } from '@deepseek-ai/dsh-client-ui-workspace/client' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + const SID = 's1' as SessionId afterEach(cleanup) diff --git a/packages/host/directory-picker-browse/package.json b/packages/host/directory-picker-browse/package.json index a9f3fc2090..ab0cb593dc 100644 --- a/packages/host/directory-picker-browse/package.json +++ b/packages/host/directory-picker-browse/package.json @@ -49,6 +49,7 @@ "devDependencies": { "@deepseek-ai/dsh-client-locale": "workspace:^", "@deepseek-ai/dsh-client-runtime": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:^", "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", "@deepseek-ai/dsh-client-ui-slots": "workspace:^", "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", diff --git a/packages/host/directory-picker-browse/tests/client-flow.spec.tsx b/packages/host/directory-picker-browse/tests/client-flow.spec.tsx index 31ec5a4927..57e8c009cb 100644 --- a/packages/host/directory-picker-browse/tests/client-flow.spec.tsx +++ b/packages/host/directory-picker-browse/tests/client-flow.spec.tsx @@ -1,14 +1,21 @@ // @vitest-environment jsdom import { Context } from 'cordis' -import { afterEach, describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { cleanup, render, screen } from '@testing-library/react' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import type { DirectoryListing } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' +import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import type { DirectoryFlowOwnerProps } from '@deepseek-ai/dsh-client-ui-workspace/client' import { apply, inject } from '../src/client/index.ts' import { BrowseDirectoryFlow } from '../src/client/flow.ts' +// The service reads its initial locale from the browser; these specs assert +// the shipped Chinese copy, so they state the browser they assume. +let restoreLanguages: () => void +beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) +afterEach(() => { restoreLanguages() }) + afterEach(cleanup) const HOLES = ['conversation.hero.workspace.directoryFlow', 'sidebar.workspaces.directoryFlow'] as const diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b6a697dbb7..823fbdbf3e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1218,6 +1218,9 @@ importers: '@deepseek-ai/dsh-client-runtime': specifier: workspace:^ version: link:../runtime + '@deepseek-ai/dsh-client-test-runtime': + specifier: workspace:^ + version: link:../test-runtime '@deepseek-ai/dsh-client-ui-layout': specifier: workspace:^ version: link:../ui-layout @@ -1386,6 +1389,9 @@ importers: '@deepseek-ai/dsh-client-schema-form': specifier: workspace:^ version: link:../schema-form + '@deepseek-ai/dsh-client-test-runtime': + specifier: workspace:^ + version: link:../test-runtime '@deepseek-ai/dsh-client-ui-primitives': specifier: workspace:^ version: link:../ui-primitives @@ -1641,6 +1647,9 @@ importers: '@deepseek-ai/dsh-client-runtime': specifier: workspace:^ version: link:../runtime + '@deepseek-ai/dsh-client-test-runtime': + specifier: workspace:^ + version: link:../test-runtime '@deepseek-ai/dsh-client-ui-primitives': specifier: workspace:^ version: link:../ui-primitives @@ -1797,6 +1806,9 @@ importers: '@deepseek-ai/dsh-client-runtime': specifier: workspace:^ version: link:../runtime + '@deepseek-ai/dsh-client-test-runtime': + specifier: workspace:^ + version: link:../test-runtime '@deepseek-ai/dsh-client-ui-primitives': specifier: workspace:^ version: link:../ui-primitives @@ -3308,6 +3320,9 @@ importers: '@deepseek-ai/dsh-client-runtime': specifier: workspace:^ version: link:../../client/runtime + '@deepseek-ai/dsh-client-test-runtime': + specifier: workspace:^ + version: link:../../client/test-runtime '@deepseek-ai/dsh-client-ui-primitives': specifier: workspace:^ version: link:../../client/ui-primitives From e5563ae4332f5a22b09b35cc5e76c6cd4d68bac3 Mon Sep 17 00:00:00 2001 From: creatixchu Date: Fri, 31 Jul 2026 15:49:59 +0800 Subject: [PATCH 16/18] fix(locale): gate browser detection on window and tolerate a missing languages list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Node >= 21 exposes a global `navigator` reporting the machine's own language, so gating detection on `navigator` let a non-browser boot of the client tree resolve to `en` instead of the documented fallback; `window` is the browser test. `navigator.languages` is spec-required but absent on some embedders and older WebViews, where spreading it would throw at boot, so the walk tolerates its absence and `navigator.language` covers that host. The per-spec pin boilerplate collapses into one suite-level `usePinnedBrowserLanguages('zh-CN')`, which owns the rationale in dsh-client-test-runtime, and the English-browser e2e scenario now clears the console warnings channel too — its page has no closing inventory spec. --- ...1-browser-derived-initial-locale.i18n.yaml | 4 ++-- ...26-07-31-browser-derived-initial-locale.md | 6 ++++-- ...07-31-browser-derived-initial-locale.zh.md | 6 ++++-- apps/web/tests/settings-chrome.e2e.ts | 3 +++ packages/client/locale/src/client/index.ts | 17 +++++++++++----- packages/client/locale/tests/locale.spec.ts | 20 +++++++++++++++---- packages/client/test-runtime/src/index.ts | 2 +- .../client/test-runtime/src/locale-env.ts | 18 ++++++++++------- .../tests/apply-inject.spec.tsx | 8 +++----- .../tests/assembly-surfaces.spec.tsx | 6 ++---- .../ui-conversation/tests/chat-apply.spec.tsx | 8 +++----- packages/client/ui-models/tests/apply.spec.ts | 8 +++----- .../ui-settings-general/tests/apply.spec.ts | 8 +++----- .../tests/sidebar-snapshot.spec.tsx | 8 +++----- packages/client/ui-slash/tests/apply.spec.ts | 8 +++----- packages/client/ui-theme/tests/apply.spec.ts | 8 +++----- .../client/ui-workspace/tests/apply.spec.ts | 8 +++----- .../tests/rename-assembly.spec.tsx | 6 ++---- .../tests/client-flow.spec.tsx | 8 +++----- 19 files changed, 84 insertions(+), 76 deletions(-) diff --git a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml index 65fdff8572..d1fb6cb6c7 100644 --- a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md -2026-07-31-browser-derived-initial-locale.md: 7668171f32642248cc0be92741eb3dc90e0669cc -2026-07-31-browser-derived-initial-locale.zh.md: 568737285e3c00d6c9792a0e6e79e38428db18c3 +2026-07-31-browser-derived-initial-locale.md: 0c49a6bbfec0ab33a5aa3ce53dde0cac747f3816 +2026-07-31-browser-derived-initial-locale.zh.md: c013d24dcd3bb49d176eaddd42ff41dde320ff1f diff --git a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md index 7668171f32..0c49a6bbfe 100644 --- a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md +++ b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.md @@ -12,7 +12,9 @@ The Settings Language row opened every first visit in Chinese: `LocaleService` r **The initial locale resolves through three ordered sources: the persisted preference, then the browser, then `FALLBACK_LOCALE`.** `resolveInitialLocale()` in `packages/client/locale/src/client/index.ts` runs at service construction and is the only place the order is expressed; `restorePreference()` now returns `LocaleId | undefined` (an absent, unparseable, or unreachable store reads as *no preference*) so the next source can speak. -**Browser matching is on the primary subtag, over the ordered list.** `detectBrowserLocale()` walks `[...navigator.languages, navigator.language]` and returns the first entry whose primary subtag names a shipped locale, so `zh-Hans-CN` and `zh-TW` both land on `zh` and `en-GB` on `en`, while a browser asking only for languages this app does not ship (`fr`, `de`) yields nothing and leaves `FALLBACK_LOCALE` in charge. `navigator.language` trails the list because a browser may expose only the former; a runtime without `navigator` at all (node booting the client tree) resolves to the fallback like any unresolvable case. +**Browser matching is on the primary subtag, over the ordered list.** `detectBrowserLocale()` walks `[...(navigator.languages ?? []), navigator.language]` and returns the first entry whose primary subtag names a shipped locale, so `zh-Hans-CN` and `zh-TW` both land on `zh` and `en-GB` on `en`, while a browser asking only for languages this app does not ship (`fr`, `de`) yields nothing and leaves `FALLBACK_LOCALE` in charge. `navigator.language` trails the list and covers its absence on hosts that ship a Navigator without `languages` — the DOM lib types it as always present, so that tolerance carries a narrow lint exception, the same environment-boundary distrust the `localStorage` guards already express. + +**`window`, not `navigator`, is the browser test.** Node ≥ 21 exposes a global `navigator` reporting the machine's own language (`en-US` on the CI runners), so gating on `navigator` would have let a node boot of the client tree resolve to `en` instead of the documented fallback. Gating on `window` keeps every non-browser run on `FALLBACK_LOCALE`. **An explicit choice is permanent.** `setLocale` persistence is untouched, and the persisted value is consulted first, so a user who picked a language keeps it even when travelling between browser profiles or system languages. Nothing writes the detected locale back to storage: detection is re-derived every boot and stays invisible to the "has the user chosen?" question. @@ -30,5 +32,5 @@ The Settings Language row opened every first visit in Chinese: `LocaleService` r - A first visit from an English browser lands in English, and the Language row still shows the same two self-described options, so the escape hatch is unchanged in either direction. - `FALLBACK_LOCALE` narrows to its real job — the dictionary fallback and the no-signal answer — and stops standing in for "the user has not chosen". -- Tests that construct a `LocaleService` under jsdom now depend on the environment's `navigator`: the package specs stub it (`zh-CN` as the baseline; the detection spec varies it), and any future spec asserting a default must pin one too. +- Tests that construct a `LocaleService` under jsdom now depend on the environment's `navigator`: specs asserting localized copy declare their browser with one suite-level `usePinnedBrowserLanguages('zh-CN')` (dsh-client-test-runtime), and any future spec asserting a default must do the same. This package's own specs stub the globals directly, because they need shapes the helper deliberately cannot express (absent `languages`, a list decoupled from `language`, no `window` at all). - Detection cost is one array walk per service construction, and no storage write, so boot behavior and the persisted-state surface are unchanged. diff --git a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md index 568737285e..c013d24dcd 100644 --- a/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md +++ b/.agents/notes/implemented/feature/2026-07-31-browser-derived-initial-locale.zh.md @@ -12,7 +12,9 @@ Status: implemented **初始 locale 依次经三个来源解析:已持久化的偏好、浏览器、`FALLBACK_LOCALE`。** `packages/client/locale/src/client/index.ts` 中的 `resolveInitialLocale()` 在服务构造时运行,是这一顺序的唯一表达处;`restorePreference()` 现在返回 `LocaleId | undefined`(存储项缺失、无法解析或不可访问,一律读作*没有偏好*),后一个来源才有开口的机会。 -**浏览器匹配按主子标签进行,且遍历有序列表。** `detectBrowserLocale()` 遍历 `[...navigator.languages, navigator.language]`,返回主子标签命中已提供 locale 的首个条目,因此 `zh-Hans-CN` 与 `zh-TW` 同归 `zh`、`en-GB` 归 `en`;而只请求本应用不提供的语言(`fr`、`de`)的浏览器则什么都匹配不到,交由 `FALLBACK_LOCALE` 接管。`navigator.language` 排在列表之后,因为有的浏览器只暴露前者;完全没有 `navigator` 的运行环境(node 启动客户端树)与任何无法解析的情形一样落到回落值。 +**浏览器匹配按主子标签进行,且遍历有序列表。** `detectBrowserLocale()` 遍历 `[...(navigator.languages ?? []), navigator.language]`,返回主子标签命中已提供 locale 的首个条目,因此 `zh-Hans-CN` 与 `zh-TW` 同归 `zh`、`en-GB` 归 `en`;而只请求本应用不提供的语言(`fr`、`de`)的浏览器则什么都匹配不到,交由 `FALLBACK_LOCALE` 接管。`navigator.language` 排在列表之后,并兜住那些 Navigator 上没有 `languages` 的宿主——DOM 库把它标注为必然存在,所以这份容忍带一条窄口径 lint 例外,与 `localStorage` 守卫表达的环境边界不信任同源。 + +**判定浏览器用的是 `window` 而非 `navigator`。** Node ≥ 21 暴露全局 `navigator` 并报告机器自身语言(CI runner 上是 `en-US`),因此以 `navigator` 把关会让 node 启动客户端树时解析成 `en`,而非文档约定的回落值。以 `window` 把关可使所有非浏览器运行都停留在 `FALLBACK_LOCALE`。 **显式选择是永久的。** `setLocale` 的持久化未作改动,且持久化值最先被查询,因此选过语言的用户即便在不同浏览器配置或系统语言之间辗转也保留原选择。没有任何代码把探测到的 locale 写回存储:探测在每次启动时重新推导,对"用户是否做过选择"这一问题始终不可见。 @@ -30,5 +32,5 @@ Status: implemented - 来自英文浏览器的首访落在英文界面,而语言行依然呈现同样两个以自身语言自述的选项,两个方向的脱身通道都未改变。 - `FALLBACK_LOCALE` 收窄回它真正的职责——字典回落与无信号时的答案——不再兼职充当"用户尚未选择"。 -- 在 jsdom 下构造 `LocaleService` 的测试现在依赖环境的 `navigator`:包内测试对其打桩(以 `zh-CN` 为基线,探测用例则逐个变换),今后任何断言默认值的用例同样必须钉住它。 +- 在 jsdom 下构造 `LocaleService` 的测试现在依赖环境的 `navigator`:断言本地化文案的用例以一行套件级 `usePinnedBrowserLanguages('zh-CN')`(dsh-client-test-runtime)声明其浏览器,今后任何断言默认值的用例同样如此。本包自己的用例直接给全局打桩,因为它们需要该 helper 刻意不表达的形状(`languages` 缺失、列表与 `language` 解耦、完全没有 `window`)。 - 探测的代价是每次服务构造遍历一次数组,且不写存储,因此启动行为与持久化状态面均无变化。 diff --git a/apps/web/tests/settings-chrome.e2e.ts b/apps/web/tests/settings-chrome.e2e.ts index c9d6bc3367..a1d77657b8 100644 --- a/apps/web/tests/settings-chrome.e2e.ts +++ b/apps/web/tests/settings-chrome.e2e.ts @@ -232,7 +232,10 @@ describe('web e2e: settings modal and General preferences', () => { const dialog = enPage.getByRole('dialog', { name: 'Settings' }) await dialog.waitFor({ timeout: 10_000 }) await dialog.getByRole('button', { name: 'English' }).waitFor({ timeout: 10_000 }) + // This page has no closing inventory spec to sweep its console, so the + // scenario clears both tripwire channels itself. expect(enTripwire.pageErrors).toEqual([]) + expect(enTripwire.warnings).toEqual([]) } finally { await enPage.close() } diff --git a/packages/client/locale/src/client/index.ts b/packages/client/locale/src/client/index.ts index 83fa3a48a9..c5e54c5be9 100644 --- a/packages/client/locale/src/client/index.ts +++ b/packages/client/locale/src/client/index.ts @@ -315,13 +315,20 @@ function restorePreference(): LocaleId | undefined { /** * The first shipped locale the browser asks for, matched on the primary * subtag so every regional variant lands on its language (`zh-Hans-CN` -> zh, - * `en-GB` -> en). `navigator.language` trails the ordered `languages` list - * because a browser may expose only the former. + * `en-GB` -> en). `window` is the browser test, not `navigator`: Node exposes + * a global `navigator` reporting the machine's own language, which would + * otherwise decide the locale for non-browser runs (node e2e booting the + * client tree). `navigator.language` trails the ordered `languages` list and + * covers its absence on hosts that expose only the single tag. */ function detectBrowserLocale(): LocaleId | undefined { - // Non-browser runs (node e2e booting the client tree) have no navigator. - if (typeof navigator === 'undefined') return undefined - for (const tag of [...navigator.languages, navigator.language]) { + if (typeof window === 'undefined') return undefined + /* oxlint-disable-next-line typescript/no-unnecessary-condition -- + * The DOM lib types `languages` as always present; embedders and older + * WebViews ship a Navigator without it, and spreading undefined would + * throw at boot. Same environment-boundary distrust as the localStorage + * guards below. */ + for (const tag of [...(navigator.languages ?? []), navigator.language]) { const primary = tag.toLowerCase().split('-')[0] const match = LOCALES.find(locale => locale.id === primary) if (match) return match.id diff --git a/packages/client/locale/tests/locale.spec.ts b/packages/client/locale/tests/locale.spec.ts index fcab3683bc..442701dbb3 100644 --- a/packages/client/locale/tests/locale.spec.ts +++ b/packages/client/locale/tests/locale.spec.ts @@ -11,7 +11,13 @@ const make = (): { ctx: Context; svc: LocaleService; events: LocaleSnapshot[] } return { ctx, svc: new LocaleService(ctx), events } } -/** Pin the browser environment a fresh service reads its initial locale from. */ +/** + * Pin the browser environment a fresh service reads its initial locale from. + * This package's own specs stub the globals directly instead of using + * `usePinnedBrowserLanguages` (dsh-client-test-runtime): they need the shapes + * that helper deliberately cannot express — a missing `languages` list, a + * list decoupled from `language`, and a non-browser run with no `window`. + */ const stubLanguages = (...tags: string[]): void => { vi.stubGlobal('navigator', { languages: tags, language: tags[0] ?? '' }) } @@ -158,18 +164,24 @@ describe('LocaleService', () => { // An unshipped language walks the list to the first one this app ships. stubLanguages('fr-FR', 'en-US') expect(make().svc.getLocale().active).toBe('en') - // Only `language` populated (browsers that expose no ordered list). + // Only `language` populated: an empty ordered list, and a host that + // exposes no `languages` property at all. vi.stubGlobal('navigator', { languages: [], language: 'en-US' }) expect(make().svc.getLocale().active).toBe('en') + vi.stubGlobal('navigator', { language: 'en-US' }) + expect(make().svc.getLocale().active).toBe('en') // No shipped language anywhere in the browser's preferences: zh remains // the product default rather than an arbitrary near-match. stubLanguages('fr-FR', 'de') expect(make().svc.getLocale().active).toBe('zh') }) - it('runs without localStorage or navigator (node boots): defaults on read, no-op on write', () => { + it('runs outside a browser (node boots): the fallback decides, the machine language does not, writes no-op', () => { vi.stubGlobal('localStorage', undefined) - vi.stubGlobal('navigator', undefined) + vi.stubGlobal('window', undefined) + // Node exposes its own global navigator; without a window it must not + // reach the resolution at all. + stubLanguages('en-US') const { svc } = make() expect(svc.getLocale().active).toBe('zh') svc.setLocale('en') diff --git a/packages/client/test-runtime/src/index.ts b/packages/client/test-runtime/src/index.ts index 6e227539cd..5ef5350434 100644 --- a/packages/client/test-runtime/src/index.ts +++ b/packages/client/test-runtime/src/index.ts @@ -38,7 +38,7 @@ export { TestWorkspaces } from './workspaces.ts' export { conversationSnapshot, workspaceListState } from './fixtures.ts' export type { SessionBehaviorOverrides, SessionFixture, Stabilizer } from './fixtures.ts' export { makeTranslate } from './translate.ts' -export { pinBrowserLanguages } from './locale-env.ts' +export { usePinnedBrowserLanguages } from './locale-env.ts' /** Erased register face for the internal root call (the public declare seam holds the typing). */ type ErasedRegister = (options: object, component: unknown) => () => void diff --git a/packages/client/test-runtime/src/locale-env.ts b/packages/client/test-runtime/src/locale-env.ts index ff961e3888..f938557132 100644 --- a/packages/client/test-runtime/src/locale-env.ts +++ b/packages/client/test-runtime/src/locale-env.ts @@ -5,21 +5,25 @@ * the product's Chinese copy states the browser it assumes instead of * inheriting the machine's. */ +import { afterEach, beforeEach } from 'vitest' /** - * Override `navigator.languages`/`navigator.language` for the current spec. + * Pin `navigator.languages`/`navigator.language` for every test in the + * calling file (or describe block), restoring the environment's own values + * afterwards. Call at suite level, like the other vitest hooks. * @param primary - most preferred BCP 47 tag; also becomes `navigator.language`. * @param rest - further tags in preference order. - * @returns restore function handing the properties back to the environment. */ -export function pinBrowserLanguages(primary: string, ...rest: string[]): () => void { - Object.defineProperty(navigator, 'languages', { value: [primary, ...rest], configurable: true }) - Object.defineProperty(navigator, 'language', { value: primary, configurable: true }) - return () => { +export function usePinnedBrowserLanguages(primary: string, ...rest: string[]): void { + beforeEach(() => { + Object.defineProperty(navigator, 'languages', { value: [primary, ...rest], configurable: true }) + Object.defineProperty(navigator, 'language', { value: primary, configurable: true }) + }) + afterEach(() => { // Deleting the own properties uncovers the environment's own accessors // again (Navigator declares both readonly, hence the erased receiver). const own = navigator as unknown as Record delete own.languages delete own.language - } + }) } diff --git a/packages/client/ui-conversation/tests/apply-inject.spec.tsx b/packages/client/ui-conversation/tests/apply-inject.spec.tsx index bb0b1ce6f3..45a944b393 100644 --- a/packages/client/ui-conversation/tests/apply-inject.spec.tsx +++ b/packages/client/ui-conversation/tests/apply-inject.spec.tsx @@ -14,8 +14,8 @@ // guards would mask. Rendering-path acceptance lives in // chat-toolview-slot.spec.tsx. -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { describe, expect, it, vi } from 'vitest' +import { SlotTestRuntime, usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import type { SessionBehaviorOverrides } from '@deepseek-ai/dsh-client-test-runtime' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import type { ISession, SessionId } from '@deepseek-ai/dsh-client-runtime/client' @@ -27,9 +27,7 @@ import type { createChatStore } from '../src/client/stores.ts' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') const ROOT = 'root-1' as SessionId diff --git a/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx b/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx index 9c00621809..3ddaef873e 100644 --- a/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx +++ b/packages/client/ui-conversation/tests/assembly-surfaces.spec.tsx @@ -24,14 +24,12 @@ import { cleanup, fireEvent, waitFor, within } from '@testing-library/react' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import type { ISession, SessionId, TodoItem, ToolResultNode } from '@deepseek-ai/dsh-client-runtime/client' import type { PropsRenderSlots } from '@deepseek-ai/dsh-client-ui-slots' -import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { SlotTestRuntime, usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject } from '@deepseek-ai/dsh-client-ui-conversation/client' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') const SID = 's1' as SessionId diff --git a/packages/client/ui-conversation/tests/chat-apply.spec.tsx b/packages/client/ui-conversation/tests/chat-apply.spec.tsx index d17c6a022a..c8efd38a71 100644 --- a/packages/client/ui-conversation/tests/chat-apply.spec.tsx +++ b/packages/client/ui-conversation/tests/chat-apply.spec.tsx @@ -8,8 +8,8 @@ // machinery spec (chat-toolview-slot.spec.tsx) and the shell e2e; this spec // stops at the assembly surface. -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' -import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { describe, expect, it, vi } from 'vitest' +import { SlotTestRuntime, usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { resolveSlotLabel } from '@deepseek-ai/dsh-client-ui-slots' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import type { SessionId } from '@deepseek-ai/dsh-client-runtime/client' @@ -17,9 +17,7 @@ import { apply, inject } from '@deepseek-ai/dsh-client-ui-conversation/client' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') const ROOT = 'root-1' as SessionId const CHILD = 'child-1' as SessionId diff --git a/packages/client/ui-models/tests/apply.spec.ts b/packages/client/ui-models/tests/apply.spec.ts index e4e7287502..1f44cb487c 100644 --- a/packages/client/ui-models/tests/apply.spec.ts +++ b/packages/client/ui-models/tests/apply.spec.ts @@ -1,19 +1,17 @@ /** Models section registration: declaration-aware deferral, the locale-following label thunk, and HMR recovery. */ import { Context } from 'cordis' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { describe, expect, it, vi } from 'vitest' import { resolveSlotLabel } from '@deepseek-ai/dsh-client-ui-slots' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' -import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject, refreshIfLoaded } from '@deepseek-ai/dsh-client-ui-models/client' import { ModelsSection } from '../src/client/ModelsSection.tsx' import { DeepSeekOnboardingDialog } from '../src/client/DeepSeekOnboardingDialog.tsx' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') async function bench() { const ctx = new Context() diff --git a/packages/client/ui-settings-general/tests/apply.spec.ts b/packages/client/ui-settings-general/tests/apply.spec.ts index 0089bc3467..5678821c20 100644 --- a/packages/client/ui-settings-general/tests/apply.spec.ts +++ b/packages/client/ui-settings-general/tests/apply.spec.ts @@ -1,19 +1,17 @@ /** Ownerless-copy registrations: the four seats, the dictionaries, thunked labels, and HMR recovery. */ import { Context } from 'cordis' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { describe, expect, it, vi } from 'vitest' import { resolveSlotLabel } from '@deepseek-ai/dsh-client-ui-slots' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' -import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject } from '@deepseek-ai/dsh-client-ui-settings-general/client' import { CloseLabel, HeaderContent, TriggerContent } from '../src/client/chrome.tsx' import { GeneralSection } from '../src/client/GeneralSection.tsx' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') /** The four seats this plugin fills (slot name → expected component). */ const SEATS = [ diff --git a/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx b/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx index dece40302b..847e6ca6e5 100644 --- a/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx +++ b/packages/client/ui-sidebar/tests/sidebar-snapshot.spec.tsx @@ -8,17 +8,15 @@ * holes (sidebar.workspaces / sidebar.settings) have no registrant here, so * the snapshots pin the shell chrome itself. */ -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { afterEach, describe, expect, it, vi } from 'vitest' import { act, cleanup, waitFor } from '@testing-library/react' -import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { SlotTestRuntime, usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import { apply, inject } from '@deepseek-ai/dsh-client-ui-sidebar/client' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') afterEach(cleanup) diff --git a/packages/client/ui-slash/tests/apply.spec.ts b/packages/client/ui-slash/tests/apply.spec.ts index eb15feaa54..7121f79441 100644 --- a/packages/client/ui-slash/tests/apply.spec.ts +++ b/packages/client/ui-slash/tests/apply.spec.ts @@ -6,9 +6,9 @@ * sessionId, and unregisters on fiber teardown. */ import { Context } from 'cordis' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { describe, expect, it, vi } from 'vitest' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' -import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { createScope, scopeOf, SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import type { SessionId } from '@deepseek-ai/dsh-client-runtime/client' import { apply, inject, SlashService } from '@deepseek-ai/dsh-client-ui-slash/client' @@ -16,9 +16,7 @@ import type { MenuViewInjected } from '@deepseek-ai/dsh-client-ui-slash/client' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') const sid = (k: string): SessionId => k as SessionId diff --git a/packages/client/ui-theme/tests/apply.spec.ts b/packages/client/ui-theme/tests/apply.spec.ts index 59e6e8924e..a4da553516 100644 --- a/packages/client/ui-theme/tests/apply.spec.ts +++ b/packages/client/ui-theme/tests/apply.spec.ts @@ -2,10 +2,10 @@ * locale service, declaration-aware Appearance row registration, snapshot * projection into the row store, and HMR collapse recovery. */ import { Context } from 'cordis' -import { afterEach, beforeEach, describe, expect, it } from 'vitest' +import { describe, expect, it } from 'vitest' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' -import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject, SETTINGS_NS } from '@deepseek-ai/dsh-client-ui-theme/client' import type { AppearanceRowInjected, ThemeService } from '@deepseek-ai/dsh-client-ui-theme/client' import { AppearanceRow } from '../src/client/AppearanceRow.tsx' @@ -13,9 +13,7 @@ import type { createAppearanceRowStore } from '../src/client/settings-store.ts' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') const SLOT = 'settings.general.item' diff --git a/packages/client/ui-workspace/tests/apply.spec.ts b/packages/client/ui-workspace/tests/apply.spec.ts index 28153e607d..4c62678f4c 100644 --- a/packages/client/ui-workspace/tests/apply.spec.ts +++ b/packages/client/ui-workspace/tests/apply.spec.ts @@ -1,8 +1,8 @@ import { Context } from 'cordis' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { describe, expect, it, vi } from 'vitest' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' -import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { apply, inject } from '@deepseek-ai/dsh-client-ui-workspace/client' import type { WorkspaceBrowserInjected, WorkspacePickerInjected } from '@deepseek-ai/dsh-client-ui-workspace/client' import { WorkspaceBrowser } from '../src/client/WorkspaceBrowser.tsx' @@ -10,9 +10,7 @@ import { WorkspacePicker } from '../src/client/WorkspacePicker.tsx' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') async function bench() { const ctx = new Context() diff --git a/packages/client/ui-workspace/tests/rename-assembly.spec.tsx b/packages/client/ui-workspace/tests/rename-assembly.spec.tsx index 9138b88a6c..44b812532e 100644 --- a/packages/client/ui-workspace/tests/rename-assembly.spec.tsx +++ b/packages/client/ui-workspace/tests/rename-assembly.spec.tsx @@ -14,15 +14,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { cleanup, fireEvent, waitFor, within } from '@testing-library/react' import type { ISession, SessionId, WorkspaceId } from '@deepseek-ai/dsh-client-runtime/client' import type { PropsRenderSlots } from '@deepseek-ai/dsh-client-ui-slots' -import { SlotTestRuntime, pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { SlotTestRuntime, usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' import { apply, inject } from '@deepseek-ai/dsh-client-ui-workspace/client' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') const SID = 's1' as SessionId diff --git a/packages/host/directory-picker-browse/tests/client-flow.spec.tsx b/packages/host/directory-picker-browse/tests/client-flow.spec.tsx index 57e8c009cb..cde35bff03 100644 --- a/packages/host/directory-picker-browse/tests/client-flow.spec.tsx +++ b/packages/host/directory-picker-browse/tests/client-flow.spec.tsx @@ -1,20 +1,18 @@ // @vitest-environment jsdom import { Context } from 'cordis' -import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { afterEach, describe, expect, it, vi } from 'vitest' import { cleanup, render, screen } from '@testing-library/react' import { SlotsService } from '@deepseek-ai/dsh-client-runtime/client' import type { DirectoryListing } from '@deepseek-ai/dsh-client-runtime/client' import { LocaleService } from '@deepseek-ai/dsh-client-locale/client' -import { pinBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' +import { usePinnedBrowserLanguages } from '@deepseek-ai/dsh-client-test-runtime' import type { DirectoryFlowOwnerProps } from '@deepseek-ai/dsh-client-ui-workspace/client' import { apply, inject } from '../src/client/index.ts' import { BrowseDirectoryFlow } from '../src/client/flow.ts' // The service reads its initial locale from the browser; these specs assert // the shipped Chinese copy, so they state the browser they assume. -let restoreLanguages: () => void -beforeEach(() => { restoreLanguages = pinBrowserLanguages('zh-CN') }) -afterEach(() => { restoreLanguages() }) +usePinnedBrowserLanguages('zh-CN') afterEach(cleanup) From c7f706acba01aeb7e791e75935111b8ac1837495 Mon Sep 17 00:00:00 2001 From: creatixchu Date: Fri, 31 Jul 2026 16:34:06 +0800 Subject: [PATCH 17/18] Merge branch 'master' into worktree/locale-browser-default --- ...30-tui-adapter-registration-race.i18n.yaml | 6 + ...026-07-30-tui-adapter-registration-race.md | 29 + ...-07-30-tui-adapter-registration-race.zh.md | 29 + ...1-english-compaction-checkpoints.i18n.yaml | 6 + ...26-07-31-english-compaction-checkpoints.md | 28 + ...07-31-english-compaction-checkpoints.zh.md | 28 + .../2026-07-30-search-render-card.i18n.yaml | 6 + .../feature/2026-07-30-search-render-card.md | 61 + .../2026-07-30-search-render-card.zh.md | 61 + ...versioned-gui-welcome-onboarding.i18n.yaml | 6 + ...-07-30-versioned-gui-welcome-onboarding.md | 35 + ...-30-versioned-gui-welcome-onboarding.zh.md | 35 + .../2026-07-31-web-default-search.i18n.yaml | 6 + .../feature/2026-07-31-web-default-search.md | 35 + .../2026-07-31-web-default-search.zh.md | 35 + .../welcome.expected.md | 10 + .../snapshots/web-search-round/session.jsonl | 12 + .../snapshots/web-search-round/ui.expected.md | 35 + apps/web/tests/web-search-round.e2e.ts | 207 + docs/cordis-paper.pdf | 65905 ++++++++++++++++ .../src/client/WelcomeNotice.module.css | 164 + .../src/client/WelcomeNotice.tsx | 87 + .../src/client/welcome-store.ts | 108 + .../src/onboarding-copy.ts | 37 + .../ui-settings-general/tests/host.spec.ts | 29 + .../tests/welcome-notice.spec.tsx | 101 + .../tests/welcome-store.spec.ts | 166 + .../fs/tool-fs-search/src/presentation.ts | 205 + .../tool-fs-search/tests/presentation.spec.ts | 176 + 29 files changed, 67648 insertions(+) create mode 100644 .agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.i18n.yaml create mode 100644 .agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.md create mode 100644 .agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.zh.md create mode 100644 .agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.i18n.yaml create mode 100644 .agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.md create mode 100644 .agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.zh.md create mode 100644 .agents/notes/implemented/feature/2026-07-30-search-render-card.i18n.yaml create mode 100644 .agents/notes/implemented/feature/2026-07-30-search-render-card.md create mode 100644 .agents/notes/implemented/feature/2026-07-30-search-render-card.zh.md create mode 100644 .agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml create mode 100644 .agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md create mode 100644 .agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md create mode 100644 .agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml create mode 100644 .agents/notes/implemented/feature/2026-07-31-web-default-search.md create mode 100644 .agents/notes/implemented/feature/2026-07-31-web-default-search.zh.md create mode 100644 apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md create mode 100644 apps/web/tests/snapshots/web-search-round/session.jsonl create mode 100644 apps/web/tests/snapshots/web-search-round/ui.expected.md create mode 100644 apps/web/tests/web-search-round.e2e.ts create mode 100644 docs/cordis-paper.pdf create mode 100644 packages/client/ui-settings-general/src/client/WelcomeNotice.module.css create mode 100644 packages/client/ui-settings-general/src/client/WelcomeNotice.tsx create mode 100644 packages/client/ui-settings-general/src/client/welcome-store.ts create mode 100644 packages/client/ui-settings-general/src/onboarding-copy.ts create mode 100644 packages/client/ui-settings-general/tests/host.spec.ts create mode 100644 packages/client/ui-settings-general/tests/welcome-notice.spec.tsx create mode 100644 packages/client/ui-settings-general/tests/welcome-store.spec.ts create mode 100644 packages/fs/tool-fs-search/src/presentation.ts create mode 100644 packages/fs/tool-fs-search/tests/presentation.spec.ts diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.i18n.yaml new file mode 100644 index 0000000000..b3d987b985 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.md +2026-07-30-tui-adapter-registration-race.md: fd08e7b6130bc8f7e3cd5287a9970f5fb47244a8 +2026-07-30-tui-adapter-registration-race.zh.md: 0c6bba4bbc8c3303d9c471c3164faa816438b333 diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.md b/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.md new file mode 100644 index 0000000000..fd08e7b613 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.md @@ -0,0 +1,29 @@ +# Agent Note: TUI model-context resolution defers on the adapter-registration race + +Status: implemented + +English | [中文](2026-07-30-tui-adapter-registration-race.zh.md) + +## Problem + +Cordis activates plugins by service availability, not configuration order, so the TUI (whose `inject` requires only the `llm` service) can mount before a configured adapter plugin such as `dsh-llm-pi-ai` finishes registering its provider routes. The TUI's model controller resolves the selected model's context window immediately on mount; when the agent's route pointed at a not-yet-registered provider, `resolveModelInfo` rejected with `NO_ADAPTER` and every fresh session printed `Could not resolve model context: no adapter registered for provider "…"` — a spurious error for a fully working configuration (the adapter registered milliseconds later, and chatting worked). + +## Decision + +The TUI model controller treats a `NO_ADAPTER` rejection of its context-window resolution as a transient state rather than an error: it parks the resolution silently and re-resolves on the next `llm/adapters-updated` commit — the payload-free registry notification `LlmService` already fires at every route commit point. A commit that still lacks the route parks the wait again, so unrelated topology changes stay silent. Any target change re-enters the resolution and clears the pending wait, so the deferred state can never go stale against the current selection; every other resolution error still prints the notice. + +## Alternatives considered + +**Have the TUI wait for boot to settle before resolving.** The TUI has no Loader dependency (tests and embedders run without one) and "settled" is not observable from inside a plugin; adding a Loader coupling for one cosmetic resolution inverts the dependency direction. + +**Poll or retry with a timer.** A timer guesses at activation latency, still mis-prints on a slow adapter, and adds a tunable with no owner. The registry already announces every commit through `llm/adapters-updated`; subscribing is precise and free. + +**Order the config so adapters load first.** Row order carries no load semantics in the Loader (activation is service-driven by design), so this cannot be expressed in configuration. + +**Suppress NO_ADAPTER errors entirely.** A permanently missing adapter (typo in the provider name) would then never surface in the context-window path. Deferring keeps the signal: a wrong provider name still shows `model unset`-like behavior in the selector and fails loudly at dispatch, while the startup race resolves itself. + +**Resolve the context window per submitted message instead of at mount.** The send path already resolves per step (`prepareCall()`), and the indicator is displayed continuously, not only when sending; per-submit display resolution would leave the indicator blank until the first message and re-run adapter I/O for a value that only changes on route changes. + +## Consequences + +A genuinely misconfigured provider no longer prints the context-resolution error at startup — it surfaces at first dispatch instead, which is where the failure is actionable. The controller subscribes to every `llm/adapters-updated` commit but acts only while a wait is parked; the listener's disposer is released by the channel's `detachListeners()` through the controller's `detach()`, symmetric with the sibling channel listeners. Covered by three TUI tests: the deferred resolution stays silent through an unrelated commit and completes when the route's commit arrives, a target change drops the stale wait, and after channel detach a registry commit no longer re-enters resolution. diff --git a/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.zh.md b/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.zh.md new file mode 100644 index 0000000000..0c6bba4bbc --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-30-tui-adapter-registration-race.zh.md @@ -0,0 +1,29 @@ +# Agent Note: TUI 模型上下文解析在适配器注册竞争时延后重试 + +Status: implemented + +[English](2026-07-30-tui-adapter-registration-race.md) | 中文 + +## Problem + +Cordis 按服务可用性而非配置顺序激活插件,因此 TUI(其 `inject` 只要求 `llm` 服务)可能在 `dsh-llm-pi-ai` 这类已配置的适配器插件完成提供方路由注册之前就挂载。TUI 的模型控制器在挂载时立即解析所选模型的上下文窗口;当 agent 的路由指向尚未注册的提供方时,`resolveModelInfo` 以 `NO_ADAPTER` 拒绝,于是每个新会话都会打印 `Could not resolve model context: no adapter registered for provider "…"` —— 对一份完全正常的配置报出的虚假错误(适配器几毫秒后就完成注册,对话也一切正常)。 + +## Decision + +TUI 模型控制器把上下文窗口解析中的 `NO_ADAPTER` 拒绝视为瞬态状态而非错误:静默搁置这次解析,并在下一次 `llm/adapters-updated` 提交时重新解析——这是 `LlmService` 本就在每个路由提交点发出的无载荷注册表通知。若某次提交仍缺少该路由,等待会被再次搁置,因此无关的拓扑变化保持沉默。任何目标变更都会重新进入解析并清除挂起的等待,因此延后状态绝不会相对当前选择变陈旧;其他所有解析错误仍照常打印通知。 + +## Alternatives considered + +**让 TUI 等启动结算后再解析。** TUI 不依赖 Loader(测试和嵌入方在没有 Loader 的环境下运行),而且"已结算"在插件内部不可观测;为一次外观性的解析引入 Loader 耦合会颠倒依赖方向。 + +**用定时器轮询或重试。** 定时器只能猜测激活延迟,遇到慢适配器仍会误报,还会引入一个没有归属者的可调参数。注册表本就通过 `llm/adapters-updated` 公告每次提交;订阅它既精确又零成本。 + +**调整配置顺序让适配器先加载。** Loader 中行顺序不承载加载语义(激活按设计由服务驱动),因此这无法用配置表达。 + +**彻底压制 NO_ADAPTER 错误。** 那样的话,永久缺失的适配器(提供方名字拼错)在上下文窗口路径上就永远不会暴露。延后重试保留了信号:错误的提供方名字仍会在选择器中表现出类似 `model unset` 的行为,并在分派时大声失败,而启动竞争则自行化解。 + +**改为在每次提交消息时解析上下文窗口,而不是在挂载时。** 发送路径本就按步解析(`prepareCall()`),且指示器是持续显示的,不只在发送时;按提交解析显示值会让指示器在首条消息之前一直空白,并为一个仅在路由变化时才变的值反复执行适配器 I/O。 + +## Consequences + +真正配置错误的提供方不再在启动时打印上下文解析错误——它改在首次分派时暴露,那才是该失败可以被处理的地方。控制器订阅每次 `llm/adapters-updated` 提交,但只在有等待被搁置时才动作;监听器的 disposer 经由控制器的 `detach()` 在频道的 `detachListeners()` 中释放,与同级频道监听器保持对称。由三个 TUI 测试覆盖:延后的解析在无关提交中保持沉默、在该路由的提交到来时完成;目标变更丢弃陈旧等待;频道 detach 之后注册表提交不再重新进入解析。 diff --git a/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.i18n.yaml new file mode 100644 index 0000000000..7d68e52c82 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.md +2026-07-31-english-compaction-checkpoints.md: dc95ed187a6ba5b86800f06ebefb2776995f9421 +2026-07-31-english-compaction-checkpoints.zh.md: 7cd4179430ed775f3807af5a02e81838e495c81e diff --git a/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.md b/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.md new file mode 100644 index 0000000000..dc95ed187a --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.md @@ -0,0 +1,28 @@ +# Agent Note: Compaction checkpoints use an English engineering register + +Status: implemented + +English | [中文](2026-07-31-english-compaction-checkpoints.zh.md) + +## Problem + +A compaction checkpoint becomes part of the next model request's durable prefix. When a multilingual conversation leads the compactor to preserve its narrative material in the conversation language, the checkpoint can introduce a large amount of a language that is absent from the code, tool output, and existing reasoning prefix. That language then persists across later compaction cycles and can influence the conversation model's reasoning register. + +## Decision + +`COMPACTION_INSTRUCTION` requires an English-language internal engineering checkpoint. It asks the model to translate narrative source material as needed while preserving exact literals, including paths, commands, errors, identifiers, signatures, and quoted wording when exactness matters. The checkpoint's headings and terse engineering bullets remain the existing structured format. + +The requirement is integrated into the first sentence of the trailing compaction instruction. The replayed system prompt, tools, and conversation history remain byte-identical to the routed request, so the change retains the prefix-cache reuse owned by the [compaction summary prefix-cache note](2026-07-21-compaction-summary-prefix-cache-reuse.md). + +## Alternatives considered + +- **Leave checkpoint language to the replayed conversation** — rejected: the checkpoint is a durable prompt prefix, so preserving a transient conversational register can amplify it across later compactions. +- **Constrain the conversation model's language** — rejected: the policy is for an internal checkpoint, not the user's visible conversation, and a conversation-wide rule would unnecessarily change normal interaction. +- **Require ASCII-only output** — rejected: ASCII is a character-set constraint rather than an engineering-register constraint and would unnecessarily distort legitimate literals and technical material. +- **Append a separate final English-only sentence** — rejected: stating the requirement in the instruction's opening output contract is shorter and ties it directly to the checkpoint being requested. + +## Consequences + +- New checkpoints normalize narrative context into English while retaining the exact strings that future tool use and code work depend on. +- Existing checkpoint structure, compaction routing, and cache alignment are unchanged; only the final user instruction is different. +- The direct summarization call remains outside transcript snapshots because it emits no `assistant/chunk` events. The real-loop regression instead asserts the exact final instruction received by the summarization request. diff --git a/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.zh.md b/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.zh.md new file mode 100644 index 0000000000..7cd4179430 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-07-31-english-compaction-checkpoints.zh.md @@ -0,0 +1,28 @@ +# Agent Note: 压缩检查点使用英语工程文体 + +Status: implemented + +[English](2026-07-31-english-compaction-checkpoints.md) | 中文 + +## 问题 + +压缩(compaction)检查点会成为下一次模型请求中持久存在的前缀。当多语言对话使压缩器以对话语言保留叙述性材料时,检查点可能引入大量代码、工具输出和既有推理(reasoning)前缀中均未出现的语言内容。该语言随后会在后续压缩周期中持续存在,并影响对话模型的推理文体。 + +## 决策 + +`COMPACTION_INSTRUCTION` 要求生成英语的内部工程检查点。它要求模型在必要时翻译叙述性源材料,同时保留精确的字面量;这包括路径、命令、错误、标识符、签名,以及精确性重要时的引用措辞。检查点的标题及简洁的工程项目符号仍沿用既有的结构化格式。 + +这项要求被整合到尾部压缩指令的第一句话中。回放的系统提示词、工具和对话历史与已路由请求保持字节级一致,因此该变更保留 [compaction summary prefix-cache note](2026-07-21-compaction-summary-prefix-cache-reuse.md) 所确立的前缀缓存复用。 + +## 考虑过的替代方案 + +- **让回放的对话决定检查点语言**——不采纳:检查点是持久的提示词前缀,保留短暂的对话文体可能在后续压缩中放大这种影响。 +- **约束对话模型的语言**——不采纳:该策略针对内部检查点,而不是用户可见的对话;对整个对话施加规则会不必要地改变正常交互。 +- **要求仅输出 ASCII**——不采纳:ASCII 是字符集约束,而非工程文体约束,并会不必要地扭曲合法的字面量和技术材料。 +- **在末尾追加一句独立的仅限英语要求**——不采纳:在指令开头的输出契约中说明该要求更简洁,也直接将其与所请求的检查点绑定。 + +## 后果 + +- 新检查点会将叙述性上下文规范化为英语,同时保留未来工具使用和代码工作所依赖的精确字符串。 +- 既有检查点结构、压缩路由和缓存对齐保持不变;只有最后一条 user 指令不同。 +- 直接摘要调用仍不纳入 transcript(文本记录)快照,因为它不会发出 `assistant/chunk` 事件。真实循环回归改为断言摘要请求收到的精确最终指令。 diff --git a/.agents/notes/implemented/feature/2026-07-30-search-render-card.i18n.yaml b/.agents/notes/implemented/feature/2026-07-30-search-render-card.i18n.yaml new file mode 100644 index 0000000000..ec0e020502 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-30-search-render-card.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-30-search-render-card.md +2026-07-30-search-render-card.md: 36f772d7198ef30d6c243549cbaa9f16c780268b +2026-07-30-search-render-card.zh.md: 7d7ba352f19f3fb83cb6b7d049980776dc2c277e diff --git a/.agents/notes/implemented/feature/2026-07-30-search-render-card.md b/.agents/notes/implemented/feature/2026-07-30-search-render-card.md new file mode 100644 index 0000000000..36f772d719 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-30-search-render-card.md @@ -0,0 +1,61 @@ +# Agent Note: Search render intent — grep and glob emit a structured search card + +Status: implemented + +English | [中文](2026-07-30-search-render-card.zh.md) + +## Problem + +`grep` and `glob` return structured canonical values — `grep` a flat `{ matches: [{ path, lineNumber, line }] }`, `glob` a `{ paths: string[] }` — but every UI only ever saw their model-facing render text: `grep` groups its matches under file headers with `Line N:` rows, `glob` prints a newline-joined path list, and both append a spill footer when the inline cap (`grepMaxMatches`, default 250; `globMaxResults`, default 100) drops later results to a spill file. A web frontend that wants to render a search result as an expandable per-file group of matches, or as a selectable path list, had to re-parse that text. Both tools already declared a call-time [render intent](../architecture/2026-07-02-tool-render-intent-union.md) (`GenericCallView`, `kind: 'search'`) but no result-time view, so the completed call fell back to the generic card that renders the raw text. + +The structured canonical value does not cross the wire: only the model-facing render text and, when a tool declares `output.presentationMeta`, a JSON metadata payload reach the client, threaded through the `tool/result` event ([canonical-output contract](../architecture/2026-07-20-canonical-tool-output-contract.md)). A result-time view carrying structured data therefore has to project that data into `presentationMeta` and read it back in `presentResult` — the same path `write`/`edit` use for their diff cards. + +## Decision + +`packages/core/tools/src/presentation.ts` adds `card: 'search'` to the `ToolResultView` union as `SearchResultView`, a `shape`-discriminated view that expresses both tools' shapes: `SearchMatchesResultView` (`shape: 'matches'`) carries `grep`'s matches grouped by file as `files: { path, matches: { lineNumber, line }[] }[]`, and `SearchPathsResultView` (`shape: 'paths'`) carries `glob`'s flat `paths: string[]`. Both carry `truncated: boolean` and `total: number`. + +The discriminant is `shape`, not `kind`, deliberately: the same presentation module already gives `GenericCallView` a `kind: ToolCallKind` field whose values include `'search'` (the icon category). A bridge holding a `ToolCallView | ToolResultView` would see two `kind` fields with two meanings; `shape` for the result variant keeps the two apart. + +One view with two shapes rather than two cards, because both tools are the same visual object — a search result — and a web consumer switches on one `card` value, then on `shape` for the row layout. The discriminated `shape` keeps each variant's fields non-optional (a matches view always has `files`, a paths view always has `paths`) instead of a single interface where every shape-specific field is optional. + +The view carries **no** result text. An earlier revision attached the model-facing `result.content` to the view; that was a no-op for every consumer (the TUI already falls back to `result.content`, and web fallbacks read the raw `tool/result` content), and it serialized the whole search text a second time into the persisted view. The view is the structured shape only; a UI without a search card falls back to the raw `tool/result` content. + +The card tag is result-time only. A search call stays a `GenericCallView` (`kind: 'search'`): the pending state has no matches or paths to show, so there is nothing a `SearchCallView` would carry that the generic title does not. This is the asymmetry with the terminal card, whose call view carries the command, cwd, and description that exist before execution; a search's structured content exists only after `execute`. + +`packages/fs/tool-fs-search/src/presentation.ts` owns the projection and the narrowing. `grepSearchMeta`/`globSearchMeta` project the canonical value into a `SearchMeta` payload each tool declares as `output.presentationMeta`; `presentGrepResult`/`presentGlobResult` read `result.meta` back through `searchViewFromMeta`. They consume the SAME retained result the model-facing render consumes — `retainGrepMatches`/`retainGlobPaths` in `search-core.ts` run the inline cap and per-line preview budget ONCE, and both the render and the projection take that outcome — so text and card never disagree about which results survived, and there is no second retention pass. `total` is every result the search found (before capping); `truncated` is set when the cap dropped results. This is the truncation-honesty point: the model saw a capped inline result plus a spill footer, so the card must not present the retained page as the complete result — a UI reads `truncated`/`total` to show a capped indicator rather than claiming completeness the model never had. + +**The meta has its own byte budget.** The inline cap bounds the item COUNT, but the retained matches of a broad search (hundreds of long lines) can still serialize to hundreds of kilobytes, and `meta` is persisted with the session log and re-sent on every request. A deployment's final output budget (`dsh-spill-policy`, `maxInlineBytes`) only shrinks a result's `content` — `PostToolDecision` has no `meta` channel — so the projection owns keeping `meta` bounded. `capMetaBytes` drops trailing file groups / paths until the serialized meta fits `searchMetaMaxBytes` (config, default 64 KiB) and marks the result `truncated`. A single item too large to fit on its own is kept: the invariant is a bounded payload wherever droppable, never an empty card that hides a real result. + +`searchViewFromMeta` narrows the opaque `meta` defensively and returns `undefined` on any malformed or absent payload, so a presenter run on an older or hand-edited replayed log falls back to the generic card instead of throwing. It DOES accept a zero-result payload (`files: []` / `paths: []`) as a valid empty card — this is a deliberate departure from the mirrored `diffsFromMeta`, which rejects empty `diffs`, because a zero-match grep is a legitimate result a UI shows as "no matches", not an absent projection. `presentResult` returns `undefined` for a failed result, for absent meta (a nested `run_code` dispatch computes no `presentationMeta`), and for the other tool's meta shape (each presenter narrows to its own `shape`). + +The `SearchMeta` member shapes are object-literal `type` aliases, not the `SearchFileMatches`/`SearchLineMatch` interfaces the view exposes, because only a type alias is assignable to the `JsonValue` index signature `presentationMeta` returns; the two are structurally identical, so the projected value still reads back as a `SearchResultView`. + +The TUI (`packages/ui/tui/src/components/transcript.ts`) needs no dedicated arm: its result-view switch handles `terminal` and `diff` explicitly, and a `search` view falls through to the same dim generic body, reading the model-facing text from `this.result?.content`. Because the search view carries no `content` of its own and grep/glob returned a generic card before this PR, the TUI output stays byte-identical to the pre-search-card fallback. The web frontend that renders the structured `files`/`paths` shape is a separate later PR; this PR is the backend contract and its two producers. + +## Alternatives considered + +**A single flat `SearchResultView` interface with optional `files?` and `paths?`.** Rejected: it makes both shape-specific fields optional on every value and lets a malformed view carry both or neither. The `shape` discriminant keeps each variant's fields required and lets a consumer switch exhaustively. + +**Reuse `kind` as the shape discriminant.** Rejected: `kind` already means `ToolCallKind` (the icon category, whose values include `'search'`) on the call view in the same module. A second `kind` with a different meaning on the result view collides for any bridge holding both. + +**Attach the model-facing text as the view's `content`.** Rejected: a no-op for every current consumer and a second serialization of the whole search text into the persisted view. The view is the structured shape; text fallback reads the raw result content. + +**A meta channel on `PostToolDecision` so `dsh-spill-policy` bounds `meta` like it bounds `content`.** Rejected for this PR: it changes the core tool decision contract and the spill-policy plugin for one tool's payload. The projection bounding its own `meta` at a config byte cap is self-contained and keeps the seam unchanged. + +**A call-time `SearchCallView` mirroring the terminal card's both-sides symmetry.** Rejected: a search call has no matches or paths before `execute`, so the view would carry only the title the `GenericCallView` already carries. + +## Consequences + +`grep` and `glob` now compute `presentationMeta` on every non-nested successful call, a bounded projection over the already-retained matches or paths — the same retention outcome the render consumes, so there is no second retention pass and no doubled search text on the wire. The serialized meta is bounded by `searchMetaMaxBytes`, so a broad search no longer persists an unbounded structured copy into the session log. + +A UI without a search card renders the raw `tool/result` content, so no consumer regresses, and the TUI stays byte-identical. The web consumer that renders the structured shape reads `truncated`/`total` and the per-file groups; because the view carries only the retained, byte-bounded page, a UI wanting the complete result follows the spill locator in the model-facing text, exactly as the model does. + +## Testing + +`packages/fs/tool-fs-search/tests/presentation.spec.ts` pins the pure layer: `groupMatchesByFile`'s first-seen file order; `grepSearchMeta`/`globSearchMeta` projection over a shared retention outcome with `total` reporting the pre-cap count and `truncated` carried through; the per-line preview budget the retention pass applied; the serialized-meta byte cap dropping trailing groups/paths while keeping a single oversized item; and `searchViewFromMeta`'s narrowing of both good shapes, the zero-result empty card, and every malformed case (non-object/array meta, missing or mistyped `truncated`/`total`, unknown `shape`, malformed `files` entries, non-string `paths`). `packages/fs/tool-fs-search/tests/tools.spec.ts` pins the wiring through the real tool registry: a capped `grep`/`glob` execute produces the `SearchMeta` on `result.meta` and `presentResult` builds the search view (no `content`), a nested `run_code` dispatch computes no meta so `presentResult` falls back, and a failed or cross-shape or malformed result falls back to the generic card. Per-file 100% coverage holds over the search package `src`. + +## Related + +- [Tagged render-intent union for tool-call presentation](../architecture/2026-07-02-tool-render-intent-union.md) — the `card`-tagged vocabulary this extends with the `search` result tag. +- [Canonical tool output contract](../architecture/2026-07-20-canonical-tool-output-contract.md) — the value/render/`presentationMeta` split this projection rides; the structured value stays execution-local, the card rides `meta`. +- [Web terminal card](2026-07-28-web-terminal-card.md) — the precedent this mirrors on the backend: a tool projects its result into `presentationMeta` and a `presentResult` view; the search card's web consumer is the analogous follow-up. diff --git a/.agents/notes/implemented/feature/2026-07-30-search-render-card.zh.md b/.agents/notes/implemented/feature/2026-07-30-search-render-card.zh.md new file mode 100644 index 0000000000..7d7ba352f1 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-30-search-render-card.zh.md @@ -0,0 +1,61 @@ +# Agent Note:搜索渲染意图 —— grep 与 glob 产出结构化搜索卡片 + +Status: implemented + +[English](2026-07-30-search-render-card.md) | 中文 + +## 问题 + +`grep` 与 `glob` 返回结构化的 canonical 值 —— `grep` 是扁平的 `{ matches: [{ path, lineNumber, line }] }`,`glob` 是 `{ paths: string[] }` —— 但每个 UI 只见过它们面向模型的渲染文本:`grep` 把匹配按文件头分组、每行 `Line N:`,`glob` 打印换行连接的路径列表,两者在内联上限(`grepMaxMatches`,默认 250;`globMaxResults`,默认 100)把后续结果落到 spill 文件时都追加一个 spill 脚注。想把搜索结果渲染成可展开的按文件匹配组、或可选择的路径列表的 web 前端,只能去重新解析那段文本。两个工具都已声明调用时的[渲染意图](../architecture/2026-07-02-tool-render-intent-union.md)(`GenericCallView`,`kind: 'search'`),但没有结果时视图,所以已完成的调用回退到渲染原始文本的 generic 卡片。 + +结构化 canonical 值不跨线传输:只有面向模型的渲染文本、以及当工具声明了 `output.presentationMeta` 时的一份 JSON 元数据,会经 `tool/result` 事件到达客户端([canonical-output 契约](../architecture/2026-07-20-canonical-tool-output-contract.md))。因此携带结构化数据的结果时视图必须把数据投影进 `presentationMeta`,再在 `presentResult` 里读回 —— 与 `write`/`edit` 的 diff 卡片走同一条路。 + +## 决定 + +`packages/core/tools/src/presentation.ts` 把 `card: 'search'` 作为 `SearchResultView` 加入 `ToolResultView` 联合,这是一个以 `shape` 判别的视图,表达两个工具的形状:`SearchMatchesResultView`(`shape: 'matches'`)以 `files: { path, matches: { lineNumber, line }[] }[]` 承载 `grep` 按文件分组的匹配,`SearchPathsResultView`(`shape: 'paths'`)承载 `glob` 的扁平 `paths: string[]`。两者都带 `truncated: boolean` 与 `total: number`。 + +判别子是 `shape` 而非 `kind`,是刻意为之:同一个 presentation 模块已经给 `GenericCallView` 一个 `kind: ToolCallKind` 字段,其取值恰好包含 `'search'`(图标类别)。持有 `ToolCallView | ToolResultView` 的桥接层会看到两个含义不同的 `kind` 字段;结果变体用 `shape` 把两者分开。 + +用一个带两种形状的视图而非两张卡片,因为两个工具是同一个视觉对象 —— 一个搜索结果 —— web 消费方先在一个 `card` 值上分支,再在 `shape` 上分支决定行布局。判别式 `shape` 让每个变体的字段保持非可选(matches 视图总有 `files`,paths 视图总有 `paths`),而不是一个所有形状相关字段都可选的单一接口。 + +该视图**不**携带结果文本。早期版本曾把面向模型的 `result.content` 附到视图上;那对每个消费方都是 no-op(TUI 本就回退到 `result.content`,web 回退读原始 `tool/result` 内容),却把整段搜索文本又序列化进持久化视图一遍。视图只承载结构化形状;无 search 卡片的 UI 回退到原始 `tool/result` 内容。 + +卡片标签只在结果时存在。搜索调用保持为 `GenericCallView`(`kind: 'search'`):pending 状态没有匹配或路径可展示,所以 `SearchCallView` 能携带的东西不会比 generic 标题更多。这是与 terminal 卡片的不对称之处 —— terminal 的调用视图携带执行前就存在的命令、cwd、description;搜索的结构化内容只在 `execute` 之后才存在。 + +`packages/fs/tool-fs-search/src/presentation.ts` 拥有投影与收窄。`grepSearchMeta`/`globSearchMeta` 把 canonical 值投影为每个工具声明为 `output.presentationMeta` 的 `SearchMeta` 载荷;`presentGrepResult`/`presentGlobResult` 经 `searchViewFromMeta` 把 `result.meta` 读回。它们消费与面向模型渲染相同的已保留结果 —— `search-core.ts` 里的 `retainGrepMatches`/`retainGlobPaths` 只跑一次内联上限与每行预览预算,render 与投影都取这份产出 —— 所以文本与卡片对哪些结果幸存永不分歧,也没有第二次保留计算。`total` 是搜索找到的全部结果(截断前);`truncated` 在上限丢弃了结果时置位。这是截断诚实点:模型看到的是被截断的内联结果加一个 spill 脚注,所以卡片不能把保留页当作完整结果 —— UI 读 `truncated`/`total` 显示截断指示,而非宣称模型从未有过的完整性。 + +**meta 有自己的字节预算。** 内联上限约束的是条目数,但一次宽泛搜索保留下来的匹配(数百条长行)仍可序列化到数百 KB,而 `meta` 会随会话日志持久化并在每次请求时重发。部署的最终输出预算(`dsh-spill-policy` 的 `maxInlineBytes`)只缩减结果的 `content` —— `PostToolDecision` 没有 `meta` 通道 —— 所以投影自己负责把 `meta` 约束住。`capMetaBytes` 丢弃末尾的文件组/路径,直到序列化 meta 装进 `searchMetaMaxBytes`(配置,默认 64 KiB),并把结果标记 `truncated`。单个大到自身都装不下的条目会被保留:不变量是可丢弃处一律有界,绝不产出隐藏了真实结果的空卡片。 + +`searchViewFromMeta` 防御性地收窄不透明的 `meta`,对任何畸形或缺失载荷返回 `undefined`,使在较旧或手工编辑的回放日志上运行的 presenter 回退到 generic 卡片而非抛错。它确实接受零结果载荷(`files: []` / `paths: []`)为合法的空卡片 —— 这是与被镜像的 `diffsFromMeta` 的刻意偏离(后者拒绝空 `diffs`),因为零匹配的 grep 是 UI 展示为「no matches」的合法结果,而非缺失的投影。`presentResult` 对失败结果、对缺失 meta(嵌套 `run_code` 分发不计算 `presentationMeta`)、以及对另一工具的 meta 形状(每个 presenter 收窄到自己的 `shape`)返回 `undefined`。 + +`SearchMeta` 的成员形状是对象字面量 `type` 别名,而非视图暴露的 `SearchFileMatches`/`SearchLineMatch` 接口,因为只有 type 别名可赋给 `presentationMeta` 返回的 `JsonValue` 索引签名;两者结构等价,所以投影值仍读回为 `SearchResultView`。 + +TUI(`packages/ui/tui/src/components/transcript.ts`)不需要专门分支:它的结果视图 switch 显式处理 `terminal` 与 `diff`,`search` 视图落入同一个变暗的 generic body,从 `this.result?.content` 读取面向模型的文本。因为搜索视图不带自己的 `content`,而本 PR 之前 grep/glob 返回的是 generic 卡片,所以 TUI 输出与无 search 卡片的回退逐字节一致。渲染结构化 `files`/`paths` 形状的 web 前端是另一个后续 PR;本 PR 是后端契约及其两个生产者。 + +## 考虑过的备选 + +**一个扁平的 `SearchResultView` 接口,带可选 `files?` 与 `paths?`。** 否决:它让两个形状相关字段在每个值上都可选,并允许畸形视图同时带两者或都不带。`shape` 判别式让每个变体的字段保持必需,并让消费方穷尽分支。 + +**复用 `kind` 作形状判别子。** 否决:同一模块里调用视图上的 `kind` 已经表示 `ToolCallKind`(图标类别,取值含 `'search'`)。结果视图上再有一个含义不同的 `kind`,对任何同时持有两者的桥接层都会冲突。 + +**把面向模型的文本作为视图的 `content` 附上。** 否决:对每个当前消费方是 no-op,且把整段搜索文本第二次序列化进持久化视图。视图是结构化形状;文本回退读原始结果内容。 + +**在 `PostToolDecision` 上加 meta 通道,让 `dsh-spill-policy` 像约束 `content` 那样约束 `meta`。** 本 PR 否决:它为一个工具的载荷改动核心工具决策契约与 spill-policy 插件。投影在配置字节上限处约束自己的 `meta` 是自包含的,且保持 seam 不变。 + +**镜像 terminal 卡片双侧对称的调用时 `SearchCallView`。** 否决:搜索调用在 `execute` 前没有匹配或路径,视图只会携带 `GenericCallView` 已有的标题。 + +## 后果 + +`grep` 与 `glob` 现在在每次非嵌套的成功调用上计算 `presentationMeta`,这是对已保留匹配或路径的一次有界投影 —— 与 render 消费的是同一份保留产出,所以没有第二次保留计算,线上也没有翻倍的搜索文本。序列化 meta 受 `searchMetaMaxBytes` 约束,所以宽泛搜索不再把无界的结构化副本持久化进会话日志。 + +无 search 卡片的 UI 渲染原始 `tool/result` 内容,所以没有消费方退化,TUI 也逐字节一致。渲染结构化形状的 web 消费方读 `truncated`/`total` 与按文件分组;因为视图只携带保留的、字节有界的页,想要完整结果的 UI 跟随面向模型文本里的 spill 定位符,与模型的做法完全一致。 + +## 测试 + +`packages/fs/tool-fs-search/tests/presentation.spec.ts` 钉住纯层:`groupMatchesByFile` 的首见文件顺序;`grepSearchMeta`/`globSearchMeta` 在共享保留产出上的投影,`total` 报告截断前计数、`truncated` 被带过;保留过程施加的每行预览预算;序列化 meta 字节上限丢弃末尾组/路径同时保留单个超大条目;以及 `searchViewFromMeta` 对两种良好形状、零结果空卡片、以及每种畸形情形(非对象/数组 meta、缺失或误型的 `truncated`/`total`、未知 `shape`、畸形 `files` 条目、非字符串 `paths`)的收窄。`packages/fs/tool-fs-search/tests/tools.spec.ts` 钉住经真实工具注册表的接线:被截断的 `grep`/`glob` execute 在 `result.meta` 上产出 `SearchMeta`,`presentResult` 构建搜索视图(无 `content`),嵌套 `run_code` 分发不计算 meta 故 `presentResult` 回退,失败或跨形状或畸形结果回退到 generic 卡片。搜索包 `src` 上保持 per-file 100% 覆盖。 + +## 相关 + +- [工具调用呈现的带标签渲染意图联合](../architecture/2026-07-02-tool-render-intent-union.md) —— 本 PR 用 `search` 结果标签扩展的 `card` 标签词汇。 +- [Canonical 工具输出契约](../architecture/2026-07-20-canonical-tool-output-contract.md) —— 本投影所乘的 value/render/`presentationMeta` 划分;结构化值留在执行本地,卡片乘 `meta`。 +- [Web terminal 卡片](2026-07-28-web-terminal-card.md) —— 本 PR 在后端镜像的先例:工具把结果投影进 `presentationMeta` 与一个 `presentResult` 视图;搜索卡片的 web 消费方是与之类比的后续。 diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml new file mode 100644 index 0000000000..cdf0c3a817 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md +2026-07-30-versioned-gui-welcome-onboarding.md: 0705469e02ddb9068722ae5d500c151f077c83fd +2026-07-30-versioned-gui-welcome-onboarding.zh.md: bdd21d635f824b8c4a4813e6bff7798b34ec9677 diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md new file mode 100644 index 0000000000..0705469e02 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md @@ -0,0 +1,35 @@ +# Agent Note: Versioned GUI welcome onboarding + +Status: implemented + +English | [中文](2026-07-30-versioned-gui-welcome-onboarding.zh.md) + +## Problem + +The GUI's credential onboarding begins with a DeepSeek-specific readiness check, but the internal-test notice applies to every user and must precede provider setup even when a credential is already configured. Treating both as independent overlays permits simultaneous dialogs, while a process-local dismissal cannot distinguish a completed notice from a window closed before acknowledgement or intentionally present revised copy once. + +## Decision + +**The Settings shell coordinates ordered steps.** `settings.onboarding` remains a root-scoped list, but `ui-settings` projects its entry ids and order into one coordinator and mounts only the first incomplete step. The active registrant receives `complete()` and `openSection(id)`; no later step mounts until ownership transfers. The product welcome registers at order `-100`, while `ui-models` retains only the conditional DeepSeek readiness and credential-routing step at order `0`. + +**Ownerless product onboarding belongs to `ui-settings-general`.** `src/onboarding-copy.ts` is the single editable source for the complete Chinese notice, its faithful English counterpart, the Continue labels, and `WELCOME_NOTICE_VERSION`. Runtime locale dictionaries derive their welcome values from that file, and tests import the same owner instead of repeating paragraph text. The notice is browser UI only: it creates no Session event and contributes no model-visible content. + +**Acknowledgement is durable per Harness profile.** The Host half registers a `ui-onboarding` section in the user-settings seam, stored under the active `$DSH_HOME/settings.yaml`. The browser shows the notice unless `welcomeNoticeVersion` equals the owner constant exactly. Continue applies one path mutation with the current version and calls `complete()` only after the Host commits it; a failed write leaves the notice open, and closing the page or process writes nothing. Bumping the constant intentionally makes every profile acknowledge the revised copy once. + +**Concurrent views converge without stale replacement.** The acknowledgement write omits `expectedRevision` deliberately: every tab writes the same version to one path, so the operation is idempotent and preserves sibling fields instead of rebuilding the section. `settings/document-updated` becomes `host/settings-changed`; an already mounted tab refetches and advances when another tab or an external editor commits the current version. The API proxy exposes this one product namespace through a closed allowlist beside configurable-provider namespaces, without treating its changes as model-catalog invalidations. + +**Onboarding temporarily owns the viewport as one continuous stage.** A solid product surface replaces the complete application view through a body-level portal and marks the underlying app root inert; the exact required mask remains mounted behind that surface with `position:absolute`, zero left/right/bottom offsets, `top:80px`, `rgba(0, 0, 0, 0.24)`, and `backdrop-filter: blur(2px)`. Welcome and conditional credential setup render as successive pages in this stage instead of independent modals. Both pages reuse the Web UI's black `BrandWordmark`. The welcome page preserves the four authored paragraphs verbatim under the `内测声明` title; every paragraph uses one 16/28 body scale, and only the requested action clause inside the final paragraph receives a subtle 500 weight. A short staggered opacity/vertical entrance supplies pacing without blocking interaction and disappears under reduced motion. The title receives initial focus, Continue is the sole button, and no close, Escape, or mask-click path exists. + +## Alternatives considered + +**Browser local storage** — rejected because acknowledgement would follow one browser profile rather than `$DSH_HOME`; a fresh Harness profile could incorrectly inherit a prior acknowledgement, and external profile edits would have no authoritative update stream. + +**A second independent modal in `ui-settings-general`** — rejected because list registrants would still stack whenever welcome and credential readiness were both true. Ordered ownership belongs to the shell that declares and renders the list. + +**Persisting on render or window close** — rejected because observation is not acknowledgement and close delivery is unreliable. Only the explicit Continue commit may suppress the next launch. + +**A generic public settings-exposure flag** — rejected because one product namespace does not justify widening every settings registrant's public configuration surface. The gateway keeps an explicit closed allowlist. + +## Consequences + +A fresh profile always sees the welcome notice before provider-specific onboarding; an already configured credential skips only the later DeepSeek step. Reloading after Continue stays past the acknowledged version, changing the owner version presents it again, and closing before Continue leaves the next launch unchanged. Focused store and React tests pin exact-version comparison, write failure, sole-action behavior, no-dismiss paths, coordinator ordering, conditional DeepSeek transfer, and HMR cleanup. The real Chromium scenario boots the shipped Web composition with an isolated harness home, verifies the exact mask geometry and computed styles, reloads before and after acknowledgement, continues into missing-credential setup, confirms an acknowledged-version mismatch returns while the credential is configured, and checks the browser console. diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md new file mode 100644 index 0000000000..bdd21d635f --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md @@ -0,0 +1,35 @@ +# Agent Note: 版本化 GUI 欢迎引导 + +Status: implemented + +[English](2026-07-30-versioned-gui-welcome-onboarding.md) | 中文 + +## 问题 + +GUI 的凭据引导从 DeepSeek 专用的就绪状态检查开始,但内部测试通知适用于每位用户,即使凭据已经配置,也必须先于提供方设置显示。若把两者作为独立浮层处理,多个对话框可能同时出现;仅存于进程内的关闭标记既无法区分通知已完成确认还是窗口在确认前已关闭,也无法在文案有意修订后重新显示一次通知。 + +## 决策 + +**设置外壳协调有序步骤。** `settings.onboarding` 仍是根作用域 list,但 `ui-settings` 会把其中各条目的 id 和顺序投影到一个协调器中,并且只挂载第一个未完成的步骤。当前注册方会收到 `complete()` 和 `openSection(id)`;所有权转移前,不会挂载后续步骤。产品欢迎步骤的顺序为 `-100`,`ui-models` 则只保留顺序为 `0` 的 DeepSeek 条件式就绪状态与凭据跳转步骤。 + +**不属于单一功能的产品引导由 `ui-settings-general` 持有。** `src/onboarding-copy.ts` 是完整中文通知、忠实英文对侧文案、两种语言的「继续」按钮文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源。运行时 locale 字典从该文件派生欢迎文案,测试也导入同一个所有者,而不重复段落文本。该通知只存在于浏览器 UI:它不会创建会话事件,也不会贡献任何模型可见内容。 + +**确认状态按 Harness profile 持久化。** 宿主端在 user-settings seam 中注册 `ui-onboarding` 分节,并存入当前 `$DSH_HOME/settings.yaml`。除非 `welcomeNoticeVersion` 与文案所有者文件中的常量精确相等,否则浏览器会显示通知。「继续」会以当前版本执行一次路径变更,并且仅在宿主端提交成功后调用 `complete()`;写入失败时通知保持打开,关闭页面或进程则不会写入任何内容。提升该常量会有意要求每个 profile 对修订后的文案重新确认一次。 + +**并发视图无需陈旧的整体替换即可收敛。** 确认写入有意省略 `expectedRevision`:每个标签页都向同一路径写入相同版本,因此该操作是幂等的,并会保留同级字段,而不是重建整个分节。`settings/document-updated` 会转为 `host/settings-changed`;另一个标签页或外部编辑器提交当前版本后,已挂载的标签页会重新拉取状态并推进。API 网关在可配置提供方 namespace 之外,通过封闭的允许列表暴露这一个产品 namespace,同时不会把它的变更视为模型目录失效事件。 + +**引导流程会暂时接管视口,形成一个连续阶段。** 纯色产品界面通过挂载到 `body` 的 portal 取代完整的应用视图,并将底层应用根节点标记为 inert;严格符合要求的遮罩仍挂载在该界面后方,并保留 `position:absolute`、left/right/bottom 偏移量为零、`top:80px`、`rgba(0, 0, 0, 0.24)` 和 `backdrop-filter: blur(2px)`。欢迎页和按条件显示的凭据设置页在这一阶段中依次呈现,而不是各自作为独立的模态窗口。两个页面都复用 Web UI 的黑色 `BrandWordmark`。欢迎页在 `内测声明` 标题下逐字保留既定的四段文案;所有段落统一采用 16/28 的正文字号与行高,只有最后一段中指定的行动语句使用较为克制的 500 字重。短暂的错落式透明度与纵向位移动画营造出舒缓节奏,但不会阻碍交互,并会在用户启用减少动态效果时禁用。初始焦点落在标题上,「继续」是唯一按钮,且不存在关闭、Escape 或点击遮罩的退出路径。 + +## 曾考虑的替代方案 + +**浏览器本地存储**:不予采用,因为确认状态会跟随某个浏览器 profile,而不是 `$DSH_HOME`;全新的 Harness profile 可能错误继承此前的确认状态,外部 profile 编辑也没有权威更新流。 + +**在 `ui-settings-general` 中再增加一个独立模态窗口**:不予采用,因为欢迎通知和凭据就绪状态同时为真时,list 注册方仍会堆叠。声明并渲染该 list 的外壳应当持有有序所有权。 + +**在渲染或窗口关闭时持久化**:不予采用,因为看见通知不等于确认,窗口关闭事件也无法可靠送达。只有显式提交「继续」才能阻止通知在下次启动时再次显示。 + +**通用的公开设置暴露标志**:不予采用,因为一个产品 namespace 不足以证明应当扩大每个 settings 注册方的公开配置面。网关保留显式的封闭允许列表。 + +## 后果 + +全新 profile 始终会在提供方专用引导之前看到欢迎通知;凭据已经配置时,只会跳过后续 DeepSeek 步骤。点击「继续」后重新加载不会再次显示已确认版本,更改文案所有者文件中的版本值会让通知重新出现,而确认前关闭窗口不会改变下次启动。针对性的 store 与 React 测试固化了精确版本比较、写入失败、单一操作、不可关闭路径、协调器顺序、按条件移交 DeepSeek 步骤和 HMR(热模块替换)清理行为。真实 Chromium 场景会使用隔离的 harness 家目录启动随产品提供的 Web 组合,验证遮罩的精确几何尺寸和计算样式,在确认前后分别重新加载,继续进入凭据缺失设置流程,确认凭据已配置时确认版本不匹配仍会使通知重新出现,并检查浏览器控制台。 diff --git a/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml b/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml new file mode 100644 index 0000000000..f06c290bb3 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml @@ -0,0 +1,6 @@ +# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each +# side as of the last confirmed-consistent state. Both languages carry equal authority; +# after editing either side, bring the other along and re-record with: +# pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-31-web-default-search.md +2026-07-31-web-default-search.md: ddc047a963212cb228da67c6c33128877cacf92c +2026-07-31-web-default-search.zh.md: 05c30b625953ccd54c127a97b646ad7db75f693b diff --git a/.agents/notes/implemented/feature/2026-07-31-web-default-search.md b/.agents/notes/implemented/feature/2026-07-31-web-default-search.md new file mode 100644 index 0000000000..ddc047a963 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-31-web-default-search.md @@ -0,0 +1,35 @@ +# Agent Note: Default Web search in the Web/headless composition + +Status: implemented + +English | [中文](2026-07-31-web-default-search.zh.md) + +## Problem + +The harness had a complete Web capability family—provider registry, DeepSeek/Exa/Perplexity search providers, local fetch, stable model tools, and structured result presentation—but the shipped `dsh web` composition mounted none of it. The model could not discover current information unless a deployment supplied a custom overlay. Merely mounting the existing DeepSeek provider would not complete the WebUI path: the Models page stores `DEEPSEEK_API_KEY` through `ctx.credentials`, while the search provider froze only the process environment at plugin load, so a key entered or rotated in the running UI would not reach search. + +## Decision + +`apps/cli/config/web.cordis.yml` explicitly mounts `dsh-web` with `searchProvider: deepseek-official`, `dsh-web-search-deepseek`, and `dsh-tool-web` with `fetch: false`. It does not mount `dsh-web-fetch-local` or select a fetch provider. The shared overlay makes only `web_search` a default for browser and headless sessions; the TUI composition remains unchanged. The explicit search provider id keeps selection independent of registration order and leaves personal or `--config` overlays able to replace or disable the rows. + +DeepSeek search uses the same `DEEPSEEK_API_KEY` credential reference as the official conversation adapter. The provider resolves that reference inside every search through the optional `ctx.credentials` service; only a composition without the seam falls back to the launching process environment, and a non-empty literal `apiKey` remains the programmatic last resort. A stored or rotated Web Models key therefore reaches the next search without restarting or retaining the value on the provider. Because `WebSearchProvider.available()` is synchronous, it treats an installed resolver as locally usable and missing dynamic credentials fail the operation with the provider-specific `WEB_PROVIDER_CREDENTIAL_MISSING` code while the stable tool schema stays registered. + +Search keeps its endpoint distinct from chat completions: `DEEPSEEK_SEARCH_BASE_URL` overrides the Anthropic-compatible base, while `DEEPSEEK_BASE_URL` continues to configure conversation requests. Each `web_search` performs an auxiliary DeepSeek Messages call with the native search server tool. Immediately before dispatch, the provider appends a log-only `web/deepseek-search-llm-request` event to the initiating Agent session with the resolved endpoint, API version, and exact secret-free JSON body. Credential preflight remains provider-local and races caller cancellation; neither concern expands the generic Web or credentials seams. + +The default mount does not create a Web-specific permission policy. `web_search` executes outside the bash/filesystem sandbox and approval presets, following `dsh-tool-web`'s existing contract. It does not mount `web_fetch` or a local fetch provider, so the default does not grant model-selected arbitrary URL retrieval. The shipped deployment already defaults to `danger-full-access`; a future restricted-network product stance must add a `tools/pre-execute` policy or capability-specific network confinement rather than implying that filesystem access mode governs Web calls. + +## Alternatives considered + +**Mount only `dsh-tool-web`.** Rejected because stable schemas without registered providers would make every default call fail; enablement and backend availability are deliberately separate, but a shipped default must supply its intended implementations. + +**Read `$DSH_HOME/.env` from `cordis.yml` or hoist it into `process.env`.** Rejected because the credential provider owns that document, environment values are read-only overrides, and hoisting would make stored keys unrotatable while bypassing the audited secret boundary. + +**Freeze `process.env.DEEPSEEK_API_KEY` at provider load.** Rejected because the Web Models page writes through `ctx.credentials`; the product's documented first-run path must make the next operation work without a restart. + +**Mount Web tools in `base.cordis.yml`.** Rejected because that would also change the TUI deployment. The browser and headless entries already share `web.cordis.yml`; they gain the capability together while TUI remains an explicit later decision. + +**Enable search and fetch together.** Rejected because default `web_fetch` would allow model-selected anonymous outbound HTTP(S) retrieval to arbitrary URLs. Search covers discovery; deployments that accept broader retrieval can opt into `dsh-web-fetch-local` and set `dsh-tool-web`'s `fetch` option to `true` in their overlay. + +## Consequences + +Web/headless model requests carry only the `web_search` schema and search-only prompt guidance in native mode; Code Mode exposes the same search capability beneath `run_code`. The prompt tells the model to use returned snippets and never advertises the disabled `web_fetch` tool. Search adds a complete auxiliary model call and may use the native server tool multiple times; its exact secret-free request remains reconstructable from the initiating session log. The default offers search-result snippets and source metadata but no arbitrary page retrieval; deployments that need full-page fetch must opt in. The Web snapshot lane boots the shipped tree, drives a replayed `web_search` call through the real DeepSeek provider against a local Messages fixture, asserts the durable auxiliary request and structured result, and pins the settled browser presentation. The real-composition smoke test pins the absence of `web_fetch`; provider tests pin missing, stored, and rotated credential behavior plus literal and ambient compatibility. diff --git a/.agents/notes/implemented/feature/2026-07-31-web-default-search.zh.md b/.agents/notes/implemented/feature/2026-07-31-web-default-search.zh.md new file mode 100644 index 0000000000..05c30b6259 --- /dev/null +++ b/.agents/notes/implemented/feature/2026-07-31-web-default-search.zh.md @@ -0,0 +1,35 @@ +# Agent Note: Web/无头组合中的默认 Web 搜索 + +Status: implemented + +[English](2026-07-31-web-default-search.md) | 中文 + +## 问题 + +该 harness 已具备完整的 Web 能力体系:提供方注册表、DeepSeek、Exa 和 Perplexity 搜索提供方、本地抓取、稳定的面向模型工具,以及结构化结果呈现,但已交付的 `dsh web` 组合没有挂载其中任何一项。除非部署提供自定义覆盖层,否则模型无法发现最新信息。仅挂载现有 DeepSeek 提供方仍无法打通 WebUI 链路:Models 页面通过 `ctx.credentials` 存储 `DEEPSEEK_API_KEY`,而搜索提供方只会在插件加载时固定读取进程环境,因此在运行中的 UI 输入或轮换的密钥无法用于搜索。 + +## 决策 + +`apps/cli/config/web.cordis.yml` 明确挂载 `dsh-web`,配置 `searchProvider: deepseek-official`,同时挂载 `dsh-web-search-deepseek`,并以 `fetch: false` 挂载 `dsh-tool-web`。它不挂载 `dsh-web-fetch-local`,也不选择抓取提供方。共享覆盖层只将 `web_search` 设为浏览器与无头会话的默认工具;TUI 组合保持不变。显式搜索提供方 id 使选择不受注册顺序影响,同时个人覆盖层或 `--config` 覆盖层仍可替换或禁用这些配置项。 + +DeepSeek 搜索使用与官方会话适配器相同的 `DEEPSEEK_API_KEY` 凭据引用。提供方在每次搜索内部通过可选的 `ctx.credentials` 服务解析该引用;只有未挂载该 seam 的组合才会回退到启动进程的环境变量,非空的 `apiKey` 字面值仍作为程序化配置的最后兜底。因此,由 Web 的 Models 页存储或轮换的密钥无需重启即可用于下一次搜索,提供方也无需保留该值。由于 `WebSearchProvider.available()` 是同步方法,它会将已安装解析器视为本地可用;若动态凭据缺失,操作会以提供方专属错误码 `WEB_PROVIDER_CREDENTIAL_MISSING` 失败,而稳定的工具 schema 仍保持注册。 + +搜索端点与 chat completions 保持独立:`DEEPSEEK_SEARCH_BASE_URL` 覆盖 Anthropic 兼容基址,`DEEPSEEK_BASE_URL` 则继续配置会话请求。每次 `web_search` 都会发起一次辅助 DeepSeek Messages 调用,并携带原生搜索服务器工具。发出请求前一刻,提供方会向发起请求的 agent(智能体)会话追加仅用于日志的 LLM(大语言模型)请求事件 `web/deepseek-search-llm-request`,其中包含已解析端点、API 版本,以及不含密钥的精确 JSON 请求体。凭据预检仍留在提供方内部,并与调用方取消存在竞态;这两项关注点都不会扩展通用 Web seam 或凭据 seam。 + +默认挂载不会创建 Web 专用权限策略。`web_search` 在 bash/文件系统沙箱及审批预设之外执行,并遵循 `dsh-tool-web` 的现有契约。组合不挂载 `web_fetch` 或本地抓取提供方,因此默认配置不会允许模型自行选择任意 URL 进行抓取。已交付部署的默认值本就是 `danger-full-access`;未来如果产品采取受限网络策略,必须添加 `tools/pre-execute` 策略或按能力限制网络访问,而不能暗示文件系统访问模式会管辖 Web 调用。 + +## 考虑过的替代方案 + +**仅挂载 `dsh-tool-web`。** 不予采纳:稳定的 schema 如果没有已注册提供方,每次默认调用都会失败。启用状态与后端可用性刻意分离,但已交付的默认配置必须提供其预期实现。 + +**从 `cordis.yml` 读取 `$DSH_HOME/.env`,或将其提升到 `process.env`。** 不予采纳:凭据提供方拥有该文件,环境变量值是只读覆盖;提升后存储的密钥将无法轮换,还会绕过经审计的密钥边界。 + +**在提供方加载时固定读取 `process.env.DEEPSEEK_API_KEY`。** 不予采纳:Web Models 页面通过 `ctx.credentials` 写入密钥;产品文档规定的首次运行路径必须保证下一次操作无需重启即可生效。 + +**在 `base.cordis.yml` 中挂载 Web 工具。** 不予采纳:这也会改变 TUI 部署。浏览器与无头入口已经共享 `web.cordis.yml`;两者会一同获得该能力,是否为 TUI 启用则仍留作后续显式决策。 + +**同时启用搜索和抓取。** 不予采纳:默认启用 `web_fetch` 会允许模型自行选择任意 URL,执行匿名出站 HTTP(S) 抓取。搜索负责发现信息;接受更广泛抓取范围的部署可以在覆盖层中选择启用 `dsh-web-fetch-local`,并将 `dsh-tool-web` 的 `fetch` 选项设为 `true`。 + +## 后果 + +Web/无头模型请求在原生模式下只会携带 `web_search` schema,以及仅用于搜索的提示词指引;Code Mode 通过 `run_code` 公开相同的搜索能力。该提示词要求模型使用返回的 snippet,且绝不会向模型提及已禁用的 `web_fetch` 工具。搜索会增加一次完整的辅助模型调用,并可能多次使用原生服务器工具;发起会话的日志仍可精确重建其不含密钥的请求。默认配置会提供搜索结果 snippet 与来源元数据,但不支持任意页面抓取;需要抓取完整页面的部署必须自行选择启用抓取。Web 快照通道会启动已交付配置树,使用本地 Messages fixture(测试前置数据),经由真实 DeepSeek 提供方驱动一次回放的 `web_search` 调用,断言持久化的辅助请求与结构化结果,并固定最终浏览器呈现。真实组合冒烟测试固定了不提供 `web_fetch` 这一事实;提供方测试固定缺失、已存储及已轮换凭据的行为,以及字面值与环境变量的兼容性。 diff --git a/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md b/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md new file mode 100644 index 0000000000..765c07c4b7 --- /dev/null +++ b/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md @@ -0,0 +1,10 @@ +- region "内测声明": + - heading "内测声明" [level=2] + - paragraph: 感谢您愿意拨冗试用 DeepSeek Harness。 + - paragraph: 目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 + - blockquote: “如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 + - paragraph: + - text: 我们尤其希望听见那些失败、困惑与不顺手的时刻—— + - strong: 如果您有任何反馈与建议,请在企业微信群中留言告诉我们 + - text: 。每一条反馈,都会帮助我们把它打磨得更好。 + - button "继续" diff --git a/apps/web/tests/snapshots/web-search-round/session.jsonl b/apps/web/tests/snapshots/web-search-round/session.jsonl new file mode 100644 index 0000000000..bb0a15fd0b --- /dev/null +++ b/apps/web/tests/snapshots/web-search-round/session.jsonl @@ -0,0 +1,12 @@ +{"type":"session","version":0,"id":"{{sessionId}}","createdAt":1785456000000,"cwd":"{{cwd}}"} +{"type":"user/message","seq":0,"time":1785456000001,"data":{"content":[{"type":"text","text":"Use web_search to search exactly \"DeepSeek Harness snapshot search\". Then reply exactly SEARCH_DONE and stop."}],"source":{"kind":"user","rpcId":"{{rpcId}}"}},"surfaceOp":"append"} +{"type":"assistant/chunk","seq":1,"time":1785456000002,"data":{"turn":1,"step":1,"chunk":{"type":"block-start","index":0,"blockType":"tool-call"}}} +{"type":"assistant/chunk","seq":2,"time":1785456000003,"data":{"turn":1,"step":1,"chunk":{"type":"tool-call-delta","index":0,"id":"call_web_search","name":"web_search","argumentsDelta":"{\"query\":\"DeepSeek Harness snapshot search\"}"}}} +{"type":"assistant/chunk","seq":3,"time":1785456000004,"data":{"turn":1,"step":1,"chunk":{"type":"block-end","index":0,"block":{"type":"tool-call","id":"call_web_search","name":"web_search","arguments":"{\"query\":\"DeepSeek Harness snapshot search\"}"}}}} +{"type":"assistant/chunk","seq":4,"time":1785456000005,"data":{"turn":1,"step":1,"chunk":{"type":"usage","usage":{"inputTokens":10,"outputTokens":5}}}} +{"type":"assistant/chunk","seq":5,"time":1785456000006,"data":{"turn":1,"step":1,"chunk":{"type":"finish","reason":{"kind":"tool-calls"}}}} +{"type":"assistant/chunk","seq":6,"time":1785456000007,"data":{"turn":1,"step":2,"chunk":{"type":"block-start","index":0,"blockType":"text"}}} +{"type":"assistant/chunk","seq":7,"time":1785456000008,"data":{"turn":1,"step":2,"chunk":{"type":"text-delta","index":0,"text":"SEARCH_DONE"}}} +{"type":"assistant/chunk","seq":8,"time":1785456000009,"data":{"turn":1,"step":2,"chunk":{"type":"block-end","index":0,"block":{"type":"text","text":"SEARCH_DONE"}}}} +{"type":"assistant/chunk","seq":9,"time":1785456000010,"data":{"turn":1,"step":2,"chunk":{"type":"usage","usage":{"inputTokens":12,"outputTokens":2}}}} +{"type":"assistant/chunk","seq":10,"time":1785456000011,"data":{"turn":1,"step":2,"chunk":{"type":"finish","reason":{"kind":"stop"}}}} diff --git a/apps/web/tests/snapshots/web-search-round/ui.expected.md b/apps/web/tests/snapshots/web-search-round/ui.expected.md new file mode 100644 index 0000000000..28a9d4fb47 --- /dev/null +++ b/apps/web/tests/snapshots/web-search-round/ui.expected.md @@ -0,0 +1,35 @@ +- banner: + - navigation "Session hierarchy": + - button "Use web_search to search exactly" [disabled] + - tablist: + - tab "Chat" [selected] + - tab "Trajectory" +- text: Use web_search to search exactly "DeepSeek Harness snapshot search". Then reply exactly SEARCH_DONE and stop. {{clock}} +- button "Copy": + - img +- button "Branch into a new conversation": + - img +- button "Edit": + - img +- img +- text: Search DeepSeek Harness snapshot search +- list: + - listitem: + - link "Snapshot Search Result": + - /url: https://docs.example.test/search + - text: Snapshot search excerpt. 2026-07-31 +- paragraph: SEARCH_DONE +- button "Copy": + - img +- button "Branch into a new conversation": + - img +- text: {{clock}} +- textbox "Message the agent" +- button "Commands": + - img +- 'button "Access mode, current: Full access"': Full access +- button "Select model, current DeepSeek-V4-Flash": + - text: DeepSeek-V4-Flash + - img +- button "Send message" [disabled] +- text: 1 turns · 2 steps Tool call {{duration}} Cache hit 0% Input 22 tok · Output 7 tok diff --git a/apps/web/tests/web-search-round.e2e.ts b/apps/web/tests/web-search-round.e2e.ts new file mode 100644 index 0000000000..804c7a70ca --- /dev/null +++ b/apps/web/tests/web-search-round.e2e.ts @@ -0,0 +1,207 @@ +// Web e2e scenario for the shipped default search composition. A real browser +// drives `web_search`; the model stream is replayed while the real DeepSeek +// provider calls a deterministic local Anthropic-compatible endpoint through +// the real credentials service. +import { readFile } from 'node:fs/promises' +import { createServer, type Server } from 'node:http' +import type { AddressInfo } from 'node:net' +import { fileURLToPath } from 'node:url' +import type { Browser, Page } from 'playwright' +import { chromium } from 'playwright' +import { afterAll, beforeAll, describe, expect, it, onTestFailed } from 'vitest' +import { credentialRef } from '@deepseek-ai/dsh-credentials' +import type { SessionEvent } from '@deepseek-ai/dsh-session' +import { + assertFixtureInventory, captureStableAria, compareOrRefreshGolden, fixtureUserPrompts, + launchWebScaffold, recordFixture, watchConsole, webSnapshotMode, type WebScaffold, +} from './scaffold.ts' +import { connectFreshWorkspace, newEnglishPage, saveFailureShot } from './support.ts' + +const SNAPSHOT_DIR = fileURLToPath(new URL('./snapshots/web-search-round', import.meta.url)) +const FIXTURE = fileURLToPath(new URL('./snapshots/web-search-round/session.jsonl', import.meta.url)) +const UI_EXPECTED = fileURLToPath(new URL('./snapshots/web-search-round/ui.expected.md', import.meta.url)) +const MODE = webSnapshotMode() +const QUERY = 'DeepSeek Harness snapshot search' +const PROMPT = `Use web_search to search exactly "${QUERY}". Then reply exactly SEARCH_DONE and stop.` +const SEARCH_CREDENTIAL_REF = credentialRef('DSH_WEB_SEARCH_E2E_KEY') +const SEARCH_CREDENTIAL = 'snapshot-search-key' +const RESULT_URL = 'https://docs.example.test/search' + +interface CapturedSearchRequest { + path: string + apiKey: string | undefined + body: unknown +} + +/** Start the deterministic DeepSeek Messages double used by the real provider. */ +async function startSearchServer(captured: CapturedSearchRequest[]): Promise<{ server: Server; baseURL: string }> { + const server = createServer((request, response) => { + let body = '' + request.setEncoding('utf8') + request.on('data', (chunk: string) => { body += chunk }) + request.on('end', () => { + captured.push({ + path: request.url ?? '', + apiKey: typeof request.headers['x-api-key'] === 'string' ? request.headers['x-api-key'] : undefined, + body: JSON.parse(body) as unknown, + }) + response.writeHead(200, { 'content-type': 'application/json' }) + response.end(JSON.stringify({ + content: [ + { + type: 'text', + text: 'Found one source.', + citations: [{ + type: 'web_search_result_location', + url: RESULT_URL, + cited_text: 'Snapshot search excerpt.', + }], + }, + { + type: 'web_search_tool_result', + content: [{ + type: 'web_search_result', + url: RESULT_URL, + title: 'Snapshot Search Result', + page_age: '2026-07-31', + }], + }, + ], + })) + }) + }) + await new Promise((resolve, reject) => { + server.once('error', reject) + server.listen(0, '127.0.0.1', () => { + server.off('error', reject) + resolve() + }) + }) + const address = server.address() as AddressInfo + return { server, baseURL: `http://127.0.0.1:${address.port}` } +} + +describe('web e2e: shipped default web search', () => { + let scaffold: WebScaffold + let browser: Browser + let page: Page + let searchServer: Server | undefined + let searchBaseURL: string + let tripwire: ReturnType + const searchRequests: CapturedSearchRequest[] = [] + const sessionEvents: SessionEvent[] = [] + + beforeAll(async () => { + const search = await startSearchServer(searchRequests) + searchServer = search.server + searchBaseURL = search.baseURL + scaffold = await launchWebScaffold({ + deepSeekSearch: { + baseURL: search.baseURL, + apiKeyEnv: SEARCH_CREDENTIAL_REF, + }, + ...(MODE === 'record' ? {} : { replayFixture: FIXTURE, paceMs: 15 }), + }) + await scaffold.ctx.credentials.set(SEARCH_CREDENTIAL_REF, SEARCH_CREDENTIAL) + scaffold.ctx.on('session/event', (_session, event: SessionEvent) => { sessionEvents.push(event) }) + browser = await chromium.launch() + page = await newEnglishPage(browser) + tripwire = watchConsole(page) + await page.goto(scaffold.baseUrl, { waitUntil: 'load' }) + await page.waitForSelector('[class*="frame"]', { timeout: 30_000 }) + await connectFreshWorkspace(page) + }, 120_000) + + afterAll(async () => { + await browser?.close() + await scaffold?.close() + await new Promise((resolve, reject) => { + if (searchServer === undefined) { + resolve() + return + } + searchServer.close((error) => { + if (error === undefined) resolve() + else reject(error) + }) + }) + }) + + it('drives the recorded search to a settled turn (all modes)', async () => { + onTestFailed(() => saveFailureShot(page, 'web-e2e-search-drive')) + if (MODE !== 'record') { + expect(fixtureUserPrompts(await readFile(FIXTURE, 'utf8'))).toEqual([PROMPT]) + } + const input = page.locator('textarea').first() + await input.waitFor({ timeout: 10_000 }) + const settled = scaffold.whenTurnSettled() + await input.fill(PROMPT) + await input.press('Enter') + const sessionId = await settled + if (MODE === 'record') await recordFixture(scaffold, sessionId, FIXTURE) + }, 200_000) + + it.skipIf(MODE === 'record')('uses the real provider and persists the structured result', () => { + expect(searchRequests).toHaveLength(1) + expect(searchRequests[0]).toMatchObject({ + path: '/messages', + apiKey: SEARCH_CREDENTIAL, + body: { + messages: [{ + role: 'user', + content: [{ type: 'text', text: `Perform a web search for the query: ${QUERY}` }], + }], + tools: [{ type: 'web_search_20250305', name: 'web_search' }], + }, + }) + + const auxiliaryRequest = sessionEvents.find( + (event): event is Extract => + event.type === 'web/deepseek-search-llm-request', + ) + expect(auxiliaryRequest?.data).toEqual({ + endpoint: `${searchBaseURL}/messages`, + apiVersion: '2023-06-01', + body: searchRequests[0]?.body, + }) + + const searchCall = sessionEvents.find( + (event): event is Extract => + event.type === 'tool/call' && event.data.name === 'web_search', + ) + if (searchCall === undefined) throw new Error('the replayed turn did not call web_search') + const searchResult = sessionEvents.find( + (event): event is Extract => + event.type === 'tool/result' && event.data.message.source.callId === searchCall.data.callId, + ) + if (searchResult === undefined) throw new Error('web_search produced no durable result') + const content = searchResult.data.message.content[0] + expect(content.isError).toBe(false) + expect(content.content.filter(block => block.type === 'text').map(block => block.text).join('')) + .toContain(`[Snapshot Search Result](${RESULT_URL})`) + expect(searchResult.data.meta).toMatchObject({ + sources: [{ + url: RESULT_URL, + title: 'Snapshot Search Result', + snippet: 'Snapshot search excerpt.', + publishedAt: '2026-07-31', + }], + truncated: false, + }) + }) + + it.skipIf(MODE === 'record')('matches the settled search card aria golden', async () => { + onTestFailed(() => saveFailureShot(page, 'web-e2e-search-aria')) + await expect.poll(() => page.getByText('SEARCH_DONE', { exact: true }).count(), { timeout: 15_000 }) + .toBeGreaterThanOrEqual(1) + await page.locator('[data-tool="web_search"]').waitFor({ timeout: 10_000 }) + const snapshot = await captureStableAria(page, '[class*="centerCol"]', scaffold.workspaceCwd) + await compareOrRefreshGolden(UI_EXPECTED, snapshot, MODE) + }) + + it.skipIf(MODE === 'record')('stayed clean and kept the exact fixture inventory', async () => { + expect(tripwire.pageErrors).toEqual([]) + expect(tripwire.warnings).toEqual([]) + await assertFixtureInventory(SNAPSHOT_DIR, ['session.jsonl', 'ui.expected.md']) + }) +}) diff --git a/docs/cordis-paper.pdf b/docs/cordis-paper.pdf new file mode 100644 index 0000000000..9d722738d7 --- /dev/null +++ b/docs/cordis-paper.pdf @@ -0,0 +1,65905 @@ +%PDF-1.7 +% + +1 0 obj +<< + /Type /Pages + /Count 48 + /Kids [4681 0 R 4715 0 R 4736 0 R 4743 0 R 4756 0 R 4769 0 R 4787 0 R 4799 0 R 4803 0 R 4806 0 R 4808 0 R 4812 0 R 4817 0 R 4820 0 R 4822 0 R 4829 0 R 4836 0 R 4840 0 R 4844 0 R 4848 0 R 4852 0 R 4864 0 R 4874 0 R 4884 0 R 4899 0 R 4905 0 R 4917 0 R 4921 0 R 4925 0 R 4929 0 R 4941 0 R 4947 0 R 4956 0 R 4973 0 R 4976 0 R 4985 0 R 4998 0 R 5009 0 R 5029 0 R 5053 0 R 5066 0 R 5095 0 R 5127 0 R 5155 0 R 5189 0 R 5221 0 R 5251 0 R 5270 0 R] +>> +endobj + +2 0 obj +<< + /Type /Outlines + /First 3 0 R + /Last 52 0 R + /Count 8 +>> +endobj + +3 0 obj +<< + /Parent 2 0 R + /Next 10 0 R + /First 4 0 R + /Last 9 0 R + /Count -3 + /Title (1. Introduction) + /Dest 4412 0 R +>> +endobj + +4 0 obj +<< + /Parent 3 0 R + /Next 5 0 R + /Title (1.1. Dimensions of Composability) + /Dest 4406 0 R +>> +endobj + +5 0 obj +<< + /Parent 3 0 R + /Next 9 0 R + /Prev 4 0 R + /First 6 0 R + /Last 8 0 R + /Count -3 + /Title (1.2. Motivating Examples) + /Dest 4410 0 R +>> +endobj + +6 0 obj +<< + /Parent 5 0 R + /Next 7 0 R + /Title (1.2.1. Plugin Systems) + /Dest 4407 0 R +>> +endobj + +7 0 obj +<< + /Parent 5 0 R + /Next 8 0 R + /Prev 6 0 R + /Title (1.2.2. Self-Evolving Agent Harnesses) + /Dest 4408 0 R +>> +endobj + +8 0 obj +<< + /Parent 5 0 R + /Prev 7 0 R + /Title (1.2.3. The Coarse-Grained Workaround) + /Dest 4409 0 R +>> +endobj + +9 0 obj +<< + /Parent 3 0 R + /Prev 5 0 R + /Title (1.3. Contributions) + /Dest 4411 0 R +>> +endobj + +10 0 obj +<< + /Parent 2 0 R + /Next 14 0 R + /Prev 3 0 R + /First 11 0 R + /Last 13 0 R + /Count -3 + /Title (2. Preliminaries) + /Dest 4416 0 R +>> +endobj + +11 0 obj +<< + /Parent 10 0 R + /Next 12 0 R + /Title (2.1. Effects) + /Dest 4413 0 R +>> +endobj + +12 0 obj +<< + /Parent 10 0 R + /Next 13 0 R + /Prev 11 0 R + /Title (2.2. Coeffects) + /Dest 4414 0 R +>> +endobj + +13 0 obj +<< + /Parent 10 0 R + /Prev 12 0 R + /Title (2.3. Relationship to Dynamic Composability) + /Dest 4415 0 R +>> +endobj + +14 0 obj +<< + /Parent 2 0 R + /Next 30 0 R + /Prev 10 0 R + /First 15 0 R + /Last 27 0 R + /Count -4 + /Title (3. Revertible Effects and Reactive Coeffects) + /Dest 4432 0 R +>> +endobj + +15 0 obj +<< + /Parent 14 0 R + /Next 18 0 R + /First 16 0 R + /Last 17 0 R + /Count -2 + /Title (3.1. Revertible Effects) + /Dest 4419 0 R +>> +endobj + +16 0 obj +<< + /Parent 15 0 R + /Next 17 0 R + /Title (3.1.1. Effect Context) + /Dest 4417 0 R +>> +endobj + +17 0 obj +<< + /Parent 15 0 R + /Prev 16 0 R + /Title (3.1.2. Revertible Effect Functions) + /Dest 4418 0 R +>> +endobj + +18 0 obj +<< + /Parent 14 0 R + /Next 22 0 R + /Prev 15 0 R + /First 19 0 R + /Last 21 0 R + /Count -3 + /Title (3.2. Reactive Coeffects) + /Dest 4423 0 R +>> +endobj + +19 0 obj +<< + /Parent 18 0 R + /Next 20 0 R + /Title (3.2.1. Coeffect Context) + /Dest 4420 0 R +>> +endobj + +20 0 obj +<< + /Parent 18 0 R + /Next 21 0 R + /Prev 19 0 R + /Title (3.2.2. Specification and Notification) + /Dest 4421 0 R +>> +endobj + +21 0 obj +<< + /Parent 18 0 R + /Prev 20 0 R + /Title (3.2.3. Isolation and Interception) + /Dest 4422 0 R +>> +endobj + +22 0 obj +<< + /Parent 14 0 R + /Next 27 0 R + /Prev 18 0 R + /First 23 0 R + /Last 26 0 R + /Count -4 + /Title (3.3. Component Lifecycle) + /Dest 4428 0 R +>> +endobj + +23 0 obj +<< + /Parent 22 0 R + /Next 24 0 R + /Title (3.3.1. Idempotent Recovery) + /Dest 4424 0 R +>> +endobj + +24 0 obj +<< + /Parent 22 0 R + /Next 25 0 R + /Prev 23 0 R + /Title (3.3.2. Iteration) + /Dest 4425 0 R +>> +endobj + +25 0 obj +<< + /Parent 22 0 R + /Next 26 0 R + /Prev 24 0 R + /Title (3.3.3. Coherence) + /Dest 4426 0 R +>> +endobj + +26 0 obj +<< + /Parent 22 0 R + /Prev 25 0 R + /Title (3.3.4. Asynchrony) + /Dest 4427 0 R +>> +endobj + +27 0 obj +<< + /Parent 14 0 R + /Prev 22 0 R + /First 28 0 R + /Last 29 0 R + /Count -2 + /Title (3.4. The Context Paradigm) + /Dest 4431 0 R +>> +endobj + +28 0 obj +<< + /Parent 27 0 R + /Next 29 0 R + /Title (3.4.1. Unified Context) + /Dest 4429 0 R +>> +endobj + +29 0 obj +<< + /Parent 27 0 R + /Prev 28 0 R + /Title (3.4.2. Situating the Context Paradigm) + /Dest 4430 0 R +>> +endobj + +30 0 obj +<< + /Parent 2 0 R + /Next 40 0 R + /Prev 14 0 R + /First 31 0 R + /Last 39 0 R + /Count -3 + /Title (4. Implementation and Case Study) + /Dest 4442 0 R +>> +endobj + +31 0 obj +<< + /Parent 30 0 R + /Next 36 0 R + /First 32 0 R + /Last 35 0 R + /Count -4 + /Title (4.1. Core Library) + /Dest 4437 0 R +>> +endobj + +32 0 obj +<< + /Parent 31 0 R + /Next 33 0 R + /Title (4.1.1. Effect Tracking) + /Dest 4433 0 R +>> +endobj + +33 0 obj +<< + /Parent 31 0 R + /Next 34 0 R + /Prev 32 0 R + /Title (4.1.2. Coeffect Operations) + /Dest 4434 0 R +>> +endobj + +34 0 obj +<< + /Parent 31 0 R + /Next 35 0 R + /Prev 33 0 R + /Title (4.1.3. Component Lifecycle) + /Dest 4435 0 R +>> +endobj + +35 0 obj +<< + /Parent 31 0 R + /Prev 34 0 R + /Title (4.1.4. Context Access) + /Dest 4436 0 R +>> +endobj + +36 0 obj +<< + /Parent 30 0 R + /Next 39 0 R + /Prev 31 0 R + /First 37 0 R + /Last 38 0 R + /Count -2 + /Title (4.2. Component Loader) + /Dest 4440 0 R +>> +endobj + +37 0 obj +<< + /Parent 36 0 R + /Next 38 0 R + /Title (4.2.1. Declarative Configuration Layer) + /Dest 4438 0 R +>> +endobj + +38 0 obj +<< + /Parent 36 0 R + /Prev 37 0 R + /Title (4.2.2. Hot Module Replacement) + /Dest 4439 0 R +>> +endobj + +39 0 obj +<< + /Parent 30 0 R + /Prev 36 0 R + /Title (4.3. Case Study: Koishi) + /Dest 4441 0 R +>> +endobj + +40 0 obj +<< + /Parent 2 0 R + /Next 46 0 R + /Prev 30 0 R + /First 41 0 R + /Last 45 0 R + /Count -5 + /Title (5. Discussion) + /Dest 4448 0 R +>> +endobj + +41 0 obj +<< + /Parent 40 0 R + /Next 42 0 R + /Title (5.1. Service Multiplexing) + /Dest 4443 0 R +>> +endobj + +42 0 obj +<< + /Parent 40 0 R + /Next 43 0 R + /Prev 41 0 R + /Title (5.2. Access Control and Sandboxing) + /Dest 4444 0 R +>> +endobj + +43 0 obj +<< + /Parent 40 0 R + /Next 44 0 R + /Prev 42 0 R + /Title (5.3. Language Independence and Selection) + /Dest 4445 0 R +>> +endobj + +44 0 obj +<< + /Parent 40 0 R + /Next 45 0 R + /Prev 43 0 R + /Title (5.4. Mutual Dependencies and Component Granularity) + /Dest 4446 0 R +>> +endobj + +45 0 obj +<< + /Parent 40 0 R + /Prev 44 0 R + /Title (5.5. Dependency Typing and Versioning) + /Dest 4447 0 R +>> +endobj + +46 0 obj +<< + /Parent 2 0 R + /Next 51 0 R + /Prev 40 0 R + /First 47 0 R + /Last 50 0 R + /Count -4 + /Title (6. Related Work) + /Dest 4453 0 R +>> +endobj + +47 0 obj +<< + /Parent 46 0 R + /Next 48 0 R + /Title (6.1. Effect and Coeffect Systems) + /Dest 4449 0 R +>> +endobj + +48 0 obj +<< + /Parent 46 0 R + /Next 49 0 R + /Prev 47 0 R + /Title (6.2. Programming Paradigms) + /Dest 4450 0 R +>> +endobj + +49 0 obj +<< + /Parent 46 0 R + /Next 50 0 R + /Prev 48 0 R + /Title (6.3. Temporal Composability) + /Dest 4451 0 R +>> +endobj + +50 0 obj +<< + /Parent 46 0 R + /Prev 49 0 R + /Title (6.4. Spatial Composability) + /Dest 4452 0 R +>> +endobj + +51 0 obj +<< + /Parent 2 0 R + /Next 52 0 R + /Prev 46 0 R + /Title (7. Conclusion) + /Dest 4454 0 R +>> +endobj + +52 0 obj +<< + /Parent 2 0 R + /Prev 51 0 R + /Title (References) + /Dest 4455 0 R +>> +endobj + +53 0 obj +<< + /Nums [0 4306 0 R 1 4307 0 R 2 4308 0 R 3 4309 0 R 4 4310 0 R 5 4311 0 R 6 4312 0 R 7 4313 0 R 8 4314 0 R 9 4315 0 R 10 4316 0 R 11 4317 0 R 12 4318 0 R 13 4319 0 R 14 4320 0 R 15 4321 0 R 16 4322 0 R 17 4323 0 R 18 4324 0 R 19 4325 0 R 20 4326 0 R 21 4327 0 R 22 4328 0 R 23 4329 0 R 24 4330 0 R 25 4331 0 R 26 4332 0 R 27 4333 0 R 28 4334 0 R 29 4335 0 R 30 4336 0 R 31 4337 0 R 32 4338 0 R 33 4339 0 R 34 4340 0 R 35 4341 0 R 36 4342 0 R 37 4343 0 R 38 4344 0 R 39 4345 0 R 40 4346 0 R 41 4347 0 R 42 4348 0 R 43 4349 0 R 44 4350 0 R 45 4351 0 R 46 4352 0 R 47 4353 0 R] +>> +endobj + +54 0 obj +<< + /Type /StructTreeRoot + /RoleMap << + /Datetime /Span + /Terms /Part + /Title /P + /Strong /Span + /Em /Span + >> + /K [103 0 R] + /ParentTree << + /Nums [0 55 0 R 1 4287 0 R 2 4283 0 R 3 4279 0 R 4 4275 0 R 5 4271 0 R 6 4267 0 R 7 4262 0 R 8 4257 0 R 9 4253 0 R 10 4249 0 R 11 4245 0 R 12 4240 0 R 13 4236 0 R 14 4232 0 R 15 4228 0 R 16 4223 0 R 17 4219 0 R 18 4215 0 R 19 4211 0 R 20 4206 0 R 21 4202 0 R 22 4198 0 R 23 4194 0 R 24 4190 0 R 25 4185 0 R 26 4181 0 R 27 4177 0 R 28 4171 0 R 29 4167 0 R 30 4163 0 R 31 4159 0 R 32 4155 0 R 33 56 0 R 34 4155 0 R 35 4151 0 R 36 4146 0 R 37 4142 0 R 38 4138 0 R 39 4133 0 R 40 4128 0 R 41 4124 0 R 42 4120 0 R 43 4116 0 R 44 4112 0 R 45 4108 0 R 46 4103 0 R 47 4099 0 R 48 4095 0 R 49 4091 0 R 50 4087 0 R 51 4082 0 R 52 4079 0 R 53 57 0 R 54 4074 0 R 55 4071 0 R 56 4070 0 R 57 4055 0 R 58 4054 0 R 59 58 0 R 60 4046 0 R 61 4033 0 R 62 4028 0 R 63 4027 0 R 64 4024 0 R 65 4023 0 R 66 4022 0 R 67 4021 0 R 68 4020 0 R 69 4019 0 R 70 4043 0 R 71 59 0 R 72 4015 0 R 73 4013 0 R 74 4007 0 R 75 4006 0 R 76 4004 0 R 77 4003 0 R 78 3999 0 R 79 3993 0 R 80 3988 0 R 81 3986 0 R 82 3981 0 R 83 60 0 R 84 3976 0 R 85 3973 0 R 86 3972 0 R 87 3964 0 R 88 3961 0 R 89 3960 0 R 90 3952 0 R 91 3951 0 R 92 3947 0 R 93 3941 0 R 94 3940 0 R 95 3939 0 R 96 3938 0 R 97 3937 0 R 98 3933 0 R 99 3932 0 R 100 61 0 R 101 3927 0 R 102 3926 0 R 103 3915 0 R 104 3914 0 R 105 3906 0 R 106 3905 0 R 107 3904 0 R 108 3903 0 R 109 3898 0 R 110 3886 0 R 111 62 0 R 112 3883 0 R 113 3841 0 R 114 63 0 R 115 3768 0 R 116 64 0 R 117 65 0 R 118 3508 0 R 119 3507 0 R 120 66 0 R 121 3500 0 R 122 3499 0 R 123 3391 0 R 124 67 0 R 125 3361 0 R 126 68 0 R 127 69 0 R 128 3096 0 R 129 3091 0 R 130 3063 0 R 131 3049 0 R 132 3049 0 R 133 70 0 R 134 3049 0 R 135 3042 0 R 136 3035 0 R 137 3015 0 R 138 2978 0 R 139 71 0 R 140 2892 0 R 141 2890 0 R 142 72 0 R 143 2835 0 R 144 2804 0 R 145 73 0 R 146 2767 0 R 147 2761 0 R 148 74 0 R 149 2694 0 R 150 2687 0 R 151 75 0 R 152 2679 0 R 153 2678 0 R 154 2674 0 R 155 2671 0 R 156 2669 0 R 157 2667 0 R 158 2664 0 R 159 2659 0 R 160 2652 0 R 161 2644 0 R 162 76 0 R 163 2635 0 R 164 2552 0 R 165 2551 0 R 166 2550 0 R 167 2549 0 R 168 2546 0 R 169 2541 0 R 170 2535 0 R 171 77 0 R 172 2385 0 R 173 2383 0 R 174 2374 0 R 175 2367 0 R 176 2362 0 R 177 2342 0 R 178 2329 0 R 179 2327 0 R 180 78 0 R 181 2216 0 R 182 2213 0 R 183 2212 0 R 184 2209 0 R 185 2135 0 R 186 2130 0 R 187 2124 0 R 188 2123 0 R 189 2119 0 R 190 2116 0 R 191 2109 0 R 192 2106 0 R 193 2103 0 R 194 79 0 R 195 2009 0 R 196 2008 0 R 197 2001 0 R 198 1998 0 R 199 80 0 R 200 1785 0 R 201 1783 0 R 202 1777 0 R 203 1776 0 R 204 1773 0 R 205 1765 0 R 206 1763 0 R 207 1705 0 R 208 1701 0 R 209 1695 0 R 210 81 0 R 211 1689 0 R 212 1678 0 R 213 82 0 R 214 1610 0 R 215 1609 0 R 216 83 0 R 217 1216 0 R 218 1213 0 R 219 84 0 R 220 1107 0 R 221 1100 0 R 222 1090 0 R 223 1089 0 R 224 1086 0 R 225 1085 0 R 226 1084 0 R 227 1081 0 R 228 1104 0 R 229 1097 0 R 230 85 0 R 231 1080 0 R 232 1073 0 R 233 1060 0 R 234 1059 0 R 235 86 0 R 236 1055 0 R 237 1050 0 R 238 1049 0 R 239 1048 0 R 240 1045 0 R 241 1042 0 R 242 1041 0 R 243 87 0 R 244 1040 0 R 245 1032 0 R 246 1021 0 R 247 1018 0 R 248 1014 0 R 249 1013 0 R 250 1012 0 R 251 1009 0 R 252 1008 0 R 253 1005 0 R 254 1003 0 R 255 1002 0 R 256 1001 0 R 257 999 0 R 258 1029 0 R 259 88 0 R 260 998 0 R 261 89 0 R 262 974 0 R 263 966 0 R 264 958 0 R 265 953 0 R 266 952 0 R 267 951 0 R 268 950 0 R 269 90 0 R 270 944 0 R 271 941 0 R 272 939 0 R 273 938 0 R 274 937 0 R 275 932 0 R 276 929 0 R 277 926 0 R 278 924 0 R 279 923 0 R 280 922 0 R 281 91 0 R 282 919 0 R 283 916 0 R 284 915 0 R 285 913 0 R 286 911 0 R 287 908 0 R 288 907 0 R 289 900 0 R 290 899 0 R 291 92 0 R 292 893 0 R 293 891 0 R 294 890 0 R 295 889 0 R 296 888 0 R 297 887 0 R 298 886 0 R 299 885 0 R 300 883 0 R 301 882 0 R 302 879 0 R 303 876 0 R 304 875 0 R 305 873 0 R 306 872 0 R 307 871 0 R 308 870 0 R 309 868 0 R 310 93 0 R 311 865 0 R 312 864 0 R 313 863 0 R 314 862 0 R 315 861 0 R 316 860 0 R 317 859 0 R 318 858 0 R 319 857 0 R 320 852 0 R 321 851 0 R 322 848 0 R 323 845 0 R 324 844 0 R 325 843 0 R 326 840 0 R 327 839 0 R 328 837 0 R 329 834 0 R 330 833 0 R 331 832 0 R 332 830 0 R 333 94 0 R 334 820 0 R 335 817 0 R 336 814 0 R 337 810 0 R 338 807 0 R 339 803 0 R 340 800 0 R 341 796 0 R 342 790 0 R 343 787 0 R 344 783 0 R 345 95 0 R 346 777 0 R 347 775 0 R 348 771 0 R 349 769 0 R 350 769 0 R 351 765 0 R 352 761 0 R 353 757 0 R 354 753 0 R 355 749 0 R 356 743 0 R 357 739 0 R 358 735 0 R 359 729 0 R 360 724 0 R 361 721 0 R 362 717 0 R 363 711 0 R 364 708 0 R 365 704 0 R 366 701 0 R 367 697 0 R 368 694 0 R 369 690 0 R 370 684 0 R 371 681 0 R 372 677 0 R 373 96 0 R 374 671 0 R 375 668 0 R 376 664 0 R 377 661 0 R 378 657 0 R 379 654 0 R 380 654 0 R 381 650 0 R 382 647 0 R 383 647 0 R 384 643 0 R 385 640 0 R 386 636 0 R 387 633 0 R 388 629 0 R 389 625 0 R 390 621 0 R 391 618 0 R 392 614 0 R 393 611 0 R 394 607 0 R 395 604 0 R 396 600 0 R 397 597 0 R 398 593 0 R 399 590 0 R 400 586 0 R 401 583 0 R 402 579 0 R 403 576 0 R 404 97 0 R 405 572 0 R 406 569 0 R 407 565 0 R 408 559 0 R 409 557 0 R 410 553 0 R 411 550 0 R 412 546 0 R 413 540 0 R 414 538 0 R 415 538 0 R 416 534 0 R 417 532 0 R 418 528 0 R 419 522 0 R 420 519 0 R 421 515 0 R 422 512 0 R 423 508 0 R 424 505 0 R 425 501 0 R 426 495 0 R 427 489 0 R 428 483 0 R 429 480 0 R 430 476 0 R 431 98 0 R 432 470 0 R 433 467 0 R 434 463 0 R 435 460 0 R 436 456 0 R 437 450 0 R 438 447 0 R 439 443 0 R 440 441 0 R 441 441 0 R 442 437 0 R 443 434 0 R 444 430 0 R 445 428 0 R 446 428 0 R 447 424 0 R 448 421 0 R 449 417 0 R 450 414 0 R 451 410 0 R 452 407 0 R 453 407 0 R 454 403 0 R 455 400 0 R 456 396 0 R 457 393 0 R 458 389 0 R 459 386 0 R 460 382 0 R 461 379 0 R 462 375 0 R 463 372 0 R 464 99 0 R 465 368 0 R 466 365 0 R 467 361 0 R 468 358 0 R 469 354 0 R 470 351 0 R 471 347 0 R 472 344 0 R 473 340 0 R 474 338 0 R 475 334 0 R 476 331 0 R 477 327 0 R 478 324 0 R 479 320 0 R 480 317 0 R 481 313 0 R 482 310 0 R 483 310 0 R 484 306 0 R 485 303 0 R 486 299 0 R 487 296 0 R 488 292 0 R 489 289 0 R 490 285 0 R 491 282 0 R 492 278 0 R 493 274 0 R 494 270 0 R 495 100 0 R 496 267 0 R 497 263 0 R 498 260 0 R 499 256 0 R 500 253 0 R 501 249 0 R 502 246 0 R 503 242 0 R 504 239 0 R 505 235 0 R 506 232 0 R 507 228 0 R 508 225 0 R 509 221 0 R 510 215 0 R 511 210 0 R 512 205 0 R 513 202 0 R 514 198 0 R 515 195 0 R 516 191 0 R 517 188 0 R 518 184 0 R 519 181 0 R 520 177 0 R 521 174 0 R 522 170 0 R 523 167 0 R 524 101 0 R 525 163 0 R 526 160 0 R 527 156 0 R 528 151 0 R 529 145 0 R 530 142 0 R 531 138 0 R 532 135 0 R 533 131 0 R 534 128 0 R 535 124 0 R 536 121 0 R 537 117 0 R 538 115 0 R 539 115 0 R 540 111 0 R 541 108 0 R 542 102 0 R] + >> + /IDTree << + /Names [(Note 1) 4041 0 R (Note 2) 1994 0 R (Note 3) 1211 0 R (Note 4) 1102 0 R (Note 5) 1093 0 R (Note 6) 1026 0 R (U1x0y1) 2633 0 R (U1x1y1) 2631 0 R] + >> + /ParentTreeNextKey 543 +>> +endobj + +55 0 obj +[4305 0 R 4301 0 R 4304 0 R 4301 0 R 4303 0 R 4301 0 R 4302 0 R 4300 0 R 4298 0 R 4299 0 R 4298 0 R 4297 0 R 4290 0 R 4290 0 R 4296 0 R 4290 0 R 4290 0 R 4295 0 R 4290 0 R 4290 0 R 4294 0 R 4290 0 R 4290 0 R 4290 0 R 4293 0 R 4290 0 R 4290 0 R 4290 0 R 4292 0 R 4290 0 R 4290 0 R 4290 0 R 4290 0 R 4290 0 R 4290 0 R 4290 0 R 4291 0 R 4290 0 R 4290 0 R 4290 0 R] +endobj + +56 0 obj +[4289 0 R 4288 0 R 4287 0 R 4287 0 R 4284 0 R 4283 0 R 4283 0 R 4280 0 R 4279 0 R 4279 0 R 4276 0 R 4275 0 R 4275 0 R 4272 0 R 4271 0 R 4271 0 R 4268 0 R 4267 0 R 4267 0 R 4263 0 R 4262 0 R 4262 0 R 4258 0 R 4257 0 R 4257 0 R 4254 0 R 4253 0 R 4253 0 R 4250 0 R 4249 0 R 4249 0 R 4246 0 R 4245 0 R 4245 0 R 4241 0 R 4240 0 R 4240 0 R 4237 0 R 4236 0 R 4236 0 R 4233 0 R 4232 0 R 4232 0 R 4229 0 R 4228 0 R 4228 0 R 4224 0 R 4223 0 R 4223 0 R 4220 0 R 4219 0 R 4219 0 R 4216 0 R 4215 0 R 4215 0 R 4212 0 R 4211 0 R 4211 0 R 4207 0 R 4206 0 R 4206 0 R 4203 0 R 4202 0 R 4202 0 R 4199 0 R 4198 0 R 4198 0 R 4195 0 R 4194 0 R 4194 0 R 4191 0 R 4190 0 R 4190 0 R 4186 0 R 4185 0 R 4185 0 R 4182 0 R 4181 0 R 4181 0 R 4178 0 R 4177 0 R 4177 0 R 4172 0 R 4171 0 R 4171 0 R 4168 0 R 4167 0 R 4167 0 R 4164 0 R 4163 0 R 4163 0 R 4160 0 R 4159 0 R 4159 0 R] +endobj + +57 0 obj +[4156 0 R 4155 0 R 4155 0 R 4152 0 R 4151 0 R 4151 0 R 4147 0 R 4146 0 R 4146 0 R 4143 0 R 4142 0 R 4142 0 R 4139 0 R 4138 0 R 4138 0 R 4134 0 R 4133 0 R 4133 0 R 4129 0 R 4128 0 R 4128 0 R 4125 0 R 4124 0 R 4124 0 R 4121 0 R 4120 0 R 4120 0 R 4117 0 R 4116 0 R 4116 0 R 4113 0 R 4112 0 R 4112 0 R 4109 0 R 4108 0 R 4108 0 R 4104 0 R 4103 0 R 4103 0 R 4100 0 R 4099 0 R 4099 0 R 4096 0 R 4095 0 R 4095 0 R 4092 0 R 4091 0 R 4091 0 R 4088 0 R 4087 0 R 4087 0 R 4083 0 R 4082 0 R 4082 0 R 4079 0 R 4079 0 R] +endobj + +58 0 obj +[4075 0 R 4075 0 R 4069 0 R 4069 0 R 4069 0 R 4074 0 R 4069 0 R 4069 0 R 4073 0 R 4069 0 R 4069 0 R 4069 0 R 4072 0 R 4069 0 R 4069 0 R 4069 0 R 4071 0 R 4069 0 R 4069 0 R 4069 0 R 4069 0 R 4069 0 R 4070 0 R 4069 0 R 4069 0 R 4069 0 R 4069 0 R 4069 0 R 4068 0 R 4068 0 R 4067 0 R 4067 0 R 4067 0 R 4066 0 R 4065 0 R 4063 0 R 4064 0 R 4063 0 R 4063 0 R 4063 0 R 4063 0 R 4063 0 R 4061 0 R 4060 0 R 4058 0 R 4059 0 R 4058 0 R 4058 0 R 4058 0 R 4058 0 R 4058 0 R 4053 0 R 4053 0 R 4055 0 R 4053 0 R 4053 0 R 4053 0 R 4053 0 R 4054 0 R 4053 0 R 4053 0 R 4053 0 R 4053 0 R 4053 0 R 4053 0 R 4052 0 R 4052 0 R 4051 0 R 4051 0 R 4050 0 R 4050 0 R 4049 0 R 4038 0 R 4038 0 R 4038 0 R 4048 0 R 4038 0 R 4038 0 R 4038 0 R] +endobj + +59 0 obj +[4038 0 R 4038 0 R 4047 0 R 4038 0 R 4038 0 R 4040 0 R 4038 0 R 4038 0 R 4038 0 R 4039 0 R 4038 0 R 4038 0 R 4037 0 R 4029 0 R 4036 0 R 4029 0 R 4029 0 R 4029 0 R 4029 0 R 4035 0 R 4029 0 R 4034 0 R 4029 0 R 4029 0 R 4029 0 R 4029 0 R 4029 0 R 4029 0 R 4029 0 R 4031 0 R 4029 0 R 4029 0 R 4030 0 R 4029 0 R 4029 0 R 4029 0 R 4026 0 R 4026 0 R 4028 0 R 4026 0 R 4027 0 R 4026 0 R 4026 0 R 4025 0 R 4025 0 R 4018 0 R 4018 0 R 4024 0 R 4018 0 R 4023 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4022 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4021 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4020 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4018 0 R 4019 0 R 4018 0 R 4018 0 R 4018 0 R 4017 0 R 4017 0 R 4017 0 R 4017 0 R 4017 0 R 4017 0 R 4017 0 R 4017 0 R 4017 0 R 4016 0 R 4016 0 R 4014 0 R 4014 0 R 4014 0 R 4014 0 R 4044 0 R 4041 0 R] +endobj + +60 0 obj +[4014 0 R 4014 0 R 4015 0 R 4014 0 R 4014 0 R 4014 0 R 4014 0 R 4014 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4013 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4012 0 R 4011 0 R 4011 0 R 4002 0 R 4010 0 R 4002 0 R 4002 0 R 4009 0 R 4002 0 R 4008 0 R 4008 0 R 4002 0 R 4002 0 R 4007 0 R 4002 0 R 4006 0 R 4002 0 R 4002 0 R 4005 0 R 4002 0 R 4002 0 R 4004 0 R 4002 0 R 4003 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4002 0 R 4001 0 R 3997 0 R 4000 0 R 3997 0 R 3999 0 R 3997 0 R 3997 0 R 3997 0 R 3998 0 R 3997 0 R 3997 0 R 3997 0 R 3997 0 R 3995 0 R 3992 0 R 3994 0 R 3992 0 R 3993 0 R 3992 0 R 3992 0 R 3992 0 R 3992 0 R 3992 0 R 3990 0 R 3985 0 R 3989 0 R 3985 0 R 3988 0 R 3985 0 R 3985 0 R 3985 0 R 3985 0 R 3987 0 R 3985 0 R 3986 0 R 3985 0 R 3985 0 R 3983 0 R 3980 0 R 3982 0 R 3980 0 R 3981 0 R 3980 0 R 3980 0 R 3980 0 R 3980 0 R 3980 0 R 3980 0 R] +endobj + +61 0 obj +[3977 0 R 3977 0 R 3975 0 R 3975 0 R 3975 0 R 3976 0 R 3975 0 R 3975 0 R 3974 0 R 3974 0 R 3966 0 R 3966 0 R 3973 0 R 3966 0 R 3972 0 R 3966 0 R 3966 0 R 3971 0 R 3971 0 R 3971 0 R 3971 0 R 3971 0 R 3966 0 R 3966 0 R 3970 0 R 3966 0 R 3969 0 R 3966 0 R 3968 0 R 3966 0 R 3967 0 R 3966 0 R 3966 0 R 3965 0 R 3965 0 R 3965 0 R 3965 0 R 3965 0 R 3965 0 R 3965 0 R 3963 0 R 3963 0 R 3963 0 R 3963 0 R 3964 0 R 3963 0 R 3963 0 R 3963 0 R 3963 0 R 3962 0 R 3954 0 R 3954 0 R 3961 0 R 3954 0 R 3954 0 R 3954 0 R 3954 0 R 3960 0 R 3954 0 R 3954 0 R 3959 0 R 3959 0 R 3959 0 R 3959 0 R 3959 0 R 3959 0 R 3959 0 R 3954 0 R 3958 0 R 3954 0 R 3954 0 R 3954 0 R 3957 0 R 3957 0 R 3957 0 R 3957 0 R 3954 0 R 3956 0 R 3956 0 R 3956 0 R 3956 0 R 3956 0 R 3956 0 R 3956 0 R 3956 0 R 3954 0 R 3954 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3955 0 R 3954 0 R 3954 0 R 3953 0 R 3945 0 R 3945 0 R 3952 0 R 3945 0 R 3951 0 R 3945 0 R 3945 0 R 3945 0 R 3945 0 R 3945 0 R 3950 0 R 3945 0 R 3949 0 R 3949 0 R 3949 0 R 3949 0 R 3949 0 R 3949 0 R 3945 0 R 3948 0 R 3948 0 R 3948 0 R 3948 0 R 3948 0 R 3948 0 R 3945 0 R 3945 0 R 3945 0 R 3945 0 R 3947 0 R 3945 0 R 3945 0 R 3946 0 R 3945 0 R 3945 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3944 0 R 3936 0 R 3943 0 R 3936 0 R 3942 0 R 3936 0 R 3936 0 R 3936 0 R 3936 0 R 3941 0 R 3936 0 R 3936 0 R 3936 0 R 3940 0 R 3936 0 R 3939 0 R 3936 0 R 3936 0 R 3936 0 R 3938 0 R 3936 0 R 3936 0 R 3936 0 R 3937 0 R 3936 0 R 3936 0 R 3936 0 R 3935 0 R 3935 0 R 3931 0 R 3934 0 R 3931 0 R 3931 0 R 3933 0 R 3931 0 R 3932 0 R 3931 0 R 3931 0 R 3931 0 R 3930 0 R 3930 0 R 3930 0 R 3930 0 R 3930 0 R 3930 0 R 3930 0 R 3929 0 R 3929 0 R] +endobj + +62 0 obj +[3929 0 R 3929 0 R 3928 0 R 3919 0 R 3919 0 R 3919 0 R 3927 0 R 3919 0 R 3919 0 R 3919 0 R 3919 0 R 3919 0 R 3926 0 R 3919 0 R 3919 0 R 3919 0 R 3925 0 R 3925 0 R 3925 0 R 3925 0 R 3925 0 R 3925 0 R 3925 0 R 3919 0 R 3919 0 R 3924 0 R 3924 0 R 3924 0 R 3924 0 R 3924 0 R 3924 0 R 3924 0 R 3924 0 R 3919 0 R 3919 0 R 3919 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3923 0 R 3919 0 R 3922 0 R 3922 0 R 3922 0 R 3922 0 R 3922 0 R 3922 0 R 3922 0 R 3922 0 R 3919 0 R 3921 0 R 3919 0 R 3920 0 R 3920 0 R 3920 0 R 3920 0 R 3920 0 R 3920 0 R 3920 0 R 3920 0 R 3919 0 R 3918 0 R 3902 0 R 3917 0 R 3902 0 R 3902 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3916 0 R 3902 0 R 3902 0 R 3915 0 R 3902 0 R 3902 0 R 3902 0 R 3902 0 R 3914 0 R 3902 0 R 3902 0 R 3913 0 R 3902 0 R 3902 0 R 3912 0 R 3902 0 R 3911 0 R 3902 0 R 3910 0 R 3902 0 R 3909 0 R 3902 0 R 3902 0 R 3908 0 R 3902 0 R 3907 0 R 3902 0 R 3902 0 R 3902 0 R 3906 0 R 3902 0 R 3902 0 R 3902 0 R 3905 0 R 3902 0 R 3904 0 R 3902 0 R 3902 0 R 3902 0 R 3902 0 R 3902 0 R 3903 0 R 3902 0 R 3902 0 R 3901 0 R 3901 0 R 3897 0 R 3897 0 R 3900 0 R 3897 0 R 3897 0 R 3899 0 R 3897 0 R 3897 0 R 3897 0 R 3898 0 R 3897 0 R 3896 0 R 3895 0 R 3894 0 R 3894 0 R 3894 0 R 3894 0 R 3894 0 R 3892 0 R 3891 0 R 3890 0 R 3890 0 R 3890 0 R 3890 0 R 3887 0 R 3887 0 R 3887 0 R 3887 0 R 3887 0 R 3887 0 R 3887 0 R 3885 0 R 3885 0 R 3885 0 R 3885 0 R 3885 0 R 3886 0 R 3885 0 R] +endobj + +63 0 obj +[3884 0 R 3884 0 R 3880 0 R 3883 0 R 3880 0 R 3880 0 R 3880 0 R 3882 0 R 3880 0 R 3880 0 R 3881 0 R 3880 0 R 3880 0 R 3880 0 R 3880 0 R 3880 0 R 3880 0 R 3880 0 R 3880 0 R 3879 0 R 3879 0 R 3878 0 R 3875 0 R 3875 0 R 3875 0 R 3875 0 R 3877 0 R 3877 0 R 3877 0 R 3877 0 R 3877 0 R 3877 0 R 3877 0 R 3877 0 R 3877 0 R 3875 0 R 3875 0 R 3875 0 R 3875 0 R 3876 0 R 3875 0 R 3875 0 R 3874 0 R 3874 0 R 3863 0 R 3873 0 R 3873 0 R 3873 0 R 3873 0 R 3873 0 R 3873 0 R 3863 0 R 3872 0 R 3872 0 R 3872 0 R 3872 0 R 3872 0 R 3872 0 R 3872 0 R 3872 0 R 3872 0 R 3863 0 R 3871 0 R 3863 0 R 3863 0 R 3870 0 R 3863 0 R 3869 0 R 3869 0 R 3869 0 R 3863 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3868 0 R 3863 0 R 3867 0 R 3863 0 R 3863 0 R 3866 0 R 3863 0 R 3865 0 R 3865 0 R 3865 0 R 3865 0 R 3865 0 R 3865 0 R 3865 0 R 3863 0 R 3863 0 R 3864 0 R 3863 0 R 3862 0 R 3861 0 R 3860 0 R 3858 0 R 3857 0 R 3854 0 R 3856 0 R 3856 0 R 3854 0 R 3855 0 R 3854 0 R 3852 0 R 3851 0 R 3848 0 R 3850 0 R 3850 0 R 3850 0 R 3850 0 R 3848 0 R 3849 0 R 3849 0 R 3849 0 R 3849 0 R 3849 0 R 3849 0 R 3848 0 R 3848 0 R 3848 0 R 3840 0 R 3845 0 R 3840 0 R 3840 0 R 3840 0 R 3840 0 R 3844 0 R 3840 0 R 3843 0 R 3843 0 R 3840 0 R 3842 0 R 3842 0 R 3840 0 R 3840 0 R 3840 0 R 3841 0 R 3840 0 R 3840 0 R 3839 0 R 3838 0 R 3838 0 R 3838 0 R 3835 0 R 3837 0 R 3835 0 R 3836 0 R 3835 0 R 3834 0 R 3834 0 R 3834 0 R 3834 0 R 3834 0 R 3834 0 R 3834 0 R 3834 0 R 3832 0 R 3833 0 R 3833 0 R 3833 0 R 3833 0 R 3833 0 R 3832 0 R] +endobj + +64 0 obj +[3831 0 R 3830 0 R 3830 0 R 3830 0 R 3829 0 R 3827 0 R 3826 0 R 3826 0 R 3826 0 R 3826 0 R 3825 0 R 3821 0 R 3822 0 R 3822 0 R 3822 0 R 3822 0 R 3822 0 R 3822 0 R 3822 0 R 3821 0 R 3817 0 R 3819 0 R 3817 0 R 3818 0 R 3818 0 R 3817 0 R 3817 0 R 3816 0 R 3816 0 R 3816 0 R 3812 0 R 3815 0 R 3815 0 R 3812 0 R 3814 0 R 3814 0 R 3812 0 R 3813 0 R 3813 0 R 3813 0 R 3812 0 R 3811 0 R 3811 0 R 3809 0 R 3807 0 R 3807 0 R 3807 0 R 3807 0 R 3807 0 R 3805 0 R 3803 0 R 3803 0 R 3801 0 R 3799 0 R 3799 0 R 3797 0 R 3797 0 R 3795 0 R 3793 0 R 3791 0 R 3789 0 R 3789 0 R 3789 0 R 3789 0 R 3789 0 R 3787 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3785 0 R 3765 0 R 3781 0 R 3781 0 R 3781 0 R 3781 0 R 3765 0 R 3780 0 R 3765 0 R 3765 0 R 3779 0 R 3779 0 R 3765 0 R 3778 0 R 3778 0 R 3778 0 R 3778 0 R 3778 0 R 3765 0 R 3777 0 R 3777 0 R 3777 0 R 3777 0 R 3777 0 R 3765 0 R 3776 0 R 3765 0 R 3775 0 R 3765 0 R 3774 0 R 3765 0 R 3773 0 R 3773 0 R 3773 0 R 3773 0 R 3773 0 R 3765 0 R 3772 0 R 3772 0 R 3765 0 R 3765 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3771 0 R 3765 0 R 3770 0 R 3770 0 R 3765 0 R 3765 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3769 0 R 3765 0 R 3768 0 R 3765 0 R 3767 0 R 3767 0 R 3767 0 R 3767 0 R 3767 0 R 3765 0 R 3766 0 R 3766 0 R 3765 0 R 3764 0 R 3764 0 R 3764 0 R 3763 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3762 0 R 3761 0 R 3759 0 R 3758 0 R 3758 0 R 3757 0 R 3757 0 R 3756 0 R 3756 0 R 3755 0 R 3754 0 R 3753 0 R 3752 0 R 3752 0 R 3751 0 R 3751 0 R 3749 0 R 3749 0 R 3749 0 R 3745 0 R 3748 0 R 3745 0 R 3747 0 R 3745 0 R 3746 0 R 3746 0 R 3746 0 R 3746 0 R 3746 0 R 3746 0 R 3746 0 R 3745 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3744 0 R 3739 0 R 3742 0 R 3742 0 R 3739 0 R 3741 0 R 3739 0 R 3739 0 R 3740 0 R 3740 0 R 3739 0 R 3738 0 R 3738 0 R 3738 0 R 3735 0 R 3737 0 R 3737 0 R 3735 0 R 3736 0 R 3736 0 R 3735 0 R 3734 0 R 3734 0 R 3732 0 R 3730 0 R 3730 0 R 3728 0 R 3726 0 R 3726 0 R 3724 0 R 3724 0 R 3722 0 R 3720 0 R 3720 0 R 3720 0 R 3720 0 R 3720 0 R 3718 0 R 3716 0 R 3716 0 R 3716 0 R 3716 0 R 3716 0 R 3716 0 R 3716 0 R 3716 0 R 3716 0 R 3705 0 R 3712 0 R 3705 0 R 3711 0 R 3705 0 R 3710 0 R 3705 0 R 3705 0 R 3709 0 R 3705 0 R 3708 0 R 3705 0 R 3705 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3707 0 R 3705 0 R 3705 0 R 3706 0 R 3706 0 R 3705 0 R 3704 0 R 3704 0 R 3703 0 R 3703 0 R 3702 0 R 3702 0 R 3702 0 R 3701 0 R 3701 0 R 3701 0 R 3700 0 R 3699 0 R 3698 0 R 3697 0 R 3696 0 R 3695 0 R 3694 0 R 3693 0 R 3692 0 R 3692 0 R 3691 0 R 3691 0 R 3690 0 R 3690 0 R 3689 0 R 3689 0 R] +endobj + +65 0 obj +[3687 0 R 3687 0 R 3683 0 R 3686 0 R 3683 0 R 3685 0 R 3683 0 R 3683 0 R 3683 0 R 3684 0 R 3683 0 R 3683 0 R 3683 0 R 3682 0 R 3678 0 R 3681 0 R 3678 0 R 3678 0 R 3680 0 R 3680 0 R 3680 0 R 3680 0 R 3680 0 R 3680 0 R 3680 0 R 3680 0 R 3680 0 R 3678 0 R 3679 0 R 3679 0 R 3679 0 R 3679 0 R 3678 0 R 3676 0 R 3672 0 R 3675 0 R 3675 0 R 3672 0 R 3672 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3674 0 R 3672 0 R 3673 0 R 3673 0 R 3673 0 R 3673 0 R 3673 0 R 3673 0 R 3672 0 R 3666 0 R 3666 0 R 3666 0 R 3669 0 R 3669 0 R 3666 0 R 3668 0 R 3668 0 R 3666 0 R 3667 0 R 3667 0 R 3667 0 R 3666 0 R 3665 0 R 3665 0 R 3665 0 R 3662 0 R 3664 0 R 3664 0 R 3662 0 R 3663 0 R 3663 0 R 3663 0 R 3662 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3661 0 R 3658 0 R 3660 0 R 3660 0 R 3660 0 R 3660 0 R 3658 0 R 3659 0 R 3659 0 R 3659 0 R 3659 0 R 3659 0 R 3658 0 R 3657 0 R 3656 0 R 3656 0 R 3656 0 R 3655 0 R 3653 0 R 3652 0 R 3652 0 R 3652 0 R 3652 0 R 3652 0 R 3651 0 R 3646 0 R 3647 0 R 3647 0 R 3647 0 R 3647 0 R 3647 0 R 3647 0 R 3646 0 R 3646 0 R 3646 0 R 3646 0 R 3645 0 R 3644 0 R 3644 0 R 3644 0 R 3643 0 R 3642 0 R 3642 0 R 3641 0 R 3641 0 R 3640 0 R 3639 0 R 3638 0 R 3638 0 R 3632 0 R 3636 0 R 3636 0 R 3632 0 R 3635 0 R 3635 0 R 3635 0 R 3632 0 R 3634 0 R 3634 0 R 3632 0 R 3633 0 R 3633 0 R 3633 0 R 3632 0 R 3631 0 R 3631 0 R 3631 0 R 3629 0 R 3630 0 R 3630 0 R 3629 0 R 3628 0 R 3628 0 R 3626 0 R 3624 0 R 3624 0 R 3622 0 R 3620 0 R 3620 0 R 3618 0 R 3616 0 R 3616 0 R 3616 0 R 3614 0 R 3614 0 R 3612 0 R 3610 0 R 3608 0 R 3606 0 R 3606 0 R 3606 0 R 3606 0 R 3606 0 R 3604 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3602 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3601 0 R 3595 0 R 3597 0 R 3597 0 R 3595 0 R 3596 0 R 3596 0 R 3596 0 R 3595 0 R 3595 0 R] +endobj + +66 0 obj +[3594 0 R 3593 0 R 3593 0 R 3592 0 R 3592 0 R 3592 0 R 3591 0 R 3591 0 R 3591 0 R 3591 0 R 3590 0 R 3589 0 R 3589 0 R 3588 0 R 3588 0 R 3587 0 R 3587 0 R 3586 0 R 3586 0 R 3585 0 R 3585 0 R 3584 0 R 3584 0 R 3578 0 R 3583 0 R 3582 0 R 3581 0 R 3581 0 R 3580 0 R 3580 0 R 3579 0 R 3579 0 R 3579 0 R 3577 0 R 3577 0 R 3577 0 R 3576 0 R 3575 0 R 3574 0 R 3573 0 R 3573 0 R 3572 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3571 0 R 3570 0 R 3567 0 R 3568 0 R 3568 0 R 3567 0 R 3567 0 R 3566 0 R 3566 0 R 3566 0 R 3563 0 R 3565 0 R 3565 0 R 3565 0 R 3565 0 R 3565 0 R 3565 0 R 3563 0 R 3564 0 R 3564 0 R 3564 0 R 3563 0 R 3562 0 R 3562 0 R 3562 0 R 3560 0 R 3558 0 R 3556 0 R 3554 0 R 3554 0 R 3552 0 R 3552 0 R 3552 0 R 3550 0 R 3548 0 R 3546 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3544 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3543 0 R 3542 0 R 3542 0 R 3542 0 R 3542 0 R 3542 0 R 3542 0 R 3542 0 R 3538 0 R 3538 0 R 3538 0 R 3537 0 R 3536 0 R 3535 0 R 3534 0 R 3534 0 R 3533 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3532 0 R 3531 0 R 3528 0 R 3529 0 R 3528 0 R 3527 0 R 3527 0 R 3527 0 R 3523 0 R 3526 0 R 3523 0 R 3525 0 R 3523 0 R 3524 0 R 3524 0 R 3524 0 R 3524 0 R 3524 0 R 3524 0 R 3524 0 R 3523 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3522 0 R 3513 0 R 3520 0 R 3513 0 R 3519 0 R 3519 0 R 3519 0 R 3513 0 R 3513 0 R 3518 0 R 3513 0 R 3517 0 R 3517 0 R 3513 0 R 3516 0 R 3513 0 R 3513 0 R 3513 0 R 3513 0 R 3515 0 R 3513 0 R 3514 0 R 3513 0 R 3513 0 R 3506 0 R 3512 0 R 3506 0 R 3511 0 R 3511 0 R 3511 0 R 3511 0 R 3511 0 R 3511 0 R 3511 0 R 3506 0 R 3510 0 R 3506 0 R 3509 0 R 3506 0 R 3506 0 R 3506 0 R 3506 0 R 3508 0 R 3506 0 R 3506 0 R 3507 0 R 3506 0 R 3505 0 R 3505 0 R 3504 0 R 3502 0 R 3502 0 R 3502 0 R] +endobj + +67 0 obj +[3502 0 R 3502 0 R 3502 0 R 3502 0 R 3502 0 R 3502 0 R 3503 0 R 3502 0 R 3502 0 R 3502 0 R 3502 0 R 3501 0 R 3501 0 R 3498 0 R 3498 0 R 3500 0 R 3498 0 R 3499 0 R 3498 0 R 3498 0 R 3498 0 R 3498 0 R 3497 0 R 3497 0 R 3497 0 R 3494 0 R 3496 0 R 3496 0 R 3496 0 R 3496 0 R 3496 0 R 3494 0 R 3495 0 R 3494 0 R 3494 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3493 0 R 3489 0 R 3492 0 R 3492 0 R 3492 0 R 3489 0 R 3491 0 R 3491 0 R 3491 0 R 3491 0 R 3491 0 R 3491 0 R 3491 0 R 3491 0 R 3489 0 R 3490 0 R 3490 0 R 3489 0 R 3489 0 R 3488 0 R 3487 0 R 3487 0 R 3487 0 R 3487 0 R 3485 0 R 3486 0 R 3486 0 R 3486 0 R 3486 0 R 3486 0 R 3486 0 R 3485 0 R 3483 0 R 3482 0 R 3482 0 R 3482 0 R 3482 0 R 3482 0 R 3482 0 R 3480 0 R 3481 0 R 3481 0 R 3481 0 R 3481 0 R 3481 0 R 3481 0 R 3480 0 R 3478 0 R 3477 0 R 3477 0 R 3477 0 R 3475 0 R 3476 0 R 3476 0 R 3476 0 R 3476 0 R 3476 0 R 3476 0 R 3475 0 R 3473 0 R 3472 0 R 3472 0 R 3472 0 R 3472 0 R 3472 0 R 3472 0 R 3471 0 R 3462 0 R 3467 0 R 3462 0 R 3466 0 R 3462 0 R 3462 0 R 3465 0 R 3465 0 R 3462 0 R 3462 0 R 3462 0 R 3464 0 R 3464 0 R 3464 0 R 3464 0 R 3464 0 R 3464 0 R 3462 0 R 3463 0 R 3463 0 R 3463 0 R 3463 0 R 3463 0 R 3463 0 R 3462 0 R 3461 0 R 3461 0 R 3461 0 R 3457 0 R 3460 0 R 3457 0 R 3459 0 R 3457 0 R 3458 0 R 3457 0 R 3456 0 R 3454 0 R 3452 0 R 3452 0 R 3452 0 R 3452 0 R 3452 0 R 3450 0 R 3448 0 R 3446 0 R 3444 0 R 3444 0 R 3442 0 R 3440 0 R 3438 0 R 3436 0 R 3434 0 R 3432 0 R 3430 0 R 3430 0 R 3430 0 R 3430 0 R 3428 0 R 3426 0 R 3424 0 R 3424 0 R 3424 0 R 3424 0 R 3424 0 R 3424 0 R 3424 0 R 3424 0 R 3422 0 R 3420 0 R 3418 0 R 3416 0 R 3416 0 R 3416 0 R 3416 0 R 3416 0 R 3416 0 R 3416 0 R 3414 0 R 3412 0 R 3410 0 R 3410 0 R 3410 0 R 3410 0 R 3410 0 R 3408 0 R 3406 0 R 3404 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3402 0 R 3395 0 R 3399 0 R 3399 0 R 3399 0 R 3399 0 R 3395 0 R 3398 0 R 3398 0 R 3398 0 R 3398 0 R 3398 0 R 3398 0 R 3395 0 R 3397 0 R 3397 0 R 3397 0 R 3397 0 R 3397 0 R 3397 0 R 3395 0 R 3396 0 R 3396 0 R 3396 0 R 3396 0 R 3396 0 R 3396 0 R 3395 0 R 3389 0 R 3393 0 R 3393 0 R 3393 0 R 3393 0 R 3393 0 R 3393 0 R 3389 0 R 3392 0 R 3392 0 R 3389 0 R 3389 0 R 3391 0 R 3389 0 R 3390 0 R 3390 0 R 3389 0 R 3389 0 R 3389 0 R 3389 0 R 3388 0 R 3388 0 R 3384 0 R 3384 0 R] +endobj + +68 0 obj +[3384 0 R 3384 0 R 3384 0 R 3384 0 R 3384 0 R 3387 0 R 3384 0 R 3384 0 R 3386 0 R 3386 0 R 3386 0 R 3384 0 R 3385 0 R 3384 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3383 0 R 3380 0 R 3382 0 R 3382 0 R 3382 0 R 3382 0 R 3380 0 R 3381 0 R 3380 0 R 3380 0 R 3380 0 R 3380 0 R 3379 0 R 3379 0 R 3379 0 R 3377 0 R 3378 0 R 3377 0 R 3376 0 R 3376 0 R 3376 0 R 3376 0 R 3376 0 R 3376 0 R 3376 0 R 3376 0 R 3375 0 R 3369 0 R 3369 0 R 3373 0 R 3369 0 R 3372 0 R 3372 0 R 3369 0 R 3371 0 R 3371 0 R 3371 0 R 3371 0 R 3369 0 R 3370 0 R 3369 0 R 3369 0 R 3369 0 R 3368 0 R 3368 0 R 3368 0 R 3365 0 R 3367 0 R 3367 0 R 3367 0 R 3365 0 R 3366 0 R 3366 0 R 3366 0 R 3366 0 R 3366 0 R 3366 0 R 3365 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3364 0 R 3360 0 R 3362 0 R 3362 0 R 3362 0 R 3360 0 R 3360 0 R 3360 0 R 3360 0 R 3360 0 R 3361 0 R 3360 0 R 3341 0 R 3359 0 R 3341 0 R 3358 0 R 3341 0 R 3357 0 R 3341 0 R 3341 0 R 3356 0 R 3341 0 R 3355 0 R 3355 0 R 3355 0 R 3355 0 R 3355 0 R 3355 0 R 3341 0 R 3354 0 R 3341 0 R 3353 0 R 3353 0 R 3353 0 R 3353 0 R 3341 0 R 3352 0 R 3341 0 R 3351 0 R 3341 0 R 3350 0 R 3341 0 R 3349 0 R 3349 0 R 3349 0 R 3349 0 R 3341 0 R 3348 0 R 3348 0 R 3348 0 R 3348 0 R 3348 0 R 3348 0 R 3341 0 R 3347 0 R 3341 0 R 3346 0 R 3341 0 R 3345 0 R 3345 0 R 3345 0 R 3345 0 R 3341 0 R 3344 0 R 3341 0 R 3343 0 R 3341 0 R 3341 0 R 3342 0 R 3341 0 R 3341 0 R 3341 0 R 3340 0 R 3340 0 R 3336 0 R 3339 0 R 3336 0 R 3336 0 R 3336 0 R 3338 0 R 3336 0 R 3336 0 R 3337 0 R 3336 0 R 3336 0 R] +endobj + +69 0 obj +[3335 0 R 3333 0 R 3334 0 R 3333 0 R 3333 0 R 3333 0 R 3333 0 R 3332 0 R 3332 0 R 3332 0 R 3331 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3330 0 R 3328 0 R 3329 0 R 3329 0 R 3329 0 R 3329 0 R 3329 0 R 3328 0 R 3327 0 R 3326 0 R 3326 0 R 3326 0 R 3326 0 R 3326 0 R 3326 0 R 3326 0 R 3326 0 R 3325 0 R 3323 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3322 0 R 3321 0 R 3321 0 R 3321 0 R 3313 0 R 3313 0 R 3317 0 R 3313 0 R 3316 0 R 3316 0 R 3316 0 R 3316 0 R 3313 0 R 3313 0 R 3315 0 R 3313 0 R 3314 0 R 3314 0 R 3314 0 R 3314 0 R 3313 0 R 3312 0 R 3312 0 R 3312 0 R 3307 0 R 3311 0 R 3307 0 R 3310 0 R 3307 0 R 3309 0 R 3307 0 R 3308 0 R 3308 0 R 3307 0 R 3306 0 R 3304 0 R 3302 0 R 3302 0 R 3302 0 R 3302 0 R 3302 0 R 3300 0 R 3298 0 R 3298 0 R 3296 0 R 3294 0 R 3294 0 R 3294 0 R 3294 0 R 3294 0 R 3292 0 R 3290 0 R 3288 0 R 3286 0 R 3284 0 R 3284 0 R 3284 0 R 3284 0 R 3284 0 R 3282 0 R 3280 0 R 3280 0 R 3280 0 R 3280 0 R 3280 0 R 3280 0 R 3280 0 R 3278 0 R 3276 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3274 0 R 3272 0 R 3270 0 R 3270 0 R 3268 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3266 0 R 3264 0 R 3262 0 R 3260 0 R 3260 0 R 3260 0 R 3260 0 R 3260 0 R 3258 0 R 3256 0 R 3256 0 R 3256 0 R 3256 0 R 3256 0 R 3254 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3252 0 R 3250 0 R 3248 0 R 3246 0 R 3246 0 R 3246 0 R 3244 0 R 3242 0 R 3242 0 R 3240 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3238 0 R 3236 0 R 3234 0 R 3232 0 R 3232 0 R 3232 0 R 3232 0 R 3232 0 R 3230 0 R 3228 0 R 3228 0 R 3228 0 R 3228 0 R 3228 0 R 3226 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3224 0 R 3219 0 R 3219 0 R 3219 0 R 3219 0 R 3219 0 R 3219 0 R 3220 0 R 3220 0 R 3220 0 R 3219 0 R 3218 0 R 3216 0 R 3217 0 R 3216 0 R 3216 0 R 3216 0 R 3216 0 R 3215 0 R 3215 0 R 3215 0 R 3214 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3213 0 R 3195 0 R 3212 0 R 3212 0 R 3195 0 R 3211 0 R 3211 0 R 3211 0 R 3211 0 R 3211 0 R 3195 0 R 3210 0 R 3195 0 R 3209 0 R 3195 0 R 3195 0 R 3208 0 R 3208 0 R 3195 0 R 3207 0 R 3195 0 R 3206 0 R 3195 0 R 3205 0 R 3195 0 R 3204 0 R 3204 0 R 3195 0 R 3203 0 R 3203 0 R 3195 0 R 3202 0 R 3202 0 R 3202 0 R 3202 0 R 3195 0 R 3201 0 R 3195 0 R 3195 0 R 3200 0 R 3200 0 R 3200 0 R 3200 0 R 3195 0 R 3199 0 R 3199 0 R 3199 0 R 3199 0 R 3195 0 R 3195 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3198 0 R 3195 0 R 3197 0 R 3197 0 R 3195 0 R 3196 0 R 3196 0 R 3195 0 R 3193 0 R 3193 0 R 3193 0 R 3188 0 R 3192 0 R 3188 0 R 3191 0 R 3188 0 R 3190 0 R 3188 0 R 3189 0 R 3189 0 R 3188 0 R] +endobj + +70 0 obj +[3187 0 R 3185 0 R 3183 0 R 3183 0 R 3183 0 R 3183 0 R 3183 0 R 3183 0 R 3183 0 R 3183 0 R 3181 0 R 3179 0 R 3179 0 R 3177 0 R 3175 0 R 3175 0 R 3173 0 R 3171 0 R 3169 0 R 3169 0 R 3169 0 R 3169 0 R 3169 0 R 3167 0 R 3165 0 R 3165 0 R 3165 0 R 3165 0 R 3165 0 R 3163 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3161 0 R 3159 0 R 3157 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3155 0 R 3153 0 R 3151 0 R 3151 0 R 3149 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3147 0 R 3145 0 R 3143 0 R 3141 0 R 3141 0 R 3141 0 R 3141 0 R 3141 0 R 3139 0 R 3137 0 R 3137 0 R 3137 0 R 3137 0 R 3137 0 R 3135 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3133 0 R 3131 0 R 3129 0 R 3127 0 R 3127 0 R 3127 0 R 3127 0 R 3127 0 R 3127 0 R 3127 0 R 3127 0 R 3125 0 R 3123 0 R 3123 0 R 3121 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3119 0 R 3117 0 R 3115 0 R 3113 0 R 3113 0 R 3113 0 R 3113 0 R 3113 0 R 3111 0 R 3109 0 R 3109 0 R 3109 0 R 3109 0 R 3109 0 R 3107 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3105 0 R 3095 0 R 3101 0 R 3095 0 R 3100 0 R 3095 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3099 0 R 3095 0 R 3098 0 R 3095 0 R 3095 0 R 3095 0 R 3097 0 R 3097 0 R 3097 0 R 3097 0 R 3095 0 R 3095 0 R 3095 0 R 3095 0 R 3096 0 R 3095 0 R 3094 0 R 3094 0 R 3090 0 R 3090 0 R 3090 0 R 3093 0 R 3090 0 R 3092 0 R 3090 0 R 3090 0 R 3091 0 R 3090 0 R 3089 0 R 3089 0 R 3089 0 R 3086 0 R 3088 0 R 3086 0 R 3087 0 R 3086 0 R 3085 0 R 3085 0 R 3085 0 R 3085 0 R 3085 0 R 3085 0 R 3085 0 R 3085 0 R 3085 0 R 3083 0 R 3084 0 R 3084 0 R 3084 0 R 3084 0 R 3084 0 R 3083 0 R 3082 0 R 3081 0 R 3081 0 R 3081 0 R 3081 0 R 3080 0 R 3080 0 R 3080 0 R 3078 0 R 3077 0 R 3077 0 R 3077 0 R 3077 0 R 3076 0 R 3062 0 R 3072 0 R 3062 0 R 3062 0 R 3062 0 R 3071 0 R 3062 0 R 3062 0 R 3062 0 R 3070 0 R 3070 0 R 3070 0 R 3062 0 R 3069 0 R 3062 0 R 3068 0 R 3062 0 R 3062 0 R 3067 0 R 3062 0 R 3066 0 R 3062 0 R 3062 0 R 3065 0 R 3062 0 R 3064 0 R 3062 0 R 3062 0 R 3062 0 R 3063 0 R 3062 0 R 3062 0 R 3059 0 R 3058 0 R 3057 0 R 3056 0 R 3061 0 R 3052 0 R 3052 0 R 3039 0 R 3051 0 R 3039 0 R 3039 0 R 3050 0 R 3039 0 R 3049 0 R 3049 0 R] +endobj + +71 0 obj +[3049 0 R 3039 0 R 3048 0 R 3039 0 R 3047 0 R 3047 0 R 3039 0 R 3046 0 R 3039 0 R 3045 0 R 3039 0 R 3039 0 R 3044 0 R 3039 0 R 3043 0 R 3043 0 R 3043 0 R 3043 0 R 3043 0 R 3043 0 R 3039 0 R 3042 0 R 3039 0 R 3039 0 R 3041 0 R 3039 0 R 3039 0 R 3040 0 R 3039 0 R 3032 0 R 3038 0 R 3032 0 R 3032 0 R 3037 0 R 3032 0 R 3032 0 R 3036 0 R 3032 0 R 3032 0 R 3035 0 R 3032 0 R 3032 0 R 3032 0 R 3032 0 R 3034 0 R 3032 0 R 3033 0 R 3032 0 R 3031 0 R 3031 0 R 3031 0 R 3024 0 R 3030 0 R 3024 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3029 0 R 3024 0 R 3028 0 R 3028 0 R 3024 0 R 3024 0 R 3024 0 R 3027 0 R 3024 0 R 3026 0 R 3024 0 R 3024 0 R 3025 0 R 3024 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3023 0 R 3018 0 R 3022 0 R 3018 0 R 3018 0 R 3021 0 R 3021 0 R 3018 0 R 3020 0 R 3020 0 R 3020 0 R 3018 0 R 3019 0 R 3019 0 R 3018 0 R 3010 0 R 3016 0 R 3016 0 R 3010 0 R 3015 0 R 3010 0 R 3010 0 R 3014 0 R 3014 0 R 3014 0 R 3014 0 R 3014 0 R 3010 0 R 3013 0 R 3010 0 R 3010 0 R 3012 0 R 3012 0 R 3012 0 R 3010 0 R 3011 0 R 3010 0 R 3009 0 R 3009 0 R 3009 0 R 3007 0 R 3005 0 R 3005 0 R 3003 0 R 3001 0 R 3001 0 R 2999 0 R 2997 0 R 2997 0 R 2997 0 R 2995 0 R 2995 0 R 2995 0 R 2993 0 R 2991 0 R 2989 0 R 2987 0 R 2987 0 R 2987 0 R 2987 0 R 2987 0 R 2985 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2983 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2982 0 R 2977 0 R 2979 0 R 2977 0 R 2977 0 R 2978 0 R 2977 0 R 2976 0 R 2976 0 R 2972 0 R 2975 0 R 2972 0 R 2974 0 R 2972 0 R 2972 0 R 2973 0 R 2972 0 R 2972 0 R 2971 0 R 2971 0 R 2971 0 R 2968 0 R 2970 0 R 2970 0 R 2970 0 R 2968 0 R 2969 0 R 2969 0 R 2969 0 R 2969 0 R 2968 0 R 2968 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2967 0 R 2964 0 R 2966 0 R 2966 0 R 2966 0 R 2966 0 R 2964 0 R 2965 0 R 2965 0 R 2965 0 R 2965 0 R 2965 0 R 2965 0 R 2965 0 R 2964 0 R 2963 0 R 2962 0 R 2961 0 R 2959 0 R 2958 0 R 2957 0 R 2955 0 R 2954 0 R 2953 0 R] +endobj + +72 0 obj +[2950 0 R 2949 0 R 2948 0 R 2946 0 R 2945 0 R 2945 0 R 2945 0 R 2945 0 R 2944 0 R 2937 0 R 2939 0 R 2939 0 R 2939 0 R 2937 0 R 2938 0 R 2938 0 R 2937 0 R 2937 0 R 2936 0 R 2936 0 R 2936 0 R 2934 0 R 2935 0 R 2935 0 R 2935 0 R 2934 0 R 2933 0 R 2933 0 R 2933 0 R 2931 0 R 2929 0 R 2929 0 R 2929 0 R 2927 0 R 2925 0 R 2925 0 R 2923 0 R 2921 0 R 2921 0 R 2921 0 R 2919 0 R 2919 0 R 2919 0 R 2917 0 R 2915 0 R 2913 0 R 2911 0 R 2911 0 R 2911 0 R 2911 0 R 2911 0 R 2909 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2907 0 R 2906 0 R 2906 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2905 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2904 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2903 0 R 2896 0 R 2899 0 R 2896 0 R 2898 0 R 2896 0 R 2896 0 R 2896 0 R 2897 0 R 2897 0 R 2897 0 R 2897 0 R 2897 0 R 2897 0 R 2897 0 R 2897 0 R 2897 0 R 2896 0 R 2889 0 R 2895 0 R 2889 0 R 2889 0 R 2889 0 R 2894 0 R 2893 0 R 2893 0 R 2893 0 R 2893 0 R 2889 0 R 2889 0 R 2892 0 R 2889 0 R 2889 0 R 2889 0 R 2891 0 R 2889 0 R 2889 0 R 2890 0 R 2889 0 R 2889 0 R 2889 0 R 2889 0 R 2886 0 R 2885 0 R 2884 0 R 2883 0 R 2888 0 R 2877 0 R 2879 0 R 2879 0 R 2877 0 R 2878 0 R 2877 0 R 2877 0 R 2877 0 R 2868 0 R 2876 0 R 2876 0 R 2876 0 R 2868 0 R 2868 0 R 2875 0 R 2868 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2874 0 R 2868 0 R 2868 0 R 2873 0 R 2873 0 R 2873 0 R 2873 0 R 2873 0 R 2873 0 R 2873 0 R 2868 0 R 2872 0 R 2868 0 R 2871 0 R 2868 0 R 2870 0 R 2868 0 R 2869 0 R 2868 0 R 2868 0 R 2868 0 R 2868 0 R 2867 0 R 2867 0 R 2854 0 R 2866 0 R 2854 0 R 2865 0 R 2854 0 R 2864 0 R 2854 0 R 2863 0 R 2854 0 R 2862 0 R 2854 0 R 2861 0 R 2854 0 R 2860 0 R 2854 0 R 2854 0 R 2859 0 R 2854 0 R 2858 0 R 2854 0 R 2857 0 R 2854 0 R 2856 0 R 2854 0 R 2855 0 R 2854 0 R] +endobj + +73 0 obj +[2850 0 R 2853 0 R 2850 0 R 2850 0 R 2852 0 R 2852 0 R 2852 0 R 2852 0 R 2852 0 R 2852 0 R 2850 0 R 2851 0 R 2850 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2849 0 R 2845 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2848 0 R 2845 0 R 2847 0 R 2845 0 R 2846 0 R 2846 0 R 2845 0 R 2840 0 R 2844 0 R 2844 0 R 2840 0 R 2843 0 R 2843 0 R 2840 0 R 2840 0 R 2842 0 R 2842 0 R 2840 0 R 2841 0 R 2841 0 R 2840 0 R 2840 0 R 2840 0 R 2834 0 R 2839 0 R 2834 0 R 2838 0 R 2834 0 R 2834 0 R 2834 0 R 2837 0 R 2834 0 R 2836 0 R 2834 0 R 2835 0 R 2834 0 R 2831 0 R 2830 0 R 2829 0 R 2828 0 R 2828 0 R 2828 0 R 2828 0 R 2828 0 R 2828 0 R 2828 0 R 2828 0 R 2828 0 R 2827 0 R 2826 0 R 2826 0 R 2826 0 R 2826 0 R 2826 0 R 2826 0 R 2826 0 R 2826 0 R 2826 0 R 2825 0 R 2824 0 R 2824 0 R 2824 0 R 2824 0 R 2824 0 R 2824 0 R 2824 0 R 2824 0 R 2824 0 R 2823 0 R 2822 0 R 2822 0 R 2822 0 R 2822 0 R 2822 0 R 2822 0 R 2822 0 R 2822 0 R 2822 0 R 2821 0 R 2820 0 R 2820 0 R 2820 0 R 2820 0 R 2820 0 R 2820 0 R 2820 0 R 2820 0 R 2820 0 R 2819 0 R 2818 0 R 2818 0 R 2818 0 R 2818 0 R 2818 0 R 2818 0 R 2818 0 R 2818 0 R 2818 0 R 2833 0 R 2814 0 R 2814 0 R 2811 0 R 2811 0 R 2811 0 R 2813 0 R 2813 0 R 2813 0 R 2813 0 R 2811 0 R 2811 0 R 2812 0 R 2811 0 R 2811 0 R 2811 0 R 2803 0 R 2810 0 R 2803 0 R 2809 0 R 2803 0 R 2803 0 R 2808 0 R 2803 0 R 2803 0 R 2803 0 R 2807 0 R 2803 0 R 2806 0 R 2803 0 R 2803 0 R 2803 0 R 2805 0 R 2803 0 R 2803 0 R 2804 0 R 2803 0 R] +endobj + +74 0 obj +[2800 0 R 2799 0 R 2798 0 R 2797 0 R 2802 0 R 2793 0 R 2792 0 R 2784 0 R 2791 0 R 2784 0 R 2790 0 R 2784 0 R 2789 0 R 2784 0 R 2784 0 R 2788 0 R 2784 0 R 2787 0 R 2784 0 R 2786 0 R 2784 0 R 2784 0 R 2785 0 R 2784 0 R 2782 0 R 2775 0 R 2781 0 R 2775 0 R 2780 0 R 2775 0 R 2779 0 R 2775 0 R 2775 0 R 2775 0 R 2778 0 R 2775 0 R 2777 0 R 2775 0 R 2775 0 R 2776 0 R 2775 0 R 2773 0 R 2772 0 R 2772 0 R 2769 0 R 2769 0 R 2769 0 R 2769 0 R 2768 0 R 2768 0 R 2765 0 R 2767 0 R 2765 0 R 2766 0 R 2765 0 R 2765 0 R 2765 0 R 2765 0 R 2764 0 R 2764 0 R 2759 0 R 2763 0 R 2759 0 R 2762 0 R 2762 0 R 2759 0 R 2761 0 R 2759 0 R 2759 0 R 2759 0 R 2760 0 R 2759 0 R 2758 0 R 2758 0 R 2758 0 R 2756 0 R 2757 0 R 2757 0 R 2756 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2755 0 R 2754 0 R 2753 0 R 2752 0 R 2751 0 R 2749 0 R 2748 0 R 2748 0 R 2748 0 R 2747 0 R 2745 0 R 2744 0 R 2743 0 R 2729 0 R 2739 0 R 2729 0 R 2738 0 R 2738 0 R 2729 0 R 2737 0 R 2729 0 R 2729 0 R 2736 0 R 2729 0 R 2729 0 R 2729 0 R 2735 0 R 2729 0 R 2734 0 R 2729 0 R 2733 0 R 2729 0 R 2729 0 R 2732 0 R 2729 0 R 2731 0 R 2729 0 R 2729 0 R 2729 0 R 2730 0 R 2729 0 R] +endobj + +75 0 obj +[2729 0 R 2729 0 R 2728 0 R 2725 0 R 2727 0 R 2727 0 R 2725 0 R 2725 0 R 2725 0 R 2726 0 R 2725 0 R 2725 0 R 2725 0 R 2724 0 R 2723 0 R 2721 0 R 2720 0 R 2720 0 R 2718 0 R 2717 0 R 2717 0 R 2717 0 R 2717 0 R 2714 0 R 2710 0 R 2713 0 R 2713 0 R 2710 0 R 2712 0 R 2710 0 R 2710 0 R 2711 0 R 2710 0 R 2710 0 R 2709 0 R 2709 0 R 2709 0 R 2706 0 R 2708 0 R 2708 0 R 2708 0 R 2708 0 R 2708 0 R 2706 0 R 2707 0 R 2706 0 R 2705 0 R 2704 0 R 2703 0 R 2703 0 R 2701 0 R 2700 0 R 2698 0 R 2698 0 R 2699 0 R 2699 0 R 2698 0 R 2693 0 R 2693 0 R 2694 0 R 2693 0 R 2692 0 R 2692 0 R 2691 0 R 2691 0 R 2690 0 R 2686 0 R 2686 0 R 2686 0 R 2689 0 R 2686 0 R 2688 0 R 2688 0 R 2688 0 R 2688 0 R 2688 0 R 2688 0 R 2688 0 R 2686 0 R 2686 0 R 2687 0 R 2686 0 R 2686 0 R 2686 0 R 2686 0 R 2686 0 R 2686 0 R 2686 0 R 2685 0 R 2681 0 R 2681 0 R 2681 0 R 2681 0 R 2684 0 R 2681 0 R 2681 0 R 2681 0 R 2681 0 R 2681 0 R 2683 0 R 2681 0 R 2681 0 R 2681 0 R 2682 0 R 2681 0 R] +endobj + +76 0 obj +[2681 0 R 2681 0 R 2680 0 R 2680 0 R 2680 0 R 2680 0 R 2677 0 R 2677 0 R 2677 0 R 2677 0 R 2677 0 R 2679 0 R 2677 0 R 2677 0 R 2677 0 R 2678 0 R 2677 0 R 2677 0 R 2677 0 R 2677 0 R 2676 0 R 2676 0 R 2666 0 R 2675 0 R 2666 0 R 2674 0 R 2666 0 R 2666 0 R 2673 0 R 2666 0 R 2666 0 R 2666 0 R 2666 0 R 2666 0 R 2672 0 R 2666 0 R 2671 0 R 2666 0 R 2666 0 R 2670 0 R 2666 0 R 2669 0 R 2666 0 R 2666 0 R 2666 0 R 2668 0 R 2666 0 R 2667 0 R 2666 0 R 2666 0 R 2665 0 R 2665 0 R 2664 0 R 2661 0 R 2661 0 R 2661 0 R 2663 0 R 2661 0 R 2661 0 R 2662 0 R 2661 0 R 2661 0 R 2643 0 R 2660 0 R 2643 0 R 2643 0 R 2659 0 R 2643 0 R 2643 0 R 2643 0 R 2658 0 R 2643 0 R 2657 0 R 2643 0 R 2656 0 R 2643 0 R 2655 0 R 2643 0 R 2643 0 R 2654 0 R 2643 0 R 2653 0 R 2643 0 R 2643 0 R 2652 0 R 2643 0 R 2643 0 R 2643 0 R 2651 0 R 2643 0 R 2650 0 R 2643 0 R 2649 0 R 2643 0 R 2643 0 R 2648 0 R 2648 0 R 2648 0 R 2648 0 R 2648 0 R 2643 0 R 2647 0 R 2643 0 R 2646 0 R 2643 0 R 2645 0 R 2643 0 R 2644 0 R 2643 0 R 2643 0 R] +endobj + +77 0 obj +[2637 0 R 2636 0 R 2634 0 R 2632 0 R 2624 0 R 2624 0 R 2622 0 R 2621 0 R 2619 0 R 2619 0 R 2617 0 R 2618 0 R 2618 0 R 2618 0 R 2616 0 R 2614 0 R 2614 0 R 2614 0 R 2614 0 R 2614 0 R 2612 0 R 2609 0 R 2606 0 R 2608 0 R 2608 0 R 2606 0 R 2607 0 R 2607 0 R 2605 0 R 2602 0 R 2604 0 R 2602 0 R 2603 0 R 2600 0 R 2600 0 R 2600 0 R 2600 0 R 2598 0 R 2599 0 R 2599 0 R 2599 0 R 2599 0 R 2599 0 R 2599 0 R 2597 0 R 2595 0 R 2596 0 R 2593 0 R 2593 0 R 2593 0 R 2593 0 R 2593 0 R 2593 0 R 2591 0 R 2588 0 R 2588 0 R 2588 0 R 2588 0 R 2588 0 R 2588 0 R 2586 0 R 2583 0 R 2583 0 R 2581 0 R 2580 0 R 2578 0 R 2578 0 R 2578 0 R 2578 0 R 2576 0 R 2573 0 R 2573 0 R 2573 0 R 2573 0 R 2571 0 R 2568 0 R 2568 0 R 2568 0 R 2568 0 R 2568 0 R 2566 0 R 2563 0 R 2561 0 R 2560 0 R 2642 0 R 2548 0 R 2552 0 R 2548 0 R 2548 0 R 2551 0 R 2548 0 R 2548 0 R 2550 0 R 2548 0 R 2549 0 R 2548 0 R 2547 0 R 2547 0 R 2536 0 R 2546 0 R 2536 0 R 2536 0 R 2545 0 R 2536 0 R 2536 0 R 2544 0 R 2536 0 R 2536 0 R 2536 0 R 2543 0 R 2536 0 R 2542 0 R 2542 0 R 2542 0 R 2536 0 R 2541 0 R 2536 0 R 2536 0 R 2540 0 R 2540 0 R 2540 0 R 2536 0 R 2539 0 R 2539 0 R 2539 0 R 2539 0 R 2536 0 R 2536 0 R 2538 0 R 2538 0 R 2536 0 R 2537 0 R 2537 0 R 2537 0 R 2536 0 R 2536 0 R 2536 0 R 2535 0 R 2529 0 R 2534 0 R 2529 0 R 2533 0 R 2533 0 R 2533 0 R 2529 0 R 2532 0 R 2529 0 R 2531 0 R 2529 0 R 2530 0 R 2529 0 R 2528 0 R 2527 0 R 2525 0 R 2523 0 R 2522 0 R 2520 0 R 2516 0 R 2515 0 R 2514 0 R 2512 0 R 2509 0 R 2508 0 R 2507 0 R 2505 0 R 2502 0 R 2501 0 R 2499 0 R 2494 0 R 2493 0 R 2491 0 R 2492 0 R 2491 0 R 2489 0 R 2485 0 R 2483 0 R 2484 0 R 2483 0 R 2482 0 R 2481 0 R 2479 0 R 2475 0 R 2472 0 R 2474 0 R 2472 0 R 2473 0 R 2470 0 R 2467 0 R 2466 0 R 2464 0 R 2462 0 R 2461 0 R 2459 0 R 2455 0 R 2454 0 R 2453 0 R] +endobj + +78 0 obj +[2451 0 R 2448 0 R 2447 0 R 2446 0 R 2445 0 R 2444 0 R 2442 0 R 2439 0 R 2438 0 R 2436 0 R 2431 0 R 2428 0 R 2430 0 R 2428 0 R 2429 0 R 2426 0 R 2422 0 R 2421 0 R 2420 0 R 2418 0 R 2414 0 R 2413 0 R 2411 0 R 2412 0 R 2411 0 R 2409 0 R 2405 0 R 2403 0 R 2400 0 R 2399 0 R 2398 0 R 2396 0 R 2393 0 R 2392 0 R 2378 0 R 2387 0 R 2378 0 R 2386 0 R 2386 0 R 2386 0 R 2378 0 R 2385 0 R 2378 0 R 2378 0 R 2378 0 R 2384 0 R 2378 0 R 2378 0 R 2383 0 R 2378 0 R 2382 0 R 2381 0 R 2381 0 R 2381 0 R 2381 0 R 2378 0 R 2378 0 R 2380 0 R 2378 0 R 2379 0 R 2378 0 R 2377 0 R 2364 0 R 2376 0 R 2364 0 R 2364 0 R 2375 0 R 2364 0 R 2374 0 R 2364 0 R 2373 0 R 2364 0 R 2372 0 R 2364 0 R 2371 0 R 2364 0 R 2364 0 R 2370 0 R 2364 0 R 2364 0 R 2369 0 R 2364 0 R 2364 0 R 2368 0 R 2368 0 R 2368 0 R 2364 0 R 2367 0 R 2364 0 R 2364 0 R 2366 0 R 2364 0 R 2365 0 R 2364 0 R 2363 0 R 2363 0 R 2361 0 R 2362 0 R 2361 0 R 2361 0 R 2360 0 R 2359 0 R 2357 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2358 0 R 2357 0 R 2355 0 R 2354 0 R 2352 0 R 2353 0 R 2353 0 R 2353 0 R 2353 0 R 2353 0 R 2353 0 R 2353 0 R 2353 0 R 2352 0 R 2350 0 R 2349 0 R 2347 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2348 0 R 2347 0 R 2333 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2344 0 R 2333 0 R 2343 0 R 2333 0 R 2333 0 R 2342 0 R 2333 0 R 2341 0 R 2341 0 R 2341 0 R 2341 0 R 2333 0 R 2340 0 R 2333 0 R 2339 0 R 2339 0 R 2339 0 R 2339 0 R 2339 0 R 2339 0 R 2339 0 R 2333 0 R 2338 0 R 2333 0 R 2337 0 R 2333 0 R 2336 0 R 2333 0 R 2333 0 R 2335 0 R 2333 0 R 2333 0 R 2334 0 R 2334 0 R 2333 0 R 2332 0 R 2322 0 R 2331 0 R 2331 0 R 2331 0 R 2331 0 R 2331 0 R 2331 0 R 2322 0 R 2330 0 R 2330 0 R 2322 0 R 2329 0 R 2322 0 R 2322 0 R 2328 0 R 2322 0 R 2327 0 R 2322 0 R 2326 0 R 2322 0 R 2325 0 R 2325 0 R 2325 0 R 2325 0 R 2325 0 R 2325 0 R 2322 0 R 2322 0 R 2324 0 R 2324 0 R 2324 0 R 2324 0 R 2322 0 R 2322 0 R 2323 0 R 2322 0 R 2321 0 R 2320 0 R 2318 0 R 2316 0 R 2315 0 R 2313 0 R 2309 0 R 2308 0 R 2307 0 R 2306 0 R 2305 0 R 2305 0 R 2304 0 R 2304 0 R 2304 0 R 2304 0 R 2302 0 R 2299 0 R 2298 0 R 2297 0 R 2296 0 R 2296 0 R 2295 0 R 2295 0 R 2295 0 R 2295 0 R 2295 0 R 2295 0 R 2295 0 R] +endobj + +79 0 obj +[2293 0 R 2291 0 R 2290 0 R 2288 0 R 2284 0 R 2283 0 R 2281 0 R 2276 0 R 2275 0 R 2274 0 R 2273 0 R 2272 0 R 2272 0 R 2271 0 R 2271 0 R 2271 0 R 2271 0 R 2269 0 R 2265 0 R 2264 0 R 2263 0 R 2262 0 R 2261 0 R 2261 0 R 2260 0 R 2260 0 R 2260 0 R 2260 0 R 2260 0 R 2260 0 R 2260 0 R 2260 0 R 2260 0 R 2258 0 R 2254 0 R 2252 0 R 2248 0 R 2246 0 R 2247 0 R 2246 0 R 2244 0 R 2238 0 R 2237 0 R 2236 0 R 2235 0 R 2235 0 R 2234 0 R 2234 0 R 2234 0 R 2234 0 R 2234 0 R 2234 0 R 2232 0 R 2227 0 R 2225 0 R 2222 0 R 2221 0 R 2216 0 R 2208 0 R 2208 0 R 2215 0 R 2208 0 R 2208 0 R 2214 0 R 2208 0 R 2213 0 R 2208 0 R 2208 0 R 2212 0 R 2208 0 R 2211 0 R 2211 0 R 2211 0 R 2208 0 R 2210 0 R 2208 0 R 2208 0 R 2209 0 R 2208 0 R 2207 0 R 2206 0 R 2204 0 R 2202 0 R 2201 0 R 2199 0 R 2195 0 R 2192 0 R 2194 0 R 2192 0 R 2193 0 R 2190 0 R 2185 0 R 2182 0 R 2184 0 R 2182 0 R 2183 0 R 2180 0 R 2174 0 R 2173 0 R 2172 0 R 2170 0 R 2171 0 R 2170 0 R 2169 0 R 2168 0 R 2167 0 R 2166 0 R 2165 0 R 2163 0 R 2164 0 R 2161 0 R 2154 0 R 2152 0 R 2146 0 R 2141 0 R 2128 0 R 2128 0 R 2140 0 R 2128 0 R 2128 0 R 2139 0 R 2128 0 R 2138 0 R 2128 0 R 2137 0 R 2128 0 R 2128 0 R 2136 0 R 2128 0 R 2135 0 R 2128 0 R 2128 0 R 2134 0 R 2128 0 R 2128 0 R 2133 0 R 2128 0 R 2132 0 R 2128 0 R 2131 0 R 2128 0 R 2130 0 R 2128 0 R 2128 0 R 2129 0 R 2128 0 R 2128 0 R 2127 0 R 2127 0 R 2117 0 R 2126 0 R 2117 0 R 2125 0 R 2117 0 R 2124 0 R 2117 0 R 2123 0 R 2117 0 R 2117 0 R 2122 0 R 2117 0 R 2121 0 R 2117 0 R 2117 0 R 2120 0 R 2120 0 R 2117 0 R 2119 0 R 2117 0 R 2118 0 R 2117 0 R 2117 0 R 2116 0 R 2099 0 R 2115 0 R 2099 0 R 2114 0 R 2099 0 R 2113 0 R 2099 0 R 2112 0 R 2099 0 R 2099 0 R 2111 0 R 2099 0 R 2110 0 R 2099 0 R 2109 0 R 2099 0 R 2108 0 R 2099 0 R 2099 0 R 2107 0 R 2099 0 R 2106 0 R 2099 0 R 2105 0 R 2099 0 R 2099 0 R 2104 0 R 2099 0 R 2103 0 R 2099 0 R] +endobj + +80 0 obj +[2099 0 R 2102 0 R 2099 0 R 2101 0 R 2099 0 R 2099 0 R 2100 0 R 2099 0 R 2098 0 R 2097 0 R 2095 0 R 2093 0 R 2092 0 R 2089 0 R 2085 0 R 2084 0 R 2082 0 R 2077 0 R 2075 0 R 2071 0 R 2069 0 R 2070 0 R 2069 0 R 2067 0 R 2061 0 R 2060 0 R 2059 0 R 2058 0 R 2056 0 R 2051 0 R 2049 0 R 2046 0 R 2045 0 R 2044 0 R 2042 0 R 2039 0 R 2038 0 R 2037 0 R 2036 0 R 2035 0 R 2032 0 R 2029 0 R 2028 0 R 2027 0 R 2026 0 R 2025 0 R 2023 0 R 2020 0 R 2018 0 R 2015 0 R 2014 0 R 2009 0 R 1985 0 R 2008 0 R 1985 0 R 2007 0 R 1985 0 R 2006 0 R 1985 0 R 1985 0 R 1985 0 R 2005 0 R 1985 0 R 1985 0 R 2004 0 R 1985 0 R 2003 0 R 1985 0 R 2002 0 R 1985 0 R 1993 0 R 1985 0 R 1985 0 R 1992 0 R 1985 0 R 1985 0 R 1991 0 R 1985 0 R 1985 0 R 1990 0 R 1985 0 R 1989 0 R 1985 0 R 1988 0 R 1985 0 R 1985 0 R 1987 0 R 1985 0 R 1986 0 R 1985 0 R 1985 0 R 1984 0 R 1983 0 R 1981 0 R 1979 0 R 1978 0 R 1976 0 R 1972 0 R 1971 0 R 1970 0 R 1969 0 R 1969 0 R 1969 0 R 1969 0 R 1969 0 R 1967 0 R 1964 0 R 1963 0 R 1962 0 R 1959 0 R 1961 0 R 1959 0 R 1960 0 R 1957 0 R 1954 0 R 1953 0 R 1952 0 R 1950 0 R 1947 0 R 1944 0 R 1946 0 R 1944 0 R 1945 0 R 1942 0 R 1939 0 R 1938 0 R 1937 0 R 1936 0 R 1935 0 R 1933 0 R 1934 0 R 1931 0 R 1926 0 R 1925 0 R 1924 0 R 1922 0 R 1919 0 R 1917 0 R 1912 0 R 1911 0 R 1910 0 R 1908 0 R 1906 0 R 1905 0 R 1903 0 R 1898 0 R 1899 0 R 1898 0 R 1897 0 R 1896 0 R 1894 0 R 1891 0 R 1890 0 R 1888 0 R 1889 0 R 1888 0 R 1887 0 R 1886 0 R 1885 0 R 1883 0 R 1884 0 R 1883 0 R 1881 0 R 1878 0 R 1877 0 R 1876 0 R 1874 0 R 1871 0 R 1870 0 R 1869 0 R 1866 0 R 1868 0 R 1866 0 R 1867 0 R 1864 0 R 1859 0 R 1858 0 R 1857 0 R 1999 0 R 1996 0 R 1994 0 R 1995 0 R 1994 0 R 1994 0 R 1994 0 R 1994 0 R] +endobj + +81 0 obj +[1855 0 R 1852 0 R 1850 0 R 1845 0 R 1844 0 R 1843 0 R 1841 0 R 1839 0 R 1838 0 R 1836 0 R 1832 0 R 1831 0 R 1829 0 R 1826 0 R 1825 0 R 1824 0 R 1822 0 R 1819 0 R 1818 0 R 1817 0 R 1816 0 R 1815 0 R 1813 0 R 1814 0 R 1811 0 R 1806 0 R 1805 0 R 1804 0 R 1802 0 R 1799 0 R 1797 0 R 1792 0 R 1791 0 R 1790 0 R 1782 0 R 1782 0 R 1785 0 R 1782 0 R 1784 0 R 1782 0 R 1783 0 R 1782 0 R 1782 0 R 1775 0 R 1781 0 R 1775 0 R 1780 0 R 1775 0 R 1779 0 R 1775 0 R 1778 0 R 1775 0 R 1775 0 R 1777 0 R 1775 0 R 1775 0 R 1775 0 R 1776 0 R 1775 0 R 1774 0 R 1774 0 R 1762 0 R 1773 0 R 1762 0 R 1772 0 R 1762 0 R 1771 0 R 1762 0 R 1770 0 R 1762 0 R 1762 0 R 1769 0 R 1762 0 R 1762 0 R 1768 0 R 1762 0 R 1762 0 R 1767 0 R 1762 0 R 1762 0 R 1766 0 R 1762 0 R 1765 0 R 1762 0 R 1762 0 R 1764 0 R 1762 0 R 1763 0 R 1762 0 R 1761 0 R 1760 0 R 1758 0 R 1756 0 R 1755 0 R 1753 0 R 1749 0 R 1748 0 R 1747 0 R 1745 0 R 1742 0 R 1740 0 R 1735 0 R 1734 0 R 1733 0 R 1730 0 R 1732 0 R 1730 0 R 1731 0 R 1730 0 R 1728 0 R 1724 0 R 1723 0 R 1722 0 R 1719 0 R 1721 0 R 1719 0 R 1720 0 R 1719 0 R 1718 0 R 1716 0 R 1712 0 R 1711 0 R 1710 0 R 1705 0 R 1694 0 R 1694 0 R 1704 0 R 1694 0 R 1703 0 R 1694 0 R 1702 0 R 1694 0 R 1701 0 R 1694 0 R 1694 0 R 1694 0 R 1700 0 R 1694 0 R 1699 0 R 1694 0 R 1694 0 R 1698 0 R 1694 0 R 1694 0 R 1697 0 R 1694 0 R 1694 0 R 1696 0 R 1694 0 R 1694 0 R 1695 0 R 1694 0 R 1688 0 R 1693 0 R 1688 0 R 1688 0 R 1692 0 R 1688 0 R] +endobj + +82 0 obj +[1688 0 R 1691 0 R 1688 0 R 1690 0 R 1688 0 R 1689 0 R 1688 0 R 1688 0 R 1688 0 R 1687 0 R 1687 0 R 1680 0 R 1686 0 R 1680 0 R 1680 0 R 1680 0 R 1685 0 R 1680 0 R 1684 0 R 1680 0 R 1683 0 R 1680 0 R 1682 0 R 1682 0 R 1680 0 R 1680 0 R 1681 0 R 1680 0 R 1680 0 R 1680 0 R 1680 0 R 1680 0 R 1679 0 R 1679 0 R 1676 0 R 1676 0 R 1678 0 R 1676 0 R 1677 0 R 1676 0 R 1676 0 R 1676 0 R 1675 0 R 1675 0 R 1675 0 R 1673 0 R 1674 0 R 1673 0 R 1672 0 R 1671 0 R 1670 0 R 1668 0 R 1667 0 R 1666 0 R 1664 0 R 1663 0 R 1662 0 R 1660 0 R 1659 0 R 1658 0 R 1656 0 R 1655 0 R 1653 0 R 1654 0 R 1653 0 R 1651 0 R 1650 0 R 1649 0 R 1646 0 R 1646 0 R 1641 0 R 1644 0 R 1641 0 R 1641 0 R 1641 0 R 1641 0 R 1643 0 R 1641 0 R 1641 0 R 1642 0 R 1641 0 R 1641 0 R 1640 0 R 1640 0 R 1640 0 R 1639 0 R 1638 0 R 1636 0 R 1637 0 R 1636 0 R 1634 0 R 1633 0 R 1632 0 R 1632 0 R 1630 0 R 1629 0 R 1628 0 R 1628 0 R 1626 0 R 1625 0 R 1621 0 R 1621 0 R 1621 0 R 1624 0 R 1621 0 R 1623 0 R 1621 0 R] +endobj + +83 0 obj +[1621 0 R 1622 0 R 1621 0 R 1621 0 R 1621 0 R 1619 0 R 1618 0 R 1617 0 R 1613 0 R 1614 0 R 1613 0 R 1613 0 R 1613 0 R 1612 0 R 1612 0 R 1608 0 R 1611 0 R 1608 0 R 1608 0 R 1608 0 R 1608 0 R 1608 0 R 1608 0 R 1608 0 R 1608 0 R 1608 0 R 1610 0 R 1608 0 R 1608 0 R 1608 0 R 1609 0 R 1608 0 R 1608 0 R 1605 0 R 1607 0 R 1605 0 R 1606 0 R 1605 0 R 1604 0 R 1597 0 R 1603 0 R 1597 0 R 1597 0 R 1602 0 R 1597 0 R 1597 0 R 1601 0 R 1597 0 R 1597 0 R 1600 0 R 1597 0 R 1599 0 R 1597 0 R 1598 0 R 1597 0 R 1596 0 R 1595 0 R 1593 0 R 1591 0 R 1590 0 R 1588 0 R 1584 0 R 1583 0 R 1582 0 R 1580 0 R 1577 0 R 1576 0 R 1575 0 R 1573 0 R 1570 0 R 1569 0 R 1568 0 R 1567 0 R 1565 0 R 1562 0 R 1559 0 R 1561 0 R 1559 0 R 1560 0 R 1557 0 R 1552 0 R 1551 0 R 1550 0 R 1549 0 R 1548 0 R 1547 0 R 1546 0 R 1545 0 R 1544 0 R 1542 0 R 1539 0 R 1537 0 R 1532 0 R 1531 0 R 1530 0 R 1528 0 R 1524 0 R 1521 0 R 1523 0 R 1521 0 R 1522 0 R 1519 0 R 1513 0 R 1512 0 R 1511 0 R 1510 0 R 1509 0 R 1508 0 R 1507 0 R 1505 0 R 1506 0 R 1503 0 R 1496 0 R 1495 0 R 1494 0 R 1493 0 R 1492 0 R 1490 0 R 1484 0 R 1483 0 R 1482 0 R 1481 0 R 1480 0 R 1478 0 R 1472 0 R 1471 0 R 1470 0 R 1468 0 R 1463 0 R 1462 0 R 1461 0 R 1459 0 R 1460 0 R 1457 0 R 1450 0 R 1449 0 R 1448 0 R 1447 0 R 1446 0 R 1444 0 R 1438 0 R 1437 0 R 1436 0 R 1435 0 R 1434 0 R 1432 0 R 1426 0 R 1425 0 R 1424 0 R 1422 0 R 1417 0 R 1415 0 R 1408 0 R 1407 0 R 1406 0 R 1405 0 R 1404 0 R 1403 0 R 1402 0 R 1401 0 R 1400 0 R 1398 0 R 1395 0 R 1394 0 R 1392 0 R 1389 0 R 1388 0 R 1387 0 R 1386 0 R 1385 0 R] +endobj + +84 0 obj +[1383 0 R 1380 0 R 1379 0 R 1374 0 R 1374 0 R 1374 0 R 1373 0 R 1367 0 R 1372 0 R 1367 0 R 1371 0 R 1367 0 R 1367 0 R 1370 0 R 1367 0 R 1367 0 R 1369 0 R 1367 0 R 1367 0 R 1368 0 R 1367 0 R 1366 0 R 1365 0 R 1363 0 R 1361 0 R 1360 0 R 1358 0 R 1354 0 R 1353 0 R 1352 0 R 1351 0 R 1349 0 R 1346 0 R 1345 0 R 1343 0 R 1338 0 R 1337 0 R 1336 0 R 1334 0 R 1335 0 R 1334 0 R 1333 0 R 1330 0 R 1332 0 R 1330 0 R 1331 0 R 1328 0 R 1324 0 R 1323 0 R 1322 0 R 1321 0 R 1320 0 R 1318 0 R 1314 0 R 1311 0 R 1313 0 R 1311 0 R 1312 0 R 1311 0 R 1309 0 R 1306 0 R 1304 0 R 1301 0 R 1300 0 R 1298 0 R 1296 0 R 1295 0 R 1293 0 R 1289 0 R 1288 0 R 1287 0 R 1286 0 R 1284 0 R 1281 0 R 1278 0 R 1280 0 R 1278 0 R 1279 0 R 1276 0 R 1271 0 R 1270 0 R 1269 0 R 1267 0 R 1263 0 R 1262 0 R 1261 0 R 1260 0 R 1259 0 R 1258 0 R 1257 0 R 1255 0 R 1256 0 R 1253 0 R 1247 0 R 1246 0 R 1245 0 R 1244 0 R 1243 0 R 1241 0 R 1236 0 R 1235 0 R 1234 0 R 1233 0 R 1232 0 R 1230 0 R 1227 0 R 1226 0 R 1219 0 R 1221 0 R 1219 0 R 1220 0 R 1219 0 R 1218 0 R 1209 0 R 1209 0 R 1217 0 R 1209 0 R 1209 0 R 1210 0 R 1209 0 R 1208 0 R 1207 0 R 1205 0 R 1203 0 R 1202 0 R 1200 0 R 1196 0 R 1195 0 R 1194 0 R 1192 0 R 1189 0 R 1187 0 R 1182 0 R 1179 0 R 1181 0 R 1179 0 R 1180 0 R 1177 0 R 1171 0 R 1169 0 R 1164 0 R 1163 0 R 1162 0 R 1160 0 R 1157 0 R 1156 0 R 1154 0 R 1149 0 R 1214 0 R 1211 0 R 1211 0 R] +endobj + +85 0 obj +[1147 0 R 1143 0 R 1140 0 R 1142 0 R 1140 0 R 1141 0 R 1138 0 R 1132 0 R 1130 0 R 1125 0 R 1124 0 R 1123 0 R 1121 0 R 1117 0 R 1116 0 R 1110 0 R 1110 0 R 1110 0 R 1111 0 R 1110 0 R 1110 0 R 1109 0 R 1109 0 R 1092 0 R 1108 0 R 1092 0 R 1092 0 R 1101 0 R 1092 0 R 1092 0 R 1092 0 R 1092 0 R 1091 0 R 1088 0 R 1088 0 R 1090 0 R 1088 0 R 1088 0 R 1088 0 R 1088 0 R 1088 0 R 1089 0 R 1088 0 R 1088 0 R 1088 0 R 1088 0 R 1088 0 R 1087 0 R 1083 0 R 1086 0 R 1083 0 R 1083 0 R 1083 0 R 1083 0 R 1083 0 R 1083 0 R 1083 0 R 1083 0 R 1085 0 R 1083 0 R 1083 0 R 1083 0 R 1084 0 R 1083 0 R 1083 0 R 1082 0 R 1079 0 R 1081 0 R 1079 0 R 1079 0 R 1079 0 R 1079 0 R 1105 0 R 1102 0 R 1102 0 R 1098 0 R 1093 0 R 1095 0 R 1093 0 R 1094 0 R 1093 0 R] +endobj + +86 0 obj +[1079 0 R 1079 0 R 1080 0 R 1079 0 R 1079 0 R 1079 0 R 1079 0 R 1079 0 R 1078 0 R 1077 0 R 1077 0 R 1077 0 R 1077 0 R 1077 0 R 1077 0 R 1077 0 R 1076 0 R 1076 0 R 1075 0 R 1075 0 R 1075 0 R 1075 0 R 1075 0 R 1074 0 R 1074 0 R 1065 0 R 1065 0 R 1073 0 R 1065 0 R 1065 0 R 1072 0 R 1065 0 R 1065 0 R 1065 0 R 1065 0 R 1071 0 R 1065 0 R 1070 0 R 1065 0 R 1069 0 R 1065 0 R 1065 0 R 1068 0 R 1065 0 R 1065 0 R 1067 0 R 1065 0 R 1065 0 R 1065 0 R 1065 0 R 1066 0 R 1065 0 R 1065 0 R 1065 0 R 1065 0 R 1065 0 R 1064 0 R 1064 0 R 1063 0 R 1062 0 R 1062 0 R 1062 0 R 1062 0 R 1062 0 R 1062 0 R 1061 0 R 1057 0 R 1057 0 R 1057 0 R 1060 0 R 1057 0 R 1059 0 R 1057 0 R 1057 0 R] +endobj + +87 0 obj +[1057 0 R 1058 0 R 1057 0 R 1057 0 R 1057 0 R 1057 0 R 1057 0 R 1056 0 R 1054 0 R 1054 0 R 1055 0 R 1054 0 R 1054 0 R 1054 0 R 1054 0 R 1054 0 R 1054 0 R 1054 0 R 1054 0 R 1053 0 R 1053 0 R 1052 0 R 1052 0 R 1052 0 R 1052 0 R 1052 0 R 1051 0 R 1046 0 R 1050 0 R 1046 0 R 1046 0 R 1046 0 R 1046 0 R 1046 0 R 1049 0 R 1046 0 R 1048 0 R 1046 0 R 1046 0 R 1046 0 R 1047 0 R 1046 0 R 1046 0 R 1046 0 R 1046 0 R 1046 0 R 1044 0 R 1044 0 R 1045 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1044 0 R 1043 0 R 1039 0 R 1039 0 R 1039 0 R 1039 0 R 1039 0 R 1039 0 R 1039 0 R 1042 0 R 1039 0 R 1039 0 R 1039 0 R 1039 0 R 1041 0 R 1039 0 R 1039 0 R 1039 0 R] +endobj + +88 0 obj +[1039 0 R 1040 0 R 1039 0 R 1039 0 R 1039 0 R 1038 0 R 1038 0 R 1037 0 R 1037 0 R 1037 0 R 1037 0 R 1036 0 R 1034 0 R 1035 0 R 1034 0 R 1034 0 R 1034 0 R 1034 0 R 1020 0 R 1020 0 R 1020 0 R 1020 0 R 1033 0 R 1020 0 R 1020 0 R 1025 0 R 1020 0 R 1024 0 R 1020 0 R 1020 0 R 1023 0 R 1020 0 R 1022 0 R 1020 0 R 1020 0 R 1021 0 R 1020 0 R 1020 0 R 1020 0 R 1020 0 R 1020 0 R 1020 0 R 1020 0 R 1019 0 R 1015 0 R 1015 0 R 1015 0 R 1015 0 R 1018 0 R 1015 0 R 1015 0 R 1015 0 R 1017 0 R 1015 0 R 1016 0 R 1015 0 R 1007 0 R 1007 0 R 1007 0 R 1014 0 R 1007 0 R 1007 0 R 1013 0 R 1007 0 R 1007 0 R 1007 0 R 1007 0 R 1012 0 R 1007 0 R 1007 0 R 1007 0 R 1011 0 R 1007 0 R 1010 0 R 1007 0 R 1007 0 R 1009 0 R 1007 0 R 1007 0 R 1007 0 R 1008 0 R 1007 0 R 1007 0 R 1007 0 R 1000 0 R 1000 0 R 1000 0 R 1000 0 R 1006 0 R 1000 0 R 1000 0 R 1005 0 R 1000 0 R 1000 0 R 1000 0 R 1004 0 R 1000 0 R 1000 0 R 1003 0 R 1000 0 R 1000 0 R 1000 0 R 1002 0 R 1000 0 R 1001 0 R 1000 0 R 1000 0 R 1000 0 R 997 0 R 997 0 R 997 0 R 999 0 R 997 0 R 997 0 R 1030 0 R 1026 0 R 1027 0 R 1026 0 R 1026 0 R] +endobj + +89 0 obj +[997 0 R 997 0 R 997 0 R 998 0 R 997 0 R 997 0 R 997 0 R 997 0 R 996 0 R 996 0 R 989 0 R 989 0 R 995 0 R 989 0 R 994 0 R 989 0 R 993 0 R 989 0 R 992 0 R 989 0 R 991 0 R 989 0 R 990 0 R 989 0 R 989 0 R 989 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 988 0 R 985 0 R 985 0 R 985 0 R 987 0 R 985 0 R 985 0 R 986 0 R 985 0 R 985 0 R 985 0 R 985 0 R 985 0 R 985 0 R 985 0 R 985 0 R 984 0 R 984 0 R 984 0 R 984 0 R 984 0 R 984 0 R 984 0 R 984 0 R 983 0 R 983 0 R 979 0 R 979 0 R 982 0 R 979 0 R 981 0 R 979 0 R 980 0 R 980 0 R 979 0 R] +endobj + +90 0 obj +[979 0 R 979 0 R 978 0 R 973 0 R 977 0 R 973 0 R 973 0 R 973 0 R 973 0 R 976 0 R 973 0 R 973 0 R 975 0 R 975 0 R 975 0 R 975 0 R 975 0 R 975 0 R 973 0 R 973 0 R 973 0 R 973 0 R 974 0 R 973 0 R 973 0 R 972 0 R 970 0 R 971 0 R 970 0 R 970 0 R 970 0 R 970 0 R 970 0 R 970 0 R 965 0 R 969 0 R 965 0 R 965 0 R 968 0 R 965 0 R 967 0 R 965 0 R 965 0 R 966 0 R 965 0 R 965 0 R 965 0 R 964 0 R 960 0 R 963 0 R 960 0 R 962 0 R 962 0 R 962 0 R 960 0 R 961 0 R 960 0 R 960 0 R 960 0 R 960 0 R 960 0 R 959 0 R 956 0 R 956 0 R 956 0 R 958 0 R 956 0 R 956 0 R 956 0 R 957 0 R 956 0 R 956 0 R 956 0 R 956 0 R 956 0 R 956 0 R 956 0 R 956 0 R 956 0 R 956 0 R 955 0 R 949 0 R 949 0 R 949 0 R 954 0 R 954 0 R 954 0 R 954 0 R 954 0 R 954 0 R 949 0 R 949 0 R 949 0 R 949 0 R 953 0 R 949 0 R 949 0 R 949 0 R 949 0 R 949 0 R 949 0 R 949 0 R 952 0 R 949 0 R 949 0 R 949 0 R 951 0 R 949 0 R 949 0 R 949 0 R 949 0 R 950 0 R 949 0 R 949 0 R 948 0 R 948 0 R 948 0 R] +endobj + +91 0 obj +[947 0 R 947 0 R 946 0 R 946 0 R 945 0 R 945 0 R 944 0 R 943 0 R 943 0 R 943 0 R 943 0 R 942 0 R 934 0 R 941 0 R 934 0 R 934 0 R 934 0 R 940 0 R 934 0 R 934 0 R 939 0 R 934 0 R 938 0 R 934 0 R 934 0 R 934 0 R 934 0 R 934 0 R 937 0 R 934 0 R 934 0 R 934 0 R 934 0 R 934 0 R 934 0 R 934 0 R 936 0 R 934 0 R 934 0 R 935 0 R 934 0 R 934 0 R 934 0 R 934 0 R 934 0 R 934 0 R 933 0 R 928 0 R 928 0 R 928 0 R 932 0 R 928 0 R 928 0 R 928 0 R 931 0 R 928 0 R 930 0 R 928 0 R 928 0 R 928 0 R 928 0 R 928 0 R 928 0 R 928 0 R 928 0 R 928 0 R 929 0 R 928 0 R 927 0 R 921 0 R 921 0 R 926 0 R 921 0 R 921 0 R 925 0 R 925 0 R 921 0 R 921 0 R 921 0 R 921 0 R 921 0 R 921 0 R 924 0 R 921 0 R 923 0 R 921 0 R 921 0 R 921 0 R 922 0 R 921 0 R 921 0 R 921 0 R 921 0 R] +endobj + +92 0 obj +[921 0 R 921 0 R 920 0 R 920 0 R 919 0 R 918 0 R 918 0 R 918 0 R 917 0 R 910 0 R 910 0 R 916 0 R 910 0 R 915 0 R 910 0 R 910 0 R 914 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 913 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 912 0 R 912 0 R 910 0 R 910 0 R 911 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 910 0 R 909 0 R 898 0 R 898 0 R 908 0 R 898 0 R 907 0 R 898 0 R 898 0 R 906 0 R 898 0 R 905 0 R 898 0 R 904 0 R 898 0 R 903 0 R 898 0 R 898 0 R 898 0 R 898 0 R 898 0 R 898 0 R 902 0 R 902 0 R 898 0 R 898 0 R 898 0 R 898 0 R 898 0 R 898 0 R 901 0 R 898 0 R 898 0 R 898 0 R 898 0 R 898 0 R 900 0 R 898 0 R 899 0 R 898 0 R 898 0 R 898 0 R 898 0 R 898 0 R 897 0 R 897 0 R 896 0 R 896 0 R] +endobj + +93 0 obj +[896 0 R 896 0 R 896 0 R 895 0 R 878 0 R 878 0 R 878 0 R 878 0 R 894 0 R 878 0 R 878 0 R 893 0 R 878 0 R 878 0 R 878 0 R 892 0 R 878 0 R 878 0 R 891 0 R 878 0 R 878 0 R 890 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 889 0 R 878 0 R 878 0 R 878 0 R 878 0 R 888 0 R 878 0 R 878 0 R 878 0 R 887 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 886 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 885 0 R 878 0 R 878 0 R 878 0 R 884 0 R 878 0 R 878 0 R 878 0 R 878 0 R 883 0 R 878 0 R 878 0 R 878 0 R 882 0 R 878 0 R 878 0 R 878 0 R 881 0 R 878 0 R 880 0 R 878 0 R 878 0 R 879 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 878 0 R 877 0 R 867 0 R 867 0 R 867 0 R 867 0 R 876 0 R 867 0 R 867 0 R 867 0 R 867 0 R 875 0 R 867 0 R 867 0 R 867 0 R 874 0 R 867 0 R 867 0 R 873 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 872 0 R 867 0 R 867 0 R 867 0 R 871 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 870 0 R 867 0 R 869 0 R 867 0 R 867 0 R 868 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R 867 0 R] +endobj + +94 0 obj +[866 0 R 856 0 R 856 0 R 856 0 R 865 0 R 856 0 R 864 0 R 856 0 R 856 0 R 856 0 R 856 0 R 863 0 R 856 0 R 856 0 R 856 0 R 856 0 R 856 0 R 862 0 R 856 0 R 861 0 R 856 0 R 856 0 R 856 0 R 856 0 R 860 0 R 856 0 R 856 0 R 856 0 R 856 0 R 859 0 R 856 0 R 856 0 R 856 0 R 858 0 R 856 0 R 856 0 R 856 0 R 857 0 R 856 0 R 856 0 R 856 0 R 856 0 R 856 0 R 856 0 R 855 0 R 855 0 R 854 0 R 854 0 R 854 0 R 854 0 R 853 0 R 847 0 R 847 0 R 847 0 R 852 0 R 847 0 R 847 0 R 847 0 R 851 0 R 847 0 R 847 0 R 847 0 R 847 0 R 850 0 R 847 0 R 849 0 R 847 0 R 847 0 R 847 0 R 847 0 R 847 0 R 847 0 R 848 0 R 847 0 R 847 0 R 847 0 R 846 0 R 836 0 R 836 0 R 836 0 R 845 0 R 836 0 R 844 0 R 836 0 R 836 0 R 836 0 R 836 0 R 836 0 R 836 0 R 843 0 R 836 0 R 836 0 R 836 0 R 836 0 R 842 0 R 836 0 R 841 0 R 836 0 R 836 0 R 840 0 R 836 0 R 836 0 R 836 0 R 836 0 R 839 0 R 836 0 R 836 0 R 836 0 R 836 0 R 836 0 R 836 0 R 836 0 R 838 0 R 836 0 R 836 0 R 837 0 R 836 0 R 835 0 R 827 0 R 827 0 R 834 0 R 827 0 R 827 0 R 827 0 R 827 0 R 827 0 R 833 0 R 827 0 R 832 0 R 827 0 R 827 0 R 827 0 R 831 0 R 827 0 R 827 0 R 827 0 R 827 0 R 830 0 R 827 0 R 827 0 R 829 0 R] +endobj + +95 0 obj +[828 0 R 827 0 R 827 0 R 827 0 R 827 0 R 826 0 R 826 0 R 821 0 R 821 0 R 825 0 R 821 0 R 821 0 R 821 0 R 821 0 R 824 0 R 821 0 R 821 0 R 821 0 R 823 0 R 821 0 R 821 0 R 822 0 R 822 0 R 821 0 R 821 0 R 821 0 R 821 0 R 821 0 R 819 0 R 819 0 R 820 0 R 819 0 R 819 0 R 819 0 R 819 0 R 819 0 R 819 0 R 819 0 R 818 0 R 817 0 R 813 0 R 815 0 R 815 0 R 815 0 R 813 0 R 814 0 R 813 0 R 810 0 R 806 0 R 808 0 R 806 0 R 806 0 R 807 0 R 806 0 R 803 0 R 799 0 R 799 0 R 799 0 R 801 0 R 799 0 R 800 0 R 799 0 R 796 0 R 793 0 R 794 0 R 793 0 R 790 0 R 786 0 R 786 0 R 788 0 R 788 0 R 786 0 R 786 0 R 787 0 R 786 0 R 783 0 R 780 0 R 781 0 R 780 0 R 780 0 R] +endobj + +96 0 obj +[777 0 R 774 0 R 774 0 R 774 0 R 775 0 R 771 0 R 768 0 R 768 0 R 768 0 R 769 0 R 769 0 R 765 0 R 760 0 R 763 0 R 760 0 R 762 0 R 762 0 R 762 0 R 760 0 R 761 0 R 760 0 R 757 0 R 752 0 R 755 0 R 752 0 R 754 0 R 752 0 R 752 0 R 753 0 R 752 0 R 749 0 R 746 0 R 746 0 R 747 0 R 746 0 R 743 0 R 738 0 R 741 0 R 738 0 R 738 0 R 740 0 R 740 0 R 738 0 R 739 0 R 738 0 R 735 0 R 732 0 R 732 0 R 733 0 R 732 0 R 732 0 R 729 0 R 727 0 R 727 0 R 724 0 R 720 0 R 722 0 R 720 0 R 720 0 R 721 0 R 720 0 R 717 0 R 714 0 R 715 0 R 715 0 R 714 0 R 714 0 R 711 0 R 707 0 R 707 0 R 709 0 R 709 0 R 707 0 R 707 0 R 708 0 R 707 0 R 704 0 R 700 0 R 700 0 R 702 0 R 702 0 R 700 0 R 700 0 R 700 0 R 701 0 R 700 0 R 697 0 R 693 0 R 695 0 R 693 0 R 693 0 R 694 0 R 693 0 R 690 0 R 687 0 R 688 0 R 687 0 R 684 0 R 680 0 R 682 0 R 682 0 R 680 0 R 680 0 R 680 0 R 681 0 R 680 0 R 677 0 R 674 0 R 675 0 R 674 0 R 674 0 R] +endobj + +97 0 obj +[671 0 R 667 0 R 669 0 R 669 0 R 667 0 R 667 0 R 667 0 R 668 0 R 667 0 R 664 0 R 660 0 R 662 0 R 662 0 R 660 0 R 660 0 R 661 0 R 660 0 R 657 0 R 653 0 R 655 0 R 653 0 R 654 0 R 654 0 R 653 0 R 650 0 R 646 0 R 648 0 R 648 0 R 648 0 R 646 0 R 647 0 R 647 0 R 646 0 R 643 0 R 639 0 R 641 0 R 641 0 R 639 0 R 639 0 R 640 0 R 639 0 R 636 0 R 632 0 R 634 0 R 634 0 R 632 0 R 633 0 R 632 0 R 629 0 R 624 0 R 627 0 R 624 0 R 626 0 R 626 0 R 624 0 R 625 0 R 624 0 R 621 0 R 617 0 R 617 0 R 619 0 R 619 0 R 617 0 R 617 0 R 618 0 R 617 0 R 614 0 R 610 0 R 612 0 R 612 0 R 612 0 R 610 0 R 611 0 R 610 0 R 607 0 R 603 0 R 603 0 R 605 0 R 605 0 R 603 0 R 604 0 R 603 0 R 600 0 R 596 0 R 596 0 R 598 0 R 596 0 R 597 0 R 596 0 R 593 0 R 589 0 R 591 0 R 591 0 R 589 0 R 589 0 R 590 0 R 589 0 R 586 0 R 582 0 R 584 0 R 582 0 R 582 0 R 583 0 R 582 0 R 579 0 R 575 0 R 577 0 R 577 0 R 575 0 R 576 0 R 575 0 R] +endobj + +98 0 obj +[572 0 R 568 0 R 570 0 R 570 0 R 568 0 R 569 0 R 568 0 R 565 0 R 562 0 R 563 0 R 563 0 R 563 0 R 562 0 R 559 0 R 556 0 R 556 0 R 556 0 R 557 0 R 553 0 R 549 0 R 549 0 R 551 0 R 551 0 R 549 0 R 549 0 R 550 0 R 549 0 R 546 0 R 543 0 R 544 0 R 544 0 R 544 0 R 543 0 R 543 0 R 540 0 R 537 0 R 538 0 R 538 0 R 534 0 R 531 0 R 532 0 R 528 0 R 525 0 R 526 0 R 525 0 R 522 0 R 518 0 R 518 0 R 518 0 R 520 0 R 518 0 R 518 0 R 519 0 R 518 0 R 515 0 R 511 0 R 511 0 R 513 0 R 513 0 R 511 0 R 512 0 R 511 0 R 508 0 R 504 0 R 504 0 R 506 0 R 506 0 R 504 0 R 505 0 R 504 0 R 501 0 R 498 0 R 498 0 R 499 0 R 498 0 R 495 0 R 492 0 R 493 0 R 493 0 R 492 0 R 489 0 R 486 0 R 486 0 R 486 0 R 487 0 R 486 0 R 483 0 R 479 0 R 479 0 R 481 0 R 479 0 R 479 0 R 480 0 R 479 0 R 476 0 R 473 0 R 473 0 R 474 0 R 474 0 R 473 0 R] +endobj + +99 0 obj +[470 0 R 466 0 R 468 0 R 468 0 R 466 0 R 467 0 R 466 0 R 463 0 R 459 0 R 461 0 R 461 0 R 459 0 R 460 0 R 459 0 R 456 0 R 453 0 R 454 0 R 454 0 R 453 0 R 450 0 R 446 0 R 448 0 R 448 0 R 446 0 R 447 0 R 446 0 R 443 0 R 440 0 R 441 0 R 441 0 R 437 0 R 433 0 R 433 0 R 435 0 R 433 0 R 433 0 R 434 0 R 433 0 R 430 0 R 427 0 R 428 0 R 428 0 R 424 0 R 420 0 R 422 0 R 422 0 R 420 0 R 420 0 R 421 0 R 420 0 R 417 0 R 413 0 R 413 0 R 415 0 R 415 0 R 415 0 R 415 0 R 413 0 R 414 0 R 413 0 R 410 0 R 406 0 R 406 0 R 408 0 R 406 0 R 407 0 R 407 0 R 406 0 R 403 0 R 399 0 R 401 0 R 401 0 R 399 0 R 400 0 R 399 0 R 396 0 R 392 0 R 392 0 R 394 0 R 392 0 R 392 0 R 393 0 R 392 0 R 389 0 R 385 0 R 385 0 R 387 0 R 387 0 R 385 0 R 385 0 R 386 0 R 385 0 R 382 0 R 378 0 R 378 0 R 380 0 R 378 0 R 378 0 R 379 0 R 378 0 R 375 0 R 371 0 R 373 0 R 373 0 R 371 0 R 371 0 R 372 0 R 371 0 R] +endobj + +100 0 obj +[368 0 R 364 0 R 366 0 R 364 0 R 364 0 R 365 0 R 364 0 R 361 0 R 357 0 R 359 0 R 357 0 R 357 0 R 358 0 R 357 0 R 354 0 R 350 0 R 350 0 R 352 0 R 350 0 R 350 0 R 351 0 R 350 0 R 347 0 R 343 0 R 343 0 R 345 0 R 345 0 R 343 0 R 344 0 R 343 0 R 340 0 R 337 0 R 337 0 R 337 0 R 338 0 R 334 0 R 330 0 R 332 0 R 332 0 R 330 0 R 330 0 R 331 0 R 330 0 R 327 0 R 323 0 R 323 0 R 325 0 R 323 0 R 324 0 R 323 0 R 320 0 R 316 0 R 316 0 R 318 0 R 316 0 R 317 0 R 316 0 R 313 0 R 309 0 R 309 0 R 309 0 R 311 0 R 309 0 R 310 0 R 310 0 R 309 0 R 306 0 R 302 0 R 302 0 R 304 0 R 302 0 R 302 0 R 303 0 R 302 0 R 299 0 R 295 0 R 297 0 R 297 0 R 295 0 R 296 0 R 295 0 R 292 0 R 288 0 R 288 0 R 290 0 R 290 0 R 288 0 R 289 0 R 288 0 R 285 0 R 281 0 R 281 0 R 283 0 R 281 0 R 281 0 R 282 0 R 281 0 R 278 0 R 273 0 R 276 0 R 273 0 R 275 0 R 275 0 R 273 0 R 273 0 R 274 0 R 273 0 R 270 0 R 266 0 R 266 0 R 268 0 R] +endobj + +101 0 obj +[268 0 R 266 0 R 266 0 R 267 0 R 266 0 R 263 0 R 259 0 R 259 0 R 259 0 R 261 0 R 261 0 R 259 0 R 260 0 R 259 0 R 256 0 R 252 0 R 252 0 R 254 0 R 254 0 R 252 0 R 253 0 R 252 0 R 249 0 R 245 0 R 247 0 R 247 0 R 245 0 R 245 0 R 246 0 R 245 0 R 242 0 R 238 0 R 238 0 R 240 0 R 240 0 R 238 0 R 238 0 R 239 0 R 238 0 R 235 0 R 231 0 R 231 0 R 233 0 R 231 0 R 231 0 R 232 0 R 231 0 R 228 0 R 224 0 R 224 0 R 226 0 R 226 0 R 224 0 R 225 0 R 224 0 R 221 0 R 218 0 R 219 0 R 219 0 R 218 0 R 215 0 R 213 0 R 213 0 R 210 0 R 208 0 R 205 0 R 201 0 R 203 0 R 201 0 R 202 0 R 201 0 R 198 0 R 194 0 R 196 0 R 196 0 R 196 0 R 194 0 R 194 0 R 195 0 R 194 0 R 191 0 R 187 0 R 187 0 R 187 0 R 189 0 R 189 0 R 187 0 R 188 0 R 187 0 R 184 0 R 180 0 R 180 0 R 182 0 R 182 0 R 180 0 R 181 0 R 180 0 R 177 0 R 173 0 R 175 0 R 175 0 R 175 0 R 173 0 R 174 0 R 173 0 R 170 0 R 166 0 R 168 0 R 168 0 R 168 0 R 166 0 R 167 0 R 166 0 R] +endobj + +102 0 obj +[163 0 R 159 0 R 159 0 R 161 0 R 161 0 R 161 0 R 159 0 R 160 0 R 159 0 R 156 0 R 154 0 R 151 0 R 148 0 R 149 0 R 148 0 R 145 0 R 141 0 R 141 0 R 141 0 R 143 0 R 141 0 R 141 0 R 142 0 R 141 0 R 138 0 R 134 0 R 134 0 R 136 0 R 136 0 R 134 0 R 135 0 R 134 0 R 131 0 R 127 0 R 129 0 R 129 0 R 127 0 R 127 0 R 128 0 R 127 0 R 124 0 R 120 0 R 120 0 R 122 0 R 120 0 R 120 0 R 121 0 R 120 0 R 117 0 R 114 0 R 114 0 R 115 0 R 115 0 R 111 0 R 107 0 R 107 0 R 109 0 R 107 0 R 108 0 R 107 0 R] +endobj + +103 0 obj +<< + /Type /StructElem + /S /Document + /P 54 0 R + /K [4305 0 R 4301 0 R 4298 0 R 4297 0 R 4290 0 R 4289 0 R 4076 0 R 4075 0 R 4069 0 R 4068 0 R 4067 0 R 4056 0 R 4053 0 R 4052 0 R 4051 0 R 4050 0 R 4038 0 R 4029 0 R 4026 0 R 4025 0 R 4018 0 R 4017 0 R 4016 0 R 4014 0 R 4012 0 R 4011 0 R 4002 0 R 3978 0 R 3977 0 R 3975 0 R 3974 0 R 3966 0 R 3965 0 R 3963 0 R 3954 0 R 3945 0 R 3944 0 R 3936 0 R 3935 0 R 3931 0 R 3930 0 R 3929 0 R 3919 0 R 3902 0 R 3901 0 R 3897 0 R 3888 0 R 3887 0 R 3885 0 R 3884 0 R 3880 0 R 3879 0 R 3875 0 R 3874 0 R 3863 0 R 3846 0 R 3840 0 R 3839 0 R 3820 0 R 3817 0 R 3782 0 R 3765 0 R 3760 0 R 3750 0 R 3743 0 R 3739 0 R 3713 0 R 3705 0 R 3688 0 R 3687 0 R 3683 0 R 3670 0 R 3666 0 R 3648 0 R 3646 0 R 3637 0 R 3632 0 R 3598 0 R 3595 0 R 3578 0 R 3569 0 R 3567 0 R 3539 0 R 3530 0 R 3528 0 R 3521 0 R 3513 0 R 3506 0 R 3505 0 R 3502 0 R 3501 0 R 3498 0 R 3468 0 R 3462 0 R 3394 0 R 3389 0 R 3388 0 R 3384 0 R 3383 0 R 3380 0 R 3374 0 R 3369 0 R 3363 0 R 3360 0 R 3341 0 R 3340 0 R 3336 0 R 3333 0 R 3318 0 R 3313 0 R 3221 0 R 3219 0 R 3216 0 R 3194 0 R 3102 0 R 3095 0 R 3094 0 R 3090 0 R 3073 0 R 3062 0 R 3053 0 R 3052 0 R 3039 0 R 3032 0 R 3017 0 R 3010 0 R 2980 0 R 2977 0 R 2976 0 R 2972 0 R 2940 0 R 2937 0 R 2900 0 R 2896 0 R 2889 0 R 2880 0 R 2877 0 R 2868 0 R 2867 0 R 2854 0 R 2850 0 R 2849 0 R 2845 0 R 2840 0 R 2834 0 R 2815 0 R 2814 0 R 2811 0 R 2803 0 R 2794 0 R 2793 0 R 2770 0 R 2769 0 R 2768 0 R 2765 0 R 2764 0 R 2759 0 R 2740 0 R 2729 0 R 2725 0 R 2715 0 R 2710 0 R 2695 0 R 2693 0 R 2692 0 R 2691 0 R 2686 0 R 2681 0 R 2680 0 R 2677 0 R 2676 0 R 2666 0 R 2665 0 R 2661 0 R 2643 0 R 2553 0 R 2548 0 R 2547 0 R 2536 0 R 2529 0 R 2388 0 R 2378 0 R 2364 0 R 2363 0 R 2361 0 R 2345 0 R 2333 0 R 2322 0 R 2217 0 R 2208 0 R 2142 0 R 2128 0 R 2127 0 R 2117 0 R 2099 0 R 2010 0 R 1985 0 R 1786 0 R 1782 0 R 1775 0 R 1774 0 R 1762 0 R 1706 0 R 1694 0 R 1688 0 R 1687 0 R 1680 0 R 1679 0 R 1676 0 R 1645 0 R 1641 0 R 1640 0 R 1615 0 R 1613 0 R 1612 0 R 1608 0 R 1605 0 R 1597 0 R 1375 0 R 1374 0 R 1367 0 R 1222 0 R 1219 0 R 1209 0 R 1112 0 R 1110 0 R 1109 0 R 1092 0 R 1088 0 R 1083 0 R 1079 0 R 1077 0 R 1076 0 R 1075 0 R 1074 0 R 1065 0 R 1064 0 R 1062 0 R 1057 0 R 1054 0 R 1053 0 R 1052 0 R 1046 0 R 1044 0 R 1039 0 R 1038 0 R 1037 0 R 1034 0 R 1020 0 R 1015 0 R 1007 0 R 1000 0 R 997 0 R 996 0 R 989 0 R 988 0 R 985 0 R 984 0 R 983 0 R 979 0 R 973 0 R 970 0 R 965 0 R 960 0 R 956 0 R 949 0 R 948 0 R 947 0 R 946 0 R 945 0 R 943 0 R 934 0 R 928 0 R 921 0 R 920 0 R 918 0 R 910 0 R 898 0 R 897 0 R 896 0 R 878 0 R 867 0 R 856 0 R 855 0 R 854 0 R 847 0 R 836 0 R 827 0 R 826 0 R 821 0 R 819 0 R 818 0 R 104 0 R] +>> +endobj + +104 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Decimal + >>] + /K [811 0 R 804 0 R 797 0 R 791 0 R 784 0 R 778 0 R 772 0 R 766 0 R 758 0 R 750 0 R 744 0 R 736 0 R 730 0 R 725 0 R 718 0 R 712 0 R 705 0 R 698 0 R 691 0 R 685 0 R 678 0 R 672 0 R 665 0 R 658 0 R 651 0 R 644 0 R 637 0 R 630 0 R 622 0 R 615 0 R 608 0 R 601 0 R 594 0 R 587 0 R 580 0 R 573 0 R 566 0 R 560 0 R 554 0 R 547 0 R 541 0 R 535 0 R 529 0 R 523 0 R 516 0 R 509 0 R 502 0 R 496 0 R 490 0 R 484 0 R 477 0 R 471 0 R 464 0 R 457 0 R 451 0 R 444 0 R 438 0 R 431 0 R 425 0 R 418 0 R 411 0 R 404 0 R 397 0 R 390 0 R 383 0 R 376 0 R 369 0 R 362 0 R 355 0 R 348 0 R 341 0 R 335 0 R 328 0 R 321 0 R 314 0 R 307 0 R 300 0 R 293 0 R 286 0 R 279 0 R 271 0 R 264 0 R 257 0 R 250 0 R 243 0 R 236 0 R 229 0 R 222 0 R 216 0 R 211 0 R 206 0 R 199 0 R 192 0 R 185 0 R 178 0 R 171 0 R 164 0 R 157 0 R 152 0 R 146 0 R 139 0 R 132 0 R 125 0 R 118 0 R 112 0 R 105 0 R] +>> +endobj + +105 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [110 0 R 106 0 R] +>> +endobj + +106 0 obj +<< + /Type /StructElem + /S /LBody + /P 105 0 R + /K [107 0 R] +>> +endobj + +107 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 106 0 R + /K [54 55 109 0 R 57 108 0 R 59] + /Pg 5270 0 R +>> +endobj + +108 0 obj +<< + /Type /StructElem + /S /Link + /P 107 0 R + /K [58 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5269 0 R + >>] + /Pg 5270 0 R +>> +endobj + +109 0 obj +<< + /Type /StructElem + /S /Em + /P 107 0 R + /K [56] + /Pg 5270 0 R +>> +endobj + +110 0 obj +<< + /Type /StructElem + /S /Lbl + /P 105 0 R + /K [111 0 R] +>> +endobj + +111 0 obj +<< + /Type /StructElem + /S /Link + /P 110 0 R + /K [53 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5268 0 R + >>] + /Pg 5270 0 R +>> +endobj + +112 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [116 0 R 113 0 R] +>> +endobj + +113 0 obj +<< + /Type /StructElem + /S /LBody + /P 112 0 R + /K [114 0 R] +>> +endobj + +114 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 113 0 R + /K [49 50 115 0 R] + /Pg 5270 0 R +>> +endobj + +115 0 obj +<< + /Type /StructElem + /S /Link + /P 114 0 R + /K [51 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5266 0 R + >> 52 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5267 0 R + >>] + /Pg 5270 0 R +>> +endobj + +116 0 obj +<< + /Type /StructElem + /S /Lbl + /P 112 0 R + /K [117 0 R] +>> +endobj + +117 0 obj +<< + /Type /StructElem + /S /Link + /P 116 0 R + /K [48 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5265 0 R + >>] + /Pg 5270 0 R +>> +endobj + +118 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [123 0 R 119 0 R] +>> +endobj + +119 0 obj +<< + /Type /StructElem + /S /LBody + /P 118 0 R + /K [120 0 R] +>> +endobj + +120 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 119 0 R + /K [41 42 122 0 R 44 45 121 0 R 47] + /Pg 5270 0 R +>> +endobj + +121 0 obj +<< + /Type /StructElem + /S /Link + /P 120 0 R + /K [46 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5264 0 R + >>] + /Pg 5270 0 R +>> +endobj + +122 0 obj +<< + /Type /StructElem + /S /Em + /P 120 0 R + /K [43] + /Pg 5270 0 R +>> +endobj + +123 0 obj +<< + /Type /StructElem + /S /Lbl + /P 118 0 R + /K [124 0 R] +>> +endobj + +124 0 obj +<< + /Type /StructElem + /S /Link + /P 123 0 R + /K [40 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5263 0 R + >>] + /Pg 5270 0 R +>> +endobj + +125 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [130 0 R 126 0 R] +>> +endobj + +126 0 obj +<< + /Type /StructElem + /S /LBody + /P 125 0 R + /K [127 0 R] +>> +endobj + +127 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 126 0 R + /K [33 129 0 R 36 37 128 0 R 39] + /Pg 5270 0 R +>> +endobj + +128 0 obj +<< + /Type /StructElem + /S /Link + /P 127 0 R + /K [38 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5262 0 R + >>] + /Pg 5270 0 R +>> +endobj + +129 0 obj +<< + /Type /StructElem + /S /Em + /P 127 0 R + /K [34 35] + /Pg 5270 0 R +>> +endobj + +130 0 obj +<< + /Type /StructElem + /S /Lbl + /P 125 0 R + /K [131 0 R] +>> +endobj + +131 0 obj +<< + /Type /StructElem + /S /Link + /P 130 0 R + /K [32 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5261 0 R + >>] + /Pg 5270 0 R +>> +endobj + +132 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [137 0 R 133 0 R] +>> +endobj + +133 0 obj +<< + /Type /StructElem + /S /LBody + /P 132 0 R + /K [134 0 R] +>> +endobj + +134 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 133 0 R + /K [25 26 136 0 R 29 135 0 R 31] + /Pg 5270 0 R +>> +endobj + +135 0 obj +<< + /Type /StructElem + /S /Link + /P 134 0 R + /K [30 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5260 0 R + >>] + /Pg 5270 0 R +>> +endobj + +136 0 obj +<< + /Type /StructElem + /S /Em + /P 134 0 R + /K [27 28] + /Pg 5270 0 R +>> +endobj + +137 0 obj +<< + /Type /StructElem + /S /Lbl + /P 132 0 R + /K [138 0 R] +>> +endobj + +138 0 obj +<< + /Type /StructElem + /S /Link + /P 137 0 R + /K [24 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5259 0 R + >>] + /Pg 5270 0 R +>> +endobj + +139 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [144 0 R 140 0 R] +>> +endobj + +140 0 obj +<< + /Type /StructElem + /S /LBody + /P 139 0 R + /K [141 0 R] +>> +endobj + +141 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 140 0 R + /K [16 17 18 143 0 R 20 21 142 0 R 23] + /Pg 5270 0 R +>> +endobj + +142 0 obj +<< + /Type /StructElem + /S /Link + /P 141 0 R + /K [22 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5258 0 R + >>] + /Pg 5270 0 R +>> +endobj + +143 0 obj +<< + /Type /StructElem + /S /Em + /P 141 0 R + /K [19] + /Pg 5270 0 R +>> +endobj + +144 0 obj +<< + /Type /StructElem + /S /Lbl + /P 139 0 R + /K [145 0 R] +>> +endobj + +145 0 obj +<< + /Type /StructElem + /S /Link + /P 144 0 R + /K [15 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5257 0 R + >>] + /Pg 5270 0 R +>> +endobj + +146 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [150 0 R 147 0 R] +>> +endobj + +147 0 obj +<< + /Type /StructElem + /S /LBody + /P 146 0 R + /K [148 0 R] +>> +endobj + +148 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 147 0 R + /K [12 149 0 R 14] + /Pg 5270 0 R +>> +endobj + +149 0 obj +<< + /Type /StructElem + /S /Em + /P 148 0 R + /K [13] + /Pg 5270 0 R +>> +endobj + +150 0 obj +<< + /Type /StructElem + /S /Lbl + /P 146 0 R + /K [151 0 R] +>> +endobj + +151 0 obj +<< + /Type /StructElem + /S /Link + /P 150 0 R + /K [11 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5256 0 R + >>] + /Pg 5270 0 R +>> +endobj + +152 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [155 0 R 153 0 R] +>> +endobj + +153 0 obj +<< + /Type /StructElem + /S /LBody + /P 152 0 R + /K [154 0 R] +>> +endobj + +154 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 153 0 R + /K [10] + /Pg 5270 0 R +>> +endobj + +155 0 obj +<< + /Type /StructElem + /S /Lbl + /P 152 0 R + /K [156 0 R] +>> +endobj + +156 0 obj +<< + /Type /StructElem + /S /Link + /P 155 0 R + /K [9 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5255 0 R + >>] + /Pg 5270 0 R +>> +endobj + +157 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [162 0 R 158 0 R] +>> +endobj + +158 0 obj +<< + /Type /StructElem + /S /LBody + /P 157 0 R + /K [159 0 R] +>> +endobj + +159 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 158 0 R + /K [1 2 161 0 R 6 160 0 R 8] + /Pg 5270 0 R +>> +endobj + +160 0 obj +<< + /Type /StructElem + /S /Link + /P 159 0 R + /K [7 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5254 0 R + >>] + /Pg 5270 0 R +>> +endobj + +161 0 obj +<< + /Type /StructElem + /S /Em + /P 159 0 R + /K [3 4 5] + /Pg 5270 0 R +>> +endobj + +162 0 obj +<< + /Type /StructElem + /S /Lbl + /P 157 0 R + /K [163 0 R] +>> +endobj + +163 0 obj +<< + /Type /StructElem + /S /Link + /P 162 0 R + /K [0 << + /Type /OBJR + /Pg 5270 0 R + /Obj 5253 0 R + >>] + /Pg 5270 0 R +>> +endobj + +164 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [169 0 R 165 0 R] +>> +endobj + +165 0 obj +<< + /Type /StructElem + /S /LBody + /P 164 0 R + /K [166 0 R] +>> +endobj + +166 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 165 0 R + /K [106 168 0 R 110 167 0 R 112] + /Pg 5251 0 R +>> +endobj + +167 0 obj +<< + /Type /StructElem + /S /Link + /P 166 0 R + /K [111 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5250 0 R + >>] + /Pg 5251 0 R +>> +endobj + +168 0 obj +<< + /Type /StructElem + /S /Em + /P 166 0 R + /K [107 108 109] + /Pg 5251 0 R +>> +endobj + +169 0 obj +<< + /Type /StructElem + /S /Lbl + /P 164 0 R + /K [170 0 R] +>> +endobj + +170 0 obj +<< + /Type /StructElem + /S /Link + /P 169 0 R + /K [105 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5249 0 R + >>] + /Pg 5251 0 R +>> +endobj + +171 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [176 0 R 172 0 R] +>> +endobj + +172 0 obj +<< + /Type /StructElem + /S /LBody + /P 171 0 R + /K [173 0 R] +>> +endobj + +173 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 172 0 R + /K [98 175 0 R 102 174 0 R 104] + /Pg 5251 0 R +>> +endobj + +174 0 obj +<< + /Type /StructElem + /S /Link + /P 173 0 R + /K [103 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5248 0 R + >>] + /Pg 5251 0 R +>> +endobj + +175 0 obj +<< + /Type /StructElem + /S /Em + /P 173 0 R + /K [99 100 101] + /Pg 5251 0 R +>> +endobj + +176 0 obj +<< + /Type /StructElem + /S /Lbl + /P 171 0 R + /K [177 0 R] +>> +endobj + +177 0 obj +<< + /Type /StructElem + /S /Link + /P 176 0 R + /K [97 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5247 0 R + >>] + /Pg 5251 0 R +>> +endobj + +178 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [183 0 R 179 0 R] +>> +endobj + +179 0 obj +<< + /Type /StructElem + /S /LBody + /P 178 0 R + /K [180 0 R] +>> +endobj + +180 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 179 0 R + /K [90 91 182 0 R 94 181 0 R 96] + /Pg 5251 0 R +>> +endobj + +181 0 obj +<< + /Type /StructElem + /S /Link + /P 180 0 R + /K [95 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5246 0 R + >>] + /Pg 5251 0 R +>> +endobj + +182 0 obj +<< + /Type /StructElem + /S /Em + /P 180 0 R + /K [92 93] + /Pg 5251 0 R +>> +endobj + +183 0 obj +<< + /Type /StructElem + /S /Lbl + /P 178 0 R + /K [184 0 R] +>> +endobj + +184 0 obj +<< + /Type /StructElem + /S /Link + /P 183 0 R + /K [89 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5245 0 R + >>] + /Pg 5251 0 R +>> +endobj + +185 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [190 0 R 186 0 R] +>> +endobj + +186 0 obj +<< + /Type /StructElem + /S /LBody + /P 185 0 R + /K [187 0 R] +>> +endobj + +187 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 186 0 R + /K [81 82 83 189 0 R 86 188 0 R 88] + /Pg 5251 0 R +>> +endobj + +188 0 obj +<< + /Type /StructElem + /S /Link + /P 187 0 R + /K [87 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5244 0 R + >>] + /Pg 5251 0 R +>> +endobj + +189 0 obj +<< + /Type /StructElem + /S /Em + /P 187 0 R + /K [84 85] + /Pg 5251 0 R +>> +endobj + +190 0 obj +<< + /Type /StructElem + /S /Lbl + /P 185 0 R + /K [191 0 R] +>> +endobj + +191 0 obj +<< + /Type /StructElem + /S /Link + /P 190 0 R + /K [80 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5243 0 R + >>] + /Pg 5251 0 R +>> +endobj + +192 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [197 0 R 193 0 R] +>> +endobj + +193 0 obj +<< + /Type /StructElem + /S /LBody + /P 192 0 R + /K [194 0 R] +>> +endobj + +194 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 193 0 R + /K [72 196 0 R 76 77 195 0 R 79] + /Pg 5251 0 R +>> +endobj + +195 0 obj +<< + /Type /StructElem + /S /Link + /P 194 0 R + /K [78 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5242 0 R + >>] + /Pg 5251 0 R +>> +endobj + +196 0 obj +<< + /Type /StructElem + /S /Em + /P 194 0 R + /K [73 74 75] + /Pg 5251 0 R +>> +endobj + +197 0 obj +<< + /Type /StructElem + /S /Lbl + /P 192 0 R + /K [198 0 R] +>> +endobj + +198 0 obj +<< + /Type /StructElem + /S /Link + /P 197 0 R + /K [71 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5241 0 R + >>] + /Pg 5251 0 R +>> +endobj + +199 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [204 0 R 200 0 R] +>> +endobj + +200 0 obj +<< + /Type /StructElem + /S /LBody + /P 199 0 R + /K [201 0 R] +>> +endobj + +201 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 200 0 R + /K [66 203 0 R 68 202 0 R 70] + /Pg 5251 0 R +>> +endobj + +202 0 obj +<< + /Type /StructElem + /S /Link + /P 201 0 R + /K [69 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5240 0 R + >>] + /Pg 5251 0 R +>> +endobj + +203 0 obj +<< + /Type /StructElem + /S /Em + /P 201 0 R + /K [67] + /Pg 5251 0 R +>> +endobj + +204 0 obj +<< + /Type /StructElem + /S /Lbl + /P 199 0 R + /K [205 0 R] +>> +endobj + +205 0 obj +<< + /Type /StructElem + /S /Link + /P 204 0 R + /K [65 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5239 0 R + >>] + /Pg 5251 0 R +>> +endobj + +206 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [209 0 R 207 0 R] +>> +endobj + +207 0 obj +<< + /Type /StructElem + /S /LBody + /P 206 0 R + /K [208 0 R] +>> +endobj + +208 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 207 0 R + /K [64] + /Pg 5251 0 R +>> +endobj + +209 0 obj +<< + /Type /StructElem + /S /Lbl + /P 206 0 R + /K [210 0 R] +>> +endobj + +210 0 obj +<< + /Type /StructElem + /S /Link + /P 209 0 R + /K [63 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5238 0 R + >>] + /Pg 5251 0 R +>> +endobj + +211 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [214 0 R 212 0 R] +>> +endobj + +212 0 obj +<< + /Type /StructElem + /S /LBody + /P 211 0 R + /K [213 0 R] +>> +endobj + +213 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 212 0 R + /K [61 62] + /Pg 5251 0 R +>> +endobj + +214 0 obj +<< + /Type /StructElem + /S /Lbl + /P 211 0 R + /K [215 0 R] +>> +endobj + +215 0 obj +<< + /Type /StructElem + /S /Link + /P 214 0 R + /K [60 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5237 0 R + >>] + /Pg 5251 0 R +>> +endobj + +216 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [220 0 R 217 0 R] +>> +endobj + +217 0 obj +<< + /Type /StructElem + /S /LBody + /P 216 0 R + /K [218 0 R] +>> +endobj + +218 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 217 0 R + /K [56 219 0 R 59] + /Pg 5251 0 R +>> +endobj + +219 0 obj +<< + /Type /StructElem + /S /Em + /P 218 0 R + /K [57 58] + /Pg 5251 0 R +>> +endobj + +220 0 obj +<< + /Type /StructElem + /S /Lbl + /P 216 0 R + /K [221 0 R] +>> +endobj + +221 0 obj +<< + /Type /StructElem + /S /Link + /P 220 0 R + /K [55 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5236 0 R + >>] + /Pg 5251 0 R +>> +endobj + +222 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [227 0 R 223 0 R] +>> +endobj + +223 0 obj +<< + /Type /StructElem + /S /LBody + /P 222 0 R + /K [224 0 R] +>> +endobj + +224 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 223 0 R + /K [48 49 226 0 R 52 225 0 R 54] + /Pg 5251 0 R +>> +endobj + +225 0 obj +<< + /Type /StructElem + /S /Link + /P 224 0 R + /K [53 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5235 0 R + >>] + /Pg 5251 0 R +>> +endobj + +226 0 obj +<< + /Type /StructElem + /S /Em + /P 224 0 R + /K [50 51] + /Pg 5251 0 R +>> +endobj + +227 0 obj +<< + /Type /StructElem + /S /Lbl + /P 222 0 R + /K [228 0 R] +>> +endobj + +228 0 obj +<< + /Type /StructElem + /S /Link + /P 227 0 R + /K [47 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5234 0 R + >>] + /Pg 5251 0 R +>> +endobj + +229 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [234 0 R 230 0 R] +>> +endobj + +230 0 obj +<< + /Type /StructElem + /S /LBody + /P 229 0 R + /K [231 0 R] +>> +endobj + +231 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 230 0 R + /K [40 41 233 0 R 43 44 232 0 R 46] + /Pg 5251 0 R +>> +endobj + +232 0 obj +<< + /Type /StructElem + /S /Link + /P 231 0 R + /K [45 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5233 0 R + >>] + /Pg 5251 0 R +>> +endobj + +233 0 obj +<< + /Type /StructElem + /S /Em + /P 231 0 R + /K [42] + /Pg 5251 0 R +>> +endobj + +234 0 obj +<< + /Type /StructElem + /S /Lbl + /P 229 0 R + /K [235 0 R] +>> +endobj + +235 0 obj +<< + /Type /StructElem + /S /Link + /P 234 0 R + /K [39 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5232 0 R + >>] + /Pg 5251 0 R +>> +endobj + +236 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [241 0 R 237 0 R] +>> +endobj + +237 0 obj +<< + /Type /StructElem + /S /LBody + /P 236 0 R + /K [238 0 R] +>> +endobj + +238 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 237 0 R + /K [31 32 240 0 R 35 36 239 0 R 38] + /Pg 5251 0 R +>> +endobj + +239 0 obj +<< + /Type /StructElem + /S /Link + /P 238 0 R + /K [37 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5231 0 R + >>] + /Pg 5251 0 R +>> +endobj + +240 0 obj +<< + /Type /StructElem + /S /Em + /P 238 0 R + /K [33 34] + /Pg 5251 0 R +>> +endobj + +241 0 obj +<< + /Type /StructElem + /S /Lbl + /P 236 0 R + /K [242 0 R] +>> +endobj + +242 0 obj +<< + /Type /StructElem + /S /Link + /P 241 0 R + /K [30 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5230 0 R + >>] + /Pg 5251 0 R +>> +endobj + +243 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [248 0 R 244 0 R] +>> +endobj + +244 0 obj +<< + /Type /StructElem + /S /LBody + /P 243 0 R + /K [245 0 R] +>> +endobj + +245 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 244 0 R + /K [23 247 0 R 26 27 246 0 R 29] + /Pg 5251 0 R +>> +endobj + +246 0 obj +<< + /Type /StructElem + /S /Link + /P 245 0 R + /K [28 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5229 0 R + >>] + /Pg 5251 0 R +>> +endobj + +247 0 obj +<< + /Type /StructElem + /S /Em + /P 245 0 R + /K [24 25] + /Pg 5251 0 R +>> +endobj + +248 0 obj +<< + /Type /StructElem + /S /Lbl + /P 243 0 R + /K [249 0 R] +>> +endobj + +249 0 obj +<< + /Type /StructElem + /S /Link + /P 248 0 R + /K [22 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5228 0 R + >>] + /Pg 5251 0 R +>> +endobj + +250 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [255 0 R 251 0 R] +>> +endobj + +251 0 obj +<< + /Type /StructElem + /S /LBody + /P 250 0 R + /K [252 0 R] +>> +endobj + +252 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 251 0 R + /K [15 16 254 0 R 19 253 0 R 21] + /Pg 5251 0 R +>> +endobj + +253 0 obj +<< + /Type /StructElem + /S /Link + /P 252 0 R + /K [20 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5227 0 R + >>] + /Pg 5251 0 R +>> +endobj + +254 0 obj +<< + /Type /StructElem + /S /Em + /P 252 0 R + /K [17 18] + /Pg 5251 0 R +>> +endobj + +255 0 obj +<< + /Type /StructElem + /S /Lbl + /P 250 0 R + /K [256 0 R] +>> +endobj + +256 0 obj +<< + /Type /StructElem + /S /Link + /P 255 0 R + /K [14 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5226 0 R + >>] + /Pg 5251 0 R +>> +endobj + +257 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [262 0 R 258 0 R] +>> +endobj + +258 0 obj +<< + /Type /StructElem + /S /LBody + /P 257 0 R + /K [259 0 R] +>> +endobj + +259 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 258 0 R + /K [6 7 8 261 0 R 11 260 0 R 13] + /Pg 5251 0 R +>> +endobj + +260 0 obj +<< + /Type /StructElem + /S /Link + /P 259 0 R + /K [12 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5225 0 R + >>] + /Pg 5251 0 R +>> +endobj + +261 0 obj +<< + /Type /StructElem + /S /Em + /P 259 0 R + /K [9 10] + /Pg 5251 0 R +>> +endobj + +262 0 obj +<< + /Type /StructElem + /S /Lbl + /P 257 0 R + /K [263 0 R] +>> +endobj + +263 0 obj +<< + /Type /StructElem + /S /Link + /P 262 0 R + /K [5 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5224 0 R + >>] + /Pg 5251 0 R +>> +endobj + +264 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [269 0 R 265 0 R] +>> +endobj + +265 0 obj +<< + /Type /StructElem + /S /LBody + /P 264 0 R + /K [266 0 R] +>> +endobj + +266 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 265 0 R + /K [108 109 268 0 R << + /Type /MCR + /MCID 1 + /Pg 5251 0 R + >> << + /Type /MCR + /MCID 2 + /Pg 5251 0 R + >> 267 0 R << + /Type /MCR + /MCID 4 + /Pg 5251 0 R + >>] + /Pg 5221 0 R +>> +endobj + +267 0 obj +<< + /Type /StructElem + /S /Link + /P 266 0 R + /K [3 << + /Type /OBJR + /Pg 5251 0 R + /Obj 5223 0 R + >>] + /Pg 5251 0 R +>> +endobj + +268 0 obj +<< + /Type /StructElem + /S /Em + /P 266 0 R + /K [110 << + /Type /MCR + /MCID 0 + /Pg 5251 0 R + >>] + /Pg 5221 0 R +>> +endobj + +269 0 obj +<< + /Type /StructElem + /S /Lbl + /P 264 0 R + /K [270 0 R] +>> +endobj + +270 0 obj +<< + /Type /StructElem + /S /Link + /P 269 0 R + /K [107 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5220 0 R + >>] + /Pg 5221 0 R +>> +endobj + +271 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [277 0 R 272 0 R] +>> +endobj + +272 0 obj +<< + /Type /StructElem + /S /LBody + /P 271 0 R + /K [273 0 R] +>> +endobj + +273 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 272 0 R + /K [98 276 0 R 100 275 0 R 103 104 274 0 R 106] + /Pg 5221 0 R +>> +endobj + +274 0 obj +<< + /Type /StructElem + /S /Link + /P 273 0 R + /K [105 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5219 0 R + >>] + /Pg 5221 0 R +>> +endobj + +275 0 obj +<< + /Type /StructElem + /S /Em + /P 273 0 R + /K [101 102] + /Pg 5221 0 R +>> +endobj + +276 0 obj +<< + /Type /StructElem + /S /Em + /P 273 0 R + /K [99] + /Pg 5221 0 R +>> +endobj + +277 0 obj +<< + /Type /StructElem + /S /Lbl + /P 271 0 R + /K [278 0 R] +>> +endobj + +278 0 obj +<< + /Type /StructElem + /S /Link + /P 277 0 R + /K [97 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5218 0 R + >>] + /Pg 5221 0 R +>> +endobj + +279 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [284 0 R 280 0 R] +>> +endobj + +280 0 obj +<< + /Type /StructElem + /S /LBody + /P 279 0 R + /K [281 0 R] +>> +endobj + +281 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 280 0 R + /K [90 91 283 0 R 93 94 282 0 R 96] + /Pg 5221 0 R +>> +endobj + +282 0 obj +<< + /Type /StructElem + /S /Link + /P 281 0 R + /K [95 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5217 0 R + >>] + /Pg 5221 0 R +>> +endobj + +283 0 obj +<< + /Type /StructElem + /S /Em + /P 281 0 R + /K [92] + /Pg 5221 0 R +>> +endobj + +284 0 obj +<< + /Type /StructElem + /S /Lbl + /P 279 0 R + /K [285 0 R] +>> +endobj + +285 0 obj +<< + /Type /StructElem + /S /Link + /P 284 0 R + /K [89 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5216 0 R + >>] + /Pg 5221 0 R +>> +endobj + +286 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [291 0 R 287 0 R] +>> +endobj + +287 0 obj +<< + /Type /StructElem + /S /LBody + /P 286 0 R + /K [288 0 R] +>> +endobj + +288 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 287 0 R + /K [82 83 290 0 R 86 289 0 R 88] + /Pg 5221 0 R +>> +endobj + +289 0 obj +<< + /Type /StructElem + /S /Link + /P 288 0 R + /K [87 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5215 0 R + >>] + /Pg 5221 0 R +>> +endobj + +290 0 obj +<< + /Type /StructElem + /S /Em + /P 288 0 R + /K [84 85] + /Pg 5221 0 R +>> +endobj + +291 0 obj +<< + /Type /StructElem + /S /Lbl + /P 286 0 R + /K [292 0 R] +>> +endobj + +292 0 obj +<< + /Type /StructElem + /S /Link + /P 291 0 R + /K [81 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5214 0 R + >>] + /Pg 5221 0 R +>> +endobj + +293 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [298 0 R 294 0 R] +>> +endobj + +294 0 obj +<< + /Type /StructElem + /S /LBody + /P 293 0 R + /K [295 0 R] +>> +endobj + +295 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 294 0 R + /K [75 297 0 R 78 296 0 R 80] + /Pg 5221 0 R +>> +endobj + +296 0 obj +<< + /Type /StructElem + /S /Link + /P 295 0 R + /K [79 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5213 0 R + >>] + /Pg 5221 0 R +>> +endobj + +297 0 obj +<< + /Type /StructElem + /S /Em + /P 295 0 R + /K [76 77] + /Pg 5221 0 R +>> +endobj + +298 0 obj +<< + /Type /StructElem + /S /Lbl + /P 293 0 R + /K [299 0 R] +>> +endobj + +299 0 obj +<< + /Type /StructElem + /S /Link + /P 298 0 R + /K [74 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5212 0 R + >>] + /Pg 5221 0 R +>> +endobj + +300 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [305 0 R 301 0 R] +>> +endobj + +301 0 obj +<< + /Type /StructElem + /S /LBody + /P 300 0 R + /K [302 0 R] +>> +endobj + +302 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 301 0 R + /K [67 68 304 0 R 70 71 303 0 R 73] + /Pg 5221 0 R +>> +endobj + +303 0 obj +<< + /Type /StructElem + /S /Link + /P 302 0 R + /K [72 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5211 0 R + >>] + /Pg 5221 0 R +>> +endobj + +304 0 obj +<< + /Type /StructElem + /S /Em + /P 302 0 R + /K [69] + /Pg 5221 0 R +>> +endobj + +305 0 obj +<< + /Type /StructElem + /S /Lbl + /P 300 0 R + /K [306 0 R] +>> +endobj + +306 0 obj +<< + /Type /StructElem + /S /Link + /P 305 0 R + /K [66 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5210 0 R + >>] + /Pg 5221 0 R +>> +endobj + +307 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [312 0 R 308 0 R] +>> +endobj + +308 0 obj +<< + /Type /StructElem + /S /LBody + /P 307 0 R + /K [309 0 R] +>> +endobj + +309 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 308 0 R + /K [58 59 60 311 0 R 62 310 0 R 65] + /Pg 5221 0 R +>> +endobj + +310 0 obj +<< + /Type /StructElem + /S /Link + /P 309 0 R + /K [63 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5208 0 R + >> 64 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5209 0 R + >>] + /Pg 5221 0 R +>> +endobj + +311 0 obj +<< + /Type /StructElem + /S /Em + /P 309 0 R + /K [61] + /Pg 5221 0 R +>> +endobj + +312 0 obj +<< + /Type /StructElem + /S /Lbl + /P 307 0 R + /K [313 0 R] +>> +endobj + +313 0 obj +<< + /Type /StructElem + /S /Link + /P 312 0 R + /K [57 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5207 0 R + >>] + /Pg 5221 0 R +>> +endobj + +314 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [319 0 R 315 0 R] +>> +endobj + +315 0 obj +<< + /Type /StructElem + /S /LBody + /P 314 0 R + /K [316 0 R] +>> +endobj + +316 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 315 0 R + /K [51 52 318 0 R 54 317 0 R 56] + /Pg 5221 0 R +>> +endobj + +317 0 obj +<< + /Type /StructElem + /S /Link + /P 316 0 R + /K [55 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5206 0 R + >>] + /Pg 5221 0 R +>> +endobj + +318 0 obj +<< + /Type /StructElem + /S /Em + /P 316 0 R + /K [53] + /Pg 5221 0 R +>> +endobj + +319 0 obj +<< + /Type /StructElem + /S /Lbl + /P 314 0 R + /K [320 0 R] +>> +endobj + +320 0 obj +<< + /Type /StructElem + /S /Link + /P 319 0 R + /K [50 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5205 0 R + >>] + /Pg 5221 0 R +>> +endobj + +321 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [326 0 R 322 0 R] +>> +endobj + +322 0 obj +<< + /Type /StructElem + /S /LBody + /P 321 0 R + /K [323 0 R] +>> +endobj + +323 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 322 0 R + /K [44 45 325 0 R 47 324 0 R 49] + /Pg 5221 0 R +>> +endobj + +324 0 obj +<< + /Type /StructElem + /S /Link + /P 323 0 R + /K [48 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5204 0 R + >>] + /Pg 5221 0 R +>> +endobj + +325 0 obj +<< + /Type /StructElem + /S /Em + /P 323 0 R + /K [46] + /Pg 5221 0 R +>> +endobj + +326 0 obj +<< + /Type /StructElem + /S /Lbl + /P 321 0 R + /K [327 0 R] +>> +endobj + +327 0 obj +<< + /Type /StructElem + /S /Link + /P 326 0 R + /K [43 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5203 0 R + >>] + /Pg 5221 0 R +>> +endobj + +328 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [333 0 R 329 0 R] +>> +endobj + +329 0 obj +<< + /Type /StructElem + /S /LBody + /P 328 0 R + /K [330 0 R] +>> +endobj + +330 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 329 0 R + /K [36 332 0 R 39 40 331 0 R 42] + /Pg 5221 0 R +>> +endobj + +331 0 obj +<< + /Type /StructElem + /S /Link + /P 330 0 R + /K [41 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5202 0 R + >>] + /Pg 5221 0 R +>> +endobj + +332 0 obj +<< + /Type /StructElem + /S /Em + /P 330 0 R + /K [37 38] + /Pg 5221 0 R +>> +endobj + +333 0 obj +<< + /Type /StructElem + /S /Lbl + /P 328 0 R + /K [334 0 R] +>> +endobj + +334 0 obj +<< + /Type /StructElem + /S /Link + /P 333 0 R + /K [35 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5201 0 R + >>] + /Pg 5221 0 R +>> +endobj + +335 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [339 0 R 336 0 R] +>> +endobj + +336 0 obj +<< + /Type /StructElem + /S /LBody + /P 335 0 R + /K [337 0 R] +>> +endobj + +337 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 336 0 R + /K [31 32 33 338 0 R] + /Pg 5221 0 R +>> +endobj + +338 0 obj +<< + /Type /StructElem + /S /Link + /P 337 0 R + /K [34 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5200 0 R + >>] + /Pg 5221 0 R +>> +endobj + +339 0 obj +<< + /Type /StructElem + /S /Lbl + /P 335 0 R + /K [340 0 R] +>> +endobj + +340 0 obj +<< + /Type /StructElem + /S /Link + /P 339 0 R + /K [30 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5199 0 R + >>] + /Pg 5221 0 R +>> +endobj + +341 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [346 0 R 342 0 R] +>> +endobj + +342 0 obj +<< + /Type /StructElem + /S /LBody + /P 341 0 R + /K [343 0 R] +>> +endobj + +343 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 342 0 R + /K [23 24 345 0 R 27 344 0 R 29] + /Pg 5221 0 R +>> +endobj + +344 0 obj +<< + /Type /StructElem + /S /Link + /P 343 0 R + /K [28 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5198 0 R + >>] + /Pg 5221 0 R +>> +endobj + +345 0 obj +<< + /Type /StructElem + /S /Em + /P 343 0 R + /K [25 26] + /Pg 5221 0 R +>> +endobj + +346 0 obj +<< + /Type /StructElem + /S /Lbl + /P 341 0 R + /K [347 0 R] +>> +endobj + +347 0 obj +<< + /Type /StructElem + /S /Link + /P 346 0 R + /K [22 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5197 0 R + >>] + /Pg 5221 0 R +>> +endobj + +348 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [353 0 R 349 0 R] +>> +endobj + +349 0 obj +<< + /Type /StructElem + /S /LBody + /P 348 0 R + /K [350 0 R] +>> +endobj + +350 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 349 0 R + /K [15 16 352 0 R 18 19 351 0 R 21] + /Pg 5221 0 R +>> +endobj + +351 0 obj +<< + /Type /StructElem + /S /Link + /P 350 0 R + /K [20 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5196 0 R + >>] + /Pg 5221 0 R +>> +endobj + +352 0 obj +<< + /Type /StructElem + /S /Em + /P 350 0 R + /K [17] + /Pg 5221 0 R +>> +endobj + +353 0 obj +<< + /Type /StructElem + /S /Lbl + /P 348 0 R + /K [354 0 R] +>> +endobj + +354 0 obj +<< + /Type /StructElem + /S /Link + /P 353 0 R + /K [14 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5195 0 R + >>] + /Pg 5221 0 R +>> +endobj + +355 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [360 0 R 356 0 R] +>> +endobj + +356 0 obj +<< + /Type /StructElem + /S /LBody + /P 355 0 R + /K [357 0 R] +>> +endobj + +357 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 356 0 R + /K [8 359 0 R 10 11 358 0 R 13] + /Pg 5221 0 R +>> +endobj + +358 0 obj +<< + /Type /StructElem + /S /Link + /P 357 0 R + /K [12 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5194 0 R + >>] + /Pg 5221 0 R +>> +endobj + +359 0 obj +<< + /Type /StructElem + /S /Em + /P 357 0 R + /K [9] + /Pg 5221 0 R +>> +endobj + +360 0 obj +<< + /Type /StructElem + /S /Lbl + /P 355 0 R + /K [361 0 R] +>> +endobj + +361 0 obj +<< + /Type /StructElem + /S /Link + /P 360 0 R + /K [7 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5193 0 R + >>] + /Pg 5221 0 R +>> +endobj + +362 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [367 0 R 363 0 R] +>> +endobj + +363 0 obj +<< + /Type /StructElem + /S /LBody + /P 362 0 R + /K [364 0 R] +>> +endobj + +364 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 363 0 R + /K [1 366 0 R 3 4 365 0 R 6] + /Pg 5221 0 R +>> +endobj + +365 0 obj +<< + /Type /StructElem + /S /Link + /P 364 0 R + /K [5 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5192 0 R + >>] + /Pg 5221 0 R +>> +endobj + +366 0 obj +<< + /Type /StructElem + /S /Em + /P 364 0 R + /K [2] + /Pg 5221 0 R +>> +endobj + +367 0 obj +<< + /Type /StructElem + /S /Lbl + /P 362 0 R + /K [368 0 R] +>> +endobj + +368 0 obj +<< + /Type /StructElem + /S /Link + /P 367 0 R + /K [0 << + /Type /OBJR + /Pg 5221 0 R + /Obj 5191 0 R + >>] + /Pg 5221 0 R +>> +endobj + +369 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [374 0 R 370 0 R] +>> +endobj + +370 0 obj +<< + /Type /StructElem + /S /LBody + /P 369 0 R + /K [371 0 R] +>> +endobj + +371 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 370 0 R + /K [101 373 0 R 104 105 372 0 R 107] + /Pg 5189 0 R +>> +endobj + +372 0 obj +<< + /Type /StructElem + /S /Link + /P 371 0 R + /K [106 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5188 0 R + >>] + /Pg 5189 0 R +>> +endobj + +373 0 obj +<< + /Type /StructElem + /S /Em + /P 371 0 R + /K [102 103] + /Pg 5189 0 R +>> +endobj + +374 0 obj +<< + /Type /StructElem + /S /Lbl + /P 369 0 R + /K [375 0 R] +>> +endobj + +375 0 obj +<< + /Type /StructElem + /S /Link + /P 374 0 R + /K [100 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5187 0 R + >>] + /Pg 5189 0 R +>> +endobj + +376 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [381 0 R 377 0 R] +>> +endobj + +377 0 obj +<< + /Type /StructElem + /S /LBody + /P 376 0 R + /K [378 0 R] +>> +endobj + +378 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 377 0 R + /K [93 94 380 0 R 96 97 379 0 R 99] + /Pg 5189 0 R +>> +endobj + +379 0 obj +<< + /Type /StructElem + /S /Link + /P 378 0 R + /K [98 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5186 0 R + >>] + /Pg 5189 0 R +>> +endobj + +380 0 obj +<< + /Type /StructElem + /S /Em + /P 378 0 R + /K [95] + /Pg 5189 0 R +>> +endobj + +381 0 obj +<< + /Type /StructElem + /S /Lbl + /P 376 0 R + /K [382 0 R] +>> +endobj + +382 0 obj +<< + /Type /StructElem + /S /Link + /P 381 0 R + /K [92 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5185 0 R + >>] + /Pg 5189 0 R +>> +endobj + +383 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [388 0 R 384 0 R] +>> +endobj + +384 0 obj +<< + /Type /StructElem + /S /LBody + /P 383 0 R + /K [385 0 R] +>> +endobj + +385 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 384 0 R + /K [84 85 387 0 R 88 89 386 0 R 91] + /Pg 5189 0 R +>> +endobj + +386 0 obj +<< + /Type /StructElem + /S /Link + /P 385 0 R + /K [90 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5184 0 R + >>] + /Pg 5189 0 R +>> +endobj + +387 0 obj +<< + /Type /StructElem + /S /Em + /P 385 0 R + /K [86 87] + /Pg 5189 0 R +>> +endobj + +388 0 obj +<< + /Type /StructElem + /S /Lbl + /P 383 0 R + /K [389 0 R] +>> +endobj + +389 0 obj +<< + /Type /StructElem + /S /Link + /P 388 0 R + /K [83 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5183 0 R + >>] + /Pg 5189 0 R +>> +endobj + +390 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [395 0 R 391 0 R] +>> +endobj + +391 0 obj +<< + /Type /StructElem + /S /LBody + /P 390 0 R + /K [392 0 R] +>> +endobj + +392 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 391 0 R + /K [76 77 394 0 R 79 80 393 0 R 82] + /Pg 5189 0 R +>> +endobj + +393 0 obj +<< + /Type /StructElem + /S /Link + /P 392 0 R + /K [81 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5182 0 R + >>] + /Pg 5189 0 R +>> +endobj + +394 0 obj +<< + /Type /StructElem + /S /Em + /P 392 0 R + /K [78] + /Pg 5189 0 R +>> +endobj + +395 0 obj +<< + /Type /StructElem + /S /Lbl + /P 390 0 R + /K [396 0 R] +>> +endobj + +396 0 obj +<< + /Type /StructElem + /S /Link + /P 395 0 R + /K [75 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5181 0 R + >>] + /Pg 5189 0 R +>> +endobj + +397 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [402 0 R 398 0 R] +>> +endobj + +398 0 obj +<< + /Type /StructElem + /S /LBody + /P 397 0 R + /K [399 0 R] +>> +endobj + +399 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 398 0 R + /K [69 401 0 R 72 400 0 R 74] + /Pg 5189 0 R +>> +endobj + +400 0 obj +<< + /Type /StructElem + /S /Link + /P 399 0 R + /K [73 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5180 0 R + >>] + /Pg 5189 0 R +>> +endobj + +401 0 obj +<< + /Type /StructElem + /S /Em + /P 399 0 R + /K [70 71] + /Pg 5189 0 R +>> +endobj + +402 0 obj +<< + /Type /StructElem + /S /Lbl + /P 397 0 R + /K [403 0 R] +>> +endobj + +403 0 obj +<< + /Type /StructElem + /S /Link + /P 402 0 R + /K [68 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5179 0 R + >>] + /Pg 5189 0 R +>> +endobj + +404 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [409 0 R 405 0 R] +>> +endobj + +405 0 obj +<< + /Type /StructElem + /S /LBody + /P 404 0 R + /K [406 0 R] +>> +endobj + +406 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 405 0 R + /K [61 62 408 0 R 64 407 0 R 67] + /Pg 5189 0 R +>> +endobj + +407 0 obj +<< + /Type /StructElem + /S /Link + /P 406 0 R + /K [65 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5177 0 R + >> 66 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5178 0 R + >>] + /Pg 5189 0 R +>> +endobj + +408 0 obj +<< + /Type /StructElem + /S /Em + /P 406 0 R + /K [63] + /Pg 5189 0 R +>> +endobj + +409 0 obj +<< + /Type /StructElem + /S /Lbl + /P 404 0 R + /K [410 0 R] +>> +endobj + +410 0 obj +<< + /Type /StructElem + /S /Link + /P 409 0 R + /K [60 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5176 0 R + >>] + /Pg 5189 0 R +>> +endobj + +411 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [416 0 R 412 0 R] +>> +endobj + +412 0 obj +<< + /Type /StructElem + /S /LBody + /P 411 0 R + /K [413 0 R] +>> +endobj + +413 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 412 0 R + /K [51 52 415 0 R 57 414 0 R 59] + /Pg 5189 0 R +>> +endobj + +414 0 obj +<< + /Type /StructElem + /S /Link + /P 413 0 R + /K [58 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5175 0 R + >>] + /Pg 5189 0 R +>> +endobj + +415 0 obj +<< + /Type /StructElem + /S /Em + /P 413 0 R + /K [53 54 55 56] + /Pg 5189 0 R +>> +endobj + +416 0 obj +<< + /Type /StructElem + /S /Lbl + /P 411 0 R + /K [417 0 R] +>> +endobj + +417 0 obj +<< + /Type /StructElem + /S /Link + /P 416 0 R + /K [50 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5174 0 R + >>] + /Pg 5189 0 R +>> +endobj + +418 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [423 0 R 419 0 R] +>> +endobj + +419 0 obj +<< + /Type /StructElem + /S /LBody + /P 418 0 R + /K [420 0 R] +>> +endobj + +420 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 419 0 R + /K [43 422 0 R 46 47 421 0 R 49] + /Pg 5189 0 R +>> +endobj + +421 0 obj +<< + /Type /StructElem + /S /Link + /P 420 0 R + /K [48 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5173 0 R + >>] + /Pg 5189 0 R +>> +endobj + +422 0 obj +<< + /Type /StructElem + /S /Em + /P 420 0 R + /K [44 45] + /Pg 5189 0 R +>> +endobj + +423 0 obj +<< + /Type /StructElem + /S /Lbl + /P 418 0 R + /K [424 0 R] +>> +endobj + +424 0 obj +<< + /Type /StructElem + /S /Link + /P 423 0 R + /K [42 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5172 0 R + >>] + /Pg 5189 0 R +>> +endobj + +425 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [429 0 R 426 0 R] +>> +endobj + +426 0 obj +<< + /Type /StructElem + /S /LBody + /P 425 0 R + /K [427 0 R] +>> +endobj + +427 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 426 0 R + /K [39 428 0 R] + /Pg 5189 0 R +>> +endobj + +428 0 obj +<< + /Type /StructElem + /S /Link + /P 427 0 R + /K [40 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5170 0 R + >> 41 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5171 0 R + >>] + /Pg 5189 0 R +>> +endobj + +429 0 obj +<< + /Type /StructElem + /S /Lbl + /P 425 0 R + /K [430 0 R] +>> +endobj + +430 0 obj +<< + /Type /StructElem + /S /Link + /P 429 0 R + /K [38 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5169 0 R + >>] + /Pg 5189 0 R +>> +endobj + +431 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [436 0 R 432 0 R] +>> +endobj + +432 0 obj +<< + /Type /StructElem + /S /LBody + /P 431 0 R + /K [433 0 R] +>> +endobj + +433 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 432 0 R + /K [31 32 435 0 R 34 35 434 0 R 37] + /Pg 5189 0 R +>> +endobj + +434 0 obj +<< + /Type /StructElem + /S /Link + /P 433 0 R + /K [36 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5168 0 R + >>] + /Pg 5189 0 R +>> +endobj + +435 0 obj +<< + /Type /StructElem + /S /Em + /P 433 0 R + /K [33] + /Pg 5189 0 R +>> +endobj + +436 0 obj +<< + /Type /StructElem + /S /Lbl + /P 431 0 R + /K [437 0 R] +>> +endobj + +437 0 obj +<< + /Type /StructElem + /S /Link + /P 436 0 R + /K [30 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5167 0 R + >>] + /Pg 5189 0 R +>> +endobj + +438 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [442 0 R 439 0 R] +>> +endobj + +439 0 obj +<< + /Type /StructElem + /S /LBody + /P 438 0 R + /K [440 0 R] +>> +endobj + +440 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 439 0 R + /K [27 441 0 R] + /Pg 5189 0 R +>> +endobj + +441 0 obj +<< + /Type /StructElem + /S /Link + /P 440 0 R + /K [28 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5165 0 R + >> 29 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5166 0 R + >>] + /Pg 5189 0 R +>> +endobj + +442 0 obj +<< + /Type /StructElem + /S /Lbl + /P 438 0 R + /K [443 0 R] +>> +endobj + +443 0 obj +<< + /Type /StructElem + /S /Link + /P 442 0 R + /K [26 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5164 0 R + >>] + /Pg 5189 0 R +>> +endobj + +444 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [449 0 R 445 0 R] +>> +endobj + +445 0 obj +<< + /Type /StructElem + /S /LBody + /P 444 0 R + /K [446 0 R] +>> +endobj + +446 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 445 0 R + /K [20 448 0 R 23 447 0 R 25] + /Pg 5189 0 R +>> +endobj + +447 0 obj +<< + /Type /StructElem + /S /Link + /P 446 0 R + /K [24 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5163 0 R + >>] + /Pg 5189 0 R +>> +endobj + +448 0 obj +<< + /Type /StructElem + /S /Em + /P 446 0 R + /K [21 22] + /Pg 5189 0 R +>> +endobj + +449 0 obj +<< + /Type /StructElem + /S /Lbl + /P 444 0 R + /K [450 0 R] +>> +endobj + +450 0 obj +<< + /Type /StructElem + /S /Link + /P 449 0 R + /K [19 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5162 0 R + >>] + /Pg 5189 0 R +>> +endobj + +451 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [455 0 R 452 0 R] +>> +endobj + +452 0 obj +<< + /Type /StructElem + /S /LBody + /P 451 0 R + /K [453 0 R] +>> +endobj + +453 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 452 0 R + /K [15 454 0 R 18] + /Pg 5189 0 R +>> +endobj + +454 0 obj +<< + /Type /StructElem + /S /Em + /P 453 0 R + /K [16 17] + /Pg 5189 0 R +>> +endobj + +455 0 obj +<< + /Type /StructElem + /S /Lbl + /P 451 0 R + /K [456 0 R] +>> +endobj + +456 0 obj +<< + /Type /StructElem + /S /Link + /P 455 0 R + /K [14 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5161 0 R + >>] + /Pg 5189 0 R +>> +endobj + +457 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [462 0 R 458 0 R] +>> +endobj + +458 0 obj +<< + /Type /StructElem + /S /LBody + /P 457 0 R + /K [459 0 R] +>> +endobj + +459 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 458 0 R + /K [8 461 0 R 11 460 0 R 13] + /Pg 5189 0 R +>> +endobj + +460 0 obj +<< + /Type /StructElem + /S /Link + /P 459 0 R + /K [12 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5160 0 R + >>] + /Pg 5189 0 R +>> +endobj + +461 0 obj +<< + /Type /StructElem + /S /Em + /P 459 0 R + /K [9 10] + /Pg 5189 0 R +>> +endobj + +462 0 obj +<< + /Type /StructElem + /S /Lbl + /P 457 0 R + /K [463 0 R] +>> +endobj + +463 0 obj +<< + /Type /StructElem + /S /Link + /P 462 0 R + /K [7 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5159 0 R + >>] + /Pg 5189 0 R +>> +endobj + +464 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [469 0 R 465 0 R] +>> +endobj + +465 0 obj +<< + /Type /StructElem + /S /LBody + /P 464 0 R + /K [466 0 R] +>> +endobj + +466 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 465 0 R + /K [1 468 0 R 4 467 0 R 6] + /Pg 5189 0 R +>> +endobj + +467 0 obj +<< + /Type /StructElem + /S /Link + /P 466 0 R + /K [5 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5158 0 R + >>] + /Pg 5189 0 R +>> +endobj + +468 0 obj +<< + /Type /StructElem + /S /Em + /P 466 0 R + /K [2 3] + /Pg 5189 0 R +>> +endobj + +469 0 obj +<< + /Type /StructElem + /S /Lbl + /P 464 0 R + /K [470 0 R] +>> +endobj + +470 0 obj +<< + /Type /StructElem + /S /Link + /P 469 0 R + /K [0 << + /Type /OBJR + /Pg 5189 0 R + /Obj 5157 0 R + >>] + /Pg 5189 0 R +>> +endobj + +471 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [475 0 R 472 0 R] +>> +endobj + +472 0 obj +<< + /Type /StructElem + /S /LBody + /P 471 0 R + /K [473 0 R] +>> +endobj + +473 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 472 0 R + /K [95 96 474 0 R 99] + /Pg 5155 0 R +>> +endobj + +474 0 obj +<< + /Type /StructElem + /S /Em + /P 473 0 R + /K [97 98] + /Pg 5155 0 R +>> +endobj + +475 0 obj +<< + /Type /StructElem + /S /Lbl + /P 471 0 R + /K [476 0 R] +>> +endobj + +476 0 obj +<< + /Type /StructElem + /S /Link + /P 475 0 R + /K [94 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5154 0 R + >>] + /Pg 5155 0 R +>> +endobj + +477 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [482 0 R 478 0 R] +>> +endobj + +478 0 obj +<< + /Type /StructElem + /S /LBody + /P 477 0 R + /K [479 0 R] +>> +endobj + +479 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 478 0 R + /K [87 88 481 0 R 90 91 480 0 R 93] + /Pg 5155 0 R +>> +endobj + +480 0 obj +<< + /Type /StructElem + /S /Link + /P 479 0 R + /K [92 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5153 0 R + >>] + /Pg 5155 0 R +>> +endobj + +481 0 obj +<< + /Type /StructElem + /S /Em + /P 479 0 R + /K [89] + /Pg 5155 0 R +>> +endobj + +482 0 obj +<< + /Type /StructElem + /S /Lbl + /P 477 0 R + /K [483 0 R] +>> +endobj + +483 0 obj +<< + /Type /StructElem + /S /Link + /P 482 0 R + /K [86 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5152 0 R + >>] + /Pg 5155 0 R +>> +endobj + +484 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [488 0 R 485 0 R] +>> +endobj + +485 0 obj +<< + /Type /StructElem + /S /LBody + /P 484 0 R + /K [486 0 R] +>> +endobj + +486 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 485 0 R + /K [81 82 83 487 0 R 85] + /Pg 5155 0 R +>> +endobj + +487 0 obj +<< + /Type /StructElem + /S /Em + /P 486 0 R + /K [84] + /Pg 5155 0 R +>> +endobj + +488 0 obj +<< + /Type /StructElem + /S /Lbl + /P 484 0 R + /K [489 0 R] +>> +endobj + +489 0 obj +<< + /Type /StructElem + /S /Link + /P 488 0 R + /K [80 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5151 0 R + >>] + /Pg 5155 0 R +>> +endobj + +490 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [494 0 R 491 0 R] +>> +endobj + +491 0 obj +<< + /Type /StructElem + /S /LBody + /P 490 0 R + /K [492 0 R] +>> +endobj + +492 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 491 0 R + /K [76 493 0 R 79] + /Pg 5155 0 R +>> +endobj + +493 0 obj +<< + /Type /StructElem + /S /Em + /P 492 0 R + /K [77 78] + /Pg 5155 0 R +>> +endobj + +494 0 obj +<< + /Type /StructElem + /S /Lbl + /P 490 0 R + /K [495 0 R] +>> +endobj + +495 0 obj +<< + /Type /StructElem + /S /Link + /P 494 0 R + /K [75 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5150 0 R + >>] + /Pg 5155 0 R +>> +endobj + +496 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [500 0 R 497 0 R] +>> +endobj + +497 0 obj +<< + /Type /StructElem + /S /LBody + /P 496 0 R + /K [498 0 R] +>> +endobj + +498 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 497 0 R + /K [71 72 499 0 R 74] + /Pg 5155 0 R +>> +endobj + +499 0 obj +<< + /Type /StructElem + /S /Em + /P 498 0 R + /K [73] + /Pg 5155 0 R +>> +endobj + +500 0 obj +<< + /Type /StructElem + /S /Lbl + /P 496 0 R + /K [501 0 R] +>> +endobj + +501 0 obj +<< + /Type /StructElem + /S /Link + /P 500 0 R + /K [70 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5149 0 R + >>] + /Pg 5155 0 R +>> +endobj + +502 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [507 0 R 503 0 R] +>> +endobj + +503 0 obj +<< + /Type /StructElem + /S /LBody + /P 502 0 R + /K [504 0 R] +>> +endobj + +504 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 503 0 R + /K [63 64 506 0 R 67 505 0 R 69] + /Pg 5155 0 R +>> +endobj + +505 0 obj +<< + /Type /StructElem + /S /Link + /P 504 0 R + /K [68 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5148 0 R + >>] + /Pg 5155 0 R +>> +endobj + +506 0 obj +<< + /Type /StructElem + /S /Em + /P 504 0 R + /K [65 66] + /Pg 5155 0 R +>> +endobj + +507 0 obj +<< + /Type /StructElem + /S /Lbl + /P 502 0 R + /K [508 0 R] +>> +endobj + +508 0 obj +<< + /Type /StructElem + /S /Link + /P 507 0 R + /K [62 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5147 0 R + >>] + /Pg 5155 0 R +>> +endobj + +509 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [514 0 R 510 0 R] +>> +endobj + +510 0 obj +<< + /Type /StructElem + /S /LBody + /P 509 0 R + /K [511 0 R] +>> +endobj + +511 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 510 0 R + /K [55 56 513 0 R 59 512 0 R 61] + /Pg 5155 0 R +>> +endobj + +512 0 obj +<< + /Type /StructElem + /S /Link + /P 511 0 R + /K [60 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5146 0 R + >>] + /Pg 5155 0 R +>> +endobj + +513 0 obj +<< + /Type /StructElem + /S /Em + /P 511 0 R + /K [57 58] + /Pg 5155 0 R +>> +endobj + +514 0 obj +<< + /Type /StructElem + /S /Lbl + /P 509 0 R + /K [515 0 R] +>> +endobj + +515 0 obj +<< + /Type /StructElem + /S /Link + /P 514 0 R + /K [54 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5145 0 R + >>] + /Pg 5155 0 R +>> +endobj + +516 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [521 0 R 517 0 R] +>> +endobj + +517 0 obj +<< + /Type /StructElem + /S /LBody + /P 516 0 R + /K [518 0 R] +>> +endobj + +518 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 517 0 R + /K [46 47 48 520 0 R 50 51 519 0 R 53] + /Pg 5155 0 R +>> +endobj + +519 0 obj +<< + /Type /StructElem + /S /Link + /P 518 0 R + /K [52 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5144 0 R + >>] + /Pg 5155 0 R +>> +endobj + +520 0 obj +<< + /Type /StructElem + /S /Em + /P 518 0 R + /K [49] + /Pg 5155 0 R +>> +endobj + +521 0 obj +<< + /Type /StructElem + /S /Lbl + /P 516 0 R + /K [522 0 R] +>> +endobj + +522 0 obj +<< + /Type /StructElem + /S /Link + /P 521 0 R + /K [45 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5143 0 R + >>] + /Pg 5155 0 R +>> +endobj + +523 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [527 0 R 524 0 R] +>> +endobj + +524 0 obj +<< + /Type /StructElem + /S /LBody + /P 523 0 R + /K [525 0 R] +>> +endobj + +525 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 524 0 R + /K [42 526 0 R 44] + /Pg 5155 0 R +>> +endobj + +526 0 obj +<< + /Type /StructElem + /S /Em + /P 525 0 R + /K [43] + /Pg 5155 0 R +>> +endobj + +527 0 obj +<< + /Type /StructElem + /S /Lbl + /P 523 0 R + /K [528 0 R] +>> +endobj + +528 0 obj +<< + /Type /StructElem + /S /Link + /P 527 0 R + /K [41 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5142 0 R + >>] + /Pg 5155 0 R +>> +endobj + +529 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [533 0 R 530 0 R] +>> +endobj + +530 0 obj +<< + /Type /StructElem + /S /LBody + /P 529 0 R + /K [531 0 R] +>> +endobj + +531 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 530 0 R + /K [39 532 0 R] + /Pg 5155 0 R +>> +endobj + +532 0 obj +<< + /Type /StructElem + /S /Link + /P 531 0 R + /K [40 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5141 0 R + >>] + /Pg 5155 0 R +>> +endobj + +533 0 obj +<< + /Type /StructElem + /S /Lbl + /P 529 0 R + /K [534 0 R] +>> +endobj + +534 0 obj +<< + /Type /StructElem + /S /Link + /P 533 0 R + /K [38 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5140 0 R + >>] + /Pg 5155 0 R +>> +endobj + +535 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [539 0 R 536 0 R] +>> +endobj + +536 0 obj +<< + /Type /StructElem + /S /LBody + /P 535 0 R + /K [537 0 R] +>> +endobj + +537 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 536 0 R + /K [35 538 0 R] + /Pg 5155 0 R +>> +endobj + +538 0 obj +<< + /Type /StructElem + /S /Link + /P 537 0 R + /K [36 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5138 0 R + >> 37 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5139 0 R + >>] + /Pg 5155 0 R +>> +endobj + +539 0 obj +<< + /Type /StructElem + /S /Lbl + /P 535 0 R + /K [540 0 R] +>> +endobj + +540 0 obj +<< + /Type /StructElem + /S /Link + /P 539 0 R + /K [34 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5137 0 R + >>] + /Pg 5155 0 R +>> +endobj + +541 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [545 0 R 542 0 R] +>> +endobj + +542 0 obj +<< + /Type /StructElem + /S /LBody + /P 541 0 R + /K [543 0 R] +>> +endobj + +543 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 542 0 R + /K [28 544 0 R 32 33] + /Pg 5155 0 R +>> +endobj + +544 0 obj +<< + /Type /StructElem + /S /Em + /P 543 0 R + /K [29 30 31] + /Pg 5155 0 R +>> +endobj + +545 0 obj +<< + /Type /StructElem + /S /Lbl + /P 541 0 R + /K [546 0 R] +>> +endobj + +546 0 obj +<< + /Type /StructElem + /S /Link + /P 545 0 R + /K [27 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5136 0 R + >>] + /Pg 5155 0 R +>> +endobj + +547 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [552 0 R 548 0 R] +>> +endobj + +548 0 obj +<< + /Type /StructElem + /S /LBody + /P 547 0 R + /K [549 0 R] +>> +endobj + +549 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 548 0 R + /K [19 20 551 0 R 23 24 550 0 R 26] + /Pg 5155 0 R +>> +endobj + +550 0 obj +<< + /Type /StructElem + /S /Link + /P 549 0 R + /K [25 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5135 0 R + >>] + /Pg 5155 0 R +>> +endobj + +551 0 obj +<< + /Type /StructElem + /S /Em + /P 549 0 R + /K [21 22] + /Pg 5155 0 R +>> +endobj + +552 0 obj +<< + /Type /StructElem + /S /Lbl + /P 547 0 R + /K [553 0 R] +>> +endobj + +553 0 obj +<< + /Type /StructElem + /S /Link + /P 552 0 R + /K [18 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5134 0 R + >>] + /Pg 5155 0 R +>> +endobj + +554 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [558 0 R 555 0 R] +>> +endobj + +555 0 obj +<< + /Type /StructElem + /S /LBody + /P 554 0 R + /K [556 0 R] +>> +endobj + +556 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 555 0 R + /K [14 15 16 557 0 R] + /Pg 5155 0 R +>> +endobj + +557 0 obj +<< + /Type /StructElem + /S /Link + /P 556 0 R + /K [17 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5133 0 R + >>] + /Pg 5155 0 R +>> +endobj + +558 0 obj +<< + /Type /StructElem + /S /Lbl + /P 554 0 R + /K [559 0 R] +>> +endobj + +559 0 obj +<< + /Type /StructElem + /S /Link + /P 558 0 R + /K [13 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5132 0 R + >>] + /Pg 5155 0 R +>> +endobj + +560 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [564 0 R 561 0 R] +>> +endobj + +561 0 obj +<< + /Type /StructElem + /S /LBody + /P 560 0 R + /K [562 0 R] +>> +endobj + +562 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 561 0 R + /K [8 563 0 R 12] + /Pg 5155 0 R +>> +endobj + +563 0 obj +<< + /Type /StructElem + /S /Em + /P 562 0 R + /K [9 10 11] + /Pg 5155 0 R +>> +endobj + +564 0 obj +<< + /Type /StructElem + /S /Lbl + /P 560 0 R + /K [565 0 R] +>> +endobj + +565 0 obj +<< + /Type /StructElem + /S /Link + /P 564 0 R + /K [7 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5131 0 R + >>] + /Pg 5155 0 R +>> +endobj + +566 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [571 0 R 567 0 R] +>> +endobj + +567 0 obj +<< + /Type /StructElem + /S /LBody + /P 566 0 R + /K [568 0 R] +>> +endobj + +568 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 567 0 R + /K [1 570 0 R 4 569 0 R 6] + /Pg 5155 0 R +>> +endobj + +569 0 obj +<< + /Type /StructElem + /S /Link + /P 568 0 R + /K [5 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5130 0 R + >>] + /Pg 5155 0 R +>> +endobj + +570 0 obj +<< + /Type /StructElem + /S /Em + /P 568 0 R + /K [2 3] + /Pg 5155 0 R +>> +endobj + +571 0 obj +<< + /Type /StructElem + /S /Lbl + /P 566 0 R + /K [572 0 R] +>> +endobj + +572 0 obj +<< + /Type /StructElem + /S /Link + /P 571 0 R + /K [0 << + /Type /OBJR + /Pg 5155 0 R + /Obj 5129 0 R + >>] + /Pg 5155 0 R +>> +endobj + +573 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [578 0 R 574 0 R] +>> +endobj + +574 0 obj +<< + /Type /StructElem + /S /LBody + /P 573 0 R + /K [575 0 R] +>> +endobj + +575 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 574 0 R + /K [105 577 0 R 108 576 0 R 110] + /Pg 5127 0 R +>> +endobj + +576 0 obj +<< + /Type /StructElem + /S /Link + /P 575 0 R + /K [109 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5126 0 R + >>] + /Pg 5127 0 R +>> +endobj + +577 0 obj +<< + /Type /StructElem + /S /Em + /P 575 0 R + /K [106 107] + /Pg 5127 0 R +>> +endobj + +578 0 obj +<< + /Type /StructElem + /S /Lbl + /P 573 0 R + /K [579 0 R] +>> +endobj + +579 0 obj +<< + /Type /StructElem + /S /Link + /P 578 0 R + /K [104 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5125 0 R + >>] + /Pg 5127 0 R +>> +endobj + +580 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [585 0 R 581 0 R] +>> +endobj + +581 0 obj +<< + /Type /StructElem + /S /LBody + /P 580 0 R + /K [582 0 R] +>> +endobj + +582 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 581 0 R + /K [98 584 0 R 100 101 583 0 R 103] + /Pg 5127 0 R +>> +endobj + +583 0 obj +<< + /Type /StructElem + /S /Link + /P 582 0 R + /K [102 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5124 0 R + >>] + /Pg 5127 0 R +>> +endobj + +584 0 obj +<< + /Type /StructElem + /S /Em + /P 582 0 R + /K [99] + /Pg 5127 0 R +>> +endobj + +585 0 obj +<< + /Type /StructElem + /S /Lbl + /P 580 0 R + /K [586 0 R] +>> +endobj + +586 0 obj +<< + /Type /StructElem + /S /Link + /P 585 0 R + /K [97 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5123 0 R + >>] + /Pg 5127 0 R +>> +endobj + +587 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [592 0 R 588 0 R] +>> +endobj + +588 0 obj +<< + /Type /StructElem + /S /LBody + /P 587 0 R + /K [589 0 R] +>> +endobj + +589 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 588 0 R + /K [90 591 0 R 93 94 590 0 R 96] + /Pg 5127 0 R +>> +endobj + +590 0 obj +<< + /Type /StructElem + /S /Link + /P 589 0 R + /K [95 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5122 0 R + >>] + /Pg 5127 0 R +>> +endobj + +591 0 obj +<< + /Type /StructElem + /S /Em + /P 589 0 R + /K [91 92] + /Pg 5127 0 R +>> +endobj + +592 0 obj +<< + /Type /StructElem + /S /Lbl + /P 587 0 R + /K [593 0 R] +>> +endobj + +593 0 obj +<< + /Type /StructElem + /S /Link + /P 592 0 R + /K [89 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5121 0 R + >>] + /Pg 5127 0 R +>> +endobj + +594 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [599 0 R 595 0 R] +>> +endobj + +595 0 obj +<< + /Type /StructElem + /S /LBody + /P 594 0 R + /K [596 0 R] +>> +endobj + +596 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 595 0 R + /K [83 84 598 0 R 86 597 0 R 88] + /Pg 5127 0 R +>> +endobj + +597 0 obj +<< + /Type /StructElem + /S /Link + /P 596 0 R + /K [87 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5120 0 R + >>] + /Pg 5127 0 R +>> +endobj + +598 0 obj +<< + /Type /StructElem + /S /Em + /P 596 0 R + /K [85] + /Pg 5127 0 R +>> +endobj + +599 0 obj +<< + /Type /StructElem + /S /Lbl + /P 594 0 R + /K [600 0 R] +>> +endobj + +600 0 obj +<< + /Type /StructElem + /S /Link + /P 599 0 R + /K [82 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5119 0 R + >>] + /Pg 5127 0 R +>> +endobj + +601 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [606 0 R 602 0 R] +>> +endobj + +602 0 obj +<< + /Type /StructElem + /S /LBody + /P 601 0 R + /K [603 0 R] +>> +endobj + +603 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 602 0 R + /K [75 76 605 0 R 79 604 0 R 81] + /Pg 5127 0 R +>> +endobj + +604 0 obj +<< + /Type /StructElem + /S /Link + /P 603 0 R + /K [80 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5118 0 R + >>] + /Pg 5127 0 R +>> +endobj + +605 0 obj +<< + /Type /StructElem + /S /Em + /P 603 0 R + /K [77 78] + /Pg 5127 0 R +>> +endobj + +606 0 obj +<< + /Type /StructElem + /S /Lbl + /P 601 0 R + /K [607 0 R] +>> +endobj + +607 0 obj +<< + /Type /StructElem + /S /Link + /P 606 0 R + /K [74 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5117 0 R + >>] + /Pg 5127 0 R +>> +endobj + +608 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [613 0 R 609 0 R] +>> +endobj + +609 0 obj +<< + /Type /StructElem + /S /LBody + /P 608 0 R + /K [610 0 R] +>> +endobj + +610 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 609 0 R + /K [67 612 0 R 71 611 0 R 73] + /Pg 5127 0 R +>> +endobj + +611 0 obj +<< + /Type /StructElem + /S /Link + /P 610 0 R + /K [72 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5116 0 R + >>] + /Pg 5127 0 R +>> +endobj + +612 0 obj +<< + /Type /StructElem + /S /Em + /P 610 0 R + /K [68 69 70] + /Pg 5127 0 R +>> +endobj + +613 0 obj +<< + /Type /StructElem + /S /Lbl + /P 608 0 R + /K [614 0 R] +>> +endobj + +614 0 obj +<< + /Type /StructElem + /S /Link + /P 613 0 R + /K [66 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5115 0 R + >>] + /Pg 5127 0 R +>> +endobj + +615 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [620 0 R 616 0 R] +>> +endobj + +616 0 obj +<< + /Type /StructElem + /S /LBody + /P 615 0 R + /K [617 0 R] +>> +endobj + +617 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 616 0 R + /K [58 59 619 0 R 62 63 618 0 R 65] + /Pg 5127 0 R +>> +endobj + +618 0 obj +<< + /Type /StructElem + /S /Link + /P 617 0 R + /K [64 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5114 0 R + >>] + /Pg 5127 0 R +>> +endobj + +619 0 obj +<< + /Type /StructElem + /S /Em + /P 617 0 R + /K [60 61] + /Pg 5127 0 R +>> +endobj + +620 0 obj +<< + /Type /StructElem + /S /Lbl + /P 615 0 R + /K [621 0 R] +>> +endobj + +621 0 obj +<< + /Type /StructElem + /S /Link + /P 620 0 R + /K [57 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5113 0 R + >>] + /Pg 5127 0 R +>> +endobj + +622 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [628 0 R 623 0 R] +>> +endobj + +623 0 obj +<< + /Type /StructElem + /S /LBody + /P 622 0 R + /K [624 0 R] +>> +endobj + +624 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 623 0 R + /K [49 627 0 R 51 626 0 R 54 625 0 R 56] + /Pg 5127 0 R +>> +endobj + +625 0 obj +<< + /Type /StructElem + /S /Link + /P 624 0 R + /K [55 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5112 0 R + >>] + /Pg 5127 0 R +>> +endobj + +626 0 obj +<< + /Type /StructElem + /S /Em + /P 624 0 R + /K [52 53] + /Pg 5127 0 R +>> +endobj + +627 0 obj +<< + /Type /StructElem + /S /Em + /P 624 0 R + /K [50] + /Pg 5127 0 R +>> +endobj + +628 0 obj +<< + /Type /StructElem + /S /Lbl + /P 622 0 R + /K [629 0 R] +>> +endobj + +629 0 obj +<< + /Type /StructElem + /S /Link + /P 628 0 R + /K [48 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5111 0 R + >>] + /Pg 5127 0 R +>> +endobj + +630 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [635 0 R 631 0 R] +>> +endobj + +631 0 obj +<< + /Type /StructElem + /S /LBody + /P 630 0 R + /K [632 0 R] +>> +endobj + +632 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 631 0 R + /K [42 634 0 R 45 633 0 R 47] + /Pg 5127 0 R +>> +endobj + +633 0 obj +<< + /Type /StructElem + /S /Link + /P 632 0 R + /K [46 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5110 0 R + >>] + /Pg 5127 0 R +>> +endobj + +634 0 obj +<< + /Type /StructElem + /S /Em + /P 632 0 R + /K [43 44] + /Pg 5127 0 R +>> +endobj + +635 0 obj +<< + /Type /StructElem + /S /Lbl + /P 630 0 R + /K [636 0 R] +>> +endobj + +636 0 obj +<< + /Type /StructElem + /S /Link + /P 635 0 R + /K [41 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5109 0 R + >>] + /Pg 5127 0 R +>> +endobj + +637 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [642 0 R 638 0 R] +>> +endobj + +638 0 obj +<< + /Type /StructElem + /S /LBody + /P 637 0 R + /K [639 0 R] +>> +endobj + +639 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 638 0 R + /K [34 641 0 R 37 38 640 0 R 40] + /Pg 5127 0 R +>> +endobj + +640 0 obj +<< + /Type /StructElem + /S /Link + /P 639 0 R + /K [39 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5108 0 R + >>] + /Pg 5127 0 R +>> +endobj + +641 0 obj +<< + /Type /StructElem + /S /Em + /P 639 0 R + /K [35 36] + /Pg 5127 0 R +>> +endobj + +642 0 obj +<< + /Type /StructElem + /S /Lbl + /P 637 0 R + /K [643 0 R] +>> +endobj + +643 0 obj +<< + /Type /StructElem + /S /Link + /P 642 0 R + /K [33 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5107 0 R + >>] + /Pg 5127 0 R +>> +endobj + +644 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [649 0 R 645 0 R] +>> +endobj + +645 0 obj +<< + /Type /StructElem + /S /LBody + /P 644 0 R + /K [646 0 R] +>> +endobj + +646 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 645 0 R + /K [25 648 0 R 29 647 0 R 32] + /Pg 5127 0 R +>> +endobj + +647 0 obj +<< + /Type /StructElem + /S /Link + /P 646 0 R + /K [30 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5105 0 R + >> 31 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5106 0 R + >>] + /Pg 5127 0 R +>> +endobj + +648 0 obj +<< + /Type /StructElem + /S /Em + /P 646 0 R + /K [26 27 28] + /Pg 5127 0 R +>> +endobj + +649 0 obj +<< + /Type /StructElem + /S /Lbl + /P 644 0 R + /K [650 0 R] +>> +endobj + +650 0 obj +<< + /Type /StructElem + /S /Link + /P 649 0 R + /K [24 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5104 0 R + >>] + /Pg 5127 0 R +>> +endobj + +651 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [656 0 R 652 0 R] +>> +endobj + +652 0 obj +<< + /Type /StructElem + /S /LBody + /P 651 0 R + /K [653 0 R] +>> +endobj + +653 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 652 0 R + /K [18 655 0 R 20 654 0 R 23] + /Pg 5127 0 R +>> +endobj + +654 0 obj +<< + /Type /StructElem + /S /Link + /P 653 0 R + /K [21 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5102 0 R + >> 22 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5103 0 R + >>] + /Pg 5127 0 R +>> +endobj + +655 0 obj +<< + /Type /StructElem + /S /Em + /P 653 0 R + /K [19] + /Pg 5127 0 R +>> +endobj + +656 0 obj +<< + /Type /StructElem + /S /Lbl + /P 651 0 R + /K [657 0 R] +>> +endobj + +657 0 obj +<< + /Type /StructElem + /S /Link + /P 656 0 R + /K [17 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5101 0 R + >>] + /Pg 5127 0 R +>> +endobj + +658 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [663 0 R 659 0 R] +>> +endobj + +659 0 obj +<< + /Type /StructElem + /S /LBody + /P 658 0 R + /K [660 0 R] +>> +endobj + +660 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 659 0 R + /K [10 662 0 R 13 14 661 0 R 16] + /Pg 5127 0 R +>> +endobj + +661 0 obj +<< + /Type /StructElem + /S /Link + /P 660 0 R + /K [15 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5100 0 R + >>] + /Pg 5127 0 R +>> +endobj + +662 0 obj +<< + /Type /StructElem + /S /Em + /P 660 0 R + /K [11 12] + /Pg 5127 0 R +>> +endobj + +663 0 obj +<< + /Type /StructElem + /S /Lbl + /P 658 0 R + /K [664 0 R] +>> +endobj + +664 0 obj +<< + /Type /StructElem + /S /Link + /P 663 0 R + /K [9 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5099 0 R + >>] + /Pg 5127 0 R +>> +endobj + +665 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [670 0 R 666 0 R] +>> +endobj + +666 0 obj +<< + /Type /StructElem + /S /LBody + /P 665 0 R + /K [667 0 R] +>> +endobj + +667 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 666 0 R + /K [1 669 0 R 4 5 6 668 0 R 8] + /Pg 5127 0 R +>> +endobj + +668 0 obj +<< + /Type /StructElem + /S /Link + /P 667 0 R + /K [7 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5098 0 R + >>] + /Pg 5127 0 R +>> +endobj + +669 0 obj +<< + /Type /StructElem + /S /Em + /P 667 0 R + /K [2 3] + /Pg 5127 0 R +>> +endobj + +670 0 obj +<< + /Type /StructElem + /S /Lbl + /P 665 0 R + /K [671 0 R] +>> +endobj + +671 0 obj +<< + /Type /StructElem + /S /Link + /P 670 0 R + /K [0 << + /Type /OBJR + /Pg 5127 0 R + /Obj 5097 0 R + >>] + /Pg 5127 0 R +>> +endobj + +672 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [676 0 R 673 0 R] +>> +endobj + +673 0 obj +<< + /Type /StructElem + /S /LBody + /P 672 0 R + /K [674 0 R] +>> +endobj + +674 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 673 0 R + /K [107 675 0 R 109 110] + /Pg 5095 0 R +>> +endobj + +675 0 obj +<< + /Type /StructElem + /S /Em + /P 674 0 R + /K [108] + /Pg 5095 0 R +>> +endobj + +676 0 obj +<< + /Type /StructElem + /S /Lbl + /P 672 0 R + /K [677 0 R] +>> +endobj + +677 0 obj +<< + /Type /StructElem + /S /Link + /P 676 0 R + /K [106 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5094 0 R + >>] + /Pg 5095 0 R +>> +endobj + +678 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [683 0 R 679 0 R] +>> +endobj + +679 0 obj +<< + /Type /StructElem + /S /LBody + /P 678 0 R + /K [680 0 R] +>> +endobj + +680 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 679 0 R + /K [98 682 0 R 101 102 103 681 0 R 105] + /Pg 5095 0 R +>> +endobj + +681 0 obj +<< + /Type /StructElem + /S /Link + /P 680 0 R + /K [104 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5093 0 R + >>] + /Pg 5095 0 R +>> +endobj + +682 0 obj +<< + /Type /StructElem + /S /Em + /P 680 0 R + /K [99 100] + /Pg 5095 0 R +>> +endobj + +683 0 obj +<< + /Type /StructElem + /S /Lbl + /P 678 0 R + /K [684 0 R] +>> +endobj + +684 0 obj +<< + /Type /StructElem + /S /Link + /P 683 0 R + /K [97 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5092 0 R + >>] + /Pg 5095 0 R +>> +endobj + +685 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [689 0 R 686 0 R] +>> +endobj + +686 0 obj +<< + /Type /StructElem + /S /LBody + /P 685 0 R + /K [687 0 R] +>> +endobj + +687 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 686 0 R + /K [94 688 0 R 96] + /Pg 5095 0 R +>> +endobj + +688 0 obj +<< + /Type /StructElem + /S /Em + /P 687 0 R + /K [95] + /Pg 5095 0 R +>> +endobj + +689 0 obj +<< + /Type /StructElem + /S /Lbl + /P 685 0 R + /K [690 0 R] +>> +endobj + +690 0 obj +<< + /Type /StructElem + /S /Link + /P 689 0 R + /K [93 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5091 0 R + >>] + /Pg 5095 0 R +>> +endobj + +691 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [696 0 R 692 0 R] +>> +endobj + +692 0 obj +<< + /Type /StructElem + /S /LBody + /P 691 0 R + /K [693 0 R] +>> +endobj + +693 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 692 0 R + /K [87 695 0 R 89 90 694 0 R 92] + /Pg 5095 0 R +>> +endobj + +694 0 obj +<< + /Type /StructElem + /S /Link + /P 693 0 R + /K [91 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5090 0 R + >>] + /Pg 5095 0 R +>> +endobj + +695 0 obj +<< + /Type /StructElem + /S /Em + /P 693 0 R + /K [88] + /Pg 5095 0 R +>> +endobj + +696 0 obj +<< + /Type /StructElem + /S /Lbl + /P 691 0 R + /K [697 0 R] +>> +endobj + +697 0 obj +<< + /Type /StructElem + /S /Link + /P 696 0 R + /K [86 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5089 0 R + >>] + /Pg 5095 0 R +>> +endobj + +698 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [703 0 R 699 0 R] +>> +endobj + +699 0 obj +<< + /Type /StructElem + /S /LBody + /P 698 0 R + /K [700 0 R] +>> +endobj + +700 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 699 0 R + /K [77 78 702 0 R 81 82 83 701 0 R 85] + /Pg 5095 0 R +>> +endobj + +701 0 obj +<< + /Type /StructElem + /S /Link + /P 700 0 R + /K [84 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5088 0 R + >>] + /Pg 5095 0 R +>> +endobj + +702 0 obj +<< + /Type /StructElem + /S /Em + /P 700 0 R + /K [79 80] + /Pg 5095 0 R +>> +endobj + +703 0 obj +<< + /Type /StructElem + /S /Lbl + /P 698 0 R + /K [704 0 R] +>> +endobj + +704 0 obj +<< + /Type /StructElem + /S /Link + /P 703 0 R + /K [76 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5087 0 R + >>] + /Pg 5095 0 R +>> +endobj + +705 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [710 0 R 706 0 R] +>> +endobj + +706 0 obj +<< + /Type /StructElem + /S /LBody + /P 705 0 R + /K [707 0 R] +>> +endobj + +707 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 706 0 R + /K [68 69 709 0 R 72 73 708 0 R 75] + /Pg 5095 0 R +>> +endobj + +708 0 obj +<< + /Type /StructElem + /S /Link + /P 707 0 R + /K [74 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5086 0 R + >>] + /Pg 5095 0 R +>> +endobj + +709 0 obj +<< + /Type /StructElem + /S /Em + /P 707 0 R + /K [70 71] + /Pg 5095 0 R +>> +endobj + +710 0 obj +<< + /Type /StructElem + /S /Lbl + /P 705 0 R + /K [711 0 R] +>> +endobj + +711 0 obj +<< + /Type /StructElem + /S /Link + /P 710 0 R + /K [67 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5085 0 R + >>] + /Pg 5095 0 R +>> +endobj + +712 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [716 0 R 713 0 R] +>> +endobj + +713 0 obj +<< + /Type /StructElem + /S /LBody + /P 712 0 R + /K [714 0 R] +>> +endobj + +714 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 713 0 R + /K [62 715 0 R 65 66] + /Pg 5095 0 R +>> +endobj + +715 0 obj +<< + /Type /StructElem + /S /Em + /P 714 0 R + /K [63 64] + /Pg 5095 0 R +>> +endobj + +716 0 obj +<< + /Type /StructElem + /S /Lbl + /P 712 0 R + /K [717 0 R] +>> +endobj + +717 0 obj +<< + /Type /StructElem + /S /Link + /P 716 0 R + /K [61 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5084 0 R + >>] + /Pg 5095 0 R +>> +endobj + +718 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [723 0 R 719 0 R] +>> +endobj + +719 0 obj +<< + /Type /StructElem + /S /LBody + /P 718 0 R + /K [720 0 R] +>> +endobj + +720 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 719 0 R + /K [55 722 0 R 57 58 721 0 R 60] + /Pg 5095 0 R +>> +endobj + +721 0 obj +<< + /Type /StructElem + /S /Link + /P 720 0 R + /K [59 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5083 0 R + >>] + /Pg 5095 0 R +>> +endobj + +722 0 obj +<< + /Type /StructElem + /S /Em + /P 720 0 R + /K [56] + /Pg 5095 0 R +>> +endobj + +723 0 obj +<< + /Type /StructElem + /S /Lbl + /P 718 0 R + /K [724 0 R] +>> +endobj + +724 0 obj +<< + /Type /StructElem + /S /Link + /P 723 0 R + /K [54 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5082 0 R + >>] + /Pg 5095 0 R +>> +endobj + +725 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [728 0 R 726 0 R] +>> +endobj + +726 0 obj +<< + /Type /StructElem + /S /LBody + /P 725 0 R + /K [727 0 R] +>> +endobj + +727 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 726 0 R + /K [52 53] + /Pg 5095 0 R +>> +endobj + +728 0 obj +<< + /Type /StructElem + /S /Lbl + /P 725 0 R + /K [729 0 R] +>> +endobj + +729 0 obj +<< + /Type /StructElem + /S /Link + /P 728 0 R + /K [51 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5081 0 R + >>] + /Pg 5095 0 R +>> +endobj + +730 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [734 0 R 731 0 R] +>> +endobj + +731 0 obj +<< + /Type /StructElem + /S /LBody + /P 730 0 R + /K [732 0 R] +>> +endobj + +732 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 731 0 R + /K [46 47 733 0 R 49 50] + /Pg 5095 0 R +>> +endobj + +733 0 obj +<< + /Type /StructElem + /S /Em + /P 732 0 R + /K [48] + /Pg 5095 0 R +>> +endobj + +734 0 obj +<< + /Type /StructElem + /S /Lbl + /P 730 0 R + /K [735 0 R] +>> +endobj + +735 0 obj +<< + /Type /StructElem + /S /Link + /P 734 0 R + /K [45 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5080 0 R + >>] + /Pg 5095 0 R +>> +endobj + +736 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [742 0 R 737 0 R] +>> +endobj + +737 0 obj +<< + /Type /StructElem + /S /LBody + /P 736 0 R + /K [738 0 R] +>> +endobj + +738 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 737 0 R + /K [36 741 0 R 38 39 740 0 R 42 739 0 R 44] + /Pg 5095 0 R +>> +endobj + +739 0 obj +<< + /Type /StructElem + /S /Link + /P 738 0 R + /K [43 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5079 0 R + >>] + /Pg 5095 0 R +>> +endobj + +740 0 obj +<< + /Type /StructElem + /S /Em + /P 738 0 R + /K [40 41] + /Pg 5095 0 R +>> +endobj + +741 0 obj +<< + /Type /StructElem + /S /Em + /P 738 0 R + /K [37] + /Pg 5095 0 R +>> +endobj + +742 0 obj +<< + /Type /StructElem + /S /Lbl + /P 736 0 R + /K [743 0 R] +>> +endobj + +743 0 obj +<< + /Type /StructElem + /S /Link + /P 742 0 R + /K [35 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5078 0 R + >>] + /Pg 5095 0 R +>> +endobj + +744 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [748 0 R 745 0 R] +>> +endobj + +745 0 obj +<< + /Type /StructElem + /S /LBody + /P 744 0 R + /K [746 0 R] +>> +endobj + +746 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 745 0 R + /K [31 32 747 0 R 34] + /Pg 5095 0 R +>> +endobj + +747 0 obj +<< + /Type /StructElem + /S /Em + /P 746 0 R + /K [33] + /Pg 5095 0 R +>> +endobj + +748 0 obj +<< + /Type /StructElem + /S /Lbl + /P 744 0 R + /K [749 0 R] +>> +endobj + +749 0 obj +<< + /Type /StructElem + /S /Link + /P 748 0 R + /K [30 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5077 0 R + >>] + /Pg 5095 0 R +>> +endobj + +750 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [756 0 R 751 0 R] +>> +endobj + +751 0 obj +<< + /Type /StructElem + /S /LBody + /P 750 0 R + /K [752 0 R] +>> +endobj + +752 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 751 0 R + /K [22 755 0 R 24 754 0 R 26 27 753 0 R 29] + /Pg 5095 0 R +>> +endobj + +753 0 obj +<< + /Type /StructElem + /S /Link + /P 752 0 R + /K [28 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5076 0 R + >>] + /Pg 5095 0 R +>> +endobj + +754 0 obj +<< + /Type /StructElem + /S /Em + /P 752 0 R + /K [25] + /Pg 5095 0 R +>> +endobj + +755 0 obj +<< + /Type /StructElem + /S /Em + /P 752 0 R + /K [23] + /Pg 5095 0 R +>> +endobj + +756 0 obj +<< + /Type /StructElem + /S /Lbl + /P 750 0 R + /K [757 0 R] +>> +endobj + +757 0 obj +<< + /Type /StructElem + /S /Link + /P 756 0 R + /K [21 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5075 0 R + >>] + /Pg 5095 0 R +>> +endobj + +758 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [764 0 R 759 0 R] +>> +endobj + +759 0 obj +<< + /Type /StructElem + /S /LBody + /P 758 0 R + /K [760 0 R] +>> +endobj + +760 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 759 0 R + /K [12 763 0 R 14 762 0 R 18 761 0 R 20] + /Pg 5095 0 R +>> +endobj + +761 0 obj +<< + /Type /StructElem + /S /Link + /P 760 0 R + /K [19 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5074 0 R + >>] + /Pg 5095 0 R +>> +endobj + +762 0 obj +<< + /Type /StructElem + /S /Em + /P 760 0 R + /K [15 16 17] + /Pg 5095 0 R +>> +endobj + +763 0 obj +<< + /Type /StructElem + /S /Em + /P 760 0 R + /K [13] + /Pg 5095 0 R +>> +endobj + +764 0 obj +<< + /Type /StructElem + /S /Lbl + /P 758 0 R + /K [765 0 R] +>> +endobj + +765 0 obj +<< + /Type /StructElem + /S /Link + /P 764 0 R + /K [11 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5073 0 R + >>] + /Pg 5095 0 R +>> +endobj + +766 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [770 0 R 767 0 R] +>> +endobj + +767 0 obj +<< + /Type /StructElem + /S /LBody + /P 766 0 R + /K [768 0 R] +>> +endobj + +768 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 767 0 R + /K [6 7 8 769 0 R] + /Pg 5095 0 R +>> +endobj + +769 0 obj +<< + /Type /StructElem + /S /Link + /P 768 0 R + /K [9 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5071 0 R + >> 10 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5072 0 R + >>] + /Pg 5095 0 R +>> +endobj + +770 0 obj +<< + /Type /StructElem + /S /Lbl + /P 766 0 R + /K [771 0 R] +>> +endobj + +771 0 obj +<< + /Type /StructElem + /S /Link + /P 770 0 R + /K [5 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5070 0 R + >>] + /Pg 5095 0 R +>> +endobj + +772 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [776 0 R 773 0 R] +>> +endobj + +773 0 obj +<< + /Type /StructElem + /S /LBody + /P 772 0 R + /K [774 0 R] +>> +endobj + +774 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 773 0 R + /K [1 2 3 775 0 R] + /Pg 5095 0 R +>> +endobj + +775 0 obj +<< + /Type /StructElem + /S /Link + /P 774 0 R + /K [4 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5069 0 R + >>] + /Pg 5095 0 R +>> +endobj + +776 0 obj +<< + /Type /StructElem + /S /Lbl + /P 772 0 R + /K [777 0 R] +>> +endobj + +777 0 obj +<< + /Type /StructElem + /S /Link + /P 776 0 R + /K [0 << + /Type /OBJR + /Pg 5095 0 R + /Obj 5068 0 R + >>] + /Pg 5095 0 R +>> +endobj + +778 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [782 0 R 779 0 R] +>> +endobj + +779 0 obj +<< + /Type /StructElem + /S /LBody + /P 778 0 R + /K [780 0 R] +>> +endobj + +780 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 779 0 R + /K [76 781 0 R 78 79] + /Pg 5066 0 R +>> +endobj + +781 0 obj +<< + /Type /StructElem + /S /Em + /P 780 0 R + /K [77] + /Pg 5066 0 R +>> +endobj + +782 0 obj +<< + /Type /StructElem + /S /Lbl + /P 778 0 R + /K [783 0 R] +>> +endobj + +783 0 obj +<< + /Type /StructElem + /S /Link + /P 782 0 R + /K [75 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5065 0 R + >>] + /Pg 5066 0 R +>> +endobj + +784 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [789 0 R 785 0 R] +>> +endobj + +785 0 obj +<< + /Type /StructElem + /S /LBody + /P 784 0 R + /K [786 0 R] +>> +endobj + +786 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 785 0 R + /K [67 68 788 0 R 71 72 787 0 R 74] + /Pg 5066 0 R +>> +endobj + +787 0 obj +<< + /Type /StructElem + /S /Link + /P 786 0 R + /K [73 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5064 0 R + >>] + /Pg 5066 0 R +>> +endobj + +788 0 obj +<< + /Type /StructElem + /S /Em + /P 786 0 R + /K [69 70] + /Pg 5066 0 R +>> +endobj + +789 0 obj +<< + /Type /StructElem + /S /Lbl + /P 784 0 R + /K [790 0 R] +>> +endobj + +790 0 obj +<< + /Type /StructElem + /S /Link + /P 789 0 R + /K [66 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5063 0 R + >>] + /Pg 5066 0 R +>> +endobj + +791 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [795 0 R 792 0 R] +>> +endobj + +792 0 obj +<< + /Type /StructElem + /S /LBody + /P 791 0 R + /K [793 0 R] +>> +endobj + +793 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 792 0 R + /K [63 794 0 R 65] + /Pg 5066 0 R +>> +endobj + +794 0 obj +<< + /Type /StructElem + /S /Em + /P 793 0 R + /K [64] + /Pg 5066 0 R +>> +endobj + +795 0 obj +<< + /Type /StructElem + /S /Lbl + /P 791 0 R + /K [796 0 R] +>> +endobj + +796 0 obj +<< + /Type /StructElem + /S /Link + /P 795 0 R + /K [62 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5062 0 R + >>] + /Pg 5066 0 R +>> +endobj + +797 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [802 0 R 798 0 R] +>> +endobj + +798 0 obj +<< + /Type /StructElem + /S /LBody + /P 797 0 R + /K [799 0 R] +>> +endobj + +799 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 798 0 R + /K [55 56 57 801 0 R 59 800 0 R 61] + /Pg 5066 0 R +>> +endobj + +800 0 obj +<< + /Type /StructElem + /S /Link + /P 799 0 R + /K [60 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5061 0 R + >>] + /Pg 5066 0 R +>> +endobj + +801 0 obj +<< + /Type /StructElem + /S /Em + /P 799 0 R + /K [58] + /Pg 5066 0 R +>> +endobj + +802 0 obj +<< + /Type /StructElem + /S /Lbl + /P 797 0 R + /K [803 0 R] +>> +endobj + +803 0 obj +<< + /Type /StructElem + /S /Link + /P 802 0 R + /K [54 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5060 0 R + >>] + /Pg 5066 0 R +>> +endobj + +804 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [809 0 R 805 0 R] +>> +endobj + +805 0 obj +<< + /Type /StructElem + /S /LBody + /P 804 0 R + /K [806 0 R] +>> +endobj + +806 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 805 0 R + /K [48 808 0 R 50 51 807 0 R 53] + /Pg 5066 0 R +>> +endobj + +807 0 obj +<< + /Type /StructElem + /S /Link + /P 806 0 R + /K [52 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5059 0 R + >>] + /Pg 5066 0 R +>> +endobj + +808 0 obj +<< + /Type /StructElem + /S /Em + /P 806 0 R + /K [49] + /Pg 5066 0 R +>> +endobj + +809 0 obj +<< + /Type /StructElem + /S /Lbl + /P 804 0 R + /K [810 0 R] +>> +endobj + +810 0 obj +<< + /Type /StructElem + /S /Link + /P 809 0 R + /K [47 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5058 0 R + >>] + /Pg 5066 0 R +>> +endobj + +811 0 obj +<< + /Type /StructElem + /S /LI + /P 104 0 R + /K [816 0 R 812 0 R] +>> +endobj + +812 0 obj +<< + /Type /StructElem + /S /LBody + /P 811 0 R + /K [813 0 R] +>> +endobj + +813 0 obj +<< + /Type /StructElem + /S /BibEntry + /P 812 0 R + /K [40 815 0 R 44 814 0 R 46] + /Pg 5066 0 R +>> +endobj + +814 0 obj +<< + /Type /StructElem + /S /Link + /P 813 0 R + /K [45 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5057 0 R + >>] + /Pg 5066 0 R +>> +endobj + +815 0 obj +<< + /Type /StructElem + /S /Em + /P 813 0 R + /K [41 42 43] + /Pg 5066 0 R +>> +endobj + +816 0 obj +<< + /Type /StructElem + /S /Lbl + /P 811 0 R + /K [817 0 R] +>> +endobj + +817 0 obj +<< + /Type /StructElem + /S /Link + /P 816 0 R + /K [39 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5056 0 R + >>] + /Pg 5066 0 R +>> +endobj + +818 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (References) + /K [38] + /Pg 5066 0 R +>> +endobj + +819 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [28 29 820 0 R 31 32 33 34 35 36 37] + /Pg 5066 0 R +>> +endobj + +820 0 obj +<< + /Type /StructElem + /S /Link + /P 819 0 R + /K [30 << + /Type /OBJR + /Pg 5066 0 R + /Obj 5055 0 R + >>] + /Pg 5066 0 R +>> +endobj + +821 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [7 8 825 0 R 10 11 12 13 824 0 R 15 16 17 823 0 R 19 20 822 0 R 23 24 25 26 27] + /Pg 5066 0 R +>> +endobj + +822 0 obj +<< + /Type /StructElem + /S /Em + /P 821 0 R + /K [21 22] + /Pg 5066 0 R +>> +endobj + +823 0 obj +<< + /Type /StructElem + /S /Em + /P 821 0 R + /K [18] + /Pg 5066 0 R +>> +endobj + +824 0 obj +<< + /Type /StructElem + /S /Em + /P 821 0 R + /K [14] + /Pg 5066 0 R +>> +endobj + +825 0 obj +<< + /Type /StructElem + /S /Em + /P 821 0 R + /K [9] + /Pg 5066 0 R +>> +endobj + +826 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Conclusion) + /K [5 6] + /Pg 5066 0 R +>> +endobj + +827 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [835 0 R 118 119 834 0 R 121 122 123 124 125 833 0 R 127 832 0 R 129 130 131 831 0 R 133 134 135 136 830 0 R 138 139 829 0 R 828 0 R << + /Type /MCR + /MCID 1 + /Pg 5066 0 R + >> << + /Type /MCR + /MCID 2 + /Pg 5066 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 5066 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 5066 0 R + >>] + /Pg 5053 0 R +>> +endobj + +828 0 obj +<< + /Type /StructElem + /S /Em + /P 827 0 R + /K [0] + /Pg 5066 0 R +>> +endobj + +829 0 obj +<< + /Type /StructElem + /S /Em + /P 827 0 R + /K [140] + /Pg 5053 0 R +>> +endobj + +830 0 obj +<< + /Type /StructElem + /S /Link + /P 827 0 R + /K [137 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5052 0 R + >>] + /Pg 5053 0 R +>> +endobj + +831 0 obj +<< + /Type /StructElem + /S /Em + /P 827 0 R + /K [132] + /Pg 5053 0 R +>> +endobj + +832 0 obj +<< + /Type /StructElem + /S /Link + /P 827 0 R + /K [128 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5051 0 R + >>] + /Pg 5053 0 R +>> +endobj + +833 0 obj +<< + /Type /StructElem + /S /Link + /P 827 0 R + /K [126 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5050 0 R + >>] + /Pg 5053 0 R +>> +endobj + +834 0 obj +<< + /Type /StructElem + /S /Link + /P 827 0 R + /K [120 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5049 0 R + >>] + /Pg 5053 0 R +>> +endobj + +835 0 obj +<< + /Type /StructElem + /S /Strong + /P 827 0 R + /K [117] + /Pg 5053 0 R +>> +endobj + +836 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [846 0 R 77 78 79 845 0 R 81 844 0 R 83 84 85 86 87 88 843 0 R 90 91 92 93 842 0 R 95 841 0 R 97 98 840 0 R 100 101 102 103 839 0 R 105 106 107 108 109 110 111 838 0 R 113 114 837 0 R 116] + /Pg 5053 0 R +>> +endobj + +837 0 obj +<< + /Type /StructElem + /S /Link + /P 836 0 R + /K [115 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5048 0 R + >>] + /Pg 5053 0 R +>> +endobj + +838 0 obj +<< + /Type /StructElem + /S /Code + /P 836 0 R + /K [112] + /Pg 5053 0 R +>> +endobj + +839 0 obj +<< + /Type /StructElem + /S /Link + /P 836 0 R + /K [104 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5047 0 R + >>] + /Pg 5053 0 R +>> +endobj + +840 0 obj +<< + /Type /StructElem + /S /Link + /P 836 0 R + /K [99 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5046 0 R + >>] + /Pg 5053 0 R +>> +endobj + +841 0 obj +<< + /Type /StructElem + /S /Code + /P 836 0 R + /K [96] + /Pg 5053 0 R +>> +endobj + +842 0 obj +<< + /Type /StructElem + /S /Code + /P 836 0 R + /K [94] + /Pg 5053 0 R +>> +endobj + +843 0 obj +<< + /Type /StructElem + /S /Link + /P 836 0 R + /K [89 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5045 0 R + >>] + /Pg 5053 0 R +>> +endobj + +844 0 obj +<< + /Type /StructElem + /S /Link + /P 836 0 R + /K [82 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5044 0 R + >>] + /Pg 5053 0 R +>> +endobj + +845 0 obj +<< + /Type /StructElem + /S /Link + /P 836 0 R + /K [80 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5043 0 R + >>] + /Pg 5053 0 R +>> +endobj + +846 0 obj +<< + /Type /StructElem + /S /Strong + /P 836 0 R + /K [76] + /Pg 5053 0 R +>> +endobj + +847 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [853 0 R 51 52 53 852 0 R 55 56 57 851 0 R 59 60 61 62 850 0 R 64 849 0 R 66 67 68 69 70 71 848 0 R 73 74 75] + /Pg 5053 0 R +>> +endobj + +848 0 obj +<< + /Type /StructElem + /S /Link + /P 847 0 R + /K [72 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5042 0 R + >>] + /Pg 5053 0 R +>> +endobj + +849 0 obj +<< + /Type /StructElem + /S /Code + /P 847 0 R + /K [65] + /Pg 5053 0 R +>> +endobj + +850 0 obj +<< + /Type /StructElem + /S /Code + /P 847 0 R + /K [63] + /Pg 5053 0 R +>> +endobj + +851 0 obj +<< + /Type /StructElem + /S /Link + /P 847 0 R + /K [58 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5041 0 R + >>] + /Pg 5053 0 R +>> +endobj + +852 0 obj +<< + /Type /StructElem + /S /Link + /P 847 0 R + /K [54 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5040 0 R + >>] + /Pg 5053 0 R +>> +endobj + +853 0 obj +<< + /Type /StructElem + /S /Strong + /P 847 0 R + /K [50] + /Pg 5053 0 R +>> +endobj + +854 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [46 47 48 49] + /Pg 5053 0 R +>> +endobj + +855 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Spatial Composability) + /K [44 45] + /Pg 5053 0 R +>> +endobj + +856 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [866 0 R 1 2 3 865 0 R 5 864 0 R 7 8 9 10 863 0 R 12 13 14 15 16 862 0 R 18 861 0 R 20 21 22 23 860 0 R 25 26 27 28 859 0 R 30 31 32 858 0 R 34 35 36 857 0 R 38 39 40 41 42 43] + /Pg 5053 0 R +>> +endobj + +857 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [37 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5039 0 R + >>] + /Pg 5053 0 R +>> +endobj + +858 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [33 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5038 0 R + >>] + /Pg 5053 0 R +>> +endobj + +859 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [29 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5037 0 R + >>] + /Pg 5053 0 R +>> +endobj + +860 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [24 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5036 0 R + >>] + /Pg 5053 0 R +>> +endobj + +861 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [19 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5035 0 R + >>] + /Pg 5053 0 R +>> +endobj + +862 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [17 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5034 0 R + >>] + /Pg 5053 0 R +>> +endobj + +863 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [11 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5033 0 R + >>] + /Pg 5053 0 R +>> +endobj + +864 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [6 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5032 0 R + >>] + /Pg 5053 0 R +>> +endobj + +865 0 obj +<< + /Type /StructElem + /S /Link + /P 856 0 R + /K [4 << + /Type /OBJR + /Pg 5053 0 R + /Obj 5031 0 R + >>] + /Pg 5053 0 R +>> +endobj + +866 0 obj +<< + /Type /StructElem + /S /Strong + /P 856 0 R + /K [0] + /Pg 5053 0 R +>> +endobj + +867 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [877 0 R 81 82 83 84 876 0 R 86 87 88 89 875 0 R 91 92 93 874 0 R 95 96 873 0 R 98 99 100 101 102 872 0 R 104 105 106 871 0 R 108 109 110 111 112 870 0 R 114 869 0 R 116 117 868 0 R 119 120 121 122 123 124 125 126 127 128 129 130 131] + /Pg 5029 0 R +>> +endobj + +868 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [118 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5028 0 R + >>] + /Pg 5029 0 R +>> +endobj + +869 0 obj +<< + /Type /StructElem + /S /Code + /P 867 0 R + /K [115] + /Pg 5029 0 R +>> +endobj + +870 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [113 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5027 0 R + >>] + /Pg 5029 0 R +>> +endobj + +871 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [107 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5026 0 R + >>] + /Pg 5029 0 R +>> +endobj + +872 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [103 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5025 0 R + >>] + /Pg 5029 0 R +>> +endobj + +873 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [97 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5024 0 R + >>] + /Pg 5029 0 R +>> +endobj + +874 0 obj +<< + /Type /StructElem + /S /Code + /P 867 0 R + /K [94] + /Pg 5029 0 R +>> +endobj + +875 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [90 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5023 0 R + >>] + /Pg 5029 0 R +>> +endobj + +876 0 obj +<< + /Type /StructElem + /S /Link + /P 867 0 R + /K [85 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5022 0 R + >>] + /Pg 5029 0 R +>> +endobj + +877 0 obj +<< + /Type /StructElem + /S /Strong + /P 867 0 R + /K [80] + /Pg 5029 0 R +>> +endobj + +878 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [895 0 R 4 5 6 7 894 0 R 9 10 893 0 R 12 13 14 892 0 R 16 17 891 0 R 19 20 890 0 R 22 23 24 25 26 27 889 0 R 29 30 31 32 888 0 R 34 35 36 887 0 R 38 39 40 41 42 43 886 0 R 45 46 47 48 49 885 0 R 51 52 53 884 0 R 55 56 57 58 883 0 R 60 61 62 882 0 R 64 65 66 881 0 R 68 880 0 R 70 71 879 0 R 73 74 75 76 77 78 79] + /Pg 5029 0 R +>> +endobj + +879 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [72 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5021 0 R + >>] + /Pg 5029 0 R +>> +endobj + +880 0 obj +<< + /Type /StructElem + /S /Code + /P 878 0 R + /K [69] + /Pg 5029 0 R +>> +endobj + +881 0 obj +<< + /Type /StructElem + /S /Code + /P 878 0 R + /K [67] + /Pg 5029 0 R +>> +endobj + +882 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [63 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5020 0 R + >>] + /Pg 5029 0 R +>> +endobj + +883 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [59 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5019 0 R + >>] + /Pg 5029 0 R +>> +endobj + +884 0 obj +<< + /Type /StructElem + /S /Code + /P 878 0 R + /K [54] + /Pg 5029 0 R +>> +endobj + +885 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [50 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5018 0 R + >>] + /Pg 5029 0 R +>> +endobj + +886 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [44 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5017 0 R + >>] + /Pg 5029 0 R +>> +endobj + +887 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [37 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5016 0 R + >>] + /Pg 5029 0 R +>> +endobj + +888 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [33 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5015 0 R + >>] + /Pg 5029 0 R +>> +endobj + +889 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [28 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5014 0 R + >>] + /Pg 5029 0 R +>> +endobj + +890 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [21 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5013 0 R + >>] + /Pg 5029 0 R +>> +endobj + +891 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [18 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5012 0 R + >>] + /Pg 5029 0 R +>> +endobj + +892 0 obj +<< + /Type /StructElem + /S /Em + /P 878 0 R + /K [15] + /Pg 5029 0 R +>> +endobj + +893 0 obj +<< + /Type /StructElem + /S /Link + /P 878 0 R + /K [11 << + /Type /OBJR + /Pg 5029 0 R + /Obj 5011 0 R + >>] + /Pg 5029 0 R +>> +endobj + +894 0 obj +<< + /Type /StructElem + /S /Em + /P 878 0 R + /K [8] + /Pg 5029 0 R +>> +endobj + +895 0 obj +<< + /Type /StructElem + /S /Strong + /P 878 0 R + /K [3] + /Pg 5029 0 R +>> +endobj + +896 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [89 90 << + /Type /MCR + /MCID 0 + /Pg 5029 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 5029 0 R + >> << + /Type /MCR + /MCID 2 + /Pg 5029 0 R + >>] + /Pg 5009 0 R +>> +endobj + +897 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Temporal Composability) + /K [87 88] + /Pg 5009 0 R +>> +endobj + +898 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [909 0 R 45 46 908 0 R 48 907 0 R 50 51 906 0 R 53 905 0 R 55 904 0 R 57 903 0 R 59 60 61 62 63 64 902 0 R 67 68 69 70 71 72 901 0 R 74 75 76 77 78 900 0 R 80 899 0 R 82 83 84 85 86] + /Pg 5009 0 R +>> +endobj + +899 0 obj +<< + /Type /StructElem + /S /Link + /P 898 0 R + /K [81 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5008 0 R + >>] + /Pg 5009 0 R +>> +endobj + +900 0 obj +<< + /Type /StructElem + /S /Link + /P 898 0 R + /K [79 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5007 0 R + >>] + /Pg 5009 0 R +>> +endobj + +901 0 obj +<< + /Type /StructElem + /S /Em + /P 898 0 R + /K [73] + /Pg 5009 0 R +>> +endobj + +902 0 obj +<< + /Type /StructElem + /S /Em + /P 898 0 R + /K [65 66] + /Pg 5009 0 R +>> +endobj + +903 0 obj +<< + /Type /StructElem + /S /Em + /P 898 0 R + /K [58] + /Pg 5009 0 R +>> +endobj + +904 0 obj +<< + /Type /StructElem + /S /Em + /P 898 0 R + /K [56] + /Pg 5009 0 R +>> +endobj + +905 0 obj +<< + /Type /StructElem + /S /Em + /P 898 0 R + /K [54] + /Pg 5009 0 R +>> +endobj + +906 0 obj +<< + /Type /StructElem + /S /Em + /P 898 0 R + /K [52] + /Pg 5009 0 R +>> +endobj + +907 0 obj +<< + /Type /StructElem + /S /Link + /P 898 0 R + /K [49 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5006 0 R + >>] + /Pg 5009 0 R +>> +endobj + +908 0 obj +<< + /Type /StructElem + /S /Link + /P 898 0 R + /K [47 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5005 0 R + >>] + /Pg 5009 0 R +>> +endobj + +909 0 obj +<< + /Type /StructElem + /S /Strong + /P 898 0 R + /K [44] + /Pg 5009 0 R +>> +endobj + +910 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [917 0 R 9 10 916 0 R 12 915 0 R 14 15 914 0 R 17 18 19 20 21 22 913 0 R 24 25 26 27 28 29 30 912 0 R 33 34 911 0 R 36 37 38 39 40 41 42 43] + /Pg 5009 0 R +>> +endobj + +911 0 obj +<< + /Type /StructElem + /S /Link + /P 910 0 R + /K [35 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5004 0 R + >>] + /Pg 5009 0 R +>> +endobj + +912 0 obj +<< + /Type /StructElem + /S /Formula + /P 910 0 R + /K [31 32] + /Pg 5009 0 R +>> +endobj + +913 0 obj +<< + /Type /StructElem + /S /Link + /P 910 0 R + /K [23 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5003 0 R + >>] + /Pg 5009 0 R +>> +endobj + +914 0 obj +<< + /Type /StructElem + /S /Em + /P 910 0 R + /K [16] + /Pg 5009 0 R +>> +endobj + +915 0 obj +<< + /Type /StructElem + /S /Link + /P 910 0 R + /K [13 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5002 0 R + >>] + /Pg 5009 0 R +>> +endobj + +916 0 obj +<< + /Type /StructElem + /S /Link + /P 910 0 R + /K [11 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5001 0 R + >>] + /Pg 5009 0 R +>> +endobj + +917 0 obj +<< + /Type /StructElem + /S /Strong + /P 910 0 R + /K [8] + /Pg 5009 0 R +>> +endobj + +918 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [919 0 R 5 6 7] + /Pg 5009 0 R +>> +endobj + +919 0 obj +<< + /Type /StructElem + /S /Link + /P 918 0 R + /K [4 << + /Type /OBJR + /Pg 5009 0 R + /Obj 5000 0 R + >>] + /Pg 5009 0 R +>> +endobj + +920 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Programming Paradigms) + /K [2 3] + /Pg 5009 0 R +>> +endobj + +921 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [927 0 R 69 70 926 0 R 72 73 925 0 R 76 77 78 79 80 81 924 0 R 83 923 0 R 85 86 87 922 0 R 89 90 91 92 << + /Type /MCR + /MCID 0 + /Pg 5009 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 5009 0 R + >>] + /Pg 4998 0 R +>> +endobj + +922 0 obj +<< + /Type /StructElem + /S /Link + /P 921 0 R + /K [88 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4997 0 R + >>] + /Pg 4998 0 R +>> +endobj + +923 0 obj +<< + /Type /StructElem + /S /Link + /P 921 0 R + /K [84 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4996 0 R + >>] + /Pg 4998 0 R +>> +endobj + +924 0 obj +<< + /Type /StructElem + /S /Link + /P 921 0 R + /K [82 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4995 0 R + >>] + /Pg 4998 0 R +>> +endobj + +925 0 obj +<< + /Type /StructElem + /S /Em + /P 921 0 R + /K [74 75] + /Pg 4998 0 R +>> +endobj + +926 0 obj +<< + /Type /StructElem + /S /Link + /P 921 0 R + /K [71 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4994 0 R + >>] + /Pg 4998 0 R +>> +endobj + +927 0 obj +<< + /Type /StructElem + /S /Strong + /P 921 0 R + /K [68] + /Pg 4998 0 R +>> +endobj + +928 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [933 0 R 47 48 49 932 0 R 51 52 53 931 0 R 55 930 0 R 57 58 59 60 61 62 63 64 65 929 0 R 67] + /Pg 4998 0 R +>> +endobj + +929 0 obj +<< + /Type /StructElem + /S /Link + /P 928 0 R + /K [66 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4993 0 R + >>] + /Pg 4998 0 R +>> +endobj + +930 0 obj +<< + /Type /StructElem + /S /Em + /P 928 0 R + /K [56] + /Pg 4998 0 R +>> +endobj + +931 0 obj +<< + /Type /StructElem + /S /Em + /P 928 0 R + /K [54] + /Pg 4998 0 R +>> +endobj + +932 0 obj +<< + /Type /StructElem + /S /Link + /P 928 0 R + /K [50 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4992 0 R + >>] + /Pg 4998 0 R +>> +endobj + +933 0 obj +<< + /Type /StructElem + /S /Strong + /P 928 0 R + /K [46] + /Pg 4998 0 R +>> +endobj + +934 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [942 0 R 12 941 0 R 14 15 16 940 0 R 18 19 939 0 R 21 938 0 R 23 24 25 26 27 937 0 R 29 30 31 32 33 34 35 936 0 R 37 38 935 0 R 40 41 42 43 44 45] + /Pg 4998 0 R +>> +endobj + +935 0 obj +<< + /Type /StructElem + /S /Em + /P 934 0 R + /K [39] + /Pg 4998 0 R +>> +endobj + +936 0 obj +<< + /Type /StructElem + /S /Em + /P 934 0 R + /K [36] + /Pg 4998 0 R +>> +endobj + +937 0 obj +<< + /Type /StructElem + /S /Link + /P 934 0 R + /K [28 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4991 0 R + >>] + /Pg 4998 0 R +>> +endobj + +938 0 obj +<< + /Type /StructElem + /S /Link + /P 934 0 R + /K [22 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4990 0 R + >>] + /Pg 4998 0 R +>> +endobj + +939 0 obj +<< + /Type /StructElem + /S /Link + /P 934 0 R + /K [20 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4989 0 R + >>] + /Pg 4998 0 R +>> +endobj + +940 0 obj +<< + /Type /StructElem + /S /Em + /P 934 0 R + /K [17] + /Pg 4998 0 R +>> +endobj + +941 0 obj +<< + /Type /StructElem + /S /Link + /P 934 0 R + /K [13 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4988 0 R + >>] + /Pg 4998 0 R +>> +endobj + +942 0 obj +<< + /Type /StructElem + /S /Strong + /P 934 0 R + /K [11] + /Pg 4998 0 R +>> +endobj + +943 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [944 0 R 7 8 9 10] + /Pg 4998 0 R +>> +endobj + +944 0 obj +<< + /Type /StructElem + /S /Link + /P 943 0 R + /K [6 << + /Type /OBJR + /Pg 4998 0 R + /Obj 4987 0 R + >>] + /Pg 4998 0 R +>> +endobj + +945 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Effect and Coeffect Systems) + /K [4 5] + /Pg 4998 0 R +>> +endobj + +946 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2 3] + /Pg 4998 0 R +>> +endobj + +947 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Related Work) + /K [0 1] + /Pg 4998 0 R +>> +endobj + +948 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [114 115 116] + /Pg 4985 0 R +>> +endobj + +949 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [955 0 R 81 82 83 954 0 R 90 91 92 93 953 0 R 95 96 97 98 99 100 101 952 0 R 103 104 105 951 0 R 107 108 109 110 950 0 R 112 113] + /Pg 4985 0 R +>> +endobj + +950 0 obj +<< + /Type /StructElem + /S /Link + /P 949 0 R + /K [111 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4984 0 R + >>] + /Pg 4985 0 R +>> +endobj + +951 0 obj +<< + /Type /StructElem + /S /Link + /P 949 0 R + /K [106 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4983 0 R + >>] + /Pg 4985 0 R +>> +endobj + +952 0 obj +<< + /Type /StructElem + /S /Link + /P 949 0 R + /K [102 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4982 0 R + >>] + /Pg 4985 0 R +>> +endobj + +953 0 obj +<< + /Type /StructElem + /S /Link + /P 949 0 R + /K [94 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4981 0 R + >>] + /Pg 4985 0 R +>> +endobj + +954 0 obj +<< + /Type /StructElem + /S /Formula + /P 949 0 R + /K [84 85 86 87 88 89] + /Pg 4985 0 R +>> +endobj + +955 0 obj +<< + /Type /StructElem + /S /Strong + /P 949 0 R + /K [80] + /Pg 4985 0 R +>> +endobj + +956 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [959 0 R 62 63 64 958 0 R 66 67 68 957 0 R 70 71 72 73 74 75 76 77 78 79] + /Pg 4985 0 R +>> +endobj + +957 0 obj +<< + /Type /StructElem + /S /Em + /P 956 0 R + /K [69] + /Pg 4985 0 R +>> +endobj + +958 0 obj +<< + /Type /StructElem + /S /Link + /P 956 0 R + /K [65 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4980 0 R + >>] + /Pg 4985 0 R +>> +endobj + +959 0 obj +<< + /Type /StructElem + /S /Strong + /P 956 0 R + /K [61] + /Pg 4985 0 R +>> +endobj + +960 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [964 0 R 48 963 0 R 50 962 0 R 54 961 0 R 56 57 58 59 60] + /Pg 4985 0 R +>> +endobj + +961 0 obj +<< + /Type /StructElem + /S /Formula + /P 960 0 R + /K [55] + /Pg 4985 0 R +>> +endobj + +962 0 obj +<< + /Type /StructElem + /S /Formula + /P 960 0 R + /K [51 52 53] + /Pg 4985 0 R +>> +endobj + +963 0 obj +<< + /Type /StructElem + /S /Formula + /P 960 0 R + /K [49] + /Pg 4985 0 R +>> +endobj + +964 0 obj +<< + /Type /StructElem + /S /Strong + /P 960 0 R + /K [47] + /Pg 4985 0 R +>> +endobj + +965 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [34 969 0 R 36 37 968 0 R 39 967 0 R 41 42 966 0 R 44 45 46] + /Pg 4985 0 R +>> +endobj + +966 0 obj +<< + /Type /StructElem + /S /Link + /P 965 0 R + /K [43 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4979 0 R + >>] + /Pg 4985 0 R +>> +endobj + +967 0 obj +<< + /Type /StructElem + /S /Em + /P 965 0 R + /K [40] + /Pg 4985 0 R +>> +endobj + +968 0 obj +<< + /Type /StructElem + /S /Em + /P 965 0 R + /K [38] + /Pg 4985 0 R +>> +endobj + +969 0 obj +<< + /Type /StructElem + /S /Em + /P 965 0 R + /K [35] + /Pg 4985 0 R +>> +endobj + +970 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [972 0 R 26 971 0 R 28 29 30 31 32 33] + /Pg 4985 0 R +>> +endobj + +971 0 obj +<< + /Type /StructElem + /S /Formula + /P 970 0 R + /K [27] + /Pg 4985 0 R +>> +endobj + +972 0 obj +<< + /Type /StructElem + /S /Strong + /P 970 0 R + /K [25] + /Pg 4985 0 R +>> +endobj + +973 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [978 0 R 3 977 0 R 5 6 7 8 976 0 R 10 11 975 0 R 18 19 20 21 974 0 R 23 24] + /Pg 4985 0 R +>> +endobj + +974 0 obj +<< + /Type /StructElem + /S /Link + /P 973 0 R + /K [22 << + /Type /OBJR + /Pg 4985 0 R + /Obj 4978 0 R + >>] + /Pg 4985 0 R +>> +endobj + +975 0 obj +<< + /Type /StructElem + /S /Formula + /P 973 0 R + /K [12 13 14 15 16 17] + /Pg 4985 0 R +>> +endobj + +976 0 obj +<< + /Type /StructElem + /S /Formula + /P 973 0 R + /K [9] + /Pg 4985 0 R +>> +endobj + +977 0 obj +<< + /Type /StructElem + /S /Formula + /P 973 0 R + /K [4] + /Pg 4985 0 R +>> +endobj + +978 0 obj +<< + /Type /StructElem + /S /Strong + /P 973 0 R + /K [2] + /Pg 4985 0 R +>> +endobj + +979 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [63 64 982 0 R 66 981 0 R 68 980 0 R 71 << + /Type /MCR + /MCID 0 + /Pg 4985 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4985 0 R + >>] + /Pg 4976 0 R +>> +endobj + +980 0 obj +<< + /Type /StructElem + /S /Formula + /P 979 0 R + /K [69 70] + /Pg 4976 0 R +>> +endobj + +981 0 obj +<< + /Type /StructElem + /S /Formula + /P 979 0 R + /K [67] + /Pg 4976 0 R +>> +endobj + +982 0 obj +<< + /Type /StructElem + /S /Formula + /P 979 0 R + /K [65] + /Pg 4976 0 R +>> +endobj + +983 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Dependency Typing and Versioning) + /K [61 62] + /Pg 4976 0 R +>> +endobj + +984 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [53 54 55 56 57 58 59 60] + /Pg 4976 0 R +>> +endobj + +985 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [38 39 40 987 0 R 42 43 986 0 R 45 46 47 48 49 50 51 52] + /Pg 4976 0 R +>> +endobj + +986 0 obj +<< + /Type /StructElem + /S /Formula + /P 985 0 R + /K [44] + /Pg 4976 0 R +>> +endobj + +987 0 obj +<< + /Type /StructElem + /S /Formula + /P 985 0 R + /K [41] + /Pg 4976 0 R +>> +endobj + +988 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [26 27 28 29 30 31 32 33 34 35 36 37] + /Pg 4976 0 R +>> +endobj + +989 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [10 11 995 0 R 13 994 0 R 15 993 0 R 17 992 0 R 19 991 0 R 21 990 0 R 23 24 25] + /Pg 4976 0 R +>> +endobj + +990 0 obj +<< + /Type /StructElem + /S /Formula + /P 989 0 R + /K [22] + /Pg 4976 0 R +>> +endobj + +991 0 obj +<< + /Type /StructElem + /S /Formula + /P 989 0 R + /K [20] + /Pg 4976 0 R +>> +endobj + +992 0 obj +<< + /Type /StructElem + /S /Formula + /P 989 0 R + /K [18] + /Pg 4976 0 R +>> +endobj + +993 0 obj +<< + /Type /StructElem + /S /Formula + /P 989 0 R + /K [16] + /Pg 4976 0 R +>> +endobj + +994 0 obj +<< + /Type /StructElem + /S /Formula + /P 989 0 R + /K [14] + /Pg 4976 0 R +>> +endobj + +995 0 obj +<< + /Type /StructElem + /S /Formula + /P 989 0 R + /K [12] + /Pg 4976 0 R +>> +endobj + +996 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Mutual Dependencies and Component Granularity) + /K [8 9] + /Pg 4976 0 R +>> +endobj + +997 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [108 109 110 999 0 R 112 113 << + /Type /MCR + /MCID 0 + /Pg 4976 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4976 0 R + >> << + /Type /MCR + /MCID 2 + /Pg 4976 0 R + >> 998 0 R << + /Type /MCR + /MCID 4 + /Pg 4976 0 R + >> << + /Type /MCR + /MCID 5 + /Pg 4976 0 R + >> << + /Type /MCR + /MCID 6 + /Pg 4976 0 R + >> << + /Type /MCR + /MCID 7 + /Pg 4976 0 R + >>] + /Pg 4973 0 R +>> +endobj + +998 0 obj +<< + /Type /StructElem + /S /Link + /P 997 0 R + /K [3 << + /Type /OBJR + /Pg 4976 0 R + /Obj 4975 0 R + >>] + /Pg 4976 0 R +>> +endobj + +999 0 obj +<< + /Type /StructElem + /S /Link + /P 997 0 R + /K [111 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4971 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1000 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [84 85 86 87 1006 0 R 89 90 1005 0 R 92 93 94 1004 0 R 96 97 1003 0 R 99 100 101 1002 0 R 103 1001 0 R 105 106 107] + /Pg 4973 0 R +>> +endobj + +1001 0 obj +<< + /Type /StructElem + /S /Link + /P 1000 0 R + /K [104 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4970 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1002 0 obj +<< + /Type /StructElem + /S /Link + /P 1000 0 R + /K [102 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4969 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1003 0 obj +<< + /Type /StructElem + /S /Link + /P 1000 0 R + /K [98 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4968 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1004 0 obj +<< + /Type /StructElem + /S /Code + /P 1000 0 R + /K [95] + /Pg 4973 0 R +>> +endobj + +1005 0 obj +<< + /Type /StructElem + /S /Link + /P 1000 0 R + /K [91 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4967 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1006 0 obj +<< + /Type /StructElem + /S /Code + /P 1000 0 R + /K [88] + /Pg 4973 0 R +>> +endobj + +1007 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [56 57 58 1014 0 R 60 61 1013 0 R 63 64 65 66 1012 0 R 68 69 70 1011 0 R 72 1010 0 R 74 75 1009 0 R 77 78 79 1008 0 R 81 82 83] + /Pg 4973 0 R +>> +endobj + +1008 0 obj +<< + /Type /StructElem + /S /Link + /P 1007 0 R + /K [80 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4966 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1009 0 obj +<< + /Type /StructElem + /S /Link + /P 1007 0 R + /K [76 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4965 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1010 0 obj +<< + /Type /StructElem + /S /Code + /P 1007 0 R + /K [73] + /Pg 4973 0 R +>> +endobj + +1011 0 obj +<< + /Type /StructElem + /S /Code + /P 1007 0 R + /K [71] + /Pg 4973 0 R +>> +endobj + +1012 0 obj +<< + /Type /StructElem + /S /Link + /P 1007 0 R + /K [67 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4964 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1013 0 obj +<< + /Type /StructElem + /S /Link + /P 1007 0 R + /K [62 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4963 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1014 0 obj +<< + /Type /StructElem + /S /Link + /P 1007 0 R + /K [59 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4962 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1015 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1019 0 R 44 45 46 47 1018 0 R 49 50 51 1017 0 R 53 1016 0 R 55] + /Pg 4973 0 R +>> +endobj + +1016 0 obj +<< + /Type /StructElem + /S /Em + /P 1015 0 R + /K [54] + /Pg 4973 0 R +>> +endobj + +1017 0 obj +<< + /Type /StructElem + /S /Em + /P 1015 0 R + /K [52] + /Pg 4973 0 R +>> +endobj + +1018 0 obj +<< + /Type /StructElem + /S /Link + /P 1015 0 R + /K [48 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4961 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1019 0 obj +<< + /Type /StructElem + /S /Strong + /P 1015 0 R + /K [43] + /Pg 4973 0 R +>> +endobj + +1020 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [18 19 20 21 1031 0 R 1026 0 R 23 24 1025 0 R 26 1024 0 R 28 29 1023 0 R 31 1022 0 R 33 34 1021 0 R 36 37 38 39 40 41 42] + /Pg 4973 0 R +>> +endobj + +1021 0 obj +<< + /Type /StructElem + /S /Link + /P 1020 0 R + /K [35 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4960 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1022 0 obj +<< + /Type /StructElem + /S /Code + /P 1020 0 R + /K [32] + /Pg 4973 0 R +>> +endobj + +1023 0 obj +<< + /Type /StructElem + /S /Code + /P 1020 0 R + /K [30] + /Pg 4973 0 R +>> +endobj + +1024 0 obj +<< + /Type /StructElem + /S /Code + /P 1020 0 R + /K [27] + /Pg 4973 0 R +>> +endobj + +1025 0 obj +<< + /Type /StructElem + /S /Code + /P 1020 0 R + /K [25] + /Pg 4973 0 R +>> +endobj + +1026 0 obj +<< + /Type /StructElem + /S /Note + /P 1020 0 R + /ID (Note 6) + /K [1028 0 R 115 1027 0 R 117 118] + /Pg 4973 0 R +>> +endobj + +1027 0 obj +<< + /Type /StructElem + /S /Code + /P 1026 0 R + /K [116] + /Pg 4973 0 R +>> +endobj + +1028 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1026 0 R + /K [1029 0 R] +>> +endobj + +1029 0 obj +<< + /Type /StructElem + /S /Link + /P 1028 0 R + /K [<< + /Type /OBJR + /Pg 4973 0 R + /Obj 4972 0 R + >> 1030 0 R] +>> +endobj + +1030 0 obj +<< + /Type /StructElem + /S /Span + /P 1029 0 R + /A [<< + /O /Layout + /BaselineShift 2.5866 + /LineHeight 3.24 + >>] + /K [114] + /Pg 4973 0 R +>> +endobj + +1031 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1020 0 R + /K [1032 0 R] +>> +endobj + +1032 0 obj +<< + /Type /StructElem + /S /Link + /P 1031 0 R + /K [<< + /Type /OBJR + /Pg 4973 0 R + /Obj 4959 0 R + >> 1033 0 R] +>> +endobj + +1033 0 obj +<< + /Type /StructElem + /S /Span + /P 1032 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [22] + /Pg 4973 0 R +>> +endobj + +1034 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1036 0 R 12 1035 0 R 14 15 16 17] + /Pg 4973 0 R +>> +endobj + +1035 0 obj +<< + /Type /StructElem + /S /Em + /P 1034 0 R + /K [13] + /Pg 4973 0 R +>> +endobj + +1036 0 obj +<< + /Type /StructElem + /S /Strong + /P 1034 0 R + /K [11] + /Pg 4973 0 R +>> +endobj + +1037 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [7 8 9 10] + /Pg 4973 0 R +>> +endobj + +1038 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Language Independence and Selection) + /K [5 6] + /Pg 4973 0 R +>> +endobj + +1039 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1043 0 R 60 61 62 63 64 65 66 1042 0 R 68 69 70 71 1041 0 R 73 74 75 << + /Type /MCR + /MCID 0 + /Pg 4973 0 R + >> 1040 0 R << + /Type /MCR + /MCID 2 + /Pg 4973 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 4973 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4973 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1040 0 obj +<< + /Type /StructElem + /S /Link + /P 1039 0 R + /K [1 << + /Type /OBJR + /Pg 4973 0 R + /Obj 4958 0 R + >>] + /Pg 4973 0 R +>> +endobj + +1041 0 obj +<< + /Type /StructElem + /S /Link + /P 1039 0 R + /K [72 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4955 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1042 0 obj +<< + /Type /StructElem + /S /Link + /P 1039 0 R + /K [67 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4954 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1043 0 obj +<< + /Type /StructElem + /S /Strong + /P 1039 0 R + /K [59] + /Pg 4956 0 R +>> +endobj + +1044 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [46 47 1045 0 R 49 50 51 52 53 54 55 56 57 58] + /Pg 4956 0 R +>> +endobj + +1045 0 obj +<< + /Type /StructElem + /S /Link + /P 1044 0 R + /K [48 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4953 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1046 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1051 0 R 27 1050 0 R 29 30 31 32 33 1049 0 R 35 1048 0 R 37 38 39 1047 0 R 41 42 43 44 45] + /Pg 4956 0 R +>> +endobj + +1047 0 obj +<< + /Type /StructElem + /S /Code + /P 1046 0 R + /K [40] + /Pg 4956 0 R +>> +endobj + +1048 0 obj +<< + /Type /StructElem + /S /Link + /P 1046 0 R + /K [36 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4952 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1049 0 obj +<< + /Type /StructElem + /S /Link + /P 1046 0 R + /K [34 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4951 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1050 0 obj +<< + /Type /StructElem + /S /Link + /P 1046 0 R + /K [28 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4950 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1051 0 obj +<< + /Type /StructElem + /S /Strong + /P 1046 0 R + /K [26] + /Pg 4956 0 R +>> +endobj + +1052 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [21 22 23 24 25] + /Pg 4956 0 R +>> +endobj + +1053 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Access Control and Sandboxing) + /K [19 20] + /Pg 4956 0 R +>> +endobj + +1054 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1056 0 R 8 9 1055 0 R 11 12 13 14 15 16 17 18] + /Pg 4956 0 R +>> +endobj + +1055 0 obj +<< + /Type /StructElem + /S /Link + /P 1054 0 R + /K [10 << + /Type /OBJR + /Pg 4956 0 R + /Obj 4949 0 R + >>] + /Pg 4956 0 R +>> +endobj + +1056 0 obj +<< + /Type /StructElem + /S /Strong + /P 1054 0 R + /K [7] + /Pg 4956 0 R +>> +endobj + +1057 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1061 0 R 66 67 68 1060 0 R 70 1059 0 R 72 73 << + /Type /MCR + /MCID 0 + /Pg 4956 0 R + >> 1058 0 R << + /Type /MCR + /MCID 2 + /Pg 4956 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 4956 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4956 0 R + >> << + /Type /MCR + /MCID 5 + /Pg 4956 0 R + >> << + /Type /MCR + /MCID 6 + /Pg 4956 0 R + >>] + /Pg 4947 0 R +>> +endobj + +1058 0 obj +<< + /Type /StructElem + /S /Code + /P 1057 0 R + /K [1] + /Pg 4956 0 R +>> +endobj + +1059 0 obj +<< + /Type /StructElem + /S /Link + /P 1057 0 R + /K [71 << + /Type /OBJR + /Pg 4947 0 R + /Obj 4946 0 R + >>] + /Pg 4947 0 R +>> +endobj + +1060 0 obj +<< + /Type /StructElem + /S /Link + /P 1057 0 R + /K [69 << + /Type /OBJR + /Pg 4947 0 R + /Obj 4945 0 R + >>] + /Pg 4947 0 R +>> +endobj + +1061 0 obj +<< + /Type /StructElem + /S /Strong + /P 1057 0 R + /K [65] + /Pg 4947 0 R +>> +endobj + +1062 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1063 0 R 59 60 61 62 63 64] + /Pg 4947 0 R +>> +endobj + +1063 0 obj +<< + /Type /StructElem + /S /Strong + /P 1062 0 R + /K [58] + /Pg 4947 0 R +>> +endobj + +1064 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [56 57] + /Pg 4947 0 R +>> +endobj + +1065 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [25 26 1073 0 R 28 29 1072 0 R 31 32 33 34 1071 0 R 36 1070 0 R 38 1069 0 R 40 41 1068 0 R 43 44 1067 0 R 46 47 48 49 1066 0 R 51 52 53 54 55] + /Pg 4947 0 R +>> +endobj + +1066 0 obj +<< + /Type /StructElem + /S /Em + /P 1065 0 R + /K [50] + /Pg 4947 0 R +>> +endobj + +1067 0 obj +<< + /Type /StructElem + /S /Em + /P 1065 0 R + /K [45] + /Pg 4947 0 R +>> +endobj + +1068 0 obj +<< + /Type /StructElem + /S /Em + /P 1065 0 R + /K [42] + /Pg 4947 0 R +>> +endobj + +1069 0 obj +<< + /Type /StructElem + /S /Code + /P 1065 0 R + /K [39] + /Pg 4947 0 R +>> +endobj + +1070 0 obj +<< + /Type /StructElem + /S /Em + /P 1065 0 R + /K [37] + /Pg 4947 0 R +>> +endobj + +1071 0 obj +<< + /Type /StructElem + /S /Code + /P 1065 0 R + /K [35] + /Pg 4947 0 R +>> +endobj + +1072 0 obj +<< + /Type /StructElem + /S /Em + /P 1065 0 R + /K [30] + /Pg 4947 0 R +>> +endobj + +1073 0 obj +<< + /Type /StructElem + /S /Link + /P 1065 0 R + /K [27 << + /Type /OBJR + /Pg 4947 0 R + /Obj 4944 0 R + >>] + /Pg 4947 0 R +>> +endobj + +1074 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Service Multiplexing) + /K [23 24] + /Pg 4947 0 R +>> +endobj + +1075 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [18 19 20 21 22] + /Pg 4947 0 R +>> +endobj + +1076 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Discussion) + /K [16 17] + /Pg 4947 0 R +>> +endobj + +1077 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1078 0 R 9 10 11 12 13 14 15] + /Pg 4947 0 R +>> +endobj + +1078 0 obj +<< + /Type /StructElem + /S /Strong + /P 1077 0 R + /K [8] + /Pg 4947 0 R +>> +endobj + +1079 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1082 0 R 66 1081 0 R 68 69 70 71 << + /Type /MCR + /MCID 0 + /Pg 4947 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4947 0 R + >> 1080 0 R << + /Type /MCR + /MCID 3 + /Pg 4947 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4947 0 R + >> << + /Type /MCR + /MCID 5 + /Pg 4947 0 R + >> << + /Type /MCR + /MCID 6 + /Pg 4947 0 R + >> << + /Type /MCR + /MCID 7 + /Pg 4947 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1080 0 obj +<< + /Type /StructElem + /S /Link + /P 1079 0 R + /K [2 << + /Type /OBJR + /Pg 4947 0 R + /Obj 4943 0 R + >>] + /Pg 4947 0 R +>> +endobj + +1081 0 obj +<< + /Type /StructElem + /S /Link + /P 1079 0 R + /K [67 << + /Type /OBJR + /Pg 4941 0 R + /Obj 4938 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1082 0 obj +<< + /Type /StructElem + /S /Strong + /P 1079 0 R + /K [65] + /Pg 4941 0 R +>> +endobj + +1083 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1087 0 R 48 1086 0 R 50 51 52 53 54 55 56 57 1085 0 R 59 60 61 1084 0 R 63 64] + /Pg 4941 0 R +>> +endobj + +1084 0 obj +<< + /Type /StructElem + /S /Link + /P 1083 0 R + /K [62 << + /Type /OBJR + /Pg 4941 0 R + /Obj 4937 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1085 0 obj +<< + /Type /StructElem + /S /Link + /P 1083 0 R + /K [58 << + /Type /OBJR + /Pg 4941 0 R + /Obj 4936 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1086 0 obj +<< + /Type /StructElem + /S /Link + /P 1083 0 R + /K [49 << + /Type /OBJR + /Pg 4941 0 R + /Obj 4935 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1087 0 obj +<< + /Type /StructElem + /S /Strong + /P 1083 0 R + /K [47] + /Pg 4941 0 R +>> +endobj + +1088 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1091 0 R 33 34 1090 0 R 36 37 38 39 40 1089 0 R 42 43 44 45 46] + /Pg 4941 0 R +>> +endobj + +1089 0 obj +<< + /Type /StructElem + /S /Link + /P 1088 0 R + /K [41 << + /Type /OBJR + /Pg 4941 0 R + /Obj 4934 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1090 0 obj +<< + /Type /StructElem + /S /Link + /P 1088 0 R + /K [35 << + /Type /OBJR + /Pg 4941 0 R + /Obj 4933 0 R + >>] + /Pg 4941 0 R +>> +endobj + +1091 0 obj +<< + /Type /StructElem + /S /Strong + /P 1088 0 R + /K [32] + /Pg 4941 0 R +>> +endobj + +1092 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [23 1106 0 R 1102 0 R 25 26 1099 0 R 1093 0 R 28 29 30 31] + /Pg 4941 0 R +>> +endobj + +1093 0 obj +<< + /Type /StructElem + /S /Note + /P 1092 0 R + /ID (Note 5) + /K [1096 0 R 76 1095 0 R 78 1094 0 R 80] + /Pg 4941 0 R +>> +endobj + +1094 0 obj +<< + /Type /StructElem + /S /Em + /P 1093 0 R + /K [79] + /Pg 4941 0 R +>> +endobj + +1095 0 obj +<< + /Type /StructElem + /S /Em + /P 1093 0 R + /K [77] + /Pg 4941 0 R +>> +endobj + +1096 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1093 0 R + /K [1097 0 R] +>> +endobj + +1097 0 obj +<< + /Type /StructElem + /S /Link + /P 1096 0 R + /K [<< + /Type /OBJR + /Pg 4941 0 R + /Obj 4940 0 R + >> 1098 0 R] +>> +endobj + +1098 0 obj +<< + /Type /StructElem + /S /Span + /P 1097 0 R + /A [<< + /O /Layout + /BaselineShift 2.5866 + /LineHeight 3.24 + >>] + /K [75] + /Pg 4941 0 R +>> +endobj + +1099 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1092 0 R + /K [1100 0 R] +>> +endobj + +1100 0 obj +<< + /Type /StructElem + /S /Link + /P 1099 0 R + /K [<< + /Type /OBJR + /Pg 4941 0 R + /Obj 4932 0 R + >> 1101 0 R] +>> +endobj + +1101 0 obj +<< + /Type /StructElem + /S /Span + /P 1100 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [27] + /Pg 4941 0 R +>> +endobj + +1102 0 obj +<< + /Type /StructElem + /S /Note + /P 1092 0 R + /ID (Note 4) + /K [1103 0 R 73 74] + /Pg 4941 0 R +>> +endobj + +1103 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1102 0 R + /K [1104 0 R] +>> +endobj + +1104 0 obj +<< + /Type /StructElem + /S /Link + /P 1103 0 R + /K [<< + /Type /OBJR + /Pg 4941 0 R + /Obj 4939 0 R + >> 1105 0 R] +>> +endobj + +1105 0 obj +<< + /Type /StructElem + /S /Span + /P 1104 0 R + /A [<< + /O /Layout + /BaselineShift 2.5866 + /LineHeight 3.24 + >>] + /K [72] + /Pg 4941 0 R +>> +endobj + +1106 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1092 0 R + /K [1107 0 R] +>> +endobj + +1107 0 obj +<< + /Type /StructElem + /S /Link + /P 1106 0 R + /K [<< + /Type /OBJR + /Pg 4941 0 R + /Obj 4931 0 R + >> 1108 0 R] +>> +endobj + +1108 0 obj +<< + /Type /StructElem + /S /Span + /P 1107 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [24] + /Pg 4941 0 R +>> +endobj + +1109 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Case Study: Koishi) + /K [21 22] + /Pg 4941 0 R +>> +endobj + +1110 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [15 16 17 1111 0 R 19 20] + /Pg 4941 0 R +>> +endobj + +1111 0 obj +<< + /Type /StructElem + /S /Code + /P 1110 0 R + /K [18] + /Pg 4941 0 R +>> +endobj + +1112 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1207 0 R 1113 0 R] +>> +endobj + +1113 0 obj +<< + /Type /StructElem + /S /Div + /P 1112 0 R + /K [1206 0 R 1204 0 R 1201 0 R 1199 0 R 1198 0 R 1197 0 R 1193 0 R 1191 0 R 1190 0 R 1188 0 R 1186 0 R 1185 0 R 1184 0 R 1183 0 R 1178 0 R 1176 0 R 1175 0 R 1174 0 R 1173 0 R 1172 0 R 1170 0 R 1168 0 R 1167 0 R 1166 0 R 1165 0 R 1161 0 R 1159 0 R 1158 0 R 1155 0 R 1153 0 R 1152 0 R 1151 0 R 1150 0 R 1148 0 R 1146 0 R 1145 0 R 1144 0 R 1139 0 R 1137 0 R 1136 0 R 1135 0 R 1134 0 R 1133 0 R 1131 0 R 1129 0 R 1128 0 R 1127 0 R 1126 0 R 1122 0 R 1120 0 R 1119 0 R 1118 0 R 1115 0 R 1114 0 R] +>> +endobj + +1114 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1115 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1117 0 R 1116 0 R] +>> +endobj + +1116 0 obj +<< + /Type /StructElem + /S /Span + /P 1115 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [14] + /Pg 4941 0 R +>> +endobj + +1117 0 obj +<< + /Type /StructElem + /S /Strong + /P 1115 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [13] + /Pg 4941 0 R +>> +endobj + +1118 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1119 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1120 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1121 0 R] +>> +endobj + +1121 0 obj +<< + /Type /StructElem + /S /Span + /P 1120 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [12] + /Pg 4941 0 R +>> +endobj + +1122 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1125 0 R 1124 0 R 1123 0 R] +>> +endobj + +1123 0 obj +<< + /Type /StructElem + /S /Span + /P 1122 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11] + /Pg 4941 0 R +>> +endobj + +1124 0 obj +<< + /Type /StructElem + /S /Formula + /P 1122 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [10] + /Pg 4941 0 R +>> +endobj + +1125 0 obj +<< + /Type /StructElem + /S /Span + /P 1122 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [9] + /Pg 4941 0 R +>> +endobj + +1126 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1127 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1128 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1129 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1130 0 R] +>> +endobj + +1130 0 obj +<< + /Type /StructElem + /S /Span + /P 1129 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [8] + /Pg 4941 0 R +>> +endobj + +1131 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1132 0 R] +>> +endobj + +1132 0 obj +<< + /Type /StructElem + /S /Span + /P 1131 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [7] + /Pg 4941 0 R +>> +endobj + +1133 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1134 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1135 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1136 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1137 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1138 0 R] +>> +endobj + +1138 0 obj +<< + /Type /StructElem + /S /Span + /P 1137 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [6] + /Pg 4941 0 R +>> +endobj + +1139 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1143 0 R 1142 0 R 1141 0 R 1140 0 R] +>> +endobj + +1140 0 obj +<< + /Type /StructElem + /S /Span + /P 1139 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2 4] + /Pg 4941 0 R +>> +endobj + +1141 0 obj +<< + /Type /StructElem + /S /Strong + /P 1139 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [5] + /Pg 4941 0 R +>> +endobj + +1142 0 obj +<< + /Type /StructElem + /S /Strong + /P 1139 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3] + /Pg 4941 0 R +>> +endobj + +1143 0 obj +<< + /Type /StructElem + /S /Strong + /P 1139 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 4941 0 R +>> +endobj + +1144 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1145 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1146 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1147 0 R] +>> +endobj + +1147 0 obj +<< + /Type /StructElem + /S /Span + /P 1146 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 4941 0 R +>> +endobj + +1148 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1149 0 R] +>> +endobj + +1149 0 obj +<< + /Type /StructElem + /S /Span + /P 1148 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [147] + /Pg 4929 0 R +>> +endobj + +1150 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1151 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1152 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1153 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1154 0 R] +>> +endobj + +1154 0 obj +<< + /Type /StructElem + /S /Span + /P 1153 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [146] + /Pg 4929 0 R +>> +endobj + +1155 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1157 0 R 1156 0 R] +>> +endobj + +1156 0 obj +<< + /Type /StructElem + /S /Span + /P 1155 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [145] + /Pg 4929 0 R +>> +endobj + +1157 0 obj +<< + /Type /StructElem + /S /Strong + /P 1155 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [144] + /Pg 4929 0 R +>> +endobj + +1158 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1159 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1160 0 R] +>> +endobj + +1160 0 obj +<< + /Type /StructElem + /S /Span + /P 1159 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [143] + /Pg 4929 0 R +>> +endobj + +1161 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1164 0 R 1163 0 R 1162 0 R] +>> +endobj + +1162 0 obj +<< + /Type /StructElem + /S /Span + /P 1161 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [142] + /Pg 4929 0 R +>> +endobj + +1163 0 obj +<< + /Type /StructElem + /S /Formula + /P 1161 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [141] + /Pg 4929 0 R +>> +endobj + +1164 0 obj +<< + /Type /StructElem + /S /Span + /P 1161 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [140] + /Pg 4929 0 R +>> +endobj + +1165 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1166 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1167 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1168 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1169 0 R] +>> +endobj + +1169 0 obj +<< + /Type /StructElem + /S /Span + /P 1168 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [139] + /Pg 4929 0 R +>> +endobj + +1170 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1171 0 R] +>> +endobj + +1171 0 obj +<< + /Type /StructElem + /S /Span + /P 1170 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [138] + /Pg 4929 0 R +>> +endobj + +1172 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1173 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1174 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1175 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1176 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1177 0 R] +>> +endobj + +1177 0 obj +<< + /Type /StructElem + /S /Span + /P 1176 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [137] + /Pg 4929 0 R +>> +endobj + +1178 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1182 0 R 1181 0 R 1180 0 R 1179 0 R] +>> +endobj + +1179 0 obj +<< + /Type /StructElem + /S /Span + /P 1178 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [133 135] + /Pg 4929 0 R +>> +endobj + +1180 0 obj +<< + /Type /StructElem + /S /Strong + /P 1178 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [136] + /Pg 4929 0 R +>> +endobj + +1181 0 obj +<< + /Type /StructElem + /S /Strong + /P 1178 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [134] + /Pg 4929 0 R +>> +endobj + +1182 0 obj +<< + /Type /StructElem + /S /Strong + /P 1178 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [132] + /Pg 4929 0 R +>> +endobj + +1183 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1184 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1185 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1186 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1187 0 R] +>> +endobj + +1187 0 obj +<< + /Type /StructElem + /S /Span + /P 1186 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [131] + /Pg 4929 0 R +>> +endobj + +1188 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1189 0 R] +>> +endobj + +1189 0 obj +<< + /Type /StructElem + /S /Strong + /P 1188 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [130] + /Pg 4929 0 R +>> +endobj + +1190 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1191 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1192 0 R] +>> +endobj + +1192 0 obj +<< + /Type /StructElem + /S /Span + /P 1191 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [129] + /Pg 4929 0 R +>> +endobj + +1193 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1196 0 R 1195 0 R 1194 0 R] +>> +endobj + +1194 0 obj +<< + /Type /StructElem + /S /Span + /P 1193 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [128] + /Pg 4929 0 R +>> +endobj + +1195 0 obj +<< + /Type /StructElem + /S /Formula + /P 1193 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [127] + /Pg 4929 0 R +>> +endobj + +1196 0 obj +<< + /Type /StructElem + /S /Span + /P 1193 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [126] + /Pg 4929 0 R +>> +endobj + +1197 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1198 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1199 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1200 0 R] +>> +endobj + +1200 0 obj +<< + /Type /StructElem + /S /Span + /P 1199 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [125] + /Pg 4929 0 R +>> +endobj + +1201 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1203 0 R 1202 0 R] +>> +endobj + +1202 0 obj +<< + /Type /StructElem + /S /Span + /P 1201 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [124] + /Pg 4929 0 R +>> +endobj + +1203 0 obj +<< + /Type /StructElem + /S /Strong + /P 1201 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [123] + /Pg 4929 0 R +>> +endobj + +1204 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [1205 0 R] +>> +endobj + +1205 0 obj +<< + /Type /StructElem + /S /Span + /P 1204 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [122] + /Pg 4929 0 R +>> +endobj + +1206 0 obj +<< + /Type /StructElem + /S /Div + /P 1113 0 R + /K [] +>> +endobj + +1207 0 obj +<< + /Type /StructElem + /S /P + /P 1112 0 R + /K [1208 0 R 121] + /Pg 4929 0 R +>> +endobj + +1208 0 obj +<< + /Type /StructElem + /S /Strong + /P 1207 0 R + /K [120] + /Pg 4929 0 R +>> +endobj + +1209 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1218 0 R 113 114 1215 0 R 1211 0 R 116 117 1210 0 R 119] + /Pg 4929 0 R +>> +endobj + +1210 0 obj +<< + /Type /StructElem + /S /Code + /P 1209 0 R + /K [118] + /Pg 4929 0 R +>> +endobj + +1211 0 obj +<< + /Type /StructElem + /S /Note + /P 1209 0 R + /ID (Note 3) + /K [1212 0 R 149 150] + /Pg 4929 0 R +>> +endobj + +1212 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1211 0 R + /K [1213 0 R] +>> +endobj + +1213 0 obj +<< + /Type /StructElem + /S /Link + /P 1212 0 R + /K [<< + /Type /OBJR + /Pg 4929 0 R + /Obj 4928 0 R + >> 1214 0 R] +>> +endobj + +1214 0 obj +<< + /Type /StructElem + /S /Span + /P 1213 0 R + /A [<< + /O /Layout + /BaselineShift 2.5866 + /LineHeight 3.24 + >>] + /K [148] + /Pg 4929 0 R +>> +endobj + +1215 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1209 0 R + /K [1216 0 R] +>> +endobj + +1216 0 obj +<< + /Type /StructElem + /S /Link + /P 1215 0 R + /K [<< + /Type /OBJR + /Pg 4929 0 R + /Obj 4927 0 R + >> 1217 0 R] +>> +endobj + +1217 0 obj +<< + /Type /StructElem + /S /Span + /P 1216 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [115] + /Pg 4929 0 R +>> +endobj + +1218 0 obj +<< + /Type /StructElem + /S /Strong + /P 1209 0 R + /K [112] + /Pg 4929 0 R +>> +endobj + +1219 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [107 1221 0 R 109 1220 0 R 111] + /Pg 4929 0 R +>> +endobj + +1220 0 obj +<< + /Type /StructElem + /S /Code + /P 1219 0 R + /K [110] + /Pg 4929 0 R +>> +endobj + +1221 0 obj +<< + /Type /StructElem + /S /Code + /P 1219 0 R + /K [108] + /Pg 4929 0 R +>> +endobj + +1222 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1365 0 R 1223 0 R] +>> +endobj + +1223 0 obj +<< + /Type /StructElem + /S /Div + /P 1222 0 R + /K [1364 0 R 1362 0 R 1359 0 R 1357 0 R 1356 0 R 1355 0 R 1350 0 R 1348 0 R 1347 0 R 1344 0 R 1342 0 R 1341 0 R 1340 0 R 1339 0 R 1329 0 R 1327 0 R 1326 0 R 1325 0 R 1319 0 R 1317 0 R 1316 0 R 1315 0 R 1310 0 R 1308 0 R 1307 0 R 1305 0 R 1303 0 R 1302 0 R 1299 0 R 1297 0 R 1294 0 R 1292 0 R 1291 0 R 1290 0 R 1285 0 R 1283 0 R 1282 0 R 1277 0 R 1275 0 R 1274 0 R 1273 0 R 1272 0 R 1268 0 R 1266 0 R 1265 0 R 1264 0 R 1254 0 R 1252 0 R 1251 0 R 1250 0 R 1249 0 R 1248 0 R 1242 0 R 1240 0 R 1239 0 R 1238 0 R 1237 0 R 1231 0 R 1229 0 R 1228 0 R 1225 0 R 1224 0 R] +>> +endobj + +1224 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1225 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1227 0 R 1226 0 R] +>> +endobj + +1226 0 obj +<< + /Type /StructElem + /S /Span + /P 1225 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [106] + /Pg 4929 0 R +>> +endobj + +1227 0 obj +<< + /Type /StructElem + /S /Strong + /P 1225 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [105] + /Pg 4929 0 R +>> +endobj + +1228 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1229 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1230 0 R] +>> +endobj + +1230 0 obj +<< + /Type /StructElem + /S /Span + /P 1229 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [104] + /Pg 4929 0 R +>> +endobj + +1231 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1236 0 R 1235 0 R 1234 0 R 1233 0 R 1232 0 R] +>> +endobj + +1232 0 obj +<< + /Type /StructElem + /S /Span + /P 1231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [103] + /Pg 4929 0 R +>> +endobj + +1233 0 obj +<< + /Type /StructElem + /S /Formula + /P 1231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [102] + /Pg 4929 0 R +>> +endobj + +1234 0 obj +<< + /Type /StructElem + /S /Span + /P 1231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [101] + /Pg 4929 0 R +>> +endobj + +1235 0 obj +<< + /Type /StructElem + /S /Formula + /P 1231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [100] + /Pg 4929 0 R +>> +endobj + +1236 0 obj +<< + /Type /StructElem + /S /Span + /P 1231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [99] + /Pg 4929 0 R +>> +endobj + +1237 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1238 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1239 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1240 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1241 0 R] +>> +endobj + +1241 0 obj +<< + /Type /StructElem + /S /Span + /P 1240 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [98] + /Pg 4929 0 R +>> +endobj + +1242 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1247 0 R 1246 0 R 1245 0 R 1244 0 R 1243 0 R] +>> +endobj + +1243 0 obj +<< + /Type /StructElem + /S /Span + /P 1242 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [97] + /Pg 4929 0 R +>> +endobj + +1244 0 obj +<< + /Type /StructElem + /S /Formula + /P 1242 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [96] + /Pg 4929 0 R +>> +endobj + +1245 0 obj +<< + /Type /StructElem + /S /Span + /P 1242 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [95] + /Pg 4929 0 R +>> +endobj + +1246 0 obj +<< + /Type /StructElem + /S /Formula + /P 1242 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [94] + /Pg 4929 0 R +>> +endobj + +1247 0 obj +<< + /Type /StructElem + /S /Span + /P 1242 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4929 0 R +>> +endobj + +1248 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1249 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1250 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1251 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1252 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1253 0 R] +>> +endobj + +1253 0 obj +<< + /Type /StructElem + /S /Span + /P 1252 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [92] + /Pg 4929 0 R +>> +endobj + +1254 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1263 0 R 1262 0 R 1261 0 R 1260 0 R 1259 0 R 1258 0 R 1257 0 R 1256 0 R 1255 0 R] +>> +endobj + +1255 0 obj +<< + /Type /StructElem + /S /Span + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [90] + /Pg 4929 0 R +>> +endobj + +1256 0 obj +<< + /Type /StructElem + /S /Strong + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [91] + /Pg 4929 0 R +>> +endobj + +1257 0 obj +<< + /Type /StructElem + /S /Formula + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [89] + /Pg 4929 0 R +>> +endobj + +1258 0 obj +<< + /Type /StructElem + /S /Span + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [88] + /Pg 4929 0 R +>> +endobj + +1259 0 obj +<< + /Type /StructElem + /S /Formula + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [87] + /Pg 4929 0 R +>> +endobj + +1260 0 obj +<< + /Type /StructElem + /S /Span + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [86] + /Pg 4929 0 R +>> +endobj + +1261 0 obj +<< + /Type /StructElem + /S /Formula + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [85] + /Pg 4929 0 R +>> +endobj + +1262 0 obj +<< + /Type /StructElem + /S /Span + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [84] + /Pg 4929 0 R +>> +endobj + +1263 0 obj +<< + /Type /StructElem + /S /Strong + /P 1254 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [83] + /Pg 4929 0 R +>> +endobj + +1264 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1265 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1266 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1267 0 R] +>> +endobj + +1267 0 obj +<< + /Type /StructElem + /S /Span + /P 1266 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [82] + /Pg 4929 0 R +>> +endobj + +1268 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1271 0 R 1270 0 R 1269 0 R] +>> +endobj + +1269 0 obj +<< + /Type /StructElem + /S /Span + /P 1268 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [81] + /Pg 4929 0 R +>> +endobj + +1270 0 obj +<< + /Type /StructElem + /S /Formula + /P 1268 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [80] + /Pg 4929 0 R +>> +endobj + +1271 0 obj +<< + /Type /StructElem + /S /Span + /P 1268 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [79] + /Pg 4929 0 R +>> +endobj + +1272 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1273 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1274 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1275 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1276 0 R] +>> +endobj + +1276 0 obj +<< + /Type /StructElem + /S /Span + /P 1275 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [78] + /Pg 4929 0 R +>> +endobj + +1277 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1281 0 R 1280 0 R 1279 0 R 1278 0 R] +>> +endobj + +1278 0 obj +<< + /Type /StructElem + /S /Span + /P 1277 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [74 76] + /Pg 4929 0 R +>> +endobj + +1279 0 obj +<< + /Type /StructElem + /S /Strong + /P 1277 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [77] + /Pg 4929 0 R +>> +endobj + +1280 0 obj +<< + /Type /StructElem + /S /Strong + /P 1277 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [75] + /Pg 4929 0 R +>> +endobj + +1281 0 obj +<< + /Type /StructElem + /S /Strong + /P 1277 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [73] + /Pg 4929 0 R +>> +endobj + +1282 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1283 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1284 0 R] +>> +endobj + +1284 0 obj +<< + /Type /StructElem + /S /Span + /P 1283 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [72] + /Pg 4929 0 R +>> +endobj + +1285 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1289 0 R 1288 0 R 1287 0 R 1286 0 R] +>> +endobj + +1286 0 obj +<< + /Type /StructElem + /S /Formula + /P 1285 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [71] + /Pg 4929 0 R +>> +endobj + +1287 0 obj +<< + /Type /StructElem + /S /Span + /P 1285 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [70] + /Pg 4929 0 R +>> +endobj + +1288 0 obj +<< + /Type /StructElem + /S /Formula + /P 1285 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [69] + /Pg 4929 0 R +>> +endobj + +1289 0 obj +<< + /Type /StructElem + /S /Span + /P 1285 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [68] + /Pg 4929 0 R +>> +endobj + +1290 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1291 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1292 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1293 0 R] +>> +endobj + +1293 0 obj +<< + /Type /StructElem + /S /Span + /P 1292 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [67] + /Pg 4929 0 R +>> +endobj + +1294 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1296 0 R 1295 0 R] +>> +endobj + +1295 0 obj +<< + /Type /StructElem + /S /Span + /P 1294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [66] + /Pg 4929 0 R +>> +endobj + +1296 0 obj +<< + /Type /StructElem + /S /Strong + /P 1294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [65] + /Pg 4929 0 R +>> +endobj + +1297 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1298 0 R] +>> +endobj + +1298 0 obj +<< + /Type /StructElem + /S /Span + /P 1297 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [64] + /Pg 4929 0 R +>> +endobj + +1299 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1301 0 R 1300 0 R] +>> +endobj + +1300 0 obj +<< + /Type /StructElem + /S /Span + /P 1299 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [63] + /Pg 4929 0 R +>> +endobj + +1301 0 obj +<< + /Type /StructElem + /S /Strong + /P 1299 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [62] + /Pg 4929 0 R +>> +endobj + +1302 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1303 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1304 0 R] +>> +endobj + +1304 0 obj +<< + /Type /StructElem + /S /Span + /P 1303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [61] + /Pg 4929 0 R +>> +endobj + +1305 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1306 0 R] +>> +endobj + +1306 0 obj +<< + /Type /StructElem + /S /Span + /P 1305 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [60] + /Pg 4929 0 R +>> +endobj + +1307 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1308 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1309 0 R] +>> +endobj + +1309 0 obj +<< + /Type /StructElem + /S /Span + /P 1308 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [59] + /Pg 4929 0 R +>> +endobj + +1310 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1314 0 R 1313 0 R 1312 0 R 1311 0 R] +>> +endobj + +1311 0 obj +<< + /Type /StructElem + /S /Span + /P 1310 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [54 56 58] + /Pg 4929 0 R +>> +endobj + +1312 0 obj +<< + /Type /StructElem + /S /Strong + /P 1310 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [57] + /Pg 4929 0 R +>> +endobj + +1313 0 obj +<< + /Type /StructElem + /S /Strong + /P 1310 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [55] + /Pg 4929 0 R +>> +endobj + +1314 0 obj +<< + /Type /StructElem + /S /Strong + /P 1310 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [53] + /Pg 4929 0 R +>> +endobj + +1315 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1316 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1317 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1318 0 R] +>> +endobj + +1318 0 obj +<< + /Type /StructElem + /S /Span + /P 1317 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [52] + /Pg 4929 0 R +>> +endobj + +1319 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1324 0 R 1323 0 R 1322 0 R 1321 0 R 1320 0 R] +>> +endobj + +1320 0 obj +<< + /Type /StructElem + /S /Span + /P 1319 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [51] + /Pg 4929 0 R +>> +endobj + +1321 0 obj +<< + /Type /StructElem + /S /Formula + /P 1319 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [50] + /Pg 4929 0 R +>> +endobj + +1322 0 obj +<< + /Type /StructElem + /S /Span + /P 1319 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [49] + /Pg 4929 0 R +>> +endobj + +1323 0 obj +<< + /Type /StructElem + /S /Formula + /P 1319 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [48] + /Pg 4929 0 R +>> +endobj + +1324 0 obj +<< + /Type /StructElem + /S /Span + /P 1319 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [47] + /Pg 4929 0 R +>> +endobj + +1325 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1326 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1327 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1328 0 R] +>> +endobj + +1328 0 obj +<< + /Type /StructElem + /S /Span + /P 1327 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [46] + /Pg 4929 0 R +>> +endobj + +1329 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1338 0 R 1337 0 R 1336 0 R 1335 0 R 1334 0 R 1333 0 R 1332 0 R 1331 0 R 1330 0 R] +>> +endobj + +1330 0 obj +<< + /Type /StructElem + /S /Span + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [42 44] + /Pg 4929 0 R +>> +endobj + +1331 0 obj +<< + /Type /StructElem + /S /Strong + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [45] + /Pg 4929 0 R +>> +endobj + +1332 0 obj +<< + /Type /StructElem + /S /Strong + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43] + /Pg 4929 0 R +>> +endobj + +1333 0 obj +<< + /Type /StructElem + /S /Formula + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [41] + /Pg 4929 0 R +>> +endobj + +1334 0 obj +<< + /Type /StructElem + /S /Span + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [38 40] + /Pg 4929 0 R +>> +endobj + +1335 0 obj +<< + /Type /StructElem + /S /Strong + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [39] + /Pg 4929 0 R +>> +endobj + +1336 0 obj +<< + /Type /StructElem + /S /Formula + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [37] + /Pg 4929 0 R +>> +endobj + +1337 0 obj +<< + /Type /StructElem + /S /Span + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [36] + /Pg 4929 0 R +>> +endobj + +1338 0 obj +<< + /Type /StructElem + /S /Strong + /P 1329 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [35] + /Pg 4929 0 R +>> +endobj + +1339 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1340 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1341 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1342 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1343 0 R] +>> +endobj + +1343 0 obj +<< + /Type /StructElem + /S /Span + /P 1342 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [34] + /Pg 4929 0 R +>> +endobj + +1344 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1346 0 R 1345 0 R] +>> +endobj + +1345 0 obj +<< + /Type /StructElem + /S /Span + /P 1344 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33] + /Pg 4929 0 R +>> +endobj + +1346 0 obj +<< + /Type /StructElem + /S /Strong + /P 1344 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [32] + /Pg 4929 0 R +>> +endobj + +1347 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1348 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1349 0 R] +>> +endobj + +1349 0 obj +<< + /Type /StructElem + /S /Span + /P 1348 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [31] + /Pg 4929 0 R +>> +endobj + +1350 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1354 0 R 1353 0 R 1352 0 R 1351 0 R] +>> +endobj + +1351 0 obj +<< + /Type /StructElem + /S /Formula + /P 1350 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [30] + /Pg 4929 0 R +>> +endobj + +1352 0 obj +<< + /Type /StructElem + /S /Span + /P 1350 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [29] + /Pg 4929 0 R +>> +endobj + +1353 0 obj +<< + /Type /StructElem + /S /Formula + /P 1350 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [28] + /Pg 4929 0 R +>> +endobj + +1354 0 obj +<< + /Type /StructElem + /S /Span + /P 1350 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [27] + /Pg 4929 0 R +>> +endobj + +1355 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1356 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1357 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1358 0 R] +>> +endobj + +1358 0 obj +<< + /Type /StructElem + /S /Span + /P 1357 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [26] + /Pg 4929 0 R +>> +endobj + +1359 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1361 0 R 1360 0 R] +>> +endobj + +1360 0 obj +<< + /Type /StructElem + /S /Span + /P 1359 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [25] + /Pg 4929 0 R +>> +endobj + +1361 0 obj +<< + /Type /StructElem + /S /Strong + /P 1359 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [24] + /Pg 4929 0 R +>> +endobj + +1362 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [1363 0 R] +>> +endobj + +1363 0 obj +<< + /Type /StructElem + /S /Span + /P 1362 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [23] + /Pg 4929 0 R +>> +endobj + +1364 0 obj +<< + /Type /StructElem + /S /Div + /P 1223 0 R + /K [] +>> +endobj + +1365 0 obj +<< + /Type /StructElem + /S /P + /P 1222 0 R + /K [1366 0 R 22] + /Pg 4929 0 R +>> +endobj + +1366 0 obj +<< + /Type /StructElem + /S /Strong + /P 1365 0 R + /K [21] + /Pg 4929 0 R +>> +endobj + +1367 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1373 0 R 7 1372 0 R 9 1371 0 R 11 12 1370 0 R 14 15 1369 0 R 17 18 1368 0 R 20] + /Pg 4929 0 R +>> +endobj + +1368 0 obj +<< + /Type /StructElem + /S /Code + /P 1367 0 R + /K [19] + /Pg 4929 0 R +>> +endobj + +1369 0 obj +<< + /Type /StructElem + /S /Code + /P 1367 0 R + /K [16] + /Pg 4929 0 R +>> +endobj + +1370 0 obj +<< + /Type /StructElem + /S /Em + /P 1367 0 R + /K [13] + /Pg 4929 0 R +>> +endobj + +1371 0 obj +<< + /Type /StructElem + /S /Code + /P 1367 0 R + /K [10] + /Pg 4929 0 R +>> +endobj + +1372 0 obj +<< + /Type /StructElem + /S /Code + /P 1367 0 R + /K [8] + /Pg 4929 0 R +>> +endobj + +1373 0 obj +<< + /Type /StructElem + /S /Strong + /P 1367 0 R + /K [6] + /Pg 4929 0 R +>> +endobj + +1374 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3 4 5] + /Pg 4929 0 R +>> +endobj + +1375 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1595 0 R 1376 0 R] +>> +endobj + +1376 0 obj +<< + /Type /StructElem + /S /Div + /P 1375 0 R + /K [1594 0 R 1592 0 R 1589 0 R 1587 0 R 1586 0 R 1585 0 R 1581 0 R 1579 0 R 1578 0 R 1574 0 R 1572 0 R 1571 0 R 1566 0 R 1564 0 R 1563 0 R 1558 0 R 1556 0 R 1555 0 R 1554 0 R 1553 0 R 1543 0 R 1541 0 R 1540 0 R 1538 0 R 1536 0 R 1535 0 R 1534 0 R 1533 0 R 1529 0 R 1527 0 R 1526 0 R 1525 0 R 1520 0 R 1518 0 R 1517 0 R 1516 0 R 1515 0 R 1514 0 R 1504 0 R 1502 0 R 1501 0 R 1500 0 R 1499 0 R 1498 0 R 1497 0 R 1491 0 R 1489 0 R 1488 0 R 1487 0 R 1486 0 R 1485 0 R 1479 0 R 1477 0 R 1476 0 R 1475 0 R 1474 0 R 1473 0 R 1469 0 R 1467 0 R 1466 0 R 1465 0 R 1464 0 R 1458 0 R 1456 0 R 1455 0 R 1454 0 R 1453 0 R 1452 0 R 1451 0 R 1445 0 R 1443 0 R 1442 0 R 1441 0 R 1440 0 R 1439 0 R 1433 0 R 1431 0 R 1430 0 R 1429 0 R 1428 0 R 1427 0 R 1423 0 R 1421 0 R 1420 0 R 1419 0 R 1418 0 R 1416 0 R 1414 0 R 1413 0 R 1412 0 R 1411 0 R 1410 0 R 1409 0 R 1399 0 R 1397 0 R 1396 0 R 1393 0 R 1391 0 R 1390 0 R 1384 0 R 1382 0 R 1381 0 R 1378 0 R 1377 0 R] +>> +endobj + +1377 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1378 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1380 0 R 1379 0 R] +>> +endobj + +1379 0 obj +<< + /Type /StructElem + /S /Span + /P 1378 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2] + /Pg 4929 0 R +>> +endobj + +1380 0 obj +<< + /Type /StructElem + /S /Strong + /P 1378 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 4929 0 R +>> +endobj + +1381 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1382 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1383 0 R] +>> +endobj + +1383 0 obj +<< + /Type /StructElem + /S /Span + /P 1382 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 4929 0 R +>> +endobj + +1384 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1389 0 R 1388 0 R 1387 0 R 1386 0 R 1385 0 R] +>> +endobj + +1385 0 obj +<< + /Type /StructElem + /S /Span + /P 1384 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [169] + /Pg 4925 0 R +>> +endobj + +1386 0 obj +<< + /Type /StructElem + /S /Formula + /P 1384 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [168] + /Pg 4925 0 R +>> +endobj + +1387 0 obj +<< + /Type /StructElem + /S /Span + /P 1384 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [167] + /Pg 4925 0 R +>> +endobj + +1388 0 obj +<< + /Type /StructElem + /S /Formula + /P 1384 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [166] + /Pg 4925 0 R +>> +endobj + +1389 0 obj +<< + /Type /StructElem + /S /Span + /P 1384 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [165] + /Pg 4925 0 R +>> +endobj + +1390 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1391 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1392 0 R] +>> +endobj + +1392 0 obj +<< + /Type /StructElem + /S /Span + /P 1391 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [164] + /Pg 4925 0 R +>> +endobj + +1393 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1395 0 R 1394 0 R] +>> +endobj + +1394 0 obj +<< + /Type /StructElem + /S /Span + /P 1393 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [163] + /Pg 4925 0 R +>> +endobj + +1395 0 obj +<< + /Type /StructElem + /S /Strong + /P 1393 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [162] + /Pg 4925 0 R +>> +endobj + +1396 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1397 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1398 0 R] +>> +endobj + +1398 0 obj +<< + /Type /StructElem + /S /Span + /P 1397 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [161] + /Pg 4925 0 R +>> +endobj + +1399 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1408 0 R 1407 0 R 1406 0 R 1405 0 R 1404 0 R 1403 0 R 1402 0 R 1401 0 R 1400 0 R] +>> +endobj + +1400 0 obj +<< + /Type /StructElem + /S /Span + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [160] + /Pg 4925 0 R +>> +endobj + +1401 0 obj +<< + /Type /StructElem + /S /Formula + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [159] + /Pg 4925 0 R +>> +endobj + +1402 0 obj +<< + /Type /StructElem + /S /Span + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [158] + /Pg 4925 0 R +>> +endobj + +1403 0 obj +<< + /Type /StructElem + /S /Formula + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [157] + /Pg 4925 0 R +>> +endobj + +1404 0 obj +<< + /Type /StructElem + /S /Span + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [156] + /Pg 4925 0 R +>> +endobj + +1405 0 obj +<< + /Type /StructElem + /S /Formula + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [155] + /Pg 4925 0 R +>> +endobj + +1406 0 obj +<< + /Type /StructElem + /S /Span + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154] + /Pg 4925 0 R +>> +endobj + +1407 0 obj +<< + /Type /StructElem + /S /Formula + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [153] + /Pg 4925 0 R +>> +endobj + +1408 0 obj +<< + /Type /StructElem + /S /Span + /P 1399 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [152] + /Pg 4925 0 R +>> +endobj + +1409 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1410 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1411 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1412 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1413 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1414 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1415 0 R] +>> +endobj + +1415 0 obj +<< + /Type /StructElem + /S /Span + /P 1414 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [151] + /Pg 4925 0 R +>> +endobj + +1416 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1417 0 R] +>> +endobj + +1417 0 obj +<< + /Type /StructElem + /S /Strong + /P 1416 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [150] + /Pg 4925 0 R +>> +endobj + +1418 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1419 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1420 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1421 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1422 0 R] +>> +endobj + +1422 0 obj +<< + /Type /StructElem + /S /Span + /P 1421 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [149] + /Pg 4925 0 R +>> +endobj + +1423 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1426 0 R 1425 0 R 1424 0 R] +>> +endobj + +1424 0 obj +<< + /Type /StructElem + /S /Span + /P 1423 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [148] + /Pg 4925 0 R +>> +endobj + +1425 0 obj +<< + /Type /StructElem + /S /Formula + /P 1423 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [147] + /Pg 4925 0 R +>> +endobj + +1426 0 obj +<< + /Type /StructElem + /S /Span + /P 1423 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [146] + /Pg 4925 0 R +>> +endobj + +1427 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1428 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1429 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1430 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1431 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1432 0 R] +>> +endobj + +1432 0 obj +<< + /Type /StructElem + /S /Span + /P 1431 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [145] + /Pg 4925 0 R +>> +endobj + +1433 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1438 0 R 1437 0 R 1436 0 R 1435 0 R 1434 0 R] +>> +endobj + +1434 0 obj +<< + /Type /StructElem + /S /Span + /P 1433 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [144] + /Pg 4925 0 R +>> +endobj + +1435 0 obj +<< + /Type /StructElem + /S /Formula + /P 1433 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [143] + /Pg 4925 0 R +>> +endobj + +1436 0 obj +<< + /Type /StructElem + /S /Span + /P 1433 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [142] + /Pg 4925 0 R +>> +endobj + +1437 0 obj +<< + /Type /StructElem + /S /Formula + /P 1433 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [141] + /Pg 4925 0 R +>> +endobj + +1438 0 obj +<< + /Type /StructElem + /S /Span + /P 1433 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [140] + /Pg 4925 0 R +>> +endobj + +1439 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1440 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1441 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1442 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1443 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1444 0 R] +>> +endobj + +1444 0 obj +<< + /Type /StructElem + /S /Span + /P 1443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [139] + /Pg 4925 0 R +>> +endobj + +1445 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1450 0 R 1449 0 R 1448 0 R 1447 0 R 1446 0 R] +>> +endobj + +1446 0 obj +<< + /Type /StructElem + /S /Span + /P 1445 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [138] + /Pg 4925 0 R +>> +endobj + +1447 0 obj +<< + /Type /StructElem + /S /Formula + /P 1445 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [137] + /Pg 4925 0 R +>> +endobj + +1448 0 obj +<< + /Type /StructElem + /S /Span + /P 1445 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [136] + /Pg 4925 0 R +>> +endobj + +1449 0 obj +<< + /Type /StructElem + /S /Formula + /P 1445 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [135] + /Pg 4925 0 R +>> +endobj + +1450 0 obj +<< + /Type /StructElem + /S /Span + /P 1445 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [134] + /Pg 4925 0 R +>> +endobj + +1451 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1452 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1453 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1454 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1455 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1456 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1457 0 R] +>> +endobj + +1457 0 obj +<< + /Type /StructElem + /S /Span + /P 1456 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [133] + /Pg 4925 0 R +>> +endobj + +1458 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1463 0 R 1462 0 R 1461 0 R 1460 0 R 1459 0 R] +>> +endobj + +1459 0 obj +<< + /Type /StructElem + /S /Span + /P 1458 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [131] + /Pg 4925 0 R +>> +endobj + +1460 0 obj +<< + /Type /StructElem + /S /Strong + /P 1458 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [132] + /Pg 4925 0 R +>> +endobj + +1461 0 obj +<< + /Type /StructElem + /S /Formula + /P 1458 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [130] + /Pg 4925 0 R +>> +endobj + +1462 0 obj +<< + /Type /StructElem + /S /Span + /P 1458 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [129] + /Pg 4925 0 R +>> +endobj + +1463 0 obj +<< + /Type /StructElem + /S /Strong + /P 1458 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [128] + /Pg 4925 0 R +>> +endobj + +1464 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1465 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1466 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1467 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1468 0 R] +>> +endobj + +1468 0 obj +<< + /Type /StructElem + /S /Span + /P 1467 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [127] + /Pg 4925 0 R +>> +endobj + +1469 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1472 0 R 1471 0 R 1470 0 R] +>> +endobj + +1470 0 obj +<< + /Type /StructElem + /S /Span + /P 1469 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [126] + /Pg 4925 0 R +>> +endobj + +1471 0 obj +<< + /Type /StructElem + /S /Formula + /P 1469 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [125] + /Pg 4925 0 R +>> +endobj + +1472 0 obj +<< + /Type /StructElem + /S /Span + /P 1469 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [124] + /Pg 4925 0 R +>> +endobj + +1473 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1474 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1475 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1476 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1477 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1478 0 R] +>> +endobj + +1478 0 obj +<< + /Type /StructElem + /S /Span + /P 1477 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [123] + /Pg 4925 0 R +>> +endobj + +1479 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1484 0 R 1483 0 R 1482 0 R 1481 0 R 1480 0 R] +>> +endobj + +1480 0 obj +<< + /Type /StructElem + /S /Span + /P 1479 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [122] + /Pg 4925 0 R +>> +endobj + +1481 0 obj +<< + /Type /StructElem + /S /Formula + /P 1479 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [121] + /Pg 4925 0 R +>> +endobj + +1482 0 obj +<< + /Type /StructElem + /S /Span + /P 1479 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [120] + /Pg 4925 0 R +>> +endobj + +1483 0 obj +<< + /Type /StructElem + /S /Formula + /P 1479 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [119] + /Pg 4925 0 R +>> +endobj + +1484 0 obj +<< + /Type /StructElem + /S /Span + /P 1479 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [118] + /Pg 4925 0 R +>> +endobj + +1485 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1486 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1487 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1488 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1489 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1490 0 R] +>> +endobj + +1490 0 obj +<< + /Type /StructElem + /S /Span + /P 1489 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [117] + /Pg 4925 0 R +>> +endobj + +1491 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1496 0 R 1495 0 R 1494 0 R 1493 0 R 1492 0 R] +>> +endobj + +1492 0 obj +<< + /Type /StructElem + /S /Span + /P 1491 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [116] + /Pg 4925 0 R +>> +endobj + +1493 0 obj +<< + /Type /StructElem + /S /Formula + /P 1491 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [115] + /Pg 4925 0 R +>> +endobj + +1494 0 obj +<< + /Type /StructElem + /S /Span + /P 1491 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [114] + /Pg 4925 0 R +>> +endobj + +1495 0 obj +<< + /Type /StructElem + /S /Formula + /P 1491 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [113] + /Pg 4925 0 R +>> +endobj + +1496 0 obj +<< + /Type /StructElem + /S /Span + /P 1491 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [112] + /Pg 4925 0 R +>> +endobj + +1497 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1498 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1499 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1500 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1501 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1502 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1503 0 R] +>> +endobj + +1503 0 obj +<< + /Type /StructElem + /S /Span + /P 1502 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [111] + /Pg 4925 0 R +>> +endobj + +1504 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1513 0 R 1512 0 R 1511 0 R 1510 0 R 1509 0 R 1508 0 R 1507 0 R 1506 0 R 1505 0 R] +>> +endobj + +1505 0 obj +<< + /Type /StructElem + /S /Span + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [109] + /Pg 4925 0 R +>> +endobj + +1506 0 obj +<< + /Type /StructElem + /S /Strong + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [110] + /Pg 4925 0 R +>> +endobj + +1507 0 obj +<< + /Type /StructElem + /S /Formula + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [108] + /Pg 4925 0 R +>> +endobj + +1508 0 obj +<< + /Type /StructElem + /S /Span + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [107] + /Pg 4925 0 R +>> +endobj + +1509 0 obj +<< + /Type /StructElem + /S /Formula + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [106] + /Pg 4925 0 R +>> +endobj + +1510 0 obj +<< + /Type /StructElem + /S /Span + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [105] + /Pg 4925 0 R +>> +endobj + +1511 0 obj +<< + /Type /StructElem + /S /Formula + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [104] + /Pg 4925 0 R +>> +endobj + +1512 0 obj +<< + /Type /StructElem + /S /Span + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [103] + /Pg 4925 0 R +>> +endobj + +1513 0 obj +<< + /Type /StructElem + /S /Strong + /P 1504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [102] + /Pg 4925 0 R +>> +endobj + +1514 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1515 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1516 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1517 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1518 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1519 0 R] +>> +endobj + +1519 0 obj +<< + /Type /StructElem + /S /Span + /P 1518 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [101] + /Pg 4925 0 R +>> +endobj + +1520 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1524 0 R 1523 0 R 1522 0 R 1521 0 R] +>> +endobj + +1521 0 obj +<< + /Type /StructElem + /S /Span + /P 1520 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [97 99] + /Pg 4925 0 R +>> +endobj + +1522 0 obj +<< + /Type /StructElem + /S /Strong + /P 1520 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [100] + /Pg 4925 0 R +>> +endobj + +1523 0 obj +<< + /Type /StructElem + /S /Strong + /P 1520 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [98] + /Pg 4925 0 R +>> +endobj + +1524 0 obj +<< + /Type /StructElem + /S /Strong + /P 1520 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [96] + /Pg 4925 0 R +>> +endobj + +1525 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1526 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1527 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1528 0 R] +>> +endobj + +1528 0 obj +<< + /Type /StructElem + /S /Span + /P 1527 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [95] + /Pg 4925 0 R +>> +endobj + +1529 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1532 0 R 1531 0 R 1530 0 R] +>> +endobj + +1530 0 obj +<< + /Type /StructElem + /S /Span + /P 1529 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [94] + /Pg 4925 0 R +>> +endobj + +1531 0 obj +<< + /Type /StructElem + /S /Formula + /P 1529 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4925 0 R +>> +endobj + +1532 0 obj +<< + /Type /StructElem + /S /Span + /P 1529 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [92] + /Pg 4925 0 R +>> +endobj + +1533 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1534 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1535 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1536 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1537 0 R] +>> +endobj + +1537 0 obj +<< + /Type /StructElem + /S /Span + /P 1536 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [91] + /Pg 4925 0 R +>> +endobj + +1538 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1539 0 R] +>> +endobj + +1539 0 obj +<< + /Type /StructElem + /S /Strong + /P 1538 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [90] + /Pg 4925 0 R +>> +endobj + +1540 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1541 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1542 0 R] +>> +endobj + +1542 0 obj +<< + /Type /StructElem + /S /Span + /P 1541 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [89] + /Pg 4925 0 R +>> +endobj + +1543 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1552 0 R 1551 0 R 1550 0 R 1549 0 R 1548 0 R 1547 0 R 1546 0 R 1545 0 R 1544 0 R] +>> +endobj + +1544 0 obj +<< + /Type /StructElem + /S /Span + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [88] + /Pg 4925 0 R +>> +endobj + +1545 0 obj +<< + /Type /StructElem + /S /Formula + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [87] + /Pg 4925 0 R +>> +endobj + +1546 0 obj +<< + /Type /StructElem + /S /Span + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [86] + /Pg 4925 0 R +>> +endobj + +1547 0 obj +<< + /Type /StructElem + /S /Formula + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [85] + /Pg 4925 0 R +>> +endobj + +1548 0 obj +<< + /Type /StructElem + /S /Span + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [84] + /Pg 4925 0 R +>> +endobj + +1549 0 obj +<< + /Type /StructElem + /S /Formula + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [83] + /Pg 4925 0 R +>> +endobj + +1550 0 obj +<< + /Type /StructElem + /S /Span + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [82] + /Pg 4925 0 R +>> +endobj + +1551 0 obj +<< + /Type /StructElem + /S /Formula + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [81] + /Pg 4925 0 R +>> +endobj + +1552 0 obj +<< + /Type /StructElem + /S /Span + /P 1543 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [80] + /Pg 4925 0 R +>> +endobj + +1553 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1554 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1555 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1556 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1557 0 R] +>> +endobj + +1557 0 obj +<< + /Type /StructElem + /S /Span + /P 1556 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [79] + /Pg 4925 0 R +>> +endobj + +1558 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1562 0 R 1561 0 R 1560 0 R 1559 0 R] +>> +endobj + +1559 0 obj +<< + /Type /StructElem + /S /Span + /P 1558 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [75 77] + /Pg 4925 0 R +>> +endobj + +1560 0 obj +<< + /Type /StructElem + /S /Strong + /P 1558 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [78] + /Pg 4925 0 R +>> +endobj + +1561 0 obj +<< + /Type /StructElem + /S /Strong + /P 1558 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [76] + /Pg 4925 0 R +>> +endobj + +1562 0 obj +<< + /Type /StructElem + /S /Strong + /P 1558 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [74] + /Pg 4925 0 R +>> +endobj + +1563 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1564 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1565 0 R] +>> +endobj + +1565 0 obj +<< + /Type /StructElem + /S /Span + /P 1564 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [73] + /Pg 4925 0 R +>> +endobj + +1566 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1570 0 R 1569 0 R 1568 0 R 1567 0 R] +>> +endobj + +1567 0 obj +<< + /Type /StructElem + /S /Formula + /P 1566 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [72] + /Pg 4925 0 R +>> +endobj + +1568 0 obj +<< + /Type /StructElem + /S /Span + /P 1566 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [71] + /Pg 4925 0 R +>> +endobj + +1569 0 obj +<< + /Type /StructElem + /S /Formula + /P 1566 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [70] + /Pg 4925 0 R +>> +endobj + +1570 0 obj +<< + /Type /StructElem + /S /Span + /P 1566 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [69] + /Pg 4925 0 R +>> +endobj + +1571 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1572 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1573 0 R] +>> +endobj + +1573 0 obj +<< + /Type /StructElem + /S /Span + /P 1572 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [68] + /Pg 4925 0 R +>> +endobj + +1574 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1577 0 R 1576 0 R 1575 0 R] +>> +endobj + +1575 0 obj +<< + /Type /StructElem + /S /Span + /P 1574 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [67] + /Pg 4925 0 R +>> +endobj + +1576 0 obj +<< + /Type /StructElem + /S /Formula + /P 1574 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [66] + /Pg 4925 0 R +>> +endobj + +1577 0 obj +<< + /Type /StructElem + /S /Span + /P 1574 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [65] + /Pg 4925 0 R +>> +endobj + +1578 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1579 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1580 0 R] +>> +endobj + +1580 0 obj +<< + /Type /StructElem + /S /Span + /P 1579 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [64] + /Pg 4925 0 R +>> +endobj + +1581 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1584 0 R 1583 0 R 1582 0 R] +>> +endobj + +1582 0 obj +<< + /Type /StructElem + /S /Span + /P 1581 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [63] + /Pg 4925 0 R +>> +endobj + +1583 0 obj +<< + /Type /StructElem + /S /Formula + /P 1581 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [62] + /Pg 4925 0 R +>> +endobj + +1584 0 obj +<< + /Type /StructElem + /S /Span + /P 1581 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [61] + /Pg 4925 0 R +>> +endobj + +1585 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1586 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1587 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1588 0 R] +>> +endobj + +1588 0 obj +<< + /Type /StructElem + /S /Span + /P 1587 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [60] + /Pg 4925 0 R +>> +endobj + +1589 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1591 0 R 1590 0 R] +>> +endobj + +1590 0 obj +<< + /Type /StructElem + /S /Span + /P 1589 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [59] + /Pg 4925 0 R +>> +endobj + +1591 0 obj +<< + /Type /StructElem + /S /Strong + /P 1589 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [58] + /Pg 4925 0 R +>> +endobj + +1592 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [1593 0 R] +>> +endobj + +1593 0 obj +<< + /Type /StructElem + /S /Span + /P 1592 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [57] + /Pg 4925 0 R +>> +endobj + +1594 0 obj +<< + /Type /StructElem + /S /Div + /P 1376 0 R + /K [] +>> +endobj + +1595 0 obj +<< + /Type /StructElem + /S /P + /P 1375 0 R + /K [1596 0 R 56] + /Pg 4925 0 R +>> +endobj + +1596 0 obj +<< + /Type /StructElem + /S /Strong + /P 1595 0 R + /K [55] + /Pg 4925 0 R +>> +endobj + +1597 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1604 0 R 39 1603 0 R 41 42 1602 0 R 44 45 1601 0 R 47 48 1600 0 R 50 1599 0 R 52 1598 0 R 54] + /Pg 4925 0 R +>> +endobj + +1598 0 obj +<< + /Type /StructElem + /S /Code + /P 1597 0 R + /K [53] + /Pg 4925 0 R +>> +endobj + +1599 0 obj +<< + /Type /StructElem + /S /Code + /P 1597 0 R + /K [51] + /Pg 4925 0 R +>> +endobj + +1600 0 obj +<< + /Type /StructElem + /S /Code + /P 1597 0 R + /K [49] + /Pg 4925 0 R +>> +endobj + +1601 0 obj +<< + /Type /StructElem + /S /Code + /P 1597 0 R + /K [46] + /Pg 4925 0 R +>> +endobj + +1602 0 obj +<< + /Type /StructElem + /S /Em + /P 1597 0 R + /K [43] + /Pg 4925 0 R +>> +endobj + +1603 0 obj +<< + /Type /StructElem + /S /Em + /P 1597 0 R + /K [40] + /Pg 4925 0 R +>> +endobj + +1604 0 obj +<< + /Type /StructElem + /S /Strong + /P 1597 0 R + /K [38] + /Pg 4925 0 R +>> +endobj + +1605 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [33 1607 0 R 35 1606 0 R 37] + /Pg 4925 0 R +>> +endobj + +1606 0 obj +<< + /Type /StructElem + /S /Em + /P 1605 0 R + /K [36] + /Pg 4925 0 R +>> +endobj + +1607 0 obj +<< + /Type /StructElem + /S /Code + /P 1605 0 R + /K [34] + /Pg 4925 0 R +>> +endobj + +1608 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [15 1611 0 R 17 18 19 20 21 22 23 24 25 1610 0 R 27 28 29 1609 0 R 31 32] + /Pg 4925 0 R +>> +endobj + +1609 0 obj +<< + /Type /StructElem + /S /Link + /P 1608 0 R + /K [30 << + /Type /OBJR + /Pg 4925 0 R + /Obj 4924 0 R + >>] + /Pg 4925 0 R +>> +endobj + +1610 0 obj +<< + /Type /StructElem + /S /Link + /P 1608 0 R + /K [26 << + /Type /OBJR + /Pg 4925 0 R + /Obj 4923 0 R + >>] + /Pg 4925 0 R +>> +endobj + +1611 0 obj +<< + /Type /StructElem + /S /Em + /P 1608 0 R + /K [16] + /Pg 4925 0 R +>> +endobj + +1612 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Hot Module Replacement) + /K [13 14] + /Pg 4925 0 R +>> +endobj + +1613 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [8 1614 0 R 10 11 12] + /Pg 4925 0 R +>> +endobj + +1614 0 obj +<< + /Type /StructElem + /S /Code + /P 1613 0 R + /K [9] + /Pg 4925 0 R +>> +endobj + +1615 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [1635 0 R 1631 0 R 1627 0 R 1620 0 R 1616 0 R] +>> +endobj + +1616 0 obj +<< + /Type /StructElem + /S /LI + /P 1615 0 R + /K [1619 0 R 1617 0 R] +>> +endobj + +1617 0 obj +<< + /Type /StructElem + /S /LBody + /P 1616 0 R + /K [1618 0 R 7] + /Pg 4925 0 R +>> +endobj + +1618 0 obj +<< + /Type /StructElem + /S /Code + /P 1617 0 R + /K [6] + /Pg 4925 0 R +>> +endobj + +1619 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1616 0 R + /K [5] + /Pg 4925 0 R +>> +endobj + +1620 0 obj +<< + /Type /StructElem + /S /LI + /P 1615 0 R + /K [1626 0 R 1621 0 R] +>> +endobj + +1621 0 obj +<< + /Type /StructElem + /S /LBody + /P 1620 0 R + /K [1625 0 R 100 101 102 1624 0 R 104 1623 0 R 106 << + /Type /MCR + /MCID 0 + /Pg 4925 0 R + >> 1622 0 R << + /Type /MCR + /MCID 2 + /Pg 4925 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 4925 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4925 0 R + >>] + /Pg 4921 0 R +>> +endobj + +1622 0 obj +<< + /Type /StructElem + /S /Code + /P 1621 0 R + /K [1] + /Pg 4925 0 R +>> +endobj + +1623 0 obj +<< + /Type /StructElem + /S /Code + /P 1621 0 R + /K [105] + /Pg 4921 0 R +>> +endobj + +1624 0 obj +<< + /Type /StructElem + /S /Code + /P 1621 0 R + /K [103] + /Pg 4921 0 R +>> +endobj + +1625 0 obj +<< + /Type /StructElem + /S /Code + /P 1621 0 R + /K [99] + /Pg 4921 0 R +>> +endobj + +1626 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1620 0 R + /K [98] + /Pg 4921 0 R +>> +endobj + +1627 0 obj +<< + /Type /StructElem + /S /LI + /P 1615 0 R + /K [1630 0 R 1628 0 R] +>> +endobj + +1628 0 obj +<< + /Type /StructElem + /S /LBody + /P 1627 0 R + /K [1629 0 R 96 97] + /Pg 4921 0 R +>> +endobj + +1629 0 obj +<< + /Type /StructElem + /S /Code + /P 1628 0 R + /K [95] + /Pg 4921 0 R +>> +endobj + +1630 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1627 0 R + /K [94] + /Pg 4921 0 R +>> +endobj + +1631 0 obj +<< + /Type /StructElem + /S /LI + /P 1615 0 R + /K [1634 0 R 1632 0 R] +>> +endobj + +1632 0 obj +<< + /Type /StructElem + /S /LBody + /P 1631 0 R + /K [1633 0 R 92 93] + /Pg 4921 0 R +>> +endobj + +1633 0 obj +<< + /Type /StructElem + /S /Code + /P 1632 0 R + /K [91] + /Pg 4921 0 R +>> +endobj + +1634 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1631 0 R + /K [90] + /Pg 4921 0 R +>> +endobj + +1635 0 obj +<< + /Type /StructElem + /S /LI + /P 1615 0 R + /K [1639 0 R 1636 0 R] +>> +endobj + +1636 0 obj +<< + /Type /StructElem + /S /LBody + /P 1635 0 R + /K [1638 0 R 87 1637 0 R 89] + /Pg 4921 0 R +>> +endobj + +1637 0 obj +<< + /Type /StructElem + /S /Code + /P 1636 0 R + /K [88] + /Pg 4921 0 R +>> +endobj + +1638 0 obj +<< + /Type /StructElem + /S /Code + /P 1636 0 R + /K [86] + /Pg 4921 0 R +>> +endobj + +1639 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1635 0 R + /K [85] + /Pg 4921 0 R +>> +endobj + +1640 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [82 83 84] + /Pg 4921 0 R +>> +endobj + +1641 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [70 1644 0 R 72 73 74 75 1643 0 R 77 78 1642 0 R 80 81] + /Pg 4921 0 R +>> +endobj + +1642 0 obj +<< + /Type /StructElem + /S /Code + /P 1641 0 R + /K [79] + /Pg 4921 0 R +>> +endobj + +1643 0 obj +<< + /Type /StructElem + /S /Code + /P 1641 0 R + /K [76] + /Pg 4921 0 R +>> +endobj + +1644 0 obj +<< + /Type /StructElem + /S /Em + /P 1641 0 R + /K [71] + /Pg 4921 0 R +>> +endobj + +1645 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1673 0 R 1647 0 R 1646 0 R] +>> +endobj + +1646 0 obj +<< + /Type /StructElem + /S /P + /P 1645 0 R + /K [68 69] + /Pg 4921 0 R +>> +endobj + +1647 0 obj +<< + /Type /StructElem + /S /L + /P 1645 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [1669 0 R 1665 0 R 1661 0 R 1657 0 R 1652 0 R 1648 0 R] +>> +endobj + +1648 0 obj +<< + /Type /StructElem + /S /LI + /P 1647 0 R + /K [1651 0 R 1649 0 R] +>> +endobj + +1649 0 obj +<< + /Type /StructElem + /S /LBody + /P 1648 0 R + /K [1650 0 R 67] + /Pg 4921 0 R +>> +endobj + +1650 0 obj +<< + /Type /StructElem + /S /Code + /P 1649 0 R + /K [66] + /Pg 4921 0 R +>> +endobj + +1651 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1648 0 R + /K [65] + /Pg 4921 0 R +>> +endobj + +1652 0 obj +<< + /Type /StructElem + /S /LI + /P 1647 0 R + /K [1656 0 R 1653 0 R] +>> +endobj + +1653 0 obj +<< + /Type /StructElem + /S /LBody + /P 1652 0 R + /K [1655 0 R 62 1654 0 R 64] + /Pg 4921 0 R +>> +endobj + +1654 0 obj +<< + /Type /StructElem + /S /Code + /P 1653 0 R + /K [63] + /Pg 4921 0 R +>> +endobj + +1655 0 obj +<< + /Type /StructElem + /S /Code + /P 1653 0 R + /K [61] + /Pg 4921 0 R +>> +endobj + +1656 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1652 0 R + /K [60] + /Pg 4921 0 R +>> +endobj + +1657 0 obj +<< + /Type /StructElem + /S /LI + /P 1647 0 R + /K [1660 0 R 1658 0 R] +>> +endobj + +1658 0 obj +<< + /Type /StructElem + /S /LBody + /P 1657 0 R + /K [1659 0 R 59] + /Pg 4921 0 R +>> +endobj + +1659 0 obj +<< + /Type /StructElem + /S /Code + /P 1658 0 R + /K [58] + /Pg 4921 0 R +>> +endobj + +1660 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1657 0 R + /K [57] + /Pg 4921 0 R +>> +endobj + +1661 0 obj +<< + /Type /StructElem + /S /LI + /P 1647 0 R + /K [1664 0 R 1662 0 R] +>> +endobj + +1662 0 obj +<< + /Type /StructElem + /S /LBody + /P 1661 0 R + /K [1663 0 R 56] + /Pg 4921 0 R +>> +endobj + +1663 0 obj +<< + /Type /StructElem + /S /Code + /P 1662 0 R + /K [55] + /Pg 4921 0 R +>> +endobj + +1664 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1661 0 R + /K [54] + /Pg 4921 0 R +>> +endobj + +1665 0 obj +<< + /Type /StructElem + /S /LI + /P 1647 0 R + /K [1668 0 R 1666 0 R] +>> +endobj + +1666 0 obj +<< + /Type /StructElem + /S /LBody + /P 1665 0 R + /K [1667 0 R 53] + /Pg 4921 0 R +>> +endobj + +1667 0 obj +<< + /Type /StructElem + /S /Code + /P 1666 0 R + /K [52] + /Pg 4921 0 R +>> +endobj + +1668 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1665 0 R + /K [51] + /Pg 4921 0 R +>> +endobj + +1669 0 obj +<< + /Type /StructElem + /S /LI + /P 1647 0 R + /K [1672 0 R 1670 0 R] +>> +endobj + +1670 0 obj +<< + /Type /StructElem + /S /LBody + /P 1669 0 R + /K [1671 0 R 50] + /Pg 4921 0 R +>> +endobj + +1671 0 obj +<< + /Type /StructElem + /S /Code + /P 1670 0 R + /K [49] + /Pg 4921 0 R +>> +endobj + +1672 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1669 0 R + /K [48] + /Pg 4921 0 R +>> +endobj + +1673 0 obj +<< + /Type /StructElem + /S /P + /P 1645 0 R + /K [1675 0 R 45 1674 0 R 47] + /Pg 4921 0 R +>> +endobj + +1674 0 obj +<< + /Type /StructElem + /S /Em + /P 1673 0 R + /K [46] + /Pg 4921 0 R +>> +endobj + +1675 0 obj +<< + /Type /StructElem + /S /Strong + /P 1673 0 R + /K [42 43 44] + /Pg 4921 0 R +>> +endobj + +1676 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [34 35 1678 0 R 37 1677 0 R 39 40 41] + /Pg 4921 0 R +>> +endobj + +1677 0 obj +<< + /Type /StructElem + /S /Em + /P 1676 0 R + /K [38] + /Pg 4921 0 R +>> +endobj + +1678 0 obj +<< + /Type /StructElem + /S /Link + /P 1676 0 R + /K [36 << + /Type /OBJR + /Pg 4921 0 R + /Obj 4920 0 R + >>] + /Pg 4921 0 R +>> +endobj + +1679 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Declarative Configuration Layer) + /K [32 33] + /Pg 4921 0 R +>> +endobj + +1680 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [11 1686 0 R 13 14 15 1685 0 R 17 1684 0 R 19 1683 0 R 21 1682 0 R 24 25 1681 0 R 27 28 29 30 31] + /Pg 4921 0 R +>> +endobj + +1681 0 obj +<< + /Type /StructElem + /S /Em + /P 1680 0 R + /K [26] + /Pg 4921 0 R +>> +endobj + +1682 0 obj +<< + /Type /StructElem + /S /Em + /P 1680 0 R + /K [22 23] + /Pg 4921 0 R +>> +endobj + +1683 0 obj +<< + /Type /StructElem + /S /Code + /P 1680 0 R + /K [20] + /Pg 4921 0 R +>> +endobj + +1684 0 obj +<< + /Type /StructElem + /S /Code + /P 1680 0 R + /K [18] + /Pg 4921 0 R +>> +endobj + +1685 0 obj +<< + /Type /StructElem + /S /Code + /P 1680 0 R + /K [16] + /Pg 4921 0 R +>> +endobj + +1686 0 obj +<< + /Type /StructElem + /S /Em + /P 1680 0 R + /K [12] + /Pg 4921 0 R +>> +endobj + +1687 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Component Loader) + /K [9 10] + /Pg 4921 0 R +>> +endobj + +1688 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [152 1693 0 R 154 155 1692 0 R 157 << + /Type /MCR + /MCID 0 + /Pg 4921 0 R + >> 1691 0 R << + /Type /MCR + /MCID 2 + /Pg 4921 0 R + >> 1690 0 R << + /Type /MCR + /MCID 4 + /Pg 4921 0 R + >> 1689 0 R << + /Type /MCR + /MCID 6 + /Pg 4921 0 R + >> << + /Type /MCR + /MCID 7 + /Pg 4921 0 R + >> << + /Type /MCR + /MCID 8 + /Pg 4921 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1689 0 obj +<< + /Type /StructElem + /S /Link + /P 1688 0 R + /K [5 << + /Type /OBJR + /Pg 4921 0 R + /Obj 4919 0 R + >>] + /Pg 4921 0 R +>> +endobj + +1690 0 obj +<< + /Type /StructElem + /S /Formula + /P 1688 0 R + /K [3] + /Pg 4921 0 R +>> +endobj + +1691 0 obj +<< + /Type /StructElem + /S /Code + /P 1688 0 R + /K [1] + /Pg 4921 0 R +>> +endobj + +1692 0 obj +<< + /Type /StructElem + /S /Formula + /P 1688 0 R + /K [156] + /Pg 4917 0 R +>> +endobj + +1693 0 obj +<< + /Type /StructElem + /S /Em + /P 1688 0 R + /K [153] + /Pg 4917 0 R +>> +endobj + +1694 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1705 0 R 124 125 1704 0 R 127 1703 0 R 129 1702 0 R 131 1701 0 R 133 134 135 1700 0 R 137 1699 0 R 139 140 1698 0 R 142 143 1697 0 R 145 146 1696 0 R 148 149 1695 0 R 151] + /Pg 4917 0 R +>> +endobj + +1695 0 obj +<< + /Type /StructElem + /S /Link + /P 1694 0 R + /K [150 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4916 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1696 0 obj +<< + /Type /StructElem + /S /Code + /P 1694 0 R + /K [147] + /Pg 4917 0 R +>> +endobj + +1697 0 obj +<< + /Type /StructElem + /S /Formula + /P 1694 0 R + /K [144] + /Pg 4917 0 R +>> +endobj + +1698 0 obj +<< + /Type /StructElem + /S /Em + /P 1694 0 R + /K [141] + /Pg 4917 0 R +>> +endobj + +1699 0 obj +<< + /Type /StructElem + /S /Code + /P 1694 0 R + /K [138] + /Pg 4917 0 R +>> +endobj + +1700 0 obj +<< + /Type /StructElem + /S /Code + /P 1694 0 R + /K [136] + /Pg 4917 0 R +>> +endobj + +1701 0 obj +<< + /Type /StructElem + /S /Link + /P 1694 0 R + /K [132 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4915 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1702 0 obj +<< + /Type /StructElem + /S /Code + /P 1694 0 R + /K [130] + /Pg 4917 0 R +>> +endobj + +1703 0 obj +<< + /Type /StructElem + /S /Code + /P 1694 0 R + /K [128] + /Pg 4917 0 R +>> +endobj + +1704 0 obj +<< + /Type /StructElem + /S /Code + /P 1694 0 R + /K [126] + /Pg 4917 0 R +>> +endobj + +1705 0 obj +<< + /Type /StructElem + /S /Link + /P 1694 0 R + /K [123 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4914 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1706 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1760 0 R 1707 0 R] +>> +endobj + +1707 0 obj +<< + /Type /StructElem + /S /Div + /P 1706 0 R + /K [1759 0 R 1757 0 R 1754 0 R 1752 0 R 1751 0 R 1750 0 R 1746 0 R 1744 0 R 1743 0 R 1741 0 R 1739 0 R 1738 0 R 1737 0 R 1736 0 R 1729 0 R 1727 0 R 1726 0 R 1725 0 R 1717 0 R 1715 0 R 1714 0 R 1713 0 R 1709 0 R 1708 0 R] +>> +endobj + +1708 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1709 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1712 0 R 1711 0 R 1710 0 R] +>> +endobj + +1710 0 obj +<< + /Type /StructElem + /S /Span + /P 1709 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [122] + /Pg 4917 0 R +>> +endobj + +1711 0 obj +<< + /Type /StructElem + /S /Formula + /P 1709 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [121] + /Pg 4917 0 R +>> +endobj + +1712 0 obj +<< + /Type /StructElem + /S /Span + /P 1709 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [120] + /Pg 4917 0 R +>> +endobj + +1713 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1714 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1715 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1716 0 R] +>> +endobj + +1716 0 obj +<< + /Type /StructElem + /S /Span + /P 1715 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [119] + /Pg 4917 0 R +>> +endobj + +1717 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1724 0 R 1723 0 R 1722 0 R 1721 0 R 1720 0 R 1719 0 R 1718 0 R] +>> +endobj + +1718 0 obj +<< + /Type /StructElem + /S /Code + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [118] + /Pg 4917 0 R +>> +endobj + +1719 0 obj +<< + /Type /StructElem + /S /Span + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [113 115 117] + /Pg 4917 0 R +>> +endobj + +1720 0 obj +<< + /Type /StructElem + /S /Strong + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [116] + /Pg 4917 0 R +>> +endobj + +1721 0 obj +<< + /Type /StructElem + /S /Strong + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [114] + /Pg 4917 0 R +>> +endobj + +1722 0 obj +<< + /Type /StructElem + /S /Formula + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [112] + /Pg 4917 0 R +>> +endobj + +1723 0 obj +<< + /Type /StructElem + /S /Span + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [111] + /Pg 4917 0 R +>> +endobj + +1724 0 obj +<< + /Type /StructElem + /S /Strong + /P 1717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [110] + /Pg 4917 0 R +>> +endobj + +1725 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1726 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1727 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1728 0 R] +>> +endobj + +1728 0 obj +<< + /Type /StructElem + /S /Span + /P 1727 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [109] + /Pg 4917 0 R +>> +endobj + +1729 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1735 0 R 1734 0 R 1733 0 R 1732 0 R 1731 0 R 1730 0 R] +>> +endobj + +1730 0 obj +<< + /Type /StructElem + /S /Span + /P 1729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [104 106 108] + /Pg 4917 0 R +>> +endobj + +1731 0 obj +<< + /Type /StructElem + /S /Strong + /P 1729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [107] + /Pg 4917 0 R +>> +endobj + +1732 0 obj +<< + /Type /StructElem + /S /Strong + /P 1729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [105] + /Pg 4917 0 R +>> +endobj + +1733 0 obj +<< + /Type /StructElem + /S /Formula + /P 1729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [103] + /Pg 4917 0 R +>> +endobj + +1734 0 obj +<< + /Type /StructElem + /S /Span + /P 1729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [102] + /Pg 4917 0 R +>> +endobj + +1735 0 obj +<< + /Type /StructElem + /S /Strong + /P 1729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [101] + /Pg 4917 0 R +>> +endobj + +1736 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1737 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1738 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1739 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1740 0 R] +>> +endobj + +1740 0 obj +<< + /Type /StructElem + /S /Span + /P 1739 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [100] + /Pg 4917 0 R +>> +endobj + +1741 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1742 0 R] +>> +endobj + +1742 0 obj +<< + /Type /StructElem + /S /Strong + /P 1741 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [99] + /Pg 4917 0 R +>> +endobj + +1743 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1744 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1745 0 R] +>> +endobj + +1745 0 obj +<< + /Type /StructElem + /S /Span + /P 1744 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [98] + /Pg 4917 0 R +>> +endobj + +1746 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1749 0 R 1748 0 R 1747 0 R] +>> +endobj + +1747 0 obj +<< + /Type /StructElem + /S /Span + /P 1746 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [97] + /Pg 4917 0 R +>> +endobj + +1748 0 obj +<< + /Type /StructElem + /S /Formula + /P 1746 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [96] + /Pg 4917 0 R +>> +endobj + +1749 0 obj +<< + /Type /StructElem + /S /Span + /P 1746 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [95] + /Pg 4917 0 R +>> +endobj + +1750 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1751 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1752 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1753 0 R] +>> +endobj + +1753 0 obj +<< + /Type /StructElem + /S /Span + /P 1752 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [94] + /Pg 4917 0 R +>> +endobj + +1754 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1756 0 R 1755 0 R] +>> +endobj + +1755 0 obj +<< + /Type /StructElem + /S /Span + /P 1754 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4917 0 R +>> +endobj + +1756 0 obj +<< + /Type /StructElem + /S /Strong + /P 1754 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [92] + /Pg 4917 0 R +>> +endobj + +1757 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [1758 0 R] +>> +endobj + +1758 0 obj +<< + /Type /StructElem + /S /Span + /P 1757 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [91] + /Pg 4917 0 R +>> +endobj + +1759 0 obj +<< + /Type /StructElem + /S /Div + /P 1707 0 R + /K [] +>> +endobj + +1760 0 obj +<< + /Type /StructElem + /S /P + /P 1706 0 R + /K [1761 0 R 90] + /Pg 4917 0 R +>> +endobj + +1761 0 obj +<< + /Type /StructElem + /S /Strong + /P 1760 0 R + /K [89] + /Pg 4917 0 R +>> +endobj + +1762 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [61 1773 0 R 63 1772 0 R 65 1771 0 R 67 1770 0 R 69 70 1769 0 R 72 73 1768 0 R 75 76 1767 0 R 78 79 1766 0 R 81 1765 0 R 83 84 1764 0 R 86 1763 0 R 88] + /Pg 4917 0 R +>> +endobj + +1763 0 obj +<< + /Type /StructElem + /S /Link + /P 1762 0 R + /K [87 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4913 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1764 0 obj +<< + /Type /StructElem + /S /Code + /P 1762 0 R + /K [85] + /Pg 4917 0 R +>> +endobj + +1765 0 obj +<< + /Type /StructElem + /S /Link + /P 1762 0 R + /K [82 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4912 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1766 0 obj +<< + /Type /StructElem + /S /Code + /P 1762 0 R + /K [80] + /Pg 4917 0 R +>> +endobj + +1767 0 obj +<< + /Type /StructElem + /S /Code + /P 1762 0 R + /K [77] + /Pg 4917 0 R +>> +endobj + +1768 0 obj +<< + /Type /StructElem + /S /Code + /P 1762 0 R + /K [74] + /Pg 4917 0 R +>> +endobj + +1769 0 obj +<< + /Type /StructElem + /S /Em + /P 1762 0 R + /K [71] + /Pg 4917 0 R +>> +endobj + +1770 0 obj +<< + /Type /StructElem + /S /Code + /P 1762 0 R + /K [68] + /Pg 4917 0 R +>> +endobj + +1771 0 obj +<< + /Type /StructElem + /S /Code + /P 1762 0 R + /K [66] + /Pg 4917 0 R +>> +endobj + +1772 0 obj +<< + /Type /StructElem + /S /Em + /P 1762 0 R + /K [64] + /Pg 4917 0 R +>> +endobj + +1773 0 obj +<< + /Type /StructElem + /S /Link + /P 1762 0 R + /K [62 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4911 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1774 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Context Access) + /K [59 60] + /Pg 4917 0 R +>> +endobj + +1775 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [43 1781 0 R 45 1780 0 R 47 1779 0 R 49 1778 0 R 51 52 1777 0 R 54 55 56 1776 0 R 58] + /Pg 4917 0 R +>> +endobj + +1776 0 obj +<< + /Type /StructElem + /S /Link + /P 1775 0 R + /K [57 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4910 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1777 0 obj +<< + /Type /StructElem + /S /Link + /P 1775 0 R + /K [53 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4909 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1778 0 obj +<< + /Type /StructElem + /S /Em + /P 1775 0 R + /K [50] + /Pg 4917 0 R +>> +endobj + +1779 0 obj +<< + /Type /StructElem + /S /Code + /P 1775 0 R + /K [48] + /Pg 4917 0 R +>> +endobj + +1780 0 obj +<< + /Type /StructElem + /S /Code + /P 1775 0 R + /K [46] + /Pg 4917 0 R +>> +endobj + +1781 0 obj +<< + /Type /StructElem + /S /Em + /P 1775 0 R + /K [44] + /Pg 4917 0 R +>> +endobj + +1782 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [34 35 1785 0 R 37 1784 0 R 39 1783 0 R 41 42] + /Pg 4917 0 R +>> +endobj + +1783 0 obj +<< + /Type /StructElem + /S /Link + /P 1782 0 R + /K [40 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4908 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1784 0 obj +<< + /Type /StructElem + /S /Code + /P 1782 0 R + /K [38] + /Pg 4917 0 R +>> +endobj + +1785 0 obj +<< + /Type /StructElem + /S /Link + /P 1782 0 R + /K [36 << + /Type /OBJR + /Pg 4917 0 R + /Obj 4907 0 R + >>] + /Pg 4917 0 R +>> +endobj + +1786 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1983 0 R 1787 0 R] +>> +endobj + +1787 0 obj +<< + /Type /StructElem + /S /Div + /P 1786 0 R + /K [1982 0 R 1980 0 R 1977 0 R 1975 0 R 1974 0 R 1973 0 R 1968 0 R 1966 0 R 1965 0 R 1958 0 R 1956 0 R 1955 0 R 1951 0 R 1949 0 R 1948 0 R 1943 0 R 1941 0 R 1940 0 R 1932 0 R 1930 0 R 1929 0 R 1928 0 R 1927 0 R 1923 0 R 1921 0 R 1920 0 R 1918 0 R 1916 0 R 1915 0 R 1914 0 R 1913 0 R 1909 0 R 1907 0 R 1904 0 R 1902 0 R 1901 0 R 1900 0 R 1895 0 R 1893 0 R 1892 0 R 1882 0 R 1880 0 R 1879 0 R 1875 0 R 1873 0 R 1872 0 R 1865 0 R 1863 0 R 1862 0 R 1861 0 R 1860 0 R 1856 0 R 1854 0 R 1853 0 R 1851 0 R 1849 0 R 1848 0 R 1847 0 R 1846 0 R 1842 0 R 1840 0 R 1837 0 R 1835 0 R 1834 0 R 1833 0 R 1830 0 R 1828 0 R 1827 0 R 1823 0 R 1821 0 R 1820 0 R 1812 0 R 1810 0 R 1809 0 R 1808 0 R 1807 0 R 1803 0 R 1801 0 R 1800 0 R 1798 0 R 1796 0 R 1795 0 R 1794 0 R 1793 0 R 1789 0 R 1788 0 R] +>> +endobj + +1788 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1789 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1792 0 R 1791 0 R 1790 0 R] +>> +endobj + +1790 0 obj +<< + /Type /StructElem + /S /Span + /P 1789 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33] + /Pg 4917 0 R +>> +endobj + +1791 0 obj +<< + /Type /StructElem + /S /Formula + /P 1789 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [32] + /Pg 4917 0 R +>> +endobj + +1792 0 obj +<< + /Type /StructElem + /S /Span + /P 1789 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [31] + /Pg 4917 0 R +>> +endobj + +1793 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1794 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1795 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1796 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1797 0 R] +>> +endobj + +1797 0 obj +<< + /Type /StructElem + /S /Span + /P 1796 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [30] + /Pg 4917 0 R +>> +endobj + +1798 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1799 0 R] +>> +endobj + +1799 0 obj +<< + /Type /StructElem + /S /Strong + /P 1798 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [29] + /Pg 4917 0 R +>> +endobj + +1800 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1801 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1802 0 R] +>> +endobj + +1802 0 obj +<< + /Type /StructElem + /S /Span + /P 1801 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [28] + /Pg 4917 0 R +>> +endobj + +1803 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1806 0 R 1805 0 R 1804 0 R] +>> +endobj + +1804 0 obj +<< + /Type /StructElem + /S /Span + /P 1803 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [27] + /Pg 4917 0 R +>> +endobj + +1805 0 obj +<< + /Type /StructElem + /S /Formula + /P 1803 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [26] + /Pg 4917 0 R +>> +endobj + +1806 0 obj +<< + /Type /StructElem + /S /Span + /P 1803 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [25] + /Pg 4917 0 R +>> +endobj + +1807 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1808 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1809 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1810 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1811 0 R] +>> +endobj + +1811 0 obj +<< + /Type /StructElem + /S /Span + /P 1810 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [24] + /Pg 4917 0 R +>> +endobj + +1812 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1819 0 R 1818 0 R 1817 0 R 1816 0 R 1815 0 R 1814 0 R 1813 0 R] +>> +endobj + +1813 0 obj +<< + /Type /StructElem + /S /Span + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [22] + /Pg 4917 0 R +>> +endobj + +1814 0 obj +<< + /Type /StructElem + /S /Strong + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [23] + /Pg 4917 0 R +>> +endobj + +1815 0 obj +<< + /Type /StructElem + /S /Formula + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [21] + /Pg 4917 0 R +>> +endobj + +1816 0 obj +<< + /Type /StructElem + /S /Span + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [20] + /Pg 4917 0 R +>> +endobj + +1817 0 obj +<< + /Type /StructElem + /S /Formula + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [19] + /Pg 4917 0 R +>> +endobj + +1818 0 obj +<< + /Type /StructElem + /S /Span + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [18] + /Pg 4917 0 R +>> +endobj + +1819 0 obj +<< + /Type /StructElem + /S /Strong + /P 1812 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [17] + /Pg 4917 0 R +>> +endobj + +1820 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1821 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1822 0 R] +>> +endobj + +1822 0 obj +<< + /Type /StructElem + /S /Span + /P 1821 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [16] + /Pg 4917 0 R +>> +endobj + +1823 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1826 0 R 1825 0 R 1824 0 R] +>> +endobj + +1824 0 obj +<< + /Type /StructElem + /S /Span + /P 1823 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [15] + /Pg 4917 0 R +>> +endobj + +1825 0 obj +<< + /Type /StructElem + /S /Formula + /P 1823 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [14] + /Pg 4917 0 R +>> +endobj + +1826 0 obj +<< + /Type /StructElem + /S /Span + /P 1823 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [13] + /Pg 4917 0 R +>> +endobj + +1827 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1828 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1829 0 R] +>> +endobj + +1829 0 obj +<< + /Type /StructElem + /S /Span + /P 1828 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [12] + /Pg 4917 0 R +>> +endobj + +1830 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1832 0 R 1831 0 R] +>> +endobj + +1831 0 obj +<< + /Type /StructElem + /S /Span + /P 1830 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11] + /Pg 4917 0 R +>> +endobj + +1832 0 obj +<< + /Type /StructElem + /S /Strong + /P 1830 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [10] + /Pg 4917 0 R +>> +endobj + +1833 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1834 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1835 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1836 0 R] +>> +endobj + +1836 0 obj +<< + /Type /StructElem + /S /Span + /P 1835 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [9] + /Pg 4917 0 R +>> +endobj + +1837 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1839 0 R 1838 0 R] +>> +endobj + +1838 0 obj +<< + /Type /StructElem + /S /Span + /P 1837 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [8] + /Pg 4917 0 R +>> +endobj + +1839 0 obj +<< + /Type /StructElem + /S /Strong + /P 1837 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [7] + /Pg 4917 0 R +>> +endobj + +1840 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1841 0 R] +>> +endobj + +1841 0 obj +<< + /Type /StructElem + /S /Span + /P 1840 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [6] + /Pg 4917 0 R +>> +endobj + +1842 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1845 0 R 1844 0 R 1843 0 R] +>> +endobj + +1843 0 obj +<< + /Type /StructElem + /S /Span + /P 1842 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [5] + /Pg 4917 0 R +>> +endobj + +1844 0 obj +<< + /Type /StructElem + /S /Formula + /P 1842 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4] + /Pg 4917 0 R +>> +endobj + +1845 0 obj +<< + /Type /StructElem + /S /Span + /P 1842 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3] + /Pg 4917 0 R +>> +endobj + +1846 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1847 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1848 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1849 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1850 0 R] +>> +endobj + +1850 0 obj +<< + /Type /StructElem + /S /Span + /P 1849 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2] + /Pg 4917 0 R +>> +endobj + +1851 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1852 0 R] +>> +endobj + +1852 0 obj +<< + /Type /StructElem + /S /Strong + /P 1851 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 4917 0 R +>> +endobj + +1853 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1854 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1855 0 R] +>> +endobj + +1855 0 obj +<< + /Type /StructElem + /S /Span + /P 1854 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 4917 0 R +>> +endobj + +1856 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1859 0 R 1858 0 R 1857 0 R] +>> +endobj + +1857 0 obj +<< + /Type /StructElem + /S /Span + /P 1856 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [177] + /Pg 4905 0 R +>> +endobj + +1858 0 obj +<< + /Type /StructElem + /S /Formula + /P 1856 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [176] + /Pg 4905 0 R +>> +endobj + +1859 0 obj +<< + /Type /StructElem + /S /Span + /P 1856 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [175] + /Pg 4905 0 R +>> +endobj + +1860 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1861 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1862 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1863 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1864 0 R] +>> +endobj + +1864 0 obj +<< + /Type /StructElem + /S /Span + /P 1863 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [174] + /Pg 4905 0 R +>> +endobj + +1865 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1871 0 R 1870 0 R 1869 0 R 1868 0 R 1867 0 R 1866 0 R] +>> +endobj + +1866 0 obj +<< + /Type /StructElem + /S /Span + /P 1865 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [170 172] + /Pg 4905 0 R +>> +endobj + +1867 0 obj +<< + /Type /StructElem + /S /Strong + /P 1865 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [173] + /Pg 4905 0 R +>> +endobj + +1868 0 obj +<< + /Type /StructElem + /S /Span + /P 1865 0 R + /A [<< + /O /Layout + /Placement /Block + /BaselineShift -0.9786 + /LineHeight 4.88601 + >>] + /K [171] + /Pg 4905 0 R +>> +endobj + +1869 0 obj +<< + /Type /StructElem + /S /Formula + /P 1865 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [169] + /Pg 4905 0 R +>> +endobj + +1870 0 obj +<< + /Type /StructElem + /S /Span + /P 1865 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [168] + /Pg 4905 0 R +>> +endobj + +1871 0 obj +<< + /Type /StructElem + /S /Strong + /P 1865 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [167] + /Pg 4905 0 R +>> +endobj + +1872 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1873 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1874 0 R] +>> +endobj + +1874 0 obj +<< + /Type /StructElem + /S /Span + /P 1873 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [166] + /Pg 4905 0 R +>> +endobj + +1875 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1878 0 R 1877 0 R 1876 0 R] +>> +endobj + +1876 0 obj +<< + /Type /StructElem + /S /Span + /P 1875 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [165] + /Pg 4905 0 R +>> +endobj + +1877 0 obj +<< + /Type /StructElem + /S /Formula + /P 1875 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [164] + /Pg 4905 0 R +>> +endobj + +1878 0 obj +<< + /Type /StructElem + /S /Span + /P 1875 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [163] + /Pg 4905 0 R +>> +endobj + +1879 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1880 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1881 0 R] +>> +endobj + +1881 0 obj +<< + /Type /StructElem + /S /Span + /P 1880 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [162] + /Pg 4905 0 R +>> +endobj + +1882 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1891 0 R 1890 0 R 1889 0 R 1888 0 R 1887 0 R 1886 0 R 1885 0 R 1884 0 R 1883 0 R] +>> +endobj + +1883 0 obj +<< + /Type /StructElem + /S /Span + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [159 161] + /Pg 4905 0 R +>> +endobj + +1884 0 obj +<< + /Type /StructElem + /S /Span + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + /BaselineShift -0.9786 + /LineHeight 4.88601 + >>] + /K [160] + /Pg 4905 0 R +>> +endobj + +1885 0 obj +<< + /Type /StructElem + /S /Formula + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [158] + /Pg 4905 0 R +>> +endobj + +1886 0 obj +<< + /Type /StructElem + /S /Span + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [157] + /Pg 4905 0 R +>> +endobj + +1887 0 obj +<< + /Type /StructElem + /S /Formula + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [156] + /Pg 4905 0 R +>> +endobj + +1888 0 obj +<< + /Type /StructElem + /S /Span + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [153 155] + /Pg 4905 0 R +>> +endobj + +1889 0 obj +<< + /Type /StructElem + /S /Strong + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154] + /Pg 4905 0 R +>> +endobj + +1890 0 obj +<< + /Type /StructElem + /S /Formula + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [152] + /Pg 4905 0 R +>> +endobj + +1891 0 obj +<< + /Type /StructElem + /S /Span + /P 1882 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [151] + /Pg 4905 0 R +>> +endobj + +1892 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1893 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1894 0 R] +>> +endobj + +1894 0 obj +<< + /Type /StructElem + /S /Span + /P 1893 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [150] + /Pg 4905 0 R +>> +endobj + +1895 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1899 0 R 1898 0 R 1897 0 R 1896 0 R] +>> +endobj + +1896 0 obj +<< + /Type /StructElem + /S /Span + /P 1895 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [149] + /Pg 4905 0 R +>> +endobj + +1897 0 obj +<< + /Type /StructElem + /S /Formula + /P 1895 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [148] + /Pg 4905 0 R +>> +endobj + +1898 0 obj +<< + /Type /StructElem + /S /Span + /P 1895 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [145 147] + /Pg 4905 0 R +>> +endobj + +1899 0 obj +<< + /Type /StructElem + /S /Span + /P 1895 0 R + /A [<< + /O /Layout + /Placement /Block + /BaselineShift -0.9786 + /LineHeight 4.88601 + >>] + /K [146] + /Pg 4905 0 R +>> +endobj + +1900 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1901 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1902 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1903 0 R] +>> +endobj + +1903 0 obj +<< + /Type /StructElem + /S /Span + /P 1902 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [144] + /Pg 4905 0 R +>> +endobj + +1904 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1906 0 R 1905 0 R] +>> +endobj + +1905 0 obj +<< + /Type /StructElem + /S /Span + /P 1904 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [143] + /Pg 4905 0 R +>> +endobj + +1906 0 obj +<< + /Type /StructElem + /S /Strong + /P 1904 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [142] + /Pg 4905 0 R +>> +endobj + +1907 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1908 0 R] +>> +endobj + +1908 0 obj +<< + /Type /StructElem + /S /Span + /P 1907 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [141] + /Pg 4905 0 R +>> +endobj + +1909 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1912 0 R 1911 0 R 1910 0 R] +>> +endobj + +1910 0 obj +<< + /Type /StructElem + /S /Span + /P 1909 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [140] + /Pg 4905 0 R +>> +endobj + +1911 0 obj +<< + /Type /StructElem + /S /Formula + /P 1909 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [139] + /Pg 4905 0 R +>> +endobj + +1912 0 obj +<< + /Type /StructElem + /S /Span + /P 1909 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [138] + /Pg 4905 0 R +>> +endobj + +1913 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1914 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1915 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1916 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1917 0 R] +>> +endobj + +1917 0 obj +<< + /Type /StructElem + /S /Span + /P 1916 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [137] + /Pg 4905 0 R +>> +endobj + +1918 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1919 0 R] +>> +endobj + +1919 0 obj +<< + /Type /StructElem + /S /Strong + /P 1918 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [136] + /Pg 4905 0 R +>> +endobj + +1920 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1921 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1922 0 R] +>> +endobj + +1922 0 obj +<< + /Type /StructElem + /S /Span + /P 1921 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [135] + /Pg 4905 0 R +>> +endobj + +1923 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1926 0 R 1925 0 R 1924 0 R] +>> +endobj + +1924 0 obj +<< + /Type /StructElem + /S /Span + /P 1923 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [134] + /Pg 4905 0 R +>> +endobj + +1925 0 obj +<< + /Type /StructElem + /S /Formula + /P 1923 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [133] + /Pg 4905 0 R +>> +endobj + +1926 0 obj +<< + /Type /StructElem + /S /Span + /P 1923 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [132] + /Pg 4905 0 R +>> +endobj + +1927 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1928 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1929 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1930 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1931 0 R] +>> +endobj + +1931 0 obj +<< + /Type /StructElem + /S /Span + /P 1930 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [131] + /Pg 4905 0 R +>> +endobj + +1932 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1939 0 R 1938 0 R 1937 0 R 1936 0 R 1935 0 R 1934 0 R 1933 0 R] +>> +endobj + +1933 0 obj +<< + /Type /StructElem + /S /Span + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [129] + /Pg 4905 0 R +>> +endobj + +1934 0 obj +<< + /Type /StructElem + /S /Strong + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [130] + /Pg 4905 0 R +>> +endobj + +1935 0 obj +<< + /Type /StructElem + /S /Formula + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [128] + /Pg 4905 0 R +>> +endobj + +1936 0 obj +<< + /Type /StructElem + /S /Span + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [127] + /Pg 4905 0 R +>> +endobj + +1937 0 obj +<< + /Type /StructElem + /S /Formula + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [126] + /Pg 4905 0 R +>> +endobj + +1938 0 obj +<< + /Type /StructElem + /S /Span + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [125] + /Pg 4905 0 R +>> +endobj + +1939 0 obj +<< + /Type /StructElem + /S /Strong + /P 1932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [124] + /Pg 4905 0 R +>> +endobj + +1940 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1941 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1942 0 R] +>> +endobj + +1942 0 obj +<< + /Type /StructElem + /S /Span + /P 1941 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [123] + /Pg 4905 0 R +>> +endobj + +1943 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1947 0 R 1946 0 R 1945 0 R 1944 0 R] +>> +endobj + +1944 0 obj +<< + /Type /StructElem + /S /Span + /P 1943 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [119 121] + /Pg 4905 0 R +>> +endobj + +1945 0 obj +<< + /Type /StructElem + /S /Strong + /P 1943 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [122] + /Pg 4905 0 R +>> +endobj + +1946 0 obj +<< + /Type /StructElem + /S /Strong + /P 1943 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [120] + /Pg 4905 0 R +>> +endobj + +1947 0 obj +<< + /Type /StructElem + /S /Strong + /P 1943 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [118] + /Pg 4905 0 R +>> +endobj + +1948 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1949 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1950 0 R] +>> +endobj + +1950 0 obj +<< + /Type /StructElem + /S /Span + /P 1949 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [117] + /Pg 4905 0 R +>> +endobj + +1951 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1954 0 R 1953 0 R 1952 0 R] +>> +endobj + +1952 0 obj +<< + /Type /StructElem + /S /Span + /P 1951 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [116] + /Pg 4905 0 R +>> +endobj + +1953 0 obj +<< + /Type /StructElem + /S /Formula + /P 1951 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [115] + /Pg 4905 0 R +>> +endobj + +1954 0 obj +<< + /Type /StructElem + /S /Span + /P 1951 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [114] + /Pg 4905 0 R +>> +endobj + +1955 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1956 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1957 0 R] +>> +endobj + +1957 0 obj +<< + /Type /StructElem + /S /Span + /P 1956 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [113] + /Pg 4905 0 R +>> +endobj + +1958 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1964 0 R 1963 0 R 1962 0 R 1961 0 R 1960 0 R 1959 0 R] +>> +endobj + +1959 0 obj +<< + /Type /StructElem + /S /Span + /P 1958 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [109 111] + /Pg 4905 0 R +>> +endobj + +1960 0 obj +<< + /Type /StructElem + /S /Strong + /P 1958 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [112] + /Pg 4905 0 R +>> +endobj + +1961 0 obj +<< + /Type /StructElem + /S /Strong + /P 1958 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [110] + /Pg 4905 0 R +>> +endobj + +1962 0 obj +<< + /Type /StructElem + /S /Formula + /P 1958 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [108] + /Pg 4905 0 R +>> +endobj + +1963 0 obj +<< + /Type /StructElem + /S /Span + /P 1958 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [107] + /Pg 4905 0 R +>> +endobj + +1964 0 obj +<< + /Type /StructElem + /S /Strong + /P 1958 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [106] + /Pg 4905 0 R +>> +endobj + +1965 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1966 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1967 0 R] +>> +endobj + +1967 0 obj +<< + /Type /StructElem + /S /Span + /P 1966 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [105] + /Pg 4905 0 R +>> +endobj + +1968 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1972 0 R 1971 0 R 1970 0 R 1969 0 R] +>> +endobj + +1969 0 obj +<< + /Type /StructElem + /S /Formula + /P 1968 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [100 101 102 103 104] + /Pg 4905 0 R +>> +endobj + +1970 0 obj +<< + /Type /StructElem + /S /Span + /P 1968 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [99] + /Pg 4905 0 R +>> +endobj + +1971 0 obj +<< + /Type /StructElem + /S /Formula + /P 1968 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [98] + /Pg 4905 0 R +>> +endobj + +1972 0 obj +<< + /Type /StructElem + /S /Span + /P 1968 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [97] + /Pg 4905 0 R +>> +endobj + +1973 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1974 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1975 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1976 0 R] +>> +endobj + +1976 0 obj +<< + /Type /StructElem + /S /Span + /P 1975 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [96] + /Pg 4905 0 R +>> +endobj + +1977 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1979 0 R 1978 0 R] +>> +endobj + +1978 0 obj +<< + /Type /StructElem + /S /Span + /P 1977 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [95] + /Pg 4905 0 R +>> +endobj + +1979 0 obj +<< + /Type /StructElem + /S /Strong + /P 1977 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [94] + /Pg 4905 0 R +>> +endobj + +1980 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [1981 0 R] +>> +endobj + +1981 0 obj +<< + /Type /StructElem + /S /Span + /P 1980 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4905 0 R +>> +endobj + +1982 0 obj +<< + /Type /StructElem + /S /Div + /P 1787 0 R + /K [] +>> +endobj + +1983 0 obj +<< + /Type /StructElem + /S /P + /P 1786 0 R + /K [1984 0 R 92] + /Pg 4905 0 R +>> +endobj + +1984 0 obj +<< + /Type /StructElem + /S /Strong + /P 1983 0 R + /K [91] + /Pg 4905 0 R +>> +endobj + +1985 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2009 0 R 52 2008 0 R 54 2007 0 R 56 2006 0 R 58 59 60 2005 0 R 62 63 2004 0 R 65 2003 0 R 67 2000 0 R 1994 0 R 69 1993 0 R 71 72 1992 0 R 74 75 1991 0 R 77 78 1990 0 R 80 1989 0 R 82 1988 0 R 84 85 1987 0 R 87 1986 0 R 89 90] + /Pg 4905 0 R +>> +endobj + +1986 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [88] + /Pg 4905 0 R +>> +endobj + +1987 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [86] + /Pg 4905 0 R +>> +endobj + +1988 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [83] + /Pg 4905 0 R +>> +endobj + +1989 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [81] + /Pg 4905 0 R +>> +endobj + +1990 0 obj +<< + /Type /StructElem + /S /Formula + /P 1985 0 R + /K [79] + /Pg 4905 0 R +>> +endobj + +1991 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [76] + /Pg 4905 0 R +>> +endobj + +1992 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [73] + /Pg 4905 0 R +>> +endobj + +1993 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [70] + /Pg 4905 0 R +>> +endobj + +1994 0 obj +<< + /Type /StructElem + /S /Note + /P 1985 0 R + /ID (Note 2) + /K [1997 0 R 1996 0 R 180 1995 0 R 182 183 184 185] + /Pg 4905 0 R +>> +endobj + +1995 0 obj +<< + /Type /StructElem + /S /Code + /P 1994 0 R + /K [181] + /Pg 4905 0 R +>> +endobj + +1996 0 obj +<< + /Type /StructElem + /S /Code + /P 1994 0 R + /K [179] + /Pg 4905 0 R +>> +endobj + +1997 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1994 0 R + /K [1998 0 R] +>> +endobj + +1998 0 obj +<< + /Type /StructElem + /S /Link + /P 1997 0 R + /K [<< + /Type /OBJR + /Pg 4905 0 R + /Obj 4904 0 R + >> 1999 0 R] +>> +endobj + +1999 0 obj +<< + /Type /StructElem + /S /Span + /P 1998 0 R + /A [<< + /O /Layout + /BaselineShift 2.5866 + /LineHeight 3.24 + >>] + /K [178] + /Pg 4905 0 R +>> +endobj + +2000 0 obj +<< + /Type /StructElem + /S /Lbl + /P 1985 0 R + /K [2001 0 R] +>> +endobj + +2001 0 obj +<< + /Type /StructElem + /S /Link + /P 2000 0 R + /K [<< + /Type /OBJR + /Pg 4905 0 R + /Obj 4903 0 R + >> 2002 0 R] +>> +endobj + +2002 0 obj +<< + /Type /StructElem + /S /Span + /P 2001 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [68] + /Pg 4905 0 R +>> +endobj + +2003 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [66] + /Pg 4905 0 R +>> +endobj + +2004 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [64] + /Pg 4905 0 R +>> +endobj + +2005 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [61] + /Pg 4905 0 R +>> +endobj + +2006 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [57] + /Pg 4905 0 R +>> +endobj + +2007 0 obj +<< + /Type /StructElem + /S /Code + /P 1985 0 R + /K [55] + /Pg 4905 0 R +>> +endobj + +2008 0 obj +<< + /Type /StructElem + /S /Link + /P 1985 0 R + /K [53 << + /Type /OBJR + /Pg 4905 0 R + /Obj 4902 0 R + >>] + /Pg 4905 0 R +>> +endobj + +2009 0 obj +<< + /Type /StructElem + /S /Link + /P 1985 0 R + /K [51 << + /Type /OBJR + /Pg 4905 0 R + /Obj 4901 0 R + >>] + /Pg 4905 0 R +>> +endobj + +2010 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2097 0 R 2011 0 R] +>> +endobj + +2011 0 obj +<< + /Type /StructElem + /S /Div + /P 2010 0 R + /K [2096 0 R 2094 0 R 2091 0 R 2088 0 R 2087 0 R 2086 0 R 2083 0 R 2081 0 R 2080 0 R 2079 0 R 2078 0 R 2076 0 R 2074 0 R 2073 0 R 2072 0 R 2068 0 R 2066 0 R 2065 0 R 2064 0 R 2063 0 R 2062 0 R 2057 0 R 2055 0 R 2054 0 R 2053 0 R 2052 0 R 2050 0 R 2048 0 R 2047 0 R 2043 0 R 2041 0 R 2040 0 R 2034 0 R 2031 0 R 2030 0 R 2024 0 R 2022 0 R 2021 0 R 2019 0 R 2017 0 R 2016 0 R 2013 0 R 2012 0 R] +>> +endobj + +2012 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2013 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2015 0 R 2014 0 R] +>> +endobj + +2014 0 obj +<< + /Type /StructElem + /S /Span + /P 2013 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [50] + /Pg 4905 0 R +>> +endobj + +2015 0 obj +<< + /Type /StructElem + /S /Strong + /P 2013 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [49] + /Pg 4905 0 R +>> +endobj + +2016 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2017 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2018 0 R] +>> +endobj + +2018 0 obj +<< + /Type /StructElem + /S /Span + /P 2017 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [48] + /Pg 4905 0 R +>> +endobj + +2019 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2020 0 R] +>> +endobj + +2020 0 obj +<< + /Type /StructElem + /S /Span + /P 2019 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [47] + /Pg 4905 0 R +>> +endobj + +2021 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2022 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2023 0 R] +>> +endobj + +2023 0 obj +<< + /Type /StructElem + /S /Span + /P 2022 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [46] + /Pg 4905 0 R +>> +endobj + +2024 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2029 0 R 2028 0 R 2027 0 R 2026 0 R 2025 0 R] +>> +endobj + +2025 0 obj +<< + /Type /StructElem + /S /Span + /P 2024 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [45] + /Pg 4905 0 R +>> +endobj + +2026 0 obj +<< + /Type /StructElem + /S /Formula + /P 2024 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [44] + /Pg 4905 0 R +>> +endobj + +2027 0 obj +<< + /Type /StructElem + /S /Span + /P 2024 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43] + /Pg 4905 0 R +>> +endobj + +2028 0 obj +<< + /Type /StructElem + /S /Formula + /P 2024 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [42] + /Pg 4905 0 R +>> +endobj + +2029 0 obj +<< + /Type /StructElem + /S /Span + /P 2024 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [41] + /Pg 4905 0 R +>> +endobj + +2030 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2031 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2033 0 R 2032 0 R] +>> +endobj + +2032 0 obj +<< + /Type /StructElem + /S /Span + /P 2031 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [40] + /Pg 4905 0 R +>> +endobj + +2033 0 obj +<< + /Type /StructElem + /S /Div + /P 2031 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [] +>> +endobj + +2034 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2039 0 R 2038 0 R 2037 0 R 2036 0 R 2035 0 R] +>> +endobj + +2035 0 obj +<< + /Type /StructElem + /S /Span + /P 2034 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [39] + /Pg 4905 0 R +>> +endobj + +2036 0 obj +<< + /Type /StructElem + /S /Formula + /P 2034 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [38] + /Pg 4905 0 R +>> +endobj + +2037 0 obj +<< + /Type /StructElem + /S /Span + /P 2034 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [37] + /Pg 4905 0 R +>> +endobj + +2038 0 obj +<< + /Type /StructElem + /S /Formula + /P 2034 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [36] + /Pg 4905 0 R +>> +endobj + +2039 0 obj +<< + /Type /StructElem + /S /Span + /P 2034 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [35] + /Pg 4905 0 R +>> +endobj + +2040 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2041 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2042 0 R] +>> +endobj + +2042 0 obj +<< + /Type /StructElem + /S /Span + /P 2041 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [34] + /Pg 4905 0 R +>> +endobj + +2043 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2046 0 R 2045 0 R 2044 0 R] +>> +endobj + +2044 0 obj +<< + /Type /StructElem + /S /Span + /P 2043 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33] + /Pg 4905 0 R +>> +endobj + +2045 0 obj +<< + /Type /StructElem + /S /Formula + /P 2043 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [32] + /Pg 4905 0 R +>> +endobj + +2046 0 obj +<< + /Type /StructElem + /S /Span + /P 2043 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [31] + /Pg 4905 0 R +>> +endobj + +2047 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2048 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2049 0 R] +>> +endobj + +2049 0 obj +<< + /Type /StructElem + /S /Span + /P 2048 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [30] + /Pg 4905 0 R +>> +endobj + +2050 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2051 0 R] +>> +endobj + +2051 0 obj +<< + /Type /StructElem + /S /Span + /P 2050 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [29] + /Pg 4905 0 R +>> +endobj + +2052 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2053 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2054 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2055 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2056 0 R] +>> +endobj + +2056 0 obj +<< + /Type /StructElem + /S /Span + /P 2055 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [28] + /Pg 4905 0 R +>> +endobj + +2057 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2061 0 R 2060 0 R 2059 0 R 2058 0 R] +>> +endobj + +2058 0 obj +<< + /Type /StructElem + /S /Formula + /P 2057 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [27] + /Pg 4905 0 R +>> +endobj + +2059 0 obj +<< + /Type /StructElem + /S /Span + /P 2057 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [26] + /Pg 4905 0 R +>> +endobj + +2060 0 obj +<< + /Type /StructElem + /S /Formula + /P 2057 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [25] + /Pg 4905 0 R +>> +endobj + +2061 0 obj +<< + /Type /StructElem + /S /Span + /P 2057 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [24] + /Pg 4905 0 R +>> +endobj + +2062 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2063 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2064 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2065 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2066 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2067 0 R] +>> +endobj + +2067 0 obj +<< + /Type /StructElem + /S /Span + /P 2066 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [23] + /Pg 4905 0 R +>> +endobj + +2068 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2071 0 R 2070 0 R 2069 0 R] +>> +endobj + +2069 0 obj +<< + /Type /StructElem + /S /Span + /P 2068 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [20 22] + /Pg 4905 0 R +>> +endobj + +2070 0 obj +<< + /Type /StructElem + /S /Strong + /P 2068 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [21] + /Pg 4905 0 R +>> +endobj + +2071 0 obj +<< + /Type /StructElem + /S /Strong + /P 2068 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [19] + /Pg 4905 0 R +>> +endobj + +2072 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2073 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2074 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2075 0 R] +>> +endobj + +2075 0 obj +<< + /Type /StructElem + /S /Span + /P 2074 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [18] + /Pg 4905 0 R +>> +endobj + +2076 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2077 0 R] +>> +endobj + +2077 0 obj +<< + /Type /StructElem + /S /Span + /P 2076 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [17] + /Pg 4905 0 R +>> +endobj + +2078 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2079 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2080 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2081 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2082 0 R] +>> +endobj + +2082 0 obj +<< + /Type /StructElem + /S /Span + /P 2081 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [16] + /Pg 4905 0 R +>> +endobj + +2083 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2085 0 R 2084 0 R] +>> +endobj + +2084 0 obj +<< + /Type /StructElem + /S /Span + /P 2083 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [15] + /Pg 4905 0 R +>> +endobj + +2085 0 obj +<< + /Type /StructElem + /S /Strong + /P 2083 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [14] + /Pg 4905 0 R +>> +endobj + +2086 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2087 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2088 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2090 0 R 2089 0 R] +>> +endobj + +2089 0 obj +<< + /Type /StructElem + /S /Span + /P 2088 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [13] + /Pg 4905 0 R +>> +endobj + +2090 0 obj +<< + /Type /StructElem + /S /Div + /P 2088 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [] +>> +endobj + +2091 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2093 0 R 2092 0 R] +>> +endobj + +2092 0 obj +<< + /Type /StructElem + /S /Span + /P 2091 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [12] + /Pg 4905 0 R +>> +endobj + +2093 0 obj +<< + /Type /StructElem + /S /Strong + /P 2091 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11] + /Pg 4905 0 R +>> +endobj + +2094 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [2095 0 R] +>> +endobj + +2095 0 obj +<< + /Type /StructElem + /S /Span + /P 2094 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [10] + /Pg 4905 0 R +>> +endobj + +2096 0 obj +<< + /Type /StructElem + /S /Div + /P 2011 0 R + /K [] +>> +endobj + +2097 0 obj +<< + /Type /StructElem + /S /P + /P 2010 0 R + /K [2098 0 R 9] + /Pg 4905 0 R +>> +endobj + +2098 0 obj +<< + /Type /StructElem + /S /Strong + /P 2097 0 R + /K [8] + /Pg 4905 0 R +>> +endobj + +2099 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2116 0 R 173 2115 0 R 175 2114 0 R 177 2113 0 R 179 2112 0 R 181 182 2111 0 R 184 2110 0 R 186 2109 0 R 188 2108 0 R 190 191 2107 0 R 193 2106 0 R 195 2105 0 R 197 198 2104 0 R 200 2103 0 R 202 << + /Type /MCR + /MCID 0 + /Pg 4905 0 R + >> 2102 0 R << + /Type /MCR + /MCID 2 + /Pg 4905 0 R + >> 2101 0 R << + /Type /MCR + /MCID 4 + /Pg 4905 0 R + >> << + /Type /MCR + /MCID 5 + /Pg 4905 0 R + >> 2100 0 R << + /Type /MCR + /MCID 7 + /Pg 4905 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2100 0 obj +<< + /Type /StructElem + /S /Formula + /P 2099 0 R + /K [6] + /Pg 4905 0 R +>> +endobj + +2101 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [3] + /Pg 4905 0 R +>> +endobj + +2102 0 obj +<< + /Type /StructElem + /S /Formula + /P 2099 0 R + /K [1] + /Pg 4905 0 R +>> +endobj + +2103 0 obj +<< + /Type /StructElem + /S /Link + /P 2099 0 R + /K [201 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4898 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2104 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [199] + /Pg 4899 0 R +>> +endobj + +2105 0 obj +<< + /Type /StructElem + /S /Em + /P 2099 0 R + /K [196] + /Pg 4899 0 R +>> +endobj + +2106 0 obj +<< + /Type /StructElem + /S /Link + /P 2099 0 R + /K [194 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4897 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2107 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [192] + /Pg 4899 0 R +>> +endobj + +2108 0 obj +<< + /Type /StructElem + /S /Formula + /P 2099 0 R + /K [189] + /Pg 4899 0 R +>> +endobj + +2109 0 obj +<< + /Type /StructElem + /S /Link + /P 2099 0 R + /K [187 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4896 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2110 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [185] + /Pg 4899 0 R +>> +endobj + +2111 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [183] + /Pg 4899 0 R +>> +endobj + +2112 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [180] + /Pg 4899 0 R +>> +endobj + +2113 0 obj +<< + /Type /StructElem + /S /Formula + /P 2099 0 R + /K [178] + /Pg 4899 0 R +>> +endobj + +2114 0 obj +<< + /Type /StructElem + /S /Code + /P 2099 0 R + /K [176] + /Pg 4899 0 R +>> +endobj + +2115 0 obj +<< + /Type /StructElem + /S /Em + /P 2099 0 R + /K [174] + /Pg 4899 0 R +>> +endobj + +2116 0 obj +<< + /Type /StructElem + /S /Link + /P 2099 0 R + /K [172 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4895 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2117 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [149 2126 0 R 151 2125 0 R 153 2124 0 R 155 2123 0 R 157 158 2122 0 R 160 2121 0 R 162 163 2120 0 R 166 2119 0 R 168 2118 0 R 170 171] + /Pg 4899 0 R +>> +endobj + +2118 0 obj +<< + /Type /StructElem + /S /Code + /P 2117 0 R + /K [169] + /Pg 4899 0 R +>> +endobj + +2119 0 obj +<< + /Type /StructElem + /S /Link + /P 2117 0 R + /K [167 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4894 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2120 0 obj +<< + /Type /StructElem + /S /Formula + /P 2117 0 R + /K [164 165] + /Pg 4899 0 R +>> +endobj + +2121 0 obj +<< + /Type /StructElem + /S /Code + /P 2117 0 R + /K [161] + /Pg 4899 0 R +>> +endobj + +2122 0 obj +<< + /Type /StructElem + /S /Code + /P 2117 0 R + /K [159] + /Pg 4899 0 R +>> +endobj + +2123 0 obj +<< + /Type /StructElem + /S /Link + /P 2117 0 R + /K [156 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4893 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2124 0 obj +<< + /Type /StructElem + /S /Link + /P 2117 0 R + /K [154 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4892 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2125 0 obj +<< + /Type /StructElem + /S /Code + /P 2117 0 R + /K [152] + /Pg 4899 0 R +>> +endobj + +2126 0 obj +<< + /Type /StructElem + /S /Em + /P 2117 0 R + /K [150] + /Pg 4899 0 R +>> +endobj + +2127 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Component Lifecycle) + /K [147 148] + /Pg 4899 0 R +>> +endobj + +2128 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2141 0 R 115 116 2140 0 R 118 119 2139 0 R 121 2138 0 R 123 2137 0 R 125 126 2136 0 R 128 2135 0 R 130 131 2134 0 R 133 134 2133 0 R 136 2132 0 R 138 2131 0 R 140 2130 0 R 142 143 2129 0 R 145 146] + /Pg 4899 0 R +>> +endobj + +2129 0 obj +<< + /Type /StructElem + /S /Code + /P 2128 0 R + /K [144] + /Pg 4899 0 R +>> +endobj + +2130 0 obj +<< + /Type /StructElem + /S /Link + /P 2128 0 R + /K [141 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4891 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2131 0 obj +<< + /Type /StructElem + /S /Formula + /P 2128 0 R + /K [139] + /Pg 4899 0 R +>> +endobj + +2132 0 obj +<< + /Type /StructElem + /S /Formula + /P 2128 0 R + /K [137] + /Pg 4899 0 R +>> +endobj + +2133 0 obj +<< + /Type /StructElem + /S /Code + /P 2128 0 R + /K [135] + /Pg 4899 0 R +>> +endobj + +2134 0 obj +<< + /Type /StructElem + /S /Code + /P 2128 0 R + /K [132] + /Pg 4899 0 R +>> +endobj + +2135 0 obj +<< + /Type /StructElem + /S /Link + /P 2128 0 R + /K [129 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4890 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2136 0 obj +<< + /Type /StructElem + /S /Formula + /P 2128 0 R + /K [127] + /Pg 4899 0 R +>> +endobj + +2137 0 obj +<< + /Type /StructElem + /S /Code + /P 2128 0 R + /K [124] + /Pg 4899 0 R +>> +endobj + +2138 0 obj +<< + /Type /StructElem + /S /Formula + /P 2128 0 R + /K [122] + /Pg 4899 0 R +>> +endobj + +2139 0 obj +<< + /Type /StructElem + /S /Code + /P 2128 0 R + /K [120] + /Pg 4899 0 R +>> +endobj + +2140 0 obj +<< + /Type /StructElem + /S /Code + /P 2128 0 R + /K [117] + /Pg 4899 0 R +>> +endobj + +2141 0 obj +<< + /Type /StructElem + /S /Strong + /P 2128 0 R + /K [114] + /Pg 4899 0 R +>> +endobj + +2142 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2206 0 R 2143 0 R] +>> +endobj + +2143 0 obj +<< + /Type /StructElem + /S /Div + /P 2142 0 R + /K [2205 0 R 2203 0 R 2200 0 R 2198 0 R 2197 0 R 2196 0 R 2191 0 R 2189 0 R 2188 0 R 2187 0 R 2186 0 R 2181 0 R 2179 0 R 2178 0 R 2177 0 R 2176 0 R 2175 0 R 2162 0 R 2160 0 R 2159 0 R 2158 0 R 2157 0 R 2156 0 R 2155 0 R 2153 0 R 2151 0 R 2150 0 R 2149 0 R 2148 0 R 2147 0 R 2145 0 R 2144 0 R] +>> +endobj + +2144 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2145 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2146 0 R] +>> +endobj + +2146 0 obj +<< + /Type /StructElem + /S /Strong + /P 2145 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [113] + /Pg 4899 0 R +>> +endobj + +2147 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2148 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2149 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2150 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2151 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2152 0 R] +>> +endobj + +2152 0 obj +<< + /Type /StructElem + /S /Span + /P 2151 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [112] + /Pg 4899 0 R +>> +endobj + +2153 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2154 0 R] +>> +endobj + +2154 0 obj +<< + /Type /StructElem + /S /Span + /P 2153 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [111] + /Pg 4899 0 R +>> +endobj + +2155 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2156 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2157 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2158 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2159 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2160 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2161 0 R] +>> +endobj + +2161 0 obj +<< + /Type /StructElem + /S /Span + /P 2160 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [110] + /Pg 4899 0 R +>> +endobj + +2162 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2174 0 R 2173 0 R 2172 0 R 2171 0 R 2170 0 R 2169 0 R 2168 0 R 2167 0 R 2166 0 R 2165 0 R 2164 0 R 2163 0 R] +>> +endobj + +2163 0 obj +<< + /Type /StructElem + /S /Span + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [108] + /Pg 4899 0 R +>> +endobj + +2164 0 obj +<< + /Type /StructElem + /S /Strong + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [109] + /Pg 4899 0 R +>> +endobj + +2165 0 obj +<< + /Type /StructElem + /S /Code + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [107] + /Pg 4899 0 R +>> +endobj + +2166 0 obj +<< + /Type /StructElem + /S /Span + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [106] + /Pg 4899 0 R +>> +endobj + +2167 0 obj +<< + /Type /StructElem + /S /Formula + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [105] + /Pg 4899 0 R +>> +endobj + +2168 0 obj +<< + /Type /StructElem + /S /Span + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [104] + /Pg 4899 0 R +>> +endobj + +2169 0 obj +<< + /Type /StructElem + /S /Code + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [103] + /Pg 4899 0 R +>> +endobj + +2170 0 obj +<< + /Type /StructElem + /S /Span + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [100 102] + /Pg 4899 0 R +>> +endobj + +2171 0 obj +<< + /Type /StructElem + /S /Strong + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [101] + /Pg 4899 0 R +>> +endobj + +2172 0 obj +<< + /Type /StructElem + /S /Formula + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [99] + /Pg 4899 0 R +>> +endobj + +2173 0 obj +<< + /Type /StructElem + /S /Span + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [98] + /Pg 4899 0 R +>> +endobj + +2174 0 obj +<< + /Type /StructElem + /S /Strong + /P 2162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [97] + /Pg 4899 0 R +>> +endobj + +2175 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2176 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2177 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2178 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2179 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2180 0 R] +>> +endobj + +2180 0 obj +<< + /Type /StructElem + /S /Span + /P 2179 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [96] + /Pg 4899 0 R +>> +endobj + +2181 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2185 0 R 2184 0 R 2183 0 R 2182 0 R] +>> +endobj + +2182 0 obj +<< + /Type /StructElem + /S /Span + /P 2181 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [92 94] + /Pg 4899 0 R +>> +endobj + +2183 0 obj +<< + /Type /StructElem + /S /Strong + /P 2181 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [95] + /Pg 4899 0 R +>> +endobj + +2184 0 obj +<< + /Type /StructElem + /S /Strong + /P 2181 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4899 0 R +>> +endobj + +2185 0 obj +<< + /Type /StructElem + /S /Strong + /P 2181 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [91] + /Pg 4899 0 R +>> +endobj + +2186 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2187 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2188 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2189 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2190 0 R] +>> +endobj + +2190 0 obj +<< + /Type /StructElem + /S /Span + /P 2189 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [90] + /Pg 4899 0 R +>> +endobj + +2191 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2195 0 R 2194 0 R 2193 0 R 2192 0 R] +>> +endobj + +2192 0 obj +<< + /Type /StructElem + /S /Span + /P 2191 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [86 88] + /Pg 4899 0 R +>> +endobj + +2193 0 obj +<< + /Type /StructElem + /S /Strong + /P 2191 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [89] + /Pg 4899 0 R +>> +endobj + +2194 0 obj +<< + /Type /StructElem + /S /Strong + /P 2191 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [87] + /Pg 4899 0 R +>> +endobj + +2195 0 obj +<< + /Type /StructElem + /S /Strong + /P 2191 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [85] + /Pg 4899 0 R +>> +endobj + +2196 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2197 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2198 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2199 0 R] +>> +endobj + +2199 0 obj +<< + /Type /StructElem + /S /Span + /P 2198 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [84] + /Pg 4899 0 R +>> +endobj + +2200 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2202 0 R 2201 0 R] +>> +endobj + +2201 0 obj +<< + /Type /StructElem + /S /Span + /P 2200 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [83] + /Pg 4899 0 R +>> +endobj + +2202 0 obj +<< + /Type /StructElem + /S /Strong + /P 2200 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [82] + /Pg 4899 0 R +>> +endobj + +2203 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [2204 0 R] +>> +endobj + +2204 0 obj +<< + /Type /StructElem + /S /Span + /P 2203 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [81] + /Pg 4899 0 R +>> +endobj + +2205 0 obj +<< + /Type /StructElem + /S /Div + /P 2143 0 R + /K [] +>> +endobj + +2206 0 obj +<< + /Type /StructElem + /S /P + /P 2142 0 R + /K [2207 0 R 80] + /Pg 4899 0 R +>> +endobj + +2207 0 obj +<< + /Type /StructElem + /S /Strong + /P 2206 0 R + /K [79] + /Pg 4899 0 R +>> +endobj + +2208 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2216 0 R 58 59 2215 0 R 61 62 2214 0 R 64 2213 0 R 66 67 2212 0 R 69 2211 0 R 73 2210 0 R 75 76 2209 0 R 78] + /Pg 4899 0 R +>> +endobj + +2209 0 obj +<< + /Type /StructElem + /S /Link + /P 2208 0 R + /K [77 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4889 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2210 0 obj +<< + /Type /StructElem + /S /Code + /P 2208 0 R + /K [74] + /Pg 4899 0 R +>> +endobj + +2211 0 obj +<< + /Type /StructElem + /S /Formula + /P 2208 0 R + /K [70 71 72] + /Pg 4899 0 R +>> +endobj + +2212 0 obj +<< + /Type /StructElem + /S /Link + /P 2208 0 R + /K [68 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4888 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2213 0 obj +<< + /Type /StructElem + /S /Link + /P 2208 0 R + /K [65 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4887 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2214 0 obj +<< + /Type /StructElem + /S /Code + /P 2208 0 R + /K [63] + /Pg 4899 0 R +>> +endobj + +2215 0 obj +<< + /Type /StructElem + /S /Code + /P 2208 0 R + /K [60] + /Pg 4899 0 R +>> +endobj + +2216 0 obj +<< + /Type /StructElem + /S /Link + /P 2208 0 R + /K [57 << + /Type /OBJR + /Pg 4899 0 R + /Obj 4886 0 R + >>] + /Pg 4899 0 R +>> +endobj + +2217 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2320 0 R 2218 0 R] +>> +endobj + +2218 0 obj +<< + /Type /StructElem + /S /Div + /P 2217 0 R + /K [2319 0 R 2317 0 R 2314 0 R 2312 0 R 2311 0 R 2310 0 R 2303 0 R 2301 0 R 2300 0 R 2294 0 R 2292 0 R 2289 0 R 2287 0 R 2286 0 R 2285 0 R 2282 0 R 2280 0 R 2279 0 R 2278 0 R 2277 0 R 2270 0 R 2268 0 R 2267 0 R 2266 0 R 2259 0 R 2257 0 R 2256 0 R 2255 0 R 2253 0 R 2251 0 R 2250 0 R 2249 0 R 2245 0 R 2243 0 R 2242 0 R 2241 0 R 2240 0 R 2239 0 R 2233 0 R 2231 0 R 2230 0 R 2229 0 R 2228 0 R 2226 0 R 2224 0 R 2223 0 R 2220 0 R 2219 0 R] +>> +endobj + +2219 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2220 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2222 0 R 2221 0 R] +>> +endobj + +2221 0 obj +<< + /Type /StructElem + /S /Span + /P 2220 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [56] + /Pg 4899 0 R +>> +endobj + +2222 0 obj +<< + /Type /StructElem + /S /Strong + /P 2220 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [55] + /Pg 4899 0 R +>> +endobj + +2223 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2224 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2225 0 R] +>> +endobj + +2225 0 obj +<< + /Type /StructElem + /S /Span + /P 2224 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [54] + /Pg 4899 0 R +>> +endobj + +2226 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2227 0 R] +>> +endobj + +2227 0 obj +<< + /Type /StructElem + /S /Span + /P 2226 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [53] + /Pg 4899 0 R +>> +endobj + +2228 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2229 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2230 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2231 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2232 0 R] +>> +endobj + +2232 0 obj +<< + /Type /StructElem + /S /Span + /P 2231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [52] + /Pg 4899 0 R +>> +endobj + +2233 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2238 0 R 2237 0 R 2236 0 R 2235 0 R 2234 0 R] +>> +endobj + +2234 0 obj +<< + /Type /StructElem + /S /Formula + /P 2233 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [46 47 48 49 50 51] + /Pg 4899 0 R +>> +endobj + +2235 0 obj +<< + /Type /StructElem + /S /Span + /P 2233 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [44 45] + /Pg 4899 0 R +>> +endobj + +2236 0 obj +<< + /Type /StructElem + /S /Code + /P 2233 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43] + /Pg 4899 0 R +>> +endobj + +2237 0 obj +<< + /Type /StructElem + /S /Span + /P 2233 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [42] + /Pg 4899 0 R +>> +endobj + +2238 0 obj +<< + /Type /StructElem + /S /Strong + /P 2233 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [41] + /Pg 4899 0 R +>> +endobj + +2239 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2240 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2241 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2242 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2243 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2244 0 R] +>> +endobj + +2244 0 obj +<< + /Type /StructElem + /S /Span + /P 2243 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [40] + /Pg 4899 0 R +>> +endobj + +2245 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2248 0 R 2247 0 R 2246 0 R] +>> +endobj + +2246 0 obj +<< + /Type /StructElem + /S /Span + /P 2245 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [37 39] + /Pg 4899 0 R +>> +endobj + +2247 0 obj +<< + /Type /StructElem + /S /Strong + /P 2245 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [38] + /Pg 4899 0 R +>> +endobj + +2248 0 obj +<< + /Type /StructElem + /S /Strong + /P 2245 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [36] + /Pg 4899 0 R +>> +endobj + +2249 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2250 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2251 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2252 0 R] +>> +endobj + +2252 0 obj +<< + /Type /StructElem + /S /Span + /P 2251 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [35] + /Pg 4899 0 R +>> +endobj + +2253 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2254 0 R] +>> +endobj + +2254 0 obj +<< + /Type /StructElem + /S /Span + /P 2253 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [34] + /Pg 4899 0 R +>> +endobj + +2255 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2256 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2257 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2258 0 R] +>> +endobj + +2258 0 obj +<< + /Type /StructElem + /S /Span + /P 2257 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33] + /Pg 4899 0 R +>> +endobj + +2259 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2265 0 R 2264 0 R 2263 0 R 2262 0 R 2261 0 R 2260 0 R] +>> +endobj + +2260 0 obj +<< + /Type /StructElem + /S /Formula + /P 2259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [24 25 26 27 28 29 30 31 32] + /Pg 4899 0 R +>> +endobj + +2261 0 obj +<< + /Type /StructElem + /S /Span + /P 2259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [22 23] + /Pg 4899 0 R +>> +endobj + +2262 0 obj +<< + /Type /StructElem + /S /Formula + /P 2259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [21] + /Pg 4899 0 R +>> +endobj + +2263 0 obj +<< + /Type /StructElem + /S /Span + /P 2259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [20] + /Pg 4899 0 R +>> +endobj + +2264 0 obj +<< + /Type /StructElem + /S /Code + /P 2259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [19] + /Pg 4899 0 R +>> +endobj + +2265 0 obj +<< + /Type /StructElem + /S /Span + /P 2259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [18] + /Pg 4899 0 R +>> +endobj + +2266 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2267 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2268 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2269 0 R] +>> +endobj + +2269 0 obj +<< + /Type /StructElem + /S /Span + /P 2268 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [17] + /Pg 4899 0 R +>> +endobj + +2270 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2276 0 R 2275 0 R 2274 0 R 2273 0 R 2272 0 R 2271 0 R] +>> +endobj + +2271 0 obj +<< + /Type /StructElem + /S /Formula + /P 2270 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [13 14 15 16] + /Pg 4899 0 R +>> +endobj + +2272 0 obj +<< + /Type /StructElem + /S /Span + /P 2270 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11 12] + /Pg 4899 0 R +>> +endobj + +2273 0 obj +<< + /Type /StructElem + /S /Code + /P 2270 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [10] + /Pg 4899 0 R +>> +endobj + +2274 0 obj +<< + /Type /StructElem + /S /Span + /P 2270 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [9] + /Pg 4899 0 R +>> +endobj + +2275 0 obj +<< + /Type /StructElem + /S /Formula + /P 2270 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [8] + /Pg 4899 0 R +>> +endobj + +2276 0 obj +<< + /Type /StructElem + /S /Span + /P 2270 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [7] + /Pg 4899 0 R +>> +endobj + +2277 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2278 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2279 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2280 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2281 0 R] +>> +endobj + +2281 0 obj +<< + /Type /StructElem + /S /Span + /P 2280 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [6] + /Pg 4899 0 R +>> +endobj + +2282 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2284 0 R 2283 0 R] +>> +endobj + +2283 0 obj +<< + /Type /StructElem + /S /Span + /P 2282 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [5] + /Pg 4899 0 R +>> +endobj + +2284 0 obj +<< + /Type /StructElem + /S /Strong + /P 2282 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4] + /Pg 4899 0 R +>> +endobj + +2285 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2286 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2287 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2288 0 R] +>> +endobj + +2288 0 obj +<< + /Type /StructElem + /S /Span + /P 2287 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3] + /Pg 4899 0 R +>> +endobj + +2289 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2291 0 R 2290 0 R] +>> +endobj + +2290 0 obj +<< + /Type /StructElem + /S /Span + /P 2289 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2] + /Pg 4899 0 R +>> +endobj + +2291 0 obj +<< + /Type /StructElem + /S /Strong + /P 2289 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 4899 0 R +>> +endobj + +2292 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2293 0 R] +>> +endobj + +2293 0 obj +<< + /Type /StructElem + /S /Span + /P 2292 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 4899 0 R +>> +endobj + +2294 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2299 0 R 2298 0 R 2297 0 R 2296 0 R 2295 0 R] +>> +endobj + +2295 0 obj +<< + /Type /StructElem + /S /Formula + /P 2294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [248 249 250 251 252 253 254] + /Pg 4884 0 R +>> +endobj + +2296 0 obj +<< + /Type /StructElem + /S /Span + /P 2294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [246 247] + /Pg 4884 0 R +>> +endobj + +2297 0 obj +<< + /Type /StructElem + /S /Code + /P 2294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [245] + /Pg 4884 0 R +>> +endobj + +2298 0 obj +<< + /Type /StructElem + /S /Span + /P 2294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [244] + /Pg 4884 0 R +>> +endobj + +2299 0 obj +<< + /Type /StructElem + /S /Strong + /P 2294 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [243] + /Pg 4884 0 R +>> +endobj + +2300 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2301 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2302 0 R] +>> +endobj + +2302 0 obj +<< + /Type /StructElem + /S /Span + /P 2301 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [242] + /Pg 4884 0 R +>> +endobj + +2303 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2309 0 R 2308 0 R 2307 0 R 2306 0 R 2305 0 R 2304 0 R] +>> +endobj + +2304 0 obj +<< + /Type /StructElem + /S /Formula + /P 2303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [238 239 240 241] + /Pg 4884 0 R +>> +endobj + +2305 0 obj +<< + /Type /StructElem + /S /Span + /P 2303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [236 237] + /Pg 4884 0 R +>> +endobj + +2306 0 obj +<< + /Type /StructElem + /S /Code + /P 2303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [235] + /Pg 4884 0 R +>> +endobj + +2307 0 obj +<< + /Type /StructElem + /S /Span + /P 2303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [234] + /Pg 4884 0 R +>> +endobj + +2308 0 obj +<< + /Type /StructElem + /S /Formula + /P 2303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [233] + /Pg 4884 0 R +>> +endobj + +2309 0 obj +<< + /Type /StructElem + /S /Span + /P 2303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [232] + /Pg 4884 0 R +>> +endobj + +2310 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2311 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2312 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2313 0 R] +>> +endobj + +2313 0 obj +<< + /Type /StructElem + /S /Span + /P 2312 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [231] + /Pg 4884 0 R +>> +endobj + +2314 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2316 0 R 2315 0 R] +>> +endobj + +2315 0 obj +<< + /Type /StructElem + /S /Span + /P 2314 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [230] + /Pg 4884 0 R +>> +endobj + +2316 0 obj +<< + /Type /StructElem + /S /Strong + /P 2314 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [229] + /Pg 4884 0 R +>> +endobj + +2317 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [2318 0 R] +>> +endobj + +2318 0 obj +<< + /Type /StructElem + /S /Span + /P 2317 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [228] + /Pg 4884 0 R +>> +endobj + +2319 0 obj +<< + /Type /StructElem + /S /Div + /P 2218 0 R + /K [] +>> +endobj + +2320 0 obj +<< + /Type /StructElem + /S /P + /P 2217 0 R + /K [2321 0 R 227] + /Pg 4884 0 R +>> +endobj + +2321 0 obj +<< + /Type /StructElem + /S /Strong + /P 2320 0 R + /K [226] + /Pg 4884 0 R +>> +endobj + +2322 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2332 0 R 190 2331 0 R 197 2330 0 R 200 2329 0 R 202 203 2328 0 R 205 2327 0 R 207 2326 0 R 209 2325 0 R 216 217 2324 0 R 222 223 2323 0 R 225] + /Pg 4884 0 R +>> +endobj + +2323 0 obj +<< + /Type /StructElem + /S /Code + /P 2322 0 R + /K [224] + /Pg 4884 0 R +>> +endobj + +2324 0 obj +<< + /Type /StructElem + /S /Formula + /P 2322 0 R + /K [218 219 220 221] + /Pg 4884 0 R +>> +endobj + +2325 0 obj +<< + /Type /StructElem + /S /Formula + /P 2322 0 R + /K [210 211 212 213 214 215] + /Pg 4884 0 R +>> +endobj + +2326 0 obj +<< + /Type /StructElem + /S /Code + /P 2322 0 R + /K [208] + /Pg 4884 0 R +>> +endobj + +2327 0 obj +<< + /Type /StructElem + /S /Link + /P 2322 0 R + /K [206 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4883 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2328 0 obj +<< + /Type /StructElem + /S /Code + /P 2322 0 R + /K [204] + /Pg 4884 0 R +>> +endobj + +2329 0 obj +<< + /Type /StructElem + /S /Link + /P 2322 0 R + /K [201 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4882 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2330 0 obj +<< + /Type /StructElem + /S /Formula + /P 2322 0 R + /K [198 199] + /Pg 4884 0 R +>> +endobj + +2331 0 obj +<< + /Type /StructElem + /S /Formula + /P 2322 0 R + /K [191 192 193 194 195 196] + /Pg 4884 0 R +>> +endobj + +2332 0 obj +<< + /Type /StructElem + /S /Strong + /P 2322 0 R + /K [189] + /Pg 4884 0 R +>> +endobj + +2333 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [140 2344 0 R 155 2343 0 R 157 158 2342 0 R 160 2341 0 R 165 2340 0 R 167 2339 0 R 175 2338 0 R 177 2337 0 R 179 2336 0 R 181 182 2335 0 R 184 185 2334 0 R 188] + /Pg 4884 0 R +>> +endobj + +2334 0 obj +<< + /Type /StructElem + /S /Em + /P 2333 0 R + /K [186 187] + /Pg 4884 0 R +>> +endobj + +2335 0 obj +<< + /Type /StructElem + /S /Em + /P 2333 0 R + /K [183] + /Pg 4884 0 R +>> +endobj + +2336 0 obj +<< + /Type /StructElem + /S /Code + /P 2333 0 R + /K [180] + /Pg 4884 0 R +>> +endobj + +2337 0 obj +<< + /Type /StructElem + /S /Formula + /P 2333 0 R + /K [178] + /Pg 4884 0 R +>> +endobj + +2338 0 obj +<< + /Type /StructElem + /S /Code + /P 2333 0 R + /K [176] + /Pg 4884 0 R +>> +endobj + +2339 0 obj +<< + /Type /StructElem + /S /Formula + /P 2333 0 R + /K [168 169 170 171 172 173 174] + /Pg 4884 0 R +>> +endobj + +2340 0 obj +<< + /Type /StructElem + /S /Code + /P 2333 0 R + /K [166] + /Pg 4884 0 R +>> +endobj + +2341 0 obj +<< + /Type /StructElem + /S /Formula + /P 2333 0 R + /K [161 162 163 164] + /Pg 4884 0 R +>> +endobj + +2342 0 obj +<< + /Type /StructElem + /S /Link + /P 2333 0 R + /K [159 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4881 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2343 0 obj +<< + /Type /StructElem + /S /Code + /P 2333 0 R + /K [156] + /Pg 4884 0 R +>> +endobj + +2344 0 obj +<< + /Type /StructElem + /S /Formula + /P 2333 0 R + /K [141 142 143 144 145 146 147 148 149 150 151 152 153 154] + /Pg 4884 0 R +>> +endobj + +2345 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2356 0 R 2351 0 R 2346 0 R] +>> +endobj + +2346 0 obj +<< + /Type /StructElem + /S /LI + /P 2345 0 R + /K [2350 0 R 2347 0 R] +>> +endobj + +2347 0 obj +<< + /Type /StructElem + /S /LBody + /P 2346 0 R + /K [2349 0 R 128 2348 0 R 139] + /Pg 4884 0 R +>> +endobj + +2348 0 obj +<< + /Type /StructElem + /S /Formula + /P 2347 0 R + /K [129 130 131 132 133 134 135 136 137 138] + /Pg 4884 0 R +>> +endobj + +2349 0 obj +<< + /Type /StructElem + /S /Code + /P 2347 0 R + /K [127] + /Pg 4884 0 R +>> +endobj + +2350 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2346 0 R + /K [126] + /Pg 4884 0 R +>> +endobj + +2351 0 obj +<< + /Type /StructElem + /S /LI + /P 2345 0 R + /K [2355 0 R 2352 0 R] +>> +endobj + +2352 0 obj +<< + /Type /StructElem + /S /LBody + /P 2351 0 R + /K [2354 0 R 116 2353 0 R 125] + /Pg 4884 0 R +>> +endobj + +2353 0 obj +<< + /Type /StructElem + /S /Formula + /P 2352 0 R + /K [117 118 119 120 121 122 123 124] + /Pg 4884 0 R +>> +endobj + +2354 0 obj +<< + /Type /StructElem + /S /Code + /P 2352 0 R + /K [115] + /Pg 4884 0 R +>> +endobj + +2355 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2351 0 R + /K [114] + /Pg 4884 0 R +>> +endobj + +2356 0 obj +<< + /Type /StructElem + /S /LI + /P 2345 0 R + /K [2360 0 R 2357 0 R] +>> +endobj + +2357 0 obj +<< + /Type /StructElem + /S /LBody + /P 2356 0 R + /K [2359 0 R 102 2358 0 R 113] + /Pg 4884 0 R +>> +endobj + +2358 0 obj +<< + /Type /StructElem + /S /Formula + /P 2357 0 R + /K [103 104 105 106 107 108 109 110 111 112] + /Pg 4884 0 R +>> +endobj + +2359 0 obj +<< + /Type /StructElem + /S /Code + /P 2357 0 R + /K [101] + /Pg 4884 0 R +>> +endobj + +2360 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2356 0 R + /K [100] + /Pg 4884 0 R +>> +endobj + +2361 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [96 2362 0 R 98 99] + /Pg 4884 0 R +>> +endobj + +2362 0 obj +<< + /Type /StructElem + /S /Link + /P 2361 0 R + /K [97 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4880 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2363 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Coeffect Operations) + /K [94 95] + /Pg 4884 0 R +>> +endobj + +2364 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2377 0 R 62 2376 0 R 64 65 2375 0 R 67 2374 0 R 69 2373 0 R 71 2372 0 R 73 2371 0 R 75 76 2370 0 R 78 79 2369 0 R 81 82 2368 0 R 86 2367 0 R 88 89 2366 0 R 91 2365 0 R 93] + /Pg 4884 0 R +>> +endobj + +2365 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [92] + /Pg 4884 0 R +>> +endobj + +2366 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [90] + /Pg 4884 0 R +>> +endobj + +2367 0 obj +<< + /Type /StructElem + /S /Link + /P 2364 0 R + /K [87 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4879 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2368 0 obj +<< + /Type /StructElem + /S /Formula + /P 2364 0 R + /K [83 84 85] + /Pg 4884 0 R +>> +endobj + +2369 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [80] + /Pg 4884 0 R +>> +endobj + +2370 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [77] + /Pg 4884 0 R +>> +endobj + +2371 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [74] + /Pg 4884 0 R +>> +endobj + +2372 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [72] + /Pg 4884 0 R +>> +endobj + +2373 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [70] + /Pg 4884 0 R +>> +endobj + +2374 0 obj +<< + /Type /StructElem + /S /Link + /P 2364 0 R + /K [68 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4878 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2375 0 obj +<< + /Type /StructElem + /S /Formula + /P 2364 0 R + /K [66] + /Pg 4884 0 R +>> +endobj + +2376 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [63] + /Pg 4884 0 R +>> +endobj + +2377 0 obj +<< + /Type /StructElem + /S /Code + /P 2364 0 R + /K [61] + /Pg 4884 0 R +>> +endobj + +2378 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [34 2387 0 R 36 2386 0 R 40 2385 0 R 42 43 44 2384 0 R 46 47 2383 0 R 49 2382 0 R 2381 0 R 55 56 2380 0 R 58 2379 0 R 60] + /Pg 4884 0 R +>> +endobj + +2379 0 obj +<< + /Type /StructElem + /S /Code + /P 2378 0 R + /K [59] + /Pg 4884 0 R +>> +endobj + +2380 0 obj +<< + /Type /StructElem + /S /Code + /P 2378 0 R + /K [57] + /Pg 4884 0 R +>> +endobj + +2381 0 obj +<< + /Type /StructElem + /S /Formula + /P 2378 0 R + /K [51 52 53 54] + /Pg 4884 0 R +>> +endobj + +2382 0 obj +<< + /Type /StructElem + /S /Code + /P 2378 0 R + /K [50] + /Pg 4884 0 R +>> +endobj + +2383 0 obj +<< + /Type /StructElem + /S /Link + /P 2378 0 R + /K [48 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4877 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2384 0 obj +<< + /Type /StructElem + /S /Code + /P 2378 0 R + /K [45] + /Pg 4884 0 R +>> +endobj + +2385 0 obj +<< + /Type /StructElem + /S /Link + /P 2378 0 R + /K [41 << + /Type /OBJR + /Pg 4884 0 R + /Obj 4876 0 R + >>] + /Pg 4884 0 R +>> +endobj + +2386 0 obj +<< + /Type /StructElem + /S /Formula + /P 2378 0 R + /K [37 38 39] + /Pg 4884 0 R +>> +endobj + +2387 0 obj +<< + /Type /StructElem + /S /Code + /P 2378 0 R + /K [35] + /Pg 4884 0 R +>> +endobj + +2388 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2527 0 R 2389 0 R] +>> +endobj + +2389 0 obj +<< + /Type /StructElem + /S /Div + /P 2388 0 R + /K [2526 0 R 2524 0 R 2521 0 R 2519 0 R 2518 0 R 2517 0 R 2513 0 R 2511 0 R 2510 0 R 2506 0 R 2504 0 R 2503 0 R 2500 0 R 2498 0 R 2497 0 R 2496 0 R 2495 0 R 2490 0 R 2488 0 R 2487 0 R 2486 0 R 2480 0 R 2478 0 R 2477 0 R 2476 0 R 2471 0 R 2469 0 R 2468 0 R 2465 0 R 2463 0 R 2460 0 R 2458 0 R 2457 0 R 2456 0 R 2452 0 R 2450 0 R 2449 0 R 2443 0 R 2441 0 R 2440 0 R 2437 0 R 2435 0 R 2434 0 R 2433 0 R 2432 0 R 2427 0 R 2425 0 R 2424 0 R 2423 0 R 2419 0 R 2417 0 R 2416 0 R 2415 0 R 2410 0 R 2408 0 R 2407 0 R 2406 0 R 2404 0 R 2402 0 R 2401 0 R 2397 0 R 2395 0 R 2394 0 R 2391 0 R 2390 0 R] +>> +endobj + +2390 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2391 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2393 0 R 2392 0 R] +>> +endobj + +2392 0 obj +<< + /Type /StructElem + /S /Span + /P 2391 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33] + /Pg 4884 0 R +>> +endobj + +2393 0 obj +<< + /Type /StructElem + /S /Strong + /P 2391 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [32] + /Pg 4884 0 R +>> +endobj + +2394 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2395 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2396 0 R] +>> +endobj + +2396 0 obj +<< + /Type /StructElem + /S /Span + /P 2395 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [31] + /Pg 4884 0 R +>> +endobj + +2397 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2400 0 R 2399 0 R 2398 0 R] +>> +endobj + +2398 0 obj +<< + /Type /StructElem + /S /Span + /P 2397 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [30] + /Pg 4884 0 R +>> +endobj + +2399 0 obj +<< + /Type /StructElem + /S /Formula + /P 2397 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [29] + /Pg 4884 0 R +>> +endobj + +2400 0 obj +<< + /Type /StructElem + /S /Span + /P 2397 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [28] + /Pg 4884 0 R +>> +endobj + +2401 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2402 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2403 0 R] +>> +endobj + +2403 0 obj +<< + /Type /StructElem + /S /Span + /P 2402 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [27] + /Pg 4884 0 R +>> +endobj + +2404 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2405 0 R] +>> +endobj + +2405 0 obj +<< + /Type /StructElem + /S /Span + /P 2404 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [26] + /Pg 4884 0 R +>> +endobj + +2406 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2407 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2408 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2409 0 R] +>> +endobj + +2409 0 obj +<< + /Type /StructElem + /S /Span + /P 2408 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [25] + /Pg 4884 0 R +>> +endobj + +2410 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2414 0 R 2413 0 R 2412 0 R 2411 0 R] +>> +endobj + +2411 0 obj +<< + /Type /StructElem + /S /Span + /P 2410 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [22 24] + /Pg 4884 0 R +>> +endobj + +2412 0 obj +<< + /Type /StructElem + /S /Strong + /P 2410 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [23] + /Pg 4884 0 R +>> +endobj + +2413 0 obj +<< + /Type /StructElem + /S /Formula + /P 2410 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [21] + /Pg 4884 0 R +>> +endobj + +2414 0 obj +<< + /Type /StructElem + /S /Span + /P 2410 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [20] + /Pg 4884 0 R +>> +endobj + +2415 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2416 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2417 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2418 0 R] +>> +endobj + +2418 0 obj +<< + /Type /StructElem + /S /Span + /P 2417 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [19] + /Pg 4884 0 R +>> +endobj + +2419 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2422 0 R 2421 0 R 2420 0 R] +>> +endobj + +2420 0 obj +<< + /Type /StructElem + /S /Span + /P 2419 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [18] + /Pg 4884 0 R +>> +endobj + +2421 0 obj +<< + /Type /StructElem + /S /Formula + /P 2419 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [17] + /Pg 4884 0 R +>> +endobj + +2422 0 obj +<< + /Type /StructElem + /S /Span + /P 2419 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [16] + /Pg 4884 0 R +>> +endobj + +2423 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2424 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2425 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2426 0 R] +>> +endobj + +2426 0 obj +<< + /Type /StructElem + /S /Span + /P 2425 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [15] + /Pg 4884 0 R +>> +endobj + +2427 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2431 0 R 2430 0 R 2429 0 R 2428 0 R] +>> +endobj + +2428 0 obj +<< + /Type /StructElem + /S /Span + /P 2427 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11 13] + /Pg 4884 0 R +>> +endobj + +2429 0 obj +<< + /Type /StructElem + /S /Strong + /P 2427 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [14] + /Pg 4884 0 R +>> +endobj + +2430 0 obj +<< + /Type /StructElem + /S /Strong + /P 2427 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [12] + /Pg 4884 0 R +>> +endobj + +2431 0 obj +<< + /Type /StructElem + /S /Strong + /P 2427 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [10] + /Pg 4884 0 R +>> +endobj + +2432 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2433 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2434 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2435 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2436 0 R] +>> +endobj + +2436 0 obj +<< + /Type /StructElem + /S /Span + /P 2435 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [9] + /Pg 4884 0 R +>> +endobj + +2437 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2439 0 R 2438 0 R] +>> +endobj + +2438 0 obj +<< + /Type /StructElem + /S /Span + /P 2437 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [8] + /Pg 4884 0 R +>> +endobj + +2439 0 obj +<< + /Type /StructElem + /S /Strong + /P 2437 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [7] + /Pg 4884 0 R +>> +endobj + +2440 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2441 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2442 0 R] +>> +endobj + +2442 0 obj +<< + /Type /StructElem + /S /Span + /P 2441 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [6] + /Pg 4884 0 R +>> +endobj + +2443 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2448 0 R 2447 0 R 2446 0 R 2445 0 R 2444 0 R] +>> +endobj + +2444 0 obj +<< + /Type /StructElem + /S /Span + /P 2443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [5] + /Pg 4884 0 R +>> +endobj + +2445 0 obj +<< + /Type /StructElem + /S /Formula + /P 2443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4] + /Pg 4884 0 R +>> +endobj + +2446 0 obj +<< + /Type /StructElem + /S /Span + /P 2443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3] + /Pg 4884 0 R +>> +endobj + +2447 0 obj +<< + /Type /StructElem + /S /Formula + /P 2443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2] + /Pg 4884 0 R +>> +endobj + +2448 0 obj +<< + /Type /StructElem + /S /Span + /P 2443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 4884 0 R +>> +endobj + +2449 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2450 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2451 0 R] +>> +endobj + +2451 0 obj +<< + /Type /StructElem + /S /Span + /P 2450 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 4884 0 R +>> +endobj + +2452 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2455 0 R 2454 0 R 2453 0 R] +>> +endobj + +2453 0 obj +<< + /Type /StructElem + /S /Span + /P 2452 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [195] + /Pg 4874 0 R +>> +endobj + +2454 0 obj +<< + /Type /StructElem + /S /Formula + /P 2452 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [194] + /Pg 4874 0 R +>> +endobj + +2455 0 obj +<< + /Type /StructElem + /S /Span + /P 2452 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [193] + /Pg 4874 0 R +>> +endobj + +2456 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2457 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2458 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2459 0 R] +>> +endobj + +2459 0 obj +<< + /Type /StructElem + /S /Span + /P 2458 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [192] + /Pg 4874 0 R +>> +endobj + +2460 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2462 0 R 2461 0 R] +>> +endobj + +2461 0 obj +<< + /Type /StructElem + /S /Span + /P 2460 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [191] + /Pg 4874 0 R +>> +endobj + +2462 0 obj +<< + /Type /StructElem + /S /Strong + /P 2460 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [190] + /Pg 4874 0 R +>> +endobj + +2463 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2464 0 R] +>> +endobj + +2464 0 obj +<< + /Type /StructElem + /S /Span + /P 2463 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [189] + /Pg 4874 0 R +>> +endobj + +2465 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2467 0 R 2466 0 R] +>> +endobj + +2466 0 obj +<< + /Type /StructElem + /S /Span + /P 2465 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [188] + /Pg 4874 0 R +>> +endobj + +2467 0 obj +<< + /Type /StructElem + /S /Strong + /P 2465 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [187] + /Pg 4874 0 R +>> +endobj + +2468 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2469 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2470 0 R] +>> +endobj + +2470 0 obj +<< + /Type /StructElem + /S /Span + /P 2469 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [186] + /Pg 4874 0 R +>> +endobj + +2471 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2475 0 R 2474 0 R 2473 0 R 2472 0 R] +>> +endobj + +2472 0 obj +<< + /Type /StructElem + /S /Span + /P 2471 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [182 184] + /Pg 4874 0 R +>> +endobj + +2473 0 obj +<< + /Type /StructElem + /S /Strong + /P 2471 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [185] + /Pg 4874 0 R +>> +endobj + +2474 0 obj +<< + /Type /StructElem + /S /Strong + /P 2471 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [183] + /Pg 4874 0 R +>> +endobj + +2475 0 obj +<< + /Type /StructElem + /S /Strong + /P 2471 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [181] + /Pg 4874 0 R +>> +endobj + +2476 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2477 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2478 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2479 0 R] +>> +endobj + +2479 0 obj +<< + /Type /StructElem + /S /Span + /P 2478 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [180] + /Pg 4874 0 R +>> +endobj + +2480 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2485 0 R 2484 0 R 2483 0 R 2482 0 R 2481 0 R] +>> +endobj + +2481 0 obj +<< + /Type /StructElem + /S /Span + /P 2480 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [179] + /Pg 4874 0 R +>> +endobj + +2482 0 obj +<< + /Type /StructElem + /S /Formula + /P 2480 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [178] + /Pg 4874 0 R +>> +endobj + +2483 0 obj +<< + /Type /StructElem + /S /Span + /P 2480 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [175 177] + /Pg 4874 0 R +>> +endobj + +2484 0 obj +<< + /Type /StructElem + /S /Strong + /P 2480 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [176] + /Pg 4874 0 R +>> +endobj + +2485 0 obj +<< + /Type /StructElem + /S /Strong + /P 2480 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [174] + /Pg 4874 0 R +>> +endobj + +2486 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2487 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2488 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2489 0 R] +>> +endobj + +2489 0 obj +<< + /Type /StructElem + /S /Span + /P 2488 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [173] + /Pg 4874 0 R +>> +endobj + +2490 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2494 0 R 2493 0 R 2492 0 R 2491 0 R] +>> +endobj + +2491 0 obj +<< + /Type /StructElem + /S /Span + /P 2490 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [170 172] + /Pg 4874 0 R +>> +endobj + +2492 0 obj +<< + /Type /StructElem + /S /Strong + /P 2490 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [171] + /Pg 4874 0 R +>> +endobj + +2493 0 obj +<< + /Type /StructElem + /S /Formula + /P 2490 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [169] + /Pg 4874 0 R +>> +endobj + +2494 0 obj +<< + /Type /StructElem + /S /Span + /P 2490 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [168] + /Pg 4874 0 R +>> +endobj + +2495 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2496 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2497 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2498 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2499 0 R] +>> +endobj + +2499 0 obj +<< + /Type /StructElem + /S /Span + /P 2498 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [167] + /Pg 4874 0 R +>> +endobj + +2500 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2502 0 R 2501 0 R] +>> +endobj + +2501 0 obj +<< + /Type /StructElem + /S /Span + /P 2500 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [166] + /Pg 4874 0 R +>> +endobj + +2502 0 obj +<< + /Type /StructElem + /S /Strong + /P 2500 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [165] + /Pg 4874 0 R +>> +endobj + +2503 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2504 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2505 0 R] +>> +endobj + +2505 0 obj +<< + /Type /StructElem + /S /Span + /P 2504 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [164] + /Pg 4874 0 R +>> +endobj + +2506 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2509 0 R 2508 0 R 2507 0 R] +>> +endobj + +2507 0 obj +<< + /Type /StructElem + /S /Span + /P 2506 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [163] + /Pg 4874 0 R +>> +endobj + +2508 0 obj +<< + /Type /StructElem + /S /Formula + /P 2506 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [162] + /Pg 4874 0 R +>> +endobj + +2509 0 obj +<< + /Type /StructElem + /S /Span + /P 2506 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [161] + /Pg 4874 0 R +>> +endobj + +2510 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2511 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2512 0 R] +>> +endobj + +2512 0 obj +<< + /Type /StructElem + /S /Span + /P 2511 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [160] + /Pg 4874 0 R +>> +endobj + +2513 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2516 0 R 2515 0 R 2514 0 R] +>> +endobj + +2514 0 obj +<< + /Type /StructElem + /S /Span + /P 2513 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [159] + /Pg 4874 0 R +>> +endobj + +2515 0 obj +<< + /Type /StructElem + /S /Formula + /P 2513 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [158] + /Pg 4874 0 R +>> +endobj + +2516 0 obj +<< + /Type /StructElem + /S /Span + /P 2513 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [157] + /Pg 4874 0 R +>> +endobj + +2517 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2518 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2519 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2520 0 R] +>> +endobj + +2520 0 obj +<< + /Type /StructElem + /S /Span + /P 2519 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [156] + /Pg 4874 0 R +>> +endobj + +2521 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2523 0 R 2522 0 R] +>> +endobj + +2522 0 obj +<< + /Type /StructElem + /S /Span + /P 2521 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [155] + /Pg 4874 0 R +>> +endobj + +2523 0 obj +<< + /Type /StructElem + /S /Strong + /P 2521 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154] + /Pg 4874 0 R +>> +endobj + +2524 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [2525 0 R] +>> +endobj + +2525 0 obj +<< + /Type /StructElem + /S /Span + /P 2524 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [153] + /Pg 4874 0 R +>> +endobj + +2526 0 obj +<< + /Type /StructElem + /S /Div + /P 2389 0 R + /K [] +>> +endobj + +2527 0 obj +<< + /Type /StructElem + /S /P + /P 2388 0 R + /K [2528 0 R 152] + /Pg 4874 0 R +>> +endobj + +2528 0 obj +<< + /Type /StructElem + /S /Strong + /P 2527 0 R + /K [151] + /Pg 4874 0 R +>> +endobj + +2529 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2535 0 R 138 2534 0 R 140 2533 0 R 144 2532 0 R 146 2531 0 R 148 2530 0 R 150] + /Pg 4874 0 R +>> +endobj + +2530 0 obj +<< + /Type /StructElem + /S /Code + /P 2529 0 R + /K [149] + /Pg 4874 0 R +>> +endobj + +2531 0 obj +<< + /Type /StructElem + /S /Formula + /P 2529 0 R + /K [147] + /Pg 4874 0 R +>> +endobj + +2532 0 obj +<< + /Type /StructElem + /S /Formula + /P 2529 0 R + /K [145] + /Pg 4874 0 R +>> +endobj + +2533 0 obj +<< + /Type /StructElem + /S /Formula + /P 2529 0 R + /K [141 142 143] + /Pg 4874 0 R +>> +endobj + +2534 0 obj +<< + /Type /StructElem + /S /Code + /P 2529 0 R + /K [139] + /Pg 4874 0 R +>> +endobj + +2535 0 obj +<< + /Type /StructElem + /S /Link + /P 2529 0 R + /K [137 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4873 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2536 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [98 2546 0 R 100 101 2545 0 R 103 104 2544 0 R 106 107 108 2543 0 R 110 2542 0 R 114 2541 0 R 116 117 2540 0 R 121 2539 0 R 126 127 2538 0 R 130 2537 0 R 134 135 136] + /Pg 4874 0 R +>> +endobj + +2537 0 obj +<< + /Type /StructElem + /S /Formula + /P 2536 0 R + /K [131 132 133] + /Pg 4874 0 R +>> +endobj + +2538 0 obj +<< + /Type /StructElem + /S /Formula + /P 2536 0 R + /K [128 129] + /Pg 4874 0 R +>> +endobj + +2539 0 obj +<< + /Type /StructElem + /S /Formula + /P 2536 0 R + /K [122 123 124 125] + /Pg 4874 0 R +>> +endobj + +2540 0 obj +<< + /Type /StructElem + /S /Formula + /P 2536 0 R + /K [118 119 120] + /Pg 4874 0 R +>> +endobj + +2541 0 obj +<< + /Type /StructElem + /S /Link + /P 2536 0 R + /K [115 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4872 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2542 0 obj +<< + /Type /StructElem + /S /Formula + /P 2536 0 R + /K [111 112 113] + /Pg 4874 0 R +>> +endobj + +2543 0 obj +<< + /Type /StructElem + /S /Code + /P 2536 0 R + /K [109] + /Pg 4874 0 R +>> +endobj + +2544 0 obj +<< + /Type /StructElem + /S /Code + /P 2536 0 R + /K [105] + /Pg 4874 0 R +>> +endobj + +2545 0 obj +<< + /Type /StructElem + /S /Code + /P 2536 0 R + /K [102] + /Pg 4874 0 R +>> +endobj + +2546 0 obj +<< + /Type /StructElem + /S /Link + /P 2536 0 R + /K [99 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4871 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2547 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Effect Tracking) + /K [96 97] + /Pg 4874 0 R +>> +endobj + +2548 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [85 2552 0 R 87 88 2551 0 R 90 91 2550 0 R 93 2549 0 R 95] + /Pg 4874 0 R +>> +endobj + +2549 0 obj +<< + /Type /StructElem + /S /Link + /P 2548 0 R + /K [94 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4870 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2550 0 obj +<< + /Type /StructElem + /S /Link + /P 2548 0 R + /K [92 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4869 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2551 0 obj +<< + /Type /StructElem + /S /Link + /P 2548 0 R + /K [89 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4868 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2552 0 obj +<< + /Type /StructElem + /S /Link + /P 2548 0 R + /K [86 << + /Type /OBJR + /Pg 4874 0 R + /Obj 4867 0 R + >>] + /Pg 4874 0 R +>> +endobj + +2553 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /K [2641 0 R 2554 0 R] +>> +endobj + +2554 0 obj +<< + /Type /StructElem + /S /Div + /P 2553 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2555 0 R] +>> +endobj + +2555 0 obj +<< + /Type /StructElem + /S /Table + /P 2554 0 R + /K [2638 0 R 2629 0 R 2556 0 R] +>> +endobj + +2556 0 obj +<< + /Type /StructElem + /S /TBody + /P 2555 0 R + /K [2627 0 R 2625 0 R 2620 0 R 2615 0 R 2610 0 R 2601 0 R 2594 0 R 2589 0 R 2584 0 R 2579 0 R 2574 0 R 2569 0 R 2564 0 R 2559 0 R 2557 0 R] +>> +endobj + +2557 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2558 0 R] +>> +endobj + +2558 0 obj +<< + /Type /StructElem + /S /TD + /P 2557 0 R + /A [<< + /O /Table + /Headers [(U1x0y1) (U1x1y1)] + /ColSpan 2 + >> << + /O /Layout + /BorderColor [0 0 0] + /BorderStyle [/None /Solid /None /None] + /BorderThickness [0 0.8 0 0] + >>] + /K [] +>> +endobj + +2559 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2562 0 R 2560 0 R] +>> +endobj + +2560 0 obj +<< + /Type /StructElem + /S /TD + /P 2559 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2561 0 R 83] + /Pg 4874 0 R +>> +endobj + +2561 0 obj +<< + /Type /StructElem + /S /Code + /P 2560 0 R + /K [82] + /Pg 4874 0 R +>> +endobj + +2562 0 obj +<< + /Type /StructElem + /S /TD + /P 2559 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2563 0 R] +>> +endobj + +2563 0 obj +<< + /Type /StructElem + /S /Formula + /P 2562 0 R + /K [81] + /Pg 4874 0 R +>> +endobj + +2564 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2567 0 R 2565 0 R] +>> +endobj + +2565 0 obj +<< + /Type /StructElem + /S /TD + /P 2564 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2566 0 R] +>> +endobj + +2566 0 obj +<< + /Type /StructElem + /S /Code + /P 2565 0 R + /K [80] + /Pg 4874 0 R +>> +endobj + +2567 0 obj +<< + /Type /StructElem + /S /TD + /P 2564 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2568 0 R] +>> +endobj + +2568 0 obj +<< + /Type /StructElem + /S /Formula + /P 2567 0 R + /K [75 76 77 78 79] + /Pg 4874 0 R +>> +endobj + +2569 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2572 0 R 2570 0 R] +>> +endobj + +2570 0 obj +<< + /Type /StructElem + /S /TD + /P 2569 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2571 0 R] +>> +endobj + +2571 0 obj +<< + /Type /StructElem + /S /Code + /P 2570 0 R + /K [74] + /Pg 4874 0 R +>> +endobj + +2572 0 obj +<< + /Type /StructElem + /S /TD + /P 2569 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2573 0 R] +>> +endobj + +2573 0 obj +<< + /Type /StructElem + /S /Formula + /P 2572 0 R + /K [70 71 72 73] + /Pg 4874 0 R +>> +endobj + +2574 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2577 0 R 2575 0 R] +>> +endobj + +2575 0 obj +<< + /Type /StructElem + /S /TD + /P 2574 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2576 0 R] +>> +endobj + +2576 0 obj +<< + /Type /StructElem + /S /Code + /P 2575 0 R + /K [69] + /Pg 4874 0 R +>> +endobj + +2577 0 obj +<< + /Type /StructElem + /S /TD + /P 2574 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2578 0 R] +>> +endobj + +2578 0 obj +<< + /Type /StructElem + /S /Formula + /P 2577 0 R + /K [65 66 67 68] + /Pg 4874 0 R +>> +endobj + +2579 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2582 0 R 2580 0 R] +>> +endobj + +2580 0 obj +<< + /Type /StructElem + /S /TD + /P 2579 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2581 0 R 64] + /Pg 4874 0 R +>> +endobj + +2581 0 obj +<< + /Type /StructElem + /S /Code + /P 2580 0 R + /K [63] + /Pg 4874 0 R +>> +endobj + +2582 0 obj +<< + /Type /StructElem + /S /TD + /P 2579 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2583 0 R] +>> +endobj + +2583 0 obj +<< + /Type /StructElem + /S /Formula + /P 2582 0 R + /K [61 62] + /Pg 4874 0 R +>> +endobj + +2584 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2587 0 R 2585 0 R] +>> +endobj + +2585 0 obj +<< + /Type /StructElem + /S /TD + /P 2584 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2586 0 R] +>> +endobj + +2586 0 obj +<< + /Type /StructElem + /S /Code + /P 2585 0 R + /K [60] + /Pg 4874 0 R +>> +endobj + +2587 0 obj +<< + /Type /StructElem + /S /TD + /P 2584 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2588 0 R] +>> +endobj + +2588 0 obj +<< + /Type /StructElem + /S /Formula + /P 2587 0 R + /K [54 55 56 57 58 59] + /Pg 4874 0 R +>> +endobj + +2589 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2592 0 R 2590 0 R] +>> +endobj + +2590 0 obj +<< + /Type /StructElem + /S /TD + /P 2589 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2591 0 R] +>> +endobj + +2591 0 obj +<< + /Type /StructElem + /S /Code + /P 2590 0 R + /K [53] + /Pg 4874 0 R +>> +endobj + +2592 0 obj +<< + /Type /StructElem + /S /TD + /P 2589 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2593 0 R] +>> +endobj + +2593 0 obj +<< + /Type /StructElem + /S /Formula + /P 2592 0 R + /K [47 48 49 50 51 52] + /Pg 4874 0 R +>> +endobj + +2594 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2598 0 R 2595 0 R] +>> +endobj + +2595 0 obj +<< + /Type /StructElem + /S /TD + /P 2594 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2597 0 R 45 2596 0 R] + /Pg 4874 0 R +>> +endobj + +2596 0 obj +<< + /Type /StructElem + /S /Code + /P 2595 0 R + /K [46] + /Pg 4874 0 R +>> +endobj + +2597 0 obj +<< + /Type /StructElem + /S /Code + /P 2595 0 R + /K [44] + /Pg 4874 0 R +>> +endobj + +2598 0 obj +<< + /Type /StructElem + /S /TD + /P 2594 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2600 0 R 37 2599 0 R] + /Pg 4874 0 R +>> +endobj + +2599 0 obj +<< + /Type /StructElem + /S /Formula + /P 2598 0 R + /K [38 39 40 41 42 43] + /Pg 4874 0 R +>> +endobj + +2600 0 obj +<< + /Type /StructElem + /S /Formula + /P 2598 0 R + /K [33 34 35 36] + /Pg 4874 0 R +>> +endobj + +2601 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2606 0 R 2602 0 R] +>> +endobj + +2602 0 obj +<< + /Type /StructElem + /S /TD + /P 2601 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2605 0 R 29 2604 0 R 31 2603 0 R] + /Pg 4874 0 R +>> +endobj + +2603 0 obj +<< + /Type /StructElem + /S /Code + /P 2602 0 R + /K [32] + /Pg 4874 0 R +>> +endobj + +2604 0 obj +<< + /Type /StructElem + /S /Code + /P 2602 0 R + /K [30] + /Pg 4874 0 R +>> +endobj + +2605 0 obj +<< + /Type /StructElem + /S /Code + /P 2602 0 R + /K [28] + /Pg 4874 0 R +>> +endobj + +2606 0 obj +<< + /Type /StructElem + /S /TD + /P 2601 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2609 0 R 22 2608 0 R 25 2607 0 R] + /Pg 4874 0 R +>> +endobj + +2607 0 obj +<< + /Type /StructElem + /S /Formula + /P 2606 0 R + /K [26 27] + /Pg 4874 0 R +>> +endobj + +2608 0 obj +<< + /Type /StructElem + /S /Formula + /P 2606 0 R + /K [23 24] + /Pg 4874 0 R +>> +endobj + +2609 0 obj +<< + /Type /StructElem + /S /Formula + /P 2606 0 R + /K [21] + /Pg 4874 0 R +>> +endobj + +2610 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2613 0 R 2611 0 R] +>> +endobj + +2611 0 obj +<< + /Type /StructElem + /S /TD + /P 2610 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2612 0 R] +>> +endobj + +2612 0 obj +<< + /Type /StructElem + /S /Code + /P 2611 0 R + /K [20] + /Pg 4874 0 R +>> +endobj + +2613 0 obj +<< + /Type /StructElem + /S /TD + /P 2610 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2614 0 R] +>> +endobj + +2614 0 obj +<< + /Type /StructElem + /S /Formula + /P 2613 0 R + /K [15 16 17 18 19] + /Pg 4874 0 R +>> +endobj + +2615 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2617 0 R 2616 0 R] +>> +endobj + +2616 0 obj +<< + /Type /StructElem + /S /TD + /P 2615 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [14] + /Pg 4874 0 R +>> +endobj + +2617 0 obj +<< + /Type /StructElem + /S /TD + /P 2615 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2619 0 R 10 2618 0 R] + /Pg 4874 0 R +>> +endobj + +2618 0 obj +<< + /Type /StructElem + /S /Formula + /P 2617 0 R + /K [11 12 13] + /Pg 4874 0 R +>> +endobj + +2619 0 obj +<< + /Type /StructElem + /S /Formula + /P 2617 0 R + /K [8 9] + /Pg 4874 0 R +>> +endobj + +2620 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2623 0 R 2621 0 R] +>> +endobj + +2621 0 obj +<< + /Type /StructElem + /S /TD + /P 2620 0 R + /A [<< + /O /Table + /Headers [(U1x1y1)] + >>] + /K [2622 0 R 7] + /Pg 4874 0 R +>> +endobj + +2622 0 obj +<< + /Type /StructElem + /S /Code + /P 2621 0 R + /K [6] + /Pg 4874 0 R +>> +endobj + +2623 0 obj +<< + /Type /StructElem + /S /TD + /P 2620 0 R + /A [<< + /O /Table + /Headers [(U1x0y1)] + >>] + /K [2624 0 R] +>> +endobj + +2624 0 obj +<< + /Type /StructElem + /S /Formula + /P 2623 0 R + /K [4 5] + /Pg 4874 0 R +>> +endobj + +2625 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2626 0 R] +>> +endobj + +2626 0 obj +<< + /Type /StructElem + /S /TD + /P 2625 0 R + /A [<< + /O /Table + /Headers [(U1x0y1) (U1x1y1)] + /ColSpan 2 + >> << + /O /Layout + /BorderColor [0 0 0] + /BorderStyle [/Solid /None /None /None] + /BorderThickness [0.4 0 0 0] + >>] + /K [] +>> +endobj + +2627 0 obj +<< + /Type /StructElem + /S /TR + /P 2556 0 R + /K [2628 0 R] +>> +endobj + +2628 0 obj +<< + /Type /StructElem + /S /TD + /P 2627 0 R + /A [<< + /O /Table + /Headers [(U1x0y1) (U1x1y1)] + /ColSpan 2 + >> << + /O /Layout + /BorderColor [0 0 0] + /BorderStyle [/None /Solid /None /None] + /BorderThickness [0 0.4 0 0] + >>] + /K [] +>> +endobj + +2629 0 obj +<< + /Type /StructElem + /S /TBody + /P 2555 0 R + /K [2630 0 R] +>> +endobj + +2630 0 obj +<< + /Type /StructElem + /S /TR + /P 2629 0 R + /K [2633 0 R 2631 0 R] +>> +endobj + +2631 0 obj +<< + /Type /StructElem + /S /TH + /P 2630 0 R + /ID (U1x1y1) + /A [<< + /O /Table + /Scope /Column + /Headers [] + >>] + /K [2632 0 R] +>> +endobj + +2632 0 obj +<< + /Type /StructElem + /S /Strong + /P 2631 0 R + /K [3] + /Pg 4874 0 R +>> +endobj + +2633 0 obj +<< + /Type /StructElem + /S /TH + /P 2630 0 R + /ID (U1x0y1) + /A [<< + /O /Table + /Scope /Column + /Headers [] + >>] + /K [2637 0 R 2635 0 R 2634 0 R] +>> +endobj + +2634 0 obj +<< + /Type /StructElem + /S /Strong + /P 2633 0 R + /K [2] + /Pg 4874 0 R +>> +endobj + +2635 0 obj +<< + /Type /StructElem + /S /Link + /P 2633 0 R + /K [2636 0 R << + /Type /OBJR + /Pg 4874 0 R + /Obj 4866 0 R + >>] +>> +endobj + +2636 0 obj +<< + /Type /StructElem + /S /Strong + /P 2635 0 R + /K [1] + /Pg 4874 0 R +>> +endobj + +2637 0 obj +<< + /Type /StructElem + /S /Strong + /P 2633 0 R + /K [0] + /Pg 4874 0 R +>> +endobj + +2638 0 obj +<< + /Type /StructElem + /S /TBody + /P 2555 0 R + /K [2639 0 R] +>> +endobj + +2639 0 obj +<< + /Type /StructElem + /S /TR + /P 2638 0 R + /K [2640 0 R] +>> +endobj + +2640 0 obj +<< + /Type /StructElem + /S /TD + /P 2639 0 R + /A [<< + /O /Table + /Headers [] + /ColSpan 2 + >> << + /O /Layout + /BorderColor [0 0 0] + /BorderStyle [/Solid /None /None /None] + /BorderThickness [0.8 0 0 0] + >>] + /K [] +>> +endobj + +2641 0 obj +<< + /Type /StructElem + /S /Caption + /P 2553 0 R + /K [2642 0 R] +>> +endobj + +2642 0 obj +<< + /Type /StructElem + /S /Span + /P 2641 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [84] + /Pg 4874 0 R +>> +endobj + +2643 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [62 2660 0 R 64 65 2659 0 R 67 68 69 2658 0 R 71 2657 0 R 73 2656 0 R 75 2655 0 R 77 78 2654 0 R 80 2653 0 R 82 83 2652 0 R 85 86 87 2651 0 R 89 2650 0 R 91 2649 0 R 93 94 2648 0 R 100 2647 0 R 102 2646 0 R 104 2645 0 R 106 2644 0 R 108 109] + /Pg 4864 0 R +>> +endobj + +2644 0 obj +<< + /Type /StructElem + /S /Link + /P 2643 0 R + /K [107 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4863 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2645 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [105] + /Pg 4864 0 R +>> +endobj + +2646 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [103] + /Pg 4864 0 R +>> +endobj + +2647 0 obj +<< + /Type /StructElem + /S /Formula + /P 2643 0 R + /K [101] + /Pg 4864 0 R +>> +endobj + +2648 0 obj +<< + /Type /StructElem + /S /Formula + /P 2643 0 R + /K [95 96 97 98 99] + /Pg 4864 0 R +>> +endobj + +2649 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [92] + /Pg 4864 0 R +>> +endobj + +2650 0 obj +<< + /Type /StructElem + /S /Formula + /P 2643 0 R + /K [90] + /Pg 4864 0 R +>> +endobj + +2651 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [88] + /Pg 4864 0 R +>> +endobj + +2652 0 obj +<< + /Type /StructElem + /S /Link + /P 2643 0 R + /K [84 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4862 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2653 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [81] + /Pg 4864 0 R +>> +endobj + +2654 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [79] + /Pg 4864 0 R +>> +endobj + +2655 0 obj +<< + /Type /StructElem + /S /Formula + /P 2643 0 R + /K [76] + /Pg 4864 0 R +>> +endobj + +2656 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [74] + /Pg 4864 0 R +>> +endobj + +2657 0 obj +<< + /Type /StructElem + /S /Formula + /P 2643 0 R + /K [72] + /Pg 4864 0 R +>> +endobj + +2658 0 obj +<< + /Type /StructElem + /S /Code + /P 2643 0 R + /K [70] + /Pg 4864 0 R +>> +endobj + +2659 0 obj +<< + /Type /StructElem + /S /Link + /P 2643 0 R + /K [66 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4861 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2660 0 obj +<< + /Type /StructElem + /S /Em + /P 2643 0 R + /K [63] + /Pg 4864 0 R +>> +endobj + +2661 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2664 0 R 53 54 55 2663 0 R 57 58 2662 0 R 60 61] + /Pg 4864 0 R +>> +endobj + +2662 0 obj +<< + /Type /StructElem + /S /Code + /P 2661 0 R + /K [59] + /Pg 4864 0 R +>> +endobj + +2663 0 obj +<< + /Type /StructElem + /S /Code + /P 2661 0 R + /K [56] + /Pg 4864 0 R +>> +endobj + +2664 0 obj +<< + /Type /StructElem + /S /Link + /P 2661 0 R + /K [52 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4860 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2665 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Core Library) + /K [50 51] + /Pg 4864 0 R +>> +endobj + +2666 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [22 2675 0 R 24 2674 0 R 26 27 2673 0 R 29 30 31 32 33 2672 0 R 35 2671 0 R 37 38 2670 0 R 40 2669 0 R 42 43 44 2668 0 R 46 2667 0 R 48 49] + /Pg 4864 0 R +>> +endobj + +2667 0 obj +<< + /Type /StructElem + /S /Link + /P 2666 0 R + /K [47 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4859 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2668 0 obj +<< + /Type /StructElem + /S /Em + /P 2666 0 R + /K [45] + /Pg 4864 0 R +>> +endobj + +2669 0 obj +<< + /Type /StructElem + /S /Link + /P 2666 0 R + /K [41 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4858 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2670 0 obj +<< + /Type /StructElem + /S /Em + /P 2666 0 R + /K [39] + /Pg 4864 0 R +>> +endobj + +2671 0 obj +<< + /Type /StructElem + /S /Link + /P 2666 0 R + /K [36 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4857 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2672 0 obj +<< + /Type /StructElem + /S /Em + /P 2666 0 R + /K [34] + /Pg 4864 0 R +>> +endobj + +2673 0 obj +<< + /Type /StructElem + /S /Em + /P 2666 0 R + /K [28] + /Pg 4864 0 R +>> +endobj + +2674 0 obj +<< + /Type /StructElem + /S /Link + /P 2666 0 R + /K [25 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4856 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2675 0 obj +<< + /Type /StructElem + /S /Em + /P 2666 0 R + /K [23] + /Pg 4864 0 R +>> +endobj + +2676 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Implementation and Case Study) + /K [20 21] + /Pg 4864 0 R +>> +endobj + +2677 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [6 7 8 9 10 2679 0 R 12 13 14 2678 0 R 16 17 18 19] + /Pg 4864 0 R +>> +endobj + +2678 0 obj +<< + /Type /StructElem + /S /Link + /P 2677 0 R + /K [15 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4855 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2679 0 obj +<< + /Type /StructElem + /S /Link + /P 2677 0 R + /K [11 << + /Type /OBJR + /Pg 4864 0 R + /Obj 4854 0 R + >>] + /Pg 4864 0 R +>> +endobj + +2680 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2 3 4 5] + /Pg 4864 0 R +>> +endobj + +2681 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2685 0 R 89 90 91 92 2684 0 R 94 95 96 97 98 2683 0 R 100 101 102 2682 0 R 104 << + /Type /MCR + /MCID 0 + /Pg 4864 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4864 0 R + >>] + /Pg 4852 0 R +>> +endobj + +2682 0 obj +<< + /Type /StructElem + /S /Code + /P 2681 0 R + /K [103] + /Pg 4852 0 R +>> +endobj + +2683 0 obj +<< + /Type /StructElem + /S /Code + /P 2681 0 R + /K [99] + /Pg 4852 0 R +>> +endobj + +2684 0 obj +<< + /Type /StructElem + /S /Code + /P 2681 0 R + /K [93] + /Pg 4852 0 R +>> +endobj + +2685 0 obj +<< + /Type /StructElem + /S /Strong + /P 2681 0 R + /K [88] + /Pg 4852 0 R +>> +endobj + +2686 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2690 0 R 66 67 68 2689 0 R 70 2688 0 R 78 79 2687 0 R 81 82 83 84 85 86 87] + /Pg 4852 0 R +>> +endobj + +2687 0 obj +<< + /Type /StructElem + /S /Link + /P 2686 0 R + /K [80 << + /Type /OBJR + /Pg 4852 0 R + /Obj 4851 0 R + >>] + /Pg 4852 0 R +>> +endobj + +2688 0 obj +<< + /Type /StructElem + /S /Formula + /P 2686 0 R + /K [71 72 73 74 75 76 77] + /Pg 4852 0 R +>> +endobj + +2689 0 obj +<< + /Type /StructElem + /S /Code + /P 2686 0 R + /K [69] + /Pg 4852 0 R +>> +endobj + +2690 0 obj +<< + /Type /StructElem + /S /Strong + /P 2686 0 R + /K [65] + /Pg 4852 0 R +>> +endobj + +2691 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [63 64] + /Pg 4852 0 R +>> +endobj + +2692 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Situating the Context Paradigm) + /K [61 62] + /Pg 4852 0 R +>> +endobj + +2693 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [57 58 2694 0 R 60] + /Pg 4852 0 R +>> +endobj + +2694 0 obj +<< + /Type /StructElem + /S /Link + /P 2693 0 R + /K [59 << + /Type /OBJR + /Pg 4852 0 R + /Obj 4850 0 R + >>] + /Pg 4852 0 R +>> +endobj + +2695 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2706 0 R 2696 0 R] +>> +endobj + +2696 0 obj +<< + /Type /StructElem + /S /L + /P 2695 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2702 0 R 2697 0 R] +>> +endobj + +2697 0 obj +<< + /Type /StructElem + /S /LI + /P 2696 0 R + /K [2701 0 R 2698 0 R] +>> +endobj + +2698 0 obj +<< + /Type /StructElem + /S /LBody + /P 2697 0 R + /K [2700 0 R 52 53 2699 0 R 56] + /Pg 4852 0 R +>> +endobj + +2699 0 obj +<< + /Type /StructElem + /S /Formula + /P 2698 0 R + /K [54 55] + /Pg 4852 0 R +>> +endobj + +2700 0 obj +<< + /Type /StructElem + /S /Em + /P 2698 0 R + /K [51] + /Pg 4852 0 R +>> +endobj + +2701 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2697 0 R + /K [50] + /Pg 4852 0 R +>> +endobj + +2702 0 obj +<< + /Type /StructElem + /S /LI + /P 2696 0 R + /K [2705 0 R 2703 0 R] +>> +endobj + +2703 0 obj +<< + /Type /StructElem + /S /LBody + /P 2702 0 R + /K [2704 0 R 48 49] + /Pg 4852 0 R +>> +endobj + +2704 0 obj +<< + /Type /StructElem + /S /Em + /P 2703 0 R + /K [47] + /Pg 4852 0 R +>> +endobj + +2705 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2702 0 R + /K [46] + /Pg 4852 0 R +>> +endobj + +2706 0 obj +<< + /Type /StructElem + /S /P + /P 2695 0 R + /K [2709 0 R 37 2708 0 R 43 2707 0 R 45] + /Pg 4852 0 R +>> +endobj + +2707 0 obj +<< + /Type /StructElem + /S /Em + /P 2706 0 R + /K [44] + /Pg 4852 0 R +>> +endobj + +2708 0 obj +<< + /Type /StructElem + /S /Formula + /P 2706 0 R + /K [38 39 40 41 42] + /Pg 4852 0 R +>> +endobj + +2709 0 obj +<< + /Type /StructElem + /S /Strong + /P 2706 0 R + /K [34 35 36] + /Pg 4852 0 R +>> +endobj + +2710 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2714 0 R 24 2713 0 R 27 2712 0 R 29 30 2711 0 R 32 33] + /Pg 4852 0 R +>> +endobj + +2711 0 obj +<< + /Type /StructElem + /S /Em + /P 2710 0 R + /K [31] + /Pg 4852 0 R +>> +endobj + +2712 0 obj +<< + /Type /StructElem + /S /Em + /P 2710 0 R + /K [28] + /Pg 4852 0 R +>> +endobj + +2713 0 obj +<< + /Type /StructElem + /S /Formula + /P 2710 0 R + /K [25 26] + /Pg 4852 0 R +>> +endobj + +2714 0 obj +<< + /Type /StructElem + /S /Strong + /P 2710 0 R + /K [23] + /Pg 4852 0 R +>> +endobj + +2715 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2722 0 R 2719 0 R 2716 0 R] +>> +endobj + +2716 0 obj +<< + /Type /StructElem + /S /LI + /P 2715 0 R + /K [2718 0 R 2717 0 R] +>> +endobj + +2717 0 obj +<< + /Type /StructElem + /S /LBody + /P 2716 0 R + /K [19 20 21 22] + /Pg 4852 0 R +>> +endobj + +2718 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2716 0 R + /K [18] + /Pg 4852 0 R +>> +endobj + +2719 0 obj +<< + /Type /StructElem + /S /LI + /P 2715 0 R + /K [2721 0 R 2720 0 R] +>> +endobj + +2720 0 obj +<< + /Type /StructElem + /S /LBody + /P 2719 0 R + /K [16 17] + /Pg 4852 0 R +>> +endobj + +2721 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2719 0 R + /K [15] + /Pg 4852 0 R +>> +endobj + +2722 0 obj +<< + /Type /StructElem + /S /LI + /P 2715 0 R + /K [2724 0 R 2723 0 R] +>> +endobj + +2723 0 obj +<< + /Type /StructElem + /S /LBody + /P 2722 0 R + /K [14] + /Pg 4852 0 R +>> +endobj + +2724 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2722 0 R + /K [13] + /Pg 4852 0 R +>> +endobj + +2725 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2728 0 R 3 2727 0 R 6 7 8 2726 0 R 10 11 12] + /Pg 4852 0 R +>> +endobj + +2726 0 obj +<< + /Type /StructElem + /S /Formula + /P 2725 0 R + /K [9] + /Pg 4852 0 R +>> +endobj + +2727 0 obj +<< + /Type /StructElem + /S /Formula + /P 2725 0 R + /K [4 5] + /Pg 4852 0 R +>> +endobj + +2728 0 obj +<< + /Type /StructElem + /S /Strong + /P 2725 0 R + /K [2] + /Pg 4852 0 R +>> +endobj + +2729 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [107 2739 0 R 109 2738 0 R 112 2737 0 R 114 115 2736 0 R 117 118 119 2735 0 R 121 2734 0 R 123 2733 0 R 125 126 2732 0 R 128 2731 0 R 130 131 132 2730 0 R 134 << + /Type /MCR + /MCID 0 + /Pg 4852 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4852 0 R + >>] + /Pg 4848 0 R +>> +endobj + +2730 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [133] + /Pg 4848 0 R +>> +endobj + +2731 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [129] + /Pg 4848 0 R +>> +endobj + +2732 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [127] + /Pg 4848 0 R +>> +endobj + +2733 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [124] + /Pg 4848 0 R +>> +endobj + +2734 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [122] + /Pg 4848 0 R +>> +endobj + +2735 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [120] + /Pg 4848 0 R +>> +endobj + +2736 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [116] + /Pg 4848 0 R +>> +endobj + +2737 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [113] + /Pg 4848 0 R +>> +endobj + +2738 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [110 111] + /Pg 4848 0 R +>> +endobj + +2739 0 obj +<< + /Type /StructElem + /S /Formula + /P 2729 0 R + /K [108] + /Pg 4848 0 R +>> +endobj + +2740 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2756 0 R 2755 0 R 2754 0 R 2741 0 R] +>> +endobj + +2741 0 obj +<< + /Type /StructElem + /S /L + /P 2740 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2750 0 R 2746 0 R 2742 0 R] +>> +endobj + +2742 0 obj +<< + /Type /StructElem + /S /LI + /P 2741 0 R + /K [2745 0 R 2743 0 R] +>> +endobj + +2743 0 obj +<< + /Type /StructElem + /S /LBody + /P 2742 0 R + /K [2744 0 R 106] + /Pg 4848 0 R +>> +endobj + +2744 0 obj +<< + /Type /StructElem + /S /Formula + /P 2743 0 R + /K [105] + /Pg 4848 0 R +>> +endobj + +2745 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2742 0 R + /K [104] + /Pg 4848 0 R +>> +endobj + +2746 0 obj +<< + /Type /StructElem + /S /LI + /P 2741 0 R + /K [2749 0 R 2747 0 R] +>> +endobj + +2747 0 obj +<< + /Type /StructElem + /S /LBody + /P 2746 0 R + /K [2748 0 R 103] + /Pg 4848 0 R +>> +endobj + +2748 0 obj +<< + /Type /StructElem + /S /Formula + /P 2747 0 R + /K [100 101 102] + /Pg 4848 0 R +>> +endobj + +2749 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2746 0 R + /K [99] + /Pg 4848 0 R +>> +endobj + +2750 0 obj +<< + /Type /StructElem + /S /LI + /P 2741 0 R + /K [2753 0 R 2751 0 R] +>> +endobj + +2751 0 obj +<< + /Type /StructElem + /S /LBody + /P 2750 0 R + /K [2752 0 R 98] + /Pg 4848 0 R +>> +endobj + +2752 0 obj +<< + /Type /StructElem + /S /Formula + /P 2751 0 R + /K [97] + /Pg 4848 0 R +>> +endobj + +2753 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2750 0 R + /K [96] + /Pg 4848 0 R +>> +endobj + +2754 0 obj +<< + /Type /StructElem + /S /P + /P 2740 0 R + /K [95] + /Pg 4848 0 R +>> +endobj + +2755 0 obj +<< + /Type /StructElem + /S /Formula + /P 2740 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94] + /Pg 4848 0 R +>> +endobj + +2756 0 obj +<< + /Type /StructElem + /S /P + /P 2740 0 R + /K [2758 0 R 75 2757 0 R 78] + /Pg 4848 0 R +>> +endobj + +2757 0 obj +<< + /Type /StructElem + /S /Formula + /P 2756 0 R + /K [76 77] + /Pg 4848 0 R +>> +endobj + +2758 0 obj +<< + /Type /StructElem + /S /Strong + /P 2756 0 R + /K [72 73 74] + /Pg 4848 0 R +>> +endobj + +2759 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [60 2763 0 R 62 2762 0 R 65 2761 0 R 67 68 69 2760 0 R 71] + /Pg 4848 0 R +>> +endobj + +2760 0 obj +<< + /Type /StructElem + /S /Formula + /P 2759 0 R + /K [70] + /Pg 4848 0 R +>> +endobj + +2761 0 obj +<< + /Type /StructElem + /S /Link + /P 2759 0 R + /K [66 << + /Type /OBJR + /Pg 4848 0 R + /Obj 4847 0 R + >>] + /Pg 4848 0 R +>> +endobj + +2762 0 obj +<< + /Type /StructElem + /S /Formula + /P 2759 0 R + /K [63 64] + /Pg 4848 0 R +>> +endobj + +2763 0 obj +<< + /Type /StructElem + /S /Formula + /P 2759 0 R + /K [61] + /Pg 4848 0 R +>> +endobj + +2764 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Unified Context) + /K [58 59] + /Pg 4848 0 R +>> +endobj + +2765 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [50 2767 0 R 52 2766 0 R 54 55 56 57] + /Pg 4848 0 R +>> +endobj + +2766 0 obj +<< + /Type /StructElem + /S /Formula + /P 2765 0 R + /K [53] + /Pg 4848 0 R +>> +endobj + +2767 0 obj +<< + /Type /StructElem + /S /Link + /P 2765 0 R + /K [51 << + /Type /OBJR + /Pg 4848 0 R + /Obj 4846 0 R + >>] + /Pg 4848 0 R +>> +endobj + +2768 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (The Context Paradigm) + /K [48 49] + /Pg 4848 0 R +>> +endobj + +2769 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [44 45 46 47] + /Pg 4848 0 R +>> +endobj + +2770 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2783 0 R 2774 0 R 2771 0 R] +>> +endobj + +2771 0 obj +<< + /Type /StructElem + /S /LI + /P 2770 0 R + /K [2773 0 R 2772 0 R] +>> +endobj + +2772 0 obj +<< + /Type /StructElem + /S /LBody + /P 2771 0 R + /K [42 43] + /Pg 4848 0 R +>> +endobj + +2773 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2771 0 R + /K [41] + /Pg 4848 0 R +>> +endobj + +2774 0 obj +<< + /Type /StructElem + /S /LI + /P 2770 0 R + /K [2782 0 R 2775 0 R] +>> +endobj + +2775 0 obj +<< + /Type /StructElem + /S /LBody + /P 2774 0 R + /K [25 2781 0 R 27 2780 0 R 29 2779 0 R 31 32 33 2778 0 R 35 2777 0 R 37 38 2776 0 R 40] + /Pg 4848 0 R +>> +endobj + +2776 0 obj +<< + /Type /StructElem + /S /Code + /P 2775 0 R + /K [39] + /Pg 4848 0 R +>> +endobj + +2777 0 obj +<< + /Type /StructElem + /S /Code + /P 2775 0 R + /K [36] + /Pg 4848 0 R +>> +endobj + +2778 0 obj +<< + /Type /StructElem + /S /Code + /P 2775 0 R + /K [34] + /Pg 4848 0 R +>> +endobj + +2779 0 obj +<< + /Type /StructElem + /S /Code + /P 2775 0 R + /K [30] + /Pg 4848 0 R +>> +endobj + +2780 0 obj +<< + /Type /StructElem + /S /Code + /P 2775 0 R + /K [28] + /Pg 4848 0 R +>> +endobj + +2781 0 obj +<< + /Type /StructElem + /S /Code + /P 2775 0 R + /K [26] + /Pg 4848 0 R +>> +endobj + +2782 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2774 0 R + /K [24] + /Pg 4848 0 R +>> +endobj + +2783 0 obj +<< + /Type /StructElem + /S /LI + /P 2770 0 R + /K [2792 0 R 2784 0 R] +>> +endobj + +2784 0 obj +<< + /Type /StructElem + /S /LBody + /P 2783 0 R + /K [7 2791 0 R 9 2790 0 R 11 2789 0 R 13 14 2788 0 R 16 2787 0 R 18 2786 0 R 20 21 2785 0 R 23] + /Pg 4848 0 R +>> +endobj + +2785 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [22] + /Pg 4848 0 R +>> +endobj + +2786 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [19] + /Pg 4848 0 R +>> +endobj + +2787 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [17] + /Pg 4848 0 R +>> +endobj + +2788 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [15] + /Pg 4848 0 R +>> +endobj + +2789 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [12] + /Pg 4848 0 R +>> +endobj + +2790 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [10] + /Pg 4848 0 R +>> +endobj + +2791 0 obj +<< + /Type /StructElem + /S /Code + /P 2784 0 R + /K [8] + /Pg 4848 0 R +>> +endobj + +2792 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2783 0 R + /K [6] + /Pg 4848 0 R +>> +endobj + +2793 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [5] + /Pg 4848 0 R +>> +endobj + +2794 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /K [2801 0 R 2795 0 R] +>> +endobj + +2795 0 obj +<< + /Type /StructElem + /S /Div + /P 2794 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2796 0 R] +>> +endobj + +2796 0 obj +<< + /Type /StructElem + /S /P + /P 2795 0 R + /K [2800 0 R 2799 0 R 2798 0 R 2797 0 R] +>> +endobj + +2797 0 obj +<< + /Type /StructElem + /S /Code + /P 2796 0 R + /K [3] + /Pg 4848 0 R +>> +endobj + +2798 0 obj +<< + /Type /StructElem + /S /Code + /P 2796 0 R + /K [2] + /Pg 4848 0 R +>> +endobj + +2799 0 obj +<< + /Type /StructElem + /S /Code + /P 2796 0 R + /K [1] + /Pg 4848 0 R +>> +endobj + +2800 0 obj +<< + /Type /StructElem + /S /Code + /P 2796 0 R + /K [0] + /Pg 4848 0 R +>> +endobj + +2801 0 obj +<< + /Type /StructElem + /S /Caption + /P 2794 0 R + /K [2802 0 R] +>> +endobj + +2802 0 obj +<< + /Type /StructElem + /S /Span + /P 2801 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4] + /Pg 4848 0 R +>> +endobj + +2803 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [172 2810 0 R 174 2809 0 R 176 177 2808 0 R 179 180 181 2807 0 R 183 2806 0 R 185 186 187 2805 0 R 189 190 2804 0 R 192] + /Pg 4844 0 R +>> +endobj + +2804 0 obj +<< + /Type /StructElem + /S /Link + /P 2803 0 R + /K [191 << + /Type /OBJR + /Pg 4844 0 R + /Obj 4843 0 R + >>] + /Pg 4844 0 R +>> +endobj + +2805 0 obj +<< + /Type /StructElem + /S /Em + /P 2803 0 R + /K [188] + /Pg 4844 0 R +>> +endobj + +2806 0 obj +<< + /Type /StructElem + /S /Code + /P 2803 0 R + /K [184] + /Pg 4844 0 R +>> +endobj + +2807 0 obj +<< + /Type /StructElem + /S /Code + /P 2803 0 R + /K [182] + /Pg 4844 0 R +>> +endobj + +2808 0 obj +<< + /Type /StructElem + /S /Code + /P 2803 0 R + /K [178] + /Pg 4844 0 R +>> +endobj + +2809 0 obj +<< + /Type /StructElem + /S /Code + /P 2803 0 R + /K [175] + /Pg 4844 0 R +>> +endobj + +2810 0 obj +<< + /Type /StructElem + /S /Code + /P 2803 0 R + /K [173] + /Pg 4844 0 R +>> +endobj + +2811 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [159 160 161 2813 0 R 166 167 2812 0 R 169 170 171] + /Pg 4844 0 R +>> +endobj + +2812 0 obj +<< + /Type /StructElem + /S /Formula + /P 2811 0 R + /K [168] + /Pg 4844 0 R +>> +endobj + +2813 0 obj +<< + /Type /StructElem + /S /Formula + /P 2811 0 R + /K [162 163 164 165] + /Pg 4844 0 R +>> +endobj + +2814 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Asynchrony) + /K [157 158] + /Pg 4844 0 R +>> +endobj + +2815 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /K [2832 0 R 2816 0 R] +>> +endobj + +2816 0 obj +<< + /Type /StructElem + /S /Div + /P 2815 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2817 0 R] +>> +endobj + +2817 0 obj +<< + /Type /StructElem + /S /P + /P 2816 0 R + /K [2831 0 R 2830 0 R 2829 0 R 2828 0 R 2827 0 R 2826 0 R 2825 0 R 2824 0 R 2823 0 R 2822 0 R 2821 0 R 2820 0 R 2819 0 R 2818 0 R] +>> +endobj + +2818 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [147 148 149 150 151 152 153 154 155] + /Pg 4844 0 R +>> +endobj + +2819 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [146] + /Pg 4844 0 R +>> +endobj + +2820 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [137 138 139 140 141 142 143 144 145] + /Pg 4844 0 R +>> +endobj + +2821 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [136] + /Pg 4844 0 R +>> +endobj + +2822 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [127 128 129 130 131 132 133 134 135] + /Pg 4844 0 R +>> +endobj + +2823 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [126] + /Pg 4844 0 R +>> +endobj + +2824 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [117 118 119 120 121 122 123 124 125] + /Pg 4844 0 R +>> +endobj + +2825 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [116] + /Pg 4844 0 R +>> +endobj + +2826 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [107 108 109 110 111 112 113 114 115] + /Pg 4844 0 R +>> +endobj + +2827 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [106] + /Pg 4844 0 R +>> +endobj + +2828 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [97 98 99 100 101 102 103 104 105] + /Pg 4844 0 R +>> +endobj + +2829 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [96] + /Pg 4844 0 R +>> +endobj + +2830 0 obj +<< + /Type /StructElem + /S /Formula + /P 2817 0 R + /K [95] + /Pg 4844 0 R +>> +endobj + +2831 0 obj +<< + /Type /StructElem + /S /Code + /P 2817 0 R + /K [94] + /Pg 4844 0 R +>> +endobj + +2832 0 obj +<< + /Type /StructElem + /S /Caption + /P 2815 0 R + /K [2833 0 R] +>> +endobj + +2833 0 obj +<< + /Type /StructElem + /S /Span + /P 2832 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [156] + /Pg 4844 0 R +>> +endobj + +2834 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [81 2839 0 R 83 2838 0 R 85 86 87 2837 0 R 89 2836 0 R 91 2835 0 R 93] + /Pg 4844 0 R +>> +endobj + +2835 0 obj +<< + /Type /StructElem + /S /Link + /P 2834 0 R + /K [92 << + /Type /OBJR + /Pg 4844 0 R + /Obj 4842 0 R + >>] + /Pg 4844 0 R +>> +endobj + +2836 0 obj +<< + /Type /StructElem + /S /Code + /P 2834 0 R + /K [90] + /Pg 4844 0 R +>> +endobj + +2837 0 obj +<< + /Type /StructElem + /S /Code + /P 2834 0 R + /K [88] + /Pg 4844 0 R +>> +endobj + +2838 0 obj +<< + /Type /StructElem + /S /Code + /P 2834 0 R + /K [84] + /Pg 4844 0 R +>> +endobj + +2839 0 obj +<< + /Type /StructElem + /S /Code + /P 2834 0 R + /K [82] + /Pg 4844 0 R +>> +endobj + +2840 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [65 2844 0 R 68 2843 0 R 71 72 2842 0 R 75 2841 0 R 78 79 80] + /Pg 4844 0 R +>> +endobj + +2841 0 obj +<< + /Type /StructElem + /S /Formula + /P 2840 0 R + /K [76 77] + /Pg 4844 0 R +>> +endobj + +2842 0 obj +<< + /Type /StructElem + /S /Formula + /P 2840 0 R + /K [73 74] + /Pg 4844 0 R +>> +endobj + +2843 0 obj +<< + /Type /StructElem + /S /Formula + /P 2840 0 R + /K [69 70] + /Pg 4844 0 R +>> +endobj + +2844 0 obj +<< + /Type /StructElem + /S /Formula + /P 2840 0 R + /K [66 67] + /Pg 4844 0 R +>> +endobj + +2845 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [30 2848 0 R 59 2847 0 R 61 2846 0 R 64] + /Pg 4844 0 R +>> +endobj + +2846 0 obj +<< + /Type /StructElem + /S /Formula + /P 2845 0 R + /K [62 63] + /Pg 4844 0 R +>> +endobj + +2847 0 obj +<< + /Type /StructElem + /S /Code + /P 2845 0 R + /K [60] + /Pg 4844 0 R +>> +endobj + +2848 0 obj +<< + /Type /StructElem + /S /Formula + /P 2845 0 R + /K [31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58] + /Pg 4844 0 R +>> +endobj + +2849 0 obj +<< + /Type /StructElem + /S /Formula + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29] + /Pg 4844 0 R +>> +endobj + +2850 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [0 2853 0 R 2 3 2852 0 R 10 2851 0 R 12] + /Pg 4844 0 R +>> +endobj + +2851 0 obj +<< + /Type /StructElem + /S /Formula + /P 2850 0 R + /K [11] + /Pg 4844 0 R +>> +endobj + +2852 0 obj +<< + /Type /StructElem + /S /Formula + /P 2850 0 R + /K [4 5 6 7 8 9] + /Pg 4844 0 R +>> +endobj + +2853 0 obj +<< + /Type /StructElem + /S /Em + /P 2850 0 R + /K [1] + /Pg 4844 0 R +>> +endobj + +2854 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [226 2866 0 R 228 2865 0 R 230 2864 0 R 232 2863 0 R 234 2862 0 R 236 2861 0 R 238 2860 0 R 240 241 2859 0 R 243 2858 0 R 245 2857 0 R 247 2856 0 R 249 2855 0 R 251] + /Pg 4840 0 R +>> +endobj + +2855 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [250] + /Pg 4840 0 R +>> +endobj + +2856 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [248] + /Pg 4840 0 R +>> +endobj + +2857 0 obj +<< + /Type /StructElem + /S /Formula + /P 2854 0 R + /K [246] + /Pg 4840 0 R +>> +endobj + +2858 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [244] + /Pg 4840 0 R +>> +endobj + +2859 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [242] + /Pg 4840 0 R +>> +endobj + +2860 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [239] + /Pg 4840 0 R +>> +endobj + +2861 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [237] + /Pg 4840 0 R +>> +endobj + +2862 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [235] + /Pg 4840 0 R +>> +endobj + +2863 0 obj +<< + /Type /StructElem + /S /Formula + /P 2854 0 R + /K [233] + /Pg 4840 0 R +>> +endobj + +2864 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [231] + /Pg 4840 0 R +>> +endobj + +2865 0 obj +<< + /Type /StructElem + /S /Formula + /P 2854 0 R + /K [229] + /Pg 4840 0 R +>> +endobj + +2866 0 obj +<< + /Type /StructElem + /S /Code + /P 2854 0 R + /K [227] + /Pg 4840 0 R +>> +endobj + +2867 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Coherence) + /K [224 225] + /Pg 4840 0 R +>> +endobj + +2868 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [178 2876 0 R 182 183 2875 0 R 185 2874 0 R 203 204 2873 0 R 212 2872 0 R 214 2871 0 R 216 2870 0 R 218 2869 0 R 220 221 222 223] + /Pg 4840 0 R +>> +endobj + +2869 0 obj +<< + /Type /StructElem + /S /Code + /P 2868 0 R + /K [219] + /Pg 4840 0 R +>> +endobj + +2870 0 obj +<< + /Type /StructElem + /S /Code + /P 2868 0 R + /K [217] + /Pg 4840 0 R +>> +endobj + +2871 0 obj +<< + /Type /StructElem + /S /Formula + /P 2868 0 R + /K [215] + /Pg 4840 0 R +>> +endobj + +2872 0 obj +<< + /Type /StructElem + /S /Formula + /P 2868 0 R + /K [213] + /Pg 4840 0 R +>> +endobj + +2873 0 obj +<< + /Type /StructElem + /S /Formula + /P 2868 0 R + /K [205 206 207 208 209 210 211] + /Pg 4840 0 R +>> +endobj + +2874 0 obj +<< + /Type /StructElem + /S /Formula + /P 2868 0 R + /K [186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202] + /Pg 4840 0 R +>> +endobj + +2875 0 obj +<< + /Type /StructElem + /S /Em + /P 2868 0 R + /K [184] + /Pg 4840 0 R +>> +endobj + +2876 0 obj +<< + /Type /StructElem + /S /Formula + /P 2868 0 R + /K [179 180 181] + /Pg 4840 0 R +>> +endobj + +2877 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [170 2879 0 R 173 2878 0 R 175 176 177] + /Pg 4840 0 R +>> +endobj + +2878 0 obj +<< + /Type /StructElem + /S /Code + /P 2877 0 R + /K [174] + /Pg 4840 0 R +>> +endobj + +2879 0 obj +<< + /Type /StructElem + /S /Formula + /P 2877 0 R + /K [171 172] + /Pg 4840 0 R +>> +endobj + +2880 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /K [2887 0 R 2881 0 R] +>> +endobj + +2881 0 obj +<< + /Type /StructElem + /S /Div + /P 2880 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2882 0 R] +>> +endobj + +2882 0 obj +<< + /Type /StructElem + /S /P + /P 2881 0 R + /K [2886 0 R 2885 0 R 2884 0 R 2883 0 R] +>> +endobj + +2883 0 obj +<< + /Type /StructElem + /S /Code + /P 2882 0 R + /K [168] + /Pg 4840 0 R +>> +endobj + +2884 0 obj +<< + /Type /StructElem + /S /Code + /P 2882 0 R + /K [167] + /Pg 4840 0 R +>> +endobj + +2885 0 obj +<< + /Type /StructElem + /S /Code + /P 2882 0 R + /K [166] + /Pg 4840 0 R +>> +endobj + +2886 0 obj +<< + /Type /StructElem + /S /Code + /P 2882 0 R + /K [165] + /Pg 4840 0 R +>> +endobj + +2887 0 obj +<< + /Type /StructElem + /S /Caption + /P 2880 0 R + /K [2888 0 R] +>> +endobj + +2888 0 obj +<< + /Type /StructElem + /S /Span + /P 2887 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [169] + /Pg 4840 0 R +>> +endobj + +2889 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [141 2895 0 R 143 144 145 2894 0 R 2893 0 R 151 152 2892 0 R 154 155 156 2891 0 R 158 159 2890 0 R 161 162 163 164] + /Pg 4840 0 R +>> +endobj + +2890 0 obj +<< + /Type /StructElem + /S /Link + /P 2889 0 R + /K [160 << + /Type /OBJR + /Pg 4840 0 R + /Obj 4839 0 R + >>] + /Pg 4840 0 R +>> +endobj + +2891 0 obj +<< + /Type /StructElem + /S /Code + /P 2889 0 R + /K [157] + /Pg 4840 0 R +>> +endobj + +2892 0 obj +<< + /Type /StructElem + /S /Link + /P 2889 0 R + /K [153 << + /Type /OBJR + /Pg 4840 0 R + /Obj 4838 0 R + >>] + /Pg 4840 0 R +>> +endobj + +2893 0 obj +<< + /Type /StructElem + /S /Formula + /P 2889 0 R + /K [147 148 149 150] + /Pg 4840 0 R +>> +endobj + +2894 0 obj +<< + /Type /StructElem + /S /Code + /P 2889 0 R + /K [146] + /Pg 4840 0 R +>> +endobj + +2895 0 obj +<< + /Type /StructElem + /S /Em + /P 2889 0 R + /K [142] + /Pg 4840 0 R +>> +endobj + +2896 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [124 2899 0 R 126 2898 0 R 128 129 130 2897 0 R 140] + /Pg 4840 0 R +>> +endobj + +2897 0 obj +<< + /Type /StructElem + /S /Formula + /P 2896 0 R + /K [131 132 133 134 135 136 137 138 139] + /Pg 4840 0 R +>> +endobj + +2898 0 obj +<< + /Type /StructElem + /S /Formula + /P 2896 0 R + /K [127] + /Pg 4840 0 R +>> +endobj + +2899 0 obj +<< + /Type /StructElem + /S /Formula + /P 2896 0 R + /K [125] + /Pg 4840 0 R +>> +endobj + +2900 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2934 0 R 2901 0 R] +>> +endobj + +2901 0 obj +<< + /Type /StructElem + /S /Div + /P 2900 0 R + /K [2932 0 R 2930 0 R 2928 0 R 2926 0 R 2924 0 R 2922 0 R 2920 0 R 2918 0 R 2916 0 R 2914 0 R 2912 0 R 2910 0 R 2908 0 R 2902 0 R] +>> +endobj + +2902 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2907 0 R 2906 0 R 2905 0 R 2904 0 R 2903 0 R] +>> +endobj + +2903 0 obj +<< + /Type /StructElem + /S /Formula + /P 2902 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [113 114 115 116 117 118 119 120 121 122 123] + /Pg 4840 0 R +>> +endobj + +2904 0 obj +<< + /Type /StructElem + /S /Formula + /P 2902 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112] + /Pg 4840 0 R +>> +endobj + +2905 0 obj +<< + /Type /StructElem + /S /Formula + /P 2902 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85] + /Pg 4840 0 R +>> +endobj + +2906 0 obj +<< + /Type /StructElem + /S /Formula + /P 2902 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [66 67] + /Pg 4840 0 R +>> +endobj + +2907 0 obj +<< + /Type /StructElem + /S /Formula + /P 2902 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [52 53 54 55 56 57 58 59 60 61 62 63 64 65] + /Pg 4840 0 R +>> +endobj + +2908 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2909 0 R] +>> +endobj + +2909 0 obj +<< + /Type /StructElem + /S /Formula + /P 2908 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [51] + /Pg 4840 0 R +>> +endobj + +2910 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2911 0 R] +>> +endobj + +2911 0 obj +<< + /Type /StructElem + /S /Formula + /P 2910 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [46 47 48 49 50] + /Pg 4840 0 R +>> +endobj + +2912 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2913 0 R] +>> +endobj + +2913 0 obj +<< + /Type /StructElem + /S /Formula + /P 2912 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [45] + /Pg 4840 0 R +>> +endobj + +2914 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2915 0 R] +>> +endobj + +2915 0 obj +<< + /Type /StructElem + /S /Formula + /P 2914 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [44] + /Pg 4840 0 R +>> +endobj + +2916 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2917 0 R] +>> +endobj + +2917 0 obj +<< + /Type /StructElem + /S /Formula + /P 2916 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43] + /Pg 4840 0 R +>> +endobj + +2918 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2919 0 R] +>> +endobj + +2919 0 obj +<< + /Type /StructElem + /S /Formula + /P 2918 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [40 41 42] + /Pg 4840 0 R +>> +endobj + +2920 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2921 0 R] +>> +endobj + +2921 0 obj +<< + /Type /StructElem + /S /Formula + /P 2920 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [37 38 39] + /Pg 4840 0 R +>> +endobj + +2922 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2923 0 R] +>> +endobj + +2923 0 obj +<< + /Type /StructElem + /S /Formula + /P 2922 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [36] + /Pg 4840 0 R +>> +endobj + +2924 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2925 0 R] +>> +endobj + +2925 0 obj +<< + /Type /StructElem + /S /Formula + /P 2924 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [34 35] + /Pg 4840 0 R +>> +endobj + +2926 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2927 0 R] +>> +endobj + +2927 0 obj +<< + /Type /StructElem + /S /Formula + /P 2926 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33] + /Pg 4840 0 R +>> +endobj + +2928 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2929 0 R] +>> +endobj + +2929 0 obj +<< + /Type /StructElem + /S /Formula + /P 2928 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [30 31 32] + /Pg 4840 0 R +>> +endobj + +2930 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2931 0 R] +>> +endobj + +2931 0 obj +<< + /Type /StructElem + /S /Formula + /P 2930 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [29] + /Pg 4840 0 R +>> +endobj + +2932 0 obj +<< + /Type /StructElem + /S /Div + /P 2901 0 R + /K [2933 0 R] +>> +endobj + +2933 0 obj +<< + /Type /StructElem + /S /Formula + /P 2932 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [26 27 28] + /Pg 4840 0 R +>> +endobj + +2934 0 obj +<< + /Type /StructElem + /S /P + /P 2900 0 R + /K [2936 0 R 21 2935 0 R 25] + /Pg 4840 0 R +>> +endobj + +2935 0 obj +<< + /Type /StructElem + /S /Formula + /P 2934 0 R + /K [22 23 24] + /Pg 4840 0 R +>> +endobj + +2936 0 obj +<< + /Type /StructElem + /S /Strong + /P 2934 0 R + /K [18 19 20] + /Pg 4840 0 R +>> +endobj + +2937 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [9 2939 0 R 13 2938 0 R 16 17] + /Pg 4840 0 R +>> +endobj + +2938 0 obj +<< + /Type /StructElem + /S /Formula + /P 2937 0 R + /K [14 15] + /Pg 4840 0 R +>> +endobj + +2939 0 obj +<< + /Type /StructElem + /S /Formula + /P 2937 0 R + /K [10 11 12] + /Pg 4840 0 R +>> +endobj + +2940 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2968 0 R 2967 0 R 2964 0 R 2941 0 R] +>> +endobj + +2941 0 obj +<< + /Type /StructElem + /S /L + /P 2940 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2960 0 R 2956 0 R 2951 0 R 2942 0 R] +>> +endobj + +2942 0 obj +<< + /Type /StructElem + /S /L + /P 2941 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [2947 0 R 2943 0 R] +>> +endobj + +2943 0 obj +<< + /Type /StructElem + /S /LI + /P 2942 0 R + /K [2946 0 R 2944 0 R] +>> +endobj + +2944 0 obj +<< + /Type /StructElem + /S /LBody + /P 2943 0 R + /K [2945 0 R 8] + /Pg 4840 0 R +>> +endobj + +2945 0 obj +<< + /Type /StructElem + /S /Formula + /P 2944 0 R + /K [4 5 6 7] + /Pg 4840 0 R +>> +endobj + +2946 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2943 0 R + /K [3] + /Pg 4840 0 R +>> +endobj + +2947 0 obj +<< + /Type /StructElem + /S /LI + /P 2942 0 R + /K [2950 0 R 2948 0 R] +>> +endobj + +2948 0 obj +<< + /Type /StructElem + /S /LBody + /P 2947 0 R + /K [2949 0 R 2] + /Pg 4840 0 R +>> +endobj + +2949 0 obj +<< + /Type /StructElem + /S /Formula + /P 2948 0 R + /K [1] + /Pg 4840 0 R +>> +endobj + +2950 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2947 0 R + /K [0] + /Pg 4840 0 R +>> +endobj + +2951 0 obj +<< + /Type /StructElem + /S /LI + /P 2941 0 R + /K [2955 0 R 2952 0 R] +>> +endobj + +2952 0 obj +<< + /Type /StructElem + /S /LBody + /P 2951 0 R + /K [2953 0 R] +>> +endobj + +2953 0 obj +<< + /Type /StructElem + /S /P + /P 2952 0 R + /K [2954 0 R 341] + /Pg 4836 0 R +>> +endobj + +2954 0 obj +<< + /Type /StructElem + /S /Formula + /P 2953 0 R + /K [340] + /Pg 4836 0 R +>> +endobj + +2955 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2951 0 R + /K [339] + /Pg 4836 0 R +>> +endobj + +2956 0 obj +<< + /Type /StructElem + /S /LI + /P 2941 0 R + /K [2959 0 R 2957 0 R] +>> +endobj + +2957 0 obj +<< + /Type /StructElem + /S /LBody + /P 2956 0 R + /K [2958 0 R 338] + /Pg 4836 0 R +>> +endobj + +2958 0 obj +<< + /Type /StructElem + /S /Formula + /P 2957 0 R + /K [337] + /Pg 4836 0 R +>> +endobj + +2959 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2956 0 R + /K [336] + /Pg 4836 0 R +>> +endobj + +2960 0 obj +<< + /Type /StructElem + /S /LI + /P 2941 0 R + /K [2963 0 R 2961 0 R] +>> +endobj + +2961 0 obj +<< + /Type /StructElem + /S /LBody + /P 2960 0 R + /K [2962 0 R 335] + /Pg 4836 0 R +>> +endobj + +2962 0 obj +<< + /Type /StructElem + /S /Formula + /P 2961 0 R + /K [334] + /Pg 4836 0 R +>> +endobj + +2963 0 obj +<< + /Type /StructElem + /S /Lbl + /P 2960 0 R + /K [333] + /Pg 4836 0 R +>> +endobj + +2964 0 obj +<< + /Type /StructElem + /S /P + /P 2940 0 R + /K [319 2966 0 R 324 2965 0 R 332] + /Pg 4836 0 R +>> +endobj + +2965 0 obj +<< + /Type /StructElem + /S /Formula + /P 2964 0 R + /K [325 326 327 328 329 330 331] + /Pg 4836 0 R +>> +endobj + +2966 0 obj +<< + /Type /StructElem + /S /Formula + /P 2964 0 R + /K [320 321 322 323] + /Pg 4836 0 R +>> +endobj + +2967 0 obj +<< + /Type /StructElem + /S /Formula + /P 2940 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318] + /Pg 4836 0 R +>> +endobj + +2968 0 obj +<< + /Type /StructElem + /S /P + /P 2940 0 R + /K [2971 0 R 229 2970 0 R 233 2969 0 R 238 239] + /Pg 4836 0 R +>> +endobj + +2969 0 obj +<< + /Type /StructElem + /S /Formula + /P 2968 0 R + /K [234 235 236 237] + /Pg 4836 0 R +>> +endobj + +2970 0 obj +<< + /Type /StructElem + /S /Formula + /P 2968 0 R + /K [230 231 232] + /Pg 4836 0 R +>> +endobj + +2971 0 obj +<< + /Type /StructElem + /S /Strong + /P 2968 0 R + /K [226 227 228] + /Pg 4836 0 R +>> +endobj + +2972 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [217 2975 0 R 219 2974 0 R 221 222 2973 0 R 224 225] + /Pg 4836 0 R +>> +endobj + +2973 0 obj +<< + /Type /StructElem + /S /Em + /P 2972 0 R + /K [223] + /Pg 4836 0 R +>> +endobj + +2974 0 obj +<< + /Type /StructElem + /S /Code + /P 2972 0 R + /K [220] + /Pg 4836 0 R +>> +endobj + +2975 0 obj +<< + /Type /StructElem + /S /Code + /P 2972 0 R + /K [218] + /Pg 4836 0 R +>> +endobj + +2976 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Iteration) + /K [215 216] + /Pg 4836 0 R +>> +endobj + +2977 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [209 2979 0 R 211 212 2978 0 R 214] + /Pg 4836 0 R +>> +endobj + +2978 0 obj +<< + /Type /StructElem + /S /Link + /P 2977 0 R + /K [213 << + /Type /OBJR + /Pg 4836 0 R + /Obj 4835 0 R + >>] + /Pg 4836 0 R +>> +endobj + +2979 0 obj +<< + /Type /StructElem + /S /Formula + /P 2977 0 R + /K [210] + /Pg 4836 0 R +>> +endobj + +2980 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /K [3008 0 R 3006 0 R 3004 0 R 3002 0 R 3000 0 R 2998 0 R 2996 0 R 2994 0 R 2992 0 R 2990 0 R 2988 0 R 2986 0 R 2984 0 R 2981 0 R] +>> +endobj + +2981 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2983 0 R 2982 0 R] +>> +endobj + +2982 0 obj +<< + /Type /StructElem + /S /Formula + /P 2981 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208] + /Pg 4836 0 R +>> +endobj + +2983 0 obj +<< + /Type /StructElem + /S /Formula + /P 2981 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [179 180 181 182 183 184 185 186 187 188 189 190] + /Pg 4836 0 R +>> +endobj + +2984 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2985 0 R] +>> +endobj + +2985 0 obj +<< + /Type /StructElem + /S /Formula + /P 2984 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [178] + /Pg 4836 0 R +>> +endobj + +2986 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2987 0 R] +>> +endobj + +2987 0 obj +<< + /Type /StructElem + /S /Formula + /P 2986 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [173 174 175 176 177] + /Pg 4836 0 R +>> +endobj + +2988 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2989 0 R] +>> +endobj + +2989 0 obj +<< + /Type /StructElem + /S /Formula + /P 2988 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [172] + /Pg 4836 0 R +>> +endobj + +2990 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2991 0 R] +>> +endobj + +2991 0 obj +<< + /Type /StructElem + /S /Formula + /P 2990 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [171] + /Pg 4836 0 R +>> +endobj + +2992 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2993 0 R] +>> +endobj + +2993 0 obj +<< + /Type /StructElem + /S /Formula + /P 2992 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [170] + /Pg 4836 0 R +>> +endobj + +2994 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2995 0 R] +>> +endobj + +2995 0 obj +<< + /Type /StructElem + /S /Formula + /P 2994 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [167 168 169] + /Pg 4836 0 R +>> +endobj + +2996 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2997 0 R] +>> +endobj + +2997 0 obj +<< + /Type /StructElem + /S /Formula + /P 2996 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [164 165 166] + /Pg 4836 0 R +>> +endobj + +2998 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [2999 0 R] +>> +endobj + +2999 0 obj +<< + /Type /StructElem + /S /Formula + /P 2998 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [163] + /Pg 4836 0 R +>> +endobj + +3000 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [3001 0 R] +>> +endobj + +3001 0 obj +<< + /Type /StructElem + /S /Formula + /P 3000 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [161 162] + /Pg 4836 0 R +>> +endobj + +3002 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [3003 0 R] +>> +endobj + +3003 0 obj +<< + /Type /StructElem + /S /Formula + /P 3002 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [160] + /Pg 4836 0 R +>> +endobj + +3004 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [3005 0 R] +>> +endobj + +3005 0 obj +<< + /Type /StructElem + /S /Formula + /P 3004 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [158 159] + /Pg 4836 0 R +>> +endobj + +3006 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [3007 0 R] +>> +endobj + +3007 0 obj +<< + /Type /StructElem + /S /Formula + /P 3006 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [157] + /Pg 4836 0 R +>> +endobj + +3008 0 obj +<< + /Type /StructElem + /S /Div + /P 2980 0 R + /K [3009 0 R] +>> +endobj + +3009 0 obj +<< + /Type /StructElem + /S /Formula + /P 3008 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154 155 156] + /Pg 4836 0 R +>> +endobj + +3010 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [132 3016 0 R 135 3015 0 R 137 138 3014 0 R 144 3013 0 R 146 147 3012 0 R 151 3011 0 R 153] + /Pg 4836 0 R +>> +endobj + +3011 0 obj +<< + /Type /StructElem + /S /Formula + /P 3010 0 R + /K [152] + /Pg 4836 0 R +>> +endobj + +3012 0 obj +<< + /Type /StructElem + /S /Formula + /P 3010 0 R + /K [148 149 150] + /Pg 4836 0 R +>> +endobj + +3013 0 obj +<< + /Type /StructElem + /S /Formula + /P 3010 0 R + /K [145] + /Pg 4836 0 R +>> +endobj + +3014 0 obj +<< + /Type /StructElem + /S /Formula + /P 3010 0 R + /K [139 140 141 142 143] + /Pg 4836 0 R +>> +endobj + +3015 0 obj +<< + /Type /StructElem + /S /Link + /P 3010 0 R + /K [136 << + /Type /OBJR + /Pg 4836 0 R + /Obj 4834 0 R + >>] + /Pg 4836 0 R +>> +endobj + +3016 0 obj +<< + /Type /StructElem + /S /Formula + /P 3010 0 R + /K [133 134] + /Pg 4836 0 R +>> +endobj + +3017 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3024 0 R 3023 0 R 3018 0 R] +>> +endobj + +3018 0 obj +<< + /Type /StructElem + /S /P + /P 3017 0 R + /K [118 3022 0 R 120 121 3021 0 R 124 3020 0 R 128 3019 0 R 131] + /Pg 4836 0 R +>> +endobj + +3019 0 obj +<< + /Type /StructElem + /S /Formula + /P 3018 0 R + /K [129 130] + /Pg 4836 0 R +>> +endobj + +3020 0 obj +<< + /Type /StructElem + /S /Formula + /P 3018 0 R + /K [125 126 127] + /Pg 4836 0 R +>> +endobj + +3021 0 obj +<< + /Type /StructElem + /S /Formula + /P 3018 0 R + /K [122 123] + /Pg 4836 0 R +>> +endobj + +3022 0 obj +<< + /Type /StructElem + /S /Formula + /P 3018 0 R + /K [119] + /Pg 4836 0 R +>> +endobj + +3023 0 obj +<< + /Type /StructElem + /S /Formula + /P 3017 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117] + /Pg 4836 0 R +>> +endobj + +3024 0 obj +<< + /Type /StructElem + /S /P + /P 3017 0 R + /K [3031 0 R 51 3030 0 R 53 3029 0 R 67 3028 0 R 70 71 72 3027 0 R 74 3026 0 R 76 77 3025 0 R 79] + /Pg 4836 0 R +>> +endobj + +3025 0 obj +<< + /Type /StructElem + /S /Formula + /P 3024 0 R + /K [78] + /Pg 4836 0 R +>> +endobj + +3026 0 obj +<< + /Type /StructElem + /S /Formula + /P 3024 0 R + /K [75] + /Pg 4836 0 R +>> +endobj + +3027 0 obj +<< + /Type /StructElem + /S /Formula + /P 3024 0 R + /K [73] + /Pg 4836 0 R +>> +endobj + +3028 0 obj +<< + /Type /StructElem + /S /Formula + /P 3024 0 R + /K [68 69] + /Pg 4836 0 R +>> +endobj + +3029 0 obj +<< + /Type /StructElem + /S /Formula + /P 3024 0 R + /K [54 55 56 57 58 59 60 61 62 63 64 65 66] + /Pg 4836 0 R +>> +endobj + +3030 0 obj +<< + /Type /StructElem + /S /Em + /P 3024 0 R + /K [52] + /Pg 4836 0 R +>> +endobj + +3031 0 obj +<< + /Type /StructElem + /S /Strong + /P 3024 0 R + /K [48 49 50] + /Pg 4836 0 R +>> +endobj + +3032 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [29 3038 0 R 31 32 3037 0 R 34 35 3036 0 R 37 38 3035 0 R 40 41 42 43 3034 0 R 45 3033 0 R 47] + /Pg 4836 0 R +>> +endobj + +3033 0 obj +<< + /Type /StructElem + /S /Code + /P 3032 0 R + /K [46] + /Pg 4836 0 R +>> +endobj + +3034 0 obj +<< + /Type /StructElem + /S /Code + /P 3032 0 R + /K [44] + /Pg 4836 0 R +>> +endobj + +3035 0 obj +<< + /Type /StructElem + /S /Link + /P 3032 0 R + /K [39 << + /Type /OBJR + /Pg 4836 0 R + /Obj 4833 0 R + >>] + /Pg 4836 0 R +>> +endobj + +3036 0 obj +<< + /Type /StructElem + /S /Em + /P 3032 0 R + /K [36] + /Pg 4836 0 R +>> +endobj + +3037 0 obj +<< + /Type /StructElem + /S /Formula + /P 3032 0 R + /K [33] + /Pg 4836 0 R +>> +endobj + +3038 0 obj +<< + /Type /StructElem + /S /Em + /P 3032 0 R + /K [30] + /Pg 4836 0 R +>> +endobj + +3039 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [323 3051 0 R 325 326 3050 0 R 328 3049 0 R << + /Type /MCR + /MCID 1 + /Pg 4836 0 R + >> 3048 0 R << + /Type /MCR + /MCID 3 + /Pg 4836 0 R + >> 3047 0 R << + /Type /MCR + /MCID 6 + /Pg 4836 0 R + >> 3046 0 R << + /Type /MCR + /MCID 8 + /Pg 4836 0 R + >> 3045 0 R << + /Type /MCR + /MCID 10 + /Pg 4836 0 R + >> << + /Type /MCR + /MCID 11 + /Pg 4836 0 R + >> 3044 0 R << + /Type /MCR + /MCID 13 + /Pg 4836 0 R + >> 3043 0 R << + /Type /MCR + /MCID 20 + /Pg 4836 0 R + >> 3042 0 R << + /Type /MCR + /MCID 22 + /Pg 4836 0 R + >> << + /Type /MCR + /MCID 23 + /Pg 4836 0 R + >> 3041 0 R << + /Type /MCR + /MCID 25 + /Pg 4836 0 R + >> << + /Type /MCR + /MCID 26 + /Pg 4836 0 R + >> 3040 0 R << + /Type /MCR + /MCID 28 + /Pg 4836 0 R + >>] + /Pg 4829 0 R +>> +endobj + +3040 0 obj +<< + /Type /StructElem + /S /Em + /P 3039 0 R + /K [27] + /Pg 4836 0 R +>> +endobj + +3041 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [24] + /Pg 4836 0 R +>> +endobj + +3042 0 obj +<< + /Type /StructElem + /S /Link + /P 3039 0 R + /K [21 << + /Type /OBJR + /Pg 4836 0 R + /Obj 4832 0 R + >>] + /Pg 4836 0 R +>> +endobj + +3043 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [14 15 16 17 18 19] + /Pg 4836 0 R +>> +endobj + +3044 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [12] + /Pg 4836 0 R +>> +endobj + +3045 0 obj +<< + /Type /StructElem + /S /Em + /P 3039 0 R + /K [9] + /Pg 4836 0 R +>> +endobj + +3046 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [7] + /Pg 4836 0 R +>> +endobj + +3047 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [4 5] + /Pg 4836 0 R +>> +endobj + +3048 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [2] + /Pg 4836 0 R +>> +endobj + +3049 0 obj +<< + /Type /StructElem + /S /Link + /P 3039 0 R + /K [329 << + /Type /OBJR + /Pg 4829 0 R + /Obj 4827 0 R + >> 330 << + /Type /OBJR + /Pg 4829 0 R + /Obj 4828 0 R + >> << + /Type /MCR + /MCID 0 + /Pg 4836 0 R + >> << + /Type /OBJR + /Pg 4836 0 R + /Obj 4831 0 R + >>] + /Pg 4829 0 R +>> +endobj + +3050 0 obj +<< + /Type /StructElem + /S /Formula + /P 3039 0 R + /K [327] + /Pg 4829 0 R +>> +endobj + +3051 0 obj +<< + /Type /StructElem + /S /Code + /P 3039 0 R + /K [324] + /Pg 4829 0 R +>> +endobj + +3052 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Idempotent Recovery) + /K [321 322] + /Pg 4829 0 R +>> +endobj + +3053 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /K [3060 0 R 3054 0 R] +>> +endobj + +3054 0 obj +<< + /Type /StructElem + /S /Div + /P 3053 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3055 0 R] +>> +endobj + +3055 0 obj +<< + /Type /StructElem + /S /P + /P 3054 0 R + /K [3059 0 R 3058 0 R 3057 0 R 3056 0 R] +>> +endobj + +3056 0 obj +<< + /Type /StructElem + /S /Code + /P 3055 0 R + /K [319] + /Pg 4829 0 R +>> +endobj + +3057 0 obj +<< + /Type /StructElem + /S /Code + /P 3055 0 R + /K [318] + /Pg 4829 0 R +>> +endobj + +3058 0 obj +<< + /Type /StructElem + /S /Code + /P 3055 0 R + /K [317] + /Pg 4829 0 R +>> +endobj + +3059 0 obj +<< + /Type /StructElem + /S /Code + /P 3055 0 R + /K [316] + /Pg 4829 0 R +>> +endobj + +3060 0 obj +<< + /Type /StructElem + /S /Caption + /P 3053 0 R + /K [3061 0 R] +>> +endobj + +3061 0 obj +<< + /Type /StructElem + /S /Span + /P 3060 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [320] + /Pg 4829 0 R +>> +endobj + +3062 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [284 3072 0 R 286 287 288 3071 0 R 290 291 292 3070 0 R 296 3069 0 R 298 3068 0 R 300 301 3067 0 R 303 3066 0 R 305 306 3065 0 R 308 3064 0 R 310 311 312 3063 0 R 314 315] + /Pg 4829 0 R +>> +endobj + +3063 0 obj +<< + /Type /StructElem + /S /Link + /P 3062 0 R + /K [313 << + /Type /OBJR + /Pg 4829 0 R + /Obj 4826 0 R + >>] + /Pg 4829 0 R +>> +endobj + +3064 0 obj +<< + /Type /StructElem + /S /Code + /P 3062 0 R + /K [309] + /Pg 4829 0 R +>> +endobj + +3065 0 obj +<< + /Type /StructElem + /S /Formula + /P 3062 0 R + /K [307] + /Pg 4829 0 R +>> +endobj + +3066 0 obj +<< + /Type /StructElem + /S /Code + /P 3062 0 R + /K [304] + /Pg 4829 0 R +>> +endobj + +3067 0 obj +<< + /Type /StructElem + /S /Em + /P 3062 0 R + /K [302] + /Pg 4829 0 R +>> +endobj + +3068 0 obj +<< + /Type /StructElem + /S /Code + /P 3062 0 R + /K [299] + /Pg 4829 0 R +>> +endobj + +3069 0 obj +<< + /Type /StructElem + /S /Code + /P 3062 0 R + /K [297] + /Pg 4829 0 R +>> +endobj + +3070 0 obj +<< + /Type /StructElem + /S /Formula + /P 3062 0 R + /K [293 294 295] + /Pg 4829 0 R +>> +endobj + +3071 0 obj +<< + /Type /StructElem + /S /Em + /P 3062 0 R + /K [289] + /Pg 4829 0 R +>> +endobj + +3072 0 obj +<< + /Type /StructElem + /S /Em + /P 3062 0 R + /K [285] + /Pg 4829 0 R +>> +endobj + +3073 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3086 0 R 3085 0 R 3083 0 R 3074 0 R] +>> +endobj + +3074 0 obj +<< + /Type /StructElem + /S /L + /P 3073 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3079 0 R 3075 0 R] +>> +endobj + +3075 0 obj +<< + /Type /StructElem + /S /LI + /P 3074 0 R + /K [3078 0 R 3076 0 R] +>> +endobj + +3076 0 obj +<< + /Type /StructElem + /S /LBody + /P 3075 0 R + /K [3077 0 R 283] + /Pg 4829 0 R +>> +endobj + +3077 0 obj +<< + /Type /StructElem + /S /Formula + /P 3076 0 R + /K [279 280 281 282] + /Pg 4829 0 R +>> +endobj + +3078 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3075 0 R + /K [278] + /Pg 4829 0 R +>> +endobj + +3079 0 obj +<< + /Type /StructElem + /S /LI + /P 3074 0 R + /K [3082 0 R 3080 0 R] +>> +endobj + +3080 0 obj +<< + /Type /StructElem + /S /LBody + /P 3079 0 R + /K [3081 0 R 275 276 277] + /Pg 4829 0 R +>> +endobj + +3081 0 obj +<< + /Type /StructElem + /S /Formula + /P 3080 0 R + /K [271 272 273 274] + /Pg 4829 0 R +>> +endobj + +3082 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3079 0 R + /K [270] + /Pg 4829 0 R +>> +endobj + +3083 0 obj +<< + /Type /StructElem + /S /P + /P 3073 0 R + /K [263 3084 0 R 269] + /Pg 4829 0 R +>> +endobj + +3084 0 obj +<< + /Type /StructElem + /S /Formula + /P 3083 0 R + /K [264 265 266 267 268] + /Pg 4829 0 R +>> +endobj + +3085 0 obj +<< + /Type /StructElem + /S /Formula + /P 3073 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [254 255 256 257 258 259 260 261 262] + /Pg 4829 0 R +>> +endobj + +3086 0 obj +<< + /Type /StructElem + /S /P + /P 3073 0 R + /K [3089 0 R 249 3088 0 R 251 3087 0 R 253] + /Pg 4829 0 R +>> +endobj + +3087 0 obj +<< + /Type /StructElem + /S /Formula + /P 3086 0 R + /K [252] + /Pg 4829 0 R +>> +endobj + +3088 0 obj +<< + /Type /StructElem + /S /Em + /P 3086 0 R + /K [250] + /Pg 4829 0 R +>> +endobj + +3089 0 obj +<< + /Type /StructElem + /S /Strong + /P 3086 0 R + /K [246 247 248] + /Pg 4829 0 R +>> +endobj + +3090 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [236 237 238 3093 0 R 240 3092 0 R 242 243 3091 0 R 245] + /Pg 4829 0 R +>> +endobj + +3091 0 obj +<< + /Type /StructElem + /S /Link + /P 3090 0 R + /K [244 << + /Type /OBJR + /Pg 4829 0 R + /Obj 4825 0 R + >>] + /Pg 4829 0 R +>> +endobj + +3092 0 obj +<< + /Type /StructElem + /S /Formula + /P 3090 0 R + /K [241] + /Pg 4829 0 R +>> +endobj + +3093 0 obj +<< + /Type /StructElem + /S /Em + /P 3090 0 R + /K [239] + /Pg 4829 0 R +>> +endobj + +3094 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Component Lifecycle) + /K [234 235] + /Pg 4829 0 R +>> +endobj + +3095 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [198 3101 0 R 200 3100 0 R 202 3099 0 R 219 3098 0 R 221 222 223 3097 0 R 228 229 230 231 3096 0 R 233] + /Pg 4829 0 R +>> +endobj + +3096 0 obj +<< + /Type /StructElem + /S /Link + /P 3095 0 R + /K [232 << + /Type /OBJR + /Pg 4829 0 R + /Obj 4824 0 R + >>] + /Pg 4829 0 R +>> +endobj + +3097 0 obj +<< + /Type /StructElem + /S /Formula + /P 3095 0 R + /K [224 225 226 227] + /Pg 4829 0 R +>> +endobj + +3098 0 obj +<< + /Type /StructElem + /S /Formula + /P 3095 0 R + /K [220] + /Pg 4829 0 R +>> +endobj + +3099 0 obj +<< + /Type /StructElem + /S /Formula + /P 3095 0 R + /K [203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218] + /Pg 4829 0 R +>> +endobj + +3100 0 obj +<< + /Type /StructElem + /S /Formula + /P 3095 0 R + /K [201] + /Pg 4829 0 R +>> +endobj + +3101 0 obj +<< + /Type /StructElem + /S /Formula + /P 3095 0 R + /K [199] + /Pg 4829 0 R +>> +endobj + +3102 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3188 0 R 3103 0 R] +>> +endobj + +3103 0 obj +<< + /Type /StructElem + /S /Div + /P 3102 0 R + /K [3186 0 R 3184 0 R 3182 0 R 3180 0 R 3178 0 R 3176 0 R 3174 0 R 3172 0 R 3170 0 R 3168 0 R 3166 0 R 3164 0 R 3162 0 R 3160 0 R 3158 0 R 3156 0 R 3154 0 R 3152 0 R 3150 0 R 3148 0 R 3146 0 R 3144 0 R 3142 0 R 3140 0 R 3138 0 R 3136 0 R 3134 0 R 3132 0 R 3130 0 R 3128 0 R 3126 0 R 3124 0 R 3122 0 R 3120 0 R 3118 0 R 3116 0 R 3114 0 R 3112 0 R 3110 0 R 3108 0 R 3106 0 R 3104 0 R] +>> +endobj + +3104 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3105 0 R] +>> +endobj + +3105 0 obj +<< + /Type /StructElem + /S /Formula + /P 3104 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197] + /Pg 4829 0 R +>> +endobj + +3106 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3107 0 R] +>> +endobj + +3107 0 obj +<< + /Type /StructElem + /S /Formula + /P 3106 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154] + /Pg 4829 0 R +>> +endobj + +3108 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3109 0 R] +>> +endobj + +3109 0 obj +<< + /Type /StructElem + /S /Formula + /P 3108 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [149 150 151 152 153] + /Pg 4829 0 R +>> +endobj + +3110 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3111 0 R] +>> +endobj + +3111 0 obj +<< + /Type /StructElem + /S /Formula + /P 3110 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [148] + /Pg 4829 0 R +>> +endobj + +3112 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3113 0 R] +>> +endobj + +3113 0 obj +<< + /Type /StructElem + /S /Formula + /P 3112 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [143 144 145 146 147] + /Pg 4829 0 R +>> +endobj + +3114 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3115 0 R] +>> +endobj + +3115 0 obj +<< + /Type /StructElem + /S /Formula + /P 3114 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [142] + /Pg 4829 0 R +>> +endobj + +3116 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3117 0 R] +>> +endobj + +3117 0 obj +<< + /Type /StructElem + /S /Formula + /P 3116 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [141] + /Pg 4829 0 R +>> +endobj + +3118 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3119 0 R] +>> +endobj + +3119 0 obj +<< + /Type /StructElem + /S /Formula + /P 3118 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [131 132 133 134 135 136 137 138 139 140] + /Pg 4829 0 R +>> +endobj + +3120 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3121 0 R] +>> +endobj + +3121 0 obj +<< + /Type /StructElem + /S /Formula + /P 3120 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [130] + /Pg 4829 0 R +>> +endobj + +3122 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3123 0 R] +>> +endobj + +3123 0 obj +<< + /Type /StructElem + /S /Formula + /P 3122 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [128 129] + /Pg 4829 0 R +>> +endobj + +3124 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3125 0 R] +>> +endobj + +3125 0 obj +<< + /Type /StructElem + /S /Formula + /P 3124 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [127] + /Pg 4829 0 R +>> +endobj + +3126 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3127 0 R] +>> +endobj + +3127 0 obj +<< + /Type /StructElem + /S /Formula + /P 3126 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [119 120 121 122 123 124 125 126] + /Pg 4829 0 R +>> +endobj + +3128 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3129 0 R] +>> +endobj + +3129 0 obj +<< + /Type /StructElem + /S /Formula + /P 3128 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [118] + /Pg 4829 0 R +>> +endobj + +3130 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3131 0 R] +>> +endobj + +3131 0 obj +<< + /Type /StructElem + /S /Formula + /P 3130 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [117] + /Pg 4829 0 R +>> +endobj + +3132 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3133 0 R] +>> +endobj + +3133 0 obj +<< + /Type /StructElem + /S /Formula + /P 3132 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116] + /Pg 4829 0 R +>> +endobj + +3134 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3135 0 R] +>> +endobj + +3135 0 obj +<< + /Type /StructElem + /S /Formula + /P 3134 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [85] + /Pg 4829 0 R +>> +endobj + +3136 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3137 0 R] +>> +endobj + +3137 0 obj +<< + /Type /StructElem + /S /Formula + /P 3136 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [80 81 82 83 84] + /Pg 4829 0 R +>> +endobj + +3138 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3139 0 R] +>> +endobj + +3139 0 obj +<< + /Type /StructElem + /S /Formula + /P 3138 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [79] + /Pg 4829 0 R +>> +endobj + +3140 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3141 0 R] +>> +endobj + +3141 0 obj +<< + /Type /StructElem + /S /Formula + /P 3140 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [74 75 76 77 78] + /Pg 4829 0 R +>> +endobj + +3142 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3143 0 R] +>> +endobj + +3143 0 obj +<< + /Type /StructElem + /S /Formula + /P 3142 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [73] + /Pg 4829 0 R +>> +endobj + +3144 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3145 0 R] +>> +endobj + +3145 0 obj +<< + /Type /StructElem + /S /Formula + /P 3144 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [72] + /Pg 4829 0 R +>> +endobj + +3146 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3147 0 R] +>> +endobj + +3147 0 obj +<< + /Type /StructElem + /S /Formula + /P 3146 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [62 63 64 65 66 67 68 69 70 71] + /Pg 4829 0 R +>> +endobj + +3148 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3149 0 R] +>> +endobj + +3149 0 obj +<< + /Type /StructElem + /S /Formula + /P 3148 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [61] + /Pg 4829 0 R +>> +endobj + +3150 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3151 0 R] +>> +endobj + +3151 0 obj +<< + /Type /StructElem + /S /Formula + /P 3150 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [59 60] + /Pg 4829 0 R +>> +endobj + +3152 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3153 0 R] +>> +endobj + +3153 0 obj +<< + /Type /StructElem + /S /Formula + /P 3152 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [58] + /Pg 4829 0 R +>> +endobj + +3154 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3155 0 R] +>> +endobj + +3155 0 obj +<< + /Type /StructElem + /S /Formula + /P 3154 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [45 46 47 48 49 50 51 52 53 54 55 56 57] + /Pg 4829 0 R +>> +endobj + +3156 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3157 0 R] +>> +endobj + +3157 0 obj +<< + /Type /StructElem + /S /Formula + /P 3156 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [44] + /Pg 4829 0 R +>> +endobj + +3158 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3159 0 R] +>> +endobj + +3159 0 obj +<< + /Type /StructElem + /S /Formula + /P 3158 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43] + /Pg 4829 0 R +>> +endobj + +3160 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3161 0 R] +>> +endobj + +3161 0 obj +<< + /Type /StructElem + /S /Formula + /P 3160 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [30 31 32 33 34 35 36 37 38 39 40 41 42] + /Pg 4829 0 R +>> +endobj + +3162 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3163 0 R] +>> +endobj + +3163 0 obj +<< + /Type /StructElem + /S /Formula + /P 3162 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [29] + /Pg 4829 0 R +>> +endobj + +3164 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3165 0 R] +>> +endobj + +3165 0 obj +<< + /Type /StructElem + /S /Formula + /P 3164 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [24 25 26 27 28] + /Pg 4829 0 R +>> +endobj + +3166 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3167 0 R] +>> +endobj + +3167 0 obj +<< + /Type /StructElem + /S /Formula + /P 3166 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [23] + /Pg 4829 0 R +>> +endobj + +3168 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3169 0 R] +>> +endobj + +3169 0 obj +<< + /Type /StructElem + /S /Formula + /P 3168 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [18 19 20 21 22] + /Pg 4829 0 R +>> +endobj + +3170 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3171 0 R] +>> +endobj + +3171 0 obj +<< + /Type /StructElem + /S /Formula + /P 3170 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [17] + /Pg 4829 0 R +>> +endobj + +3172 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3173 0 R] +>> +endobj + +3173 0 obj +<< + /Type /StructElem + /S /Formula + /P 3172 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [16] + /Pg 4829 0 R +>> +endobj + +3174 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3175 0 R] +>> +endobj + +3175 0 obj +<< + /Type /StructElem + /S /Formula + /P 3174 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [14 15] + /Pg 4829 0 R +>> +endobj + +3176 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3177 0 R] +>> +endobj + +3177 0 obj +<< + /Type /StructElem + /S /Formula + /P 3176 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [13] + /Pg 4829 0 R +>> +endobj + +3178 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3179 0 R] +>> +endobj + +3179 0 obj +<< + /Type /StructElem + /S /Formula + /P 3178 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11 12] + /Pg 4829 0 R +>> +endobj + +3180 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3181 0 R] +>> +endobj + +3181 0 obj +<< + /Type /StructElem + /S /Formula + /P 3180 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [10] + /Pg 4829 0 R +>> +endobj + +3182 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3183 0 R] +>> +endobj + +3183 0 obj +<< + /Type /StructElem + /S /Formula + /P 3182 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2 3 4 5 6 7 8 9] + /Pg 4829 0 R +>> +endobj + +3184 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3185 0 R] +>> +endobj + +3185 0 obj +<< + /Type /StructElem + /S /Formula + /P 3184 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 4829 0 R +>> +endobj + +3186 0 obj +<< + /Type /StructElem + /S /Div + /P 3103 0 R + /K [3187 0 R] +>> +endobj + +3187 0 obj +<< + /Type /StructElem + /S /Formula + /P 3186 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 4829 0 R +>> +endobj + +3188 0 obj +<< + /Type /StructElem + /S /P + /P 3102 0 R + /K [3193 0 R 400 3192 0 R 402 3191 0 R 404 3190 0 R 406 3189 0 R 409] + /Pg 4822 0 R +>> +endobj + +3189 0 obj +<< + /Type /StructElem + /S /Formula + /P 3188 0 R + /K [407 408] + /Pg 4822 0 R +>> +endobj + +3190 0 obj +<< + /Type /StructElem + /S /Formula + /P 3188 0 R + /K [405] + /Pg 4822 0 R +>> +endobj + +3191 0 obj +<< + /Type /StructElem + /S /Formula + /P 3188 0 R + /K [403] + /Pg 4822 0 R +>> +endobj + +3192 0 obj +<< + /Type /StructElem + /S /Formula + /P 3188 0 R + /K [401] + /Pg 4822 0 R +>> +endobj + +3193 0 obj +<< + /Type /StructElem + /S /Strong + /P 3188 0 R + /K [397 398 399] + /Pg 4822 0 R +>> +endobj + +3194 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3214 0 R 3213 0 R 3195 0 R] +>> +endobj + +3195 0 obj +<< + /Type /StructElem + /S /P + /P 3194 0 R + /K [331 3212 0 R 334 3211 0 R 340 3210 0 R 342 3209 0 R 344 345 3208 0 R 348 3207 0 R 350 3206 0 R 352 3205 0 R 354 3204 0 R 357 3203 0 R 360 3202 0 R 365 3201 0 R 367 368 3200 0 R 373 3199 0 R 378 379 3198 0 R 390 3197 0 R 393 3196 0 R 396] + /Pg 4822 0 R +>> +endobj + +3196 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [394 395] + /Pg 4822 0 R +>> +endobj + +3197 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [391 392] + /Pg 4822 0 R +>> +endobj + +3198 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [380 381 382 383 384 385 386 387 388 389] + /Pg 4822 0 R +>> +endobj + +3199 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [374 375 376 377] + /Pg 4822 0 R +>> +endobj + +3200 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [369 370 371 372] + /Pg 4822 0 R +>> +endobj + +3201 0 obj +<< + /Type /StructElem + /S /Em + /P 3195 0 R + /K [366] + /Pg 4822 0 R +>> +endobj + +3202 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [361 362 363 364] + /Pg 4822 0 R +>> +endobj + +3203 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [358 359] + /Pg 4822 0 R +>> +endobj + +3204 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [355 356] + /Pg 4822 0 R +>> +endobj + +3205 0 obj +<< + /Type /StructElem + /S /Em + /P 3195 0 R + /K [353] + /Pg 4822 0 R +>> +endobj + +3206 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [351] + /Pg 4822 0 R +>> +endobj + +3207 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [349] + /Pg 4822 0 R +>> +endobj + +3208 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [346 347] + /Pg 4822 0 R +>> +endobj + +3209 0 obj +<< + /Type /StructElem + /S /Em + /P 3195 0 R + /K [343] + /Pg 4822 0 R +>> +endobj + +3210 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [341] + /Pg 4822 0 R +>> +endobj + +3211 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [335 336 337 338 339] + /Pg 4822 0 R +>> +endobj + +3212 0 obj +<< + /Type /StructElem + /S /Formula + /P 3195 0 R + /K [332 333] + /Pg 4822 0 R +>> +endobj + +3213 0 obj +<< + /Type /StructElem + /S /Formula + /P 3194 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330] + /Pg 4822 0 R +>> +endobj + +3214 0 obj +<< + /Type /StructElem + /S /P + /P 3194 0 R + /K [3215 0 R 289] + /Pg 4822 0 R +>> +endobj + +3215 0 obj +<< + /Type /StructElem + /S /Strong + /P 3214 0 R + /K [286 287 288] + /Pg 4822 0 R +>> +endobj + +3216 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3218 0 R 280 3217 0 R 282 283 284 285] + /Pg 4822 0 R +>> +endobj + +3217 0 obj +<< + /Type /StructElem + /S /Em + /P 3216 0 R + /K [281] + /Pg 4822 0 R +>> +endobj + +3218 0 obj +<< + /Type /StructElem + /S /Strong + /P 3216 0 R + /K [279] + /Pg 4822 0 R +>> +endobj + +3219 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [269 270 271 272 273 274 3220 0 R 278] + /Pg 4822 0 R +>> +endobj + +3220 0 obj +<< + /Type /StructElem + /S /Formula + /P 3219 0 R + /K [275 276 277] + /Pg 4822 0 R +>> +endobj + +3221 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3307 0 R 3222 0 R] +>> +endobj + +3222 0 obj +<< + /Type /StructElem + /S /Div + /P 3221 0 R + /K [3305 0 R 3303 0 R 3301 0 R 3299 0 R 3297 0 R 3295 0 R 3293 0 R 3291 0 R 3289 0 R 3287 0 R 3285 0 R 3283 0 R 3281 0 R 3279 0 R 3277 0 R 3275 0 R 3273 0 R 3271 0 R 3269 0 R 3267 0 R 3265 0 R 3263 0 R 3261 0 R 3259 0 R 3257 0 R 3255 0 R 3253 0 R 3251 0 R 3249 0 R 3247 0 R 3245 0 R 3243 0 R 3241 0 R 3239 0 R 3237 0 R 3235 0 R 3233 0 R 3231 0 R 3229 0 R 3227 0 R 3225 0 R 3223 0 R] +>> +endobj + +3223 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3224 0 R] +>> +endobj + +3224 0 obj +<< + /Type /StructElem + /S /Formula + /P 3223 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268] + /Pg 4822 0 R +>> +endobj + +3225 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3226 0 R] +>> +endobj + +3226 0 obj +<< + /Type /StructElem + /S /Formula + /P 3225 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [237] + /Pg 4822 0 R +>> +endobj + +3227 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3228 0 R] +>> +endobj + +3228 0 obj +<< + /Type /StructElem + /S /Formula + /P 3227 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [232 233 234 235 236] + /Pg 4822 0 R +>> +endobj + +3229 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3230 0 R] +>> +endobj + +3230 0 obj +<< + /Type /StructElem + /S /Formula + /P 3229 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [231] + /Pg 4822 0 R +>> +endobj + +3231 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3232 0 R] +>> +endobj + +3232 0 obj +<< + /Type /StructElem + /S /Formula + /P 3231 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [226 227 228 229 230] + /Pg 4822 0 R +>> +endobj + +3233 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3234 0 R] +>> +endobj + +3234 0 obj +<< + /Type /StructElem + /S /Formula + /P 3233 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [225] + /Pg 4822 0 R +>> +endobj + +3235 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3236 0 R] +>> +endobj + +3236 0 obj +<< + /Type /StructElem + /S /Formula + /P 3235 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [224] + /Pg 4822 0 R +>> +endobj + +3237 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3238 0 R] +>> +endobj + +3238 0 obj +<< + /Type /StructElem + /S /Formula + /P 3237 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [214 215 216 217 218 219 220 221 222 223] + /Pg 4822 0 R +>> +endobj + +3239 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3240 0 R] +>> +endobj + +3240 0 obj +<< + /Type /StructElem + /S /Formula + /P 3239 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [213] + /Pg 4822 0 R +>> +endobj + +3241 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3242 0 R] +>> +endobj + +3242 0 obj +<< + /Type /StructElem + /S /Formula + /P 3241 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [211 212] + /Pg 4822 0 R +>> +endobj + +3243 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3244 0 R] +>> +endobj + +3244 0 obj +<< + /Type /StructElem + /S /Formula + /P 3243 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [210] + /Pg 4822 0 R +>> +endobj + +3245 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3246 0 R] +>> +endobj + +3246 0 obj +<< + /Type /StructElem + /S /Formula + /P 3245 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [207 208 209] + /Pg 4822 0 R +>> +endobj + +3247 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3248 0 R] +>> +endobj + +3248 0 obj +<< + /Type /StructElem + /S /Formula + /P 3247 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [206] + /Pg 4822 0 R +>> +endobj + +3249 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3250 0 R] +>> +endobj + +3250 0 obj +<< + /Type /StructElem + /S /Formula + /P 3249 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [205] + /Pg 4822 0 R +>> +endobj + +3251 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3252 0 R] +>> +endobj + +3252 0 obj +<< + /Type /StructElem + /S /Formula + /P 3251 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204] + /Pg 4822 0 R +>> +endobj + +3253 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3254 0 R] +>> +endobj + +3254 0 obj +<< + /Type /StructElem + /S /Formula + /P 3253 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [166] + /Pg 4822 0 R +>> +endobj + +3255 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3256 0 R] +>> +endobj + +3256 0 obj +<< + /Type /StructElem + /S /Formula + /P 3255 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [161 162 163 164 165] + /Pg 4822 0 R +>> +endobj + +3257 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3258 0 R] +>> +endobj + +3258 0 obj +<< + /Type /StructElem + /S /Formula + /P 3257 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [160] + /Pg 4822 0 R +>> +endobj + +3259 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3260 0 R] +>> +endobj + +3260 0 obj +<< + /Type /StructElem + /S /Formula + /P 3259 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [155 156 157 158 159] + /Pg 4822 0 R +>> +endobj + +3261 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3262 0 R] +>> +endobj + +3262 0 obj +<< + /Type /StructElem + /S /Formula + /P 3261 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154] + /Pg 4822 0 R +>> +endobj + +3263 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3264 0 R] +>> +endobj + +3264 0 obj +<< + /Type /StructElem + /S /Formula + /P 3263 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [153] + /Pg 4822 0 R +>> +endobj + +3265 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3266 0 R] +>> +endobj + +3266 0 obj +<< + /Type /StructElem + /S /Formula + /P 3265 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [143 144 145 146 147 148 149 150 151 152] + /Pg 4822 0 R +>> +endobj + +3267 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3268 0 R] +>> +endobj + +3268 0 obj +<< + /Type /StructElem + /S /Formula + /P 3267 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [142] + /Pg 4822 0 R +>> +endobj + +3269 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3270 0 R] +>> +endobj + +3270 0 obj +<< + /Type /StructElem + /S /Formula + /P 3269 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [140 141] + /Pg 4822 0 R +>> +endobj + +3271 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3272 0 R] +>> +endobj + +3272 0 obj +<< + /Type /StructElem + /S /Formula + /P 3271 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [139] + /Pg 4822 0 R +>> +endobj + +3273 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3274 0 R] +>> +endobj + +3274 0 obj +<< + /Type /StructElem + /S /Formula + /P 3273 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [128 129 130 131 132 133 134 135 136 137 138] + /Pg 4822 0 R +>> +endobj + +3275 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3276 0 R] +>> +endobj + +3276 0 obj +<< + /Type /StructElem + /S /Formula + /P 3275 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [127] + /Pg 4822 0 R +>> +endobj + +3277 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3278 0 R] +>> +endobj + +3278 0 obj +<< + /Type /StructElem + /S /Formula + /P 3277 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [126] + /Pg 4822 0 R +>> +endobj + +3279 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3280 0 R] +>> +endobj + +3280 0 obj +<< + /Type /StructElem + /S /Formula + /P 3279 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [119 120 121 122 123 124 125] + /Pg 4822 0 R +>> +endobj + +3281 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3282 0 R] +>> +endobj + +3282 0 obj +<< + /Type /StructElem + /S /Formula + /P 3281 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [118] + /Pg 4822 0 R +>> +endobj + +3283 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3284 0 R] +>> +endobj + +3284 0 obj +<< + /Type /StructElem + /S /Formula + /P 3283 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [113 114 115 116 117] + /Pg 4822 0 R +>> +endobj + +3285 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3286 0 R] +>> +endobj + +3286 0 obj +<< + /Type /StructElem + /S /Formula + /P 3285 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [112] + /Pg 4822 0 R +>> +endobj + +3287 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3288 0 R] +>> +endobj + +3288 0 obj +<< + /Type /StructElem + /S /Formula + /P 3287 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [111] + /Pg 4822 0 R +>> +endobj + +3289 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3290 0 R] +>> +endobj + +3290 0 obj +<< + /Type /StructElem + /S /Formula + /P 3289 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [110] + /Pg 4822 0 R +>> +endobj + +3291 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3292 0 R] +>> +endobj + +3292 0 obj +<< + /Type /StructElem + /S /Formula + /P 3291 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [109] + /Pg 4822 0 R +>> +endobj + +3293 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3294 0 R] +>> +endobj + +3294 0 obj +<< + /Type /StructElem + /S /Formula + /P 3293 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [104 105 106 107 108] + /Pg 4822 0 R +>> +endobj + +3295 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3296 0 R] +>> +endobj + +3296 0 obj +<< + /Type /StructElem + /S /Formula + /P 3295 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [103] + /Pg 4822 0 R +>> +endobj + +3297 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3298 0 R] +>> +endobj + +3298 0 obj +<< + /Type /StructElem + /S /Formula + /P 3297 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [101 102] + /Pg 4822 0 R +>> +endobj + +3299 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3300 0 R] +>> +endobj + +3300 0 obj +<< + /Type /StructElem + /S /Formula + /P 3299 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [100] + /Pg 4822 0 R +>> +endobj + +3301 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3302 0 R] +>> +endobj + +3302 0 obj +<< + /Type /StructElem + /S /Formula + /P 3301 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [95 96 97 98 99] + /Pg 4822 0 R +>> +endobj + +3303 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3304 0 R] +>> +endobj + +3304 0 obj +<< + /Type /StructElem + /S /Formula + /P 3303 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [94] + /Pg 4822 0 R +>> +endobj + +3305 0 obj +<< + /Type /StructElem + /S /Div + /P 3222 0 R + /K [3306 0 R] +>> +endobj + +3306 0 obj +<< + /Type /StructElem + /S /Formula + /P 3305 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4822 0 R +>> +endobj + +3307 0 obj +<< + /Type /StructElem + /S /P + /P 3221 0 R + /K [3312 0 R 83 3311 0 R 85 3310 0 R 87 3309 0 R 89 3308 0 R 92] + /Pg 4822 0 R +>> +endobj + +3308 0 obj +<< + /Type /StructElem + /S /Formula + /P 3307 0 R + /K [90 91] + /Pg 4822 0 R +>> +endobj + +3309 0 obj +<< + /Type /StructElem + /S /Formula + /P 3307 0 R + /K [88] + /Pg 4822 0 R +>> +endobj + +3310 0 obj +<< + /Type /StructElem + /S /Formula + /P 3307 0 R + /K [86] + /Pg 4822 0 R +>> +endobj + +3311 0 obj +<< + /Type /StructElem + /S /Formula + /P 3307 0 R + /K [84] + /Pg 4822 0 R +>> +endobj + +3312 0 obj +<< + /Type /StructElem + /S /Strong + /P 3307 0 R + /K [80 81 82] + /Pg 4822 0 R +>> +endobj + +3313 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [63 64 3317 0 R 66 3316 0 R 71 72 3315 0 R 74 3314 0 R 79] + /Pg 4822 0 R +>> +endobj + +3314 0 obj +<< + /Type /StructElem + /S /Formula + /P 3313 0 R + /K [75 76 77 78] + /Pg 4822 0 R +>> +endobj + +3315 0 obj +<< + /Type /StructElem + /S /Formula + /P 3313 0 R + /K [73] + /Pg 4822 0 R +>> +endobj + +3316 0 obj +<< + /Type /StructElem + /S /Formula + /P 3313 0 R + /K [67 68 69 70] + /Pg 4822 0 R +>> +endobj + +3317 0 obj +<< + /Type /StructElem + /S /Formula + /P 3313 0 R + /K [65] + /Pg 4822 0 R +>> +endobj + +3318 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3331 0 R 3330 0 R 3328 0 R 3319 0 R] +>> +endobj + +3319 0 obj +<< + /Type /StructElem + /S /L + /P 3318 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3324 0 R 3320 0 R] +>> +endobj + +3320 0 obj +<< + /Type /StructElem + /S /LI + /P 3319 0 R + /K [3323 0 R 3321 0 R] +>> +endobj + +3321 0 obj +<< + /Type /StructElem + /S /LBody + /P 3320 0 R + /K [3322 0 R 60 61 62] + /Pg 4822 0 R +>> +endobj + +3322 0 obj +<< + /Type /StructElem + /S /Formula + /P 3321 0 R + /K [50 51 52 53 54 55 56 57 58 59] + /Pg 4822 0 R +>> +endobj + +3323 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3320 0 R + /K [49] + /Pg 4822 0 R +>> +endobj + +3324 0 obj +<< + /Type /StructElem + /S /LI + /P 3319 0 R + /K [3327 0 R 3325 0 R] +>> +endobj + +3325 0 obj +<< + /Type /StructElem + /S /LBody + /P 3324 0 R + /K [3326 0 R 48] + /Pg 4822 0 R +>> +endobj + +3326 0 obj +<< + /Type /StructElem + /S /Formula + /P 3325 0 R + /K [40 41 42 43 44 45 46 47] + /Pg 4822 0 R +>> +endobj + +3327 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3324 0 R + /K [39] + /Pg 4822 0 R +>> +endobj + +3328 0 obj +<< + /Type /StructElem + /S /P + /P 3318 0 R + /K [32 3329 0 R 38] + /Pg 4822 0 R +>> +endobj + +3329 0 obj +<< + /Type /StructElem + /S /Formula + /P 3328 0 R + /K [33 34 35 36 37] + /Pg 4822 0 R +>> +endobj + +3330 0 obj +<< + /Type /StructElem + /S /Formula + /P 3318 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31] + /Pg 4822 0 R +>> +endobj + +3331 0 obj +<< + /Type /StructElem + /S /P + /P 3318 0 R + /K [3332 0 R 10] + /Pg 4822 0 R +>> +endobj + +3332 0 obj +<< + /Type /StructElem + /S /Strong + /P 3331 0 R + /K [7 8 9] + /Pg 4822 0 R +>> +endobj + +3333 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3335 0 R 1 3334 0 R 3 4 5 6] + /Pg 4822 0 R +>> +endobj + +3334 0 obj +<< + /Type /StructElem + /S /Em + /P 3333 0 R + /K [2] + /Pg 4822 0 R +>> +endobj + +3335 0 obj +<< + /Type /StructElem + /S /Strong + /P 3333 0 R + /K [0] + /Pg 4822 0 R +>> +endobj + +3336 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [193 3339 0 R 195 196 197 3338 0 R 199 200 3337 0 R 202 203] + /Pg 4820 0 R +>> +endobj + +3337 0 obj +<< + /Type /StructElem + /S /Em + /P 3336 0 R + /K [201] + /Pg 4820 0 R +>> +endobj + +3338 0 obj +<< + /Type /StructElem + /S /Em + /P 3336 0 R + /K [198] + /Pg 4820 0 R +>> +endobj + +3339 0 obj +<< + /Type /StructElem + /S /Formula + /P 3336 0 R + /K [194] + /Pg 4820 0 R +>> +endobj + +3340 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Isolation and Interception) + /K [191 192] + /Pg 4820 0 R +>> +endobj + +3341 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [131 3359 0 R 133 3358 0 R 135 3357 0 R 137 138 3356 0 R 140 3355 0 R 147 3354 0 R 149 3353 0 R 154 3352 0 R 156 3351 0 R 158 3350 0 R 160 3349 0 R 165 3348 0 R 172 3347 0 R 174 3346 0 R 176 3345 0 R 181 3344 0 R 183 3343 0 R 185 186 3342 0 R 188 189 190] + /Pg 4820 0 R +>> +endobj + +3342 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [187] + /Pg 4820 0 R +>> +endobj + +3343 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [184] + /Pg 4820 0 R +>> +endobj + +3344 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [182] + /Pg 4820 0 R +>> +endobj + +3345 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [177 178 179 180] + /Pg 4820 0 R +>> +endobj + +3346 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [175] + /Pg 4820 0 R +>> +endobj + +3347 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [173] + /Pg 4820 0 R +>> +endobj + +3348 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [166 167 168 169 170 171] + /Pg 4820 0 R +>> +endobj + +3349 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [161 162 163 164] + /Pg 4820 0 R +>> +endobj + +3350 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [159] + /Pg 4820 0 R +>> +endobj + +3351 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [157] + /Pg 4820 0 R +>> +endobj + +3352 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [155] + /Pg 4820 0 R +>> +endobj + +3353 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [150 151 152 153] + /Pg 4820 0 R +>> +endobj + +3354 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [148] + /Pg 4820 0 R +>> +endobj + +3355 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [141 142 143 144 145 146] + /Pg 4820 0 R +>> +endobj + +3356 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [139] + /Pg 4820 0 R +>> +endobj + +3357 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [136] + /Pg 4820 0 R +>> +endobj + +3358 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [134] + /Pg 4820 0 R +>> +endobj + +3359 0 obj +<< + /Type /StructElem + /S /Formula + /P 3341 0 R + /K [132] + /Pg 4820 0 R +>> +endobj + +3360 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [120 3362 0 R 124 125 126 127 128 3361 0 R 130] + /Pg 4820 0 R +>> +endobj + +3361 0 obj +<< + /Type /StructElem + /S /Link + /P 3360 0 R + /K [129 << + /Type /OBJR + /Pg 4820 0 R + /Obj 4819 0 R + >>] + /Pg 4820 0 R +>> +endobj + +3362 0 obj +<< + /Type /StructElem + /S /Formula + /P 3360 0 R + /K [121 122 123] + /Pg 4820 0 R +>> +endobj + +3363 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3365 0 R 3364 0 R] +>> +endobj + +3364 0 obj +<< + /Type /StructElem + /S /Formula + /P 3363 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119] + /Pg 4820 0 R +>> +endobj + +3365 0 obj +<< + /Type /StructElem + /S /P + /P 3363 0 R + /K [3368 0 R 75 3367 0 R 79 3366 0 R 86] + /Pg 4820 0 R +>> +endobj + +3366 0 obj +<< + /Type /StructElem + /S /Formula + /P 3365 0 R + /K [80 81 82 83 84 85] + /Pg 4820 0 R +>> +endobj + +3367 0 obj +<< + /Type /StructElem + /S /Formula + /P 3365 0 R + /K [76 77 78] + /Pg 4820 0 R +>> +endobj + +3368 0 obj +<< + /Type /StructElem + /S /Strong + /P 3365 0 R + /K [72 73 74] + /Pg 4820 0 R +>> +endobj + +3369 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [56 57 3373 0 R 59 3372 0 R 62 3371 0 R 67 3370 0 R 69 70 71] + /Pg 4820 0 R +>> +endobj + +3370 0 obj +<< + /Type /StructElem + /S /Formula + /P 3369 0 R + /K [68] + /Pg 4820 0 R +>> +endobj + +3371 0 obj +<< + /Type /StructElem + /S /Formula + /P 3369 0 R + /K [63 64 65 66] + /Pg 4820 0 R +>> +endobj + +3372 0 obj +<< + /Type /StructElem + /S /Formula + /P 3369 0 R + /K [60 61] + /Pg 4820 0 R +>> +endobj + +3373 0 obj +<< + /Type /StructElem + /S /Formula + /P 3369 0 R + /K [58] + /Pg 4820 0 R +>> +endobj + +3374 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3377 0 R 3376 0 R 3375 0 R] +>> +endobj + +3375 0 obj +<< + /Type /StructElem + /S /P + /P 3374 0 R + /K [55] + /Pg 4820 0 R +>> +endobj + +3376 0 obj +<< + /Type /StructElem + /S /Formula + /P 3374 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [47 48 49 50 51 52 53 54] + /Pg 4820 0 R +>> +endobj + +3377 0 obj +<< + /Type /StructElem + /S /P + /P 3374 0 R + /K [3379 0 R 44 3378 0 R 46] + /Pg 4820 0 R +>> +endobj + +3378 0 obj +<< + /Type /StructElem + /S /Em + /P 3377 0 R + /K [45] + /Pg 4820 0 R +>> +endobj + +3379 0 obj +<< + /Type /StructElem + /S /Strong + /P 3377 0 R + /K [41 42 43] + /Pg 4820 0 R +>> +endobj + +3380 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [30 3382 0 R 35 3381 0 R 37 38 39 40] + /Pg 4820 0 R +>> +endobj + +3381 0 obj +<< + /Type /StructElem + /S /Formula + /P 3380 0 R + /K [36] + /Pg 4820 0 R +>> +endobj + +3382 0 obj +<< + /Type /StructElem + /S /Formula + /P 3380 0 R + /K [31 32 33 34] + /Pg 4820 0 R +>> +endobj + +3383 0 obj +<< + /Type /StructElem + /S /Formula + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29] + /Pg 4820 0 R +>> +endobj + +3384 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [265 266 << + /Type /MCR + /MCID 0 + /Pg 4820 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4820 0 R + >> << + /Type /MCR + /MCID 2 + /Pg 4820 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 4820 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4820 0 R + >> 3387 0 R << + /Type /MCR + /MCID 6 + /Pg 4820 0 R + >> << + /Type /MCR + /MCID 7 + /Pg 4820 0 R + >> 3386 0 R << + /Type /MCR + /MCID 11 + /Pg 4820 0 R + >> 3385 0 R << + /Type /MCR + /MCID 13 + /Pg 4820 0 R + >>] + /Pg 4817 0 R +>> +endobj + +3385 0 obj +<< + /Type /StructElem + /S /Em + /P 3384 0 R + /K [12] + /Pg 4820 0 R +>> +endobj + +3386 0 obj +<< + /Type /StructElem + /S /Formula + /P 3384 0 R + /K [8 9 10] + /Pg 4820 0 R +>> +endobj + +3387 0 obj +<< + /Type /StructElem + /S /Formula + /P 3384 0 R + /K [5] + /Pg 4820 0 R +>> +endobj + +3388 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Specification and Notification) + /K [263 264] + /Pg 4817 0 R +>> +endobj + +3389 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [243 3393 0 R 250 3392 0 R 253 254 3391 0 R 256 3390 0 R 259 260 261 262] + /Pg 4817 0 R +>> +endobj + +3390 0 obj +<< + /Type /StructElem + /S /Formula + /P 3389 0 R + /K [257 258] + /Pg 4817 0 R +>> +endobj + +3391 0 obj +<< + /Type /StructElem + /S /Link + /P 3389 0 R + /K [255 << + /Type /OBJR + /Pg 4817 0 R + /Obj 4816 0 R + >>] + /Pg 4817 0 R +>> +endobj + +3392 0 obj +<< + /Type /StructElem + /S /Formula + /P 3389 0 R + /K [251 252] + /Pg 4817 0 R +>> +endobj + +3393 0 obj +<< + /Type /StructElem + /S /Formula + /P 3389 0 R + /K [244 245 246 247 248 249] + /Pg 4817 0 R +>> +endobj + +3394 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3457 0 R 3400 0 R 3395 0 R] +>> +endobj + +3395 0 obj +<< + /Type /StructElem + /S /P + /P 3394 0 R + /K [216 3399 0 R 221 3398 0 R 228 3397 0 R 235 3396 0 R 242] + /Pg 4817 0 R +>> +endobj + +3396 0 obj +<< + /Type /StructElem + /S /Formula + /P 3395 0 R + /K [236 237 238 239 240 241] + /Pg 4817 0 R +>> +endobj + +3397 0 obj +<< + /Type /StructElem + /S /Formula + /P 3395 0 R + /K [229 230 231 232 233 234] + /Pg 4817 0 R +>> +endobj + +3398 0 obj +<< + /Type /StructElem + /S /Formula + /P 3395 0 R + /K [222 223 224 225 226 227] + /Pg 4817 0 R +>> +endobj + +3399 0 obj +<< + /Type /StructElem + /S /Formula + /P 3395 0 R + /K [217 218 219 220] + /Pg 4817 0 R +>> +endobj + +3400 0 obj +<< + /Type /StructElem + /S /Div + /P 3394 0 R + /K [3455 0 R 3453 0 R 3451 0 R 3449 0 R 3447 0 R 3445 0 R 3443 0 R 3441 0 R 3439 0 R 3437 0 R 3435 0 R 3433 0 R 3431 0 R 3429 0 R 3427 0 R 3425 0 R 3423 0 R 3421 0 R 3419 0 R 3417 0 R 3415 0 R 3413 0 R 3411 0 R 3409 0 R 3407 0 R 3405 0 R 3403 0 R 3401 0 R] +>> +endobj + +3401 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3402 0 R] +>> +endobj + +3402 0 obj +<< + /Type /StructElem + /S /Formula + /P 3401 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215] + /Pg 4817 0 R +>> +endobj + +3403 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3404 0 R] +>> +endobj + +3404 0 obj +<< + /Type /StructElem + /S /Formula + /P 3403 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [198] + /Pg 4817 0 R +>> +endobj + +3405 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3406 0 R] +>> +endobj + +3406 0 obj +<< + /Type /StructElem + /S /Formula + /P 3405 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [197] + /Pg 4817 0 R +>> +endobj + +3407 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3408 0 R] +>> +endobj + +3408 0 obj +<< + /Type /StructElem + /S /Formula + /P 3407 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [196] + /Pg 4817 0 R +>> +endobj + +3409 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3410 0 R] +>> +endobj + +3410 0 obj +<< + /Type /StructElem + /S /Formula + /P 3409 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [191 192 193 194 195] + /Pg 4817 0 R +>> +endobj + +3411 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3412 0 R] +>> +endobj + +3412 0 obj +<< + /Type /StructElem + /S /Formula + /P 3411 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [190] + /Pg 4817 0 R +>> +endobj + +3413 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3414 0 R] +>> +endobj + +3414 0 obj +<< + /Type /StructElem + /S /Formula + /P 3413 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [189] + /Pg 4817 0 R +>> +endobj + +3415 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3416 0 R] +>> +endobj + +3416 0 obj +<< + /Type /StructElem + /S /Formula + /P 3415 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [182 183 184 185 186 187 188] + /Pg 4817 0 R +>> +endobj + +3417 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3418 0 R] +>> +endobj + +3418 0 obj +<< + /Type /StructElem + /S /Formula + /P 3417 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [181] + /Pg 4817 0 R +>> +endobj + +3419 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3420 0 R] +>> +endobj + +3420 0 obj +<< + /Type /StructElem + /S /Formula + /P 3419 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [180] + /Pg 4817 0 R +>> +endobj + +3421 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3422 0 R] +>> +endobj + +3422 0 obj +<< + /Type /StructElem + /S /Formula + /P 3421 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [179] + /Pg 4817 0 R +>> +endobj + +3423 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3424 0 R] +>> +endobj + +3424 0 obj +<< + /Type /StructElem + /S /Formula + /P 3423 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [171 172 173 174 175 176 177 178] + /Pg 4817 0 R +>> +endobj + +3425 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3426 0 R] +>> +endobj + +3426 0 obj +<< + /Type /StructElem + /S /Formula + /P 3425 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [170] + /Pg 4817 0 R +>> +endobj + +3427 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3428 0 R] +>> +endobj + +3428 0 obj +<< + /Type /StructElem + /S /Formula + /P 3427 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [169] + /Pg 4817 0 R +>> +endobj + +3429 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3430 0 R] +>> +endobj + +3430 0 obj +<< + /Type /StructElem + /S /Formula + /P 3429 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [165 166 167 168] + /Pg 4817 0 R +>> +endobj + +3431 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3432 0 R] +>> +endobj + +3432 0 obj +<< + /Type /StructElem + /S /Formula + /P 3431 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [164] + /Pg 4817 0 R +>> +endobj + +3433 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3434 0 R] +>> +endobj + +3434 0 obj +<< + /Type /StructElem + /S /Formula + /P 3433 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [163] + /Pg 4817 0 R +>> +endobj + +3435 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3436 0 R] +>> +endobj + +3436 0 obj +<< + /Type /StructElem + /S /Formula + /P 3435 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [162] + /Pg 4817 0 R +>> +endobj + +3437 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3438 0 R] +>> +endobj + +3438 0 obj +<< + /Type /StructElem + /S /Formula + /P 3437 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [161] + /Pg 4817 0 R +>> +endobj + +3439 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3440 0 R] +>> +endobj + +3440 0 obj +<< + /Type /StructElem + /S /Formula + /P 3439 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [160] + /Pg 4817 0 R +>> +endobj + +3441 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3442 0 R] +>> +endobj + +3442 0 obj +<< + /Type /StructElem + /S /Formula + /P 3441 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [159] + /Pg 4817 0 R +>> +endobj + +3443 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3444 0 R] +>> +endobj + +3444 0 obj +<< + /Type /StructElem + /S /Formula + /P 3443 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [157 158] + /Pg 4817 0 R +>> +endobj + +3445 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3446 0 R] +>> +endobj + +3446 0 obj +<< + /Type /StructElem + /S /Formula + /P 3445 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [156] + /Pg 4817 0 R +>> +endobj + +3447 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3448 0 R] +>> +endobj + +3448 0 obj +<< + /Type /StructElem + /S /Formula + /P 3447 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [155] + /Pg 4817 0 R +>> +endobj + +3449 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3450 0 R] +>> +endobj + +3450 0 obj +<< + /Type /StructElem + /S /Formula + /P 3449 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [154] + /Pg 4817 0 R +>> +endobj + +3451 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3452 0 R] +>> +endobj + +3452 0 obj +<< + /Type /StructElem + /S /Formula + /P 3451 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [149 150 151 152 153] + /Pg 4817 0 R +>> +endobj + +3453 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3454 0 R] +>> +endobj + +3454 0 obj +<< + /Type /StructElem + /S /Formula + /P 3453 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [148] + /Pg 4817 0 R +>> +endobj + +3455 0 obj +<< + /Type /StructElem + /S /Div + /P 3400 0 R + /K [3456 0 R] +>> +endobj + +3456 0 obj +<< + /Type /StructElem + /S /Formula + /P 3455 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [147] + /Pg 4817 0 R +>> +endobj + +3457 0 obj +<< + /Type /StructElem + /S /P + /P 3394 0 R + /K [3461 0 R 140 3460 0 R 142 3459 0 R 144 3458 0 R 146] + /Pg 4817 0 R +>> +endobj + +3458 0 obj +<< + /Type /StructElem + /S /Formula + /P 3457 0 R + /K [145] + /Pg 4817 0 R +>> +endobj + +3459 0 obj +<< + /Type /StructElem + /S /Formula + /P 3457 0 R + /K [143] + /Pg 4817 0 R +>> +endobj + +3460 0 obj +<< + /Type /StructElem + /S /Formula + /P 3457 0 R + /K [141] + /Pg 4817 0 R +>> +endobj + +3461 0 obj +<< + /Type /StructElem + /S /Strong + /P 3457 0 R + /K [137 138 139] + /Pg 4817 0 R +>> +endobj + +3462 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [112 3467 0 R 114 3466 0 R 116 117 3465 0 R 120 121 122 3464 0 R 129 3463 0 R 136] + /Pg 4817 0 R +>> +endobj + +3463 0 obj +<< + /Type /StructElem + /S /Formula + /P 3462 0 R + /K [130 131 132 133 134 135] + /Pg 4817 0 R +>> +endobj + +3464 0 obj +<< + /Type /StructElem + /S /Formula + /P 3462 0 R + /K [123 124 125 126 127 128] + /Pg 4817 0 R +>> +endobj + +3465 0 obj +<< + /Type /StructElem + /S /Formula + /P 3462 0 R + /K [118 119] + /Pg 4817 0 R +>> +endobj + +3466 0 obj +<< + /Type /StructElem + /S /Formula + /P 3462 0 R + /K [115] + /Pg 4817 0 R +>> +endobj + +3467 0 obj +<< + /Type /StructElem + /S /Formula + /P 3462 0 R + /K [113] + /Pg 4817 0 R +>> +endobj + +3468 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3494 0 R 3493 0 R 3489 0 R 3469 0 R] +>> +endobj + +3469 0 obj +<< + /Type /StructElem + /S /L + /P 3468 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3484 0 R 3479 0 R 3474 0 R 3470 0 R] +>> +endobj + +3470 0 obj +<< + /Type /StructElem + /S /LI + /P 3469 0 R + /K [3473 0 R 3471 0 R] +>> +endobj + +3471 0 obj +<< + /Type /StructElem + /S /LBody + /P 3470 0 R + /K [3472 0 R 111] + /Pg 4817 0 R +>> +endobj + +3472 0 obj +<< + /Type /StructElem + /S /Formula + /P 3471 0 R + /K [105 106 107 108 109 110] + /Pg 4817 0 R +>> +endobj + +3473 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3470 0 R + /K [104] + /Pg 4817 0 R +>> +endobj + +3474 0 obj +<< + /Type /StructElem + /S /LI + /P 3469 0 R + /K [3478 0 R 3475 0 R] +>> +endobj + +3475 0 obj +<< + /Type /StructElem + /S /LBody + /P 3474 0 R + /K [3477 0 R 96 3476 0 R 103] + /Pg 4817 0 R +>> +endobj + +3476 0 obj +<< + /Type /StructElem + /S /Formula + /P 3475 0 R + /K [97 98 99 100 101 102] + /Pg 4817 0 R +>> +endobj + +3477 0 obj +<< + /Type /StructElem + /S /Formula + /P 3475 0 R + /K [93 94 95] + /Pg 4817 0 R +>> +endobj + +3478 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3474 0 R + /K [92] + /Pg 4817 0 R +>> +endobj + +3479 0 obj +<< + /Type /StructElem + /S /LI + /P 3469 0 R + /K [3483 0 R 3480 0 R] +>> +endobj + +3480 0 obj +<< + /Type /StructElem + /S /LBody + /P 3479 0 R + /K [3482 0 R 84 3481 0 R 91] + /Pg 4817 0 R +>> +endobj + +3481 0 obj +<< + /Type /StructElem + /S /Formula + /P 3480 0 R + /K [85 86 87 88 89 90] + /Pg 4817 0 R +>> +endobj + +3482 0 obj +<< + /Type /StructElem + /S /Formula + /P 3480 0 R + /K [78 79 80 81 82 83] + /Pg 4817 0 R +>> +endobj + +3483 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3479 0 R + /K [77] + /Pg 4817 0 R +>> +endobj + +3484 0 obj +<< + /Type /StructElem + /S /LI + /P 3469 0 R + /K [3488 0 R 3485 0 R] +>> +endobj + +3485 0 obj +<< + /Type /StructElem + /S /LBody + /P 3484 0 R + /K [3487 0 R 69 3486 0 R 76] + /Pg 4817 0 R +>> +endobj + +3486 0 obj +<< + /Type /StructElem + /S /Formula + /P 3485 0 R + /K [70 71 72 73 74 75] + /Pg 4817 0 R +>> +endobj + +3487 0 obj +<< + /Type /StructElem + /S /Formula + /P 3485 0 R + /K [65 66 67 68] + /Pg 4817 0 R +>> +endobj + +3488 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3484 0 R + /K [64] + /Pg 4817 0 R +>> +endobj + +3489 0 obj +<< + /Type /StructElem + /S /P + /P 3468 0 R + /K [46 3492 0 R 50 3491 0 R 59 3490 0 R 62 63] + /Pg 4817 0 R +>> +endobj + +3490 0 obj +<< + /Type /StructElem + /S /Formula + /P 3489 0 R + /K [60 61] + /Pg 4817 0 R +>> +endobj + +3491 0 obj +<< + /Type /StructElem + /S /Formula + /P 3489 0 R + /K [51 52 53 54 55 56 57 58] + /Pg 4817 0 R +>> +endobj + +3492 0 obj +<< + /Type /StructElem + /S /Formula + /P 3489 0 R + /K [47 48 49] + /Pg 4817 0 R +>> +endobj + +3493 0 obj +<< + /Type /StructElem + /S /Formula + /P 3468 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [35 36 37 38 39 40 41 42 43 44 45] + /Pg 4817 0 R +>> +endobj + +3494 0 obj +<< + /Type /StructElem + /S /P + /P 3468 0 R + /K [3497 0 R 25 3496 0 R 31 3495 0 R 33 34] + /Pg 4817 0 R +>> +endobj + +3495 0 obj +<< + /Type /StructElem + /S /Em + /P 3494 0 R + /K [32] + /Pg 4817 0 R +>> +endobj + +3496 0 obj +<< + /Type /StructElem + /S /Formula + /P 3494 0 R + /K [26 27 28 29 30] + /Pg 4817 0 R +>> +endobj + +3497 0 obj +<< + /Type /StructElem + /S /Strong + /P 3494 0 R + /K [22 23 24] + /Pg 4817 0 R +>> +endobj + +3498 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [13 14 3500 0 R 16 3499 0 R 18 19 20 21] + /Pg 4817 0 R +>> +endobj + +3499 0 obj +<< + /Type /StructElem + /S /Link + /P 3498 0 R + /K [17 << + /Type /OBJR + /Pg 4817 0 R + /Obj 4815 0 R + >>] + /Pg 4817 0 R +>> +endobj + +3500 0 obj +<< + /Type /StructElem + /S /Link + /P 3498 0 R + /K [15 << + /Type /OBJR + /Pg 4817 0 R + /Obj 4814 0 R + >>] + /Pg 4817 0 R +>> +endobj + +3501 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Coeffect Context) + /K [11 12] + /Pg 4817 0 R +>> +endobj + +3502 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3504 0 R 239 240 241 << + /Type /MCR + /MCID 0 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 2 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 5 + /Pg 4817 0 R + >> 3503 0 R << + /Type /MCR + /MCID 7 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 8 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 9 + /Pg 4817 0 R + >> << + /Type /MCR + /MCID 10 + /Pg 4817 0 R + >>] + /Pg 4812 0 R +>> +endobj + +3503 0 obj +<< + /Type /StructElem + /S /Em + /P 3502 0 R + /K [6] + /Pg 4817 0 R +>> +endobj + +3504 0 obj +<< + /Type /StructElem + /S /Em + /P 3502 0 R + /K [238] + /Pg 4812 0 R +>> +endobj + +3505 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Reactive Coeffects) + /K [236 237] + /Pg 4812 0 R +>> +endobj + +3506 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [213 3512 0 R 215 3511 0 R 223 3510 0 R 225 3509 0 R 227 228 229 230 3508 0 R 232 233 3507 0 R 235] + /Pg 4812 0 R +>> +endobj + +3507 0 obj +<< + /Type /StructElem + /S /Link + /P 3506 0 R + /K [234 << + /Type /OBJR + /Pg 4812 0 R + /Obj 4811 0 R + >>] + /Pg 4812 0 R +>> +endobj + +3508 0 obj +<< + /Type /StructElem + /S /Link + /P 3506 0 R + /K [231 << + /Type /OBJR + /Pg 4812 0 R + /Obj 4810 0 R + >>] + /Pg 4812 0 R +>> +endobj + +3509 0 obj +<< + /Type /StructElem + /S /Formula + /P 3506 0 R + /K [226] + /Pg 4812 0 R +>> +endobj + +3510 0 obj +<< + /Type /StructElem + /S /Formula + /P 3506 0 R + /K [224] + /Pg 4812 0 R +>> +endobj + +3511 0 obj +<< + /Type /StructElem + /S /Formula + /P 3506 0 R + /K [216 217 218 219 220 221 222] + /Pg 4812 0 R +>> +endobj + +3512 0 obj +<< + /Type /StructElem + /S /Formula + /P 3506 0 R + /K [214] + /Pg 4812 0 R +>> +endobj + +3513 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [190 3520 0 R 192 3519 0 R 196 197 3518 0 R 199 3517 0 R 202 3516 0 R 204 205 206 207 3515 0 R 209 3514 0 R 211 212] + /Pg 4812 0 R +>> +endobj + +3514 0 obj +<< + /Type /StructElem + /S /Formula + /P 3513 0 R + /K [210] + /Pg 4812 0 R +>> +endobj + +3515 0 obj +<< + /Type /StructElem + /S /Formula + /P 3513 0 R + /K [208] + /Pg 4812 0 R +>> +endobj + +3516 0 obj +<< + /Type /StructElem + /S /Formula + /P 3513 0 R + /K [203] + /Pg 4812 0 R +>> +endobj + +3517 0 obj +<< + /Type /StructElem + /S /Formula + /P 3513 0 R + /K [200 201] + /Pg 4812 0 R +>> +endobj + +3518 0 obj +<< + /Type /StructElem + /S /Formula + /P 3513 0 R + /K [198] + /Pg 4812 0 R +>> +endobj + +3519 0 obj +<< + /Type /StructElem + /S /Formula + /P 3513 0 R + /K [193 194 195] + /Pg 4812 0 R +>> +endobj + +3520 0 obj +<< + /Type /StructElem + /S /Em + /P 3513 0 R + /K [191] + /Pg 4812 0 R +>> +endobj + +3521 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3523 0 R 3522 0 R] +>> +endobj + +3522 0 obj +<< + /Type /StructElem + /S /Formula + /P 3521 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189] + /Pg 4812 0 R +>> +endobj + +3523 0 obj +<< + /Type /StructElem + /S /P + /P 3521 0 R + /K [3527 0 R 157 3526 0 R 159 3525 0 R 161 3524 0 R 169] + /Pg 4812 0 R +>> +endobj + +3524 0 obj +<< + /Type /StructElem + /S /Formula + /P 3523 0 R + /K [162 163 164 165 166 167 168] + /Pg 4812 0 R +>> +endobj + +3525 0 obj +<< + /Type /StructElem + /S /Formula + /P 3523 0 R + /K [160] + /Pg 4812 0 R +>> +endobj + +3526 0 obj +<< + /Type /StructElem + /S /Formula + /P 3523 0 R + /K [158] + /Pg 4812 0 R +>> +endobj + +3527 0 obj +<< + /Type /StructElem + /S /Strong + /P 3523 0 R + /K [154 155 156] + /Pg 4812 0 R +>> +endobj + +3528 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [151 3529 0 R 153] + /Pg 4812 0 R +>> +endobj + +3529 0 obj +<< + /Type /StructElem + /S /Formula + /P 3528 0 R + /K [152] + /Pg 4812 0 R +>> +endobj + +3530 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3538 0 R 3537 0 R 3536 0 R 3535 0 R 3534 0 R 3533 0 R 3532 0 R 3531 0 R] +>> +endobj + +3531 0 obj +<< + /Type /StructElem + /S /Span + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [150] + /Pg 4812 0 R +>> +endobj + +3532 0 obj +<< + /Type /StructElem + /S /Formula + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149] + /Pg 4812 0 R +>> +endobj + +3533 0 obj +<< + /Type /StructElem + /S /Span + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [133] + /Pg 4812 0 R +>> +endobj + +3534 0 obj +<< + /Type /StructElem + /S /Formula + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [131 132] + /Pg 4812 0 R +>> +endobj + +3535 0 obj +<< + /Type /StructElem + /S /Span + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [130] + /Pg 4812 0 R +>> +endobj + +3536 0 obj +<< + /Type /StructElem + /S /Formula + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [129] + /Pg 4812 0 R +>> +endobj + +3537 0 obj +<< + /Type /StructElem + /S /Span + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [128] + /Pg 4812 0 R +>> +endobj + +3538 0 obj +<< + /Type /StructElem + /S /Strong + /P 3530 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [125 126 127] + /Pg 4812 0 R +>> +endobj + +3539 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3563 0 R 3540 0 R] +>> +endobj + +3540 0 obj +<< + /Type /StructElem + /S /Div + /P 3539 0 R + /K [3561 0 R 3559 0 R 3557 0 R 3555 0 R 3553 0 R 3551 0 R 3549 0 R 3547 0 R 3545 0 R 3541 0 R] +>> +endobj + +3541 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3544 0 R 3543 0 R 3542 0 R] +>> +endobj + +3542 0 obj +<< + /Type /StructElem + /S /Formula + /P 3541 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [118 119 120 121 122 123 124] + /Pg 4812 0 R +>> +endobj + +3543 0 obj +<< + /Type /StructElem + /S /Formula + /P 3541 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [106 107 108 109 110 111 112 113 114 115 116 117] + /Pg 4812 0 R +>> +endobj + +3544 0 obj +<< + /Type /StructElem + /S /Formula + /P 3541 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [94 95 96 97 98 99 100 101 102 103 104 105] + /Pg 4812 0 R +>> +endobj + +3545 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3546 0 R] +>> +endobj + +3546 0 obj +<< + /Type /StructElem + /S /Formula + /P 3545 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [93] + /Pg 4812 0 R +>> +endobj + +3547 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3548 0 R] +>> +endobj + +3548 0 obj +<< + /Type /StructElem + /S /Formula + /P 3547 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [92] + /Pg 4812 0 R +>> +endobj + +3549 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3550 0 R] +>> +endobj + +3550 0 obj +<< + /Type /StructElem + /S /Formula + /P 3549 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [91] + /Pg 4812 0 R +>> +endobj + +3551 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3552 0 R] +>> +endobj + +3552 0 obj +<< + /Type /StructElem + /S /Formula + /P 3551 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [88 89 90] + /Pg 4812 0 R +>> +endobj + +3553 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3554 0 R] +>> +endobj + +3554 0 obj +<< + /Type /StructElem + /S /Formula + /P 3553 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [86 87] + /Pg 4812 0 R +>> +endobj + +3555 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3556 0 R] +>> +endobj + +3556 0 obj +<< + /Type /StructElem + /S /Formula + /P 3555 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [85] + /Pg 4812 0 R +>> +endobj + +3557 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3558 0 R] +>> +endobj + +3558 0 obj +<< + /Type /StructElem + /S /Formula + /P 3557 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [84] + /Pg 4812 0 R +>> +endobj + +3559 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3560 0 R] +>> +endobj + +3560 0 obj +<< + /Type /StructElem + /S /Formula + /P 3559 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [83] + /Pg 4812 0 R +>> +endobj + +3561 0 obj +<< + /Type /StructElem + /S /Div + /P 3540 0 R + /K [3562 0 R] +>> +endobj + +3562 0 obj +<< + /Type /StructElem + /S /Formula + /P 3561 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [80 81 82] + /Pg 4812 0 R +>> +endobj + +3563 0 obj +<< + /Type /StructElem + /S /P + /P 3539 0 R + /K [3566 0 R 68 3565 0 R 75 3564 0 R 79] + /Pg 4812 0 R +>> +endobj + +3564 0 obj +<< + /Type /StructElem + /S /Formula + /P 3563 0 R + /K [76 77 78] + /Pg 4812 0 R +>> +endobj + +3565 0 obj +<< + /Type /StructElem + /S /Formula + /P 3563 0 R + /K [69 70 71 72 73 74] + /Pg 4812 0 R +>> +endobj + +3566 0 obj +<< + /Type /StructElem + /S /Strong + /P 3563 0 R + /K [65 66 67] + /Pg 4812 0 R +>> +endobj + +3567 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [60 3568 0 R 63 64] + /Pg 4812 0 R +>> +endobj + +3568 0 obj +<< + /Type /StructElem + /S /Formula + /P 3567 0 R + /K [61 62] + /Pg 4812 0 R +>> +endobj + +3569 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3577 0 R 3576 0 R 3575 0 R 3574 0 R 3573 0 R 3572 0 R 3571 0 R 3570 0 R] +>> +endobj + +3570 0 obj +<< + /Type /StructElem + /S /Span + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [59] + /Pg 4812 0 R +>> +endobj + +3571 0 obj +<< + /Type /StructElem + /S /Formula + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58] + /Pg 4812 0 R +>> +endobj + +3572 0 obj +<< + /Type /StructElem + /S /Span + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [41] + /Pg 4812 0 R +>> +endobj + +3573 0 obj +<< + /Type /StructElem + /S /Formula + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [39 40] + /Pg 4812 0 R +>> +endobj + +3574 0 obj +<< + /Type /StructElem + /S /Span + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [38] + /Pg 4812 0 R +>> +endobj + +3575 0 obj +<< + /Type /StructElem + /S /Formula + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [37] + /Pg 4812 0 R +>> +endobj + +3576 0 obj +<< + /Type /StructElem + /S /Span + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [36] + /Pg 4812 0 R +>> +endobj + +3577 0 obj +<< + /Type /StructElem + /S /Strong + /P 3569 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33 34 35] + /Pg 4812 0 R +>> +endobj + +3578 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3594 0 R 3593 0 R 3592 0 R 3591 0 R 3590 0 R 3589 0 R 3588 0 R 3587 0 R 3586 0 R 3585 0 R 3584 0 R 23 3583 0 R 3582 0 R 3581 0 R 3580 0 R 3579 0 R] + /Pg 4812 0 R +>> +endobj + +3579 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [30 31 32] + /Pg 4812 0 R +>> +endobj + +3580 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [28 29] + /Pg 4812 0 R +>> +endobj + +3581 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [26 27] + /Pg 4812 0 R +>> +endobj + +3582 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [25] + /Pg 4812 0 R +>> +endobj + +3583 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [24] + /Pg 4812 0 R +>> +endobj + +3584 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [21 22] + /Pg 4812 0 R +>> +endobj + +3585 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [19 20] + /Pg 4812 0 R +>> +endobj + +3586 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [17 18] + /Pg 4812 0 R +>> +endobj + +3587 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [15 16] + /Pg 4812 0 R +>> +endobj + +3588 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [13 14] + /Pg 4812 0 R +>> +endobj + +3589 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [11 12] + /Pg 4812 0 R +>> +endobj + +3590 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [10] + /Pg 4812 0 R +>> +endobj + +3591 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [6 7 8 9] + /Pg 4812 0 R +>> +endobj + +3592 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [3 4 5] + /Pg 4812 0 R +>> +endobj + +3593 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [1 2] + /Pg 4812 0 R +>> +endobj + +3594 0 obj +<< + /Type /StructElem + /S /Formula + /P 3578 0 R + /K [0] + /Pg 4812 0 R +>> +endobj + +3595 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [263 3597 0 R 266 3596 0 R 270 271] + /Pg 4808 0 R +>> +endobj + +3596 0 obj +<< + /Type /StructElem + /S /Formula + /P 3595 0 R + /K [267 268 269] + /Pg 4808 0 R +>> +endobj + +3597 0 obj +<< + /Type /StructElem + /S /Formula + /P 3595 0 R + /K [264 265] + /Pg 4808 0 R +>> +endobj + +3598 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3629 0 R 3599 0 R] +>> +endobj + +3599 0 obj +<< + /Type /StructElem + /S /Div + /P 3598 0 R + /K [3627 0 R 3625 0 R 3623 0 R 3621 0 R 3619 0 R 3617 0 R 3615 0 R 3613 0 R 3611 0 R 3609 0 R 3607 0 R 3605 0 R 3603 0 R 3600 0 R] +>> +endobj + +3600 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3602 0 R 3601 0 R] +>> +endobj + +3601 0 obj +<< + /Type /StructElem + /S /Formula + /P 3600 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [248 249 250 251 252 253 254 255 256 257 258 259 260 261 262] + /Pg 4808 0 R +>> +endobj + +3602 0 obj +<< + /Type /StructElem + /S /Formula + /P 3600 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [236 237 238 239 240 241 242 243 244 245 246 247] + /Pg 4808 0 R +>> +endobj + +3603 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3604 0 R] +>> +endobj + +3604 0 obj +<< + /Type /StructElem + /S /Formula + /P 3603 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [235] + /Pg 4808 0 R +>> +endobj + +3605 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3606 0 R] +>> +endobj + +3606 0 obj +<< + /Type /StructElem + /S /Formula + /P 3605 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [230 231 232 233 234] + /Pg 4808 0 R +>> +endobj + +3607 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3608 0 R] +>> +endobj + +3608 0 obj +<< + /Type /StructElem + /S /Formula + /P 3607 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [229] + /Pg 4808 0 R +>> +endobj + +3609 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3610 0 R] +>> +endobj + +3610 0 obj +<< + /Type /StructElem + /S /Formula + /P 3609 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [228] + /Pg 4808 0 R +>> +endobj + +3611 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3612 0 R] +>> +endobj + +3612 0 obj +<< + /Type /StructElem + /S /Formula + /P 3611 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [227] + /Pg 4808 0 R +>> +endobj + +3613 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3614 0 R] +>> +endobj + +3614 0 obj +<< + /Type /StructElem + /S /Formula + /P 3613 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [225 226] + /Pg 4808 0 R +>> +endobj + +3615 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3616 0 R] +>> +endobj + +3616 0 obj +<< + /Type /StructElem + /S /Formula + /P 3615 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [222 223 224] + /Pg 4808 0 R +>> +endobj + +3617 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3618 0 R] +>> +endobj + +3618 0 obj +<< + /Type /StructElem + /S /Formula + /P 3617 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [221] + /Pg 4808 0 R +>> +endobj + +3619 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3620 0 R] +>> +endobj + +3620 0 obj +<< + /Type /StructElem + /S /Formula + /P 3619 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [219 220] + /Pg 4808 0 R +>> +endobj + +3621 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3622 0 R] +>> +endobj + +3622 0 obj +<< + /Type /StructElem + /S /Formula + /P 3621 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [218] + /Pg 4808 0 R +>> +endobj + +3623 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3624 0 R] +>> +endobj + +3624 0 obj +<< + /Type /StructElem + /S /Formula + /P 3623 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [216 217] + /Pg 4808 0 R +>> +endobj + +3625 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3626 0 R] +>> +endobj + +3626 0 obj +<< + /Type /StructElem + /S /Formula + /P 3625 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [215] + /Pg 4808 0 R +>> +endobj + +3627 0 obj +<< + /Type /StructElem + /S /Div + /P 3599 0 R + /K [3628 0 R] +>> +endobj + +3628 0 obj +<< + /Type /StructElem + /S /Formula + /P 3627 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [213 214] + /Pg 4808 0 R +>> +endobj + +3629 0 obj +<< + /Type /StructElem + /S /P + /P 3598 0 R + /K [3631 0 R 209 3630 0 R 212] + /Pg 4808 0 R +>> +endobj + +3630 0 obj +<< + /Type /StructElem + /S /Formula + /P 3629 0 R + /K [210 211] + /Pg 4808 0 R +>> +endobj + +3631 0 obj +<< + /Type /StructElem + /S /Strong + /P 3629 0 R + /K [206 207 208] + /Pg 4808 0 R +>> +endobj + +3632 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [191 3636 0 R 194 3635 0 R 198 3634 0 R 201 3633 0 R 205] + /Pg 4808 0 R +>> +endobj + +3633 0 obj +<< + /Type /StructElem + /S /Formula + /P 3632 0 R + /K [202 203 204] + /Pg 4808 0 R +>> +endobj + +3634 0 obj +<< + /Type /StructElem + /S /Formula + /P 3632 0 R + /K [199 200] + /Pg 4808 0 R +>> +endobj + +3635 0 obj +<< + /Type /StructElem + /S /Formula + /P 3632 0 R + /K [195 196 197] + /Pg 4808 0 R +>> +endobj + +3636 0 obj +<< + /Type /StructElem + /S /Formula + /P 3632 0 R + /K [192 193] + /Pg 4808 0 R +>> +endobj + +3637 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3645 0 R 3644 0 R 3643 0 R 3642 0 R 3641 0 R 3640 0 R 3639 0 R 3638 0 R] +>> +endobj + +3638 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [189 190] + /Pg 4808 0 R +>> +endobj + +3639 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [188] + /Pg 4808 0 R +>> +endobj + +3640 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [187] + /Pg 4808 0 R +>> +endobj + +3641 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [185 186] + /Pg 4808 0 R +>> +endobj + +3642 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [183 184] + /Pg 4808 0 R +>> +endobj + +3643 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [182] + /Pg 4808 0 R +>> +endobj + +3644 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [179 180 181] + /Pg 4808 0 R +>> +endobj + +3645 0 obj +<< + /Type /StructElem + /S /Formula + /P 3637 0 R + /K [178] + /Pg 4808 0 R +>> +endobj + +3646 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [167 3647 0 R 174 175 176 177] + /Pg 4808 0 R +>> +endobj + +3647 0 obj +<< + /Type /StructElem + /S /Formula + /P 3646 0 R + /K [168 169 170 171 172 173] + /Pg 4808 0 R +>> +endobj + +3648 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3662 0 R 3661 0 R 3658 0 R 3649 0 R] +>> +endobj + +3649 0 obj +<< + /Type /StructElem + /S /L + /P 3648 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3654 0 R 3650 0 R] +>> +endobj + +3650 0 obj +<< + /Type /StructElem + /S /LI + /P 3649 0 R + /K [3653 0 R 3651 0 R] +>> +endobj + +3651 0 obj +<< + /Type /StructElem + /S /LBody + /P 3650 0 R + /K [3652 0 R 166] + /Pg 4808 0 R +>> +endobj + +3652 0 obj +<< + /Type /StructElem + /S /Formula + /P 3651 0 R + /K [161 162 163 164 165] + /Pg 4808 0 R +>> +endobj + +3653 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3650 0 R + /K [160] + /Pg 4808 0 R +>> +endobj + +3654 0 obj +<< + /Type /StructElem + /S /LI + /P 3649 0 R + /K [3657 0 R 3655 0 R] +>> +endobj + +3655 0 obj +<< + /Type /StructElem + /S /LBody + /P 3654 0 R + /K [3656 0 R 159] + /Pg 4808 0 R +>> +endobj + +3656 0 obj +<< + /Type /StructElem + /S /Formula + /P 3655 0 R + /K [156 157 158] + /Pg 4808 0 R +>> +endobj + +3657 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3654 0 R + /K [155] + /Pg 4808 0 R +>> +endobj + +3658 0 obj +<< + /Type /StructElem + /S /P + /P 3648 0 R + /K [143 3660 0 R 148 3659 0 R 154] + /Pg 4808 0 R +>> +endobj + +3659 0 obj +<< + /Type /StructElem + /S /Formula + /P 3658 0 R + /K [149 150 151 152 153] + /Pg 4808 0 R +>> +endobj + +3660 0 obj +<< + /Type /StructElem + /S /Formula + /P 3658 0 R + /K [144 145 146 147] + /Pg 4808 0 R +>> +endobj + +3661 0 obj +<< + /Type /StructElem + /S /Formula + /P 3648 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142] + /Pg 4808 0 R +>> +endobj + +3662 0 obj +<< + /Type /StructElem + /S /P + /P 3648 0 R + /K [3665 0 R 76 3664 0 R 79 3663 0 R 83] + /Pg 4808 0 R +>> +endobj + +3663 0 obj +<< + /Type /StructElem + /S /Formula + /P 3662 0 R + /K [80 81 82] + /Pg 4808 0 R +>> +endobj + +3664 0 obj +<< + /Type /StructElem + /S /Formula + /P 3662 0 R + /K [77 78] + /Pg 4808 0 R +>> +endobj + +3665 0 obj +<< + /Type /StructElem + /S /Strong + /P 3662 0 R + /K [73 74 75] + /Pg 4808 0 R +>> +endobj + +3666 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [60 61 62 3669 0 R 65 3668 0 R 68 3667 0 R 72] + /Pg 4808 0 R +>> +endobj + +3667 0 obj +<< + /Type /StructElem + /S /Formula + /P 3666 0 R + /K [69 70 71] + /Pg 4808 0 R +>> +endobj + +3668 0 obj +<< + /Type /StructElem + /S /Formula + /P 3666 0 R + /K [66 67] + /Pg 4808 0 R +>> +endobj + +3669 0 obj +<< + /Type /StructElem + /S /Formula + /P 3666 0 R + /K [63 64] + /Pg 4808 0 R +>> +endobj + +3670 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Decimal + >>] + /K [3677 0 R 3671 0 R] +>> +endobj + +3671 0 obj +<< + /Type /StructElem + /S /LI + /P 3670 0 R + /K [3676 0 R 3672 0 R] +>> +endobj + +3672 0 obj +<< + /Type /StructElem + /S /LBody + /P 3671 0 R + /K [34 3675 0 R 37 38 3674 0 R 52 3673 0 R 59] + /Pg 4808 0 R +>> +endobj + +3673 0 obj +<< + /Type /StructElem + /S /Formula + /P 3672 0 R + /K [53 54 55 56 57 58] + /Pg 4808 0 R +>> +endobj + +3674 0 obj +<< + /Type /StructElem + /S /Formula + /P 3672 0 R + /K [39 40 41 42 43 44 45 46 47 48 49 50 51] + /Pg 4808 0 R +>> +endobj + +3675 0 obj +<< + /Type /StructElem + /S /Formula + /P 3672 0 R + /K [35 36] + /Pg 4808 0 R +>> +endobj + +3676 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3671 0 R + /K [33] + /Pg 4808 0 R +>> +endobj + +3677 0 obj +<< + /Type /StructElem + /S /LI + /P 3670 0 R + /K [3682 0 R 3678 0 R] +>> +endobj + +3678 0 obj +<< + /Type /StructElem + /S /LBody + /P 3677 0 R + /K [14 3681 0 R 16 17 3680 0 R 27 3679 0 R 32] + /Pg 4808 0 R +>> +endobj + +3679 0 obj +<< + /Type /StructElem + /S /Formula + /P 3678 0 R + /K [28 29 30 31] + /Pg 4808 0 R +>> +endobj + +3680 0 obj +<< + /Type /StructElem + /S /Formula + /P 3678 0 R + /K [18 19 20 21 22 23 24 25 26] + /Pg 4808 0 R +>> +endobj + +3681 0 obj +<< + /Type /StructElem + /S /Formula + /P 3678 0 R + /K [15] + /Pg 4808 0 R +>> +endobj + +3682 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3677 0 R + /K [13] + /Pg 4808 0 R +>> +endobj + +3683 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2 3686 0 R 4 3685 0 R 6 7 8 3684 0 R 10 11 12] + /Pg 4808 0 R +>> +endobj + +3684 0 obj +<< + /Type /StructElem + /S /Formula + /P 3683 0 R + /K [9] + /Pg 4808 0 R +>> +endobj + +3685 0 obj +<< + /Type /StructElem + /S /Formula + /P 3683 0 R + /K [5] + /Pg 4808 0 R +>> +endobj + +3686 0 obj +<< + /Type /StructElem + /S /Formula + /P 3683 0 R + /K [3] + /Pg 4808 0 R +>> +endobj + +3687 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Revertible Effect Functions) + /K [0 1] + /Pg 4808 0 R +>> +endobj + +3688 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3704 0 R 3703 0 R 3702 0 R 3701 0 R 3700 0 R 3699 0 R 3698 0 R 3697 0 R 3696 0 R 3695 0 R 3694 0 R 3693 0 R 3692 0 R 3691 0 R 3690 0 R 3689 0 R] +>> +endobj + +3689 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [342 343] + /Pg 4806 0 R +>> +endobj + +3690 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [340 341] + /Pg 4806 0 R +>> +endobj + +3691 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [338 339] + /Pg 4806 0 R +>> +endobj + +3692 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [336 337] + /Pg 4806 0 R +>> +endobj + +3693 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [335] + /Pg 4806 0 R +>> +endobj + +3694 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [334] + /Pg 4806 0 R +>> +endobj + +3695 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [333] + /Pg 4806 0 R +>> +endobj + +3696 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [332] + /Pg 4806 0 R +>> +endobj + +3697 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [331] + /Pg 4806 0 R +>> +endobj + +3698 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [330] + /Pg 4806 0 R +>> +endobj + +3699 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [329] + /Pg 4806 0 R +>> +endobj + +3700 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [328] + /Pg 4806 0 R +>> +endobj + +3701 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [325 326 327] + /Pg 4806 0 R +>> +endobj + +3702 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [322 323 324] + /Pg 4806 0 R +>> +endobj + +3703 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [320 321] + /Pg 4806 0 R +>> +endobj + +3704 0 obj +<< + /Type /StructElem + /S /Formula + /P 3688 0 R + /K [318 319] + /Pg 4806 0 R +>> +endobj + +3705 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [287 3712 0 R 289 3711 0 R 291 3710 0 R 293 294 3709 0 R 296 3708 0 R 298 299 3707 0 R 313 314 3706 0 R 317] + /Pg 4806 0 R +>> +endobj + +3706 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [315 316] + /Pg 4806 0 R +>> +endobj + +3707 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [300 301 302 303 304 305 306 307 308 309 310 311 312] + /Pg 4806 0 R +>> +endobj + +3708 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [297] + /Pg 4806 0 R +>> +endobj + +3709 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [295] + /Pg 4806 0 R +>> +endobj + +3710 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [292] + /Pg 4806 0 R +>> +endobj + +3711 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [290] + /Pg 4806 0 R +>> +endobj + +3712 0 obj +<< + /Type /StructElem + /S /Formula + /P 3705 0 R + /K [288] + /Pg 4806 0 R +>> +endobj + +3713 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3735 0 R 3714 0 R] +>> +endobj + +3714 0 obj +<< + /Type /StructElem + /S /Div + /P 3713 0 R + /K [3733 0 R 3731 0 R 3729 0 R 3727 0 R 3725 0 R 3723 0 R 3721 0 R 3719 0 R 3717 0 R 3715 0 R] +>> +endobj + +3715 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3716 0 R] +>> +endobj + +3716 0 obj +<< + /Type /StructElem + /S /Formula + /P 3715 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [278 279 280 281 282 283 284 285 286] + /Pg 4806 0 R +>> +endobj + +3717 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3718 0 R] +>> +endobj + +3718 0 obj +<< + /Type /StructElem + /S /Formula + /P 3717 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [277] + /Pg 4806 0 R +>> +endobj + +3719 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3720 0 R] +>> +endobj + +3720 0 obj +<< + /Type /StructElem + /S /Formula + /P 3719 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [272 273 274 275 276] + /Pg 4806 0 R +>> +endobj + +3721 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3722 0 R] +>> +endobj + +3722 0 obj +<< + /Type /StructElem + /S /Formula + /P 3721 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [271] + /Pg 4806 0 R +>> +endobj + +3723 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3724 0 R] +>> +endobj + +3724 0 obj +<< + /Type /StructElem + /S /Formula + /P 3723 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [269 270] + /Pg 4806 0 R +>> +endobj + +3725 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3726 0 R] +>> +endobj + +3726 0 obj +<< + /Type /StructElem + /S /Formula + /P 3725 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [267 268] + /Pg 4806 0 R +>> +endobj + +3727 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3728 0 R] +>> +endobj + +3728 0 obj +<< + /Type /StructElem + /S /Formula + /P 3727 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [266] + /Pg 4806 0 R +>> +endobj + +3729 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3730 0 R] +>> +endobj + +3730 0 obj +<< + /Type /StructElem + /S /Formula + /P 3729 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [264 265] + /Pg 4806 0 R +>> +endobj + +3731 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3732 0 R] +>> +endobj + +3732 0 obj +<< + /Type /StructElem + /S /Formula + /P 3731 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [263] + /Pg 4806 0 R +>> +endobj + +3733 0 obj +<< + /Type /StructElem + /S /Div + /P 3714 0 R + /K [3734 0 R] +>> +endobj + +3734 0 obj +<< + /Type /StructElem + /S /Formula + /P 3733 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [261 262] + /Pg 4806 0 R +>> +endobj + +3735 0 obj +<< + /Type /StructElem + /S /P + /P 3713 0 R + /K [3738 0 R 254 3737 0 R 257 3736 0 R 260] + /Pg 4806 0 R +>> +endobj + +3736 0 obj +<< + /Type /StructElem + /S /Formula + /P 3735 0 R + /K [258 259] + /Pg 4806 0 R +>> +endobj + +3737 0 obj +<< + /Type /StructElem + /S /Formula + /P 3735 0 R + /K [255 256] + /Pg 4806 0 R +>> +endobj + +3738 0 obj +<< + /Type /StructElem + /S /Strong + /P 3735 0 R + /K [251 252 253] + /Pg 4806 0 R +>> +endobj + +3739 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [241 3742 0 R 244 3741 0 R 246 247 3740 0 R 250] + /Pg 4806 0 R +>> +endobj + +3740 0 obj +<< + /Type /StructElem + /S /Formula + /P 3739 0 R + /K [248 249] + /Pg 4806 0 R +>> +endobj + +3741 0 obj +<< + /Type /StructElem + /S /Formula + /P 3739 0 R + /K [245] + /Pg 4806 0 R +>> +endobj + +3742 0 obj +<< + /Type /StructElem + /S /Formula + /P 3739 0 R + /K [242 243] + /Pg 4806 0 R +>> +endobj + +3743 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3745 0 R 3744 0 R] +>> +endobj + +3744 0 obj +<< + /Type /StructElem + /S /Formula + /P 3743 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240] + /Pg 4806 0 R +>> +endobj + +3745 0 obj +<< + /Type /StructElem + /S /P + /P 3743 0 R + /K [3749 0 R 208 3748 0 R 210 3747 0 R 212 3746 0 R 220] + /Pg 4806 0 R +>> +endobj + +3746 0 obj +<< + /Type /StructElem + /S /Formula + /P 3745 0 R + /K [213 214 215 216 217 218 219] + /Pg 4806 0 R +>> +endobj + +3747 0 obj +<< + /Type /StructElem + /S /Formula + /P 3745 0 R + /K [211] + /Pg 4806 0 R +>> +endobj + +3748 0 obj +<< + /Type /StructElem + /S /Formula + /P 3745 0 R + /K [209] + /Pg 4806 0 R +>> +endobj + +3749 0 obj +<< + /Type /StructElem + /S /Strong + /P 3745 0 R + /K [205 206 207] + /Pg 4806 0 R +>> +endobj + +3750 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3759 0 R 3758 0 R 3757 0 R 3756 0 R 3755 0 R 3754 0 R 3753 0 R 3752 0 R 3751 0 R] +>> +endobj + +3751 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [203 204] + /Pg 4806 0 R +>> +endobj + +3752 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [201 202] + /Pg 4806 0 R +>> +endobj + +3753 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [200] + /Pg 4806 0 R +>> +endobj + +3754 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [199] + /Pg 4806 0 R +>> +endobj + +3755 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [198] + /Pg 4806 0 R +>> +endobj + +3756 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [196 197] + /Pg 4806 0 R +>> +endobj + +3757 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [194 195] + /Pg 4806 0 R +>> +endobj + +3758 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [192 193] + /Pg 4806 0 R +>> +endobj + +3759 0 obj +<< + /Type /StructElem + /S /Formula + /P 3750 0 R + /K [191] + /Pg 4806 0 R +>> +endobj + +3760 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3764 0 R 3763 0 R 3762 0 R 3761 0 R] +>> +endobj + +3761 0 obj +<< + /Type /StructElem + /S /Span + /P 3760 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [190] + /Pg 4806 0 R +>> +endobj + +3762 0 obj +<< + /Type /StructElem + /S /Formula + /P 3760 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189] + /Pg 4806 0 R +>> +endobj + +3763 0 obj +<< + /Type /StructElem + /S /Span + /P 3760 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [170] + /Pg 4806 0 R +>> +endobj + +3764 0 obj +<< + /Type /StructElem + /S /Strong + /P 3760 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [167 168 169] + /Pg 4806 0 R +>> +endobj + +3765 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [78 3781 0 R 83 3780 0 R 85 86 3779 0 R 89 3778 0 R 95 3777 0 R 101 3776 0 R 103 3775 0 R 105 3774 0 R 107 3773 0 R 113 3772 0 R 116 117 3771 0 R 140 3770 0 R 143 144 3769 0 R 155 3768 0 R 157 3767 0 R 163 3766 0 R 166] + /Pg 4806 0 R +>> +endobj + +3766 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [164 165] + /Pg 4806 0 R +>> +endobj + +3767 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [158 159 160 161 162] + /Pg 4806 0 R +>> +endobj + +3768 0 obj +<< + /Type /StructElem + /S /Link + /P 3765 0 R + /K [156 << + /Type /OBJR + /Pg 4806 0 R + /Obj 4805 0 R + >>] + /Pg 4806 0 R +>> +endobj + +3769 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [145 146 147 148 149 150 151 152 153 154] + /Pg 4806 0 R +>> +endobj + +3770 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [141 142] + /Pg 4806 0 R +>> +endobj + +3771 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139] + /Pg 4806 0 R +>> +endobj + +3772 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [114 115] + /Pg 4806 0 R +>> +endobj + +3773 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [108 109 110 111 112] + /Pg 4806 0 R +>> +endobj + +3774 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [106] + /Pg 4806 0 R +>> +endobj + +3775 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [104] + /Pg 4806 0 R +>> +endobj + +3776 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [102] + /Pg 4806 0 R +>> +endobj + +3777 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [96 97 98 99 100] + /Pg 4806 0 R +>> +endobj + +3778 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [90 91 92 93 94] + /Pg 4806 0 R +>> +endobj + +3779 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [87 88] + /Pg 4806 0 R +>> +endobj + +3780 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [84] + /Pg 4806 0 R +>> +endobj + +3781 0 obj +<< + /Type /StructElem + /S /Formula + /P 3765 0 R + /K [79 80 81 82] + /Pg 4806 0 R +>> +endobj + +3782 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3812 0 R 3783 0 R] +>> +endobj + +3783 0 obj +<< + /Type /StructElem + /S /Div + /P 3782 0 R + /K [3810 0 R 3808 0 R 3806 0 R 3804 0 R 3802 0 R 3800 0 R 3798 0 R 3796 0 R 3794 0 R 3792 0 R 3790 0 R 3788 0 R 3786 0 R 3784 0 R] +>> +endobj + +3784 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3785 0 R] +>> +endobj + +3785 0 obj +<< + /Type /StructElem + /S /Formula + /P 3784 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [66 67 68 69 70 71 72 73 74 75 76 77] + /Pg 4806 0 R +>> +endobj + +3786 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3787 0 R] +>> +endobj + +3787 0 obj +<< + /Type /StructElem + /S /Formula + /P 3786 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [65] + /Pg 4806 0 R +>> +endobj + +3788 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3789 0 R] +>> +endobj + +3789 0 obj +<< + /Type /StructElem + /S /Formula + /P 3788 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [60 61 62 63 64] + /Pg 4806 0 R +>> +endobj + +3790 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3791 0 R] +>> +endobj + +3791 0 obj +<< + /Type /StructElem + /S /Formula + /P 3790 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [59] + /Pg 4806 0 R +>> +endobj + +3792 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3793 0 R] +>> +endobj + +3793 0 obj +<< + /Type /StructElem + /S /Formula + /P 3792 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [58] + /Pg 4806 0 R +>> +endobj + +3794 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3795 0 R] +>> +endobj + +3795 0 obj +<< + /Type /StructElem + /S /Formula + /P 3794 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [57] + /Pg 4806 0 R +>> +endobj + +3796 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3797 0 R] +>> +endobj + +3797 0 obj +<< + /Type /StructElem + /S /Formula + /P 3796 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [55 56] + /Pg 4806 0 R +>> +endobj + +3798 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3799 0 R] +>> +endobj + +3799 0 obj +<< + /Type /StructElem + /S /Formula + /P 3798 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [53 54] + /Pg 4806 0 R +>> +endobj + +3800 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3801 0 R] +>> +endobj + +3801 0 obj +<< + /Type /StructElem + /S /Formula + /P 3800 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [52] + /Pg 4806 0 R +>> +endobj + +3802 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3803 0 R] +>> +endobj + +3803 0 obj +<< + /Type /StructElem + /S /Formula + /P 3802 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [50 51] + /Pg 4806 0 R +>> +endobj + +3804 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3805 0 R] +>> +endobj + +3805 0 obj +<< + /Type /StructElem + /S /Formula + /P 3804 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [49] + /Pg 4806 0 R +>> +endobj + +3806 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3807 0 R] +>> +endobj + +3807 0 obj +<< + /Type /StructElem + /S /Formula + /P 3806 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [44 45 46 47 48] + /Pg 4806 0 R +>> +endobj + +3808 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3809 0 R] +>> +endobj + +3809 0 obj +<< + /Type /StructElem + /S /Formula + /P 3808 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43] + /Pg 4806 0 R +>> +endobj + +3810 0 obj +<< + /Type /StructElem + /S /Div + /P 3783 0 R + /K [3811 0 R] +>> +endobj + +3811 0 obj +<< + /Type /StructElem + /S /Formula + /P 3810 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [41 42] + /Pg 4806 0 R +>> +endobj + +3812 0 obj +<< + /Type /StructElem + /S /P + /P 3782 0 R + /K [3816 0 R 30 3815 0 R 33 3814 0 R 36 3813 0 R 40] + /Pg 4806 0 R +>> +endobj + +3813 0 obj +<< + /Type /StructElem + /S /Formula + /P 3812 0 R + /K [37 38 39] + /Pg 4806 0 R +>> +endobj + +3814 0 obj +<< + /Type /StructElem + /S /Formula + /P 3812 0 R + /K [34 35] + /Pg 4806 0 R +>> +endobj + +3815 0 obj +<< + /Type /StructElem + /S /Formula + /P 3812 0 R + /K [31 32] + /Pg 4806 0 R +>> +endobj + +3816 0 obj +<< + /Type /StructElem + /S /Strong + /P 3812 0 R + /K [27 28 29] + /Pg 4806 0 R +>> +endobj + +3817 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [20 3819 0 R 22 3818 0 R 25 26] + /Pg 4806 0 R +>> +endobj + +3818 0 obj +<< + /Type /StructElem + /S /Formula + /P 3817 0 R + /K [23 24] + /Pg 4806 0 R +>> +endobj + +3819 0 obj +<< + /Type /StructElem + /S /Formula + /P 3817 0 R + /K [21] + /Pg 4806 0 R +>> +endobj + +3820 0 obj +<< + /Type /StructElem + /S /Div + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [3835 0 R 3834 0 R 3832 0 R 3823 0 R 3821 0 R] +>> +endobj + +3821 0 obj +<< + /Type /StructElem + /S /P + /P 3820 0 R + /K [11 3822 0 R 19] + /Pg 4806 0 R +>> +endobj + +3822 0 obj +<< + /Type /StructElem + /S /Formula + /P 3821 0 R + /K [12 13 14 15 16 17 18] + /Pg 4806 0 R +>> +endobj + +3823 0 obj +<< + /Type /StructElem + /S /L + /P 3820 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3828 0 R 3824 0 R] +>> +endobj + +3824 0 obj +<< + /Type /StructElem + /S /LI + /P 3823 0 R + /K [3827 0 R 3825 0 R] +>> +endobj + +3825 0 obj +<< + /Type /StructElem + /S /LBody + /P 3824 0 R + /K [3826 0 R 10] + /Pg 4806 0 R +>> +endobj + +3826 0 obj +<< + /Type /StructElem + /S /Formula + /P 3825 0 R + /K [6 7 8 9] + /Pg 4806 0 R +>> +endobj + +3827 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3824 0 R + /K [5] + /Pg 4806 0 R +>> +endobj + +3828 0 obj +<< + /Type /StructElem + /S /LI + /P 3823 0 R + /K [3831 0 R 3829 0 R] +>> +endobj + +3829 0 obj +<< + /Type /StructElem + /S /LBody + /P 3828 0 R + /K [3830 0 R 4] + /Pg 4806 0 R +>> +endobj + +3830 0 obj +<< + /Type /StructElem + /S /Formula + /P 3829 0 R + /K [1 2 3] + /Pg 4806 0 R +>> +endobj + +3831 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3828 0 R + /K [0] + /Pg 4806 0 R +>> +endobj + +3832 0 obj +<< + /Type /StructElem + /S /P + /P 3820 0 R + /K [164 3833 0 R 170] + /Pg 4803 0 R +>> +endobj + +3833 0 obj +<< + /Type /StructElem + /S /Formula + /P 3832 0 R + /K [165 166 167 168 169] + /Pg 4803 0 R +>> +endobj + +3834 0 obj +<< + /Type /StructElem + /S /Formula + /P 3820 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [156 157 158 159 160 161 162 163] + /Pg 4803 0 R +>> +endobj + +3835 0 obj +<< + /Type /StructElem + /S /P + /P 3820 0 R + /K [3838 0 R 151 3837 0 R 153 3836 0 R 155] + /Pg 4803 0 R +>> +endobj + +3836 0 obj +<< + /Type /StructElem + /S /Em + /P 3835 0 R + /K [154] + /Pg 4803 0 R +>> +endobj + +3837 0 obj +<< + /Type /StructElem + /S /Formula + /P 3835 0 R + /K [152] + /Pg 4803 0 R +>> +endobj + +3838 0 obj +<< + /Type /StructElem + /S /Strong + /P 3835 0 R + /K [148 149 150] + /Pg 4803 0 R +>> +endobj + +3839 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [147] + /Pg 4803 0 R +>> +endobj + +3840 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [128 3845 0 R 130 131 132 133 3844 0 R 135 3843 0 R 138 3842 0 R 141 142 143 3841 0 R 145 146] + /Pg 4803 0 R +>> +endobj + +3841 0 obj +<< + /Type /StructElem + /S /Link + /P 3840 0 R + /K [144 << + /Type /OBJR + /Pg 4803 0 R + /Obj 4802 0 R + >>] + /Pg 4803 0 R +>> +endobj + +3842 0 obj +<< + /Type /StructElem + /S /Formula + /P 3840 0 R + /K [139 140] + /Pg 4803 0 R +>> +endobj + +3843 0 obj +<< + /Type /StructElem + /S /Formula + /P 3840 0 R + /K [136 137] + /Pg 4803 0 R +>> +endobj + +3844 0 obj +<< + /Type /StructElem + /S /Formula + /P 3840 0 R + /K [134] + /Pg 4803 0 R +>> +endobj + +3845 0 obj +<< + /Type /StructElem + /S /Formula + /P 3840 0 R + /K [129] + /Pg 4803 0 R +>> +endobj + +3846 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3859 0 R 3853 0 R 3847 0 R] +>> +endobj + +3847 0 obj +<< + /Type /StructElem + /S /LI + /P 3846 0 R + /K [3852 0 R 3848 0 R] +>> +endobj + +3848 0 obj +<< + /Type /StructElem + /S /LBody + /P 3847 0 R + /K [3851 0 R 113 3850 0 R 118 3849 0 R 125 126 127] + /Pg 4803 0 R +>> +endobj + +3849 0 obj +<< + /Type /StructElem + /S /Formula + /P 3848 0 R + /K [119 120 121 122 123 124] + /Pg 4803 0 R +>> +endobj + +3850 0 obj +<< + /Type /StructElem + /S /Formula + /P 3848 0 R + /K [114 115 116 117] + /Pg 4803 0 R +>> +endobj + +3851 0 obj +<< + /Type /StructElem + /S /Em + /P 3848 0 R + /K [112] + /Pg 4803 0 R +>> +endobj + +3852 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3847 0 R + /K [111] + /Pg 4803 0 R +>> +endobj + +3853 0 obj +<< + /Type /StructElem + /S /LI + /P 3846 0 R + /K [3858 0 R 3854 0 R] +>> +endobj + +3854 0 obj +<< + /Type /StructElem + /S /LBody + /P 3853 0 R + /K [3857 0 R 105 3856 0 R 108 3855 0 R 110] + /Pg 4803 0 R +>> +endobj + +3855 0 obj +<< + /Type /StructElem + /S /Formula + /P 3854 0 R + /K [109] + /Pg 4803 0 R +>> +endobj + +3856 0 obj +<< + /Type /StructElem + /S /Formula + /P 3854 0 R + /K [106 107] + /Pg 4803 0 R +>> +endobj + +3857 0 obj +<< + /Type /StructElem + /S /Em + /P 3854 0 R + /K [104] + /Pg 4803 0 R +>> +endobj + +3858 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3853 0 R + /K [103] + /Pg 4803 0 R +>> +endobj + +3859 0 obj +<< + /Type /StructElem + /S /LI + /P 3846 0 R + /K [3862 0 R 3860 0 R] +>> +endobj + +3860 0 obj +<< + /Type /StructElem + /S /LBody + /P 3859 0 R + /K [3861 0 R 102] + /Pg 4803 0 R +>> +endobj + +3861 0 obj +<< + /Type /StructElem + /S /Em + /P 3860 0 R + /K [101] + /Pg 4803 0 R +>> +endobj + +3862 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3859 0 R + /K [100] + /Pg 4803 0 R +>> +endobj + +3863 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [44 3873 0 R 51 3872 0 R 61 3871 0 R 63 64 3870 0 R 66 3869 0 R 70 3868 0 R 83 3867 0 R 85 86 3866 0 R 88 3865 0 R 96 97 3864 0 R 99] + /Pg 4803 0 R +>> +endobj + +3864 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [98] + /Pg 4803 0 R +>> +endobj + +3865 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [89 90 91 92 93 94 95] + /Pg 4803 0 R +>> +endobj + +3866 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [87] + /Pg 4803 0 R +>> +endobj + +3867 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [84] + /Pg 4803 0 R +>> +endobj + +3868 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [71 72 73 74 75 76 77 78 79 80 81 82] + /Pg 4803 0 R +>> +endobj + +3869 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [67 68 69] + /Pg 4803 0 R +>> +endobj + +3870 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [65] + /Pg 4803 0 R +>> +endobj + +3871 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [62] + /Pg 4803 0 R +>> +endobj + +3872 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [52 53 54 55 56 57 58 59 60] + /Pg 4803 0 R +>> +endobj + +3873 0 obj +<< + /Type /StructElem + /S /Formula + /P 3863 0 R + /K [45 46 47 48 49 50] + /Pg 4803 0 R +>> +endobj + +3874 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Effect Context) + /K [42 43] + /Pg 4803 0 R +>> +endobj + +3875 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3878 0 R 22 23 24 25 3877 0 R 35 36 37 38 3876 0 R 40 41] + /Pg 4803 0 R +>> +endobj + +3876 0 obj +<< + /Type /StructElem + /S /Em + /P 3875 0 R + /K [39] + /Pg 4803 0 R +>> +endobj + +3877 0 obj +<< + /Type /StructElem + /S /Formula + /P 3875 0 R + /K [26 27 28 29 30 31 32 33 34] + /Pg 4803 0 R +>> +endobj + +3878 0 obj +<< + /Type /StructElem + /S /Em + /P 3875 0 R + /K [21] + /Pg 4803 0 R +>> +endobj + +3879 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Revertible Effects) + /K [19 20] + /Pg 4803 0 R +>> +endobj + +3880 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2 3883 0 R 4 5 6 3882 0 R 8 9 3881 0 R 11 12 13 14 15 16 17 18] + /Pg 4803 0 R +>> +endobj + +3881 0 obj +<< + /Type /StructElem + /S /Em + /P 3880 0 R + /K [10] + /Pg 4803 0 R +>> +endobj + +3882 0 obj +<< + /Type /StructElem + /S /Em + /P 3880 0 R + /K [7] + /Pg 4803 0 R +>> +endobj + +3883 0 obj +<< + /Type /StructElem + /S /Link + /P 3880 0 R + /K [3 << + /Type /OBJR + /Pg 4803 0 R + /Obj 4801 0 R + >>] + /Pg 4803 0 R +>> +endobj + +3884 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Revertible Effects and Reactive Coeffects) + /K [0 1] + /Pg 4803 0 R +>> +endobj + +3885 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [167 168 169 170 171 3886 0 R 173] + /Pg 4799 0 R +>> +endobj + +3886 0 obj +<< + /Type /StructElem + /S /Link + /P 3885 0 R + /K [172 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4798 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3887 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [160 161 162 163 164 165 166] + /Pg 4799 0 R +>> +endobj + +3888 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [3893 0 R 3889 0 R] +>> +endobj + +3889 0 obj +<< + /Type /StructElem + /S /LI + /P 3888 0 R + /K [3892 0 R 3890 0 R] +>> +endobj + +3890 0 obj +<< + /Type /StructElem + /S /LBody + /P 3889 0 R + /K [3891 0 R 156 157 158 159] + /Pg 4799 0 R +>> +endobj + +3891 0 obj +<< + /Type /StructElem + /S /Strong + /P 3890 0 R + /K [155] + /Pg 4799 0 R +>> +endobj + +3892 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3889 0 R + /K [154] + /Pg 4799 0 R +>> +endobj + +3893 0 obj +<< + /Type /StructElem + /S /LI + /P 3888 0 R + /K [3896 0 R 3894 0 R] +>> +endobj + +3894 0 obj +<< + /Type /StructElem + /S /LBody + /P 3893 0 R + /K [3895 0 R 149 150 151 152 153] + /Pg 4799 0 R +>> +endobj + +3895 0 obj +<< + /Type /StructElem + /S /Strong + /P 3894 0 R + /K [148] + /Pg 4799 0 R +>> +endobj + +3896 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3893 0 R + /K [147] + /Pg 4799 0 R +>> +endobj + +3897 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [136 137 3900 0 R 139 140 3899 0 R 142 143 144 3898 0 R 146] + /Pg 4799 0 R +>> +endobj + +3898 0 obj +<< + /Type /StructElem + /S /Link + /P 3897 0 R + /K [145 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4797 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3899 0 obj +<< + /Type /StructElem + /S /Em + /P 3897 0 R + /K [141] + /Pg 4799 0 R +>> +endobj + +3900 0 obj +<< + /Type /StructElem + /S /Em + /P 3897 0 R + /K [138] + /Pg 4799 0 R +>> +endobj + +3901 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Relationship to Dynamic Composability) + /K [134 135] + /Pg 4799 0 R +>> +endobj + +3902 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3918 0 R 72 3917 0 R 74 75 3916 0 R 91 92 3915 0 R 94 95 96 97 3914 0 R 99 100 3913 0 R 102 103 3912 0 R 105 3911 0 R 107 3910 0 R 109 3909 0 R 111 112 3908 0 R 114 3907 0 R 116 117 118 3906 0 R 120 121 122 3905 0 R 124 3904 0 R 126 127 128 129 130 3903 0 R 132 133] + /Pg 4799 0 R +>> +endobj + +3903 0 obj +<< + /Type /StructElem + /S /Link + /P 3902 0 R + /K [131 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4796 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3904 0 obj +<< + /Type /StructElem + /S /Link + /P 3902 0 R + /K [125 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4795 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3905 0 obj +<< + /Type /StructElem + /S /Link + /P 3902 0 R + /K [123 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4794 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3906 0 obj +<< + /Type /StructElem + /S /Link + /P 3902 0 R + /K [119 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4793 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3907 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [115] + /Pg 4799 0 R +>> +endobj + +3908 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [113] + /Pg 4799 0 R +>> +endobj + +3909 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [110] + /Pg 4799 0 R +>> +endobj + +3910 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [108] + /Pg 4799 0 R +>> +endobj + +3911 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [106] + /Pg 4799 0 R +>> +endobj + +3912 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [104] + /Pg 4799 0 R +>> +endobj + +3913 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [101] + /Pg 4799 0 R +>> +endobj + +3914 0 obj +<< + /Type /StructElem + /S /Link + /P 3902 0 R + /K [98 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4792 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3915 0 obj +<< + /Type /StructElem + /S /Link + /P 3902 0 R + /K [93 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4791 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3916 0 obj +<< + /Type /StructElem + /S /Formula + /P 3902 0 R + /K [76 77 78 79 80 81 82 83 84 85 86 87 88 89 90] + /Pg 4799 0 R +>> +endobj + +3917 0 obj +<< + /Type /StructElem + /S /Em + /P 3902 0 R + /K [73] + /Pg 4799 0 R +>> +endobj + +3918 0 obj +<< + /Type /StructElem + /S /Strong + /P 3902 0 R + /K [71] + /Pg 4799 0 R +>> +endobj + +3919 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3928 0 R 3 4 5 3927 0 R 7 8 9 10 11 3926 0 R 13 14 15 3925 0 R 23 24 3924 0 R 33 34 35 3923 0 R 50 3922 0 R 59 3921 0 R 61 3920 0 R 70] + /Pg 4799 0 R +>> +endobj + +3920 0 obj +<< + /Type /StructElem + /S /Formula + /P 3919 0 R + /K [62 63 64 65 66 67 68 69] + /Pg 4799 0 R +>> +endobj + +3921 0 obj +<< + /Type /StructElem + /S /Formula + /P 3919 0 R + /K [60] + /Pg 4799 0 R +>> +endobj + +3922 0 obj +<< + /Type /StructElem + /S /Formula + /P 3919 0 R + /K [51 52 53 54 55 56 57 58] + /Pg 4799 0 R +>> +endobj + +3923 0 obj +<< + /Type /StructElem + /S /Formula + /P 3919 0 R + /K [36 37 38 39 40 41 42 43 44 45 46 47 48 49] + /Pg 4799 0 R +>> +endobj + +3924 0 obj +<< + /Type /StructElem + /S /Formula + /P 3919 0 R + /K [25 26 27 28 29 30 31 32] + /Pg 4799 0 R +>> +endobj + +3925 0 obj +<< + /Type /StructElem + /S /Formula + /P 3919 0 R + /K [16 17 18 19 20 21 22] + /Pg 4799 0 R +>> +endobj + +3926 0 obj +<< + /Type /StructElem + /S /Link + /P 3919 0 R + /K [12 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4790 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3927 0 obj +<< + /Type /StructElem + /S /Link + /P 3919 0 R + /K [6 << + /Type /OBJR + /Pg 4799 0 R + /Obj 4789 0 R + >>] + /Pg 4799 0 R +>> +endobj + +3928 0 obj +<< + /Type /StructElem + /S /Strong + /P 3919 0 R + /K [2] + /Pg 4799 0 R +>> +endobj + +3929 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [198 199 << + /Type /MCR + /MCID 0 + /Pg 4799 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4799 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3930 0 obj +<< + /Type /StructElem + /S /Formula + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [191 192 193 194 195 196 197] + /Pg 4787 0 R +>> +endobj + +3931 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [181 3934 0 R 183 184 3933 0 R 186 3932 0 R 188 189 190] + /Pg 4787 0 R +>> +endobj + +3932 0 obj +<< + /Type /StructElem + /S /Link + /P 3931 0 R + /K [187 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4786 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3933 0 obj +<< + /Type /StructElem + /S /Link + /P 3931 0 R + /K [185 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4785 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3934 0 obj +<< + /Type /StructElem + /S /Em + /P 3931 0 R + /K [182] + /Pg 4787 0 R +>> +endobj + +3935 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Coeffects) + /K [179 180] + /Pg 4787 0 R +>> +endobj + +3936 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [153 3943 0 R 155 3942 0 R 157 158 159 160 3941 0 R 162 163 164 3940 0 R 166 3939 0 R 168 169 170 3938 0 R 172 173 174 3937 0 R 176 177 178] + /Pg 4787 0 R +>> +endobj + +3937 0 obj +<< + /Type /StructElem + /S /Link + /P 3936 0 R + /K [175 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4784 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3938 0 obj +<< + /Type /StructElem + /S /Link + /P 3936 0 R + /K [171 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4783 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3939 0 obj +<< + /Type /StructElem + /S /Link + /P 3936 0 R + /K [167 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4782 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3940 0 obj +<< + /Type /StructElem + /S /Link + /P 3936 0 R + /K [165 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4781 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3941 0 obj +<< + /Type /StructElem + /S /Link + /P 3936 0 R + /K [161 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4780 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3942 0 obj +<< + /Type /StructElem + /S /Formula + /P 3936 0 R + /K [156] + /Pg 4787 0 R +>> +endobj + +3943 0 obj +<< + /Type /StructElem + /S /Formula + /P 3936 0 R + /K [154] + /Pg 4787 0 R +>> +endobj + +3944 0 obj +<< + /Type /StructElem + /S /Formula + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [139 140 141 142 143 144 145 146 147 148 149 150 151 152] + /Pg 4787 0 R +>> +endobj + +3945 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3953 0 R 104 105 3952 0 R 107 3951 0 R 109 110 111 112 113 3950 0 R 115 3949 0 R 122 3948 0 R 129 130 131 132 3947 0 R 134 135 3946 0 R 137 138] + /Pg 4787 0 R +>> +endobj + +3946 0 obj +<< + /Type /StructElem + /S /Em + /P 3945 0 R + /K [136] + /Pg 4787 0 R +>> +endobj + +3947 0 obj +<< + /Type /StructElem + /S /Link + /P 3945 0 R + /K [133 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4779 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3948 0 obj +<< + /Type /StructElem + /S /Formula + /P 3945 0 R + /K [123 124 125 126 127 128] + /Pg 4787 0 R +>> +endobj + +3949 0 obj +<< + /Type /StructElem + /S /Formula + /P 3945 0 R + /K [116 117 118 119 120 121] + /Pg 4787 0 R +>> +endobj + +3950 0 obj +<< + /Type /StructElem + /S /Formula + /P 3945 0 R + /K [114] + /Pg 4787 0 R +>> +endobj + +3951 0 obj +<< + /Type /StructElem + /S /Link + /P 3945 0 R + /K [108 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4778 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3952 0 obj +<< + /Type /StructElem + /S /Link + /P 3945 0 R + /K [106 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4777 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3953 0 obj +<< + /Type /StructElem + /S /Strong + /P 3945 0 R + /K [103] + /Pg 4787 0 R +>> +endobj + +3954 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [3962 0 R 50 51 3961 0 R 53 54 55 56 3960 0 R 58 59 3959 0 R 67 3958 0 R 69 70 71 3957 0 R 76 3956 0 R 85 86 3955 0 R 101 102] + /Pg 4787 0 R +>> +endobj + +3955 0 obj +<< + /Type /StructElem + /S /Formula + /P 3954 0 R + /K [87 88 89 90 91 92 93 94 95 96 97 98 99 100] + /Pg 4787 0 R +>> +endobj + +3956 0 obj +<< + /Type /StructElem + /S /Formula + /P 3954 0 R + /K [77 78 79 80 81 82 83 84] + /Pg 4787 0 R +>> +endobj + +3957 0 obj +<< + /Type /StructElem + /S /Formula + /P 3954 0 R + /K [72 73 74 75] + /Pg 4787 0 R +>> +endobj + +3958 0 obj +<< + /Type /StructElem + /S /Formula + /P 3954 0 R + /K [68] + /Pg 4787 0 R +>> +endobj + +3959 0 obj +<< + /Type /StructElem + /S /Formula + /P 3954 0 R + /K [60 61 62 63 64 65 66] + /Pg 4787 0 R +>> +endobj + +3960 0 obj +<< + /Type /StructElem + /S /Link + /P 3954 0 R + /K [57 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4776 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3961 0 obj +<< + /Type /StructElem + /S /Link + /P 3954 0 R + /K [52 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4775 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3962 0 obj +<< + /Type /StructElem + /S /Strong + /P 3954 0 R + /K [49] + /Pg 4787 0 R +>> +endobj + +3963 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [40 41 42 43 3964 0 R 45 46 47 48] + /Pg 4787 0 R +>> +endobj + +3964 0 obj +<< + /Type /StructElem + /S /Link + /P 3963 0 R + /K [44 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4774 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3965 0 obj +<< + /Type /StructElem + /S /Formula + /P 103 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [33 34 35 36 37 38 39] + /Pg 4787 0 R +>> +endobj + +3966 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [10 11 3973 0 R 13 3972 0 R 15 16 3971 0 R 22 23 3970 0 R 25 3969 0 R 27 3968 0 R 29 3967 0 R 31 32] + /Pg 4787 0 R +>> +endobj + +3967 0 obj +<< + /Type /StructElem + /S /Em + /P 3966 0 R + /K [30] + /Pg 4787 0 R +>> +endobj + +3968 0 obj +<< + /Type /StructElem + /S /Formula + /P 3966 0 R + /K [28] + /Pg 4787 0 R +>> +endobj + +3969 0 obj +<< + /Type /StructElem + /S /Formula + /P 3966 0 R + /K [26] + /Pg 4787 0 R +>> +endobj + +3970 0 obj +<< + /Type /StructElem + /S /Formula + /P 3966 0 R + /K [24] + /Pg 4787 0 R +>> +endobj + +3971 0 obj +<< + /Type /StructElem + /S /Formula + /P 3966 0 R + /K [17 18 19 20 21] + /Pg 4787 0 R +>> +endobj + +3972 0 obj +<< + /Type /StructElem + /S /Link + /P 3966 0 R + /K [14 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4773 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3973 0 obj +<< + /Type /StructElem + /S /Link + /P 3966 0 R + /K [12 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4772 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3974 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Effects) + /K [8 9] + /Pg 4787 0 R +>> +endobj + +3975 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2 3 4 3976 0 R 6 7] + /Pg 4787 0 R +>> +endobj + +3976 0 obj +<< + /Type /StructElem + /S /Link + /P 3975 0 R + /K [5 << + /Type /OBJR + /Pg 4787 0 R + /Obj 4771 0 R + >>] + /Pg 4787 0 R +>> +endobj + +3977 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Preliminaries) + /K [0 1] + /Pg 4787 0 R +>> +endobj + +3978 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Decimal + >>] + /K [3996 0 R 3991 0 R 3984 0 R 3979 0 R] +>> +endobj + +3979 0 obj +<< + /Type /StructElem + /S /LI + /P 3978 0 R + /K [3983 0 R 3980 0 R] +>> +endobj + +3980 0 obj +<< + /Type /StructElem + /S /LBody + /P 3979 0 R + /K [95 3982 0 R 97 3981 0 R 99 100 101 102 103 104] + /Pg 4769 0 R +>> +endobj + +3981 0 obj +<< + /Type /StructElem + /S /Link + /P 3980 0 R + /K [98 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4768 0 R + >>] + /Pg 4769 0 R +>> +endobj + +3982 0 obj +<< + /Type /StructElem + /S /Strong + /P 3980 0 R + /K [96] + /Pg 4769 0 R +>> +endobj + +3983 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3979 0 R + /K [94] + /Pg 4769 0 R +>> +endobj + +3984 0 obj +<< + /Type /StructElem + /S /LI + /P 3978 0 R + /K [3990 0 R 3985 0 R] +>> +endobj + +3985 0 obj +<< + /Type /StructElem + /S /LBody + /P 3984 0 R + /K [81 3989 0 R 83 3988 0 R 85 86 87 88 3987 0 R 90 3986 0 R 92 93] + /Pg 4769 0 R +>> +endobj + +3986 0 obj +<< + /Type /StructElem + /S /Link + /P 3985 0 R + /K [91 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4767 0 R + >>] + /Pg 4769 0 R +>> +endobj + +3987 0 obj +<< + /Type /StructElem + /S /Strong + /P 3985 0 R + /K [89] + /Pg 4769 0 R +>> +endobj + +3988 0 obj +<< + /Type /StructElem + /S /Link + /P 3985 0 R + /K [84 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4766 0 R + >>] + /Pg 4769 0 R +>> +endobj + +3989 0 obj +<< + /Type /StructElem + /S /Strong + /P 3985 0 R + /K [82] + /Pg 4769 0 R +>> +endobj + +3990 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3984 0 R + /K [80] + /Pg 4769 0 R +>> +endobj + +3991 0 obj +<< + /Type /StructElem + /S /LI + /P 3978 0 R + /K [3995 0 R 3992 0 R] +>> +endobj + +3992 0 obj +<< + /Type /StructElem + /S /LBody + /P 3991 0 R + /K [71 3994 0 R 73 3993 0 R 75 76 77 78 79] + /Pg 4769 0 R +>> +endobj + +3993 0 obj +<< + /Type /StructElem + /S /Link + /P 3992 0 R + /K [74 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4765 0 R + >>] + /Pg 4769 0 R +>> +endobj + +3994 0 obj +<< + /Type /StructElem + /S /Strong + /P 3992 0 R + /K [72] + /Pg 4769 0 R +>> +endobj + +3995 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3991 0 R + /K [70] + /Pg 4769 0 R +>> +endobj + +3996 0 obj +<< + /Type /StructElem + /S /LI + /P 3978 0 R + /K [4001 0 R 3997 0 R] +>> +endobj + +3997 0 obj +<< + /Type /StructElem + /S /LBody + /P 3996 0 R + /K [58 4000 0 R 60 3999 0 R 62 63 64 3998 0 R 66 67 68 69] + /Pg 4769 0 R +>> +endobj + +3998 0 obj +<< + /Type /StructElem + /S /Em + /P 3997 0 R + /K [65] + /Pg 4769 0 R +>> +endobj + +3999 0 obj +<< + /Type /StructElem + /S /Link + /P 3997 0 R + /K [61 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4764 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4000 0 obj +<< + /Type /StructElem + /S /Strong + /P 3997 0 R + /K [59] + /Pg 4769 0 R +>> +endobj + +4001 0 obj +<< + /Type /StructElem + /S /Lbl + /P 3996 0 R + /K [57] + /Pg 4769 0 R +>> +endobj + +4002 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [26 4010 0 R 28 29 4009 0 R 31 4008 0 R 34 35 4007 0 R 37 4006 0 R 39 40 4005 0 R 42 43 4004 0 R 45 4003 0 R 47 48 49 50 51 52 53 54 55 56] + /Pg 4769 0 R +>> +endobj + +4003 0 obj +<< + /Type /StructElem + /S /Link + /P 4002 0 R + /K [46 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4763 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4004 0 obj +<< + /Type /StructElem + /S /Link + /P 4002 0 R + /K [44 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4762 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4005 0 obj +<< + /Type /StructElem + /S /Em + /P 4002 0 R + /K [41] + /Pg 4769 0 R +>> +endobj + +4006 0 obj +<< + /Type /StructElem + /S /Link + /P 4002 0 R + /K [38 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4761 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4007 0 obj +<< + /Type /StructElem + /S /Link + /P 4002 0 R + /K [36 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4760 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4008 0 obj +<< + /Type /StructElem + /S /Em + /P 4002 0 R + /K [32 33] + /Pg 4769 0 R +>> +endobj + +4009 0 obj +<< + /Type /StructElem + /S /Em + /P 4002 0 R + /K [30] + /Pg 4769 0 R +>> +endobj + +4010 0 obj +<< + /Type /StructElem + /S /Em + /P 4002 0 R + /K [27] + /Pg 4769 0 R +>> +endobj + +4011 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Contributions) + /K [24 25] + /Pg 4769 0 R +>> +endobj + +4012 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [8 9 10 11 12 4013 0 R 14 15 16 17 18 19 20 21 22 23] + /Pg 4769 0 R +>> +endobj + +4013 0 obj +<< + /Type /StructElem + /S /Link + /P 4012 0 R + /K [13 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4759 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4014 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [88 89 90 91 << + /Type /MCR + /MCID 0 + /Pg 4769 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4769 0 R + >> 4015 0 R << + /Type /MCR + /MCID 3 + /Pg 4769 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4769 0 R + >> << + /Type /MCR + /MCID 5 + /Pg 4769 0 R + >> << + /Type /MCR + /MCID 6 + /Pg 4769 0 R + >> << + /Type /MCR + /MCID 7 + /Pg 4769 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4015 0 obj +<< + /Type /StructElem + /S /Link + /P 4014 0 R + /K [2 << + /Type /OBJR + /Pg 4769 0 R + /Obj 4758 0 R + >>] + /Pg 4769 0 R +>> +endobj + +4016 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (The Coarse-Grained Workaround) + /K [86 87] + /Pg 4756 0 R +>> +endobj + +4017 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [77 78 79 80 81 82 83 84 85] + /Pg 4756 0 R +>> +endobj + +4018 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [45 46 4024 0 R 48 4023 0 R 50 51 52 53 4022 0 R 55 56 57 58 4021 0 R 60 61 62 63 64 4020 0 R 66 67 68 69 70 71 72 4019 0 R 74 75 76] + /Pg 4756 0 R +>> +endobj + +4019 0 obj +<< + /Type /StructElem + /S /Link + /P 4018 0 R + /K [73 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4754 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4020 0 obj +<< + /Type /StructElem + /S /Link + /P 4018 0 R + /K [65 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4753 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4021 0 obj +<< + /Type /StructElem + /S /Link + /P 4018 0 R + /K [59 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4752 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4022 0 obj +<< + /Type /StructElem + /S /Link + /P 4018 0 R + /K [54 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4751 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4023 0 obj +<< + /Type /StructElem + /S /Link + /P 4018 0 R + /K [49 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4750 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4024 0 obj +<< + /Type /StructElem + /S /Link + /P 4018 0 R + /K [47 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4749 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4025 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Self-Evolving Agent Harnesses) + /K [43 44] + /Pg 4756 0 R +>> +endobj + +4026 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [36 37 4028 0 R 39 4027 0 R 41 42] + /Pg 4756 0 R +>> +endobj + +4027 0 obj +<< + /Type /StructElem + /S /Link + /P 4026 0 R + /K [40 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4748 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4028 0 obj +<< + /Type /StructElem + /S /Link + /P 4026 0 R + /K [38 << + /Type /OBJR + /Pg 4756 0 R + /Obj 4747 0 R + >>] + /Pg 4756 0 R +>> +endobj + +4029 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [4037 0 R 13 4036 0 R 15 16 17 18 4035 0 R 20 4032 0 R 22 23 24 25 26 27 28 4031 0 R 30 31 4030 0 R 33 34 35] + /Pg 4756 0 R +>> +endobj + +4030 0 obj +<< + /Type /StructElem + /S /Code + /P 4029 0 R + /K [32] + /Pg 4756 0 R +>> +endobj + +4031 0 obj +<< + /Type /StructElem + /S /Code + /P 4029 0 R + /K [29] + /Pg 4756 0 R +>> +endobj + +4032 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4029 0 R + /K [4033 0 R] +>> +endobj + +4033 0 obj +<< + /Type /StructElem + /S /Link + /P 4032 0 R + /K [<< + /Type /OBJR + /Pg 4756 0 R + /Obj 4746 0 R + >> 4034 0 R] +>> +endobj + +4034 0 obj +<< + /Type /StructElem + /S /Span + /P 4033 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [21] + /Pg 4756 0 R +>> +endobj + +4035 0 obj +<< + /Type /StructElem + /S /Code + /P 4029 0 R + /K [19] + /Pg 4756 0 R +>> +endobj + +4036 0 obj +<< + /Type /StructElem + /S /Code + /P 4029 0 R + /K [14] + /Pg 4756 0 R +>> +endobj + +4037 0 obj +<< + /Type /StructElem + /S /Strong + /P 4029 0 R + /K [12] + /Pg 4756 0 R +>> +endobj + +4038 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [4049 0 R 72 73 74 4048 0 R 76 77 78 << + /Type /MCR + /MCID 0 + /Pg 4756 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 4756 0 R + >> 4045 0 R 4041 0 R << + /Type /MCR + /MCID 3 + /Pg 4756 0 R + >> << + /Type /MCR + /MCID 4 + /Pg 4756 0 R + >> 4040 0 R << + /Type /MCR + /MCID 6 + /Pg 4756 0 R + >> << + /Type /MCR + /MCID 7 + /Pg 4756 0 R + >> << + /Type /MCR + /MCID 8 + /Pg 4756 0 R + >> 4039 0 R << + /Type /MCR + /MCID 10 + /Pg 4756 0 R + >> << + /Type /MCR + /MCID 11 + /Pg 4756 0 R + >>] + /Pg 4743 0 R +>> +endobj + +4039 0 obj +<< + /Type /StructElem + /S /Code + /P 4038 0 R + /K [9] + /Pg 4756 0 R +>> +endobj + +4040 0 obj +<< + /Type /StructElem + /S /Code + /P 4038 0 R + /K [5] + /Pg 4756 0 R +>> +endobj + +4041 0 obj +<< + /Type /StructElem + /S /Note + /P 4038 0 R + /ID (Note 1) + /K [4042 0 R 93] + /Pg 4756 0 R +>> +endobj + +4042 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4041 0 R + /K [4043 0 R] +>> +endobj + +4043 0 obj +<< + /Type /StructElem + /S /Link + /P 4042 0 R + /K [<< + /Type /OBJR + /Pg 4756 0 R + /Obj 4755 0 R + >> 4044 0 R] +>> +endobj + +4044 0 obj +<< + /Type /StructElem + /S /Span + /P 4043 0 R + /A [<< + /O /Layout + /BaselineShift 2.5866 + /LineHeight 3.24 + >>] + /K [92] + /Pg 4756 0 R +>> +endobj + +4045 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4038 0 R + /K [4046 0 R] +>> +endobj + +4046 0 obj +<< + /Type /StructElem + /S /Link + /P 4045 0 R + /K [<< + /Type /OBJR + /Pg 4756 0 R + /Obj 4745 0 R + >> 4047 0 R] +>> +endobj + +4047 0 obj +<< + /Type /StructElem + /S /Span + /P 4046 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [2] + /Pg 4756 0 R +>> +endobj + +4048 0 obj +<< + /Type /StructElem + /S /Code + /P 4038 0 R + /K [75] + /Pg 4743 0 R +>> +endobj + +4049 0 obj +<< + /Type /StructElem + /S /Strong + /P 4038 0 R + /K [71] + /Pg 4743 0 R +>> +endobj + +4050 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [69 70] + /Pg 4743 0 R +>> +endobj + +4051 0 obj +<< + /Type /StructElem + /S /H3 + /P 103 0 R + /T (Plugin Systems) + /K [67 68] + /Pg 4743 0 R +>> +endobj + +4052 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Motivating Examples) + /K [65 66] + /Pg 4743 0 R +>> +endobj + +4053 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [51 52 4055 0 R 54 55 56 57 4054 0 R 59 60 61 62 63 64] + /Pg 4743 0 R +>> +endobj + +4054 0 obj +<< + /Type /StructElem + /S /Link + /P 4053 0 R + /K [58 << + /Type /OBJR + /Pg 4743 0 R + /Obj 4742 0 R + >>] + /Pg 4743 0 R +>> +endobj + +4055 0 obj +<< + /Type /StructElem + /S /Link + /P 4053 0 R + /K [53 << + /Type /OBJR + /Pg 4743 0 R + /Obj 4741 0 R + >>] + /Pg 4743 0 R +>> +endobj + +4056 0 obj +<< + /Type /StructElem + /S /L + /P 103 0 R + /A [<< + /O /List + /ListNumbering /Circle + >>] + /K [4062 0 R 4057 0 R] +>> +endobj + +4057 0 obj +<< + /Type /StructElem + /S /LI + /P 4056 0 R + /K [4061 0 R 4058 0 R] +>> +endobj + +4058 0 obj +<< + /Type /StructElem + /S /LBody + /P 4057 0 R + /K [4060 0 R 44 4059 0 R 46 47 48 49 50] + /Pg 4743 0 R +>> +endobj + +4059 0 obj +<< + /Type /StructElem + /S /Em + /P 4058 0 R + /K [45] + /Pg 4743 0 R +>> +endobj + +4060 0 obj +<< + /Type /StructElem + /S /Strong + /P 4058 0 R + /K [43] + /Pg 4743 0 R +>> +endobj + +4061 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4057 0 R + /K [42] + /Pg 4743 0 R +>> +endobj + +4062 0 obj +<< + /Type /StructElem + /S /LI + /P 4056 0 R + /K [4066 0 R 4063 0 R] +>> +endobj + +4063 0 obj +<< + /Type /StructElem + /S /LBody + /P 4062 0 R + /K [4065 0 R 35 4064 0 R 37 38 39 40 41] + /Pg 4743 0 R +>> +endobj + +4064 0 obj +<< + /Type /StructElem + /S /Em + /P 4063 0 R + /K [36] + /Pg 4743 0 R +>> +endobj + +4065 0 obj +<< + /Type /StructElem + /S /Strong + /P 4063 0 R + /K [34] + /Pg 4743 0 R +>> +endobj + +4066 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4062 0 R + /K [33] + /Pg 4743 0 R +>> +endobj + +4067 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [30 31 32] + /Pg 4743 0 R +>> +endobj + +4068 0 obj +<< + /Type /StructElem + /S /H2 + /P 103 0 R + /T (Dimensions of Composability) + /K [28 29] + /Pg 4743 0 R +>> +endobj + +4069 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [2 3 4 4074 0 R 6 7 4073 0 R 9 10 11 4072 0 R 13 14 15 4071 0 R 17 18 19 20 21 4070 0 R 23 24 25 26 27] + /Pg 4743 0 R +>> +endobj + +4070 0 obj +<< + /Type /StructElem + /S /Link + /P 4069 0 R + /K [22 << + /Type /OBJR + /Pg 4743 0 R + /Obj 4740 0 R + >>] + /Pg 4743 0 R +>> +endobj + +4071 0 obj +<< + /Type /StructElem + /S /Link + /P 4069 0 R + /K [16 << + /Type /OBJR + /Pg 4743 0 R + /Obj 4739 0 R + >>] + /Pg 4743 0 R +>> +endobj + +4072 0 obj +<< + /Type /StructElem + /S /Em + /P 4069 0 R + /K [12] + /Pg 4743 0 R +>> +endobj + +4073 0 obj +<< + /Type /StructElem + /S /Em + /P 4069 0 R + /K [8] + /Pg 4743 0 R +>> +endobj + +4074 0 obj +<< + /Type /StructElem + /S /Link + /P 4069 0 R + /K [5 << + /Type /OBJR + /Pg 4743 0 R + /Obj 4738 0 R + >>] + /Pg 4743 0 R +>> +endobj + +4075 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Introduction) + /K [0 1] + /Pg 4743 0 R +>> +endobj + +4076 0 obj +<< + /Type /StructElem + /S /TOC + /P 103 0 R + /K [4285 0 R 4259 0 R 4255 0 R 4242 0 R 4238 0 R 4173 0 R 4169 0 R 4130 0 R 4126 0 R 4105 0 R 4101 0 R 4084 0 R 4080 0 R 4077 0 R] +>> +endobj + +4077 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4078 0 R] +>> +endobj + +4078 0 obj +<< + /Type /StructElem + /S /Reference + /P 4077 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4079 0 R] +>> +endobj + +4079 0 obj +<< + /Type /StructElem + /S /Link + /P 4078 0 R + /K [54 55 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4735 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4080 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4081 0 R] +>> +endobj + +4081 0 obj +<< + /Type /StructElem + /S /Reference + /P 4080 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4082 0 R] +>> +endobj + +4082 0 obj +<< + /Type /StructElem + /S /Link + /P 4081 0 R + /K [4083 0 R 52 53 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4734 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4083 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4082 0 R + /K [51] + /Pg 4736 0 R +>> +endobj + +4084 0 obj +<< + /Type /StructElem + /S /TOC + /P 4076 0 R + /K [4097 0 R 4093 0 R 4089 0 R 4085 0 R] +>> +endobj + +4085 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4084 0 R + /K [4086 0 R] +>> +endobj + +4086 0 obj +<< + /Type /StructElem + /S /Reference + /P 4085 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4087 0 R] +>> +endobj + +4087 0 obj +<< + /Type /StructElem + /S /Link + /P 4086 0 R + /K [4088 0 R 49 50 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4733 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4088 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4087 0 R + /K [48] + /Pg 4736 0 R +>> +endobj + +4089 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4084 0 R + /K [4090 0 R] +>> +endobj + +4090 0 obj +<< + /Type /StructElem + /S /Reference + /P 4089 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4091 0 R] +>> +endobj + +4091 0 obj +<< + /Type /StructElem + /S /Link + /P 4090 0 R + /K [4092 0 R 46 47 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4732 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4092 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4091 0 R + /K [45] + /Pg 4736 0 R +>> +endobj + +4093 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4084 0 R + /K [4094 0 R] +>> +endobj + +4094 0 obj +<< + /Type /StructElem + /S /Reference + /P 4093 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4095 0 R] +>> +endobj + +4095 0 obj +<< + /Type /StructElem + /S /Link + /P 4094 0 R + /K [4096 0 R 43 44 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4731 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4096 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4095 0 R + /K [42] + /Pg 4736 0 R +>> +endobj + +4097 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4084 0 R + /K [4098 0 R] +>> +endobj + +4098 0 obj +<< + /Type /StructElem + /S /Reference + /P 4097 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4099 0 R] +>> +endobj + +4099 0 obj +<< + /Type /StructElem + /S /Link + /P 4098 0 R + /K [4100 0 R 40 41 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4730 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4100 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4099 0 R + /K [39] + /Pg 4736 0 R +>> +endobj + +4101 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4102 0 R] +>> +endobj + +4102 0 obj +<< + /Type /StructElem + /S /Reference + /P 4101 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4103 0 R] +>> +endobj + +4103 0 obj +<< + /Type /StructElem + /S /Link + /P 4102 0 R + /K [4104 0 R 37 38 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4729 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4104 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4103 0 R + /K [36] + /Pg 4736 0 R +>> +endobj + +4105 0 obj +<< + /Type /StructElem + /S /TOC + /P 4076 0 R + /K [4122 0 R 4118 0 R 4114 0 R 4110 0 R 4106 0 R] +>> +endobj + +4106 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4105 0 R + /K [4107 0 R] +>> +endobj + +4107 0 obj +<< + /Type /StructElem + /S /Reference + /P 4106 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4108 0 R] +>> +endobj + +4108 0 obj +<< + /Type /StructElem + /S /Link + /P 4107 0 R + /K [4109 0 R 34 35 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4728 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4109 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4108 0 R + /K [33] + /Pg 4736 0 R +>> +endobj + +4110 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4105 0 R + /K [4111 0 R] +>> +endobj + +4111 0 obj +<< + /Type /StructElem + /S /Reference + /P 4110 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4112 0 R] +>> +endobj + +4112 0 obj +<< + /Type /StructElem + /S /Link + /P 4111 0 R + /K [4113 0 R 31 32 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4727 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4113 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4112 0 R + /K [30] + /Pg 4736 0 R +>> +endobj + +4114 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4105 0 R + /K [4115 0 R] +>> +endobj + +4115 0 obj +<< + /Type /StructElem + /S /Reference + /P 4114 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4116 0 R] +>> +endobj + +4116 0 obj +<< + /Type /StructElem + /S /Link + /P 4115 0 R + /K [4117 0 R 28 29 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4726 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4117 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4116 0 R + /K [27] + /Pg 4736 0 R +>> +endobj + +4118 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4105 0 R + /K [4119 0 R] +>> +endobj + +4119 0 obj +<< + /Type /StructElem + /S /Reference + /P 4118 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4120 0 R] +>> +endobj + +4120 0 obj +<< + /Type /StructElem + /S /Link + /P 4119 0 R + /K [4121 0 R 25 26 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4725 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4121 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4120 0 R + /K [24] + /Pg 4736 0 R +>> +endobj + +4122 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4105 0 R + /K [4123 0 R] +>> +endobj + +4123 0 obj +<< + /Type /StructElem + /S /Reference + /P 4122 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4124 0 R] +>> +endobj + +4124 0 obj +<< + /Type /StructElem + /S /Link + /P 4123 0 R + /K [4125 0 R 22 23 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4724 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4125 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4124 0 R + /K [21] + /Pg 4736 0 R +>> +endobj + +4126 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4127 0 R] +>> +endobj + +4127 0 obj +<< + /Type /StructElem + /S /Reference + /P 4126 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4128 0 R] +>> +endobj + +4128 0 obj +<< + /Type /StructElem + /S /Link + /P 4127 0 R + /K [4129 0 R 19 20 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4723 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4129 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4128 0 R + /K [18] + /Pg 4736 0 R +>> +endobj + +4130 0 obj +<< + /Type /StructElem + /S /TOC + /P 4076 0 R + /K [4165 0 R 4148 0 R 4144 0 R 4135 0 R 4131 0 R] +>> +endobj + +4131 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4130 0 R + /K [4132 0 R] +>> +endobj + +4132 0 obj +<< + /Type /StructElem + /S /Reference + /P 4131 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4133 0 R] +>> +endobj + +4133 0 obj +<< + /Type /StructElem + /S /Link + /P 4132 0 R + /K [4134 0 R 16 17 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4722 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4134 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4133 0 R + /K [15] + /Pg 4736 0 R +>> +endobj + +4135 0 obj +<< + /Type /StructElem + /S /TOC + /P 4130 0 R + /K [4140 0 R 4136 0 R] +>> +endobj + +4136 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4135 0 R + /K [4137 0 R] +>> +endobj + +4137 0 obj +<< + /Type /StructElem + /S /Reference + /P 4136 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4138 0 R] +>> +endobj + +4138 0 obj +<< + /Type /StructElem + /S /Link + /P 4137 0 R + /K [4139 0 R 13 14 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4721 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4139 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4138 0 R + /K [12] + /Pg 4736 0 R +>> +endobj + +4140 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4135 0 R + /K [4141 0 R] +>> +endobj + +4141 0 obj +<< + /Type /StructElem + /S /Reference + /P 4140 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4142 0 R] +>> +endobj + +4142 0 obj +<< + /Type /StructElem + /S /Link + /P 4141 0 R + /K [4143 0 R 10 11 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4720 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4143 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4142 0 R + /K [9] + /Pg 4736 0 R +>> +endobj + +4144 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4130 0 R + /K [4145 0 R] +>> +endobj + +4145 0 obj +<< + /Type /StructElem + /S /Reference + /P 4144 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4146 0 R] +>> +endobj + +4146 0 obj +<< + /Type /StructElem + /S /Link + /P 4145 0 R + /K [4147 0 R 7 8 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4719 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4147 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4146 0 R + /K [6] + /Pg 4736 0 R +>> +endobj + +4148 0 obj +<< + /Type /StructElem + /S /TOC + /P 4130 0 R + /K [4161 0 R 4157 0 R 4153 0 R 4149 0 R] +>> +endobj + +4149 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4148 0 R + /K [4150 0 R] +>> +endobj + +4150 0 obj +<< + /Type /StructElem + /S /Reference + /P 4149 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4151 0 R] +>> +endobj + +4151 0 obj +<< + /Type /StructElem + /S /Link + /P 4150 0 R + /K [4152 0 R 4 5 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4718 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4152 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4151 0 R + /K [3] + /Pg 4736 0 R +>> +endobj + +4153 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4148 0 R + /K [4154 0 R] +>> +endobj + +4154 0 obj +<< + /Type /StructElem + /S /Reference + /P 4153 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4155 0 R] +>> +endobj + +4155 0 obj +<< + /Type /StructElem + /S /Link + /P 4154 0 R + /K [<< + /Type /OBJR + /Pg 4715 0 R + /Obj 4714 0 R + >> 4156 0 R 1 2 << + /Type /OBJR + /Pg 4736 0 R + /Obj 4717 0 R + >>] + /Pg 4736 0 R +>> +endobj + +4156 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4155 0 R + /K [0] + /Pg 4736 0 R +>> +endobj + +4157 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4148 0 R + /K [4158 0 R] +>> +endobj + +4158 0 obj +<< + /Type /StructElem + /S /Reference + /P 4157 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4159 0 R] +>> +endobj + +4159 0 obj +<< + /Type /StructElem + /S /Link + /P 4158 0 R + /K [4160 0 R 92 93 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4713 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4160 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4159 0 R + /K [91] + /Pg 4715 0 R +>> +endobj + +4161 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4148 0 R + /K [4162 0 R] +>> +endobj + +4162 0 obj +<< + /Type /StructElem + /S /Reference + /P 4161 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4163 0 R] +>> +endobj + +4163 0 obj +<< + /Type /StructElem + /S /Link + /P 4162 0 R + /K [4164 0 R 89 90 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4712 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4164 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4163 0 R + /K [88] + /Pg 4715 0 R +>> +endobj + +4165 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4130 0 R + /K [4166 0 R] +>> +endobj + +4166 0 obj +<< + /Type /StructElem + /S /Reference + /P 4165 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4167 0 R] +>> +endobj + +4167 0 obj +<< + /Type /StructElem + /S /Link + /P 4166 0 R + /K [4168 0 R 86 87 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4711 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4168 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4167 0 R + /K [85] + /Pg 4715 0 R +>> +endobj + +4169 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4170 0 R] +>> +endobj + +4170 0 obj +<< + /Type /StructElem + /S /Reference + /P 4169 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4171 0 R] +>> +endobj + +4171 0 obj +<< + /Type /StructElem + /S /Link + /P 4170 0 R + /K [4172 0 R 83 84 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4710 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4172 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4171 0 R + /K [82] + /Pg 4715 0 R +>> +endobj + +4173 0 obj +<< + /Type /StructElem + /S /TOC + /P 4076 0 R + /K [4234 0 R 4225 0 R 4221 0 R 4208 0 R 4204 0 R 4187 0 R 4183 0 R 4174 0 R] +>> +endobj + +4174 0 obj +<< + /Type /StructElem + /S /TOC + /P 4173 0 R + /K [4179 0 R 4175 0 R] +>> +endobj + +4175 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4174 0 R + /K [4176 0 R] +>> +endobj + +4176 0 obj +<< + /Type /StructElem + /S /Reference + /P 4175 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4177 0 R] +>> +endobj + +4177 0 obj +<< + /Type /StructElem + /S /Link + /P 4176 0 R + /K [4178 0 R 80 81 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4709 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4178 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4177 0 R + /K [79] + /Pg 4715 0 R +>> +endobj + +4179 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4174 0 R + /K [4180 0 R] +>> +endobj + +4180 0 obj +<< + /Type /StructElem + /S /Reference + /P 4179 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4181 0 R] +>> +endobj + +4181 0 obj +<< + /Type /StructElem + /S /Link + /P 4180 0 R + /K [4182 0 R 77 78 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4708 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4182 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4181 0 R + /K [76] + /Pg 4715 0 R +>> +endobj + +4183 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4173 0 R + /K [4184 0 R] +>> +endobj + +4184 0 obj +<< + /Type /StructElem + /S /Reference + /P 4183 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4185 0 R] +>> +endobj + +4185 0 obj +<< + /Type /StructElem + /S /Link + /P 4184 0 R + /K [4186 0 R 74 75 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4707 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4186 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4185 0 R + /K [73] + /Pg 4715 0 R +>> +endobj + +4187 0 obj +<< + /Type /StructElem + /S /TOC + /P 4173 0 R + /K [4200 0 R 4196 0 R 4192 0 R 4188 0 R] +>> +endobj + +4188 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4187 0 R + /K [4189 0 R] +>> +endobj + +4189 0 obj +<< + /Type /StructElem + /S /Reference + /P 4188 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4190 0 R] +>> +endobj + +4190 0 obj +<< + /Type /StructElem + /S /Link + /P 4189 0 R + /K [4191 0 R 71 72 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4706 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4191 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4190 0 R + /K [70] + /Pg 4715 0 R +>> +endobj + +4192 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4187 0 R + /K [4193 0 R] +>> +endobj + +4193 0 obj +<< + /Type /StructElem + /S /Reference + /P 4192 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4194 0 R] +>> +endobj + +4194 0 obj +<< + /Type /StructElem + /S /Link + /P 4193 0 R + /K [4195 0 R 68 69 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4705 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4195 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4194 0 R + /K [67] + /Pg 4715 0 R +>> +endobj + +4196 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4187 0 R + /K [4197 0 R] +>> +endobj + +4197 0 obj +<< + /Type /StructElem + /S /Reference + /P 4196 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4198 0 R] +>> +endobj + +4198 0 obj +<< + /Type /StructElem + /S /Link + /P 4197 0 R + /K [4199 0 R 65 66 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4704 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4199 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4198 0 R + /K [64] + /Pg 4715 0 R +>> +endobj + +4200 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4187 0 R + /K [4201 0 R] +>> +endobj + +4201 0 obj +<< + /Type /StructElem + /S /Reference + /P 4200 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4202 0 R] +>> +endobj + +4202 0 obj +<< + /Type /StructElem + /S /Link + /P 4201 0 R + /K [4203 0 R 62 63 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4703 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4203 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4202 0 R + /K [61] + /Pg 4715 0 R +>> +endobj + +4204 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4173 0 R + /K [4205 0 R] +>> +endobj + +4205 0 obj +<< + /Type /StructElem + /S /Reference + /P 4204 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4206 0 R] +>> +endobj + +4206 0 obj +<< + /Type /StructElem + /S /Link + /P 4205 0 R + /K [4207 0 R 59 60 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4702 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4207 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4206 0 R + /K [58] + /Pg 4715 0 R +>> +endobj + +4208 0 obj +<< + /Type /StructElem + /S /TOC + /P 4173 0 R + /K [4217 0 R 4213 0 R 4209 0 R] +>> +endobj + +4209 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4208 0 R + /K [4210 0 R] +>> +endobj + +4210 0 obj +<< + /Type /StructElem + /S /Reference + /P 4209 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4211 0 R] +>> +endobj + +4211 0 obj +<< + /Type /StructElem + /S /Link + /P 4210 0 R + /K [4212 0 R 56 57 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4701 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4212 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4211 0 R + /K [55] + /Pg 4715 0 R +>> +endobj + +4213 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4208 0 R + /K [4214 0 R] +>> +endobj + +4214 0 obj +<< + /Type /StructElem + /S /Reference + /P 4213 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4215 0 R] +>> +endobj + +4215 0 obj +<< + /Type /StructElem + /S /Link + /P 4214 0 R + /K [4216 0 R 53 54 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4700 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4216 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4215 0 R + /K [52] + /Pg 4715 0 R +>> +endobj + +4217 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4208 0 R + /K [4218 0 R] +>> +endobj + +4218 0 obj +<< + /Type /StructElem + /S /Reference + /P 4217 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4219 0 R] +>> +endobj + +4219 0 obj +<< + /Type /StructElem + /S /Link + /P 4218 0 R + /K [4220 0 R 50 51 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4699 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4220 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4219 0 R + /K [49] + /Pg 4715 0 R +>> +endobj + +4221 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4173 0 R + /K [4222 0 R] +>> +endobj + +4222 0 obj +<< + /Type /StructElem + /S /Reference + /P 4221 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4223 0 R] +>> +endobj + +4223 0 obj +<< + /Type /StructElem + /S /Link + /P 4222 0 R + /K [4224 0 R 47 48 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4698 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4224 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4223 0 R + /K [46] + /Pg 4715 0 R +>> +endobj + +4225 0 obj +<< + /Type /StructElem + /S /TOC + /P 4173 0 R + /K [4230 0 R 4226 0 R] +>> +endobj + +4226 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4225 0 R + /K [4227 0 R] +>> +endobj + +4227 0 obj +<< + /Type /StructElem + /S /Reference + /P 4226 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4228 0 R] +>> +endobj + +4228 0 obj +<< + /Type /StructElem + /S /Link + /P 4227 0 R + /K [4229 0 R 44 45 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4697 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4229 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4228 0 R + /K [43] + /Pg 4715 0 R +>> +endobj + +4230 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4225 0 R + /K [4231 0 R] +>> +endobj + +4231 0 obj +<< + /Type /StructElem + /S /Reference + /P 4230 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4232 0 R] +>> +endobj + +4232 0 obj +<< + /Type /StructElem + /S /Link + /P 4231 0 R + /K [4233 0 R 41 42 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4696 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4233 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4232 0 R + /K [40] + /Pg 4715 0 R +>> +endobj + +4234 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4173 0 R + /K [4235 0 R] +>> +endobj + +4235 0 obj +<< + /Type /StructElem + /S /Reference + /P 4234 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4236 0 R] +>> +endobj + +4236 0 obj +<< + /Type /StructElem + /S /Link + /P 4235 0 R + /K [4237 0 R 38 39 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4695 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4237 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4236 0 R + /K [37] + /Pg 4715 0 R +>> +endobj + +4238 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4239 0 R] +>> +endobj + +4239 0 obj +<< + /Type /StructElem + /S /Reference + /P 4238 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4240 0 R] +>> +endobj + +4240 0 obj +<< + /Type /StructElem + /S /Link + /P 4239 0 R + /K [4241 0 R 35 36 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4694 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4241 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4240 0 R + /K [34] + /Pg 4715 0 R +>> +endobj + +4242 0 obj +<< + /Type /StructElem + /S /TOC + /P 4076 0 R + /K [4251 0 R 4247 0 R 4243 0 R] +>> +endobj + +4243 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4242 0 R + /K [4244 0 R] +>> +endobj + +4244 0 obj +<< + /Type /StructElem + /S /Reference + /P 4243 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4245 0 R] +>> +endobj + +4245 0 obj +<< + /Type /StructElem + /S /Link + /P 4244 0 R + /K [4246 0 R 32 33 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4693 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4246 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4245 0 R + /K [31] + /Pg 4715 0 R +>> +endobj + +4247 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4242 0 R + /K [4248 0 R] +>> +endobj + +4248 0 obj +<< + /Type /StructElem + /S /Reference + /P 4247 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4249 0 R] +>> +endobj + +4249 0 obj +<< + /Type /StructElem + /S /Link + /P 4248 0 R + /K [4250 0 R 29 30 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4692 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4250 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4249 0 R + /K [28] + /Pg 4715 0 R +>> +endobj + +4251 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4242 0 R + /K [4252 0 R] +>> +endobj + +4252 0 obj +<< + /Type /StructElem + /S /Reference + /P 4251 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4253 0 R] +>> +endobj + +4253 0 obj +<< + /Type /StructElem + /S /Link + /P 4252 0 R + /K [4254 0 R 26 27 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4691 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4254 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4253 0 R + /K [25] + /Pg 4715 0 R +>> +endobj + +4255 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4256 0 R] +>> +endobj + +4256 0 obj +<< + /Type /StructElem + /S /Reference + /P 4255 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4257 0 R] +>> +endobj + +4257 0 obj +<< + /Type /StructElem + /S /Link + /P 4256 0 R + /K [4258 0 R 23 24 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4690 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4258 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4257 0 R + /K [22] + /Pg 4715 0 R +>> +endobj + +4259 0 obj +<< + /Type /StructElem + /S /TOC + /P 4076 0 R + /K [4281 0 R 4277 0 R 4264 0 R 4260 0 R] +>> +endobj + +4260 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4259 0 R + /K [4261 0 R] +>> +endobj + +4261 0 obj +<< + /Type /StructElem + /S /Reference + /P 4260 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4262 0 R] +>> +endobj + +4262 0 obj +<< + /Type /StructElem + /S /Link + /P 4261 0 R + /K [4263 0 R 20 21 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4689 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4263 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4262 0 R + /K [19] + /Pg 4715 0 R +>> +endobj + +4264 0 obj +<< + /Type /StructElem + /S /TOC + /P 4259 0 R + /K [4273 0 R 4269 0 R 4265 0 R] +>> +endobj + +4265 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4264 0 R + /K [4266 0 R] +>> +endobj + +4266 0 obj +<< + /Type /StructElem + /S /Reference + /P 4265 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4267 0 R] +>> +endobj + +4267 0 obj +<< + /Type /StructElem + /S /Link + /P 4266 0 R + /K [4268 0 R 17 18 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4688 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4268 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4267 0 R + /K [16] + /Pg 4715 0 R +>> +endobj + +4269 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4264 0 R + /K [4270 0 R] +>> +endobj + +4270 0 obj +<< + /Type /StructElem + /S /Reference + /P 4269 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4271 0 R] +>> +endobj + +4271 0 obj +<< + /Type /StructElem + /S /Link + /P 4270 0 R + /K [4272 0 R 14 15 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4687 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4272 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4271 0 R + /K [13] + /Pg 4715 0 R +>> +endobj + +4273 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4264 0 R + /K [4274 0 R] +>> +endobj + +4274 0 obj +<< + /Type /StructElem + /S /Reference + /P 4273 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4275 0 R] +>> +endobj + +4275 0 obj +<< + /Type /StructElem + /S /Link + /P 4274 0 R + /K [4276 0 R 11 12 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4686 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4276 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4275 0 R + /K [10] + /Pg 4715 0 R +>> +endobj + +4277 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4259 0 R + /K [4278 0 R] +>> +endobj + +4278 0 obj +<< + /Type /StructElem + /S /Reference + /P 4277 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4279 0 R] +>> +endobj + +4279 0 obj +<< + /Type /StructElem + /S /Link + /P 4278 0 R + /K [4280 0 R 8 9 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4685 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4280 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4279 0 R + /K [7] + /Pg 4715 0 R +>> +endobj + +4281 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4259 0 R + /K [4282 0 R] +>> +endobj + +4282 0 obj +<< + /Type /StructElem + /S /Reference + /P 4281 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4283 0 R] +>> +endobj + +4283 0 obj +<< + /Type /StructElem + /S /Link + /P 4282 0 R + /K [4284 0 R 5 6 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4684 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4284 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4283 0 R + /K [4] + /Pg 4715 0 R +>> +endobj + +4285 0 obj +<< + /Type /StructElem + /S /TOCI + /P 4076 0 R + /K [4286 0 R] +>> +endobj + +4286 0 obj +<< + /Type /StructElem + /S /Reference + /P 4285 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [4287 0 R] +>> +endobj + +4287 0 obj +<< + /Type /StructElem + /S /Link + /P 4286 0 R + /K [4288 0 R 2 3 << + /Type /OBJR + /Pg 4715 0 R + /Obj 4683 0 R + >>] + /Pg 4715 0 R +>> +endobj + +4288 0 obj +<< + /Type /StructElem + /S /Lbl + /P 4287 0 R + /K [1] + /Pg 4715 0 R +>> +endobj + +4289 0 obj +<< + /Type /StructElem + /S /H1 + /P 103 0 R + /T (Contents) + /K [0] + /Pg 4715 0 R +>> +endobj + +4290 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [12 13 4296 0 R 15 16 4295 0 R 18 19 4294 0 R 21 22 23 4293 0 R 25 26 27 4292 0 R 29 30 31 32 33 34 35 4291 0 R 37 38 39] + /Pg 4681 0 R +>> +endobj + +4291 0 obj +<< + /Type /StructElem + /S /Em + /P 4290 0 R + /K [36] + /Pg 4681 0 R +>> +endobj + +4292 0 obj +<< + /Type /StructElem + /S /Em + /P 4290 0 R + /K [28] + /Pg 4681 0 R +>> +endobj + +4293 0 obj +<< + /Type /StructElem + /S /Em + /P 4290 0 R + /K [24] + /Pg 4681 0 R +>> +endobj + +4294 0 obj +<< + /Type /StructElem + /S /Em + /P 4290 0 R + /K [20] + /Pg 4681 0 R +>> +endobj + +4295 0 obj +<< + /Type /StructElem + /S /Em + /P 4290 0 R + /K [17] + /Pg 4681 0 R +>> +endobj + +4296 0 obj +<< + /Type /StructElem + /S /Em + /P 4290 0 R + /K [14] + /Pg 4681 0 R +>> +endobj + +4297 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [11] + /Pg 4681 0 R +>> +endobj + +4298 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [4300 0 R 8 4299 0 R 10] + /Pg 4681 0 R +>> +endobj + +4299 0 obj +<< + /Type /StructElem + /S /Span + /P 4298 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [9] + /Pg 4681 0 R +>> +endobj + +4300 0 obj +<< + /Type /StructElem + /S /Span + /P 4298 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [7] + /Pg 4681 0 R +>> +endobj + +4301 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [1 4304 0 R 3 4303 0 R 5 4302 0 R] + /Pg 4681 0 R +>> +endobj + +4302 0 obj +<< + /Type /StructElem + /S /Span + /P 4301 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [6] + /Pg 4681 0 R +>> +endobj + +4303 0 obj +<< + /Type /StructElem + /S /Span + /P 4301 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [4] + /Pg 4681 0 R +>> +endobj + +4304 0 obj +<< + /Type /StructElem + /S /Span + /P 4301 0 R + /A [<< + /O /Layout + /BaselineShift 3.1614 + /LineHeight 3.96 + >>] + /K [2] + /Pg 4681 0 R +>> +endobj + +4305 0 obj +<< + /Type /StructElem + /S /P + /P 103 0 R + /K [0] + /Pg 4681 0 R +>> +endobj + +4306 0 obj +<< + /Type /PageLabel + /S /D + /St 1 +>> +endobj + +4307 0 obj +<< + /Type /PageLabel + /S /D + /St 2 +>> +endobj + +4308 0 obj +<< + /Type /PageLabel + /S /D + /St 3 +>> +endobj + +4309 0 obj +<< + /Type /PageLabel + /S /D + /St 4 +>> +endobj + +4310 0 obj +<< + /Type /PageLabel + /S /D + /St 5 +>> +endobj + +4311 0 obj +<< + /Type /PageLabel + /S /D + /St 6 +>> +endobj + +4312 0 obj +<< + /Type /PageLabel + /S /D + /St 7 +>> +endobj + +4313 0 obj +<< + /Type /PageLabel + /S /D + /St 8 +>> +endobj + +4314 0 obj +<< + /Type /PageLabel + /S /D + /St 9 +>> +endobj + +4315 0 obj +<< + /Type /PageLabel + /S /D + /St 10 +>> +endobj + +4316 0 obj +<< + /Type /PageLabel + /S /D + /St 11 +>> +endobj + +4317 0 obj +<< + /Type /PageLabel + /S /D + /St 12 +>> +endobj + +4318 0 obj +<< + /Type /PageLabel + /S /D + /St 13 +>> +endobj + +4319 0 obj +<< + /Type /PageLabel + /S /D + /St 14 +>> +endobj + +4320 0 obj +<< + /Type /PageLabel + /S /D + /St 15 +>> +endobj + +4321 0 obj +<< + /Type /PageLabel + /S /D + /St 16 +>> +endobj + +4322 0 obj +<< + /Type /PageLabel + /S /D + /St 17 +>> +endobj + +4323 0 obj +<< + /Type /PageLabel + /S /D + /St 18 +>> +endobj + +4324 0 obj +<< + /Type /PageLabel + /S /D + /St 19 +>> +endobj + +4325 0 obj +<< + /Type /PageLabel + /S /D + /St 20 +>> +endobj + +4326 0 obj +<< + /Type /PageLabel + /S /D + /St 21 +>> +endobj + +4327 0 obj +<< + /Type /PageLabel + /S /D + /St 22 +>> +endobj + +4328 0 obj +<< + /Type /PageLabel + /S /D + /St 23 +>> +endobj + +4329 0 obj +<< + /Type /PageLabel + /S /D + /St 24 +>> +endobj + +4330 0 obj +<< + /Type /PageLabel + /S /D + /St 25 +>> +endobj + +4331 0 obj +<< + /Type /PageLabel + /S /D + /St 26 +>> +endobj + +4332 0 obj +<< + /Type /PageLabel + /S /D + /St 27 +>> +endobj + +4333 0 obj +<< + /Type /PageLabel + /S /D + /St 28 +>> +endobj + +4334 0 obj +<< + /Type /PageLabel + /S /D + /St 29 +>> +endobj + +4335 0 obj +<< + /Type /PageLabel + /S /D + /St 30 +>> +endobj + +4336 0 obj +<< + /Type /PageLabel + /S /D + /St 31 +>> +endobj + +4337 0 obj +<< + /Type /PageLabel + /S /D + /St 32 +>> +endobj + +4338 0 obj +<< + /Type /PageLabel + /S /D + /St 33 +>> +endobj + +4339 0 obj +<< + /Type /PageLabel + /S /D + /St 34 +>> +endobj + +4340 0 obj +<< + /Type /PageLabel + /S /D + /St 35 +>> +endobj + +4341 0 obj +<< + /Type /PageLabel + /S /D + /St 36 +>> +endobj + +4342 0 obj +<< + /Type /PageLabel + /S /D + /St 37 +>> +endobj + +4343 0 obj +<< + /Type /PageLabel + /S /D + /St 38 +>> +endobj + +4344 0 obj +<< + /Type /PageLabel + /S /D + /St 39 +>> +endobj + +4345 0 obj +<< + /Type /PageLabel + /S /D + /St 40 +>> +endobj + +4346 0 obj +<< + /Type /PageLabel + /S /D + /St 41 +>> +endobj + +4347 0 obj +<< + /Type /PageLabel + /S /D + /St 42 +>> +endobj + +4348 0 obj +<< + /Type /PageLabel + /S /D + /St 43 +>> +endobj + +4349 0 obj +<< + /Type /PageLabel + /S /D + /St 44 +>> +endobj + +4350 0 obj +<< + /Type /PageLabel + /S /D + /St 45 +>> +endobj + +4351 0 obj +<< + /Type /PageLabel + /S /D + /St 46 +>> +endobj + +4352 0 obj +<< + /Type /PageLabel + /S /D + /St 47 +>> +endobj + +4353 0 obj +<< + /Type /PageLabel + /S /D + /St 48 +>> +endobj + +4354 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /PGOLQH+TeXGyrePagella-Bold-Identity-H + /Encoding /Identity-H + /DescendantFonts [4355 0 R] + /ToUnicode 4358 0 R +>> +endobj + +4355 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /PGOLQH+TeXGyrePagella-Bold + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4357 0 R + /DW 0 + /W [0 0 500 1 1 778 2 2 250 3 3 611 4 4 389 5 6 556 7 7 500 8 8 889 9 9 333 10 11 611 12 12 389 13 14 611 15 15 333 16 16 500 17 17 333 18 18 722 19 19 444 20 20 611 21 21 556 22 22 500 23 23 611 24 24 778 25 25 556 26 26 500 27 27 833 28 28 333 29 29 389 30 30 444 31 31 250 32 32 611 33 35 500 36 36 722 37 37 611 38 38 709 39 41 500 42 42 1000 43 43 667 44 44 1000 45 45 500 46 46 833 47 48 611 49 50 500 51 51 611 52 52 833 53 53 500 54 55 490 56 56 510.99997 57 57 833 58 58 250 59 59 833 60 60 250 61 62 778] +>> +endobj + +4356 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x # +endstream +endobj + +4357 0 obj +<< + /Type /FontDescriptor + /FontName /PGOLQH+TeXGyrePagella-Bold + /Flags 131076 + /FontBBox [10 -266 988 747] + /ItalicAngle 0 + /Ascent 720 + /Descent -258 + /CapHeight 681 + /StemV 168.6 + /CIDSet 4356 0 R + /FontFile3 4359 0 R +>> +endobj + +4358 0 obj +<< + /Length 1482 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +62 beginbfchar +<0001> <0041> +<0002> <0020> +<0003> <0050> +<0004> <0072> +<0005> <006F> +<0006> <0067> +<0007> <0061> +<0008> <006D> +<0009> <0069> +<000A> <006E> +<000B> <0064> +<000C> <0066> +<000D> <0053> +<000E> <0070> +<000F> <0074> +<0010> <0065> +<0011> <006C> +<0012> <0043> +<0013> <0073> +<0014> <0062> +<0015> <0079> +<0016> <0031> +<0017> <006B> +<0018> <0055> +<0019> <0076> +<001A> <0032> +<001B> <0044> +<001C> <002D> +<001D> <0049> +<001E> <0063> +<001F> <002E> +<0020> <0075> +<0021> <0034> +<0022> <0037> +<0023> <0033> +<0024> <0052> +<0025> <0045> +<0026> <00660066> +<0027> <0039> +<0028> <0035> +<0029> <0036> +<002A> <0057> +<002B> <0054> +<002C> <004D> +<002D> <0078> +<002E> <0047> +<002F> <0068> +<0030> <00660069> +<0031> <0038> +<0032> <0030> +<0033> <004C> +<0034> <0048> +<0035> <007A> +<0036> <0028> +<0037> <0029> +<0038> <002F> +<0039> <004F> +<003A> <00A0> +<003B> <0077> +<003C> <003A> +<003D> <004B> +<003E> <0056> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4359 0 obj +<< + /Length 6443 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xY TS׺N74OQVm8kE<"3$0Ϩ FAԶõRZǷy}u>}_1cBpe]l|<0U!^0ZDf*X<)czT@h3幩-6KfJl"Lڶ+d|<8/2vuHhlod;C­.VB1VY7yYm4#<Y + + +qۭoqܺyVN~` y#3Ra-[yxyɽLy#Wn;O xJ ,5*&ǔ4 ֘Bl(ߒْq_3 $>}<^ΕysL7B~0KKD];vh܆q>%nl~y>ugӞ5wson3wj| ]M|o N/|5ysMqrt{SMyUg'Á>QƘf}#ky PpŐqIRh hEbZQ58}|w:)OLGhIHVB[l[?٧A +?l"q.TaSW+yqyi&CCwZeUPXA+tȓD^$G8C@rbc*.9ԦVBJ"eqǍS p +zQFlG ~y_Ź?f؂ Nړ4acu3dRfpݳݸ~0ϼUGj6_N86ɮ`33 ]R*>*8L*pp{{]]aA gΑ1} +]Mە` ޅa)Mt#$EA4)IaJ[+*p$Y ־lki]KNRюrQ%kBd]XJ>_Ն.8C6T|m0d]DTRSQU5-cDj2 +~[f+II`mmڡ>>]Av1]KyJQZC崫8FATB+vlI݃)ʇ`NUP dIAGKel3S4P cЩ:f!?iuyY2+?K;@6Sk!1|'\tt_tD06wFQ*j|xK]Хz<0 +cH<9VN+tƳ6`54ȃ|d҅rJʿ"]8k'cZMApJKؑ;!"kCچqw^7Ǟe͝h(Nt`Ϧ_cO3V(0g~>◾-πRe%V +LCBC)qt.b ^htⲬ)(NvXvLv]>XMvӐ0ul"O*JU8^:3QErnA(Ψ%pe%kCD&M3-쨻8,6:?Bu*iJw['?0?mëh>שUt~{V5efdeE@-K'{ntŶxS~q;8;{f7sY'6 hAᡸ@p^u6} VdM҅,߀_.i6ݣ,?qUG\f^&(*?tY?/eק';QKtɠ$գH ~$y'jh(m:ܽo֯*}CgTt(e+ :ͧgRITr"%8U9 \h{͝Q*a~+ضVƝ7~1$<ZEEo+2_ P5ܭm͐RUw2v# 7{\En;4|ao=@͸]d(o=(bK=ZO;;jrUv90 Àק=WNM3Lu-33&Lm&j)~ 뚳98&&uebM T[-SA h'Fs6ݧ{fNqEY&>/2 %×vꋁֵͬ!])叁FGk!pQpFT}}J̞F +\˰K _h]YԠ+*9K-\ t1L;;MXnš)=Ecs8+U .jgYE*%)UŖSF>RҕWUPCqCZZkZe*_`Z%)RA +$*l #UŐy9b5m7-]GnZz?45`N⺪ka + 554SG6U\8oomi,[lPOrj`K)c)Z(F\Wk 4 "I愺_/\^-~rNU1 % +;\#85k o|O WjKԇ^׮=,u5pUg)a >'74Ӕ<$7?я$B6pF/eM^[Kve4pZ3m>x'S{xЀѱYdX-p!ΐ!N#~ 2r'n<~βZ4{K39]C1VHvDeB"s u + t! {p43O8 M1-:[Lzf폲Ȯ(gI$ߘ >;wN tHR'hhJlK0=;VSzf&/e3d8;[ʷn#Ɲƚq< +(qܽ˗.9$8 E/g,!(>f }k}>Q@@Hwrg`맃:-Vڈ!J'#Mǀw|mekwJ3w 878KyX\~wPeS +h-kn W r WEKjj_&VêTHdU"5Ʒ&6FM6} 9UB)7aMG<m +kch¢Wv9mEm3ű#1fRx?+bO[DsM۔s t 3%6RT?8,N՛`A%nY +ܢ`|F"H=Ѭ;+p^JYHD/\Phdm2[xB<*OO r"AEi9PmιW79>D-4@YBzMaO1+~pI߰ZSjRUKlq64Źwь5 jj+f6SF.)+Ө-Щӯ=dރVh{< yl:&˾k(* 9QܡܡK*Jҡ,N0&]b݁Wy5_Y^ḓΔm\]"Pl ,P%=Y,)'b8ХDMf6 ]$u@jcv['UFqx>]'3ve"=ynŵ ~ez]$I)/7Z=~bOqe~GkpWh.}U{K)7|k/ZD2Xs])w5unN(_ tdNh ɖSvoG|7SNި ; +Mll'l@ :DԀ<8;gKHP' >pj{*X[omMX +LJQr|*DP8 +%~E6-&L7D| +p6x`!UzOZ^HLuN1퉗`%j7L ;0M4|BLf<$vي#1 f!"5m?V >` ^(MznmmNG2IDW5F Er11MB&ql +2/ǣ7l=2asuї.;YhAo-%@t]>]fs؜Ye`siD1?>;SOקҳpι/d,|9i飯L`%`N ,-7lPS.B(THlv<: Q}`qCƻCB!o٢g8q8 -0CDY`d+هyFWWkKY&AǺ9^d34Sǁ&w)Ep(4.*/9'<2:>|!Φ8}@vӑXH + +ԴZ)U~j?SaI +Le*Tԇr /퀅ٞ=*K:Z/zLӹ)Tnn&Ƴcho<::^LC5ƇϏv:0rI*> e* P$ C]Be;#?Kn +?aI|T)KbPLx HaC~cQ=E/c)/,<!D(('ʬOƉ$h r rԴ4Qr'pV;Il HK +endstream +endobj + +4360 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /HRSIWM+TeXGyrePagella-Regular-Identity-H + /Encoding /Identity-H + /DescendantFonts [4361 0 R] + /ToUnicode 4364 0 R +>> +endobj + +4361 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /HRSIWM+TeXGyrePagella-Regular + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4363 0 R + /DW 0 + /W [0 0 500 1 1 667 2 2 287 3 3 333 4 4 500 5 5 582 6 6 250 7 7 525 8 8 582 9 9 500 10 10 250 11 11 500 12 12 1000 13 13 479 14 14 667 15 15 556 16 16 613 17 17 556 18 18 709 19 19 603 20 20 946 21 21 546 22 22 611 23 23 395 24 24 424 25 25 326 26 26 834 27 27 1000 28 28 883 29 29 601 30 30 291 31 31 333 32 32 565 33 33 444 34 34 560 35 35 250 36 36 553 37 37 250 38 38 278 39 39 623 40 40 500 41 41 516 42 42 556 43 43 778 44 44 608 45 45 605 46 46 774 47 47 500 48 48 611 49 49 604 50 50 832 51 52 500 53 53 763 54 55 500 56 56 668 57 58 500 59 59 556 60 60 831 61 61 337 62 62 611 63 63 500 64 64 778 65 65 786 66 66 726 67 67 722 68 69 428 70 70 560 71 72 456 73 73 250 74 74 897 75 75 500 76 76 611 77 77 333 78 78 250 79 79 234 80 80 486 81 82 500 83 83 208 84 84 480 85 85 500 86 87 441 88 88 500 89 89 278 90 90 208 91 91 786 92 92 667 93 93 444 94 94 486 95 95 278 96 96 747 97 97 371 98 98 500 99 99 479 100 100 603] +>> +endobj + +4362 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x~Z +endstream +endobj + +4363 0 obj +<< + /Type /FontDescriptor + /FontName /HRSIWM+TeXGyrePagella-Regular + /Flags 131076 + /FontBBox [-40 -283 1000 750] + /ItalicAngle 0 + /Ascent 726 + /Descent -281 + /CapHeight 692 + /StemV 95.4 + /CIDSet 4362 0 R + /FontFile3 4365 0 R +>> +endobj + +4364 0 obj +<< + /Length 2027 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +100 beginbfchar +<0001> <0059> +<0002> <0069> +<0003> <0066> +<0004> <0061> +<0005> <006E> +<0006> <0020> +<0007> <0053> +<0008> <0068> +<0009> <0031> +<000A> <002C> +<000B> <0032> +<000C> <0057> +<000D> <0065> +<000E> <005A> +<000F> <0067> +<0010> <0054> +<0011> <0079> +<0012> <0043> +<0013> <0075> +<0014> <004D> +<0015> <006F> +<0016> <0064> +<0017> <0072> +<0018> <0073> +<0019> <0074> +<001A> <0077> +<001B> <2014> +<001C> <006D> +<001D> <0070> +<001E> <006C> +<001F> <002D> +<0020> <0076> +<0021> <0063> +<0022> <0071> +<0023> <002E> +<0024> <0062> +<0025> <003A> +<0026> <2019> +<0027> <00660066> +<0028> <007A> +<0029> <0078> +<002A> <006B> +<002B> <0041> +<002C> <0066006C> +<002D> <00660069> +<002E> <0044> +<002F> <0034> +<0030> <0045> +<0031> <0050> +<0032> <0048> +<0033> <0035> +<0034> <0033> +<0035> <0047> +<0036> <0036> +<0037> <0037> +<0038> <0052> +<0039> <0038> +<003A> <0039> +<003B> <0046> +<003C> <004E> +<003D> <0049> +<003E> <004C> +<003F> <0030> +<0040> <0055> +<0041> <004F> +<0042> <004B> +<0043> <0056> +<0044> <005B> +<0045> <005D> +<0046> <2022> +<0047> <0028> +<0048> <0029> +<0049> <003B> +<004A> <006600660069> +<004B> <2013> +<004C> <0042> +<004D> <004A> +<004E> <00A0> +<004F> <006A> +<0050> <002F> +<0051> <201C> +<0052> <201D> +<0053> <007C> +<0054> <2218> +<0055> <005F> +<0056> <007B> +<0057> <007D> +<0058> <00E4> +<0059> <2018> +<005A> <0027> +<005B> <0051> +<005C> <0058> +<005D> <003F> +<005E> <005C> +<005F> <0021> +<0060> <0040> +<0061> <0022> +<0062> <00E1> +<0063> <00E9> +<0064> <00FC> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4365 0 obj +<< + /Length 8677 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xz tSwc8QC^e( <-PsKG:#$MZZ:mNt3DdEox[fݛ3[`6h@ xaEa]__`i +?2~@%X+ 'W #3]cafGncLu)bqﳕL}nNYV\Af\qYAǰwh$^Z€2q[)ӆF[oM~)PH4&hFUiZQdcȆHW+jH_bɂE\賓[Ǥ>r1?X./y>v[a_;0zEQJ7qPlS9F Ç2ȍ/{pFk RGz~/`Bl6FӘG.R<$a s@%򼠾Kf+g5g 8Bl,4Ȅ H+[p)ڐh|m;rh%هKp\abcK?{͘*bR^\IqT?:L-k8_ϳ+-m\ N( _k.'=PC+`$JxCl > +Ҥؽ+QNًl:H!GR㪩yȊp{[2eCةq Ӕk)dZQrGpT;%l7U*AU,,E?),ϴ1۞>Pژ[^QidkP6X +6~UacOCt:S?lr +e +MuI-0`_sY;TAiT4_XL  +;6:* W?T , ?~[%u $~Id{(+~'Ϥr+xaqSGxՠ?Ce(n[(;" >JV`Fێj/l{|k{J&qy9r86w.\_=e^Zi4i**;!_W@@Ic6*؁lt +ܯ|`%ߺlp}ݻ" r#-$2. )F +- )iHꃖ=k(˩ZrvW˥k[j]7mJb-% FUPRСB8tznbn +H@ @qSh'L UHUY@MCʼ- \>\ W/UEFL$^lqm ԝY4 + oWvbuRt=Hy 5h@*/oJ&pYBvve8ܧɫ:$\U" n*xMʼ-6e_ù{36p^(m`pnhO.+D余'ẽ0=d 3_jWdfGxsCf/ri2K ޹>uB 4dГpLm熕n;" +\W x_zx^dv|죀H0[a{(@a+5SԩT &1; y7|IH5P\K]~{$QO4k ]?n_Vy&6r? g*t0ۈ`vbVuP !gV *bUa%HP2ƎˮVKQwWNcÙhw/dn⇷ GoAo),[Lj߶O uW 8jJԥ` +OȖz?&D)[Zy0~[%E!& rOQ&R宨 umtoYK kT;SoT7B;GH{R '(m 2ۋn0\xuK6NeG^˿SeQ#.0pW;[_PW$Q=}JΌl|h5d][, "au6= Ûг5,;Tη Wjyj:e>"Xs1 ~U^eEPӧ +%<ph6"4i$0'{G +> 7B/5(A]3?NT)Z+dfjhɑlWzvRo7yj%iP"&f a"l&2lJ,'F]Nr1 E.*gpZa 5?"%巤f/:MA :);zv[@C]E~o)D7,ذp:g:Ttp|cRUڈq]wC'?b˷T,=5"cXe| C>;YPv +'(:c.\7QpOo`)Ed3r(w1ߎ.-zpui +cĔ;>{?~6z}&vaKuƓ:m + V+IJDqnN `)W +x+T ^jo5*I|QǑ+{I!PaAXnRʵl?Kˢ+(λ/<>hД Ъkܽ׹# 6úU *a HC~p[,6){4"+TzD˓+bjԭjcEpL_SGCƢmi<"b;6d%0~OO:~]55e 2pD`TP| )+H' +OvK}+ eF?L†EwOK'z[aDx!{t +а4ػ4 쫬>s [.l~4g_2rs 9@{YAfO~e}1 Rቇ?X/k1[Ђ-i֮}NV_QK6G%~+ӿE'PB|CfFk#<ÃvpdN߈x# +_5M0;G.M 5iTaHRcH0ʭ0fU "@qy ?O*a3sCeUi@Ę?9@JQzGKlUbkn5$ZE٫GD40Ü a %(𬦌 M@IrQil> Q 40NaUĿdD{SrpOM&h{6;JLGPD7ǫ2 |ḑ(-Kj'Zl7k\FoY +^Mz/4@㽠%ڨȆNj8D$19 +b!&<>@I<M|OF | j+X{%i-^T[L-i$zmQޑ!߄ S*% /)e{r ͕Zzu]'y&mMD/HQPbe,fk .Q]{>ʆh r=X ԫ֒Y +#vVbWsn*D5@o\>2"4;Ri;)NT\EGg]\ ka%R4Պ- +ҢH>pA$8^aXlkkс2M64(Ȇ2%5!6"KmvSkSفlVۙ{ NP +Q9eQN).|<9S.Zei=^f8 gt$0s Q+(ntÉ:Q bkH\$h ģ4l$O mme@]̘pR&MtWD"o՘r"L]Y_]~ץ+SB\i9x1gAɽ$ 7(un3&E`y3eC* Iz?Om]8-XFۦ$<]Pׯm߰^xVp1Fyy&»-_ؚt]'pNg:DP֤%tR98L:(wB +@etR|L%@m */.r- Wj[!.}[&ܸ{&PccYD^b\P$D=(a7np-<7Rq +n9d|Øjs +ۊہ~ѵ7m$7}I!5B!z,%(;^㺒2EQ \G582 +%Ū`T&ޕHLQ$BafS&sx0jn^Lq9FR)TA1F6\C;ȡN8 ח``Vʵ5 +>@~g9}j 0 e#Nzf?53;ñ&8J/}px${vQ2XTZН1!Un(wL>/o=B{~uv`CY]ٴGZr-g>oV>UXҙ>@"(c*Jc@`"d<z y>9V44M}Jr?GU*u| _BMiNLA zuIHϞw2%;|ޣikAy/ +ckjaa#Y9hٻW__Q?3O)_s 25>3|U`(ٹ\΄܂pbӓ }.b#-arA*9mySK`])07&={8эY,U/[+Wt0f7=&Y(.4?:O;R)UA! +MCB4$B]N a<)+.(U& r|W#ABp*X1vW}7{@k/Nb,iwlOUU Rt0#+WCݕ*wpwi +REzP߇mIbfjv2vPګ&)i~ !Dž8i`ԫR R)z5{׉֟nfqWMIPC<īk 0㳷1\žz1Jg&Qcab&9e&GIMeoɴd'Yerq"8#w'"\619QK)Ld7M +LzK +].QM@z L}`2)>I +wM6MdL/*RUl6/ҿC/դ]L !_C@ej#`<8ܯ07d Iaͅ l-)9kv L;vA4BQl}>m:Ts +>.yks{݆!o-w箑AZ}Qz&MVnHU[*T8dQ7DT4"!mno ۰Gb~=ILUB*R}8e* n@}; zL5׏~} - kvŋM-'e|`MS$a+)mK6U>Z?!EkSpT\TYj膋+t^izkaeSEo{̓=pjlɯK5M:^sGGiK>==}i+XTxe2>)6w ;6wyΕ]h߲|z<-F^6;?D~kT͖KfwnJgqwC}oP+)WP[-hhQh^,(44Rr;u)C+6dJc6:RI4Cb.n%51 qU,lY3W9.Ԧ7gqlX@+[)?807e +ޔMEm:4uJ#r S!s rT9bk#!%bu Cj"IBdddic`El(ztP]DNhe#5;ZXYj=š̓m`$3:&XAw2D|  Qx;7KIzYEV |] üV/]8<'3J 2Ix^BdCUFϿ>ogkrWë)ɤh{#cubMd-."}bCMoI'9-P%x5PHKs-,^)ۄ$t]ފU+JKw pg`#?.7ik6f0ne$ya HA@͞b:efw~))>2S5>V26¶Yb{R(9[VV_WP N1d]Ovpɿ,gpɰF*Ր6K|O +RR!"vB}]}11>茺zf׭{'돊ob]faߐ +endstream +endobj + +4366 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /VHGYFM+TeXGyrePagella-Italic-Identity-H + /Encoding /Identity-H + /DescendantFonts [4367 0 R] + /ToUnicode 4370 0 R +>> +endobj + +4367 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /VHGYFM+TeXGyrePagella-Italic + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4369 0 R + /DW 0 + /W [0 2 500 3 3 556 4 4 444 5 5 778 6 6 278 7 7 407 8 8 250 9 9 444 10 10 500 11 11 389 12 12 333 13 14 389 15 15 278 16 16 463 17 17 500 18 18 518 19 19 667 20 20 278 21 21 556 22 23 500 24 24 528 25 25 500 26 26 611 27 27 333 28 28 556 29 29 333 30 30 444 31 31 778 32 32 722 33 33 444 34 34 667 35 35 841 36 36 545 37 37 611 38 38 278 39 39 556 40 40 463 41 41 667 42 42 722 43 43 944 44 44 778 45 45 760 46 46 611 47 47 722 48 48 778 49 51 500 52 52 250 53 53 611 54 54 778 55 55 250 56 56 556 57 57 333 58 58 500 59 59 250 60 60 722 61 61 500 62 63 456 64 68 500 69 69 944 70 70 486 71 71 778 72 72 722 73 73 233 74 74 1000] +>> +endobj + +4368 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x +6 +endstream +endobj + +4369 0 obj +<< + /Type /FontDescriptor + /FontName /VHGYFM+TeXGyrePagella-Italic + /Flags 131140 + /FontBBox [-162 -276 1010 744] + /ItalicAngle -10 + /Ascent 733 + /Descent -276 + /CapHeight 692 + /StemV 95.4 + /CIDSet 4368 0 R + /FontFile3 4371 0 R +>> +endobj + +4370 0 obj +<< + /Length 1654 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +74 beginbfchar +<0001> <0064> +<0002> <0079> +<0003> <006E> +<0004> <0061> +<0005> <006D> +<0006> <0069> +<0007> <0063> +<0008> <0020> +<0009> <006F> +<000A> <0070> +<000B> <0073> +<000C> <0074> +<000D> <0065> +<000E> <0072> +<000F> <006C> +<0010> <0062> +<0011> <0076> +<0012> <00660066> +<0013> <0043> +<0014> <0066> +<0015> <0075> +<0016> <0068> +<0017> <0067> +<0018> <00660069> +<0019> <0078> +<001A> <0054> +<001B> <0049> +<001C> <0053> +<001D> <002D> +<001E> <007A> +<001F> <0044> +<0020> <0077> +<0021> <006B> +<0022> <004B> +<0023> <25B7> +<0024> <0066006C> +<0025> <0045> +<0026> <006A> +<0027> <004C> +<0028> <0071> +<0029> <0052> +<002A> <0041> +<002B> <004D> +<002C> <0051> +<002D> <002B> +<002E> <0050> +<002F> <0047> +<0030> <004E> +<0031> <0032> +<0032> <0030> +<0033> <0031> +<0034> <003A> +<0035> <0042> +<0036> <004F> +<0037> <002E> +<0038> <0046> +<0039> <004A> +<003A> <0034> +<003B> <002C> +<003C> <0056> +<003D> <0035> +<003E> <0028> +<003F> <0029> +<0040> <0039> +<0041> <0033> +<0042> <0038> +<0043> <0036> +<0044> <0037> +<0045> <0057> +<0046> <002F> +<0047> <0055> +<0048> <0058> +<0049> <0027> +<004A> <2014> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4371 0 obj +<< + /Length 8773 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xwX! Udi6qW$^`b!@G{Hlvc8&iFCzpf߶~~Ctt=GϹ}K3fxxzz> ܔ% +%$-ٜ| 溟>1ZCI3ϢG[̛HKLVpH^RZlZ[,AltLﲥKW.Yw}_^/_^f/)5 ["ž[^0,yK Kx~o8/&,!ʗ5=Ͼݴg]{}w,/-), EBɋd$_LXR xxzlv+Nn+YR3i>e{&{JA3᱕\ +b +&*|<2s|&ޙ:cdq463|Yg]+U~{'g<7ȓxO&۟\?=_o;%7F>'J4'N>HEonHS&ʌ%CH] ,Wz޽FINx9܏q*QFQ" QjvCF|]sLX d)3d8A(E*A-V}yK*RQRfX^XAOY)@\9b!F.^ ?6MNV ]P%+ADY~`xꮐWt86nU5uh6Rd!̹`.K +rE|H* MP:RZa9. EfꒁByr޶De C*āsī}IGfڶ#0%q Պ/V9Wݩѱz'A'<ɠgo᜷˥UCeni襐8) h*| #] LP.@vn;sp#'O"]`@" +3oLS +E`B2؏YS+ sdoe`APfIBUqzK 9t \fΆt݇$#(ͩi n"?.vq?9Y3N +^5 ݁c0X9ڇd" z/;BR'܄63QUQcjך:o}鼱\+(30s`Ŭ=Ilwh,'qrTߞ0V}T/ _gNP>OjA, 8 MaN_Q57!^ڿV/ +S0wP#=EV\Lo8Ͳ#G:`%֕Pi,.: } ڳʒ}EWg=i v$:,@4m#l!|#%,c7#"VŃϬCǰ ^B2RYt{5R27 +:?elwH VScpە\Wk~g` !vă 7lG86TvVX\. !Bbf_z0L'z~?<JGsUuv%ި}H޺j(ܚKfj.^A!Rcõ髍vC}qQXvWk=ImMbmבE OOŠ913p +ڮӜQn4|~yc./-0E +2~n`r\ bu!~zj%Ɂfp vv75u lX%ncD>{WH9v_ǩnd,:l +2VK{aa?^߅z/6\.}DJW4ݗ + f" 5+Ky^^$,,@>4Oɇpׅk)R,ǹ<̢7ҮOn;Fc>6z%]1KVc T]FkL&L^^@D;7fJJ47fW\RK0"v[4@>tC=ԉJSE缍MITCRH#-5==?Q笢_F + +e)?F<#HWڃs?w8-#Z; uρl2g9n8{<?a)_[^ٯz Pj/K?~UIOx5 \-S6z$tȁҬJ8 WdQ|T P0{ߧ 'U<-F@T[lI M};)x׋RPJ5V}->AH[)bɦq#JnfIϓt_,Q| Y]#E7B4ҁHHa4l#fd7@9TK vm _CFdz]6p6~GO9]#~`I8]y -x˳ KM(!1,jm3rPv-6) _ T태ZY`0 2C%/`XJp $FqIZA(*3#!+@{EKc]mUH) 菶%C=ݧ_7pxU.⓮ mذ#<:KBϒˇ"12|3W^NmwG}G\aRټ܂M bjb˗KvSd)fILϤRMW_ TCȒܯ4مF&!W)Ud6M/=6IK,ɽ|#fS*+SAt8m݈JVVGB547PԆAER).u8_go2(EDW7JR/(AĮ*u@Lw.4Auxغ=b; +};6"Tz,v +xW+RG-wzk8.(c`4 m X1UDKT*h@3H @{]ZBILPgᫀރV6_+d%X ud5ZZ^K` ۏEtNF%[MuC7t)(Y#5B%)3Co։TF9- }%"b!tɐ BejYUPT1U]ZeTY!m>O~~۩] yyo+0d=ZKN|N +|ΎW&ؤT+#Z*xiL9&7q2j+cv}-ZW=7}oCo`Vv*wαlPAS5ZiX,ط`%?FHCHm>>Cn緡ۭs++2:GBQ>JHOEs#E'B uI u}1 yC n ]Dq̒v2}͗M5P (\YJ(0HcΥ$tt0*W(ː͇Ͱz []eo ytNέ,Vrz5T/tAIރ?$aCJy^kOG/kS\*\/¢ZL(#Rnf*]iN{%$\Qr8dl/ ͟GpBEY-ا ]etPE$"ԊH.tH٠*pKP, ܙʴvc#& b +O щ7 2M>H)U_ّ߰JewX-9M}\;^99J|+Ç txZmɐIcLzNdj)=@f"> P6OaQM Ct|9]RJLtM*k~j?#?~0 20~Z~Yy!o7cZ^_o9y:!y oU)Lj]Pa+ $y\e^4%C‬Ӳ Ř))!u̍ CJbYUt_jeY]e"T2ksщ\JM#XB@)Ft@á4Fjlj +͊ݘFh*j=0 +W8<:Oѝ*wSt} gӦiڠZ-~pO6k3 ŕ-::QRJrI*>tR]ӷ\EAz/D05{(fofN tD."9H h6u+0kLHSd;<;u'BdeG?*G*~na'(|ԧ~(-fZ*LuY\ܮ:_W|*/3V~W_BGHBu~S$ +cm:^enл?{~w#,do跹~J]Za_)%ÎS%  %aFh,PK$~J')k!N.b.m͔Qk÷9@WQzE[j(y(㭗^B}T $J 0l׋c`e0ʟټџ@<O)GGF<_:a&uz'O յr]HU*c;yiEb n4hjQ*LJzSU¬TT:)+S nܹYoguFxL{+j;=.P4L'zgEh&heX;a0|F6t6 nR%Z1CxU[ +  +)C.g!:n9X.*Hr Q=$A'qui8SnM ߋV-JM~JR%O7)Z ij? g# i{0F ԢS~Q +a-8yChSHY@vs }ڍ_=T&|qI'w=K?@dabIȓѨ85 +0er JJPUZG +U*\x߽G(?j8l DLo8FIK1wobi$YB +Q[]09rh;}+ɷTIQOoCY?܄lH̏p.*֔4=oI1. sy9$;R¥ZN?4w@Y@" r\/+Jͥ@/m:cPz^k p@OO|YJs WYO?J¦٧@/¯z.z1ͦ٘%$cFD5H8 }%R'Ym^]a-\ܾ.'0o܏3hoz3|= }ueD!Ξp +F7n^½֬?r7Oڈϰt|C&`|W) K!01u4bv+pcR[ف4[^u9{4tF^xe\JDgQkq}0|p<ؑ3"ٵpX A]p,YzwOi_"k/ݭQʱdAć S2#9z+56^ܞC3A ޳w+*`'^w#zr8r}dGy#jߛA8ֆkS:db$ '0ξ5D8c'^;i*A"Jx$n_[sn\VeՊ4 DDx +xybgk4޵͡w 5=G/C%bJok򛄍 6QGó,_j4i9 Sz5i-w's*TKnSo"f!*,ih$ͽ̘zXGXƺLֺuP^ZT$NqG3ӡB.u r!OUESJ/s_΂z6DҒF fW1DQTL 7&8&b7&ۏ8'T%S3H)vɰɇ>_n;sa2A(֩"]idAe1V8:& .Ldk\T=v2PS4RCh {D}R ܃*T6+݈ݶ/@e54JR'B"$R~Li%2:LE<]6Stf -$ +P Tj uX4}?VmhP6ϘZ2FR-Z v2onx7PX K1\@!iLPTlg(DuX! +(E(LnAT%+k*Gd;^d;SVQzc{---3+"'H氧drG +endstream +endobj + +4372 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /AINDEB+TeXGyrePagella-BoldItalic-Identity-H + /Encoding /Identity-H + /DescendantFonts [4373 0 R] + /ToUnicode 4376 0 R +>> +endobj + +4373 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /AINDEB+TeXGyrePagella-BoldItalic + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4375 0 R + /DW 0 + /W [0 1 500 2 2 250 3 3 500 4 4 250 5 5 667 6 6 333 7 7 556 8 8 500 9 9 333 10 12 556 13 13 444 14 14 389 15 15 444 16 16 833 17 17 333 18 18 389 19 19 611 20 21 556 22 22 722 23 23 778 24 24 556 25 25 389 26 26 500 27 27 611 28 28 556 29 29 685 30 30 778 31 31 556 32 32 1000 33 33 556 34 34 593 35 35 444 36 36 500 37 37 722 38 38 537 39 40 556 41 41 611 42 42 778 43 43 389 44 44 500 45 45 778 46 46 833 47 47 611 48 48 778 49 49 944] +>> +endobj + +4374 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x +endstream +endobj + +4375 0 obj +<< + /Type /FontDescriptor + /FontName /AINDEB+TeXGyrePagella-BoldItalic + /Flags 131140 + /FontBBox [-130 -271 1073 726] + /ItalicAngle -10 + /Ascent 726 + /Descent -271 + /CapHeight 681 + /StemV 168.6 + /CIDSet 4374 0 R + /FontFile3 4377 0 R +>> +endobj + +4376 0 obj +<< + /Length 1300 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +49 beginbfchar +<0001> <0031> +<0002> <002E> +<0003> <0032> +<0004> <0020> +<0005> <0050> +<0006> <006C> +<0007> <0075> +<0008> <0067> +<0009> <0069> +<000A> <006E> +<000B> <0053> +<000C> <0079> +<000D> <0073> +<000E> <0074> +<000F> <0065> +<0010> <006D> +<0011> <0066> +<0012> <002D> +<0013> <0045> +<0014> <0076> +<0015> <006F> +<0016> <0041> +<0017> <0048> +<0018> <0061> +<0019> <0072> +<001A> <0033> +<001B> <0054> +<001C> <0068> +<001D> <0043> +<001E> <0047> +<001F> <0064> +<0020> <0057> +<0021> <006B> +<0022> <00660066> +<0023> <0063> +<0024> <0078> +<0025> <0052> +<0026> <0062> +<0027> <0046> +<0028> <0070> +<0029> <00660069> +<002A> <004E> +<002B> <0049> +<002C> <0034> +<002D> <0055> +<002E> <004F> +<002F> <004C> +<0030> <0044> +<0031> <004D> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4377 0 obj +<< + /Length 6617 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xyyxSպ~cYe%jqhgPT 2R,:Oi6iMm8k/z( ؝pCv-%р@';zrNbAhuNnQ>?- ŋ_Z^Kۖ', E aEa ې#fmxf3as$ Igž%'d|'*Ȱu[F>Lv~J !;ET/ 䧄%$'$y3A-=%l[z 8}W$` bav@ۣ <94c|`rZ]s+ҟStH 9wq(Z6:3{ۇ$Cp/cs#^s޻F.{::}Rܻޏk\G?XP r`"p^= hbz;Ϸ^0FԊJ1HaΝ's 8ԉ1(V/@ * CR+)&^,,hU.0-Ew* 8FR3N%5izS2v;_ٗ!¥z+1<\=Op{ksb y$>yN¿z (H,Nőm*g#=䞀0W{؅EhbԞ_ )::⴩5uX""L*2P vCsU' U6_WgTjWd/j̫۷ @F@!VW: 񅻳0`{|g$~og1$<˙oCas[?~(*R95AWSUkwZq]ejEՄƺFl}S- +1iqXm?Y!AU.Z8[s$|H_x0}8>݆2kD߉H~ȡcd> 8&kkۚS7fE=nSlN ur_iHZB5yjT rJjDH"A8n胱O; z[r(]$+Sڏ8]Q.F5 +nWA[7WI2/#hm.ffg$B9KMՐ9r;Qi jPdl(RzGo=cKr88\% SGcr&;K tyM:*3.mHPP+*L3X:8و>S8+)]o^ ӷS+[i2d+i2lksvh +g` +v.Bwq_G$TOV&> +ntRl;ŷpE(sY>/&cϷiEUX =+!ڛϝeGI%c~YF85s栮fg cEVQ -0o‰2>sHFf\dڔHzDɉ4DhxVLCT㰋A1scLlK@ +Z\U'+1(6I)o*tNД0!˧_DENQҎ4ȶ)~8b`/IT萡pSZ>Q˭#4&W-)t`48# wP^ͣ DyO8j6wFp@I-\m>8i>5sLceadFສZc`T;f{B Q ٗDuIl~zFҨ[k+1g˒i*UʳiC#8S9].^ Ez]DhQfX +/ G8GZt=r/|ebYa #apBT@&D +_ooMɎx(聓0`p#gpQe9j!:RVYU`t>'ADLxMD: +dӡqpG|CMx,)ixeO]-50~]\^x!?G ; kcnG4 %t=!8Ǡl} Pct9 +Ygh?ecH\gá;AZӃW܈nz4JE2EiDZH ) WYx1v#x~k3~QVR9,>ˎA?E=.xt WZk9HjExV+&:B×W8}i +~FϵK`&;Ο6 6kkq ,]u"S$H%L%Oߖ΃AoދgZZ<.YsELJ@e5P7S_{9d.AuϑՈj.3 y]6!u~$`8lr~es(ԀS)v2N) z%@\#.v_R?2փ{T6Yh.Ŧ|GDuJr{;Yydz, pFFn4;Uu]Ҵ,2x 3 +ILeTUZ|Ln45r]Xmd9Fʍ7h}՚M]%oJBȑ[2F7j=_ao}4엪 +(²ۘMZ1OgID"i +" +aq4K-^_"cwf4[t>X>35΢THO.LP ݁SbGR_o/m +;VQ)Zp#`g""N&O.ei3n@1sk"kU0tu?|@B}ou~@(tjZYH`% "M<"oSl~FR4t3TÁZ@]Eo .D REPJTc.9^+R9}soF}44//Ti% 9!^]3D_?C#4 BW#'|LmCtѪ# t#xxrV. J:VS_m?d?Zio]gQjaxa`?nWJQAIگEcxy;޴\`֫qTl1rq[ _FzS_c>}%OOT]+y_i[G9zPWӥ}/zSbIO8$wv;x/~!t +&dΧXنoO pWюAhVeG6#;U_29{Bc$@fbL6_P+]Vϴ/s,2V* +=2 zYb,"ԭ6;wV(GPB)Zvy|l+NCm}-`[sapb2 5'i޸)(eiC#$P\(Ө@QJ +JpC)r5u64Rlq BD$ߥ +V NW%2Þ_#5wׁ5n|o>;hȓ%Nξ~֖jF/f:tf몟hp?k ^x# ̟.NDT?z9nU0mF_M<:GkY'ۀ<wnU3=5W%?:OntJ^bu +ar#ڎ_<>M>%%3 bo'{C|Ԉ7?tjDn[V!<L~ɴ: >UTF_m`W1hs:yS3ئ%ʥZO#&潄`^U9r zʭZzHGzZL^[@o_>99D;Tag*]ظ<>r5TZKK7SBQ'`kt[y< { +..]e\>]/N٧Aw{UqOo|CݜG#ήeqm(|Bk;w`PweAT Ifp_ +/}c6u.kf_7Uhee]3S4@%THsZT.ZQi_ڌ`;-35鞛A{8Io3 :s] NXsx,[>3yIB|=Toͣr*s(}JLp@N_c B#7=&/dt:2v[.UzOC!I(5Eς+?B\ox@XH7Y X~s w'H+!/''~} jU4-*ܗ퍀%dzܫofr@h\bnΓp +hb A4䕖o#ydΒɰ/"+U` +Y_#n](@2m-Ґ*{/c7踸}dSklf)::>BQZ b(jfN@ʴB'Ј,DN_ +endstream +endobj + +4378 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /FKQCWC+DejaVuSansMono + /Encoding /Identity-H + /DescendantFonts [4379 0 R] + /ToUnicode 4382 0 R +>> +endobj + +4379 0 obj +<< + /Type /Font + /Subtype /CIDFontType2 + /BaseFont /FKQCWC+DejaVuSansMono + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4381 0 R + /DW 0 + /CIDToGIDMap /Identity + /W [0 52 602.0508] +>> +endobj + +4380 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x~ +endstream +endobj + +4381 0 obj +<< + /Type /FontDescriptor + /FontName /FKQCWC+DejaVuSansMono + /Flags 131077 + /FontBBox [0 -235.83984 602.0508 765.1367] + /ItalicAngle 0 + /Ascent 759.7656 + /Descent -240.23438 + /CapHeight 759.7656 + /StemV 95.4 + /CIDSet 4380 0 R + /FontFile2 4383 0 R +>> +endobj + +4382 0 obj +<< + /Length 1334 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +52 beginbfchar +<0001> <0061> +<0002> <0063> +<0003> <0074> +<0004> <0069> +<0005> <0076> +<0006> <0065> +<0007> <0064> +<0008> <0078> +<0009> <006E> +<000A> <0073> +<000B> <006F> +<000C> <0044> +<000D> <0070> +<000E> <002E> +<000F> <0067> +<0010> <0045> +<0011> <0028> +<0012> <0029> +<0013> <0072> +<0014> <0079> +<0015> <0041> +<0016> <0043> +<0017> <0054> +<0018> <0049> +<0019> <0056> +<001A> <004E> +<001B> <0052> +<001C> <004C> +<001D> <004F> +<001E> <0055> +<001F> <006D> +<0020> <004D> +<0021> <0062> +<0022> <006C> +<0023> <0068> +<0024> <0053> +<0025> <0075> +<0026> <0066> +<0027> <0042> +<0028> <0040> +<0029> <005B> +<002A> <005D> +<002B> <006A> +<002C> <006B> +<002D> <002C> +<002E> <0020> +<002F> <005F> +<0030> <0050> +<0031> <002F> +<0032> <0046> +<0033> <0071> +<0034> <0033> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4383 0 obj +<< + /Length 9557 + /Filter /FlateDecode +>> +stream +x{ xTչ3df2!!$!@r,AABD̡9KтEjQFRh+Z)0Yg=y?qfwy +A޹.P JU}(~/.Xr~t'@O]%f7w̛miTT ()]Ppwŋ~c1B~/R~FM.Q +/-+_}^Ptټ=}z4͞D#hZ(8P}8[^qBDZ_14&8x +:S83˨e<\tpTMZp(|([\A,oQ,^vs%Kx@7QI씁.ve)cqPI43ZMRW)Y'xA:m>[2~+~ +uۍ GCߠRIQl74^V&|zۍ:]sm5xRl:h<RQrq?P7؍HiRirخg5SmP|tQ^< +U]*) {=nZBz[;='te|㧪]=JQg{?5E -54רS(i +$=)E K?ZwۜM+]PPjX _eͶm8)T4>lyzy`_2>;/zY䙛J`9I =VXJYֽQȬe[1a'E\U)4h +08)E(ԝQRyQN_i{S>YȢ\IVlfx尤Y!X:+0^ +*oS@WRIVcݨEcZm({#6))]H E]ݜ-q.p^:Ew+"vhln:5p_L=TȽx_zFu/:k_ޫii,3;?žA9ݚNtቭuxj- &Thp;$([vt΋CcGq99ّ0wJRF3_y[EغꚚutR)?`.wyNy_p4V|#xkj*SE) + -jc#Ħ[tkŢtJpYBrseXy6vmqVBARt-–MW',3LdeIVce}5F5XOj!)#h= ED8z1d?lcV-dyٟ!1e+@=e JrDJV46f=_}#}ֵg=kkqNJ +qۢtuW#PCѵ.6У-{h"]$p^n祳S\e`cǗD'x뫟_z>zݖ3gZ}xGEX: +e|uo.Ehuf)۞9ngL2>.gJB+^ƍ7b6 nqru6~}ExT<%[Mb:I4b8׵= r 7"ylÝϷqrz0ӽ <؊e77Kk۰Soovϴ}÷@e܇ +);L帒؅@e*FRcq]R EֆQMqaGz35}v't@7 tH#7u!ܣt@SŠ͡kW}n#k/usv yj]K?yF%{8Ňe_F{,,,'x> +cyիJ=Y_f347K߅˒|[').S^-Űݭvx_QF(´An 6?[SiJv5kwo\ϋ~"?Ȏ|k+JmK: Zu8F͉tGx=;f4wTYbGgg7γHy5j%\ MúM`q;O7e19-ٷy}N8xr^>6sx69$ґ5.zq`Zqj=:D9䁡DLVW_ah#T!XQD+ 3* r:Bâgx(Zq8 w0\6FMqϾ,wݺ"s"KJ?7c3}AbqY1GJX?W=-63+\YeUɡ&flŸ#l4~T.;v}fZlɀ"o F2셒'sUK\&͒L6l# +@z=Cj5c(L[Cp>oS2_N6uP(*UYcԒdD WWرKZ,>ɓZUŵ4V-*jnS% FSKz:gۑycel kͰW^qVaX{w{S_(ٓmaKг牁>oG@GWC|C>8O%? $WBZ.ҏ4޲Z O3}jFHی,k8}v#:Ăm1(~GX-o}ݻ&<@}@h_Od $? 0,_^&M%dr 7Yډ(%'Ũ+bt]]VlBWbUWgv3s\yƛTߝ';@kksXTxe4٩%d}%iʹog;2?|O(oxv򙙭y˟|@zV{*O 8}v( 5g/#@1oֲ[悊R[d-a ȶѲݹцa:''iMnmXaS_^:rXxU4OY +*CeUM7Ωy /*P>ŅŹ8x%y4*qy-#.+j1fMa+'Oy(!fް/=0_HO3c?fb(AuԌR@-S+RaVUG.a.c:\a1Xט]&9/c4jkҽS#ơ~ Wv~0Hox}ý{5x^7dP䠨Aуb2n⪨JUZ^eV٪B"bbuVf2ŰN]l‘k˞6y#{.a“/+?i}DY}iTg0hb2-ˢ)60 ` nI٦ijM7Ԍce ˈ3;fbebi򨏥a6tɌɒ+i2s0,쀸 [Z-7xjK +'(xCך!mRm6!˶ã۩N +-dUh̆H^v9Ƚ޻WğGl˿pm3Ό33̈YcH4kH~ w@cFL ݻ"x\t-q怘%ϑ=yHwӀhv1öע ;,++Lv j1%ə93^]O!M`Eo4xrЏ&7oPܒw^i8=+>ٴw[e#n,i&YM=9w [-iq/y^0.I'6v5}I1YXW]!1- +#.gwͲ"M0ņ1# Q"9!;2£醹z2lGkVo#k|fͦUkr+]KW=P7'Ď'xCXvGl9.Q_]w2-*YiZ;4bC3임4{zF)4;Th$lgiybfSrx*Bc3o;Q2>}:zLwZhEjH^3S{*>d#<|Md') m[mⳲAC:xamo~x6&jc`VhW}x y:,o7FڗnB#yhdArW6.[-@jwƒ-,-ȑ0Zn>jI@e3yێS[gb]]a9=ESXC#1pwuw>G|n>dr%kׯ^Ħ7;v72Wd[r "Yu^5p}%p_OGjB5'm"^ĥ8(ڽ3YpK[G37%gl.3g޽OoZǦ5u}_q,6zGϼRle~6 +[U:M 7Y7饢߮oM?L=T`/QJ`=֣]@%l%HF 2q yAC6vjpG ] 6ό?(AHv|bX}x]ʟi=AoNq-_vj-dGK>yPkzɶĶ>!BbW>{B{ ]64UH"hPDDOa.pƿSo5C5sPfdtE|7z!J/+io[,mJƶi)o5 3{Jf/5>;?cXi;vMH}߳KsmM.tYSRiҞ~I.&^Xl|H>+]BSXlhSSڙSW|IMo/Kr3[q&K NRM+w)_Mtۮ{f[ZE󝔸 +Cbvo}Bo͌ѷYdް%DyxX*&_V':ߔ#FQޓA%Spyu3‰ۯ$dӘ9vq{{.VXI٬ҫX_+2Quq~;R#Phda) ƽ"LD1,0כ'K6!;(2I%azlÂ60%!o=Рc aBPBCDC011#0ɐBr)O2cpe\5%\wPsi!yh6N48b0ƴm)=~R"CCICޓ(J&dJnƋɣ͎-ނo[grIxJL L2kBI-;}`A'|gr +WW_. [6]З[poqwCb8}~.giWAvO_D8FG[ς>3#qccͧ!%N :N +\DW}$--t&cw~+7n ͂:, A6CzNM>L*d~p&5APc`}ukPio1A{KAVOA/ +v zy!ws\E?{6l=N?S3v$(C?vhm[C6A[C Ж-u zdz"jy`z|cCC&SI .Z/hvU?:V z*Uqo*T+¨Nn*= h%yZRڃ/H=hEtTr *4wN+h|N4K7=砙4wt~4AS=4EdAtd$AMt*/h +AШ4(KECܼ(FFq40;@4tKC +\|4*>U- \TШgU|p nd|V7}5*UdAv|b.AY:x߃ +x^1ˊFQ_A}=Q{o,*ق=<+єa(W8OPz"rxp%ݢݙiw&SO%CP0J,ɅtG% J ㉂y*O(UuԵK * K +-(*G ȈtY@'H'r +[sW9¸EN0Q#vr؅ڭkttX#+O7)Y +endstream +endobj + +4384 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /GPMDBV+NewCMMath-Book-Identity-H + /Encoding /Identity-H + /DescendantFonts [4385 0 R] + /ToUnicode 4388 0 R +>> +endobj + +4385 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /GPMDBV+NewCMMath-Book + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4387 0 R + /DW 0 + /W [0 0 500 1 1 625 2 2 611 3 3 361 4 4 278 5 5 584 6 6 444 7 7 306 8 8 444 9 10 389 11 11 500 12 12 389 13 13 278 14 14 497 15 15 603 16 16 654 17 17 750 18 18 1000 19 19 722 20 20 500 21 21 613 22 24 556 25 25 500 26 27 556 28 28 278 29 29 466 30 30 722 31 31 278 32 33 500 34 34 485 35 35 576 36 36 977 37 37 837 38 40 500 41 41 828 42 42 466 43 43 444 44 44 828 45 45 778 46 46 738 47 47 778 48 48 722 49 49 625 50 51 778 52 52 500 53 53 600 54 54 1000 55 55 490 56 56 833 57 57 392 58 58 581 59 59 572 60 60 518 61 61 569 62 62 611 63 63 706 64 64 556 65 65 528 66 66 412 67 67 667 68 68 778 69 69 531 70 70 906 71 71 500 72 72 654 73 73 569 74 74 528 75 75 610 76 77 422 78 78 407 79 79 666 80 80 477 81 81 500 82 82 528 83 83 776 84 84 706 85 85 569 86 86 662 87 87 500 88 88 319 89 89 527 90 90 447 91 91 319 92 92 639 93 94 500 95 95 469 96 96 500 97 97 710 98 98 849 99 99 722 100 100 521 101 101 1000 102 102 607 103 103 500 104 104 571 105 105 778 106 107 278 108 108 667 109 109 568 110 110 394 111 111 583 112 112 278 113 113 816 114 114 520 115 115 445 116 116 500 117 117 831 118 118 595 119 122 902 123 123 732 124 124 667 125 125 759 126 126 863 127 127 917 128 128 759 129 129 451 130 130 530 131 131 517 132 132 593 133 133 1149 134 134 354 135 135 406 136 136 782 137 137 651 138 138 494 139 139 612 140 140 576 141 141 750 142 142 554 143 143 556 144 144 485 145 145 750 146 146 514 147 147 345 148 148 958 149 149 559 150 150 510.99997 151 151 639 152 152 278 153 153 1000 154 154 503.00003 155 156 389 157 157 1000 158 158 778 159 159 839 160 160 529 161 161 429 162 162 653 163 163 1139 164 164 1361 165 165 1000 166 166 778 167 167 500 168 169 667 170 170 642] +>> +endobj + +4386 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x x +endstream +endobj + +4387 0 obj +<< + /Type /FontDescriptor + /FontName /GPMDBV+NewCMMath-Book + /Flags 131076 + /FontBBox [-32 -950 1236 1500] + /ItalicAngle 0 + /Ascent 806 + /Descent -194 + /CapHeight 683 + /StemV 95.4 + /CIDSet 4386 0 R + /FontFile3 4389 0 R +>> +endobj + +4388 0 obj +<< + /Length 3246 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +100 beginbfchar +<0001> <0393> +<0002> <22A2> +<0003> +<0004> <003A> +<0005> +<0006> <0065> +<0007> <0066> +<0008> <0063> +<0009> <0074> +<000A> <0028> +<000B> <0031> +<000C> <0029> +<000D> <002C> +<000E> +<000F> +<0010> +<0011> +<0012> <2192> +<0013> <03A3> +<0014> <0067> +<0015> +<0016> <0070> +<0017> <0075> +<0018> <0068> +<0019> <0061> +<001A> <006E> +<001B> <0064> +<001C> <006C> +<001D> +<001E> <0077> +<001F> <0069> +<0020> <007B> +<0021> <006F> +<0022> +<0023> +<0024> <21A6> +<0025> <2026> +<0026> <007D> +<0027> <0032> +<0028> <0033> +<0029> +<002A> +<002B> +<002C> +<002D> <003D> +<002E> +<002F> <00D7> +<0030> <2115> +<0031> +<0032> <2264> +<0033> <002B> +<0034> <0030> +<0035> +<0036> <221E> +<0037> +<0038> <006D> +<0039> <0072> +<003A> +<003B> +<003C> +<003D> <0031> +<003E> +<003F> <0393> +<0040> <0053> +<0041> <0079> +<0042> <2218> +<0043> <2208> +<0044> <2212> +<0045> +<0046> <2254> +<0047> <0034> +<0048> +<0049> <0030> +<004A> <006B> +<004B> +<004C> <0028> +<004D> <0029> +<004E> <2032> +<004F> <2200> +<0050> +<0051> <0035> +<0052> <0076> +<0053> <22EF> +<0054> +<0055> <0032> +<0056> +<0057> <2217> +<0058> +<0059> +<005A> +<005B> +<005C> +<005D> <0036> +<005E> <22C4> +<005F> +<0060> <0037> +<0061> +<0062> +<0063> <0054> +<0064> +endbfchar +67 beginbfchar +<0065> <21C0> +<0066> +<0067> <0038> +<0068> +<0069> <2286> +<006A> <005B> +<006B> <005D> +<006C> <2209> +<006D> <2216> +<006E> <0073> +<006F> +<0070> <002E> +<0071> <03A3> +<0072> +<0073> <22A7> +<0074> <0039> +<0075> +<0076> +<0077> <007B> +<007B> <22AD> +<007C> <2227> +<007D> +<007E> +<007F> <004D> +<0080> +<0081> +<0082> +<0083> +<0084> +<0085> <2133FE00> +<0086> +<0087> +<0088> <2295> +<0089> +<008A> +<008B> <212D> +<008C> <210E> +<008D> <007B> +<008E> <2111> +<008F> <0062> +<0090> +<0091> <004E> +<0092> <004A> +<0093> +<0094> +<0095> +<0096> +<0097> +<0098> <007C> +<0099> <21D2> +<009A> +<009B> <27E8> +<009C> <27E9> +<009D> <21D4> +<009E> <22A5> +<009F> +<00A0> +<00A1> +<00A2> <0046> +<00A3> <221E> +<00A4> <221E> +<00A5> <2190> +<00A6> <2260> +<00A7> <2205> +<00A8> <222A> +<00A9> <2229> +<00AA> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4389 0 obj +<< + /Length 21370 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +x| XU6H_r2#1΢&㸌vEot@!d!aJhU;y7_wy99>}DG͙ קsZV\Oœ]hQ\ >]|ψY<}<mQ1ѱ̎陫32ǖ?>g[>ܥEܲ[ˊ seOϽckNn\a1/nn\^fAfZYfL\~Nܕ۶l_\ğ.wofQYܧ[97/ygO*.=S0{N3eOoܰuaOEYż܂n +M%.o"{qctsǜwn΁;b뮁;uflZ;&*:***1m\T'rG]m#u&Dl cd=;ww/3WJ}{0ne{}uC.w=;q~˹=;WPCϻ_G~Gzlcŏ_㉹O|J{GOv|ݛ׏nxu}j6 $lۚmmcG·wEJKT&~7ɜt={HN{9͓C'W޿>a{Ulr5>4l0U89ۦŞaqSa0ݔxuAnh:ڦ6@0BST+]V[u(EKg;H? +/a2Hƞ^bvqBQ׌*csQo׻. Ii!S1}%Cfp^m0/u +U)ʢ~r^ ubeg~{vWe j Tj4wAzz"Tc7ף x:6cI xދD] J[ P(P[Saro 5WYSwAWjet kZ\T*pѣkz&t^@^Ycqw@Qnuf"|?9DLlm6 k|r)\Жs)*PԢrַ +V䤃:=[ +:B6Q\k@fQ6re$kw^u\&gi'No qq.ַ ƌUר9G6:SpCᖮfGNEQZN[ )/:c3b&_Y+ϒEǚ-MN?@IBL T?Vm}_y.u+ԛ ik\20D "y 0*-J>S 86M'V(A +ʫv]Xܿv'' :62$p]{0͈a*hUmyU2O8L@Eޟ[WKC>b˞tayn~,kcy"e)b VݤEESM Ԑ#jnQz \&UpD @ά5H{Ӓw]m{ӡ7LF3]kEz굺ɻV?2 "5. |v&IoĜa)|Z ߍMSO6 +`MfZiɈm16a}s3), +n>Yg-cE'bR:? x ޡkZ:qTk 1jLڃ{Vw<ս +Z/~dQiwjtЂܢvL1w8&/o/ĭZÁ + *h@fV;@E*%sT]@5]mb_`WIvHNNH<YZ*.V0 mj(X(JA B |P5,W5]'j9l-&{xtA}9X+T"jnBЫA MੳCn!,~S#xbJr@L$H.FwCNylz&UJDJޒn~kov k;a,`Gr(-H39~wX՝7=/@1ټ]7~8ᎎ^*IW17}X3=1~*^N ^wۂTȉ,Q2$:+Q\=5R؉`$48+"ʠuFR;?_'=FarW@= +ԜUR/O!~}n!fb?BoG?M8lvCe N MkbAi6ۖ)"JfUrmS34m# ^[*PiT&CAZ.DݘL[+ Uz8d1yNS@0IK/d lҴ>;`qhP>u+@U +E%נ=?iAKp$v쉯@vE= v GL|;#>26Q$UMٔC2!ǡ/jոLV:V Q8Kxt:xWG@t\<*a t i/O>^*.}cCRNE +jt::ʇ*zsl "z߆7XC7`j SxZnE< G/0  +*aRZ4vt4AKQx$) +ABٮKxX*m qX-U\WÊ@Dj{ ww}66}zOHdƒca'ff 8NnPB&MxZ4_H 3&@`PfM-~T)=|=d_3R IZQO4kn3[b&Jq8mm76%\.)rahJă=zB߳c$' 0* +wmo~]eW%GrƢחq& +Z\Io#\? 3K"Iff뻴>ɔE ^htS5Ѵ"|5\aΓqj;~&od IR@XУiU6}%]]]\.wЩ5<ƫM5"ĪZU + P,U"pgp8C-Khlϋ:94eSəݣ\$c՞-XY՜#܏Hę?>q/YFuTX' +qk( ɻlOmVy*OKнI"㳽Gam a{yjJjJ627np"0r;=L$ R J$H|Nk!of:dEV~1tȆ򙾡 H`MMeS\l6 UWęA\0z*6_c6-]A/,z]-60s d@,Cxg +_q{&çZRI/NA +w"ly{}8vgsv|?z* +Ȯ  Q-Ջ dzAWih>z +{ CoaB}!݄2=W&U^a u,`Dƙ9ڙ=MZeW8vŃTa+]`3mvl`VD8Yn8-ܝӟNX*3b :4 c%5It_K=o62u;hw1qbGs[&[zNtY,.j!M%J*A uSIjԢv9C+ Fݺrc\ 1xˍ.eSOwBjEVvV( v^G5UhA:op4\gX|Dmr`"D2`}īPTjun+ 9qGCE68{;Ja+}߁Q8PWjfQQF˩!D=mفdH~F0RQ^)Ɂ.QCgP4Edw|=Tj# 9Xִs_,Xv7 [[uZr3t$6e KF%(E"}Q8KϾGL\aoĿƐgcR}ԥnj0UqAW턺\& +}rN u\ny8xz^c~G= +@;wJXZSX)(AcP&0m&7MZ.awx.!knvƐKP+q + vפdA +鼔D؄^M]]H[S g]5hoOd>(4,[f ¾HC] h6sB]&hn!yKSiZy<N=vSt}H衁ş!v\=9IcȝSOpVw3eRjm /{gyZd:r}EaQ~_Oxt9I?bGlw^+Z"Mt G&;N 4ez2&*X[LL3vsxkj 6i+A bv7kk\% YjQt\y`4NXo .EeX[H& RQ%s#PE#ʠVQkSʶj+r9Mr ^8n&Yv;3Dʌ5Qm87N~畮z^"J] + U{L64YTZĆΠń'Z!UTp5a:17}vq]!@B[ :5HΐZN5%]i*4>9uG'l:ڂd<",l9%NFT2Ʉڢ6*A2H@iT[ Z%H27bXd¢l4Od8|aj%zjj)z8WsƥlҵMf~jJ"D[6sĮ7rO^WM UإeJAMmyP+vXz\&ד AԮնpY"r\?i08lF>Ú`Z=2yPt̾e6 }wXſcCR묵Smzv(1 ˔jtb*tWKp j;wx78Vw5zGAe(ll y tA%1UkIJa* hܺZB6Rvy-M]@uoNxrsٟZ*(>^oC^(KbX+R 4UUZhyJ$I96HԳPf4݁d*U^GBV+@ +RҩF{qfvq$ߢ~&X0MFLmml˨~OX܏!e+MPt:АzbS[?-.9dm1J+Y{7$P5mw|l:irL4{j}V/MEW/s ?/ۛNgMY8"Ia,MߎôwT"PRvU/dbKfdz7ovGni%TBKľq@Ҳ7l7X^a\0&2qGBSC,L>}cރpWKjN4qGQ>RuV"VфF ˲rTɻkO_XQ8[D@̯AO :F-|TTH L +Ogpyxp^φp{b4D CH֮t:*f֗ipDLA\]C_#_Ɛf'qC^"utgKhMO X6B KdUA 5fRN*q,@wv5v~t Di8d!wqu?9uNztk\eUR9ab/ W}'cV#fN?*݃rVpfk*T}|O5X gYwϵ+uʽ_X#ddZ28;!tOigA+wKxM? O0 b{k1l +d2u TrړS$$V(4T5\ŕ"DSBkY&nz"PhrxT1s,2kΡ Za&u0) j"f"_#Q(h_ zь18-֢6 + Bڤ3`C=KfՊDkks,~Cbz@JA ;b@̼,.Nɗ:YWfvhJ`'rɂќNH"j Z;6t= P\U + 1I-uq3y1>tF}ɽ0Αp]k2!%~ Ae# A~VG0ԁ[R#֕4?2~G*kSxCAL,XA%ZUΚgvSwjސ*?Zt9oiyI9PvcރvGR WrPbPw z7yn9#87 5#SOS +8c^/V3@Wh5jij+Xo+5Ib+ZU.Yo @Ì6ôRDpqcK>zYT _Mڒ:8!iٌDP]Y~AKiP W`2t@AeH܀("⯥! bo;KDE!DE1 +:۪Zl7]]H'WAm|GSQ,bބoDoa5{Ł`}= A>:cj0P +5?mƯk Ď[p3~3qF;raE'¦Nulz8 4Ch !@VPbޖe@Eß_* +9 ֕sck@_Vc=Gˤ*C%2DcDHʉp}} UGJ%:cp91&J gѾOc0A'` +Kɗ @qP7Kb?Ozx)5r$%y;Ϫ7:aj(L(qƺ\-DZіuP=3a,.4SP($0m_#{ & `'•+.<ڵq4/Ɋ%$=:JKN2Oa8E/f6#ɑ҃ӈ|}X;zth4 09F%ľ M80YޭnXh:ʞ>VI$VY#>tת\B.siy/9?˺> +`y 16|#qHWoLYaUhxX Y̎s 5t#NyYpD88-V.~nRIVu!Q=T3։glHߙ VCf@-\n]?pt_(KۖqU0c; oΑsӵtXeWxdLt8U9G?pix#XGiKAWP u6wp(WXliy0u,F1l9(*9&3 ,$nY&E<@ؠqp +N>Ca#D33 =_28p*mfl'9$xV*%u/rZz`z^B5pnFWfVʌ ʋJ6l)wVZvR/N9㕑P7~`C\|g.5t5kwٰp놤 ՠi@y1f s:ҽ7do8p#tl-|(RmԽ@=|SI*?m)DbەeqMEaFTj,5꺪j `p: =^WiD L_ɐi(0LOIeQ@wt 7E>v8\.U'G{qQ_ZOcL_-(CeU͝mmԸ̝#cM'Xs!G\殞Ű 62QBfF`$Gדёѓ2Q|wvb;=lয়z3 slްm!)a=-7\mmg?al,ALj-FbMjAΤ5m\̽Yx{>~}s⑈d4e?^[kPSEnceЙfq]bQc_|5W'!}5m-ڨ5i,~{^_*H-ZN YLmK%gBŒX7.YK+⿒!6F)!j%Q Tʇ 1ގ=e:e!|'¸n(|>϶lFB ]%t +{ĥ\A*U}Io4~B\]M?EYܓpihxhN±@,* y36Ww6X&:lNo$I3@#ݧ6j @r\ĥF7pgulPzR JⷰG&8uϣ>! [k j1#e`wSCce* nzvTyReVW6U C\TSyD[ zkZh7Y~GQ;fk5Z-BMe3Eoe +¶0mAWԁKiRT+eHs3@5dG=׽gF: "[{ Ԟ:![#q,&}uI.bw67wrW24? V 29'/%jIQ |gxSR-mD-=wԡc#=mu3 BNKM] [!*=?5|l09̣eWK[q}5kɆ;|-mN*MBk9b}jOBQ"aqM5Α@p9\Zz 7kщ & +}N&B?kZ6|స\nz5B()+b΢grQ%ؚ!xSFXn=J hvSr<<BAFJ^aB/Q|eoJϦUnRV)5(o3u_QP9+e}-ŒCNP4HŒoMuzUvDwwh[e^o "^(DL* c10#ãO`MR+ 8e $`˽q^"ĿgSXc0j ·!1UǒzIc1%2}(i'ce~Yf8 ~dv?$Ų&>e_s?.y{%Scgg)&b}'eP>N?7u~n`ݜ$o#9=99=9N'evܧ7X*cY]$uX=GaɊّMlAV`í6GB+@JQ!/hdP ج]|k +5Ti0@ +EPj4Ann' !/1瑅m1`Ϊ6!*Zʨ}':QT:TQe"LV`5,K_x)?ǜwq3g}G.`ܱRD%B(=⠺IU ~ʠB! axVD-wI6?/{żpSH[ Bt \e6 qd w!hyxH8 \<|.C/cb&0Qx0+Z֦sȥrpx Q"^{_u?ʨuuœ O6!.Խ7#}#/NbgAW+[Ԅ1rԛfЈ*7IV$f''Kڭҷ}8%hGIICC;!8okyPG!  ud^ԭ&ʨkU/Cv1v?]G:abT"V$wM]iMS*+4X^CPk-4;U.R*}5t 8,qzC: zLKinX(a#lf)QeBΐM^=ގPElHQ Eg֛NOfsZgV5ii[;{;s댹-Ni "]}hh/@ Z%Wm'#6dclnO;ߖI݅7HMiBY%K5zN1Iv_Cq#ګ vhЉP=]5-dЗrA`oqϴ(_do +y];EEA}a=O[PjkjuI9ThHrqXRgԦ1V p%juqi^izoO.EBwDQҐٛXPa[9;c4zɸ^s)oڇaE!N +l/Z)%5W # F@Jz*ԩy@ Ar7%ږH%̸PV[-PO>uw6c$GURԃzob}v2- + eu4pU G + +-pdb/uEA~OQ.tA +$x3*TV䀤*Kg XLv[CB,eS CI.=W DroVaQ>E+ `1:Ƣ)=D5 d]:CmQN+}N5RHTRCG0ٽ梢`9al ыޜM7'rԨƥj:0!_RbgyR3i=G8f;XUc5q⌧Gxf=F}_4| [IcI;2\,+.&Q$PGb_U +S lrXWҩٳm + ^OnC: [%mO=H]쳈B=(5N^[ H$,`- +s>0C3]+,njW ˋkx8 nװkj991jʿVqy7AG36VKV(sYKѿ\bUKs"4}'"d٦3#FN:@LeRe1Ssq={Ƈ96Fx=a4`P1(@Q+;*8kXjЛ9f'PVO>kr'LK`2'Gb Bv=x<D)7 KajQ7 V zpbv \B6&,t= a|8q_|lJK?}nھ/ ܐAg[FZ2Eb‰ƣaĺy:Io:zg:_RnYMNaZZnZnRN@N`% %uovSҳҳ+W15 j b# &vAH+8j뷬Ϧl/ݚєK|.Hm:=:#zd:BZ2vfJ!Ydbݼ顷羻dkuz#|X3jָ)늓[i'}IMI$816`1H!$ & 1vpl8nW Mi\|q֕vZJ蜳>})1ى +ƷI,%иX+s=!DH*J&ĖD?*CQ +dHW8d2_HXvg}cP߄pwX"cѼo^yAHfjV٠7;.@nEV>ԪBDgMЙ(!kW/n,e{dnB.xz[fv~㉐`dC>BU>-` VT/ s[1ȸ|.ZeAmTbciQ>Xhf Rz@SWׄčYx?2e,<Ë'^[&;"ۧUgO1RxT[Q\.)b(6.aM3a!хdì=.i(\j +!8 }l50R;Μ+l_gǃvSwc)=H)Ίrg3S^οMޔV}U6`i0 WkADhGfjMJL\./sv99/3Ե)@GvDC|Ijbu"1[ MRnaRejGuz .h4:;?kYA-u& +ͪBienF/z@=n A4[ ( 00wڻu‡T#;r@~5WPl4TtEEQ C]ΊlWۗZz]K @.jP{/zOE1q(ZCF4|*Xr{cdϛ]x EO]yj]txF{:-vJnebe$G"@)y !ԨX)r"{gL rſzӺ7uɺ|MKm#sa*,*@UIl'`. !aQ!*+%j A5\Ҏ77/KQg:2j2m =`k5vm|@1Q' ~zϋߩޕ^sL/RعEά$HL~ ?1oGg:* soq(;+ "UVe[I u>a3}o ⇤xc1g 7@k`&@,84w)HdRiJd\i,+R@dy%.,SJp~`${9JI ;-zQ^ƩPEL7}7p- vn4Xz+e@*ā-}.y*;2^[/L_eJݎ,{-ʖg~vDɗ㳞?kj%zAb;`o]r]E v,0ubũUP &X\x3&QW`c~|,X-zhDwR7#"  8(HL͌Ij IRs\4DGA߸}ÎGvq9%[dbP@Q zQҬ`}wGoD, +Ο/P܂_ u$ͻgHIedDzAvWt+B\f+et%&Zg;Gz ¹]pvbkuR3ϏK=j M8 z@(T1SY)P~ +k,^!}~q/\sgϺ='"xk{֢>h531RGzz=3oql~5^g1e2e- b 4# ~` IkAub ~x^ S D$Ek64{ažV)) +M;.%*xG9v_ނeœ7\{1@I(VT% ~u(.X^G 'A64rr1 hQ3^]VW ub⳿/;Ȫ1B Ꚍann}҈p"DW"k[體P4TŌg1@gF(A,_ Z bgZGeE?UwQ\w(sdd;=u0 {2 2{80j;'4zhnD lu.mGEQGh(eNE޾L[os5<q :^ kv%þ${{C7 +ׄd 9~Xp?eZ3YC17HR|Wd vP+JQHqٛb2a[;u,$!_BbN,~1ѣ hAi8/8{0bWf;)IW@?~bhK?Yl5E$ i6sqCtpӉR{@VU]oEW!YAlm<-[KClA.3jo:l?F&877jQj_mo +dSTq@]-!.,ZF/A4I#QPC8'aM8ؗF/IGj}kE/<8֒ƚ~}_P(( *7-IQ#{q7Ӹ462@亰 nd|IcD>rFiKMBk%eЍo1X}VNV^ZqZf%_ :g59^^Xv-G3t8bL\/ʵGZ ZKȲ5i !0m^ld C2RٳSK6ugT<;Tt҄g|TV +|ZvYhV[hcNxb2:D露x'I8BYSk~` fkʠ40=WqTQӠY|k;׸ε̍+2t K( MZL`˴aa ndҤɾy2lg mF u~$(cڙ(nBbZX0jL4DYKi{^f1A ЂNU'9 dwMN}{&KJS2hٗڕ6C],\wK{IzZ-fo^Xvk B}Yqڨ'mZ=NZQ+ceiu\)W +j3TJ*ն8tuV$t:h~|RITUrQna:Pŋ=›+K}i*T13D"["uF_\T(kerJTW&!E_ @'c0l"~qsBEMAAazkZYkzԊ_Zp_Caޖz;\B'p ocL8NJka%zn !5D]Bt%qe> +endobj + +4391 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /ZXCGTT+LibertinusSerif-Regular + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4393 0 R + /DW 0 + /W [0 0 500 1 1 375] +>> +endobj + +4392 0 obj +<< + /Length 9 + /Filter /FlateDecode +>> +stream +x; +endstream +endobj + +4393 0 obj +<< + /Type /FontDescriptor + /FontName /ZXCGTT+LibertinusSerif-Regular + /Flags 131078 + /FontBBox [0 0 500 698] + /ItalicAngle 0 + /Ascent 894 + /Descent -246 + /CapHeight 658 + /StemV 95.4 + /CIDSet 4392 0 R + /FontFile3 4395 0 R +>> +endobj + +4394 0 obj +<< + /Length 619 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +1 beginbfchar +<0001> <2023> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4395 0 obj +<< + /Length 344 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xcd`aa`ddLJ-*+-N-L JM/I,ɹ!#CAAB<=EFBOVY \ (>񨀨W< ̌l|ގ)I)y%%E% +BHFY +EY% +%Ez L 8Θ;u3VNe4]yn\oMOQ4@!!&FFߔ?^cCe/s7ˏ~:nn}wߓX+ +bW}c3wOd{||95~Rl; +endstream +endobj + +4396 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /LCCCWY+DejaVuSansMono-Bold + /Encoding /Identity-H + /DescendantFonts [4397 0 R] + /ToUnicode 4400 0 R +>> +endobj + +4397 0 obj +<< + /Type /Font + /Subtype /CIDFontType2 + /BaseFont /LCCCWY+DejaVuSansMono-Bold + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 4399 0 R + /DW 0 + /CIDToGIDMap /Identity + /W [0 8 602.0508] +>> +endobj + +4398 0 obj +<< + /Length 10 + /Filter /FlateDecode +>> +stream +x +endstream +endobj + +4399 0 obj +<< + /Type /FontDescriptor + /FontName /LCCCWY+DejaVuSansMono-Bold + /Flags 131077 + /FontBBox [16.113281 -176.75781 602.0508 742.1875] + /ItalicAngle 0 + /Ascent 759.7656 + /Descent -240.23438 + /CapHeight 759.7656 + /StemV 168.6 + /CIDSet 4398 0 R + /FontFile2 4401 0 R +>> +endobj + +4400 0 obj +<< + /Length 717 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +8 beginbfchar +<0001> <0052> +<0002> <0045> +<0003> <004C> +<0004> <004F> +<0005> <0041> +<0006> <0044> +<0007> <0055> +<0008> <004E> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +4401 0 obj +<< + /Length 4326 + /Filter /FlateDecode +>> +stream +xXypTǙ^ϥc B\bFBpY⑑YB 4#Fd#&)qd ^(En[8*d7HȘVvf~0)nߛ/oYR Ђ~}U hC 7l Xis"}wv Ζ&뿋hӾnUh960Xg, uXW8V@ Я,e'pj c\62,`9j-Y. +{Hz*ѧe40N칪>NBc)hx g3qcylc,Wb6qp?g`q|2>>ȟ)>Ua:Yך+<;O-Dl.XZg+6 .3ŋSx Ϡ\u| gh)?,V`ɯ$c?zʒΊ|8>u +|~-2ܰFaKG]~͛u[<[{:/Tm]QnV3-!VX\fs|bcDi=*R0 Kl +bΎ)]Yv's\#C#"^H:,ve.,s ~[DtE"7evFLgvƈqό?> bG}#ƣ>v׃wAu+-Ah ras#d)dv"WpdUS8qHpdNc 8EVXKlV0C_Vh+KmqudO~k'Tmƾe\fo\Ƴgx!cz>ܘ=b.rӲxR|PL@+?)3_w>kc+Y׸`|x_{>fV9FxQoV>73 +f9,;SfkN9pMY++w4Ov]lkƟͥ#ءC1>Rob^1|v4gZ4Ւg!0϶c# PԌKiycl{0ե1e +;ŽY؞+{*Ӎ;>{߃8k=ԯ\'̶Mw^KDG.K`P;QcwFu~I"%!"8Wp1"1,=ZPδkX0,BPXp'A`l3plk?6a>5zR#̶lٶ!՘`1ΘtDjt"Bv"n0-(A Çf ݈] QJtE hXqyFatAB(GЄ- )G$}hC|hGZCIMi(a=:сN܋N#|#7KqAc8/* +ݦbBnİ(F zP8:у. ,vIEЁ0& -P"RFF ŨfюN|EZV67@_LEcYvÇN~)YċJlT6)?*{ãTU6nb33^YD3NӗSfd1>Ǜ"E3b2),׏,ɑsCWމO` z(k>hCF9Yk_^3υ1MĝЉz$16!遈X#С(J2"rwʈx(?Q=RÂ舶e,c73~}'zPm{)*ϔṇRYHVgvQh"S'M\* aH<5&9]2!m4qs9 ;X 1n !pEǍMؤ{@&3O1i+FQ߸Qع](&Eo5^+9b?]qUgتK(QA'%uLDsZMr@V碪';{*-8[GZ +i5(b 6b P/*PZlF%Qr2#sj܂JXMKaԣLb7'EZ#P˹*mTA֢^bGQ)mQM(UjP+bIVdz ֣XufoE5]3sɴLj$jlBw7uES lkkPoR!H(FQ:4k% ai9R\oȬV]Ŭ֌haSo FV -T GqV"JM?Rz(0DPQY=:>)*"e2n/<4LIm|t&ˎ%&P +HJjS[^8n&s›Z!*e$Ƣ/"nUE?DY *QRzQ6qdgbL7dPX #(:)j'#\wU`bNǪ iM.VN7vW{I&;ODnl\djhUΏDTbH}m-u`gs|j QWbnXrsHV1O(uaܯ=.<#9h@ v_0yy0dx-?w~ z=D} n:AA?2̫i0F$ŠW_~$ܫ|R#O ANM_X_4Ło/<__XKϗss}ߠ 3]w/e7 [Ơa?y:Oe҉']tOcGc==OG{#Gӑ<:F;>zԠG.Hzeʠ`@Z=v?f}!kЃux<.Q5RguDyDUt_e*3h05{:elfY3 /kîO3h44Mpڢgyije3hr. 3 +䂇Lʝ)lNM)NM)NrmTnsMyh85CnvnqeԹCpiiIK#g:|-_] +endstream +endobj + +4402 0 obj +[/ICCBased 4404 0 R] +endobj + +4403 0 obj +[/ICCBased 4405 0 R] +endobj + +4404 0 obj +<< + /Length 258 + /N 1 + /Range [0 1] + /Filter /FlateDecode +>> +stream +xuJPFOUvDD@`]\ +FMkIRB|&إnऋ(HrTų9` ըa&ʺ:l +3Ŭ*ުnh)&C|>b纝黓AvCƫ+ y') +̵8+/> +stream +x}Kq?UX 94%MQKSN#ԦQvBˡhFk ! +ՠZP~xx^ޗQx"^P c!H0 + 0l+ߣy7;׫;Q?V._tF3LEK)y z80eIPkT/%[p:8+%d"G `d_{ٹ֖gzm\8rSif1\CU` S] @o _ +endstream +endobj + +4406 0 obj +[4743 0 R /XYZ 70.86614 563.1574 0] +endobj + +4407 0 obj +[4743 0 R /XYZ 70.86614 227.6214 0] +endobj + +4408 0 obj +[4756 0 R /XYZ 70.86614 473.5624 0] +endobj + +4409 0 obj +[4756 0 R /XYZ 70.86614 189.85742 0] +endobj + +4410 0 obj +[4743 0 R /XYZ 70.86614 270.0724 0] +endobj + +4411 0 obj +[4769 0 R /XYZ 70.86614 546.0924 0] +endobj + +4412 0 obj +[4743 0 R /XYZ 70.86614 751.3704 0] +endobj + +4413 0 obj +[4787 0 R /XYZ 70.86614 660.6094 0] +endobj + +4414 0 obj +[4787 0 R /XYZ 70.86614 224.9267 0] +endobj + +4415 0 obj +[4799 0 R /XYZ 70.86614 484.6444 0] +endobj + +4416 0 obj +[4787 0 R /XYZ 70.86614 766.8504 0] +endobj + +4417 0 obj +[4803 0 R /XYZ 70.86614 438.3524 0] +endobj + +4418 0 obj +[4808 0 R /XYZ 70.86614 766.8504 0] +endobj + +4419 0 obj +[4803 0 R /XYZ 70.86614 592.29944 0] +endobj + +4420 0 obj +[4817 0 R /XYZ 70.86614 651.1064 0] +endobj + +4421 0 obj +[4817 0 R /XYZ 70.86614 149.31738 0] +endobj + +4422 0 obj +[4820 0 R /XYZ 70.86614 212.80957 0] +endobj + +4423 0 obj +[4812 0 R /XYZ 70.86614 162.83142 0] +endobj + +4424 0 obj +[4829 0 R /XYZ 70.86614 141.41962 0] +endobj + +4425 0 obj +[4836 0 R /XYZ 70.86614 326.0504 0] +endobj + +4426 0 obj +[4840 0 R /XYZ 70.86614 193.52795 0] +endobj + +4427 0 obj +[4844 0 R /XYZ 70.86614 367.3716 0] +endobj + +4428 0 obj +[4829 0 R /XYZ 70.86614 554.3584 0] +endobj + +4429 0 obj +[4848 0 R /XYZ 70.86614 358.31302 0] +endobj + +4430 0 obj +[4852 0 R /XYZ 70.86614 403.732 0] +endobj + +4431 0 obj +[4848 0 R /XYZ 70.86614 443.95 0] +endobj + +4432 0 obj +[4803 0 R /XYZ 70.86614 766.8504 0] +endobj + +4433 0 obj +[4874 0 R /XYZ 70.86614 461.0124 0] +endobj + +4434 0 obj +[4884 0 R /XYZ 70.86614 442.8364 0] +endobj + +4435 0 obj +[4899 0 R /XYZ 70.86614 266.8504 0] +endobj + +4436 0 obj +[4917 0 R /XYZ 70.86614 483.2844 0] +endobj + +4437 0 obj +[4864 0 R /XYZ 70.86614 344.5394 0] +endobj + +4438 0 obj +[4921 0 R /XYZ 70.86614 562.8894 0] +endobj + +4439 0 obj +[4925 0 R /XYZ 70.86614 644.3064 0] +endobj + +4440 0 obj +[4921 0 R /XYZ 70.86614 703.17444 0] +endobj + +4441 0 obj +[4941 0 R /XYZ 70.86614 614.0324 0] +endobj + +4442 0 obj +[4864 0 R /XYZ 70.86614 519.0904 0] +endobj + +4443 0 obj +[4947 0 R /XYZ 70.86614 460.6354 0] +endobj + +4444 0 obj +[4956 0 R /XYZ 70.86614 573.4164 0] +endobj + +4445 0 obj +[4973 0 R /XYZ 70.86614 703.17444 0] +endobj + +4446 0 obj +[4976 0 R /XYZ 70.86614 689.5124 0] +endobj + +4447 0 obj +[4976 0 R /XYZ 70.86614 171.0354 0] +endobj + +4448 0 obj +[4947 0 R /XYZ 70.86614 566.8764 0] +endobj + +4449 0 obj +[4998 0 R /XYZ 70.86614 687.9334 0] +endobj + +4450 0 obj +[5009 0 R /XYZ 70.86614 716.8364 0] +endobj + +4451 0 obj +[5009 0 R /XYZ 70.86614 150.51141 0] +endobj + +4452 0 obj +[5053 0 R /XYZ 70.86614 593.8784 0] +endobj + +4453 0 obj +[4998 0 R /XYZ 70.86614 766.8504 0] +endobj + +4454 0 obj +[5066 0 R /XYZ 70.86614 682.9724 0] +endobj + +4455 0 obj +[5066 0 R /XYZ 70.86614 331.1374 0] +endobj + +4456 0 obj +[5066 0 R /XYZ 70.86614 302.23438 0] +endobj + +4457 0 obj +[5066 0 R /XYZ 70.86614 268.1104 0] +endobj + +4458 0 obj +[5066 0 R /XYZ 70.86614 233.98639 0] +endobj + +4459 0 obj +[5066 0 R /XYZ 70.86614 199.86243 0] +endobj + +4460 0 obj +[5066 0 R /XYZ 70.86614 179.40039 0] +endobj + +4461 0 obj +[4756 0 R /XYZ 70.86614 101.267395 0] +endobj + +4462 0 obj +[5066 0 R /XYZ 70.86614 117.95239 0] +endobj + +4463 0 obj +[5095 0 R /XYZ 70.86614 766.8504 0] +endobj + +4464 0 obj +[5095 0 R /XYZ 70.86614 684.9404 0] +endobj + +4465 0 obj +[5095 0 R /XYZ 70.86614 650.8164 0] +endobj + +4466 0 obj +[5095 0 R /XYZ 70.86614 616.6924 0] +endobj + +4467 0 obj +[5095 0 R /XYZ 70.86614 582.56836 0] +endobj + +4468 0 obj +[5095 0 R /XYZ 70.86614 534.7824 0] +endobj + +4469 0 obj +[4756 0 R /XYZ 188.99736 745.5764 0] +endobj + +4470 0 obj +[5095 0 R /XYZ 70.86614 486.9964 0] +endobj + +4471 0 obj +[5095 0 R /XYZ 70.86614 452.8724 0] +endobj + +4472 0 obj +[5095 0 R /XYZ 70.86614 418.7484 0] +endobj + +4473 0 obj +[5095 0 R /XYZ 70.86614 370.9624 0] +endobj + +4474 0 obj +[5095 0 R /XYZ 70.86614 309.5144 0] +endobj + +4475 0 obj +[5095 0 R /XYZ 70.86614 248.0664 0] +endobj + +4476 0 obj +[5095 0 R /XYZ 70.86614 213.94238 0] +endobj + +4477 0 obj +[5095 0 R /XYZ 70.86614 193.48041 0] +endobj + +4478 0 obj +[5095 0 R /XYZ 70.86614 132.03241 0] +endobj + +4479 0 obj +[5127 0 R /XYZ 70.86614 766.8504 0] +endobj + +4480 0 obj +[5127 0 R /XYZ 70.86614 719.0644 0] +endobj + +4481 0 obj +[5127 0 R /XYZ 70.86614 671.2784 0] +endobj + +4482 0 obj +[5127 0 R /XYZ 70.86614 623.49243 0] +endobj + +4483 0 obj +[5127 0 R /XYZ 70.86614 575.7064 0] +endobj + +4484 0 obj +[5127 0 R /XYZ 70.86614 514.2584 0] +endobj + +4485 0 obj +[5127 0 R /XYZ 70.86614 466.4724 0] +endobj + +4486 0 obj +[5127 0 R /XYZ 70.86614 432.3484 0] +endobj + +4487 0 obj +[5127 0 R /XYZ 70.86614 370.9004 0] +endobj + +4488 0 obj +[5127 0 R /XYZ 70.86614 336.7764 0] +endobj + +4489 0 obj +[5127 0 R /XYZ 70.86614 275.32843 0] +endobj + +4490 0 obj +[5127 0 R /XYZ 70.86614 227.54242 0] +endobj + +4491 0 obj +[5127 0 R /XYZ 70.86614 166.09442 0] +endobj + +4492 0 obj +[5127 0 R /XYZ 70.86614 131.9704 0] +endobj + +4493 0 obj +[5155 0 R /XYZ 70.86614 766.8504 0] +endobj + +4494 0 obj +[4806 0 R /XYZ 70.86614 408.4204 0] +endobj + +4495 0 obj +[5155 0 R /XYZ 70.86614 719.0644 0] +endobj + +4496 0 obj +[5155 0 R /XYZ 70.86614 684.9404 0] +endobj + +4497 0 obj +[4829 0 R /XYZ 70.86614 211.88239 0] +endobj + +4498 0 obj +[4806 0 R /XYZ 70.86614 322.02838 0] +endobj + +4499 0 obj +[4808 0 R /XYZ 70.86614 259.5064 0] +endobj + +4500 0 obj +[5155 0 R /XYZ 70.86614 650.8164 0] +endobj + +4501 0 obj +[4840 0 R /XYZ 70.86614 436.0584 0] +endobj + +4502 0 obj +[5155 0 R /XYZ 70.86614 589.3684 0] +endobj + +4503 0 obj +[4844 0 R /XYZ 70.86614 551.676 0] +endobj + +4504 0 obj +[4848 0 R /XYZ 70.86614 766.8504 0] +endobj + +4505 0 obj +[4874 0 R /XYZ 70.86614 766.8504 0] +endobj + +4506 0 obj +[4852 0 R /XYZ 70.86614 530.7204 0] +endobj + +4507 0 obj +[4840 0 R /XYZ 70.86614 690.6024 0] +endobj + +4508 0 obj +[4874 0 R /XYZ 70.86614 273.1394 0] +endobj + +4509 0 obj +[4836 0 R /XYZ 70.86614 249.72339 0] +endobj + +4510 0 obj +[4836 0 R /XYZ 70.86614 626.2924 0] +endobj + +4511 0 obj +[4884 0 R /XYZ 70.86614 166.1914 0] +endobj + +4512 0 obj +[4899 0 R /XYZ 70.86614 531.0484 0] +endobj + +4513 0 obj +[4820 0 R /XYZ 70.86614 481.9704 0] +endobj + +4514 0 obj +[4822 0 R /XYZ 70.86614 552.6725 0] +endobj + +4515 0 obj +[4822 0 R /XYZ 70.86614 114.11548 0] +endobj + +4516 0 obj +[4905 0 R /XYZ 70.86614 733.27637 0] +endobj + +4517 0 obj +[4905 0 R /XYZ 84.86614 575.9684 0] +endobj + +4518 0 obj +[4905 0 R /XYZ 84.86614 676.9084 0] +endobj + +4519 0 obj +[4905 0 R /XYZ 70.86614 397.0664 0] +endobj + +4520 0 obj +[4905 0 R /XYZ 70.86614 133.45135 0] +endobj + +4521 0 obj +[4905 0 R /XYZ 460.86523 491.3384 0] +endobj + +4522 0 obj +[4917 0 R /XYZ 70.86614 356.8594 0] +endobj + +4523 0 obj +[5155 0 R /XYZ 70.86614 541.5824 0] +endobj + +4524 0 obj +[5155 0 R /XYZ 70.86614 507.4584 0] +endobj + +4525 0 obj +[4929 0 R /XYZ 70.86614 111.99536 0] +endobj + +4526 0 obj +[4929 0 R /XYZ 215.36813 305.1084 0] +endobj + +4527 0 obj +[4941 0 R /XYZ 70.86614 123.72339 0] +endobj + +4528 0 obj +[4941 0 R /XYZ 70.86614 101.267395 0] +endobj + +4529 0 obj +[4941 0 R /XYZ 424.47882 581.8794 0] +endobj + +4530 0 obj +[4941 0 R /XYZ 448.44293 568.2174 0] +endobj + +4531 0 obj +[5155 0 R /XYZ 70.86614 486.9964 0] +endobj + +4532 0 obj +[5155 0 R /XYZ 70.86614 466.5344 0] +endobj + +4533 0 obj +[5155 0 R /XYZ 70.86614 418.7484 0] +endobj + +4534 0 obj +[5155 0 R /XYZ 70.86614 370.9624 0] +endobj + +4535 0 obj +[5155 0 R /XYZ 70.86614 309.5144 0] +endobj + +4536 0 obj +[5155 0 R /XYZ 70.86614 241.26642 0] +endobj + +4537 0 obj +[4822 0 R /XYZ 70.86614 260.2793 0] +endobj + +4538 0 obj +[5155 0 R /XYZ 70.86614 207.1424 0] +endobj + +4539 0 obj +[5155 0 R /XYZ 70.86614 159.35638 0] +endobj + +4540 0 obj +[4973 0 R /XYZ 70.86614 111.99536 0] +endobj + +4541 0 obj +[5189 0 R /XYZ 70.86614 766.8504 0] +endobj + +4542 0 obj +[5189 0 R /XYZ 70.86614 732.7264 0] +endobj + +4543 0 obj +[5189 0 R /XYZ 70.86614 684.9404 0] +endobj + +4544 0 obj +[5189 0 R /XYZ 70.86614 650.8164 0] +endobj + +4545 0 obj +[5189 0 R /XYZ 70.86614 603.0304 0] +endobj + +4546 0 obj +[5189 0 R /XYZ 70.86614 568.9064 0] +endobj + +4547 0 obj +[5189 0 R /XYZ 70.86614 521.12036 0] +endobj + +4548 0 obj +[5189 0 R /XYZ 70.86614 486.9964 0] +endobj + +4549 0 obj +[5189 0 R /XYZ 70.86614 439.2104 0] +endobj + +4550 0 obj +[5189 0 R /XYZ 70.86614 377.7624 0] +endobj + +4551 0 obj +[4973 0 R /XYZ 246.03696 507.1394 0] +endobj + +4552 0 obj +[5189 0 R /XYZ 70.86614 329.9764 0] +endobj + +4553 0 obj +[5189 0 R /XYZ 70.86614 295.85242 0] +endobj + +4554 0 obj +[5189 0 R /XYZ 70.86614 248.0664 0] +endobj + +4555 0 obj +[5189 0 R /XYZ 70.86614 186.61841 0] +endobj + +4556 0 obj +[5189 0 R /XYZ 70.86614 138.8324 0] +endobj + +4557 0 obj +[5221 0 R /XYZ 70.86614 766.8504 0] +endobj + +4558 0 obj +[5221 0 R /XYZ 70.86614 732.7264 0] +endobj + +4559 0 obj +[5221 0 R /XYZ 70.86614 698.6024 0] +endobj + +4560 0 obj +[5221 0 R /XYZ 70.86614 650.8164 0] +endobj + +4561 0 obj +[5221 0 R /XYZ 70.86614 603.0304 0] +endobj + +4562 0 obj +[5221 0 R /XYZ 70.86614 568.9064 0] +endobj + +4563 0 obj +[5221 0 R /XYZ 70.86614 507.4584 0] +endobj + +4564 0 obj +[5221 0 R /XYZ 70.86614 459.6724 0] +endobj + +4565 0 obj +[5221 0 R /XYZ 70.86614 411.8864 0] +endobj + +4566 0 obj +[5221 0 R /XYZ 70.86614 364.1004 0] +endobj + +4567 0 obj +[5221 0 R /XYZ 70.86614 316.3144 0] +endobj + +4568 0 obj +[5221 0 R /XYZ 70.86614 282.19043 0] +endobj + +4569 0 obj +[5221 0 R /XYZ 70.86614 234.40442 0] +endobj + +4570 0 obj +[5221 0 R /XYZ 70.86614 186.61841 0] +endobj + +4571 0 obj +[5221 0 R /XYZ 70.86614 138.8324 0] +endobj + +4572 0 obj +[5251 0 R /XYZ 70.86614 732.7264 0] +endobj + +4573 0 obj +[5251 0 R /XYZ 70.86614 684.9404 0] +endobj + +4574 0 obj +[5251 0 R /XYZ 70.86614 637.1544 0] +endobj + +4575 0 obj +[5251 0 R /XYZ 70.86614 589.3684 0] +endobj + +4576 0 obj +[5251 0 R /XYZ 70.86614 527.9204 0] +endobj + +4577 0 obj +[5251 0 R /XYZ 70.86614 480.1344 0] +endobj + +4578 0 obj +[5251 0 R /XYZ 70.86614 432.3484 0] +endobj + +4579 0 obj +[5251 0 R /XYZ 70.86614 398.2244 0] +endobj + +4580 0 obj +[5251 0 R /XYZ 70.86614 364.1004 0] +endobj + +4581 0 obj +[5251 0 R /XYZ 70.86614 343.6384 0] +endobj + +4582 0 obj +[5251 0 R /XYZ 70.86614 309.5144 0] +endobj + +4583 0 obj +[5251 0 R /XYZ 70.86614 261.7284 0] +endobj + +4584 0 obj +[5251 0 R /XYZ 70.86614 213.94238 0] +endobj + +4585 0 obj +[5251 0 R /XYZ 70.86614 166.15637 0] +endobj + +4586 0 obj +[5251 0 R /XYZ 70.86614 132.03241 0] +endobj + +4587 0 obj +[5270 0 R /XYZ 70.86614 766.8504 0] +endobj + +4588 0 obj +[5270 0 R /XYZ 70.86614 705.4024 0] +endobj + +4589 0 obj +[5270 0 R /XYZ 70.86614 684.9404 0] +endobj + +4590 0 obj +[5270 0 R /XYZ 70.86614 664.4784 0] +endobj + +4591 0 obj +[5270 0 R /XYZ 70.86614 616.6924 0] +endobj + +4592 0 obj +[5270 0 R /XYZ 70.86614 568.9064 0] +endobj + +4593 0 obj +[5270 0 R /XYZ 70.86614 521.12036 0] +endobj + +4594 0 obj +[5270 0 R /XYZ 70.86614 473.3344 0] +endobj + +4595 0 obj +[5270 0 R /XYZ 70.86614 425.5484 0] +endobj + +4596 0 obj +[4743 0 R /XYZ 178.1254 701.1934 0] +endobj + +4597 0 obj +[4743 0 R /XYZ 423.09903 660.2074 0] +endobj + +4598 0 obj +[4743 0 R /XYZ 382.28867 632.8834 0] +endobj + +4599 0 obj +[4743 0 R /XYZ 508.94345 367.1224 0] +endobj + +4600 0 obj +[4743 0 R /XYZ 153.22902 353.4604 0] +endobj + +4601 0 obj +[4756 0 R /XYZ 524.4094 513.3844 0] +endobj + +4602 0 obj +[4756 0 R /XYZ 317.62296 441.4094 0] +endobj + +4603 0 obj +[4756 0 R /XYZ 125.0658 427.7474 0] +endobj + +4604 0 obj +[4756 0 R /XYZ 465.35275 414.0854 0] +endobj + +4605 0 obj +[4756 0 R /XYZ 278.04752 400.4234 0] +endobj + +4606 0 obj +[4756 0 R /XYZ 238.44057 359.4374 0] +endobj + +4607 0 obj +[4769 0 R /XYZ 219.96544 670.46643 0] +endobj + +4608 0 obj +[4769 0 R /XYZ 107.44759 486.6154 0] +endobj + +4609 0 obj +[4769 0 R /XYZ 237.97284 486.6154 0] +endobj + +4610 0 obj +[4787 0 R /XYZ 293.1822 628.4564 0] +endobj + +4611 0 obj +[4787 0 R /XYZ 408.30182 530.1707 0] +endobj + +4612 0 obj +[4787 0 R /XYZ 108.7478 468.7227 0] +endobj + +4613 0 obj +[4787 0 R /XYZ 270.1342 407.2747 0] +endobj + +4614 0 obj +[4787 0 R /XYZ 167.72777 352.6267 0] +endobj + +4615 0 obj +[4787 0 R /XYZ 210.38522 267.32867 0] +endobj + +4616 0 obj +[4787 0 R /XYZ 355.5598 267.32867 0] +endobj + +4617 0 obj +[4787 0 R /XYZ 412.81937 267.32867 0] +endobj + +4618 0 obj +[4787 0 R /XYZ 503.99344 267.32867 0] +endobj + +4619 0 obj +[4787 0 R /XYZ 235.28406 192.77368 0] +endobj + +4620 0 obj +[4799 0 R /XYZ 363.59082 711.4524 0] +endobj + +4621 0 obj +[4799 0 R /XYZ 322.45868 581.6944 0] +endobj + +4622 0 obj +[4799 0 R /XYZ 211.09238 527.0464 0] +endobj + +4623 0 obj +[4799 0 R /XYZ 381.96036 527.0464 0] +endobj + +4624 0 obj +[4799 0 R /XYZ 153.25615 513.3844 0] +endobj + +4625 0 obj +[4803 0 R /XYZ 317.83813 194.46942 0] +endobj + +4626 0 obj +[4817 0 R /XYZ 317.01538 618.95337 0] +endobj + +4627 0 obj +[4836 0 R /XYZ 168.51923 670.46643 0] +endobj + +4628 0 obj +[4840 0 R /XYZ 292.8334 462.5704 0] +endobj + +4629 0 obj +[4925 0 R /XYZ 355.30414 530.1814 0] +endobj + +4630 0 obj +[4925 0 R /XYZ 414.00015 530.1814 0] +endobj + +4631 0 obj +[4947 0 R /XYZ 291.5864 428.4824 0] +endobj + +4632 0 obj +[4947 0 R /XYZ 168.92632 107.51837 0] +endobj + +4633 0 obj +[4956 0 R /XYZ 524.4094 684.1284 0] +endobj + +4634 0 obj +[4956 0 R /XYZ 321.3684 425.1674 0] +endobj + +4635 0 obj +[4956 0 R /XYZ 145.59686 124.665405 0] +endobj + +4636 0 obj +[4956 0 R /XYZ 120.04367 111.00342 0] +endobj + +4637 0 obj +[4973 0 R /XYZ 310.54578 479.8154 0] +endobj + +4638 0 obj +[4973 0 R /XYZ 481.62567 302.27142 0] +endobj + +4639 0 obj +[4973 0 R /XYZ 136.55405 288.60938 0] +endobj + +4640 0 obj +[4973 0 R /XYZ 246.84358 274.9474 0] +endobj + +4641 0 obj +[4973 0 R /XYZ 443.16983 274.9474 0] +endobj + +4642 0 obj +[4973 0 R /XYZ 393.09418 199.8374 0] +endobj + +4643 0 obj +[4973 0 R /XYZ 162.6677 186.17542 0] +endobj + +4644 0 obj +[4973 0 R /XYZ 395.751 186.17542 0] +endobj + +4645 0 obj +[4973 0 R /XYZ 178.73436 138.3894 0] +endobj + +4646 0 obj +[4976 0 R /XYZ 238.37125 745.5764 0] +endobj + +4647 0 obj +[4985 0 R /XYZ 209.40015 656.8044 0] +endobj + +4648 0 obj +[4985 0 R /XYZ 443.829 533.9084 0] +endobj + +4649 0 obj +[4985 0 R /XYZ 209.55678 411.0124 0] +endobj + +4650 0 obj +[4985 0 R /XYZ 122.979576 226.60638 0] +endobj + +4651 0 obj +[4985 0 R /XYZ 292.35217 185.62042 0] +endobj + +4652 0 obj +[4985 0 R /XYZ 398.23715 171.95837 0] +endobj + +4653 0 obj +[4998 0 R /XYZ 334.1413 567.0084 0] +endobj + +4654 0 obj +[4998 0 R /XYZ 414.36783 539.6844 0] +endobj + +4655 0 obj +[4998 0 R /XYZ 240.69826 355.2784 0] +endobj + +4656 0 obj +[4998 0 R /XYZ 390.9383 211.8584 0] +endobj + +4657 0 obj +[4998 0 R /XYZ 355.56662 157.21039 0] +endobj + +4658 0 obj +[4998 0 R /XYZ 524.4094 157.21039 0] +endobj + +4659 0 obj +[5009 0 R /XYZ 283.5666 636.8974 0] +endobj + +4660 0 obj +[5009 0 R /XYZ 111.38758 595.9114 0] +endobj + +4661 0 obj +[5009 0 R /XYZ 272.62112 397.8434 0] +endobj + +4662 0 obj +[5009 0 R /XYZ 219.68813 206.57538 0] +endobj + +4663 0 obj +[5029 0 R /XYZ 239.16399 615.8184 0] +endobj + +4664 0 obj +[5029 0 R /XYZ 112.72849 602.1564 0] +endobj + +4665 0 obj +[5029 0 R /XYZ 276.56262 602.1564 0] +endobj + +4666 0 obj +[5029 0 R /XYZ 503.99344 574.8324 0] +endobj + +4667 0 obj +[5029 0 R /XYZ 306.7424 335.7784 0] +endobj + +4668 0 obj +[5029 0 R /XYZ 177.65485 294.79242 0] +endobj + +4669 0 obj +[5029 0 R /XYZ 298.93057 294.79242 0] +endobj + +4670 0 obj +[5029 0 R /XYZ 334.41858 253.8064 0] +endobj + +4671 0 obj +[5053 0 R /XYZ 485.22726 745.5764 0] +endobj + +4672 0 obj +[5053 0 R /XYZ 308.39426 731.9144 0] +endobj + +4673 0 obj +[5053 0 R /XYZ 486.7188 704.5904 0] +endobj + +4674 0 obj +[5053 0 R /XYZ 263.03928 690.9284 0] +endobj + +4675 0 obj +[5053 0 R /XYZ 289.94495 677.2664 0] +endobj + +4676 0 obj +[5053 0 R /XYZ 497.94345 486.6154 0] +endobj + +4677 0 obj +[5053 0 R /XYZ 399.76514 343.1954 0] +endobj + +4678 0 obj +[5053 0 R /XYZ 394.7261 145.12738 0] +endobj + +4679 0 obj +[5053 0 R /XYZ 172.12447 131.4654 0] +endobj + +4680 0 obj +[5053 0 R /XYZ 275.54834 104.14142 0] +endobj + +4681 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /XObject << + /x0 5272 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 0 + /Parent 1 0 R + /Contents 4682 0 R +>> +endobj + +4682 0 obj +<< + /Length 2833 + /Filter /FlateDecode +>> +stream +x\[o\~?֛VlFE-΃Hxl6@=r8% xp8o<{jpse/^t]nosG~=fqݽ|^~{ FH Nqeyހfw߀y~ӄ p2Շރ pN0sFa՟ݷW/7qcﯾ~`atYpgN(=vK엻uv. ˮ#_W=ծ؅09=o_O0S0Sq$5*4Ѹ(=XDg7f3RSgvۙ^g(e4HK*DK܍G]ӽY F +^;ϬԪ`7 QpSz$6D mFf#{~^Q;3[0gYBɝ?P&#%wVۇ^m-{w޼W|mtF#g EFk%'(y<߲jb@ޝ+m)-R8]q /۹Cr틈}.HuZ) Tԕ#jW8n(ub ŬUF +`ɶRaE&(<&QPi#7~oچEB]\Hh_D-P8ZD5k@ܩ㺪E'9R +TvOfHES*ilq~vK6{2Qk +y+ĭGEϭ\n2?ѣ1CswNrJjҷ;ڽq|?H9RӄJo[fjPdQ}Zh༓-6f6޴ǩr"k]26ѤӖrRTxyW @(=Y2۵Y;:|"dfe/׭h pT5bɟ](Uo|.wcjcd9.e#vu"&t/ +ҏ&F˕z%Ww|'+&z4\ Ňs|]citaBz;\ЇvLjυkzJL3LqdE#\ [@؜>q}ݻm' 5~a{aL $} +endstream +endobj + +4683 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 689.9764 524.4094 697.4674] + /Border [0 0 0] + /Dest (sec:introduction) + /F 4 + /StructParent 1 + /Contents +>> +endobj + +4684 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 671.3144 524.4094 678.9264] + /Border [0 0 0] + /Dest (subsec:composability) + /F 4 + /StructParent 2 + /Contents +>> +endobj + +4685 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 652.6524 524.4094 660.2644] + /Border [0 0 0] + /Dest (subsec:motivation) + /F 4 + /StructParent 3 + /Contents +>> +endobj + +4686 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 633.9904 524.4094 641.6024] + /Border [0 0 0] + /Dest (subsubsec:motivation-plugins) + /F 4 + /StructParent 4 + /Contents +>> +endobj + +4687 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 615.32837 524.4094 622.9404] + /Border [0 0 0] + /Dest (subsubsec:motivation-harnesses) + /F 4 + /StructParent 5 + /Contents +>> +endobj + +4688 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 596.6664 524.4094 604.2784] + /Border [0 0 0] + /Dest (subsubsec:motivation-workaround) + /F 4 + /StructParent 6 + /Contents +>> +endobj + +4689 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 578.0044 524.4094 585.6164] + /Border [0 0 0] + /Dest (subsec:contributions) + /F 4 + /StructParent 7 + /Contents +>> +endobj + +4690 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 549.4634 524.4094 556.9544] + /Border [0 0 0] + /Dest (sec:preliminary) + /F 4 + /StructParent 8 + /Contents +>> +endobj + +4691 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 530.8014 524.4094 538.4134] + /Border [0 0 0] + /Dest (subsec:effects) + /F 4 + /StructParent 9 + /Contents +>> +endobj + +4692 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 512.1394 524.4094 519.7514] + /Border [0 0 0] + /Dest (subsec:coeffects) + /F 4 + /StructParent 10 + /Contents +>> +endobj + +4693 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 493.4774 524.4094 501.0894] + /Border [0 0 0] + /Dest 4415 0 R + /F 4 + /StructParent 11 + /Contents +>> +endobj + +4694 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 464.9364 524.4094 472.4274] + /Border [0 0 0] + /Dest (sec:theory) + /F 4 + /StructParent 12 + /Contents +>> +endobj + +4695 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 446.2744 524.4094 453.8864] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 13 + /Contents +>> +endobj + +4696 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 427.6124 524.4094 435.2244] + /Border [0 0 0] + /Dest (subsubsec:eff-formalization) + /F 4 + /StructParent 14 + /Contents +>> +endobj + +4697 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 408.9504 524.4094 416.5624] + /Border [0 0 0] + /Dest (subsubsec:eff-composition) + /F 4 + /StructParent 15 + /Contents +>> +endobj + +4698 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 390.2884 524.4094 397.9004] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 16 + /Contents +>> +endobj + +4699 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 371.6264 524.4094 379.2384] + /Border [0 0 0] + /Dest (subsubsec:coeff-context) + /F 4 + /StructParent 17 + /Contents +>> +endobj + +4700 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 352.9644 524.4094 360.5764] + /Border [0 0 0] + /Dest (subsubsec:coeff-reactive) + /F 4 + /StructParent 18 + /Contents +>> +endobj + +4701 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 334.3024 524.4094 341.9144] + /Border [0 0 0] + /Dest (subsubsec:coeff-isolate-intercept) + /F 4 + /StructParent 19 + /Contents +>> +endobj + +4702 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 315.64038 524.4094 323.25238] + /Border [0 0 0] + /Dest (subsec:component-lifecycle) + /F 4 + /StructParent 20 + /Contents +>> +endobj + +4703 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 296.9784 524.4094 304.5904] + /Border [0 0 0] + /Dest (subsubsec:eff-idempotent) + /F 4 + /StructParent 21 + /Contents +>> +endobj + +4704 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 278.3164 524.4094 285.9284] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-iteration) + /F 4 + /StructParent 22 + /Contents +>> +endobj + +4705 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 259.65442 524.4094 267.26642] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-coherence) + /F 4 + /StructParent 23 + /Contents +>> +endobj + +4706 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 240.99237 524.4094 248.60437] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-asynchrony) + /F 4 + /StructParent 24 + /Contents +>> +endobj + +4707 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 222.33038 524.4094 229.94238] + /Border [0 0 0] + /Dest (subsec:context-paradigm) + /F 4 + /StructParent 25 + /Contents +>> +endobj + +4708 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 203.6684 524.4094 211.2804] + /Border [0 0 0] + /Dest (subsubsec:unified-context) + /F 4 + /StructParent 26 + /Contents +>> +endobj + +4709 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 185.00641 524.4094 192.61841] + /Border [0 0 0] + /Dest (subsubsec:context-situating) + /F 4 + /StructParent 27 + /Contents +>> +endobj + +4710 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 156.4654 524.4094 163.95642] + /Border [0 0 0] + /Dest (sec:system) + /F 4 + /StructParent 28 + /Contents +>> +endobj + +4711 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 137.8034 524.4094 145.4154] + /Border [0 0 0] + /Dest (subsec:core-impl) + /F 4 + /StructParent 29 + /Contents +>> +endobj + +4712 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 119.14142 524.4094 126.75342] + /Border [0 0 0] + /Dest (subsubsec:effect-api) + /F 4 + /StructParent 30 + /Contents +>> +endobj + +4713 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 100.47937 524.4094 108.09143] + /Border [0 0 0] + /Dest (subsubsec:coeffect-api) + /F 4 + /StructParent 31 + /Contents +>> +endobj + +4714 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 89.42938 524.4094 89.42938] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 32 + /Contents +>> +endobj + +4715 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 33 + /Tabs /S + /Parent 1 0 R + /Contents 4716 0 R + /Annots [4683 0 R 4684 0 R 4685 0 R 4686 0 R 4687 0 R 4688 0 R 4689 0 R 4690 0 R 4691 0 R 4692 0 R 4693 0 R 4694 0 R 4695 0 R 4696 0 R 4697 0 R 4698 0 R 4699 0 R 4700 0 R 4701 0 R 4702 0 R 4703 0 R 4704 0 R 4705 0 R 4706 0 R 4707 0 R 4708 0 R 4709 0 R 4710 0 R 4711 0 R 4712 0 R 4713 0 R 4714 0 R] +>> +endobj + +4716 0 obj +<< + /Length 16038 + /Filter /FlateDecode +>> +stream +xݽ]smq$޿hkLzժıv"ơ~Ф:s\Ч./_}{ʪo쫻o_~w7_o_?{|w~ꗿW_W_ݿ|=Onݭ_]-L-w篾ͺj|_~պuv?}c|柿֯ޗ+.Һ]w_7_ׯZo]uTrz+W]RJ-6K _$k7`Q˿}a4[>Çwg!fƤDt2DLfĭv)ZJӉ$gZLI1^&jͤhދ@mkqZ9[%ݕJқ8n[[a.RS7M+h&γ;D0(YTq[ϐ!kl-٥|d%gSQ5&aF],dPL>)5A۶T&N +I+e~]8AxQUӖIж ]RjmdRuSZ;!ͨb{eq"hgi+U˒ɜeKeJb|zIu7s"&3T|de"lZ7זS<3X皢`%QbDQ?ň+VI[ +Uĉ}KV;5TvŮ}ؿ?Ro~ʧkN2G'Ok%qzt{]<Ϳ$|<#??{~Bſ○)^my>ŸfdV<g,M,rQH-Z~PBH%sGeT2S̑=.b! A(F7xuY8[9{lu~m7S茇ޗ+~$U +?Ky/W)B$F~nEĮpK%yH)Ѕg#&FZE{ƤgH-R6(L2ir%k"y|Uh! m^bJwi]F{d7Ńoѵ6-av*rO\!$ܓCz/h\»54]'y_dёK&b35I)chH횂^<~jH-S82_Mh7_h+nj%cq_ѷU7_ղ;>i ++ +~o1) kQY8^Ek;>9 +-߉ k/SĚLK* ޲!S2r#Tt9k_eJG.;F> +Wў01;$jC*?7(.$,V*GK&D{ҀO s#2yØX*H%5P"7SrxrȁJ;C.^)x-9|32c\n%gw"ERz9+Ӷs z8 ߈M;C9Up$q"GHcxs*G-yrevd E=pW!WF Q|?oQzXIdf$Z^S.k^HLmA/TTzߗΛzF$8|AG$|čprcm>Fͷ-I6 +pފ DoPTH.1 #ݷN'$}IE%'\`۔ࣾp̓GXi ~9b" 1Ybb,Bx~>>BZQ\lӦ&VӦ}y11 !YMGL̵iO:zjb(>~H57o⇚1#q\CK-7 >)GKS{F‡qZ|3̀PyG8#6hn8g6 +$xNx)%' Xeq ?$h$QZI.N~a?J _0"Mf HHP|2֒!%B_\)_DcH? ]7JV5v[ķ_0 =ȅÝ?>槲)>w9">`>TFև_|/E//^ȅZ1El3,#l*"h8`K"PC6-hIN"D^ĞD`*ˑDpc%t;X;ea!꜏>Χ Q|PLťر#E"@35$|D5qfbt:M$Du#E̅ H5%ޟrX"aRrtXȱkOYHK(b$ĥQ˂G EXڏ+i@ՄDGB6{c|شBa c8G 8];W>"nOz+"HP'qBZ ΀"@>#$8;_@-D^|y3Ryҗu3J[@4#>}SO`ECd>{pׯW KOψV{ߌ\i-;ѯ+|%ʂ +,u$ ͵4b;rn7/6mcKGM6RN2e[ӞZSCр ֜vweU)m% blɠ\S59B\QV+.i`MAp?RA* %˝r!59 cC{|Cu],BtYkH͓b<: KiUː5N?ȴ#5FH*pJiڬUgM 'z2c=׷B8"sHTZ3b{& a|ECdˎ"?MsÖZ#>ۍEO<%qxz"4Aԃu{m&?ŏ76 _uӮbTpz]4|&7x8qqC PI)h!JG:vl=8*t)޴o!I.,| )%I?DoJ?uDXȔ6>H7m|PEC[N^KQ EG : O r*v姂 \9C% Jd>Z%H !MothmxNЂ.@/hR6Ě/ECt2 z_,YXYvS*D;\Jzr=B?eBaLiK2Iєц %=B0T&V>VS)-A u_D;Pҳ7? =;_x,jI瑏}n zE>{U)Vӥ>wp_](>↸"|fmH3k+$+Ϭ5I|fMe d (Ay;4g'GQR'+`́"%5Q8HNZN}d} 4pG6ZJɐҔfI3WRr[)6xE/i5e$^|]R{#EG>?h5'-S]~s]IX#mxbIBG\(NY<?L4M/Iuھ+Ñ#xO-åm:^HHR:^v1gT1ۛ6L!SY@'bO(ڡ'J;1GA:sHFmR9v# ġ}?~mDS-/1sqa'cr%v8|J-->\9xW封W\'5c%k2Lx?u3#O“Մ[eWs2vNۯE=I#Yo؛Y !PI!zdLH$e|`_R4o _yQE>Z +^Kl6IEc$ _MRm;H-qD + ?!o(6lI!*5ߗR$i9ra=3 V@[O&iB<#c G$Hj["R {:I{Q!S|}?\0R᣾!ԑG|MEi-e|ۨE/YwXnf ?D[>wwJtr}3͗_-]ItYï==;}`q~*| OE2I/.9_[_\ggv Dl7ܠWB7dHffᣀxwц?\z2Ȟo/5$8-ݭYmoʡ@'i6B~lxs#]CG*GT͝#DF!G3 i @Z^NCV*ݵ; 7B,ӫE[w -t8ah"|LGh-O|Љh/ֲxmF6x£ Z>£4 ?&YSωO %צ.dw[[?Vk3]ȗClq/Sr^0?~[Y#懮Nx$ I >ի~hP} ?+PNdƽnzK(lҳ{3)HR?c HcPՈw<6N-C(1!2Jfs|Ite8`o[^-#En\(JtGxEF$"F#Σ@“C#QG1'1J*C^D +x1mĥ!q8QCV3)Ky hݖǀc`Wh!Jdh}2dHOk+ +^D E.6/]D@0U2;@ım,ZmtQQ gcl&qB$ش? %ՊHޮJɅ[$VYI!nFiO֡J;ߒDGt0 Uاy2zT~mC!/)KکJ틄?YQSA;Cn9-ڏ:釡.ڡ8:!ߑ9Or`E/T>|,iӂbN6Kw#T~:Ւ$|hԻ[fvl$uqn*7%Kt"j85lL(_3R{õ"ң>Qu?.Y.mA IsMqF d->pMua"ᇴ&%8JCw=4 , 8aE{OoU~#|FODTV&$MtOUi݁= 5uDy|I,C]uh4#+*w|q'&97$Ǥ$]H-?mbÒj&618hbpaSX/aS7 ?d7{Z, q=x5 T%`C-,ǡqhE]7Z,4Ʃ\'74|@:ذ^݋A#mUvumT;oqv[h·6~[|f̣b\۝ty5SRĉ|na2jGܱ(qQu:y[|: g6I%$+ +>$O‡Dpqךh8 szA#ӊow^$q礼?$H)i?TTO~Hu|.YG"D$\HHIy9ҠmL ^SoMΛ$|4āMp3AƉunI#iS6& {-5p>:(v*|sɚ%lCޗnsVnw>Zy}$|hDK/=eGOXjࣦKz*sH#3h0(t"K ++:&p.= wkj\;oF"fwK#u7͗ti2ƹ7o̷ lz+ m ^7K~*mY(1o*w ߥ,i&>4xXc!آ t&[a˂xl }79m- wIH]S។PMn8dzb[5Xʼn$|uQC [+Y0X!+W[]~tv҆?[v͝%+6UNJ9 Uw=6@q$ %Y,|t! +c 'ykt}SEGګr,KDwUH?]bieIo?TȗQKl"Q~x;GLQ Infǖ8DG^T1Orkbw]Nh_R}C+3~Jo:\5:\+:\;6|(s[27(sianvanq~^ \.xKt9xUޮ0AC1-[yktTڅkk.6U!M|1"ZRs{~}O.N_ >[Cf/|pތ1;Ni#0$!LCoYokcN#9]H +{R|Ȭ ,$| ?lgJ4b7`-9hoQܞ{z8f&(!`ƧZ\hQl(H5^9I!$t8w٦២Fj: 6 #B;'IchlZ0KrIq2h#}z8H%( +9`/C{wk|JE9}ܞQC6pvv]qū-c7vW9n,d|Ջ^ܟ?7{޷yߨou߲xڨCʩ26~7S\O tbq$%~TwK,?& $:3 +<"zٽS2ۓ*j *p7q F$|=<{dm̈$mn@ɦ]$62i33,(mfF<)'B̋? g=p6 R7,MTrz79^G5.$ ^3$؛65͌Ӧfq/&|G T a~EfD{mnFD<\I#UJnmIht09 d.䌈An":|4;BxD7I~ xЦѷMO"=\#7J_ >78vofnwyЃY<̿y}ٓi[?ܝJvԒ6Q/NƁՑ76N&AndmKdKx,XR"A,1eTUE0TD&EЂ,VHei("At ,żt56`DWpl6mXhlY$|EuQ@d'l&./f'ے +t!E0$fDEв oih@", M<,".VK5rJY.Y`D7zE$RхEв&@7Y)pRD8h(!`P@5`-& +ܨ] Ի2(}o'Oj N ?h%q#o?MD5˒نDP}`bIo}q`HNŸz$%\W"QW%\[?%*>ެ#5˹}We7ky|iB;r`?y&FÝ?T|'AweoJl"2O~ύ4B^WK +zO#KR}Ƨźt6n+i3& ]5< ~b*5e'RI{IXڍ6 ~$o.4f7*Ք57@Y N,c"+TfoOX6V(jCJ5 hssr+YbeڢNN&..6$WOϢPƗ^]bu.ھ:)hl[ >>%zxv[hD%cF]-x#h A‡޼U'Xnћ_+sU4 Y.R$㣲V#8"l q8O0v{}8me?3|Ijˇެ'2%UM$D \4P,oIݼ jQ8tGs>H0Xl?7l9El,mC[ُp\"CqH$(HΦ-$g$,Gƛ<: $Nt$Csh8/޴siМ6As֤l\a{4gZ@"9o"9/~μ-9ߠ)I[%p9hm͗+_?"-?k̍8oʨ[ix,%HAȌ"DK2K(68AAY|H%m N`\%B&r^g55G=-k-oHi0ch,0I0{E(~ɲ<h!>I{ &K P4ZEАi/q{; e<,F%Z$Ž6K8c, {$7lxo^ȸ$p1 .䟒:'Ep2B*5EסUy6N.B"8~츽@&uS \2<ݫmE"ݫ-xp^z -&~>,K#Y 1Bۍ5u@"8^Tx\HuxzbzX0{%.e앇z=y,G ks[Sy51mUt:/] c'iO +?YumPOqS\Я2#g:'G#h4aP,CbAbh'"$_~{ Ȋ#ZAq~n{ IJGPz  `{\BYy⍛W500g7 hkY +T5.by$${, +\ܣ5m ̒`x@T`D"r,֣ʒ\)/}P iEV) 5AH8:JbZ-)S"hpI$(6yG覭Ë2d /ȑ"0L)%M==t +.űDG +vjzWk]Q&F/DR4LAjRK[˾lyϾw壍uszɚ07tRA#%n4A6X("!,SVJ"-Z'ŞEǜ ] +u$| %u$͈OC"JAwcI!$' ?d,Gx!g z"AF~T*F{#} \*O`2 $d:Ảrø7F#(O8EHBB#,vAKG~6&;w)ɪE#eu]8LW" bUHmLE ),|mڞf7 +=E(LޘcKO#ɱZTpK 'w)&׹B"_l^\QX#kVZ<.塸rHëJXޮgAW~QG'un35-OZݣ&6uYVobA$FàL_bC7B ~lK/JW [B O8Lo4hH4YޒK<Rbś|5?5HGO > +Gz5IuzSj>J!юc~F؈ t;NS~À|7ݡ?2brt(҅9X^iK4 ?%*J| T[N>h;S4gGnuJ\yk*x!鴈ۥ^X.6R9[Rœɽu1oKr7iH2]WWE^7E_ݯ֪kڶn~==u~X7+l1A!q)xiJ$H1Es^Ryqe F#xHsU~KȟؼGi*<WdгrI_bԌ"9RėUėeSiy/1yx/1"r{hJ2XpG 8Jju`)"=ZFķG3F8M$h 75GXo:M>he [ ,D|oqH7yZf`RG"}azK#x'ތi~5CZy8Lf܊Keu\ksI}ղKcTzA_=Nxg!ՏϢ߽3Co=~ sP쨮֖ ֏۩eR47qQmƤ(ѥ8s(J%R5) D^j"Ҳc*".9Pb + d*4&R}*#BUrPMH@_^ʆ9P{I 6Իm誶wXZ@kZԛ*}*)T.'D%ojMq#7,pQǞV?ۍ9 ێ)'pMh8#_CGR_S{/#syH%xjH0F@ sNZt: ON4_7x)o`JMf ]|;$|؎9hxٮq؎,quG&:&U> +>th!i94|Eb& [`GC&M]ҵX h6,J-P7ml<$#i"tm]~ +EI4q7x*{hg"fD '|ly3g)Eް&ݛ%;'hO'{9G ~Eֺpߠ%.WmI#q!rv{ŝʿ?p*?'}߾fZkd~G)̙8,(?u,!D`zr- +HdX.܃EVpf!w PH(X%k2HćBƏN"@ +P,,ۅ-`Llkp*o1~! n iJ,5;y{I!&"YF4M֒Zbxoo4=CF> v , $T.E> І n,HPGxu(%v{IHQR<!8tLͤ:U9$Ӛ:(l7̧I 4pQD"@m9o&=5v2H W^crX# -JgiZR!HH^7":VhbOAH.b :8B8{H ݅6:O,x#UjmOK;״:V,~n3ٷ7_Je-/O~ve4Zhp;`oNt(*!JB Ŷ+ ?ToBДw !D.똘џlDP[{.|q"J ,_fI d z{FbQTM*t,DI-FAo !"Q["7 RtC&ےE2 No&3&h>eOb!g_h1y4zh;x.=[F̠)ۤ3Zg fQ#4%+@G=Z,E7 d7@HJ O'VCmS4G"VbMaDZE2\,bI"%xP +q,5B )j#E⾐"@R>/ :$|],xYn¼;5?u/#5/0DjzGݖnT?ݿ}7~o}sϿۏwWQ O4׈sjޡbA +endstream +endobj + +4717 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 749.2384 524.4094 756.8504] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 34 + /Contents +>> +endobj + +4718 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 730.5764 524.4094 738.1884] + /Border [0 0 0] + /Dest (subsubsec:context-access) + /F 4 + /StructParent 35 + /Contents +>> +endobj + +4719 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 711.9144 524.4094 719.52637] + /Border [0 0 0] + /Dest (subsec:loader-hmr) + /F 4 + /StructParent 36 + /Contents +>> +endobj + +4720 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 693.2524 524.4094 700.8644] + /Border [0 0 0] + /Dest (subsubsec:config-layer) + /F 4 + /StructParent 37 + /Contents +>> +endobj + +4721 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 674.5904 524.4094 682.2024] + /Border [0 0 0] + /Dest (subsubsec:hmr) + /F 4 + /StructParent 38 + /Contents +>> +endobj + +4722 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 655.9284 524.4094 663.5404] + /Border [0 0 0] + /Dest (subsec:koishi) + /F 4 + /StructParent 39 + /Contents +>> +endobj + +4723 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 627.3874 524.4094 634.8784] + /Border [0 0 0] + /Dest (sec:discussion) + /F 4 + /StructParent 40 + /Contents +>> +endobj + +4724 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 608.7254 524.4094 616.3374] + /Border [0 0 0] + /Dest (subsec:scaling) + /F 4 + /StructParent 41 + /Contents +>> +endobj + +4725 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 590.0634 524.4094 597.6754] + /Border [0 0 0] + /Dest (subsec:capabilities) + /F 4 + /StructParent 42 + /Contents +>> +endobj + +4726 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 571.40137 524.4094 579.0134] + /Border [0 0 0] + /Dest (subsec:language) + /F 4 + /StructParent 43 + /Contents +>> +endobj + +4727 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 552.7394 524.4094 560.35144] + /Border [0 0 0] + /Dest (subsec:granularity) + /F 4 + /StructParent 44 + /Contents +>> +endobj + +4728 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 534.0774 524.4094 541.6894] + /Border [0 0 0] + /Dest (subsec:versioning) + /F 4 + /StructParent 45 + /Contents +>> +endobj + +4729 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 505.5364 524.4094 513.0274] + /Border [0 0 0] + /Dest (sec:related) + /F 4 + /StructParent 46 + /Contents +>> +endobj + +4730 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 486.8744 524.4094 494.4864] + /Border [0 0 0] + /Dest (subsec:rw-effects) + /F 4 + /StructParent 47 + /Contents +>> +endobj + +4731 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 468.2124 524.4094 475.8244] + /Border [0 0 0] + /Dest (subsec:rw-paradigms) + /F 4 + /StructParent 48 + /Contents +>> +endobj + +4732 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 449.5504 524.4094 457.1624] + /Border [0 0 0] + /Dest (subsec:rw-temporal) + /F 4 + /StructParent 49 + /Contents +>> +endobj + +4733 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 430.8884 524.4094 438.5004] + /Border [0 0 0] + /Dest (subsec:rw-spatial) + /F 4 + /StructParent 50 + /Contents +>> +endobj + +4734 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 402.3474 524.4094 409.8384] + /Border [0 0 0] + /Dest (sec:conclusion) + /F 4 + /StructParent 51 + /Contents +>> +endobj + +4735 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 373.8064 524.4094 381.2974] + /Border [0 0 0] + /Dest 4455 0 R + /F 4 + /StructParent 52 + /Contents +>> +endobj + +4736 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 53 + /Tabs /S + /Parent 1 0 R + /Contents 4737 0 R + /Annots [4717 0 R 4718 0 R 4719 0 R 4720 0 R 4721 0 R 4722 0 R 4723 0 R 4724 0 R 4725 0 R 4726 0 R 4727 0 R 4728 0 R 4729 0 R 4730 0 R 4731 0 R 4732 0 R 4733 0 R 4734 0 R 4735 0 R] +>> +endobj + +4737 0 obj +<< + /Length 9777 + /Filter /FlateDecode +>> +stream +x}]Ǒ=xA,\ +6l$ ;Vu- d}pz>83Cii⩞~駻9U~?/_߿z?_߾?˫woG>zӟ^~旿św_ݠ7j]쫽LsUZ{틯7o޼?~};~o|G~To~_^麺['~onqxn0+Yk-뛿|$z̋ڈoټ۫un;ߢ*i%K >MOZ( Ƣ\R3?i&SM/if,QQӦRܓok2z[GچvQ[ҕ,7ڻkZٷ-9,Ei$cm|ȊS /4S%_b:k^UHhD7mI;[,}ēv*)额}hd}xe?E;7hM6זmc&xӆ[shmX=|"d UӤǚel c}[TrrXF5cXkц!x~%hfZc^cXլ*')}b;sC|{~.]~z1C=3_?PxalïbY[\s#,KGmssM}Wfl={p5{ɞ~Ow)]]wGV +6dj T|#!HO=]bKRȆscMwIdU҆&'hϒI)_ >Â-:fE)K,8w R[d:тK@ABYi7u{^:;i7u{vSw$2V@TG&ÛvU U^ж$2Ti'r{N7{$ɽ ?-rKTWn,WOZ#":ɱn?VB" D戃8vb>v~̹~r Ơ+P,|up $JNز */|H-n9頺y-)́_VOl5$NI)/,D+x{w Rmh k؂>]jfs6/~L4eQb >Vڧ|jI&2$x/?z6Grb8xߖ)Q[,xpE;68i.7VqH#ItVA1|}@+dV1QCFApcN p6$dJ}(Zq q{y\HNu-9 +}@,F6+RJÿc_I~/3Z sϖ@|e׊gޅ" eRAG&opiACGW> ~B-G͛~z%U > z|X_: =%[V ?$YV-6;HGkzNތoKۿbJgqR\<Y{,}^|* SU0G۴~>o% )Ť2鸔\SBǁ[  +̓uIj,?9 ӓ|,[8r]ԆxP) 7~l4o~ȴ)_GSP7##s +҂臺B^2 ΅RP r^Z(ɂGX4$out@헃L!>%gi4۲C FZ.VI-5i'Lt$BReE9m⇑ג+PɎ?h +GVPJ~h 堏L1"*&P矅:$t$ mYLBO2@>C-*=zؓMQm%X.*=1c(@HSKN'[G'bzʁ]鉖 GhӼZ]&4/4kSp×Auie|~T{ d}0@t|x?vq^6f`wr9^[2Z\RBRdy!F2 2Z)NdBG#9^2TH@#Z]Kz17(]v(B B@ #ZroUPX@pAHB8q$ /I`DYZp,Bd6h/@I _N + cDaPEZs1;^<^D Z7QSXx!J"]FhGI:Zܲ5!z^dލhf^d/6E=AJed "^@9H(x!Ff T5-Fe?ϰ[zfCb<^-luy䅀ܖ2d;!1<;A|S(Dy`̥RFЉ ([G RL@2+_8rSZY HD)5ZTHHSj'u . I.IBj}Kt_t/$v񽻄^ƿt@0?l'ffUa)o5zT\m8o}sƂk +vq0e @C /Yyz]BOO~t۰ Nx8b`$4>bk ៶prbc8I.6+N8c:ZI b +>YG4_$oN"ᣅkG1͈?bN{P̺W"76T6J3B}p&l݃.'ZymW$B01[ܛl4|ϖ>#< ,| NQHBUA?:jAłz_@qGOVڑ!#HГGcC;e?(=-Dwl8KOGsюҲ=ujR|Բ}vd;TE!v4sd9 ?%,G88m;q{Tѷ@quw*mwu|oÿzǷd~^6sKj7 ?d e|GaD;>ZJ" 5 +9F~X"i#~,|u=紓Tb"ᣝdWƉ ~"ᣟd)/-O4Th({O"*7q]AQ։~E;v;t~Pp2;sv;sv;s" 7=&Y3&hG7I:%vC4 ;+@ɔq)M 8(;ԩCG%r%Nv$SćzC|w W tn.gL/RKQں2 85D>*cjryT~:WPv,/ɇ&. ?6?X0m~/{WQRR۫}~bj)>=zs}&}C Z`JY3F~89׬NO19ӍGI.>́% 8{^lhul^uњ&6킵٦hښ9$6CA[ʹco9ؼgs҆h‡e9Y;۵8]🾨PzYO9z]Fz /ˮn7_off}ۿu1ف_G]TS/;wJmAA_$#'Lkߖ'ҚdXv8$BΓ/[YPWqC"~sݑߠ=]oIϤ*4`Á-w~BDGtc2GF_$vY<OE?*G8H/M;6@UVX4/V$?I!k%$7:x5pexRlBZ>tISC@|[#Yn}o)F<Bβs Q=h!qv" -.8y!BlG1H:-f~33PJM}x!JNZPYz +}B/E 8uf5Αvef PAG'Qy!D $ya A/DJde!x{oh3vk/.C ]% \9ϴ3O0s0˥3 QIJr'3 eڋ[:“own6V;l/DI!i!JEke%yJcv66U +}i!A5͎鱆N66mc5S} nSDJ 疽)!y6r\-6=2mzByKzT Ti3)9լ=sfMYt.^Y@5>`YڊvǢA[78ryQ#CL;# Ÿх?Z E[ո(mu6 #K +FQHLS4wZ) ?dI. +AqaBݞp6O1-=t6 dۦmf(  ?P&y 6O1lQmcuLgy<3NV[(d *p:ߗʂCTsClR)Z.XLÍuU}Q (;{ѶNpJC:)4mDS_:ӤLod@_*yjH mx{gop!hFGRމBy#kPaZ)꒱҅48qXBAXA,DZJyUzx;S-ǴE㇬L+l.K)G=>M6?+$m~`XZ̓JX+. AR +H)‡ci!CGP?20aX +ڄ]i-|JN{saWiïC ?%&i1,4 >AvO}vaX1|K%̓GmGFw~JZ6fXxgcX!֨g Ò 3$nm0, Z!)ïd1ïԛ1-|J5`U9+)8W^VҤmǮT1 R9mo>v%+ρ[7nکڮA %cWJ8#î{/JYpWۜWJگz,|xsJ:4_ە5Ҧm~EۛK4Q H,ْ~ bKsXzx>TXzȄWE hE24|7*>z6Kv2q|(fu]&i#V%p! hX!v  D]< ?eJwV"Ꮨ. aI -̓xm,4 *~\[#9PG4$bz[ YP hi% I !DٸskfWXJ#3t~H-?,1>ei +<6ޱuo!>wKE;2øO .$N;U_2 )ho1kT% z  %s!ZhGfkۚ@ >4䠃\{w;Ў̇] އ UYf#ajCvE¿c^I'evBO];t{Ί֒f-EK]M77ѳu ɺ._eX}_=$ ؇fOҏe6)GvЎ$-Ddlȼ'2-Dy!Re{q h!zx bPqv,e̟bJN1VpNL)uBlqZ8VBh3nU.œ%Ê 2̷[rC 0nut*Xy!܇h!-l?ER芇r iS_lFF aF(*6nUCmZY2ZG=!|3R +-G[ #l(ŋP' (Cgb9#Ǎ\ 1 a82UC4Z\O=Qule?3[3DAI [3DP G.Qʇ8/J}d%RH ҍFP؎3V3J +Br-s'o. "(d͘KVQwV3DJ.'YEލ!nr2'\4pu'h!~,Яzu&B棈tuFiQl.)"dG(Y0CɴRl$hދdOu1.S-pRV-Z{:sB`IZGb +E,z\=EݙKeeз)p.Rbh`Q5B!,@[m(2\2ش.b#` $. +l.Vr3?_߾ǟ/xݯ>;O_}O_\WN:,x.֧O" +endstream +endobj + +4738 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [182.8334 688.1684 188.3334 701.8304] + /Border [0 0 0] + /Dest 4456 0 R + /F 4 + /StructParent 54 + /Contents (1) +>> +endobj + +4739 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [427.80704 647.1824 433.30704 660.8444] + /Border [0 0 0] + /Dest 4457 0 R + /F 4 + /StructParent 55 + /Contents (2) +>> +endobj + +4740 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [386.99667 619.8584 392.49667 633.5204] + /Border [0 0 0] + /Dest 4458 0 R + /F 4 + /StructParent 56 + /Contents (3) +>> +endobj + +4741 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [513.6514 354.0974 519.1514 367.7594] + /Border [0 0 0] + /Dest 4459 0 R + /F 4 + /StructParent 57 + /Contents (4) +>> +endobj + +4742 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [157.93703 340.4354 163.43703 354.0974] + /Border [0 0 0] + /Dest 4460 0 R + /F 4 + /StructParent 58 + /Contents (5) +>> +endobj + +4743 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4366 0 R + /f3 4372 0 R + /f4 4378 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 59 + /Tabs /S + /Parent 1 0 R + /Contents 4744 0 R + /Annots [4738 0 R 4739 0 R 4740 0 R 4741 0 R 4742 0 R] +>> +endobj + +4744 0 obj +<< + /Length 4497 + /Filter /FlateDecode +>> +stream +xks$8KXޏ*G Hop,KUݙZfg||9jZVwۇ]gg]wbwﻫo~_]?{Ǜwg_|}o^]}훗_D;]qsJ2#~=og3]oϮx'Tw0=~=Uncwg1&1!V„#&fI+]20Ik捡&:!H&+$>J;9Dy7B@ǿaﳔ\ȑӁ9;y޲#Ì Cy\NWQǏbYar}E#|ް+:;޸+ +KfÊ}||,v"J DVGdLvQV4P z>lCZƕ9EkI'y--sdM1Ϩ2Z8'j6i[QbmQ5 ^>Z>Ta6Dy'$#7'^tzmLU&&FM +MjbóD06DO%oGnqݣtJm@ Pu,ڂmt@X?6uY#d44m`ʖv>꤀'Y0CΛR% vUD + j ?:i`!톉7e\ +;6gE^dܮp3N"14 g5 qSO`Krl ,!Y6ybD|qjjYP&QKもHG`4'˕eF/n $.: +G=7f9dE&80 Z.$|G]O +ppqa[78j>ࡖ(vK&GvQ +NHRZ)Iɼ_ ӒŦSD W7p)XFPr` ",cT)AR1UnRґvh + +awdT6 (+c1%[l1 (oYvumzqUbs UpLrmrEBE㑗*nV6, Ngq,+Xc~CqB/V.b +fjrXŔȀbJdC +2n $Mز(a)3 +mؐ@vS}VOU3K5)B -B.閒t 3}TAPPθs?{"B| z;0잤l()&Ȅ  H={ңnoĒ5HaY LQp&tOҋɊt$ 'G| ~>-e7ޅtT ΋*xaJh+a Cm$ʼ?uQBp$S& t<./T[ɐq +3ōGeqdgha_ΒSa s53HVtavnkL0(қ8f$Qͳӭ,`)`He0V^J8 DB9<5ޒA39-~N"yJh&vж Y8Wz%ÜIl"cWܙ< bREA-m,S{Uk80%8+ #diA;k 6nUvU٣X0V)[B&VrS@J Fڰ_4a8CHajNv~)qC bĹ9Ѹּ"gi/bw7O>|TOO l Z3>jNPk|X!0#/ֱYJXOr'drlJU# Qk:q?gsI)UjC2R=/ZSL*ԤSҩ$jQ m_RM4iI`g=] FLJbi8@DPvDE*l*,8W 4]pѦpLM mW8$A^4Vb{mn v</k\Hu5 |Q%> h"Y$JoV0pxpZrr]TӀX:5Q myʦB-ʨ,W5E(NoLˊ}Bi"&dT^!-Q,[qa,!nz 'dI }9cciQ\&ڱǓ#"YrGsMT0एKukmn9Ԥ,P ',33V[`1= ZiDD.RʣL&0~XɈP VOdbڱ ZJ+XͳZ1WӾxE5Px(&er ]dsq,(k[*פb m_e5c32R3%0ZTB'qN$8;N|Nkm Ax;Rl"̄Exru* k`OLYb!]V{0~ tBE0Fc&rFzԒ +myVDFIf/ĢeB-*wS?X~Pi1xy | ;)gQHJ;)f 6{o$'SZn:2DUuU|ng]/Kj<㱈xdN[|f=qrT!oF=3;Bh|< +Du}`]eg竌l mR+ga.(d|Zzϼʯ`zg`UM0Oew\xub9º{M^g&d -WbΪ~ukv ڧ6&!ZxywZāYy.U,4}P\9,Է +h07,,$HHoJ Tԣ9&ߘ?K= o~<.w!auDuűدO-+YehctA]m"Gj$ x`Gc4jc_ƺ墲^" ъ; |Acg}_1*Sۖ)_n 콆ѵ?kiq㝡Q3 Ӝ@57%u(lNIpJF uPi{|X^DuXT6A4s*#z-ɕx jCpClwvaR)D{ j8gxPY/I".C,cUjS/PD)x$ȼS :n`J8iu%Z[zsۡQ*Mily&^S/}Dtf926)/V. N{Aa}Z07FAI|giNHiLm_f4jB)B6j/h0 <_kyWy;Ȣ%5YlPV#-^t&x +2KJf%87,`^;*,σa]2C E$VzuLaj{ +x:^ XO$;^Ӛ6"rKe6X-F|okݿ@ (`N|kaz0x֋HE6CRևfh nj꼕"%3-0(\q^U,Nfk. /7wv/v~ow޼{_]?{Ǜwmw3aLXKԨT +endstream +endobj + +4745 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [188.99736 732.5514 192.29736 746.2134] + /Border [0 0 0] + /Dest 4461 0 R + /F 4 + /StructParent 60 + /Contents (Footnote 1) +>> +endobj + +4746 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [395.27713 630.11743 398.57712 643.7794] + /Border [0 0 0] + /Dest 4461 0 R + /F 4 + /StructParent 61 + /Contents (Footnote 1) +>> +endobj + +4747 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.57414 486.6974 81.07414 500.3594] + /Border [0 0 0] + /Dest 4457 0 R + /F 4 + /StructParent 62 + /Contents (2) +>> +endobj + +4748 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [86.57414 486.6974 92.07414 500.3594] + /Border [0 0 0] + /Dest 4462 0 R + /F 4 + /StructParent 63 + /Contents (6) +>> +endobj + +4749 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [322.33093 428.3844 327.83093 442.0464] + /Border [0 0 0] + /Dest 4463 0 R + /F 4 + /StructParent 64 + /Contents (7) +>> +endobj + +4750 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [333.33093 428.3844 338.83093 442.0464] + /Border [0 0 0] + /Dest 4464 0 R + /F 4 + /StructParent 65 + /Contents (9) +>> +endobj + +4751 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [129.7738 414.7224 140.7738 428.3844] + /Border [0 0 0] + /Dest 4465 0 R + /F 4 + /StructParent 66 + /Contents (10) +>> +endobj + +4752 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [470.06073 401.0604 481.06073 414.7224] + /Border [0 0 0] + /Dest 4466 0 R + /F 4 + /StructParent 67 + /Contents (11) +>> +endobj + +4753 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [282.75552 387.3984 293.75552 401.0604] + /Border [0 0 0] + /Dest 4467 0 R + /F 4 + /StructParent 68 + /Contents (12) +>> +endobj + +4754 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [243.14856 346.4124 254.14856 360.0744] + /Border [0 0 0] + /Dest 4468 0 R + /F 4 + /StructParent 69 + /Contents (13) +>> +endobj + +4755 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [79.86614 82.78937 82.56614 93.517395] + /Border [0 0 0] + /Dest 4469 0 R + /F 4 + /StructParent 70 + /Contents (1) +>> +endobj + +4756 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4378 0 R + /f2 4354 0 R + /f3 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 71 + /Tabs /S + /Parent 1 0 R + /Contents 4757 0 R + /Annots [4745 0 R 4746 0 R 4747 0 R 4748 0 R 4749 0 R 4750 0 R 4751 0 R 4752 0 R 4753 0 R 4754 0 R 4755 0 R] +>> +endobj + +4757 0 obj +<< + /Length 5456 + /Filter /FlateDecode +>> +stream +x=]+z#嬵o&;e;%qbr}Z]#f\wi ZU`v Awoovݧnnw{oի_}wnwݻw_|bWn^NFuݕ{e`{Mϛ;s#m7_ldw~+;7?{-Zjwχ__vWN g1?ZJ{L!G_ЏPCga>jwiw]vV?{-!@Rˮ?~ D.}s8l82Ed!?Nˌ:z9Β`22{Oӯ:N-egNh+v4{M$Q8aʉ r skiNBd3Q?1?t7|u/ZS(VS'\i +@ڿFx)c\3=g0ɺ>dgZvzw۟gK*F.X)u<%)"x7Ї[W^^f\fz(R.\ƧLP3̇2jãs)WBcOߓGpD`Ao''Y'x"hA4-ִ ËL1Zf +BgkriJ[ dD`gUB::.ji':~\:*xRE߾ZC~~|ij )E\"pvh+j [U3EՁzCM0JKn\O8jPg.Y&QhfF'>#dVl6⭐4)hK]m+P$ +J$T0f]|ϩH@V2g0`෧B jIץ7Z9{+\/[tKb6+@K6`s~t˂GN yF!H ] NACZ)o2:5=5FI4m䣙g6vp@thOdͶXլ8DW&vΓ9J ˆ| 0۹ͮAcgäqҍS` )\Kޟh[zWre6 WlAÒz)0k5=bFdwDN1 FsER+^)sXvvݧ_R>r4C ]6Q6.Ut@GUy5jH+&0tqŠ@A+U&W> @$a?܋no!M/#tzјdlr; vIc-E!l' 3O!ӒނberV)7[0lq~ ,.NLa(=όYANR):PZ(;CP& +#V+hM" AG :~TEE0"u©%% U/l\#lE/] +^ƕШbx`) >[$;i*A繠%-"uzPa5IJ*͋(K +wԌ͋. j޺ͺ-qk׽kjXkO1FT<ߦ:'ɦY&JX. pڈS]T'sN "LW WÁH9Ў8뜂eʡ' NTtM''v4~S\Y*ptVP@uRamif0Czsu66'6Z6|r[Y'f눅İJgp)d[r#!85-A›9-{l{#!I]cVM̿:kvVYBSD4NxHD.5`Vzq +dU.lIQKF} UYkٛCizʰ1:)MO60fCazG0q/f5™دpB_Z HUR&D|8c*0Bx;z 1^ e=]#; Ŗwҡ4t/B0qJNi@u:]Bmc:aZ45`^܉:(ImB t@\kd-hu"I5Uq䡱bV5J\4^Һ$|XIZ![Zr Bgsyn\iw; nR;9&γI$aO`&$PCa % Ug +P RH/YA]/2Y!`ۊG5)F'a sD1{+QOs*9?ġJφ3M/զЯ9?ݞ pN!D΋#4ǧ~D) YY^]YBt ;T)@Oy!:jk>QCƪD7|o1Se(7ά@*29{p$ՠkQ"< 8ޯ96 /T"jGM X4`V`Xv O,&+?$M8_@KUf!R@Z:4 "4ӴdҴm}@xئ9K̰5 155Ml/8@p*89M\Y[jT}JQ6{N6u +ti]נR&gfe]O6l{t[&$2{!ګQ֘l(YE(mg )*gY G= H8_ +C=*)X5Mr}l2`iZj%ɪN$ev$$EJp-Xdj%[H縴΁^Rur笛*i L$reSjgi-!<<݋ 6EU A9b%!&zag1 VM4ȎFYf#,/$keځuکgKwUP-W|[Ʋ AI׳aAKO;(B8X-jqTV}2{zP!tbia޳ZEOh* :A3z,$egKGs`K*U/|h "=);CAT pC+mxx*(ShJbʶ>,UNXyB_ +'X] ~NsioW >V%f;hTmQyY?1@)\ԓ0itF%,7ޭxf[ qO\#(*p1;orETyk \u1g{csPwqSK&NjMIN֗-P6 >O%Om%:a9)ߺTbpʶB+[$L5MAO"=XA&P +iuK'ԕB7aɒ7D167y", d*)= +Tۉ*W2۴롾!3 geiTKmdRe?oI{PcCP> +endobj + +4759 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [224.67343 657.4414 235.67343 671.1034] + /Border [0 0 0] + /Dest 4470 0 R + /F 4 + /StructParent 73 + /Contents (14) +>> +endobj + +4760 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [112.155594 473.5904 123.155594 487.2524] + /Border [0 0 0] + /Dest 4471 0 R + /F 4 + /StructParent 74 + /Contents (15) +>> +endobj + +4761 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [128.25504 473.5904 139.25504 487.2524] + /Border [0 0 0] + /Dest 4472 0 R + /F 4 + /StructParent 75 + /Contents (16) +>> +endobj + +4762 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [242.68085 473.5904 253.68085 487.2524] + /Border [0 0 0] + /Dest 4473 0 R + /F 4 + /StructParent 76 + /Contents (17) +>> +endobj + +4763 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [258.7803 473.5904 269.7803 487.2524] + /Border [0 0 0] + /Dest 4474 0 R + /F 4 + /StructParent 77 + /Contents (18) +>> +endobj + +4764 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [264.2438 357.49442 316.85895 371.1564] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 78 + /Contents (Section 3.1) +>> +endobj + +4765 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [267.97797 302.84637 321.2902 316.50842] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 79 + /Contents (Section 3.2) +>> +endobj + +4766 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [313.2113 248.19843 364.57465 261.8604] + /Border [0 0 0] + /Dest (subsec:component-lifecycle) + /F 4 + /StructParent 80 + /Contents (Section 3.3) +>> +endobj + +4767 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [394.14352 220.87439 446.3582 234.53638] + /Border [0 0 0] + /Dest (subsec:context-paradigm) + /F 4 + /StructParent 81 + /Contents (Section 3.4) +>> +endobj + +4768 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [289.3024 193.55042 333.3956 207.2124] + /Border [0 0 0] + /Dest (sec:system) + /F 4 + /StructParent 82 + /Contents (Section 4) +>> +endobj + +4769 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 83 + /Tabs /S + /Parent 1 0 R + /Contents 4770 0 R + /Annots [4758 0 R 4759 0 R 4760 0 R 4761 0 R 4762 0 R 4763 0 R 4764 0 R 4765 0 R 4766 0 R 4767 0 R 4768 0 R] +>> +endobj + +4770 0 obj +<< + /Length 5367 + /Filter /FlateDecode +>> +stream +x]o$7r_Qfpn/8Xo$Y ͍tYU,[by%H_^><>꺻_꾿ïq_7?=_mo>/˫~}؞}埾׿]NvU]^.(mݓ~%?mߞ;?~ON:+~7"t>IyL{#v+?/`0AI~]SG)d+n+rt'*]k)òя\\bF󧿞~ɐh/}P3c78UtoA4Ŭ͜\teJW!m_PQAӷYΤhW0h:&[n=Rb׹Q~*v˱ J($|]SK=k'Y(Ԕ'{J˃IMgy1զ;Sflc0gJq`֔mn3!-}҈־cߤrPn6M,84*\)ͩ[ZDTv=|k˗vBK,謙DgK}^J1"h{" wMqqOi255E%& yܴҥFn1xZn')-NTA7\呝ÇHkH*YC,ZWBNPz2 IOJphaz + Yd/nA翿JWPAFYL 6ĊNZ}[.ݎRTøiqj@nJSZ)Og|7Rp ;Kn+^ +5KRƽ7Ngdgb2ir3l918Wdx5QbZEv)(V`YCz| ƭ0p]m0,ßZ dLLQ +Eߥ`4$8; :P% + +ɰ 'j#5Stn֋^.њsl>C >rWn"`#qy".eXr]pܣ\`-A F ڶe0&k23)n,orݸ,;3ɋ3Bk"DrV)v,-A:iıpY@-LILpyaXr +LAå(1\q 5NN̐e5H/)F6>0t]n^2(LRQ~=Ϛ[cTY@%Dk$)\r_:lS7.\29$HwUbU1IZH LъB`i.ĭH.XQ&&x+z{"E&;gf=*,0 /,qUs&.S zʼnMv/wsI16}=ST 9iD4q/Id nmIcA4q)ck94EJ +?xzt-%~ƽ)gH /܁E)_MH۟OBEm4wjQ]3E.3! hmeUMVXqmBONzlA6 +AۜadM*L g2b1[X(yʐOF=0# +&axAjs 7D:< rei8ו{gMuM+B*c +Z9i ڄ5x[bEԔh=ec-Oa~P %Wֵ,aeAX\\*:耈U+D0ŋdZ:f +EtfW +0blL`Ep^ +&it|/-pΥR%Ǒo̥/Pi>Q6g2{ZU365ZKGX+DuXսh|<)8N& N&C*%)- 4Gf.hepXlR=ܦC3^fR̡-w"e>/$͉ B'64ZO!SҜbO&Oml_~;B:ӄSzWAI5Ć~Jli],fCI,ck-ÒҠB<}ђSRC`}<%ĵp +J|oW-aGq"o^T,KAW`!P!UpZ}c'dѝ aXx[<\[>"/> +endobj + +4772 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [297.8902 615.4314 308.8902 629.0934] + /Border [0 0 0] + /Dest 4475 0 R + /F 4 + /StructParent 85 + /Contents (19) +>> +endobj + +4773 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [314.86404 615.4314 325.86404 629.0934] + /Border [0 0 0] + /Dest 4476 0 R + /F 4 + /StructParent 86 + /Contents (20) +>> +endobj + +4774 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [413.00983 517.1457 424.00983 530.80774] + /Border [0 0 0] + /Dest 4477 0 R + /F 4 + /StructParent 87 + /Contents (21) +>> +endobj + +4775 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [210.92213 469.3597 221.92213 483.0217] + /Border [0 0 0] + /Dest 4471 0 R + /F 4 + /StructParent 88 + /Contents (15) +>> +endobj + +4776 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [113.4558 455.6977 124.4558 469.3597] + /Border [0 0 0] + /Dest 4478 0 R + /F 4 + /StructParent 89 + /Contents (22) +>> +endobj + +4777 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [274.8422 394.2497 285.8422 407.9117] + /Border [0 0 0] + /Dest 4472 0 R + /F 4 + /StructParent 90 + /Contents (16) +>> +endobj + +4778 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [291.6684 394.2497 302.6684 407.9117] + /Border [0 0 0] + /Dest 4479 0 R + /F 4 + /StructParent 91 + /Contents (23) +>> +endobj + +4779 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [172.43578 339.6017 183.43578 353.2637] + /Border [0 0 0] + /Dest 4480 0 R + /F 4 + /StructParent 92 + /Contents (24) +>> +endobj + +4780 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [215.09322 254.30371 226.09322 267.9657] + /Border [0 0 0] + /Dest 4481 0 R + /F 4 + /StructParent 93 + /Contents (25) +>> +endobj + +4781 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [360.26782 254.30371 371.26782 267.9657] + /Border [0 0 0] + /Dest 4482 0 R + /F 4 + /StructParent 94 + /Contents (26) +>> +endobj + +4782 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [376.27432 254.30371 387.27432 267.9657] + /Border [0 0 0] + /Dest 4483 0 R + /F 4 + /StructParent 95 + /Contents (27) +>> +endobj + +4783 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [417.52737 254.30371 428.52737 267.9657] + /Border [0 0 0] + /Dest 4484 0 R + /F 4 + /StructParent 96 + /Contents (28) +>> +endobj + +4784 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [508.70145 254.30371 519.7015 267.9657] + /Border [0 0 0] + /Dest 4485 0 R + /F 4 + /StructParent 97 + /Contents (29) +>> +endobj + +4785 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [239.99207 179.74872 250.99207 193.4107] + /Border [0 0 0] + /Dest 4473 0 R + /F 4 + /StructParent 98 + /Contents (17) +>> +endobj + +4786 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [257.33554 179.74872 268.33554 193.4107] + /Border [0 0 0] + /Dest 4486 0 R + /F 4 + /StructParent 99 + /Contents (30) +>> +endobj + +4787 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4384 0 R + /f3 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 100 + /Tabs /S + /Parent 1 0 R + /Contents 4788 0 R + /Annots [4771 0 R 4772 0 R 4773 0 R 4774 0 R 4775 0 R 4776 0 R 4777 0 R 4778 0 R 4779 0 R 4780 0 R 4781 0 R 4782 0 R 4783 0 R 4784 0 R 4785 0 R 4786 0 R] +>> +endobj + +4788 0 obj +<< + /Length 5807 + /Filter /FlateDecode +>> +stream +x=ra$^稉)G)INo(Yt)Or.fy^ h }իw7oO>W7oừ0~꫷7?<{w]|gWrswϾ|ӯA bxE=8 7?_\Û^o.>խP ׷}{~!Aq#HS'?^ />Z= e*¥Lm8 ֖yuhuO;0贱5Lޏ^xi@_Wi2'ߴUԯ|ksD=m%V/~7LIayG(2zPvt*fnw;xk~&\ς;IdLO4-a*‚u'NI&#ƒ2(T$H_-n>Yզ30k>yVv7 L"YGt\Be%F`X}\YJEMD$n +VKMY)HNN3U?dR(/[@e.Jx-pL9 X;)ʐSIpL(%Fk+;AjG\]-F9c(CˠePwqLQ:lxQh:O_{RBB$hvIY#{ OQcT 9z*VvBj4K+5Ÿ"JۂUm2C딖8U Q)JD[_Ay=l2,l iia-SH%VS-%Is:U}ߎ OB2c L\?IL|V9fJ;@U &0fIHѮדW_莕,(C2/y:b=,YSM= +4uԨ@U?[f;{dΞ45u҃C "5(?FeY5 Fq1$ZGpKa@+'Ð,h9k׼n? B6[d太ML=oحRr27!jR9e,MﺚRNm{4Hfu$7JǤ\`NUoU="%ůjNo7H!hʛm5m-n 嫘(%a̾ NaAFճ&͐ɝ( H7:M6dDb?M6!#%҂Ub,PT"-$:E}H 4֐@t!Gh[ jwInTqTqbxp y\fXK AdR=@92 +hcfONc AAiuT ejD@B[3.tj-NW>^fbf%T2%>d(xna;l-exmPχ-e))g7s0^^ 0|>Ȃu8ȒA86,1ΝMxS %~|n ,iqRZo@RpCx(]lOHQzTGy#%8u1՛_o~_'_~B4p?g5hx sK+)c1b-Q#}K(G9/.įúPz&;{_Lɞq k~8Rp#D" 0@f 8rW |Tf樘Eݟ75!48ڂ|\ +f.<{ $HF+.+ۓuلe,;E j41-<'l?'!* 1OF(Ħŷf+GY`>hbN75cV-PBGB5́FI#ck.ɶKt2B`b)n*/Ϗs[:1aWuԵW|Ix +|L)YJ\&\B/x2;?_ շ%jd$3 + vR௚R%Q\IQ7v%zZ"hKi/dkX4 -T&%9SZD }t5iKV2\}e)PکpUcگmYKGmQdӗSorrXY>m+YYjeK5t-| 9^H?ʀ hfbB$d85X" +mndHl0?f:m|Kԏ,tv)@[dF4.-6`<.tv%/nۮ<`n!ytv#APBq;lۙlkT0|9R#mҵ7 O£dt=^z'/ci }7K*uIDr,}\ORX/Y蕻Co5E= ] uq#;M\sZd,bKA::q5DZOMDG˶?-ʎq_GZ,0-Qab-#ܬ's=kI8߿cSH sԪo'~M)@+W9oڽU˅LaoZ !u/#1՝ڵ6 YGduW#w}+_e$=_#~a˞d8?Wݒ6]QB)_N$v,Y(䬗W?O^46VTItNd57Dѿ:ѭw:3pZ,. ]QC_LnX̐BFcfb*/~E0j'D3ȾVEa' `%vj]?JZ@>c'kWki4=xdĤfӓQc t huvN[vzY_D-_j$&k+%'j#NBS3=e}DD8C*"~Ck .=aJj +[Pfto/iDgyZ!CN4>JveCЪm#jdTДZzK1/<we/ɱziol~uW"֚${(I8T?zHLyC.9:"  +2[L3qTæUtvy.Ɓ'>E*sԕM<nIM{hn~cs協];!;J4  m TIe7ų"EOv{.$Pf_2觑CQMg9yL0 )ȟ<&X:%7l9|:[2IՖh+BɆʻ @i ++ /v_RlQǠ u7uMqA&J(mtCJTFM݈M~72o.inPr!m2)Ao{j!ek S%vߒJ6\%Zֆ7cnFZ8alQ;GUqs&\~%NɘIã.'CBj3TG9ҿY. s7{[R7n[~MS֟ɰ>s_ gzamCJnWDqjCkAy'|FKS[颡-¿VB6? +#># Lw,^ kr +nzE6q1b;@d'ٽB9<d7̀#J@heR+B\h'q-PSR +bEhteЗnb?c.!i,S-;@OẀ zBj(e qTGhi@N9SC%"ijB)Lw 5m] DLa6ckJfJx2w"0-@`C)3&0 d[%>,Z:}-!R0QZ{O\qj&~T=ΚFR=9G[sԦlW4F> +endobj + +4790 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [389.9495 671.1034 400.9495 684.7654] + /Border [0 0 0] + /Dest 4473 0 R + /F 4 + /StructParent 102 + /Contents (17) +>> +endobj + +4791 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [327.1667 568.66943 338.1667 582.3314] + /Border [0 0 0] + /Dest 4488 0 R + /F 4 + /StructParent 103 + /Contents (32) +>> +endobj + +4792 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [202.81924 555.0074 213.81924 568.66943] + /Border [0 0 0] + /Dest 4474 0 R + /F 4 + /StructParent 104 + /Contents (18) +>> +endobj + +4793 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [215.80038 514.02136 226.80038 527.6834] + /Border [0 0 0] + /Dest 4489 0 R + /F 4 + /StructParent 105 + /Contents (33) +>> +endobj + +4794 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [386.66837 514.02136 397.66837 527.6834] + /Border [0 0 0] + /Dest 4490 0 R + /F 4 + /StructParent 106 + /Contents (34) +>> +endobj + +4795 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [403.2961 514.02136 414.2961 527.6834] + /Border [0 0 0] + /Dest 4491 0 R + /F 4 + /StructParent 107 + /Contents (35) +>> +endobj + +4796 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [157.96414 500.3594 168.96414 514.02136] + /Border [0 0 0] + /Dest 4492 0 R + /F 4 + /StructParent 108 + /Contents (36) +>> +endobj + +4797 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [289.38113 398.4804 332.71014 412.1424] + /Border [0 0 0] + /Dest (sec:introduction) + /F 4 + /StructParent 109 + /Contents (Section 1) +>> +endobj + +4798 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [98.00314 132.16443 141.33214 145.82642] + /Border [0 0 0] + /Dest (sec:theory) + /F 4 + /StructParent 110 + /Contents (Section 3) +>> +endobj + +4799 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + /f3 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 111 + /Tabs /S + /Parent 1 0 R + /Contents 4800 0 R + /Annots [4789 0 R 4790 0 R 4791 0 R 4792 0 R 4793 0 R 4794 0 R 4795 0 R 4796 0 R 4797 0 R 4798 0 R] +>> +endobj + +4800 0 obj +<< + /Length 5926 + /Filter /FlateDecode +>> +stream +x=]s 7*.ɲ|+)KRg٬]h4Y*/IbFݸyپwf;|0ܼnO7~qo曷w?݌统?mx˯^^|ˋ{x~5A b ֢ Û_.nވ/7_^vsqN ?\BBݿO] R ? 9l9#!8܀VPx54Xiy'a1w^2C{k"vQ!6!C`&f&4;4W w5`6] B~;30 ~Z#^G%tF{#ZCyg4OC?}Y~ gSqY*Xi'ҜΥDy;r>\iD͝6VN[8~.fQ&+kؐ̿wA8r?P E/kBJ +.pGsH0OhP2}\?l,9ز`O{E0i7WW pGkoBeAy:fKl0B*%p T=y*Q:4=KM?Pڰ6Qb/܇,_# 4(6jɆڴ!PY&/{(pWW_-W䶆GAB?; S{ BXߏHioBX%l:ZPhzX;pvMrM*Y+}Zq:vDmzox:+apV kdF̭|TIљdlDhJVU]_S~Bϙoڬև*=λ2AmZ3pYuPvyw()y2iFyp,Kj!e cڟırG(%žeyELB2hl <@pv膢IwC~€5n \?]5Ҋ˹! xT5B04Zu:< N  +֛>}tr-M +NOsjE͟@o'cIb@M3en1GF)?'q1-%gP7H[0(kɯjLu|+U[u#M 5BW +U?V֗bnD`>%жjSP _@)EFj"…ZC:EGKHP Py`A 5[+,h9FβPDz VU'r'8^jDRDޡĩЈ/$VP8Q(A51SE)m5HK[w-(yh Ǽ淔3INIԹ8.dZs/|wՄ +J)Yorol_}/bMPnO߽=J,FZC?% +51̶lKU D)!`{Q(Y2,V,DAZ#|5Y)QZzE!.AMkJժ50PƚL+sk|FŧA7`i(k,_㝆^ nP[AAXUE +NĨ9u.][6$t/iApŽNoj듖2 z +# iٶ| E[B+&<&+)SS٨ȇutZzt:|-̴v̌3_CK:3ݘږ[+׉}oq%9٤ĩ4p~in䧠XŹ%ӟ]8;O<5ƒY5qn)jvVXUvnynH +ɫ8*׽xR4Fe9 ' ۖK$#vaCӆM{lKsasAԘ~rE,$I\:N?_JRD:ЖQUy|pM"*qwDtRR@f$fGQ/~ʖ+=3Q5"UhAITMjeޢlQq>VҟJ-H@ˎMp3&nlN_ 3c#! +(rSÀC-`Հ> V;kivi8^;ڧ`ƬwJ|, ZZC +t_S=)ݭ +׷OAwdWX}: *)3=X`tTzitDO|}dTh0Ny:*F~5(#_*h X17c_kbtm!H/@IyauNPo•Nr)2Rjo̤Z~T_=r6ӠKW(dO~RxpƸK9zbNrg[hFp iDA*sM>I${[U4]`9%._R!@O|lt*R +*nŬjIo _zioHAS!n8E!۠)oڱa:妎2rZ`aRPR"Kq!1 Y>_nZiqmlpvP;b|Gv|,P̪4 +hzƵ~kh8@W~0ڸs v_Vg;xjyQnb{岵ɶ^AcQ`o&,~adK7ا]1BM q{q=8' hX?6KFk :W4HAx&bݥ&QLH˓b 99]L/R%+4 DkqMۜ >ud,}Hv;Y HTlk <&ĥca˴^V,OxfSᡝhX_ܷJ^(7ōj!Z#d$I7:Mk0`6r &OCRHED~jE<^V?'ptޛWxAnGD-ة^Ra`1gϷ9ݤ[x;_*t K*Ov^2Qy)|+%E˞&yJ?'\J$2@fz۠8gw>>{b Jh̬aId+G2/p~x#=GTk8^A'sc'w?&3cKhuWU+lw}xj|Vw)3 ǀW&E~+`ӌLlj}S'eh$CJQH~Y_bIzsêo0;`-y᳞dB +&loJ^ME8@4 ?AvJ>04Fe+Z:0贱˜Myᐣg3ur]SJқ~V{{]0oxDśrHG93JP|>jbdS9LKwQ%GWب 5ʇ<(I-Z{FYh Q#Gr5J}J<جH4^<;HՇΙE(݌4MOvgm|@ ᗆ?3I!URwYOZP3RI"/Lm(-ƞT>¾w1PS/Gc}rⴭKxu53Gv,vDt)"nØl9O~G3lZ r~x<%≤Ǐ`©vp8]'d2B:b,IUJhZU N.$9:R:W/&]̏J ߒKHDU"?XF ]IR1Ms۱ɢi&gV%O%mL7p3?5}*/q0QwOztʟLΒXފ{5wQBؚXz|tͼһxss5z7t{ʫ@IPe䅿jLdreQFs-GVRLOx`qddLq."+;@#mK gQmZ̶A>Juie۪VOM|»c 9v(vx؅5k*̴=+䵓TyYNNc"";2~)UR^@N8xʁJcTȵS୔ SdD}>ŷ!o3t윀ex9CO]ǟwN;iH(M3PĞRHiyhYSU+,6ju2Hm}8!|ZО]&sV{־86S>D)l]rkM@ 1fr |>W\&*q=-B +-%q5 53U77`eܕjuT.̵+#{+Ĩ1QE[#3 yKrd$0 :>[|lvi~-7ސJPXyOCUf<|V9֕״R~JSن0[܁:e1&JڍI&F{#G[#N$̴(LOlå.ږ^YD>E1229b4cp'vZ#X"6s@,y ʼnYg%T̙K{:. +nr#qTH SGH!=`!E%&}Ccz +/pײYàf +5 +d٧PC*` Uo! \V ZTDmRe5% (EWf.jhu />BD1e^f9O 6a\dG!tl*CW۲j ̓jOpP&A)qOmKmeF@ tjzh_lݽNh{? ?|aˏo~_7>|ؾ݌统?mx({C@cN9CT/g +endstream +endobj + +4801 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [391.98032 717.3104 434.9935 730.9724] + /Border [0 0 0] + /Dest (sec:preliminary) + /F 4 + /StructParent 112 + /Contents (Section 2) +>> +endobj + +4802 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [322.54614 181.4444 333.54614 195.10638] + /Border [0 0 0] + /Dest 4493 0 R + /F 4 + /StructParent 113 + /Contents (37) +>> +endobj + +4803 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4366 0 R + /f3 4384 0 R + /f4 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 114 + /Tabs /S + /Parent 1 0 R + /Contents 4804 0 R + /Annots [4801 0 R 4802 0 R] +>> +endobj + +4804 0 obj +<< + /Length 5927 + /Filter /FlateDecode +>> +stream +x=r\7rH]:K5k;Ne7,z);sfg0C'/8@;_>lݾL}t1M/77y_~?כvonww/>d.gr{ϟ}$LrLN +o-i'Bpzz9녜ӛ 9<\\ p;|?R>.n⋛ Ix%@N).'eJ}9]~ nf7H*?~-by|nP>'4[L͋Y3TMRRR :d9{9)/ wg3f2\46;,G2Oل'_?@{V csRge6dF7j GKX^Z  NA;/,kbqS `EۋьA9-,/Ô!0e41ͯ}7G_~Rybt_[ڦpVXCjhIHaC@zi/7LNA'拌X{!_E< 7\YQ'B|Wg +^>nQy`0-,/f5Q<=6mdQ(ZCSٓ!/o?Mx{Iik U/ }M8>w:݂aJB0$7RCKvڀB/;gy3%K^]AJJz壏e ™E)9vQhJ v/@Y*h<'0SwCnx\-* i&oS %>1Cn/f<ܽlc5} ^0sӴ u@7'vkZ Ʋ_^RVIk;^AEauWgH.o+K4^Zz,h[-"9c&Im`̲`9*U׃O?FEnHPGC I^`SX#o:z{KS:4Br^]T~O9 "WL|Z̔7cY6qnߓ]%q38XKmC!zZTWn\ƦH̉F Ƽ PhU}Z" 8RX#[FRgop"XzHĬSJ +<0$0$+6K&u8n)b)ME/ЎyDߥ]aZѪ+Gq#qy$OzdU6}I!)]\EGL׾c"8]*$ S^I+\m4+NĢFH)HLI⤛k c mq +eDF>h7|iB)Au6M[H&a3Pz6`.›>é=K~x9fP8-Lt$ԩȢH܌-ځHV=ry]W/QLhtx37#:c Iv,RH DۅȞLrD6D1Q IYʴY CJߥ"~*r?s2Ja8 +:nr @B{=hhdDx˞xI;54O@DKRsly͙u*-a߳r:vېAu` -Mu$ 쩁Q|ʋk<֞]%>aN @Dt`zM'>nN&3{/xv_ڱS#.y_WЖ4N1e+xܞ}iWUR33A<ݜn.+8rgx3u%Rǯ->(Aa W'&’HXb"Q&TF2I$1+wh@thCDC׵ ڛY) ֧ѡp= "@S!ez.'AY`'lx-O]ZzcAOsOagE[qgvN^63 t0B?\Cr\BٕfՒL;ec +dCO:ϑHc`PѫUVN(N߲ANIV|rjLvHN/MVclh£=EJA55RP&X"5<|Zl]g3}.*jS=7zff^gpghrqqo[Y8. N Dm|pvEYdgg=J&"A +PX }Wzq9A@ /L]LQqA.`†P@4ik~IS2gs;1̀.rha` @E ++CqbV'h*ժ5Kq4HzeɭYUW3WYNA,Gk@'ue\lyry5mlBΙv:[ b&*ԗ\h +Pqy7pM"gwKA 3Xzm#2 FaaȭNXASuRvRzV' dt˧ԹKZ)01] bKZ—QuݶR5 +姡mP XB02eb#fЗ%5]@8X6ԵINd7iA$O]LNm6z% J40B}~גhi8ӒS0:ǒfJAOF;ҍKc\?6ǒ^|/˜vbE$W2 |yHbߑ4|bgfrS߶ ƚϯ6-nmz@XPd7AHgl򛤟\e?xo) +;`Џp$i4A !֑RB[l &ڭߪ us!-ՀçwZ`xd'z|fd=Akp6cnCu/B'\#S6b ̃F,xuY&$SOf}O{)2xӓ[&_{R2اX}7],3ȇhlb޾`IOW +QKĽm6\ +lГpN(ݹzExW ra'?!_,G3M$oLNGy_vWoNWw^$3Ji4Z#2y5Z|]mJ/: f +j #]Tdw%7e!Zͩ64tA/ɷ/ƹYIM[FmG+CR0O҉`C]۪7M +Xg_Kމ4|Qi-58yʊ14xp5Q&F5=斧l c d>sa@&-E??^?1CMMU@-1 ` ITz'HmT`@M1H  ٛ:)D{>3y5Քz.'J++FLG`Ju>cOίjQQHy} +e_ ;VsaȏZmo vNCLyB4$⭇]^9 +u뷏ŬCo=\\Ђ%_RFh4woy0􅡋czED=b=ʹ\lM4I!ȃl+  5W}ML%V+lj.hE{b4>jO2=ACU~~ue8\̇2_2U}tԛϫgyh\ykb_O]V4)e6f!hd0jek䣹GooP cgk ZY˖\_wWL4lPWB/Ne]~%^Rl%1d| / CuGݞ_uwZ4YY>P3[ʆr#lF,_U^ +^-B0ݜ=ރS"NYIz>5錹v[uDu?t!BMu<6r1tڸHG [:Q:,D$3˿*䗽Ta%0Zh.S$ G>FB_XVN>ۏ&bHaf'o^N>& +&U2egWV@DJ|ؼ}K+67y7?ݯ7tG7{ӻͻODcl7wƾmm +endstream +endobj + +4805 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [259.9224 538.3174 311.83884 551.9794] + /Border [0 0 0] + /Dest 4494 0 R + /F 4 + /StructParent 115 + /Contents (Theorem 4) +>> +endobj + +4806 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4384 0 R + /f2 4354 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 116 + /Tabs /S + /Parent 1 0 R + /Contents 4807 0 R + /Annots [4805 0 R] +>> +endobj + +4807 0 obj +<< + /Length 6944 + /Filter /FlateDecode +>> +stream +x]Yq~_00&*:"(<eQ7 Jt ¡ޝ;f{vndvUVfV_>ݏ?z}7|0<뿾~w?k?zo߼{z߾ۛ_ro~7_÷}_ a! acD 20Mg/o€8aaO7}Bn~>qtO*!!GQ Ib7oB +1@ +CS;x'bua<oQ{B|t| >uDG}ar _~;dMqSgOedB<%%v1fn꿬P/ y $_Աg DP޾U'dӶ9ebjscUqce08jpdnzp;Ȇjbwa0o8޶ żv~FR AM[^BA\1!zv ^k"n"136ruGV냃/vǷ=M`:| +SNv݁voH?oóP½f)__޼(-9H|֍D܅=uwOw/kT}\{ D +YM*?$!/O8)Vqϰ\MsM) +̨M [';.窱nk.Nuh.9^T2f^RU G-(cSffME-2fE7k* \"79FfPB-}7"rφp +?Q$ + 3V)e$1#'q"YZ[xړD@cZ9)G US8bGJ rak쁺 +20riRO?27/&`Lzcn/PŸNdƫByIhc8k#1Ab]FAl2RFՍ!h:n K?k_ZeT̝Atb@Z|-]ՈHEI;J)ׯyq@DB\_k"h-b'We.W;ѽ1Ge|!Ǽ׎~/ (~MR%^zy +ByW %Տ^F1"*|ExuE#X/BF>hQ(}<ڶBv8FL- S:ɋP /{w&O?r>Hg눗sn.DDM' ޾Ϯ5"̩ Z(w~Yn\.\n8jډmK ~hd`"CAͫmqednlFVV5}JuF5HkʺۑDMonK鷜6/MrF7=G:umޫ2;(qV%Gz[VʸXd4q׾FoTbN2h*枋[˒hvB ͱ&,h?5߭)֌@TYZ0I֬!EԳNܧk1dq;Fh Q\<äy Qq#wBRb?Z{U*zRp/Kʐ"/qʍ`收C+ 1F1xfBX!D䭮$!,@Hζ۠>GX-kbo= 1p$.w5ٻ0ݾrL}z_:&|M%Z"@Z`Ƴ~8^)Q۱L~U8s4_z2i;{1z*Vv&qШPdMb3C.h:܀9&Ni-RKЯj>BɐR\ɇ&[q\_>4'ٔ?VD$qR7VP C-.be Q5t'rZdYi֙S`rh:pJ+3p +{5]QJg"_|RRGUVIvPq#P 4ٽU<@o c-eMi3P+CG@TnS]Hn) Яze=^U !!FMKpPABB9AE(oAD )@IdyXL@7Y֜gq}[v'`N"~|^R(Ļxnڻ?D ,w}\J$nݎo q#rw$&JgX tUC&|^J#!`ı8]趟#%ș9C$+Z s.nap {P;ᶟ*`( {w(ܾtLVyL9nk:fKU/unN"vc1 +.P-Kܼv2؁=LRĦў^?fч>xW\ڋn;iB;h}tѪ͞>C9/F9<#3q?Ycp⦆m %ۂ|ju^D#b^7^_(`I T]u_~н  ,@!.BU †^D6wuJ[B89t rl}N M Dz VŗE@>v ZˣgJ\ +Ao;8ucv3d6:K 7  ؽ4VG9nke>ß,ʄ\Itܱj> r<1>H=vֿ6iYǪX_%U~]j R7Z5QA)^UBKp"fP#XbKp@)5\G3ZGѿi$݉j3@@,޹̚h 61$ lA7@pH\a %Qp"Lm\4@9z_z4C`kw'5At%+t[%eӋuv@VnO:pJ.WGy_܄ yw7n 40͋Z35AYJ i$`b1`TH!0efdGhx}g6QsjgmGEBL!A(ӝkBPR1$8A +ډ +cZPđ(5 a$4 "em&q=!qFOTHzy )y50AmM&e4$!(.B7-,PKJ=mz {ݓS_R=ىQRdkvv}ܱw/;BSBf:nIe5 鹶߇̰飥AK7[IB^Bj9>aib^QXQ t5a!&3(l d8ؤWK-kP9I%ĺI"AL9*#ÿ).1p1AF@q@-(V4gzW\nlR*a!>?9pZִ1T KtZxu#>`ru1<OB gbS .*8&/@5@AW_]]bGZmr C~Z_ +o+o𬺜o/7 _r!;r <̆A*<5kZrQ;P"#vɸE8}T{8Cۚp^ !P{Wp\Ԫn6bYfG4!eջC ?P#Vvl<] reGkNf Un9\ P=.!$t??0SHa;#UV5&Kێf6(Ndrn'Ƹpkr1iw!:S㪔QL#&1J0(>Tv] @B8gow +}g,'OG +?:#oOGjoO!!v ť@(Mk⏨P4ys߅%(tag(+oóhJ"vhPv^ɼI\ }XqKd!U jorWBveSK()gY 4M%t?pw>yw NosJ,UMUv؊4$]]NTa3W% zF2B +;o~|j3Cˊ( + -Թs ߮mlJ. sq ZbVkڳEm%H(֪^?K.l I&ޫ& +s zjf,'-Y% .N! p@TթR(7mBWcLxt"쩌hԼp9 lqT/T[z簶Y61sP6x$@ \x_r9I=2P|'#б{ip719fךX.fHxw19(^] ؒwq7X*~w55]AlĢL݆ `S(VF(9SXE)Y +沬$!Y֚iVIPreoSanN"MlW?y~?xTub͏$kjN<͸On<+ Bi +ѡEH{熋&cեuuQJ I7E[}哉Q"y9&W8].a <|ި*aCyXچ,l?S.0huƏ)vs> +A(1sujG? rUx=^&Z9dߟSnveV&W r)n'rv-YǥGc@BO.Dvq3᎞#0Eշ'Nx~>||)y7ew΃ONTEၣʧ3vX9cXtEKᔬU.ʆkZ[] Ic7J vE-1ehc.8 <.ĈaJ_j䋃[01K3GhxΊד_:]`4Wf]0s(]'Rv96ΪޛD1(Qhw#[՛ ens-}9i!6 B!QbD]. +1[,] Wt?,B_a >k.G]%lk:>ͭcѷ?>0ZqQA*c>q8})}>ylK8D( +HG9|o*ONRiG#n!%<0`5T3 +NY2hkv1>6xzf?5GUg +@f۞3qu| 2KS5~&C GlQ%s:S*+S P(EOBʌ޺V\]{F|6-_xs4V ul&i<-)LxRZ&i<)5<W 3Q)}X Ķ'%f*>fg!C.M~+mjomP<"hjWD !kmz6 9y Đd)q;l1m)Z6&+EB&Tr!I q*55cfp>)f./f4?%@ɗ=%t]5!ΜS'Bdۗs ט%Cɉc׸Q| z$dn#KGMX5j5e.IGyd&.4vKbo=ҒwEWY9P.'#ݽz7_?ݻww7ݽyo?z9OWw?{;&Hj~;_<_:@] +endstream +endobj + +4808 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4372 0 R + /f1 4360 0 R + /f2 4384 0 R + /f3 4354 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 117 + /Parent 1 0 R + /Contents 4809 0 R +>> +endobj + +4809 0 obj +<< + /Length 6139 + /Filter /FlateDecode +>> +stream +x][m~_14؛A\Z%+%QRYJM*aI2SRWߧ0gef0ӽsF*끫=;gFgn޾zu}E=՟^?~=_|=?=ꇷW7o__|iO.|o_t\Pv)r]tg׽zwvr_^]_|.{ewy/Px?i{ŗ/~osJH+N~|=bn?ߎ.Gr3w/ o숼@?>__vr=}x$R^|vr\($2xf/Wbp'5\2W~ ~SY +H#LE^=c^v{3\@_{<py.(XL)Qt=!/_ڏN5Nw9".t/B[_س[.*-}O^~E{;'y` DwΑ-ws{a K\, ,={<@0qs'sWиhى7H|{xZv=ʳ_.SUoG__G{w`n |L]}Y¿քx?8_NNjwb,:%9`2 ޺8eE϶?{9QHKV#e E'3.s!ihuՏ~hGVخ0kԬ%7#qݷu{29so7~b5/ wqVr]ܩ=\x;.l2檬Y &uo,FeD63 D&i8GBW؎Iͩ uXm?^b2ÇFொpBl/sdFn޲wem~i8إٚؓdfL-qI=åWN}qif'#ƫ>_$EJemG>P>=@\rwK,a9u; ID,Fra_zACS׏gXSSKϱ>,rafTh6>Y-]1nI'_:D&z4,wƹohr>Uqq!R6Vv\0UۭA8}]nKbo w36`#s{)Ҟeq' UR׸lCXԺ#v;Zc(rYyp[?IY=WϴS}"_3͆ +E< + 0`+F!:a πAEDC iuٓ@FIro '!v8Mqfp-‚9|x}dn:qx5N -V,|qee4]pV _1bN R^~]"$kMh:# +&2b c޸{n Y"O7 +s*Sءq9hObz0%b&,NBP>Š| țVfDD %-[WLBA{"qmLH~Rm3CnL3bH+Ό% =3cc/@)jXr)0Cc!rel0fh2@)5̽AG_JM8sw+d+ma."6ZfK@i +2İ +f دbJoFy ʙoL#8gέ0tA g\c(e4]Ȍ,YoSldTbv %ur +w,-7mfQufz 8XLL=,)I^oϮ@9q}maа,TY_i2ATR/8|=M ZFTG$ ķт u뇬4cfu=MuB;:&O1x<#O͖ۘ8)a-zӰX?Ė<0=1g ?m KEt]TWes s{L=pedX] Z;WM-ÅWbZ^^[lԱ1O}b0DIIglP~&82 &F^"([ [Ƒ] +2(d8\+T_yf9d,Z3-0[fLn#%,!gNsXt.'rs)KQ+P|PK~Q+ "4 E/`AP]a; ,P2(kPlD:X(bBz)m` fZA +-1s[Gs_< ́i3MtRJ,G:KQ`- G!`@]cR4XXgS3R4a;XgoAߴ!%\A零P[(bh@_6 +XGEvkQfTe=- Eh8)99~u ʏ6v&e@G460v{s^=5ѴcZAEw`ǨHhi y\4vn1-٩PklG7tFEҔL'54m5mvH2S r*E{ +0z?p羪lvf{/ü4{%\5^(C pv޽ XE?*8z7^SN(RLY$if͆b Z(ofG1@r~f5;^V_^ufyaW]unI}B/5*Nufr΀\Iq:|Ҕ}+5Swnѳ_blDFXBuݤ ?Np7UXj=mr< }]\$˝NP3[$fsqɷaLI@k|E~ ʸv3h \X('~2Q֙1>:mPoVbt<;(ӗo0 W&$1!  HkފR0r@`N5bh4K ++/?vs&jf5]A;CpR3de4^v>4/&= UXupY &/=,L/Lti ӛB>5t{nCQZgD(cFxwܒ#Rm-_bmܼ}sJ0%s'('.{_.\uO/B"'AwY89zldSJ%2)0v S!SsPM 'p}5׌uA:8r8A( K_0U3'N?bxkfwCR'(Z]їcLj:e9,ID8\o&^}k=yǀ'R[fQn!BFF꿭Pߓ =@NK$96(^%K?R՞=2{wDQGsnޢStMFUzwV"Sҥ&%:$l=M.Qix:R0"_Ӷ3Ɯg-(f  9wABr\ͨ}[ +ĀYXUz1PωS$zɘb;I[r&g5ِ+9KkЯN9("St031m6b1D>"ì0ɏ0r_V_'&[2az{+Ll=*QvMiG%=r!6%H>KTd_7Q3C()dtG ?M.!aV坌N}qv5.cŸk88e~ƆM3-f +h' 9xT ČXPC5ts_.v3conO?_ћof\&/6DlWLbA(}R<ݔ95``}C1:9}QBYT;DQ IL8i/d:gF:յ14ɪm$NcmU[$R634 fyTHneb>)1dhb)&|Ťg:L$?4Cm=x.{9DM!'J_ ,~meb",=+;82!/Gu -gb!%Ims5w>4et+QeC@?څPaf(KvYR> +endobj + +4811 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [186.94914 178.54639 238.52814 192.20837] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 119 + /Contents (Section 3.2) +>> +endobj + +4812 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + /c1 4403 0 R + >> + /Font << + /f0 4384 0 R + /f1 4354 0 R + /f2 4360 0 R + /f3 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 120 + /Tabs /S + /Parent 1 0 R + /Contents 4813 0 R + /Annots [4810 0 R 4811 0 R] +>> +endobj + +4813 0 obj +<< + /Length 6514 + /Filter /FlateDecode +>> +stream +x=k#qW"u8 TcʼntK$V*RJߧz\r= ͠@wxoy~oG/_O߿~ׯWǿ޽_bn~鳛#~鳛!qxj IaPP4WqxM>M ~sc)9D 874dP@$B\R%qxsC3 +F4q DF}jϿyYO/]}1D̃rw+7q㫻ۛO^vx_7z^[%DhR>j/$6np(3 )F`΁5!n8z ԨyHB +t]Y+h bɃRi/ +hRۯ68Pj<,Qq* Qm4rM+|9`0s<<~Y-lݰbLx,k_D#!ҟz4.;s`n5/lKL@4(Q x#i0) +9HPt.& kj;cHXpEEWѵrB%⠠A +횳A"P+A'I +v:Bf_"a9u:QG*ə3G]\o,ʊd~IO\XG$Y dN[!v6 $1'Sm* ATF9R{ ɡ)9_h>uJn-,FbC&?޽ v |7V8͘.⸝䪦\-?bQ 7w5\ᬽ9|ٯO^:j 9%A +XhM |~<8Q6<ͷXS/k\9K TS :2/"';Mt\G! +ޡXJSSgit  Ol7oLzor>D:M8KvZ>{ [<3X2ò0|*.Կg*6"` ZٷP[K~IH9G!Anՠ{b04+)5Xɍ!?]8qx[ι&n?c(1x,F <ߓ$,}%ndsrciA[P2R\/-#ŕ3(".'!ŕYr'xW@ZeIUNUwc x=yb/ǃA6SAo_[7 p XX?\'tމ6$۽Q3jgE5 !B˪uqkrA2e k\bZ9 6Mnu}hz7qݧV->%>B]=stء!S_Δ/ѧ3& { {/N;[*.["xF&&>ͺ%]djV!}dr6x$/iNީJE3ޤ>R7foLv#SNw{q29 +;;A;Gߩ{,U;(z'E>Nbsm6-R-AXf3NǵsUOy:qip'K4b}jns{]Al#U%Z{-mn=okl0[X/=)l)/k[PAlJ6YU`s݉G:UޕӴEҨ}a 9-w/l/i;f|yAy&6̉WU{1VՁwQE;s{ר"-bvF 5 # j`?$,K"[ dԒ_)u VSr2ʀ^5P _ŕ ! Pr(jY^J@P0K?j]g1aj?v761>TBů1vY + +wj?7YnQL+t4D714d~M +AJleQkB !FK_8A3JlU'0ĥV @?7ҳQňƋj tLG,q# JyPDU~UF Dv*`ˎD3F`]UPpEuZ(L܏B3HD) z4=r8`4 fGؚ~ *CV5Ћ@M3JǪ++굱?ѐ8PON lA&;c5as,@UeՊxLw"P{Z hqR#N\[֍BU`{bn#j产{5UO x,@51raV֘d S>VӀ``H 3/~;K]-~r~|q2eb2d7;T{Jֵ2kw@~{XO^UY[]QV_bb 7Txn0I +dq'Z&RPkyqqVrE NRP 咉-lQĒn-eki VRY +ʈ[B|ywox+^[43~&;^'Cpqw+k̡3MnV>V1X{~uK+peW1/\Lr_0'W9ʷtevMrbi ́B͚_BNiJġLtoyG l$z:4 7{(P֫ϐ)6]jwu`rwΡz[)[ $ZPN pk![9%h{^'wpr1iF7 p&nUh4|>n:ssn:s|¢m;gd)g_\$eTmDpPݒJvV_ +Hsdit!``pKsUkĨA%Ih2]~s/V4VUd ݛ`\ĢҳR  v?+w#P~"s>T~͢$r7Uu-!1'yxNm͢It ^qj59c7cխ쳎v ]W>~YQtk,Qb.U$1ݸsVq-v!]U@J`w +|cůL +R/kb+ +7ΖxQJ|$c:AƐnE/J3th~Gl :bu7'1n郷zsECñݼ贖)]8&<% +<n+m foF2OB0sk3$P}ij)'a?|LoPMRKOww<`?mFR~H-+pbk;!؋jXCn'P:[kvesF+=_-쫓ɐyƖgnډ 9W=. oiv`cx{(mwf5lޯ\LqK`ޯ~Ja_G2FfDXTDB[hYuBK;wcm st:' ?O'sn~CtknRnCߙK\]tVlO}K]ck]3ѭek5͟r:[̾;T-KyւቨFI8D͆]"ݫ'›G'%̅4K̇}!v0LwN,e3ۡ\ t^ <ݵ9VO9v"Sjuiխ87%eMS`F'VT\n2bjRcvUR\J,ԒmPB@-ݮivؙ 6M*JJrpk`,ppEF{ 6i[3͓G+ϴFgXsg^TA?.텫N$h"eb#5h匦"8r]1T8[.l4tz׸xxkz8st}nJ?y4ʫeWcCٕGLc] ;/XG1c tfW6{"򘕸2/u*ߋ4^7O^+;?Z%Y<rK<1 {g"/yꕪd&yY9ݞ)d-g:EbXJx~<>#rN }b(}ěqvS)+IW'zu24fq [;QޮL)*2Ѯ`Nco_%]rױ ۴(F3-t*<[ +mˌꚳ㓶P۞yGl=ߏJυأ hroeTܪ;琘[s{}M `rs Afsc%n9έ\L+C,y''Kg Zn_vjBt_]W +hZ59|f惞|0R+R%YHՙ?̮gxT`is(WSCoAusN.E R_ll .d/i@/Yߛo_ [E:AWsk6Z1]t.K4Sฤm﯎t8Mߑh& + +ɴB!k#];:p8m'rƨ%fj̷Vdnnmj Vhe,k39-awaqO<ҋd79y,1͞e7Wxӏ͗߿wݿ~k_={fy4HG\N? +endstream +endobj + +4814 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [321.7234 605.9284 332.7234 619.5904] + /Border [0 0 0] + /Dest 4495 0 R + /F 4 + /StructParent 121 + /Contents (38) +>> +endobj + +4815 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [340.1572 605.9284 351.1572 619.5904] + /Border [0 0 0] + /Dest 4496 0 R + /F 4 + /StructParent 122 + /Contents (39) +>> +endobj + +4816 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [330.0642 189.77643 383.65222 203.43842] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 123 + /Contents (Section 3.1) +>> +endobj + +4817 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + /f2 4372 0 R + /f3 4354 0 R + /f4 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 124 + /Tabs /S + /Parent 1 0 R + /Contents 4818 0 R + /Annots [4814 0 R 4815 0 R 4816 0 R] +>> +endobj + +4818 0 obj +<< + /Length 6211 + /Filter /FlateDecode +>> +stream +x]Y$~_XaVK B}+`df*f驪LF0H/7om>/7ۻyqW_z__~?>xO>ӫ_rkOlP_v 8f&`^ܩWj'7WjyzF ͛W[{o_mRӷJW}Rw>PfB$U *MWޛ8o]dSmm5_{9-V3o2`!8g#w=蝴ء:tM Nq.9#pW\XX5uzx9cz@~VM:1]2gw%Ø21:F)>|s=ku81]әpQ$s}r{Ij?5u˸smx|w*LZϧ0gY%aSuBDmsm;^O\!F4E6QˏĄ~2o+4ŋvⳅ^p1Йξ{Qgm&=5}*_-Z[ ,&)d"zU(A)RPRGkdyvyC,u^j-E˒Yp1Ku"QG,G/w@&oL3<ܽقeJ3sgd1$èK!VU´w_of^) c/U=u̬/ بWUQh|6;{$O|u0W^5;(mJilIF1ˮ-?di$"gJؔ;ŋ1USy;qGԒKeoBq-ud\}vP9?a5Z3(ԑ`P(2K F$21OƥfgflֹVU߽<9)u'-Xj_aug9互Օq-f k[~Fdfv6b\-.Ɲ3Zt:PSĭބp7108MdˤRp%^1 ⶣ)DW}LG2Svj3&R5gTh=+SMT;XjK D--lwqinf@T,~m{"KT)// y%4zPhu8cw>2}.W ^cގ⊢Džx!'\ ֒\pҤ|"m-gBI>V Ӌ"K'l߽B.wom̪_hU0S3SAb(&Nr"0nmkO-њ/3 XKtgIe.\ʑM-r\4T*EsȱX|L@{.c9\HMfP}\$ P l@p4@Km!6~l Zf<>,ъR!Q._.C?[=b',oZD`4=%IJ)AnJYsxT[P$#ƈ`U#!:-^Z[E}73gf93gTGno%3c%r6hb:NM_4Ξ[gl9n:f)5P;N}[ `H݁rԷ% F y&4=9ًᩏ#&g#)/8#(jޥ+Dcz鋖!N` +| LJ8YCsG|G^})/:<ĶaQbg^s6.؞3UJ9|8^|hU˧ӑEGƳ;& '[jle}3 +ƶ_Me.Z4  =8|7$쩣g'%TؤI$Pn#7o׫~n@q4^HhLD=N*{4t)) ѫIjqUaW6"9lbMsq "Rի0l:v!"W!SfW阁yZx&/&0)t؟AѤcL4[#[xPV.>lO:VM^ +#[kcP*_RJSCj@OP<\p}fP<m#CUO\딂NjY=T̵LK'SPk "k{8O+lm<0 w&Bz ZE`Akc +_y"3@ |?A1?vLY4Rt:Mΰѝ YnzT:XղŋB\0ZkOYJkT0k!wtjʝ6(/`LDҖ7^NhJ}7·e9SI4,ҋ>DwTi-)yV)1Ӱ 1  ~> o{HHaJf!a: N:V^-T-p}dcu:4 ;{^$WΛi,ٚv9{-IN!Κh"/s\?ip F*:v]lluq@JYesiBx%lZ*guecJ'(Y%8yUeCSثZ($ڪ$~^d!| +B/`=6"{ZA/@X +H15M^d`HfbdaVP迨YT m [|r1W4Z2\cn] Cjw2}k.DAshC9բ]ARnrzݎaU +PX̞thX"|1RR4J,4R`ρXt8@ P~:9tN37~`qq0D@L&H\I=z +HEB$S]C鳺1(M_̃6I)Y 8Jx*ETK_OXT(WXtz]ly\QQ 5kkƋ, ia`TJ,GA7T җJjO3|uMW!͂40-hW/K_vEyO ~ +@tYJuti<`Y cҿd9F-+ F-,1jy)HS՘EoF +1RńIn34- =Bӌ*JDD3u?X\e +fQ-_:xaBP[ 'T̀:YP"c9FW4NQm0kHaȢE +"W& 2ɥr &xc21L)@R[* rD+pV%c@Ŏ7Gb0ePz9x'2M`@*IŔشtHY рQ P[ 0z0.Y]~ X,?tLgVX( T;ykc3M' Eg8TvN$k_|&X۳ +$` tS)@xgH71(@DH ̞F#42:Aq2Q:>H )4/!d$TA;nO9CII '=RG g)!zH&bq<:UF._VMIJ~w?G=1IiѡUls=G3@*@ZAQ{c6}/bK V_oK06{f Uw3 a{z`480WNǦu{BJT$eH`O+c:2x07{ꀗJʁqZ0ג̠F +M ҭu]NNZ;{܌!?d WglL kg@te~owvm 4ZJ0D\< II(`/%W)IFt U +^TA?+۳p£,hz|FTc[3/۞ +7k /{KL]0^3FsS6ZC=mHnBT[1e|qrpȕ$xa3tD9C2Ur^yUs\kɟ %ZO0ğ谑Rqr׭BcKLA 3r@cs iך=2܊:pO+24~ң1B2 ڀvZcba6)0*Ls,ZֽH:YU↲!.W3-A^+j/3[p4\S>?3/vu,wu?m۟n>zWJ}Â!P}i*c +})B? %ݲAx)3 S^ +Կ9<0mm:rbE8N}U>Ud-gef[k(\Uw~zb㋻$s6Kج[~EYTeI갧Ctaq/`s`IEt--|s@`^f~~8Y8,0r!9$fW"5uTrG?mћRd:%eGUZ% tmMNꊫZ65XE?\z'1EHRY^*fŇw?PaNͳ`d:lR-+'(7O愦 Y?K7d:e䗗RHYhb4wxyn6ۻyɻߥo柿/^{L_݌rۇwlQ 0tfڎv.vP +endstream +endobj + +4819 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [350.45316 328.3786 402.03214 342.0406] + /Border [0 0 0] + /Dest (subsec:component-lifecycle) + /F 4 + /StructParent 125 + /Contents (Section 3.3) +>> +endobj + +4820 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4384 0 R + /f2 4366 0 R + /f3 4354 0 R + /f4 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 126 + /Tabs /S + /Parent 1 0 R + /Contents 4821 0 R + /Annots [4819 0 R] +>> +endobj + +4821 0 obj +<< + /Length 5900 + /Filter /FlateDecode +>> +stream +x][s7r~rbW-4"d|@ɒTLidMS8<3gqfAƇFᣏ.ŏ/yrwW_|ۗÓ/_~>f?v|ooӯ>?_ 1< ֢ Ë.Ë/󋻋On.psWǏ㏛.[!ķB +p=(1$&A@thT?վWl%5ʦ? +89?;oL̇}`MCfsMI|33~fpWU/8 +. A6O Mw܏ 7x?0L)Y*L{zbݼnϿB}WBZCIj 1[l/NzihbmZDi 2Gɒaוy 3q/4 :AI"5ŞM+ѺidOCn6Ή=Nnz\-huj}Qy^fX3`[ 늣T,5JcXCjD]|l7Sυ뒭پGɰ&e oO>riEZf x̧G O6h0A/ͫiq*2C LיUnfc xE('g f:ùha "?ؕ+@eHzh%&!5SIAKi?SV<d3dl1}{CǙ~da55ŠY'E2$dCJg2Ujov#&`$##C]|s\+cYG-w \M{j{GJJW)0xN#GVhe&3GTMn"uK@KStvBv#G:s&=C\RԦrS@ȫORo%uˑ O~)Sj OI.,KIr;*l&#OADcr$k;PwA#@.F hudP$}gEh@mq$?ݷ,sǤ|8nhjY5aDQtI|pDQt }hEހwzsHH-:@ڦbx3՞7W>r:*KmƂm'Z#O,.젓O>&WK!'swqr>I(W +tN]"5uwښuء4`[g6,dGQ)U'<^* #/?PdX4-ܬb.bfIgzG+r)eB$(mmrycw_8| +QB,F'sH}8{{Ӑ.`)uTXE2%Tvsdt^  kL +ˍޖniE7Ɓp2aZ`զڙjEWZ1ТԶϔ7M2ӮeBLɔxqi=aK6!RZTY}ؚKѠ8|l'JiDPœv[~M^d˗y5e~|b˫g茾$ÇYCj!Ȅe]bZa=gMOά1հr#$hߗZs,x'#2gJF=?.TkT +6mrNz!]R82Yn,K{ׁБנ?p)cTUv$FQydOg q$@\\F'+'e&Pz-\%#c.ђ@:ϞjX2f:plgӰdȢCޠ xB!I6;Zj74:nKQ0(~GQǩTΡ_U2-;>Q+RE95Q{^Et+>QK T+kvvsYA7rSl;,Vʙam.Lo;E֑N%o@ؘ#ѮɑwԹ$YG'p2&6EL]Mk^Nĥ_96Vw+YP*&$u+#"\˛w1=A[[LuJ4AuS'5o(xvk 2) F@i-ܠi'fxБxm|#vbԏtct jsl/س@MhD,O@f^) Zɴ+!a$ ̺ͪ\dǑ_6*oAA,ZJ2s[2.6US e.Ik $&A.YMj+&Ϟd6ltgQ,&M |mo*FO,&ݔX貇 9RNK(rUDYZda磜UJ=\:X:;Dެrnt|VG)˞!SS6qZ^=ܯͶh_#r@tχ7$̗ %N4Y&m'Ը*%frG?nPP.:O.I}7]Ym*Oneϲ+r%7@4R}8Sbc RxLNEA: +btڷ>RZ~@D[0qf+,Wa.j$%DL'jG O 1dTE928mr'ʉsi-EqG˩9[8KSMOpm{9Io|+P1.t +R $-Em5DPY'td1r-$%~ +W,}4La%|TF}IiE-S_ʯU͸ž׵ؒЯ$ܒo&eNd%m6Evӊ!Y]:__c/˹l7eL5j0VgH|Z1ߧW]/1󂲤˘\D;uo3Rm#`R(#TP Q(Qz0ըgnr:YqR q Vr/>$kʼnftQi)=ӪF FT1#&8$ JX_qYZ}H$kוcw@6R,zX^Mٛ U wg +F[av]O8n^ +wt.gb,gh:2Y OUƂyɊy1҄ːTzȂuGZX-,8!0qU酿w3'|Uhg^6WܩVkcRu6 ɥYzvӺ)8Kɘ-e,J3!l69$ G{: jqEa +? HG`Hq@VtXk[,`W8Fn@* +Y.%!HXnXEu1=܎hNd9P +k+  +٬{r]~z`O|$™-<) 5wOOORANz9*xL|L>U }cM}ekI)Gg6+TxߴjBUG:Kb.I}N(b"yՉ|> ɏ1;4BبfN=?;ܡUhB-+)B8׵TpR~n-Q:k}=2TrO_N=nh!ؾHMAΉÆQUyBQ;1{:q*nAHזbfR~ms)jtJk}[y7fA1Kdj1]-~;"螼|Tydr ί87BϳjЉw3 +\-1@PAⴎsQ$+Y:&]+>wq."bFioke7XD6@MvaJ-%u,qM0;M ^_tbJAnub~5d1e!~(dD}8fI۟lվoUQw"[ҟ^CnzQ}@6Il#K6zbK:x0{GPy6}qdԫ4io(䳪F֯vi:LOVPG]HL<1[J\iSD(k #DήH "gEb6rzօ5ZKf|f{Lk'>礵YccQl.>Xd?]\e[]ϔ9s̴GZ,UаЂaZz9^lsاׯn_v?~'ov7?}/w}9<͛t7wdT!͓t | +endstream +endobj + +4822 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4366 0 R + /f3 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 127 + /Parent 1 0 R + /Contents 4823 0 R +>> +endobj + +4823 0 obj +<< + /Length 7941 + /Filter /FlateDecode +>> +stream +x]Y~ׯ8EZ$ "KIgW50z=njKb^|vWo|pxë7{/^/}˷y{_e?w}OO~ϟN~}pO{u/=;'xpwxC@9D@'/޸Û>q{Oˏ=/v}툎??OفP24рx{04F|xOK *@r5@.W2&v ̧od:"YT 䄼O5!3'jnyz8 Ot + <`JW9 x:n?P(P`̓4#uluI{׿_>}=:s7"C8Z9-!E<Ā(>{ë}|/p_z˿w4btTТ͆?e牞Mm9-ZEB Z}gpd%YkA%<&U:1Xr*(WR`?OsUCx!}x!FZ!V3Gw|j_B$!D;,MĖ4F! +!f~qQgt*OMh=b&#_X^$Xi;0Ƒ?t Il$Y4S;6bUpoTĹ>59@8qvc+dpHӒ 2>n0rY@"3 +d QBYCj*=Zk +Ca+59x>O63l?Ϫq ~4w_ +v]?pߙyZ|nzo~`v2t]u {kF_$caDŽX1RۇU}r:|K B5VoZ̅5jļQm_$wa5_՜[zAvU *go9*F][&5Dy-|M{"{(sҞiO6T=ES,+LoO'zO'2EӞ|N>ҞiO RujQJnQt0ΣJ/8r^!d9hĞzWC}?uMoaԅJxs+牸L|@n /_M֖oT!7O_q+4+ur]>ɫ%EJHd%3P&n^u_y|uW.*v[~&_<6L^|?NO@~;7SPC)׭& IpI\!8~9Ql +-\Yz4zn\ly")c>t~QVWi,HeɘVt^>DbhEإOWk^ըK3)S(bԢid9~)2a1:|הfsQRS(}%_pfx?4KN~>@m[X=[WFdNOf`Fժ3cJ~=*D* f=VX 1#jz¢Cxa} +9?1"Fyrxȫ2%sqĺ}3| m"5lKcEK \K2o5XU0mMJՋ:B/E'PMzyqqСC~W_'fSΡM/iC5frTcY^%Y _U4 ՛18Q;;*^ DPmGVo!;Neg~I_%AB`B:)a#\B"8 +@dR֝{.!vٹS}ԑPSSɒeW"˔A㮄7}B?9*rvjGdSTo#p)U/>o;)leMA^2LR\̩cbQ.k爀)HӫjQ˹yzDxށOi>`81wrQW'jgfp7xtqWG)A )Ο@İq7r*S1~Mc@VS⊋_yU Af܇\g +. LEh *GP[ BoDr ɷbT0 6`a`+oIS  +U<Z7: #ȡ^C%u< +S+5HH;gC}:A HO05AymW#F7]ji5Pr|ү["oy^rasW9C1Vc+H@j%Lě@`;5620 yo7^S_FZ1\v_S~ك+ +gHGQLj55vZkH_)A7`%ZRj%K^Nf@v%SyziEZrM +j3Mz?kRP; VXzkRpq^am XIA{,'+~9)h] IA[+ +8DjYK/)hIA{KZK +ᜪ.vEw%++)G,Gb2ׄiJ"L4H\萬ڞ1@.a󥦗ŤHk0rӐ^"vn'C^|/5*/8#(/=Z/BmoHz\kP#k6դ.2=_5({¸jE 1XTaHoeːZ¥Iq+߼~) 򯗽.Pɛ_zK޸x+S"A/_r 8SA%.CPjM '%F-ԪVLRYX´WW;dknڕNwb.LԂAɼPUe05!ĔVlp!pDR V2` +PU5^U:@W)2+"R 34n'AjɊx$ PbEԀjɊ+XlՊ@UFxKVzA՚KK.),#k=~~S=f'=b^c*F.v{)J0w`q,3h7fazkՎXj%O+& =cuyצXA+>x,'D{ziU봤I~_pLʔ +6  ^rKƷG6PgڻnG)e|AjzW(}ݟxHK{tCm}ժҤvz+%|"]9'w+|ng/'ūm]%4Mlj0+7-7,mzÖ<WSnq}8խJTG^ʷK݅vP:++_ >TK'q뼱&{9jvHz[}>׋zsq2/e)۹,P1<&T9}'g~lnvIUw  ufW׿ڲ;کmSiwDsMڅM44lsY<#FsSix0Z^ U/:!AsK +UH8WbVӡ3F?fV)7M.(K6'^!zrl==U*\NkcB.yq ;.فgCf_ߴ0 ^:-к8,ZjGsScA\+?&n-gz8y{wotQ9IV4Xw9,Q0S?NZ_~nIZ}D3!>u{t~H4b6*<~(H Hwr¼FrcrI)X twaԾ `?٫jK\g9G@dš#[ȺF %6W`xO +M";aZD"'U\~T!${pGUiz~%K;.V3dLL+ȈyA Nsdn`G%p]K;, VQ, r*PX *Xf UK"1p Z}"TLK K|zsyT1- :q7hԔVȝPfBVӈyHơg&yv2AZCg=nVjCJ\헖6A-{\dp-aa yb^M!~l"fiySLbGfe(2P*jVNNպ,d`?*J+b_a/ݞ 8>.Ku/?\[ xC!Ǻsf:$JjtgB –0Ѱhu ֎;~64]36o[So);pAxý- +f#AHjiT1AͤMx̞ך\k,^.b41>_JDSbm,:fi t'1q UN ,?ҪfӢ%˳!!@p\@橛_2Ho⸴ĒPÀ"`G'|[2MPQG+RA1ݐC;^T"S;fW],@@@$~8Ƕ +LXB.ձ~~t*U6*&_S0kh(v +Ҩ`#}MA1ɬ1M›{iżh@c),c)|D0BG$ )b2im*_3B$f ? +K L̎VQ!r:8oC2AH;lf Dqm17` sG۠@\a`0+ n +SC +;Gda+\P*%g^&#l:4d$%[v| zxtct4p9.xThӘ2G>|~Sa8%pGmS3.;w=mr)sB +mtsJ9sGZa9MVGj 2NW +jLA0QA,T,O +-9]b1#(WYu6kIYcYG7须"kZE(QdZ jVUY|)<>"W6馡ͦȮ( V[&:ss 9C&:G`p.ʪ g߾{Dg7?~x^|O/_{;5c9G}C(0 +endstream +endobj + +4824 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [461.69614 570.07336 513.27515 583.7354] + /Border [0 0 0] + /Dest (subsec:capabilities) + /F 4 + /StructParent 128 + /Contents (Section 5.2) +>> +endobj + +4825 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 454.5324 122.445145 468.1944] + /Border [0 0 0] + /Dest (subsec:context-paradigm) + /F 4 + /StructParent 129 + /Contents (Section 3.4) +>> +endobj + +4826 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [201.28658 225.36938 241.48993 239.03137] + /Border [0 0 0] + /Dest 4497 0 R + /F 4 + /StructParent 130 + /Contents (Figure 1) +>> +endobj + +4827 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [495.9211 82.57959 522.7611 96.24158] + /Border [0 0 0] + /Dest 4498 0 R + /F 4 + /StructParent 131 + /Contents (Definition 5) +>> +endobj + +4828 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [522.7611 82.57959 526.4241 96.24158] + /Border [0 0 0] + /Dest 4498 0 R + /F 4 + /StructParent 132 + /Contents (Definition 5) +>> +endobj + +4829 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4384 0 R + /f1 4360 0 R + /f2 4354 0 R + /f3 4366 0 R + /f4 4378 0 R + /f5 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 133 + /Tabs /S + /Parent 1 0 R + /Contents 4830 0 R + /Annots [4824 0 R 4825 0 R 4826 0 R 4827 0 R 4828 0 R] +>> +endobj + +4830 0 obj +<< + /Length 7277 + /Filter /FlateDecode +>> +stream +x=]Fn+Hj48%+˹D~X%kUj lirɻKhw?}v{۫w]Oo~}ߧ_~}=ӛܦ_Տ?\f'ݧ=}_n_{:uS` (( +V~{zvf髝^UWv;wJ{}ϻ_|PGʒkAh2W- 9lg4X膃` ^E6tA xρV[ <0J+'eRoq 7qjk +Ǯt("D\e(Zj.~#N!g] %NI*z3#8g}!N퀨 xNR_! 6zS{"/{ "k;5_79_ƔS!4lhСwZ1$4Я_kM2.W)\ֈ5"(xqCZfRoĉ-,C'q3+ZHe_bHH˺ڀzRu~uR)F,Yv,S,Fe ۳DZrL}x փʺx9AZϩN_|pw%[.{Y',(%Y7;5ƧʇgpAkry!G`[=S T =_c)V*V_r=_c U/ea<낇ԧ '( +.gh!ՋEJ~l/%a*7c#@p~l/e)7`K% ɂq/!#@ m_8GƁ;/gI΋lzB]_uFh7~f^WcnDo>>n?:/v=Ty/KeU֨|Tˋ6oųygtSzF+p>s[s8ݞl5)PV8D̓!Chw~Br+v?4 +ll@g1l-lOIƯ!g[REl!ېe[N#vNj?(-^[NacNL2z@A\USK1zV?Pjp-BIemFA<=6qm*C'%x (HuZiI naUem/%T:jTJ!߫2ԺRhAUe(ir&߮rY6 +f\H%V*f.!e(fJE3밅CL+|j^e3WK3ġT9sḃf@3δRHA$]2lͨ|zdCc6A+& k"`oA $﵉ԦuͶkmKGd[mF6?ksicf[mF6?k3iD@ ²6o*nۆhr6'@1K 濑}4paKE'ȶFv6ېB +o-l; 4mg_fCo;+E1)9YR [=l E .ͷBсkl[iͺ ~Ԍ3k B>4S.Wߪp1Î. |; x܉g\ ipz[+ %YT';:_l1|m.&칿Ϧ>ᱵ6巽Ͷ:ms1f{|j0)c]L@P^gFZee[]LT@z?b"*s˓mv11MFm?vBmWlËU.u7@NYTҗM/943&5}-|;JHӒ|=TTNn[}>s2;/u&JXO*qϯ #|daY()g˶ io RUA~admHב<86~}-4h́Jc-4۽:VcH.T#)0$ ! 3fKjL80zn9=hP:@!oT@֣n8orb&O<VY'mZY%xpu=D۴b* ?I+Y>&ͥJƢE2@MH]ZcT$oBOiM+;wel7j^+K +eg;iX|Q\>"Tlbh81hK]C|t ACŘw8j#a Q +j}5c} NI449t*X=ɖ3)۾NLfT|(Hd]<3р +;tAN;eHF<;@}@ynv} EFM:Hu}*d-9Sm;x4JKQUCSs'Qƃ>u'1$p7}Z}BR +US {@?QsPQs(Fkr-Cq!Q޴دFw'M]2L_\\g'*qgrc{<'hwD.9P+cU܇XT;|Y8C2cf;0nJGGL8GꦂEf!gŮn3_h*n4ۨoр&#Ͷ[IZ+vtm}PŦ!l#c:kά\,)QʈjQdOg4iX<V3?H攐;,&N1*7ELHGo'BxOM-s:ψG;æbQ_^/> }uZWrx^D4*f 3xd{UK+2tjz4Wa3@UAsG*":H[LlCv珝Ӓ2]\I|k"y|ʊ@{}PFRñ{1 Qֈzq>6um;4{vQG)䊌C Z%m0* `JI(gOTsP 3 7&=;3sL n;{| HS0f5QaGI%(^N G79|i;-h) bKY" qb(d{>\FC'+>3=:UF`麼'ń9ZR9aDz94'+t yfh?g0'qCqwa[x@ЇaeRr!'GL͏<(uP~;6^/Ljm42A]:pKN\!8Cj""@˰>8Gkž,&9-~]w95ɻ}wϳWh%'.B)N3! Yc.j1_ʙ;0xx-b9~{R8?A_pw /5[WvO۴#Zq-3- `!I3[иpYS^N< +VN)Z1mYĽk&N2'@!Dx0ajnFbfnPJqmbBPVmvףE-he>"iHDA ҿUoeD +x}`n0 :VT+wqdU&U,凫q]Ϗ`NC̎ou/Rt,O.vvNVHF +F"{W|H7'x۲"|BҞ# 5]CcߊNۻ~r>KПj`4`͂t,0O=v`=R`|KM19Y,l!ضT1=0QhL +{̀#Kc ,;l]hm3b9;m`i0EVD60t(UY̠:TZD,.q0TI- 6MBuoG5`#`HOs_:\.gܰNq'B:0 .;7FP|ag + n0AfNM{ *v/Afm:]m0>O/۠O\FJ&4搼x,O&}m2d ^N+C}iO} +zvpꦤ4n,L\D2LTH#|}NFA+mA<+٩؈J9[.=;uʐkm]GƂaɎFRɘ* +TAckX3~t xYrxm6}mNGl0>CVvW:&<{,,!j?ԁ%2&WTsbL2 Wbr#|]wGҋh'lUF礁^1uLOc#}@&{1U@ XGzq`kA|gy.Y 勞HYa8'P%tj}* ssd̻"*#]CL=FYE;,0]5ȑKQ9YU7:nu`5L; 3b) Ne6r#3BU .D+f+<сW-M%)4) +-ڰ$2oH;i=14yU_!T"-N/C4MfMs9K[Җ?j̚Pq^K ?Y Du PF\VۗR@/)v{]R` ){[R`W¯qooTCpG)0y^l)y^6c^$ѩm)fxt`X5O-k|V4iM}-Y}.O,=(%O:bSxmnVյ^!-ܮxkۥD'א"Eb0a)‡mg+'Nyn$˚B(d͝ +A57{IQs ʶeNMDR g/4QΪCiL,t!?6{v>R{*o{aT"Y56_M6;wcslۉU{v"vˉ1|m“]{ XNl˾*&O}CiĄΆ㍖tgf;ytmVXX[MtUՑ6ȃ4->|SnyP8#!׼QZګ1/Q-޼Pzv\*n؊Mh xj o6?yZ6wY&_vrZՋw_/`Pd^"sfTqj:&ykv82j]pŭwip=p^ 0]ogw?>}ͷApC5cN绗Ͽٙ?қvveRA:p AP6 +w;*&ٍv +5ׄ^@jAݱsw4:زwETuigZpL۳]Ͻ +^.4(tSD;J/K[6lAvfHeaEФmoFB"ݞ.DЦ +Զ%B:xx`;N/?ưw.!KgtfOOO5UUkL2nbI/A}v.vz;W,`o:5a|꣍eYΒO/?|Z"߭^HfJ1:F[53udf?8绨`]{N4 4 Btlkl9^1 +ɵmKYLlß\E~g;vD0Fkwټ|vI_.^LkO7scRK'hpk;m&ڶOQ f$ΥGb!\'(4!bLIX&3è6 &OV_0 ='zGS/!7{K˩,Sg>*-OTTGO>@pJV=iQx81fܒ?;!G{*5_""`H/"u>Oo~}O}뻿{wonӯ^?ǟo~~mZQ.6N; +endstream +endobj + +4831 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 746.2134 101.63025 759.87537] + /Border [0 0 0] + /Dest 4498 0 R + /F 4 + /StructParent 134 + /Contents (Definition 5) +>> +endobj + +4832 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [426.6189 732.5514 483.94568 746.2134] + /Border [0 0 0] + /Dest 4499 0 R + /F 4 + /StructParent 135 + /Contents (Definition 7) +>> +endobj + +4833 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [173.22722 657.4414 184.22722 671.1034] + /Border [0 0 0] + /Dest 4500 0 R + /F 4 + /StructParent 136 + /Contents (40) +>> +endobj + +4834 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [260.59808 453.1714 318.8676 466.8334] + /Border [0 0 0] + /Dest 4499 0 R + /F 4 + /StructParent 137 + /Contents (Definition 7) +>> +endobj + +4835 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [118.39714 339.1854 178.22614 352.8474] + /Border [0 0 0] + /Dest (subsubsec:eff-composition) + /F 4 + /StructParent 138 + /Contents (Section 3.1.2) +>> +endobj + +4836 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4384 0 R + /f2 4366 0 R + /f3 4378 0 R + /f4 4354 0 R + /f5 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 139 + /Tabs /S + /Parent 1 0 R + /Contents 4837 0 R + /Annots [4831 0 R 4832 0 R 4833 0 R 4834 0 R 4835 0 R] +>> +endobj + +4837 0 obj +<< + /Length 7328 + /Filter /FlateDecode +>> +stream +x]Y~h-%#yPȡ[r>&eyCx>Bmh4êB"3HG?yqO6=>||۟+߾O7Ͽ|ʟ^l~'~O|O__?ܼxx n6/ޜ^.?^7EOo%Ef}y'x;rR('$W!=̩9n>짅hcMBp-v O{v|wv[y.GkjL"~ +4NЃpУ[[r>ִ 仇, +4N 65`м(ɥ(0%G$1Cܡ7kAb766ػ6 +η[[݆eaMޡe+t|SZkRfl)s4L!ˑ<T=&:sQw'f?<$Af7y,{چ}bO??;CY ":G:6~sq8ylп(WN ƖwCxpU@sEBd:ΗFW:4d/z]~+12"#QS9s(J>Bb[cyv QM,6\ӓ0̓L#Ӣ 6q*o(盻M8|yq}~3Kymvn/?A|&iY F褥͢#Cv/oZx_i'Osޒ]G [RúKn#2;{c9WfwZ>KO o.pqszp"\"[)l9 #84GS>/+:T}hTϜx:|K+1;ӘɎ>TglN 6\|2ifOlQ ZF\Bt@ܕq;*5` D i@L$gzjE%2P"5 8->J##B$ "VX{j]Uk129nvz da1MUgBgYNOp+4sZj. I2D@JL=LRV`9X!1BJM 23>QtcσIKsZ^BD6ބh, + ṞQu~^+tMPr+єasjdJ3f8_ȋB[QhKHII,NFGu"`'GfX^l=#E Ǔ¥M< p__9{-}NMj$I BZT}$q`$m5D=s7G鿞ӕkH2NQ*g Zo9ӪRI4jEX^R]9sJ=[ݣtմzr]y%6s's˩be UӸfDé. i AhQ#ӚѲgXʒj~cZԢ5LipĐK9*G dEXԪUszsuV$=Ygߓ-!U3βE$07dG +u1Kډˑ'Ye6ǘ&dHb?aq!P2DHAS#9`l]pSowXcƤ8.mfk;]=lx580Rjez +g*%74"A`l/f]L%`obϣf]mr,UxvU_:)|1j K&_|E|5T\VQ%g%Ҟ.n )jlѫ},lWSX[\֬k|RMD >8R#`r;Y\!u0&6,T O>4v)5"8 ÷dUs;bVK}Ԛ=0?%h2x?veֶ34wA+^;k0[2 U03yĐig*j&C)qHlҪ1V7KH Re%۴³"W;+<Nۮي>҇=' MD"ήO;'r"(L.+{Ix&39ݞŲ?>Atƕئ{&Z[#p / e*i͓^tK]m!Ф"6%/k 7~ pfo +br?WPXʮ֫Y_?mjV(i1i ˘+,]=qoMΨ{U>@7[:5P!ʚ+gZëy*$=j秆vf5GD;.,dVsT {xsj2obVCdu- +5Ɛ}-v9/!19Ls7]^_ |@__UW*[1WM_ikp UC1kBfĒPQ y%Q桅PA[lJ]tyҐ{]0םa9> AAE\؆j{<0T8<`'>ppPz=srCnO9utC|= ÐcPviJI )eYT_ B6|S}$`0` Fu z2t97b;ѕ8}|Knuc9:|KJ8lG|)SgPqntkגh2@*d@@Uj;"祺 +M.Ƙm18%)/#K1!@ͩ`.9q:U&&cpio,P9ȍB}/Lrp F%PR׺Aǂ/e-e`F'6 +LQhǐT0MDBrֺ :vcRH ܍tA1hEe0} +SYԓx@VևD=j8*Zfxc!05q_V3)-`xye\2NYlQqϪi))k25fi&"x +[1}n^<كN%vnZ8|ѾYk`ݮ侻pۍ۲g > +*u-i%b2#"-s=igղ#O&N5Ŕ2Z|NZjɜĄ) ee -vsmrgf\/bZnO?CU `ʪQr|{j)Yj&cT{]ha{lkzJ#$CxE؅.4TR `ʑGCf̔[gtm hW*O:Q4K}̛D)aytKIC_jͮ#/_ t}\eŢW5rI0}Rj_TRͳ1\Z65*J)Fr EؼLZur{|sTA2"m_T3-3*Ӱ/kٵxv^k&}{Mf~?{T+89D߯bǣo=xyV,w[B63v6kԮ31?AJH@bCH/9zk*x2Z:x"0=}5'GEVs\^w*kCL˧LҢ]>!pC (JMՂ L_,,-!=7[m_v Su=^ڙ*8QLio6tǝ$ +ry%$NiŞtX:ibIjj[G3o7fodV"v_uSiԱ-gh( lޫ=jU-'Ou!R̜l^Чy RE3D&]>>,ML/RstI 9:ςXNwvjq7poGpMo%c)=ӦNᅩ&x}uԋXQsG׳2դ= +V (oxȜ@W +Ӎ@Npjn'O_~s9"~=Ƙk?es6 bJGS/XnP5A}Fw{_N]7,;m鹁se*$+,*@s.]ߖĜrZ_ *Q.]06elf8msm9_XVMB[V'KIR5A4[g hՠ+EMSS*-#7X(zZTB4u?LHq7Y '5.}xuPJ5]A@IQs[4_ʸooRtx@oYS^jKZH*p< s !rOǠaU񹓆rgƅ 1yyو klev"ìb9mw]^MسJEd[U mQ)xL!/ݳi̺EC0frXkع1~HosD Z^Qzјxa/PߗிaPB(7 @+U +1mr#Z"B\\ >t{V)P(k;( 7^x+[!V W=LZս*J[ӭV1<nuLCxpnj`!}? &4/y0د@J-z K: 7჎+YVɁg.ثR(.IA(x^n:C,^܆ :eBI@R^,AMo}\y}DzmD뢣}/ 2iUKD΁')P$!Go~[/ j)PA?X``/ pK GcT +4 +sXs=.Z ǐ\L!.孿Aٰdpq@݀j(ĕj7 P W! <VU,Ճd,O f4%Q=p"iCD JBgۣa lyDࢿ"*G%ޅ*"|7QC9>΂h*&Qc t]T $3dEQ$'`7E\#qz3Mک(BiE]%6q[ h&ѣU(bK.48~4P*LR\Ppg(:c\`RyH%\s!Ւ!uX`.#V F zzRD\ +jB=z#53XPWKsKg= *X`XOR?_vЕ~¼6 F2.`MG]PHBu-ѸKWnS4̎QҎPaO=X9r}F*~` k钾K(ÎcNl U !iHjH}X+]d +ɹ)\^ !q -\zY^P֯MߵczwIgb36 =<=g?z||Oo?ǿzo_??ۗ?xǷj$'{,ζ9i;Zc +endstream +endobj + +4838 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [468.37003 476.86942 508.41824 490.5314] + /Border [0 0 0] + /Dest 4501 0 R + /F 4 + /StructParent 140 + /Contents (Figure 2) +>> +endobj + +4839 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [297.5414 449.5454 308.5414 463.2074] + /Border [0 0 0] + /Dest 4502 0 R + /F 4 + /StructParent 141 + /Contents (41) +>> +endobj + +4840 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4390 0 R + /f1 4384 0 R + /f2 4360 0 R + /f3 4354 0 R + /f4 4366 0 R + /f5 4378 0 R + /f6 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 142 + /Tabs /S + /Parent 1 0 R + /Contents 4841 0 R + /Annots [4838 0 R 4839 0 R] +>> +endobj + +4841 0 obj +<< + /Length 6945 + /Filter /FlateDecode +>> +stream +x=kqW C9`D$p@&H" u"eQ@޽ٙ驙ݞ=2nog۟^>hu޾o?wO~y=^Mz?t77O>~o>=~ˋѾwu?;uD,;27__cwv=}Wu_ o_>#"}|:!,a Z@ۏ#!2!bDH_ D2|=j-rcZVOw)?~l~=ϷO:݇4}{O4#~01AfUΐb!Z$Cu ֻ#Sj V T)P©#6J$B' +8 msU{P{בzml:۹]x[@(m~?~(+Wv<ӑX QYA^*iYFlW#v87w9wN$U7H[C/ǑcdAk]ZBt 18k*:mE<5g' B\Ӄ_CTݎыEx/ dkֿ45h!H~M2ioОugQ)/"`{Ċ 6y+.ћ˭|A.?xQupeQ=u#b:I}t/v43LO\9!Wz;j<84UB!_\3ĸjH\fOanM;z$lJc,b%n`u< U?DXAA?,S<L$B~4֔.qȎlrQ60QV5#o +Ur@?V zM u28cv< +YpV( f"xd-@m4ܲGQX@T3@7Kճ ;) $ƄץCTt$dmO?.aI]&|3kBـ;Mq %x6@~k:.-k[J5(g0~>(n +!w. ᒪQŨ ?__=G%'Qk_se;ȀLUxn5/^(Mv2Y0TNfϛLm &<9 x޿@ |Jժ*ƁqNřߪ'΂ {A HgJ"7)ƙ6TUoJU52&߁i~iZU FxntUD#>A$mO?*$ࣵ/ @aD {8Mpx%>OVT_A]/NuY˼_Z@mз{,X:|[?AfEOCaI-9yTлE:z(AW5Qz]JfR.$8NJyUJH|u!"/f^x>ruFi_284ZSԹ zݷ7Xu碀3_P^^9l8{*A<7/ P4`cbФa EX4)\1{V$㥴״gdxdA5R T xP2*c`%ZHL4ѵNFvfm6A\mp\د[,up1ph-!/+Wռ)q) oZQPCg$ԓr 9M>VI~We*% 0r\a;յ/~~o/|I?p DdET +xk4U#HSQ`i\IGѱ?d̼61bPC61!X A5'/eę7 +K=#/mL?-m0y )! 6V^<.Bk0<!.MJ1%BPKXE* "bs\CeGE,u]2hZpzƐw9njBC]8g< Ƙ\Ʀg'iJf6eW4k|,XsVxfu~ʴvJU4@ +3kQ;.+JlDq5Lhjojd ͖܌<)J }TʹVp%\<,5k =vBOuC]*\5ӿ.z!J/"O΁Hܙy{W))8p;a)FJ-uMmI_V*$Fwu5S33u aeMn +ɣB!Ds0; +i&5U >NEHm4˓|OiZ 9V!Cו?8 .vZEL.CvM&iԌ;h&"nB;(o[wp^Պ=):!T__M XkRdNܳ=/4DXHsm֟Z6%#IJbkb:eu-Y2M"Y=O`TK*9,Mŕ9WaL}Uףnz^-UgBzގbjW 1:[J%Yr8Gv AiWQHГ`M2RˤO#Nnv>Y8FՕ+܅WgW'+qf)bpF,L; Y,x@56z'jͼ@V ɪ^Mf\tMzt>\M&CgRNwݳO37;aGCwJp +Dؽޥl":L%1xk?k rDw} +VIF5@g`GS)؆ Ӗ(qX%Z[zMX{גl[ 'b"l*n$Q Xk +᝴DJ'u+ +W#p P*}8U,r{#8لbC v)Quz7||e%몈A.a+sG(Q +:`.LyB`ψ zqL40Tb hVNdW"͘ ~9C !ثJ@4 +Hy\0 +as; { ȀH +/؏ jx=j/~$;8 '"6Ąd +AR'=+-z^ .DvI`GЇT)8 2ޙ82Gр.դO0v&1~?{zʖTxt*%{$h̸:zqvG"ٱԯ_{WT^đKdb~Ӂ$"/id/c[Z,`.VVxoELEQD,3Y Hd C`' "K-]%[EYK}Ȉ>R]$:&>>C#N9>\%䷌*"Kmi"I=$.28pΛ!p([Nßë~mjO)`|ۢh#X=n߁E0їkLY1{azTuR% FQ?(YJE; 6YM5I!T7S|mZơrfN? h*믐fOv<Tf/g +QCcZ`m^u:A: +؞oլx"U4#B., T~xv^nB AE*rFy5pHNY{KpJ<uLϾxek!>2tY'= Gf >+-أFQsBkRccct-Rbg%S3? +U'tggWY9w[) &"ON}=iXWCGmwtTowT%Ij,eVUoHh_dS22D*ff"2f9ZkKd#Tuz +C'۩Ιw\œu{zL]ls5 +: S j$t$`BM +^`Oz]1i7Y&r,L^mR{+J3 Rj{@&dua^%gniF +e>0銥3c.űZRٱ>e=jd_$bnU\d(5d"U!6A#UDiQ[t$,/I}RԤ."ip4z>:+fQ Dn0 +r6]yOگ3p)u' -:MJ52H[PVv&ݒsRf+ +Նs֧a{A Iy//>}\%QC!"ԾQ:Xi1@6HچӦn9&6eutDT1.MEL6/bXm9X?ڪɪ).5eߩL]HՖ?I 0R/l+kҘ$ L m@ @p7az>)n50WR@J6Բ[D@#s-(PjPDUFLȜ+~PQ}n@dmfD)*1Р\cI,Wm^}3ɑ[Y8sswnӪf6J]xIqeU@Ij?ً__7n&X,϶ƥ`r_$M!gAQUdp$^ת7UGgk/Vmz"7*֙P8mUfM`&f'a$ pGUwht`8;" WDznEqp$솃p-Xf7oVhݥ%InUeCt%g5"іoF@ZSibsO+T)=QTg59UK՛FY/z"Ֆl B FQ^B`Y@&*s>X2RB˔[wV)N"Y\FV}im%B9]7( xطk"X>_Q`WEBf_f%520;9&>54I0/y&ʸ,-ÝkNwqy +gwz+Wr9 + 0/] +aCSY?mSr^ 1O qhڥdKpv~ثƜEsO\HyjHjlpy^xf=)L=ՀD AF=`V.>V;e`-n/*ȴŵ# x)r ZJ/Y~#F:P> +endobj + +4843 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [467.11914 178.77362 506.78516 192.43561] + /Border [0 0 0] + /Dest 4504 0 R + /F 4 + /StructParent 144 + /Contents (Figure 4) +>> +endobj + +4844 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + /f2 4384 0 R + /f3 4378 0 R + /f4 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 145 + /Tabs /S + /Parent 1 0 R + /Contents 4845 0 R + /Annots [4842 0 R 4843 0 R] +>> +endobj + +4845 0 obj +<< + /Length 5807 + /Filter /FlateDecode +>> +stream +x=]7n+g;u"GI*wuvҾٮz-NI+go}uS Mrgz;"<~zۇ6]O~y|W/竛^ǯ绛m<}|ŗ7_rs;Q(kIwN`uwvۿnuׯǗ뷛o>EƫD{= +mv~I+mQ:2ç~h& w% |~H>Ri̲8NE{]wכ9oݕ xd[q?Cw0U|Y@Qq$> s~1.JWݣ) ͹gnǰMV|Jܖ"vqʦ-:r!S3 =$&鷽Jb.1VN0-BF1^v^u[n$4{2S ބ2tn*fz+߃7V ި@@+  `n5PNyĆ2i^^LwT eO co% 6Sѝx4FJIjګ((Y\BVQB)?ERH5x;G+Iu`4;%QLOۻ|Q›:0S (߭TٿŻS_[PAEz<ó'e,`/=K>|Ϣ;kIiv}tGmS|IiE`U u%]yy<ӒFr`zU$EP_ $~^-J=ӾhQy+eV^z.u()_I1v|o$gЃо*$ Oxnkyu쫌/ɼ`i}90$Ajua$Z(f:^x!Q(Z%e92q8y1?$K>J RZJ%bA+мn'Fk8!4xMZ##5b`),͏iK9Mc_uj<')1-GjMVYW WiVHOFXV~+:FNleo 9 3XMQ,Us*\N[㑙tScqy^HihN $[4qThbU3+GTc#x NoS:=R5P;PX35/=5eL>=5wIL@׈$1UdIN2M<")X Uo͎LUe"' P-)>VQx2_ځ5ht/ 龤d$ѢE Y͏2 4ju]Vfh^)+JO %-kE\'?DZ9@e"tƚȉ'}Ɓsw]d#7t-x"_a1&:4:~q?.eѪf|CXbj?u9UvMODXY5]hTp39u5V +CIqXVMNL.JCy>?yti?HKօ [G0HN„y6>̀!"0<nؓA''ƳԊ_>_= 25R)J\a z*(@pp>;-9ʀGyy#E\ )>(*̲Dt7 HDG.Ě_tijG0Wa;rڳ/+ :m:Q/7vu/ݗq +;Thnpo6/<ۤlǓ7Xs19gG앱ʺn{PKt Y)m\G`ɑ#!`awۀӀtP`!U/Ru8x !eu =mT6A6^ A c!Fe4h|EG6F b.7E༵?l]M`;CX*xV8\ hڙ<Vs5ÛPU L?pu4kbSmkjX/.7x"1/DbgfDd}L-Q8T`83Wcb4Tq1%CX2>J0dՙ aQϬ_U4eM~9TcATV7q*뛵PU8TT8aY'U :g4hU: +jS9b;+ĶvgeY8bWǿgCbS.ڈs~Vkܟ~]N賻6rwsAFn`N^طMᲢy|.k;7\T5gwnk.bӪs +΍*k;7r.e١:R T:b ?'<;TPY <E9m=;T7YYԈ]*( 8TEبb_ PW8b +Fi+٠pVnp.b4v$8-iEPu:Gl;JA^ D]L Be&D핎{\¡wv!zw/D_T=C^ 1,iwɓ![!jT9F Џ=ۗfLo~zM7[#0PѱZMąAkr1t8bK|3c8BUn JK憮䟕TL>Ka"nOPgjfLJ%rJ/vFsl*akm2Ty^cV~m֬uVE>^Bjn^a@:-y߄XZ8ҫj3vH`5UN+eY$8N}y +gxeu꟥.K!jԸ)Nf]]( ,"t쏨"P)6FXYr9eU3s~luSispb,Ys45Mg]&lV&W| -ݰ6Mh^cҞ+32sT5u< 0%PD&e$EԺNqgiBH6r:mt'71>Ĉb O>b%6EhHUX:%˟n4v]vUpbFj-OIlN6LZ/'EoV+m4UKl M r@ ֊Ӧ=m,>$=5]eqPwZH\5Gwʋ>ѩEHϟ]@aA]˺adq,q@"}5~9-/^_m~z$ŬC0W_|T&¡;Y(Ad:sPڧĦCxЯǴװODqG7[|v;DGI&Jի6瞵OJ1Q<'XU1tRo4^K^^ Gah2CDd1&,6drx%cd71vOZDF Օ-g7^\KzΞeIY-Cd\a486`#?/)C'al1#,`ɌGj7t_xӸxy|܂!ٙ[kaf,C|ђ|~ZnߎbQcqxAAl&NK8j- GGUqGdJv`B!DN9݅]<ޓ߿gXOoRߠƮ* +󜞤VD&}IB"N۫ Kr\ӌw%J:i ges,(2R9L;or^mܟNȩ؀̞m\Ե{%/sq]l&^&ƋCHX6"wQDžBCb]t1u \[j>vw +'V1@퉨{@sto=-jO8$_yo-j_=ܮV@`m7DB7cT6ؓ$ovڱ7o _#TTJbCGOl8A>t!y9_<ߋ${2\-A::^Gπ>d2ҭ*kIbQxzYƩz"&2%^LMV NE^ %xەJys(/a=5VAQ89:;cЂ1i lo{x7{xx_//޽{xu~ǟn~~w'v%}9m&SVGM O4 +endstream +endobj + +4846 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [213.19614 398.77203 265.11087 412.43402] + /Border [0 0 0] + /Dest (subsec:component-lifecycle) + /F 4 + /StructParent 146 + /Contents (Section 3.3) +>> +endobj + +4847 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [249.16646 313.135 300.0526 326.797] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 147 + /Contents (Section 3.1) +>> +endobj + +4848 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + /c1 4403 0 R + >> + /Font << + /f0 4378 0 R + /f1 4396 0 R + /f2 4360 0 R + /f3 4354 0 R + /f4 4384 0 R + /f5 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 148 + /Tabs /S + /Parent 1 0 R + /Contents 4849 0 R + /Annots [4846 0 R 4847 0 R] +>> +endobj + +4849 0 obj +<< + /Length 5170 + /Filter /FlateDecode +>> +stream +x]ݓ7nU]KHe*j-JI+eo\)L&N*v # x~]\=onySO?^zOoo>t}}}e绯Z|l.o! RխlIalv~w1͇lPgЃ/M6WV$/ Cy_%l>  VJT@xD)&5(U£NS {4$4O )u`VEɃYgS/-FQs-yW6VګAaX2xO~zbkE q'jaIFaHM7:ràZP$+(; fqC@WCW|5P pu;麃R]ct X e Cy{^YޑCpHL AN_Yf0CfJѭʯ~tTr0N|l)*v*u-qC Y#^@' G4z)ȢV>(g* &B+uPp(ΊWl[e|]I`Zj P ۿ.%x#]ۻI}×tـl rΡDhv@ZI a_A}zꛐ>_vXn~y~ٺC^Z'"Ƃa恋Ϯw]ko>%|%I>iN6yNˋ?. +"#zr$9mNʈZO@_ q(ZU35 A"O ' N'I3$1e(,J3 $Gz.DA(n3J1Rob iJA|#Nj)R-j1'4<'64E%{KE#^Ij{| 9% ;<[նV]7Ս]_쐠5[4d eA%Rb]V9X!DC|s7%ÇFdJYp"}V +%-a/.n޽~RQ]4pl_>eNj(oɴOAw,sOkt-K C}gC6z5[˖%R=GBwn垘vf&J!a<IeLB9ۘ,'a_LN +cF3QϹv +IHmr(A4t"V30. {f + 濔z`q_e AN`%'e+g ha%jXF?2u5ǓpyϯZZCohTBj!GТidHh6p7Z<(jřv@h7-[Y6ʐ t._&5vzm. +!iB)we֏Jފ  +Li$ A䘋RPA!m6(Pk +?~B6dZ!Dž\B['3VGkbKuJ:eAWZfX_ 8ƯLl,K1GOOC/]BRMA~V{HXPPRHP<{?c 4 MbEbFu -68HG3>3,i\N7Ztv#=GM3~T==_1at4]4g:loVU (qM4 gj<7&lz:n$ŚgfJ,G)O\ґA6[jqjDv7pԧ@uU^.jҜ9oB *cj%KM>a.e=08d4qjԲN_XwɁM9 +iJh?i)q#. YaIև[!h.)E,3iJ:%Z,G ψ\!ڊ'X Xi<4MbB-uHuvRS.~15U9T@]/F-q ͒5U V\ "(Tp1h(m)Ƨ$[xSփlqrU’"뽃t.o)+"sIg=7rN%Y"nP"30eJn^蝡RS ,xIdH%7hdNjG^h󮪭s jܟ|:+sn\1`M$Yߏ +V{- Zo3oTN9 NYO>wo|v&pg}%Ox#ƌk C4J;RzF:Ĥp?YJ8AH(%öV{9Tw"v&n`D"іe:9(* u &`5e*]4wZ";{a8aֿ0 *$7S% I) Yx( %yq @͇W(Jj|XxS^1lCՂN<>j_0N[̼&"m)^^\,x,%alp'IHMG,O27yKHPޭP76T{3xwҲl`5b@8~~fֈey[! s:}*8)F4+ΪjC^ؘ*+Z>7х59ŜKrQc930ƣ#|ԇ,S͕nLqn] +l;TBk_T!'Z(bJh)|4o"Q +dSł7wJ [!6ôrDhg-bRi4Zhe1H*E@"+ٟIG>$zF:i((CpHzs0#8Amcr4|!S?[}2IaS3eƖ%ҡ + 9r"= CɽIٱ*ʇj׳t@MR +5E"y@BZ e6W~ >g#m4ðոBZOU{>[pD[Ra Yzp0W$ H#ARw%Ш6!mN%R{T4j ޜԡJ8 XABWtL~Rq,>v_'x&\l4`rYmtZ qHZɁ#>8rofa"P} a)Hi(fH'6ƛ$MlfA0[2p.Ze3+uWU,{b{sі۽Ź2[u"zYHrg)4- ƭu{ IJ{)ٲR't[T,_}@6;CگcbR\y<[YuE_ gbdq+!lQH:8Hcpݶkݤen?ȴd&-.2(EƮ @rpSm׆BQ Y}6wWB!q`Ƶecg(Uu;VfW.dָ\R`oR!v"M%؉ӶꄂjXxdGD +νNfUOG$qǹ'O'O4K lPEk^ -Vզ> $MSc8Ouc|~@TMV6tj؋ **YIV{k +CmAo5!YU}#A9I`w[{٫: iaY#e JQ-u.mĻJÔfyep.T̵H54)0gU-[}npd9RQX% +ܹ%$v\]-#xQ}foLlªaǚU7E&:'l8'@έZd:|)5%{\wFQxf׃a*+x܅#6z' М(Oo 0Y]1;E{ZW|sơE2mkG-EpHϓ3{ %ЦM2:74Z0~D Mnح'Q^O2JBnvF[ա0Z32>m=Kj>m-1*VO)Hkkx~ g] U+wr:B܆4n{*S̷SEI!~_)0l;N+ ԾXh>qV7ۛ}> +endobj + +4851 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [107.86602 297.10602 118.86602 310.768] + /Border [0 0 0] + /Dest 4478 0 R + /F 4 + /StructParent 150 + /Contents (22) +>> +endobj + +4852 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + /f3 4366 0 R + /f4 4372 0 R + /f5 4378 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 151 + /Tabs /S + /Parent 1 0 R + /Contents 4853 0 R + /Annots [4850 0 R 4851 0 R] +>> +endobj + +4853 0 obj +<< + /Length 5365 + /Filter /FlateDecode +>> +stream +x=ks+G QSN~9ĬbEKR畏YW]n0w1@/kn_>߿w|ru//?_}?y~ǷWw~ŋ?.n~7g?^NvQ]"zllD=|q \O.dwxqNvJuwNw?_|凜Kǿ%6￑WOQ2 +eaugAnRjUbZs(8i&ig '–{ob em&c;=.1 ,:^)>G{|#Xd4/+_ 襱+ +5pMB:/t4k4k N;v=1J$l1ӛIRgY ްZT/w+)_~bA¸p4ÿVb6X*d޽ h NPGn. Ͽ _ <0%_4X*cXMi9K^xg<_1W<]2SR\HW/ʐAilD&SFғv8ʀ{efrl32f̯y{ {eL 4v,G8#RڧOrՏ',R>n…u=V_XwṄƐaslY>%ʱS\Ⱥ;n|nj`8$i/]<:F8f~.w75Zߐy(#)>ʧljOAk5Z8ɘTW 6:κM#! l:W,i Ӕc.MiфhHYC!TJvMpoq֊1֬VqW.*^&NA Tc_"Mrwt8ojw'T6H{ +w<崉|hW csu":K3dFvdfRgi:>a2%tXӵgh̥!:Mp'FDJ)H"eiŲyz%nI٬AGrwyǜgVvf íf{O;P!TyCs"XT&=\jꪗ;TH L ~an{iQvguk, IڬrE%CǵߟBdbH@1C{$=Y6+\2P4Fqo1j[jnP/tėb`6qJxg.*T$_ +DE̚ORC4XdϯOa;i͝ڒZאQ߂0Z.U kc9V=m\d35T HnqQ gFGX< Kf*N&h 9k)qGQ":F==̌V }Xz/B,f!jR7< +ay)LRj7[j](p;e-gAhT؎ Tsj T_,Ӳ8L(cUxF"IE yw2a18.aBteX֟2+CfcCɨGfc)^(`T͑[D*S0XNO&]V2RA{[P/ +Zί)SAhw~8ŠSݲ rtއ_A5#YMZ +Go!H;θkA^)8Q+[jIZ-=\0ʈ\āW Q4I3s^x)tejX#:lΕ3S n8[r#ZWuE-c vHxSpML(bb ԹÀFD4 +n@;J-iL쳿ǀ2W+A@_CGN(6Y`] 0iD47AKh{6'|Lۀ3)RGۋ˦%4h|A\z=3G4 Cω+ןrs#&s W$GYaT8IߌuZ!3ښ,wYhH)u[dA +)$5^ZVN;퍖"i$}OèVO'UN[t4M.k) I;̇dX`fYд46x\ja M)VsE$:hr#Bs W NbTH(Ifsd?OE~qR8 ڗ顠EE) + V֪gNRp̑G`ز 8XSs+o+oyDsHRS_!O"D/ժ* +l"vX7$aD#XM#8 1 \̙m5!o}.X#±0tUk O +넍:I)GVM5F(m>ejE3(p\%bUDHFގ1f$ML8'5.x-v/`|k +y9F0ʩqrxc ђ6D{NydžVM +ճxl + ,_\)Lۖ4Vo20mI\<"upEV@ýz+`7g2B +;a0 ⾬EK$A a[FJPSx)rkS;s yNX:βც=6Vҭ`J&s5"P`o8TN& +K[XF0an C{VOR|*G\Y#][6D@RAS10;0"fiaF7E#&my@5JR҇E y` L-uLeA?̻] k'N}: {1Z3əشbMY8`eVyӞI)y9xYlOSOvQ}H߸aـfQ}2B'*ɩxx|p%̞D~dqѣn+k෧)IqAtD].HO&Le4d/> +endobj + +4855 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [467.71432 582.3314 518.84344 595.9934] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 153 + /Contents (Section 3.2) +>> +endobj + +4856 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [407.13937 469.5504 452.5994 483.2124] + /Border [0 0 0] + /Dest (sec:theory) + /F 4 + /StructParent 154 + /Contents (Section 3) +>> +endobj + +4857 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [468.31793 414.9024 519.39343 428.5644] + /Border [0 0 0] + /Dest (subsec:core-impl) + /F 4 + /StructParent 155 + /Contents (Section 4.1) +>> +endobj + +4858 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [465.84985 401.2404 519.39343 414.9024] + /Border [0 0 0] + /Dest (subsec:loader-hmr) + /F 4 + /StructParent 156 + /Contents (Section 4.2) +>> +endobj + +4859 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [213.6029 373.9164 267.18137 387.5784] + /Border [0 0 0] + /Dest (subsec:koishi) + /F 4 + /StructParent 157 + /Contents (Section 4.3) +>> +endobj + +4860 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 299.3614 107.09487 313.02338] + /Border [0 0 0] + /Dest 4505 0 R + /F 4 + /StructParent 158 + /Contents (Table 1) +>> +endobj + +4861 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [184.06622 210.58942 235.26276 224.2514] + /Border [0 0 0] + /Dest (subsec:component-lifecycle) + /F 4 + /StructParent 159 + /Contents (Section 3.3) +>> +endobj + +4862 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [218.00346 155.9414 281.07553 169.6034] + /Border [0 0 0] + /Dest 4506 0 R + /F 4 + /StructParent 160 + /Contents (Definition 25) +>> +endobj + +4863 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [489.91193 128.61737 524.4094 142.27942] + /Border [0 0 0] + /Dest 4505 0 R + /F 4 + /StructParent 161 + /Contents (Table 1) +>> +endobj + +4864 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4366 0 R + /f3 4378 0 R + /f4 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 162 + /Tabs /S + /Parent 1 0 R + /Contents 4865 0 R + /Annots [4854 0 R 4855 0 R 4856 0 R 4857 0 R 4858 0 R 4859 0 R 4860 0 R 4861 0 R 4862 0 R 4863 0 R] +>> +endobj + +4865 0 obj +<< + /Length 5456 + /Filter /FlateDecode +>> +stream +xr_14eǫ "ۺRv|@ҤTL):}j;3@ < +I }qnj=yrug϶ۋ=;WzuwW?}ۋ훷GOv}>?:~>ELJHtݩgZ;磳+]rĻ_n>;? o>8qiL7T%&2G %6ݩ0/~t\vMA禡e>d() LGL5 ^w7#먔#E 15)ǥ8ݦtRlqRG6)TM=(o8S(Qh[s$Zu+f5ɉQ9(,18kKr"0A"O).6rEL5jA 13˹'qNfwW"tC4=~7 ؟B'>ƦZnHF'I@HL̺O G5TFA uՔZ |nP$% J Ngi=՞m:8"JQyV .0rZVSM)_d7`>~Db>]vrnI 0b[){<8 Uɷ`⩅pDdBr \4/Et5sUbfI$ǰ >:ʪ|CkvAx~'&>Cl3#}3:+j ɖA j0j)oZi2EWsXL\4&Ea3.PtGW3Η>2a-S!?뎴e37a\r@rJYDX?Q,8!`c!@ d$*%Sc`+c!>G/@3W=)2ĒJ)D3W+̌ge҅1$?ӤfH.L` -e8viA Ğ-|H:^Gfaa,G 2 uX$b@FG2j HɜTLϮ^ɋ/^p싧1mHjɢ +$~I s2- WpŌ gc=%>(~rY$p]?wpo)뽬0`5 [ j ڔk =ꆰV)i\WUi2Y̜z-29hB`\xEXv5 |{ p:O"ql<㌷g`&KB`W5KIu[`9IQ ";4`|YŎak`1FϿ]T1 Ȥ)cy?Xh<ǔpu oxTfİ7YDX`^_  WɔffPt(BQ7԰9\E(6"K U!23^C@c6N0G"8G ՀL98GvP$΋KժTCV(Y_ s&ԩ*q-cBG&R#b DIqpE{{@6[ .|LGMqI}n.P*%Et$3άvA1'tJDপdNpݧ׷ &-5DM4g I\Kҥ^}_'b1Qʮ=, h'J>]hā;&TPn ?(5vVRK,Ƞd&UW 0_8JڢP &#x`$Y + +qřGjhz +Xv8c^Q72F7#iboT kRyܠ4jObI |?OѐP1k0;X.A*UL+̻>HCn4܋%} FQHWA`Z**miОQdq=N^^=t}W6!lI4&`PHp:-*sV>O,aIuKgf**pr'8qx ۺd7ޚ {h%aE'9*1Ds&J#0 +M 7hc!K Fv+&AS*PUg 5xϬ>-[+_-X3]Lk'KaD>=e843̑KrQ=- -RQ 0S&Km'.@l 0fTQ]-G^\~)hu+N@_Nܫ j!ʻI?qk f8'\VQ ƍr ]Ѷ +)ZC*]ͨAWX4͈TPz M"R~\3i>Wӷi(<oy U\}Ri,ͨEoC +/UPSY&)mlc͠s\ ]E2!T0F*X߬a^oVPHi7;=5mMZ*pf5$ +)&tp8|FDr~NAWB:^`C`MF\JA%kS{Ip"gXGqviLΫץ' ֎dSh/}fk'Ng۾Bɐph40'v- {,d3HW=. <(R(f @ub:UtuLxΠO(sK5ٽ s[2 wVeE~5f>=d-ﵱLWe)pGQ1jI!}]dJAc, N^"l0%ȵB*qa"l8TfJ(t_I4Wqɔ_΃F]vH[ 1{+n\e_Wo$d`p%o˖] HDLenI}UI˞T[6`6}l7ska1_x͸RC0ҍ (äή(ؓ\lD9ڒ.bdPeo̩1Q-Z깪[ט CлIRMInMOC 36k)}$x&V{-Cf<V޺Ԧ!&}҇GNRSS dMEt?j/;b<4 NYٲJdG="ߝ}mGXHMό"A{n3?Tu)$oM TʯU+ŒB2掠ˑ򪈙J r.Qk]Bim}wqj;TNB~0|$NX.z}Z ̫Q3i̹IAx{3BF#?3esv3^˵ +Z^=j;L! ZжT`v>{]bqItkL:=WKgE9ͪbI#W&dt=;ZV>~%,KWG_6t%QcB.u%T{[yPr&H_=QU;=\i؄SWYB]yKLc^'G5vK>%saJg/Tf3baV,p57rJUμ:֑!ZyІ)08?Z-}? ʮ.lvX )--3J6i7# d(WQ%a;as׌a$\!ĿU0ѧgV>ֻ}ycHCzI?S>$PZ& kb/U+񂢮,H6P^ /C +%nj:Zdc{d$qmùMXեgA- sS[ةur-z3 +T[;B]Q8.G +&l6ZGv3Kpi :0yoĸh{d ^;9|ԫCua9Irk%bӣ1-L8"õ +^E; $7M@utlYz ߲K> DPkd KU;Is`a +N=bI#{: s_{[A ^=EO=K6Sm\\m0v{qݷgn}o~;{__b-ߐL(;#XƄ5xtU]4 +endstream +endobj + +4866 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [180.62326 741.2904 222.00327 753.6004] + /Border [0 0 0] + /Dest (sec:theory) + /F 4 + /StructParent 163 + /Contents (Section 3) +>> +endobj + +4867 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [463.0277 515.1334 524.4094 528.7954] + /Border [0 0 0] + /Dest (subsubsec:effect-api) + /F 4 + /StructParent 164 + /Contents (Section 4.1.1) +>> +endobj + +4868 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [464.3611 501.4714 524.4094 515.1334] + /Border [0 0 0] + /Dest (subsubsec:coeffect-api) + /F 4 + /StructParent 165 + /Contents (Section 4.1.2) +>> +endobj + +4869 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [229.18156 487.8094 288.63504 501.4714] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 166 + /Contents (Section 4.1.3) +>> +endobj + +4870 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 474.1474 130.69514 487.8094] + /Border [0 0 0] + /Dest (subsubsec:context-access) + /F 4 + /StructParent 167 + /Contents (Section 4.1.4) +>> +endobj + +4871 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [263.94278 415.8344 316.6733 429.4964] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 168 + /Contents (Section 3.1) +>> +endobj + +4872 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [346.99957 361.1864 411.01254 374.8484] + /Border [0 0 0] + /Dest 4507 0 R + /F 4 + /StructParent 169 + /Contents (Definition 23) +>> +endobj + +4873 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [87.36614 286.07642 146.54327 299.7384] + /Border [0 0 0] + /Dest 4508 0 R + /F 4 + /StructParent 170 + /Contents (Algorithm 1) +>> +endobj + +4874 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4384 0 R + /f2 4378 0 R + /f3 4360 0 R + /f4 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 171 + /Tabs /S + /Parent 1 0 R + /Contents 4875 0 R + /Annots [4866 0 R 4867 0 R 4868 0 R 4869 0 R 4870 0 R 4871 0 R 4872 0 R 4873 0 R] +>> +endobj + +4875 0 obj +<< + /Length 5323 + /Filter /FlateDecode +>> +stream +x]K(ZW-97`k i[ԮLEaH7ġvܲ~]]ThR<̰{DC\=?y}|i/|}ͻ_]_5WO_~>~usonoy'<{[|vJJ)Q7/^bzwN7v; hl~]`qƂ7$?P0ƀ)\|{w'_|n tHZ#`+>=asszۏ#U%ќ~}Ps2fb#Xy?OV-!]#m _J +77[`Eh 'VT/\*E"ɧNUtFA^[QsDސ h0(n)-GLۖZH[64~N# 1ʪwR <)Q:|1#Ow0IURp@ݽn}IZlY<2Be k0H\B%{$'@ D|k]EȸzNVŷa1;ףV(j+ijcŔCmrggÁ'?I6zijy^Fks9!>07]] $9;E"5An +>(wS[ +d\t hCFnyj.pX4圠mi{<8-s +KzsՓ#޹ 0v[2;.s 12=X[Q&jtbv RfIɬ+z>+2Δ1T{kqsJ8._ĕd7Vtciw"MN+3d|^!`6%LR >Xc+^)%ǔs2y~*SXk!`JULB3jO.̰ MDՋnyU{(謯 &y`QyCkܩr3*3/&[2_&F %F TXN=z:qR +ôžhy3'QnNLtOA))gc&(:e (h Վ +=q\F-l? I6 l<\D/h,¬WM ٬@͈'qII]]ьXPU:ƺJ dѳ˟ Uâ*kJX׳mO_5A!14;h{T8 _tle``Ն`A l*0ܜ$R-sii48k1:oQT?. tEtsST{.\m61{a?KF`Z, eRyճ=qXk +VCl~0'YRKZ=11z`f:)KAHjB,6D;F*vg89 +BװG  뇱wE̜{YNO 3s#$9qy+k/Dj_#kQY{+y, Qփ&9E&F%@ bɣ +l|W*m!`z<g&D{Ӗγ yAlXhΙCLAyQS1~zd +.'HBDNh*#}#0o,f6h7X/x)wpDR OV6dK~ѠBn1 +:%ME@DSٽ3{"vRߢ$¤;`3ԙKq@N:rŜW}B-eUy5 8ACpYkLQr5!}G65B\GZ~"} ;j*ULATKt"y"4J6}{<ƈR9L-c S՛w S^ /&چő[ds')3@0ۗf+rjGx '1V*1Hmn+@keTQ!KȆN5qH?m,OKCJ6R/'͒TSɷ+*Kanؑ:ֵ@Vxkko#]tԸFU0S@0J5|o&I&_@v /ʐ>@b}J^<YЈ.72'2s+grJu^[sSaǮ'縷8 *pxl .PeS[KBo{`ycD\W%fZRr1LʖG_}|{w_^^ǯnͻ;2=S> +endobj + +4877 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [311.19995 572.0674 370.8978 585.7294] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-iteration) + /F 4 + /StructParent 173 + /Contents (Section 3.3.2) +>> +endobj + +4878 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [197.09962 524.2814 261.27277 537.94336] + /Border [0 0 0] + /Dest 4510 0 R + /F 4 + /StructParent 174 + /Contents (Definition 21) +>> +endobj + +4879 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [408.45615 469.6334 468.06592 483.2954] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 175 + /Contents (Section 4.1.3) +>> +endobj + +4880 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [258.05804 397.6584 309.11444 411.3204] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 176 + /Contents (Section 3.2) +>> +endobj + +4881 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.88214 308.8864 134.90927 322.5484] + /Border [0 0 0] + /Dest 4511 0 R + /F 4 + /StructParent 177 + /Contents (Algorithm 2) +>> +endobj + +4882 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [363.2142 220.11438 415.47824 233.77643] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 178 + /Contents (Section 3.1) +>> +endobj + +4883 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [402.55 206.4524 463.17172 220.11438] + /Border [0 0 0] + /Dest 4511 0 R + /F 4 + /StructParent 179 + /Contents (Algorithm 2) +>> +endobj + +4884 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4384 0 R + /f2 4354 0 R + /f3 4378 0 R + /f4 4372 0 R + /f5 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 180 + /Tabs /S + /Parent 1 0 R + /Contents 4885 0 R + /Annots [4876 0 R 4877 0 R 4878 0 R 4879 0 R 4880 0 R 4881 0 R 4882 0 R 4883 0 R] +>> +endobj + +4885 0 obj +<< + /Length 6976 + /Filter /FlateDecode +>> +stream +x=]s$5i)#bx c`a޸*UR*yUR*ߙJ]vwO/?~H_~7w髗/vCO/|zO/z;թJw^ApNS筃`u^\V]owS{{o~#k1/VA5*p{;F㉇oUiEDj +^< A{h ׋8LJWN`5P;ُcOo׌ bo^v;_ѩxtzF//TVu{y{z7x⻏WJ}^|+B3@h=ljY(*>Tt~Wt|g,:mk }g˿&7br 9vy &jnO~r١:ϿY4jܑ=d\rqKt7ehc +?P抜jtO}s'2 +%D)S^O +?oE RՒ Nqo+c'?1H4H4V!Q;(d́dL5-$s":Q{dV6'BFjq, U:ҜbDMu%tK8P,MP;pj5Jyب4<[dl}'g(3YI %XKeF='5v6UU#/2=KxXX}B|Qnz * +3!2ф=™"qY}!W(Af^YvX\h:24$!ͰkCĺZ1-cK^[0[ꉋklගo"Q\ {82vkc~T5CHEW٥b2>h* +=,e9;R`:ԑz+%pF2QqFcyl;d 3,h.i_\Q;]QByf IUHm%RjV\ErZOՠq5zo$p؊ztSa`s܉~_bNWkPiE@>mvvF6 +ַl'|uPmo/W9FOXCU"R[/:ST+O֙Yxq7tla3T0ՖlY8F)P=υ +0=vwn8BXxzƁ ) ?3xTL#FC,mbCF5eVVmƆ>\$ +Vd#΃Vl Rfg@)9͛WwlebtN:`C=@eT),n}"a>H6Xv\*nI PG)E.RF6ЮŔQN,n'gΏ͙w6'y5QB0?61g`̹,jIT +:HyBUo c+^pxa|m$Ɉd\t>[{h1%y8CWO ^OlK//<)!]vfKf>l a5Q٤*WѳYfFKn &Z".LuF0xYlܺ+zoǢ  6/ycwBA 4V(K]b8QA޹}hMl(v(F\ Duj\2&?M [< +te7W/Y7qf.D] ld֤AK%=m.9 k,(<,pFy@X-'ں&NjUH(K!iێ#=?l@iRy)H"An BuI\TWr&ʌ2gz2C3nqh<RȦnC³ +H>T\結 ؾgB;-1+ovOeڈ9c8tǭ]l{&c!PJlЕYSfJSBIw%}ɳawK@7s;6EJ rj!rƥ:%[ws!JַA +=zpC:l*rT ﱕyJ%6ʖ&΋Nɉ J $y΋Wb;X' )>X㺲SJ5Gg1@/|gq y +5x)~Ɉ !:xe?4,@`c|&ַ`C|&큲M{RAKk۷=_^[D6NzfE4oqD3]܈sr}v[!D V_נx;?d#cj C/g )v`56 ڈ#O$ M6A +ֵG>aŵ;#~/^4.%N;iDxg*/[0hlA`t`b[~eKސU={1IՓeéz^?G7&CG1>K3zbWctJ-5)h@湺ؤ.b[ e{be#{z VG4-W 48> g;78Y*r摶`OD.( & +{EDꨧ`~YKW>@ S YC / 1~d7 (kPcW Ş5VeqDi+ܪ{,ӿ?{E$B.  6]+^js쫚3 ׭wh2).Ke'ogJCD,c="6faEʶ_K%LH-c̦ی$r@4n&*@e +X :;Q F5)dR`Q-(j.[11!2N? +!- m!bE!d }MBbDV[ Ȋ MӱT@6J2-tIFr +I6{$kC T {ˤ7dƵH@*YÃ3"ns(ƥ>Zp._yB5sY[⡌KVBtapRUͶM#GoQ<>ε\vf5q +QdSMʓm.IM]swONVʓހb`$&9-˙1|Y@ٔD* ŧ0z wI,f⪲Xtzܛv]$(֡ǐqlMiB* NG@!VmgCRșǐlGG1)$IɔajGDg؆jVVҨA l3[`<`&&½ZWN_a4f,Ĵk9O4q.QXsF(Ӯ+KH8+]ޞ+zL鮈qWڻyw܊1&rf5Wz(Ж.8˞:eQl*&_,-O}H +ss֩HJMV57kp[YI'т +9\Ek +/ߞxcf[z dۭ.k_L:SUslN & 8?ۧ(xiGI;4O̹BR%/7MyJ݀b.YD2˧ӏ1!Y!}v38ぶYl; m:?hQPQ#*%=E3hWdn摎"/?Y&,|jNJͥ|DRb@^P&PLK 1D'.}$n}B!(碝Da;Mǧq>x8d%blHdz%e.+ >kbz*/x|=i>4z&R{LbͷQ\~h!hmvOqew)+?=5g-^9ȶ{;[*Z?6غ +j^&^*Dl#"`L7XT#Ӻtd%U~;>l+})!\wdYGɫ6َ)vf7>X[t&A=)z7x}[Vtٹg ,c%ТE}5M%'IgFWGnz4ƥ:0ZږldjdLD4b[j +Qe-Ju +fjA9]I݌K^ݜhBAa}E8*Tl[4_~clK*w0N" O4T 0w9lgY6*BҮlޓr!~i? 7q6ɤCZ#+\澬pIcS$9Cd6s]MK*DU5kW /Tj|vw |fhnUmBuW~FրMg_?|q0#{;j ,sK|$)7V\QEVYt`}75{bB~$j MI_&NŅ^Spn*#eXPo`|N/oO|Dnc^Zkbjmv+ + kEZѩŜr-t@,lmORiȮg^Ӷ Ϥ6vvudP2nXK#PtO d|{C)4=+zk21R!ͬ`*vdb}O+)0cۄc걳1;a6:ҝ"&)ՂqS~Y' 4jAP*vT}Q/Ϙ@bd!Xv|֬(Yfv~FK@aS@dvN7*%vNJyX:aVSl_#nQݡ;zS|C2|v7?v]ҷ/?wƇΦiƆHA_OeШӵ +endstream +endobj + +4886 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [87.36614 598.6334 147.40263 612.2954] + /Border [0 0 0] + /Dest 4512 0 R + /F 4 + /StructParent 181 + /Contents (Algorithm 3) +>> +endobj + +4887 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [140.40207 571.3094 200.47287 584.97144] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 182 + /Contents (Section 4.1.3) +>> +endobj + +4888 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [149.96503 557.6474 213.69797 571.3094] + /Border [0 0 0] + /Dest 4513 0 R + /F 4 + /StructParent 183 + /Contents (Definition 15) +>> +endobj + +4889 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [276.43414 530.32336 336.26315 543.9854] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 184 + /Contents (Section 4.1.3) +>> +endobj + +4890 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [259.87186 334.6334 325.1928 348.2954] + /Border [0 0 0] + /Dest 4514 0 R + /F 4 + /StructParent 185 + /Contents (Definition 17) +>> +endobj + +4891 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [383.5707 307.3094 446.11862 320.97137] + /Border [0 0 0] + /Dest 4515 0 R + /F 4 + /StructParent 186 + /Contents (Definition 19) +>> +endobj + +4892 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 208.01038 122.27716 221.67242] + /Border [0 0 0] + /Dest (subsec:core-impl) + /F 4 + /StructParent 187 + /Contents (Section 4.1) +>> +endobj + +4893 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [382.14737 208.01038 441.80838 221.67242] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-asynchrony) + /F 4 + /StructParent 188 + /Contents (Section 3.3.4) +>> +endobj + +4894 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [270.15045 180.6864 330.23697 194.34839] + /Border [0 0 0] + /Dest (subsubsec:unified-context) + /F 4 + /StructParent 189 + /Contents (Section 3.4.1) +>> +endobj + +4895 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [87.36614 146.56238 148.84537 160.22443] + /Border [0 0 0] + /Dest 4516 0 R + /F 4 + /StructParent 190 + /Contents (Algorithm 4) +>> +endobj + +4896 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [260.3851 119.2384 290.7564 132.90039] + /Border [0 0 0] + /Dest 4517 0 R + /F 4 + /StructParent 191 + /Contents (Line 9) +>> +endobj + +4897 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [277.53036 105.576416 306.98016 119.2384] + /Border [0 0 0] + /Dest 4518 0 R + /F 4 + /StructParent 192 + /Contents (Line 2) +>> +endobj + +4898 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [362.92276 91.91443 422.8277 105.576416] + /Border [0 0 0] + /Dest 4519 0 R + /F 4 + /StructParent 193 + /Contents (Algorithm 5) +>> +endobj + +4899 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + /f3 4378 0 R + /f4 4366 0 R + /f5 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 194 + /Tabs /S + /Parent 1 0 R + /Contents 4900 0 R + /Annots [4886 0 R 4887 0 R 4888 0 R 4889 0 R 4890 0 R 4891 0 R 4892 0 R 4893 0 R 4894 0 R 4895 0 R 4896 0 R 4897 0 R 4898 0 R] +>> +endobj + +4900 0 obj +<< + /Length 6217 + /Filter /FlateDecode +>> +stream +x=]s#SIW쓜:'$Kћʿt,:= h77v߽z>nv>}wmwޥ^Տo_˯\|퓋q/}r?U)yDto>\ܼݛ_.d˛ Ip!?f/tւ0RwoO<~#ˏRR i' zB +'0ݷ A=v " `@HŜ H!5ُ;m~g@?̈́=1 FϯnoyHP/.dBng/7W݋]|b[OW q$=3FI *v݋?5`\ l+<>˗wT4`˫*MSYJ~:=#1z $,˓ Ke(Rjj1j>eY ^;R /{pߍtGk;([+#l\Bt8 0^ڐ74!zMi ^xs$8 ` e0(r+(Z05 + LCqStM"ӧ&m"P~k$'QnAHI&E^N C*ԃzMPNX#cFI*4g  +2z*@ŹwjQ4O\'Fm((Piа68:0aQ@$,`Vm+LC"mA)Yi-!&wBgvp|BI` FHSp4c).8aO&7M%-nk>2"ν9$%cKt86JH#ZӆxEяhFyk\u0IY hg4b(yΊ瞣UVo0/g0@ wR4'NA(;ru" +NnK+$aA}$狷` 3aG?Ҡּ"dFZs9# {-\1'@İ>X= !kd*U/wѠn+" )nMs/ VT򏙫_,P)kp=&MzBMzT ߣ6|HZ]u#MJf!T/ׯnm`Xްa *p2ki 5@†2Wb>fz-6=_J [|845Cָ)gJY:ئvO&1knL f0ݲDW1[s4p3"9`Li2fixt&xۂX +mWvkBn"QD4ɥ!G8^mW81o8įp{{02ѧ ps:15MƣZȂ`yk{_'4 t4#D ?%BXL7nH#Wq#x,3ۡ3B6XڳE7Rh!Ms?E*gx{ӴR/\[=L1h-LÂ`2/ ZбǔʆMo* +'ZM1:&Ј))-MQs"J|ů#QDgbڗb2{QJɦE+{؈x_N(p?1.x0l)MNʮYMd#K{XPBb_uE!2")O(dEod3ڒH60*P2a`-*mxl/ojIM>.^D@~nqE4]J!%U"+Ha!Wd- 0 +y5`][%Ձُ;'c1N8ߍL0P5r@sO1*X㧷?f?>nؕQ50Rz厈M leƆ=>22 0R 䇽I氅fNp:G#%y (i~23 ($))pyzEID( crz`qK*?H#6ݣX:KmVUwak-*=ZNe̽1oDoLyix4IG@B#akM F@_H+!& *i a'gȒaNYF潡'T TƨMQt.@_H]:LZ$UQH2BWsDX-oV p_ 4 G6g'CP"⦌&e`Ow@غjI^H}m!RL[eoIŤz\I綤BYJ!fPhMuS~z.x_$Mchm%C: +-9SE=W\h'fm=7Zj>P_dR l^QQ9`}7t0^nY~eL+S d~f -_VDPr̻aP g)zpӳ"9?o]P]LӪˉ\|hfx'V(C_ո$+kL)n>ZyffA8r +Ax[^޻lʇ2fť!F\AOu^\οq(S1U9yNq]<cX@ԅhQkz!&2O8BK'k"`FmD|z;^ ЛZ?M,Rn y ̣u팈T–BLIIh;U?{h|wr%W ވZ~ +M?΋ <ƣT"y'D/5 +XΩOعmKME}h +O}i@ai-o0QN,X }*S N6#x "~v-h{گ-[69w;#I༉T*d+?;HƈO9wHUmlP[r;eÊoJD k{8A-n闔#xWBEWGc#szkPW(f,AΪk2b$1B:wSBS%}W/^ջjUe#fn抂<',o ԋRP6ngSo0Q3'wN,ڞƂFUa栴$G$\[j,g-k2)<Hieap{*;$Z&!jG&m)( /̃ʸzIhWp2nɲ0q_d Ip$ |& +ZXN+BTf ׅ8Tp~aϊJhe-Բ,Yy;$tK{Ctd1NjgNFdGY7rK̛ gPgXA&HZDyқ8 ̣+eƬ塪bɰtVS6eR;)AXx喕Z8D4q +5 Ԅ^I1l%~/ yRU)cU}IJ(؄9cs*(A)hHѻsR +>j9 oJ_j=4*F&Uqm/>JmWꂘCCZ EK qRաސPs!ز hSYjqb9_b9`Ssńur萄P΃gA*fHwmN`]2j(YJ JO!bhq2IY +o7 +~LiBY^z}(8G;N)b4&t^] /3BGP@;MjK!M@GstpolP-zU ^2 EUM^~aKG*0X&gFXj(kgVxI'+A"&`7&Ϡ*zl}WxV\c:$!LJ1Ʀ2Izϓb +mQUFE\^⍦CB>g;oJ#ʒDp0Y =vUP"vE}lɁ, -K>743"j]GZֈ%4f\P h1. v @ n0sp1hs!HͻBqÒPMxpIi:!+#t(N (8HXo a^`jD&]*K ]<;d6so}CZX!E z7gnj'TT9̙uOT" ؔ\L8 gBY +\YڣN+/38TzdO[(5R} z=-G 63"Wؖp@P~cr՛}wӷzv7]E__[4nB6h䤲v J +endstream +endobj + +4901 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [87.36614 519.29944 146.85141 532.9614] + /Border [0 0 0] + /Dest 4519 0 R + /F 4 + /StructParent 195 + /Contents (Algorithm 5) +>> +endobj + +4902 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [326.38528 519.29944 386.20056 532.9614] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-asynchrony) + /F 4 + /StructParent 196 + /Contents (Section 3.3.4) +>> +endobj + +4903 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [460.86523 478.31342 464.16522 491.9754] + /Border [0 0 0] + /Dest 4520 0 R + /F 4 + /StructParent 197 + /Contents (Footnote 2) +>> +endobj + +4904 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [79.86614 114.97339 82.56614 125.701355] + /Border [0 0 0] + /Dest 4521 0 R + /F 4 + /StructParent 198 + /Contents (2) +>> +endobj + +4905 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4384 0 R + /f2 4378 0 R + /f3 4354 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 199 + /Tabs /S + /Parent 1 0 R + /Contents 4906 0 R + /Annots [4901 0 R 4902 0 R 4903 0 R 4904 0 R] +>> +endobj + +4906 0 obj +<< + /Length 5213 + /Filter /FlateDecode +>> +stream +x]mqb3mxGȡ(˲哨T(Rb<*u\)Ac'ZUFxpCg~z8ܾ77~6|ӛś܇nwwwv}W_?]~e: t3g *τt{~ww_^~wwq~'88twM ܟw3oߒ |7}+{Źs}'4{zu N1tn~fl2 S8_}Ost.bIYg)t*;wNxg'K̀Ę`,d D瘛g#?ɖg"Qa$zϤڶ ..js?(d49 9X`ʄG%$i0Z~ #_ 9GH.*{eϩdH&9V9 +dQ9`44_P8v0h1T$9YΔBBf8x7n 3Mƫ4t֩jU@umHgr rKgWQZgVf Ah5FyK8l [Z&bܺZ<'LZN9 e 3- Q {W%\Z^L|DB)ڜE؊\ Y͵pcYkG?:J7owl%G,cmXռYNظ '=kR\ΨP/5ˌTHgs +(:-RR뀫YǾ-P(© qvu"yM*Q?z9ycbH_T~y?x,"mD{}+C{=(EnCN)i>) ]!TY|TFKjLAuTڵk߶ ޠ芺Tq&us_41ˡ2ɪL9n}qC-0kX3]Af-B̺c0V0-ihsX'BhtZeG)hV +xW+;q!MӀ[ewEff%o~VRIErPԀ0Ϝrhd .fJ ewT8qmlel\fn묞84 (YnIC&#M`]b0 ‡=]ڼCau+xDOЎm$O}"K(})Ax:mv%]LArLqve/Bj.\u@p|͜[9Ȍ Y[$XC&=bgd7LpSp>W)%|Wz!D@j~$ӽptaNz}ԗy@P8U,!Y裝sd:dN16ճ.0Y/S֚eg\`Z385e4?5:׸<`#C-`6kpLvQ!-sf +*cL;7xo xR"m~N8\" +NvaeVbyęAm̊ZP[:3+;0e{*6s(q]L ^Gb\ 8mظdm"6h-Sp9 <ɔ1@85#iW7P4lI5: <5^0ƶ"H֞yfS~Ѯc*k))6|/pIpcicP{ NEI˭r* yHat+-Y3CY3Nѣn`VDZKB˵_`!gBcS۬6^0KݘaH#ܸ4l7~sat[`_cNJ/ 0{4?TYBԕ duYtFECY* 5 #`4 +IЋ& +#SGS0*פ0{& +TޘT2k$r!,)0;(QhVj xғRiޤfkuiL*bGQgRJ5sC k2.,3&Q,qtv_z&)z\3[ S"ą&; >6x5}*ÕArϼ;+ߌJQgPy% JJ+n108-2"iU$x%,ak:VX|q/qJ"3qEbfl0&[W{ :~0n&K)=iē/)]֋dByabf\zitWk<{^)cF( (dʝ,~%T:IYZns*+Q*kݙ ~'{z8ܾ7_|8>6|ӛ7>܇nwwwВ@Zi`&v('ddq?+ +endstream +endobj + +4907 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [210.73615 585.1914 270.70114 598.8534] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-coherence) + /F 4 + /StructParent 200 + /Contents (Section 3.3.3) +>> +endobj + +4908 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [349.41644 585.1914 409.38144 598.8534] + /Border [0 0 0] + /Dest (subsubsec:coeffect-api) + /F 4 + /StructParent 201 + /Contents (Section 4.1.2) +>> +endobj + +4909 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [304.4633 523.7434 363.29776 537.4054] + /Border [0 0 0] + /Dest 4508 0 R + /F 4 + /StructParent 202 + /Contents (Algorithm 1) +>> +endobj + +4910 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [411.42615 496.4194 471.25513 510.0814] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-coherence) + /F 4 + /StructParent 203 + /Contents (Section 3.3.3) +>> +endobj + +4911 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [210.50237 438.1064 273.43668 451.7684] + /Border [0 0 0] + /Dest (subsubsec:coeffect-api) + /F 4 + /StructParent 204 + /Contents (Section 4.1.2) +>> +endobj + +4912 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [298.89136 369.7964 357.71567 383.4584] + /Border [0 0 0] + /Dest 4522 0 R + /F 4 + /StructParent 205 + /Contents (Algorithm 6) +>> +endobj + +4913 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [301.9643 356.1344 361.79327 369.7964] + /Border [0 0 0] + /Dest (subsubsec:coeffect-api) + /F 4 + /StructParent 206 + /Contents (Section 4.1.2) +>> +endobj + +4914 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [87.36614 215.0924 146.8631 228.7544] + /Border [0 0 0] + /Dest 4522 0 R + /F 4 + /StructParent 207 + /Contents (Algorithm 6) +>> +endobj + +4915 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [458.63428 201.43042 517.46844 215.0924] + /Border [0 0 0] + /Dest 4511 0 R + /F 4 + /StructParent 208 + /Contents (Algorithm 2) +>> +endobj + +4916 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.88214 119.458374 135.71114 133.12042] + /Border [0 0 0] + /Dest (subsubsec:component-api) + /F 4 + /StructParent 209 + /Contents (Section 4.1.3) +>> +endobj + +4917 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + /f3 4378 0 R + /f4 4366 0 R + /f5 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 210 + /Tabs /S + /Parent 1 0 R + /Contents 4918 0 R + /Annots [4907 0 R 4908 0 R 4909 0 R 4910 0 R 4911 0 R 4912 0 R 4913 0 R 4914 0 R 4915 0 R 4916 0 R] +>> +endobj + +4918 0 obj +<< + /Length 5497 + /Filter /FlateDecode +>> +stream +x=kqW sLo$R-KNYS|HSR9+ =hcO1?pfFht|~O]w}wsW/?n~sÛm~|w{xx??|8 }y7yɅNf| uM[S0XJdQbJLLR0{L}{qJFk}Zۭ$ LDt݉Ǒd@UgJ"T&aO/)񜿿I$j[ Zl0M8$Ji̥54h\@ULmQ\`V6Mj7cA4 "˥I%BF8=W!9Ѹ9?u7s&Ka +A Lă̹Z$&[lݳAߜ فBU$!U4sTІmшVͨ4 7ejKCJJ2fBT$~T" >jHVcl!vƽ!:fA.εpu݊ Ǝ.9svss`:O2/ӆ%}&1pgdޘ|Kh"N /A` !@U؉"HLsd) ?q݂a`oMo$[S2(AeO2EaQԬ)Mn lyBGȀt3dzk`G"5:I#]&/,N\R~>ts(pm6+6Wa6ά k-:9Q?-סFC"\fQ ˙ }7(} )>Y-gVM됝cd|rcWMTA)1!rRy(o&rz(f+tv# +yUeZM6kB$Za2Xt}0D +1&ZI1UdZ]f\wbY/=1 8H;="I_ּ5A:o0 ._m*%6ŸWYh jBkt=5ҕcb&){-(-j-VJ$^<.([QC| : !/9$2hd1ȓoCm`&4-B ׂ9%x楁PC/F Gc(Ja}G\զQ)7jc=ݻ4MXz+tPɓ1b@ mrT/ U%bٕ̾KU\Ć@^LOfcV!5x^.jw5Ye -LOdtUHp1Y jiBuSf!]bx g +Th0 *#^O[K=:2lr`21WNrŔr +d7idNLxk"_)l3BX$gFZݰ)36#iS& jJo_4FT6[1ꀗ4ۍ|iUjyUV@cQhDYO2PQ6c.gƸrbHZ-Dj\HOrMxx\yԖ{so]k_g:Nx0b^k(B3KxN?- +qΦtŁS"o&5狫5"Rk<"_ F3emv]Eo3N8s8eMX:N刂 _ϗcqxOۣ '܊Q} 5SH1b&1GpmDJYV:e`^)ieyFp$ATudC5 *Ӳ`22NN 'ڇ*2Rzt@%\>52e#, jc"놶LDmT2쬄!/b;PHXpZUn +@ ȂuZwm,0\5!0/s̮|󯾲`֟P E0iDnWJ٭Ey.6;˕N&ҾJ7 J:bDq8F͐QsqRM$j6 +r( 2NmN_*lA2lj[rDRQ)J1cXzȉ:J# j^ Ij2&r3$:5J0q^E>+v8Ԉ8=?\d#j-Ⴔ欅H1*Y}Li˄g[ؖ0#}<~rN?'(}Phm1OS ɜjy5) +Y3PZm=lH.dVą^D'Ӓ[ܰgn*TBT| ȤE(xXHfT(@RYS) 2bx= U{-PCtkDʔ)'Go~f Gv6򰟭:\5L_h0z[kgǪ% +@e "eeаgUe(&KG|j,$nD~0}w g{osk>'#y]'j{%e%` !Pٸ-lTĩEHZ-sΦ@u 2, +UmQZNCDlxzyRFHb13v{`,&эiѱZ\j׶V޽Dj#9COcC=fbh zmhk_(M{1"Xo}c77 pm, 4lZYii[x;۩מvSKذ5a,>OMfWiZ/j/Ltf^BQak 7s(90<ڪt pW:nY)ًdWBWK6aj.i=.i3|7-!k,Z7*o^?UQ[T/=/jd-ziո}q;z:݌]oܦٻlVE㗦j~6}tQ7uښp4GF3 Ǚu~QT@G 8Zx%l'@q +Ug'\|/. #IIHbxڻG +ϬjzR_v'QR-m-`փtkɨ \'$5LD0#~ߥ8nъR2ZR֣rjdv5[XYFp.\XQsXQPzR%6U%k!ItCn@Ck^U-b}_ux!n'O}'󂣵;7h[*ݒJERi9h?`bZQl?j2q YH<߸G/5"jgqkZCseޅk|0ZVLcva3`{肆l׎y~(i@֋fy6G#ԸhľHB22 v+gJmD8Mb6Y5e5ĝIܡC|4g,Vd˘Z[LoG'G4Di&x>%wS4HzT'Nkzp[jf̿i>Sͧ^Q-`,1%7;9WF57‘N.ca2N= 5~mQ6"zgy? *p<.8:04ه0ks|QlE(cODS{&;$`+MDFqk +R njwjwfJN)y>T6ׅv:zGxHGe#7@Cx6@/n(Ȃ+VY}HE=k9fY ,ŕXXQdowgPR3#w3@{u* L`]FEdcF*цG.#h'Of5җc;}V[ݛna$5vĭ6e6c~>b5|>[\Q#]u.^ +1hj0Q0W8ulX j)),n7 $R;;y &;RxP/ZeRxͮǵB2em۽ 4d7iù܁֚wSRA2ۥX4Cv~yXCŷOPV.G>af^iɖ4>RO@w+dyCΧ^ƆWh((ޚC*U›zzhmY.mxy `1 PbaυZpYؙ(e$5p']J8īTYZ^mMT֕ oҋC#N^;tV]RLʇ +Y[Z3U5TsܩC(\T9^ ϰ&t#r9> +endobj + +4920 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [184.48878 504.0494 243.92665 517.7114] + /Border [0 0 0] + /Dest (subsubsec:unified-context) + /F 4 + /StructParent 212 + /Contents (Section 3.4.1) +>> +endobj + +4921 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4378 0 R + /f2 4384 0 R + /f3 4354 0 R + /f4 4366 0 R + /f5 4372 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 213 + /Tabs /S + /Parent 1 0 R + /Contents 4922 0 R + /Annots [4919 0 R 4920 0 R] +>> +endobj + +4922 0 obj +<< + /Length 5034 + /Filter /FlateDecode +>> +stream +xے}m`kuʡb S8!ž˚80TOttttC^vm.~g׷Ӌ|_˫~o75_]ttu?^߼^|i/xwl\7y"ǙVIus-onͯۋϮ.xs|!ݯ_.\o7\{w4OeV +mGF KA-!] x& ? ?s3 ⋫l2Fd3Vpl Tڱvsur9yPxnM# +ėᨁ2i o+~N/TBeNxk+3=l}iEսdKq.>B`ͦ!v%Mj^" `N2%]L./rK!r8."1R3E"@:IuTW0p'CIG8М2i\Os'/M@u\IQ\EX2/?Pm 蠴g};`MÎz{R=\llkM .4skarU84GhdkebUH1[D ڤ&0`fǬ `#%bi)b0E,(?+Zژ[ʵ+{FNލnp 2r}O!4؇߯{LE$%D0."}VĎ"0Gz9Z,3%Q9:jQD(@ƃ3\y!r +UnHS'̇5R2g)_w<}ŋ?~:G9]C +eAȲ$fkncGA \( +ohk1/64W<J.wp:⨴l3g㉻F Ү <"X)9ƕ4;>%f*Jp~e;u..;-)aX`GH!d-hajgNW!h`ĠwƾMxtQ5*ln?c1U*xz|{zb1B:&$;ahp Zp5$.:'o?H2NJ%g4!?N +f:j*8Orl +F t !y,ܙ}HDX<=+ mKθ2gN@sŔ oyɻpΓqh]9":K[R,RiNm{?qQed E{d(u"~y*%w"̕D01'I8E}VD,GS$y)K9\1m&hI^JbG +y* U{5PT;CatiG)0*d;eO`E$p8m }DA[֑01*/;쏰?@("$M+bț!(b\8Te8EqXnZpθXg=hyH xާ>NM$h\qz0eB+BWd 9sjAglLh.;^0kzXk)G5S8OU~T^%êNN8F:I`W`tK4fh2'NFwnG1 <51,#d.t2 a(y<_hxʹίYw)E/G}/ -ЊZh_{@M pԒջ"v"єY&TH_M8t9̛t a,1͉0rm HGVӘ&=Ը,(nB.g&8ɜNOg fA&9ZIQ=Zx.d&DsMg$5&̪q  ;f(o\\+2X]˜vf0 -Xbcc~ ] ž d#TX&aFNs-]ܖm%v0ONɶre ( ճxD+w/Ƽsf0g4E( +2Nۊ0l(P+`E$`U҂Y9+yދ?aE2.+W/ק+45.xˬr("F2DW:0*Iī t U2"+6H@QTr~PLgR>> +2G% 1$.JH88L5SǁOZr$ˢXVM@I +8D{EXIGY+K5(+x~| +iUθb=hq͆|H'S +VRf MLqy>0$kWEG9=7jLhxofYa^exȩӱԺᡢ,ȇR~eset$CrάcHO2dyZ(Ĩ+k33"e{co)rwT gg\)U޲1V^}Kh61۾¢K? +(->rD\hif4'?19,bڶVTr }/@\UQc Z̓-gVυB)j&U6 o%qdHaS|!IkIaX^vAc ] B#Z0-K@VH#{]wm- \E:43_ꕘgJ: +ҖlLl'f6x2UkTo\|2j*ea EɌz B|Y : )U̹JSjE#?GoxCa!8Ĉd=+g%;i,=gFk0A󉑌k+\]x(LST/!F*җ&id42ClKzGy:| JvyVzd!8댉~ҏBՠ--B6E@e;,iNjqfO4,b> K1#  aʪ=zMrk&[=C?&p_/ +.M|l<\TV_* ,aA3Z4O8*֒j;$/1"b&z}XVߙ.ĸIV,f ΀l+ސ]5 mK gf5yEo"qjD>>d] +C5 3wqy<׈b,E,X ,5Dtoi:Ips֒0I"eXXNWhAHd ,[-#cE\­XYs8Si.2pH;aA[)Vf,GJ řZu5qG2Q d+K!,Vja&fUO# 9Ic"i,ec4㟂%'.zbcOD/o]Uӓא{% d1!7Wڈ +,ar!HWբ^ Ƀk/L5S4_U4 +#%uљKdAq!ҙ'Br ԕ1Agőc9b׊9'FToRKB I)Zc3D9 +c$7^nŐ".35 W qXcd-g2iEkZ2P3nTgBf 5 KW_iob1j-)[A Ɇ94CMxۿy}}?߳w?5_~vˏ_f۷]zeC DZa̒ۑx;P +endstream +endobj + +4923 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [360.01215 517.1564 371.01215 530.81836] + /Border [0 0 0] + /Dest 4523 0 R + /F 4 + /StructParent 214 + /Contents (42) +>> +endobj + +4924 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [418.70813 517.1564 429.70813 530.81836] + /Border [0 0 0] + /Dest 4524 0 R + /F 4 + /StructParent 215 + /Contents (43) +>> +endobj + +4925 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4378 0 R + /f2 4372 0 R + /f3 4366 0 R + /f4 4354 0 R + /f5 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 216 + /Tabs /S + /Parent 1 0 R + /Contents 4926 0 R + /Annots [4923 0 R 4924 0 R] +>> +endobj + +4926 0 obj +<< + /Length 5049 + /Filter /FlateDecode +>> +stream +x]ݓq߿bhNCQ"错rAÑILG弪}jfw0A_7OnﯯGv]wdzӻ..?}WwŋwW?t9\=~}ݷ/.^rus?~A;ޝC=€LHvoy/;.ow׼..?55__YwL !~u?>w{ցpۄ>lmI}։YǏm'od}]ݿ +Ⱦ +#7R1WqK"0ZdF{)7SGߢ G%FM +$Vū4?:hĞ'LG=Ht/YaR3m'au&[Ϥ^ ++pd8gݹFoU09U caҘ>lp֝V}'2cc:9ΣE6%2 Y#^bS=+䎍:P璖 xUU<52)QSAAAb B{AJqQ,\Qze/$A(h2ipDŽ`YwߕMCd#t= obFҎEHLb JA^b5iF JnMQPRI%lʄt?&LјE8ˬDjH7X$#N'΄[1F̈́}Cf:vR+||br)O#  +HxE u"` S`/q7USS%QPK'&Iupw?+oӥ64$:TU ĊT4#5IHMBG"y(mLVRGWdϳW}R| Bs5I{ڐ]]$zNޜ1IF4<&P1!\* Ù2FU J#n9*9փxUf I<ߒ4"P܉>[\B % sk*^T7w1~'R9 Y0e "_s G>Z$ +᥇|cKlo?K#@ˠ* W?_{g8q䖆98<|Z#2(HFR8B:Q4iVާzDJDH܏]&5r5׸OebjukM!0l*!.>~x\<|[ϵ̩2gӘ_*JMq+:qUynO4r"A>+>s?YT_1+unxid?kMB2)*3p2QQANO=nH" B4aAOn^)Z>L0VFtB V{Z3: t~C4 +3WP*@GŁ I>` +ia=!R|jfEBZ|=OuiKXT+’r1 +܁Kd(Q & IQ `3 喛lސ֪gVϏ KpLKFN9;OӏsjRILLqe܎ڷВ,y2vD(kZ9lzZ|k1N%j g k6CE/rA*h9ׄ`f#XA"(L +z&mDR|QxȂPg,Q%I91=T"7P pv4`RYmԗȣ#"'Biƍ0eRm!6BERS{]=UޙCuRV>NĊN)N)pLk[6j9[53@#5﫠^XKg%)VTh*FdH_0a4~ >r7Y.P<ӘRx1^=E?RJ٫K/*2 GX^!-m45F'snq Z=)ޯKp h+{Pba֔Uy^i`^=Z031CUZtKH܃0rmӊO z{^etNgדd˅a +hZX;P'Zi戁YFÏCTpARh+z!.êR,+B^_v\UW1au7*zN,XB'r5,Za[9*GZ(gN'kiǴ9_,\=#Nyɽf& %b?_$IBYPߵ W^ yfC趥txٛ[5(lbP#^)(T.Hc;dB5~z] G 8~-TƻTl)Zί$p/ $6!8ϳL+)?iw0 }b|(lLP% +IIW š^YBJ5?yq0Sq]Z( iָ*1$+qݩe/s,+j|j*M<3vhw3i&˄ӽ,b)1Lɦ a }ge7` J3tM3HìY68 3Z'Xɇlrv#ز3.xpncL+ 3K7]bts3^2ۨs3SS\PNᇚBݺA%Z4YA:rgz*ÏupSVV̪F۬"{=K<_oXHxrVcْK@{,_P5 +KPrEoHFcVvIv0 uG?я Y0{{ +Iީ*dN=EOׁ%uTTZC8;M*ԡ@7n -HUA(=Sd^P uʾQ|'Y0bR )_@Z `f:7-o*hb+,D-eL܃>IBQ/JXsrHչ%AifF ݷUZ3[3dd^26bn(I2_bLR +̡ +\4QrLC ʟ|qw fof<0L_= )?m5\V/w= +q(]@Dn +"(wYμZf'F/2Cj7 9:/ +*ow1QXqr8<4PRZU9`NTZ6OMTz?=-z~7p-V|82ܰ56ޣ n_gB +:cS 5OzpOz:b/ z4WeppKޕ 4+, bAh?eX)|@S!H驟AB& sV HJ3)5# # :B9&֛rp,? +' I6f'[Ѩ &iX~ _ Co +i1 1@`HǴ,=Ms`%e +>_$`,7,`M2E2I{#u@5Lܹ /W*B1@Vhm8+ WH'ߧ_s-]~D}saS +.~]q='ZK&3Hu&i+zۧlkX:!FX2C;.C/ \Tx8KFEFPpɡB\zO0-Y SV=e+Jq?n+wؗ ̟ILe XAN/ jUs}B{nz:N\%uhm~%<4fC[J&b a1ճ7@#'&Zv[x]jf֮+Ỹc8ō-Z)n܂ww7*Y-nDoy호WՂq үZ;KfR2q#zA7,ejܸ+&Iˌ;k=ORQq#MjB2)VV~OQ/GEW (z'n;7ZZ.1zJof~Mֱ ~ǖU{ihoƮ7KIcݣ=`Tgi6 yxm[ʌho^쩛ډp5.\Sr%hVLVړShz)Ϗtq?e ԯrq0Sd#ٿLu~mDK,v ~w?t]|q~}/ﺋg?~Տo?ޠ݆uH% o~ +endstream +endobj + +4927 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [215.36813 292.08337 218.66814 305.74542] + /Border [0 0 0] + /Dest 4525 0 R + /F 4 + /StructParent 217 + /Contents (Footnote 3) +>> +endobj + +4928 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [79.86614 93.517395 82.56614 104.24536] + /Border [0 0 0] + /Dest 4526 0 R + /F 4 + /StructParent 218 + /Contents (3) +>> +endobj + +4929 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4378 0 R + /f3 4366 0 R + /f4 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 219 + /Tabs /S + /Parent 1 0 R + /Contents 4930 0 R + /Annots [4927 0 R 4928 0 R] +>> +endobj + +4930 0 obj +<< + /Length 4465 + /Filter /FlateDecode +>> +stream +x][~?bpU! I )/668r>s\$5hZ}Swكݛ/w9{]wg.='.~xu.77.7<˧6g݈>g oxs˙3TcaNsռ|9{ɛlx o8yͽo?~SZ2/izϥ$tg6o 3׶SUW1<"ѳ gfm=F5Oőͳax%UÇ_y)O}E[ly)@79ڜk_φo7}slno%-%o +cw]\~ +~φMKrHTrX~>RAWRo4s _^Cqy'.?u>ᇳ.ee~@v@U"Nkz +kXoB*@ɞEvXޕ]Ū3J2.g3Z;9k%%wЄԪBIt5V+- *RΞGQoLxkYpi5/vrD_vwECpś[o +[axª-"4OSۄ 񌫵T)ru-i$jlRU\%Lg+bRA8f`J ʖWThCw;M|AZ4/M-#QρI*E;"8Uiҳ/Zȁ~xC48VM- +VKM' V-,ίk4Gb*+joKj2j9Y:QLu5{Nax_fWdCڗܡ%KKxCËUv^z)Lpi&< etoce#'+]erSbhOVWoWRVkSܭ xpǺOvn?r%4 ӳa'WEZ3, f) jhViY9%9E\7K5B5OYQPşQ;% 꾹<Тyh +*].4p:#ԦUܭ-ø&n.s[N8?V}3uBf]ѢefV +Ib9G Z@=P Q$}Kz}3֏mNŶ50dB/5#rq +D5z~tL2pτc!t SoWB'i/Vࢡ"0or6[ o^ӣgFEjڣ>[&a-,$w)t62?lɁptU1%& m^_h۝ +Ukǖ vU;ZEWE`<t +7m +ro3%D‘țP9n+$lgvm z\5LtNä'jOdQhb5!5 `d(Xk4Ɛ؉2_n4_A* J*lF!Y5;EGb5_h-8`5[($쫬\*kQbH}zޣPE i>z:f +CbIfHRZ2Ԫ3CU<"=j{,$ 3 G1k@2{ÌS'Gmc2L~lMRB 9nu=-O&{3:Z>hiℸaVx5 g@>8m9ǣ~@"ҌԁfҸPIk+03;pPMp"\2nOI\̝8Me|ؓuz;b,[O!Fafy޻/J;cODhv}~DHbME ԯVLOR'g>*7\3Z'hEZIGù}HӃSgZqVQ\C}}"fluvw84hӣ = mnup:4h8+ bUI"HTj~ǿ,B[&) 7;3PYmL]U'V|jEECI9 Sp{\f׾'8njN@]D }Ny;$Mts-8~ g;B!::o#U +ubPց\FRm8+a*I- +p$W) tQE`l$d3aD[*~#`sfǔ(USĨ5c'j("ρ¿NkH3u[)iY Ds22 jd'Ssʼ7p˔'w؋FxO#c|9"&LQd^'Yc/ƏyژÖs5v/wzўQ#{9ȳ1D2@.U")s2실]WS[>|B-e&MG9lڵF{z]ҡ&-NU1`W+>]<~4NfwiiWG$ d^Ll쥪37g2_2u+ܭt*Y}t4nwW?4ߝ=|۽{}޿jUt\^޼H'=hM +=8{V$}{E +endstream +endobj + +4931 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [424.47882 568.8544 427.7788 582.51636] + /Border [0 0 0] + /Dest 4527 0 R + /F 4 + /StructParent 220 + /Contents (Footnote 4) +>> +endobj + +4932 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [448.44293 555.1924 451.74295 568.8544] + /Border [0 0 0] + /Dest 4528 0 R + /F 4 + /StructParent 221 + /Contents (Footnote 5) +>> +endobj + +4933 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [436.5668 480.0824 488.00662 493.74442] + /Border [0 0 0] + /Dest (subsec:core-impl) + /F 4 + /StructParent 222 + /Contents (Section 4.1) +>> +endobj + +4934 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [448.2978 425.4344 492.196 439.0964] + /Border [0 0 0] + /Dest (sec:theory) + /F 4 + /StructParent 223 + /Contents (Section 3) +>> +endobj + +4935 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 336.6624 131.14336 350.3244] + /Border [0 0 0] + /Dest (subsubsec:motivation-plugins) + /F 4 + /StructParent 224 + /Contents (Section 1.2.1) +>> +endobj + +4936 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [123.86342 254.69043 176.0907 268.35242] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 225 + /Contents (Section 3.1) +>> +endobj + +4937 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [146.12852 227.3664 206.04572 241.02838] + /Border [0 0 0] + /Dest (subsubsec:motivation-plugins) + /F 4 + /StructParent 226 + /Contents (Section 1.2.1) +>> +endobj + +4938 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 179.58038 130.88567 193.24237] + /Border [0 0 0] + /Dest (subsubsec:motivation-plugins) + /F 4 + /StructParent 227 + /Contents (Section 1.2.1) +>> +endobj + +4939 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [79.86614 105.24536 82.56614 115.97339] + /Border [0 0 0] + /Dest 4529 0 R + /F 4 + /StructParent 228 + /Contents (4) +>> +endobj + +4940 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [79.86614 82.78937 82.56614 93.517395] + /Border [0 0 0] + /Dest 4530 0 R + /F 4 + /StructParent 229 + /Contents (5) +>> +endobj + +4941 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + /f3 4378 0 R + /f4 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 230 + /Tabs /S + /Parent 1 0 R + /Contents 4942 0 R + /Annots [4931 0 R 4932 0 R 4933 0 R 4934 0 R 4935 0 R 4936 0 R 4937 0 R 4938 0 R 4939 0 R 4940 0 R] +>> +endobj + +4942 0 obj +<< + /Length 5550 + /Filter /FlateDecode +>> +stream +x=rHJLXvJmɩI5;3@\wqnt7nn<}igO?4]^_o徹|u_o~|ٿ}|E^\#>bhxÛ 8μB7X ݻo?p&MnÛ~bF+~poKAy|V<ߡW,jÙ=sՋo7y@#ϛ)˴_Jt8̴UwkDZu8g­:\y'WlO"7_6`f?pLHr owa~ 7_]E?ll>ߞ#5DSt7snN%L#`q,.LoΛ azcnKp"meVU"Qs[Ic`x˸[\f$ZOKOeJ50500+ǢE@qy2| ,0^0˖qjiOZQ8a&o_ NI}~eU*\aKW;DK/ DKS+$̋qr|Q60{;zrpP5 +zV% 7ֵT&|_Y!,cۼU 2Z,\"jm9{GGYye]rs_}Vdcb{W^"|N1g|PA*vq=o.\i}ұ#1j`H( +1ƨ2FPobbOrEz aO kbֻhkt+RO`I |y^µ[ ֳK,'f2 @-۵3ZDC0Rpkzo\Eppay9/GQl`@BVCN#Ssb~U&@IgcԆZ=wl%ȯ;3"Jt\Ic'ĭbUzr 0NH<\Uv-5=]l^̃m˼׬j<#L^"V?' v㗿~|ZDԥoY++0ZI;Q3fA'^+:,72Z!*ll-cP90%>B%c &&0=+t+:ֲUjżTIa69-[|^JՅ\n&=][Sw@ )<,C]n-sh|֔!A?0B"_vK\7a\ b®lj#yCֽ_gǧ9~@4*Ɛl6nr^cK$ⳐP7sؕM,fR9k ؄&súp)ǎlzB#Kh l .=B-K˭M@{_M2 +ɬ--nAK,gR8TBϑb -5'«FSC<8Vq:ǎb&U&mmp%q5*ړ# ++ˌ~ 1PhʾcnC5&Gh؏ +B0gq2:v`DUffF.v/.@zj"C%TJ +ة00L)=< +eT}vDUFIPJ#, zUɫgO/Z\Zc#,JZPE, ǹU`$ȕ+,Qpݸ D/ZT`dyBzBM,0-)Rˡr +r#=fc!Q>^3Q!#I $SvAThvHΕ&mh;aAކ [mhYpQyM(e-B;ݰm23Ƈ%Aޙ^3z@LJ^ŷLn^o>6BYƭlۆ7?ojk|azKKwyŸ8LӭQ]{-ʵq T;u '>kXՖݧLJ 'G?*.-98)TV43k|9PhI諺q228ŢoBwʳb<>כnooor{|ck199u7)_l& +endstream +endobj + +4943 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.88214 732.5514 126.86732 746.2134] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 231 + /Contents (Section 3.2) +>> +endobj + +4944 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [296.2944 415.4574 307.2944 429.11942] + /Border [0 0 0] + /Dest 4531 0 R + /F 4 + /StructParent 232 + /Contents (44) +>> +endobj + +4945 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [173.63432 94.49341 184.63432 108.155396] + /Border [0 0 0] + /Dest 4532 0 R + /F 4 + /StructParent 233 + /Contents (45) +>> +endobj + +4946 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [191.8974 94.49341 202.8974 108.155396] + /Border [0 0 0] + /Dest 4533 0 R + /F 4 + /StructParent 234 + /Contents (46) +>> +endobj + +4947 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4366 0 R + /f3 4378 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 235 + /Tabs /S + /Parent 1 0 R + /Contents 4948 0 R + /Annots [4943 0 R 4944 0 R 4945 0 R 4946 0 R] +>> +endobj + +4948 0 obj +<< + /Length 5092 + /Filter /FlateDecode +>> +stream +x=k$qWf& 9X7YV{ќ27zvU,ُanEXU7_>>>ӟ辻x?}˛_~z~0x㏻O>o>7~Y'_JuݝvFMod+iÕWoeTOWR?JN^ɽ)?i8T@:ET;O%- ݸ]86Ni9_e&N^7(DdJ7}xA 7gD2 }0zuB%` eQ3eh$#$VCmx˚xzfw9 2RN@l]7 DL{֝ {/`QՂ ӆ9Ls1]QWh{W .;&:7,®}Z +3iq{ț Vh73o =4vsnt/s7<\WiAb7̈]cH'y}<3߀T&a +?l?},RK:mE8V^hW)#)Ny炐HGJWŏDW(WV7lJu<!{@Q;plX90$s2N9i 1ϟs.匎rQzAb/;a>hV%S4)s-Q.> N >^cE=A!z2r:y3xضX1οu&縕(a ꙽v)8KȤe^Wy+fGZ3$xn\ŋ5Aߑwy庝VwrlR9Cia("/ Mh~~GPpy`/K¿sO]0y3QX夶^k1\,(g@m#&HՄ*{bge8ܡRsYer5[&e{:Gf3c`ĺK`3!Šʇ`%*%P%PAA^U-=<}_|!>!NySnl[/z L[$;{Nc(,,PfBu9XexpKyX9/kՄ lMlm-gb6K3 ߃Q%%rNsQvzFI DX +J  1oQaXQ +G$7#:eY5 QX+:QӁdQR)@+/g R^)l7tXl}P3̎f0 ,Lo*ƒ%'v4jb}Yn &wI]ؔ/&*&|+| +gBcmkO}~ZV^hm9n}H&̲RQW.QUA%0zSٞ9\5UlꂋZ(&e+I יڰ _*@Ǻhl@V% 7:NS^O0 +%-oQC'QOr mj(6l/6Mu0PTTBVr!2ˀ7bku+=T-gׁPNbL(L/)$drw a*8R*89f~7.~8a+zZF\sEUG|m%uy~kY^װg>T.hO!JN tI0d-v*-^!-M5,>7v]PpEacpS"M>xiH͚}i꺁CfE%N+t +1cD, &NC\yI3Vc1) I:0hDϧbudQK&**.I޿GfÉ6Da[9Pzmkf#ΚŭnzUNS~Ԩ7[*"2쮻K@BL ǎoHy.rh5"zaiPRRhg / 293yyKf1aS$s 3hAϿHErA~Yܛr腎v;WQ@J qZ5PQZ!n5 + +tP&.6!Qeq5̺V${ Y˴^Ȇ#ҵ@K ? (Lf=i W/e^ߑVzUN2"rw"HٗiP2)It 1ZѤ+C5+, +h?(*U6sNR3tk&+ I +n#AaʭȔ_f8.fILw)A>qkׁJ:8}MŴ(,Ʋdt܏@]خa`~:ȓ*xNզ"?SEz{f-(5ƹ˼&'،*qU),֘9-*g\ \/ѵtߌm#K?C)UE':nq4X'"Mc+סfbo4ԛ $Eb ҠWa hcD!C嫰: +M4[qQǩ9!B=*?t!-p4ވoe(Zn RƖu<.fLBrsŐ%?!hdۉ50w ̧ _nEdO:&XLyjѿ֥CXxdnl9FAƛPakT[=T{W>j ق7KÝ#)"j>RWeu/[?`>뗀 n2 +WԟF_mf'1|+SvEdd/~ől/#󯗤 zTlJvڴ85zadS+b/YC~zn `-fџ/@w|CZZ\WnE)3r(id_i!_6⾅f-[b]U:y᳠B~G2HePJDZ:>Lo \` +@ +-(-9X/bgsWV!o&uX ۲+FF+\%Ko9xe1hE/.y3dE Hi\5CJ(UڵG_ٔ!B, fۧka=;Nh/AP73H=r̈́Kbؤ4pzB$T)*7xKC%@$9._4ZԂS=+f3nNqc*O.wgky]QulҚ^Սx} [e!HkDm՞ɼ=4YlG\ŇAR6MRQq/n]4%_~*uy5g#MBKio6м~KY/1U ;afaxBc +%aٴ mr*97>`'i4r$2K )i?( +/2clj[ +lvV8ӛ:$>Z2U'ݒ& O]\yNS|C6ku؅[Th8td~XE-@L\rrGNBohcej-V/ګ(YUCdEW슫T]<U!ND{g^c $PkOE{186@k)L8t"`5jku9QDQUevӝRH-c4FE%L֨ E3]o3^cLhy[6\ڳ(o_]k8N.@$3-6IG)GԅH̷AR:UR{ŔBƪJD ІMʖ7PaA\1YX#iя6Q| zN&6 7{fSs%F<n>lLj|( ' C19o!sȃl5fvT~D?ȢE?dK?ゴ|`Vh,Eux/t~\ޱ)A "/oqm[k eh+ %bsVgR,Tofu6`(ʎ'*Sv(N<B iS* D6=M[V2}:>UKɿPv8&¥_M{^[[$k2jb#P #(#TJ -LeֳmdZ&5Jf/ 3.=DՁ,>I"յ{~ǻ~oAeۓScc +\S'1FO >ڸ&,4v<^?籌z0nw~\ OwR+CPxv2EE ѧdk?խ_1bA85W2¶Ky)t?Ԟ7W?B)jo5d+]7}ڰ&PۭVޖ>POc^ Kgzpl]B ~Pwӕt2jҧ)>& Ӕf-3JĶwo;,ӟ辻7ǿ0x,aBwN[yn7\R +endstream +endobj + +4949 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.57414 657.4414 86.57414 671.1034] + /Border [0 0 0] + /Dest 4534 0 R + /F 4 + /StructParent 236 + /Contents (47) +>> +endobj + +4950 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [455.87366 453.1284 519.39343 466.7904] + /Border [0 0 0] + /Dest (subsubsec:context-access) + /F 4 + /StructParent 237 + /Contents (Section 4.1.4) +>> +endobj + +4951 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [326.0764 412.1424 337.0764 425.8044] + /Border [0 0 0] + /Dest 4535 0 R + /F 4 + /StructParent 238 + /Contents (48) +>> +endobj + +4952 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [342.5764 412.1424 353.5764 425.8044] + /Border [0 0 0] + /Dest 4536 0 R + /F 4 + /StructParent 239 + /Contents (50) +>> +endobj + +4953 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [456.27435 309.70837 518.84344 323.37042] + /Border [0 0 0] + /Dest 4537 0 R + /F 4 + /StructParent 240 + /Contents (Definition 18) +>> +endobj + +4954 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [150.30486 111.64038 161.30486 125.30243] + /Border [0 0 0] + /Dest 4538 0 R + /F 4 + /StructParent 241 + /Contents (51) +>> +endobj + +4955 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [124.75167 97.97839 135.75166 111.64038] + /Border [0 0 0] + /Dest 4539 0 R + /F 4 + /StructParent 242 + /Contents (52) +>> +endobj + +4956 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4378 0 R + /f2 4354 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 243 + /Tabs /S + /Parent 1 0 R + /Contents 4957 0 R + /Annots [4949 0 R 4950 0 R 4951 0 R 4952 0 R 4953 0 R 4954 0 R 4955 0 R] +>> +endobj + +4957 0 obj +<< + /Length 5393 + /Filter /FlateDecode +>> +stream +x=]s䶑T\"dW]_z ZgYd\uW@wFwм{?{th>i^O/? ܽ~~y?{OO?o>7{V566m~{?/dϧŧ_ܽRy{)RӟJ}Өڝfo[jms\vJ=טp"Ga!/oƱ, )2A>S?iqI,3ic}<7ҺUӉc2&PڊΘ@w<;?IZ#s,6dYrV4z13SUv ew(`a2#hf$vzRF)PIb4D4BPvbg]4/GqbrWWq̻lX5 yρkjpn4 U4,#3:13tvvJVi-e):,ޡN Xmhy0BEw$c;nJC$|n1Bm@D$w9r+2y X)6Lr_UU*u0ː6oV*::%yΠNAe ^&m?+8bn?NÉUns>HFq36K+2V(cN< xoC*p<2i%紘]!֛mN;xN; +=+S]f|M. om-:˕w +F7rܑ[9?1Bيg2uvL+ZZdG5 UsBŢfl ]Lc1HD4R,Q'F ?6J9}TE뷅m6:a+6IڐyQM UD5S$G)92Zhݏϫ>9no3\DPuosxK2A9) Qɔ `86S"EԤѢ~ +X#ЇN ;\ZV H':UL Zrh9h"¼H 1vrLzXN[LX--1 "cP)[6T EI<(/hi:''B2pcYh4 (8bW&)V<;^9UhRvpTny*6evy)nvs]iM%3zb3 H1BK FhV {ύ0[b(Y _I^E,6-W5Ŧq`xP_d +{AS/XfQA>jl)f» Y 7~3>~F֬&+fos}ۡ#iSs,(*0xOլ_SOq0?Ll%,V\f-PN*SX,9e]9iDo7|INض. +_Vk*dQ"AG0SUf04*rA7>)+`B"\j [7`{)tֽ xGJAɠ7RO +Ңj5EM*[?|@ p=x´v 6~~AT1W۝JKh'ͦmW"X7M?;ey٤,~,9%! D8b6`dqx1K}D9]DQ=2٢hQAJ3i焔U%RR['FnxUYT%eJQ)ڡz}#k^ l +*; kZ-l3qje5_$-!#M~zQĴGPv i +-@7(ā긏LUsNuy7hv"\( "*m &'lNt"<ȺZA.[Հ.0T'=,om9/Δ 4 + $U0ڡUHqr&6rB8ݟ( el Pd7PSEq!# dUl_'p q]ځ(7Z *+zi^ȡ[5>K*raL[ʑ6VU(%Ng(zj(иNnvtli9oR< 5b9( fk@三-R '+B_@W 򢗢:֗"AHlX{.*' ϰRDʅ@N 9]:kK?mLCX% =hEU+³(xhR .]i$ *`֨7]+:[P wڊVvv̉@F4:vKŶd/EQ_#JCwrG^\.a%/-[ evP&ykgZ:;<%b, ,4u- Ưĭ Sf%IrUi;t\~pK +T|Ğ-r2^ +J ɺ^NzwFNH*G%AAӎA +qa%+CoۤNyf4Z'ǦFD 8f)$6,e'&z2lZ0K)Sey礌.4%bs{qcy+([xf=Wk6M_tfW]/\udۛInaSa+h.t^- RvVїlͭ=lRo1Ś"{n‹ 銢% )(-ZS*!D?cEQE"YGR56)$ơO7HūB}IjpH^ ^5BC5˧an" r;j(RLܱ`||olw2@JFA `[ׁ)˿lZdIUl 7 +\Gn+VruDk[mՅ6 oh[ٚ% P)@@ga p^-#ũ/\P Akp+tUB%OrY=c3uBvn0WTV8e~(Z5ebbf`#]*L_{M)ځ;tʎ>t0Aۜ~aSZau݋_>i[IcҮf<%UQ([P^YNVEpFg{1zH^x?PI{bշKG$Mlſ~YfaV3)D}k +2SuWM,U9^S܇YV->|rNxb(a^}+A^yK'nUήib!F%_b5qk Z&N%kZVTbKً$DzoWV T;P:JBSD(>➂ts0T@N +ȟ Ě3{KkaoXZțgh>\}ӕU8+kT26+'G%Gk }Fqhu{Nr~8L}idw ?)щotNJ-&V[%}6=>TxtÈ&^#Ed[B*HQoROe6H[@ЛCTu?"E9=M!<ۂ9w,QL-kRys UIC1ˈEoHrT!xqgirnɒ]'%ge__*51L%ӃHK۔BZ۪}) +)mET*4> +endobj + +4959 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [246.03696 494.1144 249.33694 507.7764] + /Border [0 0 0] + /Dest 4540 0 R + /F 4 + /StructParent 245 + /Contents (Footnote 6) +>> +endobj + +4960 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [315.25378 466.7904 326.25378 480.4524] + /Border [0 0 0] + /Dest 4541 0 R + /F 4 + /StructParent 246 + /Contents (53) +>> +endobj + +4961 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [311.1513 350.6944 322.1513 364.3564] + /Border [0 0 0] + /Dest 4496 0 R + /F 4 + /StructParent 247 + /Contents (39) +>> +endobj + +4962 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [140.36269 289.2464 201.18646 302.9084] + /Border [0 0 0] + /Dest (subsubsec:coeff-context) + /F 4 + /StructParent 248 + /Contents (Section 3.2.1) +>> +endobj + +4963 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [486.33368 289.2464 497.33368 302.9084] + /Border [0 0 0] + /Dest 4542 0 R + /F 4 + /StructParent 249 + /Contents (54) +>> +endobj + +4964 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [141.26205 275.5844 152.26205 289.2464] + /Border [0 0 0] + /Dest 4543 0 R + /F 4 + /StructParent 250 + /Contents (55) +>> +endobj + +4965 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [251.55157 261.92242 262.55157 275.5844] + /Border [0 0 0] + /Dest 4544 0 R + /F 4 + /StructParent 251 + /Contents (56) +>> +endobj + +4966 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [447.87784 261.92242 458.87784 275.5844] + /Border [0 0 0] + /Dest 4545 0 R + /F 4 + /StructParent 252 + /Contents (57) +>> +endobj + +4967 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [397.8022 186.81238 408.8022 200.47443] + /Border [0 0 0] + /Dest 4546 0 R + /F 4 + /StructParent 253 + /Contents (58) +>> +endobj + +4968 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [167.3757 173.15039 178.3757 186.81238] + /Border [0 0 0] + /Dest 4547 0 R + /F 4 + /StructParent 254 + /Contents (59) +>> +endobj + +4969 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [400.45898 173.15039 411.45898 186.81238] + /Border [0 0 0] + /Dest 4548 0 R + /F 4 + /StructParent 255 + /Contents (60) +>> +endobj + +4970 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [416.3656 173.15039 427.3656 186.81238] + /Border [0 0 0] + /Dest 4549 0 R + /F 4 + /StructParent 256 + /Contents (61) +>> +endobj + +4971 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [183.44235 125.36438 194.44235 139.02643] + /Border [0 0 0] + /Dest 4550 0 R + /F 4 + /StructParent 257 + /Contents (62) +>> +endobj + +4972 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [79.86614 93.517395 82.56614 104.24536] + /Border [0 0 0] + /Dest 4551 0 R + /F 4 + /StructParent 258 + /Contents (6) +>> +endobj + +4973 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4366 0 R + /f3 4378 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 259 + /Tabs /S + /Parent 1 0 R + /Contents 4974 0 R + /Annots [4958 0 R 4959 0 R 4960 0 R 4961 0 R 4962 0 R 4963 0 R 4964 0 R 4965 0 R 4966 0 R 4967 0 R 4968 0 R 4969 0 R 4970 0 R 4971 0 R 4972 0 R] +>> +endobj + +4974 0 obj +<< + /Length 5950 + /Filter /FlateDecode +>> +stream +x=]q+|T3CH)N(J627IG銎\){f0 {Fwqw_ w~͛O??>??>|tw _|W/.n^|{wՋ] 9`xyxŷNJD]NHu׃>u,Ҝ8 +3HύWo."@oxP ˖)a3W6(b?J9a?1p=<%%:qSr<<3V"O,Nsf,4i-Ԃ-:QKbgbz>I zPӆH] +ki+w]d93%hK ;8@v ur#)-lpF3zF.SNWrsM,gY*QSIӏ ͒Vҭ&<ƂwJ<ų*UR +DW`BJ") n(13XHO|hu\Z܀kbX;_8%En)"QSzPhz{U? V9h/xE9bQQ')=1(/': :m.NC !]7%̩Diu]$<Tf4]#) +Ό_'y͠PJ0Zsi$S6Vfq9 7XiU˳%WfQQiȉƦɞ 8k3c%\?I‰fo*Ҷ) SGnlU ҳ[!Be9{h +'5 "h?]SuQpJt6FKiYzcrrgA]]Av ܀xD5Ama'7< E+SHBx~7# + 5g&LGQXYן^|}vʋ|Rg>ƽzNɳ3M#{1b{=Q5F%7jw9 .Tc>Aef3+ϣai1z,NN7j"l8: tu/@Mrkd 6XnxKH_i-60.Ĩ>7e/YoR/j0Rrr+;wUO|;(`x{d*긐.,T_E$45y5XPJ! f=y}+_F0D淤;| (yǒ9[ +nXQi,S̛Bd~i\ fgqd冲VEc +&vT9\BJ).l>?k48bhd>-X1![p4lP%H0S^rNl;'kH, +1Ў3 ӅF¬SִeLex 5Mgk'u!Ʃ0I'9L~egOt_"NӢp܏xU߳9jz286پd,j!琌̉1\n A87W{ϴ:, $#dvSp#9"C]ƌҖHIG4\rr&ܼcӲ,UaYDxW~SNQ ։eA v F6䵫ksi\KOLұd@m1S=+m rj1Ёaps#–j"i_<]!$|&|.NyDWLҪ0p$lb wі*]q4Q/^lnZooo;])Q)Usm).J%d:?]o-R& +]2'DK>bWy,1$z4 +IAHL̎* Uhج!0DWK蚐d.iJ/d&9D(")0=H,qO:!bLI5aFK#HʡBBpղJ + 0V +!4_%1鳞HOMpX7[r J4atD`JYt#9:"-ֆe\.I]6N1 ՂA5TS*86h-D<3sH`;lhISP9ȧ}P{&8w +ۨ`s[Ņ3y_6 +%iC7f}Y,2` +gq@:FPVE|Uu[i-Et +8vevgs.TJg]fiK +)5.x +(Ԑ͐4 }mxa [c02Tz/%Yj02@\1M'˜Z;I5!2*X+:l +mȻ4U-̨M yW0kUE'^H7JW" +paO" xH n@śi n<]"^HWza9k:4TecqB1ѭ%cB~ZG\OCoXQAh5M : +hg" ~|5H"sOReu;JRc3͉%dQQ [d kҁH v3jy?\>B}%C43#9b}`.˚|DGL%pdU2&yãdY#qepP|)+sߣgNVȼ&N4Z_"GCP,C 3fdLBV[iα{OD]VǕD -!Z YG 6 d-r8f+ SMoS,t!MO NWJ?m +C"ؠb +U`8~7V-UqHG8Tq@kI]PRk(k͖c 1%)v%l4 5-j&fy*BĘ +hR4s,J*TN&,[\]%튛NVrj,-bsXK.o;O'y$L4$,HW'/vn|FH +C5 7P*('V{MqV8*@wJ-I[W3rV6jq.2j*1TR'zŲfUmvpf3e] `9su\őORCdP]*fT[ ^6lydeMkg`@By :.bUm^Wѱ-c:lLP-.6[ܳdWݞKݫI6"6GFK Jx*R^ܨ #E>׹h.B!H53Ic?bĨӷH{Ҋ,;ϔ`|Vv]xZ mxY)lӡw޲W*o>g{b @ش;E#W6isK*N}k\2WQ j50ڀY!]P9e#v1c sZ󲱣#Ja{/j"Ht%k+O$L)ʠRMG[80>Vr>XST2٤9A!I)|N6L;cZkvT@Y +Jh:TB;iQqRƺbɨCW$b~ %BBE!)˰v¡zNXk@PʩS}Q +X2]@ƫXL +Ы=_uaԾ Jɢ 9l~}Y +@m*4s?nz lދrFD:l",Br0,F3HzeढEռlQ+9f2Yc8[ +aNҏ0Q ɤw 4F`|mV^0چԄO Aʂl4 uD!T*DO@yl;#RzķkJvƄlL9uzsV@(Y-ŠuE>pZ AU4S N ;?֕Fc, %f`,{ɨv,Rf)s71~;HЧݵ+"(jkʂiMZGbd`pJ< Y|\n6lG]=62xJ[ul$' +2P-Fj ^>AM\M,mKq)i6#'|l|xSR2ᶥJMqlSd93T5js)hV"2J&/Kcŀhjq9n$KC п|::#?)@>fTBy0gQ}Шv?e}+d5]oYFZA*Q* H\D2C}zF>D:Ig.|+lf+Kep;vEMQJ!R|8"nM0Λ1cJP(kVΡ9(+AQN ZH7$Ʋ$c~8 HDп&~|#h! +Wzz&'MxzRa^󚚅ҠwxZH6;WAҢ&HZHhy`Q-.nh$upB;I=/$|:9RVB!GdǼYGY5YLq>[4ŐP-y*(+1 S$nT`4ӐT.nAΉ F iøxLY#TIdm^Qe޵|H 鳔rvhdl+XyG[S|Ǫ%HZ_ )ƽ"\9]2! + tF["=\uYN#f#(`_2jk3J1ہ&`?>iyB$o%Fӿ6q(b`eI,I~10G.ߟ*beGt.p֟mb2ܐE6q;nMeVmcûsukn= _*wGv%x}!/t! .>?]yҩ92UU8O.E#C+Lr3(vἎ]@d$=?>|tGVUƗ-n2v|MzB +endstream +endobj + +4975 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [243.07924 732.5514 254.07924 746.2134] + /Border [0 0 0] + /Dest 4552 0 R + /F 4 + /StructParent 260 + /Contents (63) +>> +endobj + +4976 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 261 + /Tabs /S + /Parent 1 0 R + /Contents 4977 0 R + /Annots [4975 0 R] +>> +endobj + +4977 0 obj +<< + /Length 4873 + /Filter /FlateDecode +>> +stream +x]~\nNOH) E-|N\4kwbvfE4;v_vwDQIK'w7櫯Κv{s7?5Wnmwfgg/yvvǛ7Ͼ~F6Tk[eoЦ/gWL6ޮϞ^zsvN6J5?׿}?lvvJJwTJ ep=$)5eԪQrU;nl>PMC|gxz@q;LG*FZ@9K:.U}xiYSaڈ;cKW8Ŭ}u"~:?[5怗Ə^\cŊqvg{N气 ۘ"Z`hcMtϨkdn;Ѧ+l솚!} 0ƎDK!|$v8(ww^dC6$^gC\dX57{M2 h3o E~1&ؓE+ +,.UZVueh41 +eB^A;2hv! O1R=TyyFXsM7B$~i+l:/wuV\Z5 )4KG:8aX*9i'v^f<jdNY-C,ta{5 +6V#8#`Bᄌ*QR)!jdJ8nM15( Z8T[ܫ6P`RPA33 WЌv|D/*b]']UfEOqt3t['MF?IJJ( l@Uilti? ]}rvlBY;HQ^[_TA׵ҸKD6Ⱥ٫%E2ꐮR2r):עuF +mXuRYÅ`h0a3Occ;%]I~%F2e&[72Ō3h FE#xz`<^-"{?t. qv4z`qA!!tUKelf~NO EНjIop/Ŋؙ GwdQދs%`9I!2 `Y2BdzUQy)^Ac>Iۉ[w{T܄ɼ Zxf<#*0&K%_8r y@SnT"~Z +kB`G8".#˩Rv/<1Y)Aӊ#.A煹) g%R:8%2Y(_-B#;\ɟ 0f MTMȔA{Rxfʁe}-{ F.tOUA&drōfsuu3( 7 +ig& 0ї +4A(lE~N]2萈VQJ YlqK P{9~Y +:6MY ${ٚgz^\Fx-CWx{\F&8F/Ȫ?8ATH6=`E:6jbUL!d03^Tz_C$HT49aX16J֜R˖vO*cnu*" "74*JH3nT1,pBH4Z, c#{)q΢Ke. #7.sVK%oGҞ*-p2?9[z+oZ'fd\ZK4-J OUS{_~98𗸀97̥&rAj߰uŇ.̥l+,vs U$6S]9Y[KpG#C{pL[ ~JC tg:6sf4 jfnOUW[-.\ +r>ieů5;0:iPd=#G\NWRE+@ֶ͐'iKY0%uZ5'o0l5Nz^p#"\wHqnyUՠ'IOg!￯= +DrBA=O)eZa8'޷)%xi UiyAL<}~rRGN4qiiJiՄ:T;)ًc +l543&"5d|X-D#C\} 3V-بA +g"Do13Yfǀs'wߤ!5ȶ @eZf s +-gL[W0.(u&T9UitsvwDʁv~*Rt?Ptn4m$ƸjY!čV cɛsUr]3VM[`7QQA˸+{~e7#"깚EڿDYy3V"ltwMaS3(X-Pq | ֕#cK[}5A"VM,{#S[+^[>؇j\HIIX +P>Fo%GT̖ͥldߐK%RTRThM@.u>RIrL9 V%Ixc+;[ple6G۪ORڡ =5տ4% "JSĐH~M$,W*s>фKL N6ہ@p@V+4lG`ѝ|b9B`Aխsb4Mk~Q ['L曖Q{sXI45HЧLgC:d geo*/WMm<b%|M9 ,N8,hHj'ֽ E)}2.5J\.,vA_"RvO6nnCym_~7?5W/?|mwfÚjPwS"(w+2 +endstream +endobj + +4978 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [214.10814 643.7794 225.10814 657.4414] + /Border [0 0 0] + /Dest 4553 0 R + /F 4 + /StructParent 262 + /Contents (64) +>> +endobj + +4979 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [448.53702 520.8834 459.53702 534.5454] + /Border [0 0 0] + /Dest 4554 0 R + /F 4 + /StructParent 263 + /Contents (65) +>> +endobj + +4980 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [214.26477 397.9874 225.26477 411.6494] + /Border [0 0 0] + /Dest 4555 0 R + /F 4 + /StructParent 264 + /Contents (66) +>> +endobj + +4981 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [127.68758 213.58142 138.68758 227.24341] + /Border [0 0 0] + /Dest 4556 0 R + /F 4 + /StructParent 265 + /Contents (67) +>> +endobj + +4982 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [297.06018 172.5954 308.06018 186.25739] + /Border [0 0 0] + /Dest 4557 0 R + /F 4 + /StructParent 266 + /Contents (68) +>> +endobj + +4983 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [418.09393 172.5954 429.09393 186.25739] + /Border [0 0 0] + /Dest 4477 0 R + /F 4 + /StructParent 267 + /Contents (21) +>> +endobj + +4984 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [402.94513 158.93341 413.94513 172.5954] + /Border [0 0 0] + /Dest 4558 0 R + /F 4 + /StructParent 268 + /Contents (69) +>> +endobj + +4985 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4384 0 R + /f3 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 269 + /Tabs /S + /Parent 1 0 R + /Contents 4986 0 R + /Annots [4978 0 R 4979 0 R 4980 0 R 4981 0 R 4982 0 R 4983 0 R 4984 0 R] +>> +endobj + +4986 0 obj +<< + /Length 5815 + /Filter /FlateDecode +>> +stream +x][[~_q\mb_ +רRdߒ<׉FN7 +H:Gp8ijv^,Dp8f8x~yf3<}z6 7n]\~opo~|ڼ>{lg/~qv/W=_|_{&>\ 3oЃӁIp n~=ï7/pywvB Ǐ˟Ͼ{\Y o}r3˹ڃR5LM L̤ J?91\B-gj AOWU3ޥ<;3 *h_DȴiM#úɸlcbY2{|EmvD,U=?bJ㙰]0\~u_Vg{4n^z;_!yqP*"GyEV5$, YZIM[pPe## ׿$:sqSvפT +Yډ0LM~{"L׫|w1y"WùJ Ldt.(WBX#dF8-ZxS]6_?a2qPZ* ';)]ȶh3(\5QܤZjTTR- ēux=h,9\ 2mF#dJ" n] &7hI}-׸dΤK#u(N@h?։~F΋Ԩ҅1c7)e#/[Y&5hśvf:\ xUTAκ6ٕ@V-,vy2 ,+BYhb*l4N EFLzck!Hɜ\17߮syW8ųpeOp; R%;Q^0]JJ& GMHJ55!MNGaPRgѲf qXϥR46&&AχLd*OOnu*:#`Md:청`Y0-RsN3!0`%JerİLͧYHov6J+b[/[<.HDE.R-ҷ#ynEy঄eJ-{wy5OvS1\/3_׸LIeZycm>f)#Z/::\#?~b#+Cf ClXj/)U]Y%rժ1=!yNM +"s!6#ZPd6Zu!v&D08B2 +'GcA8슁ݬF +Id[؂qoQ <i?ߓ.0Cwv5@#opѨl40h),u@>:#/ [$kX4F=VYI"GowWZ͡_pI TrMC SjHA<k)GyI%cMv"EfF{Jq]v#噗_"z5g1qʍk47#Zr=AD\ySEe"]s~p;6j!)( 01+#FGd+,+tbE` "-&  DP})ByyJ+x>b`ZdžO+EnW]ڮ0ʀWip?ԡg3^K^7]>WQ#EN5]FjQJS3n O9U(zRٮ@tܩù[a5z 7bh(%UP8xfߜBfт&e ۹K(gmT]jZ C:R5s~EJ*j1w9kX9ő:F(mH=#fΑT,pfxd[5oIvdž5)V0C j2"Mb"&9jH(Q歑\1}|5KərR%/TdE$ſNߊD+!FXlrm*NB t ,jZ+e +:Ҫpq(edmY,@.ߋ#^wa/&K"Ks[v5֓c7Nۨ7#>rZ7z/8URxTk${lt_~q}xhJ />NpE.E<3ib+,@tT-C +y}!9ƍ}duj2n@ &C, U9.0-YD:RiD B۩'oeR#ZkGNJKeZf^7 lمYʏЪZ]ʠYw SΟ?Vi#+7. +kRbZ5X&?29!+)#bK汪6$eBE.rޝk䈽zQKz"=_7:s |g9ߴUtԧ>ʤf{<l{{%LV2mn5;!7\V:nȩVX<,X Wl+D @oKdTz O;UIws^9o%60fJM%|F/#(ɳ-$foa2TFWzĥN!}wVCӯVB3x܉L evlRnBInt=kxuJ&fp/Z8vo6s;c<eEnk.} vX!Eח.̢)Rx`X{1bM!MڹIp M#' ī;괕23'jFfc`pZ.ˎ2c?Ee쩮 Uh'ћNf6Ő͂F"=@Đx9lJ:ڛ(/cK3{jC\1a-rYX@o nur yz!oka2"G(68zrYJ(H+j~jhthI{U гk誇P?pJ~(aQxyHFXYNYW:M4{Q:󰲜qi 8AXHutvr;)ySlE~|9)N +^P91~h*%G6Ee_ +TST2er8}ro oc=NHMoIRbe۸G s#:OR{@j iMK_z*˦ 8ʝ!f 38:8Cj% +n$:FbE95粔ly)\l+w3 +z=$d9\̮UO?LvIci58,i㌣qqBNAlxU9'#+ܧ=tma;%pPo2(pv8`z} +:=pL@&,ځz#TvQ߮[7/r=caICa9Me+1WTYjüHi)l s%ωÔ!HF`c9ߊz ,%]2DCpf*:_d1W"FJWrr0 [ЍHv72NݖxУCl4/+k"8>HEΏOM+߳\ :&Kr㭆9{,c&t<ԕZc*ԜF+3 +V<+C 5x:ha}W(h%H3&۪tz4⡅MaҀ qtƟ0eډBF쑡0B/$%ɻMZA.EYR1$(OzV,(ukľͤ?fΨ=Ѳy&gNImTv]{YEθu3 (`ώ;+vM{^0W_zXܣgis`j@GA6I%`3J>QId }sq]W$*)/@Iř^OcQCT'`^ʦ)})?¾,g/]I+g[k8i!B%XTᅠL8YnŸARXfEA⧤=/da47lPY_9ntq/fVL)Z=2"/!d! ]NZ#Ǎ1=9$ e-!rܶM+O _`^foNM8ϡtt}aR*.¢rL?JR2ޱv*MWc :ӲnfkV*.q-WN?elLޖ%}|&ԢZ`g^5N~ZT*rBh{ST%RIXIf2ܐ A9S}0zS$O]Jbܤ0DH6UHTԀdbN@eh8 V+қn.·oOĦSQr)MPzL)\$4Ac q˅_@ uFp@?@1pD,]emx+9/⛑cp}@( c-J~nNZ(عR+<aMECBlր$$GT&ˍ#ᤛn~2 +(/TPP7'R8r YzX!}4ЇgAȃrNl0&/ +I钰6](0Bo$#"e@j~A>d)/`:@J,Ax1#V8DdV"?k 43%B+#2r~\~_R6OĢ3y&@3"0Mfƴ?"y~twz;0e30|ލ_]n&,cɢ:~m +endstream +endobj + +4987 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 642.7554 114.800316 656.4174] + /Border [0 0 0] + /Dest (sec:preliminary) + /F 4 + /StructParent 270 + /Contents (Section 2) +>> +endobj + +4988 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [348.7979 581.3074 402.13605 594.9694] + /Border [0 0 0] + /Dest (subsec:effects) + /F 4 + /StructParent 271 + /Contents (Section 2.1) +>> +endobj + +4989 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [338.8493 553.9834 349.8493 567.6454] + /Border [0 0 0] + /Dest 4559 0 R + /F 4 + /StructParent 272 + /Contents (70) +>> +endobj + +4990 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [355.08704 553.9834 366.08704 567.6454] + /Border [0 0 0] + /Dest 4560 0 R + /F 4 + /StructParent 273 + /Contents (71) +>> +endobj + +4991 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [419.0758 526.6594 430.0758 540.3214] + /Border [0 0 0] + /Dest 4561 0 R + /F 4 + /StructParent 274 + /Contents (72) +>> +endobj + +4992 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [245.40627 342.2534 256.40625 355.9154] + /Border [0 0 0] + /Dest 4562 0 R + /F 4 + /StructParent 275 + /Contents (73) +>> +endobj + +4993 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [193.23015 219.29541 244.80914 232.9574] + /Border [0 0 0] + /Dest (subsec:revertible-effects) + /F 4 + /StructParent 276 + /Contents (Section 3.1) +>> +endobj + +4994 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [395.6463 198.83337 406.6463 212.49542] + /Border [0 0 0] + /Dest 4563 0 R + /F 4 + /StructParent 277 + /Contents (74) +>> +endobj + +4995 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [360.2746 144.18542 371.2746 157.84741] + /Border [0 0 0] + /Dest 4564 0 R + /F 4 + /StructParent 278 + /Contents (75) +>> +endobj + +4996 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [378.12582 144.18542 389.12582 157.84741] + /Border [0 0 0] + /Dest 4565 0 R + /F 4 + /StructParent 279 + /Contents (76) +>> +endobj + +4997 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.57414 130.52338 86.57414 144.18542] + /Border [0 0 0] + /Dest 4566 0 R + /F 4 + /StructParent 280 + /Contents (77) +>> +endobj + +4998 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 281 + /Tabs /S + /Parent 1 0 R + /Contents 4999 0 R + /Annots [4987 0 R 4988 0 R 4989 0 R 4990 0 R 4991 0 R 4992 0 R 4993 0 R 4994 0 R 4995 0 R 4996 0 R 4997 0 R] +>> +endobj + +4999 0 obj +<< + /Length 5610 + /Filter /FlateDecode +>> +stream +x][d~_qfgMOjݥ8^o"! gR:$t.=/SUPEQ'䓫}s8?ۻ8|o~t~?޽]}i_}Wz;|׿_NvQ]"zll}lq%<>^*~w?H)>+M/Bӡ:bJmCzS;: *+6sSҝs85o-1*SMG_w7Zhٻ?s}c;= 8L{yv4|VDKqZY&EΎzԅ" C5|idZs$)cbˉ S駋8^X;95iuXKm.L$,Ũf*PB&ֲaײ|-)К*䒑w.Tzd4TjőyHEg62B];uS郍L\=_kV.[w`V楼N} )Օ X G:OG?imW ꩵ,X)N(3#^s8'`q81R7(oqJL3R;8lX?,DZYҹۤ[TmCSd:MQ,emNrS2i!1!/;ם6Mak+Wȱ/sNeN+ 8hT\|[m8ћ^l^S ri}P:YFzǾ}Y`Krf (Ϗ]o +&dS1>q|{`=CE83BJ&{$`Owxd 7*(?Q>0l u:+c܉Vjnf +l~]MYn8gBT6Ia? XFd3 Q;⹢yObNX)wY[8VG`#2gS`1"\ *B&T5D6fHЂΜGH$8瞞w.)q++獵mDZyst]۝ҙ6xxzE5Y5cYG-εHn)FBw:Ӿ5(?1Jxg_#ey+Uf5_Tzؘ(W~WD!7""5Bq0~aGդz2T|Y 6Aл-QJכ^&cV򒶕ڷ'hƳ,/o[#vĵA reֽ=102@su Y C>4ȑrgfQժu9:ufCjSTj:g N/"AZ>8m7u/|\ f1uT^()KbS_P? Xe{")df۸5 ++5\wQ vvOF>MHg@E\[*+ѬYm7uⰪ2~]֓t4٘:wXcEf.,- ^',k~TF:^y! +B[F^[܈:NEp!QK*IX*mW7(0vh츮$C`LHV~?әmfl ˚N`998V;mA8 -+T_ -fXuu(pf(D3A->1d!@IGVf3AW)v5=4GaC5-1 +߯hwEwzG3a +%Q Ii`J@&[`MԕֈԑQ!Jf1vlo-JX!,M!GidOPBm؛{68!* 5fhs![a|z.LKwj|ya~/PђT0]q:fS6C H{>5FĚ`J+a/ [l)ʨfy0ExI*̷Q6 +^JI8\ +0(=<WbC_wDV̩[b1䈑ڪPc3dq&692j +n DmXg V-ғ׶p:Rkjlzۛ7A {L3+L DQMIoB @VPtSM4qZބqh귄Ln\fGz 72ZѪXPק໡\1Է%ON lbj2< U3M-Z64D!%EpFI3Mv16n0](U BC˸K59vΕ. g|'&82zpSY(;Jѯ`OvF?sY'l0^B"Pf)2jPԨ'N *J5m^"-: +GڄH+l=s* <:!3m$N 6 W(oؓ\˩bJm$Erl$imLl9$ Q[.SOT0E8GA 4$m$㱐?%M"s E$/xۣS+$& +H8"VG-^2r5r*,j_7`FF&4iZtC|62@7Ln*el@5`?s(h!0 1Qp)gA]C$= 5 +e@jN< N2`ZK<+ ;@nIqֿ`=E[:C`x{eCZE׀0`j`C:* Rhe]*w ^g'0>`Ԍ RJr'IiFrjf.9* +Vz֋qm5>pPȴn^ 9v(1]PfJ{mO +L*ۋii{ı~cϩ8uF%NzE;.e_[E0+j5gA+#Ae \ :̴mmY#(KKѐ5텷֪5>̕eP2<`OJrm+6M@0q0Tíi5+'d4.-Y#Ɬ@}_w>g4 q_U1F٣GP붋Zq tRyDEߊySX;Z$wl-.m$vMM۬2:p!/f,d_k-^,=_[B,·[1 7B!SH&'֊(Md;>6r@wXS3C%O2Q))kk6b/(%ysp[v:o0x5v5-"фzjr4 H;f2,t ߀臄f+o * (p}-M@@ѭR¸Ϫh*z;\e5<8B:«L_8a +ǜW'KI(TY'L[&˜aUtc, 6RT BENR KMA +< B[:@[Y,P`8ysQ754 mwN1 )AxoFv'#\o{mSZӶ<~O򫯤|ŧcmo ޷sZpƮ5Hbx /d֙/ʻluZi*TqdT-'='j'\zOC5)[?D4-!z%t[ Y'MY*c%i*Ľ}!Xb5Gs(..E+]=Gff\ENP*^l;9вg4 34@zaa2_5J"56~$Ekk+8%kxu675v7}.}Mj2KxS + R ]bC#!hB+XNJbPXv  +ѕԖAsZ[kV&g6W儲Yrf 8kUrQeA,9]/t!;03hHюۊkQ)yN.ϯ uYe

> +endobj + +5001 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [288.27457 623.87244 299.27457 637.5344] + /Border [0 0 0] + /Dest 4567 0 R + /F 4 + /StructParent 283 + /Contents (78) +>> +endobj + +5002 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [307.49673 623.87244 318.49673 637.5344] + /Border [0 0 0] + /Dest 4568 0 R + /F 4 + /StructParent 284 + /Contents (79) +>> +endobj + +5003 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [116.09558 582.8864 127.09558 596.5484] + /Border [0 0 0] + /Dest 4569 0 R + /F 4 + /StructParent 285 + /Contents (80) +>> +endobj + +5004 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [467.82358 500.9144 518.84344 514.5764] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 286 + /Contents (Section 3.2) +>> +endobj + +5005 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [277.32913 384.8184 288.32913 398.4804] + /Border [0 0 0] + /Dest 4570 0 R + /F 4 + /StructParent 287 + /Contents (81) +>> +endobj + +5006 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [294.39148 384.8184 305.39148 398.4804] + /Border [0 0 0] + /Dest 4571 0 R + /F 4 + /StructParent 288 + /Contents (82) +>> +endobj + +5007 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [224.39613 193.55042 235.39613 207.2124] + /Border [0 0 0] + /Dest 4572 0 R + /F 4 + /StructParent 289 + /Contents (83) +>> +endobj + +5008 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [240.76514 193.55042 251.76514 207.2124] + /Border [0 0 0] + /Dest 4573 0 R + /F 4 + /StructParent 290 + /Contents (84) +>> +endobj + +5009 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4366 0 R + /f3 4384 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 291 + /Tabs /S + /Parent 1 0 R + /Contents 5010 0 R + /Annots [5000 0 R 5001 0 R 5002 0 R 5003 0 R 5004 0 R 5005 0 R 5006 0 R 5007 0 R 5008 0 R] +>> +endobj + +5010 0 obj +<< + /Length 5477 + /Filter /FlateDecode +>> +stream +x=ْ$7nٞͤCctay֌vV\[< _  ."_>>>i_|w_4_y͡??߽|qg|ͧ7@ӯ?kdݨF6SM^&(imlz#>o>yljގw~凜K-wMtFwҸo5BJ{/A*kQ:$Um:DtrizdQEtRܕK'`jұցVd5~f~5t#Yj]s7Sypg2kа=mm{ +$y_ȄZ?4y͟hX`pP]:j@T/480}< +Q!A76ަ 5`3Ӈ!W(JTN/'s߽((u*{d.45!z3F&3)sR2L4#+*fטA.OChR ԦD*na·f5qP}qQUhK?En٥9biH!M6YG*PnNS3O0S!?7+<)Iz-<4e5d?iϐn)F$F"%ړ)4䃬hՑY U:^ +D(xZj0Dwk2QlyQ͖:NI+bFSk(66:&q>:9[So*3#4L@{@yBX6=DVm5gmDwpZΡjnzgrRb=iY:c^*`j*W J)vK!2={,ƻoE?켋&8=j>|,a,hcXDt{Gr4I/=N ނ{a}Wqh[$m1PXՓuPaXk>ٮynv*V`]XOӾ" (_Ǹ#1<~#=Lծ%^҆IKՑ%9!tWQIb1.6 YC;ʼKuN8/m^ЅMN@U~DJeV 'cE&kE5AڸUKHL#äLX~Ufi +.¯d @dܰ7`o (Mw}XWeЀZפM_3SO n&SU*r(\0kJ:?qiDutB}7}rl5ykQriCN6jt)3-')@E-U3$`iHDWtaMC+ŋ㯏o/> )_q?'+O9tkJɗ\J$90mpйlؐX rSVm GR6uojDϹx)*cĴIդ3ozTćѬ*/'h +_?nvwݡ*d^BEyrq4ɜFYQ^4X׬SWU'JҷF"%F)D9EɥjӥK׋*5J9Պ֚$[$*ƢmBwkUƷbNftjД=?ϑb4Ȁp!P.& .j(_#8f鶸 58/CՆ UWBի(aR׳|df2p + "is?c2 >AOk.>& +-*#dҰ)[a`A] gDխLNɦ5iAy֩oZ}jU7k+eZDPC꺲dkTQ-VJ +r:atTf=NWp?fz[m Kv%VlAj:S!#zD%;m4J +@ב[d@%(0;YTWq9]:5XkD{L߷E6AD!s WN(c, 9]D+#yPg2ɞ+N'smTw :9>wkvx«BZD=~tCZH;i5 zȎ/67xGȾF.kq6][+6` B<)}D$`Ђ"-A g55^\JҔzyFmI8zYώzL:цUS_ӮqF! jv$T11A_O}]bC5ŀeGa:&G,\A +;r<CEuR +:d!-fuֹi'.7nxX6ް^Q -׽1I_jP1*_xgAF.jnb zh"@ЖT[%w K@Xa*f!ȡL%ǜ `\JWHuh*`wJ_SAUI vMPӈTNij)JgC^L}LYCۜ%g)uWsTڊ +ephgW9\1IUhİ(FфH W<=),PM$UcQ7Ұޤ>8+f7ʐs֕v@D_~9 +W')EWad!@|H^ 3/A*PVW􄞓(ҐJZ:Դ[/^vQ$ՠڈ6FVWfD N'VAkZ(fcd>eڎ4gBʖ~gT]Tpڂe>JϑvuLϩZIMJxuRd;8:F'GC9'qF\6?]-$flJ12:"i3[G`HKf U…!WtȞL(*Bw=1,lAwHbDlq·2]?!t./XRa~mfh7PhX)w"E4ȗ8UZ8]'!nL &jCgXņ8>eSVWy+zkZE*VMjƀZTLhi}ˊmɩ,|['-ZT[VW$P=U*TS7J3FӔZ(3 +TT6;h˗EveGi_).a&7JLyJ&IT`Kz l\@ +:?Op|{_|w?t~ix}pǟ.lZ()s*c?ߔ +endstream +endobj + +5011 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [406.6614 657.4414 417.6614 671.1034] + /Border [0 0 0] + /Dest 4532 0 R + /F 4 + /StructParent 292 + /Contents (45) +>> +endobj + +5012 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [313.45062 643.7794 324.45062 657.4414] + /Border [0 0 0] + /Dest 4533 0 R + /F 4 + /StructParent 293 + /Contents (46) +>> +endobj + +5013 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [468.4083 643.7794 519.39343 657.4414] + /Border [0 0 0] + /Dest (subsec:scaling) + /F 4 + /StructParent 294 + /Contents (Section 5.1) +>> +endobj + +5014 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [243.872 602.7934 254.872 616.4554] + /Border [0 0 0] + /Dest 4574 0 R + /F 4 + /StructParent 295 + /Contents (85) +>> +endobj + +5015 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [117.43649 589.1314 128.4365 602.7934] + /Border [0 0 0] + /Dest 4575 0 R + /F 4 + /StructParent 296 + /Contents (86) +>> +endobj + +5016 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [281.27063 589.1314 292.27063 602.7934] + /Border [0 0 0] + /Dest 4576 0 R + /F 4 + /StructParent 297 + /Contents (87) +>> +endobj + +5017 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [508.70145 561.8074 519.7015 575.46936] + /Border [0 0 0] + /Dest 4577 0 R + /F 4 + /StructParent 298 + /Contents (88) +>> +endobj + +5018 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [369.36508 534.4834 380.36508 548.1454] + /Border [0 0 0] + /Dest 4470 0 R + /F 4 + /StructParent 299 + /Contents (14) +>> +endobj + +5019 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [152.61218 493.4974 163.61218 507.1594] + /Border [0 0 0] + /Dest 4523 0 R + /F 4 + /StructParent 300 + /Contents (42) +>> +endobj + +5020 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [204.64723 493.4974 215.64723 507.1594] + /Border [0 0 0] + /Dest 4524 0 R + /F 4 + /StructParent 301 + /Contents (43) +>> +endobj + +5021 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [178.02861 466.1734 229.13483 479.8354] + /Border [0 0 0] + /Dest (subsec:loader-hmr) + /F 4 + /StructParent 302 + /Contents (Section 4.2) +>> +endobj + +5022 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [130.3328 336.4154 141.3328 350.0774] + /Border [0 0 0] + /Dest 4531 0 R + /F 4 + /StructParent 303 + /Contents (44) +>> +endobj + +5023 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [311.4504 322.75342 322.4504 336.4154] + /Border [0 0 0] + /Dest 4578 0 R + /F 4 + /StructParent 304 + /Contents (89) +>> +endobj + +5024 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [339.76633 309.09143 350.76633 322.75342] + /Border [0 0 0] + /Dest 4493 0 R + /F 4 + /StructParent 305 + /Contents (37) +>> +endobj + +5025 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [182.36285 281.7674 193.36285 295.42938] + /Border [0 0 0] + /Dest 4579 0 R + /F 4 + /StructParent 306 + /Contents (90) +>> +endobj + +5026 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [303.63855 281.7674 314.63855 295.42938] + /Border [0 0 0] + /Dest 4580 0 R + /F 4 + /StructParent 307 + /Contents (91) +>> +endobj + +5027 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [143.21643 240.78137 204.36157 254.44342] + /Border [0 0 0] + /Dest (subsubsec:motivation-plugins) + /F 4 + /StructParent 308 + /Contents (Section 1.2.1) +>> +endobj + +5028 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [339.1266 240.78137 350.1266 254.44342] + /Border [0 0 0] + /Dest 4581 0 R + /F 4 + /StructParent 309 + /Contents (92) +>> +endobj + +5029 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4354 0 R + /f2 4366 0 R + /f3 4378 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 310 + /Tabs /S + /Parent 1 0 R + /Contents 5030 0 R + /Annots [5011 0 R 5012 0 R 5013 0 R 5014 0 R 5015 0 R 5016 0 R 5017 0 R 5018 0 R 5019 0 R 5020 0 R 5021 0 R 5022 0 R 5023 0 R 5024 0 R 5025 0 R 5026 0 R 5027 0 R 5028 0 R] +>> +endobj + +5030 0 obj +<< + /Length 6837 + /Filter /FlateDecode +>> +stream +x=r7vQ(mL +Ľv"7)%eebʙvO܀4yhq=88splw?ݼv_|㟾ǻfw?._M;3&Vj(mb<}-Fy/~K#Lm(>}T{\~Gv~Mmi\n9t`-^i'EW ڙGB>fcۜ-v~Zܾl>%QVZKaDꬫ A}ؽ׋/^^'M1H1\PaS#PGp\-xڸjhPnB-.JUТONZxX{| s_5C)~ 0␝B?8C;QpTyݯ]<]uVZ!Hho{zrLV5*s>,{Gbh7߿4(w܁6+;oЌOO;{bHaIp?K_NPx5M78a#-G@/?5.Hj6`[NC%q9wt{Llj[ MS2Oh>H n3jN\f2T]D4cԐu8#9]!#\a +fyσ"x봔pßHE)~+me!X@VI{{,cr + 'ё:_ +-KKK?tRTu.0)s[d<`hLܨ՟ЩhMCQlH*C FUJB4>UPi[&:UHǞ`(qoP/8僎VKH>o}*xY CZ@N:540&o +'"ں0)VZ'_U_:mp6ڤC;ڄ;~(Y*\v~ }J= `ጤ'VUEɼQapN*Ƚ!߸E,? ~?=udL8Ug @^57rY[[H]9{̸Wo +㑰IZ[ Bjψ OZ5Dc˿o}_~?npdu9$4Z C3YǿdvՅ ĨͭX4JA_M[QeNe{<9c3#>>5 a46A%5gDer؆f`a. +CTD:BAwtalZ 6)Z.CmR{-ZTl?F&^|T^G6d7V@@6Rx/U b8L'^P\]-Z5 =Qz) y*jz-_pb<|V9 (> Y$`UM>줉:`̠}/aFblWaPajSħfޥ#tb^(_,~1&- Gv*DRbIFAG-Ʀ8RpɶmׄYrTyHqۀ Ft-;&hf"і<@a[#Zv,Rj=,R^=|J%D6G{e>K)aSCN,'(]+ZDG-oMOT֋ wјpPF &t?""Rɥe 0-5#օUr]iQ^@kJ<]F9oMDIcdOF/ƥ4Cj𾪑xB񏟮}#xb,M1n)jT=V?vg2ef ey\YPzpN|%hR0<u^BtP0r OFX/ jt0 X^ (3txڹzRI7jѹDyK<̳.HS( 24hMV٫Xz&IYo˫ +*ս;[]U7 TdIYDH ܠ bTۑuinAd-T/C&:kO4KmQ0:ּd@JP};pF1XJFFbЃM2K #gcV.6%R<_F( ҥOK—FνB23GRVQ p`J>P"=o6Sj튲Z8 +}%δKh_zh0fYo9|}QQ%Ͱ J%Ca+P2Uch>P//"vozx~1.L›%wGP!Cg7W*HʑAՀ zF2ƙh+PmmBؿ 7"ckDdr1kX#OfBgH8L X]j^4uUƯtDK"fPˢT'E:7oTiJfUX}/BjiT6]BtHj&&;2ҪEv1Yd.[x)5je$EfWцDdkB!̡$ө'Cku]! c*fًa8;?n(dU}5-{P<6RBq# 췪OR5HL,s:%%F/-ΌROjHD* XӕL* n^B;`FfW"z o~tf3nuqQb-JĈN4(mEzlTwpQ>8WWЮ6PjHE(N↠KoI!$hu_\neM:eNA΋Qz+ %WDa2NH'rVHA&H)-¤zL1I]; Wz6cI>ԙ&4JLBS_)۽ sfS3*h$=ŢqTmԥDBCKJ ++OZϰHRO4T V)Y\O] Nyߤ\MAu?nhD׊v :|H_B]Jv0$kh=%p`Kˆ9}v-rH?`o{ڿ"BnK4fW +Wwjpq q܅#%iS!j{U0\y5Er͏, WYn:I(t鯰~ƟN^ܥ"wS)AM=콊)gdۜ1OE[dDyKʸ<ؖi0(\ 2hJ<gpiU<kL=d"T+/mشlSP6j9_x \f6 =Ԑ"^ߊhL6M]Z0QY7lJT/~U"@yV=7F}[jPJVU=Sb{2DQyl),L{k.<2AESϞ]fV+lj|\1ƛE4'2Gj}T}u,'cm*8d&a|rJaw<3= +7%9Iȫ6lL340PRōUlE}I$,m˒*BOO&ɡI[UOCy=l]} ,c羕RojhWB_ $F%%(Jz⡐fůaN J亐/Drd&m|MBP~[a >j %9 dWjiicdAkZK|sxűdt@E"5],gˏ`H'G%5!ՋMv@?2͡"bEYEG66bS=tjShmjۭk3&Bk=mShi$br5 +d:wP1$M:rqI14u@6XGTc47 b17u24|&.'@lRVNEf R\7~4b6)!nB9"j+W2BPZM:eR +s54?eXGW܇\JnR\w0.~eXDk*tN`IKuϜh@ ~"R-rddEo?PZhk *u0(|)K"(>(vvM?T7tJ_7* $|艒M0],<[qxDeIfꌱy!L6 `tC+원Ie1z1'rhdSdYo 0*&z$*ƅvj]6jB,Wrь:aF5ʥ 1dQWhR& =("5i?@lXUO'7)U ޻h:܍r{!mVK H?Z{qY#+$y@|mxVv2՞`_VV{o6_cQ?g3̔-AhG Zs@PKcqNTKғ FP"GC F.@cL:^gDXY0Qi3L(,1oCMĴKvO2`P5lQ0' -WeUY1'tTbX4 z0ۥ,@GA%@S[ !5p52\;Uw*.GsFHIŦF꡴7 +RJ+ ++#,, JR=6Wym pnq-)Kt4BbLJ Z&1NfUNA0ZSQtqx}dxq-2.^f={*jI'/љ#sy6c۩%;nbHFjO.Бa,߯`Y + U%b!m3s٪T>xBs3fMb 3pt,eKm W?j) W3i t͒ځ*f<0yz/L+6ь.g r: x`zB%.?CA4SWRFH+ +TY +۔X'=ղDX X POŸsFuc5Xr$o::H }iPxb l\. y!$M) =7kmeJc8to^Έl9%p ^%b +F?Ntq ,˹ȬVA}II6fu +ib9iemE`K maM~ H=;0U!6V,gR*,c3HXDVh}sFy[1R Z%y;t-۪pV^`הaf &=F芻Syj$ĉ\FʌޓidWB=h.ٌ/ WxVTWtNqnV{4z tKPO5xi(*cHBlFYH E Nz}.|#4 lw{vwwo~}ٻw0oov_{wf?oo~y{{s-9oqC |Q'w +endstream +endobj + +5031 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [489.93527 732.5514 500.93527 746.2134] + /Border [0 0 0] + /Dest 4582 0 R + /F 4 + /StructParent 311 + /Contents (93) +>> +endobj + +5032 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [508.15146 732.5514 519.1514 746.2134] + /Border [0 0 0] + /Dest 4583 0 R + /F 4 + /StructParent 312 + /Contents (94) +>> +endobj + +5033 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [313.10226 718.8894 324.10226 732.5514] + /Border [0 0 0] + /Dest 4584 0 R + /F 4 + /StructParent 313 + /Contents (95) +>> +endobj + +5034 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [491.42682 691.5654 502.42682 705.2274] + /Border [0 0 0] + /Dest 4585 0 R + /F 4 + /StructParent 314 + /Contents (96) +>> +endobj + +5035 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [508.70145 691.5654 519.7015 705.2274] + /Border [0 0 0] + /Dest 4586 0 R + /F 4 + /StructParent 315 + /Contents (97) +>> +endobj + +5036 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [267.74725 677.9034 278.74725 691.5654] + /Border [0 0 0] + /Dest 4587 0 R + /F 4 + /StructParent 316 + /Contents (98) +>> +endobj + +5037 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [294.65292 664.2414 305.65292 677.9034] + /Border [0 0 0] + /Dest 4588 0 R + /F 4 + /StructParent 317 + /Contents (99) +>> +endobj + +5038 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [345.86566 664.2414 351.36566 677.9034] + /Border [0 0 0] + /Dest 4459 0 R + /F 4 + /StructParent 318 + /Contents (4) +>> +endobj + +5039 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [508.70145 664.2414 519.7015 677.9034] + /Border [0 0 0] + /Dest 4543 0 R + /F 4 + /StructParent 319 + /Contents (55) +>> +endobj + +5040 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [409.15625 473.5904 420.15625 487.2524] + /Border [0 0 0] + /Dest 4496 0 R + /F 4 + /StructParent 320 + /Contents (39) +>> +endobj + +5041 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [502.65146 473.5904 519.1514 487.2524] + /Border [0 0 0] + /Dest 4589 0 R + /F 4 + /StructParent 321 + /Contents (100) +>> +endobj + +5042 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [160.42686 377.9564 211.92822 391.6184] + /Border [0 0 0] + /Dest (subsec:reactive-coeffects) + /F 4 + /StructParent 322 + /Contents (Section 3.2) +>> +endobj + +5043 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [404.4731 330.1704 420.9731 343.8324] + /Border [0 0 0] + /Dest 4590 0 R + /F 4 + /StructParent 323 + /Contents (101) +>> +endobj + +5044 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [426.4229 330.1704 442.9229 343.8324] + /Border [0 0 0] + /Dest 4591 0 R + /F 4 + /StructParent 324 + /Contents (102) +>> +endobj + +5045 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [420.18588 302.84637 436.68588 316.50842] + /Border [0 0 0] + /Dest 4591 0 R + /F 4 + /StructParent 325 + /Contents (102) +>> +endobj + +5046 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [423.9508 275.5224 434.9508 289.1844] + /Border [0 0 0] + /Dest 4534 0 R + /F 4 + /StructParent 326 + /Contents (47) +>> +endobj + +5047 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [216.92166 248.19843 269.61102 261.8604] + /Border [0 0 0] + /Dest (subsec:scaling) + /F 4 + /StructParent 327 + /Contents (Section 5.1) +>> +endobj + +5048 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [75.88214 152.56439 135.71114 166.22638] + /Border [0 0 0] + /Dest (subsubsec:lifecycle-asynchrony) + /F 4 + /StructParent 328 + /Contents (Section 3.3.4) +>> +endobj + +5049 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [399.4341 132.10242 415.9341 145.7644] + /Border [0 0 0] + /Dest 4592 0 R + /F 4 + /StructParent 329 + /Contents (103) +>> +endobj + +5050 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [176.83247 118.44043 193.33247 132.10242] + /Border [0 0 0] + /Dest 4593 0 R + /F 4 + /StructParent 330 + /Contents (104) +>> +endobj + +5051 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [198.4779 118.44043 214.9779 132.10242] + /Border [0 0 0] + /Dest 4594 0 R + /F 4 + /StructParent 331 + /Contents (105) +>> +endobj + +5052 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [280.25635 91.116394 296.75635 104.77838] + /Border [0 0 0] + /Dest 4595 0 R + /F 4 + /StructParent 332 + /Contents (106) +>> +endobj + +5053 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4354 0 R + /f1 4360 0 R + /f2 4378 0 R + /f3 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 333 + /Tabs /S + /Parent 1 0 R + /Contents 5054 0 R + /Annots [5031 0 R 5032 0 R 5033 0 R 5034 0 R 5035 0 R 5036 0 R 5037 0 R 5038 0 R 5039 0 R 5040 0 R 5041 0 R 5042 0 R 5043 0 R 5044 0 R 5045 0 R 5046 0 R 5047 0 R 5048 0 R 5049 0 R 5050 0 R 5051 0 R 5052 0 R] +>> +endobj + +5054 0 obj +<< + /Length 6459 + /Filter /FlateDecode +>> +stream +x=ks+FG.T ޏQNUtѕ]W>f]uW3 4 bVb$h4w/.v{w? ~Wv~z8vۻ?l>n.^o^]|0ۛWjnwi^|wLY+t`Ry=ݿOʦbjFݔIɃ\䇟5 h5B0of-_+|~nۋE '!E`\Apn=v0uؖVZj"XU:QQWxLq~'ލ>0\&'=Ahxhq܌O?n0=oT<> Rr~S33aDxqRIf=ƒ1c,b\dS(aFStf,đ-d؇{t\E$:퇄{~!y3nKrI0O˪g^R1灉XxmJ: t/&h+<0)=L䫫5z`AE + |- ELJظ0 DM_WcKż ZʣU% Bm!2; +t`,{apE*o2$ALkO,1#/G(CqTУ<4 %\-UE)h >Jnܔ*{S؇,[fM`v̔gKTys2'cy漎YZc"I?U#[MJu4KgqÂ2&T),?o``@#4-ީ?? m:[)W}x]u 2Cݢ0[ʝ_L=|TeFLK;9B:dDr|,`쀝:QpWiSGG/pɛ T&xKi0]#sΣ0LPL׵(s7 Ic~ڢp%eNxpm:2f ~~u,kAnˊP+8.Y @ǂ&j&r¤|Ӷ61ѢXD,5a_FJ(pPGۭ2hf 8wG܁nh@LYT?[s4)Dz۵`8{~Q]歱{.`j)1j ;eY酾!qhim!M,*F;@7 KW,y&w/ը0}n ݹzɭ9, +*d+q3+pO,(Mꂬ-jLn6,zUCd ^'B9Ac +_ Xa# +Wq\I= ᗥS_Z-HqF5/ -Fꅱ,x'R1C K#o"6Ġ0k90Hk>脼g )٠e{p3@ ZDw}AoL9BG%0LbAЁi&4W&eOAeĩ2Ƕňgs_}X>.݅P<(hH\"HE~=0FmHX.#j[Ox#RtN +-EP,1WcoMEJSW5nd]Wg)9neЩh+}m3mˑ!a I|SyQX{WJ1|wu4$C1cN'6sXWWC8LyYe,Ha bfxs'uT?Z{[ܘM)+01Cm ^:4G=fFki2أZ Mۋh*v*.pzDig)#3缸vL +?KJ? + +%Rl'ݲHn6oS#JAu#rq͖:rVXϢÃ}o2%/'u8JO?HP-Mߡewʲh"~Eq +tBf8ιHEN~;JWDd]Պ/cƦiBwi١T̹P ү,4`*HFh\R0m97c:(mWҟL01"{23m +1mK4 [ +RTV2goBOu8!: Z<7~ J؉vP51d}>=a2ȋ9p&Dsw7lVy~Z8)$%Z1RM'X/J_Eg +ɦWt43RcwJ.D-zL83@@Ev`RKOP5; +bp܌HmF-8i矋D:D<Z>ZP]Z[ͼ7wO3[Зg)u˴y .@1@EIW#kW!!> Diӌ@ rҁ(Hg`B +G8W@6%єut9 iU&RGU_ryc9F5:BhͥM|z,Ha*uJ3D:bՐfnBpΞOpH#mLFuEB=;+|څ+xY0elY%tvpr=قF:!YX*A3ٲwY Η 5iI,ƒGw#GN 8;I`M /z~jWa$&eq?&iѩsXd/0HEzDmT+f0$!0؟M 6l:ͺ^BfQ8eQ66Yxb mqi%k6sꣂ" ΥiU, dFI- cxVGL +`MA6֊z +>萚d PQ 1D5^ -~GrSR $jS18jchusk=C8͓A=\M٢4?fv(YYK +^Ը>JX{ϟ\3JBa´Ԣw.#*7!LXQCcUD 2gRsZس6ۻ abƆ~ykK.eƪФ<4N\$"KüMW年M,f&aNU3j˫xІO,ɺB1{'jbS0DV2hԞWHHB:ҵCyq5;iOhGG`?OcFYubp ՄɦdI0iHgA+|ݞ.1Rzx͜x#ZD]EDsٕ#+-Y-<U:R1TN+.I~2z!iW +) ] %Tr6?W~1g W ;܅LH]l;˼ZbK,EZ45'~UT˧.?)4 {]~r|ƛ at$l | eڹe<'j^`UʆV׼$dm7|c>A,}T-8|zqy4v cR2oy*hղqYG`UTgWO|1Pᯏ ߉zTFnmxMլָ?CQ{%$#l6ˉ «L%#YV᫵̓oz1;IJ'Y@\b(`LhfZHΗGvɖG9Gx4~]5 %d3fW]fO)ͷL +dw02XziPml?2.I*>_GVoC-m@K4:Zi< +_Z?s=O7_~n?~w7?n=퇏B`AsV +endstream +endobj + +5055 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [237.94225 435.3644 299.514 449.0264] + /Border [0 0 0] + /Dest (subsubsec:motivation-harnesses) + /F 4 + /StructParent 334 + /Contents (Section 1.2.2) +>> +endobj + +5056 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 281.5974 85.78214 295.2594] + /Border [0 0 0] + /Dest 4596 0 R + /F 4 + /StructParent 335 + /Contents ([1]) +>> +endobj + +5057 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [413.16415 267.93542 523.01013 281.5974] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/361598.361623) + >> + /F 4 + /StructParent 336 + /Contents (https://doi.org/10.1145/361598.361623) +>> +endobj + +5058 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 247.47339 85.78214 261.13538] + /Border [0 0 0] + /Dest 4597 0 R + /F 4 + /StructParent 337 + /Contents ([2]) +>> +endobj + +5059 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [169.31615 233.8114 290.16214 247.47339] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1053331.1053345) + >> + /F 4 + /StructParent 338 + /Contents (https://doi.org/10.1145/1053331.1053345) +>> +endobj + +5060 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 213.34943 85.78214 227.01141] + /Border [0 0 0] + /Dest 4598 0 R + /F 4 + /StructParent 339 + /Contents ([3]) +>> +endobj + +5061 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [442.35815 199.68738 521.95416 213.34943] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/2890784) + >> + /F 4 + /StructParent 340 + /Contents (https://doi.org/10.1145/2890784) +>> +endobj + +5062 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 179.2254 85.78214 192.88739] + /Border [0 0 0] + /Dest 4599 0 R + /F 4 + /StructParent 341 + /Contents ([4]) +>> +endobj + +5063 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 158.76343 85.78214 172.42542] + /Border [0 0 0] + /Dest 4600 0 R + /F 4 + /StructParent 342 + /Contents ([5]) +>> +endobj + +5064 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [275.27914 117.777405 385.12515 131.43939] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/378795.378858) + >> + /F 4 + /StructParent 343 + /Contents (https://doi.org/10.1145/378795.378858) +>> +endobj + +5065 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 97.31543 85.78214 110.97742] + /Border [0 0 0] + /Dest 4601 0 R + /F 4 + /StructParent 344 + /Contents ([6]) +>> +endobj + +5066 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4366 0 R + /f1 4360 0 R + /f2 4354 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 345 + /Tabs /S + /Parent 1 0 R + /Contents 5067 0 R + /Annots [5055 0 R 5056 0 R 5057 0 R 5058 0 R 5059 0 R 5060 0 R 5061 0 R 5062 0 R 5063 0 R 5064 0 R 5065 0 R] +>> +endobj + +5067 0 obj +<< + /Length 5044 + /Filter /FlateDecode +>> +stream +x=[w$&0l,n,,@<&f3iuKRI}<|/ϴ.RT~tzx{j>i_N{?}???4|f폯o~|꓋Ooh_~W cB4͕hgB7NwLV7?]\_ <]\?Fqtqο OoRaw߄;|ӛqcYЦHQCsrjKι?T?9s H6#zFDӃ(;__b++| +_xІqι:?Fx&a?rY7`Pd{6F6BūaDA2Q` mw@7FN%,I 3n:ņK6N(:I1=<<'r%1>4rE|Ƶ?e4uIt;X^08eĉhu6_NlŸRrf/ᕶr@/iւ1]}#IE/s-C+י- 86pKRf7 +l|f*+'-d3)'m΃m"BA+."ZUKSlj[ش9EB̎ 3 ,"AȀh fy(ki+YiU5X0F?zǖ1m.S[#XJ3icޡEE" cTO[ _d_cBjPj5wlx#3A9d]>`N߼\4apUЖbH^zr[0F%)$d`zTKQafLP3O:[Lgv[̮uVhPZ +xew\HiI!찎# rJ! Gj3XYa!o|Zk]l3G;/tIikyE J,X׶x(sj[-ghij0D鞎CT%4>tcGvLkr{Ν3& n!J/=d;nCǒʶL-Ղ(Tc҂Mh^q1 8ZN{F=;`Y i;;نB +Χ|*c:\}'/VEޣ[u J,ˀ4&;8vP +mgfM0y)ɸ[#]ەmʼnҺ >!$ύ ꁧ>$<Ocɇ}BHX}[n7$*$Bs`, VBB <]Z)wV pi^!.t{^`'lna3c`#0i^[~Eovd8J41ݐZNF _iG(ҝ[˄dC!0X%ižJ^Zߕs{%%D yM}Fij֠ǑO7u wxxt`>2ۊ`bѲnI1b.+l飝dFl] nA6EL.f@\ԷW ͯ?D򹆐1[}]"Ē+Zԙdl0$}q]DfbED^[fnzܡi|[ཬO/tL4Q88V KJ4@MT! E5C + +)EVm:R4v[ZôL+-4pA߮ǦmLk5A aq`;D_J@poXslJX4CK@9*R\!"dPe MVzVC*R=kTZh˯<%j!%MFLMJuOu@BvgYr9^],J``zKM3;}||_Kf9jyӼ2{AQ'&]u1Mh)ҙ&O? +Հ"yV0w̯M/)bp4)nO*T2yLxMp0a ):4_FW"?;p&SUiFvdt}N~j88W$Ʈ=6Vb^l&.0@62eժP$I&'6?!ݚ^QT>:-M28f}7ۻQ7T-9OK;^eрyl ;̀,t!gm3g!Irx+9b>|kjrDu$父yκ'9 u$[ (8;ٳfWkWj.1ҙeZl3eI6uQd|4T t:\ESB2}ἎLj];,1Pv#^/jfTj"z59>-VHƜ6}Nɾvhذ҂ /?,<鑨u˔9ve t$_&&!d2K% Ht4 s]"ܔ`e5ǩ]f=ޗy + ]LH3\`"x3WR^8/yO?>#1ܡ2*qY)92㧧T3GOȞgR9xy{bטS +Ŭ*0TP&]PR'1^@#&<58 ]=鐑&5?xIȩȔ6 +YiZ6j^)pXWz>?Ɔbv#R\-Hӓi8]FnDFYk \l3n̗/60 1-4hR.m;&UUFIL2`i+---vBPwlK: YybiI9x"E;)ZeZ` W<Ƿ k0a;-2 "-CWȎ3ae/7J.eimJS |/WH$ d ] PDA` 3Kն'UMlxBݔ/ž`pFO5ci뢍@_ v|A,D61Y|͂:Km$ޓUYW0\2'6.qHS:kVԐcꈎ3eealU&R2oO_3 +#hOWճA .@WMфb0/5Z-R,8!ZɤWҊ +U4{L\yMU)DyIxfa[B@hp Ħ}bDwzFC|k1?uP#ʛc\S|?Gu4Ʈ +/܉J҄؋HOjs"r5'i҂5Sc -FX2JKXo{uV[Ŷ(l +klm/B  U&t 6TL;_KÁPJD%a#jZidJGO/YiHfjThy4;=P:_-Ү`Nr\ ulXqюU3flg]{I +voB@XtB0d1҂)D Sdذw#GcX *_:,U8>[;mWr)ջG2X. Bi'w~{hcF5ƀ4='J0lHƌ\D3ZTA:&[kTbn)ʐ6HLQ H e[~RclC`3+j(7g"@ޒ#Ť Lτ&fޑy㐜\nq Hl\]ʲ/p`<1WXv9 als]w^7h2c+.{0!MoAذ*#3#Li&nnf`<# =qt]{2/"6:j|ǤmZU/Iy͗C'Q@<|);DɿϞż4ѥoQ.v;k^q +lj +6&]smj,!Okuݕ'F|tzx{No?4^tzrwgoޜn_x{zI&k#X'YOH_w +endstream +endobj + +5068 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 746.2134 85.78214 759.87537] + /Border [0 0 0] + /Dest 4602 0 R + /F 4 + /StructParent 346 + /Contents ([7]) +>> +endobj + +5069 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [183.08813 732.5514 419.91815 746.2134] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://openai.com/index/harness-engineering/) + >> + /F 4 + /StructParent 347 + /Contents (https://openai.com/index/harness-engineering/) +>> +endobj + +5070 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 712.0894 85.78214 725.7514] + /Border [0 0 0] + /Dest 4602 0 R + /F 4 + /StructParent 348 + /Contents ([8]) +>> +endobj + +5071 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [242.77809 698.42737 526.4241 712.0894] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://www.anthropic.com/engineering/harness-design-long-running-apps) + >> + /F 4 + /StructParent 349 + /Contents (https://www.anthropic.com/engineering/harness-design-long-running-apps) +>> +endobj + +5072 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 684.7654 195.93614 698.42737] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://www.anthropic.com/engineering/harness-design-long-running-apps) + >> + /F 4 + /StructParent 350 + /Contents (https://www.anthropic.com/engineering/harness-design-long-running-apps) +>> +endobj + +5073 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 664.3034 85.78214 677.9654] + /Border [0 0 0] + /Dest 4602 0 R + /F 4 + /StructParent 351 + /Contents ([9]) +>> +endobj + +5074 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [387.49014 650.6414 521.23914 664.3034] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/s11704-024-40231-1) + >> + /F 4 + /StructParent 352 + /Contents (https://doi.org/10.1007/s11704-024-40231-1) +>> +endobj + +5075 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 630.1794 91.28214 643.84143] + /Border [0 0 0] + /Dest 4603 0 R + /F 4 + /StructParent 353 + /Contents ([10]) +>> +endobj + +5076 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 616.5174 204.91214 630.1794] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3704435) + >> + /F 4 + /StructParent 354 + /Contents (https://doi.org/10.1145/3704435) +>> +endobj + +5077 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 596.0554 91.28214 609.7174] + /Border [0 0 0] + /Dest 4604 0 R + /F 4 + /StructParent 355 + /Contents ([11]) +>> +endobj + +5078 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 561.9314 91.28214 575.5934] + /Border [0 0 0] + /Dest 4605 0 R + /F 4 + /StructParent 356 + /Contents ([12]) +>> +endobj + +5079 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [355.66714 534.6074 467.96616 548.2694] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.24963/ijcai.2024/890) + >> + /F 4 + /StructParent 357 + /Contents (https://doi.org/10.24963/ijcai.2024/890) +>> +endobj + +5080 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 514.1454 91.28214 527.8074] + /Border [0 0 0] + /Dest 4606 0 R + /F 4 + /StructParent 358 + /Contents ([13]) +>> +endobj + +5081 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 466.3594 91.28214 480.0214] + /Border [0 0 0] + /Dest 4607 0 R + /F 4 + /StructParent 359 + /Contents ([14]) +>> +endobj + +5082 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 432.2354 91.28214 445.8974] + /Border [0 0 0] + /Dest 4608 0 R + /F 4 + /StructParent 360 + /Contents ([15]) +>> +endobj + +5083 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [233.44614 418.5734 379.90015 432.2354] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/0890-5401(91)90052-4) + >> + /F 4 + /StructParent 361 + /Contents (https://doi.org/10.1016/0890-5401(91)90052-4) +>> +endobj + +5084 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 398.1114 91.28214 411.7734] + /Border [0 0 0] + /Dest 4608 0 R + /F 4 + /StructParent 362 + /Contents ([16]) +>> +endobj + +5085 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 350.3254 91.28214 363.9874] + /Border [0 0 0] + /Dest 4609 0 R + /F 4 + /StructParent 363 + /Contents ([17]) +>> +endobj + +5086 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [169.31615 309.33942 313.06415 323.0014] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/978-3-642-39212-2_35) + >> + /F 4 + /StructParent 364 + /Contents (https://doi.org/10.1007/978-3-642-39212-2_35) +>> +endobj + +5087 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 288.87738 91.28214 302.53943] + /Border [0 0 0] + /Dest 4609 0 R + /F 4 + /StructParent 365 + /Contents ([18]) +>> +endobj + +5088 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [310.53415 247.89142 431.38013 261.5534] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/2951913.2951939) + >> + /F 4 + /StructParent 366 + /Contents (https://doi.org/10.1145/2951913.2951939) +>> +endobj + +5089 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 227.42938 91.28214 241.09143] + /Border [0 0 0] + /Dest 4610 0 R + /F 4 + /StructParent 367 + /Contents ([19]) +>> +endobj + +5090 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [264.92813 213.7674 344.52414 227.42938] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.2307/2266170) + >> + /F 4 + /StructParent 368 + /Contents (https://doi.org/10.2307/2266170) +>> +endobj + +5091 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 193.30542 91.28214 206.9674] + /Border [0 0 0] + /Dest 4610 0 R + /F 4 + /StructParent 369 + /Contents ([20]) +>> +endobj + +5092 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 172.84338 91.28214 186.50537] + /Border [0 0 0] + /Dest 4611 0 R + /F 4 + /StructParent 370 + /Contents ([21]) +>> +endobj + +5093 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 131.85742 224.16214 145.51941] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/73560.73564) + >> + /F 4 + /StructParent 371 + /Contents (https://doi.org/10.1145/73560.73564) +>> +endobj + +5094 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 111.395386 91.28214 125.05737] + /Border [0 0 0] + /Dest 4612 0 R + /F 4 + /StructParent 372 + /Contents ([22]) +>> +endobj + +5095 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 373 + /Tabs /S + /Parent 1 0 R + /Contents 5096 0 R + /Annots [5068 0 R 5069 0 R 5070 0 R 5071 0 R 5072 0 R 5073 0 R 5074 0 R 5075 0 R 5076 0 R 5077 0 R 5078 0 R 5079 0 R 5080 0 R 5081 0 R 5082 0 R 5083 0 R 5084 0 R 5085 0 R 5086 0 R 5087 0 R 5088 0 R 5089 0 R 5090 0 R 5091 0 R 5092 0 R 5093 0 R 5094 0 R] +>> +endobj + +5096 0 obj +<< + /Length 5301 + /Filter /FlateDecode +>> +stream +x][s~hR*aJٵTbKL?Ph+9̸* ppf7}rq98}ڧn/ӧ'MspO?S;_Ç/N^~qro/ۆO~"hgB7N{&U_ONxsj77'׼9+w=o}Ԝ8!!DpżBo@J}>.82+ngG*C|}݇롖5O94bjD㋹Y>8sk?=;7k"YHo\ʘ=J5a?R.xi8 {p&NKa -ȋ/WK6.6rť%=ކIsj̹ X|QIwqz۳Y;]#F!)WiUcNɓzQUƝ2gg[PM +.+f%paPmF3$å3Fajd]Bj0aZ; ϱZp0A +|VࢮT4}g:)T y&FrGI"&H瘱Nl0IB~-j/Pe5QɁܭfڹHFG/PZ]9kf4 xn"PU߀!I}{{NVj&h}XfsK+,/Y]M}ɘǍ[ 6z%'fAPo6R(-) +AaF;bK~$,U2l.Z`e&V_zӄap _غђXIX:L K0I/Z6@ +zn$y":z@[T|. .(jTgFvAs<ډr(L43/WP!  }^~gS.&ի4 L۸͝VaCCVSmN0罐̶',*`/-z\q+-j.kQqR`@C +V]`nYfÍPWnMg1W([$pXA_` +Hs]-6 O8P(3f9} !s> >- [ST ZU[qNpX'?ȫP.T*DHz*XSuk FcOrVXY`ѻy:Ab:Aw 019}((e5L4]czg 7h cC2G,A cb}+xGq*(]E\~ FE0)֊UQz!1 ٴXu7ovM2:˱˭֕02)^.K%C^#l$Z@EFRYѽ\$'ADh a.1)tU[4;<2;QCa1AQ~9-7 zZc}rHPWZ3#;5C^)yЯ!%фݵWw:܃/B f{AU q$N6I6+!'Ъ,2tF:+f%B_H^_ΰֶZl+ߪ Sz`HLx@zYwx!eɂ}TJ "sE/T]F樓l7/[PnڂŶO~%??qY5'~%a%ܮOR2<>͈<7bI,0/$ xLWW|w#'P`Z"~cZ>`@t~wΙO`Ǥ!m%xSmFrlFUDɘ$SEzqBhÅwFJ@\IYxT~ᤦ:fx$D&rg'59>.LSzCgP` +y딛&EgkRnM¤'fm+|i\_Ը6u&dRorK UBh%Lڬ} j=a"#E/-e"mU&HYY$ 'EħkPG_I@ Ɛ}Gb]w (8mUqZ;t0p7$Z +h i{2|œ՚ױr Β%HE +Rf5hA: 3khGh"uTwOr }:; \G)bv-Jn/py?7?>x8|~wo>~<~:￿C(^2\0k +#7, +endstream +endobj + +5097 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 746.2134 91.28214 759.87537] + /Border [0 0 0] + /Dest 4613 0 R + /F 4 + /StructParent 374 + /Contents ([23]) +>> +endobj + +5098 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [245.49113 718.8894 369.07614 732.5514] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/3-540-45931-6_24) + >> + /F 4 + /StructParent 375 + /Contents (https://doi.org/10.1007/3-540-45931-6_24) +>> +endobj + +5099 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 698.42737 91.28214 712.0894] + /Border [0 0 0] + /Dest 4614 0 R + /F 4 + /StructParent 376 + /Contents ([24]) +>> +endobj + +5100 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 671.1034 263.56415 684.7654] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/978-3-642-00590-9_7) + >> + /F 4 + /StructParent 377 + /Contents (https://doi.org/10.1007/978-3-642-00590-9_7) +>> +endobj + +5101 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 650.6414 91.28214 664.3034] + /Border [0 0 0] + /Dest 4615 0 R + /F 4 + /StructParent 378 + /Contents ([25]) +>> +endobj + +5102 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [483.31345 636.9794 524.4094 650.6414] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.entcs.2015.12.003) + >> + /F 4 + /StructParent 379 + /Contents (https://doi.org/10.1016/j.entcs.2015.12.003) +>> +endobj + +5103 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 623.3174 191.81114 636.9794] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.entcs.2015.12.003) + >> + /F 4 + /StructParent 380 + /Contents (https://doi.org/10.1016/j.entcs.2015.12.003) +>> +endobj + +5104 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 602.8554 91.28214 616.5174] + /Border [0 0 0] + /Dest 4616 0 R + /F 4 + /StructParent 381 + /Contents ([26]) +>> +endobj + +5105 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [483.31345 589.1934 524.4094 602.8554] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.4204/eptcs.153.8) + >> + /F 4 + /StructParent 382 + /Contents (https://doi.org/10.4204/eptcs.153.8) +>> +endobj + +5106 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 575.5314 156.22614 589.1934] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.4204/eptcs.153.8) + >> + /F 4 + /StructParent 383 + /Contents (https://doi.org/10.4204/eptcs.153.8) +>> +endobj + +5107 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 555.0694 91.28214 568.73145] + /Border [0 0 0] + /Dest 4616 0 R + /F 4 + /StructParent 384 + /Contents ([27]) +>> +endobj + +5108 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 514.0834 224.77814 527.74536] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3009837.3009872) + >> + /F 4 + /StructParent 385 + /Contents (https://doi.org/10.1145/3009837.3009872) +>> +endobj + +5109 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 493.6214 91.28214 507.2834] + /Border [0 0 0] + /Dest 4617 0 R + /F 4 + /StructParent 386 + /Contents ([28]) +>> +endobj + +5110 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 466.2974 235.48114 479.9594] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.jlamp.2014.02.001) + >> + /F 4 + /StructParent 387 + /Contents (https://doi.org/10.1016/j.jlamp.2014.02.001) +>> +endobj + +5111 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 445.8354 91.28214 459.4974] + /Border [0 0 0] + /Dest 4618 0 R + /F 4 + /StructParent 388 + /Contents ([29]) +>> +endobj + +5112 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [287.61014 432.1734 367.20615 445.8354] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3408995) + >> + /F 4 + /StructParent 389 + /Contents (https://doi.org/10.1145/3408995) +>> +endobj + +5113 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 411.7114 91.28214 425.3734] + /Border [0 0 0] + /Dest 4619 0 R + /F 4 + /StructParent 390 + /Contents ([30]) +>> +endobj + +5114 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [275.27914 370.7254 396.12515 384.3874] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/2628136.2628160) + >> + /F 4 + /StructParent 391 + /Contents (https://doi.org/10.1145/2628136.2628160) +>> +endobj + +5115 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 350.2634 91.28214 363.9254] + /Border [0 0 0] + /Dest 4620 0 R + /F 4 + /StructParent 392 + /Contents ([31]) +>> +endobj + +5116 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [394.88446 336.6014 523.85944 350.2634] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.entcs.2008.05.029) + >> + /F 4 + /StructParent 393 + /Contents (https://doi.org/10.1016/j.entcs.2008.05.029) +>> +endobj + +5117 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 316.1394 91.28214 329.8014] + /Border [0 0 0] + /Dest 4621 0 R + /F 4 + /StructParent 394 + /Contents ([32]) +>> +endobj + +5118 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 275.15338 247.68015 288.81543] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/978-3-642-54833-8_19) + >> + /F 4 + /StructParent 395 + /Contents (https://doi.org/10.1007/978-3-642-54833-8_19) +>> +endobj + +5119 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 254.6914 91.28214 268.3534] + /Border [0 0 0] + /Dest 4622 0 R + /F 4 + /StructParent 396 + /Contents ([33]) +>> +endobj + +5120 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 227.36737 224.77814 241.02942] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1932681.1863568) + >> + /F 4 + /StructParent 397 + /Contents (https://doi.org/10.1145/1932681.1863568) +>> +endobj + +5121 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 206.9054 91.28214 220.56738] + /Border [0 0 0] + /Dest 4623 0 R + /F 4 + /StructParent 398 + /Contents ([34]) +>> +endobj + +5122 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [215.53815 165.91937 325.38416 179.58142] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/292540.292555) + >> + /F 4 + /StructParent 399 + /Contents (https://doi.org/10.1145/292540.292555) +>> +endobj + +5123 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 145.4574 91.28214 159.11938] + /Border [0 0 0] + /Dest 4623 0 R + /F 4 + /StructParent 400 + /Contents ([35]) +>> +endobj + +5124 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [250.87015 131.79541 360.71616 145.4574] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/360051.360056) + >> + /F 4 + /StructParent 401 + /Contents (https://doi.org/10.1145/360051.360056) +>> +endobj + +5125 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 111.333374 91.28214 124.99542] + /Border [0 0 0] + /Dest 4624 0 R + /F 4 + /StructParent 402 + /Contents ([36]) +>> +endobj + +5126 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [332.40213 97.67139 411.99814 111.333374] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3498692) + >> + /F 4 + /StructParent 403 + /Contents (https://doi.org/10.1145/3498692) +>> +endobj + +5127 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 404 + /Tabs /S + /Parent 1 0 R + /Contents 5128 0 R + /Annots [5097 0 R 5098 0 R 5099 0 R 5100 0 R 5101 0 R 5102 0 R 5103 0 R 5104 0 R 5105 0 R 5106 0 R 5107 0 R 5108 0 R 5109 0 R 5110 0 R 5111 0 R 5112 0 R 5113 0 R 5114 0 R 5115 0 R 5116 0 R 5117 0 R 5118 0 R 5119 0 R 5120 0 R 5121 0 R 5122 0 R 5123 0 R 5124 0 R 5125 0 R 5126 0 R] +>> +endobj + +5128 0 obj +<< + /Length 5218 + /Filter /FlateDecode +>> +stream +x]r7}WCV-и k$Kk+l/c)6-/UUK5 ]kv2 kn;{/Oã~n۫oG~yڿ;{{嫳^:XWeG_ucJz쌴^v7mohw3fwvwgwc|2[JßS]Wgo1A +bgr&σCta-ЇO6SR1蘕?U$\'6iө CktSMggDo?O7=uS'&;='$T!7["&i Y׶Bc檖ޥ{"ms'Vaovt6'V^լ]=7i ?ϔ1R>q](I@"E0ϓ$i L{k07c-֪h@pw@ȦP̼%=ih` ;[Ż혙mйwSD~Ԑlù aAWl,tY<LCJF>Lfܼ|GbۯV"(ML91dKzq.oo=ŗϦ ft=1X]8#vԹ[+nBMgAi>g|3|{x,4 D\*"-c]k>Ea̽z<<ο=qY~Qp[@jFF<8d6iPF+i:MVXkX[-(,nDȪض&tPu|co]A4"t|}1|,}lܧPZYbX3F\L<%zApZ4Ю_s_G"dzSm1J<]dQvb,m#2Jb2VMʄ7 bT6#6(w(?/K`'* Lm:,~5u W9'B4XLWF)\7s0Ki`$a j0`jo`5}2>L `+с?)ӜDiTLp.39 Z땀}a c-cxfӱi8an#((9LIWF:tw!R Ay̜Ͱ GF\': ,[4KSJ.Japa&Y "Dqz|czh2[0j2&۱]('63jojm<s8g|Y$yG, ^.. `R@`KU@ƘmUows^\c߱ DSw@=lȁ)Ƀbo1ŗYFzXSg&YI{U𷶉Z < W̘]@2EVX |=(<6MgI0XPtȯ: uZfHH \~āo*QA!,*Ng֚uJ˙iK_-A)Y Nʀ҄6 + JZ):TcQ#7 +JFU3\OAWXYn:L +!>Xy xz9i?F=SysMQbkk!:]ttʞ-8QqPKEuZ$R40>FW3 w&'>QaoG+P{$5B)*$Ykfk:L("L4n +/Uou`Q&B'ى +k,nBL{8q)wA>MXEPyS ^V3@'!M_\$1{ o|t}?0Rb̒QIۙ@gt,j-:fi<-X,q@n&ә+2CKbLϚ:]IפD˵2J]oVs.Q4L>%+6`☹XcKWK]*SD/hʞj[2#[6BL:9}ES W%P4=L(\VV4ED~'PÅ@TIb"u*IQ*NQ.> ӕ~0ŭēr_,*ύD<$,56k?0K#;R["8wO.aBEg8oE:"8 򩃮}ʞz-&Γ:Z`2Z%0nôηr01 e 8%+Z:9DRȬ`Bר̂x(Leb(&9ƾC}?VY;"@zubނMF2Wc&y_FHa'hU"(JlPY>HۈĦ6$<0@ɚ+F`h]ʮqQwo> g*("/~?("yoft!Xh܆HB=G14T#'$FTܠ!gyp@pbyQQ7Iy[.]t z\K '@j9GVO >]<QXoPoMa4_'_΁C(b_r(x1&snBJO8赌PFicمkN(VNvEYIFB +")y H=VE2# Oa;q1-MQ`>Ct6r"Ɔ564JdĘ.ƫ ctm+Zd9*93-'^'/a"DH) HLxY/8&Ϝ ^ud"GdYF^\&,WJ3XֿĨS}eҝbDDw4euc"j"Xu‰D&uU+&+Z_!kӐ׽EYjlmQZEZO/F' +R\^AI t>wY5l*x_){$ATՌglSxS2Azr.iAT$`hQֶoNU_SֶmPXySkSͺnb׽tkP%DqLLuЕ:KE\(qRFX) +LF Eܝ\'!5 7 ++IKWPZN +*x+27R 镭qɆjLK)@G)ĔioTA9b{-; ҥaAMV,\T5:۽3(J=/љB-'wE%@iȈ + Dy4b:z*6 QPEo +鞱 FmpC0C J*)QN( S0 xhc<w 4X׽ڛYqTfd|l.V͒I|'Ӟx!T귧Áy]3EQ$Jrcj$$jQֶx ^[08Ǧi_BޞGiMĔنI0fǞެpfDww;7j݋!jA-%SZ$S < reaz]PV)}E"BJb6ʘ쎅 0'xN*MBao<9K!tpø>"'5w\ +W +,ccgzfn?6R KkȌKIM`M 4F;dBMr<\ٹ[ id?91&uU h܏;P1ƭFn& .0>Ž x{ރr\ɋﳱ[]/nPZA%_+ֽӖ!|.p7hr+L'9G>*LD > aH R=HjTGgUq2H q:Y:[xIM8 @OHU'Ntݎzl b]gV{a ]S ؐW|HMؖ!0g*ۂU ź;Ow/w㲞Mu&QZԲ1UՋ$A&iCA%#FuNYXg:=qڀÏ82q0=YE$ۢ"B+N(/=%fn6$ΐUV`([:"YtIbYyA>OϨmgxWq/nsj8~ ]f [^pC 8.KМ@/;9ӞiDrW 4yuo%kSMmVj[$wL ]5KVjHx?s>CQ`OE}2&lfYT_OȄq( a_tAħxǮ+t;q:ZEou +"]ȁ ql4]40 ACW0Y;c L] -ޛ[=;q '[~|98EÔPS!/Q`F?wītkg[x$[h3 .^xD%%A$^6-=NhA *.Z '=Uj;1G"[`m"=%...QT2H:?kzz€/ȞV 8Q0ǯ|r?%J{ 03Fv;]8tyݏۗ4> +endobj + +5130 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 718.8894 202.77814 732.5514] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/38713.38742) + >> + /F 4 + /StructParent 406 + /Contents (https://doi.org/10.1145/38713.38742) +>> +endobj + +5131 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 698.42737 91.28214 712.0894] + /Border [0 0 0] + /Dest 4626 0 R + /F 4 + /StructParent 407 + /Contents ([38]) +>> +endobj + +5132 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 664.3034 91.28214 677.9654] + /Border [0 0 0] + /Dest 4626 0 R + /F 4 + /StructParent 408 + /Contents ([39]) +>> +endobj + +5133 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [233.11613 650.6414 470.02313 664.3034] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://martinfowler.com/articles/injection.html) + >> + /F 4 + /StructParent 409 + /Contents (https://martinfowler.com/articles/injection.html) +>> +endobj + +5134 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 630.1794 91.28214 643.84143] + /Border [0 0 0] + /Dest 4627 0 R + /F 4 + /StructParent 410 + /Contents ([40]) +>> +endobj + +5135 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [264.81815 589.1934 388.24915 602.8554] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/3-540-57182-5\\_8) + >> + /F 4 + /StructParent 411 + /Contents (https://doi.org/10.1007/3-540-57182-5\\_8) +>> +endobj + +5136 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 568.73145 91.28214 582.39343] + /Border [0 0 0] + /Dest 4628 0 R + /F 4 + /StructParent 412 + /Contents ([41]) +>> +endobj + +5137 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 520.94543 91.28214 534.6074] + /Border [0 0 0] + /Dest 4629 0 R + /F 4 + /StructParent 413 + /Contents ([42]) +>> +endobj + +5138 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [387.86646 520.94543 524.4094 534.6074] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://webpack.js.org/api/hot-module-replacement/) + >> + /F 4 + /StructParent 414 + /Contents (https://webpack.js.org/api/hot-module-replacement/) +>> +endobj + +5139 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 507.2834 230.02515 520.94543] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://webpack.js.org/api/hot-module-replacement/) + >> + /F 4 + /StructParent 415 + /Contents (https://webpack.js.org/api/hot-module-replacement/) +>> +endobj + +5140 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 486.8214 91.28214 500.4834] + /Border [0 0 0] + /Dest 4630 0 R + /F 4 + /StructParent 416 + /Contents ([43]) +>> +endobj + +5141 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [292.59314 486.8214 447.93515 500.4834] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://vite.dev/guide/api-hmr) + >> + /F 4 + /StructParent 417 + /Contents (https://vite.dev/guide/api-hmr) +>> +endobj + +5142 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 466.3594 91.28214 480.0214] + /Border [0 0 0] + /Dest 4631 0 R + /F 4 + /StructParent 418 + /Contents ([44]) +>> +endobj + +5143 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 445.8974 91.28214 459.5594] + /Border [0 0 0] + /Dest 4632 0 R + /F 4 + /StructParent 419 + /Contents ([45]) +>> +endobj + +5144 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 418.5734 207.66214 432.2354] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1109/32.60317) + >> + /F 4 + /StructParent 420 + /Contents (https://doi.org/10.1109/32.60317) +>> +endobj + +5145 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 398.1114 91.28214 411.7734] + /Border [0 0 0] + /Dest 4632 0 R + /F 4 + /StructParent 421 + /Contents ([46]) +>> +endobj + +5146 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [388.97513 370.7874 498.59015 384.4494] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1109/tse.2007.70733) + >> + /F 4 + /StructParent 422 + /Contents (https://doi.org/10.1109/tse.2007.70733) +>> +endobj + +5147 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 350.3254 91.28214 363.9874] + /Border [0 0 0] + /Dest 4633 0 R + /F 4 + /StructParent 423 + /Contents ([47]) +>> +endobj + +5148 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 309.33942 242.18015 323.0014] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/978-3-540-76778-7_1) + >> + /F 4 + /StructParent 424 + /Contents (https://doi.org/10.1007/978-3-540-76778-7_1) +>> +endobj + +5149 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 288.87738 91.28214 302.53943] + /Border [0 0 0] + /Dest 4634 0 R + /F 4 + /StructParent 425 + /Contents ([48]) +>> +endobj + +5150 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 254.75342 91.28214 268.4154] + /Border [0 0 0] + /Dest 4634 0 R + /F 4 + /StructParent 426 + /Contents ([49]) +>> +endobj + +5151 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 220.6294 91.28214 234.29138] + /Border [0 0 0] + /Dest 4634 0 R + /F 4 + /StructParent 427 + /Contents ([50]) +>> +endobj + +5152 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 186.50537 91.28214 200.16742] + /Border [0 0 0] + /Dest 4635 0 R + /F 4 + /StructParent 428 + /Contents ([51]) +>> +endobj + +5153 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [266.66614 159.1814 376.51215 172.84338] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/168619.168635) + >> + /F 4 + /StructParent 429 + /Contents (https://doi.org/10.1145/168619.168635) +>> +endobj + +5154 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 138.71942 91.28214 152.38141] + /Border [0 0 0] + /Dest 4636 0 R + /F 4 + /StructParent 430 + /Contents ([52]) +>> +endobj + +5155 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 431 + /Tabs /S + /Parent 1 0 R + /Contents 5156 0 R + /Annots [5129 0 R 5130 0 R 5131 0 R 5132 0 R 5133 0 R 5134 0 R 5135 0 R 5136 0 R 5137 0 R 5138 0 R 5139 0 R 5140 0 R 5141 0 R 5142 0 R 5143 0 R 5144 0 R 5145 0 R 5146 0 R 5147 0 R 5148 0 R 5149 0 R 5150 0 R 5151 0 R 5152 0 R 5153 0 R 5154 0 R] +>> +endobj + +5156 0 obj +<< + /Length 5106 + /Filter /FlateDecode +>> +stream +x=r7q[!7P4uͱRF4ikbr3?QuՖbȮ‘Hqzqpwui<9jӋN/?}_79ݫ?6>Κϟx_Ckyǯ{$hgZ[&G7oq>zzyě;\͕??}{/V79zqyF XGvsjIZnO=~0G|Xx,( ͗~Jmkïux3­a Ȫ_9|"l/Z +Y"JIVf +aH|ya>D% *\9FVn s\Vk=B0.Sikj5&Wgi6M]4 㠛GJ3.F()uo&ٽ=+ 'n)P0 B|drDnL<5. :YJGAD"uprlqPvIyڇ!qJy@ʄ=y]gZMmx(nyRK A"`mޓ#|f~N|=4fzy|>qE"#\2X4~|ǫo]i#U\'f{)<.W/Nh^`nlL\\U?DG؜ )^g[z;ӢxH#γyhM}z'K/0>š={%J/Y+5+̒ёiShb-h$:gʢVKU_7.uݭ﹵p M z~GeTL4OA{5m@΍ȐJG{qQ񘡈%ǸJ"4߿ <aVGR11Nt 7ӮP$s(fQ95M;dz^ib&Zv8"^M1Ljp# +u^y ' &VtWLAnDh>*?\QtNZor} WI@|R ם-p^VZD0)Bbr\kF|ON:xv{a$9_&N LdB +2: ǁs AU +0~.~1$TzuBBX c(cFڀʼn}-Zf |dyje‡,Y)54S@Ʂ%;q]Pp,`Y1٨jLTz}_6Fa$%LX|z++#bRN Wbl_C[C|`7$ yQ6D;ԯQ(' yLCm:JٍYHǤuC#4( ڙ ̔)w6- 4z4 ftLCi#"@L7W(qNL'#6 uji}e5F(L+ M94-ծAuUTՃ%V3/0.%ejFĜ#Ac-,=dnh fgL+zR]AΏLN( 0γK}ǀ~V?H +Эd^*o.ΪBn1se)jT Z3h-8c5飡t;; "SEx.ikՋ="FkBeʇ?1_H4(fTκ@< yCc 3P'.V'}zӵeB׭{m4]0'5l#fq~:,!Q)8S/ƳIupШ*͵oue%zh@=8t1[yh)[L2"?M~F2u&)M@OFNxyHz@9I\-ͶL8Vm4-q ֠ hE癒F%q:'ט䄄 n˭Br.P +h8 <b5RJP\OﶳJui0K]%XYdĵ.i%ܕHނ|";OlĉDK摉:rh}#JހFDŽ +ٸ%"-> +~՘׮l;7/h1KOQl+6TˬZ.Q] GEbـu;8]"Hx чI~~Ia"i2w} 9cT7(Axǥs_O6}cb7a?|d݅ŗqivXô-Tր#Rg?C'&MEeՄT  NQ<&w}K$X|hXt?[ ɔ(6djG 7⦘`:Eu-l%U‘+("[Z~Ҏ4.(+'s (5I +tX!qiN3zUX*uB+BKhIh/bN'DwyUh3L_PFm:MX.G_&$퓌 ia]ND' OTud +J $?fVJZ;*˧r9(:u{ 4ߢ#4b4u)a]yr[Pc01edZxז8d$PYUshNX*%,docb4$Ѯ čeĎi7' :P}+A+Gۅ`J-vͽ<2N7MD99m(72°u%Wjez>rz\Cf%whr:vUˁcn(yOY Y2CF1DɁ!JnqkT}RXeXnոg<^"qĘm"g@? a)B1(\ #&PfבKPE|f.8%.`Y5O򍋼$P.Ms`'7,^򖵭\pK%O݅,yÅ?*}'= LM\ԡ-aY_dHr@& +ϙq362XLjiٰr"f RN.S%&jײn厽Lr2Q9L9l[eF-h +T4FbY Q¬)ɬFXk~<g!=^<CQ9^|(.~iW\? 9Ky{N_q̘yUBD"PeڤL\3[[LH=vMvId2>D+K}@,1&Fbd?P2ax,"b`!9O+  зZpϼ|vt`3ZHX$,<87ei\0sa/AoM ЍB=ŏ)̢Vy޴ksz/TצU> +endobj + +5158 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [392.97916 732.5514 510.96515 746.2134] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1002/SPE.4380210404) + >> + /F 4 + /StructParent 433 + /Contents (https://doi.org/10.1002/SPE.4380210404) +>> +endobj + +5159 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 712.0894 91.28214 725.7514] + /Border [0 0 0] + /Dest 4638 0 R + /F 4 + /StructParent 434 + /Contents ([54]) +>> +endobj + +5160 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [322.68915 684.7654 421.53516 698.42737] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/75277.75283) + >> + /F 4 + /StructParent 435 + /Contents (https://doi.org/10.1145/75277.75283) +>> +endobj + +5161 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 664.3034 91.28214 677.9654] + /Border [0 0 0] + /Dest 4639 0 R + /F 4 + /StructParent 436 + /Contents ([55]) +>> +endobj + +5162 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 630.1794 91.28214 643.84143] + /Border [0 0 0] + /Dest 4640 0 R + /F 4 + /StructParent 437 + /Contents ([56]) +>> +endobj + +5163 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [322.68915 602.8554 443.53516 616.5174] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1190216.1190229) + >> + /F 4 + /StructParent 438 + /Contents (https://doi.org/10.1145/1190216.1190229) +>> +endobj + +5164 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 582.39343 91.28214 596.0554] + /Border [0 0 0] + /Dest 4641 0 R + /F 4 + /StructParent 439 + /Contents ([57]) +>> +endobj + +5165 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [386.45844 582.39343 526.60944 596.0554] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://www.typescriptlang.org/docs/handbook/declaration-merging.html) + >> + /F 4 + /StructParent 440 + /Contents (https://www.typescriptlang.org/docs/handbook/declaration-merging.html) +>> +endobj + +5166 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 568.73145 332.56714 582.39343] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://www.typescriptlang.org/docs/handbook/declaration-merging.html) + >> + /F 4 + /StructParent 441 + /Contents (https://www.typescriptlang.org/docs/handbook/declaration-merging.html) +>> +endobj + +5167 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 548.2694 91.28214 561.9314] + /Border [0 0 0] + /Dest 4642 0 R + /F 4 + /StructParent 442 + /Contents ([58]) +>> +endobj + +5168 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [204.53815 520.94543 325.38416 534.6074] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1869631.1869638) + >> + /F 4 + /StructParent 443 + /Contents (https://doi.org/10.1145/1869631.1869638) +>> +endobj + +5169 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 500.4834 91.28214 514.1454] + /Border [0 0 0] + /Dest 4643 0 R + /F 4 + /StructParent 444 + /Contents ([59]) +>> +endobj + +5170 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [401.79245 500.4834 524.4094 514.1454] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://docs.python.org/3/howto/descriptor.html) + >> + /F 4 + /StructParent 445 + /Contents (https://docs.python.org/3/howto/descriptor.html) +>> +endobj + +5171 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 486.8214 225.16315 500.4834] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://docs.python.org/3/howto/descriptor.html) + >> + /F 4 + /StructParent 446 + /Contents (https://docs.python.org/3/howto/descriptor.html) +>> +endobj + +5172 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 466.3594 91.28214 480.0214] + /Border [0 0 0] + /Dest 4644 0 R + /F 4 + /StructParent 447 + /Contents ([60]) +>> +endobj + +5173 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [169.31615 439.0354 268.16214 452.6974] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/38765.38821) + >> + /F 4 + /StructParent 448 + /Contents (https://doi.org/10.1145/38765.38821) +>> +endobj + +5174 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 418.5734 91.28214 432.2354] + /Border [0 0 0] + /Dest 4644 0 R + /F 4 + /StructParent 449 + /Contents ([61]) +>> +endobj + +5175 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [249.25314 377.5874 370.09915 391.2494] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1028976.1029004) + >> + /F 4 + /StructParent 450 + /Contents (https://doi.org/10.1145/1028976.1029004) +>> +endobj + +5176 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 357.1254 91.28214 370.7874] + /Border [0 0 0] + /Dest 4645 0 R + /F 4 + /StructParent 451 + /Contents ([62]) +>> +endobj + +5177 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [483.31345 343.4634 524.4094 357.1254] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/s12243-008-0072-z) + >> + /F 4 + /StructParent 452 + /Contents (https://doi.org/10.1007/s12243-008-0072-z) +>> +endobj + +5178 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 329.8014 191.08514 343.4634] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/s12243-008-0072-z) + >> + /F 4 + /StructParent 453 + /Contents (https://doi.org/10.1007/s12243-008-0072-z) +>> +endobj + +5179 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 309.33942 91.28214 323.0014] + /Border [0 0 0] + /Dest 4646 0 R + /F 4 + /StructParent 454 + /Contents ([63]) +>> +endobj + +5180 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [378.28314 295.67743 499.12915 309.33942] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/2489837.2489840) + >> + /F 4 + /StructParent 455 + /Contents (https://doi.org/10.1145/2489837.2489840) +>> +endobj + +5181 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 275.2154 91.28214 288.87738] + /Border [0 0 0] + /Dest 4647 0 R + /F 4 + /StructParent 456 + /Contents ([64]) +>> +endobj + +5182 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [196.81615 247.89142 312.88815 261.5534] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.jss.2016.04.008) + >> + /F 4 + /StructParent 457 + /Contents (https://doi.org/10.1016/j.jss.2016.04.008) +>> +endobj + +5183 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 227.42938 91.28214 241.09143] + /Border [0 0 0] + /Dest 4648 0 R + /F 4 + /StructParent 458 + /Contents ([65]) +>> +endobj + +5184 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [147.31615 186.44342 268.16214 200.10541] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3426428.3426922) + >> + /F 4 + /StructParent 459 + /Contents (https://doi.org/10.1145/3426428.3426922) +>> +endobj + +5185 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 165.98138 91.28214 179.64337] + /Border [0 0 0] + /Dest 4649 0 R + /F 4 + /StructParent 460 + /Contents ([66]) +>> +endobj + +5186 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [260.94614 138.65741 377.01813 152.3194] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.jss.2012.02.018) + >> + /F 4 + /StructParent 461 + /Contents (https://doi.org/10.1016/j.jss.2012.02.018) +>> +endobj + +5187 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 118.19537 91.28214 131.85742] + /Border [0 0 0] + /Dest 4650 0 R + /F 4 + /StructParent 462 + /Contents ([67]) +>> +endobj + +5188 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [226.07614 90.8714 324.92215 104.53339] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/73560.73566) + >> + /F 4 + /StructParent 463 + /Contents (https://doi.org/10.1145/73560.73566) +>> +endobj + +5189 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 464 + /Tabs /S + /Parent 1 0 R + /Contents 5190 0 R + /Annots [5157 0 R 5158 0 R 5159 0 R 5160 0 R 5161 0 R 5162 0 R 5163 0 R 5164 0 R 5165 0 R 5166 0 R 5167 0 R 5168 0 R 5169 0 R 5170 0 R 5171 0 R 5172 0 R 5173 0 R 5174 0 R 5175 0 R 5176 0 R 5177 0 R 5178 0 R 5179 0 R 5180 0 R 5181 0 R 5182 0 R 5183 0 R 5184 0 R 5185 0 R 5186 0 R 5187 0 R 5188 0 R] +>> +endobj + +5190 0 obj +<< + /Length 5269 + /Filter /FlateDecode +>> +stream +x]Y7r~_Qj.奰U\͓ʳwTuUHU$72G7 +@&/?df]<ٿwf=xpu7ys~>W?>ygvO=={ӳ~j>w'3g]=ͯgoxg'g9x;!wg?|#C ?Ξ_{#WR ]y7}>~u4Nb4&|*%m4xwISWjjHq{uWNI wdv -{[?KSb׉_ EeP)6=(*Wx+_C;do8h:쟗+E˷;bhX}3Kty7vD:6vP5TMx[Pޞ.#:nd|zɭ3d=e4+&>Cd57q%K+ %߉?vwש/8z+_uƤ{m,Xf2pJepZIucA1l*(S-X]Jc i#Ta>3%u gNrfM,,[-z'J =>G JXNk>+ [gW>K2HY$1(f +n@%p1`Fa dH Pˌ]0}v iOWU?!9gR NFA7 )~l­d| ,d:WfrM~yUx*֟$vd^+%pѱPX:_mr݆i)G9cE8}E6 @EyA]9b94^ph6g:Q Qi'0mC +b<XZ9 +d-ioPgx 8;{pg6Τ w68h:g^({,{!{h{L2{ZYsKOW姨$̬.&m g8mо/o!;qbB4W28&j'm+a>op`qfܽá| "gE©9,:W  tE +8P2m&5)vYte3;߉-lP#@h*/M&"5M:8 :znxI:Sjhםq1cSV,9 AݬLz۾oUz} ^*~|.x1W- $3uݲB&0uԒno<>N}Z[|]MIH +ヺ-WRE98E篙p]=ݬy RS: +)3泻2qnçY_.`:mZ,\*\K`KZ(#V`f{ڥTIEzfz'-kb1g}OcIiuQ_#J"{t$9s 93W-?(@r͌rlcQE@S>o(BS4)qMrEx3|R~:{k;/>c; =oh:5`H܏A %S&8pWGZ2AJS;:f5rKk牴NYD޷ͭgNptӝZ;zuP'3(Z$z*R2uLX9%l"Lo|֣׃Nl=N20ͅtJh,nẒ >TqpR}9Ո(7C;.{TS7KGzv 7w3 o|FT B- +nNBջZj36r9s@|D>7e;+ +4mׇ&7L[kM.o|({cC>G<1*udLsΟε#M>@np?ZҰTSɨl$UƖ2#XʉKx2j[EW僌B\\7߯<?{8W\Y zI}Z=fpY:n0-=SM=;2F$qRZ<%ۦ$cFmc@FH+äeCG[AC!eM&-r& ğS5m_ݧ$~ZJy MFj)"h|o%j% qi$G0k󵼊Of)Mj#wuGN(Ԙ2Bv8 _Tl gںapɓ뭺s}l{nJǾ8U bH 4ٵQh~jak [_I)G93[Ⱛ`o&\gO\/~O,˼[?ypHS-h`ɵ~Vqw=+n|7,p< DZS)A|0kkB2 czYڐy ]I^Lojn2@4+t:8#:}(Fb2XjҚYd,(LXsi^hڭir}'Ixۈ{Jvτgvv Y;Ҭk윜7?vz"IaҀm@<li9zĐo@GOٝڠ0{ƅj6L!r̶wk ^ \ݣQjͤ^Yg p^D/^PTP8x]slIr81ަQZu 'kK =dUI3 66'U7a/B\74X .Q*mOgƸ"PV +.0gseo͵=;an:LL6I"8{fuAQe2WŪ\{Ŝ+a:N:&efG!T'߻"-W>~qс^R6GaE3/0kro]7ysœ_>ÇۛWڿpM&LuF0/'APu[m +endstream +endobj + +5191 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 746.2134 91.28214 759.87537] + /Border [0 0 0] + /Dest 4651 0 R + /F 4 + /StructParent 465 + /Contents ([68]) +>> +endobj + +5192 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 732.5514 207.66214 746.2134] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1109/2.161279) + >> + /F 4 + /StructParent 466 + /Contents (https://doi.org/10.1109/2.161279) +>> +endobj + +5193 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 712.0894 91.28214 725.7514] + /Border [0 0 0] + /Dest 4652 0 R + /F 4 + /StructParent 467 + /Contents ([69]) +>> +endobj + +5194 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [266.44614 698.42737 377.49115 712.0894] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1006/inco.1994.1055) + >> + /F 4 + /StructParent 468 + /Contents (https://doi.org/10.1006/inco.1994.1055) +>> +endobj + +5195 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 677.9654 91.28214 691.6274] + /Border [0 0 0] + /Dest 4653 0 R + /F 4 + /StructParent 469 + /Contents ([70]) +>> +endobj + +5196 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [152.81615 650.6414 232.41214 664.3034] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3428194) + >> + /F 4 + /StructParent 470 + /Contents (https://doi.org/10.1145/3428194) +>> +endobj + +5197 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 630.1794 91.28214 643.84143] + /Border [0 0 0] + /Dest 4653 0 R + /F 4 + /StructParent 471 + /Contents ([71]) +>> +endobj + +5198 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [333.17215 602.8554 412.76813 616.5174] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3527320) + >> + /F 4 + /StructParent 472 + /Contents (https://doi.org/10.1145/3527320) +>> +endobj + +5199 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 582.39343 91.28214 596.0554] + /Border [0 0 0] + /Dest 4654 0 R + /F 4 + /StructParent 473 + /Contents ([72]) +>> +endobj + +5200 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [129.48514 568.73145 238.49515 582.39343] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://effect.website/) + >> + /F 4 + /StructParent 474 + /Contents (https://effect.website/) +>> +endobj + +5201 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 548.2694 91.28214 561.9314] + /Border [0 0 0] + /Dest 4655 0 R + /F 4 + /StructParent 475 + /Contents ([73]) +>> +endobj + +5202 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [215.53815 507.2834 344.51315 520.94543] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.entcs.2018.11.009) + >> + /F 4 + /StructParent 476 + /Contents (https://doi.org/10.1016/j.entcs.2018.11.009) +>> +endobj + +5203 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 486.8214 91.28214 500.4834] + /Border [0 0 0] + /Dest 4656 0 R + /F 4 + /StructParent 477 + /Contents ([74]) +>> +endobj + +5204 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 459.4974 183.52814 473.1594] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3341714) + >> + /F 4 + /StructParent 478 + /Contents (https://doi.org/10.1145/3341714) +>> +endobj + +5205 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 439.0354 91.28214 452.6974] + /Border [0 0 0] + /Dest 4657 0 R + /F 4 + /StructParent 479 + /Contents ([75]) +>> +endobj + +5206 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 411.7114 183.52814 425.3734] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3563319) + >> + /F 4 + /StructParent 480 + /Contents (https://doi.org/10.1145/3563319) +>> +endobj + +5207 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 391.2494 91.28214 404.9114] + /Border [0 0 0] + /Dest 4657 0 R + /F 4 + /StructParent 481 + /Contents ([76]) +>> +endobj + +5208 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [469.68445 377.5874 526.60944 391.2494] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/https://doi.org/10.1016/j.tcs.2023.114063) + >> + /F 4 + /StructParent 482 + /Contents (https://doi.org/https://doi.org/10.1016/j.tcs.2023.114063) +>> +endobj + +5209 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 363.9254 245.68915 377.5874] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/https://doi.org/10.1016/j.tcs.2023.114063) + >> + /F 4 + /StructParent 483 + /Contents (https://doi.org/https://doi.org/10.1016/j.tcs.2023.114063) +>> +endobj + +5210 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 343.4634 91.28214 357.1254] + /Border [0 0 0] + /Dest 4658 0 R + /F 4 + /StructParent 484 + /Contents ([77]) +>> +endobj + +5211 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [152.81615 316.1394 232.41214 329.8014] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3689750) + >> + /F 4 + /StructParent 485 + /Contents (https://doi.org/10.1145/3689750) +>> +endobj + +5212 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 295.67743 91.28214 309.33942] + /Border [0 0 0] + /Dest 4659 0 R + /F 4 + /StructParent 486 + /Contents ([78]) +>> +endobj + +5213 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [373.59714 282.01538 481.69415 295.67743] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.5381/jot.2008.7.3.a4) + >> + /F 4 + /StructParent 487 + /Contents (https://doi.org/10.5381/jot.2008.7.3.a4) +>> +endobj + +5214 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 261.5534 91.28214 275.2154] + /Border [0 0 0] + /Dest 4659 0 R + /F 4 + /StructParent 488 + /Contents ([79]) +>> +endobj + +5215 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [285.91614 234.22937 406.76215 247.89142] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1146841.1146842) + >> + /F 4 + /StructParent 489 + /Contents (https://doi.org/10.1145/1146841.1146842) +>> +endobj + +5216 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 213.7674 91.28214 227.42938] + /Border [0 0 0] + /Dest 4660 0 R + /F 4 + /StructParent 490 + /Contents ([80]) +>> +endobj + +5217 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [152.81615 186.44342 268.88815 200.10541] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1016/j.jss.2012.03.024) + >> + /F 4 + /StructParent 491 + /Contents (https://doi.org/10.1016/j.jss.2012.03.024) +>> +endobj + +5218 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 165.98138 91.28214 179.64337] + /Border [0 0 0] + /Dest 4661 0 R + /F 4 + /StructParent 492 + /Contents ([81]) +>> +endobj + +5219 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [264.81815 138.65741 363.33414 152.3194] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/BFb0053381) + >> + /F 4 + /StructParent 493 + /Contents (https://doi.org/10.1007/BFb0053381) +>> +endobj + +5220 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 118.19537 91.28214 131.85742] + /Border [0 0 0] + /Dest 4661 0 R + /F 4 + /StructParent 494 + /Contents ([82]) +>> +endobj + +5221 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 495 + /Tabs /S + /Parent 1 0 R + /Contents 5222 0 R + /Annots [5191 0 R 5192 0 R 5193 0 R 5194 0 R 5195 0 R 5196 0 R 5197 0 R 5198 0 R 5199 0 R 5200 0 R 5201 0 R 5202 0 R 5203 0 R 5204 0 R 5205 0 R 5206 0 R 5207 0 R 5208 0 R 5209 0 R 5210 0 R 5211 0 R 5212 0 R 5213 0 R 5214 0 R 5215 0 R 5216 0 R 5217 0 R 5218 0 R 5219 0 R 5220 0 R] +>> +endobj + +5222 0 obj +<< + /Length 5118 + /Filter /FlateDecode +>> +stream +x]Ys7~( +Y:3#HhbMy9툝Quэw_8z]ݍ~hGSJLvF:…ͯGg7yswvGgiXw~]z(/ۣWGoqjB 8\zӝZF$Fww~1563do7cǻRBoR$?Oa#selѦ@946ʧƦq3 c@ﻻe{+/wdΉV,]((v77X7N+E`kMqʶ̒6\fz^vBrصiq`nlnmcW0p` E Im0" |3}4x,_~gWN[lt8FQqjּmTàN6?2d~e*i K(3$8m(%B6 E0m +x;lx^K\=T2, BGSY4Dž tXǠ_?' c]Q+H]JBVL0~s\Ѐyx?/;s4S,YtN"ŀhořUJ䗐;eD**hBY l+xAX*(p Q3>YP=hOJq|,S-îLD8GEYRVU~5: /ict.1 <˂ gҝ&񀢥_QGE -P~S6B4i5p@ &5L!df(uY*Y gQ.amV1O!Fj!fY=:~s.@{@lgڟUak,F XL ;sgV٪̓g2ӄ6i"㗛N.Lm)eZ3%s4ENc:p-;7+gN[@ыc,·j#sH ukؿYsLb4S+ $cXX.>L|V Tqda4U,pj2 O2mS)Q^S^b#_-p5js(~Ȣ +rxs/,7=w҄|"9d"" 8f<C,) A'e֮82OԷ''ԟvH=Eo9?U"*;bq<`Iy'<>ȳJ4\40P. ?!"ZK1O!3HjY8kZͤ{γ["SVԏB Q3DX^ɀ%`dmhO٘0e5& )"Q.5Ӕ]>2\5f,Yq;{Nqy?R6#:址q vGiU&2\Tt3NVz8VrNG ۣ +'13^`_N$/=g\gȰ:^gy7Yͼ/nPTh Lii69QօͽOZNǛ1zL9iVf^͸5,(RZCq-'t!nV{PyԹ>F)dHyˍз)(ӏ|wP Po!SZC 'DЖ;Vsx 2]y1KɪR0ELt<=(] +tTHU$ Z.'BHIm\JmuUQmϪT[Y6D"dO-tl:'3AoK%:%`gG{_G :j_@3`}F-O>jzEGrL6܈}B40r!{uRS(aNv>x c({᜴5l]/,7@>,7,^Xnn[bnTvܐڨܰ[ܰ333QN"T\ K͉9!"C `(Y4 +\JN^vX\A)j. ++g=!t% ji$"-)=6Z S@嚴2`4@@` oQCHnQc QHG)N慝-Ɇx +CxM6DѼk TYSÏM7nzS/8#;Z1Z-4|EAqn ,$'*Bؚ[2IפuG \CÇRUH:W@AGuJ2C?X[ 2@1nmk# b(8pg1_z> );$kbԚ⪁wK/R].2J] K{'s^ 0X1VYZ"Th0P>̜TL6;g(Sd>p%VX}& ;W},&(1֒IGhR# +՘SjGR0[8'FuRMg:$wU-Q5uH۲oWzeqRZpEnahjaVj:ڥ&ҮrTvm +k $\QfZW3Gq`4hl2/L'5Qᶾ+R1Pt9=8gGV JtZS}:;Efet9cIŃB|U2M޾]iO4qmzKr,1*4A2CB9Ʋvnu1-ז8΍Ͷ  +' ptF@'SAH sr`0v; AlNFzyɢ]7"Ыe(Udrg| [SC4 ,cgF 3>$ ȠΏ_L!Ix#5P"OtBՉ(͝쏎r;:6a9pѸs,N + 8Әbt PT5+i\bɭ"T\}_*1 ڻJ) p_ܿ3/:4ʋlB U1! :8*"n̠+,ACS# ʙUmŶo;cx(A.8& KˈvT˲FK]%CDy +[%ք9؊m7(²O +ʧ(x%t֦Z>N%I!DQV1XG'MUnaSqm 91-슱LpmbUra6p|71\y&SG:,Z#09%Ti'@ +>ޥ<fFp3-ci2i Yd +_TZpq*-@`~Pr$jV'ܪR㺌 +vQ5U}q:KCΫ Lx( XM$NO6EL+kr0z8} 2a56C;`=4,q9nG˶~<lLowq +1:"m9D(SY +C9$̦ +^H?`0 }km#3BcJd+WuB[;I.fw ä^ A|IǘRu8 .Ju0lN* yJ^2-o{dHXdO|/ AY5zQ{5]Q:Y؀ٟVFo,-F4]Z- CR-[hIh%*V.tߢЁ]E_QŞX\Luf_u;Q ~,!; 2;[`/PR +glyfԌ3rΆ̀RZF|Fh~ψr*ƷjUDܷVUTW,= u hU~ +WOfݏg?n߯;}_>]m?|V c;ňcJ]CHj +endstream +endobj + +5223 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 732.5514 248.90114 746.2134] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/3-540-45337-7_18) + >> + /F 4 + /StructParent 496 + /Contents (https://doi.org/10.1007/3-540-45337-7_18) +>> +endobj + +5224 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 712.0894 91.28214 725.7514] + /Border [0 0 0] + /Dest 4662 0 R + /F 4 + /StructParent 497 + /Contents ([83]) +>> +endobj + +5225 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [382.00113 684.7654 491.84714 698.42737] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/508386.508404) + >> + /F 4 + /StructParent 498 + /Contents (https://doi.org/10.1145/508386.508404) +>> +endobj + +5226 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 664.3034 91.28214 677.9654] + /Border [0 0 0] + /Dest 4662 0 R + /F 4 + /StructParent 499 + /Contents ([84]) +>> +endobj + +5227 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [401.52615 636.9794 511.37213 650.6414] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/976270.976273) + >> + /F 4 + /StructParent 500 + /Contents (https://doi.org/10.1145/976270.976273) +>> +endobj + +5228 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 616.5174 91.28214 630.1794] + /Border [0 0 0] + /Dest 4663 0 R + /F 4 + /StructParent 501 + /Contents ([85]) +>> +endobj + +5229 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [266.72113 589.1934 376.56714 602.8554] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/378795.378798) + >> + /F 4 + /StructParent 502 + /Contents (https://doi.org/10.1145/378795.378798) +>> +endobj + +5230 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 568.73145 91.28214 582.39343] + /Border [0 0 0] + /Dest 4664 0 R + /F 4 + /StructParent 503 + /Contents ([86]) +>> +endobj + +5231 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [147.31615 527.74536 268.16214 541.4074] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1040305.1040321) + >> + /F 4 + /StructParent 504 + /Contents (https://doi.org/10.1145/1040305.1040321) +>> +endobj + +5232 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 507.2834 91.28214 520.94543] + /Border [0 0 0] + /Dest 4665 0 R + /F 4 + /StructParent 505 + /Contents ([87]) +>> +endobj + +5233 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [125.31614 479.9594 204.91214 493.6214] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/2629460) + >> + /F 4 + /StructParent 506 + /Contents (https://doi.org/10.1145/2629460) +>> +endobj + +5234 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 459.4974 91.28214 473.1594] + /Border [0 0 0] + /Dest 4666 0 R + /F 4 + /StructParent 507 + /Contents ([88]) +>> +endobj + +5235 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [378.18414 432.1734 522.3831 445.8354] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1109/SANER.2017.7884621) + >> + /F 4 + /StructParent 508 + /Contents (https://doi.org/10.1109/SANER.2017.7884621) +>> +endobj + +5236 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 411.7114 91.28214 425.3734] + /Border [0 0 0] + /Dest 4667 0 R + /F 4 + /StructParent 509 + /Contents ([89]) +>> +endobj + +5237 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 377.5874 91.28214 391.2494] + /Border [0 0 0] + /Dest 4668 0 R + /F 4 + /StructParent 510 + /Contents ([90]) +>> +endobj + +5238 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 343.4634 91.28214 357.1254] + /Border [0 0 0] + /Dest 4669 0 R + /F 4 + /StructParent 511 + /Contents ([91]) +>> +endobj + +5239 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 323.0014 91.28214 336.6634] + /Border [0 0 0] + /Dest 4670 0 R + /F 4 + /StructParent 512 + /Contents ([92]) +>> +endobj + +5240 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [444.26346 309.33942 523.85944 323.0014] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/3763067) + >> + /F 4 + /StructParent 513 + /Contents (https://doi.org/10.1145/3763067) +>> +endobj + +5241 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 288.87738 91.28214 302.53943] + /Border [0 0 0] + /Dest 4671 0 R + /F 4 + /StructParent 514 + /Contents ([93]) +>> +endobj + +5242 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [188.03815 261.5534 297.88416 275.2154] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/224964.224987) + >> + /F 4 + /StructParent 515 + /Contents (https://doi.org/10.1145/224964.224987) +>> +endobj + +5243 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 241.09143 91.28214 254.75342] + /Border [0 0 0] + /Dest 4671 0 R + /F 4 + /StructParent 516 + /Contents ([94]) +>> +endobj + +5244 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [376.65515 213.7674 497.50113 227.42938] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1065944.1065952) + >> + /F 4 + /StructParent 517 + /Contents (https://doi.org/10.1145/1065944.1065952) +>> +endobj + +5245 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 193.30542 91.28214 206.9674] + /Border [0 0 0] + /Dest 4672 0 R + /F 4 + /StructParent 518 + /Contents ([95]) +>> +endobj + +5246 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [385.25714 165.98138 495.10315 179.64337] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/165123.165164) + >> + /F 4 + /StructParent 519 + /Contents (https://doi.org/10.1145/165123.165164) +>> +endobj + +5247 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 145.51941 91.28214 159.1814] + /Border [0 0 0] + /Dest 4673 0 R + /F 4 + /StructParent 520 + /Contents ([96]) +>> +endobj + +5248 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [428.20114 131.85742 518.6981 145.51941] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1147/rd.53.0183) + >> + /F 4 + /StructParent 521 + /Contents (https://doi.org/10.1147/rd.53.0183) +>> +endobj + +5249 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 111.395386 91.28214 125.05737] + /Border [0 0 0] + /Dest 4673 0 R + /F 4 + /StructParent 522 + /Contents ([97]) +>> +endobj + +5250 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [319.92813 97.7334 415.92514 111.395386] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1147/rd.176.0525) + >> + /F 4 + /StructParent 523 + /Contents (https://doi.org/10.1147/rd.176.0525) +>> +endobj + +5251 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4366 0 R + /f1 4360 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 524 + /Tabs /S + /Parent 1 0 R + /Contents 5252 0 R + /Annots [5223 0 R 5224 0 R 5225 0 R 5226 0 R 5227 0 R 5228 0 R 5229 0 R 5230 0 R 5231 0 R 5232 0 R 5233 0 R 5234 0 R 5235 0 R 5236 0 R 5237 0 R 5238 0 R 5239 0 R 5240 0 R 5241 0 R 5242 0 R 5243 0 R 5244 0 R 5245 0 R 5246 0 R 5247 0 R 5248 0 R 5249 0 R 5250 0 R] +>> +endobj + +5252 0 obj +<< + /Length 5388 + /Filter /FlateDecode +>> +stream +x]YsF~節C֎ +>44lX5[~hɣuiG TUVց( NԑuW_>9tOup}wt?_}=wmjׇgϞu/~yg?~K{?h߫XG;=f8paew nyF^\=~ b<7c;18x6Ss|7Wgxʼnrrwcs80c)=}H$X&ǎfx*`T򑈏DB:>-TM)Snɀc3tP;c'w&ʹ#3fV:3=+NJk+Tg[2awc1߯=^K"r[(rElAz}xafNǣ0&9/_u_"GٺQ]!Jxa$9_M2W׶?ʂ5R~:k`/ g{ks:G+m +}j\.VmȣpV8h<۠i8e'1~}{4Gب'@Y"<>G%Δi4TV|8n @dMx1|j'&gqmd*Ήь_Xz|-_? +nٴz/ ݂2"_ss2M{͏c$:[*h@Yb㬥e0@9&\ӄ4Ecy[޼E1e}5Ep+f"hlTLEU.}afqkl;#_F#*1aW[\ qc oZuؾpmr.b][3dl cgd宓cY:ޗJҁ|3|}^̹D+T _Zy(@\ʔ&8+#8?~aKXN(eLlW}3 Gģj?1&#VִV&KEkCl_Λ S}fu^Gs>51V y\V>o +P%܃ezӓPR}[/oW(ZNaDWR\b٫C7|u6޵ PH݀ (>1بMsHJ(f@'x/N1=ËBx"om"8ńkʈza1GAQ6A ΋P9 +]G IpQ٢6hZ!МHJwp( 1 KH +=kA%c<1J%l"uHI>CήUf\G7GB"9P_B!X@BȸHve\ek-Z (ָ=TkhA+2!'m;&Q6Ia~z5 +DN+H0"_]РD) +j*a-/t!U f漕̻F/MIRآ|%M4>xbk3<˪D(.Um5{Zbʋ_9N8[ㄇl{6O~S٪ ,214ךk׳]hInoѽ_]1h'&Jl-0bB\M`յAM1t "7^C9,RTC + P+̅?Z$zjy5c!o{ywD}}Z%J LqGYKb⬤+/-FTÆA +$TnkJ*e uR5fa q#1/$B#k)T9⌋;tc1r-&=MĆ~/62Z&|L[…pB*Tu$zpHBqoUfzБΊ 9dW S̓l`,4ՇLw *Cu61aUo-=r*QX8b~` 5O!DDdQn)]L@ JYdضũH3ݨZ߄SRz&ْ%7C8>i#݆[]2J[Vӄ[%L ʓjjʘ`v +'8l|'9O Oq].ۄ +8h>~rv؛ݙáa[Sɶ+VF2a3( o|Xf)+$4r"T,3-{vW};WF_<ƓW#Y[ƶ&J)T?0*/aFF#mO)r+(f^ +'r8i .QT~AE[$=xiwwLAQ;HaEeJʖg9qvZYYb.GvG1t[Ġ 8I$K͉⛸Z6GAYTnT[_'zֶ/R%>#EEK{ )ĴʹN{ :oTw"X:W;6VU ZHz0Z^j U +0ډ-sq i U,y+_nPpXQJ(ϪV[qW||քOYxjRE{€ba_ҿ; ` XG9S @i[FiЪޏ-Hs|Ԇ`Nx=hs^0 +d[CK0rn`Gi[`ϰڐG?Ԧ), ^ {~GjwIa,aVn2(|m#똏Jfr+4aUL%$FlG QiuhLh> .UA~Zue +C qi8|^Q,XMj PHnF4xtǬ!2y)aw$ħu- /K"V@jVD갩vɱU&{Qm4@ A,C.Q$XT%g| 󮤱dj= +DEma)l +ܖwbu[ 11L2?kꮸ^5)@4%g_8>^6RM4&HA}զ\9춥QeehLMʓ9tOL$s*oRAV~^ Jsd[hMZ3w`NyuELtd=j@ͮ0|TA}{Yj"Z/'Qb"\ݢ^2Q Α' 2=j/d-;/0pby1>3*y}RVNHVoyX RZ&o\fNcdwR&PT|}i\pw L" 7ET0?'؈Qw;%JWe-h#L#MHr}Ŗ]|F="Z;Û8ڕw/=ZpZȊGxY1O"=ՊB)mRoJC4#RJµzqJ]uD7daMWl"qtelL8nPpQ(MHG:qK(-$Dϒ'b4ٛfGt^R!Ҡ˻IvcT8OJ6CbRW?8E /u1`\ Q閵p_ #R[(g_6ySѓXYp5Hv4ᥗb>. 1K2bqcW$_+S3 $apǜivȀt@bXx6 #TPu-m2MK1 +S +uZc0 εL wX1 Sdd0Ռ<*xXIŵ$R+uX2w +^0}zV6vX+{aE-G^IZ[Eb]ݠBXGwSNq`@S-s,jTP@0 ; (`%nR!c(yDnzHV懐\&e3'&J+*t:.a^ ^ndojUH` ck&,秣T[O4XaMK? ?@Qr]E .7-cLFfdJg|>!o!$r/FX.B%F@wk 0>Paj*@aFQQ[Ď̽!e.TY#Ub3W<zYIzi;WpFd~cS:Cpy~b&4y*Iַؕ%Rj=%|L;{zHu.2L7 L3㷇R[cؔyI2ŀo4ԡ $!\wEδDM*R~|OŞ܇KR1!\522,&Fa, mv#7|>m0K%W[xDkT3' n0އxht([)f@j s?ۏnGW>|Gy?`;ňcJ.!\ +endstream +endobj + +5253 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 746.2134 91.28214 759.87537] + /Border [0 0 0] + /Dest 4674 0 R + /F 4 + /StructParent 525 + /Contents ([98]) +>> +endobj + +5254 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 705.2274 224.77814 718.8894] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/1244381.1244404) + >> + /F 4 + /StructParent 526 + /Contents (https://doi.org/10.1145/1244381.1244404) +>> +endobj + +5255 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 684.7654 91.28214 698.42737] + /Border [0 0 0] + /Dest 4675 0 R + /F 4 + /StructParent 527 + /Contents ([99]) +>> +endobj + +5256 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 664.3034 96.78214 677.9654] + /Border [0 0 0] + /Dest 4676 0 R + /F 4 + /StructParent 528 + /Contents ([100]) +>> +endobj + +5257 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 643.84143 96.78214 657.5034] + /Border [0 0 0] + /Dest 4677 0 R + /F 4 + /StructParent 529 + /Contents ([101]) +>> +endobj + +5258 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [147.31615 616.5174 248.28514 630.1794] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1109/SCC.2007.74) + >> + /F 4 + /StructParent 530 + /Contents (https://doi.org/10.1109/SCC.2007.74) +>> +endobj + +5259 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 596.0554 96.78214 609.7174] + /Border [0 0 0] + /Dest 4677 0 R + /F 4 + /StructParent 531 + /Contents ([102]) +>> +endobj + +5260 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [391.93414 568.73145 523.03217 582.39343] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1109/ICSE.2004.1317483) + >> + /F 4 + /StructParent 532 + /Contents (https://doi.org/10.1109/ICSE.2004.1317483) +>> +endobj + +5261 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 548.2694 96.78214 561.9314] + /Border [0 0 0] + /Dest 4678 0 R + /F 4 + /StructParent 533 + /Contents ([103]) +>> +endobj + +5262 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [169.31615 520.94543 279.16214 534.6074] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/258948.258973) + >> + /F 4 + /StructParent 534 + /Contents (https://doi.org/10.1145/258948.258973) +>> +endobj + +5263 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 500.4834 96.78214 514.1454] + /Border [0 0 0] + /Dest 4679 0 R + /F 4 + /StructParent 535 + /Contents ([104]) +>> +endobj + +5264 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [406.43213 473.1594 508.02814 486.8214] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1007/11693024_20) + >> + /F 4 + /StructParent 536 + /Contents (https://doi.org/10.1007/11693024_20) +>> +endobj + +5265 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 452.6974 96.78214 466.3594] + /Border [0 0 0] + /Dest 4679 0 R + /F 4 + /StructParent 537 + /Contents ([105]) +>> +endobj + +5266 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [391.82645 439.0354 524.4094 452.6974] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://infoscience.epfl.ch/record/176887) + >> + /F 4 + /StructParent 538 + /Contents (https://infoscience.epfl.ch/record/176887) +>> +endobj + +5267 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 425.3734 173.68314 439.0354] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://infoscience.epfl.ch/record/176887) + >> + /F 4 + /StructParent 539 + /Contents (https://infoscience.epfl.ch/record/176887) +>> +endobj + +5268 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [70.86614 404.9114 96.78214 418.5734] + /Border [0 0 0] + /Dest 4680 0 R + /F 4 + /StructParent 540 + /Contents ([106]) +>> +endobj + +5269 0 obj +<< + /Type /Annot + /Subtype /Link + /Rect [103.932144 377.5874 224.77814 391.2494] + /Border [0 0 0] + /A << + /Type /Action + /S /URI + /URI (https://doi.org/10.1145/2501654.2501666) + >> + /F 4 + /StructParent 541 + /Contents (https://doi.org/10.1145/2501654.2501666) +>> +endobj + +5270 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 4402 0 R + >> + /Font << + /f0 4360 0 R + /f1 4366 0 R + >> + >> + /MediaBox [0 0 595.2756 841.8898] + /StructParents 542 + /Tabs /S + /Parent 1 0 R + /Contents 5271 0 R + /Annots [5253 0 R 5254 0 R 5255 0 R 5256 0 R 5257 0 R 5258 0 R 5259 0 R 5260 0 R 5261 0 R 5262 0 R 5263 0 R 5264 0 R 5265 0 R 5266 0 R 5267 0 R 5268 0 R 5269 0 R] +>> +endobj + +5271 0 obj +<< + /Length 3295 + /Filter /FlateDecode +>> +stream +x\ms ~b=r&>;ut%O3V~IH:SKri}g_lОn ><ݾ:6Of|=׻/ӛ~b_ߝ}w:9yqruj;j?+І6Y)ږFKCdsa+qyzqjsEƚ+pqa˃3JQy_L9^ڜ~:>]0F13~(fv0ޢy̸!ǟ(e(Z7c놻TB3]_N(o + 1x_AίOfD@vݰfHw{)2ib8 g龩nXVnx,ec" d_SY Hi%n3+U(tdRr4G$~G#s4EXtG[+~U==U +U5"JN91I$ɤm[Dvv[a LY.MBS9l.Gن׍da(> -7NL_ǖf lEl-HZv$8 kB‘:#4SLTW{ Y55V2VT>}mW>?:+9}`8Ϲq7ΈLHI&CDm;)] +U%^ݓN?X(XgE:DH>ʈ QQ댰k"J %㼝 .b|[JҊ9e7ߊ%b^t\#H)Yn/촡D6ECmY^%7΅V8[p'8I"LO<=EShH"2B~s+g^2}V%Dk,RhH"{AAC05X. JhҊbP,R`Dv\1qgIǟ&IAF45IbHK֑Nq1GUFA"}_X]`Z3rdJ%Ȅkdo QkC]>Au?F`[3ki'1<>(S-iCXۧl-,,Ր +j@YYVNٸ"\VN)ss(CNCCZZ9mߺơ,>GaS7BPk'`7vQҔ {N~KJDr?_rۧӷa.8*GYI!\X^lRtBggGj& +ĝ}m\LUo~ +bD-/0D Gpڒ0c6[gU=%N>K3v)ָFyO#냅-aݢ,gun#Q`; yVqpeT#Ft]kvHanp ޓ?!Qϴ6=hOTmq)M3īDsliG( rѕќύ<$Mņ,e;[{m')D'KK jB0( G3%x;&*e(+ümF BR,p$ŷnr2,suB"D)M8$9$ZuHUTJNh(^}|0 # auqA(guCYk=/yBSG)ߘWw岅17w2oڃ\P0W^Bg=<5:,7U՜{aq,ғ@-F芨HĈ=1/e;JjZ?K/k<1Ĵt*+1*d̿4Djםxu(YFH,QtBh3U bH7d!xo^}X (# @2<#%Ձ0['3 !DhmjRΙѻG 3S5oݨi{"!JSAۣaNH+}h FL+A҈QNyY4JUʋEGI>;ƒ@ +cx߹`6A*&7͇e¯nn G6&tרuhJX +endstream +endobj + +5272 0 obj +<< + /Length 1412 + /Type /XObject + /Subtype /Form + /Filter /FlateDecode + /BBox [0 0 146.25 31.019531] + /Matrix [1 0 0 1 0 0] + /Resources << + /ExtGState << + /a0 << + /CA 1 + /ca 1 + >> + >> + /XObject << + /x6 5273 0 R + >> + >> +>> +stream +xmV;%5 } +]`r.1 +dOҗ&I!I79I߿/~uӧ~k}7ۖN.uOtX.\"[3Eg 泛(KHERXErȸ$}'a$g DFZ,أȹ +O@g@l2$,$(V }hs,zhlIw;7"jny{0ڬGr$[a$ay98*]k,A.j[9$H8ܨ﵅S72Ҹ+`2a OSRg(o-8"[/Mgpb7NZmt:|*EG/@`ESԜ`Pa gy]7*;L5"I8`P6VE8db(=Χ'V8չjDx'YP]q_%!ڞ-n?ljaPi_Z0+q/67f-5 U'XZ"J*,b!!}XZ?3JGyhY:GO} pyRt{7&FrH)0.!E䓵ݑqLFձ7sF[ g@T_Y{wlkt-pCb/w $R|,&"uDӐT"f285kR.ɫNq_Vvj.hDi? b] LH;?jӑs_.vm '_3Lq*0Xs{cM|i +UT:bL;u>zw`&FyHLoim??eX +endstream +endobj + +5273 0 obj +<< + /Length 2113 + /BBox [0 0 147 32] + /Filter /FlateDecode + /Resources 5274 0 R + /Subtype /Form + /Type /XObject +>> +stream +xmXIr,u2~t| G8Kjyh%X|,{ȕ߼\\/_־GW)w_uu,?҈}}^|`tΘ}Y(^.Z3Pq2lN{[q.Pnwkqlz\D h?1V¹6iSqwN_{!L|︨ת:/"\E Q5CE胺^$hc?l fvq_NX @C?kӈ a(ӑ@TV8lۂ\}kTuP H8(Yl-Y5B.)- +Z,9aĬYʝ$;o}9ΐ,yٕ?sfn l%80vq:=qC"̡pjE5<%#i~HX&P8%&iBvb;Y:9/\7(f`M"Xd*u9k*Yd%Κ$H n(' TUiB 0SWfkӎ`Q;kY8ܱ(wq5<`k伈 ָ91kkxi73B7|$qίKF/W22vZ0[_n!ᅧ79SYfҭglNgCf]n;rKԻX_<$Bd3PGYKf6z4](se6\b]^ j;'}F._k){?Nb{Q\>&{PS[-"C:^k6׵J{T y Md!4ڵ8r|> +; 7X}Pif[pRPy0" lF$hҵv> + >> +>> +endobj + +5275 0 obj +<< + /Title (A Programming Paradigm for Spatiotemporal Composability) + /Author (Yifan Shi, Wei Zhang, Tianyi Cui) + /Creator (Typst 0.14.2) + /ModDate (D:20260731154505+08'00) + /CreationDate (D:20260731154505+08'00) +>> +endobj + +5276 0 obj +<< + /Length 1223 + /Type /Metadata + /Subtype /XML +>> +stream +A Programming Paradigm for Spatiotemporal ComposabilityYifan Shi, Wei Zhang, Tianyi CuiTypst 0.14.2en2026-07-31T15:45:05+08:002026-07-31T15:45:05+08:0048application/pdf8/8Hb0n3/ti5Ewx/bKL9Ww==HHwsV4w2OKoHWq5hDV/GeA==proof1.7 +endstream +endobj + +5277 0 obj +<< + /Type /Catalog + /Pages 1 0 R + /Metadata 5276 0 R + /PageLabels 53 0 R + /Lang (en) + /StructTreeRoot 54 0 R + /MarkInfo << + /Marked true + /Suspects false + >> + /ViewerPreferences << + /Direction /L2R + >> + /Outlines 2 0 R + /Names << + /Dests << + /Names [(sec:conclusion) 4454 0 R (sec:discussion) 4448 0 R (sec:introduction) 4412 0 R (sec:preliminary) 4416 0 R (sec:related) 4453 0 R (sec:system) 4442 0 R (sec:theory) 4432 0 R (subsec:capabilities) 4444 0 R (subsec:coeffects) 4414 0 R (subsec:component-lifecycle) 4428 0 R (subsec:composability) 4406 0 R (subsec:context-paradigm) 4431 0 R (subsec:contributions) 4411 0 R (subsec:core-impl) 4437 0 R (subsec:effects) 4413 0 R (subsec:granularity) 4446 0 R (subsec:koishi) 4441 0 R (subsec:language) 4445 0 R (subsec:loader-hmr) 4440 0 R (subsec:motivation) 4410 0 R (subsec:reactive-coeffects) 4423 0 R (subsec:revertible-effects) 4419 0 R (subsec:rw-effects) 4449 0 R (subsec:rw-paradigms) 4450 0 R (subsec:rw-spatial) 4452 0 R (subsec:rw-temporal) 4451 0 R (subsec:scaling) 4443 0 R (subsec:versioning) 4447 0 R (subsubsec:coeff-context) 4420 0 R (subsubsec:coeff-isolate-intercept) 4422 0 R (subsubsec:coeff-reactive) 4421 0 R (subsubsec:coeffect-api) 4434 0 R (subsubsec:component-api) 4435 0 R (subsubsec:config-layer) 4438 0 R (subsubsec:context-access) 4436 0 R (subsubsec:context-situating) 4430 0 R (subsubsec:eff-composition) 4418 0 R (subsubsec:eff-formalization) 4417 0 R (subsubsec:eff-idempotent) 4424 0 R (subsubsec:effect-api) 4433 0 R (subsubsec:hmr) 4439 0 R (subsubsec:lifecycle-asynchrony) 4427 0 R (subsubsec:lifecycle-coherence) 4426 0 R (subsubsec:lifecycle-iteration) 4425 0 R (subsubsec:motivation-harnesses) 4408 0 R (subsubsec:motivation-plugins) 4407 0 R (subsubsec:motivation-workaround) 4409 0 R (subsubsec:unified-context) 4429 0 R] + >> + >> +>> +endobj + +xref +0 5278 +0000000000 65535 f +0000000016 00000 n +0000000507 00000 n +0000000588 00000 n +0000000726 00000 n +0000000839 00000 n +0000000999 00000 n +0000001101 00000 n +0000001232 00000 n +0000001349 00000 n +0000001448 00000 n +0000001604 00000 n +0000001700 00000 n +0000001813 00000 n +0000001939 00000 n +0000002124 00000 n +0000002274 00000 n +0000002379 00000 n +0000002497 00000 n +0000002662 00000 n +0000002769 00000 n +0000002905 00000 n +0000003022 00000 n +0000003188 00000 n +0000003298 00000 n +0000003413 00000 n +0000003528 00000 n +0000003629 00000 n +0000003781 00000 n +0000003887 00000 n +0000004008 00000 n +0000004181 00000 n +0000004325 00000 n +0000004431 00000 n +0000004556 00000 n +0000004681 00000 n +0000004786 00000 n +0000004949 00000 n +0000005071 00000 n +0000005184 00000 n +0000005291 00000 n +0000005445 00000 n +0000005554 00000 n +0000005687 00000 n +0000005826 00000 n +0000005975 00000 n +0000006096 00000 n +0000006252 00000 n +0000006368 00000 n +0000006493 00000 n +0000006619 00000 n +0000006729 00000 n +0000006840 00000 n +0000006933 00000 n +0000007532 00000 n +0000014516 00000 n +0000014895 00000 n +0000015760 00000 n +0000016283 00000 n +0000017013 00000 n +0000017878 00000 n +0000018842 00000 n +0000020661 00000 n +0000022246 00000 n +0000023804 00000 n +0000026919 00000 n +0000029386 00000 n +0000031583 00000 n +0000034005 00000 n +0000035860 00000 n +0000039569 00000 n +0000042567 00000 n +0000045664 00000 n +0000047951 00000 n +0000049707 00000 n +0000050941 00000 n +0000051905 00000 n +0000052914 00000 n +0000054697 00000 n +0000057011 00000 n +0000058857 00000 n +0000060550 00000 n +0000061991 00000 n +0000062973 00000 n +0000064522 00000 n +0000065900 00000 n +0000066648 00000 n +0000067333 00000 n +0000068036 00000 n +0000069120 00000 n +0000069715 00000 n +0000070670 00000 n +0000071433 00000 n +0000072180 00000 n +0000073255 00000 n +0000074402 00000 n +0000075061 00000 n +0000075968 00000 n +0000076875 00000 n +0000077694 00000 n +0000078577 00000 n +0000079485 00000 n +0000080409 00000 n +0000080909 00000 n +0000083583 00000 n +0000084559 00000 n +0000084648 00000 n +0000084732 00000 n +0000084854 00000 n +0000085006 00000 n +0000085097 00000 n +0000085179 00000 n +0000085331 00000 n +0000085420 00000 n +0000085504 00000 n +0000085612 00000 n +0000085826 00000 n +0000085908 00000 n +0000086060 00000 n +0000086149 00000 n +0000086233 00000 n +0000086358 00000 n +0000086510 00000 n +0000086601 00000 n +0000086683 00000 n +0000086835 00000 n +0000086924 00000 n +0000087008 00000 n +0000087130 00000 n +0000087282 00000 n +0000087376 00000 n +0000087458 00000 n +0000087610 00000 n +0000087699 00000 n +0000087783 00000 n +0000087905 00000 n +0000088057 00000 n +0000088151 00000 n +0000088233 00000 n +0000088385 00000 n +0000088474 00000 n +0000088558 00000 n +0000088686 00000 n +0000088838 00000 n +0000088929 00000 n +0000089011 00000 n +0000089163 00000 n +0000089252 00000 n +0000089336 00000 n +0000089444 00000 n +0000089535 00000 n +0000089617 00000 n +0000089769 00000 n +0000089858 00000 n +0000089942 00000 n +0000090039 00000 n +0000090121 00000 n +0000090272 00000 n +0000090361 00000 n +0000090445 00000 n +0000090563 00000 n +0000090714 00000 n +0000090808 00000 n +0000090890 00000 n +0000091041 00000 n +0000091130 00000 n +0000091214 00000 n +0000091336 00000 n +0000091489 00000 n +0000091589 00000 n +0000091671 00000 n +0000091824 00000 n +0000091913 00000 n +0000091997 00000 n +0000092118 00000 n +0000092271 00000 n +0000092370 00000 n +0000092452 00000 n +0000092604 00000 n +0000092693 00000 n +0000092777 00000 n +0000092899 00000 n +0000093051 00000 n +0000093145 00000 n +0000093227 00000 n +0000093379 00000 n +0000093468 00000 n +0000093552 00000 n +0000093677 00000 n +0000093829 00000 n +0000093923 00000 n +0000094005 00000 n +0000094157 00000 n +0000094246 00000 n +0000094330 00000 n +0000094452 00000 n +0000094604 00000 n +0000094701 00000 n +0000094783 00000 n +0000094935 00000 n +0000095024 00000 n +0000095108 00000 n +0000095227 00000 n +0000095379 00000 n +0000095470 00000 n +0000095552 00000 n +0000095704 00000 n +0000095793 00000 n +0000095877 00000 n +0000095974 00000 n +0000096056 00000 n +0000096208 00000 n +0000096297 00000 n +0000096381 00000 n +0000096481 00000 n +0000096563 00000 n +0000096715 00000 n +0000096804 00000 n +0000096888 00000 n +0000096996 00000 n +0000097090 00000 n +0000097172 00000 n +0000097324 00000 n +0000097413 00000 n +0000097497 00000 n +0000097619 00000 n +0000097771 00000 n +0000097865 00000 n +0000097947 00000 n +0000098099 00000 n +0000098188 00000 n +0000098272 00000 n +0000098397 00000 n +0000098549 00000 n +0000098640 00000 n +0000098722 00000 n +0000098874 00000 n +0000098963 00000 n +0000099047 00000 n +0000099172 00000 n +0000099324 00000 n +0000099418 00000 n +0000099500 00000 n +0000099652 00000 n +0000099741 00000 n +0000099825 00000 n +0000099947 00000 n +0000100099 00000 n +0000100193 00000 n +0000100275 00000 n +0000100427 00000 n +0000100516 00000 n +0000100600 00000 n +0000100722 00000 n +0000100874 00000 n +0000100968 00000 n +0000101050 00000 n +0000101202 00000 n +0000101291 00000 n +0000101375 00000 n +0000101497 00000 n +0000101649 00000 n +0000101742 00000 n +0000101824 00000 n +0000101975 00000 n +0000102064 00000 n +0000102148 00000 n +0000102422 00000 n +0000102573 00000 n +0000102717 00000 n +0000102799 00000 n +0000102952 00000 n +0000103041 00000 n +0000103125 00000 n +0000103262 00000 n +0000103415 00000 n +0000103511 00000 n +0000103602 00000 n +0000103684 00000 n +0000103836 00000 n +0000103925 00000 n +0000104009 00000 n +0000104134 00000 n +0000104286 00000 n +0000104377 00000 n +0000104459 00000 n +0000104611 00000 n +0000104700 00000 n +0000104784 00000 n +0000104906 00000 n +0000105058 00000 n +0000105152 00000 n +0000105234 00000 n +0000105386 00000 n +0000105475 00000 n +0000105559 00000 n +0000105678 00000 n +0000105830 00000 n +0000105924 00000 n +0000106006 00000 n +0000106158 00000 n +0000106247 00000 n +0000106331 00000 n +0000106456 00000 n +0000106608 00000 n +0000106699 00000 n +0000106781 00000 n +0000106933 00000 n +0000107022 00000 n +0000107106 00000 n +0000107231 00000 n +0000107445 00000 n +0000107536 00000 n +0000107618 00000 n +0000107770 00000 n +0000107859 00000 n +0000107943 00000 n +0000108065 00000 n +0000108217 00000 n +0000108308 00000 n +0000108390 00000 n +0000108542 00000 n +0000108631 00000 n +0000108715 00000 n +0000108837 00000 n +0000108989 00000 n +0000109080 00000 n +0000109162 00000 n +0000109314 00000 n +0000109403 00000 n +0000109487 00000 n +0000109609 00000 n +0000109761 00000 n +0000109855 00000 n +0000109937 00000 n +0000110089 00000 n +0000110178 00000 n +0000110262 00000 n +0000110373 00000 n +0000110525 00000 n +0000110607 00000 n +0000110759 00000 n +0000110848 00000 n +0000110932 00000 n +0000111054 00000 n +0000111206 00000 n +0000111300 00000 n +0000111382 00000 n +0000111534 00000 n +0000111623 00000 n +0000111707 00000 n +0000111832 00000 n +0000111984 00000 n +0000112075 00000 n +0000112157 00000 n +0000112309 00000 n +0000112398 00000 n +0000112482 00000 n +0000112603 00000 n +0000112755 00000 n +0000112845 00000 n +0000112927 00000 n +0000113078 00000 n +0000113167 00000 n +0000113251 00000 n +0000113369 00000 n +0000113520 00000 n +0000113610 00000 n +0000113692 00000 n +0000113843 00000 n +0000113932 00000 n +0000114016 00000 n +0000114142 00000 n +0000114295 00000 n +0000114391 00000 n +0000114473 00000 n +0000114626 00000 n +0000114715 00000 n +0000114799 00000 n +0000114924 00000 n +0000115076 00000 n +0000115167 00000 n +0000115249 00000 n +0000115401 00000 n +0000115490 00000 n +0000115574 00000 n +0000115699 00000 n +0000115851 00000 n +0000115945 00000 n +0000116027 00000 n +0000116179 00000 n +0000116268 00000 n +0000116352 00000 n +0000116477 00000 n +0000116629 00000 n +0000116720 00000 n +0000116802 00000 n +0000116954 00000 n +0000117043 00000 n +0000117127 00000 n +0000117246 00000 n +0000117398 00000 n +0000117492 00000 n +0000117574 00000 n +0000117726 00000 n +0000117815 00000 n +0000117899 00000 n +0000118021 00000 n +0000118235 00000 n +0000118326 00000 n +0000118408 00000 n +0000118560 00000 n +0000118649 00000 n +0000118733 00000 n +0000118855 00000 n +0000119007 00000 n +0000119107 00000 n +0000119189 00000 n +0000119341 00000 n +0000119430 00000 n +0000119514 00000 n +0000119636 00000 n +0000119788 00000 n +0000119882 00000 n +0000119964 00000 n +0000120116 00000 n +0000120205 00000 n +0000120289 00000 n +0000120394 00000 n +0000120608 00000 n +0000120690 00000 n +0000120842 00000 n +0000120931 00000 n +0000121015 00000 n +0000121140 00000 n +0000121292 00000 n +0000121383 00000 n +0000121465 00000 n +0000121617 00000 n +0000121706 00000 n +0000121790 00000 n +0000121895 00000 n +0000122109 00000 n +0000122191 00000 n +0000122343 00000 n +0000122432 00000 n +0000122516 00000 n +0000122635 00000 n +0000122787 00000 n +0000122881 00000 n +0000122963 00000 n +0000123115 00000 n +0000123204 00000 n +0000123288 00000 n +0000123396 00000 n +0000123490 00000 n +0000123572 00000 n +0000123724 00000 n +0000123813 00000 n +0000123897 00000 n +0000124015 00000 n +0000124167 00000 n +0000124260 00000 n +0000124342 00000 n +0000124493 00000 n +0000124582 00000 n +0000124666 00000 n +0000124782 00000 n +0000124933 00000 n +0000125025 00000 n +0000125107 00000 n +0000125258 00000 n +0000125347 00000 n +0000125431 00000 n +0000125542 00000 n +0000125636 00000 n +0000125718 00000 n +0000125870 00000 n +0000125959 00000 n +0000126043 00000 n +0000126168 00000 n +0000126320 00000 n +0000126411 00000 n +0000126493 00000 n +0000126645 00000 n +0000126734 00000 n +0000126818 00000 n +0000126932 00000 n +0000127023 00000 n +0000127105 00000 n +0000127257 00000 n +0000127346 00000 n +0000127430 00000 n +0000127538 00000 n +0000127632 00000 n +0000127714 00000 n +0000127866 00000 n +0000127955 00000 n +0000128039 00000 n +0000128150 00000 n +0000128241 00000 n +0000128323 00000 n +0000128475 00000 n +0000128564 00000 n +0000128648 00000 n +0000128770 00000 n +0000128922 00000 n +0000129016 00000 n +0000129098 00000 n +0000129250 00000 n +0000129339 00000 n +0000129423 00000 n +0000129545 00000 n +0000129697 00000 n +0000129791 00000 n +0000129873 00000 n +0000130025 00000 n +0000130114 00000 n +0000130198 00000 n +0000130326 00000 n +0000130478 00000 n +0000130569 00000 n +0000130651 00000 n +0000130803 00000 n +0000130892 00000 n +0000130976 00000 n +0000131084 00000 n +0000131175 00000 n +0000131257 00000 n +0000131409 00000 n +0000131498 00000 n +0000131582 00000 n +0000131687 00000 n +0000131839 00000 n +0000131921 00000 n +0000132073 00000 n +0000132162 00000 n +0000132246 00000 n +0000132351 00000 n +0000132565 00000 n +0000132647 00000 n +0000132799 00000 n +0000132888 00000 n +0000132972 00000 n +0000133083 00000 n +0000133180 00000 n +0000133262 00000 n +0000133414 00000 n +0000133503 00000 n +0000133587 00000 n +0000133712 00000 n +0000133864 00000 n +0000133958 00000 n +0000134040 00000 n +0000134192 00000 n +0000134281 00000 n +0000134365 00000 n +0000134476 00000 n +0000134628 00000 n +0000134710 00000 n +0000134862 00000 n +0000134951 00000 n +0000135035 00000 n +0000135142 00000 n +0000135238 00000 n +0000135320 00000 n +0000135471 00000 n +0000135560 00000 n +0000135644 00000 n +0000135760 00000 n +0000135911 00000 n +0000136003 00000 n +0000136085 00000 n +0000136236 00000 n +0000136325 00000 n +0000136409 00000 n +0000136531 00000 n +0000136684 00000 n +0000136780 00000 n +0000136862 00000 n +0000137015 00000 n +0000137104 00000 n +0000137188 00000 n +0000137313 00000 n +0000137466 00000 n +0000137557 00000 n +0000137639 00000 n +0000137791 00000 n +0000137880 00000 n +0000137964 00000 n +0000138086 00000 n +0000138238 00000 n +0000138332 00000 n +0000138414 00000 n +0000138566 00000 n +0000138655 00000 n +0000138739 00000 n +0000138861 00000 n +0000139013 00000 n +0000139104 00000 n +0000139186 00000 n +0000139338 00000 n +0000139427 00000 n +0000139511 00000 n +0000139633 00000 n +0000139785 00000 n +0000139879 00000 n +0000139961 00000 n +0000140113 00000 n +0000140202 00000 n +0000140286 00000 n +0000140405 00000 n +0000140557 00000 n +0000140654 00000 n +0000140736 00000 n +0000140888 00000 n +0000140977 00000 n +0000141061 00000 n +0000141186 00000 n +0000141338 00000 n +0000141432 00000 n +0000141514 00000 n +0000141666 00000 n +0000141755 00000 n +0000141839 00000 n +0000141969 00000 n +0000142121 00000 n +0000142215 00000 n +0000142306 00000 n +0000142388 00000 n +0000142540 00000 n +0000142629 00000 n +0000142713 00000 n +0000142832 00000 n +0000142984 00000 n +0000143078 00000 n +0000143160 00000 n +0000143312 00000 n +0000143401 00000 n +0000143485 00000 n +0000143607 00000 n +0000143759 00000 n +0000143853 00000 n +0000143935 00000 n +0000144087 00000 n +0000144176 00000 n +0000144260 00000 n +0000144379 00000 n +0000144593 00000 n +0000144690 00000 n +0000144772 00000 n +0000144924 00000 n +0000145013 00000 n +0000145097 00000 n +0000145216 00000 n +0000145430 00000 n +0000145521 00000 n +0000145603 00000 n +0000145755 00000 n +0000145844 00000 n +0000145928 00000 n +0000146050 00000 n +0000146202 00000 n +0000146296 00000 n +0000146378 00000 n +0000146529 00000 n +0000146618 00000 n +0000146702 00000 n +0000146822 00000 n +0000146973 00000 n +0000147065 00000 n +0000147147 00000 n +0000147298 00000 n +0000147387 00000 n +0000147471 00000 n +0000147585 00000 n +0000147677 00000 n +0000147759 00000 n +0000147912 00000 n +0000148001 00000 n +0000148085 00000 n +0000148214 00000 n +0000148367 00000 n +0000148462 00000 n +0000148544 00000 n +0000148696 00000 n +0000148785 00000 n +0000148869 00000 n +0000148977 00000 n +0000149068 00000 n +0000149150 00000 n +0000149302 00000 n +0000149391 00000 n +0000149475 00000 n +0000149597 00000 n +0000149749 00000 n +0000149840 00000 n +0000149922 00000 n +0000150074 00000 n +0000150163 00000 n +0000150247 00000 n +0000150375 00000 n +0000150527 00000 n +0000150621 00000 n +0000150703 00000 n +0000150855 00000 n +0000150944 00000 n +0000151028 00000 n +0000151153 00000 n +0000151305 00000 n +0000151399 00000 n +0000151481 00000 n +0000151633 00000 n +0000151722 00000 n +0000151806 00000 n +0000151917 00000 n +0000152011 00000 n +0000152093 00000 n +0000152245 00000 n +0000152334 00000 n +0000152418 00000 n +0000152540 00000 n +0000152692 00000 n +0000152783 00000 n +0000152865 00000 n +0000153017 00000 n +0000153106 00000 n +0000153190 00000 n +0000153290 00000 n +0000153372 00000 n +0000153524 00000 n +0000153613 00000 n +0000153697 00000 n +0000153811 00000 n +0000153902 00000 n +0000153984 00000 n +0000154136 00000 n +0000154225 00000 n +0000154309 00000 n +0000154442 00000 n +0000154594 00000 n +0000154688 00000 n +0000154779 00000 n +0000154861 00000 n +0000155013 00000 n +0000155102 00000 n +0000155186 00000 n +0000155297 00000 n +0000155388 00000 n +0000155470 00000 n +0000155622 00000 n +0000155711 00000 n +0000155795 00000 n +0000155928 00000 n +0000156080 00000 n +0000156171 00000 n +0000156262 00000 n +0000156344 00000 n +0000156496 00000 n +0000156585 00000 n +0000156669 00000 n +0000156799 00000 n +0000156951 00000 n +0000157048 00000 n +0000157139 00000 n +0000157221 00000 n +0000157373 00000 n +0000157462 00000 n +0000157546 00000 n +0000157654 00000 n +0000157867 00000 n +0000157949 00000 n +0000158100 00000 n +0000158189 00000 n +0000158273 00000 n +0000158381 00000 n +0000158532 00000 n +0000158614 00000 n +0000158765 00000 n +0000158854 00000 n +0000158938 00000 n +0000159049 00000 n +0000159140 00000 n +0000159222 00000 n +0000159374 00000 n +0000159463 00000 n +0000159547 00000 n +0000159672 00000 n +0000159824 00000 n +0000159918 00000 n +0000160000 00000 n +0000160152 00000 n +0000160241 00000 n +0000160325 00000 n +0000160433 00000 n +0000160524 00000 n +0000160606 00000 n +0000160758 00000 n +0000160847 00000 n +0000160931 00000 n +0000161056 00000 n +0000161208 00000 n +0000161299 00000 n +0000161381 00000 n +0000161533 00000 n +0000161622 00000 n +0000161706 00000 n +0000161828 00000 n +0000161980 00000 n +0000162071 00000 n +0000162153 00000 n +0000162305 00000 n +0000162394 00000 n +0000162478 00000 n +0000162597 00000 n +0000162749 00000 n +0000162846 00000 n +0000162928 00000 n +0000163080 00000 n +0000163189 00000 n +0000163311 00000 n +0000163463 00000 n +0000163628 00000 n +0000163722 00000 n +0000163813 00000 n +0000163904 00000 n +0000163994 00000 n +0000164104 00000 n +0000164531 00000 n +0000164621 00000 n +0000164713 00000 n +0000164866 00000 n +0000164958 00000 n +0000165111 00000 n +0000165264 00000 n +0000165417 00000 n +0000165513 00000 n +0000165787 00000 n +0000165940 00000 n +0000166034 00000 n +0000166187 00000 n +0000166339 00000 n +0000166432 00000 n +0000166525 00000 n +0000166677 00000 n +0000166829 00000 n +0000166981 00000 n +0000167076 00000 n +0000167271 00000 n +0000167423 00000 n +0000167516 00000 n +0000167609 00000 n +0000167761 00000 n +0000167913 00000 n +0000168008 00000 n +0000168107 00000 n +0000168230 00000 n +0000168492 00000 n +0000168644 00000 n +0000168796 00000 n +0000168948 00000 n +0000169100 00000 n +0000169252 00000 n +0000169404 00000 n +0000169556 00000 n +0000169707 00000 n +0000169858 00000 n +0000169952 00000 n +0000170272 00000 n +0000170425 00000 n +0000170519 00000 n +0000170672 00000 n +0000170825 00000 n +0000170978 00000 n +0000171130 00000 n +0000171223 00000 n +0000171375 00000 n +0000171527 00000 n +0000171622 00000 n +0000172020 00000 n +0000172172 00000 n +0000172265 00000 n +0000172358 00000 n +0000172510 00000 n +0000172662 00000 n +0000172755 00000 n +0000172907 00000 n +0000173059 00000 n +0000173211 00000 n +0000173363 00000 n +0000173515 00000 n +0000173667 00000 n +0000173819 00000 n +0000173910 00000 n +0000174062 00000 n +0000174152 00000 n +0000174246 00000 n +0000174495 00000 n +0000174619 00000 n +0000174887 00000 n +0000175039 00000 n +0000175191 00000 n +0000175282 00000 n +0000175376 00000 n +0000175467 00000 n +0000175558 00000 n +0000175649 00000 n +0000175740 00000 n +0000175892 00000 n +0000176044 00000 n +0000176139 00000 n +0000176365 00000 n +0000176517 00000 n +0000176616 00000 n +0000176768 00000 n +0000176859 00000 n +0000177011 00000 n +0000177163 00000 n +0000177257 00000 n +0000177358 00000 n +0000177509 00000 n +0000177630 00000 n +0000177923 00000 n +0000178075 00000 n +0000178227 00000 n +0000178379 00000 n +0000178473 00000 n +0000178625 00000 n +0000178720 00000 n +0000178898 00000 n +0000179050 00000 n +0000179141 00000 n +0000179232 00000 n +0000179384 00000 n +0000179479 00000 n +0000179711 00000 n +0000179802 00000 n +0000179893 00000 n +0000180045 00000 n +0000180197 00000 n +0000180349 00000 n +0000180440 00000 n +0000180592 00000 n +0000180687 00000 n +0000180791 00000 n +0000180942 00000 n +0000181069 00000 n +0000181160 00000 n +0000181272 00000 n +0000181371 00000 n +0000181586 00000 n +0000181739 00000 n +0000181892 00000 n +0000182045 00000 n +0000182197 00000 n +0000182308 00000 n +0000182403 00000 n +0000182562 00000 n +0000182653 00000 n +0000182805 00000 n +0000182900 00000 n +0000183043 00000 n +0000183139 00000 n +0000183241 00000 n +0000183337 00000 n +0000183432 00000 n +0000183578 00000 n +0000183730 00000 n +0000183821 00000 n +0000183912 00000 n +0000184003 00000 n +0000184127 00000 n +0000184223 00000 n +0000184318 00000 n +0000184479 00000 n +0000184631 00000 n +0000184742 00000 n +0000184837 00000 n +0000184932 00000 n +0000185026 00000 n +0000185256 00000 n +0000185355 00000 n +0000185451 00000 n +0000185547 00000 n +0000185681 00000 n +0000185792 00000 n +0000185934 00000 n +0000186030 00000 n +0000186126 00000 n +0000186249 00000 n +0000186414 00000 n +0000186510 00000 n +0000186606 00000 n +0000186702 00000 n +0000186798 00000 n +0000186894 00000 n +0000186990 00000 n +0000187135 00000 n +0000187622 00000 n +0000187773 00000 n +0000187926 00000 n +0000188128 00000 n +0000188283 00000 n +0000188438 00000 n +0000188592 00000 n +0000188687 00000 n +0000188841 00000 n +0000188936 00000 n +0000189150 00000 n +0000189304 00000 n +0000189458 00000 n +0000189553 00000 n +0000189648 00000 n +0000189802 00000 n +0000189956 00000 n +0000190110 00000 n +0000190261 00000 n +0000190354 00000 n +0000190447 00000 n +0000190601 00000 n +0000190698 00000 n +0000190906 00000 n +0000191060 00000 n +0000191155 00000 n +0000191250 00000 n +0000191345 00000 n +0000191440 00000 n +0000191577 00000 n +0000191673 00000 n +0000191758 00000 n +0000191903 00000 n +0000192076 00000 n +0000192161 00000 n +0000192306 00000 n +0000192478 00000 n +0000192599 00000 n +0000192692 00000 n +0000192789 00000 n +0000192886 00000 n +0000193022 00000 n +0000193396 00000 n +0000193549 00000 n +0000193703 00000 n +0000193857 00000 n +0000193954 00000 n +0000194087 00000 n +0000194241 00000 n +0000194419 00000 n +0000194514 00000 n +0000194668 00000 n +0000194822 00000 n +0000194976 00000 n +0000195073 00000 n +0000195176 00000 n +0000195308 00000 n +0000195442 00000 n +0000195596 00000 n +0000195692 00000 n +0000196146 00000 n +0000196240 00000 n +0000196394 00000 n +0000196548 00000 n +0000196645 00000 n +0000196760 00000 n +0000196857 00000 n +0000196951 00000 n +0000197180 00000 n +0000197273 00000 n +0000197366 00000 n +0000197459 00000 n +0000197554 00000 n +0000197647 00000 n +0000197742 00000 n +0000197835 00000 n +0000197989 00000 n +0000198112 00000 n +0000198215 00000 n +0000198328 00000 n +0000198445 00000 n +0000198541 00000 n +0000199035 00000 n +0000199188 00000 n +0000199342 00000 n +0000199439 00000 n +0000199605 00000 n +0000199759 00000 n +0000199913 00000 n +0000200067 00000 n +0000200164 00000 n +0000200315 00000 n +0000200469 00000 n +0000200623 00000 n +0000200720 00000 n +0000200865 00000 n +0000201008 00000 n +0000201101 00000 n +0000201194 00000 n +0000201279 00000 n +0000201424 00000 n +0000201596 00000 n +0000201681 00000 n +0000201826 00000 n +0000201998 00000 n +0000202120 00000 n +0000202205 00000 n +0000202350 00000 n +0000202522 00000 n +0000202607 00000 n +0000202752 00000 n +0000202924 00000 n +0000203045 00000 n +0000203157 00000 n +0000203252 00000 n +0000203397 00000 n +0000203959 00000 n +0000204036 00000 n +0000204130 00000 n +0000204277 00000 n +0000204426 00000 n +0000204503 00000 n +0000204580 00000 n +0000204665 00000 n +0000204812 00000 n +0000204915 00000 n +0000205062 00000 n +0000205212 00000 n +0000205358 00000 n +0000205435 00000 n +0000205512 00000 n +0000205589 00000 n +0000205674 00000 n +0000205820 00000 n +0000205905 00000 n +0000206051 00000 n +0000206128 00000 n +0000206205 00000 n +0000206282 00000 n +0000206359 00000 n +0000206444 00000 n +0000206590 00000 n +0000206702 00000 n +0000206850 00000 n +0000206998 00000 n +0000207146 00000 n +0000207294 00000 n +0000207371 00000 n +0000207448 00000 n +0000207533 00000 n +0000207679 00000 n +0000207764 00000 n +0000207912 00000 n +0000207989 00000 n +0000208066 00000 n +0000208143 00000 n +0000208228 00000 n +0000208376 00000 n +0000208470 00000 n +0000208618 00000 n +0000208768 00000 n +0000208845 00000 n +0000208930 00000 n +0000209078 00000 n +0000209181 00000 n +0000209329 00000 n +0000209480 00000 n +0000209628 00000 n +0000209705 00000 n +0000209782 00000 n +0000209859 00000 n +0000209944 00000 n +0000210092 00000 n +0000210177 00000 n +0000210325 00000 n +0000210402 00000 n +0000210479 00000 n +0000210556 00000 n +0000210633 00000 n +0000210718 00000 n +0000210866 00000 n +0000210978 00000 n +0000211130 00000 n +0000211280 00000 n +0000211430 00000 n +0000211580 00000 n +0000211657 00000 n +0000211734 00000 n +0000211811 00000 n +0000211896 00000 n +0000212044 00000 n +0000212129 00000 n +0000212279 00000 n +0000212356 00000 n +0000212441 00000 n +0000212589 00000 n +0000212692 00000 n +0000212840 00000 n +0000212991 00000 n +0000213139 00000 n +0000213216 00000 n +0000213293 00000 n +0000213378 00000 n +0000213526 00000 n +0000213620 00000 n +0000213768 00000 n +0000213918 00000 n +0000214003 00000 n +0000214151 00000 n +0000214228 00000 n +0000214330 00000 n +0000214428 00000 n +0000214572 00000 n +0000214668 00000 n +0000214792 00000 n +0000214877 00000 n +0000215022 00000 n +0000215195 00000 n +0000215280 00000 n +0000215425 00000 n +0000215598 00000 n +0000215696 00000 n +0000215814 00000 n +0000215910 00000 n +0000216006 00000 n +0000216151 00000 n +0000216785 00000 n +0000216862 00000 n +0000216956 00000 n +0000217104 00000 n +0000217254 00000 n +0000217331 00000 n +0000217416 00000 n +0000217564 00000 n +0000217685 00000 n +0000217833 00000 n +0000217984 00000 n +0000218132 00000 n +0000218283 00000 n +0000218430 00000 n +0000218507 00000 n +0000218584 00000 n +0000218661 00000 n +0000218746 00000 n +0000218893 00000 n +0000219014 00000 n +0000219161 00000 n +0000219311 00000 n +0000219458 00000 n +0000219608 00000 n +0000219755 00000 n +0000219832 00000 n +0000219909 00000 n +0000219986 00000 n +0000220063 00000 n +0000220148 00000 n +0000220295 00000 n +0000220452 00000 n +0000220599 00000 n +0000220748 00000 n +0000220898 00000 n +0000221045 00000 n +0000221195 00000 n +0000221342 00000 n +0000221492 00000 n +0000221639 00000 n +0000221788 00000 n +0000221865 00000 n +0000221942 00000 n +0000222027 00000 n +0000222174 00000 n +0000222277 00000 n +0000222424 00000 n +0000222574 00000 n +0000222721 00000 n +0000222798 00000 n +0000222875 00000 n +0000222952 00000 n +0000223037 00000 n +0000223184 00000 n +0000223296 00000 n +0000223446 00000 n +0000223595 00000 n +0000223744 00000 n +0000223893 00000 n +0000223970 00000 n +0000224055 00000 n +0000224202 00000 n +0000224314 00000 n +0000224464 00000 n +0000224611 00000 n +0000224761 00000 n +0000224908 00000 n +0000224985 00000 n +0000225062 00000 n +0000225147 00000 n +0000225294 00000 n +0000225388 00000 n +0000225535 00000 n +0000225684 00000 n +0000225769 00000 n +0000225916 00000 n +0000226010 00000 n +0000226157 00000 n +0000226306 00000 n +0000226383 00000 n +0000226468 00000 n +0000226615 00000 n +0000226700 00000 n +0000226847 00000 n +0000226924 00000 n +0000227009 00000 n +0000227156 00000 n +0000227268 00000 n +0000227421 00000 n +0000227570 00000 n +0000227719 00000 n +0000227868 00000 n +0000227945 00000 n +0000228022 00000 n +0000228107 00000 n +0000228254 00000 n +0000228375 00000 n +0000228522 00000 n +0000228672 00000 n +0000228819 00000 n +0000228969 00000 n +0000229116 00000 n +0000229193 00000 n +0000229270 00000 n +0000229355 00000 n +0000229502 00000 n +0000229659 00000 n +0000229809 00000 n +0000229958 00000 n +0000230107 00000 n +0000230257 00000 n +0000230407 00000 n +0000230556 00000 n +0000230706 00000 n +0000230853 00000 n +0000231002 00000 n +0000231079 00000 n +0000231156 00000 n +0000231233 00000 n +0000231318 00000 n +0000231465 00000 n +0000231559 00000 n +0000231706 00000 n +0000231855 00000 n +0000231932 00000 n +0000232017 00000 n +0000232164 00000 n +0000232276 00000 n +0000232426 00000 n +0000232573 00000 n +0000232723 00000 n +0000232870 00000 n +0000232947 00000 n +0000233024 00000 n +0000233109 00000 n +0000233256 00000 n +0000233350 00000 n +0000233497 00000 n +0000233646 00000 n +0000233731 00000 n +0000233878 00000 n +0000233955 00000 n +0000234056 00000 n +0000234153 00000 n +0000234320 00000 n +0000234415 00000 n +0000234510 00000 n +0000234603 00000 n +0000234698 00000 n +0000234792 00000 n +0000234888 00000 n +0000234982 00000 n +0000235127 00000 n +0000236139 00000 n +0000236216 00000 n +0000236310 00000 n +0000236456 00000 n +0000236604 00000 n +0000236681 00000 n +0000236766 00000 n +0000236912 00000 n +0000237033 00000 n +0000237181 00000 n +0000237332 00000 n +0000237480 00000 n +0000237631 00000 n +0000237779 00000 n +0000237856 00000 n +0000237941 00000 n +0000238089 00000 n +0000238183 00000 n +0000238331 00000 n +0000238481 00000 n +0000238558 00000 n +0000238643 00000 n +0000238791 00000 n +0000238948 00000 n +0000239096 00000 n +0000239247 00000 n +0000239395 00000 n +0000239546 00000 n +0000239694 00000 n +0000239845 00000 n +0000239993 00000 n +0000240144 00000 n +0000240292 00000 n +0000240369 00000 n +0000240446 00000 n +0000240523 00000 n +0000240600 00000 n +0000240677 00000 n +0000240762 00000 n +0000240910 00000 n +0000240995 00000 n +0000241145 00000 n +0000241222 00000 n +0000241299 00000 n +0000241376 00000 n +0000241461 00000 n +0000241609 00000 n +0000241712 00000 n +0000241860 00000 n +0000242011 00000 n +0000242159 00000 n +0000242236 00000 n +0000242313 00000 n +0000242390 00000 n +0000242467 00000 n +0000242552 00000 n +0000242700 00000 n +0000242821 00000 n +0000242969 00000 n +0000243120 00000 n +0000243268 00000 n +0000243419 00000 n +0000243567 00000 n +0000243644 00000 n +0000243721 00000 n +0000243798 00000 n +0000243875 00000 n +0000243960 00000 n +0000244108 00000 n +0000244229 00000 n +0000244377 00000 n +0000244528 00000 n +0000244676 00000 n +0000244827 00000 n +0000244975 00000 n +0000245052 00000 n +0000245129 00000 n +0000245206 00000 n +0000245283 00000 n +0000245360 00000 n +0000245445 00000 n +0000245593 00000 n +0000245714 00000 n +0000245862 00000 n +0000246012 00000 n +0000246163 00000 n +0000246311 00000 n +0000246461 00000 n +0000246538 00000 n +0000246615 00000 n +0000246692 00000 n +0000246777 00000 n +0000246925 00000 n +0000247028 00000 n +0000247176 00000 n +0000247327 00000 n +0000247475 00000 n +0000247552 00000 n +0000247629 00000 n +0000247706 00000 n +0000247783 00000 n +0000247868 00000 n +0000248016 00000 n +0000248137 00000 n +0000248285 00000 n +0000248436 00000 n +0000248584 00000 n +0000248735 00000 n +0000248883 00000 n +0000248960 00000 n +0000249037 00000 n +0000249114 00000 n +0000249191 00000 n +0000249276 00000 n +0000249424 00000 n +0000249545 00000 n +0000249693 00000 n +0000249844 00000 n +0000249992 00000 n +0000250143 00000 n +0000250291 00000 n +0000250368 00000 n +0000250445 00000 n +0000250522 00000 n +0000250599 00000 n +0000250676 00000 n +0000250761 00000 n +0000250909 00000 n +0000251066 00000 n +0000251214 00000 n +0000251364 00000 n +0000251515 00000 n +0000251663 00000 n +0000251814 00000 n +0000251962 00000 n +0000252113 00000 n +0000252261 00000 n +0000252411 00000 n +0000252488 00000 n +0000252565 00000 n +0000252642 00000 n +0000252719 00000 n +0000252804 00000 n +0000252952 00000 n +0000253064 00000 n +0000253214 00000 n +0000253364 00000 n +0000253513 00000 n +0000253662 00000 n +0000253739 00000 n +0000253816 00000 n +0000253901 00000 n +0000254048 00000 n +0000254151 00000 n +0000254298 00000 n +0000254448 00000 n +0000254595 00000 n +0000254672 00000 n +0000254749 00000 n +0000254826 00000 n +0000254911 00000 n +0000255058 00000 n +0000255143 00000 n +0000255292 00000 n +0000255369 00000 n +0000255454 00000 n +0000255601 00000 n +0000255758 00000 n +0000255905 00000 n +0000256055 00000 n +0000256202 00000 n +0000256352 00000 n +0000256499 00000 n +0000256649 00000 n +0000256796 00000 n +0000256946 00000 n +0000257093 00000 n +0000257170 00000 n +0000257247 00000 n +0000257324 00000 n +0000257409 00000 n +0000257556 00000 n +0000257668 00000 n +0000257818 00000 n +0000257967 00000 n +0000258116 00000 n +0000258265 00000 n +0000258342 00000 n +0000258427 00000 n +0000258574 00000 n +0000258686 00000 n +0000258836 00000 n +0000258983 00000 n +0000259133 00000 n +0000259280 00000 n +0000259357 00000 n +0000259442 00000 n +0000259589 00000 n +0000259692 00000 n +0000259839 00000 n +0000259989 00000 n +0000260136 00000 n +0000260213 00000 n +0000260298 00000 n +0000260445 00000 n +0000260548 00000 n +0000260695 00000 n +0000260845 00000 n +0000260992 00000 n +0000261069 00000 n +0000261146 00000 n +0000261231 00000 n +0000261378 00000 n +0000261472 00000 n +0000261619 00000 n +0000261768 00000 n +0000261853 00000 n +0000262000 00000 n +0000262077 00000 n +0000262178 00000 n +0000262275 00000 n +0000262456 00000 n +0000262551 00000 n +0000262646 00000 n +0000262741 00000 n +0000262836 00000 n +0000262929 00000 n +0000263022 00000 n +0000263119 00000 n +0000263234 00000 n +0000263327 00000 n +0000263422 00000 n +0000263582 00000 n +0000263736 00000 n +0000263890 00000 n +0000263983 00000 n +0000264108 00000 n +0000264216 00000 n +0000264310 00000 n +0000264483 00000 n +0000264576 00000 n +0000264680 00000 n +0000264774 00000 n +0000264867 00000 n +0000264960 00000 n +0000265317 00000 n +0000265411 00000 n +0000265507 00000 n +0000265603 00000 n +0000265698 00000 n +0000265792 00000 n +0000265885 00000 n +0000265993 00000 n +0000266088 00000 n +0000266182 00000 n +0000266275 00000 n +0000266383 00000 n +0000266478 00000 n +0000266572 00000 n +0000266665 00000 n +0000266782 00000 n +0000266877 00000 n +0000266972 00000 n +0000267066 00000 n +0000267163 00000 n +0000267305 00000 n +0000267400 00000 n +0000267495 00000 n +0000267588 00000 n +0000267742 00000 n +0000267837 00000 n +0000268020 00000 n +0000268113 00000 n +0000268218 00000 n +0000268313 00000 n +0000268407 00000 n +0000268500 00000 n +0000268617 00000 n +0000268712 00000 n +0000268807 00000 n +0000268901 00000 n +0000268994 00000 n +0000269099 00000 n +0000269194 00000 n +0000269288 00000 n +0000269381 00000 n +0000269486 00000 n +0000269581 00000 n +0000269675 00000 n +0000269768 00000 n +0000269873 00000 n +0000269968 00000 n +0000270062 00000 n +0000270155 00000 n +0000270260 00000 n +0000270355 00000 n +0000270449 00000 n +0000270562 00000 n +0000270655 00000 n +0000270758 00000 n +0000270882 00000 n +0000270975 00000 n +0000271129 00000 n +0000271263 00000 n +0000271447 00000 n +0000271540 00000 n +0000271636 00000 n +0000271731 00000 n +0000271826 00000 n +0000271921 00000 n +0000272014 00000 n +0000272132 00000 n +0000272593 00000 n +0000272746 00000 n +0000272843 00000 n +0000272937 00000 n +0000273036 00000 n +0000273130 00000 n +0000273389 00000 n +0000273544 00000 n +0000273640 00000 n +0000273739 00000 n +0000273833 00000 n +0000273929 00000 n +0000274025 00000 n +0000274180 00000 n +0000274276 00000 n +0000274372 00000 n +0000274468 00000 n +0000274623 00000 n +0000274768 00000 n +0000275060 00000 n +0000275137 00000 n +0000275240 00000 n +0000275388 00000 n +0000275539 00000 n +0000275687 00000 n +0000275764 00000 n +0000275841 00000 n +0000275926 00000 n +0000276074 00000 n +0000276213 00000 n +0000276361 00000 n +0000276517 00000 n +0000276667 00000 n +0000276817 00000 n +0000276968 00000 n +0000277116 00000 n +0000277266 00000 n +0000277343 00000 n +0000277420 00000 n +0000277505 00000 n +0000277653 00000 n +0000277783 00000 n +0000277939 00000 n +0000278089 00000 n +0000278239 00000 n +0000278390 00000 n +0000278538 00000 n +0000278688 00000 n +0000278765 00000 n +0000278842 00000 n +0000278919 00000 n +0000279004 00000 n +0000279152 00000 n +0000279237 00000 n +0000279386 00000 n +0000279463 00000 n +0000279548 00000 n +0000279695 00000 n +0000279798 00000 n +0000279945 00000 n +0000280095 00000 n +0000280242 00000 n +0000280319 00000 n +0000280396 00000 n +0000280481 00000 n +0000280628 00000 n +0000280722 00000 n +0000280869 00000 n +0000281018 00000 n +0000281103 00000 n +0000281250 00000 n +0000281327 00000 n +0000281428 00000 n +0000281525 00000 n +0000281763 00000 n +0000281917 00000 n +0000282012 00000 n +0000282166 00000 n +0000282261 00000 n +0000282356 00000 n +0000282451 00000 n +0000282544 00000 n +0000282639 00000 n +0000282734 00000 n +0000282827 00000 n +0000282981 00000 n +0000283098 00000 n +0000283270 00000 n +0000283424 00000 n +0000283578 00000 n +0000283671 00000 n +0000283766 00000 n +0000283861 00000 n +0000283954 00000 n +0000284087 00000 n +0000284241 00000 n +0000284336 00000 n +0000284490 00000 n +0000284635 00000 n +0000285485 00000 n +0000285562 00000 n +0000285665 00000 n +0000285812 00000 n +0000285962 00000 n +0000286109 00000 n +0000286186 00000 n +0000286263 00000 n +0000286340 00000 n +0000286425 00000 n +0000286572 00000 n +0000286657 00000 n +0000286806 00000 n +0000286883 00000 n +0000286968 00000 n +0000287115 00000 n +0000287218 00000 n +0000287365 00000 n +0000287515 00000 n +0000287662 00000 n +0000287739 00000 n +0000287816 00000 n +0000287893 00000 n +0000287978 00000 n +0000288125 00000 n +0000288264 00000 n +0000288411 00000 n +0000288560 00000 n +0000288710 00000 n +0000288857 00000 n +0000289007 00000 n +0000289154 00000 n +0000289303 00000 n +0000289380 00000 n +0000289465 00000 n +0000289612 00000 n +0000289715 00000 n +0000289862 00000 n +0000290012 00000 n +0000290159 00000 n +0000290236 00000 n +0000290321 00000 n +0000290468 00000 n +0000290562 00000 n +0000290709 00000 n +0000290858 00000 n +0000290935 00000 n +0000291012 00000 n +0000291097 00000 n +0000291243 00000 n +0000291337 00000 n +0000291483 00000 n +0000291631 00000 n +0000291716 00000 n +0000291862 00000 n +0000291965 00000 n +0000292111 00000 n +0000292260 00000 n +0000292406 00000 n +0000292483 00000 n +0000292560 00000 n +0000292637 00000 n +0000292722 00000 n +0000292868 00000 n +0000292953 00000 n +0000293101 00000 n +0000293178 00000 n +0000293263 00000 n +0000293409 00000 n +0000293512 00000 n +0000293660 00000 n +0000293811 00000 n +0000293959 00000 n +0000294036 00000 n +0000294113 00000 n +0000294190 00000 n +0000294275 00000 n +0000294423 00000 n +0000294553 00000 n +0000294705 00000 n +0000294855 00000 n +0000295054 00000 n +0000295205 00000 n +0000295353 00000 n +0000295503 00000 n +0000295580 00000 n +0000295665 00000 n +0000295813 00000 n +0000295916 00000 n +0000296064 00000 n +0000296215 00000 n +0000296363 00000 n +0000296440 00000 n +0000296525 00000 n +0000296673 00000 n +0000296830 00000 n +0000296982 00000 n +0000297181 00000 n +0000297332 00000 n +0000297480 00000 n +0000297631 00000 n +0000297783 00000 n +0000297933 00000 n +0000298084 00000 n +0000298232 00000 n +0000298309 00000 n +0000298394 00000 n +0000298542 00000 n +0000298654 00000 n +0000298802 00000 n +0000298953 00000 n +0000299105 00000 n +0000299304 00000 n +0000299381 00000 n +0000299458 00000 n +0000299543 00000 n +0000299691 00000 n +0000299785 00000 n +0000299933 00000 n +0000300083 00000 n +0000300168 00000 n +0000300316 00000 n +0000300419 00000 n +0000300567 00000 n +0000300718 00000 n +0000300866 00000 n +0000300943 00000 n +0000301020 00000 n +0000301097 00000 n +0000301182 00000 n +0000301330 00000 n +0000301415 00000 n +0000301565 00000 n +0000301642 00000 n +0000301727 00000 n +0000301875 00000 n +0000301978 00000 n +0000302126 00000 n +0000302277 00000 n +0000302425 00000 n +0000302502 00000 n +0000302579 00000 n +0000302656 00000 n +0000302741 00000 n +0000302889 00000 n +0000303028 00000 n +0000303176 00000 n +0000303326 00000 n +0000303477 00000 n +0000303625 00000 n +0000303776 00000 n +0000303924 00000 n +0000304074 00000 n +0000304151 00000 n +0000304236 00000 n +0000304384 00000 n +0000304496 00000 n +0000304648 00000 n +0000304798 00000 n +0000304948 00000 n +0000305098 00000 n +0000305175 00000 n +0000305260 00000 n +0000305408 00000 n +0000305511 00000 n +0000305659 00000 n +0000305810 00000 n +0000305958 00000 n +0000306035 00000 n +0000306120 00000 n +0000306268 00000 n +0000306398 00000 n +0000306550 00000 n +0000306700 00000 n +0000306850 00000 n +0000307001 00000 n +0000307149 00000 n +0000307299 00000 n +0000307376 00000 n +0000307461 00000 n +0000307609 00000 n +0000307721 00000 n +0000307888 00000 n +0000308035 00000 n +0000308185 00000 n +0000308332 00000 n +0000308409 00000 n +0000308486 00000 n +0000308571 00000 n +0000308718 00000 n +0000308812 00000 n +0000308959 00000 n +0000309108 00000 n +0000309193 00000 n +0000309340 00000 n +0000309417 00000 n +0000309518 00000 n +0000309615 00000 n +0000309928 00000 n +0000310023 00000 n +0000310118 00000 n +0000310213 00000 n +0000310308 00000 n +0000310406 00000 n +0000310501 00000 n +0000310596 00000 n +0000310691 00000 n +0000310845 00000 n +0000310941 00000 n +0000311037 00000 n +0000311122 00000 n +0000311267 00000 n +0000311440 00000 n +0000311525 00000 n +0000311670 00000 n +0000311842 00000 n +0000311937 00000 n +0000312032 00000 n +0000312127 00000 n +0000312222 00000 n +0000312317 00000 n +0000312471 00000 n +0000312625 00000 n +0000312770 00000 n +0000313233 00000 n +0000313310 00000 n +0000313404 00000 n +0000313551 00000 n +0000313700 00000 n +0000313777 00000 n +0000313862 00000 n +0000314009 00000 n +0000314094 00000 n +0000314241 00000 n +0000314318 00000 n +0000314403 00000 n +0000314550 00000 n +0000314671 00000 n +0000314818 00000 n +0000314968 00000 n +0000315115 00000 n +0000315265 00000 n +0000315412 00000 n +0000315489 00000 n +0000315583 00000 n +0000315730 00000 n +0000315859 00000 n +0000315980 00000 n +0000316127 00000 n +0000316277 00000 n +0000316424 00000 n +0000316574 00000 n +0000316721 00000 n +0000316798 00000 n +0000316883 00000 n +0000317030 00000 n +0000317133 00000 n +0000317280 00000 n +0000317430 00000 n +0000317577 00000 n +0000317654 00000 n +0000317739 00000 n +0000317886 00000 n +0000317971 00000 n +0000318118 00000 n +0000318195 00000 n +0000318272 00000 n +0000318349 00000 n +0000318434 00000 n +0000318581 00000 n +0000318693 00000 n +0000318843 00000 n +0000318990 00000 n +0000319140 00000 n +0000319287 00000 n +0000319364 00000 n +0000319441 00000 n +0000319518 00000 n +0000319595 00000 n +0000319680 00000 n +0000319827 00000 n +0000319930 00000 n +0000320080 00000 n +0000320229 00000 n +0000320378 00000 n +0000320455 00000 n +0000320532 00000 n +0000320617 00000 n +0000320764 00000 n +0000320849 00000 n +0000320996 00000 n +0000321073 00000 n +0000321150 00000 n +0000321227 00000 n +0000321312 00000 n +0000321459 00000 n +0000321553 00000 n +0000321700 00000 n +0000321849 00000 n +0000321926 00000 n +0000322003 00000 n +0000322097 00000 n +0000322244 00000 n +0000322373 00000 n +0000322467 00000 n +0000322614 00000 n +0000322763 00000 n +0000322848 00000 n +0000322995 00000 n +0000323072 00000 n +0000323172 00000 n +0000323268 00000 n +0000323837 00000 n +0000323934 00000 n +0000324028 00000 n +0000324125 00000 n +0000324280 00000 n +0000324376 00000 n +0000324470 00000 n +0000324625 00000 n +0000324721 00000 n +0000324820 00000 n +0000324975 00000 n +0000325071 00000 n +0000325167 00000 n +0000325263 00000 n +0000325362 00000 n +0000325458 00000 n +0000325552 00000 n +0000325707 00000 n +0000325928 00000 n +0000326024 00000 n +0000326179 00000 n +0000326282 00000 n +0000326378 00000 n +0000326474 00000 n +0000326629 00000 n +0000326784 00000 n +0000326880 00000 n +0000326974 00000 n +0000327098 00000 n +0000327383 00000 n +0000327479 00000 n +0000327634 00000 n +0000327733 00000 n +0000327832 00000 n +0000327928 00000 n +0000328024 00000 n +0000328179 00000 n +0000328278 00000 n +0000328374 00000 n +0000328473 00000 n +0000328569 00000 n +0000328665 00000 n +0000328763 00000 n +0000328908 00000 n +0000329272 00000 n +0000329349 00000 n +0000329434 00000 n +0000329584 00000 n +0000329661 00000 n +0000329738 00000 n +0000329815 00000 n +0000329892 00000 n +0000329977 00000 n +0000330125 00000 n +0000330210 00000 n +0000330358 00000 n +0000330435 00000 n +0000330512 00000 n +0000330589 00000 n +0000330666 00000 n +0000330743 00000 n +0000330828 00000 n +0000330976 00000 n +0000331160 00000 n +0000331308 00000 n +0000331458 00000 n +0000331606 00000 n +0000331754 00000 n +0000331905 00000 n +0000332053 00000 n +0000332201 00000 n +0000332353 00000 n +0000332503 00000 n +0000332653 00000 n +0000332800 00000 n +0000332949 00000 n +0000333026 00000 n +0000333103 00000 n +0000333180 00000 n +0000333257 00000 n +0000333342 00000 n +0000333489 00000 n +0000333601 00000 n +0000333751 00000 n +0000333900 00000 n +0000334049 00000 n +0000334198 00000 n +0000334275 00000 n +0000334352 00000 n +0000334429 00000 n +0000334514 00000 n +0000334661 00000 n +0000334773 00000 n +0000334923 00000 n +0000335072 00000 n +0000335221 00000 n +0000335370 00000 n +0000335447 00000 n +0000335524 00000 n +0000335609 00000 n +0000335756 00000 n +0000335850 00000 n +0000335997 00000 n +0000336146 00000 n +0000336231 00000 n +0000336378 00000 n +0000336455 00000 n +0000336556 00000 n +0000336653 00000 n +0000336849 00000 n +0000337003 00000 n +0000337098 00000 n +0000337202 00000 n +0000337356 00000 n +0000337510 00000 n +0000337605 00000 n +0000337700 00000 n +0000337854 00000 n +0000337999 00000 n +0000338507 00000 n +0000338584 00000 n +0000338678 00000 n +0000338825 00000 n +0000338974 00000 n +0000339051 00000 n +0000339136 00000 n +0000339283 00000 n +0000339368 00000 n +0000339515 00000 n +0000339592 00000 n +0000339669 00000 n +0000339746 00000 n +0000339831 00000 n +0000339978 00000 n +0000340099 00000 n +0000340264 00000 n +0000340414 00000 n +0000340561 00000 n +0000340708 00000 n +0000340857 00000 n +0000340934 00000 n +0000341011 00000 n +0000341088 00000 n +0000341165 00000 n +0000341250 00000 n +0000341397 00000 n +0000341500 00000 n +0000341650 00000 n +0000341799 00000 n +0000341948 00000 n +0000342025 00000 n +0000342102 00000 n +0000342187 00000 n +0000342334 00000 n +0000342419 00000 n +0000342566 00000 n +0000342643 00000 n +0000342720 00000 n +0000342805 00000 n +0000342952 00000 n +0000343082 00000 n +0000343256 00000 n +0000343406 00000 n +0000343556 00000 n +0000343703 00000 n +0000343850 00000 n +0000343997 00000 n +0000344074 00000 n +0000344151 00000 n +0000344236 00000 n +0000344383 00000 n +0000344513 00000 n +0000344672 00000 n +0000344822 00000 n +0000344969 00000 n +0000345115 00000 n +0000345264 00000 n +0000345410 00000 n +0000345487 00000 n +0000345564 00000 n +0000345641 00000 n +0000345726 00000 n +0000345872 00000 n +0000345966 00000 n +0000346112 00000 n +0000346260 00000 n +0000346337 00000 n +0000346414 00000 n +0000346499 00000 n +0000346645 00000 n +0000346739 00000 n +0000346885 00000 n +0000347033 00000 n +0000347118 00000 n +0000347264 00000 n +0000347385 00000 n +0000347560 00000 n +0000347712 00000 n +0000347860 00000 n +0000348008 00000 n +0000348158 00000 n +0000348235 00000 n +0000348320 00000 n +0000348468 00000 n +0000348598 00000 n +0000348761 00000 n +0000348913 00000 n +0000349061 00000 n +0000349209 00000 n +0000349360 00000 n +0000349508 00000 n +0000349585 00000 n +0000349662 00000 n +0000349747 00000 n +0000349895 00000 n +0000349989 00000 n +0000350137 00000 n +0000350287 00000 n +0000350372 00000 n +0000350520 00000 n +0000350597 00000 n +0000350699 00000 n +0000350797 00000 n +0000351027 00000 n +0000351123 00000 n +0000351234 00000 n +0000351353 00000 n +0000351449 00000 n +0000351604 00000 n +0000351700 00000 n +0000351855 00000 n +0000351958 00000 n +0000352077 00000 n +0000352175 00000 n +0000352422 00000 n +0000352520 00000 n +0000352614 00000 n +0000352710 00000 n +0000352809 00000 n +0000352905 00000 n +0000353028 00000 n +0000353124 00000 n +0000353235 00000 n +0000353390 00000 n +0000353486 00000 n +0000353637 00000 n +0000353792 00000 n +0000353885 00000 n +0000354004 00000 n +0000354139 00000 n +0000354235 00000 n +0000354330 00000 n +0000354423 00000 n +0000354542 00000 n +0000354669 00000 n +0000354765 00000 n +0000354860 00000 n +0000354953 00000 n +0000355072 00000 n +0000355207 00000 n +0000355303 00000 n +0000355398 00000 n +0000355504 00000 n +0000355658 00000 n +0000355780 00000 n +0000356039 00000 n +0000356134 00000 n +0000356229 00000 n +0000356383 00000 n +0000356487 00000 n +0000356582 00000 n +0000356677 00000 n +0000356772 00000 n +0000356867 00000 n +0000356962 00000 n +0000357116 00000 n +0000357214 00000 n +0000357309 00000 n +0000357404 00000 n +0000357612 00000 n +0000357707 00000 n +0000357802 00000 n +0000357909 00000 n +0000358004 00000 n +0000358158 00000 n +0000358253 00000 n +0000358407 00000 n +0000358511 00000 n +0000358606 00000 n +0000358751 00000 n +0000359412 00000 n +0000359489 00000 n +0000359583 00000 n +0000359730 00000 n +0000359879 00000 n +0000359956 00000 n +0000360041 00000 n +0000360188 00000 n +0000360291 00000 n +0000360438 00000 n +0000360588 00000 n +0000360735 00000 n +0000360812 00000 n +0000360897 00000 n +0000361044 00000 n +0000361129 00000 n +0000361276 00000 n +0000361353 00000 n +0000361430 00000 n +0000361515 00000 n +0000361662 00000 n +0000361774 00000 n +0000361924 00000 n +0000362073 00000 n +0000362223 00000 n +0000362370 00000 n +0000362447 00000 n +0000362524 00000 n +0000362609 00000 n +0000362756 00000 n +0000362859 00000 n +0000363006 00000 n +0000363156 00000 n +0000363303 00000 n +0000363380 00000 n +0000363457 00000 n +0000363542 00000 n +0000363689 00000 n +0000363801 00000 n +0000363951 00000 n +0000364100 00000 n +0000364249 00000 n +0000364398 00000 n +0000364475 00000 n +0000364552 00000 n +0000364629 00000 n +0000364714 00000 n +0000364860 00000 n +0000364954 00000 n +0000365100 00000 n +0000365248 00000 n +0000365325 00000 n +0000365410 00000 n +0000365556 00000 n +0000365677 00000 n +0000365823 00000 n +0000365972 00000 n +0000366118 00000 n +0000366267 00000 n +0000366413 00000 n +0000366490 00000 n +0000366575 00000 n +0000366721 00000 n +0000366824 00000 n +0000366972 00000 n +0000367123 00000 n +0000367271 00000 n +0000367348 00000 n +0000367425 00000 n +0000367510 00000 n +0000367658 00000 n +0000367752 00000 n +0000367900 00000 n +0000368050 00000 n +0000368135 00000 n +0000368283 00000 n +0000368377 00000 n +0000368525 00000 n +0000368675 00000 n +0000368752 00000 n +0000368837 00000 n +0000368985 00000 n +0000369097 00000 n +0000369249 00000 n +0000369399 00000 n +0000369549 00000 n +0000369699 00000 n +0000369776 00000 n +0000369853 00000 n +0000369938 00000 n +0000370086 00000 n +0000370207 00000 n +0000370355 00000 n +0000370506 00000 n +0000370658 00000 n +0000370808 00000 n +0000370958 00000 n +0000371035 00000 n +0000371112 00000 n +0000371197 00000 n +0000371345 00000 n +0000371457 00000 n +0000371609 00000 n +0000371759 00000 n +0000371910 00000 n +0000372058 00000 n +0000372135 00000 n +0000372212 00000 n +0000372289 00000 n +0000372374 00000 n +0000372522 00000 n +0000372616 00000 n +0000372764 00000 n +0000372914 00000 n +0000372991 00000 n +0000373076 00000 n +0000373224 00000 n +0000373327 00000 n +0000373475 00000 n +0000373626 00000 n +0000373774 00000 n +0000373851 00000 n +0000373936 00000 n +0000374084 00000 n +0000374187 00000 n +0000374335 00000 n +0000374486 00000 n +0000374634 00000 n +0000374711 00000 n +0000374788 00000 n +0000374873 00000 n +0000375021 00000 n +0000375115 00000 n +0000375263 00000 n +0000375413 00000 n +0000375498 00000 n +0000375646 00000 n +0000375723 00000 n +0000375825 00000 n +0000375923 00000 n +0000376089 00000 n +0000376185 00000 n +0000376284 00000 n +0000376383 00000 n +0000376490 00000 n +0000376586 00000 n +0000376741 00000 n +0000376994 00000 n +0000377101 00000 n +0000377204 00000 n +0000377315 00000 n +0000377422 00000 n +0000377577 00000 n +0000377684 00000 n +0000377780 00000 n +0000377876 00000 n +0000377972 00000 n +0000378126 00000 n +0000378244 00000 n +0000378389 00000 n +0000378543 00000 n +0000378697 00000 n +0000378851 00000 n +0000379005 00000 n +0000379098 00000 n +0000379235 00000 n +0000379340 00000 n +0000379553 00000 n +0000379637 00000 n +0000379915 00000 n +0000380008 00000 n +0000380163 00000 n +0000380258 00000 n +0000380395 00000 n +0000380493 00000 n +0000380586 00000 n +0000380723 00000 n +0000380818 00000 n +0000380955 00000 n +0000381065 00000 n +0000381158 00000 n +0000381295 00000 n +0000381390 00000 n +0000381527 00000 n +0000381634 00000 n +0000381727 00000 n +0000381864 00000 n +0000381959 00000 n +0000382096 00000 n +0000382203 00000 n +0000382296 00000 n +0000382451 00000 n +0000382546 00000 n +0000382683 00000 n +0000382784 00000 n +0000382877 00000 n +0000383014 00000 n +0000383109 00000 n +0000383246 00000 n +0000383359 00000 n +0000383452 00000 n +0000383589 00000 n +0000383684 00000 n +0000383821 00000 n +0000383934 00000 n +0000384027 00000 n +0000384191 00000 n +0000384286 00000 n +0000384381 00000 n +0000384545 00000 n +0000384658 00000 n +0000384765 00000 n +0000384858 00000 n +0000385034 00000 n +0000385129 00000 n +0000385224 00000 n +0000385319 00000 n +0000385495 00000 n +0000385596 00000 n +0000385697 00000 n +0000385795 00000 n +0000385888 00000 n +0000386025 00000 n +0000386120 00000 n +0000386257 00000 n +0000386367 00000 n +0000386460 00000 n +0000386606 00000 n +0000386770 00000 n +0000386874 00000 n +0000386973 00000 n +0000387066 00000 n +0000387220 00000 n +0000387314 00000 n +0000387451 00000 n +0000387550 00000 n +0000387634 00000 n +0000387912 00000 n +0000387996 00000 n +0000388274 00000 n +0000388361 00000 n +0000388454 00000 n +0000388617 00000 n +0000388713 00000 n +0000388894 00000 n +0000388990 00000 n +0000389135 00000 n +0000389231 00000 n +0000389327 00000 n +0000389414 00000 n +0000389498 00000 n +0000389759 00000 n +0000389848 00000 n +0000389995 00000 n +0000390323 00000 n +0000390478 00000 n +0000390574 00000 n +0000390670 00000 n +0000390769 00000 n +0000390879 00000 n +0000390974 00000 n +0000391072 00000 n +0000391167 00000 n +0000391321 00000 n +0000391416 00000 n +0000391511 00000 n +0000391609 00000 n +0000391704 00000 n +0000391802 00000 n +0000391897 00000 n +0000392051 00000 n +0000392144 00000 n +0000392280 00000 n +0000392375 00000 n +0000392470 00000 n +0000392624 00000 n +0000392739 00000 n +0000392965 00000 n +0000393119 00000 n +0000393212 00000 n +0000393366 00000 n +0000393459 00000 n +0000393613 00000 n +0000393706 00000 n +0000393799 00000 n +0000393953 00000 n +0000394046 00000 n +0000394178 00000 n +0000394316 00000 n +0000394470 00000 n +0000394624 00000 n +0000394720 00000 n +0000394991 00000 n +0000395087 00000 n +0000395182 00000 n +0000395277 00000 n +0000395374 00000 n +0000395537 00000 n +0000395691 00000 n +0000395807 00000 n +0000395902 00000 n +0000395999 00000 n +0000396093 00000 n +0000396226 00000 n +0000396332 00000 n +0000396486 00000 n +0000396631 00000 n +0000396778 00000 n +0000396871 00000 n +0000396991 00000 n +0000397092 00000 n +0000397185 00000 n +0000397279 00000 n +0000397372 00000 n +0000397480 00000 n +0000397573 00000 n +0000397667 00000 n +0000397792 00000 n +0000397885 00000 n +0000397995 00000 n +0000398098 00000 n +0000398240 00000 n +0000398333 00000 n +0000398426 00000 n +0000398527 00000 n +0000398624 00000 n +0000398779 00000 n +0000398872 00000 n +0000398977 00000 n +0000399071 00000 n +0000399164 00000 n +0000399263 00000 n +0000399357 00000 n +0000399450 00000 n +0000399546 00000 n +0000399640 00000 n +0000399772 00000 n +0000399869 00000 n +0000399968 00000 n +0000400064 00000 n +0000400414 00000 n +0000400513 00000 n +0000400612 00000 n +0000400711 00000 n +0000400810 00000 n +0000400909 00000 n +0000401008 00000 n +0000401107 00000 n +0000401206 00000 n +0000401309 00000 n +0000401408 00000 n +0000401571 00000 n +0000401727 00000 n +0000401820 00000 n +0000401926 00000 n +0000402025 00000 n +0000402120 00000 n +0000402213 00000 n +0000402319 00000 n +0000402426 00000 n +0000402520 00000 n +0000402613 00000 n +0000402718 00000 n +0000402816 00000 n +0000402910 00000 n +0000403002 00000 n +0000403197 00000 n +0000403310 00000 n +0000403411 00000 n +0000403514 00000 n +0000403659 00000 n +0000403757 00000 n +0000403911 00000 n +0000404012 00000 n +0000404110 00000 n +0000404228 00000 n +0000404352 00000 n +0000404450 00000 n +0000404604 00000 n +0000404727 00000 n +0000404827 00000 n +0000404982 00000 n +0000405075 00000 n +0000405174 00000 n +0000405268 00000 n +0000405361 00000 n +0000405538 00000 n +0000405633 00000 n +0000405728 00000 n +0000405823 00000 n +0000405918 00000 n +0000406013 00000 n +0000406108 00000 n +0000406202 00000 n +0000406295 00000 n +0000406479 00000 n +0000406574 00000 n +0000406669 00000 n +0000406764 00000 n +0000406859 00000 n +0000406954 00000 n +0000407049 00000 n +0000407143 00000 n +0000407236 00000 n +0000407326 00000 n +0000407419 00000 n +0000407556 00000 n +0000407666 00000 n +0000407760 00000 n +0000407854 00000 n +0000407948 00000 n +0000408042 00000 n +0000408131 00000 n +0000408277 00000 n +0000408484 00000 n +0000408639 00000 n +0000408733 00000 n +0000408829 00000 n +0000408925 00000 n +0000409021 00000 n +0000409117 00000 n +0000409213 00000 n +0000409351 00000 n +0000409450 00000 n +0000409561 00000 n +0000409676 00000 n +0000409769 00000 n +0000409906 00000 n +0000410106 00000 n +0000410237 00000 n +0000410333 00000 n +0000410464 00000 n +0000410560 00000 n +0000410691 00000 n +0000410787 00000 n +0000410918 00000 n +0000411014 00000 n +0000411145 00000 n +0000411241 00000 n +0000411369 00000 n +0000411464 00000 n +0000411562 00000 n +0000411657 00000 n +0000411746 00000 n +0000411894 00000 n +0000412051 00000 n +0000412205 00000 n +0000412300 00000 n +0000412395 00000 n +0000412490 00000 n +0000412585 00000 n +0000412733 00000 n +0000412834 00000 n +0000412935 00000 n +0000413036 00000 n +0000413137 00000 n +0000413264 00000 n +0000413365 00000 n +0000413460 00000 n +0000413639 00000 n +0000413836 00000 n +0000413963 00000 n +0000414061 00000 n +0000414168 00000 n +0000414260 00000 n +0000414512 00000 n +0000414608 00000 n +0000414704 00000 n +0000414803 00000 n +0000414899 00000 n +0000414995 00000 n +0000415091 00000 n +0000415187 00000 n +0000415283 00000 n +0000415382 00000 n +0000415478 00000 n +0000415577 00000 n +0000415673 00000 n +0000415787 00000 n +0000416003 00000 n +0000416099 00000 n +0000416195 00000 n +0000416294 00000 n +0000416393 00000 n +0000416516 00000 n +0000416679 00000 n +0000416773 00000 n +0000416880 00000 n +0000417006 00000 n +0000417102 00000 n +0000417205 00000 n +0000417298 00000 n +0000417435 00000 n +0000417545 00000 n +0000417641 00000 n +0000417737 00000 n +0000417833 00000 n +0000417929 00000 n +0000418018 00000 n +0000418166 00000 n +0000418368 00000 n +0000418523 00000 n +0000418619 00000 n +0000418774 00000 n +0000418885 00000 n +0000418981 00000 n +0000419075 00000 n +0000419214 00000 n +0000419345 00000 n +0000419444 00000 n +0000419543 00000 n +0000419688 00000 n +0000419890 00000 n +0000420011 00000 n +0000420202 00000 n +0000420443 00000 n +0000420644 00000 n +0000420797 00000 n +0000420986 00000 n +0000421071 00000 n +0000421221 00000 n +0000421306 00000 n +0000421468 00000 n +0000421553 00000 n +0000421703 00000 n +0000421788 00000 n +0000421938 00000 n +0000422023 00000 n +0000422173 00000 n +0000422258 00000 n +0000422414 00000 n +0000422499 00000 n +0000422655 00000 n +0000422740 00000 n +0000422890 00000 n +0000422975 00000 n +0000423128 00000 n +0000423213 00000 n +0000423363 00000 n +0000423448 00000 n +0000423604 00000 n +0000423689 00000 n +0000423839 00000 n +0000423924 00000 n +0000424080 00000 n +0000424193 00000 n +0000424297 00000 n +0000424400 00000 n +0000424517 00000 n +0000424618 00000 n +0000424722 00000 n +0000424885 00000 n +0000425050 00000 n +0000425197 00000 n +0000425290 00000 n +0000425394 00000 n +0000425497 00000 n +0000425590 00000 n +0000425683 00000 n +0000425787 00000 n +0000425884 00000 n +0000425977 00000 n +0000426070 00000 n +0000426157 00000 n +0000426259 00000 n +0000426358 00000 n +0000426453 00000 n +0000426546 00000 n +0000426652 00000 n +0000426751 00000 n +0000426846 00000 n +0000426939 00000 n +0000427045 00000 n +0000427144 00000 n +0000427239 00000 n +0000427358 00000 n +0000427481 00000 n +0000427592 00000 n +0000428055 00000 n +0000428187 00000 n +0000428298 00000 n +0000428405 00000 n +0000428511 00000 n +0000428650 00000 n +0000428744 00000 n +0000428840 00000 n +0000428936 00000 n +0000429050 00000 n +0000429172 00000 n +0000429327 00000 n +0000429426 00000 n +0000429627 00000 n +0000429721 00000 n +0000429940 00000 n +0000430135 00000 n +0000430220 00000 n +0000430371 00000 n +0000430456 00000 n +0000430623 00000 n +0000430708 00000 n +0000430859 00000 n +0000430944 00000 n +0000431095 00000 n +0000431180 00000 n +0000431331 00000 n +0000431416 00000 n +0000431575 00000 n +0000431660 00000 n +0000431819 00000 n +0000431904 00000 n +0000432055 00000 n +0000432140 00000 n +0000432295 00000 n +0000432380 00000 n +0000432531 00000 n +0000432616 00000 n +0000432771 00000 n +0000432856 00000 n +0000433007 00000 n +0000433092 00000 n +0000433251 00000 n +0000433429 00000 n +0000433528 00000 n +0000433635 00000 n +0000433734 00000 n +0000433849 00000 n +0000434004 00000 n +0000434107 00000 n +0000434261 00000 n +0000434410 00000 n +0000434513 00000 n +0000434620 00000 n +0000434723 00000 n +0000434822 00000 n +0000435101 00000 n +0000435283 00000 n +0000435381 00000 n +0000435479 00000 n +0000435577 00000 n +0000435678 00000 n +0000435812 00000 n +0000435905 00000 n +0000436008 00000 n +0000436189 00000 n +0000436284 00000 n +0000436379 00000 n +0000436533 00000 n +0000436626 00000 n +0000436724 00000 n +0000436817 00000 n +0000437714 00000 n +0000437807 00000 n +0000437905 00000 n +0000438059 00000 n +0000438172 00000 n +0000438270 00000 n +0000438362 00000 n +0000438459 00000 n +0000438558 00000 n +0000438655 00000 n +0000438984 00000 n +0000439083 00000 n +0000439179 00000 n +0000439303 00000 n +0000439396 00000 n +0000439533 00000 n +0000439643 00000 n +0000439739 00000 n +0000439835 00000 n +0000439931 00000 n +0000440027 00000 n +0000440116 00000 n +0000440264 00000 n +0000440522 00000 n +0000440677 00000 n +0000440773 00000 n +0000440872 00000 n +0000440968 00000 n +0000441062 00000 n +0000441158 00000 n +0000441254 00000 n +0000441361 00000 n +0000441455 00000 n +0000441549 00000 n +0000441712 00000 n +0000441859 00000 n +0000441952 00000 n +0000442058 00000 n +0000442169 00000 n +0000442264 00000 n +0000442357 00000 n +0000442471 00000 n +0000442582 00000 n +0000442677 00000 n +0000442783 00000 n +0000442898 00000 n +0000443081 00000 n +0000443209 00000 n +0000443308 00000 n +0000443402 00000 n +0000443508 00000 n +0000443651 00000 n +0000443806 00000 n +0000443905 00000 n +0000443999 00000 n +0000444123 00000 n +0000444313 00000 n +0000444468 00000 n +0000444579 00000 n +0000444678 00000 n +0000444837 00000 n +0000444936 00000 n +0000445035 00000 n +0000445180 00000 n +0000445634 00000 n +0000445719 00000 n +0000446038 00000 n +0000446123 00000 n +0000446274 00000 n +0000446359 00000 n +0000446526 00000 n +0000446611 00000 n +0000446762 00000 n +0000446847 00000 n +0000447014 00000 n +0000447099 00000 n +0000447250 00000 n +0000447335 00000 n +0000447486 00000 n +0000447571 00000 n +0000447758 00000 n +0000447843 00000 n +0000447994 00000 n +0000448079 00000 n +0000448234 00000 n +0000448319 00000 n +0000448470 00000 n +0000448555 00000 n +0000448734 00000 n +0000448819 00000 n +0000448970 00000 n +0000449055 00000 n +0000449206 00000 n +0000449291 00000 n +0000449548 00000 n +0000449633 00000 n +0000449783 00000 n +0000449868 00000 n +0000450030 00000 n +0000450115 00000 n +0000450265 00000 n +0000450350 00000 n +0000450512 00000 n +0000450597 00000 n +0000450747 00000 n +0000450832 00000 n +0000450982 00000 n +0000451067 00000 n +0000451244 00000 n +0000451329 00000 n +0000451479 00000 n +0000451564 00000 n +0000451717 00000 n +0000451802 00000 n +0000451952 00000 n +0000452037 00000 n +0000452223 00000 n +0000452308 00000 n +0000452458 00000 n +0000452543 00000 n +0000452693 00000 n +0000452778 00000 n +0000452964 00000 n +0000453049 00000 n +0000453199 00000 n +0000453284 00000 n +0000453446 00000 n +0000453531 00000 n +0000453681 00000 n +0000453766 00000 n +0000453928 00000 n +0000454013 00000 n +0000454163 00000 n +0000454248 00000 n +0000454398 00000 n +0000454483 00000 n +0000454636 00000 n +0000454721 00000 n +0000454871 00000 n +0000454956 00000 n +0000455109 00000 n +0000455194 00000 n +0000455344 00000 n +0000455429 00000 n +0000455592 00000 n +0000455677 00000 n +0000455826 00000 n +0000455911 00000 n +0000456060 00000 n +0000456214 00000 n +0000456317 00000 n +0000456416 00000 n +0000456515 00000 n +0000456614 00000 n +0000456720 00000 n +0000456874 00000 n +0000457200 00000 n +0000457303 00000 n +0000457406 00000 n +0000457541 00000 n +0000457652 00000 n +0000457763 00000 n +0000457857 00000 n +0000457968 00000 n +0000458071 00000 n +0000458174 00000 n +0000458268 00000 n +0000458367 00000 n +0000458466 00000 n +0000458569 00000 n +0000458663 00000 n +0000458762 00000 n +0000458877 00000 n +0000458980 00000 n +0000459291 00000 n +0000459393 00000 n +0000459499 00000 n +0000459625 00000 n +0000459719 00000 n +0000459817 00000 n +0000459942 00000 n +0000460049 00000 n +0000460194 00000 n +0000460648 00000 n +0000460733 00000 n +0000461004 00000 n +0000461089 00000 n +0000461240 00000 n +0000461325 00000 n +0000461492 00000 n +0000461577 00000 n +0000461728 00000 n +0000461813 00000 n +0000461980 00000 n +0000462065 00000 n +0000462216 00000 n +0000462301 00000 n +0000462452 00000 n +0000462537 00000 n +0000462724 00000 n +0000462809 00000 n +0000462960 00000 n +0000463045 00000 n +0000463200 00000 n +0000463285 00000 n +0000463436 00000 n +0000463521 00000 n +0000463680 00000 n +0000463765 00000 n +0000463916 00000 n +0000464001 00000 n +0000464152 00000 n +0000464237 00000 n +0000464536 00000 n +0000464621 00000 n +0000464772 00000 n +0000464857 00000 n +0000465024 00000 n +0000465109 00000 n +0000465260 00000 n +0000465345 00000 n +0000465512 00000 n +0000465597 00000 n +0000465748 00000 n +0000465833 00000 n +0000465984 00000 n +0000466069 00000 n +0000466256 00000 n +0000466341 00000 n +0000466492 00000 n +0000466577 00000 n +0000466732 00000 n +0000466817 00000 n +0000466968 00000 n +0000467053 00000 n +0000467244 00000 n +0000467329 00000 n +0000467480 00000 n +0000467565 00000 n +0000467716 00000 n +0000467801 00000 n +0000467976 00000 n +0000468061 00000 n +0000468212 00000 n +0000468297 00000 n +0000468464 00000 n +0000468549 00000 n +0000468700 00000 n +0000468785 00000 n +0000468936 00000 n +0000469021 00000 n +0000469172 00000 n +0000469257 00000 n +0000469408 00000 n +0000469493 00000 n +0000469660 00000 n +0000469745 00000 n +0000469896 00000 n +0000469981 00000 n +0000470136 00000 n +0000470221 00000 n +0000470372 00000 n +0000470457 00000 n +0000470619 00000 n +0000470704 00000 n +0000470854 00000 n +0000470939 00000 n +0000471089 00000 n +0000471238 00000 n +0000471339 00000 n +0000471437 00000 n +0000471535 00000 n +0000471633 00000 n +0000471736 00000 n +0000471881 00000 n +0000471988 00000 n +0000472086 00000 n +0000472193 00000 n +0000472291 00000 n +0000472454 00000 n +0000472601 00000 n +0000472694 00000 n +0000472805 00000 n +0000472930 00000 n +0000473024 00000 n +0000473117 00000 n +0000473222 00000 n +0000473341 00000 n +0000473435 00000 n +0000473539 00000 n +0000473649 00000 n +0000473859 00000 n +0000473960 00000 n +0000474060 00000 n +0000474176 00000 n +0000474268 00000 n +0000474364 00000 n +0000474511 00000 n +0000474605 00000 n +0000474699 00000 n +0000474798 00000 n +0000474929 00000 n +0000475271 00000 n +0000475370 00000 n +0000475469 00000 n +0000475568 00000 n +0000475679 00000 n +0000475778 00000 n +0000475877 00000 n +0000475996 00000 n +0000476107 00000 n +0000476206 00000 n +0000476305 00000 n +0000476404 00000 n +0000476515 00000 n +0000476614 00000 n +0000476733 00000 n +0000476832 00000 n +0000476931 00000 n +0000477030 00000 n +0000477129 00000 n +0000477263 00000 n +0000477418 00000 n +0000477525 00000 n +0000477670 00000 n +0000477936 00000 n +0000478061 00000 n +0000478174 00000 n +0000478278 00000 n +0000478381 00000 n +0000478529 00000 n +0000478627 00000 n +0000478734 00000 n +0000478835 00000 n +0000478933 00000 n +0000479087 00000 n +0000479179 00000 n +0000479350 00000 n +0000479463 00000 n +0000479556 00000 n +0000479659 00000 n +0000479783 00000 n +0000479881 00000 n +0000479988 00000 n +0000480182 00000 n +0000480775 00000 n +0000480868 00000 n +0000480970 00000 n +0000481067 00000 n +0000481202 00000 n +0000481362 00000 n +0000481465 00000 n +0000481620 00000 n +0000481723 00000 n +0000481842 00000 n +0000481996 00000 n +0000482141 00000 n +0000482260 00000 n +0000482379 00000 n +0000482498 00000 n +0000482609 00000 n +0000482937 00000 n +0000483022 00000 n +0000483237 00000 n +0000483322 00000 n +0000483473 00000 n +0000483558 00000 n +0000483709 00000 n +0000483794 00000 n +0000483945 00000 n +0000484030 00000 n +0000484197 00000 n +0000484282 00000 n +0000484433 00000 n +0000484518 00000 n +0000484669 00000 n +0000484754 00000 n +0000484929 00000 n +0000485014 00000 n +0000485165 00000 n +0000485250 00000 n +0000485401 00000 n +0000485486 00000 n +0000485637 00000 n +0000485722 00000 n +0000485901 00000 n +0000485986 00000 n +0000486137 00000 n +0000486222 00000 n +0000486373 00000 n +0000486458 00000 n +0000486621 00000 n +0000486706 00000 n +0000486857 00000 n +0000486942 00000 n +0000487093 00000 n +0000487178 00000 n +0000487329 00000 n +0000487414 00000 n +0000487565 00000 n +0000487650 00000 n +0000487801 00000 n +0000487886 00000 n +0000488037 00000 n +0000488122 00000 n +0000488277 00000 n +0000488362 00000 n +0000488513 00000 n +0000488598 00000 n +0000488749 00000 n +0000488834 00000 n +0000488985 00000 n +0000489070 00000 n +0000489237 00000 n +0000489322 00000 n +0000489473 00000 n +0000489558 00000 n +0000489709 00000 n +0000489850 00000 n +0000489949 00000 n +0000490048 00000 n +0000490147 00000 n +0000490253 00000 n +0000490422 00000 n +0000490541 00000 n +0000490660 00000 n +0000490763 00000 n +0000490862 00000 n +0000490961 00000 n +0000491124 00000 n +0000491289 00000 n +0000491382 00000 n +0000491488 00000 n +0000491607 00000 n +0000491702 00000 n +0000491795 00000 n +0000491913 00000 n +0000492029 00000 n +0000492133 00000 n +0000492227 00000 n +0000492320 00000 n +0000492437 00000 n +0000492550 00000 n +0000492663 00000 n +0000492757 00000 n +0000492850 00000 n +0000492967 00000 n +0000493080 00000 n +0000493187 00000 n +0000493281 00000 n +0000493412 00000 n +0000493513 00000 n +0000493632 00000 n +0000493736 00000 n +0000493916 00000 n +0000494044 00000 n +0000494137 00000 n +0000494247 00000 n +0000494350 00000 n +0000494477 00000 n +0000494631 00000 n +0000494785 00000 n +0000494904 00000 n +0000495543 00000 n +0000495635 00000 n +0000495729 00000 n +0000495852 00000 n +0000496038 00000 n +0000496193 00000 n +0000496348 00000 n +0000496447 00000 n +0000496546 00000 n +0000496669 00000 n +0000496768 00000 n +0000496971 00000 n +0000497070 00000 n +0000497169 00000 n +0000497268 00000 n +0000497371 00000 n +0000497470 00000 n +0000497577 00000 n +0000497671 00000 n +0000497816 00000 n +0000498043 00000 n +0000498184 00000 n +0000498307 00000 n +0000498406 00000 n +0000498505 00000 n +0000498611 00000 n +0000498716 00000 n +0000498815 00000 n +0000499014 00000 n +0000499162 00000 n +0000499373 00000 n +0000499521 00000 n +0000499676 00000 n +0000499824 00000 n +0000499975 00000 n +0000500123 00000 n +0000500281 00000 n +0000500426 00000 n +0000500592 00000 n +0000500695 00000 n +0000500870 00000 n +0000501065 00000 n +0000501254 00000 n +0000501339 00000 n +0000501489 00000 n +0000501574 00000 n +0000501724 00000 n +0000501809 00000 n +0000501959 00000 n +0000502044 00000 n +0000502200 00000 n +0000502285 00000 n +0000502438 00000 n +0000502523 00000 n +0000502673 00000 n +0000502758 00000 n +0000502908 00000 n +0000502993 00000 n +0000503143 00000 n +0000503228 00000 n +0000503384 00000 n +0000503509 00000 n +0000503613 00000 n +0000503726 00000 n +0000503829 00000 n +0000503935 00000 n +0000504036 00000 n +0000504235 00000 n +0000504382 00000 n +0000504580 00000 n +0000504727 00000 n +0000504880 00000 n +0000505027 00000 n +0000505177 00000 n +0000505324 00000 n +0000505479 00000 n +0000505714 00000 n +0000505818 00000 n +0000505919 00000 n +0000506020 00000 n +0000506118 00000 n +0000506216 00000 n +0000506317 00000 n +0000506418 00000 n +0000506519 00000 n +0000506620 00000 n +0000506721 00000 n +0000506822 00000 n +0000506920 00000 n +0000507023 00000 n +0000507124 00000 n +0000507223 00000 n +0000507320 00000 n +0000507442 00000 n +0000507549 00000 n +0000507652 00000 n +0000507797 00000 n +0000507999 00000 n +0000508093 00000 n +0000508300 00000 n +0000508495 00000 n +0000508580 00000 n +0000508731 00000 n +0000508816 00000 n +0000508983 00000 n +0000509068 00000 n +0000509219 00000 n +0000509304 00000 n +0000509455 00000 n +0000509540 00000 n +0000509691 00000 n +0000509776 00000 n +0000509931 00000 n +0000510016 00000 n +0000510175 00000 n +0000510260 00000 n +0000510411 00000 n +0000510496 00000 n +0000510651 00000 n +0000510736 00000 n +0000510887 00000 n +0000510972 00000 n +0000511127 00000 n +0000511212 00000 n +0000511363 00000 n +0000511448 00000 n +0000511603 00000 n +0000511718 00000 n +0000511821 00000 n +0000511927 00000 n +0000512071 00000 n +0000512178 00000 n +0000512281 00000 n +0000512388 00000 n +0000512491 00000 n +0000512636 00000 n +0000512739 00000 n +0000512838 00000 n +0000512937 00000 n +0000513040 00000 n +0000513143 00000 n +0000513242 00000 n +0000513349 00000 n +0000513448 00000 n +0000513565 00000 n +0000513684 00000 n +0000513847 00000 n +0000513994 00000 n +0000514087 00000 n +0000514193 00000 n +0000514308 00000 n +0000514403 00000 n +0000514496 00000 n +0000514602 00000 n +0000514709 00000 n +0000514804 00000 n +0000514923 00000 n +0000515038 00000 n +0000515149 00000 n +0000515516 00000 n +0000515641 00000 n +0000515745 00000 n +0000515846 00000 n +0000515949 00000 n +0000516082 00000 n +0000516186 00000 n +0000516287 00000 n +0000516388 00000 n +0000516535 00000 n +0000516628 00000 n +0000516763 00000 n +0000516876 00000 n +0000517010 00000 n +0000517111 00000 n +0000517205 00000 n +0000517298 00000 n +0000517433 00000 n +0000517540 00000 n +0000517662 00000 n +0000517760 00000 n +0000517854 00000 n +0000517988 00000 n +0000518085 00000 n +0000518182 00000 n +0000518279 00000 n +0000518407 00000 n +0000518624 00000 n +0000518727 00000 n +0000518830 00000 n +0000518933 00000 n +0000519036 00000 n +0000519135 00000 n +0000519234 00000 n +0000519333 00000 n +0000519432 00000 n +0000519531 00000 n +0000519630 00000 n +0000519729 00000 n +0000519828 00000 n +0000519935 00000 n +0000520042 00000 n +0000520145 00000 n +0000520248 00000 n +0000520443 00000 n +0000520546 00000 n +0000520693 00000 n +0000520792 00000 n +0000520891 00000 n +0000520990 00000 n +0000521089 00000 n +0000521188 00000 n +0000521333 00000 n +0000521499 00000 n +0000521584 00000 n +0000521767 00000 n +0000521852 00000 n +0000522003 00000 n +0000522088 00000 n +0000522255 00000 n +0000522340 00000 n +0000522491 00000 n +0000522576 00000 n +0000522731 00000 n +0000522816 00000 n +0000522971 00000 n +0000523056 00000 n +0000523207 00000 n +0000523292 00000 n +0000523447 00000 n +0000523532 00000 n +0000523683 00000 n +0000523768 00000 n +0000523923 00000 n +0000524051 00000 n +0000524154 00000 n +0000524257 00000 n +0000524363 00000 n +0000524498 00000 n +0000524601 00000 n +0000524700 00000 n +0000524803 00000 n +0000524948 00000 n +0000525175 00000 n +0000525316 00000 n +0000525439 00000 n +0000525538 00000 n +0000525637 00000 n +0000525743 00000 n +0000525897 00000 n +0000526000 00000 n +0000526103 00000 n +0000526202 00000 n +0000526301 00000 n +0000526400 00000 n +0000526503 00000 n +0000526606 00000 n +0000526709 00000 n +0000526808 00000 n +0000526971 00000 n +0000527119 00000 n +0000527342 00000 n +0000527490 00000 n +0000527648 00000 n +0000527954 00000 n +0000528057 00000 n +0000528172 00000 n +0000528327 00000 n +0000528462 00000 n +0000528565 00000 n +0000528748 00000 n +0000528851 00000 n +0000528966 00000 n +0000529065 00000 n +0000529164 00000 n +0000529263 00000 n +0000529374 00000 n +0000529484 00000 n +0000529585 00000 n +0000529683 00000 n +0000529790 00000 n +0000529935 00000 n +0000530137 00000 n +0000530222 00000 n +0000530405 00000 n +0000530490 00000 n +0000530640 00000 n +0000530725 00000 n +0000530887 00000 n +0000530972 00000 n +0000531122 00000 n +0000531207 00000 n +0000531357 00000 n +0000531442 00000 n +0000531592 00000 n +0000531677 00000 n +0000531830 00000 n +0000531915 00000 n +0000532068 00000 n +0000532153 00000 n +0000532303 00000 n +0000532388 00000 n +0000532541 00000 n +0000532626 00000 n +0000532776 00000 n +0000532861 00000 n +0000533023 00000 n +0000533108 00000 n +0000533258 00000 n +0000533343 00000 n +0000533496 00000 n +0000533633 00000 n +0000533737 00000 n +0000533838 00000 n +0000533939 00000 n +0000534042 00000 n +0000534160 00000 n +0000534261 00000 n +0000534359 00000 n +0000534531 00000 n +0000534635 00000 n +0000534751 00000 n +0000534898 00000 n +0000534991 00000 n +0000535096 00000 n +0000535199 00000 n +0000535292 00000 n +0000535385 00000 n +0000535489 00000 n +0000535590 00000 n +0000535683 00000 n +0000535789 00000 n +0000535904 00000 n +0000536083 00000 n +0000536211 00000 n +0000536305 00000 n +0000536404 00000 n +0000536510 00000 n +0000536602 00000 n +0000536783 00000 n +0000536938 00000 n +0000537041 00000 n +0000537144 00000 n +0000537243 00000 n +0000537342 00000 n +0000537497 00000 n +0000537590 00000 n +0000537730 00000 n +0000537849 00000 n +0000537960 00000 n +0000538054 00000 n +0000538149 00000 n +0000538242 00000 n +0000538374 00000 n +0000538473 00000 n +0000538576 00000 n +0000538670 00000 n +0000538765 00000 n +0000538858 00000 n +0000538964 00000 n +0000539058 00000 n +0000539153 00000 n +0000539373 00000 n +0000539471 00000 n +0000539587 00000 n +0000539685 00000 n +0000539783 00000 n +0000539914 00000 n +0000540018 00000 n +0000540116 00000 n +0000540214 00000 n +0000540336 00000 n +0000540449 00000 n +0000540566 00000 n +0000540711 00000 n +0000540804 00000 n +0000540926 00000 n +0000541019 00000 n +0000541140 00000 n +0000541291 00000 n +0000541384 00000 n +0000541476 00000 n +0000541629 00000 n +0000541771 00000 n +0000541892 00000 n +0000542047 00000 n +0000542163 00000 n +0000542309 00000 n +0000542402 00000 n +0000542520 00000 n +0000542618 00000 n +0000542713 00000 n +0000542806 00000 n +0000542928 00000 n +0000543026 00000 n +0000543121 00000 n +0000543268 00000 n +0000543423 00000 n +0000543517 00000 n +0000543611 00000 n +0000543753 00000 n +0000544107 00000 n +0000544262 00000 n +0000544417 00000 n +0000544572 00000 n +0000544727 00000 n +0000544826 00000 n +0000544925 00000 n +0000545024 00000 n +0000545123 00000 n +0000545222 00000 n +0000545321 00000 n +0000545420 00000 n +0000545574 00000 n +0000545728 00000 n +0000545868 00000 n +0000545961 00000 n +0000546058 00000 n +0000546281 00000 n +0000546400 00000 n +0000546498 00000 n +0000546617 00000 n +0000546754 00000 n +0000546873 00000 n +0000546989 00000 n +0000547143 00000 n +0000547296 00000 n +0000547392 00000 n +0000547592 00000 n +0000547766 00000 n +0000547909 00000 n +0000548064 00000 n +0000548219 00000 n +0000548313 00000 n +0000548427 00000 n +0000548654 00000 n +0000548809 00000 n +0000548964 00000 n +0000549119 00000 n +0000549274 00000 n +0000549429 00000 n +0000549528 00000 n +0000549627 00000 n +0000549829 00000 n +0000550061 00000 n +0000550155 00000 n +0000550310 00000 n +0000550429 00000 n +0000550548 00000 n +0000550647 00000 n +0000550802 00000 n +0000550957 00000 n +0000551055 00000 n +0000551268 00000 n +0000551406 00000 n +0000551525 00000 n +0000551632 00000 n +0000551730 00000 n +0000551846 00000 n +0000552000 00000 n +0000552154 00000 n +0000552251 00000 n +0000552372 00000 n +0000552526 00000 n +0000552693 00000 n +0000552880 00000 n +0000552973 00000 n +0000553071 00000 n +0000553169 00000 n +0000553267 00000 n +0000553377 00000 n +0000553531 00000 n +0000553685 00000 n +0000553793 00000 n +0000553900 00000 n +0000554053 00000 n +0000554167 00000 n +0000554332 00000 n +0000554425 00000 n +0000554565 00000 n +0000554719 00000 n +0000554816 00000 n +0000554910 00000 n +0000555003 00000 n +0000555159 00000 n +0000555313 00000 n +0000555410 00000 n +0000555564 00000 n +0000555661 00000 n +0000555755 00000 n +0000555848 00000 n +0000555980 00000 n +0000556134 00000 n +0000556231 00000 n +0000556325 00000 n +0000556418 00000 n +0000556565 00000 n +0000556658 00000 n +0000556812 00000 n +0000556909 00000 n +0000557003 00000 n +0000557229 00000 n +0000557383 00000 n +0000557537 00000 n +0000557630 00000 n +0000557784 00000 n +0000557938 00000 n +0000558034 00000 n +0000558127 00000 n +0000558220 00000 n +0000558336 00000 n +0000558476 00000 n +0000558630 00000 n +0000559103 00000 n +0000559256 00000 n +0000559388 00000 n +0000559503 00000 n +0000559723 00000 n +0000559877 00000 n +0000560031 00000 n +0000560185 00000 n +0000560339 00000 n +0000560493 00000 n +0000560647 00000 n +0000560779 00000 n +0000560900 00000 n +0000561054 00000 n +0000561208 00000 n +0000561404 00000 n +0000561499 00000 n +0000561594 00000 n +0000561679 00000 n +0000561824 00000 n +0000561996 00000 n +0000562091 00000 n +0000562186 00000 n +0000562283 00000 n +0000562913 00000 n +0000563007 00000 n +0000563101 00000 n +0000563220 00000 n +0000563305 00000 n +0000563450 00000 n +0000563622 00000 n +0000563707 00000 n +0000563852 00000 n +0000564023 00000 n +0000564118 00000 n +0000564215 00000 n +0000564309 00000 n +0000564426 00000 n +0000564548 00000 n +0000564690 00000 n +0000564844 00000 n +0000564998 00000 n +0000565144 00000 n +0000565237 00000 n +0000565366 00000 n +0000565459 00000 n +0000565556 00000 n +0000565650 00000 n +0000565743 00000 n +0000565872 00000 n +0000565965 00000 n +0000566062 00000 n +0000566156 00000 n +0000566253 00000 n +0000566383 00000 n +0000566573 00000 n +0000566727 00000 n +0000566881 00000 n +0000566974 00000 n +0000567066 00000 n +0000567219 00000 n +0000567332 00000 n +0000567533 00000 n +0000567619 00000 n +0000567762 00000 n +0000567919 00000 n +0000568005 00000 n +0000568148 00000 n +0000568314 00000 n +0000568408 00000 n +0000568520 00000 n +0000568606 00000 n +0000568749 00000 n +0000568915 00000 n +0000569009 00000 n +0000569095 00000 n +0000569238 00000 n +0000569404 00000 n +0000569498 00000 n +0000569584 00000 n +0000569727 00000 n +0000569893 00000 n +0000569987 00000 n +0000570073 00000 n +0000570216 00000 n +0000570382 00000 n +0000570476 00000 n +0000570562 00000 n +0000570705 00000 n +0000570871 00000 n +0000570965 00000 n +0000571086 00000 n +0000571172 00000 n +0000571315 00000 n +0000571481 00000 n +0000571575 00000 n +0000571661 00000 n +0000571804 00000 n +0000571970 00000 n +0000572064 00000 n +0000572150 00000 n +0000572293 00000 n +0000572459 00000 n +0000572553 00000 n +0000572639 00000 n +0000572782 00000 n +0000572948 00000 n +0000573042 00000 n +0000573128 00000 n +0000573271 00000 n +0000573437 00000 n +0000573531 00000 n +0000573617 00000 n +0000573760 00000 n +0000573926 00000 n +0000574020 00000 n +0000574141 00000 n +0000574227 00000 n +0000574370 00000 n +0000574536 00000 n +0000574630 00000 n +0000574724 00000 n +0000574810 00000 n +0000574953 00000 n +0000575119 00000 n +0000575213 00000 n +0000575299 00000 n +0000575442 00000 n +0000575608 00000 n +0000575701 00000 n +0000575787 00000 n +0000575930 00000 n +0000576094 00000 n +0000576187 00000 n +0000576299 00000 n +0000576385 00000 n +0000576528 00000 n +0000576692 00000 n +0000576785 00000 n +0000576871 00000 n +0000577014 00000 n +0000577237 00000 n +0000577330 00000 n +0000577416 00000 n +0000577559 00000 n +0000577725 00000 n +0000577819 00000 n +0000577905 00000 n +0000578048 00000 n +0000578214 00000 n +0000578308 00000 n +0000578394 00000 n +0000578537 00000 n +0000578703 00000 n +0000578797 00000 n +0000578883 00000 n +0000579026 00000 n +0000579192 00000 n +0000579286 00000 n +0000579434 00000 n +0000579528 00000 n +0000579614 00000 n +0000579757 00000 n +0000579923 00000 n +0000580017 00000 n +0000580103 00000 n +0000580246 00000 n +0000580412 00000 n +0000580506 00000 n +0000580592 00000 n +0000580735 00000 n +0000580901 00000 n +0000580995 00000 n +0000581107 00000 n +0000581193 00000 n +0000581336 00000 n +0000581502 00000 n +0000581596 00000 n +0000581682 00000 n +0000581825 00000 n +0000581991 00000 n +0000582085 00000 n +0000582171 00000 n +0000582314 00000 n +0000582480 00000 n +0000582574 00000 n +0000582660 00000 n +0000582803 00000 n +0000582969 00000 n +0000583063 00000 n +0000583149 00000 n +0000583292 00000 n +0000583458 00000 n +0000583552 00000 n +0000583655 00000 n +0000583741 00000 n +0000583884 00000 n +0000584050 00000 n +0000584144 00000 n +0000584230 00000 n +0000584373 00000 n +0000584539 00000 n +0000584633 00000 n +0000584719 00000 n +0000584862 00000 n +0000585028 00000 n +0000585122 00000 n +0000585208 00000 n +0000585351 00000 n +0000585517 00000 n +0000585611 00000 n +0000585705 00000 n +0000585791 00000 n +0000585934 00000 n +0000586100 00000 n +0000586194 00000 n +0000586280 00000 n +0000586423 00000 n +0000586589 00000 n +0000586683 00000 n +0000586769 00000 n +0000586912 00000 n +0000587078 00000 n +0000587172 00000 n +0000587258 00000 n +0000587401 00000 n +0000587567 00000 n +0000587661 00000 n +0000587764 00000 n +0000587850 00000 n +0000587993 00000 n +0000588159 00000 n +0000588253 00000 n +0000588339 00000 n +0000588482 00000 n +0000588648 00000 n +0000588742 00000 n +0000588828 00000 n +0000588971 00000 n +0000589137 00000 n +0000589231 00000 n +0000589317 00000 n +0000589460 00000 n +0000589626 00000 n +0000589720 00000 n +0000589832 00000 n +0000589918 00000 n +0000590061 00000 n +0000590227 00000 n +0000590321 00000 n +0000590424 00000 n +0000590510 00000 n +0000590653 00000 n +0000590819 00000 n +0000590913 00000 n +0000590999 00000 n +0000591142 00000 n +0000591308 00000 n +0000591402 00000 n +0000591488 00000 n +0000591631 00000 n +0000591797 00000 n +0000591891 00000 n +0000591977 00000 n +0000592120 00000 n +0000592284 00000 n +0000592377 00000 n +0000592463 00000 n +0000592606 00000 n +0000592770 00000 n +0000592863 00000 n +0000592949 00000 n +0000593092 00000 n +0000593256 00000 n +0000593349 00000 n +0000593456 00000 n +0000593664 00000 n +0000593757 00000 n +0000593850 00000 n +0000593943 00000 n +0000594036 00000 n +0000594129 00000 n +0000594222 00000 n +0000594313 00000 n +0000594424 00000 n +0000594595 00000 n +0000594766 00000 n +0000594887 00000 n +0000595058 00000 n +0000595229 00000 n +0000595400 00000 n +0000595490 00000 n +0000595550 00000 n +0000595610 00000 n +0000595670 00000 n +0000595730 00000 n +0000595790 00000 n +0000595850 00000 n +0000595910 00000 n +0000595970 00000 n +0000596030 00000 n +0000596091 00000 n +0000596152 00000 n +0000596213 00000 n +0000596274 00000 n +0000596335 00000 n +0000596396 00000 n +0000596457 00000 n +0000596518 00000 n +0000596579 00000 n +0000596640 00000 n +0000596701 00000 n +0000596762 00000 n +0000596823 00000 n +0000596884 00000 n +0000596945 00000 n +0000597006 00000 n +0000597067 00000 n +0000597128 00000 n +0000597189 00000 n +0000597250 00000 n +0000597311 00000 n +0000597372 00000 n +0000597433 00000 n +0000597494 00000 n +0000597555 00000 n +0000597616 00000 n +0000597677 00000 n +0000597738 00000 n +0000597799 00000 n +0000597860 00000 n +0000597921 00000 n +0000597982 00000 n +0000598043 00000 n +0000598104 00000 n +0000598165 00000 n +0000598226 00000 n +0000598287 00000 n +0000598348 00000 n +0000598409 00000 n +0000598593 00000 n +0000599339 00000 n +0000599431 00000 n +0000599686 00000 n +0000601251 00000 n +0000607801 00000 n +0000607988 00000 n +0000609151 00000 n +0000609243 00000 n +0000609502 00000 n +0000611612 00000 n +0000620396 00000 n +0000620582 00000 n +0000621445 00000 n +0000621537 00000 n +0000621798 00000 n +0000623535 00000 n +0000632415 00000 n +0000632605 00000 n +0000633280 00000 n +0000633372 00000 n +0000633638 00000 n +0000635021 00000 n +0000641745 00000 n +0000641913 00000 n +0000642183 00000 n +0000642275 00000 n +0000642555 00000 n +0000643972 00000 n +0000653610 00000 n +0000653789 00000 n +0000655702 00000 n +0000655794 00000 n +0000656046 00000 n +0000659375 00000 n +0000680853 00000 n +0000681041 00000 n +0000681297 00000 n +0000681384 00000 n +0000681638 00000 n +0000682339 00000 n +0000682789 00000 n +0000682962 00000 n +0000683236 00000 n +0000683325 00000 n +0000683619 00000 n +0000684418 00000 n +0000688825 00000 n +0000688865 00000 n +0000688905 00000 n +0000689265 00000 n +0000689689 00000 n +0000689744 00000 n +0000689799 00000 n +0000689854 00000 n +0000689910 00000 n +0000689965 00000 n +0000690020 00000 n +0000690075 00000 n +0000690130 00000 n +0000690185 00000 n +0000690240 00000 n +0000690295 00000 n +0000690350 00000 n +0000690405 00000 n +0000690461 00000 n +0000690516 00000 n +0000690572 00000 n +0000690628 00000 n +0000690684 00000 n +0000690740 00000 n +0000690795 00000 n +0000690851 00000 n +0000690906 00000 n +0000690961 00000 n +0000691017 00000 n +0000691071 00000 n +0000691124 00000 n +0000691179 00000 n +0000691234 00000 n +0000691289 00000 n +0000691344 00000 n +0000691399 00000 n +0000691454 00000 n +0000691509 00000 n +0000691564 00000 n +0000691620 00000 n +0000691675 00000 n +0000691730 00000 n +0000691785 00000 n +0000691840 00000 n +0000691896 00000 n +0000691951 00000 n +0000692006 00000 n +0000692061 00000 n +0000692116 00000 n +0000692171 00000 n +0000692227 00000 n +0000692282 00000 n +0000692337 00000 n +0000692392 00000 n +0000692447 00000 n +0000692503 00000 n +0000692558 00000 n +0000692614 00000 n +0000692670 00000 n +0000692726 00000 n +0000692783 00000 n +0000692839 00000 n +0000692894 00000 n +0000692949 00000 n +0000693004 00000 n +0000693059 00000 n +0000693115 00000 n +0000693170 00000 n +0000693226 00000 n +0000693281 00000 n +0000693336 00000 n +0000693391 00000 n +0000693446 00000 n +0000693501 00000 n +0000693556 00000 n +0000693612 00000 n +0000693668 00000 n +0000693724 00000 n +0000693779 00000 n +0000693834 00000 n +0000693889 00000 n +0000693945 00000 n +0000694000 00000 n +0000694055 00000 n +0000694110 00000 n +0000694165 00000 n +0000694220 00000 n +0000694275 00000 n +0000694331 00000 n +0000694387 00000 n +0000694443 00000 n +0000694498 00000 n +0000694553 00000 n +0000694608 00000 n +0000694663 00000 n +0000694718 00000 n +0000694774 00000 n +0000694830 00000 n +0000694885 00000 n +0000694940 00000 n +0000694995 00000 n +0000695050 00000 n +0000695104 00000 n +0000695159 00000 n +0000695214 00000 n +0000695269 00000 n +0000695324 00000 n +0000695379 00000 n +0000695435 00000 n +0000695490 00000 n +0000695545 00000 n +0000695600 00000 n +0000695655 00000 n +0000695710 00000 n +0000695766 00000 n +0000695822 00000 n +0000695877 00000 n +0000695932 00000 n +0000695987 00000 n +0000696043 00000 n +0000696099 00000 n +0000696154 00000 n +0000696209 00000 n +0000696264 00000 n +0000696320 00000 n +0000696376 00000 n +0000696432 00000 n +0000696489 00000 n +0000696545 00000 n +0000696601 00000 n +0000696656 00000 n +0000696711 00000 n +0000696766 00000 n +0000696821 00000 n +0000696876 00000 n +0000696932 00000 n +0000696987 00000 n +0000697042 00000 n +0000697098 00000 n +0000697154 00000 n +0000697209 00000 n +0000697264 00000 n +0000697319 00000 n +0000697374 00000 n +0000697429 00000 n +0000697484 00000 n +0000697540 00000 n +0000697595 00000 n +0000697650 00000 n +0000697705 00000 n +0000697761 00000 n +0000697816 00000 n +0000697872 00000 n +0000697927 00000 n +0000697983 00000 n +0000698038 00000 n +0000698093 00000 n +0000698148 00000 n +0000698203 00000 n +0000698258 00000 n +0000698313 00000 n +0000698368 00000 n +0000698423 00000 n +0000698478 00000 n +0000698533 00000 n +0000698588 00000 n +0000698643 00000 n +0000698699 00000 n +0000698755 00000 n +0000698811 00000 n +0000698866 00000 n +0000698921 00000 n +0000698976 00000 n +0000699031 00000 n +0000699086 00000 n +0000699141 00000 n +0000699196 00000 n +0000699251 00000 n +0000699306 00000 n +0000699361 00000 n +0000699416 00000 n +0000699471 00000 n +0000699526 00000 n +0000699582 00000 n +0000699638 00000 n +0000699694 00000 n +0000699749 00000 n +0000699804 00000 n +0000699859 00000 n +0000699914 00000 n +0000699969 00000 n +0000700024 00000 n +0000700080 00000 n +0000700135 00000 n +0000700190 00000 n +0000700245 00000 n +0000700301 00000 n +0000700357 00000 n +0000700413 00000 n +0000700469 00000 n +0000700524 00000 n +0000700580 00000 n +0000700635 00000 n +0000700691 00000 n +0000700747 00000 n +0000700803 00000 n +0000700860 00000 n +0000700916 00000 n +0000700972 00000 n +0000701027 00000 n +0000701083 00000 n +0000701138 00000 n +0000701193 00000 n +0000701249 00000 n +0000701306 00000 n +0000701362 00000 n +0000701419 00000 n +0000701476 00000 n +0000701533 00000 n +0000701589 00000 n +0000701645 00000 n +0000701701 00000 n +0000701757 00000 n +0000701813 00000 n +0000701870 00000 n +0000701927 00000 n +0000701984 00000 n +0000702039 00000 n +0000702095 00000 n +0000702151 00000 n +0000702206 00000 n +0000702263 00000 n +0000702318 00000 n +0000702373 00000 n +0000702431 00000 n +0000702488 00000 n +0000702544 00000 n +0000702601 00000 n +0000702658 00000 n +0000702714 00000 n +0000702770 00000 n +0000702826 00000 n +0000702882 00000 n +0000702937 00000 n +0000702993 00000 n +0000703049 00000 n +0000703105 00000 n +0000703159 00000 n +0000703215 00000 n +0000703273 00000 n +0000703330 00000 n +0000703387 00000 n +0000703442 00000 n +0000703498 00000 n +0000703554 00000 n +0000703609 00000 n +0000703666 00000 n +0000703722 00000 n +0000703777 00000 n +0000703833 00000 n +0000703889 00000 n +0000703946 00000 n +0000704002 00000 n +0000704058 00000 n +0000704114 00000 n +0000704170 00000 n +0000704225 00000 n +0000704282 00000 n +0000704339 00000 n +0000704395 00000 n +0000704451 00000 n +0000704507 00000 n +0000704562 00000 n +0000704618 00000 n +0000704674 00000 n +0000704730 00000 n +0000704786 00000 n +0000704842 00000 n +0000704898 00000 n +0000704955 00000 n +0000705313 00000 n +0000708227 00000 n +0000708515 00000 n +0000708875 00000 n +0000709200 00000 n +0000709524 00000 n +0000709911 00000 n +0000710298 00000 n +0000710602 00000 n +0000710893 00000 n +0000711167 00000 n +0000711452 00000 n +0000711839 00000 n +0000712238 00000 n +0000712568 00000 n +0000712892 00000 n +0000713270 00000 n +0000713604 00000 n +0000713936 00000 n +0000714325 00000 n +0000714707 00000 n +0000715048 00000 n +0000715393 00000 n +0000715703 00000 n +0000716015 00000 n +0000716332 00000 n +0000716674 00000 n +0000717004 00000 n +0000717398 00000 n +0000717754 00000 n +0000718055 00000 n +0000718382 00000 n +0000718727 00000 n +0000719071 00000 n +0000719680 00000 n +0000735800 00000 n +0000736144 00000 n +0000736469 00000 n +0000736788 00000 n +0000737179 00000 n +0000737525 00000 n +0000737847 00000 n +0000738130 00000 n +0000738461 00000 n +0000738833 00000 n +0000739226 00000 n +0000739662 00000 n +0000740044 00000 n +0000740332 00000 n +0000740694 00000 n +0000741034 00000 n +0000741377 00000 n +0000741715 00000 n +0000741998 00000 n +0000742265 00000 n +0000742757 00000 n +0000752615 00000 n +0000752795 00000 n +0000752977 00000 n +0000753159 00000 n +0000753339 00000 n +0000753521 00000 n +0000753944 00000 n +0000758522 00000 n +0000758713 00000 n +0000758905 00000 n +0000759085 00000 n +0000759265 00000 n +0000759447 00000 n +0000759629 00000 n +0000759810 00000 n +0000759993 00000 n +0000760176 00000 n +0000760359 00000 n +0000760540 00000 n +0000760998 00000 n +0000766535 00000 n +0000766718 00000 n +0000766901 00000 n +0000767086 00000 n +0000767269 00000 n +0000767452 00000 n +0000767633 00000 n +0000767844 00000 n +0000768056 00000 n +0000768268 00000 n +0000768478 00000 n +0000768671 00000 n +0000769110 00000 n +0000774558 00000 n +0000774752 00000 n +0000774933 00000 n +0000775116 00000 n +0000775300 00000 n +0000775483 00000 n +0000775664 00000 n +0000775845 00000 n +0000776026 00000 n +0000776209 00000 n +0000776393 00000 n +0000776577 00000 n +0000776761 00000 n +0000776945 00000 n +0000777128 00000 n +0000777312 00000 n +0000777496 00000 n +0000778000 00000 n +0000783888 00000 n +0000784073 00000 n +0000784255 00000 n +0000784438 00000 n +0000784623 00000 n +0000784808 00000 n +0000784993 00000 n +0000785176 00000 n +0000785361 00000 n +0000785562 00000 n +0000785758 00000 n +0000786208 00000 n +0000792215 00000 n +0000792414 00000 n +0000792599 00000 n +0000792996 00000 n +0000799004 00000 n +0000799194 00000 n +0000799544 00000 n +0000806569 00000 n +0000806906 00000 n +0000813126 00000 n +0000813340 00000 n +0000813554 00000 n +0000813951 00000 n +0000820546 00000 n +0000820728 00000 n +0000820910 00000 n +0000821123 00000 n +0000821529 00000 n +0000827821 00000 n +0000828034 00000 n +0000828422 00000 n +0000834403 00000 n +0000834740 00000 n +0000842762 00000 n +0000842969 00000 n +0000843179 00000 n +0000843371 00000 n +0000843563 00000 n +0000843755 00000 n +0000844198 00000 n +0000851556 00000 n +0000851750 00000 n +0000851943 00000 n +0000852127 00000 n +0000852320 00000 n +0000852534 00000 n +0000852977 00000 n +0000860386 00000 n +0000860577 00000 n +0000860759 00000 n +0000861194 00000 n +0000868220 00000 n +0000868409 00000 n +0000868601 00000 n +0000868998 00000 n +0000874886 00000 n +0000875101 00000 n +0000875310 00000 n +0000875745 00000 n +0000880996 00000 n +0000881206 00000 n +0000881390 00000 n +0000881806 00000 n +0000887252 00000 n +0000887464 00000 n +0000887676 00000 n +0000887870 00000 n +0000888073 00000 n +0000888277 00000 n +0000888476 00000 n +0000888665 00000 n +0000888879 00000 n +0000889074 00000 n +0000889264 00000 n +0000889733 00000 n +0000895270 00000 n +0000895465 00000 n +0000895672 00000 n +0000895881 00000 n +0000896093 00000 n +0000896305 00000 n +0000896516 00000 n +0000896711 00000 n +0000896904 00000 n +0000897355 00000 n +0000902759 00000 n +0000902953 00000 n +0000903170 00000 n +0000903366 00000 n +0000903578 00000 n +0000903790 00000 n +0000903982 00000 n +0000904195 00000 n +0000904386 00000 n +0000904856 00000 n +0000911913 00000 n +0000912105 00000 n +0000912318 00000 n +0000912513 00000 n +0000912726 00000 n +0000912920 00000 n +0000913115 00000 n +0000913319 00000 n +0000913540 00000 n +0000913755 00000 n +0000913949 00000 n +0000914136 00000 n +0000914326 00000 n +0000914520 00000 n +0000915035 00000 n +0000921333 00000 n +0000921526 00000 n +0000921746 00000 n +0000921939 00000 n +0000922123 00000 n +0000922519 00000 n +0000927813 00000 n +0000928031 00000 n +0000928242 00000 n +0000928434 00000 n +0000928652 00000 n +0000928863 00000 n +0000929056 00000 n +0000929266 00000 n +0000929457 00000 n +0000929651 00000 n +0000929865 00000 n +0000930353 00000 n +0000935931 00000 n +0000936132 00000 n +0000936346 00000 n +0000936762 00000 n +0000941877 00000 n +0000942062 00000 n +0000942247 00000 n +0000942663 00000 n +0000947793 00000 n +0000947987 00000 n +0000948170 00000 n +0000948567 00000 n +0000953113 00000 n +0000953305 00000 n +0000953497 00000 n +0000953700 00000 n +0000953892 00000 n +0000954108 00000 n +0000954321 00000 n +0000954539 00000 n +0000954757 00000 n +0000954940 00000 n +0000955122 00000 n +0000955591 00000 n +0000961222 00000 n +0000961433 00000 n +0000961616 00000 n +0000961802 00000 n +0000961986 00000 n +0000962382 00000 n +0000967555 00000 n +0000967737 00000 n +0000967950 00000 n +0000968132 00000 n +0000968314 00000 n +0000968511 00000 n +0000968697 00000 n +0000968882 00000 n +0000969286 00000 n +0000974760 00000 n +0000974962 00000 n +0000975154 00000 n +0000975338 00000 n +0000975520 00000 n +0000975732 00000 n +0000975916 00000 n +0000976100 00000 n +0000976285 00000 n +0000976470 00000 n +0000976654 00000 n +0000976838 00000 n +0000977024 00000 n +0000977208 00000 n +0000977394 00000 n +0000977577 00000 n +0000978072 00000 n +0000984103 00000 n +0000984287 00000 n +0000984637 00000 n +0000989591 00000 n +0000989775 00000 n +0000989959 00000 n +0000990143 00000 n +0000990329 00000 n +0000990514 00000 n +0000990699 00000 n +0000990884 00000 n +0000991307 00000 n +0000997203 00000 n +0000997403 00000 n +0000997603 00000 n +0000997785 00000 n +0000997969 00000 n +0000998151 00000 n +0000998335 00000 n +0000998548 00000 n +0000998732 00000 n +0000998916 00000 n +0000999102 00000 n +0000999286 00000 n +0000999726 00000 n +0001005417 00000 n +0001005632 00000 n +0001005817 00000 n +0001006002 00000 n +0001006186 00000 n +0001006398 00000 n +0001006582 00000 n +0001006766 00000 n +0001006951 00000 n +0001007136 00000 n +0001007577 00000 n +0001013135 00000 n +0001013317 00000 n +0001013501 00000 n +0001013701 00000 n +0001013881 00000 n +0001014064 00000 n +0001014248 00000 n +0001014432 00000 n +0001014616 00000 n +0001014800 00000 n +0001014984 00000 n +0001015188 00000 n +0001015370 00000 n +0001015553 00000 n +0001015739 00000 n +0001015924 00000 n +0001016109 00000 n +0001016328 00000 n +0001016512 00000 n +0001017034 00000 n +0001023952 00000 n +0001024136 00000 n +0001024319 00000 n +0001024503 00000 n +0001024687 00000 n +0001024870 00000 n +0001025054 00000 n +0001025238 00000 n +0001025421 00000 n +0001025604 00000 n +0001025788 00000 n +0001025972 00000 n +0001026184 00000 n +0001026367 00000 n +0001026550 00000 n +0001026737 00000 n +0001026919 00000 n +0001027121 00000 n +0001027341 00000 n +0001027525 00000 n +0001027712 00000 n +0001027897 00000 n +0001028084 00000 n +0001028642 00000 n +0001035182 00000 n +0001035399 00000 n +0001035582 00000 n +0001035877 00000 n +0001036062 00000 n +0001036361 00000 n +0001036546 00000 n +0001036830 00000 n +0001037014 00000 n +0001037199 00000 n +0001037496 00000 n +0001037680 00000 n +0001038120 00000 n +0001043245 00000 n +0001043429 00000 n +0001043739 00000 n +0001043922 00000 n +0001044282 00000 n +0001044644 00000 n +0001044827 00000 n +0001045131 00000 n +0001045316 00000 n +0001045598 00000 n +0001045782 00000 n +0001045966 00000 n +0001046264 00000 n +0001046448 00000 n +0001046632 00000 n +0001046816 00000 n +0001047124 00000 n +0001047308 00000 n +0001047492 00000 n +0001047801 00000 n +0001047987 00000 n +0001048286 00000 n +0001048472 00000 n +0001048755 00000 n +0001048940 00000 n +0001049126 00000 n +0001049418 00000 n +0001049605 00000 n +0001050170 00000 n +0001055552 00000 n +0001055737 00000 n +0001056037 00000 n +0001056222 00000 n +0001056528 00000 n +0001056712 00000 n +0001057017 00000 n +0001057324 00000 n +0001057508 00000 n +0001057797 00000 n +0001058088 00000 n +0001058273 00000 n +0001058573 00000 n +0001058757 00000 n +0001059064 00000 n +0001059248 00000 n +0001059530 00000 n +0001059714 00000 n +0001060012 00000 n +0001060196 00000 n +0001060502 00000 n +0001060686 00000 n +0001060997 00000 n +0001061181 00000 n +0001061482 00000 n +0001061667 00000 n +0001061963 00000 n +0001062148 00000 n +0001062443 00000 n +0001062630 00000 n +0001062914 00000 n +0001063506 00000 n +0001068805 00000 n +0001068990 00000 n +0001069281 00000 n +0001069466 00000 n +0001069650 00000 n +0001069966 00000 n +0001070151 00000 n +0001070453 00000 n +0001070639 00000 n +0001070824 00000 n +0001071144 00000 n +0001071466 00000 n +0001071650 00000 n +0001071930 00000 n +0001072114 00000 n +0001072298 00000 n +0001072582 00000 n +0001072766 00000 n +0001073062 00000 n +0001073246 00000 n +0001073554 00000 n +0001073740 00000 n +0001073925 00000 n +0001074110 00000 n +0001074296 00000 n +0001074591 00000 n +0001074777 00000 n +0001075333 00000 n +0001080520 00000 n +0001080705 00000 n +0001081001 00000 n +0001081185 00000 n +0001081476 00000 n +0001081660 00000 n +0001081845 00000 n +0001082143 00000 n +0001082328 00000 n +0001082687 00000 n +0001083048 00000 n +0001083232 00000 n +0001083531 00000 n +0001083715 00000 n +0001084028 00000 n +0001084343 00000 n +0001084527 00000 n +0001084817 00000 n +0001085001 00000 n +0001085299 00000 n +0001085483 00000 n +0001085784 00000 n +0001086087 00000 n +0001086272 00000 n +0001086572 00000 n +0001086757 00000 n +0001087060 00000 n +0001087246 00000 n +0001087546 00000 n +0001087732 00000 n +0001088035 00000 n +0001088221 00000 n +0001088511 00000 n +0001089121 00000 n +0001094471 00000 n +0001094656 00000 n +0001094940 00000 n +0001095124 00000 n +0001095421 00000 n +0001095605 00000 n +0001095887 00000 n +0001096072 00000 n +0001096354 00000 n +0001096539 00000 n +0001096807 00000 n +0001096991 00000 n +0001097298 00000 n +0001097482 00000 n +0001097765 00000 n +0001097949 00000 n +0001098232 00000 n +0001098416 00000 n +0001098750 00000 n +0001099085 00000 n +0001099269 00000 n +0001099551 00000 n +0001099737 00000 n +0001100037 00000 n +0001100221 00000 n +0001100521 00000 n +0001100706 00000 n +0001101010 00000 n +0001101196 00000 n +0001101485 00000 n +0001101671 00000 n +0001102263 00000 n +0001107462 00000 n +0001107762 00000 n +0001107946 00000 n +0001108241 00000 n +0001108425 00000 n +0001108719 00000 n +0001108903 00000 n +0001109197 00000 n +0001109383 00000 n +0001109682 00000 n +0001109867 00000 n +0001110149 00000 n +0001110333 00000 n +0001110636 00000 n +0001110820 00000 n +0001111004 00000 n +0001111188 00000 n +0001111372 00000 n +0001111655 00000 n +0001111841 00000 n +0001112135 00000 n +0001112321 00000 n +0001112620 00000 n +0001112805 00000 n +0001113101 00000 n +0001113286 00000 n +0001113575 00000 n +0001113762 00000 n +0001114053 00000 n +0001114627 00000 n +0001120096 00000 n +0001120281 00000 n +0001120580 00000 n +0001120765 00000 n +0001120950 00000 n +0001121136 00000 n +0001121426 00000 n +0001121611 00000 n +0001121915 00000 n +0001122100 00000 n +0001122395 00000 n +0001122580 00000 n +0001122870 00000 n +0001123055 00000 n +0001123356 00000 n +0001123659 00000 n +0001123844 00000 n +0001124143 00000 n +0001124618 00000 n +0001127994 00000 n +0001129714 00000 n +0001131985 00000 n +0001132073 00000 n +0001132313 00000 n +0001133628 00000 n +trailer +<< + /Size 5278 + /Root 5277 0 R + /Info 5275 0 R + /ID [(HHwsV4w2OKoHWq5hDV/GeA==) (8/8Hb0n3/ti5Ewx/bKL9Ww==)] +>> +startxref +1135503 +%%EOF \ No newline at end of file diff --git a/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css b/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css new file mode 100644 index 0000000000..843606605e --- /dev/null +++ b/packages/client/ui-settings-general/src/client/WelcomeNotice.module.css @@ -0,0 +1,164 @@ +.page { + position: relative; + z-index: 1; + width: min(640px, calc(100vw - 64px)); + max-height: 100vh; + padding: clamp(64px, 9vh, 104px) 0 40px; + box-sizing: border-box; + overflow-y: auto; + color: var(--dsw-alias-label-primary); + --welcome-ease-out: cubic-bezier(0.23, 1, 0.32, 1); +} + +.brand { + display: flex; + align-items: center; + margin-bottom: 42px; + color: var(--dsw-alias-label-primary); +} + +.title { + margin: 0; + font-size: 28px; + line-height: 36px; + font-weight: 600; + letter-spacing: -0.02em; + outline: none; +} + +.opening, +.status, +.reflection, +.feedback, +.error { + margin: 0; +} + +.opening { + margin-top: 30px; +} + +.status { + margin-top: 18px; +} + +.reflection { + margin-top: 36px; + padding: 0; +} + +.feedback { + margin-top: 30px; +} + +.opening, +.status, +.reflection, +.feedback { + font-size: 16px; + line-height: 28px; + color: var(--dsw-alias-label-secondary); +} + +.feedback strong { + color: inherit; + font-weight: 500; +} + +.footer { + display: flex; + justify-content: flex-end; + margin-top: 32px; +} + +.error { + margin-top: 20px; + font-size: 14px; + line-height: 22px; + color: var(--dsw-alias-state-error-primary); +} + +.primary { + min-width: 120px; + transition: transform 140ms var(--welcome-ease-out); +} + +.primary:active:not(:disabled) { + transform: scale(0.97); +} + +.brand, +.title, +.opening, +.status, +.reflection, +.feedback, +.footer { + animation: welcome-enter 280ms var(--welcome-ease-out) both; +} + +.title { animation-delay: 40ms; } +.opening { animation-delay: 80ms; } +.status { animation-delay: 120ms; } +.reflection { animation-delay: 160ms; } +.feedback { animation-delay: 200ms; } +.footer { animation-delay: 240ms; } + +@keyframes welcome-enter { + from { + opacity: 0; + transform: translateY(8px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@media (prefers-reduced-motion: reduce) { + .brand, + .title, + .opening, + .status, + .reflection, + .feedback, + .footer { + animation: none; + } + + .primary { + transition: none; + } +} + +@media (max-width: 560px) { + .page { + width: calc(100vw - 40px); + padding-top: 38px; + } + + .brand { + margin-bottom: 30px; + } + + .opening { + margin-top: 24px; + } + + .reflection { + margin-top: 28px; + } + + .feedback { + margin-top: 28px; + } + + .footer { + margin-top: 30px; + } + + .primary { + width: 100%; + } +} diff --git a/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx b/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx new file mode 100644 index 0000000000..32d454e771 --- /dev/null +++ b/packages/client/ui-settings-general/src/client/WelcomeNotice.tsx @@ -0,0 +1,87 @@ +/** Product-wide, versioned first-run welcome step. */ + +import { useCallback, useEffect, useRef } from 'react' +import type { ReactNode } from 'react' +import type { PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots' +import { BrandWordmark, Button } from '@deepseek-ai/dsh-client-ui-primitives' +import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-web-react' +import type { WelcomeNoticeState, WelcomeNoticeStore } from './welcome-store.ts' +import css from './WelcomeNotice.module.css' + +function emphasizedFeedback(paragraph: string, emphasis: string): ReactNode { + const index = paragraph.indexOf(emphasis) + /* v8 ignore next -- both locale values derive from one owner object that contains the emphasis */ + if (index < 0) return paragraph + return ( + <> + {paragraph.slice(0, index)} + {emphasis} + {paragraph.slice(index + emphasis.length)} + + ) +} + +/** Registrant-owned dependencies of {@link WelcomeNotice}. */ +export interface WelcomeNoticeInjected { + controller: WelcomeNoticeStore + useSnapshot: SnapshotSelectorHook +} + +/** Coordinator owner props plus the welcome step's injected face. */ +export type WelcomeNoticeProps = + PropsRuntime<'settings.onboarding'> & PropsLocale<'settings'> & WelcomeNoticeInjected + +/** Render the mandatory notice until its current version commits durably. */ +export function WelcomeNotice(props: WelcomeNoticeProps): ReactNode { + const { complete, controller, useSnapshot, t } = props + const state = useSnapshot(snapshot => snapshot) + const finished = useRef(false) + const titleRef = useRef(null) + const finish = useCallback((): void => { + if (finished.current) return + finished.current = true + complete() + }, [complete]) + + useEffect(() => { + if (state.status === 'idle') void controller.load() + }, [controller, state.status]) + + useEffect(() => { + if (state.acknowledged) finish() + }, [finish, state.acknowledged]) + + useEffect(() => { + if (state.status === 'ready' && !state.acknowledged) titleRef.current?.focus() + }, [state.acknowledged, state.status]) + + if (state.status === 'idle' || state.status === 'loading' || state.acknowledged) return null + + const acknowledge = async (): Promise => { + if (await controller.acknowledge()) finish() + } + + return ( +

+ +

{t('welcome.title')}

+

{t('welcome.paragraph.0')}

+

{t('welcome.paragraph.1')}

+
{t('welcome.paragraph.2')}
+

+ {emphasizedFeedback(t('welcome.paragraph.3'), t('welcome.feedbackEmphasis'))} +

+ {state.error === null ? null :

{t('welcome.error')}

} +
+ +
+
+ ) +} diff --git a/packages/client/ui-settings-general/src/client/welcome-store.ts b/packages/client/ui-settings-general/src/client/welcome-store.ts new file mode 100644 index 0000000000..ad0e18305c --- /dev/null +++ b/packages/client/ui-settings-general/src/client/welcome-store.ts @@ -0,0 +1,108 @@ +/** Durable welcome-notice state over the Host settings document. */ + +import type { IApiClient, SettingsNamespaceView } from '@deepseek-ai/dsh-client-connection/client' +import type { SnapshotStore } from '@deepseek-ai/dsh-client-runtime/client' +import { createSnapshotStore } from '@deepseek-ai/dsh-client-runtime/client' +import { + WELCOME_NOTICE_ACK_FIELD, WELCOME_NOTICE_SETTINGS_NAMESPACE, WELCOME_NOTICE_VERSION, +} from '../onboarding-copy.ts' + +/** State rendered by the welcome step. */ +export interface WelcomeNoticeState { + status: 'idle' | 'loading' | 'ready' | 'saving' | 'error' + acknowledged: boolean + error: string | null +} + +function messageOf(error: unknown): string { + return error instanceof Error ? error.message : String(error) +} + +function acknowledgementOf(view: SettingsNamespaceView): string | undefined { + if (typeof view.value !== 'object' || view.value === null) return undefined + const value = (view.value as Record)[WELCOME_NOTICE_ACK_FIELD] + return typeof value === 'string' ? value : undefined +} + +/** Coordinates welcome acknowledgement reads and the sole durable write. */ +export class WelcomeNoticeStore { + /** uSES-safe state source shared by the registered welcome step. */ + readonly store: SnapshotStore = createSnapshotStore({ + status: 'idle', acknowledged: false, error: null, + }) + + private generation = 0 + + /** @param api - settings wire face used for durable reads and writes. */ + constructor(private readonly api: Pick) {} + + /** Load the current acknowledgement from the Host settings document. */ + async load(): Promise { + const generation = ++this.generation + this.store.update((state) => { state.status = 'loading'; state.error = null }) + try { + const response = await this.api.settings.describe({}) + if (!response.result.ok) throw new Error(response.result.error.message) + const view = response.result.value.namespaces.find( + candidate => candidate.ns === WELCOME_NOTICE_SETTINGS_NAMESPACE, + ) + if (view === undefined) throw new Error('welcome acknowledgement settings are unavailable') + if (generation !== this.generation) return + this.store.update((state) => { + state.status = 'ready' + state.acknowledged = acknowledgementOf(view) === WELCOME_NOTICE_VERSION + state.error = null + }) + } catch (error) { + if (generation !== this.generation) return + this.store.update((state) => { + state.status = 'error' + state.acknowledged = false + state.error = messageOf(error) + }) + } + } + + /** + * Persist this copy version. The path mutation is idempotent across tabs and + * preserves every sibling setting; failure leaves the step unacknowledged. + * @returns true only when the Host committed the acknowledgement. + */ + async acknowledge(): Promise { + const generation = ++this.generation + this.store.update((state) => { state.status = 'saving'; state.error = null }) + try { + const response = await this.api.settings.mutate({ + ns: WELCOME_NOTICE_SETTINGS_NAMESPACE, + ops: [{ op: 'set', path: [WELCOME_NOTICE_ACK_FIELD], value: WELCOME_NOTICE_VERSION }], + }) + if (!response.result.ok) throw new Error(response.result.error.message) + if (generation === this.generation) { + this.store.update((state) => { + state.status = 'ready' + state.acknowledged = true + state.error = null + }) + } + return true + } catch (error) { + if (generation === this.generation) { + this.store.update((state) => { + state.status = 'error' + state.acknowledged = false + state.error = messageOf(error) + }) + } + return false + } + } +} + +/** + * Refresh only after the welcome step has begun reading durable state. + * @param controller - welcome state owner whose current status decides whether to load. + */ +export function refreshWelcomeIfLoaded(controller: WelcomeNoticeStore): void { + if (controller.store.getSnapshot().status === 'idle') return + void controller.load() +} diff --git a/packages/client/ui-settings-general/src/onboarding-copy.ts b/packages/client/ui-settings-general/src/onboarding-copy.ts new file mode 100644 index 0000000000..edb3249f5a --- /dev/null +++ b/packages/client/ui-settings-general/src/onboarding-copy.ts @@ -0,0 +1,37 @@ +/** Durable settings namespace for product-wide GUI onboarding facts. */ +export const WELCOME_NOTICE_SETTINGS_NAMESPACE = 'ui-onboarding' + +/** Field storing the last welcome notice version the user acknowledged. */ +export const WELCOME_NOTICE_ACK_FIELD = 'welcomeNoticeVersion' + +/** + * Bump only when the notice changes materially and every user should see it + * again. The acknowledgement is compared for exact equality. + */ +export const WELCOME_NOTICE_VERSION = '2026-07-30.5' + +/** The complete editable welcome notice in both supported GUI locales. */ +export const WELCOME_NOTICE_COPY = { + zh: { + title: '内测声明', + paragraphs: [ + '感谢您愿意拨冗试用 DeepSeek Harness。', + '目前的版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。', + '“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。', + '我们尤其希望听见那些失败、困惑与不顺手的时刻——如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', + ], + feedbackEmphasis: '如果您有任何反馈与建议,请在企业微信群中留言告诉我们', + continueLabel: '继续', + }, + en: { + title: 'Internal Testing Notice', + paragraphs: [ + 'Thank you for taking the time to try DeepSeek Harness.', + 'This version is still in internal testing. Its functionality still needs improvement, and the experience may feel a little rough.', + '“As one cuts and files, as one chisels and polishes.” A product grows through real encounters and candid feedback. Problems you discover in real use may prompt us to reconsider—or even overturn—our existing designs.', + 'We especially want to hear about failures, confusion, and friction. If you have any feedback or suggestions, please leave us a message in the company WeChat group. Every piece of feedback helps us refine it.', + ], + feedbackEmphasis: 'If you have any feedback or suggestions, please leave us a message in the company WeChat group', + continueLabel: 'Continue', + }, +} as const diff --git a/packages/client/ui-settings-general/tests/host.spec.ts b/packages/client/ui-settings-general/tests/host.spec.ts new file mode 100644 index 0000000000..6434bc833a --- /dev/null +++ b/packages/client/ui-settings-general/tests/host.spec.ts @@ -0,0 +1,29 @@ +import { Context } from 'cordis' +import { describe, expect, it } from 'vitest' +import { Settings, settingsNamespace, type SettingsNamespace } from '@deepseek-ai/dsh-settings' +import { apply } from '../src/index.ts' +import { WELCOME_NOTICE_SETTINGS_NAMESPACE } from '../src/onboarding-copy.ts' + +class MemorySettings extends Settings { + readonly writable = true + protected load(): Promise> { return Promise.resolve({}) } + protected persist(_ns: SettingsNamespace, _section: Record): Promise { + return Promise.resolve() + } +} + +describe('ui-settings-general host', () => { + it('registers and disposes the durable onboarding namespace with its fiber', async () => { + const ctx = new Context() + await ctx.plugin(MemorySettings).await() + const fiber = ctx.plugin({ apply }) + await fiber.await() + expect(ctx.settings.describe().map(row => row.ns)).toContain( + settingsNamespace(WELCOME_NOTICE_SETTINGS_NAMESPACE), + ) + await fiber.dispose() + expect(ctx.settings.describe().map(row => row.ns)).not.toContain( + settingsNamespace(WELCOME_NOTICE_SETTINGS_NAMESPACE), + ) + }) +}) diff --git a/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx b/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx new file mode 100644 index 0000000000..889fa1026d --- /dev/null +++ b/packages/client/ui-settings-general/tests/welcome-notice.spec.tsx @@ -0,0 +1,101 @@ +// @vitest-environment jsdom +import { act, cleanup, fireEvent, render, screen } from '@testing-library/react' +import { afterEach, describe, expect, it, vi } from 'vitest' +import { bindSnapshotSelector } from '@deepseek-ai/dsh-client-web-react' +import { WelcomeNotice } from '../src/client/WelcomeNotice.tsx' +import type { WelcomeNoticeProps } from '../src/client/WelcomeNotice.tsx' +import { WelcomeNoticeStore } from '../src/client/welcome-store.ts' +import { zh } from '../src/client/locales.ts' +import { + WELCOME_NOTICE_ACK_FIELD, WELCOME_NOTICE_COPY, WELCOME_NOTICE_SETTINGS_NAMESPACE, + WELCOME_NOTICE_VERSION, +} from '../src/onboarding-copy.ts' + +afterEach(cleanup) + +function response(value: T) { + return { rpcId: 'welcome-rpc' as never, result: { ok: true as const, value } } +} + +function mount(version?: string, mutateImpl: () => Promise = () => Promise.resolve(response({}))) { + const mutate = vi.fn(mutateImpl) + const api = { + settings: { + describe: () => Promise.resolve(response({ + writable: true, + namespaces: [{ + ns: WELCOME_NOTICE_SETTINGS_NAMESPACE, + schema: {}, + value: version === undefined ? {} : { [WELCOME_NOTICE_ACK_FIELD]: version }, + applies: 'live' as const, + secrets: [], + revision: 0, + }], + })), + mutate, + }, + } + const controller = new WelcomeNoticeStore(api as never) + const complete = vi.fn() + const unusedHook = (() => { throw new Error('unused standard hook') }) as never + const props: WelcomeNoticeProps = { + stepId: 'welcome-notice', + complete, + openSection: vi.fn(), + useSessions: unusedHook, + useWorkspaces: unusedHook, + controller, + useSnapshot: bindSnapshotSelector(controller.store), + t: key => key in zh ? zh[key as keyof typeof zh] : key, + } + return { ...render(), complete, controller, mutate } +} + +describe('WelcomeNotice', () => { + it('renders the owner copy with one primary action and no dismissal control', async () => { + const h = mount() + const page = await screen.findByRole('region', { name: WELCOME_NOTICE_COPY.zh.title }) + expect(screen.getByText(WELCOME_NOTICE_COPY.zh.title)).toBeTruthy() + for (const text of WELCOME_NOTICE_COPY.zh.paragraphs) expect(page.textContent).toContain(text) + expect(page.textContent?.match(/感谢您愿意拨冗试用 DeepSeek Harness/g) ?? []).toHaveLength(1) + const buttons = page.querySelectorAll('button') + expect(buttons).toHaveLength(1) + expect(screen.getByRole('button', { name: WELCOME_NOTICE_COPY.zh.continueLabel })).toBeTruthy() + expect(document.activeElement).toBe(screen.getByRole('heading', { name: WELCOME_NOTICE_COPY.zh.title })) + fireEvent.keyDown(document, { key: 'Escape' }) + expect(h.complete).not.toHaveBeenCalled() + expect(screen.getByRole('region')).toBeTruthy() + }) + + it('completes only after the acknowledgement write commits', async () => { + const h = mount() + await screen.findByRole('region') + fireEvent.click(screen.getByRole('button', { name: WELCOME_NOTICE_COPY.zh.continueLabel })) + await act(async () => { await Promise.resolve() }) + expect(h.mutate).toHaveBeenCalledOnce() + expect(h.complete).toHaveBeenCalledOnce() + }) + + it('skips itself when this exact version was already acknowledged', async () => { + const h = mount(WELCOME_NOTICE_VERSION) + await act(async () => { await h.controller.load() }) + expect(screen.queryByRole('region')).toBeNull() + expect(h.complete).toHaveBeenCalledOnce() + }) + + it('keeps the sole action disabled while saving and reports a refused write', async () => { + let resolveWrite!: (value: unknown) => void + const write = new Promise((resolve) => { resolveWrite = resolve }) + const h = mount(undefined, () => write) + await screen.findByRole('region') + const action = screen.getByRole('button', { name: WELCOME_NOTICE_COPY.zh.continueLabel }) + fireEvent.click(action) + expect(action.disabled).toBe(true) + resolveWrite({ + rpcId: 'welcome-refused' as never, + result: { ok: false, error: { code: 'settings-rejected', message: 'read only', details: { ns: WELCOME_NOTICE_SETTINGS_NAMESPACE } } }, + }) + expect((await screen.findByRole('alert')).textContent).toBe('暂时无法保存确认状态,请重试。') + expect(h.complete).not.toHaveBeenCalled() + }) +}) diff --git a/packages/client/ui-settings-general/tests/welcome-store.spec.ts b/packages/client/ui-settings-general/tests/welcome-store.spec.ts new file mode 100644 index 0000000000..28c7b0509c --- /dev/null +++ b/packages/client/ui-settings-general/tests/welcome-store.spec.ts @@ -0,0 +1,166 @@ +import { describe, expect, it, vi } from 'vitest' +import type { RpcResponse } from '@deepseek-ai/dsh-client-connection/client' +import { WelcomeNoticeStore } from '../src/client/welcome-store.ts' +import { refreshWelcomeIfLoaded } from '../src/client/welcome-store.ts' +import { + WELCOME_NOTICE_ACK_FIELD, WELCOME_NOTICE_SETTINGS_NAMESPACE, WELCOME_NOTICE_VERSION, +} from '../src/onboarding-copy.ts' + +let rpc = 0 +function ok(value: T): RpcResponse { + return { rpcId: `welcome-${rpc++}` as never, result: { ok: true, value } } +} + +function namespace(version?: string) { + return { + ns: WELCOME_NOTICE_SETTINGS_NAMESPACE, + schema: {}, + value: version === undefined ? {} : { [WELCOME_NOTICE_ACK_FIELD]: version }, + applies: 'live' as const, + secrets: [], + revision: 0, + } +} + +function deferred() { + let resolve!: (value: T) => void + let reject!: (reason: unknown) => void + const promise = new Promise((res, rej) => { resolve = res; reject = rej }) + return { promise, resolve, reject } +} + +describe('WelcomeNoticeStore', () => { + it('acknowledges only the exact current copy version', async () => { + for (const [version, acknowledged] of [ + [undefined, false], + ['older-copy', false], + [WELCOME_NOTICE_VERSION, true], + ] as const) { + const api = { + settings: { + describe: vi.fn(() => Promise.resolve(ok({ writable: true, namespaces: [namespace(version)] }))), + }, + } + const controller = new WelcomeNoticeStore(api as never) + await controller.load() + expect(controller.store.getSnapshot()).toMatchObject({ status: 'ready', acknowledged }) + } + }) + + it('persists the owner version through one idempotent path mutation', async () => { + const mutate = vi.fn(() => Promise.resolve(ok(namespace(WELCOME_NOTICE_VERSION)))) + const controller = new WelcomeNoticeStore({ settings: { mutate } } as never) + await expect(controller.acknowledge()).resolves.toBe(true) + expect(mutate).toHaveBeenCalledWith({ + ns: WELCOME_NOTICE_SETTINGS_NAMESPACE, + ops: [{ op: 'set', path: [WELCOME_NOTICE_ACK_FIELD], value: WELCOME_NOTICE_VERSION }], + }) + expect(controller.store.getSnapshot()).toMatchObject({ status: 'ready', acknowledged: true }) + }) + + it('keeps the notice pending when loading or persistence fails', async () => { + const load = new WelcomeNoticeStore({ + settings: { describe: () => Promise.reject(new Error('offline')) }, + } as never) + await load.load() + expect(load.store.getSnapshot()).toEqual({ status: 'error', acknowledged: false, error: 'offline' }) + + const save = new WelcomeNoticeStore({ + settings: { mutate: () => Promise.reject(new Error('disk full')) }, + } as never) + await expect(save.acknowledge()).resolves.toBe(false) + expect(save.store.getSnapshot()).toEqual({ status: 'error', acknowledged: false, error: 'disk full' }) + + const nonError = new WelcomeNoticeStore({ + // Durable/wire failures are unknown; exercise containment of a non-Error rejection. + // oxlint-disable-next-line typescript/prefer-promise-reject-errors + settings: { describe: () => Promise.reject('offline string') }, + } as never) + await nonError.load() + expect(nonError.store.getSnapshot().error).toBe('offline string') + }) + + it('reports business failures, missing namespaces, and malformed durable values', async () => { + for (const describe of [ + () => Promise.resolve({ + rpcId: 'failed' as never, + result: { ok: false as const, error: { code: 'internal' as const, message: 'denied', details: {} } }, + }), + () => Promise.resolve(ok({ writable: true, namespaces: [] })), + ]) { + const controller = new WelcomeNoticeStore({ settings: { describe } } as never) + await controller.load() + expect(controller.store.getSnapshot().status).toBe('error') + } + + for (const value of [null, 42, { [WELCOME_NOTICE_ACK_FIELD]: 42 }]) { + const controller = new WelcomeNoticeStore({ + settings: { describe: () => Promise.resolve(ok({ + writable: true, + namespaces: [{ ...namespace(), value }], + })) }, + } as never) + await controller.load() + expect(controller.store.getSnapshot()).toMatchObject({ status: 'ready', acknowledged: false }) + } + + const save = new WelcomeNoticeStore({ + settings: { mutate: () => Promise.resolve({ + rpcId: 'failed-save' as never, + result: { ok: false, error: { code: 'settings-rejected', message: 'denied', details: { ns: WELCOME_NOTICE_SETTINGS_NAMESPACE } } }, + }) }, + } as never) + await expect(save.acknowledge()).resolves.toBe(false) + expect(save.store.getSnapshot().error).toBe('denied') + }) + + it('lets the latest load win over stale success and failure', async () => { + const first = deferred>() + const describe = vi.fn() + .mockImplementationOnce(() => first.promise) + .mockImplementationOnce(() => Promise.resolve(ok({ writable: true, namespaces: [namespace()] }))) + const controller = new WelcomeNoticeStore({ settings: { describe } } as never) + const stale = controller.load() + await controller.load() + first.resolve(ok({ writable: true, namespaces: [namespace(WELCOME_NOTICE_VERSION)] })) + await stale + expect(controller.store.getSnapshot().acknowledged).toBe(false) + + const failed = deferred>() + describe + .mockImplementationOnce(() => failed.promise) + .mockImplementationOnce(() => Promise.resolve(ok({ writable: true, namespaces: [namespace(WELCOME_NOTICE_VERSION)] }))) + const staleFailure = controller.load() + await controller.load() + failed.reject('stale failure') + await staleFailure + expect(controller.store.getSnapshot()).toMatchObject({ status: 'ready', acknowledged: true, error: null }) + }) + + it('contains stale acknowledgement settlements and refreshes only a loaded store', async () => { + const write = deferred>() + const describe = vi.fn(() => Promise.resolve(ok({ writable: true, namespaces: [namespace()] }))) + const controller = new WelcomeNoticeStore({ + settings: { mutate: () => write.promise, describe }, + } as never) + refreshWelcomeIfLoaded(controller) + expect(describe).not.toHaveBeenCalled() + const staleWrite = controller.acknowledge() + await controller.load() + write.resolve(ok(namespace(WELCOME_NOTICE_VERSION))) + await expect(staleWrite).resolves.toBe(true) + expect(controller.store.getSnapshot().acknowledged).toBe(false) + refreshWelcomeIfLoaded(controller) + await vi.waitFor(() => { expect(describe).toHaveBeenCalledTimes(2) }) + + const failedWrite = deferred>() + const staleFailure = new WelcomeNoticeStore({ + settings: { mutate: () => failedWrite.promise, describe }, + } as never) + const pending = staleFailure.acknowledge() + await staleFailure.load() + failedWrite.reject('late failure') + await expect(pending).resolves.toBe(false) + expect(staleFailure.store.getSnapshot().status).toBe('ready') + }) +}) diff --git a/packages/fs/tool-fs-search/src/presentation.ts b/packages/fs/tool-fs-search/src/presentation.ts new file mode 100644 index 0000000000..b0bb20f4da --- /dev/null +++ b/packages/fs/tool-fs-search/src/presentation.ts @@ -0,0 +1,205 @@ +/** + * Result-time search-card presentation for `grep` and `glob`. Both tools land on + * one `card: 'search'` render intent ({@link SearchResultView}) with two + * `shape`-discriminated variants: `grep` projects its matches grouped by file + * ({@link SearchMatchesResultView}), `glob` projects a flat path list + * ({@link SearchPathsResultView}). This module owns the value→`presentationMeta` + * projection each tool declares and the defensive `meta`→view narrowing each + * tool's `presentResult` reads back on replay. + * + * The canonical value never crosses the wire — only the model-facing render text + * and this JSON `meta` do — so the structured shape a UI renders MUST ride in + * `meta`. Each projection consumes the SAME retained matches/paths the + * model-facing render consumes ({@link module:@deepseek-ai/dsh-tool-fs-search/search-core} + * `retainGrepMatches`/`retainGlobPaths`), so text and card agree about which + * results survived the inline cap, and reports `total` (every result found) and + * `truncated`, so a UI never presents a capped result as complete. + * + * A second, independent cap bounds the JSON `meta` itself: the retained matches + * of a broad search (hundreds of long lines) can still serialize to hundreds of + * kilobytes, and `meta` is persisted with the session log and re-sent on every + * request. {@link capMetaBytes} drops trailing groups/paths until the serialized + * `meta` fits `maxMetaBytes` and marks the result `truncated`; a deployment's + * final output budget (`dsh-spill-policy`) only shrinks `content`, never `meta`, + * so this projection owns keeping `meta` bounded. + * + * @module @deepseek-ai/dsh-tool-fs-search/presentation + */ + +import type { + SearchFileMatches, + SearchLineMatch, + SearchResultView, +} from '@deepseek-ai/dsh-tools' +import type { RetainedItems } from '@deepseek-ai/dsh-retention' +import type { GrepMatch } from './search-core.ts' + +/** + * The retention fields a meta projection reads: the retained page, whether the + * complete result was capped, and the pre-cap total. Both a full + * {@link RetainedItems} (from `retainGrepMatches`) and `glob`'s sampled page + * satisfy this structural subset, so a projection consumes either without a fake + * `kept`/`omitted`. + */ +type RetainedPage = Pick, 'items' | 'truncated' | 'seen'> + +/** + * The `grep`/`glob` tools' private `tool/result` `meta` payload: the capped, + * structured search result. Attached opaquely (as `JsonValue`) on the tool result + * and persisted with the session log, so `presentResult` reproduces the search + * card on replay. The `matches` shape carries the by-file groups; the `paths` + * shape carries the flat list. Both carry the pre-cap `total` and the `truncated` + * flag. The producing tool owns and narrows this opaque shape. + * + * The member shapes use object-literal `type` aliases rather than the + * {@link SearchFileMatches}/{@link SearchLineMatch} interfaces because only a type + * alias is assignable to the `JsonValue` index signature `presentationMeta` + * returns; the two are structurally identical, so the projected value still reads + * back as a {@link SearchResultView}. + */ +export type SearchMeta = + | { shape: 'matches'; files: MetaFileMatches[]; truncated: boolean; total: number } + | { shape: 'paths'; paths: string[]; truncated: boolean; total: number } + +/** One matched line in {@link SearchMeta} (the JSON-assignable form of {@link SearchLineMatch}). */ +type MetaLineMatch = { lineNumber: number; line: string } + +/** One file's grouped matches in {@link SearchMeta} (the JSON-assignable form of {@link SearchFileMatches}). */ +type MetaFileMatches = { path: string; matches: MetaLineMatch[] } + +/** + * Group flat matches by file (first-seen order) into the structured by-file shape + * a UI renders as expandable per-file groups. The grouping matches the + * model-facing text grouping + * ({@link module:@deepseek-ai/dsh-tool-fs-search/grep} `formatGrepMatches`), so + * card and text agree about file order and membership. + * + * @param matches - the retained matches to group, in output order. + * @returns one entry per file, in first-seen order. + */ +export function groupMatchesByFile(matches: GrepMatch[]): MetaFileMatches[] { + const byFile = new Map() + for (const match of matches) { + const entry: MetaLineMatch = { lineNumber: match.lineNumber, line: match.line } + const group = byFile.get(match.path) + if (group !== undefined) group.push(entry) + else byFile.set(match.path, [entry]) + } + return Array.from(byFile, ([path, fileMatches]) => ({ path, matches: fileMatches })) +} + +/** The serialized UTF-8 byte size of one meta payload (the size persisted and re-sent). */ +function metaBytes(meta: SearchMeta): number { + return Buffer.byteLength(JSON.stringify(meta), 'utf8') +} + +/** + * Drop trailing top-level items (file groups or paths) until the serialized meta + * fits `maxMetaBytes`, marking the result `truncated` when anything was dropped. + * `total` is preserved (it counts what the search found, not what meta retains). + * A single item too large to fit on its own is kept: the invariant is a bounded + * payload wherever droppable, never an empty card that hides a real result. + * + * @param meta - the projected meta, already capped to the inline item count. + * @param maxMetaBytes - the serialized-meta byte budget. + * @returns the same meta when it fits, else a byte-bounded copy marked `truncated`. + */ +function capMetaBytes(meta: SearchMeta, maxMetaBytes: number): SearchMeta { + if (metaBytes(meta) <= maxMetaBytes) return meta + if (meta.shape === 'matches') { + const files = [...meta.files] + while (files.length > 1 && metaBytes({ ...meta, files, truncated: true }) > maxMetaBytes) files.pop() + return { ...meta, files, truncated: true } + } + const paths = [...meta.paths] + while (paths.length > 1 && metaBytes({ ...meta, paths, truncated: true }) > maxMetaBytes) paths.pop() + return { ...meta, paths, truncated: true } +} + +/** + * Project the retained `grep` matches into {@link SearchMeta} for the search + * card. Consumes the same {@link RetainedItems} the model-facing render consumes + * (preview budget and inline match cap already applied), groups the retained + * matches by file, reports `total` (every parsed match) and `truncated`, then + * bounds the serialized meta to `maxMetaBytes`. + * + * @param retained - the retention outcome over every parsed match (previewed, capped). + * @param maxMetaBytes - the serialized-meta byte budget. + * @returns the `matches`-shaped search metadata. + */ +export function grepSearchMeta(retained: RetainedPage, maxMetaBytes: number): SearchMeta { + const meta: SearchMeta = { + shape: 'matches', + files: groupMatchesByFile(retained.items), + truncated: retained.truncated, + total: retained.seen, + } + return capMetaBytes(meta, maxMetaBytes) +} + +/** + * Project the retained `glob` paths into {@link SearchMeta} for the search card. + * Consumes the same {@link RetainedItems} the model-facing render consumes (inline + * path cap already applied), reports `total` (every discovered path) and + * `truncated`, then bounds the serialized meta to `maxMetaBytes`. + * + * @param retained - the retention outcome over every discovered path (capped). + * @param maxMetaBytes - the serialized-meta byte budget. + * @returns the `paths`-shaped search metadata. + */ +export function globSearchMeta(retained: RetainedPage, maxMetaBytes: number): SearchMeta { + const meta: SearchMeta = { + shape: 'paths', + paths: retained.items, + truncated: retained.truncated, + total: retained.seen, + } + return capMetaBytes(meta, maxMetaBytes) +} + +/** Whether `value` is a valid {@link SearchLineMatch} (defensive narrowing from opaque `meta`). */ +function isSearchLineMatch(value: unknown): value is SearchLineMatch { + if (typeof value !== 'object' || value === null || Array.isArray(value)) return false + const { lineNumber, line } = value as Record + return typeof lineNumber === 'number' && typeof line === 'string' +} + +/** Whether `value` is a valid {@link SearchFileMatches} (defensive narrowing from opaque `meta`). */ +function isSearchFileMatches(value: unknown): value is SearchFileMatches { + if (typeof value !== 'object' || value === null || Array.isArray(value)) return false + const { path, matches } = value as Record + return typeof path === 'string' && Array.isArray(matches) && matches.every(isSearchLineMatch) +} + +/** + * Narrow opaque live or replayed result metadata to a {@link SearchResultView}. + * Malformed metadata returns `undefined` so `presentResult` can fall back to the + * generic card instead of throwing during replay of an older or hand-edited log. + * The view carries no result text: a UI without a search card falls back to the + * raw `tool/result` content. + * + * A zero-result meta (`files: []` / `paths: []`) narrows to a valid empty card — + * unlike the mirrored `diffsFromMeta`, which rejects empty diffs, because a + * zero-match grep is a legitimate result a UI shows as "no matches", not an + * absent projection. + * + * @param meta - result metadata (the {@link SearchMeta} the tool projected). + * @returns the search view, or `undefined` for absent or malformed metadata. + */ +export function searchViewFromMeta(meta: unknown): SearchResultView | undefined { + if (typeof meta !== 'object' || meta === null || Array.isArray(meta)) return undefined + const record = meta as Record + const { truncated, total } = record + if (typeof truncated !== 'boolean' || typeof total !== 'number') return undefined + if (record.shape === 'matches') { + const { files } = record + if (!Array.isArray(files) || !files.every(isSearchFileMatches)) return undefined + return { card: 'search', shape: 'matches', files: files, truncated, total } + } + if (record.shape === 'paths') { + const { paths } = record + if (!Array.isArray(paths) || !paths.every((path): path is string => typeof path === 'string')) return undefined + return { card: 'search', shape: 'paths', paths, truncated, total } + } + return undefined +} diff --git a/packages/fs/tool-fs-search/tests/presentation.spec.ts b/packages/fs/tool-fs-search/tests/presentation.spec.ts new file mode 100644 index 0000000000..59c47aece2 --- /dev/null +++ b/packages/fs/tool-fs-search/tests/presentation.spec.ts @@ -0,0 +1,176 @@ +/** + * Unit tests for the search-card presentation layer (`src/presentation.ts`): the + * canonical value → `presentationMeta` projections (`grepSearchMeta`, + * `globSearchMeta`, `groupMatchesByFile`) and the defensive `meta` → view + * narrowing (`searchViewFromMeta`). These pin the by-file grouping, the + * `truncated`/`total` honesty over already-retained input, the serialized-meta + * byte cap, and the malformed-metadata fallback a replayed or hand-edited log can + * deliver. + */ + +import { describe, expect, it } from 'vitest' +import type { JsonValue } from '@deepseek-ai/dsh-session' +import { + globSearchMeta, + grepSearchMeta, + groupMatchesByFile, + searchViewFromMeta, +} from '../src/presentation.ts' +import type { GrepMatch } from '../src/search-core.ts' +import { retainGlobPaths, retainGrepMatches } from '../src/search-core.ts' + +const match = (path: string, lineNumber: number, line: string): GrepMatch => ({ path, lineNumber, line }) + +/** A byte cap large enough that no test payload here is meta-capped. */ +const WIDE = 1_000_000 + +describe('groupMatchesByFile', () => { + it('groups matches by first-seen file order, keeping line/lineNumber only', () => { + expect(groupMatchesByFile([ + match('b.ts', 2, 'x'), + match('a.ts', 1, 'y'), + match('b.ts', 5, 'z'), + ])).toEqual([ + { path: 'b.ts', matches: [{ lineNumber: 2, line: 'x' }, { lineNumber: 5, line: 'z' }] }, + { path: 'a.ts', matches: [{ lineNumber: 1, line: 'y' }] }, + ]) + }) + + it('returns an empty list for no matches', () => { + expect(groupMatchesByFile([])).toEqual([]) + }) +}) + +describe('grepSearchMeta', () => { + it('projects grouped matches with total and a false truncation flag within the cap', () => { + const meta = grepSearchMeta(retainGrepMatches([match('a.ts', 1, 'one'), match('a.ts', 2, 'two')], 10, 2000), WIDE) + expect(meta).toEqual({ + shape: 'matches', + files: [{ path: 'a.ts', matches: [{ lineNumber: 1, line: 'one' }, { lineNumber: 2, line: 'two' }] }], + truncated: false, + total: 2, + }) + }) + + it('reports the pre-cap total and truncation from the shared retention pass', () => { + const meta = grepSearchMeta(retainGrepMatches([match('a.ts', 1, 'one'), match('a.ts', 2, 'two'), match('b.ts', 3, 'three')], 2, 2000), WIDE) + expect(meta).toEqual({ + shape: 'matches', + files: [{ path: 'a.ts', matches: [{ lineNumber: 1, line: 'one' }, { lineNumber: 2, line: 'two' }] }], + truncated: true, + total: 3, + }) + }) + + it('carries the per-line preview budget (UTF-8 boundary) the retention pass applied', () => { + const meta = grepSearchMeta(retainGrepMatches([match('a.txt', 1, 'aéaéaéaé')], 10, 7), WIDE) + expect(meta).toMatchObject({ shape: 'matches', files: [{ path: 'a.txt', matches: [{ lineNumber: 1, line: 'aéaéa (line truncated)' }] }] }) + }) + + it('drops trailing file groups until the serialized meta fits the byte cap, marking it truncated', () => { + const retained = retainGrepMatches( + [match('a.ts', 1, 'x'.repeat(60)), match('b.ts', 2, 'y'.repeat(60)), match('c.ts', 3, 'z'.repeat(60))], + 10, + 2000, + ) + // One 60-byte group serializes to ~110 bytes; a 260-byte cap holds two, not three. + const meta = grepSearchMeta(retained, 260) + expect(meta.shape).toBe('matches') + if (meta.shape !== 'matches') throw new Error('unreachable') + expect(meta.truncated).toBe(true) + expect(meta.total).toBe(3) + expect(meta.files.length).toBeLessThan(3) + expect(Buffer.byteLength(JSON.stringify(meta), 'utf8')).toBeLessThanOrEqual(260) + }) + + it('keeps a single oversized group rather than emit an empty card', () => { + const meta = grepSearchMeta(retainGrepMatches([match('a.ts', 1, 'x'.repeat(500))], 10, 2000), 50) + expect(meta.shape).toBe('matches') + if (meta.shape !== 'matches') throw new Error('unreachable') + expect(meta.files).toHaveLength(1) + expect(meta.truncated).toBe(true) + }) +}) + +describe('globSearchMeta', () => { + it('projects the path list with total and a false truncation flag within the cap', () => { + expect(globSearchMeta(retainGlobPaths(['a.ts', 'b.ts'], 10), WIDE)).toEqual({ shape: 'paths', paths: ['a.ts', 'b.ts'], truncated: false, total: 2 }) + }) + + it('reports the pre-cap total and truncation from the shared retention pass', () => { + expect(globSearchMeta(retainGlobPaths(['a.ts', 'b.ts', 'c.ts'], 2), WIDE)).toEqual({ shape: 'paths', paths: ['a.ts', 'b.ts'], truncated: true, total: 3 }) + }) + + it('drops trailing paths until the serialized meta fits the byte cap, marking it truncated', () => { + const retained = retainGlobPaths([`${'a'.repeat(100)}.ts`, `${'b'.repeat(100)}.ts`, `${'c'.repeat(100)}.ts`], 10) + const meta = globSearchMeta(retained, 180) + expect(meta.shape).toBe('paths') + if (meta.shape !== 'paths') throw new Error('unreachable') + expect(meta.truncated).toBe(true) + expect(meta.total).toBe(3) + expect(meta.paths.length).toBeLessThan(3) + expect(Buffer.byteLength(JSON.stringify(meta), 'utf8')).toBeLessThanOrEqual(180) + }) +}) + +describe('searchViewFromMeta (defensive narrowing)', () => { + // The narrowing accepts an opaque JsonValue; a malformed payload is not a + // statically-valid JsonValue, so route every case through one cast helper that + // mirrors how a hand-edited/older session log delivers arbitrary shapes. + const m = (value: unknown): JsonValue | undefined => value as JsonValue | undefined + + it('narrows a well-formed matches payload into a matches view', () => { + const meta = { shape: 'matches', files: [{ path: 'a.ts', matches: [{ lineNumber: 1, line: 'x' }] }], truncated: true, total: 5 } + expect(searchViewFromMeta(m(meta))).toEqual({ card: 'search', ...meta }) + }) + + it('narrows a well-formed paths payload into a paths view', () => { + const meta = { shape: 'paths', paths: ['a.ts', 'b.ts'], truncated: false, total: 2 } + expect(searchViewFromMeta(m(meta))).toEqual({ card: 'search', ...meta }) + }) + + it('narrows a zero-result payload into a valid empty card (not a rejected projection)', () => { + expect(searchViewFromMeta(m({ shape: 'matches', files: [], truncated: false, total: 0 }))) + .toEqual({ card: 'search', shape: 'matches', files: [], truncated: false, total: 0 }) + expect(searchViewFromMeta(m({ shape: 'paths', paths: [], truncated: false, total: 0 }))) + .toEqual({ card: 'search', shape: 'paths', paths: [], truncated: false, total: 0 }) + }) + + it('rejects undefined / non-object / array meta', () => { + expect(searchViewFromMeta(undefined)).toBeUndefined() + expect(searchViewFromMeta(null)).toBeUndefined() + expect(searchViewFromMeta(m('nope'))).toBeUndefined() + expect(searchViewFromMeta(m([]))).toBeUndefined() + }) + + it('rejects a payload with a missing / mistyped truncated or total field', () => { + expect(searchViewFromMeta(m({ shape: 'paths', paths: [], total: 0 }))).toBeUndefined() + expect(searchViewFromMeta(m({ shape: 'paths', paths: [], truncated: 'no', total: 0 }))).toBeUndefined() + expect(searchViewFromMeta(m({ shape: 'paths', paths: [], truncated: false }))).toBeUndefined() + expect(searchViewFromMeta(m({ shape: 'paths', paths: [], truncated: false, total: '0' }))).toBeUndefined() + }) + + it('rejects an unknown or missing shape discriminant', () => { + expect(searchViewFromMeta(m({ shape: 'other', truncated: false, total: 0 }))).toBeUndefined() + expect(searchViewFromMeta(m({ truncated: false, total: 0 }))).toBeUndefined() + }) + + it('rejects a matches payload with a malformed files array', () => { + const base = { shape: 'matches', truncated: false, total: 1 } + expect(searchViewFromMeta(m({ ...base, files: 'x' }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [null] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: ['x'] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [[]] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [{ path: 1, matches: [] }] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [{ path: 'a', matches: 'x' }] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [{ path: 'a', matches: [null] }] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [{ path: 'a', matches: [{ lineNumber: '1', line: 'x' }] }] }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, files: [{ path: 'a', matches: [{ lineNumber: 1, line: 2 }] }] }))).toBeUndefined() + }) + + it('rejects a paths payload with a non-array or non-string-element paths field', () => { + const base = { shape: 'paths', truncated: false, total: 1 } + expect(searchViewFromMeta(m({ ...base, paths: 'x' }))).toBeUndefined() + expect(searchViewFromMeta(m({ ...base, paths: [1] }))).toBeUndefined() + }) +}) From 978f61f9e76d7c8557bfd62e0f183ea58db8a77f Mon Sep 17 00:00:00 2001 From: NI0317 Date: Fri, 31 Jul 2026 17:05:30 +0800 Subject: [PATCH 18/18] docs(onboarding): document telemetry opt-out --- .../2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml | 4 ++-- .../feature/2026-07-30-versioned-gui-welcome-onboarding.md | 2 +- .../2026-07-30-versioned-gui-welcome-onboarding.zh.md | 2 +- README.i18n.yaml | 4 ++-- README.md | 2 +- README.zh.md | 2 +- .../onboarding-deepseek-config/welcome.expected.md | 2 +- packages/client/ui-settings-general/README.i18n.yaml | 4 ++-- packages/client/ui-settings-general/README.md | 2 +- packages/client/ui-settings-general/README.zh.md | 2 +- packages/client/ui-settings-general/src/onboarding-copy.ts | 6 +++--- .../translation-prompt-v4/request-response.expected.json | 4 ++-- 12 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml index c9cc58a56a..579586f30a 100644 --- a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write .agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md -2026-07-30-versioned-gui-welcome-onboarding.md: 8b40621e9bc09fce330fb7f4a9971951c650181a -2026-07-30-versioned-gui-welcome-onboarding.zh.md: c3feebd4d7e650055e496a81a7938203ee32763a +2026-07-30-versioned-gui-welcome-onboarding.md: 8155838f3b6b50f3474ef6c30065ad0d79e6f8af +2026-07-30-versioned-gui-welcome-onboarding.zh.md: c221a6d663af60b03757f135045961bcbcdd0da7 diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md index 8b40621e9b..8155838f3b 100644 --- a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.md @@ -12,7 +12,7 @@ The GUI's credential onboarding begins with a DeepSeek-specific readiness check, **The Settings shell coordinates ordered steps.** `settings.onboarding` remains a root-scoped list, but `ui-settings` projects its entry ids and order into one coordinator and mounts only the first incomplete step. The active registrant receives `complete()` and `openSection(id)`; no later step mounts until ownership transfers. The product welcome registers at order `-100`, while `ui-models` retains only the conditional DeepSeek readiness and credential-routing step at order `0`. -**Ownerless product onboarding belongs to `ui-settings-general`.** `src/onboarding-copy.ts` is the single editable source for the complete notice, the Continue label, and `WELCOME_NOTICE_VERSION`; both supported GUI locales intentionally render the same Chinese owner copy. Runtime locale dictionaries derive their welcome values from that file, and tests import the same owner instead of repeating paragraph text. The notice is browser UI only: it creates no Session event and contributes no model-visible content. The current Draft retains a visible `【关闭方式待补充】` placeholder and is not release-ready until that instruction is supplied. +**Ownerless product onboarding belongs to `ui-settings-general`.** `src/onboarding-copy.ts` is the single editable source for the complete notice, the Continue label, and `WELCOME_NOTICE_VERSION`; both supported GUI locales intentionally render the same Chinese owner copy. Runtime locale dictionaries derive their welcome values from that file, and tests import the same owner instead of repeating paragraph text. The notice is browser UI only: it creates no Session event and contributes no model-visible content. The notice identifies `DSH_TELEMETRY_DISABLED=1` as the telemetry opt-out. **Acknowledgement is durable per Harness profile.** The Host half registers a `ui-onboarding` section in the user-settings seam, stored under the active `$DSH_HOME/settings.yaml`. The browser shows the notice unless `welcomeNoticeVersion` equals the owner constant exactly. Continue applies one path mutation with the current version and calls `complete()` only after the Host commits it; a failed write leaves the notice open, and closing the page or process writes nothing. Bumping the constant intentionally makes every profile acknowledge the revised copy once. diff --git a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md index c3feebd4d7..c221a6d663 100644 --- a/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md +++ b/.agents/notes/implemented/feature/2026-07-30-versioned-gui-welcome-onboarding.zh.md @@ -12,7 +12,7 @@ GUI 的凭据引导从 DeepSeek 专用的就绪状态检查开始,但内部测 **设置外壳协调有序步骤。** `settings.onboarding` 仍是根作用域 list,但 `ui-settings` 会把其中各条目的 id 和顺序投影到一个协调器中,并且只挂载第一个未完成的步骤。当前注册方会收到 `complete()` 和 `openSection(id)`;所有权转移前,不会挂载后续步骤。产品欢迎步骤的顺序为 `-100`,`ui-models` 则只保留顺序为 `0` 的 DeepSeek 条件式就绪状态与凭据跳转步骤。 -**不属于单一功能的产品引导由 `ui-settings-general` 持有。** `src/onboarding-copy.ts` 是完整通知、「继续」按钮文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源;GUI 支持的两种 locale 都有意渲染同一份中文所有者文案。运行时 locale 字典从该文件派生欢迎文案,测试也导入同一个所有者,而不重复段落文本。该通知只存在于浏览器 UI:它不会创建会话事件,也不会贡献任何模型可见内容。当前 Draft 保留了醒目的 `【关闭方式待补充】` 占位符;关闭说明补齐前不可发布。 +**不属于单一功能的产品引导由 `ui-settings-general` 持有。** `src/onboarding-copy.ts` 是完整通知、「继续」按钮文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源;GUI 支持的两种 locale 都有意渲染同一份中文所有者文案。运行时 locale 字典从该文件派生欢迎文案,测试也导入同一个所有者,而不重复段落文本。该通知只存在于浏览器 UI:它不会创建会话事件,也不会贡献任何模型可见内容。通知明确以 `DSH_TELEMETRY_DISABLED=1` 作为遥测关闭方式。 **确认状态按 Harness profile 持久化。** 宿主端在 user-settings seam 中注册 `ui-onboarding` 分节,并存入当前 `$DSH_HOME/settings.yaml`。除非 `welcomeNoticeVersion` 与文案所有者文件中的常量精确相等,否则浏览器会显示通知。「继续」会以当前版本执行一次路径变更,并且仅在宿主端提交成功后调用 `complete()`;写入失败时通知保持打开,关闭页面或进程则不会写入任何内容。提升该常量会有意要求每个 profile 对修订后的文案重新确认一次。 diff --git a/README.i18n.yaml b/README.i18n.yaml index 28380602d0..6fbb7f5299 100644 --- a/README.i18n.yaml +++ b/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write README.md -README.md: edfde303ae744ef5b8da3a8aa4c47a8ae69c85d5 -README.zh.md: 1b49a6c5a9ee276bd566a5caec1700c1766a0c32 +README.md: 08ae0b3d5d2d7ad8e7cb62bd5e8b3242426735dc +README.zh.md: 9587215b6b17250504877b8930fdf431fd24b2ac diff --git a/README.md b/README.md index edfde303ae..08ae0b3d5d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ It uses an architecture where **everything is a plugin**. “如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 -为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 +为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 `DSH_TELEMETRY_DISABLED=1`。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 ## Install diff --git a/README.zh.md b/README.zh.md index 1b49a6c5a9..9587215b6b 100644 --- a/README.zh.md +++ b/README.zh.md @@ -12,7 +12,7 @@ DeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 “如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 -为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 +为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 `DSH_TELEMETRY_DISABLED=1`。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。 ## 安装 diff --git a/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md b/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md index a8c2de86d3..33e3d79fce 100644 --- a/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md +++ b/apps/web/tests/snapshots/onboarding-deepseek-config/welcome.expected.md @@ -3,7 +3,7 @@ - paragraph: 感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。 - blockquote: “如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。 - paragraph: - - text: 为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外, + - text: 为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 DSH_TELEMETRY_DISABLED=1。另外, - strong: 如果您有任何反馈与建议,请在企业微信群中留言告诉我们 - text: 。每一条反馈,都会帮助我们把它打磨得更好。 - button "继续" diff --git a/packages/client/ui-settings-general/README.i18n.yaml b/packages/client/ui-settings-general/README.i18n.yaml index 4c06061809..e96dc8c9d2 100644 --- a/packages/client/ui-settings-general/README.i18n.yaml +++ b/packages/client/ui-settings-general/README.i18n.yaml @@ -2,5 +2,5 @@ # side as of the last confirmed-consistent state. Both languages carry equal authority; # after editing either side, bring the other along and re-record with: # pnpm run verify-translation-pairing --write packages/client/ui-settings-general/README.md -README.md: 96161cbef4962c5e66035d2c3e7998b6185fc7f8 -README.zh.md: bf1c9af19a3586daf5c7ba71f9205f9e031fc3a3 +README.md: 4dbd339c93171b330895ab66366e76fd06013704 +README.zh.md: 8ad6de99ce78d3bdb1e7b35e872e5bfe6790e758 diff --git a/packages/client/ui-settings-general/README.md b/packages/client/ui-settings-general/README.md index 96161cbef4..4dbd339c93 100644 --- a/packages/client/ui-settings-general/README.md +++ b/packages/client/ui-settings-general/README.md @@ -4,7 +4,7 @@ English | [中文](README.zh.md) Settings ownerless-copy and product-onboarding plugin: registers everything on the Settings surface that belongs to no single feature — the shell's trigger/header/close chrome content, the General section and its `settings.general.item` slot, the `settings` dictionaries, and the first ordered welcome step. Feature-owned rows (Permission, Language, Appearance), sections (Models), and conditional onboarding steps stay with their feature packages. -`src/onboarding-copy.ts` is the single editable owner of the complete notice plus `WELCOME_NOTICE_VERSION`; both supported GUI locales intentionally render the same Chinese copy. The Host half registers `ui-onboarding` in the user-settings seam; the browser compares `welcomeNoticeVersion` for exact equality and writes the current value only after Continue succeeds. The path mutation is idempotent across tabs and preserves sibling settings, while `host/settings-changed` makes an externally acknowledged notice advance without a reload. A different version deliberately presents the notice again. The welcome page preserves every authored paragraph, gives the requested clause in the final paragraph the sole emphasis, initially focuses the title, and has no close, Escape, mask-click, or secondary path. None of its copy or acknowledgement enters a Session log or model request. The current draft copy retains the visible `【关闭方式待补充】` placeholder and is not release-ready until that instruction is supplied. +`src/onboarding-copy.ts` is the single editable owner of the complete notice plus `WELCOME_NOTICE_VERSION`; both supported GUI locales intentionally render the same Chinese copy. The Host half registers `ui-onboarding` in the user-settings seam; the browser compares `welcomeNoticeVersion` for exact equality and writes the current value only after Continue succeeds. The path mutation is idempotent across tabs and preserves sibling settings, while `host/settings-changed` makes an externally acknowledged notice advance without a reload. A different version deliberately presents the notice again. The welcome page preserves every authored paragraph, gives the requested clause in the final paragraph the sole emphasis, initially focuses the title, and has no close, Escape, mask-click, or secondary path. None of its copy or acknowledgement enters a Session log or model request. The notice identifies `DSH_TELEMETRY_DISABLED=1` as the telemetry opt-out. ## Model Experience diff --git a/packages/client/ui-settings-general/README.zh.md b/packages/client/ui-settings-general/README.zh.md index bf1c9af19a..8ad6de99ce 100644 --- a/packages/client/ui-settings-general/README.zh.md +++ b/packages/client/ui-settings-general/README.zh.md @@ -4,7 +4,7 @@ 设置界面无特定功能归属的文案与产品引导插件:在设置界面注册所有不属于单一功能的内容,包括外壳的触发器、标题栏与关闭控件内容,「通用」分区及其 `settings.general.item` slot、`settings` 字典,以及第一个有序欢迎步骤。归具体功能所有的行(「权限」、「语言」、「外观」)、分区(「模型」)和条件式首次使用引导步骤仍由各自的功能包提供。 -`src/onboarding-copy.ts` 是完整通知文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源;GUI 支持的两种 locale 都有意渲染同一份中文文案。宿主端在 user-settings seam 中注册 `ui-onboarding`;浏览器比较 `welcomeNoticeVersion` 是否精确相等,仅在「继续」操作成功后写入当前值。该路径变更在不同标签页间幂等,并会保留同级设置;`host/settings-changed` 则让页面在通知被外部确认后,无需重新加载即可推进。版本不同时,系统会有意重新显示通知。欢迎页保留原文的每个段落,仅强调最后一段中指定的句段,初始焦点落在标题上,并且没有关闭操作、Escape、点击遮罩或次要操作路径。其文案和确认状态均不会进入会话日志或模型请求。当前 Draft 文案保留了醒目的 `【关闭方式待补充】` 占位符;关闭说明补齐前不可发布。 +`src/onboarding-copy.ts` 是完整通知文案和 `WELCOME_NOTICE_VERSION` 的唯一可编辑来源;GUI 支持的两种 locale 都有意渲染同一份中文文案。宿主端在 user-settings seam 中注册 `ui-onboarding`;浏览器比较 `welcomeNoticeVersion` 是否精确相等,仅在「继续」操作成功后写入当前值。该路径变更在不同标签页间幂等,并会保留同级设置;`host/settings-changed` 则让页面在通知被外部确认后,无需重新加载即可推进。版本不同时,系统会有意重新显示通知。欢迎页保留原文的每个段落,仅强调最后一段中指定的句段,初始焦点落在标题上,并且没有关闭操作、Escape、点击遮罩或次要操作路径。其文案和确认状态均不会进入会话日志或模型请求。通知明确以 `DSH_TELEMETRY_DISABLED=1` 作为遥测关闭方式。 ## 模型体验 diff --git a/packages/client/ui-settings-general/src/onboarding-copy.ts b/packages/client/ui-settings-general/src/onboarding-copy.ts index 20bda0f17a..061fc06872 100644 --- a/packages/client/ui-settings-general/src/onboarding-copy.ts +++ b/packages/client/ui-settings-general/src/onboarding-copy.ts @@ -8,7 +8,7 @@ export const WELCOME_NOTICE_ACK_FIELD = 'welcomeNoticeVersion' * Bump only when the notice changes materially and every user should see it * again. The acknowledgement is compared for exact equality. */ -export const WELCOME_NOTICE_VERSION = '2026-07-30.6' +export const WELCOME_NOTICE_VERSION = '2026-07-30.7' /** The complete editable welcome notice in both supported GUI locales. */ export const WELCOME_NOTICE_COPY = { @@ -17,7 +17,7 @@ export const WELCOME_NOTICE_COPY = { paragraphs: [ '感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。', '“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。', - '为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', + '为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 DSH_TELEMETRY_DISABLED=1。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', ], feedbackEmphasis: '如果您有任何反馈与建议,请在企业微信群中留言告诉我们', continueLabel: '继续', @@ -27,7 +27,7 @@ export const WELCOME_NOTICE_COPY = { paragraphs: [ '感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。', '“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。', - '为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', + '为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 DSH_TELEMETRY_DISABLED=1。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。', ], feedbackEmphasis: '如果您有任何反馈与建议,请在企业微信群中留言告诉我们', continueLabel: '继续', diff --git a/scripts/snapshots/translation-prompt-v4/request-response.expected.json b/scripts/snapshots/translation-prompt-v4/request-response.expected.json index f063c8a3f1..f66b45017c 100644 --- a/scripts/snapshots/translation-prompt-v4/request-response.expected.json +++ b/scripts/snapshots/translation-prompt-v4/request-response.expected.json @@ -8,11 +8,11 @@ }, { "role": "user", - "content": "# DeepSeek Harness\n\nEnglish | [中文](README.zh.md)\n\nDeepSeek Harness (`dsh`) is an open-source coding agent built on the DeepSeek Harness SDK.\n\nIt uses an architecture where **everything is a plugin**.\n\n## Internal testing notice\n\n感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## Install\n\nInstall `dsh` with one command:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\nThe installer requires `git` and Node `^22.19 || >=24`, offers to install `pnpm` when it is missing, and prompts for a DeepSeek API key.\n\nThe installer keeps every checkout under `~/.dsh/source`: the master clone at `~/.dsh/source/master` and each install's staging checkout as a git worktree `~/.dsh/source/staging-`. The stable symlink `~/.dsh/source/current` points at the active staging worktree, and `dsh` in `~/.local/bin` links to `current/bin/dsh`, so an upgrade repoints one symlink and the `dsh` on PATH never moves. Re-running the command adds a fresh staging worktree from an updated master and repoints `current` at it. See [`scripts/install.sh`](scripts/install.sh) for alternate install locations and other options.\n\n## Use DeepSeek Harness\n\n### Web UI\n\nFor the recommended local interface, build the active checkout after installation and after each update, then start the Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\nThe full build produces the library and client bundles plus the frontend dist. The path above is the installer's default. If you set `DSH_SOURCE` or `DSH_CURRENT`, or reused an existing checkout, replace `~/.dsh/source/current` with that checkout path; see [`scripts/install.sh`](scripts/install.sh) for details. The Web UI is served at `http://127.0.0.1:3080` by default.\n\n### TUI\n\nStart the full-screen terminal interface:\n\n```sh\ndsh\n```\n\n### Headless\n\nRun one task, print the final answer, and exit:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### Automation and SDKs\n\nFrom a source checkout with `DEEPSEEK_API_KEY` in the environment or its root `.env`, start the ACP automation server:\n\n```sh\npnpm run demo:acp\n```\n\nThe [Python SDK](python/README.md) drives a bundled JSON-RPC runtime. The [examples](examples/README.md) cover the runnable headless, ACP, JSON-RPC, Code Mode, and self-referential compositions.\n\n## Why DeepSeek Harness\n\nBuilt-in capabilities cover file reading, editing, and search; shell and persistent PTY execution; reusable skills; task tracking, goals, plans, todos, and background tasks; subagents and workflows; sandboxing and approvals; settings and credentials; persistent, resumable, forkable, and queryable sessions; LSP and web access; context compaction; and telemetry. Each composition selects the subset appropriate to its surface. The TUI and Web UI both include Plan Mode.\n\n- **Everything is a plugin.** Models, tools, policies, storage, context management, and interfaces are composable [Cordis plugins](docs/user/develop/basic/index.md), so deployments can extend or replace behavior without forking the agent loop. See the [architecture](docs/architecture.md) for the underlying design.\n- **Runs are reconstructable.** Anything visible to the model is logged in the authoritative session stream; persistence, resume/fork/query, replay, telemetry, and UIs derive from the same events. See the [session-log architecture](docs/architecture.md#session-log).\n- **Code Mode (opt-in).** It exposes a `run_code` tool and a generated TypeScript SDK; only program output re-enters model context. See [Code Mode](packages/core/tools/README.md#code-mode).\n- **Self-referential Cordis tools are opt-in.** They let the agent inspect its live runtime and mount or unmount plugins while it runs. See the [Cordis tools](packages/cordis/tool-cordis/README.md).\n\n## Community\n\nFollow
DeepSeek Harness on Twitter for project updates.\n\n## Development\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\nStart with the [development guide](docs/development.md) and read the [architecture](docs/architecture.md) before changing packages.\n\nFor agents, follow [AGENTS.md](AGENTS.md).\n\nDeepSeek Harness is currently in internal testing.\n\n## License\n\n[BSD 3-Clause](LICENSE)\n" + "content": "# DeepSeek Harness\n\nEnglish | [中文](README.zh.md)\n\nDeepSeek Harness (`dsh`) is an open-source coding agent built on the DeepSeek Harness SDK.\n\nIt uses an architecture where **everything is a plugin**.\n\n## Internal testing notice\n\n感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 `DSH_TELEMETRY_DISABLED=1`。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## Install\n\nInstall `dsh` with one command:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\nThe installer requires `git` and Node `^22.19 || >=24`, offers to install `pnpm` when it is missing, and prompts for a DeepSeek API key.\n\nThe installer keeps every checkout under `~/.dsh/source`: the master clone at `~/.dsh/source/master` and each install's staging checkout as a git worktree `~/.dsh/source/staging-`. The stable symlink `~/.dsh/source/current` points at the active staging worktree, and `dsh` in `~/.local/bin` links to `current/bin/dsh`, so an upgrade repoints one symlink and the `dsh` on PATH never moves. Re-running the command adds a fresh staging worktree from an updated master and repoints `current` at it. See [`scripts/install.sh`](scripts/install.sh) for alternate install locations and other options.\n\n## Use DeepSeek Harness\n\n### Web UI\n\nFor the recommended local interface, build the active checkout after installation and after each update, then start the Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\nThe full build produces the library and client bundles plus the frontend dist. The path above is the installer's default. If you set `DSH_SOURCE` or `DSH_CURRENT`, or reused an existing checkout, replace `~/.dsh/source/current` with that checkout path; see [`scripts/install.sh`](scripts/install.sh) for details. The Web UI is served at `http://127.0.0.1:3080` by default.\n\n### TUI\n\nStart the full-screen terminal interface:\n\n```sh\ndsh\n```\n\n### Headless\n\nRun one task, print the final answer, and exit:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### Automation and SDKs\n\nFrom a source checkout with `DEEPSEEK_API_KEY` in the environment or its root `.env`, start the ACP automation server:\n\n```sh\npnpm run demo:acp\n```\n\nThe [Python SDK](python/README.md) drives a bundled JSON-RPC runtime. The [examples](examples/README.md) cover the runnable headless, ACP, JSON-RPC, Code Mode, and self-referential compositions.\n\n## Why DeepSeek Harness\n\nBuilt-in capabilities cover file reading, editing, and search; shell and persistent PTY execution; reusable skills; task tracking, goals, plans, todos, and background tasks; subagents and workflows; sandboxing and approvals; settings and credentials; persistent, resumable, forkable, and queryable sessions; LSP and web access; context compaction; and telemetry. Each composition selects the subset appropriate to its surface. The TUI and Web UI both include Plan Mode.\n\n- **Everything is a plugin.** Models, tools, policies, storage, context management, and interfaces are composable [Cordis plugins](docs/user/develop/basic/index.md), so deployments can extend or replace behavior without forking the agent loop. See the [architecture](docs/architecture.md) for the underlying design.\n- **Runs are reconstructable.** Anything visible to the model is logged in the authoritative session stream; persistence, resume/fork/query, replay, telemetry, and UIs derive from the same events. See the [session-log architecture](docs/architecture.md#session-log).\n- **Code Mode (opt-in).** It exposes a `run_code` tool and a generated TypeScript SDK; only program output re-enters model context. See [Code Mode](packages/core/tools/README.md#code-mode).\n- **Self-referential Cordis tools are opt-in.** They let the agent inspect its live runtime and mount or unmount plugins while it runs. See the [Cordis tools](packages/cordis/tool-cordis/README.md).\n\n## Community\n\nFollow DeepSeek Harness on Twitter for project updates.\n\n## Development\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\nStart with the [development guide](docs/development.md) and read the [architecture](docs/architecture.md) before changing packages.\n\nFor agents, follow [AGENTS.md](AGENTS.md).\n\nDeepSeek Harness is currently in internal testing.\n\n## License\n\n[BSD 3-Clause](LICENSE)\n" }, { "role": "assistant", - "content": "# DeepSeek Harness\n\n[English](README.md) | 中文\n\nDeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 coding agent(编程智能体)。\n\n它采用了**一切皆插件**的架构。\n\n## 内测声明\n\n感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以【关闭方式待补充】。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## 安装\n\n使用一条命令安装 `dsh`:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\n安装器要求系统已安装 `git` 和 Node `^22.19 || >=24`,缺少 `pnpm` 时可代为安装,并会提示输入 DeepSeek API 密钥。\n\n安装器会把所有检出都放在 `~/.dsh/source` 下:master 克隆位于 `~/.dsh/source/master`,每次安装的 staging 检出是一个 git worktree `~/.dsh/source/staging-<时间戳>`。稳定符号链接 `~/.dsh/source/current` 指向当前生效的 staging worktree,`~/.local/bin` 中的 `dsh` 链接到 `current/bin/dsh`,因此升级只需重指一个符号链接,PATH 上的 `dsh` 从不移动。再次运行该命令会基于更新后的 master 新增一个 staging worktree,并把 `current` 重指到它。其他安装位置和选项见 [`scripts/install.sh`](scripts/install.sh)。\n\n## 使用 DeepSeek Harness\n\n### Web UI\n\n推荐在本地使用 Web UI。安装完成后以及每次更新后,请先构建当前生效的检出,再启动 Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\n完整构建会生成库与客户端 bundle,以及前端 dist。上述路径是安装器的默认位置。如果你设置过 `DSH_SOURCE` 或 `DSH_CURRENT`,或者复用了已有检出,请把 `~/.dsh/source/current` 换成该检出路径;详情见 [`scripts/install.sh`](scripts/install.sh)。Web UI 默认通过 `http://127.0.0.1:3080` 提供服务。\n\n### TUI\n\n启动全屏终端界面:\n\n```sh\ndsh\n```\n\n### Headless\n\n运行一项任务,打印最终答案后退出:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### 自动化与 SDK\n\n在源码检出中通过环境变量或根目录 `.env` 设置 `DEEPSEEK_API_KEY`,然后启动 ACP(Agent Client Protocol)自动化服务器:\n\n```sh\npnpm run demo:acp\n```\n\n[Python SDK](python/README.md) 驱动随附的 JSON-RPC 运行时。[示例](examples/README.md)涵盖可运行的 headless、ACP、JSON-RPC、Code Mode 和自指组合。\n\n## 为什么选择 DeepSeek Harness\n\n内置功能涵盖文件读取、编辑与搜索、shell 和持久 PTY 执行、可复用 skill(技能)、任务跟踪、目标、计划、待办事项与后台任务、subagent 与工作流、沙箱与审批、设置与凭据、可持久化、恢复、fork 与查询的会话、LSP 与 Web 访问、上下文压缩(context compaction),以及遥测。每个组合只选用适合其使用方式的能力子集。TUI 与 Web UI 均包含 Plan Mode。\n\n- **一切皆插件。** 模型、工具、策略、存储、上下文管理和界面均可组合为 [Cordis 插件](docs/user/develop/basic/index.md),部署方无需 fork agent loop(智能体循环)即可扩展或替换行为。底层设计见[架构文档](docs/architecture.md)。\n- **运行可重建。** 凡是模型可见的内容,都会记录在权威会话流中;持久化、恢复/fork/查询、回放、遥测和 UI 均从同一组事件派生。参见[会话日志架构](docs/architecture.md#session-log)。\n- **Code Mode(需显式启用)。** 它会提供 `run_code` 工具和生成的 TypeScript SDK,只有程序输出会重新进入模型上下文。参见 [Code Mode](packages/core/tools/README.md#code-mode)。\n- **自指 Cordis 工具需显式启用。** 这些工具可让 agent 检查自身的实时运行时,并在运行中挂载或卸载插件。参见 [Cordis 工具](packages/cordis/tool-cordis/README.md)。\n\n## 社区\n\n扫描二维码,或打开 DeepSeek Harness 微信社区申请页面 申请加入。\n\n

\n \"DeepSeek\n

\n\n## 开发\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\n请先阅读[开发指南](docs/development.md);修改包之前,请阅读[架构文档](docs/architecture.md)。\n\n面向 agent:遵循 [AGENTS.md](AGENTS.md)。\n\nDeepSeek Harness 目前处于内测阶段。\n\n## 许可证\n\n[BSD 3-Clause](LICENSE)\n" + "content": "# DeepSeek Harness\n\n[English](README.md) | 中文\n\nDeepSeek Harness(`dsh`)是一款基于 DeepSeek Harness SDK 构建的开源 coding agent(编程智能体)。\n\n它采用了**一切皆插件**的架构。\n\n## 内测声明\n\n感谢您愿意拨冗试用 DeepSeek Harness。当前版本仍处于内部测试阶段,功能仍待完善,体验难免有些粗糙。\n\n“如切如磋,如琢如磨。” 产品的成长,离不开一次次真实的碰撞与坦诚的反馈。您在真实使用中发现的问题,也可能促使我们重新审视,甚至推翻已有的设计。\n\n为了帮助我们更准确地还原您真实使用中的问题,内测版本默认会上传所有 Session Log;如需关闭,可以设置环境变量 `DSH_TELEMETRY_DISABLED=1`。另外,如果您有任何反馈与建议,请在企业微信群中留言告诉我们。每一条反馈,都会帮助我们把它打磨得更好。\n\n## 安装\n\n使用一条命令安装 `dsh`:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/deepseek-harness/deepseek-harness/master/scripts/install.sh | sh\n```\n\n安装器要求系统已安装 `git` 和 Node `^22.19 || >=24`,缺少 `pnpm` 时可代为安装,并会提示输入 DeepSeek API 密钥。\n\n安装器会把所有检出都放在 `~/.dsh/source` 下:master 克隆位于 `~/.dsh/source/master`,每次安装的 staging 检出是一个 git worktree `~/.dsh/source/staging-<时间戳>`。稳定符号链接 `~/.dsh/source/current` 指向当前生效的 staging worktree,`~/.local/bin` 中的 `dsh` 链接到 `current/bin/dsh`,因此升级只需重指一个符号链接,PATH 上的 `dsh` 从不移动。再次运行该命令会基于更新后的 master 新增一个 staging worktree,并把 `current` 重指到它。其他安装位置和选项见 [`scripts/install.sh`](scripts/install.sh)。\n\n## 使用 DeepSeek Harness\n\n### Web UI\n\n推荐在本地使用 Web UI。安装完成后以及每次更新后,请先构建当前生效的检出,再启动 Web UI:\n\n```sh\n(cd ~/.dsh/source/current && pnpm run build)\ndsh web\n```\n\n完整构建会生成库与客户端 bundle,以及前端 dist。上述路径是安装器的默认位置。如果你设置过 `DSH_SOURCE` 或 `DSH_CURRENT`,或者复用了已有检出,请把 `~/.dsh/source/current` 换成该检出路径;详情见 [`scripts/install.sh`](scripts/install.sh)。Web UI 默认通过 `http://127.0.0.1:3080` 提供服务。\n\n### TUI\n\n启动全屏终端界面:\n\n```sh\ndsh\n```\n\n### Headless\n\n运行一项任务,打印最终答案后退出:\n\n```sh\ndsh -p \"summarize this workspace\"\n```\n\n### 自动化与 SDK\n\n在源码检出中通过环境变量或根目录 `.env` 设置 `DEEPSEEK_API_KEY`,然后启动 ACP(Agent Client Protocol)自动化服务器:\n\n```sh\npnpm run demo:acp\n```\n\n[Python SDK](python/README.md) 驱动随附的 JSON-RPC 运行时。[示例](examples/README.md)涵盖可运行的 headless、ACP、JSON-RPC、Code Mode 和自指组合。\n\n## 为什么选择 DeepSeek Harness\n\n内置功能涵盖文件读取、编辑与搜索、shell 和持久 PTY 执行、可复用 skill(技能)、任务跟踪、目标、计划、待办事项与后台任务、subagent 与工作流、沙箱与审批、设置与凭据、可持久化、恢复、fork 与查询的会话、LSP 与 Web 访问、上下文压缩(context compaction),以及遥测。每个组合只选用适合其使用方式的能力子集。TUI 与 Web UI 均包含 Plan Mode。\n\n- **一切皆插件。** 模型、工具、策略、存储、上下文管理和界面均可组合为 [Cordis 插件](docs/user/develop/basic/index.md),部署方无需 fork agent loop(智能体循环)即可扩展或替换行为。底层设计见[架构文档](docs/architecture.md)。\n- **运行可重建。** 凡是模型可见的内容,都会记录在权威会话流中;持久化、恢复/fork/查询、回放、遥测和 UI 均从同一组事件派生。参见[会话日志架构](docs/architecture.md#session-log)。\n- **Code Mode(需显式启用)。** 它会提供 `run_code` 工具和生成的 TypeScript SDK,只有程序输出会重新进入模型上下文。参见 [Code Mode](packages/core/tools/README.md#code-mode)。\n- **自指 Cordis 工具需显式启用。** 这些工具可让 agent 检查自身的实时运行时,并在运行中挂载或卸载插件。参见 [Cordis 工具](packages/cordis/tool-cordis/README.md)。\n\n## 社区\n\n扫描二维码,或打开 DeepSeek Harness 微信社区申请页面 申请加入。\n\n

\n \"DeepSeek\n

\n\n## 开发\n\n```sh\npnpm install\npnpm run test:coverage\n```\n\n请先阅读[开发指南](docs/development.md);修改包之前,请阅读[架构文档](docs/architecture.md)。\n\n面向 agent:遵循 [AGENTS.md](AGENTS.md)。\n\nDeepSeek Harness 目前处于内测阶段。\n\n## 许可证\n\n[BSD 3-Clause](LICENSE)\n" }, { "role": "user",