fast-is-equal 1.2.5 → 1.2.6
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/dist/index.d.ts +1 -0
- package/dist/index.js +425 -0
- package/dist/index.js.map +1 -0
- package/package.json +2 -1
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fastIsEqual(a: any, b: any): boolean;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
// Pre-defined constants to avoid repeated string comparisons
|
|
2
|
+
const TYPEOF_OBJECT = 'object';
|
|
3
|
+
const TYPEOF_FUNCTION = 'function';
|
|
4
|
+
const TYPEOF_NUMBER = 'number';
|
|
5
|
+
const TYPEOF_STRING = 'string';
|
|
6
|
+
const TYPEOF_BOOLEAN = 'boolean';
|
|
7
|
+
const TYPEOF_SYMBOL = 'symbol';
|
|
8
|
+
const TYPEOF_BIGINT = 'bigint';
|
|
9
|
+
// Inline NaN check for maximum speed
|
|
10
|
+
const isNaN = Number.isNaN;
|
|
11
|
+
// Cache for constructor checks
|
|
12
|
+
const dateConstructor = Date;
|
|
13
|
+
const regExpConstructor = RegExp;
|
|
14
|
+
const mapConstructor = Map;
|
|
15
|
+
const setConstructor = Set;
|
|
16
|
+
const arrayBufferConstructor = ArrayBuffer;
|
|
17
|
+
const promiseConstructor = Promise;
|
|
18
|
+
const errorConstructor = Error;
|
|
19
|
+
const dataViewConstructor = DataView;
|
|
20
|
+
export function fastIsEqual(a, b) {
|
|
21
|
+
// Fast path for strict equality
|
|
22
|
+
if (a === b)
|
|
23
|
+
return true;
|
|
24
|
+
// Handle null/undefined early with single comparison
|
|
25
|
+
if (a == null || b == null)
|
|
26
|
+
return false;
|
|
27
|
+
// Get types once
|
|
28
|
+
const typeA = typeof a;
|
|
29
|
+
// Type mismatch = not equal (avoid second typeof if possible)
|
|
30
|
+
if (typeA === TYPEOF_NUMBER) {
|
|
31
|
+
// Optimize number comparison - avoid typeof b when possible
|
|
32
|
+
return typeof b === TYPEOF_NUMBER && isNaN(a) && isNaN(b);
|
|
33
|
+
}
|
|
34
|
+
if (typeA === TYPEOF_STRING || typeA === TYPEOF_BOOLEAN || typeA === TYPEOF_FUNCTION || typeA === TYPEOF_SYMBOL || typeA === TYPEOF_BIGINT) {
|
|
35
|
+
return false; // We know a !== b from first check
|
|
36
|
+
}
|
|
37
|
+
// Now check if b is also object
|
|
38
|
+
if (typeof b !== TYPEOF_OBJECT)
|
|
39
|
+
return false;
|
|
40
|
+
// At this point, we know both are objects
|
|
41
|
+
// Array check using fastest method
|
|
42
|
+
const aIsArray = Array.isArray(a);
|
|
43
|
+
if (aIsArray !== Array.isArray(b))
|
|
44
|
+
return false;
|
|
45
|
+
// Constructor check
|
|
46
|
+
const aCtor = a.constructor;
|
|
47
|
+
if (aCtor !== b.constructor)
|
|
48
|
+
return false;
|
|
49
|
+
// Fast path for arrays - highly optimized
|
|
50
|
+
if (aIsArray) {
|
|
51
|
+
const len = a.length;
|
|
52
|
+
if (len !== b.length)
|
|
53
|
+
return false;
|
|
54
|
+
// Empty arrays
|
|
55
|
+
if (len === 0)
|
|
56
|
+
return true;
|
|
57
|
+
// Small arrays - unroll loop with minimal overhead
|
|
58
|
+
if (len < 8) {
|
|
59
|
+
for (let i = 0; i < len; i++) {
|
|
60
|
+
// Sparse array check
|
|
61
|
+
const hasA = i in a;
|
|
62
|
+
if (hasA !== (i in b))
|
|
63
|
+
return false;
|
|
64
|
+
if (!hasA)
|
|
65
|
+
continue;
|
|
66
|
+
const elemA = a[i];
|
|
67
|
+
const elemB = b[i];
|
|
68
|
+
// Fast path for identical elements
|
|
69
|
+
if (elemA === elemB)
|
|
70
|
+
continue;
|
|
71
|
+
// Null check
|
|
72
|
+
if (elemA == null || elemB == null)
|
|
73
|
+
return false;
|
|
74
|
+
// Type check
|
|
75
|
+
const elemTypeA = typeof elemA;
|
|
76
|
+
if (elemTypeA !== typeof elemB)
|
|
77
|
+
return false;
|
|
78
|
+
// Number special case
|
|
79
|
+
if (elemTypeA === TYPEOF_NUMBER) {
|
|
80
|
+
if (!(isNaN(elemA) && isNaN(elemB)))
|
|
81
|
+
return false;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Primitive comparison
|
|
85
|
+
if (elemTypeA !== TYPEOF_OBJECT && elemTypeA !== TYPEOF_FUNCTION) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
// Need deep comparison - use minimal visited map
|
|
89
|
+
if (!deepEqual(elemA, elemB, new Map()))
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
// Large arrays - use deep equal
|
|
95
|
+
return deepEqual(a, b, new Map());
|
|
96
|
+
}
|
|
97
|
+
// Handle built-in types inline for common cases
|
|
98
|
+
if (aCtor === dateConstructor) {
|
|
99
|
+
return a.getTime() === b.getTime();
|
|
100
|
+
}
|
|
101
|
+
if (aCtor === regExpConstructor) {
|
|
102
|
+
return a.source === b.source && a.flags === b.flags;
|
|
103
|
+
}
|
|
104
|
+
// For all other objects, use deep comparison
|
|
105
|
+
return deepEqual(a, b, new Map());
|
|
106
|
+
}
|
|
107
|
+
function deepEqual(valA, valB, visited) {
|
|
108
|
+
// Fast equality check
|
|
109
|
+
if (valA === valB)
|
|
110
|
+
return true;
|
|
111
|
+
// Null check
|
|
112
|
+
if (valA == null || valB == null)
|
|
113
|
+
return false;
|
|
114
|
+
// Type check
|
|
115
|
+
const typeA = typeof valA;
|
|
116
|
+
if (typeA !== typeof valB)
|
|
117
|
+
return false;
|
|
118
|
+
// Primitive types
|
|
119
|
+
if (typeA === TYPEOF_NUMBER) {
|
|
120
|
+
return isNaN(valA) && isNaN(valB);
|
|
121
|
+
}
|
|
122
|
+
if (typeA !== TYPEOF_OBJECT && typeA !== TYPEOF_FUNCTION) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
// Check visited - optimized with single lookup
|
|
126
|
+
const visitedVal = visited.get(valA);
|
|
127
|
+
if (visitedVal !== undefined)
|
|
128
|
+
return visitedVal === valB;
|
|
129
|
+
if (visited.has(valB))
|
|
130
|
+
return false;
|
|
131
|
+
// Constructor check
|
|
132
|
+
const ctorA = valA.constructor;
|
|
133
|
+
if (ctorA !== valB.constructor)
|
|
134
|
+
return false;
|
|
135
|
+
// Date - inline comparison
|
|
136
|
+
if (ctorA === dateConstructor) {
|
|
137
|
+
return valA.getTime() === valB.getTime();
|
|
138
|
+
}
|
|
139
|
+
// RegExp - inline comparison
|
|
140
|
+
if (ctorA === regExpConstructor) {
|
|
141
|
+
return valA.source === valB.source && valA.flags === valB.flags;
|
|
142
|
+
}
|
|
143
|
+
// Promise and Error - reference equality only
|
|
144
|
+
if (ctorA === promiseConstructor || ctorA === errorConstructor) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
// Arrays - optimized
|
|
148
|
+
if (Array.isArray(valA)) {
|
|
149
|
+
const len = valA.length;
|
|
150
|
+
if (len !== valB.length)
|
|
151
|
+
return false;
|
|
152
|
+
// Mark visited early
|
|
153
|
+
visited.set(valA, valB);
|
|
154
|
+
visited.set(valB, valA);
|
|
155
|
+
// Empty arrays
|
|
156
|
+
if (len === 0)
|
|
157
|
+
return true;
|
|
158
|
+
// Optimized loop - check primitives first for early exit
|
|
159
|
+
for (let i = 0; i < len; i++) {
|
|
160
|
+
// Sparse array handling
|
|
161
|
+
const hasA = i in valA;
|
|
162
|
+
if (hasA !== (i in valB))
|
|
163
|
+
return false;
|
|
164
|
+
if (!hasA)
|
|
165
|
+
continue;
|
|
166
|
+
const elemA = valA[i];
|
|
167
|
+
const elemB = valB[i];
|
|
168
|
+
if (elemA !== elemB && !deepEqual(elemA, elemB, visited)) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
// Map - optimized
|
|
175
|
+
if (ctorA === mapConstructor) {
|
|
176
|
+
const mapA = valA;
|
|
177
|
+
const mapB = valB;
|
|
178
|
+
if (mapA.size !== mapB.size)
|
|
179
|
+
return false;
|
|
180
|
+
// Empty maps
|
|
181
|
+
if (mapA.size === 0)
|
|
182
|
+
return true;
|
|
183
|
+
visited.set(valA, valB);
|
|
184
|
+
visited.set(valB, valA);
|
|
185
|
+
// Optimized iteration
|
|
186
|
+
for (const [key, valueA] of mapA) {
|
|
187
|
+
// Fast primitive key path
|
|
188
|
+
const keyType = typeof key;
|
|
189
|
+
if (keyType !== TYPEOF_OBJECT && keyType !== TYPEOF_FUNCTION) {
|
|
190
|
+
if (!mapB.has(key))
|
|
191
|
+
return false;
|
|
192
|
+
const valueB = mapB.get(key);
|
|
193
|
+
if (valueA !== valueB && !deepEqual(valueA, valueB, visited)) {
|
|
194
|
+
return false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// Complex key - need full search
|
|
199
|
+
let found = false;
|
|
200
|
+
for (const [keyB, valueB] of mapB) {
|
|
201
|
+
if (deepEqual(key, keyB, visited) && deepEqual(valueA, valueB, visited)) {
|
|
202
|
+
found = true;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (!found)
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
// Set - highly optimized
|
|
213
|
+
if (ctorA === setConstructor) {
|
|
214
|
+
const setA = valA;
|
|
215
|
+
const setB = valB;
|
|
216
|
+
if (setA.size !== setB.size)
|
|
217
|
+
return false;
|
|
218
|
+
// Empty sets
|
|
219
|
+
if (setA.size === 0)
|
|
220
|
+
return true;
|
|
221
|
+
// Early visited check
|
|
222
|
+
visited.set(valA, valB);
|
|
223
|
+
visited.set(valB, valA);
|
|
224
|
+
// For equal sets, we can optimize by checking if all primitives exist first
|
|
225
|
+
let hasPrimitives = false;
|
|
226
|
+
let hasObjects = false;
|
|
227
|
+
// First pass - categorize and check primitives
|
|
228
|
+
for (const val of setA) {
|
|
229
|
+
const valType = typeof val;
|
|
230
|
+
if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
|
|
231
|
+
hasObjects = true;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
hasPrimitives = true;
|
|
235
|
+
if (!setB.has(val))
|
|
236
|
+
return false; // Fast fail for primitives
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// If only primitives, we're done
|
|
240
|
+
if (!hasObjects)
|
|
241
|
+
return true;
|
|
242
|
+
// For objects, create arrays for matching
|
|
243
|
+
const objectsA = [];
|
|
244
|
+
const objectsB = [];
|
|
245
|
+
for (const val of setA) {
|
|
246
|
+
const valType = typeof val;
|
|
247
|
+
if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
|
|
248
|
+
objectsA.push(val);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
for (const val of setB) {
|
|
252
|
+
const valType = typeof val;
|
|
253
|
+
if (valType === TYPEOF_OBJECT || valType === TYPEOF_FUNCTION) {
|
|
254
|
+
objectsB.push(val);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Match objects
|
|
258
|
+
const used = new Uint8Array(objectsB.length);
|
|
259
|
+
for (const valA of objectsA) {
|
|
260
|
+
let found = false;
|
|
261
|
+
for (let j = 0; j < objectsB.length; j++) {
|
|
262
|
+
if (!used[j]) {
|
|
263
|
+
const newVisited = new Map(visited);
|
|
264
|
+
if (deepEqual(valA, objectsB[j], newVisited)) {
|
|
265
|
+
used[j] = 1;
|
|
266
|
+
found = true;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (!found)
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
// ArrayBuffer - optimized
|
|
277
|
+
if (ctorA === arrayBufferConstructor) {
|
|
278
|
+
const bufA = valA;
|
|
279
|
+
const bufB = valB;
|
|
280
|
+
const byteLength = bufA.byteLength;
|
|
281
|
+
if (byteLength !== bufB.byteLength)
|
|
282
|
+
return false;
|
|
283
|
+
const viewA = new Uint8Array(bufA);
|
|
284
|
+
const viewB = new Uint8Array(bufB);
|
|
285
|
+
// Unroll loop for better performance on larger buffers
|
|
286
|
+
let i = 0;
|
|
287
|
+
const unrollEnd = byteLength - 7;
|
|
288
|
+
for (; i < unrollEnd; i += 8) {
|
|
289
|
+
if (viewA[i] !== viewB[i] ||
|
|
290
|
+
viewA[i + 1] !== viewB[i + 1] ||
|
|
291
|
+
viewA[i + 2] !== viewB[i + 2] ||
|
|
292
|
+
viewA[i + 3] !== viewB[i + 3] ||
|
|
293
|
+
viewA[i + 4] !== viewB[i + 4] ||
|
|
294
|
+
viewA[i + 5] !== viewB[i + 5] ||
|
|
295
|
+
viewA[i + 6] !== viewB[i + 6] ||
|
|
296
|
+
viewA[i + 7] !== viewB[i + 7]) {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Handle remaining bytes
|
|
301
|
+
for (; i < byteLength; i++) {
|
|
302
|
+
if (viewA[i] !== viewB[i])
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
// DataView - optimized
|
|
308
|
+
if (ctorA === dataViewConstructor) {
|
|
309
|
+
const viewA = valA;
|
|
310
|
+
const viewB = valB;
|
|
311
|
+
if (viewA.byteLength !== viewB.byteLength || viewA.byteOffset !== viewB.byteOffset) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
// Compare the underlying buffer data
|
|
315
|
+
for (let i = 0; i < viewA.byteLength; i++) {
|
|
316
|
+
if (viewA.getUint8(i) !== viewB.getUint8(i))
|
|
317
|
+
return false;
|
|
318
|
+
}
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
// TypedArrays
|
|
322
|
+
if (ArrayBuffer.isView(valA)) {
|
|
323
|
+
const arrA = valA;
|
|
324
|
+
const arrB = valB;
|
|
325
|
+
const len = arrA.length;
|
|
326
|
+
if (len !== arrB.length)
|
|
327
|
+
return false;
|
|
328
|
+
// Small typed arrays
|
|
329
|
+
if (len < 16) {
|
|
330
|
+
for (let i = 0; i < len; i++) {
|
|
331
|
+
if (arrA[i] !== arrB[i])
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
return true;
|
|
335
|
+
}
|
|
336
|
+
// Large typed arrays - unroll loop
|
|
337
|
+
let i = 0;
|
|
338
|
+
const unrollLen = len - 3;
|
|
339
|
+
for (; i < unrollLen; i += 4) {
|
|
340
|
+
if (arrA[i] !== arrB[i] ||
|
|
341
|
+
arrA[i + 1] !== arrB[i + 1] ||
|
|
342
|
+
arrA[i + 2] !== arrB[i + 2] ||
|
|
343
|
+
arrA[i + 3] !== arrB[i + 3]) {
|
|
344
|
+
return false;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// Handle remaining
|
|
348
|
+
for (; i < len; i++) {
|
|
349
|
+
if (arrA[i] !== arrB[i])
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
// Plain objects - highly optimized
|
|
355
|
+
visited.set(valA, valB);
|
|
356
|
+
visited.set(valB, valA);
|
|
357
|
+
// Get keys efficiently
|
|
358
|
+
const keysA = Object.keys(valA);
|
|
359
|
+
const keysALen = keysA.length;
|
|
360
|
+
// Quick length check
|
|
361
|
+
if (keysALen !== Object.keys(valB).length)
|
|
362
|
+
return false;
|
|
363
|
+
// Empty objects - check symbols
|
|
364
|
+
if (keysALen === 0) {
|
|
365
|
+
const checkSymbols = Object.getOwnPropertySymbols !== undefined;
|
|
366
|
+
if (checkSymbols) {
|
|
367
|
+
const symbolsA = Object.getOwnPropertySymbols(valA);
|
|
368
|
+
if (symbolsA.length !== Object.getOwnPropertySymbols(valB).length) {
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
// Check symbol properties
|
|
372
|
+
for (let i = 0; i < symbolsA.length; i++) {
|
|
373
|
+
const sym = symbolsA[i];
|
|
374
|
+
if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
// Optimized property checking - batch primitive checks
|
|
382
|
+
for (let i = 0; i < keysALen; i++) {
|
|
383
|
+
const key = keysA[i];
|
|
384
|
+
// Use in operator for fastest check
|
|
385
|
+
if (!(key in valB))
|
|
386
|
+
return false;
|
|
387
|
+
const propA = valA[key];
|
|
388
|
+
const propB = valB[key];
|
|
389
|
+
// Quick primitive equality check
|
|
390
|
+
if (propA !== propB) {
|
|
391
|
+
// Only do deep comparison if needed
|
|
392
|
+
const propTypeA = typeof propA;
|
|
393
|
+
if (propTypeA === TYPEOF_OBJECT || propTypeA === TYPEOF_FUNCTION) {
|
|
394
|
+
if (!deepEqual(propA, propB, visited))
|
|
395
|
+
return false;
|
|
396
|
+
}
|
|
397
|
+
else if (propTypeA === TYPEOF_NUMBER) {
|
|
398
|
+
if (!(isNaN(propA) && isNaN(propB)))
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Check for symbols only if likely to have them
|
|
407
|
+
const checkSymbols = Object.getOwnPropertySymbols !== undefined;
|
|
408
|
+
if (checkSymbols) {
|
|
409
|
+
const symbolsA = Object.getOwnPropertySymbols(valA);
|
|
410
|
+
if (symbolsA.length > 0) {
|
|
411
|
+
if (symbolsA.length !== Object.getOwnPropertySymbols(valB).length) {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
// Check symbol properties
|
|
415
|
+
for (let i = 0; i < symbolsA.length; i++) {
|
|
416
|
+
const sym = symbolsA[i];
|
|
417
|
+
if (!(sym in valB) || !deepEqual(valA[sym], valB[sym], visited)) {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return true;
|
|
424
|
+
}
|
|
425
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC;AAE/B,qCAAqC;AACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAE3B,+BAA+B;AAC/B,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,sBAAsB,GAAG,WAAW,CAAC;AAC3C,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAErC,MAAM,UAAU,WAAW,CAAC,CAAM,EAAE,CAAM;IACxC,gCAAgC;IAChC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzB,qDAAqD;IACrD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAEzC,iBAAiB;IACjB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC;IAEvB,8DAA8D;IAC9D,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,4DAA4D;QAC5D,OAAO,OAAO,CAAC,KAAK,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC3I,OAAO,KAAK,CAAC,CAAC,mCAAmC;IACnD,CAAC;IAED,gCAAgC;IAChC,IAAI,OAAO,CAAC,KAAK,aAAa;QAAE,OAAO,KAAK,CAAC;IAE7C,0CAA0C;IAE1C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhD,oBAAoB;IACpB,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC;IAC5B,IAAI,KAAK,KAAK,CAAC,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE1C,0CAA0C;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEnC,eAAe;QACf,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE3B,mDAAmD;QACnD,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,qBAAqB;gBACrB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBACpB,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACpC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBAEpB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEnB,mCAAmC;gBACnC,IAAI,KAAK,KAAK,KAAK;oBAAE,SAAS;gBAE9B,aAAa;gBACb,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAEjD,aAAa;gBACb,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;gBAC/B,IAAI,SAAS,KAAK,OAAO,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAE7C,sBAAsB;gBACtB,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;oBAChC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAClD,SAAS;gBACX,CAAC;gBAED,uBAAuB;gBACvB,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;oBACjE,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,iDAAiD;gBACjD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC;oBAAE,OAAO,KAAK,CAAC;YACxD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gCAAgC;QAChC,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,gDAAgD;IAChD,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAChC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAED,6CAA6C;IAC7C,OAAO,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS,CAAC,IAAS,EAAE,IAAS,EAAE,OAAsB;IAC7D,sBAAsB;IACtB,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE/B,aAAa;IACb,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAE/C,aAAa;IACb,MAAM,KAAK,GAAG,OAAO,IAAI,CAAC;IAC1B,IAAI,KAAK,KAAK,OAAO,IAAI;QAAE,OAAO,KAAK,CAAC;IAExC,kBAAkB;IAClB,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+CAA+C;IAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,UAAU,KAAK,IAAI,CAAC;IACzD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpC,oBAAoB;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE7C,2BAA2B;IAC3B,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;IAClE,CAAC;IAED,8CAA8C;IAC9C,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qBAAqB;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEtC,qBAAqB;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExB,eAAe;QACf,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE3B,yDAAyD;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,wBAAwB;YACxB,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;YACvB,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,SAAS;YAEpB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAqB,CAAC;QACnC,MAAM,IAAI,GAAG,IAAqB,CAAC;QAEnC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAE1C,aAAa;QACb,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExB,sBAAsB;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACjC,0BAA0B;YAC1B,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;YAC3B,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC7D,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,iCAAiC;gBACjC,IAAI,KAAK,GAAG,KAAK,CAAC;gBAClB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBAClC,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;wBACxE,KAAK,GAAG,IAAI,CAAC;wBACb,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAyB;IACzB,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAgB,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAgB,CAAC;QAE9B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAE1C,aAAa;QACb,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,sBAAsB;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAExB,4EAA4E;QAC5E,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,+CAA+C;QAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;YAC3B,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;gBAC7D,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,IAAI,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC,CAAC,2BAA2B;YAC/D,CAAC;QACH,CAAC;QAED,iCAAiC;QACjC,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,0CAA0C;QAC1C,MAAM,QAAQ,GAAU,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAU,EAAE,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;YAC3B,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC;YAC3B,IAAI,OAAO,KAAK,aAAa,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;gBAC7D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBACb,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;oBACpC,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;wBAC7C,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACZ,KAAK,GAAG,IAAI,CAAC;wBACb,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK,KAAK,sBAAsB,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAmB,CAAC;QACjC,MAAM,IAAI,GAAG,IAAmB,CAAC;QAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,UAAU,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAEjD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QAEnC,uDAAuD;QACvD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;QAEjC,OAAO,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;gBACvB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,OAAO,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC1C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uBAAuB;IACvB,IAAI,KAAK,KAAK,mBAAmB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAgB,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAgB,CAAC;QAC/B,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,EAAE,CAAC;YACnF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,qCAAqC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;IACd,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAW,CAAC;QACzB,MAAM,IAAI,GAAG,IAAW,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEtC,qBAAqB;QACrB,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YACxC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9B,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,mBAAmB;QACnB,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAExB,uBAAuB;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;IAE9B,qBAAqB;IACrB,IAAI,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAExD,gCAAgC;IAChC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,KAAK,SAAS,CAAC;QAChE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;oBAChE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,oCAAoC;QACpC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAExB,iCAAiC;QACjC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,oCAAoC;YACpC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;YAC/B,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;gBACjE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;oBAAE,OAAO,KAAK,CAAC;YACtD,CAAC;iBAAM,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;gBACvC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;oBAAE,OAAO,KAAK,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,gDAAgD;IAChD,MAAM,YAAY,GAAG,MAAM,CAAC,qBAAqB,KAAK,SAAS,CAAC;IAChE,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,0BAA0B;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;oBAChE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fast-is-equal",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6",
|
|
4
4
|
"description": "Blazing-fast equality checks, minus the baggage. A lean, standalone alternative to Lodash's isEqual—because speed matters.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deep-equal",
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"test": "jest",
|
|
53
53
|
"test:cov": "jest --coverage --maxWorkers=2 --coverageReporters=\"json-summary\" --coverageReporters=\"html\"",
|
|
54
54
|
"build": "rimraf dist && tsc",
|
|
55
|
+
"prepublishOnly": "npm run build",
|
|
55
56
|
"benchmark": "ts-node --project tsconfig.node.json benchmarks/fastIsEqual.benchmark.ts"
|
|
56
57
|
},
|
|
57
58
|
"files": [
|