@arcblock/erc721did-contract 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1412 @@
1
+ import require$$0 from 'dotenv-flow';
2
+ import * as ethers$1 from 'ethers';
3
+ import require$$2 from 'axios';
4
+ import require$$3 from 'p-wait-for';
5
+ import * as util from '@ocap/util';
6
+ import require$$5 from 'lodash/upperFirst';
7
+ import require$$6 from 'lodash/keyBy';
8
+ import require$$7 from 'lodash/pick';
9
+
10
+ function getAugmentedNamespace(n) {
11
+ if (n.__esModule) return n;
12
+ var f = n.default;
13
+ if (typeof f == "function") {
14
+ var a = function a () {
15
+ if (this instanceof a) {
16
+ var args = [null];
17
+ args.push.apply(args, arguments);
18
+ var Ctor = Function.bind.apply(f, args);
19
+ return new Ctor();
20
+ }
21
+ return f.apply(this, arguments);
22
+ };
23
+ a.prototype = f.prototype;
24
+ } else a = {};
25
+ Object.defineProperty(a, '__esModule', {value: true});
26
+ Object.keys(n).forEach(function (k) {
27
+ var d = Object.getOwnPropertyDescriptor(n, k);
28
+ Object.defineProperty(a, k, d.get ? d : {
29
+ enumerable: true,
30
+ get: function () {
31
+ return n[k];
32
+ }
33
+ });
34
+ });
35
+ return a;
36
+ }
37
+
38
+ var contract$1 = {};
39
+
40
+ var require$$1 = /*@__PURE__*/getAugmentedNamespace(ethers$1);
41
+
42
+ var require$$4 = /*@__PURE__*/getAugmentedNamespace(util);
43
+
44
+ var _format$1 = "hh-sol-artifact-1";
45
+ var contractName$1 = "ERC721DID";
46
+ var sourceName$1 = "src/ERC721DID.sol";
47
+ var abi$1 = [
48
+ {
49
+ inputs: [
50
+ ],
51
+ stateMutability: "nonpayable",
52
+ type: "constructor"
53
+ },
54
+ {
55
+ anonymous: false,
56
+ inputs: [
57
+ {
58
+ indexed: true,
59
+ internalType: "address",
60
+ name: "to",
61
+ type: "address"
62
+ },
63
+ {
64
+ indexed: true,
65
+ internalType: "uint256",
66
+ name: "tokenId",
67
+ type: "uint256"
68
+ }
69
+ ],
70
+ name: "Acquired",
71
+ type: "event"
72
+ },
73
+ {
74
+ anonymous: false,
75
+ inputs: [
76
+ {
77
+ indexed: true,
78
+ internalType: "address",
79
+ name: "owner",
80
+ type: "address"
81
+ },
82
+ {
83
+ indexed: true,
84
+ internalType: "address",
85
+ name: "approved",
86
+ type: "address"
87
+ },
88
+ {
89
+ indexed: true,
90
+ internalType: "uint256",
91
+ name: "tokenId",
92
+ type: "uint256"
93
+ }
94
+ ],
95
+ name: "Approval",
96
+ type: "event"
97
+ },
98
+ {
99
+ anonymous: false,
100
+ inputs: [
101
+ {
102
+ indexed: true,
103
+ internalType: "address",
104
+ name: "owner",
105
+ type: "address"
106
+ },
107
+ {
108
+ indexed: true,
109
+ internalType: "address",
110
+ name: "operator",
111
+ type: "address"
112
+ },
113
+ {
114
+ indexed: false,
115
+ internalType: "bool",
116
+ name: "approved",
117
+ type: "bool"
118
+ }
119
+ ],
120
+ name: "ApprovalForAll",
121
+ type: "event"
122
+ },
123
+ {
124
+ anonymous: false,
125
+ inputs: [
126
+ {
127
+ indexed: false,
128
+ internalType: "uint8",
129
+ name: "version",
130
+ type: "uint8"
131
+ }
132
+ ],
133
+ name: "Initialized",
134
+ type: "event"
135
+ },
136
+ {
137
+ anonymous: false,
138
+ inputs: [
139
+ {
140
+ indexed: false,
141
+ internalType: "address",
142
+ name: "userAddress",
143
+ type: "address"
144
+ },
145
+ {
146
+ indexed: false,
147
+ internalType: "address payable",
148
+ name: "relayerAddress",
149
+ type: "address"
150
+ },
151
+ {
152
+ indexed: false,
153
+ internalType: "bytes",
154
+ name: "functionSignature",
155
+ type: "bytes"
156
+ }
157
+ ],
158
+ name: "MetaTransactionExecuted",
159
+ type: "event"
160
+ },
161
+ {
162
+ anonymous: false,
163
+ inputs: [
164
+ {
165
+ indexed: true,
166
+ internalType: "address",
167
+ name: "to",
168
+ type: "address"
169
+ },
170
+ {
171
+ indexed: true,
172
+ internalType: "uint256",
173
+ name: "tokenId",
174
+ type: "uint256"
175
+ }
176
+ ],
177
+ name: "Minted",
178
+ type: "event"
179
+ },
180
+ {
181
+ anonymous: false,
182
+ inputs: [
183
+ {
184
+ indexed: true,
185
+ internalType: "address",
186
+ name: "previousOwner",
187
+ type: "address"
188
+ },
189
+ {
190
+ indexed: true,
191
+ internalType: "address",
192
+ name: "newOwner",
193
+ type: "address"
194
+ }
195
+ ],
196
+ name: "OwnershipTransferred",
197
+ type: "event"
198
+ },
199
+ {
200
+ anonymous: false,
201
+ inputs: [
202
+ {
203
+ indexed: true,
204
+ internalType: "address",
205
+ name: "from",
206
+ type: "address"
207
+ },
208
+ {
209
+ indexed: true,
210
+ internalType: "address",
211
+ name: "to",
212
+ type: "address"
213
+ },
214
+ {
215
+ indexed: true,
216
+ internalType: "uint256",
217
+ name: "tokenId",
218
+ type: "uint256"
219
+ }
220
+ ],
221
+ name: "Transfer",
222
+ type: "event"
223
+ },
224
+ {
225
+ inputs: [
226
+ ],
227
+ name: "ERC712_VERSION",
228
+ outputs: [
229
+ {
230
+ internalType: "string",
231
+ name: "",
232
+ type: "string"
233
+ }
234
+ ],
235
+ stateMutability: "view",
236
+ type: "function"
237
+ },
238
+ {
239
+ inputs: [
240
+ {
241
+ internalType: "address",
242
+ name: "_to",
243
+ type: "address"
244
+ }
245
+ ],
246
+ name: "acquireAsset",
247
+ outputs: [
248
+ ],
249
+ stateMutability: "payable",
250
+ type: "function"
251
+ },
252
+ {
253
+ inputs: [
254
+ {
255
+ internalType: "address",
256
+ name: "to",
257
+ type: "address"
258
+ },
259
+ {
260
+ internalType: "uint256",
261
+ name: "tokenId",
262
+ type: "uint256"
263
+ }
264
+ ],
265
+ name: "approve",
266
+ outputs: [
267
+ ],
268
+ stateMutability: "nonpayable",
269
+ type: "function"
270
+ },
271
+ {
272
+ inputs: [
273
+ {
274
+ internalType: "address",
275
+ name: "owner",
276
+ type: "address"
277
+ }
278
+ ],
279
+ name: "balanceOf",
280
+ outputs: [
281
+ {
282
+ internalType: "uint256",
283
+ name: "",
284
+ type: "uint256"
285
+ }
286
+ ],
287
+ stateMutability: "view",
288
+ type: "function"
289
+ },
290
+ {
291
+ inputs: [
292
+ ],
293
+ name: "contractURI",
294
+ outputs: [
295
+ {
296
+ internalType: "string",
297
+ name: "",
298
+ type: "string"
299
+ }
300
+ ],
301
+ stateMutability: "view",
302
+ type: "function"
303
+ },
304
+ {
305
+ inputs: [
306
+ {
307
+ internalType: "address",
308
+ name: "userAddress",
309
+ type: "address"
310
+ },
311
+ {
312
+ internalType: "bytes",
313
+ name: "functionSignature",
314
+ type: "bytes"
315
+ },
316
+ {
317
+ internalType: "bytes32",
318
+ name: "sigR",
319
+ type: "bytes32"
320
+ },
321
+ {
322
+ internalType: "bytes32",
323
+ name: "sigS",
324
+ type: "bytes32"
325
+ },
326
+ {
327
+ internalType: "uint8",
328
+ name: "sigV",
329
+ type: "uint8"
330
+ }
331
+ ],
332
+ name: "executeMetaTransaction",
333
+ outputs: [
334
+ {
335
+ internalType: "bytes",
336
+ name: "",
337
+ type: "bytes"
338
+ }
339
+ ],
340
+ stateMutability: "payable",
341
+ type: "function"
342
+ },
343
+ {
344
+ inputs: [
345
+ {
346
+ internalType: "uint256",
347
+ name: "_tokenId",
348
+ type: "uint256"
349
+ }
350
+ ],
351
+ name: "formatTokenURIValue",
352
+ outputs: [
353
+ {
354
+ internalType: "string",
355
+ name: "",
356
+ type: "string"
357
+ }
358
+ ],
359
+ stateMutability: "view",
360
+ type: "function"
361
+ },
362
+ {
363
+ inputs: [
364
+ {
365
+ internalType: "uint256",
366
+ name: "tokenId",
367
+ type: "uint256"
368
+ }
369
+ ],
370
+ name: "getApproved",
371
+ outputs: [
372
+ {
373
+ internalType: "address",
374
+ name: "",
375
+ type: "address"
376
+ }
377
+ ],
378
+ stateMutability: "view",
379
+ type: "function"
380
+ },
381
+ {
382
+ inputs: [
383
+ ],
384
+ name: "getChainId",
385
+ outputs: [
386
+ {
387
+ internalType: "uint256",
388
+ name: "",
389
+ type: "uint256"
390
+ }
391
+ ],
392
+ stateMutability: "view",
393
+ type: "function"
394
+ },
395
+ {
396
+ inputs: [
397
+ {
398
+ internalType: "uint256",
399
+ name: "_tokenId",
400
+ type: "uint256"
401
+ }
402
+ ],
403
+ name: "getDIDByTokenId",
404
+ outputs: [
405
+ {
406
+ internalType: "string",
407
+ name: "",
408
+ type: "string"
409
+ }
410
+ ],
411
+ stateMutability: "view",
412
+ type: "function"
413
+ },
414
+ {
415
+ inputs: [
416
+ ],
417
+ name: "getDomainSeperator",
418
+ outputs: [
419
+ {
420
+ internalType: "bytes32",
421
+ name: "",
422
+ type: "bytes32"
423
+ }
424
+ ],
425
+ stateMutability: "view",
426
+ type: "function"
427
+ },
428
+ {
429
+ inputs: [
430
+ {
431
+ internalType: "address",
432
+ name: "user",
433
+ type: "address"
434
+ }
435
+ ],
436
+ name: "getNonce",
437
+ outputs: [
438
+ {
439
+ internalType: "uint256",
440
+ name: "nonce",
441
+ type: "uint256"
442
+ }
443
+ ],
444
+ stateMutability: "view",
445
+ type: "function"
446
+ },
447
+ {
448
+ inputs: [
449
+ {
450
+ internalType: "address",
451
+ name: "_proxyRegistryAddress",
452
+ type: "address"
453
+ },
454
+ {
455
+ internalType: "string",
456
+ name: "_baseImageURI",
457
+ type: "string"
458
+ },
459
+ {
460
+ internalType: "string",
461
+ name: "_contractName",
462
+ type: "string"
463
+ },
464
+ {
465
+ internalType: "string",
466
+ name: "_contractSymbol",
467
+ type: "string"
468
+ },
469
+ {
470
+ internalType: "string",
471
+ name: "_contractDescription",
472
+ type: "string"
473
+ },
474
+ {
475
+ internalType: "uint256",
476
+ name: "_totalLimit",
477
+ type: "uint256"
478
+ },
479
+ {
480
+ internalType: "uint256",
481
+ name: "_price",
482
+ type: "uint256"
483
+ },
484
+ {
485
+ internalType: "address payable",
486
+ name: "_transferTokenAddress",
487
+ type: "address"
488
+ }
489
+ ],
490
+ name: "initialize",
491
+ outputs: [
492
+ ],
493
+ stateMutability: "nonpayable",
494
+ type: "function"
495
+ },
496
+ {
497
+ inputs: [
498
+ {
499
+ internalType: "address",
500
+ name: "owner",
501
+ type: "address"
502
+ },
503
+ {
504
+ internalType: "address",
505
+ name: "operator",
506
+ type: "address"
507
+ }
508
+ ],
509
+ name: "isApprovedForAll",
510
+ outputs: [
511
+ {
512
+ internalType: "bool",
513
+ name: "",
514
+ type: "bool"
515
+ }
516
+ ],
517
+ stateMutability: "view",
518
+ type: "function"
519
+ },
520
+ {
521
+ inputs: [
522
+ {
523
+ internalType: "address",
524
+ name: "_to",
525
+ type: "address"
526
+ }
527
+ ],
528
+ name: "mintAsset",
529
+ outputs: [
530
+ ],
531
+ stateMutability: "nonpayable",
532
+ type: "function"
533
+ },
534
+ {
535
+ inputs: [
536
+ ],
537
+ name: "name",
538
+ outputs: [
539
+ {
540
+ internalType: "string",
541
+ name: "",
542
+ type: "string"
543
+ }
544
+ ],
545
+ stateMutability: "view",
546
+ type: "function"
547
+ },
548
+ {
549
+ inputs: [
550
+ ],
551
+ name: "owner",
552
+ outputs: [
553
+ {
554
+ internalType: "address",
555
+ name: "",
556
+ type: "address"
557
+ }
558
+ ],
559
+ stateMutability: "view",
560
+ type: "function"
561
+ },
562
+ {
563
+ inputs: [
564
+ {
565
+ internalType: "uint256",
566
+ name: "tokenId",
567
+ type: "uint256"
568
+ }
569
+ ],
570
+ name: "ownerOf",
571
+ outputs: [
572
+ {
573
+ internalType: "address",
574
+ name: "",
575
+ type: "address"
576
+ }
577
+ ],
578
+ stateMutability: "view",
579
+ type: "function"
580
+ },
581
+ {
582
+ inputs: [
583
+ ],
584
+ name: "price",
585
+ outputs: [
586
+ {
587
+ internalType: "uint256",
588
+ name: "",
589
+ type: "uint256"
590
+ }
591
+ ],
592
+ stateMutability: "view",
593
+ type: "function"
594
+ },
595
+ {
596
+ inputs: [
597
+ ],
598
+ name: "renounceOwnership",
599
+ outputs: [
600
+ ],
601
+ stateMutability: "nonpayable",
602
+ type: "function"
603
+ },
604
+ {
605
+ inputs: [
606
+ {
607
+ internalType: "address",
608
+ name: "from",
609
+ type: "address"
610
+ },
611
+ {
612
+ internalType: "address",
613
+ name: "to",
614
+ type: "address"
615
+ },
616
+ {
617
+ internalType: "uint256",
618
+ name: "tokenId",
619
+ type: "uint256"
620
+ }
621
+ ],
622
+ name: "safeTransferFrom",
623
+ outputs: [
624
+ ],
625
+ stateMutability: "nonpayable",
626
+ type: "function"
627
+ },
628
+ {
629
+ inputs: [
630
+ {
631
+ internalType: "address",
632
+ name: "from",
633
+ type: "address"
634
+ },
635
+ {
636
+ internalType: "address",
637
+ name: "to",
638
+ type: "address"
639
+ },
640
+ {
641
+ internalType: "uint256",
642
+ name: "tokenId",
643
+ type: "uint256"
644
+ },
645
+ {
646
+ internalType: "bytes",
647
+ name: "data",
648
+ type: "bytes"
649
+ }
650
+ ],
651
+ name: "safeTransferFrom",
652
+ outputs: [
653
+ ],
654
+ stateMutability: "nonpayable",
655
+ type: "function"
656
+ },
657
+ {
658
+ inputs: [
659
+ {
660
+ internalType: "address",
661
+ name: "operator",
662
+ type: "address"
663
+ },
664
+ {
665
+ internalType: "bool",
666
+ name: "approved",
667
+ type: "bool"
668
+ }
669
+ ],
670
+ name: "setApprovalForAll",
671
+ outputs: [
672
+ ],
673
+ stateMutability: "nonpayable",
674
+ type: "function"
675
+ },
676
+ {
677
+ inputs: [
678
+ {
679
+ internalType: "bytes4",
680
+ name: "interfaceId",
681
+ type: "bytes4"
682
+ }
683
+ ],
684
+ name: "supportsInterface",
685
+ outputs: [
686
+ {
687
+ internalType: "bool",
688
+ name: "",
689
+ type: "bool"
690
+ }
691
+ ],
692
+ stateMutability: "view",
693
+ type: "function"
694
+ },
695
+ {
696
+ inputs: [
697
+ ],
698
+ name: "symbol",
699
+ outputs: [
700
+ {
701
+ internalType: "string",
702
+ name: "",
703
+ type: "string"
704
+ }
705
+ ],
706
+ stateMutability: "view",
707
+ type: "function"
708
+ },
709
+ {
710
+ inputs: [
711
+ {
712
+ internalType: "uint256",
713
+ name: "_tokenId",
714
+ type: "uint256"
715
+ }
716
+ ],
717
+ name: "tokenURI",
718
+ outputs: [
719
+ {
720
+ internalType: "string",
721
+ name: "",
722
+ type: "string"
723
+ }
724
+ ],
725
+ stateMutability: "view",
726
+ type: "function"
727
+ },
728
+ {
729
+ inputs: [
730
+ ],
731
+ name: "totalLimit",
732
+ outputs: [
733
+ {
734
+ internalType: "uint256",
735
+ name: "",
736
+ type: "uint256"
737
+ }
738
+ ],
739
+ stateMutability: "view",
740
+ type: "function"
741
+ },
742
+ {
743
+ inputs: [
744
+ ],
745
+ name: "totalSupply",
746
+ outputs: [
747
+ {
748
+ internalType: "uint256",
749
+ name: "",
750
+ type: "uint256"
751
+ }
752
+ ],
753
+ stateMutability: "view",
754
+ type: "function"
755
+ },
756
+ {
757
+ inputs: [
758
+ {
759
+ internalType: "address",
760
+ name: "from",
761
+ type: "address"
762
+ },
763
+ {
764
+ internalType: "address",
765
+ name: "to",
766
+ type: "address"
767
+ },
768
+ {
769
+ internalType: "uint256",
770
+ name: "tokenId",
771
+ type: "uint256"
772
+ }
773
+ ],
774
+ name: "transferFrom",
775
+ outputs: [
776
+ ],
777
+ stateMutability: "nonpayable",
778
+ type: "function"
779
+ },
780
+ {
781
+ inputs: [
782
+ {
783
+ internalType: "address",
784
+ name: "newOwner",
785
+ type: "address"
786
+ }
787
+ ],
788
+ name: "transferOwnership",
789
+ outputs: [
790
+ ],
791
+ stateMutability: "nonpayable",
792
+ type: "function"
793
+ }
794
+ ];
795
+ var bytecode$1 = "0x60806040526000600660006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600981526020017f45524337323144494400000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f41425400000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000b19291906200038e565b508060019080519060200190620000ca9291906200038e565b505050620000ed620000e16200011a60201b60201c565b6200013660201b60201c565b620000fd620001fc60201b60201c565b62000114600a620002c560201b620018bd1760201c565b62000587565b600062000131620002db60201b620018d31760201c565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600960159054906101000a900460ff16156200024f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024690620004c5565b60405180910390fd5b60ff8016600960149054906101000a900460ff1660ff1614620002c35760ff600960146101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620002ba919062000505565b60405180910390a15b565b6001816000016000828254019250508190555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156200038757600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff8183015116925050506200038b565b3390505b90565b8280546200039c9062000551565b90600052602060002090601f016020900481019282620003c057600085556200040c565b82601f10620003db57805160ff19168380011785556200040c565b828001600101855582156200040c579182015b828111156200040b578251825591602001919060010190620003ee565b5b5090506200041b91906200041f565b5090565b5b808211156200043a57600081600090555060010162000420565b5090565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b6000620004ad6027836200043e565b9150620004ba826200044f565b604082019050919050565b60006020820190508181036000830152620004e0816200049e565b9050919050565b600060ff82169050919050565b620004ff81620004e7565b82525050565b60006020820190506200051c6000830184620004f4565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200056a57607f821691505b6020821081141562000581576200058062000522565b5b50919050565b615c2580620005976000396000f3fe6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a22cb46511610095578063e8a3d48511610064578063e8a3d48514610696578063e985e9c5146106c1578063f2fde38b146106fe578063f79da28a14610727576101cd565b8063a22cb465146105dc578063a36298c714610605578063b88d4fde14610630578063c87b56dd14610659576101cd565b806395d89b41116100d157806395d89b411461052d578063982d3ba014610558578063a035b1fe14610574578063a1e5425e1461059f576101cd565b8063715018a6146104ae5780637e032eb4146104c55780638da5cb5b14610502576101cd565b806320379ee51161016f57806342842e0e1161013e57806342842e0e146103e257806342ab15861461040b5780636352211e1461043457806370a0823114610471576101cd565b806320379ee51461032657806323b872dd146103515780632d0335ab1461037a5780633408e470146103b7576101cd565b8063095ea7b3116101ab578063095ea7b3146102775780630c53c51c146102a05780630f7e5970146102d057806318160ddd146102fb576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190613744565b610750565b604051610206919061378c565b60405180910390f35b34801561021b57600080fd5b50610224610832565b6040516102319190613840565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190613898565b6108c4565b60405161026e9190613906565b60405180910390f35b34801561028357600080fd5b5061029e6004803603810190610299919061394d565b61090a565b005b6102ba60048036038101906102b59190613b31565b610a22565b6040516102c79190613c1d565b60405180910390f35b3480156102dc57600080fd5b506102e5610c94565b6040516102f29190613840565b60405180910390f35b34801561030757600080fd5b50610310610ccd565b60405161031d9190613c4e565b60405180910390f35b34801561033257600080fd5b5061033b610cea565b6040516103489190613c78565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613c93565b610cf4565b005b34801561038657600080fd5b506103a1600480360381019061039c9190613ce6565b610d54565b6040516103ae9190613c4e565b60405180910390f35b3480156103c357600080fd5b506103cc610d9d565b6040516103d99190613c4e565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613c93565b610daa565b005b34801561041757600080fd5b50610432600480360381019061042d9190613ce6565b610dca565b005b34801561044057600080fd5b5061045b60048036038101906104569190613898565b610e89565b6040516104689190613906565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613ce6565b610f10565b6040516104a59190613c4e565b60405180910390f35b3480156104ba57600080fd5b506104c3610fc8565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190613898565b610fdc565b6040516104f99190613840565b60405180910390f35b34801561050e57600080fd5b50610517611027565b6040516105249190613906565b60405180910390f35b34801561053957600080fd5b50610542611051565b60405161054f9190613840565b60405180910390f35b610572600480360381019061056d9190613ce6565b6110e3565b005b34801561058057600080fd5b50610589611254565b6040516105969190613c4e565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613898565b61125a565b6040516105d39190613840565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613d3f565b6113d5565b005b34801561061157600080fd5b5061061a6113eb565b6040516106279190613c4e565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613d7f565b6113f1565b005b34801561066557600080fd5b50610680600480360381019061067b9190613898565b611453565b60405161068d9190613840565b60405180910390f35b3480156106a257600080fd5b506106ab61148c565b6040516106b89190613840565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613e02565b6114ea565b6040516106f5919061378c565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613ce6565b6115ec565b005b34801561073357600080fd5b5061074e60048036038101906107499190613f21565b611670565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082b575061082a82611984565b5b9050919050565b6060600d805461084190614076565b80601f016020809104026020016040519081016040528092919081815260200182805461086d90614076565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b5050505050905090565b60006108cf826119ee565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091582610e89565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d9061411a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109a5611a39565b73ffffffffffffffffffffffffffffffffffffffff1614806109d457506109d3816109ce611a39565b6114ea565b5b610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a906141ac565b60405180910390fd5b610a1d8383611a48565b505050565b606060006040518060600160405280600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610aa58782878787611b01565b610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb9061423e565b60405180910390fd5b610b376001600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0a90919063ffffffff16565b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610bad9392919061426d565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610be292919061432f565b604051602081830303815290604052604051610bfe9190614357565b6000604051808303816000865af19150503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b509150915081610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906143ba565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60006001610cdb600a611c20565b610ce59190614409565b905090565b6000600754905090565b610d05610cff611a39565b82611c2e565b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906144af565b60405180910390fd5b610d4f838383611cc3565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000804690508091505090565b610dc5838383604051806020016040528060008152506113f1565b505050565b610dd2611fbd565b6000610dde600a611c20565b90506000601254118015610df3575060125481115b15610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a9061451b565b60405180910390fd5b6000610e3e8361203b565b9050808373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe60405160405180910390a3505050565b600080610e9583612067565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90614587565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890614619565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fd0611fbd565b610fda60006120a4565b565b60606000610fe98361125a565b9050600081600c8360405160200161100393929190614885565b604051602081830303815290604052905061101e848261216a565b92505050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606010805461106090614076565b80601f016020809104026020016040519081016040528092919081815260200182805461108c90614076565b80156110d95780601f106110ae576101008083540402835291602001916110d9565b820191906000526020600020905b8154815290600101906020018083116110bc57829003601f168201915b5050505050905090565b60006110ef600a611c20565b90506000601254118015611104575060125481115b15611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b9061451b565b60405180910390fd5b600060135411156111fe57601354341015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90614939565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156111fc573d6000803e3d6000fd5b505b60006112098361203b565b9050808373ffffffffffffffffffffffffffffffffffffffff167ffaa12ddb40ba6ec53659ef184da2121c1c228dd2e760b3574db7feca61d99f9a60405160405180910390a3505050565b60135481565b60606000611277836040518060200160405280600081525061216a565b905060008160405160200161128c9190614959565b60405160208183030381529060405280519060200120905060006112d2826040516020016112ba9190614991565b604051602081830303815290604052600060146122bc565b905060006040518060400160405280600281526020017f18200000000000000000000000000000000000000000000000000000000000008152509050600081836040516020016113239291906149ac565b6040516020818303038152906040529050600061136982805190602001206040516020016113519190614991565b604051602081830303815290604052600060046122bc565b90506000838583604051602001611382939291906149d0565b6040516020818303038152906040529050600061139e826123f3565b90506000816040516020016113b39190614a4d565b6040516020818303038152906040529050809950505050505050505050919050565b6113e76113e0611a39565b8383612786565b5050565b60125481565b6114026113fc611a39565b83611c2e565b611441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611438906144af565b60405180910390fd5b61144d848484846128f3565b50505050565b606061146661146183610fdc565b61294f565b6040516020016114769190614abb565b6040516020818303038152906040529050919050565b606060006114c2600d600e600f60116040516020016114ae9493929190614c0d565b60405160208183030381529060405261294f565b9050806040516020016114d59190614abb565b60405160208183030381529060405291505090565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016115629190613906565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190614ce1565b73ffffffffffffffffffffffffffffffffffffffff1614156115d85760019150506115e6565b6115e28484612ab3565b9150505b92915050565b6115f4611fbd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614d80565b60405180910390fd5b61166d816120a4565b50565b6000600960159054906101000a900460ff161590508080156116a457506001600960149054906101000a900460ff1660ff16105b806116d357506116b330612b47565b1580156116d257506001600960149054906101000a900460ff1660ff16145b5b611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614e12565b60405180910390fd5b6001600960146101000a81548160ff021916908360ff1602179055508015611750576001600960156101000a81548160ff0219169083151502179055505b88600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600c90805190602001906117a7929190613635565b5086600d90805190602001906117be929190613635565b5085601090805190602001906117d5929190613635565b5084600e90805190602001906117ec929190613635565b50836012819055508260138190555081601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061184587612b6a565b61184f600a6118bd565b611858896120a4565b80156118b2576000600960156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516118a99190614e77565b60405180910390a15b505050505050505050565b6001816000016000828254019250508190555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561197d57600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611981565b3390505b90565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119f781612be1565b611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614587565b60405180910390fd5b50565b6000611a436118d3565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611abb83610e89565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614f04565b60405180910390fd5b6001611b85611b8087612c22565b612c8a565b83868660405160008152602001604052604051611ba59493929190614f33565b6020604051602081039080840390855afa158015611bc7573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611c189190614f78565b905092915050565b600081600001549050919050565b600080611c3a83610e89565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c7c5750611c7b81856114ea565b5b80611cba57508373ffffffffffffffffffffffffffffffffffffffff16611ca2846108c4565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce382610e89565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090615040565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da0906150d2565b60405180910390fd5b611db68383836001612cc3565b8273ffffffffffffffffffffffffffffffffffffffff16611dd682610e89565b73ffffffffffffffffffffffffffffffffffffffff1614611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390615040565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fb88383836001612cc9565b505050565b611fc5611a39565b73ffffffffffffffffffffffffffffffffffffffff16611fe3611027565b73ffffffffffffffffffffffffffffffffffffffff1614612039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120309061513e565b60405180910390fd5b565b600080612048600a611c20565b9050612054600a6118bd565b61205e8382612ccf565b80915050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000600d61217985612ced565b60405160200161218a9291906151aa565b60405160208183030381529060405290506000600d6040516020016121af9190615271565b6040516020818303038152906040529050600060405180602001604052806000815250905060006040518060400160405280601e81526020017f68747470733a2f2f666f72756d2e6f70656e7a657070656c696e2e636f6d00008152509050600061221988612ced565b9050600061222630612dc5565b9050600060405180602001604052806000815250905060008951111561227f576040518060400160405280600181526020017f2c0000000000000000000000000000000000000000000000000000000000000081525090505b868686868686868f60405160200161229e9897969594939291906153ce565b60405160208183030381529060405297505050505050505092915050565b6060835182846122cc9190614f78565b111561230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490615510565b60405180910390fd5b60008267ffffffffffffffff81111561232957612328613997565b5b6040519080825280601f01601f19166020018201604052801561235b5781602001600182028036833780820191505090505b50905060005b838110156123e7578581866123769190614f78565b8151811061238757612386615530565b5b602001015160f81c60f81b8282815181106123a5576123a4615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806123df9061555f565b915050612361565b50809150509392505050565b606060008251905060005b818110801561244f5750600060f81b8482815181106124205761241f615530565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156124615780806001019150506123fe565b60016117e361209f838503028161247b5761247a6155a8565b5b04820101915060008267ffffffffffffffff81111561249d5761249c613997565b5b6040519080825280601f01601f1916602001820160405280156124cf5781602001600182028036833780820191505090505b509050600080600060018603905060005b88518110156125f55760018703925088818151811061250257612501615530565b5b602001015160f81c60f81b60f81c60ff1693505b8183138061252b575060008463ffffffff1614155b156125e55784838151811061254357612542615530565b5b602001015160f81c60f81b60f81c60ff166101000261ffff1684019350603a8463ffffffff1681612577576125766155a8565b5b0660f81b85848151811061258e5761258d615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350603a8463ffffffff16816125d4576125d36155a8565b5b049350828060019003935050612516565b82915080806001019150506124e0565b5060008590505b868110801561264d5750600060f81b85828151811061261e5761261d615530565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561265f5780806001019150506125fc565b858103855103965060008767ffffffffffffffff81111561268357612682613997565b5b6040519080825280601f01601f1916602001820160405280156126b55781602001600182028036833780820191505090505b50905060005b88811015612775576000888483010390506040518060600160405280603a8152602001615bb6603a91398882815181106126f8576126f7615530565b5b602001015160f81c60f81b60f81c60ff168151811061271a57612719615530565b5b602001015160f81c60f81b83838151811061273857612737615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505080806001019150506126bb565b508098505050505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615623565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128e6919061378c565b60405180910390a3505050565b6128fe848484611cc3565b61290a84848484612df2565b612949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612940906156b5565b60405180910390fd5b50505050565b606060008251141561297257604051806020016040528060008152509050612aae565b6000604051806060016040528060408152602001615b7660409139905060006003600285516129a19190614f78565b6129ab91906156d5565b60046129b79190615706565b67ffffffffffffffff8111156129d0576129cf613997565b5b6040519080825280601f01601f191660200182016040528015612a025781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015612a6e576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050612a13565b5050600386510660018114612a8a5760028114612a9d57612aa5565b603d6001830353603d6002830353612aa5565b603d60018303535b50505080925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600660009054906101000a900460ff1615612bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb1906157ac565b60405180910390fd5b612bc381612f89565b6001600660006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff16612c0383612067565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000604051806080016040528060438152602001615ae4604391398051906020012082600001518360200151846040015180519060200120604051602001612c6d94939291906157cc565b604051602081830303815290604052805190602001209050919050565b6000612c94610cea565b82604051602001612ca692919061585d565b604051602081830303815290604052805190602001209050919050565b50505050565b50505050565b612ce982826040518060200160405280600081525061302d565b5050565b606060006001612cfc84613088565b01905060008167ffffffffffffffff811115612d1b57612d1a613997565b5b6040519080825280601f01601f191660200182016040528015612d4d5781602001600182028036833780820191505090505b509050600082602001820190505b600115612dba578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612da457612da36155a8565b5b0494506000851415612db557612dba565b612d5b565b819350505050919050565b6060612deb8273ffffffffffffffffffffffffffffffffffffffff16601460ff166131db565b9050919050565b6000612e138473ffffffffffffffffffffffffffffffffffffffff16612b47565b15612f7c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e3c611a39565b8786866040518563ffffffff1660e01b8152600401612e5e9493929190615894565b602060405180830381600087803b158015612e7857600080fd5b505af1925050508015612ea957506040513d601f19601f82011682018060405250810190612ea691906158f5565b60015b612f2c573d8060008114612ed9576040519150601f19603f3d011682016040523d82523d6000602084013e612ede565b606091505b50600081511415612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b906156b5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f81565b600190505b949350505050565b6040518060800160405280604f8152602001615b27604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030612ff7610d9d565b60001b60405160200161300e959493929190615922565b6040516020818303038152906040528051906020012060078190555050565b6130378383613417565b6130446000848484612df2565b613083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307a906156b5565b60405180910390fd5b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106130e6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816130dc576130db6155a8565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613123576d04ee2d6d415b85acef81000000008381613119576131186155a8565b5b0492506020810190505b662386f26fc10000831061315257662386f26fc100008381613148576131476155a8565b5b0492506010810190505b6305f5e100831061317b576305f5e1008381613171576131706155a8565b5b0492506008810190505b61271083106131a0576127108381613196576131956155a8565b5b0492506004810190505b606483106131c357606483816131b9576131b86155a8565b5b0492506002810190505b600a83106131d2576001810190505b80915050919050565b6060600060028360026131ee9190615706565b6131f89190614f78565b67ffffffffffffffff81111561321157613210613997565b5b6040519080825280601f01601f1916602001820160405280156132435781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061327b5761327a615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106132df576132de615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261331f9190615706565b6133299190614f78565b90505b60018111156133c9577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061336b5761336a615530565b5b1a60f81b82828151811061338257613381615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806133c290615975565b905061332c565b506000841461340d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613404906159eb565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e90615a57565b60405180910390fd5b61349081612be1565b156134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c790615ac3565b60405180910390fd5b6134de600083836001612cc3565b6134e781612be1565b15613527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351e90615ac3565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613631600083836001612cc9565b5050565b82805461364190614076565b90600052602060002090601f01602090048101928261366357600085556136aa565b82601f1061367c57805160ff19168380011785556136aa565b828001600101855582156136aa579182015b828111156136a957825182559160200191906001019061368e565b5b5090506136b791906136bb565b5090565b5b808211156136d45760008160009055506001016136bc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613721816136ec565b811461372c57600080fd5b50565b60008135905061373e81613718565b92915050565b60006020828403121561375a576137596136e2565b5b60006137688482850161372f565b91505092915050565b60008115159050919050565b61378681613771565b82525050565b60006020820190506137a1600083018461377d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137e15780820151818401526020810190506137c6565b838111156137f0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613812826137a7565b61381c81856137b2565b935061382c8185602086016137c3565b613835816137f6565b840191505092915050565b6000602082019050818103600083015261385a8184613807565b905092915050565b6000819050919050565b61387581613862565b811461388057600080fd5b50565b6000813590506138928161386c565b92915050565b6000602082840312156138ae576138ad6136e2565b5b60006138bc84828501613883565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f0826138c5565b9050919050565b613900816138e5565b82525050565b600060208201905061391b60008301846138f7565b92915050565b61392a816138e5565b811461393557600080fd5b50565b60008135905061394781613921565b92915050565b60008060408385031215613964576139636136e2565b5b600061397285828601613938565b925050602061398385828601613883565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139cf826137f6565b810181811067ffffffffffffffff821117156139ee576139ed613997565b5b80604052505050565b6000613a016136d8565b9050613a0d82826139c6565b919050565b600067ffffffffffffffff821115613a2d57613a2c613997565b5b613a36826137f6565b9050602081019050919050565b82818337600083830152505050565b6000613a65613a6084613a12565b6139f7565b905082815260208101848484011115613a8157613a80613992565b5b613a8c848285613a43565b509392505050565b600082601f830112613aa957613aa861398d565b5b8135613ab9848260208601613a52565b91505092915050565b6000819050919050565b613ad581613ac2565b8114613ae057600080fd5b50565b600081359050613af281613acc565b92915050565b600060ff82169050919050565b613b0e81613af8565b8114613b1957600080fd5b50565b600081359050613b2b81613b05565b92915050565b600080600080600060a08688031215613b4d57613b4c6136e2565b5b6000613b5b88828901613938565b955050602086013567ffffffffffffffff811115613b7c57613b7b6136e7565b5b613b8888828901613a94565b9450506040613b9988828901613ae3565b9350506060613baa88828901613ae3565b9250506080613bbb88828901613b1c565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000613bef82613bc8565b613bf98185613bd3565b9350613c098185602086016137c3565b613c12816137f6565b840191505092915050565b60006020820190508181036000830152613c378184613be4565b905092915050565b613c4881613862565b82525050565b6000602082019050613c636000830184613c3f565b92915050565b613c7281613ac2565b82525050565b6000602082019050613c8d6000830184613c69565b92915050565b600080600060608486031215613cac57613cab6136e2565b5b6000613cba86828701613938565b9350506020613ccb86828701613938565b9250506040613cdc86828701613883565b9150509250925092565b600060208284031215613cfc57613cfb6136e2565b5b6000613d0a84828501613938565b91505092915050565b613d1c81613771565b8114613d2757600080fd5b50565b600081359050613d3981613d13565b92915050565b60008060408385031215613d5657613d556136e2565b5b6000613d6485828601613938565b9250506020613d7585828601613d2a565b9150509250929050565b60008060008060808587031215613d9957613d986136e2565b5b6000613da787828801613938565b9450506020613db887828801613938565b9350506040613dc987828801613883565b925050606085013567ffffffffffffffff811115613dea57613de96136e7565b5b613df687828801613a94565b91505092959194509250565b60008060408385031215613e1957613e186136e2565b5b6000613e2785828601613938565b9250506020613e3885828601613938565b9150509250929050565b600067ffffffffffffffff821115613e5d57613e5c613997565b5b613e66826137f6565b9050602081019050919050565b6000613e86613e8184613e42565b6139f7565b905082815260208101848484011115613ea257613ea1613992565b5b613ead848285613a43565b509392505050565b600082601f830112613eca57613ec961398d565b5b8135613eda848260208601613e73565b91505092915050565b6000613eee826138c5565b9050919050565b613efe81613ee3565b8114613f0957600080fd5b50565b600081359050613f1b81613ef5565b92915050565b600080600080600080600080610100898b031215613f4257613f416136e2565b5b6000613f508b828c01613938565b985050602089013567ffffffffffffffff811115613f7157613f706136e7565b5b613f7d8b828c01613eb5565b975050604089013567ffffffffffffffff811115613f9e57613f9d6136e7565b5b613faa8b828c01613eb5565b965050606089013567ffffffffffffffff811115613fcb57613fca6136e7565b5b613fd78b828c01613eb5565b955050608089013567ffffffffffffffff811115613ff857613ff76136e7565b5b6140048b828c01613eb5565b94505060a06140158b828c01613883565b93505060c06140268b828c01613883565b92505060e06140378b828c01613f0c565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061408e57607f821691505b602082108114156140a2576140a1614047565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006141046021836137b2565b915061410f826140a8565b604082019050919050565b60006020820190508181036000830152614133816140f7565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614196603d836137b2565b91506141a18261413a565b604082019050919050565b600060208201905081810360008301526141c581614189565b9050919050565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b60006142286021836137b2565b9150614233826141cc565b604082019050919050565b600060208201905081810360008301526142578161421b565b9050919050565b61426781613ee3565b82525050565b600060608201905061428260008301866138f7565b61428f602083018561425e565b81810360408301526142a18184613be4565b9050949350505050565b600081905092915050565b60006142c182613bc8565b6142cb81856142ab565b93506142db8185602086016137c3565b80840191505092915050565b60008160601b9050919050565b60006142ff826142e7565b9050919050565b6000614311826142f4565b9050919050565b614329614324826138e5565b614306565b82525050565b600061433b82856142b6565b91506143478284614318565b6014820191508190509392505050565b600061436382846142b6565b915081905092915050565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b60006143a4601c836137b2565b91506143af8261436e565b602082019050919050565b600060208201905081810360008301526143d381614397565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061441482613862565b915061441f83613862565b925082821015614432576144316143da565b5b828203905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614499602d836137b2565b91506144a48261443d565b604082019050919050565b600060208201905081810360008301526144c88161448c565b9050919050565b7f4d6178206d696e7420636f756e74207265616368656400000000000000000000600082015250565b60006145056016836137b2565b9150614510826144cf565b602082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006145716018836137b2565b915061457c8261453b565b602082019050919050565b600060208201905081810360008301526145a081614564565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006146036029836137b2565b915061460e826145a7565b604082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b600081905092915050565b7f22646964223a2200000000000000000000000000000000000000000000000000600082015250565b600061467a600783614639565b915061468582614644565b600782019050919050565b600061469b826137a7565b6146a58185614639565b93506146b58185602086016137c3565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006146f7600283614639565b9150614702826146c1565b600282019050919050565b7f22696d616765223a220000000000000000000000000000000000000000000000600082015250565b6000614743600983614639565b915061474e8261470d565b600982019050919050565b60008190508160005260206000209050919050565b6000815461477b81614076565b6147858186614639565b945060018216600081146147a057600181146147b1576147e4565b60ff198316865281860193506147e4565b6147ba85614759565b60005b838110156147dc578154818901526001820191506020810190506147bd565b838801955050505b50505092915050565b7f3f617373657449643d0000000000000000000000000000000000000000000000600082015250565b6000614823600983614639565b915061482e826147ed565b600982019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061486f600183614639565b915061487a82614839565b600182019050919050565b60006148908261466d565b915061489c8286614690565b91506148a7826146ea565b91506148b282614736565b91506148be828561476e565b91506148c982614816565b91506148d58284614690565b91506148e082614862565b9150819050949350505050565b7f4e6f7420656e6f75676820746f6b656e2073656e740000000000000000000000600082015250565b60006149236015836137b2565b915061492e826148ed565b602082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b60006149658284614690565b915081905092915050565b6000819050919050565b61498b61498682613ac2565b614970565b82525050565b600061499d828461497a565b60208201915081905092915050565b60006149b882856142b6565b91506149c482846142b6565b91508190509392505050565b60006149dc82866142b6565b91506149e882856142b6565b91506149f482846142b6565b9150819050949350505050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a37600183614639565b9150614a4282614a01565b600182019050919050565b6000614a5882614a2a565b9150614a648284614690565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614aa5601d83614639565b9150614ab082614a6f565b601d82019050919050565b6000614ac682614a98565b9150614ad28284614690565b915081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b6000614b13600983614639565b9150614b1e82614add565b600982019050919050565b7f222c226465736372697074696f6e223a22000000000000000000000000000000600082015250565b6000614b5f601183614639565b9150614b6a82614b29565b601182019050919050565b7f2265787465726e616c5f6c696e6b223a22000000000000000000000000000000600082015250565b6000614bab601183614639565b9150614bb682614b75565b601182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000614bf7600183614639565b9150614c0282614bc1565b600182019050919050565b6000614c1882614b06565b9150614c24828761476e565b9150614c2f82614b52565b9150614c3b828661476e565b9150614c46826146ea565b9150614c5182614736565b9150614c5d828561476e565b9150614c68826146ea565b9150614c7382614b9e565b9150614c7f828461476e565b9150614c8a82614862565b9150614c9582614bea565b915081905095945050505050565b6000614cae826138e5565b9050919050565b614cbe81614ca3565b8114614cc957600080fd5b50565b600081519050614cdb81614cb5565b92915050565b600060208284031215614cf757614cf66136e2565b5b6000614d0584828501614ccc565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d6a6026836137b2565b9150614d7582614d0e565b604082019050919050565b60006020820190508181036000830152614d9981614d5d565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614dfc602e836137b2565b9150614e0782614da0565b604082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b6000819050919050565b6000819050919050565b6000614e61614e5c614e5784614e32565b614e3c565b613af8565b9050919050565b614e7181614e46565b82525050565b6000602082019050614e8c6000830184614e68565b92915050565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b6000614eee6025836137b2565b9150614ef982614e92565b604082019050919050565b60006020820190508181036000830152614f1d81614ee1565b9050919050565b614f2d81613af8565b82525050565b6000608082019050614f486000830187613c69565b614f556020830186614f24565b614f626040830185613c69565b614f6f6060830184613c69565b95945050505050565b6000614f8382613862565b9150614f8e83613862565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fc357614fc26143da565b5b828201905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061502a6025836137b2565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150bc6024836137b2565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006151286020836137b2565b9150615133826150f2565b602082019050919050565b600060208201905081810360008301526151578161511b565b9050919050565b7f2023000000000000000000000000000000000000000000000000000000000000600082015250565b6000615194600283614639565b915061519f8261515e565b600282019050919050565b60006151b6828561476e565b91506151c182615187565b91506151cd8284614690565b91508190509392505050565b7f546869732069732061204e4654206f6620000000000000000000000000000000600082015250565b600061520f601183614639565b915061521a826151d9565b601182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b600061525b600183614639565b915061526682615225565b600182019050919050565b600061527c82615202565b9150615288828461476e565b91506152938261524e565b915081905092915050565b7f2261747472696275746573223a22000000000000000000000000000000000000600082015250565b60006152d4600e83614639565b91506152df8261529e565b600e82019050919050565b7f2265787465726e616c5f75726c223a2200000000000000000000000000000000600082015250565b6000615320601083614639565b915061532b826152ea565b601082019050919050565b7f22736e223a220000000000000000000000000000000000000000000000000000600082015250565b600061536c600683614639565b915061537782615336565b600682019050919050565b7f22636f6e747261637441646472657373223a2200000000000000000000000000600082015250565b60006153b8601383614639565b91506153c382615382565b601382019050919050565b60006153d982614b06565b91506153e5828b614690565b91506153f082614b52565b91506153fc828a614690565b9150615407826146ea565b9150615412826152c7565b915061541e8289614690565b9150615429826146ea565b915061543482615313565b91506154408288614690565b915061544b826146ea565b91506154568261535f565b91506154628287614690565b915061546d826146ea565b9150615478826153ab565b91506154848286614690565b915061548f82614862565b915061549b8285614690565b91506154a78284614690565b91506154b282614bea565b91508190509998505050505050505050565b7f496e76616c696420736c6963652072616e676500000000000000000000000000600082015250565b60006154fa6013836137b2565b9150615505826154c4565b602082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061556a82613862565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561559d5761559c6143da565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061560d6019836137b2565b9150615618826155d7565b602082019050919050565b6000602082019050818103600083015261563c81615600565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061569f6032836137b2565b91506156aa82615643565b604082019050919050565b600060208201905081810360008301526156ce81615692565b9050919050565b60006156e082613862565b91506156eb83613862565b9250826156fb576156fa6155a8565b5b828204905092915050565b600061571182613862565b915061571c83613862565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615755576157546143da565b5b828202905092915050565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b6000615796600e836137b2565b91506157a182615760565b602082019050919050565b600060208201905081810360008301526157c581615789565b9050919050565b60006080820190506157e16000830187613c69565b6157ee6020830186613c3f565b6157fb60408301856138f7565b6158086060830184613c69565b95945050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000615847600283614639565b915061585282615811565b600282019050919050565b60006158688261583a565b9150615874828561497a565b602082019150615884828461497a565b6020820191508190509392505050565b60006080820190506158a960008301876138f7565b6158b660208301866138f7565b6158c36040830185613c3f565b81810360608301526158d58184613be4565b905095945050505050565b6000815190506158ef81613718565b92915050565b60006020828403121561590b5761590a6136e2565b5b6000615919848285016158e0565b91505092915050565b600060a0820190506159376000830188613c69565b6159446020830187613c69565b6159516040830186613c69565b61595e60608301856138f7565b61596b6080830184613c69565b9695505050505050565b600061598082613862565b91506000821415615994576159936143da565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006159d56020836137b2565b91506159e08261599f565b602082019050919050565b60006020820190508181036000830152615a04816159c8565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615a416020836137b2565b9150615a4c82615a0b565b602082019050919050565b60006020820190508181036000830152615a7081615a34565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615aad601c836137b2565b9150615ab882615a77565b602082019050919050565b60006020820190508181036000830152615adc81615aa0565b905091905056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c74294142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f31323334353637383941424344454647484a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f707172737475767778797aa2646970667358221220461cbbb2f48f95885ff0ce0a4c024c1682a66d97b1a7a89861dc773d3f92f22e64736f6c63430008090033";
796
+ var deployedBytecode$1 = "0x6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a22cb46511610095578063e8a3d48511610064578063e8a3d48514610696578063e985e9c5146106c1578063f2fde38b146106fe578063f79da28a14610727576101cd565b8063a22cb465146105dc578063a36298c714610605578063b88d4fde14610630578063c87b56dd14610659576101cd565b806395d89b41116100d157806395d89b411461052d578063982d3ba014610558578063a035b1fe14610574578063a1e5425e1461059f576101cd565b8063715018a6146104ae5780637e032eb4146104c55780638da5cb5b14610502576101cd565b806320379ee51161016f57806342842e0e1161013e57806342842e0e146103e257806342ab15861461040b5780636352211e1461043457806370a0823114610471576101cd565b806320379ee51461032657806323b872dd146103515780632d0335ab1461037a5780633408e470146103b7576101cd565b8063095ea7b3116101ab578063095ea7b3146102775780630c53c51c146102a05780630f7e5970146102d057806318160ddd146102fb576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190613744565b610750565b604051610206919061378c565b60405180910390f35b34801561021b57600080fd5b50610224610832565b6040516102319190613840565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190613898565b6108c4565b60405161026e9190613906565b60405180910390f35b34801561028357600080fd5b5061029e6004803603810190610299919061394d565b61090a565b005b6102ba60048036038101906102b59190613b31565b610a22565b6040516102c79190613c1d565b60405180910390f35b3480156102dc57600080fd5b506102e5610c94565b6040516102f29190613840565b60405180910390f35b34801561030757600080fd5b50610310610ccd565b60405161031d9190613c4e565b60405180910390f35b34801561033257600080fd5b5061033b610cea565b6040516103489190613c78565b60405180910390f35b34801561035d57600080fd5b5061037860048036038101906103739190613c93565b610cf4565b005b34801561038657600080fd5b506103a1600480360381019061039c9190613ce6565b610d54565b6040516103ae9190613c4e565b60405180910390f35b3480156103c357600080fd5b506103cc610d9d565b6040516103d99190613c4e565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613c93565b610daa565b005b34801561041757600080fd5b50610432600480360381019061042d9190613ce6565b610dca565b005b34801561044057600080fd5b5061045b60048036038101906104569190613898565b610e89565b6040516104689190613906565b60405180910390f35b34801561047d57600080fd5b5061049860048036038101906104939190613ce6565b610f10565b6040516104a59190613c4e565b60405180910390f35b3480156104ba57600080fd5b506104c3610fc8565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190613898565b610fdc565b6040516104f99190613840565b60405180910390f35b34801561050e57600080fd5b50610517611027565b6040516105249190613906565b60405180910390f35b34801561053957600080fd5b50610542611051565b60405161054f9190613840565b60405180910390f35b610572600480360381019061056d9190613ce6565b6110e3565b005b34801561058057600080fd5b50610589611254565b6040516105969190613c4e565b60405180910390f35b3480156105ab57600080fd5b506105c660048036038101906105c19190613898565b61125a565b6040516105d39190613840565b60405180910390f35b3480156105e857600080fd5b5061060360048036038101906105fe9190613d3f565b6113d5565b005b34801561061157600080fd5b5061061a6113eb565b6040516106279190613c4e565b60405180910390f35b34801561063c57600080fd5b5061065760048036038101906106529190613d7f565b6113f1565b005b34801561066557600080fd5b50610680600480360381019061067b9190613898565b611453565b60405161068d9190613840565b60405180910390f35b3480156106a257600080fd5b506106ab61148c565b6040516106b89190613840565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190613e02565b6114ea565b6040516106f5919061378c565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613ce6565b6115ec565b005b34801561073357600080fd5b5061074e60048036038101906107499190613f21565b611670565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061081b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061082b575061082a82611984565b5b9050919050565b6060600d805461084190614076565b80601f016020809104026020016040519081016040528092919081815260200182805461086d90614076565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b5050505050905090565b60006108cf826119ee565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061091582610e89565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097d9061411a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109a5611a39565b73ffffffffffffffffffffffffffffffffffffffff1614806109d457506109d3816109ce611a39565b6114ea565b5b610a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0a906141ac565b60405180910390fd5b610a1d8383611a48565b505050565b606060006040518060600160405280600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481526020018873ffffffffffffffffffffffffffffffffffffffff168152602001878152509050610aa58782878787611b01565b610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb9061423e565b60405180910390fd5b610b376001600860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c0a90919063ffffffff16565b600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b873388604051610bad9392919061426d565b60405180910390a16000803073ffffffffffffffffffffffffffffffffffffffff16888a604051602001610be292919061432f565b604051602081830303815290604052604051610bfe9190614357565b6000604051808303816000865af19150503d8060008114610c3b576040519150601f19603f3d011682016040523d82523d6000602084013e610c40565b606091505b509150915081610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906143ba565b60405180910390fd5b80935050505095945050505050565b6040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525081565b60006001610cdb600a611c20565b610ce59190614409565b905090565b6000600754905090565b610d05610cff611a39565b82611c2e565b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b906144af565b60405180910390fd5b610d4f838383611cc3565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000804690508091505090565b610dc5838383604051806020016040528060008152506113f1565b505050565b610dd2611fbd565b6000610dde600a611c20565b90506000601254118015610df3575060125481115b15610e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2a9061451b565b60405180910390fd5b6000610e3e8361203b565b9050808373ffffffffffffffffffffffffffffffffffffffff167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe60405160405180910390a3505050565b600080610e9583612067565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90614587565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7890614619565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fd0611fbd565b610fda60006120a4565b565b60606000610fe98361125a565b9050600081600c8360405160200161100393929190614885565b604051602081830303815290604052905061101e848261216a565b92505050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606010805461106090614076565b80601f016020809104026020016040519081016040528092919081815260200182805461108c90614076565b80156110d95780601f106110ae576101008083540402835291602001916110d9565b820191906000526020600020905b8154815290600101906020018083116110bc57829003601f168201915b5050505050905090565b60006110ef600a611c20565b90506000601254118015611104575060125481115b15611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b9061451b565b60405180910390fd5b600060135411156111fe57601354341015611194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118b90614939565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156111fc573d6000803e3d6000fd5b505b60006112098361203b565b9050808373ffffffffffffffffffffffffffffffffffffffff167ffaa12ddb40ba6ec53659ef184da2121c1c228dd2e760b3574db7feca61d99f9a60405160405180910390a3505050565b60135481565b60606000611277836040518060200160405280600081525061216a565b905060008160405160200161128c9190614959565b60405160208183030381529060405280519060200120905060006112d2826040516020016112ba9190614991565b604051602081830303815290604052600060146122bc565b905060006040518060400160405280600281526020017f18200000000000000000000000000000000000000000000000000000000000008152509050600081836040516020016113239291906149ac565b6040516020818303038152906040529050600061136982805190602001206040516020016113519190614991565b604051602081830303815290604052600060046122bc565b90506000838583604051602001611382939291906149d0565b6040516020818303038152906040529050600061139e826123f3565b90506000816040516020016113b39190614a4d565b6040516020818303038152906040529050809950505050505050505050919050565b6113e76113e0611a39565b8383612786565b5050565b60125481565b6114026113fc611a39565b83611c2e565b611441576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611438906144af565b60405180910390fd5b61144d848484846128f3565b50505050565b606061146661146183610fdc565b61294f565b6040516020016114769190614abb565b6040516020818303038152906040529050919050565b606060006114c2600d600e600f60116040516020016114ae9493929190614c0d565b60405160208183030381529060405261294f565b9050806040516020016114d59190614abb565b60405160208183030381529060405291505090565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016115629190613906565b60206040518083038186803b15801561157a57600080fd5b505afa15801561158e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b29190614ce1565b73ffffffffffffffffffffffffffffffffffffffff1614156115d85760019150506115e6565b6115e28484612ab3565b9150505b92915050565b6115f4611fbd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614d80565b60405180910390fd5b61166d816120a4565b50565b6000600960159054906101000a900460ff161590508080156116a457506001600960149054906101000a900460ff1660ff16105b806116d357506116b330612b47565b1580156116d257506001600960149054906101000a900460ff1660ff16145b5b611712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170990614e12565b60405180910390fd5b6001600960146101000a81548160ff021916908360ff1602179055508015611750576001600960156101000a81548160ff0219169083151502179055505b88600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600c90805190602001906117a7929190613635565b5086600d90805190602001906117be929190613635565b5085601090805190602001906117d5929190613635565b5084600e90805190602001906117ec929190613635565b50836012819055508260138190555081601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061184587612b6a565b61184f600a6118bd565b611858896120a4565b80156118b2576000600960156101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516118a99190614e77565b60405180910390a15b505050505050505050565b6001816000016000828254019250508190555050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561197d57600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611981565b3390505b90565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6119f781612be1565b611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614587565b60405180910390fd5b50565b6000611a436118d3565b905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611abb83610e89565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161415611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6990614f04565b60405180910390fd5b6001611b85611b8087612c22565b612c8a565b83868660405160008152602001604052604051611ba59493929190614f33565b6020604051602081039080840390855afa158015611bc7573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614905095945050505050565b60008183611c189190614f78565b905092915050565b600081600001549050919050565b600080611c3a83610e89565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c7c5750611c7b81856114ea565b5b80611cba57508373ffffffffffffffffffffffffffffffffffffffff16611ca2846108c4565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ce382610e89565b73ffffffffffffffffffffffffffffffffffffffff1614611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3090615040565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da0906150d2565b60405180910390fd5b611db68383836001612cc3565b8273ffffffffffffffffffffffffffffffffffffffff16611dd682610e89565b73ffffffffffffffffffffffffffffffffffffffff1614611e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2390615040565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fb88383836001612cc9565b505050565b611fc5611a39565b73ffffffffffffffffffffffffffffffffffffffff16611fe3611027565b73ffffffffffffffffffffffffffffffffffffffff1614612039576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120309061513e565b60405180910390fd5b565b600080612048600a611c20565b9050612054600a6118bd565b61205e8382612ccf565b80915050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60606000600d61217985612ced565b60405160200161218a9291906151aa565b60405160208183030381529060405290506000600d6040516020016121af9190615271565b6040516020818303038152906040529050600060405180602001604052806000815250905060006040518060400160405280601e81526020017f68747470733a2f2f666f72756d2e6f70656e7a657070656c696e2e636f6d00008152509050600061221988612ced565b9050600061222630612dc5565b9050600060405180602001604052806000815250905060008951111561227f576040518060400160405280600181526020017f2c0000000000000000000000000000000000000000000000000000000000000081525090505b868686868686868f60405160200161229e9897969594939291906153ce565b60405160208183030381529060405297505050505050505092915050565b6060835182846122cc9190614f78565b111561230d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230490615510565b60405180910390fd5b60008267ffffffffffffffff81111561232957612328613997565b5b6040519080825280601f01601f19166020018201604052801561235b5781602001600182028036833780820191505090505b50905060005b838110156123e7578581866123769190614f78565b8151811061238757612386615530565b5b602001015160f81c60f81b8282815181106123a5576123a4615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806123df9061555f565b915050612361565b50809150509392505050565b606060008251905060005b818110801561244f5750600060f81b8482815181106124205761241f615530565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156124615780806001019150506123fe565b60016117e361209f838503028161247b5761247a6155a8565b5b04820101915060008267ffffffffffffffff81111561249d5761249c613997565b5b6040519080825280601f01601f1916602001820160405280156124cf5781602001600182028036833780820191505090505b509050600080600060018603905060005b88518110156125f55760018703925088818151811061250257612501615530565b5b602001015160f81c60f81b60f81c60ff1693505b8183138061252b575060008463ffffffff1614155b156125e55784838151811061254357612542615530565b5b602001015160f81c60f81b60f81c60ff166101000261ffff1684019350603a8463ffffffff1681612577576125766155a8565b5b0660f81b85848151811061258e5761258d615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350603a8463ffffffff16816125d4576125d36155a8565b5b049350828060019003935050612516565b82915080806001019150506124e0565b5060008590505b868110801561264d5750600060f81b85828151811061261e5761261d615530565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561265f5780806001019150506125fc565b858103855103965060008767ffffffffffffffff81111561268357612682613997565b5b6040519080825280601f01601f1916602001820160405280156126b55781602001600182028036833780820191505090505b50905060005b88811015612775576000888483010390506040518060600160405280603a8152602001615bb6603a91398882815181106126f8576126f7615530565b5b602001015160f81c60f81b60f81c60ff168151811061271a57612719615530565b5b602001015160f81c60f81b83838151811061273857612737615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053505080806001019150506126bb565b508098505050505050505050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ec90615623565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128e6919061378c565b60405180910390a3505050565b6128fe848484611cc3565b61290a84848484612df2565b612949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612940906156b5565b60405180910390fd5b50505050565b606060008251141561297257604051806020016040528060008152509050612aae565b6000604051806060016040528060408152602001615b7660409139905060006003600285516129a19190614f78565b6129ab91906156d5565b60046129b79190615706565b67ffffffffffffffff8111156129d0576129cf613997565b5b6040519080825280601f01601f191660200182016040528015612a025781602001600182028036833780820191505090505b509050600182016020820185865187015b80821015612a6e576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050612a13565b5050600386510660018114612a8a5760028114612a9d57612aa5565b603d6001830353603d6002830353612aa5565b603d60018303535b50505080925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600660009054906101000a900460ff1615612bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb1906157ac565b60405180910390fd5b612bc381612f89565b6001600660006101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff16612c0383612067565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6000604051806080016040528060438152602001615ae4604391398051906020012082600001518360200151846040015180519060200120604051602001612c6d94939291906157cc565b604051602081830303815290604052805190602001209050919050565b6000612c94610cea565b82604051602001612ca692919061585d565b604051602081830303815290604052805190602001209050919050565b50505050565b50505050565b612ce982826040518060200160405280600081525061302d565b5050565b606060006001612cfc84613088565b01905060008167ffffffffffffffff811115612d1b57612d1a613997565b5b6040519080825280601f01601f191660200182016040528015612d4d5781602001600182028036833780820191505090505b509050600082602001820190505b600115612dba578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612da457612da36155a8565b5b0494506000851415612db557612dba565b612d5b565b819350505050919050565b6060612deb8273ffffffffffffffffffffffffffffffffffffffff16601460ff166131db565b9050919050565b6000612e138473ffffffffffffffffffffffffffffffffffffffff16612b47565b15612f7c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e3c611a39565b8786866040518563ffffffff1660e01b8152600401612e5e9493929190615894565b602060405180830381600087803b158015612e7857600080fd5b505af1925050508015612ea957506040513d601f19601f82011682018060405250810190612ea691906158f5565b60015b612f2c573d8060008114612ed9576040519150601f19603f3d011682016040523d82523d6000602084013e612ede565b606091505b50600081511415612f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1b906156b5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f81565b600190505b949350505050565b6040518060800160405280604f8152602001615b27604f91398051906020012081805190602001206040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508051906020012030612ff7610d9d565b60001b60405160200161300e959493929190615922565b6040516020818303038152906040528051906020012060078190555050565b6130378383613417565b6130446000848484612df2565b613083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307a906156b5565b60405180910390fd5b505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106130e6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816130dc576130db6155a8565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613123576d04ee2d6d415b85acef81000000008381613119576131186155a8565b5b0492506020810190505b662386f26fc10000831061315257662386f26fc100008381613148576131476155a8565b5b0492506010810190505b6305f5e100831061317b576305f5e1008381613171576131706155a8565b5b0492506008810190505b61271083106131a0576127108381613196576131956155a8565b5b0492506004810190505b606483106131c357606483816131b9576131b86155a8565b5b0492506002810190505b600a83106131d2576001810190505b80915050919050565b6060600060028360026131ee9190615706565b6131f89190614f78565b67ffffffffffffffff81111561321157613210613997565b5b6040519080825280601f01601f1916602001820160405280156132435781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061327b5761327a615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106132df576132de615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261331f9190615706565b6133299190614f78565b90505b60018111156133c9577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811061336b5761336a615530565b5b1a60f81b82828151811061338257613381615530565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806133c290615975565b905061332c565b506000841461340d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613404906159eb565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347e90615a57565b60405180910390fd5b61349081612be1565b156134d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c790615ac3565b60405180910390fd5b6134de600083836001612cc3565b6134e781612be1565b15613527576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351e90615ac3565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613631600083836001612cc9565b5050565b82805461364190614076565b90600052602060002090601f01602090048101928261366357600085556136aa565b82601f1061367c57805160ff19168380011785556136aa565b828001600101855582156136aa579182015b828111156136a957825182559160200191906001019061368e565b5b5090506136b791906136bb565b5090565b5b808211156136d45760008160009055506001016136bc565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613721816136ec565b811461372c57600080fd5b50565b60008135905061373e81613718565b92915050565b60006020828403121561375a576137596136e2565b5b60006137688482850161372f565b91505092915050565b60008115159050919050565b61378681613771565b82525050565b60006020820190506137a1600083018461377d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137e15780820151818401526020810190506137c6565b838111156137f0576000848401525b50505050565b6000601f19601f8301169050919050565b6000613812826137a7565b61381c81856137b2565b935061382c8185602086016137c3565b613835816137f6565b840191505092915050565b6000602082019050818103600083015261385a8184613807565b905092915050565b6000819050919050565b61387581613862565b811461388057600080fd5b50565b6000813590506138928161386c565b92915050565b6000602082840312156138ae576138ad6136e2565b5b60006138bc84828501613883565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138f0826138c5565b9050919050565b613900816138e5565b82525050565b600060208201905061391b60008301846138f7565b92915050565b61392a816138e5565b811461393557600080fd5b50565b60008135905061394781613921565b92915050565b60008060408385031215613964576139636136e2565b5b600061397285828601613938565b925050602061398385828601613883565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139cf826137f6565b810181811067ffffffffffffffff821117156139ee576139ed613997565b5b80604052505050565b6000613a016136d8565b9050613a0d82826139c6565b919050565b600067ffffffffffffffff821115613a2d57613a2c613997565b5b613a36826137f6565b9050602081019050919050565b82818337600083830152505050565b6000613a65613a6084613a12565b6139f7565b905082815260208101848484011115613a8157613a80613992565b5b613a8c848285613a43565b509392505050565b600082601f830112613aa957613aa861398d565b5b8135613ab9848260208601613a52565b91505092915050565b6000819050919050565b613ad581613ac2565b8114613ae057600080fd5b50565b600081359050613af281613acc565b92915050565b600060ff82169050919050565b613b0e81613af8565b8114613b1957600080fd5b50565b600081359050613b2b81613b05565b92915050565b600080600080600060a08688031215613b4d57613b4c6136e2565b5b6000613b5b88828901613938565b955050602086013567ffffffffffffffff811115613b7c57613b7b6136e7565b5b613b8888828901613a94565b9450506040613b9988828901613ae3565b9350506060613baa88828901613ae3565b9250506080613bbb88828901613b1c565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b6000613bef82613bc8565b613bf98185613bd3565b9350613c098185602086016137c3565b613c12816137f6565b840191505092915050565b60006020820190508181036000830152613c378184613be4565b905092915050565b613c4881613862565b82525050565b6000602082019050613c636000830184613c3f565b92915050565b613c7281613ac2565b82525050565b6000602082019050613c8d6000830184613c69565b92915050565b600080600060608486031215613cac57613cab6136e2565b5b6000613cba86828701613938565b9350506020613ccb86828701613938565b9250506040613cdc86828701613883565b9150509250925092565b600060208284031215613cfc57613cfb6136e2565b5b6000613d0a84828501613938565b91505092915050565b613d1c81613771565b8114613d2757600080fd5b50565b600081359050613d3981613d13565b92915050565b60008060408385031215613d5657613d556136e2565b5b6000613d6485828601613938565b9250506020613d7585828601613d2a565b9150509250929050565b60008060008060808587031215613d9957613d986136e2565b5b6000613da787828801613938565b9450506020613db887828801613938565b9350506040613dc987828801613883565b925050606085013567ffffffffffffffff811115613dea57613de96136e7565b5b613df687828801613a94565b91505092959194509250565b60008060408385031215613e1957613e186136e2565b5b6000613e2785828601613938565b9250506020613e3885828601613938565b9150509250929050565b600067ffffffffffffffff821115613e5d57613e5c613997565b5b613e66826137f6565b9050602081019050919050565b6000613e86613e8184613e42565b6139f7565b905082815260208101848484011115613ea257613ea1613992565b5b613ead848285613a43565b509392505050565b600082601f830112613eca57613ec961398d565b5b8135613eda848260208601613e73565b91505092915050565b6000613eee826138c5565b9050919050565b613efe81613ee3565b8114613f0957600080fd5b50565b600081359050613f1b81613ef5565b92915050565b600080600080600080600080610100898b031215613f4257613f416136e2565b5b6000613f508b828c01613938565b985050602089013567ffffffffffffffff811115613f7157613f706136e7565b5b613f7d8b828c01613eb5565b975050604089013567ffffffffffffffff811115613f9e57613f9d6136e7565b5b613faa8b828c01613eb5565b965050606089013567ffffffffffffffff811115613fcb57613fca6136e7565b5b613fd78b828c01613eb5565b955050608089013567ffffffffffffffff811115613ff857613ff76136e7565b5b6140048b828c01613eb5565b94505060a06140158b828c01613883565b93505060c06140268b828c01613883565b92505060e06140378b828c01613f0c565b9150509295985092959890939650565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061408e57607f821691505b602082108114156140a2576140a1614047565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006141046021836137b2565b915061410f826140a8565b604082019050919050565b60006020820190508181036000830152614133816140f7565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614196603d836137b2565b91506141a18261413a565b604082019050919050565b600060208201905081810360008301526141c581614189565b9050919050565b7f5369676e657220616e64207369676e617475726520646f206e6f74206d61746360008201527f6800000000000000000000000000000000000000000000000000000000000000602082015250565b60006142286021836137b2565b9150614233826141cc565b604082019050919050565b600060208201905081810360008301526142578161421b565b9050919050565b61426781613ee3565b82525050565b600060608201905061428260008301866138f7565b61428f602083018561425e565b81810360408301526142a18184613be4565b9050949350505050565b600081905092915050565b60006142c182613bc8565b6142cb81856142ab565b93506142db8185602086016137c3565b80840191505092915050565b60008160601b9050919050565b60006142ff826142e7565b9050919050565b6000614311826142f4565b9050919050565b614329614324826138e5565b614306565b82525050565b600061433b82856142b6565b91506143478284614318565b6014820191508190509392505050565b600061436382846142b6565b915081905092915050565b7f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000600082015250565b60006143a4601c836137b2565b91506143af8261436e565b602082019050919050565b600060208201905081810360008301526143d381614397565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061441482613862565b915061441f83613862565b925082821015614432576144316143da565b5b828203905092915050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614499602d836137b2565b91506144a48261443d565b604082019050919050565b600060208201905081810360008301526144c88161448c565b9050919050565b7f4d6178206d696e7420636f756e74207265616368656400000000000000000000600082015250565b60006145056016836137b2565b9150614510826144cf565b602082019050919050565b60006020820190508181036000830152614534816144f8565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006145716018836137b2565b915061457c8261453b565b602082019050919050565b600060208201905081810360008301526145a081614564565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006146036029836137b2565b915061460e826145a7565b604082019050919050565b60006020820190508181036000830152614632816145f6565b9050919050565b600081905092915050565b7f22646964223a2200000000000000000000000000000000000000000000000000600082015250565b600061467a600783614639565b915061468582614644565b600782019050919050565b600061469b826137a7565b6146a58185614639565b93506146b58185602086016137c3565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b60006146f7600283614639565b9150614702826146c1565b600282019050919050565b7f22696d616765223a220000000000000000000000000000000000000000000000600082015250565b6000614743600983614639565b915061474e8261470d565b600982019050919050565b60008190508160005260206000209050919050565b6000815461477b81614076565b6147858186614639565b945060018216600081146147a057600181146147b1576147e4565b60ff198316865281860193506147e4565b6147ba85614759565b60005b838110156147dc578154818901526001820191506020810190506147bd565b838801955050505b50505092915050565b7f3f617373657449643d0000000000000000000000000000000000000000000000600082015250565b6000614823600983614639565b915061482e826147ed565b600982019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061486f600183614639565b915061487a82614839565b600182019050919050565b60006148908261466d565b915061489c8286614690565b91506148a7826146ea565b91506148b282614736565b91506148be828561476e565b91506148c982614816565b91506148d58284614690565b91506148e082614862565b9150819050949350505050565b7f4e6f7420656e6f75676820746f6b656e2073656e740000000000000000000000600082015250565b60006149236015836137b2565b915061492e826148ed565b602082019050919050565b6000602082019050818103600083015261495281614916565b9050919050565b60006149658284614690565b915081905092915050565b6000819050919050565b61498b61498682613ac2565b614970565b82525050565b600061499d828461497a565b60208201915081905092915050565b60006149b882856142b6565b91506149c482846142b6565b91508190509392505050565b60006149dc82866142b6565b91506149e882856142b6565b91506149f482846142b6565b9150819050949350505050565b7f7a00000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a37600183614639565b9150614a4282614a01565b600182019050919050565b6000614a5882614a2a565b9150614a648284614690565b915081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614aa5601d83614639565b9150614ab082614a6f565b601d82019050919050565b6000614ac682614a98565b9150614ad28284614690565b915081905092915050565b7f7b226e616d65223a220000000000000000000000000000000000000000000000600082015250565b6000614b13600983614639565b9150614b1e82614add565b600982019050919050565b7f222c226465736372697074696f6e223a22000000000000000000000000000000600082015250565b6000614b5f601183614639565b9150614b6a82614b29565b601182019050919050565b7f2265787465726e616c5f6c696e6b223a22000000000000000000000000000000600082015250565b6000614bab601183614639565b9150614bb682614b75565b601182019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b6000614bf7600183614639565b9150614c0282614bc1565b600182019050919050565b6000614c1882614b06565b9150614c24828761476e565b9150614c2f82614b52565b9150614c3b828661476e565b9150614c46826146ea565b9150614c5182614736565b9150614c5d828561476e565b9150614c68826146ea565b9150614c7382614b9e565b9150614c7f828461476e565b9150614c8a82614862565b9150614c9582614bea565b915081905095945050505050565b6000614cae826138e5565b9050919050565b614cbe81614ca3565b8114614cc957600080fd5b50565b600081519050614cdb81614cb5565b92915050565b600060208284031215614cf757614cf66136e2565b5b6000614d0584828501614ccc565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d6a6026836137b2565b9150614d7582614d0e565b604082019050919050565b60006020820190508181036000830152614d9981614d5d565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614dfc602e836137b2565b9150614e0782614da0565b604082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b6000819050919050565b6000819050919050565b6000614e61614e5c614e5784614e32565b614e3c565b613af8565b9050919050565b614e7181614e46565b82525050565b6000602082019050614e8c6000830184614e68565b92915050565b7f4e61746976654d6574615472616e73616374696f6e3a20494e56414c49445f5360008201527f49474e4552000000000000000000000000000000000000000000000000000000602082015250565b6000614eee6025836137b2565b9150614ef982614e92565b604082019050919050565b60006020820190508181036000830152614f1d81614ee1565b9050919050565b614f2d81613af8565b82525050565b6000608082019050614f486000830187613c69565b614f556020830186614f24565b614f626040830185613c69565b614f6f6060830184613c69565b95945050505050565b6000614f8382613862565b9150614f8e83613862565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fc357614fc26143da565b5b828201905092915050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061502a6025836137b2565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150bc6024836137b2565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006151286020836137b2565b9150615133826150f2565b602082019050919050565b600060208201905081810360008301526151578161511b565b9050919050565b7f2023000000000000000000000000000000000000000000000000000000000000600082015250565b6000615194600283614639565b915061519f8261515e565b600282019050919050565b60006151b6828561476e565b91506151c182615187565b91506151cd8284614690565b91508190509392505050565b7f546869732069732061204e4654206f6620000000000000000000000000000000600082015250565b600061520f601183614639565b915061521a826151d9565b601182019050919050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b600061525b600183614639565b915061526682615225565b600182019050919050565b600061527c82615202565b9150615288828461476e565b91506152938261524e565b915081905092915050565b7f2261747472696275746573223a22000000000000000000000000000000000000600082015250565b60006152d4600e83614639565b91506152df8261529e565b600e82019050919050565b7f2265787465726e616c5f75726c223a2200000000000000000000000000000000600082015250565b6000615320601083614639565b915061532b826152ea565b601082019050919050565b7f22736e223a220000000000000000000000000000000000000000000000000000600082015250565b600061536c600683614639565b915061537782615336565b600682019050919050565b7f22636f6e747261637441646472657373223a2200000000000000000000000000600082015250565b60006153b8601383614639565b91506153c382615382565b601382019050919050565b60006153d982614b06565b91506153e5828b614690565b91506153f082614b52565b91506153fc828a614690565b9150615407826146ea565b9150615412826152c7565b915061541e8289614690565b9150615429826146ea565b915061543482615313565b91506154408288614690565b915061544b826146ea565b91506154568261535f565b91506154628287614690565b915061546d826146ea565b9150615478826153ab565b91506154848286614690565b915061548f82614862565b915061549b8285614690565b91506154a78284614690565b91506154b282614bea565b91508190509998505050505050505050565b7f496e76616c696420736c6963652072616e676500000000000000000000000000600082015250565b60006154fa6013836137b2565b9150615505826154c4565b602082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061556a82613862565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561559d5761559c6143da565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061560d6019836137b2565b9150615618826155d7565b602082019050919050565b6000602082019050818103600083015261563c81615600565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061569f6032836137b2565b91506156aa82615643565b604082019050919050565b600060208201905081810360008301526156ce81615692565b9050919050565b60006156e082613862565b91506156eb83613862565b9250826156fb576156fa6155a8565b5b828204905092915050565b600061571182613862565b915061571c83613862565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615755576157546143da565b5b828202905092915050565b7f616c726561647920696e69746564000000000000000000000000000000000000600082015250565b6000615796600e836137b2565b91506157a182615760565b602082019050919050565b600060208201905081810360008301526157c581615789565b9050919050565b60006080820190506157e16000830187613c69565b6157ee6020830186613c3f565b6157fb60408301856138f7565b6158086060830184613c69565b95945050505050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b6000615847600283614639565b915061585282615811565b600282019050919050565b60006158688261583a565b9150615874828561497a565b602082019150615884828461497a565b6020820191508190509392505050565b60006080820190506158a960008301876138f7565b6158b660208301866138f7565b6158c36040830185613c3f565b81810360608301526158d58184613be4565b905095945050505050565b6000815190506158ef81613718565b92915050565b60006020828403121561590b5761590a6136e2565b5b6000615919848285016158e0565b91505092915050565b600060a0820190506159376000830188613c69565b6159446020830187613c69565b6159516040830186613c69565b61595e60608301856138f7565b61596b6080830184613c69565b9695505050505050565b600061598082613862565b91506000821415615994576159936143da565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b60006159d56020836137b2565b91506159e08261599f565b602082019050919050565b60006020820190508181036000830152615a04816159c8565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615a416020836137b2565b9150615a4c82615a0b565b602082019050919050565b60006020820190508181036000830152615a7081615a34565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615aad601c836137b2565b9150615ab882615a77565b602082019050919050565b60006020820190508181036000830152615adc81615aa0565b905091905056fe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e617475726529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c6164647265737320766572696679696e67436f6e74726163742c627974657333322073616c74294142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f31323334353637383941424344454647484a4b4c4d4e505152535455565758595a6162636465666768696a6b6d6e6f707172737475767778797aa2646970667358221220461cbbb2f48f95885ff0ce0a4c024c1682a66d97b1a7a89861dc773d3f92f22e64736f6c63430008090033";
797
+ var linkReferences$1 = {
798
+ };
799
+ var deployedLinkReferences$1 = {
800
+ };
801
+ var require$$8 = {
802
+ _format: _format$1,
803
+ contractName: contractName$1,
804
+ sourceName: sourceName$1,
805
+ abi: abi$1,
806
+ bytecode: bytecode$1,
807
+ deployedBytecode: deployedBytecode$1,
808
+ linkReferences: linkReferences$1,
809
+ deployedLinkReferences: deployedLinkReferences$1
810
+ };
811
+
812
+ var _format = "hh-sol-artifact-1";
813
+ var contractName = "ERC721DIDFactory";
814
+ var sourceName = "src/ERC721DIDFactory.sol";
815
+ var abi = [
816
+ {
817
+ inputs: [
818
+ {
819
+ internalType: "address",
820
+ name: "_implementation",
821
+ type: "address"
822
+ }
823
+ ],
824
+ stateMutability: "nonpayable",
825
+ type: "constructor"
826
+ },
827
+ {
828
+ anonymous: false,
829
+ inputs: [
830
+ {
831
+ indexed: false,
832
+ internalType: "address",
833
+ name: "contractAddress",
834
+ type: "address"
835
+ }
836
+ ],
837
+ name: "Created",
838
+ type: "event"
839
+ },
840
+ {
841
+ anonymous: false,
842
+ inputs: [
843
+ {
844
+ indexed: true,
845
+ internalType: "address",
846
+ name: "previousOwner",
847
+ type: "address"
848
+ },
849
+ {
850
+ indexed: true,
851
+ internalType: "address",
852
+ name: "newOwner",
853
+ type: "address"
854
+ }
855
+ ],
856
+ name: "OwnershipTransferred",
857
+ type: "event"
858
+ },
859
+ {
860
+ stateMutability: "nonpayable",
861
+ type: "fallback"
862
+ },
863
+ {
864
+ inputs: [
865
+ {
866
+ internalType: "address",
867
+ name: "_proxyRegistryAddress",
868
+ type: "address"
869
+ },
870
+ {
871
+ internalType: "string",
872
+ name: "_baseImageURI",
873
+ type: "string"
874
+ },
875
+ {
876
+ internalType: "string",
877
+ name: "_contractName",
878
+ type: "string"
879
+ },
880
+ {
881
+ internalType: "string",
882
+ name: "_contractSymbol",
883
+ type: "string"
884
+ },
885
+ {
886
+ internalType: "string",
887
+ name: "_contractDescription",
888
+ type: "string"
889
+ },
890
+ {
891
+ internalType: "uint256",
892
+ name: "_totalLimit",
893
+ type: "uint256"
894
+ },
895
+ {
896
+ internalType: "uint256",
897
+ name: "_price",
898
+ type: "uint256"
899
+ },
900
+ {
901
+ internalType: "address payable",
902
+ name: "_transferTokenAddress",
903
+ type: "address"
904
+ }
905
+ ],
906
+ name: "create",
907
+ outputs: [
908
+ ],
909
+ stateMutability: "nonpayable",
910
+ type: "function"
911
+ },
912
+ {
913
+ inputs: [
914
+ ],
915
+ name: "implementation",
916
+ outputs: [
917
+ {
918
+ internalType: "address",
919
+ name: "",
920
+ type: "address"
921
+ }
922
+ ],
923
+ stateMutability: "view",
924
+ type: "function"
925
+ },
926
+ {
927
+ inputs: [
928
+ ],
929
+ name: "owner",
930
+ outputs: [
931
+ {
932
+ internalType: "address",
933
+ name: "",
934
+ type: "address"
935
+ }
936
+ ],
937
+ stateMutability: "view",
938
+ type: "function"
939
+ },
940
+ {
941
+ inputs: [
942
+ ],
943
+ name: "renounceOwnership",
944
+ outputs: [
945
+ ],
946
+ stateMutability: "nonpayable",
947
+ type: "function"
948
+ },
949
+ {
950
+ inputs: [
951
+ {
952
+ internalType: "address",
953
+ name: "_implementation",
954
+ type: "address"
955
+ }
956
+ ],
957
+ name: "setImplementation",
958
+ outputs: [
959
+ ],
960
+ stateMutability: "nonpayable",
961
+ type: "function"
962
+ },
963
+ {
964
+ inputs: [
965
+ {
966
+ internalType: "address",
967
+ name: "newOwner",
968
+ type: "address"
969
+ }
970
+ ],
971
+ name: "transferOwnership",
972
+ outputs: [
973
+ ],
974
+ stateMutability: "nonpayable",
975
+ type: "function"
976
+ }
977
+ ];
978
+ var bytecode = "0x608060405234801561001057600080fd5b5060405162000e5638038062000e56833981810160405281019061003491906101c6565b61005061004561009760201b60201c565b61009f60201b60201c565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506101f3565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061019382610168565b9050919050565b6101a381610188565b81146101ae57600080fd5b50565b6000815190506101c08161019a565b92915050565b6000602082840312156101dc576101db610163565b5b60006101ea848285016101b1565b91505092915050565b610c5380620002036000396000f3fe608060405234801561001057600080fd5b50600436106100665760003560e01c80635c60da1b146100a2578063715018a6146100c05780638da5cb5b146100ca578063c137ecd7146100e8578063d784d42614610104578063f2fde38b1461012057610067565b5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610099906105bb565b60405180910390fd5b6100aa61013c565b6040516100b7919061061c565b60405180910390f35b6100c8610162565b005b6100d2610176565b6040516100df919061061c565b60405180910390f35b61010260048036038101906100fd9190610831565b61019f565b005b61011e60048036038101906101199190610957565b610289565b005b61013a60048036038101906101359190610957565b6102d5565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61016a610359565b61017460006103d7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006101cc600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661049b565b90508073ffffffffffffffffffffffffffffffffffffffff1663f79da28a8a8a8a8a8a8a8a8a6040518963ffffffff1660e01b8152600401610215989796959493929190610a19565b600060405180830381600087803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b505050507f1449abf21e49fd025f33495e77f7b1461caefdd3d4bb646424a3f445c4576a5b81604051610276919061061c565b60405180910390a1505050505050505050565b610291610359565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6102dd610359565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561034d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034490610b25565b60405180910390fd5b610356816103d7565b50565b610361610556565b73ffffffffffffffffffffffffffffffffffffffff1661037f610176565b73ffffffffffffffffffffffffffffffffffffffff16146103d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cc90610b91565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054890610bfd565b60405180910390fd5b919050565b600033905090565b600082825260208201905092915050565b7f556e6b6e6f772066756e6374696f6e0000000000000000000000000000000000600082015250565b60006105a5600f8361055e565b91506105b08261056f565b602082019050919050565b600060208201905081810360008301526105d481610598565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610606826105db565b9050919050565b610616816105fb565b82525050565b6000602082019050610631600083018461060d565b92915050565b6000604051905090565b600080fd5b600080fd5b610654816105fb565b811461065f57600080fd5b50565b6000813590506106718161064b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106ca82610681565b810181811067ffffffffffffffff821117156106e9576106e8610692565b5b80604052505050565b60006106fc610637565b905061070882826106c1565b919050565b600067ffffffffffffffff82111561072857610727610692565b5b61073182610681565b9050602081019050919050565b82818337600083830152505050565b600061076061075b8461070d565b6106f2565b90508281526020810184848401111561077c5761077b61067c565b5b61078784828561073e565b509392505050565b600082601f8301126107a4576107a3610677565b5b81356107b484826020860161074d565b91505092915050565b6000819050919050565b6107d0816107bd565b81146107db57600080fd5b50565b6000813590506107ed816107c7565b92915050565b60006107fe826105db565b9050919050565b61080e816107f3565b811461081957600080fd5b50565b60008135905061082b81610805565b92915050565b600080600080600080600080610100898b03121561085257610851610641565b5b60006108608b828c01610662565b985050602089013567ffffffffffffffff81111561088157610880610646565b5b61088d8b828c0161078f565b975050604089013567ffffffffffffffff8111156108ae576108ad610646565b5b6108ba8b828c0161078f565b965050606089013567ffffffffffffffff8111156108db576108da610646565b5b6108e78b828c0161078f565b955050608089013567ffffffffffffffff81111561090857610907610646565b5b6109148b828c0161078f565b94505060a06109258b828c016107de565b93505060c06109368b828c016107de565b92505060e06109478b828c0161081c565b9150509295985092959890939650565b60006020828403121561096d5761096c610641565b5b600061097b84828501610662565b91505092915050565b600081519050919050565b60005b838110156109ad578082015181840152602081019050610992565b838111156109bc576000848401525b50505050565b60006109cd82610984565b6109d7818561055e565b93506109e781856020860161098f565b6109f081610681565b840191505092915050565b610a04816107bd565b82525050565b610a13816107f3565b82525050565b600061010082019050610a2f600083018b61060d565b8181036020830152610a41818a6109c2565b90508181036040830152610a5581896109c2565b90508181036060830152610a6981886109c2565b90508181036080830152610a7d81876109c2565b9050610a8c60a08301866109fb565b610a9960c08301856109fb565b610aa660e0830184610a0a565b9998505050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b0f60268361055e565b9150610b1a82610ab3565b604082019050919050565b60006020820190508181036000830152610b3e81610b02565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b7b60208361055e565b9150610b8682610b45565b602082019050919050565b60006020820190508181036000830152610baa81610b6e565b9050919050565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b6000610be760168361055e565b9150610bf282610bb1565b602082019050919050565b60006020820190508181036000830152610c1681610bda565b905091905056fea2646970667358221220557868f3e08664e3b092710a8b1628826491347e6b43951266d630d283f43d0064736f6c63430008090033";
979
+ var deployedBytecode = "0x608060405234801561001057600080fd5b50600436106100665760003560e01c80635c60da1b146100a2578063715018a6146100c05780638da5cb5b146100ca578063c137ecd7146100e8578063d784d42614610104578063f2fde38b1461012057610067565b5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610099906105bb565b60405180910390fd5b6100aa61013c565b6040516100b7919061061c565b60405180910390f35b6100c8610162565b005b6100d2610176565b6040516100df919061061c565b60405180910390f35b61010260048036038101906100fd9190610831565b61019f565b005b61011e60048036038101906101199190610957565b610289565b005b61013a60048036038101906101359190610957565b6102d5565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61016a610359565b61017460006103d7565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006101cc600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661049b565b90508073ffffffffffffffffffffffffffffffffffffffff1663f79da28a8a8a8a8a8a8a8a8a6040518963ffffffff1660e01b8152600401610215989796959493929190610a19565b600060405180830381600087803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b505050507f1449abf21e49fd025f33495e77f7b1461caefdd3d4bb646424a3f445c4576a5b81604051610276919061061c565b60405180910390a1505050505050505050565b610291610359565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6102dd610359565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561034d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161034490610b25565b60405180910390fd5b610356816103d7565b50565b610361610556565b73ffffffffffffffffffffffffffffffffffffffff1661037f610176565b73ffffffffffffffffffffffffffffffffffffffff16146103d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cc90610b91565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f09050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054890610bfd565b60405180910390fd5b919050565b600033905090565b600082825260208201905092915050565b7f556e6b6e6f772066756e6374696f6e0000000000000000000000000000000000600082015250565b60006105a5600f8361055e565b91506105b08261056f565b602082019050919050565b600060208201905081810360008301526105d481610598565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610606826105db565b9050919050565b610616816105fb565b82525050565b6000602082019050610631600083018461060d565b92915050565b6000604051905090565b600080fd5b600080fd5b610654816105fb565b811461065f57600080fd5b50565b6000813590506106718161064b565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6106ca82610681565b810181811067ffffffffffffffff821117156106e9576106e8610692565b5b80604052505050565b60006106fc610637565b905061070882826106c1565b919050565b600067ffffffffffffffff82111561072857610727610692565b5b61073182610681565b9050602081019050919050565b82818337600083830152505050565b600061076061075b8461070d565b6106f2565b90508281526020810184848401111561077c5761077b61067c565b5b61078784828561073e565b509392505050565b600082601f8301126107a4576107a3610677565b5b81356107b484826020860161074d565b91505092915050565b6000819050919050565b6107d0816107bd565b81146107db57600080fd5b50565b6000813590506107ed816107c7565b92915050565b60006107fe826105db565b9050919050565b61080e816107f3565b811461081957600080fd5b50565b60008135905061082b81610805565b92915050565b600080600080600080600080610100898b03121561085257610851610641565b5b60006108608b828c01610662565b985050602089013567ffffffffffffffff81111561088157610880610646565b5b61088d8b828c0161078f565b975050604089013567ffffffffffffffff8111156108ae576108ad610646565b5b6108ba8b828c0161078f565b965050606089013567ffffffffffffffff8111156108db576108da610646565b5b6108e78b828c0161078f565b955050608089013567ffffffffffffffff81111561090857610907610646565b5b6109148b828c0161078f565b94505060a06109258b828c016107de565b93505060c06109368b828c016107de565b92505060e06109478b828c0161081c565b9150509295985092959890939650565b60006020828403121561096d5761096c610641565b5b600061097b84828501610662565b91505092915050565b600081519050919050565b60005b838110156109ad578082015181840152602081019050610992565b838111156109bc576000848401525b50505050565b60006109cd82610984565b6109d7818561055e565b93506109e781856020860161098f565b6109f081610681565b840191505092915050565b610a04816107bd565b82525050565b610a13816107f3565b82525050565b600061010082019050610a2f600083018b61060d565b8181036020830152610a41818a6109c2565b90508181036040830152610a5581896109c2565b90508181036060830152610a6981886109c2565b90508181036080830152610a7d81876109c2565b9050610a8c60a08301866109fb565b610a9960c08301856109fb565b610aa660e0830184610a0a565b9998505050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b0f60268361055e565b9150610b1a82610ab3565b604082019050919050565b60006020820190508181036000830152610b3e81610b02565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610b7b60208361055e565b9150610b8682610b45565b602082019050919050565b60006020820190508181036000830152610baa81610b6e565b9050919050565b7f455243313136373a20637265617465206661696c656400000000000000000000600082015250565b6000610be760168361055e565b9150610bf282610bb1565b602082019050919050565b60006020820190508181036000830152610c1681610bda565b905091905056fea2646970667358221220557868f3e08664e3b092710a8b1628826491347e6b43951266d630d283f43d0064736f6c63430008090033";
980
+ var linkReferences = {
981
+ };
982
+ var deployedLinkReferences = {
983
+ };
984
+ var require$$9 = {
985
+ _format: _format,
986
+ contractName: contractName,
987
+ sourceName: sourceName,
988
+ abi: abi,
989
+ bytecode: bytecode,
990
+ deployedBytecode: deployedBytecode,
991
+ linkReferences: linkReferences,
992
+ deployedLinkReferences: deployedLinkReferences
993
+ };
994
+
995
+ var require$$10 = [
996
+ {
997
+ chainId: "5",
998
+ chainName: "Goerli",
999
+ contractFactoryAddress: "0x4c093eAf8d569f6b2dC5a217D25cb3f0B60918C3",
1000
+ isTest: true,
1001
+ networkName: "goerli",
1002
+ symbol: "ETH (Goerli)",
1003
+ defaultRPC: "https://goerli.infura.io/v3/31276ea517a941c5b91d914fab83494e",
1004
+ explorer: "https://goerli.etherscan.io",
1005
+ icon: "eth",
1006
+ enable: true,
1007
+ decimal: 18
1008
+ },
1009
+ {
1010
+ chainId: "84531",
1011
+ chainName: "Base Goerli",
1012
+ contractFactoryAddress: "0xe83044a18dAb8F28F99F22f413C3856A0e39B153",
1013
+ isTest: true,
1014
+ networkName: "base-goerli",
1015
+ symbol: "ETH (Base Goerli)",
1016
+ defaultRPC: "https://goerli.base.org",
1017
+ explorer: "https://goerli.basescan.org",
1018
+ icon: "base",
1019
+ enable: true,
1020
+ decimal: 18
1021
+ },
1022
+ {
1023
+ chainId: "97",
1024
+ chainName: "BNB (Binance Smart Chain)",
1025
+ contractFactoryAddress: "0xf13AAEF9071498eE61D0e6390970e0629c60a53C",
1026
+ isTest: true,
1027
+ networkName: "bsc-test",
1028
+ symbol: "BNB",
1029
+ defaultRPC: "https://bsc.getblock.io/13042277-cdaa-47dc-acda-5a0900eaf4ae/testnet",
1030
+ explorer: "https://testnet.bscscan.com",
1031
+ icon: "bnb",
1032
+ enable: true,
1033
+ decimal: 18
1034
+ },
1035
+ {
1036
+ chainId: "11155111",
1037
+ chainName: "Sepolia",
1038
+ contractFactoryAddress: "0xf13AAEF9071498eE61D0e6390970e0629c60a53C",
1039
+ isTest: true,
1040
+ networkName: "sepolia",
1041
+ symbol: "ETH (Sepolia)",
1042
+ defaultRPC: "https://sepolia.infura.io/v3/31276ea517a941c5b91d914fab83494e",
1043
+ explorer: "https://sepolia.etherscan.io",
1044
+ icon: "eth",
1045
+ enable: false,
1046
+ decimal: 18
1047
+ }
1048
+ ];
1049
+
1050
+ var require$$11 = [
1051
+ {
1052
+ chainId: "31337",
1053
+ chainName: "Localhost",
1054
+ contractFactoryAddress: "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512",
1055
+ isTest: true,
1056
+ networkName: "localhost",
1057
+ symbol: "ETH (Localhost)",
1058
+ defaultRPC: "http://localhost:8545",
1059
+ explorer: "http://localhost:8545",
1060
+ icon: "eth",
1061
+ enable: true,
1062
+ decimal: 18
1063
+ }
1064
+ ];
1065
+
1066
+ /* eslint-disable no-unused-vars */
1067
+
1068
+ /* eslint-disable no-undef */
1069
+ require$$0.config();
1070
+ const ethers = require$$1;
1071
+ const axios = require$$2;
1072
+ const waitFor = require$$3;
1073
+ const { toBase58 } = require$$4;
1074
+ const upperFirst = require$$5;
1075
+ const keyBy = require$$6;
1076
+ const pick = require$$7;
1077
+ const ERC721DID = require$$8;
1078
+ const ERC721DIDFactory = require$$9;
1079
+
1080
+ const INFURA_PROJECT_ID = '31276ea517a941c5b91d914fab83494e';
1081
+
1082
+ const CHAIN_MAP = {
1083
+ 1: {
1084
+ networkName: 'mainnet',
1085
+ chainName: 'Ethereum Mainnet',
1086
+ chainId: '1',
1087
+ symbol: 'ETH',
1088
+ defaultRPC: `https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}`,
1089
+ explorer: 'https://etherscan.io',
1090
+ icon: 'eth',
1091
+ enable: true,
1092
+ decimal: 18,
1093
+ },
1094
+ 5: {
1095
+ networkName: 'goerli',
1096
+ chainName: 'Goerli',
1097
+ chainId: '5',
1098
+ symbol: 'ETH (Goerli)',
1099
+ defaultRPC: `https://goerli.infura.io/v3/${INFURA_PROJECT_ID}`,
1100
+ explorer: 'https://goerli.etherscan.io',
1101
+ icon: 'eth',
1102
+ enable: true,
1103
+ decimal: 18,
1104
+ },
1105
+ 31337: {
1106
+ networkName: 'localhost',
1107
+ chainName: 'Localhost',
1108
+ chainId: '31337',
1109
+ symbol: 'ETH (Localhost)',
1110
+ defaultRPC: 'http://localhost:8545',
1111
+ explorer: 'http://localhost:8545',
1112
+ icon: 'eth',
1113
+ enable: true,
1114
+ decimal: 18,
1115
+ },
1116
+ 84531: {
1117
+ networkName: 'base-goerli',
1118
+ chainName: 'Base Goerli',
1119
+ chainId: '84531',
1120
+ symbol: 'ETH (Base Goerli)',
1121
+ defaultRPC: 'https://goerli.base.org',
1122
+ explorer: 'https://goerli.basescan.org',
1123
+ icon: 'base',
1124
+ enable: true,
1125
+ decimal: 18,
1126
+ },
1127
+ 11155111: {
1128
+ networkName: 'sepolia',
1129
+ chainName: 'Sepolia',
1130
+ chainId: '11155111',
1131
+ symbol: 'ETH (Sepolia)',
1132
+ defaultRPC: `https://sepolia.infura.io/v3/${INFURA_PROJECT_ID}`,
1133
+ explorer: 'https://sepolia.etherscan.io',
1134
+ icon: 'eth',
1135
+ enable: false, // FIXME
1136
+ decimal: 18,
1137
+ },
1138
+ 97: {
1139
+ networkName: 'bsc-test',
1140
+ chainName: 'BNB (Binance Smart Chain)',
1141
+ chainId: '97',
1142
+ symbol: 'BNB',
1143
+ defaultRPC: 'https://bsc.getblock.io/13042277-cdaa-47dc-acda-5a0900eaf4ae/testnet',
1144
+ explorer: 'https://testnet.bscscan.com',
1145
+ icon: 'bnb',
1146
+ enable: true,
1147
+ decimal: 18,
1148
+ },
1149
+ };
1150
+
1151
+ const CUSTOM_CHAIN_MAP = {};
1152
+
1153
+ let isLocal = false;
1154
+
1155
+ function getProvider(chainId) {
1156
+ const { defaultRPC } = getChainInfo(chainId);
1157
+ return new ethers.providers.JsonRpcProvider(defaultRPC);
1158
+ }
1159
+
1160
+ async function getContract({ contractAddress, chainId, signer } = {}) {
1161
+ const provider = getProvider(chainId);
1162
+
1163
+ const contract = new ethers.Contract(contractAddress, ERC721DID.abi, signer || provider);
1164
+
1165
+ return contract;
1166
+ }
1167
+
1168
+ async function getContractFactory({ contractAddress, chainId, signer } = {}) {
1169
+ const provider = getProvider(chainId);
1170
+
1171
+ const contract = new ethers.Contract(contractAddress, ERC721DIDFactory.abi, signer || provider);
1172
+
1173
+ return contract;
1174
+ }
1175
+
1176
+ async function getGasPrice({ provider }) {
1177
+ const gwei = 1000000000;
1178
+
1179
+ const chainId = await getChainId({ contract });
1180
+
1181
+ // ethereum
1182
+ if ([1, '1', 'mainnet', 'eth-main'].includes(chainId)) {
1183
+ const { data } = await axios.get(`https://token-data.arcblock.io/api/gas-prices?chainId=${chainId}`);
1184
+ return (data.fast / 10) * gwei;
1185
+ }
1186
+
1187
+ if ([5, '5', 'goerli', 'eth-goerli'].includes(chainId)) {
1188
+ const { gasPrice } = await provider.getFeeData();
1189
+ return gasPrice.toString();
1190
+ }
1191
+
1192
+ // hardhat
1193
+ if ([31337, '31337', 'hardhat'].includes(chainId)) {
1194
+ return 1 * gwei;
1195
+ }
1196
+
1197
+ // TODO: bsc
1198
+ // TODO: matic
1199
+ // TODO: fantom
1200
+
1201
+ return 1 * gwei;
1202
+ }
1203
+
1204
+ async function getTxData(params = {}) {
1205
+ const { contract, fn, args, value } = params;
1206
+ const txData = contract.interface.encodeFunctionData(fn, args);
1207
+
1208
+ const chainId = await getChainId({ contract });
1209
+
1210
+ // const gasPrice = await getGasPrice({ provider: contract.provider });
1211
+ // const gasPriceAsGwei = Math.ceil(ethers.utils.formatUnits(gasPrice, 'gwei').toString());
1212
+
1213
+ const extraEtherValueMap = value
1214
+ ? {
1215
+ value,
1216
+ }
1217
+ : {};
1218
+
1219
+ const gasLimit = await contract.provider
1220
+ .estimateGas({
1221
+ to: contract.address,
1222
+ data: txData,
1223
+ ...extraEtherValueMap,
1224
+ })
1225
+ .then((res) => res.toString());
1226
+
1227
+ return toBase58(
1228
+ Buffer.from(
1229
+ JSON.stringify({
1230
+ network: chainId,
1231
+ tx: {
1232
+ to: contract.address,
1233
+ value: '0',
1234
+ ...extraEtherValueMap,
1235
+ gasLimit,
1236
+ data: txData,
1237
+ },
1238
+ }),
1239
+ 'utf-8'
1240
+ )
1241
+ );
1242
+ }
1243
+
1244
+ const waitForTxReceipt = async ({ contract, txHash }) => {
1245
+ let tx = {};
1246
+ let receipt = {};
1247
+ const txHashTemp = txHash;
1248
+
1249
+ await waitFor(
1250
+ async () => {
1251
+ // ethers getTransaction
1252
+ tx = await contract.provider.getTransaction(txHashTemp);
1253
+ return !!tx?.blockNumber;
1254
+ },
1255
+ { interval: 3000, timeout: 30 * 60 * 1000 }
1256
+ );
1257
+
1258
+ await waitFor(
1259
+ async () => {
1260
+ // ethers getTransactionReceipt
1261
+ const originReceipt = await contract.provider.getTransactionReceipt(txHashTemp);
1262
+ receipt = {
1263
+ ...originReceipt,
1264
+ parseLog: originReceipt?.logs?.map((log) => {
1265
+ try {
1266
+ return contract.interface.parseLog(log);
1267
+ } catch (_error) {
1268
+ return log;
1269
+ }
1270
+ }),
1271
+ };
1272
+ return !!receipt?.blockNumber;
1273
+ },
1274
+ { interval: 3000, timeout: 30 * 60 * 1000 }
1275
+ );
1276
+
1277
+ return receipt;
1278
+ };
1279
+
1280
+ const onContractFilter = async ({ contract, fn, onSuccess }) => {
1281
+ contract.provider.on(
1282
+ {
1283
+ address: contract.address,
1284
+ topics: [contract.interface.getEventTopic(upperFirst(fn))],
1285
+ },
1286
+ async (res) => {
1287
+ await onSuccess(res);
1288
+ }
1289
+ );
1290
+ };
1291
+
1292
+ // @private
1293
+ const getChainIdByChainName = (chainName) => {
1294
+ return keyBy(
1295
+ {
1296
+ ...CHAIN_MAP,
1297
+ ...CUSTOM_CHAIN_MAP,
1298
+ },
1299
+ 'networkName'
1300
+ )[chainName].chainId;
1301
+ };
1302
+
1303
+ const getChainId = async ({ contract }) => {
1304
+ const chainId = await contract.provider.getNetwork().then((res) => res.chainId);
1305
+ return `${chainId}`;
1306
+ };
1307
+
1308
+ const setupContractEnv = ({ customEvmChainList, isLocal: _isLocal = false }) => {
1309
+ customEvmChainList.forEach((chain) => {
1310
+ const { chainId } = chain;
1311
+ CUSTOM_CHAIN_MAP[chainId] = chain;
1312
+ });
1313
+ isLocal = _isLocal;
1314
+ };
1315
+
1316
+ const getChainInfo = (chainId) => {
1317
+ return {
1318
+ ...CHAIN_MAP[chainId],
1319
+ ...CUSTOM_CHAIN_MAP[chainId],
1320
+ };
1321
+ };
1322
+
1323
+ const getExplorerUrl = (chainId) => {
1324
+ const { explorer } = getChainInfo(chainId);
1325
+
1326
+ return `${explorer}`;
1327
+ };
1328
+
1329
+ const getAddressExplorerUrl = ({ chainId, hash }) => {
1330
+ return `${getExplorerUrl(chainId)}/address/${hash}`;
1331
+ };
1332
+
1333
+ const getBlockExplorerUrl = ({ chainId, blockletNumber }) => {
1334
+ return `${getExplorerUrl(chainId)}/block/${blockletNumber}`;
1335
+ };
1336
+
1337
+ const getTxExplorerUrl = ({ chainId, hash }) => {
1338
+ return `${getExplorerUrl(chainId)}/tx/${hash}`;
1339
+ };
1340
+
1341
+ const getCloneContractArgs = ({
1342
+ ownerAddress,
1343
+ baseImageURI,
1344
+ contractName,
1345
+ contractSymbol = '',
1346
+ contractDescription,
1347
+ totalLimit = 0,
1348
+ price = '0',
1349
+ transferTokenAddress,
1350
+ } = {}) => {
1351
+ const params = [
1352
+ ownerAddress,
1353
+ baseImageURI,
1354
+ contractName,
1355
+ contractSymbol,
1356
+ contractDescription,
1357
+ totalLimit,
1358
+ price,
1359
+ transferTokenAddress || ownerAddress,
1360
+ ];
1361
+ return params;
1362
+ };
1363
+
1364
+ const getEvmChainList = () => {
1365
+ try {
1366
+ // eslint-disable-next-line global-require
1367
+ let defaultChainList = require$$10;
1368
+ if (isLocal) {
1369
+ defaultChainList = [
1370
+ ...defaultChainList,
1371
+ // eslint-disable-next-line global-require
1372
+ ...require$$11,
1373
+ ];
1374
+ }
1375
+ // CUSTOM_CHAIN_MAP is setup by setupContractEnv
1376
+ if (Object.keys(CUSTOM_CHAIN_MAP).length > 0) {
1377
+ defaultChainList = defaultChainList.map((item) => {
1378
+ const { chainId } = item;
1379
+ if (CUSTOM_CHAIN_MAP[chainId]) {
1380
+ // override
1381
+ return {
1382
+ ...item,
1383
+ ...pick(CUSTOM_CHAIN_MAP[chainId], ['enable', 'defaultRPC', 'explorer']),
1384
+ };
1385
+ }
1386
+ return item;
1387
+ });
1388
+ }
1389
+ return defaultChainList;
1390
+ } catch (error) {
1391
+ // do nothing
1392
+ }
1393
+ return [];
1394
+ };
1395
+
1396
+ var getContract_1 = contract$1.getContract = getContract;
1397
+ var getContractFactory_1 = contract$1.getContractFactory = getContractFactory;
1398
+ var getTxData_1 = contract$1.getTxData = getTxData;
1399
+ var getGasPrice_1 = contract$1.getGasPrice = getGasPrice;
1400
+ var waitForTxReceipt_1 = contract$1.waitForTxReceipt = waitForTxReceipt;
1401
+ var onContractFilter_1 = contract$1.onContractFilter = onContractFilter;
1402
+ var getChainId_1 = contract$1.getChainId = getChainId;
1403
+ var getChainInfo_1 = contract$1.getChainInfo = getChainInfo;
1404
+ var getBlockExplorerUrl_1 = contract$1.getBlockExplorerUrl = getBlockExplorerUrl;
1405
+ var getTxExplorerUrl_1 = contract$1.getTxExplorerUrl = getTxExplorerUrl;
1406
+ var getAddressExplorerUrl_1 = contract$1.getAddressExplorerUrl = getAddressExplorerUrl;
1407
+ var getCloneContractArgs_1 = contract$1.getCloneContractArgs = getCloneContractArgs;
1408
+ var getEvmChainList_1 = contract$1.getEvmChainList = getEvmChainList;
1409
+ var setupContractEnv_1 = contract$1.setupContractEnv = setupContractEnv;
1410
+ var getChainIdByChainName_1 = contract$1.getChainIdByChainName = getChainIdByChainName;
1411
+
1412
+ export { contract$1 as default, getAddressExplorerUrl_1 as getAddressExplorerUrl, getBlockExplorerUrl_1 as getBlockExplorerUrl, getChainId_1 as getChainId, getChainIdByChainName_1 as getChainIdByChainName, getChainInfo_1 as getChainInfo, getCloneContractArgs_1 as getCloneContractArgs, getContract_1 as getContract, getContractFactory_1 as getContractFactory, getEvmChainList_1 as getEvmChainList, getGasPrice_1 as getGasPrice, getTxData_1 as getTxData, getTxExplorerUrl_1 as getTxExplorerUrl, onContractFilter_1 as onContractFilter, setupContractEnv_1 as setupContractEnv, waitForTxReceipt_1 as waitForTxReceipt };