@codex-data/sdk 1.0.31 → 1.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/resources/graphql.d.ts +50 -40
  2. package/dist/resources/graphql.d.ts.map +1 -1
  3. package/dist/resources/graphql.js.map +1 -1
  4. package/dist/sdk/Mutation.d.ts +3 -3
  5. package/dist/sdk/Mutation.d.ts.map +1 -1
  6. package/dist/sdk/Mutation.js +3 -3
  7. package/dist/sdk/Mutation.js.map +1 -1
  8. package/dist/sdk/Query.d.ts +50 -50
  9. package/dist/sdk/Query.d.ts.map +1 -1
  10. package/dist/sdk/Query.js +50 -50
  11. package/dist/sdk/Query.js.map +1 -1
  12. package/dist/sdk/Subscribe.d.ts +16 -16
  13. package/dist/sdk/Subscribe.d.ts.map +1 -1
  14. package/dist/sdk/Subscribe.js +83 -83
  15. package/dist/sdk/Subscribe.js.map +1 -1
  16. package/dist/sdk/generated/gql.d.ts +2 -2
  17. package/dist/sdk/generated/gql.d.ts.map +1 -1
  18. package/dist/sdk/generated/gql.js +1 -1
  19. package/dist/sdk/generated/gql.js.map +1 -1
  20. package/dist/sdk/generated/graphql.d.ts +55 -43
  21. package/dist/sdk/generated/graphql.d.ts.map +1 -1
  22. package/dist/sdk/generated/graphql.js +1 -1
  23. package/dist/sdk/generated/graphql.js.map +1 -1
  24. package/package.json +1 -1
  25. package/src/resources/generated_queries/FilterTokenWallets.graphql +2 -0
  26. package/src/resources/graphql.schema.json +94 -187
  27. package/src/resources/graphql.ts +50 -43
  28. package/src/resources/networkConfigs.json +34 -3
  29. package/src/resources/queries_override/FilterTokenWallets.graphql +144 -0
  30. package/src/resources/schema.graphql +41 -53
  31. package/src/sdk/Mutation.ts +7 -7
  32. package/src/sdk/Query.ts +108 -108
  33. package/src/sdk/Subscribe.ts +153 -153
  34. package/src/sdk/generated/gql.ts +3 -3
  35. package/src/sdk/generated/graphql.ts +55 -48
@@ -797,7 +797,7 @@ export type DetailedPairStats = {
797
797
  pairAddress: Scalars['String']['output'];
798
798
  /** The timestamp specified as input to the query */
799
799
  queryTimestamp?: Maybe<Scalars['Int']['output']>;
800
- /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED` */
800
+ /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. */
801
801
  statsType: TokenPairStatisticsType;
802
802
  /** The breakdown of stats over a 24 hour window. */
803
803
  stats_day1?: Maybe<WindowedDetailedPairStats>;
@@ -875,7 +875,7 @@ export type DetailedStats = {
875
875
  pairId: Scalars['String']['output'];
876
876
  /** The timestamp specified as input to the query */
877
877
  queryTimestamp?: Maybe<Scalars['Int']['output']>;
878
- /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED` */
878
+ /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. */
879
879
  statsType: TokenPairStatisticsType;
880
880
  /** The breakdown of stats over a 24 hour window. */
881
881
  stats_day1?: Maybe<WindowedDetailedStats>;
@@ -1057,6 +1057,10 @@ export type EnhancedToken = {
1057
1057
  imageThumbUrl?: Maybe<Scalars['String']['output']>;
1058
1058
  /** More metadata about the token. */
1059
1059
  info?: Maybe<TokenInfo>;
1060
+ /** Determines if freezable is a valid address or null value for the authority, or if the freezable state has not yet been determined. */
1061
+ isFreezableValid?: Maybe<Scalars['Boolean']['output']>;
1062
+ /** Determines if mintable is a valid address or null value for the authority, or if the mintable state has not yet been determined. */
1063
+ isMintableValid?: Maybe<Scalars['Boolean']['output']>;
1060
1064
  /** Whether the token has been flagged as a scam. */
1061
1065
  isScam?: Maybe<Scalars['Boolean']['output']>;
1062
1066
  /** The launchpad data for the token, if applicable. */
@@ -1147,7 +1151,7 @@ export type Event = {
1147
1151
  /** Response returned by `getTokenEvents`. */
1148
1152
  export type EventConnection = {
1149
1153
  __typename?: 'EventConnection';
1150
- /** A cursor for use in pagination. */
1154
+ /** A cursor for use in pagination. If non-null, more results are available; pages may be empty due to filtering. */
1151
1155
  cursor?: Maybe<Scalars['String']['output']>;
1152
1156
  /** A list of transactions for a token's top pair. */
1153
1157
  items?: Maybe<Array<Maybe<Event>>>;
@@ -1507,8 +1511,13 @@ export type FilterTokenWalletsInput = {
1507
1511
  phrase?: InputMaybe<Scalars['String']['input']>;
1508
1512
  /** A list of ranking attributes to apply */
1509
1513
  rankings?: InputMaybe<Array<InputMaybe<WalletTokenRanking>>>;
1510
- /** The ID of the token to filter wallets for */
1514
+ /**
1515
+ * The ID of the token to filter wallets for
1516
+ * @deprecated Use tokenIds instead
1517
+ */
1511
1518
  tokenId?: InputMaybe<Scalars['String']['input']>;
1519
+ /** The IDs of the tokens to filter wallets for. Maximum 50 tokenIds. If you provide more than one tokenId, you must also provide at least one walletAddress in the wallets list. */
1520
+ tokenIds?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
1512
1521
  /**
1513
1522
  * The wallet address to filter wallets for
1514
1523
  * @deprecated Use wallets instead
@@ -1557,7 +1566,7 @@ export type GetDetailedPairsStatsInput = {
1557
1566
  networkId: Scalars['Int']['input'];
1558
1567
  /** The contract address of the pair. */
1559
1568
  pairAddress: Scalars['String']['input'];
1560
- /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED` */
1569
+ /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. */
1561
1570
  statsType?: InputMaybe<TokenPairStatisticsType>;
1562
1571
  /** The unix timestamp for the stats. Defaults to current. */
1563
1572
  timestamp?: InputMaybe<Scalars['Int']['input']>;
@@ -2224,7 +2233,7 @@ export type LockedLiquidityData = {
2224
2233
  /** Response returned by `getTokenEventsForMaker`. */
2225
2234
  export type MakerEventConnection = {
2226
2235
  __typename?: 'MakerEventConnection';
2227
- /** A cursor for use in pagination. */
2236
+ /** A cursor for use in pagination. If non-null, more results are available; pages may be empty due to filtering. */
2228
2237
  cursor?: Maybe<Scalars['String']['output']>;
2229
2238
  /** A list of transactions for a token's top pair. */
2230
2239
  items?: Maybe<Array<Maybe<Event>>>;
@@ -5148,7 +5157,7 @@ export type OnBarsUpdatedResponse = {
5148
5157
  quoteToken?: Maybe<QuoteToken>;
5149
5158
  /** The address of the token being quoted */
5150
5159
  quoteTokenAddress: Scalars['String']['output'];
5151
- /** The type of statistics used. Can be `Filtered` or `Unfiltered`. */
5160
+ /** The type of statistics used. Can be `FILTERED` or `UNFILTERED`. */
5152
5161
  statsType: TokenPairStatisticsType;
5153
5162
  /** The unix timestamp for the new bar. */
5154
5163
  timestamp: Scalars['Int']['output'];
@@ -5194,8 +5203,11 @@ export type OnLaunchpadTokenEventInput = {
5194
5203
  };
5195
5204
 
5196
5205
  export type OnPricesUpdatedInput = {
5206
+ /** The token contract address. */
5197
5207
  address: Scalars['String']['input'];
5208
+ /** The network ID the token is deployed on. */
5198
5209
  networkId: Scalars['Int']['input'];
5210
+ /** The pair contract address from which to get pricing. Defaults to the top pair for the token. */
5199
5211
  sourcePairAddress?: InputMaybe<Scalars['String']['input']>;
5200
5212
  };
5201
5213
 
@@ -5223,7 +5235,7 @@ export type OnTokenBarsUpdatedResponse = {
5223
5235
  * @deprecated pairs are no longer used for pricing
5224
5236
  */
5225
5237
  quoteToken?: Maybe<QuoteToken>;
5226
- /** The type of statistics used. Can be `Filtered` or `Unfiltered`. */
5238
+ /** The type of statistics used. Only `FILTERED`. */
5227
5239
  statsType: TokenPairStatisticsType;
5228
5240
  /** The unix timestamp for the new bar. */
5229
5241
  timestamp: Scalars['Int']['output'];
@@ -5236,7 +5248,7 @@ export type OnTokenBarsUpdatedResponse = {
5236
5248
  export type OnTokenEventsCreatedInput = {
5237
5249
  /** The network ID to filter by. */
5238
5250
  networkId: Scalars['Int']['input'];
5239
- /** The token address to filter by. */
5251
+ /** The token address to filter by. Required unless you are on an enterprise plan including EventFeed features. */
5240
5252
  tokenAddress?: InputMaybe<Scalars['String']['input']>;
5241
5253
  };
5242
5254
 
@@ -5297,6 +5309,8 @@ export type Pair = {
5297
5309
  networkId: Scalars['Int']['output'];
5298
5310
  /** The pooled amounts of each token in the pair. */
5299
5311
  pooled?: Maybe<PooledTokenValues>;
5312
+ /** The protocol of the pair. E.g. UniswapV4, RaydiumV4, PumpV1, etc. */
5313
+ protocol?: Maybe<Scalars['String']['output']>;
5300
5314
  /**
5301
5315
  * The per-protocol data for the pair, if applicable
5302
5316
  * @deprecated Use protocolData instead
@@ -5658,7 +5672,10 @@ export type PairMetadata = {
5658
5672
  fee?: Maybe<Scalars['Int']['output']>;
5659
5673
  /** The highest price in USD in the past hour. */
5660
5674
  highPrice1?: Maybe<Scalars['String']['output']>;
5661
- /** The highest price in USD in the past week. */
5675
+ /**
5676
+ * The highest price in USD in the past week.
5677
+ * @deprecated Inaccurate
5678
+ */
5662
5679
  highPrice1w?: Maybe<Scalars['String']['output']>;
5663
5680
  /** The highest price in USD in the past 4 hours. */
5664
5681
  highPrice4?: Maybe<Scalars['String']['output']>;
@@ -5676,7 +5693,10 @@ export type PairMetadata = {
5676
5693
  liquidityToken?: Maybe<Scalars['String']['output']>;
5677
5694
  /** The lowest price in USD in the past hour. */
5678
5695
  lowPrice1?: Maybe<Scalars['String']['output']>;
5679
- /** The lowest price in USD in the past week. */
5696
+ /**
5697
+ * The lowest price in USD in the past week.
5698
+ * @deprecated Inaccurate
5699
+ */
5680
5700
  lowPrice1w?: Maybe<Scalars['String']['output']>;
5681
5701
  /** The lowest price in USD in the past 4 hours. */
5682
5702
  lowPrice4?: Maybe<Scalars['String']['output']>;
@@ -5696,7 +5716,10 @@ export type PairMetadata = {
5696
5716
  price: Scalars['String']['output'];
5697
5717
  /** The percent price change in the past hour. Decimal format. */
5698
5718
  priceChange1?: Maybe<Scalars['Float']['output']>;
5699
- /** The percent price change in the past week. Decimal format. */
5719
+ /**
5720
+ * The percent price change in the past week. Decimal format.
5721
+ * @deprecated Inaccurate
5722
+ */
5700
5723
  priceChange1w?: Maybe<Scalars['Float']['output']>;
5701
5724
  /** The percent price change in the past 4 hours. Decimal format. */
5702
5725
  priceChange4?: Maybe<Scalars['Float']['output']>;
@@ -5710,7 +5733,7 @@ export type PairMetadata = {
5710
5733
  priceNonQuoteToken: Scalars['String']['output'];
5711
5734
  /** The token of interest within the pair. Can be `token0` or `token1`. */
5712
5735
  quoteToken?: Maybe<QuoteToken>;
5713
- /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED` */
5736
+ /** The type of statistics returned. Can be `FILTERED` or `UNFILTERED`. */
5714
5737
  statsType: TokenPairStatisticsType;
5715
5738
  /** The amount of required tick separation. Only applicable for pairs on UniswapV3. */
5716
5739
  tickSpacing?: Maybe<Scalars['Int']['output']>;
@@ -5720,7 +5743,10 @@ export type PairMetadata = {
5720
5743
  token1: PairMetadataToken;
5721
5744
  /** The trade volume in USD in the past hour. */
5722
5745
  volume1?: Maybe<Scalars['String']['output']>;
5723
- /** The trade trade volume in USD in the past week. */
5746
+ /**
5747
+ * The trade trade volume in USD in the past week.
5748
+ * @deprecated Inaccurate
5749
+ */
5724
5750
  volume1w?: Maybe<Scalars['String']['output']>;
5725
5751
  /** The trade volume in USD in the past 4 hours. */
5726
5752
  volume4?: Maybe<Scalars['String']['output']>;
@@ -6140,14 +6166,20 @@ export type Price = {
6140
6166
  __typename?: 'Price';
6141
6167
  /** The contract address of the token. */
6142
6168
  address: Scalars['String']['output'];
6143
- /** Ratio of how confident we are in the price */
6169
+ /**
6170
+ * Ratio of how confident we are in the price
6171
+ * @deprecated Pricing no longer based on specific pools
6172
+ */
6144
6173
  confidence?: Maybe<Scalars['Float']['output']>;
6145
6174
  /** The internal pool address for the price */
6146
6175
  internalPoolAddress?: Maybe<Scalars['String']['output']>;
6147
6176
  /** The network ID the token is deployed on. */
6148
6177
  networkId: Scalars['Int']['output'];
6149
- /** The pool that emitted the swap generating this price */
6150
- poolAddress: Scalars['String']['output'];
6178
+ /**
6179
+ * The pool that emitted the swap generating this price
6180
+ * @deprecated Pricing no longer based on specific pools
6181
+ */
6182
+ poolAddress?: Maybe<Scalars['String']['output']>;
6151
6183
  /** The token price in USD. */
6152
6184
  priceUsd: Scalars['Float']['output'];
6153
6185
  /** The unix timestamp for the price. */
@@ -6828,11 +6860,6 @@ export type Query = {
6828
6860
  primeHolders: PrimeHolders;
6829
6861
  /** Returns a list of NFT collections matching a given query string. */
6830
6862
  searchNfts?: Maybe<NftSearchResponse>;
6831
- /**
6832
- * Returns a list of tokens matching a given query string.
6833
- * @deprecated This query is no longer supported and will not return up to date data. Use `filterTokens` instead.
6834
- */
6835
- searchTokens?: Maybe<TokenSearchResponse>;
6836
6863
  /** Returns a single token by its address & network id. */
6837
6864
  token: EnhancedToken;
6838
6865
  /** Returns a list of token lifecycle events. */
@@ -7324,15 +7351,6 @@ export type QuerySearchNftsArgs = {
7324
7351
  };
7325
7352
 
7326
7353
 
7327
- export type QuerySearchTokensArgs = {
7328
- limit?: InputMaybe<Scalars['Int']['input']>;
7329
- lowVolumeFilter?: InputMaybe<Scalars['Boolean']['input']>;
7330
- networkFilter?: InputMaybe<Array<Scalars['Int']['input']>>;
7331
- resolution?: InputMaybe<Scalars['String']['input']>;
7332
- search: Scalars['String']['input'];
7333
- };
7334
-
7335
-
7336
7354
  export type QueryTokenArgs = {
7337
7355
  input: TokenInput;
7338
7356
  };
@@ -8586,7 +8604,7 @@ export type TokenLifecycleEvent = {
8586
8604
  /** Response returned by `tokenLifecycleEvents`. */
8587
8605
  export type TokenLifecycleEventConnection = {
8588
8606
  __typename?: 'TokenLifecycleEventConnection';
8589
- /** A cursor for use in pagination. */
8607
+ /** A cursor for use in pagination. If non-null, more results are available; pages may be empty due to filtering. */
8590
8608
  cursor?: Maybe<Scalars['String']['output']>;
8591
8609
  /** A list of transactions for a token's top pair. */
8592
8610
  items: Array<Maybe<TokenLifecycleEvent>>;
@@ -8794,17 +8812,6 @@ export enum TokenRankingAttribute {
8794
8812
  WalletAgeStd = 'walletAgeStd'
8795
8813
  }
8796
8814
 
8797
- /** Response returned by `searchTokens`. */
8798
- export type TokenSearchResponse = {
8799
- __typename?: 'TokenSearchResponse';
8800
- /** The number of additional high volume results found. Only used if `lowVolumeFilter` is set to `true`. */
8801
- hasMore?: Maybe<Scalars['Int']['output']>;
8802
- /** If `lowVolumeFilter` is set to `true`, the number of additional low volume results found. If `lowVolumeFilter` is set to `false`, the number of additional high and low volume results found. */
8803
- hasMoreLowVolume?: Maybe<Scalars['Int']['output']>;
8804
- /** A list of tokens. */
8805
- tokens?: Maybe<Array<TokenWithMetadata>>;
8806
- };
8807
-
8808
8815
  /** A sparkline for a token. */
8809
8816
  export type TokenSparkline = {
8810
8817
  __typename?: 'TokenSparkline';
@@ -2268,6 +2268,36 @@
2268
2268
  "baseTokenName": "Wrapped Over",
2269
2269
  "baseTokenDecimals": 18
2270
2270
  },
2271
+ {
2272
+ "__typename": "EvmNetworkConfig",
2273
+ "id": "9745",
2274
+ "networkType": "EVM",
2275
+ "networkId": 9745,
2276
+ "name": "plasma",
2277
+ "enabled": true,
2278
+ "newTokensEnabled": false,
2279
+ "mainnet": true,
2280
+ "wrappedBaseTokenSymbol": "WXPL",
2281
+ "baseTokenSymbol": "XPL",
2282
+ "baseTokenAddress": "0x6100e367285b01f48d07953803a2d8dca5d19873",
2283
+ "defaultPairAddress": "0xb4afac168ca0cce40c5b4d4e8e49a1e18a630b40",
2284
+ "defaultPairQuoteToken": "token0",
2285
+ "stableCoinAddresses": [
2286
+ "0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb"
2287
+ ],
2288
+ "networkIconUrl": "https://icons.defined.fi/networks/plasma.png",
2289
+ "color": "#162F29",
2290
+ "networkShortName": "plasma",
2291
+ "networkName": "Plasma",
2292
+ "explorer": {
2293
+ "name": "Plasma Explorer",
2294
+ "url": "https://plasmascan.to/${type}/${input}",
2295
+ "checksummed": true,
2296
+ "icon": "https://icons.defined.fi/networks/plasma.png"
2297
+ },
2298
+ "baseTokenName": "Wrapped XPL",
2299
+ "baseTokenDecimals": 18
2300
+ },
2271
2301
  {
2272
2302
  "__typename": "EvmNetworkConfig",
2273
2303
  "id": "98866",
@@ -2704,7 +2734,7 @@
2704
2734
  "networkType": "EVM",
2705
2735
  "networkId": 109,
2706
2736
  "name": "shibarium",
2707
- "enabled": true,
2737
+ "enabled": false,
2708
2738
  "newTokensEnabled": null,
2709
2739
  "mainnet": true,
2710
2740
  "wrappedBaseTokenSymbol": "WBONE",
@@ -2825,7 +2855,7 @@
2825
2855
  "networkType": "EVM",
2826
2856
  "networkId": 5031,
2827
2857
  "name": "Somnia",
2828
- "enabled": false,
2858
+ "enabled": true,
2829
2859
  "newTokensEnabled": true,
2830
2860
  "mainnet": true,
2831
2861
  "wrappedBaseTokenSymbol": "WSOMI",
@@ -2850,7 +2880,8 @@
2850
2880
  "checksummed": false,
2851
2881
  "icon": "https://icons.defined.fi/networks/somnia.png"
2852
2882
  },
2853
- "baseTokenName": "SOMI"
2883
+ "baseTokenName": "Wrapped SOMI",
2884
+ "baseTokenDecimals": 18
2854
2885
  },
2855
2886
  {
2856
2887
  "__typename": "EvmNetworkConfig",
@@ -0,0 +1,144 @@
1
+ query FilterTokenWallets($input: FilterTokenWalletsInput!) {
2
+ filterTokenWallets(input: $input) {
3
+ count
4
+ offset
5
+ results {
6
+ address
7
+ amountBoughtUsd1d
8
+ amountBoughtUsd1w
9
+ amountBoughtUsd1y
10
+ amountBoughtUsd30d
11
+ amountSoldUsd1d
12
+ amountSoldUsd1w
13
+ amountSoldUsd1y
14
+ amountSoldUsd30d
15
+ amountSoldUsdAll1d
16
+ amountSoldUsdAll1w
17
+ amountSoldUsdAll1y
18
+ amountSoldUsdAll30d
19
+ backfillState
20
+ botScore
21
+ buys1d
22
+ buys1w
23
+ buys1y
24
+ buys30d
25
+ firstTransactionAt
26
+ labels
27
+ lastTransactionAt
28
+ networkId
29
+ purchasedTokenBalance
30
+ realizedProfitPercentage1d
31
+ realizedProfitPercentage1w
32
+ realizedProfitPercentage1y
33
+ realizedProfitPercentage30d
34
+ realizedProfitUsd1d
35
+ realizedProfitUsd1w
36
+ realizedProfitUsd1y
37
+ realizedProfitUsd30d
38
+ scammerScore
39
+ sells1d
40
+ sells1w
41
+ sells1y
42
+ sells30d
43
+ sellsAll1d
44
+ sellsAll1w
45
+ sellsAll1y
46
+ sellsAll30d
47
+ token {
48
+ address
49
+ cmcId
50
+ createBlockNumber
51
+ createTransactionHash
52
+ createdAt
53
+ creatorAddress
54
+ decimals
55
+ exchanges {
56
+ address
57
+ color
58
+ exchangeVersion
59
+ iconUrl
60
+ id
61
+ name
62
+ networkId
63
+ tradeUrl
64
+ }
65
+ freezable
66
+ id
67
+ info {
68
+ address
69
+ circulatingSupply
70
+ cmcId
71
+ description
72
+ id
73
+ imageBannerUrl
74
+ imageLargeUrl
75
+ imageSmallUrl
76
+ imageThumbHash
77
+ imageThumbUrl
78
+ isScam
79
+ name
80
+ networkId
81
+ symbol
82
+ totalSupply
83
+ }
84
+ isScam
85
+ launchpad {
86
+ completed
87
+ completedAt
88
+ completedSlot
89
+ graduationPercent
90
+ launchpadIconUrl
91
+ launchpadName
92
+ launchpadProtocol
93
+ migrated
94
+ migratedAt
95
+ migratedPoolAddress
96
+ migratedSlot
97
+ poolAddress
98
+ }
99
+ mintable
100
+ name
101
+ networkId
102
+ socialLinks {
103
+ bitcointalk
104
+ blog
105
+ coingecko
106
+ coinmarketcap
107
+ discord
108
+ email
109
+ facebook
110
+ github
111
+ instagram
112
+ linkedin
113
+ reddit
114
+ slack
115
+ telegram
116
+ twitch
117
+ twitter
118
+ website
119
+ wechat
120
+ whitepaper
121
+ youtube
122
+ }
123
+ symbol
124
+ }
125
+ tokenAcquisitionCostUsd
126
+ tokenAddress
127
+ tokenAmountBought1d
128
+ tokenAmountBought1w
129
+ tokenAmountBought1y
130
+ tokenAmountBought30d
131
+ tokenAmountSold1d
132
+ tokenAmountSold1w
133
+ tokenAmountSold1y
134
+ tokenAmountSold30d
135
+ tokenAmountSoldAll1d
136
+ tokenAmountSoldAll1w
137
+ tokenAmountSoldAll1y
138
+ tokenAmountSoldAll30d
139
+ tokenBalance
140
+ tokenBalanceLive
141
+ tokenBalanceLiveUsd
142
+ }
143
+ }
144
+ }