@trokky/trokky 3.1.0 → 3.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/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts +140 -0
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.d.ts.map +1 -0
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js +853 -0
- package/dist/adapters/cloudflare-d1/cloudflare-d1-adapter.js.map +1 -0
- package/dist/adapters/cloudflare-d1/index.d.ts +5 -0
- package/dist/adapters/cloudflare-d1/index.d.ts.map +1 -0
- package/dist/adapters/cloudflare-d1/index.js +12 -0
- package/dist/adapters/cloudflare-d1/index.js.map +1 -0
- package/dist/adapters/cloudflare-d1/rate-limit-store.d.ts +46 -0
- package/dist/adapters/cloudflare-d1/rate-limit-store.d.ts.map +1 -0
- package/dist/adapters/cloudflare-d1/rate-limit-store.js +96 -0
- package/dist/adapters/cloudflare-d1/rate-limit-store.js.map +1 -0
- package/dist/adapters/cloudflare-d1/types.d.ts +69 -0
- package/dist/adapters/cloudflare-d1/types.d.ts.map +1 -0
- package/dist/adapters/cloudflare-d1/types.js +2 -0
- package/dist/adapters/cloudflare-d1/types.js.map +1 -0
- package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.d.ts +86 -0
- package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.d.ts.map +1 -0
- package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.js +493 -0
- package/dist/adapters/cloudflare-r2/cloudflare-r2-adapter.js.map +1 -0
- package/dist/adapters/cloudflare-r2/index.d.ts +3 -0
- package/dist/adapters/cloudflare-r2/index.d.ts.map +1 -0
- package/dist/adapters/cloudflare-r2/index.js +11 -0
- package/dist/adapters/cloudflare-r2/index.js.map +1 -0
- package/dist/adapters/cloudflare-r2/types.d.ts +43 -0
- package/dist/adapters/cloudflare-r2/types.d.ts.map +1 -0
- package/dist/adapters/cloudflare-r2/types.js +2 -0
- package/dist/adapters/cloudflare-r2/types.js.map +1 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts +9 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts.map +1 -1
- package/dist/adapters/filesystem-data/filesystem-data-adapter.js +28 -0
- package/dist/adapters/filesystem-data/filesystem-data-adapter.js.map +1 -1
- package/dist/adapters/postgres-data/postgres-data-adapter.d.ts +9 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.d.ts.map +1 -1
- package/dist/adapters/postgres-data/postgres-data-adapter.js +59 -0
- package/dist/adapters/postgres-data/postgres-data-adapter.js.map +1 -1
- package/dist/core/core/engine.d.ts +10 -0
- package/dist/core/core/engine.d.ts.map +1 -1
- package/dist/core/core/engine.js +16 -2
- package/dist/core/core/engine.js.map +1 -1
- package/dist/core/media/image-processor.d.ts.map +1 -1
- package/dist/core/media/image-processor.js +5 -13
- package/dist/core/media/image-processor.js.map +1 -1
- package/dist/core/media/processors/sharp.d.ts.map +1 -1
- package/dist/core/media/processors/sharp.js +13 -2
- package/dist/core/media/processors/sharp.js.map +1 -1
- package/dist/core/media/processors/types.d.ts +1 -1
- package/dist/core/media/processors/types.d.ts.map +1 -1
- package/dist/core/security/rate-limit-store.d.ts +56 -0
- package/dist/core/security/rate-limit-store.d.ts.map +1 -0
- package/dist/core/security/rate-limit-store.js +55 -0
- package/dist/core/security/rate-limit-store.js.map +1 -0
- package/dist/core/security/rate-limiter.d.ts +39 -2
- package/dist/core/security/rate-limiter.d.ts.map +1 -1
- package/dist/core/security/rate-limiter.js +52 -20
- package/dist/core/security/rate-limiter.js.map +1 -1
- package/dist/core/services/media-service.d.ts +34 -0
- package/dist/core/services/media-service.d.ts.map +1 -1
- package/dist/core/services/media-service.js +172 -120
- package/dist/core/services/media-service.js.map +1 -1
- package/dist/core/services/user-service.d.ts +42 -0
- package/dist/core/services/user-service.d.ts.map +1 -1
- package/dist/core/services/user-service.js +114 -1
- package/dist/core/services/user-service.js.map +1 -1
- package/dist/core/types/storage-adapters.d.ts +18 -0
- package/dist/core/types/storage-adapters.d.ts.map +1 -1
- package/dist/core/utils/retry.d.ts +45 -0
- package/dist/core/utils/retry.d.ts.map +1 -0
- package/dist/core/utils/retry.js +47 -0
- package/dist/core/utils/retry.js.map +1 -0
- package/dist/i18n/config.d.ts +32 -0
- package/dist/i18n/config.d.ts.map +1 -1
- package/dist/i18n/locales/en/auth.json +16 -0
- package/dist/i18n/locales/fr/auth.json +16 -0
- package/dist/integrations/workers/adapter.d.ts +28 -0
- package/dist/integrations/workers/adapter.d.ts.map +1 -0
- package/dist/integrations/workers/adapter.js +111 -0
- package/dist/integrations/workers/adapter.js.map +1 -0
- package/dist/integrations/workers/index.d.ts +22 -0
- package/dist/integrations/workers/index.d.ts.map +1 -0
- package/dist/integrations/workers/index.js +60 -0
- package/dist/integrations/workers/index.js.map +1 -0
- package/dist/routes/auth/auth-flow-store.d.ts +17 -0
- package/dist/routes/auth/auth-flow-store.d.ts.map +1 -1
- package/dist/routes/auth/auth-flow-store.js +27 -0
- package/dist/routes/auth/auth-flow-store.js.map +1 -1
- package/dist/routes/auth/oauth.d.ts.map +1 -1
- package/dist/routes/auth/oauth.js +5 -12
- package/dist/routes/auth/oauth.js.map +1 -1
- package/dist/routes/auth/passkey.d.ts.map +1 -1
- package/dist/routes/auth/passkey.js +5 -8
- package/dist/routes/auth/passkey.js.map +1 -1
- package/dist/routes/handlers/auth.d.ts +14 -0
- package/dist/routes/handlers/auth.d.ts.map +1 -1
- package/dist/routes/handlers/auth.js +55 -0
- package/dist/routes/handlers/auth.js.map +1 -1
- package/dist/structure/validation/schemas.d.ts +60 -60
- package/package.json +20 -1
- package/dist/core/media/processors/cloudflare-images.d.ts +0 -83
- package/dist/core/media/processors/cloudflare-images.d.ts.map +0 -1
- package/dist/core/media/processors/cloudflare-images.js +0 -241
- package/dist/core/media/processors/cloudflare-images.js.map +0 -1
- package/dist/core/media/processors/cloudflare-transform-store.d.ts +0 -127
- package/dist/core/media/processors/cloudflare-transform-store.d.ts.map +0 -1
- package/dist/core/media/processors/cloudflare-transform-store.js +0 -237
- package/dist/core/media/processors/cloudflare-transform-store.js.map +0 -1
- package/dist/core/media/processors/cloudflare-transformations.d.ts +0 -81
- package/dist/core/media/processors/cloudflare-transformations.d.ts.map +0 -1
- package/dist/core/media/processors/cloudflare-transformations.js +0 -144
- package/dist/core/media/processors/cloudflare-transformations.js.map +0 -1
- package/dist/core/media/processors/workers-images.d.ts +0 -112
- package/dist/core/media/processors/workers-images.d.ts.map +0 -1
- package/dist/core/media/processors/workers-images.js +0 -257
- package/dist/core/media/processors/workers-images.js.map +0 -1
|
@@ -1,48 +1,80 @@
|
|
|
1
1
|
import { RateLimitError } from '../errors/index.js';
|
|
2
|
+
import { MemoryRateLimitStore } from './rate-limit-store.js';
|
|
2
3
|
export class RateLimiter {
|
|
3
|
-
operationCounts = new Map();
|
|
4
4
|
defaultConfig = {
|
|
5
5
|
windowMs: 60 * 1000, // 1 minute
|
|
6
6
|
maxRequests: 1000
|
|
7
7
|
};
|
|
8
|
+
config;
|
|
9
|
+
store;
|
|
10
|
+
memoryStore;
|
|
11
|
+
leaseSize;
|
|
12
|
+
leases = new Map();
|
|
8
13
|
constructor(config = {}) {
|
|
9
14
|
this.config = { ...this.defaultConfig, ...config };
|
|
15
|
+
const store = config.store ?? new MemoryRateLimitStore();
|
|
16
|
+
this.store = store;
|
|
17
|
+
// Kept typed so cleanup() can still prune, which only makes sense in memory.
|
|
18
|
+
this.memoryStore = store instanceof MemoryRateLimitStore ? store : null;
|
|
19
|
+
this.leaseSize = Math.max(1, config.leaseSize ?? 1);
|
|
10
20
|
}
|
|
11
|
-
config;
|
|
12
21
|
async checkRateLimit(operation, context) {
|
|
13
|
-
const key = this.config.keyGenerator
|
|
14
|
-
|
|
15
|
-
: operation;
|
|
22
|
+
const key = this.config.keyGenerator ? this.config.keyGenerator(operation, context) : operation;
|
|
23
|
+
const { windowMs, maxRequests } = this.config.limits?.[operation] ?? this.config;
|
|
16
24
|
const now = Date.now();
|
|
17
|
-
const windowStart = Math.floor(now /
|
|
18
|
-
const
|
|
19
|
-
if (
|
|
20
|
-
|
|
21
|
-
this.operationCounts.set(key, { count: 1, windowStart });
|
|
25
|
+
const windowStart = Math.floor(now / windowMs) * windowMs;
|
|
26
|
+
const lease = this.leases.get(key);
|
|
27
|
+
if (lease && lease.windowStart === windowStart && lease.remaining > 0) {
|
|
28
|
+
lease.remaining -= 1;
|
|
22
29
|
return;
|
|
23
30
|
}
|
|
24
|
-
|
|
31
|
+
const granted = await this.store.reserve({
|
|
32
|
+
key,
|
|
33
|
+
windowStart,
|
|
34
|
+
windowMs,
|
|
35
|
+
want: this.leaseSize,
|
|
36
|
+
max: maxRequests
|
|
37
|
+
});
|
|
38
|
+
if (granted <= 0) {
|
|
39
|
+
// A spent lease from this window must not be resurrected by a later call.
|
|
40
|
+
this.leases.set(key, { windowStart, remaining: 0 });
|
|
25
41
|
throw new RateLimitError(operation);
|
|
26
42
|
}
|
|
27
|
-
|
|
43
|
+
// One unit pays for this request; the rest is credit for the next ones.
|
|
44
|
+
this.leases.set(key, { windowStart, remaining: granted - 1 });
|
|
28
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Drop bookkeeping for windows that are well past. Only meaningful for the
|
|
48
|
+
* in-memory store; a shared store expires its own rows.
|
|
49
|
+
*/
|
|
29
50
|
cleanup() {
|
|
30
51
|
const now = Date.now();
|
|
31
|
-
const cutoff = now - this.config.windowMs * 2;
|
|
32
|
-
for (const [key,
|
|
33
|
-
if (
|
|
34
|
-
this.
|
|
52
|
+
const cutoff = now - this.config.windowMs * 2;
|
|
53
|
+
for (const [key, lease] of this.leases.entries()) {
|
|
54
|
+
if (lease.windowStart < cutoff) {
|
|
55
|
+
this.leases.delete(key);
|
|
35
56
|
}
|
|
36
57
|
}
|
|
58
|
+
this.memoryStore?.cleanup(this.config.windowMs, now);
|
|
37
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Requests left in the current window, as far as this instance can tell.
|
|
62
|
+
* With a shared store and a lease larger than one this is a local view: it
|
|
63
|
+
* counts what this instance still holds, not what every instance has spent.
|
|
64
|
+
*/
|
|
38
65
|
getRemainingRequests(operation) {
|
|
39
66
|
const now = Date.now();
|
|
40
67
|
const windowStart = Math.floor(now / this.config.windowMs) * this.config.windowMs;
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
68
|
+
if (this.memoryStore) {
|
|
69
|
+
const used = this.memoryStore.used(operation, windowStart);
|
|
70
|
+
const held = this.leases.get(operation);
|
|
71
|
+
const unspent = held && held.windowStart === windowStart ? held.remaining : 0;
|
|
72
|
+
// `used` counts leased units, some of which are still in hand.
|
|
73
|
+
return Math.max(0, this.config.maxRequests - used + unspent);
|
|
44
74
|
}
|
|
45
|
-
|
|
75
|
+
const lease = this.leases.get(operation);
|
|
76
|
+
return lease && lease.windowStart === windowStart ? lease.remaining : this.config.maxRequests;
|
|
46
77
|
}
|
|
47
78
|
}
|
|
79
|
+
export { MemoryRateLimitStore } from './rate-limit-store.js';
|
|
48
80
|
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/core/security/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/core/security/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,21 @@ export interface MediaServiceDependencies {
|
|
|
15
15
|
eventsEnabled: boolean;
|
|
16
16
|
getImageProcessor: () => ImageProcessor;
|
|
17
17
|
}
|
|
18
|
+
/** One step of media processing that did not succeed, even after retries. */
|
|
19
|
+
export interface VariantFailure {
|
|
20
|
+
stage: 'process' | 'save-variant' | 'persist-metadata';
|
|
21
|
+
variant?: string;
|
|
22
|
+
error: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* What happened while generating variants, recorded on the media file when it was not clean.
|
|
26
|
+
* Its absence means every variant was generated and stored.
|
|
27
|
+
*/
|
|
28
|
+
export interface ImageProcessingReport {
|
|
29
|
+
status: 'partial' | 'failed';
|
|
30
|
+
failures: VariantFailure[];
|
|
31
|
+
failedAt: string;
|
|
32
|
+
}
|
|
18
33
|
/**
|
|
19
34
|
* Media upload, retrieval, image variants and filename sanitization.
|
|
20
35
|
*/
|
|
@@ -22,6 +37,25 @@ export declare class MediaService {
|
|
|
22
37
|
private readonly deps;
|
|
23
38
|
constructor(deps: MediaServiceDependencies);
|
|
24
39
|
uploadMedia(file: File): Promise<MediaFile>;
|
|
40
|
+
/**
|
|
41
|
+
* Retry policy for the remote-backed steps of media processing.
|
|
42
|
+
*
|
|
43
|
+
* Cloudflare's Images service fails a small share of calls transiently — measured at roughly
|
|
44
|
+
* one in fifteen for a 6MB JPEG — and every one of those used to cost a thumbnail silently.
|
|
45
|
+
* Input the service will never accept is not retried: that is a permanent failure and should
|
|
46
|
+
* surface immediately rather than after three waits.
|
|
47
|
+
*/
|
|
48
|
+
private retryOptions;
|
|
49
|
+
/**
|
|
50
|
+
* Generate every variant for an image and write them to storage.
|
|
51
|
+
*
|
|
52
|
+
* Shared by upload and regeneration so both get the same retries and the same reporting. A
|
|
53
|
+
* failure never throws: the original file is already stored and is what the caller actually
|
|
54
|
+
* uploaded. But a failure is never swallowed either — it comes back in `report`, which the
|
|
55
|
+
* caller attaches to the media record, so an image with missing variants says so instead of
|
|
56
|
+
* looking complete.
|
|
57
|
+
*/
|
|
58
|
+
private generateVariants;
|
|
25
59
|
getMedia(id: string): Promise<MediaFile | null>;
|
|
26
60
|
updateMedia(id: string, metadata: Record<string, any>): Promise<MediaFile>;
|
|
27
61
|
getMediaContent(id: string): Promise<ArrayBuffer | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,6BAA6B,CAAA;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGnD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,SAAS,EAET,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,EAAE,mBAAmB,CAAA;IACjC,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,cAAc,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,iBAAiB,EAAE,MAAM,cAAc,CAAA;CACxC;AAGD,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,SAAS,GAAG,cAAc,GAAG,kBAAkB,CAAA;IACtD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAA;IAC5B,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;CACjB;AAQD;;GAEG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,wBAAwB;IAG9C,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;IA2FxD;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAqBpB;;;;;;;;OAQG;YACW,gBAAgB;IAsFjB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAY/C,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAuB1E,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAYxD,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC;IAalF,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtC,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA0F7D,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAIpD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAKlD,4BAA4B,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAiDhD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAgC1C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAIlD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SecurityValidator } from '../security/validation.js';
|
|
2
|
+
import { withRetry } from '../utils/retry.js';
|
|
2
3
|
import { mediaUploaded, mediaDeleted } from '../events/index.js';
|
|
3
4
|
import { DocumentNotFoundError, InvalidInputError } from '../errors/index.js';
|
|
4
5
|
/**
|
|
@@ -29,90 +30,52 @@ export class MediaService {
|
|
|
29
30
|
const mediaFile = await this.deps.mediaStorage.uploadFile(file, metadata);
|
|
30
31
|
// Process image if it's an image file
|
|
31
32
|
if (file.type.startsWith('image/')) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
height: variantData.height,
|
|
50
|
-
format: variantData.format,
|
|
51
|
-
size: variantData.size
|
|
52
|
-
};
|
|
53
|
-
this.deps.logger.info('Variant file saved directly', {
|
|
54
|
-
parentId: metadata.id,
|
|
55
|
-
variantName,
|
|
56
|
-
path: variantPath
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
// Fallback: just store metadata without physical files for now
|
|
61
|
-
savedVariants[variantName] = {
|
|
62
|
-
url: variantData.url,
|
|
63
|
-
width: variantData.width,
|
|
64
|
-
height: variantData.height,
|
|
65
|
-
format: variantData.format,
|
|
66
|
-
size: variantData.size
|
|
67
|
-
};
|
|
68
|
-
this.deps.logger.warn('Storage adapter does not support variant files - storing metadata only', {
|
|
69
|
-
parentId: metadata.id,
|
|
70
|
-
variantName
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch (variantError) {
|
|
75
|
-
this.deps.logger.warn('Failed to save variant file', {
|
|
76
|
-
parentId: metadata.id,
|
|
77
|
-
variantName,
|
|
78
|
-
error: variantError instanceof Error ? variantError.message : 'Unknown error'
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// Store processed image metadata in the media file
|
|
84
|
-
mediaFile.metadata = {
|
|
85
|
-
...mediaFile.metadata,
|
|
86
|
-
imageVariants: savedVariants,
|
|
87
|
-
originalDimensions: {
|
|
88
|
-
width: processedImage.original.width,
|
|
89
|
-
height: processedImage.original.height
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
// Save the updated metadata back to storage
|
|
33
|
+
const outcome = await this.generateVariants(metadata.id, file, {
|
|
34
|
+
id: metadata.id,
|
|
35
|
+
filename: metadata.filename,
|
|
36
|
+
// Use filename as fallback since we don't have the full path here
|
|
37
|
+
path: metadata.filename
|
|
38
|
+
});
|
|
39
|
+
mediaFile.metadata = {
|
|
40
|
+
...mediaFile.metadata,
|
|
41
|
+
imageVariants: outcome.variants,
|
|
42
|
+
...(outcome.originalDimensions ? { originalDimensions: outcome.originalDimensions } : {}),
|
|
43
|
+
...(outcome.report ? { imageProcessing: outcome.report } : {})
|
|
44
|
+
};
|
|
45
|
+
// Persist the variant metadata. Without this the variant files exist in storage and
|
|
46
|
+
// nothing references them, which is invisible until someone notices missing thumbnails —
|
|
47
|
+
// so it retries, and a final failure is reported rather than logged and forgotten.
|
|
48
|
+
if (this.deps.mediaStorage.updateFile) {
|
|
49
|
+
const update = this.deps.mediaStorage.updateFile.bind(this.deps.mediaStorage);
|
|
93
50
|
try {
|
|
94
|
-
|
|
95
|
-
await this.deps.mediaStorage.updateFile(mediaFile.id, mediaFile.metadata);
|
|
96
|
-
}
|
|
51
|
+
await withRetry(() => update(mediaFile.id, mediaFile.metadata), this.retryOptions('persist image variant metadata', { fileId: metadata.id }));
|
|
97
52
|
this.deps.logger.info('Image variants metadata saved', {
|
|
98
53
|
fileId: metadata.id,
|
|
99
|
-
variantCount: Object.keys(
|
|
54
|
+
variantCount: Object.keys(outcome.variants).length
|
|
100
55
|
});
|
|
101
56
|
}
|
|
102
57
|
catch (updateError) {
|
|
103
|
-
|
|
58
|
+
const message = updateError instanceof Error ? updateError.message : 'Unknown error';
|
|
59
|
+
// The upload itself succeeded and the original is stored, so throwing here would tell
|
|
60
|
+
// the caller to re-upload a file that is already safe. Report it on the record the
|
|
61
|
+
// caller receives instead, and at error level rather than as a warning.
|
|
62
|
+
this.deps.logger.error('Image variants metadata could not be saved', {
|
|
104
63
|
fileId: metadata.id,
|
|
105
|
-
error:
|
|
64
|
+
error: message
|
|
106
65
|
});
|
|
66
|
+
mediaFile.metadata = {
|
|
67
|
+
...mediaFile.metadata,
|
|
68
|
+
imageProcessing: {
|
|
69
|
+
status: 'failed',
|
|
70
|
+
failures: [
|
|
71
|
+
...(outcome.report?.failures ?? []),
|
|
72
|
+
{ stage: 'persist-metadata', error: message }
|
|
73
|
+
],
|
|
74
|
+
failedAt: new Date().toISOString()
|
|
75
|
+
}
|
|
76
|
+
};
|
|
107
77
|
}
|
|
108
78
|
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
// Log error but don't fail the upload - image processing is optional
|
|
111
|
-
this.deps.logger.warn('Image processing failed', {
|
|
112
|
-
fileId: metadata.id,
|
|
113
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
79
|
}
|
|
117
80
|
// Emit media uploaded event
|
|
118
81
|
if (this.deps.eventsEnabled) {
|
|
@@ -128,6 +91,113 @@ export class MediaService {
|
|
|
128
91
|
}
|
|
129
92
|
return mediaFile;
|
|
130
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Retry policy for the remote-backed steps of media processing.
|
|
96
|
+
*
|
|
97
|
+
* Cloudflare's Images service fails a small share of calls transiently — measured at roughly
|
|
98
|
+
* one in fifteen for a 6MB JPEG — and every one of those used to cost a thumbnail silently.
|
|
99
|
+
* Input the service will never accept is not retried: that is a permanent failure and should
|
|
100
|
+
* surface immediately rather than after three waits.
|
|
101
|
+
*/
|
|
102
|
+
retryOptions(operation, context) {
|
|
103
|
+
return {
|
|
104
|
+
attempts: 3,
|
|
105
|
+
isRetryable: (error) => {
|
|
106
|
+
const message = error instanceof Error ? error.message.toLowerCase() : String(error).toLowerCase();
|
|
107
|
+
const permanent = [
|
|
108
|
+
'unsupported', 'invalid', 'too large', 'not an image', 'unsupported format', 'malformed'
|
|
109
|
+
];
|
|
110
|
+
return !permanent.some(marker => message.includes(marker));
|
|
111
|
+
},
|
|
112
|
+
onRetry: ({ error, attempt, delayMs }) => {
|
|
113
|
+
this.deps.logger.warn(`Retrying: ${operation}`, {
|
|
114
|
+
...context,
|
|
115
|
+
attempt,
|
|
116
|
+
delayMs,
|
|
117
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Generate every variant for an image and write them to storage.
|
|
124
|
+
*
|
|
125
|
+
* Shared by upload and regeneration so both get the same retries and the same reporting. A
|
|
126
|
+
* failure never throws: the original file is already stored and is what the caller actually
|
|
127
|
+
* uploaded. But a failure is never swallowed either — it comes back in `report`, which the
|
|
128
|
+
* caller attaches to the media record, so an image with missing variants says so instead of
|
|
129
|
+
* looking complete.
|
|
130
|
+
*/
|
|
131
|
+
async generateVariants(id, file, metadata) {
|
|
132
|
+
const failures = [];
|
|
133
|
+
let processedImage;
|
|
134
|
+
try {
|
|
135
|
+
processedImage = await withRetry(() => this.deps.getImageProcessor().processImage(file, metadata), this.retryOptions('process image', { fileId: id }));
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
139
|
+
this.deps.logger.error('Image processing failed after retries', { fileId: id, error: message });
|
|
140
|
+
return {
|
|
141
|
+
variants: {},
|
|
142
|
+
report: {
|
|
143
|
+
status: 'failed',
|
|
144
|
+
failures: [{ stage: 'process', error: message }],
|
|
145
|
+
failedAt: new Date().toISOString()
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const variants = {};
|
|
150
|
+
const saveVariantFile = this.deps.mediaStorage.saveVariantFile?.bind(this.deps.mediaStorage);
|
|
151
|
+
for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
|
|
152
|
+
if (!variantData.buffer)
|
|
153
|
+
continue;
|
|
154
|
+
if (!saveVariantFile) {
|
|
155
|
+
// No variant storage: keep the processor's own URL, which is all there is to keep.
|
|
156
|
+
variants[variantName] = {
|
|
157
|
+
url: variantData.url,
|
|
158
|
+
width: variantData.width,
|
|
159
|
+
height: variantData.height,
|
|
160
|
+
format: variantData.format,
|
|
161
|
+
size: variantData.size
|
|
162
|
+
};
|
|
163
|
+
this.deps.logger.warn('Storage adapter does not support variant files - storing metadata only', {
|
|
164
|
+
parentId: id,
|
|
165
|
+
variantName
|
|
166
|
+
});
|
|
167
|
+
continue;
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
const variantPath = await withRetry(() => saveVariantFile(id, variantName, variantData.buffer, variantData.format), this.retryOptions('save variant file', { parentId: id, variantName }));
|
|
171
|
+
// Store variant info without URL - let frontend handle URL construction
|
|
172
|
+
variants[variantName] = {
|
|
173
|
+
width: variantData.width,
|
|
174
|
+
height: variantData.height,
|
|
175
|
+
format: variantData.format,
|
|
176
|
+
size: variantData.size
|
|
177
|
+
};
|
|
178
|
+
this.deps.logger.info('Variant file saved', { parentId: id, variantName, path: variantPath });
|
|
179
|
+
}
|
|
180
|
+
catch (variantError) {
|
|
181
|
+
const message = variantError instanceof Error ? variantError.message : 'Unknown error';
|
|
182
|
+
this.deps.logger.error('Variant file could not be saved after retries', {
|
|
183
|
+
parentId: id,
|
|
184
|
+
variantName,
|
|
185
|
+
error: message
|
|
186
|
+
});
|
|
187
|
+
failures.push({ stage: 'save-variant', variant: variantName, error: message });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
variants,
|
|
192
|
+
originalDimensions: {
|
|
193
|
+
width: processedImage.original.width,
|
|
194
|
+
height: processedImage.original.height
|
|
195
|
+
},
|
|
196
|
+
report: failures.length === 0
|
|
197
|
+
? undefined
|
|
198
|
+
: { status: 'partial', failures, failedAt: new Date().toISOString() }
|
|
199
|
+
};
|
|
200
|
+
}
|
|
131
201
|
async getMedia(id) {
|
|
132
202
|
if (this.deps.rateLimiter) {
|
|
133
203
|
await this.deps.rateLimiter.checkRateLimit('getMedia');
|
|
@@ -235,69 +305,51 @@ export class MediaService {
|
|
|
235
305
|
const file = new File([new Uint8Array(fileContent)], mediaFile.filename, {
|
|
236
306
|
type: mediaFile.contentType
|
|
237
307
|
});
|
|
238
|
-
//
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
path: mediaFile.metadata?.path || mediaFile.filename
|
|
243
|
-
});
|
|
244
|
-
// Delete existing variants first
|
|
308
|
+
// Delete existing variants first. A failure here is not fatal — the names are about to be
|
|
309
|
+
// overwritten anyway — but it is reported rather than dropped, because leftovers of a
|
|
310
|
+
// format no longer generated would linger in storage.
|
|
311
|
+
const staleVariantFailures = [];
|
|
245
312
|
if (this.deps.mediaStorage.deleteVariantFiles) {
|
|
313
|
+
const deleteVariantFiles = this.deps.mediaStorage.deleteVariantFiles.bind(this.deps.mediaStorage);
|
|
246
314
|
try {
|
|
247
|
-
await this.
|
|
315
|
+
await withRetry(() => deleteVariantFiles(id), this.retryOptions('delete existing variants', { id }));
|
|
248
316
|
this.deps.logger.info('Existing variants deleted', { id });
|
|
249
317
|
}
|
|
250
318
|
catch (deleteError) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
// Save new variant files
|
|
255
|
-
const savedVariants = {};
|
|
256
|
-
for (const [variantName, variantData] of Object.entries(processedImage.variants)) {
|
|
257
|
-
if (variantData.buffer) {
|
|
258
|
-
try {
|
|
259
|
-
if (this.deps.mediaStorage.saveVariantFile) {
|
|
260
|
-
const variantPath = await this.deps.mediaStorage.saveVariantFile(id, variantName, variantData.buffer, variantData.format);
|
|
261
|
-
// Store variant info without URL - let frontend handle URL construction
|
|
262
|
-
savedVariants[variantName] = {
|
|
263
|
-
width: variantData.width,
|
|
264
|
-
height: variantData.height,
|
|
265
|
-
format: variantData.format,
|
|
266
|
-
size: variantData.size
|
|
267
|
-
};
|
|
268
|
-
this.deps.logger.info('New variant saved', {
|
|
269
|
-
parentId: id,
|
|
270
|
-
variantName,
|
|
271
|
-
path: variantPath
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
catch (variantError) {
|
|
276
|
-
this.deps.logger.warn('Failed to save new variant', {
|
|
277
|
-
parentId: id,
|
|
278
|
-
variantName,
|
|
279
|
-
error: variantError instanceof Error ? variantError.message : 'Unknown error'
|
|
280
|
-
});
|
|
281
|
-
}
|
|
319
|
+
const message = deleteError instanceof Error ? deleteError.message : 'Unknown error';
|
|
320
|
+
this.deps.logger.error('Existing variants could not be deleted after retries', { id, error: message });
|
|
321
|
+
staleVariantFailures.push({ stage: 'save-variant', error: `stale variants left in place: ${message}` });
|
|
282
322
|
}
|
|
283
323
|
}
|
|
324
|
+
// The same generation path as upload, so retries and reporting cannot drift apart.
|
|
325
|
+
const outcome = await this.generateVariants(id, file, {
|
|
326
|
+
id: mediaFile.id,
|
|
327
|
+
filename: mediaFile.filename,
|
|
328
|
+
path: mediaFile.metadata?.path || mediaFile.filename
|
|
329
|
+
});
|
|
330
|
+
const failures = [...staleVariantFailures, ...(outcome.report?.failures ?? [])];
|
|
284
331
|
// Update metadata with new variants
|
|
285
332
|
const updatedMetadata = {
|
|
286
333
|
...mediaFile.metadata,
|
|
287
|
-
imageVariants:
|
|
288
|
-
originalDimensions: {
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
334
|
+
imageVariants: outcome.variants,
|
|
335
|
+
...(outcome.originalDimensions ? { originalDimensions: outcome.originalDimensions } : {}),
|
|
336
|
+
imageProcessing: failures.length === 0
|
|
337
|
+
? undefined
|
|
338
|
+
: {
|
|
339
|
+
status: outcome.report?.status ?? 'partial',
|
|
340
|
+
failures,
|
|
341
|
+
failedAt: new Date().toISOString()
|
|
342
|
+
}
|
|
292
343
|
};
|
|
293
344
|
// Save updated metadata
|
|
294
345
|
const updatedMediaFile = await this.deps.mediaStorage.updateFile?.(id, updatedMetadata);
|
|
295
346
|
if (!updatedMediaFile) {
|
|
296
347
|
throw new Error('Failed to update media file metadata');
|
|
297
348
|
}
|
|
298
|
-
this.deps.logger.info('Variants regenerated
|
|
349
|
+
this.deps.logger.info('Variants regenerated', {
|
|
299
350
|
id,
|
|
300
|
-
variantCount: Object.keys(
|
|
351
|
+
variantCount: Object.keys(outcome.variants).length,
|
|
352
|
+
failureCount: failures.length
|
|
301
353
|
});
|
|
302
354
|
return updatedMediaFile;
|
|
303
355
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-service.js","sourceRoot":"","sources":["../../../src/core/services/media-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,OAAO,EAAE,SAAS,EAAqB,MAAM,mBAAmB,CAAA;AAIhE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AA6C7E;;GAEG;AACH,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,IAA8B;QAA9B,SAAI,GAAJ,IAAI,CAA0B;IAAG,CAAC;IAE/D,mBAAmB;IACZ,KAAK,CAAC,WAAW,CAAC,IAAU;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAA;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YACvD,QAAQ,EAAE,iBAAiB;YAC3B,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;SACpD,CAAA;QAED,0BAA0B;QAC1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAEzE,sCAAsC;QACtC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE;gBAC7D,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,kEAAkE;gBAClE,IAAI,EAAE,QAAQ,CAAC,QAAQ;aACxB,CAAC,CAAA;YAEF,SAAS,CAAC,QAAQ,GAAG;gBACnB,GAAG,SAAS,CAAC,QAAQ;gBACrB,aAAa,EAAE,OAAO,CAAC,QAAQ;gBAC/B,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,CAAA;YAED,oFAAoF;YACpF,yFAAyF;YACzF,mFAAmF;YACnF,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBAC7E,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,QAAS,CAAC,EAAE,IAAI,CAAC,YAAY,CAChF,gCAAgC,EAChC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,CACxB,CAAC,CAAA;oBACF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;wBACrD,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM;qBACnD,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,MAAM,OAAO,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;oBACpF,sFAAsF;oBACtF,mFAAmF;oBACnF,wEAAwE;oBACxE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,EAAE;wBACnE,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,KAAK,EAAE,OAAO;qBACf,CAAC,CAAA;oBACF,SAAS,CAAC,QAAQ,GAAG;wBACnB,GAAG,SAAS,CAAC,QAAQ;wBACrB,eAAe,EAAE;4BACf,MAAM,EAAE,QAAiB;4BACzB,QAAQ,EAAE;gCACR,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;gCACnC,EAAE,KAAK,EAAE,kBAA2B,EAAE,KAAK,EAAE,OAAO,EAAE;6BACvD;4BACD,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACnC;qBACF,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAA;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;oBAC3D,KAAK;oBACL,MAAM,EAAE,SAAS,CAAC,EAAE;iBACrB,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAGD;;;;;;;OAOG;IACK,YAAY,CAAC,SAAiB,EAAE,OAAgC;QACtE,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;gBAC9B,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;gBAClG,MAAM,SAAS,GAAG;oBAChB,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW;iBACzF,CAAA;gBACD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;YAC5D,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,SAAS,EAAE,EAAE;oBAC9C,GAAG,OAAO;oBACV,OAAO;oBACP,OAAO;oBACP,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAA;YACJ,CAAC;SACF,CAAA;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,KAAK,CAAC,gBAAgB,CAC5B,EAAU,EACV,IAAU,EACV,QAAwD;QAExD,MAAM,QAAQ,GAAqB,EAAE,CAAA;QAErC,IAAI,cAAc,CAAA;QAClB,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,SAAS,CAC9B,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EAChE,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACnD,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YACxE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YAC/F,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE;oBACN,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;oBAChD,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACnC;aACF,CAAA;QACH,CAAC;QAED,MAAM,QAAQ,GAA4B,EAAE,CAAA;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAE5F,KAAK,MAAM,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAsC,EAAE,CAAC;YACtH,IAAI,CAAC,WAAW,CAAC,MAAM;gBAAE,SAAQ;YAEjC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,mFAAmF;gBACnF,QAAQ,CAAC,WAAW,CAAC,GAAG;oBACtB,GAAG,EAAE,WAAW,CAAC,GAAG;oBACpB,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;iBACvB,CAAA;gBACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wEAAwE,EAAE;oBAC9F,QAAQ,EAAE,EAAE;oBACZ,WAAW;iBACZ,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,SAAS,CACjC,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,CAAC,MAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/E,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CACtE,CAAA;gBAED,wEAAwE;gBACxE,QAAQ,CAAC,WAAW,CAAC,GAAG;oBACtB,KAAK,EAAE,WAAW,CAAC,KAAK;oBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;iBACvB,CAAA;gBAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAA;YAC/F,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;gBACtF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE;oBACtE,QAAQ,EAAE,EAAE;oBACZ,WAAW;oBACX,KAAK,EAAE,OAAO;iBACf,CAAC,CAAA;gBACF,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;YAChF,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ;YACR,kBAAkB,EAAE;gBAClB,KAAK,EAAE,cAAc,CAAC,QAAQ,CAAC,KAAK;gBACpC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM;aACvC;YACD,MAAM,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAC3B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;SACxE,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,EAAU;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACjD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,QAA6B;QAChE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAClE,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9D,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,EAAU;QACrC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;QAC/D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAA6C;QAClE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QACzD,CAAC;QAED,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QACnE,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;IAC9D,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAU;QACjC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9B,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAC1C,CAAC;QAED,wBAAwB;QACxB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAC9C,CAAC;QAED,yCAAyC;QACzC,IAAI,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uEAAuE;gBACvE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;oBACrD,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QAE3C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC,CAAA;YACrE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;oBAC1D,KAAK;oBACL,MAAM,EAAE,EAAE;iBACX,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,EAAU;QAC7C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAA;YAEtE,8BAA8B;YAC9B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAC1D,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAA;YACvD,CAAC;YAED,8BAA8B;YAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,iBAAiB,CAAC,wDAAwD,EAAE,aAAa,CAAC,CAAA;YACtG,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;YAE5F,gCAAgC;YAChC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YACnE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACzD,CAAC;YAED,0DAA0D;YAC1D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE;gBACvE,IAAI,EAAE,SAAS,CAAC,WAAW;aAC5B,CAAC,CAAA;YAEF,0FAA0F;YAC1F,sFAAsF;YACtF,sDAAsD;YACtD,MAAM,oBAAoB,GAAqB,EAAE,CAAA;YACjD,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;gBAC9C,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;gBACjG,IAAI,CAAC;oBACH,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,0BAA0B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;oBACpG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;gBAC5D,CAAC;gBAAC,OAAO,WAAW,EAAE,CAAC;oBACrB,MAAM,OAAO,GAAG,WAAW,YAAY,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;oBACpF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sDAAsD,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;oBACtG,oBAAoB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,iCAAiC,OAAO,EAAE,EAAE,CAAC,CAAA;gBACzG,CAAC;YACH,CAAC;YAED,mFAAmF;YACnF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE;gBACpD,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,IAAI,EAAG,SAAS,CAAC,QAAgB,EAAE,IAAI,IAAI,SAAS,CAAC,QAAQ;aAC9D,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,CAAC,GAAG,oBAAoB,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAA;YAE/E,oCAAoC;YACpC,MAAM,eAAe,GAAG;gBACtB,GAAG,SAAS,CAAC,QAAQ;gBACrB,aAAa,EAAE,OAAO,CAAC,QAAQ;gBAC/B,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzF,eAAe,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;oBACpC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC;wBACE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,SAAS;wBAC3C,QAAQ;wBACR,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACnC;aACN,CAAA;YAED,wBAAwB;YACxB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,CAAA;YACvF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACzD,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAC5C,EAAE;gBACF,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM;gBAClD,YAAY,EAAE,QAAQ,CAAC,MAAM;aAC9B,CAAC,CAAA;YAEF,OAAO,gBAAgB,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,EAAE;gBACtD,EAAE;gBACF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC,CAAA;YACF,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,OAAe,EAAE,WAAoB;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACxE,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAA;IACtC,CAAC;IAED,kBAAkB;IACX,4BAA4B,CAAC,IAAU;QAC5C,6CAA6C;QAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAA;QAC1D,MAAM,OAAO,GAAG,eAAe,EAAE,WAAW,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA,CAAC,gBAAgB;QACpF,MAAM,YAAY,GAAG,eAAe,EAAE,YAAY,IAAI;YACpD,SAAS;YACT,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe;YACrE,QAAQ;YACR,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW;YACnD,4DAA4D;YAC5D,YAAY,EAAQ,0BAA0B;YAC9C,WAAW,EAAS,8BAA8B;YAClD,WAAW,EAAS,MAAM;YAC1B,YAAY,EAAQ,8BAA8B;YAClD,WAAW,EAAS,MAAM;YAC1B,WAAW,EAAS,MAAM;YAC1B,WAAW,EAAS,kBAAkB;YACtC,aAAa,EAAO,8BAA8B;YAClD,YAAY,EAAQ,OAAO;YAC3B,YAAY,EAAQ,aAAa;YACjC,YAAY;YACZ,iBAAiB;YACjB,oBAAoB;YACpB,yEAAyE;YACzE,OAAO;YACP,YAAY,EAAE,UAAU;YACxB,kBAAkB;SACnB,CAAA;QAED,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,iBAAiB,CAAC,uBAAuB,OAAO,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,MAAM,CAAC,CAAA;QACxF,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,iBAAiB,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;QAC5E,CAAC;QAED,4CAA4C;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBAC3C,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,SAAS,EAAE,aAAa;aACzB,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAEM,gBAAgB,CAAC,QAAgB;QACtC,0BAA0B;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QACpE,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEhE,yBAAyB;QACzB,IAAI,SAAS,GAAG,IAAI;YAClB,qDAAqD;aACpD,SAAS,CAAC,KAAK,CAAC;aAChB,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAChC,qDAAqD;aACpD,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;YACjC,sCAAsC;aACrC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;YACpB,kCAAkC;aACjC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YACxB,wBAAwB;eACrB,MAAM,CAAA;QAEX,wDAAwD;QACxD,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAElE,0DAA0D;QAC1D,MAAM,aAAa,GAAG,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAA;QACrD,IAAI,SAAS,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACrC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QACnD,CAAC;QAED,OAAO,SAAS,GAAG,kBAAkB,CAAA;IACvC,CAAC;IAEM,gBAAgB,CAAC,QAAgB;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7C,CAAC;CACF"}
|