@yodlpay/tokenlists 0.8.17 → 0.8.19

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.
@@ -89,7 +89,7 @@
89
89
  "shortName": "base",
90
90
  "testnet": false,
91
91
  "chainId": 8453,
92
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/chains/8453/logo.png",
92
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/chains/8453/logo.svg",
93
93
  "rpcUrls": [
94
94
  "https://mainnet.base.org"
95
95
  ],
@@ -142,7 +142,7 @@
142
142
  "name": "Glo Dollar",
143
143
  "symbol": "USDGLO",
144
144
  "currency": "USD",
145
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
145
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
146
146
  "decimals": 18,
147
147
  "tags": ["Mainnet", "Stablecoin", "USD", "featured"],
148
148
  "address": "0x4F604735c1cF31399C6E711D5962b2B3E0225AD3"
@@ -175,7 +175,7 @@
175
175
  "name": "Glo Dollar",
176
176
  "symbol": "USDGLO",
177
177
  "currency": "USD",
178
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
178
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
179
179
  "decimals": 18,
180
180
  "tags": ["Optimism", "Stablecoin", "USD", "featured"],
181
181
  "address": "0x4f604735c1cf31399c6e711d5962b2b3e0225ad3"
@@ -197,7 +197,7 @@
197
197
  "name": "Glo Dollar",
198
198
  "symbol": "USDGLO",
199
199
  "currency": "USD",
200
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
200
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
201
201
  "decimals": 18,
202
202
  "tags": ["Base", "Stablecoin", "USD", "featured"],
203
203
  "address": "0x4f604735c1cf31399c6e711d5962b2b3e0225ad3"
@@ -230,7 +230,7 @@
230
230
  "name": "Glo Dollar",
231
231
  "symbol": "USDGLO",
232
232
  "currency": "USD",
233
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
233
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
234
234
  "decimals": 18,
235
235
  "tags": ["Arbitrum", "Stablecoin", "USD", "featured"],
236
236
  "address": "0x4f604735c1cf31399c6e711d5962b2b3e0225ad3"
@@ -580,7 +580,7 @@
580
580
  "name": "Glo Dollar",
581
581
  "symbol": "USDGLO",
582
582
  "currency": "USD",
583
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
583
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
584
584
  "decimals": 18,
585
585
  "tags": ["Polygon", "Stablecoin", "USD", "featured"],
586
586
  "address": "0x4f604735c1cf31399c6e711d5962b2b3e0225ad3"
@@ -614,7 +614,7 @@
614
614
  "decimals": 18,
615
615
  "currency": "USD",
616
616
  "tags": ["BNB Smart Chain", "Stablecoin", "Top10", "USD", "featured"],
617
- "logoUri": "https://assets.coingecko.com/coins/images/35220/thumb/USDC.jpg?1707919050"
617
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDC.svg"
618
618
  },
619
619
  {
620
620
  "chainId": 56,
@@ -752,7 +752,7 @@
752
752
  "coinGeckoId": "idrx",
753
753
  "name": "Indonesian Rupiah Stablecoin",
754
754
  "symbol": "IDRX",
755
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.png",
755
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.svg",
756
756
  "decimals": 0,
757
757
  "currency": "IDR",
758
758
  "tags": ["Stablecoin", "featured", "IDR"],
@@ -763,7 +763,7 @@
763
763
  "coinGeckoId": "idrx",
764
764
  "name": "Indonesian Rupiah Stablecoin",
765
765
  "symbol": "IDRX",
766
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.png",
766
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.svg",
767
767
  "decimals": 0,
768
768
  "currency": "IDR",
769
769
  "tags": ["Stablecoin", "featured", "IDR"],
@@ -774,7 +774,7 @@
774
774
  "coinGeckoId": "idrx",
775
775
  "name": "Indonesian Rupiah Stablecoin",
776
776
  "symbol": "IDRX",
777
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.png",
777
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.svg",
778
778
  "decimals": 2,
779
779
  "currency": "IDR",
780
780
  "tags": ["Stablecoin", "featured", "IDR"],
@@ -840,7 +840,7 @@
840
840
  "coinGeckoId": "brz",
841
841
  "name": "Brazilian Digital Token",
842
842
  "symbol": "BRZ",
843
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.webp",
843
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.svg",
844
844
  "decimals": 18,
845
845
  "currency": "BRL",
846
846
  "tags": ["Stablecoin", "Polygon", "Featured", "BRL"],
@@ -851,7 +851,7 @@
851
851
  "coinGeckoId": "brla-digital-brla",
852
852
  "name": "BRLA Digital BRLA",
853
853
  "symbol": "BRLA",
854
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRLA.webp",
854
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRLA.svg",
855
855
  "decimals": 18,
856
856
  "currency": "BRL",
857
857
  "tags": ["Stablecoin", "Polygon", "Featured", "BRL"],
@@ -862,7 +862,7 @@
862
862
  "coinGeckoId": "brz",
863
863
  "name": "Brazilian Digital Token",
864
864
  "symbol": "BRZ",
865
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.webp",
865
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.svg",
866
866
  "decimals": 18,
867
867
  "currency": "BRL",
868
868
  "tags": ["Stablecoin", "Base", "Featured", "BRL"],
@@ -874,7 +874,7 @@
874
874
  "name": "EURC",
875
875
  "symbol": "EURC",
876
876
  "currency": "EUR",
877
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.png",
877
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.svg",
878
878
  "decimals": 6,
879
879
  "tags": ["Base", "Stablecoin", "EUR"],
880
880
  "address": "0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42"
@@ -885,7 +885,7 @@
885
885
  "name": "EURC",
886
886
  "symbol": "EURC",
887
887
  "currency": "EUR",
888
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.png",
888
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.svg",
889
889
  "decimals": 6,
890
890
  "tags": ["Mainnet", "Stablecoin", "EUR"],
891
891
  "address": "0x1aBaEA1f7C830bD89Acc67eC4af516284b1bC33c"
@@ -895,10 +895,20 @@
895
895
  "coinGeckoId": "tether-gold",
896
896
  "name": "Tether Gold",
897
897
  "symbol": "XAUt",
898
- "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/XAUt.webp",
898
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/XAUt.svg",
899
899
  "decimals": 6,
900
900
  "tags": ["Mainnet"],
901
901
  "address": "0x68749665ff8d2d112fa859aa293f07a622782f38"
902
+ },
903
+ {
904
+ "chainId": 42161,
905
+ "coinGeckoId": "pepe",
906
+ "name": "Pepe",
907
+ "symbol": "PEPE",
908
+ "logoUri": "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/PEPE.png",
909
+ "decimals": 18,
910
+ "tags": ["Arbitrum"],
911
+ "address": "0x25d887Ce7a35172C62FeBFD67a1856F20FaEbB00"
902
912
  }
903
913
  ]
904
914
  }
@@ -1233,22 +1233,6 @@
1233
1233
  "decimals": 18,
1234
1234
  "logoUri": "https://assets.coingecko.com/coins/images/15069/thumb/Pendle_Logo_Normal-03.png?1696514728"
1235
1235
  },
1236
- {
1237
- "chainId": 42161,
1238
- "address": "0x25d887ce7a35172c62febfd67a1856f20faebb00",
1239
- "name": "Pepe",
1240
- "symbol": "PEPE",
1241
- "decimals": 18,
1242
- "logoUri": "https://assets.coingecko.com/coins/images/29850/thumb/pepe-token.jpeg?1696528776"
1243
- },
1244
- {
1245
- "chainId": 42161,
1246
- "address": "0xef00278d7eadf3b2c05267a2f185e468ad7eab7d",
1247
- "name": "PepePAD",
1248
- "symbol": "PEPE",
1249
- "decimals": 18,
1250
- "logoUri": "https://assets.coingecko.com/coins/images/30321/thumb/logo200.png?1696529222"
1251
- },
1252
1236
  {
1253
1237
  "chainId": 42161,
1254
1238
  "address": "0x3082cc23568ea640225c2467653db90e9250aaa0",
@@ -1473,14 +1457,6 @@
1473
1457
  "decimals": 6,
1474
1458
  "logoUri": "https://assets.coingecko.com/coins/images/25757/thumb/USD__logo.png?1696524843"
1475
1459
  },
1476
- {
1477
- "chainId": 8453,
1478
- "address": "0x698dc45e4f10966f6d1d98e3bfd7071d8144c233",
1479
- "name": "PEPE 0x69 ON BASE",
1480
- "symbol": "PEPE",
1481
- "decimals": 9,
1482
- "logoUri": "https://assets.coingecko.com/coins/images/37400/thumb/lOGO.jpg?1714352456"
1483
- },
1484
1460
  {
1485
1461
  "chainId": 8453,
1486
1462
  "address": "0x80f45eacf6537498ecc660e4e4a2d2f99e195cf4",
@@ -2242,4 +2218,4 @@
2242
2218
  "logoUri": "https://assets.coingecko.com/coins/images/21629/thumb/solana.jpg?1696520989"
2243
2219
  }
2244
2220
  ]
2245
- }
2221
+ }
@@ -213,7 +213,7 @@ var tokens = [
213
213
  name: "Glo Dollar",
214
214
  symbol: "USDGLO",
215
215
  currency: "USD",
216
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
216
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
217
217
  decimals: 18,
218
218
  tags: [
219
219
  "Mainnet",
@@ -263,7 +263,7 @@ var tokens = [
263
263
  name: "Glo Dollar",
264
264
  symbol: "USDGLO",
265
265
  currency: "USD",
266
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
266
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
267
267
  decimals: 18,
268
268
  tags: [
269
269
  "Optimism",
@@ -296,7 +296,7 @@ var tokens = [
296
296
  name: "Glo Dollar",
297
297
  symbol: "USDGLO",
298
298
  currency: "USD",
299
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
299
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
300
300
  decimals: 18,
301
301
  tags: [
302
302
  "Base",
@@ -346,7 +346,7 @@ var tokens = [
346
346
  name: "Glo Dollar",
347
347
  symbol: "USDGLO",
348
348
  currency: "USD",
349
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
349
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
350
350
  decimals: 18,
351
351
  tags: [
352
352
  "Arbitrum",
@@ -840,7 +840,7 @@ var tokens = [
840
840
  name: "Glo Dollar",
841
841
  symbol: "USDGLO",
842
842
  currency: "USD",
843
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.png",
843
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDGLO.svg",
844
844
  decimals: 18,
845
845
  tags: [
846
846
  "Polygon",
@@ -894,7 +894,7 @@ var tokens = [
894
894
  "USD",
895
895
  "featured"
896
896
  ],
897
- logoUri: "https://assets.coingecko.com/coins/images/35220/thumb/USDC.jpg?1707919050"
897
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/USDC.svg"
898
898
  },
899
899
  {
900
900
  chainId: 56,
@@ -1090,7 +1090,7 @@ var tokens = [
1090
1090
  coinGeckoId: "idrx",
1091
1091
  name: "Indonesian Rupiah Stablecoin",
1092
1092
  symbol: "IDRX",
1093
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.png",
1093
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.svg",
1094
1094
  decimals: 0,
1095
1095
  currency: "IDR",
1096
1096
  tags: [
@@ -1105,7 +1105,7 @@ var tokens = [
1105
1105
  coinGeckoId: "idrx",
1106
1106
  name: "Indonesian Rupiah Stablecoin",
1107
1107
  symbol: "IDRX",
1108
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.png",
1108
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.svg",
1109
1109
  decimals: 0,
1110
1110
  currency: "IDR",
1111
1111
  tags: [
@@ -1120,7 +1120,7 @@ var tokens = [
1120
1120
  coinGeckoId: "idrx",
1121
1121
  name: "Indonesian Rupiah Stablecoin",
1122
1122
  symbol: "IDRX",
1123
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.png",
1123
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/IDRX.svg",
1124
1124
  decimals: 2,
1125
1125
  currency: "IDR",
1126
1126
  tags: [
@@ -1210,7 +1210,7 @@ var tokens = [
1210
1210
  coinGeckoId: "brz",
1211
1211
  name: "Brazilian Digital Token",
1212
1212
  symbol: "BRZ",
1213
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.webp",
1213
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.svg",
1214
1214
  decimals: 18,
1215
1215
  currency: "BRL",
1216
1216
  tags: [
@@ -1226,7 +1226,7 @@ var tokens = [
1226
1226
  coinGeckoId: "brla-digital-brla",
1227
1227
  name: "BRLA Digital BRLA",
1228
1228
  symbol: "BRLA",
1229
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRLA.webp",
1229
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRLA.svg",
1230
1230
  decimals: 18,
1231
1231
  currency: "BRL",
1232
1232
  tags: [
@@ -1242,7 +1242,7 @@ var tokens = [
1242
1242
  coinGeckoId: "brz",
1243
1243
  name: "Brazilian Digital Token",
1244
1244
  symbol: "BRZ",
1245
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.webp",
1245
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/BRZ.svg",
1246
1246
  decimals: 18,
1247
1247
  currency: "BRL",
1248
1248
  tags: [
@@ -1259,7 +1259,7 @@ var tokens = [
1259
1259
  name: "EURC",
1260
1260
  symbol: "EURC",
1261
1261
  currency: "EUR",
1262
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.png",
1262
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.svg",
1263
1263
  decimals: 6,
1264
1264
  tags: [
1265
1265
  "Base",
@@ -1274,7 +1274,7 @@ var tokens = [
1274
1274
  name: "EURC",
1275
1275
  symbol: "EURC",
1276
1276
  currency: "EUR",
1277
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.png",
1277
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/EURC.svg",
1278
1278
  decimals: 6,
1279
1279
  tags: [
1280
1280
  "Mainnet",
@@ -1288,12 +1288,24 @@ var tokens = [
1288
1288
  coinGeckoId: "tether-gold",
1289
1289
  name: "Tether Gold",
1290
1290
  symbol: "XAUt",
1291
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/XAUt.webp",
1291
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/XAUt.svg",
1292
1292
  decimals: 6,
1293
1293
  tags: [
1294
1294
  "Mainnet"
1295
1295
  ],
1296
1296
  address: "0x68749665ff8d2d112fa859aa293f07a622782f38"
1297
+ },
1298
+ {
1299
+ chainId: 42161,
1300
+ coinGeckoId: "pepe",
1301
+ name: "Pepe",
1302
+ symbol: "PEPE",
1303
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/tokens/PEPE.png",
1304
+ decimals: 18,
1305
+ tags: [
1306
+ "Arbitrum"
1307
+ ],
1308
+ address: "0x25d887Ce7a35172C62FeBFD67a1856F20FaEbB00"
1297
1309
  }
1298
1310
  ];
1299
1311
  var featuredTokenlist = {
@@ -2535,22 +2547,6 @@ var tokens$1 = [
2535
2547
  decimals: 18,
2536
2548
  logoUri: "https://assets.coingecko.com/coins/images/15069/thumb/Pendle_Logo_Normal-03.png?1696514728"
2537
2549
  },
2538
- {
2539
- chainId: 42161,
2540
- address: "0x25d887ce7a35172c62febfd67a1856f20faebb00",
2541
- name: "Pepe",
2542
- symbol: "PEPE",
2543
- decimals: 18,
2544
- logoUri: "https://assets.coingecko.com/coins/images/29850/thumb/pepe-token.jpeg?1696528776"
2545
- },
2546
- {
2547
- chainId: 42161,
2548
- address: "0xef00278d7eadf3b2c05267a2f185e468ad7eab7d",
2549
- name: "PepePAD",
2550
- symbol: "PEPE",
2551
- decimals: 18,
2552
- logoUri: "https://assets.coingecko.com/coins/images/30321/thumb/logo200.png?1696529222"
2553
- },
2554
2550
  {
2555
2551
  chainId: 42161,
2556
2552
  address: "0x3082cc23568ea640225c2467653db90e9250aaa0",
@@ -2775,14 +2771,6 @@ var tokens$1 = [
2775
2771
  decimals: 6,
2776
2772
  logoUri: "https://assets.coingecko.com/coins/images/25757/thumb/USD__logo.png?1696524843"
2777
2773
  },
2778
- {
2779
- chainId: 8453,
2780
- address: "0x698dc45e4f10966f6d1d98e3bfd7071d8144c233",
2781
- name: "PEPE 0x69 ON BASE",
2782
- symbol: "PEPE",
2783
- decimals: 9,
2784
- logoUri: "https://assets.coingecko.com/coins/images/37400/thumb/lOGO.jpg?1714352456"
2785
- },
2786
2774
  {
2787
2775
  chainId: 8453,
2788
2776
  address: "0x80f45eacf6537498ecc660e4e4a2d2f99e195cf4",
@@ -3643,7 +3631,7 @@ var chains = [
3643
3631
  shortName: "base",
3644
3632
  testnet: false,
3645
3633
  chainId: 8453,
3646
- logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/chains/8453/logo.png",
3634
+ logoUri: "https://kuezuu6pdfndtxdd.public.blob.vercel-storage.com/chains/8453/logo.svg",
3647
3635
  rpcUrls: [
3648
3636
  "https://mainnet.base.org"
3649
3637
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"tokenlists.cjs.development.js","sources":["../src/abis.ts","../src/types.ts","../src/versionComparator.ts","../src/isVersionUpdate.ts","../src/getVersionUpgrade.ts","../src/diffTokenLists.ts","../src/minVersionBump.ts","../src/nextVersion.ts","../src/index.ts"],"sourcesContent":["import CurveRouterV13Abi from \"./abis/curverouterv13.abi.json\";\nimport YodlRouterV01 from \"./abis/YodlRouterV0.1.abi.json\";\nimport YodlRouterV02 from \"./abis/YodlRouterV0.2.abi.json\";\nimport YodlRouterV03 from \"./abis/YodlRouterV0.3.abi.json\";\nimport YodlRouterV04 from \"./abis/YodlRouterV0.4.abi.json\";\nimport YodlRouterV05 from \"./abis/YodlRouterV0.5.abi.json\";\nimport YodlRouterV06 from \"./abis/YodlRouterV0.6.abi.json\";\nimport YodlRouterV07 from \"./abis/YodlRouterV0.7.abi.json\";\nimport YodlRouterV08 from \"./abis/YodlRouterV0.8.abi.json\";\n\nexport const YODL_ROUTER_ABIS: { [key: string]: any } = {\n \"0.1\": YodlRouterV01,\n \"0.2\": YodlRouterV02,\n \"0.3\": YodlRouterV03,\n \"0.4\": YodlRouterV04,\n \"0.5\": YodlRouterV05,\n \"0.6\": YodlRouterV06,\n \"0.7\": YodlRouterV07,\n \"0.8\": YodlRouterV08,\n \"test\": YodlRouterV03\n}\nexport const CURVE_ROUTER_ABI = CurveRouterV13Abi;\n","type ExtensionValue = string | number | boolean | null | undefined;\n\nexport enum TokenListTagNames {\n // Networks\n MAINNET = 'Mainnet',\n OPTIMISM = 'Optimism',\n ARBITRUM = 'Arbitrum',\n AVALANCHE = 'Avalanche',\n BASE = 'Base',\n TESTNET = 'TESTNET',\n\n // Coin/currency\n STABLECOIN = 'Stablecoin',\n USD = 'USD',\n EUR = 'EUR',\n\n // Misc\n TOP_10 = 'Top10',\n NATIVE_TOKEN = 'Native Token',\n WRAPPED = 'wrapped',\n}\n\nexport interface CurveRouterInfo {\n readonly chainId: number;\n readonly address: string;\n}\n\nexport interface RouterInfo {\n readonly chainId: number;\n readonly address: string;\n readonly timestamp: string;\n readonly version: string;\n readonly fee: string;\n}\n\nexport interface TestnetFaucetInfo {\n readonly chainId: number;\n readonly address: string;\n readonly token: string;\n}\n\nexport interface ChainInfo {\n readonly chainId: number;\n readonly chainName: string;\n // shortName is the EIP3770 short name\n // chain details can be found here: https://github.com/ethereum-lists/chains/tree/master/_data/chains\n readonly shortName: string;\n readonly logoUri: string;\n readonly explorerUrl: string;\n readonly timestamp: string;\n readonly rpcUrls: string[];\n readonly wrappedNativeToken: string;\n readonly nativeTokenName: string;\n readonly feeTreasury?: string;\n readonly testnet: boolean;\n readonly priceFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly tokenFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly curveRouterAddress?: string;\n readonly dexes?: string[];\n}\n\nexport interface TokenInfo {\n readonly chainId: number;\n readonly address: string;\n readonly name: string;\n readonly decimals: number;\n readonly symbol: string;\n readonly coinGeckoId?: string;\n readonly currency?: string;\n readonly logoUri?: string;\n readonly tags?: TokenListTagNames[];\n readonly extensions?: {\n readonly [key: string]:\n | {\n [key: string]:\n | {\n [key: string]: ExtensionValue;\n }\n | ExtensionValue;\n }\n | ExtensionValue;\n };\n}\n\nexport interface Version {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n}\n\nexport interface TokenList {\n readonly name: string;\n readonly timestamp: string;\n readonly version: Version;\n readonly tokens: TokenInfo[];\n readonly keywords?: string[];\n readonly tags?: any;\n readonly logoUri?: string;\n}\n\nexport interface PriceFeed {\n readonly address: string;\n readonly name: string;\n readonly assetName: string;\n readonly type: string;\n readonly path: string;\n readonly input: string;\n readonly output: string;\n readonly deviation: number;\n readonly decimals: number;\n readonly updateInterval: number;\n readonly chainId: number;\n}\n\nexport interface FiatCurrency {\n readonly name: string;\n readonly symbol: string;\n readonly sign: string;\n}\n","import { Version } from \"./types\";\n\n/**\n * Comparator function that allows sorting version from lowest to highest\n * @param versionA version A to compare\n * @param versionB version B to compare\n * @returns -1 if versionA comes before versionB, 0 if versionA is equal to version B, and 1 if version A comes after version B\n */\nexport function versionComparator(\n versionA: Version,\n versionB: Version\n): -1 | 0 | 1 {\n if (versionA.major < versionB.major) {\n return -1;\n } else if (versionA.major > versionB.major) {\n return 1;\n } else if (versionA.minor < versionB.minor) {\n return -1;\n } else if (versionA.minor > versionB.minor) {\n return 1;\n } else if (versionA.patch < versionB.patch) {\n return -1;\n } else if (versionA.patch > versionB.patch) {\n return 1;\n } else {\n return 0;\n }\n}\n","import { versionComparator } from './versionComparator';\nimport { Version } from './types';\n\n/**\n * Returns true if versionB is an update over versionA\n */\nexport function isVersionUpdate(base: Version, update: Version): boolean {\n return versionComparator(base, update) < 0;\n}","import { Version } from \"./types\";\n\n/**\n * Enum describing types of version differences\n */\nexport enum VersionUpgrade {\n NONE,\n PATCH,\n MINOR,\n MAJOR,\n}\n\n/**\n * Return the upgrade type from the base version to the update version.\n * Note that downgrades and equivalent versions are both treated as `NONE`.\n * @param base base list\n * @param update update to the list\n */\nexport function getVersionUpgrade(\n base: Version,\n update: Version\n): VersionUpgrade {\n if (update.major > base.major) {\n return VersionUpgrade.MAJOR;\n }\n if (update.major < base.major) {\n return VersionUpgrade.NONE;\n }\n if (update.minor > base.minor) {\n return VersionUpgrade.MINOR;\n }\n if (update.minor < base.minor) {\n return VersionUpgrade.NONE;\n }\n return update.patch > base.patch ? VersionUpgrade.PATCH : VersionUpgrade.NONE;\n}\n","import { TokenInfo } from \"./types\";\n\nexport type TokenInfoChangeKey = Exclude<\n keyof TokenInfo,\n \"address\" | \"chainId\"\n>;\nexport type TokenInfoChanges = Array<TokenInfoChangeKey>;\n\n/**\n * compares two token info key values\n * this subset of full deep equal functionality does not work on objects or object arrays\n * @param a comparison item a\n * @param b comparison item b\n */\nfunction compareTokenInfoProperty(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.every((el, i) => b[i] === el);\n }\n return false;\n}\n\n/**\n * Differences between a base list and an updated list.\n */\nexport interface TokenListDiff {\n /**\n * Tokens from updated with chainId/address not present in base list\n */\n readonly added: TokenInfo[];\n /**\n * Tokens from base with chainId/address not present in the updated list\n */\n readonly removed: TokenInfo[];\n /**\n * The token info that changed\n */\n readonly changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n}\n\n/**\n * Computes the diff of a token list where the first argument is the base and the second argument is the updated list.\n * @param base base list\n * @param update updated list\n */\nexport function diffTokenLists(\n base: TokenInfo[],\n update: TokenInfo[]\n): TokenListDiff {\n const indexedBase = base.reduce<{\n [chainId: number]: { [address: string]: TokenInfo };\n }>((memo, tokenInfo) => {\n if (!memo[tokenInfo.chainId]) memo[tokenInfo.chainId] = {};\n memo[tokenInfo.chainId][tokenInfo.address] = tokenInfo;\n return memo;\n }, {});\n\n const newListUpdates = update.reduce<{\n added: TokenInfo[];\n changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n index: {\n [chainId: number]: {\n [address: string]: true;\n };\n };\n }>(\n (memo, tokenInfo) => {\n const baseToken = indexedBase[tokenInfo.chainId]?.[tokenInfo.address];\n if (!baseToken) {\n memo.added.push(tokenInfo);\n } else {\n const changes: TokenInfoChanges = Object.keys(tokenInfo)\n .filter(\n (s): s is TokenInfoChangeKey => s !== \"address\" && s !== \"chainId\"\n )\n .filter((s) => {\n return !compareTokenInfoProperty(tokenInfo[s], baseToken[s]);\n });\n if (changes.length > 0) {\n if (!memo.changed[tokenInfo.chainId]) {\n memo.changed[tokenInfo.chainId] = {};\n }\n memo.changed[tokenInfo.chainId][tokenInfo.address] = changes;\n }\n }\n\n if (!memo.index[tokenInfo.chainId]) {\n memo.index[tokenInfo.chainId] = {\n [tokenInfo.address]: true,\n };\n } else {\n memo.index[tokenInfo.chainId][tokenInfo.address] = true;\n }\n\n return memo;\n },\n { added: [], changed: {}, index: {} }\n );\n\n const removed = base.reduce<TokenInfo[]>((list, curr) => {\n if (\n !newListUpdates.index[curr.chainId] ||\n !newListUpdates.index[curr.chainId][curr.address]\n ) {\n list.push(curr);\n }\n return list;\n }, []);\n\n return {\n added: newListUpdates.added,\n changed: newListUpdates.changed,\n removed,\n };\n}\n","import { diffTokenLists } from \"./diffTokenLists\";\nimport { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { TokenInfo } from \"./types\";\n\n/**\n * Returns the minimum version bump for the given list\n * @param baseList the base list of tokens\n * @param updatedList the updated list of tokens\n */\nexport function minVersionBump(\n baseList: TokenInfo[],\n updatedList: TokenInfo[]\n): VersionUpgrade {\n const diff = diffTokenLists(baseList, updatedList);\n if (diff.removed.length > 0) return VersionUpgrade.MAJOR;\n if (diff.added.length > 0) return VersionUpgrade.MINOR;\n if (Object.keys(diff.changed).length > 0) return VersionUpgrade.PATCH;\n return VersionUpgrade.NONE;\n}\n","import { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { Version } from \"./types\";\n\n/**\n * Returns the next version of the list given a base version and the upgrade type\n * @param base current version\n * @param bump the upgrade type\n */\nexport function nextVersion(base: Version, bump: VersionUpgrade): Version {\n switch (bump) {\n case VersionUpgrade.NONE:\n return base;\n\n case VersionUpgrade.MAJOR:\n return { major: base.major + 1, minor: 0, patch: 0 };\n\n case VersionUpgrade.MINOR:\n return {\n major: base.major,\n minor: base.minor + 1,\n patch: 0,\n };\n\n case VersionUpgrade.PATCH:\n return {\n major: base.major,\n minor: base.minor,\n patch: base.patch + 1,\n };\n }\n}\n","import featuredTokenlist from './tokenlist-featured.json';\nimport generatedTokenlist from './tokenlist-generated.json';\nimport chainlist from './chainlist-v1.json';\nimport routerlist from './routerlist-v1.json';\nimport priceFeeds from './pricefeeds.json';\nimport fiatCurrencies from './fiatCurrencies.json';\nimport CurveRouters from './curve.json';\nimport {\n ChainInfo,\n RouterInfo,\n TokenInfo,\n TestnetFaucetInfo,\n CurveRouterInfo,\n} from './types';\n\nexport * from './abis';\nexport * from './types';\nexport * from './isVersionUpdate';\nexport * from './getVersionUpgrade';\nexport * from './diffTokenLists';\nexport * from './minVersionBump';\nexport * from './nextVersion';\nexport * from './versionComparator';\n\nexport const tokenlist = featuredTokenlist.tokens.concat(\n //@ts-ignore\n generatedTokenlist.tokens as TokenInfo[]\n);\n\nexport function getCurveRouterAddress(chainId: number): string {\n const curveRouter = CurveRouters.find(router => router.chainId == chainId);\n if (curveRouter == undefined) {\n throw new Error(`Unable to find CurveRouterNG for chainId ${chainId}`);\n }\n return curveRouter.address;\n}\n\nexport function getChains(): ChainInfo[] {\n return chainlist.chains;\n}\n\nexport function getChain(chainId: number): ChainInfo {\n return chainlist.chains.find((needle: any) => {\n return needle.chainId === chainId;\n }) as ChainInfo;\n}\n\nexport function getTokenByAddress(\n tokenAddress: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (tokenlist.find((token: any) => {\n return (\n token.address.toLowerCase() === tokenAddress.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getPriceFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId);\n}\n\nexport function getTokenFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'crypto');\n}\n\nexport function getFiatFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'fiat');\n}\n\nexport function getFiatCurrency(symbol: string) {\n return fiatCurrencies.find(\n c => c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n}\n\nexport function getFiatCurrencies() {\n return fiatCurrencies;\n}\n\nexport function getPriceFeed(\n chainId: number,\n baseSymbol: string,\n quoteSymbol?: string\n) {\n const _quoteSymbol = quoteSymbol ? quoteSymbol : 'USD';\n const feed = priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.output === _quoteSymbol &&\n f.chainId === chainId\n );\n if (feed) {\n return feed;\n } else {\n // feed not found, find any feed that matches the base symbol\n return priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.chainId === chainId\n );\n }\n}\n\nexport function getFeaturedTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (featuredTokenlist.tokens.find((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n const tokens = tokenlist.filter((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo[];\n\n if (chainId && tokens && tokens.length > 1) {\n throw new Error(`Duplicate tokens found for symbol ${tokenSymbol}`);\n }\n\n return tokens.length > 0 ? tokens[0] : null;\n}\n\nexport function getTokens(chainId?: number): TokenInfo[] {\n return chainId\n ? (tokenlist.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as TokenInfo[])\n : (tokenlist as TokenInfo[]);\n}\n\nexport function getRouters(chainId: number): RouterInfo[] {\n return routerlist.routers.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as RouterInfo[];\n}\n\nexport function getRouter(\n chainId: number,\n version: string\n): RouterInfo | undefined {\n return routerlist.routers.find((needle: any) => {\n return needle.chainId === chainId && needle.version === version;\n }) as RouterInfo;\n}\n\nexport function getRouterByAddress(\n address: string,\n chainId?: number\n): RouterInfo | undefined {\n const findByAddress = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase();\n\n const findByAddressAndChainId = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase() &&\n router.chainId == chainId;\n\n const filter = chainId ? findByAddressAndChainId : findByAddress;\n\n const routerInfo = routerlist.routers.find(filter);\n return routerInfo;\n}\n\nexport function getLatestRouter(chainId: number): RouterInfo {\n const sorted = getRouters(chainId).sort((a, b) => {\n return Date.parse(a.timestamp) - Date.parse(b.timestamp);\n });\n return sorted[sorted.length - 1];\n}\n\nexport function getShortNames(): string[] {\n return chainlist.chains.map(chain => chain.shortName);\n}\n\nexport function getNativeToken(chainId: number): string {\n return chainlist.chains.find(chain => chain.chainId === chainId)\n ?.nativeTokenName!;\n}\n\nexport function getNativeWrappedToken(chainId: number): TokenInfo {\n const nativeTokens = featuredTokenlist.tokens.filter(\n t =>\n t.chainId === chainId &&\n t.tags.map(tag => tag.toLowerCase()).includes('wrapped') &&\n t.tags.map(tag => tag.toLowerCase()).includes('native token')\n ) as TokenInfo[];\n if (nativeTokens.length > 1) {\n throw new Error(\n `Found more than one native wrapped token for chain ${chainId}`\n );\n } else if (nativeTokens.length < 1) {\n throw new Error(`No native wrapped token found for chain ${chainId}`);\n }\n return nativeTokens[0];\n}\n"],"names":["YODL_ROUTER_ABIS","YodlRouterV01","YodlRouterV02","YodlRouterV03","YodlRouterV04","YodlRouterV05","YodlRouterV06","YodlRouterV07","YodlRouterV08","CURVE_ROUTER_ABI","CurveRouterV13Abi","TokenListTagNames","versionComparator","versionA","versionB","major","minor","patch","isVersionUpdate","base","update","VersionUpgrade","getVersionUpgrade","MAJOR","NONE","MINOR","PATCH","compareTokenInfoProperty","a","b","Array","isArray","every","el","i","diffTokenLists","indexedBase","reduce","memo","tokenInfo","chainId","address","newListUpdates","baseToken","added","push","changes","Object","keys","filter","s","length","changed","index","removed","list","curr","minVersionBump","baseList","updatedList","diff","nextVersion","bump","tokenlist","featuredTokenlist","tokens","concat","generatedTokenlist","getCurveRouterAddress","curveRouter","CurveRouters","find","router","undefined","Error","getChains","chainlist","chains","getChain","needle","getTokenByAddress","tokenAddress","token","toLowerCase","getPriceFeeds","priceFeeds","f","getTokenFeeds","type","getFiatFeeds","getFiatCurrency","symbol","fiatCurrencies","c","getFiatCurrencies","getPriceFeed","baseSymbol","quoteSymbol","_quoteSymbol","feed","input","output","getFeaturedTokenBySymbol","tokenSymbol","getTokenBySymbol","getTokens","getRouters","routerlist","routers","getRouter","version","getRouterByAddress","findByAddress","findByAddressAndChainId","routerInfo","getLatestRouter","sorted","sort","Date","parse","timestamp","getShortNames","map","chain","shortName","getNativeToken","nativeTokenName","getNativeWrappedToken","nativeTokens","t","tags","tag","includes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"tokenlists.cjs.development.js","sources":["../src/abis.ts","../src/types.ts","../src/versionComparator.ts","../src/isVersionUpdate.ts","../src/getVersionUpgrade.ts","../src/diffTokenLists.ts","../src/minVersionBump.ts","../src/nextVersion.ts","../src/index.ts"],"sourcesContent":["import CurveRouterV13Abi from \"./abis/curverouterv13.abi.json\";\nimport YodlRouterV01 from \"./abis/YodlRouterV0.1.abi.json\";\nimport YodlRouterV02 from \"./abis/YodlRouterV0.2.abi.json\";\nimport YodlRouterV03 from \"./abis/YodlRouterV0.3.abi.json\";\nimport YodlRouterV04 from \"./abis/YodlRouterV0.4.abi.json\";\nimport YodlRouterV05 from \"./abis/YodlRouterV0.5.abi.json\";\nimport YodlRouterV06 from \"./abis/YodlRouterV0.6.abi.json\";\nimport YodlRouterV07 from \"./abis/YodlRouterV0.7.abi.json\";\nimport YodlRouterV08 from \"./abis/YodlRouterV0.8.abi.json\";\n\nexport const YODL_ROUTER_ABIS: { [key: string]: any } = {\n \"0.1\": YodlRouterV01,\n \"0.2\": YodlRouterV02,\n \"0.3\": YodlRouterV03,\n \"0.4\": YodlRouterV04,\n \"0.5\": YodlRouterV05,\n \"0.6\": YodlRouterV06,\n \"0.7\": YodlRouterV07,\n \"0.8\": YodlRouterV08,\n \"test\": YodlRouterV03\n}\nexport const CURVE_ROUTER_ABI = CurveRouterV13Abi;\n","type ExtensionValue = string | number | boolean | null | undefined;\n\nexport enum TokenListTagNames {\n // Networks\n MAINNET = 'Mainnet',\n OPTIMISM = 'Optimism',\n ARBITRUM = 'Arbitrum',\n AVALANCHE = 'Avalanche',\n BASE = 'Base',\n TESTNET = 'TESTNET',\n\n // Coin/currency\n STABLECOIN = 'Stablecoin',\n USD = 'USD',\n EUR = 'EUR',\n\n // Misc\n TOP_10 = 'Top10',\n NATIVE_TOKEN = 'Native Token',\n WRAPPED = 'wrapped',\n}\n\nexport interface CurveRouterInfo {\n readonly chainId: number;\n readonly address: string;\n}\n\nexport interface RouterInfo {\n readonly chainId: number;\n readonly address: string;\n readonly timestamp: string;\n readonly version: string;\n readonly fee: string;\n}\n\nexport interface TestnetFaucetInfo {\n readonly chainId: number;\n readonly address: string;\n readonly token: string;\n}\n\nexport interface ChainInfo {\n readonly chainId: number;\n readonly chainName: string;\n // shortName is the EIP3770 short name\n // chain details can be found here: https://github.com/ethereum-lists/chains/tree/master/_data/chains\n readonly shortName: string;\n readonly logoUri: string;\n readonly explorerUrl: string;\n readonly timestamp: string;\n readonly rpcUrls: string[];\n readonly wrappedNativeToken: string;\n readonly nativeTokenName: string;\n readonly feeTreasury?: string;\n readonly testnet: boolean;\n readonly priceFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly tokenFeeds?: {\n readonly [key: string]: string | undefined;\n };\n readonly curveRouterAddress?: string;\n readonly dexes?: string[];\n}\n\nexport interface TokenInfo {\n readonly chainId: number;\n readonly address: string;\n readonly name: string;\n readonly decimals: number;\n readonly symbol: string;\n readonly coinGeckoId?: string;\n readonly currency?: string;\n readonly logoUri?: string;\n readonly tags?: TokenListTagNames[];\n readonly extensions?: {\n readonly [key: string]:\n | {\n [key: string]:\n | {\n [key: string]: ExtensionValue;\n }\n | ExtensionValue;\n }\n | ExtensionValue;\n };\n}\n\nexport interface Version {\n readonly major: number;\n readonly minor: number;\n readonly patch: number;\n}\n\nexport interface TokenList {\n readonly name: string;\n readonly timestamp: string;\n readonly version: Version;\n readonly tokens: TokenInfo[];\n readonly keywords?: string[];\n readonly tags?: any;\n readonly logoUri?: string;\n}\n\nexport interface PriceFeed {\n readonly address: string;\n readonly name: string;\n readonly assetName: string;\n readonly type: string;\n readonly path: string;\n readonly input: string;\n readonly output: string;\n readonly deviation: number;\n readonly decimals: number;\n readonly updateInterval: number;\n readonly chainId: number;\n}\n\nexport interface FiatCurrency {\n readonly name: string;\n readonly symbol: string;\n readonly sign: string;\n}\n","import { Version } from \"./types\";\n\n/**\n * Comparator function that allows sorting version from lowest to highest\n * @param versionA version A to compare\n * @param versionB version B to compare\n * @returns -1 if versionA comes before versionB, 0 if versionA is equal to version B, and 1 if version A comes after version B\n */\nexport function versionComparator(\n versionA: Version,\n versionB: Version\n): -1 | 0 | 1 {\n if (versionA.major < versionB.major) {\n return -1;\n } else if (versionA.major > versionB.major) {\n return 1;\n } else if (versionA.minor < versionB.minor) {\n return -1;\n } else if (versionA.minor > versionB.minor) {\n return 1;\n } else if (versionA.patch < versionB.patch) {\n return -1;\n } else if (versionA.patch > versionB.patch) {\n return 1;\n } else {\n return 0;\n }\n}\n","import { versionComparator } from './versionComparator';\nimport { Version } from './types';\n\n/**\n * Returns true if versionB is an update over versionA\n */\nexport function isVersionUpdate(base: Version, update: Version): boolean {\n return versionComparator(base, update) < 0;\n}","import { Version } from \"./types\";\n\n/**\n * Enum describing types of version differences\n */\nexport enum VersionUpgrade {\n NONE,\n PATCH,\n MINOR,\n MAJOR,\n}\n\n/**\n * Return the upgrade type from the base version to the update version.\n * Note that downgrades and equivalent versions are both treated as `NONE`.\n * @param base base list\n * @param update update to the list\n */\nexport function getVersionUpgrade(\n base: Version,\n update: Version\n): VersionUpgrade {\n if (update.major > base.major) {\n return VersionUpgrade.MAJOR;\n }\n if (update.major < base.major) {\n return VersionUpgrade.NONE;\n }\n if (update.minor > base.minor) {\n return VersionUpgrade.MINOR;\n }\n if (update.minor < base.minor) {\n return VersionUpgrade.NONE;\n }\n return update.patch > base.patch ? VersionUpgrade.PATCH : VersionUpgrade.NONE;\n}\n","import { TokenInfo } from \"./types\";\n\nexport type TokenInfoChangeKey = Exclude<\n keyof TokenInfo,\n \"address\" | \"chainId\"\n>;\nexport type TokenInfoChanges = Array<TokenInfoChangeKey>;\n\n/**\n * compares two token info key values\n * this subset of full deep equal functionality does not work on objects or object arrays\n * @param a comparison item a\n * @param b comparison item b\n */\nfunction compareTokenInfoProperty(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== typeof b) return false;\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.every((el, i) => b[i] === el);\n }\n return false;\n}\n\n/**\n * Differences between a base list and an updated list.\n */\nexport interface TokenListDiff {\n /**\n * Tokens from updated with chainId/address not present in base list\n */\n readonly added: TokenInfo[];\n /**\n * Tokens from base with chainId/address not present in the updated list\n */\n readonly removed: TokenInfo[];\n /**\n * The token info that changed\n */\n readonly changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n}\n\n/**\n * Computes the diff of a token list where the first argument is the base and the second argument is the updated list.\n * @param base base list\n * @param update updated list\n */\nexport function diffTokenLists(\n base: TokenInfo[],\n update: TokenInfo[]\n): TokenListDiff {\n const indexedBase = base.reduce<{\n [chainId: number]: { [address: string]: TokenInfo };\n }>((memo, tokenInfo) => {\n if (!memo[tokenInfo.chainId]) memo[tokenInfo.chainId] = {};\n memo[tokenInfo.chainId][tokenInfo.address] = tokenInfo;\n return memo;\n }, {});\n\n const newListUpdates = update.reduce<{\n added: TokenInfo[];\n changed: {\n [chainId: number]: {\n [address: string]: TokenInfoChanges;\n };\n };\n index: {\n [chainId: number]: {\n [address: string]: true;\n };\n };\n }>(\n (memo, tokenInfo) => {\n const baseToken = indexedBase[tokenInfo.chainId]?.[tokenInfo.address];\n if (!baseToken) {\n memo.added.push(tokenInfo);\n } else {\n const changes: TokenInfoChanges = Object.keys(tokenInfo)\n .filter(\n (s): s is TokenInfoChangeKey => s !== \"address\" && s !== \"chainId\"\n )\n .filter((s) => {\n return !compareTokenInfoProperty(tokenInfo[s], baseToken[s]);\n });\n if (changes.length > 0) {\n if (!memo.changed[tokenInfo.chainId]) {\n memo.changed[tokenInfo.chainId] = {};\n }\n memo.changed[tokenInfo.chainId][tokenInfo.address] = changes;\n }\n }\n\n if (!memo.index[tokenInfo.chainId]) {\n memo.index[tokenInfo.chainId] = {\n [tokenInfo.address]: true,\n };\n } else {\n memo.index[tokenInfo.chainId][tokenInfo.address] = true;\n }\n\n return memo;\n },\n { added: [], changed: {}, index: {} }\n );\n\n const removed = base.reduce<TokenInfo[]>((list, curr) => {\n if (\n !newListUpdates.index[curr.chainId] ||\n !newListUpdates.index[curr.chainId][curr.address]\n ) {\n list.push(curr);\n }\n return list;\n }, []);\n\n return {\n added: newListUpdates.added,\n changed: newListUpdates.changed,\n removed,\n };\n}\n","import { diffTokenLists } from \"./diffTokenLists\";\nimport { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { TokenInfo } from \"./types\";\n\n/**\n * Returns the minimum version bump for the given list\n * @param baseList the base list of tokens\n * @param updatedList the updated list of tokens\n */\nexport function minVersionBump(\n baseList: TokenInfo[],\n updatedList: TokenInfo[]\n): VersionUpgrade {\n const diff = diffTokenLists(baseList, updatedList);\n if (diff.removed.length > 0) return VersionUpgrade.MAJOR;\n if (diff.added.length > 0) return VersionUpgrade.MINOR;\n if (Object.keys(diff.changed).length > 0) return VersionUpgrade.PATCH;\n return VersionUpgrade.NONE;\n}\n","import { VersionUpgrade } from \"./getVersionUpgrade\";\nimport { Version } from \"./types\";\n\n/**\n * Returns the next version of the list given a base version and the upgrade type\n * @param base current version\n * @param bump the upgrade type\n */\nexport function nextVersion(base: Version, bump: VersionUpgrade): Version {\n switch (bump) {\n case VersionUpgrade.NONE:\n return base;\n\n case VersionUpgrade.MAJOR:\n return { major: base.major + 1, minor: 0, patch: 0 };\n\n case VersionUpgrade.MINOR:\n return {\n major: base.major,\n minor: base.minor + 1,\n patch: 0,\n };\n\n case VersionUpgrade.PATCH:\n return {\n major: base.major,\n minor: base.minor,\n patch: base.patch + 1,\n };\n }\n}\n","import featuredTokenlist from './tokenlist-featured.json';\nimport generatedTokenlist from './tokenlist-generated.json';\nimport chainlist from './chainlist-v1.json';\nimport routerlist from './routerlist-v1.json';\nimport priceFeeds from './pricefeeds.json';\nimport fiatCurrencies from './fiatCurrencies.json';\nimport CurveRouters from './curve.json';\nimport {\n ChainInfo,\n RouterInfo,\n TokenInfo,\n TestnetFaucetInfo,\n CurveRouterInfo,\n} from './types';\n\nexport * from './abis';\nexport * from './types';\nexport * from './isVersionUpdate';\nexport * from './getVersionUpgrade';\nexport * from './diffTokenLists';\nexport * from './minVersionBump';\nexport * from './nextVersion';\nexport * from './versionComparator';\n\nexport const tokenlist = featuredTokenlist.tokens.concat(\n //@ts-ignore\n generatedTokenlist.tokens as TokenInfo[]\n);\n\nexport function getCurveRouterAddress(chainId: number): string {\n const curveRouter = CurveRouters.find(router => router.chainId == chainId);\n if (curveRouter == undefined) {\n throw new Error(`Unable to find CurveRouterNG for chainId ${chainId}`);\n }\n return curveRouter.address;\n}\n\nexport function getChains(): ChainInfo[] {\n return chainlist.chains;\n}\n\nexport function getChain(chainId: number): ChainInfo {\n return chainlist.chains.find((needle: any) => {\n return needle.chainId === chainId;\n }) as ChainInfo;\n}\n\nexport function getTokenByAddress(\n tokenAddress: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (tokenlist.find((token: any) => {\n return (\n token.address.toLowerCase() === tokenAddress.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getPriceFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId);\n}\n\nexport function getTokenFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'crypto');\n}\n\nexport function getFiatFeeds(chainId: number) {\n return priceFeeds.filter(f => f.chainId === chainId && f.type === 'fiat');\n}\n\nexport function getFiatCurrency(symbol: string) {\n return fiatCurrencies.find(\n c => c.symbol.toLowerCase() === symbol.toLowerCase()\n );\n}\n\nexport function getFiatCurrencies() {\n return fiatCurrencies;\n}\n\nexport function getPriceFeed(\n chainId: number,\n baseSymbol: string,\n quoteSymbol?: string\n) {\n const _quoteSymbol = quoteSymbol ? quoteSymbol : 'USD';\n const feed = priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.output === _quoteSymbol &&\n f.chainId === chainId\n );\n if (feed) {\n return feed;\n } else {\n // feed not found, find any feed that matches the base symbol\n return priceFeeds.find(\n f =>\n f.input?.toLowerCase() === baseSymbol.toLowerCase() &&\n f.chainId === chainId\n );\n }\n}\n\nexport function getFeaturedTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n return (\n (featuredTokenlist.tokens.find((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo) ?? null\n );\n}\n\nexport function getTokenBySymbol(\n tokenSymbol: string,\n chainId?: number\n): TokenInfo | null {\n const tokens = tokenlist.filter((token: any) => {\n return (\n token.symbol.toLowerCase() === tokenSymbol.toLowerCase() &&\n (!chainId || token.chainId === chainId)\n );\n }) as TokenInfo[];\n\n if (chainId && tokens && tokens.length > 1) {\n throw new Error(`Duplicate tokens found for symbol ${tokenSymbol}`);\n }\n\n return tokens.length > 0 ? tokens[0] : null;\n}\n\nexport function getTokens(chainId?: number): TokenInfo[] {\n return chainId\n ? (tokenlist.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as TokenInfo[])\n : (tokenlist as TokenInfo[]);\n}\n\nexport function getRouters(chainId: number): RouterInfo[] {\n return routerlist.routers.filter((needle: any) => {\n return needle.chainId === chainId;\n }) as RouterInfo[];\n}\n\nexport function getRouter(\n chainId: number,\n version: string\n): RouterInfo | undefined {\n return routerlist.routers.find((needle: any) => {\n return needle.chainId === chainId && needle.version === version;\n }) as RouterInfo;\n}\n\nexport function getRouterByAddress(\n address: string,\n chainId?: number\n): RouterInfo | undefined {\n const findByAddress = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase();\n\n const findByAddressAndChainId = (router: RouterInfo) =>\n router.address.toLowerCase() === address.toLowerCase() &&\n router.chainId == chainId;\n\n const filter = chainId ? findByAddressAndChainId : findByAddress;\n\n const routerInfo = routerlist.routers.find(filter);\n return routerInfo;\n}\n\nexport function getLatestRouter(chainId: number): RouterInfo {\n const sorted = getRouters(chainId).sort((a, b) => {\n return Date.parse(a.timestamp) - Date.parse(b.timestamp);\n });\n return sorted[sorted.length - 1];\n}\n\nexport function getShortNames(): string[] {\n return chainlist.chains.map(chain => chain.shortName);\n}\n\nexport function getNativeToken(chainId: number): string {\n return chainlist.chains.find(chain => chain.chainId === chainId)\n ?.nativeTokenName!;\n}\n\nexport function getNativeWrappedToken(chainId: number): TokenInfo {\n const nativeTokens = featuredTokenlist.tokens.filter(\n t =>\n t.chainId === chainId &&\n t.tags.map(tag => tag.toLowerCase()).includes('wrapped') &&\n t.tags.map(tag => tag.toLowerCase()).includes('native token')\n ) as TokenInfo[];\n if (nativeTokens.length > 1) {\n throw new Error(\n `Found more than one native wrapped token for chain ${chainId}`\n );\n } else if (nativeTokens.length < 1) {\n throw new Error(`No native wrapped token found for chain ${chainId}`);\n }\n return nativeTokens[0];\n}\n"],"names":["YODL_ROUTER_ABIS","YodlRouterV01","YodlRouterV02","YodlRouterV03","YodlRouterV04","YodlRouterV05","YodlRouterV06","YodlRouterV07","YodlRouterV08","CURVE_ROUTER_ABI","CurveRouterV13Abi","TokenListTagNames","versionComparator","versionA","versionB","major","minor","patch","isVersionUpdate","base","update","VersionUpgrade","getVersionUpgrade","MAJOR","NONE","MINOR","PATCH","compareTokenInfoProperty","a","b","Array","isArray","every","el","i","diffTokenLists","indexedBase","reduce","memo","tokenInfo","chainId","address","newListUpdates","baseToken","added","push","changes","Object","keys","filter","s","length","changed","index","removed","list","curr","minVersionBump","baseList","updatedList","diff","nextVersion","bump","tokenlist","featuredTokenlist","tokens","concat","generatedTokenlist","getCurveRouterAddress","curveRouter","CurveRouters","find","router","undefined","Error","getChains","chainlist","chains","getChain","needle","getTokenByAddress","tokenAddress","token","toLowerCase","getPriceFeeds","priceFeeds","f","getTokenFeeds","type","getFiatFeeds","getFiatCurrency","symbol","fiatCurrencies","c","getFiatCurrencies","getPriceFeed","baseSymbol","quoteSymbol","_quoteSymbol","feed","input","output","getFeaturedTokenBySymbol","tokenSymbol","getTokenBySymbol","getTokens","getRouters","routerlist","routers","getRouter","version","getRouterByAddress","findByAddress","findByAddressAndChainId","routerInfo","getLatestRouter","sorted","sort","Date","parse","timestamp","getShortNames","map","chain","shortName","getNativeToken","nativeTokenName","getNativeWrappedToken","nativeTokens","t","tags","tag","includes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}