@latticexyz/cli 1.40.0 → 1.41.0
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.
- package/LICENSE +21 -0
- package/dist/chunk-AER7UDD4.js +0 -0
- package/dist/chunk-ATAWDHWC.js +67 -0
- package/dist/{chunk-6AQ6LFVZ.js → chunk-GR245KYP.js} +95 -1
- package/dist/{chunk-S3V3XX7N.js → chunk-SLIMIO4Z.js} +1 -1
- package/dist/{chunk-JNGSW4AP.js → chunk-XRS7KWBZ.js} +139 -85
- package/dist/chunk-YZATC2M3.js +397 -0
- package/dist/chunk-ZYDMYSTH.js +1178 -0
- package/dist/config/index.d.ts +427 -3
- package/dist/config/index.js +26 -3
- package/dist/deploy-v2-b7b3207d.d.ts +92 -0
- package/dist/index.d.ts +110 -3
- package/dist/index.js +53 -8
- package/dist/mud.js +172 -46
- package/dist/utils/deprecated/index.js +2 -2
- package/dist/utils/index.d.ts +5 -44
- package/dist/utils/index.js +18 -3
- package/package.json +13 -9
- package/src/commands/deploy-v2.ts +100 -0
- package/src/commands/deprecated/call-system.ts +1 -1
- package/src/commands/deprecated/deploy-contracts.ts +1 -1
- package/src/commands/deprecated/test.ts +9 -6
- package/src/commands/deprecated/trace.ts +1 -1
- package/src/commands/gas-report.ts +1 -1
- package/src/commands/index.ts +2 -0
- package/src/commands/tablegen.ts +4 -18
- package/src/config/commonSchemas.ts +16 -0
- package/src/config/index.ts +8 -0
- package/src/config/loadStoreConfig.ts +2 -88
- package/src/config/loadWorldConfig.test-d.ts +11 -0
- package/src/config/loadWorldConfig.ts +178 -0
- package/src/config/{loadStoreConfig.test-d.ts → parseStoreConfig.test-d.ts} +5 -2
- package/src/config/parseStoreConfig.ts +174 -0
- package/src/config/validation.ts +46 -0
- package/src/constants.ts +1 -0
- package/src/index.ts +15 -5
- package/src/mud.ts +4 -0
- package/src/{render-table → render-solidity}/common.ts +37 -11
- package/src/{render-table → render-solidity}/field.ts +29 -20
- package/src/{render-table → render-solidity}/record.ts +3 -8
- package/src/{render-table → render-solidity}/renderTable.ts +38 -11
- package/src/{render-table → render-solidity}/renderTablesFromConfig.ts +37 -27
- package/src/render-solidity/renderTypes.ts +19 -0
- package/src/render-solidity/renderTypesFromConfig.ts +13 -0
- package/src/render-solidity/tablegen.ts +35 -0
- package/src/{render-table → render-solidity}/types.ts +25 -0
- package/src/render-solidity/userType.ts +100 -0
- package/src/utils/deploy-v2.ts +345 -0
- package/src/utils/deprecated/build.ts +1 -1
- package/src/utils/deprecated/typegen.ts +1 -1
- package/src/utils/errors.ts +12 -2
- package/src/utils/execLog.ts +22 -0
- package/src/utils/foundry.ts +94 -0
- package/src/utils/index.ts +2 -1
- package/dist/chunk-B6VWCGHZ.js +0 -199
- package/dist/chunk-JKAA3WMC.js +0 -55
- package/dist/chunk-PJ6GS2R4.js +0 -22
- package/dist/chunk-UC3QPOON.js +0 -35
- package/dist/loadStoreConfig-37f99136.d.ts +0 -164
- package/dist/render-table/index.d.ts +0 -29
- package/dist/render-table/index.js +0 -24
- package/dist/renderTable-9e6410c5.d.ts +0 -72
- package/src/utils/forgeConfig.ts +0 -45
- /package/src/{render-table → render-solidity}/index.ts +0 -0
|
@@ -0,0 +1,1178 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MUDError,
|
|
3
|
+
SchemaType,
|
|
4
|
+
SchemaTypeId,
|
|
5
|
+
encodeSchema,
|
|
6
|
+
getStaticByteLength
|
|
7
|
+
} from "./chunk-GR245KYP.js";
|
|
8
|
+
import {
|
|
9
|
+
cast,
|
|
10
|
+
forge,
|
|
11
|
+
getOutDirectory,
|
|
12
|
+
getScriptDirectory
|
|
13
|
+
} from "./chunk-ATAWDHWC.js";
|
|
14
|
+
|
|
15
|
+
// src/utils/format.ts
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
import prettier from "prettier";
|
|
18
|
+
import prettierPluginSolidity from "prettier-plugin-solidity";
|
|
19
|
+
async function formatSolidity(content, prettierConfigPath) {
|
|
20
|
+
let config;
|
|
21
|
+
if (prettierConfigPath) {
|
|
22
|
+
config = await prettier.resolveConfig(prettierConfigPath);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return prettier.format(content, {
|
|
26
|
+
plugins: [prettierPluginSolidity],
|
|
27
|
+
parser: "solidity-parse",
|
|
28
|
+
printWidth: 120,
|
|
29
|
+
semi: true,
|
|
30
|
+
tabWidth: 2,
|
|
31
|
+
useTabs: false,
|
|
32
|
+
bracketSpacing: true,
|
|
33
|
+
...config
|
|
34
|
+
});
|
|
35
|
+
} catch (error) {
|
|
36
|
+
let message;
|
|
37
|
+
if (error instanceof Error) {
|
|
38
|
+
message = error.message;
|
|
39
|
+
} else {
|
|
40
|
+
message = error;
|
|
41
|
+
}
|
|
42
|
+
console.log(chalk.yellow(`Error during output formatting: ${message}`));
|
|
43
|
+
return content;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// src/utils/deploy-v2.ts
|
|
48
|
+
import { existsSync, readFileSync } from "fs";
|
|
49
|
+
import path2 from "path";
|
|
50
|
+
import { ethers } from "ethers";
|
|
51
|
+
|
|
52
|
+
// ../world/abi/World.json
|
|
53
|
+
var abi = [
|
|
54
|
+
{
|
|
55
|
+
inputs: [],
|
|
56
|
+
stateMutability: "nonpayable",
|
|
57
|
+
type: "constructor"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
inputs: [
|
|
61
|
+
{
|
|
62
|
+
internalType: "string",
|
|
63
|
+
name: "route",
|
|
64
|
+
type: "string"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
internalType: "address",
|
|
68
|
+
name: "caller",
|
|
69
|
+
type: "address"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
name: "RouteAccessDenied",
|
|
73
|
+
type: "error"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
inputs: [
|
|
77
|
+
{
|
|
78
|
+
internalType: "string",
|
|
79
|
+
name: "route",
|
|
80
|
+
type: "string"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
name: "RouteExists",
|
|
84
|
+
type: "error"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
inputs: [
|
|
88
|
+
{
|
|
89
|
+
internalType: "string",
|
|
90
|
+
name: "route",
|
|
91
|
+
type: "string"
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
name: "RouteInvalid",
|
|
95
|
+
type: "error"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
inputs: [
|
|
99
|
+
{
|
|
100
|
+
internalType: "uint256",
|
|
101
|
+
name: "length",
|
|
102
|
+
type: "uint256"
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
name: "SchemaLib_InvalidLength",
|
|
106
|
+
type: "error"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
inputs: [],
|
|
110
|
+
name: "SchemaLib_StaticTypeAfterDynamicType",
|
|
111
|
+
type: "error"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
inputs: [
|
|
115
|
+
{
|
|
116
|
+
internalType: "bytes",
|
|
117
|
+
name: "data",
|
|
118
|
+
type: "bytes"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
internalType: "uint256",
|
|
122
|
+
name: "start",
|
|
123
|
+
type: "uint256"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
internalType: "uint256",
|
|
127
|
+
name: "end",
|
|
128
|
+
type: "uint256"
|
|
129
|
+
}
|
|
130
|
+
],
|
|
131
|
+
name: "Slice_OutOfBounds",
|
|
132
|
+
type: "error"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
inputs: [
|
|
136
|
+
{
|
|
137
|
+
internalType: "uint256",
|
|
138
|
+
name: "expected",
|
|
139
|
+
type: "uint256"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
internalType: "uint256",
|
|
143
|
+
name: "received",
|
|
144
|
+
type: "uint256"
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
name: "StoreCore_InvalidDataLength",
|
|
148
|
+
type: "error"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
inputs: [
|
|
152
|
+
{
|
|
153
|
+
internalType: "uint256",
|
|
154
|
+
name: "expected",
|
|
155
|
+
type: "uint256"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
internalType: "uint256",
|
|
159
|
+
name: "received",
|
|
160
|
+
type: "uint256"
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
name: "StoreCore_InvalidFieldNamesLength",
|
|
164
|
+
type: "error"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
inputs: [],
|
|
168
|
+
name: "StoreCore_NotDynamicField",
|
|
169
|
+
type: "error"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
inputs: [
|
|
173
|
+
{
|
|
174
|
+
internalType: "uint256",
|
|
175
|
+
name: "table",
|
|
176
|
+
type: "uint256"
|
|
177
|
+
}
|
|
178
|
+
],
|
|
179
|
+
name: "StoreCore_TableAlreadyExists",
|
|
180
|
+
type: "error"
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
inputs: [
|
|
184
|
+
{
|
|
185
|
+
internalType: "uint256",
|
|
186
|
+
name: "table",
|
|
187
|
+
type: "uint256"
|
|
188
|
+
}
|
|
189
|
+
],
|
|
190
|
+
name: "StoreCore_TableNotFound",
|
|
191
|
+
type: "error"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
inputs: [
|
|
195
|
+
{
|
|
196
|
+
internalType: "address",
|
|
197
|
+
name: "system",
|
|
198
|
+
type: "address"
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
name: "SystemExists",
|
|
202
|
+
type: "error"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
anonymous: false,
|
|
206
|
+
inputs: [
|
|
207
|
+
{
|
|
208
|
+
indexed: false,
|
|
209
|
+
internalType: "uint256",
|
|
210
|
+
name: "table",
|
|
211
|
+
type: "uint256"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
indexed: false,
|
|
215
|
+
internalType: "bytes32[]",
|
|
216
|
+
name: "key",
|
|
217
|
+
type: "bytes32[]"
|
|
218
|
+
}
|
|
219
|
+
],
|
|
220
|
+
name: "StoreDeleteRecord",
|
|
221
|
+
type: "event"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
anonymous: false,
|
|
225
|
+
inputs: [
|
|
226
|
+
{
|
|
227
|
+
indexed: false,
|
|
228
|
+
internalType: "uint256",
|
|
229
|
+
name: "table",
|
|
230
|
+
type: "uint256"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
indexed: false,
|
|
234
|
+
internalType: "bytes32[]",
|
|
235
|
+
name: "key",
|
|
236
|
+
type: "bytes32[]"
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
indexed: false,
|
|
240
|
+
internalType: "uint8",
|
|
241
|
+
name: "schemaIndex",
|
|
242
|
+
type: "uint8"
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
indexed: false,
|
|
246
|
+
internalType: "bytes",
|
|
247
|
+
name: "data",
|
|
248
|
+
type: "bytes"
|
|
249
|
+
}
|
|
250
|
+
],
|
|
251
|
+
name: "StoreSetField",
|
|
252
|
+
type: "event"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
anonymous: false,
|
|
256
|
+
inputs: [
|
|
257
|
+
{
|
|
258
|
+
indexed: false,
|
|
259
|
+
internalType: "uint256",
|
|
260
|
+
name: "table",
|
|
261
|
+
type: "uint256"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
indexed: false,
|
|
265
|
+
internalType: "bytes32[]",
|
|
266
|
+
name: "key",
|
|
267
|
+
type: "bytes32[]"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
indexed: false,
|
|
271
|
+
internalType: "bytes",
|
|
272
|
+
name: "data",
|
|
273
|
+
type: "bytes"
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
name: "StoreSetRecord",
|
|
277
|
+
type: "event"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
inputs: [
|
|
281
|
+
{
|
|
282
|
+
internalType: "string",
|
|
283
|
+
name: "systemRoute",
|
|
284
|
+
type: "string"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
internalType: "bytes",
|
|
288
|
+
name: "funcSelectorAndArgs",
|
|
289
|
+
type: "bytes"
|
|
290
|
+
}
|
|
291
|
+
],
|
|
292
|
+
name: "call",
|
|
293
|
+
outputs: [
|
|
294
|
+
{
|
|
295
|
+
internalType: "bytes",
|
|
296
|
+
name: "",
|
|
297
|
+
type: "bytes"
|
|
298
|
+
}
|
|
299
|
+
],
|
|
300
|
+
stateMutability: "nonpayable",
|
|
301
|
+
type: "function"
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
inputs: [
|
|
305
|
+
{
|
|
306
|
+
internalType: "string",
|
|
307
|
+
name: "accessRoute",
|
|
308
|
+
type: "string"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
internalType: "string",
|
|
312
|
+
name: "subRoute",
|
|
313
|
+
type: "string"
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
internalType: "bytes",
|
|
317
|
+
name: "funcSelectorAndArgs",
|
|
318
|
+
type: "bytes"
|
|
319
|
+
}
|
|
320
|
+
],
|
|
321
|
+
name: "call",
|
|
322
|
+
outputs: [
|
|
323
|
+
{
|
|
324
|
+
internalType: "bytes",
|
|
325
|
+
name: "",
|
|
326
|
+
type: "bytes"
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
stateMutability: "nonpayable",
|
|
330
|
+
type: "function"
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
inputs: [
|
|
334
|
+
{
|
|
335
|
+
internalType: "string",
|
|
336
|
+
name: "accessRoute",
|
|
337
|
+
type: "string"
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
internalType: "string",
|
|
341
|
+
name: "subRoute",
|
|
342
|
+
type: "string"
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
internalType: "bytes32[]",
|
|
346
|
+
name: "key",
|
|
347
|
+
type: "bytes32[]"
|
|
348
|
+
}
|
|
349
|
+
],
|
|
350
|
+
name: "deleteRecord",
|
|
351
|
+
outputs: [],
|
|
352
|
+
stateMutability: "nonpayable",
|
|
353
|
+
type: "function"
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
inputs: [
|
|
357
|
+
{
|
|
358
|
+
internalType: "uint256",
|
|
359
|
+
name: "tableRouteId",
|
|
360
|
+
type: "uint256"
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
internalType: "bytes32[]",
|
|
364
|
+
name: "key",
|
|
365
|
+
type: "bytes32[]"
|
|
366
|
+
}
|
|
367
|
+
],
|
|
368
|
+
name: "deleteRecord",
|
|
369
|
+
outputs: [],
|
|
370
|
+
stateMutability: "nonpayable",
|
|
371
|
+
type: "function"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
inputs: [
|
|
375
|
+
{
|
|
376
|
+
internalType: "uint256",
|
|
377
|
+
name: "table",
|
|
378
|
+
type: "uint256"
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
internalType: "bytes32[]",
|
|
382
|
+
name: "key",
|
|
383
|
+
type: "bytes32[]"
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
internalType: "uint8",
|
|
387
|
+
name: "schemaIndex",
|
|
388
|
+
type: "uint8"
|
|
389
|
+
}
|
|
390
|
+
],
|
|
391
|
+
name: "getField",
|
|
392
|
+
outputs: [
|
|
393
|
+
{
|
|
394
|
+
internalType: "bytes",
|
|
395
|
+
name: "data",
|
|
396
|
+
type: "bytes"
|
|
397
|
+
}
|
|
398
|
+
],
|
|
399
|
+
stateMutability: "view",
|
|
400
|
+
type: "function"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
inputs: [
|
|
404
|
+
{
|
|
405
|
+
internalType: "uint256",
|
|
406
|
+
name: "table",
|
|
407
|
+
type: "uint256"
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
internalType: "bytes32[]",
|
|
411
|
+
name: "key",
|
|
412
|
+
type: "bytes32[]"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
internalType: "Schema",
|
|
416
|
+
name: "schema",
|
|
417
|
+
type: "bytes32"
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
name: "getRecord",
|
|
421
|
+
outputs: [
|
|
422
|
+
{
|
|
423
|
+
internalType: "bytes",
|
|
424
|
+
name: "data",
|
|
425
|
+
type: "bytes"
|
|
426
|
+
}
|
|
427
|
+
],
|
|
428
|
+
stateMutability: "view",
|
|
429
|
+
type: "function"
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
inputs: [
|
|
433
|
+
{
|
|
434
|
+
internalType: "uint256",
|
|
435
|
+
name: "table",
|
|
436
|
+
type: "uint256"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
internalType: "bytes32[]",
|
|
440
|
+
name: "key",
|
|
441
|
+
type: "bytes32[]"
|
|
442
|
+
}
|
|
443
|
+
],
|
|
444
|
+
name: "getRecord",
|
|
445
|
+
outputs: [
|
|
446
|
+
{
|
|
447
|
+
internalType: "bytes",
|
|
448
|
+
name: "data",
|
|
449
|
+
type: "bytes"
|
|
450
|
+
}
|
|
451
|
+
],
|
|
452
|
+
stateMutability: "view",
|
|
453
|
+
type: "function"
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
inputs: [
|
|
457
|
+
{
|
|
458
|
+
internalType: "uint256",
|
|
459
|
+
name: "table",
|
|
460
|
+
type: "uint256"
|
|
461
|
+
}
|
|
462
|
+
],
|
|
463
|
+
name: "getSchema",
|
|
464
|
+
outputs: [
|
|
465
|
+
{
|
|
466
|
+
internalType: "Schema",
|
|
467
|
+
name: "schema",
|
|
468
|
+
type: "bytes32"
|
|
469
|
+
}
|
|
470
|
+
],
|
|
471
|
+
stateMutability: "view",
|
|
472
|
+
type: "function"
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
inputs: [
|
|
476
|
+
{
|
|
477
|
+
internalType: "string",
|
|
478
|
+
name: "route",
|
|
479
|
+
type: "string"
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
internalType: "address",
|
|
483
|
+
name: "grantee",
|
|
484
|
+
type: "address"
|
|
485
|
+
}
|
|
486
|
+
],
|
|
487
|
+
name: "grantAccess",
|
|
488
|
+
outputs: [],
|
|
489
|
+
stateMutability: "nonpayable",
|
|
490
|
+
type: "function"
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
inputs: [],
|
|
494
|
+
name: "isStore",
|
|
495
|
+
outputs: [],
|
|
496
|
+
stateMutability: "view",
|
|
497
|
+
type: "function"
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
inputs: [
|
|
501
|
+
{
|
|
502
|
+
internalType: "string",
|
|
503
|
+
name: "accessRoute",
|
|
504
|
+
type: "string"
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
internalType: "string",
|
|
508
|
+
name: "subRoute",
|
|
509
|
+
type: "string"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
internalType: "bytes32[]",
|
|
513
|
+
name: "key",
|
|
514
|
+
type: "bytes32[]"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
internalType: "uint8",
|
|
518
|
+
name: "schemaIndex",
|
|
519
|
+
type: "uint8"
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
internalType: "bytes",
|
|
523
|
+
name: "dataToPush",
|
|
524
|
+
type: "bytes"
|
|
525
|
+
}
|
|
526
|
+
],
|
|
527
|
+
name: "pushToField",
|
|
528
|
+
outputs: [],
|
|
529
|
+
stateMutability: "nonpayable",
|
|
530
|
+
type: "function"
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
inputs: [
|
|
534
|
+
{
|
|
535
|
+
internalType: "uint256",
|
|
536
|
+
name: "tableRouteId",
|
|
537
|
+
type: "uint256"
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
internalType: "bytes32[]",
|
|
541
|
+
name: "key",
|
|
542
|
+
type: "bytes32[]"
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
internalType: "uint8",
|
|
546
|
+
name: "schemaIndex",
|
|
547
|
+
type: "uint8"
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
internalType: "bytes",
|
|
551
|
+
name: "dataToPush",
|
|
552
|
+
type: "bytes"
|
|
553
|
+
}
|
|
554
|
+
],
|
|
555
|
+
name: "pushToField",
|
|
556
|
+
outputs: [],
|
|
557
|
+
stateMutability: "nonpayable",
|
|
558
|
+
type: "function"
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
inputs: [
|
|
562
|
+
{
|
|
563
|
+
internalType: "string",
|
|
564
|
+
name: "baseRoute",
|
|
565
|
+
type: "string"
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
internalType: "string",
|
|
569
|
+
name: "subRoute",
|
|
570
|
+
type: "string"
|
|
571
|
+
}
|
|
572
|
+
],
|
|
573
|
+
name: "registerRoute",
|
|
574
|
+
outputs: [
|
|
575
|
+
{
|
|
576
|
+
internalType: "uint256",
|
|
577
|
+
name: "routeId",
|
|
578
|
+
type: "uint256"
|
|
579
|
+
}
|
|
580
|
+
],
|
|
581
|
+
stateMutability: "nonpayable",
|
|
582
|
+
type: "function"
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
inputs: [
|
|
586
|
+
{
|
|
587
|
+
internalType: "uint256",
|
|
588
|
+
name: "tableId",
|
|
589
|
+
type: "uint256"
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
internalType: "Schema",
|
|
593
|
+
name: "schema",
|
|
594
|
+
type: "bytes32"
|
|
595
|
+
}
|
|
596
|
+
],
|
|
597
|
+
name: "registerSchema",
|
|
598
|
+
outputs: [],
|
|
599
|
+
stateMutability: "nonpayable",
|
|
600
|
+
type: "function"
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
inputs: [
|
|
604
|
+
{
|
|
605
|
+
internalType: "uint256",
|
|
606
|
+
name: "tableId",
|
|
607
|
+
type: "uint256"
|
|
608
|
+
},
|
|
609
|
+
{
|
|
610
|
+
internalType: "contract IStoreHook",
|
|
611
|
+
name: "hook",
|
|
612
|
+
type: "address"
|
|
613
|
+
}
|
|
614
|
+
],
|
|
615
|
+
name: "registerStoreHook",
|
|
616
|
+
outputs: [],
|
|
617
|
+
stateMutability: "nonpayable",
|
|
618
|
+
type: "function"
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
inputs: [
|
|
622
|
+
{
|
|
623
|
+
internalType: "string",
|
|
624
|
+
name: "baseRoute",
|
|
625
|
+
type: "string"
|
|
626
|
+
},
|
|
627
|
+
{
|
|
628
|
+
internalType: "string",
|
|
629
|
+
name: "systemRoute",
|
|
630
|
+
type: "string"
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
internalType: "contract System",
|
|
634
|
+
name: "system",
|
|
635
|
+
type: "address"
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
internalType: "bool",
|
|
639
|
+
name: "publicAccess",
|
|
640
|
+
type: "bool"
|
|
641
|
+
}
|
|
642
|
+
],
|
|
643
|
+
name: "registerSystem",
|
|
644
|
+
outputs: [
|
|
645
|
+
{
|
|
646
|
+
internalType: "uint256",
|
|
647
|
+
name: "systemRouteId",
|
|
648
|
+
type: "uint256"
|
|
649
|
+
}
|
|
650
|
+
],
|
|
651
|
+
stateMutability: "nonpayable",
|
|
652
|
+
type: "function"
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
inputs: [
|
|
656
|
+
{
|
|
657
|
+
internalType: "string",
|
|
658
|
+
name: "systemRoute",
|
|
659
|
+
type: "string"
|
|
660
|
+
},
|
|
661
|
+
{
|
|
662
|
+
internalType: "contract ISystemHook",
|
|
663
|
+
name: "hook",
|
|
664
|
+
type: "address"
|
|
665
|
+
}
|
|
666
|
+
],
|
|
667
|
+
name: "registerSystemHook",
|
|
668
|
+
outputs: [],
|
|
669
|
+
stateMutability: "nonpayable",
|
|
670
|
+
type: "function"
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
inputs: [
|
|
674
|
+
{
|
|
675
|
+
internalType: "string",
|
|
676
|
+
name: "baseRoute",
|
|
677
|
+
type: "string"
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
internalType: "string",
|
|
681
|
+
name: "tableRoute",
|
|
682
|
+
type: "string"
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
internalType: "Schema",
|
|
686
|
+
name: "schema",
|
|
687
|
+
type: "bytes32"
|
|
688
|
+
}
|
|
689
|
+
],
|
|
690
|
+
name: "registerTable",
|
|
691
|
+
outputs: [
|
|
692
|
+
{
|
|
693
|
+
internalType: "uint256",
|
|
694
|
+
name: "tableRouteId",
|
|
695
|
+
type: "uint256"
|
|
696
|
+
}
|
|
697
|
+
],
|
|
698
|
+
stateMutability: "nonpayable",
|
|
699
|
+
type: "function"
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
inputs: [
|
|
703
|
+
{
|
|
704
|
+
internalType: "string",
|
|
705
|
+
name: "tableRoute",
|
|
706
|
+
type: "string"
|
|
707
|
+
},
|
|
708
|
+
{
|
|
709
|
+
internalType: "contract IStoreHook",
|
|
710
|
+
name: "hook",
|
|
711
|
+
type: "address"
|
|
712
|
+
}
|
|
713
|
+
],
|
|
714
|
+
name: "registerTableHook",
|
|
715
|
+
outputs: [],
|
|
716
|
+
stateMutability: "nonpayable",
|
|
717
|
+
type: "function"
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
inputs: [
|
|
721
|
+
{
|
|
722
|
+
internalType: "string",
|
|
723
|
+
name: "route",
|
|
724
|
+
type: "string"
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
internalType: "address",
|
|
728
|
+
name: "grantee",
|
|
729
|
+
type: "address"
|
|
730
|
+
}
|
|
731
|
+
],
|
|
732
|
+
name: "retractAccess",
|
|
733
|
+
outputs: [],
|
|
734
|
+
stateMutability: "nonpayable",
|
|
735
|
+
type: "function"
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
inputs: [
|
|
739
|
+
{
|
|
740
|
+
internalType: "string",
|
|
741
|
+
name: "accessRoute",
|
|
742
|
+
type: "string"
|
|
743
|
+
},
|
|
744
|
+
{
|
|
745
|
+
internalType: "string",
|
|
746
|
+
name: "subRoute",
|
|
747
|
+
type: "string"
|
|
748
|
+
},
|
|
749
|
+
{
|
|
750
|
+
internalType: "bytes32[]",
|
|
751
|
+
name: "key",
|
|
752
|
+
type: "bytes32[]"
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
internalType: "uint8",
|
|
756
|
+
name: "schemaIndex",
|
|
757
|
+
type: "uint8"
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
internalType: "bytes",
|
|
761
|
+
name: "data",
|
|
762
|
+
type: "bytes"
|
|
763
|
+
}
|
|
764
|
+
],
|
|
765
|
+
name: "setField",
|
|
766
|
+
outputs: [],
|
|
767
|
+
stateMutability: "nonpayable",
|
|
768
|
+
type: "function"
|
|
769
|
+
},
|
|
770
|
+
{
|
|
771
|
+
inputs: [
|
|
772
|
+
{
|
|
773
|
+
internalType: "uint256",
|
|
774
|
+
name: "tableRouteId",
|
|
775
|
+
type: "uint256"
|
|
776
|
+
},
|
|
777
|
+
{
|
|
778
|
+
internalType: "bytes32[]",
|
|
779
|
+
name: "key",
|
|
780
|
+
type: "bytes32[]"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
internalType: "uint8",
|
|
784
|
+
name: "schemaIndex",
|
|
785
|
+
type: "uint8"
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
internalType: "bytes",
|
|
789
|
+
name: "data",
|
|
790
|
+
type: "bytes"
|
|
791
|
+
}
|
|
792
|
+
],
|
|
793
|
+
name: "setField",
|
|
794
|
+
outputs: [],
|
|
795
|
+
stateMutability: "nonpayable",
|
|
796
|
+
type: "function"
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
inputs: [
|
|
800
|
+
{
|
|
801
|
+
internalType: "uint256",
|
|
802
|
+
name: "tableId",
|
|
803
|
+
type: "uint256"
|
|
804
|
+
},
|
|
805
|
+
{
|
|
806
|
+
internalType: "string",
|
|
807
|
+
name: "tableName",
|
|
808
|
+
type: "string"
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
internalType: "string[]",
|
|
812
|
+
name: "fieldNames",
|
|
813
|
+
type: "string[]"
|
|
814
|
+
}
|
|
815
|
+
],
|
|
816
|
+
name: "setMetadata",
|
|
817
|
+
outputs: [],
|
|
818
|
+
stateMutability: "nonpayable",
|
|
819
|
+
type: "function"
|
|
820
|
+
},
|
|
821
|
+
{
|
|
822
|
+
inputs: [
|
|
823
|
+
{
|
|
824
|
+
internalType: "string",
|
|
825
|
+
name: "tableRoute",
|
|
826
|
+
type: "string"
|
|
827
|
+
},
|
|
828
|
+
{
|
|
829
|
+
internalType: "string",
|
|
830
|
+
name: "tableName",
|
|
831
|
+
type: "string"
|
|
832
|
+
},
|
|
833
|
+
{
|
|
834
|
+
internalType: "string[]",
|
|
835
|
+
name: "fieldNames",
|
|
836
|
+
type: "string[]"
|
|
837
|
+
}
|
|
838
|
+
],
|
|
839
|
+
name: "setMetadata",
|
|
840
|
+
outputs: [],
|
|
841
|
+
stateMutability: "nonpayable",
|
|
842
|
+
type: "function"
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
inputs: [
|
|
846
|
+
{
|
|
847
|
+
internalType: "uint256",
|
|
848
|
+
name: "tableRouteId",
|
|
849
|
+
type: "uint256"
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
internalType: "bytes32[]",
|
|
853
|
+
name: "key",
|
|
854
|
+
type: "bytes32[]"
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
internalType: "bytes",
|
|
858
|
+
name: "data",
|
|
859
|
+
type: "bytes"
|
|
860
|
+
}
|
|
861
|
+
],
|
|
862
|
+
name: "setRecord",
|
|
863
|
+
outputs: [],
|
|
864
|
+
stateMutability: "nonpayable",
|
|
865
|
+
type: "function"
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
inputs: [
|
|
869
|
+
{
|
|
870
|
+
internalType: "string",
|
|
871
|
+
name: "accessRoute",
|
|
872
|
+
type: "string"
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
internalType: "string",
|
|
876
|
+
name: "subRoute",
|
|
877
|
+
type: "string"
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
internalType: "bytes32[]",
|
|
881
|
+
name: "key",
|
|
882
|
+
type: "bytes32[]"
|
|
883
|
+
},
|
|
884
|
+
{
|
|
885
|
+
internalType: "bytes",
|
|
886
|
+
name: "data",
|
|
887
|
+
type: "bytes"
|
|
888
|
+
}
|
|
889
|
+
],
|
|
890
|
+
name: "setRecord",
|
|
891
|
+
outputs: [],
|
|
892
|
+
stateMutability: "nonpayable",
|
|
893
|
+
type: "function"
|
|
894
|
+
}
|
|
895
|
+
];
|
|
896
|
+
var bytecode = {
|
|
897
|
+
object: "0x6080604052348015630000001257600080fd5b50630000002b630000016860201b63000010fd1760201c565b6300000043630000020460201b63000011501760201c565b630000005b630000024960201b63000011811760201c565b6300000073630000027560201b63000011aa1760201c565b630000008b630000029760201b63000011d61760201c565b63000000a363000002d360201b63000011ff1760201c565b6040805160208082018352600091829052825180820190935290825263000000e89160008051602063000084c983398151915291630000122863000002ff821b17901c565b6040805160208082019092526000905263000001239060008051602063000084c983398151915290339063000012536300000331821b17901c565b6040805160208082019092526000905263000001619060008051602063000084c9833981519152903390600190630000127e630000035f821b17901c565b6300002fd0565b63000001a2600080516020630000852983398151915260001c630000019b605f630000043a60201b630000134a1760201c565b63000004c8565b63000001ba630000053060201b63000013c21760201c565b63000001d2630000055260201b63000013ee1760201c565b63000001ea630000057460201b630000141a1760201c565b630000020263000005b560201b63000014551760201c565b565b63000002027f9bb503956ffba2113cfb11e14a2bee495dc4af006cd9ff16588ff2a9772d0304630000023663000005f6565b63000006e860201b63000014901760201c565b6300000202600080516020630000854983398151915260001c630000077560201b63000015151760201c565b630000020260008051602063000084a98339815191526300000236630000078a565b63000002027f62979a91fdbe2d783bb7cc5fd3423fd0f5a933addfd71710e74eaf69d8f9eaa860001c63000007ca60201b63000015241760201c565b630000020260008051602063000084e983398151915260001c63000007dc60201b63000015301760201c565b630000032d600080516020630000854983398151915260001c838363000007ee60201b630000153c1760201c565b5050565b630000032d60008051602063000084e983398151915260001c8383630000085660201b630000158e1760201c565b6040805160028082526060820183526000926020830190803683370190505090508360001b81600081518110630000039d57630000039d6300002a4c565b6020026020010181815250508260601b6001600160601b0319168160018151811063000003d05763000003d06300002a4c565b602002602001018181525050630000043460008051602063000084a983398151915260001c82600085604051602001630000041291151560f81b815260010190565b60405160208183030381529060405263000008d060201b63000016031760201c565b50505050565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811063000004795763000004796300002a4c565b602002602001019060c581111563000004985763000004986300002a62565b908160c581111563000004b15763000004b16300002a62565b90525063000004c181630000096f565b9392505050565b63000004e1816300000b7d60201b630000169b1760201c565b63000004ee826300000d97565b15630000051657604051632fe94bd160e11b8152600481018390526024015b60405180910390fd5b630000032d82826300000dd160201b630000185d1760201c565b630000020260008051602063000085a983398151915263000002366300000ef0565b6300000202600080516020630000858983398151915263000002366300000f30565b60008063000005836300000fc7565b91509150630000032d60008051602063000085a983398151915260001c8383630000106760201b630000195b1760201c565b60008063000005c46300001100565b91509150630000032d600080516020630000858983398151915260001c8383630000106760201b630000195b1760201c565b6040805160028082526060820183526000928392919060208301908036833701905050905060618160008151811063000006365763000006366300002a4c565b602002602001019060c581111563000006555763000006556300002a62565b908160c5811115630000066e57630000066e6300002a62565b81525050606081600181518110630000068d57630000068d6300002a4c565b602002602001019060c581111563000006ac5763000006ac6300002a62565b908160c581111563000006c55763000006c56300002a62565b8152505063000006e281630000096f60201b63000019e11760201c565b91505090565b63000006f46300001205565b15630000071557630000032d828263000004c860201b6300001c361760201c565b604051630440a07f60e51b8152600481018390526024810182905233906388140fe090604401600060405180830381600087803b158015630000075757600080fd5b505af1158015630000076d573d6000803e3d6000fd5b505050505050565b6300000787816300000236630000127e565b50565b60408051600180825281830190925260009182919060208083019080368337019050509050606081600081518110630000068d57630000068d6300002a4c565b6300000787816300000236630000129f565b630000078781630000023663000012bb565b604080516001808252818301909252600091602080830190803683370190505090508260001b81600081518110630000082d57630000082d6300002a4c565b6020026020010181815250506300000434848260008563000008d060201b63000016031760201c565b604080516001808252818301909252600091602080830190803683370190505090508260001b8160008151811063000008955763000008956300002a4c565b602002602001018181525050630000043484826000856040516020016300000412919060609190911b6001600160601b031916815260140190565b63000008dc6300001205565b1563000009065763000008ff8484848463000012d760201b6300001c8c1760201c565b6300000434565b6040516348e22e9160e11b815233906391c45d229063000009339087908790879087906004016300002b19565b600060405180830381600087803b158015630000094f57600080fd5b505af11580156300000965573d6000803e3d6000fd5b5050505050505050565b6000601c82511115630000099d578151604051635318beb960e01b8152600401630000050d91815260200190565b60008060008060005b86518110156300000acd5760006300000a0288838151811063000009d05763000009d06300002a4c565b602002602001015160c581111563000009ef5763000009ef6300002a62565b630000146b60201b6300001dbb1760201c565b905061ffff8116156300000a495782156300000a3157604051633c795af960e21b815260040160405180910390fd5b836300000a3f816300002b6b565b9450506300000a4e565b600192505b6300000a5c81866300002b90565b94506300000ac0866300000a738460046300002bbc565b8a85815181106300000a8b576300000a8b6300002a4c565b602002602001015160c58111156300000aaa576300000aaa6300002a62565b60f81b630000154860201b6300001e6c1760201c565b95505060010163000009a6565b5060008287516300000ae191906300002bda565b9050600e8160ff1611156300000b1157604051635318beb960e01b815260ff82166004820152602401630000050d565b6300000b308560008660f01b630000157e60201b6300001ea21760201c565b94506300000b518560028560f81b630000154860201b6300001e6c1760201c565b94506300000b728560038360f81b630000154860201b6300001e6c1760201c565b979650505050505050565b6300000b9681630000159c60201b6300001ed81760201c565b156300000bbb57604051635318beb960e01b815260006004820152602401630000050d565b60006300000bd68263000015a060201b6300001edc1760201c565b60ff169050600e8111156300000c0457604051635318beb960e01b815260048101829052602401630000050d565b60006300000c1f8363000015c660201b6300001eed1760201c565b60ff169050601c6300000c3483836300002bbc565b11156300000c68576300000c4a82826300002bbc565b604051635318beb960e01b8152600401630000050d91815260200190565b60008060005b6300000c7c85856300002bbc565b8110156300000d415760006300000cc06300000ca9838963000015e360201b6300001ef91790919060201c565b60c581111563000009ef5763000009ef6300002a62565b11156300000d02578381106300000cea57604051633c795af960e21b815260040160405180910390fd5b826300000cf8816300002c03565b9350506300000d37565b838110156300000d2557604051633c795af960e21b815260040160405180910390fd5b816300000d33816300002c03565b9250505b6001016300000c6e565b508282146300000d6957604051635318beb960e01b815260048101839052602401630000050d565b8381146300000d9057604051635318beb960e01b815260048101829052602401630000050d565b5050505050565b60006300000dca6300000db783630000162760201b6300001f251760201c565b630000159c60201b6300001ed81760201c565b1592915050565b604080516001808252818301909252600091602080830190803683370190505090508260001b816000815181106300000e10576300000e106300002a4c565b602090810291909101015260006300000e3b60008051602063000085298339815191528363000016c7565b90506300000e6f816300000e5c85630000171160201b6300001fa21760201c565b630000171460201b63000018d71760201c565b6000805160206300008569833981519152600080516020630000852983398151915260001c836300000eae86630000171160201b6300001fa21760201c565b6040516020016300000ec291815260200190565b60408051601f19818403018152908290526300000ee29392916300002c22565b60405180910390a150505050565b6040805160018082528183019092526000918291906020808301908036833701905050905060c381600081518110630000068d57630000068d6300002a4c565b6040805160028082526060820183526000928392919060208301908036833701905050905060c5816000815181106300000f70576300000f706300002a4c565b602002602001019060c58111156300000f8f576300000f8f6300002a62565b908160c58111156300000fa8576300000fa86300002a62565b8152505060c481600181518110630000068d57630000068d6300002a4c565b6040805160018082528183019092526060918291600091816020015b60608152602001906001900390816300000fe35790505090506040518060400160405280600581526020016476616c756560d81b8152508160008151811063000010335763000010336300002a4c565b60200260200101819052508060405180604001604052806005815260200164486f6f6b7360d81b8152509092509250509091565b63000010736300001205565b15630000109a576300001095838383630000171860201b6300001fa51760201c565b505050565b604051630ba711df60e11b8152339063174e23be9063000010c5908690869086906004016300002cbc565b600060405180830381600087803b15801563000010e157600080fd5b505af115801563000010f7573d6000803e3d6000fd5b50505050505050565b60408051600280825260608281019093528291600091816020015b6060815260200190600190039081630000111b579050509050604051806040016040528060098152602001687461626c654e616d6560b81b81525081600081518110630000116f57630000116f6300002a4c565b60200260200101819052506040518060400160405280601481526020017f616269456e636f6465644669656c644e616d65730000000000000000000000008152508160018151811063000011c95763000011c96300002a4c565b6020026020010181905250806040518060400160405280600d81526020016c53746f72654d6574616461746160981b8152509092509250509091565b6000303b808203630000121a57600191505090565b306001600160a01b031663a5c2f0076040518163ffffffff1660e01b815260040160006040518083038186803b158015630000125557600080fd5b505afa9250505080156300001268575060015b630000127657600091505090565b600191505090565b6000630000129a60c5630000043a60201b630000134a1760201c565b905090565b6000630000129a601f630000043a60201b630000134a1760201c565b6000630000129a6061630000043a60201b630000134a1760201c565b600063000012e68563000017db565b90507f69ed0315cadd84320a7846d07030f3f22e49893b69216566c8e95d35c34512ce85858585604051630000132194939291906300002b19565b60405180910390a1600063000013478660001b630000183b60201b63000020431760201c565b905060005b8151811015630000140157600082828151811063000013715763000013716300002a4c565b60200260200101519050806001600160a01b0316637d09d033898989896040518563ffffffff1660e01b815260040163000013b194939291906300002b19565b600060405180830381600087803b15801563000013cd57600080fd5b505af115801563000013e3573d6000803e3d6000fd5b5050505050808063000013f7906300002c03565b915050630000134c565b50630000141b8263000015c660201b6300001eed1760201c565b60ff168460ff161015630000144e576300001447868684878763000018ef60201b63000020cc1760201c565b630000076d565b630000076d868684878763000019bb60201b63000021721760201c565b6000808260c581111563000014865763000014866300002a62565b60ff169050602081101563000014a55763000004c18160016300002bbc565b604081101563000014cf57602063000014c18260016300002bbc565b63000004c191906300002cef565b606081101563000014eb57604063000014c18260016300002bbc565b60608360c581111563000015055763000015056300002a62565b0363000015155750600192915050565b60618360c5811115630000152f57630000152f6300002a62565b03630000153f5750601492915050565b50600092915050565b6008820281811c7fff0000000000000000000000000000000000000000000000000000000000000090911c198416179392505050565b6008820281811c6001600160f01b031990911c198416179392505050565b1590565b600063000015bd8260036300001a2a60201b6300001f0a1760201c565b60f81c92915050565b600063000015bd8260026300001a2a60201b6300001f0a1760201c565b6000630000160d8363000015fa8460046300002bbc565b6300001a2a60201b6300001f0a1760201c565b60f81c60c581111563000004c15763000004c16300002a62565b604080516001808252818301909252600091829190602080830190803683370190505090508260001b8160008151811063000016695763000016696300002a4c565b602002602001018181525050600063000016a4600080516020630000852983398151915260001c8363000016c760201b63000021af1760201c565b905063000016bf816300001a3160201b63000022051760201c565b949350505050565b60006000805160206300008509833981519152838360405160200163000016f2939291906300002d0c565b60408051601f1981840301815291905280516020909101209392505050565b90565b9055565b600063000017278463000017db565b905081516000148063000017565750630000174f816300001a3560201b63000022091760201c565b60ff168251145b630000179d576300001775816300001a3560201b63000022091760201c565b825160405163f2b2755960e01b815260ff90921660048301526024820152604401630000050d565b630000043484848460405160200163000017b991906300002d2f565b6040516020818303038152906040526300001a6560201b63000022271760201c565b600063000017f682630000162760201b6300001f251760201c565b9050630000181181630000159c60201b6300001ed81760201c565b15630000183657604051631d2a2a2960e11b815260048101839052602401630000050d565b919050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110630000187b57630000187b6300002a4c565b602002602001018181525050600063000018b860008051602063000085a983398151915260001c8360006300001bbd60201b630000233d1760201c565b905063000016bf63000018dc82600084516300001c6c60201b63000023e31760201c565b6300001cea60201b63000024731760201c565b600063000019118360ff168563000015e360201b6300001ef91790919060201c565b9050815163000019328260c581111563000009ef5763000009ef6300002a62565b14630000197c5763000019568160c581111563000009ef5763000009ef6300002a62565b825160405163521b3d3360e01b815260048101929092526024820152604401630000050d565b6000630000198c878763000016c7565b90506000630000199e86866300001d0b565b905063000009658282866300001d6f60201b63000024841760201c565b600063000019d68463000015c660201b6300001eed1760201c565b63000019e490846300002bda565b905063000019fd86868385516300001d8e60201b60201c565b60006300001a0e8787846300001e00565b905063000010f781846300001e4d60201b63000024991760201c565b6008021b90565b5490565b60006300001a448263000015a0565b6300001a518363000015c6565b6300001a5f91906300002d46565b92915050565b6040805160028082526060820183526000926020830190803683370190505090508251816000815181106300001aa1576300001aa16300002a4c565b602002602001019061ffff16908161ffff16815250508151816001815181106300001ad2576300001ad26300002a4c565b602002602001019061ffff16908161ffff168152505060006300001b03826300001e5d60201b63000024a51760201c565b905060006300001b2082630000171160201b6300001fa21760201c565b85856040516020016300001b38939291906300002d71565b60408051601f198184030181526001808452838301909252925060009190602080830190803683370190505090508660001b816000815181106300001b83576300001b836300002a4c565b60200260200101818152505063000010f7600080516020630000858983398151915260001c82846300001f2a60201b63000025821760201c565b60606300001bcb6300001205565b156300001bf6576300001bed8484846300001f8360201b63000025da1760201c565b905063000004c1565b604051636a50093760e11b8152339063d4a0126e906300001c21908790879087906004016300002db6565b600060405180830381865afa1580156300001c40573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526300001bed91908101906300002de6565b60008183111580156300001c81575083518211155b6300001caa578383836040516323230fa360e01b8152600401630000050d939291906300002e9f565b602084016300001cbc84826300002bbc565b905060006300001cce85856300002cef565b6001600160801b031660809290921b9190911795945050505050565b6060600063000004c183601460006300001faf60201b63000025f51760201c565b600080805b8360ff168110156300001d67576300001d3f6300000ca9828763000015e360201b6300001ef91790919060201c565b6300001d4d90836300002bbc565b9150806300001d5d816300002c03565b9150506300001d10565b509392505050565b600060208201905063000004348484838551630000210f60201b60201c565b60006300001d9e8585630000220a565b905060006300001dbb826300001a3160201b63000022051760201c565b90506300001ddf8460ff168483630000223560201b6300002738179092919060201c565b9050630000076d826300000e5c83630000171160201b6300001fa21760201c565b600060008051602063000085098339815191528484846040516020016300001e2d94939291906300002ec8565b60408051601f198184030181529190528051602090910120949350505050565b630000032d826000836300001d6f565b6000806000805b84518110156300001f0a576300001ec9836300001e848360026300002eff565b6300001e939060046300002bbc565b8784815181106300001eab576300001eab6300002a4c565b602002602001015160f01b630000157e60201b6300001ea21760201c565b92508481815181106300001ee3576300001ee36300002a4c565b602002602001015161ffff16826300001efe91906300002f24565b91506001016300001e64565b5063000016bf8260008360e01b630000231660201b63000028141760201c565b6300001f366300001205565b156300001f58576300001095838383630000233460201b630000284a1760201c565b60405163328d068d60e11b8152339063651a0d1a9063000010c5908690869086906004016300002c22565b606060006300001f948563000017db565b90506300001fa68585858463000026b4565b95945050505050565b606060006300001fcc85630000271f60201b6300002a9f1760201c565b905060006300001fe986630000272560201b6300002aa51760201c565b9050600084630000201a5763000020038660086300002eff565b6300002013906101006300002cef565b630000201d565b60005b9050600086838163000020365763000020366300002f49565b049050630000204787846300002f5f565b1563000020be5760405162461bcd60e51b815260206004820152603d60248201527f756e7061636b546f41727261793a207061636b65644c656e677468206d75737460448201527f2062652061206d756c7469706c65206f6620656c656d656e7453697a650000006064820152608401630000050d565b602080820201604051955080860160405250808552600060208601855b838310156300002101578051851c825260019290920191602090910190890163000020db565b505050505050509392505050565b602083048401935060208381630000212d57630000212d6300002f49565b069250821563000021a35760008360200390506000630000215b83630000273160201b6300002aba1760201c565b90506008850281811c91508451811c9050811987541682821617875550818311630000218a5750506300000434565b63000021996001876300002bbc565b9550509182019190035b6020811063000021d4578151845563000021c06001856300002bbc565b935060209190910190601f190163000021a3565b8015630000043457600063000021f782630000273160201b6300002aba1760201c565b8554845182169119161785555050505050565b60006000805160206300008509833981519152838360405160200163000016f2939291906300002f83565b6000838163000022458260e01c90565b90506000630000225a8760ff88166300002744565b9050808510630000228a57630000227381866300002cef565b630000228190836300002bbc565b915063000022a9565b630000229885826300002cef565b63000022a690836300002cef565b91505b600063000022ba8760026300002eff565b63000022c99060046300002bbc565b905063000022ea8460008560e01b630000231660201b63000028141760201c565b9350630000230a84828860f01b630000157e60201b6300001ea21760201c565b98975050505050505050565b6008820281811c6001600160e01b031990911c198416179392505050565b600063000023438463000017db565b90506000630000236082630000278c60201b6300002ac71760201c565b9050600081905060008063000023838563000015a060201b6300001edc1760201c565b60ff16111563000023e35763000023a88584630000279260201b6300002acd1760201c565b905063000023c381630000273e60201b6300002ad51760201c565b63000023d29060206300002bbc565b63000023e090836300002bbc565b91505b84518214630000241557845160405163521b3d3360e01b8152630000050d918491600401918252602082015260400190565b6000805160206300008569833981519152878787604051630000243c939291906300002c22565b60405180910390a1600063000024628860001b630000183b60201b63000020431760201c565b905060005b8151811015630000251a576000828281518110630000248c57630000248c6300002a4c565b60200260200101519050806001600160a01b0316637ae4118a8b8b8b6040518463ffffffff1660e01b815260040163000024ca939291906300002c22565b600060405180830381600087803b15801563000024e657600080fd5b505af115801563000024fc573d6000803e3d6000fd5b505050505080806300002510906300002c03565b9150506300002467565b5060006300002537898963000016c760201b63000021af1760201c565b90506000630000255488630000279a60201b6300002adb1760201c565b905063000025738260008389630000210f60201b6300002ae11760201c565b63000025828660206300002bbc565b630000259090826300002bbc565b905063000025ab8763000015a060201b6300001edc1760201c565b60ff1660000363000025c35750505050505050505050565b600063000025df8b8b630000220a60201b6300002b9f1760201c565b90506300002600816300000e5c87630000171160201b6300001fa21760201c565b60008060005b630000261f8b63000015a060201b6300001edc1760201c565b60ff168160ff16101563000026a45763000026498e8e836300001e0060201b6300002bd61760201c565b9250630000266b8160ff1689630000274460201b6300002c2f1790919060201c565b9150630000268a8360008785630000210f60201b6300002ae11760201c565b630000269882866300002bbc565b94506001016300002606565b5050505050505050505050505050565b606063000026cf8263000015c660201b6300001eed1760201c565b60ff168360ff16101563000027035763000026fa8585858563000027a060201b6300002c611760201c565b905063000016bf565b63000026fa85858585630000283360201b6300002cc11760201c565b60801c90565b6001600160801b031690565b60001960089091021c1990565b60e01c90565b60008063000027568360026300002eff565b63000027659060046300002bbc565b9050630000278184826300001a2a60201b6300001f0a1760201c565b60f01c949350505050565b60f01c90565b016020015190565b60200190565b6060600063000027c48460ff168463000015e360201b6300001ef91790919060201c565b9050600063000027e58260c581111563000009ef5763000009ef6300002a62565b9050600063000027f7888863000016c7565b90506000630000280986886300001d0b565b9050630000282682848363000028be60201b6300002d0e1760201c565b9998505050505050505050565b6060600063000028508363000015c660201b6300001eed1760201c565b630000285e90856300002bda565b9050600063000028718787846300001e00565b9050600063000028a260ff8416630000288c8a8a6300002921565b630000274460201b6300002c2f1790919060201c565b9050630000230a8282630000293260201b6300002d6e1760201c565b6060826001600160401b0381111563000028de5763000028de6300002a36565b6040519080825280601f01601f191660200182016040528015630000290a576020820181803683370190505b509050602081016300001d67858585846300002944565b60008063000016a48484630000220a565b606063000004c18383600063000028be565b60208204840193506020828163000029625763000029626300002f49565b069150811563000029d05760008260200390506000630000299082630000273160201b6300002aba1760201c565b90508554600885021b81198451168282161784525081851163000029b75750506300000434565b63000029c66001876300002bbc565b9550509283900392015b602083106300002a00578354815263000029ed6001856300002bbc565b9350601f199092019160200163000029d0565b821563000004345760006300002a2384630000273160201b6300002aba1760201c565b8251865482169119161782525050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600081518084526020808501945080840160005b838110156300002aac578151875295820195908201906001016300002a8c565b509495945050505050565b60005b838110156300002ad65781810151838201526020016300002aba565b8381111563000004345750506000910152565b600081518084526300002b058160208601602086016300002ab7565b601f01601f19169290920160200192915050565b8481526080602082015260006300002b3660808301866300002a78565b60ff8516604084015282810360608401526300000b7281856300002ae9565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81036300002b87576300002b876300002b55565b60010192915050565b600061ffff8083168185168083038211156300002bb3576300002bb36300002b55565b01949350505050565b600082198211156300002bd5576300002bd56300002b55565b500190565b600060ff821660ff8416808210156300002bfa576300002bfa6300002b55565b90039392505050565b6000600182016300002c1b576300002c1b6300002b55565b5060010190565b8381526060602082015260006300002c3f60608301856300002a78565b82810360408401526300002c5581856300002ae9565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156300002caf5782840389526300002c9b8483516300002ae9565b988501989350908401906001016300002c7d565b5091979650505050505050565b8381526060602082015260006300002cd960608301856300002ae9565b82810360408401526300002c5581856300002c5f565b6000828210156300002d07576300002d076300002b55565b500390565b8381528260208201526060604082015260006300001fa660608301846300002a78565b60208152600063000004c160208301846300002c5f565b600060ff821660ff84168060ff038211156300002d69576300002d696300002b55565b019392505050565b838152600083516300002d8d8160208501602088016300002ab7565b808301905083516300002da98160208401602088016300002ab7565b0160200195945050505050565b8381526060602082015260006300002dd360608301856300002a78565b905060ff83166040830152949350505050565b6000602082840312156300002dfa57600080fd5b81516001600160401b03808211156300002e1357600080fd5b818401915084601f8301126300002e2957600080fd5b8151818111156300002e41576300002e416300002a36565b604051601f8201601f19908116603f011681019083821181831017156300002e6f576300002e6f6300002a36565b816040528281528760208487010111156300002e8a57600080fd5b6300000b728360208301602088016300002ab7565b6060815260006300002eb660608301866300002ae9565b60208301949094525060400152919050565b8481528360208201526080604082015260006300002eeb60808301856300002a78565b905060ff8316606083015295945050505050565b60008160001904831182151516156300002f1f576300002f1f6300002b55565b500290565b600063ffffffff8083168185168083038211156300002bb3576300002bb36300002b55565b634e487b7160e01b600052601260045260246000fd5b6000826300002f7e57634e487b7160e01b600052601260045260246000fd5b500690565b8381528260208201526080604082015260006300002fa660808301846300002a78565b828103606084015260068152650d8cadccee8d60d31b602082015260408101915050949350505050565b6154c8806300002fe16000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c8063678e3cfb116100ee578063a5c2f00711610097578063d4a0126e11610071578063d4a0126e14610364578063d99ddc0714610377578063f37c215e1461038a578063fcc7cfa11461039d57600080fd5b8063a5c2f007146101ec578063a666a3801461033e578063afc6325f1461035157600080fd5b806391c45d22116100c857806391c45d2214610305578063971eb6cb14610318578063a2d3d4fb1461032b57600080fd5b8063678e3cfb146102cc57806388140fe0146102df57806391a0f609146102f257600080fd5b80634408b6fd1161015b5780634d561468116101355780634d5614681461028057806351ea4f1b146102935780635f44b42a146102a6578063651a0d1a146102b957600080fd5b80634408b6fd1461024757806348ea14ab1461025a57806349ba56231461026d57600080fd5b8063174e23be1161018c578063174e23be14610201578063293b4852146102145780632b26fb291461023457600080fd5b806304fb25a9146101b357806307ff106e146101d95780630d14ff90146101ee575b600080fd5b6101c66101c13660046144df565b6103b0565b6040519081526020015b60405180910390f35b6101ec6101e7366004614579565b6104b6565b005b6101ec6101fc3660046145a9565b505050565b6101ec61020f366004614645565b610501565b6102276102223660046146bf565b610575565b6040516101d09190614783565b6101c6610242366004614796565b61059e565b6101c66102553660046147af565b6105af565b6101ec610268366004614834565b6105d2565b61022761027b3660046149d3565b610661565b6101ec61028e366004614834565b61072c565b6101ec6102a1366004614a57565b610861565b6101ec6102b4366004614ae4565b6108f3565b6101ec6102c7366004614b6c565b61093e565b6101ec6102da3660046145a9565b6109c6565b6101ec6102ed366004614bc8565b610a0e565b6101ec610300366004614ae4565b610a39565b6101ec610313366004614a57565b610b41565b6101ec610326366004614bea565b610bcb565b610227610339366004614c36565b610c1f565b6101ec61034c366004614c89565b610c62565b6101ec61035f3660046145a9565b610da0565b610227610372366004614d4d565b610e2a565b610227610385366004614bea565b610e6b565b6101ec6103983660046145a9565b610eaa565b6101c66103ab3660046146bf565b610f30565b60006103bb83612d7c565b15610402576040517fb86487840000000000000000000000000000000000000000000000000000000081526001600160a01b03841660048201526024015b60405180910390fd5b600061044388888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b90503361044f82612db3565b6001600160a01b03161461047c57878733604051631ff9118960e21b81526004016103f993929190614dd6565b61048888888888610f30565b9150610495828585612ddf565b61049f8483612e89565b6104ab8185600161127e565b509695505050505050565b336104c083612db3565b6001600160a01b0316146104f3576104d782612eb4565b33604051631ff9118960e21b81526004016103f9929190614e03565b6104fd8282612ee0565b5050565b3361050b86612db3565b6001600160a01b031614610522576104d785612eb4565b61056e8585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105699250869150879050614e2e565b611fa5565b5050505050565b60606105938585604051806020016040528060008152508686610661565b90505b949350505050565b60006105a982612eea565b92915050565b60006105bd86868686610f30565b90506105c98183611c36565b95945050505050565b60006105e08a8a8a8a612f36565b90506106558187878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612ffe92505050565b50505050505050505050565b6060600086868660405160200161067a93929190614eb2565b6040516020818303038152906040529050600061069c82805160209091012090565b90506000806106aa8361317e565b9150915080610709576106be8a8a33613210565b6106e157898933604051631ff9118960e21b81526004016103f993929190614dd6565b6106ea8861325a565b6107095787604051630229745760e21b81526004016103f99190614783565b61071e338389896107198961328b565b61332a565b9a9950505050505050505050565b610737898933613210565b61075a57888833604051631ff9118960e21b81526004016103f993929190614dd6565b61079987878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325a92505050565b6107ba578686604051630229745760e21b81526004016103f9929190614ed9565b6000898989896040516020016107d39493929190614eed565b6040516020818303038152906040528051906020012060001c90506106558187878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611c8c92505050565b61086b8633613432565b610878576104d786612eb4565b6108eb8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612ffe92505050565b505050505050565b6108eb61093587878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b85858585610501565b6109488533613432565b610955576104d785612eb4565b61056e8585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8901819004810282018101909252878152925087915086908190840183828082843760009201919091525061284a92505050565b6101fc610a0884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b826104b6565b33610a1883612db3565b6001600160a01b031614610a2f576104d782612eb4565b6104fd8282611c36565b610a44868633613210565b610a6757858533604051631ff9118960e21b81526004016103f993929190614dd6565b610aa684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325a92505050565b610ac7578383604051630229745760e21b81526004016103f9929190614ed9565b600086868686604051602001610ae09493929190614eed565b6040516020818303038152906040528051906020012060001c9050610b388184848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061343e92505050565b50505050505050565b610b4b8633613432565b610b58576104d786612eb4565b6108eb8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611c8c92505050565b610bd58333613432565b610be2576104d783612eb4565b6101fc8383838080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061343e92505050565b6060610593858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506135c7915050565b565b610c6d888833613210565b610c9057878733604051631ff9118960e21b81526004016103f993929190614dd6565b610ccf86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325a92505050565b610cf0578585604051630229745760e21b81526004016103f9929190614ed9565b600088888888604051602001610d099493929190614eed565b6040516020818303038152906040528051906020012060001c9050610d958186868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a01819004810282018101909252888152925088915087908190840183828082843760009201919091525061284a92505050565b505050505050505050565b6000610de184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b905033610ded82612db3565b6001600160a01b031614610e1a57838333604051631ff9118960e21b81526004016103f993929190614dd6565b610e24818361372c565b50505050565b6060610593858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792506125da915050565b6060610596848484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137cb92505050565b6000610eeb84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b905033610ef782612db3565b6001600160a01b031614610f2457838333604051631ff9118960e21b81526004016103f993929190614dd6565b610e248183600161127e565b6000610f7183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328b92505050565b610f92578282604051630229745760e21b81526004016103f9929190614ed9565b6000610fd386868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b60408051602081019091526000905290507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708114806110165750611016816137e5565b611037578585604051630229745760e21b81526004016103f9929190614ed9565b600083900361105d578383604051630229745760e21b81526004016103f9929190614ed9565b6000868686866040516020016110769493929190614eed565b60408051808303601f19018152919052805160208201209350905061109a836137e5565b156110d357806040517f71c3ce580000000000000000000000000000000000000000000000000000000081526004016103f99190614783565b6110dd8382611228565b6110e78333611253565b6110f38333600161127e565b5050949350505050565b6111307f466b87090ce2bc34362737dab7b900dfc94a202aee6a6323f6813f7ce59d975e61112b605f61134a565b611c36565b6111386113c2565b6111406113ee565b61114861141a565b610c60611455565b610c607f9bb503956ffba2113cfb11e14a2bee495dc4af006cd9ff16588ff2a9772d030461117c613811565b611490565b610c607fbf3b70b2ef556654851b65c7b706572cfa3260c0098f34675bc498d7fca6c738611515565b610c607fb07871d3346b8174fd8c44ae24608a1fbb23c09a1331e6124a566242df16e03361117c6138ce565b610c607f62979a91fdbe2d783bb7cc5fd3423fd0f5a933addfd71710e74eaf69d8f9eaa8611524565b610c607fc3b575e3277c8e0d6f7776cc6e1bb3aeeadf47feb68a2aa8a9bf38d7a2782865611530565b6104fd7fbf3b70b2ef556654851b65c7b706572cfa3260c0098f34675bc498d7fca6c738838361153c565b6104fd7fc3b575e3277c8e0d6f7776cc6e1bb3aeeadf47feb68a2aa8a9bf38d7a2782865838361158e565b6040805160028082526060820183526000926020830190803683370190505090508360001b816000815181106112b6576112b6614f0f565b6020026020010181815250508260601b6bffffffffffffffffffffffff1916816001815181106112e8576112e8614f0f565b602002602001018181525050610e247fb07871d3346b8174fd8c44ae24608a1fbb23c09a1331e6124a566242df16e03360001c8260008560405160200161133691151560f81b815260010190565b604051602081830303815290604052611603565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061138357611383614f0f565b602002602001019060c581111561139c5761139c614f25565b908160c58111156113af576113af614f25565b9052506113bb816119e1565b9392505050565b610c607f10cff6e9a45d56553c0d6a15090a896923104ebcf7e6f897a55ce1a25117989061117c613908565b610c607f7cf2f10cacf485bbd2f754f8ea5bb61bc02278cb975662e05b61c8020e2db13261117c613942565b6000806114256139c1565b90925090506104fd7f10cff6e9a45d56553c0d6a15090a896923104ebcf7e6f897a55ce1a251179890838361195b565b600080611460613a89565b90925090506104fd7f7cf2f10cacf485bbd2f754f8ea5bb61bc02278cb975662e05b61c8020e2db132838361195b565b611498613ba4565b156114a7576104fd8282611c36565b6040517f88140fe0000000000000000000000000000000000000000000000000000000008152600481018390526024810182905233906388140fe0906044015b600060405180830381600087803b15801561150157600080fd5b505af11580156108eb573d6000803e3d6000fd5b6115218161117c613c15565b50565b6115218161117c613c26565b6115218161117c613c32565b604080516001808252818301909252600091602080830190803683370190505090508260001b8160008151811061157557611575614f0f565b602002602001018181525050610e248482600085611603565b604080516001808252818301909252600091602080830190803683370190505090508260001b816000815181106115c7576115c7614f0f565b602002602001018181525050610e248482600085604051602001611336919060609190911b6bffffffffffffffffffffffff1916815260140190565b61160b613ba4565b156116215761161c84848484611c8c565b610e24565b6040517f91c45d2200000000000000000000000000000000000000000000000000000000815233906391c45d2290611663908790879087908790600401614f76565b600060405180830381600087803b15801561167d57600080fd5b505af1158015611691573d6000803e3d6000fd5b5050505050505050565b806116bc57604051635318beb960e01b8152600060048201526024016103f9565b60006116c782611edc565b60ff169050600e8111156116f157604051635318beb960e01b8152600481018290526024016103f9565b60006116fc83611eed565b60ff169050601c61170d8383614fc0565b11156117395761171d8282614fc0565b604051635318beb960e01b81526004016103f991815260200190565b60008060005b6117498585614fc0565b81101561181657600061177561175f8884611ef9565b60c581111561177057611770614f25565b611dbb565b11156117c6578381106117b4576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826117be81614fd8565b93505061180e565b83811015611800576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8161180a81614fd8565b9250505b60010161173f565b5082821461183a57604051635318beb960e01b8152600481018390526024016103f9565b83811461056e57604051635318beb960e01b8152600481018290526024016103f9565b604080516001808252818301909252600091602080830190803683370190505090508260001b8160008151811061189657611896614f0f565b602090810291909101015260006118cd7f466b87090ce2bc34362737dab7b900dfc94a202aee6a6323f6813f7ce59d975e836121af565b83815590506118db565b9055565b7f89c69f1332d0769f7fc2e4abeff42a2e0fcbfe7116617ad379b620bf0e08879f7f466b87090ce2bc34362737dab7b900dfc94a202aee6a6323f6813f7ce59d975e838560405160200161193191815260200190565b60408051601f198184030181529082905261194d939291614ff2565b60405180910390a150505050565b611963613ba4565b15611973576101fc838383611fa5565b6040517f174e23be000000000000000000000000000000000000000000000000000000008152339063174e23be906119b39086908690869060040161507c565b600060405180830381600087803b1580156119cd57600080fd5b505af1158015610b38573d6000803e3d6000fd5b6000601c82511115611a0b578151604051635318beb960e01b81526004016103f991815260200190565b60008060008060005b8651811015611b32576000611a4d888381518110611a3457611a34614f0f565b602002602001015160c581111561177057611770614f25565b905061ffff811615611aa3578215611a91576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83611a9b816150a7565b945050611aa8565b600192505b611ab281866150c6565b9450611b2786611ac3846004614fc0565b8a8581518110611ad557611ad5614f0f565b602002602001015160c5811115611aee57611aee614f25565b60f81b6008820281811c7fff0000000000000000000000000000000000000000000000000000000000000090911c198416179392505050565b955050600101611a14565b506000828751611b4291906150ec565b9050600e8160ff161115611b6e57604051635318beb960e01b815260ff821660048201526024016103f9565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851660f085901b1794507fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85167dff000000000000000000000000000000000000000000000000000000000060e885901b161794507fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff85167cff0000000000000000000000000000000000000000000000000000000060e083901b16175b979650505050505050565b611c3f8161169b565b611c4882613c3e565b15611c82576040517f5fd297a2000000000000000000000000000000000000000000000000000000008152600481018390526024016103f9565b6104fd828261185d565b6000611c9785612eea565b90507f69ed0315cadd84320a7846d07030f3f22e49893b69216566c8e95d35c34512ce85858585604051611cce9493929190614f76565b60405180910390a16000611ce186612043565b905060005b8151811015611d85576000828281518110611d0357611d03614f0f565b60200260200101519050806001600160a01b0316637d09d033898989896040518563ffffffff1660e01b8152600401611d3f9493929190614f76565b600060405180830381600087803b158015611d5957600080fd5b505af1158015611d6d573d6000803e3d6000fd5b50505050508080611d7d90614fd8565b915050611ce6565b50611d8f82611eed565b60ff168460ff161015611dae57611da986868487876120cc565b6108eb565b6108eb8686848787612172565b6000808260c5811115611dd057611dd0614f25565b60ff1690506020811015611de9576113bb816001614fc0565b6040811015611e09576020611dff826001614fc0565b6113bb919061510f565b6060811015611e1f576040611dff826001614fc0565b60608360c5811115611e3357611e33614f25565b03611e415750600192915050565b60618360c5811115611e5557611e55614f25565b03611e635750601492915050565b50600092915050565b6008820281811c7fff0000000000000000000000000000000000000000000000000000000000000090911c198416179392505050565b6008820281811c7fffff00000000000000000000000000000000000000000000000000000000000090911c198416179392505050565b1590565b6000601882901b5b60f81c92915050565b6000601082901b611ee4565b6000611f1183611f0a846004614fc0565b6008021b90565b60f81c60c58111156113bb576113bb614f25565b604080516001808252818301909252600091829190602080830190803683370190505090508260001b81600081518110611f6157611f61614f0f565b60209081029190910101526000611f987f466b87090ce2bc34362737dab7b900dfc94a202aee6a6323f6813f7ce59d975e836121af565b9050610596815490565b90565b6000611fb084612eea565b9050815160001480611fcd5750611fc681612209565b60ff168251145b61201957611fda81612209565b82516040517ff2b2755900000000000000000000000000000000000000000000000000000000815260ff909216600483015260248201526044016103f9565b610e2484848460405160200161202f9190615126565b604051602081830303815290604052612227565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061207d5761207d614f0f565b602090810291909101015260006120b57f10cff6e9a45d56553c0d6a15090a896923104ebcf7e6f897a55ce1a251179890838361233d565b90506105966120c782600084516123e3565b612473565b60006120db8460ff8516611ef9565b905081516120f48260c581111561177057611770614f25565b1461214b5761210e8160c581111561177057611770614f25565b82516040517f521b3d33000000000000000000000000000000000000000000000000000000008152600481019290925260248201526044016103f9565b600061215787876121af565b905060006121658686613c53565b9050611691828286612484565b600061217d84611eed565b61218790846150ec565b90506121968686838551613c8e565b60006121a3878784612bd6565b9050610b388184612499565b60007f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d983836040516020016121e693929190615139565b60408051601f1981840301815291905280516020909101209392505050565b5490565b600061221482611edc565b61221d83611eed565b6105a99190615158565b60408051600280825260608201835260009260208301908036833701905050905082518160008151811061225d5761225d614f0f565b602002602001019061ffff16908161ffff168152505081518160018151811061228857612288614f0f565b602002602001019061ffff16908161ffff168152505060006122a9826124a5565b905060008185856040516020016122c29392919061517d565b60408051601f198184030181526001808452838301909252925060009190602080830190803683370190505090508660001b8160008151811061230757612307614f0f565b6020908102919091010152610b387f7cf2f10cacf485bbd2f754f8ea5bb61bc02278cb975662e05b61c8020e2db1328284612582565b6060612347613ba4565b1561235e576123578484846125da565b90506113bb565b6040517fd4a0126e000000000000000000000000000000000000000000000000000000008152339063d4a0126e9061239e908790879087906004016151ba565b600060405180830381865afa1580156123bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261235791908101906151e6565b60008183111580156123f6575083518211155b612432578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016103f993929190615254565b602084016124408482614fc0565b9050600061244e858561510f565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006113bb83601460006125f5565b6000602082019050610e248484838551612ae1565b6104fd82600083612484565b6000806000805b845181101561255757612522836124c4836002615279565b6124cf906004614fc0565b8784815181106124e1576124e1614f0f565b602002602001015160f01b6008820281811c7fffff00000000000000000000000000000000000000000000000000000000000090911c198416179392505050565b925084818151811061253657612536614f0f565b602002602001015161ffff168261254d9190615298565b91506001016124ac565b507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821660e082901b17610596565b61258a613ba4565b1561259a576101fc83838361284a565b6040517f651a0d1a000000000000000000000000000000000000000000000000000000008152339063651a0d1a906119b390869086908690600401614ff2565b606060006125e785612eea565b90506105c985858584613cc0565b606060006126038560801c90565b90506fffffffffffffffffffffffffffffffff851660008461263b5761262a866008615279565b6126369061010061510f565b61263e565b60005b90506000868381612651576126516152b7565b04905061265e87846152cd565b156126eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f756e7061636b546f41727261793a207061636b65644c656e677468206d75737460448201527f2062652061206d756c7469706c65206f6620656c656d656e7453697a6500000060648201526084016103f9565b602080820201604051955080860160405250808552600060208601855b8383101561272a578051851c8252600192909201916020909101908901612708565b505050505050509392505050565b600083816127468260e01c90565b90506000612757878760ff16612c2f565b905080851061277b5761276a818661510f565b6127749083614fc0565b9150612792565b612785858261510f565b61278f908361510f565b91505b600061279f876002615279565b6127aa906004614fc0565b90507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841660e084901b1793507fffff0000000000000000000000000000000000000000000000000000000000006008820290811c19851660f088901b90911c175b98975050505050505050565b6008820281811c7fffffffff0000000000000000000000000000000000000000000000000000000090911c198416179392505050565b600061285584612eea565b905060006128638260f01c90565b90508060008061287285611edc565b60ff1611156128a057506020848301015160e081901c612893906020614fc0565b61289d9083614fc0565b91505b845182146128e75784516040517f521b3d330000000000000000000000000000000000000000000000000000000081526103f9918491600401918252602082015260400190565b7f89c69f1332d0769f7fc2e4abeff42a2e0fcbfe7116617ad379b620bf0e08879f87878760405161291a93929190614ff2565b60405180910390a1600061292d88612043565b905060005b81518110156129cf57600082828151811061294f5761294f614f0f565b60200260200101519050806001600160a01b0316637ae4118a8b8b8b6040518463ffffffff1660e01b815260040161298993929190614ff2565b600060405180830381600087803b1580156129a357600080fd5b505af11580156129b7573d6000803e3d6000fd5b505050505080806129c790614fd8565b915050612932565b5060006129dc89896121af565b9050602087016129ef8260008389612ae1565b6129fa866020614fc0565b612a049082614fc0565b9050612a0f87611edc565b60ff16600003612a255750505050505050505050565b6000612a318b8b612b9f565b858155905060008060005b612a458b611edc565b60ff168160ff161015612a8f57612a5d8e8e83612bd6565b9250612a6c8860ff8316612c2f565b9150612a7b8360008785612ae1565b612a858286614fc0565b9450600101612a3c565b5050505050505050505050505050565b60801c90565b6fffffffffffffffffffffffffffffffff1690565b60001960089091021c1990565b60f01c90565b016020015190565b60e01c90565b60200190565b602083048401935060208381612af957612af96152b7565b0692508215612b525760208390036000600019600884021c1990506008850281811c91508451811c9050811987541682821617875550818311612b3d575050610e24565b612b48600187614fc0565b9550509182019190035b60208110612b7b5781518455612b69600185614fc0565b935060209190910190601f1901612b52565b8015610e24576000600019600883021c198554845182169119161785555050505050565b60007f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d983836040516020016121e6939291906152e1565b60007f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9848484604051602001612c0f9493929190615341565b60408051601f198184030181529190528051602090910120949350505050565b600080612c3d836002615279565b612c48906004614fc0565b9050612c5684826008021b90565b60f01c949350505050565b60606000612c728360ff8616611ef9565b90506000612c8b8260c581111561177057611770614f25565b90506000612c9988886121af565b90506000612ca78688613c53565b9050612cb4828483612d0e565b9998505050505050505050565b60606000612cce83611eed565b612cd890856150ec565b90506000612ce7878784612bd6565b90506000612d028360ff16612cfc8a8a613cf7565b90612c2f565b90506128088282612d6e565b60608267ffffffffffffffff811115612d2957612d2961490e565b6040519080825280601f01601f191660200182016040528015612d53576020820181803683370190505b50905060208101612d6685858584613d04565b509392505050565b60606113bb83836000612d0e565b60006105a97f62979a91fdbe2d783bb7cc5fd3423fd0f5a933addfd71710e74eaf69d8f9eaa883613db9565b805160209091012090565b60006105a97fc3b575e3277c8e0d6f7776cc6e1bb3aeeadf47feb68a2aa8a9bf38d7a278286583613e2d565b6040516bffffffffffffffffffffffff19606084901b16602082015281151560f81b603482015260009060350160408051808303601f1901815260018084528383019092529250600091908160200160208202803683370190505090508460001b81600081518110612e5357612e53614f0f565b602090810291909101015261056e7f9bb503956ffba2113cfb11e14a2bee495dc4af006cd9ff16588ff2a9772d03048284612582565b6104fd7f62979a91fdbe2d783bb7cc5fd3423fd0f5a933addfd71710e74eaf69d8f9eaa88383613e98565b60606105a97fbf3b70b2ef556654851b65c7b706572cfa3260c0098f34675bc498d7fca6c73883613f06565b6104fd8282613f70565b6000612ef582611f25565b905080612f31576040517f3a545452000000000000000000000000000000000000000000000000000000008152600481018390526024016103f9565b919050565b6000612f43858533613210565b612f6657848433604051631ff9118960e21b81526004016103f993929190614dd6565b612fa583838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061325a92505050565b612fc6578282604051630229745760e21b81526004016103f9929190614ed9565b84848484604051602001612fdd9493929190614eed565b60408051601f19818403018152919052805160209091012095945050505050565b600061300985612eea565b905061301481611eed565b60ff168360ff161015613053576040517f14306eb800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061306186868685612cc1565b83604051602001613073929190615374565b60405160208183030381529060405290507f69ed0315cadd84320a7846d07030f3f22e49893b69216566c8e95d35c34512ce868686846040516130b99493929190614f76565b60405180910390a160006130cc87612043565b905060005b81518110156131705760008282815181106130ee576130ee614f0f565b60200260200101519050806001600160a01b0316637d09d0338a8a8a886040518563ffffffff1660e01b815260040161312a9493929190614f76565b600060405180830381600087803b15801561314457600080fd5b505af1158015613158573d6000803e3d6000fd5b5050505050808061316890614fd8565b9150506130d1565b50610b38878785888861405f565b60408051600180825281830190925260009182918291602080830190803683370190505090508360001b816000815181106131bb576131bb614f0f565b602090810291909101015260006131fa7f9bb503956ffba2113cfb11e14a2bee495dc4af006cd9ff16588ff2a9772d0304836131f5613811565b61410f565b905061320581614169565b935093505050915091565b600061059661325485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612da892505050565b83613432565b8051600090613267575060015b602f602083015160001a0361327a575060015b6001825103612f3157506000919050565b60006132968261325a565b6132a257506000919050565b8160015b8151811015613320578181815181106132c1576132c1614f0f565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167f2f0000000000000000000000000000000000000000000000000000000000000003613318575060009392505050565b6001016132a6565b5060019392505050565b606060008484886040516020016133439392919061539a565b6040516020818303038152906040529050600080846133bc57876001600160a01b03168360405161337491906153c0565b6000604051808303816000865af19150503d80600081146133b1576040519150601f19603f3d011682016040523d82523d6000602084013e6133b6565b606091505b50613416565b876001600160a01b0316836040516133d491906153c0565b600060405180830381855af49150503d806000811461340f576040519150601f19603f3d011682016040523d82523d6000602084013e613414565b606091505b505b91509150811561342a5792506105c9915050565b805160208201fd5b60006113bb838361418f565b600061344983612eea565b90507ffd36aacc4303ae7315a10b19412d3c2df14f76c9687ef14bf499d0b87373f6e2838360405161347c9291906153dc565b60405180910390a1600061348f84612043565b905060005b815181101561352f5760008282815181106134b1576134b1614f0f565b60200260200101519050806001600160a01b0316631a808b3c87876040518363ffffffff1660e01b81526004016134e99291906153dc565b600060405180830381600087803b15801561350357600080fd5b505af1158015613517573d6000803e3d6000fd5b5050505050808061352790614fd8565b915050613494565b50600061353c85856121af565b905061359681600061354e8660f01c90565b67ffffffffffffffff8111156135665761356661490e565b6040519080825280601f01601f191660200182016040528015613590576020820181803683370190505b50612484565b61359f83611edc565b60ff166000036135b0575050505050565b60006135bc8686612b9f565b6000815590506108eb565b606060006135d58360f01c90565b9050806000806135e486611edc565b60ff169050801561362f576135f98888613cf7565b915060006136078360e01c90565b111561362f576136178260e01c90565b613622906020614fc0565b61362c9084614fc0565b92505b60008367ffffffffffffffff81111561364a5761364a61490e565b6040519080825280601f01601f191660200182016040528015613674576020820181803683370190505b509050602081016136878a8a8884614246565b6136918460e01c90565b6000036136a5575094506113bb9350505050565b6136af8682614fc0565b84815290506136bf602082614fc0565b905060005b838160ff16101561371d5760006136dc8c8c84612bd6565b905060006136ed8760ff8516612c2f565b90506136fc8282600087613d04565b6137068185614fc0565b935050508080613715906150a7565b9150506136c4565b50909998505050505050505050565b6040805160028082526060820183526000926020830190803683370190505090508260001b8160008151811061376457613764614f0f565b6020026020010181815250508160601b6bffffffffffffffffffffffff19168160018151811061379657613796614f0f565b60209081029190910101526101fc7fb07871d3346b8174fd8c44ae24608a1fbb23c09a1331e6124a566242df16e03382614267565b606060006137d884612eea565b90506105968484836135c7565b60006105a97fbf3b70b2ef556654851b65c7b706572cfa3260c0098f34675bc498d7fca6c738836142bc565b6040805160028082526060820183526000928392919060208301908036833701905050905060618160008151811061384b5761384b614f0f565b602002602001019060c581111561386457613864614f25565b908160c581111561387757613877614f25565b8152505060608160018151811061389057613890614f0f565b602002602001019060c58111156138a9576138a9614f25565b908160c58111156138bc576138bc614f25565b9052506138c8816119e1565b91505090565b6040805160018082528183019092526000918291906020808301908036833701905050905060608160008151811061389057613890614f0f565b6040805160018082528183019092526000918291906020808301908036833701905050905060c38160008151811061389057613890614f0f565b6040805160028082526060820183526000928392919060208301908036833701905050905060c58160008151811061397c5761397c614f0f565b602002602001019060c581111561399557613995614f25565b908160c58111156139a8576139a8614f25565b8152505060c48160018151811061389057613890614f0f565b6040805160018082528183019092526060918291600091816020015b60608152602001906001900390816139dd5790505090506040518060400160405280600581526020017f76616c756500000000000000000000000000000000000000000000000000000081525081600081518110613a3d57613a3d614f0f565b6020026020010181905250806040518060400160405280600581526020017f486f6f6b730000000000000000000000000000000000000000000000000000008152509092509250509091565b60408051600280825260608281019093528291600091816020015b6060815260200190600190039081613aa45790505090506040518060400160405280600981526020017f7461626c654e616d65000000000000000000000000000000000000000000000081525081600081518110613b0457613b04614f0f565b60200260200101819052506040518060400160405280601481526020017f616269456e636f6465644669656c644e616d657300000000000000000000000081525081600181518110613b5857613b58614f0f565b6020026020010181905250806040518060400160405280600d81526020017f53746f72654d65746164617461000000000000000000000000000000000000008152509092509250509091565b6000303b808203613bb757600191505090565b306001600160a01b031663a5c2f0076040518163ffffffff1660e01b815260040160006040518083038186803b158015613bf057600080fd5b505afa925050508015613c01575060015b613c0d57600091505090565b600191505090565b6000613c2160c561134a565b905090565b6000613c21601f61134a565b6000613c21606161134a565b6000613c4c611ed883611f25565b1592915050565b600080805b8360ff16811015612d6657613c7061175f8683611ef9565b613c7a9083614fc0565b915080613c8681614fd8565b915050613c58565b6000613c9a8585612b9f565b90506000613ca6825490565b9050613cb68160ff861685612738565b80835590506108eb565b6060613ccb82611eed565b60ff168360ff161015613ceb57613ce485858585612c61565b9050610596565b613ce485858585612cc1565b600080611f988484612b9f565b602082048401935060208281613d1c57613d1c6152b7565b0691508115613d6d5760208290036000600019600883021c1990508554600885021b811984511682821617845250818511613d58575050610e24565b613d63600187614fc0565b9550509283900392015b60208310613d955783548152613d84600185614fc0565b9350601f1990920191602001613d6d565b8215610e24576000600019600885021c198251865482169119161782525050505050565b604080516001808252818301909252600091829190602080830190803683370190505090508260601b6bffffffffffffffffffffffff191681600081518110613e0457613e04614f0f565b602002602001018181525050613e1a848261431c565b613e23906153f5565b1515949350505050565b604080516001808252818301909252600091829190602080830190803683370190505090508260001b81600081518110613e6957613e69614f0f565b6020026020010181815250506000613e81858361431c565b9050613e8c8161541c565b60601c95945050505050565b604080516001808252818301909252600091602080830190803683370190505090508260601b6bffffffffffffffffffffffff191681600081518110613ee057613ee0614f0f565b602002602001018181525050610e24848260008560405160200161133691815260200190565b60408051600180825281830190925260609160009190602080830190803683370190505090508260001b81600081518110613f4357613f43614f0f565b6020026020010181815250506000613f5b858361431c565b90506105c9613f6b8260206143bf565b6143cd565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110613fa657613fa6614f0f565b60209081029190910101526000613fde7f10cff6e9a45d56553c0d6a15090a896923104ebcf7e6f897a55ce1a251179890838361233d565b60408051606086901b6bffffffffffffffffffffffff191660208201528151601481830301815260348201909252919250600091614020918491605401615374565b60408051601f19818403018152919052905061056e7f10cff6e9a45d56553c0d6a15090a896923104ebcf7e6f897a55ce1a25117989084600084611603565b600061406a84611eed565b61407490846150ec565b905060006140828787612b9f565b9050600061408e825490565b9050600061409f8260ff8616612c2f565b90506140bd8460ff168651836140b59190614fc0565b849190612738565b808455915060006140cf8a8a87612bd6565b90506140dc602083615455565b6140e69082614fc0565b905060006140f56020846152cd565b9050614102828289612484565b5050505050505050505050565b6060614119613ba4565b15614129576123578484846135c7565b6040517fa2d3d4fb000000000000000000000000000000000000000000000000000000008152339063a2d3d4fb9061239e90879087908790600401615469565b6020810151603482015160609190911c90600090614188905b60f81c90565b9050915091565b604080516002808252606082018352600092839291906020830190803683370190505090508360001b816000815181106141cb576141cb614f0f565b6020026020010181815250508260601b6bffffffffffffffffffffffff1916816001815181106141fd576141fd614f0f565b602090810291909101015260006142357fb07871d3346b8174fd8c44ae24608a1fbb23c09a1331e6124a566242df16e033838361233d565b60208101519091506105c990614182565b8115610e2457600061425885856121af565b905061056e8184600085613d04565b61426f613ba4565b1561427e576104fd828261343e565b6040517f971eb6cb000000000000000000000000000000000000000000000000000000008152339063971eb6cb906114e790859085906004016153dc565b604080516001808252818301909252600091829190602080830190803683370190505090508260001b816000815181106142f8576142f8614f0f565b6020026020010181815250506000614310858361431c565b51151595945050505050565b6060614326613ba4565b1561433c5761433583836137cb565b90506105a9565b6040517fd99ddc07000000000000000000000000000000000000000000000000000000008152339063d99ddc079061437a90869086906004016153dc565b600060405180830381865afa158015614397573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261433591908101906151e6565b60006113bb838385516123e3565b606060006143db8360801c90565b90506fffffffffffffffffffffffffffffffff83168067ffffffffffffffff8111156144095761440961490e565b6040519080825280601f01601f191660200182016040528015614433576020820181803683370190505b5092506020830161444583828461444d565b505050919050565b6020811115614464578082828560045afa50505050565b6000600019600883021c1983518551821691191617835250505050565b60008083601f84011261449357600080fd5b50813567ffffffffffffffff8111156144ab57600080fd5b6020830191508360208285010111156144c357600080fd5b9250929050565b6001600160a01b038116811461152157600080fd5b600080600080600080608087890312156144f857600080fd5b863567ffffffffffffffff8082111561451057600080fd5b61451c8a838b01614481565b9098509650602089013591508082111561453557600080fd5b5061454289828a01614481565b9095509350506040870135614556816144ca565b91506060870135801515811461456b57600080fd5b809150509295509295509295565b6000806040838503121561458c57600080fd5b82359150602083013561459e816144ca565b809150509250929050565b6000806000604084860312156145be57600080fd5b833567ffffffffffffffff8111156145d557600080fd5b6145e186828701614481565b90945092505060208401356145f5816144ca565b809150509250925092565b60008083601f84011261461257600080fd5b50813567ffffffffffffffff81111561462a57600080fd5b6020830191508360208260051b85010111156144c357600080fd5b60008060008060006060868803121561465d57600080fd5b85359450602086013567ffffffffffffffff8082111561467c57600080fd5b61468889838a01614481565b909650945060408801359150808211156146a157600080fd5b506146ae88828901614600565b969995985093965092949392505050565b600080600080604085870312156146d557600080fd5b843567ffffffffffffffff808211156146ed57600080fd5b6146f988838901614481565b9096509450602087013591508082111561471257600080fd5b5061471f87828801614481565b95989497509550505050565b60005b8381101561474657818101518382015260200161472e565b83811115610e245750506000910152565b6000815180845261476f81602086016020860161472b565b601f01601f19169290920160200192915050565b6020815260006113bb6020830184614757565b6000602082840312156147a857600080fd5b5035919050565b6000806000806000606086880312156147c757600080fd5b853567ffffffffffffffff808211156147df57600080fd5b6147eb89838a01614481565b9097509550602088013591508082111561480457600080fd5b5061481188828901614481565b96999598509660400135949350505050565b803560ff81168114612f3157600080fd5b600080600080600080600080600060a08a8c03121561485257600080fd5b893567ffffffffffffffff8082111561486a57600080fd5b6148768d838e01614481565b909b50995060208c013591508082111561488f57600080fd5b61489b8d838e01614481565b909950975060408c01359150808211156148b457600080fd5b6148c08d838e01614600565b90975095508591506148d460608d01614823565b945060808c01359150808211156148ea57600080fd5b506148f78c828d01614481565b915080935050809150509295985092959850929598565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561494d5761494d61490e565b604052919050565b600067ffffffffffffffff82111561496f5761496f61490e565b50601f01601f191660200190565b600082601f83011261498e57600080fd5b81356149a161499c82614955565b614924565b8181528460208386010111156149b657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806000606086880312156149eb57600080fd5b853567ffffffffffffffff80821115614a0357600080fd5b614a0f89838a01614481565b90975095506020880135915080821115614a2857600080fd5b614a3489838a0161497d565b94506040880135915080821115614a4a57600080fd5b506146ae88828901614481565b60008060008060008060808789031215614a7057600080fd5b86359550602087013567ffffffffffffffff80821115614a8f57600080fd5b614a9b8a838b01614600565b9097509550859150614aaf60408a01614823565b94506060890135915080821115614ac557600080fd5b50614ad289828a01614481565b979a9699509497509295939492505050565b60008060008060008060608789031215614afd57600080fd5b863567ffffffffffffffff80821115614b1557600080fd5b614b218a838b01614481565b90985096506020890135915080821115614b3a57600080fd5b614b468a838b01614481565b90965094506040890135915080821115614b5f57600080fd5b50614ad289828a01614600565b600080600080600060608688031215614b8457600080fd5b85359450602086013567ffffffffffffffff80821115614ba357600080fd5b614baf89838a01614600565b90965094506040880135915080821115614a4a57600080fd5b60008060408385031215614bdb57600080fd5b50508035926020909101359150565b600080600060408486031215614bff57600080fd5b83359250602084013567ffffffffffffffff811115614c1d57600080fd5b614c2986828701614600565b9497909650939450505050565b60008060008060608587031215614c4c57600080fd5b84359350602085013567ffffffffffffffff811115614c6a57600080fd5b614c7687828801614600565b9598909750949560400135949350505050565b6000806000806000806000806080898b031215614ca557600080fd5b883567ffffffffffffffff80821115614cbd57600080fd5b614cc98c838d01614481565b909a50985060208b0135915080821115614ce257600080fd5b614cee8c838d01614481565b909850965060408b0135915080821115614d0757600080fd5b614d138c838d01614600565b909650945060608b0135915080821115614d2c57600080fd5b50614d398b828c01614481565b999c989b5096995094979396929594505050565b60008060008060608587031215614d6357600080fd5b84359350602085013567ffffffffffffffff811115614d8157600080fd5b614d8d87828801614600565b9094509250614da0905060408601614823565b905092959194509250565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b604081526000614dea604083018587614dab565b90506001600160a01b0383166020830152949350505050565b604081526000614e166040830185614757565b90506001600160a01b03831660208301529392505050565b600067ffffffffffffffff80841115614e4957614e4961490e565b8360051b6020614e5a818301614924565b868152918501918181019036841115614e7257600080fd5b865b84811015614ea657803586811115614e8c5760008081fd5b614e9836828b0161497d565b845250918301918301614e74565b50979650505050505050565b828482376000838201600081528351614ecf81836020880161472b565b0195945050505050565b602081526000610596602083018486614dab565b8385823760008482016000815283858237600093019283525090949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b600081518084526020808501945080840160005b83811015614f6b57815187529582019590820190600101614f4f565b509495945050505050565b848152608060208201526000614f8f6080830186614f3b565b60ff851660408401528281036060840152611c2b8185614757565b634e487b7160e01b600052601160045260246000fd5b60008219821115614fd357614fd3614faa565b500190565b60006000198203614feb57614feb614faa565b5060010190565b83815260606020820152600061500b6060830185614f3b565b828103604084015261501d8185614757565b9695505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561506f57828403895261505d848351614757565b98850198935090840190600101615045565b5091979650505050505050565b8381526060602082015260006150956060830185614757565b828103604084015261501d8185615027565b600060ff821660ff81036150bd576150bd614faa565b60010192915050565b600061ffff8083168185168083038211156150e3576150e3614faa565b01949350505050565b600060ff821660ff84168082101561510657615106614faa565b90039392505050565b60008282101561512157615121614faa565b500390565b6020815260006113bb6020830184615027565b8381528260208201526060604082015260006105936060830184614f3b565b600060ff821660ff84168060ff0382111561517557615175614faa565b019392505050565b8381526000835161519581602085016020880161472b565b808301905083516151ad81602084016020880161472b565b0160200195945050505050565b8381526060602082015260006151d36060830185614f3b565b905060ff83166040830152949350505050565b6000602082840312156151f857600080fd5b815167ffffffffffffffff81111561520f57600080fd5b8201601f8101841361522057600080fd5b805161522e61499c82614955565b81815285602083850101111561524357600080fd5b6105c982602083016020860161472b565b6060815260006152676060830186614757565b60208301949094525060400152919050565b600081600019048311821515161561529357615293614faa565b500290565b600063ffffffff8083168185168083038211156150e3576150e3614faa565b634e487b7160e01b600052601260045260246000fd5b6000826152dc576152dc6152b7565b500690565b8381528260208201526080604082015260006153006080830184614f3b565b8281036060840152600681527f6c656e6774680000000000000000000000000000000000000000000000000000602082015260408101915050949350505050565b8481528360208201526080604082015260006153606080830185614f3b565b905060ff8316606083015295945050505050565b6000835161538681846020880161472b565b8351908301906150e381836020880161472b565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516153d281846020870161472b565b9190910192915050565b8281526040602082015260006105966040830184614f3b565b80516020808301519190811015615416576000198160200360031b1b821691505b50919050565b6000815160208301516bffffffffffffffffffffffff19808216935060148310156144455760149290920360031b82901b161692915050565b600082615464576154646152b7565b500490565b8381526060602082015260006154826060830185614f3b565b905082604083015294935050505056fea2646970667358221220a2cdf6e0e0864e934405f701ac394b78ba7a5156515e8c57456bfa5a32a79fd764736f6c634300080d0033b07871d3346b8174fd8c44ae24608a1fbb23c09a1331e6124a566242df16e033c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470c3b575e3277c8e0d6f7776cc6e1bb3aeeadf47feb68a2aa8a9bf38d7a278286586425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9466b87090ce2bc34362737dab7b900dfc94a202aee6a6323f6813f7ce59d975ebf3b70b2ef556654851b65c7b706572cfa3260c0098f34675bc498d7fca6c73889c69f1332d0769f7fc2e4abeff42a2e0fcbfe7116617ad379b620bf0e08879f7cf2f10cacf485bbd2f754f8ea5bb61bc02278cb975662e05b61c8020e2db13210cff6e9a45d56553c0d6a15090a896923104ebcf7e6f897a55ce1a251179890",
|
|
898
|
+
sourceMap: "788:16029:65:-:0;;;983:532;;;;;;;;;;252:22:8;:20;;;;;:22;;:::i;:::-;1003:28:65;:26;;;;;:28;;:::i;:::-;1037:27;:25;;;;;:27;;:::i;:::-;1070:28;:26;;;;;:28;;:::i;:::-;1104:33;:31;;;;;:33;;:::i;:::-;1143:32;:30;;;;;:32;;:::i;:::-;737:9;;;;;;;;;-1:-1:-1;737:9:65;;;;1242:53;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;727:20:65;1242:14;;;;;:53;;:::i;:::-;737:9;;;;;;;;;;-1:-1:-1;737:9:65;;1362:66;;-1:-1:-1;;;;;;;;;;;727:20:65;1415:10;;1362:19;;;;;:66;;:::i;:::-;737:9;;;;;;;;;;-1:-1:-1;737:9:65;;1434:76;;-1:-1:-1;;;;;;;;;;;727:20:65;1484:10;;1503:4;;1434:15;;;;;:76;;:::i;:::-;788:16029;;1574:599:9;1649:84;-1:-1:-1;;;;;;;;;;;13600:44:9;;1696:36;1713:18;1696:16;;;;;:36;;:::i;:::-;1649:14;:84::i;:::-;2052:22;:20;;;;;:22;;:::i;:::-;2080:30;:28;;;;;:30;;:::i;:::-;2116:19;:17;;;;;:19;;:::i;:::-;2141:27;:25;;;;;:27;;:::i;:::-;1574:599::o;1503:95:75:-;1544:49;826:25;1581:11;:9;:11::i;:::-;1544:26;;;;;:49;;:::i;651:79:73:-;692:33;-1:-1:-1;;;;;;;;;;;450:43:73;;692:24;;;;;:33;;:::i;1428:95:71:-;1469:49;-1:-1:-1;;;;;;;;;;;1506:11:71;:9;:11::i;675:79:74:-;716:33;470:40;462:49;;716:24;;;;;:33;;:::i;671:79:72:-;712:33;-1:-1:-1;;;;;;;;;;;460:48:72;;712:24;;;;;:33;;:::i;866:109:73:-;932:38;-1:-1:-1;;;;;;;;;;;450:43:73;;955:7;964:5;932:13;;;;;:38;;:::i;:::-;866:109;;:::o;886:103:72:-;946:38;-1:-1:-1;;;;;;;;;;;460:48:72;;969:7;978:5;946:13;;;;;:38;;:::i;2997:308:71:-;3102:16;;;3116:1;3102:16;;;;;;;;3070:29;;3102:16;;;;;;;;;;-1:-1:-1;3102:16:71;3070:48;;3159:7;3142:27;;3124:12;3137:1;3124:15;;;;;;;;:::i;:::-;;;;;;:45;;;;;3210:6;3201:17;;-1:-1:-1;;;;;3193:26:71;;3175:12;3188:1;3175:15;;;;;;;;:::i;:::-;;;;;;:44;;;;;3226:74;-1:-1:-1;;;;;;;;;;;818:34:71;;3257:12;3271:1;3292:5;3274:25;;;;;;429:14:78;422:22;417:3;413:32;401:45;;471:1;462:11;;278:201;3274:25:71;;;;;;;;;;;;;3226:20;;;;;:74;;:::i;:::-;3064:241;2997:308;;;:::o;2473:166:5:-;2569:19;;;2586:1;2569:19;;;;;;;;;2526:6;;;;2569:19;;;;;;;;;;;;-1:-1:-1;2569:19:5;2540:48;;2606:1;2594:6;2601:1;2594:9;;;;;;;;:::i;:::-;;;;;;:13;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2620:14:5;2627:6;2620;:14::i;:::-;2613:21;2473:166;-1:-1:-1;;;2473:166:5:o;2842:343:9:-;2945:17;:6;:15;;;;;:17;;:::i;:::-;3016:15;3025:5;3016:8;:15::i;:::-;3012:78;;;3048:35;;-1:-1:-1;;;3048:35:9;;;;;762:25:78;;;735:18;;3048:35:9;;;;;;;;3012:78;3123:57;3166:5;3173:6;3123:42;;;;;:57;;:::i;1261:95:12:-;1302:49;-1:-1:-1;;;;;;;;;;;1339:11:12;:9;:11::i;1450:95:13:-;1491:49;-1:-1:-1;;;;;;;;;;;1528:11:13;:9;:11::i;1394:178:12:-;1433:24;;1490:13;:11;:13::i;:::-;1432:71;;;;1509:58;-1:-1:-1;;;;;;;;;;;666:28:12;;1543:10;1555:11;1509:23;;;;;:58;;:::i;1583:178:13:-;1622:24;;1679:13;:11;:13::i;:::-;1621:71;;;;1698:58;-1:-1:-1;;;;;;;;;;;666:36:13;;1732:10;1744:11;1698:23;;;;;:58;;:::i;959:222:75:-;1047:19;;;1064:1;1047:19;;;;;;;;1003:6;;;;1047:19;1064:1;1047:19;;;;;;;;;;-1:-1:-1;1047:19:75;1017:49;;1085:18;1072:7;1080:1;1072:10;;;;;;;;:::i;:::-;;;;;;:31;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;1122:15;1109:7;1117:1;1109:10;;;;;;;;:::i;:::-;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;1151:25;1168:7;1151:16;;;;;:25;;:::i;:::-;1144:32;;;959:222;:::o;1153:218:10:-;1226:16;:14;:16::i;:::-;1222:145;;;1252:39;1277:5;1284:6;1252:24;;;;;:39;;:::i;1222:145::-;1312:48;;-1:-1:-1;;;1312:48:10;;;;;999:25:78;;;1040:18;;;1033:34;;;1319:10:10;;1312:33;;972:18:78;;1312:48:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1153:218;;:::o;1051:109:69:-;1107:48;1134:7;1143:11;:9;:11::i;1107:48::-;1051:109;:::o;959:185:71:-;1047:19;;;1064:1;1047:19;;;;;;;;;1003:6;;;;1047:19;;;;;;;;;;;;-1:-1:-1;1047:19:71;1017:49;;1085:15;1072:7;1080:1;1072:10;;;;;;;;:::i;1005:109:70:-;1061:48;1088:7;1097:11;:9;:11::i;1002:109:68:-;1058:48;1085:7;1094:11;:9;:11::i;1315:246:69:-;1442:16;;;1456:1;1442:16;;;;;;;;;1414:25;;1442:16;;;;;;;;;;;-1:-1:-1;1442:16:69;1414:44;;1486:7;1478:16;;1464:8;1473:1;1464:11;;;;;;;;:::i;:::-;;;;;;:30;;;;;1500:56;1521:7;1530:8;1540:1;1549:5;1500:20;;;;;:56;;:::i;1266:249:68:-;1386:16;;;1400:1;1386:16;;;;;;;;;1358:25;;1386:16;;;;;;;;;;;-1:-1:-1;1386:16:68;1358:44;;1430:7;1422:16;;1408:8;1417:1;1408:11;;;;;;;;:::i;:::-;;;;;;:30;;;;;1444:66;1465:7;1474:8;1484:1;1504:4;1487:22;;;;;;;1252:2:78;1223:15;;;;-1:-1:-1;;;;;;1219:45:78;1207:58;;1290:2;1281:12;;1078:221;2118:274:10;2229:16;:14;:16::i;:::-;2225:163;;;2255:48;2274:5;2281:3;2286:10;2298:4;2255:18;;;;;:48;;:::i;:::-;2225:163;;;2324:57;;-1:-1:-1;;;2324:57:10;;2331:10;;2324:27;;:57;;2352:5;;2359:3;;2364:10;;2376:4;;2324:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2118:274;;;;:::o;842:1591:5:-;910:6;945:2;928:7;:14;:19;924:71;;;980:7;:14;956:39;;-1:-1:-1;;;956:39:5;;;;;;762:25:78;;750:2;735:18;;616:177;924:71:5;1001:14;1021:13;1040:18;1193:21;1225:9;1220:665;1244:7;:14;1240:1;:18;1220:665;;;1270:23;1303:32;:7;1311:1;1303:10;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;:::i;:::-;;;;;;:32;;:::i;:::-;1270:66;-1:-1:-1;1413:20:5;;;;1409:322;;1537:16;1533:67;;;1562:38;;-1:-1:-1;;;1562:38:5;;;;;;;;;;;1533:67;1610:14;;;;:::i;:::-;;;;1409:322;;;1718:4;1699:23;;1409:322;1739:26;1749:16;1739:26;;:::i;:::-;;-1:-1:-1;1782:57:5;1798:6;1806:5;:1;1810;1806:5;:::i;:::-;1826:7;1834:1;1826:10;;;;;;;;:::i;:::-;;;;;;;1820:17;;;;;;;;:::i;:::-;1813:25;;1782:15;;;;;:57;;:::i;:::-;1773:66;-1:-1:-1;;1867:3:5;;1220:665;;;;1928:19;1974:12;1956:7;:14;1950:36;;;;:::i;:::-;1928:58;;2012:2;1996:13;:18;;;1992:69;;;2023:38;;-1:-1:-1;;;2023:38:5;;3894:4:78;3882:17;;2023:38:5;;;3864:36:78;3837:18;;2023:38:5;3720:186:78;1992:69:5;2151:44;2167:6;2175:1;2186:6;2179:14;;2151:15;;;;;:44;;:::i;:::-;2142:53;;2228:48;2244:6;2252:1;2262:12;2255:20;;2228:15;;;;;:48;;:::i;:::-;2219:57;;2318:49;2334:6;2342:1;2352:13;2345:21;;2318:15;;;;;:49;;:::i;:::-;2309:58;842:1591;-1:-1:-1;;;;;;;842:1591:5:o;5530:1474::-;5619:16;:6;:14;;;;;:16;;:::i;:::-;5615:55;;;5644:26;;-1:-1:-1;;;5644:26:5;;5668:1;5644:26;;;762:25:78;735:18;;5644:26:5;616:177:78;5615:55:5;5732:25;5760;:6;:23;;;;;:25;;:::i;:::-;5732:53;;;;5815:2;5795:17;:22;5791:77;;;5826:42;;-1:-1:-1;;;5826:42:5;;;;;762:25:78;;;735:18;;5826:42:5;616:177:78;5791:77:5;5875:24;5902;:6;:22;;;;;:24;;:::i;:::-;5875:51;;;-1:-1:-1;6032:2:5;5993:36;6012:17;5875:51;5993:36;:::i;:::-;:41;5989:115;;;6067:36;6086:17;6067:16;:36;:::i;:::-;6043:61;;-1:-1:-1;;;6043:61:5;;;;;;762:25:78;;750:2;735:18;;616:177;5989:115:5;6163:25;6194:26;6231:9;6226:488;6246:36;6265:17;6246:16;:36;:::i;:::-;6242:1;:40;6226:488;;;6340:1;6298:39;:17;6313:1;6298:6;:14;;;;;;:17;;;;:::i;:::-;:37;;;;;;;;:::i;:39::-;:43;6294:375;;;6402:16;6397:1;:21;6393:72;;6427:38;;-1:-1:-1;;;6427:38:5;;;;;;;;;;;6393:72;6475:19;;;;:::i;:::-;;;;6294:375;;;6567:16;6563:1;:20;6559:71;;;6592:38;;-1:-1:-1;;;6592:38:5;;;;;;;;;;;6559:71;6640:20;;;;:::i;:::-;;;;6294:375;6696:3;;6226:488;;;;6787:16;6766:17;:37;6762:92;;6812:42;;-1:-1:-1;;;6812:42:5;;;;;762:25:78;;;735:18;;6812:42:5;616:177:78;6762:92:5;6930:17;6908:18;:39;6904:95;;6956:43;;-1:-1:-1;;;6956:43:5;;;;;762:25:78;;;735:18;;6956:43:5;616:177:78;6904:95:5;5577:1427;;;;5530:1474;:::o;2667:126:9:-;2723:4;2743:45;:35;2772:5;2743:28;;;;;:35;;:::i;:::-;:43;;;;;:45;;:::i;:::-;2742:46;;2667:126;-1:-1:-1;;2667:126:9:o;14198:420::-;14300:16;;;14314:1;14300:16;;;;;;;;;14277:20;;14300:16;;;;;;;;;;;-1:-1:-1;14300:16:9;14277:39;;14339:5;14331:14;;14322:3;14326:1;14322:6;;;;;;;;:::i;:::-;;;;;;;;;;:23;14351:16;14370:41;-1:-1:-1;;;;;;;;;;;14407:3:9;14370:22;:41::i;:::-;14351:60;;14417:66;14449:8;14465:15;:6;:13;;;;;:15;;:::i;:::-;14417:13;;;;;:66;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;13600:44:9;;14574:3;14596:15;:6;:13;;;;;:15;;:::i;:::-;14579:33;;;;;;4370:19:78;;4414:2;4405:12;;4241:182;14579:33:9;;;;-1:-1:-1;;14579:33:9;;;;;;;;;;14535:78;;;;;:::i;:::-;;;;;;;;14271:347;;14198:420;;:::o;789:194:12:-;877:19;;;894:1;877:19;;;;;;;;;833:6;;;;877:19;;;;;;;;;;;;-1:-1:-1;877:19:12;847:49;;915:24;902:7;910:1;902:10;;;;;;;;:::i;893:222:13:-;981:19;;;998:1;981:19;;;;;;;;937:6;;;;981:19;998:1;981:19;;;;;;;;;;-1:-1:-1;981:19:13;951:49;;1019:17;1006:7;1014:1;1006:10;;;;;;;;:::i;:::-;;;;;;:30;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;1055:16;1042:7;1050:1;1042:10;;;;;;;;:::i;1021:199:12:-;1135:15;;;1148:1;1135:15;;;;;;;;;1067:13;;;;1105:27;;1135:15;;;;;;;;;;;;;;;;;;;;1105:45;;1156:24;;;;;;;;;;;;;-1:-1:-1;;;1156:24:12;;;:11;1168:1;1156:14;;;;;;;;:::i;:::-;;;;;;:24;;;;1203:11;1186:29;;;;;;;;;;;;;-1:-1:-1;;;1186:29:12;;;;;;;;;1021:199;;:::o;1598:277:10:-;1706:16;:14;:16::i;:::-;1702:169;;;1732:51;1754:5;1761:9;1772:10;1732:21;;;;;:51;;:::i;:::-;1598:277;;;:::o;1702:169::-;1804:60;;-1:-1:-1;;;1804:60:10;;1811:10;;1804:30;;:60;;1835:5;;1842:9;;1853:10;;1804:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1598:277;;;:::o;1153:256:13:-;1267:15;;;1280:1;1267:15;;;1199:13;1267:15;;;;;;1199:13;;1237:27;;1267:15;;;;;;;;;;;;;;;;;;;;1237:45;;1288:28;;;;;;;;;;;;;-1:-1:-1;;;1288:28:13;;;:11;1300:1;1288:14;;;;;;;;:::i;:::-;;;;;;:28;;;;1322:39;;;;;;;;;;;;;;;;;:11;1334:1;1322:14;;;;;;;;:::i;:::-;;;;;;:39;;;;1392:11;1367:37;;;;;;;;;;;;;-1:-1:-1;;;1367:37:13;;;;;;;;;1153:256;;:::o;612:537:10:-;661:12;830:9;818:22;943:13;;;939:30;;965:4;958:11;;;612:537;:::o;939:30::-;1062:4;-1:-1:-1;;;;;1047:29:10;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1043:102;;1133:5;1123:15;;675:474;612:537;:::o;1043:102::-;1097:4;1087:14;;675:474;612:537;:::o;896:114:69:-;940:13;970:35;987:17;970:16;;;;;:35;;:::i;:::-;961:44;;896:114;:::o;849:115:70:-;893:13;923:36;940:18;923:16;;;;;:36;;:::i;846:115:68:-;890:13;920:36;937:18;920:16;;;;;:36;;:::i;7196:806:9:-;7304:13;7320:16;7330:5;7320:9;:16::i;:::-;7304:32;;7385:44;7399:5;7406:3;7411:11;7424:4;7385:44;;;;;;;;;:::i;:::-;;;;;;;;7561:22;7586:25;7604:5;7596:14;;7586:9;;;;;:25;;:::i;:::-;7561:50;;7622:9;7617:150;7641:5;:12;7637:1;:16;7617:150;;;7668:15;7697:5;7703:1;7697:8;;;;;;;;:::i;:::-;;;;;;;7668:38;;7714:4;-1:-1:-1;;;;;7714:15:9;;7730:5;7737:3;7742:11;7755:4;7714:46;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7660:107;7655:3;;;;;:::i;:::-;;;;7617:150;;;;7791:24;:6;:22;;;;;:24;;:::i;:::-;7777:38;;:11;:38;;;7773:225;;;7825:72;7859:5;7866:3;7871:6;7879:11;7892:4;7825:33;;;;;:72;;:::i;:::-;7773:225;;;7918:73;7953:5;7960:3;7965:6;7973:11;7986:4;7918:34;;;;;:73;;:::i;3194:543:0:-;3260:7;3273:13;3295:10;3289:17;;;;;;;;:::i;:::-;3273:33;;;;3323:2;3315:5;:10;3311:229;;;3357:9;:5;3365:1;3357:9;:::i;3311:229::-;3389:2;3381:5;:10;3377:163;;;3448:2;3436:9;:5;3444:1;3436:9;:::i;:::-;:14;;;;:::i;3377:163::-;3473:2;3465:5;:10;3461:79;;;3533:2;3521:9;:5;3529:1;3521:9;:::i;3461:79::-;3586:15;3572:10;:29;;;;;;;;:::i;:::-;;3568:118;;-1:-1:-1;3616:1:0;;3194:543;-1:-1:-1;;3194:543:0:o;3568:118::-;3646:18;3632:10;:32;;;;;;;;:::i;:::-;;3628:58;;-1:-1:-1;3679:2:0;;3194:543;-1:-1:-1;;3194:543:0:o;3628:58::-;-1:-1:-1;3733:1:0;;3194:543;-1:-1:-1;;3194:543:0:o;1323:436:1:-;1508:1;1504:13;;1675:29;;;1451:18;1500:24;;;1607:9;1596:21;;1664:41;1323:436;;;;;:::o;1847:440::-;2034:1;2030:13;;2203:29;;;-1:-1:-1;;;;;;2026:24:1;;;2135:9;2124:21;;2192:41;1847:440;;;;;:::o;5412:114:5:-;5486:35;;5412:114::o;4809:134::-;4873:5;4899:38;4926:6;4935:1;4899:12;;;;;:38;;:::i;:::-;4893:45;;;4809:134;-1:-1:-1;;4809:134:5:o;5018:133::-;5081:5;5107:38;5134:6;5143:1;5107:12;;;;;:38;;:::i;4562:165::-;4632:10;4674:46;4701:6;4710:9;:5;4718:1;4710:9;:::i;:::-;4674:12;;;;;:46;;:::i;:::-;4668:53;;4657:65;;;;;;;;:::i;13828:297:9:-;13923:16;;;13937:1;13923:16;;;;;;;;;13886:6;;;;13923:16;;;;;;;;;;;;-1:-1:-1;13923:16:9;13900:39;;13962:5;13954:14;;13945:3;13949:1;13945:6;;;;;;;;:::i;:::-;;;;;;:23;;;;;13974:16;13993:59;-1:-1:-1;;;;;;;;;;;13600:44:9;;14048:3;13993:40;;;;;:59;;:::i;:::-;13974:78;;14077:42;14108:8;14077:12;;;;;:42;;:::i;:::-;14058:62;13828:297;-1:-1:-1;;;;13828:297:9:o;20077:167::-;20169:7;-1:-1:-1;;;;;;;;;;;20226:5:9;20233:3;20209:28;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20209:28:9;;;;;;;;;20199:39;;20209:28;20199:39;;;;;20077:167;-1:-1:-1;;;20077:167:9:o;7043:102:5:-;7133:6;7043:102::o;376:123:7:-;461:28;;376:123::o;3237:474:9:-;3341:13;3357:16;3367:5;3357:9;:16::i;:::-;3341:32;;3459:10;:17;3480:1;3459:22;:65;;;;3506:18;:6;:16;;;;;:18;;:::i;:::-;3485:39;;:10;:17;:39;3459:65;3453:168;;3576:18;:6;:16;;;;;:18;;:::i;:::-;3596:17;;3542:72;;-1:-1:-1;;;3542:72:9;;6803:4:78;6791:17;;;3542:72:9;;;6773:36:78;6825:18;;;6818:34;6746:18;;3542:72:9;6601:257:78;3453:168:9;3647:59;3665:5;3672:9;3694:10;3683:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;3647:17;;;;;:59;;:::i;2408:206::-;2465:13;2495:35;2524:5;2495:28;;;;;:35;;:::i;:::-;2486:44;;2540:16;:6;:14;;;;;:16;;:::i;:::-;2536:74;;;2573:30;;-1:-1:-1;;;2573:30:9;;;;;762:25:78;;;735:18;;2573:30:9;616:177:78;2536:74:9;2408:206;;;:::o;1595:326:12:-;1706:16;;;1720:1;1706:16;;;;;;;;;1644:22;;1674:29;;1706:16;;;;;;;;;;;;-1:-1:-1;1706:16:12;1674:48;;1755:3;1728:12;1741:1;1728:15;;;;;;;;:::i;:::-;;;;;;:32;;;;;1767:18;1788:47;-1:-1:-1;;;;;;;;;;;666:28:12;;1819:12;1833:1;1788:20;;;;;:47;;:::i;:::-;1767:68;;1849:66;:44;1870:5;1877:1;1880:5;:12;1849:20;;;;;:44;;:::i;:::-;:64;;;;;:66;;:::i;14803:679:9:-;15018:21;15042:27;15057:11;15042:27;;:6;:14;;;;;;:27;;;;:::i;:::-;15018:51;;15115:4;:11;15079:32;:10;:30;;;;;;;;:::i;:32::-;:47;15075:159;;15181:32;:10;:30;;;;;;;;:::i;:32::-;15215:11;;15143:84;;-1:-1:-1;;;15143:84:9;;;;;999:25:78;;;;1040:18;;;1033:34;972:18;;15143:84:9;798:275:78;15075:159:9;15283:16;15302:34;15325:5;15332:3;15302:22;:34::i;:::-;15283:53;-1:-1:-1;15342:14:9;15359:41;15380:6;15388:11;15359:20;:41::i;:::-;15342:58;;15406:71;15438:8;15456:6;15470:4;15406:13;;;;;:71;;:::i;15486:550::-;15641:24;15682;:6;:22;;;;;:24;;:::i;:::-;15668:38;;:11;:38;:::i;:::-;15641:65;;15751:73;15780:5;15787:3;15792:18;15812:4;:11;15751:28;;;:73;;:::i;:::-;15874:27;15904:55;15928:5;15935:3;15940:18;15904:23;:55::i;:::-;15874:85;;15965:66;15997:19;16024:4;15965:13;;;;;:66;;:::i;3258:181:1:-;3394:1;3390:13;3386:24;;3258:181::o;3148:137:7:-;3254:21;;3148:137::o;5224:132:5:-;5281:5;5327:24;5344:6;5327:16;:24::i;:::-;5301:23;5317:6;5301:15;:23::i;:::-;:50;;;;:::i;:::-;5294:57;5224:132;-1:-1:-1;;5224:132:5:o;5872:624:13:-;6005:15;;;6018:1;6005:15;;;;;;;;5977:25;;6005:15;;;;;;;;;;-1:-1:-1;6005:15:13;5977:43;;6054:9;6048:23;6026:9;6036:1;6026:12;;;;;;;;:::i;:::-;;;;;;:46;;;;;;;;;;;6106:20;6100:34;6078:9;6088:1;6078:12;;;;;;;;:::i;:::-;;;;;;:57;;;;;;;;;;;6141:29;6173:32;6195:9;6173:21;;;;;:32;;:::i;:::-;6141:64;;6212:18;6250:24;:15;:22;;;;;:24;;:::i;:::-;6283:9;6303:20;6233:93;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6233:93:13;;;;;;6379:1;6365:16;;;;;;;;;6233:93;-1:-1:-1;6333:29:13;;6233:93;6365:16;;;;;;;;;;;-1:-1:-1;6365:16:13;6333:48;;6422:7;6405:27;;6387:12;6400:1;6387:15;;;;;;;;:::i;:::-;;;;;;:45;;;;;6439:52;-1:-1:-1;;;;;;;;;;;666:36:13;;6471:12;6485:5;6439:21;;;;;:52;;:::i;3449:285:10:-;3545:12;3569:16;:14;:16::i;:::-;3565:165;;;3602:42;3621:5;3628:3;3633:10;3602:18;;;;;:42;;:::i;:::-;3595:49;;;;3565:165;3672:51;;-1:-1:-1;;;3672:51:10;;3679:10;;3672:27;;:51;;3700:5;;3707:3;;3712:10;;3672:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3672:51:10;;;;;;;;;;;;:::i;1563:586:6:-;1670:5;1768:3;1759:5;:12;;:34;;;;;1782:4;:11;1775:3;:18;;1759:34;1753:85;;1821:4;1827:5;1834:3;1803:35;;-1:-1:-1;;;1803:35:6;;;;;;;;;;:::i;1753:85::-;1906:4;1896:15;;1953:17;1965:5;1896:15;1953:17;:::i;:::-;;-1:-1:-1;1976:12:6;1991:11;1997:5;1991:3;:11;:::i;:::-;-1:-1:-1;;;;;2127:15:6;2119:3;2107:15;;;;2106:37;;;;;;-1:-1:-1;;;;;1563:586:6:o;22003:279:14:-;22067:23;22161:29;22193:34;22211:4;22217:2;22221:5;22193:17;;;;;:34;;:::i;20331:255:9:-;20418:7;;;20457:106;20481:11;20477:15;;:1;:15;20457:106;;;20517:39;:17;20532:1;20517:6;:14;;;;;;:17;;;;:::i;:39::-;20507:49;;;;:::i;:::-;;-1:-1:-1;20494:3:9;;;;:::i;:::-;;;;20457:106;;;-1:-1:-1;20575:6:9;20331:255;-1:-1:-1;;;20331:255:9:o;503:254:7:-;608:21;679:4;673;669:15;652:32;;695:57;701:14;717:6;725:13;740:4;:11;695:5;;;:57;;:::i;21849:678:9:-;22089:31;22123:41;22153:5;22160:3;22123:29;:41::i;:::-;22089:75;;22170:28;22220:57;22251:23;22220:12;;;;;:57;;:::i;:::-;22170:108;;22336:63;22362:18;22336:63;;22382:16;22336:14;:25;;;;;;:63;;;;;:::i;:::-;22319:80;;22433:89;22465:23;22496;:14;:21;;;;;:23;;:::i;20844:216::-;20972:7;-1:-1:-1;;;;;;;;;;;21029:5:9;21036:3;21041:11;21012:41;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;21012:41:9;;;;;;;;;21002:52;;21012:41;21002:52;;;;;20844:216;-1:-1:-1;;;;20844:216:9:o;264:108:7:-;337:30;343:14;359:1;362:4;337:5;:30::i;621:563:4:-;684:13;705:21;732:18;830:9;825:205;845:8;:15;841:1;:19;825:205;;;888:62;904:13;923:5;927:1;923;:5;:::i;:::-;919:9;;:1;:9;:::i;:::-;937:8;946:1;937:11;;;;;;;;:::i;:::-;;;;;;;930:19;;888:15;;;;;:62;;:::i;:::-;872:78;;973:8;982:1;973:11;;;;;;;;:::i;:::-;;;;;;;958:26;;;;;;;:::i;:::-;;-1:-1:-1;1012:3:4;;825:205;;;;1078:54;1094:13;1109:1;1119:11;1112:19;;1078:15;;;;;:54;;:::i;1879:235:10:-;1973:16;:14;:16::i;:::-;1969:141;;;1999:37;2019:5;2026:3;2031:4;1999:19;;;;;:37;;:::i;1969:141::-;2057:46;;-1:-1:-1;;;2057:46:10;;2064:10;;2057:28;;:46;;2086:5;;2093:3;;2098:4;;2057:46;;;:::i;12777:208:9:-;12874:12;12894:13;12910:16;12920:5;12910:9;:16::i;:::-;12894:32;-1:-1:-1;12939:41:9;12948:5;12955:3;12960:11;12894:32;12939:8;:41::i;:::-;12932:48;12777:208;-1:-1:-1;;;;;12777:208:9:o;2422:1642:16:-;2535:22;2565:21;2589;:11;:19;;;;;:21;;:::i;:::-;2565:45;;2616:20;2639;:11;:18;;;;;:20;;:::i;:::-;2616:43;;2665:15;2683:11;:39;;2707:15;:11;2721:1;2707:15;:::i;:::-;2701:21;;:3;:21;:::i;:::-;2683:39;;;2697:1;2683:39;2665:57;;2769:19;2841:11;2826:12;:26;;;;;:::i;:::-;;;-1:-1:-1;3009:26:16;3024:11;3009:12;:26;:::i;:::-;:31;3005:123;;3050:71;;-1:-1:-1;;;3050:71:16;;11260:2:78;3050:71:16;;;11242:21:78;11299:2;11279:18;;;11272:30;11338:34;11318:18;;;11311:62;11409:31;11389:18;;;11382:59;11458:19;;3050:71:16;11058:425:78;3005:123:16;3314:4;3309:2;3296:11;3292:20;3288:31;3401:4;3395:11;3386:20;;3437:13;3430:5;3426:25;3420:4;3413:39;;3502:11;3495:5;3488:26;3545:1;3585:4;3578:5;3574:16;3640:13;3522:532;3668:11;3665:1;3662:18;3522:532;;;3997:19;;3984:33;;3964:54;;3755:1;3748:9;;;;;3798:4;3781:22;;;;3867:30;;3522:532;;;3526:135;;;3182:878;;;;2422:1642;;;;;:::o;891:2253:7:-;1182:2;1173:6;:11;1155:29;;;;1202:2;1192:12;;;;;;:::i;:::-;;;-1:-1:-1;1297:10:7;;1293:1071;;1375:21;1500:6;1495:2;:11;1479:27;;1523:12;1538:22;1553:6;1538:14;;;;;:22;;:::i;:::-;1523:37;;1721:1;1713:6;1709:14;1755:4;1744:9;1740:20;1732:28;;1808:13;1802:20;1791:9;1787:36;1769:54;;2042:4;2038:9;2021:14;2015:21;2011:37;1946:4;1934:10;1930:21;1877:183;1851:14;1833:237;;2123:13;2113:6;:23;2109:36;;2138:7;;;;2109:36;2179:19;2197:1;2179:19;;:::i;:::-;;-1:-1:-1;;2286:30:7;;;;2326:23;;1293:1071;2411:2;2401:6;:12;2394:301;;2506:20;;2483:44;;2542:19;2560:1;2490:14;2542:19;:::i;:::-;;-1:-1:-1;2656:2:7;2639:19;;;;;-1:-1:-1;;2668:12:7;2394:301;;;2763:10;;2759:381;;2783:12;2798:22;2813:6;2798:14;;;;;:22;;:::i;:::-;3071:21;;2987:20;;2983:31;;3094:9;;3067:37;2932:184;2888:238;;-1:-1:-1;891:2253:7;;;;:::o;21145:184:9:-;21244:7;-1:-1:-1;;;;;;;;;;;21301:5:9;21308:3;21284:38;;;;;;;;;;:::i;2967:1018:4:-;3095:13;3164;3095;3255:20;3164:13;2489:51;;;2392:154;3255:20;3233:42;-1:-1:-1;3281:27:4;3311:36;3319:13;3311:36;;;:7;:36::i;:::-;3281:66;;3434:19;3415:15;:38;3411:184;;3478:37;3496:19;3478:15;:37;:::i;:::-;3463:52;;;;:::i;:::-;;;3411:184;;;3551:37;3573:15;3551:19;:37;:::i;:::-;3536:52;;;;:::i;:::-;;;3411:184;3657:14;3678:9;:5;3686:1;3678:9;:::i;:::-;3674:13;;:1;:13;:::i;:::-;3657:30;;3766:65;3782:16;3800:1;3817:11;3803:27;;3766:15;;;;;:65;;:::i;:::-;3747:84;;3856:74;3872:16;3890:6;3912:15;3898:31;;3856:15;;;;;:74;;:::i;:::-;3837:93;2967:1018;-1:-1:-1;;;;;;;;2967:1018:4:o;2376:448:1:-;2567:1;2563:13;;2740:29;;;-1:-1:-1;;;;;;2559:24:1;;;2672:9;2661:21;;2729:41;2376:448;;;;;:::o;4390:2802:9:-;4620:13;4636:16;4646:5;4636:9;:16::i;:::-;4620:32;;4737:20;4760:25;:6;:23;;;;;:25;;:::i;:::-;4737:48;;4791:22;4816:12;4791:37;;4834:27;4899:1;4871:25;:6;:23;;;;;:25;;:::i;:::-;:29;;;4867:271;;;5020:33;5034:4;5040:12;5020:13;;;;;:33;;:::i;:::-;4985:69;;5085:21;:13;:19;;;;;:21;;:::i;:::-;5080:26;;:2;:26;:::i;:::-;5062:44;;;;:::i;:::-;;;4867:271;5166:4;:11;5148:14;:29;5144:113;;5238:11;;5194:56;;-1:-1:-1;;;5194:56:9;;;;5222:14;;5194:56;;999:25:78;;;1055:2;1040:18;;1033:34;987:2;972:18;;798:275;5144:113:9;-1:-1:-1;;;;;;;;;;;5320:5:9;5327:3;5332:4;5305:32;;;;;;;;:::i;:::-;;;;;;;;5470:22;5495:25;5513:5;5505:14;;5495:9;;;;;:25;;:::i;:::-;5470:50;;5531:9;5526:138;5550:5;:12;5546:1;:16;5526:138;;;5577:15;5606:5;5612:1;5606:8;;;;;;;;:::i;:::-;;;;;;;5577:38;;5623:4;-1:-1:-1;;;;;5623:16:9;;5640:5;5647:3;5652:4;5623:34;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5569:95;5564:3;;;;;:::i;:::-;;;;5526:138;;;;5727:26;5756:52;5797:5;5804:3;5756:40;;;;;:52;;:::i;:::-;5727:81;;5814:21;5838:24;5857:4;5838:18;;;;;:24;;:::i;:::-;5814:48;;5868:144;5906:18;5940:1;5964:13;5993:12;5868:13;;;;;:144;;:::i;:::-;6035:17;:12;6050:2;6035:17;:::i;:::-;6018:34;;;;:::i;:::-;;;6204:25;:6;:23;;;;;:25;;:::i;:::-;:30;;6233:1;6204:30;6200:43;;6236:7;;;;;;;4390:2802;;;:::o;6200:43::-;6322:33;6358:59;6406:5;6413:3;6358:47;;;;;:59;;:::i;:::-;6322:95;;6423:90;6455:25;6488:22;:13;:20;;;;;:22;;:::i;6423:90::-;6618:27;6651:25;6687:7;6682:506;6700:25;:6;:23;;;;;:25;;:::i;:::-;6696:29;;:1;:29;;;6682:506;;;6759:56;6801:5;6808:3;6813:1;6759:41;;;;;:56;;:::i;:::-;6737:78;;6843:24;6865:1;6843:24;;:13;:21;;;;;;:24;;;;:::i;:::-;6823:44;;6875:160;6915:19;6952:1;6978:13;7009:17;6875:13;;;;;:160;;:::i;:::-;7043:34;7060:17;7043:34;;:::i;:::-;;-1:-1:-1;7170:3:9;;6682:506;;;;4474:2718;;;;;;;;;;4390:2802;;;:::o;13083:383::-;13215:12;13253:24;:6;:22;;;;;:24;;:::i;:::-;13239:38;;:11;:38;;;13235:227;;;13294:66;13328:5;13335:3;13340:11;13353:6;13294:33;;;;;:66;;:::i;:::-;13287:73;;;;13235:227;13388:67;13423:5;13430:3;13435:11;13448:6;13388:34;;;;;:67;;:::i;2292:104:6:-;2388:3;2366:25;;2292:104::o;2456:116::-;-1:-1:-1;;;;;2529:38:6;;2456:116::o;652:152:11:-;-1:-1:-1;;790:1:11;777:14;;;755:37;753:40;;652:152::o;2392:154:4:-;2489:51;;;2392:154::o;2661:221::-;2745:7;;2781:9;:5;2789:1;2781:9;:::i;:::-;2777:13;;:1;:13;:::i;:::-;2760:30;;2818:57;2852:13;2868:6;2818:12;;;;;:57;;:::i;:::-;2811:65;;;2661:221;-1:-1:-1;;;;2661:221:4:o;4339:137:5:-;4433:37;;;4339:137::o;11514:199:1:-;11656:27;11670:4;11656:27;11650:34;;11514:199::o;422:151:3:-;558:4;548:15;;422:151::o;18384:595:9:-;18523:12;18614:21;18638:27;18653:11;18638:27;;:6;:14;;;;;;:27;;;;:::i;:::-;18614:51;;18671:18;18692:32;:10;:30;;;;;;;;:::i;:32::-;18671:53;-1:-1:-1;18730:16:9;18749:34;18772:5;18779:3;18749:22;:34::i;:::-;18730:53;-1:-1:-1;18789:14:9;18806:41;18827:6;18835:11;18806:20;:41::i;:::-;18789:58;;18896:78;18927:8;18945:10;18965:6;18896:12;;;;;:78;;:::i;:::-;18889:85;18384:595;-1:-1:-1;;;;;;;;;18384:595:9:o;19085:546::-;19225:12;19309:24;19350;:6;:22;;;;;:24;;:::i;:::-;19336:38;;:11;:38;:::i;:::-;19309:65;-1:-1:-1;19380:16:9;19399:55;19423:5;19430:3;19309:65;19399:23;:55::i;:::-;19380:74;-1:-1:-1;19460:18:9;19481:69;;;;:41;19511:5;19518:3;19481:29;:41::i;:::-;:49;;;;;;:69;;;;:::i;:::-;19460:90;;19564:62;19595:8;19613:10;19564:12;;;;;:62;;:::i;3534:463:7:-;3643:19;3820:6;-1:-1:-1;;;;;3810:17:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3810:17:7;-1:-1:-1;3801:26:7;-1:-1:-1;3906:4:7;3894:17;;3922:51;3927:14;3943:6;3951;3894:17;3922:4;:51::i;21416:335:9:-;21515:13;;21615:41;21645:5;21652:3;21615:29;:41::i;3289:140:7:-;3366:12;3393:31;3398:14;3414:6;3422:1;3393:4;:31::i;4131:2189::-;4426:2;4417:6;:11;4399:29;;;;4446:2;4436:12;;;;;;:::i;:::-;;;-1:-1:-1;4541:10:7;;4537:1005;;4619:21;4744:6;4739:2;:11;4723:27;;4767:12;4782:29;4797:13;4782:14;;;;;:29;;:::i;:::-;4767:44;;4987:14;4981:21;4977:1;4969:6;4965:14;4961:42;5220:4;5216:9;5200:13;5194:20;5190:36;5125:4;5113:10;5109:21;5056:182;5031:13;5013:235;;5301:13;5291:6;:23;5287:36;;5316:7;;;;5287:36;5357:19;5375:1;5357:19;;:::i;:::-;;-1:-1:-1;;5504:23:7;;;;;5464:30;4537:1005;5588:2;5578:6;:12;5571:301;;5682:21;;5660:44;;5719:19;5737:1;5688:14;5719:19;:::i;:::-;;-1:-1:-1;;;5845:12:7;;;;5833:2;5816:19;5571:301;;;5940:10;;5936:380;;5960:12;5975:22;5990:6;5975:14;;;;;:22;;:::i;:::-;6248:20;;6163:21;;6159:32;;6270:9;;6244:36;6108:184;6065:237;;-1:-1:-1;4131:2189:7;;;;:::o;14:127:78:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:127;207:10;202:3;198:20;195:1;188:31;238:4;235:1;228:15;262:4;259:1;252:15;484:127;545:10;540:3;536:20;533:1;526:31;576:4;573:1;566:15;600:4;597:1;590:15;1304:435;1357:3;1395:5;1389:12;1422:6;1417:3;1410:19;1448:4;1477:2;1472:3;1468:12;1461:19;;1514:2;1507:5;1503:14;1535:1;1545:169;1559:6;1556:1;1553:13;1545:169;;;1620:13;;1608:26;;1654:12;;;;1689:15;;;;1581:1;1574:9;1545:169;;;-1:-1:-1;1730:3:78;;1304:435;-1:-1:-1;;;;;1304:435:78:o;1744:258::-;1816:1;1826:113;1840:6;1837:1;1834:13;1826:113;;;1916:11;;;1910:18;1897:11;;;1890:39;1862:2;1855:10;1826:113;;;1957:6;1954:1;1951:13;1948:48;;;-1:-1:-1;;1992:1:78;1974:16;;1967:27;1744:258::o;2007:257::-;2048:3;2086:5;2080:12;2113:6;2108:3;2101:19;2129:63;2185:6;2178:4;2173:3;2169:14;2162:4;2155:5;2151:16;2129:63;:::i;:::-;2246:2;2225:15;-1:-1:-1;;2221:29:78;2212:39;;;;2253:4;2208:50;;2007:257;-1:-1:-1;;2007:257:78:o;2269:572::-;2546:6;2535:9;2528:25;2589:3;2584:2;2573:9;2569:18;2562:31;2509:4;2616:57;2668:3;2657:9;2653:19;2645:6;2616:57;:::i;:::-;2721:4;2713:6;2709:17;2704:2;2693:9;2689:18;2682:45;2775:9;2767:6;2763:22;2758:2;2747:9;2743:18;2736:50;2803:32;2828:6;2820;2803:32;:::i;2846:127::-;2907:10;2902:3;2898:20;2895:1;2888:31;2938:4;2935:1;2928:15;2962:4;2959:1;2952:15;2978:175;3015:3;3059:4;3052:5;3048:16;3088:4;3079:7;3076:17;3073:43;;3096:18;;:::i;:::-;3145:1;3132:15;;2978:175;-1:-1:-1;;2978:175:78:o;3158:224::-;3197:3;3225:6;3258:2;3255:1;3251:10;3288:2;3285:1;3281:10;3319:3;3315:2;3311:12;3306:3;3303:21;3300:47;;;3327:18;;:::i;:::-;3363:13;;3158:224;-1:-1:-1;;;;3158:224:78:o;3387:128::-;3427:3;3458:1;3454:6;3451:1;3448:13;3445:39;;;3464:18;;:::i;:::-;-1:-1:-1;3500:9:78;;3387:128::o;3520:195::-;3558:4;3595;3592:1;3588:12;3627:4;3624:1;3620:12;3652:3;3647;3644:12;3641:38;;;3659:18;;:::i;:::-;3696:13;;;3520:195;-1:-1:-1;;;3520:195:78:o;4101:135::-;4140:3;4161:17;;;4158:43;;4181:18;;:::i;:::-;-1:-1:-1;4228:1:78;4217:13;;4101:135::o;4428:492::-;4681:6;4670:9;4663:25;4724:2;4719;4708:9;4704:18;4697:30;4644:4;4750:56;4802:2;4791:9;4787:18;4779:6;4750:56;:::i;:::-;4854:9;4846:6;4842:22;4837:2;4826:9;4822:18;4815:50;4882:32;4907:6;4899;4882:32;:::i;:::-;4874:40;4428:492;-1:-1:-1;;;;;;4428:492:78:o;4925:615::-;4977:3;5015:5;5009:12;5042:6;5037:3;5030:19;5068:4;5109:2;5104:3;5100:12;5134:11;5161;5154:18;;5211:6;5208:1;5204:14;5197:5;5193:26;5181:38;;5253:2;5246:5;5242:14;5274:1;5284:230;5298:6;5295:1;5292:13;5284:230;;;5369:5;5363:4;5359:16;5354:3;5347:29;5397:37;5429:4;5420:6;5414:13;5397:37;:::i;:::-;5492:12;;;;5389:45;-1:-1:-1;5457:15:78;;;;5320:1;5313:9;5284:230;;;-1:-1:-1;5530:4:78;;4925:615;-1:-1:-1;;;;;;;4925:615:78:o;5545:513::-;5820:6;5809:9;5802:25;5863:2;5858;5847:9;5843:18;5836:30;5783:4;5889:44;5929:2;5918:9;5914:18;5906:6;5889:44;:::i;:::-;5981:9;5973:6;5969:22;5964:2;5953:9;5949:18;5942:50;6009:43;6045:6;6037;6009:43;:::i;6063:125::-;6103:4;6131:1;6128;6125:8;6122:34;;;6136:18;;:::i;:::-;-1:-1:-1;6173:9:78;;6063:125::o;6193:403::-;6428:6;6417:9;6410:25;6471:6;6466:2;6455:9;6451:18;6444:34;6514:2;6509;6498:9;6494:18;6487:30;6391:4;6534:56;6586:2;6575:9;6571:18;6563:6;6534:56;:::i;6863:280::-;7062:2;7051:9;7044:21;7025:4;7082:55;7133:2;7122:9;7118:18;7110:6;7082:55;:::i;7401:204::-;7439:3;7475:4;7472:1;7468:12;7507:4;7504:1;7500:12;7542:3;7536:4;7532:14;7527:3;7524:23;7521:49;;;7550:18;;:::i;:::-;7586:13;;7401:204;-1:-1:-1;;;7401:204:78:o;7610:536::-;7843:6;7838:3;7831:19;7813:3;7879:6;7873:13;7895:60;7948:6;7943:2;7938:3;7934:12;7929:2;7921:6;7917:15;7895:60;:::i;:::-;7983:6;7978:3;7974:16;7964:26;;8021:6;8015:13;8037:61;8089:8;8084:2;8080;8076:11;8071:2;8063:6;8059:15;8037:61;:::i;:::-;8118:17;8137:2;8114:26;;7610:536;-1:-1:-1;;;;;7610:536:78:o;8151:410::-;8382:6;8371:9;8364:25;8425:2;8420;8409:9;8405:18;8398:30;8345:4;8445:56;8497:2;8486:9;8482:18;8474:6;8445:56;:::i;:::-;8437:64;;8549:4;8541:6;8537:17;8532:2;8521:9;8517:18;8510:45;8151:410;;;;;;:::o;8566:883::-;8645:6;8698:2;8686:9;8677:7;8673:23;8669:32;8666:52;;;8714:1;8711;8704:12;8666:52;8741:16;;-1:-1:-1;;;;;8806:14:78;;;8803:34;;;8833:1;8830;8823:12;8803:34;8871:6;8860:9;8856:22;8846:32;;8916:7;8909:4;8905:2;8901:13;8897:27;8887:55;;8938:1;8935;8928:12;8887:55;8967:2;8961:9;8989:2;8985;8982:10;8979:36;;;8995:18;;:::i;:::-;9070:2;9064:9;9038:2;9124:13;;-1:-1:-1;;9120:22:78;;;9144:2;9116:31;9112:40;9100:53;;;9168:18;;;9188:22;;;9165:46;9162:72;;;9214:18;;:::i;:::-;9254:10;9250:2;9243:22;9289:2;9281:6;9274:18;9329:7;9324:2;9319;9315;9311:11;9307:20;9304:33;9301:53;;;9350:1;9347;9340:12;9301:53;9363:55;9415:2;9410;9402:6;9398:15;9393:2;9389;9385:11;9363:55;:::i;9454:359::-;9657:2;9646:9;9639:21;9620:4;9677:44;9717:2;9706:9;9702:18;9694:6;9677:44;:::i;:::-;9752:2;9737:18;;9730:34;;;;-1:-1:-1;9795:2:78;9780:18;9773:34;9669:52;9454:359;-1:-1:-1;9454:359:78:o;9818:483::-;10077:6;10066:9;10059:25;10120:6;10115:2;10104:9;10100:18;10093:34;10163:3;10158:2;10147:9;10143:18;10136:31;10040:4;10184:57;10236:3;10225:9;10221:19;10213:6;10184:57;:::i;:::-;10176:65;;10289:4;10281:6;10277:17;10272:2;10261:9;10257:18;10250:45;9818:483;;;;;;;:::o;10306:168::-;10346:7;10412:1;10408;10404:6;10400:14;10397:1;10394:21;10389:1;10382:9;10375:17;10371:45;10368:71;;;10419:18;;:::i;:::-;-1:-1:-1;10459:9:78;;10306:168::o;10479:228::-;10518:3;10546:10;10583:2;10580:1;10576:10;10613:2;10610:1;10606:10;10644:3;10640:2;10636:12;10631:3;10628:21;10625:47;;;10652:18;;:::i;10712:127::-;10773:10;10768:3;10764:20;10761:1;10754:31;10804:4;10801:1;10794:15;10828:4;10825:1;10818:15;10844:209;10876:1;10902;10892:132;;10946:10;10941:3;10937:20;10934:1;10927:31;10981:4;10978:1;10971:15;11009:4;11006:1;10999:15;10892:132;-1:-1:-1;11038:9:78;;10844:209::o;11488:671::-;11824:6;11813:9;11806:25;11867:6;11862:2;11851:9;11847:18;11840:34;11910:3;11905:2;11894:9;11890:18;11883:31;11787:4;11937:57;11989:3;11978:9;11974:19;11966:6;11937:57;:::i;:::-;12042:9;12034:6;12030:22;12025:2;12014:9;12010:18;12003:50;12077:1;12069:6;12062:17;-1:-1:-1;;;12107:2:78;12099:6;12095:15;12088:33;12150:2;12142:6;12138:15;12130:23;;;11488:671;;;;;;:::o;:::-;788:16029:65;;;;;;",
|
|
899
|
+
linkReferences: {}
|
|
900
|
+
};
|
|
901
|
+
|
|
902
|
+
// src/utils/deploy-v2.ts
|
|
903
|
+
import chalk2 from "chalk";
|
|
904
|
+
|
|
905
|
+
// src/render-solidity/userType.ts
|
|
906
|
+
import path from "path";
|
|
907
|
+
function resolveSchemaOrUserTypeSimple(schemaOrUserType, userTypesConfig) {
|
|
908
|
+
if (typeof schemaOrUserType === "string") {
|
|
909
|
+
const { schemaType } = getUserTypeInfo(schemaOrUserType, userTypesConfig);
|
|
910
|
+
return schemaType;
|
|
911
|
+
} else {
|
|
912
|
+
return schemaOrUserType;
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
function resolveSchemaOrUserType(schemaOrUserType, srcDirectory, usedInDirectory, userTypesConfig) {
|
|
916
|
+
if (typeof schemaOrUserType === "string") {
|
|
917
|
+
const importedFromPath = path.join(srcDirectory, userTypesConfig.path);
|
|
918
|
+
const importDatum = {
|
|
919
|
+
symbol: schemaOrUserType,
|
|
920
|
+
path: "./" + path.relative(usedInDirectory, importedFromPath) + ".sol"
|
|
921
|
+
};
|
|
922
|
+
const { schemaType, renderTableType } = getUserTypeInfo(schemaOrUserType, userTypesConfig);
|
|
923
|
+
return {
|
|
924
|
+
importDatum,
|
|
925
|
+
renderTableType,
|
|
926
|
+
schemaType
|
|
927
|
+
};
|
|
928
|
+
} else {
|
|
929
|
+
return {
|
|
930
|
+
importDatum: void 0,
|
|
931
|
+
renderTableType: getSchemaTypeInfo(schemaOrUserType),
|
|
932
|
+
schemaType: schemaOrUserType
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
function getSchemaTypeInfo(schemaType) {
|
|
937
|
+
const staticByteLength = getStaticByteLength(schemaType);
|
|
938
|
+
const isDynamic = staticByteLength === 0;
|
|
939
|
+
const typeId = SchemaTypeId[schemaType];
|
|
940
|
+
return {
|
|
941
|
+
typeId,
|
|
942
|
+
typeWithLocation: isDynamic ? typeId + " memory" : typeId,
|
|
943
|
+
enumName: SchemaType[schemaType],
|
|
944
|
+
staticByteLength,
|
|
945
|
+
isDynamic,
|
|
946
|
+
typeWrap: "",
|
|
947
|
+
typeUnwrap: "",
|
|
948
|
+
internalTypeId: typeId
|
|
949
|
+
};
|
|
950
|
+
}
|
|
951
|
+
function getUserTypeInfo(userType, userTypesConfig) {
|
|
952
|
+
if (userType in userTypesConfig.enums) {
|
|
953
|
+
const schemaType = 0 /* UINT8 */;
|
|
954
|
+
const staticByteLength = getStaticByteLength(schemaType);
|
|
955
|
+
const isDynamic = staticByteLength === 0;
|
|
956
|
+
const typeId = userType;
|
|
957
|
+
return {
|
|
958
|
+
schemaType,
|
|
959
|
+
renderTableType: {
|
|
960
|
+
typeId,
|
|
961
|
+
typeWithLocation: typeId,
|
|
962
|
+
enumName: SchemaType[schemaType],
|
|
963
|
+
staticByteLength,
|
|
964
|
+
isDynamic,
|
|
965
|
+
typeWrap: `${userType}`,
|
|
966
|
+
typeUnwrap: `${userType}`,
|
|
967
|
+
internalTypeId: `${SchemaTypeId[schemaType]}`
|
|
968
|
+
}
|
|
969
|
+
};
|
|
970
|
+
} else {
|
|
971
|
+
throw new Error(`User type "${userType}" does not exist`);
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
// src/utils/deploy-v2.ts
|
|
976
|
+
async function deploy(mudConfig, deployConfig) {
|
|
977
|
+
const startTime = Date.now();
|
|
978
|
+
const { worldContractName, baseRoute, postDeployScript } = mudConfig;
|
|
979
|
+
const { profile, rpc, privateKey, priorityFeeMultiplier } = deployConfig;
|
|
980
|
+
const forgeOutDirectory = await getOutDirectory(profile);
|
|
981
|
+
const provider = new ethers.providers.StaticJsonRpcProvider(rpc);
|
|
982
|
+
const signer = new ethers.Wallet(privateKey, provider);
|
|
983
|
+
let nonce = await signer.getTransactionCount();
|
|
984
|
+
console.log("Initial nonce", nonce);
|
|
985
|
+
let maxPriorityFeePerGas;
|
|
986
|
+
let maxFeePerGas;
|
|
987
|
+
setInternalFeePerGas(priorityFeeMultiplier);
|
|
988
|
+
const promises = [];
|
|
989
|
+
const blockNumber = Number(await cast(["block-number", "--rpc-url", rpc], { profile }));
|
|
990
|
+
console.log("Start deployment at block", blockNumber);
|
|
991
|
+
const contractPromises = Object.keys(mudConfig.systems).reduce(
|
|
992
|
+
(acc, systemName) => {
|
|
993
|
+
acc[systemName] = deployContractByName(systemName);
|
|
994
|
+
return acc;
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
World: worldContractName ? deployContractByName(worldContractName) : deployContract(abi, bytecode, "World")
|
|
998
|
+
}
|
|
999
|
+
);
|
|
1000
|
+
const WorldContract = new ethers.Contract(await contractPromises.World, abi, signer);
|
|
1001
|
+
if (baseRoute)
|
|
1002
|
+
await fastTxExecute(WorldContract, "registerRoute", ["", baseRoute]);
|
|
1003
|
+
promises.push(
|
|
1004
|
+
...Object.entries(mudConfig.tables).map(async ([tableName, tableConfig]) => {
|
|
1005
|
+
console.log(chalk2.blue("Registering table", tableName, "at", baseRoute + tableConfig.route));
|
|
1006
|
+
const routeFragments = tableConfig.route.substring(1).split("/");
|
|
1007
|
+
const lastRouteFragment = toRoute(routeFragments.pop());
|
|
1008
|
+
await registerNestedRoute(WorldContract, baseRoute, routeFragments);
|
|
1009
|
+
const tableBaseRoute = toRoute(baseRoute, ...routeFragments);
|
|
1010
|
+
const schemaTypes = Object.values(tableConfig.schema).map((schemaOrUserType) => {
|
|
1011
|
+
return resolveSchemaOrUserTypeSimple(schemaOrUserType, mudConfig.userTypes);
|
|
1012
|
+
});
|
|
1013
|
+
await fastTxExecute(WorldContract, "registerTable", [
|
|
1014
|
+
tableBaseRoute,
|
|
1015
|
+
lastRouteFragment,
|
|
1016
|
+
encodeSchema(schemaTypes)
|
|
1017
|
+
]);
|
|
1018
|
+
await fastTxExecute(WorldContract, "setMetadata(string,string,string[])", [
|
|
1019
|
+
baseRoute + tableConfig.route,
|
|
1020
|
+
tableName,
|
|
1021
|
+
Object.keys(tableConfig.schema)
|
|
1022
|
+
]);
|
|
1023
|
+
console.log(chalk2.green("Registered table", tableName, "at", baseRoute + tableConfig.route));
|
|
1024
|
+
})
|
|
1025
|
+
);
|
|
1026
|
+
promises.push(
|
|
1027
|
+
...Object.entries(mudConfig.systems).map(async ([systemName, systemConfig]) => {
|
|
1028
|
+
console.log(chalk2.blue("Registering system", systemName, "at", baseRoute + systemConfig.route));
|
|
1029
|
+
const routeFragments = systemConfig.route.substring(1).split("/");
|
|
1030
|
+
const lastRouteFragment = toRoute(routeFragments.pop());
|
|
1031
|
+
const systemBaseRoute = toRoute(baseRoute, ...routeFragments);
|
|
1032
|
+
await registerNestedRoute(WorldContract, baseRoute, routeFragments);
|
|
1033
|
+
await fastTxExecute(WorldContract, "registerSystem", [
|
|
1034
|
+
systemBaseRoute,
|
|
1035
|
+
lastRouteFragment,
|
|
1036
|
+
await contractPromises[systemName],
|
|
1037
|
+
systemConfig.openAccess
|
|
1038
|
+
]);
|
|
1039
|
+
console.log(chalk2.green("Registered system", systemName, "at", baseRoute + systemConfig.route));
|
|
1040
|
+
})
|
|
1041
|
+
);
|
|
1042
|
+
await Promise.all(promises);
|
|
1043
|
+
for (const [systemName, systemConfig] of Object.entries(mudConfig.systems)) {
|
|
1044
|
+
const systemRoute = baseRoute + systemConfig.route;
|
|
1045
|
+
promises.push(
|
|
1046
|
+
...systemConfig.accessListAddresses.map(async (address) => {
|
|
1047
|
+
console.log(chalk2.blue(`Grant ${address} access to ${systemName} (${systemRoute})`));
|
|
1048
|
+
await fastTxExecute(WorldContract, "grantAccess", [systemRoute, address]);
|
|
1049
|
+
console.log(chalk2.green(`Granted ${address} access to ${systemName} (${systemRoute})`));
|
|
1050
|
+
})
|
|
1051
|
+
);
|
|
1052
|
+
promises.push(
|
|
1053
|
+
...systemConfig.accessListSystems.map(async (granteeSystem) => {
|
|
1054
|
+
console.log(chalk2.blue(`Grant ${granteeSystem} access to ${systemName} (${systemRoute})`));
|
|
1055
|
+
await fastTxExecute(WorldContract, "grantAccess", [systemRoute, await contractPromises[granteeSystem]]);
|
|
1056
|
+
console.log(chalk2.green(`Granted ${granteeSystem} access to ${systemName} (${systemRoute})`));
|
|
1057
|
+
})
|
|
1058
|
+
);
|
|
1059
|
+
}
|
|
1060
|
+
await Promise.all(promises);
|
|
1061
|
+
const postDeployPath = path2.join(await getScriptDirectory(), postDeployScript + ".s.sol");
|
|
1062
|
+
if (existsSync(postDeployPath)) {
|
|
1063
|
+
console.log(chalk2.blue(`Executing post deploy script at ${postDeployPath}`));
|
|
1064
|
+
await forge(
|
|
1065
|
+
[
|
|
1066
|
+
"script",
|
|
1067
|
+
postDeployScript,
|
|
1068
|
+
"--sig",
|
|
1069
|
+
"run(address)",
|
|
1070
|
+
await contractPromises.World,
|
|
1071
|
+
"--broadcast",
|
|
1072
|
+
"--rpc-url",
|
|
1073
|
+
rpc,
|
|
1074
|
+
"-vvv"
|
|
1075
|
+
],
|
|
1076
|
+
{
|
|
1077
|
+
profile
|
|
1078
|
+
}
|
|
1079
|
+
);
|
|
1080
|
+
} else {
|
|
1081
|
+
console.log(`No script at ${postDeployPath}, skipping post deploy hook`);
|
|
1082
|
+
}
|
|
1083
|
+
console.log(chalk2.green("Deployment completed in", (Date.now() - startTime) / 1e3, "seconds"));
|
|
1084
|
+
return { worldAddress: await contractPromises.World, blockNumber, rpc };
|
|
1085
|
+
async function deployContractByName(contractName) {
|
|
1086
|
+
console.log(chalk2.blue("Deploying", contractName));
|
|
1087
|
+
const { abi: abi2, bytecode: bytecode2 } = await getContractData(contractName);
|
|
1088
|
+
return deployContract(abi2, bytecode2, contractName);
|
|
1089
|
+
}
|
|
1090
|
+
async function deployContract(abi2, bytecode2, contractName, retryCount = 0) {
|
|
1091
|
+
try {
|
|
1092
|
+
const factory = new ethers.ContractFactory(abi2, bytecode2, signer);
|
|
1093
|
+
console.log(chalk2.gray(`executing deployment of ${contractName} with nonce ${nonce}`));
|
|
1094
|
+
const deployPromise = factory.deploy({
|
|
1095
|
+
nonce: nonce++,
|
|
1096
|
+
maxPriorityFeePerGas,
|
|
1097
|
+
maxFeePerGas
|
|
1098
|
+
});
|
|
1099
|
+
promises.push(deployPromise);
|
|
1100
|
+
const { address } = await deployPromise;
|
|
1101
|
+
console.log(chalk2.green("Deployed", contractName, "to", address));
|
|
1102
|
+
return address;
|
|
1103
|
+
} catch (error) {
|
|
1104
|
+
if (retryCount === 0 && error?.message.includes("transaction already imported")) {
|
|
1105
|
+
setInternalFeePerGas(priorityFeeMultiplier * 1.1);
|
|
1106
|
+
return deployContract(abi2, bytecode2, contractName, retryCount++);
|
|
1107
|
+
} else if (error?.message.includes("invalid bytecode")) {
|
|
1108
|
+
throw new MUDError(
|
|
1109
|
+
`Error deploying ${contractName}: invalid bytecode. Note that linking of public libraries is not supported yet, make sure none of your libraries use "external" functions.`
|
|
1110
|
+
);
|
|
1111
|
+
} else
|
|
1112
|
+
throw error;
|
|
1113
|
+
}
|
|
1114
|
+
}
|
|
1115
|
+
async function fastTxExecute(contract, func, args, retryCount = 0) {
|
|
1116
|
+
const functionName = `${func}(${args.map((arg) => `'${arg}'`).join(",")})`;
|
|
1117
|
+
try {
|
|
1118
|
+
const gasLimit = await contract.estimateGas[func].apply(null, args);
|
|
1119
|
+
console.log(chalk2.gray(`executing transaction: ${functionName} with nonce ${nonce}`));
|
|
1120
|
+
const txPromise = contract[func].apply(null, [
|
|
1121
|
+
...args,
|
|
1122
|
+
{ gasLimit, nonce: nonce++, maxPriorityFeePerGas, maxFeePerGas }
|
|
1123
|
+
]);
|
|
1124
|
+
promises.push(txPromise);
|
|
1125
|
+
return txPromise;
|
|
1126
|
+
} catch (error) {
|
|
1127
|
+
if (retryCount === 0 && error?.message.includes("transaction already imported")) {
|
|
1128
|
+
setInternalFeePerGas(priorityFeeMultiplier * 1.1);
|
|
1129
|
+
return fastTxExecute(contract, func, args, retryCount++);
|
|
1130
|
+
} else
|
|
1131
|
+
throw new MUDError(`Gas estimation error for ${functionName}: ${error?.reason}`);
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
async function registerNestedRoute(WorldContract2, baseRoute2, registerRouteFragments) {
|
|
1135
|
+
for (let i = 0; i < registerRouteFragments.length; i++) {
|
|
1136
|
+
const subRoute = toRoute(registerRouteFragments[i]);
|
|
1137
|
+
try {
|
|
1138
|
+
await fastTxExecute(WorldContract2, "registerRoute", [baseRoute2, subRoute]);
|
|
1139
|
+
} catch (e) {
|
|
1140
|
+
}
|
|
1141
|
+
baseRoute2 += subRoute;
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
async function getContractData(contractName) {
|
|
1145
|
+
let data;
|
|
1146
|
+
const contractDataPath = path2.join(forgeOutDirectory, contractName + ".sol", contractName + ".json");
|
|
1147
|
+
try {
|
|
1148
|
+
data = JSON.parse(readFileSync(contractDataPath, "utf8"));
|
|
1149
|
+
} catch (error) {
|
|
1150
|
+
throw new MUDError(`Error reading file at ${contractDataPath}: ${error?.message}`);
|
|
1151
|
+
}
|
|
1152
|
+
const bytecode2 = data?.bytecode?.object;
|
|
1153
|
+
if (!bytecode2)
|
|
1154
|
+
throw new MUDError(`No bytecode found in ${contractDataPath}`);
|
|
1155
|
+
const abi2 = data?.abi;
|
|
1156
|
+
if (!abi2)
|
|
1157
|
+
throw new MUDError(`No ABI found in ${contractDataPath}`);
|
|
1158
|
+
return { abi: abi2, bytecode: bytecode2 };
|
|
1159
|
+
}
|
|
1160
|
+
async function setInternalFeePerGas(multiplier) {
|
|
1161
|
+
const feeData = await provider.getFeeData();
|
|
1162
|
+
if (!feeData.lastBaseFeePerGas)
|
|
1163
|
+
throw new MUDError("Can not fetch lastBaseFeePerGas from RPC");
|
|
1164
|
+
maxPriorityFeePerGas = Math.floor(15e8 * multiplier);
|
|
1165
|
+
maxFeePerGas = feeData.lastBaseFeePerGas.mul(2).add(maxPriorityFeePerGas);
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
function toRoute(...routeFragments) {
|
|
1169
|
+
const route = routeFragments.filter((e) => Boolean(e)).join("/");
|
|
1170
|
+
return route ? `/${route}` : "";
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
export {
|
|
1174
|
+
resolveSchemaOrUserType,
|
|
1175
|
+
getSchemaTypeInfo,
|
|
1176
|
+
formatSolidity,
|
|
1177
|
+
deploy
|
|
1178
|
+
};
|