PluginProbe ʕ •ᴥ•ʔ
Booking for Appointments and Events Calendar – Amelia / 2.4.4
Booking for Appointments and Events Calendar – Amelia v2.4.4
2.4.4 2.4.3 2.4.2 2.4.1 2.4 trunk 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.28 1.2.29 1.2.3 1.2.30 1.2.31 1.2.32 1.2.33 1.2.34 1.2.35 1.2.36 1.2.37 1.2.38 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 2.0 2.0.1 2.0.2 2.1 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.3
ameliabooking / vendor / bacon / bacon-qr-code / src / Common / Version.php
ameliabooking / vendor / bacon / bacon-qr-code / src / Common Last commit date
BitArray.php 8 months ago BitMatrix.php 8 months ago BitUtils.php 8 months ago CharacterSetEci.php 8 months ago EcBlock.php 8 months ago EcBlocks.php 8 months ago ErrorCorrectionLevel.php 8 months ago FormatInformation.php 8 months ago Mode.php 8 months ago ReedSolomonCodec.php 8 months ago Version.php 8 months ago
Version.php
597 lines
1 <?php
2 declare(strict_types = 1);
3
4 namespace BaconQrCode\Common;
5
6 use BaconQrCode\Exception\InvalidArgumentException;
7 use SplFixedArray;
8
9 /**
10 * Version representation.
11 */
12 final class Version
13 {
14 private const VERSION_DECODE_INFO = [
15 0x07c94,
16 0x085bc,
17 0x09a99,
18 0x0a4d3,
19 0x0bbf6,
20 0x0c762,
21 0x0d847,
22 0x0e60d,
23 0x0f928,
24 0x10b78,
25 0x1145d,
26 0x12a17,
27 0x13532,
28 0x149a6,
29 0x15683,
30 0x168c9,
31 0x177ec,
32 0x18ec4,
33 0x191e1,
34 0x1afab,
35 0x1b08e,
36 0x1cc1a,
37 0x1d33f,
38 0x1ed75,
39 0x1f250,
40 0x209d5,
41 0x216f0,
42 0x228ba,
43 0x2379f,
44 0x24b0b,
45 0x2542e,
46 0x26a64,
47 0x27541,
48 0x28c69,
49 ];
50
51 /**
52 * Version number of this version.
53 *
54 * @var int
55 */
56 private $versionNumber;
57
58 /**
59 * Alignment pattern centers.
60 *
61 * @var SplFixedArray
62 */
63 private $alignmentPatternCenters;
64
65 /**
66 * Error correction blocks.
67 *
68 * @var EcBlocks[]
69 */
70 private $ecBlocks;
71
72 /**
73 * Total number of codewords.
74 *
75 * @var int
76 */
77 private $totalCodewords;
78
79 /**
80 * Cached version instances.
81 *
82 * @var array<int, self>|null
83 */
84 private static $versions;
85
86 /**
87 * @param int[] $alignmentPatternCenters
88 */
89 private function __construct(
90 int $versionNumber,
91 array $alignmentPatternCenters,
92 EcBlocks ...$ecBlocks
93 ) {
94 $this->versionNumber = $versionNumber;
95 $this->alignmentPatternCenters = $alignmentPatternCenters;
96 $this->ecBlocks = $ecBlocks;
97
98 $totalCodewords = 0;
99 $ecCodewords = $ecBlocks[0]->getEcCodewordsPerBlock();
100
101 foreach ($ecBlocks[0]->getEcBlocks() as $ecBlock) {
102 $totalCodewords += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords);
103 }
104
105 $this->totalCodewords = $totalCodewords;
106 }
107
108 /**
109 * Returns the version number.
110 */
111 public function getVersionNumber() : int
112 {
113 return $this->versionNumber;
114 }
115
116 /**
117 * Returns the alignment pattern centers.
118 *
119 * @return int[]
120 */
121 public function getAlignmentPatternCenters() : array
122 {
123 return $this->alignmentPatternCenters;
124 }
125
126 /**
127 * Returns the total number of codewords.
128 */
129 public function getTotalCodewords() : int
130 {
131 return $this->totalCodewords;
132 }
133
134 /**
135 * Calculates the dimension for the current version.
136 */
137 public function getDimensionForVersion() : int
138 {
139 return 17 + 4 * $this->versionNumber;
140 }
141
142 /**
143 * Returns the number of EC blocks for a specific EC level.
144 */
145 public function getEcBlocksForLevel(ErrorCorrectionLevel $ecLevel) : EcBlocks
146 {
147 return $this->ecBlocks[$ecLevel->ordinal()];
148 }
149
150 /**
151 * Gets a provisional version number for a specific dimension.
152 *
153 * @throws InvalidArgumentException if dimension is not 1 mod 4
154 */
155 public static function getProvisionalVersionForDimension(int $dimension) : self
156 {
157 if (1 !== $dimension % 4) {
158 throw new InvalidArgumentException('Dimension is not 1 mod 4');
159 }
160
161 return self::getVersionForNumber(intdiv($dimension - 17, 4));
162 }
163
164 /**
165 * Gets a version instance for a specific version number.
166 *
167 * @throws InvalidArgumentException if version number is out of range
168 */
169 public static function getVersionForNumber(int $versionNumber) : self
170 {
171 if ($versionNumber < 1 || $versionNumber > 40) {
172 throw new InvalidArgumentException('Version number must be between 1 and 40');
173 }
174
175 return self::versions()[$versionNumber - 1];
176 }
177
178 /**
179 * Decodes version information from an integer and returns the version.
180 */
181 public static function decodeVersionInformation(int $versionBits) : ?self
182 {
183 $bestDifference = PHP_INT_MAX;
184 $bestVersion = 0;
185
186 foreach (self::VERSION_DECODE_INFO as $i => $targetVersion) {
187 if ($targetVersion === $versionBits) {
188 return self::getVersionForNumber($i + 7);
189 }
190
191 $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion);
192
193 if ($bitsDifference < $bestDifference) {
194 $bestVersion = $i + 7;
195 $bestDifference = $bitsDifference;
196 }
197 }
198
199 if ($bestDifference <= 3) {
200 return self::getVersionForNumber($bestVersion);
201 }
202
203 return null;
204 }
205
206 /**
207 * Builds the function pattern for the current version.
208 */
209 public function buildFunctionPattern() : BitMatrix
210 {
211 $dimension = $this->getDimensionForVersion();
212 $bitMatrix = new BitMatrix($dimension);
213
214 // Top left finder pattern + separator + format
215 $bitMatrix->setRegion(0, 0, 9, 9);
216 // Top right finder pattern + separator + format
217 $bitMatrix->setRegion($dimension - 8, 0, 8, 9);
218 // Bottom left finder pattern + separator + format
219 $bitMatrix->setRegion(0, $dimension - 8, 9, 8);
220
221 // Alignment patterns
222 $max = count($this->alignmentPatternCenters);
223
224 for ($x = 0; $x < $max; ++$x) {
225 $i = $this->alignmentPatternCenters[$x] - 2;
226
227 for ($y = 0; $y < $max; ++$y) {
228 if (($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)) {
229 // No alignment patterns near the three finder paterns
230 continue;
231 }
232
233 $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5);
234 }
235 }
236
237 // Vertical timing pattern
238 $bitMatrix->setRegion(6, 9, 1, $dimension - 17);
239 // Horizontal timing pattern
240 $bitMatrix->setRegion(9, 6, $dimension - 17, 1);
241
242 if ($this->versionNumber > 6) {
243 // Version info, top right
244 $bitMatrix->setRegion($dimension - 11, 0, 3, 6);
245 // Version info, bottom left
246 $bitMatrix->setRegion(0, $dimension - 11, 6, 3);
247 }
248
249 return $bitMatrix;
250 }
251
252 /**
253 * Returns a string representation for the version.
254 */
255 public function __toString() : string
256 {
257 return (string) $this->versionNumber;
258 }
259
260 /**
261 * Build and cache a specific version.
262 *
263 * See ISO 18004:2006 6.5.1 Table 9.
264 *
265 * @return array<int, self>
266 */
267 private static function versions() : array
268 {
269 if (null !== self::$versions) {
270 return self::$versions;
271 }
272
273 return self::$versions = [
274 new self(
275 1,
276 [],
277 new EcBlocks(7, new EcBlock(1, 19)),
278 new EcBlocks(10, new EcBlock(1, 16)),
279 new EcBlocks(13, new EcBlock(1, 13)),
280 new EcBlocks(17, new EcBlock(1, 9))
281 ),
282 new self(
283 2,
284 [6, 18],
285 new EcBlocks(10, new EcBlock(1, 34)),
286 new EcBlocks(16, new EcBlock(1, 28)),
287 new EcBlocks(22, new EcBlock(1, 22)),
288 new EcBlocks(28, new EcBlock(1, 16))
289 ),
290 new self(
291 3,
292 [6, 22],
293 new EcBlocks(15, new EcBlock(1, 55)),
294 new EcBlocks(26, new EcBlock(1, 44)),
295 new EcBlocks(18, new EcBlock(2, 17)),
296 new EcBlocks(22, new EcBlock(2, 13))
297 ),
298 new self(
299 4,
300 [6, 26],
301 new EcBlocks(20, new EcBlock(1, 80)),
302 new EcBlocks(18, new EcBlock(2, 32)),
303 new EcBlocks(26, new EcBlock(3, 24)),
304 new EcBlocks(16, new EcBlock(4, 9))
305 ),
306 new self(
307 5,
308 [6, 30],
309 new EcBlocks(26, new EcBlock(1, 108)),
310 new EcBlocks(24, new EcBlock(2, 43)),
311 new EcBlocks(18, new EcBlock(2, 15), new EcBlock(2, 16)),
312 new EcBlocks(22, new EcBlock(2, 11), new EcBlock(2, 12))
313 ),
314 new self(
315 6,
316 [6, 34],
317 new EcBlocks(18, new EcBlock(2, 68)),
318 new EcBlocks(16, new EcBlock(4, 27)),
319 new EcBlocks(24, new EcBlock(4, 19)),
320 new EcBlocks(28, new EcBlock(4, 15))
321 ),
322 new self(
323 7,
324 [6, 22, 38],
325 new EcBlocks(20, new EcBlock(2, 78)),
326 new EcBlocks(18, new EcBlock(4, 31)),
327 new EcBlocks(18, new EcBlock(2, 14), new EcBlock(4, 15)),
328 new EcBlocks(26, new EcBlock(4, 13), new EcBlock(1, 14))
329 ),
330 new self(
331 8,
332 [6, 24, 42],
333 new EcBlocks(24, new EcBlock(2, 97)),
334 new EcBlocks(22, new EcBlock(2, 38), new EcBlock(2, 39)),
335 new EcBlocks(22, new EcBlock(4, 18), new EcBlock(2, 19)),
336 new EcBlocks(26, new EcBlock(4, 14), new EcBlock(2, 15))
337 ),
338 new self(
339 9,
340 [6, 26, 46],
341 new EcBlocks(30, new EcBlock(2, 116)),
342 new EcBlocks(22, new EcBlock(3, 36), new EcBlock(2, 37)),
343 new EcBlocks(20, new EcBlock(4, 16), new EcBlock(4, 17)),
344 new EcBlocks(24, new EcBlock(4, 12), new EcBlock(4, 13))
345 ),
346 new self(
347 10,
348 [6, 28, 50],
349 new EcBlocks(18, new EcBlock(2, 68), new EcBlock(2, 69)),
350 new EcBlocks(26, new EcBlock(4, 43), new EcBlock(1, 44)),
351 new EcBlocks(24, new EcBlock(6, 19), new EcBlock(2, 20)),
352 new EcBlocks(28, new EcBlock(6, 15), new EcBlock(2, 16))
353 ),
354 new self(
355 11,
356 [6, 30, 54],
357 new EcBlocks(20, new EcBlock(4, 81)),
358 new EcBlocks(30, new EcBlock(1, 50), new EcBlock(4, 51)),
359 new EcBlocks(28, new EcBlock(4, 22), new EcBlock(4, 23)),
360 new EcBlocks(24, new EcBlock(3, 12), new EcBlock(8, 13))
361 ),
362 new self(
363 12,
364 [6, 32, 58],
365 new EcBlocks(24, new EcBlock(2, 92), new EcBlock(2, 93)),
366 new EcBlocks(22, new EcBlock(6, 36), new EcBlock(2, 37)),
367 new EcBlocks(26, new EcBlock(4, 20), new EcBlock(6, 21)),
368 new EcBlocks(28, new EcBlock(7, 14), new EcBlock(4, 15))
369 ),
370 new self(
371 13,
372 [6, 34, 62],
373 new EcBlocks(26, new EcBlock(4, 107)),
374 new EcBlocks(22, new EcBlock(8, 37), new EcBlock(1, 38)),
375 new EcBlocks(24, new EcBlock(8, 20), new EcBlock(4, 21)),
376 new EcBlocks(22, new EcBlock(12, 11), new EcBlock(4, 12))
377 ),
378 new self(
379 14,
380 [6, 26, 46, 66],
381 new EcBlocks(30, new EcBlock(3, 115), new EcBlock(1, 116)),
382 new EcBlocks(24, new EcBlock(4, 40), new EcBlock(5, 41)),
383 new EcBlocks(20, new EcBlock(11, 16), new EcBlock(5, 17)),
384 new EcBlocks(24, new EcBlock(11, 12), new EcBlock(5, 13))
385 ),
386 new self(
387 15,
388 [6, 26, 48, 70],
389 new EcBlocks(22, new EcBlock(5, 87), new EcBlock(1, 88)),
390 new EcBlocks(24, new EcBlock(5, 41), new EcBlock(5, 42)),
391 new EcBlocks(30, new EcBlock(5, 24), new EcBlock(7, 25)),
392 new EcBlocks(24, new EcBlock(11, 12), new EcBlock(7, 13))
393 ),
394 new self(
395 16,
396 [6, 26, 50, 74],
397 new EcBlocks(24, new EcBlock(5, 98), new EcBlock(1, 99)),
398 new EcBlocks(28, new EcBlock(7, 45), new EcBlock(3, 46)),
399 new EcBlocks(24, new EcBlock(15, 19), new EcBlock(2, 20)),
400 new EcBlocks(30, new EcBlock(3, 15), new EcBlock(13, 16))
401 ),
402 new self(
403 17,
404 [6, 30, 54, 78],
405 new EcBlocks(28, new EcBlock(1, 107), new EcBlock(5, 108)),
406 new EcBlocks(28, new EcBlock(10, 46), new EcBlock(1, 47)),
407 new EcBlocks(28, new EcBlock(1, 22), new EcBlock(15, 23)),
408 new EcBlocks(28, new EcBlock(2, 14), new EcBlock(17, 15))
409 ),
410 new self(
411 18,
412 [6, 30, 56, 82],
413 new EcBlocks(30, new EcBlock(5, 120), new EcBlock(1, 121)),
414 new EcBlocks(26, new EcBlock(9, 43), new EcBlock(4, 44)),
415 new EcBlocks(28, new EcBlock(17, 22), new EcBlock(1, 23)),
416 new EcBlocks(28, new EcBlock(2, 14), new EcBlock(19, 15))
417 ),
418 new self(
419 19,
420 [6, 30, 58, 86],
421 new EcBlocks(28, new EcBlock(3, 113), new EcBlock(4, 114)),
422 new EcBlocks(26, new EcBlock(3, 44), new EcBlock(11, 45)),
423 new EcBlocks(26, new EcBlock(17, 21), new EcBlock(4, 22)),
424 new EcBlocks(26, new EcBlock(9, 13), new EcBlock(16, 14))
425 ),
426 new self(
427 20,
428 [6, 34, 62, 90],
429 new EcBlocks(28, new EcBlock(3, 107), new EcBlock(5, 108)),
430 new EcBlocks(26, new EcBlock(3, 41), new EcBlock(13, 42)),
431 new EcBlocks(30, new EcBlock(15, 24), new EcBlock(5, 25)),
432 new EcBlocks(28, new EcBlock(15, 15), new EcBlock(10, 16))
433 ),
434 new self(
435 21,
436 [6, 28, 50, 72, 94],
437 new EcBlocks(28, new EcBlock(4, 116), new EcBlock(4, 117)),
438 new EcBlocks(26, new EcBlock(17, 42)),
439 new EcBlocks(28, new EcBlock(17, 22), new EcBlock(6, 23)),
440 new EcBlocks(30, new EcBlock(19, 16), new EcBlock(6, 17))
441 ),
442 new self(
443 22,
444 [6, 26, 50, 74, 98],
445 new EcBlocks(28, new EcBlock(2, 111), new EcBlock(7, 112)),
446 new EcBlocks(28, new EcBlock(17, 46)),
447 new EcBlocks(30, new EcBlock(7, 24), new EcBlock(16, 25)),
448 new EcBlocks(24, new EcBlock(34, 13))
449 ),
450 new self(
451 23,
452 [6, 30, 54, 78, 102],
453 new EcBlocks(30, new EcBlock(4, 121), new EcBlock(5, 122)),
454 new EcBlocks(28, new EcBlock(4, 47), new EcBlock(14, 48)),
455 new EcBlocks(30, new EcBlock(11, 24), new EcBlock(14, 25)),
456 new EcBlocks(30, new EcBlock(16, 15), new EcBlock(14, 16))
457 ),
458 new self(
459 24,
460 [6, 28, 54, 80, 106],
461 new EcBlocks(30, new EcBlock(6, 117), new EcBlock(4, 118)),
462 new EcBlocks(28, new EcBlock(6, 45), new EcBlock(14, 46)),
463 new EcBlocks(30, new EcBlock(11, 24), new EcBlock(16, 25)),
464 new EcBlocks(30, new EcBlock(30, 16), new EcBlock(2, 17))
465 ),
466 new self(
467 25,
468 [6, 32, 58, 84, 110],
469 new EcBlocks(26, new EcBlock(8, 106), new EcBlock(4, 107)),
470 new EcBlocks(28, new EcBlock(8, 47), new EcBlock(13, 48)),
471 new EcBlocks(30, new EcBlock(7, 24), new EcBlock(22, 25)),
472 new EcBlocks(30, new EcBlock(22, 15), new EcBlock(13, 16))
473 ),
474 new self(
475 26,
476 [6, 30, 58, 86, 114],
477 new EcBlocks(28, new EcBlock(10, 114), new EcBlock(2, 115)),
478 new EcBlocks(28, new EcBlock(19, 46), new EcBlock(4, 47)),
479 new EcBlocks(28, new EcBlock(28, 22), new EcBlock(6, 23)),
480 new EcBlocks(30, new EcBlock(33, 16), new EcBlock(4, 17))
481 ),
482 new self(
483 27,
484 [6, 34, 62, 90, 118],
485 new EcBlocks(30, new EcBlock(8, 122), new EcBlock(4, 123)),
486 new EcBlocks(28, new EcBlock(22, 45), new EcBlock(3, 46)),
487 new EcBlocks(30, new EcBlock(8, 23), new EcBlock(26, 24)),
488 new EcBlocks(30, new EcBlock(12, 15), new EcBlock(28, 16))
489 ),
490 new self(
491 28,
492 [6, 26, 50, 74, 98, 122],
493 new EcBlocks(30, new EcBlock(3, 117), new EcBlock(10, 118)),
494 new EcBlocks(28, new EcBlock(3, 45), new EcBlock(23, 46)),
495 new EcBlocks(30, new EcBlock(4, 24), new EcBlock(31, 25)),
496 new EcBlocks(30, new EcBlock(11, 15), new EcBlock(31, 16))
497 ),
498 new self(
499 29,
500 [6, 30, 54, 78, 102, 126],
501 new EcBlocks(30, new EcBlock(7, 116), new EcBlock(7, 117)),
502 new EcBlocks(28, new EcBlock(21, 45), new EcBlock(7, 46)),
503 new EcBlocks(30, new EcBlock(1, 23), new EcBlock(37, 24)),
504 new EcBlocks(30, new EcBlock(19, 15), new EcBlock(26, 16))
505 ),
506 new self(
507 30,
508 [6, 26, 52, 78, 104, 130],
509 new EcBlocks(30, new EcBlock(5, 115), new EcBlock(10, 116)),
510 new EcBlocks(28, new EcBlock(19, 47), new EcBlock(10, 48)),
511 new EcBlocks(30, new EcBlock(15, 24), new EcBlock(25, 25)),
512 new EcBlocks(30, new EcBlock(23, 15), new EcBlock(25, 16))
513 ),
514 new self(
515 31,
516 [6, 30, 56, 82, 108, 134],
517 new EcBlocks(30, new EcBlock(13, 115), new EcBlock(3, 116)),
518 new EcBlocks(28, new EcBlock(2, 46), new EcBlock(29, 47)),
519 new EcBlocks(30, new EcBlock(42, 24), new EcBlock(1, 25)),
520 new EcBlocks(30, new EcBlock(23, 15), new EcBlock(28, 16))
521 ),
522 new self(
523 32,
524 [6, 34, 60, 86, 112, 138],
525 new EcBlocks(30, new EcBlock(17, 115)),
526 new EcBlocks(28, new EcBlock(10, 46), new EcBlock(23, 47)),
527 new EcBlocks(30, new EcBlock(10, 24), new EcBlock(35, 25)),
528 new EcBlocks(30, new EcBlock(19, 15), new EcBlock(35, 16))
529 ),
530 new self(
531 33,
532 [6, 30, 58, 86, 114, 142],
533 new EcBlocks(30, new EcBlock(17, 115), new EcBlock(1, 116)),
534 new EcBlocks(28, new EcBlock(14, 46), new EcBlock(21, 47)),
535 new EcBlocks(30, new EcBlock(29, 24), new EcBlock(19, 25)),
536 new EcBlocks(30, new EcBlock(11, 15), new EcBlock(46, 16))
537 ),
538 new self(
539 34,
540 [6, 34, 62, 90, 118, 146],
541 new EcBlocks(30, new EcBlock(13, 115), new EcBlock(6, 116)),
542 new EcBlocks(28, new EcBlock(14, 46), new EcBlock(23, 47)),
543 new EcBlocks(30, new EcBlock(44, 24), new EcBlock(7, 25)),
544 new EcBlocks(30, new EcBlock(59, 16), new EcBlock(1, 17))
545 ),
546 new self(
547 35,
548 [6, 30, 54, 78, 102, 126, 150],
549 new EcBlocks(30, new EcBlock(12, 121), new EcBlock(7, 122)),
550 new EcBlocks(28, new EcBlock(12, 47), new EcBlock(26, 48)),
551 new EcBlocks(30, new EcBlock(39, 24), new EcBlock(14, 25)),
552 new EcBlocks(30, new EcBlock(22, 15), new EcBlock(41, 16))
553 ),
554 new self(
555 36,
556 [6, 24, 50, 76, 102, 128, 154],
557 new EcBlocks(30, new EcBlock(6, 121), new EcBlock(14, 122)),
558 new EcBlocks(28, new EcBlock(6, 47), new EcBlock(34, 48)),
559 new EcBlocks(30, new EcBlock(46, 24), new EcBlock(10, 25)),
560 new EcBlocks(30, new EcBlock(2, 15), new EcBlock(64, 16))
561 ),
562 new self(
563 37,
564 [6, 28, 54, 80, 106, 132, 158],
565 new EcBlocks(30, new EcBlock(17, 122), new EcBlock(4, 123)),
566 new EcBlocks(28, new EcBlock(29, 46), new EcBlock(14, 47)),
567 new EcBlocks(30, new EcBlock(49, 24), new EcBlock(10, 25)),
568 new EcBlocks(30, new EcBlock(24, 15), new EcBlock(46, 16))
569 ),
570 new self(
571 38,
572 [6, 32, 58, 84, 110, 136, 162],
573 new EcBlocks(30, new EcBlock(4, 122), new EcBlock(18, 123)),
574 new EcBlocks(28, new EcBlock(13, 46), new EcBlock(32, 47)),
575 new EcBlocks(30, new EcBlock(48, 24), new EcBlock(14, 25)),
576 new EcBlocks(30, new EcBlock(42, 15), new EcBlock(32, 16))
577 ),
578 new self(
579 39,
580 [6, 26, 54, 82, 110, 138, 166],
581 new EcBlocks(30, new EcBlock(20, 117), new EcBlock(4, 118)),
582 new EcBlocks(28, new EcBlock(40, 47), new EcBlock(7, 48)),
583 new EcBlocks(30, new EcBlock(43, 24), new EcBlock(22, 25)),
584 new EcBlocks(30, new EcBlock(10, 15), new EcBlock(67, 16))
585 ),
586 new self(
587 40,
588 [6, 30, 58, 86, 114, 142, 170],
589 new EcBlocks(30, new EcBlock(19, 118), new EcBlock(6, 119)),
590 new EcBlocks(28, new EcBlock(18, 47), new EcBlock(31, 48)),
591 new EcBlocks(30, new EcBlock(34, 24), new EcBlock(34, 25)),
592 new EcBlocks(30, new EcBlock(20, 15), new EcBlock(61, 16))
593 ),
594 ];
595 }
596 }
597