better-auth-elasticsearch 0.2.0 → 0.3.0
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/README.md +22 -9
- package/dist/elasticsearch-adapter.d.ts +11 -0
- package/dist/elasticsearch-adapter.d.ts.map +1 -1
- package/dist/elasticsearch-adapter.js +265 -113
- package/dist/elasticsearch-adapter.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/migrate.d.ts +11 -0
- package/dist/migrate.d.ts.map +1 -1
- package/dist/migrate.js +4 -0
- package/dist/migrate.js.map +1 -1
- package/dist/unique-reservations.d.ts +123 -0
- package/dist/unique-reservations.d.ts.map +1 -0
- package/dist/unique-reservations.js +662 -0
- package/dist/unique-reservations.js.map +1 -0
- package/package.json +2 -2
- package/src/elasticsearch-adapter.ts +338 -124
- package/src/index.ts +1 -0
- package/src/migrate.ts +11 -0
- package/src/unique-reservations.ts +912 -0
package/README.md
CHANGED
|
@@ -53,6 +53,7 @@ Indices are created on first use.
|
|
|
53
53
|
| `numberOfShards` | `1` | Primary shards per index. |
|
|
54
54
|
| `numberOfReplicas` | `0` | Replicas per index. |
|
|
55
55
|
| `debugLogs` | `false` | Better Auth adapter debug logging. |
|
|
56
|
+
| `skipUniqueFor` | `["session.token"]` | Unique fields left unenforced, as `"model.field"`. Replaces the default. |
|
|
56
57
|
|
|
57
58
|
### Refresh
|
|
58
59
|
|
|
@@ -103,7 +104,7 @@ npx auth generate --output elasticsearch-mappings.json
|
|
|
103
104
|
```ts
|
|
104
105
|
import { migrate } from "better-auth-elasticsearch";
|
|
105
106
|
|
|
106
|
-
const { migrated } = await migrate(auth);
|
|
107
|
+
const { migrated, duplicates } = await migrate(auth);
|
|
107
108
|
```
|
|
108
109
|
|
|
109
110
|
For each model whose field types changed, `migrate()` creates the next index
|
|
@@ -114,6 +115,10 @@ instead of failing. A value that cannot be converted rolls the migration back.
|
|
|
114
115
|
The old index is kept for rollback; pass `{ deleteOldIndices: true }` to remove
|
|
115
116
|
it. Running `migrate()` again is safe.
|
|
116
117
|
|
|
118
|
+
`migrate()` also reserves the unique values of rows written before they were
|
|
119
|
+
enforced (see [Caveats](#caveats)). `duplicates` lists values that several
|
|
120
|
+
rows already share, by row id; resolve those by hand.
|
|
121
|
+
|
|
117
122
|
## Purging expired rows
|
|
118
123
|
|
|
119
124
|
Better Auth does not delete expired sessions on its own. Call `purgeExpired()`
|
|
@@ -127,14 +132,22 @@ const { session, verification } = await purgeExpired(auth);
|
|
|
127
132
|
|
|
128
133
|
`migrate()` and `purgeExpired()` work in plain Node scripts.
|
|
129
134
|
|
|
130
|
-
##
|
|
131
|
-
|
|
132
|
-
- **
|
|
133
|
-
|
|
134
|
-
- **
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
135
|
+
## Caveats
|
|
136
|
+
|
|
137
|
+
- **Ids are strings.** Elasticsearch has no auto-increment, so Better Auth's
|
|
138
|
+
numeric id option (`generateId: "serial"`) cannot be used.
|
|
139
|
+
- **No transactions.** Elasticsearch has none, so Better Auth runs multi-step
|
|
140
|
+
operations one write at a time. If one fails midway, earlier writes stay.
|
|
141
|
+
- **Unique fields are reserved.** Each value of a `unique` field, such as
|
|
142
|
+
`email`, is reserved in a `<alias>_unique` index, so concurrent requests
|
|
143
|
+
cannot both take it. Unique indexes are covered too, including compound
|
|
144
|
+
ones, which reserve each combination of values. Values are compared exactly
|
|
145
|
+
as stored. A value left reserved by a crashed write is freed after two
|
|
146
|
+
minutes. Fields listed in `skipUniqueFor` are not enforced; name a
|
|
147
|
+
compound index as `"model.fieldA+fieldB"`. Run `migrate()` once to reserve rows
|
|
148
|
+
written by an earlier version.
|
|
149
|
+
- **Joins work**, through Better Auth's follow-up queries, since Elasticsearch
|
|
150
|
+
has no joins of its own.
|
|
138
151
|
|
|
139
152
|
## Contributing
|
|
140
153
|
|
|
@@ -34,6 +34,17 @@ export interface ElasticsearchAdapterConfig {
|
|
|
34
34
|
numberOfShards?: number;
|
|
35
35
|
/** Replicas of each index the adapter creates (default 0). */
|
|
36
36
|
numberOfReplicas?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Unique fields left unenforced, as `"model.field"` in better-auth schema
|
|
39
|
+
* names, or `"model.fieldA+fieldB"` for a unique index over several fields,
|
|
40
|
+
* in index order (default `["session.token"]`: the token is random, and
|
|
41
|
+
* reserving it would slow every sign-in). A list given here replaces the
|
|
42
|
+
* default, so include `"session.token"` to keep skipping it. Every other
|
|
43
|
+
* field the schema declares unique, and every unique index, gets a
|
|
44
|
+
* reservation per value, which costs an extra request per write that sets
|
|
45
|
+
* or frees one.
|
|
46
|
+
*/
|
|
47
|
+
skipUniqueFor?: string[];
|
|
37
48
|
}
|
|
38
49
|
/**
|
|
39
50
|
* A better-auth database adapter that stores each model in Elasticsearch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elasticsearch-adapter.d.ts","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAEL,KAAK,uBAAuB,EAC5B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"elasticsearch-adapter.d.ts","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAW,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAEL,KAAK,uBAAuB,EAC5B,oBAAoB,EACrB,MAAM,sBAAsB,CAAC;AAiC9B,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IACnC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAmDD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,0BAA0B,KACjC,UAAU,CAAC,OAAO,oBAAoB,CAo2BxC,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { createAdapterFactory, } from "better-auth/adapters";
|
|
|
3
3
|
import { isNotFound, isVersionConflict, isWriteBlocked, retryOnContention, wait, waitOutWriteBlock, withElasticsearchRetry, writeBlockWaiter, } from "./elasticsearch-client.js";
|
|
4
4
|
import { ensureAliasedIndex, expectedMappings, expectedProperties, migrateAliasedIndex, } from "./index-layout.js";
|
|
5
5
|
import { MIGRATOR } from "./migrate.js";
|
|
6
|
+
import { createReservations, duplicateError, } from "./unique-reservations.js";
|
|
6
7
|
import { whereToQuery } from "./where-to-query.js";
|
|
7
8
|
/**
|
|
8
9
|
* How often a single-row atomic write searches again after losing a race.
|
|
@@ -73,6 +74,14 @@ export const elasticsearchAdapter = (config) => {
|
|
|
73
74
|
const client = config.client;
|
|
74
75
|
const withRetry = (operation) => withElasticsearchRetry(operation, maxRetries);
|
|
75
76
|
const whileMigrating = (index, operation) => waitOutWriteBlock(writeBlockTimeoutMs, index, operation);
|
|
77
|
+
const reservations = createReservations({
|
|
78
|
+
client,
|
|
79
|
+
schema,
|
|
80
|
+
getDefaultModelName,
|
|
81
|
+
skipUniqueFor: config.skipUniqueFor ?? ["session.token"],
|
|
82
|
+
settings: indexSettings,
|
|
83
|
+
withRetry,
|
|
84
|
+
});
|
|
76
85
|
// Elasticsearch index and alias names must be lowercase.
|
|
77
86
|
const indexForModel = (model) => (prefix ? `${prefix}_${model}` : model).toLowerCase();
|
|
78
87
|
// One first-use check per model and process. A failed check is
|
|
@@ -112,7 +121,13 @@ export const elasticsearchAdapter = (config) => {
|
|
|
112
121
|
entry.fromDeleted = true;
|
|
113
122
|
}
|
|
114
123
|
}
|
|
115
|
-
|
|
124
|
+
// Every run, so rows written before their model had reservations, or
|
|
125
|
+
// while a field was in `skipUniqueFor`, get them.
|
|
126
|
+
const duplicates = [];
|
|
127
|
+
for (const [model, table] of Object.entries(schema)) {
|
|
128
|
+
duplicates.push(...(await reservations.backfill(model, indexForModel(table.modelName))));
|
|
129
|
+
}
|
|
130
|
+
return { migrated, duplicates };
|
|
116
131
|
};
|
|
117
132
|
/**
|
|
118
133
|
* For `npx auth generate`: the mappings each model's index is created
|
|
@@ -190,6 +205,110 @@ export const elasticsearchAdapter = (config) => {
|
|
|
190
205
|
},
|
|
191
206
|
};
|
|
192
207
|
};
|
|
208
|
+
/**
|
|
209
|
+
* Writes every row matching `query` with `writePage`, a page of rows at
|
|
210
|
+
* a time, and returns how many it wrote. `writePage` sends one bulk
|
|
211
|
+
* request whose writes are conditional on each row being unchanged
|
|
212
|
+
* since the search, and returns its items in the order of the rows.
|
|
213
|
+
*
|
|
214
|
+
* Not a by-query write: that skips rows that change under it, and since
|
|
215
|
+
* updated rows usually still match, a rerun cannot tell the skipped
|
|
216
|
+
* rows from the ones it already updated. Instead only the rows that lost
|
|
217
|
+
* that race are searched for again, so every row is written and counted
|
|
218
|
+
* once. A row whose write Elasticsearch rejected under load, or refused
|
|
219
|
+
* while migrate() moves the index, was not written and goes again the
|
|
220
|
+
* same way.
|
|
221
|
+
*/
|
|
222
|
+
const writeMatchingRows = async ({ model, index, query, operation, source, writePage, }) => {
|
|
223
|
+
const [writing, written] = operation === "updateMany"
|
|
224
|
+
? ["updating", "updated"]
|
|
225
|
+
: ["deleting", "deleted"];
|
|
226
|
+
let count = 0;
|
|
227
|
+
let retryIds;
|
|
228
|
+
// Passes that waited out a write block do not count towards
|
|
229
|
+
// MAX_MANY_PASSES; the write block timeout bounds them instead.
|
|
230
|
+
const pauseWhileBlocked = writeBlockWaiter(writeBlockTimeoutMs, index);
|
|
231
|
+
let pass = 0;
|
|
232
|
+
while (pass < MAX_MANY_PASSES) {
|
|
233
|
+
const passQuery = retryIds
|
|
234
|
+
? { bool: { filter: [query, { ids: { values: retryIds } }] } }
|
|
235
|
+
: query;
|
|
236
|
+
const unwrittenIds = [];
|
|
237
|
+
let rejected = false;
|
|
238
|
+
let blockedBy;
|
|
239
|
+
// Paging by id needs no point in time: ids are unique and never
|
|
240
|
+
// change, so no row is read twice, and a row that changes on a
|
|
241
|
+
// later page is read as changed.
|
|
242
|
+
let searchAfter;
|
|
243
|
+
while (true) {
|
|
244
|
+
const page = await withRetry(() => client.search({
|
|
245
|
+
index,
|
|
246
|
+
query: passQuery,
|
|
247
|
+
size: UPDATE_MANY_PAGE_SIZE,
|
|
248
|
+
sort: [{ id: "asc" }],
|
|
249
|
+
search_after: searchAfter,
|
|
250
|
+
_source: source,
|
|
251
|
+
seq_no_primary_term: true,
|
|
252
|
+
track_total_hits: false,
|
|
253
|
+
}));
|
|
254
|
+
const hits = page.hits.hits;
|
|
255
|
+
if (hits.length === 0)
|
|
256
|
+
break;
|
|
257
|
+
searchAfter = hits[hits.length - 1]?.sort;
|
|
258
|
+
// Not retried, like the other conditional writes. Each row is
|
|
259
|
+
// written to the index it was read from, as in `findVersioned`.
|
|
260
|
+
for (const outcome of await writePage(hits)) {
|
|
261
|
+
if (isWriteBlocked(outcome) && outcome?._id) {
|
|
262
|
+
unwrittenIds.push(outcome._id);
|
|
263
|
+
blockedBy = outcome.error;
|
|
264
|
+
}
|
|
265
|
+
else if ((outcome?.status === 409 || outcome?.status === 429) &&
|
|
266
|
+
outcome._id) {
|
|
267
|
+
unwrittenIds.push(outcome._id);
|
|
268
|
+
rejected ||= outcome.status === 429;
|
|
269
|
+
}
|
|
270
|
+
else if (outcome?.status === 404) {
|
|
271
|
+
// Another request deleted the row.
|
|
272
|
+
}
|
|
273
|
+
else if (!outcome || outcome.error) {
|
|
274
|
+
throw new Error(`${operation} on "${model}" failed after ${writing} ${count} rows: ${outcome?.error?.reason ?? outcome?.error?.type ?? "unexpected bulk response"}`);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
count++;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (hits.length < UPDATE_MANY_PAGE_SIZE)
|
|
281
|
+
break;
|
|
282
|
+
}
|
|
283
|
+
if (unwrittenIds.length === 0)
|
|
284
|
+
return count;
|
|
285
|
+
retryIds = unwrittenIds;
|
|
286
|
+
// Make the writes that won searchable, so the next pass sees
|
|
287
|
+
// whether those rows still match and what to condition on. Even
|
|
288
|
+
// with "immediate" refresh a winner may not have refreshed yet.
|
|
289
|
+
await withRetry(() => client.indices.refresh({ index }));
|
|
290
|
+
if (blockedBy) {
|
|
291
|
+
await pauseWhileBlocked(blockedBy, `${operation} on "${model}" had ${written} ${count} rows.`);
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
// Give an overloaded cluster a growing, jittered while to drain.
|
|
295
|
+
if (rejected)
|
|
296
|
+
await wait((0.5 + Math.random()) * 50 * 2 ** pass);
|
|
297
|
+
pass++;
|
|
298
|
+
}
|
|
299
|
+
throw new Error(`${operation} on "${model}" ${written} ${count} rows, but the remaining matching rows could not be written in ${MAX_MANY_PASSES} passes: other requests kept changing them or Elasticsearch kept rejecting the writes`);
|
|
300
|
+
};
|
|
301
|
+
/** The conditional bulk action that writes `hit` where it was read. */
|
|
302
|
+
const ifUnchanged = (hit) => ({
|
|
303
|
+
_index: hit._index,
|
|
304
|
+
_id: hit._id,
|
|
305
|
+
if_seq_no: hit._seq_no,
|
|
306
|
+
if_primary_term: hit._primary_term,
|
|
307
|
+
});
|
|
308
|
+
/** The ids of the rows whose bulk item says they were written. */
|
|
309
|
+
const writtenIds = (outcomes) => outcomes.flatMap((outcome) => outcome?._id && !outcome.error && outcome.status < 300
|
|
310
|
+
? [outcome._id]
|
|
311
|
+
: []);
|
|
193
312
|
return {
|
|
194
313
|
options: { [MIGRATOR]: migrator },
|
|
195
314
|
createSchema,
|
|
@@ -209,6 +328,9 @@ export const elasticsearchAdapter = (config) => {
|
|
|
209
328
|
...row.ifUnchanged,
|
|
210
329
|
refresh,
|
|
211
330
|
});
|
|
331
|
+
await reservations.release(model, index, [
|
|
332
|
+
{ id: row.id, source: row.source },
|
|
333
|
+
]);
|
|
212
334
|
return normalizeHit({
|
|
213
335
|
_id: row.id,
|
|
214
336
|
_source: row.source,
|
|
@@ -231,6 +353,12 @@ export const elasticsearchAdapter = (config) => {
|
|
|
231
353
|
// if the row is unchanged since, so the guard held when it was written.
|
|
232
354
|
// A lost race searches again, which re-checks the guard.
|
|
233
355
|
incrementOne: async ({ model, where, increment, set, }) => {
|
|
356
|
+
// Claiming a value needs the row's current one, which the scripted
|
|
357
|
+
// update never reads back before it writes.
|
|
358
|
+
const unique = set && reservations.constrainedFieldIn(model, set);
|
|
359
|
+
if (unique) {
|
|
360
|
+
throw new Error(`incrementOne cannot set "${unique}" on "${model}", as it is a unique field; use update instead.`);
|
|
361
|
+
}
|
|
234
362
|
const index = await ensureAlias(model);
|
|
235
363
|
const query = queryFor(model, where);
|
|
236
364
|
const params = { increment, set: set ?? {} };
|
|
@@ -274,14 +402,40 @@ export const elasticsearchAdapter = (config) => {
|
|
|
274
402
|
...data,
|
|
275
403
|
id,
|
|
276
404
|
};
|
|
405
|
+
const write = () => withRetry(() => client.index({
|
|
406
|
+
index,
|
|
407
|
+
id,
|
|
408
|
+
op_type: "create",
|
|
409
|
+
refresh,
|
|
410
|
+
document: source,
|
|
411
|
+
}));
|
|
412
|
+
const values = reservations.valuesOf(model, source);
|
|
413
|
+
const claims = values.length > 0 ? reservations.claims(model, index) : undefined;
|
|
277
414
|
try {
|
|
278
|
-
await whileMigrating(index,
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
415
|
+
await whileMigrating(index, claims
|
|
416
|
+
? async () => {
|
|
417
|
+
// Claimed again on a rerun, which re-stamps the claims.
|
|
418
|
+
await claims.claim([{ id, claim: values }]);
|
|
419
|
+
try {
|
|
420
|
+
await write();
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
await claims.failed(id, error);
|
|
424
|
+
throw error;
|
|
425
|
+
}
|
|
426
|
+
// A row written long after its claim may have lost a
|
|
427
|
+
// value to another write taking it for an orphan.
|
|
428
|
+
const lost = await claims.lost();
|
|
429
|
+
if (lost !== undefined) {
|
|
430
|
+
await whileMigrating(index, () => withRetry(() => client.delete({ index, id, refresh })).catch((error) => {
|
|
431
|
+
if (!isNotFound(error))
|
|
432
|
+
throw error;
|
|
433
|
+
}));
|
|
434
|
+
await claims.unwritten([id]);
|
|
435
|
+
throw duplicateError(model, lost);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
: write);
|
|
285
439
|
}
|
|
286
440
|
catch (error) {
|
|
287
441
|
if (isVersionConflict(error)) {
|
|
@@ -338,6 +492,9 @@ export const elasticsearchAdapter = (config) => {
|
|
|
338
492
|
update: async ({ model, where, update, }) => {
|
|
339
493
|
const index = await ensureAlias(model);
|
|
340
494
|
const query = queryFor(model, where);
|
|
495
|
+
// Created once, so a rerun after a write block knows which of its
|
|
496
|
+
// claims an earlier run created.
|
|
497
|
+
const claims = reservations.claims(model, index);
|
|
341
498
|
// Conditional on the row read, so a blocked write reads again.
|
|
342
499
|
return whileMigrating(index, async () => {
|
|
343
500
|
const row = await findVersioned(index, query);
|
|
@@ -348,12 +505,24 @@ export const elasticsearchAdapter = (config) => {
|
|
|
348
505
|
...update,
|
|
349
506
|
id: row.source.id ?? row.id,
|
|
350
507
|
};
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
508
|
+
const change = reservations.changeOf(model, row.id, row.source, update);
|
|
509
|
+
if (change)
|
|
510
|
+
await claims.claim([change]);
|
|
511
|
+
try {
|
|
512
|
+
await withRetry(() => client.index({
|
|
513
|
+
id: row.id,
|
|
514
|
+
document: mergedDocument,
|
|
515
|
+
...row.ifUnchanged,
|
|
516
|
+
refresh,
|
|
517
|
+
}));
|
|
518
|
+
}
|
|
519
|
+
catch (error) {
|
|
520
|
+
if (change)
|
|
521
|
+
await claims.failed(row.id, error);
|
|
522
|
+
throw error;
|
|
523
|
+
}
|
|
524
|
+
if (change)
|
|
525
|
+
await claims.written([row.id]);
|
|
357
526
|
return mergedDocument;
|
|
358
527
|
});
|
|
359
528
|
},
|
|
@@ -365,104 +534,58 @@ export const elasticsearchAdapter = (config) => {
|
|
|
365
534
|
source: SET_FIELDS_SCRIPT,
|
|
366
535
|
params: { fields: update },
|
|
367
536
|
};
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
//
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
// later page is read as changed.
|
|
392
|
-
let searchAfter;
|
|
393
|
-
while (true) {
|
|
394
|
-
const page = await withRetry(() => client.search({
|
|
395
|
-
index,
|
|
396
|
-
query: passQuery,
|
|
397
|
-
size: UPDATE_MANY_PAGE_SIZE,
|
|
398
|
-
sort: [{ id: "asc" }],
|
|
399
|
-
search_after: searchAfter,
|
|
400
|
-
_source: false,
|
|
401
|
-
seq_no_primary_term: true,
|
|
402
|
-
track_total_hits: false,
|
|
403
|
-
}));
|
|
404
|
-
const hits = page.hits.hits;
|
|
405
|
-
if (hits.length === 0)
|
|
406
|
-
break;
|
|
407
|
-
searchAfter = hits[hits.length - 1]?.sort;
|
|
408
|
-
// Not retried, like the other conditional writes. Each row is
|
|
409
|
-
// written to the index it was read from, as in `findVersioned`.
|
|
410
|
-
const result = await client.bulk({
|
|
411
|
-
index,
|
|
412
|
-
refresh,
|
|
413
|
-
operations: hits.flatMap((hit) => [
|
|
414
|
-
{
|
|
415
|
-
update: {
|
|
416
|
-
_index: hit._index,
|
|
417
|
-
_id: hit._id,
|
|
418
|
-
if_seq_no: hit._seq_no,
|
|
419
|
-
if_primary_term: hit._primary_term,
|
|
420
|
-
},
|
|
421
|
-
},
|
|
422
|
-
{ script },
|
|
423
|
-
]),
|
|
424
|
-
});
|
|
425
|
-
for (const item of result.items) {
|
|
426
|
-
const outcome = item.update;
|
|
427
|
-
if (isWriteBlocked(outcome) && outcome?._id) {
|
|
428
|
-
unwrittenIds.push(outcome._id);
|
|
429
|
-
blockedBy = outcome.error;
|
|
430
|
-
}
|
|
431
|
-
else if ((outcome?.status === 409 || outcome?.status === 429) &&
|
|
432
|
-
outcome._id) {
|
|
433
|
-
unwrittenIds.push(outcome._id);
|
|
434
|
-
rejected ||= outcome.status === 429;
|
|
435
|
-
}
|
|
436
|
-
else if (outcome?.status === 404) {
|
|
437
|
-
// Another request deleted the row.
|
|
438
|
-
}
|
|
439
|
-
else if (!outcome || outcome.error) {
|
|
440
|
-
throw new Error(`updateMany on "${model}" failed after updating ${updated} rows: ${outcome?.error?.reason ?? outcome?.error?.type ?? "unexpected bulk response"}`);
|
|
441
|
-
}
|
|
442
|
-
else {
|
|
443
|
-
updated++;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
if (hits.length < UPDATE_MANY_PAGE_SIZE)
|
|
447
|
-
break;
|
|
448
|
-
}
|
|
449
|
-
if (unwrittenIds.length === 0)
|
|
450
|
-
return updated;
|
|
451
|
-
retryIds = unwrittenIds;
|
|
452
|
-
// Make the writes that won searchable, so the next pass sees
|
|
453
|
-
// whether those rows still match and what to condition on. Even
|
|
454
|
-
// with "immediate" refresh a winner may not have refreshed yet.
|
|
455
|
-
await withRetry(() => client.indices.refresh({ index }));
|
|
456
|
-
if (blockedBy) {
|
|
457
|
-
await pauseWhileBlocked(blockedBy, `updateMany on "${model}" had updated ${updated} rows.`);
|
|
458
|
-
continue;
|
|
459
|
-
}
|
|
460
|
-
// Give an overloaded cluster a growing, jittered while to drain.
|
|
461
|
-
if (rejected)
|
|
462
|
-
await wait((0.5 + Math.random()) * 50 * 2 ** pass);
|
|
463
|
-
pass++;
|
|
537
|
+
const writeRows = async (hits) => {
|
|
538
|
+
const result = await client.bulk({
|
|
539
|
+
index,
|
|
540
|
+
refresh,
|
|
541
|
+
operations: hits.flatMap((hit) => [
|
|
542
|
+
{ update: ifUnchanged(hit) },
|
|
543
|
+
{ script },
|
|
544
|
+
]),
|
|
545
|
+
});
|
|
546
|
+
return result.items.map((item) => item.update);
|
|
547
|
+
};
|
|
548
|
+
// Every field of a unique index the update touches, since the new
|
|
549
|
+
// combination includes the fields it leaves alone.
|
|
550
|
+
const unique = reservations.fieldsOf(model, update);
|
|
551
|
+
if (unique.length === 0) {
|
|
552
|
+
return writeMatchingRows({
|
|
553
|
+
model,
|
|
554
|
+
index,
|
|
555
|
+
query,
|
|
556
|
+
operation: "updateMany",
|
|
557
|
+
source: false,
|
|
558
|
+
writePage: writeRows,
|
|
559
|
+
});
|
|
464
560
|
}
|
|
465
|
-
|
|
561
|
+
// Each page's rows claim their new values in one request before
|
|
562
|
+
// they are written, and release their old ones in one after.
|
|
563
|
+
return writeMatchingRows({
|
|
564
|
+
model,
|
|
565
|
+
index,
|
|
566
|
+
query,
|
|
567
|
+
operation: "updateMany",
|
|
568
|
+
source: unique,
|
|
569
|
+
writePage: async (hits) => {
|
|
570
|
+
const changes = hits.flatMap((hit) => {
|
|
571
|
+
const change = hit._id
|
|
572
|
+
? reservations.changeOf(model, hit._id, hit._source, update)
|
|
573
|
+
: undefined;
|
|
574
|
+
return change ? [change] : [];
|
|
575
|
+
});
|
|
576
|
+
const claims = reservations.claims(model, index);
|
|
577
|
+
await claims.claim(changes);
|
|
578
|
+
const outcomes = await writeRows(hits);
|
|
579
|
+
const written = new Set(writtenIds(outcomes));
|
|
580
|
+
await claims.written(written);
|
|
581
|
+
// Bulk items are not retried, so a row reported unwritten was
|
|
582
|
+
// not written; a later pass claims its values again.
|
|
583
|
+
await claims.unwritten(changes
|
|
584
|
+
.map((change) => change.id)
|
|
585
|
+
.filter((id) => !written.has(id)));
|
|
586
|
+
return outcomes;
|
|
587
|
+
},
|
|
588
|
+
});
|
|
466
589
|
},
|
|
467
590
|
delete: async ({ model, where, }) => {
|
|
468
591
|
// A singular delete needs something to pick the row by.
|
|
@@ -470,22 +593,51 @@ export const elasticsearchAdapter = (config) => {
|
|
|
470
593
|
return;
|
|
471
594
|
const index = await ensureAlias(model);
|
|
472
595
|
const query = queryFor(model, where);
|
|
473
|
-
await whileMigrating(index, async () => {
|
|
596
|
+
const deleted = await whileMigrating(index, async () => {
|
|
474
597
|
const searchResult = await withRetry(() => client.search({ index, query, size: 1 }));
|
|
475
598
|
const hit = searchResult.hits.hits[0];
|
|
476
599
|
const hitId = hit?._id;
|
|
477
600
|
if (!hit || !hitId)
|
|
478
|
-
return;
|
|
601
|
+
return undefined;
|
|
479
602
|
await withRetry(() => client.delete({
|
|
480
603
|
index,
|
|
481
604
|
id: hitId,
|
|
482
605
|
refresh,
|
|
483
606
|
}));
|
|
607
|
+
return { id: hitId, source: hit._source };
|
|
484
608
|
});
|
|
609
|
+
if (deleted)
|
|
610
|
+
await reservations.release(model, index, [deleted]);
|
|
485
611
|
},
|
|
486
612
|
deleteMany: async ({ model, where, }) => {
|
|
487
613
|
const index = await ensureAlias(model);
|
|
488
614
|
const query = queryFor(model, where);
|
|
615
|
+
// Releasing a row's values needs them, which a by-query delete does
|
|
616
|
+
// not return, so these rows are deleted a page at a time.
|
|
617
|
+
const unique = reservations.fieldsOf(model);
|
|
618
|
+
if (unique.length > 0) {
|
|
619
|
+
return writeMatchingRows({
|
|
620
|
+
model,
|
|
621
|
+
index,
|
|
622
|
+
query,
|
|
623
|
+
operation: "deleteMany",
|
|
624
|
+
source: unique,
|
|
625
|
+
writePage: async (hits) => {
|
|
626
|
+
// Refreshed like the by-query delete, which cannot wait.
|
|
627
|
+
const result = await client.bulk({
|
|
628
|
+
index,
|
|
629
|
+
refresh: true,
|
|
630
|
+
operations: hits.map((hit) => ({ delete: ifUnchanged(hit) })),
|
|
631
|
+
});
|
|
632
|
+
const outcomes = result.items.map((item) => item.delete);
|
|
633
|
+
const written = new Set(writtenIds(outcomes));
|
|
634
|
+
await reservations.release(model, index, hits.flatMap((hit) => hit._id && written.has(hit._id)
|
|
635
|
+
? [{ id: hit._id, source: hit._source }]
|
|
636
|
+
: []));
|
|
637
|
+
return outcomes;
|
|
638
|
+
},
|
|
639
|
+
});
|
|
640
|
+
}
|
|
489
641
|
// A row that changes mid-pass is skipped as a version conflict, so
|
|
490
642
|
// rerun until a pass meets none. Rows already deleted no longer
|
|
491
643
|
// match, so a rerun never counts a row twice. A pass refused by a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elasticsearch-adapter.js","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"elasticsearch-adapter.js","sourceRoot":"","sources":["../src/elasticsearch-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAGL,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,IAAI,EACJ,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAqC,MAAM,cAAc,CAAC;AAC3E,OAAO,EAEL,kBAAkB,EAClB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAuDnD;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,6EAA6E;AAC7E,wBAAwB;AACxB,MAAM,gBAAgB,GAAG;;;;;;;EAOvB,CAAC;AAEH,0EAA0E;AAC1E,+DAA+D;AAC/D,MAAM,iBAAiB,GAAG;;;EAGxB,CAAC;AAEH,+DAA+D;AAC/D,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAEnC,+EAA+E;AAC/E,MAAM,aAAa,GAAG,CAAC,KAAc,EAAU,EAAE,CAC9C,KAAoD,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO;IACzE,CAAC,CAAC;AAEJ,yEAAyE;AACzE,MAAM,YAAY,GAAG,CAAC,GAGrB,EAAa,EAAE;IACd,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IACjC,OAAO,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAkC,EACO,EAAE;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC;IACjE,MAAM,aAAa,GAAG;QACpB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC;QAC1C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC;KAC/C,CAAC;IAEF,MAAM,OAAO,GAAG,oBAAoB,CAAC;QACnC,MAAM,EAAE;YACN,SAAS,EAAE,uBAAuB;YAClC,WAAW,EAAE,uBAAuB;YACpC,SAAS,EAAE,KAAK;YAChB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;YACpC,YAAY,EAAE,IAAI;YAClB,0EAA0E;YAC1E,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE,IAAI;YACtB,kBAAkB,EAAE,KAAK;YACzB,WAAW,EAAE,KAAK;SACnB;QACD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,EAAE,EAAE;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAE7B,MAAM,SAAS,GAAG,CAAI,SAA2B,EAAE,EAAE,CACnD,sBAAsB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEhD,MAAM,cAAc,GAAG,CAAI,KAAa,EAAE,SAA2B,EAAE,EAAE,CACvE,iBAAiB,CAAC,mBAAmB,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAE3D,MAAM,YAAY,GAAG,kBAAkB,CAAC;gBACtC,MAAM;gBACN,MAAM;gBACN,mBAAmB;gBACnB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC,eAAe,CAAC;gBACxD,QAAQ,EAAE,aAAa;gBACvB,SAAS;aACV,CAAC,CAAC;YAEH,yDAAyD;YACzD,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,EAAE,CACtC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAExD,+DAA+D;YAC/D,0CAA0C;YAC1C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;YAE/C;;;;eAIG;YACH,MAAM,WAAW,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;gBAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,CACrB,kBAAkB,CAChB,MAAM,EACN,KAAK,EACL,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,EACtD,aAAa,CACd,CACF,CAAC;oBACF,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACxB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,KAAK,CAAC;gBACZ,OAAO,KAAK,CAAC;YACf,CAAC,CAAC;YAEF,+DAA+D;YAC/D,MAAM,QAAQ,GAAa,KAAK,EAAE,EAChC,gBAAgB,EAChB,eAAe,GAChB,EAAE,EAAE;gBACH,MAAM,QAAQ,GAAoB,EAAE,CAAC;gBACrC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,MAAM,EACN,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,EAC9B,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,EACjC,aAAa,CACd,CAAC;oBACF,IAAI,MAAM;wBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,gBAAgB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,mEAAmE;oBACnE,mEAAmE;oBACnE,6DAA6D;oBAC7D,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC7B,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;wBACpE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC3B,CAAC;gBACH,CAAC;gBACD,qEAAqE;gBACrE,kDAAkD;gBAClD,MAAM,UAAU,GAAsB,EAAE,CAAC;gBACzC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpD,UAAU,CAAC,IAAI,CACb,GAAG,CAAC,MAAM,YAAY,CAAC,QAAQ,CAC7B,KAAK,EACL,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAC/B,CAAC,CACH,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;YAClC,CAAC,CAAC;YAEF;;;eAGG;YACH,MAAM,YAAY,GAAG,KAAK,EAAE,EAC1B,IAAI,EACJ,MAAM,GAIP,EAAE,EAAE;gBACH,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;oBAC7C,KAAK;oBACL;wBACE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;wBACrC,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;qBAC9D;iBACF,CAAC,CACH,CAAC;gBACF,OAAO;oBACL,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;oBAC5C,IAAI,EAAE,IAAI,IAAI,6BAA6B;oBAC3C,SAAS,EAAE,IAAI;iBAChB,CAAC;YACJ,CAAC,CAAC;YAEF,oEAAoE;YACpE,0CAA0C;YAC1C,MAAM,SAAS,GAAG,CAAC,KAAa,EAAE,MAAiB,EAAE,EAAE,CACrD,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC;oBACE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;iBAC/D;gBACH,CAAC,CAAC,EAAE,CAAC;YAET,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,QAAwB,EAAE,EAAE,EAAE,CAC7D,YAAY,CACV,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACrB,GAAG,MAAM;gBACT,KAAK,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;aACpD,CAAC,CAAC,CACJ,CAAC;YAEJ;;;;;eAKG;YACH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;gBAC5C,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC;YAEF,uEAAuE;YACvE,uEAAuE;YACvE,+CAA+C;YAE/C;;;;;;;;;eASG;YACH,MAAM,aAAa,GAAG,KAAK,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;gBAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,MAAM,CAAY;oBACvB,KAAK;oBACL,KAAK;oBACL,IAAI,EAAE,CAAC;oBACP,mBAAmB,EAAE,IAAI;iBAC1B,CAAC,CACH,CAAC;gBACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChC,IACE,CAAC,GAAG,EAAE,GAAG;oBACT,GAAG,CAAC,OAAO,KAAK,SAAS;oBACzB,GAAG,CAAC,aAAa,KAAK,SAAS,EAC/B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO;oBACL,EAAE,EAAE,GAAG,CAAC,GAAG;oBACX,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;oBACzB,WAAW,EAAE;wBACX,KAAK,EAAE,GAAG,CAAC,MAAM;wBACjB,SAAS,EAAE,GAAG,CAAC,OAAO;wBACtB,eAAe,EAAE,GAAG,CAAC,aAAa;qBACnC;iBACF,CAAC;YACJ,CAAC,CAAC;YAEF;;;;;;;;;;;;;eAaG;YACH,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAC/B,KAAK,EACL,KAAK,EACL,KAAK,EACL,SAAS,EACT,MAAM,EACN,SAAS,GAWV,EAAE,EAAE;gBACH,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GACtB,SAAS,KAAK,YAAY;oBACxB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC;oBACzB,CAAC,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,QAA8B,CAAC;gBACnC,4DAA4D;gBAC5D,gEAAgE;gBAChE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;gBACvE,IAAI,IAAI,GAAG,CAAC,CAAC;gBACb,OAAO,IAAI,GAAG,eAAe,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,QAAQ;wBACxB,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;wBAC9D,CAAC,CAAC,KAAK,CAAC;oBACV,MAAM,YAAY,GAAa,EAAE,CAAC;oBAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,IAAI,SAAkB,CAAC;oBAEvB,gEAAgE;oBAChE,+DAA+D;oBAC/D,iCAAiC;oBACjC,IAAI,WAA4C,CAAC;oBACjD,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAChC,MAAM,CAAC,MAAM,CAAY;4BACvB,KAAK;4BACL,KAAK,EAAE,SAAS;4BAChB,IAAI,EAAE,qBAAqB;4BAC3B,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;4BACrB,YAAY,EAAE,WAAW;4BACzB,OAAO,EAAE,MAAM;4BACf,mBAAmB,EAAE,IAAI;4BACzB,gBAAgB,EAAE,KAAK;yBACxB,CAAC,CACH,CAAC;wBACF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;4BAAE,MAAM;wBAC7B,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;wBAE1C,8DAA8D;wBAC9D,gEAAgE;wBAChE,KAAK,MAAM,OAAO,IAAI,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC5C,IAAI,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;gCAC5C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCAC/B,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;4BAC5B,CAAC;iCAAM,IACL,CAAC,OAAO,EAAE,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,MAAM,KAAK,GAAG,CAAC;gCACpD,OAAO,CAAC,GAAG,EACX,CAAC;gCACD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCAC/B,QAAQ,KAAK,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC;4BACtC,CAAC;iCAAM,IAAI,OAAO,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gCACnC,mCAAmC;4BACrC,CAAC;iCAAM,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gCACrC,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,QAAQ,KAAK,kBAAkB,OAAO,IAAI,KAAK,UAAU,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,0BAA0B,EAAE,CACpJ,CAAC;4BACJ,CAAC;iCAAM,CAAC;gCACN,KAAK,EAAE,CAAC;4BACV,CAAC;wBACH,CAAC;wBACD,IAAI,IAAI,CAAC,MAAM,GAAG,qBAAqB;4BAAE,MAAM;oBACjD,CAAC;oBAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAC5C,QAAQ,GAAG,YAAY,CAAC;oBACxB,6DAA6D;oBAC7D,gEAAgE;oBAChE,gEAAgE;oBAChE,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBACzD,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,iBAAiB,CACrB,SAAS,EACT,GAAG,SAAS,QAAQ,KAAK,SAAS,OAAO,IAAI,KAAK,QAAQ,CAC3D,CAAC;wBACF,SAAS;oBACX,CAAC;oBACD,iEAAiE;oBACjE,IAAI,QAAQ;wBAAE,MAAM,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;oBACjE,IAAI,EAAE,CAAC;gBACT,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,GAAG,SAAS,QAAQ,KAAK,KAAK,OAAO,IAAI,KAAK,kEAAkE,eAAe,uFAAuF,CACvN,CAAC;YACJ,CAAC,CAAC;YAEF,uEAAuE;YACvE,MAAM,WAAW,GAAG,CAAC,GAAiC,EAAE,EAAE,CAAC,CAAC;gBAC1D,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,SAAS,EAAE,GAAG,CAAC,OAAO;gBACtB,eAAe,EAAE,GAAG,CAAC,aAAa;aACnC,CAAC,CAAC;YAEH,kEAAkE;YAClE,MAAM,UAAU,GAAG,CAAC,QAAkD,EAAE,EAAE,CACxE,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3B,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;gBACpD,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;gBACf,CAAC,CAAC,EAAE,CACP,CAAC;YAEJ,OAAO;gBACL,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE;gBACjC,YAAY;gBACZ,qEAAqE;gBACrE,kEAAkE;gBAClE,kEAAkE;gBAClE,UAAU,EAAE,KAAK,EAAK,EACpB,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,OAAO,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAChC,iBAAiB,CACf,kBAAkB,KAAK,GAAG,EAC1B,mBAAmB,EACnB,KAAK,EAAE,KAAK,EAAE,EAAE;wBACd,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9C,IAAI,CAAC,GAAG;4BAAE,OAAO,IAAI,CAAC;wBACtB,IAAI,CAAC;4BACH,MAAM,MAAM,CAAC,MAAM,CAAC;gCAClB,EAAE,EAAE,GAAG,CAAC,EAAE;gCACV,GAAG,GAAG,CAAC,WAAW;gCAClB,OAAO;6BACR,CAAC,CAAC;4BACH,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE;gCACvC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;6BACnC,CAAC,CAAC;4BACH,OAAO,YAAY,CAAC;gCAClB,GAAG,EAAE,GAAG,CAAC,EAAE;gCACX,OAAO,EAAE,GAAG,CAAC,MAAM;6BACpB,CAAM,CAAC;wBACV,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gCACjD,MAAM,KAAK,CAAC;wBAChB,CAAC;wBACD,6DAA6D;wBAC7D,qDAAqD;wBACrD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACtC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CACrC,CAAC;wBACF,IAAI,CAAC,UAAU;4BAAE,OAAO,IAAI,CAAC;wBAC7B,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;wBAC3B,OAAO,KAAK,CAAC;oBACf,CAAC,CACF,CACF,CAAC;gBACJ,CAAC;gBACD,uEAAuE;gBACvE,wEAAwE;gBACxE,yDAAyD;gBACzD,YAAY,EAAE,KAAK,EAAK,EACtB,KAAK,EACL,KAAK,EACL,SAAS,EACT,GAAG,GAMJ,EAAE,EAAE;oBACH,mEAAmE;oBACnE,4CAA4C;oBAC5C,MAAM,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAClE,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,IAAI,KAAK,CACb,4BAA4B,MAAM,SAAS,KAAK,iDAAiD,CAClG,CAAC;oBACJ,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACrC,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,CAAC;oBAE7C,OAAO,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAChC,iBAAiB,CACf,oBAAoB,KAAK,GAAG,EAC5B,mBAAmB,EACnB,KAAK,EAAE,KAAK,EAAE,EAAE;wBACd,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9C,IAAI,CAAC,GAAG;4BAAE,OAAO,IAAI,CAAC;wBACtB,IAAI,CAAC;4BACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAIhC;gCACA,EAAE,EAAE,GAAG,CAAC,EAAE;gCACV,GAAG,GAAG,CAAC,WAAW;gCAClB,OAAO;gCACP,MAAM,EAAE;oCACN,IAAI,EAAE,UAAU;oCAChB,MAAM,EAAE,gBAAgB;oCACxB,MAAM;iCACP;gCACD,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC;4BACH,OAAO,YAAY,CAAC;gCAClB,GAAG,EAAE,GAAG,CAAC,EAAE;gCACX,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO;6BAC7B,CAAM,CAAC;wBACV,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,8DAA8D;4BAC9D,wCAAwC;4BACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;gCACjD,MAAM,KAAK,CAAC;4BACd,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;4BAC3B,OAAO,KAAK,CAAC;wBACf,CAAC;oBACH,CAAC,CACF,CACF,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,KAAK,EAAqC,EAChD,KAAK,EACL,IAAI,GAKL,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,EAAE,GACN,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;wBAC/C,CAAC,CAAC,IAAI,CAAC,EAAE;wBACT,CAAC,CAAC,UAAU,EAAE,CAAC;oBAEnB,MAAM,MAAM,GAAc;wBACxB,GAAI,IAAkB;wBACtB,EAAE;qBACH,CAAC;oBAEF,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,SAAS,CAAC,GAAG,EAAE,CACb,MAAM,CAAC,KAAK,CAAC;wBACX,KAAK;wBACL,EAAE;wBACF,OAAO,EAAE,QAAQ;wBACjB,OAAO;wBACP,QAAQ,EAAE,MAAM;qBACjB,CAAC,CACH,CAAC;oBACJ,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACpD,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAEpE,IAAI,CAAC;wBACH,MAAM,cAAc,CAClB,KAAK,EACL,MAAM;4BACJ,CAAC,CAAC,KAAK,IAAI,EAAE;gCACT,wDAAwD;gCACxD,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gCAC5C,IAAI,CAAC;oCACH,MAAM,KAAK,EAAE,CAAC;gCAChB,CAAC;gCAAC,OAAO,KAAK,EAAE,CAAC;oCACf,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oCAC/B,MAAM,KAAK,CAAC;gCACd,CAAC;gCACD,qDAAqD;gCACrD,kDAAkD;gCAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gCACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;oCACvB,MAAM,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAC/B,SAAS,CAAC,GAAG,EAAE,CACb,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CACtC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wCAChB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;4CAAE,MAAM,KAAK,CAAC;oCACtC,CAAC,CAAC,CACH,CAAC;oCACF,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oCAC7B,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gCACpC,CAAC;4BACH,CAAC;4BACH,CAAC,CAAC,KAAK,CACV,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC7B,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,kBAAkB,EAAE,kBAAkB,EAChE,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;wBACJ,CAAC;wBACD,MAAM,KAAK,CAAC;oBACd,CAAC;oBAED,OAAO,MAAW,CAAC;gBACrB,CAAC;gBACD,OAAO,EAAE,KAAK,EAAK,EACjB,KAAK,EACL,KAAK,EACL,MAAM,GAMP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,MAAM,CAAY;wBACvB,KAAK;wBACL,KAAK;wBACL,IAAI,EAAE,CAAC;wBACP,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;qBAC5B,CAAC,CACH,CAAC;oBAEF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,CAAC,GAAG;wBAAE,OAAO,IAAI,CAAC;oBACtB,OAAO,YAAY,CAAC,GAAG,CAAM,CAAC;gBAChC,CAAC;gBACD,QAAQ,EAAE,KAAK,EAAK,EAClB,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,EACN,MAAM,GASP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAClC,MAAM,CAAC,MAAM,CAAY;wBACvB,KAAK;wBACL,KAAK;wBACL,IAAI,EAAE,KAAK;wBACX,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACjD,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;wBAC3B,GAAG,CAAC,MAAM;4BACR,CAAC,CAAC;gCACE,IAAI,EAAE;oCACJ;wCACE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;4CAC9C,KAAK,EAAE,MAAM,CAAC,SAAS;4CACvB,aAAa,EAAE,SAAS;yCACzB;qCACF;iCACF;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC,CACH,CAAC;oBAEF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACzB,CAAC,GAA0C,EAAE,EAAE,CAC7C,YAAY,CAAC,GAAG,CAAM,CACzB,CAAC;gBACJ,CAAC;gBACD,KAAK,EAAE,KAAK,EAAE,EACZ,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;oBAErE,OAAO,MAAM,CAAC,KAAK,CAAC;gBACtB,CAAC;gBACD,MAAM,EAAE,KAAK,EAAK,EAChB,KAAK,EACL,KAAK,EACL,MAAM,GAKP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,kEAAkE;oBAClE,iCAAiC;oBACjC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAEjD,+DAA+D;oBAC/D,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;wBACtC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;wBAC9C,IAAI,CAAC,GAAG;4BAAE,OAAO,IAAI,CAAC;wBAEtB,MAAM,cAAc,GAAc;4BAChC,GAAG,GAAG,CAAC,MAAM;4BACb,GAAI,MAAoB;4BACxB,EAAE,EAAG,GAAG,CAAC,MAAM,CAAC,EAAyB,IAAI,GAAG,CAAC,EAAE;yBACpD,CAAC;wBAEF,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAClC,KAAK,EACL,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,MAAM,EACV,MAAmB,CACpB,CAAC;wBACF,IAAI,MAAM;4BAAE,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;wBAEzC,IAAI,CAAC;4BACH,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,KAAK,CAAC;gCACX,EAAE,EAAE,GAAG,CAAC,EAAE;gCACV,QAAQ,EAAE,cAAc;gCACxB,GAAG,GAAG,CAAC,WAAW;gCAClB,OAAO;6BACR,CAAC,CACH,CAAC;wBACJ,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,IAAI,MAAM;gCAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;4BAC/C,MAAM,KAAK,CAAC;wBACd,CAAC;wBACD,IAAI,MAAM;4BAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;wBAE3C,OAAO,cAAmB,CAAC;oBAC7B,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,UAAU,EAAE,KAAK,EAAE,EACjB,KAAK,EACL,KAAK,EACL,MAAM,GAKP,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,MAAM,GAAG;wBACb,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,iBAAiB;wBACzB,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;qBAC3B,CAAC;oBACF,MAAM,SAAS,GAAG,KAAK,EAAE,IAAoC,EAAE,EAAE;wBAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;4BAC/B,KAAK;4BACL,OAAO;4BACP,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;gCAChC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE;gCAC5B,EAAE,MAAM,EAAE;6BACX,CAAC;yBACH,CAAC,CAAC;wBACH,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACjD,CAAC,CAAC;oBAEF,kEAAkE;oBAClE,mDAAmD;oBACnD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACxB,OAAO,iBAAiB,CAAC;4BACvB,KAAK;4BACL,KAAK;4BACL,KAAK;4BACL,SAAS,EAAE,YAAY;4BACvB,MAAM,EAAE,KAAK;4BACb,SAAS,EAAE,SAAS;yBACrB,CAAC,CAAC;oBACL,CAAC;oBAED,gEAAgE;oBAChE,6DAA6D;oBAC7D,OAAO,iBAAiB,CAAC;wBACvB,KAAK;wBACL,KAAK;wBACL,KAAK;wBACL,SAAS,EAAE,YAAY;wBACvB,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;4BACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gCACnC,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG;oCACpB,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;oCAC5D,CAAC,CAAC,SAAS,CAAC;gCACd,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAChC,CAAC,CAAC,CAAC;4BACH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;4BACjD,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;4BAC5B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;4BACvC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;4BAC9C,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;4BAC9B,8DAA8D;4BAC9D,qDAAqD;4BACrD,MAAM,MAAM,CAAC,SAAS,CACpB,OAAO;iCACJ,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;iCAC1B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CACpC,CAAC;4BACF,OAAO,QAAQ,CAAC;wBAClB,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,EAAE,KAAK,EAAE,EACb,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,wDAAwD;oBACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO;oBAC/B,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;wBACrD,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CACxC,MAAM,CAAC,MAAM,CAAY,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CACpD,CAAC;wBAEF,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACtC,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,CAAC;wBACvB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;4BAAE,OAAO,SAAS,CAAC;wBAErC,MAAM,SAAS,CAAC,GAAG,EAAE,CACnB,MAAM,CAAC,MAAM,CAAC;4BACZ,KAAK;4BACL,EAAE,EAAE,KAAK;4BACT,OAAO;yBACR,CAAC,CACH,CAAC;wBACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC5C,CAAC,CAAC,CAAC;oBACH,IAAI,OAAO;wBAAE,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBACnE,CAAC;gBACD,UAAU,EAAE,KAAK,EAAE,EACjB,KAAK,EACL,KAAK,GAIN,EAAE,EAAE;oBACH,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAErC,oEAAoE;oBACpE,0DAA0D;oBAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC5C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,OAAO,iBAAiB,CAAC;4BACvB,KAAK;4BACL,KAAK;4BACL,KAAK;4BACL,SAAS,EAAE,YAAY;4BACvB,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gCACxB,yDAAyD;gCACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;oCAC/B,KAAK;oCACL,OAAO,EAAE,IAAI;oCACb,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;iCAC9D,CAAC,CAAC;gCACH,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gCACzD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;gCAC9C,MAAM,YAAY,CAAC,OAAO,CACxB,KAAK,EACL,KAAK,EACL,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACnB,GAAG,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;oCAC7B,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;oCACxC,CAAC,CAAC,EAAE,CACP,CACF,CAAC;gCACF,OAAO,QAAQ,CAAC;4BAClB,CAAC;yBACF,CAAC,CAAC;oBACL,CAAC;oBAED,mEAAmE;oBACnE,gEAAgE;oBAChE,kEAAkE;oBAClE,kEAAkE;oBAClE,IAAI,OAAO,GAAG,CAAC,CAAC;oBAChB,MAAM,iBAAiB,GAAG,gBAAgB,CACxC,mBAAmB,EACnB,KAAK,CACN,CAAC;oBACF,IAAI,IAAI,GAAG,CAAC,CAAC;oBACb,OAAO,IAAI,GAAG,eAAe,EAAE,CAAC;wBAC9B,IAAI,MAAqC,CAAC;wBAC1C,IAAI,CAAC;4BACH,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,CAC5B,MAAM,CAAC,aAAa,CAAC;gCACnB,KAAK;gCACL,KAAK;gCACL,SAAS,EAAE,SAAS;gCACpB,OAAO,EAAE,IAAI;6BACd,CAAC,CACH,CAAC;wBACJ,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gCAAE,MAAM,KAAK,CAAC;4BACxC,8DAA8D;4BAC9D,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC;4BAChC,MAAM,iBAAiB,CACrB,KAAK,EACL,kBAAkB,KAAK,iBAAiB,OAAO,QAAQ,CACxD,CAAC;4BACF,SAAS;wBACX,CAAC;wBACD,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;wBAC/B,IAAI,CAAC,MAAM,CAAC,iBAAiB;4BAAE,OAAO,OAAO,CAAC;wBAC9C,IAAI,EAAE,CAAC;oBACT,CAAC;oBACD,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,aAAa,OAAO,gFAAgF,eAAe,SAAS,CACpJ,CAAC;gBACJ,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|