@ring-protocol/v2-sdk 0.1.9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs ADDED
@@ -0,0 +1,3538 @@
1
+ // src/constants.ts
2
+ import { ChainId, Percent } from "@ring-protocol/sdk-core";
3
+ import JSBI from "jsbi";
4
+ var FACTORY_ADDRESS = "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f";
5
+ var V2_FACTORY_ADDRESSES = {
6
+ [ChainId.MAINNET]: "0xeb2A625B704d73e82946D8d026E1F588Eed06416",
7
+ [ChainId.GOERLI]: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
8
+ // use uniswap v2 factory address
9
+ [ChainId.SEPOLIA]: "0x3D7101fDe92D0961cAc4b39Ee5A638d7B6A88090",
10
+ [ChainId.OPTIMISM]: "0x0c3c1c532F1e39EdF36BE9Fe0bE1410313E074Bf",
11
+ // use uniswap v2 factory address
12
+ [ChainId.ARBITRUM_ONE]: "0x1246Fa62467a9AC0892a2d2A9F9aafC2F5609442",
13
+ [ChainId.AVALANCHE]: "0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C",
14
+ // use uniswap v2 factory address
15
+ [ChainId.BASE_SEPOLIA]: "0x7Ae58f10f7849cA6F5fB71b7f45CB416c9204b1e",
16
+ // use uniswap v2 factory address
17
+ [ChainId.BASE]: "0x9BfFC3B30D6659e3D84754cc38865B3D60B4980E",
18
+ [ChainId.BNB]: "0x4De602A30Ad7fEf8223dcf67A9fB704324C4dd9B",
19
+ [ChainId.POLYGON]: "0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C",
20
+ // use uniswap v2 factory address
21
+ [ChainId.CELO]: "0x79a530c8e2fA8748B7B40dd3629C0520c2cCf03f",
22
+ // use uniswap v2 factory address
23
+ [ChainId.BLAST]: "0x24F5Ac9A706De0cF795A8193F6AB3966B14ECfE6",
24
+ [ChainId.WORLDCHAIN]: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
25
+ // use uniswap v2 factory address
26
+ [ChainId.UNICHAIN_SEPOLIA]: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
27
+ // use uniswap v2 factory address
28
+ [ChainId.UNICHAIN]: "0xEeE400Eabfba8F60f4e6B351D8577394BeB972CD",
29
+ [ChainId.MONAD_TESTNET]: "0x733e88f248b742db6c14c0b1713af5ad7fdd59d0",
30
+ // use uniswap v2 factory address
31
+ [ChainId.SONEIUM]: "0x97febbc2adbd5644ba22736e962564b23f5828ce",
32
+ // use uniswap v2 factory address
33
+ [ChainId.HYPER_MAINNET]: "0x4AfC2e4cA0844ad153B090dc32e207c1DD74a8E4",
34
+ [ChainId.STORY_MAINNET]: "0xEeE400Eabfba8F60f4e6B351D8577394BeB972CD",
35
+ [ChainId.XLAYER_MAINNET]: "0xdf38f24fe153761634be942f9d859f3dba857e95",
36
+ // use uniswap v2 factory address
37
+ 4326: "0xbf56488c857a881ae7e3bed27cf99c10a7ab7e50"
38
+ // use uniswap v2 factory address
39
+ };
40
+ var FACTORY_ADDRESS_MAP = V2_FACTORY_ADDRESSES;
41
+ var INIT_CODE_HASH = "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f";
42
+ var INIT_CODE_HASH_MAP = {
43
+ // Sepolia
44
+ 11155111: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
45
+ // Blast Sepolia
46
+ 168587773: "0x4b1dab7451c20e74482652f09a8ac942d2127aa266ba46f8ec97735f05664521",
47
+ // Blast Mainnet
48
+ 81457: "0x501ce753061ab6e75837b15f074633bb775f5972f8dc1112fcc829c2e88dc689",
49
+ // Ethereum Mainnet
50
+ 1: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
51
+ // unichain sepolia
52
+ 1301: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
53
+ // unichain
54
+ 130: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
55
+ // arbitrum sepolia
56
+ 421614: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
57
+ // base
58
+ 8453: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
59
+ // arbitrum mainnet
60
+ 42161: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
61
+ // story odysey
62
+ 1516: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
63
+ // story mainnet
64
+ 1514: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
65
+ // bnb chain
66
+ 56: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
67
+ // hyper mainnet
68
+ 999: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
69
+ // rootstock
70
+ 30: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
71
+ // polygon mainnet
72
+ 137: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
73
+ // optimism
74
+ 10: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
75
+ // avalanche
76
+ 43114: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
77
+ // worldchain
78
+ 480: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
79
+ // zksync
80
+ 324: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
81
+ // soneium
82
+ 1868: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
83
+ // zora
84
+ 7777777: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
85
+ // zora sepolia
86
+ 999999999: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
87
+ // celo
88
+ 42220: "0xa7ae6a5ec37f0c21bbdac560794258c4089b8ae3ffa6e3909b53c6091764a676",
89
+ // megaeth mainnet
90
+ 4326: "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"
91
+ };
92
+ var MINIMUM_LIQUIDITY = JSBI.BigInt(1e3);
93
+ var ZERO = JSBI.BigInt(0);
94
+ var ONE = JSBI.BigInt(1);
95
+ var FIVE = JSBI.BigInt(5);
96
+ var _997 = JSBI.BigInt(997);
97
+ var _1000 = JSBI.BigInt(1e3);
98
+ var BASIS_POINTS = JSBI.BigInt(1e4);
99
+ var ZERO_PERCENT = new Percent(ZERO);
100
+ var ONE_HUNDRED_PERCENT = new Percent(ONE);
101
+
102
+ // src/errors.ts
103
+ var CAN_SET_PROTOTYPE = "setPrototypeOf" in Object;
104
+ var InsufficientReservesError = class extends Error {
105
+ constructor() {
106
+ super();
107
+ this.isInsufficientReservesError = true;
108
+ this.name = this.constructor.name;
109
+ if (CAN_SET_PROTOTYPE) Object.setPrototypeOf(this, new.target.prototype);
110
+ }
111
+ };
112
+ var InsufficientInputAmountError = class extends Error {
113
+ constructor() {
114
+ super();
115
+ this.isInsufficientInputAmountError = true;
116
+ this.name = this.constructor.name;
117
+ if (CAN_SET_PROTOTYPE) Object.setPrototypeOf(this, new.target.prototype);
118
+ }
119
+ };
120
+
121
+ // src/entities/pair.ts
122
+ import { getCreate2Address } from "@ethersproject/address";
123
+ import { BigNumber } from "@ethersproject/bignumber";
124
+ import { keccak256, pack } from "@ethersproject/solidity";
125
+ import { CurrencyAmount, Percent as Percent2, Price, sqrt, Token } from "@ring-protocol/sdk-core";
126
+ import JSBI2 from "jsbi";
127
+ import invariant from "tiny-invariant";
128
+ var computePairAddress = ({
129
+ initCodeHash,
130
+ factoryAddress,
131
+ tokenA,
132
+ tokenB
133
+ }) => {
134
+ var _a;
135
+ const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];
136
+ const resolvedInitCodeHash = (_a = initCodeHash != null ? initCodeHash : INIT_CODE_HASH_MAP[token0.chainId]) != null ? _a : INIT_CODE_HASH;
137
+ return getCreate2Address(
138
+ factoryAddress,
139
+ keccak256(["bytes"], [pack(["address", "address"], [token0.address, token1.address])]),
140
+ resolvedInitCodeHash
141
+ );
142
+ };
143
+ var Pair = class _Pair {
144
+ static getAddress(tokenA, tokenB) {
145
+ var _a, _b;
146
+ const factoryAddress = (_a = FACTORY_ADDRESS_MAP[tokenA.chainId]) != null ? _a : FACTORY_ADDRESS;
147
+ return computePairAddress({
148
+ initCodeHash: (_b = INIT_CODE_HASH_MAP[tokenA.chainId]) != null ? _b : INIT_CODE_HASH,
149
+ factoryAddress,
150
+ tokenA,
151
+ tokenB
152
+ });
153
+ }
154
+ constructor(currencyAmountA, tokenAmountB) {
155
+ const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
156
+ this.liquidityToken = new Token(
157
+ tokenAmounts[0].currency.chainId,
158
+ _Pair.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),
159
+ 18,
160
+ "RING-V2",
161
+ "Ring V2"
162
+ );
163
+ this.tokenAmounts = tokenAmounts;
164
+ }
165
+ /**
166
+ * Returns true if the token is either token0 or token1
167
+ * @param token to check
168
+ */
169
+ involvesToken(token) {
170
+ return token.equals(this.token0) || token.equals(this.token1);
171
+ }
172
+ /**
173
+ * Returns the current mid price of the pair in terms of token0, i.e. the ratio of reserve1 to reserve0
174
+ */
175
+ get token0Price() {
176
+ const result = this.tokenAmounts[1].divide(this.tokenAmounts[0]);
177
+ return new Price(this.token0, this.token1, result.denominator, result.numerator);
178
+ }
179
+ /**
180
+ * Returns the current mid price of the pair in terms of token1, i.e. the ratio of reserve0 to reserve1
181
+ */
182
+ get token1Price() {
183
+ const result = this.tokenAmounts[0].divide(this.tokenAmounts[1]);
184
+ return new Price(this.token1, this.token0, result.denominator, result.numerator);
185
+ }
186
+ /**
187
+ * Return the price of the given token in terms of the other token in the pair.
188
+ * @param token token to return price of
189
+ */
190
+ priceOf(token) {
191
+ invariant(this.involvesToken(token), "TOKEN");
192
+ return token.equals(this.token0) ? this.token0Price : this.token1Price;
193
+ }
194
+ /**
195
+ * Returns the chain ID of the tokens in the pair.
196
+ */
197
+ get chainId() {
198
+ return this.token0.chainId;
199
+ }
200
+ get token0() {
201
+ return this.tokenAmounts[0].currency;
202
+ }
203
+ get token1() {
204
+ return this.tokenAmounts[1].currency;
205
+ }
206
+ get reserve0() {
207
+ return this.tokenAmounts[0];
208
+ }
209
+ get reserve1() {
210
+ return this.tokenAmounts[1];
211
+ }
212
+ reserveOf(token) {
213
+ invariant(this.involvesToken(token), "TOKEN");
214
+ return token.equals(this.token0) ? this.reserve0 : this.reserve1;
215
+ }
216
+ /**
217
+ * getAmountOut is the linear algebra of reserve ratio against amountIn:amountOut.
218
+ * https://ethereum.stackexchange.com/questions/101629/what-is-math-for-uniswap-calculates-the-amountout-and-amountin-why-997-and-1000
219
+ * has the math deduction for the reserve calculation without fee-on-transfer fees.
220
+ *
221
+ * With fee-on-transfer tax, intuitively it's just:
222
+ * inputAmountWithFeeAndTax = 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn
223
+ * = (1 - amountIn.sellFeesBips / 10000) * amountInWithFee
224
+ * where amountInWithFee is the amountIn after taking out the LP fees
225
+ * outputAmountWithTax = amountOut * (1 - amountOut.buyFeesBips / 10000)
226
+ *
227
+ * But we are illustrating the math deduction below to ensure that's the case.
228
+ *
229
+ * before swap A * B = K where A = reserveIn B = reserveOut
230
+ *
231
+ * after swap A' * B' = K where only k is a constant value
232
+ *
233
+ * getAmountOut
234
+ *
235
+ * A' = A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn # here 0.3% is deducted
236
+ * B' = B - amountOut * (1 - amountOut.buyFeesBips / 10000)
237
+ * amountOut = (B - B') / (1 - amountOut.buyFeesBips / 10000) # where A' * B' still is k
238
+ * = (B - K/(A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn))
239
+ * /
240
+ * (1 - amountOut.buyFeesBips / 10000)
241
+ * = (B - AB/(A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn))
242
+ * /
243
+ * (1 - amountOut.buyFeesBips / 10000)
244
+ * = ((BA + B * 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn - AB)/(A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn))
245
+ * /
246
+ * (1 - amountOut.buyFeesBips / 10000)
247
+ * = (B * 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn / (A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn)
248
+ * /
249
+ * (1 - amountOut.buyFeesBips / 10000)
250
+ * amountOut * (1 - amountOut.buyFeesBips / 10000) = (B * 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn
251
+ * /
252
+ * (A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn)
253
+ *
254
+ * outputAmountWithTax = (B * 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn
255
+ * /
256
+ * (A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn)
257
+ * = (B * 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn * 1000
258
+ * /
259
+ * ((A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn) * 1000)
260
+ * = (B * (1 - amountIn.sellFeesBips / 10000) 997 * * amountIn
261
+ * /
262
+ * (1000 * A + (1 - amountIn.sellFeesBips / 10000) * 997 * amountIn)
263
+ * = (B * (1 - amountIn.sellFeesBips / 10000) * inputAmountWithFee)
264
+ * /
265
+ * (1000 * A + (1 - amountIn.sellFeesBips / 10000) * inputAmountWithFee)
266
+ * = (B * inputAmountWithFeeAndTax)
267
+ * /
268
+ * (1000 * A + inputAmountWithFeeAndTax)
269
+ *
270
+ * inputAmountWithFeeAndTax = (1 - amountIn.sellFeesBips / 10000) * inputAmountWithFee
271
+ * outputAmountWithTax = amountOut * (1 - amountOut.buyFeesBips / 10000)
272
+ *
273
+ * @param inputAmount
274
+ * @param calculateFotFees
275
+ */
276
+ getOutputAmount(inputAmount, calculateFotFees = true) {
277
+ invariant(this.involvesToken(inputAmount.currency), "TOKEN");
278
+ if (JSBI2.equal(this.reserve0.quotient, ZERO) || JSBI2.equal(this.reserve1.quotient, ZERO)) {
279
+ throw new InsufficientReservesError();
280
+ }
281
+ const inputReserve = this.reserveOf(inputAmount.currency);
282
+ const outputReserve = this.reserveOf(inputAmount.currency.equals(this.token0) ? this.token1 : this.token0);
283
+ const percentAfterSellFees = calculateFotFees ? this.derivePercentAfterSellFees(inputAmount) : ZERO_PERCENT;
284
+ const inputAmountAfterTax = percentAfterSellFees.greaterThan(ZERO_PERCENT) ? CurrencyAmount.fromRawAmount(
285
+ inputAmount.currency,
286
+ percentAfterSellFees.multiply(inputAmount).quotient
287
+ // fraction.quotient will round down by itself, which is desired
288
+ ) : inputAmount;
289
+ const inputAmountWithFeeAndAfterTax = JSBI2.multiply(inputAmountAfterTax.quotient, _997);
290
+ const numerator = JSBI2.multiply(inputAmountWithFeeAndAfterTax, outputReserve.quotient);
291
+ const denominator = JSBI2.add(JSBI2.multiply(inputReserve.quotient, _1000), inputAmountWithFeeAndAfterTax);
292
+ const outputAmount = CurrencyAmount.fromRawAmount(
293
+ inputAmount.currency.equals(this.token0) ? this.token1 : this.token0,
294
+ JSBI2.divide(numerator, denominator)
295
+ // JSBI.divide will round down by itself, which is desired
296
+ );
297
+ if (JSBI2.equal(outputAmount.quotient, ZERO)) {
298
+ throw new InsufficientInputAmountError();
299
+ }
300
+ const percentAfterBuyFees = calculateFotFees ? this.derivePercentAfterBuyFees(outputAmount) : ZERO_PERCENT;
301
+ const outputAmountAfterTax = percentAfterBuyFees.greaterThan(ZERO_PERCENT) ? CurrencyAmount.fromRawAmount(
302
+ outputAmount.currency,
303
+ outputAmount.multiply(percentAfterBuyFees).quotient
304
+ // fraction.quotient will round down by itself, which is desired
305
+ ) : outputAmount;
306
+ if (JSBI2.equal(outputAmountAfterTax.quotient, ZERO)) {
307
+ throw new InsufficientInputAmountError();
308
+ }
309
+ return [
310
+ outputAmountAfterTax,
311
+ new _Pair(inputReserve.add(inputAmountAfterTax), outputReserve.subtract(outputAmountAfterTax))
312
+ ];
313
+ }
314
+ /**
315
+ * getAmountIn is the linear algebra of reserve ratio against amountIn:amountOut.
316
+ * https://ethereum.stackexchange.com/questions/101629/what-is-math-for-uniswap-calculates-the-amountout-and-amountin-why-997-and-1000
317
+ * has the math deduction for the reserve calculation without fee-on-transfer fees.
318
+ *
319
+ * With fee-on-transfer fees, intuitively it's just:
320
+ * outputAmountWithTax = amountOut / (1 - amountOut.buyFeesBips / 10000)
321
+ * inputAmountWithTax = amountIn / (1 - amountIn.sellFeesBips / 10000) / 0.997
322
+ *
323
+ * But we are illustrating the math deduction below to ensure that's the case.
324
+ *
325
+ * before swap A * B = K where A = reserveIn B = reserveOut
326
+ *
327
+ * after swap A' * B' = K where only k is a constant value
328
+ *
329
+ * getAmountIn
330
+ *
331
+ * B' = B - amountOut * (1 - amountOut.buyFeesBips / 10000)
332
+ * A' = A + 0.997 * (1 - amountIn.sellFeesBips / 10000) * amountIn # here 0.3% is deducted
333
+ * amountIn = (A' - A) / (0.997 * (1 - amountIn.sellFeesBips / 10000))
334
+ * = (K / (B - amountOut / (1 - amountOut.buyFeesBips / 10000)) - A)
335
+ * /
336
+ * (0.997 * (1 - amountIn.sellFeesBips / 10000))
337
+ * = (AB / (B - amountOut / (1 - amountOut.buyFeesBips / 10000)) - A)
338
+ * /
339
+ * (0.997 * (1 - amountIn.sellFeesBips / 10000))
340
+ * = ((AB - AB + A * amountOut / (1 - amountOut.buyFeesBips / 10000)) / (B - amountOut / (1 - amountOut.buyFeesBips / 10000)))
341
+ * /
342
+ * (0.997 * (1 - amountIn.sellFeesBips / 10000))
343
+ * = ((A * amountOut / (1 - amountOut.buyFeesBips / 10000)) / (B - amountOut / (1 - amountOut.buyFeesBips / 10000)))
344
+ * /
345
+ * (0.997 * (1 - amountIn.sellFeesBips / 10000))
346
+ * = ((A * 1000 * amountOut / (1 - amountOut.buyFeesBips / 10000)) / (B - amountOut / (1 - amountOut.buyFeesBips / 10000)))
347
+ * /
348
+ * (997 * (1 - amountIn.sellFeesBips / 10000))
349
+ *
350
+ * outputAmountWithTax = amountOut / (1 - amountOut.buyFeesBips / 10000)
351
+ * inputAmountWithTax = amountIn / (997 * (1 - amountIn.sellFeesBips / 10000))
352
+ * = (A * outputAmountWithTax * 1000) / ((B - outputAmountWithTax) * 997)
353
+ *
354
+ * @param outputAmount
355
+ */
356
+ getInputAmount(outputAmount, calculateFotFees = true) {
357
+ invariant(this.involvesToken(outputAmount.currency), "TOKEN");
358
+ const percentAfterBuyFees = calculateFotFees ? this.derivePercentAfterBuyFees(outputAmount) : ZERO_PERCENT;
359
+ const outputAmountBeforeTax = percentAfterBuyFees.greaterThan(ZERO_PERCENT) ? CurrencyAmount.fromRawAmount(
360
+ outputAmount.currency,
361
+ JSBI2.add(outputAmount.divide(percentAfterBuyFees).quotient, ONE)
362
+ // add 1 for rounding up
363
+ ) : outputAmount;
364
+ if (JSBI2.equal(this.reserve0.quotient, ZERO) || JSBI2.equal(this.reserve1.quotient, ZERO) || JSBI2.greaterThanOrEqual(outputAmount.quotient, this.reserveOf(outputAmount.currency).quotient) || JSBI2.greaterThanOrEqual(outputAmountBeforeTax.quotient, this.reserveOf(outputAmount.currency).quotient)) {
365
+ throw new InsufficientReservesError();
366
+ }
367
+ const outputReserve = this.reserveOf(outputAmount.currency);
368
+ const inputReserve = this.reserveOf(outputAmount.currency.equals(this.token0) ? this.token1 : this.token0);
369
+ const numerator = JSBI2.multiply(JSBI2.multiply(inputReserve.quotient, outputAmountBeforeTax.quotient), _1000);
370
+ const denominator = JSBI2.multiply(JSBI2.subtract(outputReserve.quotient, outputAmountBeforeTax.quotient), _997);
371
+ const inputAmount = CurrencyAmount.fromRawAmount(
372
+ outputAmount.currency.equals(this.token0) ? this.token1 : this.token0,
373
+ JSBI2.add(JSBI2.divide(numerator, denominator), ONE)
374
+ // add 1 here is part of the formula, no rounding needed here, since there will not be decimal at this point
375
+ );
376
+ const percentAfterSellFees = calculateFotFees ? this.derivePercentAfterSellFees(inputAmount) : ZERO_PERCENT;
377
+ const inputAmountBeforeTax = percentAfterSellFees.greaterThan(ZERO_PERCENT) ? CurrencyAmount.fromRawAmount(
378
+ inputAmount.currency,
379
+ JSBI2.add(inputAmount.divide(percentAfterSellFees).quotient, ONE)
380
+ // add 1 for rounding up
381
+ ) : inputAmount;
382
+ return [inputAmountBeforeTax, new _Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
383
+ }
384
+ getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
385
+ invariant(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
386
+ const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
387
+ invariant(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
388
+ let liquidity;
389
+ if (JSBI2.equal(totalSupply.quotient, ZERO)) {
390
+ liquidity = JSBI2.subtract(
391
+ sqrt(JSBI2.multiply(tokenAmounts[0].quotient, tokenAmounts[1].quotient)),
392
+ MINIMUM_LIQUIDITY
393
+ );
394
+ } else {
395
+ const amount0 = JSBI2.divide(JSBI2.multiply(tokenAmounts[0].quotient, totalSupply.quotient), this.reserve0.quotient);
396
+ const amount1 = JSBI2.divide(JSBI2.multiply(tokenAmounts[1].quotient, totalSupply.quotient), this.reserve1.quotient);
397
+ liquidity = JSBI2.lessThanOrEqual(amount0, amount1) ? amount0 : amount1;
398
+ }
399
+ if (!JSBI2.greaterThan(liquidity, ZERO)) {
400
+ throw new InsufficientInputAmountError();
401
+ }
402
+ return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
403
+ }
404
+ getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
405
+ invariant(this.involvesToken(token), "TOKEN");
406
+ invariant(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
407
+ invariant(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
408
+ invariant(JSBI2.lessThanOrEqual(liquidity.quotient, totalSupply.quotient), "LIQUIDITY");
409
+ let totalSupplyAdjusted;
410
+ if (!feeOn) {
411
+ totalSupplyAdjusted = totalSupply;
412
+ } else {
413
+ invariant(!!kLast, "K_LAST");
414
+ const kLastParsed = JSBI2.BigInt(kLast);
415
+ if (!JSBI2.equal(kLastParsed, ZERO)) {
416
+ const rootK = sqrt(JSBI2.multiply(this.reserve0.quotient, this.reserve1.quotient));
417
+ const rootKLast = sqrt(kLastParsed);
418
+ if (JSBI2.greaterThan(rootK, rootKLast)) {
419
+ const numerator = JSBI2.multiply(totalSupply.quotient, JSBI2.subtract(rootK, rootKLast));
420
+ const denominator = JSBI2.add(JSBI2.multiply(rootK, FIVE), rootKLast);
421
+ const feeLiquidity = JSBI2.divide(numerator, denominator);
422
+ totalSupplyAdjusted = totalSupply.add(CurrencyAmount.fromRawAmount(this.liquidityToken, feeLiquidity));
423
+ } else {
424
+ totalSupplyAdjusted = totalSupply;
425
+ }
426
+ } else {
427
+ totalSupplyAdjusted = totalSupply;
428
+ }
429
+ }
430
+ return CurrencyAmount.fromRawAmount(
431
+ token,
432
+ JSBI2.divide(JSBI2.multiply(liquidity.quotient, this.reserveOf(token).quotient), totalSupplyAdjusted.quotient)
433
+ );
434
+ }
435
+ derivePercentAfterSellFees(inputAmount) {
436
+ const sellFeeBips = this.token0.wrapped.equals(inputAmount.wrapped.currency) ? this.token0.wrapped.sellFeeBps : this.token1.wrapped.sellFeeBps;
437
+ if (sellFeeBips == null ? void 0 : sellFeeBips.gt(BigNumber.from(0))) {
438
+ return ONE_HUNDRED_PERCENT.subtract(new Percent2(JSBI2.BigInt(sellFeeBips)).divide(BASIS_POINTS));
439
+ } else {
440
+ return ZERO_PERCENT;
441
+ }
442
+ }
443
+ derivePercentAfterBuyFees(outputAmount) {
444
+ const buyFeeBps = this.token0.wrapped.equals(outputAmount.wrapped.currency) ? this.token0.wrapped.buyFeeBps : this.token1.wrapped.buyFeeBps;
445
+ if (buyFeeBps == null ? void 0 : buyFeeBps.gt(BigNumber.from(0))) {
446
+ return ONE_HUNDRED_PERCENT.subtract(new Percent2(JSBI2.BigInt(buyFeeBps)).divide(BASIS_POINTS));
447
+ } else {
448
+ return ZERO_PERCENT;
449
+ }
450
+ }
451
+ };
452
+
453
+ // src/entities/route.ts
454
+ import invariant2 from "tiny-invariant";
455
+ import { Price as Price2 } from "@ring-protocol/sdk-core";
456
+
457
+ // src/fewToken.ts
458
+ import { Token as Token2 } from "@ring-protocol/sdk-core";
459
+ import { utils } from "ethers/lib";
460
+
461
+ // src/abis/BlastSepoliaFewWrappedToken.json
462
+ var BlastSepoliaFewWrappedToken_default = {
463
+ _format: "hh-sol-artifact-1",
464
+ contractName: "FewWrappedToken",
465
+ sourceName: "contracts/FewWrappedToken.sol",
466
+ abi: [
467
+ {
468
+ inputs: [],
469
+ stateMutability: "nonpayable",
470
+ type: "constructor"
471
+ },
472
+ {
473
+ anonymous: false,
474
+ inputs: [
475
+ {
476
+ indexed: true,
477
+ internalType: "address",
478
+ name: "owner",
479
+ type: "address"
480
+ },
481
+ {
482
+ indexed: true,
483
+ internalType: "address",
484
+ name: "spender",
485
+ type: "address"
486
+ },
487
+ {
488
+ indexed: false,
489
+ internalType: "uint256",
490
+ name: "value",
491
+ type: "uint256"
492
+ }
493
+ ],
494
+ name: "Approval",
495
+ type: "event"
496
+ },
497
+ {
498
+ anonymous: false,
499
+ inputs: [
500
+ {
501
+ indexed: true,
502
+ internalType: "address",
503
+ name: "burner",
504
+ type: "address"
505
+ },
506
+ {
507
+ indexed: false,
508
+ internalType: "uint256",
509
+ name: "amount",
510
+ type: "uint256"
511
+ },
512
+ {
513
+ indexed: true,
514
+ internalType: "address",
515
+ name: "to",
516
+ type: "address"
517
+ }
518
+ ],
519
+ name: "Burn",
520
+ type: "event"
521
+ },
522
+ {
523
+ anonymous: false,
524
+ inputs: [
525
+ {
526
+ indexed: true,
527
+ internalType: "address",
528
+ name: "minter",
529
+ type: "address"
530
+ },
531
+ {
532
+ indexed: false,
533
+ internalType: "uint256",
534
+ name: "amount",
535
+ type: "uint256"
536
+ },
537
+ {
538
+ indexed: true,
539
+ internalType: "address",
540
+ name: "to",
541
+ type: "address"
542
+ }
543
+ ],
544
+ name: "Mint",
545
+ type: "event"
546
+ },
547
+ {
548
+ anonymous: false,
549
+ inputs: [
550
+ {
551
+ indexed: true,
552
+ internalType: "address",
553
+ name: "from",
554
+ type: "address"
555
+ },
556
+ {
557
+ indexed: true,
558
+ internalType: "address",
559
+ name: "to",
560
+ type: "address"
561
+ },
562
+ {
563
+ indexed: false,
564
+ internalType: "uint256",
565
+ name: "value",
566
+ type: "uint256"
567
+ }
568
+ ],
569
+ name: "Transfer",
570
+ type: "event"
571
+ },
572
+ {
573
+ anonymous: false,
574
+ inputs: [
575
+ {
576
+ indexed: true,
577
+ internalType: "address",
578
+ name: "sender",
579
+ type: "address"
580
+ },
581
+ {
582
+ indexed: false,
583
+ internalType: "uint256",
584
+ name: "amount",
585
+ type: "uint256"
586
+ },
587
+ {
588
+ indexed: true,
589
+ internalType: "address",
590
+ name: "to",
591
+ type: "address"
592
+ }
593
+ ],
594
+ name: "Unwrap",
595
+ type: "event"
596
+ },
597
+ {
598
+ anonymous: false,
599
+ inputs: [
600
+ {
601
+ indexed: true,
602
+ internalType: "address",
603
+ name: "sender",
604
+ type: "address"
605
+ },
606
+ {
607
+ indexed: false,
608
+ internalType: "uint256",
609
+ name: "amount",
610
+ type: "uint256"
611
+ },
612
+ {
613
+ indexed: true,
614
+ internalType: "address",
615
+ name: "to",
616
+ type: "address"
617
+ }
618
+ ],
619
+ name: "Wrap",
620
+ type: "event"
621
+ },
622
+ {
623
+ inputs: [],
624
+ name: "DOMAIN_SEPARATOR",
625
+ outputs: [
626
+ {
627
+ internalType: "bytes32",
628
+ name: "",
629
+ type: "bytes32"
630
+ }
631
+ ],
632
+ stateMutability: "view",
633
+ type: "function"
634
+ },
635
+ {
636
+ inputs: [],
637
+ name: "PERMIT_TYPEHASH",
638
+ outputs: [
639
+ {
640
+ internalType: "bytes32",
641
+ name: "",
642
+ type: "bytes32"
643
+ }
644
+ ],
645
+ stateMutability: "view",
646
+ type: "function"
647
+ },
648
+ {
649
+ inputs: [
650
+ {
651
+ internalType: "address",
652
+ name: "",
653
+ type: "address"
654
+ },
655
+ {
656
+ internalType: "address",
657
+ name: "",
658
+ type: "address"
659
+ }
660
+ ],
661
+ name: "allowance",
662
+ outputs: [
663
+ {
664
+ internalType: "uint256",
665
+ name: "",
666
+ type: "uint256"
667
+ }
668
+ ],
669
+ stateMutability: "view",
670
+ type: "function"
671
+ },
672
+ {
673
+ inputs: [
674
+ {
675
+ internalType: "address",
676
+ name: "spender",
677
+ type: "address"
678
+ },
679
+ {
680
+ internalType: "uint256",
681
+ name: "value",
682
+ type: "uint256"
683
+ }
684
+ ],
685
+ name: "approve",
686
+ outputs: [
687
+ {
688
+ internalType: "bool",
689
+ name: "",
690
+ type: "bool"
691
+ }
692
+ ],
693
+ stateMutability: "nonpayable",
694
+ type: "function"
695
+ },
696
+ {
697
+ inputs: [
698
+ {
699
+ internalType: "address",
700
+ name: "",
701
+ type: "address"
702
+ }
703
+ ],
704
+ name: "balanceOf",
705
+ outputs: [
706
+ {
707
+ internalType: "uint256",
708
+ name: "",
709
+ type: "uint256"
710
+ }
711
+ ],
712
+ stateMutability: "view",
713
+ type: "function"
714
+ },
715
+ {
716
+ inputs: [
717
+ {
718
+ internalType: "uint256",
719
+ name: "amount",
720
+ type: "uint256"
721
+ }
722
+ ],
723
+ name: "burn",
724
+ outputs: [],
725
+ stateMutability: "nonpayable",
726
+ type: "function"
727
+ },
728
+ {
729
+ inputs: [
730
+ {
731
+ internalType: "address",
732
+ name: "account",
733
+ type: "address"
734
+ },
735
+ {
736
+ internalType: "uint256",
737
+ name: "amount",
738
+ type: "uint256"
739
+ }
740
+ ],
741
+ name: "burnFrom",
742
+ outputs: [],
743
+ stateMutability: "nonpayable",
744
+ type: "function"
745
+ },
746
+ {
747
+ inputs: [
748
+ {
749
+ internalType: "address",
750
+ name: "recipient",
751
+ type: "address"
752
+ }
753
+ ],
754
+ name: "claimMaxGas",
755
+ outputs: [
756
+ {
757
+ internalType: "uint256",
758
+ name: "",
759
+ type: "uint256"
760
+ }
761
+ ],
762
+ stateMutability: "nonpayable",
763
+ type: "function"
764
+ },
765
+ {
766
+ inputs: [],
767
+ name: "decimals",
768
+ outputs: [
769
+ {
770
+ internalType: "uint8",
771
+ name: "",
772
+ type: "uint8"
773
+ }
774
+ ],
775
+ stateMutability: "view",
776
+ type: "function"
777
+ },
778
+ {
779
+ inputs: [],
780
+ name: "factory",
781
+ outputs: [
782
+ {
783
+ internalType: "address",
784
+ name: "",
785
+ type: "address"
786
+ }
787
+ ],
788
+ stateMutability: "view",
789
+ type: "function"
790
+ },
791
+ {
792
+ inputs: [
793
+ {
794
+ internalType: "address",
795
+ name: "account",
796
+ type: "address"
797
+ },
798
+ {
799
+ internalType: "uint256",
800
+ name: "amount",
801
+ type: "uint256"
802
+ }
803
+ ],
804
+ name: "mint",
805
+ outputs: [],
806
+ stateMutability: "nonpayable",
807
+ type: "function"
808
+ },
809
+ {
810
+ inputs: [],
811
+ name: "name",
812
+ outputs: [
813
+ {
814
+ internalType: "string",
815
+ name: "",
816
+ type: "string"
817
+ }
818
+ ],
819
+ stateMutability: "view",
820
+ type: "function"
821
+ },
822
+ {
823
+ inputs: [
824
+ {
825
+ internalType: "address",
826
+ name: "",
827
+ type: "address"
828
+ }
829
+ ],
830
+ name: "nonces",
831
+ outputs: [
832
+ {
833
+ internalType: "uint256",
834
+ name: "",
835
+ type: "uint256"
836
+ }
837
+ ],
838
+ stateMutability: "view",
839
+ type: "function"
840
+ },
841
+ {
842
+ inputs: [
843
+ {
844
+ internalType: "address",
845
+ name: "owner",
846
+ type: "address"
847
+ },
848
+ {
849
+ internalType: "address",
850
+ name: "spender",
851
+ type: "address"
852
+ },
853
+ {
854
+ internalType: "uint256",
855
+ name: "value",
856
+ type: "uint256"
857
+ },
858
+ {
859
+ internalType: "uint256",
860
+ name: "deadline",
861
+ type: "uint256"
862
+ },
863
+ {
864
+ internalType: "uint8",
865
+ name: "v",
866
+ type: "uint8"
867
+ },
868
+ {
869
+ internalType: "bytes32",
870
+ name: "r",
871
+ type: "bytes32"
872
+ },
873
+ {
874
+ internalType: "bytes32",
875
+ name: "s",
876
+ type: "bytes32"
877
+ }
878
+ ],
879
+ name: "permit",
880
+ outputs: [],
881
+ stateMutability: "nonpayable",
882
+ type: "function"
883
+ },
884
+ {
885
+ inputs: [],
886
+ name: "symbol",
887
+ outputs: [
888
+ {
889
+ internalType: "string",
890
+ name: "",
891
+ type: "string"
892
+ }
893
+ ],
894
+ stateMutability: "view",
895
+ type: "function"
896
+ },
897
+ {
898
+ inputs: [],
899
+ name: "token",
900
+ outputs: [
901
+ {
902
+ internalType: "address",
903
+ name: "",
904
+ type: "address"
905
+ }
906
+ ],
907
+ stateMutability: "view",
908
+ type: "function"
909
+ },
910
+ {
911
+ inputs: [],
912
+ name: "totalSupply",
913
+ outputs: [
914
+ {
915
+ internalType: "uint256",
916
+ name: "",
917
+ type: "uint256"
918
+ }
919
+ ],
920
+ stateMutability: "view",
921
+ type: "function"
922
+ },
923
+ {
924
+ inputs: [
925
+ {
926
+ internalType: "address",
927
+ name: "to",
928
+ type: "address"
929
+ },
930
+ {
931
+ internalType: "uint256",
932
+ name: "value",
933
+ type: "uint256"
934
+ }
935
+ ],
936
+ name: "transfer",
937
+ outputs: [
938
+ {
939
+ internalType: "bool",
940
+ name: "",
941
+ type: "bool"
942
+ }
943
+ ],
944
+ stateMutability: "nonpayable",
945
+ type: "function"
946
+ },
947
+ {
948
+ inputs: [
949
+ {
950
+ internalType: "address",
951
+ name: "from",
952
+ type: "address"
953
+ },
954
+ {
955
+ internalType: "address",
956
+ name: "to",
957
+ type: "address"
958
+ },
959
+ {
960
+ internalType: "uint256",
961
+ name: "value",
962
+ type: "uint256"
963
+ }
964
+ ],
965
+ name: "transferFrom",
966
+ outputs: [
967
+ {
968
+ internalType: "bool",
969
+ name: "",
970
+ type: "bool"
971
+ }
972
+ ],
973
+ stateMutability: "nonpayable",
974
+ type: "function"
975
+ },
976
+ {
977
+ inputs: [
978
+ {
979
+ internalType: "uint256",
980
+ name: "amount",
981
+ type: "uint256"
982
+ }
983
+ ],
984
+ name: "unwrap",
985
+ outputs: [
986
+ {
987
+ internalType: "uint256",
988
+ name: "",
989
+ type: "uint256"
990
+ }
991
+ ],
992
+ stateMutability: "nonpayable",
993
+ type: "function"
994
+ },
995
+ {
996
+ inputs: [
997
+ {
998
+ internalType: "uint256",
999
+ name: "amount",
1000
+ type: "uint256"
1001
+ },
1002
+ {
1003
+ internalType: "address",
1004
+ name: "to",
1005
+ type: "address"
1006
+ }
1007
+ ],
1008
+ name: "unwrapTo",
1009
+ outputs: [
1010
+ {
1011
+ internalType: "uint256",
1012
+ name: "",
1013
+ type: "uint256"
1014
+ }
1015
+ ],
1016
+ stateMutability: "nonpayable",
1017
+ type: "function"
1018
+ },
1019
+ {
1020
+ inputs: [
1021
+ {
1022
+ internalType: "uint256",
1023
+ name: "amount",
1024
+ type: "uint256"
1025
+ }
1026
+ ],
1027
+ name: "wrap",
1028
+ outputs: [
1029
+ {
1030
+ internalType: "uint256",
1031
+ name: "",
1032
+ type: "uint256"
1033
+ }
1034
+ ],
1035
+ stateMutability: "nonpayable",
1036
+ type: "function"
1037
+ },
1038
+ {
1039
+ inputs: [
1040
+ {
1041
+ internalType: "uint256",
1042
+ name: "amount",
1043
+ type: "uint256"
1044
+ },
1045
+ {
1046
+ internalType: "address",
1047
+ name: "to",
1048
+ type: "address"
1049
+ }
1050
+ ],
1051
+ name: "wrapTo",
1052
+ outputs: [
1053
+ {
1054
+ internalType: "uint256",
1055
+ name: "",
1056
+ type: "uint256"
1057
+ }
1058
+ ],
1059
+ stateMutability: "nonpayable",
1060
+ type: "function"
1061
+ }
1062
+ ],
1063
+ bytecode: "0x60806040523480156200001157600080fd5b50604051469080605262002489823960520190506040518091039020600060405180828054600181600116156101000203166002900480156200008e5780601f106200006b5761010080835404028352918201916200008e565b820191906000526020600020905b81548152906001019060200180831162000079575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060860152608085018690523060a0808701919091528151808703909101815260c08601808352815191840191909120600555600780546001600160a01b0319163390811790915563ad4d4e2960e01b9091529051909463ad4d4e29945060c4808201945090829003018186803b1580156200015757600080fd5b505afa1580156200016c573d6000803e3d6000fd5b505050506040513d60208110156200018357600080fd5b5051600880546001600160a01b0319166001600160a01b039283161790819055604080516306fdde0360e01b8152905191909216916306fdde03916004808301926000929190829003018186803b158015620001de57600080fd5b505afa158015620001f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200021d57600080fd5b81019080805160405193929190846401000000008211156200023e57600080fd5b9083019060208201858111156200025457600080fd5b82516401000000008111828201881017156200026f57600080fd5b82525081516020918201929091019080838360005b838110156200029e57818101518382015260200162000284565b50505050905090810190601f168015620002cc5780820380516001836020036101000a031916815260200191505b5060405250508151620002e7926000925060200190620005f3565b50600060405160200180806b02332bb902bb930b83832b2160a51b815250600c0182805460018160011615610100020316600290048015620003635780601f106200034057610100808354040283529182019162000363565b820191906000526020600020905b8154815290600101906020018083116200034e575b505060408051601f1981840301815291905280516200038d935060009250602090910190620005f3565b50600860009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003dd57600080fd5b505afa158015620003f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200041c57600080fd5b81019080805160405193929190846401000000008211156200043d57600080fd5b9083019060208201858111156200045357600080fd5b82516401000000008111828201881017156200046e57600080fd5b82525081516020918201929091019080838360005b838110156200049d57818101518382015260200162000483565b50505050905090810190601f168015620004cb5780820380516001836020036101000a031916815260200191505b5060405250508151620004e6926001925060200190620005f3565b506001604051602001808061667760f01b81525060020182805460018160011615610100020316600290048015620005585780601f106200053557610100808354040283529182019162000558565b820191906000526020600020905b81548152906001019060200180831162000543575b505060408051601f19818403018152919052805162000582935060019250602090910190620005f3565b507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620005d357600080fd5b505af1158015620005e8573d6000803e3d6000fd5b505050505062000698565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200063657805160ff191683800117855562000666565b8280016001018555821562000666579182015b828111156200066657825182559160200191906001019062000649565b506200067492915062000678565b5090565b6200069591905b808211156200067457600081556001016200067f565b90565b611de180620006a86000396000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806370a08231116100e3578063cd2002f51161008c578063de0e9a3e11610066578063de0e9a3e1461058e578063ea598cb0146105ab578063fc0c546a146105c85761018d565b8063cd2002f5146104c2578063d505accf146104f5578063dd62ed3e146105535761018d565b806395d89b41116100bd57806395d89b4114610450578063a9059cbb14610458578063c45a0155146104915761018d565b806370a08231146103b157806379cc6790146103e45780637ecebe001461041d5761018d565b806330adf81f1161014557806340c10f191161011f57806340c10f191461032057806342966c681461035b5780635dbd6059146103785761018d565b806330adf81f146102f2578063313ce567146102fa5780633644e515146103185761018d565b806318160ddd1161017657806318160ddd1461025c57806323b872dd1461027657806326599850146102b95761018d565b806306fdde0314610192578063095ea7b31461020f575b600080fd5b61019a6105d0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d45781810151838201526020016101bc565b50505050905090810190601f1680156102015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102486004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561067c565b604080519115158252519081900360200190f35b610264610693565b60408051918252519081900360200190f35b6102486004803603606081101561028c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610699565b610264600480360360408110156102cf57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610778565b61026461086b565b61030261088f565b6040805160ff9092168252519081900360200190f35b610264610894565b6103596004803603604081101561033657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561089a565b005b6103596004803603602081101561037157600080fd5b5035610b8e565b6102646004803603604081101561038e57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610bd2565b610264600480360360208110156103c757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cae565b610359600480360360408110156103fa57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610cc0565b6102646004803603602081101561043357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fb4565b61019a610fc6565b6102486004803603604081101561046e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561103e565b61049961104b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610264600480360360208110156104d857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611067565b610359600480360360e081101561050b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356112ac565b6102646004803603604081101561056957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611578565b610264600480360360208110156105a457600080fd5b5035611595565b610264600480360360208110156105c157600080fd5b50356115a1565b6104996115ad565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106745780601f1061064957610100808354040283529160200191610674565b820191906000526020600020905b81548152906001019060200180831161065757829003601f168201915b505050505081565b60006106893384846115c9565b5060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107635773ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054610731908363ffffffff61163816565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083203384529091529020555b61076e8484846116aa565b5060019392505050565b60008083116107e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b60085461080d9073ffffffffffffffffffffffffffffffffffffffff1633308661178b565b610817828461195b565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b15801561090257600080fd5b505afa158015610916573d6000803e3d6000fd5b505050506040513d602081101561092c57600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b15801561099c57600080fd5b505afa1580156109b0573d6000803e3d6000fd5b505050506040513d60208110156109c657600080fd5b5051610a3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9b57600080fd5b505afa158015610aaf573d6000803e3d6000fd5b505050506040513d6020811015610ac557600080fd5b505115610b3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610b3d828261195b565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610b983382611a0c565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b6000808311610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611d3b6023913960400191505060405180910390fd5b610c363384611a0c565b600854610c5a9073ffffffffffffffffffffffffffffffffffffffff168385611ad0565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60036020526000908152604090205481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d6020811015610d5257600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b158015610dc257600080fd5b505afa158015610dd6573d6000803e3d6000fd5b505050506040513d6020811015610dec57600080fd5b5051610e5957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec157600080fd5b505afa158015610ed5573d6000803e3d6000fd5b505050506040513d6020811015610eeb57600080fd5b505115610f5957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610f638282611a0c565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60066020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106745780601f1061064957610100808354040283529160200191610674565b60006106893384846116aa565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b600754604080517ff2f4eb26000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f2f4eb26916004808301926020929190829003018186803b1580156110d257600080fd5b505afa1580156110e6573d6000803e3d6000fd5b505050506040513d60208110156110fc57600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d602081101561119657600080fd5b50516111ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611d5e6021913960400191505060405180910390fd5b604080517f662aa11d00000000000000000000000000000000000000000000000000000000815260006004820181905273ffffffffffffffffffffffffffffffffffffffff8516602483015291517343000000000000000000000000000000000000029263662aa11d92604480820193602093909283900390910190829087803b15801561127a57600080fd5b505af115801561128e573d6000803e3d6000fd5b505050506040513d60208110156112a457600080fd5b505192915050565b4284101561131b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff80891660008181526006602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa15801561147c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906114f757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b61156d8989896115c9565b505050505050505050565b600460209081526000928352604080842090915290825290205481565b600061068d8233610bd2565b600061068d8233610778565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561068d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020546116e0908263ffffffff61163816565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600360205260408082209390935590841681522054611722908263ffffffff611c9716565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061186957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161182c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146118cb576040519150601f19603f3d011682016040523d82523d6000602084013e6118d0565b606091505b50915091508180156118fe5750805115806118fe57508080602001905160208110156118fb57600080fd5b50515b611953576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611d0a6031913960400191505060405180910390fd5b505050505050565b60025461196e908263ffffffff611c9716565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546119a7908263ffffffff611c9716565b73ffffffffffffffffffffffffffffffffffffffff831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054611a42908263ffffffff61163816565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902055600254611a7b908263ffffffff61163816565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310611ba657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b69565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c08576040519150601f19603f3d011682016040523d82523d6000602084013e611c0d565b606091505b5091509150818015611c3b575080511580611c3b5750808060200190516020811015611c3857600080fd5b50515b611c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611d7f602d913960400191505060405180910390fd5b5050505050565b8082018281101561068d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f776564436f72655265663a2043616c6c6572206973206e6f74206120676f7665726e6f725472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220d7fd196a2dee0bd2daa50f4be8ce4153534129a912325a54effe1fa17da46a6e64736f6c63430006060033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
1064
+ deployedBytecode: "0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806370a08231116100e3578063cd2002f51161008c578063de0e9a3e11610066578063de0e9a3e1461058e578063ea598cb0146105ab578063fc0c546a146105c85761018d565b8063cd2002f5146104c2578063d505accf146104f5578063dd62ed3e146105535761018d565b806395d89b41116100bd57806395d89b4114610450578063a9059cbb14610458578063c45a0155146104915761018d565b806370a08231146103b157806379cc6790146103e45780637ecebe001461041d5761018d565b806330adf81f1161014557806340c10f191161011f57806340c10f191461032057806342966c681461035b5780635dbd6059146103785761018d565b806330adf81f146102f2578063313ce567146102fa5780633644e515146103185761018d565b806318160ddd1161017657806318160ddd1461025c57806323b872dd1461027657806326599850146102b95761018d565b806306fdde0314610192578063095ea7b31461020f575b600080fd5b61019a6105d0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d45781810151838201526020016101bc565b50505050905090810190601f1680156102015780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102486004803603604081101561022557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561067c565b604080519115158252519081900360200190f35b610264610693565b60408051918252519081900360200190f35b6102486004803603606081101561028c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610699565b610264600480360360408110156102cf57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610778565b61026461086b565b61030261088f565b6040805160ff9092168252519081900360200190f35b610264610894565b6103596004803603604081101561033657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561089a565b005b6103596004803603602081101561037157600080fd5b5035610b8e565b6102646004803603604081101561038e57600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610bd2565b610264600480360360208110156103c757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cae565b610359600480360360408110156103fa57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610cc0565b6102646004803603602081101561043357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fb4565b61019a610fc6565b6102486004803603604081101561046e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561103e565b61049961104b565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b610264600480360360208110156104d857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611067565b610359600480360360e081101561050b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356112ac565b6102646004803603604081101561056957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611578565b610264600480360360208110156105a457600080fd5b5035611595565b610264600480360360208110156105c157600080fd5b50356115a1565b6104996115ad565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106745780601f1061064957610100808354040283529160200191610674565b820191906000526020600020905b81548152906001019060200180831161065757829003601f168201915b505050505081565b60006106893384846115c9565b5060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107635773ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152902054610731908363ffffffff61163816565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083203384529091529020555b61076e8484846116aa565b5060019392505050565b60008083116107e857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b60085461080d9073ffffffffffffffffffffffffffffffffffffffff1633308661178b565b610817828461195b565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b15801561090257600080fd5b505afa158015610916573d6000803e3d6000fd5b505050506040513d602081101561092c57600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b15801561099c57600080fd5b505afa1580156109b0573d6000803e3d6000fd5b505050506040513d60208110156109c657600080fd5b5051610a3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a9b57600080fd5b505afa158015610aaf573d6000803e3d6000fd5b505050506040513d6020811015610ac557600080fd5b505115610b3357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610b3d828261195b565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610b983382611a0c565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b6000808311610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611d3b6023913960400191505060405180910390fd5b610c363384611a0c565b600854610c5a9073ffffffffffffffffffffffffffffffffffffffff168385611ad0565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60036020526000908152604090205481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d6020811015610d5257600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b158015610dc257600080fd5b505afa158015610dd6573d6000803e3d6000fd5b505050506040513d6020811015610dec57600080fd5b5051610e5957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ec157600080fd5b505afa158015610ed5573d6000803e3d6000fd5b505050506040513d6020811015610eeb57600080fd5b505115610f5957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610f638282611a0c565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60066020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106745780601f1061064957610100808354040283529160200191610674565b60006106893384846116aa565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b600754604080517ff2f4eb26000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f2f4eb26916004808301926020929190829003018186803b1580156110d257600080fd5b505afa1580156110e6573d6000803e3d6000fd5b505050506040513d60208110156110fc57600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b15801561116c57600080fd5b505afa158015611180573d6000803e3d6000fd5b505050506040513d602081101561119657600080fd5b50516111ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180611d5e6021913960400191505060405180910390fd5b604080517f662aa11d00000000000000000000000000000000000000000000000000000000815260006004820181905273ffffffffffffffffffffffffffffffffffffffff8516602483015291517343000000000000000000000000000000000000029263662aa11d92604480820193602093909283900390910190829087803b15801561127a57600080fd5b505af115801561128e573d6000803e3d6000fd5b505050506040513d60208110156112a457600080fd5b505192915050565b4284101561131b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff80891660008181526006602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa15801561147c573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906114f757508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61156257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b61156d8989896115c9565b505050505050505050565b600460209081526000928352604080842090915290825290205481565b600061068d8233610bd2565b600061068d8233610778565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561068d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020546116e0908263ffffffff61163816565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600360205260408082209390935590841681522054611722908263ffffffff611c9716565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061186957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161182c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146118cb576040519150601f19603f3d011682016040523d82523d6000602084013e6118d0565b606091505b50915091508180156118fe5750805115806118fe57508080602001905160208110156118fb57600080fd5b50515b611953576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611d0a6031913960400191505060405180910390fd5b505050505050565b60025461196e908263ffffffff611c9716565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546119a7908263ffffffff611c9716565b73ffffffffffffffffffffffffffffffffffffffff831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054611a42908263ffffffff61163816565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260036020526040902055600254611a7b908263ffffffff61163816565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310611ba657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611b69565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611c08576040519150601f19603f3d011682016040523d82523d6000602084013e611c0d565b606091505b5091509150818015611c3b575080511580611c3b5750808060200190516020811015611c3857600080fd5b50515b611c90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611d7f602d913960400191505060405180910390fd5b5050505050565b8082018281101561068d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f776564436f72655265663a2043616c6c6572206973206e6f74206120676f7665726e6f725472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220d7fd196a2dee0bd2daa50f4be8ce4153534129a912325a54effe1fa17da46a6e64736f6c63430006060033",
1065
+ linkReferences: {},
1066
+ deployedLinkReferences: {}
1067
+ };
1068
+
1069
+ // src/abis/FewWrappedToken.json
1070
+ var FewWrappedToken_default = {
1071
+ _format: "hh-sol-artifact-1",
1072
+ contractName: "FewWrappedToken",
1073
+ sourceName: "contracts/FewWrappedToken.sol",
1074
+ abi: [
1075
+ {
1076
+ inputs: [],
1077
+ stateMutability: "nonpayable",
1078
+ type: "constructor"
1079
+ },
1080
+ {
1081
+ anonymous: false,
1082
+ inputs: [
1083
+ {
1084
+ indexed: true,
1085
+ internalType: "address",
1086
+ name: "owner",
1087
+ type: "address"
1088
+ },
1089
+ {
1090
+ indexed: true,
1091
+ internalType: "address",
1092
+ name: "spender",
1093
+ type: "address"
1094
+ },
1095
+ {
1096
+ indexed: false,
1097
+ internalType: "uint256",
1098
+ name: "value",
1099
+ type: "uint256"
1100
+ }
1101
+ ],
1102
+ name: "Approval",
1103
+ type: "event"
1104
+ },
1105
+ {
1106
+ anonymous: false,
1107
+ inputs: [
1108
+ {
1109
+ indexed: true,
1110
+ internalType: "address",
1111
+ name: "burner",
1112
+ type: "address"
1113
+ },
1114
+ {
1115
+ indexed: false,
1116
+ internalType: "uint256",
1117
+ name: "amount",
1118
+ type: "uint256"
1119
+ },
1120
+ {
1121
+ indexed: true,
1122
+ internalType: "address",
1123
+ name: "to",
1124
+ type: "address"
1125
+ }
1126
+ ],
1127
+ name: "Burn",
1128
+ type: "event"
1129
+ },
1130
+ {
1131
+ anonymous: false,
1132
+ inputs: [
1133
+ {
1134
+ indexed: true,
1135
+ internalType: "address",
1136
+ name: "minter",
1137
+ type: "address"
1138
+ },
1139
+ {
1140
+ indexed: false,
1141
+ internalType: "uint256",
1142
+ name: "amount",
1143
+ type: "uint256"
1144
+ },
1145
+ {
1146
+ indexed: true,
1147
+ internalType: "address",
1148
+ name: "to",
1149
+ type: "address"
1150
+ }
1151
+ ],
1152
+ name: "Mint",
1153
+ type: "event"
1154
+ },
1155
+ {
1156
+ anonymous: false,
1157
+ inputs: [
1158
+ {
1159
+ indexed: true,
1160
+ internalType: "address",
1161
+ name: "from",
1162
+ type: "address"
1163
+ },
1164
+ {
1165
+ indexed: true,
1166
+ internalType: "address",
1167
+ name: "to",
1168
+ type: "address"
1169
+ },
1170
+ {
1171
+ indexed: false,
1172
+ internalType: "uint256",
1173
+ name: "value",
1174
+ type: "uint256"
1175
+ }
1176
+ ],
1177
+ name: "Transfer",
1178
+ type: "event"
1179
+ },
1180
+ {
1181
+ anonymous: false,
1182
+ inputs: [
1183
+ {
1184
+ indexed: true,
1185
+ internalType: "address",
1186
+ name: "sender",
1187
+ type: "address"
1188
+ },
1189
+ {
1190
+ indexed: false,
1191
+ internalType: "uint256",
1192
+ name: "amount",
1193
+ type: "uint256"
1194
+ },
1195
+ {
1196
+ indexed: true,
1197
+ internalType: "address",
1198
+ name: "to",
1199
+ type: "address"
1200
+ }
1201
+ ],
1202
+ name: "Unwrap",
1203
+ type: "event"
1204
+ },
1205
+ {
1206
+ anonymous: false,
1207
+ inputs: [
1208
+ {
1209
+ indexed: true,
1210
+ internalType: "address",
1211
+ name: "sender",
1212
+ type: "address"
1213
+ },
1214
+ {
1215
+ indexed: false,
1216
+ internalType: "uint256",
1217
+ name: "amount",
1218
+ type: "uint256"
1219
+ },
1220
+ {
1221
+ indexed: true,
1222
+ internalType: "address",
1223
+ name: "to",
1224
+ type: "address"
1225
+ }
1226
+ ],
1227
+ name: "Wrap",
1228
+ type: "event"
1229
+ },
1230
+ {
1231
+ inputs: [],
1232
+ name: "BLAST",
1233
+ outputs: [
1234
+ {
1235
+ internalType: "contract IBlast",
1236
+ name: "",
1237
+ type: "address"
1238
+ }
1239
+ ],
1240
+ stateMutability: "view",
1241
+ type: "function"
1242
+ },
1243
+ {
1244
+ inputs: [],
1245
+ name: "DOMAIN_SEPARATOR",
1246
+ outputs: [
1247
+ {
1248
+ internalType: "bytes32",
1249
+ name: "",
1250
+ type: "bytes32"
1251
+ }
1252
+ ],
1253
+ stateMutability: "view",
1254
+ type: "function"
1255
+ },
1256
+ {
1257
+ inputs: [],
1258
+ name: "PERMIT_TYPEHASH",
1259
+ outputs: [
1260
+ {
1261
+ internalType: "bytes32",
1262
+ name: "",
1263
+ type: "bytes32"
1264
+ }
1265
+ ],
1266
+ stateMutability: "view",
1267
+ type: "function"
1268
+ },
1269
+ {
1270
+ inputs: [
1271
+ {
1272
+ internalType: "address",
1273
+ name: "",
1274
+ type: "address"
1275
+ },
1276
+ {
1277
+ internalType: "address",
1278
+ name: "",
1279
+ type: "address"
1280
+ }
1281
+ ],
1282
+ name: "allowance",
1283
+ outputs: [
1284
+ {
1285
+ internalType: "uint256",
1286
+ name: "",
1287
+ type: "uint256"
1288
+ }
1289
+ ],
1290
+ stateMutability: "view",
1291
+ type: "function"
1292
+ },
1293
+ {
1294
+ inputs: [
1295
+ {
1296
+ internalType: "address",
1297
+ name: "spender",
1298
+ type: "address"
1299
+ },
1300
+ {
1301
+ internalType: "uint256",
1302
+ name: "value",
1303
+ type: "uint256"
1304
+ }
1305
+ ],
1306
+ name: "approve",
1307
+ outputs: [
1308
+ {
1309
+ internalType: "bool",
1310
+ name: "",
1311
+ type: "bool"
1312
+ }
1313
+ ],
1314
+ stateMutability: "nonpayable",
1315
+ type: "function"
1316
+ },
1317
+ {
1318
+ inputs: [
1319
+ {
1320
+ internalType: "address",
1321
+ name: "",
1322
+ type: "address"
1323
+ }
1324
+ ],
1325
+ name: "balanceOf",
1326
+ outputs: [
1327
+ {
1328
+ internalType: "uint256",
1329
+ name: "",
1330
+ type: "uint256"
1331
+ }
1332
+ ],
1333
+ stateMutability: "view",
1334
+ type: "function"
1335
+ },
1336
+ {
1337
+ inputs: [
1338
+ {
1339
+ internalType: "uint256",
1340
+ name: "amount",
1341
+ type: "uint256"
1342
+ }
1343
+ ],
1344
+ name: "burn",
1345
+ outputs: [],
1346
+ stateMutability: "nonpayable",
1347
+ type: "function"
1348
+ },
1349
+ {
1350
+ inputs: [
1351
+ {
1352
+ internalType: "address",
1353
+ name: "account",
1354
+ type: "address"
1355
+ },
1356
+ {
1357
+ internalType: "uint256",
1358
+ name: "amount",
1359
+ type: "uint256"
1360
+ }
1361
+ ],
1362
+ name: "burnFrom",
1363
+ outputs: [],
1364
+ stateMutability: "nonpayable",
1365
+ type: "function"
1366
+ },
1367
+ {
1368
+ inputs: [
1369
+ {
1370
+ internalType: "address",
1371
+ name: "recipient",
1372
+ type: "address"
1373
+ },
1374
+ {
1375
+ internalType: "bool",
1376
+ name: "isMax",
1377
+ type: "bool"
1378
+ }
1379
+ ],
1380
+ name: "claimGas",
1381
+ outputs: [
1382
+ {
1383
+ internalType: "uint256",
1384
+ name: "",
1385
+ type: "uint256"
1386
+ }
1387
+ ],
1388
+ stateMutability: "nonpayable",
1389
+ type: "function"
1390
+ },
1391
+ {
1392
+ inputs: [],
1393
+ name: "decimals",
1394
+ outputs: [
1395
+ {
1396
+ internalType: "uint8",
1397
+ name: "",
1398
+ type: "uint8"
1399
+ }
1400
+ ],
1401
+ stateMutability: "view",
1402
+ type: "function"
1403
+ },
1404
+ {
1405
+ inputs: [],
1406
+ name: "factory",
1407
+ outputs: [
1408
+ {
1409
+ internalType: "address",
1410
+ name: "",
1411
+ type: "address"
1412
+ }
1413
+ ],
1414
+ stateMutability: "view",
1415
+ type: "function"
1416
+ },
1417
+ {
1418
+ inputs: [],
1419
+ name: "manager",
1420
+ outputs: [
1421
+ {
1422
+ internalType: "address",
1423
+ name: "",
1424
+ type: "address"
1425
+ }
1426
+ ],
1427
+ stateMutability: "view",
1428
+ type: "function"
1429
+ },
1430
+ {
1431
+ inputs: [
1432
+ {
1433
+ internalType: "address",
1434
+ name: "account",
1435
+ type: "address"
1436
+ },
1437
+ {
1438
+ internalType: "uint256",
1439
+ name: "amount",
1440
+ type: "uint256"
1441
+ }
1442
+ ],
1443
+ name: "mint",
1444
+ outputs: [],
1445
+ stateMutability: "nonpayable",
1446
+ type: "function"
1447
+ },
1448
+ {
1449
+ inputs: [],
1450
+ name: "name",
1451
+ outputs: [
1452
+ {
1453
+ internalType: "string",
1454
+ name: "",
1455
+ type: "string"
1456
+ }
1457
+ ],
1458
+ stateMutability: "view",
1459
+ type: "function"
1460
+ },
1461
+ {
1462
+ inputs: [
1463
+ {
1464
+ internalType: "address",
1465
+ name: "",
1466
+ type: "address"
1467
+ }
1468
+ ],
1469
+ name: "nonces",
1470
+ outputs: [
1471
+ {
1472
+ internalType: "uint256",
1473
+ name: "",
1474
+ type: "uint256"
1475
+ }
1476
+ ],
1477
+ stateMutability: "view",
1478
+ type: "function"
1479
+ },
1480
+ {
1481
+ inputs: [
1482
+ {
1483
+ internalType: "address",
1484
+ name: "owner",
1485
+ type: "address"
1486
+ },
1487
+ {
1488
+ internalType: "address",
1489
+ name: "spender",
1490
+ type: "address"
1491
+ },
1492
+ {
1493
+ internalType: "uint256",
1494
+ name: "value",
1495
+ type: "uint256"
1496
+ },
1497
+ {
1498
+ internalType: "uint256",
1499
+ name: "deadline",
1500
+ type: "uint256"
1501
+ },
1502
+ {
1503
+ internalType: "uint8",
1504
+ name: "v",
1505
+ type: "uint8"
1506
+ },
1507
+ {
1508
+ internalType: "bytes32",
1509
+ name: "r",
1510
+ type: "bytes32"
1511
+ },
1512
+ {
1513
+ internalType: "bytes32",
1514
+ name: "s",
1515
+ type: "bytes32"
1516
+ }
1517
+ ],
1518
+ name: "permit",
1519
+ outputs: [],
1520
+ stateMutability: "nonpayable",
1521
+ type: "function"
1522
+ },
1523
+ {
1524
+ inputs: [
1525
+ {
1526
+ internalType: "address",
1527
+ name: "blastGas",
1528
+ type: "address"
1529
+ }
1530
+ ],
1531
+ name: "setGasMode",
1532
+ outputs: [],
1533
+ stateMutability: "nonpayable",
1534
+ type: "function"
1535
+ },
1536
+ {
1537
+ inputs: [
1538
+ {
1539
+ internalType: "address",
1540
+ name: "_manager",
1541
+ type: "address"
1542
+ }
1543
+ ],
1544
+ name: "setManager",
1545
+ outputs: [],
1546
+ stateMutability: "nonpayable",
1547
+ type: "function"
1548
+ },
1549
+ {
1550
+ inputs: [
1551
+ {
1552
+ internalType: "address",
1553
+ name: "blastPoints",
1554
+ type: "address"
1555
+ },
1556
+ {
1557
+ internalType: "address",
1558
+ name: "operator",
1559
+ type: "address"
1560
+ }
1561
+ ],
1562
+ name: "setPointsOperator",
1563
+ outputs: [],
1564
+ stateMutability: "nonpayable",
1565
+ type: "function"
1566
+ },
1567
+ {
1568
+ inputs: [],
1569
+ name: "symbol",
1570
+ outputs: [
1571
+ {
1572
+ internalType: "string",
1573
+ name: "",
1574
+ type: "string"
1575
+ }
1576
+ ],
1577
+ stateMutability: "view",
1578
+ type: "function"
1579
+ },
1580
+ {
1581
+ inputs: [],
1582
+ name: "token",
1583
+ outputs: [
1584
+ {
1585
+ internalType: "address",
1586
+ name: "",
1587
+ type: "address"
1588
+ }
1589
+ ],
1590
+ stateMutability: "view",
1591
+ type: "function"
1592
+ },
1593
+ {
1594
+ inputs: [],
1595
+ name: "totalSupply",
1596
+ outputs: [
1597
+ {
1598
+ internalType: "uint256",
1599
+ name: "",
1600
+ type: "uint256"
1601
+ }
1602
+ ],
1603
+ stateMutability: "view",
1604
+ type: "function"
1605
+ },
1606
+ {
1607
+ inputs: [
1608
+ {
1609
+ internalType: "address",
1610
+ name: "to",
1611
+ type: "address"
1612
+ },
1613
+ {
1614
+ internalType: "uint256",
1615
+ name: "value",
1616
+ type: "uint256"
1617
+ }
1618
+ ],
1619
+ name: "transfer",
1620
+ outputs: [
1621
+ {
1622
+ internalType: "bool",
1623
+ name: "",
1624
+ type: "bool"
1625
+ }
1626
+ ],
1627
+ stateMutability: "nonpayable",
1628
+ type: "function"
1629
+ },
1630
+ {
1631
+ inputs: [
1632
+ {
1633
+ internalType: "address",
1634
+ name: "from",
1635
+ type: "address"
1636
+ },
1637
+ {
1638
+ internalType: "address",
1639
+ name: "to",
1640
+ type: "address"
1641
+ },
1642
+ {
1643
+ internalType: "uint256",
1644
+ name: "value",
1645
+ type: "uint256"
1646
+ }
1647
+ ],
1648
+ name: "transferFrom",
1649
+ outputs: [
1650
+ {
1651
+ internalType: "bool",
1652
+ name: "",
1653
+ type: "bool"
1654
+ }
1655
+ ],
1656
+ stateMutability: "nonpayable",
1657
+ type: "function"
1658
+ },
1659
+ {
1660
+ inputs: [
1661
+ {
1662
+ internalType: "uint256",
1663
+ name: "amount",
1664
+ type: "uint256"
1665
+ }
1666
+ ],
1667
+ name: "unwrap",
1668
+ outputs: [
1669
+ {
1670
+ internalType: "uint256",
1671
+ name: "",
1672
+ type: "uint256"
1673
+ }
1674
+ ],
1675
+ stateMutability: "nonpayable",
1676
+ type: "function"
1677
+ },
1678
+ {
1679
+ inputs: [
1680
+ {
1681
+ internalType: "uint256",
1682
+ name: "amount",
1683
+ type: "uint256"
1684
+ },
1685
+ {
1686
+ internalType: "address",
1687
+ name: "to",
1688
+ type: "address"
1689
+ }
1690
+ ],
1691
+ name: "unwrapTo",
1692
+ outputs: [
1693
+ {
1694
+ internalType: "uint256",
1695
+ name: "",
1696
+ type: "uint256"
1697
+ }
1698
+ ],
1699
+ stateMutability: "nonpayable",
1700
+ type: "function"
1701
+ },
1702
+ {
1703
+ inputs: [
1704
+ {
1705
+ internalType: "uint256",
1706
+ name: "amount",
1707
+ type: "uint256"
1708
+ }
1709
+ ],
1710
+ name: "wrap",
1711
+ outputs: [
1712
+ {
1713
+ internalType: "uint256",
1714
+ name: "",
1715
+ type: "uint256"
1716
+ }
1717
+ ],
1718
+ stateMutability: "nonpayable",
1719
+ type: "function"
1720
+ },
1721
+ {
1722
+ inputs: [
1723
+ {
1724
+ internalType: "uint256",
1725
+ name: "amount",
1726
+ type: "uint256"
1727
+ },
1728
+ {
1729
+ internalType: "address",
1730
+ name: "to",
1731
+ type: "address"
1732
+ }
1733
+ ],
1734
+ name: "wrapTo",
1735
+ outputs: [
1736
+ {
1737
+ internalType: "uint256",
1738
+ name: "",
1739
+ type: "uint256"
1740
+ }
1741
+ ],
1742
+ stateMutability: "nonpayable",
1743
+ type: "function"
1744
+ }
1745
+ ],
1746
+ bytecode: "0x60806040523480156200001157600080fd5b50600080546001600160a01b031916331781556040805163388a0bbd60e11b8152905173430000000000000000000000000000000000000292637114177a926004808201939182900301818387803b1580156200006d57600080fd5b505af115801562000082573d6000803e3d6000fd5b505050507343000000000000000000000000000000000000026001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620000d657600080fd5b505af1158015620000eb573d6000803e3d6000fd5b5050600880546001600160a01b031916339081179091556040805163ad4d4e2960e01b8152905146945091925063ad4d4e29916004808301926020929190829003018186803b1580156200013e57600080fd5b505afa15801562000153573d6000803e3d6000fd5b505050506040513d60208110156200016a57600080fd5b5051600980546001600160a01b0319166001600160a01b039283161790819055604080516306fdde0360e01b8152905191909216916306fdde03916004808301926000929190829003018186803b158015620001c557600080fd5b505afa158015620001da573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200020457600080fd5b81019080805160405193929190846401000000008211156200022557600080fd5b9083019060208201858111156200023b57600080fd5b82516401000000008111828201881017156200025657600080fd5b82525081516020918201929091019080838360005b83811015620002855781810151838201526020016200026b565b50505050905090810190601f168015620002b35780820380516001836020036101000a031916815260200191505b5060405250505060405160200180806b02332bb902bb930b83832b2160a51b815250600c0182805190602001908083835b60208310620003055780518252601f199092019160209182019101620002e4565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052600190805190602001906200035092919062000623565b50600960009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003a057600080fd5b505afa158015620003b5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015620003df57600080fd5b81019080805160405193929190846401000000008211156200040057600080fd5b9083019060208201858111156200041657600080fd5b82516401000000008111828201881017156200043157600080fd5b82525081516020918201929091019080838360005b838110156200046057818101518382015260200162000446565b50505050905090810190601f1680156200048e5780820380516001836020036101000a031916815260200191505b50604052505050604051602001808061667760f01b81525060020182805190602001908083835b60208310620004d65780518252601f199092019160209182019101620004b5565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052600290805190602001906200052192919062000623565b5060405180605262002c55823960520190506040518091039020600160405180828054600181600116156101000203166002900480156200059c5780601f10620005795761010080835404028352918201916200059c565b820191906000526020600020905b81548152906001019060200180831162000587575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606086015260808501959095523060a0808601919091528551808603909101815260c090940190945250508051910120600655620006c8565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200066657805160ff191683800117855562000696565b8280016001018555821562000696579182015b828111156200069657825182559160200191906001019062000679565b50620006a4929150620006a8565b5090565b620006c591905b80821115620006a45760008155600101620006af565b90565b61257d80620006d86000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806379cc6790116100f9578063d0ebdbe711610097578063de0e9a3e11610071578063de0e9a3e14610643578063e220831d14610660578063ea598cb01461069b578063fc0c546a146106b8576101c4565b8063d0ebdbe714610577578063d505accf146105aa578063dd62ed3e14610608576101c4565b806397d75776116100d357806397d75776146104f3578063a9059cbb146104fb578063c45a015514610534578063c8b11dfe1461053c576101c4565b806379cc67901461047f5780637ecebe00146104b857806395d89b41146104eb576101c4565b8063313ce5671161016657806342966c681161014057806342966c68146103c5578063481c6a75146103e25780635dbd60591461041357806370a082311461044c576101c4565b8063313ce567146103665780633644e5151461038457806340c10f191461038c576101c4565b806323b872dd116101a257806323b872dd146102ad57806326599850146102f05780632d195bd21461032957806330adf81f1461035e576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610293575b600080fd5b6101d16106c0565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027f6004803603604081101561025c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561076b565b604080519115158252519081900360200190f35b61029b610782565b60408051918252519081900360200190f35b61027f600480360360608110156102c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610788565b61029b6004803603604081101561030657600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610867565b61035c6004803603602081101561033f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661095a565b005b61029b610b55565b61036e610b79565b6040805160ff9092168252519081900360200190f35b61029b610b7e565b61035c600480360360408110156103a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b84565b61035c600480360360208110156103db57600080fd5b5035610e78565b6103ea610ebc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61029b6004803603604081101561042957600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610ed8565b61029b6004803603602081101561046257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fb4565b61035c6004803603604081101561049557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610fc6565b61029b600480360360208110156104ce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112ba565b6101d16112cc565b6103ea611342565b61027f6004803603604081101561051157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561135a565b6103ea611367565b61029b6004803603604081101561055257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611383565b61035c6004803603602081101561058d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611666565b61035c600480360360e08110156105c057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611845565b61029b6004803603604081101561061e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611b11565b61029b6004803603602081101561065957600080fd5b5035611b2e565b61035c6004803603604081101561067657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611b3a565b61029b600480360360208110156106b157600080fd5b5035611d6d565b6103ea611d79565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107635780601f1061073857610100808354040283529160200191610763565b820191906000526020600020905b81548152906001019060200180831161074657829003601f168201915b505050505081565b6000610778338484611d95565b5060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146108525773ffffffffffffffffffffffffffffffffffffffff84166000908152600560209081526040808320338452909152902054610820908363ffffffff611e0416565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083203384529091529020555b61085d848484611e76565b5060019392505050565b60008083116108d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b6009546108fc9073ffffffffffffffffffffffffffffffffffffffff16333086611f57565b610906828461211f565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c157600080fd5b505afa1580156109d5573d6000803e3d6000fd5b505050506040513d60208110156109eb57600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b158015610a5b57600080fd5b505afa158015610a6f573d6000803e3d6000fd5b505050506040513d6020811015610a8557600080fd5b5051610af257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b5050505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610bec57600080fd5b505afa158015610c00573d6000803e3d6000fd5b505050506040513d6020811015610c1657600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6020811015610cb057600080fd5b5051610d1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d6020811015610daf57600080fd5b505115610e1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610e27828261211f565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610e8233826121d0565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000808311610f32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806124f86023913960400191505060405180910390fd5b610f3c33846121d0565b600954610f609073ffffffffffffffffffffffffffffffffffffffff168385612294565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60046020526000908152604090205481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b15801561102e57600080fd5b505afa158015611042573d6000803e3d6000fd5b505050506040513d602081101561105857600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b1580156110c857600080fd5b505afa1580156110dc573d6000803e3d6000fd5b505050506040513d60208110156110f257600080fd5b505161115f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d60208110156111f157600080fd5b50511561125f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b61126982826121d0565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60076020526000908152604090205481565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f810184900484028201840190925281815292918301828280156107635780601f1061073857610100808354040283529160200191610763565b73430000000000000000000000000000000000000281565b6000610778338484611e76565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ec57600080fd5b505afa158015611400573d6000803e3d6000fd5b505050506040513d602081101561141657600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d60208110156114b057600080fd5b505161151d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b81156115de57604080517f662aa11d00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8516602482015290517343000000000000000000000000000000000000029163662aa11d9160448083019260209291908290030181600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b505050506040513d60208110156115d557600080fd5b5051905061077c565b604080517f954fa5ee00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8516602482015290517343000000000000000000000000000000000000029163954fa5ee9160448083019260209291908290030181600087803b1580156115ab57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cd57600080fd5b505afa1580156116e1573d6000803e3d6000fd5b505050506040513d60208110156116f757600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b15801561176757600080fd5b505afa15801561177b573d6000803e3d6000fd5b505050506040513d602081101561179157600080fd5b50516117fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b428410156118b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60065473ffffffffffffffffffffffffffffffffffffffff80891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611a15573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611a9057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611afb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b611b06898989611d95565b505050505050505050565b600560209081526000928352604080842090915290825290205481565b600061077c8233610ed8565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba157600080fd5b505afa158015611bb5573d6000803e3d6000fd5b505050506040513d6020811015611bcb57600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b158015611c3b57600080fd5b505afa158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b5051611cd257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff166336b91f2b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611d5157600080fd5b505af1158015611d65573d6000803e3d6000fd5b505050505050565b600061077c8233610867565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561077c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054611eac908263ffffffff611e0416565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600460205260408082209390935590841681522054611eee908263ffffffff61245416565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061203557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ff8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612097576040519150601f19603f3d011682016040523d82523d6000602084013e61209c565b606091505b50915091508180156120ca5750805115806120ca57508080602001905160208110156120c757600080fd5b50515b611d65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806124c76031913960400191505060405180910390fd5b600354612132908263ffffffff61245416565b60035573ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205461216b908263ffffffff61245416565b73ffffffffffffffffffffffffffffffffffffffff831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054612206908263ffffffff611e0416565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205560035461223f908263ffffffff611e0416565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061236a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161232d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146123cc576040519150601f19603f3d011682016040523d82523d6000602084013e6123d1565b606091505b50915091508180156123ff5750805115806123ff57508080602001905160208110156123fc57600080fd5b50515b610b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061251b602d913960400191505060405180910390fd5b8082018281101561077c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f7765645472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a26469706673582212203fc33f19631f6982b9939229a37c5e4a768f74907515d9ac5ebe0d64086ae03d64736f6c63430006060033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
1747
+ deployedBytecode: "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806379cc6790116100f9578063d0ebdbe711610097578063de0e9a3e11610071578063de0e9a3e14610643578063e220831d14610660578063ea598cb01461069b578063fc0c546a146106b8576101c4565b8063d0ebdbe714610577578063d505accf146105aa578063dd62ed3e14610608576101c4565b806397d75776116100d357806397d75776146104f3578063a9059cbb146104fb578063c45a015514610534578063c8b11dfe1461053c576101c4565b806379cc67901461047f5780637ecebe00146104b857806395d89b41146104eb576101c4565b8063313ce5671161016657806342966c681161014057806342966c68146103c5578063481c6a75146103e25780635dbd60591461041357806370a082311461044c576101c4565b8063313ce567146103665780633644e5151461038457806340c10f191461038c576101c4565b806323b872dd116101a257806323b872dd146102ad57806326599850146102f05780632d195bd21461032957806330adf81f1461035e576101c4565b806306fdde03146101c9578063095ea7b31461024657806318160ddd14610293575b600080fd5b6101d16106c0565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027f6004803603604081101561025c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561076b565b604080519115158252519081900360200190f35b61029b610782565b60408051918252519081900360200190f35b61027f600480360360608110156102c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610788565b61029b6004803603604081101561030657600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610867565b61035c6004803603602081101561033f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661095a565b005b61029b610b55565b61036e610b79565b6040805160ff9092168252519081900360200190f35b61029b610b7e565b61035c600480360360408110156103a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b84565b61035c600480360360208110156103db57600080fd5b5035610e78565b6103ea610ebc565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61029b6004803603604081101561042957600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610ed8565b61029b6004803603602081101561046257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610fb4565b61035c6004803603604081101561049557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610fc6565b61029b600480360360208110156104ce57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112ba565b6101d16112cc565b6103ea611342565b61027f6004803603604081101561051157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561135a565b6103ea611367565b61029b6004803603604081101561055257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515611383565b61035c6004803603602081101561058d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611666565b61035c600480360360e08110156105c057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611845565b61029b6004803603604081101561061e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611b11565b61029b6004803603602081101561065957600080fd5b5035611b2e565b61035c6004803603604081101561067657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611b3a565b61029b600480360360208110156106b157600080fd5b5035611d6d565b6103ea611d79565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107635780601f1061073857610100808354040283529160200191610763565b820191906000526020600020905b81548152906001019060200180831161074657829003601f168201915b505050505081565b6000610778338484611d95565b5060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146108525773ffffffffffffffffffffffffffffffffffffffff84166000908152600560209081526040808320338452909152902054610820908363ffffffff611e0416565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083203384529091529020555b61085d848484611e76565b5060019392505050565b60008083116108d757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b6009546108fc9073ffffffffffffffffffffffffffffffffffffffff16333086611f57565b610906828461211f565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156109c157600080fd5b505afa1580156109d5573d6000803e3d6000fd5b505050506040513d60208110156109eb57600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b158015610a5b57600080fd5b505afa158015610a6f573d6000803e3d6000fd5b505050506040513d6020811015610a8557600080fd5b5051610af257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8073ffffffffffffffffffffffffffffffffffffffff16634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b3a57600080fd5b505af1158015610b4e573d6000803e3d6000fd5b5050505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610bec57600080fd5b505afa158015610c00573d6000803e3d6000fd5b505050506040513d6020811015610c1657600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b158015610c8657600080fd5b505afa158015610c9a573d6000803e3d6000fd5b505050506040513d6020811015610cb057600080fd5b5051610d1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d8557600080fd5b505afa158015610d99573d6000803e3d6000fd5b505050506040513d6020811015610daf57600080fd5b505115610e1d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610e27828261211f565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610e8233826121d0565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6000808311610f32576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806124f86023913960400191505060405180910390fd5b610f3c33846121d0565b600954610f609073ffffffffffffffffffffffffffffffffffffffff168385612294565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60046020526000908152604090205481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b15801561102e57600080fd5b505afa158015611042573d6000803e3d6000fd5b505050506040513d602081101561105857600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b1580156110c857600080fd5b505afa1580156110dc573d6000803e3d6000fd5b505050506040513d60208110156110f257600080fd5b505161115f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111c757600080fd5b505afa1580156111db573d6000803e3d6000fd5b505050506040513d60208110156111f157600080fd5b50511561125f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b61126982826121d0565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60076020526000908152604090205481565b600280546040805160206001841615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01909316849004601f810184900484028201840190925281815292918301828280156107635780601f1061073857610100808354040283529160200191610763565b73430000000000000000000000000000000000000281565b6000610778338484611e76565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156113ec57600080fd5b505afa158015611400573d6000803e3d6000fd5b505050506040513d602081101561141657600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d60208110156114b057600080fd5b505161151d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b81156115de57604080517f662aa11d00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8516602482015290517343000000000000000000000000000000000000029163662aa11d9160448083019260209291908290030181600087803b1580156115ab57600080fd5b505af11580156115bf573d6000803e3d6000fd5b505050506040513d60208110156115d557600080fd5b5051905061077c565b604080517f954fa5ee00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8516602482015290517343000000000000000000000000000000000000029163954fa5ee9160448083019260209291908290030181600087803b1580156115ab57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cd57600080fd5b505afa1580156116e1573d6000803e3d6000fd5b505050506040513d60208110156116f757600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b15801561176757600080fd5b505afa15801561177b573d6000803e3d6000fd5b505050506040513d602081101561179157600080fd5b50516117fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b428410156118b457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60065473ffffffffffffffffffffffffffffffffffffffff80891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa158015611a15573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615801590611a9057508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611afb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b611b06898989611d95565b505050505050505050565b600560209081526000928352604080842090915290825290205481565b600061077c8233610ed8565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015611ba157600080fd5b505afa158015611bb5573d6000803e3d6000fd5b505050506040513d6020811015611bcb57600080fd5b5051604080517fe43581b8000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163e43581b891602480820192602092909190829003018186803b158015611c3b57600080fd5b505afa158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b5051611cd257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f464f5242494444454e0000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8173ffffffffffffffffffffffffffffffffffffffff166336b91f2b826040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b158015611d5157600080fd5b505af1158015611d65573d6000803e3d6000fd5b505050505050565b600061077c8233610867565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561077c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054611eac908263ffffffff611e0416565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600460205260408082209390935590841681522054611eee908263ffffffff61245416565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061203557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611ff8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612097576040519150601f19603f3d011682016040523d82523d6000602084013e61209c565b606091505b50915091508180156120ca5750805115806120ca57508080602001905160208110156120c757600080fd5b50515b611d65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806124c76031913960400191505060405180910390fd5b600354612132908263ffffffff61245416565b60035573ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604090205461216b908263ffffffff61245416565b73ffffffffffffffffffffffffffffffffffffffff831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054612206908263ffffffff611e0416565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602052604090205560035461223f908263ffffffff611e0416565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061236a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161232d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146123cc576040519150601f19603f3d011682016040523d82523d6000602084013e6123d1565b606091505b50915091508180156123ff5750805115806123ff57508080602001905160208110156123fc57600080fd5b50515b610b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d81526020018061251b602d913960400191505060405180910390fd5b8082018281101561077c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f7765645472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a26469706673582212203fc33f19631f6982b9939229a37c5e4a768f74907515d9ac5ebe0d64086ae03d64736f6c63430006060033",
1748
+ linkReferences: {},
1749
+ deployedLinkReferences: {}
1750
+ };
1751
+
1752
+ // src/abis/EVMFewWrappedToken.json
1753
+ var EVMFewWrappedToken_default = {
1754
+ _format: "hh-sol-artifact-1",
1755
+ contractName: "FewWrappedToken",
1756
+ sourceName: "contracts/FewWrappedToken.sol",
1757
+ abi: [
1758
+ {
1759
+ inputs: [],
1760
+ stateMutability: "nonpayable",
1761
+ type: "constructor"
1762
+ },
1763
+ {
1764
+ anonymous: false,
1765
+ inputs: [
1766
+ {
1767
+ indexed: true,
1768
+ internalType: "address",
1769
+ name: "owner",
1770
+ type: "address"
1771
+ },
1772
+ {
1773
+ indexed: true,
1774
+ internalType: "address",
1775
+ name: "spender",
1776
+ type: "address"
1777
+ },
1778
+ {
1779
+ indexed: false,
1780
+ internalType: "uint256",
1781
+ name: "value",
1782
+ type: "uint256"
1783
+ }
1784
+ ],
1785
+ name: "Approval",
1786
+ type: "event"
1787
+ },
1788
+ {
1789
+ anonymous: false,
1790
+ inputs: [
1791
+ {
1792
+ indexed: true,
1793
+ internalType: "address",
1794
+ name: "burner",
1795
+ type: "address"
1796
+ },
1797
+ {
1798
+ indexed: false,
1799
+ internalType: "uint256",
1800
+ name: "amount",
1801
+ type: "uint256"
1802
+ },
1803
+ {
1804
+ indexed: true,
1805
+ internalType: "address",
1806
+ name: "to",
1807
+ type: "address"
1808
+ }
1809
+ ],
1810
+ name: "Burn",
1811
+ type: "event"
1812
+ },
1813
+ {
1814
+ anonymous: false,
1815
+ inputs: [
1816
+ {
1817
+ indexed: true,
1818
+ internalType: "address",
1819
+ name: "minter",
1820
+ type: "address"
1821
+ },
1822
+ {
1823
+ indexed: false,
1824
+ internalType: "uint256",
1825
+ name: "amount",
1826
+ type: "uint256"
1827
+ },
1828
+ {
1829
+ indexed: true,
1830
+ internalType: "address",
1831
+ name: "to",
1832
+ type: "address"
1833
+ }
1834
+ ],
1835
+ name: "Mint",
1836
+ type: "event"
1837
+ },
1838
+ {
1839
+ anonymous: false,
1840
+ inputs: [
1841
+ {
1842
+ indexed: true,
1843
+ internalType: "address",
1844
+ name: "from",
1845
+ type: "address"
1846
+ },
1847
+ {
1848
+ indexed: true,
1849
+ internalType: "address",
1850
+ name: "to",
1851
+ type: "address"
1852
+ },
1853
+ {
1854
+ indexed: false,
1855
+ internalType: "uint256",
1856
+ name: "value",
1857
+ type: "uint256"
1858
+ }
1859
+ ],
1860
+ name: "Transfer",
1861
+ type: "event"
1862
+ },
1863
+ {
1864
+ anonymous: false,
1865
+ inputs: [
1866
+ {
1867
+ indexed: true,
1868
+ internalType: "address",
1869
+ name: "sender",
1870
+ type: "address"
1871
+ },
1872
+ {
1873
+ indexed: false,
1874
+ internalType: "uint256",
1875
+ name: "amount",
1876
+ type: "uint256"
1877
+ },
1878
+ {
1879
+ indexed: true,
1880
+ internalType: "address",
1881
+ name: "to",
1882
+ type: "address"
1883
+ }
1884
+ ],
1885
+ name: "Unwrap",
1886
+ type: "event"
1887
+ },
1888
+ {
1889
+ anonymous: false,
1890
+ inputs: [
1891
+ {
1892
+ indexed: true,
1893
+ internalType: "address",
1894
+ name: "sender",
1895
+ type: "address"
1896
+ },
1897
+ {
1898
+ indexed: false,
1899
+ internalType: "uint256",
1900
+ name: "amount",
1901
+ type: "uint256"
1902
+ },
1903
+ {
1904
+ indexed: true,
1905
+ internalType: "address",
1906
+ name: "to",
1907
+ type: "address"
1908
+ }
1909
+ ],
1910
+ name: "Wrap",
1911
+ type: "event"
1912
+ },
1913
+ {
1914
+ inputs: [],
1915
+ name: "DOMAIN_SEPARATOR",
1916
+ outputs: [
1917
+ {
1918
+ internalType: "bytes32",
1919
+ name: "",
1920
+ type: "bytes32"
1921
+ }
1922
+ ],
1923
+ stateMutability: "view",
1924
+ type: "function"
1925
+ },
1926
+ {
1927
+ inputs: [],
1928
+ name: "PERMIT_TYPEHASH",
1929
+ outputs: [
1930
+ {
1931
+ internalType: "bytes32",
1932
+ name: "",
1933
+ type: "bytes32"
1934
+ }
1935
+ ],
1936
+ stateMutability: "view",
1937
+ type: "function"
1938
+ },
1939
+ {
1940
+ inputs: [
1941
+ {
1942
+ internalType: "address",
1943
+ name: "",
1944
+ type: "address"
1945
+ },
1946
+ {
1947
+ internalType: "address",
1948
+ name: "",
1949
+ type: "address"
1950
+ }
1951
+ ],
1952
+ name: "allowance",
1953
+ outputs: [
1954
+ {
1955
+ internalType: "uint256",
1956
+ name: "",
1957
+ type: "uint256"
1958
+ }
1959
+ ],
1960
+ stateMutability: "view",
1961
+ type: "function"
1962
+ },
1963
+ {
1964
+ inputs: [
1965
+ {
1966
+ internalType: "address",
1967
+ name: "spender",
1968
+ type: "address"
1969
+ },
1970
+ {
1971
+ internalType: "uint256",
1972
+ name: "value",
1973
+ type: "uint256"
1974
+ }
1975
+ ],
1976
+ name: "approve",
1977
+ outputs: [
1978
+ {
1979
+ internalType: "bool",
1980
+ name: "",
1981
+ type: "bool"
1982
+ }
1983
+ ],
1984
+ stateMutability: "nonpayable",
1985
+ type: "function"
1986
+ },
1987
+ {
1988
+ inputs: [
1989
+ {
1990
+ internalType: "address",
1991
+ name: "",
1992
+ type: "address"
1993
+ }
1994
+ ],
1995
+ name: "balanceOf",
1996
+ outputs: [
1997
+ {
1998
+ internalType: "uint256",
1999
+ name: "",
2000
+ type: "uint256"
2001
+ }
2002
+ ],
2003
+ stateMutability: "view",
2004
+ type: "function"
2005
+ },
2006
+ {
2007
+ inputs: [
2008
+ {
2009
+ internalType: "uint256",
2010
+ name: "amount",
2011
+ type: "uint256"
2012
+ }
2013
+ ],
2014
+ name: "burn",
2015
+ outputs: [],
2016
+ stateMutability: "nonpayable",
2017
+ type: "function"
2018
+ },
2019
+ {
2020
+ inputs: [
2021
+ {
2022
+ internalType: "address",
2023
+ name: "account",
2024
+ type: "address"
2025
+ },
2026
+ {
2027
+ internalType: "uint256",
2028
+ name: "amount",
2029
+ type: "uint256"
2030
+ }
2031
+ ],
2032
+ name: "burnFrom",
2033
+ outputs: [],
2034
+ stateMutability: "nonpayable",
2035
+ type: "function"
2036
+ },
2037
+ {
2038
+ inputs: [],
2039
+ name: "decimals",
2040
+ outputs: [
2041
+ {
2042
+ internalType: "uint8",
2043
+ name: "",
2044
+ type: "uint8"
2045
+ }
2046
+ ],
2047
+ stateMutability: "view",
2048
+ type: "function"
2049
+ },
2050
+ {
2051
+ inputs: [],
2052
+ name: "factory",
2053
+ outputs: [
2054
+ {
2055
+ internalType: "address",
2056
+ name: "",
2057
+ type: "address"
2058
+ }
2059
+ ],
2060
+ stateMutability: "view",
2061
+ type: "function"
2062
+ },
2063
+ {
2064
+ inputs: [
2065
+ {
2066
+ internalType: "address",
2067
+ name: "account",
2068
+ type: "address"
2069
+ },
2070
+ {
2071
+ internalType: "uint256",
2072
+ name: "amount",
2073
+ type: "uint256"
2074
+ }
2075
+ ],
2076
+ name: "mint",
2077
+ outputs: [],
2078
+ stateMutability: "nonpayable",
2079
+ type: "function"
2080
+ },
2081
+ {
2082
+ inputs: [],
2083
+ name: "name",
2084
+ outputs: [
2085
+ {
2086
+ internalType: "string",
2087
+ name: "",
2088
+ type: "string"
2089
+ }
2090
+ ],
2091
+ stateMutability: "view",
2092
+ type: "function"
2093
+ },
2094
+ {
2095
+ inputs: [
2096
+ {
2097
+ internalType: "address",
2098
+ name: "",
2099
+ type: "address"
2100
+ }
2101
+ ],
2102
+ name: "nonces",
2103
+ outputs: [
2104
+ {
2105
+ internalType: "uint256",
2106
+ name: "",
2107
+ type: "uint256"
2108
+ }
2109
+ ],
2110
+ stateMutability: "view",
2111
+ type: "function"
2112
+ },
2113
+ {
2114
+ inputs: [
2115
+ {
2116
+ internalType: "address",
2117
+ name: "owner",
2118
+ type: "address"
2119
+ },
2120
+ {
2121
+ internalType: "address",
2122
+ name: "spender",
2123
+ type: "address"
2124
+ },
2125
+ {
2126
+ internalType: "uint256",
2127
+ name: "value",
2128
+ type: "uint256"
2129
+ },
2130
+ {
2131
+ internalType: "uint256",
2132
+ name: "deadline",
2133
+ type: "uint256"
2134
+ },
2135
+ {
2136
+ internalType: "uint8",
2137
+ name: "v",
2138
+ type: "uint8"
2139
+ },
2140
+ {
2141
+ internalType: "bytes32",
2142
+ name: "r",
2143
+ type: "bytes32"
2144
+ },
2145
+ {
2146
+ internalType: "bytes32",
2147
+ name: "s",
2148
+ type: "bytes32"
2149
+ }
2150
+ ],
2151
+ name: "permit",
2152
+ outputs: [],
2153
+ stateMutability: "nonpayable",
2154
+ type: "function"
2155
+ },
2156
+ {
2157
+ inputs: [],
2158
+ name: "symbol",
2159
+ outputs: [
2160
+ {
2161
+ internalType: "string",
2162
+ name: "",
2163
+ type: "string"
2164
+ }
2165
+ ],
2166
+ stateMutability: "view",
2167
+ type: "function"
2168
+ },
2169
+ {
2170
+ inputs: [],
2171
+ name: "token",
2172
+ outputs: [
2173
+ {
2174
+ internalType: "address",
2175
+ name: "",
2176
+ type: "address"
2177
+ }
2178
+ ],
2179
+ stateMutability: "view",
2180
+ type: "function"
2181
+ },
2182
+ {
2183
+ inputs: [],
2184
+ name: "totalSupply",
2185
+ outputs: [
2186
+ {
2187
+ internalType: "uint256",
2188
+ name: "",
2189
+ type: "uint256"
2190
+ }
2191
+ ],
2192
+ stateMutability: "view",
2193
+ type: "function"
2194
+ },
2195
+ {
2196
+ inputs: [
2197
+ {
2198
+ internalType: "address",
2199
+ name: "to",
2200
+ type: "address"
2201
+ },
2202
+ {
2203
+ internalType: "uint256",
2204
+ name: "value",
2205
+ type: "uint256"
2206
+ }
2207
+ ],
2208
+ name: "transfer",
2209
+ outputs: [
2210
+ {
2211
+ internalType: "bool",
2212
+ name: "",
2213
+ type: "bool"
2214
+ }
2215
+ ],
2216
+ stateMutability: "nonpayable",
2217
+ type: "function"
2218
+ },
2219
+ {
2220
+ inputs: [
2221
+ {
2222
+ internalType: "address",
2223
+ name: "from",
2224
+ type: "address"
2225
+ },
2226
+ {
2227
+ internalType: "address",
2228
+ name: "to",
2229
+ type: "address"
2230
+ },
2231
+ {
2232
+ internalType: "uint256",
2233
+ name: "value",
2234
+ type: "uint256"
2235
+ }
2236
+ ],
2237
+ name: "transferFrom",
2238
+ outputs: [
2239
+ {
2240
+ internalType: "bool",
2241
+ name: "",
2242
+ type: "bool"
2243
+ }
2244
+ ],
2245
+ stateMutability: "nonpayable",
2246
+ type: "function"
2247
+ },
2248
+ {
2249
+ inputs: [
2250
+ {
2251
+ internalType: "uint256",
2252
+ name: "amount",
2253
+ type: "uint256"
2254
+ }
2255
+ ],
2256
+ name: "unwrap",
2257
+ outputs: [
2258
+ {
2259
+ internalType: "uint256",
2260
+ name: "",
2261
+ type: "uint256"
2262
+ }
2263
+ ],
2264
+ stateMutability: "nonpayable",
2265
+ type: "function"
2266
+ },
2267
+ {
2268
+ inputs: [
2269
+ {
2270
+ internalType: "uint256",
2271
+ name: "amount",
2272
+ type: "uint256"
2273
+ },
2274
+ {
2275
+ internalType: "address",
2276
+ name: "to",
2277
+ type: "address"
2278
+ }
2279
+ ],
2280
+ name: "unwrapTo",
2281
+ outputs: [
2282
+ {
2283
+ internalType: "uint256",
2284
+ name: "",
2285
+ type: "uint256"
2286
+ }
2287
+ ],
2288
+ stateMutability: "nonpayable",
2289
+ type: "function"
2290
+ },
2291
+ {
2292
+ inputs: [
2293
+ {
2294
+ internalType: "uint256",
2295
+ name: "amount",
2296
+ type: "uint256"
2297
+ }
2298
+ ],
2299
+ name: "wrap",
2300
+ outputs: [
2301
+ {
2302
+ internalType: "uint256",
2303
+ name: "",
2304
+ type: "uint256"
2305
+ }
2306
+ ],
2307
+ stateMutability: "nonpayable",
2308
+ type: "function"
2309
+ },
2310
+ {
2311
+ inputs: [
2312
+ {
2313
+ internalType: "uint256",
2314
+ name: "amount",
2315
+ type: "uint256"
2316
+ },
2317
+ {
2318
+ internalType: "address",
2319
+ name: "to",
2320
+ type: "address"
2321
+ }
2322
+ ],
2323
+ name: "wrapTo",
2324
+ outputs: [
2325
+ {
2326
+ internalType: "uint256",
2327
+ name: "",
2328
+ type: "uint256"
2329
+ }
2330
+ ],
2331
+ stateMutability: "nonpayable",
2332
+ type: "function"
2333
+ }
2334
+ ],
2335
+ bytecode: "0x60806040523480156200001157600080fd5b5060405146908060526200217c823960520190506040518091039020600060405180828054600181600116156101000203166002900480156200008e5780601f106200006b5761010080835404028352918201916200008e565b820191906000526020600020905b81548152906001019060200180831162000079575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060860152608085018690523060a0808701919091528151808703909101815260c08601808352815191840191909120600555600780546001600160a01b0319163390811790915563ad4d4e2960e01b9091529051909463ad4d4e29945060c4808201945090829003018186803b1580156200015757600080fd5b505afa1580156200016c573d6000803e3d6000fd5b505050506040513d60208110156200018357600080fd5b5051600880546001600160a01b0319166001600160a01b039283161790819055604080516306fdde0360e01b8152905191909216916306fdde03916004808301926000929190829003018186803b158015620001de57600080fd5b505afa158015620001f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200021d57600080fd5b81019080805160405193929190846401000000008211156200023e57600080fd5b9083019060208201858111156200025457600080fd5b82516401000000008111828201881017156200026f57600080fd5b82525081516020918201929091019080838360005b838110156200029e57818101518382015260200162000284565b50505050905090810190601f168015620002cc5780820380516001836020036101000a031916815260200191505b5060405250508151620002e79260009250602001906200058a565b50600060405160200180806b02332bb902bb930b83832b2160a51b815250600c0182805460018160011615610100020316600290048015620003635780601f106200034057610100808354040283529182019162000363565b820191906000526020600020905b8154815290600101906020018083116200034e575b505060408051601f1981840301815291905280516200038d9350600092506020909101906200058a565b50600860009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620003dd57600080fd5b505afa158015620003f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200041c57600080fd5b81019080805160405193929190846401000000008211156200043d57600080fd5b9083019060208201858111156200045357600080fd5b82516401000000008111828201881017156200046e57600080fd5b82525081516020918201929091019080838360005b838110156200049d57818101518382015260200162000483565b50505050905090810190601f168015620004cb5780820380516001836020036101000a031916815260200191505b5060405250508151620004e69260019250602001906200058a565b506001604051602001808061667760f01b81525060020182805460018160011615610100020316600290048015620005585780601f106200053557610100808354040283529182019162000558565b820191906000526020600020905b81548152906001019060200180831162000543575b505060408051601f198184030181529190528051620005829350600192506020909101906200058a565b50506200062f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005cd57805160ff1916838001178555620005fd565b82800160010185558215620005fd579182015b82811115620005fd578251825591602001919060010190620005e0565b506200060b9291506200060f565b5090565b6200062c91905b808211156200060b576000815560010162000616565b90565b611b3d806200063f6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806370a08231116100d8578063c45a01551161008c578063de0e9a3e11610066578063de0e9a3e14610550578063ea598cb01461056d578063fc0c546a1461058a57610182565b8063c45a015514610486578063d505accf146104b7578063dd62ed3e1461051557610182565b80637ecebe00116100bd5780637ecebe001461041257806395d89b4114610445578063a9059cbb1461044d57610182565b806370a08231146103a657806379cc6790146103d957610182565b806330adf81f1161013a57806340c10f191161011457806340c10f191461031557806342966c68146103505780635dbd60591461036d57610182565b806330adf81f146102e7578063313ce567146102ef5780633644e5151461030d57610182565b806318160ddd1161016b57806318160ddd1461025157806323b872dd1461026b57806326599850146102ae57610182565b806306fdde0314610187578063095ea7b314610204575b600080fd5b61018f610592565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c95781810151838201526020016101b1565b50505050905090810190601f1680156101f65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603604081101561021a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561063e565b604080519115158252519081900360200190f35b610259610655565b60408051918252519081900360200190f35b61023d6004803603606081101561028157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561065b565b610259600480360360408110156102c457600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661073a565b61025961082d565b6102f7610851565b6040805160ff9092168252519081900360200190f35b610259610856565b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561085c565b005b61034e6004803603602081101561036657600080fd5b5035610b50565b6102596004803603604081101561038357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610b94565b610259600480360360208110156103bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c70565b61034e600480360360408110156103ef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c82565b6102596004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f76565b61018f610f88565b61023d6004803603604081101561046357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611000565b61048e61100d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61034e600480360360e08110156104cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611029565b6102596004803603604081101561052b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112f5565b6102596004803603602081101561056657600080fd5b5035611312565b6102596004803603602081101561058357600080fd5b503561131e565b61048e61132a565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b505050505081565b600061064b338484611346565b5060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107255773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020546106f3908363ffffffff6113b516565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083203384529091529020555b610730848484611427565b5060019392505050565b60008083116107aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b6008546107cf9073ffffffffffffffffffffffffffffffffffffffff16333086611508565b6107d982846116d8565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c457600080fd5b505afa1580156108d8573d6000803e3d6000fd5b505050506040513d60208110156108ee57600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b15801561095e57600080fd5b505afa158015610972573d6000803e3d6000fd5b505050506040513d602081101561098857600080fd5b50516109f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5d57600080fd5b505afa158015610a71573d6000803e3d6000fd5b505050506040513d6020811015610a8757600080fd5b505115610af557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610aff82826116d8565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610b5a3382611789565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b6000808311610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611ab86023913960400191505060405180910390fd5b610bf83384611789565b600854610c1c9073ffffffffffffffffffffffffffffffffffffffff16838561184d565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60036020526000908152604090205481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610cea57600080fd5b505afa158015610cfe573d6000803e3d6000fd5b505050506040513d6020811015610d1457600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051610e1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8357600080fd5b505afa158015610e97573d6000803e3d6000fd5b505050506040513d6020811015610ead57600080fd5b505115610f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610f258282611789565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60066020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b600061064b338484611427565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561109857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff80891660008181526006602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156111f9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061127457508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6112df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b6112ea898989611346565b505050505050505050565b600460209081526000928352604080842090915290825290205481565b600061064f8233610b94565b600061064f823361073a565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205461145d908263ffffffff6113b516565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260036020526040808220939093559084168152205461149f908263ffffffff611a1416565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106115e657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115a9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611648576040519150601f19603f3d011682016040523d82523d6000602084013e61164d565b606091505b509150915081801561167b57508051158061167b575080806020019051602081101561167857600080fd5b50515b6116d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611a876031913960400191505060405180910390fd5b505050505050565b6002546116eb908263ffffffff611a1416565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054611724908263ffffffff611a1416565b73ffffffffffffffffffffffffffffffffffffffff831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546117bf908263ffffffff6113b516565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020556002546117f8908263ffffffff6113b516565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061192357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016118e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611985576040519150601f19603f3d011682016040523d82523d6000602084013e61198a565b606091505b50915091508180156119b85750805115806119b857508080602001905160208110156119b557600080fd5b50515b611a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611adb602d913960400191505060405180910390fd5b5050505050565b8082018281101561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f7765645472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220fb4d68ddfdf6276ca4a2c32195454555ebea54885be43587198200c3a63be11964736f6c63430006060033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
2336
+ deployedBytecode: "0x608060405234801561001057600080fd5b50600436106101825760003560e01c806370a08231116100d8578063c45a01551161008c578063de0e9a3e11610066578063de0e9a3e14610550578063ea598cb01461056d578063fc0c546a1461058a57610182565b8063c45a015514610486578063d505accf146104b7578063dd62ed3e1461051557610182565b80637ecebe00116100bd5780637ecebe001461041257806395d89b4114610445578063a9059cbb1461044d57610182565b806370a08231146103a657806379cc6790146103d957610182565b806330adf81f1161013a57806340c10f191161011457806340c10f191461031557806342966c68146103505780635dbd60591461036d57610182565b806330adf81f146102e7578063313ce567146102ef5780633644e5151461030d57610182565b806318160ddd1161016b57806318160ddd1461025157806323b872dd1461026b57806326599850146102ae57610182565b806306fdde0314610187578063095ea7b314610204575b600080fd5b61018f610592565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c95781810151838201526020016101b1565b50505050905090810190601f1680156101f65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603604081101561021a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561063e565b604080519115158252519081900360200190f35b610259610655565b60408051918252519081900360200190f35b61023d6004803603606081101561028157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561065b565b610259600480360360408110156102c457600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661073a565b61025961082d565b6102f7610851565b6040805160ff9092168252519081900360200190f35b610259610856565b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561085c565b005b61034e6004803603602081101561036657600080fd5b5035610b50565b6102596004803603604081101561038357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610b94565b610259600480360360208110156103bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c70565b61034e600480360360408110156103ef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c82565b6102596004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f76565b61018f610f88565b61023d6004803603604081101561046357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611000565b61048e61100d565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61034e600480360360e08110156104cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611029565b6102596004803603604081101561052b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112f5565b6102596004803603602081101561056657600080fd5b5035611312565b6102596004803603602081101561058357600080fd5b503561131e565b61048e61132a565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b505050505081565b600061064b338484611346565b5060015b92915050565b60025481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107255773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020546106f3908363ffffffff6113b516565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083203384529091529020555b610730848484611427565b5060019392505050565b60008083116107aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b6008546107cf9073ffffffffffffffffffffffffffffffffffffffff16333086611508565b6107d982846116d8565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c457600080fd5b505afa1580156108d8573d6000803e3d6000fd5b505050506040513d60208110156108ee57600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b15801561095e57600080fd5b505afa158015610972573d6000803e3d6000fd5b505050506040513d602081101561098857600080fd5b50516109f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a5d57600080fd5b505afa158015610a71573d6000803e3d6000fd5b505050506040513d6020811015610a8757600080fd5b505115610af557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610aff82826116d8565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610b5a3382611789565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b6000808311610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611ab86023913960400191505060405180910390fd5b610bf83384611789565b600854610c1c9073ffffffffffffffffffffffffffffffffffffffff16838561184d565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60036020526000908152604090205481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610cea57600080fd5b505afa158015610cfe573d6000803e3d6000fd5b505050506040513d6020811015610d1457600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d6020811015610dae57600080fd5b5051610e1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8357600080fd5b505afa158015610e97573d6000803e3d6000fd5b505050506040513d6020811015610ead57600080fd5b505115610f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610f258282611789565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60066020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b600061064b338484611427565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561109857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60055473ffffffffffffffffffffffffffffffffffffffff80891660008181526006602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156111f9573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061127457508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6112df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b6112ea898989611346565b505050505050505050565b600460209081526000928352604080842090915290825290205481565b600061064f8233610b94565b600061064f823361073a565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260046020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526003602052604090205461145d908263ffffffff6113b516565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260036020526040808220939093559084168152205461149f908263ffffffff611a1416565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526003602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106115e657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115a9565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611648576040519150601f19603f3d011682016040523d82523d6000602084013e61164d565b606091505b509150915081801561167b57508051158061167b575080806020019051602081101561167857600080fd5b50515b6116d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611a876031913960400191505060405180910390fd5b505050505050565b6002546116eb908263ffffffff611a1416565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260036020526040902054611724908263ffffffff611a1416565b73ffffffffffffffffffffffffffffffffffffffff831660008181526003602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260409020546117bf908263ffffffff6113b516565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260409020556002546117f8908263ffffffff6113b516565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061192357805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016118e6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611985576040519150601f19603f3d011682016040523d82523d6000602084013e61198a565b606091505b50915091508180156119b85750805115806119b857508080602001905160208110156119b557600080fd5b50515b611a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611adb602d913960400191505060405180910390fd5b5050505050565b8082018281101561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f7765645472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220fb4d68ddfdf6276ca4a2c32195454555ebea54885be43587198200c3a63be11964736f6c63430006060033",
2337
+ linkReferences: {},
2338
+ deployedLinkReferences: {}
2339
+ };
2340
+
2341
+ // src/abis/ETHFewWrappedToken.json
2342
+ var ETHFewWrappedToken_default = {
2343
+ _format: "hh-sol-artifact-1",
2344
+ contractName: "FewWrappedToken",
2345
+ sourceName: "contracts/FewWrappedToken.sol",
2346
+ abi: [
2347
+ {
2348
+ inputs: [],
2349
+ stateMutability: "nonpayable",
2350
+ type: "constructor"
2351
+ },
2352
+ {
2353
+ anonymous: false,
2354
+ inputs: [
2355
+ {
2356
+ indexed: true,
2357
+ internalType: "address",
2358
+ name: "owner",
2359
+ type: "address"
2360
+ },
2361
+ {
2362
+ indexed: true,
2363
+ internalType: "address",
2364
+ name: "spender",
2365
+ type: "address"
2366
+ },
2367
+ {
2368
+ indexed: false,
2369
+ internalType: "uint256",
2370
+ name: "value",
2371
+ type: "uint256"
2372
+ }
2373
+ ],
2374
+ name: "Approval",
2375
+ type: "event"
2376
+ },
2377
+ {
2378
+ anonymous: false,
2379
+ inputs: [
2380
+ {
2381
+ indexed: true,
2382
+ internalType: "address",
2383
+ name: "burner",
2384
+ type: "address"
2385
+ },
2386
+ {
2387
+ indexed: false,
2388
+ internalType: "uint256",
2389
+ name: "amount",
2390
+ type: "uint256"
2391
+ },
2392
+ {
2393
+ indexed: true,
2394
+ internalType: "address",
2395
+ name: "to",
2396
+ type: "address"
2397
+ }
2398
+ ],
2399
+ name: "Burn",
2400
+ type: "event"
2401
+ },
2402
+ {
2403
+ anonymous: false,
2404
+ inputs: [
2405
+ {
2406
+ indexed: true,
2407
+ internalType: "address",
2408
+ name: "minter",
2409
+ type: "address"
2410
+ },
2411
+ {
2412
+ indexed: false,
2413
+ internalType: "uint256",
2414
+ name: "amount",
2415
+ type: "uint256"
2416
+ },
2417
+ {
2418
+ indexed: true,
2419
+ internalType: "address",
2420
+ name: "to",
2421
+ type: "address"
2422
+ }
2423
+ ],
2424
+ name: "Mint",
2425
+ type: "event"
2426
+ },
2427
+ {
2428
+ anonymous: false,
2429
+ inputs: [
2430
+ {
2431
+ indexed: true,
2432
+ internalType: "address",
2433
+ name: "from",
2434
+ type: "address"
2435
+ },
2436
+ {
2437
+ indexed: true,
2438
+ internalType: "address",
2439
+ name: "to",
2440
+ type: "address"
2441
+ },
2442
+ {
2443
+ indexed: false,
2444
+ internalType: "uint256",
2445
+ name: "value",
2446
+ type: "uint256"
2447
+ }
2448
+ ],
2449
+ name: "Transfer",
2450
+ type: "event"
2451
+ },
2452
+ {
2453
+ anonymous: false,
2454
+ inputs: [
2455
+ {
2456
+ indexed: true,
2457
+ internalType: "address",
2458
+ name: "sender",
2459
+ type: "address"
2460
+ },
2461
+ {
2462
+ indexed: false,
2463
+ internalType: "uint256",
2464
+ name: "amount",
2465
+ type: "uint256"
2466
+ },
2467
+ {
2468
+ indexed: true,
2469
+ internalType: "address",
2470
+ name: "to",
2471
+ type: "address"
2472
+ }
2473
+ ],
2474
+ name: "Unwrap",
2475
+ type: "event"
2476
+ },
2477
+ {
2478
+ anonymous: false,
2479
+ inputs: [
2480
+ {
2481
+ indexed: true,
2482
+ internalType: "address",
2483
+ name: "sender",
2484
+ type: "address"
2485
+ },
2486
+ {
2487
+ indexed: false,
2488
+ internalType: "uint256",
2489
+ name: "amount",
2490
+ type: "uint256"
2491
+ },
2492
+ {
2493
+ indexed: true,
2494
+ internalType: "address",
2495
+ name: "to",
2496
+ type: "address"
2497
+ }
2498
+ ],
2499
+ name: "Wrap",
2500
+ type: "event"
2501
+ },
2502
+ {
2503
+ inputs: [],
2504
+ name: "DOMAIN_SEPARATOR",
2505
+ outputs: [
2506
+ {
2507
+ internalType: "bytes32",
2508
+ name: "",
2509
+ type: "bytes32"
2510
+ }
2511
+ ],
2512
+ stateMutability: "view",
2513
+ type: "function"
2514
+ },
2515
+ {
2516
+ inputs: [],
2517
+ name: "PERMIT_TYPEHASH",
2518
+ outputs: [
2519
+ {
2520
+ internalType: "bytes32",
2521
+ name: "",
2522
+ type: "bytes32"
2523
+ }
2524
+ ],
2525
+ stateMutability: "view",
2526
+ type: "function"
2527
+ },
2528
+ {
2529
+ inputs: [
2530
+ {
2531
+ internalType: "address",
2532
+ name: "",
2533
+ type: "address"
2534
+ },
2535
+ {
2536
+ internalType: "address",
2537
+ name: "",
2538
+ type: "address"
2539
+ }
2540
+ ],
2541
+ name: "allowance",
2542
+ outputs: [
2543
+ {
2544
+ internalType: "uint256",
2545
+ name: "",
2546
+ type: "uint256"
2547
+ }
2548
+ ],
2549
+ stateMutability: "view",
2550
+ type: "function"
2551
+ },
2552
+ {
2553
+ inputs: [
2554
+ {
2555
+ internalType: "address",
2556
+ name: "spender",
2557
+ type: "address"
2558
+ },
2559
+ {
2560
+ internalType: "uint256",
2561
+ name: "value",
2562
+ type: "uint256"
2563
+ }
2564
+ ],
2565
+ name: "approve",
2566
+ outputs: [
2567
+ {
2568
+ internalType: "bool",
2569
+ name: "",
2570
+ type: "bool"
2571
+ }
2572
+ ],
2573
+ stateMutability: "nonpayable",
2574
+ type: "function"
2575
+ },
2576
+ {
2577
+ inputs: [
2578
+ {
2579
+ internalType: "address",
2580
+ name: "",
2581
+ type: "address"
2582
+ }
2583
+ ],
2584
+ name: "balanceOf",
2585
+ outputs: [
2586
+ {
2587
+ internalType: "uint256",
2588
+ name: "",
2589
+ type: "uint256"
2590
+ }
2591
+ ],
2592
+ stateMutability: "view",
2593
+ type: "function"
2594
+ },
2595
+ {
2596
+ inputs: [
2597
+ {
2598
+ internalType: "uint256",
2599
+ name: "amount",
2600
+ type: "uint256"
2601
+ }
2602
+ ],
2603
+ name: "burn",
2604
+ outputs: [],
2605
+ stateMutability: "nonpayable",
2606
+ type: "function"
2607
+ },
2608
+ {
2609
+ inputs: [
2610
+ {
2611
+ internalType: "address",
2612
+ name: "account",
2613
+ type: "address"
2614
+ },
2615
+ {
2616
+ internalType: "uint256",
2617
+ name: "amount",
2618
+ type: "uint256"
2619
+ }
2620
+ ],
2621
+ name: "burnFrom",
2622
+ outputs: [],
2623
+ stateMutability: "nonpayable",
2624
+ type: "function"
2625
+ },
2626
+ {
2627
+ inputs: [],
2628
+ name: "decimals",
2629
+ outputs: [
2630
+ {
2631
+ internalType: "uint8",
2632
+ name: "",
2633
+ type: "uint8"
2634
+ }
2635
+ ],
2636
+ stateMutability: "view",
2637
+ type: "function"
2638
+ },
2639
+ {
2640
+ inputs: [],
2641
+ name: "factory",
2642
+ outputs: [
2643
+ {
2644
+ internalType: "address",
2645
+ name: "",
2646
+ type: "address"
2647
+ }
2648
+ ],
2649
+ stateMutability: "view",
2650
+ type: "function"
2651
+ },
2652
+ {
2653
+ inputs: [
2654
+ {
2655
+ internalType: "address",
2656
+ name: "account",
2657
+ type: "address"
2658
+ },
2659
+ {
2660
+ internalType: "uint256",
2661
+ name: "amount",
2662
+ type: "uint256"
2663
+ }
2664
+ ],
2665
+ name: "mint",
2666
+ outputs: [],
2667
+ stateMutability: "nonpayable",
2668
+ type: "function"
2669
+ },
2670
+ {
2671
+ inputs: [],
2672
+ name: "name",
2673
+ outputs: [
2674
+ {
2675
+ internalType: "string",
2676
+ name: "",
2677
+ type: "string"
2678
+ }
2679
+ ],
2680
+ stateMutability: "view",
2681
+ type: "function"
2682
+ },
2683
+ {
2684
+ inputs: [
2685
+ {
2686
+ internalType: "address",
2687
+ name: "",
2688
+ type: "address"
2689
+ }
2690
+ ],
2691
+ name: "nonces",
2692
+ outputs: [
2693
+ {
2694
+ internalType: "uint256",
2695
+ name: "",
2696
+ type: "uint256"
2697
+ }
2698
+ ],
2699
+ stateMutability: "view",
2700
+ type: "function"
2701
+ },
2702
+ {
2703
+ inputs: [
2704
+ {
2705
+ internalType: "address",
2706
+ name: "owner",
2707
+ type: "address"
2708
+ },
2709
+ {
2710
+ internalType: "address",
2711
+ name: "spender",
2712
+ type: "address"
2713
+ },
2714
+ {
2715
+ internalType: "uint256",
2716
+ name: "value",
2717
+ type: "uint256"
2718
+ },
2719
+ {
2720
+ internalType: "uint256",
2721
+ name: "deadline",
2722
+ type: "uint256"
2723
+ },
2724
+ {
2725
+ internalType: "uint8",
2726
+ name: "v",
2727
+ type: "uint8"
2728
+ },
2729
+ {
2730
+ internalType: "bytes32",
2731
+ name: "r",
2732
+ type: "bytes32"
2733
+ },
2734
+ {
2735
+ internalType: "bytes32",
2736
+ name: "s",
2737
+ type: "bytes32"
2738
+ }
2739
+ ],
2740
+ name: "permit",
2741
+ outputs: [],
2742
+ stateMutability: "nonpayable",
2743
+ type: "function"
2744
+ },
2745
+ {
2746
+ inputs: [],
2747
+ name: "symbol",
2748
+ outputs: [
2749
+ {
2750
+ internalType: "string",
2751
+ name: "",
2752
+ type: "string"
2753
+ }
2754
+ ],
2755
+ stateMutability: "view",
2756
+ type: "function"
2757
+ },
2758
+ {
2759
+ inputs: [],
2760
+ name: "token",
2761
+ outputs: [
2762
+ {
2763
+ internalType: "address",
2764
+ name: "",
2765
+ type: "address"
2766
+ }
2767
+ ],
2768
+ stateMutability: "view",
2769
+ type: "function"
2770
+ },
2771
+ {
2772
+ inputs: [],
2773
+ name: "totalSupply",
2774
+ outputs: [
2775
+ {
2776
+ internalType: "uint256",
2777
+ name: "",
2778
+ type: "uint256"
2779
+ }
2780
+ ],
2781
+ stateMutability: "view",
2782
+ type: "function"
2783
+ },
2784
+ {
2785
+ inputs: [
2786
+ {
2787
+ internalType: "address",
2788
+ name: "to",
2789
+ type: "address"
2790
+ },
2791
+ {
2792
+ internalType: "uint256",
2793
+ name: "value",
2794
+ type: "uint256"
2795
+ }
2796
+ ],
2797
+ name: "transfer",
2798
+ outputs: [
2799
+ {
2800
+ internalType: "bool",
2801
+ name: "",
2802
+ type: "bool"
2803
+ }
2804
+ ],
2805
+ stateMutability: "nonpayable",
2806
+ type: "function"
2807
+ },
2808
+ {
2809
+ inputs: [
2810
+ {
2811
+ internalType: "address",
2812
+ name: "from",
2813
+ type: "address"
2814
+ },
2815
+ {
2816
+ internalType: "address",
2817
+ name: "to",
2818
+ type: "address"
2819
+ },
2820
+ {
2821
+ internalType: "uint256",
2822
+ name: "value",
2823
+ type: "uint256"
2824
+ }
2825
+ ],
2826
+ name: "transferFrom",
2827
+ outputs: [
2828
+ {
2829
+ internalType: "bool",
2830
+ name: "",
2831
+ type: "bool"
2832
+ }
2833
+ ],
2834
+ stateMutability: "nonpayable",
2835
+ type: "function"
2836
+ },
2837
+ {
2838
+ inputs: [
2839
+ {
2840
+ internalType: "uint256",
2841
+ name: "amount",
2842
+ type: "uint256"
2843
+ }
2844
+ ],
2845
+ name: "unwrap",
2846
+ outputs: [
2847
+ {
2848
+ internalType: "uint256",
2849
+ name: "",
2850
+ type: "uint256"
2851
+ }
2852
+ ],
2853
+ stateMutability: "nonpayable",
2854
+ type: "function"
2855
+ },
2856
+ {
2857
+ inputs: [
2858
+ {
2859
+ internalType: "uint256",
2860
+ name: "amount",
2861
+ type: "uint256"
2862
+ },
2863
+ {
2864
+ internalType: "address",
2865
+ name: "to",
2866
+ type: "address"
2867
+ }
2868
+ ],
2869
+ name: "unwrapTo",
2870
+ outputs: [
2871
+ {
2872
+ internalType: "uint256",
2873
+ name: "",
2874
+ type: "uint256"
2875
+ }
2876
+ ],
2877
+ stateMutability: "nonpayable",
2878
+ type: "function"
2879
+ },
2880
+ {
2881
+ inputs: [
2882
+ {
2883
+ internalType: "uint256",
2884
+ name: "amount",
2885
+ type: "uint256"
2886
+ }
2887
+ ],
2888
+ name: "wrap",
2889
+ outputs: [
2890
+ {
2891
+ internalType: "uint256",
2892
+ name: "",
2893
+ type: "uint256"
2894
+ }
2895
+ ],
2896
+ stateMutability: "nonpayable",
2897
+ type: "function"
2898
+ },
2899
+ {
2900
+ inputs: [
2901
+ {
2902
+ internalType: "uint256",
2903
+ name: "amount",
2904
+ type: "uint256"
2905
+ },
2906
+ {
2907
+ internalType: "address",
2908
+ name: "to",
2909
+ type: "address"
2910
+ }
2911
+ ],
2912
+ name: "wrapTo",
2913
+ outputs: [
2914
+ {
2915
+ internalType: "uint256",
2916
+ name: "",
2917
+ type: "uint256"
2918
+ }
2919
+ ],
2920
+ stateMutability: "nonpayable",
2921
+ type: "function"
2922
+ }
2923
+ ],
2924
+ bytecode: "0x60806040523480156200001157600080fd5b50600880546001600160a01b031916339081179091556040805163ad4d4e2960e01b8152905146929163ad4d4e29916004808301926020929190829003018186803b1580156200006057600080fd5b505afa15801562000075573d6000803e3d6000fd5b505050506040513d60208110156200008c57600080fd5b5051600980546001600160a01b0319166001600160a01b039283161790819055604080516306fdde0360e01b8152905191909216916306fdde03916004808301926000929190829003018186803b158015620000e757600080fd5b505afa158015620000fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200012657600080fd5b81019080805160405193929190846401000000008211156200014757600080fd5b9083019060208201858111156200015d57600080fd5b82516401000000008111828201881017156200017857600080fd5b82525081516020918201929091019080838360005b83811015620001a75781810151838201526020016200018d565b50505050905090810190601f168015620001d55780820380516001836020036101000a031916815260200191505b5060405250505060405160200180806b02332bb902bb930b83832b2160a51b815250600c0182805190602001908083835b60208310620002275780518252601f19909201916020918201910162000206565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526000908051906020019062000272929190620005d5565b50600960009054906101000a90046001600160a01b03166001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620002c257600080fd5b505afa158015620002d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200030157600080fd5b81019080805160405193929190846401000000008211156200032257600080fd5b9083019060208201858111156200033857600080fd5b82516401000000008111828201881017156200035357600080fd5b82525081516020918201929091019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b50604052505050604051602001808061667760f01b81525060020182805190602001908083835b60208310620003f85780518252601f199092019160209182019101620003d7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040526001908051906020019062000443929190620005d5565b50600960009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200049357600080fd5b505afa158015620004a8573d6000803e3d6000fd5b505050506040513d6020811015620004bf57600080fd5b50516002805460ff191660ff909216919091179055604051806052620021cb823960520190506040518091039020600060405180828054600181600116156101000203166002900480156200054e5780601f106200052b5761010080835404028352918201916200054e565b820191906000526020600020905b81548152906001019060200180831162000539575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606086015260808501959095523060a0808601919091528551808603909101815260c0909401909452505080519101206006556200067a565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200061857805160ff191683800117855562000648565b8280016001018555821562000648579182015b82811115620006485782518255916020019190600101906200062b565b50620006569291506200065a565b5090565b6200067791905b8082111562000656576000815560010162000661565b90565b611b41806200068a6000396000f3fe608060405234801561001057600080fd5b50600436106101825760003560e01c806370a08231116100d8578063c45a01551161008c578063de0e9a3e11610066578063de0e9a3e14610550578063ea598cb01461056d578063fc0c546a1461058a57610182565b8063c45a015514610486578063d505accf146104b7578063dd62ed3e1461051557610182565b80637ecebe00116100bd5780637ecebe001461041257806395d89b4114610445578063a9059cbb1461044d57610182565b806370a08231146103a657806379cc6790146103d957610182565b806330adf81f1161013a57806340c10f191161011457806340c10f191461031557806342966c68146103505780635dbd60591461036d57610182565b806330adf81f146102e7578063313ce567146102ef5780633644e5151461030d57610182565b806318160ddd1161016b57806318160ddd1461025157806323b872dd1461026b57806326599850146102ae57610182565b806306fdde0314610187578063095ea7b314610204575b600080fd5b61018f610592565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c95781810151838201526020016101b1565b50505050905090810190601f1680156101f65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603604081101561021a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561063e565b604080519115158252519081900360200190f35b610259610655565b60408051918252519081900360200190f35b61023d6004803603606081101561028157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561065b565b610259600480360360408110156102c457600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661073a565b61025961082d565b6102f7610851565b6040805160ff9092168252519081900360200190f35b61025961085a565b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610860565b005b61034e6004803603602081101561036657600080fd5b5035610b54565b6102596004803603604081101561038357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610b98565b610259600480360360208110156103bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c74565b61034e600480360360408110156103ef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c86565b6102596004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f7a565b61018f610f8c565b61023d6004803603604081101561046357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611004565b61048e611011565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61034e600480360360e08110156104cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561102d565b6102596004803603604081101561052b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112f9565b6102596004803603602081101561056657600080fd5b5035611316565b6102596004803603602081101561058357600080fd5b5035611322565b61048e61132e565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b505050505081565b600061064b33848461134a565b5060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107255773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020546106f3908363ffffffff6113b916565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083203384529091529020555b61073084848461142b565b5060019392505050565b60008083116107aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b6009546107cf9073ffffffffffffffffffffffffffffffffffffffff1633308661150c565b6107d982846116dc565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d60208110156108f257600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b15801561096257600080fd5b505afa158015610976573d6000803e3d6000fd5b505050506040513d602081101561098c57600080fd5b50516109f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6157600080fd5b505afa158015610a75573d6000803e3d6000fd5b505050506040513d6020811015610a8b57600080fd5b505115610af957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610b0382826116dc565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610b5e338261178d565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b6000808311610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611abc6023913960400191505060405180910390fd5b610bfc338461178d565b600954610c209073ffffffffffffffffffffffffffffffffffffffff168385611851565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60046020526000908152604090205481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610cee57600080fd5b505afa158015610d02573d6000803e3d6000fd5b505050506040513d6020811015610d1857600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d6020811015610db257600080fd5b5051610e1f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8757600080fd5b505afa158015610e9b573d6000803e3d6000fd5b505050506040513d6020811015610eb157600080fd5b505115610f1f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610f29828261178d565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60076020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b600061064b33848461142b565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561109c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60065473ffffffffffffffffffffffffffffffffffffffff80891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156111fd573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061127857508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6112e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b6112ee89898961134a565b505050505050505050565b600560209081526000928352604080842090915290825290205481565b600061064f8233610b98565b600061064f823361073a565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054611461908263ffffffff6113b916565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526004602052604080822093909355908416815220546114a3908263ffffffff611a1816565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106115ea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461164c576040519150601f19603f3d011682016040523d82523d6000602084013e611651565b606091505b509150915081801561167f57508051158061167f575080806020019051602081101561167c57600080fd5b50515b6116d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611a8b6031913960400191505060405180910390fd5b505050505050565b6003546116ef908263ffffffff611a1816565b60035573ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054611728908263ffffffff611a1816565b73ffffffffffffffffffffffffffffffffffffffff831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020546117c3908263ffffffff6113b916565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460205260409020556003546117fc908263ffffffff6113b916565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061192757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016118ea565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50915091508180156119bc5750805115806119bc57508080602001905160208110156119b957600080fd5b50515b611a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611adf602d913960400191505060405180910390fd5b5050505050565b8082018281101561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f7765645472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220a6e8991d1c9bb458886caf6747ba791abf4d04a0ed92291519c07b76fb5e6db664736f6c63430006060033454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429",
2925
+ deployedBytecode: "0x608060405234801561001057600080fd5b50600436106101825760003560e01c806370a08231116100d8578063c45a01551161008c578063de0e9a3e11610066578063de0e9a3e14610550578063ea598cb01461056d578063fc0c546a1461058a57610182565b8063c45a015514610486578063d505accf146104b7578063dd62ed3e1461051557610182565b80637ecebe00116100bd5780637ecebe001461041257806395d89b4114610445578063a9059cbb1461044d57610182565b806370a08231146103a657806379cc6790146103d957610182565b806330adf81f1161013a57806340c10f191161011457806340c10f191461031557806342966c68146103505780635dbd60591461036d57610182565b806330adf81f146102e7578063313ce567146102ef5780633644e5151461030d57610182565b806318160ddd1161016b57806318160ddd1461025157806323b872dd1461026b57806326599850146102ae57610182565b806306fdde0314610187578063095ea7b314610204575b600080fd5b61018f610592565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101c95781810151838201526020016101b1565b50505050905090810190601f1680156101f65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61023d6004803603604081101561021a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561063e565b604080519115158252519081900360200190f35b610259610655565b60408051918252519081900360200190f35b61023d6004803603606081101561028157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135909116906040013561065b565b610259600480360360408110156102c457600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff1661073a565b61025961082d565b6102f7610851565b6040805160ff9092168252519081900360200190f35b61025961085a565b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610860565b005b61034e6004803603602081101561036657600080fd5b5035610b54565b6102596004803603604081101561038357600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16610b98565b610259600480360360208110156103bc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c74565b61034e600480360360408110156103ef57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c86565b6102596004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610f7a565b61018f610f8c565b61023d6004803603604081101561046357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611004565b61048e611011565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61034e600480360360e08110156104cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561102d565b6102596004803603604081101561052b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166112f9565b6102596004803603602081101561056657600080fd5b5035611316565b6102596004803603602081101561058357600080fd5b5035611322565b61048e61132e565b6000805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b820191906000526020600020905b81548152906001019060200180831161061957829003601f168201915b505050505081565b600061064b33848461134a565b5060015b92915050565b60035481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146107255773ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203384529091529020546106f3908363ffffffff6113b916565b73ffffffffffffffffffffffffffffffffffffffff851660009081526005602090815260408083203384529091529020555b61073084848461142b565b5060019392505050565b60008083116107aa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4665773a2063616e27742077726170207a65726f20746f6b656e000000000000604482015290519081900360640190fd5b6009546107cf9073ffffffffffffffffffffffffffffffffffffffff1633308661150c565b6107d982846116dc565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917feb5580a0908e96b78bdcb1a3c5638793b491a6073c3ff56061a069cb205817739181900360200190a35090919050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60025460ff1681565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d60208110156108f257600080fd5b5051604080517faa271e1a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff9092169163aa271e1a91602480820192602092909190829003018186803b15801561096257600080fd5b505afa158015610976573d6000803e3d6000fd5b505050506040513d602081101561098c57600080fd5b50516109f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a6157600080fd5b505afa158015610a75573d6000803e3d6000fd5b505050506040513d6020811015610a8b57600080fd5b505115610af957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610b0382826116dc565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fbcad3d7d3dfccb90d49c6063bf70f828901fefc88937d90af74e58e6e55bc39d9181900360200190a35050565b610b5e338261178d565b604080518281529051339182917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a350565b6000808311610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180611abc6023913960400191505060405180910390fd5b610bfc338461178d565b600954610c209073ffffffffffffffffffffffffffffffffffffffff168385611851565b60408051848152905173ffffffffffffffffffffffffffffffffffffffff84169133917f12d6424519838e57637c6db9df31af32d7926ff0a53dd37007c191d0fe3028189181900360200190a35090919050565b60046020526000908152604090205481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f2f4eb266040518163ffffffff1660e01b815260040160206040518083038186803b158015610cee57600080fd5b505afa158015610d02573d6000803e3d6000fd5b505050506040513d6020811015610d1857600080fd5b5051604080517f4334614a000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691634334614a91602480820192602092909190829003018186803b158015610d8857600080fd5b505afa158015610d9c573d6000803e3d6000fd5b505050506040513d6020811015610db257600080fd5b5051610e1f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604482015290519081900360640190fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8757600080fd5b505afa158015610e9b573d6000803e3d6000fd5b505050506040513d6020811015610eb157600080fd5b505115610f1f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f436f72655265663a2043616c6c65722069732070617573656400000000000000604482015290519081900360640190fd5b610f29828261178d565b60408051828152905173ffffffffffffffffffffffffffffffffffffffff84169133917fdbdf9b8e4b75e75b162d151ec8fc7f0561cabab5fcccfa2600be62223e4300c49181900360200190a35050565b60076020526000908152604090205481565b60018054604080516020600284861615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156106365780601f1061060b57610100808354040283529160200191610636565b600061064b33848461142b565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561109c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4665773a20455850495245440000000000000000000000000000000000000000604482015290519081900360640190fd5b60065473ffffffffffffffffffffffffffffffffffffffff80891660008181526007602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156111fd573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061127857508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6112e357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4665773a20494e56414c49445f5349474e415455524500000000000000000000604482015290519081900360640190fd5b6112ee89898961134a565b505050505050505050565b600560209081526000928352604080842090915290825290205481565b600061064f8233610b98565b600061064f823361073a565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b8082038281111561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040902054611461908263ffffffff6113b916565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526004602052604080822093909355908416815220546114a3908263ffffffff611a1816565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526004602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b602083106115ea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016115ad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461164c576040519150601f19603f3d011682016040523d82523d6000602084013e611651565b606091505b509150915081801561167f57508051158061167f575080806020019051602081101561167c57600080fd5b50515b6116d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180611a8b6031913960400191505060405180910390fd5b505050505050565b6003546116ef908263ffffffff611a1816565b60035573ffffffffffffffffffffffffffffffffffffffff8216600090815260046020526040902054611728908263ffffffff611a1816565b73ffffffffffffffffffffffffffffffffffffffff831660008181526004602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260409020546117c3908263ffffffff6113b916565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600460205260409020556003546117fc908263ffffffff6113b916565b60035560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061192757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016118ea565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611989576040519150601f19603f3d011682016040523d82523d6000602084013e61198e565b606091505b50915091508180156119bc5750805115806119bc57508080602001905160208110156119b957600080fd5b50515b611a11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180611adf602d913960400191505060405180910390fd5b5050505050565b8082018281101561064f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fdfe5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65644665773a207a65726f20616d6f756e7420756e77726170206e6f7420616c6c6f7765645472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a2646970667358221220a6e8991d1c9bb458886caf6747ba791abf4d04a0ed92291519c07b76fb5e6db664736f6c63430006060033",
2926
+ linkReferences: {},
2927
+ deployedLinkReferences: {}
2928
+ };
2929
+
2930
+ // src/fewToken.ts
2931
+ var FEW_WRAPPED_FACTORY_CONFIGS = {
2932
+ [168587773]: {
2933
+ fewWrapFactory: "0xf11788d14EbE6abF4EA02e162C75AD938F1730C1",
2934
+ bytecode: BlastSepoliaFewWrappedToken_default.bytecode
2935
+ },
2936
+ [11155111]: {
2937
+ fewWrapFactory: "0x226e65279E177A779522864Ce1dE40c85E2C08A5",
2938
+ bytecode: EVMFewWrappedToken_default.bytecode
2939
+ },
2940
+ [81457]: {
2941
+ fewWrapFactory: "0x455b20131D59f01d082df1225154fDA813E8CeE9",
2942
+ bytecode: FewWrappedToken_default.bytecode
2943
+ },
2944
+ [1]: {
2945
+ fewWrapFactory: "0x7D86394139bf1122E82FDF45Bb4e3b038A4464DD",
2946
+ bytecode: ETHFewWrappedToken_default.bytecode
2947
+ },
2948
+ // unichain sepolia
2949
+ [1301]: {
2950
+ fewWrapFactory: "0x7D86394139bf1122E82FDF45Bb4e3b038A4464DD",
2951
+ bytecode: ETHFewWrappedToken_default.bytecode
2952
+ },
2953
+ // unichain
2954
+ [130]: {
2955
+ fewWrapFactory: "0x974Cc3F3468cd9C12731108148C4DABFB5eE556F",
2956
+ bytecode: ETHFewWrappedToken_default.bytecode
2957
+ },
2958
+ // arbitrum sepolia
2959
+ [421614]: {
2960
+ fewWrapFactory: "0xCc7eb1f253c0A988a4754445CA8c9Ab82C704E53",
2961
+ bytecode: ETHFewWrappedToken_default.bytecode
2962
+ },
2963
+ // arbitrum mainnet
2964
+ [42161]: {
2965
+ fewWrapFactory: "0x974Cc3F3468cd9C12731108148C4DABFB5eE556F",
2966
+ bytecode: ETHFewWrappedToken_default.bytecode
2967
+ },
2968
+ // base
2969
+ [8453]: {
2970
+ fewWrapFactory: "0xb3Ad7754f363af676dC1C5be40423FE538a47920",
2971
+ bytecode: ETHFewWrappedToken_default.bytecode
2972
+ },
2973
+ // story odysey
2974
+ [1516]: {
2975
+ fewWrapFactory: "0xCc7eb1f253c0A988a4754445CA8c9Ab82C704E53",
2976
+ bytecode: ETHFewWrappedToken_default.bytecode
2977
+ },
2978
+ // story mainnet
2979
+ [1514]: {
2980
+ fewWrapFactory: "0x974Cc3F3468cd9C12731108148C4DABFB5eE556F",
2981
+ bytecode: ETHFewWrappedToken_default.bytecode
2982
+ },
2983
+ // hyper mainnet
2984
+ [999]: {
2985
+ fewWrapFactory: "0x6B65ed7315274eB9EF06A48132EB04D808700b86",
2986
+ bytecode: ETHFewWrappedToken_default.bytecode
2987
+ },
2988
+ // bnb chain
2989
+ [56]: {
2990
+ fewWrapFactory: "0xEeE400Eabfba8F60f4e6B351D8577394BeB972CD",
2991
+ bytecode: ETHFewWrappedToken_default.bytecode
2992
+ }
2993
+ };
2994
+ var isFewWrappedTokenSupported = (chainId) => {
2995
+ return chainId in FEW_WRAPPED_FACTORY_CONFIGS;
2996
+ };
2997
+ var FEW_WRAPPED_TOKEN_FACTORY_ADDRESS = (chainId) => {
2998
+ if (!(chainId in FEW_WRAPPED_FACTORY_CONFIGS))
2999
+ throw new Error(`Few wrapped token address not deployed on chain ${chainId}`);
3000
+ return FEW_WRAPPED_FACTORY_CONFIGS[chainId].fewWrapFactory;
3001
+ };
3002
+ var FEW_WRAPPED_TOKEN_BYTECODE = (chainId) => {
3003
+ if (!(chainId in FEW_WRAPPED_FACTORY_CONFIGS))
3004
+ throw new Error(`Few wrapped token bytecode not deployed on chain ${chainId}`);
3005
+ return FEW_WRAPPED_FACTORY_CONFIGS[chainId].bytecode;
3006
+ };
3007
+ var FewTokenCreator = class {
3008
+ constructor(token, chainId) {
3009
+ this.token = token;
3010
+ this.chainId = chainId;
3011
+ }
3012
+ hasFewPrefix() {
3013
+ var _a, _b, _c, _d;
3014
+ const isFewWrappedName = (_b = (_a = this.token.name) == null ? void 0 : _a.startsWith("Few Wrapped ")) != null ? _b : false;
3015
+ const isFwSymbol = (_d = (_c = this.token.symbol) == null ? void 0 : _c.startsWith("fw")) != null ? _d : false;
3016
+ return isFewWrappedName || isFwSymbol;
3017
+ }
3018
+ getFewTokenAddress() {
3019
+ if (this.hasFewPrefix()) {
3020
+ return this.token.address;
3021
+ } else {
3022
+ return getFewTokenAddress(this.token.address, this.chainId);
3023
+ }
3024
+ }
3025
+ getFewSymbol() {
3026
+ if (this.hasFewPrefix()) {
3027
+ return this.token.symbol;
3028
+ } else {
3029
+ return `fw${this.token.symbol}`;
3030
+ }
3031
+ }
3032
+ getFewTokenName() {
3033
+ if (this.hasFewPrefix()) {
3034
+ return this.token.name;
3035
+ } else {
3036
+ return `Few Wrapped ${this.token.name}`;
3037
+ }
3038
+ }
3039
+ getFewToken() {
3040
+ const fewTokenAddress = this.getFewTokenAddress();
3041
+ return new Token2(
3042
+ this.token.chainId,
3043
+ fewTokenAddress,
3044
+ this.token.decimals,
3045
+ this.getFewSymbol(),
3046
+ this.getFewTokenName()
3047
+ );
3048
+ }
3049
+ };
3050
+ function getFewTokenAddress(token, chainId) {
3051
+ if (!isFewWrappedTokenSupported(chainId)) {
3052
+ return utils.getAddress(token);
3053
+ }
3054
+ const constructorArgumentsEncoded = utils.defaultAbiCoder.encode(["address"], [token]);
3055
+ const create2Inputs = [
3056
+ "0xff",
3057
+ FEW_WRAPPED_TOKEN_FACTORY_ADDRESS(chainId),
3058
+ // salt
3059
+ utils.keccak256(constructorArgumentsEncoded),
3060
+ // init code. bytecode + constructor arguments
3061
+ utils.keccak256(FEW_WRAPPED_TOKEN_BYTECODE(chainId))
3062
+ ];
3063
+ const sanitizedInputs = `0x${create2Inputs.map((i) => i.slice(2)).join("")}`;
3064
+ return utils.getAddress(`0x${utils.keccak256(sanitizedInputs).slice(-40)}`);
3065
+ }
3066
+ function getFewTokenFromOriginalToken(token, chainId) {
3067
+ if (!isFewWrappedTokenSupported(chainId)) {
3068
+ return token;
3069
+ }
3070
+ const fewTokenCreator = new FewTokenCreator(token, chainId);
3071
+ return fewTokenCreator.getFewToken();
3072
+ }
3073
+ function isFewToken(token) {
3074
+ var _a, _b, _c, _d;
3075
+ const isFewWrappedName = (_b = (_a = token.name) == null ? void 0 : _a.startsWith("Few Wrapped ")) != null ? _b : false;
3076
+ const isFwSymbol = (_d = (_c = token.symbol) == null ? void 0 : _c.startsWith("fw")) != null ? _d : false;
3077
+ return isFewWrappedName || isFwSymbol;
3078
+ }
3079
+
3080
+ // src/entities/route.ts
3081
+ var Route = class {
3082
+ constructor(pairs, input, output) {
3083
+ this._midPrice = null;
3084
+ invariant2(pairs.length > 0, "PAIRS");
3085
+ const chainId = pairs[0].chainId;
3086
+ invariant2(
3087
+ pairs.every((pair) => pair.chainId === chainId),
3088
+ "CHAIN_IDS"
3089
+ );
3090
+ const wrappedInput = input.wrapped;
3091
+ const wrappedOutput = output.wrapped;
3092
+ if (isFewToken(wrappedInput) || isFewToken(wrappedOutput) || isFewToken(pairs[0].token0) || isFewToken(pairs[0].token1)) {
3093
+ const fewWrappedInput = getFewTokenFromOriginalToken(wrappedInput.wrapped, chainId);
3094
+ const fewWrappedOutput = getFewTokenFromOriginalToken(wrappedOutput.wrapped, chainId);
3095
+ invariant2(pairs[0].involvesToken(fewWrappedInput), "INPUT");
3096
+ invariant2(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(fewWrappedOutput), "OUTPUT");
3097
+ const path = [fewWrappedInput];
3098
+ for (const [i, pair] of pairs.entries()) {
3099
+ const currentInput = path[i];
3100
+ invariant2(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
3101
+ const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
3102
+ path.push(output2);
3103
+ }
3104
+ this.pairs = pairs;
3105
+ this.path = path;
3106
+ this.input = input;
3107
+ this.output = output;
3108
+ } else {
3109
+ invariant2(pairs[0].involvesToken(wrappedInput), "INPUT");
3110
+ invariant2(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
3111
+ const path = [wrappedInput];
3112
+ for (const [i, pair] of pairs.entries()) {
3113
+ const currentInput = path[i];
3114
+ invariant2(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
3115
+ const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
3116
+ path.push(output2);
3117
+ }
3118
+ this.pairs = pairs;
3119
+ this.path = path;
3120
+ this.input = input;
3121
+ this.output = output;
3122
+ }
3123
+ }
3124
+ get midPrice() {
3125
+ if (this._midPrice !== null) return this._midPrice;
3126
+ const prices = [];
3127
+ for (const [i, pair] of this.pairs.entries()) {
3128
+ prices.push(
3129
+ this.path[i].equals(pair.token0) ? new Price2(pair.reserve0.currency, pair.reserve1.currency, pair.reserve0.quotient, pair.reserve1.quotient) : new Price2(pair.reserve1.currency, pair.reserve0.currency, pair.reserve1.quotient, pair.reserve0.quotient)
3130
+ );
3131
+ }
3132
+ const reduced = prices.slice(1).reduce((accumulator, currentValue) => accumulator.multiply(currentValue), prices[0]);
3133
+ return this._midPrice = new Price2(this.input, this.output, reduced.denominator, reduced.numerator);
3134
+ }
3135
+ get chainId() {
3136
+ return this.pairs[0].chainId;
3137
+ }
3138
+ };
3139
+
3140
+ // src/entities/trade.ts
3141
+ import {
3142
+ computePriceImpact,
3143
+ CurrencyAmount as CurrencyAmount2,
3144
+ Fraction,
3145
+ Price as Price3,
3146
+ sortedInsert,
3147
+ TradeType
3148
+ } from "@ring-protocol/sdk-core";
3149
+ import invariant3 from "tiny-invariant";
3150
+ function inputOutputComparator(a, b) {
3151
+ invariant3(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
3152
+ invariant3(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
3153
+ if (a.outputAmount.equalTo(b.outputAmount)) {
3154
+ if (a.inputAmount.equalTo(b.inputAmount)) {
3155
+ return 0;
3156
+ }
3157
+ if (a.inputAmount.lessThan(b.inputAmount)) {
3158
+ return -1;
3159
+ } else {
3160
+ return 1;
3161
+ }
3162
+ } else {
3163
+ if (a.outputAmount.lessThan(b.outputAmount)) {
3164
+ return 1;
3165
+ } else {
3166
+ return -1;
3167
+ }
3168
+ }
3169
+ }
3170
+ function tradeComparator(a, b) {
3171
+ const ioComp = inputOutputComparator(a, b);
3172
+ if (ioComp !== 0) {
3173
+ return ioComp;
3174
+ }
3175
+ if (a.priceImpact.lessThan(b.priceImpact)) {
3176
+ return -1;
3177
+ } else if (a.priceImpact.greaterThan(b.priceImpact)) {
3178
+ return 1;
3179
+ }
3180
+ return a.route.path.length - b.route.path.length;
3181
+ }
3182
+ var Trade = class _Trade {
3183
+ /**
3184
+ * Constructs an exact in trade with the given amount in and route
3185
+ * @param route route of the exact in trade
3186
+ * @param amountIn the amount being passed in
3187
+ */
3188
+ static exactIn(route, amountIn) {
3189
+ return new _Trade(route, amountIn, TradeType.EXACT_INPUT);
3190
+ }
3191
+ /**
3192
+ * Constructs an exact out trade with the given amount out and route
3193
+ * @param route route of the exact out trade
3194
+ * @param amountOut the amount returned by the trade
3195
+ */
3196
+ static exactOut(route, amountOut) {
3197
+ return new _Trade(route, amountOut, TradeType.EXACT_OUTPUT);
3198
+ }
3199
+ constructor(route, amount, tradeType) {
3200
+ this.route = route;
3201
+ this.tradeType = tradeType;
3202
+ const tokenAmounts = new Array(route.path.length);
3203
+ const chainId = route.pairs[0].chainId;
3204
+ if (tradeType === TradeType.EXACT_INPUT) {
3205
+ if (isFewToken(route.pairs[0].token0) || isFewToken(route.pairs[0].token1) || isFewToken(route.input.wrapped) || isFewToken(route.output.wrapped)) {
3206
+ invariant3(amount.currency.equals(route.input), "INPUT");
3207
+ const fewAmountToken = getFewTokenFromOriginalToken(amount.currency.wrapped, chainId);
3208
+ tokenAmounts[0] = CurrencyAmount2.fromFractionalAmount(fewAmountToken, amount.numerator, amount.denominator);
3209
+ for (let i = 0; i < route.path.length - 1; i++) {
3210
+ const pair = route.pairs[i];
3211
+ const [outputAmount] = pair.getOutputAmount(tokenAmounts[i]);
3212
+ tokenAmounts[i + 1] = outputAmount;
3213
+ }
3214
+ this.inputAmount = CurrencyAmount2.fromFractionalAmount(route.input, amount.numerator, amount.denominator);
3215
+ this.outputAmount = CurrencyAmount2.fromFractionalAmount(
3216
+ route.output,
3217
+ tokenAmounts[tokenAmounts.length - 1].numerator,
3218
+ tokenAmounts[tokenAmounts.length - 1].denominator
3219
+ );
3220
+ } else {
3221
+ invariant3(amount.currency.equals(route.input), "INPUT");
3222
+ tokenAmounts[0] = amount.wrapped;
3223
+ for (let i = 0; i < route.path.length - 1; i++) {
3224
+ const pair = route.pairs[i];
3225
+ const [outputAmount] = pair.getOutputAmount(tokenAmounts[i]);
3226
+ tokenAmounts[i + 1] = outputAmount;
3227
+ }
3228
+ this.inputAmount = CurrencyAmount2.fromFractionalAmount(route.input, amount.numerator, amount.denominator);
3229
+ this.outputAmount = CurrencyAmount2.fromFractionalAmount(
3230
+ route.output,
3231
+ tokenAmounts[tokenAmounts.length - 1].numerator,
3232
+ tokenAmounts[tokenAmounts.length - 1].denominator
3233
+ );
3234
+ }
3235
+ } else {
3236
+ if (isFewToken(route.pairs[0].token0) || isFewToken(route.pairs[0].token1) || isFewToken(route.input.wrapped) || isFewToken(route.output.wrapped)) {
3237
+ invariant3(amount.currency.equals(route.output), "OUTPUT");
3238
+ const fewAmountToken = getFewTokenFromOriginalToken(amount.currency.wrapped, chainId);
3239
+ tokenAmounts[tokenAmounts.length - 1] = CurrencyAmount2.fromFractionalAmount(
3240
+ fewAmountToken,
3241
+ amount.numerator,
3242
+ amount.denominator
3243
+ );
3244
+ for (let i = route.path.length - 1; i > 0; i--) {
3245
+ const pair = route.pairs[i - 1];
3246
+ const [inputAmount] = pair.getInputAmount(tokenAmounts[i]);
3247
+ tokenAmounts[i - 1] = inputAmount;
3248
+ }
3249
+ this.inputAmount = CurrencyAmount2.fromFractionalAmount(
3250
+ route.input,
3251
+ tokenAmounts[0].numerator,
3252
+ tokenAmounts[0].denominator
3253
+ );
3254
+ this.outputAmount = CurrencyAmount2.fromFractionalAmount(route.output, amount.numerator, amount.denominator);
3255
+ } else {
3256
+ invariant3(amount.currency.equals(route.output), "OUTPUT");
3257
+ tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
3258
+ for (let i = route.path.length - 1; i > 0; i--) {
3259
+ const pair = route.pairs[i - 1];
3260
+ const [inputAmount] = pair.getInputAmount(tokenAmounts[i]);
3261
+ tokenAmounts[i - 1] = inputAmount;
3262
+ }
3263
+ this.inputAmount = CurrencyAmount2.fromFractionalAmount(
3264
+ route.input,
3265
+ tokenAmounts[0].numerator,
3266
+ tokenAmounts[0].denominator
3267
+ );
3268
+ this.outputAmount = CurrencyAmount2.fromFractionalAmount(route.output, amount.numerator, amount.denominator);
3269
+ }
3270
+ }
3271
+ this.executionPrice = new Price3(
3272
+ this.inputAmount.currency,
3273
+ this.outputAmount.currency,
3274
+ this.inputAmount.quotient,
3275
+ this.outputAmount.quotient
3276
+ );
3277
+ this.priceImpact = computePriceImpact(route.midPrice, this.inputAmount, this.outputAmount);
3278
+ }
3279
+ /**
3280
+ * Get the minimum amount that must be received from this trade for the given slippage tolerance
3281
+ * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
3282
+ */
3283
+ minimumAmountOut(slippageTolerance) {
3284
+ invariant3(!slippageTolerance.lessThan(ZERO), "SLIPPAGE_TOLERANCE");
3285
+ if (this.tradeType === TradeType.EXACT_OUTPUT) {
3286
+ return this.outputAmount;
3287
+ } else {
3288
+ const slippageAdjustedAmountOut = new Fraction(ONE).add(slippageTolerance).invert().multiply(this.outputAmount.quotient).quotient;
3289
+ return CurrencyAmount2.fromRawAmount(this.outputAmount.currency, slippageAdjustedAmountOut);
3290
+ }
3291
+ }
3292
+ /**
3293
+ * Get the maximum amount in that can be spent via this trade for the given slippage tolerance
3294
+ * @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
3295
+ */
3296
+ maximumAmountIn(slippageTolerance) {
3297
+ invariant3(!slippageTolerance.lessThan(ZERO), "SLIPPAGE_TOLERANCE");
3298
+ if (this.tradeType === TradeType.EXACT_INPUT) {
3299
+ return this.inputAmount;
3300
+ } else {
3301
+ const slippageAdjustedAmountIn = new Fraction(ONE).add(slippageTolerance).multiply(this.inputAmount.quotient).quotient;
3302
+ return CurrencyAmount2.fromRawAmount(this.inputAmount.currency, slippageAdjustedAmountIn);
3303
+ }
3304
+ }
3305
+ /**
3306
+ * Given a list of pairs, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token
3307
+ * amount to an output token, making at most `maxHops` hops.
3308
+ * Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting
3309
+ * the amount in among multiple routes.
3310
+ * @param pairs the pairs to consider in finding the best trade
3311
+ * @param nextAmountIn exact amount of input currency to spend
3312
+ * @param currencyOut the desired currency out
3313
+ * @param maxNumResults maximum number of results to return
3314
+ * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair
3315
+ * @param currentPairs used in recursion; the current list of pairs
3316
+ * @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter
3317
+ * @param bestTrades used in recursion; the current list of best trades
3318
+ */
3319
+ static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
3320
+ invariant3(pairs.length > 0, "PAIRS");
3321
+ invariant3(maxHops > 0, "MAX_HOPS");
3322
+ invariant3(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
3323
+ const amountIn = nextAmountIn.wrapped;
3324
+ const tokenOut = currencyOut.wrapped;
3325
+ for (let i = 0; i < pairs.length; i++) {
3326
+ const pair = pairs[i];
3327
+ if (!pair.token0.equals(amountIn.currency) && !pair.token1.equals(amountIn.currency)) continue;
3328
+ if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO)) continue;
3329
+ let amountOut;
3330
+ try {
3331
+ ;
3332
+ [amountOut] = pair.getOutputAmount(amountIn);
3333
+ } catch (error) {
3334
+ if (error.isInsufficientInputAmountError) {
3335
+ continue;
3336
+ }
3337
+ throw error;
3338
+ }
3339
+ if (amountOut.currency.equals(tokenOut)) {
3340
+ sortedInsert(
3341
+ bestTrades,
3342
+ new _Trade(
3343
+ new Route([...currentPairs, pair], currencyAmountIn.currency, currencyOut),
3344
+ currencyAmountIn,
3345
+ TradeType.EXACT_INPUT
3346
+ ),
3347
+ maxNumResults,
3348
+ tradeComparator
3349
+ );
3350
+ } else if (maxHops > 1 && pairs.length > 1) {
3351
+ const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));
3352
+ _Trade.bestTradeExactIn(
3353
+ pairsExcludingThisPair,
3354
+ currencyAmountIn,
3355
+ currencyOut,
3356
+ {
3357
+ maxNumResults,
3358
+ maxHops: maxHops - 1
3359
+ },
3360
+ [...currentPairs, pair],
3361
+ amountOut,
3362
+ bestTrades
3363
+ );
3364
+ }
3365
+ }
3366
+ return bestTrades;
3367
+ }
3368
+ /**
3369
+ * Return the execution price after accounting for slippage tolerance
3370
+ * @param slippageTolerance the allowed tolerated slippage
3371
+ */
3372
+ worstExecutionPrice(slippageTolerance) {
3373
+ return new Price3(
3374
+ this.inputAmount.currency,
3375
+ this.outputAmount.currency,
3376
+ this.maximumAmountIn(slippageTolerance).quotient,
3377
+ this.minimumAmountOut(slippageTolerance).quotient
3378
+ );
3379
+ }
3380
+ /**
3381
+ * similar to the above method but instead targets a fixed output amount
3382
+ * given a list of pairs, and a fixed amount out, returns the top `maxNumResults` trades that go from an input token
3383
+ * to an output token amount, making at most `maxHops` hops
3384
+ * note this does not consider aggregation, as routes are linear. it's possible a better route exists by splitting
3385
+ * the amount in among multiple routes.
3386
+ * @param pairs the pairs to consider in finding the best trade
3387
+ * @param currencyIn the currency to spend
3388
+ * @param nextAmountOut the exact amount of currency out
3389
+ * @param maxNumResults maximum number of results to return
3390
+ * @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair
3391
+ * @param currentPairs used in recursion; the current list of pairs
3392
+ * @param currencyAmountOut used in recursion; the original value of the currencyAmountOut parameter
3393
+ * @param bestTrades used in recursion; the current list of best trades
3394
+ */
3395
+ static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
3396
+ invariant3(pairs.length > 0, "PAIRS");
3397
+ invariant3(maxHops > 0, "MAX_HOPS");
3398
+ invariant3(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
3399
+ const amountOut = nextAmountOut.wrapped;
3400
+ const tokenIn = currencyIn.wrapped;
3401
+ for (let i = 0; i < pairs.length; i++) {
3402
+ const pair = pairs[i];
3403
+ if (!pair.token0.equals(amountOut.currency) && !pair.token1.equals(amountOut.currency)) continue;
3404
+ if (pair.reserve0.equalTo(ZERO) || pair.reserve1.equalTo(ZERO)) continue;
3405
+ let amountIn;
3406
+ try {
3407
+ ;
3408
+ [amountIn] = pair.getInputAmount(amountOut);
3409
+ } catch (error) {
3410
+ if (error.isInsufficientReservesError) {
3411
+ continue;
3412
+ }
3413
+ throw error;
3414
+ }
3415
+ if (amountIn.currency.equals(tokenIn)) {
3416
+ sortedInsert(
3417
+ bestTrades,
3418
+ new _Trade(
3419
+ new Route([pair, ...currentPairs], currencyIn, currencyAmountOut.currency),
3420
+ currencyAmountOut,
3421
+ TradeType.EXACT_OUTPUT
3422
+ ),
3423
+ maxNumResults,
3424
+ tradeComparator
3425
+ );
3426
+ } else if (maxHops > 1 && pairs.length > 1) {
3427
+ const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));
3428
+ _Trade.bestTradeExactOut(
3429
+ pairsExcludingThisPair,
3430
+ currencyIn,
3431
+ currencyAmountOut,
3432
+ {
3433
+ maxNumResults,
3434
+ maxHops: maxHops - 1
3435
+ },
3436
+ [pair, ...currentPairs],
3437
+ amountIn,
3438
+ bestTrades
3439
+ );
3440
+ }
3441
+ }
3442
+ return bestTrades;
3443
+ }
3444
+ };
3445
+
3446
+ // src/router.ts
3447
+ import { TradeType as TradeType2, validateAndParseAddress } from "@ring-protocol/sdk-core";
3448
+ import invariant4 from "tiny-invariant";
3449
+ function toHex(currencyAmount) {
3450
+ return `0x${currencyAmount.quotient.toString(16)}`;
3451
+ }
3452
+ var ZERO_HEX = "0x0";
3453
+ var Router = class {
3454
+ /**
3455
+ * Cannot be constructed.
3456
+ */
3457
+ constructor() {
3458
+ }
3459
+ /**
3460
+ * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
3461
+ * @param trade to produce call parameters for
3462
+ * @param options options for the call parameters
3463
+ */
3464
+ static swapCallParameters(trade, options) {
3465
+ const etherIn = trade.inputAmount.currency.isNative;
3466
+ const etherOut = trade.outputAmount.currency.isNative;
3467
+ invariant4(!(etherIn && etherOut), "ETHER_IN_OUT");
3468
+ invariant4(!("ttl" in options) || options.ttl > 0, "TTL");
3469
+ const to = validateAndParseAddress(options.recipient);
3470
+ const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
3471
+ const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
3472
+ const path = trade.route.path.map((token) => token.address);
3473
+ const deadline = "ttl" in options ? `0x${(Math.floor((/* @__PURE__ */ new Date()).getTime() / 1e3) + options.ttl).toString(16)}` : `0x${options.deadline.toString(16)}`;
3474
+ const useFeeOnTransfer = Boolean(options.feeOnTransfer);
3475
+ let methodName;
3476
+ let args;
3477
+ let value;
3478
+ switch (trade.tradeType) {
3479
+ case TradeType2.EXACT_INPUT:
3480
+ if (etherIn) {
3481
+ methodName = useFeeOnTransfer ? "swapExactETHForTokensSupportingFeeOnTransferTokens" : "swapExactETHForTokens";
3482
+ args = [amountOut, path, to, deadline];
3483
+ value = amountIn;
3484
+ } else if (etherOut) {
3485
+ methodName = useFeeOnTransfer ? "swapExactTokensForETHSupportingFeeOnTransferTokens" : "swapExactTokensForETH";
3486
+ args = [amountIn, amountOut, path, to, deadline];
3487
+ value = ZERO_HEX;
3488
+ } else {
3489
+ methodName = useFeeOnTransfer ? "swapExactTokensForTokensSupportingFeeOnTransferTokens" : "swapExactTokensForTokens";
3490
+ args = [amountIn, amountOut, path, to, deadline];
3491
+ value = ZERO_HEX;
3492
+ }
3493
+ break;
3494
+ case TradeType2.EXACT_OUTPUT:
3495
+ invariant4(!useFeeOnTransfer, "EXACT_OUT_FOT");
3496
+ if (etherIn) {
3497
+ methodName = "swapETHForExactTokens";
3498
+ args = [amountOut, path, to, deadline];
3499
+ value = amountIn;
3500
+ } else if (etherOut) {
3501
+ methodName = "swapTokensForExactETH";
3502
+ args = [amountOut, amountIn, path, to, deadline];
3503
+ value = ZERO_HEX;
3504
+ } else {
3505
+ methodName = "swapTokensForExactTokens";
3506
+ args = [amountOut, amountIn, path, to, deadline];
3507
+ value = ZERO_HEX;
3508
+ }
3509
+ break;
3510
+ }
3511
+ return {
3512
+ methodName,
3513
+ args,
3514
+ value
3515
+ };
3516
+ }
3517
+ };
3518
+ export {
3519
+ FACTORY_ADDRESS_MAP,
3520
+ FEW_WRAPPED_TOKEN_BYTECODE,
3521
+ FEW_WRAPPED_TOKEN_FACTORY_ADDRESS,
3522
+ INIT_CODE_HASH,
3523
+ INIT_CODE_HASH_MAP,
3524
+ InsufficientInputAmountError,
3525
+ InsufficientReservesError,
3526
+ MINIMUM_LIQUIDITY,
3527
+ Pair,
3528
+ Route,
3529
+ Router,
3530
+ Trade,
3531
+ computePairAddress,
3532
+ getFewTokenAddress,
3533
+ getFewTokenFromOriginalToken,
3534
+ inputOutputComparator,
3535
+ isFewToken,
3536
+ tradeComparator
3537
+ };
3538
+ //# sourceMappingURL=index.mjs.map