@mapprotocol/common-contracts 0.1.1 → 0.3.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.
Files changed (28) hide show
  1. package/README.md +114 -58
  2. package/artifacts/contracts/AuthorityManager.sol/AuthorityManager.json +2 -2
  3. package/artifacts/contracts/factory/Create2Factory.sol/Create2Factory.json +107 -0
  4. package/contracts/factory/Create2Factory.sol +57 -0
  5. package/package.json +15 -3
  6. package/typechain-types/contracts/factory/Create2Factory.ts +174 -0
  7. package/typechain-types/contracts/factory/index.ts +4 -0
  8. package/typechain-types/contracts/index.ts +2 -0
  9. package/typechain-types/factories/@openzeppelin/contracts/access/manager/AccessManager__factory.ts +1 -1
  10. package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.ts +1 -1
  11. package/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.ts +1 -1
  12. package/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.ts +1 -1
  13. package/typechain-types/factories/@openzeppelin/contracts/utils/math/SafeCast__factory.ts +1 -1
  14. package/typechain-types/factories/contracts/AuthorityManager__factory.ts +1 -1
  15. package/typechain-types/factories/contracts/factory/Create2Factory__factory.ts +163 -0
  16. package/typechain-types/factories/contracts/factory/index.ts +4 -0
  17. package/typechain-types/factories/contracts/index.ts +1 -0
  18. package/typechain-types/hardhat.d.ts +18 -0
  19. package/typechain-types/index.ts +2 -0
  20. package/utils/addressCodec.ts +57 -0
  21. package/utils/codeHash.ts +75 -0
  22. package/utils/deployRecord.ts +117 -0
  23. package/utils/deployer.ts +123 -0
  24. package/utils/evmHelper.ts +108 -0
  25. package/utils/factory.ts +210 -0
  26. package/utils/index.ts +42 -0
  27. package/utils/tronHelper.ts +362 -0
  28. package/utils/verifier.ts +225 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mapprotocol/common-contracts",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "Common contracts for MAP Protocol",
5
5
  "main": "typechain-types/index.js",
6
6
  "types": "typechain-types/index.d.ts",
@@ -9,6 +9,7 @@
9
9
  "artifacts/contracts/**/*.json",
10
10
  "!artifacts/contracts/**/*.dbg.json",
11
11
  "typechain-types/**/*",
12
+ "utils/**/*.ts",
12
13
  "README.md"
13
14
  ],
14
15
  "repository": {
@@ -46,8 +47,17 @@
46
47
  "author": "MAP Protocol",
47
48
  "license": "MIT",
48
49
  "dependencies": {
49
- "@openzeppelin/contracts": "^5.4.0",
50
- "@openzeppelin/contracts-upgradeable": "^5.4.0"
50
+ "@openzeppelin/contracts": "5.4.0",
51
+ "@openzeppelin/contracts-upgradeable": "5.4.0",
52
+ "bs58": "^4.0.1"
53
+ },
54
+ "peerDependencies": {
55
+ "tronweb": ">=5.0.0"
56
+ },
57
+ "peerDependenciesMeta": {
58
+ "tronweb": {
59
+ "optional": true
60
+ }
51
61
  },
52
62
  "devDependencies": {
53
63
  "@nomicfoundation/hardhat-chai-matchers": "^2.0.0",
@@ -62,8 +72,10 @@
62
72
  "@types/mocha": ">=9.1.0",
63
73
  "@types/node": ">=18.0.0",
64
74
  "chai": "^4.2.0",
75
+ "dotenv": "^16.0.3",
65
76
  "ethers": "^6.4.0",
66
77
  "hardhat": "^2.19.0",
78
+ "tronweb": "^5.3.0",
67
79
  "hardhat-gas-reporter": "^1.0.8",
68
80
  "solidity-coverage": "^0.8.0",
69
81
  "ts-node": ">=8.0.0",
@@ -0,0 +1,174 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ import type {
5
+ BaseContract,
6
+ BigNumberish,
7
+ BytesLike,
8
+ FunctionFragment,
9
+ Result,
10
+ Interface,
11
+ EventFragment,
12
+ AddressLike,
13
+ ContractRunner,
14
+ ContractMethod,
15
+ Listener,
16
+ } from "ethers";
17
+ import type {
18
+ TypedContractEvent,
19
+ TypedDeferredTopicFilter,
20
+ TypedEventLog,
21
+ TypedLogDescription,
22
+ TypedListener,
23
+ TypedContractMethod,
24
+ } from "../../common";
25
+
26
+ export interface Create2FactoryInterface extends Interface {
27
+ getFunction(
28
+ nameOrSignature: "deploy" | "getAddress" | "getAddressTron"
29
+ ): FunctionFragment;
30
+
31
+ getEvent(nameOrSignatureOrTopic: "Deployed"): EventFragment;
32
+
33
+ encodeFunctionData(
34
+ functionFragment: "deploy",
35
+ values: [BytesLike, BytesLike, BigNumberish]
36
+ ): string;
37
+ encodeFunctionData(
38
+ functionFragment: "getAddress",
39
+ values: [BytesLike, BytesLike]
40
+ ): string;
41
+ encodeFunctionData(
42
+ functionFragment: "getAddressTron",
43
+ values: [BytesLike, BytesLike]
44
+ ): string;
45
+
46
+ decodeFunctionResult(functionFragment: "deploy", data: BytesLike): Result;
47
+ decodeFunctionResult(functionFragment: "getAddress", data: BytesLike): Result;
48
+ decodeFunctionResult(
49
+ functionFragment: "getAddressTron",
50
+ data: BytesLike
51
+ ): Result;
52
+ }
53
+
54
+ export namespace DeployedEvent {
55
+ export type InputTuple = [addr: AddressLike, salt: BytesLike];
56
+ export type OutputTuple = [addr: string, salt: string];
57
+ export interface OutputObject {
58
+ addr: string;
59
+ salt: string;
60
+ }
61
+ export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
62
+ export type Filter = TypedDeferredTopicFilter<Event>;
63
+ export type Log = TypedEventLog<Event>;
64
+ export type LogDescription = TypedLogDescription<Event>;
65
+ }
66
+
67
+ export interface Create2Factory extends BaseContract {
68
+ connect(runner?: ContractRunner | null): Create2Factory;
69
+ waitForDeployment(): Promise<this>;
70
+
71
+ interface: Create2FactoryInterface;
72
+
73
+ queryFilter<TCEvent extends TypedContractEvent>(
74
+ event: TCEvent,
75
+ fromBlockOrBlockhash?: string | number | undefined,
76
+ toBlock?: string | number | undefined
77
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
78
+ queryFilter<TCEvent extends TypedContractEvent>(
79
+ filter: TypedDeferredTopicFilter<TCEvent>,
80
+ fromBlockOrBlockhash?: string | number | undefined,
81
+ toBlock?: string | number | undefined
82
+ ): Promise<Array<TypedEventLog<TCEvent>>>;
83
+
84
+ on<TCEvent extends TypedContractEvent>(
85
+ event: TCEvent,
86
+ listener: TypedListener<TCEvent>
87
+ ): Promise<this>;
88
+ on<TCEvent extends TypedContractEvent>(
89
+ filter: TypedDeferredTopicFilter<TCEvent>,
90
+ listener: TypedListener<TCEvent>
91
+ ): Promise<this>;
92
+
93
+ once<TCEvent extends TypedContractEvent>(
94
+ event: TCEvent,
95
+ listener: TypedListener<TCEvent>
96
+ ): Promise<this>;
97
+ once<TCEvent extends TypedContractEvent>(
98
+ filter: TypedDeferredTopicFilter<TCEvent>,
99
+ listener: TypedListener<TCEvent>
100
+ ): Promise<this>;
101
+
102
+ listeners<TCEvent extends TypedContractEvent>(
103
+ event: TCEvent
104
+ ): Promise<Array<TypedListener<TCEvent>>>;
105
+ listeners(eventName?: string): Promise<Array<Listener>>;
106
+ removeAllListeners<TCEvent extends TypedContractEvent>(
107
+ event?: TCEvent
108
+ ): Promise<this>;
109
+
110
+ deploy: TypedContractMethod<
111
+ [salt: BytesLike, creationCode: BytesLike, value: BigNumberish],
112
+ [string],
113
+ "nonpayable"
114
+ >;
115
+
116
+ getAddress: TypedContractMethod<
117
+ [salt: BytesLike, codeHash: BytesLike],
118
+ [string],
119
+ "view"
120
+ >;
121
+
122
+ getAddressTron: TypedContractMethod<
123
+ [salt: BytesLike, codeHash: BytesLike],
124
+ [string],
125
+ "view"
126
+ >;
127
+
128
+ getFunction<T extends ContractMethod = ContractMethod>(
129
+ key: string | FunctionFragment
130
+ ): T;
131
+
132
+ getFunction(
133
+ nameOrSignature: "deploy"
134
+ ): TypedContractMethod<
135
+ [salt: BytesLike, creationCode: BytesLike, value: BigNumberish],
136
+ [string],
137
+ "nonpayable"
138
+ >;
139
+ getFunction(
140
+ nameOrSignature: "getAddress"
141
+ ): TypedContractMethod<
142
+ [salt: BytesLike, codeHash: BytesLike],
143
+ [string],
144
+ "view"
145
+ >;
146
+ getFunction(
147
+ nameOrSignature: "getAddressTron"
148
+ ): TypedContractMethod<
149
+ [salt: BytesLike, codeHash: BytesLike],
150
+ [string],
151
+ "view"
152
+ >;
153
+
154
+ getEvent(
155
+ key: "Deployed"
156
+ ): TypedContractEvent<
157
+ DeployedEvent.InputTuple,
158
+ DeployedEvent.OutputTuple,
159
+ DeployedEvent.OutputObject
160
+ >;
161
+
162
+ filters: {
163
+ "Deployed(address,bytes32)": TypedContractEvent<
164
+ DeployedEvent.InputTuple,
165
+ DeployedEvent.OutputTuple,
166
+ DeployedEvent.OutputObject
167
+ >;
168
+ Deployed: TypedContractEvent<
169
+ DeployedEvent.InputTuple,
170
+ DeployedEvent.OutputTuple,
171
+ DeployedEvent.OutputObject
172
+ >;
173
+ };
174
+ }
@@ -0,0 +1,4 @@
1
+ /* Autogenerated file. Do not edit manually. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ export type { Create2Factory } from "./Create2Factory";
@@ -3,4 +3,6 @@
3
3
  /* eslint-disable */
4
4
  import type * as base from "./base";
5
5
  export type { base };
6
+ import type * as factory from "./factory";
7
+ export type { factory };
6
8
  export type { AuthorityManager } from "./AuthorityManager";
@@ -1187,7 +1187,7 @@ const _abi = [
1187
1187
  ] as const;
1188
1188
 
1189
1189
  const _bytecode =
1190
- "0x60806040523480156200001157600080fd5b5060405162002e2c38038062002e2c833981016040819052620000349162000481565b6001600160a01b0381166200006457604051630409d6d160e11b8152600060048201526024015b60405180910390fd5b6200007360008281806200007b565b50506200050b565b60006002600160401b03196001600160401b03861601620000bb5760405163061c6a4360e21b81526001600160401b03861660048201526024016200005b565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff1615908115620001ba5763ffffffff85166200010a620002d2565b620001169190620004c2565b905060405180604001604052808265ffffffffffff168152602001620001488663ffffffff16620002e460201b60201c565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c16845282529091208351815494909201519092166601000000000000026001600160a01b031990931665ffffffffffff9091161791909117905562000264565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a168452909152812054620002099166010000000000009091046001600160701b0316908690620002ed565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316660100000000000002600160301b600160a01b03199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b6000620002df42620003a2565b905090565b63ffffffff1690565b60008080620003056001600160701b038716620003db565b90506000620003488563ffffffff168763ffffffff168463ffffffff1611620003305760006200033c565b6200033c8885620004eb565b63ffffffff16620003fc565b905063ffffffff81166200035b620002d2565b620003679190620004c2565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b600065ffffffffffff821115620003d7576040516306dfcc6560e41b815260306004820152602481018390526044016200005b565b5090565b600080620003f26001600160701b0384166200040f565b5090949350505050565b60008282188284110282185b9392505050565b60008080620004288462000422620002d2565b62000435565b9250925092509193909250565b6001600160501b03602083901c166001600160701b03831665ffffffffffff604085901c81169084168111156200046f5782828262000474565b816000805b9250925092509250925092565b6000602082840312156200049457600080fd5b81516001600160a01b03811681146200040857600080fd5b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff818116838216019080821115620004e457620004e4620004ac565b5092915050565b63ffffffff828116828216039080821115620004e457620004e4620004ac565b612911806200051b6000396000f3fe6080604052600436106101e35760003560e01c80636d5115bd11610102578063b700961311610095578063d22b598911610064578063d22b59891461065e578063d6bb62c61461067e578063f801a6981461069e578063fe0776f5146106d857600080fd5b8063b7009613146105cc578063b7d2b16214610608578063cc1b6c8114610628578063d1f856ee1461063e57600080fd5b8063a166aa89116100d1578063a166aa8914610521578063a64d95ce14610551578063abd9bd2a14610571578063ac9650d81461059f57600080fd5b80636d5115bd146104ac57806375b238fc146104cc578063853551b8146104e157806394c7d7ee1461050157600080fd5b806330cae1871161017a5780634665096d116101495780634665096d146104195780634c1da1e21461042f578063529629521461044f578063530dd4561461046f57600080fd5b806330cae1871461036d5780633adc277a1461038d5780633ca7c02a146103c45780634136a33c146103df57600080fd5b806318ff183c116101b657806318ff183c146102c05780631cff79cd146102e057806325c471a0146102f35780633078f1141461031357600080fd5b806308d6122d146101e85780630b0a93ba1461020a57806312be87271461026b578063167bd395146102a0575b600080fd5b3480156101f457600080fd5b50610208610203366004612179565b6106f8565b005b34801561021657600080fd5b5061024e6102253660046121df565b6001600160401b0390811660009081526001602081905260409091200154600160401b90041690565b6040516001600160401b0390911681526020015b60405180910390f35b34801561027757600080fd5b5061028b6102863660046121df565b61074b565b60405163ffffffff9091168152602001610262565b3480156102ac57600080fd5b506102086102bb3660046121fa565b610786565b3480156102cc57600080fd5b506102086102db366004612238565b61079c565b61028b6102ee3660046122a7565b610803565b3480156102ff57600080fd5b5061020861030e36600461230f565b610933565b34801561031f57600080fd5b5061033361032e366004612354565b610955565b604051610262949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561037957600080fd5b50610208610388366004612370565b6109ba565b34801561039957600080fd5b506103ad6103a83660046123a3565b6109cc565b60405165ffffffffffff9091168152602001610262565b3480156103d057600080fd5b5061024e6001600160401b0381565b3480156103eb57600080fd5b5061028b6103fa3660046123a3565b600090815260026020526040902054600160301b900463ffffffff1690565b34801561042557600080fd5b5062093a8061028b565b34801561043b57600080fd5b5061028b61044a3660046123bc565b6109ff565b34801561045b57600080fd5b5061020861046a366004612370565b610a2d565b34801561047b57600080fd5b5061024e61048a3660046121df565b6001600160401b03908116600090815260016020819052604090912001541690565b3480156104b857600080fd5b5061024e6104c73660046123ef565b610a3f565b3480156104d857600080fd5b5061024e600081565b3480156104ed57600080fd5b506102086104fc36600461241d565b610a7a565b34801561050d57600080fd5b5061020861051c3660046122a7565b610b11565b34801561052d57600080fd5b5061054161053c3660046123bc565b610bbd565b6040519015158152602001610262565b34801561055d57600080fd5b5061020861056c36600461243b565b610be5565b34801561057d57600080fd5b5061059161058c366004612465565b610bf7565b604051908152602001610262565b3480156105ab57600080fd5b506105bf6105ba3660046124c9565b610c30565b604051610262919061252e565b3480156105d857600080fd5b506105ec6105e73660046125a8565b610d17565b60408051921515835263ffffffff909116602083015201610262565b34801561061457600080fd5b50610208610623366004612354565b610d9e565b34801561063457600080fd5b506206978061028b565b34801561064a57600080fd5b506105ec610659366004612354565b610db5565b34801561066a57600080fd5b506102086106793660046125f3565b610e32565b34801561068a57600080fd5b5061028b610699366004612465565b610e44565b3480156106aa57600080fd5b506106be6106b9366004612611565b610f9e565b6040805192835263ffffffff909116602083015201610262565b3480156106e457600080fd5b506102086106f3366004612354565b6110e3565b61070061110c565b60005b828110156107445761073c8585858481811061072157610721612683565b90506020020160208101906107369190612699565b84611187565b600101610703565b5050505050565b6001600160401b03811660009081526001602081905260408220015461078090600160801b90046001600160701b0316611209565b92915050565b61078e61110c565b6107988282611228565b5050565b6107a461110c565b604051637a9e5e4b60e01b81526001600160a01b038281166004830152831690637a9e5e4b90602401600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050505050565b60003381806108148388888861129a565b915091508115801561082a575063ffffffff8116155b1561087d57828761083b88886112ed565b6040516381c6f24b60e01b81526001600160a01b0393841660048201529290911660248301526001600160e01b03191660448201526064015b60405180910390fd5b600061088b84898989610bf7565b9050600063ffffffff83161515806108b257506108a7826109cc565b65ffffffffffff1615155b156108c3576108c082611305565b90505b6003546108d98a6108d48b8b6112ed565b611405565b6003819055506109218a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250349250611447915050565b506003559450505050505b9392505050565b61093b61110c565b61094f83836109498661074b565b846114eb565b50505050565b6001600160401b03821660009081526001602090815260408083206001600160a01b03851684529091528120805465ffffffffffff8116929182918291906109ac90600160301b90046001600160701b0316611736565b969991985096509350505050565b6109c261110c565b6107988282611759565b60008181526002602052604081205465ffffffffffff166109ec816117fd565b6109f6578061092c565b60009392505050565b6001600160a01b038116600090815260208190526040812060010154610780906001600160701b0316611209565b610a3561110c565b610798828261182c565b6001600160a01b0382166000908152602081815260408083206001600160e01b0319851684529091529020546001600160401b031692915050565b610a8261110c565b6001600160401b0383161580610aa057506001600160401b03838116145b15610ac95760405163061c6a4360e21b81526001600160401b0384166004820152602401610874565b826001600160401b03167f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a4508383604051610b049291906126df565b60405180910390a2505050565b60408051638fb3603760e01b80825291513392918391638fb36037916004808201926020929091908290030181865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7691906126fb565b6001600160e01b03191614610ba957604051630641fee960e31b81526001600160a01b0382166004820152602401610874565b610744610bb885838686610bf7565b611305565b6001600160a01b0316600090815260208190526040902060010154600160701b900460ff1690565b610bed61110c565b61079882826118de565b600084848484604051602001610c109493929190612718565b604051602081830303815290604052805190602001209050949350505050565b604080516000815260208101909152606090826001600160401b03811115610c5a57610c5a612785565b604051908082528060200260200182016040528015610c8d57816020015b6060815260200190600190039081610c785790505b50915060005b83811015610d0f57610cea30868684818110610cb157610cb1612683565b9050602002810190610cc3919061279b565b85604051602001610cd6939291906127e1565b6040516020818303038152906040526119ef565b838281518110610cfc57610cfc612683565b6020908102919091010152600101610c93565b505092915050565b600080610d2384610bbd565b15610d3357506000905080610d96565b306001600160a01b03861603610d5857610d4d8484611a65565b600091509150610d96565b6000610d648585610a3f565b9050600080610d738389610db5565b9150915081610d8457600080610d8e565b63ffffffff811615815b945094505050505b935093915050565b610da661110c565b610db08282611a7c565b505050565b60008067fffffffffffffffe196001600160401b03851601610ddd5750600190506000610e2b565b600080610dea8686610955565b5050915091508165ffffffffffff16600014158015610e205750610e0c611b69565b65ffffffffffff168265ffffffffffff1611155b93509150610e2b9050565b9250929050565b610e3a61110c565b6107988282611b79565b60003381610e5285856112ed565b90506000610e6288888888610bf7565b60008181526002602052604081205491925065ffffffffffff9091169003610ea05760405163060a299b60e41b815260048101829052602401610874565b826001600160a01b0316886001600160a01b031614610f3c576000610ec6600085610db5565b5090506000610ee1610edb6102258b87610a3f565b86610db5565b50905081158015610ef0575080155b15610f3957604051630ff89d4760e21b81526001600160a01b038087166004830152808c1660248301528a1660448201526001600160e01b031985166064820152608401610874565b50505b600081815260026020526040808220805465ffffffffffff1916908190559051600160301b90910463ffffffff1691829184917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f791a398975050505050505050565b6000803381610faf8289898961129a565b91505060008163ffffffff16610fc3611b69565b610fcd9190612808565b905063ffffffff82161580611004575060008665ffffffffffff1611801561100457508065ffffffffffff168665ffffffffffff16105b1561101557828961083b8a8a6112ed565b61102f8665ffffffffffff168265ffffffffffff16611c36565b955061103d838a8a8a610bf7565b945061104885611c46565b60008581526002602052604090819020805465ffffffffffff891669ffffffffffffffffffff19821617600160301b9182900463ffffffff90811660010190811692830291909117909255915190955086907f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b4906110cf908a9088908f908f908f9061282e565b60405180910390a350505094509492505050565b6001600160a01b0381163314610da657604051635f159e6360e01b815260040160405180910390fd5b3360008061111b838236611c93565b9150915081610db0578063ffffffff1660000361117757600061113e8136611d5d565b5060405163f07e038f60e01b81526001600160a01b03871660048201526001600160401b03821660248201529092506044019050610874565b61094f610bb88430600036610bf7565b6001600160a01b0383166000818152602081815260408083206001600160e01b0319871680855290835292819020805467ffffffffffffffff19166001600160401b038716908117909155905192835292917f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde949151910160405180910390a3505050565b60008061121e836001600160701b0316611736565b5090949350505050565b6001600160a01b038216600081815260208190526040908190206001018054841515600160701b0260ff60701b19909116179055517f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb1389061128e90841515815260200190565b60405180910390a25050565b600080306001600160a01b038616036112c1576112b8868585611c93565b915091506112e4565b600483106112dd576112d886866105e787876112ed565b6112b8565b5060009050805b94509492505050565b60006112fc600482848661275b565b61092c91612874565b60008181526002602052604081205465ffffffffffff811690600160301b900463ffffffff1681830361134e5760405163060a299b60e41b815260048101859052602401610874565b611356611b69565b65ffffffffffff168265ffffffffffff16111561138957604051630c65b5bd60e11b815260048101859052602401610874565b611392826117fd565b156113b357604051631e2975b960e21b815260048101859052602401610874565b600084815260026020526040808220805465ffffffffffff191690555163ffffffff83169186917f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d9190a39392505050565b604080516001600160a01b03939093166020808501919091526001600160e01b0319929092168382015280518084038201815260609093019052815191012090565b6060814710156114735760405163cf47918160e01b815247600482015260248101839052604401610874565b600080856001600160a01b0316848660405161148f91906128a2565b60006040518083038185875af1925050503d80600081146114cc576040519150601f19603f3d011682016040523d82523d6000602084013e6114d1565b606091505b50915091506114e1868383611f4f565b9695505050505050565b600067fffffffffffffffe196001600160401b0386160161152a5760405163061c6a4360e21b81526001600160401b0386166004820152602401610874565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff161590811561161c578463ffffffff16611576611b69565b6115809190612808565b905060405180604001604052808265ffffffffffff1681526020016115ae8663ffffffff1663ffffffff1690565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c1684528252909120835181549490920151909216600160301b026001600160a01b031990931665ffffffffffff909116179190911790556116c8565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a16845290915281205461166691600160301b9091046001600160701b0316908690611fab565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316600160301b0273ffffffffffffffffffffffffffff000000000000199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b600080600061174c84611747611b69565b612055565b9250925092509193909250565b6001600160401b038216158061177757506001600160401b03828116145b156117a05760405163061c6a4360e21b81526001600160401b0383166004820152602401610874565b6001600160401b038281166000818152600160208190526040808320909101805467ffffffffffffffff19169486169485179055517f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63409190a35050565b6000611807611b69565b65ffffffffffff1661181c62093a8084612808565b65ffffffffffff16111592915050565b6001600160401b038216158061184a57506001600160401b03828116145b156118735760405163061c6a4360e21b81526001600160401b0383166004820152602401610874565b6001600160401b03828116600081815260016020819052604080832090910180546fffffffffffffffff00000000000000001916600160401b958716958602179055517f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae29190a35050565b67fffffffffffffffe196001600160401b0383160161191b5760405163061c6a4360e21b81526001600160401b0383166004820152602401610874565b6001600160401b03821660009081526001602081905260408220015461195590600160801b90046001600160701b03168362069780611fab565b6001600160401b0385166000818152600160208190526040918290200180546001600160701b03909516600160801b026dffffffffffffffffffffffffffff60801b199095169490941790935591519092507ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b4890610b04908590859063ffffffff92909216825265ffffffffffff16602082015260400190565b6060600080846001600160a01b031684604051611a0c91906128a2565b600060405180830381855af49150503d8060008114611a47576040519150601f19603f3d011682016040523d82523d6000602084013e611a4c565b606091505b5091509150611a5c858383611f4f565b95945050505050565b6000611a718383611405565b600354149392505050565b600067fffffffffffffffe196001600160401b03841601611abb5760405163061c6a4360e21b81526001600160401b0384166004820152602401610874565b6001600160401b03831660009081526001602090815260408083206001600160a01b038616845290915281205465ffffffffffff169003611afe57506000610780565b6001600160401b03831660008181526001602090815260408083206001600160a01b038716808552925280832080546001600160a01b0319169055519092917ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16691a350600192915050565b6000611b74426120a2565b905090565b6001600160a01b038216600090815260208190526040812060010154611bac906001600160701b03168362069780611fab565b6001600160a01b0385166000818152602081815260409182902060010180546dffffffffffffffffffffffffffff19166001600160701b039690961695909517909455805163ffffffff8716815265ffffffffffff841694810194909452919350917fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c9101610b04565b600082821882841102821861092c565b60008181526002602052604090205465ffffffffffff168015801590611c725750611c70816117fd565b155b156107985760405163813e945960e01b815260048101839052602401610874565b6000806004831015611caa57506000905080610d96565b306001600160a01b03861603611ccd57610d4d30611cc886866112ed565b611a65565b6000806000611cdc8787611d5d565b92509250925082158015611cf45750611cf430610bbd565b15611d085760008094509450505050610d96565b600080611d15848b610db5565b9150915081611d2f57600080965096505050505050610d96565b611d458363ffffffff168263ffffffff16611c36565b63ffffffff8116159b909a5098505050505050505050565b600080806004841015611d7857506000915081905080611f48565b6000611d8486866112ed565b90506001600160e01b031981166310a6aa3760e31b1480611db557506001600160e01b031981166330cae18760e01b145b80611dd057506001600160e01b0319811663294b14a960e11b145b80611deb57506001600160e01b03198116635326cae760e11b145b80611e0657506001600160e01b0319811663d22b598960e01b145b15611e1c57600160008093509350935050611f48565b6001600160e01b0319811663063fc60f60e21b1480611e4b57506001600160e01b0319811663167bd39560e01b145b80611e6657506001600160e01b031981166308d6122d60e01b145b15611ea8576000611e7b60246004888a61275b565b810190611e8891906123bc565b90506000611e95826109ff565b60019650600095509350611f4892505050565b6001600160e01b0319811663012e238d60e51b1480611ed757506001600160e01b03198116635be958b160e11b145b15611f32576000611eec60246004888a61275b565b810190611ef991906121df565b90506001611f23826001600160401b03908116600090815260016020819052604090912001541690565b60009450945094505050611f48565b6000611f3e3083610a3f565b6000935093509350505b9250925092565b606082611f6457611f5f826120d9565b61092c565b8151158015611f7b57506001600160a01b0384163b155b15611fa457604051639996b31560e01b81526001600160a01b0385166004820152602401610874565b508061092c565b6000806000611fc2866001600160701b0316611209565b90506000611fff8563ffffffff168763ffffffff168463ffffffff1611611fea576000611ff4565b611ff488856128be565b63ffffffff16611c36565b90508063ffffffff16612010611b69565b61201a9190612808565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b69ffffffffffffffffffff602083901c166001600160701b03831665ffffffffffff604085901c811690841681111561209057828282612095565b816000805b9250925092509250925092565b600065ffffffffffff8211156120d5576040516306dfcc6560e41b81526030600482015260248101839052604401610874565b5090565b8051156120e857805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b50565b6001600160a01b038116811461210157600080fd5b60008083601f84011261212b57600080fd5b5081356001600160401b0381111561214257600080fd5b6020830191508360208260051b8501011115610e2b57600080fd5b80356001600160401b038116811461217457600080fd5b919050565b6000806000806060858703121561218f57600080fd5b843561219a81612104565b935060208501356001600160401b038111156121b557600080fd5b6121c187828801612119565b90945092506121d490506040860161215d565b905092959194509250565b6000602082840312156121f157600080fd5b61092c8261215d565b6000806040838503121561220d57600080fd5b823561221881612104565b91506020830135801515811461222d57600080fd5b809150509250929050565b6000806040838503121561224b57600080fd5b823561225681612104565b9150602083013561222d81612104565b60008083601f84011261227857600080fd5b5081356001600160401b0381111561228f57600080fd5b602083019150836020828501011115610e2b57600080fd5b6000806000604084860312156122bc57600080fd5b83356122c781612104565b925060208401356001600160401b038111156122e257600080fd5b6122ee86828701612266565b9497909650939450505050565b803563ffffffff8116811461217457600080fd5b60008060006060848603121561232457600080fd5b61232d8461215d565b9250602084013561233d81612104565b915061234b604085016122fb565b90509250925092565b6000806040838503121561236757600080fd5b6122568361215d565b6000806040838503121561238357600080fd5b61238c8361215d565b915061239a6020840161215d565b90509250929050565b6000602082840312156123b557600080fd5b5035919050565b6000602082840312156123ce57600080fd5b813561092c81612104565b6001600160e01b03198116811461210157600080fd5b6000806040838503121561240257600080fd5b823561240d81612104565b9150602083013561222d816123d9565b60008060006040848603121561243257600080fd5b6122c78461215d565b6000806040838503121561244e57600080fd5b6124578361215d565b915061239a602084016122fb565b6000806000806060858703121561247b57600080fd5b843561248681612104565b9350602085013561249681612104565b925060408501356001600160401b038111156124b157600080fd5b6124bd87828801612266565b95989497509550505050565b600080602083850312156124dc57600080fd5b82356001600160401b038111156124f257600080fd5b6124fe85828601612119565b90969095509350505050565b60005b8381101561252557818101518382015260200161250d565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561259b57878503603f190184528151805180875261257c818989018a850161250a565b601f01601f191695909501860194509285019290850190600101612555565b5092979650505050505050565b6000806000606084860312156125bd57600080fd5b83356125c881612104565b925060208401356125d881612104565b915060408401356125e8816123d9565b809150509250925092565b6000806040838503121561260657600080fd5b823561245781612104565b6000806000806060858703121561262757600080fd5b843561263281612104565b935060208501356001600160401b0381111561264d57600080fd5b61265987828801612266565b909450925050604085013565ffffffffffff8116811461267857600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156126ab57600080fd5b813561092c816123d9565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006126f36020830184866126b6565b949350505050565b60006020828403121561270d57600080fd5b815161092c816123d9565b6001600160a01b038581168252841660208201526060604082018190526000906114e190830184866126b6565b634e487b7160e01b600052601160045260246000fd5b6000808585111561276b57600080fd5b8386111561277857600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000808335601e198436030181126127b257600080fd5b8301803591506001600160401b038211156127cc57600080fd5b602001915036819003821315610e2b57600080fd5b8284823760008382016000815283516127fe81836020880161250a565b0195945050505050565b65ffffffffffff81811683821601908082111561282757612827612745565b5092915050565b65ffffffffffff861681526001600160a01b0385811660208301528416604082015260806060820181905260009061286990830184866126b6565b979650505050505050565b6001600160e01b03198135818116916004851015610d0f5760049490940360031b84901b1690921692915050565b600082516128b481846020870161250a565b9190910192915050565b63ffffffff8281168282160390808211156128275761282761274556fea264697066735822122081cb68b0a785c9112ecafc7557a7cf47ffc208a84b3c60b008005f9f66eac44964736f6c63430008180033";
1190
+ "0x608060405234801561001057600080fd5b50604051612df6380380612df683398101604081905261002f91610454565b6001600160a01b03811661005e57604051630409d6d160e11b8152600060048201526024015b60405180910390fd5b61006b6000828180610072565b50506104d6565b60006002600160401b03196001600160401b038616016100b05760405163061c6a4360e21b81526001600160401b0386166004820152602401610055565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff16159081156101a75763ffffffff85166100fc6102bd565b6101069190610493565b905060405180604001604052808265ffffffffffff1681526020016101368663ffffffff166102cd60201b60201c565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c16845282529091208351815494909201519092166601000000000000026001600160a01b031990931665ffffffffffff9091161791909117905561024f565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a1684529091528120546101f49166010000000000009091046001600160701b03169086906102d6565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316660100000000000002600160301b600160a01b03199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b60006102c84261037f565b905090565b63ffffffff1690565b600080806102ec6001600160701b0387166103b6565b905060006103298563ffffffff168763ffffffff168463ffffffff161161031457600061031e565b61031e88856104b9565b63ffffffff166103d5565b905063ffffffff811661033a6102bd565b6103449190610493565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b600065ffffffffffff8211156103b2576040516306dfcc6560e41b81526030600482015260248101839052604401610055565b5090565b6000806103cb6001600160701b0384166103e8565b5090949350505050565b60008282188284110282185b9392505050565b600080806103fd846103f86102bd565b61040a565b9250925092509193909250565b6001600160501b03602083901c166001600160701b03831665ffffffffffff604085901c811690841681111561044257828282610447565b816000805b9250925092509250925092565b60006020828403121561046657600080fd5b81516001600160a01b03811681146103e157600080fd5b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff8181168382160190808211156104b2576104b261047d565b5092915050565b63ffffffff8281168282160390808211156104b2576104b261047d565b612911806104e56000396000f3fe6080604052600436106101e35760003560e01c80636d5115bd11610102578063b700961311610095578063d22b598911610064578063d22b59891461065e578063d6bb62c61461067e578063f801a6981461069e578063fe0776f5146106d857600080fd5b8063b7009613146105cc578063b7d2b16214610608578063cc1b6c8114610628578063d1f856ee1461063e57600080fd5b8063a166aa89116100d1578063a166aa8914610521578063a64d95ce14610551578063abd9bd2a14610571578063ac9650d81461059f57600080fd5b80636d5115bd146104ac57806375b238fc146104cc578063853551b8146104e157806394c7d7ee1461050157600080fd5b806330cae1871161017a5780634665096d116101495780634665096d146104195780634c1da1e21461042f578063529629521461044f578063530dd4561461046f57600080fd5b806330cae1871461036d5780633adc277a1461038d5780633ca7c02a146103c45780634136a33c146103df57600080fd5b806318ff183c116101b657806318ff183c146102c05780631cff79cd146102e057806325c471a0146102f35780633078f1141461031357600080fd5b806308d6122d146101e85780630b0a93ba1461020a57806312be87271461026b578063167bd395146102a0575b600080fd5b3480156101f457600080fd5b50610208610203366004612179565b6106f8565b005b34801561021657600080fd5b5061024e6102253660046121df565b6001600160401b0390811660009081526001602081905260409091200154600160401b90041690565b6040516001600160401b0390911681526020015b60405180910390f35b34801561027757600080fd5b5061028b6102863660046121df565b61074b565b60405163ffffffff9091168152602001610262565b3480156102ac57600080fd5b506102086102bb3660046121fa565b610786565b3480156102cc57600080fd5b506102086102db366004612238565b61079c565b61028b6102ee3660046122a7565b610803565b3480156102ff57600080fd5b5061020861030e36600461230f565b610933565b34801561031f57600080fd5b5061033361032e366004612354565b610955565b604051610262949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561037957600080fd5b50610208610388366004612370565b6109ba565b34801561039957600080fd5b506103ad6103a83660046123a3565b6109cc565b60405165ffffffffffff9091168152602001610262565b3480156103d057600080fd5b5061024e6001600160401b0381565b3480156103eb57600080fd5b5061028b6103fa3660046123a3565b600090815260026020526040902054600160301b900463ffffffff1690565b34801561042557600080fd5b5062093a8061028b565b34801561043b57600080fd5b5061028b61044a3660046123bc565b6109ff565b34801561045b57600080fd5b5061020861046a366004612370565b610a2d565b34801561047b57600080fd5b5061024e61048a3660046121df565b6001600160401b03908116600090815260016020819052604090912001541690565b3480156104b857600080fd5b5061024e6104c73660046123ef565b610a3f565b3480156104d857600080fd5b5061024e600081565b3480156104ed57600080fd5b506102086104fc36600461241d565b610a7a565b34801561050d57600080fd5b5061020861051c3660046122a7565b610b11565b34801561052d57600080fd5b5061054161053c3660046123bc565b610bbd565b6040519015158152602001610262565b34801561055d57600080fd5b5061020861056c36600461243b565b610be5565b34801561057d57600080fd5b5061059161058c366004612465565b610bf7565b604051908152602001610262565b3480156105ab57600080fd5b506105bf6105ba3660046124c9565b610c30565b604051610262919061252e565b3480156105d857600080fd5b506105ec6105e73660046125a8565b610d17565b60408051921515835263ffffffff909116602083015201610262565b34801561061457600080fd5b50610208610623366004612354565b610d9e565b34801561063457600080fd5b506206978061028b565b34801561064a57600080fd5b506105ec610659366004612354565b610db5565b34801561066a57600080fd5b506102086106793660046125f3565b610e32565b34801561068a57600080fd5b5061028b610699366004612465565b610e44565b3480156106aa57600080fd5b506106be6106b9366004612611565b610f9e565b6040805192835263ffffffff909116602083015201610262565b3480156106e457600080fd5b506102086106f3366004612354565b6110e3565b61070061110c565b60005b828110156107445761073c8585858481811061072157610721612683565b90506020020160208101906107369190612699565b84611187565b600101610703565b5050505050565b6001600160401b03811660009081526001602081905260408220015461078090600160801b90046001600160701b0316611209565b92915050565b61078e61110c565b6107988282611228565b5050565b6107a461110c565b604051637a9e5e4b60e01b81526001600160a01b038281166004830152831690637a9e5e4b90602401600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b505050505050565b60003381806108148388888861129a565b915091508115801561082a575063ffffffff8116155b1561087d57828761083b88886112ed565b6040516381c6f24b60e01b81526001600160a01b0393841660048201529290911660248301526001600160e01b03191660448201526064015b60405180910390fd5b600061088b84898989610bf7565b9050600063ffffffff83161515806108b257506108a7826109cc565b65ffffffffffff1615155b156108c3576108c082611305565b90505b6003546108d98a6108d48b8b6112ed565b611405565b6003819055506109218a8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250349250611447915050565b506003559450505050505b9392505050565b61093b61110c565b61094f83836109498661074b565b846114eb565b50505050565b6001600160401b03821660009081526001602090815260408083206001600160a01b03851684529091528120805465ffffffffffff8116929182918291906109ac90600160301b90046001600160701b0316611736565b969991985096509350505050565b6109c261110c565b6107988282611759565b60008181526002602052604081205465ffffffffffff166109ec816117fd565b6109f6578061092c565b60009392505050565b6001600160a01b038116600090815260208190526040812060010154610780906001600160701b0316611209565b610a3561110c565b610798828261182c565b6001600160a01b0382166000908152602081815260408083206001600160e01b0319851684529091529020546001600160401b031692915050565b610a8261110c565b6001600160401b0383161580610aa057506001600160401b03838116145b15610ac95760405163061c6a4360e21b81526001600160401b0384166004820152602401610874565b826001600160401b03167f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a4508383604051610b049291906126df565b60405180910390a2505050565b60408051638fb3603760e01b80825291513392918391638fb36037916004808201926020929091908290030181865afa158015610b52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7691906126fb565b6001600160e01b03191614610ba957604051630641fee960e31b81526001600160a01b0382166004820152602401610874565b610744610bb885838686610bf7565b611305565b6001600160a01b0316600090815260208190526040902060010154600160701b900460ff1690565b610bed61110c565b61079882826118de565b600084848484604051602001610c109493929190612718565b604051602081830303815290604052805190602001209050949350505050565b604080516000815260208101909152606090826001600160401b03811115610c5a57610c5a612785565b604051908082528060200260200182016040528015610c8d57816020015b6060815260200190600190039081610c785790505b50915060005b83811015610d0f57610cea30868684818110610cb157610cb1612683565b9050602002810190610cc3919061279b565b85604051602001610cd6939291906127e1565b6040516020818303038152906040526119ef565b838281518110610cfc57610cfc612683565b6020908102919091010152600101610c93565b505092915050565b600080610d2384610bbd565b15610d3357506000905080610d96565b306001600160a01b03861603610d5857610d4d8484611a65565b600091509150610d96565b6000610d648585610a3f565b9050600080610d738389610db5565b9150915081610d8457600080610d8e565b63ffffffff811615815b945094505050505b935093915050565b610da661110c565b610db08282611a7c565b505050565b60008067fffffffffffffffe196001600160401b03851601610ddd5750600190506000610e2b565b600080610dea8686610955565b5050915091508165ffffffffffff16600014158015610e205750610e0c611b69565b65ffffffffffff168265ffffffffffff1611155b93509150610e2b9050565b9250929050565b610e3a61110c565b6107988282611b79565b60003381610e5285856112ed565b90506000610e6288888888610bf7565b60008181526002602052604081205491925065ffffffffffff9091169003610ea05760405163060a299b60e41b815260048101829052602401610874565b826001600160a01b0316886001600160a01b031614610f3c576000610ec6600085610db5565b5090506000610ee1610edb6102258b87610a3f565b86610db5565b50905081158015610ef0575080155b15610f3957604051630ff89d4760e21b81526001600160a01b038087166004830152808c1660248301528a1660448201526001600160e01b031985166064820152608401610874565b50505b600081815260026020526040808220805465ffffffffffff1916908190559051600160301b90910463ffffffff1691829184917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f791a398975050505050505050565b6000803381610faf8289898961129a565b91505060008163ffffffff16610fc3611b69565b610fcd9190612808565b905063ffffffff82161580611004575060008665ffffffffffff1611801561100457508065ffffffffffff168665ffffffffffff16105b1561101557828961083b8a8a6112ed565b61102f8665ffffffffffff168265ffffffffffff16611c36565b955061103d838a8a8a610bf7565b945061104885611c46565b60008581526002602052604090819020805465ffffffffffff891669ffffffffffffffffffff19821617600160301b9182900463ffffffff90811660010190811692830291909117909255915190955086907f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b4906110cf908a9088908f908f908f9061282e565b60405180910390a350505094509492505050565b6001600160a01b0381163314610da657604051635f159e6360e01b815260040160405180910390fd5b3360008061111b838236611c93565b9150915081610db0578063ffffffff1660000361117757600061113e8136611d5d565b5060405163f07e038f60e01b81526001600160a01b03871660048201526001600160401b03821660248201529092506044019050610874565b61094f610bb88430600036610bf7565b6001600160a01b0383166000818152602081815260408083206001600160e01b0319871680855290835292819020805467ffffffffffffffff19166001600160401b038716908117909155905192835292917f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde949151910160405180910390a3505050565b60008061121e836001600160701b0316611736565b5090949350505050565b6001600160a01b038216600081815260208190526040908190206001018054841515600160701b0260ff60701b19909116179055517f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb1389061128e90841515815260200190565b60405180910390a25050565b600080306001600160a01b038616036112c1576112b8868585611c93565b915091506112e4565b600483106112dd576112d886866105e787876112ed565b6112b8565b5060009050805b94509492505050565b60006112fc600482848661275b565b61092c91612874565b60008181526002602052604081205465ffffffffffff811690600160301b900463ffffffff1681830361134e5760405163060a299b60e41b815260048101859052602401610874565b611356611b69565b65ffffffffffff168265ffffffffffff16111561138957604051630c65b5bd60e11b815260048101859052602401610874565b611392826117fd565b156113b357604051631e2975b960e21b815260048101859052602401610874565b600084815260026020526040808220805465ffffffffffff191690555163ffffffff83169186917f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d9190a39392505050565b604080516001600160a01b03939093166020808501919091526001600160e01b0319929092168382015280518084038201815260609093019052815191012090565b6060814710156114735760405163cf47918160e01b815247600482015260248101839052604401610874565b600080856001600160a01b0316848660405161148f91906128a2565b60006040518083038185875af1925050503d80600081146114cc576040519150601f19603f3d011682016040523d82523d6000602084013e6114d1565b606091505b50915091506114e1868383611f4f565b9695505050505050565b600067fffffffffffffffe196001600160401b0386160161152a5760405163061c6a4360e21b81526001600160401b0386166004820152602401610874565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff161590811561161c578463ffffffff16611576611b69565b6115809190612808565b905060405180604001604052808265ffffffffffff1681526020016115ae8663ffffffff1663ffffffff1690565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c1684528252909120835181549490920151909216600160301b026001600160a01b031990931665ffffffffffff909116179190911790556116c8565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a16845290915281205461166691600160301b9091046001600160701b0316908690611fab565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316600160301b0273ffffffffffffffffffffffffffff000000000000199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b600080600061174c84611747611b69565b612055565b9250925092509193909250565b6001600160401b038216158061177757506001600160401b03828116145b156117a05760405163061c6a4360e21b81526001600160401b0383166004820152602401610874565b6001600160401b038281166000818152600160208190526040808320909101805467ffffffffffffffff19169486169485179055517f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63409190a35050565b6000611807611b69565b65ffffffffffff1661181c62093a8084612808565b65ffffffffffff16111592915050565b6001600160401b038216158061184a57506001600160401b03828116145b156118735760405163061c6a4360e21b81526001600160401b0383166004820152602401610874565b6001600160401b03828116600081815260016020819052604080832090910180546fffffffffffffffff00000000000000001916600160401b958716958602179055517f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae29190a35050565b67fffffffffffffffe196001600160401b0383160161191b5760405163061c6a4360e21b81526001600160401b0383166004820152602401610874565b6001600160401b03821660009081526001602081905260408220015461195590600160801b90046001600160701b03168362069780611fab565b6001600160401b0385166000818152600160208190526040918290200180546001600160701b03909516600160801b026dffffffffffffffffffffffffffff60801b199095169490941790935591519092507ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b4890610b04908590859063ffffffff92909216825265ffffffffffff16602082015260400190565b6060600080846001600160a01b031684604051611a0c91906128a2565b600060405180830381855af49150503d8060008114611a47576040519150601f19603f3d011682016040523d82523d6000602084013e611a4c565b606091505b5091509150611a5c858383611f4f565b95945050505050565b6000611a718383611405565b600354149392505050565b600067fffffffffffffffe196001600160401b03841601611abb5760405163061c6a4360e21b81526001600160401b0384166004820152602401610874565b6001600160401b03831660009081526001602090815260408083206001600160a01b038616845290915281205465ffffffffffff169003611afe57506000610780565b6001600160401b03831660008181526001602090815260408083206001600160a01b038716808552925280832080546001600160a01b0319169055519092917ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16691a350600192915050565b6000611b74426120a2565b905090565b6001600160a01b038216600090815260208190526040812060010154611bac906001600160701b03168362069780611fab565b6001600160a01b0385166000818152602081815260409182902060010180546dffffffffffffffffffffffffffff19166001600160701b039690961695909517909455805163ffffffff8716815265ffffffffffff841694810194909452919350917fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c9101610b04565b600082821882841102821861092c565b60008181526002602052604090205465ffffffffffff168015801590611c725750611c70816117fd565b155b156107985760405163813e945960e01b815260048101839052602401610874565b6000806004831015611caa57506000905080610d96565b306001600160a01b03861603611ccd57610d4d30611cc886866112ed565b611a65565b6000806000611cdc8787611d5d565b92509250925082158015611cf45750611cf430610bbd565b15611d085760008094509450505050610d96565b600080611d15848b610db5565b9150915081611d2f57600080965096505050505050610d96565b611d458363ffffffff168263ffffffff16611c36565b63ffffffff8116159b909a5098505050505050505050565b600080806004841015611d7857506000915081905080611f48565b6000611d8486866112ed565b90506001600160e01b031981166310a6aa3760e31b1480611db557506001600160e01b031981166330cae18760e01b145b80611dd057506001600160e01b0319811663294b14a960e11b145b80611deb57506001600160e01b03198116635326cae760e11b145b80611e0657506001600160e01b0319811663d22b598960e01b145b15611e1c57600160008093509350935050611f48565b6001600160e01b0319811663063fc60f60e21b1480611e4b57506001600160e01b0319811663167bd39560e01b145b80611e6657506001600160e01b031981166308d6122d60e01b145b15611ea8576000611e7b60246004888a61275b565b810190611e8891906123bc565b90506000611e95826109ff565b60019650600095509350611f4892505050565b6001600160e01b0319811663012e238d60e51b1480611ed757506001600160e01b03198116635be958b160e11b145b15611f32576000611eec60246004888a61275b565b810190611ef991906121df565b90506001611f23826001600160401b03908116600090815260016020819052604090912001541690565b60009450945094505050611f48565b6000611f3e3083610a3f565b6000935093509350505b9250925092565b606082611f6457611f5f826120d9565b61092c565b8151158015611f7b57506001600160a01b0384163b155b15611fa457604051639996b31560e01b81526001600160a01b0385166004820152602401610874565b508061092c565b6000806000611fc2866001600160701b0316611209565b90506000611fff8563ffffffff168763ffffffff168463ffffffff1611611fea576000611ff4565b611ff488856128be565b63ffffffff16611c36565b90508063ffffffff16612010611b69565b61201a9190612808565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b69ffffffffffffffffffff602083901c166001600160701b03831665ffffffffffff604085901c811690841681111561209057828282612095565b816000805b9250925092509250925092565b600065ffffffffffff8211156120d5576040516306dfcc6560e41b81526030600482015260248101839052604401610874565b5090565b8051156120e857805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b50565b6001600160a01b038116811461210157600080fd5b60008083601f84011261212b57600080fd5b5081356001600160401b0381111561214257600080fd5b6020830191508360208260051b8501011115610e2b57600080fd5b80356001600160401b038116811461217457600080fd5b919050565b6000806000806060858703121561218f57600080fd5b843561219a81612104565b935060208501356001600160401b038111156121b557600080fd5b6121c187828801612119565b90945092506121d490506040860161215d565b905092959194509250565b6000602082840312156121f157600080fd5b61092c8261215d565b6000806040838503121561220d57600080fd5b823561221881612104565b91506020830135801515811461222d57600080fd5b809150509250929050565b6000806040838503121561224b57600080fd5b823561225681612104565b9150602083013561222d81612104565b60008083601f84011261227857600080fd5b5081356001600160401b0381111561228f57600080fd5b602083019150836020828501011115610e2b57600080fd5b6000806000604084860312156122bc57600080fd5b83356122c781612104565b925060208401356001600160401b038111156122e257600080fd5b6122ee86828701612266565b9497909650939450505050565b803563ffffffff8116811461217457600080fd5b60008060006060848603121561232457600080fd5b61232d8461215d565b9250602084013561233d81612104565b915061234b604085016122fb565b90509250925092565b6000806040838503121561236757600080fd5b6122568361215d565b6000806040838503121561238357600080fd5b61238c8361215d565b915061239a6020840161215d565b90509250929050565b6000602082840312156123b557600080fd5b5035919050565b6000602082840312156123ce57600080fd5b813561092c81612104565b6001600160e01b03198116811461210157600080fd5b6000806040838503121561240257600080fd5b823561240d81612104565b9150602083013561222d816123d9565b60008060006040848603121561243257600080fd5b6122c78461215d565b6000806040838503121561244e57600080fd5b6124578361215d565b915061239a602084016122fb565b6000806000806060858703121561247b57600080fd5b843561248681612104565b9350602085013561249681612104565b925060408501356001600160401b038111156124b157600080fd5b6124bd87828801612266565b95989497509550505050565b600080602083850312156124dc57600080fd5b82356001600160401b038111156124f257600080fd5b6124fe85828601612119565b90969095509350505050565b60005b8381101561252557818101518382015260200161250d565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561259b57878503603f190184528151805180875261257c818989018a850161250a565b601f01601f191695909501860194509285019290850190600101612555565b5092979650505050505050565b6000806000606084860312156125bd57600080fd5b83356125c881612104565b925060208401356125d881612104565b915060408401356125e8816123d9565b809150509250925092565b6000806040838503121561260657600080fd5b823561245781612104565b6000806000806060858703121561262757600080fd5b843561263281612104565b935060208501356001600160401b0381111561264d57600080fd5b61265987828801612266565b909450925050604085013565ffffffffffff8116811461267857600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156126ab57600080fd5b813561092c816123d9565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006126f36020830184866126b6565b949350505050565b60006020828403121561270d57600080fd5b815161092c816123d9565b6001600160a01b038581168252841660208201526060604082018190526000906114e190830184866126b6565b634e487b7160e01b600052601160045260246000fd5b6000808585111561276b57600080fd5b8386111561277857600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000808335601e198436030181126127b257600080fd5b8301803591506001600160401b038211156127cc57600080fd5b602001915036819003821315610e2b57600080fd5b8284823760008382016000815283516127fe81836020880161250a565b0195945050505050565b65ffffffffffff81811683821601908082111561282757612827612745565b5092915050565b65ffffffffffff861681526001600160a01b0385811660208301528416604082015260806060820181905260009061286990830184866126b6565b979650505050505050565b6001600160e01b03198135818116916004851015610d0f5760049490940360031b84901b1690921692915050565b600082516128b481846020870161250a565b9190910192915050565b63ffffffff8281168282160390808211156128275761282761274556fea26469706673582212205b659f61b0a9a4ff31053b8013f6881a9fde29498f163db8a03775be9dfe764b64736f6c63430008190033";
1191
1191
 
1192
1192
  type AccessManagerConstructorParams =
1193
1193
  | [signer?: Signer]
@@ -56,7 +56,7 @@ const _abi = [
56
56
  ] as const;
57
57
 
58
58
  const _bytecode =
59
- "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d2a6bdccb6f196117f0ca6393072a9f17eb2b9de472d888fbc971e776419d2ef64736f6c63430008180033";
59
+ "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220263d48dc17f402ea6661b37ed10a7e8c0acee6402254a9974e23338e96fc73a464736f6c63430008190033";
60
60
 
61
61
  type ERC1967UtilsConstructorParams =
62
62
  | [signer?: Signer]
@@ -29,7 +29,7 @@ const _abi = [
29
29
  ] as const;
30
30
 
31
31
  const _bytecode =
32
- "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ee673379a9b4a33493948b7f239009d890ebfc56ee29390ee06e2c3aaf264f2364736f6c63430008180033";
32
+ "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220672c08d946f9cc4527caea7fc8972f43e8b6ab59a8b07ca51ecc459976abe02664736f6c63430008190033";
33
33
 
34
34
  type AddressConstructorParams =
35
35
  | [signer?: Signer]
@@ -55,7 +55,7 @@ const _abi = [
55
55
  ] as const;
56
56
 
57
57
  const _bytecode =
58
- "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a301f897db42f346f704d1473cd55f06c880eb52c111a6ff9e3e25f12878c52364736f6c63430008180033";
58
+ "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209cbecec411902b384d1b531af38ff3a4bcfe81faa9577b45cbf7165e29cbdf5b64736f6c63430008190033";
59
59
 
60
60
  type ErrorsConstructorParams =
61
61
  | [signer?: Signer]
@@ -72,7 +72,7 @@ const _abi = [
72
72
  ] as const;
73
73
 
74
74
  const _bytecode =
75
- "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f972950fe74efd68979b848ff5d9434c378c6e6984c353ece9652d6a5bf9a2b64736f6c63430008180033";
75
+ "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c93f45ef7d250e1194c497e17130b4bf4d37284dd1ff024886173aebfbb5c9c464736f6c63430008190033";
76
76
 
77
77
  type SafeCastConstructorParams =
78
78
  | [signer?: Signer]
@@ -1249,7 +1249,7 @@ const _abi = [
1249
1249
  ] as const;
1250
1250
 
1251
1251
  const _bytecode =
1252
- "0x60806040523480156200001157600080fd5b50604051620032f5380380620032f5833981016040819052620000349162000529565b806001600160a01b0381166200006557604051630409d6d160e11b8152600060048201526024015b60405180910390fd5b620000746000828180620000b3565b5050600080526004602052620000ab7f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec826200030a565b5050620005ba565b60006002600160401b03196001600160401b03861601620000f35760405163061c6a4360e21b81526001600160401b03861660048201526024016200005c565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff1615908115620001f25763ffffffff8516620001426200032a565b6200014e919062000571565b905060405180604001604052808265ffffffffffff168152602001620001808663ffffffff166200033c60201b60201c565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c16845282529091208351815494909201519092166601000000000000026001600160a01b031990931665ffffffffffff909116179190911790556200029c565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a168452909152812054620002419166010000000000009091046001600160701b031690869062000345565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316660100000000000002600160301b600160a01b03199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b600062000321836001600160a01b038416620003fa565b90505b92915050565b600062000337426200044c565b905090565b63ffffffff1690565b600080806200035d6001600160701b03871662000485565b90506000620003a08563ffffffff168763ffffffff168463ffffffff16116200038857600062000394565b6200039488856200059a565b63ffffffff16620004a6565b905063ffffffff8116620003b36200032a565b620003bf919062000571565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b6000818152600183016020526040812054620004435750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000324565b50600062000324565b600065ffffffffffff82111562000481576040516306dfcc6560e41b815260306004820152602481018390526044016200005c565b5090565b6000806200049c6001600160701b038416620004b7565b5090949350505050565b600082821882841102821862000321565b60008080620004d084620004ca6200032a565b620004dd565b9250925092509193909250565b6001600160501b03602083901c166001600160701b03831665ffffffffffff604085901c811690841681111562000517578282826200051c565b816000805b9250925092509250925092565b6000602082840312156200053c57600080fd5b81516001600160a01b03811681146200055457600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff8181168382160190808211156200059357620005936200055b565b5092915050565b63ffffffff8281168282160390808211156200059357620005936200055b565b612d2b80620005ca6000396000f3fe6080604052600436106102045760003560e01c806375b238fc11610118578063b7d2b162116100a0578063d6bb62c61161006f578063d6bb62c6146106cc578063d78a83b1146106ec578063f801a69814610724578063fc8610d11461075e578063fe0776f51461077e57600080fd5b8063b7d2b16214610656578063cc1b6c8114610676578063d1f856ee1461068c578063d22b5989146106ac57600080fd5b8063a5808e2f116100e7578063a5808e2f14610572578063a64d95ce1461059f578063abd9bd2a146105bf578063ac9650d8146105ed578063b70096131461061a57600080fd5b806375b238fc146104ed578063853551b81461050257806394c7d7ee14610522578063a166aa891461054257600080fd5b806330cae1871161019b5780634665096d1161016a5780634665096d1461043a5780634c1da1e2146104505780635296295214610470578063530dd456146104905780636d5115bd146104cd57600080fd5b806330cae1871461038e5780633adc277a146103ae5780633ca7c02a146103e55780634136a33c1461040057600080fd5b806318ff183c116101d757806318ff183c146102e15780631cff79cd1461030157806325c471a0146103145780633078f1141461033457600080fd5b806308d6122d146102095780630b0a93ba1461022b57806312be87271461028c578063167bd395146102c1575b600080fd5b34801561021557600080fd5b506102296102243660046124fa565b61079e565b005b34801561023757600080fd5b5061026f610246366004612560565b6001600160401b0390811660009081526001602081905260409091200154600160401b90041690565b6040516001600160401b0390911681526020015b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004612560565b6107f1565b60405163ffffffff9091168152602001610283565b3480156102cd57600080fd5b506102296102dc36600461257b565b61082c565b3480156102ed57600080fd5b506102296102fc3660046125b9565b610842565b6102ac61030f366004612628565b6108a9565b34801561032057600080fd5b5061022961032f366004612690565b6109d9565b34801561034057600080fd5b5061035461034f3660046126d5565b610a27565b604051610283949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561039a57600080fd5b506102296103a93660046126f1565b610a8c565b3480156103ba57600080fd5b506103ce6103c9366004612724565b610a9e565b60405165ffffffffffff9091168152602001610283565b3480156103f157600080fd5b5061026f6001600160401b0381565b34801561040c57600080fd5b506102ac61041b366004612724565b600090815260026020526040902054600160301b900463ffffffff1690565b34801561044657600080fd5b5062093a806102ac565b34801561045c57600080fd5b506102ac61046b36600461273d565b610ad1565b34801561047c57600080fd5b5061022961048b3660046126f1565b610aff565b34801561049c57600080fd5b5061026f6104ab366004612560565b6001600160401b03908116600090815260016020819052604090912001541690565b3480156104d957600080fd5b5061026f6104e8366004612770565b610b11565b3480156104f957600080fd5b5061026f600081565b34801561050e57600080fd5b5061022961051d36600461279e565b610b4c565b34801561052e57600080fd5b5061022961053d366004612628565b610be3565b34801561054e57600080fd5b5061056261055d36600461273d565b610c8f565b6040519015158152602001610283565b34801561057e57600080fd5b5061059261058d366004612560565b610cb7565b60405161028391906127bc565b3480156105ab57600080fd5b506102296105ba366004612809565b610cdb565b3480156105cb57600080fd5b506105df6105da366004612833565b610ced565b604051908152602001610283565b3480156105f957600080fd5b5061060d610608366004612897565b610d26565b60405161028391906128fc565b34801561062657600080fd5b5061063a610635366004612976565b610e0d565b60408051921515835263ffffffff909116602083015201610283565b34801561066257600080fd5b506102296106713660046126d5565b610e94565b34801561068257600080fd5b50620697806102ac565b34801561069857600080fd5b5061063a6106a73660046126d5565b610ed7565b3480156106b857600080fd5b506102296106c73660046129c1565b610f54565b3480156106d857600080fd5b506102ac6106e7366004612833565b610f66565b3480156106f857600080fd5b5061070c6107073660046129df565b6110c0565b6040516001600160a01b039091168152602001610283565b34801561073057600080fd5b5061074461073f366004612a09565b6110e2565b6040805192835263ffffffff909116602083015201610283565b34801561076a57600080fd5b506105df610779366004612560565b611227565b34801561078a57600080fd5b506102296107993660046126d5565b611248565b6107a6611271565b60005b828110156107ea576107e2858585848181106107c7576107c7612a7b565b90506020020160208101906107dc9190612a91565b846112ec565b6001016107a9565b5050505050565b6001600160401b03811660009081526001602081905260408220015461082690600160801b90046001600160701b031661136e565b92915050565b610834611271565b61083e828261138d565b5050565b61084a611271565b604051637a9e5e4b60e01b81526001600160a01b038281166004830152831690637a9e5e4b90602401600060405180830381600087803b15801561088d57600080fd5b505af11580156108a1573d6000803e3d6000fd5b505050505050565b60003381806108ba838888886113ff565b91509150811580156108d0575063ffffffff8116155b156109235782876108e18888611452565b6040516381c6f24b60e01b81526001600160a01b0393841660048201529290911660248301526001600160e01b03191660448201526064015b60405180910390fd5b600061093184898989610ced565b9050600063ffffffff8316151580610958575061094d82610a9e565b65ffffffffffff1615155b15610969576109668261146a565b90505b60035461097f8a61097a8b8b611452565b61156a565b6003819055506109c78a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503492506115ac915050565b506003559450505050505b9392505050565b6109e1611271565b60006109f784846109f1876107f1565b85611650565b90508015610a21576001600160401b03841660009081526004602052604090206107ea908461189b565b50505050565b6001600160401b03821660009081526001602090815260408083206001600160a01b03851684529091528120805465ffffffffffff811692918291829190610a7e90600160301b90046001600160701b03166118b0565b969991985096509350505050565b610a94611271565b61083e82826118d3565b60008181526002602052604081205465ffffffffffff16610abe81611977565b610ac857806109d2565b60009392505050565b6001600160a01b038116600090815260208190526040812060010154610826906001600160701b031661136e565b610b07611271565b61083e82826119a6565b6001600160a01b0382166000908152602081815260408083206001600160e01b0319851684529091529020546001600160401b031692915050565b610b54611271565b6001600160401b0383161580610b7257506001600160401b03838116145b15610b9b5760405163061c6a4360e21b81526001600160401b038416600482015260240161091a565b826001600160401b03167f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a4508383604051610bd6929190612ad7565b60405180910390a2505050565b60408051638fb3603760e01b80825291513392918391638fb36037916004808201926020929091908290030181865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612af3565b6001600160e01b03191614610c7b57604051630641fee960e31b81526001600160a01b038216600482015260240161091a565b6107ea610c8a85838686610ced565b61146a565b6001600160a01b0316600090815260208190526040902060010154600160701b900460ff1690565b6001600160401b038116600090815260046020526040902060609061082690611a58565b610ce3611271565b61083e8282611a65565b600084848484604051602001610d069493929190612b10565b604051602081830303815290604052805190602001209050949350505050565b604080516000815260208101909152606090826001600160401b03811115610d5057610d50612b90565b604051908082528060200260200182016040528015610d8357816020015b6060815260200190600190039081610d6e5790505b50915060005b83811015610e0557610de030868684818110610da757610da7612a7b565b9050602002810190610db99190612ba6565b85604051602001610dcc93929190612bec565b604051602081830303815290604052611b76565b838281518110610df257610df2612a7b565b6020908102919091010152600101610d89565b505092915050565b600080610e1984610c8f565b15610e2957506000905080610e8c565b306001600160a01b03861603610e4e57610e438484611bec565b600091509150610e8c565b6000610e5a8585610b11565b9050600080610e698389610ed7565b9150915081610e7a57600080610e84565b63ffffffff811615815b945094505050505b935093915050565b610e9c611271565b6000610ea88383611c03565b90508015610ed2576001600160401b0383166000908152600460205260409020610a219083611cf0565b505050565b60008067fffffffffffffffe196001600160401b03851601610eff5750600190506000610f4d565b600080610f0c8686610a27565b5050915091508165ffffffffffff16600014158015610f425750610f2e611d05565b65ffffffffffff168265ffffffffffff1611155b93509150610f4d9050565b9250929050565b610f5c611271565b61083e8282611d15565b60003381610f748585611452565b90506000610f8488888888610ced565b60008181526002602052604081205491925065ffffffffffff9091169003610fc25760405163060a299b60e41b81526004810182905260240161091a565b826001600160a01b0316886001600160a01b03161461105e576000610fe8600085610ed7565b5090506000611003610ffd6102468b87610b11565b86610ed7565b50905081158015611012575080155b1561105b57604051630ff89d4760e21b81526001600160a01b038087166004830152808c1660248301528a1660448201526001600160e01b03198516606482015260840161091a565b50505b600081815260026020526040808220805465ffffffffffff1916908190559051600160301b90910463ffffffff1691829184917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f791a398975050505050505050565b6001600160401b03821660009081526004602052604081206109d29083611dd2565b60008033816110f3828989896113ff565b91505060008163ffffffff16611107611d05565b6111119190612c13565b905063ffffffff82161580611148575060008665ffffffffffff1611801561114857508065ffffffffffff168665ffffffffffff16105b156111595782896108e18a8a611452565b6111738665ffffffffffff168265ffffffffffff16611dde565b9550611181838a8a8a610ced565b945061118c85611dee565b60008581526002602052604090819020805465ffffffffffff891669ffffffffffffffffffff19821617600160301b9182900463ffffffff90811660010190811692830291909117909255915190955086907f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b490611213908a9088908f908f908f90612c32565b60405180910390a350505094509492505050565b6001600160401b038116600090815260046020526040812061082690611e3b565b6001600160a01b0381163314610e9c57604051635f159e6360e01b815260040160405180910390fd5b33600080611280838236611e45565b9150915081610ed2578063ffffffff166000036112dc5760006112a38136611f0f565b5060405163f07e038f60e01b81526001600160a01b03871660048201526001600160401b0382166024820152909250604401905061091a565b610a21610c8a8430600036610ced565b6001600160a01b0383166000818152602081815260408083206001600160e01b0319871680855290835292819020805467ffffffffffffffff19166001600160401b038716908117909155905192835292917f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde949151910160405180910390a3505050565b600080611383836001600160701b03166118b0565b5090949350505050565b6001600160a01b038216600081815260208190526040908190206001018054841515600160701b0260ff60701b19909116179055517f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb138906113f390841515815260200190565b60405180910390a25050565b600080306001600160a01b038616036114265761141d868585611e45565b91509150611449565b600483106114425761143d86866106358787611452565b61141d565b5060009050805b94509492505050565b60006114616004828486612b66565b6109d291612c78565b60008181526002602052604081205465ffffffffffff811690600160301b900463ffffffff168183036114b35760405163060a299b60e41b81526004810185905260240161091a565b6114bb611d05565b65ffffffffffff168265ffffffffffff1611156114ee57604051630c65b5bd60e11b81526004810185905260240161091a565b6114f782611977565b1561151857604051631e2975b960e21b81526004810185905260240161091a565b600084815260026020526040808220805465ffffffffffff191690555163ffffffff83169186917f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d9190a39392505050565b604080516001600160a01b03939093166020808501919091526001600160e01b0319929092168382015280518084038201815260609093019052815191012090565b6060814710156115d85760405163cf47918160e01b81524760048201526024810183905260440161091a565b600080856001600160a01b031684866040516115f49190612ca6565b60006040518083038185875af1925050503d8060008114611631576040519150601f19603f3d011682016040523d82523d6000602084013e611636565b606091505b5091509150611646868383612101565b9695505050505050565b600067fffffffffffffffe196001600160401b0386160161168f5760405163061c6a4360e21b81526001600160401b038616600482015260240161091a565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff1615908115611781578463ffffffff166116db611d05565b6116e59190612c13565b905060405180604001604052808265ffffffffffff1681526020016117138663ffffffff1663ffffffff1690565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c1684528252909120835181549490920151909216600160301b026001600160a01b031990931665ffffffffffff9091161791909117905561182d565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a1684529091528120546117cb91600160301b9091046001600160701b031690869061215d565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316600160301b0273ffffffffffffffffffffffffffff000000000000199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b60006109d2836001600160a01b038416612207565b60008060006118c6846118c1611d05565b612256565b9250925092509193909250565b6001600160401b03821615806118f157506001600160401b03828116145b1561191a5760405163061c6a4360e21b81526001600160401b038316600482015260240161091a565b6001600160401b038281166000818152600160208190526040808320909101805467ffffffffffffffff19169486169485179055517f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63409190a35050565b6000611981611d05565b65ffffffffffff1661199662093a8084612c13565b65ffffffffffff16111592915050565b6001600160401b03821615806119c457506001600160401b03828116145b156119ed5760405163061c6a4360e21b81526001600160401b038316600482015260240161091a565b6001600160401b03828116600081815260016020819052604080832090910180546fffffffffffffffff00000000000000001916600160401b958716958602179055517f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae29190a35050565b606060006109d2836122a3565b67fffffffffffffffe196001600160401b03831601611aa25760405163061c6a4360e21b81526001600160401b038316600482015260240161091a565b6001600160401b038216600090815260016020819052604082200154611adc90600160801b90046001600160701b0316836206978061215d565b6001600160401b0385166000818152600160208190526040918290200180546001600160701b03909516600160801b026dffffffffffffffffffffffffffff60801b199095169490941790935591519092507ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b4890610bd6908590859063ffffffff92909216825265ffffffffffff16602082015260400190565b6060600080846001600160a01b031684604051611b939190612ca6565b600060405180830381855af49150503d8060008114611bce576040519150601f19603f3d011682016040523d82523d6000602084013e611bd3565b606091505b5091509150611be3858383612101565b95945050505050565b6000611bf8838361156a565b600354149392505050565b600067fffffffffffffffe196001600160401b03841601611c425760405163061c6a4360e21b81526001600160401b038416600482015260240161091a565b6001600160401b03831660009081526001602090815260408083206001600160a01b038616845290915281205465ffffffffffff169003611c8557506000610826565b6001600160401b03831660008181526001602090815260408083206001600160a01b038716808552925280832080546001600160a01b0319169055519092917ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16691a350600192915050565b60006109d2836001600160a01b0384166122ff565b6000611d10426123f9565b905090565b6001600160a01b038216600090815260208190526040812060010154611d48906001600160701b0316836206978061215d565b6001600160a01b0385166000818152602081815260409182902060010180546dffffffffffffffffffffffffffff19166001600160701b039690961695909517909455805163ffffffff8716815265ffffffffffff841694810194909452919350917fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c9101610bd6565b60006109d28383612430565b60008282188284110282186109d2565b60008181526002602052604090205465ffffffffffff168015801590611e1a5750611e1881611977565b155b1561083e5760405163813e945960e01b81526004810183905260240161091a565b6000610826825490565b6000806004831015611e5c57506000905080610e8c565b306001600160a01b03861603611e7f57610e4330611e7a8686611452565b611bec565b6000806000611e8e8787611f0f565b92509250925082158015611ea65750611ea630610c8f565b15611eba5760008094509450505050610e8c565b600080611ec7848b610ed7565b9150915081611ee157600080965096505050505050610e8c565b611ef78363ffffffff168263ffffffff16611dde565b63ffffffff8116159b909a5098505050505050505050565b600080806004841015611f2a575060009150819050806120fa565b6000611f368686611452565b90506001600160e01b031981166310a6aa3760e31b1480611f6757506001600160e01b031981166330cae18760e01b145b80611f8257506001600160e01b0319811663294b14a960e11b145b80611f9d57506001600160e01b03198116635326cae760e11b145b80611fb857506001600160e01b0319811663d22b598960e01b145b15611fce576001600080935093509350506120fa565b6001600160e01b0319811663063fc60f60e21b1480611ffd57506001600160e01b0319811663167bd39560e01b145b8061201857506001600160e01b031981166308d6122d60e01b145b1561205a57600061202d60246004888a612b66565b81019061203a919061273d565b9050600061204782610ad1565b600196506000955093506120fa92505050565b6001600160e01b0319811663012e238d60e51b148061208957506001600160e01b03198116635be958b160e11b145b156120e457600061209e60246004888a612b66565b8101906120ab9190612560565b905060016120d5826001600160401b03908116600090815260016020819052604090912001541690565b600094509450945050506120fa565b60006120f03083610b11565b6000935093509350505b9250925092565b606082612116576121118261245a565b6109d2565b815115801561212d57506001600160a01b0384163b155b1561215657604051639996b31560e01b81526001600160a01b038516600482015260240161091a565b50806109d2565b6000806000612174866001600160701b031661136e565b905060006121b18563ffffffff168763ffffffff168463ffffffff161161219c5760006121a6565b6121a68885612cc2565b63ffffffff16611dde565b90508063ffffffff166121c2611d05565b6121cc9190612c13565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b600081815260018301602052604081205461224e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610826565b506000610826565b69ffffffffffffffffffff602083901c166001600160701b03831665ffffffffffff604085901c811690841681111561229157828282612296565b816000805b9250925092509250925092565b6060816000018054806020026020016040519081016040528092919081815260200182805480156122f357602002820191906000526020600020905b8154815260200190600101908083116122df575b50505050509050919050565b600081815260018301602052604081205480156123e8576000612323600183612b53565b855490915060009061233790600190612b53565b905080821461239c57600086600001828154811061235757612357612a7b565b906000526020600020015490508087600001848154811061237a5761237a612a7b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123ad576123ad612cdf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610826565b6000915050610826565b5092915050565b600065ffffffffffff82111561242c576040516306dfcc6560e41b8152603060048201526024810183905260440161091a565b5090565b600082600001828154811061244757612447612a7b565b9060005260206000200154905092915050565b80511561246957805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b50565b6001600160a01b038116811461248257600080fd5b60008083601f8401126124ac57600080fd5b5081356001600160401b038111156124c357600080fd5b6020830191508360208260051b8501011115610f4d57600080fd5b80356001600160401b03811681146124f557600080fd5b919050565b6000806000806060858703121561251057600080fd5b843561251b81612485565b935060208501356001600160401b0381111561253657600080fd5b6125428782880161249a565b90945092506125559050604086016124de565b905092959194509250565b60006020828403121561257257600080fd5b6109d2826124de565b6000806040838503121561258e57600080fd5b823561259981612485565b9150602083013580151581146125ae57600080fd5b809150509250929050565b600080604083850312156125cc57600080fd5b82356125d781612485565b915060208301356125ae81612485565b60008083601f8401126125f957600080fd5b5081356001600160401b0381111561261057600080fd5b602083019150836020828501011115610f4d57600080fd5b60008060006040848603121561263d57600080fd5b833561264881612485565b925060208401356001600160401b0381111561266357600080fd5b61266f868287016125e7565b9497909650939450505050565b803563ffffffff811681146124f557600080fd5b6000806000606084860312156126a557600080fd5b6126ae846124de565b925060208401356126be81612485565b91506126cc6040850161267c565b90509250925092565b600080604083850312156126e857600080fd5b6125d7836124de565b6000806040838503121561270457600080fd5b61270d836124de565b915061271b602084016124de565b90509250929050565b60006020828403121561273657600080fd5b5035919050565b60006020828403121561274f57600080fd5b81356109d281612485565b6001600160e01b03198116811461248257600080fd5b6000806040838503121561278357600080fd5b823561278e81612485565b915060208301356125ae8161275a565b6000806000604084860312156127b357600080fd5b612648846124de565b6020808252825182820181905260009190848201906040850190845b818110156127fd5783516001600160a01b0316835292840192918401916001016127d8565b50909695505050505050565b6000806040838503121561281c57600080fd5b612825836124de565b915061271b6020840161267c565b6000806000806060858703121561284957600080fd5b843561285481612485565b9350602085013561286481612485565b925060408501356001600160401b0381111561287f57600080fd5b61288b878288016125e7565b95989497509550505050565b600080602083850312156128aa57600080fd5b82356001600160401b038111156128c057600080fd5b6128cc8582860161249a565b90969095509350505050565b60005b838110156128f35781810151838201526020016128db565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561296957878503603f190184528151805180875261294a818989018a85016128d8565b601f01601f191695909501860194509285019290850190600101612923565b5092979650505050505050565b60008060006060848603121561298b57600080fd5b833561299681612485565b925060208401356129a681612485565b915060408401356129b68161275a565b809150509250925092565b600080604083850312156129d457600080fd5b823561282581612485565b600080604083850312156129f257600080fd5b6129fb836124de565b946020939093013593505050565b60008060008060608587031215612a1f57600080fd5b8435612a2a81612485565b935060208501356001600160401b03811115612a4557600080fd5b612a51878288016125e7565b909450925050604085013565ffffffffffff81168114612a7057600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612aa357600080fd5b81356109d28161275a565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000612aeb602083018486612aae565b949350505050565b600060208284031215612b0557600080fd5b81516109d28161275a565b6001600160a01b038581168252841660208201526060604082018190526000906116469083018486612aae565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082657610826612b3d565b60008085851115612b7657600080fd5b83861115612b8357600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000808335601e19843603018112612bbd57600080fd5b8301803591506001600160401b03821115612bd757600080fd5b602001915036819003821315610f4d57600080fd5b828482376000838201600081528351612c098183602088016128d8565b0195945050505050565b65ffffffffffff8181168382160190808211156123f2576123f2612b3d565b65ffffffffffff861681526001600160a01b03858116602083015284166040820152608060608201819052600090612c6d9083018486612aae565b979650505050505050565b6001600160e01b03198135818116916004851015610e055760049490940360031b84901b1690921692915050565b60008251612cb88184602087016128d8565b9190910192915050565b63ffffffff8281168282160390808211156123f2576123f2612b3d565b634e487b7160e01b600052603160045260246000fdfea264697066735822122082b7987ba44be1d04aac83a74292b30bc191863fff65197a8cffa32e6e47ab1464736f6c63430008180033";
1252
+ "0x608060405234801561001057600080fd5b506040516132b73803806132b783398101604081905261002f916104f4565b806001600160a01b03811661005f57604051630409d6d160e11b8152600060048201526024015b60405180910390fd5b61006c60008281806100a8565b50506000805260046020526100a17f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec826102f3565b505061057d565b60006002600160401b03196001600160401b038616016100e65760405163061c6a4360e21b81526001600160401b0386166004820152602401610056565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff16159081156101dd5763ffffffff8516610132610311565b61013c919061053a565b905060405180604001604052808265ffffffffffff16815260200161016c8663ffffffff1661032160201b60201c565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c16845282529091208351815494909201519092166601000000000000026001600160a01b031990931665ffffffffffff90911617919091179055610285565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a16845290915281205461022a9166010000000000009091046001600160701b031690869061032a565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316660100000000000002600160301b600160a01b03199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b6000610308836001600160a01b0384166103d3565b90505b92915050565b600061031c42610422565b905090565b63ffffffff1690565b600080806103406001600160701b038716610459565b9050600061037d8563ffffffff168763ffffffff168463ffffffff1611610368576000610372565b6103728885610560565b63ffffffff16610478565b905063ffffffff811661038e610311565b610398919061053a565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b600081815260018301602052604081205461041a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561030b565b50600061030b565b600065ffffffffffff821115610455576040516306dfcc6560e41b81526030600482015260248101839052604401610056565b5090565b60008061046e6001600160701b038416610488565b5090949350505050565b6000828218828411028218610308565b6000808061049d84610498610311565b6104aa565b9250925092509193909250565b6001600160501b03602083901c166001600160701b03831665ffffffffffff604085901c81169084168111156104e2578282826104e7565b816000805b9250925092509250925092565b60006020828403121561050657600080fd5b81516001600160a01b038116811461051d57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b65ffffffffffff81811683821601908082111561055957610559610524565b5092915050565b63ffffffff82811682821603908082111561055957610559610524565b612d2b8061058c6000396000f3fe6080604052600436106102045760003560e01c806375b238fc11610118578063b7d2b162116100a0578063d6bb62c61161006f578063d6bb62c6146106cc578063d78a83b1146106ec578063f801a69814610724578063fc8610d11461075e578063fe0776f51461077e57600080fd5b8063b7d2b16214610656578063cc1b6c8114610676578063d1f856ee1461068c578063d22b5989146106ac57600080fd5b8063a5808e2f116100e7578063a5808e2f14610572578063a64d95ce1461059f578063abd9bd2a146105bf578063ac9650d8146105ed578063b70096131461061a57600080fd5b806375b238fc146104ed578063853551b81461050257806394c7d7ee14610522578063a166aa891461054257600080fd5b806330cae1871161019b5780634665096d1161016a5780634665096d1461043a5780634c1da1e2146104505780635296295214610470578063530dd456146104905780636d5115bd146104cd57600080fd5b806330cae1871461038e5780633adc277a146103ae5780633ca7c02a146103e55780634136a33c1461040057600080fd5b806318ff183c116101d757806318ff183c146102e15780631cff79cd1461030157806325c471a0146103145780633078f1141461033457600080fd5b806308d6122d146102095780630b0a93ba1461022b57806312be87271461028c578063167bd395146102c1575b600080fd5b34801561021557600080fd5b506102296102243660046124fa565b61079e565b005b34801561023757600080fd5b5061026f610246366004612560565b6001600160401b0390811660009081526001602081905260409091200154600160401b90041690565b6040516001600160401b0390911681526020015b60405180910390f35b34801561029857600080fd5b506102ac6102a7366004612560565b6107f1565b60405163ffffffff9091168152602001610283565b3480156102cd57600080fd5b506102296102dc36600461257b565b61082c565b3480156102ed57600080fd5b506102296102fc3660046125b9565b610842565b6102ac61030f366004612628565b6108a9565b34801561032057600080fd5b5061022961032f366004612690565b6109d9565b34801561034057600080fd5b5061035461034f3660046126d5565b610a27565b604051610283949392919065ffffffffffff948516815263ffffffff93841660208201529190921660408201529116606082015260800190565b34801561039a57600080fd5b506102296103a93660046126f1565b610a8c565b3480156103ba57600080fd5b506103ce6103c9366004612724565b610a9e565b60405165ffffffffffff9091168152602001610283565b3480156103f157600080fd5b5061026f6001600160401b0381565b34801561040c57600080fd5b506102ac61041b366004612724565b600090815260026020526040902054600160301b900463ffffffff1690565b34801561044657600080fd5b5062093a806102ac565b34801561045c57600080fd5b506102ac61046b36600461273d565b610ad1565b34801561047c57600080fd5b5061022961048b3660046126f1565b610aff565b34801561049c57600080fd5b5061026f6104ab366004612560565b6001600160401b03908116600090815260016020819052604090912001541690565b3480156104d957600080fd5b5061026f6104e8366004612770565b610b11565b3480156104f957600080fd5b5061026f600081565b34801561050e57600080fd5b5061022961051d36600461279e565b610b4c565b34801561052e57600080fd5b5061022961053d366004612628565b610be3565b34801561054e57600080fd5b5061056261055d36600461273d565b610c8f565b6040519015158152602001610283565b34801561057e57600080fd5b5061059261058d366004612560565b610cb7565b60405161028391906127bc565b3480156105ab57600080fd5b506102296105ba366004612809565b610cdb565b3480156105cb57600080fd5b506105df6105da366004612833565b610ced565b604051908152602001610283565b3480156105f957600080fd5b5061060d610608366004612897565b610d26565b60405161028391906128fc565b34801561062657600080fd5b5061063a610635366004612976565b610e0d565b60408051921515835263ffffffff909116602083015201610283565b34801561066257600080fd5b506102296106713660046126d5565b610e94565b34801561068257600080fd5b50620697806102ac565b34801561069857600080fd5b5061063a6106a73660046126d5565b610ed7565b3480156106b857600080fd5b506102296106c73660046129c1565b610f54565b3480156106d857600080fd5b506102ac6106e7366004612833565b610f66565b3480156106f857600080fd5b5061070c6107073660046129df565b6110c0565b6040516001600160a01b039091168152602001610283565b34801561073057600080fd5b5061074461073f366004612a09565b6110e2565b6040805192835263ffffffff909116602083015201610283565b34801561076a57600080fd5b506105df610779366004612560565b611227565b34801561078a57600080fd5b506102296107993660046126d5565b611248565b6107a6611271565b60005b828110156107ea576107e2858585848181106107c7576107c7612a7b565b90506020020160208101906107dc9190612a91565b846112ec565b6001016107a9565b5050505050565b6001600160401b03811660009081526001602081905260408220015461082690600160801b90046001600160701b031661136e565b92915050565b610834611271565b61083e828261138d565b5050565b61084a611271565b604051637a9e5e4b60e01b81526001600160a01b038281166004830152831690637a9e5e4b90602401600060405180830381600087803b15801561088d57600080fd5b505af11580156108a1573d6000803e3d6000fd5b505050505050565b60003381806108ba838888886113ff565b91509150811580156108d0575063ffffffff8116155b156109235782876108e18888611452565b6040516381c6f24b60e01b81526001600160a01b0393841660048201529290911660248301526001600160e01b03191660448201526064015b60405180910390fd5b600061093184898989610ced565b9050600063ffffffff8316151580610958575061094d82610a9e565b65ffffffffffff1615155b15610969576109668261146a565b90505b60035461097f8a61097a8b8b611452565b61156a565b6003819055506109c78a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503492506115ac915050565b506003559450505050505b9392505050565b6109e1611271565b60006109f784846109f1876107f1565b85611650565b90508015610a21576001600160401b03841660009081526004602052604090206107ea908461189b565b50505050565b6001600160401b03821660009081526001602090815260408083206001600160a01b03851684529091528120805465ffffffffffff811692918291829190610a7e90600160301b90046001600160701b03166118b0565b969991985096509350505050565b610a94611271565b61083e82826118d3565b60008181526002602052604081205465ffffffffffff16610abe81611977565b610ac857806109d2565b60009392505050565b6001600160a01b038116600090815260208190526040812060010154610826906001600160701b031661136e565b610b07611271565b61083e82826119a6565b6001600160a01b0382166000908152602081815260408083206001600160e01b0319851684529091529020546001600160401b031692915050565b610b54611271565b6001600160401b0383161580610b7257506001600160401b03838116145b15610b9b5760405163061c6a4360e21b81526001600160401b038416600482015260240161091a565b826001600160401b03167f1256f5b5ecb89caec12db449738f2fbcd1ba5806cf38f35413f4e5c15bf6a4508383604051610bd6929190612ad7565b60405180910390a2505050565b60408051638fb3603760e01b80825291513392918391638fb36037916004808201926020929091908290030181865afa158015610c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c489190612af3565b6001600160e01b03191614610c7b57604051630641fee960e31b81526001600160a01b038216600482015260240161091a565b6107ea610c8a85838686610ced565b61146a565b6001600160a01b0316600090815260208190526040902060010154600160701b900460ff1690565b6001600160401b038116600090815260046020526040902060609061082690611a58565b610ce3611271565b61083e8282611a65565b600084848484604051602001610d069493929190612b10565b604051602081830303815290604052805190602001209050949350505050565b604080516000815260208101909152606090826001600160401b03811115610d5057610d50612b90565b604051908082528060200260200182016040528015610d8357816020015b6060815260200190600190039081610d6e5790505b50915060005b83811015610e0557610de030868684818110610da757610da7612a7b565b9050602002810190610db99190612ba6565b85604051602001610dcc93929190612bec565b604051602081830303815290604052611b76565b838281518110610df257610df2612a7b565b6020908102919091010152600101610d89565b505092915050565b600080610e1984610c8f565b15610e2957506000905080610e8c565b306001600160a01b03861603610e4e57610e438484611bec565b600091509150610e8c565b6000610e5a8585610b11565b9050600080610e698389610ed7565b9150915081610e7a57600080610e84565b63ffffffff811615815b945094505050505b935093915050565b610e9c611271565b6000610ea88383611c03565b90508015610ed2576001600160401b0383166000908152600460205260409020610a219083611cf0565b505050565b60008067fffffffffffffffe196001600160401b03851601610eff5750600190506000610f4d565b600080610f0c8686610a27565b5050915091508165ffffffffffff16600014158015610f425750610f2e611d05565b65ffffffffffff168265ffffffffffff1611155b93509150610f4d9050565b9250929050565b610f5c611271565b61083e8282611d15565b60003381610f748585611452565b90506000610f8488888888610ced565b60008181526002602052604081205491925065ffffffffffff9091169003610fc25760405163060a299b60e41b81526004810182905260240161091a565b826001600160a01b0316886001600160a01b03161461105e576000610fe8600085610ed7565b5090506000611003610ffd6102468b87610b11565b86610ed7565b50905081158015611012575080155b1561105b57604051630ff89d4760e21b81526001600160a01b038087166004830152808c1660248301528a1660448201526001600160e01b03198516606482015260840161091a565b50505b600081815260026020526040808220805465ffffffffffff1916908190559051600160301b90910463ffffffff1691829184917fbd9ac67a6e2f6463b80927326310338bcbb4bdb7936ce1365ea3e01067e7b9f791a398975050505050505050565b6001600160401b03821660009081526004602052604081206109d29083611dd2565b60008033816110f3828989896113ff565b91505060008163ffffffff16611107611d05565b6111119190612c13565b905063ffffffff82161580611148575060008665ffffffffffff1611801561114857508065ffffffffffff168665ffffffffffff16105b156111595782896108e18a8a611452565b6111738665ffffffffffff168265ffffffffffff16611dde565b9550611181838a8a8a610ced565b945061118c85611dee565b60008581526002602052604090819020805465ffffffffffff891669ffffffffffffffffffff19821617600160301b9182900463ffffffff90811660010190811692830291909117909255915190955086907f82a2da5dee54ea8021c6545b4444620291e07ee83be6dd57edb175062715f3b490611213908a9088908f908f908f90612c32565b60405180910390a350505094509492505050565b6001600160401b038116600090815260046020526040812061082690611e3b565b6001600160a01b0381163314610e9c57604051635f159e6360e01b815260040160405180910390fd5b33600080611280838236611e45565b9150915081610ed2578063ffffffff166000036112dc5760006112a38136611f0f565b5060405163f07e038f60e01b81526001600160a01b03871660048201526001600160401b0382166024820152909250604401905061091a565b610a21610c8a8430600036610ced565b6001600160a01b0383166000818152602081815260408083206001600160e01b0319871680855290835292819020805467ffffffffffffffff19166001600160401b038716908117909155905192835292917f9ea6790c7dadfd01c9f8b9762b3682607af2c7e79e05a9f9fdf5580dde949151910160405180910390a3505050565b600080611383836001600160701b03166118b0565b5090949350505050565b6001600160a01b038216600081815260208190526040908190206001018054841515600160701b0260ff60701b19909116179055517f90d4e7bb7e5d933792b3562e1741306f8be94837e1348dacef9b6f1df56eb138906113f390841515815260200190565b60405180910390a25050565b600080306001600160a01b038616036114265761141d868585611e45565b91509150611449565b600483106114425761143d86866106358787611452565b61141d565b5060009050805b94509492505050565b60006114616004828486612b66565b6109d291612c78565b60008181526002602052604081205465ffffffffffff811690600160301b900463ffffffff168183036114b35760405163060a299b60e41b81526004810185905260240161091a565b6114bb611d05565b65ffffffffffff168265ffffffffffff1611156114ee57604051630c65b5bd60e11b81526004810185905260240161091a565b6114f782611977565b1561151857604051631e2975b960e21b81526004810185905260240161091a565b600084815260026020526040808220805465ffffffffffff191690555163ffffffff83169186917f76a2a46953689d4861a5d3f6ed883ad7e6af674a21f8e162707159fc9dde614d9190a39392505050565b604080516001600160a01b03939093166020808501919091526001600160e01b0319929092168382015280518084038201815260609093019052815191012090565b6060814710156115d85760405163cf47918160e01b81524760048201526024810183905260440161091a565b600080856001600160a01b031684866040516115f49190612ca6565b60006040518083038185875af1925050503d8060008114611631576040519150601f19603f3d011682016040523d82523d6000602084013e611636565b606091505b5091509150611646868383612101565b9695505050505050565b600067fffffffffffffffe196001600160401b0386160161168f5760405163061c6a4360e21b81526001600160401b038616600482015260240161091a565b6001600160401b03851660009081526001602090815260408083206001600160a01b038816845290915281205465ffffffffffff1615908115611781578463ffffffff166116db611d05565b6116e59190612c13565b905060405180604001604052808265ffffffffffff1681526020016117138663ffffffff1663ffffffff1690565b6001600160701b039081169091526001600160401b03891660009081526001602090815260408083206001600160a01b038c1684528252909120835181549490920151909216600160301b026001600160a01b031990931665ffffffffffff9091161791909117905561182d565b6001600160401b03871660009081526001602090815260408083206001600160a01b038a1684529091528120546117cb91600160301b9091046001600160701b031690869061215d565b6001600160401b03891660009081526001602090815260408083206001600160a01b038c168452909152902080546001600160701b03909316600160301b0273ffffffffffffffffffffffffffff000000000000199093169290921790915590505b6040805163ffffffff8616815265ffffffffffff831660208201528315158183015290516001600160a01b038816916001600160401b038a16917ff98448b987f1428e0e230e1f3c6e2ce15b5693eaf31827fbd0b1ec4b424ae7cf9181900360600190a35095945050505050565b60006109d2836001600160a01b038416612207565b60008060006118c6846118c1611d05565b612256565b9250925092509193909250565b6001600160401b03821615806118f157506001600160401b03828116145b1561191a5760405163061c6a4360e21b81526001600160401b038316600482015260240161091a565b6001600160401b038281166000818152600160208190526040808320909101805467ffffffffffffffff19169486169485179055517f1fd6dd7631312dfac2205b52913f99de03b4d7e381d5d27d3dbfe0713e6e63409190a35050565b6000611981611d05565b65ffffffffffff1661199662093a8084612c13565b65ffffffffffff16111592915050565b6001600160401b03821615806119c457506001600160401b03828116145b156119ed5760405163061c6a4360e21b81526001600160401b038316600482015260240161091a565b6001600160401b03828116600081815260016020819052604080832090910180546fffffffffffffffff00000000000000001916600160401b958716958602179055517f7a8059630b897b5de4c08ade69f8b90c3ead1f8596d62d10b6c4d14a0afb4ae29190a35050565b606060006109d2836122a3565b67fffffffffffffffe196001600160401b03831601611aa25760405163061c6a4360e21b81526001600160401b038316600482015260240161091a565b6001600160401b038216600090815260016020819052604082200154611adc90600160801b90046001600160701b0316836206978061215d565b6001600160401b0385166000818152600160208190526040918290200180546001600160701b03909516600160801b026dffffffffffffffffffffffffffff60801b199095169490941790935591519092507ffeb69018ee8b8fd50ea86348f1267d07673379f72cffdeccec63853ee8ce8b4890610bd6908590859063ffffffff92909216825265ffffffffffff16602082015260400190565b6060600080846001600160a01b031684604051611b939190612ca6565b600060405180830381855af49150503d8060008114611bce576040519150601f19603f3d011682016040523d82523d6000602084013e611bd3565b606091505b5091509150611be3858383612101565b95945050505050565b6000611bf8838361156a565b600354149392505050565b600067fffffffffffffffe196001600160401b03841601611c425760405163061c6a4360e21b81526001600160401b038416600482015260240161091a565b6001600160401b03831660009081526001602090815260408083206001600160a01b038616845290915281205465ffffffffffff169003611c8557506000610826565b6001600160401b03831660008181526001602090815260408083206001600160a01b038716808552925280832080546001600160a01b0319169055519092917ff229baa593af28c41b1d16b748cd7688f0c83aaf92d4be41c44005defe84c16691a350600192915050565b60006109d2836001600160a01b0384166122ff565b6000611d10426123f9565b905090565b6001600160a01b038216600090815260208190526040812060010154611d48906001600160701b0316836206978061215d565b6001600160a01b0385166000818152602081815260409182902060010180546dffffffffffffffffffffffffffff19166001600160701b039690961695909517909455805163ffffffff8716815265ffffffffffff841694810194909452919350917fa56b76017453f399ec2327ba00375dbfb1fd070ff854341ad6191e6a2e2de19c9101610bd6565b60006109d28383612430565b60008282188284110282186109d2565b60008181526002602052604090205465ffffffffffff168015801590611e1a5750611e1881611977565b155b1561083e5760405163813e945960e01b81526004810183905260240161091a565b6000610826825490565b6000806004831015611e5c57506000905080610e8c565b306001600160a01b03861603611e7f57610e4330611e7a8686611452565b611bec565b6000806000611e8e8787611f0f565b92509250925082158015611ea65750611ea630610c8f565b15611eba5760008094509450505050610e8c565b600080611ec7848b610ed7565b9150915081611ee157600080965096505050505050610e8c565b611ef78363ffffffff168263ffffffff16611dde565b63ffffffff8116159b909a5098505050505050505050565b600080806004841015611f2a575060009150819050806120fa565b6000611f368686611452565b90506001600160e01b031981166310a6aa3760e31b1480611f6757506001600160e01b031981166330cae18760e01b145b80611f8257506001600160e01b0319811663294b14a960e11b145b80611f9d57506001600160e01b03198116635326cae760e11b145b80611fb857506001600160e01b0319811663d22b598960e01b145b15611fce576001600080935093509350506120fa565b6001600160e01b0319811663063fc60f60e21b1480611ffd57506001600160e01b0319811663167bd39560e01b145b8061201857506001600160e01b031981166308d6122d60e01b145b1561205a57600061202d60246004888a612b66565b81019061203a919061273d565b9050600061204782610ad1565b600196506000955093506120fa92505050565b6001600160e01b0319811663012e238d60e51b148061208957506001600160e01b03198116635be958b160e11b145b156120e457600061209e60246004888a612b66565b8101906120ab9190612560565b905060016120d5826001600160401b03908116600090815260016020819052604090912001541690565b600094509450945050506120fa565b60006120f03083610b11565b6000935093509350505b9250925092565b606082612116576121118261245a565b6109d2565b815115801561212d57506001600160a01b0384163b155b1561215657604051639996b31560e01b81526001600160a01b038516600482015260240161091a565b50806109d2565b6000806000612174866001600160701b031661136e565b905060006121b18563ffffffff168763ffffffff168463ffffffff161161219c5760006121a6565b6121a68885612cc2565b63ffffffff16611dde565b90508063ffffffff166121c2611d05565b6121cc9190612c13565b925063ffffffff8616602083901b67ffffffff0000000016604085901b6dffffffffffff000000000000000016171793505050935093915050565b600081815260018301602052604081205461224e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610826565b506000610826565b69ffffffffffffffffffff602083901c166001600160701b03831665ffffffffffff604085901c811690841681111561229157828282612296565b816000805b9250925092509250925092565b6060816000018054806020026020016040519081016040528092919081815260200182805480156122f357602002820191906000526020600020905b8154815260200190600101908083116122df575b50505050509050919050565b600081815260018301602052604081205480156123e8576000612323600183612b53565b855490915060009061233790600190612b53565b905080821461239c57600086600001828154811061235757612357612a7b565b906000526020600020015490508087600001848154811061237a5761237a612a7b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123ad576123ad612cdf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610826565b6000915050610826565b5092915050565b600065ffffffffffff82111561242c576040516306dfcc6560e41b8152603060048201526024810183905260440161091a565b5090565b600082600001828154811061244757612447612a7b565b9060005260206000200154905092915050565b80511561246957805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b50565b6001600160a01b038116811461248257600080fd5b60008083601f8401126124ac57600080fd5b5081356001600160401b038111156124c357600080fd5b6020830191508360208260051b8501011115610f4d57600080fd5b80356001600160401b03811681146124f557600080fd5b919050565b6000806000806060858703121561251057600080fd5b843561251b81612485565b935060208501356001600160401b0381111561253657600080fd5b6125428782880161249a565b90945092506125559050604086016124de565b905092959194509250565b60006020828403121561257257600080fd5b6109d2826124de565b6000806040838503121561258e57600080fd5b823561259981612485565b9150602083013580151581146125ae57600080fd5b809150509250929050565b600080604083850312156125cc57600080fd5b82356125d781612485565b915060208301356125ae81612485565b60008083601f8401126125f957600080fd5b5081356001600160401b0381111561261057600080fd5b602083019150836020828501011115610f4d57600080fd5b60008060006040848603121561263d57600080fd5b833561264881612485565b925060208401356001600160401b0381111561266357600080fd5b61266f868287016125e7565b9497909650939450505050565b803563ffffffff811681146124f557600080fd5b6000806000606084860312156126a557600080fd5b6126ae846124de565b925060208401356126be81612485565b91506126cc6040850161267c565b90509250925092565b600080604083850312156126e857600080fd5b6125d7836124de565b6000806040838503121561270457600080fd5b61270d836124de565b915061271b602084016124de565b90509250929050565b60006020828403121561273657600080fd5b5035919050565b60006020828403121561274f57600080fd5b81356109d281612485565b6001600160e01b03198116811461248257600080fd5b6000806040838503121561278357600080fd5b823561278e81612485565b915060208301356125ae8161275a565b6000806000604084860312156127b357600080fd5b612648846124de565b6020808252825182820181905260009190848201906040850190845b818110156127fd5783516001600160a01b0316835292840192918401916001016127d8565b50909695505050505050565b6000806040838503121561281c57600080fd5b612825836124de565b915061271b6020840161267c565b6000806000806060858703121561284957600080fd5b843561285481612485565b9350602085013561286481612485565b925060408501356001600160401b0381111561287f57600080fd5b61288b878288016125e7565b95989497509550505050565b600080602083850312156128aa57600080fd5b82356001600160401b038111156128c057600080fd5b6128cc8582860161249a565b90969095509350505050565b60005b838110156128f35781810151838201526020016128db565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561296957878503603f190184528151805180875261294a818989018a85016128d8565b601f01601f191695909501860194509285019290850190600101612923565b5092979650505050505050565b60008060006060848603121561298b57600080fd5b833561299681612485565b925060208401356129a681612485565b915060408401356129b68161275a565b809150509250925092565b600080604083850312156129d457600080fd5b823561282581612485565b600080604083850312156129f257600080fd5b6129fb836124de565b946020939093013593505050565b60008060008060608587031215612a1f57600080fd5b8435612a2a81612485565b935060208501356001600160401b03811115612a4557600080fd5b612a51878288016125e7565b909450925050604085013565ffffffffffff81168114612a7057600080fd5b939692955090935050565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612aa357600080fd5b81356109d28161275a565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b602081526000612aeb602083018486612aae565b949350505050565b600060208284031215612b0557600080fd5b81516109d28161275a565b6001600160a01b038581168252841660208201526060604082018190526000906116469083018486612aae565b634e487b7160e01b600052601160045260246000fd5b8181038181111561082657610826612b3d565b60008085851115612b7657600080fd5b83861115612b8357600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000808335601e19843603018112612bbd57600080fd5b8301803591506001600160401b03821115612bd757600080fd5b602001915036819003821315610f4d57600080fd5b828482376000838201600081528351612c098183602088016128d8565b0195945050505050565b65ffffffffffff8181168382160190808211156123f2576123f2612b3d565b65ffffffffffff861681526001600160a01b03858116602083015284166040820152608060608201819052600090612c6d9083018486612aae565b979650505050505050565b6001600160e01b03198135818116916004851015610e055760049490940360031b84901b1690921692915050565b60008251612cb88184602087016128d8565b9190910192915050565b63ffffffff8281168282160390808211156123f2576123f2612b3d565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220a5f431b284777d609a182b1d18254eda749a5abec857d0c186374bdf3db2f9c764736f6c63430008190033";
1253
1253
 
1254
1254
  type AuthorityManagerConstructorParams =
1255
1255
  | [signer?: Signer]