BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Ghostnet
  • /
  • KT1PQJo...pkXL
operations (5.96K)Storage Code Interact Tokens Fork Views Statistics Details
Latest
​x
924
1785
 
1
{ parameter (or
2
              (list %configure (or (address %update_administrator)
3
                                  (or (nat %update_current_snapshot)
4
                                      (or (nat %update_history_length)
5
                                          (or (nat %update_minimum_endorsements)
6
                                              (or (nat %update_snapshot_interval)
7
                                                  (set %update_validators (or
8
                                                                           (address %add)
9
                                                                           (address %remove)))))))))
10
              (pair %submit_block_state_root (nat %block_number) (bytes %state_root))) ;
11
  storage (pair
12
            (pair
13
              (pair %config (pair (address %administrator) (nat %history_length))
14
                            (pair (nat %minimum_endorsements)
15
                                  (pair (nat %snapshot_interval)
16
                                        (set %validators address))))
17
              (nat %current_snapshot))
18
            (pair (set %history nat) (big_map %state_root nat (map address bytes)))) ;
19
  code { UNPAIR ;
20
         IF_LEFT
21
           { SENDER ;
22
             DUP 3 ;
23
             CAR ;
24
             CAR ;
25
             CAR ;
26
             CAR ;
27
             COMPARE ;
28
             EQ ;
29
             IF {} { PUSH string "NOT_ADMINISTRATOR" ; FAILWITH } ;
30
             DUP ;
31
             ITER { DUP ;
32
                    IF_LEFT
33
                      { SWAP ; DROP ; DIG 2 ; UNPAIR ; UNPAIR ; UNPAIR ; CDR ; DIG 4 ; PAIR ; PAIR ; PAIR ; PAIR ; SWAP }
34
                      { IF_LEFT
35
                          { SWAP ; DROP ; DIG 2 ; UNPAIR ; CAR ; DIG 2 ; SWAP ; PAIR ; PAIR ; SWAP }
36
                          { IF_LEFT
37
                              { SWAP ;
38
                                DROP ;
39
                                DIG 2 ;
40
                                UNPAIR ;
41
                                UNPAIR ;
42
                                UNPAIR ;
43
                                CAR ;
44
                                DIG 4 ;
45
                                SWAP ;
46
                                PAIR ;
47
                                PAIR ;
48
                                PAIR ;
49
                                PAIR ;
50
                                SWAP }
51
                              { IF_LEFT
52
                                  { SWAP ;
53
                                    DROP ;
54
                                    DIG 2 ;
55
                                    UNPAIR ;
56
                                    UNPAIR ;
57
                                    DIG 3 ;
58
                                    UPDATE 3 ;
59
                                    PAIR ;
60
                                    PAIR ;
61
                                    SWAP }
62
                                  { IF_LEFT
63
                                      { SWAP ;
64
                                        DROP ;
65
                                        DIG 2 ;
66
                                        UNPAIR ;
67
                                        UNPAIR ;
68
                                        DIG 3 ;
69
                                        UPDATE 5 ;
70
                                        PAIR ;
71
                                        PAIR ;
72
                                        SWAP }
73
                                      { DUP ;
74
                                        ITER { IF_LEFT
75
                                                 { DIG 4 ;
76
                                                   UNPAIR ;
77
                                                   UNPAIR ;
78
                                                   DUP ;
79
                                                   GET 6 ;
80
                                                   PUSH bool True ;
81
                                                   DIG 5 ;
82
                                                   UPDATE ;
83
                                                   UPDATE 6 ;
84
                                                   PAIR ;
85
                                                   PAIR ;
86
                                                   DUG 3 }
87
                                                 { DIG 4 ;
88
                                                   UNPAIR ;
89
                                                   UNPAIR ;
90
                                                   DUP ;
91
                                                   GET 6 ;
92
                                                   PUSH bool False ;
93
                                                   DIG 5 ;
94
                                                   UPDATE ;
95
                                                   UPDATE 6 ;
96
                                                   PAIR ;
97
                                                   PAIR ;
98
                                                   DUG 3 } } ;
99
                                        DROP 2 } } } } } } ;
100
             DROP }
101
           { DUP ;
102
             UNPAIR ;
103
             DUP 4 ;
104
             CAR ;
105
             CAR ;
106
             GET 6 ;
107
             SENDER ;
108
             MEM ;
109
             IF {} { PUSH string "NOT_VALIDATOR" ; FAILWITH } ;
110
             PUSH nat 0 ;
111
             DUP 5 ;
112
             CAR ;
113
             CDR ;
114
             COMPARE ;
115
             EQ ;
116
             IF
117
               { DIG 3 ; UNPAIR ; CAR ; DUP 3 ; SWAP ; PAIR ; PAIR ; DUG 3 }
118
               { DUP ;
119
                 DUP 5 ;
120
                 CAR ;
121
                 CDR ;
122
                 COMPARE ;
123
                 EQ ;
124
                 IF {} { PUSH string "INVALID_SNAPSHOT" ; FAILWITH } } ;
125
             DUP 4 ;
126
             GET 4 ;
127
             SWAP ;
128
             DUP ;
129
             DUG 2 ;
130
             MEM ;
131
             IF
132
               { DIG 3 ;
133
                 DUP ;
134
                 GET 4 ;
135
                 DUP ;
136
                 DUP 4 ;
137
                 DUP ;
138
                 DUG 2 ;
139
                 GET ;
140
                 IF_NONE { PUSH int 444 ; FAILWITH } {} ;
141
                 DUP 6 ;
142
                 SOME ;
143
                 SENDER ;
144
                 UPDATE ;
145
                 SOME ;
146
                 SWAP ;
147
                 UPDATE ;
148
                 UPDATE 4 ;
149
                 DUG 3 }
150
               { DIG 3 ;
151
                 DUP ;
152
                 GET 4 ;
153
                 EMPTY_MAP address bytes ;
154
                 DUP 5 ;
155
                 SOME ;
156
                 SENDER ;
157
                 UPDATE ;
158
                 SOME ;
159
                 DUP 4 ;
160
                 UPDATE ;
161
                 UPDATE 4 ;
162
                 DUG 3 } ;
163
             DUP 4 ;
164
             GET 4 ;
165
             SWAP ;
166
             DUP ;
167
             DUG 2 ;
168
             GET ;
169
             IF_NONE { PUSH string "UNPROCESSED_BLOCK_STATE" ; FAILWITH } {} ;
170
             LAMBDA
171
               (pair nat (map address bytes))
172
               (option bytes)
173
               { DUP ;
174
                 UNPAIR ;
175
                 EMPTY_MAP bytes nat ;
176
                 DUP 3 ;
177
                 ITER { SWAP ;
178
                        DUP ;
179
                        DUG 2 ;
180
                        PUSH nat 1 ;
181
                        DIG 3 ;
182
                        DUP 4 ;
183
                        CDR ;
184
                        GET ;
185
                        IF_NONE { PUSH nat 0 } {} ;
186
                        ADD ;
187
                        SOME ;
188
                        DIG 2 ;
189
                        CDR ;
190
                        UPDATE } ;
191
                 DUP ;
192
                 PUSH bytes 0x ;
193
                 SWAP ;
194
                 ITER { CAR ;
195
                        DUP 3 ;
196
                        DUP 3 ;
197
                        GET ;
198
                        IF_NONE { PUSH nat 0 } {} ;
199
                        DUP 4 ;
200
                        DUP 3 ;
201
                        GET ;
202
                        IF_NONE { PUSH int 106 ; FAILWITH } {} ;
203
                        COMPARE ;
204
                        GT ;
205
                        IF { SWAP ; DROP } { DROP } } ;
206
                 PUSH nat 0 ;
207
                 DUP 3 ;
208
                 SIZE ;
209
                 COMPARE ;
210
                 EQ ;
211
                 IF
212
                   { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; PUSH bool True }
213
                   { DIG 3 ;
214
                     DROP ;
215
                     DIG 3 ;
216
                     DROP ;
217
                     DUP ;
218
                     DUG 3 ;
219
                     GET ;
220
                     IF_NONE { PUSH int 113 ; FAILWITH } {} ;
221
                     COMPARE ;
222
                     LT } ;
223
                 IF { DROP ; NONE bytes } { SOME } } ;
224
             SWAP ;
225
             DUP 6 ;
226
             CAR ;
227
             CAR ;
228
             GET 3 ;
229
             PAIR ;
230
             EXEC ;
231
             IF_NONE
232
               { DROP 3 }
233
               { DROP ;
234
                 DUP 4 ;
235
                 UNPAIR ;
236
                 UNPAIR ;
237
                 SWAP ;
238
                 DIG 6 ;
239
                 CAR ;
240
                 CAR ;
241
                 GET 5 ;
242
                 ADD ;
243
                 SWAP ;
244
                 PAIR ;
245
                 PAIR ;
246
                 DUP ;
247
                 GET 3 ;
248
                 PUSH bool True ;
249
                 DUP 4 ;
250
                 UPDATE ;
251
                 UPDATE 3 ;
252
                 DUP ;
253
                 CAR ;
254
                 CAR ;
255
                 CAR ;
256
                 CDR ;
257
                 SWAP ;
258
                 DUP ;
259
                 DUG 5 ;
260
                 GET 3 ;
261
                 SIZE ;
262
                 COMPARE ;
263
                 GT ;
264
                 IF
265
                   { SWAP ;
266
                     DROP ;
267
                     SWAP ;
268
                     DROP ;
269
                     SWAP ;
270
                     DUP ;
271
                     DUG 2 ;
272
                     GET 3 ;
273
                     ITER { SWAP ;
274
                            DUP ;
275
                            DUG 2 ;
276
                            SWAP ;
277
                            DUP ;
278
                            DUG 2 ;
279
                            COMPARE ;
280
                            LT ;
281
                            IF { SWAP ; DROP } { DROP } } ;
282
                     SWAP ;
283
                     DUP ;
284
                     GET 4 ;
285
                     NONE (map address bytes) ;
286
                     DUP 4 ;
287
                     UPDATE ;
288
                     UPDATE 4 ;
289
                     DUP ;
290
                     GET 3 ;
291
                     PUSH bool False ;
292
                     DIG 3 ;
293
                     UPDATE ;
294
                     UPDATE 3 }
295
                   { DROP 3 } } } ;
296
         NIL operation ;
297
         PAIR } ;
298
  view "validate_storage_proof"
299
        (pair (bytes %account)
300
              (pair (bytes %account_proof_rlp)
301
                    (pair (nat %block_number)
302
                          (pair (bytes %storage_proof_rlp) (bytes %storage_slot)))))
303
        bytes
304
        { UNPAIR ;
305
          DUP ;
306
          UNPAIR 5 ;
307
          LAMBDA
308
            (pair bytes
309
                  (pair bytes
310
                        (pair
311
                          (pair (lambda bytes bool)
312
                                (pair (lambda bytes bytes)
313
                                      (lambda bytes (map nat bytes))))
314
                          bytes)))
315
            bytes
316
            { DUP ;
317
              UNPAIR 4 ;
318
              LAMBDA
319
                (pair bytes nat)
320
                bytes
321
                { DUP ;
322
                  UNPAIR ;
323
                  DUP ;
324
                  SIZE ;
325
                  LAMBDA
326
                    bytes
327
                    nat
328
                    { DUP ;
329
                      SIZE ;
330
                      DUP ;
331
                      PUSH nat 0 ;
332
                      SWAP ;
333
                      PUSH nat 0 ;
334
                      DUP ;
335
                      DUP 3 ;
336
                      COMPARE ;
337
                      GT ;
338
                      LOOP { DUP 5 ;
339
                             PUSH nat 1 ;
340
                             DUP 3 ;
341
                             SLICE ;
342
                             IF_NONE { PUSH int 126 ; FAILWITH } {} ;
343
                             PUSH nat 2 ;
344
                             PUSH nat 1 ;
345
                             DUP 4 ;
346
                             ADD ;
347
                             DUP 7 ;
348
                             SUB ;
349
                             ISNAT ;
350
                             IF_NONE { PUSH int 127 ; FAILWITH } {} ;
351
                             MUL ;
352
                             PUSH nat 1 ;
353
                             PUSH nat 16 ;
354
                             DUP 3 ;
355
                             DUP ;
356
                             PUSH nat 0 ;
357
                             COMPARE ;
358
                             NEQ ;
359
                             LOOP { PUSH nat 0 ;
360
                                    PUSH nat 2 ;
361
                                    DUP 3 ;
362
                                    EDIV ;
363
                                    IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
364
                                    COMPARE ;
365
                                    NEQ ;
366
                                    IF { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 } {} ;
367
                                    PUSH nat 1 ;
368
                                    SWAP ;
369
                                    LSR ;
370
                                    SWAP ;
371
                                    DUP ;
372
                                    MUL ;
373
                                    SWAP ;
374
                                    DUP ;
375
                                    PUSH nat 0 ;
376
                                    COMPARE ;
377
                                    NEQ } ;
378
                             DROP 2 ;
379
                             SWAP ;
380
                             DROP ;
381
                             PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
382
                             DIG 2 ;
383
                             PUSH bytes 0x050a00000020 ;
384
                             CONCAT ;
385
                             CONCAT ;
386
                             UNPACK bls12_381_fr ;
387
                             IF_NONE { PUSH int 134 ; FAILWITH } {} ;
388
                             INT ;
389
                             ISNAT ;
390
                             IF_NONE { PUSH int 133 ; FAILWITH } {} ;
391
                             MUL ;
392
                             DIG 3 ;
393
                             ADD ;
394
                             DUG 2 ;
395
                             PUSH nat 1 ;
396
                             ADD ;
397
                             DUP ;
398
                             DUP 3 ;
399
                             COMPARE ;
400
                             GT } ;
401
                      DROP 2 ;
402
                      SWAP ;
403
                      DROP ;
404
                      SWAP ;
405
                      DROP } ;
406
                  SWAP ;
407
                  DUP ;
408
                  PUSH nat 0 ;
409
                  COMPARE ;
410
                  LT ;
411
                  IF {} { PUSH string "Empty bytes array" ; FAILWITH } ;
412
                  DUP ;
413
                  PUSH nat 2 ;
414
                  SWAP ;
415
                  MUL ;
416
                  DUP 5 ;
417
                  SWAP ;
418
                  DUP ;
419
                  DUG 2 ;
420
                  COMPARE ;
421
                  GE ;
422
                  IF {} { PUSH string "Skip nibbles amount too large" ; FAILWITH } ;
423
                  DUP ;
424
                  PUSH bytes 0x ;
425
                  SWAP ;
426
                  DUP 7 ;
427
                  DUP ;
428
                  DUP 3 ;
429
                  COMPARE ;
430
                  GT ;
431
                  LOOP { DUP 6 ;
432
                         DUP 8 ;
433
                         PUSH nat 1 ;
434
                         PUSH nat 2 ;
435
                         DUP 5 ;
436
                         EDIV ;
437
                         IF_NONE { PUSH int 143 ; FAILWITH } { CAR } ;
438
                         SLICE ;
439
                         IF_NONE { PUSH int 143 ; FAILWITH } {} ;
440
                         EXEC ;
441
                         PUSH nat 15 ;
442
                         PUSH (map nat nat) { Elt 0 4 ; Elt 1 0 } ;
443
                         PUSH nat 2 ;
444
                         DUP 5 ;
445
                         EDIV ;
446
                         IF_NONE { PUSH int 147 ; FAILWITH } { CDR } ;
447
                         GET ;
448
                         IF_NONE { PUSH int 147 ; FAILWITH } {} ;
449
                         DIG 2 ;
450
                         LSR ;
451
                         AND ;
452
                         PACK ;
453
                         PUSH nat 1 ;
454
                         PUSH nat 2 ;
455
                         SLICE ;
456
                         IF_NONE { PUSH int 148 ; FAILWITH } {} ;
457
                         DIG 3 ;
458
                         CONCAT ;
459
                         DUG 2 ;
460
                         PUSH nat 1 ;
461
                         ADD ;
462
                         DUP ;
463
                         DUP 3 ;
464
                         COMPARE ;
465
                         GT } ;
466
                  DROP 2 ;
467
                  SWAP ;
468
                  DROP ;
469
                  SWAP ;
470
                  DROP ;
471
                  SWAP ;
472
                  DROP ;
473
                  SWAP ;
474
                  DROP ;
475
                  SWAP ;
476
                  DROP ;
477
                  SWAP ;
478
                  DROP } ;
479
              LAMBDA
480
                (pair bytes (pair bytes nat))
481
                nat
482
                { DUP ;
483
                  UNPAIR 3 ;
484
                  PUSH nat 0 ;
485
                  PUSH bool True ;
486
                  DUP 3 ;
487
                  SIZE ;
488
                  DUP 5 ;
489
                  SIZE ;
490
                  DUP 3 ;
491
                  IF
492
                    { SWAP ; DUP ; DUG 2 ; DUP 8 ; DUP 6 ; ADD ; COMPARE ; LT }
493
                    { PUSH bool False } ;
494
                  IF { DUP ; DUP 5 ; COMPARE ; LT } { PUSH bool False } ;
495
                  LOOP { DUP 6 ;
496
                         PUSH nat 1 ;
497
                         DUP 6 ;
498
                         SLICE ;
499
                         IF_NONE { PUSH int 173 ; FAILWITH } {} ;
500
                         DUP 6 ;
501
                         PUSH nat 1 ;
502
                         DUP 10 ;
503
                         DUP 8 ;
504
                         ADD ;
505
                         SLICE ;
506
                         IF_NONE { PUSH int 172 ; FAILWITH } {} ;
507
                         COMPARE ;
508
                         NEQ ;
509
                         IF
510
                           { DIG 2 ; DROP ; PUSH bool False ; DUG 2 }
511
                           { PUSH nat 1 ; DIG 4 ; ADD ; DUG 3 } ;
512
                         DUP 3 ;
513
                         IF
514
                           { SWAP ; DUP ; DUG 2 ; DUP 8 ; DUP 6 ; ADD ; COMPARE ; LT }
515
                           { PUSH bool False } ;
516
                         IF { DUP ; DUP 5 ; COMPARE ; LT } { PUSH bool False } } ;
517
                  DROP 3 ;
518
                  SWAP ;
519
                  DROP ;
520
                  SWAP ;
521
                  DROP ;
522
                  SWAP ;
523
                  DROP ;
524
                  SWAP ;
525
                  DROP } ;
526
              LAMBDA
527
                bytes
528
                bytes
529
                { DUP ;
530
                  SIZE ;
531
                  PUSH nat 0 ;
532
                  COMPARE ;
533
                  LT ;
534
                  IF {} { PUSH string "Empty bytes array" ; FAILWITH } ;
535
                  LAMBDA
536
                    bytes
537
                    nat
538
                    { DUP ;
539
                      SIZE ;
540
                      DUP ;
541
                      PUSH nat 0 ;
542
                      SWAP ;
543
                      PUSH nat 0 ;
544
                      DUP ;
545
                      DUP 3 ;
546
                      COMPARE ;
547
                      GT ;
548
                      LOOP { DUP 5 ;
549
                             PUSH nat 1 ;
550
                             DUP 3 ;
551
                             SLICE ;
552
                             IF_NONE { PUSH int 126 ; FAILWITH } {} ;
553
                             PUSH nat 2 ;
554
                             PUSH nat 1 ;
555
                             DUP 4 ;
556
                             ADD ;
557
                             DUP 7 ;
558
                             SUB ;
559
                             ISNAT ;
560
                             IF_NONE { PUSH int 127 ; FAILWITH } {} ;
561
                             MUL ;
562
                             PUSH nat 1 ;
563
                             PUSH nat 16 ;
564
                             DUP 3 ;
565
                             DUP ;
566
                             PUSH nat 0 ;
567
                             COMPARE ;
568
                             NEQ ;
569
                             LOOP { PUSH nat 0 ;
570
                                    PUSH nat 2 ;
571
                                    DUP 3 ;
572
                                    EDIV ;
573
                                    IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
574
                                    COMPARE ;
575
                                    NEQ ;
576
                                    IF { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 } {} ;
577
                                    PUSH nat 1 ;
578
                                    SWAP ;
579
                                    LSR ;
580
                                    SWAP ;
581
                                    DUP ;
582
                                    MUL ;
583
                                    SWAP ;
584
                                    DUP ;
585
                                    PUSH nat 0 ;
586
                                    COMPARE ;
587
                                    NEQ } ;
588
                             DROP 2 ;
589
                             SWAP ;
590
                             DROP ;
591
                             PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
592
                             DIG 2 ;
593
                             PUSH bytes 0x050a00000020 ;
594
                             CONCAT ;
595
                             CONCAT ;
596
                             UNPACK bls12_381_fr ;
597
                             IF_NONE { PUSH int 134 ; FAILWITH } {} ;
598
                             INT ;
599
                             ISNAT ;
600
                             IF_NONE { PUSH int 133 ; FAILWITH } {} ;
601
                             MUL ;
602
                             DIG 3 ;
603
                             ADD ;
604
                             DUG 2 ;
605
                             PUSH nat 1 ;
606
                             ADD ;
607
                             DUP ;
608
                             DUP 3 ;
609
                             COMPARE ;
610
                             GT } ;
611
                      DROP 2 ;
612
                      SWAP ;
613
                      DROP ;
614
                      SWAP ;
615
                      DROP } ;
616
                  DUP ;
617
                  LAMBDA
618
                    (pair bytes nat)
619
                    bytes
620
                    { DUP ;
621
                      UNPAIR ;
622
                      DUP ;
623
                      SIZE ;
624
                      LAMBDA
625
                        bytes
626
                        nat
627
                        { DUP ;
628
                          SIZE ;
629
                          DUP ;
630
                          PUSH nat 0 ;
631
                          SWAP ;
632
                          PUSH nat 0 ;
633
                          DUP ;
634
                          DUP 3 ;
635
                          COMPARE ;
636
                          GT ;
637
                          LOOP { DUP 5 ;
638
                                 PUSH nat 1 ;
639
                                 DUP 3 ;
640
                                 SLICE ;
641
                                 IF_NONE { PUSH int 126 ; FAILWITH } {} ;
642
                                 PUSH nat 2 ;
643
                                 PUSH nat 1 ;
644
                                 DUP 4 ;
645
                                 ADD ;
646
                                 DUP 7 ;
647
                                 SUB ;
648
                                 ISNAT ;
649
                                 IF_NONE { PUSH int 127 ; FAILWITH } {} ;
650
                                 MUL ;
651
                                 PUSH nat 1 ;
652
                                 PUSH nat 16 ;
653
                                 DUP 3 ;
654
                                 DUP ;
655
                                 PUSH nat 0 ;
656
                                 COMPARE ;
657
                                 NEQ ;
658
                                 LOOP { PUSH nat 0 ;
659
                                        PUSH nat 2 ;
660
                                        DUP 3 ;
661
                                        EDIV ;
662
                                        IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
663
                                        COMPARE ;
664
                                        NEQ ;
665
                                        IF
666
                                          { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 }
667
                                          {} ;
668
                                        PUSH nat 1 ;
669
                                        SWAP ;
670
                                        LSR ;
671
                                        SWAP ;
672
                                        DUP ;
673
                                        MUL ;
674
                                        SWAP ;
675
                                        DUP ;
676
                                        PUSH nat 0 ;
677
                                        COMPARE ;
678
                                        NEQ } ;
679
                                 DROP 2 ;
680
                                 SWAP ;
681
                                 DROP ;
682
                                 PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
683
                                 DIG 2 ;
684
                                 PUSH bytes 0x050a00000020 ;
685
                                 CONCAT ;
686
                                 CONCAT ;
687
                                 UNPACK bls12_381_fr ;
688
                                 IF_NONE { PUSH int 134 ; FAILWITH } {} ;
689
                                 INT ;
690
                                 ISNAT ;
691
                                 IF_NONE { PUSH int 133 ; FAILWITH } {} ;
692
                                 MUL ;
693
                                 DIG 3 ;
694
                                 ADD ;
695
                                 DUG 2 ;
696
                                 PUSH nat 1 ;
697
                                 ADD ;
698
                                 DUP ;
699
                                 DUP 3 ;
700
                                 COMPARE ;
701
                                 GT } ;
702
                          DROP 2 ;
703
                          SWAP ;
704
                          DROP ;
705
                          SWAP ;
706
                          DROP } ;
707
                      SWAP ;
708
                      DUP ;
709
                      PUSH nat 0 ;
710
                      COMPARE ;
711
                      LT ;
712
                      IF {} { PUSH string "Empty bytes array" ; FAILWITH } ;
713
                      DUP ;
714
                      PUSH nat 2 ;
715
                      SWAP ;
716
                      MUL ;
717
                      DUP 5 ;
718
                      SWAP ;
719
                      DUP ;
720
                      DUG 2 ;
721
                      COMPARE ;
722
                      GE ;
723
                      IF {} { PUSH string "Skip nibbles amount too large" ; FAILWITH } ;
724
                      DUP ;
725
                      PUSH bytes 0x ;
726
                      SWAP ;
727
                      DUP 7 ;
728
                      DUP ;
729
                      DUP 3 ;
730
                      COMPARE ;
731
                      GT ;
732
                      LOOP { DUP 6 ;
733
                             DUP 8 ;
734
                             PUSH nat 1 ;
735
                             PUSH nat 2 ;
736
                             DUP 5 ;
737
                             EDIV ;
738
                             IF_NONE { PUSH int 143 ; FAILWITH } { CAR } ;
739
                             SLICE ;
740
                             IF_NONE { PUSH int 143 ; FAILWITH } {} ;
741
                             EXEC ;
742
                             PUSH nat 15 ;
743
                             PUSH (map nat nat) { Elt 0 4 ; Elt 1 0 } ;
744
                             PUSH nat 2 ;
745
                             DUP 5 ;
746
                             EDIV ;
747
                             IF_NONE { PUSH int 147 ; FAILWITH } { CDR } ;
748
                             GET ;
749
                             IF_NONE { PUSH int 147 ; FAILWITH } {} ;
750
                             DIG 2 ;
751
                             LSR ;
752
                             AND ;
753
                             PACK ;
754
                             PUSH nat 1 ;
755
                             PUSH nat 2 ;
756
                             SLICE ;
757
                             IF_NONE { PUSH int 148 ; FAILWITH } {} ;
758
                             DIG 3 ;
759
                             CONCAT ;
760
                             DUG 2 ;
761
                             PUSH nat 1 ;
762
                             ADD ;
763
                             DUP ;
764
                             DUP 3 ;
765
                             COMPARE ;
766
                             GT } ;
767
                      DROP 2 ;
768
                      SWAP ;
769
                      DROP ;
770
                      SWAP ;
771
                      DROP ;
772
                      SWAP ;
773
                      DROP ;
774
                      SWAP ;
775
                      DROP ;
776
                      SWAP ;
777
                      DROP ;
778
                      SWAP ;
779
                      DROP } ;
780
                  SWAP ;
781
                  DUP 4 ;
782
                  PUSH nat 1 ;
783
                  PUSH nat 0 ;
784
                  SLICE ;
785
                  IF_NONE { PUSH int 188 ; FAILWITH } {} ;
786
                  EXEC ;
787
                  DUP ;
788
                  PUSH nat 4 ;
789
                  SWAP ;
790
                  LSR ;
791
                  PUSH nat 0 ;
792
                  DUP ;
793
                  DUP 3 ;
794
                  COMPARE ;
795
                  EQ ;
796
                  IF
797
                    { DROP 3 ; SWAP ; DROP ; PUSH nat 2 }
798
                    { PUSH nat 1 ;
799
                      DUP 3 ;
800
                      COMPARE ;
801
                      EQ ;
802
                      IF
803
                        { DROP 3 ; SWAP ; DROP ; PUSH nat 1 }
804
                        { PUSH nat 2 ;
805
                          DUP 3 ;
806
                          COMPARE ;
807
                          EQ ;
808
                          IF
809
                            { DROP 3 ; SWAP ; DROP ; PUSH nat 2 }
810
                            { PUSH nat 3 ;
811
                              DUP 3 ;
812
                              COMPARE ;
813
                              EQ ;
814
                              IF
815
                                { DROP 3 ; SWAP ; DROP }
816
                                { DUP 6 ; DUP 3 ; PAIR ; PUSH string "UNEXPECTED" ; PAIR ; FAILWITH } ;
817
                              PUSH nat 1 } } } ;
818
                  DIG 2 ;
819
                  PAIR ;
820
                  EXEC } ;
821
              LAMBDA
822
                (pair bytes nat)
823
                nat
824
                { UNPAIR ;
825
                  LAMBDA
826
                    bytes
827
                    nat
828
                    { DUP ;
829
                      SIZE ;
830
                      DUP ;
831
                      PUSH nat 0 ;
832
                      SWAP ;
833
                      PUSH nat 0 ;
834
                      DUP ;
835
                      DUP 3 ;
836
                      COMPARE ;
837
                      GT ;
838
                      LOOP { DUP 5 ;
839
                             PUSH nat 1 ;
840
                             DUP 3 ;
841
                             SLICE ;
842
                             IF_NONE { PUSH int 126 ; FAILWITH } {} ;
843
                             PUSH nat 2 ;
844
                             PUSH nat 1 ;
845
                             DUP 4 ;
846
                             ADD ;
847
                             DUP 7 ;
848
                             SUB ;
849
                             ISNAT ;
850
                             IF_NONE { PUSH int 127 ; FAILWITH } {} ;
851
                             MUL ;
852
                             PUSH nat 1 ;
853
                             PUSH nat 16 ;
854
                             DUP 3 ;
855
                             DUP ;
856
                             PUSH nat 0 ;
857
                             COMPARE ;
858
                             NEQ ;
859
                             LOOP { PUSH nat 0 ;
860
                                    PUSH nat 2 ;
861
                                    DUP 3 ;
862
                                    EDIV ;
863
                                    IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
864
                                    COMPARE ;
865
                                    NEQ ;
866
                                    IF { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 } {} ;
867
                                    PUSH nat 1 ;
868
                                    SWAP ;
869
                                    LSR ;
870
                                    SWAP ;
871
                                    DUP ;
872
                                    MUL ;
873
                                    SWAP ;
874
                                    DUP ;
875
                                    PUSH nat 0 ;
876
                                    COMPARE ;
877
                                    NEQ } ;
878
                             DROP 2 ;
879
                             SWAP ;
880
                             DROP ;
881
                             PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
882
                             DIG 2 ;
883
                             PUSH bytes 0x050a00000020 ;
884
                             CONCAT ;
885
                             CONCAT ;
886
                             UNPACK bls12_381_fr ;
887
                             IF_NONE { PUSH int 134 ; FAILWITH } {} ;
888
                             INT ;
889
                             ISNAT ;
890
                             IF_NONE { PUSH int 133 ; FAILWITH } {} ;
891
                             MUL ;
892
                             DIG 3 ;
893
                             ADD ;
894
                             DUG 2 ;
895
                             PUSH nat 1 ;
896
                             ADD ;
897
                             DUP ;
898
                             DUP 3 ;
899
                             COMPARE ;
900
                             GT } ;
901
                      DROP 2 ;
902
                      SWAP ;
903
                      DROP ;
904
                      SWAP ;
905
                      DROP } ;
906
                  PUSH nat 64 ;
907
                  DUP 4 ;
908
                  COMPARE ;
909
                  LT ;
910
                  IF {} { PUSH string "Invalid nibble position" ; FAILWITH } ;
911
                  SWAP ;
912
                  PUSH nat 1 ;
913
                  PUSH nat 2 ;
914
                  DUP 5 ;
915
                  EDIV ;
916
                  IF_NONE { PUSH int 229 ; FAILWITH } { CAR } ;
917
                  SLICE ;
918
                  IF_NONE { PUSH int 229 ; FAILWITH } {} ;
919
                  EXEC ;
920
                  PUSH nat 0 ;
921
                  PUSH nat 2 ;
922
                  DIG 3 ;
923
                  EDIV ;
924
                  IF_NONE { PUSH int 232 ; FAILWITH } { CDR } ;
925
                  COMPARE ;
926
                  EQ ;
927
                  IF { PUSH nat 4 ; SWAP ; LSR } { PUSH nat 15 ; AND } } ;
928
              DUP 7 ;
929
              GET 4 ;
930
              DUP 7 ;
931
              EXEC ;
932
              DUP ;
933
              SIZE ;
934
              DUP 6 ;
935
              PUSH nat 0 ;
936
              DUP 9 ;
937
              PAIR ;
938
              EXEC ;
939
              DUP ;
940
              SIZE ;
941
              PUSH nat 0 ;
942
              DUP ;
943
              DUP 5 ;
944
              COMPARE ;
945
              EQ ;
946
              IF
947
                { DROP 12 ;
948
                  SWAP ;
949
                  DROP ;
950
                  PUSH bytes 0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421 ;
951
                  COMPARE ;
952
                  EQ ;
953
                  IF {} { PUSH string "Bad empty proof" ; FAILWITH } ;
954
                  PUSH bytes 0x }
955
                { PUSH bytes 0x ;
956
                  PUSH bool True ;
957
                  PUSH bytes 0x ;
958
                  DUP 7 ;
959
                  PUSH nat 0 ;
960
                  DUP ;
961
                  DUP 3 ;
962
                  COMPARE ;
963
                  GT ;
964
                  LOOP { DUP 10 ;
965
                         SWAP ;
966
                         DUP ;
967
                         DUG 2 ;
968
                         GET ;
969
                         IF_NONE { PUSH int 280 ; FAILWITH } {} ;
970
                         DUP 5 ;
971
                         IF
972
                           { PUSH bytes 0x ;
973
                             DUP 7 ;
974
                             COMPARE ;
975
                             EQ ;
976
                             IF
977
                               { DUP ;
978
                                 KECCAK ;
979
                                 DUP 20 ;
980
                                 COMPARE ;
981
                                 EQ ;
982
                                 IF
983
                                   {}
984
                                   { PUSH string "Bad first proof part" ; FAILWITH } }
985
                               { DUP ;
986
                                 KECCAK ;
987
                                 DUP 7 ;
988
                                 COMPARE ;
989
                                 EQ ;
990
                                 IF {} { PUSH string "Bad hash" ; FAILWITH } } ;
991
                             DUP 18 ;
992
                             GET 4 ;
993
                             SWAP ;
994
                             DUP ;
995
                             DUG 2 ;
996
                             EXEC ;
997
                             DUP ;
998
                             SIZE ;
999
                             DUP ;
1000
                             PUSH nat 2 ;
1001
                             COMPARE ;
1002
                             EQ ;
1003
                             IF
1004
                               { DUP 15 ;
1005
                                 DUP 21 ;
1006
                                 GET 3 ;
1007
                                 DUP 4 ;
1008
                                 PUSH nat 0 ;
1009
                                 GET ;
1010
                                 IF_NONE { PUSH int 299 ; FAILWITH } {} ;
1011
                                 EXEC ;
1012
                                 EXEC ;
1013
                                 DUP 17 ;
1014
                                 DUP 11 ;
1015
                                 DUP 3 ;
1016
                                 DUP 15 ;
1017
                                 PAIR 3 ;
1018
                                 EXEC ;
1019
                                 DUP ;
1020
                                 DIG 11 ;
1021
                                 ADD ;
1022
                                 DUG 10 ;
1023
                                 DUP 14 ;
1024
                                 PUSH nat 1 ;
1025
                                 DUP 8 ;
1026
                                 ADD ;
1027
                                 COMPARE ;
1028
                                 EQ ;
1029
                                 IF
1030
                                   { DIG 7 ;
1031
                                     DROP ;
1032
                                     DIG 7 ;
1033
                                     DROP 4 ;
1034
                                     SWAP ;
1035
                                     DROP ;
1036
                                     DUP 6 ;
1037
                                     DUP 6 ;
1038
                                     COMPARE ;
1039
                                     EQ ;
1040
                                     IF
1041
                                       {}
1042
                                       { PUSH string "Unexpected end of proof (leaf)" ;
1043
                                         FAILWITH } ;
1044
                                     DUP 16 ;
1045
                                     GET 3 ;
1046
                                     SWAP ;
1047
                                     PUSH nat 1 ;
1048
                                     GET ;
1049
                                     IF_NONE { PUSH int 318 ; FAILWITH } {} ;
1050
                                     EXEC ;
1051
                                     DUG 2 ;
1052
                                     PUSH bool False ;
1053
                                     DUG 3 }
1054
                                   { DIG 9 ;
1055
                                     DROP 4 ;
1056
                                     SWAP ;
1057
                                     DROP ;
1058
                                     PUSH nat 1 ;
1059
                                     GET ;
1060
                                     IF_NONE { PUSH int 323 ; FAILWITH } {} ;
1061
                                     DUP 17 ;
1062
                                     CAR ;
1063
                                     SWAP ;
1064
                                     DUP ;
1065
                                     DUG 2 ;
1066
                                     EXEC ;
1067
                                     IF
1068
                                       { KECCAK ; DUG 4 }
1069
                                       { PUSH nat 32 ;
1070
                                         DUP 18 ;
1071
                                         GET 3 ;
1072
                                         DUP 3 ;
1073
                                         EXEC ;
1074
                                         SIZE ;
1075
                                         COMPARE ;
1076
                                         EQ ;
1077
                                         IF
1078
                                           {}
1079
                                           { PUSH string "INVALID_NODE" ; FAILWITH } ;
1080
                                         DUP 17 ;
1081
                                         GET 3 ;
1082
                                         SWAP ;
1083
                                         EXEC ;
1084
                                         DUG 4 } } }
1085
                               { DUP ;
1086
                                 PUSH nat 17 ;
1087
                                 COMPARE ;
1088
                                 EQ ;
1089
                                 IF
1090
                                   {}
1091
                                   { PUSH string "INVALID_NODE_LENGTH" ; FAILWITH } ;
1092
                                 DUP 12 ;
1093
                                 PUSH nat 1 ;
1094
                                 DUP 6 ;
1095
                                 ADD ;
1096
                                 COMPARE ;
1097
                                 EQ ;
1098
                                 IF
1099
                                   { DIG 5 ;
1100
                                     DROP ;
1101
                                     DIG 5 ;
1102
                                     DROP 2 ;
1103
                                     SWAP ;
1104
                                     DROP ;
1105
                                     DUP 6 ;
1106
                                     PUSH nat 1 ;
1107
                                     DUP 7 ;
1108
                                     ADD ;
1109
                                     COMPARE ;
1110
                                     EQ ;
1111
                                     IF
1112
                                       { DUP 16 ;
1113
                                         GET 3 ;
1114
                                         SWAP ;
1115
                                         PUSH nat 16 ;
1116
                                         GET ;
1117
                                         IF_NONE { PUSH int 338 ; FAILWITH } {} ;
1118
                                         EXEC ;
1119
                                         DUG 2 ;
1120
                                         PUSH bool False ;
1121
                                         DUG 3 }
1122
                                       { DUP 10 ;
1123
                                         DUP 6 ;
1124
                                         DUP 16 ;
1125
                                         PAIR ;
1126
                                         EXEC ;
1127
                                         PUSH nat 0 ;
1128
                                         DUP 18 ;
1129
                                         GET 3 ;
1130
                                         DIG 3 ;
1131
                                         DIG 3 ;
1132
                                         GET ;
1133
                                         IF_NONE { PUSH int 353 ; FAILWITH } {} ;
1134
                                         EXEC ;
1135
                                         SIZE ;
1136
                                         COMPARE ;
1137
                                         EQ ;
1138
                                         IF
1139
                                           {}
1140
                                           { PUSH string "Invalid exclusion proof" ;
1141
                                             FAILWITH } ;
1142
                                         PUSH bytes 0x ;
1143
                                         DUG 2 ;
1144
                                         PUSH bool False ;
1145
                                         DUG 3 } }
1146
                                   { DIG 7 ;
1147
                                     DROP 2 ;
1148
                                     SWAP ;
1149
                                     DROP ;
1150
                                     DUP 8 ;
1151
                                     SIZE ;
1152
                                     DUP 7 ;
1153
                                     COMPARE ;
1154
                                     LT ;
1155
                                     IF
1156
                                       {}
1157
                                       { PUSH string "Continuing branch has depleted path" ;
1158
                                         FAILWITH } ;
1159
                                     DUP 11 ;
1160
                                     DUP 7 ;
1161
                                     DUP 17 ;
1162
                                     PAIR ;
1163
                                     EXEC ;
1164
                                     GET ;
1165
                                     IF_NONE { PUSH int 371 ; FAILWITH } {} ;
1166
                                     PUSH nat 1 ;
1167
                                     DIG 6 ;
1168
                                     ADD ;
1169
                                     DUG 5 ;
1170
                                     DUP 17 ;
1171
                                     CAR ;
1172
                                     SWAP ;
1173
                                     DUP ;
1174
                                     DUG 2 ;
1175
                                     EXEC ;
1176
                                     IF
1177
                                       { KECCAK ; DUG 4 }
1178
                                       { PUSH nat 32 ;
1179
                                         DUP 18 ;
1180
                                         GET 3 ;
1181
                                         DUP 3 ;
1182
                                         EXEC ;
1183
                                         SIZE ;
1184
                                         COMPARE ;
1185
                                         EQ ;
1186
                                         IF
1187
                                           {}
1188
                                           { PUSH string "INVALID_NODE" ; FAILWITH } ;
1189
                                         DUP 17 ;
1190
                                         GET 3 ;
1191
                                         SWAP ;
1192
                                         EXEC ;
1193
                                         DUG 4 } } } }
1194
                           { DROP } ;
1195
                         PUSH nat 1 ;
1196
                         ADD ;
1197
                         DUP ;
1198
                         DUP 3 ;
1199
                         COMPARE ;
1200
                         GT } ;
1201
                  DROP 2 ;
1202
                  SWAP ;
1203
                  DROP ;
1204
                  SWAP ;
1205
                  DROP ;
1206
                  SWAP ;
1207
                  DROP ;
1208
                  SWAP ;
1209
                  DROP ;
1210
                  SWAP ;
1211
                  DROP ;
1212
                  SWAP ;
1213
                  DROP ;
1214
                  SWAP ;
1215
                  DROP ;
1216
                  SWAP ;
1217
                  DROP ;
1218
                  SWAP ;
1219
                  DROP ;
1220
                  SWAP ;
1221
                  DROP ;
1222
                  SWAP ;
1223
                  DROP ;
1224
                  SWAP ;
1225
                  DROP ;
1226
                  SWAP ;
1227
                  DROP ;
1228
                  SWAP ;
1229
                  DROP ;
1230
                  SWAP ;
1231
                  DROP ;
1232
                  SWAP ;
1233
                  DROP } } ;
1234
          DUP 8 ;
1235
          GET 4 ;
1236
          DUP 5 ;
1237
          GET ;
1238
          IF_NONE { PUSH string "UNPROCESSED_BLOCK_STATE" ; FAILWITH } {} ;
1239
          DUP ;
1240
          LAMBDA
1241
            (pair nat (map address bytes))
1242
            (option bytes)
1243
            { DUP ;
1244
              UNPAIR ;
1245
              EMPTY_MAP bytes nat ;
1246
              DUP 3 ;
1247
              ITER { SWAP ;
1248
                     DUP ;
1249
                     DUG 2 ;
1250
                     PUSH nat 1 ;
1251
                     DIG 3 ;
1252
                     DUP 4 ;
1253
                     CDR ;
1254
                     GET ;
1255
                     IF_NONE { PUSH nat 0 } {} ;
1256
                     ADD ;
1257
                     SOME ;
1258
                     DIG 2 ;
1259
                     CDR ;
1260
                     UPDATE } ;
1261
              DUP ;
1262
              PUSH bytes 0x ;
1263
              SWAP ;
1264
              ITER { CAR ;
1265
                     DUP 3 ;
1266
                     DUP 3 ;
1267
                     GET ;
1268
                     IF_NONE { PUSH nat 0 } {} ;
1269
                     DUP 4 ;
1270
                     DUP 3 ;
1271
                     GET ;
1272
                     IF_NONE { PUSH int 106 ; FAILWITH } {} ;
1273
                     COMPARE ;
1274
                     GT ;
1275
                     IF { SWAP ; DROP } { DROP } } ;
1276
              PUSH nat 0 ;
1277
              DUP 3 ;
1278
              SIZE ;
1279
              COMPARE ;
1280
              EQ ;
1281
              IF
1282
                { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; PUSH bool True }
1283
                { DIG 3 ;
1284
                  DROP ;
1285
                  DIG 3 ;
1286
                  DROP ;
1287
                  DUP ;
1288
                  DUG 3 ;
1289
                  GET ;
1290
                  IF_NONE { PUSH int 113 ; FAILWITH } {} ;
1291
                  COMPARE ;
1292
                  LT } ;
1293
              IF { DROP ; NONE bytes } { SOME } } ;
1294
          SWAP ;
1295
          DUP 11 ;
1296
          CAR ;
1297
          CAR ;
1298
          GET 3 ;
1299
          PAIR ;
1300
          EXEC ;
1301
          IF_NONE { PUSH string "NO_CONSENSUS_FOR_STATE" ; FAILWITH } {} ;
1302
          LAMBDA
1303
            bytes
1304
            (map nat bytes)
1305
            { LAMBDA
1306
                bytes
1307
                nat
1308
                { LAMBDA
1309
                    bytes
1310
                    nat
1311
                    { LAMBDA
1312
                        bytes
1313
                        nat
1314
                        { DUP ;
1315
                          SIZE ;
1316
                          DUP ;
1317
                          PUSH nat 0 ;
1318
                          SWAP ;
1319
                          PUSH nat 0 ;
1320
                          DUP ;
1321
                          DUP 3 ;
1322
                          COMPARE ;
1323
                          GT ;
1324
                          LOOP { DUP 5 ;
1325
                                 PUSH nat 1 ;
1326
                                 DUP 3 ;
1327
                                 SLICE ;
1328
                                 IF_NONE { PUSH int 126 ; FAILWITH } {} ;
1329
                                 PUSH nat 2 ;
1330
                                 PUSH nat 1 ;
1331
                                 DUP 4 ;
1332
                                 ADD ;
1333
                                 DUP 7 ;
1334
                                 SUB ;
1335
                                 ISNAT ;
1336
                                 IF_NONE { PUSH int 127 ; FAILWITH } {} ;
1337
                                 MUL ;
1338
                                 PUSH nat 1 ;
1339
                                 PUSH nat 16 ;
1340
                                 DUP 3 ;
1341
                                 DUP ;
1342
                                 PUSH nat 0 ;
1343
                                 COMPARE ;
1344
                                 NEQ ;
1345
                                 LOOP { PUSH nat 0 ;
1346
                                        PUSH nat 2 ;
1347
                                        DUP 3 ;
1348
                                        EDIV ;
1349
                                        IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
1350
                                        COMPARE ;
1351
                                        NEQ ;
1352
                                        IF
1353
                                          { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 }
1354
                                          {} ;
1355
                                        PUSH nat 1 ;
1356
                                        SWAP ;
1357
                                        LSR ;
1358
                                        SWAP ;
1359
                                        DUP ;
1360
                                        MUL ;
1361
                                        SWAP ;
1362
                                        DUP ;
1363
                                        PUSH nat 0 ;
1364
                                        COMPARE ;
1365
                                        NEQ } ;
1366
                                 DROP 2 ;
1367
                                 SWAP ;
1368
                                 DROP ;
1369
                                 PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
1370
                                 DIG 2 ;
1371
                                 PUSH bytes 0x050a00000020 ;
1372
                                 CONCAT ;
1373
                                 CONCAT ;
1374
                                 UNPACK bls12_381_fr ;
1375
                                 IF_NONE { PUSH int 134 ; FAILWITH } {} ;
1376
                                 INT ;
1377
                                 ISNAT ;
1378
                                 IF_NONE { PUSH int 133 ; FAILWITH } {} ;
1379
                                 MUL ;
1380
                                 DIG 3 ;
1381
                                 ADD ;
1382
                                 DUG 2 ;
1383
                                 PUSH nat 1 ;
1384
                                 ADD ;
1385
                                 DUP ;
1386
                                 DUP 3 ;
1387
                                 COMPARE ;
1388
                                 GT } ;
1389
                          DROP 2 ;
1390
                          SWAP ;
1391
                          DROP ;
1392
                          SWAP ;
1393
                          DROP } ;
1394
                      DUP ;
1395
                      DUP 3 ;
1396
                      PUSH nat 1 ;
1397
                      PUSH nat 0 ;
1398
                      SLICE ;
1399
                      IF_NONE { PUSH int 297 ; FAILWITH } {} ;
1400
                      EXEC ;
1401
                      DUP ;
1402
                      PUSH nat 128 ;
1403
                      COMPARE ;
1404
                      GT ;
1405
                      IF
1406
                        { DROP 3 ; PUSH nat 1 }
1407
                        { DUP ;
1408
                          PUSH nat 184 ;
1409
                          COMPARE ;
1410
                          GT ;
1411
                          IF
1412
                            { SWAP ;
1413
                              DROP ;
1414
                              SWAP ;
1415
                              DROP ;
1416
                              PUSH int 1 ;
1417
                              PUSH nat 128 ;
1418
                              DIG 2 ;
1419
                              SUB ;
1420
                              ADD ;
1421
                              ISNAT ;
1422
                              IF_NONE { PUSH int 303 ; FAILWITH } {} }
1423
                            { DUP ;
1424
                              PUSH nat 192 ;
1425
                              COMPARE ;
1426
                              GT ;
1427
                              IF
1428
                                { PUSH nat 183 ;
1429
                                  SWAP ;
1430
                                  SUB ;
1431
                                  ISNAT ;
1432
                                  IF_NONE { PUSH int 307 ; FAILWITH } {} ;
1433
                                  DUP ;
1434
                                  PUSH nat 1 ;
1435
                                  SWAP ;
1436
                                  DIG 3 ;
1437
                                  DUP 5 ;
1438
                                  PUSH nat 1 ;
1439
                                  DIG 6 ;
1440
                                  SIZE ;
1441
                                  SUB ;
1442
                                  ISNAT ;
1443
                                  IF_NONE { PUSH int 310 ; FAILWITH } {} ;
1444
                                  PUSH nat 1 ;
1445
                                  SLICE ;
1446
                                  IF_NONE { PUSH int 311 ; FAILWITH } {} ;
1447
                                  DIG 4 ;
1448
                                  PUSH nat 0 ;
1449
                                  SLICE ;
1450
                                  IF_NONE { PUSH int 314 ; FAILWITH } {} ;
1451
                                  EXEC ;
1452
                                  ADD ;
1453
                                  ADD }
1454
                                { DUP ;
1455
                                  PUSH nat 248 ;
1456
                                  COMPARE ;
1457
                                  GT ;
1458
                                  IF
1459
                                    { SWAP ;
1460
                                      DROP ;
1461
                                      SWAP ;
1462
                                      DROP ;
1463
                                      PUSH int 1 ;
1464
                                      PUSH nat 192 ;
1465
                                      DIG 2 ;
1466
                                      SUB ;
1467
                                      ADD ;
1468
                                      ISNAT ;
1469
                                      IF_NONE { PUSH int 319 ; FAILWITH } {} }
1470
                                    { PUSH nat 247 ;
1471
                                      SWAP ;
1472
                                      SUB ;
1473
                                      ISNAT ;
1474
                                      IF_NONE { PUSH int 322 ; FAILWITH } {} ;
1475
                                      DUP ;
1476
                                      PUSH nat 1 ;
1477
                                      SWAP ;
1478
                                      DIG 3 ;
1479
                                      DUP 5 ;
1480
                                      PUSH nat 1 ;
1481
                                      DIG 6 ;
1482
                                      SIZE ;
1483
                                      SUB ;
1484
                                      ISNAT ;
1485
                                      IF_NONE { PUSH int 325 ; FAILWITH } {} ;
1486
                                      PUSH nat 1 ;
1487
                                      SLICE ;
1488
                                      IF_NONE { PUSH int 326 ; FAILWITH } {} ;
1489
                                      DIG 4 ;
1490
                                      PUSH nat 0 ;
1491
                                      SLICE ;
1492
                                      IF_NONE { PUSH int 329 ; FAILWITH } {} ;
1493
                                      EXEC ;
1494
                                      ADD ;
1495
                                      ADD } } } } } ;
1496
                  LAMBDA
1497
                    bytes
1498
                    nat
1499
                    { LAMBDA
1500
                        bytes
1501
                        nat
1502
                        { DUP ;
1503
                          SIZE ;
1504
                          DUP ;
1505
                          PUSH nat 0 ;
1506
                          SWAP ;
1507
                          PUSH nat 0 ;
1508
                          DUP ;
1509
                          DUP 3 ;
1510
                          COMPARE ;
1511
                          GT ;
1512
                          LOOP { DUP 5 ;
1513
                                 PUSH nat 1 ;
1514
                                 DUP 3 ;
1515
                                 SLICE ;
1516
                                 IF_NONE { PUSH int 126 ; FAILWITH } {} ;
1517
                                 PUSH nat 2 ;
1518
                                 PUSH nat 1 ;
1519
                                 DUP 4 ;
1520
                                 ADD ;
1521
                                 DUP 7 ;
1522
                                 SUB ;
1523
                                 ISNAT ;
1524
                                 IF_NONE { PUSH int 127 ; FAILWITH } {} ;
1525
                                 MUL ;
1526
                                 PUSH nat 1 ;
1527
                                 PUSH nat 16 ;
1528
                                 DUP 3 ;
1529
                                 DUP ;
1530
                                 PUSH nat 0 ;
1531
                                 COMPARE ;
1532
                                 NEQ ;
1533
                                 LOOP { PUSH nat 0 ;
1534
                                        PUSH nat 2 ;
1535
                                        DUP 3 ;
1536
                                        EDIV ;
1537
                                        IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
1538
                                        COMPARE ;
1539
                                        NEQ ;
1540
                                        IF
1541
                                          { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 }
1542
                                          {} ;
1543
                                        PUSH nat 1 ;
1544
                                        SWAP ;
1545
                                        LSR ;
1546
                                        SWAP ;
1547
                                        DUP ;
1548
                                        MUL ;
1549
                                        SWAP ;
1550
                                        DUP ;
1551
                                        PUSH nat 0 ;
1552
                                        COMPARE ;
1553
                                        NEQ } ;
1554
                                 DROP 2 ;
1555
                                 SWAP ;
1556
                                 DROP ;
1557
                                 PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
1558
                                 DIG 2 ;
1559
                                 PUSH bytes 0x050a00000020 ;
1560
                                 CONCAT ;
1561
                                 CONCAT ;
1562
                                 UNPACK bls12_381_fr ;
1563
                                 IF_NONE { PUSH int 134 ; FAILWITH } {} ;
1564
                                 INT ;
1565
                                 ISNAT ;
1566
                                 IF_NONE { PUSH int 133 ; FAILWITH } {} ;
1567
                                 MUL ;
1568
                                 DIG 3 ;
1569
                                 ADD ;
1570
                                 DUG 2 ;
1571
                                 PUSH nat 1 ;
1572
                                 ADD ;
1573
                                 DUP ;
1574
                                 DUP 3 ;
1575
                                 COMPARE ;
1576
                                 GT } ;
1577
                          DROP 2 ;
1578
                          SWAP ;
1579
                          DROP ;
1580
                          SWAP ;
1581
                          DROP } ;
1582
                      SWAP ;
1583
                      PUSH nat 1 ;
1584
                      PUSH nat 0 ;
1585
                      SLICE ;
1586
                      IF_NONE { PUSH int 339 ; FAILWITH } {} ;
1587
                      EXEC ;
1588
                      DUP ;
1589
                      PUSH nat 128 ;
1590
                      COMPARE ;
1591
                      GT ;
1592
                      IF
1593
                        { DROP ; PUSH nat 0 }
1594
                        { DUP ;
1595
                          PUSH nat 184 ;
1596
                          COMPARE ;
1597
                          GT ;
1598
                          IF
1599
                            { PUSH bool True }
1600
                            { DUP ;
1601
                              PUSH nat 192 ;
1602
                              SWAP ;
1603
                              COMPARE ;
1604
                              GE ;
1605
                              IF
1606
                                { DUP ; PUSH nat 248 ; COMPARE ; GT }
1607
                                { PUSH bool False } } ;
1608
                          IF
1609
                            { DROP ; PUSH nat 1 }
1610
                            { DUP ;
1611
                              PUSH nat 192 ;
1612
                              COMPARE ;
1613
                              GT ;
1614
                              IF
1615
                                { PUSH nat 1 ;
1616
                                  PUSH nat 183 ;
1617
                                  DIG 2 ;
1618
                                  SUB ;
1619
                                  ISNAT ;
1620
                                  IF_NONE { PUSH int 356 ; FAILWITH } {} ;
1621
                                  ADD }
1622
                                { PUSH nat 1 ;
1623
                                  PUSH nat 247 ;
1624
                                  DIG 2 ;
1625
                                  SUB ;
1626
                                  ISNAT ;
1627
                                  IF_NONE { PUSH int 359 ; FAILWITH } {} ;
1628
                                  ADD } } } } ;
1629
                  DUP ;
1630
                  PUSH nat 0 ;
1631
                  SWAP ;
1632
                  DUP 5 ;
1633
                  EXEC ;
1634
                  DUP 5 ;
1635
                  SIZE ;
1636
                  DUP ;
1637
                  DUP 3 ;
1638
                  COMPARE ;
1639
                  LT ;
1640
                  LOOP { DUP 5 ;
1641
                         DUP 7 ;
1642
                         DUP 4 ;
1643
                         DUP 4 ;
1644
                         SUB ;
1645
                         ISNAT ;
1646
                         IF_NONE { PUSH int 240 ; FAILWITH } {} ;
1647
                         DUP 5 ;
1648
                         SLICE ;
1649
                         IF_NONE { PUSH int 241 ; FAILWITH } {} ;
1650
                         EXEC ;
1651
                         DIG 2 ;
1652
                         ADD ;
1653
                         SWAP ;
1654
                         PUSH nat 1 ;
1655
                         DIG 3 ;
1656
                         ADD ;
1657
                         DUG 2 ;
1658
                         DUP ;
1659
                         DUP 3 ;
1660
                         COMPARE ;
1661
                         LT } ;
1662
                  DROP 2 ;
1663
                  SWAP ;
1664
                  DROP ;
1665
                  SWAP ;
1666
                  DROP ;
1667
                  SWAP ;
1668
                  DROP } ;
1669
              LAMBDA
1670
                bytes
1671
                nat
1672
                { LAMBDA
1673
                    bytes
1674
                    nat
1675
                    { DUP ;
1676
                      SIZE ;
1677
                      DUP ;
1678
                      PUSH nat 0 ;
1679
                      SWAP ;
1680
                      PUSH nat 0 ;
1681
                      DUP ;
1682
                      DUP 3 ;
1683
                      COMPARE ;
1684
                      GT ;
1685
                      LOOP { DUP 5 ;
1686
                             PUSH nat 1 ;
1687
                             DUP 3 ;
1688
                             SLICE ;
1689
                             IF_NONE { PUSH int 126 ; FAILWITH } {} ;
1690
                             PUSH nat 2 ;
1691
                             PUSH nat 1 ;
1692
                             DUP 4 ;
1693
                             ADD ;
1694
                             DUP 7 ;
1695
                             SUB ;
1696
                             ISNAT ;
1697
                             IF_NONE { PUSH int 127 ; FAILWITH } {} ;
1698
                             MUL ;
1699
                             PUSH nat 1 ;
1700
                             PUSH nat 16 ;
1701
                             DUP 3 ;
1702
                             DUP ;
1703
                             PUSH nat 0 ;
1704
                             COMPARE ;
1705
                             NEQ ;
1706
                             LOOP { PUSH nat 0 ;
1707
                                    PUSH nat 2 ;
1708
                                    DUP 3 ;
1709
                                    EDIV ;
1710
                                    IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
1711
                                    COMPARE ;
1712
                                    NEQ ;
1713
                                    IF { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 } {} ;
1714
                                    PUSH nat 1 ;
1715
                                    SWAP ;
1716
                                    LSR ;
1717
                                    SWAP ;
1718
                                    DUP ;
1719
                                    MUL ;
1720
                                    SWAP ;
1721
                                    DUP ;
1722
                                    PUSH nat 0 ;
1723
                                    COMPARE ;
1724
                                    NEQ } ;
1725
                             DROP 2 ;
1726
                             SWAP ;
1727
                             DROP ;
1728
                             PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
1729
                             DIG 2 ;
1730
                             PUSH bytes 0x050a00000020 ;
1731
                             CONCAT ;
1732
                             CONCAT ;
1733
                             UNPACK bls12_381_fr ;
1734
                             IF_NONE { PUSH int 134 ; FAILWITH } {} ;
1735
                             INT ;
1736
                             ISNAT ;
1737
                             IF_NONE { PUSH int 133 ; FAILWITH } {} ;
1738
                             MUL ;
1739
                             DIG 3 ;
1740
                             ADD ;
1741
                             DUG 2 ;
1742
                             PUSH nat 1 ;
1743
                             ADD ;
1744
                             DUP ;
1745
                             DUP 3 ;
1746
                             COMPARE ;
1747
                             GT } ;
1748
                      DROP 2 ;
1749
                      SWAP ;
1750
                      DROP ;
1751
                      SWAP ;
1752
                      DROP } ;
1753
                  DUP ;
1754
                  DUP 3 ;
1755
                  PUSH nat 1 ;
1756
                  PUSH nat 0 ;
1757
                  SLICE ;
1758
                  IF_NONE { PUSH int 297 ; FAILWITH } {} ;
1759
                  EXEC ;
1760
                  DUP ;
1761
                  PUSH nat 128 ;
1762
                  COMPARE ;
1763
                  GT ;
1764
                  IF
1765
                    { DROP 3 ; PUSH nat 1 }
1766
                    { DUP ;
1767
                      PUSH nat 184 ;
1768
                      COMPARE ;
1769
                      GT ;
1770
                      IF
1771
                        { SWAP ;
1772
                          DROP ;
1773
                          SWAP ;
1774
                          DROP ;
1775
                          PUSH int 1 ;
1776
                          PUSH nat 128 ;
1777
                          DIG 2 ;
1778
                          SUB ;
1779
                          ADD ;
1780
                          ISNAT ;
1781
                          IF_NONE { PUSH int 303 ; FAILWITH } {} }
1782
                        { DUP ;
1783
                          PUSH nat 192 ;
1784
                          COMPARE ;
1785
                          GT ;
1786
                          IF
1787
                            { PUSH nat 183 ;
1788
                              SWAP ;
1789
                              SUB ;
1790
                              ISNAT ;
1791
                              IF_NONE { PUSH int 307 ; FAILWITH } {} ;
1792
                              DUP ;
1793
                              PUSH nat 1 ;
1794
                              SWAP ;
1795
                              DIG 3 ;
1796
                              DUP 5 ;
1797
                              PUSH nat 1 ;
1798
                              DIG 6 ;
1799
                              SIZE ;
1800
                              SUB ;
1801
                              ISNAT ;
1802
                              IF_NONE { PUSH int 310 ; FAILWITH } {} ;
1803
                              PUSH nat 1 ;
1804
                              SLICE ;
1805
                              IF_NONE { PUSH int 311 ; FAILWITH } {} ;
1806
                              DIG 4 ;
1807
                              PUSH nat 0 ;
1808
                              SLICE ;
1809
                              IF_NONE { PUSH int 314 ; FAILWITH } {} ;
1810
                              EXEC ;
1811
                              ADD ;
1812
                              ADD }
1813
                            { DUP ;
1814
                              PUSH nat 248 ;
1815
                              COMPARE ;
1816
                              GT ;
1817
                              IF
1818
                                { SWAP ;
1819
                                  DROP ;
1820
                                  SWAP ;
1821
                                  DROP ;
1822
                                  PUSH int 1 ;
1823
                                  PUSH nat 192 ;
1824
                                  DIG 2 ;
1825
                                  SUB ;
1826
                                  ADD ;
1827
                                  ISNAT ;
1828
                                  IF_NONE { PUSH int 319 ; FAILWITH } {} }
1829
                                { PUSH nat 247 ;
1830
                                  SWAP ;
1831
                                  SUB ;
1832
                                  ISNAT ;
1833
                                  IF_NONE { PUSH int 322 ; FAILWITH } {} ;
1834
                                  DUP ;
1835
                                  PUSH nat 1 ;
1836
                                  SWAP ;
1837
                                  DIG 3 ;
1838
                                  DUP 5 ;
1839
                                  PUSH nat 1 ;
1840
                                  DIG 6 ;
1841
                                  SIZE ;
1842
                                  SUB ;
1843
                                  ISNAT ;
1844
                                  IF_NONE { PUSH int 325 ; FAILWITH } {} ;
1845
                                  PUSH nat 1 ;
1846
                                  SLICE ;
1847
                                  IF_NONE { PUSH int 326 ; FAILWITH } {} ;
1848
                                  DIG 4 ;
1849
                                  PUSH nat 0 ;
1850
                                  SLICE ;
1851
                                  IF_NONE { PUSH int 329 ; FAILWITH } {} ;
1852
                                  EXEC ;
1853
                                  ADD ;
1854
                                  ADD } } } } } ;
1855
              LAMBDA
1856
                bytes
1857
                nat
1858
                { LAMBDA
1859
                    bytes
1860
                    nat
1861
                    { DUP ;
1862
                      SIZE ;
1863
                      DUP ;
1864
                      PUSH nat 0 ;
1865
                      SWAP ;
1866
                      PUSH nat 0 ;
1867
                      DUP ;
1868
                      DUP 3 ;
1869
                      COMPARE ;
1870
                      GT ;
1871
                      LOOP { DUP 5 ;
1872
                             PUSH nat 1 ;
1873
                             DUP 3 ;
1874
                             SLICE ;
1875
                             IF_NONE { PUSH int 126 ; FAILWITH } {} ;
1876
                             PUSH nat 2 ;
1877
                             PUSH nat 1 ;
1878
                             DUP 4 ;
1879
                             ADD ;
1880
                             DUP 7 ;
1881
                             SUB ;
1882
                             ISNAT ;
1883
                             IF_NONE { PUSH int 127 ; FAILWITH } {} ;
1884
                             MUL ;
1885
                             PUSH nat 1 ;
1886
                             PUSH nat 16 ;
1887
                             DUP 3 ;
1888
                             DUP ;
1889
                             PUSH nat 0 ;
1890
                             COMPARE ;
1891
                             NEQ ;
1892
                             LOOP { PUSH nat 0 ;
1893
                                    PUSH nat 2 ;
1894
                                    DUP 3 ;
1895
                                    EDIV ;
1896
                                    IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
1897
                                    COMPARE ;
1898
                                    NEQ ;
1899
                                    IF { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 } {} ;
1900
                                    PUSH nat 1 ;
1901
                                    SWAP ;
1902
                                    LSR ;
1903
                                    SWAP ;
1904
                                    DUP ;
1905
                                    MUL ;
1906
                                    SWAP ;
1907
                                    DUP ;
1908
                                    PUSH nat 0 ;
1909
                                    COMPARE ;
1910
                                    NEQ } ;
1911
                             DROP 2 ;
1912
                             SWAP ;
1913
                             DROP ;
1914
                             PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
1915
                             DIG 2 ;
1916
                             PUSH bytes 0x050a00000020 ;
1917
                             CONCAT ;
1918
                             CONCAT ;
1919
                             UNPACK bls12_381_fr ;
1920
                             IF_NONE { PUSH int 134 ; FAILWITH } {} ;
1921
                             INT ;
1922
                             ISNAT ;
1923
                             IF_NONE { PUSH int 133 ; FAILWITH } {} ;
1924
                             MUL ;
1925
                             DIG 3 ;
1926
                             ADD ;
1927
                             DUG 2 ;
1928
                             PUSH nat 1 ;
1929
                             ADD ;
1930
                             DUP ;
1931
                             DUP 3 ;
1932
                             COMPARE ;
1933
                             GT } ;
1934
                      DROP 2 ;
1935
                      SWAP ;
1936
                      DROP ;
1937
                      SWAP ;
1938
                      DROP } ;
1939
                  SWAP ;
1940
                  PUSH nat 1 ;
1941
                  PUSH nat 0 ;
1942
                  SLICE ;
1943
                  IF_NONE { PUSH int 339 ; FAILWITH } {} ;
1944
                  EXEC ;
1945
                  DUP ;
1946
                  PUSH nat 128 ;
1947
                  COMPARE ;
1948
                  GT ;
1949
                  IF
1950
                    { DROP ; PUSH nat 0 }
1951
                    { DUP ;
1952
                      PUSH nat 184 ;
1953
                      COMPARE ;
1954
                      GT ;
1955
                      IF
1956
                        { PUSH bool True }
1957
                        { DUP ;
1958
                          PUSH nat 192 ;
1959
                          SWAP ;
1960
                          COMPARE ;
1961
                          GE ;
1962
                          IF { DUP ; PUSH nat 248 ; COMPARE ; GT } { PUSH bool False } } ;
1963
                      IF
1964
                        { DROP ; PUSH nat 1 }
1965
                        { DUP ;
1966
                          PUSH nat 192 ;
1967
                          COMPARE ;
1968
                          GT ;
1969
                          IF
1970
                            { PUSH nat 1 ;
1971
                              PUSH nat 183 ;
1972
                              DIG 2 ;
1973
                              SUB ;
1974
                              ISNAT ;
1975
                              IF_NONE { PUSH int 356 ; FAILWITH } {} ;
1976
                              ADD }
1977
                            { PUSH nat 1 ;
1978
                              PUSH nat 247 ;
1979
                              DIG 2 ;
1980
                              SUB ;
1981
                              ISNAT ;
1982
                              IF_NONE { PUSH int 359 ; FAILWITH } {} ;
1983
                              ADD } } } } ;
1984
              LAMBDA
1985
                bytes
1986
                bool
1987
                { PUSH bytes 0xc0 ;
1988
                  SWAP ;
1989
                  PUSH nat 1 ;
1990
                  PUSH nat 0 ;
1991
                  SLICE ;
1992
                  IF_NONE { PUSH int 212 ; FAILWITH } {} ;
1993
                  COMPARE ;
1994
                  GE } ;
1995
              DUP ;
1996
              DUP 6 ;
1997
              EXEC ;
1998
              IF {} { PUSH string "NOT_A_LIST" ; FAILWITH } ;
1999
              DUP 4 ;
2000
              DUP 6 ;
2001
              EXEC ;
2002
              DUP 6 ;
2003
              SIZE ;
2004
              EMPTY_MAP nat bytes ;
2005
              DUP 5 ;
2006
              DUP 9 ;
2007
              EXEC ;
2008
              DUP 4 ;
2009
              PUSH nat 0 ;
2010
              DUP ;
2011
              DUP 3 ;
2012
              COMPARE ;
2013
              GT ;
2014
              LOOP { DUP 9 ;
2015
                     DUP 12 ;
2016
                     DUP 5 ;
2017
                     DUP 8 ;
2018
                     SUB ;
2019
                     ISNAT ;
2020
                     IF_NONE { PUSH int 268 ; FAILWITH } {} ;
2021
                     DUP 6 ;
2022
                     SLICE ;
2023
                     IF_NONE { PUSH int 269 ; FAILWITH } {} ;
2024
                     EXEC ;
2025
                     DIG 4 ;
2026
                     DUP 12 ;
2027
                     DUP 3 ;
2028
                     DUP 7 ;
2029
                     SLICE ;
2030
                     IF_NONE { PUSH int 272 ; FAILWITH } {} ;
2031
                     SOME ;
2032
                     DUP 4 ;
2033
                     UPDATE ;
2034
                     DUG 4 ;
2035
                     DIG 3 ;
2036
                     ADD ;
2037
                     DUG 2 ;
2038
                     PUSH nat 1 ;
2039
                     ADD ;
2040
                     DUP ;
2041
                     DUP 3 ;
2042
                     COMPARE ;
2043
                     GT } ;
2044
              DROP 3 ;
2045
              SWAP ;
2046
              DROP ;
2047
              SWAP ;
2048
              DROP ;
2049
              SWAP ;
2050
              DROP ;
2051
              SWAP ;
2052
              DROP ;
2053
              SWAP ;
2054
              DROP ;
2055
              SWAP ;
2056
              DROP ;
2057
              SWAP ;
2058
              DROP } ;
2059
          LAMBDA
2060
            bytes
2061
            bool
2062
            { PUSH bytes 0xc0 ;
2063
              SWAP ;
2064
              PUSH nat 1 ;
2065
              PUSH nat 0 ;
2066
              SLICE ;
2067
              IF_NONE { PUSH int 212 ; FAILWITH } {} ;
2068
              COMPARE ;
2069
              GE } ;
2070
          LAMBDA
2071
            bytes
2072
            bytes
2073
            { DUP ;
2074
              LAMBDA
2075
                bytes
2076
                nat
2077
                { DUP ;
2078
                  SIZE ;
2079
                  DUP ;
2080
                  PUSH nat 0 ;
2081
                  SWAP ;
2082
                  PUSH nat 0 ;
2083
                  DUP ;
2084
                  DUP 3 ;
2085
                  COMPARE ;
2086
                  GT ;
2087
                  LOOP { DUP 5 ;
2088
                         PUSH nat 1 ;
2089
                         DUP 3 ;
2090
                         SLICE ;
2091
                         IF_NONE { PUSH int 126 ; FAILWITH } {} ;
2092
                         PUSH nat 2 ;
2093
                         PUSH nat 1 ;
2094
                         DUP 4 ;
2095
                         ADD ;
2096
                         DUP 7 ;
2097
                         SUB ;
2098
                         ISNAT ;
2099
                         IF_NONE { PUSH int 127 ; FAILWITH } {} ;
2100
                         MUL ;
2101
                         PUSH nat 1 ;
2102
                         PUSH nat 16 ;
2103
                         DUP 3 ;
2104
                         DUP ;
2105
                         PUSH nat 0 ;
2106
                         COMPARE ;
2107
                         NEQ ;
2108
                         LOOP { PUSH nat 0 ;
2109
                                PUSH nat 2 ;
2110
                                DUP 3 ;
2111
                                EDIV ;
2112
                                IF_NONE { PUSH int 28 ; FAILWITH } { CDR } ;
2113
                                COMPARE ;
2114
                                NEQ ;
2115
                                IF { SWAP ; DUP ; DUG 2 ; DIG 3 ; MUL ; DUG 2 } {} ;
2116
                                PUSH nat 1 ;
2117
                                SWAP ;
2118
                                LSR ;
2119
                                SWAP ;
2120
                                DUP ;
2121
                                MUL ;
2122
                                SWAP ;
2123
                                DUP ;
2124
                                PUSH nat 0 ;
2125
                                COMPARE ;
2126
                                NEQ } ;
2127
                         DROP 2 ;
2128
                         SWAP ;
2129
                         DROP ;
2130
                         PUSH bytes 0x00000000000000000000000000000000000000000000000000000000000000 ;
2131
                         DIG 2 ;
2132
                         PUSH bytes 0x050a00000020 ;
2133
                         CONCAT ;
2134
                         CONCAT ;
2135
                         UNPACK bls12_381_fr ;
2136
                         IF_NONE { PUSH int 134 ; FAILWITH } {} ;
2137
                         INT ;
2138
                         ISNAT ;
2139
                         IF_NONE { PUSH int 133 ; FAILWITH } {} ;
2140
                         MUL ;
2141
                         DIG 3 ;
2142
                         ADD ;
2143
                         DUG 2 ;
2144
                         PUSH nat 1 ;
2145
                         ADD ;
2146
                         DUP ;
2147
                         DUP 3 ;
2148
                         COMPARE ;
2149
                         GT } ;
2150
                  DROP 2 ;
2151
                  SWAP ;
2152
                  DROP ;
2153
                  SWAP ;
2154
                  DROP } ;
2155
              SWAP ;
2156
              PUSH nat 1 ;
2157
              PUSH nat 0 ;
2158
              SLICE ;
2159
              IF_NONE { PUSH int 339 ; FAILWITH } {} ;
2160
              EXEC ;
2161
              DUP ;
2162
              PUSH nat 128 ;
2163
              COMPARE ;
2164
              GT ;
2165
              IF
2166
                { DROP ; PUSH nat 0 }
2167
                { DUP ;
2168
                  PUSH nat 184 ;
2169
                  COMPARE ;
2170
                  GT ;
2171
                  IF
2172
                    { PUSH bool True }
2173
                    { DUP ;
2174
                      PUSH nat 192 ;
2175
                      SWAP ;
2176
                      COMPARE ;
2177
                      GE ;
2178
                      IF { DUP ; PUSH nat 248 ; COMPARE ; GT } { PUSH bool False } } ;
2179
                  IF
2180
                    { DROP ; PUSH nat 1 }
2181
                    { DUP ;
2182
                      PUSH nat 192 ;
2183
                      COMPARE ;
2184
                      GT ;
2185
                      IF
2186
                        { PUSH nat 1 ;
2187
                          PUSH nat 183 ;
2188
                          DIG 2 ;
2189
                          SUB ;
2190
                          ISNAT ;
2191
                          IF_NONE { PUSH int 356 ; FAILWITH } {} ;
2192
                          ADD }
2193
                        { PUSH nat 1 ;
2194
                          PUSH nat 247 ;
2195
                          DIG 2 ;
2196
                          SUB ;
2197
                          ISNAT ;
2198
                          IF_NONE { PUSH int 359 ; FAILWITH } {} ;
2199
                          ADD } } } ;
2200
              SWAP ;
2201
              DUP ;
2202
              DUG 2 ;
2203
              SWAP ;
2204
              DUP ;
2205
              DUG 2 ;
2206
              DIG 3 ;
2207
              SIZE ;
2208
              SUB ;
2209
              ISNAT ;
2210
              IF_NONE { PUSH int 220 ; FAILWITH } {} ;
2211
              DIG 2 ;
2212
              SLICE ;
2213
              IF_NONE { PUSH int 222 ; FAILWITH } {} } ;
2214
          DUP ;
2215
          DUP 4 ;
2216
          DUP 8 ;
2217
          DUP 7 ;
2218
          DUP 7 ;
2219
          DUP 6 ;
2220
          DUP 8 ;
2221
          PAIR 3 ;
2222
          DUP 13 ;
2223
          DUP 13 ;
2224
          KECCAK ;
2225
          PAIR 4 ;
2226
          EXEC ;
2227
          EXEC ;
2228
          PUSH nat 2 ;
2229
          GET ;
2230
          IF_NONE { PUSH int 551 ; FAILWITH } {} ;
2231
          EXEC ;
2232
          DUP 7 ;
2233
          SWAP ;
2234
          DUP ;
2235
          DUG 2 ;
2236
          DUP 6 ;
2237
          DUP 5 ;
2238
          DUP 7 ;
2239
          PAIR 3 ;
2240
          DUP 14 ;
2241
          DUP 16 ;
2242
          KECCAK ;
2243
          PAIR 4 ;
2244
          DIG 2 ;
2245
          DROP ;
2246
          DIG 2 ;
2247
          DROP ;
2248
          DIG 2 ;
2249
          DROP ;
2250
          DIG 2 ;
2251
          DROP ;
2252
          DIG 2 ;
2253
          DROP ;
2254
          DIG 2 ;
2255
          DROP ;
2256
          DIG 2 ;
2257
          DROP ;
2258
          DIG 2 ;
2259
          DROP ;
2260
          DIG 2 ;
2261
          DROP ;
2262
          DIG 2 ;
2263
          DROP ;
2264
          DIG 2 ;
2265
          DROP ;
2266
          DIG 2 ;
2267
          DROP ;
2268
          DIG 2 ;
2269
          DROP ;
2270
          DIG 2 ;
2271
          DROP ;
2272
          EXEC } }