BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Mainnet
  • /
  • EURL/agEUR.e Plenty Network Stable Swap
operations (5.77K)Storage Code Interact Tokens Fork Views Statistics Details
Latest
​x
1003
 
1
{ parameter (or
2
              (or (or (address %ChangeAdmin) (unit %ChangeState))
3
                  (or (address %ChangeSystem) (nat %ModifyFee)))
4
              (or
5
                (or
6
                  (pair %Swap (pair (nat %MinimumTokenOut) (address %recipient))
7
                              (pair (address %requiredTokenAddress)
8
                                    (pair (nat %requiredTokenId) (nat %tokenAmountIn))))
9
                  (pair %add_liquidity (address %recipient)
10
                                       (pair (nat %token1_max) (nat %token2_max))))
11
                (or (pair %forwardFee (nat %epoch) (address %feeDistributor))
12
                    (pair %remove_liquidity (pair (nat %lpAmount) (address %recipient))
13
                                            (pair (nat %token1_min) (nat %token2_min)))))) ;
14
  storage (pair
15
            (pair
16
              (pair (pair (address %admin) (nat %lpFee))
17
                    (pair (address %lqtAddress) (nat %lqtTotal)))
18
              (pair (pair (bool %paused) (bool %state))
19
                    (pair (address %token1Address)
20
                          (pair (bool %token1Check) (nat %token1Fee)))))
21
            (pair
22
              (pair (pair (nat %token1Id) (nat %token1Pool))
23
                    (pair (nat %token1Precision)
24
                          (pair (address %token2Address) (bool %token2Check))))
25
              (pair (pair (nat %token2Fee) (nat %token2Id))
26
                    (pair (nat %token2Pool)
27
                          (pair (nat %token2Precision) (option %voterContract address)))))) ;
28
  code { LAMBDA
29
           nat
30
           nat
31
           { DUP ;
32
             PUSH nat 0 ;
33
             SWAP ;
34
             COMPARE ;
35
             GE ;
36
             IF {} { PUSH string "FlatSwap_Negative_Value" ; FAILWITH } ;
37
             DUP ;
38
             DUP ;
39
             DUG 2 ;
40
             SWAP ;
41
             DUP ;
42
             DUP ;
43
             DUG 3 ;
44
             MUL ;
45
             COMPARE ;
46
             GT ;
47
             LOOP { PUSH nat 2 ;
48
                    SWAP ;
49
                    DUP ;
50
                    DUP 4 ;
51
                    EDIV ;
52
                    IF_NONE { PUSH int 63 ; FAILWITH } { CAR } ;
53
                    ADD ;
54
                    EDIV ;
55
                    IF_NONE { PUSH int 63 ; FAILWITH } { CAR } ;
56
                    SWAP ;
57
                    DUP ;
58
                    DUG 2 ;
59
                    SWAP ;
60
                    DUP ;
61
                    DUP ;
62
                    DUG 3 ;
63
                    MUL ;
64
                    COMPARE ;
65
                    GT } ;
66
             SWAP ;
67
             DUP ;
68
             DUG 2 ;
69
             SWAP ;
70
             DUP ;
71
             DUP ;
72
             DUG 3 ;
73
             MUL ;
74
             COMPARE ;
75
             LE ;
76
             IF
77
               { DUP ; PUSH nat 1 ; ADD ; PUSH nat 1 ; DUP 3 ; ADD ; MUL ; DIG 2 ; COMPARE ; LT }
78
               { SWAP ; DROP ; PUSH bool False } ;
79
             IF
80
               {}
81
               { PUSH string "WrongCondition: ((y.value * y.value) <= _x0) & (_x0 < ((y.value + 1) * (y.value + 1)))" ;
82
                 FAILWITH } } ;
83
         SWAP ;
84
         UNPAIR ;
85
         IF_LEFT
86
           { DIG 2 ;
87
             DROP ;
88
             IF_LEFT
89
               { IF_LEFT
90
                   { SWAP ;
91
                     DUP ;
92
                     DUG 2 ;
93
                     CAR ;
94
                     CAR ;
95
                     CAR ;
96
                     CAR ;
97
                     SENDER ;
98
                     COMPARE ;
99
                     EQ ;
100
                     IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ;
101
                     SWAP ;
102
                     UNPAIR ;
103
                     UNPAIR ;
104
                     UNPAIR ;
105
                     CDR ;
106
                     DIG 4 ;
107
                     PAIR ;
108
                     PAIR ;
109
                     PAIR ;
110
                     PAIR }
111
                   { DROP ;
112
                     DUP ;
113
                     CAR ;
114
                     CAR ;
115
                     CAR ;
116
                     CAR ;
117
                     SENDER ;
118
                     COMPARE ;
119
                     EQ ;
120
                     IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ;
121
                     DUP ;
122
                     UNPAIR ;
123
                     UNPAIR ;
124
                     SWAP ;
125
                     UNPAIR ;
126
                     CDR ;
127
                     DIG 4 ;
128
                     CAR ;
129
                     GET 3 ;
130
                     CAR ;
131
                     NOT ;
132
                     PAIR ;
133
                     PAIR ;
134
                     SWAP ;
135
                     PAIR ;
136
                     PAIR } }
137
               { IF_LEFT
138
                   { SWAP ;
139
                     DUP ;
140
                     DUG 2 ;
141
                     CAR ;
142
                     CAR ;
143
                     CAR ;
144
                     CAR ;
145
                     SENDER ;
146
                     COMPARE ;
147
                     EQ ;
148
                     IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ;
149
                     SOME ;
150
                     UPDATE 10 ;
151
                     UNPAIR ;
152
                     UNPAIR ;
153
                     SWAP ;
154
                     UNPAIR ;
155
                     CAR ;
156
                     PUSH bool True ;
157
                     SWAP ;
158
                     PAIR ;
159
                     PAIR ;
160
                     SWAP ;
161
                     PAIR ;
162
                     PAIR }
163
                   { SWAP ;
164
                     DUP ;
165
                     DUG 2 ;
166
                     CAR ;
167
                     CAR ;
168
                     CAR ;
169
                     CAR ;
170
                     SENDER ;
171
                     COMPARE ;
172
                     EQ ;
173
                     IF {} { PUSH string "FlatSwap_Not_Admin" ; FAILWITH } ;
174
                     DUP ;
175
                     PUSH nat 100 ;
176
                     SWAP ;
177
                     COMPARE ;
178
                     GE ;
179
                     IF {} { PUSH string "WrongCondition: params >= 100" ; FAILWITH } ;
180
                     SWAP ;
181
                     UNPAIR ;
182
                     UNPAIR ;
183
                     UNPAIR ;
184
                     CAR ;
185
                     DIG 4 ;
186
                     SWAP ;
187
                     PAIR ;
188
                     PAIR ;
189
                     PAIR ;
190
                     PAIR } } ;
191
             NIL operation }
192
           { IF_LEFT
193
               { IF_LEFT
194
                   { SWAP ;
195
                     DUP ;
196
                     DUG 2 ;
197
                     CAR ;
198
                     GET 3 ;
199
                     CAR ;
200
                     IF { PUSH string "FlatSwap_Paused_State" ; FAILWITH } {} ;
201
                     DUP ;
202
                     GET 6 ;
203
                     PUSH nat 0 ;
204
                     COMPARE ;
205
                     LT ;
206
                     IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
207
                     SWAP ;
208
                     DUP ;
209
                     DUG 2 ;
210
                     CAR ;
211
                     GET 5 ;
212
                     SWAP ;
213
                     DUP ;
214
                     DUG 2 ;
215
                     GET 3 ;
216
                     COMPARE ;
217
                     EQ ;
218
                     IF
219
                       { SWAP ; DUP ; DUG 2 ; GET 3 ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; GET 5 ; COMPARE ; EQ }
220
                       { PUSH bool False } ;
221
                     IF
222
                       { PUSH bool True }
223
                       { SWAP ;
224
                         DUP ;
225
                         DUG 2 ;
226
                         GET 3 ;
227
                         GET 5 ;
228
                         SWAP ;
229
                         DUP ;
230
                         DUG 2 ;
231
                         GET 3 ;
232
                         COMPARE ;
233
                         EQ ;
234
                         IF
235
                           { SWAP ; DUP ; DUG 2 ; GET 5 ; CDR ; SWAP ; DUP ; DUG 2 ; GET 5 ; COMPARE ; EQ }
236
                           { PUSH bool False } } ;
237
                     IF {} { PUSH string "FlatSwap_Invalid_Pair" ; FAILWITH } ;
238
                     SWAP ;
239
                     DUP ;
240
                     GET 3 ;
241
                     GET 3 ;
242
                     SWAP ;
243
                     DUP ;
244
                     DUG 3 ;
245
                     GET 3 ;
246
                     CAR ;
247
                     CDR ;
248
                     MUL ;
249
                     DIG 2 ;
250
                     DUP ;
251
                     GET 9 ;
252
                     SWAP ;
253
                     DUP ;
254
                     DUG 4 ;
255
                     GET 7 ;
256
                     MUL ;
257
                     DUP 4 ;
258
                     CAR ;
259
                     GET 5 ;
260
                     DUP 4 ;
261
                     GET 3 ;
262
                     COMPARE ;
263
                     EQ ;
264
                     IF
265
                       { DUP 4 ; GET 3 ; CAR ; CAR ; DUP 4 ; GET 5 ; COMPARE ; EQ }
266
                       { PUSH bool False } ;
267
                     IF
268
                       { PUSH int 5 ;
269
                         PUSH nat 0 ;
270
                         DUP ;
271
                         DUP 5 ;
272
                         SUB ;
273
                         ABS ;
274
                         DUP 7 ;
275
                         GET 9 ;
276
                         DUP 7 ;
277
                         GET 6 ;
278
                         MUL ;
279
                         DUP 5 ;
280
                         ADD ;
281
                         ADD ;
282
                         SWAP ;
283
                         DUP ;
284
                         DUG 2 ;
285
                         DUP 6 ;
286
                         SUB ;
287
                         ABS ;
288
                         DUP 8 ;
289
                         GET 9 ;
290
                         DUP 8 ;
291
                         GET 6 ;
292
                         MUL ;
293
                         DUP 6 ;
294
                         ADD ;
295
                         ADD ;
296
                         DUP 3 ;
297
                         DUP 7 ;
298
                         SUB ;
299
                         ABS ;
300
                         DUP 9 ;
301
                         GET 9 ;
302
                         DUP 9 ;
303
                         GET 6 ;
304
                         MUL ;
305
                         DUP 7 ;
306
                         ADD ;
307
                         ADD ;
308
                         MUL ;
309
                         DUP 3 ;
310
                         DUP 7 ;
311
                         SUB ;
312
                         ABS ;
313
                         DUP 9 ;
314
                         GET 9 ;
315
                         DUP 9 ;
316
                         GET 6 ;
317
                         MUL ;
318
                         DUP 7 ;
319
                         ADD ;
320
                         ADD ;
321
                         DUP 4 ;
322
                         DUP 8 ;
323
                         SUB ;
324
                         ABS ;
325
                         DUP 10 ;
326
                         GET 9 ;
327
                         DUP 10 ;
328
                         GET 6 ;
329
                         MUL ;
330
                         DUP 8 ;
331
                         ADD ;
332
                         ADD ;
333
                         MUL ;
334
                         DUP 4 ;
335
                         DUP 8 ;
336
                         SUB ;
337
                         ABS ;
338
                         DUP 10 ;
339
                         GET 9 ;
340
                         DUP 10 ;
341
                         GET 6 ;
342
                         MUL ;
343
                         DUP 8 ;
344
                         ADD ;
345
                         ADD ;
346
                         DUP 5 ;
347
                         DUP 9 ;
348
                         SUB ;
349
                         ABS ;
350
                         DUP 11 ;
351
                         GET 9 ;
352
                         DUP 11 ;
353
                         GET 6 ;
354
                         MUL ;
355
                         DUP 9 ;
356
                         ADD ;
357
                         ADD ;
358
                         MUL ;
359
                         MUL ;
360
                         MUL ;
361
                         MUL ;
362
                         INT ;
363
                         SWAP ;
364
                         DUP ;
365
                         DUG 2 ;
366
                         DUP 6 ;
367
                         SUB ;
368
                         ABS ;
369
                         DUP 8 ;
370
                         GET 9 ;
371
                         DUP 8 ;
372
                         GET 6 ;
373
                         MUL ;
374
                         DUP 6 ;
375
                         ADD ;
376
                         SUB ;
377
                         DUP 3 ;
378
                         DUP 7 ;
379
                         SUB ;
380
                         ABS ;
381
                         DUP 9 ;
382
                         GET 9 ;
383
                         DUP 9 ;
384
                         GET 6 ;
385
                         MUL ;
386
                         DUP 7 ;
387
                         ADD ;
388
                         SUB ;
389
                         DUP 4 ;
390
                         DUP 8 ;
391
                         SUB ;
392
                         ABS ;
393
                         DUP 10 ;
394
                         GET 9 ;
395
                         DUP 10 ;
396
                         GET 6 ;
397
                         MUL ;
398
                         DUP 8 ;
399
                         ADD ;
400
                         SUB ;
401
                         MUL ;
402
                         DUP 4 ;
403
                         DUP 8 ;
404
                         SUB ;
405
                         ABS ;
406
                         DUP 10 ;
407
                         GET 9 ;
408
                         DUP 10 ;
409
                         GET 6 ;
410
                         MUL ;
411
                         DUP 8 ;
412
                         ADD ;
413
                         SUB ;
414
                         DUP 5 ;
415
                         DUP 9 ;
416
                         SUB ;
417
                         ABS ;
418
                         DUP 11 ;
419
                         GET 9 ;
420
                         DUP 11 ;
421
                         GET 6 ;
422
                         MUL ;
423
                         DUP 9 ;
424
                         ADD ;
425
                         SUB ;
426
                         MUL ;
427
                         DUP 5 ;
428
                         DUP 9 ;
429
                         SUB ;
430
                         ABS ;
431
                         DUP 11 ;
432
                         GET 9 ;
433
                         DUP 11 ;
434
                         GET 6 ;
435
                         MUL ;
436
                         DUP 9 ;
437
                         ADD ;
438
                         SUB ;
439
                         DUP 6 ;
440
                         DUP 10 ;
441
                         SUB ;
442
                         ABS ;
443
                         DUP 12 ;
444
                         GET 9 ;
445
                         DUP 12 ;
446
                         GET 6 ;
447
                         MUL ;
448
                         DUP 10 ;
449
                         ADD ;
450
                         SUB ;
451
                         MUL ;
452
                         MUL ;
453
                         MUL ;
454
                         MUL ;
455
                         ADD ;
456
                         ABS ;
457
                         PUSH nat 8 ;
458
                         MUL ;
459
                         SWAP ;
460
                         DUP ;
461
                         DUG 2 ;
462
                         DUP 6 ;
463
                         SUB ;
464
                         ABS ;
465
                         DUP 8 ;
466
                         GET 9 ;
467
                         DUP 8 ;
468
                         GET 6 ;
469
                         MUL ;
470
                         DUP 6 ;
471
                         ADD ;
472
                         SUB ;
473
                         DUP 3 ;
474
                         DUP 7 ;
475
                         SUB ;
476
                         ABS ;
477
                         DUP 9 ;
478
                         GET 9 ;
479
                         DUP 9 ;
480
                         GET 6 ;
481
                         MUL ;
482
                         DUP 7 ;
483
                         ADD ;
484
                         SUB ;
485
                         MUL ;
486
                         DUP 3 ;
487
                         DUP 7 ;
488
                         SUB ;
489
                         ABS ;
490
                         DUP 9 ;
491
                         GET 9 ;
492
                         DUP 9 ;
493
                         GET 6 ;
494
                         MUL ;
495
                         DUP 7 ;
496
                         ADD ;
497
                         SUB ;
498
                         DUP 4 ;
499
                         DUP 8 ;
500
                         SUB ;
501
                         ABS ;
502
                         DUP 10 ;
503
                         GET 9 ;
504
                         DUP 10 ;
505
                         GET 6 ;
506
                         MUL ;
507
                         DUP 8 ;
508
                         ADD ;
509
                         SUB ;
510
                         MUL ;
511
                         MUL ;
512
                         DUP 3 ;
513
                         DUP 7 ;
514
                         SUB ;
515
                         ABS ;
516
                         DUP 9 ;
517
                         GET 9 ;
518
                         DUP 9 ;
519
                         GET 6 ;
520
                         MUL ;
521
                         DUP 7 ;
522
                         ADD ;
523
                         SUB ;
524
                         DUP 4 ;
525
                         DUP 8 ;
526
                         SUB ;
527
                         ABS ;
528
                         DUP 10 ;
529
                         GET 9 ;
530
                         DUP 10 ;
531
                         GET 6 ;
532
                         MUL ;
533
                         DUP 8 ;
534
                         ADD ;
535
                         SUB ;
536
                         MUL ;
537
                         DUP 4 ;
538
                         DUP 8 ;
539
                         SUB ;
540
                         ABS ;
541
                         DUP 10 ;
542
                         GET 9 ;
543
                         DUP 10 ;
544
                         GET 6 ;
545
                         MUL ;
546
                         DUP 8 ;
547
                         ADD ;
548
                         SUB ;
549
                         DUP 5 ;
550
                         DUP 9 ;
551
                         SUB ;
552
                         ABS ;
553
                         DUP 11 ;
554
                         GET 9 ;
555
                         DUP 11 ;
556
                         GET 6 ;
557
                         MUL ;
558
                         DUP 9 ;
559
                         ADD ;
560
                         SUB ;
561
                         MUL ;
562
                         MUL ;
563
                         MUL ;
564
                         DUP 3 ;
565
                         DUP 7 ;
566
                         SUB ;
567
                         ABS ;
568
                         DUP 9 ;
569
                         GET 9 ;
570
                         DUP 9 ;
571
                         GET 6 ;
572
                         MUL ;
573
                         DUP 7 ;
574
                         ADD ;
575
                         ADD ;
576
                         DUP 4 ;
577
                         DUP 8 ;
578
                         SUB ;
579
                         ABS ;
580
                         DUP 10 ;
581
                         GET 9 ;
582
                         DUP 10 ;
583
                         GET 6 ;
584
                         MUL ;
585
                         DUP 8 ;
586
                         ADD ;
587
                         ADD ;
588
                         MUL ;
589
                         DUP 4 ;
590
                         DUP 8 ;
591
                         SUB ;
592
                         ABS ;
593
                         DUP 10 ;
594
                         GET 9 ;
595
                         DUP 10 ;
596
                         GET 6 ;
597
                         MUL ;
598
                         DUP 8 ;
599
                         ADD ;
600
                         ADD ;
601
                         DUP 5 ;
602
                         DUP 9 ;
603
                         SUB ;
604
                         ABS ;
605
                         DUP 11 ;
606
                         GET 9 ;
607
                         DUP 11 ;
608
                         GET 6 ;
609
                         MUL ;
610
                         DUP 9 ;
611
                         ADD ;
612
                         ADD ;
613
                         MUL ;
614
                         MUL ;
615
                         DUP 4 ;
616
                         DUP 8 ;
617
                         SUB ;
618
                         ABS ;
619
                         DUP 10 ;
620
                         GET 9 ;
621
                         DUP 10 ;
622
                         GET 6 ;
623
                         MUL ;
624
                         DUP 8 ;
625
                         ADD ;
626
                         ADD ;
627
                         DUP 5 ;
628
                         DUP 9 ;
629
                         SUB ;
630
                         ABS ;
631
                         DUP 11 ;
632
                         GET 9 ;
633
                         DUP 11 ;
634
                         GET 6 ;
635
                         MUL ;
636
                         DUP 9 ;
637
                         ADD ;
638
                         ADD ;
639
                         MUL ;
640
                         DUP 5 ;
641
                         DUP 9 ;
642
                         SUB ;
643
                         ABS ;
644
                         DUP 11 ;
645
                         GET 9 ;
646
                         DUP 11 ;
647
                         GET 6 ;
648
                         MUL ;
649
                         DUP 9 ;
650
                         ADD ;
651
                         ADD ;
652
                         DUP 6 ;
653
                         DUP 10 ;
654
                         SUB ;
655
                         ABS ;
656
                         DUP 12 ;
657
                         GET 9 ;
658
                         DUP 12 ;
659
                         GET 6 ;
660
                         MUL ;
661
                         DUP 10 ;
662
                         ADD ;
663
                         ADD ;
664
                         MUL ;
665
                         MUL ;
666
                         MUL ;
667
                         INT ;
668
                         SUB ;
669
                         ABS ;
670
                         PAIR ;
671
                         DUP ;
672
                         CAR ;
673
                         SWAP ;
674
                         DUP ;
675
                         DUG 2 ;
676
                         CDR ;
677
                         PUSH int 0 ;
678
                         DUP 6 ;
679
                         COMPARE ;
680
                         NEQ ;
681
                         LOOP { DIG 2 ;
682
                                DROP 3 ;
683
                                DUP ;
684
                                DUP 5 ;
685
                                SUB ;
686
                                ABS ;
687
                                DUP 7 ;
688
                                GET 9 ;
689
                                DUP 7 ;
690
                                GET 6 ;
691
                                MUL ;
692
                                DUP 5 ;
693
                                ADD ;
694
                                ADD ;
695
                                SWAP ;
696
                                DUP ;
697
                                DUG 2 ;
698
                                DUP 6 ;
699
                                SUB ;
700
                                ABS ;
701
                                DUP 8 ;
702
                                GET 9 ;
703
                                DUP 8 ;
704
                                GET 6 ;
705
                                MUL ;
706
                                DUP 6 ;
707
                                ADD ;
708
                                ADD ;
709
                                DUP 3 ;
710
                                DUP 7 ;
711
                                SUB ;
712
                                ABS ;
713
                                DUP 9 ;
714
                                GET 9 ;
715
                                DUP 9 ;
716
                                GET 6 ;
717
                                MUL ;
718
                                DUP 7 ;
719
                                ADD ;
720
                                ADD ;
721
                                MUL ;
722
                                DUP 3 ;
723
                                DUP 7 ;
724
                                SUB ;
725
                                ABS ;
726
                                DUP 9 ;
727
                                GET 9 ;
728
                                DUP 9 ;
729
                                GET 6 ;
730
                                MUL ;
731
                                DUP 7 ;
732
                                ADD ;
733
                                ADD ;
734
                                DUP 4 ;
735
                                DUP 8 ;
736
                                SUB ;
737
                                ABS ;
738
                                DUP 10 ;
739
                                GET 9 ;
740
                                DUP 10 ;
741
                                GET 6 ;
742
                                MUL ;
743
                                DUP 8 ;
744
                                ADD ;
745
                                ADD ;
746
                                MUL ;
747
                                DUP 4 ;
748
                                DUP 8 ;
749
                                SUB ;
750
                                ABS ;
751
                                DUP 10 ;
752
                                GET 9 ;
753
                                DUP 10 ;
754
                                GET 6 ;
755
                                MUL ;
756
                                DUP 8 ;
757
                                ADD ;
758
                                ADD ;
759
                                DUP 5 ;
760
                                DUP 9 ;
761
                                SUB ;
762
                                ABS ;
763
                                DUP 11 ;
764
                                GET 9 ;
765
                                DUP 11 ;
766
                                GET 6 ;
767
                                MUL ;
768
                                DUP 9 ;
769
                                ADD ;
770
                                ADD ;
771
                                MUL ;
772
                                MUL ;
773
                                MUL ;
774
                                MUL ;
775
                                INT ;
776
                                SWAP ;
777
                                DUP ;
778
                                DUG 2 ;
779
                                DUP 6 ;
780
                                SUB ;
781
                                ABS ;
782
                                DUP 8 ;
783
                                GET 9 ;
784
                                DUP 8 ;
785
                                GET 6 ;
786
                                MUL ;
787
                                DUP 6 ;
788
                                ADD ;
789
                                SUB ;
790
                                DUP 3 ;
791
                                DUP 7 ;
792
                                SUB ;
793
                                ABS ;
794
                                DUP 9 ;
795
                                GET 9 ;
796
                                DUP 9 ;
797
                                GET 6 ;
798
                                MUL ;
799
                                DUP 7 ;
800
                                ADD ;
801
                                SUB ;
802
                                DUP 4 ;
803
                                DUP 8 ;
804
                                SUB ;
805
                                ABS ;
806
                                DUP 10 ;
807
                                GET 9 ;
808
                                DUP 10 ;
809
                                GET 6 ;
810
                                MUL ;
811
                                DUP 8 ;
812
                                ADD ;
813
                                SUB ;
814
                                MUL ;
815
                                DUP 4 ;
816
                                DUP 8 ;
817
                                SUB ;
818
                                ABS ;
819
                                DUP 10 ;
820
                                GET 9 ;
821
                                DUP 10 ;
822
                                GET 6 ;
823
                                MUL ;
824
                                DUP 8 ;
825
                                ADD ;
826
                                SUB ;
827
                                DUP 5 ;
828
                                DUP 9 ;
829
                                SUB ;
830
                                ABS ;
831
                                DUP 11 ;
832
                                GET 9 ;
833
                                DUP 11 ;
834
                                GET 6 ;
835
                                MUL ;
836
                                DUP 9 ;
837
                                ADD ;
838
                                SUB ;
839
                                MUL ;
840
                                DUP 5 ;
841
                                DUP 9 ;
842
                                SUB ;
843
                                ABS ;
844
                                DUP 11 ;
845
                                GET 9 ;
846
                                DUP 11 ;
847
                                GET 6 ;
848
                                MUL ;
849
                                DUP 9 ;
850
                                ADD ;
851
                                SUB ;
852
                                DUP 6 ;
853
                                DUP 10 ;
854
                                SUB ;
855
                                ABS ;
856
                                DUP 12 ;
857
                                GET 9 ;
858
                                DUP 12 ;
859
                                GET 6 ;
860
                                MUL ;
861
                                DUP 10 ;
862
                                ADD ;
863
                                SUB ;
864
                                MUL ;
865
                                MUL ;
866
                                MUL ;
867
                                MUL ;
868
                                ADD ;
869
                                ABS ;
870
                                PUSH nat 8 ;
871
                                MUL ;
872
                                SWAP ;
873
                                DUP ;
874
                                DUG 2 ;
875
                                DUP 6 ;
876
                                SUB ;
877
                                ABS ;
878
                                DUP 8 ;
879
                                GET 9 ;
880
                                DUP 8 ;
881
                                GET 6 ;
882
                                MUL ;
883
                                DUP 6 ;
884
                                ADD ;
885
                                SUB ;
886
                                DUP 3 ;
887
                                DUP 7 ;
888
                                SUB ;
889
                                ABS ;
890
                                DUP 9 ;
891
                                GET 9 ;
892
                                DUP 9 ;
893
                                GET 6 ;
894
                                MUL ;
895
                                DUP 7 ;
896
                                ADD ;
897
                                SUB ;
898
                                MUL ;
899
                                DUP 3 ;
900
                                DUP 7 ;
901
                                SUB ;
902
                                ABS ;
903
                                DUP 9 ;
904
                                GET 9 ;
905
                                DUP 9 ;
906
                                GET 6 ;
907
                                MUL ;
908
                                DUP 7 ;
909
                                ADD ;
910
                                SUB ;
911
                                DUP 4 ;
912
                                DUP 8 ;
913
                                SUB ;
914
                                ABS ;
915
                                DUP 10 ;
916
                                GET 9 ;
917
                                DUP 10 ;
918
                                GET 6 ;
919
                                MUL ;
920
                                DUP 8 ;
921
                                ADD ;
922
                                SUB ;
923
                                MUL ;
924
                                MUL ;
925
                                DUP 3 ;
926
                                DUP 7 ;
927
                                SUB ;
928
                                ABS ;
929
                                DUP 9 ;
930
                                GET 9 ;
931
                                DUP 9 ;
932
                                GET 6 ;
933
                                MUL ;
934
                                DUP 7 ;
935
                                ADD ;
936
                                SUB ;
937
                                DUP 4 ;
938
                                DUP 8 ;
939
                                SUB ;
940
                                ABS ;
941
                                DUP 10 ;
942
                                GET 9 ;
943
                                DUP 10 ;
944
                                GET 6 ;
945
                                MUL ;
946
                                DUP 8 ;
947
                                ADD ;
948
                                SUB ;
949
                                MUL ;
950
                                DUP 4 ;
951
                                DUP 8 ;
952
                                SUB ;
953
                                ABS ;
954
                                DUP 10 ;
955
                                GET 9 ;
956
                                DUP 10 ;
957
                                GET 6 ;
958
                                MUL ;
959
                                DUP 8 ;
960
                                ADD ;
961
                                SUB ;
962
                                DUP 5 ;
963
                                DUP 9 ;
964
                                SUB ;
965
                                ABS ;
966
                                DUP 11 ;
967
                                GET 9 ;
968
                                DUP 11 ;
969
                                GET 6 ;
970
                                MUL ;
971
                                DUP 9 ;
972
                                ADD ;
973
                                SUB ;
974
                                MUL ;
975
                                MUL ;
976
                                MUL ;
977
                                DUP 3 ;
978
                                DUP 7 ;
979
                                SUB ;
980
                                ABS ;
981
                                DUP 9 ;
982
                                GET 9 ;
983
                                DUP 9 ;
984
                                GET 6 ;
985
                                MUL ;
986
                                DUP 7 ;
987
                                ADD ;
988
                                ADD ;
989
                                DUP 4 ;
990
                                DUP 8 ;
991
                                SUB ;
992
                                ABS ;
993
                                DUP 10 ;
994
                                GET 9 ;
995
                                DUP 10 ;
996
                                GET 6 ;
997
                                MUL ;
998
                                DUP 8 ;
999
                                ADD ;
1000
                                ADD ;
1001
                                MUL ;
1002
                                DUP 4 ;
1003
                                DUP 8 ;
1004
                                SUB ;
1005
                                ABS ;
1006
                                DUP 10 ;
1007
                                GET 9 ;
1008
                                DUP 10 ;
1009
                                GET 6 ;
1010
                                MUL ;
1011
                                DUP 8 ;
1012
                                ADD ;
1013
                                ADD ;
1014
                                DUP 5 ;
1015
                                DUP 9 ;
1016
                                SUB ;
1017
                                ABS ;
1018
                                DUP 11 ;
1019
                                GET 9 ;
1020
                                DUP 11 ;
1021
                                GET 6 ;
1022
                                MUL ;
1023
                                DUP 9 ;
1024
                                ADD ;
1025
                                ADD ;
1026
                                MUL ;
1027
                                MUL ;
1028
                                DUP 4 ;
1029
                                DUP 8 ;
1030
                                SUB ;
1031
                                ABS ;
1032
                                DUP 10 ;
1033
                                GET 9 ;
1034
                                DUP 10 ;
1035
                                GET 6 ;
1036
                                MUL ;
1037
                                DUP 8 ;
1038
                                ADD ;
1039
                                ADD ;
1040
                                DUP 5 ;
1041
                                DUP 9 ;
1042
                                SUB ;
1043
                                ABS ;
1044
                                DUP 11 ;
1045
                                GET 9 ;
1046
                                DUP 11 ;
1047
                                GET 6 ;
1048
                                MUL ;
1049
                                DUP 9 ;
1050
                                ADD ;
1051
                                ADD ;
1052
                                MUL ;
1053
                                DUP 5 ;
1054
                                DUP 9 ;
1055
                                SUB ;
1056
                                ABS ;
1057
                                DUP 11 ;
1058
                                GET 9 ;
1059
                                DUP 11 ;
1060
                                GET 6 ;
1061
                                MUL ;
1062
                                DUP 9 ;
1063
                                ADD ;
1064
                                ADD ;
1065
                                DUP 6 ;
1066
                                DUP 10 ;
1067
                                SUB ;
1068
                                ABS ;
1069
                                DUP 12 ;
1070
                                GET 9 ;
1071
                                DUP 12 ;
1072
                                GET 6 ;
1073
                                MUL ;
1074
                                DUP 10 ;
1075
                                ADD ;
1076
                                ADD ;
1077
                                MUL ;
1078
                                MUL ;
1079
                                MUL ;
1080
                                INT ;
1081
                                SUB ;
1082
                                ABS ;
1083
                                PAIR ;
1084
                                DUP ;
1085
                                CAR ;
1086
                                SWAP ;
1087
                                DUP ;
1088
                                DUG 2 ;
1089
                                CDR ;
1090
                                DUP ;
1091
                                DUP 8 ;
1092
                                DUP 8 ;
1093
                                SUB ;
1094
                                DUP 9 ;
1095
                                DUP 9 ;
1096
                                SUB ;
1097
                                MUL ;
1098
                                DUP 9 ;
1099
                                DUP 9 ;
1100
                                SUB ;
1101
                                DUP 10 ;
1102
                                DUP 10 ;
1103
                                SUB ;
1104
                                MUL ;
1105
                                MUL ;
1106
                                DUP 9 ;
1107
                                DUP 9 ;
1108
                                SUB ;
1109
                                DUP 10 ;
1110
                                DUP 10 ;
1111
                                SUB ;
1112
                                MUL ;
1113
                                DUP 10 ;
1114
                                DUP 10 ;
1115
                                SUB ;
1116
                                DUP 11 ;
1117
                                DUP 11 ;
1118
                                SUB ;
1119
                                MUL ;
1120
                                MUL ;
1121
                                MUL ;
1122
                                DUP 9 ;
1123
                                DUP 9 ;
1124
                                ADD ;
1125
                                DUP 10 ;
1126
                                DUP 10 ;
1127
                                ADD ;
1128
                                MUL ;
1129
                                DUP 10 ;
1130
                                DUP 10 ;
1131
                                ADD ;
1132
                                DUP 11 ;
1133
                                DUP 11 ;
1134
                                ADD ;
1135
                                MUL ;
1136
                                MUL ;
1137
                                DUP 10 ;
1138
                                DUP 10 ;
1139
                                ADD ;
1140
                                DUP 11 ;
1141
                                DUP 11 ;
1142
                                ADD ;
1143
                                MUL ;
1144
                                DUP 11 ;
1145
                                DUP 11 ;
1146
                                ADD ;
1147
                                DUP 12 ;
1148
                                DUP 12 ;
1149
                                ADD ;
1150
                                MUL ;
1151
                                MUL ;
1152
                                MUL ;
1153
                                INT ;
1154
                                SUB ;
1155
                                ABS ;
1156
                                DUP 4 ;
1157
                                SUB ;
1158
                                ABS ;
1159
                                EDIV ;
1160
                                IF_NONE { PUSH int 160 ; FAILWITH } { CAR } ;
1161
                                DIG 4 ;
1162
                                ADD ;
1163
                                DUG 3 ;
1164
                                PUSH int 1 ;
1165
                                DIG 5 ;
1166
                                SUB ;
1167
                                DUG 4 ;
1168
                                PUSH int 0 ;
1169
                                DUP 6 ;
1170
                                COMPARE ;
1171
                                NEQ } ;
1172
                         DROP 3 ;
1173
                         SWAP ;
1174
                         DROP ;
1175
                         SWAP ;
1176
                         DROP ;
1177
                         SWAP ;
1178
                         DROP ;
1179
                         DIG 3 ;
1180
                         DROP ;
1181
                         DUP 3 ;
1182
                         CAR ;
1183
                         CAR ;
1184
                         CAR ;
1185
                         CDR ;
1186
                         SWAP ;
1187
                         DUP ;
1188
                         DUG 2 ;
1189
                         EDIV ;
1190
                         IF_NONE { PUSH int 280 ; FAILWITH } { CAR } ;
1191
                         DUP 3 ;
1192
                         CAR ;
1193
                         CAR ;
1194
                         DUP 5 ;
1195
                         GET 3 ;
1196
                         GET 3 ;
1197
                         DUP 3 ;
1198
                         DUP 5 ;
1199
                         SUB ;
1200
                         ABS ;
1201
                         EDIV ;
1202
                         IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ;
1203
                         COMPARE ;
1204
                         GE ;
1205
                         IF {} { PUSH string "FlatSwap_Min_Cash_Error" ; FAILWITH } ;
1206
                         DIG 3 ;
1207
                         DUP ;
1208
                         GET 3 ;
1209
                         CAR ;
1210
                         CDR ;
1211
                         SWAP ;
1212
                         DUP ;
1213
                         DUG 5 ;
1214
                         GET 3 ;
1215
                         GET 3 ;
1216
                         DUP 3 ;
1217
                         DUP 5 ;
1218
                         SUB ;
1219
                         ABS ;
1220
                         EDIV ;
1221
                         IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ;
1222
                         COMPARE ;
1223
                         LT ;
1224
                         IF
1225
                           {}
1226
                           { PUSH string "FlatSwap_Cash_Bought_Exceeds_Pool" ; FAILWITH } ;
1227
                         DUP 4 ;
1228
                         CAR ;
1229
                         GET 3 ;
1230
                         CDR ;
1231
                         IF
1232
                           { DUP 4 ;
1233
                             UNPAIR ;
1234
                             SWAP ;
1235
                             UNPAIR ;
1236
                             UNPAIR ;
1237
                             CAR ;
1238
                             DUP 8 ;
1239
                             GET 3 ;
1240
                             GET 3 ;
1241
                             DUP 7 ;
1242
                             EDIV ;
1243
                             IF_NONE { PUSH int 288 ; FAILWITH } { CAR } ;
1244
                             DIG 8 ;
1245
                             GET 3 ;
1246
                             CAR ;
1247
                             CDR ;
1248
                             SUB ;
1249
                             ISNAT ;
1250
                             IF_NONE { PUSH int 288 ; FAILWITH } {} ;
1251
                             SWAP ;
1252
                             PAIR ;
1253
                             PAIR ;
1254
                             PAIR ;
1255
                             SWAP ;
1256
                             PAIR ;
1257
                             DUP ;
1258
                             DUG 4 ;
1259
                             UNPAIR ;
1260
                             UNPAIR ;
1261
                             SWAP ;
1262
                             UNPAIR ;
1263
                             SWAP ;
1264
                             UNPAIR ;
1265
                             SWAP ;
1266
                             UNPAIR ;
1267
                             SWAP ;
1268
                             DIG 9 ;
1269
                             GET 3 ;
1270
                             GET 3 ;
1271
                             DUP 8 ;
1272
                             EDIV ;
1273
                             IF_NONE { PUSH int 289 ; FAILWITH } { CAR } ;
1274
                             ADD ;
1275
                             SWAP ;
1276
                             PAIR ;
1277
                             SWAP ;
1278
                             PAIR ;
1279
                             SWAP ;
1280
                             PAIR ;
1281
                             SWAP ;
1282
                             PAIR ;
1283
                             PAIR ;
1284
                             DUG 3 }
1285
                           { DUP 4 ;
1286
                             UNPAIR ;
1287
                             SWAP ;
1288
                             UNPAIR ;
1289
                             UNPAIR ;
1290
                             CAR ;
1291
                             DUP 8 ;
1292
                             GET 3 ;
1293
                             GET 3 ;
1294
                             DUP 6 ;
1295
                             DUP 8 ;
1296
                             SUB ;
1297
                             ABS ;
1298
                             EDIV ;
1299
                             IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ;
1300
                             DIG 8 ;
1301
                             GET 3 ;
1302
                             CAR ;
1303
                             CDR ;
1304
                             SUB ;
1305
                             ABS ;
1306
                             SWAP ;
1307
                             PAIR ;
1308
                             PAIR ;
1309
                             PAIR ;
1310
                             SWAP ;
1311
                             PAIR ;
1312
                             DUG 3 } ;
1313
                         DIG 3 ;
1314
                         DUP ;
1315
                         GET 7 ;
1316
                         DUP 5 ;
1317
                         GET 6 ;
1318
                         ADD ;
1319
                         UPDATE 7 ;
1320
                         DUG 3 ;
1321
                         PUSH nat 0 ;
1322
                         DUP 4 ;
1323
                         GET 6 ;
1324
                         COMPARE ;
1325
                         GT ;
1326
                         IF
1327
                           {}
1328
                           { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
1329
                         DUP 4 ;
1330
                         GET 3 ;
1331
                         GET 6 ;
1332
                         IF
1333
                           { NIL operation ;
1334
                             DUP 5 ;
1335
                             GET 3 ;
1336
                             GET 5 ;
1337
                             CONTRACT %transfer (list (pair (address %from_)
1338
                                                           (list %txs (pair
1339
                                                                       (address %to_)
1340
                                                                       (pair
1341
                                                                         (nat %token_id)
1342
                                                                         (nat %amount)))))) ;
1343
                             IF_NONE { PUSH int 22 ; FAILWITH } {} ;
1344
                             PUSH mutez 0 ;
1345
                             NIL (pair address (list (pair address (pair nat nat)))) ;
1346
                             NIL (pair address (pair nat nat)) ;
1347
                             DUP 8 ;
1348
                             GET 6 ;
1349
                             DUP 10 ;
1350
                             GET 5 ;
1351
                             CDR ;
1352
                             SELF_ADDRESS ;
1353
                             PAIR 3 ;
1354
                             CONS ;
1355
                             SENDER ;
1356
                             PAIR ;
1357
                             CONS ;
1358
                             TRANSFER_TOKENS ;
1359
                             CONS }
1360
                           { NIL operation ;
1361
                             DUP 5 ;
1362
                             GET 3 ;
1363
                             GET 5 ;
1364
                             CONTRACT %transfer (pair (address %from)
1365
                                                      (pair (address %to) (nat %value))) ;
1366
                             IF_NONE { PUSH int 38 ; FAILWITH } {} ;
1367
                             PUSH mutez 0 ;
1368
                             DUP 6 ;
1369
                             GET 6 ;
1370
                             SELF_ADDRESS ;
1371
                             SENDER ;
1372
                             PAIR 3 ;
1373
                             TRANSFER_TOKENS ;
1374
                             CONS } ;
1375
                         PUSH nat 0 ;
1376
                         DUP 6 ;
1377
                         GET 3 ;
1378
                         GET 3 ;
1379
                         DUP 4 ;
1380
                         DUP 6 ;
1381
                         SUB ;
1382
                         ABS ;
1383
                         EDIV ;
1384
                         IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ;
1385
                         COMPARE ;
1386
                         GT ;
1387
                         IF
1388
                           {}
1389
                           { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
1390
                         DUP 5 ;
1391
                         CAR ;
1392
                         GET 7 ;
1393
                         IF
1394
                           { DUP 5 ;
1395
                             CAR ;
1396
                             GET 5 ;
1397
                             CONTRACT %transfer (list (pair (address %from_)
1398
                                                           (list %txs (pair
1399
                                                                       (address %to_)
1400
                                                                       (pair
1401
                                                                         (nat %token_id)
1402
                                                                         (nat %amount)))))) ;
1403
                             IF_NONE { PUSH int 22 ; FAILWITH } {} ;
1404
                             PUSH mutez 0 ;
1405
                             NIL (pair address (list (pair address (pair nat nat)))) ;
1406
                             NIL (pair address (pair nat nat)) ;
1407
                             DUP 9 ;
1408
                             GET 3 ;
1409
                             GET 3 ;
1410
                             DIG 6 ;
1411
                             DIG 7 ;
1412
                             SUB ;
1413
                             ABS ;
1414
                             EDIV ;
1415
                             IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ;
1416
                             DUP 8 ;
1417
                             GET 3 ;
1418
                             CAR ;
1419
                             CAR ;
1420
                             DIG 7 ;
1421
                             CAR ;
1422
                             CDR ;
1423
                             PAIR 3 ;
1424
                             CONS ;
1425
                             SELF_ADDRESS ;
1426
                             PAIR ;
1427
                             CONS ;
1428
                             TRANSFER_TOKENS ;
1429
                             CONS }
1430
                           { DUP 5 ;
1431
                             CAR ;
1432
                             GET 5 ;
1433
                             CONTRACT %transfer (pair (address %from)
1434
                                                      (pair (address %to) (nat %value))) ;
1435
                             IF_NONE { PUSH int 38 ; FAILWITH } {} ;
1436
                             PUSH mutez 0 ;
1437
                             DUP 7 ;
1438
                             GET 3 ;
1439
                             GET 3 ;
1440
                             DIG 4 ;
1441
                             DIG 5 ;
1442
                             SUB ;
1443
                             ABS ;
1444
                             EDIV ;
1445
                             IF_NONE { PUSH int 281 ; FAILWITH } { CAR } ;
1446
                             DIG 4 ;
1447
                             CAR ;
1448
                             CDR ;
1449
                             SELF_ADDRESS ;
1450
                             PAIR 3 ;
1451
                             TRANSFER_TOKENS ;
1452
                             CONS } }
1453
                       { PUSH int 5 ;
1454
                         PUSH nat 0 ;
1455
                         DUP ;
1456
                         DUP 4 ;
1457
                         SUB ;
1458
                         ABS ;
1459
                         DUP 7 ;
1460
                         GET 3 ;
1461
                         GET 3 ;
1462
                         DUP 7 ;
1463
                         GET 6 ;
1464
                         MUL ;
1465
                         DUP 6 ;
1466
                         ADD ;
1467
                         ADD ;
1468
                         SWAP ;
1469
                         DUP ;
1470
                         DUG 2 ;
1471
                         DUP 5 ;
1472
                         SUB ;
1473
                         ABS ;
1474
                         DUP 8 ;
1475
                         GET 3 ;
1476
                         GET 3 ;
1477
                         DUP 8 ;
1478
                         GET 6 ;
1479
                         MUL ;
1480
                         DUP 7 ;
1481
                         ADD ;
1482
                         ADD ;
1483
                         DUP 3 ;
1484
                         DUP 6 ;
1485
                         SUB ;
1486
                         ABS ;
1487
                         DUP 9 ;
1488
                         GET 3 ;
1489
                         GET 3 ;
1490
                         DUP 9 ;
1491
                         GET 6 ;
1492
                         MUL ;
1493
                         DUP 8 ;
1494
                         ADD ;
1495
                         ADD ;
1496
                         MUL ;
1497
                         DUP 3 ;
1498
                         DUP 6 ;
1499
                         SUB ;
1500
                         ABS ;
1501
                         DUP 9 ;
1502
                         GET 3 ;
1503
                         GET 3 ;
1504
                         DUP 9 ;
1505
                         GET 6 ;
1506
                         MUL ;
1507
                         DUP 8 ;
1508
                         ADD ;
1509
                         ADD ;
1510
                         DUP 4 ;
1511
                         DUP 7 ;
1512
                         SUB ;
1513
                         ABS ;
1514
                         DUP 10 ;
1515
                         GET 3 ;
1516
                         GET 3 ;
1517
                         DUP 10 ;
1518
                         GET 6 ;
1519
                         MUL ;
1520
                         DUP 9 ;
1521
                         ADD ;
1522
                         ADD ;
1523
                         MUL ;
1524
                         DUP 4 ;
1525
                         DUP 7 ;
1526
                         SUB ;
1527
                         ABS ;
1528
                         DUP 10 ;
1529
                         GET 3 ;
1530
                         GET 3 ;
1531
                         DUP 10 ;
1532
                         GET 6 ;
1533
                         MUL ;
1534
                         DUP 9 ;
1535
                         ADD ;
1536
                         ADD ;
1537
                         DUP 5 ;
1538
                         DUP 8 ;
1539
                         SUB ;
1540
                         ABS ;
1541
                         DUP 11 ;
1542
                         GET 3 ;
1543
                         GET 3 ;
1544
                         DUP 11 ;
1545
                         GET 6 ;
1546
                         MUL ;
1547
                         DUP 10 ;
1548
                         ADD ;
1549
                         ADD ;
1550
                         MUL ;
1551
                         MUL ;
1552
                         MUL ;
1553
                         MUL ;
1554
                         INT ;
1555
                         SWAP ;
1556
                         DUP ;
1557
                         DUG 2 ;
1558
                         DUP 5 ;
1559
                         SUB ;
1560
                         ABS ;
1561
                         DUP 8 ;
1562
                         GET 3 ;
1563
                         GET 3 ;
1564
                         DUP 8 ;
1565
                         GET 6 ;
1566
                         MUL ;
1567
                         DUP 7 ;
1568
                         ADD ;
1569
                         SUB ;
1570
                         DUP 3 ;
1571
                         DUP 6 ;
1572
                         SUB ;
1573
                         ABS ;
1574
                         DUP 9 ;
1575
                         GET 3 ;
1576
                         GET 3 ;
1577
                         DUP 9 ;
1578
                         GET 6 ;
1579
                         MUL ;
1580
                         DUP 8 ;
1581
                         ADD ;
1582
                         SUB ;
1583
                         DUP 4 ;
1584
                         DUP 7 ;
1585
                         SUB ;
1586
                         ABS ;
1587
                         DUP 10 ;
1588
                         GET 3 ;
1589
                         GET 3 ;
1590
                         DUP 10 ;
1591
                         GET 6 ;
1592
                         MUL ;
1593
                         DUP 9 ;
1594
                         ADD ;
1595
                         SUB ;
1596
                         MUL ;
1597
                         DUP 4 ;
1598
                         DUP 7 ;
1599
                         SUB ;
1600
                         ABS ;
1601
                         DUP 10 ;
1602
                         GET 3 ;
1603
                         GET 3 ;
1604
                         DUP 10 ;
1605
                         GET 6 ;
1606
                         MUL ;
1607
                         DUP 9 ;
1608
                         ADD ;
1609
                         SUB ;
1610
                         DUP 5 ;
1611
                         DUP 8 ;
1612
                         SUB ;
1613
                         ABS ;
1614
                         DUP 11 ;
1615
                         GET 3 ;
1616
                         GET 3 ;
1617
                         DUP 11 ;
1618
                         GET 6 ;
1619
                         MUL ;
1620
                         DUP 10 ;
1621
                         ADD ;
1622
                         SUB ;
1623
                         MUL ;
1624
                         DUP 5 ;
1625
                         DUP 8 ;
1626
                         SUB ;
1627
                         ABS ;
1628
                         DUP 11 ;
1629
                         GET 3 ;
1630
                         GET 3 ;
1631
                         DUP 11 ;
1632
                         GET 6 ;
1633
                         MUL ;
1634
                         DUP 10 ;
1635
                         ADD ;
1636
                         SUB ;
1637
                         DUP 6 ;
1638
                         DUP 9 ;
1639
                         SUB ;
1640
                         ABS ;
1641
                         DUP 12 ;
1642
                         GET 3 ;
1643
                         GET 3 ;
1644
                         DUP 12 ;
1645
                         GET 6 ;
1646
                         MUL ;
1647
                         DUP 11 ;
1648
                         ADD ;
1649
                         SUB ;
1650
                         MUL ;
1651
                         MUL ;
1652
                         MUL ;
1653
                         MUL ;
1654
                         ADD ;
1655
                         ABS ;
1656
                         PUSH nat 8 ;
1657
                         MUL ;
1658
                         SWAP ;
1659
                         DUP ;
1660
                         DUG 2 ;
1661
                         DUP 5 ;
1662
                         SUB ;
1663
                         ABS ;
1664
                         DUP 8 ;
1665
                         GET 3 ;
1666
                         GET 3 ;
1667
                         DUP 8 ;
1668
                         GET 6 ;
1669
                         MUL ;
1670
                         DUP 7 ;
1671
                         ADD ;
1672
                         SUB ;
1673
                         DUP 3 ;
1674
                         DUP 6 ;
1675
                         SUB ;
1676
                         ABS ;
1677
                         DUP 9 ;
1678
                         GET 3 ;
1679
                         GET 3 ;
1680
                         DUP 9 ;
1681
                         GET 6 ;
1682
                         MUL ;
1683
                         DUP 8 ;
1684
                         ADD ;
1685
                         SUB ;
1686
                         MUL ;
1687
                         DUP 3 ;
1688
                         DUP 6 ;
1689
                         SUB ;
1690
                         ABS ;
1691
                         DUP 9 ;
1692
                         GET 3 ;
1693
                         GET 3 ;
1694
                         DUP 9 ;
1695
                         GET 6 ;
1696
                         MUL ;
1697
                         DUP 8 ;
1698
                         ADD ;
1699
                         SUB ;
1700
                         DUP 4 ;
1701
                         DUP 7 ;
1702
                         SUB ;
1703
                         ABS ;
1704
                         DUP 10 ;
1705
                         GET 3 ;
1706
                         GET 3 ;
1707
                         DUP 10 ;
1708
                         GET 6 ;
1709
                         MUL ;
1710
                         DUP 9 ;
1711
                         ADD ;
1712
                         SUB ;
1713
                         MUL ;
1714
                         MUL ;
1715
                         DUP 3 ;
1716
                         DUP 6 ;
1717
                         SUB ;
1718
                         ABS ;
1719
                         DUP 9 ;
1720
                         GET 3 ;
1721
                         GET 3 ;
1722
                         DUP 9 ;
1723
                         GET 6 ;
1724
                         MUL ;
1725
                         DUP 8 ;
1726
                         ADD ;
1727
                         SUB ;
1728
                         DUP 4 ;
1729
                         DUP 7 ;
1730
                         SUB ;
1731
                         ABS ;
1732
                         DUP 10 ;
1733
                         GET 3 ;
1734
                         GET 3 ;
1735
                         DUP 10 ;
1736
                         GET 6 ;
1737
                         MUL ;
1738
                         DUP 9 ;
1739
                         ADD ;
1740
                         SUB ;
1741
                         MUL ;
1742
                         DUP 4 ;
1743
                         DUP 7 ;
1744
                         SUB ;
1745
                         ABS ;
1746
                         DUP 10 ;
1747
                         GET 3 ;
1748
                         GET 3 ;
1749
                         DUP 10 ;
1750
                         GET 6 ;
1751
                         MUL ;
1752
                         DUP 9 ;
1753
                         ADD ;
1754
                         SUB ;
1755
                         DUP 5 ;
1756
                         DUP 8 ;
1757
                         SUB ;
1758
                         ABS ;
1759
                         DUP 11 ;
1760
                         GET 3 ;
1761
                         GET 3 ;
1762
                         DUP 11 ;
1763
                         GET 6 ;
1764
                         MUL ;
1765
                         DUP 10 ;
1766
                         ADD ;
1767
                         SUB ;
1768
                         MUL ;
1769
                         MUL ;
1770
                         MUL ;
1771
                         DUP 3 ;
1772
                         DUP 6 ;
1773
                         SUB ;
1774
                         ABS ;
1775
                         DUP 9 ;
1776
                         GET 3 ;
1777
                         GET 3 ;
1778
                         DUP 9 ;
1779
                         GET 6 ;
1780
                         MUL ;
1781
                         DUP 8 ;
1782
                         ADD ;
1783
                         ADD ;
1784
                         DUP 4 ;
1785
                         DUP 7 ;
1786
                         SUB ;
1787
                         ABS ;
1788
                         DUP 10 ;
1789
                         GET 3 ;
1790
                         GET 3 ;
1791
                         DUP 10 ;
1792
                         GET 6 ;
1793
                         MUL ;
1794
                         DUP 9 ;
1795
                         ADD ;
1796
                         ADD ;
1797
                         MUL ;
1798
                         DUP 4 ;
1799
                         DUP 7 ;
1800
                         SUB ;
1801
                         ABS ;
1802
                         DUP 10 ;
1803
                         GET 3 ;
1804
                         GET 3 ;
1805
                         DUP 10 ;
1806
                         GET 6 ;
1807
                         MUL ;
1808
                         DUP 9 ;
1809
                         ADD ;
1810
                         ADD ;
1811
                         DUP 5 ;
1812
                         DUP 8 ;
1813
                         SUB ;
1814
                         ABS ;
1815
                         DUP 11 ;
1816
                         GET 3 ;
1817
                         GET 3 ;
1818
                         DUP 11 ;
1819
                         GET 6 ;
1820
                         MUL ;
1821
                         DUP 10 ;
1822
                         ADD ;
1823
                         ADD ;
1824
                         MUL ;
1825
                         MUL ;
1826
                         DUP 4 ;
1827
                         DUP 7 ;
1828
                         SUB ;
1829
                         ABS ;
1830
                         DUP 10 ;
1831
                         GET 3 ;
1832
                         GET 3 ;
1833
                         DUP 10 ;
1834
                         GET 6 ;
1835
                         MUL ;
1836
                         DUP 9 ;
1837
                         ADD ;
1838
                         ADD ;
1839
                         DUP 5 ;
1840
                         DUP 8 ;
1841
                         SUB ;
1842
                         ABS ;
1843
                         DUP 11 ;
1844
                         GET 3 ;
1845
                         GET 3 ;
1846
                         DUP 11 ;
1847
                         GET 6 ;
1848
                         MUL ;
1849
                         DUP 10 ;
1850
                         ADD ;
1851
                         ADD ;
1852
                         MUL ;
1853
                         DUP 5 ;
1854
                         DUP 8 ;
1855
                         SUB ;
1856
                         ABS ;
1857
                         DUP 11 ;
1858
                         GET 3 ;
1859
                         GET 3 ;
1860
                         DUP 11 ;
1861
                         GET 6 ;
1862
                         MUL ;
1863
                         DUP 10 ;
1864
                         ADD ;
1865
                         ADD ;
1866
                         DUP 6 ;
1867
                         DUP 9 ;
1868
                         SUB ;
1869
                         ABS ;
1870
                         DUP 12 ;
1871
                         GET 3 ;
1872
                         GET 3 ;
1873
                         DUP 12 ;
1874
                         GET 6 ;
1875
                         MUL ;
1876
                         DUP 11 ;
1877
                         ADD ;
1878
                         ADD ;
1879
                         MUL ;
1880
                         MUL ;
1881
                         MUL ;
1882
                         INT ;
1883
                         SUB ;
1884
                         ABS ;
1885
                         PAIR ;
1886
                         DUP ;
1887
                         CAR ;
1888
                         SWAP ;
1889
                         DUP ;
1890
                         DUG 2 ;
1891
                         CDR ;
1892
                         PUSH int 0 ;
1893
                         DUP 6 ;
1894
                         COMPARE ;
1895
                         NEQ ;
1896
                         LOOP { DIG 2 ;
1897
                                DROP 3 ;
1898
                                DUP ;
1899
                                DUP 4 ;
1900
                                SUB ;
1901
                                ABS ;
1902
                                DUP 7 ;
1903
                                GET 3 ;
1904
                                GET 3 ;
1905
                                DUP 7 ;
1906
                                GET 6 ;
1907
                                MUL ;
1908
                                DUP 6 ;
1909
                                ADD ;
1910
                                ADD ;
1911
                                SWAP ;
1912
                                DUP ;
1913
                                DUG 2 ;
1914
                                DUP 5 ;
1915
                                SUB ;
1916
                                ABS ;
1917
                                DUP 8 ;
1918
                                GET 3 ;
1919
                                GET 3 ;
1920
                                DUP 8 ;
1921
                                GET 6 ;
1922
                                MUL ;
1923
                                DUP 7 ;
1924
                                ADD ;
1925
                                ADD ;
1926
                                DUP 3 ;
1927
                                DUP 6 ;
1928
                                SUB ;
1929
                                ABS ;
1930
                                DUP 9 ;
1931
                                GET 3 ;
1932
                                GET 3 ;
1933
                                DUP 9 ;
1934
                                GET 6 ;
1935
                                MUL ;
1936
                                DUP 8 ;
1937
                                ADD ;
1938
                                ADD ;
1939
                                MUL ;
1940
                                DUP 3 ;
1941
                                DUP 6 ;
1942
                                SUB ;
1943
                                ABS ;
1944
                                DUP 9 ;
1945
                                GET 3 ;
1946
                                GET 3 ;
1947
                                DUP 9 ;
1948
                                GET 6 ;
1949
                                MUL ;
1950
                                DUP 8 ;
1951
                                ADD ;
1952
                                ADD ;
1953
                                DUP 4 ;
1954
                                DUP 7 ;
1955
                                SUB ;
1956
                                ABS ;
1957
                                DUP 10 ;
1958
                                GET 3 ;
1959
                                GET 3 ;
1960
                                DUP 10 ;
1961
                                GET 6 ;
1962
                                MUL ;
1963
                                DUP 9 ;
1964
                                ADD ;
1965
                                ADD ;
1966
                                MUL ;
1967
                                DUP 4 ;
1968
                                DUP 7 ;
1969
                                SUB ;
1970
                                ABS ;
1971
                                DUP 10 ;
1972
                                GET 3 ;
1973
                                GET 3 ;
1974
                                DUP 10 ;
1975
                                GET 6 ;
1976
                                MUL ;
1977
                                DUP 9 ;
1978
                                ADD ;
1979
                                ADD ;
1980
                                DUP 5 ;
1981
                                DUP 8 ;
1982
                                SUB ;
1983
                                ABS ;
1984
                                DUP 11 ;
1985
                                GET 3 ;
1986
                                GET 3 ;
1987
                                DUP 11 ;
1988
                                GET 6 ;
1989
                                MUL ;
1990
                                DUP 10 ;
1991
                                ADD ;
1992
                                ADD ;
1993
                                MUL ;
1994
                                MUL ;
1995
                                MUL ;
1996
                                MUL ;
1997
                                INT ;
1998
                                SWAP ;
1999
                                DUP ;
2000
                                DUG 2 ;
2001
                                DUP 5 ;
2002
                                SUB ;
2003
                                ABS ;
2004
                                DUP 8 ;
2005
                                GET 3 ;
2006
                                GET 3 ;
2007
                                DUP 8 ;
2008
                                GET 6 ;
2009
                                MUL ;
2010
                                DUP 7 ;
2011
                                ADD ;
2012
                                SUB ;
2013
                                DUP 3 ;
2014
                                DUP 6 ;
2015
                                SUB ;
2016
                                ABS ;
2017
                                DUP 9 ;
2018
                                GET 3 ;
2019
                                GET 3 ;
2020
                                DUP 9 ;
2021
                                GET 6 ;
2022
                                MUL ;
2023
                                DUP 8 ;
2024
                                ADD ;
2025
                                SUB ;
2026
                                DUP 4 ;
2027
                                DUP 7 ;
2028
                                SUB ;
2029
                                ABS ;
2030
                                DUP 10 ;
2031
                                GET 3 ;
2032
                                GET 3 ;
2033
                                DUP 10 ;
2034
                                GET 6 ;
2035
                                MUL ;
2036
                                DUP 9 ;
2037
                                ADD ;
2038
                                SUB ;
2039
                                MUL ;
2040
                                DUP 4 ;
2041
                                DUP 7 ;
2042
                                SUB ;
2043
                                ABS ;
2044
                                DUP 10 ;
2045
                                GET 3 ;
2046
                                GET 3 ;
2047
                                DUP 10 ;
2048
                                GET 6 ;
2049
                                MUL ;
2050
                                DUP 9 ;
2051
                                ADD ;
2052
                                SUB ;
2053
                                DUP 5 ;
2054
                                DUP 8 ;
2055
                                SUB ;
2056
                                ABS ;
2057
                                DUP 11 ;
2058
                                GET 3 ;
2059
                                GET 3 ;
2060
                                DUP 11 ;
2061
                                GET 6 ;
2062
                                MUL ;
2063
                                DUP 10 ;
2064
                                ADD ;
2065
                                SUB ;
2066
                                MUL ;
2067
                                DUP 5 ;
2068
                                DUP 8 ;
2069
                                SUB ;
2070
                                ABS ;
2071
                                DUP 11 ;
2072
                                GET 3 ;
2073
                                GET 3 ;
2074
                                DUP 11 ;
2075
                                GET 6 ;
2076
                                MUL ;
2077
                                DUP 10 ;
2078
                                ADD ;
2079
                                SUB ;
2080
                                DUP 6 ;
2081
                                DUP 9 ;
2082
                                SUB ;
2083
                                ABS ;
2084
                                DUP 12 ;
2085
                                GET 3 ;
2086
                                GET 3 ;
2087
                                DUP 12 ;
2088
                                GET 6 ;
2089
                                MUL ;
2090
                                DUP 11 ;
2091
                                ADD ;
2092
                                SUB ;
2093
                                MUL ;
2094
                                MUL ;
2095
                                MUL ;
2096
                                MUL ;
2097
                                ADD ;
2098
                                ABS ;
2099
                                PUSH nat 8 ;
2100
                                MUL ;
2101
                                SWAP ;
2102
                                DUP ;
2103
                                DUG 2 ;
2104
                                DUP 5 ;
2105
                                SUB ;
2106
                                ABS ;
2107
                                DUP 8 ;
2108
                                GET 3 ;
2109
                                GET 3 ;
2110
                                DUP 8 ;
2111
                                GET 6 ;
2112
                                MUL ;
2113
                                DUP 7 ;
2114
                                ADD ;
2115
                                SUB ;
2116
                                DUP 3 ;
2117
                                DUP 6 ;
2118
                                SUB ;
2119
                                ABS ;
2120
                                DUP 9 ;
2121
                                GET 3 ;
2122
                                GET 3 ;
2123
                                DUP 9 ;
2124
                                GET 6 ;
2125
                                MUL ;
2126
                                DUP 8 ;
2127
                                ADD ;
2128
                                SUB ;
2129
                                MUL ;
2130
                                DUP 3 ;
2131
                                DUP 6 ;
2132
                                SUB ;
2133
                                ABS ;
2134
                                DUP 9 ;
2135
                                GET 3 ;
2136
                                GET 3 ;
2137
                                DUP 9 ;
2138
                                GET 6 ;
2139
                                MUL ;
2140
                                DUP 8 ;
2141
                                ADD ;
2142
                                SUB ;
2143
                                DUP 4 ;
2144
                                DUP 7 ;
2145
                                SUB ;
2146
                                ABS ;
2147
                                DUP 10 ;
2148
                                GET 3 ;
2149
                                GET 3 ;
2150
                                DUP 10 ;
2151
                                GET 6 ;
2152
                                MUL ;
2153
                                DUP 9 ;
2154
                                ADD ;
2155
                                SUB ;
2156
                                MUL ;
2157
                                MUL ;
2158
                                DUP 3 ;
2159
                                DUP 6 ;
2160
                                SUB ;
2161
                                ABS ;
2162
                                DUP 9 ;
2163
                                GET 3 ;
2164
                                GET 3 ;
2165
                                DUP 9 ;
2166
                                GET 6 ;
2167
                                MUL ;
2168
                                DUP 8 ;
2169
                                ADD ;
2170
                                SUB ;
2171
                                DUP 4 ;
2172
                                DUP 7 ;
2173
                                SUB ;
2174
                                ABS ;
2175
                                DUP 10 ;
2176
                                GET 3 ;
2177
                                GET 3 ;
2178
                                DUP 10 ;
2179
                                GET 6 ;
2180
                                MUL ;
2181
                                DUP 9 ;
2182
                                ADD ;
2183
                                SUB ;
2184
                                MUL ;
2185
                                DUP 4 ;
2186
                                DUP 7 ;
2187
                                SUB ;
2188
                                ABS ;
2189
                                DUP 10 ;
2190
                                GET 3 ;
2191
                                GET 3 ;
2192
                                DUP 10 ;
2193
                                GET 6 ;
2194
                                MUL ;
2195
                                DUP 9 ;
2196
                                ADD ;
2197
                                SUB ;
2198
                                DUP 5 ;
2199
                                DUP 8 ;
2200
                                SUB ;
2201
                                ABS ;
2202
                                DUP 11 ;
2203
                                GET 3 ;
2204
                                GET 3 ;
2205
                                DUP 11 ;
2206
                                GET 6 ;
2207
                                MUL ;
2208
                                DUP 10 ;
2209
                                ADD ;
2210
                                SUB ;
2211
                                MUL ;
2212
                                MUL ;
2213
                                MUL ;
2214
                                DUP 3 ;
2215
                                DUP 6 ;
2216
                                SUB ;
2217
                                ABS ;
2218
                                DUP 9 ;
2219
                                GET 3 ;
2220
                                GET 3 ;
2221
                                DUP 9 ;
2222
                                GET 6 ;
2223
                                MUL ;
2224
                                DUP 8 ;
2225
                                ADD ;
2226
                                ADD ;
2227
                                DUP 4 ;
2228
                                DUP 7 ;
2229
                                SUB ;
2230
                                ABS ;
2231
                                DUP 10 ;
2232
                                GET 3 ;
2233
                                GET 3 ;
2234
                                DUP 10 ;
2235
                                GET 6 ;
2236
                                MUL ;
2237
                                DUP 9 ;
2238
                                ADD ;
2239
                                ADD ;
2240
                                MUL ;
2241
                                DUP 4 ;
2242
                                DUP 7 ;
2243
                                SUB ;
2244
                                ABS ;
2245
                                DUP 10 ;
2246
                                GET 3 ;
2247
                                GET 3 ;
2248
                                DUP 10 ;
2249
                                GET 6 ;
2250
                                MUL ;
2251
                                DUP 9 ;
2252
                                ADD ;
2253
                                ADD ;
2254
                                DUP 5 ;
2255
                                DUP 8 ;
2256
                                SUB ;
2257
                                ABS ;
2258
                                DUP 11 ;
2259
                                GET 3 ;
2260
                                GET 3 ;
2261
                                DUP 11 ;
2262
                                GET 6 ;
2263
                                MUL ;
2264
                                DUP 10 ;
2265
                                ADD ;
2266
                                ADD ;
2267
                                MUL ;
2268
                                MUL ;
2269
                                DUP 4 ;
2270
                                DUP 7 ;
2271
                                SUB ;
2272
                                ABS ;
2273
                                DUP 10 ;
2274
                                GET 3 ;
2275
                                GET 3 ;
2276
                                DUP 10 ;
2277
                                GET 6 ;
2278
                                MUL ;
2279
                                DUP 9 ;
2280
                                ADD ;
2281
                                ADD ;
2282
                                DUP 5 ;
2283
                                DUP 8 ;
2284
                                SUB ;
2285
                                ABS ;
2286
                                DUP 11 ;
2287
                                GET 3 ;
2288
                                GET 3 ;
2289
                                DUP 11 ;
2290
                                GET 6 ;
2291
                                MUL ;
2292
                                DUP 10 ;
2293
                                ADD ;
2294
                                ADD ;
2295
                                MUL ;
2296
                                DUP 5 ;
2297
                                DUP 8 ;
2298
                                SUB ;
2299
                                ABS ;
2300
                                DUP 11 ;
2301
                                GET 3 ;
2302
                                GET 3 ;
2303
                                DUP 11 ;
2304
                                GET 6 ;
2305
                                MUL ;
2306
                                DUP 10 ;
2307
                                ADD ;
2308
                                ADD ;
2309
                                DUP 6 ;
2310
                                DUP 9 ;
2311
                                SUB ;
2312
                                ABS ;
2313
                                DUP 12 ;
2314
                                GET 3 ;
2315
                                GET 3 ;
2316
                                DUP 12 ;
2317
                                GET 6 ;
2318
                                MUL ;
2319
                                DUP 11 ;
2320
                                ADD ;
2321
                                ADD ;
2322
                                MUL ;
2323
                                MUL ;
2324
                                MUL ;
2325
                                INT ;
2326
                                SUB ;
2327
                                ABS ;
2328
                                PAIR ;
2329
                                DUP ;
2330
                                CAR ;
2331
                                SWAP ;
2332
                                DUP ;
2333
                                DUG 2 ;
2334
                                CDR ;
2335
                                DUP ;
2336
                                DUP 7 ;
2337
                                DUP 9 ;
2338
                                SUB ;
2339
                                DUP 8 ;
2340
                                DUP 10 ;
2341
                                SUB ;
2342
                                MUL ;
2343
                                DUP 8 ;
2344
                                DUP 10 ;
2345
                                SUB ;
2346
                                DUP 9 ;
2347
                                DUP 11 ;
2348
                                SUB ;
2349
                                MUL ;
2350
                                MUL ;
2351
                                DUP 8 ;
2352
                                DUP 10 ;
2353
                                SUB ;
2354
                                DUP 9 ;
2355
                                DUP 11 ;
2356
                                SUB ;
2357
                                MUL ;
2358
                                DUP 9 ;
2359
                                DUP 11 ;
2360
                                SUB ;
2361
                                DUP 10 ;
2362
                                DUP 12 ;
2363
                                SUB ;
2364
                                MUL ;
2365
                                MUL ;
2366
                                MUL ;
2367
                                DUP 8 ;
2368
                                DUP 10 ;
2369
                                ADD ;
2370
                                DUP 9 ;
2371
                                DUP 11 ;
2372
                                ADD ;
2373
                                MUL ;
2374
                                DUP 9 ;
2375
                                DUP 11 ;
2376
                                ADD ;
2377
                                DUP 10 ;
2378
                                DUP 12 ;
2379
                                ADD ;
2380
                                MUL ;
2381
                                MUL ;
2382
                                DUP 9 ;
2383
                                DUP 11 ;
2384
                                ADD ;
2385
                                DUP 10 ;
2386
                                DUP 12 ;
2387
                                ADD ;
2388
                                MUL ;
2389
                                DUP 10 ;
2390
                                DUP 12 ;
2391
                                ADD ;
2392
                                DUP 11 ;
2393
                                DUP 13 ;
2394
                                ADD ;
2395
                                MUL ;
2396
                                MUL ;
2397
                                MUL ;
2398
                                INT ;
2399
                                SUB ;
2400
                                ABS ;
2401
                                DUP 4 ;
2402
                                SUB ;
2403
                                ABS ;
2404
                                EDIV ;
2405
                                IF_NONE { PUSH int 160 ; FAILWITH } { CAR } ;
2406
                                DIG 4 ;
2407
                                ADD ;
2408
                                DUG 3 ;
2409
                                PUSH int 1 ;
2410
                                DIG 5 ;
2411
                                SUB ;
2412
                                DUG 4 ;
2413
                                PUSH int 0 ;
2414
                                DUP 6 ;
2415
                                COMPARE ;
2416
                                NEQ } ;
2417
                         DROP 3 ;
2418
                         SWAP ;
2419
                         DROP ;
2420
                         SWAP ;
2421
                         DROP ;
2422
                         SWAP ;
2423
                         DROP ;
2424
                         DIG 3 ;
2425
                         DROP ;
2426
                         DUP 3 ;
2427
                         CAR ;
2428
                         CAR ;
2429
                         CAR ;
2430
                         CDR ;
2431
                         SWAP ;
2432
                         DUP ;
2433
                         DUG 2 ;
2434
                         EDIV ;
2435
                         IF_NONE { PUSH int 303 ; FAILWITH } { CAR } ;
2436
                         DUP 3 ;
2437
                         CAR ;
2438
                         CAR ;
2439
                         DUP 5 ;
2440
                         GET 9 ;
2441
                         DUP 3 ;
2442
                         DUP 5 ;
2443
                         SUB ;
2444
                         ABS ;
2445
                         EDIV ;
2446
                         IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ;
2447
                         COMPARE ;
2448
                         GE ;
2449
                         IF {} { PUSH string "FlatSwap_Min_Cash_Error" ; FAILWITH } ;
2450
                         DIG 3 ;
2451
                         DUP ;
2452
                         GET 7 ;
2453
                         SWAP ;
2454
                         DUP ;
2455
                         DUG 5 ;
2456
                         GET 9 ;
2457
                         DUP 3 ;
2458
                         DUP 5 ;
2459
                         SUB ;
2460
                         ABS ;
2461
                         EDIV ;
2462
                         IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ;
2463
                         COMPARE ;
2464
                         LT ;
2465
                         IF
2466
                           {}
2467
                           { PUSH string "FlatSwap_Cash_Bought_Exceeds_Pool" ; FAILWITH } ;
2468
                         DUP 4 ;
2469
                         CAR ;
2470
                         GET 3 ;
2471
                         CDR ;
2472
                         IF
2473
                           { DIG 3 ;
2474
                             DUP ;
2475
                             DUP ;
2476
                             DUG 5 ;
2477
                             GET 9 ;
2478
                             DUP 4 ;
2479
                             EDIV ;
2480
                             IF_NONE { PUSH int 311 ; FAILWITH } { CAR } ;
2481
                             DIG 5 ;
2482
                             GET 7 ;
2483
                             SUB ;
2484
                             ISNAT ;
2485
                             IF_NONE { PUSH int 311 ; FAILWITH } {} ;
2486
                             UPDATE 7 ;
2487
                             DUP ;
2488
                             DUG 4 ;
2489
                             UNPAIR ;
2490
                             SWAP ;
2491
                             UNPAIR ;
2492
                             SWAP ;
2493
                             UNPAIR ;
2494
                             UNPAIR ;
2495
                             DIG 8 ;
2496
                             GET 9 ;
2497
                             DUP 7 ;
2498
                             EDIV ;
2499
                             IF_NONE { PUSH int 312 ; FAILWITH } { CAR } ;
2500
                             ADD ;
2501
                             PAIR ;
2502
                             PAIR ;
2503
                             SWAP ;
2504
                             PAIR ;
2505
                             SWAP ;
2506
                             PAIR ;
2507
                             DUG 3 }
2508
                           { DIG 3 ;
2509
                             DUP ;
2510
                             DUP ;
2511
                             DUG 5 ;
2512
                             GET 9 ;
2513
                             DUP 3 ;
2514
                             DUP 5 ;
2515
                             SUB ;
2516
                             ABS ;
2517
                             EDIV ;
2518
                             IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ;
2519
                             DIG 5 ;
2520
                             GET 7 ;
2521
                             SUB ;
2522
                             ISNAT ;
2523
                             IF_NONE { PUSH int 316 ; FAILWITH } {} ;
2524
                             UPDATE 7 ;
2525
                             DUG 3 } ;
2526
                         DIG 3 ;
2527
                         UNPAIR ;
2528
                         SWAP ;
2529
                         UNPAIR ;
2530
                         UNPAIR ;
2531
                         UNPAIR ;
2532
                         SWAP ;
2533
                         DUP 8 ;
2534
                         GET 6 ;
2535
                         ADD ;
2536
                         SWAP ;
2537
                         PAIR ;
2538
                         PAIR ;
2539
                         PAIR ;
2540
                         SWAP ;
2541
                         PAIR ;
2542
                         DUG 3 ;
2543
                         PUSH nat 0 ;
2544
                         DUP 4 ;
2545
                         GET 6 ;
2546
                         COMPARE ;
2547
                         GT ;
2548
                         IF
2549
                           {}
2550
                           { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
2551
                         DUP 4 ;
2552
                         CAR ;
2553
                         GET 7 ;
2554
                         IF
2555
                           { NIL operation ;
2556
                             DUP 5 ;
2557
                             CAR ;
2558
                             GET 5 ;
2559
                             CONTRACT %transfer (list (pair (address %from_)
2560
                                                           (list %txs (pair
2561
                                                                       (address %to_)
2562
                                                                       (pair
2563
                                                                         (nat %token_id)
2564
                                                                         (nat %amount)))))) ;
2565
                             IF_NONE { PUSH int 22 ; FAILWITH } {} ;
2566
                             PUSH mutez 0 ;
2567
                             NIL (pair address (list (pair address (pair nat nat)))) ;
2568
                             NIL (pair address (pair nat nat)) ;
2569
                             DUP 8 ;
2570
                             GET 6 ;
2571
                             DUP 10 ;
2572
                             GET 3 ;
2573
                             CAR ;
2574
                             CAR ;
2575
                             SELF_ADDRESS ;
2576
                             PAIR 3 ;
2577
                             CONS ;
2578
                             SENDER ;
2579
                             PAIR ;
2580
                             CONS ;
2581
                             TRANSFER_TOKENS ;
2582
                             CONS }
2583
                           { NIL operation ;
2584
                             DUP 5 ;
2585
                             CAR ;
2586
                             GET 5 ;
2587
                             CONTRACT %transfer (pair (address %from)
2588
                                                      (pair (address %to) (nat %value))) ;
2589
                             IF_NONE { PUSH int 38 ; FAILWITH } {} ;
2590
                             PUSH mutez 0 ;
2591
                             DUP 6 ;
2592
                             GET 6 ;
2593
                             SELF_ADDRESS ;
2594
                             SENDER ;
2595
                             PAIR 3 ;
2596
                             TRANSFER_TOKENS ;
2597
                             CONS } ;
2598
                         PUSH nat 0 ;
2599
                         DUP 6 ;
2600
                         GET 9 ;
2601
                         DUP 4 ;
2602
                         DUP 6 ;
2603
                         SUB ;
2604
                         ABS ;
2605
                         EDIV ;
2606
                         IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ;
2607
                         COMPARE ;
2608
                         GT ;
2609
                         IF
2610
                           {}
2611
                           { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
2612
                         DUP 5 ;
2613
                         GET 3 ;
2614
                         GET 6 ;
2615
                         IF
2616
                           { DUP 5 ;
2617
                             GET 3 ;
2618
                             GET 5 ;
2619
                             CONTRACT %transfer (list (pair (address %from_)
2620
                                                           (list %txs (pair
2621
                                                                       (address %to_)
2622
                                                                       (pair
2623
                                                                         (nat %token_id)
2624
                                                                         (nat %amount)))))) ;
2625
                             IF_NONE { PUSH int 22 ; FAILWITH } {} ;
2626
                             PUSH mutez 0 ;
2627
                             NIL (pair address (list (pair address (pair nat nat)))) ;
2628
                             NIL (pair address (pair nat nat)) ;
2629
                             DUP 9 ;
2630
                             GET 9 ;
2631
                             DIG 6 ;
2632
                             DIG 7 ;
2633
                             SUB ;
2634
                             ABS ;
2635
                             EDIV ;
2636
                             IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ;
2637
                             DUP 8 ;
2638
                             GET 5 ;
2639
                             CDR ;
2640
                             DIG 7 ;
2641
                             CAR ;
2642
                             CDR ;
2643
                             PAIR 3 ;
2644
                             CONS ;
2645
                             SELF_ADDRESS ;
2646
                             PAIR ;
2647
                             CONS ;
2648
                             TRANSFER_TOKENS ;
2649
                             CONS }
2650
                           { DUP 5 ;
2651
                             GET 3 ;
2652
                             GET 5 ;
2653
                             CONTRACT %transfer (pair (address %from)
2654
                                                      (pair (address %to) (nat %value))) ;
2655
                             IF_NONE { PUSH int 38 ; FAILWITH } {} ;
2656
                             PUSH mutez 0 ;
2657
                             DUP 7 ;
2658
                             GET 9 ;
2659
                             DIG 4 ;
2660
                             DIG 5 ;
2661
                             SUB ;
2662
                             ABS ;
2663
                             EDIV ;
2664
                             IF_NONE { PUSH int 304 ; FAILWITH } { CAR } ;
2665
                             DIG 4 ;
2666
                             CAR ;
2667
                             CDR ;
2668
                             SELF_ADDRESS ;
2669
                             PAIR 3 ;
2670
                             TRANSFER_TOKENS ;
2671
                             CONS } } }
2672
                   { PUSH nat 0 ;
2673
                     PUSH nat 0 ;
2674
                     PUSH nat 0 ;
2675
                     DUP 5 ;
2676
                     CAR ;
2677
                     CAR ;
2678
                     GET 4 ;
2679
                     COMPARE ;
2680
                     NEQ ;
2681
                     IF
2682
                       { DUP 3 ;
2683
                         GET 4 ;
2684
                         DIG 4 ;
2685
                         DUP ;
2686
                         GET 3 ;
2687
                         CAR ;
2688
                         CDR ;
2689
                         SWAP ;
2690
                         DUP ;
2691
                         DUG 6 ;
2692
                         GET 7 ;
2693
                         DUP 6 ;
2694
                         GET 3 ;
2695
                         MUL ;
2696
                         EDIV ;
2697
                         IF_NONE { PUSH int 185 ; FAILWITH } { CAR } ;
2698
                         COMPARE ;
2699
                         LE ;
2700
                         IF
2701
                           { DROP 2 ;
2702
                             DUP ;
2703
                             GET 3 ;
2704
                             DIG 2 ;
2705
                             DUP ;
2706
                             GET 3 ;
2707
                             CAR ;
2708
                             CDR ;
2709
                             SWAP ;
2710
                             DUP ;
2711
                             DUG 4 ;
2712
                             GET 7 ;
2713
                             DUP 4 ;
2714
                             GET 3 ;
2715
                             MUL ;
2716
                             EDIV ;
2717
                             IF_NONE { PUSH int 187 ; FAILWITH } { CAR } }
2718
                           {} ;
2719
                         DUP 3 ;
2720
                         GET 3 ;
2721
                         DIG 4 ;
2722
                         DUP ;
2723
                         GET 7 ;
2724
                         SWAP ;
2725
                         DUP ;
2726
                         DUG 6 ;
2727
                         GET 3 ;
2728
                         CAR ;
2729
                         CDR ;
2730
                         DUP 6 ;
2731
                         GET 4 ;
2732
                         MUL ;
2733
                         EDIV ;
2734
                         IF_NONE { PUSH int 188 ; FAILWITH } { CAR } ;
2735
                         COMPARE ;
2736
                         LE ;
2737
                         IF
2738
                           { DROP 2 ;
2739
                             DIG 2 ;
2740
                             DROP ;
2741
                             DUP ;
2742
                             GET 4 ;
2743
                             DIG 2 ;
2744
                             DUP ;
2745
                             GET 7 ;
2746
                             SWAP ;
2747
                             DUP ;
2748
                             DUG 4 ;
2749
                             GET 3 ;
2750
                             CAR ;
2751
                             CDR ;
2752
                             DUP 4 ;
2753
                             GET 4 ;
2754
                             MUL ;
2755
                             EDIV ;
2756
                             IF_NONE { PUSH int 190 ; FAILWITH } { CAR } ;
2757
                             SWAP }
2758
                           { DIG 4 ; DROP } ;
2759
                         PUSH nat 0 ;
2760
                         DUP 3 ;
2761
                         COMPARE ;
2762
                         GT ;
2763
                         IF {} { PUSH string "FlatSwap_Invalid_LP_Ratio" ; FAILWITH } ;
2764
                         DUP ;
2765
                         PUSH nat 0 ;
2766
                         COMPARE ;
2767
                         LT ;
2768
                         IF {} { PUSH string "FlatSwap_Invalid_LP_Ratio" ; FAILWITH } ;
2769
                         DIG 3 ;
2770
                         DUP ;
2771
                         GET 7 ;
2772
                         SWAP ;
2773
                         DUP ;
2774
                         DUG 5 ;
2775
                         CAR ;
2776
                         CAR ;
2777
                         GET 4 ;
2778
                         DUP 3 ;
2779
                         MUL ;
2780
                         EDIV ;
2781
                         IF_NONE { PUSH int 194 ; FAILWITH } { CAR } ;
2782
                         DIG 4 ;
2783
                         DUP ;
2784
                         GET 3 ;
2785
                         CAR ;
2786
                         CDR ;
2787
                         SWAP ;
2788
                         DUP ;
2789
                         DUG 6 ;
2790
                         CAR ;
2791
                         CAR ;
2792
                         GET 4 ;
2793
                         DUP 5 ;
2794
                         MUL ;
2795
                         EDIV ;
2796
                         IF_NONE { PUSH int 194 ; FAILWITH } { CAR } ;
2797
                         COMPARE ;
2798
                         LT ;
2799
                         IF
2800
                           { DIG 3 ;
2801
                             DUP ;
2802
                             GET 3 ;
2803
                             CAR ;
2804
                             CDR ;
2805
                             SWAP ;
2806
                             DUP ;
2807
                             DUG 5 ;
2808
                             CAR ;
2809
                             CAR ;
2810
                             GET 4 ;
2811
                             DUP 4 ;
2812
                             MUL ;
2813
                             EDIV ;
2814
                             IF_NONE { PUSH int 195 ; FAILWITH } { CAR } }
2815
                           { DIG 3 ;
2816
                             DUP ;
2817
                             GET 7 ;
2818
                             SWAP ;
2819
                             DUP ;
2820
                             DUG 5 ;
2821
                             CAR ;
2822
                             CAR ;
2823
                             GET 4 ;
2824
                             DUP 3 ;
2825
                             MUL ;
2826
                             EDIV ;
2827
                             IF_NONE { PUSH int 197 ; FAILWITH } { CAR } } }
2828
                       { DROP 2 ;
2829
                         SWAP ;
2830
                         DUP ;
2831
                         DUG 2 ;
2832
                         GET 9 ;
2833
                         SWAP ;
2834
                         DUP ;
2835
                         DUG 2 ;
2836
                         GET 4 ;
2837
                         MUL ;
2838
                         DUP 3 ;
2839
                         GET 3 ;
2840
                         GET 3 ;
2841
                         DUP 3 ;
2842
                         GET 3 ;
2843
                         MUL ;
2844
                         COMPARE ;
2845
                         EQ ;
2846
                         IF {} { PUSH string "FlatSwap_Invalid_LP_Ratio" ; FAILWITH } ;
2847
                         PUSH nat 1000 ;
2848
                         DIG 3 ;
2849
                         DIG 2 ;
2850
                         DUP ;
2851
                         GET 4 ;
2852
                         SWAP ;
2853
                         DUP ;
2854
                         DUG 4 ;
2855
                         GET 3 ;
2856
                         MUL ;
2857
                         EXEC ;
2858
                         PUSH nat 2 ;
2859
                         MUL ;
2860
                         SUB ;
2861
                         ISNAT ;
2862
                         IF_NONE { PUSH int 202 ; FAILWITH } {} ;
2863
                         DIG 2 ;
2864
                         UNPAIR ;
2865
                         UNPAIR ;
2866
                         UNPAIR ;
2867
                         SWAP ;
2868
                         UNPAIR ;
2869
                         SWAP ;
2870
                         PUSH nat 1000 ;
2871
                         ADD ;
2872
                         SWAP ;
2873
                         PAIR ;
2874
                         SWAP ;
2875
                         PAIR ;
2876
                         PAIR ;
2877
                         PAIR ;
2878
                         DUG 2 ;
2879
                         SWAP ;
2880
                         DUP ;
2881
                         DUG 2 ;
2882
                         GET 3 ;
2883
                         SWAP ;
2884
                         DUP 3 ;
2885
                         GET 4 ;
2886
                         SWAP } ;
2887
                     DUP ;
2888
                     PUSH nat 0 ;
2889
                     COMPARE ;
2890
                     LT ;
2891
                     IF
2892
                       {}
2893
                       { PUSH string "WrongCondition: liquidity.value > 0" ; FAILWITH } ;
2894
                     DUP 4 ;
2895
                     GET 3 ;
2896
                     DUP 4 ;
2897
                     COMPARE ;
2898
                     LE ;
2899
                     IF
2900
                       {}
2901
                       { PUSH string "WrongCondition: token1Amount.value <= params.token1_max" ;
2902
                         FAILWITH } ;
2903
                     DUP 4 ;
2904
                     GET 4 ;
2905
                     DUP 3 ;
2906
                     COMPARE ;
2907
                     LE ;
2908
                     IF
2909
                       {}
2910
                       { PUSH string "WrongCondition: token2Amount.value <= params.token2_max" ;
2911
                         FAILWITH } ;
2912
                     PUSH nat 0 ;
2913
                     DUP 4 ;
2914
                     COMPARE ;
2915
                     GT ;
2916
                     IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
2917
                     DUP 5 ;
2918
                     CAR ;
2919
                     GET 7 ;
2920
                     IF
2921
                       { NIL operation ;
2922
                         DUP 6 ;
2923
                         CAR ;
2924
                         GET 5 ;
2925
                         CONTRACT %transfer (list (pair (address %from_)
2926
                                                       (list %txs (pair (address %to_)
2927
                                                                       (pair
2928
                                                                         (nat %token_id)
2929
                                                                         (nat %amount)))))) ;
2930
                         IF_NONE { PUSH int 22 ; FAILWITH } {} ;
2931
                         PUSH mutez 0 ;
2932
                         NIL (pair address (list (pair address (pair nat nat)))) ;
2933
                         NIL (pair address (pair nat nat)) ;
2934
                         DUP 8 ;
2935
                         DUP 11 ;
2936
                         GET 3 ;
2937
                         CAR ;
2938
                         CAR ;
2939
                         SELF_ADDRESS ;
2940
                         PAIR 3 ;
2941
                         CONS ;
2942
                         SENDER ;
2943
                         PAIR ;
2944
                         CONS ;
2945
                         TRANSFER_TOKENS ;
2946
                         CONS }
2947
                       { NIL operation ;
2948
                         DUP 6 ;
2949
                         CAR ;
2950
                         GET 5 ;
2951
                         CONTRACT %transfer (pair (address %from)
2952
                                                  (pair (address %to) (nat %value))) ;
2953
                         IF_NONE { PUSH int 38 ; FAILWITH } {} ;
2954
                         PUSH mutez 0 ;
2955
                         DUP 6 ;
2956
                         SELF_ADDRESS ;
2957
                         SENDER ;
2958
                         PAIR 3 ;
2959
                         TRANSFER_TOKENS ;
2960
                         CONS } ;
2961
                     PUSH nat 0 ;
2962
                     DUP 4 ;
2963
                     COMPARE ;
2964
                     GT ;
2965
                     IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
2966
                     DUP 6 ;
2967
                     GET 3 ;
2968
                     GET 6 ;
2969
                     IF
2970
                       { DUP 6 ;
2971
                         GET 3 ;
2972
                         GET 5 ;
2973
                         CONTRACT %transfer (list (pair (address %from_)
2974
                                                       (list %txs (pair (address %to_)
2975
                                                                       (pair
2976
                                                                         (nat %token_id)
2977
                                                                         (nat %amount)))))) ;
2978
                         IF_NONE { PUSH int 22 ; FAILWITH } {} ;
2979
                         PUSH mutez 0 ;
2980
                         NIL (pair address (list (pair address (pair nat nat)))) ;
2981
                         NIL (pair address (pair nat nat)) ;
2982
                         DUP 7 ;
2983
                         DUP 11 ;
2984
                         GET 5 ;
2985
                         CDR ;
2986
                         SELF_ADDRESS ;
2987
                         PAIR 3 ;
2988
                         CONS ;
2989
                         SENDER ;
2990
                         PAIR ;
2991
                         CONS ;
2992
                         TRANSFER_TOKENS ;
2993
                         CONS }
2994
                       { DUP 6 ;
2995
                         GET 3 ;
2996
                         GET 5 ;
2997
                         CONTRACT %transfer (pair (address %from)
2998
                                                  (pair (address %to) (nat %value))) ;
2999
                         IF_NONE { PUSH int 38 ; FAILWITH } {} ;
3000
                         PUSH mutez 0 ;
3001
                         DUP 5 ;
3002
                         SELF_ADDRESS ;
3003
                         SENDER ;
3004
                         PAIR 3 ;
3005
                         TRANSFER_TOKENS ;
3006
                         CONS } ;
3007
                     DIG 5 ;
3008
                     UNPAIR ;
3009
                     SWAP ;
3010
                     UNPAIR ;
3011
                     UNPAIR ;
3012
                     UNPAIR ;
3013
                     SWAP ;
3014
                     DIG 8 ;
3015
                     ADD ;
3016
                     SWAP ;
3017
                     PAIR ;
3018
                     PAIR ;
3019
                     PAIR ;
3020
                     SWAP ;
3021
                     PAIR ;
3022
                     DUP ;
3023
                     GET 7 ;
3024
                     DIG 4 ;
3025
                     ADD ;
3026
                     UPDATE 7 ;
3027
                     UNPAIR ;
3028
                     UNPAIR ;
3029
                     UNPAIR ;
3030
                     SWAP ;
3031
                     UNPAIR ;
3032
                     SWAP ;
3033
                     DUP 7 ;
3034
                     ADD ;
3035
                     SWAP ;
3036
                     PAIR ;
3037
                     SWAP ;
3038
                     PAIR ;
3039
                     PAIR ;
3040
                     PAIR ;
3041
                     DUG 3 ;
3042
                     PUSH nat 0 ;
3043
                     DUP 3 ;
3044
                     COMPARE ;
3045
                     GT ;
3046
                     IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
3047
                     DUP 4 ;
3048
                     CAR ;
3049
                     CAR ;
3050
                     GET 3 ;
3051
                     CONTRACT %mint (pair (address %address) (nat %value)) ;
3052
                     IF_NONE { PUSH int 132 ; FAILWITH } {} ;
3053
                     PUSH mutez 0 ;
3054
                     DIG 3 ;
3055
                     DIG 4 ;
3056
                     CAR ;
3057
                     PAIR ;
3058
                     TRANSFER_TOKENS ;
3059
                     CONS } }
3060
               { IF_LEFT
3061
                   { DIG 2 ;
3062
                     DROP ;
3063
                     SWAP ;
3064
                     DUP ;
3065
                     DUG 2 ;
3066
                     CAR ;
3067
                     GET 3 ;
3068
                     CDR ;
3069
                     IF {} { PUSH string "FlatSwap_Invalid_State" ; FAILWITH } ;
3070
                     SWAP ;
3071
                     DUP ;
3072
                     DUG 2 ;
3073
                     GET 10 ;
3074
                     IF_NONE { PUSH int 385 ; FAILWITH } {} ;
3075
                     SENDER ;
3076
                     COMPARE ;
3077
                     EQ ;
3078
                     IF {} { PUSH string "FlatSwap_Not_Voter" ; FAILWITH } ;
3079
                     PUSH nat 0 ;
3080
                     DUP 3 ;
3081
                     CAR ;
3082
                     GET 8 ;
3083
                     COMPARE ;
3084
                     NEQ ;
3085
                     IF
3086
                       { PUSH nat 0 ;
3087
                         DUP 3 ;
3088
                         CAR ;
3089
                         GET 8 ;
3090
                         COMPARE ;
3091
                         GT ;
3092
                         IF
3093
                           {}
3094
                           { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
3095
                         SWAP ;
3096
                         DUP ;
3097
                         DUG 2 ;
3098
                         CAR ;
3099
                         GET 7 ;
3100
                         IF
3101
                           { NIL operation ;
3102
                             DUP 3 ;
3103
                             CAR ;
3104
                             GET 5 ;
3105
                             CONTRACT %transfer (list (pair (address %from_)
3106
                                                           (list %txs (pair
3107
                                                                       (address %to_)
3108
                                                                       (pair
3109
                                                                         (nat %token_id)
3110
                                                                         (nat %amount)))))) ;
3111
                             IF_NONE { PUSH int 22 ; FAILWITH } {} ;
3112
                             PUSH mutez 0 ;
3113
                             NIL (pair address (list (pair address (pair nat nat)))) ;
3114
                             NIL (pair address (pair nat nat)) ;
3115
                             DIG 6 ;
3116
                             DUP ;
3117
                             CAR ;
3118
                             GET 8 ;
3119
                             SWAP ;
3120
                             DUP ;
3121
                             DUG 8 ;
3122
                             GET 3 ;
3123
                             CAR ;
3124
                             CAR ;
3125
                             DUP 8 ;
3126
                             CDR ;
3127
                             PAIR 3 ;
3128
                             CONS ;
3129
                             SELF_ADDRESS ;
3130
                             PAIR ;
3131
                             CONS ;
3132
                             TRANSFER_TOKENS ;
3133
                             CONS }
3134
                           { NIL operation ;
3135
                             DUP 3 ;
3136
                             CAR ;
3137
                             GET 5 ;
3138
                             CONTRACT %transfer (pair (address %from)
3139
                                                      (pair (address %to) (nat %value))) ;
3140
                             IF_NONE { PUSH int 38 ; FAILWITH } {} ;
3141
                             PUSH mutez 0 ;
3142
                             DUP 5 ;
3143
                             CAR ;
3144
                             GET 8 ;
3145
                             DUP 5 ;
3146
                             CDR ;
3147
                             SELF_ADDRESS ;
3148
                             PAIR 3 ;
3149
                             TRANSFER_TOKENS ;
3150
                             CONS } }
3151
                       { NIL operation } ;
3152
                     PUSH nat 0 ;
3153
                     DUP 4 ;
3154
                     GET 5 ;
3155
                     CAR ;
3156
                     COMPARE ;
3157
                     NEQ ;
3158
                     IF
3159
                       { PUSH nat 0 ;
3160
                         DUP 4 ;
3161
                         GET 5 ;
3162
                         CAR ;
3163
                         COMPARE ;
3164
                         GT ;
3165
                         IF
3166
                           {}
3167
                           { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
3168
                         DUP 3 ;
3169
                         GET 3 ;
3170
                         GET 6 ;
3171
                         IF
3172
                           { DUP 3 ;
3173
                             GET 3 ;
3174
                             GET 5 ;
3175
                             CONTRACT %transfer (list (pair (address %from_)
3176
                                                           (list %txs (pair
3177
                                                                       (address %to_)
3178
                                                                       (pair
3179
                                                                         (nat %token_id)
3180
                                                                         (nat %amount)))))) ;
3181
                             IF_NONE { PUSH int 22 ; FAILWITH } {} ;
3182
                             PUSH mutez 0 ;
3183
                             NIL (pair address (list (pair address (pair nat nat)))) ;
3184
                             NIL (pair address (pair nat nat)) ;
3185
                             DIG 6 ;
3186
                             DUP ;
3187
                             GET 5 ;
3188
                             CAR ;
3189
                             SWAP ;
3190
                             DUP ;
3191
                             DUG 8 ;
3192
                             GET 5 ;
3193
                             CDR ;
3194
                             DUP 8 ;
3195
                             CDR ;
3196
                             PAIR 3 ;
3197
                             CONS ;
3198
                             SELF_ADDRESS ;
3199
                             PAIR ;
3200
                             CONS ;
3201
                             TRANSFER_TOKENS ;
3202
                             CONS }
3203
                           { DUP 3 ;
3204
                             GET 3 ;
3205
                             GET 5 ;
3206
                             CONTRACT %transfer (pair (address %from)
3207
                                                      (pair (address %to) (nat %value))) ;
3208
                             IF_NONE { PUSH int 38 ; FAILWITH } {} ;
3209
                             PUSH mutez 0 ;
3210
                             DUP 5 ;
3211
                             GET 5 ;
3212
                             CAR ;
3213
                             DUP 5 ;
3214
                             CDR ;
3215
                             SELF_ADDRESS ;
3216
                             PAIR 3 ;
3217
                             TRANSFER_TOKENS ;
3218
                             CONS } }
3219
                       {} ;
3220
                     EMPTY_MAP (or address (or (pair address nat) unit)) nat ;
3221
                     DUP 4 ;
3222
                     CAR ;
3223
                     GET 7 ;
3224
                     IF
3225
                       { DUP 4 ;
3226
                         CAR ;
3227
                         GET 8 ;
3228
                         SOME ;
3229
                         DIG 4 ;
3230
                         DUP ;
3231
                         GET 3 ;
3232
                         CAR ;
3233
                         CAR ;
3234
                         SWAP ;
3235
                         DUP ;
3236
                         DUG 6 ;
3237
                         CAR ;
3238
                         GET 5 ;
3239
                         PAIR ;
3240
                         LEFT unit ;
3241
                         RIGHT address ;
3242
                         UPDATE }
3243
                       { DUP 4 ;
3244
                         CAR ;
3245
                         GET 8 ;
3246
                         SOME ;
3247
                         DUP 5 ;
3248
                         CAR ;
3249
                         GET 5 ;
3250
                         LEFT (or (pair address nat) unit) ;
3251
                         UPDATE } ;
3252
                     DUP 4 ;
3253
                     GET 3 ;
3254
                     GET 6 ;
3255
                     IF
3256
                       { DUP 4 ;
3257
                         GET 5 ;
3258
                         CAR ;
3259
                         SOME ;
3260
                         DIG 4 ;
3261
                         DUP ;
3262
                         GET 5 ;
3263
                         CDR ;
3264
                         SWAP ;
3265
                         DUP ;
3266
                         DUG 6 ;
3267
                         GET 3 ;
3268
                         GET 5 ;
3269
                         PAIR ;
3270
                         LEFT unit ;
3271
                         RIGHT address ;
3272
                         UPDATE }
3273
                       { DUP 4 ;
3274
                         GET 5 ;
3275
                         CAR ;
3276
                         SOME ;
3277
                         DUP 5 ;
3278
                         GET 3 ;
3279
                         GET 5 ;
3280
                         LEFT (or (pair address nat) unit) ;
3281
                         UPDATE } ;
3282
                     SWAP ;
3283
                     DUP 3 ;
3284
                     CDR ;
3285
                     CONTRACT %add_fees (pair (nat %epoch)
3286
                                              (map %fees
3287
                                                (or (address %fa12)
3288
                                                    (or (pair %fa2 address nat)
3289
                                                        (unit %tez)))
3290
                                                nat)) ;
3291
                     IF_NONE { PUSH int 422 ; FAILWITH } {} ;
3292
                     PUSH mutez 0 ;
3293
                     DIG 3 ;
3294
                     DIG 4 ;
3295
                     CAR ;
3296
                     PAIR ;
3297
                     TRANSFER_TOKENS ;
3298
                     CONS ;
3299
                     SWAP ;
3300
                     UNPAIR ;
3301
                     UNPAIR ;
3302
                     SWAP ;
3303
                     UNPAIR ;
3304
                     SWAP ;
3305
                     UNPAIR ;
3306
                     SWAP ;
3307
                     CAR ;
3308
                     PUSH nat 0 ;
3309
                     SWAP ;
3310
                     PAIR ;
3311
                     SWAP ;
3312
                     PAIR ;
3313
                     SWAP ;
3314
                     PAIR ;
3315
                     SWAP ;
3316
                     PAIR ;
3317
                     SWAP ;
3318
                     UNPAIR ;
3319
                     SWAP ;
3320
                     UNPAIR ;
3321
                     CDR ;
3322
                     PUSH nat 0 ;
3323
                     PAIR ;
3324
                     PAIR ;
3325
                     SWAP ;
3326
                     PAIR ;
3327
                     SWAP ;
3328
                     PAIR ;
3329
                     SWAP }
3330
                   { DIG 2 ;
3331
                     DROP ;
3332
                     PUSH nat 0 ;
3333
                     DUP 3 ;
3334
                     CAR ;
3335
                     CAR ;
3336
                     GET 4 ;
3337
                     COMPARE ;
3338
                     NEQ ;
3339
                     IF {} { PUSH string "FlatSwap_Not_Initialized" ; FAILWITH } ;
3340
                     SWAP ;
3341
                     DUP ;
3342
                     DUG 2 ;
3343
                     CAR ;
3344
                     CAR ;
3345
                     GET 4 ;
3346
                     SWAP ;
3347
                     DUP ;
3348
                     DUG 2 ;
3349
                     CAR ;
3350
                     CAR ;
3351
                     COMPARE ;
3352
                     LE ;
3353
                     IF {} { PUSH string "FlatSwap_Insufficient_Balance" ; FAILWITH } ;
3354
                     SWAP ;
3355
                     DUP ;
3356
                     CAR ;
3357
                     CAR ;
3358
                     GET 4 ;
3359
                     SWAP ;
3360
                     DUP ;
3361
                     DUG 3 ;
3362
                     GET 3 ;
3363
                     CAR ;
3364
                     CDR ;
3365
                     DUP 3 ;
3366
                     CAR ;
3367
                     CAR ;
3368
                     MUL ;
3369
                     EDIV ;
3370
                     IF_NONE { PUSH int 241 ; FAILWITH } { CAR } ;
3371
                     DIG 2 ;
3372
                     DUP ;
3373
                     CAR ;
3374
                     CAR ;
3375
                     GET 4 ;
3376
                     SWAP ;
3377
                     DUP ;
3378
                     DUG 4 ;
3379
                     GET 7 ;
3380
                     DUP 4 ;
3381
                     CAR ;
3382
                     CAR ;
3383
                     MUL ;
3384
                     EDIV ;
3385
                     IF_NONE { PUSH int 242 ; FAILWITH } { CAR } ;
3386
                     DUP 3 ;
3387
                     GET 3 ;
3388
                     DUP 3 ;
3389
                     COMPARE ;
3390
                     GE ;
3391
                     IF
3392
                       {}
3393
                       { PUSH string "WrongCondition: token1Amount.value >= params.token1_min" ;
3394
                         FAILWITH } ;
3395
                     DUP 3 ;
3396
                     GET 4 ;
3397
                     SWAP ;
3398
                     DUP ;
3399
                     DUG 2 ;
3400
                     COMPARE ;
3401
                     GE ;
3402
                     IF
3403
                       {}
3404
                       { PUSH string "WrongCondition: token2Amount.value >= params.token2_min" ;
3405
                         FAILWITH } ;
3406
                     DUP 4 ;
3407
                     UNPAIR ;
3408
                     SWAP ;
3409
                     UNPAIR ;
3410
                     UNPAIR ;
3411
                     CAR ;
3412
                     DUP 6 ;
3413
                     DIG 8 ;
3414
                     GET 3 ;
3415
                     CAR ;
3416
                     CDR ;
3417
                     SUB ;
3418
                     ISNAT ;
3419
                     IF_NONE { PUSH int 247 ; FAILWITH } {} ;
3420
                     SWAP ;
3421
                     PAIR ;
3422
                     PAIR ;
3423
                     PAIR ;
3424
                     SWAP ;
3425
                     PAIR ;
3426
                     DUP ;
3427
                     DUG 4 ;
3428
                     SWAP ;
3429
                     DUP ;
3430
                     DUG 2 ;
3431
                     DIG 5 ;
3432
                     GET 7 ;
3433
                     SUB ;
3434
                     ISNAT ;
3435
                     IF_NONE { PUSH int 248 ; FAILWITH } {} ;
3436
                     UPDATE 7 ;
3437
                     DUP ;
3438
                     DUG 4 ;
3439
                     UNPAIR ;
3440
                     UNPAIR ;
3441
                     UNPAIR ;
3442
                     SWAP ;
3443
                     CAR ;
3444
                     DUP 7 ;
3445
                     CAR ;
3446
                     CAR ;
3447
                     DIG 8 ;
3448
                     CAR ;
3449
                     CAR ;
3450
                     GET 4 ;
3451
                     SUB ;
3452
                     ISNAT ;
3453
                     IF_NONE { PUSH int 249 ; FAILWITH } {} ;
3454
                     SWAP ;
3455
                     PAIR ;
3456
                     SWAP ;
3457
                     PAIR ;
3458
                     PAIR ;
3459
                     PAIR ;
3460
                     DUG 3 ;
3461
                     NIL operation ;
3462
                     DUP 5 ;
3463
                     CAR ;
3464
                     CAR ;
3465
                     GET 3 ;
3466
                     CONTRACT %burn (pair (address %address) (nat %value)) ;
3467
                     IF_NONE { PUSH int 126 ; FAILWITH } {} ;
3468
                     PUSH mutez 0 ;
3469
                     DUP 6 ;
3470
                     CAR ;
3471
                     CAR ;
3472
                     SENDER ;
3473
                     PAIR ;
3474
                     TRANSFER_TOKENS ;
3475
                     CONS ;
3476
                     PUSH nat 0 ;
3477
                     DUP 4 ;
3478
                     COMPARE ;
3479
                     GT ;
3480
                     IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
3481
                     DUP 5 ;
3482
                     CAR ;
3483
                     GET 7 ;
3484
                     IF
3485
                       { DUP 5 ;
3486
                         CAR ;
3487
                         GET 5 ;
3488
                         CONTRACT %transfer (list (pair (address %from_)
3489
                                                       (list %txs (pair (address %to_)
3490
                                                                       (pair
3491
                                                                         (nat %token_id)
3492
                                                                         (nat %amount)))))) ;
3493
                         IF_NONE { PUSH int 22 ; FAILWITH } {} ;
3494
                         PUSH mutez 0 ;
3495
                         NIL (pair address (list (pair address (pair nat nat)))) ;
3496
                         NIL (pair address (pair nat nat)) ;
3497
                         DIG 6 ;
3498
                         DUP 9 ;
3499
                         GET 3 ;
3500
                         CAR ;
3501
                         CAR ;
3502
                         DUP 9 ;
3503
                         CAR ;
3504
                         CDR ;
3505
                         PAIR 3 ;
3506
                         CONS ;
3507
                         SELF_ADDRESS ;
3508
                         PAIR ;
3509
                         CONS ;
3510
                         TRANSFER_TOKENS ;
3511
                         CONS }
3512
                       { DUP 5 ;
3513
                         CAR ;
3514
                         GET 5 ;
3515
                         CONTRACT %transfer (pair (address %from)
3516
                                                  (pair (address %to) (nat %value))) ;
3517
                         IF_NONE { PUSH int 38 ; FAILWITH } {} ;
3518
                         PUSH mutez 0 ;
3519
                         DIG 4 ;
3520
                         DUP 6 ;
3521
                         CAR ;
3522
                         CDR ;
3523
                         SELF_ADDRESS ;
3524
                         PAIR 3 ;
3525
                         TRANSFER_TOKENS ;
3526
                         CONS } ;
3527
                     PUSH nat 0 ;
3528
                     DUP 3 ;
3529
                     COMPARE ;
3530
                     GT ;
3531
                     IF {} { PUSH string "FlatSwap_Zero_Amount_Transfer" ; FAILWITH } ;
3532
                     DUP 4 ;
3533
                     GET 3 ;
3534
                     GET 6 ;
3535
                     IF
3536
                       { DUP 4 ;
3537
                         GET 3 ;
3538
                         GET 5 ;
3539
                         CONTRACT %transfer (list (pair (address %from_)
3540
                                                       (list %txs (pair (address %to_)
3541
                                                                       (pair
3542
                                                                         (nat %token_id)
3543
                                                                         (nat %amount)))))) ;
3544
                         IF_NONE { PUSH int 22 ; FAILWITH } {} ;
3545
                         PUSH mutez 0 ;
3546
                         NIL (pair address (list (pair address (pair nat nat)))) ;
3547
                         NIL (pair address (pair nat nat)) ;
3548
                         DIG 5 ;
3549
                         DUP 8 ;
3550
                         GET 5 ;
3551
                         CDR ;
3552
                         DIG 7 ;
3553
                         CAR ;
3554
                         CDR ;
3555
                         PAIR 3 ;
3556
                         CONS ;
3557
                         SELF_ADDRESS ;
3558
                         PAIR ;
3559
                         CONS ;
3560
                         TRANSFER_TOKENS ;
3561
                         CONS }
3562
                       { DUP 4 ;
3563
                         GET 3 ;
3564
                         GET 5 ;
3565
                         CONTRACT %transfer (pair (address %from)
3566
                                                  (pair (address %to) (nat %value))) ;
3567
                         IF_NONE { PUSH int 38 ; FAILWITH } {} ;
3568
                         PUSH mutez 0 ;
3569
                         DIG 3 ;
3570
                         DIG 4 ;
3571
                         CAR ;
3572
                         CDR ;
3573
                         SELF_ADDRESS ;
3574
                         PAIR 3 ;
3575
                         TRANSFER_TOKENS ;
3576
                         CONS } } } } ;
3577
         NIL operation ;
3578
         SWAP ;
3579
         ITER { CONS } ;
3580
         PAIR } ;
3581
  view "getReserveBalance" unit (pair (nat %token1Pool) (nat %token2Pool))
3582
        { CDR ; DUP ; GET 7 ; SWAP ; GET 3 ; CAR ; CDR ; PAIR } }