@tekki-forge/runtime-api 0.1.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.
@@ -0,0 +1,146 @@
1
+ import type { ForgeRequestContext } from "./extension.js";
2
+ import type { ForgeService } from "./service.js";
3
+ type Row = Record<string, any>;
4
+ /**
5
+ * Who sees what in the administration area:
6
+ * - global admins (the `admin` role on their account) see the whole system;
7
+ * - with organizations, organization admins (member role admin/owner) see their own organization only;
8
+ * - everyone else gets 403. API keys never reach this API.
9
+ */
10
+ export interface AdminScope {
11
+ global: boolean;
12
+ /** Organization the data is limited to (organization admins), or null for everything. */
13
+ organizationId: string | null;
14
+ }
15
+ export declare function adminScope(service: ForgeService, ctx: ForgeRequestContext, opts?: {
16
+ globalOnly?: boolean;
17
+ }): AdminScope;
18
+ export interface SeriesPoint {
19
+ /** Bucket start: "2026-10-02" (day) or "2026-10" (month). */
20
+ key: string;
21
+ value: number;
22
+ }
23
+ /** Every bucket key between `since` and today, so charts show the empty days too. */
24
+ export declare function bucketKeys(since: Date, by: "day" | "month", now?: Date): string[];
25
+ /** System overview, analytics and organizations for Administration (see adminScope for who sees what). */
26
+ export declare class AdminService {
27
+ private readonly service;
28
+ constructor(service: ForgeService);
29
+ private get prisma();
30
+ private get app();
31
+ /** User entities (not the tables plugins add for their own bookkeeping). */
32
+ private entities;
33
+ private userWhere;
34
+ /** Accounts created (global) or members who joined the organization, since `since`. */
35
+ private joinedSince;
36
+ overview(ctx: ForgeRequestContext): Promise<{
37
+ scope: "global" | "organization";
38
+ organizationId: string | null;
39
+ users: {
40
+ total: any;
41
+ newThisWeek: number;
42
+ newPreviousWeek: number;
43
+ weekly: SeriesPoint[];
44
+ };
45
+ organizations: {
46
+ total: any;
47
+ newThisWeek: any;
48
+ } | null;
49
+ sessions: {
50
+ active: any;
51
+ };
52
+ records: {
53
+ entity: string;
54
+ label: string;
55
+ path: string;
56
+ total: any;
57
+ last30: any;
58
+ }[];
59
+ recentSignups: any;
60
+ recentAudit: any;
61
+ jobs: {
62
+ failed: number;
63
+ active: number;
64
+ waiting: number;
65
+ delayed: number;
66
+ } | null;
67
+ webhooks: {
68
+ failed: number;
69
+ succeeded: number;
70
+ pending: number;
71
+ } | null;
72
+ billing: unknown;
73
+ support: {
74
+ open: number;
75
+ pending: number;
76
+ unassigned: number;
77
+ } | null;
78
+ }>;
79
+ /** New accounts (or members) per week, oldest first, for the trend sparkline. */
80
+ private weeklyJoins;
81
+ private jobs;
82
+ private webhooks;
83
+ private billing;
84
+ private support;
85
+ /**
86
+ * Time series for Administration → Analytics: sign-ups (or members joining), active users (people with
87
+ * a session used that day) and records created per entity. `?days=7|30|90|365` (365 is bucketed by month).
88
+ */
89
+ analytics(ctx: ForgeRequestContext, query?: Row): Promise<{
90
+ scope: "global" | "organization";
91
+ days: number;
92
+ by: "month" | "day";
93
+ since: string;
94
+ signups: {
95
+ total: number;
96
+ series: SeriesPoint[];
97
+ };
98
+ activeUsers: {
99
+ total: number;
100
+ series: SeriesPoint[];
101
+ };
102
+ records: {
103
+ entity: string;
104
+ label: string;
105
+ path: string;
106
+ total: number;
107
+ series: SeriesPoint[];
108
+ }[];
109
+ topEntities: {
110
+ entity: string;
111
+ label: string;
112
+ path: string;
113
+ total: number;
114
+ }[];
115
+ }>;
116
+ /** Every organization with its member count and plan (payments plugin). Global admins only. */
117
+ organizations(ctx: ForgeRequestContext, query?: Row): Promise<{
118
+ data: any;
119
+ meta: {
120
+ page: number;
121
+ pageSize: number;
122
+ total: any;
123
+ pages: number;
124
+ };
125
+ billing: boolean;
126
+ }>;
127
+ /** One organization: members and their roles, pending invitations, plan and record counts. Global admins only. */
128
+ organization(id: string, ctx: ForgeRequestContext): Promise<{
129
+ id: any;
130
+ name: any;
131
+ slug: any;
132
+ logo: any;
133
+ createdAt: any;
134
+ plan: {} | null;
135
+ members: any;
136
+ pendingInvitations: any;
137
+ records: {
138
+ entity: string;
139
+ label: string;
140
+ path: string;
141
+ total: any;
142
+ }[];
143
+ }>;
144
+ private plans;
145
+ }
146
+ export {};
package/dist/admin.js ADDED
@@ -0,0 +1,256 @@
1
+ import { ForbiddenException, NotFoundException, UnauthorizedException } from "@nestjs/common";
2
+ import { isGlobalAdminRole } from "./settings.js";
3
+ export function adminScope(service, ctx, opts = {}) {
4
+ if (!service.app.admin.enabled)
5
+ throw new NotFoundException("The administration area is disabled (admin.enabled: false)");
6
+ if (!ctx.principal)
7
+ throw new UnauthorizedException("Sign in to continue");
8
+ if (ctx.apiKey)
9
+ throw new ForbiddenException("API keys cannot use the administration API");
10
+ if (isGlobalAdminRole(ctx.user?.role))
11
+ return { global: true, organizationId: null };
12
+ if (!opts.globalOnly && service.app.tenancy.enabled && ctx.principal.organizationId && ctx.principal.roles.includes("admin")) {
13
+ return { global: false, organizationId: ctx.principal.organizationId };
14
+ }
15
+ throw new ForbiddenException(opts.globalOnly ? "Only global administrators can see this" : "Only administrators can use the administration area");
16
+ }
17
+ const DAY = 86_400_000;
18
+ const q = (name) => `"${name.replace(/"/g, '""')}"`;
19
+ function startOfUtcDay(d) {
20
+ return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate()));
21
+ }
22
+ /** Every bucket key between `since` and today, so charts show the empty days too. */
23
+ export function bucketKeys(since, by, now = new Date()) {
24
+ const keys = [];
25
+ if (by === "month") {
26
+ const d = new Date(Date.UTC(since.getUTCFullYear(), since.getUTCMonth(), 1));
27
+ while (d <= now) {
28
+ keys.push(d.toISOString().slice(0, 7));
29
+ d.setUTCMonth(d.getUTCMonth() + 1);
30
+ }
31
+ return keys;
32
+ }
33
+ for (let d = startOfUtcDay(since); d <= now; d = new Date(d.getTime() + DAY))
34
+ keys.push(d.toISOString().slice(0, 10));
35
+ return keys;
36
+ }
37
+ function fill(keys, rows) {
38
+ const by = new Map(rows.map((r) => [r.k, Number(r.n)]));
39
+ return keys.map((key) => ({ key, value: by.get(key) ?? 0 }));
40
+ }
41
+ /** System overview, analytics and organizations for Administration (see adminScope for who sees what). */
42
+ export class AdminService {
43
+ service;
44
+ constructor(service) {
45
+ this.service = service;
46
+ }
47
+ get prisma() {
48
+ return this.service.prisma;
49
+ }
50
+ get app() {
51
+ return this.service.app;
52
+ }
53
+ /** User entities (not the tables plugins add for their own bookkeeping). */
54
+ entities(scope) {
55
+ const internal = new Set(this.app.plugins.flatMap((p) => p.entities));
56
+ return this.app.entities.filter((e) => !internal.has(e.name) && e.features.timestamps && (scope.global || e.features.tenant));
57
+ }
58
+ userWhere(scope) {
59
+ return scope.organizationId ? { members: { some: { organizationId: scope.organizationId } } } : {};
60
+ }
61
+ /** Accounts created (global) or members who joined the organization, since `since`. */
62
+ async joinedSince(scope, since, until) {
63
+ const range = { gte: since, ...(until ? { lt: until } : {}) };
64
+ if (scope.organizationId)
65
+ return this.prisma.member.count({ where: { organizationId: scope.organizationId, createdAt: range } });
66
+ return this.prisma.user.count({ where: { createdAt: range } });
67
+ }
68
+ async overview(ctx) {
69
+ const scope = adminScope(this.service, ctx);
70
+ const now = new Date();
71
+ const weekAgo = new Date(now.getTime() - 7 * DAY);
72
+ const twoWeeksAgo = new Date(now.getTime() - 14 * DAY);
73
+ const monthAgo = new Date(now.getTime() - 30 * DAY);
74
+ const tenancy = this.app.tenancy.enabled;
75
+ const [usersTotal, newThisWeek, newPreviousWeek, activeSessions] = await Promise.all([
76
+ scope.organizationId ? this.prisma.member.count({ where: { organizationId: scope.organizationId } }) : this.prisma.user.count(),
77
+ this.joinedSince(scope, weekAgo),
78
+ this.joinedSince(scope, twoWeeksAgo, weekAgo),
79
+ this.prisma.session.count({ where: { expiresAt: { gt: now }, ...(scope.organizationId ? { user: this.userWhere(scope) } : {}) } }),
80
+ ]);
81
+ const weekly = await this.weeklyJoins(scope, 8);
82
+ const organizations = tenancy && scope.global
83
+ ? { total: await this.prisma.organization.count(), newThisWeek: await this.prisma.organization.count({ where: { createdAt: { gte: weekAgo } } }) }
84
+ : null;
85
+ const records = [];
86
+ for (const e of this.entities(scope)) {
87
+ const where = scope.organizationId ? { organizationId: scope.organizationId } : {};
88
+ const delegate = this.service.delegate(e);
89
+ const [total, last30] = await Promise.all([delegate.count({ where }), delegate.count({ where: { ...where, createdAt: { gte: monthAgo } } })]);
90
+ records.push({ entity: e.name, label: e.pluralLabel, path: e.path, total, last30 });
91
+ }
92
+ const recentSignups = scope.organizationId
93
+ ? (await this.prisma.member.findMany({
94
+ where: { organizationId: scope.organizationId },
95
+ orderBy: { createdAt: "desc" },
96
+ take: 6,
97
+ include: { user: { select: { id: true, name: true, email: true } } },
98
+ })).map((m) => ({ id: m.user.id, name: m.user.name, email: m.user.email, createdAt: m.createdAt, role: m.role }))
99
+ : (await this.prisma.user.findMany({ orderBy: { createdAt: "desc" }, take: 6, select: { id: true, name: true, email: true, createdAt: true, role: true } })).map((u) => ({ ...u, role: u.role ?? "user" }));
100
+ const auditWhere = tenancy && scope.organizationId ? { organizationId: scope.organizationId } : {};
101
+ const recentAudit = (await this.prisma.auditLog.findMany({ where: auditWhere, orderBy: { createdAt: "desc" }, take: 8, include: { user: { select: { id: true, name: true } } } })).map((l) => ({ id: l.id, entity: this.service.entityByStorageName(l.entity)?.name ?? l.entity, recordId: l.recordId, action: l.action, user: l.user ? { id: l.user.id, name: l.user.name } : null, createdAt: l.createdAt }));
102
+ return {
103
+ scope: scope.global ? "global" : "organization",
104
+ organizationId: scope.organizationId,
105
+ users: { total: usersTotal, newThisWeek, newPreviousWeek, weekly },
106
+ organizations,
107
+ sessions: { active: activeSessions },
108
+ records,
109
+ recentSignups,
110
+ recentAudit,
111
+ jobs: scope.global ? await this.jobs() : null,
112
+ webhooks: await this.webhooks(scope, weekAgo),
113
+ billing: scope.global ? await this.billing() : null,
114
+ support: scope.global && this.app.admin.support ? await this.support() : null,
115
+ };
116
+ }
117
+ /** New accounts (or members) per week, oldest first, for the trend sparkline. */
118
+ async weeklyJoins(scope, weeks) {
119
+ const now = Date.now();
120
+ const out = [];
121
+ for (let i = weeks - 1; i >= 0; i--) {
122
+ const start = new Date(now - (i + 1) * 7 * DAY);
123
+ const end = new Date(now - i * 7 * DAY);
124
+ out.push({ key: start.toISOString().slice(0, 10), value: await this.joinedSince(scope, start, end) });
125
+ }
126
+ return out;
127
+ }
128
+ async jobs() {
129
+ const queue = this.service.shared.get("jobsQueue");
130
+ if (!queue)
131
+ return this.app.plugins.some((p) => p.name === "jobs") ? { failed: 0, active: 0, waiting: 0, delayed: 0 } : null;
132
+ try {
133
+ const c = await queue.getJobCounts("failed", "active", "waiting", "delayed");
134
+ return { failed: c.failed ?? 0, active: c.active ?? 0, waiting: c.waiting ?? 0, delayed: c.delayed ?? 0 };
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ }
140
+ async webhooks(scope, since) {
141
+ if (!this.app.plugins.some((p) => p.name === "webhooks") || !this.prisma.webhookDelivery)
142
+ return null;
143
+ const where = { createdAt: { gte: since }, ...(scope.organizationId ? { organizationId: scope.organizationId } : {}) };
144
+ const [failed, succeeded, pending] = await Promise.all(["failed", "succeeded", "pending"].map((status) => this.prisma.webhookDelivery.count({ where: { ...where, status } })));
145
+ return { failed, succeeded, pending };
146
+ }
147
+ async billing() {
148
+ const billing = this.service.shared.get("billing");
149
+ return billing?.adminMetrics ? billing.adminMetrics() : null;
150
+ }
151
+ async support() {
152
+ if (!this.prisma.supportTicket)
153
+ return null;
154
+ const [open, pending, unassigned] = await Promise.all([
155
+ this.prisma.supportTicket.count({ where: { status: "open" } }),
156
+ this.prisma.supportTicket.count({ where: { status: "pending" } }),
157
+ this.prisma.supportTicket.count({ where: { status: { not: "closed" }, assigneeId: null } }),
158
+ ]);
159
+ return { open, pending, unassigned };
160
+ }
161
+ /**
162
+ * Time series for Administration → Analytics: sign-ups (or members joining), active users (people with
163
+ * a session used that day) and records created per entity. `?days=7|30|90|365` (365 is bucketed by month).
164
+ */
165
+ async analytics(ctx, query = {}) {
166
+ const scope = adminScope(this.service, ctx);
167
+ const days = [7, 30, 90, 365].includes(Number(query.days)) ? Number(query.days) : 30;
168
+ const by = days > 90 ? "month" : "day";
169
+ const now = new Date();
170
+ const since = by === "month" ? new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth() - 11, 1)) : startOfUtcDay(new Date(now.getTime() - (days - 1) * DAY));
171
+ const keys = bucketKeys(since, by, now);
172
+ const fmt = by === "month" ? "YYYY-MM" : "YYYY-MM-DD";
173
+ const bucket = (col) => `to_char(date_trunc('${by}', ${col}), '${fmt}')`;
174
+ const raw = (sql, ...params) => this.prisma.$queryRawUnsafe(sql, ...params);
175
+ const signups = scope.organizationId
176
+ ? await raw(`SELECT ${bucket(`"createdAt"`)} AS k, count(*)::int AS n FROM "member" WHERE "createdAt" >= $1 AND "organizationId" = $2 GROUP BY 1`, since, scope.organizationId)
177
+ : await raw(`SELECT ${bucket(`"createdAt"`)} AS k, count(*)::int AS n FROM "user" WHERE "createdAt" >= $1 GROUP BY 1`, since);
178
+ const active = scope.organizationId
179
+ ? await raw(`SELECT ${bucket(`s."updatedAt"`)} AS k, count(DISTINCT s."userId")::int AS n FROM "session" s JOIN "member" m ON m."userId" = s."userId" AND m."organizationId" = $2 WHERE s."updatedAt" >= $1 GROUP BY 1`, since, scope.organizationId)
180
+ : await raw(`SELECT ${bucket(`"updatedAt"`)} AS k, count(DISTINCT "userId")::int AS n FROM "session" WHERE "updatedAt" >= $1 GROUP BY 1`, since);
181
+ const activeTotal = scope.organizationId
182
+ ? await raw(`SELECT 'all' AS k, count(DISTINCT s."userId")::int AS n FROM "session" s JOIN "member" m ON m."userId" = s."userId" AND m."organizationId" = $2 WHERE s."updatedAt" >= $1`, since, scope.organizationId)
183
+ : await raw(`SELECT 'all' AS k, count(DISTINCT "userId")::int AS n FROM "session" WHERE "updatedAt" >= $1`, since);
184
+ const records = [];
185
+ for (const e of this.entities(scope)) {
186
+ const rows = scope.organizationId
187
+ ? await raw(`SELECT ${bucket(`"created_at"`)} AS k, count(*)::int AS n FROM ${q(e.tableName)} WHERE "created_at" >= $1 AND "organization_id" = $2 GROUP BY 1`, since, scope.organizationId)
188
+ : await raw(`SELECT ${bucket(`"created_at"`)} AS k, count(*)::int AS n FROM ${q(e.tableName)} WHERE "created_at" >= $1 GROUP BY 1`, since);
189
+ const series = fill(keys, rows);
190
+ records.push({ entity: e.name, label: e.pluralLabel, path: e.path, total: series.reduce((s, p) => s + p.value, 0), series });
191
+ }
192
+ const signupSeries = fill(keys, signups);
193
+ return {
194
+ scope: scope.global ? "global" : "organization",
195
+ days,
196
+ by,
197
+ since: since.toISOString(),
198
+ signups: { total: signupSeries.reduce((s, p) => s + p.value, 0), series: signupSeries },
199
+ activeUsers: { total: Number(activeTotal[0]?.n ?? 0), series: fill(keys, active) },
200
+ records,
201
+ topEntities: [...records].sort((a, b) => b.total - a.total).slice(0, 5).map(({ entity, label, path, total }) => ({ entity, label, path, total })),
202
+ };
203
+ }
204
+ /** Every organization with its member count and plan (payments plugin). Global admins only. */
205
+ async organizations(ctx, query = {}) {
206
+ adminScope(this.service, ctx, { globalOnly: true });
207
+ if (!this.app.tenancy.enabled)
208
+ throw new NotFoundException("Organizations are not enabled (multiTenant)");
209
+ const page = Math.max(1, Number(query.page) || 1);
210
+ const pageSize = 25;
211
+ const search = typeof query.search === "string" ? query.search.trim().slice(0, 100) : "";
212
+ const where = search ? { OR: [{ name: { contains: search, mode: "insensitive" } }, { slug: { contains: search, mode: "insensitive" } }] } : {};
213
+ const [total, rows] = await this.prisma.$transaction([
214
+ this.prisma.organization.count({ where }),
215
+ this.prisma.organization.findMany({ where, orderBy: { createdAt: "desc" }, skip: (page - 1) * pageSize, take: pageSize, include: { _count: { select: { members: true } } } }),
216
+ ]);
217
+ const plans = await this.plans(rows.map((o) => o.id));
218
+ return {
219
+ data: rows.map((o) => ({ id: o.id, name: o.name, slug: o.slug, logo: o.logo ?? null, createdAt: o.createdAt, members: o._count.members, plan: plans.get(o.id) ?? null })),
220
+ meta: { page, pageSize, total, pages: Math.max(1, Math.ceil(total / pageSize)) },
221
+ billing: this.app.plugins.some((p) => p.name === "payments"),
222
+ };
223
+ }
224
+ /** One organization: members and their roles, pending invitations, plan and record counts. Global admins only. */
225
+ async organization(id, ctx) {
226
+ adminScope(this.service, ctx, { globalOnly: true });
227
+ if (!this.app.tenancy.enabled)
228
+ throw new NotFoundException("Organizations are not enabled (multiTenant)");
229
+ const org = await this.prisma.organization.findUnique({ where: { id } });
230
+ if (!org)
231
+ throw new NotFoundException("Organization not found");
232
+ const [members, invitations] = await Promise.all([
233
+ this.prisma.member.findMany({ where: { organizationId: id }, orderBy: { createdAt: "asc" }, include: { user: { select: { id: true, name: true, email: true, banned: true } } } }),
234
+ this.prisma.invitation.count({ where: { organizationId: id, status: "pending" } }),
235
+ ]);
236
+ const records = [];
237
+ for (const e of this.entities({ global: false, organizationId: id }))
238
+ records.push({ entity: e.name, label: e.pluralLabel, path: e.path, total: await this.service.delegate(e).count({ where: { organizationId: id } }) });
239
+ return {
240
+ id: org.id,
241
+ name: org.name,
242
+ slug: org.slug,
243
+ logo: org.logo ?? null,
244
+ createdAt: org.createdAt,
245
+ plan: (await this.plans([id])).get(id) ?? null,
246
+ members: members.map((m) => ({ id: m.id, userId: m.user.id, name: m.user.name, email: m.user.email, banned: !!m.user.banned, role: m.role, joinedAt: m.createdAt })),
247
+ pendingInvitations: invitations,
248
+ records,
249
+ };
250
+ }
251
+ async plans(orgIds) {
252
+ const billing = this.service.shared.get("billing");
253
+ return billing?.plansFor ? billing.plansFor(orgIds) : new Map();
254
+ }
255
+ }
256
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAgBlD,MAAM,UAAU,UAAU,CAAC,OAAqB,EAAE,GAAwB,EAAE,OAAiC,EAAE;IAC7G,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO;QAAE,MAAM,IAAI,iBAAiB,CAAC,4DAA4D,CAAC,CAAC;IAC1H,IAAI,CAAC,GAAG,CAAC,SAAS;QAAE,MAAM,IAAI,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;IAC3E,IAAI,GAAG,CAAC,MAAM;QAAE,MAAM,IAAI,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;IAC3F,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACrF,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7H,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,yCAAyC,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;AACpJ,CAAC;AAQD,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAE5D,SAAS,aAAa,CAAC,CAAO;IAC5B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,UAAU,CAAC,KAAW,EAAE,EAAmB,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IAC3E,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,IAAI,CAAC,IAAc,EAAE,IAAyC;IACrE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,0GAA0G;AAC1G,MAAM,OAAO,YAAY;IACM;IAA7B,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAEtD,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,IAAY,GAAG;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1B,CAAC;IAED,4EAA4E;IACpE,QAAQ,CAAC,KAAiB;QAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtE,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChI,CAAC;IAEO,SAAS,CAAC,KAAiB;QACjC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,CAAC;IAED,uFAAuF;IAC/E,KAAK,CAAC,WAAW,CAAC,KAAiB,EAAE,KAAW,EAAE,KAAY;QACpE,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9D,IAAI,KAAK,CAAC,cAAc;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACjI,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAwB;QACrC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QAEzC,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnF,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE;YAC/H,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SACnI,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEhD,MAAM,aAAa,GACjB,OAAO,IAAI,KAAK,CAAC,MAAM;YACrB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE;YAClJ,CAAC,CAAC,IAAI,CAAC;QAEX,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9I,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc;YACxC,CAAC,CAAC,CACE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAChC,KAAK,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE;gBAC/C,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;gBAC9B,IAAI,EAAE,CAAC;gBACP,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;aACrE,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACtH,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC;QAEnN,MAAM,UAAU,GAAQ,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,MAAM,WAAW,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAC7J,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEpO,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,QAAkB,CAAC,CAAC,CAAE,cAAwB;YACrE,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE;YAClE,aAAa;YACb,QAAQ,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE;YACpC,OAAO;YACP,aAAa;YACb,WAAW;YACX,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;YAC7C,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;YAC7C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;YACnD,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;SAC9E,CAAC;IACJ,CAAC;IAED,iFAAiF;IACzE,KAAK,CAAC,WAAW,CAAC,KAAiB,EAAE,KAAa;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAuF,CAAC;QACzI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7H,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAC7E,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QAC5G,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAiB,EAAE,KAAW;QACnD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC;QACtG,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACvH,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CACpD,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CACvH,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAA0D,CAAC;QAC5G,OAAO,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/D,CAAC;IAEO,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;SAC5F,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,GAAwB,EAAE,QAAa,EAAE;QACvD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,EAAE,GAAoB,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC/J,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QACtD,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,uBAAuB,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;QACjF,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,GAAG,MAAiB,EAAgD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;QAE7I,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc;YAClC,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC,aAAa,CAAC,sGAAsG,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC;YAC/K,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC,aAAa,CAAC,0EAA0E,EAAE,KAAK,CAAC,CAAC;QAChI,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc;YACjC,CAAC,CAAC,MAAM,GAAG,CACP,UAAU,MAAM,CAAC,eAAe,CAAC,0KAA0K,EAC3M,KAAK,EACL,KAAK,CAAC,cAAc,CACrB;YACH,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC,aAAa,CAAC,6FAA6F,EAAE,KAAK,CAAC,CAAC;QACnJ,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc;YACtC,CAAC,CAAC,MAAM,GAAG,CAAC,2KAA2K,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC;YACrN,CAAC,CAAC,MAAM,GAAG,CAAC,8FAA8F,EAAE,KAAK,CAAC,CAAC;QAErH,MAAM,OAAO,GAA4F,EAAE,CAAC;QAC5G,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,cAAc;gBAC/B,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC,cAAc,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iEAAiE,EAAE,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC;gBAC3L,CAAC,CAAC,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC,cAAc,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7I,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/H,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACzC,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,QAAkB,CAAC,CAAC,CAAE,cAAwB;YACrE,IAAI;YACJ,EAAE;YACF,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;YAC1B,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE;YACvF,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;YAClF,OAAO;YACP,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SAClJ,CAAC;IACJ,CAAC;IAED,+FAA+F;IAC/F,KAAK,CAAC,aAAa,CAAC,GAAwB,EAAE,QAAa,EAAE;QAC3D,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,iBAAiB,CAAC,6CAA6C,CAAC,CAAC;QAC1G,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/I,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;SAC9K,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YAC9K,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE;YAChF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED,kHAAkH;IAClH,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,GAAwB;QACrD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,iBAAiB,CAAC,6CAA6C,CAAC,CAAC;QAC1G,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,iBAAiB,CAAC,wBAAwB,CAAC,CAAC;QAChE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YACjL,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;SACnF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3N,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;YACtB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;YAC9C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YACzK,kBAAkB,EAAE,WAAW;YAC/B,OAAO;SACR,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,MAAgB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAmF,CAAC;QACrI,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IAClE,CAAC;CACF"}
package/dist/bootstrap.js CHANGED
@@ -8,12 +8,15 @@ import "reflect-metadata";
8
8
  import { Module } from "@nestjs/common";
9
9
  import { NestFactory } from "@nestjs/core";
10
10
  import { SwaggerModule } from "@nestjs/swagger";
11
- import { toNodeHandler } from "better-auth/node";
11
+ import { fromNodeHeaders, toNodeHandler } from "better-auth/node";
12
12
  import express from "express";
13
13
  import { FORGE_SERVICE, ResourceController, SystemController } from "./controllers.js";
14
14
  import { ForgeExceptionFilter } from "./errors.js";
15
15
  import { createBackup, filesFromPrisma, localBackupStore } from "./backup.js";
16
16
  import { ForgeService } from "./service.js";
17
+ import { SiteController } from "./site-controller.js";
18
+ import { syncSite } from "./site.js";
19
+ import { maintenanceBlock } from "./settings.js";
17
20
  let ForgeRootModule = class ForgeRootModule {
18
21
  };
19
22
  ForgeRootModule = __decorate([
@@ -24,7 +27,7 @@ export function forgeModule(service, imports = [], pluginControllers = []) {
24
27
  module: ForgeRootModule,
25
28
  imports,
26
29
  // Order matters: fixed system and plugin routes must win over the generic `:resource` routes.
27
- controllers: [SystemController, ...pluginControllers, ResourceController],
30
+ controllers: [SystemController, ...pluginControllers, SiteController, ResourceController],
28
31
  providers: [{ provide: FORGE_SERVICE, useValue: service }],
29
32
  exports: [FORGE_SERVICE],
30
33
  };
@@ -96,6 +99,9 @@ export async function createForgeApi(options) {
96
99
  }
97
100
  export async function createForge(options) {
98
101
  const { service, plugins } = await setupForge(options);
102
+ // Seed/merge the website from forge.config.ts before serving it (never throws; warns when not migrated yet).
103
+ if (options.app.site)
104
+ await syncSite(options.app, options.prisma);
99
105
  const prefix = options.app.api.prefix;
100
106
  const pluginImports = plugins.flatMap((p) => p.runtime.imports ?? []);
101
107
  const pluginControllers = plugins.flatMap((p) => p.runtime.controllers ?? []);
@@ -112,6 +118,15 @@ export async function createForge(options) {
112
118
  for (const path of plugins.flatMap((p) => p.runtime.rawBodyPaths ?? []))
113
119
  server.use(`${prefix}${path}`, express.raw({ type: "*/*", limit: "1mb" }));
114
120
  server.use(express.json({ limit: "1mb" }));
121
+ // Maintenance mode (Administration → System settings): writes are refused except for global admins.
122
+ const rawPaths = plugins.flatMap((p) => p.runtime.rawBodyPaths ?? []);
123
+ server.use(prefix, (req, res, next) => {
124
+ const ctxReq = req;
125
+ const resolve = () => (ctxReq.forgeContext ??= service.resolveContext(fromNodeHeaders(req.headers), req.ip));
126
+ maintenanceBlock(service.settings, req.method, req.path, resolve, rawPaths)
127
+ .then((blocked) => (blocked ? void res.status(503).json({ statusCode: 503, error: "Service Unavailable", message: blocked.message }) : next()))
128
+ .catch(next);
129
+ });
115
130
  if (options.cors?.length)
116
131
  app.enableCors({ origin: options.cors, credentials: true });
117
132
  app.setGlobalPrefix(prefix.replace(/^\//, ""));
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAuE,MAAM,gBAAgB,CAAC;AAC7G,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAsB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAoB,MAAM,aAAa,CAAC;AAEhG,OAAO,EAAE,YAAY,EAA4B,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAiBjD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,eAAe;IADpB,MAAM,CAAC,EAAE,CAAC;GACL,eAAe,CAAG;AAExB,MAAM,UAAU,WAAW,CAAC,OAAqB,EAAE,UAAoC,EAAE,EAAE,oBAA4B,EAAE;IACvH,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,OAAO;QACP,8FAA8F;QAC9F,WAAW,EAAE,CAAC,gBAAgB,EAAE,GAAG,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,CAAC;QACzF,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC1D,OAAO,EAAE,CAAC,aAAa,CAAC;KACzB,CAAC;AACJ,CAAC;AAQD,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAwB;IACvD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrI,MAAM,OAAO,GAAsD,EAAE,CAAC;IACtE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,IAAI,+EAA+E,CAAC,CAAC;QACrJ,MAAM,GAAG,GAAkB;YACzB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;YACxD,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;YACtD,GAAG,EAAE,CAAK,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAkB;SAC7D,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC,IAAI,6DAA6D,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IACD,OAAO,CAAC,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,GAAU,EAAE,OAAqB;IACzD,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,GAAG,CAAC,OAAQ,CAAC,QAAS;QAChC,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,CAAC,GAAG,MAAM;QACnB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM;QACxB,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE;YACnB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YAC7C,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAA4B,CAAC;YAC3E,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC;gBAC9C,WAAW;gBACX,KAAK,EAAE,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,SAAS,CAAC;gBAC3E,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;gBACvC,KAAK,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC5C,WAAW,EAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAwB,IAAI,IAAI;gBACpF,IAAI,EAAE,GAAG,CAAC,OAAQ,CAAC,IAAI;gBACvB,GAAG;aACJ,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAClG,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,OAAO,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAwB;IACxD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACvD,6GAA6G;IAC7G,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI;QAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,iBAAiB,CAAC,EAAE;QAC5H,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;KACnD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC,WAAW,EAAqB,CAAC;IACrE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAChC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/B,2EAA2E;IAC3E,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,cAAc,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,mFAAmF;IACnF,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACpJ,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3C,oGAAoG;IACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IACtE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACpC,MAAM,MAAM,GAAG,GAAsF,CAAC;QACtG,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,KAAK,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;aACxE,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC9I,KAAK,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM;QAAE,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,GAAG,CAAC,gBAAgB,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;IAEjD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAmC,CAAC;QACxD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,eAAe,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACjD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,aAAa,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;YACjE,eAAe,EAAE,KAAK;YACtB,eAAe,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM;YAC1C,cAAc,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE;SACtE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA2D;IAC7F,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IACpD,GAAG,CAAC,mBAAmB,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;IACtF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,IAAI,sCAAsC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9G,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,sCAAsC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACrI,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAiE;IACtG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAyD,EAAE,CAAC;IAC1E,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,IAAI,oCAAoC,CAAC,CAAC;QACzG,MAAM,GAAG,GAAkB,GAAG,EAAE,GAAG,IAAI;YACrC,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM;YACN,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;YACxD,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;YAC9D,GAAG,EAAE,CAAK,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAkB;SACrE,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IACxJ,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC"}