-
Notifications
You must be signed in to change notification settings - Fork 9
/
modularAccount.ts
3011 lines (3011 loc) · 187 KB
/
modularAccount.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
export const MODULAR_ACCOUNT_ARTIFACTS = {
MultiOwnerModularAccountFactory: {
address: "0x000000e92D78D90000007F0082006FDA09BD5f11",
abi: [
{
type: "constructor",
inputs: [
{name: "owner", type: "address", internalType: "address"},
{
name: "multiOwnerPlugin",
type: "address",
internalType: "address",
},
{
name: "implementation",
type: "address",
internalType: "address",
},
{
name: "multiOwnerPluginManifestHash",
type: "bytes32",
internalType: "bytes32",
},
{
name: "entryPoint",
type: "address",
internalType: "contract IEntryPoint",
},
],
stateMutability: "nonpayable",
},
{type: "receive", stateMutability: "payable"},
{
type: "function",
name: "ENTRYPOINT",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "contract IEntryPoint",
},
],
stateMutability: "view",
},
{
type: "function",
name: "IMPL",
inputs: [],
outputs: [{name: "", type: "address", internalType: "address"}],
stateMutability: "view",
},
{
type: "function",
name: "MULTI_OWNER_PLUGIN",
inputs: [],
outputs: [{name: "", type: "address", internalType: "address"}],
stateMutability: "view",
},
{
type: "function",
name: "acceptOwnership",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "addStake",
inputs: [
{name: "unstakeDelay", type: "uint32", internalType: "uint32"},
{name: "amount", type: "uint256", internalType: "uint256"},
],
outputs: [],
stateMutability: "payable",
},
{
type: "function",
name: "createAccount",
inputs: [
{name: "salt", type: "uint256", internalType: "uint256"},
{name: "owners", type: "address[]", internalType: "address[]"},
],
outputs: [{name: "addr", type: "address", internalType: "address"}],
stateMutability: "nonpayable",
},
{
type: "function",
name: "getAddress",
inputs: [
{name: "salt", type: "uint256", internalType: "uint256"},
{name: "owners", type: "address[]", internalType: "address[]"},
],
outputs: [{name: "", type: "address", internalType: "address"}],
stateMutability: "view",
},
{
type: "function",
name: "owner",
inputs: [],
outputs: [{name: "", type: "address", internalType: "address"}],
stateMutability: "view",
},
{
type: "function",
name: "pendingOwner",
inputs: [],
outputs: [{name: "", type: "address", internalType: "address"}],
stateMutability: "view",
},
{
type: "function",
name: "renounceOwnership",
inputs: [],
outputs: [],
stateMutability: "view",
},
{
type: "function",
name: "transferOwnership",
inputs: [{name: "newOwner", type: "address", internalType: "address"}],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "unlockStake",
inputs: [],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "withdraw",
inputs: [
{name: "to", type: "address", internalType: "address payable"},
{name: "token", type: "address", internalType: "address"},
{name: "amount", type: "uint256", internalType: "uint256"},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "withdrawStake",
inputs: [
{name: "to", type: "address", internalType: "address payable"},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "event",
name: "OwnershipTransferStarted",
inputs: [
{
name: "previousOwner",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "newOwner",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{
type: "event",
name: "OwnershipTransferred",
inputs: [
{
name: "previousOwner",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "newOwner",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{type: "error", name: "InvalidAction", inputs: []},
{type: "error", name: "InvalidOwner", inputs: []},
{type: "error", name: "OwnersArrayEmpty", inputs: []},
{type: "error", name: "OwnersLimitExceeded", inputs: []},
{type: "error", name: "TransferFailed", inputs: []},
],
bytecode:
"0x60808060405260043610156200001f575b5036156200001d57600080fd5b005b600090813560e01c90816356973ee51462000d4957508063715018a61462000d025780637387673214620008f757806379ba5097146200081557806381785dfd14620007cf5780638da5cb5b14620007a7578063bb9fe6bf1462000709578063c23a5cea146200065f578063d9caed121462000455578063e189e3791462000288578063e30c3978146200025f578063e8eb3cc61462000219578063f2fde38b146200019c5763fbb1c3d4036200001057604036600319011262000187578060043563ffffffff81168091036200019957620000fa62000f5c565b6001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27891690813b15620001955782906024604051809481937f0396cb6000000000000000000000000000000000000000000000000000000000835260048301528235905af180156200018a57620001745750f35b6200017f9062000dfa565b620001875780f35b80fd5b6040513d84823e3d90fd5b5050fd5b50fd5b5034620001875760203660031901126200018757620001ba62000de3565b620001c462000f5c565b6001600160a01b03809116908173ffffffffffffffffffffffffffffffffffffffff1960015416176001558254167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034620001875780600319360112620001875760206040516001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789168152f35b5034620001875780600319360112620001875760206001600160a01b0360015416604051908152f35b503462000187576200029a3662000d8e565b909181156200042b57606482116200040157620002b8828462000fdb565b15620003d757620002f9620002dd620003c69360405191829160209788840162000e4f565b0392620002f3601f199485810184528362000e2c565b62001040565b90620003af620003bc8561042c9360405190620003198387018362000e2c565b85825282820195620011318739604051620003858482019282620003787f0000000000000000000000000046000000000151008789797b54fdb500e2a61e866001600160a01b0360609216815260406020820152600060408201520190565b0390810183528262000e2c565b6040519586936200039f868601998a925192839162000ecc565b8401915180938684019062000ecc565b0103808452018262000e2c565b519020906200106e565b6001600160a01b0360405191168152f35b60046040517f49e27cff000000000000000000000000000000000000000000000000000000008152fd5b60046040517f7a64f3a6000000000000000000000000000000000000000000000000000000008152fd5b60046040517f0a5c1dfd000000000000000000000000000000000000000000000000000000008152fd5b50346200018757606036600319011262000187576200047362000de3565b602435906001600160a01b038083168093036200065a5783926200049662000f5c565b80620004e5575082809281924791165af1620004b162000f18565b5015620004bb5780f35b60046040517f90b8ec18000000000000000000000000000000000000000000000000000000008152fd5b9092506040519260208401927fa9059cbb000000000000000000000000000000000000000000000000000000008452166024840152604435604484015260448352608083019183831067ffffffffffffffff8411176200064457848091620005979585604052620005568662000e0f565b602086527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460a0820152519082855af16200059062000f18565b916200108e565b80519081159182156200061a575b505015620005b05780f35b608460405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b8192509060209181010312620006405760200151801515810362000640573880620005a5565b5080fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b5034620001875760203660031901126200018757806200067e62000de3565b6200068862000f5c565b6001600160a01b0390817f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27891691823b156200070457602484928360405195869485937fc23a5cea0000000000000000000000000000000000000000000000000000000085521660048401525af180156200018a57620001745750f35b505050fd5b503462000187578060031936011262000187576200072662000f5c565b806001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278916803b15620001995781906004604051809481937fbb9fe6bf0000000000000000000000000000000000000000000000000000000083525af180156200018a5762000799575080f35b620007a49062000dfa565b80f35b503462000187578060031936011262000187576001600160a01b036020915416604051908152f35b5034620001875780600319360112620001875760206040516001600160a01b037f000000000000000000000000ce0000007b008f50d762d155002600004cd6c647168152f35b503462000187578060031936011262000187576001546001600160a01b0333818316036200088d5773ffffffffffffffffffffffffffffffffffffffff19809216600155825491339083161783553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b608460405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152fd5b50346200018757620009093662000d8e565b90929162000918828562000fdb565b15620003d757604051916200092d8362000e0f565b60018352835b6020811062000cf057506200096b620009969394956200095c6040519384926020840162000e4f565b03601f19810183528262000e2c565b620009768462000ea8565b52620009828362000ea8565b506200098e8362000ea8565b519062001040565b604051919061042c620009ad602082018562000e2c565b808452620011319362000a296020820183878239620003af62000a1f60207f0000000000000000000000000046000000000151008789797b54fdb500e2a61e956040518281019062000385816200095c8b856001600160a01b0360609216815260406020820152600060408201520190565b519020846200106e565b94853b1562000a47575b6020866001600160a01b0360405191168152f35b604051928084019184831067ffffffffffffffff84111762000cdc579184939162000a8e9385396001600160a01b0360609216815260406020820152600060408201520190565b039085f5156200018a5760405162000aa68162000e0f565b600181526020368183013762000abc8162000ea8565b6001600160a01b037f000000000000000000000000ce0000007b008f50d762d155002600004cd6c64716905260405162000af68162000e0f565b60018152602081019060203683377f21d0f6cca8bef15ac65bf93ae5ae9ec383ea5010bf3e02b44d3c0abd2d2bd0fb62000b308262000ea8565b5260405193849160608301906040602085015251809152608083019390885b81811062000cc257505050601f19828403016040830152805180845260208401936020808360051b83010193019489915b83831062000c8e575050505062000ba1925003601f19810184528362000e2c565b6001600160a01b0383163b1562000c8a579083906040519283917fe69e24a800000000000000000000000000000000000000000000000000000000835260448301604060048501528251809152602060648501930190855b81811062000c6457505050828203600319016024840152829162000c1d9162000ef1565b0381836001600160a01b0387165af1801562000c59576020935062000c47575b8080808062000a33565b62000c529062000dfa565b3862000c3d565b6040513d85823e3d90fd5b82516001600160a01b031685528996508795506020948501949092019160010162000bf9565b8380fd5b9193600191939550602062000caf8192601f19868203018752895162000ef1565b9701930193019092879492959362000b80565b825186526020958601958895509092019160010162000b4f565b602489634e487b7160e01b81526041600452fd5b80606060208093870101520162000933565b5034620001875780600319360112620001875762000d1f62000f5c565b60046040517f4a7f394f000000000000000000000000000000000000000000000000000000008152fd5b90503462000640578160031936011262000640576020906001600160a01b037f0000000000000000000000000046000000000151008789797b54fdb500e2a61e168152f35b60406003198201126200065a576004359160243567ffffffffffffffff928382116200065a57806023830112156200065a5781600401359384116200065a5760248460051b830101116200065a576024019190565b600435906001600160a01b03821682036200065a57565b67ffffffffffffffff81116200064457604052565b6040810190811067ffffffffffffffff8211176200064457604052565b90601f8019910116810190811067ffffffffffffffff8211176200064457604052565b90916040602092826020820160208352520192916000805b83821062000e7757505050505090565b909192939485356001600160a01b03811680910362000ea457815283019483019392916001019062000e67565b8280fd5b80511562000eb65760200190565b634e487b7160e01b600052603260045260246000fd5b60005b83811062000ee05750506000910152565b818101518382015260200162000ecf565b9060209162000f0c8151809281855285808601910162000ecc565b601f01601f1916010190565b3d1562000f57573d9067ffffffffffffffff821162000644576040519162000f4b601f8201601f19166020018462000e2c565b82523d6000602084013e565b606090565b6001600160a01b0360005416330362000f7157565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b919081101562000eb65760051b0190565b356001600160a01b03811681036200065a5790565b600090815b83831062000ff15750505050600190565b620010086200100284868562000fb5565b62000fc6565b6001600160a01b0391821691161115620010385760016200102f6200100284868562000fb5565b92019162000fe0565b505050600090565b90620010686200095c9160405192839160208301958652604080840152606083019062000ef1565b51902090565b605591600b9160405191604083015260208201523081520160ff81532090565b91929015620010f25750815115620010a4575090565b3b15620010ae5790565b606460405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b825190915015620011065750805190602001fd5b6200112c9060405191829162461bcd60e51b835260206004840152602483019062000ef1565b0390fdfe60406080815261042c908138038061001681610218565b93843982019181818403126102135780516001600160a01b038116808203610213576020838101516001600160401b0394919391858211610213570186601f820112156102135780519061007161006c83610253565b610218565b918083528583019886828401011161021357888661008f930161026e565b813b156101b9577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916841790556000927fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28051158015906101b2575b61010b575b855160e790816103458239f35b855194606086019081118682101761019e578697849283926101889952602788527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c87890152660819985a5b195960ca1b8a8901525190845af4913d15610194573d9061017a61006c83610253565b91825281943d92013e610291565b508038808080806100fe565b5060609250610291565b634e487b7160e01b84526041600452602484fd5b50826100f9565b855162461bcd60e51b815260048101859052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761023d57604052565b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161023d57601f01601f191660200190565b60005b8381106102815750506000910152565b8181015183820152602001610271565b919290156102f357508151156102a5575090565b3b156102ae5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156103065750805190602001fd5b6044604051809262461bcd60e51b825260206004830152610336815180928160248601526020868601910161026e565b601f01601f19168101030190fdfe60806040523615605f5773ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e15605b573d90f35b3d90fd5b73ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54166000808092368280378136915af43d82803e15605b573d90f3fea26469706673582212208f3104255ee3c201238ea03e118ee6ec0a2cff51cbfbdc3af1727982a5a959a564736f6c63430008160033a2646970667358221220689623ad71df789b8adddf1a52b12266ccf238b21ea0652b810ac4637c61be3564736f6c63430008160033",
},
UpgradeableModularAccount: {
address: "0x0046000000000151008789797b54fdb500E2a61e",
abi: [
{
type: "constructor",
inputs: [
{
name: "anEntryPoint",
type: "address",
internalType: "contract IEntryPoint",
},
],
stateMutability: "nonpayable",
},
{type: "fallback", stateMutability: "payable"},
{type: "receive", stateMutability: "payable"},
{
type: "function",
name: "entryPoint",
inputs: [],
outputs: [
{
name: "",
type: "address",
internalType: "contract IEntryPoint",
},
],
stateMutability: "view",
},
{
type: "function",
name: "execute",
inputs: [
{name: "target", type: "address", internalType: "address"},
{name: "value", type: "uint256", internalType: "uint256"},
{name: "data", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "result", type: "bytes", internalType: "bytes"}],
stateMutability: "payable",
},
{
type: "function",
name: "executeBatch",
inputs: [
{
name: "calls",
type: "tuple[]",
internalType: "struct Call[]",
components: [
{name: "target", type: "address", internalType: "address"},
{name: "value", type: "uint256", internalType: "uint256"},
{name: "data", type: "bytes", internalType: "bytes"},
],
},
],
outputs: [{name: "results", type: "bytes[]", internalType: "bytes[]"}],
stateMutability: "payable",
},
{
type: "function",
name: "executeFromPlugin",
inputs: [{name: "data", type: "bytes", internalType: "bytes"}],
outputs: [{name: "returnData", type: "bytes", internalType: "bytes"}],
stateMutability: "payable",
},
{
type: "function",
name: "executeFromPluginExternal",
inputs: [
{name: "target", type: "address", internalType: "address"},
{name: "value", type: "uint256", internalType: "uint256"},
{name: "data", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "", type: "bytes", internalType: "bytes"}],
stateMutability: "payable",
},
{
type: "function",
name: "getExecutionFunctionConfig",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
outputs: [
{
name: "config",
type: "tuple",
internalType: "struct IAccountLoupe.ExecutionFunctionConfig",
components: [
{name: "plugin", type: "address", internalType: "address"},
{
name: "userOpValidationFunction",
type: "bytes21",
internalType: "FunctionReference",
},
{
name: "runtimeValidationFunction",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
],
stateMutability: "view",
},
{
type: "function",
name: "getExecutionHooks",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
outputs: [
{
name: "execHooks",
type: "tuple[]",
internalType: "struct IAccountLoupe.ExecutionHooks[]",
components: [
{
name: "preExecHook",
type: "bytes21",
internalType: "FunctionReference",
},
{
name: "postExecHook",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
],
stateMutability: "view",
},
{
type: "function",
name: "getInstalledPlugins",
inputs: [],
outputs: [
{
name: "pluginAddresses",
type: "address[]",
internalType: "address[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "getNonce",
inputs: [],
outputs: [{name: "", type: "uint256", internalType: "uint256"}],
stateMutability: "view",
},
{
type: "function",
name: "getPreValidationHooks",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
outputs: [
{
name: "preUserOpValidationHooks",
type: "bytes21[]",
internalType: "FunctionReference[]",
},
{
name: "preRuntimeValidationHooks",
type: "bytes21[]",
internalType: "FunctionReference[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "initialize",
inputs: [
{name: "plugins", type: "address[]", internalType: "address[]"},
{name: "pluginInitData", type: "bytes", internalType: "bytes"},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "installPlugin",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{
name: "manifestHash",
type: "bytes32",
internalType: "bytes32",
},
{
name: "pluginInstallData",
type: "bytes",
internalType: "bytes",
},
{
name: "dependencies",
type: "bytes21[]",
internalType: "FunctionReference[]",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "onERC1155BatchReceived",
inputs: [
{name: "operator", type: "address", internalType: "address"},
{name: "from", type: "address", internalType: "address"},
{name: "ids", type: "uint256[]", internalType: "uint256[]"},
{name: "values", type: "uint256[]", internalType: "uint256[]"},
{name: "data", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
stateMutability: "nonpayable",
},
{
type: "function",
name: "onERC1155Received",
inputs: [
{name: "operator", type: "address", internalType: "address"},
{name: "from", type: "address", internalType: "address"},
{name: "id", type: "uint256", internalType: "uint256"},
{name: "value", type: "uint256", internalType: "uint256"},
{name: "data", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
stateMutability: "nonpayable",
},
{
type: "function",
name: "onERC721Received",
inputs: [
{name: "operator", type: "address", internalType: "address"},
{name: "from", type: "address", internalType: "address"},
{name: "tokenId", type: "uint256", internalType: "uint256"},
{name: "data", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
stateMutability: "nonpayable",
},
{
type: "function",
name: "proxiableUUID",
inputs: [],
outputs: [{name: "", type: "bytes32", internalType: "bytes32"}],
stateMutability: "view",
},
{
type: "function",
name: "supportsInterface",
inputs: [{name: "interfaceId", type: "bytes4", internalType: "bytes4"}],
outputs: [{name: "", type: "bool", internalType: "bool"}],
stateMutability: "view",
},
{
type: "function",
name: "tokensReceived",
inputs: [
{name: "operator", type: "address", internalType: "address"},
{name: "from", type: "address", internalType: "address"},
{name: "to", type: "address", internalType: "address"},
{name: "amount", type: "uint256", internalType: "uint256"},
{name: "userData", type: "bytes", internalType: "bytes"},
{name: "operatorData", type: "bytes", internalType: "bytes"},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "uninstallPlugin",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "config", type: "bytes", internalType: "bytes"},
{
name: "pluginUninstallData",
type: "bytes",
internalType: "bytes",
},
],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "upgradeToAndCall",
inputs: [
{
name: "newImplementation",
type: "address",
internalType: "address",
},
{name: "data", type: "bytes", internalType: "bytes"},
],
outputs: [],
stateMutability: "payable",
},
{
type: "function",
name: "validateUserOp",
inputs: [
{
name: "userOp",
type: "tuple",
internalType: "struct UserOperation",
components: [
{name: "sender", type: "address", internalType: "address"},
{name: "nonce", type: "uint256", internalType: "uint256"},
{name: "initCode", type: "bytes", internalType: "bytes"},
{name: "callData", type: "bytes", internalType: "bytes"},
{
name: "callGasLimit",
type: "uint256",
internalType: "uint256",
},
{
name: "verificationGasLimit",
type: "uint256",
internalType: "uint256",
},
{
name: "preVerificationGas",
type: "uint256",
internalType: "uint256",
},
{
name: "maxFeePerGas",
type: "uint256",
internalType: "uint256",
},
{
name: "maxPriorityFeePerGas",
type: "uint256",
internalType: "uint256",
},
{
name: "paymasterAndData",
type: "bytes",
internalType: "bytes",
},
{name: "signature", type: "bytes", internalType: "bytes"},
],
},
{name: "userOpHash", type: "bytes32", internalType: "bytes32"},
{
name: "missingAccountFunds",
type: "uint256",
internalType: "uint256",
},
],
outputs: [
{
name: "validationData",
type: "uint256",
internalType: "uint256",
},
],
stateMutability: "nonpayable",
},
{
type: "event",
name: "ModularAccountInitialized",
inputs: [
{
name: "entryPoint",
type: "address",
indexed: true,
internalType: "contract IEntryPoint",
},
],
anonymous: false,
},
{
type: "event",
name: "PluginInstalled",
inputs: [
{
name: "plugin",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "manifestHash",
type: "bytes32",
indexed: false,
internalType: "bytes32",
},
{
name: "dependencies",
type: "bytes21[]",
indexed: false,
internalType: "FunctionReference[]",
},
],
anonymous: false,
},
{
type: "event",
name: "PluginUninstalled",
inputs: [
{
name: "plugin",
type: "address",
indexed: true,
internalType: "address",
},
{
name: "onUninstallSucceeded",
type: "bool",
indexed: true,
internalType: "bool",
},
],
anonymous: false,
},
{
type: "event",
name: "Upgraded",
inputs: [
{
name: "implementation",
type: "address",
indexed: true,
internalType: "address",
},
],
anonymous: false,
},
{type: "error", name: "AlreadyInitialized", inputs: []},
{type: "error", name: "AlreadyInitializing", inputs: []},
{type: "error", name: "AlwaysDenyRule", inputs: []},
{type: "error", name: "ArrayLengthMismatch", inputs: []},
{
type: "error",
name: "DuplicateHookLimitExceeded",
inputs: [
{name: "selector", type: "bytes4", internalType: "bytes4"},
{
name: "hook",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
{
type: "error",
name: "DuplicatePreRuntimeValidationHookLimitExceeded",
inputs: [
{name: "selector", type: "bytes4", internalType: "bytes4"},
{
name: "hook",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
{
type: "error",
name: "DuplicatePreUserOpValidationHookLimitExceeded",
inputs: [
{name: "selector", type: "bytes4", internalType: "bytes4"},
{
name: "hook",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
{
type: "error",
name: "Erc4337FunctionNotAllowed",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
{
type: "error",
name: "ExecFromPluginExternalNotPermitted",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "target", type: "address", internalType: "address"},
{name: "value", type: "uint256", internalType: "uint256"},
{name: "data", type: "bytes", internalType: "bytes"},
],
},
{
type: "error",
name: "ExecFromPluginNotPermitted",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "selector", type: "bytes4", internalType: "bytes4"},
],
},
{
type: "error",
name: "ExecutionFunctionAlreadySet",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
{
type: "error",
name: "IPluginFunctionNotAllowed",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
{type: "error", name: "InterfaceNotAllowed", inputs: []},
{type: "error", name: "InvalidDependenciesProvided", inputs: []},
{type: "error", name: "InvalidPluginManifest", inputs: []},
{
type: "error",
name: "MissingPluginDependency",
inputs: [
{name: "dependency", type: "address", internalType: "address"},
],
},
{
type: "error",
name: "NativeFunctionNotAllowed",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
{
type: "error",
name: "NativeTokenSpendingNotPermitted",
inputs: [{name: "plugin", type: "address", internalType: "address"}],
},
{type: "error", name: "NullFunctionReference", inputs: []},
{
type: "error",
name: "PluginAlreadyInstalled",
inputs: [{name: "plugin", type: "address", internalType: "address"}],
},
{
type: "error",
name: "PluginCallDenied",
inputs: [{name: "plugin", type: "address", internalType: "address"}],
},
{
type: "error",
name: "PluginDependencyViolation",
inputs: [{name: "plugin", type: "address", internalType: "address"}],
},
{
type: "error",
name: "PluginInstallCallbackFailed",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "revertReason", type: "bytes", internalType: "bytes"},
],
},
{
type: "error",
name: "PluginInterfaceNotSupported",
inputs: [{name: "plugin", type: "address", internalType: "address"}],
},
{
type: "error",
name: "PluginNotInstalled",
inputs: [{name: "plugin", type: "address", internalType: "address"}],
},
{
type: "error",
name: "PluginUninstallCallbackFailed",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "revertReason", type: "bytes", internalType: "bytes"},
],
},
{
type: "error",
name: "PostExecHookReverted",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "functionId", type: "uint8", internalType: "uint8"},
{name: "revertReason", type: "bytes", internalType: "bytes"},
],
},
{
type: "error",
name: "PreExecHookReverted",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "functionId", type: "uint8", internalType: "uint8"},
{name: "revertReason", type: "bytes", internalType: "bytes"},
],
},
{
type: "error",
name: "PreRuntimeValidationHookFailed",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "functionId", type: "uint8", internalType: "uint8"},
{name: "revertReason", type: "bytes", internalType: "bytes"},
],
},
{
type: "error",
name: "RuntimeValidationFunctionAlreadySet",
inputs: [
{name: "selector", type: "bytes4", internalType: "bytes4"},
{
name: "validationFunction",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
{
type: "error",
name: "RuntimeValidationFunctionMissing",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
{
type: "error",
name: "RuntimeValidationFunctionReverted",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "functionId", type: "uint8", internalType: "uint8"},
{name: "revertReason", type: "bytes", internalType: "bytes"},
],
},
{type: "error", name: "UnauthorizedCallContext", inputs: []},
{
type: "error",
name: "UnexpectedAggregator",
inputs: [
{name: "plugin", type: "address", internalType: "address"},
{name: "functionId", type: "uint8", internalType: "uint8"},
{name: "aggregator", type: "address", internalType: "address"},
],
},
{
type: "error",
name: "UnrecognizedFunction",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
{type: "error", name: "UpgradeFailed", inputs: []},
{type: "error", name: "UserOpNotFromEntryPoint", inputs: []},
{
type: "error",
name: "UserOpValidationFunctionAlreadySet",
inputs: [
{name: "selector", type: "bytes4", internalType: "bytes4"},
{
name: "validationFunction",
type: "bytes21",
internalType: "FunctionReference",
},
],
},
{
type: "error",
name: "UserOpValidationFunctionMissing",
inputs: [{name: "selector", type: "bytes4", internalType: "bytes4"}],
},
],
bytecode:
"0x60806040526004361015610026575b36156100245761001c61232d565b602081519101f35b005b60003560e01c806223de291461017557806301ffc9a714610170578063150b7a021461016b57806334fcd5be1461016657806338997b11146101615780633a0cac561461015c5780633a871cdd146101575780634f1ef2861461015257806352d1902d1461014d578063642f9dd4146101485780638d1121841461014357806394ed11e71461013e578063b0d691fe14610139578063b61d27f614610134578063bc197c811461012f578063c1a221f31461012a578063c5f0e8d114610125578063ceaf130914610120578063d087d2881461011b578063e69e24a8146101165763f23a6e610361000e576116ef565b61156b565b61149e565b61143e565b611325565b611199565b6110f5565b6110bf565b61107b565b610ed5565b610da4565b610b86565b610acc565b61099b565b610873565b6107dd565b610576565b61044a565b6102d6565b6102a5565b6101cb565b6001600160a01b0381160361018b57565b600080fd5b359061019b8261017a565b565b9181601f8401121561018b5782359167ffffffffffffffff831161018b576020838186019501011161018b57565b3461018b5760c036600319011261018b576101e760043561017a565b6101f260243561017a565b6101fd60443561017a565b67ffffffffffffffff60843581811161018b5761021e90369060040161019d565b505060a43590811161018b5761023890369060040161019d565b505061002461028d6102776001600160e01b0319600035166001600160e01b031916600052600080516020615e60833981519152602052604060002090565b6040519061028482611826565b60008252612424565b906126ba565b6001600160e01b031981160361018b57565b3461018b57602036600319011261018b5760206102cc6004356102c781610293565b6118a0565b6040519015158152f35b3461018b57608036600319011261018b576102f260043561017a565b6102fd60243561017a565b60643567ffffffffffffffff811161018b5761031d90369060040161019d565b505061035c61028d6102776001600160e01b0319600035166001600160e01b031916600052600080516020615e60833981519152602052604060002090565b6020604051630a85bd0160e11b8152f35b9181601f8401121561018b5782359167ffffffffffffffff831161018b576020808501948460051b01011161018b57565b60005b8381106103b15750506000910152565b81810151838201526020016103a1565b906020916103da8151809281855285808601910161039e565b601f01601f1916010190565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b84831061041c5750505050505090565b909192939495848061043a600193603f198682030187528a516103c1565b980193019301919493929061040c565b60208060031936011261018b5760043567ffffffffffffffff811161018b5761047790369060040161036d565b91610480612580565b93909161048c8261198d565b9360005b8381106104b5576104b1866104a589886126ba565b604051918291826103e6565b0390f35b806105066104c660019387866119ed565b356104d08161017a565b856104dc8489886119ed565b01356105006104f96104ef868b8a6119ed565b6040810190611a1e565b3691611a51565b91612604565b6105108289611a88565b5261051b8188611a88565b5001610490565b606060031982011261018b5760043561053a8161017a565b91602435916044359067ffffffffffffffff821161018b5761055e9160040161019d565b9091565b9060206105739281815201906103c1565b90565b61057f36610522565b9192831515806107c9575b80610785575b61075457306001600160a01b0382161461069e576105fc816105e4336001600160a01b03166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0305602052604060002090565b906001600160a01b0316600052602052604060002090565b805460ff8116156107205760081c60ff16908115610717575b81156106da575b505b1561069e576338997b1160e01b600052600080516020615e608339815191526020526104b193610692929161068c916105006106827f366b46b479d417a249e7f56f296f035e13c924e69b7ed63bca6e286fe8e383b161067c61188d565b90612424565b9590973691611a51565b926126ba565b60405191829182610562565b916106d6916040519485947f808e3b3c0000000000000000000000000000000000000000000000000000000086523360048701611abd565b0390fd5b610711915061070a9060016106ef8787611aec565b9101906001600160e01b031916600052602052604060002090565b5460ff1690565b3861061c565b84159150610615565b505061074f61070a336001600160a01b0316600052600080516020615e80833981519152602052604060002090565b61061e565b6040517f2e36404e000000000000000000000000000000000000000000000000000000008152336004820152602490fd5b506107c46107c06107b6336001600160a01b0316600052600080516020615e80833981519152602052604060002090565b5460081c60ff1690565b1590565b610590565b5034841161058a565b600091031261018b57565b3461018b57600036600319011261018b576107f66127d9565b805160005b81811061085157826040518091602080830160208452825180915260206040850193019160005b82811061083157505050500390f35b83516001600160a01b031685528695509381019392810192600101610822565b8061085e60019285611a88565b5160601c61086c8286611a88565b52016107fb565b3461018b5760031960603682011261018b5760043567ffffffffffffffff811161018b576101608160040192823603011261018b57604435906001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789163303610971576104b1926108f96108f3606461093f940183611a1e565b9061293c565b906001610927836001600160e01b031916600052600080516020615e60833981519152602052604060002090565b01549060ff8260a81c16926024359260581b9061297b565b9080610957575b506040519081529081906020820190565b600080808093338219f15061096a611b18565b5038610946565b60046040517fea800da5000000000000000000000000000000000000000000000000000000008152fd5b604036600319011261018b576004356109b38161017a565b60243567ffffffffffffffff811161018b576109d390369060040161019d565b9091307f0000000000000000000000000046000000000151008789797b54fdb500e2a61e14610abe576001600160a01b0390610a0d612580565b929091166352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9384602060016004601d865afa5103610ab0578082600096817fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8980a255610a8b575b84610a8885856126ba565b80f35b908185926040519788378638925af415610aa6578380610a7d565b50503d90823e3d90fd5b6355299b496001526004601dfd5b639f03a0266000526004601cfd5b3461018b57600036600319011261018b57307f0000000000000000000000000046000000000151008789797b54fdb500e2a61e03610abe5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b60208082019080835283518092528060408094019401926000905b838210610b5857505050505090565b845180516001600160581b031990811688529084015116868401529485019493820193600190910190610b49565b3461018b5760208060031936011261018b57610bce600435610ba781610293565b6001600160e01b031916600052600080516020615e60833981519152602052604060002090565b6005810190610bdc826128a2565b91610be9600783016128a2565b938351855180936000905b838210610d64575050610c0690612b53565b94600094600601855b838110610c8357505050506000945b828610610c3657838552604051806104b18782610b2e565b90919260018091610c77610c5b610c4d8a87611a88565b516001600160581b03191690565b86610c66848b611a88565b5101906001600160581b0319169052565b01950194929190610c1e565b610cba610cb5610c9b610c4d84879d999a9b9d611a88565b84906001600160581b031916600052602052604060002090565b6128a2565b8051908115610d3c57906000915b818310610ce1575050506001905b019795949397610c0f565b90919a600181610d328d8f610c6685968f92610c4d610d2c918f610d0c8f610c4d90610d2693611a88565b610d16868a611a88565b51906001600160581b0319169052565b8b611a88565b93611a88565b019b019190610cc8565b50509760018091610d5d610d53610c4d8d88611a88565b610d16838d611a88565b0198610cd6565b9091600190610d95610d8f610d82610c4d878d9e9a9b9c999e611a88565b6001600160581b03191690565b84614800565b01920190979295949397610bf4565b3461018b57602036600319011261018b576104b1600435610dc481610293565b610e4d60405191610dd48361179c565b60008352610e3f6002610e37602086019360008552610ba7604088019560008752610dfe83612bb6565b15610e8b573089525b610e3f6001610e37856001600160e01b031916600052600080516020615e60833981519152602052604060002090565b015460581b90565b6001600160581b0319169052565b60405191829182919091604060608201936001600160a01b038151168352816020820151916001600160581b03198093166020860152015116910152565b610ed06001600160a01b03610ec1856001600160e01b031916600052600080516020615e60833981519152602052604060002090565b54166001600160a01b03168a52565b610e07565b602036600319011261018b5760043567ffffffffffffffff811161018b57610f0190369060040161019d565b610f0b818361293c565b91610f776107c061070a3360601b6bffffffffffffffffffffffff191660a087901c6bffffffff000000000000000016175b67ffffffffffffffff19166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0304602052604060002090565b61103a5790610f8591612f46565b610fb0826001600160e01b031916600052600080516020615e60833981519152602052604060002090565b610fcb82610fc583546001600160a01b031690565b92612424565b9290936001600160a01b03831615611016575090610feb610ff192612f8d565b90612fc7565b91610ffa612fd9565b921561100e576104b19291610692916126ba565b825160208401fd5b60405163fcfc5aad60e01b81526001600160e01b0319919091166004820152602490fd5b6040517fe85f2f3e0000000000000000000000000000000000000000000000000000000081523360048201526001600160e01b031984166024820152604490fd5b3461018b57600036600319011261018b5760206040516001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789168152f35b6104b161068c6110e16110d136610522565b9491610500610682949294612580565b6040519182916020835260208301906103c1565b3461018b5760a036600319011261018b5761111160043561017a565b61111c60243561017a565b67ffffffffffffffff60443581811161018b5761113d90369060040161036d565b505060643581811161018b5761115790369060040161036d565b505060843590811161018b5761117190369060040161019d565b50506104b161117e611b48565b6040516001600160e01b031990911681529081906020820190565b3461018b57606036600319011261018b576004356111b68161017a565b67ffffffffffffffff9060243582811161018b576111d890369060040161019d565b9260443590811161018b576111f190369060040161019d565b906111fa612580565b949093611205611b95565b6001600160a01b038316815296600091816112c0575b50501561124f575b509061123f918560606100249701805115611244575b5061310f565b6126ba565b600019905238611239565b9060006001600160a01b039392600460405180968193630c77631360e41b8352165afa9586156112bb576100249661123f94600091611298575b50602082015295509091611223565b6112b591503d806000833e6112ad8183611842565b810190611f7c565b38611289565b6120f2565b6112cc91810190611c45565b8051805180611301575b5050806112f36112eb60206040940151151590565b15158a840152565b01516060880152388061121b565b611315929350602080918301019101611f7c565b60208801526001906040386112d6565b3461018b57608036600319011261018b576004356113428161017a565b67ffffffffffffffff60443581811161018b5761136390369060040161019d565b909160643590811161018b5761137d90369060040161036d565b909361139461138a612580565b9590943691611a51565b9161139e81611975565b956113ac6040519788611842565b818752602091602088019060051b82019136831161018b57905b8282106113e057610024888861123f8c8a6024358b613923565b81356001600160581b03198116810361018b5781529083019083016113c6565b90815180825260208080930193019160005b828110611420575050505090565b83516001600160581b03191685529381019392810192600101611412565b3461018b57602036600319011261018b57611490611461600435610ba781610293565b6104b161147c6004611475600385016128a2565b93016128a2565b604051938493604085526040850190611400565b908382036020850152611400565b3461018b57600080600319360112611568576040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201528160248201526020816044816001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789165afa9081156112bb57829161152d575b604051828152602090f35b90506020813d602011611560575b8161154860209383611842565b8101031261155c576104b191505138611522565b5080fd5b3d915061153b565b80fd5b3461018b57604036600319011261018b5767ffffffffffffffff60043581811161018b5761159d90369060040161036d565b9160243590811161018b576115b690369060040161019d565b907fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0300549360ff8560081c1615809581966116e1575b81156116c1575b5015611697577fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0300805460ff191660011790556116329385611664576121a6565b61163857005b7fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0300805461ff0019169055005b7fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0300805461ff0019166101001790556121a6565b60046040517f0dc149f0000000000000000000000000000000000000000000000000000000008152fd5b303b159150816116d3575b50386115f2565b6001915060ff1614386116cc565b600160ff82161091506115eb565b3461018b5760a036600319011261018b5761170b60043561017a565b61171660243561017a565b60843567ffffffffffffffff811161018b5761173690369060040161019d565b505061177561028d6102776001600160e01b0319600035166001600160e01b031916600052600080516020615e60833981519152602052604060002090565b602060405163f23a6e6160e01b8152f35b634e487b7160e01b600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176117b857604052565b611786565b610180810190811067ffffffffffffffff8211176117b857604052565b6040810190811067ffffffffffffffff8211176117b857604052565b67ffffffffffffffff81116117b857604052565b60a0810190811067ffffffffffffffff8211176117b857604052565b6020810190811067ffffffffffffffff8211176117b857604052565b90601f8019910116810190811067ffffffffffffffff8211176117b857604052565b6040519061019b826117bd565b67ffffffffffffffff81116117b857601f01601f191660200190565b6040519061189a82611826565b60008252565b6001600160e01b03199081811691821461196e576301ffc9a760e01b821491821561195d575b821561194d575b8215611923575b5081156118df575090565b61191d91506001600160e01b0319166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0306602052604060002090565b54151590565b7f4e2312e000000000000000000000000000000000000000000000000000000000149150386118d4565b6223de2960e01b811492506118cd565b630a85bd0160e11b811492506118c6565b5050600090565b67ffffffffffffffff81116117b85760051b60200190565b9061199782611975565b6119a46040519182611842565b82815280926119b5601f1991611975565b019060005b8281106119c657505050565b8060606020809385010152016119ba565b634e487b7160e01b600052603260045260246000fd5b9190811015611a0f5760051b81013590605e198136030182121561018b570190565b6119d7565b356105738161017a565b903590601e198136030182121561018b570180359067ffffffffffffffff821161018b5760200191813603831361018b57565b929192611a5d82611871565b91611a6b6040519384611842565b82948184528183011161018b578281602093846000960137010152565b8051821015611a0f5760209160051b010190565b908060209392818452848401376000828201840152601f01601f1916010190565b909261057395936080936001600160a01b03809216845216602083015260408201528160608201520191611a9c565b6001600160e01b03199035818116939260048110611b0957505050565b60040360031b82901b16169150565b3d15611b43573d90611b2982611871565b91611b376040519384611842565b82523d6000602084013e565b606090565b61019b90611b866102776001600160e01b0319600035166001600160e01b031916600052600080516020615e60833981519152602052604060002090565b63bc197c8160e01b93916126ba565b604051906080820182811067ffffffffffffffff8211176117b85760405260008281815260405190611bc6826117bd565b60609182815282602082015282604082015282808201528360808201528360a08201528260c08201528260e08201528261010082015282610120820152826101408201528261016082015260208201528260408201520152565b9080601f8301121561018b5781602061057393359101611a51565b8015150361018b57565b9060208282031261018b57813567ffffffffffffffff9283821161018b570160608183031261018b5760405192611c7b8461179c565b813590811161018b57604092611c92918301611c20565b83526020810135611ca281611c3b565b60208401520135604082015290565b9080601f8301121561018b57815190602091611ccc81611975565b93611cda6040519586611842565b81855260208086019260051b82010192831161018b57602001905b828210611d03575050505090565b8380918351611d1181610293565b815201910190611cf5565b519061019b82611c3b565b81601f8201121561018b57805191602091611d4184611975565b93604092611d526040519687611842565b818652848087019260051b8401019381851161018b57858401925b858410611d7e575050505050505090565b835167ffffffffffffffff9081811161018b57860191606080601f19858803011261018b57845190611daf8261179c565b8a850151611dbc8161017a565b825285850151611dcb81611c3b565b8b83015284015192831161018b57611dea868b80969581960101611cb1565b85820152815201930192611d6d565b919082606091031261018b57604051611e118161179c565b80928051600581101561018b578252602081015160ff8116810361018b576020830152604090810151910152565b9080601f8301121561018b578151916020611e5984611975565b93604093611e6a6040519687611842565b818652828087019260071b8501019381851161018b578301915b848310611e945750505050505090565b60808383031261018b57836080918751611ead816117da565b8551611eb881610293565b8152611ec685848801611df9565b83820152815201920191611e84565b81601f8201121561018b578051906020611eee83611975565b93604090611eff6040519687611842565b848652828601918360e08097028601019482861161018b578401925b858410611f2c575050505050505090565b868484031261018b578487918351611f438161179c565b8651611f4e81610293565b8152611f5c86848901611df9565b83820152611f6d8660808901611df9565b85820152815201930192611f1b565b60208183031261018b57805167ffffffffffffffff9182821161018b57016101808184031261018b57611fad611864565b92815183811161018b5781611fc3918401611cb1565b8452602082015183811161018b5781611fdd918401611cb1565b6020850152604082015183811161018b5781611ffa918401611cb1565b6040850152606082015183811161018b5781612017918401611cb1565b606085015261202860808301611d1c565b608085015261203960a08301611d1c565b60a085015260c082015183811161018b5781612056918401611d27565b60c085015260e082015183811161018b5781612073918401611e3f565b60e08501526101008083015184811161018b5782612092918501611e3f565b908501526101208083015184811161018b57826120b0918501611e3f565b908501526101408083015184811161018b57826120ce918501611e3f565b90850152610160928383015190811161018b576120eb9201611ed5565b9082015290565b6040513d6000823e3d90fd5b81601f8201121561018b5780359160209161211884611975565b936121266040519586611842565b808552838086019160051b8301019280841161018b57848301915b8483106121515750505050505090565b823567ffffffffffffffff811161018b57869161217384848094890101611c20565b815201920191612141565b60405161218a81611826565b60008152906000368137565b9190811015611a0f5760051b0190565b9190939281019060408183031261018b5767ffffffffffffffff91813583811161018b5782019281601f8501121561018b578335936020906121e786611975565b956121f56040519788611842565b808752828088019160051b8301019185831161018b5783809101915b83831061231d575050505083013590811161018b5761223092016120fe565b9080518514801590612312575b6122e85761224961217e565b9160005b8681106122ac57505050505090506001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789167f9f08b8dca66d3393166c297eebdbe382963a15cce40f3a2f4bf32378553fe65a600080a2565b806122e2856122c66122c16001958c8b612196565b611a14565b6122d08488611a88565b516122db8588611a88565b5191613923565b0161224d565b60046040517fa24a13a6000000000000000000000000000000000000000000000000000000008152fd5b50815185141561223d565b8235815291810191849101612211565b6001600160a01b03337f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27898216146123dd576123666140d1565b905b600080356001600160e01b031916808252600080516020615e608339815191526020526040909120906123a282546001600160a01b031690565b928316156110165750610feb916123bc846123c493612424565b939094612f8d565b916123cd612fd9565b921561100e5790610573916126ba565b6123e636612eef565b90612368565b634e487b7160e01b600052601160045260246000fd5b906001820180921161241057565b6123ec565b60001981019190821161241057565b9160609183549260ff808560a81c169460a01c1661256e575b80519484156125655760ff60015b16860180961161241057939194906124628261198d565b95869161246e8461198d565b9687946005820183519060005b8281106124c75750505061019b96612495575b505061435b565b6124ad6124a760076124bf94016128a2565b91612415565b906124b88287611a88565b5284611a88565b50388061248e565b9092959894975060019193966001600160581b03196124e6838b611a88565b51168260048061250a84899061ffff191660005260205261fffc6040600020541690565b1614612524575b50505001918996939794918b969361247b565b61254b610cb56125519360068d01906001600160581b031916600052602052604060002090565b92611a88565b5261255c818d611a88565b508b3882612511565b60ff600061244b565b5061257b600585016128a2565b61243d565b60405161258c81611826565b600081526001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27891633036125f1575b600080356001600160e01b0319168152600080516020615e608339815191526020526040902061055e9190612424565b5061055e6125fd6140d1565b90506125c1565b92919061261084614456565b61263e5790600092938392602083519301915af19061262d611b18565b911561263557565b50602081519101fd5b6024846001600160a01b03604051917ffa06f06e000000000000000000000000000000000000000000000000000000008352166004820152fd5b60409060ff610573949316815281602082015201906103c1565b60ff61057394936001600160a01b0360609416835216602082015281604082015201906103c1565b908151805b6126c857505050565b600019016126d68184611a88565b518051906000905b8282106126ee57505050806126bf565b93612714612705610c4d84889a969a999599611a88565b9060ff8260601c9260581c1690565b9490976001600160a01b0389169661272c8385611a88565b5198883b1561018b57604098895190631128186d60e01b825281808b60049e8f83019161275892612678565b03815a6000948591f190816127c0575b506127ab578a8a6106d68b8b61277c611b18565b91519485947f665b77fc0000000000000000000000000000000000000000000000000000000086528501612692565b929650939750939750600191955001906126de565b806127cd6127d3926117f6565b806107d2565b38612768565b60016000818152600080516020615ea08339815191526020527f94cfd67f685607e46dacbf75e6a3a5cc7e0a77a9dde0d0269384d8135edf6083546040519392805b612832575b50506001810160051b83016040528252565b90918183161580612899575b156128935761fffe198316908201600581901b8601829052928291906002161561288a5761288390600052600080516020615ea0833981519152602052604060002090565b549161281b565b5060009161281b565b91612820565b5082151561283e565b906000600192600182528060205260408220549084604051955b6128d4575b5050506001810160051b83016040528252565b9091928184161580612933575b1561292d5761fffe198416908201600581901b8701829052938291906002161561292457612919908490600052602052604060002090565b54915b9291926128bc565b5060009161291c565b926128c1565b508315156128e1565b919060048110612950576105739192611aec565b61295c60249184611aec565b6001600160e01b03196040519163fcfc5aad60e01b8352166004820152fd5b60009390926001600160581b0319831615612b18579061299a91614573565b916000946129f2575b50816129ce6129d9926127056129de9560200163af87348360e01b6001600160e01b03825116179052565b60ff16602483015291565b614697565b91156129ee579061057391614755565b5090565b612a2b919450612a256003916001600160e01b031916600052600080516020615e60833981519152602052604060002090565b016128a2565b928351936000905b858210612a4057506129a3565b9093612a67612a52610c4d8785611a88565b600160591b906001600160581b031916111590565b612b0757612a7b612705610c4d8785611a88565b60ff81166024870152909190612a918387614697565b926001600160a01b03841660018111612abb57505050600191612ab3916146b8565b940190612a33565b6040517f6655309e0000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015260ff939093166024840152166044820152606490fd5b6004604051636756835b60e11b8152fd5b6040517f6596ccb10000000000000000000000000000000000000000000000000000000081526001600160e01b031985166004820152602490fd5b90612b5d82611975565b604090612b6d6040519182611842565b8381528093612b7e601f1991611975565b019160009060005b848110612b94575050505050565b6020908251612ba2816117da565b848152828581830152828701015201612b86565b6001600160e01b0319167f3a871cdd000000000000000000000000000000000000000000000000000000008114908115612ec5575b8115612e9b575b8115612e8a575b8115612e60575b8115612e4f575b8115612e25575b8115612e14575b8115612dea575b8115612dc0575b8115612d96575b8115612d85575b8115612d5b575b8115612d31575b8115612d07575b8115612cdd575b8115612cb3575b8115612ca3575b8115612c92575b8115612c81575b8115612c73575090565b63bc197c8160e01b91501490565b63f23a6e6160e01b81149150612c69565b630a85bd0160e11b81149150612c62565b6223de2960e01b81149150612c5b565b7f3a0cac560000000000000000000000000000000000000000000000000000000081149150612c54565b7fceaf13090000000000000000000000000000000000000000000000000000000081149150612c4d565b7f642f9dd40000000000000000000000000000000000000000000000000000000081149150612c46565b7f8d1121840000000000000000000000000000000000000000000000000000000081149150612c3f565b7fe69e24a80000000000000000000000000000000000000000000000000000000081149150612c38565b6338997b1160e01b81149150612c31565b7f94ed11e70000000000000000000000000000000000000000000000000000000081149150612c2a565b7f34fcd5be0000000000000000000000000000000000000000000000000000000081149150612c23565b7fb61d27f60000000000000000000000000000000000000000000000000000000081149150612c1c565b63278f794360e11b81149150612c15565b7f52d1902d0000000000000000000000000000000000000000000000000000000081149150612c0e565b6301ffc9a760e01b81149150612c07565b7fc1a221f30000000000000000000000000000000000000000000000000000000081149150612c00565b63c5f0e8d160e01b81149150612bf9565b7fd087d2880000000000000000000000000000000000000000000000000000000081149150612bf2565b7fb0d691fe0000000000000000000000000000000000000000000000000000000081149150612beb565b61057360c460405180936000602083015260006024830152336044830152346064830152608060848301528060a4830152806000848401376000838284010152601f801991011681010360a4810184520182611842565b9061057390612f7f60405193849260006020850152600060248501523360448501523460648501526080608485015260a4840191611a9c565b03601f198101835282611842565b8051612fc15750612f9d36611871565b612faa6040519182611842565b368152366000602083013760006020368301015290565b60a40190565b600091829182602083519301915af190565b604051903d8252601f19603f3d840101166040523d6000602084013e565b906040516130048161180a565b8092805460ff81161515835260ff60209160081c16151560208401526001906001830154604085015260028301906040519283602084549182815201936000526020600020926000905b828210613078575050505050918161306c6003936080950382611842565b60608501520154910152565b845460581b6001600160581b031916865294850194938301939083019061304e565b600090818155600182600183015560028201805490848155816130c1575b50505060030155565b845260208420908101905b818110156130b85784815582016130cc565b916020610573938181520191611a9c565b6040906001600160a01b03610573949316815281602082015201906103c1565b916131446107c061313f61312a86516001600160a01b031690565b60601b6bffffffffffffffffffffffff191690565b61484f565b6138285761318a61318561315f85516001600160a01b031690565b6001600160a01b0316600052600080516020615e80833981519152602052604060002090565b612ff7565b9160209260208501908151946131a96107c06040978885015190614c08565b6138185760808201516137c45760608092015180519060005b828110613772575050506131e86131e361315f89516001600160a01b031690565b61309a565b6131f061217e565b610160808551015151908260005b8b868c8a878510613717575050505050505050610140808551015151908560005b848c8583106136f25750505050505061012090818551015151918960005b8785821061369d575050505050506101008084510151519060005b82811061367b5750505060e08084510151519060005b82811061362c57505050825161328a6107c06080830151151590565b61350a575b5050606082510151519060005b8281106134a25750505083815101515160005b818110613465575050805151519060005b8281106133f7575050506001916132f06132e46132e487516001600160a01b031690565b6001600160a01b031690565b906060860151823b1561018b5761332093600080948851809781968295638a91b0e360e01b8452600484016130de565b0393f190816133e4575b506133d55750613338611b18565b906133486107c082850151151590565b6133905750506133656132e46000925b516001600160a01b031690565b901515907feb7551bad8fd10038dee62a958c2b6f45624499dc800ff8936bb0a4904bdd2fe600080a3565b6106d66133a484516001600160a01b031690565b91519283927f6b601a7c000000000000000000000000000000000000000000000000000000008452600484016130ef565b9161336591506132e490613358565b806127cd6133f1926117f6565b3861332a565b8061345361341a61340c600194865151611a88565b516001600160e01b03191690565b6001600160e01b0319166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0306602052604060002090565b61345d8154612415565b9055016132c0565b8061349c61347f610ba761340c6001958b89510151611a88565b73ffffffffffffffffffffffffffffffffffffffff198154169055565b016132af565b6001906135046134fa610f3d6134bf8c516001600160a01b031690565b6134d061340c86898c510151611a88565b6bffffffff00000000000000009060a01c16906bffffffffffffffffffffffff199060601b161790565b805460ff19169055565b0161329c565b60c080910151519060005b89898785841061352957505050505061328f565b61358a6135526132e461354387896135ac96510151611a88565b5195516001600160a01b031690565b6001600160a01b03166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0305602052604060002090565b83516001600160a01b03166001600160a01b0316600052602052604060002090565b805460ff191681559180870151156135d3575050805461ff00191690556001905b01613515565b01805151906000906001809401915b8381106135f65750505050506001906135cd565b806136266134fa61360c61340c89958751611a88565b86906001600160e01b031916600052602052604060002090565b016135e2565b806136756001613656610ba76136478396888d510151611a88565b51516001600160e01b03191690565b0174ffffffffffffffffffffffffffffffffffffffffff198154169055565b0161326e565b806136976002613656610ba7613647600196888d510151611a88565b01613258565b6001926136e4866136b585886136ea96510151611a88565b51926136de8b6136cd86516001600160e01b03191690565b95015191516001600160a01b031690565b90614d34565b906150ab565b018a9061323d565b61370961370f926136b58588600198510151611a88565b9061504d565b01869061321f565b60019561376a9461375e613732888b61376496510151611a88565b51946136cd8461374a88516001600160e01b03191690565b9888015185516001600160a01b03166136de565b90614e2b565b91614f13565b0183906131fe565b8060036137b161378a612705610c4d60019688611a88565b506001600160a01b0316600052600080516020615e80833981519152602052604060002090565b016137bc8154612415565b9055016131c2565b6106d6866137d989516001600160a01b031690565b90517fad3b36340000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b60048651635f1b910f60e11b8152fd5b6106d661383c84516001600160a01b031690565b6040517f038e01780000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201529081906024820190565b81519167ffffffffffffffff83116117b8576801000000000000000083116117b85781548383558084106138e1575b5060208091019160005260206000209060005b8481106138cc575050505050565b835160581c83820155928101926001016138be565b60008360005284602060002092830192015b8281106139015750506138ab565b8181556001016138f3565b604090610573939281528160208201520190611400565b939091926139456107c06bffffffffffffffffffffffff198760601b16615109565b614097576139556107c086614456565b61405d576001600160a01b03851690604093845195630c77631360e41b875260009060049782818a81895afa9081156112bb578391614043575b5061399d6107c08583614c08565b61403457845160209081830190815151810361402557855b818110613f3357505050888201805151908c865b838110613f12575050505060608201805151908c865b838110613ef05750505050608082015115613e1f57613a2e613a218c6001600160a01b0316600052600080516020615e80833981519152602052604060002090565b805460ff19166001179055565b60e08201805151908c865b838110613de757505050506101008201805151908c865b838110613da75750505050613a6361217e565b906101208301805151908d875b838110613d8457505050506101408301805151908d875b838110613d445750505050610160830191825151928d875b8d868210613cf557505092505050869150825151855b818110613c3657505091613b2960a0926002613b23868a6001613afb613b309a6001600160a01b0316600052600080516020615e80833981519152602052604060002090565b01556001600160a01b0316600052600080516020615e80833981519152602052604060002090565b0161387c565b0151151590565b613bf5575b843b1561155c5790613b59918751809381926306d61fe760e41b83528b8301610562565b038183885af19081613be2575b50613ba85786866106d687613b79611b18565b90519384937fe838e76100000000000000000000000000000000000000000000000000000000855284016130ef565b919450919450613bdd7f32d6790d50f8334621a74f0f62e534ef3f4f98133225305074e99e7ce4d8917f93519283928361390c565b0390a2565b806127cd613bef926117f6565b38613b66565b613c31613c228a6001600160a01b0316600052600080516020615e80833981519152602052604060002090565b805461ff001916610100179055565b613b35565b91509150613c4861340c828551611a88565b6001600160e01b03198082169063f23b1ed760e01b8214918215613ceb575b5050613cc35790613cad6001926001600160e01b0319166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0306602052604060002090565b613cb78154612402565b90550186918c91613ab5565b8b8b517fd02b530d000000000000000000000000000000000000000000000000000000008152fd5b1490503880613c67565b85613d3c91613d3687600196613d0c878a51611a88565b5193613d2e8383613d2588516001600160e01b03191690565b98880151614d34565b940151614e2b565b9161575d565b018e90613a9f565b613d7c600192613d7688613d59858851611a88565b519289613d6e85516001600160e01b03191690565b940151614d34565b906156a5565b018e90613a87565b613d9f600192613d9988613d59858851611a88565b906155dc565b018e90613a70565b613ddf600192613dd98c613dbc858851611a88565b519289613dd185516001600160e01b03191690565b940151614ea0565b90615518565b018d90613a50565b613e17600192613e118c613dfc858851611a88565b519289613d2e85516001600160e01b03191690565b90615454565b018d90613a39565b60c0820180515190855b828110613e3857505050613a2e565b613e43818351611a88565b518c613e8461358a8d6001600160a01b03166000527fade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0305602052604060002090565b805460ff19166001178155918087015115613eb2575050805461ff0019166101001790556001905b01613e29565b018051519089906001809401915b838110613ed4575050505050600190613eac565b80613eea613a2161360c61340c89958751611a88565b01613ec0565b613f0a613a21610f3d6001946134d061340c868951611a88565b018d906139df565b613f2b600192613f2661340c848751611a88565b6152c8565b018d906139c9565b613f43612705610c4d838c611a88565b506001613f70826001600160a01b0316600052600080516020615e80833981519152602052604060002090565b015415613fe657613f916107c0613f8b61340c858851611a88565b836144e0565b613fd757906003613fc46001936001600160a01b0316600052600080516020615e80833981519152602052604060002090565b01613fcf8154612402565b9055016139b5565b8d8d51631794e5f160e01b8152fd5b8c517f9ca2818b0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116818f0190815281906020010390fd5b8b8b51631794e5f160e01b8152fd5b888851635f1b910f60e11b8152fd5b61405791503d8085833e6112ad8183611842565b3861398f565b6040517fb7038f390000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602490fd5b6040517f9d615d050000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602490fd5b6001600160e01b0319600035169061410f6002610e37846001600160e01b031916600052600080516020615e60833981519152602052604060002090565b9161414b6002614140836001600160e01b031916600052600080516020615e60833981519152602052604060002090565b015460a81c60ff1690565b9261415536612eef565b9361422e575b6001600160581b0319811690600160591b82116141f0575015806141be575b6141815750565b6040517fe429f7160000000000000000000000000000000000000000000000000000000081526001600160e01b0319919091166004820152602490fd5b5063c5f0e8d160e01b811415806141df575b8061417a57503033141561417a565b5063278f794360e11b8114156141d0565b61019b9250614228915061421d906127058660200163bfd151c160e01b6001600160e01b03825116179052565b60ff16602486015290565b83615951565b61424d8460200163031fb36160e21b6001600160e01b03825116179052565b600461427f6004612a25856001600160e01b031916600052600080516020615e60833981519152602052604060002090565b9081519160005b838110614296575050505061415b565b6142a3610c4d8284611a88565b600160591b6001600160581b0319821611156142ec57906142e66142e06142d56001949060ff8260601c9260581c1690565b60ff1660248d015290565b8a6158e3565b01614286565b83604051636756835b60e11b8152fd5b60208183031261018b5780519067ffffffffffffffff821161018b570181601f8201121561018b57805161432f81611871565b9261433d6040519485611842565b8184526020828401011161018b57610573916020808501910161039e565b91929092825192831561444f5784511561443e575b61438f8560200163236b075960e11b6001600160e01b03825116179052565b60005b8481106143a157505050505050565b6143ae610c4d8284611a88565b90600160591b6001600160581b031983161115612b07576143f16143eb6143e06001949060ff8260601c9260581c1690565b60ff1660248b015290565b886159bf565b6143fb8185611a88565b5151614408575b01614392565b614423614413612fd9565b80516020809183010191016142fc565b61442d8287611a88565b526144388186611a88565b50614402565b935061444936612eef565b93614370565b5050505050565b61445f81615a2d565b90816144ce575b8161446f575090565b60209150600090604051838101906301ffc9a760e01b825263f23b1ed760e01b6024820152602481526144a18161179c565b5191617530fa6000513d826144c2575b50816144bb575090565b9050151590565b602011159150386144b1565b90506144d981615a56565b1590614466565b6144e981615a2d565b918261452f575b826144fa57505090565b60209250906000916040516001600160e01b0319858201926301ffc9a760e01b8452166024820152602481526144a18161179c565b915061453a81615a56565b15916144f0565b9035601e198236030181121561018b57016020813591019167ffffffffffffffff821161018b57813603831361018b57565b6105739061468392604051938492632238633960e21b602085015260006024850152606060448501526145b9608485016145ac83610190565b6001600160a01b03169052565b602081013560a48501526145e66145d36040830183614541565b61016060c48801526101e4870191611a9c565b6146736146676146106145fc6060860186614541565b6083198a8703810160e48c01529591611a9c565b608085013561010489015260a085013561012489015260c085013561014489015260e0850135610164890152610100850135610184890152614656610120860186614541565b90858a8403016101a48b0152611a9c565b92610140810190614541565b91868403016101c4870152611a9c565b90606483015203601f198101835282611842565b80516020926000928401908390600019f1601f3d1116156120f25760005190565b9065ffffffffffff60a01b65ffffffffffff808460a01c16801561474e575b818460a01c16918215614746575b828116908216111561473a575060a01b16915b8160d01c8160d01c10600014614729576001600160d01b03198216915b6001600160a01b0380911691161791171790565b6001600160d01b0319811691614715565b905060a01b16916146f8565b9150816146e5565b50806146d7565b9065ffffffffffff60a01b65ffffffffffff808460a01c1680156147f9575b818460a01c169182156147f1575b82811690821611156147e5575060a01b16915b8160d01c8160d01c106000146147d4576001600160d01b03198216915b6001600160a01b039182166001036147cd5750501760011790565b1691171790565b6001600160d01b03198116916147b2565b905060a01b1691614795565b915081614782565b5080614774565b61481c82829061ffff1916600052602052604060002054151590565b1561196e5760ff61484661ffff936001939061ffff191660005260205261fffc6040600020541690565b60081c16011690565b61ffff19169061487682600052600080516020615ea0833981519152602052604060002090565b5482158015614960575b614959576001600060015b1561492f575b506000906148b681600052600080516020615ea0833981519152602052604060002090565b549061fffe1980831691908783146148d05750509161488b565b61490b9294969750946149299561fffc6002839694961693169116171791600052600080516020615ea0833981519152602052604060002090565b55600052600080516020615ea0833981519152602052604060002090565b55600190565b6001811615908161494f575b50156149475738614891565b506000925050565b905015153861493b565b5060009150565b508015614880565b919061ffff191691614984838290600052602052604060002090565b549083158015614a3c575b614947576001600060015b15614a11575b506000906149b8818490600052602052604060002090565b549061fffe1980831691908883146149d25750509161499a565b614a01929594979850956149299661fffc60028396949616931691161717918390600052602052604060002090565b5590600052602052604060002090565b60018116159081614a32575b5015614a2957386149a0565b50600093505050565b9050151538614a1d565b50811561498f565b90815180825260208080930193019160005b828110614a64575050505090565b83516001600160e01b03191685529381019392810192600101614a56565b908082519081815260208091019281808460051b8301019501936000915b848310614ab05750505050505090565b9091929394958480614af6600193601f198682030187528a51906060906001600160a01b0383511681528483015115158582015281604080940151938201520190614a44565b9801930193019194939290614aa0565b60051115614b1057565b634e487b7160e01b600052602160045260246000fd5b80516005811015614b10576040918291845260ff60208201511660208501520151910152565b90815180825260208080930193019160005b828110614b6c575050505090565b90919293826080600192614b958389516001600160e01b03198151168452015184830190614b26565b01950193929101614b5e565b90815180825260208080930193019160005b828110614bc1575050505090565b909192938260e0600192614bfc604089516001600160e01b03198151168452614bf08682015187860190614b26565b01516080830190614b26565b01950193929101614bb3565b604051614d2d81612f7f6020820194602086528051614c35610180918260408701526101c0860190614a44565b90614d1a614c83614c6f614c5b602087015195603f1996878b83030160608c0152614a44565b6040870151868a83030160808b0152614a44565b6060860151858983030160a08a0152614a44565b6080850151151560c088015260a0850151151560e0880152614cb660c08601519161010092868a830301848b0152614a82565b92614d07614cf0614cd960e089015196610120978c898b82850301910152614b4c565b938801519361014094888c830301868d0152614b4c565b948701519461016095878b830301878c0152614b4c565b9186015190858984030190890152614b4c565b92015190848303016101a0850152614ba1565b5190201490565b919060018351614d4381614b06565b614d4c81614b06565b14614dee575060028251614d5f81614b06565b614d6881614b06565b14614dc2575060038151614d7b81614b06565b614d8481614b06565b14614db15760049051614d9681614b06565b614d9f81614b06565b14614da957600090565b600160591b90565b6004604051635f1b910f60e11b8152fd5b90604001519080518210614de1576004604051635f1b910f60e11b8152fd5b61057391610c4d91611a88565b9050614e01602061057393015160ff1690565b6bff00000000000000000000009060581b16906bffffffffffffffffffffffff199060601b161790565b919060018351614e3a81614b06565b614e4381614b06565b14614dee575060028251614e5681614b06565b614e5f81614b06565b14614dc2575060038151614e7281614b06565b614e7b81614b06565b14614db15760049051614e8d81614b06565b614e9681614b06565b14614db157600090565b919060018351614eaf81614b06565b614eb881614b06565b14614dee575060028251614ecb81614b06565b614ed481614b06565b14614dc2575060038151614ee781614b06565b614ef081614b06565b14614f025760049051614e8d81614b06565b506b01000000000000000000000090565b614f3e906001600160e01b031916600052600080516020615e60833981519152602052604060002090565b91600091829160058501916001600160581b031980821692831561502257614f668486615a87565b50614f7085615af0565b615019575b1680614faa575b505050505b614f9a575b614f8d5750565b805460ff60a81b19169055565b815460ff60a01b19168255614f86565b614ffc91614ff791614fdd60068a0191614fd88484906001600160581b031916600052602052604060002090565b615a87565b50906001600160581b031916600052602052604060002090565b615af0565b615008575b8080614f7c565b61501191615db6565b503880615001565b60019550614f75565b61503f945060078801935061503992501682615a87565b50615af0565b15614f815760019150614f81565b61507b615094916001600160e01b031916600052600080516020615e60833981519152602052604060002090565b9161503960048401916001600160581b03191682615a87565b61509b5750565b60020160ff60a81b198154169055565b6150d96150f2916001600160e01b031916600052600080516020615e60833981519152602052604060002090565b9161503960038401916001600160581b03191682615a87565b6150f95750565b60010160ff60a81b198154169055565b61ffff19168015801561520a575b615204576001600052600080516020615ea08339815191526020527f94cfd67f685607e46dacbf75e6a3a5cc7e0a77a9dde0d0269384d8135edf608354801580156151fa575b156151b457506001600052600080516020615ea08339815191526020526151af906151a990807f94cfd67f685607e46dacbf75e6a3a5cc7e0a77a9dde0d0269384d8135edf608361490b565b60019055565b600190565b6001600052600080516020615ea08339815191526020529061492990600281177f94cfd67f685607e46dacbf75e6a3a5cc7e0a77a9dde0d0269384d8135edf608361490b565b506001811661515d565b50600090565b5080600052600080516020615ea08339815191526020526040600020541515615117565b9061ffff191690811580156152b2575b61196e57600160005280602052604060002054801580156152a8575b1561527d575081816151af93614a016151a9946001600052602052604060002090565b9160028117615296836001600052602052604060002090565b55600052602052604060002055600190565b506001811661525a565b508160005280602052604060002054151561523e565b91906152f5836001600160e01b031916600052600080516020615e60833981519152602052604060002090565b6001600160a01b0361530e82546001600160a01b031690565b166154195761531c84612bb6565b6153de5761532984615b13565b6153a35761533684615c19565b6153685761019b929350906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b6040517f3cecfc370000000000000000000000000000000000000000000000000000000081526001600160e01b031985166004820152602490fd5b6040517fd69e21110000000000000000000000000000000000000000000000000000000081526001600160e01b031985166004820152602490fd5b6040517fe171c7790000000000000000000000000000000000000000000000000000000081526001600160e01b031985166004820152602490fd5b6040517fec9cbcb30000000000000000000000000000000000000000000000000000000081526001600160e01b031985166004820152602490fd5b61545d82615d0b565b600161548a826001600160e01b031916600052600080516020615e60833981519152602052604060002090565b01906001600160581b0319825460581b166154c857509061019b919060581c74ffffffffffffffffffffffffffffffffffffffffff19825416179055565b6040517fb2a80ddc0000000000000000000000000000000000000000000000000000000081526001600160e01b03199190911660048201526001600160581b031992909216602483015250604490fd5b61552182615d0b565b600261554e826001600160e01b031916600052600080516020615e60833981519152602052604060002090565b01906001600160581b0319825460581b1661558c57509061019b919060581c74ffffffffffffffffffffffffffffffffffffffffff19825416179055565b6040517fe70980510000000000000000000000000000000000000000000000000000000081526001600160e01b03199190911660048201526001600160581b031992909216602483015250604490fd5b906155e681615d0b565b615611826001600160e01b031916600052600080516020615e60833981519152602052604060002090565b916156296001600160581b0319831660038501615d46565b15615656575050600101805460ff8160a81c1615615645575050565b60ff60a81b1916600160a81b179055565b6040517f30d603400000000000000000000000000000000000000000000000000000000081526001600160e01b03199190911660048201526001600160581b0319919091166024820152604490fd5b906156af81615d0b565b6156da826001600160e01b031916600052600080516020615e60833981519152602052604060002090565b916156f26001600160581b0319831660048501615d46565b1561570e575050600201805460ff8160a81c1615615645575050565b6040517fecd75c600000000000000000000000000000000000000000000000000000000081526001600160e01b03199190911660048201526001600160581b0319919091166024820152604490fd5b91615789836001600160e01b031916600052600080516020615e60833981519152602052604060002090565b926001600160581b0319928084168015801593929160058801916158bb576157b46107c08284615d46565b61588957868616908161580e575b50505050505b156157f3575050805460ff60a01b191674010000000000000000000000000000000000000000179055565b166157fb5750565b805460ff60a81b1916600160a81b179055565b61584593615822615840926107c095615e29565b5060068a01906001600160581b031916600052602052604060002090565b615d46565b61585257808080806157c2565b6040516320fdf93b60e21b81526001600160e01b03199190911660048201526001600160581b031992909216602483015250604490fd5b6040516320fdf93b60e21b81526001600160e01b0319851660048201526001600160581b031984166024820152604490fd5b5050506158c783615d0b565b6158d96107c085851660078801615d46565b61585257506157c8565b60008082516020840182865af1156158f9575050565b6024604051916084601f19601f3d011601937f40b788e3000000000000000000000000000000000000000000000000000000008452600484015201516024820152606060448201523d60648201523d6000608483013efd5b60008082516020840182865af115615967575050565b6024604051916084601f19601f3d011601937f10b2d36b000000000000000000000000000000000000000000000000000000008452600484015201516024820152606060448201523d60648201523d6000608483013efd5b60008082516020840182865af1156159d5575050565b6024604051916084601f19601f3d011601937f0cb6620d000000000000000000000000000000000000000000000000000000008452600484015201516024820152606060448201523d60648201523d6000608483013efd5b6000602091604051838101906301ffc9a760e01b8083526024820152602481526144a18161179c565b6000602091604051838101906301ffc9a760e01b82526001600160e01b03196024820152602481526144a18161179c565b615aa382829061ffff1916600052602052604060002054151590565b1561196e57615ac682829061ffff191660005260205261fffc6040600020541690565b9161ffff61010081851610615ae4576105739360ff19011691615df4565b50906105739250614968565b60016000526020526040600020548015908115615b0b575090565b600191501690565b6001600160e01b0319166306d61fe760e41b8114908115615c08575b8115615bf7575b8115615be6575b8115615bd5575b8115615bc4575b8115615bb3575b8115615ba2575b8115615b91575b8115615b6a575090565b7f118a53890000000000000000000000000000000000000000000000000000000091501490565b630c77631360e41b81149150615b60565b631128186d60e01b81149150615b59565b63236b075960e11b81149150615b52565b63bfd151c160e01b81149150615b4b565b63031fb36160e21b81149150615b44565b63af87348360e01b81149150615b3d565b632238633960e21b81149150615b36565b638a91b0e360e01b81149150615b2f565b6001600160e01b0319167fe3563a4f000000000000000000000000000000000000000000000000000000008114908115615ce1575b8115615cb7575b8115615c8d575b8115615c66575090565b7fa9a234090000000000000000000000000000000000000000000000000000000091501490565b7ff465c77e0000000000000000000000000000000000000000000000000000000081149150615c5c565b7f275e2d790000000000000000000000000000000000000000000000000000000081149150615c55565b7f64c530cd0000000000000000000000000000000000000000000000000000000081149150615c4e565b6001600160581b03191615615d1c57565b60046040517f6c911ea0000000000000000000000000000000000000000000000000000000008152fd5b615d6282829061ffff1916600052602052604060002054151590565b15615dac57615d8582829061ffff191660005260205261fffc6040600020541690565b9161ffff61feff81851611615da35761010061057394011691615df4565b50505050600090565b906105739161522e565b615dd482829061ffff191660005260205261fffc6040600020541690565b916004831615615dec5761fffb610573931691615df4565b505050600190565b9061ffff19166000526020526040600020908154908115615e215761fffc169061fffc1916179055600190565b505050600090565b615e4782829061ffff191660005260205261fffc6040600020541690565b91600480841614615dec576004610573931791615df456feade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0303ade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0302ade46bbfcf6f898a43d541e42556d456ca0bf9b326df8debc0f29d3f811a0301a26469706673582212200aacf7ee650c886f548e0d3d803ae6b2eafe360f255751c7ff35dc191eb7fdd364736f6c63430008160033",
},
MultiOwnerPlugin: {
address: "0xcE0000007B008F50d762D155002600004cD6c647",
abi: [
{
type: "function",
name: "eip712Domain",
inputs: [],
outputs: [
{name: "fields", type: "bytes1", internalType: "bytes1"},
{name: "name", type: "string", internalType: "string"},
{name: "version", type: "string", internalType: "string"},
{name: "chainId", type: "uint256", internalType: "uint256"},
{
name: "verifyingContract",
type: "address",
internalType: "address",
},
{name: "salt", type: "bytes32", internalType: "bytes32"},
{
name: "extensions",
type: "uint256[]",
internalType: "uint256[]",
},
],
stateMutability: "view",
},
{
type: "function",
name: "encodeMessageData",
inputs: [
{name: "account", type: "address", internalType: "address"},
{name: "message", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "", type: "bytes", internalType: "bytes"}],
stateMutability: "view",
},
{
type: "function",
name: "getMessageHash",
inputs: [
{name: "account", type: "address", internalType: "address"},
{name: "message", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "", type: "bytes32", internalType: "bytes32"}],
stateMutability: "view",
},
{
type: "function",
name: "isOwnerOf",
inputs: [
{name: "account", type: "address", internalType: "address"},
{name: "ownerToCheck", type: "address", internalType: "address"},
],
outputs: [{name: "", type: "bool", internalType: "bool"}],
stateMutability: "view",
},
{
type: "function",
name: "isValidSignature",
inputs: [
{name: "digest", type: "bytes32", internalType: "bytes32"},
{name: "signature", type: "bytes", internalType: "bytes"},
],
outputs: [{name: "", type: "bytes4", internalType: "bytes4"}],
stateMutability: "view",
},
{
type: "function",
name: "onInstall",
inputs: [{name: "data", type: "bytes", internalType: "bytes"}],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "onUninstall",
inputs: [{name: "", type: "bytes", internalType: "bytes"}],
outputs: [],
stateMutability: "nonpayable",
},
{
type: "function",
name: "ownersOf",
inputs: [{name: "account", type: "address", internalType: "address"}],
outputs: [{name: "", type: "address[]", internalType: "address[]"}],
stateMutability: "view",
},
{
type: "function",
name: "pluginManifest",
inputs: [],
outputs: [
{
name: "",
type: "tuple",
internalType: "struct PluginManifest",
components: [
{
name: "interfaceIds",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "dependencyInterfaceIds",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "executionFunctions",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "permittedExecutionSelectors",
type: "bytes4[]",
internalType: "bytes4[]",
},
{
name: "permitAnyExternalAddress",
type: "bool",
internalType: "bool",
},
{
name: "canSpendNativeToken",
type: "bool",
internalType: "bool",
},
{
name: "permittedExternalCalls",
type: "tuple[]",
internalType: "struct ManifestExternalCallPermission[]",
components: [
{
name: "externalAddress",
type: "address",
internalType: "address",
},
{
name: "permitAnySelector",
type: "bool",
internalType: "bool",
},
{
name: "selectors",
type: "bytes4[]",
internalType: "bytes4[]",
},
],
},
{