prostgles-server 4.2.154 → 4.2.155

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.
@@ -1,587 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSafeReturnURL = exports.AuthHandler = exports.getLoginClientInfo = exports.HTTPCODES = void 0;
4
- const prostgles_types_1 = require("prostgles-types");
5
- const FileManager_1 = require("./FileManager/FileManager");
6
- exports.HTTPCODES = {
7
- AUTH_ERROR: 401,
8
- NOT_FOUND: 404,
9
- BAD_REQUEST: 400,
10
- INTERNAL_SERVER_ERROR: 500,
11
- };
12
- const getLoginClientInfo = (req) => {
13
- if ("httpReq" in req) {
14
- const ip_address = req.httpReq.ip;
15
- if (!ip_address)
16
- throw new Error("ip_address missing from req.httpReq");
17
- const user_agent = req.httpReq.headers["user-agent"];
18
- return {
19
- ...req,
20
- ip_address,
21
- ip_address_remote: req.httpReq.connection.remoteAddress,
22
- x_real_ip: req.httpReq.headers['x-real-ip'],
23
- user_agent,
24
- };
25
- }
26
- else {
27
- return {
28
- ...req,
29
- ip_address: req.socket.handshake.address,
30
- ip_address_remote: req.socket.request.connection.remoteAddress,
31
- x_real_ip: req.socket.handshake.headers?.["x-real-ip"],
32
- user_agent: req.socket.handshake.headers?.['user-agent'],
33
- };
34
- }
35
- };
36
- exports.getLoginClientInfo = getLoginClientInfo;
37
- class AuthHandler {
38
- prostgles;
39
- opts;
40
- dbo;
41
- db;
42
- sidKeyName;
43
- routes = {
44
- catchAll: "*"
45
- };
46
- constructor(prostgles) {
47
- this.prostgles = prostgles;
48
- this.opts = prostgles.opts.auth;
49
- if (prostgles.opts.auth?.expressConfig) {
50
- const { magicLinks, returnUrlParamName, loginRoute, logoutGetPath } = prostgles.opts.auth.expressConfig;
51
- const magicLinksRoute = magicLinks?.route || "/magic-link";
52
- this.routes = {
53
- magicLinks: magicLinks ? {
54
- expressRoute: `${magicLinksRoute}/:id`,
55
- route: magicLinksRoute
56
- } : undefined,
57
- returnUrlParamName: returnUrlParamName || "returnURL",
58
- login: loginRoute || "/login",
59
- logoutGetPath: logoutGetPath || "/logout",
60
- catchAll: "*"
61
- };
62
- }
63
- if (!prostgles.dbo || !prostgles.db)
64
- throw "dbo or db missing";
65
- this.dbo = prostgles.dbo;
66
- this.db = prostgles.db;
67
- }
68
- validateSid = (sid) => {
69
- if (!sid)
70
- return undefined;
71
- if (typeof sid !== "string")
72
- throw "sid missing or not a string";
73
- return sid;
74
- };
75
- matchesRoute = (route, clientFullRoute) => {
76
- return route && clientFullRoute && (route === clientFullRoute ||
77
- clientFullRoute.startsWith(route) && ["/", "?", "#"].includes(clientFullRoute[route.length] ?? ""));
78
- };
79
- isUserRoute = (pathname) => {
80
- const pubRoutes = [
81
- ...this.opts?.expressConfig?.publicRoutes || [],
82
- ];
83
- if (this.routes?.login)
84
- pubRoutes.push(this.routes.login);
85
- if (this.routes?.logoutGetPath)
86
- pubRoutes.push(this.routes.logoutGetPath);
87
- if (this.routes?.magicLinks?.route)
88
- pubRoutes.push(this.routes.magicLinks.route);
89
- return !pubRoutes.some(publicRoute => {
90
- return this.matchesRoute(publicRoute, pathname);
91
- });
92
- };
93
- setCookieAndGoToReturnURLIFSet = (cookie, r) => {
94
- const { sid, expires } = cookie;
95
- const { res, req } = r;
96
- if (sid) {
97
- const maxAgeOneDay = 60 * 60 * 24; // 24 hours;
98
- let cookieDuration = {
99
- maxAge: maxAgeOneDay
100
- };
101
- if (expires && Number.isFinite(expires) && !isNaN(+new Date(expires))) {
102
- // const maxAge = (+new Date(expires)) - Date.now();
103
- cookieDuration = { expires: new Date(expires) };
104
- const days = (+cookieDuration.expires - Date.now()) / (24 * 60 * 60e3);
105
- if (days >= 400) {
106
- console.warn(`Cookie expiration is higher than the Chrome 400 day limit: ${days}days`);
107
- }
108
- }
109
- const cookieOpts = {
110
- ...cookieDuration,
111
- httpOnly: true, // The cookie only accessible by the web server
112
- //signed: true // Indicates if the cookie should be signed
113
- secure: true,
114
- sameSite: "strict",
115
- ...(this.opts?.expressConfig?.cookieOptions || {})
116
- };
117
- const cookieData = sid;
118
- if (!this.sidKeyName || !this.routes?.returnUrlParamName)
119
- throw "sidKeyName or returnURL missing";
120
- res.cookie(this.sidKeyName, cookieData, cookieOpts);
121
- const successURL = this.getReturnUrl(req) || "/";
122
- res.redirect(successURL);
123
- }
124
- else {
125
- throw ("no user or session");
126
- }
127
- };
128
- getUser = async (clientReq) => {
129
- if (!this.sidKeyName || !this.opts?.getUser) {
130
- throw "sidKeyName or this.opts.getUser missing";
131
- }
132
- const sid = clientReq.httpReq?.cookies?.[this.sidKeyName];
133
- if (!sid)
134
- return undefined;
135
- try {
136
- return this.throttledFunc(async () => {
137
- return this.opts.getUser(this.validateSid(sid), this.dbo, this.db, (0, exports.getLoginClientInfo)(clientReq));
138
- }, 50);
139
- }
140
- catch (err) {
141
- console.error(err);
142
- }
143
- return undefined;
144
- };
145
- async init() {
146
- if (!this.opts)
147
- return;
148
- this.opts.sidKeyName = this.opts.sidKeyName || "session_id";
149
- const { sidKeyName, login, getUser, expressConfig } = this.opts;
150
- this.sidKeyName = this.opts.sidKeyName;
151
- if (typeof sidKeyName !== "string" && !login) {
152
- throw "Invalid auth: Provide { sidKeyName: string } ";
153
- }
154
- /**
155
- * Why ??? Collision with socket.io ???
156
- */
157
- if (this.sidKeyName === "sid")
158
- throw "sidKeyName cannot be 'sid' please provide another name.";
159
- if (!getUser)
160
- throw "getUser missing from auth config";
161
- if (expressConfig) {
162
- const { app, publicRoutes = [], onGetRequestOK, magicLinks, use } = expressConfig;
163
- if (publicRoutes.find(r => typeof r !== "string" || !r)) {
164
- throw "Invalid or empty string provided within publicRoutes ";
165
- }
166
- if (use) {
167
- app.use((req, res, next) => {
168
- use({
169
- req,
170
- res,
171
- next,
172
- getUser: () => this.getUser({ httpReq: req }),
173
- dbo: this.dbo,
174
- db: this.db,
175
- });
176
- });
177
- }
178
- if (magicLinks && this.routes.magicLinks) {
179
- const { check } = magicLinks;
180
- if (!check)
181
- throw "Check must be defined for magicLinks";
182
- app.get(this.routes.magicLinks?.expressRoute, async (req, res) => {
183
- const { id } = req.params ?? {};
184
- if (typeof id !== "string" || !id) {
185
- res.status(exports.HTTPCODES.BAD_REQUEST).json({ msg: "Invalid magic-link id. Expecting a string" });
186
- }
187
- else {
188
- try {
189
- const session = await this.throttledFunc(async () => {
190
- return check(id, this.dbo, this.db, (0, exports.getLoginClientInfo)({ httpReq: req }));
191
- });
192
- if (!session) {
193
- res.status(exports.HTTPCODES.AUTH_ERROR).json({ msg: "Invalid magic-link" });
194
- }
195
- else {
196
- this.setCookieAndGoToReturnURLIFSet(session, { req, res });
197
- }
198
- }
199
- catch (e) {
200
- res.status(exports.HTTPCODES.AUTH_ERROR).json({ msg: e });
201
- }
202
- }
203
- });
204
- }
205
- const loginRoute = this.routes?.login;
206
- if (loginRoute) {
207
- app.post(loginRoute, async (req, res) => {
208
- try {
209
- const start = Date.now();
210
- const { sid, expires } = await this.loginThrottled(req.body || {}, (0, exports.getLoginClientInfo)({ httpReq: req })) || {};
211
- await this.prostgles.opts.onLog?.({
212
- type: "auth",
213
- command: "login",
214
- duration: Date.now() - start,
215
- sid,
216
- socketId: undefined,
217
- });
218
- if (sid) {
219
- this.setCookieAndGoToReturnURLIFSet({ sid, expires }, { req, res });
220
- }
221
- else {
222
- throw ("Internal error: no user or session");
223
- }
224
- }
225
- catch (err) {
226
- console.log(err);
227
- res.status(exports.HTTPCODES.AUTH_ERROR).json({ err });
228
- }
229
- });
230
- if (this.routes.logoutGetPath && this.opts.logout) {
231
- app.get(this.routes.logoutGetPath, async (req, res) => {
232
- const sid = this.validateSid(req?.cookies?.[sidKeyName]);
233
- if (sid) {
234
- try {
235
- await this.throttledFunc(() => {
236
- return this.opts.logout(req?.cookies?.[sidKeyName], this.dbo, this.db);
237
- });
238
- }
239
- catch (err) {
240
- console.error(err);
241
- }
242
- }
243
- res.redirect("/");
244
- });
245
- }
246
- if (Array.isArray(publicRoutes)) {
247
- /* Redirect if not logged in and requesting non public content */
248
- app.get(this.routes.catchAll, async (req, res, next) => {
249
- const clientReq = { httpReq: req };
250
- const getUser = this.getUser;
251
- if (this.prostgles.restApi) {
252
- if (Object.values(this.prostgles.restApi.routes).some(restRoute => this.matchesRoute(restRoute.split("/:")[0], req.path))) {
253
- next();
254
- return;
255
- }
256
- }
257
- try {
258
- const returnURL = this.getReturnUrl(req);
259
- /**
260
- * Requesting a User route
261
- */
262
- if (this.isUserRoute(req.path)) {
263
- /* Check auth. Redirect to login if unauthorized */
264
- const u = await getUser(clientReq);
265
- if (!u) {
266
- res.redirect(`${loginRoute}?returnURL=${encodeURIComponent(req.originalUrl)}`);
267
- return;
268
- }
269
- /* If authorized and going to returnUrl then redirect. Otherwise serve file */
270
- }
271
- else if (returnURL && (await getUser(clientReq))) {
272
- res.redirect(returnURL);
273
- return;
274
- /** If Logged in and requesting login then redirect to main page */
275
- }
276
- else if (this.matchesRoute(loginRoute, req.path) && (await getUser(clientReq))) {
277
- res.redirect("/");
278
- return;
279
- }
280
- onGetRequestOK?.(req, res, { getUser: () => getUser(clientReq), dbo: this.dbo, db: this.db });
281
- }
282
- catch (error) {
283
- console.error(error);
284
- const errorMessage = typeof error === "string" ? error : error instanceof Error ? error.message : "";
285
- res.status(exports.HTTPCODES.AUTH_ERROR).json({ msg: "Something went wrong when processing your request" + (errorMessage ? (": " + errorMessage) : "") });
286
- }
287
- });
288
- }
289
- }
290
- }
291
- }
292
- getReturnUrl = (req) => {
293
- const { returnUrlParamName } = this.routes;
294
- if (returnUrlParamName && req?.query?.[returnUrlParamName]) {
295
- const returnURL = decodeURIComponent(req?.query?.[returnUrlParamName]);
296
- return (0, exports.getSafeReturnURL)(returnURL, returnUrlParamName);
297
- }
298
- return null;
299
- };
300
- destroy = () => {
301
- const app = this.opts?.expressConfig?.app;
302
- const { login, logoutGetPath, magicLinks } = this.routes;
303
- (0, FileManager_1.removeExpressRoute)(app, [login, logoutGetPath, magicLinks?.expressRoute]);
304
- };
305
- throttledFunc = (func, throttle = 500) => {
306
- return new Promise(async (resolve, reject) => {
307
- let result, error, finished = false;
308
- /**
309
- * Throttle reject response times to prevent timing attacks
310
- */
311
- const interval = setInterval(() => {
312
- if (finished) {
313
- clearInterval(interval);
314
- if (error) {
315
- reject(error);
316
- }
317
- else {
318
- resolve(result);
319
- }
320
- }
321
- }, throttle);
322
- try {
323
- result = await func();
324
- resolve(result);
325
- clearInterval(interval);
326
- }
327
- catch (err) {
328
- console.log(err);
329
- error = err;
330
- }
331
- finished = true;
332
- });
333
- };
334
- loginThrottled = async (params, client) => {
335
- if (!this.opts?.login)
336
- throw "Auth login config missing";
337
- const { responseThrottle = 500 } = this.opts;
338
- return this.throttledFunc(async () => {
339
- const result = await this.opts?.login?.(params, this.dbo, this.db, client);
340
- const err = {
341
- msg: "Bad login result type. \nExpecting: undefined | null | { sid: string; expires: number } but got: " + JSON.stringify(result)
342
- };
343
- if (!result)
344
- throw err;
345
- if (result && (typeof result.sid !== "string" || typeof result.expires !== "number") || !result && ![undefined, null].includes(result)) {
346
- throw err;
347
- }
348
- if (result && result.expires < Date.now()) {
349
- throw { msg: "auth.login() is returning an expired session. Can only login with a session.expires greater than Date.now()" };
350
- }
351
- return result;
352
- }, responseThrottle);
353
- };
354
- /**
355
- * Will return first sid value found in:
356
- * Bearer header
357
- * http cookie
358
- * query params
359
- * Based on sid names in auth
360
- */
361
- getSID(localParams) {
362
- if (!this.opts)
363
- return undefined;
364
- const { sidKeyName } = this.opts;
365
- if (!sidKeyName || !localParams)
366
- return undefined;
367
- if (localParams.socket) {
368
- const { handshake } = localParams.socket;
369
- const querySid = handshake?.auth?.[sidKeyName] || handshake?.query?.[sidKeyName];
370
- let rawSid = querySid;
371
- if (!rawSid) {
372
- const cookie_str = localParams.socket?.handshake?.headers?.cookie;
373
- const cookie = parseCookieStr(cookie_str);
374
- rawSid = cookie[sidKeyName];
375
- }
376
- return this.validateSid(rawSid);
377
- }
378
- else if (localParams.httpReq) {
379
- const [tokenType, base64Token] = localParams.httpReq.headers.authorization?.split(' ') ?? [];
380
- let bearerSid;
381
- if (tokenType && base64Token) {
382
- if (tokenType.trim() !== "Bearer") {
383
- throw "Only Bearer Authorization header allowed";
384
- }
385
- bearerSid = Buffer.from(base64Token, 'base64').toString();
386
- }
387
- return this.validateSid(bearerSid ?? localParams.httpReq?.cookies?.[sidKeyName]);
388
- }
389
- else
390
- throw "socket OR httpReq missing from localParams";
391
- function parseCookieStr(cookie_str) {
392
- if (!cookie_str || typeof cookie_str !== "string") {
393
- return {};
394
- }
395
- return cookie_str.replace(/\s/g, '')
396
- .split(";")
397
- .reduce((prev, current) => {
398
- const [name, value] = current.split('=');
399
- prev[name] = value;
400
- return prev;
401
- }, {});
402
- }
403
- }
404
- /**
405
- * Used for logging
406
- */
407
- getSIDNoError = (localParams) => {
408
- if (!localParams)
409
- return undefined;
410
- try {
411
- return this.getSID(localParams);
412
- }
413
- catch (err) {
414
- return undefined;
415
- }
416
- };
417
- async getClientInfo(localParams) {
418
- if (!this.opts)
419
- return {};
420
- const getSession = this.opts.cacheSession?.getSession;
421
- const isSocket = "socket" in localParams;
422
- if (isSocket) {
423
- if (getSession && localParams.socket?.__prglCache) {
424
- const { session, user, clientUser } = localParams.socket.__prglCache;
425
- const isValid = this.isValidSocketSession(localParams.socket, session);
426
- if (isValid) {
427
- return {
428
- sid: session.sid,
429
- user,
430
- clientUser,
431
- };
432
- }
433
- else
434
- return {
435
- sid: session.sid
436
- };
437
- }
438
- }
439
- const authStart = Date.now();
440
- const res = await this.throttledFunc(async () => {
441
- const { getUser } = this.opts ?? {};
442
- if (getUser && localParams && (localParams.httpReq || localParams.socket)) {
443
- const sid = this.getSID(localParams);
444
- const clientReq = localParams.httpReq ? { httpReq: localParams.httpReq } : { socket: localParams.socket };
445
- let user, clientUser;
446
- if (sid) {
447
- const res = await getUser(sid, this.dbo, this.db, (0, exports.getLoginClientInfo)(clientReq));
448
- user = res?.user;
449
- clientUser = res?.clientUser;
450
- }
451
- if (getSession && isSocket) {
452
- const session = await getSession(sid, this.dbo, this.db);
453
- if (session?.expires && user && clientUser && localParams.socket) {
454
- localParams.socket.__prglCache = {
455
- session,
456
- user,
457
- clientUser,
458
- };
459
- }
460
- }
461
- if (sid) {
462
- return { sid, user, clientUser };
463
- }
464
- }
465
- return {};
466
- }, 5);
467
- await this.prostgles.opts.onLog?.({
468
- type: "auth",
469
- command: "getClientInfo",
470
- duration: Date.now() - authStart,
471
- sid: res.sid,
472
- socketId: localParams.socket?.id,
473
- });
474
- return res;
475
- }
476
- isValidSocketSession = (socket, session) => {
477
- const hasExpired = Boolean(session && session.expires <= Date.now());
478
- if (this.opts?.expressConfig?.publicRoutes && !this.opts.expressConfig?.disableSocketAuthGuard) {
479
- const error = "Session has expired";
480
- if (hasExpired) {
481
- if (session.onExpiration === "redirect")
482
- socket.emit(prostgles_types_1.CHANNELS.AUTHGUARD, {
483
- shouldReload: session.onExpiration === "redirect",
484
- error
485
- });
486
- throw error;
487
- }
488
- }
489
- return Boolean(session && !hasExpired);
490
- };
491
- makeSocketAuth = async (socket) => {
492
- if (!this.opts)
493
- return {};
494
- const auth = {};
495
- if (this.opts.expressConfig?.publicRoutes && !this.opts.expressConfig?.disableSocketAuthGuard) {
496
- auth.pathGuard = true;
497
- socket.removeAllListeners(prostgles_types_1.CHANNELS.AUTHGUARD);
498
- socket.on(prostgles_types_1.CHANNELS.AUTHGUARD, async (params, cb = (_err, _res) => { }) => {
499
- try {
500
- const { pathname, origin } = typeof params === "string" ? JSON.parse(params) : (params || {});
501
- if (pathname && typeof pathname !== "string") {
502
- console.warn("Invalid pathname provided for AuthGuardLocation: ", pathname);
503
- }
504
- /** These origins */
505
- const IGNORED_API_ORIGINS = ["file://"];
506
- if (!IGNORED_API_ORIGINS.includes(origin) && pathname && typeof pathname === "string" && this.isUserRoute(pathname) && !(await this.getClientInfo({ socket }))?.user) {
507
- cb(null, { shouldReload: true });
508
- }
509
- else {
510
- cb(null, { shouldReload: false });
511
- }
512
- }
513
- catch (err) {
514
- console.error("AUTHGUARD err: ", err);
515
- cb(err);
516
- }
517
- });
518
- }
519
- const { register, logout } = this.opts;
520
- const login = this.loginThrottled;
521
- let handlers = [
522
- { func: (params, dbo, db, client) => register?.(params, dbo, db), ch: prostgles_types_1.CHANNELS.REGISTER, name: "register" },
523
- { func: (params, dbo, db, client) => login(params, client), ch: prostgles_types_1.CHANNELS.LOGIN, name: "login" },
524
- { func: (params, dbo, db, client) => logout?.(this.getSID({ socket }), dbo, db), ch: prostgles_types_1.CHANNELS.LOGOUT, name: "logout" }
525
- ].filter(h => h.func);
526
- const userData = await this.getClientInfo({ socket });
527
- if (userData) {
528
- auth.user = userData.clientUser;
529
- handlers = handlers.filter(h => h.name === "logout");
530
- }
531
- handlers.map(({ func, ch, name }) => {
532
- auth[name] = true;
533
- socket.removeAllListeners(ch);
534
- socket.on(ch, async (params, cb = (..._callback) => { }) => {
535
- try {
536
- if (!socket)
537
- throw "socket missing??!!";
538
- const id_address = socket?.conn?.remoteAddress;
539
- const user_agent = socket.handshake?.headers?.["user-agent"];
540
- const res = await func(params, this.dbo, this.db, { user_agent, id_address });
541
- if (name === "login" && res && res.sid) {
542
- /* TODO: Re-send schema to client */
543
- }
544
- cb(null, true);
545
- }
546
- catch (err) {
547
- console.error(name + " err", err);
548
- cb(err);
549
- }
550
- });
551
- });
552
- return { auth, userData };
553
- };
554
- }
555
- exports.AuthHandler = AuthHandler;
556
- const getSafeReturnURL = (returnURL, returnUrlParamName, quiet = false) => {
557
- /** Dissalow redirect to other domains */
558
- if (returnURL) {
559
- const allowedOrigin = "https://localhost";
560
- const { origin, pathname, search, searchParams } = new URL(returnURL, allowedOrigin);
561
- if (origin !== allowedOrigin ||
562
- returnURL !== `${pathname}${search}` ||
563
- searchParams.get(returnUrlParamName)) {
564
- if (!quiet) {
565
- console.error(`Unsafe returnUrl: ${returnURL}. Redirecting to /`);
566
- }
567
- return "/";
568
- }
569
- return returnURL;
570
- }
571
- };
572
- exports.getSafeReturnURL = getSafeReturnURL;
573
- const issue = [
574
- ["https://localhost", "/"],
575
- ["//localhost.bad.com", "/"],
576
- ["//localhost.com", "/"],
577
- ["/localhost/com", "/localhost/com"],
578
- ["/localhost/com?here=there", "/localhost/com?here=there"],
579
- ["/localhost/com?returnUrl=there", "/"],
580
- ["//http://localhost.com", "/"],
581
- ["//abc.com", "/"],
582
- ["///abc.com", "/"],
583
- ].find(([returnURL, expected]) => (0, exports.getSafeReturnURL)(returnURL, "returnUrl", true) !== expected);
584
- if (issue) {
585
- throw new Error(`getSafeReturnURL failed for ${issue[0]}. Expected: ${issue[1]}`);
586
- }
587
- //# sourceMappingURL=AuthHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthHandler.js","sourceRoot":"","sources":["../lib/AuthHandler.ts"],"names":[],"mappings":";;;AACA,qDAAiH;AAGjH,2DAA+D;AA4DlD,QAAA,SAAS,GAAG;IACvB,UAAU,EAAE,GAAG;IACf,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,GAAG;IAChB,qBAAqB,EAAE,GAAG;CAC3B,CAAC;AAEK,MAAM,kBAAkB,GAAG,CAAC,GAAsB,EAAuC,EAAE;IAChG,IAAG,SAAS,IAAI,GAAG,EAAC,CAAC;QACnB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,IAAG,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACrD,OAAO;YACL,GAAG,GAAG;YACN,UAAU;YACV,iBAAiB,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa;YACvD,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAQ;YAClD,UAAU;SACX,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,GAAG,GAAG;YACN,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO;YACxC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa;YAC9D,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC;YACtD,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,YAAY,CAAC;SACzD,CAAA;IACH,CAAC;AACH,CAAC,CAAA;AArBY,QAAA,kBAAkB,sBAqB9B;AAsGD,MAAa,WAAW;IACZ,SAAS,CAAY;IACrB,IAAI,CAAQ;IACtB,GAAG,CAAkB;IACrB,EAAE,CAAK;IACP,UAAU,CAAU;IAEpB,MAAM,GASF;QACF,QAAQ,EAAE,GAAG;KACd,CAAA;IAED,YAAY,SAAoB;QAC9B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAW,CAAC;QACvC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;YACvC,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YACxG,MAAM,eAAe,GAAG,UAAU,EAAE,KAAK,IAAI,aAAa,CAAA;YAC1D,IAAI,CAAC,MAAM,GAAG;gBACZ,UAAU,EAAE,UAAU,CAAA,CAAC,CAAC;oBACtB,YAAY,EAAE,GAAG,eAAe,MAAM;oBACtC,KAAK,EAAE,eAAe;iBACvB,CAAC,CAAC,CAAC,SAAS;gBACb,kBAAkB,EAAE,kBAAkB,IAAI,WAAW;gBACrD,KAAK,EAAE,UAAU,IAAI,QAAQ;gBAC7B,aAAa,EAAE,aAAa,IAAI,SAAS;gBACzC,QAAQ,EAAE,GAAG;aACd,CAAA;QACH,CAAC;QACD,IAAG,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE;YAAE,MAAM,mBAAmB,CAAC;QAC9D,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,WAAW,GAAG,CAAC,GAAuB,EAAE,EAAE;QACxC,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,MAAM,6BAA6B,CAAC;QACjE,OAAO,GAAG,CAAC;IACb,CAAC,CAAA;IAED,YAAY,GAAG,CAAC,KAAyB,EAAE,eAAuB,EAAE,EAAE;QACpE,OAAO,KAAK,IAAI,eAAe,IAAI,CACjC,KAAK,KAAK,eAAe;YACzB,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CACnG,CAAA;IACH,CAAC,CAAA;IAED,WAAW,GAAG,CAAC,QAAgB,EAAE,EAAE;QACjC,MAAM,SAAS,GAAG;YAChB,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,IAAI,EAAE;SAChD,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAEjF,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACnC,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAA;IAEO,8BAA8B,GAAG,CAAC,MAAyC,EAAE,CAAuC,EAAE,EAAE;QAC9H,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAChC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY;YAE/C,IAAI,cAAc,GAAO;gBACvB,MAAM,EAAE,YAAY;aACrB,CAAA;YACD,IAAG,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC;gBACrE,oDAAoD;gBACpD,cAAc,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBACrE,IAAG,IAAI,IAAI,GAAG,EAAC,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,8DAA8D,IAAI,MAAM,CAAC,CAAA;gBACxF,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG;gBACjB,GAAG,cAAc;gBACjB,QAAQ,EAAE,IAAI,EAAE,+CAA+C;gBAC/D,0DAA0D;gBAC1D,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,QAAiB;gBAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,IAAI,EAAE,CAAC;aACnD,CAAC;YACF,MAAM,UAAU,GAAG,GAAG,CAAC;YACvB,IAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB;gBAAE,MAAM,iCAAiC,CAAA;YAChG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YACjD,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAE3B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,oBAAoB,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC,CAAA;IAED,OAAO,GAAG,KAAK,EAAE,SAAmC,EAAuB,EAAE;QAC3E,IAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3C,MAAM,yCAAyC,CAAC;QAClD,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAE3B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;gBACnC,OAAO,IAAI,CAAC,IAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAA,0BAAkB,EAAC,SAAS,CAAC,CAAC,CAAC;YAC5G,CAAC,EAAE,EAAE,CAAC,CAAA;QACR,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAA;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAEvB,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,YAAY,CAAC;QAC5D,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAEvC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,+CAA+C,CAAC;QACxD,CAAC;QACD;;WAEG;QACH,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK;YAAE,MAAM,yDAAyD,CAAC;QAE/F,IAAI,CAAC,OAAO;YAAE,MAAM,kCAAkC,CAAC;QAEvD,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,aAAa,CAAC;YAClF,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,MAAM,uDAAuD,CAAA;YAC/D,CAAC;YAED,IAAG,GAAG,EAAC,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;oBACzB,GAAG,CAAC;wBACF,GAAG;wBACH,GAAG;wBACH,IAAI;wBACJ,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAQ;wBACpD,GAAG,EAAE,IAAI,CAAC,GAAoB;wBAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;qBACZ,CAAC,CAAA;gBACJ,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,KAAK;oBAAE,MAAM,sCAAsC,CAAC;gBAEzD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,GAAe,EAAE,GAAe,EAAE,EAAE;oBACvF,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;oBAEhC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;wBAClC,GAAG,CAAC,MAAM,CAAC,iBAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,2CAA2C,EAAE,CAAC,CAAC;oBAC/F,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;gCAClD,OAAO,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAA,0BAAkB,EAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;4BACnF,CAAC,CAAC,CAAC;4BACH,IAAI,CAAC,OAAO,EAAE,CAAC;gCACb,GAAG,CAAC,MAAM,CAAC,iBAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,CAAC;4BACvE,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;4BAC7D,CAAC;wBAEH,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,GAAG,CAAC,MAAM,CAAC,iBAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACpD,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;YACtC,IAAI,UAAU,EAAE,CAAC;gBAGf,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAe,EAAE,GAAe,EAAE,EAAE;oBAC9D,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBACzB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAA,0BAAkB,EAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC/G,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;4BAChC,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,OAAO;4BAChB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;4BAC5B,GAAG;4BACH,QAAQ,EAAE,SAAS;yBACpB,CAAC,CAAA;wBACF,IAAI,GAAG,EAAE,CAAC;4BAER,IAAI,CAAC,8BAA8B,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;wBAEtE,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,oCAAoC,CAAC,CAAA;wBAC9C,CAAC;oBACH,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;wBAChB,GAAG,CAAC,MAAM,CAAC,iBAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;oBACjD,CAAC;gBAEH,CAAC,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBAClD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,EAAE,GAAe,EAAE,GAAe,EAAE,EAAE;wBAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;wBACzD,IAAI,GAAG,EAAE,CAAC;4BACR,IAAI,CAAC;gCACH,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;oCAC5B,OAAO,IAAI,CAAC,IAAK,CAAC,MAAO,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gCAClF,CAAC,CAAC,CAAA;4BACJ,CAAC;4BAAC,OAAO,GAAG,EAAE,CAAC;gCACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;4BACrB,CAAC;wBACH,CAAC;wBACD,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;oBACnB,CAAC,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;oBAEhC,iEAAiE;oBACjE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAe,EAAE,GAAe,EAAE,IAAI,EAAE,EAAE;wBAC7E,MAAM,SAAS,GAAsB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;wBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;wBAC7B,IAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAC,CAAC;4BACzB,IAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC;gCACxH,IAAI,EAAE,CAAC;gCACP,OAAO;4BACT,CAAC;wBACH,CAAC;wBACD,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;4BAEzC;;+BAEG;4BACH,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gCAE/B,mDAAmD;gCACnD,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;gCACnC,IAAI,CAAC,CAAC,EAAE,CAAC;oCACP,GAAG,CAAC,QAAQ,CAAC,GAAG,UAAU,cAAc,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oCAC/E,OAAO;gCACT,CAAC;gCAED,8EAA8E;4BAChF,CAAC;iCAAM,IAAI,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gCAEnD,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gCACxB,OAAO;gCAEP,mEAAmE;4BACrE,CAAC;iCAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gCAEjF,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gCAClB,OAAO;4BACT,CAAC;4BAED,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAoB,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;wBAEhH,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BACrB,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;4BACrG,GAAG,CAAC,MAAM,CAAC,iBAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,mDAAmD,GAAG,CAAC,YAAY,CAAA,CAAC,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACnJ,CAAC;oBAEH,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY,GAAG,CAAC,GAAe,EAAE,EAAE;QACjC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3C,IAAI,kBAAkB,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC3D,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,kBAAkB,CAAW,CAAC,CAAC;YAEjF,OAAO,IAAA,wBAAgB,EAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAA;IAED,OAAO,GAAG,GAAG,EAAE;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC;QAC1C,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACzD,IAAA,gCAAkB,EAAC,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAA;IAED,aAAa,GAAG,CAAI,IAAsB,EAAE,QAAQ,GAAG,GAAG,EAAc,EAAE;QAExE,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAE3C,IAAI,MAAW,EAAE,KAAU,EAAE,QAAQ,GAAG,KAAK,CAAC;YAE9C;;eAEG;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;gBAChC,IAAI,QAAQ,EAAE,CAAC;oBACb,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACxB,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,MAAM,CAAC,CAAA;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC,EAAE,QAAQ,CAAC,CAAC;YAGb,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;gBACtB,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChB,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBAChB,KAAK,GAAG,GAAG,CAAC;YACd,CAAC;YAED,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,cAAc,GAAG,KAAK,EAAE,MAAiB,EAAE,MAAuB,EAAyB,EAAE;QAC3F,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK;YAAE,MAAM,2BAA2B,CAAC;QACzD,MAAM,EAAE,gBAAgB,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7C,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,GAAoB,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC5F,MAAM,GAAG,GAAG;gBACV,GAAG,EAAE,mGAAmG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAClI,CAAA;YAED,IAAG,CAAC,MAAM;gBAAE,MAAM,GAAG,CAAC;YACtB,IAAG,MAAM,IAAI,CAAC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtI,MAAM,GAAG,CAAA;YACX,CAAC;YACD,IAAG,MAAM,IAAI,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,EAAC,CAAC;gBACxC,MAAM,EAAE,GAAG,EAAE,6GAA6G,EAAC,CAAA;YAC7H,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAEvB,CAAC,CAAA;IAGD;;;;;;OAMG;IACH,MAAM,CAAC,WAAwB;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAEjC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAEjC,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QAElD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;YACzC,MAAM,QAAQ,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC;YACjF,IAAI,MAAM,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;gBAClE,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,CAAC;aAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7F,IAAI,SAA6B,CAAC;YAClC,IAAG,SAAS,IAAI,WAAW,EAAC,CAAC;gBAC3B,IAAG,SAAS,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAC,CAAC;oBAChC,MAAM,0CAA0C,CAAC;gBACnD,CAAC;gBACD,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5D,CAAC;YACD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAEnF,CAAC;;YAAM,MAAM,4CAA4C,CAAC;QAE1D,SAAS,cAAc,CAAC,UAA8B;YACpD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBAClD,OAAO,EAAE,CAAA;YACX,CAAC;YAED,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;iBACjC,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAY,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,IAAK,CAAC,GAAG,KAAK,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,GAAG,CAAC,WAAoC,EAAsB,EAAE;QAC3E,IAAG,CAAC,WAAW;YAAE,OAAO,SAAS,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAA;IAED,KAAK,CAAC,aAAa,CAAC,WAAoD;QACtE,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;QACtD,MAAM,QAAQ,GAAG,QAAQ,IAAI,WAAW,CAAC;QACzC,IAAG,QAAQ,EAAC,CAAC;YACX,IAAG,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,EAAC,CAAC;gBAChD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC;gBACrE,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBACtE,IAAG,OAAO,EAAC,CAAC;oBAEV,OAAO;wBACL,GAAG,EAAE,OAAO,CAAC,GAAG;wBAChB,IAAI;wBACJ,UAAU;qBACX,CAAA;gBACH,CAAC;;oBAAM,OAAO;wBACZ,GAAG,EAAE,OAAO,CAAC,GAAG;qBACjB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;YAE9C,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAEpC,IAAI,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAA,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,MAAO,EAAE,CAAC;gBAC1G,IAAI,IAAI,EAAE,UAAU,CAAC;gBACrB,IAAG,GAAG,EAAC,CAAC;oBACN,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAU,EAAE,IAAI,CAAC,EAAE,EAAE,IAAA,0BAAkB,EAAC,SAAS,CAAC,CAAQ,CAAC;oBAC/F,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC;oBACjB,UAAU,GAAG,GAAG,EAAE,UAAU,CAAC;gBAC/B,CAAC;gBACD,IAAG,UAAU,IAAI,QAAQ,EAAC,CAAC;oBACzB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;oBAC/D,IAAG,OAAO,EAAE,OAAO,IAAI,IAAI,IAAI,UAAU,IAAI,WAAW,CAAC,MAAM,EAAC,CAAC;wBAC/D,WAAW,CAAC,MAAM,CAAC,WAAW,GAAG;4BAC/B,OAAO;4BACP,IAAI;4BACJ,UAAU;yBACX,CAAA;oBACH,CAAC;gBACH,CAAC;gBACD,IAAG,GAAG,EAAE,CAAC;oBACP,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;gBAClC,CAAC;YACH,CAAC;YAED,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,eAAe;YACxB,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAChC,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE;SACjC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,oBAAoB,GAAG,CAAC,MAAoB,EAAE,OAAqB,EAAW,EAAE;QAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QACpE,IAAG,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,sBAAsB,EAAC,CAAC;YAC7F,MAAM,KAAK,GAAG,qBAAqB,CAAC;YACpC,IAAG,UAAU,EAAC,CAAC;gBACb,IAAG,OAAO,CAAC,YAAY,KAAK,UAAU;oBACtC,MAAM,CAAC,IAAI,CAAC,0BAAQ,CAAC,SAAS,EAAE;wBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK,UAAU;wBACjD,KAAK;qBACN,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC,CAAA;IAED,cAAc,GAAG,KAAK,EAAE,MAAoB,EAAsF,EAAE;QAClI,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAE1B,MAAM,IAAI,GAAkH,EAAE,CAAC;QAE/H,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,sBAAsB,EAAE,CAAC;YAE9F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAEtB,MAAM,CAAC,kBAAkB,CAAC,0BAAQ,CAAC,SAAS,CAAC,CAAA;YAC7C,MAAM,CAAC,EAAE,CAAC,0BAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAyB,EAAE,KAAK,CAAC,IAAS,EAAE,IAAgC,EAAE,EAAE,GAAgB,CAAC,EAAE,EAAE;gBAExI,IAAI,CAAC;oBAEH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;oBAC9F,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBAC7C,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,QAAQ,CAAC,CAAC;oBAC9E,CAAC;oBAED,qBAAqB;oBACrB,MAAM,mBAAmB,GAAG,CAAC,SAAS,CAAC,CAAA;oBACvC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;wBACrK,EAAE,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnC,CAAC;yBAAM,CAAC;wBACN,EAAE,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;oBACpC,CAAC;gBAEH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;oBACtC,EAAE,CAAC,GAAG,CAAC,CAAA;gBACT,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,EACJ,QAAQ,EACR,MAAM,EACP,GAAG,IAAI,CAAC,IAAI,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAA;QAEjC,IAAI,QAAQ,GAIN;YACJ,EAAE,IAAI,EAAE,CAAC,MAAW,EAAE,GAAQ,EAAE,EAAM,EAAE,MAAuB,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,0BAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAkD,EAAE;YAClL,EAAE,IAAI,EAAE,CAAC,MAAW,EAAE,GAAQ,EAAE,EAAM,EAAE,MAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,0BAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,OAA+C,EAAE;YACtK,EAAE,IAAI,EAAE,CAAC,MAAW,EAAE,GAAQ,EAAE,EAAM,EAAE,MAAuB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,0BAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAiD,EAAC;SAC9L,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAEtB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;YAChC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACvD,CAAC;QAED,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAClC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAElB,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAA;YAC7B,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAW,EAAE,KAAK,CAAC,GAAG,SAAc,EAAE,EAAE,GAAgB,CAAC,EAAE,EAAE;gBAEhF,IAAI,CAAC;oBACH,IAAI,CAAC,MAAM;wBAAE,MAAM,oBAAoB,CAAC;oBACxC,MAAM,UAAU,GAAI,MAAc,EAAE,IAAI,EAAE,aAAa,CAAC;oBACxD,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;oBAC7D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAU,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;oBACrF,IAAI,IAAI,KAAK,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;wBACvC,oCAAoC;oBACtC,CAAC;oBAED,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAEjB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;oBAClC,EAAE,CAAC,GAAG,CAAC,CAAA;gBACT,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAA;CACF;AAzkBD,kCAykBC;AAEM,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,kBAA0B,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE;IAC/F,yCAAyC;IACzC,IAAG,SAAS,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,mBAAmB,CAAC;QAC1C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACrF,IACE,MAAM,KAAK,aAAa;YACxB,SAAS,KAAK,GAAG,QAAQ,GAAG,MAAM,EAAE;YACpC,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,EACrC,CAAC;YACA,IAAG,CAAC,KAAK,EAAC,CAAC;gBACT,OAAO,CAAC,KAAK,CAAC,qBAAqB,SAAS,oBAAoB,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAA;AAlBY,QAAA,gBAAgB,oBAkB5B;AAED,MAAM,KAAK,GAAI;IACb,CAAC,mBAAmB,EAAE,GAAG,CAAC;IAC1B,CAAC,qBAAqB,EAAE,GAAG,CAAC;IAC5B,CAAC,iBAAiB,EAAE,GAAG,CAAC;IACxB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IACpC,CAAC,2BAA2B,EAAE,2BAA2B,CAAC;IAC1D,CAAC,gCAAgC,EAAE,GAAG,CAAC;IACvC,CAAC,wBAAwB,EAAE,GAAG,CAAC;IAC/B,CAAC,WAAW,EAAE,GAAG,CAAC;IAClB,CAAC,YAAY,EAAE,GAAG,CAAC;CACV,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAA,wBAAgB,EAAC,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC;AAEzG,IAAG,KAAK,EAAC,CAAC;IACR,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpF,CAAC"}