@crvouga/mockingbird-service-junction 0.1.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.
Files changed (62) hide show
  1. package/README.md +319 -0
  2. package/dist/catalog.d.ts +63 -0
  3. package/dist/catalog.d.ts.map +1 -0
  4. package/dist/catalog.js +736 -0
  5. package/dist/catalog.js.map +1 -0
  6. package/dist/coverage-corpus.d.ts +76 -0
  7. package/dist/coverage-corpus.d.ts.map +1 -0
  8. package/dist/coverage-corpus.js +166 -0
  9. package/dist/coverage-corpus.js.map +1 -0
  10. package/dist/generated/openapi.d.ts +7 -0
  11. package/dist/generated/openapi.d.ts.map +1 -0
  12. package/dist/generated/openapi.js +5 -0
  13. package/dist/generated/openapi.js.map +1 -0
  14. package/dist/index.d.ts +49 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +121 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/lab-accounts.d.ts +38 -0
  19. package/dist/lab-accounts.d.ts.map +1 -0
  20. package/dist/lab-accounts.js +213 -0
  21. package/dist/lab-accounts.js.map +1 -0
  22. package/dist/orders.d.ts +18 -0
  23. package/dist/orders.d.ts.map +1 -0
  24. package/dist/orders.js +1247 -0
  25. package/dist/orders.js.map +1 -0
  26. package/dist/prefetch.d.ts +43 -0
  27. package/dist/prefetch.d.ts.map +1 -0
  28. package/dist/prefetch.js +131 -0
  29. package/dist/prefetch.js.map +1 -0
  30. package/dist/reshape.d.ts +22 -0
  31. package/dist/reshape.d.ts.map +1 -0
  32. package/dist/reshape.js +190 -0
  33. package/dist/reshape.js.map +1 -0
  34. package/dist/results.d.ts +19 -0
  35. package/dist/results.d.ts.map +1 -0
  36. package/dist/results.js +221 -0
  37. package/dist/results.js.map +1 -0
  38. package/dist/scheduling.d.ts +113 -0
  39. package/dist/scheduling.d.ts.map +1 -0
  40. package/dist/scheduling.js +1508 -0
  41. package/dist/scheduling.js.map +1 -0
  42. package/dist/sealed-corpus.d.ts +28 -0
  43. package/dist/sealed-corpus.d.ts.map +1 -0
  44. package/dist/sealed-corpus.js +17 -0
  45. package/dist/sealed-corpus.js.map +1 -0
  46. package/dist/seed-from.d.ts +27 -0
  47. package/dist/seed-from.d.ts.map +1 -0
  48. package/dist/seed-from.js +523 -0
  49. package/dist/seed-from.js.map +1 -0
  50. package/dist/seeds.d.ts +9 -0
  51. package/dist/seeds.d.ts.map +1 -0
  52. package/dist/seeds.js +9 -0
  53. package/dist/seeds.js.map +1 -0
  54. package/dist/state.d.ts +270 -0
  55. package/dist/state.d.ts.map +1 -0
  56. package/dist/state.js +448 -0
  57. package/dist/state.js.map +1 -0
  58. package/dist/users.d.ts +13 -0
  59. package/dist/users.d.ts.map +1 -0
  60. package/dist/users.js +669 -0
  61. package/dist/users.js.map +1 -0
  62. package/package.json +80 -0
@@ -0,0 +1,270 @@
1
+ import { Collection, IdSequence } from "@crvouga/mockingbird-service";
2
+ import type { SqliteClient } from "@crvouga/mockingbird-sqlite";
3
+ import { type ExpectedResult, type LabTestRecord } from "./catalog.js";
4
+ export type { CatalogMarker, ExpectedResult, LabTestRecord } from "./catalog.js";
5
+ export { expectedResultsFor, LAB_TEST_CATALOG, labTestById, TEAM_LABS } from "./catalog.js";
6
+ export type GetCacheEntry = {
7
+ status: number;
8
+ headers: Record<string, string>;
9
+ body: unknown;
10
+ };
11
+ export declare const observationCacheKey: (url: URL | string, method?: string, body?: unknown) => string;
12
+ export type UserInfoRecord = Record<string, unknown>;
13
+ export type AppointmentModality = "phlebotomy" | "patient_service_center";
14
+ export type AppointmentProviderName = "getlabs" | "phlebfinders" | "quest";
15
+ export type AppointmentStatus = "confirmed" | "pending" | "reserved" | "in_progress" | "completed" | "cancelled";
16
+ export type AppointmentEventStatus = "pending" | "reserved" | "scheduled" | "completed" | "cancelled" | "in_progress";
17
+ export type AppointmentEventRecord = {
18
+ created_at: string;
19
+ status: AppointmentEventStatus;
20
+ data: Record<string, unknown> | null;
21
+ };
22
+ export type AppointmentRecord = {
23
+ id: string;
24
+ order_id: string;
25
+ user_id: string;
26
+ provider_id: string;
27
+ external_id: string | null;
28
+ type: AppointmentModality;
29
+ provider: AppointmentProviderName;
30
+ status: AppointmentStatus;
31
+ event_status: AppointmentEventStatus;
32
+ start_at: string | null;
33
+ end_at: string | null;
34
+ iana_timezone: string | null;
35
+ address: Record<string, unknown>;
36
+ location: {
37
+ lng: number;
38
+ lat: number;
39
+ };
40
+ can_reschedule: boolean;
41
+ booking_key: string | null;
42
+ site_code: string | null;
43
+ appointment_notes: string | null;
44
+ order_transaction_id: string | null;
45
+ event_data: Record<string, unknown> | null;
46
+ events: AppointmentEventRecord[];
47
+ created_at: string;
48
+ updated_at: string;
49
+ };
50
+ export type BookingKeyRecord = {
51
+ key: string;
52
+ start: string;
53
+ end: string;
54
+ expires_at: string | null;
55
+ price: number;
56
+ is_priority: boolean;
57
+ num_appointments_available: number;
58
+ modality: AppointmentModality;
59
+ provider: AppointmentProviderName;
60
+ site_code: string | null;
61
+ zip_code: string;
62
+ address: Record<string, unknown>;
63
+ location: {
64
+ lng: number;
65
+ lat: number;
66
+ };
67
+ consumed_by_order_id: string | null;
68
+ created_at: string;
69
+ };
70
+ export type PendingSimulateTransition = {
71
+ order_id: string;
72
+ due_at: number;
73
+ final_status: string;
74
+ flags: Record<string, unknown> | null;
75
+ };
76
+ export type JunctionWebhookEvent = {
77
+ event_type: "labtest.order.created" | "labtest.order.updated" | "labtest.appointment.updated";
78
+ data: Record<string, unknown>;
79
+ team_id: string;
80
+ user_id: string;
81
+ client_user_id: string;
82
+ };
83
+ export type WebhookEventRecord = {
84
+ sequence: number;
85
+ event: JunctionWebhookEvent;
86
+ };
87
+ export type WebhookDeliveryAttempt = {
88
+ message_id: string;
89
+ event: JunctionWebhookEvent;
90
+ attempt: number;
91
+ scheduled_at: string;
92
+ timeout_ms: number;
93
+ acknowledged: boolean;
94
+ };
95
+ export declare const WEBHOOK_RETRY_DELAYS_MS: readonly [0, 5000, 300000, 1800000, 7200000, 18000000, 36000000, 36000000];
96
+ export type UserRecord = {
97
+ user_id: string;
98
+ team_id: string;
99
+ client_user_id: string;
100
+ created_on: string;
101
+ connected_sources: unknown[];
102
+ fallback_time_zone: {
103
+ id: string;
104
+ source_slug: string;
105
+ updated_at: string;
106
+ } | null;
107
+ fallback_birth_date: {
108
+ value: string;
109
+ source_slug: string;
110
+ updated_at: string;
111
+ } | null;
112
+ ingestion_start: string | null;
113
+ ingestion_end: string | null;
114
+ };
115
+ /** Fixed mock team id — volatile on the real side, stable in the mock. */
116
+ export declare const MOCK_TEAM_ID = "11111111-1111-4111-8111-111111111111";
117
+ /** Deterministic UUID derived from a salt + sequence (version/variant bits fixed). */
118
+ export declare const deterministicUuid: (input: string) => string;
119
+ export type OrderEventRecord = {
120
+ id: number;
121
+ created_at: string;
122
+ status: string;
123
+ status_detail: null;
124
+ };
125
+ export type OrderTransactionEmbed = {
126
+ id: string;
127
+ status: "active" | "completed" | "cancelled";
128
+ orders: Array<{
129
+ id: string;
130
+ low_level_status: string;
131
+ low_level_status_created_at: string;
132
+ origin: string;
133
+ parent_id: null;
134
+ created_at: string;
135
+ updated_at: string;
136
+ }>;
137
+ };
138
+ export type OrderRecord = {
139
+ id: string;
140
+ user_id: string;
141
+ team_id: string;
142
+ patient_details: Record<string, unknown>;
143
+ patient_address: Record<string, unknown>;
144
+ lab_test: LabTestRecord;
145
+ details: Record<string, unknown>;
146
+ sample_id: string | null;
147
+ notes: null;
148
+ clinical_notes: string | null;
149
+ passthrough: string | null;
150
+ /** Echoed from the request's opaque provider account id; absent when the order had none. */
151
+ lab_account_id?: string;
152
+ created_at: string;
153
+ updated_at: string;
154
+ events: OrderEventRecord[];
155
+ status: string;
156
+ last_event: OrderEventRecord;
157
+ physician: {
158
+ first_name: string;
159
+ last_name: string;
160
+ npi: string;
161
+ };
162
+ health_insurance_id: null;
163
+ requisition_form_url: string | null;
164
+ shipping_details: null;
165
+ has_abn: boolean;
166
+ billing_type: string;
167
+ priority: boolean;
168
+ activate_by: null;
169
+ icd_codes: string[] | null;
170
+ interpretation: string | null;
171
+ has_missing_results: boolean | null;
172
+ result_types: string[] | null;
173
+ expected_result_by_date: string | null;
174
+ worst_case_result_by_date: string | null;
175
+ origin: string;
176
+ order_transaction: OrderTransactionEmbed;
177
+ };
178
+ export type WebhookPublisher = (event: JunctionWebhookEvent) => void;
179
+ export type JunctionWebhookOptions = {
180
+ seed?: number;
181
+ jitterRatio?: number;
182
+ timeoutMs?: number;
183
+ };
184
+ export declare class JunctionState {
185
+ private readonly publishEvent;
186
+ private readonly webhookRandom;
187
+ private readonly webhookJitterRatio;
188
+ private readonly webhookTimeoutMs;
189
+ readonly users: Collection<UserRecord>;
190
+ readonly ids: IdSequence;
191
+ readonly byClientId: Collection<{
192
+ user_id: string;
193
+ }>;
194
+ readonly deletedUsers: Collection<{
195
+ user_id: string;
196
+ }>;
197
+ readonly userInfo: Collection<UserInfoRecord>;
198
+ readonly orders: Collection<OrderRecord>;
199
+ readonly orderIdempotency: Collection<{
200
+ order_id: string;
201
+ response: unknown;
202
+ fingerprint: string;
203
+ }>;
204
+ readonly cancelIdempotency: Collection<{
205
+ order_id: string;
206
+ response: unknown;
207
+ }>;
208
+ readonly appointments: Collection<AppointmentRecord>;
209
+ readonly appointmentsByOrder: Collection<{
210
+ appointment_id: string;
211
+ }>;
212
+ readonly bookingKeys: Collection<BookingKeyRecord>;
213
+ readonly pendingSimulateTransitions: Collection<PendingSimulateTransition>;
214
+ readonly orderByTransaction: Collection<{
215
+ order_id: string;
216
+ }>;
217
+ readonly webhookEvents: Collection<WebhookEventRecord>;
218
+ readonly webhookDeliveryAttempts: Collection<WebhookDeliveryAttempt>;
219
+ readonly labTests: Collection<LabTestRecord>;
220
+ readonly labs: Collection<Record<string, unknown>>;
221
+ readonly labAccounts: Collection<Record<string, unknown>>;
222
+ readonly expectedResults: Collection<ExpectedResult[]>;
223
+ readonly getCache: Collection<GetCacheEntry>;
224
+ constructor(sqlite: SqliteClient, namespace: string, publisher?: WebhookPublisher, webhookOptions?: JunctionWebhookOptions);
225
+ seedDefaultCatalog(): void;
226
+ private clearCollection;
227
+ labKeyOf(lab: Record<string, unknown>): string;
228
+ labAccountKeyOf(account: Record<string, unknown>): string;
229
+ labTestById(id: string): LabTestRecord | undefined;
230
+ upsertLabTest(test: LabTestRecord, expectedResults?: readonly ExpectedResult[]): void;
231
+ listLabTests(): LabTestRecord[];
232
+ listLabs(): Record<string, unknown>[];
233
+ listLabAccounts(): Record<string, unknown>[];
234
+ expectedResultsFor(labTestId: string): ExpectedResult[];
235
+ replaceCatalog(input: {
236
+ labTests: readonly LabTestRecord[];
237
+ labs: readonly Record<string, unknown>[];
238
+ expectedResults: Readonly<Record<string, readonly ExpectedResult[]>>;
239
+ }): void;
240
+ replaceLabAccounts(entries: readonly Record<string, unknown>[]): void;
241
+ putGetCache(key: string, entry: GetCacheEntry): void;
242
+ getGetCache(key: string): GetCacheEntry | undefined;
243
+ installGetCache(entries: Iterable<[string, GetCacheEntry]>): void;
244
+ /**
245
+ * Materialize booking_key records from a cached availability payload so subsequent
246
+ * book/reschedule calls succeed against observation-seeded mocks.
247
+ */
248
+ hydrateBookingKeysFromAvailability(body: unknown, nowMs: number, zipCode?: string, modalityHint?: AppointmentModality): void;
249
+ cacheKeyForRequest(method: string, pathname: string, searchParams?: URLSearchParams | string | Record<string, string> | null, body?: unknown): string;
250
+ insertUser(user: UserRecord): void;
251
+ insertOrder(order: OrderRecord): void;
252
+ insertAppointment(appointment: AppointmentRecord): void;
253
+ nextUserId(): string;
254
+ nextOrderId(): string;
255
+ nextAppointmentId(): string;
256
+ bookingKeyFor(input: string): string;
257
+ appointmentProviderIdFor(input: string): string;
258
+ transactionIdFor(orderId: string): string;
259
+ testkitIdFor(orderId: string): string;
260
+ publishWebhook(event: JunctionWebhookEvent, now?: number): void;
261
+ webhookEventsInOrder(): JunctionWebhookEvent[];
262
+ webhookDeliveryAttemptsInOrder(): WebhookDeliveryAttempt[];
263
+ publishOrderWebhook(order: OrderRecord, eventType: JunctionWebhookEvent["event_type"], now?: number): void;
264
+ publishAppointmentWebhook(appointment: AppointmentRecord, teamId: string, now?: number): void;
265
+ queueSimulateTransition(transition: PendingSimulateTransition): void;
266
+ /** Apply any simulate transitions whose delay has elapsed; called lazily on reads. */
267
+ applyDueSimulateTransitions(nowMs: number, apply: (order: OrderRecord, finalStatus: string, flags: Record<string, unknown> | null) => void): void;
268
+ isoNow(now: () => number): string;
269
+ }
270
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAe,MAAM,8BAA8B,CAAA;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,aAAa,EAEnB,MAAM,cAAc,CAAA;AAErB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAChF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE3F,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAUD,eAAO,MAAM,mBAAmB,GAAI,KAAK,GAAG,GAAG,MAAM,EAAE,eAAc,EAAE,OAAO,OAAO,KAAG,MAOvF,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEpD,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,wBAAwB,CAAA;AACzE,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,CAAA;AAC1E,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,SAAS,GACT,UAAU,GACV,aAAa,GACb,WAAW,GACX,WAAW,CAAA;AACf,MAAM,MAAM,sBAAsB,GAC9B,SAAS,GACT,UAAU,GACV,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,CAAA;AAEjB,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,sBAAsB,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CACrC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,uBAAuB,CAAA;IACjC,MAAM,EAAE,iBAAiB,CAAA;IACzB,YAAY,EAAE,sBAAsB,CAAA;IACpC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,cAAc,EAAE,OAAO,CAAA;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1C,MAAM,EAAE,sBAAsB,EAAE,CAAA;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,OAAO,CAAA;IACpB,0BAA0B,EAAE,MAAM,CAAA;IAClC,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,QAAQ,EAAE,uBAAuB,CAAA;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACtC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,uBAAuB,GAAG,uBAAuB,GAAG,6BAA6B,CAAA;IAC7F,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,oBAAoB,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,uBAAuB,4EAE1B,CAAA;AAYV,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,OAAO,EAAE,CAAA;IAC5B,kBAAkB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IAClF,mBAAmB,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACtF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,YAAY,yCAAyC,CAAA;AAElE,sFAAsF;AACtF,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MAQjD,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAA;IAC5C,MAAM,EAAE,KAAK,CAAC;QACZ,EAAE,EAAE,MAAM,CAAA;QACV,gBAAgB,EAAE,MAAM,CAAA;QACxB,2BAA2B,EAAE,MAAM,CAAA;QACnC,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,IAAI,CAAA;QACf,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAC,CAAA;CACH,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACxC,QAAQ,EAAE,aAAa,CAAA;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,KAAK,EAAE,IAAI,CAAA;IACX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,4FAA4F;IAC5F,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,gBAAgB,CAAA;IAC5B,SAAS,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE,mBAAmB,EAAE,IAAI,CAAA;IACzB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,gBAAgB,EAAE,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,IAAI,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,mBAAmB,EAAE,OAAO,GAAG,IAAI,CAAA;IACnC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC7B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,iBAAiB,EAAE,qBAAqB,CAAA;CACzC,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAA;AAEpE,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAc;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAA;IACtC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpD,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,cAAc,CAAC,CAAA;IAC7C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;IACxC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC;QACpC,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,OAAO,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAC,CAAA;IACF,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAE/E,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAA;IACpD,QAAQ,CAAC,mBAAmB,EAAE,UAAU,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACpE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAClD,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,yBAAyB,CAAC,CAAA;IAE1E,QAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7D,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAA;IACtD,QAAQ,CAAC,uBAAuB,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAA;IAEpE,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,CAAA;IAC5C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACzD,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC,CAAA;IACtD,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,CAAA;gBAG1C,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,gBAAgB,EAC5B,cAAc,GAAE,sBAA2B;IAiC7C,kBAAkB,IAAI,IAAI;IAU1B,OAAO,CAAC,eAAe;IAIvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAM9C,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAOzD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIlD,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI;IA2DrF,YAAY,IAAI,aAAa,EAAE;IAI/B,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAIrC,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAI5C,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,EAAE;IAIvD,cAAc,CAAC,KAAK,EAAE;QACpB,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAA;QAClC,IAAI,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;QACxC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC,CAAC,CAAA;KACrE,GAAG,IAAI;IAWR,kBAAkB,CAAC,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI;IAKrE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAIpD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAKnD,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,GAAG,IAAI;IAIjE;;;OAGG;IACH,kCAAkC,CAChC,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,EACb,OAAO,SAAU,EACjB,YAAY,CAAC,EAAE,mBAAmB,GACjC,IAAI;IAiFP,kBAAkB,CAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,YAAY,CAAC,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,EACvE,IAAI,CAAC,EAAE,OAAO,GACb,MAAM;IAeT,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAKlC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAQrC,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI;IAKvD,UAAU,IAAI,MAAM;IAUpB,WAAW,IAAI,MAAM;IAUrB,iBAAiB,IAAI,MAAM;IAY3B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIpC,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIzC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrC,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,SAAa,GAAG,IAAI;IAqBnE,oBAAoB,IAAI,oBAAoB,EAAE;IAI9C,8BAA8B,IAAI,sBAAsB,EAAE;IAI1D,mBAAmB,CACjB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,oBAAoB,CAAC,YAAY,CAAC,EAC7C,GAAG,SAAa,GACf,IAAI;IAeP,yBAAyB,CACvB,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,GAAG,SAAa,GACf,IAAI;IAeP,uBAAuB,CAAC,UAAU,EAAE,yBAAyB,GAAG,IAAI;IAOpE,sFAAsF;IACtF,2BAA2B,CACzB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,IAAI,GAC9F,IAAI;IAUP,MAAM,CAAC,GAAG,EAAE,MAAM,MAAM,GAAG,MAAM;CAGlC"}