pixel-priya 1.3.33 → 1.3.35
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/ComponentProps/TreeNodeProps.d.ts +12 -0
- package/lib/StyleGuide/ColorPalette/colorPaletteList.js +5 -0
- package/lib/StyleGuide/ColorPalette/colorPaletteList.js.map +1 -1
- package/lib/components/AllProjectsDropdown/AllProjectsDropdown.js +61 -3
- package/lib/components/AllProjectsDropdown/AllProjectsDropdown.js.map +1 -1
- package/lib/components/Charts/StackedBarChart/StackedBarChart.js +49 -38
- package/lib/components/Charts/StackedBarChart/StackedBarChart.js.map +1 -1
- package/lib/components/Charts/StackedBarChart/types.d.ts +3 -1
- package/lib/components/ConditionalDropdown/ConditionalDropdown.js +2 -1
- package/lib/components/ConditionalDropdown/ConditionalDropdown.js.map +1 -1
- package/lib/components/ConditionalDropdown/OptionsDropdown.d.ts +1 -1
- package/lib/components/ConditionalDropdown/OptionsDropdown.js +13 -3
- package/lib/components/ConditionalDropdown/OptionsDropdown.js.map +1 -1
- package/lib/components/ConditionalDropdown/types.d.ts +1 -0
- package/lib/components/MultiSelect/Dropdown.js +1 -1
- package/lib/components/MultiSelect/Dropdown.js.map +1 -1
- package/lib/components/MultiSelect/MultiSelect.js +3 -4
- package/lib/components/MultiSelect/MultiSelect.js.map +1 -1
- package/lib/components/NoResultFound/NoResultFound.d.ts +1 -0
- package/lib/components/NoResultFound/NoResultFound.js +1 -1
- package/lib/components/NoResultFound/NoResultFound.js.map +1 -1
- package/lib/components/OverviewModal/overviewModal.js +64 -16
- package/lib/components/OverviewModal/overviewModal.js.map +1 -1
- package/lib/components/OverviewModal/types.d.ts +27 -26
- package/lib/components/StepsLandingTable/Components/StepInnerTable.js +74 -32
- package/lib/components/StepsLandingTable/Components/StepInnerTable.js.map +1 -1
- package/lib/components/StepsLandingTable/StepLandingTable.js +1 -1
- package/lib/components/Table/Table.js +1 -3
- package/lib/components/Table/Table.js.map +1 -1
- package/lib/components/Table/Types.d.ts +0 -6
- package/lib/components/Table/components/SortableRow.js +2 -10
- package/lib/components/Table/components/SortableRow.js.map +1 -1
- package/lib/components/TableTreeFn/Components/TableHead.js +1 -1
- package/lib/components/TableTreeFn/Components/TableHead.js.map +1 -1
- package/lib/components/TableTreeFn/TableTreeFn.js +23 -25
- package/lib/components/TableTreeFn/TableTreeFn.js.map +1 -1
- package/lib/index.d.ts +53 -29
- package/lib/index.js +10 -10
- package/lib/index.js.map +1 -1
- package/lib/styles.css +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/computeTreeCountsAndFormatNodes/computeTreeCountsAndFormatNodes.d.ts +8 -0
- package/lib/utils/computeTreeCountsAndFormatNodes/computeTreeCountsAndFormatNodes.js +263 -0
- package/lib/utils/computeTreeCountsAndFormatNodes/computeTreeCountsAndFormatNodes.js.map +1 -0
- package/lib/utils/validateFileContent/validateFileContent.d.ts +1 -0
- package/lib/utils/validateFileContent/validateFileContent.js +297 -0
- package/lib/utils/validateFileContent/validateFileContent.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
// ==========================================
|
|
2
|
+
// 1. CONFIGURATION & SIGNATURE MAPS
|
|
3
|
+
// ==========================================
|
|
4
|
+
const EXTENSION_MAP = {
|
|
5
|
+
jpeg: 'jpg',
|
|
6
|
+
m4v: 'mp4',
|
|
7
|
+
pdfx: 'pdf',
|
|
8
|
+
tiff: 'tif',
|
|
9
|
+
word: 'doc',
|
|
10
|
+
};
|
|
11
|
+
const BINARY_SIGNATURES = {
|
|
12
|
+
aac: ['fff1', 'fff9', '494433'],
|
|
13
|
+
bmp: ['424d'],
|
|
14
|
+
crx: ['43723234'],
|
|
15
|
+
doc: ['d0cf11e0'],
|
|
16
|
+
gif: ['47494638'],
|
|
17
|
+
jpg: ['ffd8ff'],
|
|
18
|
+
mp3: ['494433', 'fffb', 'fff3', 'fff2'],
|
|
19
|
+
pdf: ['25504446'],
|
|
20
|
+
pfx: ['3082', '3081'],
|
|
21
|
+
png: ['89504e47'],
|
|
22
|
+
ppt: ['d0cf11e0'],
|
|
23
|
+
tif: ['49492a00', '4d4d002a'],
|
|
24
|
+
wav: ['52494646'],
|
|
25
|
+
xls: ['d0cf11e0'],
|
|
26
|
+
zip: ['504b0304', '504b0506', '504b0708'],
|
|
27
|
+
'7z': ['377abcaf271c'],
|
|
28
|
+
gz: ['1f8b'],
|
|
29
|
+
exe: ['4d5a'],
|
|
30
|
+
dll: ['4d5a'],
|
|
31
|
+
};
|
|
32
|
+
// Global list of signatures to identify ANY binary file
|
|
33
|
+
const ALL_BINARY_HEADERS = Object.values(BINARY_SIGNATURES).flat();
|
|
34
|
+
const ZIP_BASED_EXTENSIONS = ['apk', 'docx', 'ipa', 'pptx', 'xlsx'];
|
|
35
|
+
const TEXT_EXTENSIONS = [
|
|
36
|
+
'avsc',
|
|
37
|
+
'csv',
|
|
38
|
+
'bin',
|
|
39
|
+
'dat',
|
|
40
|
+
'edi',
|
|
41
|
+
'html',
|
|
42
|
+
'js',
|
|
43
|
+
'json',
|
|
44
|
+
'key',
|
|
45
|
+
'md',
|
|
46
|
+
'pem',
|
|
47
|
+
'properties',
|
|
48
|
+
'py',
|
|
49
|
+
'svg',
|
|
50
|
+
'txt',
|
|
51
|
+
'trg',
|
|
52
|
+
'xml',
|
|
53
|
+
'yaml',
|
|
54
|
+
'yml',
|
|
55
|
+
];
|
|
56
|
+
// Safety Guard: Don't parse JSON files larger than 20MB in memory
|
|
57
|
+
const MAX_TEXT_PARSE_SIZE_BYTES = 20 * 1024 * 1024;
|
|
58
|
+
// Add to Section 1 (Configuration)
|
|
59
|
+
const HIGH_RISK_EXECUTABLE_EXTENSIONS = [
|
|
60
|
+
'exe',
|
|
61
|
+
'bat',
|
|
62
|
+
'cmd',
|
|
63
|
+
'sh',
|
|
64
|
+
'php',
|
|
65
|
+
'phtml',
|
|
66
|
+
'jsp',
|
|
67
|
+
'asp',
|
|
68
|
+
'aspx',
|
|
69
|
+
'lnk',
|
|
70
|
+
'vbs',
|
|
71
|
+
];
|
|
72
|
+
// High-risk backend injection patterns (e.g., PHP web shells in EXIF metadata)
|
|
73
|
+
const MALICIOUS_SCRIPT_PATTERNS = [
|
|
74
|
+
/<\?php/i, // Standard PHP opening tags
|
|
75
|
+
/<\?=/i, // PHP short echo tags
|
|
76
|
+
/__typeof__/i, // Common JavaScript ecosystem exploitation hooks
|
|
77
|
+
/Runtime\.getRuntime/i, // Java system command wrappers
|
|
78
|
+
/base64_decode\s*\(/i, // Obfuscated PHP execution payloads
|
|
79
|
+
/eval\s*\(/i, // Dynamic server-side evaluation patterns
|
|
80
|
+
];
|
|
81
|
+
// ==========================================
|
|
82
|
+
// 2. HELPER UTILITIES
|
|
83
|
+
// ==========================================
|
|
84
|
+
const normalizeFileExtension = (extension) => {
|
|
85
|
+
return extension ? EXTENSION_MAP[extension] || extension : extension;
|
|
86
|
+
};
|
|
87
|
+
const readFileChunk = (file, bytesToRead) => {
|
|
88
|
+
return new Promise((resolve) => {
|
|
89
|
+
const reader = new FileReader();
|
|
90
|
+
reader.onloadend = () => {
|
|
91
|
+
if (reader.result) {
|
|
92
|
+
resolve(new Uint8Array(reader.result));
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
resolve(null);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
reader.onerror = () => resolve(null);
|
|
99
|
+
if (bytesToRead !== undefined) {
|
|
100
|
+
reader.readAsArrayBuffer(file.slice(0, bytesToRead));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
reader.readAsArrayBuffer(file);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
const toHexHeader = (buffer) => [...buffer].map((byte) => byte.toString(16).padStart(2, '0')).join('');
|
|
108
|
+
const hasSignature = (header, signatures) => signatures.some((signature) => header.startsWith(signature));
|
|
109
|
+
const decodeUtf8Strict = (buffer) => {
|
|
110
|
+
try {
|
|
111
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(buffer);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const decodeTextContent = (buffer) => {
|
|
118
|
+
const utf8Text = decodeUtf8Strict(buffer);
|
|
119
|
+
if (utf8Text !== null)
|
|
120
|
+
return utf8Text;
|
|
121
|
+
try {
|
|
122
|
+
return new TextDecoder('windows-1252', { fatal: true }).decode(buffer);
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Validates a binary buffer stream against raw script/code blocks.
|
|
130
|
+
* Uses 'latin1' encoding to preserve raw bytecode offsets safely without crashing.
|
|
131
|
+
*/
|
|
132
|
+
const containsEmbeddedScripts = (buffer) => {
|
|
133
|
+
const content = new TextDecoder('latin1').decode(buffer);
|
|
134
|
+
return MALICIOUS_SCRIPT_PATTERNS.some((pattern) => pattern.test(content));
|
|
135
|
+
};
|
|
136
|
+
// ==========================================
|
|
137
|
+
// 3. STRUCTURE VALIDATORS
|
|
138
|
+
// ==========================================
|
|
139
|
+
const hasYamlStructure = (text) => {
|
|
140
|
+
const meaningfulLines = text
|
|
141
|
+
.split(/\r?\n/)
|
|
142
|
+
.map((line) => line.trim())
|
|
143
|
+
.filter((line) => line && !line.startsWith('#'));
|
|
144
|
+
return meaningfulLines.some((line) => {
|
|
145
|
+
return (line === '---' ||
|
|
146
|
+
line === '...' ||
|
|
147
|
+
line.startsWith('- ') ||
|
|
148
|
+
line.startsWith('{') ||
|
|
149
|
+
line.startsWith('[') ||
|
|
150
|
+
/^[^:#]+:\s*.+?$/.test(line) ||
|
|
151
|
+
/^[^:#]+:\s*$/.test(line));
|
|
152
|
+
});
|
|
153
|
+
};
|
|
154
|
+
const hasCorruptedFixtureContent = (text) => /^This corrupted \.[a-z0-9]+ file contains invalid content\.$/i.test(text.trim());
|
|
155
|
+
// ==========================================
|
|
156
|
+
// 4. TEXT FILE VALIDATION ENGINE
|
|
157
|
+
// ==========================================
|
|
158
|
+
const isTextFileValid = async (file, headerBuffer, extension) => {
|
|
159
|
+
const headerHex = toHexHeader(headerBuffer);
|
|
160
|
+
const decodedHeaderText = decodeTextContent(headerBuffer);
|
|
161
|
+
// 1. Basic Binary Integrity Checks
|
|
162
|
+
if (hasSignature(headerHex, ALL_BINARY_HEADERS) ||
|
|
163
|
+
decodedHeaderText === null ||
|
|
164
|
+
/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/.test(decodedHeaderText)) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
const trimmedHeader = decodedHeaderText.trim();
|
|
168
|
+
// 2. Size and Dummy Content Check
|
|
169
|
+
if (!trimmedHeader && file.size > 0)
|
|
170
|
+
return false;
|
|
171
|
+
if (hasCorruptedFixtureContent(trimmedHeader))
|
|
172
|
+
return false;
|
|
173
|
+
// 3. Deep Strict Parsing for JSON / AVSC
|
|
174
|
+
if (extension === 'json' || extension === 'avsc') {
|
|
175
|
+
if (file.size > MAX_TEXT_PARSE_SIZE_BYTES) {
|
|
176
|
+
// If the file is huge, we pass it based on header integrity to avoid browser crash
|
|
177
|
+
return !headerBuffer.includes(0);
|
|
178
|
+
}
|
|
179
|
+
const fileBuffer = await readFileChunk(file);
|
|
180
|
+
const fileText = fileBuffer ? decodeUtf8Strict(fileBuffer) : null;
|
|
181
|
+
if (fileText === null)
|
|
182
|
+
return false;
|
|
183
|
+
try {
|
|
184
|
+
JSON.parse(fileText);
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// 4. Markup Checks (XML, SVG, HTML)
|
|
192
|
+
if (extension === 'xml' || extension === 'svg') {
|
|
193
|
+
return trimmedHeader.startsWith('<') && trimmedHeader.includes('>');
|
|
194
|
+
}
|
|
195
|
+
if (extension === 'html') {
|
|
196
|
+
return /^<!doctype html|<html|<\w+/i.test(trimmedHeader);
|
|
197
|
+
}
|
|
198
|
+
// 5. YAML Structure Check
|
|
199
|
+
if (extension === 'yaml' || extension === 'yml') {
|
|
200
|
+
return hasYamlStructure(trimmedHeader);
|
|
201
|
+
}
|
|
202
|
+
// Fallback for generic text files (like .txt, .csv)
|
|
203
|
+
return !headerBuffer.includes(0);
|
|
204
|
+
};
|
|
205
|
+
// ==========================================
|
|
206
|
+
// 5. MAIN EXPORTED FUNCTION
|
|
207
|
+
// ==========================================
|
|
208
|
+
export const validateFileContent = async (file) => {
|
|
209
|
+
// 1. Prevent zero-byte files
|
|
210
|
+
if (file.size === 0)
|
|
211
|
+
return false;
|
|
212
|
+
const fileName = file.name;
|
|
213
|
+
// 2. Defense against Null-Byte Poisoning (e.g., "malware.php\x00.png")
|
|
214
|
+
// Attackers use null bytes to trick the frontend into thinking it's an image,
|
|
215
|
+
// while the backend system stops reading at the null byte and treats it as an executable script.
|
|
216
|
+
if (fileName.includes('\0') || fileName.includes('%00')) {
|
|
217
|
+
console.warn('Security Alert: File name contains malicious null-byte characters.');
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
// 3. Defense against Double-Extension Masking (e.g., "invoice.pdf.exe" or "image.png.php")
|
|
221
|
+
// Extract all parts of the extension array
|
|
222
|
+
const nameParts = fileName.toLowerCase().split('.');
|
|
223
|
+
if (nameParts.length > 2) {
|
|
224
|
+
// Check if any of the intermediate hidden extensions are high-risk server scripts
|
|
225
|
+
const hasHiddenExecutable = nameParts
|
|
226
|
+
.slice(1, -1)
|
|
227
|
+
.some((ext) => HIGH_RISK_EXECUTABLE_EXTENSIONS.includes(ext));
|
|
228
|
+
if (hasHiddenExecutable) {
|
|
229
|
+
console.warn('Security Alert: Double-extension masking detected.');
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
const extension = normalizeFileExtension(nameParts.pop());
|
|
234
|
+
if (!extension)
|
|
235
|
+
return true;
|
|
236
|
+
// Read only the first 4KB for header analysis
|
|
237
|
+
const buffer = await readFileChunk(file, 4096);
|
|
238
|
+
if (!buffer)
|
|
239
|
+
return false;
|
|
240
|
+
const header = toHexHeader(buffer);
|
|
241
|
+
// Route 1: Zip-Based Office Docs / Archives (Enhanced against Polyglots)
|
|
242
|
+
// Polyglots are files that are both a valid image and a valid ZIP file simultaneously.
|
|
243
|
+
if (ZIP_BASED_EXTENSIONS.includes(extension)) {
|
|
244
|
+
// Ensure it strictly matches a ZIP file and does not double-match image headers
|
|
245
|
+
if (hasSignature(header, BINARY_SIGNATURES.jpg ?? []) ||
|
|
246
|
+
hasSignature(header, BINARY_SIGNATURES.png ?? [])) {
|
|
247
|
+
console.warn('Security Alert: Disguised Archive Polyglot detected.');
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
return hasSignature(header, BINARY_SIGNATURES.zip ?? []);
|
|
251
|
+
}
|
|
252
|
+
// Route 2: Video Files (MP4 / MOV / M4A)
|
|
253
|
+
if (extension === 'm4a' || extension === 'mp4' || extension === 'mov') {
|
|
254
|
+
const brand = new TextDecoder('ascii', { fatal: false }).decode(buffer.slice(4, 12));
|
|
255
|
+
return brand.startsWith('ftyp');
|
|
256
|
+
}
|
|
257
|
+
// Route 3: TAR Archives
|
|
258
|
+
if (extension === 'tar') {
|
|
259
|
+
const tarMarker = new TextDecoder('ascii', { fatal: false }).decode(buffer.slice(257, 262));
|
|
260
|
+
return tarMarker === 'ustar';
|
|
261
|
+
}
|
|
262
|
+
// Route 4: Audio WAV Files
|
|
263
|
+
if (extension === 'wav') {
|
|
264
|
+
const riffType = new TextDecoder('ascii', { fatal: false }).decode(buffer.slice(8, 12));
|
|
265
|
+
return hasSignature(header, BINARY_SIGNATURES.wav ?? []) && riffType === 'WAVE';
|
|
266
|
+
}
|
|
267
|
+
// Route 5: Y4M Video Files
|
|
268
|
+
if (extension === 'y4m') {
|
|
269
|
+
const fileHeader = new TextDecoder('ascii', { fatal: false }).decode(buffer.slice(0, 9));
|
|
270
|
+
return fileHeader === 'YUV4MPEG2';
|
|
271
|
+
}
|
|
272
|
+
// Route 6: Standard Known Binary Files (With deep-scan injection defenses)
|
|
273
|
+
const signatures = BINARY_SIGNATURES[extension];
|
|
274
|
+
if (signatures) {
|
|
275
|
+
const isHeaderValid = hasSignature(header, signatures);
|
|
276
|
+
if (!isHeaderValid)
|
|
277
|
+
return false;
|
|
278
|
+
// Deep scanning files likely to hide EXIF/steganography payloads
|
|
279
|
+
if (['jpg', 'jpeg', 'png', 'gif', 'bmp'].includes(extension)) {
|
|
280
|
+
const fullFileBuffer = await readFileChunk(file);
|
|
281
|
+
if (!fullFileBuffer)
|
|
282
|
+
return false;
|
|
283
|
+
if (containsEmbeddedScripts(fullFileBuffer)) {
|
|
284
|
+
console.warn('Security Alert: Malicious embedded script tags found inside file binary.');
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
// Route 7: Text-Based Documents
|
|
291
|
+
if (TEXT_EXTENSIONS.includes(extension)) {
|
|
292
|
+
return isTextFileValid(file, buffer, extension);
|
|
293
|
+
}
|
|
294
|
+
// Default fallback for unlisted extensions
|
|
295
|
+
return true;
|
|
296
|
+
};
|
|
297
|
+
//# sourceMappingURL=validateFileContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateFileContent.js","sourceRoot":"","sources":["../../../src/utils/validateFileContent/validateFileContent.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,oCAAoC;AACpC,6CAA6C;AAE7C,MAAM,aAAa,GAA2B;IAC5C,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;CACZ,CAAC;AAEF,MAAM,iBAAiB,GAA6B;IAClD,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;IAC/B,GAAG,EAAE,CAAC,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,QAAQ,CAAC;IACf,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;IAC7B,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,UAAU,CAAC;IACjB,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IACzC,IAAI,EAAE,CAAC,cAAc,CAAC;IACtB,EAAE,EAAE,CAAC,MAAM,CAAC;IACZ,GAAG,EAAE,CAAC,MAAM,CAAC;IACb,GAAG,EAAE,CAAC,MAAM,CAAC;CACd,CAAC;AAEF,wDAAwD;AACxD,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;AAEnE,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,eAAe,GAAG;IACtB,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,IAAI;IACJ,MAAM;IACN,KAAK;IACL,IAAI;IACJ,KAAK;IACL,YAAY;IACZ,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;CACN,CAAC;AAEF,kEAAkE;AAClE,MAAM,yBAAyB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACnD,mCAAmC;AACnC,MAAM,+BAA+B,GAAG;IACtC,KAAK;IACL,KAAK;IACL,KAAK;IACL,IAAI;IACJ,KAAK;IACL,OAAO;IACP,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;CACN,CAAC;AAEF,+EAA+E;AAC/E,MAAM,yBAAyB,GAAG;IAChC,SAAS,EAAE,4BAA4B;IACvC,OAAO,EAAE,sBAAsB;IAC/B,aAAa,EAAE,iDAAiD;IAChE,sBAAsB,EAAE,+BAA+B;IACvD,qBAAqB,EAAE,oCAAoC;IAC3D,YAAY,EAAE,0CAA0C;CACzD,CAAC;AAEF,6CAA6C;AAC7C,sBAAsB;AACtB,6CAA6C;AAE7C,MAAM,sBAAsB,GAAG,CAAC,SAAkB,EAAsB,EAAE;IACxE,OAAO,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CACpB,IAAU,EACV,WAAoB,EACQ,EAAE;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE;YACtB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,MAAqB,CAAC,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAAkB,EAAU,EAAE,CACjD,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEzE,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,UAAoB,EAAW,EAAE,CACrE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,gBAAgB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC7D,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAkB,EAAiB,EAAE;IAC9D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEvC,IAAI,CAAC;QACH,OAAO,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,uBAAuB,GAAG,CAAC,MAAkB,EAAW,EAAE;IAC9D,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,CAAC,CAAC;AAEF,6CAA6C;AAC7C,0BAA0B;AAC1B,6CAA6C;AAE7C,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAW,EAAE;IACjD,MAAM,eAAe,GAAG,IAAI;SACzB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAEnD,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,OAAO,CACL,IAAI,KAAK,KAAK;YACd,IAAI,KAAK,KAAK;YACd,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAW,EAAE,CAC3D,+DAA+D,CAAC,IAAI,CAClE,IAAI,CAAC,IAAI,EAAE,CACZ,CAAC;AAEJ,6CAA6C;AAC7C,iCAAiC;AACjC,6CAA6C;AAE7C,MAAM,eAAe,GAAG,KAAK,EAC3B,IAAU,EACV,YAAwB,EACxB,SAAiB,EACC,EAAE;IACpB,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAC5C,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAE1D,mCAAmC;IACnC,IACE,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC;QAC3C,iBAAiB,KAAK,IAAI;QAC1B,0CAA0C,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAClE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAE/C,kCAAkC;IAClC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,0BAA0B,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5D,yCAAyC;IACzC,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,IAAI,GAAG,yBAAyB,EAAE,CAAC;YAC1C,mFAAmF;YACnF,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QAC/C,OAAO,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,6BAA6B,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;IAED,0BAA0B;IAC1B,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QAChD,OAAO,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IAED,oDAAoD;IACpD,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,6CAA6C;AAC7C,4BAA4B;AAC5B,6CAA6C;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,IAAU,EAAoB,EAAE;IACxE,6BAA6B;IAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAE3B,uEAAuE;IACvE,8EAA8E;IAC9E,iGAAiG;IACjG,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CACV,oEAAoE,CACrE,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2FAA2F;IAC3F,2CAA2C;IAC3C,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,kFAAkF;QAClF,MAAM,mBAAmB,GAAG,SAAS;aAClC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aACZ,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,+BAA+B,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,8CAA8C;IAC9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEnC,yEAAyE;IACzE,uFAAuF;IACvF,IAAI,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7C,gFAAgF;QAChF,IACE,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,EAAE,CAAC;YACjD,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,EAAE,CAAC,EACjD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,CAAC;QACF,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,wBAAwB;IACxB,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CACjE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CACvB,CAAC;QACF,OAAO,SAAS,KAAK,OAAO,CAAC;IAC/B,CAAC;IAED,2BAA2B;IAC3B,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAChE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CACpB,CAAC;QACF,OAAO,YAAY,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,QAAQ,KAAK,MAAM,CAAC;IAClF,CAAC;IAED,2BAA2B;IAC3B,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAClE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CACnB,CAAC;QACF,OAAO,UAAU,KAAK,WAAW,CAAC;IACpC,CAAC;IAED,2EAA2E;IAC3E,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QAEjC,iEAAiE;QACjE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,MAAM,cAAc,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc;gBAAE,OAAO,KAAK,CAAC;YAElC,IAAI,uBAAuB,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC5C,OAAO,CAAC,IAAI,CACV,0EAA0E,CAC3E,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,IAAI,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,2CAA2C;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|