BCD

Tezos Contract Explorer
Search Networks Deploy
  • Home
  • /
  • Shadownet
  • /
  • KT1JqfY...7yYv
FA2Ledger
operations (1)Storage Code Interact Tokens Fork Details
Latest
​x
760
1715
 
1
parameter (or
2
            (or
3
              (or
4
                (or (pair %add_manager (address %manager) (nat %token_id))
5
                    (map %airdrop nat (list (pair (nat %amount) (address %recipient)))))
6
                (or
7
                  (pair %balance_of
8
                    (list %requests (pair (address %owner) (nat %token_id)))
9
                    (contract %callback (list (pair
10
                                              (pair %request (address %owner)
11
                                                             (nat %token_id))
12
                                              (nat %balance)))))
13
                  (list %burn (pair (address %from_) (pair (nat %token_id) (nat %amount))))))
14
              (or
15
                (or
16
                  (pair %claim
17
                    (pair (nat %amount)
18
                          (list %burn_tokens (pair (address %address) (nat %token_id))))
19
                    (pair (option %condition_extra bytes)
20
                          (pair (option %proxy_for address) (nat %token_id))))
21
                  (pair %create_claim (nat %token_id)
22
                                      (pair (timestamp %start_time)
23
                                            (pair (timestamp %end_time)
24
                                                  (pair (mutez %price)
25
                                                        (pair
26
                                                          (list %burn_recipe (map address
27
                                                                                 (map
28
                                                                                   (option nat)
29
                                                                                   nat)))
30
                                                          (pair (nat %max_per_wallet)
31
                                                                (pair
32
                                                                  (nat %airdrop_capacity)
33
                                                                  (pair
34
                                                                    (pair %split
35
                                                                      (map %shares
36
                                                                        address
37
                                                                        nat)
38
                                                                      (nat %total))
39
                                                                    (option %condition (pair
40
                                                                                        (address %address)
41
                                                                                        (bytes %id))))))))))))
42
                (or
43
                  (pair %create_token (map %metadata string bytes)
44
                                      (pair (list %collaborators address)
45
                                            (pair (nat %editions)
46
                                                  (pair (bool %lock_metadata)
47
                                                        (bool %lock_mint)))))
48
                  (pair %lock (bool %metadata) (pair (bool %mint) (nat %token_id))))))
49
            (or
50
              (or
51
                (or
52
                  (pair %mint (list %mint_items (pair (nat %amount) (address %to_)))
53
                              (nat %token_id))
54
                  (nat %reject_authorship))
55
                (or (nat %remove_claim)
56
                    (pair %remove_manager (address %manager) (nat %token_id))))
57
              (or
58
                (or (nat %sign_authorship)
59
                    (list %transfer (pair (address %from_)
60
                                         (list %txs (pair (address %to_)
61
                                                         (pair (nat %token_id)
62
                                                               (nat %amount)))))))
63
                (or
64
                  (list %update_operators (or
65
                                           (pair %add_operator (address %owner)
66
                                                               (pair (address %operator)
67
                                                                     (nat %token_id)))
68
                                           (pair %remove_operator (address %owner)
69
                                                                  (pair
70
                                                                    (address %operator)
71
                                                                    (nat %token_id)))))
72
                  (list %update_token_metadata (pair (nat %token_id)
73
                                                    (map %token_info string bytes)))))));
74
storage (pair
75
          (pair
76
            (pair (big_map %authors nat (map address bool))
77
                  (pair (big_map %claimed (pair address nat) nat)
78
                        (big_map %claims nat
79
                                         (pair
80
                                           (pair
81
                                             (pair (nat %airdrop_capacity)
82
                                                   (list %burn_recipe (map address
83
                                                                          (map
84
                                                                            (option nat)
85
                                                                            nat))))
86
                                             (pair
87
                                               (option %condition (pair
88
                                                                   (address %address)
89
                                                                   (bytes %id)))
90
                                               (address %creator)))
91
                                           (pair
92
                                             (pair (timestamp %end_time)
93
                                                   (nat %max_per_wallet))
94
                                             (pair (mutez %price)
95
                                                   (pair
96
                                                     (pair %split
97
                                                       (map %shares address nat)
98
                                                       (nat %total))
99
                                                     (timestamp %start_time))))))))
100
            (pair (nat %last_token_id)
101
                  (pair (big_map %ledger (pair address nat) nat)
102
                        (big_map %locked nat (pair (bool %metadata) (bool %mint))))))
103
          (pair
104
            (pair (big_map %managers nat (set address))
105
                  (pair (big_map %metadata string bytes)
106
                        (big_map %operators
107
                          (pair (address %owner)
108
                                (pair (address %operator) (nat %token_id)))
109
                          unit)))
110
            (pair (big_map %pending_collabs nat (set address))
111
                  (pair (big_map %supply nat nat)
112
                        (big_map %token_metadata nat
113
                                                 (pair (nat %token_id)
114
                                                       (map %token_info string bytes)))))));
115
code { UNPAIR ;
116
       IF_LEFT
117
         { IF_LEFT
118
             { IF_LEFT
119
                 { IF_LEFT
120
                     { SWAP ;
121
                       DUP ;
122
                       DUG 2 ;
123
                       CAR ;
124
                       CAR ;
125
                       CAR ;
126
                       SWAP ;
127
                       DUP ;
128
                       DUG 2 ;
129
                       CDR ;
130
                       GET ;
131
                       IF_NONE { PUSH int 135 ; FAILWITH } {} ;
132
                       SENDER ;
133
                       GET ;
134
                       IF_NONE { PUSH int 135 ; FAILWITH } {} ;
135
                       IF {} { PUSH string "NOT_VERIFIED_AUTHOR" ; FAILWITH } ;
136
                       SWAP ;
137
                       UNPAIR ;
138
                       SWAP ;
139
                       UNPAIR ;
140
                       UNPAIR ;
141
                       DUP ;
142
                       DUP 6 ;
143
                       CDR ;
144
                       DUP ;
145
                       DUG 2 ;
146
                       GET ;
147
                       IF_NONE { PUSH int 136 ; FAILWITH } {} ;
148
                       PUSH bool True ;
149
                       DIG 7 ;
150
                       CAR ;
151
                       UPDATE ;
152
                       SOME ;
153
                       SWAP ;
154
                       UPDATE ;
155
                       PAIR ;
156
                       PAIR ;
157
                       SWAP ;
158
                       PAIR }
159
                     { DUP ;
160
                       ITER { DUP 3 ;
161
                              CAR ;
162
                              CAR ;
163
                              GET 4 ;
164
                              SWAP ;
165
                              DUP ;
166
                              DUG 2 ;
167
                              CAR ;
168
                              MEM ;
169
                              IF {} { PUSH string "OE_NO_SALE" ; FAILWITH } ;
170
                              DUP 3 ;
171
                              GET 3 ;
172
                              CAR ;
173
                              SWAP ;
174
                              DUP ;
175
                              DUG 2 ;
176
                              CAR ;
177
                              MEM ;
178
                              IF
179
                                { DUP 3 ;
180
                                  GET 3 ;
181
                                  CAR ;
182
                                  SWAP ;
183
                                  DUP ;
184
                                  DUG 2 ;
185
                                  CAR ;
186
                                  GET ;
187
                                  IF_NONE { PUSH int 504 ; FAILWITH } {} ;
188
                                  SENDER ;
189
                                  MEM }
190
                                { PUSH bool False } ;
191
                              IF
192
                                { PUSH bool True }
193
                                { DUP 3 ;
194
                                  CAR ;
195
                                  CAR ;
196
                                  CAR ;
197
                                  SWAP ;
198
                                  DUP ;
199
                                  DUG 2 ;
200
                                  CAR ;
201
                                  GET ;
202
                                  IF_NONE { PUSH int 504 ; FAILWITH } {} ;
203
                                  SENDER ;
204
                                  GET ;
205
                                  IF_NONE { PUSH int 504 ; FAILWITH } {} } ;
206
                              IF {} { PUSH string "NOT_AUTHOR_MANAGER" ; FAILWITH } ;
207
                              DUP ;
208
                              CDR ;
209
                              ITER { DUP 4 ;
210
                                     CAR ;
211
                                     CAR ;
212
                                     GET 4 ;
213
                                     DUP 3 ;
214
                                     CAR ;
215
                                     GET ;
216
                                     IF_NONE { PUSH int 415 ; FAILWITH } {} ;
217
                                     CAR ;
218
                                     CAR ;
219
                                     CAR ;
220
                                     DUP 3 ;
221
                                     CAR ;
222
                                     DUP 3 ;
223
                                     CDR ;
224
                                     PAIR ;
225
                                     DUP 6 ;
226
                                     UNPAIR ;
227
                                     UNPAIR ;
228
                                     SWAP ;
229
                                     UNPAIR ;
230
                                     SWAP ;
231
                                     UNPAIR ;
232
                                     DUP 8 ;
233
                                     CAR ;
234
                                     DIG 11 ;
235
                                     CAR ;
236
                                     GET 5 ;
237
                                     DUP 8 ;
238
                                     GET ;
239
                                     IF_NONE { PUSH nat 0 } {} ;
240
                                     ADD ;
241
                                     SOME ;
242
                                     DIG 6 ;
243
                                     UPDATE ;
244
                                     PAIR ;
245
                                     SWAP ;
246
                                     PAIR ;
247
                                     SWAP ;
248
                                     PAIR ;
249
                                     PAIR ;
250
                                     DUP ;
251
                                     GET 7 ;
252
                                     DUP ;
253
                                     DUP 6 ;
254
                                     CAR ;
255
                                     DUP ;
256
                                     DUG 2 ;
257
                                     GET ;
258
                                     IF_NONE { PUSH int 424 ; FAILWITH } {} ;
259
                                     DUP 6 ;
260
                                     CAR ;
261
                                     ADD ;
262
                                     SOME ;
263
                                     SWAP ;
264
                                     UPDATE ;
265
                                     UPDATE 7 ;
266
                                     UNPAIR ;
267
                                     UNPAIR ;
268
                                     UNPAIR ;
269
                                     SWAP ;
270
                                     UNPAIR ;
271
                                     SWAP ;
272
                                     DUP ;
273
                                     DUP 9 ;
274
                                     CAR ;
275
                                     DUP ;
276
                                     DUG 2 ;
277
                                     GET ;
278
                                     IF_NONE { PUSH int 425 ; FAILWITH } {} ;
279
                                     UNPAIR ;
280
                                     UNPAIR ;
281
                                     CDR ;
282
                                     DIG 10 ;
283
                                     CAR ;
284
                                     DIG 10 ;
285
                                     SUB ;
286
                                     ISNAT ;
287
                                     IF_NONE
288
                                       { PUSH string "OE_AIRDROP_CAP_REACHED" ; FAILWITH }
289
                                       {} ;
290
                                     PAIR ;
291
                                     PAIR ;
292
                                     PAIR ;
293
                                     SOME ;
294
                                     SWAP ;
295
                                     UPDATE ;
296
                                     SWAP ;
297
                                     PAIR ;
298
                                     SWAP ;
299
                                     PAIR ;
300
                                     PAIR ;
301
                                     PAIR ;
302
                                     DUG 2 } ;
303
                              DROP } ;
304
                       DROP } ;
305
                   NIL operation }
306
                 { IF_LEFT
307
                     { NIL operation ;
308
                       DUP ;
309
                       DUP 3 ;
310
                       CDR ;
311
                       PUSH mutez 0 ;
312
                       DUP 5 ;
313
                       CAR ;
314
                       MAP { DUP 7 ;
315
                             GET 8 ;
316
                             SWAP ;
317
                             DUP ;
318
                             DUG 2 ;
319
                             CDR ;
320
                             MEM ;
321
                             IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
322
                             DUP 7 ;
323
                             CAR ;
324
                             GET 5 ;
325
                             SWAP ;
326
                             DUP ;
327
                             CDR ;
328
                             SWAP ;
329
                             DUP ;
330
                             DUG 3 ;
331
                             CAR ;
332
                             PAIR ;
333
                             GET ;
334
                             IF_NONE { PUSH nat 0 } {} ;
335
                             SWAP ;
336
                             PAIR } ;
337
                       DIG 4 ;
338
                       DROP ;
339
                       DIG 4 ;
340
                       DROP ;
341
                       TRANSFER_TOKENS ;
342
                       CONS }
343
                     { DUP ;
344
                       ITER { DUP 3 ;
345
                              GET 8 ;
346
                              SWAP ;
347
                              DUP ;
348
                              DUG 2 ;
349
                              GET 3 ;
350
                              MEM ;
351
                              IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
352
                              DUP ;
353
                              CAR ;
354
                              SENDER ;
355
                              COMPARE ;
356
                              EQ ;
357
                              IF
358
                                { PUSH bool True }
359
                                { DUP 3 ;
360
                                  GET 3 ;
361
                                  GET 4 ;
362
                                  SWAP ;
363
                                  DUP ;
364
                                  DUG 2 ;
365
                                  GET 3 ;
366
                                  SENDER ;
367
                                  DUP 4 ;
368
                                  CAR ;
369
                                  PAIR 3 ;
370
                                  MEM } ;
371
                              IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
372
                              DUP 3 ;
373
                              UNPAIR ;
374
                              UNPAIR ;
375
                              SWAP ;
376
                              UNPAIR ;
377
                              SWAP ;
378
                              UNPAIR ;
379
                              DUP 6 ;
380
                              GET 4 ;
381
                              DIG 8 ;
382
                              CAR ;
383
                              GET 5 ;
384
                              DIG 7 ;
385
                              DUP ;
386
                              GET 3 ;
387
                              SWAP ;
388
                              DUP ;
389
                              DUG 9 ;
390
                              CAR ;
391
                              PAIR ;
392
                              GET ;
393
                              IF_NONE { PUSH nat 0 } {} ;
394
                              SUB ;
395
                              ISNAT ;
396
                              IF_NONE
397
                                { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH }
398
                                {} ;
399
                              SOME ;
400
                              DIG 6 ;
401
                              DUP ;
402
                              GET 3 ;
403
                              SWAP ;
404
                              DUP ;
405
                              DUG 8 ;
406
                              CAR ;
407
                              PAIR ;
408
                              UPDATE ;
409
                              PAIR ;
410
                              SWAP ;
411
                              PAIR ;
412
                              SWAP ;
413
                              PAIR ;
414
                              PAIR ;
415
                              DUG 2 ;
416
                              DUP ;
417
                              GET 4 ;
418
                              DUP 4 ;
419
                              GET 7 ;
420
                              DUP 3 ;
421
                              GET 3 ;
422
                              GET ;
423
                              IF_NONE { PUSH nat 0 } {} ;
424
                              SUB ;
425
                              ISNAT ;
426
                              IF_NONE
427
                                { DIG 2 ;
428
                                  DUP ;
429
                                  GET 7 ;
430
                                  PUSH (option nat) (Some 0) ;
431
                                  DIG 3 ;
432
                                  GET 3 ;
433
                                  UPDATE ;
434
                                  UPDATE 7 ;
435
                                  SWAP }
436
                                { DIG 3 ; DUP ; GET 7 ; DIG 2 ; SOME ; DIG 3 ; GET 3 ; UPDATE ; UPDATE 7 ; SWAP } } ;
437
                       DROP ;
438
                       NIL operation } } }
439
             { IF_LEFT
440
                 { IF_LEFT
441
                     { SWAP ;
442
                       DUP ;
443
                       DUG 2 ;
444
                       CAR ;
445
                       CAR ;
446
                       GET 4 ;
447
                       SWAP ;
448
                       DUP ;
449
                       DUG 2 ;
450
                       GET 6 ;
451
                       MEM ;
452
                       IF {} { PUSH string "OE_NO_SALE_ACTIVE" ; FAILWITH } ;
453
                       SWAP ;
454
                       DUP ;
455
                       DUG 2 ;
456
                       CAR ;
457
                       CAR ;
458
                       GET 4 ;
459
                       SWAP ;
460
                       DUP ;
461
                       DUG 2 ;
462
                       GET 6 ;
463
                       GET ;
464
                       IF_NONE { PUSH int 245 ; FAILWITH } {} ;
465
                       DUP ;
466
                       GET 8 ;
467
                       NOW ;
468
                       COMPARE ;
469
                       GE ;
470
                       IF
471
                         { DUP ; GET 3 ; CAR ; NOW ; COMPARE ; LE }
472
                         { PUSH bool False } ;
473
                       IF {} { PUSH string "OE_NOT_IN_SALE_TIME" ; FAILWITH } ;
474
                       SENDER ;
475
                       DUP 3 ;
476
                       GET 5 ;
477
                       IF_NONE {} { SWAP ; DROP } ;
478
                       DUP 3 ;
479
                       GET 6 ;
480
                       SWAP ;
481
                       DUP ;
482
                       DUG 2 ;
483
                       PAIR ;
484
                       PUSH nat 0 ;
485
                       DUP 5 ;
486
                       CAR ;
487
                       CAR ;
488
                       COMPARE ;
489
                       GT ;
490
                       IF {} { PUSH string "OE_WRONG_AMOUNT" ; FAILWITH } ;
491
                       PUSH nat 0 ;
492
                       DUP 4 ;
493
                       GET 3 ;
494
                       CDR ;
495
                       COMPARE ;
496
                       GT ;
497
                       IF
498
                         { DUP 5 ;
499
                           CAR ;
500
                           CAR ;
501
                           GET 3 ;
502
                           SWAP ;
503
                           DUP ;
504
                           DUG 2 ;
505
                           GET ;
506
                           IF_NONE { PUSH nat 0 } {} ;
507
                           DUP 4 ;
508
                           GET 3 ;
509
                           CDR ;
510
                           SUB ;
511
                           ISNAT ;
512
                           IF_NONE { PUSH int 270 ; FAILWITH } {} ;
513
                           DUP 5 ;
514
                           CAR ;
515
                           CAR ;
516
                           COMPARE ;
517
                           LE ;
518
                           IF {} { PUSH string "OE_MAX_REACHED" ; FAILWITH } }
519
                         {} ;
520
                       DUP 5 ;
521
                       UNPAIR ;
522
                       UNPAIR ;
523
                       UNPAIR ;
524
                       SWAP ;
525
                       UNPAIR ;
526
                       DUP 9 ;
527
                       CAR ;
528
                       CAR ;
529
                       DIG 10 ;
530
                       CAR ;
531
                       CAR ;
532
                       GET 3 ;
533
                       DUP 8 ;
534
                       GET ;
535
                       IF_NONE { PUSH nat 0 } {} ;
536
                       ADD ;
537
                       SOME ;
538
                       DUP 7 ;
539
                       UPDATE ;
540
                       PAIR ;
541
                       SWAP ;
542
                       PAIR ;
543
                       PAIR ;
544
                       PAIR ;
545
                       DUG 4 ;
546
                       PUSH nat 0 ;
547
                       DUP 4 ;
548
                       CAR ;
549
                       CAR ;
550
                       CDR ;
551
                       SIZE ;
552
                       COMPARE ;
553
                       GT ;
554
                       IF
555
                         { DUP 4 ;
556
                           CAR ;
557
                           CDR ;
558
                           NIL operation ;
559
                           DUP 6 ;
560
                           CAR ;
561
                           CAR ;
562
                           PUSH nat 0 ;
563
                           DUP ;
564
                           DUP 3 ;
565
                           COMPARE ;
566
                           GT ;
567
                           LOOP { DUP 7 ;
568
                                  CAR ;
569
                                  CAR ;
570
                                  CDR ;
571
                                  ITER { DIG 4 ;
572
                                         IF_CONS
573
                                           { SWAP ;
574
                                             DUP ;
575
                                             DUG 2 ;
576
                                             DUG 6 ;
577
                                             DUP 3 ;
578
                                             SWAP ;
579
                                             DUP ;
580
                                             DUG 2 ;
581
                                             CAR ;
582
                                             MEM ;
583
                                             IF
584
                                               {}
585
                                               { PUSH string "OE_REDEEM_MISTMACH_FA2" ;
586
                                                 FAILWITH } ;
587
                                             DUP 3 ;
588
                                             SWAP ;
589
                                             DUP ;
590
                                             DUG 2 ;
591
                                             CAR ;
592
                                             GET ;
593
                                             IF_NONE { PUSH int 288 ; FAILWITH } {} ;
594
                                             DUP ;
595
                                             NONE nat ;
596
                                             SWAP ;
597
                                             NONE nat ;
598
                                             MEM ;
599
                                             IF
600
                                               { DIG 3 ; DROP ; DIG 3 ; DROP }
601
                                               { DROP ;
602
                                                 DIG 2 ;
603
                                                 DROP ;
604
                                                 DIG 2 ;
605
                                                 DROP ;
606
                                                 SWAP ;
607
                                                 DUP ;
608
                                                 DUG 2 ;
609
                                                 CDR ;
610
                                                 SOME ;
611
                                                 SWAP ;
612
                                                 DUP ;
613
                                                 DUG 2 ;
614
                                                 SWAP ;
615
                                                 DUP ;
616
                                                 DUG 2 ;
617
                                                 MEM ;
618
                                                 IF
619
                                                   {}
620
                                                   { PUSH string "OE_REDEEM_MISTMATCH_ID" ;
621
                                                     FAILWITH } } ;
622
                                             DIG 5 ;
623
                                             DUP 4 ;
624
                                             CAR ;
625
                                             CONTRACT %transfer (list (pair
626
                                                                       (address %from_)
627
                                                                       (list %txs (pair
628
                                                                                   (address %to_)
629
                                                                                   (pair
630
                                                                                     (nat %token_id)
631
                                                                                     (nat %amount)))))) ;
632
                                             IF_NONE { PUSH int 482 ; FAILWITH } {} ;
633
                                             PUSH mutez 0 ;
634
                                             NIL (pair address
635
                                                       (list (pair address (pair nat nat)))) ;
636
                                             NIL (pair address (pair nat nat)) ;
637
                                             DIG 6 ;
638
                                             DIG 6 ;
639
                                             GET ;
640
                                             IF_NONE { PUSH int 303 ; FAILWITH } {} ;
641
                                             DIG 6 ;
642
                                             CDR ;
643
                                             PUSH address "tz1burnburnburnburnburnburnburjAYjjX" ;
644
                                             PAIR 3 ;
645
                                             CONS ;
646
                                             SENDER ;
647
                                             PAIR ;
648
                                             CONS ;
649
                                             TRANSFER_TOKENS ;
650
                                             CONS ;
651
                                             DUG 2 }
652
                                           { PUSH string "OE_MISSING_BURN" ; FAILWITH } } ;
653
                                  PUSH nat 1 ;
654
                                  ADD ;
655
                                  DUP ;
656
                                  DUP 3 ;
657
                                  COMPARE ;
658
                                  GT } ;
659
                           DROP 2 ;
660
                           SWAP ;
661
                           DROP }
662
                         { NIL operation } ;
663
                       PUSH mutez 0 ;
664
                       DUP 5 ;
665
                       GET 5 ;
666
                       COMPARE ;
667
                       GT ;
668
                       IF
669
                         { DUP 4 ;
670
                           GET 5 ;
671
                           DUP 6 ;
672
                           CAR ;
673
                           CAR ;
674
                           MUL ;
675
                           AMOUNT ;
676
                           COMPARE ;
677
                           EQ ;
678
                           IF {} { PUSH string "OE_WRONG_AMOUNT" ; FAILWITH } ;
679
                           DUP 4 ;
680
                           GET 7 ;
681
                           CAR ;
682
                           ITER { DUP 5 ;
683
                                  GET 7 ;
684
                                  CDR ;
685
                                  SWAP ;
686
                                  DUP ;
687
                                  DUG 2 ;
688
                                  CDR ;
689
                                  AMOUNT ;
690
                                  MUL ;
691
                                  EDIV ;
692
                                  IF_NONE { PUSH int 315 ; FAILWITH } {} ;
693
                                  CAR ;
694
                                  DUP ;
695
                                  PUSH mutez 0 ;
696
                                  COMPARE ;
697
                                  LT ;
698
                                  IF
699
                                    { DUG 2 ;
700
                                      CAR ;
701
                                      CONTRACT unit ;
702
                                      IF_NONE { PUSH int 319 ; FAILWITH } {} ;
703
                                      DIG 2 ;
704
                                      UNIT ;
705
                                      TRANSFER_TOKENS ;
706
                                      CONS }
707
                                    { DROP 2 } } }
708
                         {} ;
709
                       DUP 4 ;
710
                       CAR ;
711
                       GET 3 ;
712
                       IF_NONE
713
                         { DIG 2 ; DROP ; DIG 2 ; DROP }
714
                         { DUP ;
715
                           DUG 2 ;
716
                           CAR ;
717
                           CONTRACT %enforce_conditions (list (pair
718
                                                               (pair (nat %amount)
719
                                                                     (pair
720
                                                                       (address %claimer)
721
                                                                       (bytes %condition_id)))
722
                                                               (pair (address %creator)
723
                                                                     (pair
724
                                                                       (option %extra bytes)
725
                                                                       (pair %token
726
                                                                         (address %address)
727
                                                                         (nat %token_id)))))) ;
728
                           IF_NONE { PUSH int 18 ; FAILWITH } {} ;
729
                           PUSH mutez 0 ;
730
                           NIL (pair (pair nat (pair address bytes))
731
                                     (pair address
732
                                           (pair (option bytes) (pair address nat)))) ;
733
                           DUP 9 ;
734
                           GET 6 ;
735
                           SELF_ADDRESS ;
736
                           PAIR ;
737
                           DUP 10 ;
738
                           GET 3 ;
739
                           PAIR ;
740
                           DIG 8 ;
741
                           CAR ;
742
                           GET 4 ;
743
                           PAIR ;
744
                           DIG 5 ;
745
                           CDR ;
746
                           DIG 7 ;
747
                           PAIR ;
748
                           DUP 8 ;
749
                           CAR ;
750
                           CAR ;
751
                           PAIR ;
752
                           PAIR ;
753
                           CONS ;
754
                           TRANSFER_TOKENS ;
755
                           CONS } ;
756
                       DUP 4 ;
757
                       UNPAIR ;
758
                       UNPAIR ;
759
                       SWAP ;
760
                       UNPAIR ;
761
                       SWAP ;
762
                       UNPAIR ;
763
                       DUP 8 ;
764
                       CAR ;
765
                       CAR ;
766
                       DIG 9 ;
767
                       CAR ;
768
                       GET 5 ;
769
                       DUP 9 ;
770
                       GET ;
771
                       IF_NONE { PUSH nat 0 } {} ;
772
                       ADD ;
773
                       SOME ;
774
                       DIG 7 ;
775
                       UPDATE ;
776
                       PAIR ;
777
                       SWAP ;
778
                       PAIR ;
779
                       SWAP ;
780
                       PAIR ;
781
                       PAIR ;
782
                       DUP ;
783
                       GET 7 ;
784
                       DUP ;
785
                       DUP 5 ;
786
                       GET 6 ;
787
                       DUP ;
788
                       DUG 2 ;
789
                       GET ;
790
                       IF_NONE { PUSH int 342 ; FAILWITH } {} ;
791
                       DUP 6 ;
792
                       CAR ;
793
                       CAR ;
794
                       ADD ;
795
                       SOME ;
796
                       SWAP ;
797
                       UPDATE ;
798
                       UPDATE 7 ;
799
                       DUP ;
800
                       DUG 3 ;
801
                       CAR ;
802
                       GET 6 ;
803
                       DUP 3 ;
804
                       GET 6 ;
805
                       MEM ;
806
                       IF
807
                         { DIG 2 ;
808
                           UNPAIR ;
809
                           UNPAIR ;
810
                           SWAP ;
811
                           UNPAIR ;
812
                           SWAP ;
813
                           UNPAIR ;
814
                           SWAP ;
815
                           DUP ;
816
                           DIG 7 ;
817
                           GET 6 ;
818
                           DUP ;
819
                           DUG 2 ;
820
                           GET ;
821
                           IF_NONE { PUSH int 348 ; FAILWITH } {} ;
822
                           PUSH bool True ;
823
                           UPDATE 2 ;
824
                           SOME ;
825
                           SWAP ;
826
                           UPDATE ;
827
                           SWAP ;
828
                           PAIR ;
829
                           SWAP ;
830
                           PAIR ;
831
                           SWAP ;
832
                           PAIR ;
833
                           PAIR ;
834
                           SWAP }
835
                         { DIG 2 ;
836
                           UNPAIR ;
837
                           UNPAIR ;
838
                           SWAP ;
839
                           UNPAIR ;
840
                           SWAP ;
841
                           UNPAIR ;
842
                           SWAP ;
843
                           PUSH (option (pair bool bool)) (Some (Pair False True)) ;
844
                           DIG 7 ;
845
                           GET 6 ;
846
                           UPDATE ;
847
                           SWAP ;
848
                           PAIR ;
849
                           SWAP ;
850
                           PAIR ;
851
                           SWAP ;
852
                           PAIR ;
853
                           PAIR ;
854
                           SWAP } }
855
                     { SWAP ;
856
                       DUP ;
857
                       DUG 2 ;
858
                       GET 3 ;
859
                       CAR ;
860
                       SWAP ;
861
                       DUP ;
862
                       DUG 2 ;
863
                       CAR ;
864
                       MEM ;
865
                       IF
866
                         { SWAP ;
867
                           DUP ;
868
                           DUG 2 ;
869
                           GET 3 ;
870
                           CAR ;
871
                           SWAP ;
872
                           DUP ;
873
                           DUG 2 ;
874
                           CAR ;
875
                           GET ;
876
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
877
                           SENDER ;
878
                           MEM }
879
                         { PUSH bool False } ;
880
                       IF
881
                         { PUSH bool True }
882
                         { SWAP ;
883
                           DUP ;
884
                           DUG 2 ;
885
                           CAR ;
886
                           CAR ;
887
                           CAR ;
888
                           SWAP ;
889
                           DUP ;
890
                           DUG 2 ;
891
                           CAR ;
892
                           GET ;
893
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
894
                           SENDER ;
895
                           GET ;
896
                           IF_NONE { PUSH int 504 ; FAILWITH } {} } ;
897
                       IF {} { PUSH string "NOT_AUTHOR_MANAGER" ; FAILWITH } ;
898
                       PUSH nat 0 ;
899
                       DUP 3 ;
900
                       GET 7 ;
901
                       DUP 3 ;
902
                       CAR ;
903
                       GET ;
904
                       IF_NONE { PUSH int 189 ; FAILWITH } {} ;
905
                       COMPARE ;
906
                       EQ ;
907
                       IF {} { PUSH string "OE_TOKEN_EXISTS" ; FAILWITH } ;
908
                       DUP ;
909
                       GET 9 ;
910
                       ITER { DUP ;
911
                              SIZE ;
912
                              PUSH nat 0 ;
913
                              COMPARE ;
914
                              LT ;
915
                              IF {} { PUSH string "OE_NO_BURN_OPT" ; FAILWITH } ;
916
                              DUP ;
917
                              ITER { CDR ;
918
                                     SIZE ;
919
                                     PUSH nat 0 ;
920
                                     COMPARE ;
921
                                     LT ;
922
                                     IF
923
                                       {}
924
                                       { PUSH string "OE_BURN_OPT_EMPTY" ; FAILWITH } } ;
925
                              DROP } ;
926
                       DUP ;
927
                       GET 15 ;
928
                       CDR ;
929
                       PUSH nat 0 ;
930
                       COMPARE ;
931
                       LT ;
932
                       IF {} { PUSH string "OE_NO_TOTAL" ; FAILWITH } ;
933
                       DUP ;
934
                       GET 15 ;
935
                       CAR ;
936
                       PUSH nat 0 ;
937
                       SWAP ;
938
                       ITER { CDR ; ADD } ;
939
                       SWAP ;
940
                       DUP ;
941
                       DUG 2 ;
942
                       GET 15 ;
943
                       CDR ;
944
                       COMPARE ;
945
                       EQ ;
946
                       IF {} { PUSH string "OE_SHARE_MISMATCH" ; FAILWITH } ;
947
                       DUP ;
948
                       GET 3 ;
949
                       SWAP ;
950
                       DUP ;
951
                       DUG 2 ;
952
                       GET 5 ;
953
                       SUB ;
954
                       PUSH int 300 ;
955
                       SWAP ;
956
                       COMPARE ;
957
                       GE ;
958
                       IF {} { PUSH string "OE_AT_LEAST_300" ; FAILWITH } ;
959
                       SWAP ;
960
                       UNPAIR ;
961
                       UNPAIR ;
962
                       UNPAIR ;
963
                       SWAP ;
964
                       UNPAIR ;
965
                       SWAP ;
966
                       DIG 5 ;
967
                       DUP ;
968
                       GET 3 ;
969
                       SWAP ;
970
                       DUP ;
971
                       DUG 7 ;
972
                       GET 15 ;
973
                       PAIR ;
974
                       DUP 7 ;
975
                       GET 7 ;
976
                       PAIR ;
977
                       DIG 6 ;
978
                       DUP ;
979
                       GET 11 ;
980
                       SWAP ;
981
                       DUP ;
982
                       DUG 8 ;
983
                       GET 5 ;
984
                       PAIR ;
985
                       PAIR ;
986
                       SENDER ;
987
                       DUP 8 ;
988
                       GET 16 ;
989
                       PAIR ;
990
                       DIG 7 ;
991
                       DUP ;
992
                       GET 9 ;
993
                       SWAP ;
994
                       DUP ;
995
                       DUG 9 ;
996
                       GET 13 ;
997
                       PAIR ;
998
                       PAIR ;
999
                       PAIR ;
1000
                       SOME ;
1001
                       DIG 6 ;
1002
                       CAR ;
1003
                       UPDATE ;
1004
                       SWAP ;
1005
                       PAIR ;
1006
                       SWAP ;
1007
                       PAIR ;
1008
                       PAIR ;
1009
                       PAIR ;
1010
                       NIL operation } }
1011
                 { IF_LEFT
1012
                     { PUSH nat 1 ;
1013
                       DUP 3 ;
1014
                       CAR ;
1015
                       GET 3 ;
1016
                       ADD ;
1017
                       DIG 2 ;
1018
                       DUP ;
1019
                       GET 8 ;
1020
                       DUP 4 ;
1021
                       CAR ;
1022
                       DUP 4 ;
1023
                       PAIR ;
1024
                       SOME ;
1025
                       DUP 4 ;
1026
                       UPDATE ;
1027
                       UPDATE 8 ;
1028
                       DUP ;
1029
                       GET 7 ;
1030
                       PUSH (option nat) (Some 0) ;
1031
                       DUP 4 ;
1032
                       UPDATE ;
1033
                       UPDATE 7 ;
1034
                       UNPAIR ;
1035
                       SWAP ;
1036
                       UNPAIR ;
1037
                       UNPAIR ;
1038
                       PUSH (option (set address)) (Some {}) ;
1039
                       DUP 6 ;
1040
                       UPDATE ;
1041
                       PAIR ;
1042
                       PAIR ;
1043
                       SWAP ;
1044
                       UNPAIR ;
1045
                       SWAP ;
1046
                       UNPAIR ;
1047
                       PUSH nat 1 ;
1048
                       ADD ;
1049
                       PAIR ;
1050
                       SWAP ;
1051
                       PAIR ;
1052
                       PAIR ;
1053
                       DUG 2 ;
1054
                       EMPTY_MAP address bool ;
1055
                       PUSH (option bool) (Some True) ;
1056
                       SENDER ;
1057
                       UPDATE ;
1058
                       DUP 3 ;
1059
                       GET 3 ;
1060
                       ITER { SWAP ; PUSH (option bool) (Some False) ; DIG 2 ; UPDATE } ;
1061
                       DIG 3 ;
1062
                       UNPAIR ;
1063
                       UNPAIR ;
1064
                       UNPAIR ;
1065
                       DUP 5 ;
1066
                       SOME ;
1067
                       DUP 7 ;
1068
                       UPDATE ;
1069
                       PAIR ;
1070
                       PAIR ;
1071
                       PAIR ;
1072
                       DUG 3 ;
1073
                       PUSH nat 0 ;
1074
                       DUP 4 ;
1075
                       GET 5 ;
1076
                       COMPARE ;
1077
                       GT ;
1078
                       IF
1079
                         { DIG 3 ;
1080
                           DUP ;
1081
                           GET 7 ;
1082
                           DUP 5 ;
1083
                           GET 5 ;
1084
                           SOME ;
1085
                           DUP 5 ;
1086
                           UPDATE ;
1087
                           UPDATE 7 ;
1088
                           UNPAIR ;
1089
                           UNPAIR ;
1090
                           SWAP ;
1091
                           UNPAIR ;
1092
                           SWAP ;
1093
                           UNPAIR ;
1094
                           DUP 8 ;
1095
                           GET 5 ;
1096
                           SOME ;
1097
                           DUP 8 ;
1098
                           SENDER ;
1099
                           PAIR ;
1100
                           UPDATE ;
1101
                           PAIR ;
1102
                           SWAP ;
1103
                           PAIR ;
1104
                           SWAP ;
1105
                           PAIR ;
1106
                           PAIR ;
1107
                           DUG 3 }
1108
                         {} ;
1109
                       PUSH bool False ;
1110
                       PUSH (pair bool bool) (Pair False False) ;
1111
                       DUP 5 ;
1112
                       GET 7 ;
1113
                       IF
1114
                         { SWAP ; DROP ; PUSH bool True ; UPDATE 1 ; PUSH bool True ; SWAP }
1115
                         {} ;
1116
                       DUP 5 ;
1117
                       GET 8 ;
1118
                       IF
1119
                         { SWAP ; DROP ; PUSH bool True ; UPDATE 2 ; PUSH bool True ; SWAP }
1120
                         {} ;
1121
                       SWAP ;
1122
                       DUP ;
1123
                       DUG 2 ;
1124
                       IF
1125
                         { SWAP ;
1126
                           DROP ;
1127
                           SWAP ;
1128
                           DROP ;
1129
                           DIG 2 ;
1130
                           DROP ;
1131
                           DIG 2 ;
1132
                           UNPAIR ;
1133
                           UNPAIR ;
1134
                           SWAP ;
1135
                           UNPAIR ;
1136
                           SWAP ;
1137
                           UNPAIR ;
1138
                           SWAP ;
1139
                           DIG 5 ;
1140
                           SOME ;
1141
                           DIG 6 ;
1142
                           UPDATE ;
1143
                           SWAP ;
1144
                           PAIR ;
1145
                           SWAP ;
1146
                           PAIR ;
1147
                           SWAP ;
1148
                           PAIR ;
1149
                           PAIR }
1150
                         { DROP 5 } }
1151
                     { SWAP ;
1152
                       DUP ;
1153
                       DUG 2 ;
1154
                       GET 3 ;
1155
                       CAR ;
1156
                       SWAP ;
1157
                       DUP ;
1158
                       DUG 2 ;
1159
                       GET 4 ;
1160
                       MEM ;
1161
                       IF
1162
                         { SWAP ;
1163
                           DUP ;
1164
                           DUG 2 ;
1165
                           GET 3 ;
1166
                           CAR ;
1167
                           SWAP ;
1168
                           DUP ;
1169
                           DUG 2 ;
1170
                           GET 4 ;
1171
                           GET ;
1172
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1173
                           SENDER ;
1174
                           MEM }
1175
                         { PUSH bool False } ;
1176
                       IF
1177
                         { PUSH bool True }
1178
                         { SWAP ;
1179
                           DUP ;
1180
                           DUG 2 ;
1181
                           CAR ;
1182
                           CAR ;
1183
                           CAR ;
1184
                           SWAP ;
1185
                           DUP ;
1186
                           DUG 2 ;
1187
                           GET 4 ;
1188
                           GET ;
1189
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1190
                           SENDER ;
1191
                           GET ;
1192
                           IF_NONE { PUSH int 504 ; FAILWITH } {} } ;
1193
                       IF {} { PUSH string "NOT_AUTHOR_MANAGER" ; FAILWITH } ;
1194
                       SWAP ;
1195
                       DUP ;
1196
                       DUG 2 ;
1197
                       CAR ;
1198
                       GET 6 ;
1199
                       SWAP ;
1200
                       DUP ;
1201
                       DUG 2 ;
1202
                       GET 4 ;
1203
                       GET ;
1204
                       IF_NONE { PUSH (pair bool bool) (Pair False False) } {} ;
1205
                       DUP ;
1206
                       CAR ;
1207
                       IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; CAR } ;
1208
                       UPDATE 1 ;
1209
                       DUP ;
1210
                       CDR ;
1211
                       IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; GET 3 } ;
1212
                       UPDATE 2 ;
1213
                       DIG 2 ;
1214
                       UNPAIR ;
1215
                       UNPAIR ;
1216
                       SWAP ;
1217
                       UNPAIR ;
1218
                       SWAP ;
1219
                       UNPAIR ;
1220
                       SWAP ;
1221
                       DIG 5 ;
1222
                       SOME ;
1223
                       DIG 6 ;
1224
                       GET 4 ;
1225
                       UPDATE ;
1226
                       SWAP ;
1227
                       PAIR ;
1228
                       SWAP ;
1229
                       PAIR ;
1230
                       SWAP ;
1231
                       PAIR ;
1232
                       PAIR } ;
1233
                   NIL operation } } }
1234
         { IF_LEFT
1235
             { IF_LEFT
1236
                 { IF_LEFT
1237
                     { SWAP ;
1238
                       DUP ;
1239
                       DUG 2 ;
1240
                       GET 3 ;
1241
                       CAR ;
1242
                       SWAP ;
1243
                       DUP ;
1244
                       DUG 2 ;
1245
                       CDR ;
1246
                       MEM ;
1247
                       IF
1248
                         { SWAP ;
1249
                           DUP ;
1250
                           DUG 2 ;
1251
                           GET 3 ;
1252
                           CAR ;
1253
                           SWAP ;
1254
                           DUP ;
1255
                           DUG 2 ;
1256
                           CDR ;
1257
                           GET ;
1258
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1259
                           SENDER ;
1260
                           MEM }
1261
                         { PUSH bool False } ;
1262
                       IF
1263
                         { PUSH bool True }
1264
                         { SWAP ;
1265
                           DUP ;
1266
                           DUG 2 ;
1267
                           CAR ;
1268
                           CAR ;
1269
                           CAR ;
1270
                           SWAP ;
1271
                           DUP ;
1272
                           DUG 2 ;
1273
                           CDR ;
1274
                           GET ;
1275
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1276
                           SENDER ;
1277
                           GET ;
1278
                           IF_NONE { PUSH int 504 ; FAILWITH } {} } ;
1279
                       IF {} { PUSH string "NOT_AUTHOR_MANAGER" ; FAILWITH } ;
1280
                       SWAP ;
1281
                       DUP ;
1282
                       DUG 2 ;
1283
                       CAR ;
1284
                       GET 6 ;
1285
                       SWAP ;
1286
                       DUP ;
1287
                       DUG 2 ;
1288
                       CDR ;
1289
                       MEM ;
1290
                       IF
1291
                         { SWAP ;
1292
                           DUP ;
1293
                           DUG 2 ;
1294
                           CAR ;
1295
                           GET 6 ;
1296
                           SWAP ;
1297
                           DUP ;
1298
                           DUG 2 ;
1299
                           CDR ;
1300
                           GET ;
1301
                           IF_NONE { PUSH int 444 ; FAILWITH } {} ;
1302
                           CDR ;
1303
                           NOT }
1304
                         { PUSH bool True } ;
1305
                       IF {} { PUSH string "OE_MINT_LOCKED" ; FAILWITH } ;
1306
                       SWAP ;
1307
                       DUP ;
1308
                       DUG 2 ;
1309
                       CAR ;
1310
                       CAR ;
1311
                       GET 4 ;
1312
                       SWAP ;
1313
                       DUP ;
1314
                       DUG 2 ;
1315
                       CDR ;
1316
                       MEM ;
1317
                       IF
1318
                         { NOW ;
1319
                           DUP 3 ;
1320
                           CAR ;
1321
                           CAR ;
1322
                           GET 4 ;
1323
                           DUP 3 ;
1324
                           CDR ;
1325
                           GET ;
1326
                           IF_NONE { PUSH int 451 ; FAILWITH } {} ;
1327
                           GET 3 ;
1328
                           CAR ;
1329
                           COMPARE ;
1330
                           LT }
1331
                         { PUSH bool True } ;
1332
                       IF {} { PUSH string "OE_TOKEN_CONFIGURED_FOR_SALE" ; FAILWITH } ;
1333
                       DUP ;
1334
                       CAR ;
1335
                       PUSH nat 0 ;
1336
                       SWAP ;
1337
                       ITER { DUP 4 ;
1338
                              UNPAIR ;
1339
                              UNPAIR ;
1340
                              SWAP ;
1341
                              UNPAIR ;
1342
                              SWAP ;
1343
                              UNPAIR ;
1344
                              DUP 6 ;
1345
                              CAR ;
1346
                              DIG 9 ;
1347
                              CAR ;
1348
                              GET 5 ;
1349
                              DUP 10 ;
1350
                              CDR ;
1351
                              DUP 9 ;
1352
                              CDR ;
1353
                              PAIR ;
1354
                              GET ;
1355
                              IF_NONE { PUSH nat 0 } {} ;
1356
                              ADD ;
1357
                              SOME ;
1358
                              DUP 9 ;
1359
                              CDR ;
1360
                              DUP 8 ;
1361
                              CDR ;
1362
                              PAIR ;
1363
                              UPDATE ;
1364
                              PAIR ;
1365
                              SWAP ;
1366
                              PAIR ;
1367
                              SWAP ;
1368
                              PAIR ;
1369
                              PAIR ;
1370
                              DUG 3 ;
1371
                              CAR ;
1372
                              ADD } ;
1373
                       DUP 3 ;
1374
                       GET 7 ;
1375
                       DUP 3 ;
1376
                       CDR ;
1377
                       GET ;
1378
                       IF_NONE { PUSH nat 0 } {} ;
1379
                       DIG 3 ;
1380
                       DUP ;
1381
                       GET 7 ;
1382
                       DIG 3 ;
1383
                       DIG 3 ;
1384
                       ADD ;
1385
                       SOME ;
1386
                       DIG 3 ;
1387
                       CDR ;
1388
                       UPDATE ;
1389
                       UPDATE 7 }
1390
                     { SWAP ;
1391
                       DUP ;
1392
                       DUG 2 ;
1393
                       CAR ;
1394
                       CAR ;
1395
                       CAR ;
1396
                       SWAP ;
1397
                       DUP ;
1398
                       DUG 2 ;
1399
                       MEM ;
1400
                       IF {} { PUSH string "TOKEN_NOT_FOUND" ; FAILWITH } ;
1401
                       SWAP ;
1402
                       DUP ;
1403
                       DUG 2 ;
1404
                       CAR ;
1405
                       CAR ;
1406
                       CAR ;
1407
                       SWAP ;
1408
                       DUP ;
1409
                       DUG 2 ;
1410
                       GET ;
1411
                       IF_NONE { PUSH int 124 ; FAILWITH } {} ;
1412
                       SENDER ;
1413
                       MEM ;
1414
                       IF {} { PUSH string "COLLAB_NOT_FOUND" ; FAILWITH } ;
1415
                       SWAP ;
1416
                       UNPAIR ;
1417
                       UNPAIR ;
1418
                       UNPAIR ;
1419
                       DUP ;
1420
                       DUP 6 ;
1421
                       DUP ;
1422
                       DUG 2 ;
1423
                       GET ;
1424
                       IF_NONE { PUSH int 126 ; FAILWITH } {} ;
1425
                       NONE bool ;
1426
                       SENDER ;
1427
                       UPDATE ;
1428
                       SOME ;
1429
                       SWAP ;
1430
                       UPDATE ;
1431
                       PAIR ;
1432
                       PAIR ;
1433
                       PAIR ;
1434
                       DUP ;
1435
                       DUG 2 ;
1436
                       UNPAIR ;
1437
                       UNPAIR ;
1438
                       UNPAIR ;
1439
                       DIG 5 ;
1440
                       CAR ;
1441
                       CAR ;
1442
                       CAR ;
1443
                       DUP 6 ;
1444
                       GET ;
1445
                       IF_NONE { PUSH int 125 ; FAILWITH } {} ;
1446
                       SOME ;
1447
                       DIG 5 ;
1448
                       UPDATE ;
1449
                       PAIR ;
1450
                       PAIR ;
1451
                       PAIR } }
1452
                 { IF_LEFT
1453
                     { SWAP ;
1454
                       DUP ;
1455
                       DUG 2 ;
1456
                       GET 3 ;
1457
                       CAR ;
1458
                       SWAP ;
1459
                       DUP ;
1460
                       DUG 2 ;
1461
                       MEM ;
1462
                       IF
1463
                         { SWAP ;
1464
                           DUP ;
1465
                           DUG 2 ;
1466
                           GET 3 ;
1467
                           CAR ;
1468
                           SWAP ;
1469
                           DUP ;
1470
                           DUG 2 ;
1471
                           GET ;
1472
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1473
                           SENDER ;
1474
                           MEM }
1475
                         { PUSH bool False } ;
1476
                       IF
1477
                         { PUSH bool True }
1478
                         { SWAP ;
1479
                           DUP ;
1480
                           DUG 2 ;
1481
                           CAR ;
1482
                           CAR ;
1483
                           CAR ;
1484
                           SWAP ;
1485
                           DUP ;
1486
                           DUG 2 ;
1487
                           GET ;
1488
                           IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1489
                           SENDER ;
1490
                           GET ;
1491
                           IF_NONE { PUSH int 504 ; FAILWITH } {} } ;
1492
                       IF {} { PUSH string "NOT_AUTHOR_MANAGER" ; FAILWITH } ;
1493
                       PUSH nat 0 ;
1494
                       DUP 3 ;
1495
                       GET 7 ;
1496
                       DUP 3 ;
1497
                       GET ;
1498
                       IF_NONE { PUSH int 222 ; FAILWITH } {} ;
1499
                       COMPARE ;
1500
                       EQ ;
1501
                       IF {} { PUSH string "OE_TOKEN_EXISTS" ; FAILWITH } ;
1502
                       SWAP ;
1503
                       UNPAIR ;
1504
                       UNPAIR ;
1505
                       UNPAIR ;
1506
                       SWAP ;
1507
                       UNPAIR ;
1508
                       SWAP ;
1509
                       NONE (pair
1510
                              (pair
1511
                                (pair nat (list (map address (map (option nat) nat))))
1512
                                (pair (option (pair address bytes)) address))
1513
                              (pair (pair timestamp nat)
1514
                                    (pair mutez
1515
                                          (pair (pair (map address nat) nat) timestamp)))) ;
1516
                       DIG 6 ;
1517
                       UPDATE ;
1518
                       SWAP ;
1519
                       PAIR ;
1520
                       SWAP ;
1521
                       PAIR ;
1522
                       PAIR ;
1523
                       PAIR }
1524
                     { SWAP ;
1525
                       DUP ;
1526
                       DUG 2 ;
1527
                       CAR ;
1528
                       CAR ;
1529
                       CAR ;
1530
                       SWAP ;
1531
                       DUP ;
1532
                       DUG 2 ;
1533
                       CDR ;
1534
                       GET ;
1535
                       IF_NONE { PUSH int 144 ; FAILWITH } {} ;
1536
                       SENDER ;
1537
                       GET ;
1538
                       IF_NONE { PUSH int 144 ; FAILWITH } {} ;
1539
                       IF {} { PUSH string "NOT_VERIFIED_AUTHOR" ; FAILWITH } ;
1540
                       SWAP ;
1541
                       UNPAIR ;
1542
                       SWAP ;
1543
                       UNPAIR ;
1544
                       UNPAIR ;
1545
                       DUP ;
1546
                       DUP 6 ;
1547
                       CDR ;
1548
                       DUP ;
1549
                       DUG 2 ;
1550
                       GET ;
1551
                       IF_NONE { PUSH int 145 ; FAILWITH } {} ;
1552
                       PUSH bool False ;
1553
                       DIG 7 ;
1554
                       CAR ;
1555
                       UPDATE ;
1556
                       SOME ;
1557
                       SWAP ;
1558
                       UPDATE ;
1559
                       PAIR ;
1560
                       PAIR ;
1561
                       SWAP ;
1562
                       PAIR } } }
1563
             { IF_LEFT
1564
                 { IF_LEFT
1565
                     { SWAP ;
1566
                       DUP ;
1567
                       DUG 2 ;
1568
                       CAR ;
1569
                       CAR ;
1570
                       CAR ;
1571
                       SWAP ;
1572
                       DUP ;
1573
                       DUG 2 ;
1574
                       MEM ;
1575
                       IF {} { PUSH string "TOKEN_NOT_FOUND" ; FAILWITH } ;
1576
                       SWAP ;
1577
                       DUP ;
1578
                       DUG 2 ;
1579
                       CAR ;
1580
                       CAR ;
1581
                       CAR ;
1582
                       SWAP ;
1583
                       DUP ;
1584
                       DUG 2 ;
1585
                       GET ;
1586
                       IF_NONE { PUSH int 116 ; FAILWITH } {} ;
1587
                       SENDER ;
1588
                       MEM ;
1589
                       IF {} { PUSH string "COLLAB_NOT_FOUND" ; FAILWITH } ;
1590
                       SWAP ;
1591
                       UNPAIR ;
1592
                       UNPAIR ;
1593
                       UNPAIR ;
1594
                       DUP ;
1595
                       DIG 5 ;
1596
                       DUP ;
1597
                       DUG 2 ;
1598
                       GET ;
1599
                       IF_NONE { PUSH int 117 ; FAILWITH } {} ;
1600
                       PUSH (option bool) (Some True) ;
1601
                       SENDER ;
1602
                       UPDATE ;
1603
                       SOME ;
1604
                       SWAP ;
1605
                       UPDATE ;
1606
                       PAIR ;
1607
                       PAIR ;
1608
                       PAIR }
1609
                     { DUP ;
1610
                       ITER { DUP ;
1611
                              CDR ;
1612
                              ITER { DUP 4 ;
1613
                                     GET 8 ;
1614
                                     SWAP ;
1615
                                     DUP ;
1616
                                     DUG 2 ;
1617
                                     GET 3 ;
1618
                                     MEM ;
1619
                                     IF
1620
                                       {}
1621
                                       { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ;
1622
                                     SWAP ;
1623
                                     DUP ;
1624
                                     DUG 2 ;
1625
                                     CAR ;
1626
                                     SENDER ;
1627
                                     COMPARE ;
1628
                                     EQ ;
1629
                                     IF
1630
                                       { PUSH bool True }
1631
                                       { DUP 4 ;
1632
                                         GET 3 ;
1633
                                         GET 4 ;
1634
                                         SWAP ;
1635
                                         DUP ;
1636
                                         DUG 2 ;
1637
                                         GET 3 ;
1638
                                         SENDER ;
1639
                                         DUP 5 ;
1640
                                         CAR ;
1641
                                         PAIR 3 ;
1642
                                         MEM } ;
1643
                                     IF
1644
                                       {}
1645
                                       { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ;
1646
                                     DUP ;
1647
                                     GET 4 ;
1648
                                     PUSH nat 0 ;
1649
                                     COMPARE ;
1650
                                     LT ;
1651
                                     IF
1652
                                       { DUP 4 ;
1653
                                         UNPAIR ;
1654
                                         UNPAIR ;
1655
                                         SWAP ;
1656
                                         UNPAIR ;
1657
                                         SWAP ;
1658
                                         UNPAIR ;
1659
                                         DUP 6 ;
1660
                                         GET 4 ;
1661
                                         DIG 9 ;
1662
                                         CAR ;
1663
                                         GET 5 ;
1664
                                         DUP 8 ;
1665
                                         GET 3 ;
1666
                                         DUP 10 ;
1667
                                         CAR ;
1668
                                         PAIR ;
1669
                                         GET ;
1670
                                         IF_NONE { PUSH nat 0 } {} ;
1671
                                         SUB ;
1672
                                         ISNAT ;
1673
                                         IF_NONE
1674
                                           { PUSH string "FA2_INSUFFICIENT_BALANCE" ;
1675
                                             FAILWITH }
1676
                                           {} ;
1677
                                         SOME ;
1678
                                         DUP 7 ;
1679
                                         GET 3 ;
1680
                                         DUP 9 ;
1681
                                         CAR ;
1682
                                         PAIR ;
1683
                                         UPDATE ;
1684
                                         PAIR ;
1685
                                         SWAP ;
1686
                                         PAIR ;
1687
                                         SWAP ;
1688
                                         PAIR ;
1689
                                         PAIR ;
1690
                                         DUP ;
1691
                                         DUG 4 ;
1692
                                         UNPAIR ;
1693
                                         UNPAIR ;
1694
                                         SWAP ;
1695
                                         UNPAIR ;
1696
                                         SWAP ;
1697
                                         UNPAIR ;
1698
                                         DUP 6 ;
1699
                                         GET 4 ;
1700
                                         DIG 9 ;
1701
                                         CAR ;
1702
                                         GET 5 ;
1703
                                         DIG 7 ;
1704
                                         DUP ;
1705
                                         GET 3 ;
1706
                                         SWAP ;
1707
                                         DUP ;
1708
                                         DUG 9 ;
1709
                                         CAR ;
1710
                                         PAIR ;
1711
                                         GET ;
1712
                                         IF_NONE { PUSH nat 0 } {} ;
1713
                                         ADD ;
1714
                                         SOME ;
1715
                                         DIG 6 ;
1716
                                         DUP ;
1717
                                         GET 3 ;
1718
                                         SWAP ;
1719
                                         CAR ;
1720
                                         PAIR ;
1721
                                         UPDATE ;
1722
                                         PAIR ;
1723
                                         SWAP ;
1724
                                         PAIR ;
1725
                                         SWAP ;
1726
                                         PAIR ;
1727
                                         PAIR ;
1728
                                         DUG 2 }
1729
                                       { DROP } } ;
1730
                              DROP } ;
1731
                       DROP } }
1732
                 { IF_LEFT
1733
                     { DUP ;
1734
                       ITER { IF_LEFT
1735
                                { DUP ;
1736
                                  CAR ;
1737
                                  SENDER ;
1738
                                  COMPARE ;
1739
                                  EQ ;
1740
                                  IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
1741
                                  DIG 2 ;
1742
                                  UNPAIR ;
1743
                                  SWAP ;
1744
                                  UNPAIR ;
1745
                                  UNPAIR ;
1746
                                  SWAP ;
1747
                                  UNPAIR ;
1748
                                  SWAP ;
1749
                                  PUSH (option unit) (Some Unit) ;
1750
                                  DIG 6 ;
1751
                                  UPDATE ;
1752
                                  SWAP ;
1753
                                  PAIR ;
1754
                                  SWAP ;
1755
                                  PAIR ;
1756
                                  PAIR ;
1757
                                  SWAP ;
1758
                                  PAIR ;
1759
                                  SWAP }
1760
                                { DUP ;
1761
                                  CAR ;
1762
                                  SENDER ;
1763
                                  COMPARE ;
1764
                                  EQ ;
1765
                                  IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ;
1766
                                  DIG 2 ;
1767
                                  UNPAIR ;
1768
                                  SWAP ;
1769
                                  UNPAIR ;
1770
                                  UNPAIR ;
1771
                                  SWAP ;
1772
                                  UNPAIR ;
1773
                                  SWAP ;
1774
                                  NONE unit ;
1775
                                  DIG 6 ;
1776
                                  UPDATE ;
1777
                                  SWAP ;
1778
                                  PAIR ;
1779
                                  SWAP ;
1780
                                  PAIR ;
1781
                                  PAIR ;
1782
                                  SWAP ;
1783
                                  PAIR ;
1784
                                  SWAP } } ;
1785
                       DROP }
1786
                     { DUP ;
1787
                       ITER { DUP 3 ;
1788
                              GET 3 ;
1789
                              CAR ;
1790
                              SWAP ;
1791
                              DUP ;
1792
                              DUG 2 ;
1793
                              CAR ;
1794
                              MEM ;
1795
                              IF
1796
                                { DUP 3 ;
1797
                                  GET 3 ;
1798
                                  CAR ;
1799
                                  SWAP ;
1800
                                  DUP ;
1801
                                  DUG 2 ;
1802
                                  CAR ;
1803
                                  GET ;
1804
                                  IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1805
                                  SENDER ;
1806
                                  MEM }
1807
                                { PUSH bool False } ;
1808
                              IF
1809
                                { PUSH bool True }
1810
                                { DUP 3 ;
1811
                                  CAR ;
1812
                                  CAR ;
1813
                                  CAR ;
1814
                                  SWAP ;
1815
                                  DUP ;
1816
                                  DUG 2 ;
1817
                                  CAR ;
1818
                                  GET ;
1819
                                  IF_NONE { PUSH int 504 ; FAILWITH } {} ;
1820
                                  SENDER ;
1821
                                  GET ;
1822
                                  IF_NONE { PUSH int 504 ; FAILWITH } {} } ;
1823
                              IF {} { PUSH string "NOT_AUTHOR_MANAGER" ; FAILWITH } ;
1824
                              DUP 3 ;
1825
                              CAR ;
1826
                              GET 6 ;
1827
                              SWAP ;
1828
                              DUP ;
1829
                              DUG 2 ;
1830
                              CAR ;
1831
                              MEM ;
1832
                              IF
1833
                                { DUP 3 ;
1834
                                  CAR ;
1835
                                  GET 6 ;
1836
                                  SWAP ;
1837
                                  DUP ;
1838
                                  DUG 2 ;
1839
                                  CAR ;
1840
                                  GET ;
1841
                                  IF_NONE { PUSH int 365 ; FAILWITH } {} ;
1842
                                  CAR ;
1843
                                  NOT }
1844
                                { PUSH bool True } ;
1845
                              IF {} { PUSH string "TOKEN_LOCKED" ; FAILWITH } ;
1846
                              DIG 2 ;
1847
                              DUP ;
1848
                              GET 8 ;
1849
                              DIG 2 ;
1850
                              DUP ;
1851
                              CDR ;
1852
                              SWAP ;
1853
                              DUP ;
1854
                              DUG 4 ;
1855
                              CAR ;
1856
                              PAIR ;
1857
                              SOME ;
1858
                              DIG 3 ;
1859
                              CAR ;
1860
                              UPDATE ;
1861
                              UPDATE 8 ;
1862
                              SWAP } ;
1863
                       DROP } } } ;
1864
           NIL operation } ;
1865
       NIL operation ;
1866
       SWAP ;
1867
       ITER { CONS } ;
1868
       PAIR }