BCD

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