BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • StakerDAO
FA1
operations (103)Storage Code Interact Tokens Fork Statistics Details
Latest
​x
715
1381
 
1
parameter (or
2
            (or
3
              (or
4
                (pair %voteForProposal (nat :proposalId)
5
                                       (pair (key :votePk) (signature :voteSig)))
6
                (pair %getBalance (address :owner) (contract nat)))
7
              (or (pair %getTotalSupply unit (contract nat)) (bytes %fund)))
8
            (or
9
              (or
10
                (or (set %newCouncil key_hash)
11
                    (pair %transfer (address :from) (pair (address :to) (nat :value))))
12
                (or
13
                  (pair %newProposal (string :description)
14
                                     (map :newPolicy string (pair bytes string)))
15
                  (unit %freeze)))
16
              (or (pair %withdraw (address :to) (mutez :amount))
17
                  (lambda :successor %setSuccessor
18
                    (or
19
                      (or
20
                        (pair (nat :proposalId)
21
                              (pair (key :votePk) (signature :voteSig)))
22
                        (pair (address :owner) (contract nat)))
23
                      (or (pair unit (contract nat)) bytes))
24
                    operation))));
25
storage (pair
26
          (pair (pair address (set key_hash))
27
                (pair (map string (pair bytes string))
28
                      (pair
29
                        (list (pair (pair string (map string (pair bytes string))) bytes))
30
                        (map key_hash nat))))
31
          (pair (pair nat nat)
32
                (pair (big_map address nat)
33
                      (pair bool
34
                            (option (lambda
35
                                     (or
36
                                       (or (pair nat (pair key signature))
37
                                           (pair address (contract nat)))
38
                                       (or (pair unit (contract nat)) bytes))
39
                                     operation))))));
40
code { CAST (pair
41
              (or
42
                (or (or (pair nat (pair key signature)) (pair address (contract nat)))
43
                    (or (pair unit (contract nat)) bytes))
44
                (or
45
                  (or (or (set key_hash) (pair address (pair address nat)))
46
                      (or (pair string (map string (pair bytes string))) unit))
47
                  (or (pair address mutez)
48
                      (lambda
49
                        (or
50
                          (or (pair nat (pair key signature))
51
                              (pair address (contract nat)))
52
                          (or (pair unit (contract nat)) bytes))
53
                        operation))))
54
              (pair
55
                (pair (pair address (set key_hash))
56
                      (pair (map string (pair bytes string))
57
                            (pair
58
                              (list (pair (pair string (map string (pair bytes string)))
59
                                         bytes))
60
                              (map key_hash nat))))
61
                (pair (pair nat nat)
62
                      (pair (big_map address nat)
63
                            (pair bool
64
                                  (option (lambda
65
                                           (or
66
                                             (or (pair nat (pair key signature))
67
                                                 (pair address (contract nat)))
68
                                             (or (pair unit (contract nat)) bytes))
69
                                           operation))))))) ;
70
       DUP ;
71
       CAR ;
72
       DIP { CDR } ;
73
       IF_LEFT
74
         { DIP { DUP } ;
75
           SWAP ;
76
           CDR ;
77
           CDR ;
78
           CDR ;
79
           CDR ;
80
           IF_NONE
81
             { DIP { DUP } ;
82
               SWAP ;
83
               CDR ;
84
               CDR ;
85
               CDR ;
86
               CAR ;
87
               IF
88
                 { PUSH unit Unit ; PUSH string "ContractFrozen" ; PAIR ; FAILWITH }
89
                 {} ;
90
               IF_LEFT
91
                 { IF_LEFT
92
                     { DIP { DUP ;
93
                             CDR ;
94
                             CAR ;
95
                             CAR ;
96
                             DUP ;
97
                             NOW ;
98
                             PUSH timestamp "1858-11-17T00:00:00Z" ;
99
                             SWAP ;
100
                             SUB ;
101
                             DIP { PUSH nat 86400 } ;
102
                             EDIV ;
103
                             IF_NONE
104
                               { PUSH string "Internal: extractDate: unexpected (1)" ;
105
                                 FAILWITH }
106
                               {} ;
107
                             CAR ;
108
                             PUSH nat 678575 ;
109
                             ADD ;
110
                             DIP { PUSH nat 146097 } ;
111
                             EDIV ;
112
                             IF_NONE
113
                               { PUSH string "Internal: toOrdinalDate: unexpected (1)" ;
114
                                 FAILWITH }
115
                               {} ;
116
                             DUP ;
117
                             CAR ;
118
                             DIP { CDR } ;
119
                             DIP { DUP ;
120
                                   DIP { PUSH nat 36524 } ;
121
                                   EDIV ;
122
                                   IF_NONE
123
                                     { PUSH string "Internal: toOrdinalDate: unexpected (2)" ;
124
                                       FAILWITH }
125
                                     {} ;
126
                                   CAR ;
127
                                   DUP ;
128
                                   PUSH nat 3 ;
129
                                   COMPARE ;
130
                                   GT ;
131
                                   IF {} { DROP ; PUSH nat 3 } ;
132
                                   DUP ;
133
                                   DIP { SWAP } ;
134
                                   PUSH nat 36524 ;
135
                                   MUL ;
136
                                   SWAP ;
137
                                   SUB ;
138
                                   DIP { PUSH nat 1461 } ;
139
                                   EDIV ;
140
                                   IF_NONE
141
                                     { PUSH string "Internal: toOrdinalDate: unexpected (3)" ;
142
                                       FAILWITH }
143
                                     {} ;
144
                                   DUP ;
145
                                   CAR ;
146
                                   DIP { CDR } ;
147
                                   SWAP ;
148
                                   DUP ;
149
                                   DIP { DIP { PUSH nat 365 } ;
150
                                         EDIV ;
151
                                         IF_NONE
152
                                           { PUSH string "Internal: toOrdinalDate: unexpected (4)" ;
153
                                             FAILWITH }
154
                                           {} ;
155
                                         CAR ;
156
                                         DUP ;
157
                                         PUSH nat 3 ;
158
                                         COMPARE ;
159
                                         GT ;
160
                                         IF {} { DROP ; PUSH nat 3 } ;
161
                                         DUP ;
162
                                         DIP {} ;
163
                                         PUSH nat 365 ;
164
                                         MUL } ;
165
                                   SUB ;
166
                                   PUSH nat 1 ;
167
                                   ADD ;
168
                                   ISNAT ;
169
                                   IF_NONE
170
                                     { PUSH string "Internal: toOrdinalDate: unexpected (5)" ;
171
                                       FAILWITH }
172
                                     {} } ;
173
                             SWAP ;
174
                             DIP { PUSH nat 400 ;
175
                                   MUL ;
176
                                   PUSH nat 1 ;
177
                                   ADD ;
178
                                   DIP {} ;
179
                                   ADD ;
180
                                   DIP { PUSH nat 4 ; MUL } ;
181
                                   ADD ;
182
                                   DIP { PUSH nat 100 ; MUL } ;
183
                                   ADD } ;
184
                             SWAP ;
185
                             DUP ;
186
                             DIP { DUP ;
187
                                   DIP { DUP } ;
188
                                   DIP { PUSH nat 400 } ;
189
                                   EDIV ;
190
                                   IF_NONE
191
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
192
                                       FAILWITH }
193
                                     {} ;
194
                                   CDR ;
195
                                   INT ;
196
                                   EQ ;
197
                                   SWAP ;
198
                                   DIP { PUSH nat 100 } ;
199
                                   EDIV ;
200
                                   IF_NONE
201
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
202
                                       FAILWITH }
203
                                     {} ;
204
                                   CDR ;
205
                                   INT ;
206
                                   NEQ ;
207
                                   OR ;
208
                                   SWAP ;
209
                                   DIP { PUSH nat 4 } ;
210
                                   EDIV ;
211
                                   IF_NONE
212
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
213
                                       FAILWITH }
214
                                     {} ;
215
                                   CDR ;
216
                                   INT ;
217
                                   EQ ;
218
                                   AND ;
219
                                   PUSH (list nat) { 31 ; 30 ; 31 ; 30 ; 31 ; 31 ; 30 ; 31 ; 30 ; 31 } ;
220
                                   SWAP ;
221
                                   IF { PUSH nat 29 } { PUSH nat 28 } ;
222
                                   CONS ;
223
                                   PUSH nat 31 ;
224
                                   CONS ;
225
                                   DIP { PUSH nat 1 ;
226
                                         SWAP ;
227
                                         SUB ;
228
                                         ISNAT ;
229
                                         IF_NONE
230
                                           { PUSH string "Internal: yearDayToMonthAndDay: year day <= 1" ;
231
                                             FAILWITH }
232
                                           {} ;
233
                                         SOME ;
234
                                         DIP { NONE nat ; PUSH nat 0 } } ;
235
                                   ITER { SWAP ;
236
                                          IF_NONE
237
                                            { DROP ; NONE nat }
238
                                            { DIP 2 { PUSH nat 1 ; ADD } ;
239
                                              DUP ;
240
                                              DIP { SWAP } ;
241
                                              SUB ;
242
                                              ISNAT ;
243
                                              IF_NONE
244
                                                { SWAP ;
245
                                                  DIP { DIP { DROP } ; PUSH nat 1 ; ADD ; SOME } ;
246
                                                  NONE nat }
247
                                                { DIP { DROP } ; SOME } } } ;
248
                                   DROP ;
249
                                   DIP { IF_NONE
250
                                           { PUSH string "Internal: yearDayToMonthAndDay: year day is greater than number of days in year" ;
251
                                             FAILWITH }
252
                                           {} } } ;
253
                             PUSH nat 2020 ;
254
                             SWAP ;
255
                             SUB ;
256
                             ISNAT ;
257
                             IF_NONE
258
                               { PUSH string "Internal: getCurrentStage: start year in future" ;
259
                                 FAILWITH }
260
                               {} ;
261
                             PUSH nat 48 ;
262
                             MUL ;
263
                             DIP { PUSH int -1 ;
264
                                   ADD ;
265
                                   ISNAT ;
266
                                   IF_NONE
267
                                     { PUSH string "Internal: getCurrentStage: month = 0" ;
268
                                       FAILWITH }
269
                                     {} ;
270
                                   PUSH nat 4 ;
271
                                   MUL } ;
272
                             ADD ;
273
                             DIP { DUP ;
274
                                   PUSH nat 8 ;
275
                                   COMPARE ;
276
                                   GT ;
277
                                   IF
278
                                     { DROP ; PUSH nat 0 }
279
                                     { DUP ;
280
                                       PUSH nat 15 ;
281
                                       COMPARE ;
282
                                       GT ;
283
                                       IF
284
                                         { DROP ; PUSH nat 1 }
285
                                         { PUSH nat 22 ;
286
                                           COMPARE ;
287
                                           GT ;
288
                                           IF { PUSH nat 2 } { PUSH nat 3 } } } } ;
289
                             ADD ;
290
                             DUP ;
291
                             DIP { SWAP } ;
292
                             COMPARE ;
293
                             DUP ;
294
                             EQ ;
295
                             IF
296
                               { DROP ; DROP ; DROP }
297
                               { LT ;
298
                                 IF
299
                                   { DROP ; PUSH string "WrongStage" ; PAIR ; FAILWITH }
300
                                   { DUP ;
301
                                     DIP { DIP { PUSH nat 4 ;
302
                                                 SWAP ;
303
                                                 EDIV ;
304
                                                 IF_NONE
305
                                                   { PUSH string "Internal: splitCounter: unexpected (1)" ;
306
                                                     FAILWITH }
307
                                                   {} ;
308
                                                 DUP ;
309
                                                 CAR ;
310
                                                 DIP { CDR } ;
311
                                                 DIP {} ;
312
                                                 DIP { DROP } } ;
313
                                           PUSH nat 4 ;
314
                                           SWAP ;
315
                                           EDIV ;
316
                                           IF_NONE
317
                                             { PUSH string "Internal: splitCounter: unexpected (1)" ;
318
                                               FAILWITH }
319
                                             {} ;
320
                                           DUP ;
321
                                           CAR ;
322
                                           DIP { CDR } ;
323
                                           DIP {} ;
324
                                           DIP { DROP } ;
325
                                           COMPARE ;
326
                                           EQ ;
327
                                           IF
328
                                             {}
329
                                             { DUP ;
330
                                               DUP ;
331
                                               CAR ;
332
                                               CDR ;
333
                                               CDR ;
334
                                               CDR ;
335
                                               EMPTY_MAP nat nat ;
336
                                               SWAP ;
337
                                               ITER { DIP { DUP } ;
338
                                                      CDR ;
339
                                                      DUP ;
340
                                                      DIP { SWAP } ;
341
                                                      GET ;
342
                                                      IF_NONE
343
                                                        { DIP { PUSH (option nat) (Some 1) } ;
344
                                                          UPDATE }
345
                                                        { PUSH nat 1 ; ADD ; SOME ; SWAP ; UPDATE } } ;
346
                                               NONE (map string (pair bytes string)) ;
347
                                               SWAP ;
348
                                               DIG 2 ;
349
                                               DUP ;
350
                                               CAR ;
351
                                               CAR ;
352
                                               CDR ;
353
                                               SIZE ;
354
                                               SWAP ;
355
                                               DIP { SWAP } ;
356
                                               CAR ;
357
                                               CDR ;
358
                                               CDR ;
359
                                               CAR ;
360
                                               PUSH nat 0 ;
361
                                               SWAP ;
362
                                               ITER { CAR ;
363
                                                      DIP { DUP ;
364
                                                            DIP { DIP { DUP ; DUG 3 } ;
365
                                                                  GET ;
366
                                                                  IF_NONE
367
                                                                    { PUSH nat 0 }
368
                                                                    {} ;
369
                                                                  PUSH nat 2 ;
370
                                                                  MUL ;
371
                                                                  DIP { DUP } ;
372
                                                                  COMPARE ;
373
                                                                  GT } } ;
374
                                                      DIG 4 ;
375
                                                      DIG 3 ;
376
                                                      IF
377
                                                        { IF_NONE
378
                                                            { CDR ; SOME }
379
                                                            { PUSH string "Internal: \"calcWinner: more than one winner\"" ;
380
                                                              FAILWITH } }
381
                                                        { DIP { DROP } } ;
382
                                                      DUG 3 ;
383
                                                      DIP { SWAP } ;
384
                                                      PUSH nat 1 ;
385
                                                      ADD } ;
386
                                               DROP ;
387
                                               DROP ;
388
                                               DROP ;
389
                                               IF_NONE
390
                                                 {}
391
                                                 { DIP { DUP ; DIP { CDR } ; CAR } ;
392
                                                   DIP { DUP ; DIP { CAR } ; CDR } ;
393
                                                   DIP { DUP ; DIP { CDR } ; CAR } ;
394
                                                   DIP { DROP } ;
395
                                                   PAIR ;
396
                                                   SWAP ;
397
                                                   PAIR ;
398
                                                   PAIR } ;
399
                                               NIL (pair
400
                                                     (pair string
401
                                                           (map string
402
                                                                (pair bytes string)))
403
                                                     bytes) ;
404
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
405
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
406
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
407
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
408
                                               DIP { DROP } ;
409
                                               PAIR ;
410
                                               SWAP ;
411
                                               PAIR ;
412
                                               SWAP ;
413
                                               PAIR ;
414
                                               PAIR ;
415
                                               EMPTY_MAP key_hash nat ;
416
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
417
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
418
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
419
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
420
                                               DIP { DROP } ;
421
                                               SWAP ;
422
                                               PAIR ;
423
                                               SWAP ;
424
                                               PAIR ;
425
                                               SWAP ;
426
                                               PAIR ;
427
                                               PAIR } } ;
428
                                     DIP { DUP ; DIP { CAR } ; CDR } ;
429
                                     DIP { DUP ; DIP { CDR } ; CAR } ;
430
                                     DIP { DUP ; DIP { CDR } ; CAR } ;
431
                                     DIP { DROP } ;
432
                                     PAIR ;
433
                                     PAIR ;
434
                                     SWAP ;
435
                                     PAIR } } } ;
436
                       DIP { DUP ;
437
                             CDR ;
438
                             CAR ;
439
                             CAR ;
440
                             DUP ;
441
                             PUSH nat 4 ;
442
                             SWAP ;
443
                             EDIV ;
444
                             IF_NONE
445
                               { PUSH string "Internal: splitCounter: unexpected (1)" ;
446
                                 FAILWITH }
447
                               {} ;
448
                             DUP ;
449
                             CAR ;
450
                             DIP { CDR } ;
451
                             DIP {} ;
452
                             DROP ;
453
                             PUSH nat 2 ;
454
                             COMPARE ;
455
                             EQ ;
456
                             IF
457
                               { DROP }
458
                               { PUSH string "WrongStage" ; PAIR ; FAILWITH } } ;
459
                       DIP { DUP } ;
460
                       DUP ;
461
                       CDR ;
462
                       CAR ;
463
                       DUP ;
464
                       HASH_KEY ;
465
                       DIP { DIG 2 } ;
466
                       DUP ;
467
                       DIP 2 { DUP ; CAR ; CAR ; CDR } ;
468
                       DUG 2 ;
469
                       MEM ;
470
                       IF
471
                         { DIP { CAR ; CDR ; CDR ; CDR } ;
472
                           GET ;
473
                           IF_NONE
474
                             {}
475
                             { PUSH string "VoteAlreadySubmitted" ; PAIR ; FAILWITH } }
476
                         { PUSH string "NotInCouncil" ; PAIR ; FAILWITH } ;
477
                       DIP { DIP { DUP } ;
478
                             DUP ;
479
                             CAR ;
480
                             DIP { CDR ; CDR ; SWAP ; CAR ; CDR ; CDR ; CAR } } ;
481
                       DUG 2 ;
482
                       DUP ;
483
                       DIG 2 ;
484
                       DIP { INT ;
485
                             NONE (pair (pair string (map string (pair bytes string)))
486
                                        bytes) } ;
487
                       ITER { DIP { SWAP } ;
488
                              SWAP ;
489
                              DUP ;
490
                              EQ ;
491
                              IF { DIP 2 { DROP } ; DIP { SOME } } { SWAP ; DROP } ;
492
                              PUSH int 1 ;
493
                              SWAP ;
494
                              SUB ;
495
                              SWAP } ;
496
                       DIP { DROP } ;
497
                       IF_NONE
498
                         { PUSH string "InvalidProposalId" ; PAIR ; FAILWITH }
499
                         { CDR ;
500
                           DUP ;
501
                           DIP { SELF ;
502
                                 ADDRESS ;
503
                                 DIP { DIP 4 { DUP ; CDR ; CAR ; CAR } ; DIG 4 } ;
504
                                 PAIR } ;
505
                           PAIR ;
506
                           DIP { DROP } ;
507
                           PACK ;
508
                           DIG 2 ;
509
                           DUP ;
510
                           DIP { DIP { DIG 2 } ;
511
                                 DUP ;
512
                                 DIP { CHECK_SIGNATURE } ;
513
                                 SWAP ;
514
                                 IF
515
                                   { DROP }
516
                                   { PUSH string "InvalidSignature" ; PAIR ; FAILWITH } } ;
517
                           HASH_KEY ;
518
                           DIP { SOME } ;
519
                           DIP 2 { DUP ; CAR ; CDR ; CDR ; CDR } ;
520
                           UPDATE ;
521
                           DIP { DUP ; DIP { CDR } ; CAR } ;
522
                           DIP { DUP ; DIP { CAR } ; CDR } ;
523
                           DIP { DUP ; DIP { CAR } ; CDR } ;
524
                           DIP { DUP ; DIP { CAR } ; CDR } ;
525
                           DIP { DROP } ;
526
                           SWAP ;
527
                           PAIR ;
528
                           SWAP ;
529
                           PAIR ;
530
                           SWAP ;
531
                           PAIR ;
532
                           PAIR } ;
533
                       NIL operation ;
534
                       PAIR }
535
                     { DUP ;
536
                       CAR ;
537
                       DIP { CDR } ;
538
                       DIP { DIP { DUP } ; SWAP } ;
539
                       PAIR ;
540
                       DUP ;
541
                       CAR ;
542
                       DIP { CDR } ;
543
                       DIP { CDR ; CDR ; CAR } ;
544
                       GET ;
545
                       IF_NONE { PUSH nat 0 } {} ;
546
                       DIP { AMOUNT } ;
547
                       TRANSFER_TOKENS ;
548
                       NIL operation ;
549
                       SWAP ;
550
                       CONS ;
551
                       PAIR } }
552
                 { IF_LEFT
553
                     { DUP ;
554
                       CAR ;
555
                       DIP { CDR } ;
556
                       DIP { DIP { DUP } ; SWAP } ;
557
                       PAIR ;
558
                       DUP ;
559
                       CAR ;
560
                       DIP { CDR } ;
561
                       DROP ;
562
                       CDR ;
563
                       CAR ;
564
                       CDR ;
565
                       DIP { AMOUNT } ;
566
                       TRANSFER_TOKENS ;
567
                       NIL operation ;
568
                       SWAP ;
569
                       CONS ;
570
                       PAIR }
571
                     { DROP ; NIL operation ; PAIR } } }
572
             { SWAP ; EXEC ; NIL operation ; SWAP ; CONS ; PAIR } }
573
         { IF_LEFT
574
             { DIP { DUP } ;
575
               SWAP ;
576
               CDR ;
577
               CDR ;
578
               CDR ;
579
               CAR ;
580
               IF
581
                 { PUSH unit Unit ; PUSH string "ContractFrozen" ; PAIR ; FAILWITH }
582
                 {} ;
583
               DIP { DUP } ;
584
               SWAP ;
585
               SWAP ;
586
               DIP { CAR ;
587
                     CAR ;
588
                     CAR ;
589
                     SENDER ;
590
                     DIP { DUP } ;
591
                     COMPARE ;
592
                     EQ ;
593
                     IF { DROP } { PUSH string "SenderCheckFailed" ; PAIR ; FAILWITH } } ;
594
               IF_LEFT
595
                 { IF_LEFT
596
                     { DIP { DUP ;
597
                             CDR ;
598
                             CAR ;
599
                             CAR ;
600
                             DUP ;
601
                             NOW ;
602
                             PUSH timestamp "1858-11-17T00:00:00Z" ;
603
                             SWAP ;
604
                             SUB ;
605
                             DIP { PUSH nat 86400 } ;
606
                             EDIV ;
607
                             IF_NONE
608
                               { PUSH string "Internal: extractDate: unexpected (1)" ;
609
                                 FAILWITH }
610
                               {} ;
611
                             CAR ;
612
                             PUSH nat 678575 ;
613
                             ADD ;
614
                             DIP { PUSH nat 146097 } ;
615
                             EDIV ;
616
                             IF_NONE
617
                               { PUSH string "Internal: toOrdinalDate: unexpected (1)" ;
618
                                 FAILWITH }
619
                               {} ;
620
                             DUP ;
621
                             CAR ;
622
                             DIP { CDR } ;
623
                             DIP { DUP ;
624
                                   DIP { PUSH nat 36524 } ;
625
                                   EDIV ;
626
                                   IF_NONE
627
                                     { PUSH string "Internal: toOrdinalDate: unexpected (2)" ;
628
                                       FAILWITH }
629
                                     {} ;
630
                                   CAR ;
631
                                   DUP ;
632
                                   PUSH nat 3 ;
633
                                   COMPARE ;
634
                                   GT ;
635
                                   IF {} { DROP ; PUSH nat 3 } ;
636
                                   DUP ;
637
                                   DIP { SWAP } ;
638
                                   PUSH nat 36524 ;
639
                                   MUL ;
640
                                   SWAP ;
641
                                   SUB ;
642
                                   DIP { PUSH nat 1461 } ;
643
                                   EDIV ;
644
                                   IF_NONE
645
                                     { PUSH string "Internal: toOrdinalDate: unexpected (3)" ;
646
                                       FAILWITH }
647
                                     {} ;
648
                                   DUP ;
649
                                   CAR ;
650
                                   DIP { CDR } ;
651
                                   SWAP ;
652
                                   DUP ;
653
                                   DIP { DIP { PUSH nat 365 } ;
654
                                         EDIV ;
655
                                         IF_NONE
656
                                           { PUSH string "Internal: toOrdinalDate: unexpected (4)" ;
657
                                             FAILWITH }
658
                                           {} ;
659
                                         CAR ;
660
                                         DUP ;
661
                                         PUSH nat 3 ;
662
                                         COMPARE ;
663
                                         GT ;
664
                                         IF {} { DROP ; PUSH nat 3 } ;
665
                                         DUP ;
666
                                         DIP {} ;
667
                                         PUSH nat 365 ;
668
                                         MUL } ;
669
                                   SUB ;
670
                                   PUSH nat 1 ;
671
                                   ADD ;
672
                                   ISNAT ;
673
                                   IF_NONE
674
                                     { PUSH string "Internal: toOrdinalDate: unexpected (5)" ;
675
                                       FAILWITH }
676
                                     {} } ;
677
                             SWAP ;
678
                             DIP { PUSH nat 400 ;
679
                                   MUL ;
680
                                   PUSH nat 1 ;
681
                                   ADD ;
682
                                   DIP {} ;
683
                                   ADD ;
684
                                   DIP { PUSH nat 4 ; MUL } ;
685
                                   ADD ;
686
                                   DIP { PUSH nat 100 ; MUL } ;
687
                                   ADD } ;
688
                             SWAP ;
689
                             DUP ;
690
                             DIP { DUP ;
691
                                   DIP { DUP } ;
692
                                   DIP { PUSH nat 400 } ;
693
                                   EDIV ;
694
                                   IF_NONE
695
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
696
                                       FAILWITH }
697
                                     {} ;
698
                                   CDR ;
699
                                   INT ;
700
                                   EQ ;
701
                                   SWAP ;
702
                                   DIP { PUSH nat 100 } ;
703
                                   EDIV ;
704
                                   IF_NONE
705
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
706
                                       FAILWITH }
707
                                     {} ;
708
                                   CDR ;
709
                                   INT ;
710
                                   NEQ ;
711
                                   OR ;
712
                                   SWAP ;
713
                                   DIP { PUSH nat 4 } ;
714
                                   EDIV ;
715
                                   IF_NONE
716
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
717
                                       FAILWITH }
718
                                     {} ;
719
                                   CDR ;
720
                                   INT ;
721
                                   EQ ;
722
                                   AND ;
723
                                   PUSH (list nat) { 31 ; 30 ; 31 ; 30 ; 31 ; 31 ; 30 ; 31 ; 30 ; 31 } ;
724
                                   SWAP ;
725
                                   IF { PUSH nat 29 } { PUSH nat 28 } ;
726
                                   CONS ;
727
                                   PUSH nat 31 ;
728
                                   CONS ;
729
                                   DIP { PUSH nat 1 ;
730
                                         SWAP ;
731
                                         SUB ;
732
                                         ISNAT ;
733
                                         IF_NONE
734
                                           { PUSH string "Internal: yearDayToMonthAndDay: year day <= 1" ;
735
                                             FAILWITH }
736
                                           {} ;
737
                                         SOME ;
738
                                         DIP { NONE nat ; PUSH nat 0 } } ;
739
                                   ITER { SWAP ;
740
                                          IF_NONE
741
                                            { DROP ; NONE nat }
742
                                            { DIP 2 { PUSH nat 1 ; ADD } ;
743
                                              DUP ;
744
                                              DIP { SWAP } ;
745
                                              SUB ;
746
                                              ISNAT ;
747
                                              IF_NONE
748
                                                { SWAP ;
749
                                                  DIP { DIP { DROP } ; PUSH nat 1 ; ADD ; SOME } ;
750
                                                  NONE nat }
751
                                                { DIP { DROP } ; SOME } } } ;
752
                                   DROP ;
753
                                   DIP { IF_NONE
754
                                           { PUSH string "Internal: yearDayToMonthAndDay: year day is greater than number of days in year" ;
755
                                             FAILWITH }
756
                                           {} } } ;
757
                             PUSH nat 2020 ;
758
                             SWAP ;
759
                             SUB ;
760
                             ISNAT ;
761
                             IF_NONE
762
                               { PUSH string "Internal: getCurrentStage: start year in future" ;
763
                                 FAILWITH }
764
                               {} ;
765
                             PUSH nat 48 ;
766
                             MUL ;
767
                             DIP { PUSH int -1 ;
768
                                   ADD ;
769
                                   ISNAT ;
770
                                   IF_NONE
771
                                     { PUSH string "Internal: getCurrentStage: month = 0" ;
772
                                       FAILWITH }
773
                                     {} ;
774
                                   PUSH nat 4 ;
775
                                   MUL } ;
776
                             ADD ;
777
                             DIP { DUP ;
778
                                   PUSH nat 8 ;
779
                                   COMPARE ;
780
                                   GT ;
781
                                   IF
782
                                     { DROP ; PUSH nat 0 }
783
                                     { DUP ;
784
                                       PUSH nat 15 ;
785
                                       COMPARE ;
786
                                       GT ;
787
                                       IF
788
                                         { DROP ; PUSH nat 1 }
789
                                         { PUSH nat 22 ;
790
                                           COMPARE ;
791
                                           GT ;
792
                                           IF { PUSH nat 2 } { PUSH nat 3 } } } } ;
793
                             ADD ;
794
                             DUP ;
795
                             DIP { SWAP } ;
796
                             COMPARE ;
797
                             DUP ;
798
                             EQ ;
799
                             IF
800
                               { DROP ; DROP ; DROP }
801
                               { LT ;
802
                                 IF
803
                                   { DROP ; PUSH string "WrongStage" ; PAIR ; FAILWITH }
804
                                   { DUP ;
805
                                     DIP { DIP { PUSH nat 4 ;
806
                                                 SWAP ;
807
                                                 EDIV ;
808
                                                 IF_NONE
809
                                                   { PUSH string "Internal: splitCounter: unexpected (1)" ;
810
                                                     FAILWITH }
811
                                                   {} ;
812
                                                 DUP ;
813
                                                 CAR ;
814
                                                 DIP { CDR } ;
815
                                                 DIP {} ;
816
                                                 DIP { DROP } } ;
817
                                           PUSH nat 4 ;
818
                                           SWAP ;
819
                                           EDIV ;
820
                                           IF_NONE
821
                                             { PUSH string "Internal: splitCounter: unexpected (1)" ;
822
                                               FAILWITH }
823
                                             {} ;
824
                                           DUP ;
825
                                           CAR ;
826
                                           DIP { CDR } ;
827
                                           DIP {} ;
828
                                           DIP { DROP } ;
829
                                           COMPARE ;
830
                                           EQ ;
831
                                           IF
832
                                             {}
833
                                             { DUP ;
834
                                               DUP ;
835
                                               CAR ;
836
                                               CDR ;
837
                                               CDR ;
838
                                               CDR ;
839
                                               EMPTY_MAP nat nat ;
840
                                               SWAP ;
841
                                               ITER { DIP { DUP } ;
842
                                                      CDR ;
843
                                                      DUP ;
844
                                                      DIP { SWAP } ;
845
                                                      GET ;
846
                                                      IF_NONE
847
                                                        { DIP { PUSH (option nat) (Some 1) } ;
848
                                                          UPDATE }
849
                                                        { PUSH nat 1 ; ADD ; SOME ; SWAP ; UPDATE } } ;
850
                                               NONE (map string (pair bytes string)) ;
851
                                               SWAP ;
852
                                               DIG 2 ;
853
                                               DUP ;
854
                                               CAR ;
855
                                               CAR ;
856
                                               CDR ;
857
                                               SIZE ;
858
                                               SWAP ;
859
                                               DIP { SWAP } ;
860
                                               CAR ;
861
                                               CDR ;
862
                                               CDR ;
863
                                               CAR ;
864
                                               PUSH nat 0 ;
865
                                               SWAP ;
866
                                               ITER { CAR ;
867
                                                      DIP { DUP ;
868
                                                            DIP { DIP { DUP ; DUG 3 } ;
869
                                                                  GET ;
870
                                                                  IF_NONE
871
                                                                    { PUSH nat 0 }
872
                                                                    {} ;
873
                                                                  PUSH nat 2 ;
874
                                                                  MUL ;
875
                                                                  DIP { DUP } ;
876
                                                                  COMPARE ;
877
                                                                  GT } } ;
878
                                                      DIG 4 ;
879
                                                      DIG 3 ;
880
                                                      IF
881
                                                        { IF_NONE
882
                                                            { CDR ; SOME }
883
                                                            { PUSH string "Internal: \"calcWinner: more than one winner\"" ;
884
                                                              FAILWITH } }
885
                                                        { DIP { DROP } } ;
886
                                                      DUG 3 ;
887
                                                      DIP { SWAP } ;
888
                                                      PUSH nat 1 ;
889
                                                      ADD } ;
890
                                               DROP ;
891
                                               DROP ;
892
                                               DROP ;
893
                                               IF_NONE
894
                                                 {}
895
                                                 { DIP { DUP ; DIP { CDR } ; CAR } ;
896
                                                   DIP { DUP ; DIP { CAR } ; CDR } ;
897
                                                   DIP { DUP ; DIP { CDR } ; CAR } ;
898
                                                   DIP { DROP } ;
899
                                                   PAIR ;
900
                                                   SWAP ;
901
                                                   PAIR ;
902
                                                   PAIR } ;
903
                                               NIL (pair
904
                                                     (pair string
905
                                                           (map string
906
                                                                (pair bytes string)))
907
                                                     bytes) ;
908
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
909
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
910
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
911
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
912
                                               DIP { DROP } ;
913
                                               PAIR ;
914
                                               SWAP ;
915
                                               PAIR ;
916
                                               SWAP ;
917
                                               PAIR ;
918
                                               PAIR ;
919
                                               EMPTY_MAP key_hash nat ;
920
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
921
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
922
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
923
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
924
                                               DIP { DROP } ;
925
                                               SWAP ;
926
                                               PAIR ;
927
                                               SWAP ;
928
                                               PAIR ;
929
                                               SWAP ;
930
                                               PAIR ;
931
                                               PAIR } } ;
932
                                     DIP { DUP ; DIP { CAR } ; CDR } ;
933
                                     DIP { DUP ; DIP { CDR } ; CAR } ;
934
                                     DIP { DUP ; DIP { CDR } ; CAR } ;
935
                                     DIP { DROP } ;
936
                                     PAIR ;
937
                                     PAIR ;
938
                                     SWAP ;
939
                                     PAIR } } ;
940
                             DUP ;
941
                             DUP ;
942
                             CDR ;
943
                             CAR ;
944
                             CAR ;
945
                             DUP ;
946
                             PUSH nat 4 ;
947
                             SWAP ;
948
                             EDIV ;
949
                             IF_NONE
950
                               { PUSH string "Internal: splitCounter: unexpected (1)" ;
951
                                 FAILWITH }
952
                               {} ;
953
                             DUP ;
954
                             CAR ;
955
                             DIP { CDR } ;
956
                             DIP {} ;
957
                             DROP ;
958
                             PUSH nat 3 ;
959
                             COMPARE ;
960
                             NEQ ;
961
                             IF
962
                               { DROP }
963
                               { PUSH string "WrongStage" ; PAIR ; FAILWITH } ;
964
                             DUP ;
965
                             CDR ;
966
                             CAR ;
967
                             CAR ;
968
                             DUP ;
969
                             PUSH nat 4 ;
970
                             SWAP ;
971
                             EDIV ;
972
                             IF_NONE
973
                               { PUSH string "Internal: splitCounter: unexpected (1)" ;
974
                                 FAILWITH }
975
                               {} ;
976
                             DUP ;
977
                             CAR ;
978
                             DIP { CDR } ;
979
                             DIP {} ;
980
                             DROP ;
981
                             PUSH nat 2 ;
982
                             COMPARE ;
983
                             NEQ ;
984
                             IF
985
                               { DROP }
986
                               { PUSH string "WrongStage" ; PAIR ; FAILWITH } ;
987
                             DROP } ;
988
                       DIP { DUP ; DIP { CDR } ; CAR } ;
989
                       DIP { DUP ; DIP { CDR } ; CAR } ;
990
                       DIP { DUP ; DIP { CAR } ; CDR } ;
991
                       DIP { DROP } ;
992
                       SWAP ;
993
                       PAIR ;
994
                       PAIR ;
995
                       PAIR ;
996
                       NIL operation ;
997
                       PAIR }
998
                     { SWAP ;
999
                       DIP { DUP } ;
1000
                       SWAP ;
1001
                       DUP ;
1002
                       CDR ;
1003
                       CDR ;
1004
                       SWAP ;
1005
                       CAR ;
1006
                       DIP 2 { DUP } ;
1007
                       DIG 2 ;
1008
                       CDR ;
1009
                       CDR ;
1010
                       CAR ;
1011
                       DUP ;
1012
                       DIP 2 { DUP } ;
1013
                       DIG 2 ;
1014
                       GET ;
1015
                       IF_NONE
1016
                         { PUSH string "Address to be debited is not in ledger" ;
1017
                           FAILWITH }
1018
                         {} ;
1019
                       DIG 3 ;
1020
                       SWAP ;
1021
                       SUB ;
1022
                       DUP ;
1023
                       ISNAT ;
1024
                       IF_NONE
1025
                         { PUSH string "NotEnoughFunds" ; PAIR ; FAILWITH }
1026
                         { SWAP ; EQ ; IF { DROP ; NONE nat } { SOME } } ;
1027
                       DIG 2 ;
1028
                       UPDATE ;
1029
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1030
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1031
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1032
                       DIP { DROP } ;
1033
                       PAIR ;
1034
                       SWAP ;
1035
                       PAIR ;
1036
                       SWAP ;
1037
                       PAIR ;
1038
                       SWAP ;
1039
                       DUP ;
1040
                       CDR ;
1041
                       CDR ;
1042
                       SWAP ;
1043
                       CDR ;
1044
                       CAR ;
1045
                       DIP 2 { DUP } ;
1046
                       DIG 2 ;
1047
                       CDR ;
1048
                       CDR ;
1049
                       CAR ;
1050
                       DUP ;
1051
                       DIP 2 { DUP } ;
1052
                       DIG 2 ;
1053
                       GET ;
1054
                       IF_NONE { PUSH nat 0 } {} ;
1055
                       DIG 3 ;
1056
                       ADD ;
1057
                       SOME ;
1058
                       DIG 2 ;
1059
                       UPDATE ;
1060
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1061
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1062
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1063
                       DIP { DROP } ;
1064
                       PAIR ;
1065
                       SWAP ;
1066
                       PAIR ;
1067
                       SWAP ;
1068
                       PAIR ;
1069
                       NIL operation ;
1070
                       PAIR } }
1071
                 { IF_LEFT
1072
                     { DIP { DUP ;
1073
                             CDR ;
1074
                             CAR ;
1075
                             CAR ;
1076
                             DUP ;
1077
                             NOW ;
1078
                             PUSH timestamp "1858-11-17T00:00:00Z" ;
1079
                             SWAP ;
1080
                             SUB ;
1081
                             DIP { PUSH nat 86400 } ;
1082
                             EDIV ;
1083
                             IF_NONE
1084
                               { PUSH string "Internal: extractDate: unexpected (1)" ;
1085
                                 FAILWITH }
1086
                               {} ;
1087
                             CAR ;
1088
                             PUSH nat 678575 ;
1089
                             ADD ;
1090
                             DIP { PUSH nat 146097 } ;
1091
                             EDIV ;
1092
                             IF_NONE
1093
                               { PUSH string "Internal: toOrdinalDate: unexpected (1)" ;
1094
                                 FAILWITH }
1095
                               {} ;
1096
                             DUP ;
1097
                             CAR ;
1098
                             DIP { CDR } ;
1099
                             DIP { DUP ;
1100
                                   DIP { PUSH nat 36524 } ;
1101
                                   EDIV ;
1102
                                   IF_NONE
1103
                                     { PUSH string "Internal: toOrdinalDate: unexpected (2)" ;
1104
                                       FAILWITH }
1105
                                     {} ;
1106
                                   CAR ;
1107
                                   DUP ;
1108
                                   PUSH nat 3 ;
1109
                                   COMPARE ;
1110
                                   GT ;
1111
                                   IF {} { DROP ; PUSH nat 3 } ;
1112
                                   DUP ;
1113
                                   DIP { SWAP } ;
1114
                                   PUSH nat 36524 ;
1115
                                   MUL ;
1116
                                   SWAP ;
1117
                                   SUB ;
1118
                                   DIP { PUSH nat 1461 } ;
1119
                                   EDIV ;
1120
                                   IF_NONE
1121
                                     { PUSH string "Internal: toOrdinalDate: unexpected (3)" ;
1122
                                       FAILWITH }
1123
                                     {} ;
1124
                                   DUP ;
1125
                                   CAR ;
1126
                                   DIP { CDR } ;
1127
                                   SWAP ;
1128
                                   DUP ;
1129
                                   DIP { DIP { PUSH nat 365 } ;
1130
                                         EDIV ;
1131
                                         IF_NONE
1132
                                           { PUSH string "Internal: toOrdinalDate: unexpected (4)" ;
1133
                                             FAILWITH }
1134
                                           {} ;
1135
                                         CAR ;
1136
                                         DUP ;
1137
                                         PUSH nat 3 ;
1138
                                         COMPARE ;
1139
                                         GT ;
1140
                                         IF {} { DROP ; PUSH nat 3 } ;
1141
                                         DUP ;
1142
                                         DIP {} ;
1143
                                         PUSH nat 365 ;
1144
                                         MUL } ;
1145
                                   SUB ;
1146
                                   PUSH nat 1 ;
1147
                                   ADD ;
1148
                                   ISNAT ;
1149
                                   IF_NONE
1150
                                     { PUSH string "Internal: toOrdinalDate: unexpected (5)" ;
1151
                                       FAILWITH }
1152
                                     {} } ;
1153
                             SWAP ;
1154
                             DIP { PUSH nat 400 ;
1155
                                   MUL ;
1156
                                   PUSH nat 1 ;
1157
                                   ADD ;
1158
                                   DIP {} ;
1159
                                   ADD ;
1160
                                   DIP { PUSH nat 4 ; MUL } ;
1161
                                   ADD ;
1162
                                   DIP { PUSH nat 100 ; MUL } ;
1163
                                   ADD } ;
1164
                             SWAP ;
1165
                             DUP ;
1166
                             DIP { DUP ;
1167
                                   DIP { DUP } ;
1168
                                   DIP { PUSH nat 400 } ;
1169
                                   EDIV ;
1170
                                   IF_NONE
1171
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
1172
                                       FAILWITH }
1173
                                     {} ;
1174
                                   CDR ;
1175
                                   INT ;
1176
                                   EQ ;
1177
                                   SWAP ;
1178
                                   DIP { PUSH nat 100 } ;
1179
                                   EDIV ;
1180
                                   IF_NONE
1181
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
1182
                                       FAILWITH }
1183
                                     {} ;
1184
                                   CDR ;
1185
                                   INT ;
1186
                                   NEQ ;
1187
                                   OR ;
1188
                                   SWAP ;
1189
                                   DIP { PUSH nat 4 } ;
1190
                                   EDIV ;
1191
                                   IF_NONE
1192
                                     { PUSH string "Internal: isLeap: unexpected (1)" ;
1193
                                       FAILWITH }
1194
                                     {} ;
1195
                                   CDR ;
1196
                                   INT ;
1197
                                   EQ ;
1198
                                   AND ;
1199
                                   PUSH (list nat) { 31 ; 30 ; 31 ; 30 ; 31 ; 31 ; 30 ; 31 ; 30 ; 31 } ;
1200
                                   SWAP ;
1201
                                   IF { PUSH nat 29 } { PUSH nat 28 } ;
1202
                                   CONS ;
1203
                                   PUSH nat 31 ;
1204
                                   CONS ;
1205
                                   DIP { PUSH nat 1 ;
1206
                                         SWAP ;
1207
                                         SUB ;
1208
                                         ISNAT ;
1209
                                         IF_NONE
1210
                                           { PUSH string "Internal: yearDayToMonthAndDay: year day <= 1" ;
1211
                                             FAILWITH }
1212
                                           {} ;
1213
                                         SOME ;
1214
                                         DIP { NONE nat ; PUSH nat 0 } } ;
1215
                                   ITER { SWAP ;
1216
                                          IF_NONE
1217
                                            { DROP ; NONE nat }
1218
                                            { DIP 2 { PUSH nat 1 ; ADD } ;
1219
                                              DUP ;
1220
                                              DIP { SWAP } ;
1221
                                              SUB ;
1222
                                              ISNAT ;
1223
                                              IF_NONE
1224
                                                { SWAP ;
1225
                                                  DIP { DIP { DROP } ; PUSH nat 1 ; ADD ; SOME } ;
1226
                                                  NONE nat }
1227
                                                { DIP { DROP } ; SOME } } } ;
1228
                                   DROP ;
1229
                                   DIP { IF_NONE
1230
                                           { PUSH string "Internal: yearDayToMonthAndDay: year day is greater than number of days in year" ;
1231
                                             FAILWITH }
1232
                                           {} } } ;
1233
                             PUSH nat 2020 ;
1234
                             SWAP ;
1235
                             SUB ;
1236
                             ISNAT ;
1237
                             IF_NONE
1238
                               { PUSH string "Internal: getCurrentStage: start year in future" ;
1239
                                 FAILWITH }
1240
                               {} ;
1241
                             PUSH nat 48 ;
1242
                             MUL ;
1243
                             DIP { PUSH int -1 ;
1244
                                   ADD ;
1245
                                   ISNAT ;
1246
                                   IF_NONE
1247
                                     { PUSH string "Internal: getCurrentStage: month = 0" ;
1248
                                       FAILWITH }
1249
                                     {} ;
1250
                                   PUSH nat 4 ;
1251
                                   MUL } ;
1252
                             ADD ;
1253
                             DIP { DUP ;
1254
                                   PUSH nat 8 ;
1255
                                   COMPARE ;
1256
                                   GT ;
1257
                                   IF
1258
                                     { DROP ; PUSH nat 0 }
1259
                                     { DUP ;
1260
                                       PUSH nat 15 ;
1261
                                       COMPARE ;
1262
                                       GT ;
1263
                                       IF
1264
                                         { DROP ; PUSH nat 1 }
1265
                                         { PUSH nat 22 ;
1266
                                           COMPARE ;
1267
                                           GT ;
1268
                                           IF { PUSH nat 2 } { PUSH nat 3 } } } } ;
1269
                             ADD ;
1270
                             DUP ;
1271
                             DIP { SWAP } ;
1272
                             COMPARE ;
1273
                             DUP ;
1274
                             EQ ;
1275
                             IF
1276
                               { DROP ; DROP ; DROP }
1277
                               { LT ;
1278
                                 IF
1279
                                   { DROP ; PUSH string "WrongStage" ; PAIR ; FAILWITH }
1280
                                   { DUP ;
1281
                                     DIP { DIP { PUSH nat 4 ;
1282
                                                 SWAP ;
1283
                                                 EDIV ;
1284
                                                 IF_NONE
1285
                                                   { PUSH string "Internal: splitCounter: unexpected (1)" ;
1286
                                                     FAILWITH }
1287
                                                   {} ;
1288
                                                 DUP ;
1289
                                                 CAR ;
1290
                                                 DIP { CDR } ;
1291
                                                 DIP {} ;
1292
                                                 DIP { DROP } } ;
1293
                                           PUSH nat 4 ;
1294
                                           SWAP ;
1295
                                           EDIV ;
1296
                                           IF_NONE
1297
                                             { PUSH string "Internal: splitCounter: unexpected (1)" ;
1298
                                               FAILWITH }
1299
                                             {} ;
1300
                                           DUP ;
1301
                                           CAR ;
1302
                                           DIP { CDR } ;
1303
                                           DIP {} ;
1304
                                           DIP { DROP } ;
1305
                                           COMPARE ;
1306
                                           EQ ;
1307
                                           IF
1308
                                             {}
1309
                                             { DUP ;
1310
                                               DUP ;
1311
                                               CAR ;
1312
                                               CDR ;
1313
                                               CDR ;
1314
                                               CDR ;
1315
                                               EMPTY_MAP nat nat ;
1316
                                               SWAP ;
1317
                                               ITER { DIP { DUP } ;
1318
                                                      CDR ;
1319
                                                      DUP ;
1320
                                                      DIP { SWAP } ;
1321
                                                      GET ;
1322
                                                      IF_NONE
1323
                                                        { DIP { PUSH (option nat) (Some 1) } ;
1324
                                                          UPDATE }
1325
                                                        { PUSH nat 1 ; ADD ; SOME ; SWAP ; UPDATE } } ;
1326
                                               NONE (map string (pair bytes string)) ;
1327
                                               SWAP ;
1328
                                               DIG 2 ;
1329
                                               DUP ;
1330
                                               CAR ;
1331
                                               CAR ;
1332
                                               CDR ;
1333
                                               SIZE ;
1334
                                               SWAP ;
1335
                                               DIP { SWAP } ;
1336
                                               CAR ;
1337
                                               CDR ;
1338
                                               CDR ;
1339
                                               CAR ;
1340
                                               PUSH nat 0 ;
1341
                                               SWAP ;
1342
                                               ITER { CAR ;
1343
                                                      DIP { DUP ;
1344
                                                            DIP { DIP { DUP ; DUG 3 } ;
1345
                                                                  GET ;
1346
                                                                  IF_NONE
1347
                                                                    { PUSH nat 0 }
1348
                                                                    {} ;
1349
                                                                  PUSH nat 2 ;
1350
                                                                  MUL ;
1351
                                                                  DIP { DUP } ;
1352
                                                                  COMPARE ;
1353
                                                                  GT } } ;
1354
                                                      DIG 4 ;
1355
                                                      DIG 3 ;
1356
                                                      IF
1357
                                                        { IF_NONE
1358
                                                            { CDR ; SOME }
1359
                                                            { PUSH string "Internal: \"calcWinner: more than one winner\"" ;
1360
                                                              FAILWITH } }
1361
                                                        { DIP { DROP } } ;
1362
                                                      DUG 3 ;
1363
                                                      DIP { SWAP } ;
1364
                                                      PUSH nat 1 ;
1365
                                                      ADD } ;
1366
                                               DROP ;
1367
                                               DROP ;
1368
                                               DROP ;
1369
                                               IF_NONE
1370
                                                 {}
1371
                                                 { DIP { DUP ; DIP { CDR } ; CAR } ;
1372
                                                   DIP { DUP ; DIP { CAR } ; CDR } ;
1373
                                                   DIP { DUP ; DIP { CDR } ; CAR } ;
1374
                                                   DIP { DROP } ;
1375
                                                   PAIR ;
1376
                                                   SWAP ;
1377
                                                   PAIR ;
1378
                                                   PAIR } ;
1379
                                               NIL (pair
1380
                                                     (pair string
1381
                                                           (map string
1382
                                                                (pair bytes string)))
1383
                                                     bytes) ;
1384
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
1385
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
1386
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
1387
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
1388
                                               DIP { DROP } ;
1389
                                               PAIR ;
1390
                                               SWAP ;
1391
                                               PAIR ;
1392
                                               SWAP ;
1393
                                               PAIR ;
1394
                                               PAIR ;
1395
                                               EMPTY_MAP key_hash nat ;
1396
                                               DIP { DUP ; DIP { CDR } ; CAR } ;
1397
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
1398
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
1399
                                               DIP { DUP ; DIP { CAR } ; CDR } ;
1400
                                               DIP { DROP } ;
1401
                                               SWAP ;
1402
                                               PAIR ;
1403
                                               SWAP ;
1404
                                               PAIR ;
1405
                                               SWAP ;
1406
                                               PAIR ;
1407
                                               PAIR } } ;
1408
                                     DIP { DUP ; DIP { CAR } ; CDR } ;
1409
                                     DIP { DUP ; DIP { CDR } ; CAR } ;
1410
                                     DIP { DUP ; DIP { CDR } ; CAR } ;
1411
                                     DIP { DROP } ;
1412
                                     PAIR ;
1413
                                     PAIR ;
1414
                                     SWAP ;
1415
                                     PAIR } } ;
1416
                             DUP ;
1417
                             CDR ;
1418
                             CAR ;
1419
                             CAR ;
1420
                             DUP ;
1421
                             PUSH nat 4 ;
1422
                             SWAP ;
1423
                             EDIV ;
1424
                             IF_NONE
1425
                               { PUSH string "Internal: splitCounter: unexpected (1)" ;
1426
                                 FAILWITH }
1427
                               {} ;
1428
                             DUP ;
1429
                             CAR ;
1430
                             DIP { CDR } ;
1431
                             DIP {} ;
1432
                             DROP ;
1433
                             PUSH nat 0 ;
1434
                             COMPARE ;
1435
                             EQ ;
1436
                             IF
1437
                               { DROP }
1438
                               { PUSH string "WrongStage" ; PAIR ; FAILWITH } } ;
1439
                       DUP ;
1440
                       PACK ;
1441
                       BLAKE2B ;
1442
                       SWAP ;
1443
                       PAIR ;
1444
                       DIP { DUP ; CAR ; CDR ; CDR ; CAR } ;
1445
                       CONS ;
1446
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1447
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1448
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1449
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1450
                       DIP { DROP } ;
1451
                       PAIR ;
1452
                       SWAP ;
1453
                       PAIR ;
1454
                       SWAP ;
1455
                       PAIR ;
1456
                       PAIR ;
1457
                       NIL operation ;
1458
                       PAIR }
1459
                     { DROP ;
1460
                       PUSH bool True ;
1461
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1462
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1463
                       DIP { DUP ; DIP { CAR } ; CDR } ;
1464
                       DIP { DUP ; DIP { CDR } ; CAR } ;
1465
                       DIP { DROP } ;
1466
                       PAIR ;
1467
                       SWAP ;
1468
                       PAIR ;
1469
                       SWAP ;
1470
                       PAIR ;
1471
                       SWAP ;
1472
                       PAIR ;
1473
                       NIL operation ;
1474
                       PAIR } } }
1475
             { DIP { DUP } ;
1476
               SWAP ;
1477
               SWAP ;
1478
               DIP { CAR ;
1479
                     CAR ;
1480
                     CAR ;
1481
                     SENDER ;
1482
                     DIP { DUP } ;
1483
                     COMPARE ;
1484
                     EQ ;
1485
                     IF { DROP } { PUSH string "SenderCheckFailed" ; PAIR ; FAILWITH } } ;
1486
               IF_LEFT
1487
                 { DUP ;
1488
                   CAR ;
1489
                   DUP ;
1490
                   CONTRACT unit ;
1491
                   IF_NONE
1492
                     { PUSH string "InvalidReceiver" ; PAIR ; FAILWITH }
1493
                     { DIP { DROP } } ;
1494
                   SWAP ;
1495
                   CDR ;
1496
                   UNIT ;
1497
                   TRANSFER_TOKENS ;
1498
                   DIP { NIL operation } ;
1499
                   CONS ;
1500
                   PAIR }
1501
                 { DIP { DUP } ;
1502
                   SWAP ;
1503
                   CDR ;
1504
                   CDR ;
1505
                   CDR ;
1506
                   CAR ;
1507
                   IF
1508
                     {}
1509
                     { PUSH unit Unit ; PUSH string "ContractActive" ; PAIR ; FAILWITH } ;
1510
                   SOME ;
1511
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1512
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1513
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1514
                   DIP { DUP ; DIP { CAR } ; CDR } ;
1515
                   DIP { DROP } ;
1516
                   SWAP ;
1517
                   PAIR ;
1518
                   SWAP ;
1519
                   PAIR ;
1520
                   SWAP ;
1521
                   PAIR ;
1522
                   SWAP ;
1523
                   PAIR ;
1524
                   NIL operation ;
1525
                   PAIR } } } }