pw-js-world 0.4.5-dev.5a8cfff → 0.4.5-dev.85d024b

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,687 +0,0 @@
1
- /**
2
- * CREDIT: Anatoly for making this Buffer Reader so I don't have to!
3
- * Source: https://github.com/Anatoly03/pixelwalker.js/blob/9bb3c7e39a45006086a2abae8c515599bd3db835/src/util/buffer-reader.ts
4
- * License: ISC
5
- */
6
- /**
7
- * Data during the communication in the process is dynamic
8
- * typed. Every entry is followed by a byte identifying the
9
- * type, followed by data. The type header is noted by its'
10
- * 7-bit notation.
11
- */
12
- export var ComponentTypeHeader;
13
- (function (ComponentTypeHeader) {
14
- ComponentTypeHeader[ComponentTypeHeader["String"] = 0] = "String";
15
- ComponentTypeHeader[ComponentTypeHeader["Byte"] = 1] = "Byte";
16
- ComponentTypeHeader[ComponentTypeHeader["Int16"] = 2] = "Int16";
17
- ComponentTypeHeader[ComponentTypeHeader["Int32"] = 3] = "Int32";
18
- ComponentTypeHeader[ComponentTypeHeader["Int64"] = 4] = "Int64";
19
- ComponentTypeHeader[ComponentTypeHeader["Float"] = 5] = "Float";
20
- ComponentTypeHeader[ComponentTypeHeader["Double"] = 6] = "Double";
21
- ComponentTypeHeader[ComponentTypeHeader["Boolean"] = 7] = "Boolean";
22
- ComponentTypeHeader[ComponentTypeHeader["ByteArray"] = 8] = "ByteArray";
23
- ComponentTypeHeader[ComponentTypeHeader["UInt32"] = 9] = "UInt32";
24
- })(ComponentTypeHeader || (ComponentTypeHeader = {}));
25
- /**
26
- * A Buffer reader is a special buffer extension made to perform
27
- * game-specific tasks in the field of communication.
28
- *
29
- * @implements Buffer
30
- */
31
- export default class BufferReader {
32
- /**
33
- *
34
- */
35
- constructor(buffer) {
36
- this.offset = 0;
37
- this.buffer = buffer;
38
- }
39
- //
40
- //
41
- // Static Methods
42
- //
43
- //
44
- /**
45
- *
46
- */
47
- static from(from) {
48
- if (from instanceof Buffer)
49
- return new BufferReader(from);
50
- return new BufferReader(Buffer.from(from));
51
- }
52
- /**
53
- *
54
- */
55
- static alloc(amount) {
56
- return BufferReader.from(Buffer.alloc(amount));
57
- }
58
- //
59
- //
60
- // Message Component Types
61
- //
62
- //
63
- /**
64
- * @param {string} value
65
- * @returns {Buffer}
66
- */
67
- static String(value = '') {
68
- const stringByteLen = Buffer.byteLength(value);
69
- const lengthByteCount = this.length7BitInt(stringByteLen);
70
- const buffer = BufferReader.alloc(1 + lengthByteCount + stringByteLen);
71
- buffer.writeUInt8(ComponentTypeHeader.String);
72
- buffer.write7BitInt(stringByteLen);
73
- buffer.write(value);
74
- return buffer.toBuffer();
75
- }
76
- /**
77
- * @param {number} value
78
- * @returns {Buffer}
79
- */
80
- static Byte(value = 0) {
81
- const buffer = BufferReader.alloc(2);
82
- buffer.writeUInt8(ComponentTypeHeader.Byte);
83
- buffer.writeUInt8(value);
84
- return buffer.toBuffer();
85
- }
86
- /**
87
- * @param {number} value
88
- * @returns {Buffer}
89
- */
90
- static Int16(value = 0) {
91
- const buffer = BufferReader.alloc(3);
92
- buffer.writeUInt8(ComponentTypeHeader.Int16);
93
- buffer.writeInt16BE(value);
94
- return buffer.toBuffer();
95
- }
96
- /**
97
- * @param {number} value
98
- * @returns {Buffer}
99
- */
100
- static Int32(value = 0) {
101
- const buffer = BufferReader.alloc(5);
102
- buffer.writeUInt8(ComponentTypeHeader.Int32);
103
- buffer.writeInt32BE(value);
104
- return buffer.toBuffer();
105
- }
106
- /**
107
- * @param {bigint} value
108
- * @returns {Buffer}
109
- */
110
- static Int64(value = BigInt(0).valueOf()) {
111
- const buffer = BufferReader.alloc(9);
112
- buffer.writeUInt8(ComponentTypeHeader.Int64);
113
- buffer.writeBigInt64BE(value);
114
- return buffer.toBuffer();
115
- }
116
- /**
117
- * @param {number} value
118
- * @returns {Buffer}
119
- */
120
- static Float(value = 0) {
121
- const buffer = BufferReader.alloc(5);
122
- buffer.writeUInt8(ComponentTypeHeader.Float);
123
- buffer.writeFloatBE(value);
124
- return buffer.toBuffer();
125
- }
126
- /**
127
- * @param {number} value
128
- * @returns {Buffer}
129
- */
130
- static Double(value = 0) {
131
- const buffer = BufferReader.alloc(9);
132
- buffer.writeUInt8(ComponentTypeHeader.Double);
133
- buffer.writeDoubleBE(value);
134
- return buffer.toBuffer();
135
- }
136
- /**
137
- * @param {boolean} value
138
- * @returns {Buffer}
139
- */
140
- static Boolean(value = false) {
141
- const buffer = BufferReader.alloc(2);
142
- buffer.writeUInt8(ComponentTypeHeader.Boolean);
143
- buffer.writeUInt8(value ? 1 : 0);
144
- return buffer.toBuffer();
145
- }
146
- /**
147
- * @param {Uint8Array} buffer
148
- * @returns {Buffer}
149
- */
150
- static ByteArray(buffer = Buffer.from([0])) {
151
- const bufferLength = Buffer.byteLength(buffer);
152
- const prefix = BufferReader.alloc(2);
153
- prefix.writeUInt8(ComponentTypeHeader.ByteArray);
154
- prefix.writeUInt8(bufferLength);
155
- return Buffer.concat([prefix.toBuffer(), buffer]);
156
- }
157
- /**
158
- * @param {number} value
159
- * @returns {Buffer}
160
- */
161
- static UInt32(value = 0) {
162
- const buffer = BufferReader.alloc(5);
163
- buffer.writeUInt8(ComponentTypeHeader.UInt32);
164
- buffer.writeUInt32BE(value);
165
- return buffer.toBuffer();
166
- }
167
- /**
168
- * @param {number} value
169
- * @returns {Buffer}
170
- */
171
- static Magic(value) {
172
- if (value === undefined)
173
- throw new Error('Received undefined magic byte');
174
- return Buffer.from([value]);
175
- }
176
- /**
177
- * @param {number} value
178
- * @returns {Buffer}
179
- */
180
- static Bit7(value = 0) {
181
- const buffer = BufferReader.alloc(this.length7BitInt(value));
182
- buffer.write7BitInt(value);
183
- return buffer.toBuffer();
184
- }
185
- /**
186
- * @param tt
187
- * @param value
188
- */
189
- static Dynamic(tt, value) {
190
- switch (tt) {
191
- case ComponentTypeHeader.String:
192
- return this.String(value);
193
- case ComponentTypeHeader.Byte:
194
- return this.Byte(value);
195
- case ComponentTypeHeader.Int16:
196
- return this.Int16(value);
197
- case ComponentTypeHeader.Int32:
198
- return this.Int32(value);
199
- case ComponentTypeHeader.Int64:
200
- return this.Int64(value);
201
- case ComponentTypeHeader.Float:
202
- return this.Float(value);
203
- case ComponentTypeHeader.Double:
204
- return this.Double(value);
205
- case ComponentTypeHeader.Boolean:
206
- return this.Boolean(value);
207
- case ComponentTypeHeader.ByteArray:
208
- return this.ByteArray(value);
209
- case ComponentTypeHeader.UInt32:
210
- return this.UInt32(value);
211
- }
212
- }
213
- //
214
- //
215
- // Overrides
216
- //
217
- //
218
- /**
219
- *
220
- */
221
- get length() {
222
- return this.buffer.length - this.offset;
223
- }
224
- /**
225
- *
226
- */
227
- subarray(start = this.offset, end = this.length) {
228
- return new BufferReader(this.buffer.subarray(start, this.offset + end));
229
- }
230
- /**
231
- *
232
- */
233
- write(value) {
234
- return (this.offset = this.buffer.write(value, this.offset));
235
- }
236
- /**
237
- *
238
- */
239
- writeBigInt64BE(value) {
240
- return (this.offset = this.buffer.writeBigInt64BE(value, this.offset));
241
- }
242
- /**
243
- *
244
- */
245
- writeBigInt64LE(value) {
246
- return (this.offset = this.buffer.writeBigInt64LE(value, this.offset));
247
- }
248
- /**
249
- *
250
- */
251
- writeUInt8(value) {
252
- return (this.offset = this.buffer.writeUInt8(value, this.offset));
253
- }
254
- /**
255
- *
256
- */
257
- writeUInt16LE(value) {
258
- return (this.offset = this.buffer.writeUInt16LE(value, this.offset));
259
- }
260
- /**
261
- *
262
- */
263
- writeUInt16BE(value) {
264
- return (this.offset = this.buffer.writeUInt16BE(value, this.offset));
265
- }
266
- /**
267
- *
268
- */
269
- writeUInt32LE(value) {
270
- return (this.offset = this.buffer.writeUInt32LE(value, this.offset));
271
- }
272
- /**
273
- *
274
- */
275
- writeUInt32BE(value) {
276
- return (this.offset = this.buffer.writeUInt32BE(value, this.offset));
277
- }
278
- /**
279
- *
280
- */
281
- writeInt8(value) {
282
- return (this.offset = this.buffer.writeInt8(value, this.offset));
283
- }
284
- /**
285
- *
286
- */
287
- writeInt16LE(value) {
288
- return (this.offset = this.buffer.writeInt16LE(value, this.offset));
289
- }
290
- /**
291
- *
292
- */
293
- writeInt16BE(value) {
294
- return (this.offset = this.buffer.writeInt16BE(value, this.offset));
295
- }
296
- /**
297
- *
298
- */
299
- writeInt32LE(value) {
300
- return (this.offset = this.buffer.writeInt32LE(value, this.offset));
301
- }
302
- /**
303
- *
304
- */
305
- writeInt32BE(value) {
306
- return (this.offset = this.buffer.writeInt32BE(value, this.offset));
307
- }
308
- /**
309
- *
310
- */
311
- writeFloatLE(value) {
312
- return (this.offset = this.buffer.writeFloatLE(value, this.offset));
313
- }
314
- /**
315
- *
316
- */
317
- writeFloatBE(value) {
318
- return (this.offset = this.buffer.writeFloatBE(value, this.offset));
319
- }
320
- /**
321
- *
322
- */
323
- writeDoubleLE(value) {
324
- return (this.offset = this.buffer.writeDoubleLE(value, this.offset));
325
- }
326
- /**
327
- *
328
- */
329
- writeDoubleBE(value) {
330
- return (this.offset = this.buffer.writeDoubleBE(value, this.offset));
331
- }
332
- /**
333
- *
334
- */
335
- readBigUInt64BE() {
336
- const tmp = this.buffer.readBigUInt64BE(this.offset);
337
- this.offset += 8;
338
- return tmp;
339
- }
340
- /**
341
- *
342
- */
343
- readBigUInt64LE() {
344
- const tmp = this.buffer.readBigUInt64LE(this.offset);
345
- this.offset += 8;
346
- return tmp;
347
- }
348
- /**
349
- *
350
- */
351
- readBigInt64BE() {
352
- const tmp = this.buffer.readBigInt64BE(this.offset);
353
- this.offset += 8;
354
- return tmp;
355
- }
356
- /**
357
- *
358
- */
359
- readBigInt64LE() {
360
- const tmp = this.buffer.readBigInt64LE(this.offset);
361
- this.offset += 8;
362
- return tmp;
363
- }
364
- // public readUIntLE() {
365
- // const tmp = this.buffer.readUIntLE(this.offset);
366
- // this.offset += 1;
367
- // return tmp;
368
- // }
369
- // public readUIntBE() {
370
- // const tmp = this.buffer.readUIntBE(this.offset);
371
- // this.offset += 1;
372
- // return tmp;
373
- // }
374
- // public readIntLE() {
375
- // const tmp = this.buffer.readIntLE(this.offset);
376
- // this.offset += 1;
377
- // return tmp;
378
- // }
379
- // public readIntBE() {
380
- // const tmp = this.buffer.readIntBE(this.offset);
381
- // this.offset += 1;
382
- // return tmp;
383
- // }
384
- /**
385
- *
386
- */
387
- expectUInt8(value) {
388
- const tmp = this.buffer.readUInt8(this.offset);
389
- this.offset += 1;
390
- if (tmp !== value)
391
- throw new Error(`Expected ${value} but got ${tmp}`);
392
- return tmp;
393
- }
394
- /**
395
- *
396
- */
397
- readUInt8() {
398
- const tmp = this.buffer.readUInt8(this.offset);
399
- this.offset += 1;
400
- return tmp;
401
- }
402
- /**
403
- *
404
- */
405
- readUInt16LE() {
406
- const tmp = this.buffer.readUInt16LE(this.offset);
407
- this.offset += 2;
408
- return tmp;
409
- }
410
- /**
411
- *
412
- */
413
- readUInt16BE() {
414
- const tmp = this.buffer.readUInt16BE(this.offset);
415
- this.offset += 2;
416
- return tmp;
417
- }
418
- /**
419
- *
420
- */
421
- readUInt32LE() {
422
- const tmp = this.buffer.readUInt32LE(this.offset);
423
- this.offset += 4;
424
- return tmp;
425
- }
426
- /**
427
- *
428
- */
429
- readUInt32BE() {
430
- const tmp = this.buffer.readUInt32BE(this.offset);
431
- this.offset += 4;
432
- return tmp;
433
- }
434
- /**
435
- *
436
- */
437
- readInt8() {
438
- const tmp = this.buffer.readInt8(this.offset);
439
- this.offset += 1;
440
- return tmp;
441
- }
442
- /**
443
- *
444
- */
445
- readInt16LE() {
446
- const tmp = this.buffer.readInt16LE(this.offset);
447
- this.offset += 2;
448
- return tmp;
449
- }
450
- /**
451
- *
452
- */
453
- readInt16BE() {
454
- const tmp = this.buffer.readInt16BE(this.offset);
455
- this.offset += 2;
456
- return tmp;
457
- }
458
- /**
459
- *
460
- */
461
- readInt32LE() {
462
- const tmp = this.buffer.readInt32LE(this.offset);
463
- this.offset += 4;
464
- return tmp;
465
- }
466
- /**
467
- *
468
- */
469
- readInt32BE() {
470
- const tmp = this.buffer.readInt32BE(this.offset);
471
- this.offset += 4;
472
- return tmp;
473
- }
474
- /**
475
- *
476
- */
477
- readFloatLE() {
478
- const tmp = this.buffer.readFloatLE(this.offset);
479
- this.offset += 4;
480
- return tmp;
481
- }
482
- /**
483
- *
484
- */
485
- readFloatBE() {
486
- const tmp = this.buffer.readFloatBE(this.offset);
487
- this.offset += 4;
488
- return tmp;
489
- }
490
- /**
491
- *
492
- */
493
- readDoubleLE() {
494
- const tmp = this.buffer.readDoubleLE(this.offset);
495
- this.offset += 8;
496
- return tmp;
497
- }
498
- /**
499
- *
500
- */
501
- readDoubleBE() {
502
- const tmp = this.buffer.readDoubleBE(this.offset);
503
- this.offset += 8;
504
- return tmp;
505
- }
506
- read(tt, little = true) {
507
- switch (tt) {
508
- case ComponentTypeHeader.String:
509
- return this.readDynamicBuffer().toString("ascii");
510
- case ComponentTypeHeader.Byte:
511
- return this.readUInt8();
512
- case ComponentTypeHeader.Int16:
513
- return little ? this.readInt16LE() : this.readInt16BE();
514
- case ComponentTypeHeader.Int32:
515
- return little ? this.readInt32LE() : this.readInt32BE();
516
- case ComponentTypeHeader.Int64:
517
- return little ? this.readBigInt64LE() : this.readBigInt64BE();
518
- case ComponentTypeHeader.Float:
519
- return little ? this.readFloatLE() : this.readFloatBE();
520
- case ComponentTypeHeader.Double:
521
- return little ? this.readDoubleLE() : this.readDoubleBE();
522
- case ComponentTypeHeader.Boolean:
523
- return !!this.readUInt8();
524
- case ComponentTypeHeader.ByteArray:
525
- return this.readDynamicBuffer();
526
- case ComponentTypeHeader.UInt32:
527
- return little ? this.readUInt32LE() : this.readUInt32BE();
528
- }
529
- }
530
- //
531
- //
532
- // Methods
533
- //
534
- //
535
- /**
536
- *
537
- */
538
- toBuffer() {
539
- return this.buffer;
540
- }
541
- /**
542
- * https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer
543
- */
544
- toArrayBuffer() {
545
- const arrayBuffer = new ArrayBuffer(this.length);
546
- const view = new Uint8Array(arrayBuffer);
547
- for (let i = 0; i < this.length; ++i) {
548
- view[i] = this.buffer[i];
549
- }
550
- return arrayBuffer;
551
- }
552
- /**
553
- *
554
- */
555
- at(idx) {
556
- return this.buffer[idx];
557
- }
558
- /**
559
- * Advanced the buffer reader by pffset.
560
- */
561
- advanceOffset(relativeOffset = 1) {
562
- this.offset += relativeOffset;
563
- return this;
564
- }
565
- /**
566
- * This function reads how many bytes a normal integer would take
567
- * as a 7-bit number
568
- *
569
- * 1(000 0001) 0(111 1110)
570
- */
571
- static length7BitInt(value) {
572
- let size = 0;
573
- do
574
- (value >>= 7), size++;
575
- while (value > 0);
576
- return size;
577
- }
578
- /**
579
- * Reads in an integer in 7-bit notation. A 7-bit integer
580
- * encoding splits a number into a variable size of bits,
581
- * in which the first bit is set while bytes are following.
582
- *
583
- * @example
584
- *
585
- * ```
586
- * 1111 0000 1010 1010 1000 0000 0000 0001 Reading In
587
- * ^--- ---- ^--- ---- ^--- ---- ^--- ----
588
- * 111 0000 010 1010 000 0000 000 0001 Writing Out
589
- * ```
590
- */
591
- read7BitInt() {
592
- let value = 0, shift = 0, byte = 0xff;
593
- while (byte & 0x80) {
594
- byte = this.readUInt8();
595
- value |= (byte & 0x7f) << shift;
596
- shift += 7;
597
- }
598
- return value;
599
- }
600
- /**
601
- * Write a normal integer value into buffer at offset.
602
- */
603
- write7BitInt(value) {
604
- while (value >= 128) {
605
- this.writeUInt8((value & 127) | 128);
606
- value >>= 7;
607
- }
608
- this.writeUInt8(value);
609
- }
610
- /**
611
- * Reads a dynamic buffer which is prepended by its' length
612
- * in 7-bit encoding.
613
- */
614
- readDynamicBuffer() {
615
- const length = this.read7BitInt();
616
- const value = this.subarray(this.offset, length);
617
- this.offset += length;
618
- return value.toBuffer();
619
- }
620
- /**
621
- * Append a buffer to the current buffer. Asserts the cursor
622
- * to be at the end of the current buffer.
623
- */
624
- append(buffer) {
625
- if (this.offset !== this.length - 1)
626
- throw new Error("Cursor hasn't finished reading yet.");
627
- this.buffer = Buffer.concat([this.buffer, buffer]);
628
- return this;
629
- }
630
- /**
631
- * Keep Deserializing the buffer for typed data until
632
- * you reach the end of the buffer. Typed data consists
633
- * of a type indicator in 7-bit-encoding and data following
634
- * accordingly.
635
- */
636
- deserialize() {
637
- const arr = [];
638
- while (this.length > 0) {
639
- const type = this.read7BitInt();
640
- switch (type) {
641
- case ComponentTypeHeader.String:
642
- arr.push(this.readDynamicBuffer().toString("ascii"));
643
- break;
644
- case ComponentTypeHeader.Byte:
645
- arr.push(this.readUInt8());
646
- break;
647
- case ComponentTypeHeader.Int16: // = Int16 (short)
648
- arr.push(this.readInt16BE());
649
- break;
650
- case ComponentTypeHeader.Int32: // = Int32
651
- arr.push(this.readInt32BE());
652
- break;
653
- case ComponentTypeHeader.Int64:
654
- arr.push(this.readBigInt64BE());
655
- break;
656
- case ComponentTypeHeader.Float:
657
- arr.push(this.readFloatBE());
658
- break;
659
- case ComponentTypeHeader.Double:
660
- arr.push(this.readDoubleBE());
661
- break;
662
- case ComponentTypeHeader.Boolean:
663
- arr.push(!!this.readUInt8()); // !! is truthy
664
- break;
665
- case ComponentTypeHeader.ByteArray:
666
- arr.push(this.readDynamicBuffer());
667
- break;
668
- case ComponentTypeHeader.UInt32:
669
- arr.push(this.readUInt32BE());
670
- break;
671
- default:
672
- throw new Error(`While serializing a buffer for data, an unexpected type 0x${type.toString(16)} was read. Expected one of 0-8`);
673
- }
674
- }
675
- return arr;
676
- }
677
- [Symbol.for("nodejs.util.inspect.custom")]() {
678
- let s = '<BufferReader';
679
- let copy = BufferReader.from(this.buffer);
680
- copy.offset = this.offset;
681
- for (let i = 0; i < 20 && this.offset + i < this.length - 1; i++) {
682
- s += ' ' + copy.readUInt8().toString(16).padStart(2, '0');
683
- }
684
- return s + '>';
685
- }
686
- }
687
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVmZmVyUmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL0J1ZmZlclJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUg7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQU4sSUFBWSxtQkFXWDtBQVhELFdBQVksbUJBQW1CO0lBQzNCLGlFQUFVLENBQUE7SUFDViw2REFBUSxDQUFBO0lBQ1IsK0RBQVMsQ0FBQTtJQUNULCtEQUFTLENBQUE7SUFDVCwrREFBUyxDQUFBO0lBQ1QsK0RBQVMsQ0FBQTtJQUNULGlFQUFVLENBQUE7SUFDVixtRUFBVyxDQUFBO0lBQ1gsdUVBQWEsQ0FBQTtJQUNiLGlFQUFVLENBQUE7QUFDZCxDQUFDLEVBWFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQVc5QjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFZO0lBSTdCOztPQUVHO0lBQ0gsWUFBb0IsTUFBYztRQUwxQixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBTXZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxFQUFFO0lBQ0YsRUFBRTtJQUNGLGlCQUFpQjtJQUNqQixFQUFFO0lBQ0YsRUFBRTtJQUVGOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUF5QjtRQUN4QyxJQUFJLElBQUksWUFBWSxNQUFNO1lBQUUsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQWM7UUFDOUIsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsRUFB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