@tx5dr/contracts 1.7.5 → 1.7.8

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,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { buildAbilityRules, Permission, PERMISSION_GROUPS, PERMISSION_RULE_MAP, } from '../ability.js';
2
+ import { buildRadioFrequencyPermissionGrants, buildAbilityRules, getPresetFrequenciesFromFrequencyGrants, getRangesFromFrequencyGrants, Permission, PERMISSION_GROUPS, PERMISSION_RULE_MAP, } from '../ability.js';
3
3
  import { UserRole } from '../auth.schema.js';
4
4
  describe('ability contracts', () => {
5
5
  it('maps CW decoder permissions to separate control and config capabilities', () => {
@@ -28,5 +28,51 @@ describe('ability contracts', () => {
28
28
  Permission.CW_DECODER_CONFIG,
29
29
  ]);
30
30
  });
31
+ it('builds preset and range frequency grants as separate OR rules', () => {
32
+ const grants = buildRadioFrequencyPermissionGrants([7_050_000, 7_050_000], [{ minFrequency: 14_000_000, maxFrequency: 14_350_000 }]);
33
+ expect(grants).toEqual([
34
+ {
35
+ permission: Permission.RADIO_SET_FREQUENCY,
36
+ conditions: { frequency: { $in: [7_050_000] } },
37
+ },
38
+ {
39
+ permission: Permission.RADIO_SET_FREQUENCY,
40
+ conditions: { frequency: { $gte: 14_000_000, $lte: 14_350_000 } },
41
+ },
42
+ ]);
43
+ });
44
+ it('uses an unconditional frequency grant when no preset or range restriction is provided', () => {
45
+ expect(buildRadioFrequencyPermissionGrants([], [])).toEqual([
46
+ { permission: Permission.RADIO_SET_FREQUENCY },
47
+ ]);
48
+ });
49
+ it('rejects invalid preset frequency restrictions instead of allowing all frequencies', () => {
50
+ expect(() => buildRadioFrequencyPermissionGrants([Number.NaN], []))
51
+ .toThrow('presetFrequencies[0]');
52
+ expect(() => buildRadioFrequencyPermissionGrants([0], []))
53
+ .toThrow('presetFrequencies[0]');
54
+ });
55
+ it('rejects invalid range restrictions instead of allowing all frequencies', () => {
56
+ expect(() => buildRadioFrequencyPermissionGrants([], [{ minFrequency: Number.NaN, maxFrequency: 14_350_000 }]))
57
+ .toThrow('ranges[0].minFrequency');
58
+ expect(() => buildRadioFrequencyPermissionGrants([], [{ minFrequency: 14_350_000, maxFrequency: 14_000_000 }]))
59
+ .toThrow('ranges[0]');
60
+ });
61
+ it('restores preset and range restrictions from existing frequency grants', () => {
62
+ const grants = [
63
+ {
64
+ permission: Permission.RADIO_SET_FREQUENCY,
65
+ conditions: { frequency: { $in: [7_050_000, 14_270_000] } },
66
+ },
67
+ {
68
+ permission: Permission.RADIO_SET_FREQUENCY,
69
+ conditions: { frequency: { $gte: 14_000_000, $lte: 14_350_000 } },
70
+ },
71
+ ];
72
+ expect(getPresetFrequenciesFromFrequencyGrants(grants)).toEqual([7_050_000, 14_270_000]);
73
+ expect(getRangesFromFrequencyGrants(grants)).toEqual([
74
+ { band: '20m', minFrequency: 14_000_000, maxFrequency: 14_350_000 },
75
+ ]);
76
+ });
31
77
  });
32
78
  //# sourceMappingURL=ability.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ability.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/ability.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;YACjE,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,WAAW;SACrB,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;YAChE,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;aACzE,GAAG,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAEnE,MAAM,CAAC,iBAAiB,CAAC;YACvB,IAAI,EAAE,QAAQ,CAAC,QAAQ;YACvB,WAAW,EAAE,CAAC,KAAK,CAAC;YACpB,gBAAgB,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,kBAAkB,EAAE,CAAC;SAClE,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QACpE,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC;YACnC,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,iBAAiB;SAC7B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ability.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/ability.test.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,7 @@ describe('plugin market schema', () => {
50
50
  expect(() => PluginMarketChannelSchema.parse('beta')).toThrow();
51
51
  });
52
52
  it('accepts host settings permissions', () => {
53
+ expect(PluginPermissionSchema.parse('host:hamlib')).toBe('host:hamlib');
53
54
  expect(PluginPermissionSchema.parse('settings:ft8')).toBe('settings:ft8');
54
55
  expect(PluginPermissionSchema.parse('settings:ntp')).toBe('settings:ntp');
55
56
  });
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-market.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/plugin-market.schema.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-market.schema.test.js","sourceRoot":"","sources":["../../../src/schema/__tests__/plugin-market.schema.test.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,16 @@ export declare const PermissionGrantSchema: z.ZodObject<{
53
53
  conditions?: Record<string, unknown> | undefined;
54
54
  }>;
55
55
  export type PermissionGrant = z.infer<typeof PermissionGrantSchema>;
56
+ export interface FrequencyPermissionRange {
57
+ band?: string;
58
+ minFrequency: number;
59
+ maxFrequency: number;
60
+ }
61
+ export declare const FREQUENCY_PERMISSION_BAND_RANGES: Record<string, FrequencyPermissionRange>;
62
+ export declare function getPresetFrequenciesFromFrequencyGrants(grants: PermissionGrant[] | undefined): number[];
63
+ export declare function getRangesFromFrequencyGrants(grants: PermissionGrant[] | undefined): FrequencyPermissionRange[];
64
+ export declare function inferFrequencyPermissionBand(minFrequency: number, maxFrequency: number): string | undefined;
65
+ export declare function buildRadioFrequencyPermissionGrants(presetFrequencies: number[], ranges: FrequencyPermissionRange[]): PermissionGrant[];
56
66
  export interface RawRule {
57
67
  action: AppAction | AppAction[];
58
68
  subject: AppSubject | AppSubject[];
@@ -1 +1 @@
1
- {"version":3,"file":"ability.d.ts","sourceRoot":"","sources":["../../src/schema/ability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAIvF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,cAAc,GACd,OAAO,GACP,YAAY,CAAC;AAEjB;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB,gBAAgB,GAChB,YAAY,GACZ,WAAW,GACX,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,YAAY,GACZ,eAAe,GACf,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,uBAAuB,GACvB,0BAA0B,GAC1B,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,iBAAiB,GAAG,KAAK,CAAC;AAEnE,qDAAqD;AACrD,MAAM,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAInD,oBAAY,UAAU;IACpB,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,gCAAgC;IAChC,aAAa,kBAAkB;IAC/B,iDAAiD;IACjD,WAAW,gBAAgB;IAC3B,qDAAqD;IACrD,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,WAAW,gBAAgB;IAC3B,kBAAkB,uBAAuB;IACzC,iBAAiB,sBAAsB;IACvC,uBAAuB,4BAA4B;IACnD,0BAA0B,+BAA+B;IACzD,cAAc,mBAAmB;CAClC;AAED,eAAO,MAAM,gBAAgB,oCAA2B,CAAC;AAIzD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,UAAU,EAAE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAgBrG,CAAC;AAIF,eAAO,MAAM,qBAAqB;;IAEhC,iFAAiF;;;;;;;;EAEjF,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;IAChC,OAAO,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC,GAAG,OAAO,EAAE,CAsCZ;AAID,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,EA+BjD,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;IAC/D,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,KAAK,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAMD,CAAC"}
1
+ {"version":3,"file":"ability.d.ts","sourceRoot":"","sources":["../../src/schema/ability.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,111 @@ export const PermissionGrantSchema = z.object({
47
47
  /** MongoDB-style conditions for CASL, e.g. { frequency: { $in: [14074000] } } */
48
48
  conditions: z.record(z.unknown()).optional(),
49
49
  });
50
+ export const FREQUENCY_PERMISSION_BAND_RANGES = {
51
+ '160m': { band: '160m', minFrequency: 1_800_000, maxFrequency: 2_000_000 },
52
+ '80m': { band: '80m', minFrequency: 3_500_000, maxFrequency: 4_000_000 },
53
+ '60m': { band: '60m', minFrequency: 5_000_000, maxFrequency: 5_500_000 },
54
+ '40m': { band: '40m', minFrequency: 7_000_000, maxFrequency: 7_300_000 },
55
+ '30m': { band: '30m', minFrequency: 10_100_000, maxFrequency: 10_150_000 },
56
+ '20m': { band: '20m', minFrequency: 14_000_000, maxFrequency: 14_350_000 },
57
+ '17m': { band: '17m', minFrequency: 18_068_000, maxFrequency: 18_168_000 },
58
+ '15m': { band: '15m', minFrequency: 21_000_000, maxFrequency: 21_450_000 },
59
+ '12m': { band: '12m', minFrequency: 24_890_000, maxFrequency: 24_990_000 },
60
+ '10m': { band: '10m', minFrequency: 28_000_000, maxFrequency: 29_700_000 },
61
+ '6m': { band: '6m', minFrequency: 50_000_000, maxFrequency: 54_000_000 },
62
+ '2m': { band: '2m', minFrequency: 144_000_000, maxFrequency: 148_000_000 },
63
+ '70cm': { band: '70cm', minFrequency: 420_000_000, maxFrequency: 450_000_000 },
64
+ };
65
+ function getFrequencyCondition(grant) {
66
+ if (grant.permission !== Permission.RADIO_SET_FREQUENCY)
67
+ return null;
68
+ const frequency = grant.conditions?.frequency;
69
+ if (!frequency || typeof frequency !== 'object' || Array.isArray(frequency))
70
+ return null;
71
+ return frequency;
72
+ }
73
+ function normalizeFrequency(value) {
74
+ return typeof value === 'number' && Number.isFinite(value) && value > 0
75
+ ? Math.round(value)
76
+ : null;
77
+ }
78
+ function requireFrequency(value, label) {
79
+ const frequency = normalizeFrequency(value);
80
+ if (frequency === null) {
81
+ throw new Error(`${label} must be a finite positive frequency in Hz`);
82
+ }
83
+ return frequency;
84
+ }
85
+ export function getPresetFrequenciesFromFrequencyGrants(grants) {
86
+ const result = [];
87
+ const seen = new Set();
88
+ for (const grant of grants ?? []) {
89
+ const condition = getFrequencyCondition(grant);
90
+ const values = condition?.$in;
91
+ if (!Array.isArray(values))
92
+ continue;
93
+ for (const value of values) {
94
+ const frequency = normalizeFrequency(value);
95
+ if (frequency !== null && !seen.has(frequency)) {
96
+ seen.add(frequency);
97
+ result.push(frequency);
98
+ }
99
+ }
100
+ }
101
+ return result;
102
+ }
103
+ export function getRangesFromFrequencyGrants(grants) {
104
+ const result = [];
105
+ for (const grant of grants ?? []) {
106
+ const condition = getFrequencyCondition(grant);
107
+ const minFrequency = normalizeFrequency(condition?.$gte);
108
+ const maxFrequency = normalizeFrequency(condition?.$lte);
109
+ if (minFrequency === null || maxFrequency === null || minFrequency > maxFrequency)
110
+ continue;
111
+ result.push({
112
+ minFrequency,
113
+ maxFrequency,
114
+ band: inferFrequencyPermissionBand(minFrequency, maxFrequency),
115
+ });
116
+ }
117
+ return result;
118
+ }
119
+ export function inferFrequencyPermissionBand(minFrequency, maxFrequency) {
120
+ const entry = Object.entries(FREQUENCY_PERMISSION_BAND_RANGES)
121
+ .find(([, range]) => range.minFrequency === minFrequency && range.maxFrequency === maxFrequency);
122
+ return entry?.[0];
123
+ }
124
+ export function buildRadioFrequencyPermissionGrants(presetFrequencies, ranges) {
125
+ const grants = [];
126
+ const normalizedPresetFrequencies = [...new Set(presetFrequencies.map((value, index) => requireFrequency(value, `presetFrequencies[${index}]`)))];
127
+ if (normalizedPresetFrequencies.length > 0) {
128
+ grants.push({
129
+ permission: Permission.RADIO_SET_FREQUENCY,
130
+ conditions: {
131
+ frequency: { $in: normalizedPresetFrequencies },
132
+ },
133
+ });
134
+ }
135
+ for (const [index, range] of ranges.entries()) {
136
+ const minFrequency = requireFrequency(range.minFrequency, `ranges[${index}].minFrequency`);
137
+ const maxFrequency = requireFrequency(range.maxFrequency, `ranges[${index}].maxFrequency`);
138
+ if (minFrequency > maxFrequency) {
139
+ throw new Error(`ranges[${index}] minFrequency must be less than or equal to maxFrequency`);
140
+ }
141
+ grants.push({
142
+ permission: Permission.RADIO_SET_FREQUENCY,
143
+ conditions: {
144
+ frequency: {
145
+ $gte: minFrequency,
146
+ $lte: maxFrequency,
147
+ },
148
+ },
149
+ });
150
+ }
151
+ return grants.length > 0
152
+ ? grants
153
+ : [{ permission: Permission.RADIO_SET_FREQUENCY }];
154
+ }
50
155
  // ===== Ability rules builder =====
51
156
  /**
52
157
  * Build CASL-compatible rules from role + operatorIds + permission grants.
@@ -1 +1 @@
1
- {"version":3,"file":"ability.js","sourceRoot":"","sources":["../../src/schema/ability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ability.js","sourceRoot":"","sources":["../../src/schema/ability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA8C5C,wDAAwD;AAExD,MAAM,CAAN,IAAY,UAmBX;AAnBD,WAAY,UAAU;IACpB,yDAA2C,CAAA;IAC3C,iDAAmC,CAAA;IACnC,uCAAyB,CAAA;IACzB,2CAA6B,CAAA;IAC7B,iDAAmC,CAAA;IACnC,gCAAgC;IAChC,6CAA+B,CAAA;IAC/B,iDAAiD;IACjD,yCAA2B,CAAA;IAC3B,qDAAqD;IACrD,+CAAiC,CAAA;IACjC,qDAAuC,CAAA;IACvC,yCAA2B,CAAA;IAC3B,uDAAyC,CAAA;IACzC,qDAAuC,CAAA;IACvC,iEAAmD,CAAA;IACnD,uEAAyD,CAAA;IACzD,+CAAiC,CAAA;AACnC,CAAC,EAnBW,UAAU,KAAV,UAAU,QAmBrB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAEzD,6CAA6C;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAA0E;IACxG,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;IAClF,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE;IAC1E,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE;IACpE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;IACvE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE;IAC9E,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE;IAC1E,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE;IACtE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,EAAE;IAC5E,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;IACxE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE;IACtE,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE;IAC5E,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE;IAChF,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,uBAAuB,EAAE;IAC5F,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,0BAA0B,EAAE;IAClG,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE;CAC1E,CAAC;AAEF,gDAAgD;AAEhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,UAAU,EAAE,gBAAgB;IAC5B,iFAAiF;IACjF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC;AAYH,MAAM,CAAC,MAAM,gCAAgC,GAA6C;IACxF,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE;IACxE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE;IACxE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE;IACxE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IAC1E,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IAC1E,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE;IACxE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE;IAC1E,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE;CAC/E,CAAC;AAEF,SAAS,qBAAqB,CAAC,KAAsB;IACnD,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,mBAAmB;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC;IAC9C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACzF,OAAO,SAAoC,CAAC;AAC9C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,KAAa;IACrD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4CAA4C,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,MAAqC;IAC3F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAS;QAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAqC;IAChF,MAAM,MAAM,GAA+B,EAAE,CAAC;IAE9C,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,GAAG,YAAY;YAAE,SAAS;QAE5F,MAAM,CAAC,IAAI,CAAC;YACV,YAAY;YACZ,YAAY;YACZ,IAAI,EAAE,4BAA4B,CAAC,YAAY,EAAE,YAAY,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,YAAoB,EAAE,YAAoB;IACrF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,gCAAgC,CAAC;SAC3D,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,KAAK,YAAY,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC;IACnG,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,iBAA2B,EAC3B,MAAkC;IAElC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,2BAA2B,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAElJ,IAAI,2BAA2B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,UAAU,CAAC,mBAAmB;YAC1C,UAAU,EAAE;gBACV,SAAS,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE;aAChD;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,KAAK,gBAAgB,CAAC,CAAC;QAC3F,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,KAAK,gBAAgB,CAAC,CAAC;QAC3F,IAAI,YAAY,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,2DAA2D,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;YACV,UAAU,EAAE,UAAU,CAAC,mBAAmB;YAC1C,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,YAAY;iBACnB;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AACvD,CAAC;AAWD,oCAAoC;AAEpC;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAIjC;IACC,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,EAAE,EAAE,gBAAgB,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAEjE,qBAAqB;IACrB,IAAI,IAAI,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAc,EAAE,CAAC;IAE5B,yBAAyB;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/C,IAAI,IAAI,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC/B,6DAA6D;QAC7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CACR,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,EACnF,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,CAChG,CAAC;QACJ,CAAC;QACD,uEAAuE;QACvE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,oCAAoC;IACpC,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AASD,MAAM,CAAC,MAAM,iBAAiB,GAAyB;IACrD;QACE,GAAG,EAAE,OAAO;QACZ,WAAW,EAAE;YACX,UAAU,CAAC,mBAAmB;YAC9B,UAAU,CAAC,eAAe;YAC1B,UAAU,CAAC,UAAU;YACrB,UAAU,CAAC,YAAY;YACvB,UAAU,CAAC,eAAe;YAC1B,UAAU,CAAC,aAAa;YACxB,UAAU,CAAC,WAAW;YACtB,UAAU,CAAC,cAAc;SAC1B;KACF;IACD,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;IAC9D,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;IACtD;QACE,GAAG,EAAE,IAAI;QACT,WAAW,EAAE;YACX,UAAU,CAAC,kBAAkB;YAC7B,UAAU,CAAC,iBAAiB;SAC7B;KACF;IACD;QACE,GAAG,EAAE,UAAU;QACf,WAAW,EAAE;YACX,UAAU,CAAC,uBAAuB;YAClC,UAAU,CAAC,0BAA0B;SACtC;KACF;IACD,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;CAC7D,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,uBAAuB,GAI9B;IACJ,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE;QAChC,cAAc,EAAE,WAAW;QAC3B,iBAAiB,EAAE,KAAK;QACxB,QAAQ,EAAE,uCAAuC;KAClD;CACF,CAAC"}