@spinajs/rbac-http-user 2.0.504 → 2.0.506
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/controllers/LoginController.js +2 -2
- package/lib/cjs/controllers/LoginController.js.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts +4 -13
- package/lib/cjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthController.js +5 -22
- package/lib/cjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthUserController.d.ts +10 -22
- package/lib/cjs/controllers/TwoFactorAuthUserController.d.ts.map +1 -1
- package/lib/cjs/controllers/TwoFactorAuthUserController.js +11 -35
- package/lib/cjs/controllers/TwoFactorAuthUserController.js.map +1 -1
- package/lib/mjs/controllers/LoginController.js +2 -2
- package/lib/mjs/controllers/LoginController.js.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts +4 -13
- package/lib/mjs/controllers/TwoFactorAuthController.d.ts.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthController.js +6 -23
- package/lib/mjs/controllers/TwoFactorAuthController.js.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthUserController.d.ts +10 -22
- package/lib/mjs/controllers/TwoFactorAuthUserController.d.ts.map +1 -1
- package/lib/mjs/controllers/TwoFactorAuthUserController.js +12 -36
- package/lib/mjs/controllers/TwoFactorAuthUserController.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +15 -15
|
@@ -15,7 +15,7 @@ import { PasswordProvider, SessionProvider, User as UserModel, regenerateSession
|
|
|
15
15
|
import { Autoinject } from '@spinajs/di';
|
|
16
16
|
import { AutoinjectService, Config } from '@spinajs/configuration';
|
|
17
17
|
import { AuthorizedPolicy, Permission, Resource, Session as SessionRouteArg, User } from '@spinajs/rbac-http';
|
|
18
|
-
import { BadRequest
|
|
18
|
+
import { BadRequest } from '@spinajs/exceptions';
|
|
19
19
|
import { ConfirmPasswordDto } from '../dto/confirm-password-dto.js';
|
|
20
20
|
import { TokenDto } from '../dto/token-dto.js';
|
|
21
21
|
import { SessionCookieFactory } from '../services/SessionCookies.js';
|
|
@@ -36,16 +36,12 @@ import { TwoFactorAuthEnabled } from '../policies/2FaPolicy.js';
|
|
|
36
36
|
* not be enough to attach an attacker-controlled authenticator or to strip the
|
|
37
37
|
* second factor off the account.
|
|
38
38
|
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* decides. That is why the system-wide switch (`rbac.twoFactorAuth.enabled`)
|
|
46
|
-
* is *also* enforced directly in the mutating handlers, via
|
|
47
|
-
* {@link assertSystemEnabled}, which is the check that actually matters for
|
|
48
|
-
* an authorized caller.
|
|
39
|
+
* The system-wide switch (`rbac.twoFactorAuth.enabled`) is enforced by
|
|
40
|
+
* `TwoFactorAuthEnabled`, passed to `@Permission` on each mutating route so it
|
|
41
|
+
* shares a policy group with the permission check and is therefore required
|
|
42
|
+
* rather than merely offered as an alternative. It is deliberately NOT a class
|
|
43
|
+
* policy: `status` stays readable while the switch is off, which is how the
|
|
44
|
+
* frontend learns to hide its 2FA controls.
|
|
49
45
|
*
|
|
50
46
|
* @tags Two-Factor Settings
|
|
51
47
|
*/
|
|
@@ -79,7 +75,6 @@ let TwoFactorAuthUserController = class TwoFactorAuthUserController extends Base
|
|
|
79
75
|
* @response 403 Forbidden — insufficient permissions
|
|
80
76
|
*/
|
|
81
77
|
async enable(user, confirmation, session) {
|
|
82
|
-
this.assertSystemEnabled();
|
|
83
78
|
if (user.Metadata[TWO_FA_METATADATA_KEYS.ENABLED]) {
|
|
84
79
|
throw new BadRequest(`User ${user.Uuid} already has 2fa enabled`);
|
|
85
80
|
}
|
|
@@ -105,7 +100,6 @@ let TwoFactorAuthUserController = class TwoFactorAuthUserController extends Base
|
|
|
105
100
|
* @response 403 Invalid or expired TOTP code
|
|
106
101
|
*/
|
|
107
102
|
async confirm(user, token, session) {
|
|
108
|
-
this.assertSystemEnabled();
|
|
109
103
|
// `activate()` never clears the stored token, so an already-enabled
|
|
110
104
|
// account still has one and would otherwise be able to call this route
|
|
111
105
|
// again with a currently-valid code. Only the pending state — a token
|
|
@@ -145,7 +139,6 @@ let TwoFactorAuthUserController = class TwoFactorAuthUserController extends Base
|
|
|
145
139
|
* @response 403 Forbidden — insufficient permissions
|
|
146
140
|
*/
|
|
147
141
|
async disable(user, confirmation, session) {
|
|
148
|
-
this.assertSystemEnabled();
|
|
149
142
|
if (!user.Metadata[TWO_FA_METATADATA_KEYS.ENABLED]) {
|
|
150
143
|
throw new BadRequest(`User ${user.Uuid} already has 2fa disabled`);
|
|
151
144
|
}
|
|
@@ -184,7 +177,6 @@ let TwoFactorAuthUserController = class TwoFactorAuthUserController extends Base
|
|
|
184
177
|
* @response 403 Forbidden — insufficient permissions
|
|
185
178
|
*/
|
|
186
179
|
async reset(user, confirmation, session) {
|
|
187
|
-
this.assertSystemEnabled();
|
|
188
180
|
if (!user.Metadata[TWO_FA_METATADATA_KEYS.ENABLED] && !user.Metadata[TWO_FA_METATADATA_KEYS.TOKEN]) {
|
|
189
181
|
throw new BadRequest(`User ${user.Uuid} has no 2fa to reset`);
|
|
190
182
|
}
|
|
@@ -196,21 +188,6 @@ let TwoFactorAuthUserController = class TwoFactorAuthUserController extends Base
|
|
|
196
188
|
const result = await this.enrol(user);
|
|
197
189
|
return new Ok({ otp: result }, await this.rotate(session));
|
|
198
190
|
}
|
|
199
|
-
/**
|
|
200
|
-
* Refuse a mutation while 2FA is switched off system-wide.
|
|
201
|
-
*
|
|
202
|
-
* The `TwoFactorAuthEnabled` policy cannot do this job: @spinajs/http merges
|
|
203
|
-
* a route's policies into one gate that passes when ANY of them resolves, and
|
|
204
|
-
* these routes also carry AuthorizedPolicy, which succeeds for every
|
|
205
|
-
* logged-in caller. The check has to live where it cannot be short-circuited.
|
|
206
|
-
*/
|
|
207
|
-
assertSystemEnabled() {
|
|
208
|
-
if (this.TwoFactorConfig?.enabled === false) {
|
|
209
|
-
throw Object.assign(new Forbidden('2 factor auth is not enabled'), {
|
|
210
|
-
error: { code: 'E_2FA_SYSTEM_DISABLED', message: '2 factor auth is not enabled' },
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
191
|
/**
|
|
215
192
|
* Rotates the session id after the account's authentication requirements
|
|
216
193
|
* changed, and returns the response options carrying the new cookie.
|
|
@@ -288,7 +265,7 @@ __decorate([
|
|
|
288
265
|
], TwoFactorAuthUserController.prototype, "status", null);
|
|
289
266
|
__decorate([
|
|
290
267
|
Post('2fa/enable'),
|
|
291
|
-
Permission(['updateOwn']),
|
|
268
|
+
Permission(['updateOwn'], TwoFactorAuthEnabled),
|
|
292
269
|
__param(0, User()),
|
|
293
270
|
__param(1, Body()),
|
|
294
271
|
__param(2, SessionRouteArg()),
|
|
@@ -298,7 +275,7 @@ __decorate([
|
|
|
298
275
|
], TwoFactorAuthUserController.prototype, "enable", null);
|
|
299
276
|
__decorate([
|
|
300
277
|
Post('2fa/confirm'),
|
|
301
|
-
Permission(['updateOwn']),
|
|
278
|
+
Permission(['updateOwn'], TwoFactorAuthEnabled),
|
|
302
279
|
__param(0, User()),
|
|
303
280
|
__param(1, Body()),
|
|
304
281
|
__param(2, SessionRouteArg()),
|
|
@@ -308,7 +285,7 @@ __decorate([
|
|
|
308
285
|
], TwoFactorAuthUserController.prototype, "confirm", null);
|
|
309
286
|
__decorate([
|
|
310
287
|
Post('2fa/disable'),
|
|
311
|
-
Permission(['updateOwn']),
|
|
288
|
+
Permission(['updateOwn'], TwoFactorAuthEnabled),
|
|
312
289
|
__param(0, User()),
|
|
313
290
|
__param(1, Body()),
|
|
314
291
|
__param(2, SessionRouteArg()),
|
|
@@ -318,7 +295,7 @@ __decorate([
|
|
|
318
295
|
], TwoFactorAuthUserController.prototype, "disable", null);
|
|
319
296
|
__decorate([
|
|
320
297
|
Post('2fa/reset'),
|
|
321
|
-
Permission(['updateOwn']),
|
|
298
|
+
Permission(['updateOwn'], TwoFactorAuthEnabled),
|
|
322
299
|
__param(0, User()),
|
|
323
300
|
__param(1, Body()),
|
|
324
301
|
__param(2, SessionRouteArg()),
|
|
@@ -329,8 +306,7 @@ __decorate([
|
|
|
329
306
|
TwoFactorAuthUserController = __decorate([
|
|
330
307
|
BasePath('user'),
|
|
331
308
|
Resource('user'),
|
|
332
|
-
Policy(AuthorizedPolicy)
|
|
333
|
-
Policy(TwoFactorAuthEnabled)
|
|
309
|
+
Policy(AuthorizedPolicy)
|
|
334
310
|
], TwoFactorAuthUserController);
|
|
335
311
|
export { TwoFactorAuthUserController };
|
|
336
312
|
//# sourceMappingURL=TwoFactorAuthUserController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TwoFactorAuthUserController.js","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthUserController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAsB,UAAU,EAAE,QAAQ,EAAE,OAAO,IAAI,eAAe,EAAuB,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACvJ,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"TwoFactorAuthUserController.js","sourceRoot":"","sources":["../../../src/controllers/TwoFactorAuthUserController.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,IAAI,IAAI,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAsB,UAAU,EAAE,QAAQ,EAAE,OAAO,IAAI,eAAe,EAAuB,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACvJ,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAuBhE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAII,IAAM,2BAA2B,GAAjC,MAAM,2BAA4B,SAAQ,cAAc;IAa7D;;;;;;;OAOG;IAGU,AAAN,KAAK,CAAC,MAAM,CAAS,IAAe;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;QAEvE,OAAO,IAAI,EAAE,CAAC;YACZ,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YACzE,aAAa,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,KAAK,KAAK;SACvD,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IAGU,AAAN,KAAK,CAAC,MAAM,CAAS,IAAe,EAAU,YAAgC,EAAqB,OAAiB;QACzH,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,wEAAwE;QACxE,4EAA4E;QAC5E,2EAA2E;QAC3E,mDAAmD;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAgB,EAAE,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,OAAO,CAAS,IAAe,EAAU,KAAe,EAAqB,OAAiB;QACzG,oEAAoE;QACpE,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YAClG,MAAM,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,+BAA+B,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,wEAAwE;YACxE,kEAAkE;YAClE,qEAAqE;YACrE,qDAAqD;YACrD,IAAI,CAAC,CAAC,GAAG,YAAY,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,GAAG,CAAC;YACZ,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAE7E,OAAO,IAAI,iBAAiB,CAAC;gBAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,EAAE;aAC7D,CAAC,CAAC;QACL,CAAC;QAED,2EAA2E;QAC3E,4EAA4E;QAC5E,0BAA0B;QAC1B,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;;OASG;IAGU,AAAN,KAAK,CAAC,OAAO,CAAS,IAAe,EAAU,YAAgC,EAAqB,OAAiB;QAC1H,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,2BAA2B,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IAGU,AAAN,KAAK,CAAC,KAAK,CAAS,IAAe,EAAU,YAAgC,EAAqB,OAAiB;QACxH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,UAAU,CAAC,QAAQ,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEtC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAgB,EAAE,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;OASG;IACO,KAAK,CAAC,MAAM,CAAC,OAAiB;QACtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACrE,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE3E,OAAO;YACL,QAAQ,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,IAAe;QAC7B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,kEAAkE;IACxD,gBAAgB,CAAC,IAAe,EAAE,KAAa;QACvD,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,2EAA2E;IACjE,OAAO,CAAC,IAAe;QAC/B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,eAAe,CAAC,IAAe,EAAE,QAAgB;QAC/D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE1E,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,IAAI,gCAAgC,CAAC,CAAC;YAErF,OAAO,IAAI,YAAY,CAAC;gBACtB,KAAK,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,kBAAkB,EAAE;aACnE,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AA/OW;IADT,iBAAiB,CAAC,eAAe,CAAC;8BACP,gBAAgB;qEAAC;AAGnC;IADT,iBAAiB,CAAC,cAAc,CAAC;8BACP,eAAe;oEAAC;AAGjC;IADT,UAAU,CAAC,oBAAoB,CAAC;8BACP,oBAAoB;mEAAC;AAGrC;IADT,MAAM,CAAC,oBAAoB,CAAC;;oEACkB;AAYlC;IAFZ,GAAG,CAAC,KAAK,CAAC;IACV,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;IACH,WAAA,IAAI,EAAE,CAAA;;qCAAO,SAAS;;yDAQ1C;AAgBY;IAFZ,IAAI,CAAC,YAAY,CAAC;IAClB,UAAU,CAAC,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC3B,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,IAAI,EAAE,CAAA;IAAoC,WAAA,eAAe,EAAE,CAAA;;qCAAvE,SAAS,EAAwB,kBAAkB;;yDAiBpF;AAcY;IAFZ,IAAI,CAAC,aAAa,CAAC;IACnB,UAAU,CAAC,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC1B,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,eAAe,EAAE,CAAA;;qCAAtD,SAAS,EAAiB,QAAQ;;0DA+BpE;AAcY;IAFZ,IAAI,CAAC,aAAa,CAAC;IACnB,UAAU,CAAC,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC1B,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,IAAI,EAAE,CAAA;IAAoC,WAAA,eAAe,EAAE,CAAA;;qCAAvE,SAAS,EAAwB,kBAAkB;;0DAYrF;AA+BY;IAFZ,IAAI,CAAC,WAAW,CAAC;IACjB,UAAU,CAAC,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC;IAC5B,WAAA,IAAI,EAAE,CAAA;IAAmB,WAAA,IAAI,EAAE,CAAA;IAAoC,WAAA,eAAe,EAAE,CAAA;;qCAAvE,SAAS,EAAwB,kBAAkB;;wDAcnF;AApLU,2BAA2B;IAHvC,QAAQ,CAAC,MAAM,CAAC;IAChB,QAAQ,CAAC,MAAM,CAAC;IAChB,MAAM,CAAC,gBAAgB,CAAC;GACZ,2BAA2B,CAiPvC"}
|