BCD

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