From 3b4569a920f6442a23ad724a922810ac5ed1dd2a Mon Sep 17 00:00:00 2001 From: Anton Panasenko Date: Mon, 17 Aug 2026 03:53:15 +0000 Subject: [PATCH] Add experimental app-server project APIs (#38940) ## What changed - Add SQLite-backed `project/list`, `project/read`, `project/create`, `project/import`, `project/update`, `project/move`, and `project/delete` endpoints with ordered roots, metadata, manual positioning, pagination, and idempotent creation. - Add project assignment to thread start, metadata updates, list filtering, and fork inheritance. Project deletion clears assignments without deleting threads. - Emit `project/changed` and `thread/project/updated` notifications after committed changes, and export the new protocol schemas and TypeScript types. ## Testing - Cover project lifecycle and ordering, idempotency, atomic imports, cursor and filter validation, thread assignment, deletion, and fork inheritance. GitOrigin-RevId: 47ae621be01ab8ef70a74a629fb29a5c5709ea33 --- .../analytics/src/analytics_client_tests.rs | 1 + codex-rs/analytics/src/client_tests.rs | 1 + .../schema/json/ClientRequest.json | 11 + .../schema/json/ServerNotification.json | 89 ++ .../codex_app_server_protocol.schemas.json | 148 +++ .../codex_app_server_protocol.v2.schemas.json | 148 +++ .../json/v2/ProjectChangedNotification.json | 27 + .../schema/json/v2/ThreadForkResponse.json | 8 + .../schema/json/v2/ThreadListResponse.json | 8 + .../json/v2/ThreadMetadataUpdateResponse.json | 8 + .../v2/ThreadProjectUpdatedNotification.json | 20 + .../schema/json/v2/ThreadReadResponse.json | 8 + .../schema/json/v2/ThreadResumeResponse.json | 8 + .../json/v2/ThreadRollbackResponse.json | 8 + .../schema/json/v2/ThreadStartResponse.json | 8 + .../json/v2/ThreadStartedNotification.json | 8 + .../json/v2/ThreadUnarchiveResponse.json | 8 + .../app-server-exports-experimental.json.zst | Bin 136568 -> 138855 bytes .../app-server-exports-stable.json.zst | Bin 133765 -> 134464 bytes .../schema/typescript/ServerNotification.ts | 4 +- .../typescript/ServerNotificationEnvelope.ts | 4 +- .../schema/typescript/v2/Project.ts | 6 + .../schema/typescript/v2/ProjectChangeType.ts | 5 + .../v2/ProjectChangedNotification.ts | 6 + .../schema/typescript/v2/ProjectRoot.ts | 6 + .../schema/typescript/v2/Thread.ts | 3 + .../v2/ThreadMetadataUpdateParams.ts | 5 +- .../v2/ThreadProjectUpdatedNotification.ts | 5 + .../schema/typescript/v2/index.ts | 5 + .../src/protocol/common.rs | 49 + .../src/protocol/v2/mod.rs | 2 + .../src/protocol/v2/project.rs | 176 ++++ .../src/protocol/v2/tests.rs | 3 + .../src/protocol/v2/thread.rs | 25 +- .../src/protocol/v2/thread_data.rs | 84 +- codex-rs/app-server-test-client/src/lib.rs | 1 + codex-rs/app-server/README.md | 8 +- .../app-server/src/bespoke_event_handling.rs | 1 + codex-rs/app-server/src/message_processor.rs | 29 + codex-rs/app-server/src/request_processors.rs | 4 + .../src/request_processors/projects.rs | 378 ++++++++ .../request_processors/thread_processor.rs | 254 ++++- .../thread_processor_tests.rs | 1 + .../thread_resume_redaction.rs | 1 + .../src/request_processors/thread_summary.rs | 1 + .../tests/common/test_app_server.rs | 30 + .../tests/suite/v2/external_agent_config.rs | 7 + codex-rs/app-server/tests/suite/v2/mod.rs | 1 + .../app-server/tests/suite/v2/projects.rs | 906 ++++++++++++++++++ .../tests/suite/v2/remote_thread_store.rs | 1 + .../app-server/tests/suite/v2/skills_list.rs | 1 + .../app-server/tests/suite/v2/thread_fork.rs | 1 + .../app-server/tests/suite/v2/thread_list.rs | 13 + .../tests/suite/v2/thread_metadata_update.rs | 9 + .../app-server/tests/suite/v2/thread_read.rs | 3 + .../tests/suite/v2/thread_resume.rs | 1 + .../app-server/tests/suite/v2/turn_start.rs | 1 + codex-rs/core/src/realtime_context.rs | 1 + codex-rs/core/src/realtime_context_tests.rs | 1 + codex-rs/core/src/thread_manager.rs | 8 + codex-rs/core/tests/suite/fork_thread.rs | 1 + codex-rs/exec/src/lib.rs | 2 + codex-rs/exec/src/lib_tests.rs | 2 + codex-rs/rollout/src/list.rs | 3 + codex-rs/rollout/src/recorder.rs | 8 + codex-rs/rollout/src/recorder_tests.rs | 2 + codex-rs/rollout/src/state_db.rs | 3 + codex-rs/rollout/src/state_db_tests.rs | 1 + codex-rs/rollout/src/tests.rs | 11 + codex-rs/state/migrations/0049_projects.sql | 30 + codex-rs/state/src/extract.rs | 1 + codex-rs/state/src/lib.rs | 4 + codex-rs/state/src/model/mod.rs | 5 + codex-rs/state/src/model/project.rs | 32 + codex-rs/state/src/model/thread_metadata.rs | 12 + codex-rs/state/src/runtime.rs | 1 + codex-rs/state/src/runtime/memories.rs | 3 + codex-rs/state/src/runtime/projects.rs | 492 ++++++++++ codex-rs/state/src/runtime/projects_tests.rs | 461 +++++++++ codex-rs/state/src/runtime/test_support.rs | 1 + codex-rs/state/src/runtime/threads.rs | 41 +- codex-rs/thread-store/src/in_memory.rs | 10 + codex-rs/thread-store/src/lib.rs | 12 + .../thread-store/src/local/archive_thread.rs | 1 + codex-rs/thread-store/src/local/helpers.rs | 1 + .../thread-store/src/local/list_threads.rs | 19 +- codex-rs/thread-store/src/local/mod.rs | 48 + .../local/pending_thread_metadata_tests.rs | 1 - codex-rs/thread-store/src/local/projects.rs | 182 ++++ .../thread-store/src/local/read_thread.rs | 4 + .../thread-store/src/local/search_threads.rs | 1 + .../thread_history_materialization_tests.rs | 1 + .../src/local/update_thread_metadata.rs | 73 +- codex-rs/thread-store/src/projects.rs | 76 ++ codex-rs/thread-store/src/store.rs | 75 ++ .../thread-store/src/thread_metadata_sync.rs | 33 + codex-rs/thread-store/src/types.rs | 17 + codex-rs/tui/src/app/agent_picker.rs | 1 + .../tui/src/app/app_server_event_targets.rs | 6 +- codex-rs/tui/src/app/loaded_threads.rs | 1 + codex-rs/tui/src/app/tests.rs | 3 + codex-rs/tui/src/app/thread_session_state.rs | 1 + codex-rs/tui/src/app_server_session.rs | 2 + codex-rs/tui/src/chatwidget/protocol.rs | 4 +- codex-rs/tui/src/lib.rs | 1 + codex-rs/tui/src/named_session_lookup.rs | 1 + codex-rs/tui/src/resume_picker.rs | 5 + 107 files changed, 4210 insertions(+), 52 deletions(-) create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ProjectChangedNotification.json create mode 100644 codex-rs/app-server-protocol/schema/json/v2/ThreadProjectUpdatedNotification.json create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/Project.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangeType.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangedNotification.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProjectRoot.ts create mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ThreadProjectUpdatedNotification.ts create mode 100644 codex-rs/app-server-protocol/src/protocol/v2/project.rs create mode 100644 codex-rs/app-server/src/request_processors/projects.rs create mode 100644 codex-rs/app-server/tests/suite/v2/projects.rs create mode 100644 codex-rs/state/migrations/0049_projects.sql create mode 100644 codex-rs/state/src/model/project.rs create mode 100644 codex-rs/state/src/runtime/projects.rs create mode 100644 codex-rs/state/src/runtime/projects_tests.rs create mode 100644 codex-rs/thread-store/src/local/projects.rs create mode 100644 codex-rs/thread-store/src/projects.rs diff --git a/codex-rs/analytics/src/analytics_client_tests.rs b/codex-rs/analytics/src/analytics_client_tests.rs index 3c6a782e2b..9bd5f6a5a3 100644 --- a/codex-rs/analytics/src/analytics_client_tests.rs +++ b/codex-rs/analytics/src/analytics_client_tests.rs @@ -220,6 +220,7 @@ fn sample_thread_with_metadata( ephemeral, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 1, diff --git a/codex-rs/analytics/src/client_tests.rs b/codex-rs/analytics/src/client_tests.rs index a4b122a2b3..20f95d9e81 100644 --- a/codex-rs/analytics/src/client_tests.rs +++ b/codex-rs/analytics/src/client_tests.rs @@ -592,6 +592,7 @@ fn sample_thread(thread_id: &str) -> Thread { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 1, diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 42df7b0557..d44523b425 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -2551,6 +2551,17 @@ ], "type": "object" }, + "ProjectRoot": { + "properties": { + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + } + }, + "required": [ + "path" + ], + "type": "object" + }, "RealtimeConversationVersion": { "enum": [ "v1", diff --git a/codex-rs/app-server-protocol/schema/json/ServerNotification.json b/codex-rs/app-server-protocol/schema/json/ServerNotification.json index 6152d7b2ec..55fa02cb2a 100644 --- a/codex-rs/app-server-protocol/schema/json/ServerNotification.json +++ b/codex-rs/app-server-protocol/schema/json/ServerNotification.json @@ -3072,6 +3072,29 @@ } ] }, + "ProjectChangeType": { + "enum": [ + "created", + "updated", + "deleted" + ], + "type": "string" + }, + "ProjectChangedNotification": { + "properties": { + "changeType": { + "$ref": "#/definitions/ProjectChangeType" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "changeType", + "projectId" + ], + "type": "object" + }, "RateLimitReachedType": { "enum": [ "rate_limit_reached", @@ -3846,6 +3869,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -3927,6 +3957,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", @@ -4886,6 +4917,24 @@ ], "type": "object" }, + "ThreadProjectUpdatedNotification": { + "properties": { + "projectId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "projectId", + "threadId" + ], + "type": "object" + }, "ThreadQueueChangedNotification": { "properties": { "threadId": { @@ -6293,6 +6342,46 @@ "title": "Thread/queue/changedNotification", "type": "object" }, + { + "properties": { + "method": { + "enum": [ + "project/changed" + ], + "title": "Project/changedNotificationMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProjectChangedNotification" + } + }, + "required": [ + "method", + "params" + ], + "title": "Project/changedNotification", + "type": "object" + }, + { + "properties": { + "method": { + "enum": [ + "thread/project/updated" + ], + "title": "Thread/project/updatedNotificationMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadProjectUpdatedNotification" + } + }, + "required": [ + "method", + "params" + ], + "title": "Thread/project/updatedNotification", + "type": "object" + }, { "properties": { "method": { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index 96c2d04b7f..d38b8f9f4d 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -4597,6 +4597,46 @@ "title": "Thread/queue/changedNotification", "type": "object" }, + { + "properties": { + "method": { + "enum": [ + "project/changed" + ], + "title": "Project/changedNotificationMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ProjectChangedNotification" + } + }, + "required": [ + "method", + "params" + ], + "title": "Project/changedNotification", + "type": "object" + }, + { + "properties": { + "method": { + "enum": [ + "thread/project/updated" + ], + "title": "Thread/project/updatedNotificationMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/v2/ThreadProjectUpdatedNotification" + } + }, + "required": [ + "method", + "params" + ], + "title": "Thread/project/updatedNotification", + "type": "object" + }, { "properties": { "method": { @@ -16010,6 +16050,86 @@ ], "type": "object" }, + "Project": { + "properties": { + "createdAt": { + "format": "int64", + "type": "integer" + }, + "id": { + "type": "string" + }, + "metadata": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "position": { + "format": "int64", + "type": "integer" + }, + "roots": { + "items": { + "$ref": "#/definitions/v2/ProjectRoot" + }, + "type": "array" + }, + "updatedAt": { + "format": "int64", + "type": "integer" + } + }, + "required": [ + "createdAt", + "id", + "metadata", + "name", + "position", + "roots", + "updatedAt" + ], + "type": "object" + }, + "ProjectChangeType": { + "enum": [ + "created", + "updated", + "deleted" + ], + "type": "string" + }, + "ProjectChangedNotification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "changeType": { + "$ref": "#/definitions/v2/ProjectChangeType" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "changeType", + "projectId" + ], + "title": "ProjectChangedNotification", + "type": "object" + }, + "ProjectRoot": { + "properties": { + "path": { + "$ref": "#/definitions/v2/AbsolutePathBuf" + } + }, + "required": [ + "path" + ], + "type": "object" + }, "QueuedSubmission": { "properties": { "clientUserMessageId": { @@ -18891,6 +19011,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -18972,6 +19099,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", @@ -20606,6 +20734,26 @@ "title": "ThreadNameUpdatedNotification", "type": "object" }, + "ThreadProjectUpdatedNotification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "projectId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "projectId", + "threadId" + ], + "title": "ThreadProjectUpdatedNotification", + "type": "object" + }, "ThreadQueueChangedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index 3ec9520207..f743790609 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -12300,6 +12300,86 @@ ], "type": "object" }, + "Project": { + "properties": { + "createdAt": { + "format": "int64", + "type": "integer" + }, + "id": { + "type": "string" + }, + "metadata": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "position": { + "format": "int64", + "type": "integer" + }, + "roots": { + "items": { + "$ref": "#/definitions/ProjectRoot" + }, + "type": "array" + }, + "updatedAt": { + "format": "int64", + "type": "integer" + } + }, + "required": [ + "createdAt", + "id", + "metadata", + "name", + "position", + "roots", + "updatedAt" + ], + "type": "object" + }, + "ProjectChangeType": { + "enum": [ + "created", + "updated", + "deleted" + ], + "type": "string" + }, + "ProjectChangedNotification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "changeType": { + "$ref": "#/definitions/ProjectChangeType" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "changeType", + "projectId" + ], + "title": "ProjectChangedNotification", + "type": "object" + }, + "ProjectRoot": { + "properties": { + "path": { + "$ref": "#/definitions/AbsolutePathBuf" + } + }, + "required": [ + "path" + ], + "type": "object" + }, "QueuedSubmission": { "properties": { "clientUserMessageId": { @@ -14657,6 +14737,46 @@ "title": "Thread/queue/changedNotification", "type": "object" }, + { + "properties": { + "method": { + "enum": [ + "project/changed" + ], + "title": "Project/changedNotificationMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ProjectChangedNotification" + } + }, + "required": [ + "method", + "params" + ], + "title": "Project/changedNotification", + "type": "object" + }, + { + "properties": { + "method": { + "enum": [ + "thread/project/updated" + ], + "title": "Thread/project/updatedNotificationMethod", + "type": "string" + }, + "params": { + "$ref": "#/definitions/ThreadProjectUpdatedNotification" + } + }, + "required": [ + "method", + "params" + ], + "title": "Thread/project/updatedNotification", + "type": "object" + }, { "properties": { "method": { @@ -16643,6 +16763,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -16724,6 +16851,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", @@ -18358,6 +18486,26 @@ "title": "ThreadNameUpdatedNotification", "type": "object" }, + "ThreadProjectUpdatedNotification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "projectId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "projectId", + "threadId" + ], + "title": "ThreadProjectUpdatedNotification", + "type": "object" + }, "ThreadQueueChangedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ProjectChangedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ProjectChangedNotification.json new file mode 100644 index 0000000000..27dbc800d0 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ProjectChangedNotification.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "ProjectChangeType": { + "enum": [ + "created", + "updated", + "deleted" + ], + "type": "string" + } + }, + "properties": { + "changeType": { + "$ref": "#/definitions/ProjectChangeType" + }, + "projectId": { + "type": "string" + } + }, + "required": [ + "changeType", + "projectId" + ], + "title": "ProjectChangedNotification", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json index 5876704afc..4bbebdcc28 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json @@ -1171,6 +1171,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1252,6 +1259,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json index 98aef0c946..a387818b2e 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json @@ -962,6 +962,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1043,6 +1050,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json index bcebfc360c..3a60e60be4 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json @@ -962,6 +962,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1043,6 +1050,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadProjectUpdatedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadProjectUpdatedNotification.json new file mode 100644 index 0000000000..b88e6fd047 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadProjectUpdatedNotification.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "properties": { + "projectId": { + "type": [ + "string", + "null" + ] + }, + "threadId": { + "type": "string" + } + }, + "required": [ + "projectId", + "threadId" + ], + "title": "ThreadProjectUpdatedNotification", + "type": "object" +} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json index 16a20062b3..4883420e76 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json @@ -962,6 +962,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1043,6 +1050,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json index 2fb3538f85..f773fc93ac 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json @@ -1171,6 +1171,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1252,6 +1259,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json index a27e02cca5..43cf441553 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRollbackResponse.json @@ -962,6 +962,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1043,6 +1050,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json index 2ece3204c0..beaa5b2f22 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json @@ -1171,6 +1171,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1252,6 +1259,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json index c53a7f8937..9bfba26039 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json @@ -962,6 +962,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1043,6 +1050,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json index 5451f70940..c096ba66ac 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json @@ -962,6 +962,13 @@ "description": "Usually the first user message in the thread, if available.", "type": "string" }, + "projectId": { + "description": "Canonical project assignment owned by app-server, if any.", + "type": [ + "string", + "null" + ] + }, "recencyAt": { "description": "Unix timestamp (in seconds) used for thread recency ordering.", "format": "int64", @@ -1043,6 +1050,7 @@ "id", "modelProvider", "preview", + "projectId", "sessionId", "source", "status", diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst index 7a6dc5793c4ba4ac585960ecabc060d9c49ac691..49a2202c1068cfba35b0ac21b630e54a0bb921e3 100644 GIT binary patch literal 138855 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
+K* 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

d3{o@515N8EMM4@h zlvE}Q1zgdI2KAriFElvH8G7X{(*)}TG}rdl>WH8-C`LGZb^!u`3&0TO+MvuJL6pfU z46I-=F9QT{B_%C`;7g^H#BW71JTC0rSf*xs-s$iod zF53b@tD#Agi1Cm}d47h;5kzc|)r9OK+sOj=7-F#C`99u^1(aJZ$#f5YKd1qWUcop7 zyaG4+fhJi96Ojs{Tk1zaltCLSfGjzo7;S+wsw&71H@1d38_=mhnW_0+cP~Srf(w!3 zr7Am67OR+X5I3q6@mU^cv=?&~E`$0|cm5QOqbCp{tJp!!3 z0AdFh7Ld&WaBI<_(o)BkQS$_aQ&{v|*PnB12~zuSKF)&wc&m+n0LVt#v}L9&HNIzq zxytmMZ|=_IhV*FZDW<{=y(1FqB8r2l#&R3;cwLW;bfPf_h*zj2-)K-! z08;=61OOCBU`iE7!?8ROa>x%9fB_2%3K9qeH~PVNwnsnQT zaGvRr+fJ(tHaf-z^^`ADLLfu>iQva^$w<){I_i&8vh5_mgI?JOv0~e8NDT@)Iw(c3 z?UPsq6->cpd~F|J-p95+IxJBvOk_W@wc4&P+12@*szFW|lTO=_rinSfh)W|iocKiA zPI|VKAB3b7fj1!%ZPyRT@lI%a>0z=#(UtpGpfRSv$u&L>U;lg=$7dH-U)LVKS^&+W z*g>cpvYisLU85{%e$bEYnZEC#>q}EXWR!WaJ%(iQyOuFbAX>#=bI<0M(NyQHABjOVs)7+&L?tZhm@^iQ$Cgr+54K>9ta9O+3Hwu~iKVwUxZ5KNjaEdJG^&40oc5 zKr&?8ty9AYAN&A0?27=DdtiV~h_?Q9OD;(N6UKc4^9AI zrU>R*88TV&t8EX5igz&wy-Ka<7XfFWKw+hX`7||~zi=KbwfAdWO|;hzT4=Qfv2X`1G2X{%Y0wwl>YfZcp+7NIKW zbJJv0I189&7XnOuoi6IN9@|uzl}Y}h2Kuy>>mS3A0aqvqQI8H&b>}t{Ql~)cTQH2G zzf%Hc!;pZRY^CgN<%X=OpxA;tR-yQ;*8N|Ez5{+omhE9#6aR}`r~sG{TNjlFKx1S* zEERH+)D;GhCXZEtp!rLA`LcmHQyV}aDL(y&dybCwXB(|$a|M+NNdYg zP-MPJuChn2azd^G`nXDVTqWJO3TIrUV=k_eE3VQ{Tm>Vp;$2r8uEN!9yJ+G!`a4ou zk`*Edtz(ltNZbv3ivE{l9Q!DuEkgm0k(O0u=srV5#U zc#LhP$~AOD=nyTfS`kEa?Wn?7>_Cnx6pkvTZUi){_+_3{&QyApxkm>?{Cm4*V!ilItLR9fUR3Wb1L~b3bv;&7Ks$G6h|C^4vkcgiYmYK>~ zsH{Pi&$x5{e&nGxEV!D|@rC@i(tw!#mDXfzHq}8msk&62XQ?*AX_5$iMNcL0w7NW% zNtO0FYb42?O5pGG(6)%wzXJx*UNw-1WqCXCy(^Dy^~FyysVv`d;#6jw_F!P7BwmuM z(e8Fr!AJgFsO4uIh#>B=O$FdsK4oXu-)WOTOz8%&ob5f}*Gei9$Qn)MG3Ib@BciIL z&&+{z`9fh7+zxwFs9S-#0pxe}5Rm9mfp*qlDjQ1)l3$*e%FuZeaNEAywoMMbrGjOR zyS9;+VB>iaUkpnL^XlSa5@aT`SUq7b%ghA)E=~r%o# zsqD^ToK&!6qc!d&l>$Ess*(zNmcU6;5vNpEkyO+nsZ4BGf-zE|FT^a7iZD8=BSR`D zSXD>`k|$(pMwKAukNMI1{liA8i?UC*lZppq5urM7VMD>7)dP@JM9~ql^mjIdJQmnY zYGA%Jx?Qt8_0buoi0o$oEsQr>)z)i|7(#ybYMer9JxebYCl8!qU(pQQvvkV@j!_q) z!p`rV&%Fn)&`Qgj<(R30S>D>=#9I$a&liG5q-$=7o els3r4;Gg2yPGbqXIiC@s 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 diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-stable.json.zst index 54e169c33ddd6cca979c4f606b915208cf13c0bf..06e323c469219d048fa137ead6a62541adb98798 100644 GIT binary patch literal 134464 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

J$OPqqf&%}`2Dq?jb7ikP*=yNQ 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�cjg6fHcq8Q4g0YUr< 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 z zkvKF&=`ri=jhj3pic=$s7PK7ih(hTR1;yhZ6y1*kQRShqdI80R_8aQp)4<&R0NC=R zF+c%3(Q$#ID1)L{0p>g$M17F8c$YBF_r+e0kT0S?2YVAu^jseBgxdo9S`JKz53n!c zEF1#*>xn!dp%b9qG4xOXWDD>wK0?8X$cQhyo1Nf z$=x3cO7W0-woft6%qa)dJ;lLTDXv_D%Tv4_WVP*1fnk?|A_}ilpuVLb6fL-@CxEs~ zhee&`BP?8YqJH7j|6>X+$P|WO)0I_ff0HSCc+6_DRheR6nIb+>mMv3QmnnqYLIT(U zC#R^*6r>NbO`w+p4eyzv3u_ULUh4l42P@GO5Vtb?qbXeZwieK0{h0|%r$1dhBtY5| zeB2W@dWy0oRE5i~7Xe0U2ZK+zL+CqKtpKBE-5-ZjGk@-G{ZK0&W(gmg&L_x(;AQ=x z{6iSPvj4Y_SDLIhgf4HC zO?ITxqc`uCCeHmg zEMG*Amk3iLyEr96%lV(?P#R&-bL{2})bgg@Z*+-!p=dehlrSy&OGiak2`rh08Hx}R z)s3->8j2rGfBG?a8?>RYL!vtYT5_q&N{3>PRo-#~jKsX6fYdz5B+3v8+p_!`bfVJ5 zM7cyU1j<`3kC*ZaGH`)~o2Q7+$F(u2>$=ZyvQ^vgmV>f}?$#u#fgJy!U7WTPf*us9 zD3aYVRZ*A=VwHqRrD$DH98Wg5`jVU^(tAK$w)UeWQNfksQzynrNGGd9GWFlX!@-_d zigK|OYF`6KMV2B>mO|A>)S_U2FQ-iV#{7P?S_;x7Z;yP^BqOh;a4ELx>+o^8#>uPL zTt;GcDMrAbW$;o|NVP7=a1lZLij^OiN!-s_Pm?nVQ~2E$p3$Nk4o)$J*Z8q2B5XbQ zrQ>)O<@{N77)=0yWeR?>PEb;3H7go8XaqvYI#c-kK|%5}MO?b* zgr*3IViZjgta@`-T<{6SulfmQ-nc`()l78y&fyqG7WLZ-ZO92h){k`sv+ zxY-J+7^QEr)hp)2(DNfdniDm?cdF*9A3q_2)14C>W0cft?!7pO$u;0V(g}zcM~(Hm zr4wCH^Jo<;_g-1F;w^RJZ0bZ)0nP;5!&N8Tae|(e(QZyGJHeO%YSFW-$KuM&jaLc7 zc7oY&$bm!E?Sx_-R9Qtq#dddMPCP@GU->X&$`erK3B@_Zvpi96c|x9` zZI&a{a8VY!vns53#vuMO{{AlVJhAsYVgFJ*&=X|P6BsMsiJqX0nJ|p4x{;n}mYE28 z0#84io)Dd$7@)92JwY-lN1G5=JrR<3p;gQx&~KepKGdFItvxZ$4iMOp0{6rZ8c?j7 zz5L`atRfemn92AARWp@Srn8YxT+pn#s&OiYKyg)8+9zLZBcB0hAy?5CWAz zAwUTb6yXt(A}5Uj89;*FWk!O{E^Cuu&mk$nhDTU}O=r9WTQ!jhHgi)G?1=>@*v80C zu=fz3V9QiN!7guzg1!431v_F<3N{JT6l^^SD%f+-RIpDMt6=XeS;3B2xPo1@du%VC5V2cjVVAD22gDszs23yLU2K!E<8fcBsQ&{2u5FG_ZU=4zY4A^Phr93Kr?Y-?BXEa`Gid=P3@QSD zmeIG){ff?#$dlZG4J7vJSR&hvReI+Y%5Dr<8117wh?AF6Cy*&tL(WR-9?UM5m3PRO zcepd}5H|0?=)41b-r*5?hhg|Dy#tQm3Dm!$Ye#oOZ%M-%QACuR>H)rkjy66pERwv7 z^vqSm0kFPP~~Uj;Xxyl_Tk~+vSk-=QbecM z*hM^)od8zYKRC!fhhPW?lHcYVDjqH(@)wjMDPBA@`tFGF;KSR?j0Yc`Y$~bofMJ6l z8xJFP7@N?U4#E;>Pz`w?(Z(M`4w$Hixu^#f2ws=3O7bzh)I;0V@XsahdlgRQOYrAJ zs|4n@87g!SRwxCknzA1u;cvAX=E{aw&+U+gDQQxLpvic;ZOKnJW?fKfGjx zv)tc5SyW=JK^!qAMdgLMuVKcnR)IniD?~-(ztu78)S<#DJ%|RjFGIzNo>TV)BA3tr zjvNm`ynC zN&<$>U>_xZL(JVE2387daEJ@3AcaFLU`LZE4sk3FF^of;ll)R#%9g{)`R9iPTO9W| zCjp>yh<}aW5oPRl2n}}#)HX8! z@Esxop42FKh#-K%gHi-h;lTznsT5v>I_XtBElO?z^^)R46r7+BxYy)|c>kaUly@I6 zFFFS(5rEW?i%QPNM~Sdo5+w!*D%Fr1$T{vHBEwtYBm;j4B}90C`GnvUM&lO6g@_l6 zePP8lL|bWZ-^@3<^TakrL_r8R&68uM>wsCFJPnC}>WVdaV!{-Ym59J&=60*E8ASfA zdX=#;5z0SjH-W_RK$)^zllT+K=&EnTO^C=Fa0AuVzMt_jDo#WUwU)VkWEC=WuQA>_ z5s(wm_~ZBRbUhL4IvjqVh^P@1fkI;_5Nl9GL@lJL3`MAF`O#Y5yu>Qy4Xr3_ByNZDHDndoHk6}fur?fSX=@99Ej)(TVa!>je zQwVY`^vBdh&Tzu1v;D*oS{fD9uLyQ&Z=cSu+vvDzEJy;DjYUZKayqoa5&;E}G7a2O zdTthxauy+aK>1mOO*nI)ApA3_)^QZ^S50G!@a`r-A}sR|U`hNfA~iw35l?GcqGgPg z^GTu7MGOKHsf!5fv+NYm^GW5qh*=KDOihn`;E`MF>GC_-yB=tUKu0*n>kZ z&TG)_(MN)v3>MR{mUaF_^fJ7L4I?N6u*_Ct!m77#%(mnQAYemSN*N)vmQhbZ(1bOA07A zu)u>#XWMO76C6;;fIZKbiDB}#KEGb5v~7gBG{PuVtDs7}5u%PwR}&`-n~=Gm;EhPG zl~L}a#|ffY6`jFGC5!jpqRYhSuuHbzJl)~gOJRSEU6jq4Str9rv-NsLH`r}$_^L{u}m{G9mI3$ph zJh&~NW?K-)cZ7e{X=@>W0w?cuYo3m{19553P;y8B;%e1}hs4N3Vt5V49}+1*z!V~J`K7Ey zByRjTJ^Dx@LFtJe`6`j1zZQv~Naz3xmc@6@S>R|UcNFG+T|xeRIP{P~TQCxGYlvq< zf^5i0oMa>dQuUUR2wIQuYph1%@9WNiAwUTJD`Ko}WGuJgGW4?kY^tira^yr8K&*yo zIczG>_=k=49ZWymk2XLO6lNVgqfrf#nB-|@+TJ5)fvIH%@Kh+H8tSY$04OYSX=yBi zEa)N-1cpF>Fo{771yLNt_5l(=APC$bKp+f)5FiMGzz_r>NC-LtgaAQE1VJhu(Gp8) z4073^B{301Ca5zWfrD%&sKF`d@4=5raB8>QK~R`1a5Bwj)N(c)hGtr0tH_%$Kv^e2nV0K(Pe!X@L` zQ-5XGGXnKE3{i;JDIR|b()C3hvLN^Rc1a2e@FD*54hM(pdoFh#l<7be>r;=s>r#{9 zJ?}U;Q!z`zISEm@y3&X$BqQl8?C#n}P<;k2_vRbwJlA>=u^-5JvY zv=&mQ<1r@1;ooHTi|Gov3rQh}i%H7?F|a>aObUNMGTzQIBJTcy!1Y;zuOAi*xl4$%R>m1R~R_q~}K{ zFoC2hsm~b$64*F==jBm$0!pO0hg3+2^fd={2|8&) z#CsA8k$mqp3ZpZA<0>;moFKjOAUf6%anDK~61Osk+#x-JR8(GB-sW+t%_9P>8gfr1 zL9dQD?}ik57mwB0Wq6Ka#ElNk}SlTnks^m&IrQqK?Qz*+&zsdqaq- zf9shs3R&1KzreU+r-pNfkbRl=>!QrOE4-ydS&t40#F)?bV#(Hf5GR=NfF7w zkzFEy!}hL^wv}~9!BrpK=KdKdGCYuWqr_iFG185wbSNTBfO4bTM;r6tMjL1psR6KV zBVC!k`P3vAibEdd-YLSnpwLKXBOE-S5xt3u7`)~)B7VVVjAwL1ry}Mi>WqjX|682M za1XnV5$LN3%B4|8rr&{{O-3N0718QK$><_n7LUX|>l|6ZxOZ^Gje4AnMYhv+IVOAr zIAUjU4J?Ibh*&5X>2R|MR+9!s;)_#20i%VbMIw*+FVf15WKfYuLZP}w@f~pJ0Bxjo z7a!Rc*|`*ZW6dDr%|Ymm58n#^^h}~J#y;Fds(*2I`BZ+ti&V9(ZM1&d}@4*Sme^kc?h?DGH=s_X$#W8!N&~z2>%n!L%aOrLO%k;?{mnv`;il% za1L>nl7a$rD7fM2YR0u81fs!sex6+F`2b1gX{-({`}N4uWMs0$_~bS5IdcdxF>QSV#sK z5K8D{z80bd4xfTA+gEi9C0a+4biT9jcU6P@eMoK;Zr%f- zsW^P_H{&INLLl@&q&>EMz?pGXY6qXoEX9Gm%L@!vWM~kNtWW{SWOZaE6hkFCiE3jj zbHRfX9M)_lu4|@C>O!ns?<8K}SBafBH}NF9b`DuN^9M1(hqAoQ@0jXIyn($6^5y1D ztqRsAuxwZ2EEOu|Y@ejdQFy(@2s%FrHD)6Pt)K4KMnOdslptgkl&k_jbonE?1(1eG z7$j{uoGeucd)l1Km%vbhiMQm_V6X1kd?@k051w9L%<-`#mg^whTe17g?o53iYqcRq ziFaGm3mqjDChU89r$;li_pH0(L_`csiCkrQKgfCD%LJ(Je|fP?xMn zB_T{+sgG99bU>i)t3;guL?2dipF=fPLS0f2?AQ%Luvt6{!A`<+2zF>oM6jtU6v582 zxd?ViNF&&wK^?)4iuOrw*a3`103c~}b}@p+sNx?3A_$CNa7Z-DaU91%2xj^s5C{YT zf}n&DAP|BOFbIM$34#zL1PF;B2!g-}fe2`@D^3R(LER&fn$k$1pf!ck_r!kYrM?8? zPW^TBbY}&3x^aGcV_}9P-@kN420nWIL`}XEp(CWDq{boOh2X>!kenGv7p- z5vVpJ+};-zyh9%7h&;>!)UTIC2u3jInYXK;klU=VO+KWVQ!4L=7HF|~6NJJ&iXK-^ zRNl(rS5ilGM!fcdU_eS>DFdPr<>`FP<~?pdH3zfBQE0A*LOAMH477YN~6M zcd`3qVO;Y)hdd4L0Br;vZObsr$2|56q%XDsODo@I+Z1gBx69~mTZ29}v*Aka3;?KQ zq#bymfnMfVB>z5ZVQM>w7w|F^+`$!!m%if;3@tVKK6{^BA8FxFD%eXCH}Js1`p%-V zHu-pWn%L2sN|U;=>}3!0hNKsS{XcCMtTe!SO|OIuYwfNOe$@Xkg3uy_`T8Rod{|EKAHj>iLHiJp04yM3Tu2iU zNGML-BvG2~5z_>meYLmp9h$Ixl-FVNO%p-4?+U2bo|dVJQHwy1b8~300Ix3Ovp_u@ z$sqoAA06(VR)-pV?ml8IyNQh#DR4@fk9WVFckjlI<-L2aUH@QCd&)0R!27knab?O& zsKoBvl|&88PD-#6oPN@R4^*N5v&KOrVT6(WjVI((9_Pz2K9C2d311bs6)$QaW z;K3>o2`Bf++=+XOYcWc$FV(@MsnPh*BtvPF&?E%m<y=&8bA`@1pH7sqm|5N%v?9UC*hM%f@3CAzWpSa_$T4?LC9bbO8CF&=>N%V zQi&2wa5^470l08c!oImd=DIk&)ekYP2!m1(4d+<2L7{Devr3<*@Y{vRbbTlC5Xdv) zUOkeZS0e1|m9m_!e@(EsLI4Asx;s7$GO;AsmuJ zD`*zI#X%aK>*4VcQXqcBvPFLKbNvV&Pm&+0UBBMPo>8IyR21&6h}=0DdG|wm9M=%~ zik_)uP?5UqUXh~@kFsw>F~^ArO<>P`0gdMphJh846u;N&O2y>Tpg|--G_>tZt_#aI z!gjX{# z#^R&`j+vf-Ew(Em0&ITGCF!AukO!#U9m;^}WlFmC7{jOKGd(wOAwPx32xm)qpbO<=a)=@nrt)AE zfj9%>osBTqg%Xorp*z^FU0@A_!eP#Rp=kK^|54#8NCmQYe?%&<@+#x7NK?nTVGv8BTs7?7>ZaFWBT+f#Z;-N@md`l`nb+i!0I zS{_xA+f;W>@pz0HJ&K8Qbe`V42Fo*_GVT_u-MN-lP};Hqa%cnw2i1(_fZ8{f>13y# z*=z12sao@vZzD()+bEm_uh|gD-PzFFI^xY;Rbhl0Ifx4toyLx?nXx@tk$3Qc+4+t; zg5JapBZ&BX`yI3P1(z2|X+3|$ujVnH19q>7)2C@qUy zo4+W>;V+vZhT^jIha&5sfL^Y$;5GMh$cXa4#FuwXevP1BT20Qp)1}K z+yX?%1;~bEIcH?t{Fye#8fQ#}@_bC90aCkY1RRUnIlKP=7)2Z)rCu)rcz{r0I~;fK z%PIg65F!weX*bazAi2h@VF(B+{=uM171#dhkLTRVWV9$y#u3JYLMtF$ z&4tADcXoGE88HDd)N=-8aIra{?o}x3d0qeMhc?~4VZM?>pRbO_)a?{|K$?3%#Gk~h z@qYS%w4v$VR2#EDyND2o)7dC={VA6MMne&Z&Ww5umX1I?%V+=zr1>I`B#@{i5N%8X zF@7<+KuRG06H&g3Od!obo~HI^2%u*^fh@X6j0)s2&M$QoNLkJk?kSK}9YlyvAKV7Q zj+}*0=1}*nFeZE!H^_q{IuJvo1CjqJ;%|91#I?cu2}izUCK2At!M9}L3POl1i!HrD1FjaN+JeB7+vmKdJrI73@*V;3OYlxRA()o6LxMf9 zz#vgi+Mp$k(+{jS09bEud2MfYEOKddWr8fI;%7J_5Cjqk1cpS?Bu`-w2N|3n51PK9x5TpbMf*?48kcelnQ^*+u+18p)-jn_yyXiE>mXA7V?TcTw z%H~3?@C7G{Hr;TBHgq0B-siqkiRN}a2iz1+A9}Wq6Trwv zf(zQf6#`Dik~uY|e=_^wliP~0L6OcZGu%MLa|3_Vj9&+#SUu%2-LU=f1_4pske}ng z36Nz-fbe7?oY{?GZy;JvUj_Z~7hC+oeSsrrf+M!Xqd!$R!e%(4kaPH$v z6XZ=h2CefBx5i4K{`3z$LsGw8EWb96 zLkH}ICP9-L9I_vnt%Lgm3jNX-*fd;+{rLly>wvNe$qaThNum7?rk;yxK=5CONSGRJ z!46}1CzpsLCZ$qFM`I2eQ7Vo)4hj)1d`SB#bY~ZD2DLC?1O!qb-9++lPvx`Tf9!klG9x%bd!ZTr3w^Abq25i`t)KnE6K$$!K`8K>dAqm=oj;R&Vz_<@LH z8lq$xZWcazrU9puVK=KHUDGh{lVJ;i4ZVVJ8dBpll;L>iG|!()FYLn29bwFUtN%*ynLCT-R!@VY^13H99{p@gLI4rvH0;SbV)X9{IR<1u-u zAkwIU&^9SwT?KKJ-Y^9dc~-P{j#M@_Sdus{--prn{;+Bfk~4tNOr1Dtw5A%E*En;p8#H+A~t-2*)KvejX6!xNr`AVZT?!? zMz6@WDPd5$SIi_kSb~FHDQ^|nHl$=+-wzM&jGd!VH1TkroQD|5BN)%eWCY+`jaR(}&fkPd<&9f-O7 zThbx^uBCNHBQ|6&>k4?OFM3MsIJ_%NC^IO_9p4b068U0gL;cXg+#Z9RX?5in`~Qgp zzjUbE4@wY(@_Yq*+W zd@%mjq`m`w>$39)@#DxY@efwmCCC~|v}-5hq42WpBFX7#TMV>{rh3aireHq$JcJuO z>&+C9Md0Q!6(>Zt+qq_S{0^Pp6WDVu*s$T`N-qzQ_+ZYxd$4_Wn2ed&-!UBv$cE;i zsO2M`eKnP_VMLv-Jo!E!@AXXOdHL0?eltWJx3{EnH@mu9!g_Q&9kBIXk%fWwH z4#+=F25o9Ntk-hjeeo;pM|n9oCfN&-#<`k|a7aRC(gR$7YgptOY;G+`l5afCp&!30WE9Koza{tEzt$8lakR+O2@q)B-ZD8XrVIkfvSl&Z<&o=H6Qhd z3hkd8Zdd~3Kq57Ci3{fbtyl>i_wP!GK{B+)>Kr%9iKpAj%@nHvJLp>F@4Anh2@VAg zW$R9=K83om0+KGoAI4#<=Bg=LavN=dTn(reFwTE|a~qvPdwhjti**TopXs7XWq&j% zm*sS9I_fKuLv%G*SqjG@y~G;n1>jV)-qn`!BkxPg>V3sx7NdX>1Wh)+ma$^)(6!8Josxl!TMxS{j>TM7<5<#Q;e(_^F#z#V2`}T#qn;-tgEXb8OWWKV;u^k3GAn$k*-n z|4UEq5o~WkunFvTD946L-1@Xba56Gqna=5(&(>s9Dd%!%?s9H!ThedZSC2wXM8fNt zhBR|@>^eygDH>fSR49@Ql0aEGW0-ahIV6~Pz1S>(p=DERsU9OEK!LeQ5)_&xNEu6JnPny45uve` z1IrYc{v+r7G-k6G2HYR)2P=xhvwo>>JARU3`AIeJe0}|-Z2L*^RV_dEa~ys2JVdHK zW@2~TIuDY}?>X#Q@ot4^glr5-*BO*bcQ)UW@P`K~klK^ZYi$&|Z5N8UyS`A;cjFpS zM!kj98$$joCLS^*%za29ki>kCRJ1psl_F7+0#E^GzVG;RWHC)1WH1Sd{>eiAjUrAT zC>iO6SWQ?2JSn~OP6UhZ=cSkLwy$^(bEcQ?OA=hMKtz9g^C3!pZjfr1hvMT>oX6g8Pp?ta;aSQH72XVMs$7P>_ zr<9Jg20F}eMrzv9M%;@cv8N5tuk5Cg-t(9?Nh<`3Okjp3fLugSJ2&pvjt}(X*sd9C z#HdcRB7#g5b*u@KPhDeB|Fk~Y1XMfLJS>u>bxtJ7hbC4*D5Ri`6iJPRRN}+wqRQbN zwromrcl4gk$IOkRoo|-$$Rh~-=&FxsLb7@p!_dNv0i1Bu)VyTpW=Ng^gy`JqNf)@z zZ8?$!JHG{6N5Qg(3)TZjVz6Q6fI?WCI~h#q51bGR+vU(QxmAV2`YqwRH}JYU&tW(5 z)|apx-k8b#KZ)?ip?r?$G*vwa0C~VTg90EUaPD0+g?0b}kU?~y3(Q&3H7R&aqT}PK zioyX%=XU^hBLawD31AO|SfEf{A-WeyOZxBj5jo13cUxs&m(a(3l9#PU8CD*6XC04m zvQuI7m{SQPt8PcdjD>6nB>ytLnMa_PqjzVjIgx`a0nCvgaASq0wjVU z2*D^pf)LOI42)=mJCwvZ`4m!xsG7SQ8lpm<=24=uSpoNJw+E`Rzg zviD#w4RzzANJEMDMbtm*8V4RhyqO2?3;UZ%p|9+=80g?;PSuP9V&vagmw)s9qGjse z^f9#grw9(*yYYPQ<{uIon-|6Z4QaXb*ssI==SJ0elQdw0vn|eg3q4sBul2$N+#x?_ z61GV2t|AxS2KNpGf&lZFt={-~I%0`{(guFZpdQ6wT8R)1Jl{ty;4~_;q7*L~;ZwFA zMdBv4nxEFRI1)!zjOpX)n^^%e<^IZ`lr_Ksxk|w8-WEd< zT$V))+J|7mGT=z3g)+%dDrJQm0SsIFCRjqeuG~8|W6w(@Z=PXzz>J_AS-J~`v6MpW zRt)E&D^k|?BIlMSGFF5^@uF?_8z35O?sERh&@J!tlefxrJf4r@(7G1Yro2; ztO20)CX#u(8FJxn;k2C?wr`^1b!R&1zN|ACHB0YdxW_eh8Yr)LKG-^I0z~emoR+qn z7C__HwOq2wHKDHIFVDELjk+2|6N>_x(s33*vY1!4)(9ab(mX2f3ZdS>LWB6mXT#0T z;9~3F({eIQFvf-HTfR@2`gi>F$#JvW6a`L{zB#UDs9Dz|WSkcH1(Piip&Ai}l$ zP>HP=L!*)owYBJ+wiCUt!@o3%m<@lj;5iDDkd4Yq^)j6sb4@jOPS)a6-S0Ne;d-&H?+>992F1>NEOyMYfp$zrSJpP zd>sG)fgNZ7AqatjU>HQi7=ba2aW@h`5ZFS1AQS?G03kpKzyt|Ff)Jnt2!bFy0m3nw zq7)rB2mV!u>sK{X+F1dJZuay3BxH^X-N0pghvHv|i({~!I7fA!Kg57#ivUB^Rug(z zOmmU`KlOtPo^Rk!H4?~6Jwup!{4{v_b4Ms0jva;yqQ`fT zx({A&nqjyBruRoms8vs4%r#ky8}RGXXq~z!L&6GZlU+&`qfet1O1v zNkh+#GSz-7Z)c>qbjQo31eYk=0)`Z51VE{y%Nsuv7bD2wJV`W?JrD@9nq65<_cs{I zu+kx(g$@U7y(w2ll`P9Nobl=c`KTfT^F?2E&X8#t9{;90vc0V$o?9PDg$3=mmMRm_ zn}I-#*badnPoZNGL|ch7o1pe{Rh7M}>bGXEhQ2V%~u#UI~cA8MY5oE z*R#neR~M$bmn(dRyK7ZwYSyEI_SW9 z-gXg?bhP4v1$Vrof=nQ%5nT@@F{jTcQxF!szc?cR&;lUZEPtgwgQ%dhkFlrGELS9q zkrU0aiQFWXC=po1xDi-=xF-hyM?T%+EvXxROFu0SefFvH)((xVNlQCIQVZ1b+qzl< zP4bv?CJ@8|k28S?#6pH|qgcHW2kd8F0}OCyEx3GGIf``WEPU`*=P_mj!?5f^Xj5q; z)+*fe8+F#@MDqp9t-TfQR=$Iuz1v577ejtRC(rqq)!WWvQ?YMvKTjmwj`r|?fswYZ z+MEwMfYAVxmMC{fHyXMum;D9YG59JN5VEU$9vSOT8&wj~Xn|%D1~hV?f7;p5+@*UO zW;e91%_F0pP2vHZ*PX6Dg#3lYbser{%X&+5crma4bc&&t$ha1}Ae%J8gHK_?NwedH z&Pjvzcslvhgor4ic}RvEhP*V54&m~tI$F>`Wsb=4Nro+rOpla6*A3bV2T38)tdS8f z9~l@Rmy$UoH00?P-$f)2CAqYW2z(5p(iV#95DdqtZKoC$6s1YO(f*=G66(LXv zJOYFvXc2})JY=n+3Yr6wRx!mI4A<`{uTAsfR|9|04xF6@AgzCZK0^RkK&Zcf01_6+ z&1EIXq`#0&zDfm;@gUfJ}p3|&f^@kLO>(Hb%n2M!OCot%(liKCpVLerH6zyvBoqK*{DsyG_h|^iWO+)y|?AFFgLNl+)MkU;1d!sDR(lCDwKA1Ni&NC{%;5-iM6|IU{Boqt;u|MC_pIL)IFFL@_)Xk zY^{#D0<(v@5sf6s_2rB{;KFv9UCa6Ox54ympz9xtBbSEd5j;zf`7>%H%eS|I_r$@< z(bWU3(s$2<_v>?7-Z&%rQ7zAB)s-jO4i)`7BGzrRCO$d>qDk^xyy3q!^uHdD?1U~n z7Z8{|a)+uLW}Ez!F@) zkd!Ku56xg_P6s4IOq=n6A+>F$Ai{}(5A)$Z7hxF~VeRz&6hY!7_O`()FPVUYjfh3t z@LVx~&<)qjwjgw8Kb@#xGvW*u028@F1|hVa--H$eVTmG!NXDP`O{JpYd8+|HkToZ? zWCY2ofcCj0( zAup7q;tS;@cUUXIP!3uuh-SCIbYKvYx3%@;+)x5Az}jjzA$gNECdH}A{nwGlBKe2( zK=$r+{~R;rI*j#XV?`oVh(+RM4WzU}!G>tcRf8rQ5@SR7IwllYSS`F4!o?NI$NBSWUt7z(76 z697<#=q6Y+%8@v;^$@qOJ(?<=sk>TKSNh{r!b|Ci!wvY#M@{gz zVN?{iGx_BK6swH#u?nG#z}SXoDA4Qlq?@PWY|XCU&--PWYi|A_!E{lx7Iv zQVwyZnFVXEoBKPFzaUXX6OzV%H+m^KagKot+I}%f>0E(~e^8sG-)@p-mzq3IQvU%! z$Ti{6r;+Byzr~SBkmkgr7CFl4u{>+&ek13^YuWTTRw}(4;+vC;Tvuu0Uwh@E)I%0& zT5ioGb$G-Gi(^g`{(r_;>F%sKSjQsklQNthQ4_QCh@U^l@2Ck^)uMR9Qk#3Ofkb1- zy(a%QL&E*O2~aiR-EYuKd&s3b$`}~3G2jbTXrdS3Eelp)VvM5oQD`$_&!ZV&Zw$6u zl(WKtK!bF!6Om2ddQ|=DACU2tI4ogs_8y3;|GaiJ+@LCfCY@nY=f-YB@xTtMs$hAp2HS^>A+T&Jd!a#4-e9LT*17@*^&1WrIQfT5 zrQ!HTU?eK@`y_qA4pV9VX;Ab|ZTmD~sR55xr3Y`!us4$n=#}gOmkt#PL{9*w5jG`| zD;@v;|35>H(f^-pvM<>pG>Hh2BY#_=p;P(V5$GpB_wJ$zEdVb7C;(}<@kuUopIf!1 z&BCsEWhC)nE-PA5uQ8apI&Bj2y+!Ht0N=g|G+1pw1{oIVRly|#>;US)OD`DzU|JrC zKd8OIiI9|UG@a*p9!L;yO6|U5ZyZhMDYZ&G1p~IO6IWJG&5z8ITY$-cmJ-rjdh+MO zwxIaNY@__1Wkl{Jg-;?vWr6ia_gOR)QpM3r*OF}{gm>>yMj9s$3LDH`;sE*>Vk5!j^Juz2qJHMGd7Bg1D3TaxHz z@n+H-5KK_%crkAb^i7a3jTK~i|A`Hzoh6TeTW8O!&LY)VY<1a>`y7qVc!4*#gj4c7 z`~W8YZy(?KFpM0U;p!oe)&wOP4LQ9F;~AbS%-`C9SUR02q3l}^1aHTb!jw3m*P6{} zHTNP;KJvdj4p-m*=rNacrKCtr$AaE!5`E6no8ZSBLDBh^5ri^#C4?Aq;> z7bm;wVGQ=SiGz0aEQgllLG&x#mM6c`^|{c<_=K|*Tl-2UJLHFjMkSnoByx_h2L?Rs zmF{=L6&)qg?>V@j;Bq|1d8Nx8kOwp|01o9{|jJH4{otGm+ioekl7VM57{b28+I zV-ij7TS`*^(^S4^?pA{aF5jN?{w13Sja*&nlHPv}Ru@V;=~g_t(shivKtW`t00dL_ zlT-~$`w4Z9BBINc4xk0hDNU|)T>*}t7s+?_z9p4HOpsAa_o(IR8GQ%6Q9XzXW+y$j z)ZSd_sQ7bK_bCiVgg|Lwi7tN|e@z&+;nFJN>exrn-miIS8bm<*$D7Aa0#*{!sbyVW zS&l|G(PD+-wH4Ix9h%-vN@tkoLOiuf(O7QOq;`Y2KhsPnI>gb+2imnFI4*nj7sXI* zd*7i`EEr9hf+|C$IwK=fkuA*Fl#ypNghsCdKT9O{GL3Si^V)S6g!Ic9b>)JHog=WK zl06b}OuH+@Ruqv%3j%@lF>(p~Vl-f>P^{H)dUAj~mvX_LWZrI-EmtrDt_9x`gH|4k zO&}c^2EjHh3=X)NAJb?U!E|bR`vAhFY#f0=_Iq#;c+-btKTMZ}pv9vWJ!5hD5&Voq z5T7uc++scC+h*500|Ir_G=rp>zDFnpm@>+b7OBiUwwKQxP5*i(@-+`!i!go`>L4qJ zQW}W4>V~|fVdVd#(e}y3zN|;KKW(ZpP#cbyy!BVrZfsD@8jG^TmwfKDg0p zh^%=j$>T4Kh_Nw!I7EcxOGbxZ`iVH=mFQ|fp;PGlkeSDDGGgBBRF%^|!0F5q$ zjHUFe-Y2@qgr{>ja2$d5-rt^`Fud=shqla!2KVlLh*RA{#^iEu!RC$skp*%{FSh&Y z>o6*=^jib-v(={|W@8pz#D=v2kV~&vEqcq7ZvJpXwFp zGGW}<$p2|?^kSDMiFH8>v+m}k(b+(p#u$hLSzqUCAip~Z8D<_AA?JBK0ZJ^TaVI3M zxGd){y=5Ig8}@#yWBNXgU8~Y{`kUv{dt#(lWxa*Cvo$gB?%OER?<#+H#HsphZSXkA*V#O3zm8*X7L;=)2I$0-S^NX`b zi$47`_Yf-qbz0)*^@@!7s!VzNUbi0E3s}%1Y0R(77cGnHpBRGKR)50H1PH?&&Hr|= zpzH|8^|Vz&y+=AL$3eFs#t=m#LGkA^_9mP1_S+f2QvQajYDPz?VO)$f_5h)AaIqIi zx|%C9!pK7l!6eWHgP94yowxmQ2Ou-{Bn&Py%1MUaiejVOY~b+x7i!1uPyv=ei1DGx zt&TJR$QPvR%<_;&IxYUy^!ZCW5b zyM$MTKI<2qw)eKWZw-fY@DxNlQqogyNrOpAdqIG#7N81*`v8_Ph$A48bC@T+r7-z0 zLQiD7<&HD!K8pKs;S{{Pp<$ww5CV{K0e}E}0DJ)Z+)4aS`uf=%wnr$?x?SK~hWq-l z)&o|cN~%8u_`DQ-CNSy9oBElwTx1dKm<8Ryan{JK5=)XE+d5i;7W7=X;Uuhatk;q$2?F0Xe6&P!`wun*IsUc3r znmQdtBRCHWrH;vo;7riH|KC1OY(-+79TJ9#<~}8C+YhO8x`W9wrYG5`u>?b=e9-jkF*q^b_}GSQ8v4;v!E^l+!8G9@3W5a;HpYoa?@& zKDRQgY(3YYozxYR35ler^jm|DwgCx400;mWAQ&DZ7K|j~fJBl(EZ+w-;DHH^4Hkxk z7XgC-27v(q0|5YlA%I{200;sAC; zTV{!*r`}b1__dDFq+crA+I#D(*X+<{Nd@opl>AcoH|jU-2AVt+uOzS<`Q>B?pxA+6 z8bT~B8#{C2d+1Icc;dlve~?*wosDUm^fx}sdDNP~x3rjF}9cdng+9xZ*KJUAh zaPX`fK!RLtm>Eo#Wq4oIRnb%mkK1WhCTFO+VXbU|7Oc#B40@7ah749fNQMk1pBOTD z&oG@>A_%#ubE&g7@W7oW8L>V+8OUH#f+|i^@wxgy2Dk2cH_?H1!V6FCLrRyhzWYC5 z2vjzbnln^|H2&#Uf(*tknw0TB9pm|!4GJx$@8F+0f#<(?Zsp6NOfQ@;qTV3q5epLg-t_N3HiQJn>vzH{j`nH|25V`V^eKq`g7$;VWULD^poUGaNK+>9sufppF{0qYG3}kEVNM*bql3cfqtWt2gHjBrCROH-y zhzgmtbr?yM8Zw?DNYYPap@~aw;lXOI#PID{ul`d(^0*Z@;8T8vks8@Ut0bd#GgaS@ zXm@|DQeR7wh>5m9^X*uOIDxlHb=9nNLF(SjQVJ2!KQ?oaR_7S|b?>I--&X-a097`Q zYgV6466@GcX5+c)<3nkFzR!vQhAz9?P>G~CXI$zD=O*9UV4wS0i}`;We0|lz2l>g( zMQjX!A+5>CAORRyn-ND_Aj)##lmrT9pWIB4kTtL7#>4dydAhPCBA zPV%6$C74J-#)0Q)b z3Fb?~_Rw+5qS1uYzD94vYSird?s@!emI>rl5N!Qha{UTbjlzj+{Ubo|CR#b26M4%} z2n$Gd+oGLiQGN97BeE;UnHFGb>3D#w#g->2%hoHAfL!{-UfxT>2h)d7yw4U{e8+5;^yjemR1jo<$BhxeeOi!8UN9U)UGfHAJ|^#iWy zr$o;imdL#S(qj099cvQbOag~=rU02P*$ANib(_65t_e#>hbHQKK3QK(9=QR|_zBUtV5~5R%)FLQkfgkq2Z%WKtpnx9ilm^0Uitx10c8*dM>FYz z*7QJ>3?bi#dGR5^=)kAaJD;#|L20+cN7(KdZ7<7!TG=W8S_1)FJ-cndLHapngF+{G z;fJ6>5R?uyA_p65`q@A#j*YbAI@W<7A2e!1#qGc*V01GM@IVkPf&VyWluI`Mzxe|c zb+g}=UvARo*Mvp*TipmcIkw`wr+Jl5VHP{ory6f8_Dei(fh8{F=m}u|$s>;v=w@7{ zban&d!^IuPDuU|J=))E#=NTs}K@%D*6s7p%g#C3XaR2Jn|4zbPiKFt&k4wDGBrNag zJsiUJH~NDD5We+?a~TQ0`C4chppRk;6x1lEM5&~7M>dk;lSiJ*f$f)2y)CIA1fBU> zVC5gM(!P0LoFB%c=4VqI>GdV5M6Ve|#@i`RQp%9BV6Wf{2E{-Ehy*26%ED?`t^47? z+>NjIs`pa`r{$36(tVWlzLd{#C(@do9B@*|9Gs4cR$L-MEg+OlM2O2}AN;mrPXQ|L zV=XMQXw;GChRJ-qHyo%m2yRu~#Z3Lay;G2njwaPma0+j6IoG5X<@kh57l~Wd7Fz;> z@NYL3*`0H_76Bd-S3^XjjqGJ0>k?kk;JPZY@ZceXMP&V!i1+a9oJ|L;3|xk}>Avuh zEjEkcR^iq_0kx>=R)xSDiolGgh3>#0vDDu^0d)8A$!iM1-ow!n91A6^s-O>L2Ivt) zEs@&=wDKYi!}v(lTD0yNCJUrybTUmv$ zP7DOr(vrFCWM#>eP*iW^_mD`0kyUc#O##ctwL} zN5T|uvAB$BFI|riTvy_I-h;y9+@L&LBMCS+TD@rwih8={8Eqp{&<-Oi&#<%T`9ili*PNoBt~JxLJ#2N*!odnPYn}1<6K=_vT<7i?Q4pv( zNwat`<-bGf;u>fW`~fxqfiVLfL#PyNfzV33z)i$)r(BG&MNrb5LCCfLi~w|!>naU; z2xxvW$&Uwdz}4ffyA}cHgvPscz;0*T|B4q01-b=_9|Xrj3^e1w+%65|WTRsoYtkPUq`7uwF>W17H^%i3sGo zE`V`yK<3yta1k{Z&IiP7%G&wL-6(2k(zT5au<5yXVh;*ffqju;00-Ej>Q8vZipXHO zfdrWF*~5{r9{L{ut!qz*xFY^OsqBdyd#3Vo*{&q}m#&zOKL)EplgApXG)OnmcpN)2Gy~m5E?lG-urEHO#DH>n z*o+UTmNdW3gUweFI4e-Ea|2=pAULTyTx#Z{GrCK)A>=R$!DWx8{7e0=mZuRSLS?5E zUzVa6@RiRFmLFF~1&tHdNSI}1K6Rg&*c+s1h{~kaW zOi366z%*sc6bG|}H3V<*e}P8AB2X5%p$=9OFzk9dn5KadQ?}`7tPXjZuLQ?DO(Pr@ zEUv3BKw*dA>i>B?hLr}n2A)}-!SR_JNZN4GtbL&UUC1ba?o=sja{-^O*u|<8|%9@vIa}2c7IU(>+QV zFvRgvnkrYnQ!kXqV3>#N8^5HTL@xV!Vw3Rs1iIET9nzK}0k9x`HnWsaY7R1I#L`8B zjv=a#zG_mJhPST3D-9<+>4W~d^(7o64)W0d?|Q}xaXw1c=jZiUyvX8khyK!Gg@|1t zJF=iitIF(5G`I~=N6nUTVom-I)7MO|a05K}a4%k&^6iHBtMQm5HjtyoH$5ao1r8bE zvZ?#DZYAhaco(@G>v@+s5I})PboN$!0EcgyKSDyops#FRz>oHjk}-&=uyM`AtvUt@V|ijnQ+hDD6H^1lxw@8b7qwy z@(H~CD-LImTIA@-kt_Pr17Bj}@?|lfD@$nAyup(IX2a;9v#&4aT|dg)|9Kk5)BFFs zWQGxgqg0KXeF8YWc9XU8o;p?Rj^TG$KN2iUhHmtaKEhV#{WDg@rI!M2aoM;i zyn6FG26DKsK(m4Z?LxxH-`IX^ofCM2d17I-k!*U|`H>VxA&}^KMk|@s!C%R7@$Bv7 z5oFabLT05bBoNN40f%bD9(GOw`}Bu^a=<_eqlpCwf?XQd+Kmfwd8dk3V%1nP5f_%L+onf`P@X zLanvOcu&ROj+)%h3tAYX##S2T|B73^hIg-coV2*j@tcdbSBEV`K>=(&#!@IU#%`&){l&cKNf)0F=G2b+1uPWG~4b7@WxLmMLXyD_CoDds^mVs6i#kj9VG-q zW}ib;ITUO7=9k`w5WC>w8&QFlS;@5&iR>04Rmw5gv1>>{;7i}_@<(8Lq6ug@-kkR) zqC%{00)x?_YmF<09a|dAwZp-zQ_XoA3}tlb%#6nPuEItha&VrmK=5Pe2n$dtDm;kv zXp;^{dS*ywi+#nCiAj6XZW=$>h_DDT3%Qx&t;)|3f$bdV3?az_Ey_@*PfP$(eF_Q`{41lGmG~2q{V{wj-yC&6<=JE= zA_lXoQIDh@hjk(f32K=QrkAiCJ}qmWZPRQX5v6EX)#Q*w4sw>=X4dFYSgB72M>Z`J zbg)bmvQbW?GQ(xmu#EcqM~X)%$a#BA>6asMBgvcTzmL1?m}P}CdYvTz`ehj{h?ALo9#*7qj>atW&t&&0tWkICYIAV>h0Y}s-kL$eF8v6}`spxNOlyP@tlfjtO2fH z!-(9j$nj>s@ANQ`EW4i9<=*TP`3Qhsi*1JVwZVa-tKivuMro2OgYp&^uf$2CC?k#w zzJ#u^uTrAby@RND5W6_)OZ1Tx*MT(X40I)iG_=qglaFFg>}|+*$hdpRW)w6!rs2c@O3G~Xi-`$O(I5ezla&j#1(TUInvDhl82(d>aqG_lBDXsfptQgoVf9ViVfh9SfEWb)9;7Obu7A8zzddfgqUl$(Gj( z48+QAJr^S&yWR0XIS~5~HWVEB8jPCb+t!;odwApT^E;bY4x7xN zRSRv`cfZE&MHz^;!%!lS>%Oj@DF*w&!7ck>Obl?72-cP}Z>fTpeb*A#8LlsY@3{PC zPwOq=8>1bw?QNl^55>on7*Y_7rU{#yk>DP-Wh7v@c|J&Lph0LO)B#hw6EZ!v8)fAe ziSC$l3^f>*3Z`Gcpj zjdCH6tin%hr6uj-5RL>+EbVd^?mUwf@+RGY&6s)gF@(o!gJMhSq@{A7B0DL337x2n#y#8q$9jH`v!0z{3Bi%vf3vBI zNr8(9SGnBxD>`3!p&KA&i_-z1h_q~C98|4w51dG4qO`-n`MJS&ZGh(Ui{${`rO`Y) z0QOKShsH7>9!{XH&hppt_~fpS;&y1cWE&81m7>35aRX(oh|Ky2g*^0{IpleqtIdbb zxQ%7KCUVnJ>snqJmIos*pyj9joz@PynMWbH)f2HKx0FUjVW(A=mbJHB2y7@S94G`k zStM>EgVBEts_cfN*x*}b7R{{Bw@9jwgE&l9aeKig-ksoa=fvxsqN-~s zZgS!+xgjp@TU3yPJ)h8Pt8+?}p`~v2XfoI`AIK!V_^Pc3W}rs8!>N zW%vchHe*4qX~)C@fU)3q^4H27Bvw-8%?ZQ zG14u4`KUdPrRTWjLd}-h| z6(bz)R6bgPe?)|{*b_)BCBQkBH54OF(Jd#a`P7)~5JyV!mio@zt^m{bZvq&7v5S0> zOcGThmvt>OdZ;(ywFD&wxGXy3PZN~4?jtLDubv>+0j3iyC-Yx;jS;!rR+CJw2p3uS z8Q4N&+&ux}IL!zW@4WTae@QX*+ttRBv3x&N+Rgp%cBic*M;?>$kw|B|C{zRAva>2`){A7( zD&YxUbJ9Fl)id7CJ7Uw3lsTyW8D9y<2$-(vmc{rNq6HnF|96)o!gsBJHxpnwuYH&OaS zEV&!=@9{ktUX2DI#eV^78y@uUX6qptxIiO5nPP_8NC&73n8R;n#Y%|gLnJ`}U&MBo zZqy|xnV;ptzOitosCX3;>H2LRvRQM*?CrJuOSU}`Cn3sXfo`6#M-3oBn@INQDF zBMqU=ibQ5ZZZ?6qw;`3KX>VwVSt{tqDAqFt;S3fd%J8c%X-h|{*T*Pf%$E6IPVdD@ z)i+#wZYVbg>_t%;Z_p0?!zF(_oIt8BD#IXPT+E1dlW>og#FIG8g9|$l#KRGPSCQ=# z;Mr9dTFBH^J{@Du?mrfDhz;nq;)O+NqJw8hnGw4b_$iHxd96NH>x0Wa^h#a5W(hoJz|luLSjib zM>Fp5tTNc_49_E*oU_)>r`Fi9j#G9Zb}F$7{APCEI(*A^UNd5BF){^p6%~!LTk0C+ zrL>w9Qgrc8^ffT!j_=?cU{PfT-d?R@qH&_5!w2FKxX9`0TjE`56E#8toYKv>rDnKo zy`7BTG25I0x7Zy=ABhKrCsLafZ~l6RG!gQ5z-I!WaG^}sP(6$K23;+0(~RU$KTD7Y z*QopXv!XQN3Pi`$=`?5)JvAq*(W{s7A;DNa8K;8v9t`7) zzUp==>(0W7EVubvYr^jk$W&fNJB?+FBYna*nDi$TnbS<)^>LX=kFcHK=_*V$uXkM` zU0G5c!jnm2Do=j!upz66x2H&sl%{V~Q0hgo2xJn?1iDICSUHVZPv7G9W(xZX78mx z?O0+Y`=Cid{evRnmH-NM1ktg`h*Og1oo^>DjCku~d@pTX~z0 zOc(J2D`~yTvp$4ji9MB#zWN;{UQs(*1?ycpD@4H~Z<*BzE>IlBkA{djw*{IR(R1Ap zcO-7(JY8sO*W)y&@DBaH;J&|>r+S(gykp3Ir7BCe89C*RAdfaH84?tQt)*cc3bFk( z_a1~6%!BhGh0DAZOZZ0lw|u=}K9v&P;DteR8;otMB9=nduqgKQTsu)KznyOh*6tw2 zIQlGtvF}z!3S(Ft^Fx)|n2rK=L;0wVC3?qn4wt-XcQ$yiI;B*h2SfTMaz;~WEG4cz z-22;fFN1PGkwQ>!?cF*J{ym~m!PNmUG<|Z&5Dr{j@wpucc#!~kDxwo1in=pl6I_Rf z<*!uTdpT_@+g3HIEHG=W>4#dzGg;ONVdG{Z!T!s{p7PQf5#eEBr+n1Z4P-|jj}$wk zg;gB5nZoS^4EOkPqI=KZz)m6a%2qAa_g^ z-uBzKr*c7q@DLpUf6^Fm7Qg>rws}?B=@5?U8Uh4nalThdRKkx7JQ;cj9!U)mF%u19 z=mz2W$0HcP%i@$rRi2!LF)3{B&lS8C)do5h+3U4gWxJH!*>0$b#mby~`L+!hF0eh8 zH#%1@0GlPc-Nh_8-FhLy4_{$unDR@-p+4lP0A{3SA|P>e@H(d~()kG9B)7ulI7|qA zzy(G&6nKv6Dt-+h2owZY0AT=I0DY_%W%Z}k2;wDBP+-6mR2WN%*T?SfZ`)yG*98@0 zlGxu)?EJ*d(BVBMeU;;KRabw7WH+WWPErrs6M~*TCJqPruNRAX7Avk3g)7J5&~A68 zzZm7~<2539-c?2+LQi*fHI8QCdrpd0o3Dm3sB;b3O_HPoGawLW-kseJtM3mlBc!% zuXlmdb%e>Jy8hQn4E@;Qe_5F0MQbV2F0y;F8ZJJqL}tA^tia5hJx$UFw`f~3`m|^p zZIPjSet?H;LlmcAq&)_L{KsB+ZgTs4nOk#C$mL1joS$bKPXjJD@)UD!YW^@I_eMkT zBj)a!Q0#0{(!0J+x-|B2u%Fn)duxV+i*%rpKo^{Fs$3!2!GMrKo<7>hRZ<29cRpe& zxyj3ks(hwBipx@r&#!+=c4!oYs(vV7MDNU$ok~NgrGu5NGHoHh1N`e@ww3}WA8Zkk z6fiioNj#FLBJ6T>t6X9+rT`@^N>%Dj6JWo)*^H14TFl4^Wc6AGaTI@ED!G9~0JZ|< z7X-gTh93cN#8pGOzq0GMned^*)HI|5PA&YTMb$Xkj#3Uv7yZ$U!}j38kkO1hZB?Dm zz&3zS->rdVE)oKadr?yFs?#&Q->!Yz6feqb%W`EW<`?O9v1WT0lNRa{#z`Qvf(?#| zH+_BR)|dwOuycc}VfJAPQUb}ytKt#f14nndApoW$A~hPf&Sf`duL5EnWtQ1?R)(HxotF1yb7%zh0=$e}fc2h1ZaLa-K=)5nWw_4>^ z+boGfJqFg=`ir8058arT)f;H5K$d8Kz79Y>+3*}{ZA{dNZqU_;w&xjSLoH}-#1h2m z=_HZb+iSRp*yBSuWxS2J|I0eJRa3LO5oLPhLs4Y2;u(MlSgg;|Nly3|W+}S1|4O~V2)`vcT5K|d48=RPj5}6)RUZ0UdwdoOy zE_AF)d=pPGTV?R@h}%eqM{MyF(*_G(T2rfy$K*#z%jjs}@z6?i^{RlM(@smNnOdfk zXP>Au^%!C!}kSQa1vsA9vA_`CcG|As!gU!Ki! z8?;(8+624L?WPP<$llZEOJ;jpq_ARMPm|3O99>zTlQ~I?YqUD2_=v{5woVW%Vp?#% zSvTew%hHgG_g;U9dR&FP^(H3Zhb8T}OcUsILcx=qCKtu*W55087Mna?iHY0v%0Q!< zyb`O+0^;&YWLeW849MHtyb`Mdm9I5>_V_tHA%TlR?C;9SBT-*sZ^zd8(Z<-U{S1A% zVlsC5>~YgF<5sb%pf{_NCla@oeA|qz#!WdqIg~7+5p4~bl{6T|D`<@tz8Oq;ydYg5 zw!2V4oGQH9YAW3Bwac{qJ0TtZzz)-bDw%2ouxnnCS8%f(MK$>uu(i=xn|7c_Hc`U_hx@}Naw8e8od+#MRubjs z$~q8z5Qwt#!kHO%-&-n4FJ8d!>ujfayPK=1a78KLW zi8&#I3aS=%baQ{%oD^cBLzW0CY3GGrfiL7c?JNl}dY>@qpET;$;(aSM4}P&5`VO-5 zYr(_LaeyKzB_3)2@8148ApE+@**ArO38dGb+Gs}Pf!82p{+Z(gqd}r$YIYrNWdQ4p zy}OL&A8*09$0}|?BHqdlN}ebJACLqEPcZuh*_&ra*C0ot-2AC=7!$JygisGs&6>>S zx*PN5x(r?hpzVJIB+dUL!gXOt7y{YL79@&!L?X$Q{dhV@s|F_$66oASLNcFSw$7S$ zO(e8FI0Gv2sWz4@=AMUesz+6e^I8@nMYDZ1z>b9oTrkaqFabNP%26iT$B6JCVTn*Z zp{OvmnW)hC3Rj{kARr}=&(klgb`o5P{}iQP__<-LWr+$pSkj{lbR(-Pc!XSg6D>H_ zjIP}n#DFkp21Q2mT?33(BF7XTs3!#~m}(>)DLV%fT2o8k`kEcs{pLo*;a=DB*!=6| z{9R*e5BSzgzK^%{=2xr7BG{1W!@kmBcJ-+24(FS(zSccV@!la$a#9@IjD9B>RFxX~ z^O+HIts1RQl8F{^4XMO~<4_WAesCBwzwxkYepF@L;VhmJbyEQtu|R{kXcQ28KAbUF z5c1N?KDm?-Qt{Oy_|#J$i_A*6leGL`tPu5`+}FGHv!jVf^3B^z?5bT(y%C0!2ujWv zWrw02b7X(mOZ9{VA~mb65Q@u+rN<_|Us)yHx110R(*cLnldxu76KG zle@x?Z`8LdgTm01tLDf?Hc!Di*(9L0n&d?NiL=5H_F4gMK5#Wb0@?&xUi7$yhi(S? z#DbH;;8#1xX!wy=4vDLl(uQuw8H=nt+M2u1krSv`gA5rDmuCP*R>Wf4w@ZwtZ7-ST zuXw%1SI?RjA99Krk7@HDlFN{^_X#O{0@*;agp{XYSbs@|DCb6~1fMO>Wz`z_um18c zh+r~}f?FmPYuhJsR8~MAax$kT#k(sxact3wZwzifeI)G1G=khKsrXl<1@QLoSOJd; z$o(|Rj~dry@?r-0_IKFgwc_HO{RWlilRNP_C8FmfOTcd)mK2LO1Z zlszp8JIJH(V$5ki zPG7D5`(2z_?q~%%TNh8UU8KERac8h4kmeMnA(T6nu%*k0L9->kO)UKNObt%`{g6w7 zk3=ydiCL;eRWeh(yY=SO&I;~UKXfW+L@;blPsR5f0?SnA4olzQx$J@1Kh&)vzal;(Z2#F`Pd+Dv}C3B~Hb+}-Vq^QD2&HE*IGXx@2`SwGmw#T?an_gN)Us~gZ zvl`5oq`yxKVF}ztc*i9kSyOh9RmRV=66zgf@V2#e*;I^k3PHurQcxF=}k@ z9oVc_rBKbKrW0>^)bpI!fX-AA(`Kw!-Vu~BHKQXKk4|?%)pu9 zrKvQdzbO-M=^ZSFDF)jril1H%v+7R|q&BiaMJU$zn{9ic*Mqc!+2t}{pu0&hQldAc z_}aqG?!wvf5n7_+^&+dGmqVz$o)}>53KbS;Z9=ry3FcFy21xGY0bK9;2RlfLRdL~DRP>NiniYt=Z)O2f zw#rf$ZtPn~4F^$x4JX(Sf;Aa^6M|$?ukKM;fvqOC=c+OJKM7U-5Ak%_1he2sP$pXj zVat(?&lyH*qJ|DHQhY1IzJ#bPK$5Oy;TiY+HOux4yc9_SD1NN~$79DyM5ez=Y2S#K z`_d!02U%X*JpUB!A`E636PWeJw=n5C1_njVDo3J*Z^O?|oCVuS$DBPJJ$|Hv`U-J~ z$LdGK?S-}B{tCH{?HW#;uFuwiU*LH*ZX;PN5gK0be-(0+K8h5VD8!7LT+B@kJX1D( z#nao3+FGDSiysttHuFRn=Q)i-paXoBDlU1xb7B4|l1j=8QtwrExKw41M_9&ZU>Nee zYb%swJDo629taXL>?w_w=HiT|#k3G8BkWdIlonIoDl(>bu#nkMf1yy&%4rV`DlFsY z!JShiID7dcm`V1dVOo<7(ixC8iPWnA?C&0+Rl3z1PPUkI5T44{ua`J~@ zZvV{15$7d5_`vnD9Fx%`hSRbL+GGicUWtzCXBw5y9ZHCNrj?-}TwCr(6xA=iT9{A< z+`cJ4p^&FklXRN0F_e{PrPQ0Gik$k8xNmuRyBKF^S9M%(=yv z@UOh$7=tJ)P>LbX%rxZ5_(Jq$K-VDd1La}ZWK#_rxuUCXbD3@{P)Y~;X~={n=~v9q)o&@0hq&=_Nb7 z3%+~}L4k^{fhrs9=z}K_!IGs>qbHdMc6&7^n?a zA54F$)JnCFJ`4EeACB;{G_|+mN!gix5*Jx?34TPf8dg*e=1~`SN%MC<_)~?Z^&i_t zCfK>vFrit98gVgWN0sjxsbhc`0)bJ!(Ep6@%a)rq89{{CyFSiFEN9L$V~`K%JXGS> zIne-n`xNaWhE&qzE9LUcqi*&m^kr@s($T_#)siE6PV`~gYQqg_a``B%o9gcN;GRdb zvY`_2_Ha-7z6UcjYY}8!D1u2ecPxE>?pMUucn^!0-&ijdDAoW^=&ytP zo|g1^au2(BM`v!|yQ500@nhYAvSb?QDv0A(xTJR^wII*Uv^Qn+iL3KS1l=lg*WwBb zJhlZavRl2AJ>3TtfOG#5dz`^tbA1xv5t3V=p_aPZ=|%=xCn=v$AOsU|5}_^6mmDd6 zCuGQPA;>R<;ZPm9*=2uDVt~Wa-au!2Nn`IB&-q_n!N*i_To%5l8BMHeotGlipv|qB zv)i$zpVD`S{Pl(u?RT8ais2$q1#O6R9)xgzN3aGR52nZ zS$_R%atjk4X|CjzX$^mynYBWoo5dZSxc#JSz}Q7k!|jPC(0#I}gc2Lw>SkFWbi9jg zvmpv1XclFq_N_YgT;;XK4aR}rv*X^b1t3Tj#p$krA%RzA- z#cPhih*P~&6FRYid6tcSr%HEfDuzW?;MFU4Y7R@rotl(RRAsP>O6;j2R;mn6bthvI zO6`pDo~KT{HZ7dW;1sT@3>KN9^|+tmTR5#tW$^#gN@ehq+@v!2TsTN&@EFoj89Wol zs0<$Z#8OlSe>sTC;JHBZ)_5tTH9J@TJ}H2-297@MCiVbu-D#d8(4#fcZxBGDl#bS* z_vUELQeB0iL7!LevBA*E1S;`s;!-f(%^{s?8~1&3@0ZH;%PFff=p6aP z;5Wic-$VdlF;HKg`-Rr|GrXCrffD>b(xk@-ZAoLg>VQuQhs{6P`j-sfqh`+bhC~KG zFal5Y$)TC%4c=$*5cGSTKJ6b5%rR`#fk?xWap(+tsKEI=y{ISU33K*g8`zPulS(%D zj|1;0;7Z+M`|GypMN}HxhqLA)ZD@oAYXqo`fT6n3A4Djk6285q|KyvF%Fi`i3;c=#tO!mElUcucpM<}RMRN? z{lzF!5UA;9G_!c5vhn-0LK>hO%2)-9Lrk2Fnln>ic~oj7IYWj8s*s493R;0sqZ%7b z(s&I?`%aRF%ghWQWL%nrQagx6mvkWAlim>t_F%lpjK}QH7Thgk1O>Vz1!^NY<}5qz zr$m;t)y#25JBl1)uP-xcTsL$**;ASjp&Tbu;!>9aPTuouEu%otjxC7h0foFURO=N@ z5&9rjFvQ_XMCcbiAA%3m=|$P~1w3D`GCwXgXa!|0qUAg42>HC}EQU#nvRQO=ElfX7 zkn~|HjJWiOa||_aol$KeoD2h+AGb=h_X2c%0cHX_OAc=k6-+R&Uy+dp-Xxb?`L(~1 zj@&v1P*)0Ob#jmptF5GQy}0?G@Wdn8*Pq#z z8^AbrxihU%@?XCD$_AUqn{>l!*iRVb%6nBAX7+Qyknl2U z<1sem?})mi>PHSAXFjGowES0_zL&cwxf=P*)f&7PXHWeOZ}OYMDNyL2naNjB7$eaJ q=Ai^|6Ai>o$;TIhM~|oVmKxb;pM8>sf2uwqO^wVw&1ui2RL7e4sqb`OI z?;Ymq*Yg96ZsiY3j+f)*csXhYS_3izKLZe-@_~hzKxoV*S;!DDnjaKOy{w-iDs{7A zQPUk=U9H3?TLqBbY^6Wxoo6vIECMvHt@>;fmbvY|0XN=TB8&}8*#iz4-Pse=q9 z6lBsYRt*y!i84xsu=o=DEcgs>-96jWy5R*Yej__5DP%eSlq)BU)8sYM2%nHeEMW&Ii(n*fl}^Mv z*(-=ng$em423tIP9-%aWOHkpG7|Jj~1@BaPDlrl|4v5Gmn@Gh`(%($Q5zse?(v%IB z)Jj&QFEh`IXRdfIsG64{ie6)`v`yX9DXbV}b9bt3=N9hthT(W?wO!zzDdFX7TMqjv z_nu7x*~joOq=H*^%)U$W@J;Fwcg%xfn zT^3`BQTgoBX>$S>!8IV)NKoN3@)?CBs8Hb`_|0FId}9ld54vZ>Z$6O(jRaevfqp** zclXUKBe%liqA+`*%5>awZM&sNxwX`C%lg=GReJRqgatw+T%+h=oMNqGEy~0)k;dlGERIgPz9FD>#)GbYaxI zrxp({o#Q{1`HPM1IoErH9@#~1f!hiTEWmJC3)^D!_p0)q_qgF07CaDQE8>7yuE-A_Kxq%4M~eKm*qulM2p|cbX(vy1`2-LI z?%B^)Hko&rZ#;k$S(rEizvDrvE&XlhD=Us+Vf%#Ijd2Itt(DBPUoTbWuJg60;*6 z9A)G{DWfoY?!A?A-&pTLQH8uNcv;VKzenk^R4U_i(Xoc!9U+P9cUBahKlm4&Lvndt zs5rtWGTQ2DaKea9Jh0}Pui0z-v%1?ZOCzK_u8i1$bBLI5fPsJj&J}<(Anstyfwzfg z+^AeELIo*zRk~+8d!I1F!GR`S4iAk(Ae5Dph63d0mXz51j64cS#5E6YRvpjyE(xEE z5NRBW?8s;?!t8g}u6exYKQ_uDu2w3=E1D_$__Zm0esV9J%EpyaIUdXY0F$cIm%RZB z;y`WVelQX~_{~P$ZkvVVOb$SkMg%`AT)t^TA zWZtP1mHvzG>W++8R#J6(TU_xOX#shz0g<3fS<*)oi|{=oHd%eN8A^-oAmj?+8?&m0 zYIS3DDSkHOgAv5$FT}3_L4Q{NR~^vo;93t_L=i8A!fMfhXEVxHC)>hGD)vJ?K4nHe zSbKOTWRB5nnE=GWgWfu!d#?J!k{*lsTjeT+SN3{9-;f`f>CxJm+wHfdZHyT|sUJ>Z z3{yjYC~MgY9}xyKlbzA;7#rHQUmvSBg1ionatK2L9# z5jPZ2X@I!6xNLMRZj7W0J!95_%$aB4O*PJdk$9!%f{VE}u*@}KAc;^#X>_X!E<^WXVN+UBwR-&b zjZft+zFsy{(z%9TgN(|5jgoU6EDxqQmtP<1v3OKz+}Zj5ps@Cc9_%$E8Nc6EJyHVg zypl@pPX6C??Fni%Pv~x0$>qhiU~0muS|nSx2RJVYt_r0hZ@~)9aOjkf6iRz=`J~{a zaXUqGw`94svJRQDSvE8>hQG4Gn;n(%fozq!shDM0ikM~!gdxK~zXv zo=1S65p#{C+U=7^^fq_Z^Dv6m|v&9}o3axf7h7r?k52O<@lqw6G8&#$YnT-%TeaWOO z;oF1(7^oDWl9B$xtY|7?PGZtE0Sx>m!+3KThO*Kl%zs_p7C+gGE9qnOpxV^V*hnMs4%Ht`l(LoyLNWU!q*S&Cz)fHX*8m_+Sjz&6!WD>b--bW!vNFs4@ z&6n3^jBpH{mGtJvMwb3)Eci_%P`Jd<2u%CWJy-r^PbK?82tZ6GD0p4uQYT}LzwNN<^UU7c!Mds|DJMp;s&wc*Z*;ugH;0|imqgw9Z|R`Dr;+-oP6 zHs??wmE9IIx+dcHmYQS0)=#cfjwmIClD@e0S3}C;Vh|S={OK6h3PS0yObiPz#}`g3G3QC^&b}xHM8{ z4IJWUKDj#_6=NSPD3YE{PbeO>#)*OqIRrQn0zb3rPvnbQK ztRVEb7P`J>SXmzlNAg*ZNpIVpi$ZSo5n$08wJr^ z!yBH^t7M$qk&O+;HYgn+0qOX_AHy+%vWgb9Yhm>b(uK&z<64k^mbffNG`yNDRtb+T zbnSF53HkF;?ZKipR<21+)2K#EV?o39C@d@-SX>!ly7bHJ=9irpTq}Q~43ioKsG7A| z)7&R?7CjUM_a(e%uDGae{P3zG|B`;u=@#w>JE0thr}8W~M0gOfm`Geu;BVOA8kJnn z)w*%D#eSBXA29scbXm&|)xb{G>`2yBDgqFo0FO!~*&H2jb|aT1-m|T~=QUgbN-A{+ zs%s#def2^1U~JhdGBs1)8G>Aw(^w~K{SF>esX|^E>2Fg8&M;YlG~*D(IMbI+l@T^2 z9UTXT>n~P1p~t6DvYX}@noe)cl2k+*o(z-c`8oe_r!%;i9V9?lNFt1bBtkK9K*hua zreflOX>h2xfB^9zF(F~pW7G_B;TWrHFFKteEEi92;FLJJnVlvMp1zQB3@k7T9R_b2 z2*Zjvxn@cc*Od+;#K~=rD*tqkU^F%)*9O<5lnIYI|B{}3eAmSop5r1!EF>HvASxUv zAmE@D`++C@%feOL?I9G%IyzZv06oiw42)Pz6NlGx=&Aji4Oft&mdf`A!BAw@!fNq< z`ZcZ^S3r+~U1OnvQU)+kXbvGwBVrl|Uiv2~E8g>2UKp53(Z_~QjMN@nmSO`$Io=pO zS>dg2TTS8^{2rT|=6*9}-#h@88Eg3gezd=WG&!T~AC-dUnULlr+~D#e z$;fJZBKSG#e-nq#H5&wikEp4{#HOQl_l7k&9T?I>H|9c}HxGTcioUZ-%OXtZCk@sZ zbJ?o56)hl*@U5s`z%Ju%{h{Vs}>k7v9W=G>aNQ>ApWua3KkS(!pH1u#% zsrRm}VNaK!%=7~|k>f$tX@&B2eE#jMZOggphUxpC z`ZBi!IH1=yt$m2&&9{ZLT;N zioO|#Pv|3U8gc^q)Xk;RE~H-KZ~!5s&ohZdn!9s!utVAOJSK8^OHbysrA(oqPgTLJ z?Q~RwJ9U^mbNBiP;K$nSPy{5XEodn$nRqk1D|9^6mqkW`89E2}v?8*|^Fc&Hp%8u1 zvl_ONnHw^EvRqf_UU+E?Q>`DMMUyVl{(|g(M5^XQfgC~pY0rBOo-R;Isl$C&#`J+Z zpS6Otjs+DVpo?WN7cAYk?Dw;_d@K-LO{&>ah7by018+2Fbj3ig9CiCB)_CWcsbybu zLmUm~*hk8xqoJUiNa6h_fA??1{ox&O`yXSO$Y_7!N31FM^H1bQJiDfhl#Kc~X<(g+ zq(r}E4rR*3pj3kWc|oQR@aJ@THQt zi82Zb@H6=@mG}FG5%@DmWuiV{ur-=tRqiFCr3o1Xx+^suh!o@ruAF3hLWjbKgUR|Z zHY0TbthXo7)EOKtJRMdPfX&ezs=8gr$p=3WEjo)45j6KCLrg;Z%nLoIZ4%={a?In% z*FQzh5ou^C7Sl~69^Zl-N%B*dUSepIgIOf~ln{L{8S0#g4a8NFTn!BB9j7QV5~=by z@{|=q8Y0>S!Eu$Y{$`a%8L~7m4v;IW?g3 z`D_KaZXfQG8rL_|8N-oe&m)yWdh9MkUl!jXjbjMLpmYbnN*QAPyWL<7@k^FJ?XZbqGY&ja~d)p?-_K_BS}`B#F86bDjpV|KLbXxM$2I9E)5Z6z{} zvR2^~pwa?VnjJP)?xWHM64i=UO7KjRi#78vim^coWa zQNPsKs#+yh&AGahLKBqFnngN=$vkZg>Jk09caB&Y|{k7Q+x+SDg17EB^M zL_9=d#^!Tq$#3M6JH0I%%@fTVbU78>-NzMXQi{x-^slb*!25wQjyWLk6#qx8s%6eG%Dt&vN|BtiG6k{`2{_Ntq}HvD$_vnyoshqu4 zfo6=X%*xgZUx8}^KLF7Gg7L(G?S8g)=D}zOe9a7cAC6$Kn=A6Ha4sEFBS*|j*P}zY-m1!;GxJ z2*|yXd8^g^R9(HDV6yCcSxR2q(xEdlQfQmHC0xq0(CPjc2y=)p?tO}(^YUM<%v08Y z6Z)$q-~8FjKS@e{82m|5fw3*qQZ8KnI*Yj$m7bnb7}pP{ zRmWCYfZTSI2LS7uhi!3WRyLu-jfEbbt`&A^xEfrkxtP9~)t2{AwQ!!EPx`@h5YtWp zV#rFFlUH0*TxB3aci98Juh1?#YHI5lkG7RQEV-;~%!kTtZcRj_`OV6ZCmNYfYw*W5 zBYdh?)(hpeKz5>nt&U}wQjS0R(EMV+C^ej5PI zEB2hWRCd;*#MLXqi!BcWiK>|Q1NDW_Lf@>MvSV9zd~#^5!dPX9WiF6_bOYUg2CLUU z5PwI8><`+_&+}#~LfFAx@rbOai`)C7uug~Li+C^bl^Q7%v9XKuNzf=2%FrzN7({X~ ztt49ql`ymfX0FJPKyzSRg1Tmqm7jUbB>PRqaQLaCK{ zM;+nd&GdK}-N83u^j$k4q>#oDtvpDJpBc#&8V)BDA=k!oC;_S0XpA%?R8~KG0uVJN zBOAK{k9lW{fyM%EUmZ9iMJg3Qb3m;X@)NsvIz_fea^+G1tjk*HqSN@NN3458!G^Q=b%g4Kw0uYPaUnf91AP1)955f;! zTZS056wm>M+^wB!k7fquM#Yr>aT?A`R5?%iE39EHY&FE0 z6Ya@~tZ~QKKBVzKlOWD8u4%3W^q(LxfX&19Zn2j^^?X-@@00t3&#JYC1dtlh*#dn8 z2CHtQu?NFQ+H8`VZ~@&1gy2=1jOO%ML2M8sZ?Y}?G3;joK5+e;lp8f@7Re-S_a~*? z`i!EFM2#gr^*=6hTkr^8_`MONX08LeSPu~@sCgsk*^zRGowhZ22^H7TufEzbD%!j- zPtl$bQGnx^yRCUaG6WMQTOxV!CcVu*FY59CjN|E67vb+KS4}E!-8PdnqV2;i_FFV+ z-^at4y!5|hgy2gk9=9xie8d!S9ZxIyK(;U^O`e9l8}&#K32z$3#V+-Bcz+k~Y6Qp; zYB(1`?%oA{~|GV9|2bfg~l9wjs;3i%9GW2 z^v5U#8#LQNYMl@Q3fh z7M=2vPWdC!01d}@CvkLZ@tq{>X|_3mp#E{w(mrlI`}a70KZx>OHchwCMP1CC3iNgA zx(vmV%RlN3E2r+ zE?e`DyeK!?>8QYXq~STMhXb1<*7A=sp@q=b%)bw=^EzVvW8uhAa1Y1=< z#y+EP)C&okR%rs-T$x{bU;*HR{w!z=M%g)*yjS-*Gffla6X}TkEw0n;!~or>wbMd! z>^n14vgd_33_}1Z0K|ZMOYN?!QTb|nzy?RWlTbChG0aut5rmfVJ~>Yg_k<`X`r0`R z!Ejr|J^pdcVe@e&_Y!z=Vn256!%3gGY&dRmx5W5;hs)BL_s8qiES#~XgKR-cI zD^~nW#7(9~eg<_+=mkaLaC1JwC`CYS>OeNBcMV`BejH%P=G17axkh~Y5o!X)1Jo~` zDtu0ADhc{@J*4lsXipIh6jSb3>qZp<=6G)X=B;P4SyV4m>I!72KZWrxqJNOS4MNP5AWBGCN&f z*KsS8*1}W9;38~NrpF`ExF$Yopsx}|UrJD3`9keK5C@5EhZ86xd>)W|HBM*-o#M%?)Bh zm{U{-OZWvnd;7;Ds)Q9styiQdJ*^wX`BEQs;7&A~#5!()&;n+Qkd2R+(rJT*q?YR* zW!*hgZ?^dd8fGywIcPUS_imBbn>gSq?WxQzth1FG;Lem6wBWOxIE=-RK{e9(kLb{v zbOKrZnGdo_7IC_oIkG{oa)gvXIKk6KphV&?Y0B>E~7l{fx08Hrase!m)%p+Dt#xXU|kBE zjy$~{a4HFCpx?2bFnv3-XZ@6`UL&_A2l`Qt(zeevWL~om*zb=Yy@XtR0#0`y)12~9 zGMemy6*7t`bk0FshZg;9gVQwCE1|g6S0x&zA6l+dfI`Tyw=_ZVe{!Tx} z4zazVt2|&h;v=~tPS7aFzBQ3CDap-rnW4ua&}dyj64dK@x%7m03j=l-f~)s8(s6sG9_QgMQ)p>0K*snr%r-3YRA=h6nWdfH%l0Ol&ZZg zi~l^e$y+G5r?qA0feE9j;~=wr56Th}WDmifb^j7r15v#5*>>-Cal53U*a2;Y@d9EB zmcO4d&#LW^P_l&bEvD*hNG(^oO3m>I+BaIGwy_s~(@><7n}-TPpn-7TyIHh|C+l}g zgPXofYuE8kHTEOReZ6K>Ofyr>1gj{aBtN6*ZDFT@pjj+SwK8+eI=qJBm)34dT<9F0 z6AsE?dESwNw+QT6dPgoja8Y1+y|Cb`es$R+vEWtve0wNQtZ~{S7Rtk>CLSV!_500Z6ThB_l^*C< zMsZriP*w_r%=l$^)|-~Zh6ga`>3VKVW;&$Iz1Fly`+36sljjOFf+~9778?R)a81%T zk_JD}X~-o%3QQdVOL~IoFGR*dP(=zOsSa_HU(a0~C{}F3eCS^E(}$5CIIf{=hp;jK z2i(_v0EUR^MN!?^s_g5rdj8)__|@$w8#(H1A*V(WB-i46h#2wr$FgP>^z`7GD@1cd zTM4pomb6&ea%fLcM!)b0-5ZlWPNtpz?da|ukh`2ZUlg1F+VP@Y$$gbo=D?J{XM z!AttRL&g`lremo(14wi@fbUJ2^Ui|JF=wWuP#v{j^I$Qjq4x?2strt4)Cy}6O#c5T ziT;J`6sNl&m;zw1q=tSBjhXaJ(!}7_K_{#9vrNyP=9Km5{-{F&9dJqs`2+E;Q;y$9 z+sv$06T#?RDqq;3Rl?f}g?y%ks1=9tp3rS85Pf)=)_6qO^r?d@W_vU#OQ;0yMODJS zN`~X@vEU4Yru;+p3)n7sIU}_owYh%I0=&+JTBwp8u?>?+C!d3_`LL+TIb~N3Q%d{F z?=M~U5+u@Ch&>_-AnVk!M=oxlZ7*X53mDfFFM3o-}0SDX^39%ctZ#q}A zGEMgB8Gx0CqN0fN@EMD-904A97CK2GB4S#wA>uR=kY#G$?(vQ5=Ict2EVe%s*s|h! zAX(TIpd<6g#RW}FRnRPAWzmQ% z&4GSg9&f#xS3V#Wb**P>ULzn8j~a3K=3NKqEt#-TRZ=Ch?^Qug=IkU#%^Qh5wbVGC zYeh=YQ30Xz^(Q;gAwC0_CW&@FR>b^J%qYf@c~hER1X<(XSz{C^9Mq2`Mf~1HX4va( zH5>1l#mDs=Q)mco@B+h75m=kDd`OAt2zFtg?Z{tBTl^kzk++C~_tD*2vg`wT@;hiO zIJfk{Za6Yu_`GCzC-xkcdEp|%U|^gJKigPuJ&h;!o5wa?UH-*TSG{=`dxTtgao5#k zS-_<^+rxxjh?<4kVQ&0uAVN~ND+9s}lT*XR{iqTi{wicK7E-hg^aj#gGGr91bzi8O zny+&Tw*qA)1M7rn15Qc<_g-W0;aKg1Blx!B4Q7PkhN*QO-0}o!0VA@Ua=4s{Ji9C~ zI9kQ3d69mo&Tl2jzC3=Bz}8_1trl=%&wdky9@SKb2VsgOb0i-gPgr!1=>jvgJ9&CU zH}@3F5z0qsts@zu6$d?d3{L_QuHAnIn1LuH0*Mt?HFPi(OWD+&QV^HXKDoKO9U9m9 z@C$hQ2kvC^9vm`JUD%}g*QOiq@YEkNHM6hcbC0k!2!V<;2g;u(mQBuHDNJ_b*-h&K>8ObzjaJpi+6|f)v?D&W87>!D&{i{CWU`wuB!#5Z`a@K*#DD zhrU~D56-)NTTt0h<*-|NY@-XBb0#Kp;>fLh>291Q(2kHLEkqClX4^*~r5mkD8^-Uf zTY`ZjPU&SNn4v)SoZ@NLFl!Tqs^MH%6J|}|;%NaTN&@+W0F%Uax(24==dK$nPpO8P z7~TI*{Cz{Xyp8%#`9r)?XQCIBu~D#=$`!GQIBF@Zo7|TO2Aywru5epAw$@ z^X_&zStFaCI>dPYu6s6-TTf#qLUQ-vE|@?YdG3l`@I?u!W4<)`UMvlGL7RXt@?xX3 z>*hOiorwn<6Jphr#toT=hT>Yu#h2%cc{1=t11*iYE{^LXH`~Xfk_5$#3%X3N&_6iQ z#N~QQBZge6vD3t(seZno`LG+xIvBtHq`quatb`O2(S$^Lb!wU6i)z@?E=Y|WxpnP` zu0c+8)#5gwUZqoD4qp*sqDiN?Je9mgWlhRfpWH^2lJwf|0y%X26zAF+hx?0-OgtiB zV>eyIJ)J(z_LoN^-=i!xSR(A?#hXL3m6?NESuqzx$*sIA_POEIW&61G_8Y|jU!;nk zh3$%giKrZZ@qcZ)5}8@3cvP6J`#1e^EUB7Ex~>Ze{C4V_!1emHWUq$aC{E{asTpZJ zu~4a;e1H$1La{K8Dz8cRH?-wFW`<)Ro#n%wUV#{_OYlo$*Nq#1#I5*noPh9Zu#G+D zu82s}ZfI+Nh7NK5(me_saH34vD5`F@k>yxWnz%_$U61o{MWv(IKlU|zuZGzILS0J= zGnQR6ZcAF~;tkbLWTlXBK&`c{clgs7rTX{GaHB;GfX9-ob3zLpVNZ&nyaJk(ni`6f za5*Hx`N?$RMtN6#d_FHMb1PTyW_qK^B-ztnY`tyuN4$&5wm<71EI}0+-XJS5`7$*5 ztl9Hjz!}tir9NXz6JxCFbzDAct$8L-a8&RRWsi&z7QDD*V4cE0bJ*9K&QXMULLNnn z^$$B{Wp2%G!)=8Ed-fSBZC;aUlVc((tD}l!KH$x_2CExF5Z&maE*vzBJ35t&ma~l8 zai1!weBNo4|Hm{y9ZfSF(Bm$dEy?nMKfLhmDuoEi>~~DZ)cFGJy}QOxfCJpu%VDES zsDkBl&0dQph3?9qJF^@$G3&{IWb1H|8*Q2gN54v#TBwsn53_Gdz?!OWCTR9Yq>IB- zFYoK!ldZGP3TGg9NRTsCmaYR06o)use6+|!AnWee=l}d{b>6-UwNgZz&A_^X5mHxb z!y$Xiy6rY7PHlo&aZZ-$eCaBF-*@Kh_T;uW;;~q<)$Co9R&9GPDMrWKh>}-By&Ng? zBT5p?*02nFc+9TrQDJPOx-J|9Lt=H*`OkbNn|stZUyIMu4FYaO_2NsO(ZkvluCM-W z?{Ux5gDbrlV@eViJxc>5JMeF#<@C>517i#J2cVI{7(6&MDwy)(TEf_9oP!FFE1KQg z<#hp7ohs<;E9|EJE~voNZmI)t)GFv^l_i{#VL2)xdIXCw6O>9-Z!RG#W4Gb$F_j*7 z=RttX8>N1ey*jmY4ti#OK29Vi-(#q*=@s_?uE;BBg=;m^cb|v^l7v)ssiNUc)UZWe zs&2|i*tGzToGelyej>jSJwW_GHxSLXdJBwv3ABK4)hz>_PPw<5SSP2_lXeVotyjBm zLbFEZyw@n=^b(ON>imAPhD) zNIE~tzjZ0`L#7inShrZk5h|Qhivg_Vx?OVQb3GeuoXMz-XP}J5maMH+gXB4I!T>*U zr!_A(^?lc|9J>B7eJ!@xi|ii@Rt|Kr_4iX8H0==hqnYXN&1+*iXud(BLr5upQ=h-$ zi)L5k%xao(5ai^Z8Py~o3Dtg$`+gE@+bu<}(nm(;(mumYqc`oT_C~chC%}xeC4ABj@Kx5whiXG%GNc= ze`i>Kui1k&Fd?0AWHQ^N8)M4RR978^r$9psD_-&l6?QcOc?=0<@v!}i2@W~rdxP}zK}d$ zIQ-AG*kG|hdN4hOdNZ1TEqrg%rm&u3BQD6-HLWV-Au9vbtJsz|=>54tuI3#zBM{8H zuQb^$szykTqYC_5ak7FXK>~yrStcwVxHDC$IX8fQ2P9VE9EP=_-KA4Pp0>-fK-foN z?FI7(sAD>~5a$zRRB^}%c8AEY4ukA)+k6DC0+h^;OB}woe&&my=7K^rIIamHugt1U;1jYJ1|B!G?UIdr3pE zkT87rudHHp&rwva>!vB2!g5!#uIwRKtm!uN2Ih2 zd~ku8Q)z4%itWimn#>cb5NIPnTeOhN9~u@o+_t>jCYAg&83lP)&B$4S2&qZuu_1!R zNZ6lC(ru*1uD@MfyXG`T(-7y%?lH}$5LHQoVJa9C=^PC;d+GIrUk)&IinNAsyuJEb-#yjYQAJ&GsDqMMQ#;X#;-pd9<{<@8OjS8oqvA6TCN zwjrB^(WgcUQ$LND0fz&eXIA@Vx=3G=j1~KExr~qJ$Jizm(sZII_6Kc%;gs=fW zs)9sF0Iph)D{P+$nLayH5*_gFjwZiJ>?qwSa77Be4Avl$=a0e1%4|zq{7mQa=Y=bM z$Pj_T)e^WRtIV-nhurDjatJXXyelW?){BeXk{Yg7Ezv9lfW+(qhGBnzu5At9!OUS$ zw_>4DRF=GotIZzSm3#=J5&$b$@?~Z%>eyaQKU|NWBRIZ%q|!XMNoR}v`YoF&FmV0Zw4|ImKBdVyX|zt$Ud-Ug8L`{Bw6{OZF(5<2FM zQqr$G>xxTy@T>=_&5edb1*ATuX{a!a+Jyy8ySqp4zts0g_~-~_5kKl4Fsj!@GD)W< z40r?ZU8X$rGZFQ~&DB4Hi6&2C?O>0Xd@v*JPy{7*ganxh+#-}N1&{s$X_~Oq>n=G~ zJGLe8>$qgXli7$U!TGotr-qI@+bleCcviW3AKEJo>Pz?VPR+Mu1ggkskKRdXNZca* z*%g(=pt~{IHV~4HKkI-u%*Y#6|B2*tvnb7d$0pmJcot$b0FXRt29jhG3i;Ls{g7`1 z&+~Z#(nun}+S7)gn29{bTQg`QA_kRT=u@W#xsKj)I=B?|S`HvB4M86J@a#3>0qzR% zLOk`eHr)%3*tqz5P?YtD?tbZFpDxl%#G)&&s5R!=0TSf};GYt(=}b$|AQH)QqV}6f zZRmgCiQ%qb$cM+5-Yl@T_X>))A{wzQlJ7eMO1jZ7tp$M9~ zwFF&X7Kz2FAIo2WanglHJWKdB&Ot^3tfUNQFc#o0)Kp1eK}xmBJin%^U`j>kBcU>1 z3gGfH{#@>IsT3qP@xzvv2Nj?j!l|#5g4_j8Q*~#O?s7|&hO)Ft_)}VAXpz*wX1bi7 zlfD-KIX6%bYV*+i4Bbf9Jo9AgS!tBk1Zxfu2Et?rjP+3}J&Kz?ismf?**1)Hoe^8z zt!y z36cG72NltvFIk~dM^y%epF7GuKQ_ij<1G}zLh?WZR1O9)maNV1A!|PR>z?r1aw7#~ zy3Ry_nbe5YlJ$sx}g5i8s+K@E?=tOxDl z@u@M^k*Gg9uO_De32QQS2&N<9t9OL6HqApxi} zd3GB6aPU#GWo>FKH1sq6^xaZvs2J0s9=A_huQoV=HH90f)CvRIXn-xS+R7B>odD@n ze9aAf=k;6zro<3g1iZn*z;#UU2nI$Wn+9Fy7wfTaea8hqNYRSbGyJvsUoQ zQhx@dg%-qGrbdD+M2YR#g*I$(^_iN{n?6AIM(M5naFBS7Mk64XpDb}r5P zid735Op#~)4D#A{dB$uf{QY63B78CRNXZzLSsS>Y@zr2jrf!-FVvPz_2KD9XZd zrRG2gYx2fiO!%6;1Ar<1!ua$dU1+JT)y<5yb5&7!5=_nka6<$eO6-O=AJjTHoC@{M zJ%2jdwEuJG<`{?E5vD8=4?v4!&?)@tJ191wX=B9`xfbpNkSt!WLv+pj?Q+bZ)>XrU&t#a1zy|cx zMUj{?38O%KAjeq8@2!YKX6BHOEsAQvcrZS*fYt+Xl-E9)FgRTyxFuyt_I*7t8rp56 zy7(fOel|^*2u^uUse9%WVI zw||GX3v(;6r=Q%Po}5(|r%Ql)5u*%$IcSN4?p`p*Vd`4NpVgOqT=G8)BTW2ra@1_$ z<>5`1!b;RMrp6HbXeSI8L$bX&%?NSr)H-OHQfdc^2@;Rqg$|S}7?23!z$`(q#oADd zIIa4ax3woYl*h*-Wb1IAgC(5?aH~LZ0T9)Mk2L~z9*=pd=!_V8=LA_|Gcd`=GoaF; z$w-K5i$IyE1c>_SWrP4YDWzzFLhF&`NG@T!qcZ&4WCZ5x!i>P(X#>dUhBwDI`UYPr z7*T6{t6OzV*VH8?B&vh6%{F9A$z@VW$mZU%^39H?-c86=u^B4_GPh?@+l0wnBzyri zmYtE-A25Sc`Yzy{@WA;JSFcSluNQ2Qh@x3B!O0HHlQ7unu@~FndIDvg>eYyj+cG`` z+8r-L_so4Mz17WF(E2$XY!&2KI>!GE)}&~-!o+R)n5Zye@x@-{&%z}v`(eowVO)(h zyHjmyd6W;9;8+Bk9gugpW=Pg`iiT)6Sm;=| zOsFviqN~gAqdEU!5wC*C87|_SJ=6T4NvjMkD|;Q%K78rrbfI3$-KV1jI#WQHq_=?{ zaxjKZrAi!N9csaz<_@u*YdFK_sZe%m9wl5YoT98mJZLCy1!VFQ+Lne(ehZUUdKYhC zv0}#O9P2r{>LdM$iUqH=BXAX$GtTm@tHGl# ztj+{NY#mXlw&?~@zNAF=P6|N4U-ytDMW97caUBt+={qk;T18g@QXH1kKSHUXNLxWb z)DkLyHEee?kjI1UiA&!@F3~Eb1ec~D&A&e93(F_L1& zyJF>1<-=8O{5}(^8NLr@%6{D=mW}c>=M)K3L$7sNu86c1K6waKy9XUl40&BQ)Y!p( z=)cY(q-xX!g2A*n>T{n%(v%heSx;3($nYAmH#CG(viGFb@Bz#2@Qc8U#T@J~Nl_t! z8C2&=WJd+(t&kqviw7u((Kw&}38UkOcs< zyiVuqQUg!hj9Kj{9-SjJ`OJH=Q_1n#%l}YPG68k)%p(RkDca60Z+iDn<$7?RI?KWbxXwQ9J54S`cUbW zDEo|hey69*2@baWW~Df+bR^Ldf1lzT?jZv5&}ZlWpQZrMM$Etq10g2o2{!6RR<(u6 zVH1I=I0th85YFgbuRxmWWBa0J#la0=6r?zK0Vky8X9->fFj3K%#=5skHE znNX}NHbCXWs^MJ9Iz=giBV|iMi6rF2BR7VkT9mC5T}H$7&K)r2fzld<63MU{N(&OW z1&!beTn(jEnk1gZ4!b&2A!nP;0bEz5HUncxc2mYZTBTKtYS0Ba!;43NaqJ2=2O)2C zFkH}&n}FP*wn1zZ!+=B=Z_T*?JHcNSAT>n~rkqBE#XMNkpk7GZA+p<)a0cyaF>nnI zT0pEE)C&7a?zA>q4jM!Ts#{-T4Lf7yzS99BLv1SsvYke`o!Cvy$G;uJ?h?#YsYEqB zx^pL9?cJU|K|XxNsYZ+d#=HNw7MpG@xM;0qnLZj7;P7DA*cp(j2swUd{7xdA*L*is zX+X5)Awzk-X#0gXG4nQB%=+#~>|j(YQxZ4tU9B{Bm8X*jICqE~4X8{oIizVeIIla3 zVoJ4vx`sOu{Qz{y%dd12Mhje!CLM^e6$!BSSjwYsY#P`6gT?myP461N z9UYbsUgZBBi^RrMRnPto3$(Uhfd<8$7aC((v-BSfY-HNN`AaHQ`KtLq?Sm*CGY@$cWSj8R&#%G6I^3hBg(3lSBI5;raV6dsnDt@ zI2C3%R!TN!>ZtUrKnM{Y56WLUM8BtwK-ivY0F|whdpme!an8<_wI<%3m~5{X=L{J> z@;bqoNr5ac9r6w($(2lOv}5A5fek820T)N*1hxE`E+l3oB0eNfLM*g!(=&h%-ilF) zLfWIX4i>9oybL3~d|c;pqSR}B##Qr}KvE=$V5ryd66KHUXCVoi=r#R9qMKf(x9BeI z?@1y8Ik@YCu9ye~6z*NNz>G?#G{q#AB0G_RE@xr6K>EO`CZt4(@US7JsZDGlI3<6a zvIn1IOQ(2W@C!9L2yL*Wgxru{HB~E0&Jdf(@@6^XcD9(E%XhE2ot;1xgY3&2Lo0}( zgzal)De_q=@iRMxQx+zt^kvny3}Ws?D^w3v?lXt&jwQqKa-6tI5oTRvc%hdtaN+av zU|i%(4J%NRi;9o?|$@t#*dJJ&p-%LfmASh2Y%pDhk?ST zU<&g^sCZI3lFYmSDNA#y&mL{Z&Q2*4jd0dqfb`)VBoxMmE2AYf{5TqJK6X0qefxL* zJHT9vX{h9_9k;QtLup-MI0WPT%;#0>b}shCN6GUZT^YT$P}3vxnCJ?-Id-1b038Zvr6SgNtUOxKyT$%cN|JeJUh-W0%yA2f^s9=_nN&)dd8Y_$-is zA}Y`ukixJo>~#@%Y}0@~J{=hWtrj*DZea=D{b0L*A|n!s3_tlb*3$VTB4*b3h(Td^ zQnoOia5KxZ*#&*qh19Uxk3JU*^mz zr&YBrfHAHFka)(<6boawy&~vX&oFKtOV%@Ke@SyNJ1T+C7Rj{)#8W9B%o{(UXqcsw zNGB(|*p~XB73lR%>yvwhnlN22|EIwpgyQ)!=}IqeB%$bc?O{ohb8ak!0wb{;``2Ws zk62F>i_M7>u*18O;_A5gugno$x{97Si#AmTPGxXYHo9V}9Xy?YNSG;uO*&o#OvNxc zd~gCVfS|!>Db~RId@pn3Ur=)1=y8PDis}feh7ns6o{xJ7Zgh+ZwrL&r>GIG0%m4gG zPp0k{l1TazWavmg45$IhYv2+q;BJZ=V#h(Ek}tbgWNkUp{Iz*)BrweKJI9*P)iuyA z$-fH?*cfAsF$NqR0U-e)0UI5v`q{p=Xn4%=`Q`S#nI__h6j)bh z9Vv05QX9^WmHaF~4=vO(ybDH~ws0EyS}&lHdtsZX4(q@J;;!TNKLXn&9_-4KkdU#R z>ml=09al<~>hf7!ipaLtM|OKrM!i{O7~c*RGKCNExXg#FUF=4R9J{CuN3^=FNAIU82=`pIRG~1! z-2O%xoRBNDuVru6z7!TVrh*P%_qgqk|4LyF&k%{LpN^M87vp5I+BabiZr8Eqxu}f1 za&vXt7H7x!+wLO0F_K${$ihAv+2_WNs3w~V!mf^`?-hWe5vM+5@Cm&&5-4@Q5~Da zy&5v%9LV}n-*ZDn!h->gZJb$$t|h-6?9VqP;$|Xa+JsEg7zc7(&c5t>hH{@do+d^E zg?BY!{=(+P9>5~2^XzHK{!-}3@88(o`xtc5eHVVtJdNdIWZb;6bDgh4D7C5Q^ssD8jJ{J`$eUg}r<@=4>QS$nuv35fLgy zO}FDf5uyo-#3DtIu2ACQy&?DX;uhH{5iUq~0^(=4fbZ6Q<>bay)&6WQ&q9{}6t1o# zr?vO%hJuF!RWn84i}_#6n$jk7Fl|U2NXV?Z%Rv!%UP~gN$?a+0!7VAye0Nc_X40(L|^&5 zuZ{ioy=)p9j=mI)uXSe0+*1D#1fPGw%)vmAFIOt2gcc{p~^+Z ztRRJc%I8>X24QW3ET658l=IIgR@LjVW>NRXgd zK$ghEfhg@hWFSKkjf|5Ch7$#Z!-k>3a1bB@7EvgLKnOww6ax{4j55Xm-T=EDUL+rI z{6Dlh%9^Ii5I@++F$(mq1FdtU?m}AhQ={u7P|zu)Ow)raNI>P~Ok^?*fs8LWab-E; zT@Xq(@Oq+FcdSB;RIteRWL0|CTeRWg$4Xt|D_PqW5*<4CUah?f5y{9uwQ9y+ee5&+ ztc+xCwRbA-aUcCK{HZaV?0HhZ$p2Tjp%vC|U$3UVz5iPQf9)&ekf|=h9dtFx5%)gR zi^ud|oZWLHkzaghFcHJa=DAgN{UYFawo_F%JRwQ-z+7Yf*%IF~yyVZSSHc7G1^y|C zIg!QF!fbw`Bf?QBh)mKJqkG#1N2bA^AfNvSu=E%Iuxy({e#JygaU8|Dk<-Im1`d$5>? zm%-53Awo>xb|r|VGdj2qbqPsBmvzgiluM=;+yxfY(UBB{nj#7JEVqSqDtVVBIZBh$ zmpR0`=@A&c7tqA@tBocr0l@@-d=Nf|222|5$> zDbogI3_ozwUWxN&7hXfP13EYtgsT%~ou2+20G2(w2_bxidW*YUYkl6tlJhz^G_6uJ zTKdNG6gisq1+AUncCrv#%BK+Fj;M-MyXP=51Ch{UF`XC7$W=s%xi}2~6E)Pk$ZCsP z*6}A2g~*nW_Dq~wy6JBhxKmEyq>Xd-qGD9&OdT`uYZiF=iowbW{q#!k7Ab|!HSdsR z5ovqpwsUvassY5Ju~4bZb3#}bgJassH)PN`v0u!I;?;)HX?CIiH*omqQe(Q5*Ey<@ z!9tR{_ghS?!xvQNAkRUN*kO~ud1pXO<7zdzi_*q~K# zW&+@ew%X}BzsV(gHr6EFsh)HSwbtQ3rt#{)_q?J>gxDm&7@sNLk)}(oq~!IXz%}43 z|B8vN7zRAB{%>tDiyN9;e>9%NyOEKn?(XCNzdhRS^O#WQcD{mcdo4zymjerb^_3e6dq9# zql|A95uPNb#R<)*cBm^^KsaxqEUy)-s5Kq*GYkQzgP>cz9qHy$9CT0gX1tz;qROr2 zI-*jU;k>VHs>K=CF^kN9wwxY%m-WUzEfI7#;WP;dM_7kCp%d!X zj?sXax@n`#q3NgrJxr@@;0u;5Rl}ljPEYT<*Br~nvqx#@&WJPL>UcKHGHwkh+}O1` zl@V<kP8;siaq6Lh$C)o;DaipH6<=+W!wzc)%3LCg91R!GaxLCfpR zspDaKCUH}Ub=%Y@W2fZ?9Llw}VdsunV^{ml>_qRi~Be?2xKWMr5G@lUHd8L!-1Tr{fNA}VbGjQGp@B2iA%Q_ zcX<816@5JK3tce^W4*XO-&U#NI8j0dl}e)r)$xo_<4aGdgdhpn1zxow77<)^Dr`x1 zC!c#KE&03Yn-Hf|b+&TUZz~0Y9~8%t&L|&LnB%rJM|PX+>-v#Ju9$wt!d9X(y5jxL z+K#Ir8lM7>R#Oxk8d(_Ff*_~_#(^`y0r2pH0-H@|;$RXltUWHi4%!hVMR$bieq(HR zjDy+5JAjw2=Nb6Gnh0C~sb2sZ6(samPhovzJDz%%V?j3hWx_I&ftwTv0E-No`)@Z< zV~o;;VGmsQq(TM{UF)K8ztyBA24}z~CAE=>*#tej55mj{#ME0homRveXp zNzaI>oPK3#bPk;plLjcBXw?JktoY@&s{C!az^RRCAbW@-6j|NAO(LUyhw`Qp^*&@U zXNFQ25nP%9MJgN>!{%K8fhUOsT(fnVIzZ>daJWr2I+t!&)ZKc*G221Z6<7l#4a|5( z<`I0HpZZg!2Aw(E^Zl2RnWDLn zdEW+}W7Q|eyLUL#?Z-lPOhDEQr8Rdi7x5&DiQG4F|448E`fVo2!Pw8ne(O6oCuvTaemhu79A3)XAGq>3qg09Nq)PQwi)8OE9#7u z7~mIClh^pVjYxKY8ARHyYpa+u_BoZ^;z;Gy&0>u&gZw-uF?-2SkLGkJ8DQ*CyXraX z6_!(m8zc3_R0EG1G^{o%=-Lu{vGvn_m|n5EmR6*0!eWup;FgSLqQ&KzVnS9AwQqdg z`OUC@$0!u*Cn2DP@4-W~RvB7-gG*vM2gA{&tpj8V@b2IT`smm*zNzE}J2vW&V>e7D zn=*mdeGa}&q(ER1sR&c16!sSpzI9xF?Fp$6*N=zB$mmV60y&;%zZ1=Q^&-Y^6zbyr zF7pwkR@r_699ph8=7e#@dj3Xv%y`BiJh+I`#_u4n<+X-cY=!1*=??X~a)gO0S(=r^RA!N7NP8$2654tYD$zr|mncO}ud2@};MI3)Ep+&1gENF} z3JAO>w5zfSBFBB(G%vXM%We-f9C3%gS6T;@1=ok2zdzp|1L{C6rRyFEh9$kSr`{VA z>WKBKNbncr71Iu6?*FPcxUk=5+;h^GmYT`ur$6S&eIc_frst36h<|Ob5TKz{VFvP; zgGZHU4b%)XX>fn?Yxs(Zw#Z?v>7e)T8kvI%*1lyc#sD@xI4K*dO<2CsqXahiV?(3B z(;$chpJug2twiM60b&Jn5F|xJ8Q{!1qcyXutPs6kPcDq^V*!q%hWd1}Xt-dZ*e$Go zmYH?u6~+j8!($GvijC#;VV^8?f(+|m!!N-&>amziR}u=3f+(a-2ZZOw7U`<}3@xQ= z9^H37Q6c_B>8z&u{^ z7}N)!J491u`BTLl{QdgzM<4&`Jqv!GU!f^X6VU_JZzq@X=I(rSEj9+WaHLzTd`UG& zXw68N3hNW@0|#nVA1W>Pp2?Yz;y6(bX`B>pY49@FR)#&StG)${!z=g%Hx)$@^EQKA zK)*VQk*n6X`A~s#J`g6J)dNWiNx5gTfAbq7Xx2zfSezbLc`CpU@|%(Hnmn+KeWugzt!w1TkS z#7OWz!f9cu_4x&1@pz(tFtJeiUKOzqd`&M5T3Eo3>MUDAa;mchx%JD(`=I4+Pi%MhPb(cngsY*$!*Nsh zx^(Pt<1!Dy(7nO%x!Ew!tw4@8fjp)4h^o~H{fc5CM7%v@-FyV`5hHMm*TWQ+*-Xk| zkbCNtu5n<_VPw#bB@wWT7-LtKV!(kj>js7d8~QftdToll@G62o|E4ikZ-CBwU2*=$ zcQ5q}QZ-JGb`|GTc*y4R`;LmqD}zvM9wr4Hfmg3trd%R=R4_0(j4#X~2cEnf@jvIz zR-_)fTnhg`urEmI^_sk}HLg`ah*(OinmzWFLJ5_t|NOHdbbevz!E{K=8EqQyGO9$n@op)=0cuzut)<^LPiYF6pcB9EDG@+aU1!H zn+D1&UvH|XkpjT)U*b{80Xi=2`P`VH_lW|ojo=}U5(P9&9UqQJcO6#{BEq*B5S)fO znO&Zp(R%KnHvak`6~1)_VMR*ex9tqg8_Ra?o20%as2mGA35v&J$Vi;s=1BGuOBd#d z`{S-|CO7CQgsVw1yLBfRiLhc9+`adC2>kO=s=6h2HE5NrPXYcn;Q?~pXv-F(#fn&Qx@V+2r zE~IoBl%ZamN4)6(kD_qtOEqg*6)Z1MC)s8wUZ3c==Gc;ku!@8X(=QD_DQTR2*G1>D zAxYuww8Y{i@Zm7OZq`}&cJ{>mfVv36HlOp6W*z6M7dxrBIAs9R2bDN1f^c{&PkN^?h<= zg+PLyPU^WNN)(u(CHJ5kXC49>AyBUWAZt~<>946kfb>*pj+4>Ca~VBcGl>i?|Bxa& zC7E{@i-x*mABy68Xlt!Yqw`>MzS-fJDN0&4I#O(zTejXss+lhy?dZM2W!7h>yfFgn zk$V9M%kUKj7H}WUP1TTT4#d;F)^eqiluMrXDYbb#OE-xx!u4=kh)t6}LnwgP)MWt2 zcAGWv_y*%kVtkL!b`mbI5j~L|kR%cMNvI(6CAPi7Q3v!i^REYWGd(t$9`h>SGdNDf zHGW${=a zQL37(vi!hYm9}4U`5J=y^vd7nv7HA3+}KmMya;9m{78xk6e zgA7$`h+9J=;rU0?gUfyGgM{<9+oSl@NFh0C5kNyWJf;|MU4eH1Acxs0!dEap9tesS zDPbsUmqbWO%W1Bl#O5?iA9^^)l(*Ex^>>P?)cdUGVB>q~KJ|#Xrt)jKT((+RygCUM z)O=1BLn(BMs-!SY=EBXYAFe|cDh7Bg4uo41&|&MN>TEhX&v+Y|q_aw31kmt{P+4QU zih5k*Lc!Rbgo6{mo4Xc@A1)vy>QM|73(2N&X&NAo+pDsYef(tHp4sBdinz| zV_O^Q>lVZMAqxuA27oN1q=JK~B*q7I5xZy~;aZ@94}$De=uHeT>di}0U?y>tVM5Qb z{f(Cc>c7oKGPHgXo4sLf5QiB>3|zeJ0vys2zw@9@%#PDcOl3esSkuB?Z(HOaLquW> z*@l`l)xdX3uL)3_$MtAS6Y9F=LpF)?2dS+qM_=*7rMoebP~2yT^JLJsx!;)-^S@jl)P<$Z55YKnW9g+o~|8S`k%fG>`g#%B3XV8 zf#-6={qD1g$gMYyS87s!;cf&K)EVGCwv#t1?@#1R#5{$Gg2j-^vPBM+iu6Q+%l!*S zC+~V|r@2x9+0Ibj=#a3fN2w2h%y||^2%Kq04MU$E4&>fPL<&Pn&8D)w=Bzv=8Ea$k zw^DSTvvedO;3-;z87hU3`=Pq?%5osg+8d$KEur}}k7O#Jr+A4mP_V)?;@TI6s$qoA zK^|;i>mGmHrm>cwv~6R;e@k>yrG@|Tt`a1a63i6u6SsfxlG^k$M&lOnFTf?{jiXfL z9g2wwf0cR`L3?x@h6ds)ogy-GKNhH+S+Loy5buFD9g-NcS^jTXgIW>F*dWWEhx5uN zW8=eofy@0v5H~!0nVy=M_xoo(ypVpW8Ot^HC5}CQT_l!!3j&62O5nX`ab=g%^QhfWg3-fO3 zBck?R0&Z(fWn-<mDeTku{S|2WX=HHC@OnHI!w+PCy)aM+BAD{OK@2}UwWZmfc1t$x%Z$lgXarEX2_H^~dyJ(eWf;MEAzzh)m>vqDs0-m>uS_y;(&HTkU=u zNMHcrqX^mG`tG&9GzBI7OVlAI{%0gb3k;qGcP+vDT~ly9N~$|R9qrq zhj^xh9@wpRLjI)=j^DQsn8z+a@{iNlGr?!GXoSb8uqTL@j` zY9$%xD5{{v^{c18krVuS`r2Gx`7-F1fT#+fLzb4uJdR_$N#__kQSIcWSxPs0TXOP? z%>m`7ZmNLcar4>tE^(RWyeX%>QHewVfh{gYh>-zyAS6&8XwoqhIZXvgvuQisPXFgV zUO!S}4q$hdLYN9TZ}*#aq|hrvFFQ-4tv{FQ>icA!D6 zHbzdTWMqaz=OUj9LE#Ctea?B;<};)03|G#QdYnHMFO9pGpyk6jp;`L~`f0S*y;5s) zD;W0KcneqW8~(95P!ay>-%N?w)ohZQopW+5o1Rv9Lv)hX7=%)`viD9A8GJV||- zKo>$^8=CB>U<*Q61X{i>smQSa+>vgAkfar^2AhiA`hwBp#O}64&Jq?hO8Cm>><~!F zYb5)!Il4Y^F>wuAlkfj7DR-P{hIx00H05+kMcs4WOTf*UB@vCvkBYx@_mZ`dM_^ZA z9@BfAq`xw9=pjmjNMA59g2_14`e zbtb}n-D1Vs2iTpfpENM&Pd=#x3#exV2tCq)aQ~21P?jn{N;*sJN`gpouQ0sOBzk^v z$EhwfHH%1JjXf15UwV(#y$|$vB?h5&Gum$5+>y&q%F8I`RYu;^M<)ljIoDa_*`ehN zhjiaA9!R1ucdb00wvW1ry+65oZIU8RlMraEg%`e-npAX3Qjql5=wW2Pb;(vi8Gb2n z6~Fz=X5kWDcFtDP2>8wkeNbw=5v{SdiZU3?ns04(dT9O8>M{Yp4Wkw*`@;72f2Fge zA5-(S8vD4<-oRc`@HAz6fcDX- zjKK_Oyo#_6eZ!+cdC3OEWd^-VND)P`2C@j!I1`kF@kq1>6`s76X{1ma+_>W_moW2S zogNgzPz4kh0upF}yWjf#O)qV~oo{Z@`1zs^E2mgd$qxsN_ro z=!F*0+^ia9d`2=ERU*i>ht*iZ%u-uU?;*qsZQ*i66D&*b5(0 zv{S*b+lmS!>e-%!VkboAqZeR4|C|wFq<_L1p zu1Xq&q@!esv>jW*g{TR;B0A3Jjcb_6Iv5-yNyqkFLL#)ezw4^FXKwsw4*GtvEf!rX zN^KhC+$Sk&z(0VKcw%Na6qTMAVOoF6lYJ%?KJyDDSu;g`n=7+j8bDBR;-klS|0u74 zTSFS62|}Hd&Eo!A_Wu|VRCh<8Sr~r@q zM5vymmAkcVI?So_)gww6p`N`AmmV1wJArvyAeQ3C>>P|w=FZNd-G>~F5YUv8i)XQo zhr#55V6eXK<<_mtOjro~@fN*-U}8~UrtBUyVk%odWULK2MA^Q1*==DZX{-| zZgH8hhI9pI7MHKvq>DtiLAbUF31)x{oQW2^jRvCX6e=dmO{x0s5NtJFz-C#2=yXtt zzXG}iG1?Qrf~$Y7uxK(tFC0)&It0Xo($IRVZ3g!;h8(`+#F7-Y&fC-j*yC?=F(f{1 z2)JTq7NvNDlylx05B0&78$`>u$NR=2hh=MWtTjsLAl7+bI|IEQjE^YX>%JR_(+USP zXoykk8bNH^f_v!sp+@Uy?C!{BN`m^QLyHE26QDEo8Y-LnrGh00g;^Bqj*G^ta?R#T zPzn>rN;?E%P&GRMD&rs40&X^c~5 zU4^+8m$3r|yk$F6HD&;!uSvexd9TAMc`k6}^iq^UnTx^t3T%r$L`db<7eEXALtw`e zfxDBx!W5B`_h3aNydp9N!#FsuXoM_#-_bET5mdw%m#<+~kIh*)vV{;V(D9P9AukF1 zm)rj;tu>IqXkLY4H9%Ue^($`}-HBe*3GaX;s$hZ5&K!XI|B(22i<2g$N~lzZb+2-P zBX6bc(S>d~?WdH(8>ppd-@cEVZ(li;Do9ez7myE^N$=U47Et4P|KGmOr-3U4uZxD+ z;AK{D4oQ2=32&?+3rHA&T*2FFKSA37(f=3Yxz8kW^}c+b3>H+Jzul&FO5}_z+KN;Y z7inalwt;j8cWx1H{6HEUJ4&l!R@JNF%`pIbovoD#3&NQKPSZdJ>jN-+{*8iMNk*NU(`~8>yy|yxx7J}56}7e&Ia+sM`kgd+VXPI+O4|DLJ4pL zsUJVi9+$08_`L;nAQ zWb_SCe{v@gfceNrJWPVvdtdCF!Ei=gXgy*EG75>hym*3KC**b~BYNpBoCq^?DqVQ# zv=n~70~wkAfoFq)v`JgNFj>2rY;0|eo0|uefUAkdIGbSc1Bn9xF{Ztf43lV;bergU z4l<(f{;(nlmoX)5AA&Y)ujvZSDsk4d)bM32-VnQzj6r^Q)ZrCi*&%+3#4QwE;cOi$ zZ6OS!+%BC!HbPOF$n`@YxIE>c1oP35yvBgj8|z2cmBEUt8y)R^5X3K$;!hPlGh9B~ ziSHI}Bk1f165>5eiD%0d*`|d__GGE$aADBa;5(n3!BON@8b6(-lWNpsu8KdcGTLB1 z$3}C@Q(K%f1o~WJm)Kl7EbW32g3`3y4ya|U=X9~q5PIgsI#TA!M|nE1)8k{FF|;2@ zrxiD0?>UT4<;j)FJ`Ez#5B2+45eaT>i-Qp{zq7nHqh(3;HYnA0ea(Cp+5GodmuNI$ zDB_k8!ZQ3SuxQ+eh+*Mr%bfJ-f=L4O>_1SOrm_VCj0HQ&AAOMsX4)yT0=@Mi`pBq| zWKgwD`=Ahkc78O|UN-0mYZJ5WmqH&oRBd|Mw~ao8Z_u3g@2RXiRE(sgnWrX9OHTq? z!f{+*HvD#8P?kyE>USwg0@D{djHgq=xC;Z%ruX;?NkJ9btarB>t+(b{Zz?IerGWF1 zcsl@q=*uFee2!A21lDY{Ou^-_45G4h{=uV5X*nbZc;@~qr7*C3KIn-Iwm-vc6ZkBj zW|j+3q+6m4^o;|_)!Bn0%w>Y6Q|=IjQvUI;Ojv22MM zk8*djrr@ugz*94^E8ffSmRapfv*Ay}0Aspx0OM*xq7g|h9LP|G=RFmJ>awKK>#8T8 z?`use#qX=IeOm7U*w`H;@uCYC4sN9`=_p@r``&6Jdt#I?TQaJV6K zpb9jP0=Su?R*wzuTiJGlw_NM3IKYQ1KIc~ssE2VsyaTe-72eTTHC>>aJ&$gJB(W1( zr*U_A>B$7AWilzpX2g!mz<@O#0KzX(xoV8Y*!YO@0dj|}sN_DJ%%j#b`7Un-U2}cd zUk(u*w)buC3JDbQ-8}D&*T}9saXs35!%29Wv!&Cj5OTv3^gTJvW5K;R=x4W=tn_mN zGkBSTlZhLBn zYKyWiJq_K##`pp&t+Jugs^|5oATjZY-o_g7ezXF_7_E-xKILOY{gTLcB7RLhYCc zFWGQM4La`kvd1pqux+ESMbGU_)8iXFbQq z(na_4jRVwnyG_c)>^IbhL*a~<$6QTV?={May zJl}0)5~B~Od~$5*sOunHI9V3>gmc|+iJ>++dXY?{R z#wPqv68IbCISl1>&ItJ@-cGs8xmK_?C?)1v-QBBe?Qn>8^M7_zbz_dy(G)L0mYWB( z8eSNFzK)EgGLR^<)bHq2w%C757=fw~fFS~+5&)GX8a~9qT3ct{%hGqy0lwJQf$WQb z2EL${`jO9O_Gg@e_`teXzV3DiZ^2a*n!Q60xsX$RlC0JYsnQGM1Ej4l6>5vrmOmW= z8j8!`qw7N0xD{clU!|;OUu~bf&l3MCImvo=m0|c5dCQb8l3@nRiR?s`lO&$LJ`y?+ zbfuis{`t0sK8vnX8=9O)aGorq4)lk*udJI~!JkA>`sdKanqO#$3#?uAKD2MbK-?na zCe5I(+16z=CFVsRZG;}zJYGpI4&hSCjz%uzQz%1w^Nbhx5fnrBR+&)DGmbVUgd7Vh zoOCrGTTY-q_;xM7RfU!Wa60GrtVn!P=vF;T;b-ABav11hIEe9)w1cuZ*Y1D|p>gmZ z=E1&cA6&c>V7@2dC|hC^{gR}PAL~VwVquTAGW#qRHm8Q(h4U8zc5GQZ8e3}OyHqg} z+6+APe7;?|fj%}%cGf&t#gsU_H8{0H0AA7gRrUe6;Y!H*MmybzhOvO(Z+3OePvVH$ zJzfwE7!qy<12PPWGvO4f!Tn3F0M>3=73gm}4hwg0jd|~rxE)$?wvvnr%7%#qk073) z#PpbFmV2u-Khpx=8!41Bg{HxGTvDN27{6?h`T=0bcVQkcyP&<`L`fmaNI2%AkDi&0 zpq&O=lbB{QUuevgw23R1%OswkpUNW4Z$2fcq^Q=e6uL?c6Jke`>#z_Wk*$%dFczDA zm9MoXUS1T9TV#S3qG56J8N;Fq-hWHT(lyM(K@jk|km@Y;F9;xjNwQ|nb06cJYUBNZ zQKDE(xkaYYZ0r#JvgK1o8Jj9bwfY6E%Gb1z1*~M0%=K&TS8X)vl&(3j1@h*SC4r8F z6IhI^*JLsw4Q%krIZjf-Rd$(2o;x%C7G#~#?^kHWT)Xo@&B(FoA&AYg$MKFmH!r5oQG-~P^C`R78Bj1uW4gk7m z^k392{%IEhHF$=BnqkgCH&GJE7FwoRPj%x9CE$g6y4HeM$Oc|fw~)WKqBuEJ5zQb2 zJ2L%Ha*Xc%CK1QvKO+l-wTHHd&YXnxG>v4^rL1^R5(!DpM~ep_c>(e=&@{wmt@G5x z&G{>q28vXz(npd*6kP$jL!1jH0F#>oP|U*agf}G>rLu5`0H7UvyH#dXnLydA)&Qi4 z{{R2~Py(v}wg9UD85I-kuQr{esRuEorm2TX=b^gMsfjeKQH(N*FwY6<)X;DPh;lwp z#X@~8=i$sy7|veM=f&;M*u-@}rM!~g5(rq@QC)Mxl&u-A(d}vqHD{>lHG=)Ks94yAYVD~`nf8gxH*vOq zqaHw#7E}F98B_0cS0)lo64R6!=)H_aIZW1(w_$wGVam4OVBoc>e4wypQGhTUAR0C- z0jy39n8j5H4eF|iE9S)UUF)rC@mlOt8PJ^}1H*y>K?kua4Kz|;GiyI421D=WBu3Sw zPP}d({{rE9{E7X3pmF~oe7D4>PEV5dLU|nL^WKEo5(|{`)Bmk1b2U?rX8S$Y^-iN6 zTr1@Obs4RVM#OHaRk|9^<8wXNW~#o=rl;k8w6AZZIm26{7b!;VU5-tKsIPB~YP8h{D>WYEv>i2Y6zZ zBx$OH7sAX$?WWK%nv}5cy?B%rMcG=N6)Lt;im2>V-7T-%PEb&?g++%=8Fg|Sy8=ek zdejFv?A6Ji8^D>XQ;?smJrd0O7ZuuIM!JJMZT>h`s z(#HF>`QOBQN3Sk3eS(D`nP7#l8AAhxMZ>1$&-)^h#R89etkipiM>GhM08=mk031M6 zDw)V)!H7&$l^@6+&Ic-{2tV0p5gIfZP)=ig1Z9v}!{{N8Fs?k^3=omX@o2PsdhgaX zOdx^^`j*Xe?AJqF6~e$ba9P_BgqL&&0*KtM#`Y)H)B}rjFE{I+d&8Z=_PZsv+K+q- zLvN;a`6jF^d>ilMt}IH%J9s479K z7m)?aUR(-){4(2R14SL8OBq|=9-xu#xRls zm;Nu+#Ro4IiY*j?a06YtzOXoR=tJETD&X6LKVvOc=q_Ys$JMBl8Uso`BTRYC;(4?wAfS3{4Wd?fqSiwnA&>G%gH>aUWdkLXh^Kt0Ms|GAE# zm%S^`K3AD4l`{DmasudRbju^v$Qqh;Qz_(-jb^5SK6-34%qU+Tb?74L3zT#lV@eRnB<#S1zi#Ywu@~^Y36Sffd`}lP?Nhp5t-|Z zCEe@nTeXUPj`S5gg?d+A_~+y=I%J-K8lV=kzk zT)<8SB~T0@pIo51N#FN_DZ}%NuSGd~ObnK4?P*U_lpxh5F?hc_ouG(1+0sVgw~4fu z!a?Q}tn94Pn<|7=Ih0PnZ9>p5F8oe9)hP)!zg>uxs6p|yCj$3yaLA+=;)r)_iAMdK z$I+Xipg%i;(O?trNjsxR9qi-rA}Rm@5h_v4qJRfVLV~+(IFhkAYgguapm^h36TB%1 zL$829V+P#ER2!PBXeMSD*V9mieu4xN86rX%P$y*2C@i>55}gW;4OZ=uVOt_i7!(V@ zrWghp8A)WdM1ei#%F|1;V&vzg02Umj+2XF|y`HT$lTPAfmEH7R$|xR9IS=+<^}$k|1z+ zd7YOdw$6^uP{duCL>S#D_!hpiOuHPy9%@Ou44L!nEZ>sG8e5k~k2`;VmlqwY+D`-` z4USXfTsEx!6TZEnh&$@Le`R8=jdy3s@wuDO|JoVo{^UkJ1_79Z1F=kH2AH^z?_qXnayUj?^M0c#PCG_JMdrQu~`U*-v z{8rG8rFqS5NGX!dCIEZcU7omRc7>ZXn_bFR_hGd|%vkQHD!Uw^ksoyg=)(Gd0wKZs za9W63Y`TO}_%F)#Dx}{{NZ+9X7EwH%tDjq}yKRIQePrVe5K$|)Ih*D}jw@4IiT=fb zf=C(Z7nixxOpcArXwrdJ!0Vp@%xb8-^frwm_x<}ob&MYzn|;Sn#&^8R6JuHgS|a>0 zf|x-w^O*|{3e2|Jb^~nNh=R;?+n&q4s1gU$NK~tjLYzABa=i^+vci(RG}`Fwg!0Ko zaM7@t$-qb9)gd^zG=bREK?f!JY`)NRADS(#W$Swp0R!;G7BW@RNrO;~PzjN_@*G5` zxEu8WP3Hk?{H9`?b-zam>iyimyaN%SSzK7#`5jS)XYJpEria7WD8IxuB~vCPPvjsP z24{1G~$`&p`e>EY7(4EmBvA*dvi z9?CM%#J}8}oqlkOrZx*1K3GjvY?ORoR1qCulRMZkZJ;;&s`vlL>kQSdyJ) zE-9x`e32pG1SG2Aj%WKPkkReGf!z1~pcRlKZ05_soiL1t8PGg*fBq{wXsq?SKt5J= z65Wx^n-ofDSnWlNEkLNw9S zV63}?$v0|ln)JZI+w^0S-_YY;u&#r|jSh*Ha)1K%m2}N(q=9^i4?W2V*KWeFfW;CW zdR~EKXiwRGG!7Vzj%!IGRRvtUu3QM|z>;_P-0v;48LJ z&PX)+mYgz4X(%BpF@z#<8dro*9cLJ0q?aeohi=AZhiutQSoN1^{NQ}l^pu3y!1sIz zBb~&k)~;0!wCnsmyN2;0tIaNt*EV8$TOQGg0R^k3?)KAY=`~+>Fb92O!htxqZgxXY zrA?Rrryc-Bs`p$L{S6M3Se}om{5BX5@8P04PuXTLnLeY2baV%^|YK7_y^& z!SVGqf7l!#7!L?9UJU;-8u#Np%J_|nd>6%y6eue86{mD*skH|O%*NRb+oe5jZC%o` zvxmU9fB+m@UOMJ({$rZTQU}j@^V60Pj$uDty^kqj)+{!dTmoujv4s!BV$||4a#})m z4(csO)ar}~L2OsHchC1A$PE5}%5oGult3G7GQw^he2G>ASyxh@)Bt*_<37+Q9@h&k zxC-)4tk95xM@gT4LD5xJ2nMd!4Em_GvtT6oV4w0!o0;95qp(2i4YU!T^DP1NjD_(( zQ};h!%SgQ*ZuK+_HjbZ(mTp0m$Y>UqL~c8p8~dEXYYX*XO&1zPKA3v$a}C3&jH5YT zsL_S;3yI?S9$dr^$Ojh5^*jS+H z$mHLwA}RLq@xRc2#aZ7TfNG9f8|O5L(QTmvbP_fnKTCRZ3aI`b1R*!{3GQ$ljaR)( zb_(%@y*g@e*bT7&#gYCd`?CM`xWfV!B z+n9HZ$0+-D@&O7k_h(2A$tI83_tOyDC~%lN8)BG?rA1oA(br>fwUXOm#hZbJmUk#^ zpsycbhWDYvzlDNYS7mR30eiAxM@pN*&VfAgAM|x9aUy?ZwkoI2!2^$}EOJ~REd2;n zP|45d9+pCWJW?As19IM>W1nX}{w>FS z{1%164H;Qcq1h)epEM&0d6(gcIS@nv5_3vQwVS>m0(rY~t z0i{>6b5Vw!$*hIA%`()(CI;EyDolvV{|rxb|IX-n9S{eUy7;Dz}|YPn2h(-fRZ)J#aJ%x*K& zGbt;?S0h)ug8gZ~tHoBE?jie?HmlYEAvFPMK5|k=saTK$iPO_{o{Yv8$8FG%sC4dd zM%0gn-pQ)&{tIR-inAPCuw}EvD)<;A4bOzOGjm@y4aU)}anv(^o?C}5Q@}CIpO&#s z?Zl2aN(SZkrO(xjDT>#p+JX(1?Z82`67Oasu{UZo*>zw1)C=U_CC06a>Plf+4;3)q z`g20s27OyLhdK3BIC%Q_&e;0t72;$|8S-KgMCv_z^25)w1)nW0nk_bd)z~|@V9+=R z;6mt*0old#Q&dAg(J!Us7jf&NAm))L98JnPEvjoH`wsPq_xE7~Ve+@$MtSzt@AC$M zx7KIPv^=g`7hk3#NZ#M-yym3Bp=NZ&9cz*sZHx$rHIR=OUjKx`Y#l3w*BjPJMPpR@ zbfB12s&_dQ);j}vmFz6eyn$e^g`A9kVM09Ggy@dQXi`>$c%iIn@&qolx0QQIIZWR` z7q=1ogFX-}`RGgZJc2$&$iPej(C0%_u-X~HkYAHby)~_pfJO8VRPk2OQ{+`Rx&Q^( zw=QoSvy-bG$pQdXAwb5)a@-cJbp`5`dN3L5T9{;IV32S#Q8PIL%#OB%M7WLyf@iX& zK^*Utz@V1U@2MPG1L&2I=S%BjTyxTv)0;s<_zE(?mocIjjS%Km;ERA81reH4Vt|2r z0|(g{k)l6!x^C9^4^8$ENC8Z#@;a) zF*7ZYtfz1vhSIsDiu5xx=Y90a%Z~=oKyxiH(%RbQA0@-LrY&#K;kG7WT-x5m)`1@nf?Xe9FAaBA#8oz~JW_5p+;(o#iSi~F0D6cH6t{~s-iQ`+SiJtaf( z8^Tnfky$zSbnCuGIWC~j?~Mb2Xf>dQoX!%CsW7>`PW2Dc095L1GE=Ir8~4+qJ0a_L zLt#n{I`)u<2WicC0^yrwIxZeP=6HK@#;lNGrY#p;){arMI@M_&pnUG4R!cNWI9D#P zN+=zH&By#j=)12dS|>!}lj5~r4fq2_Q%UAG`F{X;`Hu-*v<4KCZ@6sYX4BQT^13)eEB+u01;&7Ci&r6Nr@r}~`J zZVHNNSg^R5&FS@3n~y8u)nDcGG9`A2Q?U)(iJK5}YlA-a%V(P}vwT`Mu%&HeAA?0a zUO^+oAWS6L1935ET~+N(S~-JRZ|zZo=QTq0yx|y#Hao+Ag(Y`+Rfeb_vH~&F&Lt#|9HnbLz9qr|#tx{0YLRqA0@{rt8H$)W{<(v=_TQ=|%>nc& z4;%svVce@Pe?*8HDHlYIT?L1{hf!MrC6&rI#IFMHw@9h#8JFYS3Nv#Yx{^eFz?p|z z5_v2LaTzB)2ldj^upf4f*B`tu^U@4CP>}hc-}77Rq972eO3?5R+$k%?8kzLD*~=^u-H73 zc(3Li-=tE`aw&Uz|08;+3h_W*FXJd`szCZvmVkXm2 z3jTwj>=>RUZ;?43s?JJ?I&dnUJL0ePcLe2;J-GW!1a~fo{AFXnmd-rRLr^!4Rh5n7 zPWuJr8B#oAPAPh5%29%fY*NuBF5WKvCASg>reBMU>$(*y_CC=0O0-T@p3~>$hydEp z=xkztcI3phj!MqB(NKEA>O1>tLIMXVRTbnwXD5VG)bZJgmx z;6iX2+z zK~V*X%Cgw(a=wGXUi55Gq7hz(3<|I(3@-*Eq@p=I&$rI}Ppu>r;Lt8?B8|=Ez`0K( zJ+^Erpa|`TPv(4ne{>K{hYbTX`LPr?rL*MDMH|^=DiA|lW-~{JBVjO)l_xhADcP{{ z9vEWsq6MP(fYfIIu$F+x`Mu$$;z4cZg}JljH(@JG*?M+vq~~vkJ(IIj`RDv*vCO|s z8<BKq^{X78Vg1;HL;k%c#;0kgcLb z7cJKJ{O}$?oyvxMPWh@Y3kZhz$$%y%gJeg;K=1&Mq9rVOmc=#oD&9^`0s^0%yMQaC zyMEo8Ql$e0^cWhPuiqO<@<21Yj!^ZFT5s*X^ ztsg}p)Dj$rBfQU>jv9bU<~OC7P$|muQ5_MaTh1=n$32_;+OmVymre%U3E`703*F`V z5+r(3(|;Cc==A&;C3(^`KkVWCQ1P?b&j!YnijsgtoPX=)GbBPoBYX*ZxAd4-{MYSr z#kN`Ca>4dAK-UG@OQc72*n6~CY5@b*70lq(^|d`BYKx+p3DV($-+D)<@Zja$y*(k) z8sV~#xJLh|$O)ouA-IAaZyOY3dOeFZlARuq*T9{Du1Lx!Ig*?cEbgTf<$Sxc9Vyq% zX-@$4FGko?AWpu|yB=rp#?gISADu7H(qS7u9AV=kGxq#9R6ESSo+)gE(86hS3(z*e zS#4B$>t{}<(@$J7^XMUT-ixn%V;&Qq@1u!0I3`mYUm(S_O*7yOz=+;&0q&m~jRQjE zN>_l?iw$=Go|rqj_RUt!v*-5xmrdn6RQy~Phs*SsrtKQW2$w;(rW$LA7Z#B^7m{!| zeRtD+5#h(v-#8eagPk^*S&oLq%dK4Dx&A6{40XP%$F1%SWr^E$_wQiyy@VFlwz_<@ z>KNIZitLDe;T-_dM5-cv2uIyTs})H4Ck0iw^oU@V0H*vpryL9($tFeP z=1jC0D3z(aEo%l}=$$#xPLrf7BZaP2M~R@|`HTKe5k}@!@NZ{)XMPYvaH}jDHz@s- zKwwmrAY6Ah5#v!0=+0hd6onO*0c?$0S11ri?skwppea&t&b6_JTCE}pcC@>7;VtxQ z1Tzm;2>T_?{oYyRY;d)=A`BzMoS&M4fD$bjYOw{KlY;u_#43P|F(AvSB&YIdj#arE zo6=^>7C8t1Jz&&?%gM6622TNUDY?F$1n7b!te1XZ9zxp@OWXaNc%fs^|k~m%@7v5UIPo&HaHzJ0>Z=ug=ql*Ezb2?ofe60R_ z3%R>7B55VbhF5JAd$=rZmCKteIh;ux;JRzpUA=&5vCD5}`kG-6IYgr8?@vTjKPzvri}+2I3Io&pGUO@sCS;HX-EJM~1g4z8Wkr zx}@>NvLtned14{?k;5leL~V$D%iLwKFyh_Usb7tBUs<68vv@xd z%VK2lw9LV|+EKI2C?(|-&nQgB#!At?h6XiQ4gu7xJQ8T2jNK>(fZqbOg7?^3eIS6C zNOk3geZamkwfqAlk!`u$-PAY1vGHjHTu+jxlq%*B!2)o9>7${0GU7n~5unY{nw$|7 zo6j0*@TEE$sQb|uw8$?apwBX zgJMW~MU1b>FBFM#Q%azGC?`?kF=q?{*o_r1-VWi^*ok@N9+4n;1Xy|qWrm^CVcx?6 z&N5KamLpnrmSPD?4TR6bO)r&m;cyF9M+LQ1YPauhW$UC z=2?HjN@3*(dBG!;ccMmWOju2*FqDo`=0{o61)P|0Rom)gsn*CODWMde3|sC9(gGF=w4)^o zR&`0N^~Jb(8(T*O_vuFiApc}&EM@~eUI}c+fgP(XOr)5ggKO(K1Z{vKZu75Gv=&+9 zBH}kZ;kqd>T@jUNFh=$hR)&(47uew*AL^OT(oRikW4PZj8wE(}VPKd+qr@x9CPzKd zJ0k%XAG$1zB+7a}%vef)0@Wz$|L($KTM_wlF2cmNXpnoE_@n8Q9NstvHJ3yEq6Cax z7cG)reqZGZKniU0b^f8H32-n4(VGGl)AJA;_X}K*zjwEXT1@Rt_A|t$3ba|giPxEI zV%3rV2y}o(q95k`PO506*ai~~1Fm2f5o(HY)LO}K+QtNv6DMuT4lsra0o^}4N6jbp zqD^98Rni^;&{gNpB=Q$`W;+Y@S!FL)Co^l6sO+a-qs_MvMBoSR#7XNXb8(cqwrMJF z)XD_~gy+^ml)Ri0dYe0dq}K?-d-O3V(8<+WX;6(OcPz7X=&p_ZKw$fzN_kPYQq6Tr-K3=wMMt`T<8^iaTW0w(?A?2y)L6+ED~?-nEP zEA%?W0uK6BRP@xxEHt2pit1u@GGtd3_YU9lU29zxoi!JlYH7+8UsZRtZoGi5aDSsO z;9wA4Y#k(Qok*&<{U~fKB)O<79h0OtFL!mjmK`Wd>^lJQqcX!|fV3)GrO+$+rfbO} zVaY%s%caZ6-f2zih!{vpcocTV$Rw^y9^2_nvaId|R%2c%vo0|iBpBu&4x)v$?Hzri zd?y4}(pXtbx1eFWJ@ zahCf2K?F2I0oa41>X}MX_PMOHwbDYXWbsF0Zx4v0Wf|v5NgiNuK4e8>Ol)w=Muh~H zN|RHk)xWU7OsYjssr`%+wisf3@BnZKoLoTmS*5T4b$L}5^dKrOwLm@rKo=8_6X&)B z8$9)Kml#Poov84sAyJ1(E{C8RJmRDooanJZ6I`!;nB@Aw&vrtx+#|BiM<_!upex?r z(0Q1ac?9_N`47t>4Db75$HXGU@JU;$~jDw?!n1KNBAY`y~eYeoo!jU$W3u`Y$; zjZD*jwfReAWM*(~4sSV+A!;POZ?V;KD2d7Uz|Q1j=tCPnuLIJliD5*b|J!v#(Hqf) zy(5yFy0{)F($890d7`;Z#hn~P>@ZB3+Mjk8l3_8uF_$H$6bL6H#n(p-P?u$AFH$HuN&>E@1m&NM{AF6b$FfG+mQEAW8ZO&t z&_aBipUvVJ(73DvFB^)HBd9sYT=;nVrK0UFVkPDXNRc4Hz z(9~9tpB?4*r}r;P;TL&n88h;eO!@)Q(`r&DCR#~hO@+# zm>TI7I5rdFO*q5a;(Q)d!F)QV0%oA)Nb};$ zbIoKfnx(ut#lhNWH5lWkhC3#rm1jlE|3|loZqeStf_Coq8 z@ak0(MBrg3TEKMU!`IJlOjOX$zTMl`hYx0E*_4J4NFGwjMzNO)7f}KtSepxlh|l9W zO*bdcy7!2_ze_}Uq-V+q>diaozGWZcG z`U_StfI#jH|7%z>_{NuL9h{m4|U`-LUOCvdUt<9muWN`}au6Yar*``JH3t zh3DQ%dkR(_VObfF)}R;EIdK1B^N;mldg-4C+<(Dk=BAQzsX23hFmU>74CMXpGgt0f zddcmE(Q>GtXuyH^qqk*o=PPNhFY#@Qujydo_^9rsXQF)71>YX1kX=|{G5YWKR}q>= zAl08TO+hAoWP#bXn2@Tn2{}BFKrVyRmFx55&Na%9pS^TV&^7i&CvjychsA}3s;I9g zR&bbV#=#jV{aelcyJ_WO*f#PI+V>p1WZv}G-oQXbvLdu@F3o_tY#WXoza7>#V%y0h zP0RqW?P_1p$`1O_;Z{g)I=&Eulto~)6KDpd|FL64gpDA0 zGk`5qQ{!uKJ8bfjk#?j@1K&^t9^xAdlHYuAzH@In6|vfniIbc9@hUJmJ$Ph+ub3%y z5&TF?b%FM6ii+yuJTE2>ke~Cb(ufELi-1@yOmd35!3B^Q1>~+%(7tyCgk_zpQ2|MI zSpnHb#acj|!HwgC9O5S+ZBszD0_Ly-XH(#G3a{Yhngh`jT;FV&&ITEPldVQG^HN0n^bW~IYvzzZL>^LOG>D~WO(7MJ)Y!VqDC&TJrsZ7) z!e24Ahf`h3k3ILB42~h$F=izB*p5I^z{qxhQWUJg0=No=X+#K4I>&qgxFe#2L0A*( z7(@02VIP3_MK(lTB`9WskdtJGFhW!9%VSlDP&KDkzn>YaN&eg%9qO;idZw~GmeN-F zad*y^G!r!#5nuXQ6<4BjGQ*6fk^58Q`}v13_|px3d6jtom~3*sDrNBg$f^g$VfsWXuR5z-uNO}U6x+$SNicrmmN^vY z4>{rfqdV>K_8_dk{hrokC&5@YAiVDrKPWY+g_A+la^Ka!1lMfMgNt0v%(hfXIO;CH zGcA~YR}#t(ajpm+KnDT_t{Ips>kUMt^mOcLm`CLA)7!w`bdmgqP@0b|fnu&m+K$X` zFBGv^1150u5~+Z}dea++0sr44VKUc=0KLsOhA`}E*w&ut9j7rg1>jJf*oy(=-2b3b z8KngXg{lBmBIgyp=Lk>q6$dU-Y<7q=6ol6V#|i-mr#ul4bh-};jb%LW*2$YSI{S_N zM$rALri_xT&A{m2g%qeV_uBytdr(9`-Hb@f75F@f{mTGOwDr)qPa*zOUm6l>O$+?h z1oL0u?89K`Xqn!t0A(tQmSyWLNCPl-K0F-A9WJ*^<)u{VZu;0!YVhLXo&Fppmd9Gg zRO|?gb`|;0X%Iv+03cUyb##LIsPbnFq7Z_J%Ly?>2r+~(_5l)T5NIF>CnXA z(6m0npV}rG9#_6sb2!o_w4A2)9;cu&8 z2yGEc`+cy`iZi?C0s(04hyg8x_Cz8>sv#dVpaBfXrW;?$H1X0AtiXL(HNmTh)moddUQOt0nmRVNMu@3aEMkK47-7$G zt<&x$GE_Z-d1JwIi$IDbOWqJU_&RGVFi&XaYgj-s(!;C>3`GN3bcn0SEPEm0jGL+1 z1yY$ZJ0mf1DD&|Kr9Qgsil7hORcXS#)QMD3Iw4=WiqqebVtJFPlJn!eDKA*CI088pKsg3$ZXii`N6z^{jkRgxGqz5E?vn@+f z6~`fAHne<_l|pE*cTL?ZA<|rq^mFZugrZhZk)azm1{iOxO`g`QB`S_O7UjEp*Sz17GB;l(N^EdDNp4kjZEb*8tm%+$R!%cLS>o~ zORQI`0``EGv&K;+mUPy9$utQWOiN{SJ@Rs%~Hm1df?AG9Mi( zhoafgornz?UI~b#7>`ivOTkFB-~pk*K%jmYJ z1&eD5#rR($8FvT;*r9mFSLE1+d@{nYn%M$d+&QO`Wk!i>$5&@X&QSC)jhz)oS0u%+ z8>5qM1hzVowWIk;`bwIQHg#7dOn#H8sp5TmnI3R~E3;}9rGadUSoqLSi=x1uon(}# zw5BEAi(Cdzb6h^jR}HuSShgH0n`K8!005=iA_xFj4V4z`S5#{KNqf9kXCaOlL{p~- zt4NcVqHlZ$pQ1QJS_s}@H!#n+UES<2dDI5G$)U&KD2CyZ1#?phF)ioxZhcyUYiN}$ zH4`LpLaIjyofJF-+w7Z=K59_zv~OHIsEE;H`gB=H*ndbJlh|bv;tn66F?`uX!C(^= zoWr7-zwmnp_FxWia5Kz2$8s|U{9bx+{!A=McicE;Fy;Ve1dlgz#GX zBuhOSqRoW6*R>|61X#xSrm{yy1=@tAvI0JCvOUx(Nk3kBz+HpgpavvYFxwx2eOQRu zI>|y_H)C^;*jt?X@|IUi05!6t<9UeHP%jn~mKK1vC7Ar}$YwuydnvUR%NnzfsHg}U z;P7pgWG0Lk#uSW><%!6iX;Ch{HbFp^Q;o~p0@%T5^tx`qs;M9_0Irts z0fzn67B6D*PTyLr1mqiiPr?p#S8h4GPJDv-$C6$7wK_kbMkedUaXEb{d`Sv{XXMDp6pNRgeZ5zk=&};X(=V+epLm&yfzcsy z2TL_XJC?x~Mo2MoVo)+wjh*K0_@s&<&u7$mfLh=O@B-|4x#GaIaEN>T_eSSZEQADn z_>RCQ-_4bQMB)yO^hw#7L21vAmljSH$@Gmc1(>QF(B0}{?8JH)IHW3ErUc3~)l$Xj zVG@+&3^ob2lq+JTMEw^EGOFEHJ=&Q9GP#s+5*7-mrng2VUTha-LV=126v(z;oy8~B zss@Dlcxw^GWGIHEbwYX)qS3nXLMfu{$Dm=t5&&cHSk>>qkZs%(1`#tQM-cu;=$2Fg zPcR;HGdth@#uK9ncS&aus*#R|C|IUCt|bHDPb=afKni9ksG-vp^m9nBxM85nY!yl2 zA(QkTE04cOCg{nb=3_Yg^hl2ExC}BbqRah4vhB`OC;9Ttw>1~TBh952QBQApX0k3vRx zdOKkKF?Xwhi;lr!%UBnL-UxXpke!|o7^Y76KJEd;hthzBX1M~>!3*A2Fp)(YQIZfN zfh>zyl+#v^Bw`<=BUEtSljnlTuxp@eaB_TMDn#Rz?ujR07tPsLu0wV_vaa|G)~;0aB0 z)CYP50|0gRJR$o(fwj<+VkFP%!Bkaeb*6|YzdW~j?<8oY-A9eHnG(2-O@$qVHfaHU zhd6x%APaMrz9i=yMBS7%IQr7T6tiX_ae9%nE$`89G?tKua+U>R2HdvwH30X!r9=Rg zNYdnia@$Otyzmcx?8$Oi8Vf0)6DY+MNfNE3HBX=fWcBONn<+{hC=qZxd?f)2txJZr zT8-+0Qd12wL}jg+*bEG@tmfqUCvw#L#AN~0)c~^3Fdi^-8!+~h5GqBu>`9|SlJzs+ zfiGkw+TNbAa4@id45_+foD?irIh*lkg{r@E%{OH?k!x>TfQoq>$Gi^)*Qm-q40tDW z#;FeTnEJ-!Lv0_IOS;w8BLz332gIPXI4DR;lS(=wN+MCHDW`~%B9N3o7_QI~Facl# zp}uxk{@8!DCkoDa9+9}L$M|Y(sEdRF!EkuqSXI(A@g-K3ED#V?w(qEiS$1P=BZW?1 z-+uG5Hg&Nz7Hp`G_ceTG*CzY~iCCzVUR4dCUqb)@016BVi^@h5i8xFYIX@)8Kn4W_ zje~&`f`b8$0fT`9fCGRZfB^&mfB^sjmH>hRLf{!BUJKHMZPyJ-}pTCax$J{w0~0qcbxe9qtfH<-UTCY@fKJyyNb66c-h_zE%~!l^S1z zNdo91Yt48OfM!hBI=?J8C(Jxy8tH1ir>bU9*LzXj5Ix7w0kem|U#~L&+kryGYNv4Tx~%n1a!F>W(Nk2OqLY?DNfn4s^Q^bjI*3Ht zxs|BZ>intH?;H_>hP8~t7xLBogV(uNTM2U1tKBNTcl+y&MBf8db~!61qD(W&w;2OC zty*qxj2<1TtR7+@>r_P@-P^*u11q8Kav6l0UCy&vp4H}cDIBS5#`0czjdnpogr7~$ zGt-&R5NhK$#dZOyG18}O12fby0`pv>i$ID-FJrVvZ%NYODqX2TolX+W48VKdo^I6o zm>%sm-Y(tI6M~>KWZAE=-WT$mdzb`Jbq=UQ3=vxq)fMg!>TIO5y3-aLY1X1Dmmi(r ziTad#2ZQUh@HyoDPQNA1{<(#3`dJ}Dw{+A4!rO9{0;;?^QvTUKi z5q%Iw&1)KZCDNjp^?@nleZZ*I7MiD7Eqb_VPQWK&rGR@rCgHbCKvhnf5rZ}#nZ`>B z#E!x`Oxbu;pbQzqC=NZgfCS=?PC)lM+Isr`c0do3scc{t&943^3|D53NT@FI;GVIS zBSv}0Mje%x!X`tgo(cn>Ix7>Y^!VRX!V&awm}q2zVD3epJ($2tS=`e)SuB>p0f%Sm zWy6o*mfO2OiJb>kY5VIaMlZzfPs<%xDTsfQ`7PS;j^bUf-?HYJxZR(Thj%}H2d z83>u^aS^B&jsr`a5ldC0D^3<{p+tdK{rb8^lgNXrkKd{1I>MF3hl6Q?{+*i78 zh+N-#j6}heLV!h4s(L=+REad!hnhvr;w6H8k=6;%#jw**n{p>3;dwcmHKdMIh_nh! z5V(}P#HN}xA#s>K+hh9Ri0_|xYa}Y+Y&Oy|BJKuu1>-XpmE>9xWIZQEE)E0vIp+*}XW_v%vsIO%yi(=Y;wDRf zF~aRnkP>_(OdXSC{E;94$O{Ol0@$9jo)1GhV~>3-D=4Cc7_web8oAG0=0m|#8mo&M zHLBECbV_o#7$ek@W=_Vol|39F=3smxqY`m0c7;03|2jY-yYs%0Cl~_5ruEm643x3t zL0Iy1YJJ%Xz3I4Y2TS(Xi6wQ;NhQh_3Z!g9#+2<`>6*1^268R7m&Gx+PlOs_r!c5E zY$eb>1U;XjI@Py7DTYV^L>(HXC79n^jxeB&s+`?2|G-!IgGrV(%d_#V{^#4THXyAe zOAR@+YI#q&X$9t3#f z8pI8y`hnvlwEqDn7_XI|RJtI1PLE!@KJjE`7~iApcvrD2XAM|biIX=gHcr^wo%$V0 zQZLyHv$2K;%&hS&u6-*CY5?mI=-p&LO<$nT&1o%TZe(A&py&VRPK~lAPw?F;H|#bv zekSZ1$js>ucp$goFNi(E4z`&GZ-5$79a|;QSm;Bi5ol4&Ys{Cbo9E$PE6B5r7n^F$|DU85S7l~_B`3zu-%)OXKN_B zhR8+C5qC)pWNyiFOVa?Q;ucOxX{3&_TTe;T0XLJx%}Yn@BMMlw0p-PXo8t_AK=kR} zYqx?zm^|>Cv(aS?ie07Nu1ddTQ?PmfBM7TTi-{hk#R*UpKl^lx89Wm=aoDTqMj#<< zpE~j6Vkgchy`p0}8(FLP5P-i{#hI62sbUO+%8W|heLGg;*zsVu^BpE{)R|QBt7LmV zD|xslr0_WM@O$1}DE5yWrnoz@wf1QmW^8FB#p%s4z)AOHTkFA8Vrb<{x6qt{>B4%i zV`g-s3&rrM&J5+TwQGx=?AjWbCN;&??lf>USHmT6&2_Rvt5!t+Up2eR>TT`pbeq_u zB>XF3=>NizWTlgm^` z^Kt0c0{ThUuXW1#^=m!9;<=C@|El)YGHgKBmb(CrD{5Vo`zXyYZN{PYsz>+Yxqf3s z<8Fd%A7PYjZb8YCr;N;C1Fr?NK-yFGu$>+YJ5XU4<|P)J`X|b27zmmrQD;RV&WSQV zEMDgJDAPG56e)Mw_)Sr76n$rT!JU!&G4(rW6v~I|6!s({_0R{(v_--lT=oDKmDs0K zz6zVFc6uZ<4LHRZdw9&w_MnjEN@8o9t4!>abU#uhT)?3W$Q4Od9L!#WjSjM0RC|p+ zd~WI$p=lSuG>{|h^E3_#fE#JBj>bK`H#z2gMux`J+XH1FHwz8se=$O)H6rq-;lC(} zNl0tF3~8Osr!5m{J+fQuuZ)hCg45Huz|d!De9h8K&^Q?;KM2CdS*(9zYD1K_4$Kbz zu@_{AErIeCT_uN@i=H%$!(E^uF&*}y72Jei)CXlFGQ%^0S@Zkkm$Q!=Th;Dl0IxaH zqR>Zm5wSn9hw#jhIz^)$gRC3zNl2;o}s!!!tti|jy?_xvhd<5V}bjIa_a9*Q{A7rA-v-9SUpMe|oH_i0yn?GWUIAi9(t zizHGhu pXlTJBiWY#WXYY*`gw|B^)Bmzj$g!Z^EkocG8Jcw9yMp<61>nUFdo88p zAn)Qwb8d!`eSvdq1U-!#cxtNu*Nq>*JnKrgu);Odl}ZJ>bMCgZWVr0lC)?Vq6qw`I zvatkMA-^?Tj4^}J`+)KfF05wnqb>6}vZvDdn-XM}+N!54hfO!9*$yu@jN7m%>@C>euGEfSy4b?<4Ji8o|b2IJINr-~{*(y2B)fzOo zfF1Z$1+nJOqNceYHl%xIRY+@0s-87%QI!tZZ`own0J74L`ATbOy6}28&{*d@PT2Si z5e_1yaoxT#aDdQ_VrruT?7!>k(ZmG6*O)+@J;V^#on@CDQLAd~U)TLgix)c}rpf1*>Dy~a7RvT#_^TV4nF+buc);)ln__8ortj$Wa zGqH+#@yj}_8-WAQw^};oAcU45a!PCl(BKwo3iCuw$CIR*I#WW@hpdvO@HB9uNz=Uz zA=8MNTCi%w-~CJf&$nIcZZL+F3^=qWifF-QiWkZdSLq%E#}vb+8QhX7p8-`q7Tq z%o9Z9Xz7ACjo3ydu+Sc9G`$~?gk+R1;u1V|DzwQ?8#oq+%twtp^T^{L37RqwiEkp~ zJ%TO8Qch17g!b%0$ZpDDJ?}E)`Jp|2mIFw6a_l;{EIcrWx2Sf$H*)gS3)UgO=(5)x zv`FW;gUMQlYU3KYKy`3kjP0!Po$EwZl8b#u;(`Y$|0k9uz}@-uJB;h~z7!oDSVis#yJ9-EJtEIsJ%*9m5XUPo4 z8MY5yyh!4_P`9YN>ms5GTB-!$A*!jG$8y20qLsiD5u2FXH(|0;gjZ`@3q@2&;t1V@ za&$ys^S+T-v~}C>U<#R~4l+w4&Q*jt(Y-GNkfIYIkb<4rVXzTd+-V|wjW!ZOj8Hbb zQ9S?==E@dT(1@rp-vUrb%9xAOwES1lz>6R-AQm#h84=qZIx;+32L=JAIfVa#Nq{v< zPRyF6uPD;l3IMQQmQX*RvWTm!#C-8MCQ`mgMzxSH=00Y|7sIk^#1~%=ehFXXNS%N$ zW*y~wp*2!{y;vX3>0acULohf>Auc3fR+|(479{SL=yxJNY@vx%>gdIF*MVupcw_cg z7aF`eTNm6q%bJ8l1E>v2vW&1Dw}9h6M*9WGpuDl7AV4tv!*CM;G2{sUM^LpPW#zNH z{E0E$M_X98FbW!ugOZ`5 zj(m3_phsD5!#xdO@j<4_(~mI%At!_&g-%*k0XDLrQ>&zH%nY>+Aa$@t?*lD@4Nin9 zTB3kAWf23|XcL2WBLG=5VXHM3{N+wrjW=3fp8u_(w=J*38nwpnxk2>I|DPk|GoJ>+ zIXPC?aFFD)Fj8T(MC01Vjbz&pDBCtVA2wmhdk$N@hbtXLZ!c?E-Y#Zn(vZdtqu{uK zc*Q+!#|^T4jS+=~{UNVCV4KvbP>?Xts}u+!wZiRV7VsEgdt?pcSC{*^kJn6~AHH&Q zNQR?wuQSJ5EXMYoxDN&;%!MbQB?Dk5c0WdY+M%TeCs{x!i$n{IAp?=+l-bif|1tp9 zQyCIVT)*OmAs*MyqpByMoR^9mVPn;Rf3rYlB5X35A1#g+UQvi53Wr>$$Xb}(TeibN zlXV*N>vK-fl}ge&o>(_?XtWVNj#Vm; z8{a7ZX7PwEU&SYr1A(Ge-A=~sR^Oq|6adGRsY*3ynJstCdPsgPuVAqL`H4CK#qKEF0HODb`S#b6|sjU@-Dpg|2*x3np7(0;OYJQv_&PJecQLMcMnV?_kzy%E@N>Ux48p_mpbm9i-DD>4$VChR4`s z=YAkk+6tROWx`--P%>CqxzoMLfGW;;vsScGYbDew9u0fCW9Q$(fF^2_b%iE*OzD>< z`}^jwqMyd4Qt|-kSSA_4ZP`u$*knWabHoAjlVUDrx|JBF2GV3rM?%cp_f7*c7QLUU z+%dYKTaFyNlFk&(;+Zn7=)k!^2Uu9_KGB!212;W3w8jZjte{(AfJ@>eV*)O<^{vV6 zf&^J;@uKztJb@_ZD0CD!h*=aFV}gd#Vu)RKX-P*8z?YUHET8ZxeG5rRjut9JBB-N< ziv%ehBrLL?!}xs&UD@I073(+HaAUlhA9$Ss!AiR+Sb+wEl`=na8?20s)cAG>LD3d> zeb{OMqA~$@rS)pXKw>eW?m1J?$Ro>I?ddhKn3fYuK6_%>nxI&UZ%z@#GG`ezxJ)D= z#a1eI50RA||Ef~nZF`KlB-jS0%q9(fnGCZQUc{_GhV zgID)5kr|xmEOZA0f)m3y<5KJy10m`tlPn$*nj&eWHIsef+f>Ft8nc!jvI9zb?o~m( zyJH>E@+2SfiJ44FVYC*GIbJpTXIX;fbHdnVF)u{Xl_MdBc&9(NjV`Ys7;bNNZ;V5JEQ)mVE<4u8@|n5CG4-YIEb^j9Aj7gw@8qEbsm z7MW)>6b90b2}4z(dq`ZS;1?b#Xh9*3Cn9@Q?Jh@_*5CP;MU8vaSgorrM5o~+3 z-g1IW#fv{6KHCrmF+N|fnV(&JjtNRA7u{4soUxmVr_! zDe;0JMWJ}PCX1I~gz<78SwYQsNwOO+>-{z(UyFbd%xY-j6krd$9s@9~_C(PYnKBeF zEaSJzDYDvHyzb?{p}Tl%$QV2>c`F-7)Z^5`|K3OsHRDMrP-X}KsVtZNcf48E1`943 z1SQl$5*oIeciXozp-`lof};o^2~JLo#HUT8KTm&LM;hasU<~#Vxn475UV8@ zwLu!})snTZ=suMYtWLB!wwDwvDRaAYWCi4u=f5|cp4-JijO1=lo3-R!4ppnWQ+&X7 zjyh%|;8s)!U_b5?G*}&I^hsq)EYVJc?nc96PHBDd{JGY2#oc{7p*3+m>CdN$L8&t= z<*3~B1@Y7`dU?692rPDdm~Fck`O)(RoRyPHDjssGiVCjx```amBxYOyQ|VplIRvBm zP~%gDsWUrw2-~LtI@hl_WDI)cD$e%TQZ#s@BMSewld`#(Mse78mhDXZqU!VBL&bZe zp9L34Vt)0Q_ntMxFqelqr&0VjU=;aZk~n6p20A(mY`zK6L_W}-wok0KDRr(I-d^!P zm@h6L@U@Z8;d8N5CjiN_Ix%8co@53;G^*PBd?KNZE|^i}Vj(vK3Y-43_rwo5UR(H2 zO+a4d1E`+ehYJgJ7l|H?yf+heU_;V0r^hic;oJuml8u}2{ZagjfB99d2l9+-=A4ie>YgrGWK7YMC4n>wa*Y$^%Tf&% z)*;4rkyvZgwve(mY!ETRsQK!$Fb#m479FSLY+S`F`_SZ~2H$8ybIi8-wf%xF6RYRz zT^u@+RoT~Y7!l>&=@bOM3}shTNX9+FoGD7S9ZLN(l&{?l4DcArf2T?_z0^q7e@ zAMC;Cr-GdAJu@M-Y+@juXLZpW89I`Nf8yw0Lh2KYD;!f(lkJ2sBVYKs2|;qQNMQBE1cHHJAovIb z1A#ygKrjg)5DWrL20|(zL)_E>th9|i-A+MF+n`el`ZR&w93fN1Al+ygJ5F%Hfq1X2 zLSFFsj56bzmjl7*Z_AG9bAofPcp@>%fXv&RG2ZtM0oKhuSdU~A`_<@OTve4-_?gQu)y1el6pdp>!qAJ09S5T)K zl#GygrnriFrcfREOo_zxGsUqMGPIPg#I}8x?<~wl}H{sk45BelH_b zQc@9~lFq`S%|@d@m|@%6RKV2=%C(+DN?b1SCK^Ih_an;w66LIn5+F z(lP4M*;ITuB;h{2+pQIWpGxo_42{Tgou&4T{(iYhDx+_l8fi0IflKN(wx?;$peiLF z!a^a?AcXm$JjT12U++{9RZj@fBUL1^8Rw5EjnGM< zena^o?@sDMtXBlDMyI7{*TTW@CxvFjZ;6ax3Hr}%#`VY`2G+Ovs+3?>x(^kfb&iVv z?Usr!1o#rC;zbtWdMc`Tm?SWZ(QET9n6c>rwt;q-p>JCwbHf_?}AQZO+(QDtQsLSbTySVIoni} z;evIkGV zGpVY!RWUIkR>>d{Q}$6GefOAjJHDZ;vPvO2SoPC?TgL>jDpI{4-b6*V8hxX}MlP$W zCbvbY5L#kon)!C@U#-^(u%7ITvRSR_OQD|Wy=r@X0M>mde%ME~iv5Op8vLuz0s5~@ zNJ>9V%^ynpX9tKV_1{vt{9s915sRt>jH_w5*~0wtv@{<^yMqg~?)g=;%W0JU6KI@B z8??)QukV1kcwv_Pt^JqLU8Q;;UqY9vL-0poPu-L2MFVTgy246IzL6Y^H6W1G=Tb& zT#-7M>pJr?t4=f(Hrn0j`2G}GLHM0okfU~S^%fNe=aqIMH@V&@jLI3!FSm;<<#`{Ra)zZQ6_`qOh5nJj z-mUAaH+Om8D`cmcNooyKoq@<5UNy?@)8WL#s#(#l{*9+=&8Wj8y`j7hs-<`d^*WVj z{!`zZ!uW{6OVUmm7-`ydUU;@Q(>NL~>JhRk=*P;wO8H}%@3pGP}x{~G&=zzm#7-+m~JJ*DUZzM z|DyGlU^h3ZRoDmMrSgkF$vIE?LYeqO96%1~Jc+SCkxc@3mqgMv2ATPey{y|MfN(s6 z7m{n^NOZcm6ES9gueJ&0+0(7+y#DDbC6?~A?Dn|CQ^%ozl zEvsY5XApvE@mr8r+l7TWyc5~YcippI5&;Y=LSuL!(&~bIFIhxCh^LY!RAd(I!0t#z zKRqC877ROPaRyE28fr$>(@#m@E5bNnBW! z9PPbFvDT>Npzjzo+8}R^cpc-I~jkOTheUs1V!Bs=@!kgD9+eBd4^kn(x>KZHPd2X8#o(U$^ciZ;jV;r$LT4=S!ci0wVR zAOp6rrJWT59w8*Q4bwOb@~EQ^xCsCl??SNFFp6N%kfPJyBr&@#oD7q5*lFep=>4K? zK3JH%3f@^PLJI~)aFPKo7=8psnK&V5Fkg)NTnxaTW@8~fFhHgDsu|b{r8TAgtBV3+ zIChdzt}fG&*#Z9=0}Ev1Vnz&QmR4EGxb@mnqB)v|QipxggE6mT$B?y9UMXfP@q{wm zUL-(I@uOUi;NBcg5B+|*s}I3^rx|gI;3gW%*+~32oX!qepSOMFs5f)+=16&L_>x~b ztnQKo9Qu2WNJ5skPgJwST=-+rKGz-am6U%FE2=d13YV)CSjd-RKFsa*$sqj+Cha^c zV&x=)3DHF2l#jgrVC1{Ol7p$>T*Q4PkvL%XB>N4jO$juJ-H%a8X8`Fk1rx=b--_R! zob4v!6L5$4Z`UGn%^`ZM_c5{Xv1PWz^=Rxzkl$H;Viw^4l1UYQi)*idvDQapmCBDr z@JXfH4rQQd`5X+rkS&k>ruse8+95dzJP9`959WB!fyJXmV1N?x&(h2rFBn9rjHji4 zW$}xJZ$tA>_sF*!(Cx+6{hl4q;0`-HgG?YbK#IIGfDm)pDfI+rHw6Pp0FkMkHFwd$ zq<@RWHGgy#`~g^3yv9l`>?%_%WIM48x&S8MB9Q!-FWVd%kK%inpIJNwd8E5BLV+>h zB=ROObFrHu)l~%`--CiqarCfT>BVFihHT#H>Bw8;z|r`B{E3*GMdq^pqu)b-wGfF9 z-4dIjgz{$JF1|3w5}KL^Y?UE^*_^hOP2OM6uLL&8GhKvv6(5QJ4K#w)>Mp>$IMcVg)(am(bb&ndZ(D#D$g zFaR?EDlmw0R2r{D!4D;TjyLmL0g@_BsYe-hY*teLB|xaqZzmSh_DZSb!VwQ#g=N`2 zlqluB?Gh#Ai$|vLonqokt+FC6SxRU0=^I(UK6f=3|oEY(P3v- z1?Rv#aNnV29b&e}Aiv`uJ&LNt;2?qs=|IATA-66ktMk@}9)q`J)#K6_8)W}5asBfv zFlxB@rfLBId6wZ)gDP^>2lB5?YO%2a?(C%qI$RLrG}6_`=~%u#Dmdw>gP~JkXOAJu z$;c{Tib90tM2Kkc4%u(RPkxny;6$x~|A7Q??yi%>(J8o&CSvXFsZIQxs7~f0oP-FS z_Z?hRgfV@t3}57g>02N_bPiV9#}8{Jn5;GlI51k)gQWV03;DZy80adFqY_)?X^gex znJkb`Ma#OsMR8!75V)UsX9Dd-e_-!4kqLrGG-?e6H>pX@G5_5*l@EO=w?szi;Wz2$ zBSg;W9>2CjrAKou4YhInUh!p_`n*yavCTqJFvHL~ig8aWQKlo0rxlll{+Z1`v**6|6A7TH!`AQLS7gX!cxk4n%M6qj4e4Z5M{Ri=PfB{ir)jI+8BVz~hl^`{^` zpiyCkQihR&KKA6yxM%jsIIF*w4W%e;D1WyNz2CT@?Sng4`9!Nn?71AE)M?sNBIdO zV)&TlZDUKoTpGx+iuE*NFbt_m1qVahe6 zUIeajrMpwz9%NHgE}Evvs%x59Vt;+Ga5z>c;dbchxCPtrG!C!Ivi)GNML0BBwh-cU z78{Y$Jj4MOyAg=)iYmK3+#n-PUCKn=4r%2o*kP9kg2FZYE<9&lYJExy(+r)&1J~blsp+?>4Bv8}-7LiN67sODrtl~y`b zkBZy2KRn|R#+KE%EXv#TjNRl3*#GAx}sxGjy5(-0O>wc>*Yf)RYLRb=mPL1niw z=VeFqLkQ)SUK**gFe|qfMYb6btE&mIs#a8~6bRh29msx9y+?nY_Vi6D`#Jws+c*mK zbmzmhid1~dPGAh-jlc7P5w5E|(xcHB$HWyVTc(S1d|5N>3J^3n91V-c=>LkQ#2C%pUUxU7qo%f@(cX6PL4wwwKU zQ45;FZ2ssvT~?3GJ(nsg{{|N2ra*3yl3DTF$Vje&9mgwJgSb{F^iX8tkWt$;iO!fu zT@hy677v;Q>&`7$C|0yyq6M^F*mmi9y;WJ;TT8r_Gr%)H5P{(jDLkBAyN=Xqa-~*? z&n23xe`jQVd?)?p2plq|47MBhhKF%ra|hMD&yoF_Mf*_JB3|N8#2{Y0*?V|Bz|vK@4Ws?`zY(9n z!AM$OsN(tpQ~qhR3^ce(#A zJJpZq{VQrxo5^@8gr519i8S#?>aAyJq1r{A@b7H97|#X1*Q+tFb>MrBB>3j41>dEq zNCN#g7|ABHr%R|>D)^trWwDSC?wzRq@A{DdpI3*md&)t^!r5GD+IW}HiR%Cp{~ZHe z3xNJ-i)bm8?b(njW$|U7+@Lb@BjCIgxvLR(+!vHvt8%#g3FXf>A9;}FPBGv5mO~S^ zc%O5BoslNLf28??d=Z_Q4f43%z=4OGrZn>PeI8&mOlrrm2b!w-=ljS}5h#=^g=u?d zFxHR|YgD?WchUn8XAz!c!WbIkp~-%OhT{3G&0iyiNk>^jgrdm5u>i6O9vEPE0|16IlcSp|3M8Fxq|?T- zE&>(V}{39D1`XXfv=;5gTNFoyLhHGuAMoQWy-_+*0T9-s1|bFUuj zGs*k~zdLV@h3MJwtv*9hPe+dO74fYk{P&U{Z;eo-U#Yh$f1$5v0aqn9_fN~sy^P7> z8X0#lfDEs%7^a6AY(?+#A641qA0L!dWRw~Kp}G;2egepk%t(JwwEtv#gAGyxtUc-0 zwd2l}K1&hxygjIe-@7F}qbffPX zzasfS(uf*?_K`+M4F|B-X^^3w0MyAFjpU%7sPJSivy`x}=|p2RoCiXZS}>MPEjSOs zC=V|s=!gJo05z#qG&rl}sHTI{Qh}Onl4@RH)S+t@F-DzVrAeKt+AJ*i8q_`w7Wr=d zt}nk2QMwLO%sw7yC(Xz$0ZI>4Gz9(C90f2$AVh!^WGC95-E@Tz zDMp=AWQZPXT+=%cnvbQ$fwf|dMJG?$ zv=@ZlTABtS^`9r?5u4mI&ne0&nzM{LgF-lxk-oBv`siUvJez^J->g}wP-7)Dbmc-B zz%9^GgT|m6zyYV)Xyx2brPBw`v|NdSZr5Xji!Jz%)f1{GHXIU=BHbqSEGFWlc@7HL z_Z^;W6(4e9k)Y=YU?`Dj2Ue7PS~&_&7G&4_FHV1l$nQ|zLkjo$N{7tQdweNe^CEQS z?00}mxVnO=5Q}xAHuv2&wfe`dr>EAMHOLq7dwxCf2BP|7JNp6nUqNSvbZiD@^Ht^H z*av`78qhy?0H+nsajupYxFD~q#2DU%5o;M4q2du3tNhoJ{%Y{hGPqsf8p8o7YcnAf z6n-lOg<_8Oq*=t2$*Utsh;d;;a%1&S`ex!hOc%qW1eeD2hzlgJ^R91#)pFy+( z)4n19B{U>xv&BAT1&n120uQ+hC4i6_7e}hUH$LxvsJWLpM>dkkp9>^Ms?}}5x9+9R z32G)%Av(zxQlWUHeIOMI!jIgF)AOik!@Nf(>DfQGU!`rM2*orUDwib)1W1bdgI zkDU?LY2Js2_#0D^W78Jdp7llR;89@kA3K(Ik`IWhGigo!_KjMxuUWoO9!4Amo}c?d zBe9y;&vl%q?-x25WAs5&+KH=ib8aG?GjjJ3cW~e<8A^AB(3!tJQHT!^oOmxqFVcqA zLXj!^sz7y24Fe&N!0`5m$8&w`&HPSB5xU~eBz8B`9h3c6YXI;8=j^2@cj)TO07;e< zQx5RF%L)lNRD0+@*o*I0<`}fiH?dsQ5^$jxqV2WOls=AO(4yTrIL%lOlZoUmQa&F5 z-6AklY_Q3BlsYCNQgVQemt$?6B4+|*b4--o8_dGw6pldL$xC7C^;J*^XZ$3$*+?sA z?|ao1D~{Y zZ0KTi?T$`{u~qx(Lp?SLK*Bm&p>67+T)B$dP>Ej%A;_*r!PK-nTL1GbRoo(NC;?OoappE$OBuNPBsHxhzVpyEVF zh_9VTbSNe`FH}HOxVI!e&VcS)pSw&sJ=U7q0_;E|ZvFhvRF4&;!+AmiaiY~o2Jm(> zvmKrhpN*^=}6|)tq+`o*A2nY{w=D=6L`$ zwbT}hMb1L6>9K$|lcKokdAdvt)COwn2aaN`a_26K;a~PA4U|gX-)Rn~@Sn}UHf1%< zo|TwhpF6-VQcfWn#1A7X-YBk-!aZ&ZZWw4GMAi$Sz=bfb9LfNoH5fwSr>Z6iBMwzG zMk;N=`e_4x()D}yTxs2KV2XD=ybVxl1UhQo2mTxkEG09a0H-!~X^6B4fiOT9JE~1~ z>|yY_x~R(OqG_!l>%8U!pDqRs(Q+~W;{;mEg?HSKiE&K3<4hU(CLN9fj`{A=!-3JC z^vx5A=uYtCmp8~wTShL+kh}ppFvYgyz(g5!fuEb;hO77ctov!onE$a+IpY5V@&O}z zS?_(3SD}9)YZrl4S#7~}9fTMHAHo2U0p0`4&Tj7-;Jn-o+C_%55J@&Iz10pQgF<3> zFKuXluTBWBKown8$LRSTo)*IC8>|<@Rf-0Wg;#~IN5xlq2YWFM@&ofFZ*Bl0%NZ)# z5EkFj)ah^oV!gw|yVuBY-I1}d{~}=OK3q_d>p@Jl?l6Q#ug_mRZ>$9h{MKU9ygxhz z8S_hB`luK71D-e7w{04cDG~_R`9=<_+Wizih(a|F5V@;-AI$YKY9bsNE=l+``hUBZ z$;%JW4Gw!rwS@_gq*y}I9|_@=mLEyugDx0j|?St}tpBOAk@TtYv=b2IErQAD{&>%27y+5;f%3%bbG$xU}`h zQ7AQXl;ahKximQn4~H=(fJ7kW>im;l?Y~GOUcyu@_G-h-3TD;7<+&Bb04T>N-H%Lg zWdDrFZPyxLCpyZC`42m3Md_>lr0pmdOqLuuiG*Wi26u5MpzV} z94S|k#L!b}(|gM;>p~=6S+}sG>9sTjd2LCme!G6!E+`IXwj$ilv$vPk)eFrUT95Yp z&@4j3Pi9Zp%=U?DVT*tMKRX&<>XnZz7>y!uq?nI|GfdeCZ0pI^IL*|z$-VntpOe}? z$B+84)f;~KRYghu^5&!NUB&ZABDIZ9of-y|7 zzQi!@s@Arq*cWJ1``49SE*fxC&f~mVpka1Lb7L{06f#6f zC8U(jZvUONok9r+L>W2*yH&THcgt-9kCT1C>?9LRclBm$R`1<-`6q?LwF*WlwMm^v27#~~34Uh*#StB9CQ+NZHs`8bU z9`(N$g#o0TzF?#fjRL5q26kd{9oH6QVVKsD zLZ)LEVlMs=J@XIs;mBK`07$wy(m-d`mU7h94NTd~zcE$f)I-e?Lmpn^#o0n_Xj-J9 zG6f13ab}3I6AeRXGGqn&DV+NS{UxXHwilv@d5RXnz!WV>r?MDUlQzU#+F@ikjDltj znC?Uz+Fgnln$Q(2PR?waZx50^-f~74sZXi=EB4*{sEwVHqr4PyDf$2aDXc*E=xt*W zHR{;Z#v40(z!c_L>&UG6vCv>+Xo-O~1wV?|h+DV=7Jp5gL1lCTIs|_+lv1mMteanK8>~EpIsuUWOyp?CVI{h5HTQt}uG2rY+s-6h#DlwIo z(wLo=a!aL_G9MJTs-+0?_VHYp^vh_?LCp@^0Lz|hc}?m3ekR&A)&OF$Qo=~mLVYJF zEjiRyD1U+)x#Sp5Ob4Zvb+g%jj5Y{{FXSssWawjwLW!YYlsRw=4ePu#BMvH!q?;XR{m-~6j6(DiL$xNFpNL%2Hum(xxC=r8rojL6LixE4rs^@k6toM?3j{ju`t>Uhwq~b&}TROjx)Y5`^MN=o>^UIs_ zATXs6i8>`%&?z&J8JA=O247wjL>l;w}*45&sK+q-MGBCkN^-ex5HpXL?)M1OG=*cI<&Sk@u`VL`0 z^#}E$R+!$}7N+9TL>Rk37qph%qj}+FUj<_ee3ycmIahE<$XT^a$X8uLUkzCkDMDPCr2HMHsgt8%(XsITt(Wi6n9+Bct=V_ z0G%cf3|XA-OxkXW{BE^G6Wx*+Y#k{27R9miXzi_kpAkjBhUe2&KuQjL(S<=e%gmO= zftB{mqW6)Y3FgAXf0K_0$xUoM;XZwpy=TL{XG0ZbgKkS!dyS(^KvpCG(`d1`@YZX* z_j_Hrep>&4hHsHT0K3U5KE%pcjYTCY%rHTml4KflkOGh?K;}BYvf!nC!_}mn+5$zm z=3~6QpJReu7`)~Eb>Bh*d-oDnfHAUKRvI)Kpiupx!d1*}Fl71($Z-LkFwB-5+I3Ca zAL)k|A*TFrHe(M+MoE-24cJOqq3VoYtJn$cxyp&OhN*fxC~p8vAG?)TJ5&(@57li# zKNL$=Z(7(gQ45?yQD8^NAF6YMhXIqzsTszXDDaGmq|5|>T;W5{re!_-0L{>68!BTn zlNTR@qvARNTH6F>K{v8ojib0>U`G4&7V`aGz7FYk?Kc-EGw@_R2e0*XeW_(3PuW;N z2iXD{Gs*3VVrUZo5}t88Gg?2>B>mLcUiejA%oD8Ma1nzaemA-Su)S6H?&IiwW9``p&Ma{2;O zimOo{a+dG0e~8P`bn4VBQ%8vE~g6FM8{-k~f{LBJ}-2n-81b z43UR50eze+!R(exjNX({D=aYfK&v1#*qNzBHGlzAYFu>Hz%dFlDP}_=D~b=-QOm^2 zifvcDhDE=c6*yU|dRk!{tOaBmj7PPr{#Rqez5cE%Y-uViT|=+BtZ{&=h@oX!Uw?H- zf5qEOLF#QazTu+N4IE(3K5jM1)v(uf_7zZpH(fYdb_)BzwuEA`Q$rdA%U0~H=k zO&I3n6Uqisvh53J2ANJ|6RcL@Ab}bsGF=eh%RFt1*%sUk(S)x&TS}X3)bmt1Bp!Oc)~4W zX*+Q|M|PSM;W%JEbp4RItt4V#jFH91WgGiqwj!LL0CGhU5uk6_VFf~q2`UR*02va1 za{}(kAN5Us@@cfzo&z5=RGXE&Ppo3lK}n+IZtpkoW}VxAay6-@K)G4%1v=Dso>w;e z(}wn_liyhbQy>sXP_O_IK{*1e6Bdo z$aQBU7$YgKj$W?0jGF8r*ff<87eW;O7}*F5A;Ujt0KihpjrbFmk=GJ``g|o@Y>r`{ z9D~M-k>X;dG1x+5kgMcp#(-rsA~1&B%b0aBWPPo9=!e!XDuynL9p(JFraXPb^av-O ze>u5HCVl7tTacUTGaT#_^kv_uU>GEG|7p(BpREgyTq`{!w632t zNlD;$sbtQu3=1W#?W?{U{iP$)FFeP{V|%C6%Ei2qhwvD&#Ur za61ojE9nfu2onnm3X;n@`#LJ?V^~{H7#{CXUB6j8* z%8OJ6yscTrlncenqCo&^%IZ~YbMVa!B<4sO%WjvTYFa47{(Ba|foFuUF=H7HlxP@y zxE>)>zz4P`prO)qsp7M6*$ z46-WapN|MhWV{w)*z`n{1(|ThLQ;u;wjc4_cN7G>15Byd8X55781(;zcZcE>GFg-l zkK$31k^~sXr7Scs{4mN-*z;_{?Vw18oX~}`13^mv1Yjn22he;3-j)CSejguYOqA-= z!#rYcue>eZF#mkL@4-~^f zg=hGL(<2>9ER^#}GXMKm2wD~(V5*w`fnR!90n}|Zte=% z$45ZKkKj@ur~rfr{Ul)e*2pFV#)~8Vi;XC-_-n{49B4$NE)x7RhI_9VK@>!~M{sytHm)IQj^+D?`-J8S?Up%1&W#hR zCio^O+$+XkLM8+miC9@eB7cMtW==(f5yT?x&Kx^>lrYQ-GUB#uM7k#!Ir(w$QxOwJ5FwASQP|#udVbmVu(7K=7iUNQzNCpu@J4 zYR_>d;)mIwZ2Pb&rijTcd~B4Ze^LYq}vPCdjvBE+-8Iu z#Kg+u_?q|yw!is0@)j0`nwED?d)SraeG3 zwRTWL!AH?4%}Txm)FRoxeSJHm7O2sj#tCx+?)s&1C6>6jjJt7Z%QONN55XtoFvTtz z(qM>Wv;4o2!||gOcc9nzvoFybuW^lZV;qlp6=Zmo`|k%mt#p??t|b3ovVk1l7d>^| zyhCWD|9u*>9zcx&8{i5L*!qZ?asBLx#!B;-!^qwXgkU29<$yBo{{v%&b_WTWqt7=` z3%(2yMq`9hE{rew+K}QM{D;B@!4p%DVO$3<=o^GCETmg3flgsZCiFD#_0WQip!E%v z2zWxwffvD-1uI3U3NECIawoVHs7AnM#l_C=pUnC|SG02n{$mHG7YMQMoXq#|X|kga z@W(RL?hpD8;3p^xSn?Ng_doyNZ*P)xMfT}sJr);uK78Hn5im)XI7h0Cg3f3pgCqu%8FJ zMDEio9@|@|4vM%vE~h5r@t_Ir90a*c{HehPp6i}=Aw!f6^zgKH3c6r9D)CjRg5&Pc z+KJ0A`AbuIWQTw}T|q`B1QLUT734PL#!p~?!4?pzP_gJ8uawG%CebTpU>aO)hb~IT zOt2S_paeMwEo?W)uq0Mfyx$++CquUXlLI7nb4+1M&Ym4bkAU+Wi6fe__2iZiTR z51Twy{xo_mg3(yCXdeZwyqNklXdsbZdL=BTB@F8}kFm})PL-=J1>z*h(n5Au@~wa* zm8(JZ)^-SW&Y8cezMS4-2DOsN)edPKRI4hBpC3U;a30TOT60ot<>QcAo4-v#gs70>$3{9N1RSp8A)!AY7@W?#DzFmd5C~FW?}1z4 zR*%{-gk6`gCozPANkD-){m=$k5`Va zLl+s=EEky=tu2<&>6T5KV$c$`m;Mb_*VoLUSc!me2j%UV@)95bvnVYB$xyyjkTK-H3proV5e3U5nkbbW9up5(Bh;aQ^HT;k{~ChFOtzb_%eo2V10 zIDH0uq;;|G2I6UmUueTSUzCZ!31;zA?C{Cg%MtNtYgaaj}pf>3|OihZn z#vsFcc$lnD{0oeB5{^HF?S?wS#yey`2Od_7pH>TCrNGQlmqf+0nZxUb)VkC8FS00| zGTJDNkZ%S8=&iM@M0HlF?r0if+PHa)XjQRjm;wg^Z;%^zEGsklxTaTlNa0=zPqcKf*2U zDC!1E#dYxqh&hnd?a_wO&#E+rW~r3*s^X2TPEUf?h}jvw2)BLDV-7pjqU02sf3hd+ zt8jSOn$O)H@>b**)lm^m%>%Oc?P3eq{i_Mn4n?4KXX`EXgf)rR$j`bGhyvhDZ*S-OVYikAS z8zzI3N99hev=Jf)$ z$5NJxV4nO{-R=vH>_{JVb)bpiCzaw>>-2AsQoApdQoE8ADC6|+yOqILc&fPJOqy1}pHx3XyNy9~972uEI;!@s z?-V(g+o;3Ra6mfBG>Cb1ps#g1Nx@vZjp!6>6ux4@lxJ~mpST5eRZt0u>mkrSyO%6* zM)EM`SX&2J!EA>8vQBikzdmfK+$7-MYdwcyu=UIJWGMmb4byf1U8%Rji~Q2fPj_%t z4MBS8PXyjoDyNs-`k@&H0-`+=lHNAbS^D0BZz6v{y$Q7UP*mN_gd)(7G6!=mkKhMl zhA-xF);!<6fc_m@&!=5g>F)84BMtneE>WWafC98-s?y)=H?(LjaPjn`MXdw|e{#3oC6Os`!n#;9)yl zwmZAtNQeKNw_Vx>dNB>Q(+(E@^vSZ!bse2zY2&GzAF~Fgl-=@c9ijXR$$_D5-jHJD z1I-d-Xmdoj*WHJB4!Akmv%aS$Jo(4y>g-4NEWvce6RWEAwi89=`=4V#)wtb+nD7z^WmF z377?QG&r%`P{cVH8ONWRQIU;qomEarqMC@&^OCymJe2KM!#xZo1%x zV;Smt*u2mvU~)~on2?!bilF@}RAPJ~ z8h4zxX!!&K0)9_$+>RpFM9zS6W~X)Wsx;n zZ;(U<581mKM<)W)`%&gxD(o(XEz_two3R;Uaq3=?KDsP)M`u!i{W$leNE~FgQbkKk zg(+2@fpFw&z|U>Fc9xi{oCUJ*lB{~v=C&ei-S*+&t#+>>VZpBi=KEwZceF%VsO0MeFT0#jG*h?Jrsj8@0$+Y=j6i;kQ~LW}lWB5}@ID^9&nPP~ zQaXirY!P&N6z&xQ2`1WIQeEeZ&`K0cx=k0Cog!U`DNb~jkDEVR#;2bo_9O35wkBY2 z8#e8<*FWCr%Ksu1$=6cKF+8J?eKyw1#w4*fsy(S}E}iF}`kA;4 zH!Z`Payqw61?8szL=GzV#s+z_!?Y9yK$LMWgRbu%z))*H`YtmUyik8_Y>}u5ES_f! zcg2Fw&&DZhV>~gO{7pvD_z@f)jN$MOz8!;396na!FrG>ZCKOsp@3mbST4@H7jm~QM zn~z+4kD})1da8!cg8-hC`%E4Mx!q8*4@|OGkz{9yWLuQAH9wmT+qClM{7?=+O%Gl9 zB2``%;n|pm%`c0`1k-Jk_m^pa!|{uP(f-CdV92e(WK;wTN*jG<+Ef82_Pnl>N?B$x zolV1GPq{T$(mFWn?8Vm^@KNzLviqf3>jz9*>}ruu=e#t{8`yFn5Wl z83v^G@QO}j-)Q6I3GMr^55Aa9S3NxW@f@F2IOb} zQiBT+ux|YlXxw)#z#m;Ws*bRhob49?ncWjg%;QK5!D*@|>0fd~W zlRp~flOPBrAUqs8MvNqh3`0@w2NS@+!9YL|3>pG~AR!nC2mu6wmq3C5f0? zqYFDAFGv4u|C=4InAL~N5^WF$mJ!^REMnwve^k67D5%iEgB! z)j*Oug^{?vISxz?iHGnMNL)uO$)F|IsUe55Q;`e#&kzKP2h6KZsnT|XbyO9DJrbq* zO=CC-q5`;B3_sn5c;^bxRiP9KeNq?^5#JVUFG;pMY8`I9E;tQc<1sLBnJEzE(n0a4 zOd;ZYypl{~egTg)Vl>YUfkoWZcN{8EoZNzgxS%(s+)If&i#rMz0n|l`<3`Ydb~KoK z2b|Y*h>{&y1_%rBwog%Q9ibex6J^`a!w6sp%K-lEkC-W)jta(jS37gF-eWh8SuQLN zFlyGZfnKON96OK(BddBoNA-dN?7@<$W{bhB;KVx^?DRI~C=`5--Eus;Vl^Be5pg-7 zNG|4vguw4OjI^bJ^1TT<`e zjou5=Zrr5?0~`k>O;w$O+*qI>jYNAs-z2vynp-@q_XwXvPHenc7+QEx)J9$q_>LUG zn$`O1%0@WF_EN02CW^;KZUy&(+$Vbs66j*VxJN`aqxb-^`}4>s#P6R4!fW=cv9ust zyI6{X-I*E}VwYG5)iuJXv3MbKm93l#Q+P9t^FCHUm&RuiEK4JF1sYpJiK{T$lzCYr z$rO!D2zFkyMJQU0K%?B1QPj_95c5giAniYe?#lRM@ZBg9aYj3kT3I8FL|K9@ zMt#h4$#`#mWJ3MW3&{O z?K5*~<~t>vKO@P+_(dD2#K>XL{l!`U1sm(1pbrjYhVgmI1Tl>8gl!tZ%PJc$55|lr zHbN<k?@iyA|%K^OUr(6EL>^dH@(nhW}!Fh4H1SoF{x{+pzl-srllZYD>PzUog~l zMVC|bqZb`9O1J?2)GROBB^u26r`U61?i{t&1Dg(G7iSmL;pr(Ap~yWK<^Pn9=AyLf zz+C)=S){F{5yi^MtL_Psy47A-<-#>zx#jt0F8Tt>7V`}<1OqFdT5?j0@3$h_wD^#U zU0VDSHnFF-$YjS^6pTxT;eCmfWiRS3_*q@VQlS*DdB6@1f{Dr zPqYQ`1NHhfKb>f8(17k}YM?oByWj^k-Z-#xiJt%@uRQ4w_g) z04X4PG!v@`TaN3EV0}SK3$n^lp_B>&CQ^n^R1`DxvJ;XD=>6|X<}9(SU|7Sgx^Xp8 zB|bzdAp}NhQkxRX6zoQe%H#M-2{mAT)yF20+=|d7+Jawy7>0bQg(Oy@7u_QduThP} z7(!6wzmS6q{U8w`YS|iiStj&@%nZVXJVGXiA<^?En>k0G>oXMMm-eqH_p?Es3X}#Y$ae$ z|4LBG8zSQ3ixhVd(Kk8+5nVa4WSxgN=o2k!2mDx~Gcvg!&o^g@`2f2QAzR=TGQ428WJsg%gG2d0H(a>hgKH;)uIGsluvzV5~ohkCsrM^yEf0j zU`$pB39D~AX9y`G9dPKZOM7Ty07b^X%wkuuU{?qvAhA$5vjaAV)(mLChNX!##KV99 zw&w5$n+6`rMzD)gtaNMHjtP_sTiNgp(B6^S76;$``6Gd*kZV*L(3oG&=InX7a(Cd zLjQDyY6hL*q|%5*lvZR=b)EN3E-HLB+or9z>}H zf+=c7e**P|Pb#WJLglOsJu!-6`%@`lpA7qjQ==+aO!Yj522qMYaFU|2F(l!r`kSFC z<5}i4^7J4d6ZA05@4Os_Cpc`TFqBy%H&EY|VLnjMqu%Ta3>d-ia!XpaGrWkUo(|FP zuU%*dR|<@pZ&m8?Q}*N+8g+~K47b4)O9)U;K`!0Yz!@% zifINfdSy%D{#9UM=oebvgQj#F`S7h1=na1yR%Nj9*-#<9@%87)hmPX{M;u|oVnK_) z!~lbfENP01=>;p{`x2*OVQI%nS2inGw+F*r9t^`J!$kf8#SI2-(wS+Rz>X!@=C1e} zKyBdPm98trLjqKa@TBfOF#;Ti%dkaPz2g3$dO0&6LY^~kj(nfELl=l*H1AJ~0SZGd zq1g<>G{x#luy=nE+YGUc=v@)s!& z4+cggV<%KmyaE`dsyBL0B@L=l38?~5)e)=0h?G~-s_9cJ3teKDGZtr!pnjt=KQ%*| z+)s4zf_`~GKcqU|a8r_k2gxw2dBQu*Qe`=Yr$TtxHt4rNI6?x#5yN+jGe$JZ7}`;v zQw>98%rIQ>u`|v9fa3t-^jGfpeF~;=z4d^(X8uv$kx^O)Aatd?qBXFpf2MEvSz_4Z zby*FVUH|$Q27D~BXaR1tS`t>uv|%@3vn< z!$7?ncxGN(k8$m1q4TK7ptj4pbAR#r%D#ixeoR~9f)<#SxOiq1oU$wxlyrqeFt(g* ztkwRpb!9pk{HCg%)zE{^X)%MvR;i6t-Rc(g9j`0#o{> zG|`XnTmE_aUL=hhHAq7P<_|R1@WVPna?f4z^9llzUjCAf|LrKclR}l-Kk5>9f0<^| znIq3dP5p{5tiG`2XaAClegYLrdO)8_rxO8`IDg7;!ngC%C6*5af9sxPMH;kBO#?h; zC`J$WJ+}?>%XP|I6PBr6Pk2zTUZTo3(d4>mR@AWpxniHhSrT2)Hv8dyl8}R%7?Tj<6%1cMyxP}k2y za?%YwnA_}y#zPV*FdT^w!^g-^QFj;gY#>Ua@Y1J%9{Xm*u#hs)Jca;a!~$u!5LC}A z1hk3?2%ZCg%1vZ&ccxOSF?j{ zjGUj8&;YeSeBfrK03S$BCZLD>e0VPQ(+JMoRE7X_0$f~NPjg&$GIla^b~0skZe(e5 zW^`|EWn^%6GIexwUv6h|Z+CQPh6|{}Kdk{{AP6K7Fhpc}Bo0L>2;|%L0TY10fPesj zK%gKH2o3=RffU=Sc92oMno+g)i4Bfe=FI&GLyfRRx}r(AnJ zMy*cGy3FOr#0lGw;*&3;P0b5L0qk|d8aRljHENa7!4B=wdM!tj_qY1zps)Sa?T5d` z?}cID;!ti=%Mu3y$Rpw!f)S!0p<*a^#mhjT*N7%;^7#koks7KQ>qVa8pv;!kNk9jj zIR|{ert3{qJrvodH}YoC7+$}SX1cdMo}9a&+nw#|FHAq)CF8d4-_Px}LM*Omw1W{d z1eoWbfPtrmSw`lKB!8`>(t}1}l^(6KgLn)4^;4$+dGad%hQnny`IkbuC&#}8bcpdU zF2eo}|NhOqukdgALZE8)o?j z(*Cyg>u_d&sj|Ov79G_A>~BzyPkcQ91mJ28{wJe3!ibKjrl(0Y3qN(n*S7^3?i~Z!ee7V#V)oLS;ipMH>Peuq#{d9&BLBmfXI9xi&dZ(IcEDZ zJCwr{>-k!YDGJ`OZDk>)VDPhDZlQ9+-D_<&6!g>0u^)Of&Z`^+G`^LSJG_;DpC%G&h5O2AzKU$w)0IoXv1yVGbR& z`{F2ZQUGd&52N>tfl<>U)4PV5hUJ)hU5H53l2g`iHl)QoYQNXw(Stpx^}~Ud1hrra z#0{vevmb;%?dr`S;-}4xzfI%Q`uO0E&HSWQH<+ELb>@LujClBfFAY0w>!-6MG#6a* zy_o0&&BZo2M9)}gVMy41rD;4=OG4JPhQN)=wqJJ|2*K8%pi^i1pAw-H*F!Jtd&=WW z`&omR?~X|oY;$RIG8VO^%|(Ylvb5!M$`_WFXD_6$v@Sw{Xd(S=rL7gyRh1UI51WWp zzmn2EdR|E6<~w5Cb2Z}!UBVLWR~kSHbG`3FdW%2i!Gn6v~bLp z7-BE!l~nyv!(uin>Tz0R6)9$4RfAZP4aRWNPKp7uZnn)VoBM%;;eP{jRK@(wNRxmW z@&)`1K9+m?I1S80d|!)xK_qXoREqeN|I6AL-zSyI_7h@gN;;oJ=I4k77-pr3Gh4z; zY(m=|prM8xrm-hP=v`ygiN>{r%=tA3-($4^J)6W3Xrd;$v-%bc1vJ5ZltxugYfK4+Du95-RIlqN)WcB-szh4Z1`hY`q zCfRMlg%2_8@F}(6!=Y@TvY4y@3qJQZRGw@hL&jx}QP)H`m#(p8C`#!{ zK348>o_S?wzEaAw|6KPq^9)#wtjD5MW{iD*bTuyUf*hFqMO|NEJIR!J zUul%OXX_`%^7{fDrk9T{xSTKVBDJOPPx&It8p8fZzWxb3M-{@6Yjc+%?9>qfk-O02 zF7PfY+)?4KsK9CNc6sH_dz6bsrtLP>pl1z2g49jBbQ0(hDFadi+HI-Q0;cf^z!J%> zXyiMgow~7UTkJZ~4&*!RE@{Sd`2aGsOb!_nDm#6hWnE(YCvG>$yB!KRUi=u{DbgDv zIxPjObfD>1ns(mE`xufv2y=Hw7MDto1U}tfX>?KD7Gd3VKP{1Kb2f@D!^CNkHkoc_ z)QpYPw@or6NYNb%ATM=44=h%$t;xZ~k^@KmpIaSnF3o}sBA+{PYP^?qne$oa&NH#6 zn>iN;J&|)8iqYlfEjp-kgosL^4e6k{A4tek^OiZ;94Fur#0`=X;Es-$OPz?AOy46J z3;mT$B6rr}JmqQ0;rNGv{( zKM2XY$qp;&6Yk6=md3>-L6;hr@KM_0vS09s9uZb$wx!~7)td9gH)aHlxX=jm`WK&f zlYh8db;VWLktxS9+-W?4-XNDGtZ=vNh`H(XB%2OyeK4s&KwIl;7F;3gp&=EbcqA^m zKjb9KdpmFgxNITJ`u1=4RD*G4O7yS`o*om2Tp&6*z8ZNmY?Z|r(PBC*r|iA=xAp4lc0tqgPco{lon-}G~TP4!Ydv>*Vj_tuVq}+79Mr4gNUwayDyk_h+-Q~4A>5T9C zmp1$4+Wg(r0oO+9e7v=aN>4&;T+?1VwsNr<`Ig$%ZZvrH{28a_pQGKk^ zY1f9bgt6jrVs(->0bIZ3B5m`fuu}M~q;<5FQtPtA)m|{z3#r)SfzfVn25IF>7o8Gq zHnQCQa)$!uq5ZZa2Bqb5;3(oCk6F^%jYQ}RD@n|y*=qh>Njf^@P_#$?DjP9nZqs=w z7*g3c7oN17lnpCD;v-4coCQtZma}oPNoreP>dh{YFe|X0+GbBl3QKAnX)Vv9W__ed zqXM)e)1le#SKgE;g6%_SvY*8facq!R)9yti{<8Nm#F;SBM++}IR>n^vKBga3ipBH) zr`55nX#J>@I)q8T@3dtdDm%)!J7qg2r(f*-aFl_vW8%hb4mM!uWbLH}@XC8Zuw)NJ z4&;TZC#xj8iv&5d^R7Q*O?jK}vA;ZK40GZr;bF^&$Lv;<*WYsvAn zCQ&kdoN?>9U=5cN3%0++oV5PmlIDSZk}4)lQYVU6A)Ouho1pJQn}7w~#loWj=tv9-`3Hmq}1F6ZNZwGuU-R*yC=GaU#GcH zj;t%Bnc?)91~@gLb4nx7Pdd{)4+s#DP>+rJDxYR7I)FtD}7;aa>o&l zNY8?6_lZye+XZ{_t|L&ckPU?1DK-H6JI1)5^C=tJdkrb%YuC1g(3 z!TV|e>FK*W?m-4rJ;?RUBKl#pYsPdw?JFF#_Y%DI7`pX_DA%SsD-NCy2z&niP~rfh z(>0|)8qnZ7z?(`w3>5%f^u(GQ|FS-26#10(h5xrl!FkQCddnWrQr|(i1FcdYVPa)Z zrw_TuUi}4M`t<(RwJq)rw1(b-xJ^wr?$^u-8+u4^&8Z~ z;5JLFG0^bGS4Ru_BNRCMR;}(bzDolr<13d&tf}~Nq15Us!QT|@w@r*?amO)zKlPYL z^f7h9X`##Kj!1fB|0AEv*MmkB=<-~`_=!7>)3^AA!G4Z__JoB38i8@K4&r{aU!UeuGVfPH&JDYvLyO5#C!mu`tTo z{FNucgQO@4Z)8F&0%XMig2)>gaL)rEgrX?fuB{avX_>|o=Pm$R)Jpw_5CY^kR??rF z<6{)IXKn53c^k>|ndEl*y1m!fe(7q+e}TfQ+hVu%H9IE}(&Qj*mQOWeXsegMx(tf(w8Ffdha60RsR6fHnXE1ONa700HCx0DuC(h@dc1&=lS61KId_qXU=b z!UHr1l(}5+>5j0B4(S*jq7Z^xdQQhEjw*FIyAyny=-@8V0VL7E9?=1(=zQ#h=y3W& z2Z*}-M*rs=b3o!_oB-dw#zLbII_QWykMGBXN*x>tyU7K7xvc;Q6L`fEGJ=hohjS1w z2lTvxYa5WnVh&=@;q){?dJc{i3FXyD2|NeBA8X>$#enELkVII};IhkoJRufW2;KeS zu{1f{?+nN}%rNcogOMKaFPdHBC~%GAh&LB5C^d>M!BG)|bHbOWGg z=?mEDl0)Y!H_ai7=_hB57_8)GjQbq(jbar3PLWgasDRMG;J5n_2=8&2?LxyGa+wm~ z{-iGl+Vd_z6nJC1og6Ng!?KNggCmNJjjc$WFyJTjbH5954EM&*-VLqf&rG2FTT5%P ziLc8_xY0%M?=165;4YLy1@dk_IUvj&o*dATWqhDAIZ%HT5SJXrEP;;2m{9MGCURoCQ`4ndE6y`VGZO2NO zCdOltkbB-W8oZra0W+f!+PSUNTjVXYE8*?Jjzxvt?u^(>9nY-?4{Ww1=Ry7`dfS9- za+pwX$Zrsy;nAXSn44d$hoUUHVLCwY^Nzk3XDWUNrtqDITq_dpc)*GX>g>p-xJecG zbpConn9^%`t%KP*V}w?)as!}fxeu*X^H(r#@+&Ux33p@G=9eX|oMJ0x!1`(1v#ja3y@gK*1HY zT~FdrmZnga@GNrYcMrGvg(8dm0MK?a?&xX0<8ny}YXqevHq>tippr2cxgX;id)qNN zYx?VfQ@epi>lof--1WekIBuECk${o1l~Xcu>|LI{WlLIuxfLCODFTE40j^<(BS>(z zTA+iA9zqTv7mTUqy6Ay-*n=>!fKyN$dZ_p*$C@YJnWO!3nU&*mSV7Ns6!0Fwy}zEj zZvpAeLtxg`dwHnIA6b?2&Rl5A0B$MKRDid5)&m?zBq|^BDsRU(o zuBH+gW0``5b|q((LpA7q`hLR-riB%VXrB%JVlH&-mR|+3z6xT09Kv1&Jp18u#MD3#jG4d6r*uwj79s=8A6v2D6`vMunqW=kRCV2lr z6v$qN00$_!4zHuN!bgXKqL~&PX@gJr4Dt5GT{DNXkly662A%&Za^HeZA9MVhpo7O0 zf%ibC|8ngw(7`WWBW;dhNy*{8F;ALu*5NZOMZ>emG)M^ESpch%P=Aj1DCST$nfp2C zYxu+n&WZAy`8k#qPP^$vWGmQ|OPX;~^g!Q}3Yqh+LZPS6%N)mrEiQ@0*Gn}6$ZtUas-FjlR1n|kHz{k;VahwV8 z5y41i3ObNCrQ<*n4%?p?aPs$ERYS*Mws!wc?rokTlK6sIpU5r2Q2HCaeK}GMX+n z|H1o>Dl?iPA)TyLp;t!ssTg)SREj2wE`gF=AWVs+)iTBH{Q6 z%@2v=WQ}j#Grkpu8{!+!AIS$9&Ltg*pfciLs9%#^iQ?>V?5a2Z`APlx#cY6Cs8L8^ z&AYcsXsPbg0{idAyU@GwaeVnmAafdDKdAZRZe)1mAHAneHi&6xM$!&pxqT9}QUoc= zzXQ@AJt!rQ{@$3xjo8J_<)nV&CW8J9sHg(S4-HICr`?9saTpMKN55yqe;?7m7nd9?3>_U-oCR_lIzMuF`Lf=3`W8k9egcIE6XmZKJbgd@ zpcywBDdM?Dnq-yZ653IJw@L!$4?{1)$m{LPB?nQh$y^(>F5LZM(}a&TkN$(lCkJBe z0|#2|u3~-|TLCFfvpzqZhw+z(QOVAtE2$3S)N~k0Di$yt#os)y}2@u3UC%D7Jh^Idd0HRmp^v_BS5D?S#HB%#u^7^*9@Ip)o{BtMb5?b@W2BD!n7M$Nh43K;Dm-D`3XdleosE7DP}boazQ9i;(uINj=w;8j3x=?7kC&~`>xwB6sz1X zWI@&3lZdb;d>J(fu?`MuMvE9MtaQu#Aclb~@_|Zjvc5LMy`y2-qK3DR@E`4Rim%=z zB8&P&uEwe%RH5(Ps{f6yV+q-hdTz6 zxRyFrBRaVeU5`_O8u7K}5mPN?8VCI(j@bzo`6L>2avqyTfBoGb;^CIzqYeV9!(XHz zWsE*BGWc4^OnmzS%zPBEf`2cB;v*7F&apY!@>7D8={7gX!+X;9g zc@_kENWQ|G5qACepTV)k8i=U-yN#) zmoSG)iU$(Pmyq~-YLJBhmqwi=S2^S#Zm0h~mLc@Ud&*>l$K9UTNI|0LmNn40fJeQz0x7jEg%3;F)$42 z>#X)#tS2^C$1T{XR|z4{>=fkjhDPHJp({6{A9%z1cf*auKfwGoex`~GVXF{{66r>D z_HwN|R5^fS=i~T>ji4}S2vLRSA-8LajAS?hx%OEv)lC2`6=OkcGY|7FvUPAOpkeDI zZ7|be+o(Rlqb4WWx6$k-3?_WE30GZPr1@a99YfQwv?;u9DR~jhd(+e~kC0st?3DwN zs3}HD(g(U@7k>&RKB9BFPeC1i)s|eA$*0-zE?^3R93=zGB~>!~Nd*FA2e})(S|VTS zmt2NwL%qOQM z*V4L1QLWO=4VTsC=sfAz$T{+FB6K1n!bsr*1@^|nkfN-s8^6C!oXC!bg^5eUY^XWv zDe4FJ2P8^HCs;ctSuL3&tF3~ooaOp~e|2rTQ!kDAnkZv_TFXl9j_5v33*Y_SzF;|mgnr>o_@13$A z*&dCUOQFbj6kBW-70I~^7KX}+CiJ7L$QxKNs!EiL9>+vm7~EBW;`~#_pke7Kh}o?J?mXGBqX>7u-p06 zu<#VfU8GC>h(zxmVWS{Zaof3aa=tt?j&ROR3!;w$C3qkh<>nMPqgEuxwcuCIB1AU; z^w9qEf&J98kij*AA*)8}x|S}KHC}?R!(gsN*k3CGnIaE&cjEhkDXPUlAI5g&`Z0YZ zg6r$|Yl*{)&z|;r2o-ORVmEYfoE%d-gd%{X)wzbX{}rV569P4Vz=9_Tay?tTaB9E=%*PQhBQVyUGNyj74XEZ5^$ zj>D~UF;02@7&Qo`&2gH$Y8RbYN*(Y91BM-(ZMZ5NEMpMEO$J=SghyD(_Z|0v;Rm>EKE)CZuw9yi6qYPo(z;zw8$Z#kc22H&x2olyE0M-9RWXgQwv+r zvC)rFYt?v_E31-D9zV}6E#G?B=XW;PpJ2iw7C!iN(*>C2lgnNDpkVzsCz*eZ1aEDzRxgCr*}*9Be#V1HK-m9i{2EV@nNeRS1vLTZYWDNMd}4#4G~yIDW~m;8ep)7Hgf4@B*}i|2kv(G2_6=> z7O4;;!Ah|p+^E=Oi||-J zAT6*A)$-g<2f6sITF<826B$n1_+K_?EBc}}4J;XFY$8Ugc=GOq=~Us`_Fg+dYsu#1 z$ofq-=lxWHPEXKko8i%=lBuMoj$m^R0hbT#@Tkk8S7CZF*4hS86Xl?Q>0u}sU;ENC z7Mu{mS+oI&Cw_%&@Vo=Sq-PGk-r@IpDEGf0HuR!3^a{-mC_~TS(O&Po-mb6|L{i5M z0O74G4s3bqGE*!NY4H|{Viotjb^%E&&eu{8EG6TZ1`fi+mvHe5nXnP50i~h&EjdWy z23t!5dA+OAoEn4&{*9a1;1e6XLc|OX?eJ+*hJ%LYq%z=tNnBvV-HI3sM+R{oc_~L) zB550L2WDUk+AT3-+=t0=o{?mL%5$?eu?zR&C|ilZs+wS-=VxHxh>4?600XN43^`0! zX=bB}&6qC;%|&7YP1C5L9F*b00LtOb+{35+RgVikfba9Ybwx~e7ie0lBkreTy9ij% zjXA^xYun!f62ba_4uR!A%mCuwg+hFlMoF2fK>r7sFDU-sy~CHB-_+}W3y6L~C=j0g zRbB&7Lsn0wdf?Qt%rSJ+cNWff9?Ez2&dy*!|8;1uW2ID~Q8}!aT+7ZtT+qtCco5(y zP^qU0*#XCE!Sr*XqVc^B@4y@BXJZ-ORT$pQzw%hBn{d4KuU?$$ z$bLzBNAwh%-Ku9tPtQ)$dL&!r@$AMI7CJBS$TyCyjv{|{cJH?xkA%_?s>DNi>WDwmOu3NNO8{=92Fj-GYnw6OGa(NJ9vyX zDi#2nhh-0-LIfdx%tH0HRui%it~6yEeSQ}b{HK2B@Wr=2`#e2&0em` zhx!j={>Pwr*5RYfLyl{?VQV=?YdN|vgs_&IJ?d0-Z@9W{CA8lktVJ&9tX6E@FfQ)e zMmOALV%pp=a5qFTx#8CPtZiQG+!^qwdYNOvT=@2y_RNN97_UrJnlARP?qhy0J&ax0 zs14AxhA)rQ;j3ZBCmG&lGtFKJ;mS?@ISpe!+uK(CrC~JFzrM%ft}V@VshVMJ$lwF3 zu*Uvc=uET+u8Tde(TH_J!$^_rH;BP$_A~rypJ8A=!}&eK3+frJIM1*to?$fa3@f!W zyn3DCQaZ!tq{%rH31_(fX86?oj%~mq`xT3?6*w|{?eB7Mrh0>pIcWDa34w%DFZzQC z&q}d0uDV#RBi!Wm`S*=*$Tq@#s3ey0yp2tvN{Q+;N4Mo++Q;(~1j7KbMG_EzeL%!} z|L=02aoz>d(qy>9z1PM))AvosEd5?@(h_M2n+;4+3!iD0iNv z0}cQL0to;F0D1rb3y(EWQYYv4I=GlPlFo)x4Kkn6~3wZ!t zK%&1cgfdSlM@?S8CQRq1|MyU?sk*KH-)9IgD!dBw93p#w7X(d+%-nTKMD>a5K5>INg9sq+fARgO`o{; z0(XZU5Ii`_t`~)CrBB87Td{n&f{9=p(Vuwt2EjJ;Ezc(^gZaXeU7UWfS@hw)paVsp zU+ZF(5Pjf}dx#ZlBGPA(UI2d_av+$V`U0_}HHUT}bRoOE?4?-kE8S4hK);bxPkYbN}Z^1 zyclMXM7;yF=*9FjV<5D8}El{O9>kf7DfIQky5 zVQ{SCko0|%^h_MRKiW_RHykBKcVg-W4L3hVll}=5>A687JvboJGr%D|5Qg-Oi*1DT z1Wk!o575NJ*VKW~%-&yo5g&8LnY}w3ztL13>k@t+|4r9Yub72yGUMB19^$uX>Chj^ z{j_u&9WuKF`L(o$q1#qVC)x2pnY8o}zicGb(ox8Oj4EwuUK_^)gy7Qqa6I@{j_Lc` zj5xaL~--hGT?G%Mw5Ii(R|LKE>mFc@Kt(3Gu*zCR>;iK5P{CX*2V}!pBr9qyCWjbH< z7+AtGr9ZV-_m&u7wrg|SwI-tuW5WzMpS~9Ue>K+f>)0uO+!$h}1az0k9HvgY_Pwzd z-0puK#}r#(QY}>YjAS*Mh!j} zTzh86kLbc*V@ZFQq`F>1@>6y~fIUH>=sT68{?}|3!Qc;={;wMAWajp?8M3)6h|;Rc z_PkIUG?T=D-Z=(>ZI^H9M*W70er-MGAkGZtmyXD2PdB)Q+6>Dh+60{11>YT@hc8J5 zf2L-M%jtZ*ac}|V@ppF$!(FR!lRg@IAl3RIS0~c^LaXn38 zuB@DEIV2D1R+p{hPlWmx2WutQfZY7stVjrl$N?lyd~x4Hs_fdpYAl*#Yl4eh<9mW%ysSc+@V0`Ri|J`lLNZhv8L zwmswt7wzKd4rrL7KDN*}9R5p#jFu4YYPf(jWT~~-Lwb#k*su#kFv5QE8jNn4HFd5~ z#Xw*O5;IO_?9tVTeKge%kY{X+2BX)asd2VKhX4PzLJS%1VoD+C)m9)1=!a`7*q9OS_9#I_VfqwVM|W}(muq{f0bsw(A%Y9@L>IZFYrnT4_Y^ya`K7)TbCUfk`8XUQ* z?AfiuJJ-};3d1sw7x2{cGx(*?U<9ARYtLXn&)^XiO?U>AmRRwGTPnWVX@^mmU=_>Q3J+8+grDf z(lnI&h`6{X06vcPsY=GA-D_uDk>U3!duWj0vvTW{p}{)iC-f4eLeAIvTjE7PhFU5h zV+@8-Vm=VQc?lG9NN|j66HtRquNn8A7xu>RnJsoQ#XWFo7(=?#-gyLx%Q+XB`ngV4 zXaI`Rlp#Q>c29ng`a)}Qe)Uv(`|K3_ih93aP;8GMf|Go3H|^;KtKM9G z;p6g~`kQtV251V5=49P&7Drd3C~XHm8_#1sX8!~lvRvdi96 zo;j-+ZFOL!Dn>tqD!tfIpkkG=7%jCQL|u+!)3?n*sXJj+xB(%U*pVNzTP#?;Q2zA0Azl|M(Vm6x9RTJGf zun%~c*S)ED*zNp>{gX)45*&N%#~KzZu6vh{U2^ffCeTk{6lg`0^5eOhWk;% z2jL|r(W3;&3{F*&z333;lWhSKKGB1-vMjKCmumbx!ip_vcFGv^3|4}Qk%b|@YogpB zo!Zwq80F8$YH58_4@bM}gQ2I>KYTC-$u}O9x{aDv0Q;#N`l;*(0k=NJ^C`i20xPrh>UfNg=Ay@msJi zQ%RPoc$KL{kaJ9?LflbAG4)Gr6>%KFHYzr3to&FqkF*4 z$pN9sSv}2D0$HIlQ_1=PX7Kw_P7Y5$$y5#eqmWh<%JNAzW@AMO7#S!iY-{F@(Nh26 z8c5--mwVpBBOlNc=}?|aYP%^F7+>&K6z03RQ#~L!Kj2c>0=^QrA^FLE-s7ei0~ z7wd&eB}pC+jl~Q?PTakS2fX$!;)!p{fj2M2r|A%Ek0-BN8z?*&EHOjeAjH|bu<+tJ zp=fRwzN2q@5V}}B9BqRx+Fo3R1M4EM2-l9LvA6(B&(4E~3;BO^GYL9yvGKjD=OErd z{lI7ixanCwdT2b=q%_q8F4bg`Y640!K}5vX6nknyJ2h!c+)Yge3In8ln0};(v(h{&WO4HrZ&?<6C4gFOdaxpe-*7zND1eIZ}A4-j@egXLo4tt8u0BntPGO{ zD!H(nl7C9Kr+eV1S;agNPbX!MDodAX)asPUrgBL!xk|$lI8r6O@LVFo67t4ichlD0 zie68^5`U|*R)G&}wT{j}9nEP1-e!X++_&BjCpY=Uk+&7%NxVCKL!P8+C35*zKP47{ zL>a84l8`H~66e|J!ePx5V>82IMrX`Hl*yW(6>zz#Z$!6f3XH%4C8*nR>30vhkpGLH z9Tv6SWs@}t2HW_HiM9wXpBP-~Bm{Y^>qMZg+3UK4%2|!2m5Zev)0D5Zqeph4jjXlz zdNVR^bimBjdUmrigV_vBg9%bshU<$gJLd~Kv?^Q-aNuh&SM`EYN5N!uNv?=$L3Adf zg7>!i4hWK35X|@J3*mp2=LhEZ@-UWALkswX$JNoCN?*t-j8ums6?rov7Tn>; z=`zI_iV5Q+s~1CQ1D11t)ac4JHUlKB;y$7wk|gp39( zu%MYk_p|HN6H3GcCBpLJNYt#Jul-C@xl>y=s1ToJNm|bA-poLHmPI0}m%~TJsZF!& zjMjPs#ekOyG^IddSmErH_EZm9R=7?)ct!Xq?8je2#j-MJp4DkGsnucG(l-&A!3+7y zkM}NQ4je@M+^}yap8KzCp!OGKAiuKbzOup`>fbAy+bhfF>6JZk7OD5nDtV!*H;|tG zDC<**T_IHxISz{})tq_-e3Ue1I{@GuxdeDWl4?V)Sb7)5ItD=nmX#JUnPC04 z9$+ZSbNqln3=u&x{FHIy2cn;UuwP)||GIpqOzDWYqOvva`$!VCiCaLi>UTp`!Z{2o ziT3td_x1bM3^N5Fymbk@to1o{%U&_J!!K>$voR0wT0n`Tmc$fW(xpp-Oi zeGilAsoeV^4R^A7KLouWCT5WLBZH=8xck9D*9^NK5IZ93KZkq-Jp6Ay>{e{zt^Uh4 z4~SE#xL@Ls8GO7d@f=k9j~vzN!uepJfjLk!Mj)w_$$ami^>=+^e;HSbxWkOrgrYj6 z@p=iNx=l7LXv2-P$z51zL zfLO1SQIGh1!gS{3{kUe++RsA(c_TJWFL}PGp%a$}=^C=iPXYxiG6)WAGiy)G@RtfT zc$KPlTsmG7%ggz{OlcBBz<`d^zSzQ}?@8~7CpCQtn*->bz;SEz>7L&_5jL1gix)05 ztBMyc|NVpF1yrU@Hv;`=)TYL;y4ir5Jl9y6elT14Da$Obf=~+_{avs-9LJqicNay6 zF1r?I|0lb+YiR;6-7AAnMnFpFBIh)|F%17)0VLiU3+c{Q0YO2=LA*)6BY6|vV$ezS zNjifO7}N;yhv}i*pp34fuC}!JXnN5uz&3wtQp(OneP(`u!>1OwT$*f` z<^|SLPK`F10PcQf^?iU_C{q1q>|9mCTOdoYHli*rpve~Oxj^bnICV<6 zs|>^dp*|bx_NPTG+bJcJmd60JE6AJ{6o+D#PIN5**z55*$)&Up(mBY^NGOp-!RIDvq$h{lRZSd04#p~xq9%Es z;bRo_QW>OnC?M(wd~GFmF^rXz{Od%UHQGYKVVJ{zjEKwFo&Of46iK+aj(-QpZ-Q4fvi8l#UIotYlt zP%+uRje?LyD!hBId&n*~)aoCQAG$C;cnx)pdvcv>t=beH-Ti>ZUJPhsJi@mb!5wA*90FCIwy$IVI znCTL5Zi45;9I|(#1)U!FcPMUyNhh8y0FF4?oe|P5i{Q z0~>D1F@HmOqpfAt6Uv=dPfUvjMQRG44tjTju?XIYO2EQ1yH0d_?0^o(JaPIHT-`Cv zKdT)$cMQt|J_UocXWK}5YbVCTX(nJ!f9S@=z{#huR*a$dn9N69(VBAQ^ARUa2K-}Q z%Xw<+){dY#Y&LScaEJVa>3Z4%tY2-N>$vFJ!HA6t+ur>lK@SMW9SLaUt(r^&rpl2Z z5$rj{kszq4dXYSQ%tP8pAjc_}JB1{?xvG&+p}3_#Fw5DXro_1^Um{$M=Gur1cYPDX zAE%JY@_pb)hS58?0S3X+)q?wFn6;3k+n<~nB1zX_H*z3dM!a5x4va+q#{darS$pu! zc$giC=^$D-&{?0ihf1$tGa-4G&ZkI?RL%iZmY{0Xi%~pqN@M9ROho8lBHX}4B!7uW zeTiW2C1T|zV(tLjqkT0!?@;s@>=OKFn}6 zkVyh$&BOI*RrPTZw&pv+PTtRB{uaQC# zq2?t#P$A!O0|FI>tweK!G>XF1^it&qDN++PSXO%w`Z0_NxI*ktr}RyI z$lO@)ksGutRk#hI;gQ(`84{SS4tEsxXUHl5iftCML)B+h=#moYJL+j{YHZ1pl$1E~ z8i^-y$t`jZP=b+H4v+Lm5>(hkO?qH~M9}f<9Oyy?Fr*%tuntHw^m$w$w^2}ASsilR zIwITk0Zu`~C?p{2%D?Lf{{1jJaZp(9gDA|ZR09|KSLBGMAcvJkf>j}rQ|16Jf(3;O z-C;&pvhDF0&K>Hckme3zFpsg^0ju1hqTGRFa)*WF4l8m81jrrM;|>bJ(^>T2Ot9jn1Fjz)+oh&MZRp0;mqWZ-k%h?h(II2uAde2g9UWM1h^T%O^rHZj z0y1)9Y;R(3a$$K$X=zPQR8?0+NJdgqL1c1oY-w&%Y-~qmX=!9oP-%w>th2v4Lm&`H zKw#j2;n6@8jzfu{B|luk=zE{K$Uc7IL+}Uav6eo}$ame@H^6%b04mu7VBhUu=oZNW zirWo4!vUy|?B?qaB+jdf8BALV3C@apRGmfsKMb7YUIF8l#vQqzYj!SnoVR}4hRi|k z>k4vjc!Vi|S3)skyZ|RH;-Osf#!R4YUrx90+)gD@OJH{KghxOo#|NZgFR*5}FtH)D zURbAYG=Gahu9*gB5<23cxW6VJ3$!gADK-1(gBT@!MgG~w-gTvqNAd+3S))H7Ins)K zRwtvOaUjKB{j($hDLS#A_$3j57M9p=J^umCB=$oavc=`AbRTsIV2s$aSHM>|vU~Yc zhJJ2>9FLukQhI%!;ab%@2 z)N2^(_q6%DP*0V56zVPQ#Ym`clIMv~?~Gw?vbnVi(@F2|6a5!92-+UfKq_!X!J z6R0N;J1iKa0MtwTKYhi9;_W+r`so#aWkSRN_>2~l`6E4j7wIc=NcZ%Ld-}$iP=#vY zqPnAEi_ z{}t5N{K7I6SsttC=wUH$$=dsi3F}KtDV8xm!60ZLh#3_6_<6`eahyA?-bhIiqM>%w zD21Vt`VI>0hLMB3!v8S5_%)TBDP4n1_Wdx-5+Vty*p-l~RjkYAnfNaX=MKoZ>%+oU zA7NK%Gz;PPrqC_cVIQL`+F_r177rjLQAAb!+WA&d1G|UeOlw2utbBrSKI?NBtMy_% z>}-A{83^4|9O`OGD_qkh`mxOqg>wB{vX9TQ(&b9{Vh>^BVSyJ6et4LGy6~YZx0yE+ zQs{ZiDP(tY2@a4e4;&V-b{Je65IOk5CyV234uP~wv3OuxYV-B*WsKwhbY z{`X=(xRY9h>oJJ1U7HiBEAbt8S>s;?E|E|MUtvGbVKMd?E((NaR?QrS4AvG8V~y$& z)U{(YJ<4JJ$zgMy1$He%4g&-^j9pIC<1nMKq%+B2biG&Y4btLp*#E$+T|QyJ!C`7G zD;N*}G;o-FbNp#*_&1ELsn(4;j8>RE1M0w>$}gE&9DMyz6E|rcqKDh+HUwK(spv6{ zRfoMvo+7An2=zRgCke7)%!f}dI~4kJP7}wc*`r@Oj>7fGDLERZqjKf?!X-lD53Z$~ zyr2B@mi0M?h8i~d7%H?!JaySXrD1J~Ju!ZC3CT+LWFDo8h8^rrntPPUpkMYgjP5h6 zJC=F2G;q!^^th4Cn@#&ZJ)s#^_faD^KAjdqhu(FVtDCb<8o83Hf-?=n^dK<*Z1n#(Ec#&Bw45|olq+)#@jv3=kVcmPAu-dEL{67iXWsgi;v=p_0?;vxW zsC%(htwH6dG)no<<vWNjbv==61-0ffR#Uy-gmUixByKPHvFLQYYJCh1EAz?oXx&z>HA=?i-(@J=I$ ze0H|A%TfxH`0}9_{p>4f0I)@Tgpta4FhEot3vn7B3!(muEZfGAUt@-ej6Yxs*e^8c zi$c6Un&E=u1M@~N!{I6?DKF!pX{|zC^-KMa<`|DjLU`wrKpnsixq#m<#e^@@usMaW zm1M1o=;K5QE6=mZ2EaF4#J7_|lsq5OfPE5a;;f{6-r%z;FZJy25m~Bo8&&xrg!xXA z*9!;z57W@KQj%YY4PMj92t)?5rt+Xn(q}6FHu~RT)0@Y`hHrss{B>@;QTfZ}T|VV+ zArjz@>)MXXio4@dmhh0S@BSKXJFHl#X;TvcexbC)^i30gDd3k8Ncq&ILRq7QMOs#J zc-GBOu<*DW9r9KJ?MS3`0VB=F=~aWIw#>Rnw9#fCDT8`fTa8 za`h+#A*$=k;S^#G^gpinAD=1yX%YKz>47hU4qHhMTaAbHZrI8M`qKj{Ix|I`jxB7s zedN({lMOn19ko9hX0R2fvc-7Iw_qzi ziG>hsDZkSP8(Ekn;Ag_5U{k#C(9mel1Yu#+S=454f*& z$!qLuQNr=m*K%5#dvI(Bm>loyy%yX87yg3RYlYTpmDG8K(`!}fwKlRzKl55gKg;=c z@mewQS`DlVNZ+;UQsDNP`nqeWbV6!rT^qDr3lvnt|Lj_VnLM#(x_aE2nbfshTLA+` z*FuP{W$M=CoX@plGy4fZ8qT$dUp%X;5P$(gq#tsvF!L+(9?E{kwZg@<2EWdK;aV@@ zTAN!=V$pA{xNj{(;IiODh|0c2F(>Zf zrcxCld$rbYwN_~sO0`zwwlNscFKZeYX)SrQ*66geDg(dG(oZsQeDB2c#=u2bcQNq) zGbKG5%Q4Mh+0WR zt>VXRxh0ZJ4}2!bP>X}1R&$}&Xt-6Vb-&YN>QiMEz|XeTGZp-b^mbsHB^UJo02mE^ zt+Yh5=F?f`8JhUhdiV+Sy5EPNHx-10ecm!4e}UAXYGhvtD~|1KVMCFF01|Vh4C3Rh z@A0M#xD~JuWI^CM4G_k#K~{uh;$K!R6&2J-17pl(WG}E1yzD!zbp}zwiLbUvLOmzm z9V{KW3{67kcw)_gndcl|^+#Lz`Wmsq+cKu5a`;N!iHPJBsfgzQj4BP6 z4g+w_L-==Yg$33>_1W|d=-*&S~sB!yDfF z6Wx_Y^GYyB2)841`gw=|p{Q}?z$C6Enhm;d?iJ}>CTse%nxc7T0R5Fh65bjMTWSa@ zW&n`Jm^6YhXWLSF92-6VwmC=L{1qs=4fx~YY!fv9pWI{^_a0{P1C*?@{tseCq*`jZ zPjn8@bSIkP$zcwB@`egV5h^shcu}X7sH^Cw#WaJ{L`5q%3NKT<0>>HD|3z8)IhKs$ zAl7m7%L${DRsV-GP*y1|?J5k)&qI|m5nrZ%g;zUP z1s$up9IFnFRb#l}V>DLDyPuxAhWWH*ptib08GJq+pR-vIfb6UISHEVdte@Y#tKZU) zR5cS1xdK#$mo3o_NaqIgj!ss?&^sj=T@?%2Vg_aRDLA3uc&j$N6M zOUXzVH$ z<1xzX*tgh|#Ak4eo!q`?o$klHLyg(%`EW7fmr<9l z^m4x#(_S<)h`OED7^6;%fs`iL%my*q;Hl5fJ*j28A=%&8K}!7Op^;?@6z&UawGgbk{6ns3gX|lJ3fXpLpcPtQE~GI+YhiAi zn|>HI_cZG_H9Md+!^ZyqtdBst1IeFt$vL{9`bPprk?cv0%o<)f>RF%r1rO#m<=+hP>0%1-2Nm5M;A{o$qs-24I$j5C=y>S>Kej)3Cm_=0_B*@;I{=7O&4Xa!X?) zNawT6I)$3zX32PH#*&V_B3W1C4KZtn{y0X={x!*c1ZI5{m)W1{N?WnPF6)>eLzguG zKxGEtvQ`Bi>!$nbRW&g!Dl*}imZL$cJI;rFy@wA!AQTg;qyrkOMB|NAnT4#9`$Ly_ zAIM;s?(OCDZgZQc-lst0N^0-Rh8O!0IydYO2T%r>;(1e@(h~mscD;xqi2s4aN@KvBDbvu|81H*GiW5V)m5?+7#=4c1)%>{ z)Yz{)8}}C+x5-uU%iaysrMoD=l=(*5Zczyq#doD}$jQJZA@sYbWC$h_~@L)zVuQ zg3lI$nrq9x2L_R;ycDxds15;rT(0xb2ArvuU9(U!)tThPPkNoD8jy$+BZQKQWZ!M& zt&N{-J$;$_R640XsfOw?l@VcX`=m>-R3AhTZ;mhMXm)dc|NBjHE-^DvHgfWmnAg8o zLUZHoQfOeL95C+_agBhrR>VMCpZ(JtGes6y12_^0IKxX0bE&ro^;$#}sp2b#6D8;i zuJAR1#o$+Wc8K!fTx_qMQXiO$D$$TO5FXlLwvFu3<_fKO-kb{B$-u}7ovk0X2 zp-f-U4)#k8L&U%ZXWCU>=RfG%+doW%Xy(q!4b*8$n7O((OjX{)jq;|THj#^Si#65k zD!3Vtmb#$*Ble&$Bri0Vi^Wi(U&#;z4c(FqPx!~-y2udHjORArZV>bl(hwsU#|1UO zL&Q-82w_$VKx{EgeI@Z(&#DBc&H4zo2{Lk1NGqLFy!m8<9|y^DniE-zL~33f#QV(N z;ggo(jCx3ECIL-iC2hwVzTHv!1HE6%u>hdx)GG#g_Xi=1V$e2WE_#yy)kt8_byGba za+*zP%z4(ss&Si~o%LC)XunKBS^5YH+)J(?{mw1fQ1#>1Gzvn&iZ+L|Zc89Y%R>-4 zWfYY4p(>jwNF=BhQP3aKsfMATv`|oC_a&ugKMM)SD4HN;4r28$e|4cASSb2)H3>ym z%GE#sMZ?a1)6D2|dGIch*+<>Dbgf*7LPxtfqDxgR0?p|nO+p7E<`LQw`Bi^8fDp+c zKSZu1fWUR3-pElvfP(NJK*R$vmC70UjZ2tM4QcMPbkZt61yK$GRUQLYh5~|Bn-92i zbtoafRL3ffwzjID34BTUI@^LE0}74#Cv^1_y6zKt@(F$K34Qg1F7t%`ctY)FR-2S^5 zBL8=>-~!;ai3s4uu^qsR0;B-1$EyKelneyCXtN1;eL5EKLKrjP#R21h*X8yBFDxVi zFWy@TycQx9crj=z@M7_}z-za~z>5>2ffr@&23`-64!o$e9(d6{K=As?hTw(h7{QBE zmISYh4img^*%Q2YI#Tdj*s9>g0Aaz4CAI~xZQ}(mjw}pb6dW>mJzi($8D_7Xmg1FAj|zye@R*!Ha<4gBOMJ+J%{jI6$qpSSKv!#`NAM1CjS}3)Iq+^DlVH zx`#jVXJHGnE*%1NnJC7z-Q*va`Hhf3)tPl?{kAmgg;mcZ8S1P@Uwp&n{Hzl%qYj|; z5hmN!PowqG%WfX6$ACo>3uA6e<&ct;oH&-;qb^irS`*c9{@ z($QQAW8pnr-vLudbF~5fOn6-d zdmGsMn>O*fP-GNiOf)TrmB+f{jzdi?@7hcOCa}D-7Fwul8c8Ma(6hF(a%8^F(#?tJ z>k>~uPkxAy(!=+4Vv}8a&KR+aH+Q^o81HB{31zd zu%8$NxZlC94i?@ocec;omIcWw2|Ln~ed&;|<1fT1XV@#5ENR%0Khx+x$X5B3moC3I z(`KW3y22E(dx^hHV<)!I*wsPy*6FX%I9#%$naQWnzpsWX7DFOcYK7K&EX}D2USs}R z*iWBn?|5{`WrDX7Hh{CV^-g=>ApQ7#$h+!1E(lYPp<%a%<}^4x*1gZ z*~O~-nJ>9Klnd%>3SrTnUX{DbP>#KLWRHLo0Pe|UfvsDNOYJmF?VDysQ#;Osnp;XZ zQ@3-w2v_?nj%()&VeW;YAq*8wFWuT*5qST~io?40xF==gwb$>=Kq%m@v@&)x<&#OmZ`-5b z+j<{tN~ZtU=Fs|G2M`6+$Hbx*71O^L1bd<%u&30oJwVhE_S>YidfX_@YoDpug%xDXxKE z@F0{EMEv&HZowJEZ)6q$_T}q?=x`v2AWK-$h^=Wb8e;!yCg9_F&$6lxA2ihTAq)== z_rQ6U3GFn4%D%^xeLP^o)+EerFpncfudVSnIghy~O`B8HHG!rWM?!s9e>(f2v;rk1 zSfsc^TosEIv0l^XDv_g6RS`>qzyW;AEfzDHIbkFQP#;d>(EW?3z7>HAvoatyst@0< za0ZEcoYvV76@meD6ux@&_xr=;-g$N_x9pKTIKssAh8k+tA+g*u%|ci~Nssjmwl2qU zeeYr08^i*>A5@KEG@yZ&}LzZ1% z^dRonz6t&S#ozhuuK*0r>TpDUGlY(-k^zpmVDF^V-^5A}rEoHNU zf9FJVWZiY;?{Qc9GVLN%n2Ggr?WS?m5@EjglmGml zFDp|7-uyl%FuUgj4$I(4@Ck$B1V5Ts^3jr{l#UomzPyd)~7qV3_|CPCqTh%>|{LC?d=QpRH@L4LRx zeo;HrUlM42Nf7 zDnt^*<8?z<7YHVHn>6MZg=~iVNmaR$D@lCLD<|B*+D^H6Bey6^InZ0zq4)|7xJ)AB zSNlp^N+A_Y#bI|}#VeNB(3+*XM%_pij{+~{lp~MQUAt)`PT~_!N}*q4i3fRPTDp{Y zU;^esi8lsbkMod&m9{4c4B&Rw($P13kxsn?!KuuH%s+l``WqLDnCV@H_h4;F{BtO2 z0@3{gnRw65>*e*)S3H+7IOIoLVDo-qX*o3 zzeWeFoJs))PK$Mh9-x}$DWk~#X0GD`esN4!+srS`pFrQ`pWJzTr%^CqP;N{##DcVZ z)DYKJ_%BL(2X*acAw4U>7;Z)OPX3k~zwuF#U+<;>Kav2v-UYkf#WK1=5;UhUr`~vC zeYLK@V)YJzK$Uqc8Bo20D67#c^=<&>V9{1I<9O3hy6=C{)Jg9=lkAceFm8X*yOt4; zz=+Mp=KCleQ=9a?M>=6STFGa{Cj`e5j_ALdmj*3bO#}$A*1eBw+`w)N1fLgtG|Nlwz~?D0YTjWNRtyJ&gM~`k+%D zAJBBTmCh|G`JL&2sBF%3qgJ_zj)bCLsmK*d^i8}+6UnBj`akad(;ElV{r9hf4Qb%U zW>xyALGpDV9Bb+DzCm2&M+bq-VdR-ArdyLv$LGY-nbmIfV4B1`y`(eNS6bOp(dr(!)5k92J*k3A`|ADpu%q11Q(qA9P&ZF@1YN1WKS= znRtz8EA$-~GQYb#WIBVPesht$iYD9tTAzwy`>u0}=}|z#&4P7Sqze0JDu&c7IUD7! zd;gS5{^v>lwwAmP3$ghtkrs*;lKC z5o>l3OWWu4XpMr4X$RM3KA1*{L*1!GZs2KP^MbEOQHJ-zXR+B73U;_LQCo)-nk8MG zqDRT7*w5CBE|*8ce6$`8iykfQw?7mz|CG|!gnHckNyv?b>VDY7H54f$aqcSb*8n$l zNP3)5Q$)^ig~^T>2?avW3mZkTga-HQ2RFfzv>^X;-?syak_vBz)ow z7=}_mXU!PCqHA)*adJf|N1bK}3X67V0(4KKdgxN%^XosP&;Sxn`>f|@{C%Ksk~NW@= zXG2%ZjMuK&W8i0s_o|n_M&$G$9RJktq=e`bux$LLM{$CTAF|0wtTAE8PEluF+lG^G!>W|dsi`2$vwdt~a zUn^RE8(O}e<0z8vZ%jJ}U7#hP_h%C=%t-3X+tAOaAg{Ve)-FcHT`AQ)&4Si zUb_|i%UFgO2L&+1G^YV(=*wurcz~}K5KJxK0BtIxQ2RWn{TAc?f7&}}5AiHX~C82_hpduM_ z{@*G3TclSUCMfgBB81sStEN$sf0*Vs8?B|&8MoKC@IvI;!2X1o>M&6am_fk1#UC-+ zgAehS?=ae133k{;I|QojK5$_T+e3whBo~WT?yf%M$jw7^B-0gbh4wjI(M&lH(`Oy3 zEV!+gAFlT42$GCu@K2d3N%1Ybu~08GijUE+A{W8=*2U)nb047iU>jNd#8-U0vfuE; zXLsUvQpkYs_>+=2agQ*>?q|21{&GJXVH<1t+0*s-4aCeDq-*wc*2&e1LEk9URK(4Z zeMZ?8ng?5nlc+G?0n_^x4TSO8qGCRa&#ZFMKkwPgAB(p|1$t)j_TT&6-}+K)(AB>8 zCeLgEb7fqE5UBF!A_$ydkuV1_7=&OD!tMbQNFWdd5)cA~AVCNagh+5gP!k{o z2myv5D1s!Slc@t4lL%An(Zyt!Fcd7^A89g`2L{yOB7i1?AkDD!66^F5Nx6G7r@RSb zfwh;L17+&NEuq@3(QhS`s|7Nd5)g3YIK>^bxYYLetf)N@QCh)i9YZcEZAW1yE8u)j z0%(J?3JYOO5Z4TChdQP;vi@BNQ>f!hAPW^z>2{%IFj*NV-+#gspEB%~CSa9dC6rEa z35=I;MFv0xRl0pgK~_k8@d!IFrspFF-ucIq)BUG?o7@>%&;s$2ek94x8Kip{uC0j; zG3^)r7CYUXv3LH&clW#|uwYxN^d!)|#jN zm60cPDh_G+Sk0n!cdy$>zR7!85pYgeGi%nI69Fb8)On}Xx_&(;t`{2)!G2D#7EvTR zF8)F%q8Ym;tRD+xbb{~3k1eYDkWSP{Cteh61pK8FGo}+NdsEX1r!qee!kKdr)8STN z%|QXK6F`NJIjH8rRPdV+QHFrfiL^=>Mg!WsC)&Y|Xn^K6y7DG8&<&w)Q_~DLarFrn zs_qQ*?)#}_Ct^Sv?rd^ZO^)fp}4Szk30!SV?w%?_1yeP zFJoF?5f@;6W|K`zSEY&ihAU z`MfkBg%U#Immmd(>cImclh4Z(QqUN2zlIddgy*}izVgUKijRVz>a(mbH8PJHsvO=o z-RQxVIpL8)|H%>9nwQwjcX;%{ih-H~v5Au64Y+hNSYf26B?Srkk*nk?XYF){OmBpr1Ujuvb-Y4{iK7%-wr4a5 z{$m!?eoQG6Ma`Sx;6`l`i4aTst`cO8N^!5fIZjd9Hy|a zL<(;T7E_FiDQXguF~v*3I`%6v1z_b*@yty-&c=Xr`6>nTcpWnZs)7tlZKeP}+fxkI znSvyb3Bd1}Lit#yXqI7!=aNjuOH&ws7R*mmFh?Jxmo){{h3(DRo`rhr90_^1@VXQf z^nf-6ztS9##Ym$E+!W4H@Z_doK({QG++wr@>KlSGp+JWerifDk;1v0&f88UTLQfdk zdA|8ZFLfil(;GHUfq=g6uz@nimD%{C&?z3imF^@1F%U87`nnVeXa%Rb_;0hu+bOby ziaJDpQCQ4BD)Bsp7tv~e6q>LSuM`bK*+k}}IS@2lU=|JnU>yP~IKJ<(MqH!=6`#b% z6;xziE;Ojn|GXBJg8&RF4=@8)sGt&bmZ1Xj?{Px~R_(D=~*64|t z_HWsj+)0IvxFH^;f-@FkDHZe~njc>2O>^q(i`=DRuAqgfcs)8}Ii{j%sehkd+R3zO zD&(*m-$G9+yhaoZTz=eAh}!@y7>Q3I*H#7z&O;TZz7}^%6DX>9Ro~lSrtIJ zru6Y}8ZL9I;xZ5}@4z)zg*v(_yjq|sTalBzDokw?{zbHp8oLMmqV1AZ5G5b(zUaD? zISG=q;1@oG6(Ekh1b=R~6kMaZ1D~X)kF)6{j#m!Ha=uTE{Qau1bogD!0_1 zt@uM*p^+Fi?{}keB5F*O7T(|L>2jBRfw`+RWA0)TGILke(%c0;Z0?G+H+KP$oV&(b zb?%x=Ja?6C&t1*u=dOSXbeHoHx=WxA-8C;ocd<;PyWR%rE)<${S2?$I7mzaDRo9&E zD$u99{#evqp(%A&IHS7D=&ZU6fv)ZKZ^`Zo5wp7r?b%%_B<(KOp=x(k58GYfwC%36dAkdQ!rfKg$lV2{b9YrZb$6Ah z-CZw2@a}5dyt~54-d(bo?=Ar2ch}JUy9-DH?<%~4caaI&d>}6&$g51zXv> z1_8p(zN>qi?{X;5cO@Pz8+D$wTYgv2aekL{MZar|D(?9hWM=?KS7mf`Z*XO9 zX@oMU<4*@O5TJkn!9>JESu7BUgCb#oe-nT}Kmq|82m}EJ0)c=a7zl0zf`LFV2(%Fd z5(Iz<1{PvegfMRoZYfQx{XttCj#C9|<4G>*Ze75$1)mjDrA`SU2IJlrX_KoX3rz?@ z`vc)8#Thpcaf<~lI?;CqN{~G5(HVvKPH2b0XRo9X`xH>~@H_;4`nXNgPcxhIY(z=DH#({bBRZA^$Ayl~#BO8o$As9iR;)PgPNVj_- zkpDP60`nJw?TH@v1q?BKEy9H%jsV3h#~qxr@N6b`eB*wXApbKQXu^oCWr*Ur4NHau zYBWPY*H9r+;oS@Y$o_v94;td(>(22lK*;|Uu~0W6lT+cW(95K3qN@mVJW(|etMPB{ zKNTqbVZ(9<(+&3{WE&~a=Q>1q9ikc7A%H*NZP!li5H$hS_^g1Y;sOZ4 zPQ@Fu|9qLGRuZFBh=r7wKN!2?yHR$v53#uqae5yj;UpD5gs&jqc?y}COkqXe8!8ls z*Q`7HL)0Lk&i%m8PP*j%-oK;JW(}WxhP!19`W8{DEQrWtPR}4hQ$1*(`Og@@gwFJ- z+(!rEkRby8lM3~92qOlaXeG^Cgk)CJuvqX>EgfC<4XiQ|G42o6gG21%meoYPo3BrN6@wk0tUi*`uZ@Yrl`24^A$#5>CD zDWGlu*K(6tBFdRLGHnvKFcCVmqm1ZyHr2Ds`gog^(8k2Pl_!SkJTdlx1DJ% z1SpWQY5ixiXZUeN?=0&W4 z?%)sr2k4KO5Z+QV!EuY2OHP{+7XleW9vG1|f)P6qtAJw-Mlf74LWm2@z!-r99lbEY z{#9cHjqtN?^f_!WT1Ve-{0VF0v5&iqSooxWBur++U1r2;e0$9ZR;k@LIGqs%M$^uS z+}Ex!@1De>`v7~n_%6Vt#d_Hg1w=+8{P9K0jrQB6bCMgQxkdz-g!(-T4@RxMo1vBGJ?9$#8u)3{1GcJ z?0HJ_iXT7m#*v_}H)I(G#fGNW<(|5nFu9z;f&%(R^zi`L@LDSs zAP*)P%O!~;fy#?IVEBX*BFkR*B=6x7p1v4KrJ@ua(o}h+42hKNKg1wpgbZ!3B<5En zX%IEIBzb!PKffeeEeZd&V2_gt6fOzQ;3F2ybQ{O+vcZ-Cn#2;hV`4nBI+nY_7zlQ` zO&glv+}PwF|G--r@^P@!jEZ0hPr(u^n26)|>XQieNyIl4Bvm`WxHI$xDB+)Q+R|?| zA&LZcR8V42ZC1eitO=5Y`z3NxL#}{1^&PdnZfH|Ml)|Ei1&Z`6$mA>p({X*d?sx_MZjzSLD`<5vICV(27 z6jPI7kzQg3#=frYEDH(mT5jca;^OkQ^NYd-pfm`^qWXxs;eEO0O(mjF<|i)CA0V(d zRl+0~x3MD9ZGxt?Kx1V(_GMH30Bm}MvtH!S{p|H)(P%PES7!U&?^xulRJM&6oSw~RyI*b zA{kbuWyPuej3o*;&!`1U5?KQIH0Cp!p_nC1c;OF6;9h91*a(3v@!q;4>M3TVs(MCD zshUYk7~4ysnU+8sS~bNIK81LC(W@m2JDk3eIAPAZ&VuqgnH*`YFc3rJo6TSJ`$!GV zu=L7$WyY^rxCA#`A_OhK6PH*Omw-MFpbS0=$SMz$)ms)5MsJh@N&{Q`0U*lLg{Q>( zM8#!Y;D@U3Mt|jz0;R_x=#O@Px zXW|U?+-}0JnNwtFxe0_FO(=g2<~DIX$a70=Vgjp)w^8V9;_)p7%gb)hPCN(~ii$dW zL|EGHoS+{;+fU6|z5?hU+ zDC@YY`0jcU_DrqqJqZAa)ckSh@K4rvi8vBn8c^Iz-KlDc0PAndEi;mMMZw~DkinKM;<)7G6^Dd;#es5(Vhrw= ze2fe73UaD}1&{i}!pF7Qlk2*qc8Xrx0LeiaMfc_qP9O(-&~Q%MDM1g*cL{oTjNm28 z1R)xtR4E}@iSG9Hp1b5^2sR!N7;*b8hG;*9rS8TtOB``mo9~C6ChCkqN-Q_)ERaNm}$#gt0DJOr|QeS0oZF5+DwbB4D0cB>XR|PSsX1;;uGT z))|Sy=ZAl4ByPTU)aLFVe-XiN90`yy8BxV~yg0eZNpRSY1mwl_+j=OF#Azturz*hx zIwZl;F-;pvBvG^%uPL^R7fD#d`Q}tx++4UxBAWpmqf3^);@gZtQB6ja#JS%nz`>W4 z1X0}wQ`JEwYb8PXTEk}{6+Il#-chvXAbV*^1aygm{@9YhTw+C>0T!1;tYB7Bu_8=X z@{Z&<4NnJ{mo0UHzCa59@)C-YaE2~7`9Nc364^3|=p6ExNzj=|>?Y{ukt5V`%>nj; zRc3#-5ic1ieh^WU$f-#jzI4x;gxi_~b!B$gBmkKs+Q!z|v`NIx5#gV}%QH8Ls++`s z;y7;-o=J(>gg-cmqC9h;LKi{(QlKKkItk`FiFS72#*P!*NdTgG`zemg6L$G2exC%J z_(?=HQyI#1>`!7WO%k87OvMhydx{961b>^YU+}O4ZEBHNmD;cv&%U&ygzaoxJxcf( zk?^BLIv?br&Hjv*lt@Bf!Supizgc3sfjuukTd;*%UbvxZiMJhmyzne6<&Wm-3}UPD zKe{+PlbQ)G;qWanW7meG3~J-clz{-z6hNOT0H=ba9Cjm8p)<ZBj$^`0Px?C9>L6AuXV=0p)d}8rs(p)iszH_VRMTwGQ>_WDry2@!Pc_|%PxUH8pK7jI-=|s* z(N8rw(w}OX0if!w$$+Y{8v|8KED5ScMi^90LmpK9Q%R^Ays1#N-3LR}7|VvLF^q?* z*Q5|tqd_F9_FYa?4YH`HT4QNZ_0|HTYWQbH)#{Cnsu7tSReKp8RgX76s-~$4sajVm zQZ*!lq-p}Sr0V6&N!2`9l&S?QDpk`^u2juuv{XG4b*UP00aLa5F{WxRiJ7W_NSdl| zA8e||I^I+*ZOEw_J*iVQmBCZ>PqU|LV8>6@c9}p`<0*uy#wdrXUQrZPjgT~|+5>@9 zHSjU1YAwW4)tgABsv!_gRjVeSszyviRqZWGRXu8;sv7KnXntawBbTv3kG9_3>)3GP zmEHu|Li`M}!79c)z~O_6OC_pMpmKU>PS>!dY`_wU5gjR#XPBjTWrXewlL?~|nGLCA zyUfWq#WKjT%AB~_HN>I~6r&AnjW$egloXKYQtw;)Xzp9-A`)+(#eti6UL!BsvScD3K+>7d7r}x$7iLUS&cwR|bO#FEp>5G(qdO=Z z8;>2}$$j$2#u*KG^>BB5$M6dgXT8j zP)P2EhX>EHp?tZLuvdrsteb{g{6`9 zG^g^Qb~}Dh9?^50za2UbjrG9w5JVbunzZe%l3G;2-lE%D^a4bm)t(&i3j_{u$c#SF zm|oF)q}M^sJn(t(GY0~gVUI(eRqBCTIq@`eexsgx2y3IFdN`j%{kJu^`!5m@84a`S zgJQ}$)Qmj1^Ya@x&)G^$buIPD?yn(?Au7=V!2K$#d~g^w2Byph9((u9hm->TujYdSHpj=p z_5aO>3g-jyZwcjo=R?KwA-qLz0sVYn0zAzg=mSnJ4l^0rXAxnB7@3K7by)|QT<1Sf zrdmt6%BT->BqebhXjF#Dy=NaJNWfQ^3^QFkc!bGP-UlXDYzGr3Oz{{$3?6S%o7we) z$iL99;+FZL{I=6pG_ib8b<=h-emyce&^H_<333_WtY#$ORUG62?#kju`SYi8FK))yK&>tpowmPf= z;QoNNF}gq4@v6Z41Aw;}SHnNl{>PbRo-kEU{()Bh0aUavn}6^SX=`TIAp(AmSKN8! z5`C+(5K2vuyZsKyf7p!a_;XumX;h%~8(AwBg0A_CY91VmS#WtW0_L%NoLfaGvy3WuZP0RGrMxQ4L>gk!=eTN`~!))2O) zJ?PD)SWk9O!#mi?)?zN!vQF)XA%>T72!vtaZ`Mjo82;90)_(oaWz1NRE0`}?!h5Y7 zUROr@JkA2}^C0+q17SaWg|*7RgrmB_+VQa|5yW8-J>Z{eOGk|NQ%&WmmJSI*>Ml<; z7C^ay93C_~TWqV5;D7=S>~~)##>rd5`Sn7jqabY32zynnf?i!gbnT+KN{pFmGW#tV zybH=wvfA{Kp^~z~lXuLA2kv!xz;5HPmj5F-adZUuek& zaW71SOJX4$sts0x-5?O=3jH&nz8S_38^`kq%8Ej|)q>8jBmR>h-;&du-Va(SFbcFA z2N~q#0k`4Pstd%>gOFBioo4(e)cFoilj#6E5ND`Rf0gNh7%IerSP0SKF#y_KAPajR zLWon+oKOSTfI|4oZ9rST8AXJgjAS+dP;zN+b!lmIb#8Qm2JhBML`%u z_5%_?5ZFNgfnXpA0fQh25kU}wga9E45CR0@5QL?8Moa8CW6HZhaThGwKtB2J0nvHr zmh%i{=V8x5z}3V-kRBSjvYIH4&RAh))>xGfvTODjnwB+mg1sr@9u3742+DCHhzzmLpceS3OhEY3qrY>0Joi$S4e=4fRQA$s zJ~!X?KqmChNujeLc#gnNjpi)Tf?$fMcReD=2g5~QmlD_jZIX(NpWybwnfeHzVMT=MW7V3@ zL86EC!Sg94Fa!9@QsQDC9Z`@jn9)5#0i3Vd2Q-QmZGHgzqCskpsJ>O#K7M`8`$wCD zqxC(PJCB+!Jrwk5U&GjglZ8lt2FSwVAEP_z}(Whowjzek8o*TPx={w1LXs$CzF!(IrIP_(c-tG6QV_w3|D;h%8O{ll^^vJ5TGYBJ4zm$`9*fzG-Aed##(Wg#>=5gUwx2c!{h|R6iT-O7?JEnS-Ek z|6dj@_8eUx>eY^Of^}Dfvi)0UN&E$3y^3l)^E&MeIN+Cv$RA9_zDsNkXWLPPTyc^G6{vQjCTVD*}52uNMs`wmWs%-6N4nYgd)0s z!EVSz1mR>5^-UuYQA2)x5`@3!BStTXGziRPB}CotV7x+z5UDi?s_PCSg&&x1<6Z)c zNn$)ZRH~ugZFG>)>C_h`UlPr+GeUzzf!aY=cMsJNJjn1s?V-NhI{AW#PblhZ3v1|t zcD0RAb}^&)AT<}oT)a2P9&;q+;+$LQpPt3+i`C~sNWGtpy?ZL98bY)hh%M4bbb$%_ zyB4D(;O+AYr9(*hd@kY(rxekA0uv}1Aw;VGx~eh;;a{> z=@cRX@a}?smNJ5DE(qN?ckyncAaq2t@%#vJX}Ay(*b@pA3iNfcipj{x*3M#oeE%lo zgbDGw4B$N~!bAFjp0QiG35m*pRe@et;i(vZn!l6$voJ$%D&iI^$qe8t&Bwm3j7wMa4!1@R1IWtf!E3{fTjJC?| z;Cth)VI|@!vW-5jh;PTp9A=w6)rTZxYhs*(IiAvND6`m`|ymgBYm=*9P#mO9Wj-pZM>bNLB zMJ@OP47Sfix?jLxt=Ji?k6Ipv#94q4@LPj;n1jqr~AdXoX*k$PwJL4=S;^FK}kA4qRZM%)Hl!yMQmCMAiv%(R30(*_A+l2Vz(d zjQBYV1%%_2#&n{@rRM3k_G4;VVWbV<`Y`kcmtjP~?x5*@{sbv_RhB6E{V>D`ZE$LU zX1UohGeFBkkWDFOTz7KqEk@ehTh_f86~h?O#xN5g|EK&H36P&4BTBMCMvj2yTk|7Q z6l@J+sAFs)$e5{s{o2B>uRIxv!0Rz--_7zCRz}L-$6hZlaeNVpS2!bF9f)FGGF@hinf+9pB zpwX^49q-jS8XrNyL+8Pr5TSe{>jlieQ}%T)FrG!cCbeV4GW;;75c&uN9W4Xev<#eo zL>%i|hU4HeaDAL)Z{;$C&1Jy8D~w_zdKsWZ6NN|vW?@7gBmp()0$hJOGMlkFI4-Rc9GkwMNmM*TfVS@d${pAjeeZh!^e zAojlK^8{?jAF!bipngN38MtlG^KVxXY&WyQkbFF4P7&P?Eo!lOqfy}=i;pWeS6;{A zS5QZXjrim(qmWHtE9)2RYv5Sm8R|APVnDt@-1iMG?J>EDw7PYK-pTgk<%ksSSt#^etfs`1UY?aY~G|oXQ|r)938k4TcU9m-!c>; z8OJmbSVxBXK9-kY>%9Y6*HfO?jaX1Q_`8N_IvsH8Awmy(MKJB-9B=J`e+p(?8k^kX zw%_NrtACYb>l~0eliRAidvGrZ!{^v0lh1OX5n*fmL${=}Au=^CuMHG&Vh#-);H!Y_EU<mY~Y&bO_#(!|7z%sC};@0~yQomXS?W#D;{u0JxTx#mG=@qAL>I85c$`}ChH zXFNhmNv!V&J>-}}Khkd>K- zI`i`G%v1mG?$yDdQNjZZ3J-V@@}(FaFf=@PQv}bUhX(*49xTdS!-xm1)g{iw?7{94 zNhcTNT&($vlM_<4FQ>tz|6B2tCBsmYOCD(PQq^QEfo5r3WO>l4<$>Ige$vTA43>_0 zFwL+gWk4pt6A;#>&}Xfb%W^v_=K%_x2b-A;_~Lmm(euFigOJD!dhjg@ATuL{; zCW_R!@8utr@+gx>6j>&L6ajlk5-{^z!W=e%%=6o7S3Vaf3|du@wV`drpRUSx25CpLuojyH~I)m^8L=w0( zKlPZj2(>pv*>H$Nu5P#_fw+Re^wW&4e7)j00tNdxj1jo1bUj7_`(diP%kBLSzAr+5cdmI2bt7qjx^&7JBdeLZifhtqR6qw`@bLqeD8T?#Vc2+kPSEnG zirfsRW5(mLYV`0EN8Ndn{4y-hNb;Ivf1Lv^t)XQ7f>&rn3=R?p!vVF|8N3`y1P%LB^*$i%Nq4mj;1|;=^?sMCj8X6!#*H8pNI` zc|{9x-2<&*4T8Vj*FnK<4t*Jlt;P9UDig6Aj#0V~ySchtYPh+S*`~%lvoTkZn@_WG zIMabUHM?G`sT-^mGzn`=a-KIfYrdhhu<`iIaZ8A6JW3DeZak#kcpyd&!SQeu@9A8Q zN7o#Wr(|KZ@!9;@aSq+*TE&CTugc?5W>GLMoj@iVej^suJ|0i6*8zb%N&|UN*!!{s zDCD7A$OGdhYRIG5SU({0D2`tmr&7hK&%Ps>TS1N11)B16Br$n3Y~5JNcp|vT!=-s0 zmceHyH7&#PEM|9Dd3YBSzG+{DvN*3gHx1k-vNz1RAOaH03OQqaxQ*g3dnUzQImM&# z_Z=0pL+TIt|1!DWL!fo^4u5JXa@^zdZVY}H<#D^2whT4`qN*YEWGK#ZOoVmJh*2~) zk=N;JeY6vcd{0_R>!;JqQU2|uwfFimZ!zg;1xYh;w1GIY9Fwbo>iq{d^=Jl(v-eHm z^gHMcH&X1|K-a}?5d;HPwEepZXZOUOuttwSGl~889Yg`EoMwgLY3mWVTO9omC3Idb%SRCmU zf*Gv>1P#VdmQjRB%D+$9BQX}u@&IXq2T2naz!eovl50t7Ofp-d;bUz@*g#BzlO-CQ zGJYY{G=rqWL98D7tY6T3yukx`zaX3AzypwFns#!^5y0%ka2OE2XH!9cyo*tOu|MMv zrsEF)@u;6t{vfsdVS~{d!V1iA&dw1D9{NUt9EZd+URlbx9$=A;qMp{(dzyo87#8** zp)LHx9?GDqwEp!$@0mRSzjAYD53<}NswT*rN)7sNogT(spZnMk-C9!eUlfrBEJ`BM_R7qf`HkO|Xj>7_bFO#6j1&3@B9Ge0Dz$E?B1vbAn12pFW z-)4y4gpgk7UP)om4ko9IYRoWk1~8@u=Hm=Jyy;5B5tCCXquwoZjVKjIjz8iBM&hz;M zYb~(aT7ZVb#kKGguQ2HElo4lgOGwy)K+7-$DO=D0Q4GQ!QF%IMR)4N6aCy9J(PaN3 zkYag}SaS|xG7BpN?PnG&K3=IX<4z522TdUs76lEe0f_slbeF$E+FEzSDVzw|LG32a zX`${EcVI!tL501=wCF$gx!56m-$51+a5r}F+K0z)yb6LO=!LR_AF#K)5lz~yQ)s#o zpv5S=>j(joCOs}17$yw%10E~NyT&u*%{oLq>(DZ=;*-|FgWf9zMsN0Y=gq%yq=1p| z;>c)nEDopM7X!H1pYO^FI-R=c_~mTU5wk7v7_wERS7I(W=@t$Gmv_pRGTYyfA833^ zb0sTI{!2>JWB|!d;;AkWrOM^fS0`a0CpPeiDjpn2;n5ZmUY0?k)emy$fX?1-F@x*} zf_@zP#{J;Y=K--XL_iF9o=ho-7NGOj0z7&J3!C1D(!C;godGF0cwc#&!+t|bM)Hzr z&}Hl#lj52N&B>*H?JfUv1wy6d#_a`#+*}~k)=Zm$&vgJs>^9p*_kF4r)-YiSt;4#( z@3k^x6~6yxKBjr=qOAV51IsdK%`&WVS)^J9@w*nKCjh~a{l6>V*S|<6tUZy=(-W_P zaLfJG5c3i_0`CHFXz_ff!nge?MC@Y2fDe29PXD5A z1uhVRo^8iS&eQg+AUT@qtv^Eq*oft!+u%l*h;Uq_n>YCU;J@8oTH)P0x2O+67U#7C ze@r@5@)e2lz5Is5a6qX`LGmn8}z?jmfbg8T&zJ}I0dC7V7*9LX|P7f>I8{yq75Zi%U3VYY4fMC}=t zKO=T}1OwE3%>E1g@<5bBxv)%u%LXK)OBOOfi)DKM<2%e zDa%2FiDY3Mo8-@-6GW$mHKBwZ(n_rGmHwv{{kf{6ob#Ja%j(`1o6_)H`VcD2Q5GX2 zGB>8We>18IqCW`^!l*$v4L>q={j1O%L;FKLbW+v;qUrQCHWc2P#)2s0P9tk+?20$) zZ6?RJmw5ox2BEOhUp5idMq~~;6$l#rlYD*C_Nw%pU@(~Adf}UzIgSzOK6I23mDNKq z&4?gKl2|$M`e;OadD>lxs&AxE!=uS?jhgX(K_OaA6NRpmD6Vz~S`wUB2Ql2$*AGFF zvG!_h=s6dbq)#3(FzKseh93V54WC zbq|lR=#h)CWJoPd34ODn`4L+$7fCyyNnU8^BCXmyMqKMA%6 z&#q5O*pB|c+HM!Ad5epE!*;G5tCNV)r=85n$i!vdIDK<(O=gwyD2MM|-oJun`c3;P zvrt%#=$c%Ws=v+W_%RbgJJ|?yR1tx~7 z5%Ey9s)9awB8&Uw|Hg|fotIH!c&zbBI@;Moz!q~HNs|@4OePc!fSyRRN7F3-x3~9|4+pmXTWfbN#YSf~m{vEvI;z05t#su+hN;>IT1mX!ju89Y$x)4iky15y1Wl*xS!+! zsodZ=`tolEsAi-50giplN%=V1dRoCmM=9Mmqrw-%VYRK}%)A~(e5h-qsy5QD8o)D= zSxBPo@UrqoDs4Cmt?O*~d>&CFZATFVU{k0)Fwp^?e&{)MReh7TrTo$TYu17Cqeq$@ zj0%v20$2`!oj-EePovE2{ek=K|Gp1YO~lB!&|h;URyaw+29(f7NJ;<-_F3XPw|bMf z$b*1jGm`$xi&4j(r6Wo_ZF%o@B>oSnEx#8=;`vdv<@kF@Jb~$I%g-fUE~!8q{(W*p zNL{mxfG;D9$9&J$QNw=D(keqzUHN&NA%#kh#mLz-G0M`UhNKIFfWWlLJzHt^>)saA zDQ@u(!AWZ4ZKTD$>=Te3l8M$pv0AVAN3(1MSh10IrrC_j_!1@0V;_;Uk|?rDFG(lF zMFiEnaUR+60p~fkYZejlxDu=op{)tR*3^w>p)u`yxSxRYfp)BU7$gg8zeW!~G%<$| z3aMo`HqyaDYU8iZLN$kXcw`4v?hbEf_At3|)ayGkV|7Z0esq3Dn3`5Ey9HX9U4yGX z+Jl$uv_kUY5TeuRNf)@zXgQJv_HQBBQQ-A(A;bWZ7&y!vP>5)AN2>+Z0VjllLk=yI zF;ysdZ;8NFGgsYts<>(7z5>soOEWkBldw7tIJ@ZdFx@xKb{;4%;N-vRJVXC8D3U?0R^20d-uwfmy={B7>28YNk|ci9{w zh}|du+G_eu^$*US(STN*ApjU~Q(=KhsPS_l1S1HAaZVA!kV1DJ5>OCOa0na%gn%JH z2&e=If*=GwL4pvV2*NTN0T10a2PMLLd6g(QH%BKF53b>hj$*7T*g6$gAJiDAkK}v* zVeJL5Q{P54b)TyFS zxV+*z>`L{|y1y}sRsJ)Scxn94PJIcEogYFIYQ-Iz;SX#*XfbBnxZ-N0dZ5pbi2S4y z2CWm_2ZEy;7MA4Dg{XLABf5M9o!h_#1FY%qxL~2R?05}4P2Cua08Nc6BXp);r zA$ja&OmU>|o&qz3yIBO{uc(F^YD&2W!WFz8YTI2(_)yoU-HE6+i*QDwqW9fOq7zC$ zKwlul&Jrr53jnCl5SKClAg=oYs>S!Al_`n}3JpRcmeEe=W5|7Xi&lWT$E5I8M+#ae z4DQl`)=>toms?KpjI0^;BufvNrqPi3IHgw$EzPI((~z( z{+mrorB5#raW*e?%L1SgwYM&R3Xme>Bj*y;jZMX5OMow8S*&Fogo1bzGRD_bHogI` z^tOHI;O0{`qZ;fhoA+SZB)$%|vTO#1Hgy#HLE1GA)vn1Qp|N>UciDU{7hBG^klyoD zmDnU&n2g^JS#NbF3+-ADY(Ss1(?`OFq`QjT-Uhb`2n1@F=cILy@5XT;LRuUBE#r;_ zLue%oG%(*s9^f=K$DkiCIjE;RaLkFDd}5FWH1J?5K z@{OXPJ%!nofhKD(0OWoGjlHdhBCyO87~!_5s?yBL#;DN@!~A}5h10C2wWUbJo8h?F50moTy50S2}O zKNkqh1a~?Wz+%AAN+ij(_I7vUzlFkfmAGOY z6ra=mge(O5WT50iqK>5ti|Y}8RF3;xZwneCo77$%Hk1`!niE80`_yGT`L@1I;+?yQ zeWyd#W=yHn6T!MXf{|qDmwd|30IkcA5mEs9DU6 zY7!9(kh5sZ`0Ym@VLNL1ZfMah=uWX<)Pk!dBV2_(wW?smRo=B?0~LiT(id};#|Kit zDBn^PV&QX_3O^C)h;U6EDglTcH!3M8&_n38o%s4XoR;aKbgd0g?b=8-Q)ub96z9;; zHk20t2wZ^P=phJ!!f+fy#25iVh_O8qNDw$ffFKwGga9Ex2&e=JK|;_HGzdZ?3`n3c zDG}P{{|68vLrz+fF@3ErD5K}wiv=4s-~1P?h_m1+v)3Z79c zc#<}F6>Fnmhe=3~^6&9bqz)rtrYFEHfcIC8jtatqG{nRf!b4TPbRu~<9{&wsNQky@ zbv$AK#xENUu z7t%o_e;o)%{Z&@KqGs62FzE=N1m48&u^1_WBe3So*MAEh&Fg2cC(%Eg%qZlGmUskjjF4-{!A&TY{gw^Ebdkp5HiX~o*KWQq;kf^NdU zWyVxnaEZ^@WQ`Zv_&OlqFl<5Wu72&V@PRSl;=dZlR=~+zyeJ0|baESHgQ4af4_Xn+ zSLc2^O5*nw>;}8*H|SJ*U^|w6bW~1x6+SpkDOL{f!is|FKSn+an-IoxaXMItxUciTX*F7o_vNm^jWMU zTU_+$ljd-wa}gA})*>DaY{@x6NKg@*+=B!^AomyO8O18SJ5Wk44jd5q&D?@+)x}|? zW(WQ>zWaTFqI}l7BE-dWEh-s+o6=HqU34}D{5i-ilWt`=C_Fpbcyx*IdyjV1KS0mXUt1NkBv z1Ee7hkmf@ab%5jpf?Ab}WMHX;^DzkZZZBe0tjAeFTt#fv`~&3YB9QKuzj*G1rVk0qR%;_e92<-je;sk1LpIZT3-O9>JQ2oRY& z`5sjwWZ$E8;I~`9$=}e9+-4vXb~lIkmzG8Ce%a>p4UKC*M+w&fCMGPTXTD5?jf`)g zw@-*l663g4zw|(21t~x7SLx!uJQzR;6N~PP*+)MnC+}%zLyWf{>#r2%@9E;Glec*M zObLifQ06S$Ocyz%^y7$1Cw+oc&SW%W|ntmNTK}DVB%K$ovq~I=uLejtM6^?F~4E@qD6+sLWshC*N{RE?-hyu&pGfYHIU+2_5OqXQ z)qrFPc(Wq`u(pFVKLqDg56S4zKbj{GDubuHCr{7u5F+R#e8Wpj0HL1%Zk@Pz{s_!5Ca@PL9(3C;;1oPcAj z0)e&P&7EZ2>*Q#{l=QzQ21u z%M^HL=t#0}%2n0_ftBHN^sE@No)Pai{r}wyqx>%b-qb3Vqb80Pn=I1kwp+6|dP~GX z@>~$3H~8}nACH8yFFqFpW?JM9s|3pUgq}a6pg&8)*pl>T5HWo6oPTsGRfN)sUSaW`#XuZr=otiW{3bx_5e3sE```KZ$9?`*INilL9&1H)<3Rw% z7+W9BFX3kuGZEOi(JujBlkwXqRQ9d_g9mIgv?5Gw>nYf9;<^%hq<`60y4hDdX(UCg zI8FN%QHhZ3UA{)a#IBH42VHmOpo3#?$G@-$O605A7!L*q7t{xtF|{OkFu8!fcgew^ zt!ktN001s<0MndKbECsZ!ICNoHe#mE$K{UHGya~UEQ~+glKJP1NLxu#-&S&xJFInY zB?m1PM0rYJIxrZLi`x2BZm6;oVC|Qi(7 zuSkT1_7twyKuS{-tlTA6g|}kSEMPB=W_-4~&f}ztOG)HeD=98H%6#!9R|#AFK2>$R zD8d=A>8VoSF5&%8AlQ-G((7qbZvyby@N`J60;CfFP*rebb#P>KVRC1Hu&D4E12F_A z5Jfp<6cHc<6(15nAPAfxc!!BZo|{L)3-9Eq=PX6;Lrnh~H;^t58S=mLi$@ z{%}~B-sLXxJJ!VX?MHTEtU|F)2ZZ?b!-j0(WePVi6cuwr)PtcIk)-fZn!8+fv4qt^ zLsex&7DU^9`}16-Buj!ndFNNh4g5t#Qm}NG(g2qCb$5JK0L>4p*ccJ1(aEv3Erby; z#fq2+IQ1D}B!Hg>FNJ>SXceiua?Vvmk3sfM=-I!q`0^?(@-uCzkS)PF7}x2iqK`j? zMxTNjXocknVTpJaWKFzs=H_KK??u)(-%VW3pne9Tu!A%js3Badid@wlwB8f}o7g_P z^ByNIJ55?|6j~gCz0&LthY6q6y2QkehY1LpMu0&^H_Z?WQx0(+ngu)8!TrsUzX_r_ zbwRakKQJ*`Ha)VHD&0-gCOM)@k(F3)H%GL?MvErkvj9DZ_kaLQT`K|pXE2pM z&MJy^VX`|ZgLA}{0E8Wmej-n~5-@cy_}EfweQpd<=aUO$@*;r|==%|lR|0W=#Y--n zMRnvY%*e(xFGK>dx-{Ne5H$&ucj;L{S_oyHSHP}8W);e_;-QrkMeF3bsVsvkzYYgo zOC&}Y4w@sD7)|^+_l_@?n1!D};55h`R6MqGapZMhbmgFeGz0(`Rc>J+@SjogXS{v_ zow#3VB2oJ~Lp}u(Q8T~i=UU$x5`nl3*l`w5Cu&a6M$PGUlB?lFeE0@^#Q;tRWrfbu zG@H1f&TrC)gcsp_J{M;z7(402(f4C|ly=RT|K&E!rxJ5$PX&*dB-N7{PN4-xWpS?K z>$_jkW+d-q1N6zIYpqHJ0YnV|Aa!zXbadz;2*C)%afk?sF+@rG5|rtTNz6_5}EcWp6<&cGFHhTMvI7%9?WEPy6R5 zTaJ!5{`1FN>ZJP@0DXV^ORsNE9R}ij%h(=*&Np$}}~^Vv^Vvd`t=Qy03fOT;5lN z3FrwsLVpw3-04G7sE0q&LV7a3pm=OY{06hw2kXIkM&gEiTvJWV z!6Y<;w7{PKeqH3dZ05W?c|lQw@^w8Ky?Efio2<^QMPer0aBov(fQRs4s=TPb3RQ{v z58G8W2hPCjJkp@UlpV#V%DSa+&{g9I!3XA|*%3|<3k`B3^3+=N?Kj;Er9wFGZ&0nrIRELV{(qnSdKSNj9PlilIpa)X9apO~ zT%qG+ZIu;aIUSkhZ{;Z!Mfj}U*2!bF8LV)lHf*=S9 zK`4VUvDqYz0apC6w2CeINAV7u4Thnq$5JGj4Kt^YstsHCjxURf=5P))&J}qC?6iQ5$aXrXiLCZ^?fMwit)j#TcV42zv|;v_XNZL zcQVOPA>tY1qg?T2E;~?X-7^{3Df3!PN79Vfbxmdfj<6XlxT^=%%>B9%y0Sz*)PPLl zsRZ%zR!y`D;nw2sY4jG};GMFxwJ@9qXAAh{aI8}XHv#>Y@Hea<34puV3(r+suVAAg z@~gDSZvi7bqsg`;Lg|P~{y>ame+T3guLl(lkInPJnF&{ne=!H5jQrp_7#fXPAYJ;qpV|DS*B?nGWC=90 zZEYJx2Vk1~f|+cqQwNZbB8|#FO)PhZm#qDrGU^UjlCCCHI9sgc6k)U;z1bEB<|nnLROK?suo*64IMyc`LBu4C98LFNRP_xJKn z(4luJ)(%;00)>h!IbuD2E5H`9Xb$1T#(we8A*b4|T{)p=ho6YDrAXh(Njj6XSLWAk zxghaMayb7}5(y3Gw{N&wSo#40|MbKkd4Z#`p3Pfi_S|e`k>vS7p z=t3JUJx+k>&hZdi8_YFc9Hn9BX87-ZBtz3Jt~E!HkefBU#2{5`VWv>Rv>)_(&n*|s zmUDr|<&z8q_y+6Q#CYQ+-N4i!*rc9_+O2|v66E-U5iD3=mH&#oj@(2$JJGGal)Ig@&<8iMdq`7EG z8uSCq5@at?e$R)1o#N^BX|<&A?^YA**$87@C^JA<{Xs5of2XFZOU#Cl+N_|O>}*J| z1CE<}<~H>dz@#&O{nG&kpu-PnZUkP6iWoiBhDXyKBYEa*Z7v7HZZ43W6i(Q=-71+T zK!Y%H`T!>H`YHB)ei<(m>4@~Z10`Ruhm1$7S=3c~(g61w2Ps&bA5@QFXz#h9XtUu6 z!Q2qo#RO&v^0)tG#_tXxQX2IRoT+besD)Rasf0&gV9AjX6sD$7%(zhril^9pToDXh zWsypP#9KIF)D<=obG6+Ho6Yiy4B^_WVNUrWS||?{V6i}vFP;{FR25kBE<{uHWGfya z+a2Ex=)XmO*Gm$#VdrPxbKqVY0W5(f!w4O;%jy9&h_D8E8Mp_ciz;6R`M`x0Ro531RT=rr{x!T)Q;r;ndLchxcgE4Q3pKzS<}dtON!@ zHW`;qAa(5_7)pu^j`?9hAXQ4r(-k}HVM>#>PGQ5QhE`rZ8k8vHv%zkYPEOH_G~Wgj z06K*04Yf~rk#doLrWcGAR>E1p=*b#%UKO*bk43J_GH%s~$Baj}@u{ce@zujmd=?*{ zP}oi%V7PtA!#DX!#txs^3u6_}neexoAfHZ|31uPAIskJ_2blT+TC7>My}!)>i-_PK zf^V;85)Q*0&PF7nIxcSIsp;2R>6ZjXz)q|P&(c)eB0^)&L|6p zQ=awtSNRQTpW`&Xe?EF67`qOf34xUMAHQTIFi-S*9{57Su8a*?+mv&9(vH^1d?2Wq zH~UQl8KkgB&o%Ei;Xsb?|CzHen3$?B6ezma=`2BM{Oq~;hm(-b>!t%$o_gyzxCy`!jN}ew0F`H>(uU~1-$|xyD%i|N7PPQEQKJX%tx!V zut=2F&|g#N;#ery`8K+kn-Dq}!8*AqD8INEU8(wWn#L|-wz;XIFVuJW40?{**CBXK zb-A>pMlxDLW_t~1@R3qNUGPVI#w202^3kHb-J+I?4;Z!Z+KSePF)>}ApD7t5pNq?D zf0JBV4*dE}4E}^y1r&VeM6fu=?qJU^G&`N2vWtQ>Br8r8EoMrVaHIv0cmzJ z^<9U>v#RAqcidoNH*U}%rY6vS%NNryr@feV{DZG)Qzfb@w65O5t-L7uXNjFHxuL)B z{5Nl%iQ=b2--a5+Hg}_z>#GOU#+5SL%Cli8+F*AtVUM0P?4QHhhTn zBUw3jeF<>)(O#2BrCkHUT|`PE#B`@*OeN-a-rw6;T_}xG#aJjYm$caVWXit*{Zy@c z0`AhQFW&p3SRQ%f*J2E!#FXZ@hoAiu~n5|3e-UMK7+)%iSCo0uK@4iYKJWnpgs1r%Gnk{Z>p5%3&eU(J8JE#h- zRMD!^`G~u(rY-nuvr8d!r-d)z=WC;F&QQ88>|CL}fe`7a6YZOY;s~s!3RTv;?gK=a zHW9wnL@SNv$SAtVjBMd>9(&7n3GB!%iyyP$$@990?yQw}b=DJ`@DQpGh!aH!2*6a2FCDqiPd;6IO7Gv3sTGFE2`&9!W5F)v5TIp6Pc-R zrabEG#qs?Vi?#ZXC|MVj@O4|_h|2B>0i30~jh7R(f1l-xsqkhFmBbAr5Y>bvdZn$1q%OBM+_p-SFyU2A3 z&|t7M0ekQibvzePA4lN@^2c%BGGtX3Ij$b?TK+@r*vK7#C?M3((KwYz0~yTmN$GoX zfiuT#6HL-`^q9h7n2=#DnfA{-GhAQ6s~@$_s17m|BQ8R&)aAEsP}5Ii1cilr{3ebT zj7vF7!1C!kgX-sO)>NpN9-w~4CZc$3R5q~x+H0>1amI~971#DhJ2P%PoD%Av>pQ%d z*{4rmzj7;aD4{lVQ9^kr^*3XTT?wvlsbF*zyYsA7*bfjoj3o)KBZMv)#fRphVr6{A zAs!?N-R&L+(1^&6TVkOECwH0U7&)c05pi|-fo9m=FvYMMEWdS0BRFm$#01wh5U!@Wg~_gUJy8ZG+dO3XQwVtgh38&;fAOMC89yyo(^Pg8jL(NdrRw2mlx$93CPS4J6`#M3pfl*$>rOxxk8Jz*gk~ zDF!j}St=K}MMJ8z$(Zaj0%O+ItUma~Z)U@6U?dlKqjfTikYO}p8Q_=atN1V`v>i|< zN>PMfyw#dgwZ*t{Q&*Fbe;kh)U*48{?!zZ#l*nRDN_WUL(xbo8$nWdGhZp@&rLdzj z)4Qxu8LO#OIwmSA(?~0{##6zt*cGk?Suts<6nDEzI)bFzTakCgRCx=RWq~EAq`!Un zC9?p0&>s=sN#i=9q6Perj1d|K*VXFW$k29@x)%yGV*(B(wCnitKSlS13<(Q@P$X~y zO3lqc`)7y&&YisxXnTFZt{hM1zdFJnBjB+tEm1S+uj*d@E7Ty)t%{ixFs+|b_5+!R@iDq zsD~A=RadZC^453vp%#pfR8eT%H9!r#`0rZ|zHrj^`#J&*cRs;1))EguE|G#+QD*g= zpoLlRQ7k;;S)F({T)>2DM^jauUvx{8cI5wi^%|v_BEoCE`!YW^wGp2I1LvkKo948| zer;=Q*pK|lrl}#MBEdpV$)f{)xOfPZ_j6iUXV<3tq;~0qPnBo}tT#JP`1}4fe z90Sb)-fjl|^-bfu`d1~HZ<_M?#7(Rlz*R<1;{e|@ST-_1GH-j+NRZi^#*w;4BBhbf zb!vCBK}ndQ=OvUR>utM56O}QvZz5n4D!J3HCk_g{R>mh9@?>FG`JY?J7={9&at zst^i*2x}ia&cej%?K^3HEx$ilQsT4a%066QBP96hHb3jj`;gsGa>IDy+qLdsypdEd zq)^BBqWoLC4Ag$d^X%-hH15=RwLb%^Z)^hBFxe`{-umrUCh_!?;8-~1*cLP%25m2X z_515l?c;Ke98io;kP)a8jgsu-Fki7PHt=4vXn&SO?Em#CRDy6Sj|PY122+~cBvX~~ z>5eop>%k`sVcXz$ZF6E&8^1xW55v$XajVsuRnY_sj|JSZ66Ybck*qjSmc6VC25K81 z3j-lF6bl2N2NniK0Zb>H2+p1*TvM|TJb0o>)?GuNi!hLm1SU>X;aqiufr9QeH_@S( z#!)!ghm1L4eXl=Y7#D3S)ntWg*?8~UNEq11B~2Os(;3etZ%o3#DXPwSmoTuZC6+L7 zd~Vp(gn`+dg9bcdAOqn}7`P<_ULq6*4r;5ZQ>8GlcVWX$g@FwLN9J2$prP~2;JEs1 zxFH=_mGpm=pc!tG!4c;ls6mukmP;UhHYLd0)D!FZCUuUXJfB!L4c^;@Eqx2?Z9S!& z=)idh4-3eX#d-)Kn^}3i)o31SnrmX!NG&PEv0Kl^wn-|q1s2kv64t|ka1eVdOjq+h z9>SCXOiKv%B)rG3^8+Cvo;^l?T^kxH*;=+qf+fZ2Q{wxC)eA7==9OUT3(=HEni9mT z7OFmvuc8)D$%F{>ia9={m2<2Ek}i;{v+k=>Ug*Glq}Q`kJz)TNWn){${u}}Iw8C-; zPJ6O+UdJLb?J>3@y|!wTM3*3UEUqCXi!5l@uq|59)RidZjNyI%Wndnc#SJ_(Xol4o z*`rl9qfRnk+>g|hzrIsn6C+|wSypS+u@LuQjY>89D_vr`w<4567KD9`nQt0%4n8R3 z7WD6{5YRv@8wbm-LX$+*+cd8utorb#H2?3j2J)(Rjo46WN^v^4lrGNAwDeft`yMIp zHwM0XvEYNa%*`d}2f(#)D1wpz{MTl5*i#QJA!izX#B1r{3F44>H7$ncRmXLygLMfN z@~dMWLGU&ZL^f%Y+JfL_10fUfjqCs4l;J+oODwVORdt+sC59VTSNh1Pkr1rrlv#ai zR^3p*Qc$>*tQW{F4ern}WRbFj)Apb@W|Us9E68(9ZIq&89uVx?cLjYda82TT)cyl4 zya|$A?tBz96hY7N14~hT6%~3|d!W>n!=OdDVLDJ+dS6?Zl(oop*g0zX#74tjX&>56SyL}AOF`Qbofau( zaqQ&z&O3w2WB*uU)$QA1J6@klDCC6SH#rOmGOwk56oA5Q@XnV3Dt@-Aqa$wNrEPQq zj@w16=6Dqsa4nvr1vZhOLR?I{S)WIugn`GsJKn?pgbNVV=?~Y}0wtL_sj@({u;4y0 z9*|7rXDU^X+(vWxW!Ix(;_{4}MKRP2R9MYSWwSrdKunzI%J37^|9%!_gJnFXQNKiYlw=S`Lg3DZ@%}HQcCaUbLJW;46 z{-_s@5e+9crbWTd-Do_b4RF3vh{}M=FvyL0Z9tG@)!tJe;ykSje@las0(*L?1;{ig z12OpFlRju|j(ErrR6aBm9}xE)Lr0N0EI!+~fC?~f~r za^aE}*!-cl8vbt!hMTk~)`Z3Qw`vL+JGP>Jf6D7|3bW`?pFX^?s4nT;0!!v0M@zvz zmq$V;LY#2|rL!ljhw~#imCd^;pq#om3EB9q1b1lGp(s5pN!VX3Huo>3`X5TTadS}2 z{HWqJCSgCE9_kPlSEE0@gYXR^&Q;d%o5!Oy`}7fP5sVsfAW^C*fVD#geR7z1-dOu3 zEZde;7=g~6EwFwZux7sVUYrk)M}=oo80i%a0YtA`MfUblp7bB5C#V+0h3;*QFp${y zvyz-Nljy=tkuT$GY}NZ1i_=ovb7?(l=Dy_Q$SP@rkOPYpJPuCB9x85-ph6C1vj`z< z*{ASH`dll@`$z%XF^fij+(_!f-WzC@hWwSE!+RoyV(%3GqeDlHHfPlq$6q|DB^;k} z!8!u`9=ZU5AiV9SB)fBTt_M_y*SVPA8_~9B-p}5zXn>W-VAJ`$8$^aOiFg~&&hxot zCFwFoboYf7JgHd>iwd{aB~aU0U7!%4M9Ii_I{prf+Ll_rC(z|<+td@WG3_}o8>2_>}t!*`2J}2Gu*o&epD2mVhR9Xba zVdGS{;cu(55LUQSU1t`tuTY#ihX#m+=^M0n>>s;^+2_;^lyAwL>N8Qn2; zY=W?YRjmSi#UtAA7Mt1cK*Q@1ZR<*h=e@!Xp*AG zNEJ$twZf)pXhsa2;`R=*R%-LVcCZ~_&lhf5*l|?#fLfE3?TM*_7A;pO9DrCa{?u49 z7}g&>BLL274i5ti0$F!RF4w^1fDa4+2z+G@32!S^7YMC<7dTDgxH^h4Qjtp>SExDC zA9Voq#C6eQ0)2^p3Ig&E0@^+9M7%feG5CVyb+z70?HU-F8&NUOgP-f1lW}SG7kWg31 z*sGU6_bkD8{BzQ@#$X2^Hk;55qNOiZ^rTr0X<1n%)8KMKfUeVMc@J?@SLo zVa)+WBR*w|uLo%{J>#C@oe3e>bn$h7fc$)@r0l~^3on*Sc41yjmfo-b?~T!P4~8V$iW{!djSVG_`8+)&3)33z5b9T;g~^DEnQ zFjt2>)hfZmO5Kbm;wt3>#S)VsU*wf8tkmK)uqb-BoA%s5#)eC?c1G2{(4k(S*+SxI z;AYz$db#{WGw@ciF}RBEL`KHk-As zJ;or&dk0+@n>F`Fd%$2q0BOQo{mw+8LKkQl9R0>0zMVAPzDsNprhLHljIy_B3%E=w z#6O#V+>|64WP)}Ib0&x(s`sy4)}^7CE4P&f9w+JJey#r{Y(pGyjOP_y*h}i(g(tCi zi5JH<{U!EcAQXfQXCNZDhZW)525W;lw{00`+2k*1`kI7DZoUVV-Q`nOW@HfRt9ir{ z8zfCin`9$I1!NgvEEM*FZlyU=c;ToV_q^MDASnTllOCsVe2_MiA0g%pb7I+;(re`I z(0o6*B~3dr^vwbSU91fLOQ{0645NByPb}t_ z9%TgoX9J9p@BfNq-3R0u@`+Tb0N}tHgKX4$>i+lv42H3cteS#Nr!y3~|}{kQ9JJ5czq; z$r#vQekE(-Y1qlKR5DfL9k^wjdnS*~9RYYExK?FHD0DD5QCp2fZ$Fywx!v@m&<7aINls-k-R;$F++q#FMH?AbLFr!A zNR*Gof~A4mRRp+8=nhuP;eqf)U-BJ7jPdODsf6%WhvaTtnIhFL<|0 zCV{1iCU~A3^!PWiykOdc_VtCXb*+&0*pkd<$-&?+#o!fgM-kg+9vUaQ3j2J(C3qHr z;6Ovu9iUP`SfJv`=F!F{W?0QB_6RHANN8+q1ah#EEqWY?@nx=IReq*rB}5y$)RP3X zPPxxYtLr>zq&{3fA*`8QQfeeW7mw*rIr(R&gd~r^C_^PWF_|PMBTz?(Uf5IgxdDuncbCP*a2;y$$qThF$*A{UQ|P+Wu7OpZTsa<89FR8lOiXGUA!@ zoh7vKhb+)Yc7DT4EbiFMu1J-R10tJ)Mf(EGDsW|7Z5YR2crTIc*ZdIn6pxU{pAJjQ zu~8Ao8r>ZAc?xBz%9hEk2Foit>HwMyL;;dT8B8@Z8U7+Ouqd!nM9HxbL2l=LClSU) z^42OURLhSVO$-BtTxQG!H4#d6m^a?=qk{a*l1|+{tDlXJ@K`J zze5J9hs;(%C#o$!ASV3+vR>IzSdmz>D!3C*zMCIn4Dg?Zk19xh1+#P4jppb)!6-em zW*$}r(cuxDZ(wT!g}ZJKGq3Lk=_KM}ctgwa%}3?&5*qKzUjzlL^?{&Q-fqp2^u@q6 z^L)p~SeB2f$93|YU%BxG=FqJJw*;sN;L;vuakJXRgB2{XM-IDo6}=`N7j3x??@6kh zO9{4!8#jMTZCM0}uEe3VlQfvkkI_ZMS_OuCIx56<`D@an)nc5v6jHsE7CV!OksMw0 zAHBO(924S&1Dy@#m9t+U7?2pQigW3<=KrSk<~EHIQ4jugzTWaoaN3;}Eb*)BR^>4@ zt+{Sk+C?Qou-i{IPA@PcD)1U$UUmUVy&^iY!R9HI)J^CTBx`)XLh{OsL(#2UA@9D`5sHa%;$hJo`Fz3>Hp8CY+Tlg z3t3H2NCsV5fhdoYKjaY_xAEsEU^YKB}ZS)l8OuRS@sB>fbP^ekWbi+ zP>|s1x`-pCCMiSQbmmH8jMee7#s+S(K_X`oFdbYM3npwY`NQz1e;$pIj zn^)LWiaUE=zr589I_-ukIdPS8-CVpWRM3NEsL+o-kyP`^N=MIxCW!*%aq3AQ9S4iw zVPi8kQ)&*mGZyZ?_lWnViJ+0gsgL&mP?o*?BhNSytdMcMBACmhi zzkAaSD?PhlfI)2iDT{a`BRe|*hP`ehAeUTxkx%WcH^gP>Mlkz#Aw>)X{eh$8WbJxY+R!&-d(q@a{x9-l z#5Z@~B)?&Vtt_+|I7ZcUO$tddojIiJJk8dBi8l2su8pz8@&h74Yp%pfH+`jxaP-31 z55oG0@$8u-cP;Gx4n~Y7q_M)^C9Tj*crKJS$w)1^No!KK2Y&Y>h)anGe*8%F&&E<{ zaPrBBHQ}rAlESPK9tA;qG3O;Zv)Bb9wku~Q5L_8w8%JuvbS1RBhF{JBI^g8*oE*_Z zuWa*>;!C5vF#r_WiE0mHpV(h@e4b+ak#%wC5mOQCp%sO#r#k}syw!)xCh98d+vgBn zt^0XV*91|CN*iLJyBS=eus`wok^$KNFCd@1Kk~oYOVjRcB@IyW{fw$erwdapUm{u6 zcB#ojCX|tDFboBJ^lp^QdU9ckSqMZ?)b0yoP0O5+;f5dIxXaJE=~G#)u#rraQK84K z>Ex=0)yR!K>Jvud$O!NCI~#K@6my6FT{Z71c&{5x-}cn*R{tfAcVNi21dR*R9-Lf9 zRTinLO|DGQ&FCXwA&-hg_DpUzuJL$7s&SFGeGxPEq%qb(dDN6MSg^EspO^}kRJAib z0v=;l^#AttzO(5XL%rvQd~?8N6s6$}7^Z);=1(stP>`U(wmnBtR58q@B+p&=AI$t9 z1ZOWw^DFWQVoS!P8`_m)8$Gt7pzc3*<`6^BtK)!$>6H5YnUXTH;}F=%<8<_+3Ctzo^O$@f9X4H_xB_)ql8`(r2I;Dr30+<`+0#jXIRB4s2HbK3xd(=?4T15WT; z+FEFL>OasA`DgZk!#rNmumS)8fWiS+0AB!C0NUUGuZ*oZh?Tcx-oES>Av)fQb73EN zBak;rclemVi-YT~q`Gon9#v=YpyT7p!uuv(DQYDlAShS_m#3X3IzIUDAves{zfJDP z)CRgL#{L0nhRAP)fkNVfX;3OHrD9Hc0~Zq&4vt8sF{XY^o{ggP_suW#yuF%y zTtNcuzPJn(6#CwJsCD_BENx)0?!V7IPD$UcdMgdQX5IyXvAE2um;q}VA#@UNTk4X7 zSl`r$A)#YCbaa^L(30+vASfgCblv93m{t$)eZiL?87JzumK7nEm!8L~7V{posZG%@ zq)=lB3JD3&E(DhXkz|xbNkpj%4As*0t>oX=9rj70@-Q{$>R@bRb^K2p#WWLNmyWqO z)%L1U=cG_%C~phz@4t0W_tamGVk{Wgr-p`ZsIv{#Ns z1^tu4Vfjxc{-3SK@yt2XcygdB?9fxq#bku)L+p`g#ArAsQKhi@1T{q2U4sF@ph|VYl#`(S3yS=m zO^ov@nas1k`Ze~>6Q>FW=PvwW09vCBv6M&grNBMgr{{#F_V)EHMkQ%8fGoxl={kp^ zUX-lBwq_srDUFSDL25Z#*1x}qBN+qL-i!wJy-xC&NmJSY?WhboSR8VoacSk50);~{ zW2zD|yhRnh)TmA?)HTAfnFP1B_z&O7T2C}G5JYMIVDS9PSpW?V=jUp>YAY^!MnhoK}Ze-$za=cE7Q=S3_+w<(u zqel>_7DQ`f+gh-zk0F{OPDi+8hzBSpP|SEf>ktChVtnZ!JWe0cMDuTS2AFB!8Uu+Cl*GaI zUy%hHl(E(79=5-c4&6E)so@n)hh)1j3tkjTq9eH4TS}8N8}E!HBP1>`*5N|#4)#kZ zlbMszovC^&a2L_}61Cb1PiBT16FMUA-NJXncv;IRuEu6+?}Qp*&<@|$0nX^adhi3D zlV2VzHG|)^*=|^wmzgGPZnni6RMncT4n)K~t#D2JH`pYZd%mz`uihL9KSa7zsx+?0 zMgAum;*q4pyEU~9V3b|vuoF3Q5fgc}!L)gkdH0U`l8as9n{aE~G1Rs8wX63?V@;!< zooo?ENv0aIySj19En|i#i3BqWQ)6SKEm|NmDiwh&F|=c`xKZ#!bn?-(3gKp4RnhWP_GY25=%FpTJJ}5oa3cR~ z#T3qU%N0CQXA^xBS7E~gj6P(J%u)|jdr5~Dd5Pl+)31uWuuGy@GPtC~EC94_;>K}H z03ys|oGHV#>Ottji@|W_FhthSSjBcuD>In_7r|P(nA}$2hY9LiV$5VPtBb?fGs1*6 z$-muStP7O5jxa;2)_2y2P9A&ymxbZDXl=I4s}H$1DyXkM6yLim3TEDHX>0ZCi3B90 z&rRF#iVV$ZfQM{@wzFtk(;kr^|NaYjWpcm3%r(z#edI~QIX^EQPso@1gp9cpHFubi zYoh`F2qj;jI+m=- zCphKBQf(qg@>KP%3Ek>XEZ!}EZ;Mh@@}?WuubeGK_&Q7^-UPyWEkm4DKd%9~L0AAT z&9{qV$O>5*zXyh@p~_$0^+VCbaN~X262PgKeB!;Tk+uBFK{-)jwD`9@_&RFQ;zwJx z@tH{*U`yZnU>WUdezE6^l8)nxJ#--tkfaJRw{7frJ!d&AUz)!K?vafnWeZXhkm$a4FbTV>Ef4X z8(VFQ6otCeBs%K=iUuikV{cY3k9a&?VgC6#KQv^$)1j7TqDII;S0h}W>56SxAz>Z% zI&rX*1ZWc_NEZ=Xe27gxSBH>aU~*fH4@PAjTKnjL>^Py^`QfGf5UoHhG-PrtS)oye zJxe|@5(%{>0}*z1L5uLGSP|u$B!WBp1fzi~^?vJv01%=X!%u?~-joD_JA`^M08|R@ z@Sd_MlcYxRnTb^ z;-5US3qN-ANJh98Dk4&&pLCd&?QH+sVPNEkBlNv!8|QTdZSwrk96YBFo1*uX^1~D_ zdX0{|Bg8pr*ArJ5IdB8v)WO4j8kO0O|tL}y;vFinUyZWNx4 z*0q%L7ndVp2K;DP=YJPNg zVm6BdXmxsN6Wocd!y_nV?|F9NzHE#4tQfv6+p*L{Fu6^~ zh}Eh%`|w>ZJnHO2<26@-L5jUR`|yf*0Z!So>yIfW(yS=T!LDeI)%YM*?P`-f5{<2| znc?#)cFQhvA2(q$Ir|FNeY3i3B5~~^uj6FN$YPSy&61@e)zNdvCDg68esecP1B z!_l}^I|&sutwL_o)PtE`flb^00HkvY>_}fg?N4O^yXqHt6`1XHRFgRaRvQgY+JV-# zfx-tz6WKzaA@Ybf+eZYRliZjNo-EI#5jDT-JCnd%SlQPO`a(jsm!N>`AmsWqr%_cP zp_gP+nXC-%CZRegadQNG8S81ydV008wYz@L0+|C)&$Xopia+BIPLL7Uk;4d@{~yB8 z{IUh4P#i}+YFd6j^aL3P=H+t<;>0=S35*K_Qy3FgDMsftpA!Hm$Zi*ziyLA@;JJ3l zYav1;Q393SY1kj)sQK45rVz|n?np0o#qT>H-r%;7tEhaiZc*epH2fg(MS+fG2U(j3 z)olfwp@dG%(OE^%oe=xGi?L%VI7HZ!I26*(t6!n85O5NJ5n=Q`S?Ql-t6SUVRw^B0 zO1Fa?UhS8v!m@pU8!2Es@~D5KYqG_Z-so(2+Q56$OGItLNXMXw3O+XGIHzVJ_y(t2 z;u{9AhDo^RFhBDaygL}hEx&K39H;6gV&el+L*u-&PZGU(g6SIMNGLbe)tJNt8{-NT zj#P3lGtBPJeYsKwFQw>S5+O?ulL)(dY#0oK>}9{ixIAi*WCFi)o6C~sL=2YqF%g5+ zNPl#5!8M5(Y<+O{ln7KC%f`8X}dI2^vbj1%L zH=YOq2b=M=n^X*lq+@oGQMoW6IUf>DjbnONkOj+()RRK@U?R9`>4{&n&E2nYBcjQ5 z4G9|}y->Y7QhUS9ZwdSH?%n*}>9JfkyU8$EX|S~#{B%S3X1A|(FIK!T#IKX$-p%L$ zk~ssZt)0);0@t~G?-`nC)ptr|s&GUl(ajG-W5#GaEa4wjyLWh&X~v;o$WM=B7>G6l z4JE@U1`EDkdcjOCZG@D@wFm+AMBpOJ9(R&o$rlcy#^>Vg)`yQ~Q_43by<}{)%ju2K z02e{YAk%Y@_y}!gr?+9}D2EY8=o0Xqo9_eNEYu!#a(FYr_$ z;cNuvUX-{6Pd5X^VL?)1Jg;^ZQp8{vYiB!;-WYkbp2A45lC=jlPoE-(#L@`F(gAhGhi88kI~EUTfU+& zAkfIjm7QV!Vv>_5FBh(*k=nPSLD|k#R*eN!j<{M`JO);fE4Jf>uAY=Gfn0yD6Sg`N zXP1h8dh59kno$O+A!{J;VzId;+saFG6o2uZXcDZekyi>~WRqVAOjuVoH4_ z!QM)v0pM@sztD3jq$?+LNkAq-465^?=$K zvmuXRhOkuO@Xn&j@Ptk>lOUabHv)%T=a>+R>xCMh_w1Icc$fGU9+un)e9Fc9KHnC! z2M)aPl?)#nUaiEPU7X$SXb3tRil-obDZ72*&Y)@mlf3all{=MWen$~J&6WTp7LIyM z4VL_VfP;iC62%oGW>B7r^q=yg_~ul%CGIF;NKHsYi2a%l#_;E#%Gn|A8yx;U%l6;8 zRe0{g^JHX>At*oM!5C#tu-L7=Rp;j1>0@=c93&|#d^D_nDX739B2=F(U!IaGtkcqKKGoh4rY7nDD1bJ7Nxee)TwNF!86RgQZO) z7~l^?DQ*wrr9tbP4L6cLg2^j3TNUR45#OyXWU*x+< zQmhm<;MLl`XW7ET(xFoZnk8PU=}I?9Fh&?)rE}X}vyp^o(qZO9cB&X4x#a;E%<9Lb z!$sBJ>H#o!~hnq>jz+mQd01C>O?6DoVc zk|aS1+%hKH4{A)#FxlU;sdl$AvH|+wip|%)&6JOmd8|T2E$TNY@Z$pkxIj$QS z=@EQ3k7tUHGJ=JXWyj4kPSGa9sLq&((3yAlK-V1|6bmafiJJ8d|E<^uTeyxnbJ-Ez zqao^}!66TF+&X)K6>uyR>6Ev5>c8q5H;5bIEXvsG}C z6AKMelyT)j*Ha|RF7Of8^Z$+HSb|@KTh$np5@(_tA?V4`-(F%Q=ik5LLNlq*d8_&2Id3D?4$Z2;{i$BC3YahUj~DY*rxycMO&7{EZ8kxF-&ANfI#tvv|M8uo39)9@*P zA>#q^wJ>cbA;Ma*m-%jhUFp0A>J0$ez-jIlA;$ z9x0x<2IH@{VwJmz;^~Ei`B^*&g!x%=l}Vrcq9q3N^JpcJ;eHqDq_sc_+6oj|?!pGG ziU$eBJ(npj=XAYo z`VRIk#5j>`Dv5k?GQ%AnX=C{~4#|;pSd$#83aJEUlSiN1;Qa(BtJQ#+LPP}|GwJ-3(>~5b#D!c+0a>=M+?{P3aQ&!8} z{_c%G)pxC5B{nhx<{AwX{~$7mrx-g_cn@Ajh~MTwihQA$w!U`|_qoXk<4L_!dp1-# zb3=@=bH?(Zgk|hR{rB6acP?TQG|pW!=QEE?xIfPlTB0JW4AYszcsBOmncCZ-!=!IKx5*Fo~f<{ddiAwO>gktV-_eU5K3KOwPF> zlf+AC!4l}hV~YF)3qZvy(B&wTE$n~=iY;EO$0V@KfmL3Vi#FFfNhFHWE6-*S{ Td0OW?ZBpoexP*C5Aqrp~-_P^( diff --git a/codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts b/codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts index d79efc8888..2e34212f63 100644 --- a/codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts +++ b/codex-rs/app-server-protocol/schema/typescript/ServerNotification.ts @@ -36,6 +36,7 @@ import type { ModelVerificationNotification } from "./v2/ModelVerificationNotifi import type { PlanDeltaNotification } from "./v2/PlanDeltaNotification"; import type { ProcessExitedNotification } from "./v2/ProcessExitedNotification"; import type { ProcessOutputDeltaNotification } from "./v2/ProcessOutputDeltaNotification"; +import type { ProjectChangedNotification } from "./v2/ProjectChangedNotification"; import type { RawResponseCompletedNotification } from "./v2/RawResponseCompletedNotification"; import type { RawResponseItemCompletedNotification } from "./v2/RawResponseItemCompletedNotification"; import type { ReasoningSummaryPartAddedNotification } from "./v2/ReasoningSummaryPartAddedNotification"; @@ -51,6 +52,7 @@ import type { ThreadDeletedNotification } from "./v2/ThreadDeletedNotification"; import type { ThreadGoalClearedNotification } from "./v2/ThreadGoalClearedNotification"; import type { ThreadGoalUpdatedNotification } from "./v2/ThreadGoalUpdatedNotification"; import type { ThreadNameUpdatedNotification } from "./v2/ThreadNameUpdatedNotification"; +import type { ThreadProjectUpdatedNotification } from "./v2/ThreadProjectUpdatedNotification"; import type { ThreadQueueChangedNotification } from "./v2/ThreadQueueChangedNotification"; import type { ThreadRealtimeClosedNotification } from "./v2/ThreadRealtimeClosedNotification"; import type { ThreadRealtimeErrorNotification } from "./v2/ThreadRealtimeErrorNotification"; @@ -78,4 +80,4 @@ import type { WindowsWorldWritableWarningNotification } from "./v2/WindowsWorldW /** * Notification sent from the server to the client. */ -export type ServerNotification = { "method": "error", "params": ErrorNotification } | { "method": "thread/started", "params": ThreadStartedNotification } | { "method": "thread/status/changed", "params": ThreadStatusChangedNotification } | { "method": "thread/archived", "params": ThreadArchivedNotification } | { "method": "thread/deleted", "params": ThreadDeletedNotification } | { "method": "thread/unarchived", "params": ThreadUnarchivedNotification } | { "method": "thread/closed", "params": ThreadClosedNotification } | { "method": "thread/reverted", "params": ThreadRevertedNotification } | { "method": "skills/changed", "params": SkillsChangedNotification } | { "method": "thread/name/updated", "params": ThreadNameUpdatedNotification } | { "method": "thread/goal/updated", "params": ThreadGoalUpdatedNotification } | { "method": "thread/goal/cleared", "params": ThreadGoalClearedNotification } | { "method": "thread/queue/changed", "params": ThreadQueueChangedNotification } | { "method": "thread/environment/connected", "params": EnvironmentConnectionNotification } | { "method": "thread/environment/disconnected", "params": EnvironmentConnectionNotification } | { "method": "thread/settings/updated", "params": ThreadSettingsUpdatedNotification } | { "method": "thread/tokenUsage/updated", "params": ThreadTokenUsageUpdatedNotification } | { "method": "turn/started", "params": TurnStartedNotification } | { "method": "hook/started", "params": HookStartedNotification } | { "method": "turn/completed", "params": TurnCompletedNotification } | { "method": "hook/completed", "params": HookCompletedNotification } | { "method": "turn/diff/updated", "params": TurnDiffUpdatedNotification } | { "method": "turn/plan/updated", "params": TurnPlanUpdatedNotification } | { "method": "item/started", "params": ItemStartedNotification } | { "method": "item/autoApprovalReview/started", "params": ItemGuardianApprovalReviewStartedNotification } | { "method": "item/autoApprovalReview/completed", "params": ItemGuardianApprovalReviewCompletedNotification } | { "method": "item/completed", "params": ItemCompletedNotification } | { "method": "rawResponseItem/completed", "params": RawResponseItemCompletedNotification } | { "method": "rawResponse/completed", "params": RawResponseCompletedNotification } | { "method": "item/agentMessage/delta", "params": AgentMessageDeltaNotification } | { "method": "item/plan/delta", "params": PlanDeltaNotification } | { "method": "command/exec/outputDelta", "params": CommandExecOutputDeltaNotification } | { "method": "process/outputDelta", "params": ProcessOutputDeltaNotification } | { "method": "process/exited", "params": ProcessExitedNotification } | { "method": "item/commandExecution/outputDelta", "params": CommandExecutionOutputDeltaNotification } | { "method": "item/commandExecution/terminalInteraction", "params": TerminalInteractionNotification } | { "method": "item/fileChange/outputDelta", "params": FileChangeOutputDeltaNotification } | { "method": "item/fileChange/patchUpdated", "params": FileChangePatchUpdatedNotification } | { "method": "serverRequest/resolved", "params": ServerRequestResolvedNotification } | { "method": "item/mcpToolCall/progress", "params": McpToolCallProgressNotification } | { "method": "mcpServer/oauthLogin/completed", "params": McpServerOauthLoginCompletedNotification } | { "method": "mcpServer/startupStatus/updated", "params": McpServerStatusUpdatedNotification } | { "method": "account/updated", "params": AccountUpdatedNotification } | { "method": "account/rateLimits/updated", "params": AccountRateLimitsUpdatedNotification } | { "method": "app/list/updated", "params": AppListUpdatedNotification } | { "method": "remoteControl/status/changed", "params": RemoteControlStatusChangedNotification } | { "method": "externalAgentConfig/import/progress", "params": ExternalAgentConfigImportProgressNotification } | { "method": "externalAgentConfig/import/completed", "params": ExternalAgentConfigImportCompletedNotification } | { "method": "fs/changed", "params": FsChangedNotification } | { "method": "item/reasoning/summaryTextDelta", "params": ReasoningSummaryTextDeltaNotification } | { "method": "item/reasoning/summaryPartAdded", "params": ReasoningSummaryPartAddedNotification } | { "method": "item/reasoning/textDelta", "params": ReasoningTextDeltaNotification } | { "method": "thread/compacted", "params": ContextCompactedNotification } | { "method": "model/rerouted", "params": ModelReroutedNotification } | { "method": "model/verification", "params": ModelVerificationNotification } | { "method": "turn/moderationMetadata", "params": TurnModerationMetadataNotification } | { "method": "model/safetyBuffering/updated", "params": ModelSafetyBufferingUpdatedNotification } | { "method": "warning", "params": WarningNotification } | { "method": "guardianWarning", "params": GuardianWarningNotification } | { "method": "deprecationNotice", "params": DeprecationNoticeNotification } | { "method": "configWarning", "params": ConfigWarningNotification } | { "method": "fuzzyFileSearch/sessionUpdated", "params": FuzzyFileSearchSessionUpdatedNotification } | { "method": "fuzzyFileSearch/sessionCompleted", "params": FuzzyFileSearchSessionCompletedNotification } | { "method": "thread/realtime/started", "params": ThreadRealtimeStartedNotification } | { "method": "thread/realtime/itemAdded", "params": ThreadRealtimeItemAddedNotification } | { "method": "thread/realtime/transcript/delta", "params": ThreadRealtimeTranscriptDeltaNotification } | { "method": "thread/realtime/transcript/done", "params": ThreadRealtimeTranscriptDoneNotification } | { "method": "thread/realtime/outputAudio/delta", "params": ThreadRealtimeOutputAudioDeltaNotification } | { "method": "thread/realtime/sdp", "params": ThreadRealtimeSdpNotification } | { "method": "thread/realtime/error", "params": ThreadRealtimeErrorNotification } | { "method": "thread/realtime/closed", "params": ThreadRealtimeClosedNotification } | { "method": "windows/worldWritableWarning", "params": WindowsWorldWritableWarningNotification } | { "method": "windowsSandbox/setupCompleted", "params": WindowsSandboxSetupCompletedNotification } | { "method": "account/login/completed", "params": AccountLoginCompletedNotification }; +export type ServerNotification = { "method": "error", "params": ErrorNotification } | { "method": "thread/started", "params": ThreadStartedNotification } | { "method": "thread/status/changed", "params": ThreadStatusChangedNotification } | { "method": "thread/archived", "params": ThreadArchivedNotification } | { "method": "thread/deleted", "params": ThreadDeletedNotification } | { "method": "thread/unarchived", "params": ThreadUnarchivedNotification } | { "method": "thread/closed", "params": ThreadClosedNotification } | { "method": "thread/reverted", "params": ThreadRevertedNotification } | { "method": "skills/changed", "params": SkillsChangedNotification } | { "method": "thread/name/updated", "params": ThreadNameUpdatedNotification } | { "method": "thread/goal/updated", "params": ThreadGoalUpdatedNotification } | { "method": "thread/goal/cleared", "params": ThreadGoalClearedNotification } | { "method": "thread/queue/changed", "params": ThreadQueueChangedNotification } | { "method": "project/changed", "params": ProjectChangedNotification } | { "method": "thread/project/updated", "params": ThreadProjectUpdatedNotification } | { "method": "thread/environment/connected", "params": EnvironmentConnectionNotification } | { "method": "thread/environment/disconnected", "params": EnvironmentConnectionNotification } | { "method": "thread/settings/updated", "params": ThreadSettingsUpdatedNotification } | { "method": "thread/tokenUsage/updated", "params": ThreadTokenUsageUpdatedNotification } | { "method": "turn/started", "params": TurnStartedNotification } | { "method": "hook/started", "params": HookStartedNotification } | { "method": "turn/completed", "params": TurnCompletedNotification } | { "method": "hook/completed", "params": HookCompletedNotification } | { "method": "turn/diff/updated", "params": TurnDiffUpdatedNotification } | { "method": "turn/plan/updated", "params": TurnPlanUpdatedNotification } | { "method": "item/started", "params": ItemStartedNotification } | { "method": "item/autoApprovalReview/started", "params": ItemGuardianApprovalReviewStartedNotification } | { "method": "item/autoApprovalReview/completed", "params": ItemGuardianApprovalReviewCompletedNotification } | { "method": "item/completed", "params": ItemCompletedNotification } | { "method": "rawResponseItem/completed", "params": RawResponseItemCompletedNotification } | { "method": "rawResponse/completed", "params": RawResponseCompletedNotification } | { "method": "item/agentMessage/delta", "params": AgentMessageDeltaNotification } | { "method": "item/plan/delta", "params": PlanDeltaNotification } | { "method": "command/exec/outputDelta", "params": CommandExecOutputDeltaNotification } | { "method": "process/outputDelta", "params": ProcessOutputDeltaNotification } | { "method": "process/exited", "params": ProcessExitedNotification } | { "method": "item/commandExecution/outputDelta", "params": CommandExecutionOutputDeltaNotification } | { "method": "item/commandExecution/terminalInteraction", "params": TerminalInteractionNotification } | { "method": "item/fileChange/outputDelta", "params": FileChangeOutputDeltaNotification } | { "method": "item/fileChange/patchUpdated", "params": FileChangePatchUpdatedNotification } | { "method": "serverRequest/resolved", "params": ServerRequestResolvedNotification } | { "method": "item/mcpToolCall/progress", "params": McpToolCallProgressNotification } | { "method": "mcpServer/oauthLogin/completed", "params": McpServerOauthLoginCompletedNotification } | { "method": "mcpServer/startupStatus/updated", "params": McpServerStatusUpdatedNotification } | { "method": "account/updated", "params": AccountUpdatedNotification } | { "method": "account/rateLimits/updated", "params": AccountRateLimitsUpdatedNotification } | { "method": "app/list/updated", "params": AppListUpdatedNotification } | { "method": "remoteControl/status/changed", "params": RemoteControlStatusChangedNotification } | { "method": "externalAgentConfig/import/progress", "params": ExternalAgentConfigImportProgressNotification } | { "method": "externalAgentConfig/import/completed", "params": ExternalAgentConfigImportCompletedNotification } | { "method": "fs/changed", "params": FsChangedNotification } | { "method": "item/reasoning/summaryTextDelta", "params": ReasoningSummaryTextDeltaNotification } | { "method": "item/reasoning/summaryPartAdded", "params": ReasoningSummaryPartAddedNotification } | { "method": "item/reasoning/textDelta", "params": ReasoningTextDeltaNotification } | { "method": "thread/compacted", "params": ContextCompactedNotification } | { "method": "model/rerouted", "params": ModelReroutedNotification } | { "method": "model/verification", "params": ModelVerificationNotification } | { "method": "turn/moderationMetadata", "params": TurnModerationMetadataNotification } | { "method": "model/safetyBuffering/updated", "params": ModelSafetyBufferingUpdatedNotification } | { "method": "warning", "params": WarningNotification } | { "method": "guardianWarning", "params": GuardianWarningNotification } | { "method": "deprecationNotice", "params": DeprecationNoticeNotification } | { "method": "configWarning", "params": ConfigWarningNotification } | { "method": "fuzzyFileSearch/sessionUpdated", "params": FuzzyFileSearchSessionUpdatedNotification } | { "method": "fuzzyFileSearch/sessionCompleted", "params": FuzzyFileSearchSessionCompletedNotification } | { "method": "thread/realtime/started", "params": ThreadRealtimeStartedNotification } | { "method": "thread/realtime/itemAdded", "params": ThreadRealtimeItemAddedNotification } | { "method": "thread/realtime/transcript/delta", "params": ThreadRealtimeTranscriptDeltaNotification } | { "method": "thread/realtime/transcript/done", "params": ThreadRealtimeTranscriptDoneNotification } | { "method": "thread/realtime/outputAudio/delta", "params": ThreadRealtimeOutputAudioDeltaNotification } | { "method": "thread/realtime/sdp", "params": ThreadRealtimeSdpNotification } | { "method": "thread/realtime/error", "params": ThreadRealtimeErrorNotification } | { "method": "thread/realtime/closed", "params": ThreadRealtimeClosedNotification } | { "method": "windows/worldWritableWarning", "params": WindowsWorldWritableWarningNotification } | { "method": "windowsSandbox/setupCompleted", "params": WindowsSandboxSetupCompletedNotification } | { "method": "account/login/completed", "params": AccountLoginCompletedNotification }; diff --git a/codex-rs/app-server-protocol/schema/typescript/ServerNotificationEnvelope.ts b/codex-rs/app-server-protocol/schema/typescript/ServerNotificationEnvelope.ts index 130dc46dc7..ff926cd3ad 100644 --- a/codex-rs/app-server-protocol/schema/typescript/ServerNotificationEnvelope.ts +++ b/codex-rs/app-server-protocol/schema/typescript/ServerNotificationEnvelope.ts @@ -36,6 +36,7 @@ import type { ModelVerificationNotification } from "./v2/ModelVerificationNotifi import type { PlanDeltaNotification } from "./v2/PlanDeltaNotification"; import type { ProcessExitedNotification } from "./v2/ProcessExitedNotification"; import type { ProcessOutputDeltaNotification } from "./v2/ProcessOutputDeltaNotification"; +import type { ProjectChangedNotification } from "./v2/ProjectChangedNotification"; import type { RawResponseCompletedNotification } from "./v2/RawResponseCompletedNotification"; import type { RawResponseItemCompletedNotification } from "./v2/RawResponseItemCompletedNotification"; import type { ReasoningSummaryPartAddedNotification } from "./v2/ReasoningSummaryPartAddedNotification"; @@ -51,6 +52,7 @@ import type { ThreadDeletedNotification } from "./v2/ThreadDeletedNotification"; import type { ThreadGoalClearedNotification } from "./v2/ThreadGoalClearedNotification"; import type { ThreadGoalUpdatedNotification } from "./v2/ThreadGoalUpdatedNotification"; import type { ThreadNameUpdatedNotification } from "./v2/ThreadNameUpdatedNotification"; +import type { ThreadProjectUpdatedNotification } from "./v2/ThreadProjectUpdatedNotification"; import type { ThreadQueueChangedNotification } from "./v2/ThreadQueueChangedNotification"; import type { ThreadRealtimeClosedNotification } from "./v2/ThreadRealtimeClosedNotification"; import type { ThreadRealtimeErrorNotification } from "./v2/ThreadRealtimeErrorNotification"; @@ -88,4 +90,4 @@ export type ServerNotificationEnvelope = { * Optional so clients can decode notifications from older app-server * versions. Current app-server versions always populate it. */ -emittedAtMs?: number, } & ({ "method": "error", "params": ErrorNotification } | { "method": "thread/started", "params": ThreadStartedNotification } | { "method": "thread/status/changed", "params": ThreadStatusChangedNotification } | { "method": "thread/archived", "params": ThreadArchivedNotification } | { "method": "thread/deleted", "params": ThreadDeletedNotification } | { "method": "thread/unarchived", "params": ThreadUnarchivedNotification } | { "method": "thread/closed", "params": ThreadClosedNotification } | { "method": "thread/reverted", "params": ThreadRevertedNotification } | { "method": "skills/changed", "params": SkillsChangedNotification } | { "method": "thread/name/updated", "params": ThreadNameUpdatedNotification } | { "method": "thread/goal/updated", "params": ThreadGoalUpdatedNotification } | { "method": "thread/goal/cleared", "params": ThreadGoalClearedNotification } | { "method": "thread/queue/changed", "params": ThreadQueueChangedNotification } | { "method": "thread/environment/connected", "params": EnvironmentConnectionNotification } | { "method": "thread/environment/disconnected", "params": EnvironmentConnectionNotification } | { "method": "thread/settings/updated", "params": ThreadSettingsUpdatedNotification } | { "method": "thread/tokenUsage/updated", "params": ThreadTokenUsageUpdatedNotification } | { "method": "turn/started", "params": TurnStartedNotification } | { "method": "hook/started", "params": HookStartedNotification } | { "method": "turn/completed", "params": TurnCompletedNotification } | { "method": "hook/completed", "params": HookCompletedNotification } | { "method": "turn/diff/updated", "params": TurnDiffUpdatedNotification } | { "method": "turn/plan/updated", "params": TurnPlanUpdatedNotification } | { "method": "item/started", "params": ItemStartedNotification } | { "method": "item/autoApprovalReview/started", "params": ItemGuardianApprovalReviewStartedNotification } | { "method": "item/autoApprovalReview/completed", "params": ItemGuardianApprovalReviewCompletedNotification } | { "method": "item/completed", "params": ItemCompletedNotification } | { "method": "rawResponseItem/completed", "params": RawResponseItemCompletedNotification } | { "method": "rawResponse/completed", "params": RawResponseCompletedNotification } | { "method": "item/agentMessage/delta", "params": AgentMessageDeltaNotification } | { "method": "item/plan/delta", "params": PlanDeltaNotification } | { "method": "command/exec/outputDelta", "params": CommandExecOutputDeltaNotification } | { "method": "process/outputDelta", "params": ProcessOutputDeltaNotification } | { "method": "process/exited", "params": ProcessExitedNotification } | { "method": "item/commandExecution/outputDelta", "params": CommandExecutionOutputDeltaNotification } | { "method": "item/commandExecution/terminalInteraction", "params": TerminalInteractionNotification } | { "method": "item/fileChange/outputDelta", "params": FileChangeOutputDeltaNotification } | { "method": "item/fileChange/patchUpdated", "params": FileChangePatchUpdatedNotification } | { "method": "serverRequest/resolved", "params": ServerRequestResolvedNotification } | { "method": "item/mcpToolCall/progress", "params": McpToolCallProgressNotification } | { "method": "mcpServer/oauthLogin/completed", "params": McpServerOauthLoginCompletedNotification } | { "method": "mcpServer/startupStatus/updated", "params": McpServerStatusUpdatedNotification } | { "method": "account/updated", "params": AccountUpdatedNotification } | { "method": "account/rateLimits/updated", "params": AccountRateLimitsUpdatedNotification } | { "method": "app/list/updated", "params": AppListUpdatedNotification } | { "method": "remoteControl/status/changed", "params": RemoteControlStatusChangedNotification } | { "method": "externalAgentConfig/import/progress", "params": ExternalAgentConfigImportProgressNotification } | { "method": "externalAgentConfig/import/completed", "params": ExternalAgentConfigImportCompletedNotification } | { "method": "fs/changed", "params": FsChangedNotification } | { "method": "item/reasoning/summaryTextDelta", "params": ReasoningSummaryTextDeltaNotification } | { "method": "item/reasoning/summaryPartAdded", "params": ReasoningSummaryPartAddedNotification } | { "method": "item/reasoning/textDelta", "params": ReasoningTextDeltaNotification } | { "method": "thread/compacted", "params": ContextCompactedNotification } | { "method": "model/rerouted", "params": ModelReroutedNotification } | { "method": "model/verification", "params": ModelVerificationNotification } | { "method": "turn/moderationMetadata", "params": TurnModerationMetadataNotification } | { "method": "model/safetyBuffering/updated", "params": ModelSafetyBufferingUpdatedNotification } | { "method": "warning", "params": WarningNotification } | { "method": "guardianWarning", "params": GuardianWarningNotification } | { "method": "deprecationNotice", "params": DeprecationNoticeNotification } | { "method": "configWarning", "params": ConfigWarningNotification } | { "method": "fuzzyFileSearch/sessionUpdated", "params": FuzzyFileSearchSessionUpdatedNotification } | { "method": "fuzzyFileSearch/sessionCompleted", "params": FuzzyFileSearchSessionCompletedNotification } | { "method": "thread/realtime/started", "params": ThreadRealtimeStartedNotification } | { "method": "thread/realtime/itemAdded", "params": ThreadRealtimeItemAddedNotification } | { "method": "thread/realtime/transcript/delta", "params": ThreadRealtimeTranscriptDeltaNotification } | { "method": "thread/realtime/transcript/done", "params": ThreadRealtimeTranscriptDoneNotification } | { "method": "thread/realtime/outputAudio/delta", "params": ThreadRealtimeOutputAudioDeltaNotification } | { "method": "thread/realtime/sdp", "params": ThreadRealtimeSdpNotification } | { "method": "thread/realtime/error", "params": ThreadRealtimeErrorNotification } | { "method": "thread/realtime/closed", "params": ThreadRealtimeClosedNotification } | { "method": "windows/worldWritableWarning", "params": WindowsWorldWritableWarningNotification } | { "method": "windowsSandbox/setupCompleted", "params": WindowsSandboxSetupCompletedNotification } | { "method": "account/login/completed", "params": AccountLoginCompletedNotification }); +emittedAtMs?: number, } & ({ "method": "error", "params": ErrorNotification } | { "method": "thread/started", "params": ThreadStartedNotification } | { "method": "thread/status/changed", "params": ThreadStatusChangedNotification } | { "method": "thread/archived", "params": ThreadArchivedNotification } | { "method": "thread/deleted", "params": ThreadDeletedNotification } | { "method": "thread/unarchived", "params": ThreadUnarchivedNotification } | { "method": "thread/closed", "params": ThreadClosedNotification } | { "method": "thread/reverted", "params": ThreadRevertedNotification } | { "method": "skills/changed", "params": SkillsChangedNotification } | { "method": "thread/name/updated", "params": ThreadNameUpdatedNotification } | { "method": "thread/goal/updated", "params": ThreadGoalUpdatedNotification } | { "method": "thread/goal/cleared", "params": ThreadGoalClearedNotification } | { "method": "thread/queue/changed", "params": ThreadQueueChangedNotification } | { "method": "project/changed", "params": ProjectChangedNotification } | { "method": "thread/project/updated", "params": ThreadProjectUpdatedNotification } | { "method": "thread/environment/connected", "params": EnvironmentConnectionNotification } | { "method": "thread/environment/disconnected", "params": EnvironmentConnectionNotification } | { "method": "thread/settings/updated", "params": ThreadSettingsUpdatedNotification } | { "method": "thread/tokenUsage/updated", "params": ThreadTokenUsageUpdatedNotification } | { "method": "turn/started", "params": TurnStartedNotification } | { "method": "hook/started", "params": HookStartedNotification } | { "method": "turn/completed", "params": TurnCompletedNotification } | { "method": "hook/completed", "params": HookCompletedNotification } | { "method": "turn/diff/updated", "params": TurnDiffUpdatedNotification } | { "method": "turn/plan/updated", "params": TurnPlanUpdatedNotification } | { "method": "item/started", "params": ItemStartedNotification } | { "method": "item/autoApprovalReview/started", "params": ItemGuardianApprovalReviewStartedNotification } | { "method": "item/autoApprovalReview/completed", "params": ItemGuardianApprovalReviewCompletedNotification } | { "method": "item/completed", "params": ItemCompletedNotification } | { "method": "rawResponseItem/completed", "params": RawResponseItemCompletedNotification } | { "method": "rawResponse/completed", "params": RawResponseCompletedNotification } | { "method": "item/agentMessage/delta", "params": AgentMessageDeltaNotification } | { "method": "item/plan/delta", "params": PlanDeltaNotification } | { "method": "command/exec/outputDelta", "params": CommandExecOutputDeltaNotification } | { "method": "process/outputDelta", "params": ProcessOutputDeltaNotification } | { "method": "process/exited", "params": ProcessExitedNotification } | { "method": "item/commandExecution/outputDelta", "params": CommandExecutionOutputDeltaNotification } | { "method": "item/commandExecution/terminalInteraction", "params": TerminalInteractionNotification } | { "method": "item/fileChange/outputDelta", "params": FileChangeOutputDeltaNotification } | { "method": "item/fileChange/patchUpdated", "params": FileChangePatchUpdatedNotification } | { "method": "serverRequest/resolved", "params": ServerRequestResolvedNotification } | { "method": "item/mcpToolCall/progress", "params": McpToolCallProgressNotification } | { "method": "mcpServer/oauthLogin/completed", "params": McpServerOauthLoginCompletedNotification } | { "method": "mcpServer/startupStatus/updated", "params": McpServerStatusUpdatedNotification } | { "method": "account/updated", "params": AccountUpdatedNotification } | { "method": "account/rateLimits/updated", "params": AccountRateLimitsUpdatedNotification } | { "method": "app/list/updated", "params": AppListUpdatedNotification } | { "method": "remoteControl/status/changed", "params": RemoteControlStatusChangedNotification } | { "method": "externalAgentConfig/import/progress", "params": ExternalAgentConfigImportProgressNotification } | { "method": "externalAgentConfig/import/completed", "params": ExternalAgentConfigImportCompletedNotification } | { "method": "fs/changed", "params": FsChangedNotification } | { "method": "item/reasoning/summaryTextDelta", "params": ReasoningSummaryTextDeltaNotification } | { "method": "item/reasoning/summaryPartAdded", "params": ReasoningSummaryPartAddedNotification } | { "method": "item/reasoning/textDelta", "params": ReasoningTextDeltaNotification } | { "method": "thread/compacted", "params": ContextCompactedNotification } | { "method": "model/rerouted", "params": ModelReroutedNotification } | { "method": "model/verification", "params": ModelVerificationNotification } | { "method": "turn/moderationMetadata", "params": TurnModerationMetadataNotification } | { "method": "model/safetyBuffering/updated", "params": ModelSafetyBufferingUpdatedNotification } | { "method": "warning", "params": WarningNotification } | { "method": "guardianWarning", "params": GuardianWarningNotification } | { "method": "deprecationNotice", "params": DeprecationNoticeNotification } | { "method": "configWarning", "params": ConfigWarningNotification } | { "method": "fuzzyFileSearch/sessionUpdated", "params": FuzzyFileSearchSessionUpdatedNotification } | { "method": "fuzzyFileSearch/sessionCompleted", "params": FuzzyFileSearchSessionCompletedNotification } | { "method": "thread/realtime/started", "params": ThreadRealtimeStartedNotification } | { "method": "thread/realtime/itemAdded", "params": ThreadRealtimeItemAddedNotification } | { "method": "thread/realtime/transcript/delta", "params": ThreadRealtimeTranscriptDeltaNotification } | { "method": "thread/realtime/transcript/done", "params": ThreadRealtimeTranscriptDoneNotification } | { "method": "thread/realtime/outputAudio/delta", "params": ThreadRealtimeOutputAudioDeltaNotification } | { "method": "thread/realtime/sdp", "params": ThreadRealtimeSdpNotification } | { "method": "thread/realtime/error", "params": ThreadRealtimeErrorNotification } | { "method": "thread/realtime/closed", "params": ThreadRealtimeClosedNotification } | { "method": "windows/worldWritableWarning", "params": WindowsWorldWritableWarningNotification } | { "method": "windowsSandbox/setupCompleted", "params": WindowsSandboxSetupCompletedNotification } | { "method": "account/login/completed", "params": AccountLoginCompletedNotification }); diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/Project.ts b/codex-rs/app-server-protocol/schema/typescript/v2/Project.ts new file mode 100644 index 0000000000..e5f1dc6032 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/Project.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ProjectRoot } from "./ProjectRoot"; + +export type Project = { id: string, name: string, roots: Array, metadata: { [key in string]?: string }, position: number, createdAt: number, updatedAt: number, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangeType.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangeType.ts new file mode 100644 index 0000000000..7c589c04e0 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangeType.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ProjectChangeType = "created" | "updated" | "deleted"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangedNotification.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangedNotification.ts new file mode 100644 index 0000000000..ed61bdb369 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProjectChangedNotification.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ProjectChangeType } from "./ProjectChangeType"; + +export type ProjectChangedNotification = { projectId: string, changeType: ProjectChangeType, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProjectRoot.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProjectRoot.ts new file mode 100644 index 0000000000..3b3718a8df --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ProjectRoot.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AbsolutePathBuf } from "../AbsolutePathBuf"; + +export type ProjectRoot = { path: AbsolutePathBuf, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts b/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts index cad1d9465c..5f23dd4757 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/Thread.ts @@ -34,6 +34,9 @@ section: ThreadSection | null, /** * Unix timestamp in seconds when the thread entered its current section. */ sectionEnteredAt: number | null, /** + * Canonical project assignment owned by app-server, if any. + */ +projectId: string | null, /** * Model provider used for this thread (for example, 'openai'). */ modelProvider: string, /** diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMetadataUpdateParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMetadataUpdateParams.ts index bec4bc1284..16511aee2c 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMetadataUpdateParams.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadMetadataUpdateParams.ts @@ -3,10 +3,9 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { ThreadMetadataGitInfoUpdateParams } from "./ThreadMetadataGitInfoUpdateParams"; -export type ThreadMetadataUpdateParams = { threadId: string, -/** +export type ThreadMetadataUpdateParams = {threadId: string, /** * Patch the stored Git metadata for this thread. * Omit a field to leave it unchanged, set it to `null` to clear it, or * provide a string to replace the stored value. */ -gitInfo?: ThreadMetadataGitInfoUpdateParams | null, }; +gitInfo?: ThreadMetadataGitInfoUpdateParams | null}; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ThreadProjectUpdatedNotification.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadProjectUpdatedNotification.ts new file mode 100644 index 0000000000..ca045f3a75 --- /dev/null +++ b/codex-rs/app-server-protocol/schema/typescript/v2/ThreadProjectUpdatedNotification.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ThreadProjectUpdatedNotification = { threadId: string, projectId: string | null, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index b25c7efa83..73fad9dcd3 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -362,6 +362,10 @@ export type { ProcessExitedNotification } from "./ProcessExitedNotification"; export type { ProcessOutputDeltaNotification } from "./ProcessOutputDeltaNotification"; export type { ProcessOutputStream } from "./ProcessOutputStream"; export type { ProcessTerminalSize } from "./ProcessTerminalSize"; +export type { Project } from "./Project"; +export type { ProjectChangeType } from "./ProjectChangeType"; +export type { ProjectChangedNotification } from "./ProjectChangedNotification"; +export type { ProjectRoot } from "./ProjectRoot"; export type { QueuedSubmission } from "./QueuedSubmission"; export type { RateLimitReachedType } from "./RateLimitReachedType"; export type { RateLimitResetCredit } from "./RateLimitResetCredit"; @@ -463,6 +467,7 @@ export type { ThreadMetadataGitInfoUpdateParams } from "./ThreadMetadataGitInfoU export type { ThreadMetadataUpdateParams } from "./ThreadMetadataUpdateParams"; export type { ThreadMetadataUpdateResponse } from "./ThreadMetadataUpdateResponse"; export type { ThreadNameUpdatedNotification } from "./ThreadNameUpdatedNotification"; +export type { ThreadProjectUpdatedNotification } from "./ThreadProjectUpdatedNotification"; export type { ThreadQueueChangedNotification } from "./ThreadQueueChangedNotification"; export type { ThreadReadParams } from "./ThreadReadParams"; export type { ThreadReadResponse } from "./ThreadReadResponse"; diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index 3893b77623..a0a9f8c085 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -612,6 +612,7 @@ client_request_definitions! { }, ThreadMetadataUpdate => "thread/metadata/update" { params: v2::ThreadMetadataUpdateParams, + inspect_params: true, serialization: thread_id(params.thread_id), response: v2::ThreadMetadataUpdateResponse, }, @@ -694,6 +695,48 @@ client_request_definitions! { serialization: None, response: v2::ThreadListResponse, }, + #[experimental("project/list")] + ProjectList => "project/list" { + params: v2::ProjectListParams, + serialization: global_shared_read("projects"), + response: v2::ProjectListResponse, + }, + #[experimental("project/read")] + ProjectRead => "project/read" { + params: v2::ProjectReadParams, + serialization: global_shared_read("projects"), + response: v2::ProjectReadResponse, + }, + #[experimental("project/create")] + ProjectCreate => "project/create" { + params: v2::ProjectCreateParams, + serialization: global("projects"), + response: v2::ProjectCreateResponse, + }, + #[experimental("project/import")] + ProjectImport => "project/import" { + params: v2::ProjectImportParams, + serialization: global("projects"), + response: v2::ProjectImportResponse, + }, + #[experimental("project/update")] + ProjectUpdate => "project/update" { + params: v2::ProjectUpdateParams, + serialization: global("projects"), + response: v2::ProjectUpdateResponse, + }, + #[experimental("project/move")] + ProjectMove => "project/move" { + params: v2::ProjectMoveParams, + serialization: global("projects"), + response: v2::ProjectMoveResponse, + }, + #[experimental("project/delete")] + ProjectDelete => "project/delete" { + params: v2::ProjectDeleteParams, + serialization: global("projects"), + response: v2::ProjectDeleteResponse, + }, ThreadSectionList => "threadSection/list" { params: v2::ThreadSectionListParams, serialization: global_shared_read("thread-sections"), @@ -1761,6 +1804,10 @@ server_notification_definitions! { ThreadGoalCleared => "thread/goal/cleared" (v2::ThreadGoalClearedNotification), #[experimental("thread/queue/changed")] ThreadQueueChanged => "thread/queue/changed" (v2::ThreadQueueChangedNotification), + #[experimental("project/changed")] + ProjectChanged => "project/changed" (v2::ProjectChangedNotification), + #[experimental("thread/project/updated")] + ThreadProjectUpdated => "thread/project/updated" (v2::ThreadProjectUpdatedNotification), #[experimental("thread/environment/connected")] EnvironmentConnected => "thread/environment/connected" (v2::EnvironmentConnectionNotification), #[experimental("thread/environment/disconnected")] @@ -2992,6 +3039,7 @@ mod tests { ephemeral: true, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 1, @@ -3046,6 +3094,7 @@ mod tests { "ephemeral": true, "section": null, "sectionEnteredAt": null, + "projectId": null, "historyMode": "legacy", "modelProvider": "openai", "createdAt": 1, diff --git a/codex-rs/app-server-protocol/src/protocol/v2/mod.rs b/codex-rs/app-server-protocol/src/protocol/v2/mod.rs index 58383789d8..331e561eea 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/mod.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/mod.rs @@ -21,6 +21,7 @@ mod permissions; mod plugin; mod plugin_search; mod process; +mod project; mod realtime; mod remote_control; mod review; @@ -51,6 +52,7 @@ pub use permissions::*; pub use plugin::*; pub use plugin_search::*; pub use process::*; +pub use project::*; pub use realtime::*; pub use remote_control::*; pub use review::*; diff --git a/codex-rs/app-server-protocol/src/protocol/v2/project.rs b/codex-rs/app-server-protocol/src/protocol/v2/project.rs new file mode 100644 index 0000000000..7cfc07d7d5 --- /dev/null +++ b/codex-rs/app-server-protocol/src/protocol/v2/project.rs @@ -0,0 +1,176 @@ +use std::collections::BTreeMap; + +use crate::JsonSchema; +use crate::TS; +use codex_experimental_api_macros::ExperimentalApi; +use codex_utils_absolute_path::AbsolutePathBuf; +use serde::Deserialize; +use serde::Serialize; + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectRoot { + pub path: AbsolutePathBuf, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct Project { + pub id: String, + pub name: String, + pub roots: Vec, + pub metadata: BTreeMap, + #[ts(type = "number")] + pub position: i64, + #[ts(type = "number")] + pub created_at: i64, + #[ts(type = "number")] + pub updated_at: i64, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectListParams { + #[ts(optional = nullable)] + pub cursor: Option, + #[ts(optional = nullable)] + pub limit: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectListResponse { + pub data: Vec, + pub next_cursor: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectReadParams { + pub project_id: String, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectReadResponse { + pub project: Project, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectCreateParams { + pub name: String, + pub roots: Vec, + #[ts(optional = nullable)] + pub metadata: Option>, + pub idempotency_key: String, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectCreateResponse { + pub project: Project, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectImportParams { + pub name: String, + pub roots: Vec, + #[ts(optional = nullable)] + pub metadata: Option>, + #[ts(optional = nullable)] + pub threads: Option>, + pub idempotency_key: String, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectImportResponse { + pub project: Project, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectUpdateParams { + pub project_id: String, + #[ts(optional = nullable)] + pub name: Option, + #[ts(optional = nullable)] + pub roots: Option>, + #[ts(optional = nullable)] + pub metadata: Option>, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectUpdateResponse { + pub project: Project, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectMoveParams { + pub project_id: String, + #[ts(optional = nullable)] + pub before_project_id: Option, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectMoveResponse {} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS, ExperimentalApi)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectDeleteParams { + pub project_id: String, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectDeleteResponse {} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub enum ProjectChangeType { + Created, + Updated, + Deleted, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ProjectChangedNotification { + pub project_id: String, + pub change_type: ProjectChangeType, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export_to = "v2/")] +pub struct ThreadProjectUpdatedNotification { + pub thread_id: String, + #[schemars( + required, + schema_with = "crate::protocol::serde_helpers::nullable_string_schema" + )] + pub project_id: Option, +} diff --git a/codex-rs/app-server-protocol/src/protocol/v2/tests.rs b/codex-rs/app-server-protocol/src/protocol/v2/tests.rs index 2b52e0cab6..873c5ea909 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/tests.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/tests.rs @@ -258,6 +258,7 @@ fn thread_resume_response_round_trips_initial_turns_page() { appearance: None, }), section_entered_at: Some(1), + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 1, @@ -314,10 +315,12 @@ fn thread_resume_response_round_trips_initial_turns_page() { .expect("serialized thread should be an object"); legacy_thread_fields.remove("section"); legacy_thread_fields.remove("sectionEnteredAt"); + legacy_thread_fields.remove("projectId"); let legacy_thread = serde_json::from_value::(legacy_thread).expect("deserialize legacy thread"); assert_eq!(legacy_thread.section, None); assert_eq!(legacy_thread.section_entered_at, None); + assert_eq!(legacy_thread.project_id, None); assert_eq!( value.get("initialTurnsPage"), diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs index 6c409e78f3..75fe5091b1 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/thread.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/thread.rs @@ -118,6 +118,11 @@ pub struct ThreadStartParams { /// Optional client-supplied analytics source classification for this thread. #[ts(optional = nullable)] pub thread_source: Option, + /// Optional project identity for this new thread. Durable threads persist + /// the assignment; ephemeral threads expose it only in live responses. + #[experimental("thread/start.projectId")] + #[ts(optional = nullable)] + pub project_id: Option, /// Optional sticky environments for this thread. /// /// Omitted selects the default environment when environment access is @@ -858,7 +863,7 @@ pub struct ThreadGoalClearResponse { pub cleared: bool, } -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS, ExperimentalApi)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct QueuedSubmission { @@ -965,11 +970,16 @@ pub struct ThreadQueueStartResponse { pub turn: Turn, } -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS, ExperimentalApi)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ThreadMetadataUpdateParams { pub thread_id: String, + /// Omit to leave the project unchanged, use an empty string to clear it, + /// or provide an existing project ID to assign it. + #[experimental("thread/metadata/update.projectId")] + #[ts(optional = nullable)] + pub project_id: Option, /// Patch the stored Git metadata for this thread. /// Omit a field to leave it unchanged, set it to `null` to clear it, or /// provide a string to replace the stored value. @@ -1381,6 +1391,17 @@ pub struct ThreadListParams { )] #[ts(optional = nullable, type = "string | null")] pub section_id: Option>, + /// Omit to include every project, set to null for unassigned threads, + /// or provide a project ID to return only threads in that project. + #[experimental("thread/list.projectId")] + #[serde( + default, + skip_serializing_if = "Option::is_none", + serialize_with = "crate::protocol::serde_helpers::serialize_double_option", + deserialize_with = "crate::protocol::serde_helpers::deserialize_double_option" + )] + #[ts(optional = nullable, type = "string | null")] + pub project_id: Option>, /// Optional cwd filter or filters; when set, only threads whose session cwd /// exactly matches one of these paths are returned. #[ts(optional = nullable, type = "string | Array | null")] diff --git a/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs b/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs index 304d5613f3..b59078c67f 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/thread_data.rs @@ -190,7 +190,7 @@ pub struct ThreadSectionAppearance { pub color: Option, } -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS, ExperimentalApi)] +#[derive(Serialize, Debug, Clone, PartialEq, JsonSchema, TS, ExperimentalApi)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct Thread { @@ -216,6 +216,12 @@ pub struct Thread { #[serde(default)] #[ts(type = "number | null")] pub section_entered_at: Option, + /// Canonical project assignment owned by app-server, if any. + #[schemars( + required, + schema_with = "crate::protocol::serde_helpers::nullable_string_schema" + )] + pub project_id: Option, /// Persisted thread history contract selected when this thread was created. #[experimental("thread.historyMode")] #[serde(default)] @@ -262,6 +268,82 @@ pub struct Thread { pub turns: Vec, } +// TODO: Remove this compatibility decoder after app-server versions that omitted +// `projectId` have aged out of the supported TUI -> remote app-server version-skew window. +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +struct ThreadCompatibility { + id: String, + extra: Option, + session_id: String, + forked_from_id: Option, + parent_thread_id: Option, + preview: String, + ephemeral: bool, + #[serde(default)] + section: Option, + #[serde(default)] + section_entered_at: Option, + #[serde(default)] + project_id: Option, + #[serde(default)] + history_mode: ThreadHistoryMode, + model_provider: String, + created_at: i64, + updated_at: i64, + recency_at: Option, + status: ThreadStatus, + path: Option, + cwd: AbsolutePathBuf, + cli_version: String, + source: SessionSource, + can_accept_direct_input: Option, + thread_source: Option, + agent_nickname: Option, + agent_role: Option, + git_info: Option, + name: Option, + turns: Vec, +} + +impl<'de> Deserialize<'de> for Thread { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + let thread = ThreadCompatibility::deserialize(deserializer)?; + Ok(Self { + id: thread.id, + extra: thread.extra, + session_id: thread.session_id, + forked_from_id: thread.forked_from_id, + parent_thread_id: thread.parent_thread_id, + preview: thread.preview, + ephemeral: thread.ephemeral, + section: thread.section, + section_entered_at: thread.section_entered_at, + project_id: thread.project_id, + history_mode: thread.history_mode, + model_provider: thread.model_provider, + created_at: thread.created_at, + updated_at: thread.updated_at, + recency_at: thread.recency_at, + status: thread.status, + path: thread.path, + cwd: thread.cwd, + cli_version: thread.cli_version, + source: thread.source, + can_accept_direct_input: thread.can_accept_direct_input, + thread_source: thread.thread_source, + agent_nickname: thread.agent_nickname, + agent_role: thread.agent_role, + git_info: thread.git_info, + name: thread.name, + turns: thread.turns, + }) + } +} + #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] diff --git a/codex-rs/app-server-test-client/src/lib.rs b/codex-rs/app-server-test-client/src/lib.rs index 5f35575f33..144bdb2a36 100644 --- a/codex-rs/app-server-test-client/src/lib.rs +++ b/codex-rs/app-server-test-client/src/lib.rs @@ -1309,6 +1309,7 @@ async fn thread_list(endpoint: &Endpoint, config_overrides: &[String], limit: u3 source_kinds: None, archived: None, section_id: None, + project_id: None, parent_thread_id: None, ancestor_thread_id: None, cwd: None, diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index a9cbbe3d32..2a0982724f 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -161,11 +161,13 @@ Example with notification opt-out: ## API Overview - `server/diagnostics` — experimental; read process-local memory measurements and registered diagnostic gauges. -- `thread/start` — create a new thread; emits `thread/started` (including the current `thread.status`) and auto-subscribes you to turn/item events for that thread. Experimental `historyMode: "paginated"` selects projection-backed durable history. When the request includes a `cwd` and the resolved sandbox is `workspace-write` or full access, app-server also marks that project as trusted in the user `config.toml`. Pass `sessionStartSource: "clear"` when starting a replacement thread after clearing the current session so `SessionStart` hooks receive `source: "clear"` instead of the default `"startup"`. Experimental `allowProviderModelFallback` lets providers backed by an authoritative static model catalog replace an unavailable requested `model` with the catalog default; dynamic or cached catalogs preserve the requested model. Experimental `runtimeWorkspaceRoots` supplies the runtime workspace roots used when app-server creates default environment selections; paths must be absolute. For permissions, prefer experimental `permissions` profile selection by id; the legacy `sandbox` shorthand is still accepted but cannot be combined with `permissions`. Deprecated experimental `multiAgentMode` is ignored; use Ultra reasoning effort for proactive multi-agent behavior. Experimental `environments` selects the sticky execution environments for turns on the thread; omit it to use the server default, pass `[]` to disable environments, or pass explicit environment ids with per-environment `cwd` and optional environment-native `runtimeWorkspaceRoots`. Explicit environments ignore the top-level roots; omitted per-environment roots default to that environment's `cwd`, while an empty list explicitly selects no roots. Experimental `selectedCapabilityRoots` selects environment-owned plugin or standalone-skill roots using environment-native absolute paths. Skills found below those roots are listed and read through the owning environment. Stdio MCP servers declared by selected plugins are started in that environment, and HTTP MCP connections use that environment's HTTP client. +- `thread/start` — create a new thread; emits `thread/started` (including the current `thread.status`) and auto-subscribes you to turn/item events for that thread. Experimental `projectId` assigns a durable thread to an existing project; ephemeral threads expose the same project identity in live responses without creating a stored/listable assignment. Experimental `historyMode: "paginated"` selects projection-backed durable history. When the request includes a `cwd` and the resolved sandbox is `workspace-write` or full access, app-server also marks that project as trusted in the user `config.toml`. Pass `sessionStartSource: "clear"` when starting a replacement thread after clearing the current session so `SessionStart` hooks receive `source: "clear"` instead of the default `"startup"`. Experimental `allowProviderModelFallback` lets providers backed by an authoritative static model catalog replace an unavailable requested `model` with the catalog default; dynamic or cached catalogs preserve the requested model. Experimental `runtimeWorkspaceRoots` supplies the runtime workspace roots used when app-server creates default environment selections; paths must be absolute. For permissions, prefer experimental `permissions` profile selection by id; the legacy `sandbox` shorthand is still accepted but cannot be combined with `permissions`. Deprecated experimental `multiAgentMode` is ignored; use Ultra reasoning effort for proactive multi-agent behavior. Experimental `environments` selects the sticky execution environments for turns on the thread; omit it to use the server default, pass `[]` to disable environments, or pass explicit environment ids with per-environment `cwd` and optional environment-native `runtimeWorkspaceRoots`. Explicit environments ignore the top-level roots; omitted per-environment roots default to that environment's `cwd`, while an empty list explicitly selects no roots. Experimental `selectedCapabilityRoots` selects environment-owned plugin or standalone-skill roots using environment-native absolute paths. Skills found below those roots are listed and read through the owning environment. Stdio MCP servers declared by selected plugins are started in that environment, and HTTP MCP connections use that environment's HTTP client. - `thread/resume` — reopen an existing thread by id so subsequent `turn/start` calls append to it. Accepts the same permission override rules as `thread/start`. - `thread/fork` — fork an existing thread into a new thread id by copying the stored history; pass an optional `lastTurnId` to copy history only through that turn, inclusive, and drop later turns from the fork. An in-progress `lastTurnId` boundary is rejected. Experimental `beforeTurnId` instead copies history strictly before the referenced turn, including when that turn is in progress, and cannot be combined with `lastTurnId`. If both boundaries are null while the source thread is mid-turn, the fork records the same interruption marker as `turn/interrupt` instead of inheriting an unmarked partial turn suffix. The returned `thread.forkedFromId` points at the source thread when known. Accepts `ephemeral: true` for an in-memory temporary fork, emits `thread/started` (including the current `thread.status`), and auto-subscribes you to turn/item events for the new thread. Experimental clients can pass `excludeTurns: true` when they plan to page fork history via `thread/turns/list` instead of receiving the full turn array immediately, or `deferGoalContinuation: true` to carry the source thread's current goal into the fork and run an explicit turn before automatic continuation resumes. Deferred goal continuation is persisted until that turn starts and cannot be combined with `ephemeral: true`. Accepts the same permission override rules as `thread/start`. - `thread/start`, `thread/resume`, and `thread/fork` responses include the legacy `sandbox` compatibility projection. `instructionSources` lists loaded instruction files using each source environment's native absolute path syntax, including files loaded from remote environments. Experimental clients can read `runtimeWorkspaceRoots` for the thread-scoped runtime roots and `activePermissionProfile` for the named or implicit built-in profile identity/provenance when known. Their deprecated experimental `multiAgentMode` field, and the corresponding thread setting, always report `explicitRequestOnly`; Ultra reasoning effort is the source of proactive multi-agent behavior. -- `thread/list` — page through stored threads; supports cursor-based pagination and optional `modelProviders`, `sourceKinds`, `archived`, `sectionId`, `cwd`, and `searchTerm` filters. Set `sortKey` to `"section_position"` when listing a section in its persisted manual order. Experimental clients can use `parentThreadId` for direct spawned children or `ancestorThreadId` for spawned descendants at any depth; the two filters are mutually exclusive. Review and Guardian threads are not included because they do not participate in that spawn-edge lifecycle. Each returned `thread` includes `status` (`ThreadStatus`), defaulting to `notLoaded` when the thread is not currently loaded. Subagent threads also include `parentThreadId` when the immediate parent is known. +- `thread/list` — page through stored threads; supports cursor-based pagination and optional `modelProviders`, `sourceKinds`, `archived`, `sectionId`, `cwd`, and `searchTerm` filters. Experimental `projectId` filters one project, while `null` selects unassigned threads. Set `sortKey` to `"section_position"` when listing a section in its persisted manual order. Experimental clients can use `parentThreadId` for direct spawned children or `ancestorThreadId` for spawned descendants at any depth; the two filters are mutually exclusive. Review and Guardian threads are not included because they do not participate in that spawn-edge lifecycle. Each returned `thread` includes `status` (`ThreadStatus`), defaulting to `notLoaded` when the thread is not currently loaded. Subagent threads also include `parentThreadId` when the immediate parent is known. +- `project/list`, `project/read`, `project/create`, `project/import`, `project/update`, `project/move`, and `project/delete` — experimental SQLite-backed project APIs. Projects have canonical server-generated IDs, persisted manual positions, ordered absolute roots, and an opaque string metadata bag. `project/move` places a project before another project or appends it when `beforeProjectId` is `null`. Create and import require an opaque `idempotencyKey`; clients should generate a UUID for ordinary creates and may use a stable namespaced legacy ID for migration. Reusing a key returns the original project without emitting notifications or repeating thread assignments, and keys remain reserved after deletion. Import can atomically assign existing thread IDs. Delete clears assignments but never deletes threads, directories, or files. +- `project/changed` and `thread/project/updated` — experimental notifications emitted after committed project or assignment changes. Reconnect with `project/list` and `thread/list` to recover authoritative state. - `threadSection/list` — page through independently persisted thread sections, including their display names and optional `appearance` (`icon` and `color`). - `threadSection/create` — create a durable custom section with a server-generated UUID, nonempty display name, and optional `appearance`; returns its `section`. - `threadSection/update` — rename an existing custom section and optionally replace its `appearance`; omit appearance to preserve it or pass `null` to clear it. The built-in pinned section cannot be updated. @@ -175,7 +177,7 @@ Example with notification opt-out: - `thread/turns/list` — experimental; page through a stored thread’s turn history without resuming it; supports cursor-based pagination with `sortDirection`, `itemsView`, `nextCursor`, and `backwardsCursor`. - `thread/items/list` — experimental; page through persisted thread items without resuming the thread. Pass `turnId` to restrict results to one turn, or omit it to page items across the thread. The active thread store must support item pagination. - `thread/searchOccurrences` — experimental; find literal, case-insensitive matches in visible user messages and summary-selected final assistant messages within one paginated thread. -- `thread/metadata/update` — patch stored thread metadata in sqlite; supports updating persisted `gitInfo` fields and returns the refreshed `thread`. +- `thread/metadata/update` — patch stored thread metadata in sqlite; supports updating persisted `gitInfo` fields and experimental `projectId`, then returns the refreshed `thread`. Omit `projectId` to preserve assignment and pass an empty string to clear it. - `thread/section/move` — atomically move a thread into the section identified by `sectionId`, before another thread or at the end when `beforeThreadId` is `null`. Reordering within the same section preserves `sectionEnteredAt`; entering a different section resets it. Set `sectionId` to `null` to remove the thread from its section. Returns `{}` on success. - `thread/settings/update` — experimental; queue a partial update to a loaded thread’s next-turn settings without starting a turn or adding transcript items. Omitted fields leave settings unchanged; `serviceTier: null` clears the tier; deprecated `multiAgentMode` is ignored, while Ultra reasoning effort enables proactive multi-agent behavior; `sandboxPolicy` and `permissions` cannot be combined. Returns `{}` when the update is accepted and emits `thread/settings/updated` with the full effective settings only if they actually change. `turn/start` settings overrides emit the same notification when they change the stored settings. - `thread/memoryMode/set` — experimental; set a thread’s persisted memory eligibility to `"enabled"` or `"disabled"` for either a loaded thread or a stored rollout; returns `{}` on success. diff --git a/codex-rs/app-server/src/bespoke_event_handling.rs b/codex-rs/app-server/src/bespoke_event_handling.rs index 32c2226686..0a7e007924 100644 --- a/codex-rs/app-server/src/bespoke_event_handling.rs +++ b/codex-rs/app-server/src/bespoke_event_handling.rs @@ -2227,6 +2227,7 @@ mod tests { section: None, section_position: None, section_entered_at: None, + project_id: None, cwd: test_path_buf("/tmp").abs().into(), cli_version: "0.0.0".to_string(), source: SessionSource::Cli, diff --git a/codex-rs/app-server/src/message_processor.rs b/codex-rs/app-server/src/message_processor.rs index 9836de9749..e40c943933 100644 --- a/codex-rs/app-server/src/message_processor.rs +++ b/codex-rs/app-server/src/message_processor.rs @@ -35,6 +35,7 @@ use crate::request_processors::MarketplaceRequestProcessor; use crate::request_processors::McpRequestProcessor; use crate::request_processors::PluginRequestProcessor; use crate::request_processors::ProcessExecRequestProcessor; +use crate::request_processors::ProjectRequestProcessor; use crate::request_processors::RemoteControlRequestProcessor; use crate::request_processors::SearchRequestProcessor; use crate::request_processors::ThreadGoalRequestProcessor; @@ -147,6 +148,7 @@ pub(crate) struct MessageProcessor { marketplace_processor: MarketplaceRequestProcessor, mcp_processor: McpRequestProcessor, plugin_processor: PluginRequestProcessor, + project_processor: ProjectRequestProcessor, remote_control_processor: RemoteControlRequestProcessor, search_processor: SearchRequestProcessor, thread_goal_processor: ThreadGoalRequestProcessor, @@ -475,6 +477,11 @@ impl MessageProcessor { outgoing.clone(), queue_service, ); + let project_processor = ProjectRequestProcessor::new( + Arc::clone(&thread_store), + outgoing.clone(), + Arc::clone(&thread_list_state_permit), + ); let thread_processor = ThreadRequestProcessor::new( auth_manager.clone(), Arc::clone(&thread_manager), @@ -562,6 +569,7 @@ impl MessageProcessor { marketplace_processor, mcp_processor, plugin_processor, + project_processor, remote_control_processor, search_processor, thread_goal_processor, @@ -1268,6 +1276,27 @@ impl MessageProcessor { ClientRequest::ThreadList { params, .. } => { self.thread_processor.thread_list(params).await } + ClientRequest::ProjectList { params, .. } => { + self.project_processor.project_list(params).await + } + ClientRequest::ProjectRead { params, .. } => { + self.project_processor.project_read(params).await + } + ClientRequest::ProjectCreate { params, .. } => { + self.project_processor.project_create(params).await + } + ClientRequest::ProjectImport { params, .. } => { + self.project_processor.project_import(params).await + } + ClientRequest::ProjectUpdate { params, .. } => { + self.project_processor.project_update(params).await + } + ClientRequest::ProjectMove { params, .. } => { + self.project_processor.project_move(params).await + } + ClientRequest::ProjectDelete { params, .. } => { + self.project_processor.project_delete(params).await + } ClientRequest::ThreadSearch { params, .. } => { self.thread_processor.thread_search(params).await } diff --git a/codex-rs/app-server/src/request_processors.rs b/codex-rs/app-server/src/request_processors.rs index 0929e2629e..3a5d5235a7 100644 --- a/codex-rs/app-server/src/request_processors.rs +++ b/codex-rs/app-server/src/request_processors.rs @@ -244,6 +244,7 @@ use codex_app_server_protocol::ThreadMetadataGitInfoUpdateParams; use codex_app_server_protocol::ThreadMetadataUpdateParams; use codex_app_server_protocol::ThreadMetadataUpdateResponse; use codex_app_server_protocol::ThreadNameUpdatedNotification; +use codex_app_server_protocol::ThreadProjectUpdatedNotification; use codex_app_server_protocol::ThreadReadParams; use codex_app_server_protocol::ThreadReadResponse; use codex_app_server_protocol::ThreadRealtimeAppendAudioParams; @@ -475,6 +476,7 @@ use codex_state::ThreadMetadata; use codex_state::log_db::LogDbLayer; use codex_thread_store::ArchiveThreadParams as StoreArchiveThreadParams; use codex_thread_store::ArchiveThreadsParams as StoreArchiveThreadsParams; +use codex_thread_store::ClearableField as StoreClearableField; use codex_thread_store::DeleteThreadsParams as StoreDeleteThreadsParams; use codex_thread_store::GitInfoPatch as StoreGitInfoPatch; use codex_thread_store::ItemSortKey as StoreItemSortKey; @@ -545,6 +547,7 @@ mod marketplace_processor; mod mcp_processor; mod plugins; mod process_exec_processor; +mod projects; mod remote_control_processor; mod search; mod thread_enrichment; @@ -571,6 +574,7 @@ pub(crate) use marketplace_processor::MarketplaceRequestProcessor; pub(crate) use mcp_processor::McpRequestProcessor; pub(crate) use plugins::PluginRequestProcessor; pub(crate) use process_exec_processor::ProcessExecRequestProcessor; +pub(crate) use projects::ProjectRequestProcessor; pub(crate) use remote_control_processor::RemoteControlRequestProcessor; pub(crate) use search::SearchRequestProcessor; pub(crate) use thread_goal_processor::ThreadGoalRequestProcessor; diff --git a/codex-rs/app-server/src/request_processors/projects.rs b/codex-rs/app-server/src/request_processors/projects.rs new file mode 100644 index 0000000000..b18756f518 --- /dev/null +++ b/codex-rs/app-server/src/request_processors/projects.rs @@ -0,0 +1,378 @@ +use std::collections::HashSet; +use std::sync::Arc; + +use codex_app_server_protocol::ClientResponsePayload; +use codex_app_server_protocol::JSONRPCErrorError; +use codex_app_server_protocol::Project; +use codex_app_server_protocol::ProjectChangeType; +use codex_app_server_protocol::ProjectChangedNotification; +use codex_app_server_protocol::ProjectCreateParams; +use codex_app_server_protocol::ProjectCreateResponse; +use codex_app_server_protocol::ProjectDeleteParams; +use codex_app_server_protocol::ProjectDeleteResponse; +use codex_app_server_protocol::ProjectImportParams; +use codex_app_server_protocol::ProjectImportResponse; +use codex_app_server_protocol::ProjectListParams; +use codex_app_server_protocol::ProjectListResponse; +use codex_app_server_protocol::ProjectMoveParams; +use codex_app_server_protocol::ProjectMoveResponse; +use codex_app_server_protocol::ProjectReadParams; +use codex_app_server_protocol::ProjectReadResponse; +use codex_app_server_protocol::ProjectRoot; +use codex_app_server_protocol::ProjectUpdateParams; +use codex_app_server_protocol::ProjectUpdateResponse; +use codex_app_server_protocol::ServerNotification; +use codex_app_server_protocol::ThreadProjectUpdatedNotification; +use codex_thread_store::CreateProjectParams as StoreCreateProjectParams; +use codex_thread_store::ListProjectsParams as StoreListProjectsParams; +use codex_thread_store::MoveProjectParams as StoreMoveProjectParams; +use codex_thread_store::ProjectMoveOutcome; +use codex_thread_store::StoredProject; +use codex_thread_store::StoredProjectRoot; +use codex_thread_store::ThreadStore; +use codex_thread_store::ThreadStoreError; +use codex_thread_store::UpdateProjectParams as StoreUpdateProjectParams; +use tokio::sync::Semaphore; +use tokio::sync::SemaphorePermit; + +use super::thread_processor::THREAD_LIST_DEFAULT_LIMIT; +use super::thread_processor::THREAD_LIST_MAX_LIMIT; +use crate::error_code::internal_error; +use crate::error_code::invalid_params; +use crate::error_code::method_not_found; +use crate::outgoing_message::OutgoingMessageSender; + +#[derive(Clone)] +pub(crate) struct ProjectRequestProcessor { + thread_store: Arc, + outgoing: Arc, + thread_list_state_permit: Arc, +} + +impl ProjectRequestProcessor { + pub(crate) fn new( + thread_store: Arc, + outgoing: Arc, + thread_list_state_permit: Arc, + ) -> Self { + Self { + thread_store, + outgoing, + thread_list_state_permit, + } + } + + pub(crate) async fn project_list( + &self, + params: ProjectListParams, + ) -> Result, JSONRPCErrorError> { + let page = self + .thread_store + .list_projects(StoreListProjectsParams { + cursor: params.cursor, + limit: params + .limit + .map(|limit| limit as usize) + .unwrap_or(THREAD_LIST_DEFAULT_LIMIT) + .clamp(1, THREAD_LIST_MAX_LIMIT), + }) + .await + .map_err(|error| project_store_error("project/list", error))?; + Ok(Some( + ProjectListResponse { + data: page + .projects + .into_iter() + .map(api_project) + .collect::>()?, + next_cursor: page.next_cursor, + } + .into(), + )) + } + + pub(crate) async fn project_read( + &self, + params: ProjectReadParams, + ) -> Result, JSONRPCErrorError> { + let project = self + .thread_store + .read_project(params.project_id.clone()) + .await + .map_err(|error| project_store_error("project/read", error))? + .ok_or_else(|| invalid_params(format!("project not found: {}", params.project_id)))?; + Ok(Some( + ProjectReadResponse { + project: api_project(project)?, + } + .into(), + )) + } + + pub(crate) async fn project_create( + &self, + params: ProjectCreateParams, + ) -> Result, JSONRPCErrorError> { + let (project, created, _) = self + .create_project( + params.name, + params.roots, + params.metadata, + Vec::new(), + params.idempotency_key, + "project/create", + ) + .await?; + if created { + self.notify_project_changed(&project.id, ProjectChangeType::Created) + .await; + } + Ok(Some(ProjectCreateResponse { project }.into())) + } + + pub(crate) async fn project_import( + &self, + params: ProjectImportParams, + ) -> Result, JSONRPCErrorError> { + let _thread_list_state_permit = self.acquire_thread_list_state_permit().await?; + let (project, created, thread_ids) = self + .create_project( + params.name, + params.roots, + params.metadata, + params.threads.unwrap_or_default(), + params.idempotency_key, + "project/import", + ) + .await?; + if created { + self.notify_project_changed(&project.id, ProjectChangeType::Created) + .await; + self.notify_thread_projects(thread_ids, Some(project.id.clone())) + .await; + } + Ok(Some(ProjectImportResponse { project }.into())) + } + + pub(crate) async fn project_update( + &self, + params: ProjectUpdateParams, + ) -> Result, JSONRPCErrorError> { + let name = params.name.map(validate_name).transpose()?; + let roots = params.roots.map(validate_roots).transpose()?; + let updated = self + .thread_store + .update_project(StoreUpdateProjectParams { + project_id: params.project_id.clone(), + name, + roots, + metadata: params.metadata, + }) + .await + .map_err(|error| project_store_error("project/update", error))? + .ok_or_else(|| invalid_params(format!("project not found: {}", params.project_id)))?; + let project = api_project(updated.project)?; + if updated.changed { + self.notify_project_changed(&project.id, ProjectChangeType::Updated) + .await; + } + Ok(Some(ProjectUpdateResponse { project }.into())) + } + + pub(crate) async fn project_move( + &self, + params: ProjectMoveParams, + ) -> Result, JSONRPCErrorError> { + let project_id = params.project_id; + let outcome = self + .thread_store + .move_project(StoreMoveProjectParams { + project_id: project_id.clone(), + before_project_id: params.before_project_id, + }) + .await + .map_err(|error| project_store_error("project/move", error))? + .ok_or_else(|| invalid_params(format!("project not found: {project_id}")))?; + if outcome == ProjectMoveOutcome::Moved { + self.notify_project_changed(&project_id, ProjectChangeType::Updated) + .await; + } + Ok(Some(ProjectMoveResponse {}.into())) + } + + pub(crate) async fn project_delete( + &self, + params: ProjectDeleteParams, + ) -> Result, JSONRPCErrorError> { + let _thread_list_state_permit = self.acquire_thread_list_state_permit().await?; + let deleted = self + .thread_store + .delete_project(params.project_id.clone()) + .await + .map_err(|error| project_store_error("project/delete", error))? + .ok_or_else(|| invalid_params(format!("project not found: {}", params.project_id)))?; + self.notify_project_changed(¶ms.project_id, ProjectChangeType::Deleted) + .await; + self.notify_thread_projects(deleted.affected_active_thread_ids, /*project_id*/ None) + .await; + Ok(Some(ProjectDeleteResponse {}.into())) + } + + async fn create_project( + &self, + name: String, + roots: Vec, + metadata: Option>, + thread_ids: Vec, + idempotency_key: String, + operation: &'static str, + ) -> Result<(Project, bool, Vec), JSONRPCErrorError> { + let idempotency_key = validate_idempotency_key(idempotency_key)?; + let thread_ids = validate_thread_ids(thread_ids)?; + let created = self + .thread_store + .create_project(StoreCreateProjectParams { + name: validate_name(name)?, + roots: validate_roots(roots)?, + metadata: metadata.unwrap_or_default(), + thread_ids: thread_ids.clone(), + idempotency_key, + }) + .await + .map_err(|error| project_store_error(operation, error))?; + Ok((api_project(created.project)?, created.created, thread_ids)) + } + + async fn notify_project_changed(&self, project_id: &str, change_type: ProjectChangeType) { + self.outgoing + .send_server_notification(ServerNotification::ProjectChanged( + ProjectChangedNotification { + project_id: project_id.to_string(), + change_type, + }, + )) + .await; + } + + async fn notify_thread_projects(&self, thread_ids: Vec, project_id: Option) { + for thread_id in thread_ids { + self.outgoing + .send_server_notification(ServerNotification::ThreadProjectUpdated( + ThreadProjectUpdatedNotification { + thread_id, + project_id: project_id.clone(), + }, + )) + .await; + } + } + + async fn acquire_thread_list_state_permit( + &self, + ) -> Result, JSONRPCErrorError> { + self.thread_list_state_permit + .acquire() + .await + .map_err(|err| { + internal_error(format!("failed to acquire thread list state permit: {err}")) + }) + } +} + +fn validate_name(name: String) -> Result { + let name = name.trim().to_string(); + if name.is_empty() { + return Err(invalid_params("project name must not be empty")); + } + Ok(name) +} + +fn validate_idempotency_key(key: String) -> Result { + if key.trim().is_empty() { + return Err(invalid_params("idempotencyKey must not be empty")); + } + if key.len() > 512 { + return Err(invalid_params("idempotencyKey must be at most 512 bytes")); + } + Ok(key) +} + +fn validate_roots(roots: Vec) -> Result, JSONRPCErrorError> { + let mut logical = HashSet::new(); + let mut canonical = HashSet::new(); + roots + .into_iter() + .map(|root| { + let path = codex_utils_absolute_path::AbsolutePathBuf::from_absolute_path_checked( + root.path.into_path_buf(), + ) + .map_err(|error| invalid_params(format!("invalid project root: {error}")))? + .into_path_buf(); + if !logical.insert(path.clone()) { + return Err(invalid_params(format!( + "duplicate project root: {}", + path.display() + ))); + } + if let Ok(resolved) = std::fs::canonicalize(&path) + && !canonical.insert(resolved) + { + return Err(invalid_params(format!( + "duplicate resolved project root: {}", + path.display() + ))); + } + Ok(StoredProjectRoot { + path: path.display().to_string(), + }) + }) + .collect() +} + +fn validate_thread_ids(thread_ids: Vec) -> Result, JSONRPCErrorError> { + let mut seen = HashSet::new(); + for thread_id in &thread_ids { + if !seen.insert(thread_id.clone()) { + return Err(invalid_params(format!("duplicate thread id: {thread_id}"))); + } + } + Ok(thread_ids) +} + +fn api_project(project: StoredProject) -> Result { + Ok(Project { + id: project.id, + name: project.name, + roots: project + .roots + .into_iter() + .map(|root| { + Ok(ProjectRoot { + path: codex_utils_absolute_path::AbsolutePathBuf::from_absolute_path(root.path) + .map_err(|error| { + internal_error(format!("stored project root is not absolute: {error}")) + })?, + }) + }) + .collect::>()?, + metadata: project.metadata, + position: project.position, + created_at: project.created_at_ms / 1000, + updated_at: project.updated_at_ms / 1000, + }) +} + +fn project_store_error(operation: &'static str, error: ThreadStoreError) -> JSONRPCErrorError { + match error { + ThreadStoreError::Unsupported { .. } => { + method_not_found(format!("{operation} is unavailable without sqlite state")) + } + ThreadStoreError::InvalidRequest { message } => invalid_params(message), + ThreadStoreError::Internal { message } + if message.contains("thread not found") || message.contains("project not found") => + { + invalid_params(message) + } + error => internal_error(format!("failed to run {operation}: {error}")), + } +} diff --git a/codex-rs/app-server/src/request_processors/thread_processor.rs b/codex-rs/app-server/src/request_processors/thread_processor.rs index 4bb5e435f8..caeae77e31 100644 --- a/codex-rs/app-server/src/request_processors/thread_processor.rs +++ b/codex-rs/app-server/src/request_processors/thread_processor.rs @@ -25,11 +25,53 @@ const CODEX_TUI_CLIENT_NAME: &str = "codex-tui"; const THREAD_ROLLBACK_DEPRECATION_SUMMARY: &str = "thread/rollback is deprecated and will be removed soon"; +async fn stage_pending_project_metadata( + thread_manager: &ThreadManager, + thread_store: &dyn ThreadStore, + project_id: Option<&str>, + operation: &'static str, +) -> Result, JSONRPCErrorError> { + let Some(project_id) = project_id else { + return Ok(None); + }; + let thread_id = thread_manager.reserve_thread_id(); + thread_store + .stage_pending_thread_metadata( + thread_id, + StoreThreadMetadataPatch { + project_id: Some(Some(project_id.to_string())), + ..Default::default() + }, + ) + .await + .map_err(|error| match error { + ThreadStoreError::Unsupported { .. } => { + method_not_found(format!("{operation} is unavailable without sqlite state")) + } + ThreadStoreError::InvalidRequest { message } => invalid_request(message), + error => internal_error(format!("failed to stage {operation} metadata: {error}")), + })?; + Ok(Some(thread_id)) +} + +async fn remove_pending_project_metadata( + thread_store: &dyn ThreadStore, + thread_id: Option, +) { + let Some(thread_id) = thread_id else { + return; + }; + if let Err(error) = thread_store.remove_pending_thread_metadata(thread_id).await { + warn!("failed to remove staged project metadata for {thread_id}: {error}"); + } +} + struct ThreadListFilters { model_providers: Option>, source_kinds: Option>, archived: bool, section_id: Option>, + project_id: StoreClearableField, cwd_filters: Option>, search_term: Option, use_state_db_only: bool, @@ -1083,6 +1125,7 @@ impl ThreadRequestProcessor { history_mode, session_start_source, thread_source, + project_id, environments, } = params; if matches!( @@ -1099,6 +1142,24 @@ impl ThreadRequestProcessor { "`permissions` cannot be combined with `sandbox`", )); } + if let Some(project_id) = project_id.as_ref() { + if project_id.is_empty() { + return Err(invalid_request("projectId must not be empty")); + } + let project = self + .thread_store + .read_project(project_id.clone()) + .await + .map_err(|err| match err { + ThreadStoreError::Unsupported { operation } => { + unsupported_thread_store_operation(operation) + } + err => internal_error(format!("failed to read project: {err}")), + })?; + if project.is_none() { + return Err(invalid_request(format!("project not found: {project_id}"))); + } + } let runtime_workspace_roots = runtime_workspace_roots.map(resolve_runtime_workspace_roots); let environments = resolve_turn_environment_selections(self.thread_manager.as_ref(), environments)?; @@ -1130,12 +1191,14 @@ impl ThreadRequestProcessor { }; let request_trace = request_context.request_trace(); let config_manager = self.config_manager.clone(); + let thread_store = Arc::clone(&self.thread_store); let initial_config_warnings = Arc::clone(&self.initial_config_warnings); let outgoing = Arc::clone(&listener_task_context.outgoing); let error_request_id = request_id.clone(); let thread_start_task = async move { if let Err(error) = Self::thread_start_task( listener_task_context, + thread_store, config_manager, request_id, app_server_client_name, @@ -1148,6 +1211,7 @@ impl ThreadRequestProcessor { history_mode.map(Into::into), session_start_source, thread_source.map(Into::into), + project_id, environments, service_name, allow_provider_model_fallback, @@ -1213,6 +1277,7 @@ impl ThreadRequestProcessor { #[allow(clippy::too_many_arguments)] async fn thread_start_task( listener_task_context: ListenerTaskContext, + thread_store: Arc, config_manager: ConfigManager, request_id: ConnectionRequestId, app_server_client_name: Option, @@ -1225,6 +1290,7 @@ impl ThreadRequestProcessor { history_mode: Option, session_start_source: Option, thread_source: Option, + project_id: Option, environment_selections: Option>, service_name: Option, allow_provider_model_fallback: bool, @@ -1340,13 +1406,21 @@ impl ThreadRequestProcessor { if !selected_capability_roots.is_empty() { thread_extension_init.insert(selected_capability_roots); } + let mut start_options = StartThreadOptions::new(config); + let reserved_thread_id = if start_options.config.ephemeral { + None + } else { + stage_pending_project_metadata( + listener_task_context.thread_manager.as_ref(), + thread_store.as_ref(), + project_id.as_deref(), + "thread/start", + ) + .await? + }; + start_options.reserved_thread_id = reserved_thread_id; let create_thread_started_at = std::time::Instant::now(); - let NewThread { - thread_id, - thread, - session_configured, - .. - } = listener_task_context + let new_thread = listener_task_context .thread_manager .start_thread(StartThreadOptions { allow_provider_model_fallback, @@ -1364,21 +1438,32 @@ impl ThreadRequestProcessor { environments: Some(environments), thread_extension_init, client_mcp_extensions, - ..StartThreadOptions::new(config) + ..start_options }) .instrument(tracing::info_span!( "app_server.thread_start.create_thread", otel.name = "app_server.thread_start.create_thread", thread_start.dynamic_tool_count = dynamic_tool_count, )) - .await - .map_err(|err| match err.details() { - CodexErrorDetails::InvalidRequest(message) => invalid_request(message.clone()), - CodexErrorDetails::UnsupportedOperation(message) => { - method_not_found(message.clone()) - } - _ => internal_error(format!("error creating thread: {err}")), - })?; + .await; + let NewThread { + thread_id, + thread, + session_configured, + .. + } = match new_thread { + Ok(new_thread) => new_thread, + Err(err) => { + remove_pending_project_metadata(thread_store.as_ref(), reserved_thread_id).await; + return Err(match err.details() { + CodexErrorDetails::InvalidRequest(message) => invalid_request(message.clone()), + CodexErrorDetails::UnsupportedOperation(message) => { + method_not_found(message.clone()) + } + _ => internal_error(format!("error creating thread: {err}")), + }); + } + }; let session_telemetry = thread.session_telemetry(); session_telemetry.record_startup_phase( "thread_start_create_thread", @@ -1408,6 +1493,7 @@ impl ThreadRequestProcessor { &config_snapshot, session_configured.rollout_path.clone(), ); + thread.project_id = project_id.clone(); // Auto-attach a thread listener when starting a thread. log_listener_attach_result( @@ -1755,13 +1841,31 @@ impl ThreadRequestProcessor { ) -> Result { let ThreadMetadataUpdateParams { thread_id, + project_id, git_info, } = params; - let thread_uuid = ThreadId::from_string(&thread_id) .map_err(|err| invalid_request(format!("invalid thread id: {err}")))?; - if git_info.is_none() { + if let Some(project_id) = project_id.as_ref() + && !project_id.is_empty() + { + let project = self + .thread_store + .read_project(project_id.clone()) + .await + .map_err(|err| match err { + ThreadStoreError::Unsupported { operation } => { + unsupported_thread_store_operation(operation) + } + err => internal_error(format!("failed to read project: {err}")), + })?; + if project.is_none() { + return Err(invalid_request(format!("project not found: {project_id}"))); + } + } + + if git_info.is_none() && project_id.is_none() { return Err(invalid_request( "thread metadata update must include at least one field", )); @@ -1793,16 +1897,63 @@ impl ThreadRequestProcessor { ) .transpose()?; + let project_update: StoreClearableField = if let Some(project_id) = project_id { + if project_id.is_empty() { + Some(None) + } else { + Some(Some(project_id)) + } + } else { + None + }; let updated_thread = { let _thread_list_state_permit = self.acquire_thread_list_state_permit().await?; + let previous_project_id = if project_update.is_some() { + Some( + self.thread_store + .read_thread(StoreReadThreadParams { + thread_id: thread_uuid, + include_archived: true, + include_history: false, + }) + .await + .map_err(|err| match err { + ThreadStoreError::ThreadNotFound { .. } => { + invalid_request(format!("thread not found: {thread_id}")) + } + ThreadStoreError::Unsupported { operation } => { + unsupported_thread_store_operation(operation) + } + err => internal_error(format!("failed to read thread metadata: {err}")), + })? + .project_id, + ) + } else { + None + }; let patch = StoreThreadMetadataPatch { git_info, + project_id: project_update.clone(), ..Default::default() }; - self.thread_manager + let updated_thread = self + .thread_manager .update_thread_metadata(thread_uuid, patch, /*include_archived*/ true) .await - .map_err(|err| core_thread_write_error("update thread metadata", err))? + .map_err(|err| core_thread_write_error("update thread metadata", err))?; + if let Some(project_id) = project_update.as_ref() + && previous_project_id.as_ref() != Some(project_id) + { + self.outgoing + .send_server_notification(ServerNotification::ThreadProjectUpdated( + ThreadProjectUpdatedNotification { + thread_id: thread_id.clone(), + project_id: project_id.clone(), + }, + )) + .await; + } + updated_thread }; let (mut thread, _) = thread_from_stored_thread( updated_thread, @@ -2303,12 +2454,33 @@ impl ThreadRequestProcessor { source_kinds, archived, section_id, + project_id, cwd, use_state_db_only, search_term, parent_thread_id, ancestor_thread_id, } = params; + if project_id.is_some() && !self.thread_store.supports_projects() { + return Err(unsupported_thread_store_operation("projects")); + } + if let Some(Some(project_id)) = project_id.as_ref() { + if project_id.is_empty() { + return Err(invalid_params("projectId must not be empty")); + } + match self.thread_store.read_project(project_id.clone()).await { + Ok(Some(_)) => {} + Ok(None) => { + return Err(invalid_params(format!("project not found: {project_id}"))); + } + Err(ThreadStoreError::Unsupported { operation }) => { + return Err(unsupported_thread_store_operation(operation)); + } + Err(err) => { + return Err(internal_error(format!("failed to read project: {err}"))); + } + } + } let cwd_filters = normalize_thread_list_cwd_filters(cwd)?; let relation_filter = match (parent_thread_id, ancestor_thread_id) { (Some(_), Some(_)) => { @@ -2354,6 +2526,7 @@ impl ThreadRequestProcessor { source_kinds, archived: archived.unwrap_or(false), section_id, + project_id, cwd_filters, search_term, use_state_db_only, @@ -4588,6 +4761,18 @@ impl ThreadRequestProcessor { let ephemeral_token_usage_turn_id = (ephemeral && include_turns) .then(|| restored_token_usage_turn_id(&history_items, ephemeral_turns.as_slice())); let token_usage_history_items = paginated_source.then(|| Arc::clone(&history_items)); + let inherited_project_id = source_thread.project_id.clone(); + let reserved_thread_id = if config.ephemeral { + None + } else { + stage_pending_project_metadata( + self.thread_manager.as_ref(), + self.thread_store.as_ref(), + inherited_project_id.as_deref(), + "thread/fork", + ) + .await? + }; let new_thread = if let Some(prepared_fork) = prepared_fork { self.thread_manager @@ -4596,7 +4781,8 @@ impl ThreadRequestProcessor { prepared_fork, thread_source, parent_trace, - client_mcp_extensions.clone(), + client_mcp_extensions, + reserved_thread_id, ) .await } else { @@ -4612,6 +4798,7 @@ impl ThreadRequestProcessor { thread_source, parent_trace, client_mcp_extensions, + reserved_thread_id, ) .await }; @@ -4620,13 +4807,20 @@ impl ThreadRequestProcessor { thread: forked_thread, session_configured, .. - } = new_thread.map_err(|err| match err.details() { - CodexErrorDetails::Io(_) | CodexErrorDetails::Json(_) => { - invalid_request(format!("failed to load thread {source_thread_id}: {err}")) + } = match new_thread { + Ok(new_thread) => new_thread, + Err(err) => { + remove_pending_project_metadata(self.thread_store.as_ref(), reserved_thread_id) + .await; + return Err(match err.details() { + CodexErrorDetails::Io(_) | CodexErrorDetails::Json(_) => { + invalid_request(format!("failed to load thread {source_thread_id}: {err}")) + } + CodexErrorDetails::InvalidRequest(message) => invalid_request(message.clone()), + _ => internal_error(format!("error forking thread: {err}")), + }); } - CodexErrorDetails::InvalidRequest(message) => invalid_request(message.clone()), - _ => internal_error(format!("error forking thread: {err}")), - })?; + }; Self::set_app_server_client_info( forked_thread.as_ref(), @@ -4754,6 +4948,9 @@ impl ThreadRequestProcessor { )); thread.session_id = session_configured.session_id.to_string(); thread.thread_source = config_snapshot.thread_source.clone().map(Into::into); + if thread.path.is_none() { + thread.project_id = inherited_project_id.clone(); + } self.thread_watch_manager .upsert_thread_silently(&thread.id) @@ -4769,7 +4966,6 @@ impl ThreadRequestProcessor { let active_permission_profile = thread_response_active_permission_profile(config_snapshot.active_permission_profile); let thread_originator = config_snapshot.originator.clone(); - let response = ThreadForkResponse { thread: thread.clone(), model: session_configured.model, @@ -4872,6 +5068,7 @@ impl ThreadRequestProcessor { source_kinds, archived, section_id, + project_id, cwd_filters, search_term, use_state_db_only, @@ -4920,6 +5117,7 @@ impl ThreadRequestProcessor { cwd_filters: cwd_filters.clone(), archived, section: section_id.clone(), + project_id: project_id.clone(), search_term: search_term.clone(), use_state_db_only, relation_filter, @@ -5528,6 +5726,7 @@ pub(crate) fn thread_from_stored_thread( section_entered_at: thread .section_entered_at .map(|entered_at| entered_at.timestamp()), + project_id: thread.project_id, history_mode: thread.history_mode.into(), model_provider: if thread.model_provider.is_empty() { fallback_provider.to_string() @@ -5702,6 +5901,7 @@ fn build_thread_from_snapshot( ephemeral: config_snapshot.ephemeral, section: None, section_entered_at: None, + project_id: None, history_mode: config_snapshot.history_mode.into(), model_provider: config_snapshot.model_provider_id.clone(), created_at: now, diff --git a/codex-rs/app-server/src/request_processors/thread_processor_tests.rs b/codex-rs/app-server/src/request_processors/thread_processor_tests.rs index aa04f22632..a50145cca7 100644 --- a/codex-rs/app-server/src/request_processors/thread_processor_tests.rs +++ b/codex-rs/app-server/src/request_processors/thread_processor_tests.rs @@ -606,6 +606,7 @@ mod thread_processor_behavior_tests { section: None, section_position: None, section_entered_at: None, + project_id: None, cwd: PathBuf::from("/tmp"), cli_version: "0.0.0".to_string(), source: SessionSource::Cli, diff --git a/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs b/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs index ea56169364..ad5c1f12cf 100644 --- a/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs +++ b/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs @@ -202,6 +202,7 @@ mod tests { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "mock_provider".to_string(), created_at: 0, diff --git a/codex-rs/app-server/src/request_processors/thread_summary.rs b/codex-rs/app-server/src/request_processors/thread_summary.rs index 3dc1625ef8..fd1792bb1e 100644 --- a/codex-rs/app-server/src/request_processors/thread_summary.rs +++ b/codex-rs/app-server/src/request_processors/thread_summary.rs @@ -309,6 +309,7 @@ pub(crate) fn summary_to_thread( ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: ThreadHistoryMode::Legacy, model_provider, created_at: created_at.map(|dt| dt.timestamp()).unwrap_or(0), diff --git a/codex-rs/app-server/tests/common/test_app_server.rs b/codex-rs/app-server/tests/common/test_app_server.rs index d5b969b44c..4a154d0606 100644 --- a/codex-rs/app-server/tests/common/test_app_server.rs +++ b/codex-rs/app-server/tests/common/test_app_server.rs @@ -73,6 +73,9 @@ use codex_app_server_protocol::PluginSkillReadParams; use codex_app_server_protocol::PluginUninstallParams; use codex_app_server_protocol::ProcessKillParams; use codex_app_server_protocol::ProcessSpawnParams; +use codex_app_server_protocol::ProjectImportParams; +use codex_app_server_protocol::ProjectListParams; +use codex_app_server_protocol::ProjectReadParams; use codex_app_server_protocol::RemoteControlClientsListParams; use codex_app_server_protocol::RemoteControlClientsRevokeParams; use codex_app_server_protocol::RemoteControlPairingStartParams; @@ -473,6 +476,33 @@ impl TestAppServer { self.send_request("thread/start", params).await } + /// Send a `project/import` JSON-RPC request. + pub async fn send_project_import_request( + &mut self, + params: ProjectImportParams, + ) -> anyhow::Result { + let params = Some(serde_json::to_value(params)?); + self.send_request("project/import", params).await + } + + /// Send a `project/list` JSON-RPC request. + pub async fn send_project_list_request( + &mut self, + params: ProjectListParams, + ) -> anyhow::Result { + let params = Some(serde_json::to_value(params)?); + self.send_request("project/list", params).await + } + + /// Send a project/read JSON-RPC request. + pub async fn send_project_read_request( + &mut self, + params: ProjectReadParams, + ) -> anyhow::Result { + let params = Some(serde_json::to_value(params)?); + self.send_request("project/read", params).await + } + /// Sends a `thread/start` request selecting the builder's automatic /// environment. Returns an error if `params` already select environments /// so the caller cannot accidentally override the fixture. diff --git a/codex-rs/app-server/tests/suite/v2/external_agent_config.rs b/codex-rs/app-server/tests/suite/v2/external_agent_config.rs index 4e9cb324a7..5c66e82fe8 100644 --- a/codex-rs/app-server/tests/suite/v2/external_agent_config.rs +++ b/codex-rs/app-server/tests/suite/v2/external_agent_config.rs @@ -528,6 +528,7 @@ source = {:?} source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -1891,6 +1892,7 @@ async fn external_agent_config_import_creates_session_rollouts() -> Result<()> { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: true, search_term: None, @@ -2078,6 +2080,7 @@ required = true source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -2162,6 +2165,7 @@ async fn external_agent_config_import_accepts_detected_session_payload_after_res source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -2243,6 +2247,7 @@ async fn external_agent_config_import_skips_already_imported_session_versions() source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -2370,6 +2375,7 @@ async fn external_agent_config_import_returns_before_background_session_import_f source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -2485,6 +2491,7 @@ async fn external_agent_config_import_compacts_huge_session_before_first_follow_ source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, diff --git a/codex-rs/app-server/tests/suite/v2/mod.rs b/codex-rs/app-server/tests/suite/v2/mod.rs index 553819b7dd..5facaf5a1e 100644 --- a/codex-rs/app-server/tests/suite/v2/mod.rs +++ b/codex-rs/app-server/tests/suite/v2/mod.rs @@ -61,6 +61,7 @@ mod plugin_search; mod plugin_share; mod plugin_uninstall; mod process_exec; +mod projects; mod rate_limit_reset_credits; mod rate_limits; mod realtime_conversation; diff --git a/codex-rs/app-server/tests/suite/v2/projects.rs b/codex-rs/app-server/tests/suite/v2/projects.rs new file mode 100644 index 0000000000..d1d3c77026 --- /dev/null +++ b/codex-rs/app-server/tests/suite/v2/projects.rs @@ -0,0 +1,906 @@ +use std::collections::BTreeMap; + +use anyhow::Result; +use app_test_support::MockResponsesConfig; +use app_test_support::TestAppServer; +use app_test_support::create_mock_responses_server_repeating_assistant; +use codex_app_server_protocol::ClientRequest; +use codex_app_server_protocol::JSONRPCError; +use codex_app_server_protocol::JSONRPCMessage; +use codex_app_server_protocol::ProjectChangeType; +use codex_app_server_protocol::ProjectChangedNotification; +use codex_app_server_protocol::ProjectCreateParams; +use codex_app_server_protocol::ProjectCreateResponse; +use codex_app_server_protocol::ProjectDeleteParams; +use codex_app_server_protocol::ProjectDeleteResponse; +use codex_app_server_protocol::ProjectImportParams; +use codex_app_server_protocol::ProjectImportResponse; +use codex_app_server_protocol::ProjectListParams; +use codex_app_server_protocol::ProjectListResponse; +use codex_app_server_protocol::ProjectMoveParams; +use codex_app_server_protocol::ProjectMoveResponse; +use codex_app_server_protocol::ProjectReadParams; +use codex_app_server_protocol::ProjectReadResponse; +use codex_app_server_protocol::ProjectRoot; +use codex_app_server_protocol::ProjectUpdateParams; +use codex_app_server_protocol::ProjectUpdateResponse; +use codex_app_server_protocol::RequestId; +use codex_app_server_protocol::ThreadForkParams; +use codex_app_server_protocol::ThreadForkResponse; +use codex_app_server_protocol::ThreadListParams; +use codex_app_server_protocol::ThreadListResponse; +use codex_app_server_protocol::ThreadMetadataGitInfoUpdateParams; +use codex_app_server_protocol::ThreadMetadataUpdateParams; +use codex_app_server_protocol::ThreadMetadataUpdateResponse; +use codex_app_server_protocol::ThreadProjectUpdatedNotification; +use codex_app_server_protocol::ThreadReadParams; +use codex_app_server_protocol::ThreadReadResponse; +use codex_app_server_protocol::ThreadResumeParams; +use codex_app_server_protocol::ThreadResumeResponse; +use codex_app_server_protocol::ThreadStartParams; +use codex_app_server_protocol::ThreadStartResponse; +use codex_app_server_protocol::TurnStartParams; +use codex_app_server_protocol::UserInput; +use codex_features::Feature; +use codex_utils_absolute_path::AbsolutePathBuf; +use pretty_assertions::assert_eq; +use tempfile::TempDir; +use uuid::Uuid; + +#[tokio::test] +async fn projects_persist_and_assign_threads() -> Result<()> { + let responses = create_mock_responses_server_repeating_assistant("Done").await; + let codex_home = TempDir::new()?; + MockResponsesConfig::new(&responses.uri()) + .enable_feature(Feature::Sqlite) + .write(codex_home.path())?; + let root = AbsolutePathBuf::from_absolute_path(codex_home.path())?; + let mut server = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .build_initialized() + .await?; + + let created: ProjectCreateResponse = server + .request(|request_id| ClientRequest::ProjectCreate { + request_id, + params: ProjectCreateParams { + name: " Work ".to_string(), + roots: vec![ProjectRoot { path: root.clone() }], + metadata: Some(BTreeMap::from([("color".to_string(), "blue".to_string())])), + idempotency_key: "projects-persist-primary".to_string(), + }, + }) + .await?; + assert_eq!(created.project.name, "Work"); + assert_eq!(Uuid::parse_str(&created.project.id)?.get_version_num(), 7); + + let read: ProjectReadResponse = server + .request(|request_id| ClientRequest::ProjectRead { + request_id, + params: ProjectReadParams { + project_id: created.project.id.clone(), + }, + }) + .await?; + assert_eq!(read.project, created.project); + + server.clear_message_buffer(); + let started_id = server + .send_thread_start_request_with_auto_env(ThreadStartParams { + project_id: Some(created.project.id.clone()), + ..Default::default() + }) + .await?; + let JSONRPCMessage::Response(response) = server.read_next_message().await? else { + panic!("thread/start must respond before lifecycle notifications"); + }; + assert_eq!(response.id, RequestId::Integer(started_id)); + let started: ThreadStartResponse = serde_json::from_value(response.result)?; + let JSONRPCMessage::Notification(thread_started) = server.read_next_message().await? else { + panic!("thread/start must emit thread/started"); + }; + assert_eq!(thread_started.method, "thread/started"); + assert_eq!(started.thread.project_id, Some(created.project.id.clone())); + + server.clear_message_buffer(); + let ephemeral_id = server + .send_thread_start_request_with_auto_env(ThreadStartParams { + project_id: Some(created.project.id.clone()), + ephemeral: Some(true), + ..Default::default() + }) + .await?; + let JSONRPCMessage::Response(response) = server.read_next_message().await? else { + panic!("ephemeral thread/start must respond before lifecycle notifications"); + }; + assert_eq!(response.id, RequestId::Integer(ephemeral_id)); + let ephemeral: ThreadStartResponse = serde_json::from_value(response.result)?; + let JSONRPCMessage::Notification(thread_started) = server.read_next_message().await? else { + panic!("ephemeral thread/start must emit thread/started"); + }; + assert_eq!(thread_started.method, "thread/started"); + assert_eq!( + ephemeral.thread.project_id, + Some(created.project.id.clone()) + ); + assert!(ephemeral.thread.ephemeral); + assert!(ephemeral.thread.path.is_none()); + server + .start_turn_and_wait_for_completion(TurnStartParams { + thread_id: started.thread.id.clone(), + input: vec![UserInput::Text { + text: "persist this thread".to_string(), + text_elements: Vec::new(), + }], + ..Default::default() + }) + .await?; + + drop(server); + let mut server = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .build_initialized() + .await?; + let resumed: ThreadResumeResponse = server + .request(|request_id| ClientRequest::ThreadResume { + request_id, + params: ThreadResumeParams { + thread_id: started.thread.id.clone(), + ..Default::default() + }, + }) + .await?; + assert_eq!(resumed.thread.project_id, Some(created.project.id.clone())); + let read_after_resume: ThreadReadResponse = server + .request(|request_id| ClientRequest::ThreadRead { + request_id, + params: ThreadReadParams { + thread_id: started.thread.id.clone(), + include_turns: false, + }, + }) + .await?; + assert_eq!( + read_after_resume.thread.project_id, + Some(created.project.id.clone()) + ); + + let listed: ThreadListResponse = server + .request(|request_id| ClientRequest::ThreadList { + request_id, + params: ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(Some(created.project.id.clone())), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }, + }) + .await?; + assert_eq!(listed.data.len(), 1); + assert_eq!(listed.data[0].id, started.thread.id); + + server.clear_message_buffer(); + let cleared: ThreadMetadataUpdateResponse = server + .request(|request_id| ClientRequest::ThreadMetadataUpdate { + request_id, + params: ThreadMetadataUpdateParams { + thread_id: started.thread.id.clone(), + project_id: Some(String::new()), + git_info: None, + }, + }) + .await?; + assert_eq!(cleared.thread.project_id, None); + let cleared_notification: ThreadProjectUpdatedNotification = + server.read_notification("thread/project/updated").await?; + assert_eq!( + cleared_notification, + ThreadProjectUpdatedNotification { + thread_id: started.thread.id.clone(), + project_id: None, + } + ); + let unassigned: ThreadListResponse = server + .request(|request_id| ClientRequest::ThreadList { + request_id, + params: ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(None), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }, + }) + .await?; + assert_eq!(unassigned.data.len(), 1); + assert_eq!(unassigned.data[0].id, started.thread.id); + + server.clear_message_buffer(); + let reassigned: ThreadMetadataUpdateResponse = server + .request(|request_id| ClientRequest::ThreadMetadataUpdate { + request_id, + params: ThreadMetadataUpdateParams { + thread_id: started.thread.id.clone(), + project_id: Some(created.project.id.clone()), + git_info: None, + }, + }) + .await?; + assert_eq!( + reassigned.thread.project_id, + Some(created.project.id.clone()) + ); + let reassigned_notification: ThreadProjectUpdatedNotification = + server.read_notification("thread/project/updated").await?; + assert_eq!( + reassigned_notification, + ThreadProjectUpdatedNotification { + thread_id: started.thread.id.clone(), + project_id: Some(created.project.id.clone()), + } + ); + let reassigned_list: ThreadListResponse = server + .request(|request_id| ClientRequest::ThreadList { + request_id, + params: ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(Some(created.project.id.clone())), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }, + }) + .await?; + assert_eq!(reassigned_list.data.len(), 1); + assert_eq!(reassigned_list.data[0].id, started.thread.id); + server.clear_message_buffer(); + let unchanged: ThreadMetadataUpdateResponse = server + .request(|request_id| ClientRequest::ThreadMetadataUpdate { + request_id, + params: ThreadMetadataUpdateParams { + thread_id: started.thread.id.clone(), + project_id: Some(created.project.id.clone()), + git_info: None, + }, + }) + .await?; + assert_eq!( + unchanged.thread.project_id, + Some(created.project.id.clone()) + ); + assert!( + !server + .pending_notification_methods() + .iter() + .any(|method| method == "thread/project/updated") + ); + + let updated: ProjectUpdateResponse = server + .request(|request_id| ClientRequest::ProjectUpdate { + request_id, + params: ProjectUpdateParams { + project_id: created.project.id.clone(), + name: Some("Renamed".to_string()), + roots: Some(Vec::new()), + metadata: Some(BTreeMap::new()), + }, + }) + .await?; + assert_eq!(updated.project.name, "Renamed"); + assert!(updated.project.roots.is_empty()); + assert!(updated.project.metadata.is_empty()); + let updated_notification: ProjectChangedNotification = + server.read_notification("project/changed").await?; + assert_eq!( + updated_notification, + ProjectChangedNotification { + project_id: updated.project.id.clone(), + change_type: ProjectChangeType::Updated, + } + ); + + let unchanged_project: ProjectUpdateResponse = server + .request(|request_id| ClientRequest::ProjectUpdate { + request_id, + params: ProjectUpdateParams { + project_id: updated.project.id.clone(), + name: Some(updated.project.name.clone()), + roots: Some(updated.project.roots.clone()), + metadata: Some(updated.project.metadata.clone()), + }, + }) + .await?; + assert_eq!(unchanged_project.project, updated.project); + assert!( + !server + .pending_notification_methods() + .iter() + .any(|method| method == "project/changed") + ); + + let listed_projects: ProjectListResponse = server + .request(|request_id| ClientRequest::ProjectList { + request_id, + params: ProjectListParams { + cursor: None, + limit: Some(10), + }, + }) + .await?; + assert_eq!(listed_projects.data, vec![updated.project.clone()]); + + let second: ProjectCreateResponse = server + .request(|request_id| ClientRequest::ProjectCreate { + request_id, + params: ProjectCreateParams { + name: "Second".to_string(), + roots: Vec::new(), + metadata: None, + idempotency_key: "projects-persist-second".to_string(), + }, + }) + .await?; + server.clear_message_buffer(); + let _: ProjectMoveResponse = server + .request(|request_id| ClientRequest::ProjectMove { + request_id, + params: ProjectMoveParams { + project_id: second.project.id.clone(), + before_project_id: Some(updated.project.id.clone()), + }, + }) + .await?; + let changed: ProjectChangedNotification = server.read_notification("project/changed").await?; + assert_eq!(changed.project_id, second.project.id); + let reordered: ProjectListResponse = server + .request(|request_id| ClientRequest::ProjectList { + request_id, + params: ProjectListParams { + cursor: None, + limit: Some(10), + }, + }) + .await?; + assert_eq!( + reordered + .data + .iter() + .map(|project| project.name.as_str()) + .collect::>(), + vec!["Second", "Renamed"] + ); + let moved_second = reordered.data[0].clone(); + + server.clear_message_buffer(); + let deleted_project_id = created.project.id.clone(); + let _: ProjectDeleteResponse = server + .request(|request_id| ClientRequest::ProjectDelete { + request_id, + params: ProjectDeleteParams { + project_id: deleted_project_id.clone(), + }, + }) + .await?; + let deleted_notification: ProjectChangedNotification = + server.read_notification("project/changed").await?; + assert_eq!(deleted_notification.project_id, deleted_project_id); + assert_eq!(deleted_notification.change_type, ProjectChangeType::Deleted); + let unassigned_notification: ThreadProjectUpdatedNotification = + server.read_notification("thread/project/updated").await?; + assert_eq!( + unassigned_notification, + ThreadProjectUpdatedNotification { + thread_id: started.thread.id.clone(), + project_id: None, + } + ); + let read_id = server + .send_project_read_request(ProjectReadParams { + project_id: deleted_project_id, + }) + .await?; + let read_error = server + .read_stream_until_error_message(RequestId::Integer(read_id)) + .await?; + assert_eq!(read_error.error.code, -32602); + let remaining_projects: ProjectListResponse = server + .request(|request_id| ClientRequest::ProjectList { + request_id, + params: ProjectListParams { + cursor: None, + limit: Some(10), + }, + }) + .await?; + assert_eq!(remaining_projects.data, vec![moved_second]); + let unassigned_after_delete: ThreadListResponse = server + .request(|request_id| ClientRequest::ThreadList { + request_id, + params: ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(None), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }, + }) + .await?; + assert_eq!(unassigned_after_delete.data.len(), 1); + assert_eq!(unassigned_after_delete.data[0].id, started.thread.id); + assert!(codex_home.path().exists()); + Ok(()) +} + +#[tokio::test] +async fn deleted_project_is_dropped_before_first_durable_thread_persistence() -> Result<()> { + let responses = create_mock_responses_server_repeating_assistant("Done").await; + let codex_home = TempDir::new()?; + MockResponsesConfig::new(&responses.uri()) + .enable_feature(Feature::Sqlite) + .write(codex_home.path())?; + let mut server = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .build_initialized() + .await?; + + let project: ProjectCreateResponse = server + .request(|request_id| ClientRequest::ProjectCreate { + request_id, + params: ProjectCreateParams { + name: "Pending".to_string(), + roots: Vec::new(), + metadata: None, + idempotency_key: "deleted-before-persistence".to_string(), + }, + }) + .await?; + server.clear_message_buffer(); + let started = server + .start_thread(ThreadStartParams { + project_id: Some(project.project.id.clone()), + ..Default::default() + }) + .await?; + let _: serde_json::Value = server.read_notification("thread/started").await?; + + server.clear_message_buffer(); + let _: ProjectDeleteResponse = server + .request(|request_id| ClientRequest::ProjectDelete { + request_id, + params: ProjectDeleteParams { + project_id: project.project.id.clone(), + }, + }) + .await?; + let _: ProjectChangedNotification = server.read_notification("project/changed").await?; + let read_after_delete: ThreadReadResponse = server + .request(|request_id| ClientRequest::ThreadRead { + request_id, + params: ThreadReadParams { + thread_id: started.thread.id.clone(), + include_turns: false, + }, + }) + .await?; + assert_eq!(read_after_delete.thread.project_id, None); + server + .start_turn_and_wait_for_completion(TurnStartParams { + thread_id: started.thread.id.clone(), + input: vec![UserInput::Text { + text: "persist after project deletion".to_string(), + text_elements: Vec::new(), + }], + ..Default::default() + }) + .await?; + + let unassigned: ThreadListResponse = server + .request(|request_id| ClientRequest::ThreadList { + request_id, + params: ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(None), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }, + }) + .await?; + assert_eq!(unassigned.data.len(), 1); + assert_eq!(unassigned.data[0].id, started.thread.id); + Ok(()) +} + +#[tokio::test] +async fn project_import_is_atomic_and_notifies_after_commit_in_order() -> Result<()> { + let responses = create_mock_responses_server_repeating_assistant("Done").await; + let codex_home = TempDir::new()?; + MockResponsesConfig::new(&responses.uri()) + .enable_feature(Feature::Sqlite) + .write(codex_home.path())?; + let mut server = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .build_initialized() + .await?; + + let started = server.start_thread(ThreadStartParams::default()).await?; + let _: serde_json::Value = server.read_notification("thread/started").await?; + server + .start_turn_and_wait_for_completion(TurnStartParams { + thread_id: started.thread.id.clone(), + input: vec![UserInput::Text { + text: "persist this thread".to_string(), + text_elements: Vec::new(), + }], + ..Default::default() + }) + .await?; + server.clear_message_buffer(); + let import_id = server + .send_project_import_request(ProjectImportParams { + name: "Imported".to_string(), + roots: Vec::new(), + metadata: None, + threads: Some(vec![started.thread.id.clone()]), + idempotency_key: "desktop:legacy-project".to_string(), + }) + .await?; + + let JSONRPCMessage::Notification(project_changed) = server.read_next_message().await? else { + panic!("project/import must emit project/changed before its response"); + }; + assert_eq!(project_changed.method, "project/changed"); + let project_changed: ProjectChangedNotification = + serde_json::from_value(project_changed.params.expect("notification params"))?; + let JSONRPCMessage::Notification(thread_updated) = server.read_next_message().await? else { + panic!("project/import must emit thread/project/updated after project/changed"); + }; + assert_eq!(thread_updated.method, "thread/project/updated"); + let thread_updated: ThreadProjectUpdatedNotification = + serde_json::from_value(thread_updated.params.expect("notification params"))?; + assert_eq!(thread_updated.thread_id, started.thread.id); + assert_eq!( + thread_updated.project_id, + Some(project_changed.project_id.clone()) + ); + let JSONRPCMessage::Response(response) = server.read_next_message().await? else { + panic!("project/import must respond after commit notifications"); + }; + assert_eq!(response.id, RequestId::Integer(import_id)); + let imported: ProjectImportResponse = serde_json::from_value(response.result)?; + + server.clear_message_buffer(); + let replayed: ProjectImportResponse = server + .request(|request_id| ClientRequest::ProjectImport { + request_id, + params: ProjectImportParams { + name: "Changed payload".to_string(), + roots: Vec::new(), + metadata: None, + threads: Some(vec![started.thread.id.clone()]), + idempotency_key: "desktop:legacy-project".to_string(), + }, + }) + .await?; + assert_eq!(replayed.project, imported.project); + assert!( + !server + .pending_notification_methods() + .iter() + .any(|method| method == "project/changed" || method == "thread/project/updated") + ); + + let listed: ProjectListResponse = server + .request(|request_id| ClientRequest::ProjectList { + request_id, + params: ProjectListParams { + cursor: None, + limit: Some(10), + }, + }) + .await?; + assert_eq!(listed.data.len(), 1); + + let duplicate_id = server + .send_project_import_request(ProjectImportParams { + name: "Duplicate".to_string(), + roots: Vec::new(), + metadata: None, + threads: Some(vec![started.thread.id.clone(), started.thread.id.clone()]), + idempotency_key: "duplicate-thread-import".to_string(), + }) + .await?; + let duplicate = server + .read_stream_until_error_message(RequestId::Integer(duplicate_id)) + .await?; + assert_eq!(duplicate.error.code, -32602); + let listed: ProjectListResponse = server + .request(|request_id| ClientRequest::ProjectList { + request_id, + params: ProjectListParams { + cursor: None, + limit: Some(10), + }, + }) + .await?; + assert_eq!(listed.data.len(), 1); + + let ephemeral = server + .start_thread(ThreadStartParams { + ephemeral: Some(true), + ..Default::default() + }) + .await?; + let ephemeral_id = server + .send_project_import_request(ProjectImportParams { + name: "Ephemeral".to_string(), + roots: Vec::new(), + metadata: None, + threads: Some(vec![ephemeral.thread.id]), + idempotency_key: "ephemeral-thread-import".to_string(), + }) + .await?; + let ephemeral_error = server + .read_stream_until_error_message(RequestId::Integer(ephemeral_id)) + .await?; + assert_eq!(ephemeral_error.error.code, -32602); + let listed: ProjectListResponse = server + .request(|request_id| ClientRequest::ProjectList { + request_id, + params: ProjectListParams { + cursor: None, + limit: Some(10), + }, + }) + .await?; + assert_eq!(listed.data.len(), 1); + Ok(()) +} + +#[tokio::test] +async fn projects_validate_filters_cursors_and_sqlite_less_assignment() -> Result<()> { + let responses = create_mock_responses_server_repeating_assistant("Done").await; + let codex_home = TempDir::new()?; + MockResponsesConfig::new(&responses.uri()) + .enable_feature(Feature::Sqlite) + .write(codex_home.path())?; + let mut server = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .build_initialized() + .await?; + + for project_id in [String::new(), Uuid::now_v7().to_string()] { + let request_id = server + .send_thread_list_request(ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(Some(project_id)), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }) + .await?; + let error = server + .read_stream_until_error_message(RequestId::Integer(request_id)) + .await?; + assert_eq!(error.error.code, -32602); + } + let cursor_id = server + .send_project_list_request(ProjectListParams { + cursor: Some("123|not-a-uuid|extra".to_string()), + limit: Some(10), + }) + .await?; + let cursor_error = server + .read_stream_until_error_message(RequestId::Integer(cursor_id)) + .await?; + assert_eq!(cursor_error.error.code, -32602); + + let started = server.start_thread(ThreadStartParams::default()).await?; + let metadata_id = server + .send_thread_metadata_update_request(ThreadMetadataUpdateParams { + thread_id: started.thread.id.clone(), + project_id: Some(Uuid::now_v7().to_string()), + git_info: Some(ThreadMetadataGitInfoUpdateParams { + sha: Some(Some("abc123".to_string())), + branch: None, + origin_url: None, + }), + }) + .await?; + let metadata_error = server + .read_stream_until_error_message(RequestId::Integer(metadata_id)) + .await?; + assert_eq!(metadata_error.error.code, -32600); + let unchanged = server + .request::(|request_id| ClientRequest::ThreadRead { + request_id, + params: ThreadReadParams { + thread_id: started.thread.id.clone(), + include_turns: false, + }, + }) + .await?; + assert_eq!(unchanged.thread.git_info, None); + + let unsupported_projects_home = TempDir::new()?; + MockResponsesConfig::new(&responses.uri()).write(unsupported_projects_home.path())?; + let store_id = Uuid::now_v7(); + std::fs::write( + unsupported_projects_home.path().join("config.toml"), + format!("experimental_thread_store = {{ type = \"in_memory\", id = \"{store_id}\" }}"), + )?; + let mut unsupported_projects = TestAppServer::builder() + .with_codex_home(unsupported_projects_home.path()) + .build_initialized() + .await?; + let start_id = unsupported_projects + .send_thread_start_request_with_auto_env(ThreadStartParams { + project_id: Some(Uuid::now_v7().to_string()), + ..Default::default() + }) + .await?; + let error: JSONRPCError = unsupported_projects + .read_stream_until_error_message(RequestId::Integer(start_id)) + .await?; + assert_eq!(error.error.code, -32601); + let list_id = unsupported_projects + .send_thread_list_request(ThreadListParams { + cursor: None, + limit: Some(10), + sort_key: None, + sort_direction: None, + model_providers: Some(Vec::new()), + source_kinds: Some(Vec::new()), + archived: None, + section_id: None, + project_id: Some(None), + cwd: None, + use_state_db_only: true, + search_term: None, + parent_thread_id: None, + ancestor_thread_id: None, + }) + .await?; + let list_error = unsupported_projects + .read_stream_until_error_message(RequestId::Integer(list_id)) + .await?; + assert_eq!(list_error.error.code, -32601); + let unassigned = unsupported_projects + .start_thread(ThreadStartParams::default()) + .await?; + let _: serde_json::Value = unsupported_projects + .read_notification("thread/started") + .await?; + assert_eq!(unassigned.thread.project_id, None); + Ok(()) +} + +#[tokio::test] +async fn assigned_forks_inherit_projects_for_persistent_and_ephemeral_children() -> Result<()> { + let responses = create_mock_responses_server_repeating_assistant("Done").await; + let codex_home = TempDir::new()?; + MockResponsesConfig::new(&responses.uri()) + .enable_feature(Feature::Sqlite) + .write(codex_home.path())?; + let mut server = TestAppServer::builder() + .with_codex_home(codex_home.path()) + .build_initialized() + .await?; + let project: ProjectCreateResponse = server + .request(|request_id| ClientRequest::ProjectCreate { + request_id, + params: ProjectCreateParams { + name: "Work".to_string(), + roots: Vec::new(), + metadata: None, + idempotency_key: "fork-inheritance".to_string(), + }, + }) + .await?; + let started = server + .start_thread(ThreadStartParams { + project_id: Some(project.project.id.clone()), + ..Default::default() + }) + .await?; + let _: serde_json::Value = server.read_notification("thread/started").await?; + server + .start_turn_and_wait_for_completion(TurnStartParams { + thread_id: started.thread.id.clone(), + input: vec![UserInput::Text { + text: "persist this thread".to_string(), + text_elements: Vec::new(), + }], + ..Default::default() + }) + .await?; + + server.clear_message_buffer(); + let fork_id = server + .send_thread_fork_request(ThreadForkParams { + thread_id: started.thread.id.clone(), + ..Default::default() + }) + .await?; + let JSONRPCMessage::Response(response) = server.read_next_message().await? else { + panic!("thread/fork must respond before lifecycle notifications"); + }; + assert_eq!(response.id, RequestId::Integer(fork_id)); + let forked: ThreadForkResponse = serde_json::from_value(response.result)?; + let _: serde_json::Value = server.read_notification("thread/started").await?; + assert_eq!(forked.thread.project_id, Some(project.project.id.clone())); + + server.clear_message_buffer(); + let ephemeral_id = server + .send_thread_fork_request(ThreadForkParams { + thread_id: started.thread.id, + ephemeral: true, + ..Default::default() + }) + .await?; + let JSONRPCMessage::Response(response) = server.read_next_message().await? else { + panic!("ephemeral thread/fork must respond before lifecycle notifications"); + }; + assert_eq!(response.id, RequestId::Integer(ephemeral_id)); + let ephemeral_fork: ThreadForkResponse = serde_json::from_value(response.result)?; + let _: serde_json::Value = server.read_notification("thread/started").await?; + assert_eq!(ephemeral_fork.thread.project_id, Some(project.project.id)); + assert!(ephemeral_fork.thread.ephemeral); + assert!(ephemeral_fork.thread.path.is_none()); + Ok(()) +} diff --git a/codex-rs/app-server/tests/suite/v2/remote_thread_store.rs b/codex-rs/app-server/tests/suite/v2/remote_thread_store.rs index 99a7a9636b..eb4634a51e 100644 --- a/codex-rs/app-server/tests/suite/v2/remote_thread_store.rs +++ b/codex-rs/app-server/tests/suite/v2/remote_thread_store.rs @@ -279,6 +279,7 @@ async fn thread_delete_with_non_local_thread_store_does_not_create_local_persist source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, diff --git a/codex-rs/app-server/tests/suite/v2/skills_list.rs b/codex-rs/app-server/tests/suite/v2/skills_list.rs index 63142396f2..f0c2817e9b 100644 --- a/codex-rs/app-server/tests/suite/v2/skills_list.rs +++ b/codex-rs/app-server/tests/suite/v2/skills_list.rs @@ -1325,6 +1325,7 @@ async fn skills_changed_notification_is_emitted_after_skill_change() -> Result<( history_mode: None, session_start_source: None, thread_source: None, + project_id: None, dynamic_tools: None, environments: None, selected_capability_roots: None, diff --git a/codex-rs/app-server/tests/suite/v2/thread_fork.rs b/codex-rs/app-server/tests/suite/v2/thread_fork.rs index e322bc5c8d..4175230d59 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_fork.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_fork.rs @@ -97,6 +97,7 @@ async fn list_threads(mcp: &mut TestAppServer) -> Result { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, diff --git a/codex-rs/app-server/tests/suite/v2/thread_list.rs b/codex-rs/app-server/tests/suite/v2/thread_list.rs index 2a56210dc9..62e228e464 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_list.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_list.rs @@ -107,6 +107,7 @@ async fn list_threads_with_sort( source_kinds, archived, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -145,6 +146,7 @@ async fn list_threads_for_relation( source_kinds, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: true, search_term: None, @@ -549,6 +551,7 @@ async fn thread_list_respects_cwd_filters() -> Result<()> { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: Some(ThreadListCwdFilter::Many(vec![ first_target_cwd.to_string_lossy().into_owned(), second_target_cwd.to_string_lossy().into_owned(), @@ -661,6 +664,7 @@ sqlite = true source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: Some("needle".to_string()), @@ -947,6 +951,7 @@ sqlite = true source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -982,6 +987,7 @@ sqlite = true source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: Some(ThreadListCwdFilter::One( stale_cwd.to_string_lossy().into_owned(), )), @@ -1010,6 +1016,7 @@ sqlite = true source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: Some(ThreadListCwdFilter::One( stale_cwd.to_string_lossy().into_owned(), )), @@ -1194,6 +1201,7 @@ async fn thread_list_relation_filters_reject_invalid_requests() -> Result<()> { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -1219,6 +1227,7 @@ async fn thread_list_relation_filters_reject_invalid_requests() -> Result<()> { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -1455,6 +1464,7 @@ async fn thread_list_reports_loaded_subagent_direct_input_capability() -> Result source_kinds: Some(vec![ThreadSourceKind::SubAgentThreadSpawn]), archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: true, search_term: None, @@ -2213,6 +2223,7 @@ async fn thread_list_backwards_cursor_can_seed_forward_delta_sync() -> Result<() source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -2253,6 +2264,7 @@ async fn thread_list_backwards_cursor_can_seed_forward_delta_sync() -> Result<() source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -2489,6 +2501,7 @@ async fn thread_list_invalid_cursor_returns_error() -> Result<()> { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, diff --git a/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs b/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs index edf47fb6a0..172715a1e5 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_metadata_update.rs @@ -177,6 +177,7 @@ async fn thread_section_move_pins_and_unpins_with_filtered_recency_pagination() source_kinds: None, archived: None, section_id: Some(Some(PINNED_THREAD_SECTION_ID.to_string())), + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -367,6 +368,7 @@ async fn thread_sections_preserve_server_owned_manual_order_across_moves_and_res source_kinds: None, archived: None, section_id: Some(Some(PINNED_THREAD_SECTION_ID.to_string())), + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -490,6 +492,7 @@ async fn thread_metadata_update_patches_git_branch_and_returns_updated_thread() let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread.id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some("feature/sidebar-pr".to_string())), @@ -588,6 +591,7 @@ async fn thread_metadata_update_rejects_empty_git_info_patch() -> Result<()> { let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread.id, + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: None, @@ -638,6 +642,7 @@ async fn thread_metadata_update_rejects_ephemeral_thread() -> Result<()> { let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread.id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some("feature/ephemeral".to_string())), @@ -712,6 +717,7 @@ async fn thread_metadata_update_repairs_missing_sqlite_row_for_stored_thread() - let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread_id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some("feature/stored-thread".to_string())), @@ -796,6 +802,7 @@ async fn thread_metadata_update_repairs_loaded_thread_without_resetting_summary( let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread_id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some("feature/loaded-thread".to_string())), @@ -863,6 +870,7 @@ async fn thread_metadata_update_repairs_missing_sqlite_row_for_archived_thread() let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread_id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some("feature/archived-thread".to_string())), @@ -923,6 +931,7 @@ async fn thread_metadata_update_can_clear_stored_git_fields() -> Result<()> { let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread_id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: Some(None), branch: Some(None), diff --git a/codex-rs/app-server/tests/suite/v2/thread_read.rs b/codex-rs/app-server/tests/suite/v2/thread_read.rs index 05e46dd2be..ef3b3cb569 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_read.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_read.rs @@ -255,6 +255,7 @@ async fn paginated_stored_thread_routes_projected_turns() -> Result<()> { source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -941,6 +942,7 @@ async fn thread_list_includes_store_thread_without_rollout_path() -> Result<()> source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: false, search_term: None, @@ -1320,6 +1322,7 @@ async fn paginated_thread_name_set_is_reflected_in_read_list_and_metadata_resume source_kinds: None, archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: true, search_term: None, diff --git a/codex-rs/app-server/tests/suite/v2/thread_resume.rs b/codex-rs/app-server/tests/suite/v2/thread_resume.rs index 62f9780d59..a751490666 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_resume.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_resume.rs @@ -3264,6 +3264,7 @@ async fn thread_resume_prefers_persisted_git_metadata_for_local_threads() -> Res let update_id = mcp .send_thread_metadata_update_request(ThreadMetadataUpdateParams { thread_id: thread_id.clone(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some("feature/pr-branch".to_string())), diff --git a/codex-rs/app-server/tests/suite/v2/turn_start.rs b/codex-rs/app-server/tests/suite/v2/turn_start.rs index 06bf7966fa..0e6f464228 100644 --- a/codex-rs/app-server/tests/suite/v2/turn_start.rs +++ b/codex-rs/app-server/tests/suite/v2/turn_start.rs @@ -3666,6 +3666,7 @@ async fn direct_input_to_multi_agent_v2_subagent_is_rejected() -> Result<()> { ]), archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: true, search_term: None, diff --git a/codex-rs/core/src/realtime_context.rs b/codex-rs/core/src/realtime_context.rs index a246afc7dd..dfbbccf6f9 100644 --- a/codex-rs/core/src/realtime_context.rs +++ b/codex-rs/core/src/realtime_context.rs @@ -142,6 +142,7 @@ async fn load_recent_threads(sess: &Session) -> Vec { relation_filter: None, archived: false, section: None, + project_id: None, search_term: None, use_state_db_only: false, }) diff --git a/codex-rs/core/src/realtime_context_tests.rs b/codex-rs/core/src/realtime_context_tests.rs index 0ec90884cb..aef899c5b7 100644 --- a/codex-rs/core/src/realtime_context_tests.rs +++ b/codex-rs/core/src/realtime_context_tests.rs @@ -52,6 +52,7 @@ fn stored_thread(cwd: &str, title: &str, first_user_message: &str) -> StoredThre .single() .expect("valid timestamp"), archived_at: None, + project_id: None, section: None, section_position: None, section_entered_at: None, diff --git a/codex-rs/core/src/thread_manager.rs b/codex-rs/core/src/thread_manager.rs index 52e87218b9..fb8988293a 100644 --- a/codex-rs/core/src/thread_manager.rs +++ b/codex-rs/core/src/thread_manager.rs @@ -1159,6 +1159,7 @@ impl ThreadManager { thread_source, parent_trace, ClientMcpExtensions::default(), + /*reserved_thread_id*/ None, ) .await } @@ -1182,6 +1183,7 @@ impl ThreadManager { } /// Fork an existing thread from already-loaded store history. + #[allow(clippy::too_many_arguments)] pub async fn fork_thread_from_history( &self, snapshot: S, @@ -1190,6 +1192,7 @@ impl ThreadManager { thread_source: Option, parent_trace: Option, client_mcp_extensions: ClientMcpExtensions, + reserved_thread_id: Option, ) -> CodexResult where S: Into, @@ -1204,6 +1207,7 @@ impl ThreadManager { thread_source, parent_trace, client_mcp_extensions, + reserved_thread_id, ) .await } @@ -1216,6 +1220,7 @@ impl ThreadManager { thread_source: Option, parent_trace: Option, client_mcp_extensions: ClientMcpExtensions, + reserved_thread_id: Option, ) -> CodexResult { let history = InitialHistory::Resumed(ResumedHistory { conversation_id: prepared.source_thread_id, @@ -1237,6 +1242,7 @@ impl ThreadManager { thread_source, parent_trace, client_mcp_extensions, + reserved_thread_id, ) .await; drop(prepared); @@ -1250,6 +1256,7 @@ impl ThreadManager { thread_source: Option, parent_trace: Option, client_mcp_extensions: ClientMcpExtensions, + reserved_thread_id: Option, ) -> CodexResult { let ForkHistory { snapshot, @@ -1282,6 +1289,7 @@ impl ThreadManager { thread_source, parent_trace, client_mcp_extensions, + reserved_thread_id, ..StartThreadOptions::new(config) }; let mut request = diff --git a/codex-rs/core/tests/suite/fork_thread.rs b/codex-rs/core/tests/suite/fork_thread.rs index f92cce3c1b..ac27c3d54a 100644 --- a/codex-rs/core/tests/suite/fork_thread.rs +++ b/codex-rs/core/tests/suite/fork_thread.rs @@ -228,6 +228,7 @@ async fn assert_copied_fork_persists_inherited_history(history_mode: ThreadHisto /*thread_source*/ None, /*parent_trace*/ None, ClientMcpExtensions::default(), + /*reserved_thread_id*/ None, ) .await .expect("fork from stored history"); diff --git a/codex-rs/exec/src/lib.rs b/codex-rs/exec/src/lib.rs index 2ba5207e65..8143b72ff7 100644 --- a/codex-rs/exec/src/lib.rs +++ b/codex-rs/exec/src/lib.rs @@ -1591,6 +1591,7 @@ async fn resolve_resume_thread_id( source_kinds: Some(all_thread_source_kinds()), archived: Some(false), section_id: None, + project_id: None, parent_thread_id: None, ancestor_thread_id: None, cwd: None, @@ -1675,6 +1676,7 @@ async fn resolve_resume_thread_id( source_kinds: Some(all_thread_source_kinds()), archived: Some(false), section_id: None, + project_id: None, parent_thread_id: None, ancestor_thread_id: None, cwd: None, diff --git a/codex-rs/exec/src/lib_tests.rs b/codex-rs/exec/src/lib_tests.rs index 467df5d5a9..e9417ebf93 100644 --- a/codex-rs/exec/src/lib_tests.rs +++ b/codex-rs/exec/src/lib_tests.rs @@ -337,6 +337,7 @@ fn turn_items_for_thread_returns_matching_turn_items() { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 0, @@ -816,6 +817,7 @@ fn sample_thread_start_response() -> ThreadStartResponse { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 0, diff --git a/codex-rs/rollout/src/list.rs b/codex-rs/rollout/src/list.rs index b849490dce..a5b8040c48 100644 --- a/codex-rs/rollout/src/list.rs +++ b/codex-rs/rollout/src/list.rs @@ -59,6 +59,8 @@ pub struct ThreadItem { pub preview: Option, /// The user-selected section in SQLite-owned metadata. pub section: Option, + /// Canonical project assignment in SQLite-owned metadata. + pub project_id: Option, /// Working directory from session metadata. pub cwd: Option, /// Git branch from session metadata. @@ -835,6 +837,7 @@ async fn build_thread_item( first_user_message, preview, section: None, + project_id: None, cwd, git_branch, git_sha, diff --git a/codex-rs/rollout/src/recorder.rs b/codex-rs/rollout/src/recorder.rs index b6fba6b760..6be4356c99 100644 --- a/codex-rs/rollout/src/recorder.rs +++ b/codex-rs/rollout/src/recorder.rs @@ -496,6 +496,7 @@ impl RolloutRecorder { /*relation_filter*/ None, archived, /*section*/ None, + /*project_id*/ None, search_term, ) .await @@ -606,6 +607,7 @@ impl RolloutRecorder { /*relation_filter*/ None, archived, /*section*/ None, + /*project_id*/ None, search_term, ) .await; @@ -636,6 +638,7 @@ impl RolloutRecorder { /*relation_filter*/ None, archived, /*section*/ None, + /*project_id*/ None, search_term, ) .await @@ -677,6 +680,7 @@ impl RolloutRecorder { /*relation_filter*/ None, archived, /*section*/ None, + /*project_id*/ None, search_term, ) .await @@ -757,6 +761,7 @@ impl RolloutRecorder { /*relation_filter*/ None, /*archived*/ false, /*section*/ None, + /*project_id*/ None, /*search_term*/ None, ) .await @@ -1265,6 +1270,7 @@ fn fill_missing_thread_item_metadata(item: &mut ThreadItem, state_item: ThreadIt first_user_message, preview, section, + project_id, cwd, git_branch, git_sha, @@ -1288,6 +1294,7 @@ fn fill_missing_thread_item_metadata(item: &mut ThreadItem, state_item: ThreadIt item.preview = preview; } item.section = section; + item.project_id = project_id; if item.cwd.is_none() { item.cwd = cwd; } @@ -2001,6 +2008,7 @@ fn thread_item_from_state_metadata( first_user_message: item.first_user_message, preview: item.preview, section: item.section, + project_id: item.project_id, cwd: Some(item.cwd), git_branch: item.git_branch, git_sha: item.git_sha, diff --git a/codex-rs/rollout/src/recorder_tests.rs b/codex-rs/rollout/src/recorder_tests.rs index a69919dec5..2e39535a94 100644 --- a/codex-rs/rollout/src/recorder_tests.rs +++ b/codex-rs/rollout/src/recorder_tests.rs @@ -1512,6 +1512,7 @@ fn fill_missing_thread_item_metadata_preserves_identity_and_prefers_state_git_fi thread_id: Some(filesystem_thread_id), first_user_message: Some("filesystem message".to_string()), preview: Some("filesystem preview".to_string()), + project_id: None, section: None, cwd: None, git_branch: Some("filesystem-branch".to_string()), @@ -1533,6 +1534,7 @@ fn fill_missing_thread_item_metadata_preserves_identity_and_prefers_state_git_fi thread_id: Some(state_thread_id), first_user_message: Some("state message".to_string()), preview: Some("state preview".to_string()), + project_id: None, section: Some(codex_state::ThreadSection { id: codex_state::PINNED_THREAD_SECTION_ID.to_string(), name: codex_state::PINNED_THREAD_SECTION_NAME.to_string(), diff --git a/codex-rs/rollout/src/state_db.rs b/codex-rs/rollout/src/state_db.rs index 590dcd5d13..439a1e62ba 100644 --- a/codex-rs/rollout/src/state_db.rs +++ b/codex-rs/rollout/src/state_db.rs @@ -362,6 +362,7 @@ pub async fn list_threads_db( relation_filter: Option, archived: bool, section: Option>, + project_id: Option>, search_term: Option<&str>, ) -> Option { let ctx = context?; @@ -407,6 +408,7 @@ pub async fn list_threads_db( allowed_sources: allowed_sources.as_slice(), model_providers: model_providers.as_deref(), cwd_filters: normalized_cwd_filters.as_deref(), + project_id, anchor: anchor.as_ref(), sort_key: state_sort_key, sort_direction: state_sort_direction, @@ -434,6 +436,7 @@ pub async fn list_threads_db( allowed_sources: allowed_sources.as_slice(), model_providers: model_providers.as_deref(), cwd_filters: normalized_cwd_filters.as_deref(), + project_id, anchor: anchor.as_ref(), sort_key: state_sort_key, sort_direction: state_sort_direction, diff --git a/codex-rs/rollout/src/state_db_tests.rs b/codex-rs/rollout/src/state_db_tests.rs index a91fc02486..6fd9427f65 100644 --- a/codex-rs/rollout/src/state_db_tests.rs +++ b/codex-rs/rollout/src/state_db_tests.rs @@ -84,6 +84,7 @@ async fn list_threads_db_rejects_mismatched_sqlite_config_without_cleanup() -> a /*relation_filter*/ None, /*archived*/ false, /*section*/ None, + /*project_id*/ None, /*search_term*/ None, ) .await; diff --git a/codex-rs/rollout/src/tests.rs b/codex-rs/rollout/src/tests.rs index 3dab8585fd..0e6180a41a 100644 --- a/codex-rs/rollout/src/tests.rs +++ b/codex-rs/rollout/src/tests.rs @@ -723,6 +723,7 @@ async fn test_list_conversations_latest_first() { thread_id: Some(thread_id_from_uuid(u3)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -744,6 +745,7 @@ async fn test_list_conversations_latest_first() { thread_id: Some(thread_id_from_uuid(u2)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -765,6 +767,7 @@ async fn test_list_conversations_latest_first() { thread_id: Some(thread_id_from_uuid(u1)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -879,6 +882,7 @@ async fn test_pagination_cursor() { thread_id: Some(thread_id_from_uuid(u5)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -900,6 +904,7 @@ async fn test_pagination_cursor() { thread_id: Some(thread_id_from_uuid(u4)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -957,6 +962,7 @@ async fn test_pagination_cursor() { thread_id: Some(thread_id_from_uuid(u3)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -978,6 +984,7 @@ async fn test_pagination_cursor() { thread_id: Some(thread_id_from_uuid(u2)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -1027,6 +1034,7 @@ async fn test_pagination_cursor() { thread_id: Some(thread_id_from_uuid(u1)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -1201,6 +1209,7 @@ async fn test_get_thread_contents() { thread_id: Some(thread_id_from_uuid(uuid)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -1602,6 +1611,7 @@ async fn test_timestamp_only_cursor_skips_same_second_filesystem_ties() { thread_id: Some(thread_id_from_uuid(u3)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, @@ -1623,6 +1633,7 @@ async fn test_timestamp_only_cursor_skips_same_second_filesystem_ties() { thread_id: Some(thread_id_from_uuid(u2)), first_user_message: Some("Hello from user".to_string()), preview: Some("Hello from user".to_string()), + project_id: None, section: None, cwd: Some(Path::new(".").to_path_buf()), git_branch: None, diff --git a/codex-rs/state/migrations/0049_projects.sql b/codex-rs/state/migrations/0049_projects.sql new file mode 100644 index 0000000000..15a3fcc282 --- /dev/null +++ b/codex-rs/state/migrations/0049_projects.sql @@ -0,0 +1,30 @@ +CREATE TABLE projects ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + metadata TEXT NOT NULL DEFAULT '{}', + position INTEGER NOT NULL, + created_at_ms INTEGER NOT NULL, + updated_at_ms INTEGER NOT NULL +); + +CREATE TABLE project_roots ( + project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE, + position INTEGER NOT NULL, + path TEXT NOT NULL, + PRIMARY KEY (project_id, position) +); + +CREATE TABLE project_idempotency_keys ( + key TEXT PRIMARY KEY, + project_id TEXT NOT NULL, + created_at_ms INTEGER NOT NULL +); + +ALTER TABLE threads ADD COLUMN project_id TEXT + REFERENCES projects(id) ON DELETE SET NULL; + +CREATE INDEX idx_projects_position + ON projects(position ASC, id ASC); +CREATE INDEX idx_threads_project_id + ON threads(project_id, archived, created_at_ms DESC, id DESC) + WHERE project_id IS NOT NULL; diff --git a/codex-rs/state/src/extract.rs b/codex-rs/state/src/extract.rs index f8a2abf499..978b4e9dee 100644 --- a/codex-rs/state/src/extract.rs +++ b/codex-rs/state/src/extract.rs @@ -703,6 +703,7 @@ mod tests { section: None, section_position: None, section_entered_at: None, + project_id: None, git_sha: None, git_branch: None, git_origin_url: None, diff --git a/codex-rs/state/src/lib.rs b/codex-rs/state/src/lib.rs index 40add08908..0352333a97 100644 --- a/codex-rs/state/src/lib.rs +++ b/codex-rs/state/src/lib.rs @@ -19,10 +19,14 @@ mod runtime; mod sqlite; mod telemetry; +pub use model::CreatedProject; pub use model::LogEntry; pub use model::LogQuery; pub use model::LogRow; pub use model::Phase2JobClaimOutcome; +pub use model::Project; +pub use model::ProjectRoot; +pub use model::ProjectsPage; pub use model::QueuedUserSubmissionRecord; pub use model::RolloutMigrationCursor; pub use model::RolloutMigrationSkippedRollout; diff --git a/codex-rs/state/src/model/mod.rs b/codex-rs/state/src/model/mod.rs index e11de8da58..d46000d66c 100644 --- a/codex-rs/state/src/model/mod.rs +++ b/codex-rs/state/src/model/mod.rs @@ -2,6 +2,7 @@ mod backfill_state; mod graph; mod log; mod memories; +mod project; mod queued_item; mod rollout_migration_state; mod thread_goal; @@ -18,6 +19,10 @@ pub use memories::Stage1JobClaim; pub use memories::Stage1JobClaimOutcome; pub use memories::Stage1Output; pub use memories::Stage1StartupClaimParams; +pub use project::CreatedProject; +pub use project::Project; +pub use project::ProjectRoot; +pub use project::ProjectsPage; pub use queued_item::QueuedUserSubmissionRecord; pub use rollout_migration_state::RolloutMigrationCursor; pub use rollout_migration_state::RolloutMigrationSkippedRollout; diff --git a/codex-rs/state/src/model/project.rs b/codex-rs/state/src/model/project.rs new file mode 100644 index 0000000000..efdabca1e7 --- /dev/null +++ b/codex-rs/state/src/model/project.rs @@ -0,0 +1,32 @@ +use std::collections::BTreeMap; + +use serde::Deserialize; +use serde::Serialize; + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct ProjectRoot { + pub path: String, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +pub struct Project { + pub id: String, + pub name: String, + pub roots: Vec, + pub metadata: BTreeMap, + pub position: i64, + pub created_at_ms: i64, + pub updated_at_ms: i64, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct CreatedProject { + pub project: Project, + pub created: bool, +} + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ProjectsPage { + pub projects: Vec, + pub next_cursor: Option, +} diff --git a/codex-rs/state/src/model/thread_metadata.rs b/codex-rs/state/src/model/thread_metadata.rs index 318eb7d931..c032ff118f 100644 --- a/codex-rs/state/src/model/thread_metadata.rs +++ b/codex-rs/state/src/model/thread_metadata.rs @@ -176,6 +176,8 @@ pub struct ThreadMetadata { pub section_position: Option, /// The time when the thread most recently entered its current section. pub section_entered_at: Option>, + /// Canonical project assignment owned by app-server, if any. + pub project_id: Option, /// The git commit SHA, if known. pub git_sha: Option, /// The git branch name, if known. @@ -309,6 +311,7 @@ impl ThreadMetadataBuilder { section: None, section_position: None, section_entered_at: None, + project_id: None, git_sha: self.git_sha.clone(), git_branch: self.git_branch.clone(), git_origin_url: self.git_origin_url.clone(), @@ -432,6 +435,9 @@ impl ThreadMetadata { if self.section_entered_at != other.section_entered_at { diffs.push("section_entered_at"); } + if self.project_id != other.project_id { + diffs.push("project_id"); + } if self.git_sha != other.git_sha { diffs.push("git_sha"); } @@ -480,6 +486,7 @@ pub(crate) struct ThreadRow { section_appearance: Option, section_position: Option, section_entered_at_ms: Option, + project_id: Option, git_sha: Option, git_branch: Option, git_origin_url: Option, @@ -517,6 +524,7 @@ impl ThreadRow { section_appearance: row.try_get("section_appearance")?, section_position: row.try_get("section_position")?, section_entered_at_ms: row.try_get("section_entered_at_ms")?, + project_id: row.try_get("project_id")?, git_sha: row.try_get("git_sha")?, git_branch: row.try_get("git_branch")?, git_origin_url: row.try_get("git_origin_url")?, @@ -558,6 +566,7 @@ impl TryFrom for ThreadMetadata { section_appearance, section_position, section_entered_at_ms, + project_id, git_sha, git_branch, git_origin_url, @@ -614,6 +623,7 @@ impl TryFrom for ThreadMetadata { section_entered_at: section_entered_at_ms .map(epoch_millis_to_datetime) .transpose()?, + project_id, git_sha, git_branch, git_origin_url, @@ -720,6 +730,7 @@ mod tests { section_appearance: None, section_position: None, section_entered_at_ms: None, + project_id: None, git_sha: None, git_branch: None, git_origin_url: None, @@ -756,6 +767,7 @@ mod tests { section: None, section_position: None, section_entered_at: None, + project_id: None, git_sha: None, git_branch: None, git_origin_url: None, diff --git a/codex-rs/state/src/runtime.rs b/codex-rs/state/src/runtime.rs index a71a353162..95765f98f0 100644 --- a/codex-rs/state/src/runtime.rs +++ b/codex-rs/state/src/runtime.rs @@ -44,6 +44,7 @@ mod external_agent_config_imports; mod goals; mod logs; mod memories; +mod projects; mod queued_items; mod recovery; mod remote_control; diff --git a/codex-rs/state/src/runtime/memories.rs b/codex-rs/state/src/runtime/memories.rs index 6a778ee66e..fd2119e60a 100644 --- a/codex-rs/state/src/runtime/memories.rs +++ b/codex-rs/state/src/runtime/memories.rs @@ -208,6 +208,7 @@ SELECT ) AS section_appearance, threads.section_position, threads.section_entered_at_ms, + threads.project_id, threads.git_sha, threads.git_branch, threads.git_origin_url @@ -222,6 +223,7 @@ FROM threads model_providers: None, cwd_filters: None, section: None, + project_id: None, anchor: None, sort_key: SortKey::UpdatedAt, sort_direction: SortDirection::Desc, @@ -596,6 +598,7 @@ SELECT ) AS section_appearance, threads.section_position, threads.section_entered_at_ms, + threads.project_id, threads.git_sha, threads.git_branch, threads.git_origin_url diff --git a/codex-rs/state/src/runtime/projects.rs b/codex-rs/state/src/runtime/projects.rs new file mode 100644 index 0000000000..5fd25d818c --- /dev/null +++ b/codex-rs/state/src/runtime/projects.rs @@ -0,0 +1,492 @@ +use std::collections::BTreeMap; + +use sqlx::Row; +use uuid::Uuid; + +use super::StateRuntime; +use crate::CreatedProject; +use crate::Project; +use crate::ProjectRoot; +use crate::ProjectsPage; + +impl StateRuntime { + pub async fn set_thread_project( + &self, + thread_id: &str, + project_id: Option<&str>, + ) -> anyhow::Result>> { + let mut tx = self.pool.begin_with("BEGIN IMMEDIATE").await?; + if let Some(project_id) = project_id { + let exists = sqlx::query_scalar::<_, i64>("SELECT COUNT(*) FROM projects WHERE id = ?") + .bind(project_id) + .fetch_one(&mut *tx) + .await?; + if exists == 0 { + tx.rollback().await?; + anyhow::bail!("project not found: {project_id}"); + } + } + let previous = + sqlx::query_scalar::<_, Option>("SELECT project_id FROM threads WHERE id = ?") + .bind(thread_id) + .fetch_optional(&mut *tx) + .await?; + let Some(previous) = previous else { + tx.rollback().await?; + return Ok(None); + }; + if previous.as_deref() != project_id { + sqlx::query("UPDATE threads SET project_id = ? WHERE id = ?") + .bind(project_id) + .bind(thread_id) + .execute(&mut *tx) + .await?; + } + tx.commit().await?; + Ok(Some(previous)) + } + + pub async fn list_projects( + &self, + cursor: Option<&str>, + limit: usize, + ) -> anyhow::Result { + let anchor = cursor.map(parse_project_cursor).transpose()?; + let mut tx = self.pool.begin().await?; + let rows = if let Some((position, id)) = anchor { + sqlx::query( + "SELECT id, name, metadata, position, created_at_ms, updated_at_ms FROM projects WHERE position > ? OR (position = ? AND id > ?) ORDER BY position ASC, id ASC LIMIT ?", + ) + .bind(position) + .bind(position) + .bind(id) + .bind((limit + 1) as i64) + .fetch_all(&mut *tx) + .await? + } else { + sqlx::query( + "SELECT id, name, metadata, position, created_at_ms, updated_at_ms FROM projects ORDER BY position ASC, id ASC LIMIT ?", + ) + .bind((limit + 1) as i64) + .fetch_all(&mut *tx) + .await? + }; + let project_ids = rows + .iter() + .map(|row| row.try_get("id")) + .collect::, _>>()?; + let mut roots_by_project_id = project_roots_by_id_in_tx(&mut tx, &project_ids).await?; + let mut projects = Vec::with_capacity(rows.len()); + for row in rows { + let project_id: String = row.try_get("id")?; + let roots = roots_by_project_id.remove(&project_id).unwrap_or_default(); + projects.push(project_from_row(&row, roots)?); + } + let next_cursor = (projects.len() > limit) + .then(|| project_cursor(&projects[limit - 1])) + .flatten(); + projects.truncate(limit); + tx.commit().await?; + Ok(ProjectsPage { + projects, + next_cursor, + }) + } + + pub async fn get_project(&self, id: &str) -> anyhow::Result> { + let mut tx = self.pool.begin().await?; + let row = sqlx::query( + "SELECT id, name, metadata, position, created_at_ms, updated_at_ms FROM projects WHERE id = ?", + ) + .bind(id) + .fetch_optional(&mut *tx) + .await?; + let project = match row { + Some(row) => Some(project_from_row_in_tx(&mut tx, &row).await?), + None => None, + }; + tx.commit().await?; + Ok(project) + } + + pub async fn get_project_by_idempotency_key( + &self, + idempotency_key: &str, + ) -> anyhow::Result> { + let mut tx = self.pool.begin().await?; + let project_id = sqlx::query_scalar::<_, String>( + "SELECT project_id FROM project_idempotency_keys WHERE key = ?", + ) + .bind(idempotency_key) + .fetch_optional(&mut *tx) + .await?; + let Some(project_id) = project_id else { + tx.commit().await?; + return Ok(None); + }; + let row = sqlx::query( + "SELECT id, name, metadata, position, created_at_ms, updated_at_ms FROM projects WHERE id = ?", + ) + .bind(&project_id) + .fetch_optional(&mut *tx) + .await?; + let Some(row) = row else { + tx.rollback().await?; + anyhow::bail!("idempotency key refers to deleted project: {idempotency_key}"); + }; + let project = project_from_row_in_tx(&mut tx, &row).await?; + tx.commit().await?; + Ok(Some(project)) + } + + pub async fn create_project( + &self, + name: String, + roots: Vec, + metadata: BTreeMap, + thread_ids: &[String], + idempotency_key: &str, + ) -> anyhow::Result { + let mut tx = self.pool.begin_with("BEGIN IMMEDIATE").await?; + let existing_project_id = sqlx::query_scalar::<_, String>( + "SELECT project_id FROM project_idempotency_keys WHERE key = ?", + ) + .bind(idempotency_key) + .fetch_optional(&mut *tx) + .await?; + if let Some(existing_project_id) = existing_project_id { + let row = sqlx::query( + "SELECT id, name, metadata, position, created_at_ms, updated_at_ms FROM projects WHERE id = ?", + ) + .bind(&existing_project_id) + .fetch_optional(&mut *tx) + .await?; + let Some(row) = row else { + tx.rollback().await?; + anyhow::bail!("idempotency key refers to deleted project: {idempotency_key}"); + }; + let project = project_from_row_in_tx(&mut tx, &row).await?; + tx.commit().await?; + return Ok(CreatedProject { + project, + created: false, + }); + } + for thread_id in thread_ids { + let exists = sqlx::query_scalar::<_, i64>("SELECT COUNT(*) FROM threads WHERE id = ?") + .bind(thread_id) + .fetch_one(&mut *tx) + .await?; + if exists == 0 { + anyhow::bail!("thread not found: {thread_id}"); + } + } + let id = Uuid::now_v7().to_string(); + let now = chrono::Utc::now().timestamp_millis(); + let position = sqlx::query_scalar::<_, Option>("SELECT MAX(position) FROM projects") + .fetch_one(&mut *tx) + .await? + .unwrap_or(-1) + .checked_add(1) + .ok_or_else(|| anyhow::anyhow!("project position overflow"))?; + let metadata_json = serde_json::to_string(&metadata)?; + sqlx::query( + "INSERT INTO projects (id, name, metadata, position, created_at_ms, updated_at_ms) VALUES (?, ?, ?, ?, ?, ?)", + ) + .bind(&id) + .bind(&name) + .bind(&metadata_json) + .bind(position) + .bind(now) + .bind(now) + .execute(&mut *tx) + .await?; + replace_roots(&mut tx, &id, &roots).await?; + for thread_id in thread_ids { + sqlx::query("UPDATE threads SET project_id = ? WHERE id = ?") + .bind(&id) + .bind(thread_id) + .execute(&mut *tx) + .await?; + } + sqlx::query( + "INSERT INTO project_idempotency_keys (key, project_id, created_at_ms) VALUES (?, ?, ?)", + ) + .bind(idempotency_key) + .bind(&id) + .bind(now) + .execute(&mut *tx) + .await?; + tx.commit().await?; + Ok(CreatedProject { + project: Project { + id, + name, + roots, + metadata, + position, + created_at_ms: now, + updated_at_ms: now, + }, + created: true, + }) + } + + pub async fn update_project( + &self, + id: &str, + name: Option, + roots: Option>, + metadata: Option>, + ) -> anyhow::Result> { + let mut tx = self.pool.begin_with("BEGIN IMMEDIATE").await?; + let row = sqlx::query( + "SELECT id, name, metadata, position, created_at_ms, updated_at_ms FROM projects WHERE id = ?", + ) + .bind(id) + .fetch_optional(&mut *tx) + .await?; + let Some(row) = row else { + tx.rollback().await?; + return Ok(None); + }; + let current = project_from_row_in_tx(&mut tx, &row).await?; + let next_name = name.unwrap_or_else(|| current.name.clone()); + let next_roots = roots.unwrap_or_else(|| current.roots.clone()); + let next_metadata = metadata.unwrap_or_else(|| current.metadata.clone()); + if next_name == current.name + && next_roots == current.roots + && next_metadata == current.metadata + { + tx.rollback().await?; + return Ok(Some((current, false))); + } + let now = chrono::Utc::now().timestamp_millis(); + sqlx::query("UPDATE projects SET name = ?, metadata = ?, updated_at_ms = ? WHERE id = ?") + .bind(&next_name) + .bind(serde_json::to_string(&next_metadata)?) + .bind(now) + .bind(id) + .execute(&mut *tx) + .await?; + if next_roots != current.roots { + replace_roots(&mut tx, id, &next_roots).await?; + } + tx.commit().await?; + Ok(Some(( + Project { + id: id.to_string(), + name: next_name, + roots: next_roots, + metadata: next_metadata, + position: current.position, + created_at_ms: current.created_at_ms, + updated_at_ms: now, + }, + true, + ))) + } + + /// Move a project before another project, or append it when the anchor is absent. + /// + /// Returns None when the moved project does not exist and Some(false) for a no-op. + pub async fn move_project( + &self, + project_id: &str, + before_project_id: Option<&str>, + ) -> anyhow::Result> { + let mut tx = self.pool.begin_with("BEGIN IMMEDIATE").await?; + let mut project_ids = sqlx::query_scalar::<_, String>( + "SELECT id FROM projects ORDER BY position ASC, id ASC", + ) + .fetch_all(&mut *tx) + .await?; + let Some(current_index) = project_ids.iter().position(|id| id == project_id) else { + tx.rollback().await?; + return Ok(None); + }; + if before_project_id == Some(project_id) { + tx.rollback().await?; + anyhow::bail!("project {project_id} cannot be moved before itself"); + } + let original_project_ids = project_ids.clone(); + project_ids.remove(current_index); + let next_index = if let Some(before_project_id) = before_project_id { + project_ids + .iter() + .position(|id| id == before_project_id) + .ok_or_else(|| anyhow::anyhow!("before project not found: {before_project_id}"))? + } else { + project_ids.len() + }; + project_ids.insert(next_index, project_id.to_string()); + if project_ids == original_project_ids { + tx.rollback().await?; + return Ok(Some(false)); + } + for (position, id) in project_ids.iter().enumerate() { + sqlx::query("UPDATE projects SET position = ? WHERE id = ?") + .bind(position as i64) + .bind(id) + .execute(&mut *tx) + .await?; + } + sqlx::query("UPDATE projects SET updated_at_ms = ? WHERE id = ?") + .bind(chrono::Utc::now().timestamp_millis()) + .bind(project_id) + .execute(&mut *tx) + .await?; + tx.commit().await?; + Ok(Some(true)) + } + + pub async fn delete_project( + &self, + id: &str, + ) -> anyhow::Result, Vec)>> { + let mut tx = self.pool.begin_with("BEGIN IMMEDIATE").await?; + let exists = sqlx::query_scalar::<_, i64>("SELECT COUNT(*) FROM projects WHERE id = ?") + .bind(id) + .fetch_one(&mut *tx) + .await?; + if exists == 0 { + tx.rollback().await?; + return Ok(None); + } + let active_thread_ids = sqlx::query_scalar::<_, String>( + "SELECT id FROM threads WHERE project_id = ? AND archived = 0 ORDER BY id ASC", + ) + .bind(id) + .fetch_all(&mut *tx) + .await?; + let archived_thread_ids = sqlx::query_scalar::<_, String>( + "SELECT id FROM threads WHERE project_id = ? AND archived = 1 ORDER BY id ASC", + ) + .bind(id) + .fetch_all(&mut *tx) + .await?; + sqlx::query("UPDATE threads SET project_id = NULL WHERE project_id = ?") + .bind(id) + .execute(&mut *tx) + .await?; + sqlx::query("DELETE FROM projects WHERE id = ?") + .bind(id) + .execute(&mut *tx) + .await?; + tx.commit().await?; + Ok(Some((active_thread_ids, archived_thread_ids))) + } +} + +async fn project_from_row_in_tx( + tx: &mut sqlx::Transaction<'_, sqlx::Sqlite>, + row: &sqlx::sqlite::SqliteRow, +) -> anyhow::Result { + let id: String = row.try_get("id")?; + let roots = + sqlx::query("SELECT path FROM project_roots WHERE project_id = ? ORDER BY position ASC") + .bind(&id) + .fetch_all(&mut **tx) + .await? + .into_iter() + .map(|row| { + Ok(ProjectRoot { + path: row.try_get("path")?, + }) + }) + .collect::>>()?; + project_from_row(row, roots) +} + +fn project_from_row( + row: &sqlx::sqlite::SqliteRow, + roots: Vec, +) -> anyhow::Result { + Ok(Project { + id: row.try_get("id")?, + name: row.try_get("name")?, + roots, + metadata: serde_json::from_str(&row.try_get::("metadata")?)?, + position: row.try_get("position")?, + created_at_ms: row.try_get("created_at_ms")?, + updated_at_ms: row.try_get("updated_at_ms")?, + }) +} + +async fn project_roots_by_id_in_tx( + tx: &mut sqlx::Transaction<'_, sqlx::Sqlite>, + project_ids: &[String], +) -> anyhow::Result>> { + if project_ids.is_empty() { + return Ok(BTreeMap::new()); + } + let mut builder = sqlx::QueryBuilder::::new( + "SELECT project_id, path FROM project_roots WHERE project_id IN (", + ); + let mut separated = builder.separated(", "); + for project_id in project_ids { + separated.push_bind(project_id); + } + builder.push(") ORDER BY project_id ASC, position ASC"); + let rows = builder.build().fetch_all(&mut **tx).await?; + let mut roots_by_project_id = BTreeMap::>::new(); + for row in rows { + roots_by_project_id + .entry(row.try_get("project_id")?) + .or_default() + .push(ProjectRoot { + path: row.try_get("path")?, + }); + } + Ok(roots_by_project_id) +} + +async fn replace_roots( + tx: &mut sqlx::Transaction<'_, sqlx::Sqlite>, + project_id: &str, + roots: &[ProjectRoot], +) -> anyhow::Result<()> { + sqlx::query("DELETE FROM project_roots WHERE project_id = ?") + .bind(project_id) + .execute(&mut **tx) + .await?; + for (position, root) in roots.iter().enumerate() { + sqlx::query("INSERT INTO project_roots (project_id, position, path) VALUES (?, ?, ?)") + .bind(project_id) + .bind(position as i64) + .bind(&root.path) + .execute(&mut **tx) + .await?; + } + Ok(()) +} + +fn project_cursor(project: &Project) -> Option { + Some(format!("{}|{}", project.position, project.id)) +} + +fn parse_project_cursor(cursor: &str) -> anyhow::Result<(i64, String)> { + let mut parts = cursor.split('|'); + let position_component = parts.next().ok_or_else(|| invalid_project_cursor(cursor))?; + let position: i64 = position_component + .parse() + .map_err(|_| invalid_project_cursor(cursor))?; + let id = parts.next().ok_or_else(|| invalid_project_cursor(cursor))?; + let uuid = Uuid::parse_str(id).map_err(|_| invalid_project_cursor(cursor))?; + if parts.next().is_some() + || position < 0 + || position.to_string() != position_component + || uuid.to_string() != id + { + return Err(invalid_project_cursor(cursor)); + } + Ok((position, id.to_string())) +} + +fn invalid_project_cursor(cursor: &str) -> anyhow::Error { + anyhow::anyhow!("invalid project cursor: {cursor}") +} + +#[cfg(test)] +#[path = "projects_tests.rs"] +mod tests; diff --git a/codex-rs/state/src/runtime/projects_tests.rs b/codex-rs/state/src/runtime/projects_tests.rs new file mode 100644 index 0000000000..11402ac0c6 --- /dev/null +++ b/codex-rs/state/src/runtime/projects_tests.rs @@ -0,0 +1,461 @@ +use std::collections::BTreeMap; + +use codex_protocol::ThreadId; +use codex_protocol::protocol::SessionSource; +use codex_utils_absolute_path::test_support::PathExt; +use pretty_assertions::assert_eq; + +use super::*; +use crate::ThreadMetadataBuilder; +use crate::runtime::test_support::unique_temp_dir; + +#[tokio::test] +async fn project_lifecycle_preserves_order_and_clears_assignments() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let thread_id = ThreadId::default(); + let metadata = ThreadMetadataBuilder::new( + thread_id, + home.join("thread.jsonl"), + chrono::Utc::now(), + SessionSource::Cli, + ) + .build("test-provider"); + runtime.upsert_thread(&metadata).await?; + + let roots = vec![ + ProjectRoot { + path: "/tmp/one".to_string(), + }, + ProjectRoot { + path: "/tmp/two".to_string(), + }, + ]; + let project = runtime + .create_project( + "Work".to_string(), + roots.clone(), + BTreeMap::from([("color".to_string(), "blue".to_string())]), + &[thread_id.to_string()], + "state:project-lifecycle", + ) + .await? + .project; + assert_eq!(project.position, 0); + assert_eq!(project.roots, roots); + assert_eq!( + runtime.get_thread(thread_id).await?.unwrap().project_id, + Some(project.id.clone()) + ); + + let unchanged = runtime + .update_project( + &project.id, + /*name*/ None, + /*roots*/ None, + /*metadata*/ None, + ) + .await? + .unwrap(); + assert!(!unchanged.1); + assert_eq!(unchanged.0.updated_at_ms, project.updated_at_ms); + + runtime + .mark_archived( + thread_id, + home.join("archived.jsonl").as_path(), + chrono::Utc::now(), + ) + .await?; + let active_thread_id = ThreadId::default(); + let active_metadata = ThreadMetadataBuilder::new( + active_thread_id, + home.join("active.jsonl"), + chrono::Utc::now(), + SessionSource::Cli, + ) + .build("test-provider"); + runtime.upsert_thread(&active_metadata).await?; + runtime + .set_thread_project(&active_thread_id.to_string(), Some(&project.id)) + .await? + .expect("active thread exists"); + let (affected_active_thread_ids, affected_archived_thread_ids) = + runtime.delete_project(&project.id).await?.unwrap(); + assert_eq!( + affected_active_thread_ids, + vec![active_thread_id.to_string()] + ); + assert_eq!(affected_archived_thread_ids, vec![thread_id.to_string()]); + assert_eq!( + runtime.get_thread(thread_id).await?.unwrap().project_id, + None + ); + assert_eq!( + runtime + .get_thread(active_thread_id) + .await? + .unwrap() + .project_id, + None + ); + assert_eq!(runtime.get_project(&project.id).await?, None); + Ok(()) +} + +#[tokio::test] +async fn project_idempotency_keys_replay_and_survive_deletion() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let created = runtime + .create_project( + "Imported".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "desktop:legacy-project", + ) + .await?; + assert!(created.created); + assert_eq!( + runtime + .get_project_by_idempotency_key("desktop:legacy-project") + .await?, + Some(created.project.clone()) + ); + let replayed = runtime + .create_project( + "Changed payload".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "desktop:legacy-project", + ) + .await?; + assert!(!replayed.created); + assert_eq!(replayed.project, created.project); + + runtime.delete_project(&created.project.id).await?; + let lookup_error = runtime + .get_project_by_idempotency_key("desktop:legacy-project") + .await + .expect_err("deleted project keys must remain tombstoned"); + assert!( + lookup_error + .to_string() + .contains("idempotency key refers to deleted project") + ); + let error = runtime + .create_project( + "Recreated".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "desktop:legacy-project", + ) + .await + .expect_err("deleted project keys must remain tombstoned"); + assert!( + error + .to_string() + .contains("idempotency key refers to deleted project") + ); + Ok(()) +} + +#[tokio::test] +async fn project_import_rejects_unknown_thread_without_partial_project() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let error = runtime + .create_project( + "Work".to_string(), + Vec::new(), + BTreeMap::new(), + &["00000000-0000-0000-0000-000000000123".to_string()], + "state:unknown-thread", + ) + .await + .unwrap_err(); + assert!(error.to_string().contains("thread not found")); + assert!( + runtime + .list_projects(/*cursor*/ None, /*limit*/ 10) + .await? + .projects + .is_empty() + ); + Ok(()) +} + +#[tokio::test] +async fn project_updates_preserve_omitted_fields_across_concurrent_writers() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime_one = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let runtime_two = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let project = runtime_one + .create_project( + "Work".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "state:concurrent-update", + ) + .await? + .project; + + let (name_update, metadata_update) = tokio::join!( + runtime_one.update_project( + &project.id, + Some("Renamed".to_string()), + /*roots*/ None, + /*metadata*/ None, + ), + runtime_two.update_project( + &project.id, + /*name*/ None, + /*roots*/ None, + Some(BTreeMap::from([("color".to_string(), "blue".to_string())])), + ), + ); + name_update?.expect("project exists"); + metadata_update?.expect("project exists"); + + let updated = runtime_one + .get_project(&project.id) + .await? + .expect("project exists"); + assert_eq!(updated.name, "Renamed"); + assert_eq!( + updated.metadata, + BTreeMap::from([("color".to_string(), "blue".to_string())]) + ); + Ok(()) +} + +#[tokio::test] +async fn project_list_rejects_malformed_cursors() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + + for cursor in [ + "", + "123", + "+123|00000000-0000-0000-0000-000000000000", + "000123|00000000-0000-0000-0000-000000000000", + "-0|00000000-0000-0000-0000-000000000000", + "-1|00000000-0000-0000-0000-000000000000", + "123|not-a-uuid", + "123|00000000000000000000000000000000", + "123|00000000-0000-0000-0000-00000000000A", + "123|00000000-0000-0000-0000-000000000000|extra", + "not-a-position|00000000-0000-0000-0000-000000000000", + ] { + let error = runtime + .list_projects(Some(cursor), /*limit*/ 10) + .await + .expect_err("malformed cursor should fail"); + assert!(error.to_string().starts_with("invalid project cursor:")); + } + Ok(()) +} + +#[tokio::test] +async fn project_list_cursor_round_trips_across_pages() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + for name in ["One", "Two"] { + runtime + .create_project(name.to_string(), Vec::new(), BTreeMap::new(), &[], name) + .await?; + } + + let first = runtime.list_projects(/*cursor*/ None, /*limit*/ 1).await?; + assert_eq!(first.projects.len(), 1); + let cursor = first.next_cursor.expect("next cursor"); + let second = runtime.list_projects(Some(&cursor), /*limit*/ 1).await?; + assert_eq!(second.projects.len(), 1); + assert_ne!(first.projects[0].id, second.projects[0].id); + assert_eq!(second.next_cursor, None); + Ok(()) +} + +#[tokio::test] +async fn project_move_reorders_projects_and_preserves_no_op_timestamp() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let one = runtime + .create_project( + "One".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "state:move-one", + ) + .await? + .project; + let two = runtime + .create_project( + "Two".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "state:move-two", + ) + .await? + .project; + let three = runtime + .create_project( + "Three".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "state:move-three", + ) + .await? + .project; + + assert_eq!( + runtime.move_project(&three.id, Some(&one.id)).await?, + Some(true) + ); + let reordered = runtime.list_projects(/*cursor*/ None, /*limit*/ 10).await?; + assert_eq!( + reordered + .projects + .iter() + .map(|project| project.id.as_str()) + .collect::>(), + vec![three.id.as_str(), one.id.as_str(), two.id.as_str()] + ); + assert_eq!( + reordered + .projects + .iter() + .map(|project| project.position) + .collect::>(), + vec![0, 1, 2] + ); + + let moved = runtime.get_project(&three.id).await?.unwrap(); + assert_eq!( + runtime.move_project(&three.id, Some(&one.id)).await?, + Some(false) + ); + assert_eq!( + runtime.get_project(&three.id).await?.unwrap().updated_at_ms, + moved.updated_at_ms + ); + assert_eq!( + runtime + .move_project(&three.id, Some(&three.id)) + .await + .unwrap_err() + .to_string(), + format!("project {} cannot be moved before itself", three.id) + ); + assert_eq!( + runtime + .move_project(&three.id, Some("00000000-0000-0000-0000-000000000000")) + .await + .unwrap_err() + .to_string(), + "before project not found: 00000000-0000-0000-0000-000000000000" + ); + assert_eq!( + runtime + .move_project( + "00000000-0000-0000-0000-000000000000", + /*before_project_id*/ None, + ) + .await?, + None + ); + Ok(()) +} + +#[tokio::test] +async fn initial_project_assignment_is_inserted_with_thread_row() -> anyhow::Result<()> { + let home = unique_temp_dir(); + let runtime = StateRuntime::init( + crate::SqliteConfig::new_for_testing(home.as_path().abs()), + "test-provider".to_string(), + ) + .await?; + let project = runtime + .create_project( + "Work".to_string(), + Vec::new(), + BTreeMap::new(), + &[], + "state:initial-assignment", + ) + .await? + .project; + let thread_id = ThreadId::default(); + let mut metadata = ThreadMetadataBuilder::new( + thread_id, + home.join("thread.jsonl"), + chrono::Utc::now(), + SessionSource::Cli, + ) + .build("test-provider"); + metadata.project_id = Some(project.id.clone()); + assert!(runtime.insert_thread_if_absent(&metadata).await?); + assert_eq!( + runtime.get_thread(thread_id).await?.unwrap().project_id, + Some(project.id.clone()) + ); + + let missing_thread_id = ThreadId::default(); + let mut missing_project_metadata = ThreadMetadataBuilder::new( + missing_thread_id, + home.join("missing-project.jsonl"), + chrono::Utc::now(), + SessionSource::Cli, + ) + .build("test-provider"); + missing_project_metadata.project_id = Some("00000000-0000-0000-0000-000000000000".to_string()); + let error = runtime + .insert_thread_if_absent(&missing_project_metadata) + .await + .expect_err("unknown project must reject initial thread insert"); + assert!(error.to_string().contains("FOREIGN KEY constraint failed")); + assert_eq!(runtime.get_thread(missing_thread_id).await?, None); + + let deleted = runtime.delete_project(&project.id).await?.unwrap(); + assert_eq!(deleted, (vec![thread_id.to_string()], Vec::new())); + Ok(()) +} diff --git a/codex-rs/state/src/runtime/test_support.rs b/codex-rs/state/src/runtime/test_support.rs index 2c5ef65440..43858ddce4 100644 --- a/codex-rs/state/src/runtime/test_support.rs +++ b/codex-rs/state/src/runtime/test_support.rs @@ -72,6 +72,7 @@ pub(super) fn test_thread_metadata( section: None, section_position: None, section_entered_at: None, + project_id: None, git_sha: None, git_branch: None, git_origin_url: None, diff --git a/codex-rs/state/src/runtime/threads.rs b/codex-rs/state/src/runtime/threads.rs index 31d414a50a..f7eac50676 100644 --- a/codex-rs/state/src/runtime/threads.rs +++ b/codex-rs/state/src/runtime/threads.rs @@ -46,6 +46,7 @@ SELECT ) AS section_appearance, threads.section_position, threads.section_entered_at_ms, + threads.project_id, threads.git_sha, threads.git_branch, threads.git_origin_url @@ -414,6 +415,7 @@ ON CONFLICT(child_thread_id) DO NOTHING model_providers, cwd_filters: None, section: None, + project_id: None, anchor: None, sort_key: crate::SortKey::UpdatedAt, sort_direction: SortDirection::Desc, @@ -539,6 +541,7 @@ ON CONFLICT(child_thread_id) DO NOTHING model_providers, cwd_filters: None, section: None, + project_id: None, anchor, sort_key, sort_direction: SortDirection::Desc, @@ -620,8 +623,9 @@ INSERT INTO threads ( git_sha, git_branch, git_origin_url, - memory_mode -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + memory_mode, + project_id +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO NOTHING "#, ) @@ -670,6 +674,7 @@ ON CONFLICT(id) DO NOTHING .bind(metadata.git_branch.as_deref()) .bind(metadata.git_origin_url.as_deref()) .bind("enabled") + .bind(metadata.project_id.as_deref()) .execute(self.pool.as_ref()) .await?; self.insert_thread_spawn_edge_from_source_if_absent(metadata.id, metadata.source.as_str()) @@ -895,8 +900,9 @@ INSERT INTO threads ( git_sha, git_branch, git_origin_url, - memory_mode -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + memory_mode, + project_id +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET rollout_path = excluded.rollout_path, created_at = excluded.created_at, @@ -978,6 +984,7 @@ ON CONFLICT(id) DO UPDATE SET .bind(metadata.git_branch.as_deref()) .bind(metadata.git_origin_url.as_deref()) .bind(creation_memory_mode.unwrap_or("enabled")) + .bind(metadata.project_id.as_deref()) .execute(self.pool.as_ref()) .await?; self.insert_thread_spawn_edge_from_source_if_absent(metadata.id, metadata.source.as_str()) @@ -1277,6 +1284,7 @@ SELECT ) AS section_appearance, threads.section_position, threads.section_entered_at_ms, + threads.project_id, threads.git_sha, threads.git_branch, threads.git_origin_url @@ -1311,6 +1319,7 @@ pub struct ThreadFilterOptions<'a> { pub model_providers: Option<&'a [String]>, pub cwd_filters: Option<&'a [PathBuf]>, pub section: Option>, + pub project_id: Option>, pub anchor: Option<&'a crate::Anchor>, pub sort_key: SortKey, pub sort_direction: SortDirection, @@ -1342,6 +1351,7 @@ fn push_thread_filters_with_preview<'a>( model_providers, cwd_filters, section, + project_id, anchor, sort_key, sort_direction, @@ -1366,6 +1376,16 @@ fn push_thread_filters_with_preview<'a>( } None => {} } + match project_id { + Some(Some(project_id)) => { + builder.push(" AND threads.project_id = "); + builder.push_bind(project_id); + } + Some(None) => { + builder.push(" AND threads.project_id IS NULL"); + } + None => {} + } if !allowed_sources.is_empty() { builder.push(" AND threads.source IN ("); let mut separated = builder.separated(", "); @@ -1649,6 +1669,7 @@ mod tests { model_providers: None, cwd_filters: None, section, + project_id: None, anchor, sort_key: SortKey::RecencyAt, sort_direction: SortDirection::Desc, @@ -1782,6 +1803,7 @@ mod tests { model_providers: None, cwd_filters: None, section: Some(Some(CUSTOM_THREAD_SECTION_ID)), + project_id: None, anchor, sort_key: SortKey::SectionPosition, sort_direction: SortDirection::Asc, @@ -2029,6 +2051,7 @@ mod tests { model_providers: Some(&model_providers), cwd_filters: None, section: None, + project_id: None, anchor: Some(&anchor), sort_key: SortKey::UpdatedAt, sort_direction: SortDirection::Asc, @@ -2058,6 +2081,7 @@ mod tests { model_providers: Some(&model_providers), cwd_filters: None, section: None, + project_id: None, anchor: page.next_anchor.as_ref(), sort_key: SortKey::UpdatedAt, sort_direction: SortDirection::Asc, @@ -2115,6 +2139,7 @@ mod tests { model_providers: None, cwd_filters: Some(cwd_filters.as_slice()), section: None, + project_id: None, anchor: None, sort_key: SortKey::UpdatedAt, sort_direction: SortDirection::Desc, @@ -2148,6 +2173,7 @@ mod tests { model_providers: None, cwd_filters: Some(cwd_filters.as_slice()), section: None, + project_id: None, anchor: first_page.next_anchor.as_ref(), sort_key: SortKey::UpdatedAt, sort_direction: SortDirection::Desc, @@ -2174,6 +2200,7 @@ mod tests { model_providers: None, cwd_filters: Some(&[]), section: None, + project_id: None, anchor: None, sort_key: SortKey::UpdatedAt, sort_direction: SortDirection::Desc, @@ -2242,6 +2269,7 @@ mod tests { model_providers: Some(&model_providers), cwd_filters, section: None, + project_id: None, anchor, sort_key, sort_direction: SortDirection::Desc, @@ -2343,6 +2371,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, anchor: None, sort_key: SortKey::CreatedAt, sort_direction: SortDirection::Desc, @@ -2372,6 +2401,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, anchor, sort_key: SortKey::CreatedAt, sort_direction: SortDirection::Desc, @@ -3056,6 +3086,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, anchor: None, sort_key: SortKey::RecencyAt, sort_direction: SortDirection::Desc, @@ -3089,6 +3120,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, anchor: first_page.next_anchor.as_ref(), sort_key: SortKey::RecencyAt, sort_direction: SortDirection::Desc, @@ -3122,6 +3154,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, anchor: second_page.next_anchor.as_ref(), sort_key: SortKey::RecencyAt, sort_direction: SortDirection::Desc, diff --git a/codex-rs/thread-store/src/in_memory.rs b/codex-rs/thread-store/src/in_memory.rs index 6993e55daf..9ea7e2bdef 100644 --- a/codex-rs/thread-store/src/in_memory.rs +++ b/codex-rs/thread-store/src/in_memory.rs @@ -174,6 +174,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: None, relation_filter: Some(ThreadRelationFilter::DirectChildrenOf(parent_thread_id)), @@ -202,6 +203,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: None, relation_filter: Some(ThreadRelationFilter::DescendantsOf(parent_thread_id)), @@ -230,6 +232,7 @@ mod tests { model_providers: None, cwd_filters: None, section: Some(Some(codex_state::PINNED_THREAD_SECTION_ID.to_string())), + project_id: None, archived: false, search_term: None, relation_filter: Some(ThreadRelationFilter::DescendantsOf(parent_thread_id)), @@ -258,6 +261,7 @@ mod tests { model_providers: None, cwd_filters: None, section: Some(None), + project_id: None, archived: false, search_term: None, relation_filter: Some(ThreadRelationFilter::DescendantsOf(parent_thread_id)), @@ -704,6 +708,11 @@ impl InMemoryThreadStore { &self, params: UpdateThreadMetadataParams, ) -> ThreadStoreResult { + if params.patch.project_id.is_some() { + return Err(ThreadStoreError::Unsupported { + operation: "projects", + }); + } let mut state = self.state.lock().await; state.calls.update_thread_metadata += 1; if !state.created_threads.contains_key(¶ms.thread_id) { @@ -1067,6 +1076,7 @@ fn stored_thread_from_state( }), section_position: state.section_positions.get(&thread_id).copied(), section_entered_at: state.section_entered_at.get(&thread_id).copied(), + project_id: None, cwd: metadata .and_then(|metadata| metadata.cwd.clone()) .unwrap_or_default(), diff --git a/codex-rs/thread-store/src/lib.rs b/codex-rs/thread-store/src/lib.rs index 8c1e2fbb13..75253e0541 100644 --- a/codex-rs/thread-store/src/lib.rs +++ b/codex-rs/thread-store/src/lib.rs @@ -8,6 +8,7 @@ mod error; mod in_memory; mod live_thread; mod local; +mod projects; mod queue_store; mod store; mod thread_metadata_sync; @@ -30,6 +31,17 @@ pub use local::RolloutMigrationOutcome; pub use local::RolloutMigrationProgress; pub use local::RolloutMigrationReport; pub use local::RolloutMigrationStatus; +pub use projects::CreateProjectParams; +pub use projects::CreatedProject; +pub use projects::DeletedProject; +pub use projects::ListProjectsParams; +pub use projects::MoveProjectParams; +pub use projects::ProjectMoveOutcome; +pub use projects::StoredProject; +pub use projects::StoredProjectRoot; +pub use projects::StoredProjectsPage; +pub use projects::UpdateProjectParams; +pub use projects::UpdatedProject; pub use queue_store::LocalQueueStore; pub use queue_store::QueueStore; pub use store::PersistContext; diff --git a/codex-rs/thread-store/src/local/archive_thread.rs b/codex-rs/thread-store/src/local/archive_thread.rs index 66f42315cf..b14d6ae080 100644 --- a/codex-rs/thread-store/src/local/archive_thread.rs +++ b/codex-rs/thread-store/src/local/archive_thread.rs @@ -283,6 +283,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: true, search_term: None, relation_filter: None, diff --git a/codex-rs/thread-store/src/local/helpers.rs b/codex-rs/thread-store/src/local/helpers.rs index c5a362f73c..1323252e82 100644 --- a/codex-rs/thread-store/src/local/helpers.rs +++ b/codex-rs/thread-store/src/local/helpers.rs @@ -172,6 +172,7 @@ pub(super) fn stored_thread_from_rollout_item( section: item.section, section_position: None, section_entered_at: None, + project_id: item.project_id, cwd: item.cwd.unwrap_or_default(), cli_version: item.cli_version.unwrap_or_default(), source, diff --git a/codex-rs/thread-store/src/local/list_threads.rs b/codex-rs/thread-store/src/local/list_threads.rs index c51219bcdc..015d35f4df 100644 --- a/codex-rs/thread-store/src/local/list_threads.rs +++ b/codex-rs/thread-store/src/local/list_threads.rs @@ -111,6 +111,10 @@ pub(super) async fn list_threads( } } + if let Some(project_id) = params.project_id.as_ref() { + items.retain(|thread| &thread.project_id == project_id); + } + Ok(ThreadPage { items, next_cursor }) } @@ -181,6 +185,10 @@ async fn list_section_threads( model_providers: params.model_providers.as_deref(), cwd_filters: normalized_cwd_filters.as_deref(), section: Some(Some(section)), + project_id: params + .project_id + .as_ref() + .map(|project_id| project_id.as_deref()), anchor: anchor.as_ref(), sort_key: codex_state::SortKey::SectionPosition, sort_direction: match params.sort_direction { @@ -245,7 +253,7 @@ pub(super) async fn list_rollout_threads( sort_key: codex_rollout::ThreadSortKey, sort_direction: codex_rollout::SortDirection, ) -> ThreadStoreResult { - if params.relation_filter.is_some() || params.section.is_some() { + if params.relation_filter.is_some() || params.section.is_some() || params.project_id.is_some() { let relation_filter = params .relation_filter .map(|relation_filter| match relation_filter { @@ -269,6 +277,7 @@ pub(super) async fn list_rollout_threads( relation_filter, params.archived, params.section.as_ref().map(Option::as_deref), + params.project_id.as_ref().map(Option::as_deref), params.search_term.as_deref(), ) .await @@ -391,6 +400,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: None, relation_filter: None, @@ -452,6 +462,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: Some("needle".to_string()), relation_filter: None, @@ -525,6 +536,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: Some("canonical".to_string()), relation_filter: None, @@ -562,6 +574,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: None, relation_filter: None, @@ -579,6 +592,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: true, search_term: None, relation_filter: None, @@ -632,6 +646,7 @@ mod tests { model_providers: Some(vec!["test-provider".to_string()]), cwd_filters: None, section: None, + project_id: None, archived: false, search_term: None, relation_filter: None, @@ -710,6 +725,7 @@ mod tests { model_providers: None, cwd_filters: None, section: Some(Some(PINNED_THREAD_SECTION_ID.to_owned())), + project_id: None, archived: false, search_term: None, relation_filter: None, @@ -763,6 +779,7 @@ mod tests { model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: false, search_term: None, relation_filter: None, diff --git a/codex-rs/thread-store/src/local/mod.rs b/codex-rs/thread-store/src/local/mod.rs index 78fc188438..39c6de844e 100644 --- a/codex-rs/thread-store/src/local/mod.rs +++ b/codex-rs/thread-store/src/local/mod.rs @@ -8,6 +8,7 @@ mod model_context; mod move_thread_to_section; mod paginated_fork; mod pending_thread_metadata; +mod projects; mod read_thread; mod revert_thread; mod rollout_migration; @@ -48,21 +49,27 @@ use tokio::sync::RwLock; use crate::AppendThreadItemsParams; use crate::ArchiveThreadParams; use crate::ArchiveThreadsParams; +use crate::CreateProjectParams; use crate::CreateThreadParams; use crate::CreateThreadSectionParams; +use crate::CreatedProject; use crate::DeleteThreadParams; use crate::DeleteThreadSectionParams; use crate::DeleteThreadsParams; +use crate::DeletedProject; use crate::ItemPage; use crate::ListItemsParams; +use crate::ListProjectsParams; use crate::ListThreadSectionsParams; use crate::ListThreadsParams; use crate::ListTurnsParams; use crate::LoadThreadHistoryParams; +use crate::MoveProjectParams; use crate::MoveThreadToSectionParams; use crate::PersistContext; use crate::PrepareForkParams; use crate::PreparedFork; +use crate::ProjectMoveOutcome; use crate::ReadThreadByRolloutPathParams; use crate::ReadThreadParams; use crate::RenameThreadSectionParams; @@ -71,6 +78,8 @@ use crate::RevertThreadParams; use crate::SearchThreadOccurrencesParams; use crate::SearchThreadsParams; use crate::StoredModelContext; +use crate::StoredProject; +use crate::StoredProjectsPage; use crate::StoredThread; use crate::StoredThreadHistory; use crate::StoredThreadSection; @@ -84,7 +93,9 @@ use crate::ThreadStoreError; use crate::ThreadStoreFuture; use crate::ThreadStoreResult; use crate::TurnPage; +use crate::UpdateProjectParams; use crate::UpdateThreadMetadataParams; +use crate::UpdatedProject; use crate::local::writer_lock::WriterLockCoordinator; use crate::local::writer_lock::WriterLockGuard; @@ -535,6 +546,43 @@ impl ThreadStore for LocalThreadStore { Box::pin(async move { thread_sections::delete_thread_section(self, params).await }) } + fn supports_projects(&self) -> bool { + self.state_db.is_some() + } + + fn list_projects( + &self, + params: ListProjectsParams, + ) -> ThreadStoreFuture<'_, StoredProjectsPage> { + Box::pin(async move { projects::list_projects(self, params).await }) + } + + fn read_project(&self, project_id: String) -> ThreadStoreFuture<'_, Option> { + Box::pin(async move { projects::read_project(self, project_id).await }) + } + + fn create_project(&self, params: CreateProjectParams) -> ThreadStoreFuture<'_, CreatedProject> { + Box::pin(async move { projects::create_project(self, params).await }) + } + + fn update_project( + &self, + params: UpdateProjectParams, + ) -> ThreadStoreFuture<'_, Option> { + Box::pin(async move { projects::update_project(self, params).await }) + } + + fn move_project( + &self, + params: MoveProjectParams, + ) -> ThreadStoreFuture<'_, Option> { + Box::pin(async move { projects::move_project(self, params).await }) + } + + fn delete_project(&self, project_id: String) -> ThreadStoreFuture<'_, Option> { + Box::pin(async move { projects::delete_project(self, project_id).await }) + } + fn supports_paginated_history_lists(&self) -> bool { self.state_db.is_some() } diff --git a/codex-rs/thread-store/src/local/pending_thread_metadata_tests.rs b/codex-rs/thread-store/src/local/pending_thread_metadata_tests.rs index 4cc4d040b2..6811a0b3af 100644 --- a/codex-rs/thread-store/src/local/pending_thread_metadata_tests.rs +++ b/codex-rs/thread-store/src/local/pending_thread_metadata_tests.rs @@ -30,7 +30,6 @@ async fn pending_thread_metadata_is_consumed_by_first_metadata_update() { .stage_pending_thread_metadata(thread_id, pending_patch.clone()) .await .expect("stage pending metadata"); - let live_thread = LiveThread::create(store.clone(), create_thread_params(thread_id)) .await .expect("create live thread"); diff --git a/codex-rs/thread-store/src/local/projects.rs b/codex-rs/thread-store/src/local/projects.rs new file mode 100644 index 0000000000..76406d72b7 --- /dev/null +++ b/codex-rs/thread-store/src/local/projects.rs @@ -0,0 +1,182 @@ +use super::LocalThreadStore; +use crate::CreateProjectParams; +use crate::CreatedProject; +use crate::DeletedProject; +use crate::ListProjectsParams; +use crate::MoveProjectParams; +use crate::ProjectMoveOutcome; +use crate::StoredProject; +use crate::StoredProjectRoot; +use crate::StoredProjectsPage; +use crate::ThreadStoreError; +use crate::ThreadStoreResult; +use crate::UpdateProjectParams; +use crate::UpdatedProject; + +pub(super) async fn list_projects( + store: &LocalThreadStore, + params: ListProjectsParams, +) -> ThreadStoreResult { + let state = state(store)?; + let has_cursor = params.cursor.is_some(); + let page = state + .list_projects(params.cursor.as_deref(), params.limit) + .await + .map_err(|error| { + if has_cursor && error.to_string().starts_with("invalid project cursor:") { + ThreadStoreError::InvalidRequest { + message: error.to_string(), + } + } else { + internal(error) + } + })?; + Ok(StoredProjectsPage { + projects: page.projects.into_iter().map(stored_project).collect(), + next_cursor: page.next_cursor, + }) +} + +pub(super) async fn read_project( + store: &LocalThreadStore, + project_id: String, +) -> ThreadStoreResult> { + state(store)? + .get_project(&project_id) + .await + .map(|project| project.map(stored_project)) + .map_err(internal) +} + +pub(super) async fn create_project( + store: &LocalThreadStore, + params: CreateProjectParams, +) -> ThreadStoreResult { + state(store)? + .create_project( + params.name, + params.roots.into_iter().map(state_root).collect(), + params.metadata, + ¶ms.thread_ids, + ¶ms.idempotency_key, + ) + .await + .map(|created| CreatedProject { + project: stored_project(created.project), + created: created.created, + }) + .map_err(project_idempotency_error) +} + +pub(super) async fn update_project( + store: &LocalThreadStore, + params: UpdateProjectParams, +) -> ThreadStoreResult> { + state(store)? + .update_project( + ¶ms.project_id, + params.name, + params + .roots + .map(|roots| roots.into_iter().map(state_root).collect()), + params.metadata, + ) + .await + .map(|result| { + result.map(|(project, changed)| UpdatedProject { + project: stored_project(project), + changed, + }) + }) + .map_err(internal) +} + +pub(super) async fn move_project( + store: &LocalThreadStore, + params: MoveProjectParams, +) -> ThreadStoreResult> { + state(store)? + .move_project(¶ms.project_id, params.before_project_id.as_deref()) + .await + .map(|result| { + result.map(|changed| { + if changed { + ProjectMoveOutcome::Moved + } else { + ProjectMoveOutcome::Unchanged + } + }) + }) + .map_err(|error| { + let message = error.to_string(); + if message.starts_with("before project ") + || message.starts_with("project ") && message.contains("cannot be moved") + { + ThreadStoreError::InvalidRequest { message } + } else { + internal(message) + } + }) +} + +pub(super) async fn delete_project( + store: &LocalThreadStore, + project_id: String, +) -> ThreadStoreResult> { + state(store)? + .delete_project(&project_id) + .await + .map(|result| { + result.map( + |(affected_active_thread_ids, affected_archived_thread_ids)| DeletedProject { + affected_active_thread_ids, + affected_archived_thread_ids, + }, + ) + }) + .map_err(internal) +} + +fn state(store: &LocalThreadStore) -> ThreadStoreResult<&codex_rollout::StateDbHandle> { + store + .state_db + .as_ref() + .ok_or(ThreadStoreError::Unsupported { + operation: "projects", + }) +} + +fn internal(error: impl std::fmt::Display) -> ThreadStoreError { + ThreadStoreError::Internal { + message: error.to_string(), + } +} + +fn project_idempotency_error(error: impl std::fmt::Display) -> ThreadStoreError { + let message = error.to_string(); + if message.starts_with("idempotency key refers to deleted project:") { + ThreadStoreError::InvalidRequest { message } + } else { + internal(message) + } +} + +fn state_root(root: StoredProjectRoot) -> codex_state::ProjectRoot { + codex_state::ProjectRoot { path: root.path } +} + +fn stored_project(project: codex_state::Project) -> StoredProject { + StoredProject { + id: project.id, + name: project.name, + roots: project + .roots + .into_iter() + .map(|root| StoredProjectRoot { path: root.path }) + .collect(), + metadata: project.metadata, + position: project.position, + created_at_ms: project.created_at_ms, + updated_at_ms: project.updated_at_ms, + } +} diff --git a/codex-rs/thread-store/src/local/read_thread.rs b/codex-rs/thread-store/src/local/read_thread.rs index 4b84ebfbaf..a28269d7f5 100644 --- a/codex-rs/thread-store/src/local/read_thread.rs +++ b/codex-rs/thread-store/src/local/read_thread.rs @@ -65,6 +65,7 @@ pub(super) async fn read_thread( if thread.name.is_some() { rollout_thread.name = thread.name; } + rollout_thread.project_id = thread.project_id; rollout_thread.git_info = thread.git_info; rollout_thread.permission_profile = permission_profile_from_metadata_value( &metadata_sandbox_policy, @@ -139,6 +140,7 @@ pub(super) async fn read_thread_by_rollout_path( thread.section = metadata.section; thread.section_position = metadata.section_position; thread.section_entered_at = metadata.section_entered_at; + thread.project_id = metadata.project_id; if !metadata.cwd.as_os_str().is_empty() && resolve_requested_rollout_path(store, metadata.rollout_path.clone()) .await @@ -380,6 +382,7 @@ pub(super) fn stored_thread_from_state_metadata( section: metadata.section, section_position: metadata.section_position, section_entered_at: metadata.section_entered_at, + project_id: metadata.project_id, cwd: metadata.cwd, cli_version: metadata.cli_version, source: parse_session_source(&metadata.source), @@ -478,6 +481,7 @@ fn stored_thread_from_meta_line( section: None, section_position: None, section_entered_at: None, + project_id: None, cwd: meta_line.meta.cwd, cli_version: meta_line.meta.cli_version, source: meta_line.meta.source, diff --git a/codex-rs/thread-store/src/local/search_threads.rs b/codex-rs/thread-store/src/local/search_threads.rs index 35b9aee9da..8b8ded8e67 100644 --- a/codex-rs/thread-store/src/local/search_threads.rs +++ b/codex-rs/thread-store/src/local/search_threads.rs @@ -100,6 +100,7 @@ pub(super) async fn search_threads( model_providers: None, cwd_filters: None, section: None, + project_id: None, archived: params.archived, search_term: None, relation_filter: None, diff --git a/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs b/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs index b32aae7d3d..5a175dda36 100644 --- a/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs +++ b/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs @@ -169,6 +169,7 @@ async fn split_homes_support_backfill_listing_and_paginated_history() { search_term: None, relation_filter: None, section: None, + project_id: None, use_state_db_only: true, }) .await diff --git a/codex-rs/thread-store/src/local/update_thread_metadata.rs b/codex-rs/thread-store/src/local/update_thread_metadata.rs index 61e6b9c1b6..b4812cb2c7 100644 --- a/codex-rs/thread-store/src/local/update_thread_metadata.rs +++ b/codex-rs/thread-store/src/local/update_thread_metadata.rs @@ -46,6 +46,11 @@ pub(super) async fn update_thread_metadata( merged_patch.merge(patch); patch = merged_patch; } + if patch.project_id.is_some() && store.state_db().await.is_none() { + return Err(ThreadStoreError::Unsupported { + operation: "projects", + }); + } if patch.is_empty() { return read_thread::read_thread( store, @@ -312,6 +317,22 @@ async fn apply_metadata_update( .map_err(|err| ThreadStoreError::Internal { message: format!("failed to read thread metadata for {thread_id}: {err}"), })?; + let project_id = if existing.is_none() + && let Some(Some(project_id)) = patch.project_id.as_ref() + && state_db + .get_project(project_id) + .await + .map_err(|err| ThreadStoreError::Internal { + message: format!( + "failed to read initial thread project for {thread_id}: {err}" + ), + })? + .is_none() + { + Some(None) + } else { + patch.project_id.clone() + }; let advance_recency_at = patch.advance_recency_at; if existing.is_none() && rollout_path.is_none() { let resolved = if include_archived { @@ -425,12 +446,49 @@ async fn apply_metadata_update( metadata.git_branch = branch; metadata.git_origin_url = origin_url; } - state_db - .upsert_thread(&metadata) - .await - .map_err(|err| ThreadStoreError::Internal { + if let Some(project_id) = project_id.as_ref() { + metadata.project_id = project_id.clone(); + } + let upsert_result = state_db.upsert_thread(&metadata).await; + if existing.is_none() + && metadata.project_id.is_some() + && matches!(&upsert_result, Err(err) if err.to_string().contains("FOREIGN KEY constraint failed")) + { + metadata.project_id = None; + state_db.upsert_thread(&metadata).await.map_err(|err| { + ThreadStoreError::Internal { + message: format!("failed to update thread metadata for {thread_id}: {err}"), + } + })?; + } else { + upsert_result.map_err(|err| ThreadStoreError::Internal { message: format!("failed to update thread metadata for {thread_id}: {err}"), })?; + } + if existing.is_some() + && let Some(project_id) = project_id.as_ref() + { + state_db + .set_thread_project(&thread_id.to_string(), project_id.as_deref()) + .await + .map_err(|err| { + let message = err.to_string(); + if message.contains("project not found") { + ThreadStoreError::InvalidRequest { message } + } else { + ThreadStoreError::Internal { + message: format!( + "failed to update thread project for {thread_id}: {err}" + ), + } + } + })? + .ok_or_else(|| ThreadStoreError::Internal { + message: format!( + "thread metadata unavailable before project update: {thread_id}" + ), + })?; + } if let Some(name) = patch.name.as_ref() { let history_mode = history_mode.ok_or_else(|| ThreadStoreError::Internal { message: format!( @@ -595,8 +653,9 @@ fn sqlite_write_failure_should_block(patch: &ThreadMetadataPatch) -> bool { // transcript-derived metadata, thread names, and memory-mode indexing were log-only. Keep that // failure isolation so a corrupted optional state DB does not make JSONL transcript durability // look broken. Explicit git-only updates still require SQLite because partial git patches need - // the existing SQLite value to preserve unspecified fields. - patch.git_info.is_some() && !has_observed_metadata_facts(patch) + // the existing SQLite value to preserve unspecified fields. Project updates always require + // SQLite because assignment only exists in the state database. + patch.project_id.is_some() || (patch.git_info.is_some() && !has_observed_metadata_facts(patch)) } fn sqlite_write_error_is_best_effort(err: &ThreadStoreError) -> bool { @@ -926,6 +985,7 @@ mod tests { model_providers: None, cwd_filters: None, section: Some(Some(codex_state::PINNED_THREAD_SECTION_ID.to_string())), + project_id: None, archived: false, search_term: None, relation_filter: None, @@ -2090,6 +2150,7 @@ mod tests { model_providers: Some(Vec::new()), cwd_filters: Some(vec![workspace]), section: None, + project_id: None, archived: false, search_term: None, relation_filter: None, diff --git a/codex-rs/thread-store/src/projects.rs b/codex-rs/thread-store/src/projects.rs new file mode 100644 index 0000000000..695e8f8ee3 --- /dev/null +++ b/codex-rs/thread-store/src/projects.rs @@ -0,0 +1,76 @@ +use std::collections::BTreeMap; + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct StoredProjectRoot { + pub path: String, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct StoredProject { + pub id: String, + pub name: String, + pub roots: Vec, + pub metadata: BTreeMap, + pub position: i64, + pub created_at_ms: i64, + pub updated_at_ms: i64, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct StoredProjectsPage { + pub projects: Vec, + pub next_cursor: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ListProjectsParams { + pub cursor: Option, + pub limit: usize, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct CreateProjectParams { + pub name: String, + pub roots: Vec, + pub metadata: BTreeMap, + pub thread_ids: Vec, + pub idempotency_key: String, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct CreatedProject { + pub project: StoredProject, + pub created: bool, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct UpdateProjectParams { + pub project_id: String, + pub name: Option, + pub roots: Option>, + pub metadata: Option>, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct MoveProjectParams { + pub project_id: String, + pub before_project_id: Option, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum ProjectMoveOutcome { + Unchanged, + Moved, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct UpdatedProject { + pub project: StoredProject, + pub changed: bool, +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct DeletedProject { + pub affected_active_thread_ids: Vec, + pub affected_archived_thread_ids: Vec, +} diff --git a/codex-rs/thread-store/src/store.rs b/codex-rs/thread-store/src/store.rs index af2c9a6f08..5cc582c51f 100644 --- a/codex-rs/thread-store/src/store.rs +++ b/codex-rs/thread-store/src/store.rs @@ -7,20 +7,26 @@ use std::pin::Pin; use crate::AppendThreadItemsParams; use crate::ArchiveThreadParams; use crate::ArchiveThreadsParams; +use crate::CreateProjectParams; use crate::CreateThreadParams; use crate::CreateThreadSectionParams; +use crate::CreatedProject; use crate::DeleteThreadParams; use crate::DeleteThreadSectionParams; use crate::DeleteThreadsParams; +use crate::DeletedProject; use crate::ItemPage; use crate::ListItemsParams; +use crate::ListProjectsParams; use crate::ListThreadSectionsParams; use crate::ListThreadsParams; use crate::ListTurnsParams; use crate::LoadThreadHistoryParams; +use crate::MoveProjectParams; use crate::MoveThreadToSectionParams; use crate::PrepareForkParams; use crate::PreparedFork; +use crate::ProjectMoveOutcome; use crate::ReadThreadByRolloutPathParams; use crate::ReadThreadParams; use crate::RenameThreadSectionParams; @@ -29,6 +35,8 @@ use crate::RevertThreadParams; use crate::SearchThreadOccurrencesParams; use crate::SearchThreadsParams; use crate::StoredModelContext; +use crate::StoredProject; +use crate::StoredProjectsPage; use crate::StoredThread; use crate::StoredThreadHistory; use crate::StoredThreadSection; @@ -40,7 +48,9 @@ use crate::ThreadSearchPage; use crate::ThreadStoreError; use crate::ThreadStoreResult; use crate::TurnPage; +use crate::UpdateProjectParams; use crate::UpdateThreadMetadataParams; +use crate::UpdatedProject; /// Future returned by [`ThreadStore`] operations. pub type ThreadStoreFuture<'a, T> = Pin> + Send + 'a>>; @@ -241,6 +251,71 @@ pub trait ThreadStore: Any + Send + Sync { }) } + /// Whether this store supports durable host-owned projects. + fn supports_projects(&self) -> bool { + false + } + + fn list_projects( + &self, + _params: ListProjectsParams, + ) -> ThreadStoreFuture<'_, StoredProjectsPage> { + Box::pin(async { + Err(ThreadStoreError::Unsupported { + operation: "project/list", + }) + }) + } + + fn read_project(&self, _project_id: String) -> ThreadStoreFuture<'_, Option> { + Box::pin(async { + Err(ThreadStoreError::Unsupported { + operation: "project/read", + }) + }) + } + + fn create_project( + &self, + _params: CreateProjectParams, + ) -> ThreadStoreFuture<'_, CreatedProject> { + Box::pin(async { + Err(ThreadStoreError::Unsupported { + operation: "project/create", + }) + }) + } + + fn update_project( + &self, + _params: UpdateProjectParams, + ) -> ThreadStoreFuture<'_, Option> { + Box::pin(async { + Err(ThreadStoreError::Unsupported { + operation: "project/update", + }) + }) + } + + fn move_project( + &self, + _params: MoveProjectParams, + ) -> ThreadStoreFuture<'_, Option> { + Box::pin(async { + Err(ThreadStoreError::Unsupported { + operation: "project/move", + }) + }) + } + + fn delete_project(&self, _project_id: String) -> ThreadStoreFuture<'_, Option> { + Box::pin(async { + Err(ThreadStoreError::Unsupported { + operation: "project/delete", + }) + }) + } + /// Whether paginated threads can hydrate durable history through turn and item lists. fn supports_paginated_history_lists(&self) -> bool { false diff --git a/codex-rs/thread-store/src/thread_metadata_sync.rs b/codex-rs/thread-store/src/thread_metadata_sync.rs index 81dca9b000..d85dd3f7da 100644 --- a/codex-rs/thread-store/src/thread_metadata_sync.rs +++ b/codex-rs/thread-store/src/thread_metadata_sync.rs @@ -429,8 +429,41 @@ mod tests { use pretty_assertions::assert_eq; use super::*; + use crate::CreateThreadParams; use crate::ThreadPersistenceMetadata; + #[tokio::test] + async fn create_without_project_omits_project_patch() { + let thread_id = ThreadId::new(); + let sync = ThreadMetadataSync::for_create(&CreateThreadParams { + session_id: thread_id.into(), + thread_id, + extra_config: None, + forked_from_id: None, + parent_thread_id: None, + source: SessionSource::Exec, + thread_source: None, + originator: "test_originator".to_string(), + base_instructions: codex_protocol::models::BaseInstructions::default(), + dynamic_tools: Vec::new(), + selected_capability_roots: Vec::new(), + multi_agent_version: None, + history_mode: ThreadHistoryMode::Legacy, + history_base: None, + subagent_history_start_ordinal: None, + initial_window_id: uuid::Uuid::now_v7().to_string(), + metadata: ThreadPersistenceMetadata { + cwd: None, + model_provider: "test-provider".to_string(), + memory_mode: ThreadMemoryMode::Enabled, + }, + }) + .await; + + let update = sync.take_pending_update().expect("pending metadata update"); + assert_eq!(update.patch.project_id, None); + } + #[test] fn resume_history_keeps_derived_metadata_pending_until_applied() { let thread_id = ThreadId::new(); diff --git a/codex-rs/thread-store/src/types.rs b/codex-rs/thread-store/src/types.rs index d129d7e65e..192e6bed6e 100644 --- a/codex-rs/thread-store/src/types.rs +++ b/codex-rs/thread-store/src/types.rs @@ -314,6 +314,9 @@ pub struct ListThreadsParams { /// Omit to include every section, set to `None` to match unsectioned /// threads, or provide a section ID to match that section. pub section: Option>, + /// Omit to include every project, set to None for unassigned threads, + /// or provide a project ID to match that project. + pub project_id: ClearableField, /// Whether archived threads should be listed instead of active threads. pub archived: bool, /// Optional substring/full-text search term for thread title/preview. @@ -584,6 +587,9 @@ pub struct StoredThread { /// The time when the thread most recently entered its current section. #[serde(default)] pub section_entered_at: Option>, + /// Canonical project assignment owned by app-server, if any. + #[serde(default)] + pub project_id: Option, /// Working directory captured for the thread. pub cwd: PathBuf, /// CLI version captured for the thread. @@ -744,6 +750,13 @@ pub struct ThreadMetadataPatch { pub git_info: Option, /// Thread memory behavior. pub memory_mode: Option, + /// Initial project assignment supplied with thread creation. + #[serde( + default, + skip_serializing_if = "Option::is_none", + with = "optional_option" + )] + pub project_id: ClearableField, } impl ThreadMetadataPatch { @@ -824,6 +837,9 @@ impl ThreadMetadataPatch { if next.memory_mode.is_some() { self.memory_mode = next.memory_mode; } + if next.project_id.is_some() { + self.project_id = next.project_id; + } } pub fn is_empty(&self) -> bool { @@ -850,6 +866,7 @@ impl ThreadMetadataPatch { && self.first_user_message.is_none() && self.git_info.is_none() && self.memory_mode.is_none() + && self.project_id.is_none() } } diff --git a/codex-rs/tui/src/app/agent_picker.rs b/codex-rs/tui/src/app/agent_picker.rs index 5b7b3be55c..52ed4e8b8f 100644 --- a/codex-rs/tui/src/app/agent_picker.rs +++ b/codex-rs/tui/src/app/agent_picker.rs @@ -45,6 +45,7 @@ impl App { source_kinds: Some(vec![ThreadSourceKind::SubAgentThreadSpawn]), archived: None, section_id: None, + project_id: None, cwd: None, use_state_db_only: true, search_term: None, diff --git a/codex-rs/tui/src/app/app_server_event_targets.rs b/codex-rs/tui/src/app/app_server_event_targets.rs index e67a386644..c22f205071 100644 --- a/codex-rs/tui/src/app/app_server_event_targets.rs +++ b/codex-rs/tui/src/app/app_server_event_targets.rs @@ -59,6 +59,9 @@ pub(super) fn server_notification_thread_target( ServerNotification::ThreadNameUpdated(notification) => { Some(notification.thread_id.as_str()) } + ServerNotification::ThreadProjectUpdated(notification) => { + Some(notification.thread_id.as_str()) + } ServerNotification::ThreadTokenUsageUpdated(notification) => { Some(notification.thread_id.as_str()) } @@ -168,7 +171,8 @@ pub(super) fn server_notification_thread_target( None => return ServerNotificationThreadTarget::AppScoped, } } - ServerNotification::SkillsChanged(_) + ServerNotification::ProjectChanged(_) + | ServerNotification::SkillsChanged(_) | ServerNotification::McpServerOauthLoginCompleted(_) | ServerNotification::AccountUpdated(_) | ServerNotification::AccountRateLimitsUpdated(_) diff --git a/codex-rs/tui/src/app/loaded_threads.rs b/codex-rs/tui/src/app/loaded_threads.rs index 92072c61d2..8bdd92d3ad 100644 --- a/codex-rs/tui/src/app/loaded_threads.rs +++ b/codex-rs/tui/src/app/loaded_threads.rs @@ -144,6 +144,7 @@ mod tests { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 0, diff --git a/codex-rs/tui/src/app/tests.rs b/codex-rs/tui/src/app/tests.rs index 5ce24e40ef..1ef8d49602 100644 --- a/codex-rs/tui/src/app/tests.rs +++ b/codex-rs/tui/src/app/tests.rs @@ -3607,6 +3607,7 @@ async fn inactive_thread_started_notification_initializes_replay_session() -> Re ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "agent-provider".to_string(), created_at: 1, @@ -3705,6 +3706,7 @@ async fn inactive_thread_started_notification_preserves_primary_model_when_path_ ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "agent-provider".to_string(), created_at: 1, @@ -3770,6 +3772,7 @@ async fn thread_read_session_state_does_not_reuse_primary_permission_profile() { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "read-provider".to_string(), created_at: 1, diff --git a/codex-rs/tui/src/app/thread_session_state.rs b/codex-rs/tui/src/app/thread_session_state.rs index c90c8a7f3e..dfcc340800 100644 --- a/codex-rs/tui/src/app/thread_session_state.rs +++ b/codex-rs/tui/src/app/thread_session_state.rs @@ -419,6 +419,7 @@ mod tests { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "read-provider".to_string(), created_at: 1, diff --git a/codex-rs/tui/src/app_server_session.rs b/codex-rs/tui/src/app_server_session.rs index 2c10b3d8e0..bb1da4bc59 100644 --- a/codex-rs/tui/src/app_server_session.rs +++ b/codex-rs/tui/src/app_server_session.rs @@ -958,6 +958,7 @@ impl AppServerSession { request_id, params: ThreadMetadataUpdateParams { thread_id: thread_id.to_string(), + project_id: None, git_info: Some(ThreadMetadataGitInfoUpdateParams { sha: None, branch: Some(Some(branch)), @@ -3164,6 +3165,7 @@ mod tests { ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: "openai".to_string(), created_at: 1, diff --git a/codex-rs/tui/src/chatwidget/protocol.rs b/codex-rs/tui/src/chatwidget/protocol.rs index 430516ca4d..9619a2f935 100644 --- a/codex-rs/tui/src/chatwidget/protocol.rs +++ b/codex-rs/tui/src/chatwidget/protocol.rs @@ -231,7 +231,9 @@ impl ChatWidget { | ServerNotification::ThreadRealtimeTranscriptDone(_) | ServerNotification::WindowsWorldWritableWarning(_) | ServerNotification::WindowsSandboxSetupCompleted(_) - | ServerNotification::AccountLoginCompleted(_) => {} + | ServerNotification::AccountLoginCompleted(_) + | ServerNotification::ProjectChanged(_) + | ServerNotification::ThreadProjectUpdated(_) => {} ServerNotification::ContextCompacted(_) => {} } self.thread_usage.replaying_turn_completion = was_replaying_turn_completion; diff --git a/codex-rs/tui/src/lib.rs b/codex-rs/tui/src/lib.rs index f8a9734729..0ead6b4b90 100644 --- a/codex-rs/tui/src/lib.rs +++ b/codex-rs/tui/src/lib.rs @@ -732,6 +732,7 @@ fn latest_session_lookup_params( source_kinds: Some(resume_source_kinds(include_non_interactive)), archived: Some(false), section_id: None, + project_id: None, parent_thread_id: None, ancestor_thread_id: None, cwd: cwd_filter.map(|cwd| ThreadListCwdFilter::One(cwd.to_string_lossy().to_string())), diff --git a/codex-rs/tui/src/named_session_lookup.rs b/codex-rs/tui/src/named_session_lookup.rs index 1fbadade78..df0b13dd53 100644 --- a/codex-rs/tui/src/named_session_lookup.rs +++ b/codex-rs/tui/src/named_session_lookup.rs @@ -279,6 +279,7 @@ impl<'a> NamedSessionCandidates<'a> { )), archived: Some(self.collection == SessionCollection::Archived), section_id: None, + project_id: None, parent_thread_id: None, ancestor_thread_id: None, cwd: None, diff --git a/codex-rs/tui/src/resume_picker.rs b/codex-rs/tui/src/resume_picker.rs index 9affc853ce..a7be3d42c4 100644 --- a/codex-rs/tui/src/resume_picker.rs +++ b/codex-rs/tui/src/resume_picker.rs @@ -1994,6 +1994,7 @@ fn thread_list_params( source_kinds: Some(crate::resume_source_kinds(include_non_interactive)), archived: Some(status == SessionStatus::Archived), section_id: None, + project_id: None, parent_thread_id: None, ancestor_thread_id: None, cwd: cwd_filter.map(|cwd| ThreadListCwdFilter::One(cwd.to_string_lossy().into_owned())), @@ -6253,6 +6254,7 @@ session_picker_view = "dense" ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: String::from("openai"), created_at: 1, @@ -6294,6 +6296,7 @@ session_picker_view = "dense" ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: String::from("openai"), created_at: 1, @@ -6373,6 +6376,7 @@ session_picker_view = "dense" ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: String::from("openai"), created_at: 1, @@ -6445,6 +6449,7 @@ session_picker_view = "dense" ephemeral: false, section: None, section_entered_at: None, + project_id: None, history_mode: Default::default(), model_provider: String::from("openai"), created_at: 1,