@primocaredentgroup/elettromedicali 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 (197) hide show
  1. package/dist/client/index.d.ts +72 -0
  2. package/dist/client/index.d.ts.map +1 -0
  3. package/dist/client/index.js +233 -0
  4. package/dist/client/index.js.map +1 -0
  5. package/dist/component/_generated/api.d.ts +94 -0
  6. package/dist/component/_generated/api.d.ts.map +1 -0
  7. package/dist/component/_generated/api.js +31 -0
  8. package/dist/component/_generated/api.js.map +1 -0
  9. package/dist/component/_generated/component.d.ts +1444 -0
  10. package/dist/component/_generated/component.d.ts.map +1 -0
  11. package/dist/component/_generated/component.js +11 -0
  12. package/dist/component/_generated/component.js.map +1 -0
  13. package/dist/component/_generated/dataModel.d.ts +46 -0
  14. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  15. package/dist/component/_generated/dataModel.js +11 -0
  16. package/dist/component/_generated/dataModel.js.map +1 -0
  17. package/dist/component/_generated/server.d.ts +121 -0
  18. package/dist/component/_generated/server.d.ts.map +1 -0
  19. package/dist/component/_generated/server.js +78 -0
  20. package/dist/component/_generated/server.js.map +1 -0
  21. package/dist/component/apiKeys.d.ts +69 -0
  22. package/dist/component/apiKeys.d.ts.map +1 -0
  23. package/dist/component/apiKeys.js +207 -0
  24. package/dist/component/apiKeys.js.map +1 -0
  25. package/dist/component/clinics.d.ts +103 -0
  26. package/dist/component/clinics.d.ts.map +1 -0
  27. package/dist/component/clinics.js +126 -0
  28. package/dist/component/clinics.js.map +1 -0
  29. package/dist/component/contracts.d.ts +85 -0
  30. package/dist/component/contracts.d.ts.map +1 -0
  31. package/dist/component/contracts.js +115 -0
  32. package/dist/component/contracts.js.map +1 -0
  33. package/dist/component/convex.config.d.ts +3 -0
  34. package/dist/component/convex.config.d.ts.map +1 -0
  35. package/dist/component/convex.config.js +3 -0
  36. package/dist/component/convex.config.js.map +1 -0
  37. package/dist/component/crons.d.ts +3 -0
  38. package/dist/component/crons.d.ts.map +1 -0
  39. package/dist/component/crons.js +7 -0
  40. package/dist/component/crons.js.map +1 -0
  41. package/dist/component/dashboardStats.d.ts +14 -0
  42. package/dist/component/dashboardStats.d.ts.map +1 -0
  43. package/dist/component/dashboardStats.js +136 -0
  44. package/dist/component/dashboardStats.js.map +1 -0
  45. package/dist/component/dashboardStatsCache.d.ts +32 -0
  46. package/dist/component/dashboardStatsCache.d.ts.map +1 -0
  47. package/dist/component/dashboardStatsCache.js +129 -0
  48. package/dist/component/dashboardStatsCache.js.map +1 -0
  49. package/dist/component/deviceCategories.d.ts +108 -0
  50. package/dist/component/deviceCategories.d.ts.map +1 -0
  51. package/dist/component/deviceCategories.js +254 -0
  52. package/dist/component/deviceCategories.js.map +1 -0
  53. package/dist/component/deviceQuestions.d.ts +129 -0
  54. package/dist/component/deviceQuestions.d.ts.map +1 -0
  55. package/dist/component/deviceQuestions.js +175 -0
  56. package/dist/component/deviceQuestions.js.map +1 -0
  57. package/dist/component/deviceRepairHistory.d.ts +30 -0
  58. package/dist/component/deviceRepairHistory.d.ts.map +1 -0
  59. package/dist/component/deviceRepairHistory.js +84 -0
  60. package/dist/component/deviceRepairHistory.js.map +1 -0
  61. package/dist/component/deviceStatus.d.ts +63 -0
  62. package/dist/component/deviceStatus.d.ts.map +1 -0
  63. package/dist/component/deviceStatus.js +58 -0
  64. package/dist/component/deviceStatus.js.map +1 -0
  65. package/dist/component/devices.d.ts +299 -0
  66. package/dist/component/devices.d.ts.map +1 -0
  67. package/dist/component/devices.js +587 -0
  68. package/dist/component/devices.js.map +1 -0
  69. package/dist/component/emailHelpers.d.ts +17 -0
  70. package/dist/component/emailHelpers.d.ts.map +1 -0
  71. package/dist/component/emailHelpers.js +39 -0
  72. package/dist/component/emailHelpers.js.map +1 -0
  73. package/dist/component/emails.d.ts +56 -0
  74. package/dist/component/emails.d.ts.map +1 -0
  75. package/dist/component/emails.js +58 -0
  76. package/dist/component/emails.js.map +1 -0
  77. package/dist/component/http.d.ts +3 -0
  78. package/dist/component/http.d.ts.map +1 -0
  79. package/dist/component/http.js +229 -0
  80. package/dist/component/http.js.map +1 -0
  81. package/dist/component/maintenanceTasks.d.ts +733 -0
  82. package/dist/component/maintenanceTasks.d.ts.map +1 -0
  83. package/dist/component/maintenanceTasks.js +937 -0
  84. package/dist/component/maintenanceTasks.js.map +1 -0
  85. package/dist/component/roles.d.ts +75 -0
  86. package/dist/component/roles.d.ts.map +1 -0
  87. package/dist/component/roles.js +98 -0
  88. package/dist/component/roles.js.map +1 -0
  89. package/dist/component/schema.d.ts +1295 -0
  90. package/dist/component/schema.d.ts.map +1 -0
  91. package/dist/component/schema.js +724 -0
  92. package/dist/component/schema.js.map +1 -0
  93. package/dist/component/slaMonitoring.d.ts +32 -0
  94. package/dist/component/slaMonitoring.d.ts.map +1 -0
  95. package/dist/component/slaMonitoring.js +111 -0
  96. package/dist/component/slaMonitoring.js.map +1 -0
  97. package/dist/component/slaRules.d.ts +72 -0
  98. package/dist/component/slaRules.d.ts.map +1 -0
  99. package/dist/component/slaRules.js +193 -0
  100. package/dist/component/slaRules.js.map +1 -0
  101. package/dist/component/sparePartOrders.d.ts +177 -0
  102. package/dist/component/sparePartOrders.d.ts.map +1 -0
  103. package/dist/component/sparePartOrders.js +243 -0
  104. package/dist/component/sparePartOrders.js.map +1 -0
  105. package/dist/component/spareParts.d.ts +472 -0
  106. package/dist/component/spareParts.d.ts.map +1 -0
  107. package/dist/component/spareParts.js +319 -0
  108. package/dist/component/spareParts.js.map +1 -0
  109. package/dist/component/supplierCategories.d.ts +22 -0
  110. package/dist/component/supplierCategories.d.ts.map +1 -0
  111. package/dist/component/supplierCategories.js +64 -0
  112. package/dist/component/supplierCategories.js.map +1 -0
  113. package/dist/component/suppliers.d.ts +94 -0
  114. package/dist/component/suppliers.d.ts.map +1 -0
  115. package/dist/component/suppliers.js +195 -0
  116. package/dist/component/suppliers.js.map +1 -0
  117. package/dist/component/ticketComments.d.ts +89 -0
  118. package/dist/component/ticketComments.d.ts.map +1 -0
  119. package/dist/component/ticketComments.js +246 -0
  120. package/dist/component/ticketComments.js.map +1 -0
  121. package/dist/component/ticketCustomFields.d.ts +149 -0
  122. package/dist/component/ticketCustomFields.d.ts.map +1 -0
  123. package/dist/component/ticketCustomFields.js +215 -0
  124. package/dist/component/ticketCustomFields.js.map +1 -0
  125. package/dist/component/ticketExport.d.ts +83 -0
  126. package/dist/component/ticketExport.d.ts.map +1 -0
  127. package/dist/component/ticketExport.js +182 -0
  128. package/dist/component/ticketExport.js.map +1 -0
  129. package/dist/component/ticketHistory.d.ts +57 -0
  130. package/dist/component/ticketHistory.d.ts.map +1 -0
  131. package/dist/component/ticketHistory.js +81 -0
  132. package/dist/component/ticketHistory.js.map +1 -0
  133. package/dist/component/ticketMacros.d.ts +141 -0
  134. package/dist/component/ticketMacros.d.ts.map +1 -0
  135. package/dist/component/ticketMacros.js +255 -0
  136. package/dist/component/ticketMacros.js.map +1 -0
  137. package/dist/component/ticketStatuses.d.ts +60 -0
  138. package/dist/component/ticketStatuses.d.ts.map +1 -0
  139. package/dist/component/ticketStatuses.js +110 -0
  140. package/dist/component/ticketStatuses.js.map +1 -0
  141. package/dist/component/ticketTriggers.d.ts +408 -0
  142. package/dist/component/ticketTriggers.d.ts.map +1 -0
  143. package/dist/component/ticketTriggers.js +941 -0
  144. package/dist/component/ticketTriggers.js.map +1 -0
  145. package/dist/component/userProfiles.d.ts +259 -0
  146. package/dist/component/userProfiles.d.ts.map +1 -0
  147. package/dist/component/userProfiles.js +634 -0
  148. package/dist/component/userProfiles.js.map +1 -0
  149. package/dist/component/vendorArticles.d.ts +64 -0
  150. package/dist/component/vendorArticles.d.ts.map +1 -0
  151. package/dist/component/vendorArticles.js +116 -0
  152. package/dist/component/vendorArticles.js.map +1 -0
  153. package/dist/test.d.ts +1302 -0
  154. package/dist/test.d.ts.map +1 -0
  155. package/dist/test.js +7 -0
  156. package/dist/test.js.map +1 -0
  157. package/package.json +71 -0
  158. package/src/client/index.ts +344 -0
  159. package/src/component/_generated/api.ts +110 -0
  160. package/src/component/_generated/component.ts +2460 -0
  161. package/src/component/_generated/dataModel.ts +60 -0
  162. package/src/component/_generated/server.ts +156 -0
  163. package/src/component/apiKeys.ts +229 -0
  164. package/src/component/clinics.ts +136 -0
  165. package/src/component/contracts.ts +136 -0
  166. package/src/component/convex.config.js +2 -0
  167. package/src/component/convex.config.ts +3 -0
  168. package/src/component/crons.ts +18 -0
  169. package/src/component/dashboardStats.ts +141 -0
  170. package/src/component/dashboardStatsCache.ts +145 -0
  171. package/src/component/deviceCategories.ts +280 -0
  172. package/src/component/deviceQuestions.ts +225 -0
  173. package/src/component/deviceRepairHistory.ts +94 -0
  174. package/src/component/deviceStatus.ts +79 -0
  175. package/src/component/devices.ts +645 -0
  176. package/src/component/emailHelpers.ts +38 -0
  177. package/src/component/emails.ts +61 -0
  178. package/src/component/http.ts +231 -0
  179. package/src/component/maintenanceTasks.ts +1003 -0
  180. package/src/component/roles.ts +99 -0
  181. package/src/component/schema.ts +842 -0
  182. package/src/component/slaMonitoring.ts +125 -0
  183. package/src/component/slaRules.ts +231 -0
  184. package/src/component/sparePartOrders.ts +290 -0
  185. package/src/component/spareParts.ts +362 -0
  186. package/src/component/supplierCategories.ts +65 -0
  187. package/src/component/suppliers.ts +234 -0
  188. package/src/component/ticketComments.ts +288 -0
  189. package/src/component/ticketCustomFields.ts +260 -0
  190. package/src/component/ticketExport.ts +220 -0
  191. package/src/component/ticketHistory.ts +106 -0
  192. package/src/component/ticketMacros.ts +291 -0
  193. package/src/component/ticketStatuses.ts +109 -0
  194. package/src/component/ticketTriggers.ts +1152 -0
  195. package/src/component/userProfiles.ts +745 -0
  196. package/src/component/vendorArticles.ts +139 -0
  197. package/src/test.ts +15 -0
@@ -0,0 +1,587 @@
1
+ import { v } from 'convex/values';
2
+ import { query, mutation } from './_generated/server';
3
+ async function getPhotoUrl(ctx, device) {
4
+ if (device.photoStorageId) {
5
+ return await ctx.storage.getUrl(device.photoStorageId);
6
+ }
7
+ if (device.photo && device.photo.trim() !== '') {
8
+ return device.photo;
9
+ }
10
+ return null;
11
+ }
12
+ export const listDevices = query({
13
+ args: {
14
+ paginationOpts: v.optional(v.object({
15
+ numItems: v.number(),
16
+ cursor: v.union(v.string(), v.null()),
17
+ })),
18
+ clinicId: v.optional(v.id('clinics')),
19
+ _triggerReload: v.optional(v.number()),
20
+ userRole: v.optional(v.string()),
21
+ userClinicId: v.optional(v.id('clinics')),
22
+ userSelectedClinicId: v.optional(v.number()),
23
+ },
24
+ handler: async (ctx, args) => {
25
+ const limit = args.paginationOpts?.numItems || 100;
26
+ let devices;
27
+ if (args.userRole === 'admin') {
28
+ if (args.clinicId) {
29
+ const result = await ctx.db
30
+ .query('devices')
31
+ .withIndex('by_clinicId', (q) => q.eq('clinicId', args.clinicId))
32
+ .paginate({ numItems: limit, cursor: args.paginationOpts?.cursor || null });
33
+ devices = result.page;
34
+ }
35
+ else {
36
+ const result = await ctx.db
37
+ .query('devices')
38
+ .paginate({ numItems: limit, cursor: args.paginationOpts?.cursor || null });
39
+ devices = result.page;
40
+ }
41
+ }
42
+ else if (args.userRole === 'user') {
43
+ try {
44
+ const selectedClinicId = args.userSelectedClinicId;
45
+ if (selectedClinicId) {
46
+ devices = await ctx.db
47
+ .query('devices')
48
+ .withIndex('by_primoupClinicId', (q) => q.eq('primoupClinicId', selectedClinicId))
49
+ .take(limit);
50
+ }
51
+ else {
52
+ devices = [];
53
+ }
54
+ }
55
+ catch (error) {
56
+ devices = [];
57
+ }
58
+ }
59
+ else {
60
+ devices = [];
61
+ }
62
+ const devicesWithUrls = await Promise.all(devices.map(async (device) => ({
63
+ ...device,
64
+ photoUrl: await getPhotoUrl(ctx, device),
65
+ })));
66
+ return devicesWithUrls;
67
+ },
68
+ });
69
+ export const listDevicesPaginated = query({
70
+ args: {
71
+ paginationOpts: v.object({
72
+ numItems: v.number(),
73
+ cursor: v.union(v.string(), v.null()),
74
+ }),
75
+ category: v.optional(v.string()),
76
+ brand: v.optional(v.string()),
77
+ status: v.optional(v.string()),
78
+ searchTerm: v.optional(v.string()),
79
+ clinicId: v.optional(v.id('clinics')),
80
+ userRole: v.optional(v.string()),
81
+ userClinicId: v.optional(v.id('clinics')),
82
+ userSelectedClinicId: v.optional(v.number()),
83
+ },
84
+ handler: async (ctx, args) => {
85
+ let baseQuery;
86
+ if (args.userRole === 'admin') {
87
+ if (args.clinicId) {
88
+ baseQuery = ctx.db
89
+ .query('devices')
90
+ .withIndex('by_clinicId', (q) => q.eq('clinicId', args.clinicId));
91
+ }
92
+ else if (args.category) {
93
+ baseQuery = ctx.db
94
+ .query('devices')
95
+ .withIndex('by_category', (q) => q.eq('category', args.category));
96
+ }
97
+ else if (args.status) {
98
+ baseQuery = ctx.db
99
+ .query('devices')
100
+ .withIndex('by_status', (q) => q.eq('status', args.status));
101
+ }
102
+ else {
103
+ baseQuery = ctx.db.query('devices');
104
+ }
105
+ }
106
+ else if (args.userRole === 'user') {
107
+ const selectedClinicId = args.userSelectedClinicId;
108
+ if (!selectedClinicId) {
109
+ return { page: [], isDone: true, continueCursor: '' };
110
+ }
111
+ baseQuery = ctx.db
112
+ .query('devices')
113
+ .withIndex('by_primoupClinicId', (q) => q.eq('primoupClinicId', selectedClinicId));
114
+ }
115
+ else {
116
+ return { page: [], isDone: true, continueCursor: '' };
117
+ }
118
+ let filteredQuery = baseQuery.order('desc');
119
+ if (args.category && !(args.userRole === 'admin' && !args.clinicId && !args.status)) {
120
+ filteredQuery = filteredQuery.filter((q) => q.eq(q.field('category'), args.category));
121
+ }
122
+ if (args.brand) {
123
+ filteredQuery = filteredQuery.filter((q) => q.eq(q.field('brand'), args.brand));
124
+ }
125
+ if (args.status && !(args.userRole === 'admin' && !args.clinicId && !args.category)) {
126
+ filteredQuery = filteredQuery.filter((q) => q.eq(q.field('status'), args.status));
127
+ }
128
+ const result = await filteredQuery.paginate(args.paginationOpts);
129
+ let filteredPage = result.page;
130
+ if (args.searchTerm) {
131
+ const search = args.searchTerm.toLowerCase();
132
+ filteredPage = filteredPage.filter((device) => device.name?.toLowerCase().includes(search) ||
133
+ device.brand?.toLowerCase().includes(search) ||
134
+ device.model?.toLowerCase().includes(search) ||
135
+ device.serialNumber?.toLowerCase().includes(search) ||
136
+ device.internalId?.toLowerCase().includes(search));
137
+ }
138
+ const clinicIds = [...new Set(filteredPage.map((d) => d.clinicId).filter(Boolean))];
139
+ const clinics = await Promise.all(clinicIds.map(id => ctx.db.get(id)));
140
+ const clinicMap = new Map(clinics.filter(Boolean).map((c) => [c._id.toString(), c.name]));
141
+ const minimalPage = await Promise.all(filteredPage.map(async (device) => ({
142
+ _id: device._id,
143
+ name: device.name,
144
+ category: device.category,
145
+ brand: device.brand,
146
+ model: device.model,
147
+ serialNumber: device.serialNumber,
148
+ internalId: device.internalId,
149
+ status: device.status,
150
+ clinicId: device.clinicId,
151
+ clinicName: clinicMap.get(device.clinicId?.toString()) || 'Unknown',
152
+ photoUrl: device.photoStorageId
153
+ ? await ctx.storage.getUrl(device.photoStorageId)
154
+ : null,
155
+ })));
156
+ return {
157
+ page: minimalPage,
158
+ isDone: result.isDone,
159
+ continueCursor: result.continueCursor,
160
+ };
161
+ },
162
+ });
163
+ export const getDevicesCount = query({
164
+ args: {
165
+ category: v.optional(v.string()),
166
+ brand: v.optional(v.string()),
167
+ status: v.optional(v.string()),
168
+ clinicId: v.optional(v.id('clinics')),
169
+ userRole: v.optional(v.string()),
170
+ userClinicId: v.optional(v.id('clinics')),
171
+ userSelectedClinicId: v.optional(v.number()),
172
+ },
173
+ handler: async (ctx, args) => {
174
+ let devicesQuery;
175
+ if (args.userRole === 'admin') {
176
+ if (args.clinicId) {
177
+ devicesQuery = ctx.db.query('devices')
178
+ .withIndex('by_clinicId', (q) => q.eq('clinicId', args.clinicId));
179
+ }
180
+ else if (args.category) {
181
+ devicesQuery = ctx.db.query('devices')
182
+ .withIndex('by_category', (q) => q.eq('category', args.category));
183
+ }
184
+ else {
185
+ devicesQuery = ctx.db.query('devices');
186
+ }
187
+ }
188
+ else if (args.userRole === 'user') {
189
+ const selectedClinicId = args.userSelectedClinicId;
190
+ if (!selectedClinicId)
191
+ return { total: 0 };
192
+ devicesQuery = ctx.db.query('devices')
193
+ .withIndex('by_primoupClinicId', (q) => q.eq('primoupClinicId', selectedClinicId));
194
+ }
195
+ else {
196
+ return { total: 0 };
197
+ }
198
+ if (args.brand) {
199
+ devicesQuery = devicesQuery.filter((q) => q.eq(q.field('brand'), args.brand));
200
+ }
201
+ if (args.status && !args.category) {
202
+ devicesQuery = devicesQuery.filter((q) => q.eq(q.field('status'), args.status));
203
+ }
204
+ const devices = await devicesQuery.collect();
205
+ return { total: devices.length };
206
+ },
207
+ });
208
+ export const getDevice = query({
209
+ args: { deviceId: v.id('devices') },
210
+ handler: async (ctx, args) => {
211
+ const device = await ctx.db.get(args.deviceId);
212
+ if (!device)
213
+ return null;
214
+ return {
215
+ ...device,
216
+ photoUrl: await getPhotoUrl(ctx, device),
217
+ };
218
+ },
219
+ });
220
+ export const getById = query({
221
+ args: { id: v.id('devices') },
222
+ handler: async (ctx, args) => {
223
+ const device = await ctx.db.get(args.id);
224
+ if (!device)
225
+ return null;
226
+ return {
227
+ ...device,
228
+ photoUrl: await getPhotoUrl(ctx, device),
229
+ };
230
+ },
231
+ });
232
+ export const listAllDevicesForMigration = query({
233
+ args: {
234
+ limit: v.optional(v.number()),
235
+ lastCreationTime: v.optional(v.number()),
236
+ },
237
+ handler: async (ctx, args) => {
238
+ const limit = args.limit || 1000;
239
+ const devices = args.lastCreationTime
240
+ ? await ctx.db
241
+ .query('devices')
242
+ .filter((q) => q.gt(q.field('_creationTime'), args.lastCreationTime))
243
+ .take(limit)
244
+ : await ctx.db.query('devices').take(limit);
245
+ return devices;
246
+ },
247
+ });
248
+ export const generateUploadUrl = mutation({
249
+ args: {},
250
+ handler: async (ctx) => {
251
+ return await ctx.storage.generateUploadUrl();
252
+ },
253
+ });
254
+ export const createDevice = mutation({
255
+ args: {
256
+ clinicId: v.id('clinics'),
257
+ supplierId: v.optional(v.id('suppliers')),
258
+ name: v.string(),
259
+ category: v.string(),
260
+ brand: v.string(),
261
+ model: v.string(),
262
+ serial_number: v.string(),
263
+ photoStorageId: v.optional(v.id('_storage')),
264
+ status: v.union(v.literal('active'), v.literal('in_maintenance'), v.literal('out_of_service')),
265
+ metadata: v.optional(v.any()),
266
+ internalId: v.optional(v.string()),
267
+ industry40Data: v.optional(v.string()),
268
+ purchaseDate: v.optional(v.number()),
269
+ vendor: v.optional(v.string()),
270
+ purchaseCost: v.optional(v.number()),
271
+ warrantyEndDate: v.optional(v.number()),
272
+ spareParts: v.optional(v.array(v.object({
273
+ name: v.string(),
274
+ code: v.string(),
275
+ photoStorageId: v.optional(v.id('_storage')),
276
+ quantity: v.number(),
277
+ notes: v.optional(v.string()),
278
+ }))),
279
+ maintenanceManualStorageId: v.optional(v.id('_storage')),
280
+ maintenanceReportsStorageIds: v.optional(v.array(v.id('_storage'))),
281
+ conformityDeclarationStorageId: v.optional(v.id('_storage')),
282
+ authorizationsStorageIds: v.optional(v.array(v.id('_storage'))),
283
+ otherAttachmentsStorageIds: v.optional(v.array(v.id('_storage'))),
284
+ },
285
+ handler: async (ctx, args) => {
286
+ const deviceData = { ...args };
287
+ const clinic = await ctx.db.get(args.clinicId);
288
+ if (clinic?.primoupId) {
289
+ const primoupIdNum = parseInt(clinic.primoupId, 10);
290
+ if (!isNaN(primoupIdNum)) {
291
+ deviceData.primoupClinicId = primoupIdNum;
292
+ }
293
+ }
294
+ const deviceId = await ctx.db.insert('devices', deviceData);
295
+ return deviceId;
296
+ },
297
+ });
298
+ export const updateDevice = mutation({
299
+ args: {
300
+ deviceId: v.id('devices'),
301
+ clinicId: v.optional(v.id('clinics')),
302
+ primoupClinicId: v.optional(v.number()),
303
+ supplierId: v.optional(v.id('suppliers')),
304
+ name: v.optional(v.string()),
305
+ category: v.optional(v.string()),
306
+ brand: v.optional(v.string()),
307
+ model: v.optional(v.string()),
308
+ serial_number: v.optional(v.string()),
309
+ photoStorageId: v.optional(v.id('_storage')),
310
+ status: v.optional(v.union(v.literal('active'), v.literal('in_maintenance'), v.literal('out_of_service'))),
311
+ metadata: v.optional(v.any()),
312
+ internalId: v.optional(v.string()),
313
+ primoupCategoryId: v.optional(v.string()),
314
+ industry40Data: v.optional(v.string()),
315
+ purchaseDate: v.optional(v.number()),
316
+ vendor: v.optional(v.string()),
317
+ purchaseCost: v.optional(v.number()),
318
+ warrantyEndDate: v.optional(v.number()),
319
+ spareParts: v.optional(v.array(v.object({
320
+ name: v.string(),
321
+ code: v.string(),
322
+ photoStorageId: v.optional(v.id('_storage')),
323
+ quantity: v.number(),
324
+ notes: v.optional(v.string()),
325
+ }))),
326
+ maintenanceManualStorageId: v.optional(v.id('_storage')),
327
+ maintenanceReportsStorageIds: v.optional(v.array(v.id('_storage'))),
328
+ conformityDeclarationStorageId: v.optional(v.id('_storage')),
329
+ authorizationsStorageIds: v.optional(v.array(v.id('_storage'))),
330
+ otherAttachmentsStorageIds: v.optional(v.array(v.id('_storage'))),
331
+ },
332
+ handler: async (ctx, args) => {
333
+ const { deviceId, ...updates } = args;
334
+ const existingDevice = await ctx.db.get(deviceId);
335
+ if (existingDevice?.photoStorageId && updates.photoStorageId && existingDevice.photoStorageId !== updates.photoStorageId) {
336
+ try {
337
+ await ctx.storage.delete(existingDevice.photoStorageId);
338
+ }
339
+ catch (e) {
340
+ // Continue even if delete fails
341
+ }
342
+ }
343
+ await ctx.db.patch(deviceId, updates);
344
+ return deviceId;
345
+ },
346
+ });
347
+ export const updateDeviceByUser = mutation({
348
+ args: {
349
+ deviceId: v.id('devices'),
350
+ name: v.optional(v.string()),
351
+ category: v.optional(v.string()),
352
+ brand: v.optional(v.string()),
353
+ model: v.optional(v.string()),
354
+ serial_number: v.optional(v.string()),
355
+ status: v.optional(v.union(v.literal('active'), v.literal('in_maintenance'), v.literal('out_of_service'))),
356
+ industry40Data: v.optional(v.string()),
357
+ userRole: v.string(),
358
+ userSelectedClinicId: v.optional(v.number()),
359
+ userClinicId: v.optional(v.id('clinics')),
360
+ },
361
+ handler: async (ctx, args) => {
362
+ const device = await ctx.db.get(args.deviceId);
363
+ if (!device) {
364
+ throw new Error('Device not found');
365
+ }
366
+ if (args.userRole === 'user') {
367
+ const selectedClinicId = args.userSelectedClinicId;
368
+ if (selectedClinicId) {
369
+ if (device.primoupClinicId !== selectedClinicId) {
370
+ throw new Error('Not authorized to update this device');
371
+ }
372
+ }
373
+ else if (args.userClinicId && args.userClinicId !== device.clinicId) {
374
+ throw new Error('Not authorized to update this device');
375
+ }
376
+ }
377
+ else if (args.userRole !== 'admin') {
378
+ throw new Error('Not authorized to update devices');
379
+ }
380
+ const { deviceId, userRole, userSelectedClinicId, userClinicId, ...updates } = args;
381
+ await ctx.db.patch(deviceId, updates);
382
+ return deviceId;
383
+ },
384
+ });
385
+ export const deleteDevice = mutation({
386
+ args: { deviceId: v.id('devices') },
387
+ handler: async (ctx, args) => {
388
+ const device = await ctx.db.get(args.deviceId);
389
+ if (device?.photoStorageId) {
390
+ await ctx.storage.delete(device.photoStorageId);
391
+ }
392
+ await ctx.db.delete(args.deviceId);
393
+ return { success: true };
394
+ },
395
+ });
396
+ export const getDeviceStats = query({
397
+ args: {
398
+ userRole: v.optional(v.string()),
399
+ userClinicId: v.optional(v.id('clinics')),
400
+ },
401
+ handler: async (ctx, args) => {
402
+ try {
403
+ if (args.userRole === 'admin') {
404
+ const LIMIT = 500;
405
+ const [active, inMaintenance, outOfService] = await Promise.all([
406
+ ctx.db.query('devices').withIndex('by_status', (q) => q.eq('status', 'active')).take(LIMIT),
407
+ ctx.db.query('devices').withIndex('by_status', (q) => q.eq('status', 'in_maintenance')).take(LIMIT),
408
+ ctx.db.query('devices').withIndex('by_status', (q) => q.eq('status', 'out_of_service')).take(LIMIT),
409
+ ]);
410
+ return {
411
+ total: active.length + inMaintenance.length + outOfService.length,
412
+ active: active.length,
413
+ in_maintenance: inMaintenance.length,
414
+ out_of_service: outOfService.length,
415
+ };
416
+ }
417
+ else if (args.userRole === 'user' && args.userClinicId) {
418
+ const devices = await ctx.db
419
+ .query('devices')
420
+ .withIndex('by_clinicId', (q) => q.eq('clinicId', args.userClinicId))
421
+ .collect();
422
+ return {
423
+ total: devices.length,
424
+ active: devices.filter((d) => d.status === 'active').length,
425
+ in_maintenance: devices.filter((d) => d.status === 'in_maintenance').length,
426
+ out_of_service: devices.filter((d) => d.status === 'out_of_service').length,
427
+ };
428
+ }
429
+ return { total: 0, active: 0, in_maintenance: 0, out_of_service: 0 };
430
+ }
431
+ catch (error) {
432
+ console.error('Error in getDeviceStats:', error);
433
+ return { total: 0, active: 0, in_maintenance: 0, out_of_service: 0 };
434
+ }
435
+ },
436
+ });
437
+ export const getFileUrl = query({
438
+ args: { storageId: v.id('_storage') },
439
+ handler: async (ctx, args) => {
440
+ const url = await ctx.storage.getUrl(args.storageId);
441
+ return url;
442
+ },
443
+ });
444
+ export const listAllDevicesForExport = query({
445
+ args: {},
446
+ handler: async (ctx) => {
447
+ const clinics = await ctx.db.query('clinics').take(500);
448
+ const results = [];
449
+ for (const clinic of clinics) {
450
+ const clinicDevices = await ctx.db
451
+ .query('devices')
452
+ .withIndex('by_clinicId', (q) => q.eq('clinicId', clinic._id))
453
+ .take(1000);
454
+ for (const device of clinicDevices) {
455
+ results.push({
456
+ clinicName: clinic.name || 'Sconosciuta',
457
+ category: device.category || '',
458
+ brand: device.brand || '',
459
+ model: device.model || '',
460
+ serial_number: device.serial_number || '',
461
+ quantity: device.quantity || 1,
462
+ status: device.status || 'active',
463
+ });
464
+ }
465
+ }
466
+ return results;
467
+ },
468
+ });
469
+ export const getDeviceTemplates = query({
470
+ args: {
471
+ searchQuery: v.optional(v.string()),
472
+ },
473
+ handler: async (ctx, args) => {
474
+ const devices = await ctx.db.query('devices').take(2000);
475
+ const templateMap = new Map();
476
+ for (const device of devices) {
477
+ const name = device.name;
478
+ if (args.searchQuery) {
479
+ const query = args.searchQuery.toLowerCase();
480
+ if (!name.toLowerCase().includes(query) &&
481
+ !device.brand.toLowerCase().includes(query) &&
482
+ !device.category.toLowerCase().includes(query)) {
483
+ continue;
484
+ }
485
+ }
486
+ if (!templateMap.has(name)) {
487
+ templateMap.set(name, {
488
+ name,
489
+ category: device.category,
490
+ brands: new Map(),
491
+ });
492
+ }
493
+ const template = templateMap.get(name);
494
+ if (!template.brands.has(device.brand)) {
495
+ template.brands.set(device.brand, new Set());
496
+ }
497
+ template.brands.get(device.brand).add(device.model);
498
+ }
499
+ const templates = Array.from(templateMap.values()).map(t => ({
500
+ name: t.name,
501
+ category: t.category,
502
+ brandOptions: Array.from(t.brands.entries()).map(([brand, models]) => ({
503
+ brand,
504
+ models: Array.from(models),
505
+ })),
506
+ }));
507
+ templates.sort((a, b) => a.name.localeCompare(b.name));
508
+ return templates;
509
+ },
510
+ });
511
+ export const createDeviceByUser = mutation({
512
+ args: {
513
+ name: v.string(),
514
+ category: v.string(),
515
+ brand: v.string(),
516
+ model: v.string(),
517
+ serial_number: v.string(),
518
+ userSelectedClinicId: v.number(),
519
+ userPrimoupClinics: v.optional(v.array(v.any())),
520
+ },
521
+ handler: async (ctx, args) => {
522
+ const selectedClinicId = args.userSelectedClinicId;
523
+ const primoupClinics = args.userPrimoupClinics || [];
524
+ const selectedPrimoupClinic = primoupClinics.find((c) => c.id === selectedClinicId);
525
+ if (!selectedPrimoupClinic) {
526
+ throw new Error('Selected clinic not found in user profile');
527
+ }
528
+ let clinic = await ctx.db
529
+ .query('clinics')
530
+ .withIndex('by_primoupId', (q) => q.eq('primoupId', String(selectedClinicId)))
531
+ .first();
532
+ if (!clinic) {
533
+ const clinics = await ctx.db.query('clinics').take(500);
534
+ clinic = clinics.find(c => c.name === selectedPrimoupClinic.name) || null;
535
+ }
536
+ if (!clinic) {
537
+ throw new Error('Clinic not found in database');
538
+ }
539
+ const deviceId = await ctx.db.insert('devices', {
540
+ clinicId: clinic._id,
541
+ primoupClinicId: selectedClinicId,
542
+ name: args.name,
543
+ category: args.category,
544
+ brand: args.brand,
545
+ model: args.model,
546
+ serial_number: args.serial_number,
547
+ status: 'active',
548
+ quantity: 1,
549
+ });
550
+ return deviceId;
551
+ },
552
+ });
553
+ export const listAllDevicesForAdmin = query({
554
+ args: {},
555
+ handler: async (ctx) => {
556
+ const devices = await ctx.db.query('devices').take(3000);
557
+ return devices.map(device => ({
558
+ _id: device._id,
559
+ name: device.name,
560
+ category: device.category || '',
561
+ brand: device.brand || '',
562
+ model: device.model || '',
563
+ clinicId: device.clinicId,
564
+ }));
565
+ },
566
+ });
567
+ export const getUniqueBrandsAndModels = query({
568
+ args: {},
569
+ handler: async (ctx) => {
570
+ const devices = await ctx.db.query('devices').take(3000);
571
+ const brandsSet = new Set();
572
+ const modelsSet = new Set();
573
+ for (const device of devices) {
574
+ if (device.brand && device.brand.trim()) {
575
+ brandsSet.add(device.brand.trim());
576
+ }
577
+ if (device.model && device.model.trim()) {
578
+ modelsSet.add(device.model.trim());
579
+ }
580
+ }
581
+ return {
582
+ brands: Array.from(brandsSet).sort(),
583
+ models: Array.from(modelsSet).sort(),
584
+ };
585
+ },
586
+ });
587
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../../src/component/devices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEtD,KAAK,UAAU,WAAW,CAAC,GAAQ,EAAE,MAAW;IAC9C,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE;QACJ,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;YAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7C;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,GAAG,CAAC;QAEnD,IAAI,OAAc,CAAC;QACnB,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;qBACxB,KAAK,CAAC,SAAS,CAAC;qBAChB,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;qBACrE,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9E,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;qBACxB,KAAK,CAAC,SAAS,CAAC;qBAChB,QAAQ,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC9E,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;gBAEnD,IAAI,gBAAgB,EAAE,CAAC;oBACrB,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;yBACnB,KAAK,CAAC,SAAS,CAAC;yBAChB,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;yBACtF,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;SACzC,CAAC,CAAC,CACJ,CAAC;QAEF,OAAO,eAAe,CAAC;IACzB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;IACxC,IAAI,EAAE;QACJ,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC;YACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;SACtC,CAAC;QACF,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7C;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,SAAS,CAAC;QAEd,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,SAAS,GAAG,GAAG,CAAC,EAAE;qBACf,KAAK,CAAC,SAAS,CAAC;qBAChB,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,SAAS,GAAG,GAAG,CAAC,EAAE;qBACf,KAAK,CAAC,SAAS,CAAC;qBAChB,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvB,SAAS,GAAG,GAAG,CAAC,EAAE;qBACf,KAAK,CAAC,SAAS,CAAC;qBAChB,SAAS,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACrE,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAEnD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;YACxD,CAAC;YAED,SAAS,GAAG,GAAG,CAAC,EAAE;iBACf,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;QACxD,CAAC;QAED,IAAI,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpF,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpF,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEjE,IAAI,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;QAE/B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC7C,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,MAAW,EAAE,EAAE,CACjD,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3C,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC5C,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACnD,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAClD,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,MAAW,EAAE,EAAE,CAAC,CAAC;YACvC,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,IAAI,SAAS;YACnE,QAAQ,EAAE,MAAM,CAAC,cAAc;gBAC7B,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBACjD,CAAC,CAAC,IAAI;SACT,CAAC,CAAC,CACJ,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;IACnC,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACzC,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7C;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,YAAY,CAAC;QAEjB,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;qBACnC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;qBACnC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YACnD,IAAI,CAAC,gBAAgB;gBAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAE3C,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;iBACnC,SAAS,CAAC,oBAAoB,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC;IAC7B,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;IACnC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO;YACL,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;SACzC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC;IAC3B,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;IAC7B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO;YACL,GAAG,MAAM;YACT,QAAQ,EAAE,MAAM,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;SACzC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;IAC9C,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACzC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAEjC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB;YACnC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;iBACT,KAAK,CAAC,SAAS,CAAC;iBAChB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,gBAAiB,CAAC,CAAC;iBACrE,IAAI,CAAC,KAAK,CAAC;YAChB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE9C,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACxC,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;IACnC,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;QACzB,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC9F,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAC9B,CAAC,CAAC,CAAC;QACJ,0BAA0B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QACxD,4BAA4B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QACnE,8BAA8B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC5D,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/D,0BAA0B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;KAClE;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,UAAU,GAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE,SAAS,EAAE,CAAC;YACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,eAAe,GAAG,YAAY,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;IACnC,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACrC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1G,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC7B,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClC,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACzC,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;YAChB,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;YAC5C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SAC9B,CAAC,CAAC,CAAC;QACJ,0BAA0B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QACxD,4BAA4B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QACnE,8BAA8B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;QAC5D,wBAAwB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAC/D,0BAA0B,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;KAClE;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;QAEtC,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,cAAc,EAAE,cAAc,IAAI,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;YACzH,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC;QACzB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC1G,cAAc,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,oBAAoB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC1C;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAEnD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,IAAI,MAAM,CAAC,eAAe,KAAK,gBAAgB,EAAE,CAAC;oBAChD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,oBAAoB,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC;QACpF,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,QAAQ,CAAC;IACnC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;IACnC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE,cAAc,EAAE,CAAC;YAC3B,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC;IAClC,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAChC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;KAC1C;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,GAAG,CAAC;gBAClB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC9D,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAChG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;iBACzG,CAAC,CAAC;gBACH,OAAO;oBACL,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;oBACjE,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,cAAc,EAAE,aAAa,CAAC,MAAM;oBACpC,cAAc,EAAE,YAAY,CAAC,MAAM;iBACpC,CAAC;YACJ,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;qBACzB,KAAK,CAAC,SAAS,CAAC;qBAChB,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,YAAa,CAAC,CAAC;qBAC1E,OAAO,EAAE,CAAC;gBACb,OAAO;oBACL,KAAK,EAAE,OAAO,CAAC,MAAM;oBACrB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;oBAC3D,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,MAAM;oBAC3E,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,MAAM;iBAC5E,CAAC;YACJ,CAAC;YAED,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC;IAC9B,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;IACrC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;IAC3C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,OAAO,GAAU,EAAE,CAAC;QAE1B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,EAAE;iBAC/B,KAAK,CAAC,SAAS,CAAC;iBAChB,SAAS,CAAC,aAAa,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;iBAClE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC;oBACX,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI,aAAa;oBACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;oBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;oBACzB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;oBACzB,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;oBACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;oBAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ;iBAClC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;IACtC,IAAI,EAAE;QACJ,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACpC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgF,CAAC;QAE5G,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YAEzB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;oBACnC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAC3C,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACnD,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;oBACpB,IAAI;oBACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,MAAM,EAAE,IAAI,GAAG,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;gBACrE,KAAK;gBACL,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;aAC3B,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACzC,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE;QAChC,kBAAkB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;KACjD;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAEnD,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC;QACrD,MAAM,qBAAqB,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,gBAAgB,CAAC,CAAC;QAEzF,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;aACtB,KAAK,CAAC,SAAS,CAAC;aAChB,SAAS,CAAC,cAAc,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;aAClF,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAC5E,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE;YAC9C,QAAQ,EAAE,MAAM,CAAC,GAAG;YACpB,eAAe,EAAE,gBAAgB;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;IAC1C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;IAC5C,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAEpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACxC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;YACpC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;SACrC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const getAdminEmails: import("convex/server").RegisteredQuery<"public", {}, Promise<{
2
+ email: string;
3
+ name: string;
4
+ }[]>>;
5
+ export declare const getSupplierEmail: import("convex/server").RegisteredQuery<"public", {
6
+ supplierId: import("convex/values").GenericId<"suppliers">;
7
+ }, Promise<{
8
+ email: string;
9
+ name: string;
10
+ } | null>>;
11
+ export declare const getClinicEmail: import("convex/server").RegisteredQuery<"public", {
12
+ clinicId: import("convex/values").GenericId<"clinics">;
13
+ }, Promise<{
14
+ email: string;
15
+ name: string;
16
+ } | null>>;
17
+ //# sourceMappingURL=emailHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emailHelpers.d.ts","sourceRoot":"","sources":["../../src/component/emailHelpers.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,cAAc;;;KAgBzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;UAO3B,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;UAOzB,CAAC"}