BCD

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