@curie-agent/core 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/reminder-parser.d.ts +6 -0
- package/dist/src/reminder-parser.d.ts.map +1 -1
- package/dist/src/reminder-parser.js +85 -105
- package/dist/src/reminder-parser.js.map +1 -1
- package/dist/src/task-manager.d.ts +53 -12
- package/dist/src/task-manager.d.ts.map +1 -1
- package/dist/src/task-manager.js +225 -124
- package/dist/src/task-manager.js.map +1 -1
- package/dist/src/task-migration.d.ts +29 -2
- package/dist/src/task-migration.d.ts.map +1 -1
- package/dist/src/task-migration.js +115 -7
- package/dist/src/task-migration.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Migration
|
|
3
|
-
*
|
|
2
|
+
* Migration utilities.
|
|
3
|
+
*
|
|
4
|
+
* - `migrateTasks()` — one-shot merge of legacy todo.json + cron.json into tasks.json.
|
|
5
|
+
* - `repairTaskShapes()` — idempotent in-place fix-up of tasks written by older
|
|
6
|
+
* versions, run on every startup.
|
|
4
7
|
*/
|
|
5
|
-
import { readFileSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { existsSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
6
9
|
import { homedir } from 'node:os';
|
|
7
10
|
import { join } from 'node:path';
|
|
8
11
|
import { taskTimestamp } from './unified-task.js';
|
|
@@ -81,8 +84,10 @@ export function migrateTasks(oldTodoPath, oldCronPath, newTasksPath) {
|
|
|
81
84
|
}
|
|
82
85
|
const newFile = { $schema: 'tasks.schema.json', version: 1, tasks: [] };
|
|
83
86
|
let order = 0;
|
|
84
|
-
// Migrate todo.json → human tasks
|
|
85
|
-
|
|
87
|
+
// Migrate todo.json → human tasks.
|
|
88
|
+
// An explicit path replaces the home default rather than adding to it —
|
|
89
|
+
// otherwise every caller (including tests) also pulls in the user's personal store.
|
|
90
|
+
const todoPaths = oldTodoPath ? [oldTodoPath] : [join(homedir(), '.curie-agent', 'todo.json')];
|
|
86
91
|
for (const filePath of todoPaths) {
|
|
87
92
|
const legacy = readLegacyTodo(filePath);
|
|
88
93
|
if (!legacy)
|
|
@@ -107,8 +112,8 @@ export function migrateTasks(oldTodoPath, oldCronPath, newTasksPath) {
|
|
|
107
112
|
});
|
|
108
113
|
}
|
|
109
114
|
}
|
|
110
|
-
// Migrate cron.json →
|
|
111
|
-
const cronPaths = [oldCronPath
|
|
115
|
+
// Migrate cron.json → agent/notify tasks
|
|
116
|
+
const cronPaths = oldCronPath ? [oldCronPath] : [join(homedir(), '.curie-agent', 'cron.json')];
|
|
112
117
|
for (const filePath of cronPaths) {
|
|
113
118
|
const legacy = readLegacyCron(filePath);
|
|
114
119
|
if (!legacy)
|
|
@@ -141,4 +146,107 @@ export function migrateTasks(oldTodoPath, oldCronPath, newTasksPath) {
|
|
|
141
146
|
writeFileSync(target, JSON.stringify(newFile, null, 2), 'utf-8');
|
|
142
147
|
return newFile;
|
|
143
148
|
}
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
// Shape repair (idempotent, runs on every startup)
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
/** Legacy mode names → current TaskMode. */
|
|
153
|
+
const MODE_ALIASES = {
|
|
154
|
+
auto: 'agent',
|
|
155
|
+
manual: 'human',
|
|
156
|
+
};
|
|
157
|
+
const VALID_STATUSES = [
|
|
158
|
+
'backlog', 'todo', 'in_progress', 'done', 'canceled', 'pending', 'executing', 'completed', 'failed',
|
|
159
|
+
];
|
|
160
|
+
const VALID_PRIORITIES = ['low', 'medium', 'high', 'critical'];
|
|
161
|
+
/**
|
|
162
|
+
* Repair tasks written by older versions, in place.
|
|
163
|
+
*
|
|
164
|
+
* Two shapes exist in real stores and neither can ever fire:
|
|
165
|
+
* - `mode: 'auto'` — renamed to `'agent'`. `normalizeTask()` in the Todo tool
|
|
166
|
+
* coerces unrecognised modes to `'human'`, which silently demoted scheduled
|
|
167
|
+
* tasks into inert todo-list items.
|
|
168
|
+
* - a scheduled `agent`/`notify` task sitting on `status: 'todo'` — the
|
|
169
|
+
* scheduler only ever looks at `'pending'`.
|
|
170
|
+
*
|
|
171
|
+
* Unknown modes are reported, not rewritten — a silent coercion is what caused
|
|
172
|
+
* the original data loss.
|
|
173
|
+
*/
|
|
174
|
+
export function repairTaskShapes(tasksPath) {
|
|
175
|
+
const target = tasksPath ?? join(homedir(), '.curie-agent', 'tasks.json');
|
|
176
|
+
if (!existsSync(target))
|
|
177
|
+
return null;
|
|
178
|
+
let file;
|
|
179
|
+
try {
|
|
180
|
+
const parsed = JSON.parse(readFileSync(target, 'utf-8'));
|
|
181
|
+
if (typeof parsed !== 'object' || parsed === null || !Array.isArray(parsed.tasks))
|
|
182
|
+
return null;
|
|
183
|
+
file = parsed;
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
return null; // corrupt — leave it for a human to look at
|
|
187
|
+
}
|
|
188
|
+
const report = { modesRenamed: 0, statusesFixed: 0, fieldsFilled: 0, unknownModes: [] };
|
|
189
|
+
const knownModes = ['human', 'agent', 'notify'];
|
|
190
|
+
file.tasks.forEach((task, index) => {
|
|
191
|
+
const raw = task;
|
|
192
|
+
// --- mode ---------------------------------------------------------
|
|
193
|
+
const rawMode = typeof raw.mode === 'string' ? raw.mode : '';
|
|
194
|
+
const alias = MODE_ALIASES[rawMode];
|
|
195
|
+
if (alias) {
|
|
196
|
+
task.mode = alias;
|
|
197
|
+
report.modesRenamed++;
|
|
198
|
+
}
|
|
199
|
+
else if (rawMode === '') {
|
|
200
|
+
// Absent mode predates the unified model — those were all todo items.
|
|
201
|
+
task.mode = 'human';
|
|
202
|
+
report.fieldsFilled++;
|
|
203
|
+
}
|
|
204
|
+
else if (!knownModes.includes(rawMode)) {
|
|
205
|
+
if (!report.unknownModes.includes(rawMode))
|
|
206
|
+
report.unknownModes.push(rawMode);
|
|
207
|
+
return; // don't touch a task we don't understand
|
|
208
|
+
}
|
|
209
|
+
// --- required scalars ---------------------------------------------
|
|
210
|
+
if (!VALID_STATUSES.includes(task.status)) {
|
|
211
|
+
task.status = task.mode === 'human' ? 'todo' : 'pending';
|
|
212
|
+
report.fieldsFilled++;
|
|
213
|
+
}
|
|
214
|
+
if (!VALID_PRIORITIES.includes(task.priority)) {
|
|
215
|
+
task.priority = 'medium';
|
|
216
|
+
report.fieldsFilled++;
|
|
217
|
+
}
|
|
218
|
+
if (!Array.isArray(task.tags)) {
|
|
219
|
+
task.tags = [];
|
|
220
|
+
report.fieldsFilled++;
|
|
221
|
+
}
|
|
222
|
+
if (typeof task.order !== 'number') {
|
|
223
|
+
task.order = index;
|
|
224
|
+
report.fieldsFilled++;
|
|
225
|
+
}
|
|
226
|
+
if (typeof task.created_at !== 'string' || !task.created_at) {
|
|
227
|
+
task.created_at = taskTimestamp();
|
|
228
|
+
report.fieldsFilled++;
|
|
229
|
+
}
|
|
230
|
+
if (raw.completed_at === null) {
|
|
231
|
+
delete raw.completed_at;
|
|
232
|
+
report.fieldsFilled++;
|
|
233
|
+
}
|
|
234
|
+
if (raw.frequency === undefined) {
|
|
235
|
+
task.frequency = null;
|
|
236
|
+
report.fieldsFilled++;
|
|
237
|
+
}
|
|
238
|
+
// --- fireability --------------------------------------------------
|
|
239
|
+
// A scheduled agent/notify task must be 'pending' or the checker skips it forever.
|
|
240
|
+
if (task.mode !== 'human' && task.scheduled_at && (task.status === 'todo' || task.status === 'backlog')) {
|
|
241
|
+
task.status = 'pending';
|
|
242
|
+
report.statusesFixed++;
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
if (report.modesRenamed === 0 && report.statusesFixed === 0 && report.fieldsFilled === 0)
|
|
246
|
+
return report;
|
|
247
|
+
const tmpPath = `${target}.tmp`;
|
|
248
|
+
writeFileSync(tmpPath, JSON.stringify(file, null, 2), 'utf-8');
|
|
249
|
+
renameSync(tmpPath, target);
|
|
250
|
+
return report;
|
|
251
|
+
}
|
|
144
252
|
//# sourceMappingURL=task-migration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-migration.js","sourceRoot":"","sources":["../../src/task-migration.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"task-migration.js","sourceRoot":"","sources":["../../src/task-migration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqClD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,qDAAqD;AACrD,SAAS,aAAa,CAAC,MAAc;IACnC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;QACjC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;QAC3B,KAAK,aAAa,CAAC,CAAC,OAAO,aAAa,CAAC;QACzC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;QAC3B,KAAK,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC;QACnC,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC;IACzB,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,SAAS,WAAW,CAAC,IAAY;IAC/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,OAAO,QAAQ,CAAC;QACjC,KAAK,MAAM,CAAC,CAAC,OAAO,OAAO,CAAC;QAC5B,KAAK,WAAW,CAAC,CAAC,OAAO,OAAO,CAAC;QACjC,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,qDAAqD;AACrD,SAAS,aAAa,CAAC,MAAc;IACnC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,OAAO,SAAS,CAAC;QACjC,KAAK,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC,CAAO,mBAAmB;QACtD,KAAK,WAAW,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,kDAAkD;QACtF,KAAK,WAAW,CAAC,CAAC,OAAO,MAAM,CAAC;QAChC,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,CAAC;QACjC,KAAK,WAAW,CAAC,CAAC,OAAO,UAAU,CAAC;QACpC,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAoB,EAAE,WAAoB,EAAE,YAAqB;IAC5F,MAAM,MAAM,GAAG,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAE7E,yCAAyC;IACzC,IAAI,CAAC;QACH,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAc,EAAE,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnF,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,mCAAmC;IACnC,wEAAwE;IACxE,oFAAoF;IACpF,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,MAAM,KAAK,GAAc,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gBAChC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;gBACrC,QAAQ,EAAG,CAAC,CAAC,QAAyB,IAAI,QAAQ;gBAClD,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;gBAClB,IAAI,EAAE,OAAO;gBACb,YAAY,EAAE,SAAS;gBACvB,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,SAAS;gBACjB,KAAK;gBACL,KAAK,EAAE,KAAK,EAAE;gBACd,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,aAAa,EAAE;gBAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;aACzE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/F,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YACnC,mEAAmE;YACnE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAAE,SAAS;YAEpE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,KAAK,EAAE,CAAC,CAAC,OAAO;gBAChB,WAAW,EAAE,EAAE;gBACf,MAAM;gBACN,QAAQ,EAAE,QAAQ;gBAClB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;gBACzB,YAAY,EAAE,CAAC,CAAC,WAAW,IAAI,SAAS;gBACxC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAW,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;gBACxF,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS;gBACzE,KAAK,EAAE,UAAU,EAAM,iCAAiC;gBACxD,KAAK,EAAE,KAAK,EAAE;gBACd,UAAU,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;gBAC/C,YAAY,EAAE,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;aAChG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC,CAAC,qBAAqB;IAE7D,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,4CAA4C;AAC5C,MAAM,YAAY,GAA6B;IAC7C,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,OAAO;CAChB,CAAC;AAaF,MAAM,cAAc,GAA4B;IAC9C,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ;CACpG,CAAC;AACF,MAAM,gBAAgB,GAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAkB;IACjD,MAAM,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAC1E,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,IAAI,IAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAY,CAAC;QACpE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,MAAoB,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9G,IAAI,GAAG,MAAmB,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,4CAA4C;IAC3D,CAAC;IAED,MAAM,MAAM,GAAiB,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACtG,MAAM,UAAU,GAAe,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAE5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACjC,MAAM,GAAG,GAAG,IAA0C,CAAC;QAEvD,qEAAqE;QACrE,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;aAAM,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC1B,sEAAsE;YACtE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACpB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAmB,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9E,OAAO,CAAC,yCAAyC;QACnD,CAAC;QAED,qEAAqE;QACrE,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACzD,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACf,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;YACnB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5D,IAAI,CAAC,UAAU,GAAG,aAAa,EAAE,CAAC;YAClC,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,YAAY,CAAC;YACxB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAED,qEAAqE;QACrE,mFAAmF;QACnF,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YACxG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAExG,MAAM,OAAO,GAAG,GAAG,MAAM,MAAM,CAAC;IAChC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/D,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|