@across-protocol/sdk 4.3.42 → 4.3.43

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.
@@ -10,6 +10,8 @@ var constants_1 = require("../../constants");
10
10
  var gasPriceOracle_1 = require("../../gasPriceOracle");
11
11
  var utils_1 = require("../../utils");
12
12
  var relayFeeCalculator_1 = require("../relayFeeCalculator");
13
+ var token_1 = require("@solana-program/token");
14
+ var token_2022_1 = require("@solana-program/token-2022");
13
15
  var SvmQuery = (function () {
14
16
  function SvmQuery(provider, symbolMapping, spokePool, simulatedRelayerAddress, logger, coingeckoProApiKey, fixedGasPrice, coingeckoBaseCurrency) {
15
17
  if (coingeckoBaseCurrency === void 0) { coingeckoBaseCurrency = "eth"; }
@@ -29,7 +31,7 @@ var SvmQuery = (function () {
29
31
  if (relayer === void 0) { relayer = (0, relayFeeCalculator_1.getDefaultRelayer)(relayData.destinationChainId); }
30
32
  if (options === void 0) { options = {}; }
31
33
  return tslib_1.__awaiter(this, void 0, void 0, function () {
32
- var destinationChainId, recipient, outputToken, exclusiveRelayer, _a, repaymentChainId, repaymentAddress, fillRelayTx, _b, computeUnitsConsumed, gasPriceEstimate, _c, _d, _e, gasPrice;
34
+ var destinationChainId, recipient, outputToken, exclusiveRelayer, _a, repaymentChainId, repaymentAddress, fillRelayTx, _b, computeUnitsConsumed, gasPriceEstimate, tokenAccountInfo, _c, _d, _e, tokenOwner, recipientAta, encodedAta, gasPrice, tokenGasCost, extensions, mint, tokenAccountSize, rentCostInLamports;
33
35
  return tslib_1.__generator(this, function (_f) {
34
36
  switch (_f.label) {
35
37
  case 0:
@@ -51,16 +53,41 @@ var SvmQuery = (function () {
51
53
  unsignedTx: fillRelayTx,
52
54
  baseFeeMultiplier: options.baseFeeMultiplier,
53
55
  priorityFeeMultiplier: options.priorityFeeMultiplier,
54
- })
56
+ }),
57
+ this.provider.getAccountInfo((0, svm_1.toAddress)(outputToken), { encoding: "base58" }).send()
55
58
  ]])];
56
59
  case 3:
57
- _b = _f.sent(), computeUnitsConsumed = _b[0], gasPriceEstimate = _b[1];
60
+ _b = _f.sent(), computeUnitsConsumed = _b[0], gasPriceEstimate = _b[1], tokenAccountInfo = _b[2];
61
+ tokenOwner = tokenAccountInfo.value.owner;
62
+ (0, assert_1.default)(tokenOwner === token_2022_1.TOKEN_2022_PROGRAM_ADDRESS || tokenOwner === token_1.TOKEN_PROGRAM_ADDRESS, "".concat(outputToken, " has invalid token account owner ").concat(tokenOwner, "."));
63
+ return [4, (0, svm_1.getAssociatedTokenAddress)(recipient, outputToken, tokenOwner)];
64
+ case 4:
65
+ recipientAta = _f.sent();
66
+ return [4, (0, kit_1.fetchEncodedAccount)(this.provider, recipientAta)];
67
+ case 5:
68
+ encodedAta = _f.sent();
58
69
  gasPrice = gasPriceEstimate.baseFee.add(gasPriceEstimate.microLamportsPerComputeUnit.mul(computeUnitsConsumed).div((0, utils_1.toBN)(1000000)));
59
- return [2, {
60
- nativeGasCost: computeUnitsConsumed,
61
- tokenGasCost: gasPrice,
62
- gasPrice: gasPrice,
63
- }];
70
+ tokenGasCost = gasPrice;
71
+ if (!!encodedAta.exists) return [3, 9];
72
+ extensions = undefined;
73
+ if (!(tokenOwner === token_2022_1.TOKEN_2022_PROGRAM_ADDRESS)) return [3, 7];
74
+ return [4, (0, token_2022_1.fetchMint)(this.provider, (0, svm_1.toAddress)(outputToken))];
75
+ case 6:
76
+ mint = _f.sent();
77
+ extensions = (0, kit_1.isSome)(mint.data.extensions) ? mint.data.extensions.value : undefined;
78
+ _f.label = 7;
79
+ case 7:
80
+ tokenAccountSize = (0, token_2022_1.getTokenSize)(extensions);
81
+ return [4, this.provider.getMinimumBalanceForRentExemption(BigInt(tokenAccountSize)).send()];
82
+ case 8:
83
+ rentCostInLamports = _f.sent();
84
+ tokenGasCost = tokenGasCost.add((0, utils_1.toBN)(Number(rentCostInLamports)));
85
+ _f.label = 9;
86
+ case 9: return [2, {
87
+ nativeGasCost: computeUnitsConsumed,
88
+ tokenGasCost: tokenGasCost,
89
+ gasPrice: gasPrice,
90
+ }];
64
91
  }
65
92
  });
66
93
  });
@@ -1 +1 @@
1
- {"version":3,"file":"svmQuery.js","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svmQuery.js","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  import { __assign, __awaiter, __generator } from "tslib";
2
2
  import assert from "assert";
3
- import { getComputeUnitEstimateForTransactionMessageFactory } from "@solana/kit";
4
- import { SolanaVoidSigner, getFillRelayTx } from "../../arch/svm";
3
+ import { getComputeUnitEstimateForTransactionMessageFactory, fetchEncodedAccount, isSome, } from "@solana/kit";
4
+ import { SolanaVoidSigner, getFillRelayTx, toAddress, getAssociatedTokenAddress } from "../../arch/svm";
5
5
  import { Coingecko } from "../../coingecko";
6
6
  import { CHAIN_IDs } from "../../constants";
7
7
  import { getGasPriceEstimate } from "../../gasPriceOracle";
8
8
  import { toBN } from "../../utils";
9
9
  import { getDefaultRelayer } from "../relayFeeCalculator";
10
+ import { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
11
+ import { TOKEN_2022_PROGRAM_ADDRESS, getTokenSize, fetchMint } from "@solana-program/token-2022";
10
12
  /**
11
13
  * A special QueryBase implementation for SVM used for querying gas costs, token prices, and decimals of various tokens
12
14
  * on Solana.
@@ -51,7 +53,7 @@ var SvmQuery = /** @class */ (function () {
51
53
  if (relayer === void 0) { relayer = getDefaultRelayer(relayData.destinationChainId); }
52
54
  if (options === void 0) { options = {}; }
53
55
  return __awaiter(this, void 0, void 0, function () {
54
- var destinationChainId, recipient, outputToken, exclusiveRelayer, _a, repaymentChainId, repaymentAddress, fillRelayTx, _b, computeUnitsConsumed, gasPriceEstimate, _c, _d, _e, gasPrice;
56
+ var destinationChainId, recipient, outputToken, exclusiveRelayer, _a, repaymentChainId, repaymentAddress, fillRelayTx, _b, computeUnitsConsumed, gasPriceEstimate, tokenAccountInfo, _c, _d, _e, tokenOwner, recipientAta, encodedAta, gasPrice, tokenGasCost, extensions, mint, tokenAccountSize, rentCostInLamports;
55
57
  return __generator(this, function (_f) {
56
58
  switch (_f.label) {
57
59
  case 0:
@@ -73,17 +75,42 @@ var SvmQuery = /** @class */ (function () {
73
75
  unsignedTx: fillRelayTx,
74
76
  baseFeeMultiplier: options.baseFeeMultiplier,
75
77
  priorityFeeMultiplier: options.priorityFeeMultiplier,
76
- })
78
+ }),
79
+ this.provider.getAccountInfo(toAddress(outputToken), { encoding: "base58" }).send()
77
80
  ]])];
78
81
  case 3:
79
- _b = _f.sent(), computeUnitsConsumed = _b[0], gasPriceEstimate = _b[1];
82
+ _b = _f.sent(), computeUnitsConsumed = _b[0], gasPriceEstimate = _b[1], tokenAccountInfo = _b[2];
83
+ tokenOwner = tokenAccountInfo.value.owner;
84
+ assert(tokenOwner === TOKEN_2022_PROGRAM_ADDRESS || tokenOwner === TOKEN_PROGRAM_ADDRESS, "".concat(outputToken, " has invalid token account owner ").concat(tokenOwner, "."));
85
+ return [4 /*yield*/, getAssociatedTokenAddress(recipient, outputToken, tokenOwner)];
86
+ case 4:
87
+ recipientAta = _f.sent();
88
+ return [4 /*yield*/, fetchEncodedAccount(this.provider, recipientAta)];
89
+ case 5:
90
+ encodedAta = _f.sent();
80
91
  gasPrice = gasPriceEstimate.baseFee.add(gasPriceEstimate.microLamportsPerComputeUnit.mul(computeUnitsConsumed).div(toBN(1000000)) // 1_000_000 microLamports/lamport.
81
92
  );
82
- return [2 /*return*/, {
83
- nativeGasCost: computeUnitsConsumed,
84
- tokenGasCost: gasPrice,
85
- gasPrice: gasPrice,
86
- }];
93
+ tokenGasCost = gasPrice;
94
+ if (!!encodedAta.exists) return [3 /*break*/, 9];
95
+ extensions = undefined;
96
+ if (!(tokenOwner === TOKEN_2022_PROGRAM_ADDRESS)) return [3 /*break*/, 7];
97
+ return [4 /*yield*/, fetchMint(this.provider, toAddress(outputToken))];
98
+ case 6:
99
+ mint = _f.sent();
100
+ extensions = isSome(mint.data.extensions) ? mint.data.extensions.value : undefined;
101
+ _f.label = 7;
102
+ case 7:
103
+ tokenAccountSize = getTokenSize(extensions);
104
+ return [4 /*yield*/, this.provider.getMinimumBalanceForRentExemption(BigInt(tokenAccountSize)).send()];
105
+ case 8:
106
+ rentCostInLamports = _f.sent();
107
+ tokenGasCost = tokenGasCost.add(toBN(Number(rentCostInLamports)));
108
+ _f.label = 9;
109
+ case 9: return [2 /*return*/, {
110
+ nativeGasCost: computeUnitsConsumed,
111
+ tokenGasCost: tokenGasCost,
112
+ gasPrice: gasPrice,
113
+ }];
87
114
  }
88
115
  });
89
116
  });
@@ -1 +1 @@
1
- {"version":3,"file":"svmQuery.js","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svmQuery.js","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"svmQuery.d.ts","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAsD,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAI/E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAQ,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAEvC;;;GAGG;AACH,qBAAa,QAAS,YAAW,cAAc;IAe3C,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAC9B,QAAQ,CAAC,aAAa,EAAE,iBAAiB;IACzC,QAAQ,CAAC,SAAS,EAAE,UAAU;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,UAAU;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,kBAAkB,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC;IACvB,QAAQ,CAAC,qBAAqB,EAAE,MAAM;IArBxC,SAAS,CAAC,oBAAoB;;;;;;sEAAC;IAE/B;;;;;;;;;;OAUG;gBAEQ,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,iBAAiB,EAChC,SAAS,EAAE,UAAU,EACrB,uBAAuB,EAAE,UAAU,EACnC,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,oBAAQ,EAC3B,aAAa,CAAC,0BAAc,EAC5B,qBAAqB,GAAE,MAAc;IAOhD;;;;;;;;;OASG;IACG,WAAW,CACf,SAAS,EAAE,SAAS,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,EACrD,OAAO,UAAkD,EACzD,OAAO,GAAE,OAAO,CAAC;QACf,QAAQ,EAAE,YAAY,CAAC;QACvB,QAAQ,EAAE,YAAY,CAAC;QACvB,iBAAiB,EAAE,SAAS,CAAC;QAC7B,qBAAqB,EAAE,SAAS,CAAC;KAClC,CAAM,GACN,OAAO,CAAC,uBAAuB,CAAC;IAqCnC;;;;;OAKG;IACG,gBAAgB,CACpB,OAAO,EAAE,SAAS,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,EACnD,OAAO,UAAgD,GACtD,OAAO,CAAC,SAAS,CAAC;IAiBrB;;;;;OAKG;cACa,cAAc,CAC5B,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,aAAa,CAAC,GAAG;QACxD,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,UAAU,CAAC;QACtB,WAAW,EAAE,UAAU,CAAC;KACzB,EACD,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,OAAO;;;;IAK3B;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD;;;;OAIG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAI9C"}
1
+ {"version":3,"file":"svmQuery.d.ts","sourceRoot":"","sources":["../../../../src/relayFeeCalculator/chain-queries/svmQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAA0E,MAAM,gBAAgB,CAAC;AAIrH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAQ,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAIvC;;;GAGG;AACH,qBAAa,QAAS,YAAW,cAAc;IAe3C,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAC9B,QAAQ,CAAC,aAAa,EAAE,iBAAiB;IACzC,QAAQ,CAAC,SAAS,EAAE,UAAU;IAC9B,QAAQ,CAAC,uBAAuB,EAAE,UAAU;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,kBAAkB,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC;IACvB,QAAQ,CAAC,qBAAqB,EAAE,MAAM;IArBxC,SAAS,CAAC,oBAAoB;;;;;;sEAAC;IAE/B;;;;;;;;;;OAUG;gBAEQ,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,iBAAiB,EAChC,SAAS,EAAE,UAAU,EACrB,uBAAuB,EAAE,UAAU,EACnC,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,oBAAQ,EAC3B,aAAa,CAAC,0BAAc,EAC5B,qBAAqB,GAAE,MAAc;IAOhD;;;;;;;;;OASG;IACG,WAAW,CACf,SAAS,EAAE,SAAS,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,EACrD,OAAO,UAAkD,EACzD,OAAO,GAAE,OAAO,CAAC;QACf,QAAQ,EAAE,YAAY,CAAC;QACvB,QAAQ,EAAE,YAAY,CAAC;QACvB,iBAAiB,EAAE,SAAS,CAAC;QAC7B,qBAAqB,EAAE,SAAS,CAAC;KAClC,CAAM,GACN,OAAO,CAAC,uBAAuB,CAAC;IA8DnC;;;;;OAKG;IACG,gBAAgB,CACpB,OAAO,EAAE,SAAS,GAAG;QAAE,kBAAkB,EAAE,MAAM,CAAA;KAAE,EACnD,OAAO,UAAgD,GACtD,OAAO,CAAC,SAAS,CAAC;IAiBrB;;;;;OAKG;cACa,cAAc,CAC5B,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,aAAa,CAAC,GAAG;QACxD,kBAAkB,EAAE,MAAM,CAAC;QAC3B,SAAS,EAAE,UAAU,CAAC;QACtB,WAAW,EAAE,UAAU,CAAC;KACzB,EACD,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,OAAO;;;;IAK3B;;;;OAIG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUzD;;;;OAIG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAI9C"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@across-protocol/sdk",
3
3
  "author": "UMA Team",
4
- "version": "4.3.42",
4
+ "version": "4.3.43",
5
5
  "license": "AGPL-3.0",
6
6
  "homepage": "https://docs.across.to/reference/sdk",
7
7
  "files": [
@@ -1,6 +1,11 @@
1
1
  import assert from "assert";
2
- import { getComputeUnitEstimateForTransactionMessageFactory, TransactionSigner } from "@solana/kit";
3
- import { SVMProvider, SolanaVoidSigner, getFillRelayTx } from "../../arch/svm";
2
+ import {
3
+ getComputeUnitEstimateForTransactionMessageFactory,
4
+ TransactionSigner,
5
+ fetchEncodedAccount,
6
+ isSome,
7
+ } from "@solana/kit";
8
+ import { SVMProvider, SolanaVoidSigner, getFillRelayTx, toAddress, getAssociatedTokenAddress } from "../../arch/svm";
4
9
  import { Coingecko } from "../../coingecko";
5
10
  import { CHAIN_IDs } from "../../constants";
6
11
  import { getGasPriceEstimate } from "../../gasPriceOracle";
@@ -8,6 +13,8 @@ import { RelayData } from "../../interfaces";
8
13
  import { Address, BigNumber, BigNumberish, SvmAddress, TransactionCostEstimate, toBN } from "../../utils";
9
14
  import { Logger, QueryInterface, getDefaultRelayer } from "../relayFeeCalculator";
10
15
  import { SymbolMappingType } from "./";
16
+ import { TOKEN_PROGRAM_ADDRESS } from "@solana-program/token";
17
+ import { TOKEN_2022_PROGRAM_ADDRESS, getTokenSize, fetchMint, Extension } from "@solana-program/token-2022";
11
18
 
12
19
  /**
13
20
  * A special QueryBase implementation for SVM used for querying gas costs, token prices, and decimals of various tokens
@@ -76,24 +83,49 @@ export class SvmQuery implements QueryInterface {
76
83
  repaymentAddress
77
84
  );
78
85
 
79
- const [computeUnitsConsumed, gasPriceEstimate] = await Promise.all([
86
+ const [computeUnitsConsumed, gasPriceEstimate, tokenAccountInfo] = await Promise.all([
80
87
  toBN(await this.computeUnitEstimator(fillRelayTx)),
81
88
  getGasPriceEstimate(this.provider, {
82
89
  unsignedTx: fillRelayTx,
83
90
  baseFeeMultiplier: options.baseFeeMultiplier,
84
91
  priorityFeeMultiplier: options.priorityFeeMultiplier,
85
92
  }),
93
+ this.provider.getAccountInfo(toAddress(outputToken), { encoding: "base58" }).send(),
86
94
  ]);
87
95
 
96
+ // If the owner of the token account is not the token program, then we can assume that it is the 2022 token program address, in which
97
+ // case we need to determine the extensions the token has to properly calculate rent exemption.
98
+ const tokenOwner = tokenAccountInfo!.value!.owner;
99
+ assert(
100
+ tokenOwner === TOKEN_2022_PROGRAM_ADDRESS || tokenOwner === TOKEN_PROGRAM_ADDRESS,
101
+ `${outputToken} has invalid token account owner ${tokenOwner}.`
102
+ );
103
+ const recipientAta = await getAssociatedTokenAddress(recipient, outputToken, tokenOwner);
104
+ const encodedAta = await fetchEncodedAccount(this.provider, recipientAta);
105
+
88
106
  // We can cast the gas price estimate to an SvmGasPriceEstimate here since the oracle should always
89
107
  // query the Solana adapter.
90
108
  const gasPrice = gasPriceEstimate.baseFee.add(
91
109
  gasPriceEstimate.microLamportsPerComputeUnit.mul(computeUnitsConsumed).div(toBN(1_000_000)) // 1_000_000 microLamports/lamport.
92
110
  );
111
+ let tokenGasCost = gasPrice;
112
+
113
+ // If the ATA does not exist, we need to factor the rent amount into the token gas cost.
114
+ if (!encodedAta.exists) {
115
+ // If the ATA is a non-2022 token, then it will always have a fixed size of 165.
116
+ let extensions: Extension[] | undefined = undefined;
117
+ if (tokenOwner === TOKEN_2022_PROGRAM_ADDRESS) {
118
+ const mint = await fetchMint(this.provider, toAddress(outputToken));
119
+ extensions = isSome(mint.data.extensions) ? mint.data.extensions.value : undefined;
120
+ }
121
+ const tokenAccountSize = getTokenSize(extensions);
122
+ const rentCostInLamports = await this.provider.getMinimumBalanceForRentExemption(BigInt(tokenAccountSize)).send();
123
+ tokenGasCost = tokenGasCost.add(toBN(Number(rentCostInLamports)));
124
+ }
93
125
 
94
126
  return {
95
127
  nativeGasCost: computeUnitsConsumed,
96
- tokenGasCost: gasPrice,
128
+ tokenGasCost,
97
129
  gasPrice,
98
130
  };
99
131
  }